base-ui icon indicating copy to clipboard operation
base-ui copied to clipboard

[menu] Remove `disabled` prop from Root

Open michaldudak opened this issue 6 months ago • 3 comments

Removed the disabled prop from Menu.Root and moved it to Menu.Trigger and Menu.SubmenuTrigger.

Closes https://github.com/mui/base-ui/issues/1976.

michaldudak avatar Jun 02 '25 20:06 michaldudak

Open in StackBlitz

npm i https://pkg.pr.new/@base-ui-components/react@2044

commit: b93c5b7

pkg-pr-new[bot] avatar Jun 02 '25 20:06 pkg-pr-new[bot]

Bundle size report

Total Size Change: 🔺+298B(+0.02%) - Total Gzip Change: 🔺+60B(+0.01%) Files: 41 total (0 added, 0 removed, 3 changed)

Show details for 41 more bundles

@base-ui-components/reactparsed: 🔺+111B(+0.04%) gzip: 🔺+20B(+0.02%) @base-ui-components/react/menuparsed: 🔺+111B(+0.10%) gzip: 🔺+17B(+0.05%) @base-ui-components/react/context-menuparsed: 🔺+76B(+0.07%) gzip: 🔺+23B(+0.06%) @base-ui-components/react/accordionparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/alert-dialogparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/avatarparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/checkboxparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/checkbox-groupparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/collapsibleparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/dialogparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/direction-providerparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/fieldparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/fieldsetparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/formparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/inputparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/menubarparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/merge-propsparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/meterparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/navigation-menuparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/number-fieldparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/popoverparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/preview-cardparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/progressparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/radioparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/radio-groupparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/scroll-areaparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/selectparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/separatorparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/sliderparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/switchparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/tabsparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/toastparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/toggleparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/toggle-groupparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/toolbarparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/tooltipparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/unstable-no-ssrparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/unstable-use-media-queryparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/use-renderparsed: 0B(0.00%) gzip: 0B(0.00%) @base-ui-components/react/utilsparsed: 0B(0.00%) gzip: 0B(0.00%) Base UI checkboxparsed: 0B(0.00%) gzip: 0B(0.00%)

Details of bundle changes

Generated by :no_entry_sign: dangerJS against b93c5b7313628c3d2ba8b9e18de43812ef5ed65e

mui-bot avatar Jun 02 '25 20:06 mui-bot

Deploy Preview for base-ui ready!

Name Link
Latest commit b93c5b7313628c3d2ba8b9e18de43812ef5ed65e
Latest deploy log https://app.netlify.com/projects/base-ui/deploys/685129e1a9c5d30008eb0617
Deploy Preview https://deploy-preview-2044--base-ui.netlify.app
Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

netlify[bot] avatar Jun 02 '25 20:06 netlify[bot]

Other components also have a similar issue, so it seems we'd need to change them all together.

But I'm also not convinced yet that it's not worthwhile to still have a disabled prop on the root to allow granular disabled states without wholesale disabling the entire trigger.

It also seems that just because the trigger is disabled, doesn't mean the the root should also be disabled. Tooltips on disabled triggers can be an acceptable use case: https://www.reddit.com/r/UXDesign/comments/1cifb9k/using_tooltips_on_disabled_surfaces_what_is_the/

Though, Tooltip for instance handles the linked issue like this: https://github.com/mui/base-ui/blob/c54a7829999a175ff4c6b6bb9273c648686f6209/packages/react/src/tooltip/root/useTooltipRoot.ts#L87-L89

I think this needs a bit more thought

atomiks avatar Jun 30 '25 01:06 atomiks

All right, I'm putting this on hold for now. With https://github.com/mui/base-ui/pull/2336 adapted to Menu, we might need disabled on both triggers and root parts.

michaldudak avatar Jul 30 '25 15:07 michaldudak

I'm going to continue supporting the prop on both the Trigger and the Root, as it makes more sense when there are multiple triggers present (#3031). Setting disabled on a trigger will disable just this particular trigger, while setting it on the root disables all the triggers.

michaldudak avatar Oct 22 '25 19:10 michaldudak