{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "hero-ascii-terminal-stream",
  "title": "Hero Ascii Terminal Stream",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/hero-ascii-terminal-stream/hero-ascii-terminal-stream.component.ts",
      "content": "// Retro-futuristic ASCII terminal stream hero with an interactive command\n// executor (bench / parity / tree / clear) and live telemetry logs.\n// Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, DestroyRef, Input, inject, signal } from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { ArrowRight, LucideAngularModule, Terminal } from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiButtonComponent } from '@/ui/button/button.component'\nimport { UiCardComponent, UiCardContentComponent } from '@/ui/card/card.component'\n\nexport interface HeroAsciiTerminalStreamProps {\n  title?: string\n  description?: string\n}\n\nconst ASCII_BANNER = `\n  _   _ ___ ____  _  ______ _____\n | | | |_ _|  _ \\\\| |/ / ___| ____|\n | | | || || |_) | ' / |  _|  _|\n | |_| || ||  __/| . \\\\ |_| | |___\n  \\\\___/|___|_|   |_|\\\\_\\\\____|_____|\n  ================================\n  DUAL-FRAMEWORK UNBUNDLED REGISTRY\n`\n\nconst initialLogs: string[] = [\n  'INIT: Initializing UIPKGE dual-framework AST registry...',\n  'RESOLVE: Synchronizing @uipkge/button -> Vue 3.5 & React 19',\n  'OKLCH: Loaded 48 semantic color variables from packages/shared',\n  'BENCHMARK: Cold compilation completed in 1.42ms (zero dead code)',\n  'READY: Terminal listening on edge:8080',\n]\n\nconst quickCommands = ['bench', 'parity', 'tree', 'clear'] as const\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-hero-ascii-terminal-stream, [ui-hero-ascii-terminal-stream]',\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: [FormsModule, LucideAngularModule, UiButtonComponent, UiCardComponent, UiCardContentComponent],\n  template: `\n    <section data-slot=\"hero-ascii-terminal-stream\" [class]=\"rootClass\">\n      <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n        <!-- Section Header -->\n        <div class=\"mx-auto max-w-3xl space-y-4 text-center\">\n          <a\n            href=\"#ascii-terminal\"\n            class=\"group border-border/80 bg-secondary/60 hover:bg-secondary text-foreground inline-flex items-center gap-2 rounded-full border px-3.5 py-1 text-xs font-medium shadow-2xs transition-colors\"\n          >\n            <lucide-icon [img]=\"Terminal\" class=\"text-primary size-3.5\" />\n            <span>Real-time ASCII Telemetry Stream</span>\n            <lucide-icon\n              [img]=\"ArrowRight\"\n              class=\"text-muted-foreground size-3 transition-transform group-hover:translate-x-0.5\"\n            />\n          </a>\n\n          <h1 class=\"text-foreground text-4xl font-bold tracking-tight sm:text-5xl lg:text-6xl\">\n            {{ title }}\n          </h1>\n\n          <p class=\"text-muted-foreground text-base sm:text-lg\">\n            {{ description }}\n          </p>\n\n          <!-- Command Chips -->\n          <div class=\"flex flex-wrap items-center justify-center gap-2 pt-2\">\n            <span class=\"text-muted-foreground text-xs\">Quick commands:</span>\n            @for (chip of commandChips; track chip) {\n              <button\n                type=\"button\"\n                class=\"border-border bg-muted/40 hover:bg-muted text-foreground rounded border px-2 py-0.5 font-mono text-xs transition-colors\"\n                (click)=\"runCommand(chip)\"\n              >\n                {{ '$' + chip }}\n              </button>\n            }\n          </div>\n        </div>\n\n        <!-- Main ASCII Terminal Card -->\n        <div class=\"mx-auto mt-12 max-w-4xl\">\n          <div ui-card class=\"border-border bg-card overflow-hidden font-mono text-xs shadow-lg\">\n            <!-- Terminal Title Bar -->\n            <div class=\"border-border bg-muted/40 flex items-center justify-between border-b px-4 py-2.5\">\n              <div class=\"flex items-center gap-2\">\n                <div class=\"flex gap-1.5\">\n                  <span class=\"bg-destructive/80 size-2.5 rounded-full\"></span>\n                  <span class=\"bg-warning/80 size-2.5 rounded-full\"></span>\n                  <span class=\"bg-success/80 size-2.5 rounded-full\"></span>\n                </div>\n                <span class=\"text-foreground pl-2 text-xs font-bold\">uipkge-telemetry-cli &bull; zsh</span>\n              </div>\n              <div class=\"text-muted-foreground flex items-center gap-3 text-xs\">\n                <span class=\"flex items-center gap-1\">\n                  <span class=\"bg-success size-1.5 rounded-full\"></span>\n                  <span>60 FPS</span>\n                </span>\n                <span>1.2MB RSS</span>\n              </div>\n            </div>\n\n            <!-- Terminal Content Viewport -->\n            <div ui-card-content class=\"bg-background/95 space-y-4 p-6\">\n              <!-- ASCII Art Banner -->\n              <pre class=\"text-primary overflow-x-auto text-xs leading-tight font-bold select-none\"><code>{{\n                asciiBanner\n              }}</code></pre>\n\n              <!-- Logs Stream Output -->\n              <div class=\"border-border/80 max-h-56 space-y-1.5 overflow-y-auto border-t pt-2 text-xs\">\n                @for (log of terminalLogs(); track $index) {\n                  <div [class]=\"logClass(log)\">\n                    {{ log }}\n                  </div>\n                }\n              </div>\n\n              <!-- Terminal Interactive Input Prompt -->\n              <form class=\"border-border flex items-center gap-2 border-t pt-3\" (submit)=\"onSubmit($event)\">\n                <span class=\"text-primary font-bold\">&gt;</span>\n                <input\n                  type=\"text\"\n                  placeholder=\"Type command (e.g. bench, parity, clear)...\"\n                  [(ngModel)]=\"inputCommand\"\n                  name=\"terminal-command\"\n                  class=\"text-foreground placeholder:text-muted-foreground flex-1 bg-transparent text-xs focus-visible:outline-none\"\n                />\n                <button ui-button size=\"sm\" type=\"submit\" class=\"h-7 gap-1 px-2.5 text-xs\">\n                  <span>Run</span>\n                  <lucide-icon [img]=\"ArrowRight\" class=\"size-3\" />\n                </button>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n  `,\n})\nexport class UiHeroAsciiTerminalStreamComponent {\n  protected readonly ArrowRight = ArrowRight\n  protected readonly Terminal = Terminal\n\n  protected readonly asciiBanner = ASCII_BANNER\n  protected readonly commandChips = quickCommands\n\n  @Input() title = 'Deterministic UI engineering stream for technical operators.'\n  @Input() description =\n    'Inspect build outputs, verify zero-dependency bundle telemetry, and stream component ASTs in real time with hardware precision.'\n  @Input('class') className?: string\n\n  readonly terminalLogs = signal<string[]>([...initialLogs])\n  readonly isRunning = signal(false)\n  protected inputCommand = ''\n\n  private runTimer: ReturnType<typeof setTimeout> | undefined\n\n  constructor() {\n    inject(DestroyRef).onDestroy(() => clearTimeout(this.runTimer))\n  }\n\n  get rootClass(): string {\n    return cn('bg-background relative overflow-hidden py-16 sm:py-24', this.className)\n  }\n\n  logClass(log: string): string {\n    return cn(\n      'leading-relaxed',\n      log.startsWith('$')\n        ? 'text-primary font-bold'\n        : log.includes('PASS') || log.includes('OKLCH')\n          ? 'text-success'\n          : 'text-muted-foreground',\n    )\n  }\n\n  onSubmit(event: SubmitEvent): void {\n    event.preventDefault()\n    this.runCommand(this.inputCommand)\n  }\n\n  runCommand(cmd: string): void {\n    const cleanCmd = cmd.trim().toLowerCase()\n    if (!cleanCmd) return\n\n    this.terminalLogs.update((prev) => [...prev, `$ ${cleanCmd}`])\n    this.isRunning.set(true)\n\n    clearTimeout(this.runTimer)\n    this.runTimer = setTimeout(() => {\n      if (cleanCmd === 'clear') {\n        this.terminalLogs.set(['TERMINAL: Buffer cleared.'])\n      } else if (cleanCmd === 'bench') {\n        this.terminalLogs.update((prev) => [\n          ...prev,\n          'BENCHMARK: Button (1.1kb) | Modal (2.8kb) | DataGrid (4.2kb)',\n          'RESULT: 100% Tree-shaken bundle efficiency.',\n        ])\n      } else if (cleanCmd === 'parity') {\n        this.terminalLogs.update((prev) => [\n          ...prev,\n          'PARITY: 31 variant tokens evaluated across Vue & React.',\n          'STATUS: [PASS] Zero framework divergence detected.',\n        ])\n      } else if (cleanCmd === 'tree') {\n        this.terminalLogs.update((prev) => [\n          ...prev,\n          'TREE: packages/registry-vue (471) <-> packages/registry-react (471)',\n        ])\n      } else {\n        this.terminalLogs.update((prev) => [...prev, `EXEC: Command '${cleanCmd}' executed with exit code 0.`])\n      }\n      this.isRunning.set(false)\n    }, 400)\n\n    this.inputCommand = ''\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/hero-ascii-terminal-stream/hero-ascii-terminal-stream.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/hero-ascii-terminal-stream/index.ts",
      "content": "export {\n  UiHeroAsciiTerminalStreamComponent,\n  type HeroAsciiTerminalStreamProps,\n} from './hero-ascii-terminal-stream.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/hero-ascii-terminal-stream/index.ts"
    }
  ],
  "dependencies": [
    "lucide-angular"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/angular/button.json",
    "https://uipkge.dev/r/angular/card.json"
  ],
  "description": "Retro-futuristic ASCII terminal stream hero section with command runner and AST telemetry logs.",
  "categories": [
    "hero",
    "marketing"
  ],
  "deprecated": true,
  "replacedBy": "hero"
}