feat: modernize Menu to the latest Material Design specs
Mantenedores costumam responder em até 7 dias
@matkoson já está trabalhando nisso.
Desde 22/7/2026.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 35/100
- Tipo de issue
- Funcionalidade
- Clareza
- Razoavelmente clara
- Status de atividade
- Pouca atividade
- Stack de tecnologia
- react-native, typescript
Direção de pesquisa
Comece com o componente Menu existente e compare sua implementação com os componentes modernizados TextInput/TextField, Switch, Checkbox e FAB. Use as especificações vinculadas do Material 3 para menus para mapear os requisitos de cor quando não selecionado, tipografia, forma, seleção, agrupamento, submenu e texto de apoio. Considera-se concluído quando o Menu básico corresponder ao comportamento e ao estilo especificados, e os recursos expressivos solicitados tiverem sido implementados ou claramente delimitados.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
- 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.
- Linguagem predominante
- TypeScript
- Estrelas
- 14.5k
- Forks
- 2.3k
- Merge médio
- 6d 2h
- PRs com merge (30d)
- 1
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de callstack/react-native-paper
-
Menu ignores the keyboard when it mounts while the keyboard is already openTalvez já em andamento @manchoudhary assumiu há 36 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
callstack/react-native-paper#5096 ·
Mantenedores costumam responder em até 7 dias
-
Color Picker Popup Is Obscured On "Guides -> Theming -> Creating Dynamic Theme Colors" Documentation On Both v5 and v6Talvez já em andamento @fatihcvs assumiu há 30 dias. Abertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
callstack/react-native-paper#5093 ·
Mantenedores costumam responder em até 7 dias
-
Tooltip: onPress event object is not propagated to parent component on nativeTalvez já em andamento @Shevilll assumiu há 122 dias. Abertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
callstack/react-native-paper#5003 ·
Mantenedores costumam responder em até 7 dias
-
Snackbar stays mounted after `visible=false` under new architecture (iOS + Android)Talvez já em andamento @momomuchu assumiu há 110 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
callstack/react-native-paper#4951 ·
Mantenedores costumam responder em até 7 dias
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
callstack/react-native-paper#4881 ·
Mantenedores costumam responder em até 7 dias
Todas as issues de callstack/react-native-paper
Issues semelhantes
-
engine-rs P3 review-deferral wasm
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
maniator/verticopolis#1154 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
Mantenedores costumam responder em até 1 dia
-
Bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
telerik/kendo-react#3861 ·
Mantenedores costumam responder em até 1 dia
-
[bug]: use-mobile.ts uses pixel logic, causing UI state de-sync with Tailwind CSS rem breakpointsAbertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
task
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100