ThemePicker() — ui Function Reference
Architecture documentation for the ThemePicker() function in theme-picker.tsx from the ui codebase.
Entity Profile
Dependency Diagram
graph TD 701a1c79_feb0_e511_ca07_76603a1bb3bb["ThemePicker()"] 6748eb18_47f8_3637_a6fc_8e2e48228b8a["theme-picker.tsx"] 701a1c79_feb0_e511_ca07_76603a1bb3bb -->|defined in| 6748eb18_47f8_3637_a6fc_8e2e48228b8a style 701a1c79_feb0_e511_ca07_76603a1bb3bb fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
apps/v4/app/(create)/components/theme-picker.tsx lines 20–166
export function ThemePicker({
themes,
isMobile,
anchorRef,
}: {
themes: readonly Theme[]
isMobile: boolean
anchorRef: React.RefObject<HTMLDivElement | null>
}) {
const { resolvedTheme } = useTheme()
const mounted = useMounted()
const [params, setParams] = useDesignSystemSearchParams()
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]
)
React.useEffect(() => {
if (!currentTheme && themes.length > 0) {
setParams({ theme: themes[0].name })
}
}, [currentTheme, themes, setParams])
return (
<div className="group/picker relative">
<Picker>
<PickerTrigger>
<div className="flex flex-col justify-start text-left">
<div className="text-muted-foreground text-xs">Theme</div>
<div className="text-foreground text-sm font-medium">
{currentTheme?.title}
</div>
</div>
{mounted && resolvedTheme && (
<div
style={
{
"--color":
currentTheme?.cssVars?.[
resolvedTheme as "light" | "dark"
]?.[
currentThemeIsBaseColor ? "muted-foreground" : "primary"
],
} as React.CSSProperties
}
className="pointer-events-none absolute top-1/2 right-4 size-4 -translate-y-1/2 rounded-full bg-(--color) select-none"
/>
)}
</PickerTrigger>
<PickerContent
anchor={isMobile ? anchorRef : undefined}
side={isMobile ? "top" : "right"}
align={isMobile ? "center" : "start"}
className="max-h-[23rem]"
>
<PickerRadioGroup
value={currentTheme?.name}
onValueChange={(value) => {
setParams({ theme: value as ThemeName })
}}
>
<PickerGroup>
{themes
.filter((theme) =>
BASE_COLORS.find((baseColor) => baseColor.name === theme.name)
)
.map((theme) => {
const isBaseColor = BASE_COLORS.find(
(baseColor) => baseColor.name === theme.name
)
return (
<PickerRadioItem key={theme.name} value={theme.name}>
<div className="flex items-start gap-2">
{mounted && resolvedTheme && (
<div
Domain
Subdomains
Source
Frequently Asked Questions
What does ThemePicker() do?
ThemePicker() is a function in the ui codebase, defined in apps/v4/app/(create)/components/theme-picker.tsx.
Where is ThemePicker() defined?
ThemePicker() is defined in apps/v4/app/(create)/components/theme-picker.tsx at line 20.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free