feat: modernize Menu to the latest Material Design specs
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- react-native, typescript
Línea de trabajo
Comienza con el componente Menu existente y compara su implementación con los componentes modernizados TextInput/TextField, Switch, Checkbox y FAB. Usa las especificaciones vinculadas de Material 3 para menús para definir los requisitos de color sin seleccionar, tipografía, forma, selección, agrupación, submenús y texto de apoyo. Se considera terminado cuando el Menu básico coincide con el comportamiento y el estilo especificados, y las funcionalidades expresivas solicitadas se han abordado o se han delimitado claramente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
- 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.
- Lenguaje dominante
- TypeScript
- Estrellas
- 14.5k
- Forks
- 2.2k
- Merge medio
- 3 d 22 h
- PR fusionados (30 d)
- 8
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de callstack/react-native-paper
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
callstack/react-native-paper#5096 ·
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
callstack/react-native-paper#5093 ·
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
callstack/react-native-paper#5003 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
callstack/react-native-paper#4951 ·
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
callstack/react-native-paper#4881 ·
Los mantenedores suelen responder en 2 días
Todos los issues de callstack/react-native-paper
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
aiko-chan-ai/DiscordBotClient#380 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
vercel/ai-elements#507 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 Medio día Aptitud para principiantes 84/100
anaclumos/qa-interns#148 · 1 comentario ·
Los mantenedores suelen responder en 1 día