import { useStore } from '@nanostores/react' import type { TokenDataTypes } from '@pandacss/types' import React, { useEffect, useState } from 'react' import { css } from '../../styled-system/css' import { Center } from '../../styled-system/jsx' import { availableThemes } from '../lib/panda-context' import { currentThemeStore } from '../lib/theme-store' import { useThemeTokens } from '../lib/use-theme-tokens' import { Colors } from './colors' import { FontFamily } from './font-family' import FontTokens from './font-tokens' import { Radii } from './radii' import Sizes from './sizes' type TokenCategory = keyof TokenDataTypes const hasThemes = availableThemes.length > 0 const loadingStyles = css({ width: '40px', height: '40px', border: '2px solid #FFF', borderColor: 'yellow.400', borderBottomColor: 'transparent', borderRadius: '50%', display: 'inline-block', boxSizing: 'border-box', animation: 'spin 0.6s linear infinite', }) function Loader() { return (
) } function ThemeLoading({ children }: { children: React.ReactNode }) { const [isHydrated, setIsHydrated] = useState(false) useStore(currentThemeStore) useEffect(() => { setIsHydrated(true) }, []) if (!isHydrated) { return } return <>{children} } function createTokenPage( tokenType: T, render: (tokens: ReturnType) => React.ReactNode, ) { return function TokenPage() { const tokens = useThemeTokens(tokenType) return hasThemes ? {render(tokens)} : <>{render(tokens)} } } export const SizesPage = createTokenPage('sizes', (tokens) => ) export const SpacingPage = createTokenPage('spacing', (tokens) => ) export const FontSizesPage = createTokenPage('fontSizes', (tokens) => ( )) export const FontWeightsPage = createTokenPage('fontWeights', (tokens) => ( )) export const LetterSpacingsPage = createTokenPage('letterSpacings', (tokens) => ( )) export const LineHeightsPage = createTokenPage('lineHeights', (tokens) => ( )) export const RadiiPage = createTokenPage('radii', (tokens) => ) export const FontsPage = createTokenPage('fonts', (tokens) => ) export function ColorsPage() { const theme = hasThemes ? useStore(currentThemeStore) : undefined return hasThemes ? ( ) : ( ) }