diff --git a/.vscode/settings.json b/.vscode/settings.json index 48a495a6a0..b9b8873c90 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,8 +4,10 @@ { "pattern": "packages/*/" } ], "tailwindCSS.experimental.classRegex": [ - ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"], - ["cn\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"] + ["cva\\(((?:[^()]|\\([^()]*\\))*)\\)", "[\"'`]?([^\"'`]+)[\"'`]?"], + ["cn\\(((?:[^()]|\\([^()]*\\))*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"] + // "cva\\(([^)]*)\\)", + // "[\"'`]([^\"'`]*).*?[\"'`]" ], "vitest.debugExclude": [ "/**", diff --git a/apps/v4/.gitignore b/apps/v4/.gitignore new file mode 100644 index 0000000000..5ef6a52078 --- /dev/null +++ b/apps/v4/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/v4/.prettierignore b/apps/v4/.prettierignore new file mode 100644 index 0000000000..21825d3542 --- /dev/null +++ b/apps/v4/.prettierignore @@ -0,0 +1,6 @@ +dist +node_modules +.next +build +.contentlayer +registry/__index__.tsx diff --git a/apps/v4/README.md b/apps/v4/README.md new file mode 100644 index 0000000000..cb8a74abed --- /dev/null +++ b/apps/v4/README.md @@ -0,0 +1 @@ +This is a wip registry for the `shadcn` canary version. It has React 19 and Tailwind v4 components. diff --git a/apps/v4/__registry__/.autogenerated b/apps/v4/__registry__/.autogenerated new file mode 100644 index 0000000000..0055c2a3e0 --- /dev/null +++ b/apps/v4/__registry__/.autogenerated @@ -0,0 +1 @@ +// The content of this directory is autogenerated by the registry server. diff --git a/apps/v4/__registry__/.gitkeep b/apps/v4/__registry__/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/v4/__registry__/README.md b/apps/v4/__registry__/README.md new file mode 100644 index 0000000000..5621ceace4 --- /dev/null +++ b/apps/v4/__registry__/README.md @@ -0,0 +1 @@ +> Files inside this directory is autogenerated by `./scripts/build-registry.ts`. **Do not edit them manually.** - shadcn diff --git a/apps/v4/__registry__/index.tsx b/apps/v4/__registry__/index.tsx new file mode 100644 index 0000000000..14126108de --- /dev/null +++ b/apps/v4/__registry__/index.tsx @@ -0,0 +1,3588 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +// @ts-nocheck +// This file is autogenerated by scripts/build-registry.ts +// Do not edit this file directly. +import * as React from "react" + +export const Index: Record = { + accordion: { + name: "accordion", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/accordion.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/accordion.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + alert: { + name: "alert", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/alert.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/alert.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "alert-dialog": { + name: "alert-dialog", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/ui/alert-dialog.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/alert-dialog.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "aspect-ratio": { + name: "aspect-ratio", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/aspect-ratio.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/aspect-ratio.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + avatar: { + name: "avatar", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/avatar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/avatar.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + badge: { + name: "badge", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/badge.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/badge.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + breadcrumb: { + name: "breadcrumb", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/breadcrumb.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/breadcrumb.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + button: { + name: "button", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/button.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/button.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + calendar: { + name: "calendar", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/ui/calendar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/calendar.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + card: { + name: "card", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/card.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/card.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + carousel: { + name: "carousel", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/ui/carousel.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/carousel.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + chart: { + name: "chart", + description: "", + type: "registry:ui", + registryDependencies: ["card"], + files: [ + { + path: "registry/ui/chart.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/chart.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + checkbox: { + name: "checkbox", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/checkbox.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/checkbox.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + collapsible: { + name: "collapsible", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/collapsible.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/collapsible.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + command: { + name: "command", + description: "", + type: "registry:ui", + registryDependencies: ["dialog"], + files: [ + { + path: "registry/ui/command.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/command.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "context-menu": { + name: "context-menu", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/context-menu.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/context-menu.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + dialog: { + name: "dialog", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/dialog.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/dialog.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + drawer: { + name: "drawer", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/drawer.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/drawer.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "dropdown-menu": { + name: "dropdown-menu", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/dropdown-menu.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/dropdown-menu.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + form: { + name: "form", + description: "", + type: "registry:ui", + registryDependencies: ["button", "label"], + files: [ + { + path: "registry/ui/form.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/form.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "hover-card": { + name: "hover-card", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/hover-card.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/hover-card.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + input: { + name: "input", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/input.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/input.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "input-otp": { + name: "input-otp", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/input-otp.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/input-otp.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + label: { + name: "label", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/label.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/label.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + menubar: { + name: "menubar", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/menubar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/menubar.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "navigation-menu": { + name: "navigation-menu", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/navigation-menu.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/navigation-menu.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + pagination: { + name: "pagination", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/ui/pagination.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/pagination.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + popover: { + name: "popover", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/popover.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/popover.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + progress: { + name: "progress", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/progress.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/progress.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "radio-group": { + name: "radio-group", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/radio-group.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/radio-group.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + resizable: { + name: "resizable", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/resizable.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/resizable.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "scroll-area": { + name: "scroll-area", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/scroll-area.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/scroll-area.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + select: { + name: "select", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/select.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/select.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + separator: { + name: "separator", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/separator.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/separator.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + sheet: { + name: "sheet", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/sheet.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/sheet.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + sidebar: { + name: "sidebar", + description: "", + type: "registry:ui", + registryDependencies: [ + "button", + "separator", + "sheet", + "tooltip", + "input", + "use-mobile", + "skeleton", + ], + files: [ + { + path: "registry/ui/sidebar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/sidebar.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + skeleton: { + name: "skeleton", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/skeleton.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/skeleton.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + slider: { + name: "slider", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/slider.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/slider.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + sonner: { + name: "sonner", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/sonner.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/sonner.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + switch: { + name: "switch", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/switch.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/switch.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + table: { + name: "table", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/table.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/table.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + tabs: { + name: "tabs", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/tabs.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/tabs.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + textarea: { + name: "textarea", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/textarea.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/textarea.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + toggle: { + name: "toggle", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/toggle.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/toggle.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "toggle-group": { + name: "toggle-group", + description: "", + type: "registry:ui", + registryDependencies: ["toggle"], + files: [ + { + path: "registry/ui/toggle-group.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/toggle-group.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + tooltip: { + name: "tooltip", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/tooltip.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/tooltip.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-01": { + name: "sidebar-01", + description: "A simple sidebar with navigation grouped by section.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "dropdown-menu", + ], + files: [ + { + path: "registry/blocks/sidebar-01/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-01/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-01/components/search-form.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-01/components/version-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-01/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-02": { + name: "sidebar-02", + description: "A sidebar with collapsible sections.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "dropdown-menu", + ], + files: [ + { + path: "registry/blocks/sidebar-02/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-02/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-02/components/search-form.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-02/components/version-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-02/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-03": { + name: "sidebar-03", + description: "A sidebar with submenus.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb"], + files: [ + { + path: "registry/blocks/sidebar-03/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-03/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-03/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-04": { + name: "sidebar-04", + description: "A floating sidebar with submenus.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "separator"], + files: [ + { + path: "registry/blocks/sidebar-04/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-04/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-04/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-05": { + name: "sidebar-05", + description: "A sidebar with collapsible submenus.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "collapsible", + ], + files: [ + { + path: "registry/blocks/sidebar-05/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-05/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-05/components/search-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-05/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-06": { + name: "sidebar-06", + description: "A sidebar with submenus as dropdowns.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "card", + "dropdown-menu", + ], + files: [ + { + path: "registry/blocks/sidebar-06/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-06/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-06/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-06/components/sidebar-opt-in-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-06/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-07": { + name: "sidebar-07", + description: "A sidebar that collapses to icons.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "registry/blocks/sidebar-07/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-07/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-07/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-07/components/nav-projects.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-07/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-07/components/team-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-07/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-08": { + name: "sidebar-08", + description: "An inset sidebar with secondary navigation.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "registry/blocks/sidebar-08/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-08/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-08/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-08/components/nav-projects.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-08/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-08/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-08/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-09": { + name: "sidebar-09", + description: "Collapsible nested sidebars.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + "switch", + ], + files: [ + { + path: "registry/blocks/sidebar-09/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-09/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-09/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-09/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-10": { + name: "sidebar-10", + description: "A sidebar in a popover.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "popover", + "collapsible", + "dropdown-menu", + ], + files: [ + { + path: "registry/blocks/sidebar-10/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-10/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-10/components/nav-actions.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-10/components/nav-favorites.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-10/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-10/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-10/components/nav-workspaces.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-10/components/team-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-10/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-11": { + name: "sidebar-11", + description: "A sidebar with a collapsible file tree.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "separator", "collapsible"], + files: [ + { + path: "registry/blocks/sidebar-11/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-11/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-11/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-12": { + name: "sidebar-12", + description: "A sidebar with a calendar.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "calendar", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "registry/blocks/sidebar-12/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-12/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-12/components/calendars.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-12/components/date-picker.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-12/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-12/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-13": { + name: "sidebar-13", + description: "A sidebar in a dialog.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "button", "dialog"], + files: [ + { + path: "registry/blocks/sidebar-13/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-13/components/settings-dialog.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-13/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-14": { + name: "sidebar-14", + description: "A sidebar on the right.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb"], + files: [ + { + path: "registry/blocks/sidebar-14/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-14/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-14/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-15": { + name: "sidebar-15", + description: "A left and right sidebar.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "popover", + "collapsible", + "dropdown-menu", + "calendar", + "avatar", + ], + files: [ + { + path: "registry/blocks/sidebar-15/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-15/components/calendars.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/date-picker.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/nav-favorites.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/nav-workspaces.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/sidebar-left.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/sidebar-right.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/team-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-15/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-16": { + name: "sidebar-16", + description: "A sidebar with a sticky site header.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + "button", + ], + files: [ + { + path: "registry/blocks/sidebar-16/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-16/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-16/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-16/components/nav-projects.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-16/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-16/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-16/components/search-form.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-16/components/site-header.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-16/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "login-01": { + name: "login-01", + description: "A simple login form.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "registry/blocks/login-01/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/blocks/login-01/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/login-01/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "login-02": { + name: "login-02", + description: "A two column login page with a cover image.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "registry/blocks/login-02/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/blocks/login-02/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/login-02/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "login-03": { + name: "login-03", + description: "A login page with a muted background color.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "registry/blocks/login-03/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/blocks/login-03/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/login-03/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "login-04": { + name: "login-04", + description: "A login page with form and image.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "registry/blocks/login-04/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/blocks/login-04/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/login-04/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "login-05": { + name: "login-05", + description: "A simple email-only login page.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "registry/blocks/login-05/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/blocks/login-05/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/login-05/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-axes": { + name: "chart-area-axes", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-axes.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-axes.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-default": { + name: "chart-area-default", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-default.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-default.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-gradient": { + name: "chart-area-gradient", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-gradient.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-gradient.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-icons": { + name: "chart-area-icons", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-icons.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-icons.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-interactive": { + name: "chart-area-interactive", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart", "select"], + files: [ + { + path: "registry/charts/chart-area-interactive.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-interactive.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-legend": { + name: "chart-area-legend", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-legend.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-legend.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-linear": { + name: "chart-area-linear", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-linear.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-linear.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-stacked-expand": { + name: "chart-area-stacked-expand", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-stacked-expand.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-area-stacked-expand.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-stacked": { + name: "chart-area-stacked", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-stacked.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-stacked.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-step": { + name: "chart-area-step", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-step.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-step.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-active": { + name: "chart-bar-active", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-active.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-active.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-default": { + name: "chart-bar-default", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-default.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-default.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-horizontal": { + name: "chart-bar-horizontal", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-horizontal.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-horizontal.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-interactive": { + name: "chart-bar-interactive", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-interactive.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-interactive.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-label-custom": { + name: "chart-bar-label-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-label-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-label-custom.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-label": { + name: "chart-bar-label", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-label.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-label.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-mixed": { + name: "chart-bar-mixed", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-mixed.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-mixed.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-multiple": { + name: "chart-bar-multiple", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-multiple.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-multiple.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-negative": { + name: "chart-bar-negative", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-negative.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-negative.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-stacked": { + name: "chart-bar-stacked", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-stacked.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-stacked.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-default": { + name: "chart-line-default", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-default.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-default.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-dots-colors": { + name: "chart-line-dots-colors", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-dots-colors.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-dots-colors.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-dots-custom": { + name: "chart-line-dots-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-dots-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-dots-custom.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-dots": { + name: "chart-line-dots", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-dots.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-dots.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-interactive": { + name: "chart-line-interactive", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-interactive.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-interactive.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-label-custom": { + name: "chart-line-label-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-label-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-label-custom.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-label": { + name: "chart-line-label", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-label.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-label.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-linear": { + name: "chart-line-linear", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-linear.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-linear.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-multiple": { + name: "chart-line-multiple", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-multiple.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-multiple.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-step": { + name: "chart-line-step", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-step.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-step.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-donut-active": { + name: "chart-pie-donut-active", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-donut-active.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-donut-active.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-donut-text": { + name: "chart-pie-donut-text", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-donut-text.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-donut-text.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-donut": { + name: "chart-pie-donut", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-donut.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-donut.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-interactive": { + name: "chart-pie-interactive", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-interactive.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-interactive.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-label-custom": { + name: "chart-pie-label-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-label-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-label-custom.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-label-list": { + name: "chart-pie-label-list", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-label-list.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-label-list.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-label": { + name: "chart-pie-label", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-label.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-label.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-legend": { + name: "chart-pie-legend", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-legend.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-legend.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-separator-none": { + name: "chart-pie-separator-none", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-separator-none.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-separator-none.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-simple": { + name: "chart-pie-simple", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-simple.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-simple.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-stacked": { + name: "chart-pie-stacked", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-stacked.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-stacked.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-default": { + name: "chart-radar-default", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-default.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-default.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-dots": { + name: "chart-radar-dots", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-dots.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-dots.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-grid-circle-fill": { + name: "chart-radar-grid-circle-fill", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-grid-circle-fill.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-radar-grid-circle-fill.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-grid-circle-no-lines": { + name: "chart-radar-grid-circle-no-lines", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-grid-circle-no-lines.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-radar-grid-circle-no-lines.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-grid-circle": { + name: "chart-radar-grid-circle", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-grid-circle.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-grid-circle.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-grid-custom": { + name: "chart-radar-grid-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-grid-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-grid-custom.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-grid-fill": { + name: "chart-radar-grid-fill", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-grid-fill.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-grid-fill.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-grid-none": { + name: "chart-radar-grid-none", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-grid-none.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-grid-none.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-icons": { + name: "chart-radar-icons", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-icons.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-icons.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-label-custom": { + name: "chart-radar-label-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-label-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-label-custom.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-legend": { + name: "chart-radar-legend", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-legend.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-legend.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-lines-only": { + name: "chart-radar-lines-only", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-lines-only.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-lines-only.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-multiple": { + name: "chart-radar-multiple", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-multiple.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-multiple.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-radius": { + name: "chart-radar-radius", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-radius.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-radius.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radial-grid": { + name: "chart-radial-grid", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radial-grid.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radial-grid.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radial-label": { + name: "chart-radial-label", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radial-label.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radial-label.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radial-shape": { + name: "chart-radial-shape", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radial-shape.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radial-shape.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radial-simple": { + name: "chart-radial-simple", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radial-simple.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radial-simple.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radial-stacked": { + name: "chart-radial-stacked", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radial-stacked.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radial-stacked.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radial-text": { + name: "chart-radial-text", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radial-text.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radial-text.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-default": { + name: "chart-tooltip-default", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-default.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-tooltip-default.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-indicator-line": { + name: "chart-tooltip-indicator-line", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-indicator-line.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-tooltip-indicator-line.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-indicator-none": { + name: "chart-tooltip-indicator-none", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-indicator-none.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-tooltip-indicator-none.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-label-none": { + name: "chart-tooltip-label-none", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-label-none.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-tooltip-label-none.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-label-custom": { + name: "chart-tooltip-label-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-label-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-tooltip-label-custom.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-label-formatter": { + name: "chart-tooltip-label-formatter", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-label-formatter.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-tooltip-label-formatter.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-formatter": { + name: "chart-tooltip-formatter", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-formatter.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-tooltip-formatter.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-icons": { + name: "chart-tooltip-icons", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-icons.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-tooltip-icons.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-advanced": { + name: "chart-tooltip-advanced", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-advanced.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-tooltip-advanced.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "use-mobile": { + name: "use-mobile", + description: "", + type: "registry:hook", + registryDependencies: undefined, + files: [ + { + path: "registry/hooks/use-mobile.ts", + type: "registry:hook", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/hooks/use-mobile.ts") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, +} diff --git a/apps/v4/app/(app)/charts/charts.tsx b/apps/v4/app/(app)/charts/charts.tsx new file mode 100644 index 0000000000..589f5b87d8 --- /dev/null +++ b/apps/v4/app/(app)/charts/charts.tsx @@ -0,0 +1,76 @@ +export { ChartAreaDefault } from "@/registry/charts/chart-area-default" +export { ChartAreaLinear } from "@/registry/charts/chart-area-linear" +export { ChartAreaStep } from "@/registry/charts/chart-area-step" +export { ChartAreaLegend } from "@/registry/charts/chart-area-legend" +export { ChartAreaStacked } from "@/registry/charts/chart-area-stacked" +export { ChartAreaStackedExpand } from "@/registry/charts/chart-area-stacked-expand" +export { ChartAreaIcons } from "@/registry/charts/chart-area-icons" +export { ChartAreaGradient } from "@/registry/charts/chart-area-gradient" +export { ChartAreaAxes } from "@/registry/charts/chart-area-axes" +export { ChartAreaInteractive } from "@/registry/charts/chart-area-interactive" + +export { ChartBarDefault } from "@/registry/charts/chart-bar-default" +export { ChartBarHorizontal } from "@/registry/charts/chart-bar-horizontal" +export { ChartBarMultiple } from "@/registry/charts/chart-bar-multiple" +export { ChartBarStacked } from "@/registry/charts/chart-bar-stacked" +export { ChartBarLabel } from "@/registry/charts/chart-bar-label" +export { ChartBarLabelCustom } from "@/registry/charts/chart-bar-label-custom" +export { ChartBarMixed } from "@/registry/charts/chart-bar-mixed" +export { ChartBarActive } from "@/registry/charts/chart-bar-active" +export { ChartBarNegative } from "@/registry/charts/chart-bar-negative" +export { ChartBarInteractive } from "@/registry/charts/chart-bar-interactive" + +export { ChartLineDefault } from "@/registry/charts/chart-line-default" +export { ChartLineLinear } from "@/registry/charts/chart-line-linear" +export { ChartLineStep } from "@/registry/charts/chart-line-step" +export { ChartLineMultiple } from "@/registry/charts/chart-line-multiple" +export { ChartLineDots } from "@/registry/charts/chart-line-dots" +export { ChartLineDotsCustom } from "@/registry/charts/chart-line-dots-custom" +export { ChartLineDotsColors } from "@/registry/charts/chart-line-dots-colors" +export { ChartLineLabel } from "@/registry/charts/chart-line-label" +export { ChartLineLabelCustom } from "@/registry/charts/chart-line-label-custom" +export { ChartLineInteractive } from "@/registry/charts/chart-line-interactive" + +export { ChartPieSimple } from "@/registry/charts/chart-pie-simple" +export { ChartPieSeparatorNone } from "@/registry/charts/chart-pie-separator-none" +export { ChartPieLabel } from "@/registry/charts/chart-pie-label" +export { ChartPieLabelCustom } from "@/registry/charts/chart-pie-label-custom" +export { ChartPieLabelList } from "@/registry/charts/chart-pie-label-list" +export { ChartPieLegend } from "@/registry/charts/chart-pie-legend" +export { ChartPieDonut } from "@/registry/charts/chart-pie-donut" +export { ChartPieDonutActive } from "@/registry/charts/chart-pie-donut-active" +export { ChartPieDonutText } from "@/registry/charts/chart-pie-donut-text" +export { ChartPieStacked } from "@/registry/charts/chart-pie-stacked" +export { ChartPieInteractive } from "@/registry/charts/chart-pie-interactive" + +export { ChartRadarDefault } from "@/registry/charts/chart-radar-default" +export { ChartRadarDots } from "@/registry/charts/chart-radar-dots" +export { ChartRadarLinesOnly } from "@/registry/charts/chart-radar-lines-only" +export { ChartRadarLabelCustom } from "@/registry/charts/chart-radar-label-custom" +export { ChartRadarGridCustom } from "@/registry/charts/chart-radar-grid-custom" +export { ChartRadarGridNone } from "@/registry/charts/chart-radar-grid-none" +export { ChartRadarGridCircle } from "@/registry/charts/chart-radar-grid-circle" +export { ChartRadarGridCircleNoLines } from "@/registry/charts/chart-radar-grid-circle-no-lines" +export { ChartRadarGridCircleFill } from "@/registry/charts/chart-radar-grid-circle-fill" +export { ChartRadarGridFill } from "@/registry/charts/chart-radar-grid-fill" +export { ChartRadarMultiple } from "@/registry/charts/chart-radar-multiple" +export { ChartRadarLegend } from "@/registry/charts/chart-radar-legend" +export { ChartRadarIcons } from "@/registry/charts/chart-radar-icons" +export { ChartRadarRadius } from "@/registry/charts/chart-radar-radius" + +export { ChartRadialSimple } from "@/registry/charts/chart-radial-simple" +export { ChartRadialLabel } from "@/registry/charts/chart-radial-label" +export { ChartRadialGrid } from "@/registry/charts/chart-radial-grid" +export { ChartRadialText } from "@/registry/charts/chart-radial-text" +export { ChartRadialShape } from "@/registry/charts/chart-radial-shape" +export { ChartRadialStacked } from "@/registry/charts/chart-radial-stacked" + +export { ChartTooltipDefault } from "@/registry/charts/chart-tooltip-default" +export { ChartTooltipIndicatorLine } from "@/registry/charts/chart-tooltip-indicator-line" +export { ChartTooltipIndicatorNone } from "@/registry/charts/chart-tooltip-indicator-none" +export { ChartTooltipLabelCustom } from "@/registry/charts/chart-tooltip-label-custom" +export { ChartTooltipLabelFormatter } from "@/registry/charts/chart-tooltip-label-formatter" +export { ChartTooltipLabelNone } from "@/registry/charts/chart-tooltip-label-none" +export { ChartTooltipFormatter } from "@/registry/charts/chart-tooltip-formatter" +export { ChartTooltipIcons } from "@/registry/charts/chart-tooltip-icons" +export { ChartTooltipAdvanced } from "@/registry/charts/chart-tooltip-advanced" diff --git a/apps/v4/app/(app)/charts/page.tsx b/apps/v4/app/(app)/charts/page.tsx new file mode 100644 index 0000000000..b1dba32bb8 --- /dev/null +++ b/apps/v4/app/(app)/charts/page.tsx @@ -0,0 +1,20 @@ +import { ComponentWrapper } from "@/components/component-wrapper" +import * as Charts from "@/app/(app)/charts/charts" + +export default function ChartsPage() { + return ( +
+ {Object.entries(Charts) + .sort() + .map(([key, Component]) => ( + + + + ))} +
+ ) +} diff --git a/apps/v4/app/(app)/layout.tsx b/apps/v4/app/(app)/layout.tsx new file mode 100644 index 0000000000..27db48a725 --- /dev/null +++ b/apps/v4/app/(app)/layout.tsx @@ -0,0 +1,57 @@ +import Link from "next/link" + +import { AppSidebar } from "@/components/app-sidebar" +import { ModeSwitcher } from "@/components/mode-switcher" +import { + NavigationMenu, + NavigationMenuItem, + NavigationMenuLink, + NavigationMenuList, +} from "@/registry/ui/navigation-menu" +import { Separator } from "@/registry/ui/separator" +import { + SidebarInset, + SidebarProvider, + SidebarTrigger, +} from "@/registry/ui/sidebar" + +export default function AppLayout({ + children, +}: Readonly<{ + children: React.ReactNode +}>) { + return ( + +
+
+ + + + + + + Home + + + + + Charts + + + + +
+ +
+
+
+
+ + {children} +
+
+ ) +} diff --git a/apps/v4/app/(app)/page.tsx b/apps/v4/app/(app)/page.tsx new file mode 100644 index 0000000000..cccd184bb3 --- /dev/null +++ b/apps/v4/app/(app)/page.tsx @@ -0,0 +1,196 @@ +import { AccordionDemo } from "@/components/accordion-demo" +import { AlertDemo } from "@/components/alert-demo" +import { AlertDialogDemo } from "@/components/alert-dialog-demo" +import { AspectRatioDemo } from "@/components/aspect-ratio-demo" +import { AvatarDemo } from "@/components/avatar-demo" +import { BadgeDemo } from "@/components/badge-demo" +import { BreadcrumbDemo } from "@/components/breadcrumb-demo" +import { ButtonDemo } from "@/components/button-demo" +import { CalendarDemo } from "@/components/calendar-demo" +import { CardDemo } from "@/components/card-demo" +import { CarouselDemo } from "@/components/carousel-demo" +import { ChartDemo } from "@/components/chart-demo" +import { CheckboxDemo } from "@/components/checkbox-demo" +import { CollapsibleDemo } from "@/components/collapsible-demo" +import { ComboboxDemo } from "@/components/combobox-demo" +import { CommandDemo } from "@/components/command-demo" +import { ComponentWrapper } from "@/components/component-wrapper" +import { ContextMenuDemo } from "@/components/context-menu-demo" +import { DatePickerDemo } from "@/components/date-picker-demo" +import { DialogDemo } from "@/components/dialog-demo" +import { DrawerDemo } from "@/components/drawer-demo" +import { DropdownMenuDemo } from "@/components/dropdown-menu-demo" +import { FormDemo } from "@/components/form-demo" +import { HoverCardDemo } from "@/components/hover-card-demo" +import { InputDemo } from "@/components/input-demo" +import { InputOTPDemo } from "@/components/input-otp-demo" +import { LabelDemo } from "@/components/label-demo" +import { MenubarDemo } from "@/components/menubar-demo" +import { NavigationMenuDemo } from "@/components/navigation-menu-demo" +import { PaginationDemo } from "@/components/pagination-demo" +import { PopoverDemo } from "@/components/popover-demo" +import { ProgressDemo } from "@/components/progress-demo" +import { RadioGroupDemo } from "@/components/radio-group-demo" +import { ResizableDemo } from "@/components/resizable-demo" +import { ScrollAreaDemo } from "@/components/scroll-area-demo" +import { SelectDemo } from "@/components/select-demo" +import { SeparatorDemo } from "@/components/separator-demo" +import { SheetDemo } from "@/components/sheet-demo" +import { SkeletonDemo } from "@/components/skeleton-demo" +import { SliderDemo } from "@/components/slider-demo" +import { SonnerDemo } from "@/components/sonner-demo" +import { SwitchDemo } from "@/components/switch-demo" +import { TableDemo } from "@/components/table-demo" +import { TabsDemo } from "@/components/tabs-demo" +import { TextareaDemo } from "@/components/textarea-demo" +import { ToggleDemo } from "@/components/toggle-demo" +import { ToggleGroupDemo } from "@/components/toggle-group-demo" +import { TooltipDemo } from "@/components/tooltip-demo" + +export default function SinkPage() { + return ( +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ) +} diff --git a/apps/v4/app/(view)/view/[name]/page.tsx b/apps/v4/app/(view)/view/[name]/page.tsx new file mode 100644 index 0000000000..2edeb2516c --- /dev/null +++ b/apps/v4/app/(view)/view/[name]/page.tsx @@ -0,0 +1,96 @@ +import * as React from "react" +import { Metadata } from "next" +import { notFound } from "next/navigation" +import { registryItemSchema } from "shadcn/registry" +import { z } from "zod" + +import { getRegistryComponent, getRegistryItem } from "@/lib/registry" +import { absoluteUrl, cn } from "@/lib/utils" +import { siteConfig } from "@/www/config/site" + +const getCachedRegistryItem = React.cache(async (name: string) => { + return await getRegistryItem(name) +}) + +export async function generateMetadata({ + params, +}: { + params: Promise<{ + name: string + }> +}): Promise { + const { name } = await params + const item = await getCachedRegistryItem(name) + + if (!item) { + return {} + } + + const title = item.name + const description = item.description + + return { + title: `${item.name}${item.description ? ` - ${item.description}` : ""}`, + description, + openGraph: { + title, + description, + type: "article", + url: absoluteUrl(`/blocks/${item.name}`), + images: [ + { + url: siteConfig.ogImage, + width: 1200, + height: 630, + alt: siteConfig.name, + }, + ], + }, + twitter: { + card: "summary_large_image", + title, + description, + images: [siteConfig.ogImage], + creator: "@shadcn", + }, + } +} + +export const dynamicParams = false + +export async function generateStaticParams() { + const { Index } = await import("@/__registry__") + const index = z.record(registryItemSchema).parse(Index) + + return Object.values(index) + .filter((block) => + ["registry:block", "registry:component"].includes(block.type) + ) + .map((block) => ({ + name: block.name, + })) +} + +export default async function BlockPage({ + params, +}: { + params: Promise<{ + name: string + }> +}) { + const { name } = await params + const item = await getCachedRegistryItem(name) + const Component = getRegistryComponent(name) + + if (!item || !Component) { + return notFound() + } + + return ( + <> +
+ +
+ + ) +} diff --git a/apps/v4/app/favicon.ico b/apps/v4/app/favicon.ico new file mode 100644 index 0000000000..718d6fea48 Binary files /dev/null and b/apps/v4/app/favicon.ico differ diff --git a/apps/v4/app/globals.css b/apps/v4/app/globals.css new file mode 100644 index 0000000000..b1df394a45 --- /dev/null +++ b/apps/v4/app/globals.css @@ -0,0 +1,144 @@ +@import "tailwindcss"; + +@plugin "tailwindcss-animate"; + +@custom-variant dark (&:is(.dark *)); + +:root { + --background: hsl(0 0% 100%); + --foreground: hsl(240 10% 3.9%); + --card: hsl(0 0% 100%); + --card-foreground: hsl(240 10% 3.9%); + --popover: hsl(0 0% 100%); + --popover-foreground: hsl(240 10% 3.9%); + --primary: hsl(240 5.9% 10%); + --primary-foreground: hsl(0 0% 98%); + --secondary: hsl(240 4.8% 95.9%); + --secondary-foreground: hsl(240 5.9% 10%); + --muted: hsl(240 4.8% 95.9%); + --muted-foreground: hsl(240 3.8% 46.1%); + --accent: hsl(240 4.8% 95.9%); + --accent-foreground: hsl(240 5.9% 10%); + --destructive: hsl(0 84.2% 60.2%); + --destructive-foreground: hsl(0 0% 98%); + --border: hsl(240 5.9% 90%); + --input: hsl(240 5.9% 90%); + --ring: hsl(240 10% 3.9%); + --chart-1: hsl(12 76% 61%); + --chart-2: hsl(173 58% 39%); + --chart-3: hsl(197 37% 24%); + --chart-4: hsl(43 74% 66%); + --chart-5: hsl(27 87% 67%); + --radius: 0.65rem; + --sidebar-background: hsl(0 0% 98%); + --sidebar-foreground: hsl(240 5.3% 26.1%); + --sidebar-primary: hsl(240 5.9% 10%); + --sidebar-primary-foreground: hsl(0 0% 98%); + --sidebar-accent: hsl(240 4.8% 95.9%); + --sidebar-accent-foreground: hsl(240 5.9% 10%); + --sidebar-border: hsl(220 13% 91%); + --sidebar-ring: hsl(217.2 91.2% 59.8%); +} + +.dark { + --background: hsl(240 10% 3.9%); + --foreground: hsl(0 0% 98%); + --card: hsl(240 10% 3.9%); + --card-foreground: hsl(0 0% 98%); + --popover: hsl(240 10% 3.9%); + --popover-foreground: hsl(0 0% 98%); + --primary: hsl(0 0% 98%); + --primary-foreground: hsl(240 5.9% 10%); + --secondary: hsl(240 3.7% 15.9%); + --secondary-foreground: hsl(0 0% 98%); + --muted: hsl(240 3.7% 15.9%); + --muted-foreground: hsl(240 5% 64.9%); + --accent: hsl(240 3.7% 15.9%); + --accent-foreground: hsl(0 0% 98%); + --destructive: hsl(0 62.8% 30.6%); + --destructive-foreground: hsl(0 0% 98%); + --border: hsl(240 3.7% 15.9%); + --input: hsl(240 3.7% 15.9%); + --ring: hsl(240 4.9% 83.9%); + --chart-1: hsl(220 70% 50%); + --chart-2: hsl(160 60% 45%); + --chart-3: hsl(30 80% 55%); + --chart-4: hsl(280 65% 60%); + --chart-5: hsl(340 75% 55%); + --sidebar-background: hsl(240 5.9% 10%); + --sidebar-foreground: hsl(240 4.8% 95.9%); + --sidebar-primary: hsl(224.3 76.3% 48%); + --sidebar-primary-foreground: hsl(0 0% 100%); + --sidebar-accent: hsl(240 3.7% 15.9%); + --sidebar-accent-foreground: hsl(240 4.8% 95.9%); + --sidebar-border: hsl(240 3.7% 15.9%); + --sidebar-ring: hsl(217.2 91.2% 59.8%); +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-sidebar-ring: var(--sidebar-ring); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar: var(--sidebar-background); + --animate-accordion-down: accordion-down 0.2s ease-out; + --animate-accordion-up: accordion-up 0.2s ease-out; + + @keyframes accordion-down { + from { + height: 0; + } + to { + height: var(--radix-accordion-content-height); + } + } + + @keyframes accordion-up { + from { + height: var(--radix-accordion-content-height); + } + to { + height: 0; + } + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/apps/v4/app/layout.tsx b/apps/v4/app/layout.tsx new file mode 100644 index 0000000000..f779a134ee --- /dev/null +++ b/apps/v4/app/layout.tsx @@ -0,0 +1,116 @@ +import type { Metadata, Viewport } from "next" +import { GeistMono } from "geist/font/mono" +import { GeistSans } from "geist/font/sans" + +import { cn } from "@/lib/utils" +import { ThemeProvider } from "@/components/theme-provider" +import { Toaster } from "@/registry/ui/sonner" +import { siteConfig } from "@/www/config/site" + +import "./globals.css" + +const fontSans = GeistSans + +const fontMono = GeistMono + +const META_THEME_COLORS = { + light: "#ffffff", + dark: "#09090b", +} + +export const metadata: Metadata = { + title: { + default: siteConfig.name, + template: `%s - ${siteConfig.name}`, + }, + metadataBase: new URL(siteConfig.url), + description: siteConfig.description, + keywords: [ + "Next.js", + "React", + "Tailwind CSS", + "Server Components", + "Radix UI", + ], + authors: [ + { + name: "shadcn", + url: "https://shadcn.com", + }, + ], + creator: "shadcn", + openGraph: { + type: "website", + locale: "en_US", + url: siteConfig.url, + title: siteConfig.name, + description: siteConfig.description, + siteName: siteConfig.name, + images: [ + { + url: siteConfig.ogImage, + width: 1200, + height: 630, + alt: siteConfig.name, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: siteConfig.name, + description: siteConfig.description, + images: [siteConfig.ogImage], + creator: "@shadcn", + }, + icons: { + icon: "/favicon.ico", + shortcut: "/favicon-16x16.png", + apple: "/apple-touch-icon.png", + }, + manifest: `${siteConfig.url}/site.webmanifest`, +} + +export const viewport: Viewport = { + themeColor: META_THEME_COLORS.light, +} + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode +}>) { + return ( + + +