{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "hero-typing-command-center",
  "title": "Hero Typing Command Center",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/hero-typing-command-center/hero-typing-command-center.component.ts",
      "content": "// Keyboard command-palette hero: searchable action list with category badges,\n// shortcut kbd hints, hover selection and an executed-action status footer.\n// Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, Input, computed, signal } from '@angular/core'\nimport {\n  Check,\n  Command,\n  CornerDownLeft,\n  FileCode,\n  FolderGit2,\n  Layers,\n  LucideAngularModule,\n  Palette,\n  Search,\n  Zap,\n  type LucideIconData,\n} from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiBadgeComponent } from '@/ui/badge/badge.component'\nimport { UiCardComponent, UiCardContentComponent } from '@/ui/card/card.component'\n\nexport interface HeroTypingCommandAction {\n  id: string\n  title: string\n  category: 'Components' | 'Themes' | 'Git' | 'Workflows'\n  shortcut: string[]\n  icon: LucideIconData\n  description: string\n  status: string\n}\n\nconst actions: HeroTypingCommandAction[] = [\n  {\n    id: 'add-pdp',\n    title: 'Insert Product Detail Page',\n    category: 'Components',\n    shortcut: ['⌘', 'I', 'P'],\n    icon: Layers,\n    description: 'Adds flagship unbundled PDP with gallery, reviews & buy box',\n    status: 'Ready to inject',\n  },\n  {\n    id: 'toggle-dark',\n    title: 'Toggle High-Contrast Dark Theme',\n    category: 'Themes',\n    shortcut: ['⌘', 'T'],\n    icon: Palette,\n    description: 'Switches active OKLCH tokens to studio obsidian mode',\n    status: 'Instant update',\n  },\n  {\n    id: 'git-branch',\n    title: 'Checkout Release Branch: v2.4.0',\n    category: 'Git',\n    shortcut: ['⌘', 'G', 'B'],\n    icon: FolderGit2,\n    description: 'Switches workspace to staging pipeline branch',\n    status: 'Clean working tree',\n  },\n  {\n    id: 'sync-registry',\n    title: 'Synchronize Dual-Framework ASTs',\n    category: 'Workflows',\n    shortcut: ['⌘', 'S', 'Y'],\n    icon: FileCode,\n    description: 'Generates parity manifests between Vue 3.5 and React 19',\n    status: 'Verified 100% parity',\n  },\n  {\n    id: 'run-audit',\n    title: 'Trigger Automated Craft Audit',\n    category: 'Workflows',\n    shortcut: ['⌘', 'A', 'U'],\n    icon: Zap,\n    description: 'Validates semantic scales, AA contrast and eliminates design slop',\n    status: 'Zero regressions',\n  },\n]\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-hero-typing-command-center, [ui-hero-typing-command-center]',\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, UiCardComponent, UiCardContentComponent],\n  template: `\n    <section data-slot=\"hero-typing-command-center\" [class]=\"rootClass\">\n      <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n        <div class=\"grid grid-cols-1 gap-12 lg:grid-cols-12 lg:items-center\">\n          <!-- Left: Headline & Key Advantages (5 Cols) -->\n          <div class=\"space-y-6 lg:col-span-5\">\n            <div\n              class=\"border-border/80 bg-secondary/60 text-foreground inline-flex items-center gap-2 rounded-full border px-3.5 py-1 text-xs font-medium shadow-2xs\"\n            >\n              <lucide-icon [img]=\"Command\" class=\"text-primary size-3.5\" />\n              <span>Keyboard Ergonomics &bull; Zero Latency</span>\n            </div>\n\n            <h1 class=\"text-foreground text-3xl font-bold tracking-tight sm:text-4xl lg:text-5xl\">\n              {{ title }}\n            </h1>\n\n            <p class=\"text-muted-foreground text-base sm:text-lg\">\n              {{ description }}\n            </p>\n\n            <!-- Hotkey Highlights Grid -->\n            <div class=\"border-border bg-muted/20 grid grid-cols-2 gap-3 rounded-xl border p-4 text-xs\">\n              <div class=\"space-y-1\">\n                <div class=\"text-muted-foreground font-medium\">Global Trigger</div>\n                <div class=\"flex items-center gap-1 font-mono\">\n                  <kbd class=\"border-border bg-card rounded border px-1.5 py-0.5 shadow-2xs\">⌘</kbd>\n                  <kbd class=\"border-border bg-card rounded border px-1.5 py-0.5 shadow-2xs\">K</kbd>\n                </div>\n              </div>\n              <div class=\"space-y-1\">\n                <div class=\"text-muted-foreground font-medium\">Quick Insert</div>\n                <div class=\"flex items-center gap-1 font-mono\">\n                  <kbd class=\"border-border bg-card rounded border px-1.5 py-0.5 shadow-2xs\">⌘</kbd>\n                  <kbd class=\"border-border bg-card rounded border px-1.5 py-0.5 shadow-2xs\">I</kbd>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <!-- Right: Interactive Command Palette Hub (7 Cols) -->\n          <div class=\"lg:col-span-7\">\n            <div ui-card class=\"border-border bg-card shadow-lg\">\n              <!-- Search Header -->\n              <div class=\"border-border flex items-center gap-3 border-b px-4 py-3\">\n                <lucide-icon [img]=\"Search\" class=\"text-muted-foreground size-4 shrink-0\" />\n                <input\n                  type=\"text\"\n                  placeholder=\"Type a command or search actions (e.g., 'insert', 'git', 'theme')...\"\n                  aria-label=\"Search commands\"\n                  class=\"placeholder:text-muted-foreground text-foreground flex-1 bg-transparent text-sm outline-none\"\n                  [value]=\"searchQuery()\"\n                  (input)=\"searchQuery.set($any($event.target).value)\"\n                />\n                <div class=\"text-muted-foreground flex items-center gap-1 font-mono text-xs\">\n                  <kbd class=\"border-border bg-muted rounded border px-1.5 py-0.5 text-xs\">ESC</kbd>\n                </div>\n              </div>\n\n              <!-- Command List -->\n              <div ui-card-content class=\"space-y-1 p-2\">\n                @for (action of filteredActions(); track action.id; let idx = $index) {\n                  <button\n                    type=\"button\"\n                    [class]=\"actionClass(idx)\"\n                    (mouseenter)=\"selectedIndex.set(idx)\"\n                    (click)=\"execute(action)\"\n                  >\n                    <div class=\"flex min-w-0 items-center gap-3\">\n                      <div\n                        class=\"border-border bg-background flex size-8 shrink-0 items-center justify-center rounded-md border shadow-2xs\"\n                      >\n                        <lucide-icon [img]=\"action.icon\" class=\"text-primary size-4\" />\n                      </div>\n                      <div class=\"min-w-0 space-y-0.5\">\n                        <div class=\"flex items-center gap-2\">\n                          <span class=\"truncate text-xs font-semibold\">{{ action.title }}</span>\n                          <span ui-badge variant=\"outline\" class=\"h-4.5 px-1.5 text-xs\">{{ action.category }}</span>\n                        </div>\n                        <p class=\"text-muted-foreground truncate text-xs\">{{ action.description }}</p>\n                      </div>\n                    </div>\n\n                    <!-- Shortcut Badge Group -->\n                    <div class=\"ml-3 flex shrink-0 items-center gap-1 font-mono text-xs\">\n                      @for (key of action.shortcut; track key) {\n                        <kbd class=\"border-border bg-background rounded border px-1.5 py-0.5 text-xs shadow-2xs\">\n                          {{ key }}\n                        </kbd>\n                      }\n                    </div>\n                  </button>\n                }\n              </div>\n\n              <!-- Status Footer -->\n              <div class=\"border-border bg-muted/30 flex items-center justify-between border-t px-4 py-2.5 text-xs\">\n                <div class=\"text-muted-foreground flex items-center gap-2\">\n                  <lucide-icon [img]=\"CornerDownLeft\" class=\"size-3.5\" />\n                  <span>Press <strong>Enter</strong> to run</span>\n                </div>\n                @if (executedAction()) {\n                  <div class=\"text-success flex items-center gap-1.5 font-semibold\">\n                    <lucide-icon [img]=\"Check\" class=\"size-3.5\" />\n                    <span>Executed: {{ executedAction()!.title }}</span>\n                  </div>\n                } @else {\n                  <div class=\"text-muted-foreground font-mono text-xs\">\n                    {{ filteredActions().length }} actions available\n                  </div>\n                }\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n  `,\n})\nexport class UiHeroTypingCommandCenterComponent {\n  protected readonly Check = Check\n  protected readonly Command = Command\n  protected readonly CornerDownLeft = CornerDownLeft\n  protected readonly Search = Search\n\n  @Input() title = 'Execute workflows at the speed of thought with keyboard command palette.'\n  @Input() description =\n    'Instant component insertion, theme switching, git branches, and automated deployment pipelines driven by zero-latency hotkeys.'\n  @Input('class') className?: string\n\n  readonly searchQuery = signal('')\n  readonly selectedIndex = signal(0)\n  readonly executedAction = signal<HeroTypingCommandAction | null>(null)\n\n  private executeTimer: ReturnType<typeof setTimeout> | undefined\n\n  readonly filteredActions = computed(() => {\n    const q = this.searchQuery().trim().toLowerCase()\n    if (!q) return actions\n    return actions.filter(\n      (a) =>\n        a.title.toLowerCase().includes(q) ||\n        a.category.toLowerCase().includes(q) ||\n        a.description.toLowerCase().includes(q),\n    )\n  })\n\n  get rootClass(): string {\n    return cn('bg-background relative overflow-hidden py-16 sm:py-24 lg:py-28', this.className)\n  }\n\n  actionClass(idx: number): string {\n    return cn(\n      'group flex w-full items-center justify-between rounded-lg px-3 py-2.5 text-left transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none',\n      this.selectedIndex() === idx\n        ? 'border-primary/30 bg-accent text-accent-foreground border'\n        : 'hover:bg-muted/50 text-foreground border border-transparent',\n    )\n  }\n\n  execute(action: HeroTypingCommandAction): void {\n    this.executedAction.set(action)\n    clearTimeout(this.executeTimer)\n    this.executeTimer = setTimeout(() => this.executedAction.set(null), 2500)\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/hero-typing-command-center/hero-typing-command-center.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/hero-typing-command-center/index.ts",
      "content": "export {\n  UiHeroTypingCommandCenterComponent,\n  type HeroTypingCommandAction,\n} from './hero-typing-command-center.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/hero-typing-command-center/index.ts"
    }
  ],
  "dependencies": [
    "lucide-angular"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/angular/badge.json",
    "https://uipkge.dev/r/angular/card.json"
  ],
  "description": "Interactive CLI command center hero with animated execution simulator, output logs, and quick workflow presets.",
  "categories": [
    "hero",
    "marketing"
  ],
  "deprecated": true,
  "replacedBy": "hero"
}