"use client"; import { useEffect } from "react"; import { init, mountMiniAppSync, mountThemeParamsSync, bindThemeParamsCssVars, } from "@telegram-apps/sdk-react"; import { fixSurfaceContrast } from "@/hooks/use-telegram-theme"; /** * Wraps the app with Telegram Mini App SDK initialization. * Calls init(acceptCustomStyles), mounts theme params (binds --tg-theme-* CSS vars), * and mounts the mini app. Does not call ready() here — the app calls * callMiniAppReadyOnce() from lib/telegram-ready when the first visible screen * has finished loading, so Telegram keeps its native loading animation until then. * Theme is set before first paint by the inline script in layout.tsx (URL hash); * useTelegramTheme() in the app handles ongoing theme changes. */ export function TelegramProvider({ children, }: { children: React.ReactNode; }) { useEffect(() => { const cleanup = init({ acceptCustomStyles: true }); if (mountThemeParamsSync.isAvailable()) { mountThemeParamsSync(); } if (bindThemeParamsCssVars.isAvailable()) { bindThemeParamsCssVars(); } fixSurfaceContrast(); void document.documentElement.offsetHeight; if (mountMiniAppSync.isAvailable()) { mountMiniAppSync(); } return cleanup; }, []); return <>{children}; }