{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "hero-3d-tilt-interactive-canvas",
  "title": "Hero 3d Tilt Interactive Canvas",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/hero-3d-tilt-interactive-canvas/hero-3d-tilt-interactive-canvas.component.ts",
      "content": "// Hardware-accelerated 3D perspective hero with dynamic specular reflection and\n// layered z-depth cards. Cursor position drives pitch/yaw rotation and glare.\n// Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild, signal } from '@angular/core'\nimport { ArrowRight, Code2, Cpu, Layers, LucideAngularModule, MousePointerClick, Zap } from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiBadgeComponent } from '@/ui/badge/badge.component'\nimport { UiButtonComponent } from '@/ui/button/button.component'\n\nexport interface Hero3dTiltInteractiveCanvasProps {\n  title?: string\n  description?: string\n  primaryActionLabel?: string\n  secondaryActionLabel?: string\n}\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-hero-3d-tilt-interactive-canvas, [ui-hero-3d-tilt-interactive-canvas]',\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],\n  template: `\n    <section data-slot=\"hero-3d-tilt-interactive-canvas\" [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=\"#3d-spatial\"\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]=\"Layers\" class=\"text-primary size-3.5\" />\n            <span>Spatial 3D Design Engineering</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          <div class=\"flex flex-wrap items-center justify-center gap-3 pt-2\">\n            <button ui-button size=\"lg\" class=\"gap-2 shadow-xs\">\n              <span>{{ primaryActionLabel }}</span>\n              <lucide-icon [img]=\"ArrowRight\" class=\"size-4\" />\n            </button>\n            <button ui-button variant=\"outline\" size=\"lg\" class=\"gap-2\">\n              <lucide-icon [img]=\"Code2\" class=\"size-4\" />\n              <span>{{ secondaryActionLabel }}</span>\n            </button>\n          </div>\n        </div>\n\n        <!-- 3D Perspective Stage Container -->\n        <div class=\"mt-14 flex flex-col items-center justify-center [perspective:1200px]\">\n          <div\n            #card\n            [style.transform]=\"'rotateX(' + rotateX() + 'deg) rotateY(' + rotateY() + 'deg)'\"\n            [style.transition]=\"\n              isHovering() ? 'transform 100ms ease-out' : 'transform 500ms cubic-bezier(0.16, 1, 0.3, 1)'\n            \"\n            class=\"border-border bg-card relative w-full max-w-2xl cursor-crosshair overflow-hidden rounded-2xl border p-8 shadow-xl select-none [transform-style:preserve-3d]\"\n            (mousemove)=\"handleMouseMove($event)\"\n            (mouseenter)=\"handleMouseEnter()\"\n            (mouseleave)=\"handleMouseLeave()\"\n          >\n            <!-- Dynamic Specular Reflection / Glare Gradient -->\n            <div\n              [style.background]=\"\n                'radial-gradient(circle at ' +\n                glareX() +\n                '% ' +\n                glareY() +\n                '%, rgba(255,255,255,0.12) 0%, transparent 60%)'\n              \"\n              class=\"pointer-events-none absolute inset-0 transition-opacity duration-300\"\n              [class.opacity-100]=\"isHovering()\"\n              [class.opacity-0]=\"!isHovering()\"\n            ></div>\n\n            <!-- Layer 1: Base Grid Info -->\n            <div class=\"border-border flex items-center justify-between border-b pb-4\">\n              <div class=\"flex items-center gap-2\">\n                <lucide-icon [img]=\"Layers\" class=\"text-primary size-4\" />\n                <span class=\"text-foreground text-sm font-bold\">Spatial Component Viewport</span>\n              </div>\n              <span ui-badge variant=\"outline\" class=\"border-border text-muted-foreground font-mono text-xs\">\n                Pitch: {{ rotateX() }}&deg; &bull; Yaw: {{ rotateY() }}&deg;\n              </span>\n            </div>\n\n            <!-- Layer 2: Floating 3D Cards & Primitives (Preserve-3d + translateZ) -->\n            <div class=\"mt-8 grid grid-cols-1 gap-4 sm:grid-cols-2\">\n              <!-- Floating Badge Card 1 -->\n              <div\n                style=\"transform: translateZ(35px)\"\n                class=\"border-border/90 bg-muted/40 space-y-2 rounded-xl border p-4 shadow-md transition-transform\"\n              >\n                <div class=\"flex items-center gap-2\">\n                  <lucide-icon [img]=\"Cpu\" class=\"text-primary size-4\" />\n                  <span class=\"text-foreground text-xs font-bold\">GPU Accelerated Matrix</span>\n                </div>\n                <p class=\"text-muted-foreground text-xs leading-relaxed\">\n                  Zero JavaScript bundle runtime. Calculated via pure CSS 3D matrix transforms.\n                </p>\n              </div>\n\n              <!-- Floating Badge Card 2 -->\n              <div\n                style=\"transform: translateZ(50px)\"\n                class=\"border-primary/30 bg-primary/5 space-y-2 rounded-xl border p-4 shadow-lg transition-transform\"\n              >\n                <div class=\"flex items-center gap-2\">\n                  <lucide-icon [img]=\"Zap\" class=\"text-success size-4\" />\n                  <span class=\"text-foreground text-xs font-bold\">Specular Ray Diffusion</span>\n                </div>\n                <p class=\"text-muted-foreground text-xs leading-relaxed\">\n                  Dynamic light reflection calculates azimuth angles relative to mouse coordinates.\n                </p>\n              </div>\n            </div>\n\n            <!-- Bottom Telemetry Bar -->\n            <div\n              style=\"transform: translateZ(25px)\"\n              class=\"border-border/80 bg-background/90 mt-6 flex items-center justify-between rounded-lg border p-3 text-xs\"\n            >\n              <div class=\"text-muted-foreground flex items-center gap-2\">\n                <lucide-icon [img]=\"MousePointerClick\" class=\"text-primary size-3.5\" />\n                <span>Hover and move cursor to orient viewport</span>\n              </div>\n              <span class=\"text-foreground font-mono text-xs font-bold\">\n                {{ isHovering() ? 'Tracking Live' : 'Hover to Orbit' }}\n              </span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n  `,\n})\nexport class UiHero3dTiltInteractiveCanvasComponent {\n  protected readonly ArrowRight = ArrowRight\n  protected readonly Code2 = Code2\n  protected readonly Cpu = Cpu\n  protected readonly Layers = Layers\n  protected readonly MousePointerClick = MousePointerClick\n  protected readonly Zap = Zap\n\n  @Input() title = 'Fluid 3D Spatial Architecture rendered in pure CSS.'\n  @Input() description =\n    'Experience zero-latency hardware-accelerated 3D perspective transforms with dynamic specular reflections and layered z-depth primitives.'\n  @Input() primaryActionLabel = 'Explore 3D Primitives'\n  @Input() secondaryActionLabel = 'Copy CSS Matrix Code'\n  @Input('class') className?: string\n\n  @ViewChild('card') cardRef?: ElementRef<HTMLDivElement>\n\n  readonly rotateX = signal(0)\n  readonly rotateY = signal(0)\n  readonly glareX = signal(50)\n  readonly glareY = signal(50)\n  readonly isHovering = signal(false)\n\n  get rootClass(): string {\n    return cn('bg-background relative overflow-hidden py-16 sm:py-24', this.className)\n  }\n\n  handleMouseMove(event: MouseEvent): void {\n    const el = this.cardRef?.nativeElement\n    if (!el) return\n    const rect = el.getBoundingClientRect()\n    const x = event.clientX - rect.left\n    const y = event.clientY - rect.top\n\n    const centerX = rect.width / 2\n    const centerY = rect.height / 2\n\n    // Limit max rotation to +/- 14 degrees\n    this.rotateY.set(Number(((x - centerX) / (centerX / 14)).toFixed(2)))\n    this.rotateX.set(Number((-(y - centerY) / (centerY / 14)).toFixed(2)))\n\n    this.glareX.set(Number(((x / rect.width) * 100).toFixed(1)))\n    this.glareY.set(Number(((y / rect.height) * 100).toFixed(1)))\n  }\n\n  handleMouseEnter(): void {\n    this.isHovering.set(true)\n  }\n\n  handleMouseLeave(): void {\n    this.isHovering.set(false)\n    this.rotateX.set(0)\n    this.rotateY.set(0)\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/hero-3d-tilt-interactive-canvas/hero-3d-tilt-interactive-canvas.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/hero-3d-tilt-interactive-canvas/index.ts",
      "content": "export {\n  UiHero3dTiltInteractiveCanvasComponent,\n  type Hero3dTiltInteractiveCanvasProps,\n} from './hero-3d-tilt-interactive-canvas.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/hero-3d-tilt-interactive-canvas/index.ts"
    }
  ],
  "dependencies": [
    "lucide-angular"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/angular/badge.json",
    "https://uipkge.dev/r/angular/button.json"
  ],
  "description": "Hero section with hardware-accelerated 3D tilt perspective card, specular light glare, and multi-layer z-depth primitives.",
  "categories": [
    "hero",
    "marketing"
  ],
  "deprecated": true,
  "replacedBy": "hero"
}