feat: modernize Menu to the latest Material Design specs
Les mainteneurs répondent en général sous 7 jours
@matkoson y travaille déjà.
Depuis le 22/7/2026.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 35/100
- Type d'issue
- Fonctionnalité
- Clarté
- Plutôt claire
- Activité
- Calme
- Stack technique
- react-native, typescript
Piste de recherche
Commencez par le composant Menu existant et comparez son implémentation avec celle des composants modernisés TextInput/TextField, Switch, Checkbox et FAB. Utilisez les spécifications Material 3 liées concernant les menus pour déterminer les exigences relatives à la couleur lorsqu'il n'est pas sélectionné, à la typographie, à la forme, à la sélection, au regroupement, aux sous-menus et au texte d'accompagnement. Le travail est considéré comme terminé lorsque le Menu de base correspond au comportement et au style spécifiés, et que les fonctionnalités expressives demandées ont été prises en charge ou clairement délimitées.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
- Modernize the Menu component to the latest specs. Reuse the newly introduced theme tokens (typography, motion, shape etc).
See https://m3.material.io/components/menus for the full picture. - Extract component specific tokens for easier maintenance.
- Get inspired from TextInput/TextField, Switch, Checkbox, FAB components which have gone through modernization.
Current State
Menu
MD3 spec: Menus
Specs link: https://m3.material.io/components/menus/specs
Color tokens
- Container background:
theme.colors.elevation[level2]which resolves tosurfaceContainerLow✅ (standard color scheme) Menu.Itemlabel text:onSurface✅Menu.Itemleading/trailing icon:onSurfaceVariant✅Menu.Itemdisabled opacity:stateOpacity.disabled(0.38) ✅- No selected item state: spec defines
tertiaryContainerbg /onTertiaryContainertext+icon for selected menu items - No vibrant color scheme (M3 Expressive):
tertiaryContainercontainer /onTertiaryContainericons+labels /tertiaryselected bg /onTertiaryselected text+icon
Spacing / sizing
- Container
paddingVertical: 8✅ - Item min/max width: 112dp / 280dp ✅
- Item
paddingHorizontal: 12✅ - Icon leading margin: 12dp after icon ✅
- Item height: 48dp (standard), 32dp (dense) – baseline menu values ✅
-
Menu.Itemlabel text usesbodyLarge; spec requireslabelLarge -
Menu.Itemhas no supporting text slot (bodySmall); spec anatomy includes optional supporting text per item -
Menu.Itemhas no trailing supporting text slot (labelLarge); spec anatomy includes optional trailing text per item
Shape
- Container:
borderRadius: theme.roundness= 4dp; speccorner.large=4 * roundness= 16dp ❌ - First child item: spec
corner.mediumtop corners; not implemented - Last child item: spec
corner.mediumbottom corners; not implemented - Selected item: spec
corner.medium; not implemented - No per-item shape rounding at all; all items are rectangles
Behavior
- Open/close: scale + opacity animation ✅ (but uses
Easing.bezier(0.4, 0, 0.2, 1)from old M3 motion guidelines; M3 Expressive uses spring-based motion) - Dismisses on outside press ✅
- Keyboard-aware positioning ✅
- RTL support ✅
- Escape key dismissal on web ✅
- Back handler on Android ✅
- No item selection state / active item support
- No grouped layout (gaps between item groups); current workaround uses
Dividerwhich is not the spec-aligned grouping mechanism for vertical menus - No submenu support
- No badge support on items
- M3 Expressive vertical menu shape morphing (active container shape animates as focus moves to submenu) not implemented
Notes
- The current component implements the baseline menu variant only. The M3 Expressive vertical menu is a largely new feature surface (new shapes, selection states, vibrant color scheme, submenu motion, grouped layout) that requires significant additions.
- The
borderRadius: theme.roundnessbug is a significant visual regression vs spec – the container should be visibly rounded.
- Langage dominant
- TypeScript
- Étoiles
- 14.5k
- Forks
- 2.3k
- Merge moyen
- 8 j 2 h
- PR mergées (30 j)
- 4
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de callstack/react-native-paper
-
Menu ignores the keyboard when it mounts while the keyboard is already openPeut-être pris @manchoudhary l’a pris il y a 31 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
callstack/react-native-paper#5096 ·
Les mainteneurs répondent en général sous 7 jours
-
Color Picker Popup Is Obscured On "Guides -> Theming -> Creating Dynamic Theme Colors" Documentation On Both v5 and v6Peut-être pris @fatihcvs l’a pris il y a 26 jours. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
callstack/react-native-paper#5093 ·
Les mainteneurs répondent en général sous 7 jours
-
Tooltip: onPress event object is not propagated to parent component on nativePeut-être pris @Shevilll l’a pris il y a 118 jours. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
callstack/react-native-paper#5003 ·
Les mainteneurs répondent en général sous 7 jours
-
Snackbar stays mounted after `visible=false` under new architecture (iOS + Android)Peut-être pris @momomuchu l’a pris il y a 106 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
callstack/react-native-paper#4951 ·
Les mainteneurs répondent en général sous 7 jours
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
callstack/react-native-paper#4881 ·
Les mainteneurs répondent en général sous 7 jours
Toutes les issues de callstack/react-native-paper
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
apache/rocketmq-dashboard#6872 ·
Les mainteneurs répondent en général sous 3 jours
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
fab-geocommuns/RNB-site#539 ·
Les mainteneurs répondent en général sous 2 jours
-
Guest multiview tile label leaks raw virtual-source-id "Whip" instead of the guest name / slot labelOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
Eyevinn/open-live-studio#211 ·
Les mainteneurs répondent en général sous 1 jour
-
documentation good first issue
Difficulté 2/5 Une demi-journée Accessibilité débutants 72/100
sujithputta02/Esapay#13 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
ehmpathy/rhachet-roles-bhuild#468 ·
Les mainteneurs répondent en général sous 1 jour