{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "lease-agreement-sign",
  "title": "Lease Agreement Sign",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/lease-agreement-sign/lease-agreement-sign.component.ts",
      "content": "// DocuSign-style digital residential lease agreement signature and review workflow with\n// terms summary, interactive initial checkpoints, sticky signature action sidebar, and\n// cryptographic audit execution. Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, Input, computed, signal } from '@angular/core'\nimport {\n  AlertCircle,\n  BadgeCheck,\n  Building2,\n  Check,\n  CheckCircle2,\n  Download,\n  Lock,\n  LucideAngularModule,\n  Pen,\n  PenTool,\n  Printer,\n  RotateCcw,\n  ShieldCheck,\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  UiCardDescriptionComponent,\n  UiCardHeaderComponent,\n  UiCardTitleComponent,\n} from '@/ui/card/card.component'\nimport { UiSeparatorComponent } from '@/ui/separator/separator.component'\n\nexport type SignatureFont = 'serif' | 'script' | 'sans'\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-lease-agreement-sign, [ui-lease-agreement-sign]',\n  standalone: true,\n  host: { '[attr.class]': '\"contents\"' },\n  imports: [\n    LucideAngularModule,\n    UiBadgeComponent,\n    UiButtonComponent,\n    UiCardComponent,\n    UiCardContentComponent,\n    UiCardDescriptionComponent,\n    UiCardHeaderComponent,\n    UiCardTitleComponent,\n    UiSeparatorComponent,\n  ],\n  template: `\n    <div data-slot=\"lease-agreement-sign\" [class]=\"rootClass\">\n      <div class=\"mx-auto max-w-7xl px-4 py-6 sm:px-6 sm:py-8 lg:px-8\">\n        <!-- Top Header -->\n        <header class=\"border-border bg-card mb-6 rounded-xl border p-5 shadow-xs sm:p-6\">\n          <div class=\"flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between\">\n            <div class=\"space-y-1.5\">\n              <div class=\"flex flex-wrap items-center gap-2\">\n                <span class=\"text-muted-foreground text-xs font-medium\">Agreement Ref:</span>\n                <span class=\"text-foreground font-mono text-xs font-semibold tabular-nums\">#LSA-2026-44B</span>\n                <span class=\"text-muted-foreground text-xs\">•</span>\n                @if (isSigned()) {\n                  <span ui-badge wrap class=\"border-success/30 bg-success/10 text-success gap-1.5 text-xs font-medium\">\n                    <lucide-icon [img]=\"BadgeCheck\" class=\"size-3.5\" />\n                    <span>Fully Executed &amp; Legally Binding</span>\n                  </span>\n                } @else if (initial1Completed() && initial2Completed()) {\n                  <span ui-badge wrap class=\"border-info/30 bg-info/10 text-info gap-1.5 text-xs font-medium\">\n                    <lucide-icon [img]=\"PenTool\" class=\"size-3.5\" />\n                    <span>Ready for Tenant Signature</span>\n                  </span>\n                } @else {\n                  <span ui-badge wrap class=\"border-warning/30 bg-warning/10 text-warning gap-1.5 text-xs font-medium\">\n                    <lucide-icon [img]=\"AlertCircle\" class=\"size-3.5\" />\n                    <span>Action Required • {{ pendingCount() }} Signatures Needed</span>\n                  </span>\n                }\n              </div>\n              <h1 class=\"text-foreground text-xl font-bold tracking-tight sm:text-2xl lg:text-3xl\">\n                Residential Lease Agreement • 12-Month Term\n              </h1>\n              <p class=\"text-muted-foreground flex flex-wrap items-center gap-2 text-xs sm:text-sm\">\n                <lucide-icon [img]=\"Building2\" class=\"size-4 shrink-0\" />\n                <span>Unit 4B • 742 Evergreen Terrace, Springfield, OR 97477</span>\n              </p>\n            </div>\n\n            <div class=\"flex flex-wrap items-center gap-2.5\">\n              <button ui-button variant=\"outline\" size=\"sm\" class=\"gap-1.5 text-xs\" (click)=\"handlePrint()\">\n                <lucide-icon [img]=\"Printer\" class=\"size-4\" />\n                <span>Print</span>\n              </button>\n              <button\n                ui-button\n                aria-label=\"Download attachment\"\n                variant=\"outline\"\n                size=\"sm\"\n                class=\"gap-1.5 text-xs\"\n                (click)=\"handleDownload()\"\n              >\n                <lucide-icon [img]=\"Download\" class=\"size-4\" />\n                <span>{{ downloadSuccess() ? 'Downloading PDF...' : 'Download Draft PDF' }}</span>\n              </button>\n              @if (isSigned()) {\n                <button\n                  ui-button\n                  variant=\"outline\"\n                  size=\"sm\"\n                  class=\"border-muted-foreground/30 gap-1.5 text-xs\"\n                  (click)=\"resetWorkflow()\"\n                >\n                  <lucide-icon [img]=\"RotateCcw\" class=\"size-3.5\" />\n                  <span>Reset Demo</span>\n                </button>\n              }\n            </div>\n          </div>\n        </header>\n\n        <!-- 2-Column Layout -->\n        <div class=\"grid grid-cols-1 gap-8 lg:grid-cols-12\">\n          <!-- Left Column: Legal Lease Document -->\n          <main class=\"space-y-6 lg:col-span-8\">\n            <div class=\"border-border bg-card rounded-xl border p-6 shadow-xs sm:p-8\">\n              <!-- Document Title Bar -->\n              <div class=\"border-border border-b pb-6 text-center\">\n                <span ui-badge variant=\"outline\" class=\"font-mono text-xs tracking-widest uppercase\">\n                  Official Real Estate Contract\n                </span>\n                <h2 class=\"text-foreground mt-3 text-lg font-bold tracking-tight uppercase sm:text-xl\">\n                  Standard Residential Lease Agreement\n                </h2>\n                <p class=\"text-muted-foreground mt-1 text-xs\">\n                  State of Oregon • Multnomah County • Governing Statute: ORS Chapter 90\n                </p>\n              </div>\n\n              <!-- Lease Summary Terms Box -->\n              <div class=\"my-6\">\n                <div class=\"bg-muted/40 border-border rounded-lg border p-4 sm:p-5\">\n                  <div class=\"mb-3 flex items-center justify-between\">\n                    <h3 class=\"text-foreground text-xs font-semibold tracking-wider uppercase\">\n                      Key Financial &amp; Term Summary\n                    </h3>\n                    <span ui-badge variant=\"secondary\" class=\"font-mono text-xs\">Fixed-Term</span>\n                  </div>\n                  <div class=\"grid grid-cols-2 gap-4 sm:grid-cols-4\">\n                    <div class=\"border-border/60 bg-card rounded-md border p-3\">\n                      <p class=\"text-muted-foreground text-xs font-medium\">Monthly Rent</p>\n                      <p class=\"text-foreground mt-1 font-mono text-lg font-bold tabular-nums\">$3,450.00</p>\n                      <p class=\"text-muted-foreground mt-0.5 text-xs\">Due 1st of month</p>\n                    </div>\n                    <div class=\"border-border/60 bg-card rounded-md border p-3\">\n                      <p class=\"text-muted-foreground text-xs font-medium\">Lease Duration</p>\n                      <p class=\"text-foreground mt-1 text-xs font-bold sm:text-sm\">12 Months</p>\n                      <p class=\"text-muted-foreground mt-0.5 font-mono text-xs tabular-nums\">\n                        Sep 01, 2026 – Aug 31, 2027\n                      </p>\n                    </div>\n                    <div class=\"border-border/60 bg-card rounded-md border p-3\">\n                      <p class=\"text-muted-foreground text-xs font-medium\">Security Deposit</p>\n                      <p class=\"text-foreground mt-1 font-mono text-lg font-bold tabular-nums\">$3,450.00</p>\n                      <p class=\"text-muted-foreground mt-0.5 text-xs\">Escrow Trust Acct</p>\n                    </div>\n                    <div class=\"border-border/60 bg-card rounded-md border p-3\">\n                      <p class=\"text-muted-foreground text-xs font-medium\">Pet Policy</p>\n                      <p class=\"text-foreground mt-1 text-xs font-bold sm:text-sm\">Approved - 1 Dog</p>\n                      <p class=\"text-muted-foreground mt-0.5 text-xs\">$50/mo pet rent</p>\n                    </div>\n                  </div>\n                </div>\n              </div>\n\n              <!-- Legal Sections -->\n              <div class=\"text-foreground/90 space-y-8 text-xs leading-relaxed sm:text-sm\">\n                <!-- Section 1 -->\n                <section id=\"section-1\" class=\"space-y-3\">\n                  <div class=\"flex items-center gap-2\">\n                    <span class=\"bg-primary/10 text-primary rounded px-2 py-0.5 font-mono text-xs font-bold\">01</span>\n                    <h3 class=\"text-foreground text-sm font-bold sm:text-base\">Parties, Premises &amp; Occupancy</h3>\n                  </div>\n                  <p class=\"text-muted-foreground\">\n                    This Residential Lease Agreement (the “Agreement”) is entered into on this 21st day of August, 2026,\n                    by and between:\n                  </p>\n                  <div class=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n                    <div class=\"border-border bg-muted/20 rounded-lg border p-3.5\">\n                      <p class=\"text-foreground text-xs font-semibold tracking-wider uppercase\">Landlord / Lessor</p>\n                      <p class=\"text-foreground mt-1 font-medium\">Evergreen Heritage Holdings LLC</p>\n                      <p class=\"text-muted-foreground text-xs\">Managing Agent: Marcus Vance, CPM</p>\n                      <p class=\"text-muted-foreground font-mono text-xs\">Lic #OR-994201 • info&#64;evergreenhh.com</p>\n                    </div>\n                    <div class=\"border-border bg-muted/20 rounded-lg border p-3.5\">\n                      <p class=\"text-foreground text-xs font-semibold tracking-wider uppercase\">Tenant / Lessee</p>\n                      <p class=\"text-foreground mt-1 font-medium\">Elena Rostova</p>\n                      <p class=\"text-muted-foreground text-xs\">Primary Occupant</p>\n                      <p class=\"text-muted-foreground text-xs\">elena.rostova&#64;example.com • (555) 234-5678</p>\n                    </div>\n                  </div>\n                  <p class=\"text-muted-foreground\">\n                    <strong>Premises Description:</strong> Landlord hereby leases to Tenant the residential real\n                    property situated at <strong>Unit 4B, 742 Evergreen Terrace, Springfield, OR 97477</strong>,\n                    comprising 2 Bedrooms, 2 Full Bathrooms (approx. 1,120 sq ft), together with designated covered\n                    parking stall #42 and storage locker #S-14.\n                  </p>\n                </section>\n\n                <div ui-separator></div>\n\n                <!-- Section 2 -->\n                <section id=\"section-2\" class=\"space-y-3\">\n                  <div class=\"flex items-center gap-2\">\n                    <span class=\"bg-primary/10 text-primary rounded px-2 py-0.5 font-mono text-xs font-bold\">02</span>\n                    <h3 class=\"text-foreground text-sm font-bold sm:text-base\">\n                      Rent Payment Schedule &amp; Late Fees\n                    </h3>\n                  </div>\n                  <p class=\"text-muted-foreground\">\n                    Tenant agrees to pay Landlord the base monthly rent of\n                    <strong class=\"text-foreground font-mono tabular-nums\">$3,450.00 USD</strong> plus\n                    <strong class=\"text-foreground font-mono tabular-nums\">$50.00 USD</strong> monthly pet rent, for an\n                    aggregate monthly payment of\n                    <strong class=\"text-foreground font-mono tabular-nums\">$3,500.00 USD</strong>, due on or before the\n                    first (1st) day of each calendar month.\n                  </p>\n                  <p class=\"text-muted-foreground\">\n                    <strong>Grace Period &amp; Penalties:</strong> A grace period is provided through 11:59 PM PST on\n                    the fifth (5th) day of the month. If rent is not received in full by 12:00 AM on the sixth (6th)\n                    calendar day, a statutory late fee of\n                    <strong class=\"text-foreground font-mono tabular-nums\">$75.00 USD</strong> shall immediately apply,\n                    plus an additional charge of\n                    <strong class=\"text-foreground font-mono tabular-nums\">$10.00 USD per day</strong> until the\n                    delinquent balance is satisfied in full.\n                  </p>\n\n                  <div id=\"initial-marker-1\" [class]=\"initial1BoxClass\">\n                    <div class=\"flex flex-col justify-between gap-3 sm:flex-row sm:items-center\">\n                      <div class=\"space-y-1\">\n                        <div class=\"flex items-center gap-2\">\n                          <span class=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">\n                            Tenant Initial Requirement • Section 2\n                          </span>\n                          @if (initial1Completed()) {\n                            <span\n                              ui-badge\n                              wrap\n                              class=\"border-success/40 bg-success/10 text-success text-xs font-medium\"\n                            >\n                              <lucide-icon [img]=\"Check\" class=\"mr-1 size-3\" /> Initialed\n                            </span>\n                          } @else {\n                            <span\n                              ui-badge\n                              wrap\n                              class=\"border-warning/40 bg-warning/10 text-warning text-xs font-medium\"\n                            >\n                              Action Required\n                            </span>\n                          }\n                        </div>\n                        <p class=\"text-muted-foreground text-xs\">\n                          Acknowledge and agree to the $3,450.00 rent schedule, ACH delivery, and $75.00 late assessment\n                          clauses.\n                        </p>\n                      </div>\n                      <button\n                        ui-button\n                        type=\"button\"\n                        size=\"sm\"\n                        [disabled]=\"isSigned()\"\n                        [variant]=\"initial1Completed() ? 'outline' : 'default'\"\n                        [class]=\"initial1BtnClass\"\n                        (click)=\"toggleInitial1()\"\n                      >\n                        @if (initial1Completed()) {\n                          <span class=\"text-sm font-semibold italic\">ER</span>\n                          <span class=\"font-mono text-xs tabular-nums\">• Elena Rostova [Initialed]</span>\n                        } @else {\n                          <lucide-icon [img]=\"Pen\" class=\"size-3.5\" />\n                          <span>Click to Initial [ER]</span>\n                        }\n                      </button>\n                    </div>\n                  </div>\n                </section>\n\n                <div ui-separator></div>\n\n                <!-- Section 3 -->\n                <section id=\"section-3\" class=\"space-y-3\">\n                  <div class=\"flex items-center gap-2\">\n                    <span class=\"bg-primary/10 text-primary rounded px-2 py-0.5 font-mono text-xs font-bold\">03</span>\n                    <h3 class=\"text-foreground text-sm font-bold sm:text-base\">\n                      Maintenance, Utilities &amp; Occupancy Rules\n                    </h3>\n                  </div>\n                  <ul class=\"text-muted-foreground space-y-2\">\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"CheckCircle2\" class=\"text-primary mt-0.5 size-4 shrink-0\" />\n                      <span>\n                        <strong class=\"text-foreground\">Quiet Hours:</strong> Community quiet hours are strictly\n                        enforced between 10:00 PM and 7:00 AM daily.\n                      </span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"CheckCircle2\" class=\"text-primary mt-0.5 size-4 shrink-0\" />\n                      <span>\n                        <strong class=\"text-foreground\">HVAC Maintenance:</strong> Tenant shall replace HVAC air filters\n                        every 90 calendar days. Replacement filters are provided free of charge at property management.\n                      </span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"CheckCircle2\" class=\"text-primary mt-0.5 size-4 shrink-0\" />\n                      <span>\n                        <strong class=\"text-foreground\">Guest Policy:</strong> Guests staying exceeding 14 consecutive\n                        calendar days require written authorization from property management.\n                      </span>\n                    </li>\n                    <li class=\"flex items-start gap-2\">\n                      <lucide-icon [img]=\"CheckCircle2\" class=\"text-primary mt-0.5 size-4 shrink-0\" />\n                      <span>\n                        <strong class=\"text-foreground\">Utilities Allocation:</strong> Landlord pays municipal water,\n                        sewer, and storm drainage. Tenant is responsible for electricity (PGE), gas (NW Natural), and\n                        high-speed internet.\n                      </span>\n                    </li>\n                  </ul>\n                </section>\n\n                <div ui-separator></div>\n\n                <!-- Section 4 -->\n                <section id=\"section-4\" class=\"space-y-3\">\n                  <div class=\"flex items-center gap-2\">\n                    <span class=\"bg-primary/10 text-primary rounded px-2 py-0.5 font-mono text-xs font-bold\">04</span>\n                    <h3 class=\"text-foreground text-sm font-bold sm:text-base\">\n                      Termination, Renewal &amp; Move-Out Notice\n                    </h3>\n                  </div>\n                  <p class=\"text-muted-foreground\">\n                    Either party may terminate or request non-renewal of this lease by delivering a formal written\n                    notice at least <strong>sixty (60) calendar days</strong> prior to the lease expiration date of\n                    August 31, 2027.\n                  </p>\n                  <p class=\"text-muted-foreground\">\n                    <strong>Move-Out &amp; Carpet Certification:</strong> Upon vacating the premises, Tenant shall\n                    return all building keys (2 unit keys, 1 mailbox key, 1 garage fob) and furnish a paid receipt from\n                    a licensed professional carpet cleaning service.\n                  </p>\n\n                  <div id=\"initial-marker-2\" [class]=\"initial2BoxClass\">\n                    <div class=\"flex flex-col justify-between gap-3 sm:flex-row sm:items-center\">\n                      <div class=\"space-y-1\">\n                        <div class=\"flex items-center gap-2\">\n                          <span class=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">\n                            Tenant Initial Requirement • Section 4\n                          </span>\n                          @if (initial2Completed()) {\n                            <span\n                              ui-badge\n                              wrap\n                              class=\"border-success/40 bg-success/10 text-success text-xs font-medium\"\n                            >\n                              <lucide-icon [img]=\"Check\" class=\"mr-1 size-3\" /> Initialed\n                            </span>\n                          } @else {\n                            <span\n                              ui-badge\n                              wrap\n                              class=\"border-warning/40 bg-warning/10 text-warning text-xs font-medium\"\n                            >\n                              Action Required\n                            </span>\n                          }\n                        </div>\n                        <p class=\"text-muted-foreground text-xs\">\n                          Acknowledge the 60-day written move-out notice requirement and professional carpet cleaning\n                          obligation.\n                        </p>\n                      </div>\n                      <button\n                        ui-button\n                        type=\"button\"\n                        size=\"sm\"\n                        [disabled]=\"isSigned()\"\n                        [variant]=\"initial2Completed() ? 'outline' : 'default'\"\n                        [class]=\"initial2BtnClass\"\n                        (click)=\"toggleInitial2()\"\n                      >\n                        @if (initial2Completed()) {\n                          <span class=\"text-sm font-semibold italic\">ER</span>\n                          <span class=\"font-mono text-xs tabular-nums\">• Elena Rostova [Initialed]</span>\n                        } @else {\n                          <lucide-icon [img]=\"Pen\" class=\"size-3.5\" />\n                          <span>Click to Initial [ER]</span>\n                        }\n                      </button>\n                    </div>\n                  </div>\n                </section>\n\n                <div ui-separator></div>\n\n                <!-- Execution -->\n                <section class=\"space-y-4 pt-2\">\n                  <div class=\"flex items-center justify-between\">\n                    <h3 class=\"text-foreground text-sm font-bold sm:text-base\">Execution &amp; Legal Signatures</h3>\n                    <span class=\"text-muted-foreground font-mono text-xs\">2 of 2 Parties</span>\n                  </div>\n\n                  <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n                    <div class=\"border-border bg-muted/20 rounded-lg border p-4\">\n                      <div class=\"flex items-center justify-between\">\n                        <p class=\"text-foreground text-xs font-semibold tracking-wider uppercase\">Landlord Signature</p>\n                        <span\n                          ui-badge\n                          wrap\n                          variant=\"outline\"\n                          class=\"border-success/40 bg-success/10 text-success font-mono text-xs\"\n                        >\n                          <lucide-icon [img]=\"Check\" class=\"mr-1 size-3\" /> Signed\n                        </span>\n                      </div>\n                      <div class=\"border-border/60 bg-card my-3 rounded-md border p-3 text-center\">\n                        <p class=\"text-success text-xl font-medium tracking-wide italic\">Marcus Vance</p>\n                        <p class=\"text-muted-foreground mt-0.5 font-mono text-xs\">Agent for Evergreen Holdings LLC</p>\n                      </div>\n                      <div class=\"text-muted-foreground space-y-1 font-mono text-xs\">\n                        <p class=\"flex justify-between\">\n                          <span>Date Signed:</span>\n                          <span class=\"text-foreground font-semibold tabular-nums\">Aug 20, 2026 • 09:15 PDT</span>\n                        </p>\n                        <p class=\"flex justify-between\">\n                          <span>Certificate ID:</span>\n                          <span class=\"text-foreground font-semibold\">DS-EHG-8842-MV</span>\n                        </p>\n                      </div>\n                    </div>\n\n                    <div [class]=\"tenantBoxClass\">\n                      <div class=\"flex items-center justify-between\">\n                        <p class=\"text-foreground text-xs font-semibold tracking-wider uppercase\">Tenant Signature</p>\n                        @if (isSigned()) {\n                          <span\n                            ui-badge\n                            wrap\n                            class=\"border-success/40 bg-success/10 text-success font-mono text-xs font-medium\"\n                          >\n                            <lucide-icon [img]=\"Check\" class=\"mr-1 size-3\" /> Signed\n                          </span>\n                        } @else {\n                          <span\n                            ui-badge\n                            wrap\n                            class=\"border-warning/40 bg-warning/10 text-warning font-mono text-xs font-medium\"\n                          >\n                            Pending Signature\n                          </span>\n                        }\n                      </div>\n                      <div [class]=\"tenantPreviewClass\">\n                        @if (isSigned()) {\n                          <p [class]=\"signaturePreviewClass\">{{ signerName() }}</p>\n                          <p class=\"text-muted-foreground mt-0.5 font-mono text-xs\">\n                            e-Signed via DocuSign / UIPKGE Registry\n                          </p>\n                        } @else {\n                          <p class=\"text-muted-foreground text-xs italic\">\n                            Awaiting signature execution via right sidebar\n                          </p>\n                          <p class=\"text-muted-foreground/80 mt-1 text-xs\">\n                            Complete 2 initials above to enable signing\n                          </p>\n                        }\n                      </div>\n                      <div class=\"text-muted-foreground space-y-1 font-mono text-xs\">\n                        <p class=\"flex justify-between\">\n                          <span>Date Signed:</span>\n                          <span class=\"text-foreground font-semibold tabular-nums\">\n                            {{ isSigned() ? 'Aug 21, 2026 • 10:44 PDT' : 'Pending' }}\n                          </span>\n                        </p>\n                        <p class=\"flex justify-between\">\n                          <span>Digital Audit Hash:</span>\n                          <span class=\"text-foreground font-semibold\">\n                            {{ isSigned() ? 'SHA256:7f83b1...9069' : 'Unsigned' }}\n                          </span>\n                        </p>\n                      </div>\n                    </div>\n                  </div>\n                </section>\n              </div>\n            </div>\n          </main>\n\n          <!-- Right Column: Sticky Signature Action Sidebar -->\n          <aside class=\"space-y-5 lg:sticky lg:top-6 lg:col-span-4 lg:self-start\">\n            <div ui-card class=\"border-border bg-card shadow-xs\">\n              <div ui-card-header class=\"p-4 pb-2\">\n                <div class=\"flex items-center justify-between\">\n                  <div class=\"flex items-center gap-2\">\n                    <div\n                      class=\"bg-primary/10 text-primary flex size-8 items-center justify-center rounded-full font-bold\"\n                    >\n                      ER\n                    </div>\n                    <div>\n                      <h3 ui-card-title class=\"text-sm font-semibold\">{{ signerName() }}</h3>\n                      <p ui-card-description class=\"text-xs\">Primary Lessee • Tenant</p>\n                    </div>\n                  </div>\n                  <span ui-badge variant=\"outline\" class=\"border-primary/30 text-primary font-mono text-xs\"\n                    >Signer 1/1</span\n                  >\n                </div>\n              </div>\n              <div ui-card-content class=\"text-muted-foreground space-y-2 p-4 pt-2 text-xs\">\n                <div class=\"flex justify-between\">\n                  <span class=\"text-muted-foreground\">Email:</span>\n                  <span class=\"text-foreground font-medium\">elena.rostova&#64;example.com</span>\n                </div>\n                <div class=\"flex justify-between\">\n                  <span class=\"text-muted-foreground\">Auth Level:</span>\n                  <span class=\"text-foreground font-medium\">SMS 2FA Verified</span>\n                </div>\n                <div class=\"flex justify-between\">\n                  <span class=\"text-muted-foreground\">IP Session:</span>\n                  <span class=\"text-foreground font-mono tabular-nums\">198.51.100.42 (TLS 1.3)</span>\n                </div>\n              </div>\n            </div>\n\n            <div ui-card class=\"border-border bg-card shadow-xs\">\n              <div ui-card-header class=\"p-4 pb-2\">\n                <div class=\"flex items-center justify-between\">\n                  <h3 ui-card-title class=\"text-sm font-semibold\">Required Action Checklist</h3>\n                  <span\n                    ui-badge\n                    [variant]=\"completedCount() === 3 ? 'default' : 'secondary'\"\n                    class=\"font-mono text-xs whitespace-normal tabular-nums\"\n                  >\n                    {{ completedCount() }} / 3 Done\n                  </span>\n                </div>\n                <p ui-card-description class=\"text-xs\">All initial markers must be completed prior to signing</p>\n              </div>\n              <div ui-card-content class=\"space-y-2.5 p-4 pt-2\">\n                <button\n                  type=\"button\"\n                  class=\"border-border/80 hover:bg-muted/40 flex w-full items-center justify-between rounded-lg border p-2.5 text-left text-xs transition-colors\"\n                  (click)=\"scrollToInitial1()\"\n                >\n                  <div class=\"flex items-center gap-2.5\">\n                    <div [class]=\"checkDotClass(initial1Completed())\">\n                      @if (initial1Completed()) {\n                        <lucide-icon [img]=\"Check\" class=\"size-3\" />\n                      } @else {\n                        <span>1</span>\n                      }\n                    </div>\n                    <div>\n                      <p class=\"text-foreground font-medium\">Initial Section 2 (Rent &amp; Fees)</p>\n                      <p class=\"text-muted-foreground text-xs\">Acknowledges $3,450 rent &amp; late charges</p>\n                    </div>\n                  </div>\n                  <span\n                    ui-badge\n                    wrap\n                    [variant]=\"initial1Completed() ? 'outline' : 'secondary'\"\n                    [class]=\"checkBadgeClass(initial1Completed())\"\n                  >\n                    {{ initial1Completed() ? 'Done' : 'Click to jump' }}\n                  </span>\n                </button>\n\n                <button\n                  type=\"button\"\n                  class=\"border-border/80 hover:bg-muted/40 flex w-full items-center justify-between rounded-lg border p-2.5 text-left text-xs transition-colors\"\n                  (click)=\"scrollToInitial2()\"\n                >\n                  <div class=\"flex items-center gap-2.5\">\n                    <div [class]=\"checkDotClass(initial2Completed())\">\n                      @if (initial2Completed()) {\n                        <lucide-icon [img]=\"Check\" class=\"size-3\" />\n                      } @else {\n                        <span>2</span>\n                      }\n                    </div>\n                    <div>\n                      <p class=\"text-foreground font-medium\">Initial Section 4 (Move-Out)</p>\n                      <p class=\"text-muted-foreground text-xs\">Acknowledges 60-day notice &amp; cleaning</p>\n                    </div>\n                  </div>\n                  <span\n                    ui-badge\n                    wrap\n                    [variant]=\"initial2Completed() ? 'outline' : 'secondary'\"\n                    [class]=\"checkBadgeClass(initial2Completed())\"\n                  >\n                    {{ initial2Completed() ? 'Done' : 'Click to jump' }}\n                  </span>\n                </button>\n\n                <div [class]=\"signRowClass\">\n                  <div class=\"flex items-center gap-2.5\">\n                    <div [class]=\"checkDotClass(isSigned(), true)\">\n                      @if (isSigned()) {\n                        <lucide-icon [img]=\"Check\" class=\"size-3\" />\n                      } @else {\n                        <span>3</span>\n                      }\n                    </div>\n                    <div>\n                      <p class=\"text-foreground font-medium\">Sign Full Agreement</p>\n                      <p class=\"text-muted-foreground text-xs\">Execute legal lease contract</p>\n                    </div>\n                  </div>\n                  <span ui-badge wrap [variant]=\"isSigned() ? 'outline' : 'secondary'\" [class]=\"signBadgeClass\">\n                    {{ isSigned() ? 'Executed' : 'Pending' }}\n                  </span>\n                </div>\n              </div>\n            </div>\n\n            <div ui-card class=\"border-border bg-card shadow-xs\">\n              <div ui-card-header class=\"p-4 pb-2\">\n                <h3 ui-card-title class=\"text-sm font-semibold\">Electronic Signature Preview</h3>\n                <p ui-card-description class=\"text-xs\">Adopt your legal signature typography</p>\n              </div>\n              <div ui-card-content class=\"space-y-4 p-4 pt-2\">\n                <div class=\"bg-muted/60 grid grid-cols-3 gap-1.5 rounded-lg p-1\">\n                  <button type=\"button\" [class]=\"fontTabClass('serif')\" (click)=\"signatureFont.set('serif')\">\n                    Formal Serif\n                  </button>\n                  <button type=\"button\" [class]=\"fontTabClass('script')\" (click)=\"signatureFont.set('script')\">\n                    Script Elegance\n                  </button>\n                  <button type=\"button\" [class]=\"fontTabClass('sans')\" (click)=\"signatureFont.set('sans')\">\n                    Modern Sans\n                  </button>\n                </div>\n\n                <div class=\"border-border bg-muted/20 relative rounded-lg border p-4 text-center\">\n                  <p class=\"text-muted-foreground text-xs font-medium\">Adopted Signature</p>\n                  <div class=\"my-2 flex min-h-[48px] items-center justify-center\">\n                    <span [class]=\"signaturePreviewClass\">{{ signerName() }}</span>\n                  </div>\n                  <div class=\"text-muted-foreground flex items-center justify-center gap-1.5 font-mono text-xs\">\n                    <lucide-icon [img]=\"ShieldCheck\" class=\"text-success size-3.5\" />\n                    <span>256-Bit eIDAS / ESIGN Certified</span>\n                  </div>\n                </div>\n\n                <label class=\"text-muted-foreground flex cursor-pointer items-start gap-2.5 text-xs\">\n                  <input\n                    type=\"checkbox\"\n                    [checked]=\"eConsentAgreed()\"\n                    [disabled]=\"isSigned()\"\n                    (change)=\"eConsentAgreed.set(!eConsentAgreed())\"\n                    class=\"text-primary focus:ring-ring border-border mt-0.5 size-4 rounded\"\n                  />\n                  <span>\n                    I agree to transact electronically and confirm this electronic signature legally binds me under U.S.\n                    ESIGN Act and ORS Chapter 90.\n                  </span>\n                </label>\n\n                <div class=\"space-y-2 pt-2\">\n                  @if (!isSigned()) {\n                    <button\n                      ui-button\n                      type=\"button\"\n                      class=\"w-full gap-2 text-sm font-semibold shadow-xs\"\n                      [disabled]=\"!canSign()\"\n                      (click)=\"signAgreement()\"\n                    >\n                      <lucide-icon [img]=\"PenTool\" class=\"size-4\" />\n                      <span>Sign &amp; Finalize Agreement</span>\n                    </button>\n                  } @else {\n                    <div class=\"border-success/30 bg-success/10 space-y-2 rounded-lg border p-3.5 text-center\">\n                      <div class=\"text-success flex items-center justify-center gap-1.5 text-xs font-semibold\">\n                        <lucide-icon [img]=\"CheckCircle2\" class=\"size-4\" />\n                        <span>Lease Executed Successfully!</span>\n                      </div>\n                      <p class=\"text-muted-foreground text-xs\">\n                        A copy of the countersigned PDF has been securely dispatched to your verified email.\n                      </p>\n                      <button\n                        ui-button\n                        aria-label=\"Download attachment\"\n                        size=\"sm\"\n                        class=\"mt-2 w-full gap-1.5 text-xs\"\n                        (click)=\"handleDownload()\"\n                      >\n                        <lucide-icon [img]=\"Download\" class=\"size-3.5\" />\n                        <span>Download Signed PDF</span>\n                      </button>\n                    </div>\n                  }\n                  @if (!isSigned() && !canSign()) {\n                    <p class=\"text-muted-foreground text-center text-xs\">{{ signHint() }}</p>\n                  }\n                </div>\n              </div>\n            </div>\n\n            <div class=\"border-border bg-card/60 text-muted-foreground space-y-1.5 rounded-lg border p-3 text-xs\">\n              <div class=\"text-foreground flex items-center gap-1.5 font-medium\">\n                <lucide-icon [img]=\"Lock\" class=\"text-primary size-3.5\" />\n                <span>Cryptographic Tamper-Proof Audit Trail</span>\n              </div>\n              <p class=\"leading-relaxed\">\n                Every initial and signature event is stamped with SHA-256 integrity hash, RFC 3161 trusted timestamp,\n                and logged in the immutable lease registry ledger.\n              </p>\n            </div>\n          </aside>\n        </div>\n      </div>\n    </div>\n  `,\n})\nexport class UiLeaseAgreementSignComponent {\n  protected readonly AlertCircle = AlertCircle\n  protected readonly BadgeCheck = BadgeCheck\n  protected readonly Building2 = Building2\n  protected readonly Check = Check\n  protected readonly CheckCircle2 = CheckCircle2\n  protected readonly Download = Download\n  protected readonly Lock = Lock\n  protected readonly Pen = Pen\n  protected readonly PenTool = PenTool\n  protected readonly Printer = Printer\n  protected readonly RotateCcw = RotateCcw\n  protected readonly ShieldCheck = ShieldCheck\n\n  @Input() set initialSigned(v: boolean) {\n    if (v) {\n      this.isSigned.set(true)\n      this.initial1Completed.set(true)\n      this.initial2Completed.set(true)\n    }\n  }\n  @Input() set initialInitialsCompleted(v: boolean) {\n    if (v) {\n      this.initial1Completed.set(true)\n      this.initial2Completed.set(true)\n    }\n  }\n  @Input('class') className?: string\n\n  readonly initial1Completed = signal(false)\n  readonly initial2Completed = signal(false)\n  readonly isSigned = signal(false)\n  readonly signerName = signal('Elena Rostova')\n  readonly signatureFont = signal<SignatureFont>('serif')\n  readonly eConsentAgreed = signal(true)\n  readonly downloadSuccess = signal(false)\n  private downloadTimer: ReturnType<typeof setTimeout> | undefined\n\n  readonly completedCount = computed(\n    () => (this.initial1Completed() ? 1 : 0) + (this.initial2Completed() ? 1 : 0) + (this.isSigned() ? 1 : 0),\n  )\n  readonly pendingCount = computed(() => (this.initial1Completed() ? 0 : 1) + (this.initial2Completed() ? 0 : 1))\n  readonly canSign = computed(\n    () => this.initial1Completed() && this.initial2Completed() && this.eConsentAgreed() && !this.isSigned(),\n  )\n  readonly signHint = computed(() =>\n    !this.initial1Completed() || !this.initial2Completed()\n      ? 'Please complete all initial checkpoints above before signing.'\n      : 'Please check the electronic consent box.',\n  )\n\n  get rootClass(): string {\n    return cn('bg-background text-foreground w-full', this.className)\n  }\n\n  get initial1BoxClass(): string {\n    return cn(\n      'rounded-lg border p-4 transition-colors duration-200',\n      this.initial1Completed()\n        ? 'border-success/40 bg-success/5'\n        : 'border-warning/50 bg-warning/5 ring-warning/20 dark:bg-warning/10 ring-1',\n    )\n  }\n\n  get initial2BoxClass(): string {\n    return cn(\n      'rounded-lg border p-4 transition-colors duration-200',\n      this.initial2Completed()\n        ? 'border-success/40 bg-success/5'\n        : 'border-warning/50 bg-warning/5 ring-warning/20 dark:bg-warning/10 ring-1',\n    )\n  }\n\n  get initial1BtnClass(): string {\n    return cn(\n      'shrink-0 gap-2 text-xs font-medium',\n      this.initial1Completed()\n        ? 'border-success/40 text-success hover:bg-success/10 text-success'\n        : 'bg-warning hover:bg-warning/90 bg-warning dark:hover:bg-warning text-white',\n    )\n  }\n\n  get initial2BtnClass(): string {\n    return cn(\n      'shrink-0 gap-2 text-xs font-medium',\n      this.initial2Completed()\n        ? 'border-success/40 text-success hover:bg-success/10 text-success'\n        : 'bg-warning hover:bg-warning/90 bg-warning dark:hover:bg-warning text-white',\n    )\n  }\n\n  get tenantBoxClass(): string {\n    return cn(\n      'rounded-lg border p-4 transition-colors duration-200',\n      this.isSigned() ? 'border-success/40 bg-success/5' : 'border-border bg-muted/10 border-dashed',\n    )\n  }\n\n  get tenantPreviewClass(): string {\n    return cn(\n      'my-3 rounded-md border p-3 text-center transition-colors',\n      this.isSigned() ? 'bg-card border-success/40' : 'border-muted-foreground/30 bg-muted/20 border-dashed',\n    )\n  }\n\n  get signaturePreviewClass(): string {\n    return cn(\n      'text-foreground text-2xl select-none',\n      this.signatureFont() === 'serif' && 'font-medium tracking-wide italic',\n      this.signatureFont() === 'script' && 'font-medium tracking-widest italic',\n      this.signatureFont() === 'sans' && 'font-semibold tracking-tight',\n    )\n  }\n\n  get signRowClass(): string {\n    return cn(\n      'flex items-center justify-between rounded-lg border p-2.5 text-xs',\n      this.isSigned() ? 'border-success/40 bg-success/5' : 'border-border/80 bg-card',\n    )\n  }\n\n  get signBadgeClass(): string {\n    return cn('text-xs', this.isSigned() ? 'border-success/30 text-success' : 'text-muted-foreground')\n  }\n\n  checkDotClass(done: boolean, muted = false): string {\n    return cn(\n      'flex size-5 items-center justify-center rounded-full text-xs font-semibold',\n      done\n        ? 'bg-success bg-success text-white'\n        : muted\n          ? 'bg-muted text-muted-foreground'\n          : 'bg-warning/20 text-warning',\n    )\n  }\n\n  checkBadgeClass(done: boolean): string {\n    return cn('text-xs', done ? 'border-success/30 text-success' : 'text-warning')\n  }\n\n  fontTabClass(font: SignatureFont): string {\n    return cn(\n      'rounded-md py-1 text-center text-xs font-medium transition-colors',\n      this.signatureFont() === font\n        ? 'bg-card text-foreground shadow-xs'\n        : 'text-muted-foreground hover:text-foreground',\n    )\n  }\n\n  toggleInitial1(): void {\n    if (this.isSigned()) return\n    this.initial1Completed.update((v) => !v)\n  }\n\n  toggleInitial2(): void {\n    if (this.isSigned()) return\n    this.initial2Completed.update((v) => !v)\n  }\n\n  signAgreement(): void {\n    if (!this.canSign()) return\n    this.isSigned.set(true)\n  }\n\n  resetWorkflow(): void {\n    this.initial1Completed.set(false)\n    this.initial2Completed.set(false)\n    this.isSigned.set(false)\n    this.downloadSuccess.set(false)\n  }\n\n  handleDownload(): void {\n    this.downloadSuccess.set(true)\n    clearTimeout(this.downloadTimer)\n    this.downloadTimer = setTimeout(() => this.downloadSuccess.set(false), 2500)\n  }\n\n  handlePrint(): void {\n    if (typeof window !== 'undefined') window.print()\n  }\n\n  scrollToInitial1(): void {\n    const el = document.getElementById('initial-marker-1') as HTMLElement | null\n    el?.scrollIntoView?.({ behavior: 'smooth', block: 'center' })\n  }\n\n  scrollToInitial2(): void {\n    const el = document.getElementById('initial-marker-2') as HTMLElement | null\n    el?.scrollIntoView?.({ behavior: 'smooth', block: 'center' })\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/lease-agreement-sign/lease-agreement-sign.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/lease-agreement-sign/index.ts",
      "content": "export { UiLeaseAgreementSignComponent, type SignatureFont } from './lease-agreement-sign.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/lease-agreement-sign/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/separator.json"
  ],
  "description": "DocuSign-style digital residential lease agreement signature and review workflow with terms summary, interactive initial checkpoints, sticky signature action sidebar, and cryptographic audit execution.",
  "categories": [
    "real-estate",
    "hospitality",
    "app"
  ]
}