1import{a as ne}from"./chunk-2Q7JARJK.js";import{a as ie}from"./chunk-64ZUF7ZT.js";import"./chunk-SI4CDPWM.js";import"./chunk-6UUHN32O.js";import{a as ee,b as te}from"./chunk-JIH5N2CQ.js";import"./chunk-ZRFOO27F.js";import{A as X,B as Y,C as Z,b as L,c as q,d as b,f as U,g as j,j as B,k as W,l as $,o as G,r as H,s as J,t as Q,v as K}from"./chunk-BKZN26IZ.js";import{i as A,j as D}from"./chunk-UW2IUR6S.js";import"./chunk-P7ZY4TXP.js";import"./chunk-RKBEALUS.js";import"./chunk-IXUMU2TC.js";import"./chunk-PKZJNWAJ.js";import{t as z}from"./chunk-MH6BJ7X6.js";import"./chunk-T5JS72MM.js";import{$b as t,Ac as S,Bb as V,Bc as w,Ea as g,Fa as v,Fd as N,Hb as f,Nc as O,Ob as E,Oc as I,Pb as d,U as y,Ub as h,_b as e,ac as m,ec as C,fc as u,gc as p,od as F,pd as R,qb as a,sa as M,sc as n,tc as c,uc as x,vc as k,xd as T,zc as P}from"./chunk-APOSNKLN.js";import"./chunk-TWZW5B45.js";function oe(l,r){if(l&1&&(e(0,"div",39),n(1),t()),l&2){let i=p();a(),c(i.error)}}function ae(l,r){if(l&1&&(e(0,"div",40),n(1),t()),l&2){let i=p();a(),c(i.notice)}}function le(l,r){l&1&&(e(0,"div",41),m(1,"i",42),n(2," Loading vendor register... "),t())}function se(l,r){l&1&&(e(0,"small",85),n(1,"Display name is required."),t())}function de(l,r){l&1&&(e(0,"small",85),n(1,"Legal name is required."),t())}function ce(l,r){if(l&1&&(e(0,"option",86),n(1),t()),l&2){let i=r.$implicit;d("value",i.value),a(),c(i.label)}}function me(l,r){if(l&1&&(e(0,"option",86),n(1),t()),l&2){let i=r.$implicit;d("value",i.value),a(),c(i.label)}}function pe(l,r){l&1&&(e(0,"small",85),n(1,"Business purpose is required."),t())}function ue(l,r){if(l&1&&(e(0,"option",86),n(1),t()),l&2){let i=r.$implicit;d("value",i.value),a(),c(i.label)}}function _e(l,r){if(l&1){let i=C();e(0,"div",43),u("click",function(){g(i);let s=p();return v(s.showForm=!1)}),e(1,"div",44),u("click",function(s){return g(i),v(s.stopPropagation())}),e(2,"header",45)(3,"h2",46),n(4),t(),e(5,"button",47),u("click",function(){g(i);let s=p();return v(s.showForm=!1)}),n(6,"\xD7"),t()(),e(7,"form",48),u("ngSubmit",function(){g(i);let s=p();return v(s.saveVendor())}),e(8,"div",49)(9,"div",50)(10,"label",51),n(11,"Display Name "),e(12,"span",52),n(13,"*"),t()(),m(14,"input",53),f(15,se,2,0,"small",54),t(),e(16,"div",50)(17,"label",55),n(18,"Legal Entity Name "),e(19,"span",52),n(20,"*"),t()(),m(21,"input",56),f(22,de,2,0,"small",54),t(),e(23,"div",50)(24,"label",57),n(25,"Service Category "),e(26,"span",52),n(27,"*"),t()(),e(28,"select",58),f(29,ce,2,2,"option",59),t()(),e(30,"div",50)(31,"label",60),n(32,"Processor Role "),e(33,"span",52),n(34,"*"),t()(),e(35,"select",61),f(36,me,2,2,"option",59),t()()(),e(37,"div",50)(38,"label",62),n(39,"Business Purpose "),e(40,"span",52),n(41,"*"),t()(),m(42,"textarea",63),f(43,pe,2,0,"small",54),t(),e(44,"div",49)(45,"div",50)(46,"label",64),n(47,"Personal Data Shared (comma-separated)"),t(),m(48,"input",65),t(),e(49,"div",50)(50,"label",66),n(51,"Hosting / Storage Countries (ISO-2 codes)"),t(),m(52,"input",67),e(53,"small",68),n(54,"Use comma-separated ISO country codes."),t()()(),e(55,"div",49)(56,"div",50)(57,"label",69),n(58,"DPA Status"),t(),e(59,"select",70),f(60,ue,2,2,"option",59),t()(),e(61,"div",50)(62,"label",71),n(63,"Contract / DPA Reference"),t(),m(64,"input",72),t()(),e(65,"div",49)(66,"div",50)(67,"label",73),n(68,"Vendor Contact Name"),t(),m(69,"input",74),t(),e(70,"div",50)(71,"label",75),n(72,"Vendor Contact Email"),t(),m(73,"input",76),t()(),e(74,"div",49)(75,"div",50)(76,"label",77),n(77,"Incident SLA Commitment (hours)"),t(),m(78,"input",78),t(),e(79,"div",50)(80,"label",79),n(81,"Retention Commitment (days)"),t(),m(82,"input",80),t()(),e(83,"div",81)(84,"button",82),u("click",function(){g(i);let s=p();return v(s.showForm=!1)}),n(85,"Cancel"),t(),e(86,"button",83),m(87,"i",84),n(88),t()()()()()}if(l&2){let i=p();a(4),c(i.isEditing?"Edit Vendor Record":"Register New Third-Party Vendor"),a(3),d("formGroup",i.vendorForm),a(8),d("ngIf",i.vendorForm.controls.display_name.touched&&i.vendorForm.controls.display_name.invalid),a(7),d("ngIf",i.vendorForm.controls.legal_name.touched&&i.vendorForm.controls.legal_name.invali
1d),a(7),d("ngForOf",i.serviceCategories),a(7),d("ngForOf",i.processorRoles),a(7),d("ngIf",i.vendorForm.controls.business_purpose.touched&&i.vendorForm.controls.business_purpose.invalid),a(17),d("ngForOf",i.dpaStatuses),a(26),d("disabled",i.busy||i.vendorForm.invalid),a(2),x(" ",i.isEditing?"Update Vendor":"Register Vendor"," ")}}function ge(l,r){if(l&1&&(e(0,"option",86),n(1),t()),l&2){let i=r.$implicit;d("value",i.value),a(),c(i.label)}}function ve(l,r){if(l&1&&(e(0,"option",86),n(1),t()),l&2){let i=r.$implicit;d("value",i.value),a(),c(i.label)}}function fe(l,r){l&1&&(e(0,"small",85),n(1,"Rationale is required for compliance audit trails."),t())}function be(l,r){if(l&1){let i=C();e(0,"div",43),u("click",function(){g(i);let s=p();return v(s.showReviewModal=!1)}),e(1,"div",87),u("click",function(s){return g(i),v(s.stopPropagation())}),e(2,"header",45)(3,"h2",88),n(4),t(),e(5,"button",47),u("click",function(){g(i);let s=p();return v(s.showReviewModal=!1)}),n(6,"\xD7"),t()(),e(7,"form",89),u("ngSubmit",function(){g(i);let s=p();return v(s.submitReview())}),e(8,"div",50)(9,"label",90),n(10,"Data Processing Agreement (DPA) Status "),e(11,"span",52),n(12,"*"),t()(),e(13,"select",91),f(14,ge,2,2,"option",59),t()(),e(15,"div",50)(16,"label",92),n(17,"Security Assessment Status "),e(18,"span",52),n(19,"*"),t()(),e(20,"select",93)(21,"option",94),n(22,"Approved (SOC2/ISO/Questionnaire passed)"),t(),e(23,"option",20),n(24,"Under Review"),t(),e(25,"option",95),n(26,"Remediation Required"),t(),e(27,"option",96),n(28,"Assessment Expired"),t(),e(29,"option",34),n(30,"Unassessed"),t()()(),e(31,"div",50)(32,"label",97),n(33,"Assessed Risk Rating "),e(34,"span",52),n(35,"*"),t()(),e(36,"select",98),f(37,ve,2,2,"option",59),t()(),e(38,"div",50)(39,"label",99),n(40,"Risk Assessment Rationale "),e(41,"span",52),n(42,"*"),t()(),m(43,"textarea",100),f(44,fe,2,0,"small",54),t(),e(45,"div",101)(46,"label",102),m(47,"input",103),e(48,"span"),n(49,"Hosting countries and cloud data centers verified"),t()(),e(50,"label",102),m(51,"input",104),e(52,"span"),n(53,"Vendor's subprocessor list reviewed & documented"),t()()(),e(54,"div",50)(55,"label",105),n(56,"Next Review Scheduled Date"),t(),m(57,"input",106),t(),e(58,"div",81)(59,"button",82),u("click",function(){g(i);let s=p();return v(s.showReviewModal=!1)}),n(60,"Cancel"),t(),e(61,"button",83),n(62," Record Formal Review "),t()()()()()}if(l&2){let i=p();a(4),x("Formal Vendor Review: ",i.selectedVendor.display_name,""),a(3),d("formGroup",i.reviewForm),a(7),d("ngForOf",i.dpaStatuses),a(23),d("ngForOf",i.riskRatings),a(7),d("ngIf",i.reviewForm.controls.risk_rationale.touched&&i.reviewForm.controls.risk_rationale.invalid),a(17),d("disabled",i.busy||i.reviewForm.invalid)}}function xe(l,r){l&1&&(e(0,"div",107),m(1,"i",108),e(2,"strong"),n(3,"No vendor records found."),t(),e(4,"p"),n(5,"Register your organization's third-party software vendors and processors, or seed standard platforms."),t()())}function ye(l,r){if(l&1&&(e(0,"span",131),n(1),O(2,"uppercase"),t()),l&2){let i=p().$implicit;a(),x(" ",I(2,1,i.hosting_regions.join(", "))," ")}}function he(l,r){l&1&&(e(0,"span",132),n(1,"Unverified"),t())}function Ce(l,r){l&1&&(e(0,"span",133),n(1,"Missing"),t())}function Pe(l,r){if(l&1&&(e(0,"small",115),n(1),t()),l&2){let i=p().$implicit;a(),x("By ",i.reviewer,"")}}function Se(l,r){if(l&1){let i=C();e(0,"tr")(1,"td")(2,"div",114),n(3),t(),e(4,"div",115),n(5),t()(),e(6,"td")(7,"span",116),n(8),t()(),e(9,"td")(10,"span",117),n(11),t()(),e(12,"td")(13,"span"),n(14),t()(),e(15,"td"),f(16,ye,3,3,"span",118)(17,he,2,0,"span",119)(18,Ce,2,0,"span",120),t(),e(19,"td")(20,"span"),n(21),t()(),e(22,"td")(23,"span"),n(24),t(),f(25,Pe,2,1,"small",121),t(),e(26,"td",122)(27,"button",123),u("click",function(){let s=g(i).$implicit,_=p(2);return v(_.viewDetails(s))}),m(28,"i",124),t(),e(29,"button",125),u("click",function(){let s=g(i).$implicit,_=p(2);return v(_.openEditForm(s))}),m(30,"i",126),t(),e(31,"button",127),u("click",function(){let s=g(i).$implicit,_=p(2);return v(_.openReviewModal(s))}),m(32,"i",128),t(),e(33,"button",129),u("click",function(){let s=g(i).$implicit,_=p(2);return v(_.deleteVendor(s))}),m(34,"i",130),t()()()}if(l&2){let i=r.$implicit,o=p(2);a(3),c(i.display_name),a(2),c(i.legal_name),a(3),c(o.categoryLabel(i.service_category)),a(3),c(o.roleLabel(i.processor_role)),a(2),h("status-pill status-",i.dpa_status,""),a(),c(i.dpa_status),a(2),d("ngIf",i.hosting_regions==null?null:i.hosting_regions.length),a(),d("ngIf",!i.hosting_locations_verified),a(),d("ngIf",!(i.hosting_regions!=null&&i.hosting_regions.length)),a(2),h("status-pill status-",i.risk_rating,""),a(),c(i.risk_rating),a(2),h("status-pill status-",i.security_assessment_status,""),a(),c(i.security_assessment_status),a(),d("ngIf",i.reviewer)}}function we(l,r){if(l&1&&(e(0,"div",109)(1,"table",110)(2,"thead")(3,"tr")(4,"th",111),n(5,"Vendor & Legal Entity"),t(),e(6,"th",111),n(7,"Category"),t(),e(8,"th",111),n(9,"Role"),t(),e(10,"th",111),n(11,"DPA Status"),t(),e(12,"th",111),n(13,"Hosting Locations"),t(),e(14,"th",111),n(15,"Risk Rating"),t(),e(16,"th",111),n(17,"Security Review"),t(),e(18,"th",112),n(19,"Actions"),t()()(),e(20,"tbody"),f(21,Se,35,20,"tr",113),t()()()),l&2){let i=p();a(21),d("ngForOf",i.vendors)}}function Me(l,r){if(l&1&&(e(0,"div",139)(1,"h3"),n(2,"Security & Risk Assessment Rationale"),t(),e(3,"p"),n(4),t()()),l&2){let i=p(2);a(4),c(i.selectedVendor.risk_rationale)}}function ke(l,r){if(l&1&&(e(0,"div",139)(1,"h3"),n(2,"Business Purpose"),t(),e(3,"p"),n(4),t()()),l&2){let i=p(2);a(4),c(i.selectedVendor.business_purpose)}}function Ve(l,r){if(l&1){let i=C();e(0,"div",134)(1,"header",135)(2,"div")(3,"h2"),n(4),t(),e(5,"span"),n(6),t(),e(7,"span"),n(8),t()(),e(9,"button",136),u("click",function(){g(i);let s=p();return v(s.closeDetails())}),n(10,"\xD7"),t()(),e(11,"dl",137)(12,"div")(13,"dt"),n(14,"Service Category"),t(),e(15,"dd"),n(16),t()(),e(17,"div")(18,"dt"),n(19,"Processor Role"),t(),e(20,"dd"),n(21),t()(),e(22,"div")(23,"dt"),n(24,"Hosting Regions"),t(),e(25,"dd"),n(26),t()(),e(27,"div")(28,"dt"),n(29,"Hosting Locations Verified"),t(),e(30,"dd"),n(31),t()(),e(32,"div")(33,"dt"),n(34,"Contract Reference"),t(),e(35,"dd"),n(36),t()(),e(37,"div")(38,"dt"),n(39,"Incident SLA Notification"),t(),e(40,"dd"),n(41),t()(),e(42,"div")(43,"dt"),n(44,"Retention Commitment"),t(),e(45,"dd"),n(46),t()(),e(47,"div")(48,"dt"),n(49,"Reviewed By"),t(),e(50,"dd"),n(51),t()()(),f(52,Me,5,1,"div",138)(53,ke,5,1,"div",138),t()}if(l&2){let i,o=p();a(4),k("",o.selectedVendor.display_name," (",o.selectedVendor.legal_name,")"),a(),h("status-pill status-",o.selectedVendor.dpa_status,""),a(),x("DPA: ",o.selectedVendor.dpa_status,""),a(),h("status-pill status-",o.selectedVendor.risk_rating,""),a(),x("Risk: ",o.selectedVendor.risk_rating,""),a(8),c(o.categoryLabel(o.selectedVendor.service_category)),a(5),c(o.roleLabel(o.selectedVendor.processor_role)),a(5),c((o.selectedVendor.hosting_regions==null||(i=o.selectedVendor.hosting_regions.join(", "))==null?null:i.toUpperCase())||"Not documented"),a(5),c(o.selectedVendor.hosting_locations_verified?"Verified":"Unverified"),a(5),c(o.selectedVendor.contract_reference||"None recorded"),a(5),c(o.selectedVendor.incident_notification_commitment_hours?o.selectedVendor.incident_notification_commitment_hours+" hours":"Unspecified"),a(5),c(o.selectedVendor.retention_commitment_days?o.selectedVendor.retention_commitment_days+" days":"Unspecified"),a(5),c(o.selectedVendor.reviewer||"Pending review"),a(),d("ngIf",o.selectedVendor.risk_rationale),a(),d("ngIf",o.selectedVendor.business_purpose)}}var re=class l{service=M(ne);fb=M(X);vendors=[];selectedVendor=null;loading=!1;busy=!1;error="";notice="";page=1;count=0;statusFilter="";dpaFilter="";riskFilter="";showForm=!1;isEditing=!1;editingId=null;
1showReviewModal=!1;serviceCategories=[{value:"cloud_infrastructure",label:"Cloud Infrastructure & Storage"},{value:"payment_gateway",label:"Payment Gateway & Billing"},{value:"messaging_communication",label:"Messaging & SMS/WhatsApp"},{value:"email_service",label:"Email Service & Delivery"},{value:"ai_machine_learning",label:"AI & Machine Learning"},{value:"error_monitoring",label:"Error Monitoring & Telemetry"},{value:"security_identity",label:"Security & Auth"},{value:"calendar_collaboration",label:"Collaboration & Productivity"},{value:"professional_services",label:"Professional Services"},{value:"other",label:"Other Third-Party Service"}];processorRoles=[{value:"processor",label:"Data Processor (Processes data on our behalf)"},{value:"subprocessor",label:"Subprocessor"},{value:"independent_controller",label:"Independent Data Controller"},{value:"joint_controller",label:"Joint Data Controller"},{value:"unverified",label:"Unverified / Under Legal Review"}];dpaStatuses=[{value:"missing",label:"Missing / Required"},{value:"under_negotiation",label:"Under Negotiation"},{value:"executed",label:"Executed DPA"},{value:"standard_terms",label:"Standard Platform Terms"},{value:"not_applicable",label:"Not Applicable"}];riskRatings=[{value:"unassessed",label:"Unassessed"},{value:"low",label:"Low Risk"},{value:"medium",label:"Medium Risk"},{value:"high",label:"High Risk"},{value:"critical",label:"Critical Risk"}];vendorForm=this.fb.nonNullable.group({legal_name:["",[b.required,b.maxLength(200)]],display_name:["",[b.required,b.maxLength(200)]],service_category:["cloud_infrastructure",b.required],business_purpose:["",b.required],service_description:[""],processor_role:["processor",b.required],data_categories_shared:[""],hosting_regions:[""],dpa_status:["missing"],contract_reference:[""],contact_name:[""],contact_email:["",[b.email]],contact_phone:[""],retention_commitment_days:[null],incident_notification_commitment_hours:[null],risk_rating:["unassessed"],risk_rationale:[""]});reviewForm=this.fb.nonNullable.group({dpa_status:["executed"],security_assessment_status:["approved"],risk_rating:["low"],risk_rationale:["",b.required],hosting_locations_verified:[!1],subprocessors_documented:[!1],next_review_date:[""]});ngOnInit(){this.loadVendors()}loadVendors(r=!1){this.loading=!0,this.error="",r||(this.notice="");let i={page:this.page};this.statusFilter&&(i.status=this.statusFilter),this.dpaFilter&&(i.dpa_status=this.dpaFilter),this.riskFilter&&(i.risk_rating=this.riskFilter),this.service.getVendors(i).pipe(y(()=>{this.loading=!1})).subscribe({next:o=>{this.vendors=o.results,this.count=o.count},error:o=>{this.error=o.error?.error?.message||o.error?.detail||"Failed to load vendors."}})}openCreateForm(){this.isEditing=!1,this.editingId=null,this.vendorForm.reset({legal_name:"",display_name:"",service_category:"cloud_infrastructure",business_purpose:"",service_description:"",processor_role:"processor",data_categories_shared:"",hosting_regions:"",dpa_status:"missing",contract_reference:"",contact_name:"",contact_email:"",contact_phone:"",retention_commitment_days:null,incident_notification_commitment_hours:null,risk_rating:"unassessed",risk_rationale:""}),this.showForm=!0}openEditForm(r){this.isEditing=!0,this.editingId=r.id,this.vendorForm.patchValue({legal_name:r.legal_name,display_name:r.display_name,service_category:r.service_category,business_purpose:r.business_purpose,service_description:r.service_description,processor_role:r.processor_role,data_categories_shared:(r.data_categories_shared||[]).join(", "),hosting_regions:(r.hosting_regions||[]).join(", "),dpa_status:r.dpa_status,contract_reference:r.contract_reference,contact_name:r.contact_name,contact_email:r.contact_email,contact_phone:r.contact_phone,retention_commitment_days:r.retention_commitment_days,incident_notification_commitment_hours:r.incident_notification_commitment_hours,risk_rating:r.risk_rating,risk_rationale:r.risk_rationale}),this.showForm=!0}saveVendor(){if(this.vendorForm.invalid){this.vendorForm.markAllAsTouched();return}let r=this.vendorForm.getRawValue(),i={legal_name:r.legal_name.trim(),display_name:r.display_name.trim(),service_category:r.service_category,business_purpose:r.business_purpose.trim(),service_description:r.service_description.trim(),processor_role:r.processor_role,data_categories_shared:r.data_categories_shared.split(",").map(s=>
1s.trim()).filter(Boolean),hosting_regions:r.hosting_regions.split(",").map(s=>s.trim().toLowerCase()).filter(Boolean),dpa_status:r.dpa_status,contract_reference:r.contract_reference.trim(),contact_name:r.contact_name.trim(),contact_email:r.contact_email.trim(),contact_phone:r.contact_phone.trim(),retention_commitment_days:r.retention_commitment_days?Number(r.retention_commitment_days):null,incident_notification_commitment_hours:r.incident_notification_commitment_hours?Number(r.incident_notification_commitment_hours):null,risk_rating:r.risk_rating,risk_rationale:r.risk_rationale.trim()};this.busy=!0,this.error="",(this.isEditing&&this.editingId?this.service.updateVendor(this.editingId,i):this.service.createVendor(i)).pipe(y(()=>{this.busy=!1})).subscribe({next:s=>{this.notice=this.isEditing?`Vendor '${s.display_name}' updated.`:`Vendor '${s.display_name}' registered.`,this.showForm=!1,this.loadVendors(!0)},error:s=>{this.error=s.error?.error?.message||s.error?.detail||"Failed to save vendor."}})}openReviewModal(r){this.selectedVendor=r,this.reviewForm.patchValue({dpa_status:r.dpa_status==="missing"?"under_negotiation":r.dpa_status,security_assessment_status:r.security_assessment_status==="unassessed"?"under_review":r.security_assessment_status,risk_rating:r.risk_rating==="unassessed"?"medium":r.risk_rating,risk_rationale:r.risk_rationale||"",hosting_locations_verified:r.hosting_locations_verified,subprocessors_documented:r.subprocessors_documented,next_review_date:r.next_review_date||""}),this.showReviewModal=!0}submitReview(){if(!this.selectedVendor||this.reviewForm.invalid){this.reviewForm.markAllAsTouched();return}let r=this.reviewForm.getRawValue();this.busy=!0,this.error="",this.service.reviewVendor(this.selectedVendor.id,{dpa_status:r.dpa_status,security_assessment_status:r.security_assessment_status,risk_rating:r.risk_rating,risk_rationale:r.risk_rationale.trim(),hosting_locations_verified:r.hosting_locations_verified,subprocessors_documented:r.subprocessors_documented,next_review_date:r.next_review_date||null}).pipe(y(()=>{this.busy=!1})).subscribe({next:i=>{this.notice=`Vendor '${i.display_name}' review saved.`,this.showReviewModal=!1,this.selectedVendor=null,this.loadVendors(!0)},error:i=>{this.error=i.error?.error?.message||i.error?.detail||"Failed to submit review."}})}seedDefaults(){confirm("Seed standard third-party platform vendors (AWS, Razorpay, Twilio, SendGrid, etc.)? Note: Seeded vendors are created with unverified status until reviewed.")&&(this.busy=!0,this.error="",this.service.seedDefaultVendors().pipe(y(()=>{this.busy=!1})).subscribe({next:r=>{this.notice=`Platform default vendors initialized (${r.seeded_count} records).`,this.loadVendors()},error:r=>{this.error=r.error?.error?.message||r.error?.detail||"Failed to seed default vendors."}}))}deleteVendor(r){confirm(`Are you sure you want to delete vendor '${r.display_name}'?`)&&(this.busy=!0,this.error="",this.service.deleteVendor(r.id).pipe(y(()=>{this.busy=!1})).subscribe({next:()=>{this.notice=`Vendor '${r.display_name}' deleted.`,this.selectedVendor?.id===r.id&&(this.selectedVendor=null),this.loadVendors()},error:i=>{this.error=i.error?.error?.message||i.error?.detail||"Failed to delete vendor."}}))}viewDetails(r){this.selectedVendor=r}closeDetails(){this.selectedVendor=null}categoryLabel(r){return this.serviceCategories.find(i=>i.value===r)?.label||r}roleLabel(r){return this.processorRoles.find(i=>i.value===r)?.label||r}onFilterChange(){this.page=1,this.loadVendors()}static \u0275fac=function(i){return new(i||l)};static \u0275cmp=V({type:l,selectors:[["app-privacy-vendors"]],decls:69,vars:18,consts:[["aria-labelledby","vendors-title",1,"privacy-page"],[1,"privacy-heading"],["id","vendors-title"],[1,"section-desc"],[1,"toolbar"],["type","button","pTooltip","Seed standard processors (AWS, Twilio, etc.) with unverified initial status",1,"secondary-btn",3,"click","disabled"],["aria-hidden","true",1,"pi","pi-cloud-download"],["icon","pi pi-refresh","ariaLabel","Refresh vendors","pTooltip","Refresh",3,"onClick","text","disabled"],["type","button",1,"primary-btn",3,"click","disabled"],["aria-hidden","true",1,"pi","pi-plus"],["class","message error","role","alert",4,"ngIf"],["class","message success","role","status",4,"ngIf"],["class","empty-state","role","status",4,"ngIf"],["class","modal-backdrop",3,"click",4,"ngIf"],[1,"list-toolbar"],[1,"filter-group"],["for","v-filter-status"],["id","v-filter-status",3,"ngModelChange","change","ngModel"],["value",""],["value","active"],["value","under_review"],["value","suspended"],["value","terminated"],["for","v-filter-dpa"],["id","v-filter-dpa",3,"ngModelChange","change","ngModel"],["value","executed"],["value","missing"],["value","under_negotiation"],["for","v-filter-risk"],["id","v-filter-risk",3,"ngModelChange","change","ngModel"],["value","low"],["value","medium"],["value","high"],["value","critical"],["value","unassessed"],[1,"count-badge"],["class","empty-state",4,"ngIf"],["class","table-scroll",4,"ngIf"],["class","detail-drawer",4,"ngIf"],["role","alert",1,"message","error"],["role","status",1,"message","success"],["role","status",1,"empty-state"],["aria-hidden","true",1,"pi","pi-spin","pi-spinner"],[1,"modal-backdrop",3,"click"],["role","dialog","aria-modal","true","aria-labelledby","vendor-form-title",1,"modal-card","wide-modal",3,"click"],[1,"modal-header"],["id","vendor-form-title"],["type","button",1,"close-btn",3,"click"],[1,"vendor-form",3,"ngSubmit","formGroup"],[1,"form-grid"],[1,"form-group"],["for","v-display"],[1,"required"],["id","v-display","type","text","formControlName","display_name","placeholder","e.g. Amazon Web Services"],["class","field-error",4,"ngIf"],["for","v-legal"],["id","v-legal","type","text","formControlName","legal_name","placeholder","e.g. Amazon Web Services, Inc."],["for","v-cat"],["id","v-cat","formControlName","service_category"],[3,"value",4,"ngFor","ngForOf"],["for","v-role"],["id","v-role","formControlName","processor_role"],["for","v-purpose"],["id","v-purpose","rows","2","formControlName","business_purpose","placeholder","Describe the operational business purpose for engaging this vendor..."],["for","v-categories"],["id","v-categories","type","text","formControlName","data_categories_shared","placeholder","e.g. system_backups, user_email, ip_logs"],["for","v-hosting"],["id","v-hosting","type","text","formControlName","hosting_regions","placeholder","e.g. in, us, eu, sg"],[1,"field-hint"],["for","v-dpa"],["id","v-dpa","formControlName","dpa_status"],["for","v-contract"],["id","v-contract","type","text","formControlName","contract_reference","placeholder","e.g. DPA-AWS-2026-IN"],["for","v-cname"],["id","v-cname","type","text","formControlName","contact_name"],["for","v-cemail"],["id","v-cemail","type","email","formControlName","contact_email"],["for","v-sla"],["
1id","v-sla","type","number","formControlName","incident_notification_commitment_hours","placeholder","e.g. 24"],["for","v-ret"],["id","v-ret","type","number","formControlName","retention_commitment_days","placeholder","e.g. 30"],[1,"modal-actions"],["type","button",1,"secondary-btn",3,"click"],["type","submit",1,"primary-btn",3,"disabled"],["aria-hidden","true",1,"pi","pi-check"],[1,"field-error"],[3,"value"],["role","dialog","aria-modal","true","aria-labelledby","v-rev-title",1,"modal-card",3,"click"],["id","v-rev-title"],[1,"vendor-review-form",3,"ngSubmit","formGroup"],["for","rev-dpa"],["id","rev-dpa","formControlName","dpa_status"],["for","rev-sec"],["id","rev-sec","formControlName","security_assessment_status"],["value","approved"],["value","remediation_required"],["value","expired"],["for","rev-risk"],["id","rev-risk","formControlName","risk_rating"],["for","rev-rat"],["id","rev-rat","rows","3","formControlName","risk_rationale","placeholder","Detail verified certifications, ISO 27001 certificate ID, encryption in transit/rest controls..."],[1,"checkbox-group"],[1,"check-item"],["type","checkbox","formControlName","hosting_locations_verified"],["type","checkbox","formControlName","subprocessors_documented"],["for","rev-next"],["id","rev-next","type","date","formControlName","next_review_date"],[1,"empty-state"],["aria-hidden","true",1,"pi","pi-building"],[1,"table-scroll"],["aria-label","Vendors & Processors List",1,"gov-table"],["scope","col"],["scope","col",1,"actions-col"],[4,"ngFor","ngForOf"],[1,"cell-title"],[1,"cell-subtext"],[1,"module-tag"],[1,"basis-pill"],["class","tags-list",4,"ngIf"],["class","badge badge-warning","pTooltip","Hosting locations not formally verified",4,"ngIf"],["class","badge badge-danger",4,"ngIf"],["class","cell-subtext",4,"ngIf"],[1,"actions-col"],["type","button","pTooltip","Inspect Vendor","aria-label","View Details",1,"icon-btn",3,"click"],[1,"pi","pi-eye"],["type","button","pTooltip","Edit Vendor","aria-label","Edit",1,"icon-btn",3,"click"],[1,"pi","pi-pencil"],["type","button","pTooltip","Formal Security & DPA Review","aria-label","Review",1,"icon-btn",3,"click"],[1,"pi","pi-shield"],["type","button","pTooltip","Delete Vendor","aria-label","Delete",1,"icon-btn","danger-icon",3,"click"],[1,"pi","pi-trash"],[1,"tags-list"],["pTooltip","Hosting locations not formally verified",1,"badge","badge-warning"],[1,"badge","badge-danger"],[1,"detail-drawer"],[1,"detail-header"],["type","button","aria-label","Close detail view",1,"close-btn",3,"click"],[1,"gov-facts-grid"],["class","detail-block",4,"ngIf"],[1,"detail-block"]],template:function(i,o){i&1&&(e(0,"section",0),m(1,"app-privacy-subnav"),e(2,"header",1)(3,"div")(4,"h1",2),n(5,"Vendor & Data Processor Register"),t(),e(6,"p",3),n(7,"Manage third-party data processors, hosting regions, executed DPAs, and security assessments to meet supply-chain accountability requirements."),t()(),e(8,"div",4)(9,"button",5),u("click",function(){return o.seedDefaults()}),m(10,"i",6),n(11," Seed Platform Vendors "),t(),e(12,"p-button",7),u("onClick",function(){return o.loadVendors()}),t(),e(13,"button",8),u("click",function(){return o.openCreateForm()}),m(14,"i",9),n(15," Register Vendor "),t()()(),f(16,oe,2,1,"div",10)(17,ae,2,1,"div",11)(18,le,3,0,"div",12)(19,_e,89,10,"div",13)(20,be,63,6,"div",13),e(21,"div",14)(22,"div",15)(23,"label",16),n(24,"Status:"),t(),e(25,"select",17),w("ngModelChange",function(_){return S(o.statusFilter,_)||(o.statusFilter=_),_}),u("change",function(){return o.onFilterChange()}),e(26,"option",18),n(27,"All Statuses"),t(),e(28,"option",19),n(29,"Active"),t(),e(30,"option",20),n(31,"Under Review"),t(),e(32,"option",21),n(33,"Suspended"),t(),e(34,"option",22),n(35,"Terminated"),t()()(),e(36,"div",15)(37,"label",23),n(38,"DPA:"),t(),e(39,"select",24),w("ngModelChange",function(_){return S(o.dpaFilter,_)||(o.dpaFilter=_),_}),u("change",function(){return o.onFilterChange()}),e(40,"option",18),n(41,"All DPA States"),t(),e(42,"option",25),n(43,"Executed"),t(),e(44,"option",26),n(45,"Missing / Required"),t(),e(46,"option",27),n(47,"Under Negotiation"),t()()(),e(48,"div",15)(49,"label",28),n(50,"Risk:"),t(),e(51,"select",29),w("ngModelChange",function(_){return S(o.riskFilter,_)||(o.riskFilter=_),_}),u("change",function(){return o.onFilterChange()}),e(52,"option",18),n(53,"All Risk Ratings"),t(),e(54,"option",30),n(55,"Low"),t(),e(56,"option",31),n(57,"Medium"),t(),e(58,"option",32),n(59,"High"),t(),e(60,"option",33),n(61,"Critical"),t(),e(62,"option",34),n(63,"Unassessed"),t()()(),e(64,"span",35),n(65),t()(),f(66,xe,6,0,"div",36)(67,we,22,1,"div",37)(68,Ve,54,20,"div",38),t()),i&2&&(E("aria-busy",o.loading||o.busy),a(9),d("disabled",o.busy),a(3),d("text",!0)("disabled",o.loading||o.busy),a(),d("disabled",o.busy),a(3),d("ngIf",o.error),a(),d("ngIf",o.notice),a(),d("ngIf",o.loading),a(),d("ngIf",o.showForm),a(),d("ngIf",o.showReviewM
1odal&&o.selectedVendor),a(5),P("ngModel",o.statusFilter),a(14),P("ngModel",o.dpaFilter),a(12),P("ngModel",o.riskFilter),a(14),k("",o.count," ",o.count===1?"vendor":"vendors",""),a(),d("ngIf",!o.loading&&!o.vendors.length),a(),d("ngIf",!o.loading&&o.vendors.length),a(),d("ngIf",o.selectedVendor&&!o.showReviewModal))},dependencies:[N,F,R,T,Y,W,Q,K,q,$,L,J,U,j,B,Z,G,H,z,D,A,te,ee,ie],styles:["[_nghost-%COMP%]{display:block;min-width:0}.privacy-page[_ngcontent-%COMP%]{max-width:1240px;margin:0 auto;color:var(--text-color);letter-spacing:0}.privacy-heading[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:1.5rem;flex-wrap:wrap;margin-bottom:1.25rem}.privacy-heading[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:1.6rem;font-weight:700;margin:0 0 .35rem;color:var(--text-color)}.section-desc[_ngcontent-%COMP%]{margin:0;font-size:.9rem;color:var(--text-color-secondary);max-width:820px;line-height:1.5}.toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.primary-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;background:var(--primary-color);color:var(--primary-contrast-color, #ffffff);border:none;border-radius:6px;padding:.65rem 1.15rem;font-size:.9rem;font-weight:600;cursor:pointer;transition:opacity .15s ease,transform .1s ease}.primary-btn[_ngcontent-%COMP%]:hover:not(:disabled){opacity:.92}.primary-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.secondary-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;background:var(--surface-card);color:var(--text-color);border:1px solid var(--surface-border);border-radius:6px;padding:.65rem 1.15rem;font-size:.9rem;font-weight:500;cursor:pointer}.secondary-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--surface-hover, var(--surface-ground))}.icon-btn[_ngcontent-%COMP%]{background:transparent;border:none;cursor:pointer;padding:.4rem;color:var(--text-color-secondary);border-radius:4px;font-size:.95rem;transition:color .15s,background-color .15s}.icon-btn[_ngcontent-%COMP%]:hover{color:var(--primary-color);background:var(--surface-hover, rgba(0, 0, 0, .04))}.icon-btn.danger-icon[_ngcontent-%COMP%]:hover{color:var(--p-red-600, #dc2626)}.message[_ngcontent-%COMP%]{padding:.85rem 1.1rem;border-left:4px solid;border-radius:4px;margin-bottom:1.25rem;font-size:.92rem;overflow-wrap:anywhere}.error[_ngcontent-%COMP%]{color:var(--p-red-700, #b91c1c);background:var(--p-red-50, #fef2f2);border-left-color:var(--p-red-600, #dc2626)}.success[_ngcontent-%COMP%]{color:var(--p-green-700, #15803d);background:var(--p-green-50, #f0fdf4);border-left-color:var(--p-green-600, #16a34a)}.disclaimer-banner[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.85rem;background:#fffbeb;color:#92400e;border:1px solid #fde68a;border-radius:8px;padding:1rem 1.25rem;margin-bottom:1.5rem;font-size:.88rem;line-height:1.55}.disclaimer-banner[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.25rem;color:#d97706;margin-top:.15rem;flex-shrink:0}.disclaimer-banner[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{display:block;margin-bottom:.25rem;color:#78350f}.list-toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1.25rem;padding:.85rem 1rem;background:var(--surface-card);border:1px solid var(--surface-border);border-radius:8px;margin-bottom:1.25rem;flex-wrap:wrap}.filter-group[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}.filter-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:.85rem;font-weight:600;color:var(--text-color-secondary)}.filter-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{border:1px solid var(--surface-border);background:var(--surface-ground);color:var(--text-color);border-radius:6px;padding:.45rem .75rem;font-size:.88rem}.count-badge[_ngcontent-%COMP%]{margin-left:auto;font-size:.85rem;font-weight:600;color:var(--text-color-secondary)}.empty-state[_ngcontent-%COMP%]{min-height:220px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;color:var(--text-color-secondary);padding:2.5rem 1rem;background:var(--surface-card);border:1px dashed var(--surface-border);border-radius:8px;text-align:center}.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2.2rem;color:var(--text-color-secondary)}.empty-state[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:1.05rem;color:var(--text-color)}.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.88rem;max-width:480px}.table-scroll[_ngcontent-%COMP%]{overflow-x:auto;border:1px solid var(--surface-border);border-radius:8px;background:var(--surface-card)}.gov-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;text-align:left;font-size:.88rem}.gov-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{padding:.85rem 1rem;background:var(--surface-ground);color:var(--text-color-secondary);font-weight:600;font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--surface-border);white-space:nowrap}.gov-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:.95rem 1rem;border-bottom:1px solid var(--surface-border);vertical-align:middle}.gov-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{background:var(--surface-hover, rgba(0, 0, 0, .02))}.cell-title[_ngcontent-%COMP%]{font-weight:600;color:var(--text-color);margin-bottom:.2rem}.cell-subtext[_ngcontent-%COMP%]{font-size:.8rem;color:var(--text-color-secondary);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.code-cell[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-family:monospace;font-size:.9rem;color:var(--primary-color);display:block}.actions-col[_ngcontent-%COMP%]{white-space:nowrap;text-align:right}.status-pill[_ngcontent-%COMP%]{display:inline-block;
1padding:.25rem .55rem;border-radius:12px;font-size:.76rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em}.status-draft[_ngcontent-%COMP%]{background:#fef3c7;color:#92400e}.status-under_review[_ngcontent-%COMP%]{background:#dbeafe;color:#1e40af}.status-approved[_ngcontent-%COMP%], .status-executed[_ngcontent-%COMP%], .status-approved_compliant[_ngcontent-%COMP%], .status-active[_ngcontent-%COMP%], .status-completed[_ngcontent-%COMP%]{background:#dcfce7;color:#166534}.status-retired[_ngcontent-%COMP%], .status-terminated[_ngcontent-%COMP%], .status-waived[_ngcontent-%COMP%], .status-suspended[_ngcontent-%COMP%]{background:#f3f4f6;color:#4b5563}.status-missing[_ngcontent-%COMP%], .status-rejected[_ngcontent-%COMP%], .status-unacceptable[_ngcontent-%COMP%], .status-overdue[_ngcontent-%COMP%], .status-remediation_required[_ngcontent-%COMP%]{background:#fee2e2;color:#991b1b}.status-unassessed[_ngcontent-%COMP%], .status-unverified[_ngcontent-%COMP%]{background:#f1f5f9;color:#475569}.badge[_ngcontent-%COMP%]{display:inline-block;padding:.15rem .4rem;border-radius:4px;font-size:.72rem;font-weight:600;margin-left:.35rem}.badge-warning[_ngcontent-%COMP%]{background:#fef3c7;color:#b45309}.badge-info[_ngcontent-%COMP%]{background:#e0f2fe;color:#0369a1}.badge-danger[_ngcontent-%COMP%]{background:#fee2e2;color:#b91c1c}.module-tag[_ngcontent-%COMP%]{display:inline-block;padding:.2rem .5rem;background:var(--surface-ground);border-radius:4px;font-size:.78rem;color:var(--text-color)}.basis-pill[_ngcontent-%COMP%]{display:inline-block;padding:.2rem .5rem;background:var(--surface-ground);border-radius:4px;font-size:.78rem;font-weight:500}.basis-pill.unverified[_ngcontent-%COMP%]{background:#fee2e2;color:#991b1b}.tags-list[_ngcontent-%COMP%]{display:inline-block;font-size:.8rem;color:var(--text-color-secondary);max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.modal-backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;background:#00000073;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center;z-index:1000;padding:1.5rem}.modal-card[_ngcontent-%COMP%]{background:var(--surface-card);border-radius:12px;box-shadow:0 16px 36px #00000026;width:100%;max-width:640px;max-height:90vh;overflow-y:auto;display:flex;flex-direction:column}.modal-card.wide-modal[_ngcontent-%COMP%]{max-width:860px}.modal-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem;border-bottom:1px solid var(--surface-border)}.modal-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.25rem;font-weight:650;margin:0}.close-btn[_ngcontent-%COMP%]{background:transparent;border:none;font-size:1.4rem;color:var(--text-color-secondary);cursor:pointer}.close-btn[_ngcontent-%COMP%]:hover{color:var(--text-color)}.modal-actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:.75rem;padding:1.25rem 1.5rem;border-top:1px solid var(--surface-border);margin-top:1rem}form[_ngcontent-%COMP%]{padding:1.25rem 1.5rem}.form-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1rem;margin-bottom:1rem}.form-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.35rem;margin-bottom:.9rem}.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:.85rem;font-weight:600;color:var(--text-color)}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{border:1px solid var(--surface-border);background:var(--surface-ground);color:var(--text-color);border-radius:6px;padding:.65rem .85rem;font-size:.9rem;font-family:inherit}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%]:focus, .form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus{border-color:var(--primary-color);outline:none;box-shadow:0 0 0 2px rgba(var(--primary-color-rgb, 14, 165, 233),.2)}.required[_ngcontent-%COMP%]{color:#ef4444}.field-error[_ngcontent-%COMP%]{font-size:.78rem;color:#ef4444}.field-hint[_ngcontent-%COMP%]{font-size:.78rem;color:var(--text-color-secondary)}.checkbox-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem;background:var(--surface-ground);padding:.9rem 1rem;border-radius:6px;margin-bottom:1rem}.check-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.6rem;font-size:.88rem;cursor:pointer}.check-item[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{width:1.05rem;height:1.05rem;accent-color:var(--primary-color);cursor:pointer}.detail-drawer[_ngcontent-%COMP%]{margin-top:1.5rem;background:var(--surface-card);border:1px solid var(--surface-border);border-radius:8px;padding:1.5rem}.detail-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;border-bottom:1px solid var(--surface-border);padding-bottom:1rem;margin-bottom:1.25rem}.detail-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.2rem;font-weight:650;margin:0 0 .4rem}.gov-facts-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.25rem;margin:0 0 1.25rem}.gov-facts-grid[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-color-secondary);margin-bottom:.25rem}.gov-facts-grid[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{margin:0;font-size:.92rem;font-weight:550;color:var(--text-color)}.detail-block[_ngcontent-%COMP%]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--surface-border)}.detail-block[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:.92rem;font-weight:650;margin:0 0 .5rem}.pill-tags[_ngcontent-%COMP%]{display:inline-block;padding:.25rem .65rem;background:var(--surface-ground);border:1px solid var(--surface-border);border-radius:12px;font-size:.78rem;margin:.2rem .35rem .2rem 0}.dashboard-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1.25rem;margin-bottom:1.75rem}.metric-card[_ngcontent-%COMP%]{background:var(--surface-card);border:1px solid var(--surface-border);border-radius:10px;padding:1.35rem;display:flex;flex-direction:column;justify-content:space-between;
1transition:box-shadow .2s}.metric-card[_ngcontent-%COMP%]:hover{box-shadow:0 4px 14px #0000000d}.metric-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.metric-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:.95rem;font-weight:600;color:var(--text-color)}.metric-icon[_ngcontent-%COMP%]{font-size:1.3rem;color:var(--primary-color);background:rgba(var(--primary-color-rgb, 14, 165, 233),.1);padding:.5rem;border-radius:8px}.metric-value[_ngcontent-%COMP%]{font-size:2.2rem;font-weight:750;color:var(--text-color);line-height:1.1;margin-bottom:.5rem}.metric-breakdown[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.3rem;font-size:.82rem;color:var(--text-color-secondary);border-top:1px solid var(--surface-border);padding-top:.65rem;margin-top:.65rem}.metric-alert[_ngcontent-%COMP%]{color:#dc2626;font-weight:600}.metric-ok[_ngcontent-%COMP%]{color:#16a34a}"]})};export{re as PrivacyVendorsComponent};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.