UNPKG

@patreon/studio

Version:

Patreon Studio Design System

41 lines 2.72 kB
'use client'; import React, { useEffect, useMemo } from 'react'; import { ThemeProvider } from 'styled-components'; import { FeatureFlagProvider } from '~/components/FeatureFlagProvider'; import { IncrementLoggerProvider } from '~/components/IncrementLogger'; import { OverlayStackProvider } from '~/components/OverlayStackProvider'; import { TokenModeProvider } from '~/components/TokenModeProvider'; import { TokenValueCache } from '~/components/TokenValueCache'; import { tokenDefinitionsClassName } from '~/styles/token-definitions'; import { tokenColorModeClassName, tokenScreenModeClassName, tokenSharedModeClassName } from '~/styles/token-modes'; export const StudioProvider = ({ children, tokenSet, tokenColorMode = 'auto', incrementLogger, featureFlags = {}, }) => { // TODO: remove this once migrated to `TokenColorMode` const calculatedTokenColorMode = tokenColorMode ?? tokenSet; const calculatedTheme = useMemo(() => ({ tokenColorMode: calculatedTokenColorMode }), [calculatedTokenColorMode]); useEffect(() => { document.documentElement.classList.add(tokenDefinitionsClassName()); document.documentElement.classList.add(tokenSharedModeClassName()); }, []); useEffect(() => { document.documentElement.classList.toggle(tokenColorModeClassName('auto'), calculatedTokenColorMode === 'auto'); document.documentElement.classList.toggle(tokenColorModeClassName('light'), calculatedTokenColorMode === 'light'); document.documentElement.classList.toggle(tokenColorModeClassName('dark'), calculatedTokenColorMode === 'dark'); }, [calculatedTokenColorMode]); const disableResponsiveTypescale = featureFlags.disable_responsive_typescale ?? false; useEffect(() => { document.documentElement.classList.toggle(tokenScreenModeClassName('auto'), !disableResponsiveTypescale); document.documentElement.classList.toggle(tokenScreenModeClassName('mobile'), disableResponsiveTypescale); }, [disableResponsiveTypescale]); return (<ThemeProvider theme={calculatedTheme}> <FeatureFlagProvider featureFlags={featureFlags}> <IncrementLoggerProvider incrementLogger={incrementLogger}> <TokenModeProvider rootColorMode={calculatedTokenColorMode} rootScreenMode={disableResponsiveTypescale ? 'mobile' : 'auto'} currentColorMode={calculatedTokenColorMode} currentScreenMode={disableResponsiveTypescale ? 'mobile' : 'auto'}> <TokenValueCache> <OverlayStackProvider>{children}</OverlayStackProvider> </TokenValueCache> </TokenModeProvider> </IncrementLoggerProvider> </FeatureFlagProvider> </ThemeProvider>); }; //# sourceMappingURL=index.jsx.map