/** * iOS Permission-Dialog-Screenshots für den Onboarding-Pre-Explainer. * * Pro Sprache liegen die Screenshots in `assets/onboarding//`. Falls * eine Sprache nicht (oder noch nicht) verfügbar ist, fällt der Resolver auf * `de` zurück. * * Diese Maps explizit mit `require(...)` deklarieren — RN/Metro kann keine * dynamischen Pfade auflösen. */ type Dialog = 'url_filter' | 'screen_time'; type Lang = 'de' | 'en' | 'fr' | 'ar'; // eslint-disable-next-line @typescript-eslint/no-require-imports const URL_FILTER_DE = require('../assets/onboarding/de/url_filter_permission.jpeg'); // eslint-disable-next-line @typescript-eslint/no-require-imports const SCREEN_TIME_DE = require('../assets/onboarding/de/screen_time_permission.jpeg'); // TODO: en / fr / ar Screenshots ergänzen sobald User uploaded: // require('../assets/onboarding/en/url_filter_permission.jpeg'), etc. const SCREENSHOTS: Record>> = { url_filter: { de: URL_FILTER_DE, }, screen_time: { de: SCREEN_TIME_DE, }, }; /** * Resolves the right screenshot for the current language, with de-fallback. * Returns the result of `require(...)` (an opaque module-handle for Metro). */ export function getPermissionScreenshot(dialog: Dialog, lang: string): number { const normalized = ( lang === 'de' || lang === 'en' || lang === 'fr' || lang === 'ar' ? lang : 'de' ) as Lang; const map = SCREENSHOTS[dialog]; return map[normalized] ?? map.de!; } /** * Wo der Pointer-Marker auf dem Screenshot positioniert werden soll. * Werte sind Prozent (0..100) relativ zum Container. * * Beide iOS-Dialoge haben den korrekten Button am Bottom (~85-88% Y, 50% X). * Falls Apple das Layout pro Locale anders rendert — pro-Lang-Overrides * hier ergänzen. */ export function getPointerPosition(dialog: Dialog): { xPercent: number; yPercent: number } { switch (dialog) { case 'url_filter': // Button "Erlauben" am unteren Rand des Modals return { xPercent: 50, yPercent: 86 }; case 'screen_time': // Button "Fortfahren" am unteren Rand return { xPercent: 50, yPercent: 86 }; } }