{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "exit-interview-survey",
  "title": "Exit Interview Survey",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/exit-interview-survey/exit-interview-survey.component.ts",
      "content": "// Structured employee offboarding survey with department sentiment analysis, departure\n// drivers, 5-star experience ratings, qualitative feedback textareas, and a knowledge\n// handover & asset return checklist. Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, Input, computed, signal } from '@angular/core'\nimport {\n  Award,\n  Building2,\n  Calendar,\n  CheckCircle2,\n  ClipboardCheck,\n  Compass,\n  FileCheck,\n  FileCode2,\n  HeartHandshake,\n  KeyRound,\n  Laptop,\n  Lock,\n  LucideAngularModule,\n  MessageSquareQuote,\n  Rocket,\n  RotateCcw,\n  Send,\n  ShieldCheck,\n  Star,\n  TrendingUp,\n  UserCheck,\n  type LucideIconData,\n} from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiAvatarComponent, UiAvatarFallbackComponent, UiAvatarImageComponent } from '@/ui/avatar/avatar.component'\nimport { UiBadgeComponent, type BadgeVariant } from '@/ui/badge/badge.component'\nimport { UiButtonComponent } from '@/ui/button/button.component'\nimport {\n  UiCardComponent,\n  UiCardContentComponent,\n  UiCardDescriptionComponent,\n  UiCardFooterComponent,\n  UiCardHeaderComponent,\n  UiCardTitleComponent,\n} from '@/ui/card/card.component'\nimport { UiCheckboxComponent } from '@/ui/checkbox/checkbox.component'\nimport { UiLabelComponent } from '@/ui/label/label.component'\nimport { UiProgressComponent } from '@/ui/progress/progress.component'\nimport { UiRadioGroupComponent, UiRadioGroupItemComponent } from '@/ui/radio-group/radio-group.component'\nimport { UiRatingComponent } from '@/ui/rating/rating.component'\nimport { UiSeparatorComponent } from '@/ui/separator/separator.component'\nimport { UiTextareaComponent } from '@/ui/textarea/textarea.component'\n\ninterface DepartureReason {\n  value: string\n  label: string\n  description: string\n  icon: LucideIconData\n}\n\nconst departureReasons: DepartureReason[] = [\n  {\n    value: 'career-growth',\n    label: 'Career Growth & Promotion',\n    description: 'Seeking broader technical leadership scope, faster progression, or new architectural challenges.',\n    icon: TrendingUp,\n  },\n  {\n    value: 'compensation',\n    label: 'Compensation / Total Rewards',\n    description: 'Competitive market offers, higher base salary band, equity incentives, or bonus structures.',\n    icon: Award,\n  },\n  {\n    value: 'relocation',\n    label: 'Relocation & Remote Freedom',\n    description: 'Geographic move, personal relocation, or seeking broader international and async flexibility.',\n    icon: Building2,\n  },\n  {\n    value: 'work-life',\n    label: 'Work-Life Balance',\n    description: 'Need for sustainable working cadence, reduced on-call intensity, and dedicated personal time.',\n    icon: HeartHandshake,\n  },\n  {\n    value: 'leadership',\n    label: 'Leadership & Direction',\n    description: 'Strategic alignment with executive roadmap, product vision, or communication cadence.',\n    icon: Compass,\n  },\n  {\n    value: 'venture',\n    label: 'Starting Own Venture',\n    description: 'Launching an independent technical startup, consulting practice, or entrepreneurial venture.',\n    icon: Rocket,\n  },\n]\n\nexport type RatingDimensionId = 'management' | 'collaboration' | 'compensation' | 'culture' | 'flexibility'\n\ninterface RatingDimension {\n  id: RatingDimensionId\n  title: string\n  description: string\n  category: string\n}\n\nconst ratingDimensions: RatingDimension[] = [\n  {\n    id: 'management',\n    title: 'Management & Leadership',\n    description: 'Direct manager support, transparent 1:1 mentorship, goal clarity, and career advocacy.',\n    category: 'Leadership',\n  },\n  {\n    id: 'collaboration',\n    title: 'Team Collaboration',\n    description: 'Cross-functional synergy, peer code review quality, mutual trust, and psychological safety.',\n    category: 'Team Dynamics',\n  },\n  {\n    id: 'compensation',\n    title: 'Compensation & Benefits',\n    description: 'Base salary competitiveness, equity appreciation, health coverage, and wellness allowances.',\n    category: 'Total Rewards',\n  },\n  {\n    id: 'culture',\n    title: 'Engineering Culture',\n    description: 'Architectural standards, modern tooling, automated testing, CI/CD speed, and technical autonomy.',\n    category: 'Craft & Standards',\n  },\n  {\n    id: 'flexibility',\n    title: 'Work-Life Flexibility',\n    description: 'Async-first communication, sustainable sprint planning, and reasonable on-call expectations.',\n    category: 'Well-being',\n  },\n]\n\ninterface ReturnOption {\n  value: string\n  label: string\n  description: string\n  badge: string\n  badgeVariant: BadgeVariant\n}\n\nconst returnOptions: ReturnOption[] = [\n  {\n    value: 'yes',\n    label: 'Yes, definitely open',\n    description: 'Strongly open to returning for future leadership or staff-level architectural initiatives.',\n    badge: 'Alumni Priority',\n    badgeVariant: 'success',\n  },\n  {\n    value: 'maybe',\n    label: 'Maybe, under right conditions',\n    description: 'Would consider returning under different organizational structure or roadmap scope.',\n    badge: 'Conditionally Open',\n    badgeVariant: 'secondary',\n  },\n  {\n    value: 'no',\n    label: 'No, pursuing new pathways',\n    description: 'Focused on long-term career growth in independent ventures or other sectors.',\n    badge: 'New Trajectory',\n    badgeVariant: 'outline',\n  },\n]\n\nexport type HandoverKey = 'codebase' | 'architecture' | 'credentials' | 'equipment'\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-exit-interview-survey, [ui-exit-interview-survey]',\n  standalone: true,\n  // React renders the root <div> itself: the host stays out of layout and `class` goes to the root.\n  host: { '[attr.class]': '\"contents\"' },\n  imports: [\n    LucideAngularModule,\n    UiAvatarComponent,\n    UiAvatarFallbackComponent,\n    UiAvatarImageComponent,\n    UiBadgeComponent,\n    UiButtonComponent,\n    UiCardComponent,\n    UiCardContentComponent,\n    UiCardDescriptionComponent,\n    UiCardFooterComponent,\n    UiCardHeaderComponent,\n    UiCardTitleComponent,\n    UiCheckboxComponent,\n    UiLabelComponent,\n    UiProgressComponent,\n    UiRadioGroupComponent,\n    UiRadioGroupItemComponent,\n    UiRatingComponent,\n    UiSeparatorComponent,\n    UiTextareaComponent,\n  ],\n  template: `\n    <div data-slot=\"exit-interview-survey\" [class]=\"rootClass\">\n      <!-- Header & Employee Context Card -->\n      <div ui-card class=\"border-border bg-card shadow-xs\">\n        <div ui-card-content class=\"p-6\">\n          <div class=\"flex flex-col gap-6 lg:flex-row lg:items-center lg:justify-between\">\n            <div class=\"flex flex-col gap-4 sm:flex-row sm:items-center\">\n              <ui-avatar class=\"border-border size-16 shrink-0 border sm:size-20\">\n                <ui-avatar-image\n                  src=\"https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=200&auto=format&fit=crop&q=80\"\n                  alt=\"Elena Rostova\"\n                />\n                <ui-avatar-fallback>ER</ui-avatar-fallback>\n              </ui-avatar>\n              <div class=\"space-y-1.5\">\n                <div class=\"flex flex-wrap items-center gap-2\">\n                  <h1 class=\"text-foreground text-xl font-bold tracking-tight sm:text-2xl\">\n                    Employee Exit Survey & Offboarding Review\n                  </h1>\n                </div>\n                <p class=\"text-muted-foreground text-sm font-medium\">\n                  Elena Rostova · Senior Staff Engineer · 3.5 Years Tenure\n                </p>\n                <div class=\"flex flex-wrap items-center gap-2 pt-1 text-xs\">\n                  <span ui-badge variant=\"secondary\" class=\"font-medium\"> Engineering · Core Platform </span>\n                  <span ui-badge variant=\"outline\" class=\"gap-1 text-xs font-normal\">\n                    <lucide-icon [img]=\"Calendar\" class=\"size-3\" />\n                    Final Day: Sep 30, 2026\n                  </span>\n                  <span class=\"text-muted-foreground\">\n                    Manager: <strong class=\"text-foreground font-medium\">Marcus Vance</strong>\n                  </span>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"flex flex-wrap items-center gap-3 sm:self-start lg:self-center\">\n              @if (!isSubmitted()) {\n                <button\n                  ui-button\n                  size=\"sm\"\n                  class=\"bg-primary text-primary-foreground gap-2 shadow-xs\"\n                  (click)=\"handleSubmit()\"\n                >\n                  <lucide-icon [img]=\"Send\" class=\"size-4\" />\n                  Submit Survey\n                </button>\n              } @else {\n                <button ui-button variant=\"outline\" size=\"sm\" class=\"gap-2 shadow-xs\" (click)=\"handleReset()\">\n                  <lucide-icon [img]=\"RotateCcw\" class=\"size-4\" />\n                  Edit Survey Answers\n                </button>\n              }\n            </div>\n          </div>\n\n          <div class=\"border-border/80 bg-muted/40 mt-6 flex items-start gap-3 rounded-lg border p-3.5 text-xs\">\n            <lucide-icon [img]=\"ShieldCheck\" class=\"text-primary mt-0.5 size-4 shrink-0\" />\n            <div class=\"space-y-0.5\">\n              <p class=\"text-foreground font-semibold\">Strictly Confidential People Ops Review</p>\n              <p class=\"text-muted-foreground leading-relaxed\">\n                Your candid responses are confidential and used exclusively by People Ops to improve company culture,\n                leadership effectiveness, and engineering workflows. Summary insights are aggregated and anonymized.\n              </p>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      @if (isSubmitted()) {\n        <div\n          class=\"border-success/30 bg-success/10 text-foreground dark:text-foreground flex items-start gap-3 rounded-xl border p-4 shadow-xs\"\n        >\n          <lucide-icon [img]=\"CheckCircle2\" class=\"text-success mt-0.5 size-5 shrink-0\" />\n          <div class=\"flex-1 space-y-1\">\n            <div class=\"flex flex-wrap items-center justify-between gap-2\">\n              <p class=\"text-sm font-semibold\">Exit Survey Successfully Submitted</p>\n              <span class=\"font-mono text-xs font-medium\">Receipt #{{ submissionId }}</span>\n            </div>\n            <p class=\"text-success text-xs leading-relaxed\">\n              Thank you for your dedicated 3.5 years of service and leadership. Your constructive feedback has been\n              securely logged for the People Ops quarterly retention review and alumni network registration.\n            </p>\n          </div>\n        </div>\n      }\n\n      <!-- Department Sentiment & Handover Scorecard Strip -->\n      <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n        <div ui-card class=\"border-border bg-card shadow-xs\">\n          <div ui-card-header class=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n            <h3 ui-card-title class=\"text-muted-foreground text-xs font-medium\">Overall Experience Score</h3>\n            <lucide-icon [img]=\"Star\" class=\"text-warning size-4\" />\n          </div>\n          <div ui-card-content class=\"space-y-2\">\n            <div class=\"flex items-baseline gap-2\">\n              <span class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums sm:text-3xl\">\n                {{ averageRating() }}\n              </span>\n              <span class=\"text-muted-foreground text-xs font-medium\">/ 5.0</span>\n            </div>\n            <div class=\"space-y-1\">\n              <div ui-progress [value]=\"sentimentPercentage()\" class=\"h-1.5 w-full\"></div>\n              <div class=\"flex items-center justify-between text-xs\">\n                <span class=\"text-success font-medium\">+0.4 vs Dept Avg</span>\n                <span class=\"text-muted-foreground font-mono tabular-nums\">{{ sentimentPercentage() }}%</span>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div ui-card class=\"border-border bg-card shadow-xs\">\n          <div ui-card-header class=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n            <h3 ui-card-title class=\"text-muted-foreground text-xs font-medium\">Primary Departure Driver</h3>\n            <lucide-icon [img]=\"Compass\" class=\"text-primary size-4\" />\n          </div>\n          <div ui-card-content class=\"space-y-1.5\">\n            <div class=\"text-foreground text-base font-bold tracking-tight sm:text-lg\">Career Growth</div>\n            <p class=\"text-muted-foreground text-xs leading-relaxed\">\n              Targeting Principal/Architect roles in cloud infrastructure.\n            </p>\n          </div>\n        </div>\n\n        <div ui-card class=\"border-border bg-card shadow-xs\">\n          <div ui-card-header class=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n            <h3 ui-card-title class=\"text-muted-foreground text-xs font-medium\">Knowledge Handover</h3>\n            <lucide-icon [img]=\"ClipboardCheck\" class=\"text-primary size-4\" />\n          </div>\n          <div ui-card-content class=\"space-y-2\">\n            <div class=\"flex items-baseline gap-2\">\n              <span class=\"text-foreground text-2xl font-bold tracking-tight tabular-nums sm:text-3xl\">\n                {{ handoverPercentage() }}%\n              </span>\n              <span class=\"text-muted-foreground text-xs font-medium\">({{ handoverCompletedCount() }} of 4 tasks)</span>\n            </div>\n            <div class=\"space-y-1\">\n              <div ui-progress [value]=\"handoverPercentage()\" class=\"h-1.5 w-full\"></div>\n              <p class=\"text-muted-foreground text-xs\">IT asset return pending</p>\n            </div>\n          </div>\n        </div>\n\n        <div ui-card class=\"border-border bg-card shadow-xs\">\n          <div ui-card-header class=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n            <h3 ui-card-title class=\"text-muted-foreground text-xs font-medium\">Alumni Status</h3>\n            <lucide-icon [img]=\"UserCheck\" class=\"text-success size-4\" />\n          </div>\n          <div ui-card-content class=\"space-y-1.5\">\n            <div class=\"flex items-center gap-1.5\">\n              <span ui-badge variant=\"success\" class=\"text-xs font-semibold\">Eligible for Re-Hire</span>\n            </div>\n            <p class=\"text-muted-foreground text-xs leading-relaxed\">\n              Registered for Alumni Leadership Network & fast-track referrals.\n            </p>\n          </div>\n        </div>\n      </div>\n\n      <!-- SECTION 1: Primary Reason for Departure -->\n      <div ui-card class=\"border-border bg-card shadow-xs\">\n        <div ui-card-header class=\"pb-4\">\n          <div class=\"flex items-center gap-2\">\n            <div class=\"bg-primary/10 text-primary flex size-7 items-center justify-center rounded-md\">\n              <lucide-icon [img]=\"Compass\" class=\"size-4\" />\n            </div>\n            <div>\n              <h3 ui-card-title class=\"text-base font-semibold\">1. Primary Reason for Departure</h3>\n              <p ui-card-description class=\"text-xs\">\n                Select the primary factor that most heavily influenced your decision to pursue new opportunities.\n              </p>\n            </div>\n          </div>\n        </div>\n\n        <div ui-card-content class=\"space-y-4\">\n          <ui-radio-group\n            [value]=\"primaryReason()\"\n            (valueChange)=\"primaryReason.set($event)\"\n            class=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\"\n          >\n            @for (item of reasons; track item.value) {\n              <label\n                [attr.for]=\"'reason-' + item.value\"\n                [class]=\"optionCardClass(primaryReason() === item.value)\"\n              >\n                <ui-radio-group-item [id]=\"'reason-' + item.value\" [value]=\"item.value\" class=\"mt-0.5\" />\n                <div class=\"space-y-1\">\n                  <div class=\"flex items-center gap-1.5\">\n                    <span class=\"text-foreground text-xs leading-none font-semibold\">{{ item.label }}</span>\n                  </div>\n                  <p class=\"text-muted-foreground text-xs leading-relaxed\">{{ item.description }}</p>\n                </div>\n              </label>\n            }\n          </ui-radio-group>\n\n          <div class=\"space-y-2 pt-2\">\n            <label ui-label for=\"departure-notes\" class=\"text-xs font-medium\">\n              Additional Context on Your Departure Decision (Optional)\n            </label>\n            <ui-textarea\n              id=\"departure-notes\"\n              [value]=\"departureNotes()\"\n              (valueChange)=\"departureNotes.set($event)\"\n              [rows]=\"2\"\n              placeholder=\"Share specific context regarding your career progression, next steps, or decision drivers...\"\n              class=\"text-xs\"\n            />\n          </div>\n        </div>\n      </div>\n\n      <!-- SECTION 2: Experience & Culture Ratings -->\n      <div ui-card class=\"border-border bg-card shadow-xs\">\n        <div ui-card-header class=\"pb-4\">\n          <div class=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n            <div class=\"flex items-center gap-2\">\n              <div class=\"bg-primary/10 text-primary flex size-7 items-center justify-center rounded-md\">\n                <lucide-icon [img]=\"Star\" class=\"size-4\" />\n              </div>\n              <div>\n                <h3 ui-card-title class=\"text-base font-semibold\">2. Experience & Culture Ratings</h3>\n                <p ui-card-description class=\"text-xs\">\n                  Rate each dimension of your experience on a scale of 1 (Needs Serious Improvement) to 5 (Outstanding).\n                </p>\n              </div>\n            </div>\n            <span ui-badge variant=\"outline\" class=\"w-fit text-xs font-medium tabular-nums\">\n              Average: {{ averageRating() }} / 5.0\n            </span>\n          </div>\n        </div>\n\n        <div ui-card-content class=\"space-y-4\">\n          <div class=\"divide-border divide-y rounded-lg border\">\n            @for (dim of dimensions; track dim.id) {\n              <div\n                class=\"hover:bg-muted/20 flex flex-col gap-3 p-4 transition-colors sm:flex-row sm:items-center sm:justify-between\"\n              >\n                <div class=\"space-y-1\">\n                  <div class=\"flex items-center gap-2\">\n                    <span class=\"text-foreground text-sm font-semibold\">{{ dim.title }}</span>\n                    <span ui-badge variant=\"secondary\" class=\"text-xs font-normal\">{{ dim.category }}</span>\n                  </div>\n                  <p class=\"text-muted-foreground max-w-xl text-xs leading-relaxed\">{{ dim.description }}</p>\n                </div>\n                <div class=\"flex shrink-0 items-center gap-3 sm:self-center\">\n                  <ui-rating\n                    [value]=\"ratingValue(dim.id)\"\n                    (valueChange)=\"setRating(dim.id, $event)\"\n                    [max]=\"5\"\n                    density=\"comfortable\"\n                    size=\"small\"\n                  />\n                  <span class=\"text-foreground min-w-8 text-right font-mono text-xs font-semibold tabular-nums\">\n                    {{ ratingValue(dim.id) }} / 5\n                  </span>\n                </div>\n              </div>\n            }\n          </div>\n        </div>\n      </div>\n\n      <!-- SECTION 3: Qualitative In-Depth Feedback -->\n      <div ui-card class=\"border-border bg-card shadow-xs\">\n        <div ui-card-header class=\"pb-4\">\n          <div class=\"flex items-center gap-2\">\n            <div class=\"bg-primary/10 text-primary flex size-7 items-center justify-center rounded-md\">\n              <lucide-icon [img]=\"MessageSquareQuote\" class=\"size-4\" />\n            </div>\n            <div>\n              <h3 ui-card-title class=\"text-base font-semibold\">3. Qualitative In-Depth Feedback</h3>\n              <p ui-card-description class=\"text-xs\">\n                Detailed reflections to guide organizational enhancements and executive leadership planning.\n              </p>\n            </div>\n          </div>\n        </div>\n\n        <div ui-card-content class=\"space-y-5\">\n          <div class=\"space-y-2\">\n            <label ui-label for=\"enjoyed-most\" class=\"text-foreground text-xs font-semibold tracking-wide\">\n              What did you enjoy most about working at the company?\n            </label>\n            <ui-textarea\n              id=\"enjoyed-most\"\n              [value]=\"enjoyedMost()\"\n              (valueChange)=\"enjoyedMost.set($event)\"\n              [rows]=\"3\"\n              placeholder=\"Highlight positive aspects of your team, projects, technical challenges, or company traditions...\"\n              class=\"text-xs leading-relaxed\"\n            />\n          </div>\n\n          <ui-separator />\n\n          <div class=\"space-y-2\">\n            <label ui-label for=\"to-improve\" class=\"text-foreground text-xs font-semibold tracking-wide\">\n              What is one thing the leadership team should immediately improve?\n            </label>\n            <ui-textarea\n              id=\"to-improve\"\n              [value]=\"toImprove()\"\n              (valueChange)=\"toImprove.set($event)\"\n              [rows]=\"3\"\n              placeholder=\"Suggest actionable improvements for strategy, tooling, engineering velocity, or team communication...\"\n              class=\"text-xs leading-relaxed\"\n            />\n          </div>\n\n          <ui-separator />\n\n          <div class=\"space-y-3\">\n            <label ui-label class=\"text-foreground text-xs font-semibold tracking-wide\">\n              Would you consider returning to the company in the future?\n            </label>\n            <ui-radio-group\n              [value]=\"returnWillingness()\"\n              (valueChange)=\"returnWillingness.set($event)\"\n              class=\"grid grid-cols-1 gap-3 sm:grid-cols-3\"\n            >\n              @for (opt of returnOpts; track opt.value) {\n                <label\n                  [attr.for]=\"'return-' + opt.value\"\n                  [class]=\"optionCardClass(returnWillingness() === opt.value)\"\n                >\n                  <ui-radio-group-item [id]=\"'return-' + opt.value\" [value]=\"opt.value\" class=\"mt-0.5\" />\n                  <div class=\"space-y-1.5\">\n                    <div class=\"flex items-center gap-1.5\">\n                      <span class=\"text-foreground text-xs font-semibold\">{{ opt.label }}</span>\n                    </div>\n                    <p class=\"text-muted-foreground text-xs leading-relaxed\">{{ opt.description }}</p>\n                    <span ui-badge [variant]=\"opt.badgeVariant\" class=\"text-xs font-normal\">{{ opt.badge }}</span>\n                  </div>\n                </label>\n              }\n            </ui-radio-group>\n          </div>\n        </div>\n      </div>\n\n      <!-- SECTION 4: Knowledge Handover & Asset Return Checklist -->\n      <div ui-card class=\"border-border bg-card shadow-xs\">\n        <div ui-card-header class=\"pb-4\">\n          <div class=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n            <div class=\"flex items-center gap-2\">\n              <div class=\"bg-primary/10 text-primary flex size-7 items-center justify-center rounded-md\">\n                <lucide-icon [img]=\"ClipboardCheck\" class=\"size-4\" />\n              </div>\n              <div>\n                <h3 ui-card-title class=\"text-base font-semibold\">4. Knowledge Handover & Asset Return Checklist</h3>\n                <p ui-card-description class=\"text-xs\">\n                  Administrative and technical transition milestones prior to official offboarding date.\n                </p>\n              </div>\n            </div>\n            <span\n              ui-badge\n              [variant]=\"handoverCompletedCount() === 4 ? 'success' : 'secondary'\"\n              class=\"w-fit text-xs font-medium tabular-nums\"\n            >\n              {{ handoverCompletedCount() }} of 4 Completed ({{ handoverPercentage() }}%)\n            </span>\n          </div>\n        </div>\n\n        <div ui-card-content class=\"space-y-4\">\n          <div class=\"divide-border divide-y rounded-lg border\">\n            <div class=\"hover:bg-muted/20 flex items-start gap-3.5 p-4 transition-colors\">\n              <ui-checkbox\n                id=\"ho-codebase\"\n                [checked]=\"handover().codebase\"\n                (checkedChange)=\"toggleHandover('codebase', $event)\"\n                class=\"mt-0.5\"\n              />\n              <div class=\"space-y-1\">\n                <div class=\"flex items-center gap-2\">\n                  <lucide-icon [img]=\"FileCode2\" class=\"text-primary size-4\" />\n                  <label ui-label for=\"ho-codebase\" class=\"text-foreground cursor-pointer text-xs font-semibold\">\n                    Codebase repository ownership transferred\n                  </label>\n                </div>\n                <p class=\"text-muted-foreground text-xs leading-relaxed\">\n                  Transferred GitHub admin rights, codeowners assignments, and CI/CD secret manager access to incoming\n                  lead (Liam Vance).\n                </p>\n              </div>\n            </div>\n\n            <div class=\"hover:bg-muted/20 flex items-start gap-3.5 p-4 transition-colors\">\n              <ui-checkbox\n                id=\"ho-architecture\"\n                [checked]=\"handover().architecture\"\n                (checkedChange)=\"toggleHandover('architecture', $event)\"\n                class=\"mt-0.5\"\n              />\n              <div class=\"space-y-1\">\n                <div class=\"flex items-center gap-2\">\n                  <lucide-icon [img]=\"FileCheck\" class=\"text-primary size-4\" />\n                  <label ui-label for=\"ho-architecture\" class=\"text-foreground cursor-pointer text-xs font-semibold\">\n                    Architecture documentation updated\n                  </label>\n                </div>\n                <p class=\"text-muted-foreground text-xs leading-relaxed\">\n                  Core system architecture diagrams, service topology maps, and disaster recovery runbooks completed in\n                  Notion & DevPortal.\n                </p>\n              </div>\n            </div>\n\n            <div class=\"hover:bg-muted/20 flex items-start gap-3.5 p-4 transition-colors\">\n              <ui-checkbox\n                id=\"ho-credentials\"\n                [checked]=\"handover().credentials\"\n                (checkedChange)=\"toggleHandover('credentials', $event)\"\n                class=\"mt-0.5\"\n              />\n              <div class=\"space-y-1\">\n                <div class=\"flex items-center gap-2\">\n                  <lucide-icon [img]=\"KeyRound\" class=\"text-primary size-4\" />\n                  <label ui-label for=\"ho-credentials\" class=\"text-foreground cursor-pointer text-xs font-semibold\">\n                    Passwords & credentials rotated\n                  </label>\n                </div>\n                <p class=\"text-muted-foreground text-xs leading-relaxed\">\n                  Revoked personal staging SSH keys, rotated AWS IAM secret access tokens, and decommissioned VPN and\n                  Vault credentials.\n                </p>\n              </div>\n            </div>\n\n            <div class=\"hover:bg-muted/20 flex items-start gap-3.5 p-4 transition-colors\">\n              <ui-checkbox\n                id=\"ho-equipment\"\n                [checked]=\"handover().equipment\"\n                (checkedChange)=\"toggleHandover('equipment', $event)\"\n                class=\"mt-0.5\"\n              />\n              <div class=\"space-y-1\">\n                <div class=\"flex items-center gap-2\">\n                  <lucide-icon [img]=\"Laptop\" class=\"text-primary size-4\" />\n                  <label ui-label for=\"ho-equipment\" class=\"text-foreground cursor-pointer text-xs font-semibold\">\n                    Company laptop & security hardware returned\n                  </label>\n                </div>\n                <p class=\"text-muted-foreground text-xs leading-relaxed\">\n                  MacBook Pro M3 Max, hardware security YubiKey, and company physical access badge received by IT Asset\n                  Ops.\n                </p>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div\n          ui-card-footer\n          class=\"border-border/60 bg-muted/20 flex flex-wrap items-center justify-between gap-3 border-t p-4\"\n        >\n          <div class=\"text-muted-foreground flex items-center gap-2 text-xs\">\n            <lucide-icon [img]=\"Lock\" class=\"size-3.5\" />\n            <span>Requires final sign-off from IT Security & People Operations</span>\n          </div>\n          @if (!isSubmitted()) {\n            <button\n              ui-button\n              size=\"sm\"\n              class=\"bg-primary text-primary-foreground gap-2 shadow-xs\"\n              (click)=\"handleSubmit()\"\n            >\n              <lucide-icon [img]=\"Send\" class=\"size-4\" />\n              Submit Final Exit Review\n            </button>\n          }\n        </div>\n      </div>\n    </div>\n  `,\n})\nexport class UiExitInterviewSurveyComponent {\n  protected readonly Calendar = Calendar\n  protected readonly CheckCircle2 = CheckCircle2\n  protected readonly ClipboardCheck = ClipboardCheck\n  protected readonly Compass = Compass\n  protected readonly FileCheck = FileCheck\n  protected readonly FileCode2 = FileCode2\n  protected readonly KeyRound = KeyRound\n  protected readonly Laptop = Laptop\n  protected readonly Lock = Lock\n  protected readonly MessageSquareQuote = MessageSquareQuote\n  protected readonly RotateCcw = RotateCcw\n  protected readonly Send = Send\n  protected readonly ShieldCheck = ShieldCheck\n  protected readonly Star = Star\n  protected readonly UserCheck = UserCheck\n\n  protected readonly reasons = departureReasons\n  protected readonly dimensions = ratingDimensions\n  protected readonly returnOpts = returnOptions\n  protected readonly submissionId = 'EXIT-2026-9042'\n\n  @Input('class') className?: string\n  @Input() set initialSubmitted(v: boolean) {\n    this.isSubmitted.set(!!v)\n  }\n\n  readonly primaryReason = signal('career-growth')\n  readonly departureNotes = signal(\n    'Accepted a Principal Systems Architect role at a Series B infrastructure startup focusing on WebAssembly runtime tooling.',\n  )\n  readonly ratings = signal<Record<RatingDimensionId, number>>({\n    management: 4,\n    collaboration: 5,\n    compensation: 4,\n    culture: 5,\n    flexibility: 4,\n  })\n  readonly enjoyedMost = signal(\n    'The engineering team’s exceptional craft and collaborative spirit. Building high-scale distributed platform services alongside humble, brilliant peers was deeply rewarding. Leadership always supported architectural innovation and design system investments.',\n  )\n  readonly toImprove = signal(\n    'Cross-functional roadmap alignment between product management and core platform squads. Late-quarter requirement shifts occasionally created sprint friction and compressed delivery timelines.',\n  )\n  readonly returnWillingness = signal('yes')\n  readonly handover = signal<Record<HandoverKey, boolean>>({\n    codebase: true,\n    architecture: true,\n    credentials: true,\n    equipment: false,\n  })\n  readonly isSubmitted = signal(false)\n\n  readonly averageRating = computed(() => {\n    const values = Object.values(this.ratings())\n    return (values.reduce((acc, val) => acc + val, 0) / values.length).toFixed(1)\n  })\n  readonly sentimentPercentage = computed(() => Math.round((Number(this.averageRating()) / 5) * 100))\n  readonly handoverCompletedCount = computed(() => Object.values(this.handover()).filter(Boolean).length)\n  readonly handoverPercentage = computed(() => Math.round((this.handoverCompletedCount() / 4) * 100))\n\n  get rootClass(): string {\n    return cn('w-full space-y-6', this.className)\n  }\n\n  optionCardClass(selected: boolean): string {\n    return cn(\n      'hover:bg-muted/30 flex cursor-pointer items-start gap-3 rounded-lg border p-3.5 transition-colors',\n      selected ? 'border-primary/80 bg-primary/5 ring-primary/20 ring-1' : 'border-border bg-card',\n    )\n  }\n\n  ratingValue(id: RatingDimensionId): number {\n    return this.ratings()[id]\n  }\n\n  setRating(id: RatingDimensionId, val: number): void {\n    this.ratings.update((prev) => ({ ...prev, [id]: val }))\n  }\n\n  toggleHandover(key: HandoverKey, checked: unknown): void {\n    this.handover.update((prev) => ({ ...prev, [key]: checked === true }))\n  }\n\n  handleSubmit(): void {\n    this.isSubmitted.set(true)\n  }\n\n  handleReset(): void {\n    this.isSubmitted.set(false)\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/exit-interview-survey/exit-interview-survey.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/exit-interview-survey/index.ts",
      "content": "export {\n  UiExitInterviewSurveyComponent,\n  type HandoverKey,\n  type RatingDimensionId,\n} from './exit-interview-survey.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/exit-interview-survey/index.ts"
    }
  ],
  "dependencies": [
    "lucide-angular"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/angular/avatar.json",
    "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/checkbox.json",
    "https://uipkge.dev/r/angular/label.json",
    "https://uipkge.dev/r/angular/progress.json",
    "https://uipkge.dev/r/angular/radio-group.json",
    "https://uipkge.dev/r/angular/rating.json",
    "https://uipkge.dev/r/angular/separator.json",
    "https://uipkge.dev/r/angular/textarea.json"
  ],
  "description": "Structured employee offboarding survey with department sentiment analysis, departure drivers, 5-star experience ratings, qualitative feedback textareas, and a knowledge handover & asset return checklist.",
  "categories": [
    "hr",
    "app",
    "forms"
  ]
}