UNPKG

@patreon/studio

Version:

Patreon Studio Design System

41 lines 2.67 kB
'use client'; import React, { useEffect, useMemo } from 'react'; import { ThemeProvider } from 'styled-components'; import { tokenDefinitionsClassName } from '../../styles/token-definitions'; import { tokenSharedModeClassName, tokenScreenModeClassName, tokenColorModeClassName } from '../../styles/token-modes'; import { FeatureFlagProvider } from '../FeatureFlagProvider'; import { IncrementLoggerProvider } from '../IncrementLogger'; import { OverlayStackProvider } from '../OverlayStackProvider'; import { TokenModeProvider } from '../TokenModeProvider'; import { TokenValueCache } from '../TokenValueCache'; 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