{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "logos",
  "type": "registry:block",
  "title": "Logos Section",
  "description": "A logo cloud section to showcase partners, clients, or technologies.",
  "registryDependencies": [
    "https://launchuicomponents.com/r/badge.json"
  ],
  "files": [
    {
      "path": "components/sections/logos/default.tsx",
      "content": "import { ReactNode } from \"react\";\n\n\nimport Figma from \"../../logos/figma\";\nimport React from \"../../logos/react\";\nimport ShadcnUi from \"../../logos/shadcn-ui\";\nimport Tailwind from \"../../logos/tailwind\";\nimport TypeScript from \"../../logos/typescript\";\nimport { Badge } from \"../../ui/badge\";\nimport Logo from \"../../ui/logo\";\nimport { Section } from \"../../ui/section\";\n\ninterface LogosProps {\n  title?: string;\n  badge?: ReactNode | false;\n  logos?: ReactNode[] | false;\n  className?: string;\n}\n\nexport default function Logos({\n  title = \"Built with industry-standard tools and best practices\",\n  badge = (\n    <Badge variant=\"outline\" className=\"border-brand/30 text-brand\">\n      Last updated: 1000\n    </Badge>\n  ),\n  logos = [\n    <Logo key=\"figma\" image={Figma} name=\"Figma\" />,\n    <Logo\n      key=\"react\"\n      image={React}\n      name=\"React\"\n      version=\"19.2.7\"\n      badge=\"New\"\n    />,\n    <Logo\n      key=\"typescript\"\n      image={TypeScript}\n      name=\"TypeScript\"\n      version=\"6.0.3\"\n      badge=\"New\"\n    />,\n    <Logo\n      key=\"shadcn\"\n      image={ShadcnUi}\n      name=\"Shadcn/ui\"\n      version=\"4.11.0\"\n      badge=\"New\"\n    />,\n    <Logo key=\"tailwind\" image={Tailwind} name=\"Tailwind\" version=\"4.2.1\" />,\n  ],\n  className,\n}: LogosProps) {\n  return (\n    <Section className={className}>\n      <div className=\"max-w-container mx-auto flex flex-col items-center gap-8 text-center\">\n        <div className=\"flex flex-col items-center gap-6\">\n          {badge !== false && badge}\n          <h2 className=\"text-md font-semibold sm:text-2xl\">{title}</h2>\n        </div>\n        {logos !== false && logos.length > 0 && (\n          <div className=\"flex flex-wrap items-center justify-center gap-8\">\n            {logos}\n          </div>\n        )}\n      </div>\n    </Section>\n  );\n}\n",
      "type": "registry:block",
      "target": "components/sections/logos/default.tsx"
    },
    {
      "path": "components/ui/logo.tsx",
      "content": "import React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { Badge } from \"./badge\";\n\nexport interface LogoProps extends React.HTMLAttributes<HTMLDivElement> {\n  image: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n  name: string;\n  version?: string;\n  width?: number;\n  height?: number;\n  showName?: boolean;\n  badge?: string;\n}\n\nexport default function Logo({\n  className,\n  image: SvgImage,\n  name,\n  version,\n  width = 24,\n  height = 24,\n  showName = true,\n  badge,\n  ...props\n}: LogoProps) {\n  return (\n    <div\n      data-slot=\"logo\"\n      className={cn(\"flex items-center gap-2 text-sm font-medium\", className)}\n      {...props}\n    >\n      <SvgImage\n        width={width}\n        height={height}\n        aria-hidden=\"true\"\n        className=\"max-h-full max-w-full opacity-70\"\n      />\n      <span className={cn(!showName && \"sr-only\")}>{name}</span>\n      {version && <span className=\"text-muted-foreground\">{version}</span>}\n      {badge && (\n        <Badge variant=\"brand\" size=\"sm\">\n          {badge}\n        </Badge>\n      )}\n    </div>\n  );\n}\n",
      "type": "registry:ui",
      "target": "components/ui/logo.tsx"
    },
    {
      "path": "components/ui/badge.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 badgeVariants = cva(\n  \"inline-flex items-center rounded-full border border-border/100 dark:border-border/20 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 gap-2\",\n  {\n    variants: {\n      variant: {\n        default:\n          \"border-transparent bg-primary text-primary-foreground dark:shadow-sm dark:border-transparent\",\n        brand:\n          \"border-transparent bg-brand text-primary-foreground dark:shadow-sm dark:border-transparent\",\n        \"brand-secondary\":\n          \"border-transparent bg-brand-foreground/20 text-brand dark:border-transparent\",\n        secondary:\n          \"border-transparent bg-secondary text-secondary-foreground dark:shadow-sm dark:border-transparent\",\n        destructive:\n          \"border-transparent bg-destructive/30 text-destructive-foreground dark:shadow-sm dark:border-transparent\",\n        outline: \"text-foreground\",\n      },\n      size: {\n        default: \"px-2.5 py-1\",\n        sm: \"px-1\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  },\n);\n\nfunction Badge({\n  className,\n  variant,\n  size,\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"span\"> &\n  VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n  const Comp = asChild ? Slot : \"span\";\n\n  return (\n    <Comp\n      data-slot=\"badge\"\n      className={cn(badgeVariants({ variant, size }), className)}\n      {...props}\n    />\n  );\n}\n\nexport { Badge, badgeVariants };\n",
      "type": "registry:ui",
      "target": "components/ui/badge.tsx"
    },
    {
      "path": "components/logos/figma.tsx",
      "content": "const Figma = (props: React.SVGProps<SVGSVGElement>) => (\n  <svg\n    width={24}\n    height={24}\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    {...props}\n  >\n    <path\n      d=\"M12 2.00021V16M12 16V19.5C12 21.4331 10.433 23 8.5 23C6.567 23 5 21.4331 5 19.5C5 17.567 6.567 16 8.5 16M12 16H8.5M8.5 16C6.567 16 5 14.433 5 12.5C5 10.567 6.567 9 8.5 9M8.5 9H12M8.5 9H15.5M8.5 9C6.567 9 5 7.433 5 5.5C5 3.567 6.567 2 8.5 2H15.5C17.433 2 19 3.567 19 5.5C19 7.433 17.433 9 15.5 9M15.5 9C17.433 9 19 10.567 19 12.5C19 14.433 17.433 16 15.5 16C13.567 16 12 14.433 12 12.5C12 10.567 13.567 9 15.5 9Z\"\n      stroke=\"currentColor\"\n      strokeWidth={1.5}\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\nexport default Figma;\n",
      "type": "registry:component",
      "target": "components/logos/figma.tsx"
    },
    {
      "path": "components/logos/react.tsx",
      "content": "const React = (props: React.SVGProps<SVGSVGElement>) => (\n  <svg\n    width={24}\n    height={24}\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    {...props}\n  >\n    <path\n      d=\"M12 14.1164C13.1572 14.1164 14.0952 13.1689 14.0952 12C14.0952 10.8311 13.1572 9.8836 12 9.8836C10.8428 9.8836 9.90476 10.8311 9.90476 12C9.90476 13.1689 10.8428 14.1164 12 14.1164Z\"\n      fill=\"currentColor\"\n    />\n    <path\n      d=\"M12 16.7619C17.7858 16.7619 22.4762 14.6299 22.4762 12C22.4762 9.37007 17.7858 7.2381 12 7.2381C6.21416 7.2381 1.52381 9.37007 1.52381 12C1.52381 14.6299 6.21416 16.7619 12 16.7619Z\"\n      stroke=\"currentColor\"\n      strokeWidth={1.5}\n    />\n    <path\n      d=\"M7.91731 14.381C10.8102 19.4423 14.9833 22.4793 17.2381 21.1643C19.4929 19.8493 18.9756 14.6803 16.0827 9.61905C13.1898 4.55775 9.01671 1.52075 6.7619 2.83571C4.5071 4.15067 5.02439 9.31965 7.91731 14.381Z\"\n      stroke=\"currentColor\"\n      strokeWidth={1.5}\n    />\n    <path\n      d=\"M7.91731 9.61905C5.02439 14.6803 4.5071 19.8493 6.7619 21.1643C9.01671 22.4793 13.1898 19.4423 16.0827 14.381C18.9756 9.31965 19.4929 4.15067 17.2381 2.83571C14.9833 1.52075 10.8102 4.55775 7.91731 9.61905Z\"\n      stroke=\"currentColor\"\n      strokeWidth={1.5}\n    />\n  </svg>\n);\nexport default React;\n",
      "type": "registry:component",
      "target": "components/logos/react.tsx"
    },
    {
      "path": "components/logos/tailwind.tsx",
      "content": "const Tailwind = (props: React.SVGProps<SVGSVGElement>) => (\n  <svg\n    width={24}\n    height={24}\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    {...props}\n  >\n    <path\n      d=\"M11.9997 5C9.93208 5 8.41053 5.82843 7.43594 7.48502C7.15487 7.96278 7.94335 8.41626 8.45604 8.20554C9.04899 7.96182 9.68017 7.93517 10.3497 8.12585C11.1873 8.36282 11.7845 9.0526 12.4469 9.81601C13.5249 11.0599 14.7735 12.5 17.5002 12.5C19.5669 12.5 21.0877 11.6726 22.0622 10.0181C22.3436 9.54035 21.554 9.08597 21.0409 9.29611C20.4488 9.53864 19.8185 9.56489 19.1501 9.37488C18.3138 9.13791 17.7154 8.4474 17.0529 7.68326C15.9749 6.44006 14.7263 5 11.9997 5ZM6.49984 12.5C4.43307 12.5 2.91232 13.3274 1.9378 14.9819C1.65642 15.4597 2.44604 15.914 2.95911 15.7039C3.55123 15.4614 4.18151 15.4351 4.84989 15.6251C5.68617 15.8621 6.28463 16.5526 6.94706 17.3167C8.02506 18.5599 9.27367 20 11.9997 20C14.0676 20 15.5889 19.172 16.5634 17.5163C16.8446 17.0386 16.0556 16.5847 15.5427 16.7952C14.95 17.0386 14.3192 17.0651 13.6503 16.8749C12.8133 16.6372 12.2155 15.9474 11.5531 15.1833C10.4745 13.9401 9.22714 12.5 6.49984 12.5Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\nexport default Tailwind;\n",
      "type": "registry:component",
      "target": "components/logos/tailwind.tsx"
    },
    {
      "path": "components/logos/shadcn-ui.tsx",
      "content": "const ShadcnUi = (props: React.SVGProps<SVGSVGElement>) => (\n  <svg\n    width={24}\n    height={24}\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    {...props}\n  >\n    <path\n      d=\"M19.5 12L12 19.5\"\n      stroke=\"currentColor\"\n      strokeWidth={1.5}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n    <path\n      d=\"M18 3.75L3.75 18\"\n      stroke=\"currentColor\"\n      strokeWidth={1.5}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\nexport default ShadcnUi;\n",
      "type": "registry:component",
      "target": "components/logos/shadcn-ui.tsx"
    },
    {
      "path": "components/logos/typescript.tsx",
      "content": "const TypeScript = (props: React.SVGProps<SVGSVGElement>) => (\n  <svg\n    width={24}\n    height={24}\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    {...props}\n  >\n    <path\n      fillRule=\"evenodd\"\n      clipRule=\"evenodd\"\n      d=\"M21 1C22.1046 1 23 1.89232 23 2.99689C23 8.68454 23 17.1774 23 21.0041C23 22.1086 22.1077 23 21.0031 23C15.3155 23 6.82263 23 2.99595 23C1.89137 23 1.00001 22.108 1.00002 21.0034C1.00007 15.2015 1.00003 6.79323 1.00002 2.99497C1.00001 1.8904 1.89544 1 3.00002 1L21 1ZM13.2297 12.7043V10.9H5.4V12.7043H8.19532V20.7382H10.4206V12.7043H13.2297ZM14.1168 20.5261C14.4757 20.709 14.9001 20.8463 15.39 20.9378C15.8801 21.0292 16.3964 21.075 16.9393 21.075C17.4684 21.075 17.971 21.0247 18.4472 20.924C18.9234 20.8234 19.3409 20.6576 19.6997 20.4266C20.0585 20.1956 20.3427 19.8938 20.552 19.521C20.7613 19.1481 20.866 18.6873 20.866 18.1384C20.866 17.7405 20.8062 17.3918 20.6865 17.0922C20.567 16.7925 20.3944 16.5261 20.169 16.2928C19.9436 16.0595 19.6733 15.8503 19.3581 15.665C19.0429 15.4798 18.6876 15.3048 18.292 15.1402C18.0021 15.0212 17.7421 14.9057 17.5121 14.7937C17.282 14.6816 17.0865 14.5672 16.9255 14.4506C16.7645 14.3339 16.6403 14.2105 16.5529 14.0801C16.4655 13.9498 16.4218 13.8022 16.4218 13.6376C16.4218 13.4866 16.4609 13.3505 16.5391 13.2294C16.6173 13.1081 16.7277 13.004 16.8703 12.9171C17.013 12.8302 17.1877 12.7628 17.3948 12.7147C17.6018 12.6668 17.8319 12.6427 18.0849 12.6427C18.2689 12.6427 18.4633 12.6564 18.668 12.6839C18.8728 12.7114 19.0787 12.7537 19.2856 12.8108C19.4927 12.868 19.694 12.94 19.8895 13.027C20.0851 13.1139 20.2656 13.2145 20.4313 13.3288V11.2774C20.0953 11.1493 19.7285 11.0543 19.3305 10.9927C18.9326 10.9309 18.4759 10.9 17.9606 10.9C17.4362 10.9 16.9393 10.956 16.4701 11.0681C16.0008 11.1802 15.5879 11.3551 15.2313 11.593C14.8748 11.8309 14.593 12.1339 14.386 12.502C14.1789 12.8703 14.0754 13.3105 14.0754 13.8228C14.0754 14.4769 14.2652 15.035 14.6448 15.4969C15.0244 15.9589 15.6005 16.35 16.3734 16.6702C16.6771 16.7937 16.96 16.9149 17.2223 17.0339C17.4845 17.1527 17.7111 17.2763 17.902 17.4043C18.0929 17.5324 18.2436 17.6719 18.354 17.8228C18.4645 17.9738 18.5197 18.1453 18.5197 18.3374C18.5197 18.4793 18.4851 18.6107 18.4161 18.7319C18.3471 18.8532 18.2424 18.9583 18.1021 19.0475C17.9618 19.1367 17.787 19.2065 17.5777 19.2568C17.3684 19.3071 17.1233 19.3323 16.8427 19.3323C16.3642 19.3323 15.8904 19.2488 15.4211 19.0819C14.9519 18.9149 14.5171 18.6645 14.1168 18.3306V20.5261Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\nexport default TypeScript;\n",
      "type": "registry:component",
      "target": "components/logos/typescript.tsx"
    }
  ],
  "dependencies": [
    "@radix-ui/react-slot"
  ]
}