// Generated by scripts/generate-manifest.mjs. Do not edit by hand. import type { AddOnCompiled } from '../../../../../types.js' type TemplateRecord = Record type TemplateAddOn = TemplateRecord & { integrations?: Array routes?: Array } type TemplateRenderContext = { [key: string]: any packageManager: any projectName: any typescript: any tailwind: any blank: any js: any jsx: any fileRouter: any codeRouter: any routerOnly: any includeExamples: any addOnEnabled: Record addOnOption: Record addOns: Array integrations: Array routes: Array getPackageManagerAddScript: (...args: Array) => string getPackageManagerRunScript: (...args: Array) => string getPackageManagerExecuteScript: (...args: Array) => string relativePath: (...args: Array) => string integrationImportContent: (...args: Array) => string integrationImportCode: (...args: Array) => string | undefined renderTemplate: (content: string) => string ignoreFile: () => never } type TemplateRenderer = (context: TemplateRenderContext) => string | undefined function __escapeXML(value: unknown) { if (value === undefined || value === null) { return '' } return String(value).replace(/[&<>'"]/g, (character) => { switch (character) { case '&': return '&' case '<': return '<' case '>': return '>' case '"': return '"' case "'": return ''' default: return character } }) } export function getManifestTemplateKey(template: string) { let hash = 0x811c9dc5 for (let i = 0; i < template.length; i++) { hash ^= template.charCodeAt(i) hash = Math.imul(hash, 0x01000193) >>> 0 } return `${hash.toString(16).padStart(8, '0')}:${template.length}` } const templateRenderers: Record = { } export function hasManifestTemplate(template: string) { return getManifestTemplateKey(template) in templateRenderers } export function renderManifestTemplate( template: string, context: TemplateRenderContext, ) { const key = getManifestTemplateKey(template) const renderer = templateRenderers[key] if (!renderer) { throw new Error(`Template ${key} was not precompiled into the manifest`) } return renderer(context) ?? '' } export const addOn = { "name": "Shadcn", "description": "Copy-paste accessible UI components (Tailwind + Radix primitives).", "phase": "add-on", "modes": [ "file-router", "code-router" ], "link": "https://ui.shadcn.com/", "type": "add-on", "category": "styling", "tailwind": true, "color": "#000000", "priority": 30, "id": "shadcn", "version": "0.0.0", "packageAdditions": { "dependencies": { "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.577.0", "tailwind-merge": "^3.0.2", "tw-animate-css": "^1.3.6" }, "devDependencies": { "@tailwindcss/typography": "^0.5.16" } }, "readme": "## Shadcn\n\nAdd components using the latest version of [Shadcn](https://ui.shadcn.com/).\n\n```bash\npnpm dlx shadcn@latest add button\n```\n", "readmeIsEjs": false, "files": { "_dot_cursorrules.append": "# shadcn instructions\n\nUse the latest version of Shadcn to install new components, like this command to add a button component:\n\n```bash\npnpm dlx shadcn@latest add button\n```\n", "components.json": "{\n \"$schema\": \"https://ui.shadcn.com/schema.json\",\n \"style\": \"new-york\",\n \"rsc\": false,\n \"tsx\": true,\n \"tailwind\": {\n \"config\": \"\",\n \"css\": \"src/styles.css\",\n \"baseColor\": \"zinc\",\n \"cssVariables\": true,\n \"prefix\": \"\"\n },\n \"aliases\": {\n \"components\": \"#/components\",\n \"utils\": \"#/lib/utils\",\n \"ui\": \"#/components/ui\",\n \"lib\": \"#/lib\",\n \"hooks\": \"#/hooks\"\n },\n \"iconLibrary\": \"lucide\"\n}", "src/lib/utils.ts": "import type { ClassValue } from 'clsx'\nimport { clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n", "src/styles.css": "@import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,700&family=Manrope:wght@400;500;600;700;800&display=swap');\n@import 'tailwindcss';\n@plugin '@tailwindcss/typography';\n\n@import 'tw-animate-css';\n\n@custom-variant dark (&:is(.dark *));\n\n:root {\n --sea-ink: #173a40;\n --sea-ink-soft: #416166;\n --lagoon: #4fb8b2;\n --lagoon-deep: #328f97;\n --palm: #2f6a4a;\n --sand: #e7f0e8;\n --foam: #f3faf5;\n --surface: rgba(255, 255, 255, 0.74);\n --surface-strong: rgba(255, 255, 255, 0.9);\n --line: rgba(23, 58, 64, 0.14);\n --inset-glint: rgba(255, 255, 255, 0.82);\n --kicker: rgba(47, 106, 74, 0.9);\n --bg-base: #e7f3ec;\n --header-bg: rgba(251, 255, 248, 0.84);\n --chip-bg: rgba(255, 255, 255, 0.8);\n --chip-line: rgba(47, 106, 74, 0.18);\n --link-bg-hover: rgba(255, 255, 255, 0.9);\n --hero-a: rgba(79, 184, 178, 0.36);\n --hero-b: rgba(47, 106, 74, 0.2);\n\n --background: oklch(1 0 0);\n --foreground: oklch(0.141 0.005 285.823);\n --card: oklch(1 0 0);\n --card-foreground: oklch(0.141 0.005 285.823);\n --popover: oklch(1 0 0);\n --popover-foreground: oklch(0.141 0.005 285.823);\n --primary: oklch(0.21 0.006 285.885);\n --primary-foreground: oklch(0.985 0 0);\n --secondary: oklch(0.967 0.001 286.375);\n --secondary-foreground: oklch(0.21 0.006 285.885);\n --muted: oklch(0.967 0.001 286.375);\n --muted-foreground: oklch(0.552 0.016 285.938);\n --accent: oklch(0.967 0.001 286.375);\n --accent-foreground: oklch(0.21 0.006 285.885);\n --destructive: oklch(0.577 0.245 27.325);\n --destructive-foreground: oklch(0.577 0.245 27.325);\n --border: oklch(0.92 0.004 286.32);\n --input: oklch(0.92 0.004 286.32);\n --ring: oklch(0.871 0.006 286.286);\n --chart-1: oklch(0.646 0.222 41.116);\n --chart-2: oklch(0.6 0.118 184.704);\n --chart-3: oklch(0.398 0.07 227.392);\n --chart-4: oklch(0.828 0.189 84.429);\n --chart-5: oklch(0.769 0.188 70.08);\n --radius: 0.625rem;\n --sidebar: oklch(0.985 0 0);\n --sidebar-foreground: oklch(0.141 0.005 285.823);\n --sidebar-primary: oklch(0.21 0.006 285.885);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.967 0.001 286.375);\n --sidebar-accent-foreground: oklch(0.21 0.006 285.885);\n --sidebar-border: oklch(0.92 0.004 286.32);\n --sidebar-ring: oklch(0.871 0.006 286.286);\n}\n\n.dark {\n --sea-ink: #d7ece8;\n --sea-ink-soft: #afcdc8;\n --lagoon: #60d7cf;\n --lagoon-deep: #8de5db;\n --palm: #6ec89a;\n --sand: #0f1a1e;\n --foam: #101d22;\n --surface: rgba(16, 30, 34, 0.8);\n --surface-strong: rgba(15, 27, 31, 0.92);\n --line: rgba(141, 229, 219, 0.18);\n --inset-glint: rgba(194, 247, 238, 0.14);\n --kicker: #b8efe5;\n --bg-base: #0a1418;\n --header-bg: rgba(10, 20, 24, 0.8);\n --chip-bg: rgba(13, 28, 32, 0.9);\n --chip-line: rgba(141, 229, 219, 0.24);\n --link-bg-hover: rgba(24, 44, 49, 0.8);\n --hero-a: rgba(96, 215, 207, 0.18);\n --hero-b: rgba(110, 200, 154, 0.12);\n\n --background: oklch(0.141 0.005 285.823);\n --foreground: oklch(0.985 0 0);\n --card: oklch(0.141 0.005 285.823);\n --card-foreground: oklch(0.985 0 0);\n --popover: oklch(0.141 0.005 285.823);\n --popover-foreground: oklch(0.985 0 0);\n --primary: oklch(0.985 0 0);\n --primary-foreground: oklch(0.21 0.006 285.885);\n --secondary: oklch(0.274 0.006 286.033);\n --secondary-foreground: oklch(0.985 0 0);\n --muted: oklch(0.274 0.006 286.033);\n --muted-foreground: oklch(0.705 0.015 286.067);\n --accent: oklch(0.274 0.006 286.033);\n --accent-foreground: oklch(0.985 0 0);\n --destructive: oklch(0.396 0.141 25.723);\n --destructive-foreground: oklch(0.637 0.237 25.331);\n --border: oklch(0.274 0.006 286.033);\n --input: oklch(0.274 0.006 286.033);\n --ring: oklch(0.442 0.017 285.786);\n --chart-1: oklch(0.488 0.243 264.376);\n --chart-2: oklch(0.696 0.17 162.48);\n --chart-3: oklch(0.769 0.188 70.08);\n --chart-4: oklch(0.627 0.265 303.9);\n --chart-5: oklch(0.645 0.246 16.439);\n --sidebar: oklch(0.21 0.006 285.885);\n --sidebar-foreground: oklch(0.985 0 0);\n --sidebar-primary: oklch(0.488 0.243 264.376);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.274 0.006 286.033);\n --sidebar-accent-foreground: oklch(0.985 0 0);\n --sidebar-border: oklch(0.274 0.006 286.033);\n --sidebar-ring: oklch(0.442 0.017 285.786);\n}\n\n@theme inline {\n --font-sans: 'Manrope', ui-sans-serif, system-ui, sans-serif;\n --color-background: var(--background);\n --color-foreground: var(--foreground);\n --color-card: var(--card);\n --color-card-foreground: var(--card-foreground);\n --color-popover: var(--popover);\n --color-popover-foreground: var(--popover-foreground);\n --color-primary: var(--primary);\n --color-primary-foreground: var(--primary-foreground);\n --color-secondary: var(--secondary);\n --color-secondary-foreground: var(--secondary-foreground);\n --color-muted: var(--muted);\n --color-muted-foreground: var(--muted-foreground);\n --color-accent: var(--accent);\n --color-accent-foreground: var(--accent-foreground);\n --color-destructive: var(--destructive);\n --color-destructive-foreground: var(--destructive-foreground);\n --color-border: var(--border);\n --color-input: var(--input);\n --color-ring: var(--ring);\n --color-chart-1: var(--chart-1);\n --color-chart-2: var(--chart-2);\n --color-chart-3: var(--chart-3);\n --color-chart-4: var(--chart-4);\n --color-chart-5: var(--chart-5);\n --radius-sm: calc(var(--radius) - 4px);\n --radius-md: calc(var(--radius) - 2px);\n --radius-lg: var(--radius);\n --radius-xl: calc(var(--radius) + 4px);\n --color-sidebar: var(--sidebar);\n --color-sidebar-foreground: var(--sidebar-foreground);\n --color-sidebar-primary: var(--sidebar-primary);\n --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n --color-sidebar-accent: var(--sidebar-accent);\n --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n --color-sidebar-border: var(--sidebar-border);\n --color-sidebar-ring: var(--sidebar-ring);\n}\n\nhtml,\nbody,\n#app {\n min-height: 100%;\n}\n\nbody {\n margin: 0;\n color: var(--sea-ink);\n font-family: var(--font-sans);\n background-color: var(--bg-base);\n background:\n radial-gradient(1100px 620px at -8% -10%, var(--hero-a), transparent 58%),\n radial-gradient(1050px 620px at 112% -12%, var(--hero-b), transparent 62%),\n radial-gradient(720px 380px at 50% 115%, rgba(79, 184, 178, 0.1), transparent 68%),\n linear-gradient(180deg, color-mix(in oklab, var(--sand) 68%, white) 0%, var(--foam) 44%, var(--bg-base) 100%);\n overflow-x: hidden;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nbody::before {\n content: '';\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: -1;\n opacity: 0.28;\n background:\n radial-gradient(circle at 20% 15%, rgba(255, 255, 255, 0.8), transparent 34%),\n radial-gradient(circle at 78% 26%, rgba(79, 184, 178, 0.2), transparent 42%),\n radial-gradient(circle at 42% 82%, rgba(47, 106, 74, 0.14), transparent 36%);\n}\n\nbody::after {\n content: '';\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: -1;\n opacity: 0.14;\n background-image:\n linear-gradient(rgba(255, 255, 255, 0.07) 1px, transparent 1px),\n linear-gradient(90deg, rgba(255, 255, 255, 0.06) 1px, transparent 1px);\n background-size: 28px 28px;\n mask-image: radial-gradient(circle at 50% 30%, black, transparent 78%);\n}\n\na {\n color: var(--lagoon-deep);\n text-decoration-color: rgba(50, 143, 151, 0.4);\n text-decoration-thickness: 1px;\n text-underline-offset: 2px;\n}\n\na:hover {\n color: #246f76;\n}\n\ncode {\n font-size: 0.9em;\n border: 1px solid var(--line);\n background: color-mix(in oklab, var(--surface-strong) 82%, white 18%);\n border-radius: 7px;\n padding: 2px 7px;\n}\n\npre code {\n border: 0;\n background: transparent;\n padding: 0;\n border-radius: 0;\n font-size: inherit;\n color: inherit;\n}\n\n.prose pre {\n border: 1px solid var(--line);\n border-radius: 12px;\n background: #1d2e45;\n color: #e8efff;\n}\n\n.page-wrap {\n width: min(1080px, calc(100% - 2rem));\n margin-inline: auto;\n}\n\n.display-title {\n font-family: 'Fraunces', Georgia, serif;\n}\n\n.island-shell {\n border: 1px solid var(--line);\n background: linear-gradient(165deg, var(--surface-strong), var(--surface));\n box-shadow:\n 0 1px 0 var(--inset-glint) inset,\n 0 22px 44px rgba(30, 90, 72, 0.1),\n 0 6px 18px rgba(23, 58, 64, 0.08);\n backdrop-filter: blur(4px);\n}\n\n.feature-card {\n background: linear-gradient(165deg, color-mix(in oklab, var(--surface-strong) 93%, white 7%), var(--surface));\n box-shadow:\n 0 1px 0 var(--inset-glint) inset,\n 0 18px 34px rgba(30, 90, 72, 0.1),\n 0 4px 14px rgba(23, 58, 64, 0.06);\n}\n\n.feature-card:hover {\n transform: translateY(-2px);\n border-color: color-mix(in oklab, var(--lagoon-deep) 35%, var(--line));\n}\n\nbutton,\n.island-shell,\na {\n transition: background-color 180ms ease, color 180ms ease, border-color 180ms ease,\n transform 180ms ease;\n}\n\n.island-kicker {\n letter-spacing: 0.16em;\n text-transform: uppercase;\n font-weight: 700;\n font-size: 0.69rem;\n color: var(--kicker);\n}\n\n.nav-link {\n position: relative;\n text-decoration: none;\n color: var(--sea-ink-soft);\n}\n\n.nav-link::after {\n content: '';\n position: absolute;\n left: 0;\n bottom: -8px;\n width: 100%;\n height: 2px;\n transform: scaleX(0);\n transform-origin: left;\n background: linear-gradient(90deg, var(--lagoon), #7ed3bf);\n transition: transform 170ms ease;\n}\n\n.nav-link:hover,\n.nav-link.is-active {\n color: var(--sea-ink);\n}\n\n.nav-link:hover::after,\n.nav-link.is-active::after {\n transform: scaleX(1);\n}\n\n.rise-in {\n animation: rise-in 700ms cubic-bezier(0.16, 1, 0.3, 1) both;\n}\n\n@keyframes rise-in {\n from {\n opacity: 0;\n transform: translateY(12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.site-footer {\n border-top: 1px solid var(--line);\n background: color-mix(in oklab, var(--header-bg) 84%, transparent 16%);\n}\n\n@layer base {\n * {\n @apply border-border outline-ring/50;\n }\n body {\n background-color: var(--background);\n color: var(--foreground);\n }\n}\n" }, "deletedFiles": [], "smallLogo": "\n" } satisfies AddOnCompiled