"use client" import * as React from "react" import { useMounted } from "@/hooks/use-mounted" import { BASE_COLORS, type Theme, type ThemeName } from "@/registry/config" import { LockButton } from "@/app/(app)/(create)/components/lock-button" import { Picker, PickerContent, PickerGroup, PickerRadioGroup, PickerRadioItem, PickerSeparator, PickerTrigger, } from "@/app/(app)/(create)/components/picker" import { usePreviewOverride } from "@/app/(app)/(create)/components/preview-override" import { useDesignSystemSearchParams } from "@/app/(app)/(create)/lib/search-params" export function ThemePicker({ themes, isMobile, anchorRef, }: { themes: readonly Theme[] isMobile: boolean anchorRef: React.RefObject }) { const mounted = useMounted() const [params, setParams] = useDesignSystemSearchParams() const { setOverride, clearOverride } = usePreviewOverride() const currentTheme = React.useMemo( () => themes.find((theme) => theme.name === params.theme), [themes, params.theme] ) const currentThemeIsBaseColor = React.useMemo( () => BASE_COLORS.find((baseColor) => baseColor.name === params.theme), [params.theme] ) return (
{ if (!open) { clearOverride() } }} >
Theme
{currentTheme?.title}
{mounted && (
)} { setParams({ theme: value as ThemeName }) }} onItemPreview={ isMobile ? undefined : (value) => setOverride({ theme: value as ThemeName }) } > {themes .filter((theme) => BASE_COLORS.find((baseColor) => baseColor.name === theme.name) ) .map((theme) => { return ( {theme.title} ) })} {themes .filter( (theme) => !BASE_COLORS.find( (baseColor) => baseColor.name === theme.name ) ) .map((theme) => { return ( {theme.title} ) })}
) }