{"$schema":"https://ui.shadcn.com/schema/registry-item.json","name":"marketing-about-sections-press-recognitions","type":"registry:block","title":"Press & Recognitions","files":[{"path":"components/blocks/marketing/about-sections/press-recognitions.tsx","content":"import { useState } from 'react';\nimport { Card, CardContent } from '@/components/ui/card';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { Button } from '@/components/ui/button';\nimport { Badge } from '@/components/ui/badge';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/ui/select';\nimport {\n  ExternalLink,\n  Award,\n  Newspaper,\n  TrendingUp,\n  Calendar,\n} from 'lucide-react';\n\n// Press coverage data\nconst pressCategories = [\n  {\n    id: 'featured',\n    label: 'Featured Coverage',\n    items: [\n      {\n        id: 'tech-crunch',\n        logo: '/images/logos/techcrunch.svg', // Placeholder, use actual logo\n        logoFallback: 'TC',\n        publisher: 'TechCrunch',\n        date: 'May 15, 2023',\n        title:\n          'This Startup Is Revolutionizing How Companies Approach Digital Transformation',\n        excerpt:\n          'In a rapidly evolving tech landscape, this company stands out by offering a unique approach to helping businesses navigate digital transformation challenges.',\n        link: '#',\n        featured: true,\n      },\n      {\n        id: 'forbes',\n        logo: '/images/logos/forbes.svg', // Placeholder, use actual logo\n        logoFallback: 'F',\n        publisher: 'Forbes',\n        date: 'March 8, 2023',\n        title: 'The Top Innovators Redefining Technology in 2023',\n        excerpt:\n          'Among the most innovative companies of the year, this organization is leading the charge with groundbreaking solutions to long-standing industry problems.',\n        link: '#',\n        featured: true,\n      },\n      {\n        id: 'wired',\n        logo: '/images/logos/wired.svg', // Placeholder, use actual logo\n        logoFallback: 'W',\n        publisher: 'Wired',\n        date: 'January 22, 2023',\n        title:\n          'The Future of Work: How This Company Is Building Tools for Tomorrow',\n        excerpt:\n          'A deep dive into how cutting-edge technology is being applied to create the workplace tools that will define how we collaborate in the coming decade.',\n        link: '#',\n        featured: true,\n      },\n    ],\n  },\n  {\n    id: 'recent',\n    label: 'Recent Mentions',\n    items: [\n      {\n        id: 'zdnet',\n        logo: '/images/logos/zdnet.svg', // Placeholder, use actual logo\n        logoFallback: 'Z',\n        publisher: 'ZDNet',\n        date: 'June 5, 2023',\n        title: 'New Partnership Aims to Bridge Enterprise Technology Gaps',\n        excerpt:\n          'The strategic alliance announced this week could reshape how enterprise software is delivered and supported.',\n        link: '#',\n      },\n      {\n        id: 'bloomberg',\n        logo: '/images/logos/bloomberg.svg', // Placeholder, use actual logo\n        logoFallback: 'B',\n        publisher: 'Bloomberg',\n        date: 'May 30, 2023',\n        title:\n          'Tech Company Exceeds Growth Projections for Third Consecutive Quarter',\n        excerpt:\n          'Analysts are taking notice as financial results continue to impress investors and exceed market expectations.',\n        link: '#',\n      },\n      {\n        id: 'fast-company',\n        logo: '/images/logos/fastcompany.svg', // Placeholder, use actual logo\n        logoFallback: 'FC',\n        publisher: 'Fast Company',\n        date: 'May 18, 2023',\n        title:\n          'How This Leadership Team Is Building Culture in a Hybrid Work World',\n        excerpt:\n          'An inside look at the innovative approaches to maintaining company culture while supporting remote and in-office work.',\n        link: '#',\n      },\n      {\n        id: 'venturebeat',\n        logo: '/images/logos/venturebeat.svg', // Placeholder, use actual logo\n        logoFallback: 'VB',\n        publisher: 'VentureBeat',\n        date: 'May 10, 2023',\n        title:\n          'Product Update Introduces AI-Powered Features for Business Users',\n        excerpt:\n          'The latest release includes several AI enhancements designed to streamline workflow and improve productivity.',\n        link: '#',\n      },\n    ],\n  },\n  {\n    id: 'awards',\n    label: 'Awards & Recognition',\n    items: [\n      {\n        id: 'best-places',\n        logo: '/images/logos/inc.svg', // Placeholder, use actual logo\n        logoFallback: 'Inc',\n        publisher: 'Inc. Magazine',\n        date: 'April 2023',\n        title: 'Best Places to Work 2023',\n        excerpt:\n          'Recognized for exceptional workplace culture, employee satisfaction, and innovative benefits programs.',\n        link: '#',\n        type: 'award',\n      },\n      {\n        id: 'innovation-award',\n        logo: '/images/logos/fastcompany.svg', // Placeholder, use actual logo\n        logoFallback: 'FC',\n        publisher: 'Fast Company',\n        date: 'March 2023',\n        title: 'Most Innovative Companies 2023',\n        excerpt:\n          'Named among the top 50 companies making the most profound impact on both industry and culture.',\n        link: '#',\n        type: 'award',\n      },\n      {\n        id: 'sustainability',\n        logo: '/images/logos/wsj.svg', // Placeholder, use actual logo\n        logoFallback: 'WSJ',\n        publisher: 'Wall Street Journal',\n        date: 'February 2023',\n        title: 'Sustainability Leaders Index',\n        excerpt:\n          'Highlighted for commitment to environmental sustainability and corporate social responsibility initiatives.',\n        link: '#',\n        type: 'award',\n      },\n      {\n        id: 'design-excellence',\n        logo: '/images/logos/webby.svg', // Placeholder, use actual logo\n        logoFallback: 'W',\n        publisher: 'Webby Awards',\n        date: 'January 2023',\n        title: 'Excellence in Product Design',\n        excerpt:\n          'Award-winning user interface and experience design recognized for both aesthetics and functionality.',\n        link: '#',\n        type: 'award',\n      },\n    ],\n  },\n];\n\nexport default function AboutSectionPressRecognitions() {\n  const [activeTab, setActiveTab] = useState('featured');\n\n  // Function to render logo placeholder if image isn't available\n  const LogoPlaceholder = ({ fallback }: { fallback: string }) => (\n    <div className=\"bg-primary/10 flex h-10 w-10 items-center justify-center rounded-md\">\n      <span className=\"text-primary text-xs font-bold\">{fallback}</span>\n    </div>\n  );\n\n  return (\n    <section className=\"container mx-auto space-y-8 px-4 py-24 md:px-6 2xl:max-w-[1400px]\">\n      <div className=\"mx-auto max-w-3xl space-y-4 text-center\">\n        <div className=\"bg-primary/10 text-primary inline-block rounded-lg px-3 py-1 text-sm\">\n          Press & Recognition\n        </div>\n        <h2 className=\"text-3xl font-bold tracking-tight\">\n          Our Story in the Media\n        </h2>\n        <p className=\"text-muted-foreground\">\n          See what journalists, analysts, and industry experts are saying about\n          our company, products, and impact in the technology landscape.\n        </p>\n      </div>\n\n      {/* Featured press card - always visible */}\n      <div className=\"bg-accent/30 rounded-xl p-6 lg:p-8\">\n        <div className=\"mb-4 flex items-center gap-3\">\n          <LogoPlaceholder fallback=\"FT\" />\n          <div>\n            <p className=\"font-medium\">Financial Times</p>\n            <p className=\"text-muted-foreground text-sm\">\n              Special Report · June 12, 2023\n            </p>\n          </div>\n          <Badge variant=\"outline\" className=\"ml-auto\">\n            Featured\n          </Badge>\n        </div>\n        <h3 className=\"mb-3 text-2xl font-bold\">\n          &quot;Redefining What&apos;s Possible in Enterprise Software&quot;\n        </h3>\n        <p className=\"text-muted-foreground mb-6\">\n          &quot;In a comprehensive analysis of the evolving enterprise software\n          landscape, this company stands out for its innovative approach to\n          solving complex business challenges. Their unique combination of\n          advanced technology and intuitive design is setting new standards for\n          what businesses can expect from their software partners.&quot;\n        </p>\n        <Button asChild variant=\"outline\" className=\"gap-2\">\n          <a href=\"#\" target=\"_blank\" rel=\"noopener noreferrer\">\n            Read full article\n            <ExternalLink className=\"h-4 w-4\" />\n          </a>\n        </Button>\n      </div>\n\n      {/* Tabs for different categories */}\n      <div className=\"mt-16\">\n        <Tabs\n          defaultValue=\"featured\"\n          value={activeTab}\n          onValueChange={setActiveTab}\n          className=\"w-full\"\n        >\n          {/* Dropdown for mobile */}\n          <div className=\"mb-6 w-full md:hidden\">\n            <Select value={activeTab} onValueChange={setActiveTab}>\n              <SelectTrigger className=\"w-full\">\n                <SelectValue placeholder=\"Select category\" />\n              </SelectTrigger>\n              <SelectContent>\n                {pressCategories.map((category) => (\n                  <SelectItem\n                    key={category.id}\n                    value={category.id}\n                    className=\"flex items-center gap-2\"\n                  >\n                    <div className=\"flex items-center gap-2\">\n                      {category.id === 'featured' && (\n                        <TrendingUp className=\"h-4 w-4\" />\n                      )}\n                      {category.id === 'recent' && (\n                        <Newspaper className=\"h-4 w-4\" />\n                      )}\n                      {category.id === 'awards' && (\n                        <Award className=\"h-4 w-4\" />\n                      )}\n                      {category.label}\n                    </div>\n                  </SelectItem>\n                ))}\n              </SelectContent>\n            </Select>\n          </div>\n\n          {/* Tabs list for desktop */}\n          <div className=\"mb-8 hidden justify-center md:flex\">\n            <TabsList>\n              {pressCategories.map((category) => (\n                <TabsTrigger\n                  key={category.id}\n                  value={category.id}\n                  className=\"flex items-center gap-2\"\n                >\n                  {category.id === 'featured' && (\n                    <TrendingUp className=\"h-4 w-4\" />\n                  )}\n                  {category.id === 'recent' && (\n                    <Newspaper className=\"h-4 w-4\" />\n                  )}\n                  {category.id === 'awards' && <Award className=\"h-4 w-4\" />}\n                  {category.label}\n                </TabsTrigger>\n              ))}\n            </TabsList>\n          </div>\n\n          {pressCategories.map((category) => (\n            <TabsContent key={category.id} value={category.id} className=\"mt-6\">\n              <div className=\"grid grid-cols-1 gap-6 md:grid-cols-2\">\n                {category.items.map((item) => (\n                  <Card key={item.id} className=\"p-0\">\n                    <CardContent className=\"p-6\">\n                      <div className=\"mb-4 flex items-center gap-3\">\n                        <LogoPlaceholder fallback={item.logoFallback} />\n                        <div className=\"flex-1\">\n                          <p className=\"font-medium\">{item.publisher}</p>\n                          <div className=\"text-muted-foreground flex items-center gap-2 text-sm\">\n                            <Calendar className=\"h-3 w-3\" />\n                            {item.date}\n                          </div>\n                        </div>\n                        {'type' in item && item.type === 'award' && (\n                          <Award className=\"h-5 w-5 text-yellow-500\" />\n                        )}\n                      </div>\n                      <h3 className=\"mb-2 font-bold\">{item.title}</h3>\n                      <p className=\"text-muted-foreground mb-4 text-sm\">\n                        {item.excerpt}\n                      </p>\n                      <Button\n                        asChild\n                        variant=\"ghost\"\n                        size=\"sm\"\n                        className=\"hover:text-primary gap-1\"\n                      >\n                        <a\n                          href={item.link}\n                          target=\"_blank\"\n                          rel=\"noopener noreferrer\"\n                        >\n                          Read more\n                          <ExternalLink className=\"ml-1 h-3 w-3\" />\n                        </a>\n                      </Button>\n                    </CardContent>\n                  </Card>\n                ))}\n              </div>\n            </TabsContent>\n          ))}\n        </Tabs>\n      </div>\n\n      <div className=\"mt-12 flex justify-center\">\n        <Button variant=\"outline\" className=\"gap-2\">\n          <a href=\"#\">View our press kit</a>\n        </Button>\n      </div>\n    </section>\n  );\n}\n","type":"registry:component","target":"components/blocks/marketing/about-sections/press-recognitions.tsx"},{"path":"components/ui/card.tsx","content":"import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({\n  className,\n  size = \"default\",\n  ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n  return (\n    <div\n      data-slot=\"card\"\n      data-size={size}\n      className={cn(\n        \"group/card flex flex-col gap-6 overflow-hidden rounded-xl bg-card py-6 text-sm text-card-foreground shadow-xs ring-1 ring-foreground/10 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-header\"\n      className={cn(\n        \"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-title\"\n      className={cn(\n        \"font-heading text-base leading-normal font-medium group-data-[size=sm]/card:text-sm\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-description\"\n      className={cn(\"text-sm text-muted-foreground\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-action\"\n      className={cn(\n        \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-content\"\n      className={cn(\"px-6 group-data-[size=sm]/card:px-4\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-footer\"\n      className={cn(\n        \"flex items-center rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Card,\n  CardHeader,\n  CardFooter,\n  CardTitle,\n  CardAction,\n  CardDescription,\n  CardContent,\n}\n","type":"registry:ui","target":"components/ui/card.tsx"},{"path":"components/ui/tabs.tsx","content":"\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Tabs as TabsPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Tabs({\n  className,\n  orientation = \"horizontal\",\n  ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n  return (\n    <TabsPrimitive.Root\n      data-slot=\"tabs\"\n      data-orientation={orientation}\n      className={cn(\n        \"group/tabs flex gap-2 data-horizontal:flex-col\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nconst tabsListVariants = cva(\n  \"group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-9 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-muted\",\n        line: \"gap-1 bg-transparent\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n)\n\nfunction TabsList({\n  className,\n  variant = \"default\",\n  ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> &\n  VariantProps<typeof tabsListVariants>) {\n  return (\n    <TabsPrimitive.List\n      data-slot=\"tabs-list\"\n      data-variant={variant}\n      className={cn(tabsListVariants({ variant }), className)}\n      {...props}\n    />\n  )\n}\n\nfunction TabsTrigger({\n  className,\n  ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n  return (\n    <TabsPrimitive.Trigger\n      data-slot=\"tabs-trigger\"\n      className={cn(\n        \"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent\",\n        \"data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground\",\n        \"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TabsContent({\n  className,\n  ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n  return (\n    <TabsPrimitive.Content\n      data-slot=\"tabs-content\"\n      className={cn(\"flex-1 text-sm outline-none\", className)}\n      {...props}\n    />\n  )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n","type":"registry:ui","target":"components/ui/tabs.tsx"},{"path":"components/ui/button.tsx","content":"import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n  \"group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n        outline:\n          \"border-border bg-background shadow-xs hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n        secondary:\n          \"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n        ghost:\n          \"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50\",\n        destructive:\n          \"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n        link: \"text-primary underline-offset-4 hover:underline\",\n      },\n      size: {\n        default:\n          \"h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n        xs: \"h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n        sm: \"h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5\",\n        lg: \"h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n        icon: \"size-9\",\n        \"icon-xs\":\n          \"size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3\",\n        \"icon-sm\":\n          \"size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md\",\n        \"icon-lg\": \"size-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nfunction Button({\n  className,\n  variant = \"default\",\n  size = \"default\",\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"button\"> &\n  VariantProps<typeof buttonVariants> & {\n    asChild?: boolean\n  }) {\n  const Comp = asChild ? Slot.Root : \"button\"\n\n  return (\n    <Comp\n      data-slot=\"button\"\n      data-variant={variant}\n      data-size={size}\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/badge.tsx","content":"import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n  \"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n        secondary:\n          \"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80\",\n        destructive:\n          \"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20\",\n        outline:\n          \"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground\",\n        ghost:\n          \"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50\",\n        link: \"text-primary underline-offset-4 hover:underline\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n)\n\nfunction Badge({\n  className,\n  variant = \"default\",\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"span\"> &\n  VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n  const Comp = asChild ? Slot.Root : \"span\"\n\n  return (\n    <Comp\n      data-slot=\"badge\"\n      data-variant={variant}\n      className={cn(badgeVariants({ variant }), className)}\n      {...props}\n    />\n  )\n}\n\nexport { Badge, badgeVariants }\n","type":"registry:ui","target":"components/ui/badge.tsx"},{"path":"components/ui/select.tsx","content":"\"use client\"\n\nimport * as React from \"react\"\nimport { Select as SelectPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\nimport { ChevronDownIcon, CheckIcon, ChevronUpIcon } from \"lucide-react\"\n\nfunction Select({\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n  return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n  return (\n    <SelectPrimitive.Group\n      data-slot=\"select-group\"\n      className={cn(\"scroll-my-1 p-1\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SelectValue({\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n  return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n  className,\n  size = \"default\",\n  children,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n  size?: \"sm\" | \"default\"\n}) {\n  return (\n    <SelectPrimitive.Trigger\n      data-slot=\"select-trigger\"\n      data-size={size}\n      className={cn(\n        \"flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n      <SelectPrimitive.Icon asChild>\n        <ChevronDownIcon className=\"pointer-events-none size-4 text-muted-foreground\" />\n      </SelectPrimitive.Icon>\n    </SelectPrimitive.Trigger>\n  )\n}\n\nfunction SelectContent({\n  className,\n  children,\n  position = \"item-aligned\",\n  align = \"center\",\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n  return (\n    <SelectPrimitive.Portal>\n      <SelectPrimitive.Content\n        data-slot=\"select-content\"\n        data-align-trigger={position === \"item-aligned\"}\n        className={cn(\"relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", position ===\"popper\"&&\"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\", className )}\n        position={position}\n        align={align}\n        {...props}\n      >\n        <SelectScrollUpButton />\n        <SelectPrimitive.Viewport\n          data-position={position}\n          className={cn(\n            \"data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)\",\n            position === \"popper\" && \"\"\n          )}\n        >\n          {children}\n        </SelectPrimitive.Viewport>\n        <SelectScrollDownButton />\n      </SelectPrimitive.Content>\n    </SelectPrimitive.Portal>\n  )\n}\n\nfunction SelectLabel({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n  return (\n    <SelectPrimitive.Label\n      data-slot=\"select-label\"\n      className={cn(\"px-2 py-1.5 text-xs text-muted-foreground\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SelectItem({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n  return (\n    <SelectPrimitive.Item\n      data-slot=\"select-item\"\n      className={cn(\n        \"relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n        className\n      )}\n      {...props}\n    >\n      <span className=\"pointer-events-none absolute right-2 flex size-4 items-center justify-center\">\n        <SelectPrimitive.ItemIndicator>\n          <CheckIcon className=\"pointer-events-none\" />\n        </SelectPrimitive.ItemIndicator>\n      </span>\n      <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n    </SelectPrimitive.Item>\n  )\n}\n\nfunction SelectSeparator({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n  return (\n    <SelectPrimitive.Separator\n      data-slot=\"select-separator\"\n      className={cn(\"pointer-events-none -mx-1 my-1 h-px bg-border\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SelectScrollUpButton({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n  return (\n    <SelectPrimitive.ScrollUpButton\n      data-slot=\"select-scroll-up-button\"\n      className={cn(\n        \"z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4\",\n        className\n      )}\n      {...props}\n    >\n      <ChevronUpIcon\n      />\n    </SelectPrimitive.ScrollUpButton>\n  )\n}\n\nfunction SelectScrollDownButton({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n  return (\n    <SelectPrimitive.ScrollDownButton\n      data-slot=\"select-scroll-down-button\"\n      className={cn(\n        \"z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4\",\n        className\n      )}\n      {...props}\n    >\n      <ChevronDownIcon\n      />\n    </SelectPrimitive.ScrollDownButton>\n  )\n}\n\nexport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectScrollDownButton,\n  SelectScrollUpButton,\n  SelectSeparator,\n  SelectTrigger,\n  SelectValue,\n}\n","type":"registry:ui","target":"components/ui/select.tsx"}],"description":"A strip of publication logos and pull quotes that show where you have been featured. Use it on an about page to borrow trust from known names.","dependencies":["class-variance-authority","lucide-react","radix-ui"]}