Un pot de crédits global (BASIC 100 / PRO 1 000 / BUSINESS 4 000) remplace les seaux par fonction côté débit. Packs one-shot S/M/L, admin sans seaux legacy, usage multi-features, hints de coût, anti-flash thème et hydratation admin. Inclut aussi le pipeline slides renforcé et la page publique polishée.
30 lines
1.2 KiB
TypeScript
30 lines
1.2 KiB
TypeScript
import { headers } from 'next/headers'
|
||
import { detectUserLanguage, parseAcceptLanguage } from '@/lib/i18n/detect-user-language'
|
||
import { loadTranslations } from '@/lib/i18n/load-translations'
|
||
import { PublicProviders } from '@/components/public-providers'
|
||
|
||
/**
|
||
* Le body racine est en hauteur d’écran avec débordement masqué
|
||
* (pour l’application connectée). Les pages publiques (accueil, tarifs,
|
||
* notes publiées) doivent pouvoir défiler : on crée un conteneur de
|
||
* défilement qui couvre tout l’écran, indépendant du body.
|
||
*/
|
||
export default async function PublicLayout({ children }: { children: React.ReactNode }) {
|
||
const headersList = await headers()
|
||
const browserLang = parseAcceptLanguage(headersList.get('accept-language'))
|
||
const initialLanguage = await detectUserLanguage(browserLang)
|
||
const initialTranslations = await loadTranslations(initialLanguage)
|
||
|
||
return (
|
||
<PublicProviders initialLanguage={initialLanguage} initialTranslations={initialTranslations}>
|
||
<div
|
||
data-public-scroll-root
|
||
className="fixed inset-0 z-0 overflow-y-auto overflow-x-hidden overscroll-y-contain"
|
||
style={{ WebkitOverflowScrolling: 'touch' }}
|
||
>
|
||
{children}
|
||
</div>
|
||
</PublicProviders>
|
||
)
|
||
}
|