PageSourceSearch

https://collectiviq.ai/chunk-QJFIEHWV.js

js collectiviq.ai collected 2026-10-05 11:56:47 UTC 18,251 bytes, 1 lines download raw bytes

1import{a as Q}from"./chunk-VH4TJVUU.js";import{a as j}from"./chunk-YHPR6L7C.js";import{a as F}from"./chunk-YBDCH3EP.js";import{h as V,k as $}from"./chunk-KXKZ2II4.js";import{$b as i,Ab as C,Bb as b,Bc as v,Cb as a,Db as n,Eb as y,Jb as M,Jc as z,Nb as g,Pb as c,V as T,Va as d,Vb as N,Wb as I,Yb as L,Zb as B,_ as h,_b as U,ac as l,bc as E,ea as p,fa as u,hb as R,ra as m,ta as P,tb as A,vb as f,wb as x,zb as S}from"./chunk-U77DCX7C.js";import{a as D,b as w}from"./chunk-A5AT2N7E.js";var k=`${F.apiBase}/api/admin/ddr-satisfaction`,O=class r{http=h($);getSummary(){return this.http.get(`${k}/summary`)}listUsers(t){let e=this.filterParams(t).set("page",t.page).set("page_size",t.pageSize);return this.http.get(`${k}/users`,{params:e})}downloadExport(t){let e=this.filterParams(t);return this.http.get(`${k}/export`,{params:e,responseType:"blob"})}filterParams(t){let e=new V;return t.q&&(e=e.set("q",t.q)),t.responseStatus&&(e=e.set("response_status",t.responseStatus)),t.ratingBucket&&(e=e.set("rating_bucket",t.ratingBucket)),t.minResponses&&(e=e.set("min_responses",t.minResponses)),t.rating&&(e=e.set("rating",t.rating)),e}static \u0275fac=function(e){return new(e||r)};static \u0275prov=T({token:r,factory:r.\u0275fac,providedIn:"root"})};var Z=["trendCanvas"],H=(r,t)=>t.user_id,W=(r,t)=>t.rating;function J(r,t){r&1&&(a(0,"p",3),i(1,"Loading\u2026"),n())}function K(r,t){if(r&1&&(a(0,"p",4),i(1),n()),r&2){let e=c();d(),l(e.errorText())}}function X(r,t){r&1&&(a(0,"p",3),i(1,"No ratings in the last 90 days."),n())}function Y(r,t){r&1&&(a(0,"div",11),y(1,"canvas",32,0),n())}function ee(r,t){if(r&1&&(a(0,"section",12)(1,"h2",10),i(2,"Repeat responders (more than one response)"),n(),a(3,"div",5)(4,"div",6)(5,"span",33),i(6),n(),a(7,"span",8),i(8,"Improved"),n()(),a(9,"div",6)(10,"span",7),i(11),n(),a(12,"span",8),i(13,"Flat"),n()(),a(14,"div",6)(15,"span",34),i(16),n(),a(17,"span",8),i(18,"Declined"),n()(),a(19,"div",6)(20,"span",7),i(21),n(),a(22,"span",8),i(23,"Net movement"),n()()()()),r&2){let e=t,s=c(2);d(6),l(e.improved),d(5),l(e.flat),d(5),l(e.declined),d(5),l(s.netMovementLabel())}}function te(r,t){r&1&&(a(0,"p",3),i(1,"No responses yet."),n())}function ne(r,t){if(r&1){let e=M();a(0,"button",38),g("click",function(){let o=p(e).$implicit,_=c(3);return u(_.selectBar(o.rating))}),a(1,"span",39),i(2),n(),a(3,"span",40),y(4,"span",41),n(),a(5,"span",42),i(6),n()()}if(r&2){let e=t.$implicit,s=c(3);B("is-selected",s.selectedRating()===e.rating),A("aria-pressed",s.selectedRating()===e.rating),d(2),l(e.label),d(2),U("ddr-sat__bar-fill--"+e.rating),L("width",e.pct,"%"),d(2),l(e.count)}}function ae(r,t){r&1&&(a(0,"p",3),i(1,"Loading\u2026"),n())}function ie(r,t){r&1&&(a(0,"p",3),i(1,"No users at this rating."),n())}function re(r,t){if(r&1&&(a(0,"tr")(1,"td"),i(2),n(),a(3,"td"),i(4),n()()),r&2){let e=t.$implicit,s=c(5);d(2),l(s.displayName(e)),d(2),l(e.email)}}function se(r,t){if(r&1&&(a(0,"table",47)(1,"thead")(2,"tr")(3,"th"),i(4,"Name"),n(),a(5,"th"),i(6,"Email"),n()()(),a(7,"tbody"),S(8,re,5,2,"tr",null,H),n()()),r&2){let e=c(4);d(8),C(e.raters())}}function oe(r,t){if(r&1){let e=M();a(0,"div",37)(1,"div",43)(2,"span",44),i(3),n(),a(4,"button",45),g("click",function(){p(e);let o=c(3);return u(o.selectBar(o.selectedRating()))}),y(5,"wa-icon",46),n()(),f(6,ae,2,0,"p",3)(7,ie,2,0,"p",3)(8,se,10,0,"table",47),n()}if(r&2){let e=c(3);d(3),E("Responders rating ",e.selectedRating()),d(3),x(e.ratersLoading()?6:e.raters().length===0?7:8)}}function de(r,t){if(r&1&&(a(0,"div",14)(1,"div",35),S(2,ne,7,9,"button",36,W),n(),f(4,oe,9,2,"div",37),n()),r&2){let e=c(2);d(2),C(e.buckets()),d(2),x(e.selectedRating()!==null?4:-1)}}function le(r,t){if(r&1&&(a(0,"tr")(1,"td"),i(2),n(),a(3,"td"),i(4),n(),a(5,"td"),i(6),n(),a(7,"td"),i(8),n(),a(9,"td"),i(10),n(),a(11,"td"),i(12),n(),a(13,"td"),i(14),n()()),r&2){let e=t.$implicit,s=c(2);d(2),l(s.displayName(e)),d(2),l(e.email),d(2),l(e.workspace_name??"-"),d(2),l(e.ddr_turns),d(2),l(e.num_responses),d(2),l(e.latest_rating??"-"),d(2),l(e.response_status)}}function ce(r,t){if(r&1&&(a(0,"tr")(1,"td",48),i(2),n()()),r&2){let e=c(2);d(2),l(e.usersLoading()?"Loading\u2026":"No matching users.")}}function me(r,t){if(r&1){let e=M();a(0,"div",5)(1,"div",6)(2,"span",7),i(3),n(),a(4,"span",8),i(5,"Eligible users"),n()(),a(6,"div",6)(7,"span",7),i(8),n(),a(9,"span",8),i(10,"Responded"),n()(),a(11,"div",6)(12,"span",7),i(13),n(),a(14,"span",8),i(1
15,"Response rate"),n()(),a(16,"div",6)(17,"span",7),i(18),n(),a(19,"span",8),i(20,"Avg satisfaction"),n()()(),a(21,"section",9)(22,"h2",10),i(23,"Sentiment trend (last 90 days)"),n(),f(24,X,2,0,"p",3)(25,Y,3,0,"div",11),n(),f(26,ee,24,4,"section",12),a(27,"section",13)(28,"h2",10),i(29,"Current sentiment (latest rating per responder)"),n(),f(30,te,2,0,"p",3)(31,de,5,1,"div",14),n(),a(32,"section",15)(33,"h2",10),i(34,"Eligible users"),n(),a(35,"div",16)(36,"input",17),g("input",function(o){p(e);let _=c();return u(_.onSearch(o.target.value))}),n(),a(37,"select",18),g("change",function(o){p(e);let _=c();return u(_.onResponseStatus(o.target.value))}),a(38,"option",19),i(39,"All statuses"),n(),a(40,"option",20),i(41,"Responded"),n(),a(42,"option",21),i(43,"No response"),n(),a(44,"option",22),i(45,"Dismissed only"),n()(),a(46,"select",23),g("change",function(o){p(e);let _=c();return u(_.onRatingBucket(o.target.value))}),a(47,"option",19),i(48,"All ratings"),n(),a(49,"option",24),i(50,"Satisfied (4-5)"),n(),a(51,"option",25),i(52,"Neutral (3)"),n(),a(53,"option",26),i(54,"Dissatisfied (1-2)"),n()(),a(55,"label",27)(56,"input",28),g("change",function(o){p(e);let _=c();return u(_.onRepeatOnly(o.target.checked))}),n(),i(57," Repeat responders (2+) "),n(),a(58,"button",29),g("click",function(){p(e);let o=c();return u(o.exportCsv())}),i(59),n()(),a(60,"table",30)(61,"thead")(62,"tr")(63,"th"),i(64,"User"),n(),a(65,"th"),i(66,"Email"),n(),a(67,"th"),i(68,"Workspace"),n(),a(69,"th"),i(70,"Turns"),n(),a(71,"th"),i(72,"Responses"),n(),a(73,"th"),i(74,"Latest"),n(),a(75,"th"),i(76,"Status"),n()()(),a(77,"tbody"),S(78,le,15,7,"tr",null,H,!1,ce,3,1,"tr"),n()(),a(81,"app-pagination",31),g("pageChange",function(o){p(e);let _=c();return u(_.goToPage(o))}),n()()}if(r&2){let e,s=t,o=c();d(3),l(s.eligible_count),d(5),l(s.responded_count),d(5),E("",o.responseRatePct(),"%"),d(5),l(s.average_latest===null?"-":s.average_latest),d(6),x(s.trend.length===0?24:25),d(2),x((e=o.movement())?26:-1,e),d(4),x(s.responded_count===0?30:31),d(6),b("value",o.searchTerm()),d(),b("value",o.responseStatus()??""),d(9),b("value",o.ratingBucket()??""),d(10),b("checked",o.repeatOnly()),d(2),b("disabled",o.exporting()),d(),E(" ",o.exporting()?"Exporting\u2026":"Export CSV"," "),d(19),C(o.users()),d(3),b("disabled",o.usersLoading())("page",o.page())("pageSize",o.pageSize)("total",o.usersTotal())}}var _e=10,pe={5:"Love them",4:"Good",3:"Okay",2:"Not great",1:"Frustrated"},q=class r{api=h(O);loading=m(!0);errorText=m(null);data=m(null);trendCanvas=z("trendCanvas");chart=null;responseRatePct=v(()=>Math.round((this.data()?.response_rate??0)*100));buckets=v(()=>{let t=this.data()?.latest_distribution??{},e=[5,4,3,2,1].map(o=>({rating:o,label:pe[o],count:t[String(o)]??0})),s=Math.max(1,...e.map(o=>o.count));return e.map(o=>w(D({},o),{pct:Math.round(o.count/s*100)}))});selectedRating=m(null);raters=m([]);ratersLoading=m(!1);ratersSeq=0;movement=v(()=>this.data()?.repeat_movement??null);netMovementLabel=v(()=>{let t=this.movement()?.avg_delta??0;return t>0?`+${t}`:`${t}`});usersLoading=m(!1);users=m([]);usersTotal=m(0);page=m(1);searchTerm=m("");responseStatus=m(null);ratingBucket=m(null);repeatOnly=m(!1);pageSize=_e;exporting=m(!1);pageCount=v(()=>Math.max(1,Math.ceil(this.usersTotal()/this.pageSize)));usersSeq=0;reloadTimer;constructor(){P(()=>{this.page(),this.searchTerm(),this.responseStatus(),this.ratingBucket(),this.repeatOnly(),clearTimeout(this.reloadTimer),this.reloadTimer=setTimeout(()=>this.loadUsers(),250)}),P(()=>{let t=this.data(),e=this.trendCanvas()?.nativeElement;this.chart?.destroy(),this.chart=null,!(!t||!e||t.trend.length===0)&&(this.chart=new Q(e,{type:"line",data:{labels:t.trend.map(s=>s.day),datasets:[{label:"Avg rating",data:t.trend.map(s=>s.avg_rating),yAxisID:"y",borderColor:"#0284c7",backgroundColor:"#0284c7",tension:.3},{label:"Responses",type:"bar",data:t.trend.map(s=>s.count),yAxisID:"y1",backgroundColor:"rgba(2, 132, 199, 0.15)"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},scales:{y:{min:1,max:5,title:{display:!0,text:"Avg rating"}},y1:{position:"right",beginAtZero:!0,grid:{drawOnChartArea:!1},title:{display:!0,text:"Responses"}}}}}))})}ngOnInit(){this.api.getSummary().subscribe({next:t=>{this.data.set(t),this.loading.set(!1)},error:()=>{this.errorText.set("Could not load DDR satisfaction data."),this.loading.set(!1)}})}ngOnDestroy(){this.chart?.destroy(),clearTimeout(this.reloadTimer)}loadUsers(){let t=++this.usersSeq;this.usersLoading.set(!0),this.api.listUsers({page:this.page(),pageSize:this.pageSize,q:this.searchTerm().trim()||void 0,responseStatus:this.responseStatus(),ratingBucket:this.ratingBucket(),minResponses:this.repeatOnly()?2:null}).subscribe({next:e=>{t===this.usersSeq&&(this.users.set(e.items),this.usersTotal.set(e.total),this.usersLoading.set(!1))},error:()=>{t===this.usersSeq&&(this.users.set([]),this.usersTotal.set(0),this.usersLoading.set(!1))}})}onSearch(t){this.searchTerm.set(t),this.page.set(1)}onResponseStatus(t){this.responseStatus.set(t||null),this.page.set(1)}onRatingBucket(t){this.ratingBucket.set(t||null),this.page.set(1)}onRepeatOnly(t){this.repeatOnly.set(t),this.page.set(1)}goToPage(t){this.page.set(Math.min(Math.max(1,t),this.pageCount()))}exportCsv(){this.exporting()||(this.exporting.set(!0),this.api.downloadExport({q:this.searchTerm().trim()||void 0,responseStatus:this.responseStatus(),ratingBucket:this.ratingBucket(),minResponses:this.repeatOnly()?2:null}).subscribe({next:t=>{let e=URL.createObjectURL(t),s=document.createElement("a");s.href=e,s.download="ddr-satisfaction.csv",s.click(),setTimeout(()=>URL.revokeObjectURL(e),0),this.exporting.set(!1)},error:()=>this.exporting.set(!1)}))}displayName(t){return`${t.first_name??""} ${t.last_name??""}`.trim()||t.email}selectBar(t){if(this.selectedRating()===t){this.selectedRating.set(null),this.raters.set([]);return}this.selectedRating.set(t);let e=++this.ratersSeq;this.ratersLoading.set(!0),this.raters.set([]),this.api.listUsers({page:1,pageSize:200,rating:t}).subscribe({next:s=>{e===this.ratersSeq&&(this.raters.set(s.items),this.ratersLoading.set(!1))},error:()=>{e===this.ratersSeq&&(this.raters.set([]),this.ratersLoading.set(!1))}})}static \u0275fac=function(e){return new(e||r)};static \u0275cmp=R({type:r,selectors:[["app-admin-ddr-satisfaction"]],viewQuery:function(e,s){e&1&&N(s.trendCanvas,Z,5),e&2&&I()},decls:6,vars:1,consts:[["trendCanvas",""],["data-testid","admin-ddr-satisfaction",1,"ddr-sat"],[1,"ddr-sat__subtitle"],[1,"ddr-sat__status"],[1,"ddr-sat__status","ddr-sat__status--error"],[1,"ddr-sat__cards"],[1,"ddr-sat__card"],[1,"ddr-sat__card-value"],[1,"ddr-sat__card-label"],[1,"ddr-sat__trend"],[1,"ddr-sat__section-title"],[1,"ddr-sat__chart"],[1,"ddr-sat__movement"],[1,"ddr-sat__dist"],[1,"ddr-sat__dist-layout"],[1,"ddr-sat__users"],[1,"ddr-sat__filters"],["data-testid","ddr-sat-search","placeholder","Search name or email\u2026","type","search",1,"ddr-sat__search",3,"input","value"],["data-testid","ddr-sat-status-filter",3,"change","value"],["value",""],["value","responded"],["value","no_response"],["value","dismissed_only"],["data-testid","ddr-sat-bucket-filter",3,"change","value"],["value","satisfied"],["value","neutral"],["value","dissatisfied"],[1,"ddr-sat__repeat"],["type","checkbox",3,"change","checked"],["data-testid","ddr-sat-export","type","button",1,"ddr-sat__export",3,"click","disabled"],["data-testid","ddr-sat-users-table",1,"ddr-sat__table"],["noun","users",3,"pageChange","disabled","page","pageSize","total"],["data-testid","ddr-sat-trend-canvas"],[1,"ddr-sat__card-value","ddr-sat__card-value--good"],[1,"ddr-sat__card-value","ddr-sat__card-value--bad"],[1,"ddr-sat__bars"],["type","button",1,"ddr-sat__bar-row",3,"is-selected"],["data-testid","ddr-sat-raters",1,"ddr-sat__raters"],["type","button",1,"ddr-sat__bar-row",3,"click"],[1,"ddr-sat__bar-label"],[1,"ddr-sat__bar-track"],[1,"ddr-sat__bar-fill"],[1,"ddr-sat__bar-count"],[1,"ddr-sat__raters-head"],[1,"ddr-sat__raters-title"],["aria-label","Close","type","button",1,"ddr-sat__raters-close",3,"click"],["name","xmark"],[1,"ddr-sat__raters-table"],["colspan","7",1,"ddr-sat__empty"]],template:function(e,s){if(e&1&&(a(0,"div",1)(1,"p",2),i(2,"How heavy DDR users (more than 50 turns) feel about their Digital Direct Reports."),n(),f(3,J,2,0,"p",3)(4,K,2,1,"p",4)(5,me,82,18),n()),e&2){let o;d(3),x(s.loading()?3:s.errorText()?4:(o=s.data())?5:-1,o)}},dependencies:[j],styles:[".ddr-sat[_ngcontent-%COMP%]{max-width:1100px}.ddr-sat__subtitle[_ngcontent-%COMP%]{margin:0 0 1.5rem;color:var(--neutral-50)}.ddr-sat__status[_ngcontent-%COMP%]{color:var(--neutral-50)}.ddr-sat__status--error[_ngcontent-%COMP%]{color:#dc2626}.ddr-sat__cards[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1rem;margin-bottom:2rem}.ddr-sat__card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;padding:1rem 1.25rem;background:var(--surface-card);border:1px solid var(--border-color-neutral);border-radius:10px}.ddr-sat__card-value[_ngcontent-%COMP%]{font-size:1.75rem;font-weight:700;color:var(--font-color-default)}.ddr-sat__card-label[_ngcontent-%COMP%]{font-size:.8rem;color:var(--neutral-50)}.ddr-sat__trend[_ngcontent-%COMP%], .ddr-sat__movement[_ngcontent-%COMP%]{margin-bottom:2rem}.ddr-sat__chart[_ngcontent-%COMP%]{position:relative;height:280px;max-width:900px}.ddr-sat__card-value--good[_ngcontent-%COMP%]{color:#16a34a}.ddr-sat__card-value--bad[_ngcontent-%COMP%]{color:#dc2626}.ddr-sat__section-title[_ngcontent-%COMP%]{margin:0 0 .75rem;font-size:1rem;font-weight:600;color:var(--font-color-default)}.ddr-sat__dist-layout[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:flex-start;gap:2rem}.ddr-sat__bars[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem;flex:1 1 420px;max-width:640px}.ddr-sat__bar-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:90px 1fr 2.5rem;align-items:center;gap:.75rem;width:100%;padding:.25rem .4rem;border:1px solid transparent;border-radius:6px;background:transparent;font:inherit;text-align:left;cursor:pointer}.ddr-sat__bar-row[_ngcontent-%COMP%]:hover{background:var(--background-neutral-dark, #f1f5f9)}.ddr-sat__bar-row.is-selected[_ngcontent-%COMP%]{border-color:var(--brand);background:var(--brand-95, #e0f2fe)}.ddr-sat__bar-row[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--brand);outline-offset:1px}.ddr-sat__raters[_ngcontent-%COMP%]{flex:1 1 320px;min-width:280px;max-width:460px;border:1px solid var(--border-color-neutral);border-radius:10px;background:var(--surface-card);overflow:hidden}.ddr-sat__raters-head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:.6rem .9rem;border-bottom:1px solid var(--border-color-neutral);font-weight:600;color:var(--font-color-default)}.ddr-sat__raters-close[_ngcontent-%COMP%]{display:inline-flex;padding:.2rem;border:0;background:transparent;color:var(--neutral-50);
1cursor:pointer}.ddr-sat__raters-close[_ngcontent-%COMP%]:hover{color:var(--font-color-default)}.ddr-sat__raters-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;font-size:.85rem}.ddr-sat__raters-table[_ngcontent-%COMP%]   th[_ngcontent-%COMP%], .ddr-sat__raters-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{padding:.45rem .9rem;text-align:left;border-bottom:1px solid var(--border-color-neutral)}.ddr-sat__raters-table[_ngcontent-%COMP%]   th[_ngcontent-%COMP%]{font-weight:600;color:var(--neutral-50)}.ddr-sat__raters[_ngcontent-%COMP%]   .ddr-sat__status[_ngcontent-%COMP%]{padding:.9rem}.ddr-sat__bar-label[_ngcontent-%COMP%]{font-size:.8rem;font-weight:600;color:var(--font-color-default)}.ddr-sat__bar-track[_ngcontent-%COMP%]{display:block;height:18px;background:var(--background-neutral-dark, #f1f5f9);border-radius:4px;overflow:hidden}.ddr-sat__bar-fill[_ngcontent-%COMP%]{display:block;height:100%;min-width:2px;border-radius:4px;transition:width .2s ease}.ddr-sat__bar-count[_ngcontent-%COMP%]{font-size:.8rem;font-variant-numeric:tabular-nums;color:var(--neutral-50);text-align:right}.ddr-sat__bar-fill--5[_ngcontent-%COMP%]{background:#16a34a}.ddr-sat__bar-fill--4[_ngcontent-%COMP%]{background:#65a30d}.ddr-sat__bar-fill--3[_ngcontent-%COMP%]{background:#d97706}.ddr-sat__bar-fill--2[_ngcontent-%COMP%]{background:#ea580c}.ddr-sat__bar-fill--1[_ngcontent-%COMP%]{background:#dc2626}.ddr-sat__users[_ngcontent-%COMP%]{margin-top:2rem}.ddr-sat__filters[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:1rem}.ddr-sat__search[_ngcontent-%COMP%], .ddr-sat__filters[_ngcontent-%COMP%]   select[_ngcontent-%COMP%]{padding:.4rem .6rem;border:1px solid var(--border-color-neutral);border-radius:6px;background:var(--surface-card);color:var(--font-color-default);font:inherit}.ddr-sat__search[_ngcontent-%COMP%]{min-width:220px}.ddr-sat__repeat[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.4rem;font-size:.85rem;color:var(--font-color-default)}.ddr-sat__export[_ngcontent-%COMP%]{margin-left:auto;padding:.4rem .9rem;border:0;border-radius:6px;background:var(--brand);color:var(--brand-on);font:inherit;font-weight:600;cursor:pointer}.ddr-sat__export[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:default}.ddr-sat__table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;font-size:.85rem}.ddr-sat__table[_ngcontent-%COMP%]   th[_ngcontent-%COMP%], .ddr-sat__table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{padding:.5rem .75rem;text-align:left;border-bottom:1px solid var(--border-color-neutral)}.ddr-sat__table[_ngcontent-%COMP%]   th[_ngcontent-%COMP%]{font-weight:600;color:var(--neutral-50)}.ddr-sat__empty[_ngcontent-%COMP%]{text-align:center;color:var(--neutral-50);padding:1.5rem}"],changeDetection:0})};export{q as AdminDdrSatisfaction};

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.