1 2!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1134910c-121b-5c15-97a6-99ba8984d766")}catch(e){}}(); 3import{a as ut,b as _t}from"./chunk-FMAAPPZH.js";import{a as it,b as nt,c as at,e as ot,f as rt,h as lt,i as st,k as mt,l as dt,n as ct,p as pt}from"./chunk-IZJQTZVB.js";import{a as tt}from"./chunk-W7NCBQUV.js";import{a as Ze,c as Je,d as Qe,e as et}from"./chunk-C5T7GUT6.js";import"./chunk-DSHWJW7U.js";import{a as Xe}from"./chunk-FLZNG7WM.js";import{b as Ye}from"./chunk-Y53ZYOIU.js";import{a as qe,c as Ge}from"./chunk-4OKMPB3H.js";import{a as me}from"./chunk-AGVOJNE2.js";import{c as He}from"./chunk-CN4EGA4I.js";import{a as We}from"./chunk-5K5PYV5V.js";import{a as G}from"./chunk-TDGVUJZJ.js";import{a as Ie,b as K,d as te,e as U,f as j,g as z,h as W,i as H}from"./chunk-MWF7JXGK.js";import{a as Y,b as X}from"./chunk-KS3Q7H57.js";import"./chunk-MJXNRHWH.js";import"./chunk-BUOPWRDV.js";import{d as je,e as ze}from"./chunk-UQU3EU23.js";import"./chunk-346ISJSG.js";import{b as le,d as se}from"./chunk-CNRKNNWP.js";import{d as ne}from"./chunk-L6Z7ZO7O.js";import"./chunk-TLCCWCNW.js";import{a as re}from"./chunk-5SJALNJN.js";import{a as ae,c as Ue,i as oe}from"./chunk-XEY266ER.js";import"./chunk-SEDEP525.js";import"./chunk-SECBI6OV.js";import"./chunk-56KVT3OQ.js";import{G as $e,H as Oe,I as Ke,b as we,d as h,g as ie,h as Be,n as Ve,o as ke,p as Pe,r as Re,u as Fe,y as Ne,z as Le}from"./chunk-MF7VZYLI.js";import{a as k,b as P,e as R}from"./chunk-NFMDOWTR.js";import"./chunk-QE6DXY66.js";import{b as q}from"./chunk-B5YZVWIB.js";import"./chunk-HCSN2NMS.js";import"./chunk-FDIRDMLL.js";import"./chunk-XQLUXGKM.js";import"./chunk-3JHJJCIF.js";import"./chunk-J4X36CU5.js";import"./chunk-X3ZU2Z3D.js";import"./chunk-QZXCI4ZV.js";import"./chunk-VO633UWN.js";import{e as J}from"./chunk-XIKGSSI2.js";import"./chunk-MNZQGPDO.js";import"./chunk-MU5APV2L.js";import"./chunk-KRFZY2QT.js";import"./chunk-DFSGG2NH.js";import"./chunk-MREDPIUE.js";import"./chunk-BWICLBYB.js";import"./chunk-TYTNPDEC.js";import{f as Me}from"./chunk-WAPZ5LEW.js";import{B as O,E as ee,L as De,z as $}from"./chunk-746D4QTP.js";import{Ac as g,Dc as u,Ib as I,Nc as ye,Ob as b,Oc as Q,Pc as Te,Rc as L,Sc as a,Tc as p,Ua as Se,Uc as v,Vc as M,Yc as pe,Zc as ue,_c as _e,cc as m,dc as d,dd as xe,fc as Z,gc as w,hc as B,hd as Ae,ic as S,jc as n,kc as i,la as be,lc as c,nd as x,od as f,pc as y,pd as N,qa as C,qb as o,qc as T,uc as V,va as A,wa as D,xa as Ee}from"./chunk-BZJI6Z2X.js";import"./chunk-CS7K6LXP.js";var xt="checkout_payment_ui",fe="checkout_payment_ui_v2_3",ve=[fe],F=(()=>{class t{http=C(Me);basePath="api/v4/admin/ab_experiments";list(e){return this.http.get(`${this.basePath}.json`,{params:e})}get(e){return this.http.get(`${this.basePath}/${e}.json`)}create(e){return this.http.post(`${this.basePath}.json`,e)}update(e,r){return this.http.put(`${this.basePath}/${e}.json`,r)}previousSettings(e){return this.http.get(`${this.basePath}/previous_settings.json`,{params:{key:e}})}getVersions(e){return this.http.get(`${this.basePath}/${e}/versions.json`)}getResults(e,r=!1){let s={};return r&&(s.refresh="true"),this.http.get(`${this.basePath}/${e}/results.json`,{params:s})}triggerCompute(e){return this.http.post(`${this.basePath}/${e}/trigger_compute.json`,{})}static \u0275fac=function(r){return new(r||t)};static \u0275prov=be({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function Tt(t,l){t&1&&c(0,"input",7)}function At(t,l){if(t&1&&(n(0,"mat-option",9),a(1),i()),t&2){let e=l.$implicit;S("value",e),o(),p(e)}}function Dt(t,l){t&1&&(n(0,"mat-hint"),a(1,"Loading previous settings..."),i())}function Mt(t,l){if(t&1){let e=V();n(0,"mat-select",30),g("selectionChange",function(s){A(e);let _=u();return D(_.onKeyChange(s.value))}),w(1,At,2,2,"mat-option",9,Z),i(),m(3,Dt,2,0,"mat-hint")}if(t&2){let e=u();o(),B(e.registeredKeys),o(2),d(e.spinner.loadingPrevious?3:-1)}}function It(t,l){if(t&1&&(n(0,"mat-option",9),a(1),x(2,"titlecase"),i()),t&2){let e=l.$implicit;S("value",e),o(),p(f(2,2,e))}}function wt(t,l){t&1&&(n(0,"div",5)(1,"div",6)(2,"mat-form-field")(3,"mat-label"),a(4,"Variant B Description"),i(),c(5,"input",31),n(6,"mat-hint"),a(7,'Describes what "variant_b" (Flow C) visitors see.'),i()()()())}function Bt(t,l){t&1&&(n(0,"mat-hint"),a(1,'Flow B ("variant") traffic percentage.'),i())}function Vt(t,l){t&1&&(n(0,"mat-hint"),a(1,"Percent of enrolled visitors assigned to variant. Remainder gets control (e.g. 50 = 50/50)."),i())}function kt(t,l){if(t&1&&(n(0,"div",6)(1,"mat-form-field")(2,"mat-label"),a(3,"Variant B Traffic (%)"),i(),c(4,"input",32),n(5,"mat-hint"),a(6),i()()()),t&2){let e=u();o(6),v('Flow C ("variant_b") traffic. Control gets ',e.implicitControlPercentage,"%.")}}function Pt(t,l){t&1&&(n(0,"div",6)(1,"mat-form-field")(2,"mat-label"),a(3,"Cookie TTL (days)"),i(),c(4,"input",33),i()())}function Rt(t,l){t&1&&(n(0,"p",15),a(1,"Variant and Variant B percentages must total 100% or less."),i())}function Ft(t,l){t&1&&(n(0,"div",5)(1,"div",6)(2,"mat-form-field")(3,"mat-label"),a(4,"Cookie TTL (days)"),i(),c(5,"input",33),i()()())}function Nt(t,l){t&1&&(n(0,"div",10)(1,"mat-form-field")(2,"mat-label"),a(3,"
3Excluded Org IDs"),i(),c(4,"input",34),n(5,"mat-hint"),a(6,"Comma-separated org IDs to exclude from checkout analysis metrics."),i()()())}var ge=(()=>{class t{fb=C($e);abExperimentsService=C(F);dialog=C(te);dialogRef=C(Ie);editMode=!1;experiment;registeredKeys=[];form=this.fb.group({key:["",h.required],status:["paused",h.required],controlDescription:[""],variantDescription:[""],variantBDescription:[""],percentage:[0,[h.required,h.min(0),h.max(100)]],variantBPercentage:[0,[h.min(0),h.max(100)]],name:[""],brandIds:[""],excludedBrandIds:[""],defaultVariant:["control"],excludeGivingEventBrands:[!0],cookieTtlDays:[30,[h.required,h.min(1)]],notes:[""],excludedOrgIds:[""],significanceThreshold:[.95,[h.min(.5),h.max(1)]],minSampleSize:[100,[h.min(1)]],minimumDetectableEffect:[.05,[h.min(.01),h.max(1)]]},{validators:t.threeArmPercentageValidator});statuses=["active","paused","completed"];spinner={save:!1,loadingPrevious:!1};data=C(K);ngOnInit(){this.registeredKeys=this.data?.registeredKeys||[],this.data?.element?.id&&(this.editMode=!0,this.experiment=this.data.element,this.populateForm())}onKeyChange(e){this.editMode||!e||(this.spinner.loadingPrevious=!0,this.abExperimentsService.previousSettings(e).subscribe({next:r=>{if(this.spinner.loadingPrevious=!1,r?.id){this.form.controls.controlDescription.setValue(r.control_description||""),this.form.controls.variantDescription.setValue(r.variant_description||""),this.form.controls.variantBDescription.setValue(r.variant_b_description||""),this.form.controls.percentage.setValue(r.percentage),this.form.controls.variantBPercentage.setValue(r.variant_b_percentage??0),this.form.controls.brandIds.setValue((r.brand_ids||[]).join(", ")),this.form.controls.excludedBrandIds.setValue((r.excluded_brand_ids||[]).join(", ")),this.form.controls.defaultVariant.setValue(r.outside_scope_variant||"control"),this.form.controls.cookieTtlDays.setValue(r.cookie_ttl_days),this.form.controls.notes.setValue(r.notes||"");let s=r.stats_config||{};this.form.controls.excludedOrgIds.setValue((s.excluded_org_ids||[]).join(", ")),this.form.controls.excludeGivingEventBrands.setValue(s.exclude_giving_event_brands??r.exclude_giving_event_brands??!0)}},error:()=>{this.spinner.loadingPrevious=!1}}))}get brandIds(){return(this.form.controls.brandIds.value||"").split(",").map(r=>parseInt(r.trim(),10)).filter(r=>!isNaN(r)&&r>0)}get excludedBrandIds(){return(this.form.controls.excludedBrandIds.value||"").split(",").map(r=>parseInt(r.trim(),10)).filter(r=>!isNaN(r)&&r>0)}get excludedOrgIds(){return(this.form.controls.excludedOrgIds.value||"").split(",").map(r=>parseInt(r.trim(),10)).filter(r=>!isNaN(r)&&r>0)}get brandIdsHint(){return"Comma-separated brands in the A/B test. Leave empty to test all brands."}get showExcludedOrgIdsField(){return this.isCheckoutAnalysisExperimentKey(this.form.controls.key.value)}get isThreeArmKey(){return ve.includes(this.form.controls.key.value)}get implicitControlPercentage(){let e=Number(this.form.controls.percentage.value)||0,r=Number(this.form.controls.variantBPercentage.value)||0;return Math.max(0,100-e-r)}save(){if(this.form.invalid)return;let e=this.brandIds;
3e.length===0?this.dialog.open(me,{data:{title:"Apply to all brands?",content:"No brand IDs specified \u2014 this experiment will apply to ALL brands.",confirmButtonText:"Continue",cancelButtonText:"Cancel"}}).afterClosed().subscribe(r=>{r&&this.submitExperiment(e)}):this.submitExperiment(e)}submitExperiment(e){this.spinner.save=!0;let r=this.excludedOrgIds,s={significance_threshold:this.form.controls.significanceThreshold.value,min_sample_size:this.form.controls.minSampleSize.value,minimum_detectable_effect:this.form.controls.minimumDetectableEffect.value,exclude_giving_event_brands:this.form.controls.excludeGivingEventBrands.value};this.isCheckoutAnalysisExperimentKey(this.form.controls.key.value)&&r.length>0&&(s.excluded_org_ids=r);let _=this.excludedBrandIds,E={key:this.form.controls.key.value,name:this.form.controls.name.value,status:this.form.controls.status.value,control_description:this.form.controls.controlDescription.value,variant_description:this.form.controls.variantDescription.value,percentage:this.form.controls.percentage.value,brand_ids:e.length>0?e:[],excluded_brand_ids:_.length>0?_:[],outside_scope_variant:this.form.controls.defaultVariant.value,cookie_ttl_days:this.form.controls.cookieTtlDays.value,notes:this.form.controls.notes.value,stats_config:s};this.isThreeArmKey&&(E.variant_b_description=this.form.controls.variantBDescription.value,E.variant_b_percentage=this.form.controls.variantBPercentage.value);let he={ab_experiment:E},ce;this.editMode?ce=this.abExperimentsService.update(this.experiment.id,he):ce=this.abExperimentsService.create(he),ce.subscribe({next:ht=>{this.spinner.save=!1,this.dialogRef.close(ht)},error:()=>{this.spinner.save=!1}})}static threeArmPercentageValidator(e){let r=e.get("key")?.value;if(!ve.includes(r))return null;let s=Number(e.get("percentage")?.value)||0,_=Number(e.get("variantBPercentage")?.value)||0;return s+_>100?{threeArmPercentageSum:!0}:null}populateForm(){this.form.controls.key.setValue(this.experiment.key),this.form.controls.name.setValue(this.experiment.name||""),this.form.controls.status.setValue(this.experiment.status),this.form.controls.controlDescription.setValue(this.experiment.control_description||""),this.form.controls.variantDescription.setValue(this.experiment.variant_description||""),this.form.controls.variantBDescription.setValue(this.experiment.variant_b_description||""),this.form.controls.percentage.setValue(this.experiment.percentage),this.form.controls.variantBPercentage.setValue(this.experiment.variant_b_percentage??0),this.form.controls.brandIds.setValue((this.experiment.brand_ids||[]).join(", ")),this.form.controls.excludedBrandIds.setValue((this.experiment.excluded_brand_ids||[]).join(", ")),this.form.controls.defaultVariant.setValue(this.experiment.outside_scope_variant||"control"),this.form.controls.cookieTtlDays.setValue(this.experiment.cookie_ttl_days),this.form.controls.notes.setValue(this.experiment.notes||"");let e=this.experiment.stats_config||{};this.form.controls.excludedOrgIds.setValue((e.excluded_org_ids||[]).join(", ")),this.form.controls.significanceThreshold.setValue(e.significance_threshold??.95),this.form.controls.minSampleSize.setValue(e.min_sample_size??100),this.form.controls.minimumDetectableEffect.setValue(e.minimum_detectable_effect??.05),this.form.controls.excludeGivingEventBrands.setValue(e.exclude_giving_event_brands??this.experiment.exclude_giving_event_brands??!0)}isCheckoutAnalysisExperimentKey(e){return e==="checkout_flow"||e===xt||e===fe}static \u0275fac=function(r){return new(r||t)};static \u0275cmp=I({type:t,selectors:[["app-create-update-ab-experiment-dialog"]],decls:120,vars:16,consts:[["mat-dialog-title",""],["mat-dialog-close","","mat-icon-button","","aria-label","close",1,"dialog-close"],[1,"fa-solid","fa-times"],[3,"ngSubmit","formGroup"],["appDialogScroll",""],[1,"row","mb-3"],[1,"col-12","col-md-6"],["formControlName","key","matInput","","readonly",""],["formControlName","status"],[3,"value"],[1,"mb-3"],["formControlName","name","matInput","","placeholder","e.g. Checkout Flow Redesign v2"],["formControlName","controlDescription","matInput","","placeholder","e.g. Original checkout flow"],["formControlName","variantDescription","matInput","","placeholder","e.g. Redesigned checkout flow"],["formControlName","percentage","matInput","","type","number","min","0","max","100"],[1,"text-danger","small","mb-3"],["formControlName","defaultVariant"],["value","control"],["value","variant"],["formControlName","brandIds","matInput","","placeholder","e.g. 1, 5, 12"],["formControlName","excludedBrandIds","matInput","","placeholder","e.g. 55, 198"],["formControlName","excludeGivingEventBrands"],[1,"text-muted","small","mt-1"],["formControlName","notes","matInput","","rows","3"],["formControlName","significanceThreshold","matInput","","type","number","min","0.5","max","1","step","0.01"],["formControlName","minSampleSize","matInput","","type","number","min","1"],["formControlName","minimumDetectableEffe
3ct","matInput","","type","number","min","0.01","max","1","step","0.01"],["align","end"],["mat-button","","color","accent","type","button",1,"custom","auto",3,"mat-dialog-close"],["mat-button","","color","primary","type","submit","appLoadingBtn","",1,"custom","auto",3,"active","disabled"],["formControlName","key",3,"selectionChange"],["formControlName","variantBDescription","matInput","","placeholder","e.g. Flow C layout tweaks"],["formControlName","variantBPercentage","matInput","","type","number","min","0","max","100"],["formControlName","cookieTtlDays","matInput","","type","number","min","1"],["formControlName","excludedOrgIds","matInput","","placeholder","e.g. 101, 202, 303"]],template:function(r,s){r&1&&(n(0,"h3",0),a(1),i(),n(2,"button",1),c(3,"i",2),i(),n(4,"form",3),g("ngSubmit",function(){return s.save()}),n(5,"mat-dialog-content",4)(6,"div",5)(7,"div",6)(8,"mat-form-field")(9,"mat-label"),a(10,"Key"),i(),m(11,Tt,1,0,"input",7)(12,Mt,4,1),i()(),n(13,"div",6)(14,"mat-form-field")(15,"mat-label"),a(16,"Status"),i(),n(17,"mat-select",8),w(18,It,3,4,"mat-option",9,Z),i()()()(),n(20,"div",10)(21,"mat-form-field")(22,"mat-label"),a(23,"Name"),i(),c(24,"input",11),i()(),n(25,"div",5)(26,"div",6)(27,"mat-form-field")(28,"mat-label"),a(29,"Control Description"),i(),c(30,"input",12),n(31,"mat-hint"),a(32,'Describes what "control" visitors see.'),i()()(),n(33,"div",6)(34,"mat-form-field")(35,"mat-label"),a(36,"Variant Description"),i(),c(37,"input",13),n(38,"mat-hint"),a(39),i()()()(),m(40,wt,8,0,"div",5),n(41,"div",5)(42,"div",6)(43,"mat-form-field")(44,"mat-label"),a(45),i(),c(46,"input",14),m(47,Bt,2,0,"mat-hint")(48,Vt,2,0,"mat-hint"),i()(),m(49,kt,7,1,"div",6)(50,Pt,5,0,"div",6),i(),m(51,Rt,2,0,"p",15),m(52,Ft,6,0,"div",5),n(53,"div",5)(54,"div",6)(55,"mat-form-field")(56,"mat-label"),a(57,"Default Variant (when not in test)"),i(),n(58,"mat-select",16)(59,"mat-option",17),a(60,"Control (Flow A)"),i(),n(61,"mat-option",18),a(62,"Variant (Flow B)"),i()(),n(63,"mat-hint"),a(64,"Shown when a brand is excluded or not listed in Brand IDs."),i()()()(),n(65,"div",10)(66,"mat-form-field")(67,"mat-label"),a(68,"Brand IDs"),i(),c(69,"input",19),n(70,"mat-hint"),a(71),i()()(),n(72,"div",10)(73,"mat-form-field")(74,"mat-label"),a(75,"Excluded Brand IDs"),i(),c(76,"input",20),n(77,"mat-hint"),a(78,"Excluded brands skip the A/B test and receive the default variant above."),i()()(),n(79,"div",10)(80,"app-ms-toggle",21),a(81,"Disable on giving event brands"),i(),n(82,"p",22),a(83," When on, brands with an active giving event (scheduled donations window) skip the test and receive the default variant. "),i()(),m(84,Nt,7,0,"div",10),n(85,"div",10)(86,"mat-form-field")(87,"mat-label"),a(88,"Notes"),i(),c(89,"textarea",23),i()(),n(90,"h6",10),a(91,"Analysis Settings"),i(),n(92,"div",5)(93,"div",6)(94,"mat-form-field")(95,"mat-label"),a(96,"Significance Threshold"),i(),c(97,"input",24),n(98,"mat-hint"),a(99,"P(B>A) needed to declare winner"),i()()(),n(100,"div",6)(101,"mat-form-field")(102,"mat-label"),a(103,"Min Sample Size"),i(),c(104,"input",25),n(105,"mat-hint"),a(106,"Visitors per variant before actionable"),i()()()(),n(107,"div",5)(108,"div",6)(109,"mat-form-field")(110,"mat-label"),a(111,"Min Detectable Effect"),i(),c(112,"input",26),n(113,"mat-hint"),a(114,"Smallest relative lift to detect (e.g. 0.05 = 5%)"),i()()()()(),n(115,"mat-dialog-actions",27)(116,"button",28),a(117," Cancel "),i(),n(118,"button",29),a(119),i()()()),r&2&&(o(),v("",s.editMode?"Edit":"Create"," A/B Experiment"),o(3),S("formGroup",s.form),o(7),d(s.editMode?11:12),o(7),B(s.statuses),o(21),p(s.isThreeArmKey?'Describes what "variant" (Flow B) visitors see.':'Describes what "variant" visitors see.'),o(),d(s.isThreeArmKey?40:-1),o(5),p(s.isThreeArmKey?"Variant Traffic (%)":"Traffic Split (%)"),o(2),d(s.isThreeArmKey?47:48),o(2),d(s.isThreeArmKey?49:50),o(2),d(s.isThreeArmKey&&s.form.hasError("threeArmPercentageSum")?51:-1),o(),d(s.isThreeArmKey?52:-1),o(19),p(s.brandIdsHint),o(13),d(s.showExcludedOrgIdsField?84:-1),o(32),S("mat-dialog-close",!1),o(2),S("active",s.spinner.save)("disabled",s.form.invali
3d),o(),v(" ",s.editMode?"Update":"Create"," "))},dependencies:[Ke,ke,we,Pe,ie,Be,Le,Ne,Re,Fe,H,U,j,W,z,R,P,k,re,oe,ae,Ue,ze,je,se,le,ne,q,G,We,tt,$],encapsulation:2})}return t})();var Lt=(t,l)=>l.id,$t=(t,l)=>l.field;function Ot(t,l){t&1&&(n(0,"div",4),c(1,"mat-spinner",8),i())}function Kt(t,l){t&1&&(n(0,"p",5),a(1,"No change history found."),i())}function Ut(t,l){if(t&1&&(n(0,"span",15),a(1),i(),n(2,"span",16),a(3,"\u2192"),i()),t&2){let e=u().$implicit;o(),p(e.from)}}function jt(t,l){if(t&1&&(n(0,"p",13)(1,"span",11),a(2),i(),m(3,Ut,4,1),n(4,"span",14),a(5),i()()),t&2){let e=l.$implicit;o(2),v("",e.field,": "),o(),d(e.from!=="\u2014"?3:-1),o(2),p(e.to)}}function zt(t,l){if(t&1&&(n(0,"div",12),w(1,jt,6,3,"p",13,$t),i()),t&2){let e=u();o(),B(e)}}function Wt(t,l){t&1&&m(0,zt,3,0,"div",12),t&2&&d(l.length>0?0:-1)}function Ht(t,l){t&1&&c(0,"hr")}function qt(t,l){if(t&1&&(n(0,"div",9)(1,"p",10)(2,"strong"),a(3),x(4,"date"),i(),n(5,"span",11),a(6),x(7,"titlecase"),i()(),m(8,Wt,1,1),i(),m(9,Ht,1,0,"hr")),t&2){let e,r=l.$implicit,s=l.$index,_=l.$count,E=u(2);o(3),p(N(4,5,r.created_at,"MMM dd, yyyy h:mm a")),o(3),M(" \u2014 ",f(7,8,r.event)," by ",r.user_name),o(2),d((e=E.getChanges(r))?8:-1,e),o(),d(s!==_-1?9:-1)}}function Gt(t,l){if(t&1&&w(0,qt,10,10,null,null,Lt),t&2){let e=u();B(e.versions)}}var Ct=(()=>{class t{abExperimentsService=C(F);versions=[];loading=!0;data=C(K);ngOnInit(){this.abExperimentsService.getVersions(this.data.experiment.id).subscribe({next:e=>{this.versions=e.versions,this.loading=!1},error:()=>{this.loading=!1}})}formatFieldName(e){return e.replace(/_/g," ").replace(/\b\w/g,r=>r.toUpperCase())}formatValue(e){return e==null?"\u2014":Array.isArray(e)?e.length===0?"None":e.join(", "):typeof e=="string"&&/^\d{4}-\d{2}-\d{2}T/.test(e)?new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"}):String(e)}getChanges(e){if(!e.changes)return[];let r=["id"];return Object.entries(e.changes).filter(([s,_])=>r.includes(s)?!1:_[0]!==null||_[1]!==null).map(([s,_])=>({field:this.formatFieldName(s),from:this.formatValue(_[0]),to:this.formatValue(_[1])}))}static \u0275fac=function(r){return new(r||t)};
3static \u0275cmp=I({type:t,selectors:[["app-ab-experiment-changelog-dialog"]],decls:11,vars:2,consts:[["mat-dialog-title",""],["mat-dialog-close","","mat-icon-button","","aria-label","close",1,"dialog-close"],[1,"fa-solid","fa-times"],["appDialogScroll",""],[1,"text-center","py-4"],[1,"text-secondary","text-center","py-3"],["align","end"],["mat-dialog-close","","mat-button","","color","accent","type","button",1,"custom","auto"],["diameter","40"],[1,"changelog-entry","mb-3"],[1,"mb-2"],[1,"text-secondary"],[1,"ps-3"],[1,"sm","mb-1"],[1,"text-success"],[1,"text-danger"],[1,"text-secondary","mx-1"]],template:function(r,s){r&1&&(n(0,"h3",0),a(1),i(),n(2,"button",1),c(3,"i",2),i(),n(4,"mat-dialog-content",3),m(5,Ot,2,0,"div",4)(6,Kt,2,0,"p",5)(7,Gt,2,0),i(),n(8,"mat-dialog-actions",6)(9,"button",7),a(10," Close "),i()()),r&2&&(o(),v("Change Log \u2014 ",s.data.experiment.key),o(4),d(s.loading?5:s.versions.length===0?6:7))},dependencies:[H,U,j,W,z,R,P,k,X,Y,q,G,O,$],encapsulation:2})}return t})();function Yt(t,l){t&1&&(n(0,"div",4),c(1,"mat-spinner",9),n(2,"p",10),a(3,"Loading results..."),i()())}function Xt(t,l){if(t&1&&(n(0,"div",5),a(1),i()),t&2){let e=u();o(),p(e.error)}}function Zt(t,l){t&1&&(n(0,"div",11),c(1,"i",20),n(2,"strong"),a(3,"Sample Ratio Mismatch"),i(),a(4," \u2014 The observed visitor split does not match the configured percentage. Results may be unreliable. "),i())}function Jt(t,l){if(t&1&&(n(0,"span",13),a(1),i()),t&2){let e=u(2);o(),v("",e.results.duration_days," days running")}}function Qt(t,l){if(t&1&&(n(0,"p",14),a(1),i()),t&2){let e=u(2);o(),p(e.results.recommendation_text)}}function ei(t,l){t&1&&(n(0,"th",17),a(1,"Variant B"),i())}function ti(t,l){if(t&1&&(n(0,"td",17),a(1),x(2,"number"),i()),t&2){let e=u(2);o(),p(f(2,1,e.results.variants==null||e.results.variants.variant_b==null?null:e.results.variants.variant_b.visitors))}}function ii(t,l){if(t&1&&(n(0,"td",17),a(1),x(2,"number"),i()),t&2){let e=u(2);o(),p(f(2,1,e.results.variants==null||e.results.variants.variant_b==null?null:e.results.variants.variant_b.conversions))}}function ni(t,l){if(t&1&&(n(0,"td",17),a(1),i(),c(2,"td")),t&2){let e=u(2);o(),p(e.formatRate(e.results.variants==null||e.results.variants.variant_b==null?null:e.results.variants.variant_b.conversion_rate))}}function ai(t,l){if(t&1&&(n(0,"td"),a(1),i()),t&2){let e=u(2);L(xe("text-end ",e.rateDifferenceColor)),o(),p(e.rateDifference)}}function oi(t,l){if(t&1&&(n(0,"td",17),a(1),i()),t&2){let e=u(2);o(),p(e.formatCI(e.results.variants==null||e.results.variants.variant_b==null?null:e.results.variants.variant_b.credible_interval))}}function ri(t,l){if(t&1&&(n(0,"h6",15),a(1,"Pairwise Comparisons"),i(),n(2,"table",16)(3,"thead")(4,"tr")(5,"th"),a(6,"Comparison"),i(),n(7,"th",17),a(8,"P(Second Wins)"),i()()(),n(9,"tbody")(10,"tr")(11,"td"),a(12,"Variant vs Control"),i(),n(13,"td",17),a(14),i()(),n(15,"tr")(16,"td"),a(17,"Variant B vs Control"),i(),n(18,"td",17),a(19),i()(),n(20,"tr")(21,"td"),a(22,"Variant B vs Variant"),i(),n(23,"td",17),a(24),i()()()()),t&2){let e=u(2);o(14),p(e.formatRate(e.results.pairwise.control_vs_variant==null?null:e.results.pairwise.control_vs_variant.prob_b_wins)),o(5),p(e.formatRate(e.results.pairwise.control_vs_variant_b==null?null:e.results.pairwise.control_vs_variant_b.prob_b_wins)),o(5),p(e.formatRate(e.results.pairwise.variant_vs_variant_b==null?null:e.results.pairwise.variant_vs_variant_b.prob_b_wins))}}function li(t,l){if(t&1&&(n(0,"span"),a(1),x(2,"number"),x(3,"number"),i()),t&2){let e=u(3);o(),M("Variant B: ",f(2,2,e.results.variants==null||e.results.variants.variant_b==null?null:e.results.variants.variant_b.visitors)," / ",f(3,4,e.results.sample_size.required_per_variant))}}function si(t,l){if(t&1&&(n(0,"h6",15),a(1,"Sample Size"),i(),n(2,"p",21),a(3),x(4,"number"),i(),n(5,"div",22)(6,"span"),a(7),x(8,"number"),x(9,"number"),i(),n(10,"span"),a(11),x(12,"number"),x(13,"number"),i(),m(14,li,4,6,"span"),i(),n(15,"div",23),c(16,"div",24),i()),t&2){let e=u(2);o(3),M(" To detect a ",e.formatMDE,"% relative lift with 80% power, each variant needs ~",f(4,13,e.results.sample_size.required_per_variant)," visitors. "),o(4),M("Control: ",f(8,15,e.results.variants==null||e.results.variants.control==null?null:e.results.variants.control.visitors)," / ",f(9,17,e.results.sample_size.required_per_variant)),o(4),M("Variant: ",f(12,19,e.results.variants==null||e.results.variants.variant==null?null:e.results.variants.variant.visitors)," / ",f(13,21,e.results.sample_size.required_per_variant)),o(3),d(e.isThreeArmExperiment?14:-1),o(2),Q("width",e.sampleProgress,"%"),Te("bg-success",e.sampleProgress>=100)("bg-primary",e.sampleProgress<100)}}function mi(t,l){if(t&1&&a(0),t&2){let e=u(4);v(" Control ",e.probControlWinsPct,"% ")}}function di(t,l){if(t&1&&a(0),t&2){let e=u(4);v(" Variant ",e.probVariantWinsPct,"% ")}}function ci(t,l){if(t&1&&(n(0,"div",26)(1,"div",27),m(2,mi,1,1),i(),n(3,"div",28),m(4,di,1,1),i()()),t&2){let e=u(3);o(),Q("width",(e.results.bayesian.prob_control_wins||0)*100,"%"),o(),d((e.results.bayesian.prob_control_wins||0)>.15?2:-1),o(),Q("width",(e.results.bayesian.prob_variant_wins||0)*100,"%"),o(),d((e.results.bayesian.prob_variant_wins||0)>.15?4:-1)}}function pi(t,l){if(t&1&&(n(0,"h6",15),a(1,"Bayesian Analysis"),i(),n(2,"table",25)(3,"tbody")(4,"tr")(
35,"td"),a(6,"P(Variant Wins)"),i(),n(7,"td",17),a(8),i()(),n(9,"tr")(10,"td"),a(11,"P(Control Wins)"),i(),n(12,"td",17),a(13),i()(),n(14,"tr")(15,"td"),a(16,"Expected Loss (Variant)"),i(),n(17,"td",17),a(18),i()(),n(19,"tr")(20,"td"),a(21,"Expected Loss (Control)"),i(),n(22,"td",17),a(23),i()()()(),m(24,ci,5,6,"div",26)),t&2){let e=u(2);o(8),v("",e.probVariantWinsPct,"%"),o(5),v("",e.probControlWinsPct,"%"),o(5),p(e.formatRate(e.results.bayesian==null?null:e.results.bayesian.expected_loss_choosing_variant)),o(5),p(e.formatRate(e.results.bayesian==null?null:e.results.bayesian.expected_loss_choosing_control)),o(),d((e.results.bayesian==null?null:e.results.bayesian.prob_variant_wins)!==null?24:-1)}}function ui(t,l){if(t&1&&(n(0,"p",19),a(1),x(2,"date"),i()),t&2){let e=u(2);o(),v(" Last computed: ",N(2,1,e.results.computed_at,"medium")," ")}}function _i(t,l){if(t&1&&(m(0,Zt,5,0,"div",11),n(1,"div",12)(2,"span"),c(3,"i"),a(4),i(),m(5,Jt,2,1,"span",13),i(),m(6,Qt,2,1,"p",14),n(7,"h6",15),a(8,"Visitors & Conversions"),i(),n(9,"table",16)(10,"thead")(11,"tr"),c(12,"th"),n(13,"th",17),a(14,"Control"),i(),n(15,"th",17),a(16,"Variant"),i(),m(17,ei,2,0,"th",17),n(18,"th",17),a(19,"Total"),i()()(),n(20,"tbody")(21,"tr")(22,"td"),a(23,"Visitors"),i(),n(24,"td",17),a(25),x(26,"number"),i(),n(27,"td",17),a(28),x(29,"number"),i(),m(30,ti,3,3,"td",17),n(31,"td",17),a(32),x(33,"number"),i()(),n(34,"tr")(35,"td"),a(36,"Conversions"),i(),n(37,"td",17),a(38),x(39,"number"),i(),n(40,"td",17),a(41),x(42,"number"),i(),m(43,ii,3,3,"td",17),n(44,"td",17),a(45),x(46,"number"),i()(),n(47,"tr")(48,"td"),a(49,"Conversion Rate"),i(),n(50,"td",17),a(51),i(),n(52,"td",17),a(53),i(),m(54,ni,3,1)(55,ai,2,4,"td",18),i(),n(56,"tr")(57,"td"),a(58,"Credible Interval"),i(),n(59,"td",17),a(60),i(),n(61,"td",17),a(62),i(),m(63,oi,2,1,"td",17),c(64,"td"),i()()(),m(65,ri,25,3),m(66,si,17,23),m(67,pi,25,5),m(68,ui,3,4,"p",19)),t&2){let e=u();d(e.results.srm!=null&&e.results.srm.srm_ok?-1:0),o(2),L(e.recommendationColor),o(),L(xe("fal ",e.recommendationIcon," me-1")),o(),v(" ",e.recommendationLabel," "),o(),d(e.results.duration_days!==null?5:-1),o(),d(e.results.recommendation_text?6:-1),o(11),d(e.isThreeArmExperiment?17:-1),o(8),p(f(26,28,e.results.variants==null||e.results.variants.control==null?null:e.results.variants.control.visitors)),o(3),p(f(29,30,e.results.variants==null||e.results.variants.variant==null?null:e.results.variants.variant.visitors)),o(2),d(e.isThreeArmExperiment?30:-1),o(2),p(f(33,32,e.totalVisitors)),o(6),p(f(39,34,e.results.variants==null||e.results.variants.control==null?null:e.results.variants.control.conversions)),o(3),p(f(42,36,e.results.variants==null||e.results.variants.variant==null?null:e.results.variants.variant.conversions)),o(2),d(e.isThreeArmExperiment?43:-1),o(2),p(f(46,38,e.totalConversions)),o(6),p(e.formatRate(e.results.variants==null||e.results.variants.control==null?null:e.results.variants.control.conversion_rate)),o(2),p(e.formatRate(e.results.variants==null||e.results.variants.variant==null?null:e.results.variants.variant.conversion_rate)),o(),d(e.isThreeArmExperiment?54:55),o(6),p(e.formatCI(e.results.variants==null||e.results.variants.control==null?null:e.results.variants.control.credible_interval)),o(2),p(e.formatCI(e.results.variants==null||e.results.variants.variant==null?null:e.results.variants.variant.credible_interval)),o(),d(e.isThreeArmExperiment?63:-1),o(2),d(e.isThreeArmExperiment&&e.results.pairwise?65:-1),o(),d(e.results.sample_size!=null&&e.results.sample_size.required_per_variant?66:-1),o(),d(e.isThreeArmExperiment?-1:67),o(),d(e.results.computed_at?68:-1)}}function xi(t,l){if(t&1){let e=V();n(0,"button",29),g("click",function(){A(e);let s=u();return D(s.loadResults(!0))}),a(1," Refresh "),i()}}var gt=(()=>{class t{abExperimentsService=C(F);experiment;results=null;loading=!0;error="";data=C(K);ngOnInit(){this.experiment=this.data?.experiment,this.loadResults()}loadResults(e=!1){this.loading=!0,this.error="",this.abExperimentsService.getResults(this.experiment.id,e).subscribe({next:r=>{this.results=r,this.loading=!1},error:r=>
3{this.loading=!1,r.status===404?this.error="No analyzer configured for this experiment.":this.error="Failed to load results."}})}get probVariantWinsPct(){let e=this.results?.bayesian?.prob_variant_wins;return e!=null?(e*100).toFixed(1):"\u2014"}get probControlWinsPct(){let e=this.results?.bayesian?.prob_control_wins;return e!=null?(e*100).toFixed(1):"\u2014"}get isThreeArmExperiment(){return this.experiment?.three_arm===!0}get recommendationIcon(){switch(this.results?.recommendation){case"variant_b_winning":case"variant_winning":return"fa-check-circle";case"control_winning":return"fa-check-circle";case"needs_more_data":return"fa-clock";case"no_significant_difference":return"fa-minus-circle";default:return"fa-question-circle"}}get recommendationColor(){switch(this.results?.recommendation){case"variant_b_winning":case"variant_winning":return"text-success";case"control_winning":return"text-info";case"needs_more_data":return"text-secondary";default:return"text-secondary"}}get recommendationLabel(){switch(this.results?.recommendation){case"variant_b_winning":return"Variant B Winning";case"variant_winning":return"Variant Winning";case"control_winning":return"Control Winning";case"needs_more_data":return"Needs More Data";case"no_significant_difference":return"No Significant Difference";default:return this.results?.recommendation||"\u2014"}}get formatMDE(){let e=this.results?.sample_size?.mde;return e!=null?(e*100).toFixed(0):"5"}get totalVisitors(){let e=this.results?.variants?.control?.visitors||0,r=this.results?.variants?.variant?.visitors||0,s=this.results?.variants?.variant_b?.visitors||0;return this.isThreeArmExperiment?e+r+s:e+r}get totalConversions(){let e=this.results?.variants?.control?.conversions||0,r=this.results?.variants?.variant?.conversions||0,s=this.results?.variants?.variant_b?.conversions||0;return this.isThreeArmExperiment?e+r+s:e+r}get minArmVisitors(){if(!this.isThreeArmExperiment){let r=this.results?.variants?.control?.visitors||0,s=this.results?.variants?.variant?.visitors||0;return Math.min(r,s)}let e=[this.results?.variants?.control?.visitors||0,this.results?.variants?.variant?.visitors||0,this.results?.variants?.variant_b?.visitors||0];return Math.min(...e)}get sampleProgress(){let e=this.results?.sample_size?.required_per_variant;return e?Math.min(this.minArmVisitors/e*100,100):0}get rateDifference(){let e=this.results?.variants?.control?.conversion_rate,r=this.results?.variants?.variant?.conversion_rate;if(e==null||r==null||e===0)return"\u2014";let s=(r-e)/e*100;return`${s>=0?"+":""}${s.toFixed(2)}%`}get rateDifferenceColor(){let e=this.results?.variants?.control?.conversion_rate,r=this.results?.variants?.variant?.conversion_rate;return e==null||r==null||e===0?"":r>=e?"text-success":"text-danger"}formatRate(e){return e==null?"\u2014":(e*100).toFixed(2)+"%"}formatCI(e){return!e||e.length<2?"\u2014":`[${(e[0]*100).toFixed(2)}%, ${(e[1]*100).toFixed(2)}%]`}static \u0275fac=function(r){return new(r||t)};
3static \u0275cmp=I({type:t,selectors:[["app-ab-experiment-results-dialog"]],decls:12,vars:3,consts:[["mat-dialog-title",""],["mat-dialog-close","","mat-icon-button","","aria-label","close",1,"dialog-close"],[1,"fa-solid","fa-times"],["appDialogScroll",""],[1,"text-center","py-5"],[1,"alert","alert-warning"],["align","end"],["mat-button","","color","accent",1,"custom","auto"],["mat-dialog-close","","mat-button","","color","primary",1,"custom","auto"],["diameter","40",1,"mx-auto"],[1,"mt-2"],[1,"alert","alert-danger","mb-3"],[1,"d-flex","align-items-center","justify-content-between","mb-2"],[1,"small"],[1,"small","mb-3"],[1,"mb-2"],[1,"table","table-sm","mb-4"],[1,"text-end"],[3,"class"],[1,"small","mb-0"],[1,"fal","fa-exclamation-triangle","me-1"],[1,"small","mb-1"],[1,"d-flex","justify-content-between","small","mb-1"],[1,"progress","progress-sm","mb-4"],[1,"progress-bar"],[1,"table","table-sm","mb-3"],[1,"progress","progress-lg","mb-3"],[1,"progress-bar","bg-secondary"],[1,"progress-bar","bg-success"],["mat-button","","color","accent",1,"custom","auto",3,"click"]],template:function(r,s){r&1&&(n(0,"h3",0),a(1),i(),n(2,"button",1),c(3,"i",2),i(),n(4,"mat-dialog-content",3),m(5,Yt,4,0,"div",4)(6,Xt,2,1,"div",5)(7,_i,69,40),i(),n(8,"mat-dialog-actions",6),m(9,xi,2,0,"button",7),n(10,"button",8),a(11," Close "),i()()),r&2&&(o(),v("Results: ",s.experiment==null?null:s.experiment.key),o(4),d(s.loading?5:s.error?6:s.results?7:-1),o(4),d(!s.loading&&s.results?9:-1))},dependencies:[H,U,j,W,z,R,P,k,X,Y,G,O,ee],styles:[".progress-sm[_ngcontent-%COMP%]{height:8px}.progress-lg[_ngcontent-%COMP%]{height:20px}"]})}return t})();var fi=()=>[5,10,25];function vi(t,l){if(t&1&&(n(0,"mat-option",18),a(1),i()),t&2){let e=l.$implicit;S("value",e),o(),p(e)}}function Ci(t,l){t&1&&(n(0,"section")(1,"div",19)(2,"content-loader",20),Ee(),c(3,"rect",21),i()()())}function gi(t,l){t&1&&(n(0,"th",45),a(1,"ID"),i())}function hi(t,l){if(t&1&&(n(0,"td",46),a(1),i()),t&2){let e=l.$implicit;o(),p(e.id)}}function bi(t,l){t&1&&(n(0,"th",45),a(1,"Key"),i())}function Ei(t,l){if(t&1&&(n(0,"td",46),a(1),i()),t&2){let e=l.$implicit;o(),p(e.key)}}function Si(t,l){t&1&&(n(0,"th",45),a(1,"Name"),i())}function yi(t,l){if(t&1&&(n(0,"td",46),a(1),i()),t&2){let e=l.$implicit;o(),p(e.name)}}function Ti(t,l){t&1&&(n(0,"th",45),a(1,"Status"),i())}function Ai(t,l){if(t&1&&(n(0,"td",46)(1,"span",47),a(2),x(3,"titlecase"),i()()),t&2){let e=l.$implicit,r=u(2);o(),L(r.getStatusClass(e.status)),o(),p(f(3,3,e.status))}}function Di(t,l){t&1&&(n(0,"th",45),a(1,"Variants"),i())}function Mi(t,l){if(t&1&&(n(0,"td",46)(1,"div",48),a(2),i(),n(3,"div",48),a(4),i()()),t&2){let e=l.$implicit;o(2),p(e.control_description||"Control"),o(2),p(e.variant_description||"Variant")}}function Ii(t,l){t&1&&(n(0,"th",45),a(1,"Conversions"),i())}function wi(t,l){if(t&1&&(n(0,"div",48),a(1),x(2,"number"),x(3,"number"),i()),t&2){let e=l;o(),M("",f(2,2,e.conversions),"/",f(3,4,e.visitors))}}function Bi(t,l){t&1&&(n(0,"div",48),a(1,"\u2014"),i())}function Vi(t,l){if(t&1&&(n(0,"div",48),a(1),x(2,"number"),x(3,"number"),i()),t&2){let e=l;o(),M("",f(2,2,e.conversions),"/",f(3,4,e.visitors))}}function ki(t,l){t&1&&(n(0,"div",48),a(1,"\u2014"),i())}function Pi(t,l){if(t&1&&(n(0,"td",46),m(1,wi,4,6,"div",48)(2,Bi,2,0,"div",48),m(3,Vi,4,6,"div",48)(4,ki,2,0,"div",48),i()),t&2){let e,r,s=l.$implicit;o(),d((e=s.latest_result_summary==null?null:s.latest_result_summary.control)?1:2,e),o(2),d((r=s.latest_result_summary==null?null:s.latest_result_summary.variant)?3:4,r)}}function Ri(t,l){t&1&&(n(0,"th",45),a(1,"Conv. Rate"),i())}function Fi(t,l){if(t&1&&(n(0,"div",48),a(1),i()),t&2){let e=u(3);o(),p(e.formatRate(l.conversion_rate))}}function Ni(t,l){t&1&&(n(0,"div",48),a(1,"\u2014"),i())}function Li(t,l){if(t&1&&(n(0,"div",48),a(1),i()),t&2){let e=u(3);o(),p(e.formatRate(l.conversion_rate))}}function $i(t,l){t&1&&(n(0,"div",48),a(1,"\u2014"),i())}function Oi(t,l){if(t&1&&(n(0,"td",46),m(1,Fi,2,1,"div",48)(2,Ni,2,0,"div",48),m(3,Li,2,1,"div",48)(4,$i,2,0,"div",48),i()),t&2){let e,r,s=l.$implicit;o(),d((e=s.latest_result_summary==null?null:s.latest_result_summary.control)?1:2,e),o(2),d((r=s.latest_result_summary==null?null:s.latest_result_summary.variant)?3:4,r)}}function Ki(t,l){t&1&&(n(0,"th",45),a(1,"Split %"),i())}function Ui(t,l){if(t&1&&(n(0,"td",46),a(1),i()),t&2){let e=l.$implicit;o(),v("",e.percentage,"%")}}function ji(t,l){t&1&&(n(0,"th",45),a(1,"Brands"),i())}function zi(t,l){t&1&&a(0," All ")}function Wi(t,l){if(t&1&&a(0),t&2){let e=u().$implicit;v(" ",e.brand_ids.join(", ")," ")}}function Hi(t,l){if(t&1&&(n(0,"td",46),m(1,zi,1,0)(2,Wi,1,1),i()),t&2){let e=l.$implicit;o(),d(!e.brand_ids||e.brand_ids.length===0?1:2)}}function qi(t,l){t&1&&(n(0,"th",45),a(1,"Sessions"),i())}function Gi(t,l){if(t&1&&(n(0,"td",46),a(1),i()),t&2){let e=l.$implicit;o(),p(e.ab_experiment_sessions_count)}}function Yi(t,l){if(t&1&&(n(0,"th",45),a(1),i()),t&2){let e=u(2);o(),v("Dates (",e.tzAbbrev,")")}}function Xi(t,l){if(t&1&&(n(0,"td",46)(1,"div",48),a(2),x(3,"date"),i(),n(4,"div",48),a(5),x(6,"date"),i()()),t&2){let e=l.$implicit;o(2),v(" Start: ",e.started_at?N(3,2,e.started_at,"MMM dd, yyyy h:mm a"):"\u2014"," "),o(3),v(" End: ",e.ended_at?N(6,5,e.ended_at,"MMM dd, yyyy h:mm a"):"\u2014"," ")}}function Zi(t,l){t&1&&(n(0,"th",49),c(1,"i",50),i())}function Ji(t,l){if(t&1){let e=V();n(0,"button",54),g("click",function(){A(e);let s=u().$implicit,_=u(2);return D(_.endExperiment(s))}),n(1,"span",9),c(2,"i",61),i(),n(3,"span",56),a(4,"End Experiment"),i()()}}function Qi(t,l){if(t&1){let e=V();n(0,"td",46)(1,"button",51),c(2,"i",52),i(),n(3,"mat-menu",53,0)(5,"button",54),g("click",function(){let s=A(e).$implicit,_=u(2);return D(_.editExperiment(s))}),n(6,"span",9),c(7,"i",55),i(),n(8,"span",56),a(9,"Edit"),i()(),n(10,"button",54),g("click",function(){let s=A(e).$implicit,_=u(2);return D(_.viewChangelog(s))}),n(11,"span",9),c(12,"i",57),i(),n(13,"span",56),a(14,"Change Log"),i()(),n(15,"button",54),g("click",function(){let s=A(e).$implicit,_=u(2);return D(_.viewResults(s))}),n(16,"span",9),c(17,"i",58),i(),n(18,"span",56),a(19,"Results"),i()(),n(20,"button",54),g("click",function(){let s=A(e).$implicit,_=u(2);return D(_.triggerCompute(s))}),n(21,"span",9),c(22,"i",59),i(),n(23,"span",56),a(24,"Compute Results"),i()(),m(25,Ji,5,0,"button",60),i()()}if(t&2){let e=l.$implicit,r=ye(4);o(),S("matMenuTriggerFor",r),o(24),d(e.status!=="completed"?25:-1)}}function en(t,l){t&1&&c(0,"tr",62)}function tn(t,l){t&1&&c(0,"tr",63)}function nn(t,l){t&1&&(n(0,"div",42)(1,"p"),a(2,"No A/B experiments found."),i()())}
3function an(t,l){t&1&&(n(0,"div",43)(1,"div",64),c(2,"mat-spinner",65),i()())}function on(t,l){if(t&1){let e=V();n(0,"section")(1,"div",22)(2,"div",23)(3,"table",24),y(4,25),b(5,gi,2,0,"th",26)(6,hi,2,1,"td",27),T(),y(7,28),b(8,bi,2,0,"th",26)(9,Ei,2,1,"td",27),T(),y(10,29),b(11,Si,2,0,"th",26)(12,yi,2,1,"td",27),T(),y(13,30),b(14,Ti,2,0,"th",26)(15,Ai,4,5,"td",27),T(),y(16,31),b(17,Di,2,0,"th",26)(18,Mi,5,2,"td",27),T(),y(19,32),b(20,Ii,2,0,"th",26)(21,Pi,5,2,"td",27),T(),y(22,33),b(23,Ri,2,0,"th",26)(24,Oi,5,2,"td",27),T(),y(25,34),b(26,Ki,2,0,"th",26)(27,Ui,2,1,"td",27),T(),y(28,35),b(29,ji,2,0,"th",26)(30,Hi,3,1,"td",27),T(),y(31,36),b(32,qi,2,0,"th",26)(33,Gi,2,1,"td",27),T(),y(34,37),b(35,Yi,2,1,"th",26)(36,Xi,7,8,"td",27),T(),y(37,38),b(38,Zi,2,0,"th",39)(39,Qi,26,2,"td",27),T(),b(40,en,1,0,"tr",40)(41,tn,1,0,"tr",41),i()(),m(42,nn,3,0,"div",42),m(43,an,3,0,"div",43),n(44,"mat-paginator",44),g("page",function(s){A(e);let _=u();return D(_.onPageChange(s))}),i()()()}if(t&2){let e=u();o(3),S("dataSource",e.experimentList.data),o(37),S("matHeaderRowDef",e.displayedColumns),o(),S("matRowDefColumns",e.displayedColumns),o(),d((e.experimentList.data==null?null:e.experimentList.data.length)===0?42:-1),o(),d(e.spinner.list?43:-1),o(),S("length",e.experimentList.totalCount)("pageSize",e.experimentList.perPage)("pageSizeOptions",Ae(8,fi))}}var Ea=(()=>{class t{abExperimentsService=C(F);dialog=C(te);snackBar=C(He);contentLoading=!0;experimentList={data:[],totalCount:0,page:1,perPage:10};statusFilter="";keyFilter="";registeredKeys=[];spinner={list:!1};tzAbbrev=Intl.DateTimeFormat("en-US",{timeZoneName:"short"}).formatToParts(new Date).find(e=>e.type==="timeZoneName")?.value??"";displayedColumns=["id","key","name","status","percentage","ab_experiment_sessions_count","variants","conversions","conversion_rate","dates","actions"];platformId=C(Se);ngOnInit(){De(this.platformId)&&this.getExperiments()}getExperiments(){let e={page:this.experimentList.page,per_page:this.experimentList.perPage};this.statusFilter&&(e.status=this.statusFilter),this.keyFilter&&(e.key=this.keyFilter),this.spinner.list=!0,this.abExperimentsService.list(e).subscribe({next:r=>{this.experimentList.data=r.items,this.experimentList.totalCount=r.meta.total_count,r.registered_keys&&(this.registeredKeys=r.registered_keys),this.contentLoading=!1,this.spinner.list=!1},error:()=>{this.contentLoading=!1,this.spinner.list=!1}})}createExperiment(){this.dialog.open(ge,{width:J.lg,data:{registeredKeys:this.registeredKeys}}).afterClosed().subscribe(r=>{r&&(this.getExperiments(),this.snackBar.open(r.message,"Ok"))})}editExperiment(e){this.dialog.open(ge,{width:J.lg,data:{element:e,registeredKeys:this.registeredKeys}}).afterClosed().subscribe(s=>{s&&(this.getExperiments(),this.snackBar.open(s.message,"Ok"))})}endExperiment(e){this.dialog.open(me,{data:{title:`End experiment "${e.key}"?`,content:"This will set the status to completed. Existing cookies will expire naturally.",confirmButtonText:"End Experiment",cancelButtonText:"Cancel"}}).afterClosed().subscribe(s=>{s&&this.abExperimentsService.update(e.id,{ab_experiment:{status:"completed"}}).subscribe({next:()=>{this.snackBar.open("Experiment ended","Ok"),this.getExperiments()},error:()=>{this.snackBar.open("Failed to end experiment","Ok")}})})}onFilterChange(){this.experimentList.page=1,this.getExperiments()}onPageChange(e){this.experimentList.page=e.pageIndex+1,this.experimentList.perPage=e.pageSize,this.getExperiments()}viewChangelog(e){this.dialog.open(Ct,{width:J.lg,data:{experiment:e}})}viewResults(e){this.dialog.open(gt,{width:J.lg,data:{experiment:e}})}triggerCompute(e){this.abExperimentsService.triggerCompute(e.id).subscribe({next:r=>{this.snackBar.open(r.message||"Results computation enqueued","Ok")},error:()=>{this.snackBar.open("Failed to trigger computation","Ok")}})}getStatusClass(e){switch(e){case"active":return"bg-success";case"paused":return"bg-warning text-dark";case"completed":return"bg-secondary";default:return"bg-light"}}formatRate(e){return e==null?"\u2014":(e*100).toFixed(2)+"%"}static \u0275fac=function(r){return new(r||t)};
3static \u0275cmp=I({type:t,selectors:[["app-ab-experiments"]],decls:38,vars:3,consts:[["actionMenu","matMenu"],[1,"min-vh-100"],[1,"dashboard-container-fluid"],[1,"row"],[1,"col-12"],[1,"d-flex","flex-wrap","justify-content-between","align-items-center","admins-header"],[1,"dashboard-heading","mb-2"],[1,"actions"],["mat-button","","color","accent",1,"custom",3,"click"],[1,"left-icon"],[1,"fal","fa-plus"],[1,"row","align-items-center","mb-3"],[1,"col-12","col-md-4"],[3,"ngModelChange","selectionChange","ngModel"],["value",""],["value","active"],["value","paused"],["value","completed"],[3,"value"],[1,"mb-2"],["viewBox","0 0 100 25"],["x","0","y","0","rx","3","ry","3","width","100%","height","100%"],[1,"table-wrapper","mb-3"],[1,"table-responsive"],["mat-table","",3,"dataSource"],["matColumnDef","id"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","key"],["matColumnDef","name"],["matColumnDef","status"],["matColumnDef","variants"],["matColumnDef","conversions"],["matColumnDef","conversion_rate"],["matColumnDef","percentage"],["matColumnDef","brand_ids"],["matColumnDef","ab_experiment_sessions_count"],["matColumnDef","dates"],["matColumnDef","actions"],["mat-header-cell","","style","justify-content: flex-end",4,"matHeaderCellDef"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],[1,"table-no-results"],[1,"update-overlay"],["showFirstLastButtons","",3,"page","length","pageSize","pageSizeOptions"],["mat-header-cell",""],["mat-cell",""],[1,"badge"],[1,"small"],["mat-header-cell","",2,"justify-content","flex-end"],[1,"fal","fa-tools"],["aria-label","Experiment actions","mat-icon-button","","matTooltip","Options",1,"sm",3,"matMenuTriggerFor"],[1,"fas","fa-ellipsis-v"],[1,"auto-width","shadow-lg"],["mat-menu-item","",3,"click"],[1,"fal","fa-pencil"],[1,"ps-1"],[1,"fal","fa-history"],[1,"fal","fa-chart-bar"],[1,"fal","fa-calculator"],["mat-menu-item",""],[1,"fal","fa-stop-circle"],["mat-header-row",""],["mat-row",""],[1,"spinner"],["diameter","50"]],template:function(r,s){r&1&&(n(0,"div",1)(1,"div",2)(2,"div",3)(3,"div",4)(4,"div",5)(5,"h1",6),a(6,"A/B Experiments"),i(),n(7,"div",7)(8,"button",8),g("click",function(){return s.createExperiment()}),n(9,"span",9),c(10,"i",10),i(),n(11,"span"),a(12,"Create"),i()()()()()(),n(13,"div",11)(14,"div",12)(15,"mat-form-field")(16,"mat-label"),a(17,"Filter by status"),i(),n(18,"mat-select",13),_e("ngModelChange",function(E){return ue(s.statusFilter,E)||(s.statusFilter=E),E}),g("selectionChange",function(){return s.onFilterChange()}),n(19,"mat-option",14),a(20,"All"),i(),n(21,"mat-option",15),a(22,"Active"),i(),n(23,"mat-option",16),a(24,"Paused"),i(),n(25,"mat-option",17),a(26,"Completed"),i()()()(),n(27,"div",12)(28,"mat-form-field")(29,"mat-label"),a(30,"Filter by key"),i(),n(31,"mat-select",13),_e("ngModelChange",function(E){return ue(s.keyFilter,E)||(s.keyFilter=E),E}),g("selectionChange",function(){return s.onFilterChange()}),n(32,"mat-option",14),a(33,"All"),i(),w(34,vi,2,2,"mat-option",18,Z),i()()()(),m(36,Ci,4,0,"section")(37,on,45,9,"section"),i()()),r&2&&(o(18),pe("ngModel",s.statusFilter),o(13),pe("ngModel",s.keyFilter),o(3),B(s.registeredKeys),o(2),d(s.contentLoading?36:37))},dependencies:[Oe,ie,Ve,R,P,k,re,oe,ae,se,le,ne,pt,it,at,st,ot,nt,mt,rt,lt,dt,ct,et,Je,Ze,Qe,q,X,Y,_t,ut,Xe,Ye,Ge,qe,O,ee,$],encapsulation:2})}return t})();export{Ea as AbExperimentsComponent}; 4 5//# debugId=1134910c-121b-5c15-97a6-99ba8984d766
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.