@patreon/studio
Version:
Patreon Studio Design System
41 lines • 2.72 kB
JSX
'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