{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "security-compliance-badges",
  "title": "Security Compliance Badges",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/security-compliance-badges/security-compliance-badges.component.ts",
      "content": "// Enterprise security and compliance workbench: SOC2, ISO27001, GDPR, and HIPAA\n// audit inspection with cryptographic SHA-256 fingerprint verification and a\n// whitepaper download action. Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, Input, computed, signal } from '@angular/core'\nimport { Check, CheckCircle2, Copy, Download, LucideAngularModule, RefreshCw, ShieldCheck } 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 CompliancePillar {\n  id: string\n  name: string\n  standard: string\n  status: string\n  auditor: string\n  lastAudit: string\n  sha256: string\n  highlights: string[]\n}\n\nconst pillars: CompliancePillar[] = [\n  {\n    id: 'soc2',\n    name: 'SOC2 Type II Certified',\n    standard: 'AICPA Trust Services Criteria (Security, Availability, Confidentiality)',\n    status: 'Clean Opinion (Zero Exceptions)',\n    auditor: 'Schellman & Company, LLC',\n    lastAudit: 'Q4 2025 Audit Period',\n    sha256: '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08',\n    highlights: [\n      'Continuous 24/7 automated control monitoring via Drata',\n      'Annual independent black-box & white-box penetration testing',\n      'Mandatory hardware key 2FA (WebAuthn / FIDO2) across all staff',\n      'Immutable tamper-evident centralized audit logs with 365-day retention',\n    ],\n  },\n  {\n    id: 'iso27001',\n    name: 'ISO/IEC 27001:2022',\n    standard: 'Information Security Management System (ISMS)',\n    status: 'Globally Certified',\n    auditor: 'BSI Group Global',\n    lastAudit: 'Continuous Surveillance',\n    sha256: '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8',\n    highlights: [\n      'Strict cryptographic key management with automated rotation',\n      'Zero vendor data sharing or telemetry monetization guarantees',\n      'Comprehensive disaster recovery with RPO < 1 min, RTO < 15 mins',\n      'Physical security auditing of all tier-4 sovereign edge hosting locations',\n    ],\n  },\n  {\n    id: 'gdpr',\n    name: 'GDPR & CCPA Compliant',\n    standard: 'EU 2016/679 & California Consumer Privacy Act',\n    status: 'Strict Privacy Tier',\n    auditor: 'Internal Privacy Council + DPO',\n    lastAudit: 'Live Continuous Compliance',\n    sha256: '4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a',\n    highlights: [\n      'Zero third-party tracking cookies or marketing beacons in registry AST',\n      'Automated self-serve data portability & deletion API endpoints',\n      'EU Standard Contractual Clauses (SCCs) baked into standard DPA',\n      'Encrypted localized edge caches with sovereign residency enforcement',\n    ],\n  },\n  {\n    id: 'hipaa',\n    name: 'HIPAA & HITECH Ready',\n    standard: 'Health Insurance Portability and Accountability Act',\n    status: 'BAA Eligible',\n    auditor: 'Coalfire Systems',\n    lastAudit: 'Annual Attestation',\n    sha256: 'ef2d127de37b942baad06145e54b0c619a1f22327b2ebbcfbec78f5564afe39d',\n    highlights: [\n      'AES-256 encryption for data at rest and TLS 1.3 in transit',\n      'Automated Business Associate Agreement (BAA) execution for enterprise tiers',\n      'Strict role-based access control (RBAC) with just-in-time privilege escalation',\n      'PHI isolation architecture with zero persistent client-side caching',\n    ],\n  },\n]\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-security-compliance-badges, [ui-security-compliance-badges]',\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=\"security-compliance-badges\" [class]=\"rootClass\">\n      <!-- Ambient Radial Glow -->\n      <div\n        class=\"bg-success/10 pointer-events-none absolute top-1/3 left-1/2 -z-10 h-80 w-full max-w-4xl -translate-x-1/2 -translate-y-1/2 rounded-full blur-xl\"\n      ></div>\n\n      <div class=\"mx-auto max-w-6xl space-y-12\">\n        <!-- Section Header -->\n        <div class=\"mx-auto max-w-3xl space-y-4 text-center\">\n          <span ui-badge variant=\"secondary\" class=\"gap-1.5 px-3 py-1 font-mono text-xs shadow-xs\">\n            <lucide-icon [img]=\"ShieldCheck\" class=\"text-success size-3.5\" />\n            Enterprise Trust & Cryptographic Security\n          </span>\n          <h2 class=\"text-foreground text-3xl font-bold tracking-tight sm:text-4xl\">\n            Built for the most compliance-sensitive architectures.\n          </h2>\n          <p class=\"text-muted-foreground text-base\">\n            Zero runtime bloat, zero tracking beacons, and independent third-party verified attestations for your SecOps\n            team.\n          </p>\n        </div>\n\n        <!-- Compliance Badges 4-Tile Preview Row -->\n        <div class=\"grid grid-cols-2 gap-3 sm:grid-cols-4 sm:gap-4\">\n          @for (p of pillars; track p.id) {\n            <button type=\"button\" [class]=\"tileClass(p.id)\" (click)=\"activeTab.set(p.id)\">\n              <div class=\"mb-3 flex items-center justify-between\">\n                <div\n                  class=\"bg-success/10 text-success flex size-8 items-center justify-center rounded-lg font-mono text-xs font-bold\"\n                >\n                  <lucide-icon [img]=\"ShieldCheck\" class=\"size-4\" />\n                </div>\n                <span [class]=\"dotClass(p.id)\"></span>\n              </div>\n\n              <h3 class=\"text-foreground truncate font-mono text-xs font-bold\">{{ p.name.split(' ')[0] }}</h3>\n              <p class=\"text-muted-foreground mt-0.5 truncate text-xs\">{{ p.status }}</p>\n            </button>\n          }\n        </div>\n\n        <!-- Interactive Attestation & Security Workbench Card -->\n        <div\n          ui-card\n          class=\"border-border bg-card/95 space-y-6 overflow-hidden rounded-2xl p-6 shadow-sm backdrop-blur-md sm:p-8\"\n        >\n          <!-- Workbench Top Details -->\n          <div class=\"border-border/80 flex flex-col justify-between gap-4 border-b pb-6 sm:flex-row sm:items-center\">\n            <div class=\"space-y-1\">\n              <div class=\"flex items-center gap-2\">\n                <h3 class=\"text-foreground font-mono text-xl font-bold\">{{ currentPillar().name }}</h3>\n                <span ui-badge variant=\"outline\" class=\"border-success/20 bg-success/10 text-success font-mono text-xs\">\n                  Verified\n                </span>\n              </div>\n              <p class=\"text-muted-foreground font-mono text-xs\">{{ currentPillar().standard }}</p>\n            </div>\n\n            <button\n              ui-button\n              size=\"sm\"\n              variant=\"outline\"\n              class=\"shrink-0 gap-2 font-mono text-xs\"\n              (click)=\"mockDownload()\"\n            >\n              @if (isDownloadingReport()) {\n                <lucide-icon [img]=\"RefreshCw\" class=\"text-primary size-3.5 animate-spin\" />\n              } @else {\n                <lucide-icon [img]=\"Download\" class=\"text-muted-foreground size-3.5\" />\n              }\n              <span>{{ isDownloadingReport() ? 'Preparing DPA Bundle...' : 'Download Security Whitepaper' }}</span>\n            </button>\n          </div>\n\n          <!-- Audit Details Grid -->\n          <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2\">\n            <!-- Left: Key Controls & Technical Enforcements -->\n            <div class=\"space-y-3\">\n              <p class=\"text-muted-foreground font-mono text-xs tracking-wider uppercase\">Key Technical Controls</p>\n              <ul class=\"space-y-2.5\">\n                @for (item of currentPillar().highlights; track item) {\n                  <li class=\"text-foreground/90 flex items-start gap-2.5 text-xs leading-relaxed\">\n                    <lucide-icon [img]=\"CheckCircle2\" class=\"text-success mt-0.5 size-4 shrink-0\" />\n                    <span>{{ item }}</span>\n                  </li>\n                }\n              </ul>\n            </div>\n\n            <!-- Right: Auditor & Cryptographic SHA-256 Fingerprint -->\n            <div class=\"border-border bg-muted/20 flex flex-col justify-between space-y-4 rounded-xl border p-5\">\n              <div class=\"space-y-3\">\n                <div class=\"flex items-center justify-between font-mono text-xs\">\n                  <span class=\"text-muted-foreground\">Independent Auditor:</span>\n                  <span class=\"text-foreground font-semibold\">{{ currentPillar().auditor }}</span>\n                </div>\n                <div class=\"flex items-center justify-between font-mono text-xs\">\n                  <span class=\"text-muted-foreground\">Audit Cycle:</span>\n                  <span class=\"text-foreground\">{{ currentPillar().lastAudit }}</span>\n                </div>\n                <div class=\"flex items-center justify-between font-mono text-xs\">\n                  <span class=\"text-muted-foreground\">CVE Vulnerability Scan:</span>\n                  <span class=\"text-success font-bold\">0 High &bull; 0 Critical</span>\n                </div>\n              </div>\n\n              <!-- SHA-256 Hash Box -->\n              <div class=\"border-border/60 space-y-1.5 border-t pt-3\">\n                <div class=\"text-muted-foreground flex items-center justify-between font-mono text-xs\">\n                  <span>Attestation PDF SHA-256 Fingerprint:</span>\n                  <button\n                    type=\"button\"\n                    class=\"text-primary flex items-center gap-1 hover:underline\"\n                    (click)=\"copyHash()\"\n                  >\n                    @if (copiedHash()) {\n                      <lucide-icon [img]=\"Check\" class=\"text-success size-3\" />\n                    } @else {\n                      <lucide-icon [img]=\"Copy\" class=\"size-3\" />\n                    }\n                    <span>{{ copiedHash() ? 'Copied' : 'Copy Hash' }}</span>\n                  </button>\n                </div>\n                <p\n                  class=\"text-muted-foreground bg-background/80 border-border rounded border p-2 font-mono text-xs break-all select-all\"\n                >\n                  {{ currentPillar().sha256 }}\n                </p>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n  `,\n})\nexport class UiSecurityComplianceBadgesComponent {\n  protected readonly Check = Check\n  protected readonly CheckCircle2 = CheckCircle2\n  protected readonly Copy = Copy\n  protected readonly Download = Download\n  protected readonly RefreshCw = RefreshCw\n  protected readonly ShieldCheck = ShieldCheck\n\n  protected readonly pillars = pillars\n\n  @Input('class') className?: string\n\n  readonly activeTab = signal('soc2')\n  readonly copiedHash = signal(false)\n  readonly isDownloadingReport = signal(false)\n  private copyTimer: ReturnType<typeof setTimeout> | undefined\n  private downloadTimer: ReturnType<typeof setTimeout> | undefined\n\n  readonly currentPillar = computed(() => pillars.find((p) => p.id === this.activeTab()) ?? pillars[0]!)\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  tileClass(id: string): string {\n    return cn(\n      'group relative overflow-hidden rounded-2xl border p-4 text-left transition-colors',\n      this.activeTab() === id\n        ? 'border-success/80 bg-success/5 ring-success/30 shadow-md ring-1'\n        : 'border-border bg-card/70 hover:border-border hover:bg-card',\n    )\n  }\n\n  dotClass(id: string): string {\n    return cn('size-2 rounded-full', this.activeTab() === id ? 'bg-success animate-pulse' : 'bg-muted')\n  }\n\n  copyHash(): void {\n    try {\n      void navigator.clipboard.writeText(this.currentPillar().sha256)\n    } catch {\n      // Clipboard unavailable (e.g. insecure context): still flip the label.\n    }\n    this.copiedHash.set(true)\n    clearTimeout(this.copyTimer)\n    this.copyTimer = setTimeout(() => this.copiedHash.set(false), 2000)\n  }\n\n  mockDownload(): void {\n    this.isDownloadingReport.set(true)\n    clearTimeout(this.downloadTimer)\n    this.downloadTimer = setTimeout(() => this.isDownloadingReport.set(false), 1200)\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/security-compliance-badges/security-compliance-badges.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/security-compliance-badges/index.ts",
      "content": "export { UiSecurityComplianceBadgesComponent } from './security-compliance-badges.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/security-compliance-badges/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": "Enterprise security and compliance workbench featuring SOC2, ISO27001, GDPR, and HIPAA audit inspection, cryptographic SHA-256 fingerprint verification, and whitepaper download.",
  "categories": [
    "marketing"
  ]
}