/* eslint-disable @typescript-eslint/no-var-requires */ /** * Expo Config-Plugin — setzt den AppTheme-Parent auf * Theme.MaterialComponents.DayNight.NoActionBar.Bridge damit react-native-bottom-tabs' * BadgeDrawable nicht mit IllegalArgumentException crasht. * * Warum Bridge-Variante: bridged MaterialComponents ist ein Superset von AppCompat — * alle AppCompat-Abhängigkeiten im RN-Stack bleiben kompatibel, aber Material-APIs * (BadgeDrawable, NavigationBarMenuView etc.) funktionieren. * * Warum Plugin statt Hand-Edit: `prebuild --clean` regeneriert styles.xml aus dem * Expo-AppCompat-Default. Dieses Plugin patcht den Parent-Wert nach jedem prebuild * idempotent per withAndroidStyles (offizielles Config-Plugins-API). */ const { withAndroidStyles } = require('@expo/config-plugins'); const MATERIAL_THEME = 'Theme.MaterialComponents.DayNight.NoActionBar.Bridge'; function withMaterialThemeAndroid(config) { return withAndroidStyles(config, (cfg) => { const styles = cfg.modResults.resources.style; if (!Array.isArray(styles)) return cfg; const appTheme = styles.find( (s) => s.$ && s.$['name'] === 'AppTheme', ); if (appTheme) { appTheme.$['parent'] = MATERIAL_THEME; } return cfg; }); } module.exports = withMaterialThemeAndroid;