"use client" import * as React from "react" import dynamic from "next/dynamic" import { type RegistryItem } from "shadcn/schema" import { useIsMobile } from "@/hooks/use-mobile" import { getThemesForBaseColor, STYLES } from "@/registry/config" import { Button } from "@/styles/base-nova/ui/button" import { Card, CardContent, CardFooter, CardHeader, } from "@/styles/base-nova/ui/card" import { FieldGroup, FieldSeparator } from "@/styles/base-nova/ui/field" import { MenuAccentPicker } from "@/app/(app)/(create)/components/accent-picker" import { ActionMenu } from "@/app/(app)/(create)/components/action-menu" import { BaseColorPicker } from "@/app/(app)/(create)/components/base-color-picker" import { BasePicker } from "@/app/(app)/(create)/components/base-picker" import { ChartColorPicker } from "@/app/(app)/(create)/components/chart-color-picker" import { CopyPreset } from "@/app/(app)/(create)/components/copy-preset" import { FontPicker } from "@/app/(app)/(create)/components/font-picker" import { IconLibraryPicker } from "@/app/(app)/(create)/components/icon-library-picker" import { MainMenu } from "@/app/(app)/(create)/components/main-menu" import { MenuColorPicker } from "@/app/(app)/(create)/components/menu-picker" import { OpenPreset } from "@/app/(app)/(create)/components/open-preset" import { RadiusPicker } from "@/app/(app)/(create)/components/radius-picker" import { RandomButton } from "@/app/(app)/(create)/components/random-button" import { ResetDialog } from "@/app/(app)/(create)/components/reset-button" import { StylePicker } from "@/app/(app)/(create)/components/style-picker" import { ThemePicker } from "@/app/(app)/(create)/components/theme-picker" import { FONT_HEADING_OPTIONS, FONTS } from "@/app/(app)/(create)/lib/fonts" import { useDesignSystemSearchParams } from "@/app/(app)/(create)/lib/search-params" // Only visible when user clicks "Create Project". Rendered client-only to // avoid a useId hydration mismatch on the Base UI dialog trigger. The loading // placeholder mirrors the trigger button exactly so there is no layout shift. const ProjectForm = dynamic( () => import("@/app/(app)/(create)/components/project-form").then( (m) => m.ProjectForm ), { ssr: false, loading: () => ( ), } ) export function Customizer({ itemsByBase, }: { itemsByBase: Record[]> }) { const [params] = useDesignSystemSearchParams() const isMobile = useIsMobile() const anchorRef = React.useRef(null) const availableThemes = React.useMemo( () => getThemesForBaseColor(params.baseColor), [params.baseColor] ) return ( {isMobile && } ) }