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