{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "cta",
  "type": "registry:block",
  "title": "CTA Section",
  "description": "Call-to-action sections with various styles and glow effects.",
  "registryDependencies": [
    "https://launchuicomponents.com/r/button.json",
    "https://launchuicomponents.com/r/glow.json"
  ],
  "files": [
    {
      "path": "components/sections/cta/default.tsx",
      "content": "import { cn } from \"@/lib/utils\";\n\nimport Glow from \"../../ui/glow\";\nimport { LinkButton, type LinkButtonProps } from \"../../ui/link-button\";\nimport { Section } from \"../../ui/section\";\n\ninterface CTAButtonProps extends Omit<LinkButtonProps, \"children\"> {\n  text: string;\n}\n\ninterface CTAProps {\n  title?: string;\n  buttons?: CTAButtonProps[] | false;\n  className?: string;\n}\n\nconst DEFAULT_CTA_BUTTONS: CTAButtonProps[] = [\n  {\n    href: \"https://www.launchuicomponents.com/\",\n    text: \"Get Started\",\n    variant: \"default\",\n  },\n];\n\nexport default function CTA({\n  title = \"Start building\",\n  buttons = DEFAULT_CTA_BUTTONS,\n  className,\n}: CTAProps) {\n  return (\n    <Section className={cn(\"group relative overflow-hidden\", className)}>\n      <div className=\"max-w-container relative z-10 mx-auto flex flex-col items-center gap-6 text-center sm:gap-8\">\n        <h2 className=\"max-w-[640px] text-3xl leading-tight font-semibold sm:text-5xl sm:leading-tight\">\n          {title}\n        </h2>\n        {buttons !== false && buttons.length > 0 && (\n          <div className=\"flex justify-center gap-4\">\n            {buttons.map((button) => (\n              <LinkButton\n                key={`${button.href}-${button.text}`}\n                variant={button.variant || \"default\"}\n                size=\"lg\"\n                href={button.href}\n                icon={button.icon}\n                iconRight={button.iconRight}\n              >\n                {button.text}\n              </LinkButton>\n            ))}\n          </div>\n        )}\n      </div>\n      <div className=\"absolute top-0 left-0 h-full w-full translate-y-[1rem] opacity-80 transition-all duration-500 ease-in-out group-hover:translate-y-[-2rem] group-hover:opacity-100\">\n        <Glow variant=\"bottom\" />\n      </div>\n    </Section>\n  );\n}\n",
      "type": "registry:block",
      "target": "components/sections/cta/default.tsx"
    },
    {
      "path": "components/ui/button.tsx",
      "content": "import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n  {\n    variants: {\n      variant: {\n        default:\n          \"text-primary-foreground shadow-sm dark:hover:from-primary/80 hover:from-primary/70 dark:hover:to-primary/70 hover:to-primary/90 bg-linear-to-b from-primary/60 to-primary/100 dark:from-primary/100 dark:to-primary/70 border-t-primary\",\n        destructive:\n          \"bg-destructive/30 text-destructive-foreground shadow-xs hover:bg-destructive/90\",\n        outline:\n          \"border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground\",\n        glow: \"glass-4 hover:glass-5 shadow-md\",\n        secondary:\n          \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n        ghost: \"hover:bg-accent hover:text-accent-foreground\",\n        link: \"text-foreground underline-offset-4 hover:underline\",\n      },\n      size: {\n        default: \"h-9 px-4 py-2\",\n        xs: \"h-7 rounded-md px-2\",\n        sm: \"h-8 rounded-md px-3 text-xs\",\n        lg: \"h-10 rounded-md px-5\",\n        icon: \"size-9\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  },\n);\n\nfunction Button({\n  className,\n  variant,\n  size,\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"button\"> &\n  VariantProps<typeof buttonVariants> & {\n    asChild?: boolean;\n  }) {\n  const Comp = asChild ? Slot : \"button\";\n\n  return (\n    <Comp\n      data-slot=\"button\"\n      className={cn(buttonVariants({ variant, size, className }))}\n      {...props}\n    />\n  );\n}\n\nexport { Button, buttonVariants };\n",
      "type": "registry:ui",
      "target": "components/ui/button.tsx"
    },
    {
      "path": "components/ui/link-button.tsx",
      "content": "import { type VariantProps } from \"class-variance-authority\";\nimport { type ComponentProps, type ReactNode } from \"react\";\n\nimport { Button, buttonVariants } from \"./button\";\n\nexport interface LinkButtonProps {\n  href: string;\n  children: ReactNode;\n  variant?: VariantProps<typeof buttonVariants>[\"variant\"];\n  icon?: ReactNode;\n  iconRight?: ReactNode;\n  size?: ComponentProps<typeof Button>[\"size\"];\n}\n\nexport function LinkButton({\n  href,\n  children,\n  variant = \"default\",\n  icon,\n  iconRight,\n  size = \"lg\",\n}: LinkButtonProps) {\n  return (\n    <Button variant={variant} size={size} asChild>\n      <a href={href}>\n        {icon}\n        {children}\n        {iconRight}\n      </a>\n    </Button>\n  );\n}\n",
      "type": "registry:ui",
      "target": "components/ui/link-button.tsx"
    },
    {
      "path": "components/ui/glow.tsx",
      "content": "import { cva, VariantProps } from \"class-variance-authority\";\nimport React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst glowVariants = cva(\"absolute w-full\", {\n  variants: {\n    variant: {\n      top: \"top-0\",\n      above: \"-top-[128px]\",\n      bottom: \"bottom-0\",\n      below: \"-bottom-[128px]\",\n      center: \"top-[50%]\",\n    },\n  },\n  defaultVariants: {\n    variant: \"top\",\n  },\n});\n\nfunction Glow({\n  className,\n  variant,\n  ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof glowVariants>) {\n  return (\n    <div\n      data-slot=\"glow\"\n      className={cn(glowVariants({ variant }), className)}\n      {...props}\n    >\n      <div\n        className={cn(\n          \"from-brand-foreground/50 to-brand-foreground/0 absolute left-1/2 h-[256px] w-[60%] -translate-x-1/2 scale-[2.5] rounded-[50%] bg-radial from-10% to-60% opacity-20 sm:h-[512px] dark:opacity-100\",\n          variant === \"center\" && \"-translate-y-1/2\",\n        )}\n      />\n      <div\n        className={cn(\n          \"from-brand/30 to-brand-foreground/0 absolute left-1/2 h-[128px] w-[40%] -translate-x-1/2 scale-200 rounded-[50%] bg-radial from-10% to-60% opacity-20 sm:h-[256px] dark:opacity-100\",\n          variant === \"center\" && \"-translate-y-1/2\",\n        )}\n      />\n    </div>\n  );\n}\n\nexport default Glow;\n",
      "type": "registry:ui",
      "target": "components/ui/glow.tsx"
    }
  ],
  "dependencies": [
    "@radix-ui/react-slot"
  ]
}