import { useEffect, useState } from "react" import { Check, Layers } from "lucide-react" import { Button } from "~/components/ui/button" import { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, } from "~/components/ui/popover" import { cn } from "~/lib/utils" export const surfaces = [ { id: "default", label: "Default" }, { id: "snow", label: "Snow" }, { id: "stone", label: "Stone" }, { id: "sage", label: "Sage" }, { id: "slate", label: "Slate" }, ] as const export type SurfaceId = (typeof surfaces)[number]["id"] const STORAGE_KEY = "crema-surface" const DEFAULT_SURFACE: SurfaceId = "default" function isSurfaceId(value: string | null): value is SurfaceId { return !!value && surfaces.some((s) => s.id === value) } function applySurface(id: SurfaceId) { if (id === "default") { delete document.body.dataset.surface } else { document.body.dataset.surface = id } } export function SurfacePicker() { const [current, setCurrent] = useState(DEFAULT_SURFACE) useEffect(() => { const stored = localStorage.getItem(STORAGE_KEY) const next = isSurfaceId(stored) ? stored : DEFAULT_SURFACE setCurrent(next) applySurface(next) }, []) const select = (id: SurfaceId) => { setCurrent(id) applySurface(id) localStorage.setItem(STORAGE_KEY, id) } return ( } /> Surface Tint of cards and the sidebar.
{surfaces.map((s) => { const active = current === s.id return ( ) })}
) }