diff --git a/apps/v4/app/(app)/themes/layout.tsx b/apps/v4/app/(app)/themes/layout.tsx new file mode 100644 index 0000000000..15d1bf2467 --- /dev/null +++ b/apps/v4/app/(app)/themes/layout.tsx @@ -0,0 +1,64 @@ +import { Metadata } from "next" +import Link from "next/link" + +import { Announcement } from "@/components/announcement" +import { + PageActions, + PageHeader, + PageHeaderDescription, + PageHeaderHeading, +} from "@/components/page-header" +import { Button } from "@/registry/new-york-v4/ui/button" + +const title = "Pick a Color. Make it yours." +const description = + "Try our hand-picked themes. Copy and paste them into your project. New theme editor coming soon." + +export const metadata: Metadata = { + title, + description, + openGraph: { + images: [ + { + url: `/og?title=${encodeURIComponent( + title + )}&description=${encodeURIComponent(description)}`, + }, + ], + }, + twitter: { + card: "summary_large_image", + images: [ + { + url: `/og?title=${encodeURIComponent( + title + )}&description=${encodeURIComponent(description)}`, + }, + ], + }, +} + +export default function ThemesLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( +
+
+
+
+ :root {
+
+
+ --radius: 0.65rem;
+
+ {Object.entries(activeThemeOKLCH?.light).map(([key, value]) => (
+
+ --{key}: {value};
+
+ ))}
+
+ }
+
+
+
+
+
+ .dark {
+
+ {Object.entries(activeThemeOKLCH?.dark).map(([key, value]) => (
+
+ --{key}: {value};
+
+ ))}
+
+ }
+
+
+
+
+
+
+
+ @layer base {
+
+
+ :root {
+
+
+ --background:{" "}
+ {activeTheme?.cssVars.light["background"]};
+
+
+ --foreground:{" "}
+ {activeTheme?.cssVars.light["foreground"]};
+
+ {[
+ "card",
+ "popover",
+ "primary",
+ "secondary",
+ "muted",
+ "accent",
+ "destructive",
+ ].map((prefix) => (
+
+
+ --{prefix}:{" "}
+ {
+ activeTheme?.cssVars.light[
+ prefix as keyof typeof activeTheme.cssVars.light
+ ]
+ }
+ ;
+
+
+ --{prefix}-foreground:{" "}
+ {
+ activeTheme?.cssVars.light[
+ `${prefix}-foreground` as keyof typeof activeTheme.cssVars.light
+ ]
+ }
+ ;
+
+
+ ))}
+
+ --border:{" "}
+ {activeTheme?.cssVars.light["border"]};
+
+
+ --input:{" "}
+ {activeTheme?.cssVars.light["input"]};
+
+
+ --ring:{" "}
+ {activeTheme?.cssVars.light["ring"]};
+
+
+ --radius: 0.5rem;
+
+ {["chart-1", "chart-2", "chart-3", "chart-4", "chart-5"].map(
+ (prefix) => (
+
+
+ --{prefix}:{" "}
+ {
+ activeTheme?.cssVars.light[
+ prefix as keyof typeof activeTheme.cssVars.light
+ ]
+ }
+ ;
+
+
+ )
+ )}
+
+ }
+
+
+
+
+
+ .dark {
+
+
+ --background:{" "}
+ {activeTheme?.cssVars.dark["background"]};
+
+
+ --foreground:{" "}
+ {activeTheme?.cssVars.dark["foreground"]};
+
+ {[
+ "card",
+ "popover",
+ "primary",
+ "secondary",
+ "muted",
+ "accent",
+ "destructive",
+ ].map((prefix) => (
+
+
+ --{prefix}:{" "}
+ {
+ activeTheme?.cssVars.dark[
+ prefix as keyof typeof activeTheme.cssVars.dark
+ ]
+ }
+ ;
+
+
+ --{prefix}-foreground:{" "}
+ {
+ activeTheme?.cssVars.dark[
+ `${prefix}-foreground` as keyof typeof activeTheme.cssVars.dark
+ ]
+ }
+ ;
+
+
+ ))}
+
+ --border:{" "}
+ {activeTheme?.cssVars.dark["border"]};
+
+
+ --input:{" "}
+ {activeTheme?.cssVars.dark["input"]};
+
+
+ --ring:{" "}
+ {activeTheme?.cssVars.dark["ring"]};
+
+ {["chart-1", "chart-2", "chart-3", "chart-4", "chart-5"].map(
+ (prefix) => (
+
+
+ --{prefix}:{" "}
+ {
+ activeTheme?.cssVars.dark[
+ prefix as keyof typeof activeTheme.cssVars.dark
+ ]
+ }
+ ;
+
+
+ )
+ )}
+
+ }
+
+
+ }
+
+
+
+