{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "github-oss-traction-band",
  "title": "Github Oss Traction Band",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/github-oss-traction-band/github-oss-traction-band.component.ts",
      "content": "// Open source community traction and velocity band with real-time star metrics,\n// recent releases changelog feed, and quickstart CLI install terminal.\n// Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, Input, signal } from '@angular/core'\nimport {\n  Check,\n  Copy,\n  GitBranch,\n  GitPullRequest,\n  LucideAngularModule,\n  MessageSquare,\n  Package,\n  Star,\n  Terminal,\n  TrendingUp,\n} from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiBadgeComponent } from '@/ui/badge/badge.component'\nimport { UiButtonComponent } from '@/ui/button/button.component'\nimport { UiCardComponent } from '@/ui/card/card.component'\n\ninterface ReleaseItem {\n  version: string\n  date: string\n  title: string\n  type: 'feature' | 'primitive' | 'block'\n}\n\nconst recentReleases: ReleaseItem[] = [\n  { version: 'v2.4.0', date: 'Yesterday', title: 'Added 12 new Marketing & Conversion Workbenches', type: 'block' },\n  {\n    version: 'v2.3.8',\n    date: '3 days ago',\n    title: 'OKLCH Dynamic Theme Engine & Tailored HSL generator',\n    type: 'feature',\n  },\n  { version: 'v2.3.5', date: 'Last week', title: 'Added SegmentedGauge & SmoothFunnel primitives', type: 'primitive' },\n  {\n    version: 'v2.3.0',\n    date: '2 weeks ago',\n    title: 'Full React 19 single-curly-brace AST parity validation',\n    type: 'feature',\n  },\n]\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-github-oss-traction-band, [ui-github-oss-traction-band]',\n  standalone: true,\n  // React renders the root <section> itself: the host stays out of layout and `class` goes to the root.\n  host: { '[attr.class]': '\"contents\"' },\n  imports: [LucideAngularModule, UiBadgeComponent, UiButtonComponent, UiCardComponent],\n  template: `\n    <section data-slot=\"github-oss-traction-band\" [class]=\"rootClass\">\n      <div\n        class=\"bg-primary/10 pointer-events-none absolute top-1/2 left-1/2 -z-10 h-72 w-full max-w-4xl -translate-x-1/2 -translate-y-1/2 rounded-full blur-xl\"\n      ></div>\n      <div class=\"mx-auto max-w-6xl space-y-12\">\n        <div\n          class=\"border-border/60 flex flex-col items-center justify-between gap-6 border-b pb-8 text-center md:flex-row md:text-left\"\n        >\n          <div class=\"space-y-2\">\n            <span ui-badge variant=\"secondary\" class=\"gap-1.5 px-3 py-1 font-mono text-xs shadow-xs\">\n              <svg class=\"size-3.5\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n                <path\n                  d=\"M12 .5C5.7.5.5 5.7.5 12c0 5.1 3.3 9.4 7.9 10.9.6.1.8-.3.8-.6v-2c-3.2.7-3.9-1.5-3.9-1.5-.5-1.4-1.3-1.7-1.3-1.7-1.1-.7.1-.7.1-.7 1.2.1 1.8 1.2 1.8 1.2 1 1.8 2.7 1.3 3.4 1 .1-.8.4-1.3.7-1.6-2.6-.3-5.3-1.3-5.3-5.8 0-1.3.5-2.3 1.2-3.1-.1-.3-.5-1.5.1-3.1 0 0 1-.3 3.3 1.2a11.4 11.4 0 016 0C17 4.7 18 5 18 5c.6 1.6.2 2.8.1 3.1.8.8 1.2 1.8 1.2 3.1 0 4.5-2.7 5.5-5.3 5.8.4.4.8 1.1.8 2.2v3.3c0 .3.2.7.8.6 4.6-1.5 7.9-5.8 7.9-10.9C23.5 5.7 18.3.5 12 .5z\"\n                />\n              </svg>\n              100% Free &amp; Open Source on GitHub\n            </span>\n            <h2 class=\"text-foreground text-3xl font-bold tracking-tight\">\n              Backed by a thriving open-source community.\n            </h2>\n            <p class=\"text-muted-foreground text-xs sm:text-sm\">\n              Zero vendor lock-in. 100% unbundled source code ownership under the permissive MIT License.\n            </p>\n          </div>\n          <div class=\"flex shrink-0 items-center gap-3\">\n            <a\n              ui-button\n              size=\"lg\"\n              class=\"gap-2 font-semibold shadow-xs\"\n              href=\"https://github.com/uday-a/uipkge-registry\"\n              target=\"_blank\"\n              rel=\"noreferrer\"\n            >\n              <svg class=\"size-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n                <path\n                  d=\"M12 .5C5.7.5.5 5.7.5 12c0 5.1 3.3 9.4 7.9 10.9.6.1.8-.3.8-.6v-2c-3.2.7-3.9-1.5-3.9-1.5-.5-1.4-1.3-1.7-1.3-1.7-1.1-.7.1-.7.1-.7 1.2.1 1.8 1.2 1.8 1.2 1 1.8 2.7 1.3 3.4 1 .1-.8.4-1.3.7-1.6-2.6-.3-5.3-1.3-5.3-5.8 0-1.3.5-2.3 1.2-3.1-.1-.3-.5-1.5.1-3.1 0 0 1-.3 3.3 1.2a11.4 11.4 0 016 0C17 4.7 18 5 18 5c.6 1.6.2 2.8.1 3.1.8.8 1.2 1.8 1.2 3.1 0 4.5-2.7 5.5-5.3 5.8.4.4.8 1.1.8 2.2v3.3c0 .3.2.7.8.6 4.6-1.5 7.9-5.8 7.9-10.9C23.5 5.7 18.3.5 12 .5z\"\n                />\n              </svg>\n              <span>Star on GitHub</span>\n              <span\n                ui-badge\n                variant=\"outline\"\n                class=\"bg-primary-foreground/20 text-primary-foreground ml-1 border-transparent font-mono text-xs\"\n                >{{ starCount() }}</span\n              >\n            </a>\n          </div>\n        </div>\n\n        <div class=\"grid grid-cols-2 gap-4 sm:grid-cols-4\">\n          <div ui-card class=\"border-border bg-card/80 space-y-2 rounded-2xl p-5 shadow-xs\">\n            <div class=\"text-muted-foreground flex items-center justify-between\">\n              <span class=\"font-mono text-xs\">GitHub Stars</span>\n              <lucide-icon [img]=\"Star\" class=\"fill-warning text-warning size-4\" />\n            </div>\n            <p class=\"text-foreground font-mono text-3xl font-bold\">14,820</p>\n            <p class=\"text-success flex items-center gap-1 font-mono text-xs\">\n              <lucide-icon [img]=\"TrendingUp\" class=\"size-3\" /> +420 this week\n            </p>\n          </div>\n          <div ui-card class=\"border-border bg-card/80 space-y-2 rounded-2xl p-5 shadow-xs\">\n            <div class=\"text-muted-foreground flex items-center justify-between\">\n              <span class=\"font-mono text-xs\">Weekly Installs</span>\n              <lucide-icon [img]=\"Package\" class=\"text-primary size-4\" />\n            </div>\n            <p class=\"text-foreground font-mono text-3xl font-bold\">142,500</p>\n            <p class=\"text-muted-foreground font-mono text-xs\">Across Vue &amp; React</p>\n          </div>\n          <div ui-card class=\"border-border bg-card/80 space-y-2 rounded-2xl p-5 shadow-xs\">\n            <div class=\"text-muted-foreground flex items-center justify-between\">\n              <span class=\"font-mono text-xs\">Contributors</span>\n              <lucide-icon [img]=\"GitPullRequest\" class=\"text-success size-4\" />\n            </div>\n            <p class=\"text-foreground font-mono text-3xl font-bold\">84+</p>\n            <p class=\"text-muted-foreground font-mono text-xs\">Design engineers</p>\n          </div>\n          <div ui-card class=\"border-border bg-card/80 space-y-2 rounded-2xl p-5 shadow-xs\">\n            <div class=\"text-muted-foreground flex items-center justify-between\">\n              <span class=\"font-mono text-xs\">Community</span>\n              <lucide-icon [img]=\"MessageSquare\" class=\"text-info size-4\" />\n            </div>\n            <p class=\"text-foreground font-mono text-3xl font-bold\">4,200+</p>\n            <p class=\"text-muted-foreground font-mono text-xs\">Active builders</p>\n          </div>\n        </div>\n\n        <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2\">\n          <div ui-card class=\"border-border bg-card/90 space-y-4 rounded-2xl p-6 text-left shadow-sm\">\n            <div class=\"border-border flex items-center justify-between border-b pb-3\">\n              <h3 class=\"text-foreground flex items-center gap-2 font-mono text-sm font-bold\">\n                <lucide-icon [img]=\"GitBranch\" class=\"text-primary size-4\" /> Recent Registry Releases\n              </h3>\n              <span class=\"text-muted-foreground font-mono text-xs\">Continuous Shipping</span>\n            </div>\n            <div class=\"space-y-3\">\n              @for (rel of releases; track rel.version) {\n                <div class=\"flex items-start justify-between gap-3 text-xs\">\n                  <div class=\"space-y-0.5\">\n                    <div class=\"flex items-center gap-2\">\n                      <span class=\"text-foreground font-mono font-bold\">{{ rel.version }}</span>\n                      <span ui-badge variant=\"outline\" class=\"font-mono text-xs capitalize\">{{ rel.type }}</span>\n                    </div>\n                    <p class=\"text-muted-foreground leading-snug\">{{ rel.title }}</p>\n                  </div>\n                  <span class=\"text-muted-foreground shrink-0 font-mono text-xs\">{{ rel.date }}</span>\n                </div>\n              }\n            </div>\n          </div>\n\n          <div\n            ui-card\n            class=\"border-border bg-card/90 flex flex-col justify-between space-y-4 rounded-2xl p-6 text-left shadow-sm\"\n          >\n            <div class=\"space-y-1\">\n              <h3 class=\"text-foreground flex items-center gap-2 font-mono text-sm font-bold\">\n                <lucide-icon [img]=\"Terminal\" class=\"text-success size-4\" /> Quickstart CLI\n              </h3>\n              <p class=\"text-muted-foreground text-xs\">\n                Add tokens, utils, and theme scaffolding into your repository in seconds.\n              </p>\n            </div>\n            <div\n              class=\"border-border bg-background text-foreground flex items-center justify-between gap-2 overflow-hidden rounded-xl border p-3.5 font-mono text-xs\"\n            >\n              <span class=\"text-muted-foreground truncate\">\n                <span class=\"text-primary font-bold\">&gt;</span> {{ commandText() }}\n              </span>\n              <button\n                ui-button\n                size=\"sm\"\n                variant=\"ghost\"\n                class=\"h-8 shrink-0 gap-1.5 px-2 text-xs\"\n                (click)=\"copyCommand()\"\n              >\n                @if (isCopied()) {\n                  <lucide-icon [img]=\"Check\" class=\"text-success size-3.5\" />\n                } @else {\n                  <lucide-icon [img]=\"Copy\" class=\"size-3.5\" />\n                }\n                <span>{{ isCopied() ? 'Copied' : 'Copy' }}</span>\n              </button>\n            </div>\n            <div\n              class=\"text-muted-foreground border-border/60 flex items-center justify-between border-t pt-2 font-mono text-xs\"\n            >\n              <span>Supports Vue 3.5, Nuxt, React 19, Next.js</span>\n              <span class=\"text-success font-semibold\">&check; Zero lock-in</span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n  `,\n})\nexport class UiGithubOssTractionBandComponent {\n  protected readonly Check = Check\n  protected readonly Copy = Copy\n  protected readonly GitBranch = GitBranch\n  protected readonly GitPullRequest = GitPullRequest\n  protected readonly MessageSquare = MessageSquare\n  protected readonly Package = Package\n  protected readonly Star = Star\n  protected readonly Terminal = Terminal\n  protected readonly TrendingUp = TrendingUp\n\n  protected readonly releases = recentReleases\n\n  @Input('class') className?: string\n\n  readonly starCount = signal('14.8k')\n  readonly isCopied = signal(false)\n  readonly commandText = signal('npx shadcn add https://uipkge.dev/r/react/init.json')\n  private copyTimer: ReturnType<typeof setTimeout> | undefined\n\n  get rootClass(): string {\n    return cn('bg-background relative overflow-hidden px-4 py-16 sm:px-6 sm:py-24 lg:px-8', this.className)\n  }\n\n  async copyCommand(): Promise<void> {\n    try {\n      await navigator.clipboard.writeText(this.commandText())\n    } catch {\n      // Clipboard unavailable in test env: still flip the label.\n    }\n    this.isCopied.set(true)\n    clearTimeout(this.copyTimer)\n    this.copyTimer = setTimeout(() => this.isCopied.set(false), 2000)\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/github-oss-traction-band/github-oss-traction-band.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/github-oss-traction-band/index.ts",
      "content": "export { UiGithubOssTractionBandComponent } from './github-oss-traction-band.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/github-oss-traction-band/index.ts"
    }
  ],
  "dependencies": [
    "lucide-angular"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/angular/badge.json",
    "https://uipkge.dev/r/angular/button.json",
    "https://uipkge.dev/r/angular/card.json"
  ],
  "description": "Open source community traction and velocity band with real-time star metrics, recent releases changelog feed, and quickstart CLI install terminal.",
  "categories": [
    "marketing"
  ]
}