{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "github-profile-card",
  "title": "GitHub Profile Card",
  "description": "A GitHub profile card with account stats, a contribution graph, and social links.",
  "dependencies": [
    "lucide-react"
  ],
  "registryDependencies": [
    "avatar",
    "button",
    "card",
    "input"
  ],
  "files": [
    {
      "path": "components/spectrumui/github-profile-card.tsx",
      "content": "'use client';\n\nimport { useMemo, useState } from 'react';\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';\nimport { Card } from '@/components/ui/card';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\nimport { Linkedin, Mail, Search, Loader2, Share2, Globe } from 'lucide-react';\nimport { Icons } from '@/components/icon';\n\ninterface GitHubUser {\n  login: string;\n  name: string;\n  bio: string;\n  avatar_url: string;\n  followers: number;\n  following: number;\n  public_repos: number;\n  html_url: string;\n  email?: string;\n  twitter_username?: string;\n  blog?: string;\n}\n\ninterface ContributionDay {\n  date: string;\n  level: number;\n  count: number;\n}\n\nconst contributionColorClasses = [\n  'bg-[#ebedf0] dark:bg-[#212121]',\n  'bg-[#9be9a8] dark:bg-[#404040]',\n  'bg-[#40c463] dark:bg-[#606060]',\n  'bg-[#30a14e] dark:bg-[#808080]',\n  'bg-[#216e39] dark:bg-[#c6c6c6]',\n];\n\nfunction generateContributions(): ContributionDay[] {\n  const contributions: ContributionDay[] = [];\n  const today = new Date();\n  const startDate = new Date(today.getFullYear() - 1, today.getMonth(), today.getDate());\n  const startSunday = new Date(startDate);\n  startSunday.setDate(startDate.getDate() - startDate.getDay());\n\n  for (let i = 0; i < 371; i++) {\n    const date = new Date(startSunday);\n    date.setDate(startSunday.getDate() + i);\n\n    const dayOfWeek = date.getDay();\n    const isWeekend = dayOfWeek === 0 || dayOfWeek === 6;\n    const intensity = (isWeekend ? 0.2 : 0.6) * Math.random();\n\n    let level = 0;\n    let count = 0;\n    if (intensity > 0.7) {\n      level = 4;\n      count = Math.floor(Math.random() * 10) + 10;\n    } else if (intensity > 0.5) {\n      level = 3;\n      count = Math.floor(Math.random() * 8) + 5;\n    } else if (intensity > 0.3) {\n      level = 2;\n      count = Math.floor(Math.random() * 5) + 2;\n    } else if (intensity > 0.1) {\n      level = 1;\n      count = Math.floor(Math.random() * 3) + 1;\n    }\n\n    contributions.push({\n      date: date.toISOString().split('T')[0],\n      level,\n      count,\n    });\n  }\n\n  return contributions;\n}\n\nfunction formatNumber(num: number) {\n  if (num >= 1000) return `${(num / 1000).toFixed(1)}k`;\n  return num.toString();\n}\n\nfunction getMonthLabels() {\n  const months = [];\n  const today = new Date();\n  for (let i = 11; i >= 0; i--) {\n    const date = new Date(today.getFullYear(), today.getMonth() - i, 1);\n    months.push(date.toLocaleDateString('en-US', { month: 'short' }));\n  }\n  return months;\n}\n\nfunction organizeContributionsByWeek(contributions: ContributionDay[]) {\n  const weeks: ContributionDay[][] = [];\n\n  for (let index = 0; index < contributions.length; index += 7) {\n    weeks.push(contributions.slice(index, index + 7));\n  }\n\n  return weeks;\n}\n\nfunction shareToTwitter() {\n  const text = `I have generated my GitHub card from Spectrum UI! 🚀\\n\\nGenerate yours: ${window.location.href}\\n\\n#GitHub #SpectrumUI #Developer`;\n  const url = `https://twitter.com/intent/tweet?text=${encodeURIComponent(text)}`;\n  window.open(url, '_blank');\n}\n\nfunction shareToLinkedIn() {\n  const text =\n    'I have generated my GitHub card from Spectrum UI! Check out this tool to showcase your GitHub profile.';\n  const url = `https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(window.location.href)}&summary=${encodeURIComponent(text)}`;\n  window.open(url, '_blank');\n}\n\nfunction copyShareLink() {\n  const text = `I have generated my GitHub card from Spectrum UI! Generate yours: ${window.location.href}`;\n  navigator.clipboard.writeText(text);\n  alert('Link copied to clipboard!');\n}\n\nexport default function GitHubProfileCard() {\n  const [username, setUsername] = useState('');\n  const [userData, setUserData] = useState<GitHubUser | null>(null);\n  const [loading, setLoading] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n\n  const fetchGitHubUser = async (username: string) => {\n    setLoading(true);\n    setError(null);\n\n    try {\n      const response = await fetch(`https://api.github.com/users/${username}`);\n\n      if (!response.ok) {\n        if (response.status === 404) {\n          throw new Error('User not found');\n        } else if (response.status === 403) {\n          throw new Error('API rate limit exceeded');\n        } else {\n          throw new Error('Failed to fetch user data');\n        }\n      }\n\n      const data: GitHubUser = await response.json();\n      setUserData(data);\n    } catch (err) {\n      setError(err instanceof Error ? err.message : 'An error occurred');\n      setUserData(null);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleSearch = () => {\n    if (username.trim()) {\n      fetchGitHubUser(username.trim());\n    }\n  };\n\n  const handleKeyPress = (e: React.KeyboardEvent) => {\n    if (e.key === 'Enter') {\n      handleSearch();\n    }\n  };\n\n  const contributions = useMemo(generateContributions, []);\n  const contributionWeeks = useMemo(\n    () => organizeContributionsByWeek(contributions),\n    [contributions],\n  );\n  const monthLabels = useMemo(getMonthLabels, []);\n\n  return (\n    <div className=\"min-h-screen  flex flex-col items-center justify-center p-4 space-y-6\">\n      <div className=\"w-full max-w-md flex space-x-2\">\n        <Input\n          aria-label=\"GitHub username\"\n          type=\"text\"\n          placeholder=\"Enter GitHub username...\"\n          value={username}\n          onChange={(e) => setUsername(e.target.value)}\n          onKeyDown={handleKeyPress}\n          className=\"bg-white dark:bg-neutral-900 border-neutral-300 dark:border-neutral-700 text-neutral-900 dark:text-white placeholder:text-neutral-500 dark:placeholder:text-neutral-400 rounded-xl\"\n        />\n        <Button\n          aria-label={loading ? 'Loading GitHub profile' : 'Search GitHub profile'}\n          onClick={handleSearch}\n          disabled={loading || !username.trim()}\n          className=\"bg-neutral-200 dark:bg-neutral-800 hover:bg-neutral-300 dark:hover:bg-neutral-700 text-neutral-900 dark:text-white\"\n        >\n          {loading ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <Search className=\"w-4 h-4\" />}\n        </Button>\n      </div>\n\n      {error && (\n        <div className=\"w-full max-w-md p-4 bg-red-900/20 border border-red-500/30 rounded-lg text-red-400 text-center\">\n          {error}\n        </div>\n      )}\n\n      {userData && (\n        <>\n          <Card className=\"w-full max-w-md bg-white dark:bg-black border-neutral-200 dark:border-neutral-800 rounded-3xl p-8 relative overflow-hidden\">\n            <div className=\"absolute bottom-0 left-0 right-0 h-32 bg-linear-to-t from-neutral-600/60 via-neutral-400/30 to-transparent dark:from-blue-600/30 dark:via-blue-600/10 dark:to-transparent  rounded-b-3xl\" />\n\n            <div className=\"relative z-10 flex flex-col items-center space-y-6\">\n              <Avatar className=\"w-20 h-20 border-2 border-neutral-200 dark:border-neutral-800\">\n                <AvatarImage\n                  src={userData.avatar_url || '/placeholder.svg'}\n                  alt={userData.name || userData.login}\n                />\n                <AvatarFallback className=\"bg-blue-500 text-white text-xl font-semibold\">\n                  {(userData.name || userData.login).charAt(0).toUpperCase()}\n                </AvatarFallback>\n              </Avatar>\n\n              {/* Name and Bio */}\n              <div className=\"text-center space-y-2\">\n                <h2 className=\"text-2xl font-bold text-neutral-900 dark:text-white\">\n                  {userData.name || userData.login}\n                </h2>\n                <p className=\"text-neutral-600 dark:text-neutral-400 text-sm max-w-xs\">\n                  {userData.bio || 'GitHub Developer'}\n                </p>\n              </div>\n\n              {/* Social Icons */}\n              <div className=\"flex space-x-4\">\n                {userData.twitter_username && (\n                  <a\n                    aria-label={`${userData.login}'s Twitter profile`}\n                    href={`https://twitter.com/${userData.twitter_username}`}\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\"\n                    className=\"p-2 hover:bg-neutral-100 dark:hover:bg-neutral-900 rounded-lg transition-colors\"\n                  >\n                    <Icons.twitter className=\"w-5 h-5 text-neutral-600 dark:text-neutral-400 hover:text-neutral-900 dark:hover:text-white\" />\n                  </a>\n                )}\n                <a\n                  aria-label={`${userData.login}'s GitHub profile`}\n                  href={userData.html_url}\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                  className=\"p-2 hover:bg-neutral-100 dark:hover:bg-neutral-900 rounded-lg transition-colors\"\n                >\n                  <Icons.gitHub className=\"w-5 h-5 text-neutral-600 dark:text-neutral-400 hover:text-neutral-900 dark:hover:text-white\" />\n                </a>\n                {userData.blog && (\n                  <a\n                    aria-label={`${userData.login}'s website`}\n                    href={\n                      userData.blog.startsWith('http') ? userData.blog : `https://${userData.blog}`\n                    }\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\"\n                    className=\"p-2 hover:bg-neutral-100 dark:hover:bg-neutral-900 rounded-lg transition-colors\"\n                  >\n                    <Globe className=\"w-5 h-5 text-neutral-600 dark:text-neutral-400 hover:text-neutral-900 dark:hover:text-white\" />\n                  </a>\n                )}\n                {userData.email && (\n                  <a\n                    aria-label={`Email ${userData.name || userData.login}`}\n                    href={`mailto:${userData.email}`}\n                    className=\"p-2 hover:bg-neutral-100 dark:hover:bg-neutral-900 rounded-lg transition-colors\"\n                  >\n                    <Mail className=\"w-5 h-5 text-neutral-600 dark:text-neutral-400 hover:text-neutral-900 dark:hover:text-white\" />\n                  </a>\n                )}\n              </div>\n\n              {/* Stats */}\n              <div className=\"flex w-full border border-neutral-200 dark:border-neutral-800 rounded-lg overflow-hidden\">\n                <div className=\"flex-1 text-center py-3 border-r border-neutral-200 dark:border-neutral-800\">\n                  <div className=\"text-lg font-semibold text-neutral-900 dark:text-white\">\n                    {formatNumber(userData.followers)}\n                  </div>\n                  <div className=\"text-xs text-neutral-600 dark:text-neutral-400\">Followers</div>\n                </div>\n                <div className=\"flex-1 text-center py-3 border-r border-neutral-200 dark:border-neutral-800\">\n                  <div className=\"text-lg font-semibold text-neutral-900 dark:text-white\">\n                    {formatNumber(userData.following)}\n                  </div>\n                  <div className=\"text-xs text-neutral-600 dark:text-neutral-400\">Following</div>\n                </div>\n                <div className=\"flex-1 text-center py-3\">\n                  <div className=\"text-lg font-semibold text-neutral-900 dark:text-white\">\n                    {formatNumber(userData.public_repos)}\n                  </div>\n                  <div className=\"text-xs text-neutral-600 dark:text-neutral-400\">Repositories</div>\n                </div>\n              </div>\n\n              {/* Contribution Graph */}\n              <div className=\"w-full space-y-3\">\n                {/* Month labels */}\n                <div className=\"flex justify-between text-xs text-neutral-500 dark:text-neutral-400 px-3\">\n                  {monthLabels.map((month, index) => (\n                    <span key={month} className={index % 2 === 0 ? 'opacity-100' : 'opacity-0'}>\n                      {month}\n                    </span>\n                  ))}\n                </div>\n\n                {/* Contribution grid - GitHub style */}\n                <div className=\"flex gap-1\">\n                  {/* Day labels */}\n                  <div className=\"flex flex-col justify-around text-xs text-neutral-500 dark:text-neutral-400 pr-2 h-20\">\n                    <span>Mon</span>\n                    <span>Wed</span>\n                    <span>Fri</span>\n                  </div>\n\n                  {/* Grid container */}\n                  <div className=\"flex gap-1 overflow-x-auto\">\n                    {contributionWeeks.map((week) => (\n                      <div key={week[0]?.date} className=\"flex flex-col gap-1\">\n                        {week.map((day) => (\n                          <div\n                            key={day.date}\n                            className={`w-3 h-3 rounded-sm hover:ring-1 hover:ring-neutral-400 dark:hover:ring-neutral-500 transition-all ${contributionColorClasses[day.level]}`}\n                            title={`${day.count} contributions on ${day.date}`}\n                          />\n                        ))}\n                      </div>\n                    ))}\n                  </div>\n                </div>\n\n                {/* Legend */}\n                <div className=\"flex items-center justify-between text-xs text-neutral-600 dark:text-neutral-400 px-3\">\n                  <span>Learn how we count contributions</span>\n                  <div className=\"flex items-center space-x-1\">\n                    <span>Less</span>\n                    <div className=\"flex space-x-1\">\n                      {[0, 1, 2, 3, 4].map((level) => (\n                        <div\n                          key={level}\n                          className={`w-3 h-3 rounded-sm ${contributionColorClasses[level]}`}\n                        />\n                      ))}\n                    </div>\n                    <span>More</span>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </Card>\n\n          {/* Share Section */}\n          <div className=\"w-full max-w-md bg-white dark:bg-black border border-neutral-200 dark:border-neutral-800 rounded-2xl p-6 space-y-4\">\n            <div className=\"text-center space-y-2\">\n              <h3 className=\"text-lg font-semibold text-neutral-900 dark:text-white\">\n                Share Your GitHub Card\n              </h3>\n              <p className=\"text-sm text-neutral-600 dark:text-neutral-400\">\n                I have generated my GitHub card from Spectrum UI! Generate yours and showcase your\n                profile.\n              </p>\n            </div>\n\n            <div className=\"flex space-x-3 justify-center\">\n              <Button\n                aria-label=\"Share on Twitter\"\n                onClick={shareToTwitter}\n                className=\"rounded-xl\"\n                size=\"sm\"\n              >\n                <Icons.twitter className=\"w-4 h-4\" />\n              </Button>\n\n              <Button\n                aria-label=\"Share on LinkedIn\"\n                onClick={shareToLinkedIn}\n                className=\"rounded-xl\"\n                size=\"sm\"\n              >\n                <Linkedin className=\"w-4 h-4\" />\n              </Button>\n\n              <Button\n                aria-label=\"Copy share link\"\n                onClick={copyShareLink}\n                className=\"rounded-xl\"\n                size=\"sm\"\n              >\n                <Share2 className=\"w-4 h-4\" />\n              </Button>\n            </div>\n          </div>\n        </>\n      )}\n\n      {/* Default state message */}\n      {!userData && !loading && !error && (\n        <div className=\"text-neutral-600 dark:text-neutral-400 text-center max-w-md\">\n          <p className=\"text-lg mb-2\">Enter a GitHub username to view their profile card</p>\n          <p className=\"text-sm\">\n            Try searching for popular users like &quot;arihantcodes&quot;, &quot;torvalds&quot;\n          </p>\n        </div>\n      )}\n    </div>\n  );\n}\n",
      "type": "registry:component",
      "target": "components/spectrumui/github-profile-card.tsx"
    },
    {
      "path": "components/icon.tsx",
      "content": "\ntype IconProps = React.HTMLAttributes<SVGElement>;\n\nexport const Icons = {\n   logo: (props: IconProps) => (\n    <svg width=\"36\" height=\"41\" viewBox=\"0 0 36 41\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n    <path d=\"M17.641 33.4291L11.563 27.3511C7.26395 23.052 0 26.091 0 32.169V40.1001H35.2821V15.7881L17.641 33.4291Z\" fill=\"currentColor\"/>\n    <path d=\"M17.641 6.67098L23.719 12.749C28.0181 17.0481 35.2821 14.0091 35.2821 7.93105V0H0V24.312L17.641 6.67098Z\" fill=\"currentColor\"/>\n    </svg>\n    \n  ),\n  twitter: (props: IconProps) => (\n    <svg\n      {...props}\n      height=\"23\"\n      viewBox=\"0 0 1200 1227\"\n      fill=\"currentColor\"\n      width=\"23\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path d=\"M714.163 519.284L1160.89 0H1055.03L667.137 450.887L357.328 0H0L468.492 681.821L0 1226.37H105.866L515.491 750.218L842.672 1226.37H1200L714.137 519.284H714.163ZM569.165 687.828L521.697 619.934L144.011 79.6944H306.615L611.412 515.685L658.88 583.579L1055.08 1150.3H892.476L569.165 687.854V687.828Z\" />\n    </svg>\n  ),\n  gitHub: (props: IconProps) => (\n    <svg viewBox=\"0 0 438.549 438.549\" {...props}>\n      <path\n        fill=\"currentColor\"\n        d=\"M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 01-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z\"\n      ></path>\n    </svg>\n  ),\n  radix: (props: IconProps) => (\n    <svg viewBox=\"0 0 25 25\" fill=\"none\" {...props}>\n      <path\n        d=\"M12 25C7.58173 25 4 21.4183 4 17C4 12.5817 7.58173 9 12 9V25Z\"\n        fill=\"currentcolor\"\n      ></path>\n      <path d=\"M12 0H4V8H12V0Z\" fill=\"currentcolor\"></path>\n      <path\n        d=\"M17 8C19.2091 8 21 6.20914 21 4C21 1.79086 19.2091 0 17 0C14.7909 0 13 1.79086 13 4C13 6.20914 14.7909 8 17 8Z\"\n        fill=\"currentcolor\"\n      ></path>\n    </svg>\n  ),\n  aria: (props: IconProps) => (\n    <svg role=\"img\" viewBox=\"0 0 24 24\" fill=\"currentColor\" {...props}>\n      <path d=\"M13.966 22.624l-1.69-4.281H8.122l3.892-9.144 5.662 13.425zM8.884 1.376H0v21.248zm15.116 0h-8.884L24 22.624Z\" />\n    </svg>\n  ),\n  npm: (props: IconProps) => (\n    <svg viewBox=\"0 0 24 24\" {...props}>\n      <path\n        d=\"M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  ),\n  yarn: (props: IconProps) => (\n    <svg viewBox=\"0 0 24 24\" {...props}>\n      <path\n        d=\"M12 0C5.375 0 0 5.375 0 12s5.375 12 12 12 12-5.375 12-12S18.625 0 12 0zm.768 4.105c.183 0 .363.053.525.157.125.083.287.185.755 1.154.31-.088.468-.042.551-.019.204.056.366.19.463.375.477.917.542 2.553.334 3.605-.241 1.232-.755 2.029-1.131 2.576.324.329.778.899 1.117 1.825.278.774.31 1.478.273 2.015a5.51 5.51 0 0 0 .602-.329c.593-.366 1.487-.917 2.553-.931.714-.009 1.269.445 1.353 1.103a1.23 1.23 0 0 1-.945 1.362c-.649.158-.95.278-1.821.843-1.232.797-2.539 1.242-3.012 1.39a1.686 1.686 0 0 1-.704.343c-.737.181-3.266.315-3.466.315h-.046c-.783 0-1.214-.241-1.45-.491-.658.329-1.51.19-2.122-.134a1.078 1.078 0 0 1-.58-1.153 1.243 1.243 0 0 1-.153-.195c-.162-.25-.528-.936-.454-1.946.056-.723.556-1.367.88-1.71a5.522 5.522 0 0 1 .408-2.256c.306-.727.885-1.348 1.32-1.737-.32-.537-.644-1.367-.329-2.21.227-.602.412-.936.82-1.08h-.005c.199-.074.389-.153.486-.259a3.418 3.418 0 0 1 2.298-1.103c.037-.093.079-.185.125-.283.31-.658.639-1.029 1.024-1.168a.94.94 0 0 1 .328-.06zm.006.7c-.507.016-1.001 1.519-1.001 1.519s-1.27-.204-2.266.871c-.199.218-.468.334-.746.44-.079.028-.176.023-.417.672-.371.991.625 2.094.625 2.094s-1.186.839-1.626 1.881c-.486 1.144-.338 2.261-.338 2.261s-.843.732-.899 1.487c-.051.663.139 1.2.343 1.515.227.343.51.176.51.176s-.561.653-.037.931c.477.25 1.283.394 1.71-.037.31-.31.371-1.001.486-1.283.028-.065.12.111.209.199.097.093.264.195.264.195s-.755.324-.445 1.066c.102.246.468.403 1.066.398.222-.005 2.664-.139 3.313-.296.375-.088.505-.283.505-.283s1.566-.431 2.998-1.357c.917-.598 1.293-.76 2.034-.936.612-.148.57-1.098-.241-1.084-.839.009-1.575.44-2.196.825-1.163.718-1.742.672-1.742.672l-.018-.032c-.079-.13.371-1.293-.134-2.678-.547-1.515-1.413-1.881-1.344-1.997.297-.5 1.038-1.297 1.334-2.78.176-.899.13-2.377-.269-3.151-.074-.144-.732.241-.732.241s-.616-1.371-.788-1.483a.271.271 0 0 0-.157-.046z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  ),\n\n  react: (props: IconProps) => (\n    <svg viewBox=\"0 0 24 24\" {...props}>\n      <path\n        d=\"M14.23 12.004a2.236 2.236 0 0 1-2.235 2.236 2.236 2.236 0 0 1-2.236-2.236 2.236 2.236 0 0 1 2.235-2.236 2.236 2.236 0 0 1 2.236 2.236zm2.648-10.69c-1.346 0-3.107.96-4.888 2.622-1.78-1.653-3.542-2.602-4.887-2.602-.41 0-.783.093-1.106.278-1.375.793-1.683 3.264-.973 6.365C1.98 8.917 0 10.42 0 12.004c0 1.59 1.99 3.097 5.043 4.03-.704 3.113-.39 5.588.988 6.38.32.187.69.275 1.102.275 1.345 0 3.107-.96 4.888-2.624 1.78 1.654 3.542 2.603 4.887 2.603.41 0 .783-.09 1.106-.275 1.374-.792 1.683-3.263.973-6.365C22.02 15.096 24 13.59 24 12.004c0-1.59-1.99-3.097-5.043-4.032.704-3.11.39-5.587-.988-6.38-.318-.184-.688-.277-1.092-.278zm-.005 1.09v.006c.225 0 .406.044.558.127.666.382.955 1.835.73 3.704-.054.46-.142.945-.25 1.44-.96-.236-2.006-.417-3.107-.534-.66-.905-1.345-1.727-2.035-2.447 1.592-1.48 3.087-2.292 4.105-2.295zm-9.77.02c1.012 0 2.514.808 4.11 2.28-.686.72-1.37 1.537-2.02 2.442-1.107.117-2.154.298-3.113.538-.112-.49-.195-.964-.254-1.42-.23-1.868.054-3.32.714-3.707.19-.09.4-.127.563-.132zm4.882 3.05c.455.468.91.992 1.36 1.564-.44-.02-.89-.034-1.345-.034-.46 0-.915.01-1.36.034.44-.572.895-1.096 1.345-1.565zM12 8.1c.74 0 1.477.034 2.202.093.406.582.802 1.203 1.183 1.86.372.64.71 1.29 1.018 1.946-.308.655-.646 1.31-1.013 1.95-.38.66-.773 1.288-1.18 1.87-.728.063-1.466.098-2.21.098-.74 0-1.477-.035-2.202-.093-.406-.582-.802-1.204-1.183-1.86-.372-.64-.71-1.29-1.018-1.946.303-.657.646-1.313 1.013-1.954.38-.66.773-1.286 1.18-1.868.728-.064 1.466-.098 2.21-.098zm-3.635.254c-.24.377-.48.763-.704 1.16-.225.39-.435.782-.635 1.174-.265-.656-.49-1.31-.676-1.947.64-.15 1.315-.283 2.015-.386zm7.26 0c.695.103 1.365.23 2.006.387-.18.632-.405 1.282-.66 1.933-.2-.39-.41-.783-.64-1.174-.225-.392-.465-.774-.705-1.146zm3.063.675c.484.15.944.317 1.375.498 1.732.74 2.852 1.708 2.852 2.476-.005.768-1.125 1.74-2.857 2.475-.42.18-.88.342-1.355.493-.28-.958-.646-1.956-1.1-2.98.45-1.017.81-2.01 1.085-2.964zm-13.395.004c.278.96.645 1.957 1.1 2.98-.45 1.017-.812 2.01-1.086 2.964-.484-.15-.944-.318-1.37-.5-1.732-.737-2.852-1.706-2.852-2.474 0-.768 1.12-1.742 2.852-2.476.42-.18.88-.342 1.356-.494zm11.678 4.28c.265.657.49 1.312.676 1.948-.64.157-1.316.29-2.016.39.24-.375.48-.762.705-1.158.225-.39.435-.788.636-1.18zm-9.945.02c.2.392.41.783.64 1.175.23.39.465.772.705 1.143-.695-.102-1.365-.23-2.006-.386.18-.63.406-1.282.66-1.933zM17.92 16.32c.112.493.2.968.254 1.423.23 1.868-.054 3.32-.714 3.708-.147.09-.338.128-.563.128-1.012 0-2.514-.807-4.11-2.28.686-.72 1.37-1.536 2.02-2.44 1.107-.118 2.154-.3 3.113-.54zm-11.83.01c.96.234 2.006.415 3.107.532.66.905 1.345 1.727 2.035 2.446-1.595 1.483-3.092 2.295-4.11 2.295-.22-.005-.406-.05-.553-.132-.666-.38-.955-1.834-.73-3.703.054-.46.142-.944.25-1.438zm4.56.64c.44.02.89.034 1.345.034.46 0 .915-.01 1.36-.034-.44.572-.895 1.095-1.345 1.565-.455-.47-.91-.993-1.36-1.565z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  ),\n  tailwind: (props: IconProps) => (\n    <svg viewBox=\"0 0 24 24\" {...props}>\n      <path\n        d=\"M12.001,4.8c-3.2,0-5.2,1.6-6,4.8c1.2-1.6,2.6-2.2,4.2-1.8c0.913,0.228,1.565,0.89,2.288,1.624 C13.666,10.618,15.027,12,18.001,12c3.2,0,5.2-1.6,6-4.8c-1.2,1.6-2.6,2.2-4.2,1.8c-0.913-0.228-1.565-0.89-2.288-1.624 C16.337,6.182,14.976,4.8,12.001,4.8z M6.001,12c-3.2,0-5.2,1.6-6,4.8c1.2-1.6,2.6-2.2,4.2-1.8c0.913,0.228,1.565,0.89,2.288,1.624 c1.177,1.194,2.538,2.576,5.512,2.576c3.2,0,5.2-1.6,6-4.8c-1.2,1.6-2.6,2.2-4.2,1.8c-0.913-0.228-1.565-0.89-2.288-1.624 C10.337,13.382,8.976,12,6.001,12z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  ),\n  google: (props: IconProps) => (\n    <svg role=\"img\" viewBox=\"0 0 24 24\" {...props}>\n      <path\n        fill=\"currentColor\"\n        d=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n      />\n    </svg>\n  ),\n  apple: (props: IconProps) => (\n    <svg role=\"img\" viewBox=\"0 0 24 24\" {...props}>\n      <path\n        d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  ),\n  paypal: (props: IconProps) => (\n    <svg role=\"img\" viewBox=\"0 0 24 24\" {...props}>\n      <path\n        d=\"M7.076 21.337H2.47a.641.641 0 0 1-.633-.74L4.944.901C5.026.382 5.474 0 5.998 0h7.46c2.57 0 4.578.543 5.69 1.81 1.01 1.15 1.304 2.42 1.012 4.287-.023.143-.047.288-.077.437-.983 5.05-4.349 6.797-8.647 6.797h-2.19c-.524 0-.968.382-1.05.9l-1.12 7.106zm14.146-14.42a3.35 3.35 0 0 0-.607-.541c-.013.076-.026.175-.041.254-.93 4.778-4.005 7.201-9.138 7.201h-2.19a.563.563 0 0 0-.556.479l-1.187 7.527h-.506l-.24 1.516a.56.56 0 0 0 .554.647h3.882c.46 0 .85-.334.922-.788.06-.26.76-4.852.816-5.09a.932.932 0 0 1 .923-.788h.58c3.76 0 6.705-1.528 7.565-5.946.36-1.847.174-3.388-.777-4.471z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  ),\n  spinner: (props: IconProps) => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"24\"\n      height=\"24\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      {...props}\n    >\n      <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n    </svg>\n  ),\n  driver: (props: IconProps) => (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" ><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m3.3 7 7 4\"/><path d=\"m13.7 11 7-4\"/><path d=\"M12 14v8\"/><circle cx=\"12\" cy=\"12\" r=\"2\"/></svg>\n\n  ),\n  shadcnblock:(props: IconProps) => (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 78 90\" fill=\"none\">\n<path d=\"M46.7305 4.50988L43.6252 2.72961V17.49L46.7305 19.2925V4.50988Z\" fill=\"currentColor\"/>\n<path d=\"M52.9854 8.14811L49.8765 6.34937V21.1287L52.9854 22.9127V8.14811Z\" fill=\"currentColor\"/>\n<path d=\"M59.1814 11.7684L56.0762 9.98816V24.7486L59.1814 26.5326V11.7684Z\" fill=\"currentColor\"/>\n<path d=\"M6.04712 26.0179L9.15238 27.8019V17.246L6.04712 19.0262V26.0179Z\" fill=\"currentColor\"/>\n<path d=\"M2.93874 24.2184V20.8651L0 22.5491L2.93874 24.2184Z\" fill=\"currentColor\"/>\n<path d=\"M77.889 22.5895L74.7985 20.8056V24.3883L71.6895 26.1685V19.0253L68.6027 17.245V27.9123L65.4937 29.6962V15.3874L62.3293 13.548V28.3305L65.1162 29.959V59.8636L64.9645 59.9561L62.3293 58.4424V61.4921L59.1833 63.2724V56.5474L56.078 54.7079V65.0743L52.9875 66.9101V52.8681L49.8785 51.0324V68.6945L46.7325 70.4748V49.1932L43.6273 47.3537V72.2547L40.5183 74.1127V45.5172L39.0008 44.5105L39.06 14.8159L40.5183 15.7079V0.947497L38.8898 0L37.5795 0.736529V15.5562L34.4372 17.3364V2.57602L31.3283 4.35629V19.1199L28.2193 20.9186V6.1953L25.1325 7.97557V22.6989L21.968 24.4829V9.77771L18.8775 11.6135V26.2807L15.7685 28.1202V13.393L12.3005 15.4397V29.578L12.7743 29.8444L12.889 59.9528L15.7685 61.6405V58.2872L18.8775 56.4477V63.4799L21.968 65.2786V54.6082L25.1325 52.7132V67.0591L28.2193 68.8986V50.8772L31.3283 49.0377V70.6786L34.4372 72.481V47.1797L37.5795 45.3439V74.3168L39.0008 75.1533V75.0941V89.969L77.9445 67.477L78 22.5853L77.889 22.5895Z\" fill=\"currentColor\"/>\n</svg>\n  ),\n  typeScript: (props: IconProps) => (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" width=\"25\" height=\"25\" viewBox=\"0 0 48 48\"\n    {...props}\n    >\n<linearGradient id=\"O2zipXlwzZyOse8_3L2yya_wpZmKzk11AzJ_gr1\" x1=\"15.189\" x2=\"32.276\" y1=\"-.208\" y2=\"46.737\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#2aa4f4\"></stop><stop offset=\"1\" stop-color=\"#007ad9\"></stop></linearGradient><rect width=\"36\" height=\"36\" x=\"6\" y=\"6\" fill=\"url(#O2zipXlwzZyOse8_3L2yya_wpZmKzk11AzJ_gr1)\"></rect><polygon fill=\"#fff\" points=\"27.49,22 14.227,22 14.227,25.264 18.984,25.264 18.984,40 22.753,40 22.753,25.264 27.49,25.264\"></polygon><path fill=\"#fff\" d=\"M39.194,26.084c0,0-1.787-1.192-3.807-1.192s-2.747,0.96-2.747,1.986\tc0,2.648,7.381,2.383,7.381,7.712c0,8.209-11.254,4.568-11.254,4.568V35.22c0,0,2.152,1.622,4.733,1.622s2.483-1.688,2.483-1.92\tc0-2.449-7.315-2.449-7.315-7.878c0-7.381,10.658-4.469,10.658-4.469L39.194,26.084z\"></path>\n</svg>\n  )\n};",
      "type": "registry:component",
      "target": "components/icon.tsx"
    }
  ],
  "type": "registry:component"
}
