{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "features-01",
  "title": "Tabbed Feature Matrix",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/features-01/features-01.component.ts",
      "content": "// Interactive enterprise product feature workbench with live module simulations,\n// dynamic directory filters, real-time payroll calculations, continuous SOC 2\n// compliance verification, and a TypeScript API code viewer. Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, DestroyRef, Input, computed, inject, signal } from '@angular/core'\nimport {\n  ArrowRight,\n  BarChart3,\n  Bot,\n  Check,\n  CheckCircle2,\n  ChevronRight,\n  Code2,\n  Copy,\n  Globe,\n  Layers,\n  LucideAngularModule,\n  RefreshCw,\n  Search,\n  ShieldCheck,\n  Users,\n  Wallet,\n  type LucideIconData,\n} from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiBadgeComponent } from '@/ui/badge/badge.component'\nimport { UiButtonComponent } from '@/ui/button/button.component'\nimport {\n  UiCardComponent,\n  UiCardContentComponent,\n  UiCardFooterComponent,\n  UiCardHeaderComponent,\n} from '@/ui/card/card.component'\nimport { UiInputComponent } from '@/ui/input/input.component'\nimport { UiSeparatorComponent } from '@/ui/separator/separator.component'\n\nexport type FeatureCategory = 'core' | 'dx' | 'security' | 'ai'\nexport type FeatureFilter = 'all' | FeatureCategory\nexport type PreviewType = 'directory' | 'payroll' | 'performance' | 'compliance' | 'api' | 'copilot'\n\nexport interface FeatureModule {\n  id: string\n  title: string\n  category: FeatureCategory\n  badge: string\n  description: string\n  icon: LucideIconData\n  metrics: { label: string; value: string; trend: string }[]\n  previewType: PreviewType\n}\n\nconst features: FeatureModule[] = [\n  {\n    id: 'directory',\n    title: 'Global Employee Directory',\n    category: 'core',\n    badge: 'Real-time Sync',\n    description:\n      'Single source of truth for global teams, reporting hierarchies, custom attributes, and automated SCIM provisioning.',\n    icon: Users,\n    metrics: [\n      { label: 'Sync Latency', value: '<12ms', trend: 'P99 Edge' },\n      { label: 'SCIM Connectors', value: '24+', trend: 'Okta/Google' },\n      { label: 'Export Formats', value: 'JSON/CSV', trend: 'Bi-directional' },\n    ],\n    previewType: 'directory',\n  },\n  {\n    id: 'payroll',\n    title: 'Multi-Currency Global Payroll',\n    category: 'core',\n    badge: 'Automated Tax',\n    description:\n      'Instant payroll calculation across 140+ countries with automated localized tax withholding, statutory benefits, and direct FX routing.',\n    icon: Wallet,\n    metrics: [\n      { label: 'Supported Currencies', value: '140+', trend: 'Live FX' },\n      { label: 'Settlement Time', value: 'Instant', trend: 'SEPA/FedNow' },\n      { label: 'Tax Accuracy', value: '100%', trend: 'Statutory Verified' },\n    ],\n    previewType: 'payroll',\n  },\n  {\n    id: 'performance',\n    title: 'OKR & Continuous Reviews',\n    category: 'dx',\n    badge: '360 Calibration',\n    description:\n      'Transparent objective tracking, real-time 1:1 syncs, and peer review cycles tied directly to engineering and business milestones.',\n    icon: BarChart3,\n    metrics: [\n      { label: 'Cycle Completion', value: '98.4%', trend: '+14% vs avg' },\n      { label: 'Review Latency', value: '2.1 days', trend: '-40% faster' },\n      { label: 'Goal Alignment', value: '94%', trend: 'Company-wide' },\n    ],\n    previewType: 'performance',\n  },\n  {\n    id: 'compliance',\n    title: 'SOC 2 & Continuous Compliance',\n    category: 'security',\n    badge: 'Zero Trust',\n    description:\n      'Continuous automated evidence collection across AWS, GCP, Cloudflare, and GitHub with automated auditor-ready export bundles.',\n    icon: ShieldCheck,\n    metrics: [\n      { label: 'Continuous Tests', value: '142 / 142', trend: '100% Pass' },\n      { label: 'Evidence Collection', value: 'Automated', trend: 'Every 5m' },\n      { label: 'Standards', value: 'SOC2 / HIPAA', trend: 'ISO 27001' },\n    ],\n    previewType: 'compliance',\n  },\n  {\n    id: 'api',\n    title: 'REST & GraphQL Developer APIs',\n    category: 'dx',\n    badge: 'Type-Safe SDKs',\n    description:\n      'Fully typed OpenAPI 3.1 & TypeScript SDKs with sub-millisecond edge response times, webhooks, and granular scoped API keys.',\n    icon: Code2,\n    metrics: [\n      { label: 'API Median Latency', value: '18ms', trend: 'Global Edge' },\n      { label: 'Webhook Delivery', value: '99.98%', trend: 'Automatic Retry' },\n      { label: 'Rate Limit', value: '10k req/s', trend: 'Configurable' },\n    ],\n    previewType: 'api',\n  },\n  {\n    id: 'copilot',\n    title: 'Autonomous People Ops Copilot',\n    category: 'ai',\n    badge: 'Agentic AI',\n    description:\n      'Natural language queries over workforce data, intelligent anomaly detection in compensation bands, and automated policy drafts.',\n    icon: Bot,\n    metrics: [\n      { label: 'Inference Speed', value: '94 tps', trend: 'Claude 3.5' },\n      { label: 'Accuracy Score', value: '99.6%', trend: 'RAG Grounded' },\n      { label: 'Task Automation', value: '78%', trend: 'Self-serve' },\n    ],\n    previewType: 'copilot',\n  },\n]\n\nconst categories: { id: FeatureFilter; label: string }[] = [\n  { id: 'all', label: 'All Modules' },\n  { id: 'core', label: 'Core Platform' },\n  { id: 'dx', label: 'Developer DX' },\n  { id: 'security', label: 'Security' },\n  { id: 'ai', label: 'Agentic AI' },\n]\n\ninterface Employee {\n  id: string\n  name: string\n  role: string\n  team: string\n  status: string\n  location: string\n}\n\nconst employees: Employee[] = [\n  {\n    id: '1',\n    name: 'Sophia Chen',\n    role: 'Staff Design Engineer',\n    team: 'Design Systems',\n    status: 'Active',\n    location: 'San Francisco, CA',\n  },\n  {\n    id: '2',\n    name: 'Marcus Vance',\n    role: 'Principal Distributed Systems',\n    team: 'Core Infrastructure',\n    status: 'Active',\n    location: 'London, UK',\n  },\n  {\n    id: '3',\n    name: 'Elena Rostova',\n    role: 'Lead Security Architect',\n    team: 'SecOps',\n    status: 'In Review',\n    location: 'Berlin, DE',\n  },\n  {\n    id: '4',\n    name: 'Devon Taylor',\n    role: 'Head of Product',\n    team: 'Enterprise Suite',\n    status: 'Active',\n    location: 'New York, NY',\n  },\n]\n\nconst teamOptions = ['All Roles', 'Design Systems', 'Core Infrastructure', 'SecOps', 'Enterprise Suite']\n\nconst complianceControls = [\n  { name: 'TLS 1.3 Strict Transport Security', framework: 'SOC 2 / ISO 27001', passed: true, score: '100%' },\n  { name: 'Continuous Automated Evidence Sync', framework: 'HIPAA Security Rule', passed: true, score: '99.8%' },\n  { name: 'Hardware Security Keys MFA Enforced', framework: 'Zero Trust Baseline', passed: true, score: '100%' },\n  { name: 'Automated Ephemeral DB Credential TTL', framework: 'SOC 2 CC6.1', passed: true, score: '99.4%' },\n]\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-features-01, [ui-features-01]',\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: [\n    LucideAngularModule,\n    UiBadgeComponent,\n    UiButtonComponent,\n    UiCardComponent,\n    UiCardContentComponent,\n    UiCardFooterComponent,\n    UiCardHeaderComponent,\n    UiInputComponent,\n    UiSeparatorComponent,\n  ],\n  template: `\n    <section data-slot=\"features-01\" [class]=\"rootClass\">\n      <div class=\"mx-auto max-w-7xl space-y-12 px-4 sm:px-6 lg:px-8\">\n        <!-- Section Header -->\n        <div class=\"flex flex-col gap-6 md:flex-row md:items-end md:justify-between\">\n          <div class=\"max-w-2xl space-y-3\">\n            <div class=\"inline-flex items-center gap-2\">\n              <span\n                ui-badge\n                variant=\"outline\"\n                class=\"border-primary/30 text-primary bg-primary/5 gap-1.5 px-2.5 py-1 font-mono text-xs tracking-wide uppercase\"\n              >\n                <lucide-icon [img]=\"Layers\" class=\"size-3.5\" />\n                Unified Architecture\n              </span>\n              <span class=\"text-muted-foreground font-mono text-xs\">v4.2 Enterprise Release</span>\n            </div>\n            <h2 class=\"text-foreground text-3xl font-bold tracking-tight sm:text-4xl\">\n              Engineered for High-Velocity Teams.\n            </h2>\n            <p class=\"text-muted-foreground text-base leading-relaxed sm:text-lg\">\n              Six modular, composable building blocks that directly interconnect without third-party glue code.\n            </p>\n          </div>\n\n          <!-- Category Filters -->\n          <div class=\"bg-muted/60 border-border flex flex-wrap items-center gap-1.5 rounded-lg border p-1\">\n            @for (cat of allCategories; track cat.id) {\n              <button type=\"button\" [class]=\"filterButtonClass(cat.id)\" (click)=\"setActiveCategory(cat.id)\">\n                {{ cat.label }}\n              </button>\n            }\n          </div>\n        </div>\n\n        <!-- Main Interactive Workbench Layout -->\n        <div class=\"grid grid-cols-1 items-start gap-8 lg:grid-cols-12\">\n          <!-- Feature Cards Navigation (5 Cols) -->\n          <div class=\"space-y-3 lg:col-span-5\">\n            @for (item of filteredFeatures(); track item.id) {\n              <div [class]=\"featureCardClass(item.id)\" (click)=\"selectFeature(item.id)\">\n                <div class=\"flex items-start justify-between gap-3\">\n                  <div class=\"flex items-center gap-3\">\n                    <div [class]=\"featureIconClass(item.id)\">\n                      <lucide-icon [img]=\"item.icon\" class=\"size-4.5\" />\n                    </div>\n                    <div>\n                      <div class=\"flex items-center gap-2\">\n                        <h3 class=\"text-foreground text-sm font-semibold tracking-tight\">{{ item.title }}</h3>\n                        <span ui-badge variant=\"secondary\" class=\"px-1.5 py-0 text-xs font-normal\">\n                          {{ item.badge }}\n                        </span>\n                      </div>\n                      <p class=\"text-muted-foreground mt-0.5 line-clamp-1 text-xs\">\n                        {{ item.description }}\n                      </p>\n                    </div>\n                  </div>\n                  <lucide-icon [img]=\"ChevronRight\" [class]=\"chevronClass(item.id)\" />\n                </div>\n\n                <!-- Key metrics row in card -->\n                @if (selectedFeatureId() === item.id) {\n                  <div class=\"border-border/60 mt-4 grid grid-cols-3 gap-2 border-t pt-3\">\n                    @for (m of item.metrics; track m.label) {\n                      <div class=\"space-y-0.5\">\n                        <p class=\"text-muted-foreground font-mono text-xs tracking-wider uppercase\">{{ m.label }}</p>\n                        <div class=\"flex items-baseline gap-1\">\n                          <span class=\"text-foreground text-xs font-semibold\">{{ m.value }}</span>\n                          <span class=\"text-success font-mono text-xs\">{{ m.trend }}</span>\n                        </div>\n                      </div>\n                    }\n                  </div>\n                }\n              </div>\n            }\n          </div>\n\n          <!-- Live Interactive Simulation Canvas (7 Cols) -->\n          <div class=\"lg:col-span-7\">\n            <div ui-card class=\"bg-card border-border sticky top-6 overflow-hidden shadow-sm\">\n              <!-- Workbench Header Bar -->\n              <div\n                ui-card-header\n                class=\"border-border bg-muted/20 flex-row items-center justify-between space-y-0 border-b px-5 py-3.5\"\n              >\n                <div class=\"flex items-center gap-2.5\">\n                  <div class=\"bg-success flex size-2 rounded-full\"></div>\n                  <span class=\"text-muted-foreground font-mono text-xs tracking-wider uppercase\"\n                    >Interactive Simulation</span\n                  >\n                  <ui-separator orientation=\"vertical\" class=\"h-3.5\" />\n                  <span class=\"text-foreground text-xs font-semibold\">{{ activeFeature().title }}</span>\n                </div>\n                <div class=\"flex items-center gap-2\">\n                  <button\n                    ui-button\n                    variant=\"outline\"\n                    size=\"sm\"\n                    class=\"h-7 gap-1.5 px-2.5 font-mono text-xs\"\n                    (click)=\"copySnippet()\"\n                  >\n                    @if (copied()) {\n                      <lucide-icon [img]=\"Check\" class=\"text-success size-3\" />\n                    } @else {\n                      <lucide-icon [img]=\"Copy\" class=\"size-3\" />\n                    }\n                    <span>{{ copied() ? 'Copied' : 'Schema JSON' }}</span>\n                  </button>\n                </div>\n              </div>\n\n              <div ui-card-content class=\"space-y-6 p-6\">\n                <!-- Simulation 1: Global Employee Directory -->\n                @if (activeFeature().previewType === 'directory') {\n                  <div class=\"space-y-4\">\n                    <div class=\"flex flex-col items-center justify-between gap-3 sm:flex-row\">\n                      <div class=\"relative w-full sm:w-64\">\n                        <lucide-icon [img]=\"Search\" class=\"text-muted-foreground absolute top-2.5 left-2.5 size-3.5\" />\n                        <ui-input\n                          [value]=\"searchQuery()\"\n                          (valueChange)=\"searchQuery.set($event)\"\n                          placeholder=\"Search 1,420 employees...\"\n                          class=\"h-8 pl-8 font-sans text-xs\"\n                        />\n                      </div>\n                      <div class=\"flex items-center gap-2 self-end sm:self-auto\">\n                        <span class=\"text-muted-foreground font-mono text-xs\">Filter Team:</span>\n                        <select\n                          [value]=\"selectedTeam()\"\n                          (change)=\"selectedTeam.set($any($event.target).value)\"\n                          class=\"border-input bg-background text-foreground focus:ring-ring h-8 rounded-md border px-2 py-1 text-xs focus:ring-1 focus:outline-none\"\n                        >\n                          @for (team of allTeams; track team) {\n                            <option [value]=\"team\">\n                              {{ team === 'All Roles' ? 'All Teams' : team }}\n                            </option>\n                          }\n                        </select>\n                      </div>\n                    </div>\n\n                    <div class=\"border-border divide-border bg-background divide-y overflow-hidden rounded-lg border\">\n                      @for (emp of filteredEmployees(); track emp.id) {\n                        <div class=\"hover:bg-muted/40 flex items-center justify-between p-3 text-xs transition-colors\">\n                          <div class=\"flex items-center gap-3\">\n                            <div\n                              class=\"bg-primary/10 text-primary border-primary/20 flex size-8 items-center justify-center rounded-full border text-xs font-semibold\"\n                            >\n                              {{ initials(emp.name) }}\n                            </div>\n                            <div>\n                              <p class=\"text-foreground font-medium\">{{ emp.name }}</p>\n                              <p class=\"text-muted-foreground text-xs\">{{ emp.role }} · {{ emp.team }}</p>\n                            </div>\n                          </div>\n                          <div class=\"flex items-center gap-3\">\n                            <span class=\"text-muted-foreground hidden font-mono text-xs sm:inline-block\">{{\n                              emp.location\n                            }}</span>\n                            <span\n                              ui-badge\n                              variant=\"outline\"\n                              class=\"border-success/20 bg-success/10 text-success font-mono text-xs\"\n                            >\n                              {{ emp.status }}\n                            </span>\n                          </div>\n                        </div>\n                      }\n                    </div>\n                  </div>\n                }\n\n                <!-- Simulation 2: Multi-Currency Global Payroll -->\n                @if (activeFeature().previewType === 'payroll') {\n                  <div class=\"space-y-5\">\n                    <div class=\"grid grid-cols-3 gap-3\">\n                      <div class=\"border-border bg-muted/20 rounded-lg border p-3\">\n                        <p class=\"text-muted-foreground font-mono text-xs\">Gross Run</p>\n                        <p class=\"text-foreground mt-1 text-lg font-bold\">\\${{ grossAmount().toLocaleString() }}</p>\n                      </div>\n                      <div class=\"border-border bg-muted/20 rounded-lg border p-3\">\n                        <p class=\"text-muted-foreground font-mono text-xs\">Statutory Taxes</p>\n                        <p class=\"text-destructive mt-1 text-lg font-bold\">\n                          -\\${{ Math.round(estimatedDeductions()).toLocaleString() }}\n                        </p>\n                      </div>\n                      <div class=\"border-border border-success/20 bg-success/10 rounded-lg border p-3\">\n                        <p class=\"text-success font-mono text-xs\">Net Settlement</p>\n                        <p class=\"text-success mt-1 text-lg font-bold\">\n                          \\${{ Math.round(netPayout()).toLocaleString() }}\n                        </p>\n                      </div>\n                    </div>\n\n                    <div class=\"space-y-2\">\n                      <div class=\"flex justify-between text-xs\">\n                        <span class=\"text-muted-foreground\">Adjust Headcount (Employees: {{ headcount() }})</span>\n                        <span class=\"text-foreground font-mono\">\\${{ avgPerEmployee() }}/mo avg</span>\n                      </div>\n                      <input\n                        [value]=\"headcount()\"\n                        (input)=\"headcount.set($any($event.target).valueAsNumber || $any($event.target).value)\"\n                        type=\"range\"\n                        min=\"10\"\n                        max=\"150\"\n                        class=\"bg-muted accent-primary h-1.5 w-full cursor-pointer appearance-none rounded-lg\"\n                      />\n                    </div>\n\n                    <div\n                      class=\"border-border bg-background flex items-center justify-between rounded-lg border p-3 text-xs\"\n                    >\n                      <div class=\"flex items-center gap-2\">\n                        <lucide-icon [img]=\"Globe\" class=\"text-primary size-4\" />\n                        <span>Cross-border SEPA & FedNow Instant Payout Batch: Ready</span>\n                      </div>\n                      <span ui-badge variant=\"secondary\" class=\"font-mono text-xs\">Zero-FX Spread</span>\n                    </div>\n                  </div>\n                }\n\n                <!-- Simulation 3: SOC 2 & Compliance -->\n                @if (activeFeature().previewType === 'compliance') {\n                  <div class=\"space-y-4\">\n                    <div class=\"flex items-center justify-between text-xs\">\n                      <span class=\"text-foreground font-semibold\"\n                        >Continuous Automated Compliance Check (142 Controls)</span\n                      >\n                      <span\n                        ui-badge\n                        variant=\"outline\"\n                        class=\"border-success/20 bg-success/10 text-success font-mono text-xs\"\n                      >\n                        Audit Grade A+\n                      </span>\n                    </div>\n\n                    <div class=\"space-y-2.5\">\n                      @for (ctrl of allControls; track ctrl.name) {\n                        <div\n                          class=\"border-border bg-background flex items-center justify-between rounded-lg border p-3 text-xs\"\n                        >\n                          <div class=\"flex items-center gap-2.5\">\n                            <lucide-icon [img]=\"CheckCircle2\" class=\"text-success size-4 shrink-0\" />\n                            <div>\n                              <p class=\"text-foreground font-medium\">{{ ctrl.name }}</p>\n                              <p class=\"text-muted-foreground font-mono text-xs\">{{ ctrl.framework }}</p>\n                            </div>\n                          </div>\n                          <span class=\"text-success font-mono text-xs font-semibold\">{{ ctrl.score }}</span>\n                        </div>\n                      }\n                    </div>\n                  </div>\n                }\n\n                <!-- Simulation 4: Developer APIs & SDKs -->\n                @if (activeFeature().previewType === 'api') {\n                  <div class=\"space-y-4\">\n                    <div class=\"flex items-center justify-between\">\n                      <span class=\"text-muted-foreground font-mono text-xs\"\n                        >curl --request POST https://api.uipkge.dev/v1/workforce</span\n                      >\n                      <span ui-badge variant=\"secondary\" class=\"font-mono text-xs\">TypeScript SDK</span>\n                    </div>\n                    <div\n                      class=\"overflow-x-auto rounded-lg border border-zinc-800 bg-zinc-950 p-4 font-mono text-xs leading-relaxed text-zinc-100\"\n                    >\n                      <span class=\"text-muted-foreground\">// Initialize client with zero-latency edge caching</span\n                      ><br />\n                      <span class=\"text-chart-1\">import</span> &#123;\n                      <span class=\"text-chart-2\">UipkgeClient</span> &#125; <span class=\"text-chart-1\">from</span>\n                      <span class=\"text-success\">'&#64;uipkge/sdk'</span><br /><br />\n                      <span class=\"text-chart-1\">const</span> client = <span class=\"text-chart-1\">new</span>\n                      <span class=\"text-chart-2\">UipkgeClient</span>(&#123; apiKey: process.env.<span class=\"text-info\"\n                        >UIPKGE_KEY</span\n                      >\n                      &#125;)<br /><br />\n                      <span class=\"text-chart-1\">const</span> &#123; data &#125; =\n                      <span class=\"text-chart-1\">await</span> client.directory.<span class=\"text-info\"\n                        >syncOrgChart</span\n                      >(&#123;<br />\n                      &nbsp;&nbsp;autoProvision: <span class=\"text-success\">true</span>,<br />\n                      &nbsp;&nbsp;enforceMfa: <span class=\"text-success\">true</span>,<br />\n                      &nbsp;&nbsp;scimSyncInterval: <span class=\"text-warning\">300</span>,<br />\n                      &#125;)\n                    </div>\n                  </div>\n                }\n\n                <!-- Simulation 5: AI Copilot & Agentic Ops (also covers performance) -->\n                @if (activeFeature().previewType === 'copilot' || activeFeature().previewType === 'performance') {\n                  <div class=\"space-y-4\">\n                    <div class=\"space-y-2\">\n                      <label class=\"text-foreground text-xs font-medium\">Natural Language Workforce Assistant</label>\n                      <div class=\"flex gap-2\">\n                        <ui-input\n                          [value]=\"copilotPrompt()\"\n                          (valueChange)=\"copilotPrompt.set($event)\"\n                          class=\"h-9 text-xs\"\n                          placeholder=\"Ask copilot to run calculations or compliance checks...\"\n                        />\n                        <button\n                          ui-button\n                          size=\"sm\"\n                          class=\"h-9 shrink-0 gap-1.5 px-4 text-xs font-semibold\"\n                          [disabled]=\"copilotExecuting()\"\n                          (click)=\"triggerCopilot()\"\n                        >\n                          @if (copilotExecuting()) {\n                            <lucide-icon [img]=\"RefreshCw\" class=\"size-3.5 animate-spin\" />\n                          } @else {\n                            <lucide-icon [img]=\"Bot\" class=\"size-3.5\" />\n                          }\n                          Run\n                        </button>\n                      </div>\n                    </div>\n\n                    <div class=\"border-border bg-muted/20 space-y-2 rounded-lg border p-4\">\n                      <div class=\"flex items-center justify-between text-xs\">\n                        <span class=\"text-muted-foreground font-mono text-xs\">Copilot Real-time Synthesis</span>\n                        <span ui-badge variant=\"outline\" class=\"font-mono text-xs\">Claude 3.5 Sonnet</span>\n                      </div>\n                      <p\n                        class=\"text-foreground bg-background border-border rounded-md border p-3 font-mono text-xs leading-relaxed\"\n                      >\n                        {{ copilotOutput() }}\n                      </p>\n                    </div>\n                  </div>\n                }\n              </div>\n\n              <div\n                ui-card-footer\n                class=\"border-border bg-muted/10 flex items-center justify-between border-t px-5 py-3 text-xs\"\n              >\n                <span class=\"text-muted-foreground font-mono\">Architecture SLA: 99.99% Multi-region Active-Active</span>\n                <button ui-button variant=\"link\" size=\"sm\" class=\"text-primary h-auto gap-1 p-0 text-xs\">\n                  Explore Full Documentation\n                  <lucide-icon [img]=\"ArrowRight\" class=\"size-3.5\" />\n                </button>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n  `,\n})\nexport class UiFeatures01Component {\n  protected readonly cn = cn\n  protected readonly ArrowRight = ArrowRight\n  protected readonly Bot = Bot\n  protected readonly Check = Check\n  protected readonly CheckCircle2 = CheckCircle2\n  protected readonly ChevronRight = ChevronRight\n  protected readonly Copy = Copy\n  protected readonly Globe = Globe\n  protected readonly Layers = Layers\n  protected readonly Math = Math\n  protected readonly RefreshCw = RefreshCw\n  protected readonly Search = Search\n\n  protected readonly allCategories = categories\n  protected readonly allTeams = teamOptions\n  protected readonly allControls = complianceControls\n\n  @Input() set initialCategory(v: FeatureFilter) {\n    if (v === 'all' || categories.some((c) => c.id === v)) this.activeCategory.set(v)\n  }\n  @Input() set initialFeature(v: string) {\n    if (features.some((f) => f.id === v)) this.selectedFeatureId.set(v)\n  }\n  @Input('class') className?: string\n\n  readonly activeCategory = signal<FeatureFilter>('all')\n  readonly selectedFeatureId = signal('directory')\n  readonly copied = signal(false)\n  private copyTimer: ReturnType<typeof setTimeout> | undefined\n\n  // Directory simulation state\n  readonly searchQuery = signal('')\n  readonly selectedTeam = signal('All Roles')\n\n  // Payroll simulation state\n  readonly grossAmount = signal(184000)\n  readonly payrollTaxRate = signal(18.5)\n  readonly headcount = signal(42)\n\n  // Copilot simulation state\n  readonly copilotPrompt = signal(\n    'Generate quarterly SOC2 compliance audit report with automated PR proof attachments.',\n  )\n  readonly copilotExecuting = signal(false)\n  readonly copilotOutput = signal(\n    'Audit summary generated. 14 evidence logs compiled across 4 AWS & Cloudflare regions. Zero critical findings.',\n  )\n  private copilotTimer: ReturnType<typeof setTimeout> | undefined\n\n  constructor() {\n    inject(DestroyRef).onDestroy(() => {\n      clearTimeout(this.copyTimer)\n      clearTimeout(this.copilotTimer)\n    })\n  }\n\n  readonly filteredFeatures = computed(() => {\n    const cat = this.activeCategory()\n    if (cat === 'all') return features\n    return features.filter((f) => f.category === cat)\n  })\n\n  readonly activeFeature = computed(() => features.find((f) => f.id === this.selectedFeatureId()) ?? features[0]!)\n\n  readonly filteredEmployees = computed(() => {\n    const q = this.searchQuery().toLowerCase()\n    const team = this.selectedTeam()\n    return employees.filter((emp) => {\n      const matchQuery = emp.name.toLowerCase().includes(q) || emp.role.toLowerCase().includes(q)\n      const matchRole = team === 'All Roles' || emp.team === team\n      return matchQuery && matchRole\n    })\n  })\n\n  readonly estimatedDeductions = computed(() => this.grossAmount() * (this.payrollTaxRate() / 100))\n  readonly netPayout = computed(() => this.grossAmount() - this.estimatedDeductions())\n  readonly avgPerEmployee = computed(() => (this.grossAmount() / this.headcount()).toFixed(0))\n\n  get rootClass(): string {\n    return cn('bg-background border-border relative w-full border-y py-16 lg:py-24', this.className)\n  }\n\n  filterButtonClass(id: FeatureFilter): string {\n    return cn(\n      'rounded-md px-3 py-1.5 text-xs font-medium transition-colors',\n      this.activeCategory() === id\n        ? 'bg-background text-foreground font-semibold shadow-xs'\n        : 'text-muted-foreground hover:text-foreground',\n    )\n  }\n\n  featureCardClass(id: string): string {\n    return cn(\n      'group cursor-pointer rounded-xl border p-4 transition-colors duration-150',\n      this.selectedFeatureId() === id\n        ? 'bg-card border-primary/40 ring-primary/20 shadow-xs ring-1'\n        : 'bg-card/40 border-border hover:bg-card/80 hover:border-border/80',\n    )\n  }\n\n  featureIconClass(id: string): string {\n    return cn(\n      'flex size-9 items-center justify-center rounded-lg border transition-colors',\n      this.selectedFeatureId() === id\n        ? 'bg-primary text-primary-foreground border-primary'\n        : 'bg-muted text-muted-foreground border-border group-hover:text-foreground',\n    )\n  }\n\n  chevronClass(id: string): string {\n    return cn(\n      'text-muted-foreground size-4 shrink-0 transition-transform',\n      this.selectedFeatureId() === id ? 'text-primary translate-x-0.5' : 'group-hover:translate-x-0.5',\n    )\n  }\n\n  setActiveCategory(cat: FeatureFilter): void {\n    this.activeCategory.set(cat)\n  }\n\n  selectFeature(id: string): void {\n    this.selectedFeatureId.set(id)\n  }\n\n  initials(name: string): string {\n    return name\n      .split(' ')\n      .map((n) => n[0])\n      .join('')\n  }\n\n  async copySnippet(): Promise<void> {\n    try {\n      await navigator.clipboard.writeText(JSON.stringify(this.activeFeature(), null, 2))\n      this.copied.set(true)\n      clearTimeout(this.copyTimer)\n      this.copyTimer = setTimeout(() => this.copied.set(false), 2000)\n    } catch {\n      // Clipboard unavailable (e.g. insecure context): leave the label unchanged.\n    }\n  }\n\n  triggerCopilot(): void {\n    this.copilotExecuting.set(true)\n    this.copilotOutput.set('Analyzing real-time event bus and compiling cryptographically signed evidence bundle...')\n    clearTimeout(this.copilotTimer)\n    this.copilotTimer = setTimeout(() => {\n      this.copilotOutput.set(\n        '✓ SOC 2 Type II bundle validated. 142 controls verified at 100% adherence. Ready for auditor download.',\n      )\n      this.copilotExecuting.set(false)\n    }, 900)\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/features-01/features-01.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/features-01/index.ts",
      "content": "export {\n  UiFeatures01Component,\n  type FeatureCategory,\n  type FeatureFilter,\n  type FeatureModule,\n  type PreviewType,\n} from './features-01.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/features-01/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",
    "https://uipkge.dev/r/angular/input.json",
    "https://uipkge.dev/r/angular/separator.json"
  ],
  "description": "Interactive enterprise product feature workbench with live module simulations, dynamic directory filters, real-time payroll calculations, continuous SOC 2 compliance verification, and TypeScript API code viewer.",
  "categories": [
    "marketing"
  ]
}