@space-man/react-theme-animation 2.0.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +90 -464
  2. package/dist/core/index.cjs +74 -0
  3. package/dist/core/index.cjs.map +1 -0
  4. package/dist/{esm/types/index.d.ts → core/index.d.cts} +30 -12
  5. package/dist/{cjs/types → core}/index.d.ts +30 -12
  6. package/dist/core/index.js +66 -0
  7. package/dist/core/index.js.map +1 -0
  8. package/dist/index.cjs +1756 -0
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.cts +4 -0
  11. package/dist/index.d.ts +4 -0
  12. package/dist/index.js +1706 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/react/index.cjs +1742 -0
  15. package/dist/react/index.cjs.map +1 -0
  16. package/dist/react/index.d.cts +224 -0
  17. package/dist/react/index.d.ts +224 -0
  18. package/dist/react/index.js +1697 -0
  19. package/dist/react/index.js.map +1 -0
  20. package/dist/tanstack/index.cjs +34 -0
  21. package/dist/tanstack/index.cjs.map +1 -0
  22. package/dist/tanstack/index.d.cts +20 -0
  23. package/dist/tanstack/index.d.ts +20 -0
  24. package/dist/tanstack/index.js +27 -0
  25. package/dist/tanstack/index.js.map +1 -0
  26. package/package.json +66 -37
  27. package/dist/cjs/components/SpacemanThemeProvider.d.ts +0 -57
  28. package/dist/cjs/components/SpacemanThemeProvider.js +0 -113
  29. package/dist/cjs/components/ThemeSelector.d.ts +0 -3
  30. package/dist/cjs/components/ThemeSelector.js +0 -39
  31. package/dist/cjs/components/ThemeSwitcher.d.ts +0 -3
  32. package/dist/cjs/components/ThemeSwitcher.js +0 -81
  33. package/dist/cjs/components/ViteThemeProvider.d.ts +0 -38
  34. package/dist/cjs/components/ViteThemeProvider.js +0 -117
  35. package/dist/cjs/components/ui/select.d.ts +0 -15
  36. package/dist/cjs/components/ui/select.js +0 -83
  37. package/dist/cjs/hooks/use-theme-animation.d.ts +0 -2
  38. package/dist/cjs/hooks/use-theme-animation.js +0 -234
  39. package/dist/cjs/index.d.ts +0 -8
  40. package/dist/cjs/index.js +0 -23
  41. package/dist/cjs/types/index.js +0 -9
  42. package/dist/cjs/utils/animations.d.ts +0 -21
  43. package/dist/cjs/utils/animations.js +0 -189
  44. package/dist/esm/components/SpacemanThemeProvider.d.ts +0 -57
  45. package/dist/esm/components/SpacemanThemeProvider.js +0 -108
  46. package/dist/esm/components/ThemeSelector.d.ts +0 -3
  47. package/dist/esm/components/ThemeSelector.js +0 -35
  48. package/dist/esm/components/ThemeSwitcher.d.ts +0 -3
  49. package/dist/esm/components/ThemeSwitcher.js +0 -77
  50. package/dist/esm/components/ViteThemeProvider.d.ts +0 -38
  51. package/dist/esm/components/ViteThemeProvider.js +0 -112
  52. package/dist/esm/components/ui/select.d.ts +0 -15
  53. package/dist/esm/components/ui/select.js +0 -39
  54. package/dist/esm/hooks/use-theme-animation.d.ts +0 -2
  55. package/dist/esm/hooks/use-theme-animation.js +0 -230
  56. package/dist/esm/index.d.ts +0 -8
  57. package/dist/esm/index.js +0 -7
  58. package/dist/esm/types/index.js +0 -6
  59. package/dist/esm/utils/animations.d.ts +0 -21
  60. package/dist/esm/utils/animations.js +0 -177
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/types/index.ts","../../src/core/utils/animations.ts","../../src/react/hooks/use-theme-animation.ts","../../src/react/components/shared-theme-context.ts","../../src/react/components/ThemeSwitcher.tsx","../../src/react/components/ui/select.tsx","../../src/react/components/ThemeSelector.tsx","../../src/react/components/provider-helpers.ts","../../src/react/components/SpacemanThemeProvider.tsx","../../src/react/components/NextThemeProvider.tsx","../../src/react/hooks/use-sync-server-theme-storage.ts","../../src/tanstack/helpers.ts","../../src/react/components/TanStackThemeProvider.tsx","../../src/react/components/ViteThemeProvider.tsx"],"names":["ThemeAnimationType","styleElement","isBrowser","useState","useEffect","useRef","useCallback","flushSync","createContext","useContext","jsxs","jsx","clsx","motion","SelectPrimitive","Fragment","React","useMemo","useSyncExternalStore"],"mappings":"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","file":"index.cjs","sourcesContent":["import { RefObject } from 'react'\n\nexport enum ThemeAnimationType {\n CIRCLE = 'circle',\n BLUR_CIRCLE = 'blur-circle',\n SLIDE = 'slide',\n}\n\nexport type SlideDirection =\n | 'left'\n | 'right'\n | 'top'\n | 'bottom'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n\nexport type Theme = 'light' | 'dark' | 'system'\nexport type ColorTheme = string\nexport type SystemThemeMode = 'css' | 'js'\n\nexport interface UseThemeAnimationProps {\n duration?: number\n easing?: string\n animationType?: ThemeAnimationType\n blurAmount?: number\n styleId?: string\n\n themes?: Theme[]\n colorThemes?: ColorTheme[]\n defaultTheme?: Theme\n defaultColorTheme?: ColorTheme\n\n globalClassName?: string\n colorThemePrefix?: string\n attribute?: 'class' | 'data-theme'\n value?: Record<string, string>\n enableColorScheme?: boolean\n\n storageKey?: string\n colorStorageKey?: string\n\n theme?: Theme\n colorTheme?: ColorTheme\n\n onThemeChange?: (theme: Theme) => void\n onColorThemeChange?: (colorTheme: ColorTheme) => void\n\n initialTheme?: Theme\n initialColorTheme?: ColorTheme\n systemThemeMode?: SystemThemeMode\n\n // Slide animation options (only valid when animationType is SLIDE)\n slideDirection?: SlideDirection\n slideFromX?: number // custom from translate X (%)\n slideFromY?: number // custom from translate Y (%)\n slideToX?: number // custom to translate X (%)\n slideToY?: number // custom to translate Y (%)\n}\n\nexport interface UseThemeAnimationReturn {\n ref: RefObject<HTMLButtonElement | null>\n\n theme: Theme\n colorTheme: ColorTheme\n resolvedTheme: 'light' | 'dark'\n systemTheme: 'light' | 'dark'\n\n setTheme: (theme: Theme) => void\n setColorTheme: (colorTheme: ColorTheme) => void\n\n switchTheme: (theme: Theme, animationOff?: boolean) => Promise<void>\n switchColorTheme: (colorTheme: string) => void\n\n toggleTheme: (animationOff?: boolean) => Promise<void>\n toggleLightTheme: (animationOff?: boolean) => Promise<void>\n toggleDarkTheme: (animationOff?: boolean) => Promise<void>\n toggleColorTheme: () => void\n\n createColorThemeToggle: (targetColorTheme: string) => () => void\n isColorThemeActive: (targetColorTheme: string) => boolean\n}\n\nexport interface ThemeSwitcherProps {\n themes?: Theme[]\n currentTheme?: Theme\n onThemeChange?: (theme: Theme) => void\n\n animationType?: ThemeAnimationType\n duration?: number\n\n className?: string\n size?: 'sm' | 'md' | 'lg'\n variant?: 'default' | 'outline' | 'ghost'\n\n icons?: {\n light?: React.ReactNode\n dark?: React.ReactNode\n system?: React.ReactNode\n }\n}\n\nexport interface ThemeSelectorProps {\n themes?: Theme[]\n colorThemes?: ColorTheme[]\n currentTheme?: Theme\n currentColorTheme?: ColorTheme\n\n onThemeChange?: (theme: Theme) => void\n onColorThemeChange?: (colorTheme: ColorTheme) => void\n\n animationType?: ThemeAnimationType\n duration?: number\n\n className?: string\n placeholder?: string\n\n themeLabel?: string\n colorThemeLabel?: string\n}\n","import { ThemeAnimationType } from '../types'\n\nconst isBrowser = typeof window !== 'undefined'\n\nexport const injectBaseStyles = (): void => {\n if (isBrowser) {\n const styleId = 'spaceman-theme-base-style'\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style')\n style.id = styleId\n const isHighResolution =\n window.innerWidth >= 3000 || window.innerHeight >= 2000\n\n style.textContent = `\n ::view-transition-old(root),\n ::view-transition-new(root) {\n animation: none;\n mix-blend-mode: normal;\n ${isHighResolution ? 'transform: translateZ(0);' : ''}\n }\n \n ${\n isHighResolution\n ? `\n ::view-transition-group(root),\n ::view-transition-image-pair(root),\n ::view-transition-old(root),\n ::view-transition-new(root) {\n backface-visibility: hidden;\n perspective: 1000px;\n transform: translate3d(0, 0, 0);\n }\n `\n : ''\n }\n `\n document.head.appendChild(style)\n }\n }\n}\n\nexport const createBlurCircleMask = (blur: number): string => {\n const isHighResolution =\n isBrowser && (window.innerWidth >= 3000 || window.innerHeight >= 2000)\n\n const blurFilter = `<filter id=\"blur\"><feGaussianBlur stdDeviation=\"${blur}\" /></filter>`\n const circleRadius = isHighResolution ? 20 : 25\n\n return `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-50 -50 100 100\"><defs>${blurFilter}</defs><circle cx=\"0\" cy=\"0\" r=\"${circleRadius}\" fill=\"white\" filter=\"url(%23blur)\"/></svg>')`\n}\n\nexport const getSystemTheme = (): 'light' | 'dark' => {\n if (!isBrowser) return 'light'\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n}\n\nexport const resolveTheme = (theme: string): 'light' | 'dark' => {\n if (theme === 'system') {\n return getSystemTheme()\n }\n return theme === 'dark' ? 'dark' : 'light'\n}\n\nexport const resolveThemeForServer = (\n theme: string\n): 'light' | 'dark' | 'system' => {\n if (theme === 'system') {\n return 'system'\n }\n return theme === 'dark' ? 'dark' : 'light'\n}\n\nexport const supportsViewTransitions = (): boolean => {\n return isBrowser && 'startViewTransition' in document\n}\n\nexport const prefersReducedMotion = (): boolean => {\n return (\n isBrowser && window.matchMedia('(prefers-reduced-motion: reduce)').matches\n )\n}\n\nexport interface AnimationConfig {\n a?: number\n b?: number\n x: number\n y: number\n duration: number\n easing: string\n animationType: ThemeAnimationType\n blurAmount: number\n styleId: string\n}\n\nexport const createCircleAnimation = (config: AnimationConfig): void => {\n const { x, y, duration, easing } = config\n\n // Calculate the distance to each corner of the viewport\n const topLeft = Math.hypot(x, y)\n const topRight = Math.hypot(window.innerWidth - x, y)\n const bottomLeft = Math.hypot(x, window.innerHeight - y)\n const bottomRight = Math.hypot(window.innerWidth - x, window.innerHeight - y)\n\n // Find the maximum distance to ensure animation covers the entire viewport\n const maxRadius = Math.max(topLeft, topRight, bottomLeft, bottomRight)\n\n document.documentElement.animate(\n {\n clipPath: [\n `circle(0px at ${x}px ${y}px)`,\n `circle(${maxRadius}px at ${x}px ${y}px)`,\n ],\n },\n {\n duration,\n easing,\n pseudoElement: '::view-transition-new(root)',\n }\n )\n}\n\nexport const createSlideAnimation = (config: AnimationConfig): void => {\n const { a = -100, b = 0, x = 0, y = 0, duration, styleId } = config\n\n const styleElement = document.createElement('style')\n styleElement.id = styleId\n\n styleElement.textContent = `\n ::view-transition-old(root) {\n animation-delay: ${duration}ms;\n }\n \n ::view-transition-new(root) {\n animation: move-in ${duration}ms;\n animation-timing-function: cubic-bezier(0.66, 0, 0.34, 1);\n }\n \n @keyframes move-in {\n from {\n translate: ${a}% ${b}%;\n }\n to {\n translate: ${x}% ${y}%;\n }\n }\n `\n\n document.head.appendChild(styleElement)\n\n // Clean up after animation\n setTimeout(() => {\n const styleElement = document.getElementById(styleId)\n if (styleElement) {\n styleElement.remove()\n }\n }, duration)\n}\n\nexport const createBlurCircleAnimation = (config: AnimationConfig): void => {\n const { x, y, duration, easing, blurAmount, styleId } = config\n\n const existingStyle = document.getElementById(styleId)\n if (existingStyle) {\n existingStyle.remove()\n }\n\n const viewportSize = Math.max(window.innerWidth, window.innerHeight) + 200\n const isHighResolution =\n window.innerWidth >= 3000 || window.innerHeight >= 2000\n const scaleFactor = isHighResolution ? 2.5 : 4\n const optimalMaskSize = isHighResolution\n ? Math.min(viewportSize * scaleFactor, 5000)\n : viewportSize * scaleFactor\n\n const topLeft = Math.hypot(x, y)\n const topRight = Math.hypot(window.innerWidth - x, y)\n const bottomLeft = Math.hypot(x, window.innerHeight - y)\n const bottomRight = Math.hypot(window.innerWidth - x, window.innerHeight - y)\n const maxRadius = Math.max(topLeft, topRight, bottomLeft, bottomRight)\n\n const styleElement = document.createElement('style')\n styleElement.id = styleId\n\n const blurFactor = isHighResolution ? 1.5 : 1.2\n const finalMaskSize = Math.max(optimalMaskSize, maxRadius * 2.5)\n\n styleElement.textContent = `\n ::view-transition-group(root) {\n animation-duration: ${duration}ms;\n animation-timing-function: ${\n isHighResolution\n ? 'cubic-bezier(0.2, 0, 0.2, 1)'\n : 'linear(' +\n '0 0%, 0.2342 12.49%, 0.4374 24.99%,' +\n '0.6093 37.49%, 0.6835 43.74%,' +\n '0.7499 49.99%, 0.8086 56.25%,' +\n '0.8593 62.5%, 0.9023 68.75%, 0.9375 75%,' +\n '0.9648 81.25%, 0.9844 87.5%,' +\n '0.9961 93.75%, 1 100%' +\n ')'\n };\n will-change: transform;\n }\n \n ::view-transition-new(root) {\n mask: ${createBlurCircleMask(blurAmount * blurFactor)} 0 0 / 100% 100% no-repeat;\n mask-position: ${x}px ${y}px;\n animation: spaceman-mask-scale ${duration}ms ${easing};\n transform-origin: ${x}px ${y}px;\n will-change: mask-size, mask-position;\n }\n \n ::view-transition-old(root),\n .dark::view-transition-old(root) {\n animation: spaceman-mask-scale ${duration}ms ${easing};\n transform-origin: ${x}px ${y}px;\n z-index: -1;\n will-change: mask-size, mask-position;\n }\n \n @keyframes spaceman-mask-scale {\n 0% {\n mask-size: 0px;\n mask-position: ${x}px ${y}px;\n }\n 100% {\n mask-size: ${finalMaskSize}px;\n mask-position: ${x - finalMaskSize / 2}px ${y - finalMaskSize / 2}px;\n }\n }\n `\n\n document.head.appendChild(styleElement)\n\n setTimeout(() => {\n const styleElement = document.getElementById(styleId)\n if (styleElement) {\n styleElement.remove()\n }\n }, duration)\n}\n","import { useEffect, useRef, useState, useCallback } from 'react'\nimport { flushSync } from 'react-dom'\nimport {\n UseThemeAnimationProps,\n UseThemeAnimationReturn,\n ThemeAnimationType,\n Theme,\n} from '../../core/types'\nimport {\n injectBaseStyles,\n resolveTheme,\n getSystemTheme,\n supportsViewTransitions,\n prefersReducedMotion,\n createCircleAnimation,\n createBlurCircleAnimation,\n createSlideAnimation,\n} from '../../core/utils/animations'\n\nconst isBrowser = typeof window !== 'undefined'\n\nexport const useThemeAnimation = (\n props: UseThemeAnimationProps = {}\n): UseThemeAnimationReturn => {\n const {\n duration: propsDuration = 750,\n easing = 'ease-in-out',\n animationType = ThemeAnimationType.CIRCLE,\n blurAmount = 2,\n styleId = 'spaceman-theme-style',\n\n themes = ['light', 'dark', 'system'],\n colorThemes = ['default'],\n defaultTheme = 'system',\n defaultColorTheme = 'default',\n\n globalClassName = 'dark',\n colorThemePrefix = 'theme-',\n attribute = 'class',\n value,\n enableColorScheme = true,\n\n storageKey = 'theme',\n colorStorageKey = 'color-theme',\n\n theme: externalTheme,\n colorTheme: externalColorTheme,\n\n onThemeChange,\n onColorThemeChange,\n\n initialTheme,\n initialColorTheme,\n systemThemeMode = 'js',\n\n // Slide animation options\n slideDirection = 'left',\n slideFromX,\n slideFromY,\n slideToX = 0,\n slideToY = 0,\n } = props\n\n const isHighResolution =\n isBrowser && (window.innerWidth >= 3000 || window.innerHeight >= 2000)\n const duration = isHighResolution\n ? Math.max(propsDuration * 0.8, 500)\n : propsDuration\n\n const [mounted, setMounted] = useState(false)\n\n // Inject base styles once on mount\n useEffect(() => {\n injectBaseStyles()\n setMounted(true)\n }, [])\n\n const [internalTheme, setInternalTheme] = useState<Theme>(() => {\n if (initialTheme !== undefined) return initialTheme\n if (!isBrowser) return defaultTheme\n const saved = localStorage.getItem(storageKey) as Theme | null\n return saved && themes.indexOf(saved) !== -1 ? saved : defaultTheme\n })\n\n const [internalColorTheme, setInternalColorTheme] = useState(() => {\n if (initialColorTheme !== undefined) return initialColorTheme\n if (!isBrowser) return defaultColorTheme\n const saved = localStorage.getItem(colorStorageKey)\n return saved && colorThemes.indexOf(saved) !== -1\n ? saved\n : defaultColorTheme\n })\n\n const currentTheme = externalTheme ?? internalTheme\n const currentColorTheme = externalColorTheme ?? internalColorTheme\n\n const [, setSystemTheme] = useState<'light' | 'dark'>(() => getSystemTheme())\n const systemTheme = getSystemTheme()\n const resolvedTheme = resolveTheme(currentTheme)\n\n useEffect(() => {\n if (!isBrowser) return\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n const handleChange = () => setSystemTheme(getSystemTheme())\n\n mediaQuery.addEventListener('change', handleChange)\n return () => mediaQuery.removeEventListener('change', handleChange)\n }, [])\n\n // Apply theme classes to DOM\n useEffect(() => {\n if (!isBrowser || !mounted) return\n\n const element = document.documentElement\n\n const lightValue = value?.light\n const darkValue = value?.dark ?? globalClassName\n const systemValue = value?.system ?? 'system'\n\n if (attribute === 'data-theme') {\n if (systemThemeMode === 'css' && currentTheme === 'system') {\n element.setAttribute('data-theme', systemValue)\n } else {\n element.setAttribute(\n 'data-theme',\n resolvedTheme === 'dark' ? darkValue : (lightValue ?? 'light')\n )\n }\n } else {\n if (lightValue) {\n element.classList.remove(lightValue)\n }\n element.classList.remove(darkValue, systemValue, 'auto')\n\n if (systemThemeMode === 'css' && currentTheme === 'system') {\n element.classList.add(systemValue)\n } else if (resolvedTheme === 'dark') {\n element.classList.add(darkValue)\n } else if (lightValue) {\n element.classList.add(lightValue)\n } else {\n element.classList.remove(darkValue)\n }\n }\n\n if (enableColorScheme) {\n element.style.colorScheme =\n systemThemeMode === 'css' && currentTheme === 'system'\n ? ''\n : resolvedTheme\n } else {\n element.style.removeProperty('color-scheme')\n }\n\n colorThemes.forEach(theme => {\n element.classList.remove(`${colorThemePrefix}${theme}`)\n })\n element.classList.add(`${colorThemePrefix}${currentColorTheme}`)\n }, [\n resolvedTheme,\n currentTheme,\n currentColorTheme,\n globalClassName,\n colorThemePrefix,\n colorThemes,\n attribute,\n value,\n enableColorScheme,\n mounted,\n systemThemeMode,\n ])\n\n const ref = useRef<HTMLButtonElement>(null)\n\n const setTheme = useCallback(\n (newTheme: Theme) => {\n // Always save to localStorage\n if (isBrowser) {\n localStorage.setItem(storageKey, newTheme)\n }\n\n // Update internal state if no external control\n if (externalTheme === undefined) {\n setInternalTheme(newTheme)\n }\n\n // Call external callback if provided\n if (onThemeChange) {\n onThemeChange(newTheme)\n }\n },\n [onThemeChange, externalTheme, storageKey]\n )\n\n const setColorTheme = useCallback(\n (newColorTheme: string) => {\n // Always save to localStorage\n if (isBrowser) {\n localStorage.setItem(colorStorageKey, newColorTheme)\n }\n\n // Update internal state if no external control\n if (externalColorTheme === undefined) {\n setInternalColorTheme(newColorTheme)\n }\n\n // Call external callback if provided\n if (onColorThemeChange) {\n onColorThemeChange(newColorTheme)\n }\n },\n [onColorThemeChange, externalColorTheme, colorStorageKey]\n )\n\n const switchTheme = useCallback(\n async (newTheme: Theme, animationOff: boolean = false) => {\n if (\n !ref.current ||\n !supportsViewTransitions() ||\n prefersReducedMotion() ||\n animationOff\n ) {\n setTheme(newTheme)\n return\n }\n\n // Helper function to convert direction to from coordinates\n const getSlideFromCoords = (direction: string) => {\n switch (direction) {\n case 'left':\n return { a: -100, b: 0 }\n case 'right':\n return { a: 100, b: 0 }\n case 'top':\n return { a: 0, b: -100 }\n case 'bottom':\n return { a: 0, b: 100 }\n case 'top-left':\n return { a: -100, b: -100 }\n case 'top-right':\n return { a: 100, b: -100 }\n case 'bottom-left':\n return { a: -100, b: 100 }\n case 'bottom-right':\n return { a: 100, b: 100 }\n default:\n return { a: -100, b: 0 }\n }\n }\n\n let animationConfig\n\n if (animationType === ThemeAnimationType.SLIDE) {\n // Use custom coordinates if provided, otherwise use direction\n const fromCoords =\n slideFromX !== undefined && slideFromY !== undefined\n ? { a: slideFromX, b: slideFromY }\n : getSlideFromCoords(slideDirection)\n\n animationConfig = {\n a: fromCoords.a,\n b: fromCoords.b,\n x: slideToX,\n y: slideToY,\n duration,\n easing,\n animationType,\n blurAmount,\n styleId,\n }\n } else {\n // For circle and blur circle animations, use button center\n const { top, left, width, height } = ref.current.getBoundingClientRect()\n const x = left + width / 2\n const y = top + height / 2\n\n animationConfig = {\n x,\n y,\n duration,\n easing,\n animationType,\n blurAmount,\n styleId,\n }\n }\n\n if (animationType === ThemeAnimationType.BLUR_CIRCLE) {\n createBlurCircleAnimation(animationConfig)\n }\n\n if (animationType === ThemeAnimationType.SLIDE) {\n createSlideAnimation(animationConfig)\n }\n\n // Start the view transition\n\n await (document as Document).startViewTransition(() => {\n flushSync(() => {\n setTheme(newTheme)\n })\n }).ready\n\n if (animationType === ThemeAnimationType.CIRCLE) {\n createCircleAnimation(animationConfig)\n }\n },\n [\n setTheme,\n duration,\n easing,\n animationType,\n blurAmount,\n styleId,\n slideDirection,\n slideFromX,\n slideFromY,\n slideToX,\n slideToY,\n ]\n )\n\n const switchColorTheme = useCallback(\n (newColorTheme: string) => {\n if (colorThemes.indexOf(newColorTheme) === -1) {\n console.warn(\n `Color theme \"${newColorTheme}\" not found in available themes`\n )\n return\n }\n setColorTheme(newColorTheme)\n },\n [colorThemes, setColorTheme]\n )\n\n const toggleTheme = useCallback(\n async (animationOff: boolean = false) => {\n const newTheme: Theme = resolvedTheme === 'dark' ? 'light' : 'dark'\n await switchTheme(newTheme, animationOff)\n },\n [resolvedTheme, switchTheme]\n )\n\n const toggleLightTheme = useCallback(\n async (animationOff: boolean = false) => {\n if (resolvedTheme === 'light') return\n\n await switchTheme('light', animationOff)\n },\n [resolvedTheme, switchTheme]\n )\n\n const toggleDarkTheme = useCallback(\n async (animationOff: boolean = false) => {\n if (resolvedTheme === 'dark') return\n\n await switchTheme('dark', animationOff)\n },\n [resolvedTheme, switchTheme]\n )\n\n const toggleColorTheme = useCallback(() => {\n const currentIndex = colorThemes.indexOf(currentColorTheme)\n const nextIndex = (currentIndex + 1) % colorThemes.length\n const nextColorTheme = colorThemes[nextIndex]\n setColorTheme(nextColorTheme)\n }, [currentColorTheme, colorThemes, setColorTheme])\n\n const createColorThemeToggle = useCallback(\n (targetColorTheme: string) => {\n return () => {\n if (colorThemes.indexOf(targetColorTheme) === -1) {\n console.warn(\n `Color theme \"${targetColorTheme}\" not found in available themes`\n )\n return\n }\n setColorTheme(targetColorTheme)\n }\n },\n [colorThemes, setColorTheme]\n )\n\n const isColorThemeActive = useCallback(\n (targetColorTheme: string) => {\n return currentColorTheme === targetColorTheme\n },\n [currentColorTheme]\n )\n\n return {\n ref,\n theme: currentTheme,\n colorTheme: currentColorTheme,\n resolvedTheme,\n systemTheme,\n setTheme,\n setColorTheme,\n switchTheme,\n switchColorTheme,\n toggleTheme,\n toggleLightTheme,\n toggleDarkTheme,\n toggleColorTheme,\n createColorThemeToggle,\n isColorThemeActive,\n }\n}\n","import React, { createContext, useContext } from 'react'\nimport { ColorTheme, Theme } from '../../core/types'\n\nexport interface SharedThemeContextValue {\n ref: React.RefObject<HTMLButtonElement | null>\n theme: Theme\n colorTheme: ColorTheme\n setTheme: (theme: Theme) => void\n setColorTheme: (colorTheme: ColorTheme) => void\n switchTheme: (theme: Theme, animationOff?: boolean) => Promise<void>\n switchThemeFromElement?: (\n theme: Theme,\n element: HTMLButtonElement\n ) => Promise<void>\n}\n\nexport const SharedThemeContext = createContext<SharedThemeContextValue | null>(\n null\n)\n\nexport const useSharedThemeContext = (): SharedThemeContextValue | null => {\n return useContext(SharedThemeContext)\n}\n","import React, { type JSX, useEffect, useState } from 'react'\nimport { motion } from 'motion/react'\nimport { clsx } from 'clsx'\nimport { ThemeSwitcherProps, Theme } from '../../core/types'\nimport { useThemeAnimation } from '../hooks/use-theme-animation'\nimport {\n SharedThemeContextValue,\n useSharedThemeContext,\n} from './shared-theme-context'\n\nconst SunIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n <path d=\"M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\" />\n </svg>\n)\n\nconst MoonIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />\n </svg>\n)\n\nconst MonitorIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\" />\n <line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\" />\n <line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\" />\n </svg>\n)\n\nconst ThemeOption = ({\n icon,\n value,\n isActive,\n isHovered,\n onClick,\n onMouseEnter,\n onMouseLeave,\n buttonRef,\n}: {\n icon: JSX.Element\n value: string\n isActive?: boolean\n isHovered?: boolean\n onClick: (value: string, event?: React.MouseEvent<HTMLButtonElement>) => void\n onMouseEnter: () => void\n onMouseLeave: () => void\n buttonRef?: React.RefObject<HTMLButtonElement | null>\n}) => {\n return (\n <button\n ref={\n isActive ? (buttonRef as React.RefObject<HTMLButtonElement>) : undefined\n }\n className={clsx(\n 'relative flex h-9 w-12 cursor-pointer items-center justify-center',\n 'text-muted-foreground hover:text-foreground',\n isActive && 'text-foreground font-medium'\n )}\n role=\"radio\"\n aria-checked={isActive}\n aria-label={`Switch to ${value} theme`}\n onClick={event => onClick(value, event)}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n style={{\n borderRadius: 'var(--radius)',\n }}\n >\n {isHovered && (\n <motion.div\n layoutId=\"theme-hover\"\n className=\"absolute inset-0 bg-muted\"\n style={{\n borderRadius: 'var(--radius)',\n }}\n transition={{\n type: 'spring',\n bounce: 0,\n stiffness: 100,\n damping: 10,\n duration: 0.3,\n }}\n />\n )}\n\n <div className=\"relative z-10 flex items-center justify-center\">\n <div className=\"[&_svg]:size-4\">{icon}</div>\n </div>\n\n {isActive && (\n <div\n className=\"absolute bottom-0 left-1/2 h-0.5 w-6 -translate-x-1/2 rounded-full\"\n style={{\n backgroundColor: 'hsl(var(--primary))',\n }}\n />\n )}\n </button>\n )\n}\n\nconst THEME_OPTIONS = [\n {\n icon: <MonitorIcon />,\n value: 'system',\n },\n {\n icon: <SunIcon />,\n value: 'light',\n },\n {\n icon: <MoonIcon />,\n value: 'dark',\n },\n]\n\ninterface ThemeSwitcherViewProps {\n className?: string\n onSwitchTheme: (\n theme: Theme,\n event?: React.MouseEvent<HTMLButtonElement>\n ) => Promise<void>\n theme: Theme\n themes: Theme[]\n themeRef?: React.RefObject<HTMLButtonElement | null>\n}\n\nconst ThemeSwitcherView: React.FC<ThemeSwitcherViewProps> = ({\n className,\n onSwitchTheme,\n theme,\n themes,\n themeRef,\n}) => {\n const [isMounted, setIsMounted] = useState(false)\n const [hoveredTheme, setHoveredTheme] = useState<string | null>(null)\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n const handleThemeChange = async (\n newTheme: string,\n event?: React.MouseEvent<HTMLButtonElement>\n ) => {\n await onSwitchTheme(newTheme as Theme, event)\n }\n\n const filteredOptions = THEME_OPTIONS.filter(option =>\n themes.includes(option.value as Theme)\n )\n\n return (\n <div\n className={clsx(\n 'inline-flex h-9 items-center overflow-hidden bg-background shadow-sm border border-border',\n isMounted ? 'opacity-100' : 'opacity-0',\n className\n )}\n style={{\n borderRadius: 'var(--radius)',\n backgroundColor: 'hsl(var(--background))',\n }}\n role=\"radiogroup\"\n onMouseLeave={() => setHoveredTheme(null)}\n >\n {filteredOptions.map(option => (\n <ThemeOption\n key={option.value}\n icon={option.icon}\n value={option.value}\n isActive={theme === option.value}\n isHovered={hoveredTheme === option.value}\n onClick={handleThemeChange}\n onMouseEnter={() => setHoveredTheme(option.value)}\n onMouseLeave={() => {}}\n buttonRef={theme === option.value ? themeRef : undefined}\n />\n ))}\n </div>\n )\n}\n\nconst ThemeSwitcherWithContext: React.FC<\n Pick<ThemeSwitcherProps, 'className' | 'themes'> & {\n contextTheme: SharedThemeContextValue\n }\n> = ({ className, contextTheme, themes = ['light', 'dark', 'system'] }) => {\n const handleSwitchTheme = async (\n theme: Theme,\n event?: React.MouseEvent<HTMLButtonElement>\n ) => {\n if (contextTheme.switchThemeFromElement && event) {\n await contextTheme.switchThemeFromElement(theme, event.currentTarget)\n return\n }\n\n await contextTheme.switchTheme(theme)\n }\n\n return (\n <ThemeSwitcherView\n className={className}\n onSwitchTheme={handleSwitchTheme}\n theme={contextTheme.theme}\n themes={themes}\n themeRef={contextTheme.ref}\n />\n )\n}\n\nconst ThemeSwitcherStandalone: React.FC<ThemeSwitcherProps> = ({\n themes = ['light', 'dark', 'system'],\n currentTheme,\n onThemeChange,\n animationType,\n duration,\n className,\n}) => {\n const standaloneHook = useThemeAnimation({\n animationType,\n duration,\n themes,\n ...(currentTheme !== undefined && { theme: currentTheme }),\n onThemeChange,\n })\n\n const handleSwitchTheme = async (theme: Theme) => {\n await standaloneHook.switchTheme(theme)\n }\n\n return (\n <ThemeSwitcherView\n className={className}\n onSwitchTheme={handleSwitchTheme}\n theme={standaloneHook.theme}\n themes={themes}\n themeRef={standaloneHook.ref}\n />\n )\n}\n\nexport const ThemeSwitcher: React.FC<ThemeSwitcherProps> = props => {\n const contextTheme = useSharedThemeContext()\n\n if (contextTheme) {\n return <ThemeSwitcherWithContext {...props} contextTheme={contextTheme} />\n }\n\n return <ThemeSwitcherStandalone {...props} />\n}\n","import * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { clsx } from 'clsx'\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nconst ChevronDownIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n)\n\nconst ChevronUpIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n)\n\nconst CheckIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n)\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: 'sm' | 'default'\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={clsx(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={clsx(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n {...props}\n >\n <SelectPrimitive.Viewport\n className={clsx(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={clsx('py-1.5 pl-8 pr-2 text-sm font-semibold', className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={clsx(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={clsx('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={clsx(\n 'flex cursor-default items-center justify-center py-1',\n className\n )}\n {...props}\n >\n <ChevronUpIcon />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={clsx(\n 'flex cursor-default items-center justify-center py-1',\n className\n )}\n {...props}\n >\n <ChevronDownIcon />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import React from 'react'\nimport { ThemeSelectorProps, ColorTheme } from '../../core/types'\nimport { useThemeAnimation } from '../hooks/use-theme-animation'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from './ui/select'\nimport {\n SharedThemeContextValue,\n useSharedThemeContext,\n} from './shared-theme-context'\n\ninterface ThemeSelectorViewProps {\n colorTheme: ColorTheme\n colorThemes: ColorTheme[]\n onSelectColorTheme: (colorTheme: ColorTheme) => void\n}\n\nconst ThemeSelectorView: React.FC<ThemeSelectorViewProps> = ({\n colorTheme,\n colorThemes,\n onSelectColorTheme,\n}) => {\n return (\n <>\n {colorThemes.length > 1 ? (\n <div className=\"flex flex-col gap-2\">\n <Select\n value={colorTheme}\n onValueChange={value => onSelectColorTheme(value as ColorTheme)}\n >\n <SelectTrigger className=\"capitalize\">\n <SelectValue placeholder=\"Choose a color theme\" />\n </SelectTrigger>\n <SelectContent>\n {colorThemes.map(theme => (\n <SelectItem key={theme} className=\"capitalize\" value={theme}>\n {theme}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n ) : null}\n </>\n )\n}\n\nconst ThemeSelectorWithContext: React.FC<\n Pick<ThemeSelectorProps, 'colorThemes'> & {\n contextTheme: SharedThemeContextValue\n }\n> = ({ colorThemes = ['default'], contextTheme }) => {\n return (\n <ThemeSelectorView\n colorTheme={contextTheme.colorTheme}\n colorThemes={colorThemes}\n onSelectColorTheme={contextTheme.setColorTheme}\n />\n )\n}\n\nconst ThemeSelectorStandalone: React.FC<ThemeSelectorProps> = ({\n themes = ['light', 'dark', 'system'],\n colorThemes = ['default'],\n currentColorTheme,\n onColorThemeChange,\n animationType,\n duration,\n}) => {\n const standaloneHook = useThemeAnimation({\n animationType,\n duration,\n themes,\n colorThemes,\n ...(currentColorTheme !== undefined && { colorTheme: currentColorTheme }),\n onColorThemeChange,\n })\n\n return (\n <ThemeSelectorView\n colorTheme={standaloneHook.colorTheme}\n colorThemes={colorThemes}\n onSelectColorTheme={standaloneHook.setColorTheme}\n />\n )\n}\n\nexport const ThemeSelector: React.FC<ThemeSelectorProps> = props => {\n const contextTheme = useSharedThemeContext()\n\n if (contextTheme) {\n return <ThemeSelectorWithContext {...props} contextTheme={contextTheme} />\n }\n\n return <ThemeSelectorStandalone {...props} />\n}\n","import { Theme } from '../../core/types'\n\nexport const withElementAsRef = async (\n ref: React.RefObject<HTMLButtonElement | null>,\n element: HTMLButtonElement,\n run: () => Promise<void>\n) => {\n if (ref.current) {\n const originalRef = ref.current\n Object.defineProperty(ref, 'current', {\n value: element,\n writable: true,\n configurable: true,\n })\n await run()\n Object.defineProperty(ref, 'current', {\n value: originalRef,\n writable: true,\n configurable: true,\n })\n return\n }\n\n Object.defineProperty(ref, 'current', {\n value: element,\n writable: true,\n configurable: true,\n })\n await run()\n}\n\nexport const getBrowserSystemTheme = (): 'light' | 'dark' => {\n return typeof window !== 'undefined' &&\n window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n}\n\nexport const getNextResolvedTheme = (\n resolvedTheme: 'light' | 'dark'\n): Theme => {\n return resolvedTheme === 'dark' ? 'light' : 'dark'\n}\n","import React, {\n createContext,\n useContext,\n ReactNode,\n useState,\n useEffect,\n} from 'react'\nimport { useThemeAnimation } from '../hooks/use-theme-animation'\nimport { Theme, ColorTheme, ThemeAnimationType } from '../../core/types'\nimport { SharedThemeContext } from './shared-theme-context'\nimport { withElementAsRef } from './provider-helpers'\n\n/**\n * Context type for the Spaceman Theme Provider\n */\ninterface SpacemanThemeContextType {\n ref: React.RefObject<HTMLButtonElement | null>\n theme: Theme\n colorTheme: ColorTheme\n resolvedTheme: 'light' | 'dark'\n setTheme: (theme: Theme) => void\n setColorTheme: (colorTheme: ColorTheme) => void\n\n switchTheme: (theme: Theme) => Promise<void>\n switchColorTheme: (colorTheme: string) => void\n\n toggleTheme: () => Promise<void>\n toggleLightTheme: () => Promise<void>\n toggleDarkTheme: () => Promise<void>\n toggleColorTheme: () => void\n\n createColorThemeToggle: (targetColorTheme: string) => () => void\n isColorThemeActive: (targetColorTheme: string) => boolean\n\n switchThemeFromElement: (\n theme: Theme,\n element: HTMLButtonElement\n ) => Promise<void>\n}\n\nconst SpacemanThemeContext = createContext<\n SpacemanThemeContextType | undefined\n>(undefined)\n\n/**\n * Props for the Spaceman Theme Provider\n */\ninterface SpacemanThemeProviderProps {\n children: ReactNode\n themes?: Theme[]\n colorThemes?: ColorTheme[]\n defaultTheme?: Theme\n defaultColorTheme?: ColorTheme\n animationType?: ThemeAnimationType\n duration?: number\n}\n\n/**\n * Spaceman Theme Provider - Provides centralized theme state management\n *\n * This provider creates a single source of truth for theme state using the useThemeAnimation hook.\n * All theme-related components should consume from this context to ensure synchronization.\n *\n * @param children - React children to wrap with theme context\n * @param themes - Available theme options (default: ['light', 'dark', 'system'])\n * @param colorThemes - Available color theme options (default: ['default'])\n * @param defaultTheme - Default theme to use (default: 'system')\n * @param defaultColorTheme - Default color theme to use (default: 'default')\n * @param animationType - Animation type for theme transitions (default: CIRCLE)\n * @param duration - Animation duration in milliseconds (default: 750)\n */\nexport const SpacemanThemeProvider: React.FC<SpacemanThemeProviderProps> = ({\n children,\n themes = ['light', 'dark', 'system'],\n colorThemes = ['default'],\n defaultTheme = 'system',\n defaultColorTheme = 'default',\n animationType = ThemeAnimationType.CIRCLE,\n duration = 750,\n}) => {\n const [mounted, setMounted] = useState(false)\n\n const themeState = useThemeAnimation({\n themes,\n colorThemes,\n defaultTheme,\n defaultColorTheme,\n animationType,\n duration,\n })\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n const switchThemeFromElement = async (\n theme: Theme,\n element: HTMLButtonElement\n ) => {\n await withElementAsRef(themeState.ref, element, async () => {\n await themeState.switchTheme(theme)\n })\n }\n\n if (!mounted) {\n const loadingContextValue: SpacemanThemeContextType = {\n ref: { current: null },\n theme: defaultTheme,\n colorTheme: defaultColorTheme,\n resolvedTheme: defaultTheme === 'dark' ? 'dark' : 'light',\n setTheme: () => {},\n setColorTheme: () => {},\n\n switchTheme: async () => {},\n switchThemeFromElement: async () => {},\n switchColorTheme: () => {},\n\n toggleTheme: async () => {},\n toggleLightTheme: async () => {},\n toggleDarkTheme: async () => {},\n toggleColorTheme: () => {},\n\n createColorThemeToggle: () => () => {},\n isColorThemeActive: () => false,\n }\n\n return (\n <SpacemanThemeContext.Provider value={loadingContextValue}>\n <SharedThemeContext.Provider value={loadingContextValue}>\n {children}\n </SharedThemeContext.Provider>\n </SpacemanThemeContext.Provider>\n )\n }\n\n const contextValue: SpacemanThemeContextType = {\n ref: themeState.ref,\n theme: themeState.theme,\n colorTheme: themeState.colorTheme,\n resolvedTheme: themeState.resolvedTheme,\n setTheme: themeState.setTheme,\n setColorTheme: themeState.setColorTheme,\n\n switchTheme: themeState.switchTheme,\n switchThemeFromElement,\n switchColorTheme: themeState.switchColorTheme,\n\n toggleTheme: themeState.toggleTheme,\n toggleLightTheme: themeState.toggleLightTheme,\n toggleDarkTheme: themeState.toggleDarkTheme,\n toggleColorTheme: themeState.toggleColorTheme,\n\n createColorThemeToggle: themeState.createColorThemeToggle,\n isColorThemeActive: themeState.isColorThemeActive,\n }\n\n return (\n <SpacemanThemeContext.Provider value={contextValue}>\n <SharedThemeContext.Provider value={contextValue}>\n {children}\n </SharedThemeContext.Provider>\n </SpacemanThemeContext.Provider>\n )\n}\n\n/**\n * Hook to consume the Spaceman Theme context\n *\n * @returns Theme context value with all theme state and methods\n * @throws Error if used outside of SpacemanThemeProvider\n */\nexport const useSpacemanTheme = (): SpacemanThemeContextType => {\n const context = useContext(SpacemanThemeContext)\n if (context === undefined) {\n throw new Error(\n 'useSpacemanTheme must be used within a SpacemanThemeProvider'\n )\n }\n return context\n}\n","'use client'\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react'\nimport { useThemeAnimation } from '../hooks/use-theme-animation'\nimport { ColorTheme, Theme, ThemeAnimationType } from '../../core/types'\nimport { SharedThemeContext } from './shared-theme-context'\nimport { getNextResolvedTheme, withElementAsRef } from './provider-helpers'\n\nexport interface NextThemeContextType {\n ref: React.RefObject<HTMLButtonElement | null>\n theme: Theme\n colorTheme: ColorTheme\n resolvedTheme: 'light' | 'dark'\n systemTheme: 'light' | 'dark'\n setTheme: (theme: Theme) => void\n setColorTheme: (colorTheme: ColorTheme) => void\n switchTheme: (theme: Theme, animationOff?: boolean) => Promise<void>\n switchColorTheme: (colorTheme: string) => void\n toggleTheme: (animationOff?: boolean) => Promise<void>\n toggleLightTheme: (animationOff?: boolean) => Promise<void>\n toggleDarkTheme: (animationOff?: boolean) => Promise<void>\n toggleColorTheme: () => void\n createColorThemeToggle: (targetColorTheme: string) => () => void\n isColorThemeActive: (targetColorTheme: string) => boolean\n switchThemeFromElement: (\n theme: Theme,\n element: HTMLButtonElement\n ) => Promise<void>\n}\n\nexport interface NextThemeProviderProps {\n children: React.ReactNode\n themes?: Theme[]\n colorThemes?: ColorTheme[]\n defaultTheme?: Theme\n defaultColorTheme?: ColorTheme\n animationType?: ThemeAnimationType\n duration?: number\n storageKey?: string\n colorStorageKey?: string\n attribute?: 'class' | 'data-theme'\n value?: Record<string, string>\n enableSystem?: boolean\n enableColorScheme?: boolean\n disableTransitionOnChange?: boolean\n forcedTheme?: Theme\n nonce?: string\n scriptProps?: Omit<\n React.ScriptHTMLAttributes<HTMLScriptElement>,\n 'dangerouslySetInnerHTML' | 'nonce'\n >\n colorThemePrefix?: string\n globalClassName?: string\n disableAnimationOnInit?: boolean\n disablePreHydrationScript?: boolean\n onThemeChange?: (theme: Theme) => void\n onColorThemeChange?: (colorTheme: ColorTheme) => void\n}\n\nconst NextThemeContext = createContext<NextThemeContextType | undefined>(\n undefined\n)\n\nconst createDisableTransitions = () => {\n const css = document.createElement('style')\n css.textContent =\n '*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}'\n document.head.appendChild(css)\n window.getComputedStyle(document.body)\n\n return () => {\n setTimeout(() => {\n if (css.parentNode) {\n css.parentNode.removeChild(css)\n }\n }, 1)\n }\n}\n\nconst generatePreHydrationScript = ({\n attribute,\n colorStorageKey,\n colorThemePrefix,\n defaultColorTheme,\n defaultTheme,\n enableColorScheme,\n enableSystem,\n globalClassName,\n storageKey,\n value,\n}: {\n attribute: 'class' | 'data-theme'\n colorStorageKey: string\n colorThemePrefix: string\n defaultColorTheme: ColorTheme\n defaultTheme: Theme\n enableColorScheme: boolean\n enableSystem: boolean\n globalClassName: string\n storageKey: string\n value?: Record<string, string>\n}) => {\n const lightValue = value?.light ?? 'light'\n const darkValue = value?.dark ?? globalClassName\n const systemValue = value?.system ?? 'system'\n\n return `(function(){try{var d=document.documentElement;var theme=localStorage.getItem('${storageKey}')||'${defaultTheme}';var colorTheme=localStorage.getItem('${colorStorageKey}')||'${defaultColorTheme}';if(!${JSON.stringify(\n enableSystem\n )}&&theme==='system'){theme='${defaultTheme === 'system' ? 'light' : defaultTheme}';}var resolved=theme==='system'?(window.matchMedia('(prefers-color-scheme: dark)').matches?'dark':'light'):theme;var attr='${attribute}';var lightValue='${lightValue}';var darkValue='${darkValue}';var systemValue='${systemValue}';if(attr==='data-theme'){d.setAttribute('data-theme',theme==='system'?systemValue:(resolved==='dark'?darkValue:lightValue));}else{d.classList.remove(lightValue,darkValue,systemValue,'auto');d.classList.add(theme==='system'?systemValue:(resolved==='dark'?darkValue:lightValue));}if(${JSON.stringify(\n enableColorScheme\n )}){d.style.colorScheme=theme==='system'?'':resolved;}else{d.style.removeProperty('color-scheme');}d.classList.add('${colorThemePrefix}'+colorTheme);}catch(e){console.warn('Theme pre-hydration script failed:',e);}})();`\n}\n\nconst ThemePreHydrationScript = React.memo(\n ({\n attribute,\n colorStorageKey,\n colorThemePrefix,\n defaultColorTheme,\n defaultTheme,\n enableColorScheme,\n enableSystem,\n globalClassName,\n nonce,\n scriptProps,\n storageKey,\n value,\n }: {\n attribute: 'class' | 'data-theme'\n colorStorageKey: string\n colorThemePrefix: string\n defaultColorTheme: ColorTheme\n defaultTheme: Theme\n enableColorScheme: boolean\n enableSystem: boolean\n globalClassName: string\n nonce?: string\n scriptProps?: Omit<\n React.ScriptHTMLAttributes<HTMLScriptElement>,\n 'dangerouslySetInnerHTML' | 'nonce'\n >\n storageKey: string\n value?: Record<string, string>\n }) => (\n <script\n {...scriptProps}\n nonce={nonce}\n suppressHydrationWarning\n dangerouslySetInnerHTML={{\n __html: generatePreHydrationScript({\n attribute,\n colorStorageKey,\n colorThemePrefix,\n defaultColorTheme,\n defaultTheme,\n enableColorScheme,\n enableSystem,\n globalClassName,\n storageKey,\n value,\n }),\n }}\n />\n )\n)\n\nThemePreHydrationScript.displayName = 'ThemePreHydrationScript'\n\nexport const NextThemeProvider: React.FC<NextThemeProviderProps> = ({\n attribute = 'class',\n children,\n colorStorageKey = 'color-theme',\n colorThemePrefix = 'theme-',\n colorThemes = ['default'],\n defaultColorTheme = 'default',\n defaultTheme = 'system',\n disableAnimationOnInit = true,\n disablePreHydrationScript = false,\n disableTransitionOnChange = false,\n duration = 750,\n enableColorScheme = true,\n enableSystem = true,\n forcedTheme,\n globalClassName = 'dark',\n nonce,\n onColorThemeChange,\n onThemeChange,\n scriptProps,\n storageKey = 'theme',\n themes,\n value,\n animationType = ThemeAnimationType.CIRCLE,\n}) => {\n const allowedThemes = useMemo<Theme[]>(() => {\n if (themes && themes.length > 0) {\n return themes\n }\n\n return enableSystem ? ['light', 'dark', 'system'] : ['light', 'dark']\n }, [enableSystem, themes])\n\n const effectiveDefaultTheme = useMemo<Theme>(() => {\n if (defaultTheme === 'system' && !enableSystem) {\n return 'light'\n }\n\n return defaultTheme\n }, [defaultTheme, enableSystem])\n\n const [mounted, setMounted] = useState(false)\n\n const themeState = useThemeAnimation({\n animationType,\n attribute,\n colorStorageKey,\n colorTheme: forcedTheme ? undefined : undefined,\n colorThemePrefix,\n colorThemes,\n defaultColorTheme,\n defaultTheme: effectiveDefaultTheme,\n duration,\n enableColorScheme,\n globalClassName,\n onColorThemeChange,\n onThemeChange,\n storageKey,\n theme: forcedTheme,\n themes: allowedThemes,\n value,\n })\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n const withTransitionsDisabled = useCallback(\n async <T,>(fn: () => Promise<T> | T) => {\n const cleanup = disableTransitionOnChange\n ? createDisableTransitions()\n : undefined\n\n try {\n return await fn()\n } finally {\n cleanup?.()\n }\n },\n [disableTransitionOnChange]\n )\n\n const setTheme = useCallback(\n (theme: Theme) => {\n void withTransitionsDisabled(async () => {\n themeState.setTheme(theme)\n })\n },\n [themeState, withTransitionsDisabled]\n )\n\n const switchTheme = useCallback(\n async (theme: Theme, animationOff: boolean = false) => {\n await withTransitionsDisabled(async () => {\n if (!mounted && disableAnimationOnInit) {\n themeState.setTheme(theme)\n return\n }\n\n await themeState.switchTheme(theme, animationOff)\n })\n },\n [disableAnimationOnInit, mounted, themeState, withTransitionsDisabled]\n )\n\n const switchThemeFromElement = useCallback(\n async (theme: Theme, element: HTMLButtonElement) => {\n await withTransitionsDisabled(async () => {\n if (!mounted && disableAnimationOnInit) {\n themeState.setTheme(theme)\n return\n }\n\n await withElementAsRef(themeState.ref, element, async () => {\n await themeState.switchTheme(theme)\n })\n })\n },\n [disableAnimationOnInit, mounted, themeState, withTransitionsDisabled]\n )\n\n const contextValue = useMemo<NextThemeContextType>(\n () => ({\n ref: themeState.ref,\n theme: themeState.theme,\n colorTheme: themeState.colorTheme,\n resolvedTheme: themeState.resolvedTheme,\n systemTheme: themeState.systemTheme,\n setTheme,\n setColorTheme: themeState.setColorTheme,\n switchTheme,\n switchColorTheme: themeState.switchColorTheme,\n toggleTheme: async (animationOff = false) =>\n switchTheme(\n getNextResolvedTheme(themeState.resolvedTheme),\n animationOff\n ),\n toggleLightTheme: async (animationOff = false) => {\n if (themeState.resolvedTheme === 'light') return\n await switchTheme('light', animationOff)\n },\n toggleDarkTheme: async (animationOff = false) => {\n if (themeState.resolvedTheme === 'dark') return\n await switchTheme('dark', animationOff)\n },\n toggleColorTheme: themeState.toggleColorTheme,\n createColorThemeToggle: themeState.createColorThemeToggle,\n isColorThemeActive: themeState.isColorThemeActive,\n switchThemeFromElement,\n }),\n [setTheme, switchTheme, switchThemeFromElement, themeState]\n )\n\n return (\n <NextThemeContext.Provider value={contextValue}>\n <SharedThemeContext.Provider value={contextValue}>\n {!disablePreHydrationScript && !forcedTheme ? (\n <ThemePreHydrationScript\n attribute={attribute}\n colorStorageKey={colorStorageKey}\n colorThemePrefix={colorThemePrefix}\n defaultColorTheme={defaultColorTheme}\n defaultTheme={effectiveDefaultTheme}\n enableColorScheme={enableColorScheme}\n enableSystem={enableSystem}\n globalClassName={globalClassName}\n nonce={nonce}\n scriptProps={scriptProps}\n storageKey={storageKey}\n value={value}\n />\n ) : null}\n {children}\n </SharedThemeContext.Provider>\n </NextThemeContext.Provider>\n )\n}\n\nexport const ThemeProvider = NextThemeProvider\n\nexport const useNextTheme = (): NextThemeContextType => {\n const context = useContext(NextThemeContext)\n if (context === undefined) {\n throw new Error('useNextTheme must be used within a NextThemeProvider')\n }\n return context\n}\n\nexport const useTheme = useNextTheme\n","import { useEffect } from 'react'\nimport { ColorTheme, Theme } from '../../core/types'\n\nconst isBrowser = typeof window !== 'undefined'\n\nexport const useSyncServerThemeStorage = ({\n enabled,\n theme,\n colorTheme,\n storageKey,\n colorStorageKey,\n}: {\n enabled: boolean\n theme?: Theme\n colorTheme?: ColorTheme\n storageKey: string\n colorStorageKey: string\n}): void => {\n useEffect(() => {\n if (!enabled || !isBrowser) return\n\n if (theme) {\n localStorage.setItem(storageKey, theme)\n }\n if (colorTheme) {\n localStorage.setItem(colorStorageKey, colorTheme)\n }\n }, [enabled, theme, colorTheme, storageKey, colorStorageKey])\n}\n","import { resolveThemeForServer } from '../core/utils/animations'\nimport { ColorTheme, Theme } from '../core/types'\n\nexport const STORAGE_KEY = 'theme'\nexport const COLOR_STORAGE_KEY = 'color-theme'\nexport const GLOBAL_CLASS_NAME = 'dark'\nexport const COLOR_THEME_PREFIX = 'theme-'\n\nexport type ServerResolvedTheme = 'light' | 'dark' | 'system'\n\nexport interface ServerThemeData {\n theme: ServerResolvedTheme\n themePreference: Theme\n colorTheme: ColorTheme\n}\n\nexport function buildServerThemeData(\n themeCookie: string | undefined,\n colorThemeCookie: string | undefined,\n options: { defaultTheme?: Theme; defaultColorTheme?: ColorTheme } = {}\n): ServerThemeData {\n const { defaultTheme = 'system', defaultColorTheme = 'default' } = options\n const themePreference = (themeCookie as Theme | undefined) ?? defaultTheme\n const colorTheme = colorThemeCookie ?? defaultColorTheme\n\n return {\n theme: resolveThemeForServer(themePreference),\n themePreference,\n colorTheme,\n }\n}\n\nexport { resolveThemeForServer }\n","import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useSyncExternalStore,\n} from 'react'\nimport { useThemeAnimation } from '../hooks/use-theme-animation'\nimport { useSyncServerThemeStorage } from '../hooks/use-sync-server-theme-storage'\nimport {\n ColorTheme,\n SystemThemeMode,\n Theme,\n ThemeAnimationType,\n} from '../../core/types'\nimport {\n COLOR_STORAGE_KEY,\n COLOR_THEME_PREFIX,\n GLOBAL_CLASS_NAME,\n STORAGE_KEY,\n} from '../../tanstack/helpers'\nimport { SharedThemeContext } from './shared-theme-context'\nimport {\n getBrowserSystemTheme,\n getNextResolvedTheme,\n withElementAsRef,\n} from './provider-helpers'\n\nexport interface TanStackThemeContextType {\n ref: React.RefObject<HTMLButtonElement | null>\n theme: Theme\n colorTheme: ColorTheme\n resolvedTheme: 'light' | 'dark'\n systemTheme: 'light' | 'dark'\n isHydrated: boolean\n setTheme: (theme: Theme) => void\n setColorTheme: (colorTheme: ColorTheme) => void\n\n switchTheme: (theme: Theme, animationOff?: boolean) => Promise<void>\n switchColorTheme: (colorTheme: string) => void\n\n toggleTheme: (animationOff?: boolean) => Promise<void>\n toggleLightTheme: (animationOff?: boolean) => Promise<void>\n toggleDarkTheme: (animationOff?: boolean) => Promise<void>\n toggleColorTheme: () => void\n\n createColorThemeToggle: (targetColorTheme: string) => () => void\n isColorThemeActive: (targetColorTheme: string) => boolean\n\n switchThemeFromElement: (\n theme: Theme,\n element: HTMLButtonElement\n ) => Promise<void>\n}\n\nconst TanStackThemeContext = createContext<\n TanStackThemeContextType | undefined\n>(undefined)\n\nexport interface TanStackThemeProviderProps {\n children: ReactNode\n themes?: Theme[]\n colorThemes?: ColorTheme[]\n defaultTheme?: Theme\n defaultColorTheme?: ColorTheme\n animationType?: ThemeAnimationType\n duration?: number\n storageKey?: string\n colorStorageKey?: string\n globalClassName?: string\n colorThemePrefix?: string\n serverTheme?: 'light' | 'dark' | 'system'\n serverColorTheme?: ColorTheme\n systemThemeMode?: SystemThemeMode\n onServerThemeChange?: (theme: Theme) => Promise<void> | void\n onServerColorThemeChange?: (colorTheme: ColorTheme) => Promise<void> | void\n}\n\nexport interface TanStackStartThemeScriptProps {\n storageKey?: string\n colorStorageKey?: string\n defaultTheme?: Theme\n defaultColorTheme?: ColorTheme\n globalClassName?: string\n colorThemePrefix?: string\n nonce?: string\n systemThemeMode?: SystemThemeMode\n}\n\nconst generateTanStackPreHydrationScript = (\n storageKey: string,\n colorStorageKey: string,\n defaultTheme: Theme,\n defaultColorTheme: ColorTheme,\n globalClassName: string,\n colorThemePrefix: string,\n systemThemeMode: SystemThemeMode\n): string => {\n return `\n(function() {\n try {\n var theme = localStorage.getItem('${storageKey}') || '${defaultTheme}';\n var colorTheme = localStorage.getItem('${colorStorageKey}') || '${defaultColorTheme}';\n var el = document.documentElement;\n var resolved;\n if (theme === 'system') {\n if ('${systemThemeMode}' === 'css') {\n el.classList.remove('${globalClassName}');\n el.classList.remove('auto');\n el.classList.remove('system');\n el.classList.add('system');\n el.style.colorScheme = '';\n } else {\n resolved = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n if (resolved === 'dark') {\n el.classList.add('${globalClassName}');\n } else {\n el.classList.remove('${globalClassName}');\n }\n el.classList.remove('system');\n el.classList.remove('auto');\n el.style.colorScheme = resolved;\n }\n } else {\n resolved = theme;\n el.classList.remove('system');\n el.classList.remove('auto');\n if (resolved === 'dark') {\n el.classList.add('${globalClassName}');\n } else {\n el.classList.remove('${globalClassName}');\n }\n el.style.colorScheme = resolved;\n }\n if (colorTheme && colorTheme !== 'default') {\n el.classList.add('${colorThemePrefix}' + colorTheme);\n }\n } catch (e) {\n console.warn('Theme pre-hydration script failed:', e);\n }\n})();\n`\n}\n\nexport const TanStackStartThemeScript: React.FC<TanStackStartThemeScriptProps> =\n React.memo(\n ({\n storageKey = STORAGE_KEY,\n colorStorageKey = COLOR_STORAGE_KEY,\n defaultTheme = 'system',\n defaultColorTheme = 'default',\n globalClassName = GLOBAL_CLASS_NAME,\n colorThemePrefix = COLOR_THEME_PREFIX,\n nonce,\n systemThemeMode = 'js',\n }) => {\n const scriptContent = generateTanStackPreHydrationScript(\n storageKey,\n colorStorageKey,\n defaultTheme,\n defaultColorTheme,\n globalClassName,\n colorThemePrefix,\n systemThemeMode\n )\n\n return (\n <script\n nonce={nonce}\n suppressHydrationWarning\n dangerouslySetInnerHTML={{ __html: scriptContent }}\n />\n )\n }\n )\n\nTanStackStartThemeScript.displayName = 'TanStackStartThemeScript'\n\nconst useHydrated = (): boolean => {\n return useSyncExternalStore(\n () => () => {},\n () => true,\n () => false\n )\n}\n\nconst getNextColorTheme = (\n colorThemes: ColorTheme[],\n currentColorTheme: ColorTheme\n): ColorTheme => {\n if (colorThemes.length === 0) return currentColorTheme\n const currentIndex = colorThemes.indexOf(currentColorTheme)\n const nextIndex =\n currentIndex === -1 ? 0 : (currentIndex + 1) % colorThemes.length\n return colorThemes[nextIndex]\n}\n\nexport const TanStackThemeProvider: React.FC<TanStackThemeProviderProps> = ({\n children,\n themes = ['light', 'dark', 'system'],\n colorThemes = ['default'],\n defaultTheme = 'system',\n defaultColorTheme = 'default',\n animationType = ThemeAnimationType.CIRCLE,\n duration = 750,\n storageKey = STORAGE_KEY,\n colorStorageKey = COLOR_STORAGE_KEY,\n globalClassName = GLOBAL_CLASS_NAME,\n colorThemePrefix = COLOR_THEME_PREFIX,\n serverTheme,\n serverColorTheme,\n systemThemeMode = 'css',\n onServerThemeChange,\n onServerColorThemeChange,\n}) => {\n const isHydrated = useHydrated()\n const hasServerTheme = serverTheme !== undefined\n const initialTheme = hasServerTheme ? serverTheme : undefined\n\n const themeState = useThemeAnimation({\n themes,\n colorThemes,\n defaultTheme,\n defaultColorTheme,\n animationType,\n duration,\n storageKey,\n colorStorageKey,\n globalClassName,\n colorThemePrefix,\n initialTheme,\n initialColorTheme: serverColorTheme,\n systemThemeMode,\n })\n\n useSyncServerThemeStorage({\n enabled: hasServerTheme,\n theme: initialTheme,\n colorTheme: serverColorTheme,\n storageKey,\n colorStorageKey,\n })\n\n const setThemeWithServer = useCallback(\n (newTheme: Theme) => {\n themeState.setTheme(newTheme)\n onServerThemeChange?.(newTheme)\n },\n [themeState, onServerThemeChange]\n )\n\n const setColorThemeWithServer = useCallback(\n (newColorTheme: ColorTheme) => {\n themeState.setColorTheme(newColorTheme)\n onServerColorThemeChange?.(newColorTheme)\n },\n [themeState, onServerColorThemeChange]\n )\n\n const switchThemeWithHydrationAwareness = useCallback(\n async (theme: Theme, animationOff: boolean = false) => {\n if (!isHydrated) {\n setThemeWithServer(theme)\n return\n }\n\n await themeState.switchTheme(theme, animationOff)\n onServerThemeChange?.(theme)\n },\n [isHydrated, themeState, setThemeWithServer, onServerThemeChange]\n )\n\n const toggleThemeWithHydrationAwareness = useCallback(\n async (animationOff: boolean = false) => {\n const nextTheme = getNextResolvedTheme(themeState.resolvedTheme)\n\n if (!isHydrated) {\n setThemeWithServer(nextTheme)\n return\n }\n\n await themeState.toggleTheme(animationOff)\n onServerThemeChange?.(nextTheme)\n },\n [isHydrated, themeState, setThemeWithServer, onServerThemeChange]\n )\n\n const toggleLightThemeWithHydrationAwareness = useCallback(\n async (animationOff: boolean = false) => {\n if (!isHydrated) {\n setThemeWithServer('light')\n return\n }\n\n await themeState.toggleLightTheme(animationOff)\n onServerThemeChange?.('light')\n },\n [isHydrated, themeState, setThemeWithServer, onServerThemeChange]\n )\n\n const toggleDarkThemeWithHydrationAwareness = useCallback(\n async (animationOff: boolean = false) => {\n if (!isHydrated) {\n setThemeWithServer('dark')\n return\n }\n\n await themeState.toggleDarkTheme(animationOff)\n onServerThemeChange?.('dark')\n },\n [isHydrated, themeState, setThemeWithServer, onServerThemeChange]\n )\n\n const switchColorThemeWithServer = useCallback(\n (newColorTheme: ColorTheme) => {\n themeState.switchColorTheme(newColorTheme)\n onServerColorThemeChange?.(newColorTheme)\n },\n [themeState, onServerColorThemeChange]\n )\n\n const toggleColorThemeWithServer = useCallback(() => {\n const nextColorTheme = getNextColorTheme(colorThemes, themeState.colorTheme)\n themeState.toggleColorTheme()\n onServerColorThemeChange?.(nextColorTheme)\n }, [colorThemes, themeState, onServerColorThemeChange])\n\n const createColorThemeToggleWithServer = useCallback(\n (targetColorTheme: ColorTheme) => () => {\n themeState.createColorThemeToggle(targetColorTheme)()\n onServerColorThemeChange?.(targetColorTheme)\n },\n [themeState, onServerColorThemeChange]\n )\n\n const switchThemeFromElement = useCallback(\n async (theme: Theme, element: HTMLButtonElement) => {\n if (!isHydrated) {\n setThemeWithServer(theme)\n return\n }\n\n await withElementAsRef(themeState.ref, element, async () => {\n await themeState.switchTheme(theme)\n })\n\n onServerThemeChange?.(theme)\n },\n [isHydrated, themeState, setThemeWithServer, onServerThemeChange]\n )\n\n const systemTheme = getBrowserSystemTheme()\n\n const serverResolvedTheme: 'light' | 'dark' = (() => {\n if (hasServerTheme) {\n if (serverTheme === 'dark') return 'dark'\n if (serverTheme === 'system') return systemTheme\n return 'light'\n }\n return defaultTheme === 'dark' ? 'dark' : 'light'\n })()\n\n if (!isHydrated) {\n const loadingContextValue: TanStackThemeContextType = {\n ref: { current: null },\n theme: initialTheme ?? defaultTheme,\n colorTheme: serverColorTheme ?? defaultColorTheme,\n resolvedTheme: serverResolvedTheme,\n systemTheme: 'light',\n isHydrated: false,\n setTheme: setThemeWithServer,\n setColorTheme: setColorThemeWithServer,\n switchTheme: async (theme: Theme) => setThemeWithServer(theme),\n switchThemeFromElement: async (theme: Theme) => setThemeWithServer(theme),\n switchColorTheme: switchColorThemeWithServer,\n toggleTheme: async () => {\n const nextTheme = serverResolvedTheme === 'dark' ? 'light' : 'dark'\n setThemeWithServer(nextTheme)\n },\n toggleLightTheme: async () => setThemeWithServer('light'),\n toggleDarkTheme: async () => setThemeWithServer('dark'),\n toggleColorTheme: toggleColorThemeWithServer,\n createColorThemeToggle: createColorThemeToggleWithServer,\n isColorThemeActive: themeState.isColorThemeActive,\n }\n\n return (\n <TanStackThemeContext.Provider value={loadingContextValue}>\n <SharedThemeContext.Provider value={loadingContextValue}>\n {children}\n </SharedThemeContext.Provider>\n </TanStackThemeContext.Provider>\n )\n }\n\n const contextValue: TanStackThemeContextType = {\n ref: themeState.ref,\n theme: themeState.theme,\n colorTheme: themeState.colorTheme,\n resolvedTheme: themeState.resolvedTheme,\n systemTheme,\n isHydrated: true,\n setTheme: setThemeWithServer,\n setColorTheme: setColorThemeWithServer,\n switchTheme: switchThemeWithHydrationAwareness,\n switchThemeFromElement,\n switchColorTheme: switchColorThemeWithServer,\n toggleTheme: toggleThemeWithHydrationAwareness,\n toggleLightTheme: toggleLightThemeWithHydrationAwareness,\n toggleDarkTheme: toggleDarkThemeWithHydrationAwareness,\n toggleColorTheme: toggleColorThemeWithServer,\n createColorThemeToggle: createColorThemeToggleWithServer,\n isColorThemeActive: themeState.isColorThemeActive,\n }\n\n return (\n <TanStackThemeContext.Provider value={contextValue}>\n <SharedThemeContext.Provider value={contextValue}>\n {children}\n </SharedThemeContext.Provider>\n </TanStackThemeContext.Provider>\n )\n}\n\nexport const useTanStackTheme = (): TanStackThemeContextType => {\n const context = useContext(TanStackThemeContext)\n if (context === undefined) {\n throw new Error(\n 'useTanStackTheme must be used within a TanStackThemeProvider'\n )\n }\n return context\n}\n","import React, { createContext, useContext, ReactNode, useCallback } from 'react'\nimport { useThemeAnimation } from '../hooks/use-theme-animation'\nimport { Theme, ColorTheme, ThemeAnimationType } from '../../core/types'\nimport { SharedThemeContext } from './shared-theme-context'\nimport { getBrowserSystemTheme, withElementAsRef } from './provider-helpers'\n\ninterface ViteThemeContextType {\n ref: React.RefObject<HTMLButtonElement | null>\n theme: Theme\n colorTheme: ColorTheme\n resolvedTheme: 'light' | 'dark'\n systemTheme: 'light' | 'dark'\n setTheme: (theme: Theme) => void\n setColorTheme: (colorTheme: ColorTheme) => void\n switchTheme: (theme: Theme, animationOff?: boolean) => Promise<void>\n switchColorTheme: (colorTheme: string) => void\n toggleTheme: (animationOff?: boolean) => Promise<void>\n toggleLightTheme: (animationOff?: boolean) => Promise<void>\n toggleDarkTheme: (animationOff?: boolean) => Promise<void>\n toggleColorTheme: () => void\n createColorThemeToggle: (targetColorTheme: string) => () => void\n isColorThemeActive: (targetColorTheme: string) => boolean\n switchThemeFromElement: (\n theme: Theme,\n element: HTMLButtonElement\n ) => Promise<void>\n}\n\nconst ViteThemeContext = createContext<ViteThemeContextType | undefined>(\n undefined\n)\n\ninterface ViteThemeProviderProps {\n children: ReactNode\n themes?: Theme[]\n colorThemes?: ColorTheme[]\n defaultTheme?: Theme\n defaultColorTheme?: ColorTheme\n animationType?: ThemeAnimationType\n duration?: number\n attribute?: 'class' | 'data-theme'\n disableTransitionOnChange?: boolean\n storageKey?: string\n colorStorageKey?: string\n globalClassName?: string\n colorThemePrefix?: string\n}\n\n/**\n * Vite Theme Provider - Optimized for Vite SPA applications\n *\n * This provider is designed for Vite-based single-page applications with optional\n * transition disabling to prevent flash during theme switches.\n *\n * Note: For flash prevention on initial load, add a script to your index.html\n * or inject it via Vite plugin to apply theme before React loads.\n *\n * @param children - React children to wrap with theme context\n * @param themes - Available theme options\n * @param colorThemes - Available color theme options\n * @param defaultTheme - Default theme to use\n * @param defaultColorTheme - Default color theme to use\n * @param animationType - Animation type for theme transitions\n * @param duration - Animation duration in milliseconds\n * @param attribute - HTML attribute to use for theme ('class' or 'data-theme')\n * @param disableTransitionOnChange - Temporarily disable CSS transitions during theme switch\n * @param storageKey - LocalStorage key for theme preference\n * @param colorStorageKey - LocalStorage key for color theme preference\n * @param globalClassName - Class name for dark theme (when using 'class' attribute)\n * @param colorThemePrefix - Prefix for color theme classes\n */\nexport const ViteThemeProvider: React.FC<ViteThemeProviderProps> = ({\n children,\n themes = ['light', 'dark', 'system'],\n colorThemes = ['default'],\n defaultTheme = 'system',\n defaultColorTheme = 'default',\n animationType = ThemeAnimationType.CIRCLE,\n duration = 750,\n attribute = 'class',\n disableTransitionOnChange = false,\n storageKey = 'vite-theme',\n colorStorageKey = 'vite-color-theme',\n globalClassName = 'dark',\n colorThemePrefix = 'theme-',\n}) => {\n const themeState = useThemeAnimation({\n themes,\n colorThemes,\n defaultTheme,\n defaultColorTheme,\n animationType,\n duration,\n storageKey,\n colorStorageKey,\n globalClassName: attribute === 'class' ? globalClassName : undefined,\n colorThemePrefix,\n })\n\n const applyTransitionDisable = useCallback(() => {\n if (!disableTransitionOnChange) return () => {}\n\n const css = document.createElement('style')\n css.textContent = `*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}`\n document.head.appendChild(css)\n\n window.getComputedStyle(document.body)\n\n return () => {\n setTimeout(() => {\n document.head.removeChild(css)\n }, 1)\n }\n }, [disableTransitionOnChange])\n\n const wrappedSetTheme = useCallback(\n (theme: Theme) => {\n const cleanup = applyTransitionDisable()\n themeState.setTheme(theme)\n cleanup()\n },\n [themeState.setTheme, applyTransitionDisable]\n )\n\n const wrappedSwitchTheme = useCallback(\n async (theme: Theme, animationOff: boolean = false) => {\n const cleanup = applyTransitionDisable()\n await themeState.switchTheme(theme, animationOff)\n cleanup()\n },\n [themeState.switchTheme, applyTransitionDisable]\n )\n\n const wrappedToggleTheme = useCallback(\n async (animationOff: boolean = false) => {\n const cleanup = applyTransitionDisable()\n await themeState.toggleTheme(animationOff)\n cleanup()\n },\n [themeState.toggleTheme, applyTransitionDisable]\n )\n\n const wrappedToggleLightTheme = useCallback(\n async (animationOff: boolean = false) => {\n const cleanup = applyTransitionDisable()\n await themeState.toggleLightTheme(animationOff)\n cleanup()\n },\n [themeState.toggleLightTheme, applyTransitionDisable]\n )\n\n const wrappedToggleDarkTheme = useCallback(\n async (animationOff: boolean = false) => {\n const cleanup = applyTransitionDisable()\n await themeState.toggleDarkTheme(animationOff)\n cleanup()\n },\n [themeState.toggleDarkTheme, applyTransitionDisable]\n )\n\n const switchThemeFromElement = async (\n theme: Theme,\n element: HTMLButtonElement\n ) => {\n const cleanup = applyTransitionDisable()\n await withElementAsRef(themeState.ref, element, async () => {\n await themeState.switchTheme(theme)\n })\n cleanup()\n }\n\n const systemTheme = getBrowserSystemTheme()\n\n const contextValue: ViteThemeContextType = {\n ref: themeState.ref,\n theme: themeState.theme,\n colorTheme: themeState.colorTheme,\n resolvedTheme: themeState.resolvedTheme,\n systemTheme,\n setTheme: wrappedSetTheme,\n setColorTheme: themeState.setColorTheme,\n switchTheme: wrappedSwitchTheme,\n switchThemeFromElement,\n switchColorTheme: themeState.switchColorTheme,\n toggleTheme: wrappedToggleTheme,\n toggleLightTheme: wrappedToggleLightTheme,\n toggleDarkTheme: wrappedToggleDarkTheme,\n toggleColorTheme: themeState.toggleColorTheme,\n createColorThemeToggle: themeState.createColorThemeToggle,\n isColorThemeActive: themeState.isColorThemeActive,\n }\n\n return (\n <ViteThemeContext.Provider value={contextValue}>\n <SharedThemeContext.Provider value={contextValue}>\n {children}\n </SharedThemeContext.Provider>\n </ViteThemeContext.Provider>\n )\n}\n\nexport const useViteTheme = (): ViteThemeContextType => {\n const context = useContext(ViteThemeContext)\n if (context === undefined) {\n throw new Error('useViteTheme must be used within a ViteThemeProvider')\n }\n return context\n}\n"]}
@@ -0,0 +1,224 @@
1
+ import { UseThemeAnimationProps, UseThemeAnimationReturn, ThemeSwitcherProps, ThemeSelectorProps, Theme, ColorTheme, ThemeAnimationType, SystemThemeMode } from '../core/index.cjs';
2
+ export { SlideDirection, getSystemTheme, injectBaseStyles, prefersReducedMotion, resolveTheme, resolveThemeForServer, supportsViewTransitions } from '../core/index.cjs';
3
+ import React, { ReactNode } from 'react';
4
+
5
+ declare const useThemeAnimation: (props?: UseThemeAnimationProps) => UseThemeAnimationReturn;
6
+
7
+ declare const ThemeSwitcher: React.FC<ThemeSwitcherProps>;
8
+
9
+ declare const ThemeSelector: React.FC<ThemeSelectorProps>;
10
+
11
+ /**
12
+ * Context type for the Spaceman Theme Provider
13
+ */
14
+ interface SpacemanThemeContextType {
15
+ ref: React.RefObject<HTMLButtonElement | null>;
16
+ theme: Theme;
17
+ colorTheme: ColorTheme;
18
+ resolvedTheme: 'light' | 'dark';
19
+ setTheme: (theme: Theme) => void;
20
+ setColorTheme: (colorTheme: ColorTheme) => void;
21
+ switchTheme: (theme: Theme) => Promise<void>;
22
+ switchColorTheme: (colorTheme: string) => void;
23
+ toggleTheme: () => Promise<void>;
24
+ toggleLightTheme: () => Promise<void>;
25
+ toggleDarkTheme: () => Promise<void>;
26
+ toggleColorTheme: () => void;
27
+ createColorThemeToggle: (targetColorTheme: string) => () => void;
28
+ isColorThemeActive: (targetColorTheme: string) => boolean;
29
+ switchThemeFromElement: (theme: Theme, element: HTMLButtonElement) => Promise<void>;
30
+ }
31
+ /**
32
+ * Props for the Spaceman Theme Provider
33
+ */
34
+ interface SpacemanThemeProviderProps {
35
+ children: ReactNode;
36
+ themes?: Theme[];
37
+ colorThemes?: ColorTheme[];
38
+ defaultTheme?: Theme;
39
+ defaultColorTheme?: ColorTheme;
40
+ animationType?: ThemeAnimationType;
41
+ duration?: number;
42
+ }
43
+ /**
44
+ * Spaceman Theme Provider - Provides centralized theme state management
45
+ *
46
+ * This provider creates a single source of truth for theme state using the useThemeAnimation hook.
47
+ * All theme-related components should consume from this context to ensure synchronization.
48
+ *
49
+ * @param children - React children to wrap with theme context
50
+ * @param themes - Available theme options (default: ['light', 'dark', 'system'])
51
+ * @param colorThemes - Available color theme options (default: ['default'])
52
+ * @param defaultTheme - Default theme to use (default: 'system')
53
+ * @param defaultColorTheme - Default color theme to use (default: 'default')
54
+ * @param animationType - Animation type for theme transitions (default: CIRCLE)
55
+ * @param duration - Animation duration in milliseconds (default: 750)
56
+ */
57
+ declare const SpacemanThemeProvider: React.FC<SpacemanThemeProviderProps>;
58
+ /**
59
+ * Hook to consume the Spaceman Theme context
60
+ *
61
+ * @returns Theme context value with all theme state and methods
62
+ * @throws Error if used outside of SpacemanThemeProvider
63
+ */
64
+ declare const useSpacemanTheme: () => SpacemanThemeContextType;
65
+
66
+ interface NextThemeContextType {
67
+ ref: React.RefObject<HTMLButtonElement | null>;
68
+ theme: Theme;
69
+ colorTheme: ColorTheme;
70
+ resolvedTheme: 'light' | 'dark';
71
+ systemTheme: 'light' | 'dark';
72
+ setTheme: (theme: Theme) => void;
73
+ setColorTheme: (colorTheme: ColorTheme) => void;
74
+ switchTheme: (theme: Theme, animationOff?: boolean) => Promise<void>;
75
+ switchColorTheme: (colorTheme: string) => void;
76
+ toggleTheme: (animationOff?: boolean) => Promise<void>;
77
+ toggleLightTheme: (animationOff?: boolean) => Promise<void>;
78
+ toggleDarkTheme: (animationOff?: boolean) => Promise<void>;
79
+ toggleColorTheme: () => void;
80
+ createColorThemeToggle: (targetColorTheme: string) => () => void;
81
+ isColorThemeActive: (targetColorTheme: string) => boolean;
82
+ switchThemeFromElement: (theme: Theme, element: HTMLButtonElement) => Promise<void>;
83
+ }
84
+ interface NextThemeProviderProps {
85
+ children: React.ReactNode;
86
+ themes?: Theme[];
87
+ colorThemes?: ColorTheme[];
88
+ defaultTheme?: Theme;
89
+ defaultColorTheme?: ColorTheme;
90
+ animationType?: ThemeAnimationType;
91
+ duration?: number;
92
+ storageKey?: string;
93
+ colorStorageKey?: string;
94
+ attribute?: 'class' | 'data-theme';
95
+ value?: Record<string, string>;
96
+ enableSystem?: boolean;
97
+ enableColorScheme?: boolean;
98
+ disableTransitionOnChange?: boolean;
99
+ forcedTheme?: Theme;
100
+ nonce?: string;
101
+ scriptProps?: Omit<React.ScriptHTMLAttributes<HTMLScriptElement>, 'dangerouslySetInnerHTML' | 'nonce'>;
102
+ colorThemePrefix?: string;
103
+ globalClassName?: string;
104
+ disableAnimationOnInit?: boolean;
105
+ disablePreHydrationScript?: boolean;
106
+ onThemeChange?: (theme: Theme) => void;
107
+ onColorThemeChange?: (colorTheme: ColorTheme) => void;
108
+ }
109
+ declare const NextThemeProvider: React.FC<NextThemeProviderProps>;
110
+ declare const ThemeProvider: React.FC<NextThemeProviderProps>;
111
+ declare const useNextTheme: () => NextThemeContextType;
112
+ declare const useTheme: () => NextThemeContextType;
113
+
114
+ interface TanStackThemeContextType {
115
+ ref: React.RefObject<HTMLButtonElement | null>;
116
+ theme: Theme;
117
+ colorTheme: ColorTheme;
118
+ resolvedTheme: 'light' | 'dark';
119
+ systemTheme: 'light' | 'dark';
120
+ isHydrated: boolean;
121
+ setTheme: (theme: Theme) => void;
122
+ setColorTheme: (colorTheme: ColorTheme) => void;
123
+ switchTheme: (theme: Theme, animationOff?: boolean) => Promise<void>;
124
+ switchColorTheme: (colorTheme: string) => void;
125
+ toggleTheme: (animationOff?: boolean) => Promise<void>;
126
+ toggleLightTheme: (animationOff?: boolean) => Promise<void>;
127
+ toggleDarkTheme: (animationOff?: boolean) => Promise<void>;
128
+ toggleColorTheme: () => void;
129
+ createColorThemeToggle: (targetColorTheme: string) => () => void;
130
+ isColorThemeActive: (targetColorTheme: string) => boolean;
131
+ switchThemeFromElement: (theme: Theme, element: HTMLButtonElement) => Promise<void>;
132
+ }
133
+ interface TanStackThemeProviderProps {
134
+ children: ReactNode;
135
+ themes?: Theme[];
136
+ colorThemes?: ColorTheme[];
137
+ defaultTheme?: Theme;
138
+ defaultColorTheme?: ColorTheme;
139
+ animationType?: ThemeAnimationType;
140
+ duration?: number;
141
+ storageKey?: string;
142
+ colorStorageKey?: string;
143
+ globalClassName?: string;
144
+ colorThemePrefix?: string;
145
+ serverTheme?: 'light' | 'dark' | 'system';
146
+ serverColorTheme?: ColorTheme;
147
+ systemThemeMode?: SystemThemeMode;
148
+ onServerThemeChange?: (theme: Theme) => Promise<void> | void;
149
+ onServerColorThemeChange?: (colorTheme: ColorTheme) => Promise<void> | void;
150
+ }
151
+ interface TanStackStartThemeScriptProps {
152
+ storageKey?: string;
153
+ colorStorageKey?: string;
154
+ defaultTheme?: Theme;
155
+ defaultColorTheme?: ColorTheme;
156
+ globalClassName?: string;
157
+ colorThemePrefix?: string;
158
+ nonce?: string;
159
+ systemThemeMode?: SystemThemeMode;
160
+ }
161
+ declare const TanStackStartThemeScript: React.FC<TanStackStartThemeScriptProps>;
162
+ declare const TanStackThemeProvider: React.FC<TanStackThemeProviderProps>;
163
+ declare const useTanStackTheme: () => TanStackThemeContextType;
164
+
165
+ interface ViteThemeContextType {
166
+ ref: React.RefObject<HTMLButtonElement | null>;
167
+ theme: Theme;
168
+ colorTheme: ColorTheme;
169
+ resolvedTheme: 'light' | 'dark';
170
+ systemTheme: 'light' | 'dark';
171
+ setTheme: (theme: Theme) => void;
172
+ setColorTheme: (colorTheme: ColorTheme) => void;
173
+ switchTheme: (theme: Theme, animationOff?: boolean) => Promise<void>;
174
+ switchColorTheme: (colorTheme: string) => void;
175
+ toggleTheme: (animationOff?: boolean) => Promise<void>;
176
+ toggleLightTheme: (animationOff?: boolean) => Promise<void>;
177
+ toggleDarkTheme: (animationOff?: boolean) => Promise<void>;
178
+ toggleColorTheme: () => void;
179
+ createColorThemeToggle: (targetColorTheme: string) => () => void;
180
+ isColorThemeActive: (targetColorTheme: string) => boolean;
181
+ switchThemeFromElement: (theme: Theme, element: HTMLButtonElement) => Promise<void>;
182
+ }
183
+ interface ViteThemeProviderProps {
184
+ children: ReactNode;
185
+ themes?: Theme[];
186
+ colorThemes?: ColorTheme[];
187
+ defaultTheme?: Theme;
188
+ defaultColorTheme?: ColorTheme;
189
+ animationType?: ThemeAnimationType;
190
+ duration?: number;
191
+ attribute?: 'class' | 'data-theme';
192
+ disableTransitionOnChange?: boolean;
193
+ storageKey?: string;
194
+ colorStorageKey?: string;
195
+ globalClassName?: string;
196
+ colorThemePrefix?: string;
197
+ }
198
+ /**
199
+ * Vite Theme Provider - Optimized for Vite SPA applications
200
+ *
201
+ * This provider is designed for Vite-based single-page applications with optional
202
+ * transition disabling to prevent flash during theme switches.
203
+ *
204
+ * Note: For flash prevention on initial load, add a script to your index.html
205
+ * or inject it via Vite plugin to apply theme before React loads.
206
+ *
207
+ * @param children - React children to wrap with theme context
208
+ * @param themes - Available theme options
209
+ * @param colorThemes - Available color theme options
210
+ * @param defaultTheme - Default theme to use
211
+ * @param defaultColorTheme - Default color theme to use
212
+ * @param animationType - Animation type for theme transitions
213
+ * @param duration - Animation duration in milliseconds
214
+ * @param attribute - HTML attribute to use for theme ('class' or 'data-theme')
215
+ * @param disableTransitionOnChange - Temporarily disable CSS transitions during theme switch
216
+ * @param storageKey - LocalStorage key for theme preference
217
+ * @param colorStorageKey - LocalStorage key for color theme preference
218
+ * @param globalClassName - Class name for dark theme (when using 'class' attribute)
219
+ * @param colorThemePrefix - Prefix for color theme classes
220
+ */
221
+ declare const ViteThemeProvider: React.FC<ViteThemeProviderProps>;
222
+ declare const useViteTheme: () => ViteThemeContextType;
223
+
224
+ export { ColorTheme, NextThemeProvider, SpacemanThemeProvider, SystemThemeMode, TanStackStartThemeScript, TanStackThemeProvider, Theme, ThemeAnimationType, ThemeProvider, ThemeSelector, ThemeSelectorProps, ThemeSwitcher, ThemeSwitcherProps, UseThemeAnimationProps, UseThemeAnimationReturn, ViteThemeProvider, useNextTheme, useSpacemanTheme, useTanStackTheme, useTheme, useThemeAnimation, useViteTheme };