@uniformdev/context-devtools 16.0.1-alpha.164 → 16.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{jsx as e}from"@emotion/react";import*as y from"react";import{css as L}from"@emotion/react";import{createContext as nt,useContext as it}from"react";var ue=nt({settings:{},saveSettings:()=>{}}),z=()=>it(ue),ge=({children:t,settings:r,saveSettings:n})=>e(ue.Provider,{value:{settings:r,saveSettings:n}},t);var st=({route:t,children:r,className:n})=>{let{settings:o,saveSettings:s}=z();return e("a",{href:"",className:n,onClick:a=>{a.preventDefault(),s({...o,route:t})}},r)},H=st;var at=[{title:"Dimensions",href:"/dimensions",icon:`<svg
1
+ import{jsx as e}from"@emotion/react";import*as y from"react";import{css as L}from"@emotion/react";import{createContext as nt,useContext as it}from"react";var ge=nt({settings:{},saveSettings:()=>{}}),U=()=>it(ge),ve=({children:t,settings:r,saveSettings:n})=>e(ge.Provider,{value:{settings:r,saveSettings:n}},t);var st=({route:t,children:r,className:n})=>{let{settings:o,saveSettings:s}=U();return e("a",{href:"",className:n,onClick:a=>{a.preventDefault(),s({...o,route:t})}},r)},H=st;var at=[{title:"Dimensions",href:"/dimensions",icon:`<svg
2
2
  width="24"
3
3
  height="24"
4
4
  viewBox="0 0 24 24"
@@ -40,7 +40,7 @@ import{jsx as e}from"@emotion/react";import*as y from"react";import{css as L}fro
40
40
  <g>
41
41
  <path d="M84.55,116.66c2.49,0,4.53-1.99,4.53-4.41V88.08c1.55-13.03,7.27-9.16,14-5.13 c16.27,9.74,27.08-15.88,13.93-23.78c-10.32-6.2-14.79,4.46-22.35,3.36c-2.92-0.43-4.95-3.5-5.59-8.17V36.9 c0-2.43-2.04-4.41-4.53-4.41H63.73c-17.18-2.12-1.93-11.37-1.93-19.98C61.81,5.6,55.38,0,47.45,0c-7.92,0-15.19,5.6-15.19,12.51 c0,8.12,15.78,17.86-1.64,19.98H4.53C2.04,32.49,0,34.47,0,36.9v17.42c1.33,7.43,6.49,9.15,13.1,4.25 c2.23-1.66,5.99-3.59,8.71-3.59c7.09,0,12.85,6.25,12.85,13.96S28.91,84.6,21.81,84.6c-2.53,0-4.89-0.8-6.89-2.19 c0,0.59-12.4-10.85-14.92,3.15v26.71c0,2.43,2.04,4.41,4.53,4.41c13.97,0,27.92,0,41.88-0.01c0.55-2.55-1.24-5.47-2.92-8 c-13.22-19.93,38.21-21.92,24.99,0.62c-0.65,1.11-1.3,2.19-1.8,3.24c-0.63,1.31-1.05,2.91-0.96,4.14L84.55,116.66L84.55,116.66z"></path>
42
42
  </g>
43
- </svg>`,ve=({...t})=>{var o,s;let r=a=>{var p;let l="active";return!((p=t.settings)!=null&&p.route)&&a==="/dimensions"||t.settings.route===a?l:""},n=Boolean(typeof window!="undefined"&&((s=(o=window.chrome)==null?void 0:o.runtime)==null?void 0:s.id));return e("nav",{css:L`
43
+ </svg>`,fe=({...t})=>{var o,s;let r=a=>{var p;let l="active";return!((p=t.settings)!=null&&p.route)&&a==="/dimensions"||t.settings.route===a?l:""},n=Boolean(typeof window!="undefined"&&((s=(o=window.chrome)==null?void 0:o.runtime)==null?void 0:s.id));return e("nav",{css:L`
44
44
  background: var(--brand-secondary-1);
45
45
  padding: var(--spacing-base);
46
46
  min-width: 200px;
@@ -109,7 +109,7 @@ import{jsx as e}from"@emotion/react";import*as y from"react";import{css as L}fro
109
109
  `,rel:"noreferrer"},e("i",{css:L`
110
110
  align-items: center;
111
111
  display: flex;
112
- `,dangerouslySetInnerHTML:{__html:ct}}),"Install Chrome Extension"))};var fe=()=>e("article",null,e("h1",null,"Something when wrong"),e("p",null,"We could not find the page you're looking for."));import*as te from"react";import{css as M}from"@emotion/react";import*as U from"react";var he=M({willChange:"height"}),dt=M`
112
+ `,dangerouslySetInnerHTML:{__html:ct}}),"Install Chrome Extension"))};var he=()=>e("article",null,e("h1",null,"Something when wrong"),e("p",null,"We could not find the page you're looking for."));import*as oe from"react";import{css as M}from"@emotion/react";import*as _ from"react";var be=M({willChange:"height"}),dt=M`
113
113
  border-bottom: 2px solid var(--brand-secondary-1);
114
114
  font-size: var(--fs-base);
115
115
  margin: 0;
@@ -127,9 +127,9 @@ import{jsx as e}from"@emotion/react";import*as y from"react";import{css as L}fro
127
127
  align-self: center;
128
128
  `,mt=M`
129
129
  transform: rotate(-180deg);
130
- `,_=({children:t})=>e("div",{css:[he]},t),G=({title:t,children:r})=>{let[n,o]=U.useState(!1),s=t.split(" ").join("-").toLocaleLowerCase();return e(U.Fragment,null,e("h3",{css:dt},e("button",{"aria-expanded":n,css:lt,title:t,id:s,"aria-controls":`${s}-section`,onClick:()=>o(a=>!a),type:"button"},t,e("i",{css:[pt,n?mt:void 0]},e("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e("path",{d:"M6.34317 7.75732L4.92896 9.17154L12 16.2426L19.0711 9.17157L17.6569 7.75735L12 13.4142L6.34317 7.75732Z",fill:"currentColor"}))))),e("div",{id:`${s}-section`,css:[he,M`
130
+ `,G=({children:t})=>e("div",{css:[be]},t),$=({title:t,children:r})=>{let[n,o]=_.useState(!1),s=t.split(" ").join("-").toLocaleLowerCase();return e(_.Fragment,null,e("h3",{css:dt},e("button",{"aria-expanded":n,css:lt,title:t,id:s,"aria-controls":`${s}-section`,onClick:()=>o(a=>!a),type:"button"},t,e("i",{css:[pt,n?mt:void 0]},e("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e("path",{d:"M6.34317 7.75732L4.92896 9.17154L12 16.2426L19.0711 9.17157L17.6569 7.75735L12 13.4142L6.34317 7.75732Z",fill:"currentColor"}))))),e("div",{id:`${s}-section`,css:[be,M`
131
131
  padding: var(--spacing-sm) 0;
132
- `],role:"region","aria-labelledby":s},n?r:null))};import{css as A}from"@emotion/react";var $=A`
132
+ `],role:"region","aria-labelledby":s},n?r:null))};import{css as A}from"@emotion/react";var K=A`
133
133
  background-color: var(--gray-100);
134
134
  padding: var(--spacing-base) var(--spacing-md);
135
135
  margin: var(--spacing-base) 0;
@@ -137,21 +137,21 @@ import{jsx as e}from"@emotion/react";import*as y from"react";import{css as L}fro
137
137
  &:first-of-type {
138
138
  margin: 0 0 var(--spacing-base);
139
139
  }
140
- `,be=A`
140
+ `,ye=A`
141
141
  background: var(--gray-100)
142
142
  url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%0A%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M9 2C8.44771 2 8 2.44772 8 3V5C8 5.55228 8.44771 6 9 6C9.55229 6 10 5.55228 10 5V3C10 2.44772 9.55229 2 9 2ZM8 9H16V11C16 13.2091 14.2091 15 12 15C9.79086 15 8 13.2091 8 11V9ZM13 16.917C15.8377 16.441 18 13.973 18 11V7H6V11C6 13.973 8.16229 16.441 11 16.917V22C11 22.5523 11.4477 23 12 23C12.5523 23 13 22.5523 13 22V16.917ZM14 3C14 2.44772 14.4477 2 15 2C15.5523 2 16 2.44772 16 3V5C16 5.55228 15.5523 6 15 6C14.4477 6 14 5.55228 14 5V3Z' fill='%232ecdb4' /%3E%3C/svg%3E")
143
143
  no-repeat var(--spacing-sm) var(--spacing-base);
144
144
  padding: var(--spacing-base) var(--spacing-xl);
145
- `,K=A`
145
+ `,W=A`
146
146
  color: var(--brand-secondary-1);
147
147
  margin: 0;
148
148
  font-size: var(--fs-base);
149
149
  font-weight: var(--fw-bold);
150
- `,W=A`
150
+ `,Y=A`
151
151
  color: var(--brand-secondary-1);
152
152
  margin: var(--spacing-xs) 0 0;
153
153
  font-size: var(--fs-sm);
154
- `,ye=A`
154
+ `,Ce=A`
155
155
  align-items: center;
156
156
  border: none;
157
157
  background: transparent
@@ -171,11 +171,11 @@ import{jsx as e}from"@emotion/react";import*as y from"react";import{css as L}fro
171
171
  &:hover {
172
172
  opacity: 0.6;
173
173
  }
174
- `,Y=A`
174
+ `,J=A`
175
175
  display: flex;
176
176
  margin: var(--spacing-sm) 0 0;
177
177
  gap: var(--spacing-base);
178
- `;var E=({title:t,text:r,buttonGroup:n,children:o})=>e("div",{css:$},e("h2",{css:K},t),e("p",{css:W},r),o,n?e("div",{css:Y},n):null);import{css as S,keyframes as ut}from"@emotion/react";var gt=ut`from {
178
+ `;var E=({title:t,text:r,buttonGroup:n,children:o})=>e("div",{css:K},e("h2",{css:W},t),e("p",{css:Y},r),o,n?e("div",{css:J},n):null);import{css as S,keyframes as ut}from"@emotion/react";var gt=ut`from {
179
179
  transform: scale(1);
180
180
  }
181
181
  to {
@@ -231,23 +231,23 @@ to {
231
231
  input {
232
232
  padding: var(--spacing-sm);
233
233
  }
234
- `};import{css as O}from"@emotion/react";var J=({children:t})=>e("table",{css:O`
234
+ `};import{css as O}from"@emotion/react";var X=({children:t})=>e("table",{css:O`
235
235
  border-collapse: collapse;
236
236
  display: table;
237
237
  width: 100%;
238
238
  font-size: var(--fs-sm);
239
- `},t),Ce=({children:t})=>e("thead",{css:O`
239
+ `},t),we=({children:t})=>e("thead",{css:O`
240
240
  background: var(--gray-50);
241
241
  text-align: left;
242
242
  & tr {
243
243
  border-bottom: 1px solid var(--gray-200);
244
244
  }
245
- `},t),X=({children:t})=>e("tbody",null,t),F=({border:t,children:r})=>e("tr",{css:t?O`
245
+ `},t),j=({children:t})=>e("tbody",null,t),F=({border:t,children:r})=>e("tr",{css:t?O`
246
246
  border-bottom: 1px solid var(--gray-200);
247
247
  &:where(:last-child) {
248
248
  border: none;
249
249
  }
250
- `:void 0},r),j=({children:t,width:r})=>e("th",{css:O`
250
+ `:void 0},r),ee=({children:t,width:r})=>e("th",{css:O`
251
251
  outline: none;
252
252
  padding: var(--spacing-sm);
253
253
  width: ${r!=null?r:"auto"};
@@ -264,14 +264,14 @@ to {
264
264
  position: relative;
265
265
  `,vt(n),ft(t),r?O`
266
266
  border-left: 1px solid var(--gray-200);
267
- `:void 0]},o);import{css as ie}from"@emotion/react";var we=ie`
267
+ `:void 0]},o);import{css as se}from"@emotion/react";var ke=se`
268
268
  position: relative;
269
269
  display: inline-block;
270
270
  font-size: var(--fs-base);
271
- `,ke=ie`
271
+ `,Te=se`
272
272
  display: block;
273
273
  text-decoration: line-through;
274
- `,Te=ie`
274
+ `,De=se`
275
275
  position: absolute;
276
276
  width: 6px;
277
277
  height: 6px;
@@ -289,16 +289,16 @@ to {
289
289
  <path d="M11.9999 5.05762H8.3999V6.2576H11.9999V5.05762Z" fill="#828282"/>
290
290
  <path d="M8.3999 7.45752H11.9999V8.6575H8.3999V7.45752Z" fill="#828282"/>
291
291
  <path d="M11.9999 2.65771H8.3999V3.8577H11.9999V2.65771Z" fill="#828282"/>
292
- </svg>`,De=`<svg width="15" height="11" viewBox="0 0 15 11" fill="none" xmlns="http://www.w3.org/2000/svg">
292
+ </svg>`,Se=`<svg width="15" height="11" viewBox="0 0 15 11" fill="none" xmlns="http://www.w3.org/2000/svg">
293
293
  <path fill-rule="evenodd" clip-rule="evenodd" d="M7.113 3.12646C8.16729 3.12646 9.02195 3.98113 9.02195 5.03541C9.02195 5.86658 8.49075 6.57368 7.74932 6.83573V10.1259H6.47669V6.83573C5.73526 6.57368 5.20405 5.86658 5.20405 5.03541C5.20405 3.98113 6.05872 3.12646 7.113 3.12646ZM7.113 4.39909C7.46443 4.39909 7.74932 4.68398 7.74932 5.03541C7.74932 5.38684 7.46443 5.67172 7.113 5.67172C6.76158 5.67172 6.47669 5.38684 6.47669 5.03541C6.47669 4.68398 6.76158 4.39909 7.113 4.39909Z" fill="#828282"/>
294
294
  <path d="M3.96336 1.88578C3.15733 2.69183 2.65879 3.80537 2.65879 5.03535C2.65879 6.42093 3.29145 7.65875 4.28366 8.47569L5.1895 7.56984C4.42501 6.98876 3.93142 6.06969 3.93142 5.03535C3.93142 4.1568 4.28752 3.36142 4.86325 2.78567L3.96336 1.88578Z" fill="#828282"/>
295
295
  <path d="M9.36269 2.7856C9.93846 3.36136 10.2946 4.15676 10.2946 5.03535C10.2946 6.06973 9.80096 6.98882 9.03643 7.5699L9.94228 8.47575C10.9345 7.65881 11.5672 6.42096 11.5672 5.03535C11.5672 3.80533 11.0687 2.69177 10.2626 1.88571L9.36269 2.7856Z" fill="#828282"/>
296
296
  <path d="M0.113525 5.03534C0.113525 3.10251 0.896953 1.35266 2.16359 0.0860049L3.06347 0.985892C2.02714 2.02224 1.38616 3.45394 1.38616 5.03534C1.38616 6.61674 2.02714 8.04844 3.06347 9.08479L2.16358 9.98468C0.89695 8.71802 0.113525 6.96817 0.113525 5.03534Z" fill="#828282"/>
297
297
  <path d="M12.0624 9.98474C13.329 8.71809 14.1125 6.96821 14.1125 5.03534C14.1125 3.10248 13.329 1.3526 12.0624 0.0859375L11.1625 0.985824C12.1988 2.02218 12.8398 3.4539 12.8398 5.03534C12.8398 6.61678 12.1988 8.0485 11.1625 9.08486L12.0624 9.98474Z" fill="#828282"/>
298
- </svg>`,Se=({type:t})=>{let r="";switch(t){case"Audience":r=bt;break;case"Signal":r=De;break;case"Intent":r=De;break;case"Enrichment":r=yt;break}return e("i",{css:ht`
298
+ </svg>`,Le=({type:t})=>{let r="";switch(t){case"Audience":r=bt;break;case"Signal":r=Se;break;case"Intent":r=Se;break;case"Enrichment":r=yt;break}return e("i",{css:ht`
299
299
  align-items: center;
300
300
  display: inline-block;
301
- `,dangerouslySetInnerHTML:{__html:r}})};var Ct=({dimensionIndex:t,dimensions:r,disableEditOverride:n,onClick:o,preemptiveOverrides:s})=>{var p;let{settings:a}=z(),l=(p=s!=null?s:a.scoreOverrides)!=null?p:{};return e(J,null,e(X,null,Object.entries(r).sort(([m],[u])=>m.localeCompare(u)).map(([m,u])=>{var C;let{dim:i,name:d,type:c,category:f}=(C=t[m])!=null?C:{name:m,dim:m,type:void 0,category:void 0},h=l[i];return e(F,{key:i},e(R,null,h!==void 0?e("s",{css:ke},h.initial):null,e("b",{css:we},u,h!==void 0&&e("i",{css:Te}))),e(R,null,e("div",{onClick:()=>o==null?void 0:o(i),css:o?{cursor:"pointer"}:void 0},e("span",{css:b.divider,role:"presentation"}),e("div",null,e(Se,{type:c})," ",c),e("strong",null,f?`${f}:`:""," ",d))),e(R,{alignment:"right",color:"light"},h!==void 0&&!n?e(H,{route:`/overrides/${i}`},"Edit override"):null))})))},V=Ct;async function ee({actions:t,saveSettings:r,scores:n,settings:o}){var p,m;let s=(p=o.scoreOverrides)!=null?p:{},a={...s},l=[];for(let u of Object.keys(s)){let i=s==null?void 0:s[u];delete a[u],l.push({type:"modscoreS",data:{dimension:u,delta:i.initial-((m=n[u])!=null?m:0)}})}await r({...o,scoreOverrides:a}),await t.rawUpdate(l)}async function Le({quirk:t,settings:r,saveSettings:n,actions:o}){var l;let s=(l=r.quirkOverrides)==null?void 0:l[t];if(!s)return;let a={...r.quirkOverrides};delete a[t],await n({...r,quirkOverrides:a}),await o.rawUpdate([{type:"setquirk",data:{key:t,value:s.initial}}])}import{Button as Oe}from"@uniformdev/design-system";import{Switch as wt}from"@uniformdev/design-system";var xe=({dimensionIndex:{index:t},state:{scores:r,data:n},actions:o,saveSettings:s,settings:a})=>{let l=te.useMemo(()=>{let i={};return Object.keys(t).filter(d=>!r[d]).map(d=>{i[t[d].dim]=0}),i},[r,t]),p=Object.keys(r).length,m=p+Object.keys(l).length,u=()=>{o.rawUpdate([{type:"setcontrol",data:!n.controlGroup}])};return e(te.Fragment,null,e("article",{css:b.page},e("div",{css:b.headingGroup},e("h2",{css:b.title},"Dimensions",e("small",null,p," active of ",m)),e("div",{css:b.reset},e(Oe,{buttonType:"ghost",onClick:()=>ee({actions:o,saveSettings:s,scores:r,settings:a}).then(o.forget)},"clear all dimensions")),e(wt,{name:"controlGroup",label:"Control Group",onChange:u,checked:n.controlGroup})),p>0?e(V,{dimensionIndex:t,dimensions:r}):e(E,{title:n.controlGroup?"In control group":"No active dimensions",text:n.controlGroup?"You are part of the personalization control group. While in the control group you do not have dimension scores and will not see personalized content. A/B tests will still run.":"You do not have score in any dimensions yet.",buttonGroup:n.controlGroup?e(Oe,{buttonType:"secondary",onClick:u},"Exit control group"):null}),e(_,null,e(G,{title:`Inactive Dimensions (${Object.keys(l).length})`},e(V,{dimensionIndex:t,dimensions:l})))))};import*as Ve from"react";import{AddButton as kt}from"@uniformdev/design-system";import{Button as Re}from"@uniformdev/design-system";var Ie=({dimensionIndex:{index:t},state:{data:r,scores:n},actions:o,settings:s,saveSettings:a})=>{var d;let l=(d=s.scoreOverrides)!=null?d:{},p=Object.keys(l).length,m=c=>(c==null||c.preventDefault(),a({...s,route:"/overrides/add"})),u=()=>{o.rawUpdate([{type:"setcontrol",data:!r.controlGroup}])},i={};return Object.entries(n).map(([c,f])=>{l[c]!==void 0&&(i[c]=f)}),e(Ve.Fragment,null,e("article",{css:b.page},e("div",{css:b.headingGroup},e("h2",{css:b.title},"What if?"),e("div",{css:b.reset},e(Re,{buttonType:"ghost",onClick:()=>ee({actions:o,settings:s,saveSettings:a,scores:n})},"delete all overrides")),e(kt,{onClick:m})),e("p",null,"Override dimension scores to test personalization"),p>0?e(V,{dimensionIndex:t,dimensions:i,onClick:c=>a({...s,route:`/overrides/${c}`})}):e(E,{title:r.controlGroup?"In control group":"No overrides",text:r.controlGroup?"You are part of the personalization control group. While in the control group you do not have dimension scores and will not see personalized content. A/B tests will still run.":"You do not have any dimension overrides yet.",buttonGroup:r.controlGroup?e(Re,{buttonType:"secondary",onClick:u},"Exit control group"):null})))};import{Field as Fe,Form as It,Formik as Pt}from"formik";import*as B from"yup";import{css as I}from"@emotion/react";var Pe=I`
301
+ `,dangerouslySetInnerHTML:{__html:r}})};var Ct=({dimensionIndex:t,dimensions:r,disableEditOverride:n,onClick:o,preemptiveOverrides:s})=>{var p;let{settings:a}=U(),l=(p=s!=null?s:a.scoreOverrides)!=null?p:{};return e(X,null,e(j,null,Object.entries(r).sort(([m],[u])=>m.localeCompare(u)).map(([m,u])=>{var C;let{dim:i,name:d,type:c,category:f}=(C=t[m])!=null?C:{name:m,dim:m,type:void 0,category:void 0},h=l[i];return e(F,{key:i},e(R,null,h!==void 0?e("s",{css:Te},h.initial):null,e("b",{css:ke},u,h!==void 0&&e("i",{css:De}))),e(R,null,e("div",{onClick:()=>o==null?void 0:o(i),css:o?{cursor:"pointer"}:void 0},e("span",{css:b.divider,role:"presentation"}),e("div",null,e(Le,{type:c})," ",c),e("strong",null,f?`${f}:`:""," ",d))),e(R,{alignment:"right",color:"light"},h!==void 0&&!n?e(H,{route:`/overrides/${i}`},"Edit override"):null))})))},V=Ct;async function te({actions:t,saveSettings:r,scores:n,settings:o}){var p,m;let s=(p=o.scoreOverrides)!=null?p:{},a={...s},l=[];for(let u of Object.keys(s)){let i=s==null?void 0:s[u];delete a[u],l.push({type:"modscoreS",data:{dimension:u,delta:i.initial-((m=n[u])!=null?m:0)}})}await r({...o,scoreOverrides:a}),await t.rawUpdate(l)}async function Oe({quirk:t,settings:r,saveSettings:n,actions:o}){var l;let s=(l=r.quirkOverrides)==null?void 0:l[t];if(!s)return;let a={...r.quirkOverrides};delete a[t],await n({...r,quirkOverrides:a}),await o.rawUpdate([{type:"setquirk",data:{key:t,value:s.initial}}])}import{Button as xe}from"@uniformdev/design-system";import{Switch as wt}from"@uniformdev/design-system";var Re=({dimensionIndex:{index:t},state:{scores:r,data:n},actions:o,saveSettings:s,settings:a})=>{let l=oe.useMemo(()=>{let i={};return Object.keys(t).filter(d=>!r[d]).map(d=>{i[t[d].dim]=0}),i},[r,t]),p=Object.keys(r).length,m=p+Object.keys(l).length,u=()=>{o.rawUpdate([{type:"setcontrol",data:!n.controlGroup}])};return e(oe.Fragment,null,e("article",{css:b.page},e("div",{css:b.headingGroup},e("h2",{css:b.title},"Dimensions",e("small",null,p," active of ",m)),e("div",{css:b.reset},e(xe,{buttonType:"ghost",onClick:()=>te({actions:o,saveSettings:s,scores:r,settings:a}).then(o.forget)},"clear all dimensions")),e(wt,{name:"controlGroup",label:"Control Group",onChange:u,checked:n.controlGroup})),p>0?e(V,{dimensionIndex:t,dimensions:r}):e(E,{title:n.controlGroup?"In control group":"No active dimensions",text:n.controlGroup?"You are part of the personalization control group. While in the control group you do not have dimension scores and will not see personalized content. A/B tests will still run.":"You do not have score in any dimensions yet.",buttonGroup:n.controlGroup?e(xe,{buttonType:"secondary",onClick:u},"Exit control group"):null}),e(G,null,e($,{title:`Inactive Dimensions (${Object.keys(l).length})`},e(V,{dimensionIndex:t,dimensions:l})))))};import*as Ie from"react";import{AddButton as kt}from"@uniformdev/design-system";import{Button as Ve}from"@uniformdev/design-system";var Pe=({dimensionIndex:{index:t},state:{data:r,scores:n},actions:o,settings:s,saveSettings:a})=>{var d;let l=(d=s.scoreOverrides)!=null?d:{},p=Object.keys(l).length,m=c=>(c==null||c.preventDefault(),a({...s,route:"/overrides/add"})),u=()=>{o.rawUpdate([{type:"setcontrol",data:!r.controlGroup}])},i={};return Object.entries(n).map(([c,f])=>{l[c]!==void 0&&(i[c]=f)}),e(Ie.Fragment,null,e("article",{css:b.page},e("div",{css:b.headingGroup},e("h2",{css:b.title},"What if?"),e("div",{css:b.reset},e(Ve,{buttonType:"ghost",onClick:()=>te({actions:o,settings:s,saveSettings:a,scores:n})},"delete all overrides")),e(kt,{onClick:m})),e("p",null,"Override dimension scores to test personalization"),p>0?e(V,{dimensionIndex:t,dimensions:i,onClick:c=>a({...s,route:`/overrides/${c}`})}):e(E,{title:r.controlGroup?"In control group":"No overrides",text:r.controlGroup?"You are part of the personalization control group. While in the control group you do not have dimension scores and will not see personalized content. A/B tests will still run.":"You do not have any dimension overrides yet.",buttonGroup:r.controlGroup?e(Ve,{buttonType:"secondary",onClick:u},"Exit control group"):null})))};import{Field as qe,Form as It,Formik as Pt}from"formik";import*as B from"yup";import{css as I}from"@emotion/react";var He=I`
302
302
  background: var(--white);
303
303
  border: 1px solid var(--gray-500);
304
304
  border-radius: var(--rounded-base);
@@ -311,12 +311,12 @@ to {
311
311
  }
312
312
  `,lr=I`
313
313
  margin: var(--spacing-base) 0;
314
- `,He=I`
314
+ `,Me=I`
315
315
  color: var(--brand-secondary-1);
316
316
  display: flex;
317
317
  flex-direction: column;
318
318
  margin: 0 0 var(--spacing-sm);
319
- `,Me=I`
319
+ `,Ae=I`
320
320
  color: var(--brand-secondary-1);
321
321
  display: block;
322
322
  flex: 1 100%;
@@ -328,7 +328,7 @@ to {
328
328
  `,mr=I`
329
329
  color: var(--brand-secondary-5);
330
330
  display: block;
331
- `,Ae=I`
331
+ `,Ee=I`
332
332
  flex-direction: row;
333
333
  flex-wrap: wrap;
334
334
 
@@ -396,7 +396,7 @@ to {
396
396
  flex: 1 0 20%;
397
397
  padding: 10px;
398
398
  }
399
- `;import{Caption as Tt,ErrorMessage as Dt}from"@uniformdev/design-system";var Ee=({field:t,form:r,meta:n,...o})=>{var u,i;let{label:s,caption:a,min:l=0,max:p=100,step:m}=o;return e("div",null,e("label",{css:[He,Ae]},e("span",{css:Me},s),e("input",{type:"range",min:l,max:p,step:m,...t,value:(u=t.value)!=null?u:0}),e("span",{className:"value-display"},(i=t.value)!=null?i:0)),a?e(Tt,null,a):null,r.touched[t.name]&&r.errors[t.name]?e(Dt,{message:r.errors[t.name]}):null)};import{css as St}from"@emotion/react";var P=({children:t,...r})=>e("fieldset",{css:St`
399
+ `;import{Caption as Tt,ErrorMessage as Dt}from"@uniformdev/design-system";var Be=({field:t,form:r,meta:n,...o})=>{var u,i;let{label:s,caption:a,min:l=0,max:p=100,step:m}=o;return e("div",null,e("label",{css:[Me,Ee]},e("span",{css:Ae},s),e("input",{type:"range",min:l,max:p,step:m,...t,value:(u=t.value)!=null?u:0}),e("span",{className:"value-display"},(i=t.value)!=null?i:0)),a?e(Tt,null,a):null,r.touched[t.name]&&r.errors[t.name]?e(Dt,{message:r.errors[t.name]}):null)};import{css as St}from"@emotion/react";var P=({children:t,...r})=>e("fieldset",{css:St`
400
400
  border: none;
401
401
  padding: 0;
402
402
  & legend {
@@ -407,7 +407,7 @@ to {
407
407
  font-weight: var(--fw-bold);
408
408
  border-bottom: 1px solid var(--gray-400);
409
409
  width: 100%;
410
- `},t);import{Context as Ot,TransitionDataStore as xt}from"@uniformdev/context";function Be({manifest:t,visitor:r,override:n}){let o=new Ot({manifest:t,transitionStore:new se({initialData:r})}),s={...o.scores};o.storage.updateData([n]);let l={...{...o.scores}};return Object.entries(l).forEach(([p,m])=>{s[p]===m&&delete l[p]}),l}var se=class extends xt{async handleDelete(){}async handleUpdateData(){}};function N({scores:t,scoreOverrides:r}){let n=[];return r?(Object.entries(r).forEach(([o,s])=>{var p;let a=(p=t[o])!=null?p:0;if(a===s.override)return;let l=s.override-a;n.push({type:"modscoreS",data:{dimension:o,delta:l}})}),n):[]}function oe({quirks:t,quirkOverrides:r}){let n={};if(!!r)return Object.entries(r).forEach(([o,s])=>{t[o]!==s.override&&(n[o]=s.override)}),Object.keys(n).length>0?n:void 0}import{Button as Ht}from"@uniformdev/design-system";var ae=t=>({field:r,form:n,meta:o,...s})=>e(t,{...s,...r,errorMessage:n.errors[r.name]});import{Input as Rt,InputSelect as Vt}from"@uniformdev/design-system";var re=ae(Rt),Qe=ae(Vt);var Mt=B.object({dimension:B.string(),score:B.number()}),ce=({settings:t,saveSettings:r,state:n,actions:o,dimensionIndex:{index:s}})=>{var m,u;let a=t.route?[...t.route.matchAll(/overrides\/(?!.*add)(\w+)?/g)]:[],l=a[0]?a[0][1]:"";if(!((m=n.manifest.project.pz)!=null&&m.sig))return e("p",null,"Error, manifest is broken or there is no signal to override.");let p=Object.entries(s).filter(([,i])=>i.type!=="Audience"&&i.type!=="Intent").map(([i,d])=>{let c=d.type?`${d.type}: `:"",f=d.category?`${d.category} - `:"",h=`${c}${f}${d.name}`;return{value:i,label:h}});return p.unshift({value:"",label:"Choose dimension to override"}),e(Pt,{initialValues:{dimension:l,score:(u=n.scores[l])!=null?u:0},validate:i=>{let d={};return(i.score===n.scores[i.dimension]||i.score===0&&!n.scores[l])&&(d.score="You have to modify current score value"),d},validationSchema:Mt,enableReinitialize:!0,validateOnChange:!1,validateOnBlur:!1,onSubmit:async i=>{var C,w,k,D,Q,me;let d=(w=(C=s[i.dimension])==null?void 0:C.cap)!=null?w:0,c=Math.min(i.score,d),f={...t,scoreOverrides:{...t.scoreOverrides,[i.dimension]:{initial:(me=(Q=(D=(k=t.scoreOverrides)==null?void 0:k[i.dimension])==null?void 0:D.initial)!=null?Q:n.scores[i.dimension])!=null?me:0,override:c}},route:"/overrides"};await r(f);let h=N({scores:n.scores,scoreOverrides:f.scoreOverrides});o.rawUpdate(h)}},({isSubmitting:i,values:d})=>{var w;let c=Be({manifest:n.manifest,visitor:n.data,override:{type:"modscore",data:{dimension:d.dimension,delta:d.score-((w=n.scores[d.dimension])!=null?w:0)}}}),f=Object.entries(n.scores).reduce((k,[D,Q])=>(k[D]={initial:Q,override:Q},k),{}),h={max:100,step:50};s[d.dimension]&&(h.max=s[d.dimension].cap,h.step=s[d.dimension].str);let C=d.score&&Object.keys(c).length>0;return e(It,{css:b.page},e("h1",{css:b.title},"Override Dimension"),e(Fe,{component:Qe,label:"Dimension",id:"dimension",name:"dimension",options:p,disabled:i}),e("p",{css:b.text},e("small",null,"Audiences and Intents are aggregated from other dimension scores and cannot be overridden directly.")),d.dimension?e(Fe,{component:Ee,name:"score",label:"Score",disabled:i,caption:`Range: 0 - ${h.max} in increments of ${h.step}`}):null,e(P,{disabled:i,css:{marginBottom:"2rem"}},C?e(_,null,e(G,{title:`Impacted Dimensions (${Object.keys(c).length})`},e(V,{preemptiveOverrides:f,dimensionIndex:s,dimensions:c,disableEditOverride:!0}))):null,e(Ht,{type:"submit",css:b.submitButton,disabled:i},"Save"),e(H,{route:"/overrides",css:b.cancelButton},"Cancel")))})};import{useState as qt}from"react";import{useState as At,useEffect as Et}from"react";import{Button as Bt,Input as Qt}from"@uniformdev/design-system";var Ft=({name:t,value:r,submit:n})=>{let[o,s]=At(r!=null?r:"");return Et(()=>{s(r!=null?r:"")},[r]),e("div",{css:{display:"flex",gap:"var(--spacing-sm)"}},e(Qt,{type:"text",css:[Pe],name:t,value:o,onChange:p=>{s(p.target.value)}}),e(Bt,{buttonType:"primary",disabled:o===r,size:"sm",onClick:()=>n(t,o!=null?o:"")},"Save"))},qe=Ft;import{Button as Ne,InputSelect as Nt}from"@uniformdev/design-system";var Ze=({...t})=>{let{state:{data:{quirks:r}},quirksIndex:{index:n},settings:o,saveSettings:s,actions:a}=t,[l,p]=qt(""),m;l&&(m=n[l]);let u=async(i,d)=>{var h,C,w;p("");let c={...o,quirkOverrides:{...o.quirkOverrides,[i]:{initial:(w=(C=(h=o.quirkOverrides)==null?void 0:h[i])==null?void 0:C.initial)!=null?w:r[i],override:d}}};await s(c);let f=oe({quirks:r,quirkOverrides:c.quirkOverrides});await a.update({quirks:f})};return e(y.Fragment,null,e("article",{css:[b.page,b.quirks]},e("h1",{css:b.title},"Quirks"),e("p",{css:b.text},"Keys defined in Uniform and their current, programmatically defined values for this visit."),Object.keys(n).length?e(J,null,e(Ce,null,e(F,null,e(j,{width:"30%"},"Key"),e(j,{width:"50%"},"Value"),e(j,{width:"20%"},""))),e(X,null,Object.values(n).map(({name:i,value:d,id:c})=>{var C,w,k;let f=(w=(C=o.quirkOverrides)==null?void 0:C[i])==null?void 0:w.initial,h=[];return m&&m.options&&(h=m.options.map(D=>({value:D.value,label:D.name}))),e(F,{key:c,border:"bottom"},e(R,null,e("strong",null,i)),e(R,null,l!==c?e("div",{onClick:()=>{p(c)}},f?e("div",null,e("s",null,f)):null,d):null,l===c&&m&&e(y.Fragment,null,m.options?e(Nt,{showLabel:!1,label:`Change ${i}`,defaultOption:`Change ${i}`,name:c,onChange:D=>u(D.target.name,D.target.value),options:h}):e(qe,{name:c,value:d,submit:u}))),e(R,null,l?null:(k=o.quirkOverrides)!=null&&k[c]?e(Ne,{buttonType:"ghost",onClick:()=>{Le({quirk:c,settings:o,saveSettings:s,actions:a})}},e("small",null,"Clear Override")):e(Ne,{buttonType:"ghost",onClick:()=>{p(c)}},e("small",null,"Override"))))}))):e(E,{title:"No quirks configured",text:"There are currently no quirks setup. Try to connect to Uniform API to load additional information about Quirks and Quirks without defined value."})))};import{Button as Zt}from"@uniformdev/design-system";import{Switch as ze}from"@uniformdev/design-system";var Ue=({settings:t,saveSettings:r,actions:n,state:{data:o}})=>e("article",{css:[b.page,{display:"flex",flexDirection:"column",gap:"var(--spacing-base)"}]},e("h1",{css:b.title},"Settings"),e(P,null,e(q,null,"Data Connection"),e(Zt,{buttonType:"tertiary",onClick:()=>{r({...t,route:"/connect"})}},"Manage Connection to Uniform")),e(P,null,e(q,null,"Storage Consent"),e(ze,{label:"Store visitor data",id:"consent-mode",name:"consentMode",checked:o.consent,onChange:s=>{n.rawUpdate([{type:"consent",data:s.currentTarget.checked}]),r({...t,consentMode:s.currentTarget.checked})}}),e("p",null,e("small",null,"Enabling storage consent allows storing behavior in this browser for personalization across sessions. Only affects this browser. Personalization works with this disabled, but dimension scores are lost on refresh."))),e(P,null,e(q,null,"Logging"),e(ze,{label:"Write Uniform Context diagnostic logs to browser console",id:"logging",name:"logging",checked:t.logLevel==="debug",onChange:s=>r({...t,logLevel:s.currentTarget.checked?"debug":"none"})})));import{Button as _e}from"@uniformdev/design-system";var de=({settings:t,saveSettings:r})=>{let n=()=>{r({...t,route:"/connect"})},o=()=>{r({...t,ignoreApiKeyPrompt:!0})},s=t.route==="/connect",a=!(t!=null&&t.apiKey);return!t.ignoreApiKeyPrompt&&a&&!s?e("div",{css:[$,be]},e("h2",{css:K},"Connect to a Uniform Project"),e("p",{css:W},"This allows reading human-readable labels for the dimensions."),e("div",{css:Y},e(_e,{buttonType:"secondary",onClick:n},"Connect this site"),e(_e,{buttonType:"ghost",onClick:o},"Skip for now")),e("button",{type:"button",css:ye,title:"close",onClick:o},e("span",{hidden:!0},"Close"))):null};import{computeDimensionDefinitionDisplayData as zt,computeDimensionDisplayData as Ge,DimensionClient as Ut}from"@uniformdev/context/api";import{useAsync as _t}from"react-use";import*as $e from"react";function Ke({apiHost:t,apiKey:r,projectId:n},o){let{loading:s,error:a,value:l}=_t(async()=>{if(!r||!n)return p;let u=(await new Ut({projectId:n,apiKey:r,apiHost:t||void 0}).get()).dimensions,i={};return u.map(d=>{var c,f,h,C;if(i[d.dim]={...zt(d),cap:d.cap,str:10},i[d.dim].type==="Enrichment"){let w=d.dim.split("_")[0];i[d.dim].cap=(C=(h=(f=(c=o==null?void 0:o.project.pz)==null?void 0:c.enr)==null?void 0:f[w])==null?void 0:h.cap)!=null?C:100}}),i},[t,r,n]),p=$e.useMemo(()=>{var u,i,d,c;let m={};return o&&(Object.entries((i=(u=o==null?void 0:o.project.pz)==null?void 0:u.sig)!=null?i:{}).map(([f,h])=>{let C=Ge(f,o);C&&(m[f]={...h,...C})}),Object.entries((c=(d=o==null?void 0:o.project.pz)==null?void 0:d.enr)!=null?c:{}).map(([f,h])=>{var k;let C=Ge(f,o),w={cap:(k=h.cap)!=null?k:100,str:10};C&&(m[f]={...C,cap:w.cap,str:w.str})}),l&&Object.entries(l).map(([f,h])=>{m[f]={...m[f],...h}})),m},[o,l]);return{loading:s,error:a,index:p}}import{useMemo as Gt}from"react";import{QuirkClient as $t}from"@uniformdev/context/api";import{useAsync as Kt}from"react-use";function We({apiHost:t,apiKey:r,projectId:n},o){let{loading:s,error:a,value:l}=Kt(async()=>{if(!r||!n)return{};let u=await new $t({projectId:n,apiKey:r,apiHost:t||void 0}).get(),i={};return u.quirks.map(d=>{i[d.id]={...d,value:o[d.id]}}),i},[t,r,n]),p=Gt(()=>{let m={};return Object.entries(o).map(([u,i])=>m[u]={value:i,id:u,name:u}),l&&Object.entries(l).map(([u,i])=>m[u]={...i,value:o[u]}),m},[o,l]);return{loading:s,error:a,index:p}}import{css as je}from"@emotion/react";import{Theme as so}from"@uniformdev/design-system";function ne(){return e("style",null,`
410
+ `},t);import{Context as Ot,TransitionDataStore as xt}from"@uniformdev/context";function Qe({manifest:t,visitor:r,override:n}){let o=new Ot({manifest:t,transitionStore:new ae({initialData:r})}),s={...o.scores};o.storage.updateData([n]);let l={...{...o.scores}};return Object.entries(l).forEach(([p,m])=>{s[p]===m&&delete l[p]}),l}var ae=class extends xt{async handleDelete(){}async handleUpdateData(){}};function N({scores:t,scoreOverrides:r}){let n=[];return r?(Object.entries(r).forEach(([o,s])=>{var p;let a=(p=t[o])!=null?p:0;if(a===s.override)return;let l=s.override-a;n.push({type:"modscoreS",data:{dimension:o,delta:l}})}),n):[]}function re({quirks:t,quirkOverrides:r}){let n={};if(!!r)return Object.entries(r).forEach(([o,s])=>{t[o]!==s.override&&(n[o]=s.override)}),Object.keys(n).length>0?n:void 0}import{Button as Ht}from"@uniformdev/design-system";var ce=t=>({field:r,form:n,meta:o,...s})=>e(t,{...s,...r,errorMessage:n.errors[r.name]});import{Input as Rt,InputSelect as Vt}from"@uniformdev/design-system";var ne=ce(Rt),Fe=ce(Vt);var Mt=B.object({dimension:B.string(),score:B.number()}),de=({settings:t,saveSettings:r,state:n,actions:o,dimensionIndex:{index:s}})=>{var m,u;let a=t.route?[...t.route.matchAll(/overrides\/(?!.*add)(\w+)?/g)]:[],l=a[0]?a[0][1]:"";if(!((m=n.manifest.project.pz)!=null&&m.sig))return e("p",null,"Error, manifest is broken or there is no signal to override.");let p=Object.entries(s).filter(([,i])=>i.type!=="Audience"&&i.type!=="Intent").map(([i,d])=>{let c=d.type?`${d.type}: `:"",f=d.category?`${d.category} - `:"",h=`${c}${f}${d.name}`;return{value:i,label:h}});return p.unshift({value:"",label:"Choose dimension to override"}),e(Pt,{initialValues:{dimension:l,score:(u=n.scores[l])!=null?u:0},validate:i=>{let d={};return(i.score===n.scores[i.dimension]||i.score===0&&!n.scores[l])&&(d.score="You have to modify current score value"),d},validationSchema:Mt,enableReinitialize:!0,validateOnChange:!1,validateOnBlur:!1,onSubmit:async i=>{var C,w,k,D,Q,ue;let d=(w=(C=s[i.dimension])==null?void 0:C.cap)!=null?w:0,c=Math.min(i.score,d),f={...t,scoreOverrides:{...t.scoreOverrides,[i.dimension]:{initial:(ue=(Q=(D=(k=t.scoreOverrides)==null?void 0:k[i.dimension])==null?void 0:D.initial)!=null?Q:n.scores[i.dimension])!=null?ue:0,override:c}},route:"/overrides"};await r(f);let h=N({scores:n.scores,scoreOverrides:f.scoreOverrides});o.rawUpdate(h)}},({isSubmitting:i,values:d})=>{var w;let c=Qe({manifest:n.manifest,visitor:n.data,override:{type:"modscore",data:{dimension:d.dimension,delta:d.score-((w=n.scores[d.dimension])!=null?w:0)}}}),f=Object.entries(n.scores).reduce((k,[D,Q])=>(k[D]={initial:Q,override:Q},k),{}),h={max:100,step:50};s[d.dimension]&&(h.max=s[d.dimension].cap,h.step=s[d.dimension].str);let C=d.score&&Object.keys(c).length>0;return e(It,{css:b.page},e("h1",{css:b.title},"Override Dimension"),e(qe,{component:Fe,label:"Dimension",id:"dimension",name:"dimension",options:p,disabled:i}),e("p",{css:b.text},e("small",null,"Audiences and Intents are aggregated from other dimension scores and cannot be overridden directly.")),d.dimension?e(qe,{component:Be,name:"score",label:"Score",disabled:i,caption:`Range: 0 - ${h.max} in increments of ${h.step}`}):null,e(P,{disabled:i,css:{marginBottom:"2rem"}},C?e(G,null,e($,{title:`Impacted Dimensions (${Object.keys(c).length})`},e(V,{preemptiveOverrides:f,dimensionIndex:s,dimensions:c,disableEditOverride:!0}))):null,e(Ht,{type:"submit",css:b.submitButton,disabled:i},"Save"),e(H,{route:"/overrides",css:b.cancelButton},"Cancel")))})};import{useState as qt}from"react";import{useState as At,useEffect as Et}from"react";import{Button as Bt,Input as Qt}from"@uniformdev/design-system";var Ft=({name:t,value:r,submit:n})=>{let[o,s]=At(r!=null?r:"");return Et(()=>{s(r!=null?r:"")},[r]),e("div",{css:{display:"flex",gap:"var(--spacing-sm)"}},e(Qt,{type:"text",css:[He],name:t,value:o,onChange:p=>{s(p.target.value)}}),e(Bt,{buttonType:"primary",disabled:o===r,size:"sm",onClick:()=>n(t,o!=null?o:"")},"Save"))},Ne=Ft;import{Button as Ze,InputSelect as Nt}from"@uniformdev/design-system";var ze=({...t})=>{let{state:{data:{quirks:r}},quirksIndex:{index:n},settings:o,saveSettings:s,actions:a}=t,[l,p]=qt(""),m;l&&(m=n[l]);let u=async(i,d)=>{var h,C,w;p("");let c={...o,quirkOverrides:{...o.quirkOverrides,[i]:{initial:(w=(C=(h=o.quirkOverrides)==null?void 0:h[i])==null?void 0:C.initial)!=null?w:r[i],override:d}}};await s(c);let f=re({quirks:r,quirkOverrides:c.quirkOverrides});await a.update({quirks:f})};return e(y.Fragment,null,e("article",{css:[b.page,b.quirks]},e("h1",{css:b.title},"Quirks"),e("p",{css:b.text},"Keys defined in Uniform and their current, programmatically defined values for this visit."),Object.keys(n).length?e(X,null,e(we,null,e(F,null,e(ee,{width:"30%"},"Key"),e(ee,{width:"50%"},"Value"),e(ee,{width:"20%"},""))),e(j,null,Object.values(n).map(({name:i,value:d,id:c})=>{var C,w,k;let f=(w=(C=o.quirkOverrides)==null?void 0:C[i])==null?void 0:w.initial,h=[];return m&&m.options&&(h=m.options.map(D=>({value:D.value,label:D.name}))),e(F,{key:c,border:"bottom"},e(R,null,e("strong",null,i)),e(R,null,l!==c?e("div",{onClick:()=>{p(c)}},f?e("div",null,e("s",null,f)):null,d):null,l===c&&m&&e(y.Fragment,null,m.options?e(Nt,{showLabel:!1,label:`Change ${i}`,defaultOption:`Change ${i}`,name:c,onChange:D=>u(D.target.name,D.target.value),options:h}):e(Ne,{name:c,value:d,submit:u}))),e(R,null,l?null:(k=o.quirkOverrides)!=null&&k[c]?e(Ze,{buttonType:"ghost",onClick:()=>{Oe({quirk:c,settings:o,saveSettings:s,actions:a})}},e("small",null,"Clear Override")):e(Ze,{buttonType:"ghost",onClick:()=>{p(c)}},e("small",null,"Override"))))}))):e(E,{title:"No quirks configured",text:"There are currently no quirks setup. Try to connect to Uniform API to load additional information about Quirks and Quirks without defined value."})))};import{Button as Zt}from"@uniformdev/design-system";import{Switch as Ue}from"@uniformdev/design-system";var _e=({settings:t,saveSettings:r,actions:n,state:{data:o}})=>e("article",{css:[b.page,{display:"flex",flexDirection:"column",gap:"var(--spacing-base)"}]},e("h1",{css:b.title},"Settings"),e(P,null,e(q,null,"Data Connection"),e(Zt,{buttonType:"tertiary",onClick:()=>{r({...t,route:"/connect"})}},"Manage Connection to Uniform")),e(P,null,e(q,null,"Storage Consent"),e(Ue,{label:"Store visitor data",id:"consent-mode",name:"consentMode",checked:o.consent,onChange:s=>{n.rawUpdate([{type:"consent",data:s.currentTarget.checked}]),r({...t,consentMode:s.currentTarget.checked})}}),e("p",null,e("small",null,"Enabling storage consent allows storing behavior in this browser for personalization across sessions. Only affects this browser. Personalization works with this disabled, but dimension scores are lost on refresh."))),e(P,null,e(q,null,"Logging"),e(Ue,{label:"Write Uniform Context diagnostic logs to browser console",id:"logging",name:"logging",checked:t.logLevel==="debug",onChange:s=>r({...t,logLevel:s.currentTarget.checked?"debug":"none"})})));import{Button as Ge}from"@uniformdev/design-system";var le=({settings:t,saveSettings:r})=>{let n=()=>{r({...t,route:"/connect"})},o=()=>{r({...t,ignoreApiKeyPrompt:!0})},s=t.route==="/connect",a=!(t!=null&&t.apiKey);return!t.ignoreApiKeyPrompt&&a&&!s?e("div",{css:[K,ye]},e("h2",{css:W},"Connect to a Uniform Project"),e("p",{css:Y},"This allows reading human-readable labels for the dimensions."),e("div",{css:J},e(Ge,{buttonType:"secondary",onClick:n},"Connect this site"),e(Ge,{buttonType:"ghost",onClick:o},"Skip for now")),e("button",{type:"button",css:Ce,title:"close",onClick:o},e("span",{hidden:!0},"Close"))):null};import{computeDimensionDefinitionDisplayData as zt,computeDimensionDisplayData as $e,DimensionClient as Ut}from"@uniformdev/context/api";import{useAsync as _t}from"react-use";import*as Ke from"react";function We({apiHost:t,apiKey:r,projectId:n},o){let{loading:s,error:a,value:l}=_t(async()=>{if(!r||!n)return p;let u=(await new Ut({projectId:n,apiKey:r,apiHost:t||void 0}).get()).dimensions,i={};return u.map(d=>{var c,f,h,C;if(i[d.dim]={...zt(d),cap:d.cap,str:10},i[d.dim].type==="Enrichment"){let w=d.dim.split("_")[0];i[d.dim].cap=(C=(h=(f=(c=o==null?void 0:o.project.pz)==null?void 0:c.enr)==null?void 0:f[w])==null?void 0:h.cap)!=null?C:100}}),i},[t,r,n]),p=Ke.useMemo(()=>{var u,i,d,c;let m={};return o&&(Object.entries((i=(u=o==null?void 0:o.project.pz)==null?void 0:u.sig)!=null?i:{}).map(([f,h])=>{let C=$e(f,o);C&&(m[f]={...h,...C})}),Object.entries((c=(d=o==null?void 0:o.project.pz)==null?void 0:d.enr)!=null?c:{}).map(([f,h])=>{var k;let C=$e(f,o),w={cap:(k=h.cap)!=null?k:100,str:10};C&&(m[f]={...C,cap:w.cap,str:w.str})}),l&&Object.entries(l).map(([f,h])=>{m[f]={...m[f],...h}})),m},[o,l]);return{loading:s,error:a,index:p}}import{useMemo as Gt}from"react";import{QuirkClient as $t}from"@uniformdev/context/api";import{useAsync as Kt}from"react-use";function Ye({apiHost:t,apiKey:r,projectId:n},o){let{loading:s,error:a,value:l}=Kt(async()=>{if(!r||!n)return{};let u=await new $t({projectId:n,apiKey:r,apiHost:t||void 0}).get(),i={};return u.quirks.map(d=>{i[d.id]={...d,value:o[d.id]}}),i},[t,r,n]),p=Gt(()=>{let m={};return Object.entries(o).map(([u,i])=>m[u]={value:i,id:u,name:u}),l&&Object.entries(l).map(([u,i])=>m[u]={...i,value:o[u]}),m},[o,l]);return{loading:s,error:a,index:p}}import{css as et}from"@emotion/react";import{Theme as so}from"@uniformdev/design-system";function ie(){return e("style",null,`
411
411
  :root {
412
412
  --site-width: 700px;
413
413
 
@@ -417,7 +417,7 @@ to {
417
417
 
418
418
  --min-height: 450px;
419
419
  }
420
- `)}import{useEffect as Wt,useState as Yt}from"react";import{useMountedState as Jt}from"react-use";var Ye=()=>{let[t,r]=Yt(!1),n=Jt();return Wt(()=>{setTimeout(()=>{n()&&r(!0)},1e3)},[n]),t?e("article",{css:b.page},e("h1",null,"Loading..."),e("p",null,"Connecting to Uniform API for complete data.")):null};import{parseQuickConnect as Xt}from"@uniformdev/context";import{ApiClientError as jt,ManifestClient as eo}from"@uniformdev/context/api";import{Field as le,Form as to,Formik as oo}from"formik";import*as T from"react";import{ErrorMessage as ro,Input as no,Button as Z}from"@uniformdev/design-system";function Je(t){let[r,n]=T.useState(t.currentData?"c":"qc"),[o,s]=T.useState(void 0),[a,l]=T.useState(void 0),p=T.useCallback(async i=>{let d=new eo(i);s(void 0);try{let c=await d.get({preview:!0});return l({manifest:c,target:i}),c}catch(c){if(c instanceof jt){c.statusCode===403?s("API key is valid but does not have Context > Read Drafts permission, or the API key does not have permissions to the project, or the project does not exist."):s(c.errorMessage);return}if("message"in c){c.message==="Failed to fetch"?s("A network error occurred. Ensure the API host is valid."):s(c.message);return}s(JSON.stringify(c,null,2));return}},[]);T.useEffect(()=>{!t.currentData||p(t.currentData)},[p,t.currentData]);let m=async i=>{await p(i)&&(n("c"),await t.onConnect(i))},u=()=>{confirm("Disconnect from Uniform? Make sure to save your API key if you want to reconnect.")&&(n("qc"),l(void 0),s(void 0),t.onConnect(null))};return e("div",null,o?e(ro,{message:o}):null,r==="qc"||r==="mc"?e(io,{...t,state:r,setState:n,onConnect:m}):e("div",null,a?e(T.Fragment,null,e("p",null,"Connected to"," ",e("a",{href:`${a==null?void 0:a.target.apiHost}/projects/${a==null?void 0:a.target.projectId}`,target:"_blank",rel:"noopener noreferrer",css:{textDecoration:"underline"}},e("strong",null,a==null?void 0:a.manifest.project.name))," ",e("small",null,"(",a==null?void 0:a.manifest.project.id,")")),e(Z,{buttonType:"secondary",type:"button",onClick:u},"Disconnect")):null))}function io({setState:t,state:r,currentData:n,onConnect:o}){var s,a,l;return e("div",null,e(oo,{initialValues:{apiHost:(s=n==null?void 0:n.apiHost)!=null?s:"https://uniform.dev",apiKey:(a=n==null?void 0:n.apiKey)!=null?a:"",projectId:(l=n==null?void 0:n.projectId)!=null?l:"",qc:""},onSubmit:o},({setFieldValue:p,setFieldError:m,errors:{qc:u},isSubmitting:i})=>e(to,null,e("fieldset",{css:{display:"flex",flexDirection:"column",gap:"var(--spacing-base)"}},r==="qc"?e(T.Fragment,null,e("div",null,e(no,{placeholder:"Paste Quick Connect Code Here",caption:"Copy the Quick Connect code after creating an API key in Uniform.",errorMessage:u,onChange:d=>{try{let c=Xt(d.currentTarget.value);p("apiHost",c.apiHost),p("apiKey",c.apiKey),p("projectId",c.projectId)}catch(c){m("qc",c.message)}}})),e("section",{css:{display:"flex",gap:"var(--spacing-sm)"}},e(Z,{type:"submit",buttonType:"primary",disabled:i},i?"Verifying...":"Connect"),e(Z,{type:"button",buttonType:"ghost",onClick:()=>t("mc"),disabled:i},"Connect Manually"))):e(T.Fragment,null,e("div",null,e(le,{component:re,label:"API Key",name:"apiKey",caption:"Generate an API key in your Uniform team settings."})),e("div",null,e(le,{component:re,label:"Project ID",name:"projectId",caption:"Available to copy after generating an API key"})),e("div",null,e(le,{component:re,label:"API Host",name:"apiHost",caption:"Use a non-standard Uniform API endpoint. Most people will not not need this option."})),e("section",{css:{display:"flex",gap:"var(--spacing-sm)"}},e(Z,{type:"submit",buttonType:"primary",disabled:i},i?"Verifying...":"Connect"),e(Z,{type:"button",buttonType:"ghost",onClick:()=>t("qc"),disabled:i},"Use Quick Connect")))))))}var Xe=({settings:t,saveSettings:r})=>{let n=t.apiKey&&t.projectId?{apiKey:t.apiKey,projectId:t.projectId,apiHost:t.apiHost}:void 0;return e("article",{css:b.page},e("h1",{css:b.title},"Connect to a Uniform Project"),e("p",{css:b.text},e("small",null,"Adding an API key and project ID enables human-readable dimension labels to be shown. You must have access to the Uniform project to do this.")),e(Je,{onConnect:async o=>{o?await r({...t,apiKey:o.apiKey,projectId:o.projectId,apiHost:o.apiHost}):await r({...t,apiKey:void 0,projectId:void 0,apiHost:void 0})},currentData:n}))};var ao=je`
420
+ `)}import{useEffect as Wt,useState as Yt}from"react";import{useMountedState as Jt}from"react-use";var Je=()=>{let[t,r]=Yt(!1),n=Jt();return Wt(()=>{setTimeout(()=>{n()&&r(!0)},1e3)},[n]),t?e("article",{css:b.page},e("h1",null,"Loading..."),e("p",null,"Connecting to Uniform API for complete data.")):null};import{parseQuickConnect as Xt}from"@uniformdev/context";import{ApiClientError as jt,ManifestClient as eo}from"@uniformdev/context/api";import{Field as pe,Form as to,Formik as oo}from"formik";import*as T from"react";import{ErrorMessage as ro,Input as no,Button as Z}from"@uniformdev/design-system";function Xe(t){let[r,n]=T.useState(t.currentData?"c":"qc"),[o,s]=T.useState(void 0),[a,l]=T.useState(void 0),p=T.useCallback(async i=>{let d=new eo(i);s(void 0);try{let c=await d.get({preview:!0});return l({manifest:c,target:i}),c}catch(c){if(c instanceof jt){c.statusCode===403?s("API key is valid but does not have Context > Read Drafts permission, or the API key does not have permissions to the project, or the project does not exist."):s(c.errorMessage);return}if("message"in c){c.message==="Failed to fetch"?s("A network error occurred. Ensure the API host is valid."):s(c.message);return}s(JSON.stringify(c,null,2));return}},[]);T.useEffect(()=>{!t.currentData||p(t.currentData)},[p,t.currentData]);let m=async i=>{await p(i)&&(n("c"),await t.onConnect(i))},u=()=>{confirm("Disconnect from Uniform? Make sure to save your API key if you want to reconnect.")&&(n("qc"),l(void 0),s(void 0),t.onConnect(null))};return e("div",null,o?e(ro,{message:o}):null,r==="qc"||r==="mc"?e(io,{...t,state:r,setState:n,onConnect:m}):e("div",null,a?e(T.Fragment,null,e("p",null,"Connected to"," ",e("a",{href:`${a==null?void 0:a.target.apiHost}/projects/${a==null?void 0:a.target.projectId}`,target:"_blank",rel:"noopener noreferrer",css:{textDecoration:"underline"}},e("strong",null,a==null?void 0:a.manifest.project.name))," ",e("small",null,"(",a==null?void 0:a.manifest.project.id,")")),e(Z,{buttonType:"secondary",type:"button",onClick:u},"Disconnect")):null))}function io({setState:t,state:r,currentData:n,onConnect:o}){var s,a,l;return e("div",null,e(oo,{initialValues:{apiHost:(s=n==null?void 0:n.apiHost)!=null?s:"https://uniform.dev",apiKey:(a=n==null?void 0:n.apiKey)!=null?a:"",projectId:(l=n==null?void 0:n.projectId)!=null?l:"",qc:""},onSubmit:o},({setFieldValue:p,setFieldError:m,errors:{qc:u},isSubmitting:i})=>e(to,null,e("fieldset",{css:{display:"flex",flexDirection:"column",gap:"var(--spacing-base)"}},r==="qc"?e(T.Fragment,null,e("div",null,e(no,{placeholder:"Paste Quick Connect Code Here",caption:"Copy the Quick Connect code after creating an API key in Uniform.",errorMessage:u,onChange:d=>{try{let c=Xt(d.currentTarget.value);p("apiHost",c.apiHost),p("apiKey",c.apiKey),p("projectId",c.projectId)}catch(c){m("qc",c.message)}}})),e("section",{css:{display:"flex",gap:"var(--spacing-sm)"}},e(Z,{type:"submit",buttonType:"primary",disabled:i},i?"Verifying...":"Connect"),e(Z,{type:"button",buttonType:"ghost",onClick:()=>t("mc"),disabled:i},"Connect Manually"))):e(T.Fragment,null,e("div",null,e(pe,{component:ne,label:"API Key",name:"apiKey",caption:"Generate an API key in your Uniform team settings."})),e("div",null,e(pe,{component:ne,label:"Project ID",name:"projectId",caption:"Available to copy after generating an API key"})),e("div",null,e(pe,{component:ne,label:"API Host",name:"apiHost",caption:"Use a non-standard Uniform API endpoint. Most people will not not need this option."})),e("section",{css:{display:"flex",gap:"var(--spacing-sm)"}},e(Z,{type:"submit",buttonType:"primary",disabled:i},i?"Verifying...":"Connect"),e(Z,{type:"button",buttonType:"ghost",onClick:()=>t("qc"),disabled:i},"Use Quick Connect")))))))}var je=({settings:t,saveSettings:r})=>{let n=t.apiKey&&t.projectId?{apiKey:t.apiKey,projectId:t.projectId,apiHost:t.apiHost}:void 0;return e("article",{css:b.page},e("h1",{css:b.title},"Connect to a Uniform Project"),e("p",{css:b.text},e("small",null,"Adding an API key and project ID enables human-readable dimension labels to be shown. You must have access to the Uniform project to do this.")),e(Xe,{onConnect:async o=>{o?await r({...t,apiKey:o.apiKey,projectId:o.projectId,apiHost:o.apiHost}):await r({...t,apiKey:void 0,projectId:void 0,apiHost:void 0})},currentData:n}))};var ao=et`
421
421
  background: var(--white);
422
422
  padding: var(--spacing-base);
423
423
  overflow-y: auto;
@@ -446,7 +446,7 @@ to {
446
446
  &::-webkit-scrollbar-thumb:hover {
447
447
  background: var(--gray-500);
448
448
  }
449
- `;function et(t){let r=Ke(t.settings,t.state.manifest),n=We(t.settings,t.state.data.quirks),o={...t,dimensionIndex:r,quirksIndex:n},s=()=>{var a;if(r.loading||n.loading)return e(Ye,null);if(t.settings.route&&t.settings.route.match(/overrides\/\w+/))return e(ce,{...o});switch((a=t.settings)==null?void 0:a.route){case void 0:case"/":case"/dimensions":return e(xe,{...o});case"/overrides":return e(Ie,{...o});case"/overrides/add":return e(ce,{...o});case"/quirks":return e(Ze,{...o});case"/settings":return e(Ue,{...o});case"/connect":return e(Xe,{...o});default:return e(fe,null)}};return e(ge,{settings:t.settings,saveSettings:t.saveSettings},e(so,null),e(ne,null),e("div",{css:je`
449
+ `;function tt(t){let r=We(t.settings,t.state.manifest),n=Ye(t.settings,t.state.data.quirks),o={...t,dimensionIndex:r,quirksIndex:n},s=()=>{var a;if(r.loading||n.loading)return e(Je,null);if(t.settings.route&&t.settings.route.match(/overrides\/\w+/))return e(de,{...o});switch((a=t.settings)==null?void 0:a.route){case void 0:case"/":case"/dimensions":return e(Re,{...o});case"/overrides":return e(Pe,{...o});case"/overrides/add":return e(de,{...o});case"/quirks":return e(ze,{...o});case"/settings":return e(_e,{...o});case"/connect":return e(je,{...o});default:return e(he,null)}};return e(ve,{settings:t.settings,saveSettings:t.saveSettings},e(so,null),e(ie,null),e("div",{css:et`
450
450
  display: grid;
451
451
  grid-template-columns: 200px auto;
452
452
  font-weight: var(--fs-base);
@@ -455,7 +455,7 @@ to {
455
455
  line-height: var(--base-line-height);
456
456
  height: var(--min-height);
457
457
  min-width: var(--site-width);
458
- `},e(ve,{...t}),e("main",{css:ao},e(de,{...t}),s())))}import{Context as co,createDebugConsoleLogDrain as lo}from"@uniformdev/context";import*as x from"react";var pe="embeddedUniformDevToolsSettings";function tt({context:t,initialSettings:r}){let n=t!=null?t:typeof window!="undefined"?window.__UNIFORM_DEVTOOLS_CONTEXT_INSTANCE__:void 0,o=n!=null?n:new co({manifest:{project:{}}}),[s,a]=x.useState({data:o.storage.data,manifest:o.manifest.data,scores:o.scores,personalizations:[],tests:[]}),[l,p]=x.useState(r!=null?r:{});x.useEffect(()=>{var d;let i=lo((d=l.logLevel)!=null?d:"none");return o.events.on("log",i),()=>{o.events.off("log",i)}},[l,o]),x.useEffect(()=>{let i=()=>{let f=window.localStorage.getItem(pe)||"{}",h=JSON.parse(f),C=oe({quirks:o.storage.data.quirks,quirkOverrides:h.quirkOverrides});C&&(console.log("Applying overridden quirks:",C),o.update({quirks:C}));let w=N({scores:o.scores,scoreOverrides:h.scoreOverrides});w.length&&(console.log("Applying overridden scores:",w),o.storage.updateData(w)),a(k=>({...k,scores:o.scores,data:o.storage.data,manifest:o.manifest.data}))},d=f=>{!f.changed||a(h=>({...h,personalizations:[...h.personalizations,f]}))},c=f=>{!f.variantAssigned||a(h=>({...h,tests:[...h.tests,f]}))};return o.events.on("personalizationResult",d),o.events.on("testResult",c),o.storage.events.on("*",i),()=>{o.storage.events.off("*",i),o.events.off("personalizationResult",d),o.events.off("testResult",c)}},[o]),x.useEffect(()=>{if(window.localStorage){let i=window.localStorage.getItem(pe);if(i)try{let d=JSON.parse(i),c={...r,...d};p(c);let f=N({scores:s.scores,scoreOverrides:c.scoreOverrides});m.rawUpdate(f)}catch(d){window.localStorage.removeItem(pe),console.error("Failed to parse settings from localStorage: ",d.message)}}},[]);let{actions:m,saveSettings:u}=x.useMemo(()=>({actions:{update:c=>o.update(c),forget:()=>o.forget(!1),rawUpdate:c=>o.storage.updateData(c)},saveSettings:async c=>{p(c),window.localStorage&&window.localStorage.setItem("embeddedUniformDevToolsSettings",JSON.stringify(c))}}),[o]);return n?e(et,{state:s,actions:m,settings:l,saveSettings:u}):e("p",null,"Unable to find Uniform Context. Ensure the devtools plugin is activated.")}import{css as uo}from"@emotion/react";import*as rt from"react";import{Theme as go}from"@uniformdev/design-system";import{css as po}from"@emotion/react";var mo=po`
458
+ `},e(fe,{...t}),e("main",{css:ao},e(le,{...t}),s())))}import{Context as co,createDebugConsoleLogDrain as lo}from"@uniformdev/context";import*as x from"react";var me="embeddedUniformDevToolsSettings";function ot({context:t,initialSettings:r}){let n=t!=null?t:typeof window!="undefined"?window.__UNIFORM_DEVTOOLS_CONTEXT_INSTANCE__:void 0,o=n!=null?n:new co({manifest:{project:{}}}),[s,a]=x.useState({data:o.storage.data,manifest:o.manifest.data,scores:o.scores,personalizations:[],tests:[]}),[l,p]=x.useState(r!=null?r:{});x.useEffect(()=>{var d;let i=lo((d=l.logLevel)!=null?d:"none");return o.events.on("log",i),()=>{o.events.off("log",i)}},[l,o]),x.useEffect(()=>{let i=()=>{let f=window.localStorage.getItem(me)||"{}",h=JSON.parse(f),C=re({quirks:o.storage.data.quirks,quirkOverrides:h.quirkOverrides});C&&(console.log("Applying overridden quirks:",C),o.update({quirks:C}));let w=N({scores:o.scores,scoreOverrides:h.scoreOverrides});w.length&&(console.log("Applying overridden scores:",w),o.storage.updateData(w)),a(k=>({...k,scores:o.scores,data:o.storage.data,manifest:o.manifest.data}))},d=f=>{!f.changed||a(h=>({...h,personalizations:[...h.personalizations,f]}))},c=f=>{!f.variantAssigned||a(h=>({...h,tests:[...h.tests,f]}))};return o.events.on("personalizationResult",d),o.events.on("testResult",c),o.storage.events.on("*",i),()=>{o.storage.events.off("*",i),o.events.off("personalizationResult",d),o.events.off("testResult",c)}},[o]),x.useEffect(()=>{if(window.localStorage){let i=window.localStorage.getItem(me);if(i)try{let d=JSON.parse(i),c={...r,...d};p(c);let f=N({scores:s.scores,scoreOverrides:c.scoreOverrides});m.rawUpdate(f)}catch(d){window.localStorage.removeItem(me),console.error("Failed to parse settings from localStorage: ",d.message)}}},[]);let{actions:m,saveSettings:u}=x.useMemo(()=>({actions:{update:c=>o.update(c),forget:()=>o.forget(!1),rawUpdate:c=>o.storage.updateData(c)},saveSettings:async c=>{p(c),window.localStorage&&window.localStorage.setItem("embeddedUniformDevToolsSettings",JSON.stringify(c))}}),[o]);return n?e(tt,{state:s,actions:m,settings:l,saveSettings:u}):e("p",null,"Unable to find Uniform Context. Ensure the devtools plugin is activated.")}import{css as uo}from"@emotion/react";import*as z from"react";import{Theme as go}from"@uniformdev/design-system";import{css as po}from"@emotion/react";var mo=po`
459
459
  align-items: center;
460
460
  border-radius: var(--rounded-full);
461
461
  background: var(--brand-secondary-5);
@@ -481,11 +481,11 @@ to {
481
481
  max-width: 100%;
482
482
  height: auto;
483
483
  }
484
- `,ot=({...t})=>e("button",{type:"button",css:mo,...t},e("span",{hidden:!0},"Uniform devtools"),e("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e("path",{d:"M13.325 3.05011L8.66741 20.4323L10.5993 20.9499L15.2568 3.56775L13.325 3.05011Z",fill:"currentColor"}),e("path",{d:"M7.61197 18.3608L8.97136 16.9124L8.97086 16.8933L3.87657 12.1121L8.66699 7.00798L7.20868 5.63928L1.04956 12.2017L7.61197 18.3608Z",fill:"currentColor"}),e("path",{d:"M16.388 18.3608L15.0286 16.9124L15.0291 16.8933L20.1234 12.1121L15.333 7.00798L16.7913 5.63928L22.9504 12.2017L16.388 18.3608Z",fill:"currentColor"})));function bi(t){var s;let[r,n]=rt.useState(!1);return((s=t.context)!=null?s:typeof window!="undefined"?window.__UNIFORM_DEVTOOLS_CONTEXT_INSTANCE__:void 0)?e("div",null,e(go,null),e(ne,null),e(ot,{onClick:()=>n(a=>!a)}),r?e("div",{css:uo`
484
+ `,rt=({...t})=>e("button",{type:"button",css:mo,...t},e("span",{hidden:!0},"Uniform devtools"),e("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e("path",{d:"M13.325 3.05011L8.66741 20.4323L10.5993 20.9499L15.2568 3.56775L13.325 3.05011Z",fill:"currentColor"}),e("path",{d:"M7.61197 18.3608L8.97136 16.9124L8.97086 16.8933L3.87657 12.1121L8.66699 7.00798L7.20868 5.63928L1.04956 12.2017L7.61197 18.3608Z",fill:"currentColor"}),e("path",{d:"M16.388 18.3608L15.0286 16.9124L15.0291 16.8933L20.1234 12.1121L15.333 7.00798L16.7913 5.63928L22.9504 12.2017L16.388 18.3608Z",fill:"currentColor"})));function bi(t){let[r,n]=z.useState(!1),[o,s]=z.useState(t.context);return z.useEffect(()=>{!t.context&&typeof document!="undefined"&&s(window.__UNIFORM_DEVTOOLS_CONTEXT_INSTANCE__)},[t.context]),o?e("div",null,e(go,null),e(ie,null),e(rt,{onClick:()=>n(a=>!a)}),r?e("div",{css:uo`
485
485
  box-shadow: var(--shadow-base);
486
486
  position: fixed;
487
487
  bottom: 82px;
488
488
  right: var(--spacing-base);
489
489
  z-index: var(--z-10);
490
490
  max-width: var(--site-width);
491
- `},e(tt,{...t})):null):e("p",null,"Unable to find Uniform Context. Ensure the devtools plugin is activated.")}export{et as ContextDevTools,tt as EmbeddedContextDevTools,bi as ToggleEmbeddedContextDevTools};
491
+ `},e(ot,{...t})):null):e("p",null,"Unable to find Uniform Context. Ensure the devtools plugin is activated.")}export{tt as ContextDevTools,ot as EmbeddedContextDevTools,bi as ToggleEmbeddedContextDevTools};
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- var Ht=Object.create;var $=Object.defineProperty;var Mt=Object.getOwnPropertyDescriptor;var At=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,Bt=Object.prototype.hasOwnProperty;var Qt=(t,r)=>{for(var n in r)$(t,n,{get:r[n],enumerable:!0})},He=(t,r,n,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of At(r))!Bt.call(t,i)&&i!==n&&$(t,i,{get:()=>r[i],enumerable:!(o=Mt(r,i))||o.enumerable});return t};var x=(t,r,n)=>(n=t!=null?Ht(Et(t)):{},He(r||!t||!t.__esModule?$(n,"default",{value:t,enumerable:!0}):n,t)),Ft=t=>He($({},"__esModule",{value:!0}),t);var io={};Qt(io,{ContextDevTools:()=>Re,EmbeddedContextDevTools:()=>Ie,ToggleEmbeddedContextDevTools:()=>no});module.exports=Ft(io);var e=require("@emotion/react"),b=x(require("react"));var S=require("@emotion/react");var K=require("react"),Me=(0,K.createContext)({settings:{},saveSettings:()=>{}}),W=()=>(0,K.useContext)(Me),Ae=({children:t,settings:r,saveSettings:n})=>(0,e.jsx)(Me.Provider,{value:{settings:r,saveSettings:n}},t);var qt=({route:t,children:r,className:n})=>{let{settings:o,saveSettings:i}=W();return(0,e.jsx)("a",{href:"",className:n,onClick:a=>{a.preventDefault(),i({...o,route:t})}},r)},F=qt;var Nt=[{title:"Dimensions",href:"/dimensions",icon:`<svg
1
+ var Ht=Object.create;var K=Object.defineProperty;var Mt=Object.getOwnPropertyDescriptor;var At=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,Bt=Object.prototype.hasOwnProperty;var Qt=(t,r)=>{for(var n in r)K(t,n,{get:r[n],enumerable:!0})},Me=(t,r,n,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of At(r))!Bt.call(t,i)&&i!==n&&K(t,i,{get:()=>r[i],enumerable:!(o=Mt(r,i))||o.enumerable});return t};var x=(t,r,n)=>(n=t!=null?Ht(Et(t)):{},Me(r||!t||!t.__esModule?K(n,"default",{value:t,enumerable:!0}):n,t)),Ft=t=>Me(K({},"__esModule",{value:!0}),t);var io={};Qt(io,{ContextDevTools:()=>Ve,EmbeddedContextDevTools:()=>Pe,ToggleEmbeddedContextDevTools:()=>no});module.exports=Ft(io);var e=require("@emotion/react"),b=x(require("react"));var S=require("@emotion/react");var W=require("react"),Ae=(0,W.createContext)({settings:{},saveSettings:()=>{}}),Y=()=>(0,W.useContext)(Ae),Ee=({children:t,settings:r,saveSettings:n})=>(0,e.jsx)(Ae.Provider,{value:{settings:r,saveSettings:n}},t);var qt=({route:t,children:r,className:n})=>{let{settings:o,saveSettings:i}=Y();return(0,e.jsx)("a",{href:"",className:n,onClick:a=>{a.preventDefault(),i({...o,route:t})}},r)},F=qt;var Nt=[{title:"Dimensions",href:"/dimensions",icon:`<svg
2
2
  width="24"
3
3
  height="24"
4
4
  viewBox="0 0 24 24"
@@ -40,7 +40,7 @@ var Ht=Object.create;var $=Object.defineProperty;var Mt=Object.getOwnPropertyDes
40
40
  <g>
41
41
  <path d="M84.55,116.66c2.49,0,4.53-1.99,4.53-4.41V88.08c1.55-13.03,7.27-9.16,14-5.13 c16.27,9.74,27.08-15.88,13.93-23.78c-10.32-6.2-14.79,4.46-22.35,3.36c-2.92-0.43-4.95-3.5-5.59-8.17V36.9 c0-2.43-2.04-4.41-4.53-4.41H63.73c-17.18-2.12-1.93-11.37-1.93-19.98C61.81,5.6,55.38,0,47.45,0c-7.92,0-15.19,5.6-15.19,12.51 c0,8.12,15.78,17.86-1.64,19.98H4.53C2.04,32.49,0,34.47,0,36.9v17.42c1.33,7.43,6.49,9.15,13.1,4.25 c2.23-1.66,5.99-3.59,8.71-3.59c7.09,0,12.85,6.25,12.85,13.96S28.91,84.6,21.81,84.6c-2.53,0-4.89-0.8-6.89-2.19 c0,0.59-12.4-10.85-14.92,3.15v26.71c0,2.43,2.04,4.41,4.53,4.41c13.97,0,27.92,0,41.88-0.01c0.55-2.55-1.24-5.47-2.92-8 c-13.22-19.93,38.21-21.92,24.99,0.62c-0.65,1.11-1.3,2.19-1.8,3.24c-0.63,1.31-1.05,2.91-0.96,4.14L84.55,116.66L84.55,116.66z"></path>
42
42
  </g>
43
- </svg>`,Ee=({...t})=>{var o,i;let r=a=>{var p;let l="active";return!((p=t.settings)!=null&&p.route)&&a==="/dimensions"||t.settings.route===a?l:""},n=Boolean(typeof window!="undefined"&&((i=(o=window.chrome)==null?void 0:o.runtime)==null?void 0:i.id));return(0,e.jsx)("nav",{css:S.css`
43
+ </svg>`,Be=({...t})=>{var o,i;let r=a=>{var p;let l="active";return!((p=t.settings)!=null&&p.route)&&a==="/dimensions"||t.settings.route===a?l:""},n=Boolean(typeof window!="undefined"&&((i=(o=window.chrome)==null?void 0:o.runtime)==null?void 0:i.id));return(0,e.jsx)("nav",{css:S.css`
44
44
  background: var(--brand-secondary-1);
45
45
  padding: var(--spacing-base);
46
46
  min-width: 200px;
@@ -109,7 +109,7 @@ var Ht=Object.create;var $=Object.defineProperty;var Mt=Object.getOwnPropertyDes
109
109
  `,rel:"noreferrer"},(0,e.jsx)("i",{css:S.css`
110
110
  align-items: center;
111
111
  display: flex;
112
- `,dangerouslySetInnerHTML:{__html:Zt}}),"Install Chrome Extension"))};var Be=()=>(0,e.jsx)("article",null,(0,e.jsx)("h1",null,"Something when wrong"),(0,e.jsx)("p",null,"We could not find the page you're looking for."));var ce=x(require("react"));var H=require("@emotion/react"),Y=x(require("react")),Qe=(0,H.css)({willChange:"height"}),zt=H.css`
112
+ `,dangerouslySetInnerHTML:{__html:Zt}}),"Install Chrome Extension"))};var Qe=()=>(0,e.jsx)("article",null,(0,e.jsx)("h1",null,"Something when wrong"),(0,e.jsx)("p",null,"We could not find the page you're looking for."));var de=x(require("react"));var H=require("@emotion/react"),J=x(require("react")),Fe=(0,H.css)({willChange:"height"}),zt=H.css`
113
113
  border-bottom: 2px solid var(--brand-secondary-1);
114
114
  font-size: var(--fs-base);
115
115
  margin: 0;
@@ -127,9 +127,9 @@ var Ht=Object.create;var $=Object.defineProperty;var Mt=Object.getOwnPropertyDes
127
127
  align-self: center;
128
128
  `,Gt=H.css`
129
129
  transform: rotate(-180deg);
130
- `,J=({children:t})=>(0,e.jsx)("div",{css:[Qe]},t),X=({title:t,children:r})=>{let[n,o]=Y.useState(!1),i=t.split(" ").join("-").toLocaleLowerCase();return(0,e.jsx)(Y.Fragment,null,(0,e.jsx)("h3",{css:zt},(0,e.jsx)("button",{"aria-expanded":n,css:Ut,title:t,id:i,"aria-controls":`${i}-section`,onClick:()=>o(a=>!a),type:"button"},t,(0,e.jsx)("i",{css:[_t,n?Gt:void 0]},(0,e.jsx)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.jsx)("path",{d:"M6.34317 7.75732L4.92896 9.17154L12 16.2426L19.0711 9.17157L17.6569 7.75735L12 13.4142L6.34317 7.75732Z",fill:"currentColor"}))))),(0,e.jsx)("div",{id:`${i}-section`,css:[Qe,H.css`
130
+ `,X=({children:t})=>(0,e.jsx)("div",{css:[Fe]},t),j=({title:t,children:r})=>{let[n,o]=J.useState(!1),i=t.split(" ").join("-").toLocaleLowerCase();return(0,e.jsx)(J.Fragment,null,(0,e.jsx)("h3",{css:zt},(0,e.jsx)("button",{"aria-expanded":n,css:Ut,title:t,id:i,"aria-controls":`${i}-section`,onClick:()=>o(a=>!a),type:"button"},t,(0,e.jsx)("i",{css:[_t,n?Gt:void 0]},(0,e.jsx)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.jsx)("path",{d:"M6.34317 7.75732L4.92896 9.17154L12 16.2426L19.0711 9.17157L17.6569 7.75735L12 13.4142L6.34317 7.75732Z",fill:"currentColor"}))))),(0,e.jsx)("div",{id:`${i}-section`,css:[Fe,H.css`
131
131
  padding: var(--spacing-sm) 0;
132
- `],role:"region","aria-labelledby":i},n?r:null))};var M=require("@emotion/react"),j=M.css`
132
+ `],role:"region","aria-labelledby":i},n?r:null))};var M=require("@emotion/react"),ee=M.css`
133
133
  background-color: var(--gray-100);
134
134
  padding: var(--spacing-base) var(--spacing-md);
135
135
  margin: var(--spacing-base) 0;
@@ -137,21 +137,21 @@ var Ht=Object.create;var $=Object.defineProperty;var Mt=Object.getOwnPropertyDes
137
137
  &:first-of-type {
138
138
  margin: 0 0 var(--spacing-base);
139
139
  }
140
- `,Fe=M.css`
140
+ `,qe=M.css`
141
141
  background: var(--gray-100)
142
142
  url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%0A%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M9 2C8.44771 2 8 2.44772 8 3V5C8 5.55228 8.44771 6 9 6C9.55229 6 10 5.55228 10 5V3C10 2.44772 9.55229 2 9 2ZM8 9H16V11C16 13.2091 14.2091 15 12 15C9.79086 15 8 13.2091 8 11V9ZM13 16.917C15.8377 16.441 18 13.973 18 11V7H6V11C6 13.973 8.16229 16.441 11 16.917V22C11 22.5523 11.4477 23 12 23C12.5523 23 13 22.5523 13 22V16.917ZM14 3C14 2.44772 14.4477 2 15 2C15.5523 2 16 2.44772 16 3V5C16 5.55228 15.5523 6 15 6C14.4477 6 14 5.55228 14 5V3Z' fill='%232ecdb4' /%3E%3C/svg%3E")
143
143
  no-repeat var(--spacing-sm) var(--spacing-base);
144
144
  padding: var(--spacing-base) var(--spacing-xl);
145
- `,ee=M.css`
145
+ `,te=M.css`
146
146
  color: var(--brand-secondary-1);
147
147
  margin: 0;
148
148
  font-size: var(--fs-base);
149
149
  font-weight: var(--fw-bold);
150
- `,te=M.css`
150
+ `,oe=M.css`
151
151
  color: var(--brand-secondary-1);
152
152
  margin: var(--spacing-xs) 0 0;
153
153
  font-size: var(--fs-sm);
154
- `,qe=M.css`
154
+ `,Ne=M.css`
155
155
  align-items: center;
156
156
  border: none;
157
157
  background: transparent
@@ -171,11 +171,11 @@ var Ht=Object.create;var $=Object.defineProperty;var Mt=Object.getOwnPropertyDes
171
171
  &:hover {
172
172
  opacity: 0.6;
173
173
  }
174
- `,oe=M.css`
174
+ `,re=M.css`
175
175
  display: flex;
176
176
  margin: var(--spacing-sm) 0 0;
177
177
  gap: var(--spacing-base);
178
- `;var q=({title:t,text:r,buttonGroup:n,children:o})=>(0,e.jsx)("div",{css:j},(0,e.jsx)("h2",{css:ee},t),(0,e.jsx)("p",{css:te},r),o,n?(0,e.jsx)("div",{css:oe},n):null);var k=require("@emotion/react"),$t=k.keyframes`from {
178
+ `;var q=({title:t,text:r,buttonGroup:n,children:o})=>(0,e.jsx)("div",{css:ee},(0,e.jsx)("h2",{css:te},t),(0,e.jsx)("p",{css:oe},r),o,n?(0,e.jsx)("div",{css:re},n):null);var k=require("@emotion/react"),$t=k.keyframes`from {
179
179
  transform: scale(1);
180
180
  }
181
181
  to {
@@ -231,23 +231,23 @@ to {
231
231
  input {
232
232
  padding: var(--spacing-sm);
233
233
  }
234
- `};var L=require("@emotion/react"),re=({children:t})=>(0,e.jsx)("table",{css:L.css`
234
+ `};var L=require("@emotion/react"),ne=({children:t})=>(0,e.jsx)("table",{css:L.css`
235
235
  border-collapse: collapse;
236
236
  display: table;
237
237
  width: 100%;
238
238
  font-size: var(--fs-sm);
239
- `},t),Ne=({children:t})=>(0,e.jsx)("thead",{css:L.css`
239
+ `},t),Ze=({children:t})=>(0,e.jsx)("thead",{css:L.css`
240
240
  background: var(--gray-50);
241
241
  text-align: left;
242
242
  & tr {
243
243
  border-bottom: 1px solid var(--gray-200);
244
244
  }
245
- `},t),ne=({children:t})=>(0,e.jsx)("tbody",null,t),z=({border:t,children:r})=>(0,e.jsx)("tr",{css:t?L.css`
245
+ `},t),ie=({children:t})=>(0,e.jsx)("tbody",null,t),z=({border:t,children:r})=>(0,e.jsx)("tr",{css:t?L.css`
246
246
  border-bottom: 1px solid var(--gray-200);
247
247
  &:where(:last-child) {
248
248
  border: none;
249
249
  }
250
- `:void 0},r),ie=({children:t,width:r})=>(0,e.jsx)("th",{css:L.css`
250
+ `:void 0},r),se=({children:t,width:r})=>(0,e.jsx)("th",{css:L.css`
251
251
  outline: none;
252
252
  padding: var(--spacing-sm);
253
253
  width: ${r!=null?r:"auto"};
@@ -264,14 +264,14 @@ to {
264
264
  position: relative;
265
265
  `,Kt(n),Wt(t),r?L.css`
266
266
  border-left: 1px solid var(--gray-200);
267
- `:void 0]},o);var se=require("@emotion/react"),Ze=se.css`
267
+ `:void 0]},o);var ae=require("@emotion/react"),ze=ae.css`
268
268
  position: relative;
269
269
  display: inline-block;
270
270
  font-size: var(--fs-base);
271
- `,ze=se.css`
271
+ `,Ue=ae.css`
272
272
  display: block;
273
273
  text-decoration: line-through;
274
- `,Ue=se.css`
274
+ `,_e=ae.css`
275
275
  position: absolute;
276
276
  width: 6px;
277
277
  height: 6px;
@@ -279,7 +279,7 @@ to {
279
279
  top: 9px;
280
280
  background: var(--red-tooltip);
281
281
  border-radius: 3px;
282
- `;var Ge=require("@emotion/react"),Yt=`<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
282
+ `;var $e=require("@emotion/react"),Yt=`<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
283
283
  <path d="M4.2 7.2C4.53137 7.2 4.8 6.93137 4.8 6.6C4.8 6.26863 4.53137 6 4.2 6C3.86863 6 3.6 6.26863 3.6 6.6C3.6 6.93137 3.86863 7.2 4.2 7.2Z" fill="#828282"/>
284
284
  <path d="M8.4 6.6C8.4 6.93137 8.13137 7.2 7.8 7.2C7.46863 7.2 7.2 6.93137 7.2 6.6C7.2 6.26863 7.46863 6 7.8 6C8.13137 6 8.4 6.26863 8.4 6.6Z" fill="#828282"/>
285
285
  <path fill-rule="evenodd" clip-rule="evenodd" d="M6 12C9.31371 12 12 9.31371 12 6C12 2.68629 9.31371 0 6 0C2.68629 0 0 2.68629 0 6C0 9.31371 2.68629 12 6 12ZM6 10.8C8.65097 10.8 10.8 8.65097 10.8 6C10.8 5.49824 10.723 5.01447 10.5802 4.55984C10.0795 4.69533 9.55274 4.76763 9.00913 4.76763C6.77526 4.76763 4.82652 3.54683 3.79366 1.73601C2.25282 2.53492 1.2 4.14451 1.2 6C1.2 8.65097 3.34903 10.8 6 10.8Z" fill="#828282"/>
@@ -289,16 +289,16 @@ to {
289
289
  <path d="M11.9999 5.05762H8.3999V6.2576H11.9999V5.05762Z" fill="#828282"/>
290
290
  <path d="M8.3999 7.45752H11.9999V8.6575H8.3999V7.45752Z" fill="#828282"/>
291
291
  <path d="M11.9999 2.65771H8.3999V3.8577H11.9999V2.65771Z" fill="#828282"/>
292
- </svg>`,_e=`<svg width="15" height="11" viewBox="0 0 15 11" fill="none" xmlns="http://www.w3.org/2000/svg">
292
+ </svg>`,Ge=`<svg width="15" height="11" viewBox="0 0 15 11" fill="none" xmlns="http://www.w3.org/2000/svg">
293
293
  <path fill-rule="evenodd" clip-rule="evenodd" d="M7.113 3.12646C8.16729 3.12646 9.02195 3.98113 9.02195 5.03541C9.02195 5.86658 8.49075 6.57368 7.74932 6.83573V10.1259H6.47669V6.83573C5.73526 6.57368 5.20405 5.86658 5.20405 5.03541C5.20405 3.98113 6.05872 3.12646 7.113 3.12646ZM7.113 4.39909C7.46443 4.39909 7.74932 4.68398 7.74932 5.03541C7.74932 5.38684 7.46443 5.67172 7.113 5.67172C6.76158 5.67172 6.47669 5.38684 6.47669 5.03541C6.47669 4.68398 6.76158 4.39909 7.113 4.39909Z" fill="#828282"/>
294
294
  <path d="M3.96336 1.88578C3.15733 2.69183 2.65879 3.80537 2.65879 5.03535C2.65879 6.42093 3.29145 7.65875 4.28366 8.47569L5.1895 7.56984C4.42501 6.98876 3.93142 6.06969 3.93142 5.03535C3.93142 4.1568 4.28752 3.36142 4.86325 2.78567L3.96336 1.88578Z" fill="#828282"/>
295
295
  <path d="M9.36269 2.7856C9.93846 3.36136 10.2946 4.15676 10.2946 5.03535C10.2946 6.06973 9.80096 6.98882 9.03643 7.5699L9.94228 8.47575C10.9345 7.65881 11.5672 6.42096 11.5672 5.03535C11.5672 3.80533 11.0687 2.69177 10.2626 1.88571L9.36269 2.7856Z" fill="#828282"/>
296
296
  <path d="M0.113525 5.03534C0.113525 3.10251 0.896953 1.35266 2.16359 0.0860049L3.06347 0.985892C2.02714 2.02224 1.38616 3.45394 1.38616 5.03534C1.38616 6.61674 2.02714 8.04844 3.06347 9.08479L2.16358 9.98468C0.89695 8.71802 0.113525 6.96817 0.113525 5.03534Z" fill="#828282"/>
297
297
  <path d="M12.0624 9.98474C13.329 8.71809 14.1125 6.96821 14.1125 5.03534C14.1125 3.10248 13.329 1.3526 12.0624 0.0859375L11.1625 0.985824C12.1988 2.02218 12.8398 3.4539 12.8398 5.03534C12.8398 6.61678 12.1988 8.0485 11.1625 9.08486L12.0624 9.98474Z" fill="#828282"/>
298
- </svg>`,$e=({type:t})=>{let r="";switch(t){case"Audience":r=Yt;break;case"Signal":r=_e;break;case"Intent":r=_e;break;case"Enrichment":r=Jt;break}return(0,e.jsx)("i",{css:Ge.css`
298
+ </svg>`,Ke=({type:t})=>{let r="";switch(t){case"Audience":r=Yt;break;case"Signal":r=Ge;break;case"Intent":r=Ge;break;case"Enrichment":r=Jt;break}return(0,e.jsx)("i",{css:$e.css`
299
299
  align-items: center;
300
300
  display: inline-block;
301
- `,dangerouslySetInnerHTML:{__html:r}})};var Xt=({dimensionIndex:t,dimensions:r,disableEditOverride:n,onClick:o,preemptiveOverrides:i})=>{var p;let{settings:a}=W(),l=(p=i!=null?i:a.scoreOverrides)!=null?p:{};return(0,e.jsx)(re,null,(0,e.jsx)(ne,null,Object.entries(r).sort(([m],[u])=>m.localeCompare(u)).map(([m,u])=>{var y;let{dim:s,name:d,type:c,category:v}=(y=t[m])!=null?y:{name:m,dim:m,type:void 0,category:void 0},f=l[s];return(0,e.jsx)(z,{key:s},(0,e.jsx)(V,null,f!==void 0?(0,e.jsx)("s",{css:ze},f.initial):null,(0,e.jsx)("b",{css:Ze},u,f!==void 0&&(0,e.jsx)("i",{css:Ue}))),(0,e.jsx)(V,null,(0,e.jsx)("div",{onClick:()=>o==null?void 0:o(s),css:o?{cursor:"pointer"}:void 0},(0,e.jsx)("span",{css:h.divider,role:"presentation"}),(0,e.jsx)("div",null,(0,e.jsx)($e,{type:c})," ",c),(0,e.jsx)("strong",null,v?`${v}:`:""," ",d))),(0,e.jsx)(V,{alignment:"right",color:"light"},f!==void 0&&!n?(0,e.jsx)(F,{route:`/overrides/${s}`},"Edit override"):null))})))},A=Xt;async function ae({actions:t,saveSettings:r,scores:n,settings:o}){var p,m;let i=(p=o.scoreOverrides)!=null?p:{},a={...i},l=[];for(let u of Object.keys(i)){let s=i==null?void 0:i[u];delete a[u],l.push({type:"modscoreS",data:{dimension:u,delta:s.initial-((m=n[u])!=null?m:0)}})}await r({...o,scoreOverrides:a}),await t.rawUpdate(l)}async function Ke({quirk:t,settings:r,saveSettings:n,actions:o}){var l;let i=(l=r.quirkOverrides)==null?void 0:l[t];if(!i)return;let a={...r.quirkOverrides};delete a[t],await n({...r,quirkOverrides:a}),await o.rawUpdate([{type:"setquirk",data:{key:t,value:i.initial}}])}var Ce=require("@uniformdev/design-system"),We=require("@uniformdev/design-system"),Ye=({dimensionIndex:{index:t},state:{scores:r,data:n},actions:o,saveSettings:i,settings:a})=>{let l=ce.useMemo(()=>{let s={};return Object.keys(t).filter(d=>!r[d]).map(d=>{s[t[d].dim]=0}),s},[r,t]),p=Object.keys(r).length,m=p+Object.keys(l).length,u=()=>{o.rawUpdate([{type:"setcontrol",data:!n.controlGroup}])};return(0,e.jsx)(ce.Fragment,null,(0,e.jsx)("article",{css:h.page},(0,e.jsx)("div",{css:h.headingGroup},(0,e.jsx)("h2",{css:h.title},"Dimensions",(0,e.jsx)("small",null,p," active of ",m)),(0,e.jsx)("div",{css:h.reset},(0,e.jsx)(Ce.Button,{buttonType:"ghost",onClick:()=>ae({actions:o,saveSettings:i,scores:r,settings:a}).then(o.forget)},"clear all dimensions")),(0,e.jsx)(We.Switch,{name:"controlGroup",label:"Control Group",onChange:u,checked:n.controlGroup})),p>0?(0,e.jsx)(A,{dimensionIndex:t,dimensions:r}):(0,e.jsx)(q,{title:n.controlGroup?"In control group":"No active dimensions",text:n.controlGroup?"You are part of the personalization control group. While in the control group you do not have dimension scores and will not see personalized content. A/B tests will still run.":"You do not have score in any dimensions yet.",buttonGroup:n.controlGroup?(0,e.jsx)(Ce.Button,{buttonType:"secondary",onClick:u},"Exit control group"):null}),(0,e.jsx)(J,null,(0,e.jsx)(X,{title:`Inactive Dimensions (${Object.keys(l).length})`},(0,e.jsx)(A,{dimensionIndex:t,dimensions:l})))))};var Je=x(require("react"));var Xe=require("@uniformdev/design-system");var we=require("@uniformdev/design-system"),je=({dimensionIndex:{index:t},state:{data:r,scores:n},actions:o,settings:i,saveSettings:a})=>{var d;let l=(d=i.scoreOverrides)!=null?d:{},p=Object.keys(l).length,m=c=>(c==null||c.preventDefault(),a({...i,route:"/overrides/add"})),u=()=>{o.rawUpdate([{type:"setcontrol",data:!r.controlGroup}])},s={};return Object.entries(n).map(([c,v])=>{l[c]!==void 0&&(s[c]=v)}),(0,e.jsx)(Je.Fragment,null,(0,e.jsx)("article",{css:h.page},(0,e.jsx)("div",{css:h.headingGroup},(0,e.jsx)("h2",{css:h.title},"What if?"),(0,e.jsx)("div",{css:h.reset},(0,e.jsx)(we.Button,{buttonType:"ghost",onClick:()=>ae({actions:o,settings:i,saveSettings:a,scores:n})},"delete all overrides")),(0,e.jsx)(Xe.AddButton,{onClick:m})),(0,e.jsx)("p",null,"Override dimension scores to test personalization"),p>0?(0,e.jsx)(A,{dimensionIndex:t,dimensions:s,onClick:c=>a({...i,route:`/overrides/${c}`})}):(0,e.jsx)(q,{title:r.controlGroup?"In control group":"No overrides",text:r.controlGroup?"You are part of the personalization control group. While in the control group you do not have dimension scores and will not see personalized content. A/B tests will still run.":"You do not have any dimension overrides yet.",buttonGroup:r.controlGroup?(0,e.jsx)(we.Button,{buttonType:"secondary",onClick:u},"Exit control group"):null})))};var B=require("formik");var N=x(require("yup"));var I=require("@emotion/react"),et=I.css`
301
+ `,dangerouslySetInnerHTML:{__html:r}})};var Xt=({dimensionIndex:t,dimensions:r,disableEditOverride:n,onClick:o,preemptiveOverrides:i})=>{var p;let{settings:a}=Y(),l=(p=i!=null?i:a.scoreOverrides)!=null?p:{};return(0,e.jsx)(ne,null,(0,e.jsx)(ie,null,Object.entries(r).sort(([m],[u])=>m.localeCompare(u)).map(([m,u])=>{var y;let{dim:s,name:d,type:c,category:v}=(y=t[m])!=null?y:{name:m,dim:m,type:void 0,category:void 0},f=l[s];return(0,e.jsx)(z,{key:s},(0,e.jsx)(V,null,f!==void 0?(0,e.jsx)("s",{css:Ue},f.initial):null,(0,e.jsx)("b",{css:ze},u,f!==void 0&&(0,e.jsx)("i",{css:_e}))),(0,e.jsx)(V,null,(0,e.jsx)("div",{onClick:()=>o==null?void 0:o(s),css:o?{cursor:"pointer"}:void 0},(0,e.jsx)("span",{css:h.divider,role:"presentation"}),(0,e.jsx)("div",null,(0,e.jsx)(Ke,{type:c})," ",c),(0,e.jsx)("strong",null,v?`${v}:`:""," ",d))),(0,e.jsx)(V,{alignment:"right",color:"light"},f!==void 0&&!n?(0,e.jsx)(F,{route:`/overrides/${s}`},"Edit override"):null))})))},A=Xt;async function ce({actions:t,saveSettings:r,scores:n,settings:o}){var p,m;let i=(p=o.scoreOverrides)!=null?p:{},a={...i},l=[];for(let u of Object.keys(i)){let s=i==null?void 0:i[u];delete a[u],l.push({type:"modscoreS",data:{dimension:u,delta:s.initial-((m=n[u])!=null?m:0)}})}await r({...o,scoreOverrides:a}),await t.rawUpdate(l)}async function We({quirk:t,settings:r,saveSettings:n,actions:o}){var l;let i=(l=r.quirkOverrides)==null?void 0:l[t];if(!i)return;let a={...r.quirkOverrides};delete a[t],await n({...r,quirkOverrides:a}),await o.rawUpdate([{type:"setquirk",data:{key:t,value:i.initial}}])}var we=require("@uniformdev/design-system"),Ye=require("@uniformdev/design-system"),Je=({dimensionIndex:{index:t},state:{scores:r,data:n},actions:o,saveSettings:i,settings:a})=>{let l=de.useMemo(()=>{let s={};return Object.keys(t).filter(d=>!r[d]).map(d=>{s[t[d].dim]=0}),s},[r,t]),p=Object.keys(r).length,m=p+Object.keys(l).length,u=()=>{o.rawUpdate([{type:"setcontrol",data:!n.controlGroup}])};return(0,e.jsx)(de.Fragment,null,(0,e.jsx)("article",{css:h.page},(0,e.jsx)("div",{css:h.headingGroup},(0,e.jsx)("h2",{css:h.title},"Dimensions",(0,e.jsx)("small",null,p," active of ",m)),(0,e.jsx)("div",{css:h.reset},(0,e.jsx)(we.Button,{buttonType:"ghost",onClick:()=>ce({actions:o,saveSettings:i,scores:r,settings:a}).then(o.forget)},"clear all dimensions")),(0,e.jsx)(Ye.Switch,{name:"controlGroup",label:"Control Group",onChange:u,checked:n.controlGroup})),p>0?(0,e.jsx)(A,{dimensionIndex:t,dimensions:r}):(0,e.jsx)(q,{title:n.controlGroup?"In control group":"No active dimensions",text:n.controlGroup?"You are part of the personalization control group. While in the control group you do not have dimension scores and will not see personalized content. A/B tests will still run.":"You do not have score in any dimensions yet.",buttonGroup:n.controlGroup?(0,e.jsx)(we.Button,{buttonType:"secondary",onClick:u},"Exit control group"):null}),(0,e.jsx)(X,null,(0,e.jsx)(j,{title:`Inactive Dimensions (${Object.keys(l).length})`},(0,e.jsx)(A,{dimensionIndex:t,dimensions:l})))))};var Xe=x(require("react"));var je=require("@uniformdev/design-system");var ke=require("@uniformdev/design-system"),et=({dimensionIndex:{index:t},state:{data:r,scores:n},actions:o,settings:i,saveSettings:a})=>{var d;let l=(d=i.scoreOverrides)!=null?d:{},p=Object.keys(l).length,m=c=>(c==null||c.preventDefault(),a({...i,route:"/overrides/add"})),u=()=>{o.rawUpdate([{type:"setcontrol",data:!r.controlGroup}])},s={};return Object.entries(n).map(([c,v])=>{l[c]!==void 0&&(s[c]=v)}),(0,e.jsx)(Xe.Fragment,null,(0,e.jsx)("article",{css:h.page},(0,e.jsx)("div",{css:h.headingGroup},(0,e.jsx)("h2",{css:h.title},"What if?"),(0,e.jsx)("div",{css:h.reset},(0,e.jsx)(ke.Button,{buttonType:"ghost",onClick:()=>ce({actions:o,settings:i,saveSettings:a,scores:n})},"delete all overrides")),(0,e.jsx)(je.AddButton,{onClick:m})),(0,e.jsx)("p",null,"Override dimension scores to test personalization"),p>0?(0,e.jsx)(A,{dimensionIndex:t,dimensions:s,onClick:c=>a({...i,route:`/overrides/${c}`})}):(0,e.jsx)(q,{title:r.controlGroup?"In control group":"No overrides",text:r.controlGroup?"You are part of the personalization control group. While in the control group you do not have dimension scores and will not see personalized content. A/B tests will still run.":"You do not have any dimension overrides yet.",buttonGroup:r.controlGroup?(0,e.jsx)(ke.Button,{buttonType:"secondary",onClick:u},"Exit control group"):null})))};var B=require("formik");var N=x(require("yup"));var I=require("@emotion/react"),tt=I.css`
302
302
  background: var(--white);
303
303
  border: 1px solid var(--gray-500);
304
304
  border-radius: var(--rounded-base);
@@ -311,12 +311,12 @@ to {
311
311
  }
312
312
  `,zo=I.css`
313
313
  margin: var(--spacing-base) 0;
314
- `,tt=I.css`
314
+ `,ot=I.css`
315
315
  color: var(--brand-secondary-1);
316
316
  display: flex;
317
317
  flex-direction: column;
318
318
  margin: 0 0 var(--spacing-sm);
319
- `,ot=I.css`
319
+ `,rt=I.css`
320
320
  color: var(--brand-secondary-1);
321
321
  display: block;
322
322
  flex: 1 100%;
@@ -328,7 +328,7 @@ to {
328
328
  `,_o=I.css`
329
329
  color: var(--brand-secondary-5);
330
330
  display: block;
331
- `,rt=I.css`
331
+ `,nt=I.css`
332
332
  flex-direction: row;
333
333
  flex-wrap: wrap;
334
334
 
@@ -396,18 +396,18 @@ to {
396
396
  flex: 1 0 20%;
397
397
  padding: 10px;
398
398
  }
399
- `;var de=require("@uniformdev/design-system"),nt=({field:t,form:r,meta:n,...o})=>{var u,s;let{label:i,caption:a,min:l=0,max:p=100,step:m}=o;return(0,e.jsx)("div",null,(0,e.jsx)("label",{css:[tt,rt]},(0,e.jsx)("span",{css:ot},i),(0,e.jsx)("input",{type:"range",min:l,max:p,step:m,...t,value:(u=t.value)!=null?u:0}),(0,e.jsx)("span",{className:"value-display"},(s=t.value)!=null?s:0)),a?(0,e.jsx)(de.Caption,null,a):null,r.touched[t.name]&&r.errors[t.name]?(0,e.jsx)(de.ErrorMessage,{message:r.errors[t.name]}):null)};var it=require("@emotion/react"),E=({children:t,...r})=>(0,e.jsx)("fieldset",{css:it.css`
399
+ `;var le=require("@uniformdev/design-system"),it=({field:t,form:r,meta:n,...o})=>{var u,s;let{label:i,caption:a,min:l=0,max:p=100,step:m}=o;return(0,e.jsx)("div",null,(0,e.jsx)("label",{css:[ot,nt]},(0,e.jsx)("span",{css:rt},i),(0,e.jsx)("input",{type:"range",min:l,max:p,step:m,...t,value:(u=t.value)!=null?u:0}),(0,e.jsx)("span",{className:"value-display"},(s=t.value)!=null?s:0)),a?(0,e.jsx)(le.Caption,null,a):null,r.touched[t.name]&&r.errors[t.name]?(0,e.jsx)(le.ErrorMessage,{message:r.errors[t.name]}):null)};var st=require("@emotion/react"),E=({children:t,...r})=>(0,e.jsx)("fieldset",{css:st.css`
400
400
  border: none;
401
401
  padding: 0;
402
402
  & legend {
403
403
  margin-bottom: var(--spacing-base);
404
404
  }
405
- `,...r},t);var st=require("@emotion/react"),U=({children:t})=>(0,e.jsx)("legend",{css:st.css`
405
+ `,...r},t);var at=require("@emotion/react"),U=({children:t})=>(0,e.jsx)("legend",{css:at.css`
406
406
  font-size: var(--fs-md);
407
407
  font-weight: var(--fw-bold);
408
408
  border-bottom: 1px solid var(--gray-400);
409
409
  width: 100%;
410
- `},t);var le=require("@uniformdev/context");function at({manifest:t,visitor:r,override:n}){let o=new le.Context({manifest:t,transitionStore:new ke({initialData:r})}),i={...o.scores};o.storage.updateData([n]);let l={...{...o.scores}};return Object.entries(l).forEach(([p,m])=>{i[p]===m&&delete l[p]}),l}var ke=class extends le.TransitionDataStore{async handleDelete(){}async handleUpdateData(){}};function _({scores:t,scoreOverrides:r}){let n=[];return r?(Object.entries(r).forEach(([o,i])=>{var p;let a=(p=t[o])!=null?p:0;if(a===i.override)return;let l=i.override-a;n.push({type:"modscoreS",data:{dimension:o,delta:l}})}),n):[]}function pe({quirks:t,quirkOverrides:r}){let n={};if(!!r)return Object.entries(r).forEach(([o,i])=>{t[o]!==i.override&&(n[o]=i.override)}),Object.keys(n).length>0?n:void 0}var dt=require("@uniformdev/design-system");var Te=t=>({field:r,form:n,meta:o,...i})=>(0,e.jsx)(t,{...i,...r,errorMessage:n.errors[r.name]});var me=require("@uniformdev/design-system"),ue=Te(me.Input),ct=Te(me.InputSelect);var jt=N.object({dimension:N.string(),score:N.number()}),De=({settings:t,saveSettings:r,state:n,actions:o,dimensionIndex:{index:i}})=>{var m,u;let a=t.route?[...t.route.matchAll(/overrides\/(?!.*add)(\w+)?/g)]:[],l=a[0]?a[0][1]:"";if(!((m=n.manifest.project.pz)!=null&&m.sig))return(0,e.jsx)("p",null,"Error, manifest is broken or there is no signal to override.");let p=Object.entries(i).filter(([,s])=>s.type!=="Audience"&&s.type!=="Intent").map(([s,d])=>{let c=d.type?`${d.type}: `:"",v=d.category?`${d.category} - `:"",f=`${c}${v}${d.name}`;return{value:s,label:f}});return p.unshift({value:"",label:"Choose dimension to override"}),(0,e.jsx)(B.Formik,{initialValues:{dimension:l,score:(u=n.scores[l])!=null?u:0},validate:s=>{let d={};return(s.score===n.scores[s.dimension]||s.score===0&&!n.scores[l])&&(d.score="You have to modify current score value"),d},validationSchema:jt,enableReinitialize:!0,validateOnChange:!1,validateOnBlur:!1,onSubmit:async s=>{var y,C,w,D,Z,Pe;let d=(C=(y=i[s.dimension])==null?void 0:y.cap)!=null?C:0,c=Math.min(s.score,d),v={...t,scoreOverrides:{...t.scoreOverrides,[s.dimension]:{initial:(Pe=(Z=(D=(w=t.scoreOverrides)==null?void 0:w[s.dimension])==null?void 0:D.initial)!=null?Z:n.scores[s.dimension])!=null?Pe:0,override:c}},route:"/overrides"};await r(v);let f=_({scores:n.scores,scoreOverrides:v.scoreOverrides});o.rawUpdate(f)}},({isSubmitting:s,values:d})=>{var C;let c=at({manifest:n.manifest,visitor:n.data,override:{type:"modscore",data:{dimension:d.dimension,delta:d.score-((C=n.scores[d.dimension])!=null?C:0)}}}),v=Object.entries(n.scores).reduce((w,[D,Z])=>(w[D]={initial:Z,override:Z},w),{}),f={max:100,step:50};i[d.dimension]&&(f.max=i[d.dimension].cap,f.step=i[d.dimension].str);let y=d.score&&Object.keys(c).length>0;return(0,e.jsx)(B.Form,{css:h.page},(0,e.jsx)("h1",{css:h.title},"Override Dimension"),(0,e.jsx)(B.Field,{component:ct,label:"Dimension",id:"dimension",name:"dimension",options:p,disabled:s}),(0,e.jsx)("p",{css:h.text},(0,e.jsx)("small",null,"Audiences and Intents are aggregated from other dimension scores and cannot be overridden directly.")),d.dimension?(0,e.jsx)(B.Field,{component:nt,name:"score",label:"Score",disabled:s,caption:`Range: 0 - ${f.max} in increments of ${f.step}`}):null,(0,e.jsx)(E,{disabled:s,css:{marginBottom:"2rem"}},y?(0,e.jsx)(J,null,(0,e.jsx)(X,{title:`Impacted Dimensions (${Object.keys(c).length})`},(0,e.jsx)(A,{preemptiveOverrides:v,dimensionIndex:i,dimensions:c,disableEditOverride:!0}))):null,(0,e.jsx)(dt.Button,{type:"submit",css:h.submitButton,disabled:s},"Save"),(0,e.jsx)(F,{route:"/overrides",css:h.cancelButton},"Cancel")))})};var pt=require("react");var ge=require("react"),ve=require("@uniformdev/design-system");var eo=({name:t,value:r,submit:n})=>{let[o,i]=(0,ge.useState)(r!=null?r:"");return(0,ge.useEffect)(()=>{i(r!=null?r:"")},[r]),(0,e.jsx)("div",{css:{display:"flex",gap:"var(--spacing-sm)"}},(0,e.jsx)(ve.Input,{type:"text",css:[et],name:t,value:o,onChange:p=>{i(p.target.value)}}),(0,e.jsx)(ve.Button,{buttonType:"primary",disabled:o===r,size:"sm",onClick:()=>n(t,o!=null?o:"")},"Save"))},lt=eo;var G=require("@uniformdev/design-system"),mt=({...t})=>{let{state:{data:{quirks:r}},quirksIndex:{index:n},settings:o,saveSettings:i,actions:a}=t,[l,p]=(0,pt.useState)(""),m;l&&(m=n[l]);let u=async(s,d)=>{var f,y,C;p("");let c={...o,quirkOverrides:{...o.quirkOverrides,[s]:{initial:(C=(y=(f=o.quirkOverrides)==null?void 0:f[s])==null?void 0:y.initial)!=null?C:r[s],override:d}}};await i(c);let v=pe({quirks:r,quirkOverrides:c.quirkOverrides});await a.update({quirks:v})};return(0,e.jsx)(b.Fragment,null,(0,e.jsx)("article",{css:[h.page,h.quirks]},(0,e.jsx)("h1",{css:h.title},"Quirks"),(0,e.jsx)("p",{css:h.text},"Keys defined in Uniform and their current, programmatically defined values for this visit."),Object.keys(n).length?(0,e.jsx)(re,null,(0,e.jsx)(Ne,null,(0,e.jsx)(z,null,(0,e.jsx)(ie,{width:"30%"},"Key"),(0,e.jsx)(ie,{width:"50%"},"Value"),(0,e.jsx)(ie,{width:"20%"},""))),(0,e.jsx)(ne,null,Object.values(n).map(({name:s,value:d,id:c})=>{var y,C,w;let v=(C=(y=o.quirkOverrides)==null?void 0:y[s])==null?void 0:C.initial,f=[];return m&&m.options&&(f=m.options.map(D=>({value:D.value,label:D.name}))),(0,e.jsx)(z,{key:c,border:"bottom"},(0,e.jsx)(V,null,(0,e.jsx)("strong",null,s)),(0,e.jsx)(V,null,l!==c?(0,e.jsx)("div",{onClick:()=>{p(c)}},v?(0,e.jsx)("div",null,(0,e.jsx)("s",null,v)):null,d):null,l===c&&m&&(0,e.jsx)(b.Fragment,null,m.options?(0,e.jsx)(G.InputSelect,{showLabel:!1,label:`Change ${s}`,defaultOption:`Change ${s}`,name:c,onChange:D=>u(D.target.name,D.target.value),options:f}):(0,e.jsx)(lt,{name:c,value:d,submit:u}))),(0,e.jsx)(V,null,l?null:(w=o.quirkOverrides)!=null&&w[c]?(0,e.jsx)(G.Button,{buttonType:"ghost",onClick:()=>{Ke({quirk:c,settings:o,saveSettings:i,actions:a})}},(0,e.jsx)("small",null,"Clear Override")):(0,e.jsx)(G.Button,{buttonType:"ghost",onClick:()=>{p(c)}},(0,e.jsx)("small",null,"Override"))))}))):(0,e.jsx)(q,{title:"No quirks configured",text:"There are currently no quirks setup. Try to connect to Uniform API to load additional information about Quirks and Quirks without defined value."})))};var ut=require("@uniformdev/design-system"),Se=require("@uniformdev/design-system"),gt=({settings:t,saveSettings:r,actions:n,state:{data:o}})=>(0,e.jsx)("article",{css:[h.page,{display:"flex",flexDirection:"column",gap:"var(--spacing-base)"}]},(0,e.jsx)("h1",{css:h.title},"Settings"),(0,e.jsx)(E,null,(0,e.jsx)(U,null,"Data Connection"),(0,e.jsx)(ut.Button,{buttonType:"tertiary",onClick:()=>{r({...t,route:"/connect"})}},"Manage Connection to Uniform")),(0,e.jsx)(E,null,(0,e.jsx)(U,null,"Storage Consent"),(0,e.jsx)(Se.Switch,{label:"Store visitor data",id:"consent-mode",name:"consentMode",checked:o.consent,onChange:i=>{n.rawUpdate([{type:"consent",data:i.currentTarget.checked}]),r({...t,consentMode:i.currentTarget.checked})}}),(0,e.jsx)("p",null,(0,e.jsx)("small",null,"Enabling storage consent allows storing behavior in this browser for personalization across sessions. Only affects this browser. Personalization works with this disabled, but dimension scores are lost on refresh."))),(0,e.jsx)(E,null,(0,e.jsx)(U,null,"Logging"),(0,e.jsx)(Se.Switch,{label:"Write Uniform Context diagnostic logs to browser console",id:"logging",name:"logging",checked:t.logLevel==="debug",onChange:i=>r({...t,logLevel:i.currentTarget.checked?"debug":"none"})})));var Le=require("@uniformdev/design-system");var Oe=({settings:t,saveSettings:r})=>{let n=()=>{r({...t,route:"/connect"})},o=()=>{r({...t,ignoreApiKeyPrompt:!0})},i=t.route==="/connect",a=!(t!=null&&t.apiKey);return!t.ignoreApiKeyPrompt&&a&&!i?(0,e.jsx)("div",{css:[j,Fe]},(0,e.jsx)("h2",{css:ee},"Connect to a Uniform Project"),(0,e.jsx)("p",{css:te},"This allows reading human-readable labels for the dimensions."),(0,e.jsx)("div",{css:oe},(0,e.jsx)(Le.Button,{buttonType:"secondary",onClick:n},"Connect this site"),(0,e.jsx)(Le.Button,{buttonType:"ghost",onClick:o},"Skip for now")),(0,e.jsx)("button",{type:"button",css:qe,title:"close",onClick:o},(0,e.jsx)("span",{hidden:!0},"Close"))):null};var Q=require("@uniformdev/context/api"),vt=require("react-use"),ft=x(require("react"));function ht({apiHost:t,apiKey:r,projectId:n},o){let{loading:i,error:a,value:l}=(0,vt.useAsync)(async()=>{if(!r||!n)return p;let u=(await new Q.DimensionClient({projectId:n,apiKey:r,apiHost:t||void 0}).get()).dimensions,s={};return u.map(d=>{var c,v,f,y;if(s[d.dim]={...(0,Q.computeDimensionDefinitionDisplayData)(d),cap:d.cap,str:10},s[d.dim].type==="Enrichment"){let C=d.dim.split("_")[0];s[d.dim].cap=(y=(f=(v=(c=o==null?void 0:o.project.pz)==null?void 0:c.enr)==null?void 0:v[C])==null?void 0:f.cap)!=null?y:100}}),s},[t,r,n]),p=ft.useMemo(()=>{var u,s,d,c;let m={};return o&&(Object.entries((s=(u=o==null?void 0:o.project.pz)==null?void 0:u.sig)!=null?s:{}).map(([v,f])=>{let y=(0,Q.computeDimensionDisplayData)(v,o);y&&(m[v]={...f,...y})}),Object.entries((c=(d=o==null?void 0:o.project.pz)==null?void 0:d.enr)!=null?c:{}).map(([v,f])=>{var w;let y=(0,Q.computeDimensionDisplayData)(v,o),C={cap:(w=f.cap)!=null?w:100,str:10};y&&(m[v]={...y,cap:C.cap,str:C.str})}),l&&Object.entries(l).map(([v,f])=>{m[v]={...m[v],...f}})),m},[o,l]);return{loading:i,error:a,index:p}}var bt=require("react"),yt=require("@uniformdev/context/api"),Ct=require("react-use");function wt({apiHost:t,apiKey:r,projectId:n},o){let{loading:i,error:a,value:l}=(0,Ct.useAsync)(async()=>{if(!r||!n)return{};let u=await new yt.QuirkClient({projectId:n,apiKey:r,apiHost:t||void 0}).get(),s={};return u.quirks.map(d=>{s[d.id]={...d,value:o[d.id]}}),s},[t,r,n]),p=(0,bt.useMemo)(()=>{let m={};return Object.entries(o).map(([u,s])=>m[u]={value:s,id:u,name:u}),l&&Object.entries(l).map(([u,s])=>m[u]={...s,value:o[u]}),m},[o,l]);return{loading:i,error:a,index:p}}var xe=require("@emotion/react"),Ot=require("@uniformdev/design-system");function fe(){return(0,e.jsx)("style",null,`
410
+ `},t);var pe=require("@uniformdev/context");function ct({manifest:t,visitor:r,override:n}){let o=new pe.Context({manifest:t,transitionStore:new Te({initialData:r})}),i={...o.scores};o.storage.updateData([n]);let l={...{...o.scores}};return Object.entries(l).forEach(([p,m])=>{i[p]===m&&delete l[p]}),l}var Te=class extends pe.TransitionDataStore{async handleDelete(){}async handleUpdateData(){}};function _({scores:t,scoreOverrides:r}){let n=[];return r?(Object.entries(r).forEach(([o,i])=>{var p;let a=(p=t[o])!=null?p:0;if(a===i.override)return;let l=i.override-a;n.push({type:"modscoreS",data:{dimension:o,delta:l}})}),n):[]}function me({quirks:t,quirkOverrides:r}){let n={};if(!!r)return Object.entries(r).forEach(([o,i])=>{t[o]!==i.override&&(n[o]=i.override)}),Object.keys(n).length>0?n:void 0}var lt=require("@uniformdev/design-system");var De=t=>({field:r,form:n,meta:o,...i})=>(0,e.jsx)(t,{...i,...r,errorMessage:n.errors[r.name]});var ue=require("@uniformdev/design-system"),ge=De(ue.Input),dt=De(ue.InputSelect);var jt=N.object({dimension:N.string(),score:N.number()}),Se=({settings:t,saveSettings:r,state:n,actions:o,dimensionIndex:{index:i}})=>{var m,u;let a=t.route?[...t.route.matchAll(/overrides\/(?!.*add)(\w+)?/g)]:[],l=a[0]?a[0][1]:"";if(!((m=n.manifest.project.pz)!=null&&m.sig))return(0,e.jsx)("p",null,"Error, manifest is broken or there is no signal to override.");let p=Object.entries(i).filter(([,s])=>s.type!=="Audience"&&s.type!=="Intent").map(([s,d])=>{let c=d.type?`${d.type}: `:"",v=d.category?`${d.category} - `:"",f=`${c}${v}${d.name}`;return{value:s,label:f}});return p.unshift({value:"",label:"Choose dimension to override"}),(0,e.jsx)(B.Formik,{initialValues:{dimension:l,score:(u=n.scores[l])!=null?u:0},validate:s=>{let d={};return(s.score===n.scores[s.dimension]||s.score===0&&!n.scores[l])&&(d.score="You have to modify current score value"),d},validationSchema:jt,enableReinitialize:!0,validateOnChange:!1,validateOnBlur:!1,onSubmit:async s=>{var y,C,w,D,Z,He;let d=(C=(y=i[s.dimension])==null?void 0:y.cap)!=null?C:0,c=Math.min(s.score,d),v={...t,scoreOverrides:{...t.scoreOverrides,[s.dimension]:{initial:(He=(Z=(D=(w=t.scoreOverrides)==null?void 0:w[s.dimension])==null?void 0:D.initial)!=null?Z:n.scores[s.dimension])!=null?He:0,override:c}},route:"/overrides"};await r(v);let f=_({scores:n.scores,scoreOverrides:v.scoreOverrides});o.rawUpdate(f)}},({isSubmitting:s,values:d})=>{var C;let c=ct({manifest:n.manifest,visitor:n.data,override:{type:"modscore",data:{dimension:d.dimension,delta:d.score-((C=n.scores[d.dimension])!=null?C:0)}}}),v=Object.entries(n.scores).reduce((w,[D,Z])=>(w[D]={initial:Z,override:Z},w),{}),f={max:100,step:50};i[d.dimension]&&(f.max=i[d.dimension].cap,f.step=i[d.dimension].str);let y=d.score&&Object.keys(c).length>0;return(0,e.jsx)(B.Form,{css:h.page},(0,e.jsx)("h1",{css:h.title},"Override Dimension"),(0,e.jsx)(B.Field,{component:dt,label:"Dimension",id:"dimension",name:"dimension",options:p,disabled:s}),(0,e.jsx)("p",{css:h.text},(0,e.jsx)("small",null,"Audiences and Intents are aggregated from other dimension scores and cannot be overridden directly.")),d.dimension?(0,e.jsx)(B.Field,{component:it,name:"score",label:"Score",disabled:s,caption:`Range: 0 - ${f.max} in increments of ${f.step}`}):null,(0,e.jsx)(E,{disabled:s,css:{marginBottom:"2rem"}},y?(0,e.jsx)(X,null,(0,e.jsx)(j,{title:`Impacted Dimensions (${Object.keys(c).length})`},(0,e.jsx)(A,{preemptiveOverrides:v,dimensionIndex:i,dimensions:c,disableEditOverride:!0}))):null,(0,e.jsx)(lt.Button,{type:"submit",css:h.submitButton,disabled:s},"Save"),(0,e.jsx)(F,{route:"/overrides",css:h.cancelButton},"Cancel")))})};var mt=require("react");var ve=require("react"),fe=require("@uniformdev/design-system");var eo=({name:t,value:r,submit:n})=>{let[o,i]=(0,ve.useState)(r!=null?r:"");return(0,ve.useEffect)(()=>{i(r!=null?r:"")},[r]),(0,e.jsx)("div",{css:{display:"flex",gap:"var(--spacing-sm)"}},(0,e.jsx)(fe.Input,{type:"text",css:[tt],name:t,value:o,onChange:p=>{i(p.target.value)}}),(0,e.jsx)(fe.Button,{buttonType:"primary",disabled:o===r,size:"sm",onClick:()=>n(t,o!=null?o:"")},"Save"))},pt=eo;var G=require("@uniformdev/design-system"),ut=({...t})=>{let{state:{data:{quirks:r}},quirksIndex:{index:n},settings:o,saveSettings:i,actions:a}=t,[l,p]=(0,mt.useState)(""),m;l&&(m=n[l]);let u=async(s,d)=>{var f,y,C;p("");let c={...o,quirkOverrides:{...o.quirkOverrides,[s]:{initial:(C=(y=(f=o.quirkOverrides)==null?void 0:f[s])==null?void 0:y.initial)!=null?C:r[s],override:d}}};await i(c);let v=me({quirks:r,quirkOverrides:c.quirkOverrides});await a.update({quirks:v})};return(0,e.jsx)(b.Fragment,null,(0,e.jsx)("article",{css:[h.page,h.quirks]},(0,e.jsx)("h1",{css:h.title},"Quirks"),(0,e.jsx)("p",{css:h.text},"Keys defined in Uniform and their current, programmatically defined values for this visit."),Object.keys(n).length?(0,e.jsx)(ne,null,(0,e.jsx)(Ze,null,(0,e.jsx)(z,null,(0,e.jsx)(se,{width:"30%"},"Key"),(0,e.jsx)(se,{width:"50%"},"Value"),(0,e.jsx)(se,{width:"20%"},""))),(0,e.jsx)(ie,null,Object.values(n).map(({name:s,value:d,id:c})=>{var y,C,w;let v=(C=(y=o.quirkOverrides)==null?void 0:y[s])==null?void 0:C.initial,f=[];return m&&m.options&&(f=m.options.map(D=>({value:D.value,label:D.name}))),(0,e.jsx)(z,{key:c,border:"bottom"},(0,e.jsx)(V,null,(0,e.jsx)("strong",null,s)),(0,e.jsx)(V,null,l!==c?(0,e.jsx)("div",{onClick:()=>{p(c)}},v?(0,e.jsx)("div",null,(0,e.jsx)("s",null,v)):null,d):null,l===c&&m&&(0,e.jsx)(b.Fragment,null,m.options?(0,e.jsx)(G.InputSelect,{showLabel:!1,label:`Change ${s}`,defaultOption:`Change ${s}`,name:c,onChange:D=>u(D.target.name,D.target.value),options:f}):(0,e.jsx)(pt,{name:c,value:d,submit:u}))),(0,e.jsx)(V,null,l?null:(w=o.quirkOverrides)!=null&&w[c]?(0,e.jsx)(G.Button,{buttonType:"ghost",onClick:()=>{We({quirk:c,settings:o,saveSettings:i,actions:a})}},(0,e.jsx)("small",null,"Clear Override")):(0,e.jsx)(G.Button,{buttonType:"ghost",onClick:()=>{p(c)}},(0,e.jsx)("small",null,"Override"))))}))):(0,e.jsx)(q,{title:"No quirks configured",text:"There are currently no quirks setup. Try to connect to Uniform API to load additional information about Quirks and Quirks without defined value."})))};var gt=require("@uniformdev/design-system"),Le=require("@uniformdev/design-system"),vt=({settings:t,saveSettings:r,actions:n,state:{data:o}})=>(0,e.jsx)("article",{css:[h.page,{display:"flex",flexDirection:"column",gap:"var(--spacing-base)"}]},(0,e.jsx)("h1",{css:h.title},"Settings"),(0,e.jsx)(E,null,(0,e.jsx)(U,null,"Data Connection"),(0,e.jsx)(gt.Button,{buttonType:"tertiary",onClick:()=>{r({...t,route:"/connect"})}},"Manage Connection to Uniform")),(0,e.jsx)(E,null,(0,e.jsx)(U,null,"Storage Consent"),(0,e.jsx)(Le.Switch,{label:"Store visitor data",id:"consent-mode",name:"consentMode",checked:o.consent,onChange:i=>{n.rawUpdate([{type:"consent",data:i.currentTarget.checked}]),r({...t,consentMode:i.currentTarget.checked})}}),(0,e.jsx)("p",null,(0,e.jsx)("small",null,"Enabling storage consent allows storing behavior in this browser for personalization across sessions. Only affects this browser. Personalization works with this disabled, but dimension scores are lost on refresh."))),(0,e.jsx)(E,null,(0,e.jsx)(U,null,"Logging"),(0,e.jsx)(Le.Switch,{label:"Write Uniform Context diagnostic logs to browser console",id:"logging",name:"logging",checked:t.logLevel==="debug",onChange:i=>r({...t,logLevel:i.currentTarget.checked?"debug":"none"})})));var Oe=require("@uniformdev/design-system");var xe=({settings:t,saveSettings:r})=>{let n=()=>{r({...t,route:"/connect"})},o=()=>{r({...t,ignoreApiKeyPrompt:!0})},i=t.route==="/connect",a=!(t!=null&&t.apiKey);return!t.ignoreApiKeyPrompt&&a&&!i?(0,e.jsx)("div",{css:[ee,qe]},(0,e.jsx)("h2",{css:te},"Connect to a Uniform Project"),(0,e.jsx)("p",{css:oe},"This allows reading human-readable labels for the dimensions."),(0,e.jsx)("div",{css:re},(0,e.jsx)(Oe.Button,{buttonType:"secondary",onClick:n},"Connect this site"),(0,e.jsx)(Oe.Button,{buttonType:"ghost",onClick:o},"Skip for now")),(0,e.jsx)("button",{type:"button",css:Ne,title:"close",onClick:o},(0,e.jsx)("span",{hidden:!0},"Close"))):null};var Q=require("@uniformdev/context/api"),ft=require("react-use"),ht=x(require("react"));function bt({apiHost:t,apiKey:r,projectId:n},o){let{loading:i,error:a,value:l}=(0,ft.useAsync)(async()=>{if(!r||!n)return p;let u=(await new Q.DimensionClient({projectId:n,apiKey:r,apiHost:t||void 0}).get()).dimensions,s={};return u.map(d=>{var c,v,f,y;if(s[d.dim]={...(0,Q.computeDimensionDefinitionDisplayData)(d),cap:d.cap,str:10},s[d.dim].type==="Enrichment"){let C=d.dim.split("_")[0];s[d.dim].cap=(y=(f=(v=(c=o==null?void 0:o.project.pz)==null?void 0:c.enr)==null?void 0:v[C])==null?void 0:f.cap)!=null?y:100}}),s},[t,r,n]),p=ht.useMemo(()=>{var u,s,d,c;let m={};return o&&(Object.entries((s=(u=o==null?void 0:o.project.pz)==null?void 0:u.sig)!=null?s:{}).map(([v,f])=>{let y=(0,Q.computeDimensionDisplayData)(v,o);y&&(m[v]={...f,...y})}),Object.entries((c=(d=o==null?void 0:o.project.pz)==null?void 0:d.enr)!=null?c:{}).map(([v,f])=>{var w;let y=(0,Q.computeDimensionDisplayData)(v,o),C={cap:(w=f.cap)!=null?w:100,str:10};y&&(m[v]={...y,cap:C.cap,str:C.str})}),l&&Object.entries(l).map(([v,f])=>{m[v]={...m[v],...f}})),m},[o,l]);return{loading:i,error:a,index:p}}var yt=require("react"),Ct=require("@uniformdev/context/api"),wt=require("react-use");function kt({apiHost:t,apiKey:r,projectId:n},o){let{loading:i,error:a,value:l}=(0,wt.useAsync)(async()=>{if(!r||!n)return{};let u=await new Ct.QuirkClient({projectId:n,apiKey:r,apiHost:t||void 0}).get(),s={};return u.quirks.map(d=>{s[d.id]={...d,value:o[d.id]}}),s},[t,r,n]),p=(0,yt.useMemo)(()=>{let m={};return Object.entries(o).map(([u,s])=>m[u]={value:s,id:u,name:u}),l&&Object.entries(l).map(([u,s])=>m[u]={...s,value:o[u]}),m},[o,l]);return{loading:i,error:a,index:p}}var Re=require("@emotion/react"),xt=require("@uniformdev/design-system");function he(){return(0,e.jsx)("style",null,`
411
411
  :root {
412
412
  --site-width: 700px;
413
413
 
@@ -417,7 +417,7 @@ to {
417
417
 
418
418
  --min-height: 450px;
419
419
  }
420
- `)}var he=require("react"),kt=require("react-use");var Tt=()=>{let[t,r]=(0,he.useState)(!1),n=(0,kt.useMountedState)();return(0,he.useEffect)(()=>{setTimeout(()=>{n()&&r(!0)},1e3)},[n]),t?(0,e.jsx)("article",{css:h.page},(0,e.jsx)("h1",null,"Loading..."),(0,e.jsx)("p",null,"Connecting to Uniform API for complete data.")):null};var Dt=require("@uniformdev/context"),be=require("@uniformdev/context/api"),P=require("formik"),T=x(require("react")),O=require("@uniformdev/design-system");function St(t){let[r,n]=T.useState(t.currentData?"c":"qc"),[o,i]=T.useState(void 0),[a,l]=T.useState(void 0),p=T.useCallback(async s=>{let d=new be.ManifestClient(s);i(void 0);try{let c=await d.get({preview:!0});return l({manifest:c,target:s}),c}catch(c){if(c instanceof be.ApiClientError){c.statusCode===403?i("API key is valid but does not have Context > Read Drafts permission, or the API key does not have permissions to the project, or the project does not exist."):i(c.errorMessage);return}if("message"in c){c.message==="Failed to fetch"?i("A network error occurred. Ensure the API host is valid."):i(c.message);return}i(JSON.stringify(c,null,2));return}},[]);T.useEffect(()=>{!t.currentData||p(t.currentData)},[p,t.currentData]);let m=async s=>{await p(s)&&(n("c"),await t.onConnect(s))},u=()=>{confirm("Disconnect from Uniform? Make sure to save your API key if you want to reconnect.")&&(n("qc"),l(void 0),i(void 0),t.onConnect(null))};return(0,e.jsx)("div",null,o?(0,e.jsx)(O.ErrorMessage,{message:o}):null,r==="qc"||r==="mc"?(0,e.jsx)(to,{...t,state:r,setState:n,onConnect:m}):(0,e.jsx)("div",null,a?(0,e.jsx)(T.Fragment,null,(0,e.jsx)("p",null,"Connected to"," ",(0,e.jsx)("a",{href:`${a==null?void 0:a.target.apiHost}/projects/${a==null?void 0:a.target.projectId}`,target:"_blank",rel:"noopener noreferrer",css:{textDecoration:"underline"}},(0,e.jsx)("strong",null,a==null?void 0:a.manifest.project.name))," ",(0,e.jsx)("small",null,"(",a==null?void 0:a.manifest.project.id,")")),(0,e.jsx)(O.Button,{buttonType:"secondary",type:"button",onClick:u},"Disconnect")):null))}function to({setState:t,state:r,currentData:n,onConnect:o}){var i,a,l;return(0,e.jsx)("div",null,(0,e.jsx)(P.Formik,{initialValues:{apiHost:(i=n==null?void 0:n.apiHost)!=null?i:"https://uniform.dev",apiKey:(a=n==null?void 0:n.apiKey)!=null?a:"",projectId:(l=n==null?void 0:n.projectId)!=null?l:"",qc:""},onSubmit:o},({setFieldValue:p,setFieldError:m,errors:{qc:u},isSubmitting:s})=>(0,e.jsx)(P.Form,null,(0,e.jsx)("fieldset",{css:{display:"flex",flexDirection:"column",gap:"var(--spacing-base)"}},r==="qc"?(0,e.jsx)(T.Fragment,null,(0,e.jsx)("div",null,(0,e.jsx)(O.Input,{placeholder:"Paste Quick Connect Code Here",caption:"Copy the Quick Connect code after creating an API key in Uniform.",errorMessage:u,onChange:d=>{try{let c=(0,Dt.parseQuickConnect)(d.currentTarget.value);p("apiHost",c.apiHost),p("apiKey",c.apiKey),p("projectId",c.projectId)}catch(c){m("qc",c.message)}}})),(0,e.jsx)("section",{css:{display:"flex",gap:"var(--spacing-sm)"}},(0,e.jsx)(O.Button,{type:"submit",buttonType:"primary",disabled:s},s?"Verifying...":"Connect"),(0,e.jsx)(O.Button,{type:"button",buttonType:"ghost",onClick:()=>t("mc"),disabled:s},"Connect Manually"))):(0,e.jsx)(T.Fragment,null,(0,e.jsx)("div",null,(0,e.jsx)(P.Field,{component:ue,label:"API Key",name:"apiKey",caption:"Generate an API key in your Uniform team settings."})),(0,e.jsx)("div",null,(0,e.jsx)(P.Field,{component:ue,label:"Project ID",name:"projectId",caption:"Available to copy after generating an API key"})),(0,e.jsx)("div",null,(0,e.jsx)(P.Field,{component:ue,label:"API Host",name:"apiHost",caption:"Use a non-standard Uniform API endpoint. Most people will not not need this option."})),(0,e.jsx)("section",{css:{display:"flex",gap:"var(--spacing-sm)"}},(0,e.jsx)(O.Button,{type:"submit",buttonType:"primary",disabled:s},s?"Verifying...":"Connect"),(0,e.jsx)(O.Button,{type:"button",buttonType:"ghost",onClick:()=>t("qc"),disabled:s},"Use Quick Connect")))))))}var Lt=({settings:t,saveSettings:r})=>{let n=t.apiKey&&t.projectId?{apiKey:t.apiKey,projectId:t.projectId,apiHost:t.apiHost}:void 0;return(0,e.jsx)("article",{css:h.page},(0,e.jsx)("h1",{css:h.title},"Connect to a Uniform Project"),(0,e.jsx)("p",{css:h.text},(0,e.jsx)("small",null,"Adding an API key and project ID enables human-readable dimension labels to be shown. You must have access to the Uniform project to do this.")),(0,e.jsx)(St,{onConnect:async o=>{o?await r({...t,apiKey:o.apiKey,projectId:o.projectId,apiHost:o.apiHost}):await r({...t,apiKey:void 0,projectId:void 0,apiHost:void 0})},currentData:n}))};var oo=xe.css`
420
+ `)}var be=require("react"),Tt=require("react-use");var Dt=()=>{let[t,r]=(0,be.useState)(!1),n=(0,Tt.useMountedState)();return(0,be.useEffect)(()=>{setTimeout(()=>{n()&&r(!0)},1e3)},[n]),t?(0,e.jsx)("article",{css:h.page},(0,e.jsx)("h1",null,"Loading..."),(0,e.jsx)("p",null,"Connecting to Uniform API for complete data.")):null};var St=require("@uniformdev/context"),ye=require("@uniformdev/context/api"),P=require("formik"),T=x(require("react")),O=require("@uniformdev/design-system");function Lt(t){let[r,n]=T.useState(t.currentData?"c":"qc"),[o,i]=T.useState(void 0),[a,l]=T.useState(void 0),p=T.useCallback(async s=>{let d=new ye.ManifestClient(s);i(void 0);try{let c=await d.get({preview:!0});return l({manifest:c,target:s}),c}catch(c){if(c instanceof ye.ApiClientError){c.statusCode===403?i("API key is valid but does not have Context > Read Drafts permission, or the API key does not have permissions to the project, or the project does not exist."):i(c.errorMessage);return}if("message"in c){c.message==="Failed to fetch"?i("A network error occurred. Ensure the API host is valid."):i(c.message);return}i(JSON.stringify(c,null,2));return}},[]);T.useEffect(()=>{!t.currentData||p(t.currentData)},[p,t.currentData]);let m=async s=>{await p(s)&&(n("c"),await t.onConnect(s))},u=()=>{confirm("Disconnect from Uniform? Make sure to save your API key if you want to reconnect.")&&(n("qc"),l(void 0),i(void 0),t.onConnect(null))};return(0,e.jsx)("div",null,o?(0,e.jsx)(O.ErrorMessage,{message:o}):null,r==="qc"||r==="mc"?(0,e.jsx)(to,{...t,state:r,setState:n,onConnect:m}):(0,e.jsx)("div",null,a?(0,e.jsx)(T.Fragment,null,(0,e.jsx)("p",null,"Connected to"," ",(0,e.jsx)("a",{href:`${a==null?void 0:a.target.apiHost}/projects/${a==null?void 0:a.target.projectId}`,target:"_blank",rel:"noopener noreferrer",css:{textDecoration:"underline"}},(0,e.jsx)("strong",null,a==null?void 0:a.manifest.project.name))," ",(0,e.jsx)("small",null,"(",a==null?void 0:a.manifest.project.id,")")),(0,e.jsx)(O.Button,{buttonType:"secondary",type:"button",onClick:u},"Disconnect")):null))}function to({setState:t,state:r,currentData:n,onConnect:o}){var i,a,l;return(0,e.jsx)("div",null,(0,e.jsx)(P.Formik,{initialValues:{apiHost:(i=n==null?void 0:n.apiHost)!=null?i:"https://uniform.dev",apiKey:(a=n==null?void 0:n.apiKey)!=null?a:"",projectId:(l=n==null?void 0:n.projectId)!=null?l:"",qc:""},onSubmit:o},({setFieldValue:p,setFieldError:m,errors:{qc:u},isSubmitting:s})=>(0,e.jsx)(P.Form,null,(0,e.jsx)("fieldset",{css:{display:"flex",flexDirection:"column",gap:"var(--spacing-base)"}},r==="qc"?(0,e.jsx)(T.Fragment,null,(0,e.jsx)("div",null,(0,e.jsx)(O.Input,{placeholder:"Paste Quick Connect Code Here",caption:"Copy the Quick Connect code after creating an API key in Uniform.",errorMessage:u,onChange:d=>{try{let c=(0,St.parseQuickConnect)(d.currentTarget.value);p("apiHost",c.apiHost),p("apiKey",c.apiKey),p("projectId",c.projectId)}catch(c){m("qc",c.message)}}})),(0,e.jsx)("section",{css:{display:"flex",gap:"var(--spacing-sm)"}},(0,e.jsx)(O.Button,{type:"submit",buttonType:"primary",disabled:s},s?"Verifying...":"Connect"),(0,e.jsx)(O.Button,{type:"button",buttonType:"ghost",onClick:()=>t("mc"),disabled:s},"Connect Manually"))):(0,e.jsx)(T.Fragment,null,(0,e.jsx)("div",null,(0,e.jsx)(P.Field,{component:ge,label:"API Key",name:"apiKey",caption:"Generate an API key in your Uniform team settings."})),(0,e.jsx)("div",null,(0,e.jsx)(P.Field,{component:ge,label:"Project ID",name:"projectId",caption:"Available to copy after generating an API key"})),(0,e.jsx)("div",null,(0,e.jsx)(P.Field,{component:ge,label:"API Host",name:"apiHost",caption:"Use a non-standard Uniform API endpoint. Most people will not not need this option."})),(0,e.jsx)("section",{css:{display:"flex",gap:"var(--spacing-sm)"}},(0,e.jsx)(O.Button,{type:"submit",buttonType:"primary",disabled:s},s?"Verifying...":"Connect"),(0,e.jsx)(O.Button,{type:"button",buttonType:"ghost",onClick:()=>t("qc"),disabled:s},"Use Quick Connect")))))))}var Ot=({settings:t,saveSettings:r})=>{let n=t.apiKey&&t.projectId?{apiKey:t.apiKey,projectId:t.projectId,apiHost:t.apiHost}:void 0;return(0,e.jsx)("article",{css:h.page},(0,e.jsx)("h1",{css:h.title},"Connect to a Uniform Project"),(0,e.jsx)("p",{css:h.text},(0,e.jsx)("small",null,"Adding an API key and project ID enables human-readable dimension labels to be shown. You must have access to the Uniform project to do this.")),(0,e.jsx)(Lt,{onConnect:async o=>{o?await r({...t,apiKey:o.apiKey,projectId:o.projectId,apiHost:o.apiHost}):await r({...t,apiKey:void 0,projectId:void 0,apiHost:void 0})},currentData:n}))};var oo=Re.css`
421
421
  background: var(--white);
422
422
  padding: var(--spacing-base);
423
423
  overflow-y: auto;
@@ -446,7 +446,7 @@ to {
446
446
  &::-webkit-scrollbar-thumb:hover {
447
447
  background: var(--gray-500);
448
448
  }
449
- `;function Re(t){let r=ht(t.settings,t.state.manifest),n=wt(t.settings,t.state.data.quirks),o={...t,dimensionIndex:r,quirksIndex:n},i=()=>{var a;if(r.loading||n.loading)return(0,e.jsx)(Tt,null);if(t.settings.route&&t.settings.route.match(/overrides\/\w+/))return(0,e.jsx)(De,{...o});switch((a=t.settings)==null?void 0:a.route){case void 0:case"/":case"/dimensions":return(0,e.jsx)(Ye,{...o});case"/overrides":return(0,e.jsx)(je,{...o});case"/overrides/add":return(0,e.jsx)(De,{...o});case"/quirks":return(0,e.jsx)(mt,{...o});case"/settings":return(0,e.jsx)(gt,{...o});case"/connect":return(0,e.jsx)(Lt,{...o});default:return(0,e.jsx)(Be,null)}};return(0,e.jsx)(Ae,{settings:t.settings,saveSettings:t.saveSettings},(0,e.jsx)(Ot.Theme,null),(0,e.jsx)(fe,null),(0,e.jsx)("div",{css:xe.css`
449
+ `;function Ve(t){let r=bt(t.settings,t.state.manifest),n=kt(t.settings,t.state.data.quirks),o={...t,dimensionIndex:r,quirksIndex:n},i=()=>{var a;if(r.loading||n.loading)return(0,e.jsx)(Dt,null);if(t.settings.route&&t.settings.route.match(/overrides\/\w+/))return(0,e.jsx)(Se,{...o});switch((a=t.settings)==null?void 0:a.route){case void 0:case"/":case"/dimensions":return(0,e.jsx)(Je,{...o});case"/overrides":return(0,e.jsx)(et,{...o});case"/overrides/add":return(0,e.jsx)(Se,{...o});case"/quirks":return(0,e.jsx)(ut,{...o});case"/settings":return(0,e.jsx)(vt,{...o});case"/connect":return(0,e.jsx)(Ot,{...o});default:return(0,e.jsx)(Qe,null)}};return(0,e.jsx)(Ee,{settings:t.settings,saveSettings:t.saveSettings},(0,e.jsx)(xt.Theme,null),(0,e.jsx)(he,null),(0,e.jsx)("div",{css:Re.css`
450
450
  display: grid;
451
451
  grid-template-columns: 200px auto;
452
452
  font-weight: var(--fs-base);
@@ -455,7 +455,7 @@ to {
455
455
  line-height: var(--base-line-height);
456
456
  height: var(--min-height);
457
457
  min-width: var(--site-width);
458
- `},(0,e.jsx)(Ee,{...t}),(0,e.jsx)("main",{css:oo},(0,e.jsx)(Oe,{...t}),i())))}var ye=require("@uniformdev/context"),R=x(require("react"));var Ve="embeddedUniformDevToolsSettings";function Ie({context:t,initialSettings:r}){let n=t!=null?t:typeof window!="undefined"?window.__UNIFORM_DEVTOOLS_CONTEXT_INSTANCE__:void 0,o=n!=null?n:new ye.Context({manifest:{project:{}}}),[i,a]=R.useState({data:o.storage.data,manifest:o.manifest.data,scores:o.scores,personalizations:[],tests:[]}),[l,p]=R.useState(r!=null?r:{});R.useEffect(()=>{var d;let s=(0,ye.createDebugConsoleLogDrain)((d=l.logLevel)!=null?d:"none");return o.events.on("log",s),()=>{o.events.off("log",s)}},[l,o]),R.useEffect(()=>{let s=()=>{let v=window.localStorage.getItem(Ve)||"{}",f=JSON.parse(v),y=pe({quirks:o.storage.data.quirks,quirkOverrides:f.quirkOverrides});y&&(console.log("Applying overridden quirks:",y),o.update({quirks:y}));let C=_({scores:o.scores,scoreOverrides:f.scoreOverrides});C.length&&(console.log("Applying overridden scores:",C),o.storage.updateData(C)),a(w=>({...w,scores:o.scores,data:o.storage.data,manifest:o.manifest.data}))},d=v=>{!v.changed||a(f=>({...f,personalizations:[...f.personalizations,v]}))},c=v=>{!v.variantAssigned||a(f=>({...f,tests:[...f.tests,v]}))};return o.events.on("personalizationResult",d),o.events.on("testResult",c),o.storage.events.on("*",s),()=>{o.storage.events.off("*",s),o.events.off("personalizationResult",d),o.events.off("testResult",c)}},[o]),R.useEffect(()=>{if(window.localStorage){let s=window.localStorage.getItem(Ve);if(s)try{let d=JSON.parse(s),c={...r,...d};p(c);let v=_({scores:i.scores,scoreOverrides:c.scoreOverrides});m.rawUpdate(v)}catch(d){window.localStorage.removeItem(Ve),console.error("Failed to parse settings from localStorage: ",d.message)}}},[]);let{actions:m,saveSettings:u}=R.useMemo(()=>({actions:{update:c=>o.update(c),forget:()=>o.forget(!1),rawUpdate:c=>o.storage.updateData(c)},saveSettings:async c=>{p(c),window.localStorage&&window.localStorage.setItem("embeddedUniformDevToolsSettings",JSON.stringify(c))}}),[o]);return n?(0,e.jsx)(Re,{state:i,actions:m,settings:l,saveSettings:u}):(0,e.jsx)("p",null,"Unable to find Uniform Context. Ensure the devtools plugin is activated.")}var Vt=require("@emotion/react"),It=x(require("react"));var Pt=require("@uniformdev/design-system");var xt=require("@emotion/react"),ro=xt.css`
458
+ `},(0,e.jsx)(Be,{...t}),(0,e.jsx)("main",{css:oo},(0,e.jsx)(xe,{...t}),i())))}var Ce=require("@uniformdev/context"),R=x(require("react"));var Ie="embeddedUniformDevToolsSettings";function Pe({context:t,initialSettings:r}){let n=t!=null?t:typeof window!="undefined"?window.__UNIFORM_DEVTOOLS_CONTEXT_INSTANCE__:void 0,o=n!=null?n:new Ce.Context({manifest:{project:{}}}),[i,a]=R.useState({data:o.storage.data,manifest:o.manifest.data,scores:o.scores,personalizations:[],tests:[]}),[l,p]=R.useState(r!=null?r:{});R.useEffect(()=>{var d;let s=(0,Ce.createDebugConsoleLogDrain)((d=l.logLevel)!=null?d:"none");return o.events.on("log",s),()=>{o.events.off("log",s)}},[l,o]),R.useEffect(()=>{let s=()=>{let v=window.localStorage.getItem(Ie)||"{}",f=JSON.parse(v),y=me({quirks:o.storage.data.quirks,quirkOverrides:f.quirkOverrides});y&&(console.log("Applying overridden quirks:",y),o.update({quirks:y}));let C=_({scores:o.scores,scoreOverrides:f.scoreOverrides});C.length&&(console.log("Applying overridden scores:",C),o.storage.updateData(C)),a(w=>({...w,scores:o.scores,data:o.storage.data,manifest:o.manifest.data}))},d=v=>{!v.changed||a(f=>({...f,personalizations:[...f.personalizations,v]}))},c=v=>{!v.variantAssigned||a(f=>({...f,tests:[...f.tests,v]}))};return o.events.on("personalizationResult",d),o.events.on("testResult",c),o.storage.events.on("*",s),()=>{o.storage.events.off("*",s),o.events.off("personalizationResult",d),o.events.off("testResult",c)}},[o]),R.useEffect(()=>{if(window.localStorage){let s=window.localStorage.getItem(Ie);if(s)try{let d=JSON.parse(s),c={...r,...d};p(c);let v=_({scores:i.scores,scoreOverrides:c.scoreOverrides});m.rawUpdate(v)}catch(d){window.localStorage.removeItem(Ie),console.error("Failed to parse settings from localStorage: ",d.message)}}},[]);let{actions:m,saveSettings:u}=R.useMemo(()=>({actions:{update:c=>o.update(c),forget:()=>o.forget(!1),rawUpdate:c=>o.storage.updateData(c)},saveSettings:async c=>{p(c),window.localStorage&&window.localStorage.setItem("embeddedUniformDevToolsSettings",JSON.stringify(c))}}),[o]);return n?(0,e.jsx)(Ve,{state:i,actions:m,settings:l,saveSettings:u}):(0,e.jsx)("p",null,"Unable to find Uniform Context. Ensure the devtools plugin is activated.")}var It=require("@emotion/react"),$=x(require("react"));var Pt=require("@uniformdev/design-system");var Rt=require("@emotion/react"),ro=Rt.css`
459
459
  align-items: center;
460
460
  border-radius: var(--rounded-full);
461
461
  background: var(--brand-secondary-5);
@@ -481,11 +481,11 @@ to {
481
481
  max-width: 100%;
482
482
  height: auto;
483
483
  }
484
- `,Rt=({...t})=>(0,e.jsx)("button",{type:"button",css:ro,...t},(0,e.jsx)("span",{hidden:!0},"Uniform devtools"),(0,e.jsx)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.jsx)("path",{d:"M13.325 3.05011L8.66741 20.4323L10.5993 20.9499L15.2568 3.56775L13.325 3.05011Z",fill:"currentColor"}),(0,e.jsx)("path",{d:"M7.61197 18.3608L8.97136 16.9124L8.97086 16.8933L3.87657 12.1121L8.66699 7.00798L7.20868 5.63928L1.04956 12.2017L7.61197 18.3608Z",fill:"currentColor"}),(0,e.jsx)("path",{d:"M16.388 18.3608L15.0286 16.9124L15.0291 16.8933L20.1234 12.1121L15.333 7.00798L16.7913 5.63928L22.9504 12.2017L16.388 18.3608Z",fill:"currentColor"})));function no(t){var i;let[r,n]=It.useState(!1);return((i=t.context)!=null?i:typeof window!="undefined"?window.__UNIFORM_DEVTOOLS_CONTEXT_INSTANCE__:void 0)?(0,e.jsx)("div",null,(0,e.jsx)(Pt.Theme,null),(0,e.jsx)(fe,null),(0,e.jsx)(Rt,{onClick:()=>n(a=>!a)}),r?(0,e.jsx)("div",{css:Vt.css`
484
+ `,Vt=({...t})=>(0,e.jsx)("button",{type:"button",css:ro,...t},(0,e.jsx)("span",{hidden:!0},"Uniform devtools"),(0,e.jsx)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.jsx)("path",{d:"M13.325 3.05011L8.66741 20.4323L10.5993 20.9499L15.2568 3.56775L13.325 3.05011Z",fill:"currentColor"}),(0,e.jsx)("path",{d:"M7.61197 18.3608L8.97136 16.9124L8.97086 16.8933L3.87657 12.1121L8.66699 7.00798L7.20868 5.63928L1.04956 12.2017L7.61197 18.3608Z",fill:"currentColor"}),(0,e.jsx)("path",{d:"M16.388 18.3608L15.0286 16.9124L15.0291 16.8933L20.1234 12.1121L15.333 7.00798L16.7913 5.63928L22.9504 12.2017L16.388 18.3608Z",fill:"currentColor"})));function no(t){let[r,n]=$.useState(!1),[o,i]=$.useState(t.context);return $.useEffect(()=>{!t.context&&typeof document!="undefined"&&i(window.__UNIFORM_DEVTOOLS_CONTEXT_INSTANCE__)},[t.context]),o?(0,e.jsx)("div",null,(0,e.jsx)(Pt.Theme,null),(0,e.jsx)(he,null),(0,e.jsx)(Vt,{onClick:()=>n(a=>!a)}),r?(0,e.jsx)("div",{css:It.css`
485
485
  box-shadow: var(--shadow-base);
486
486
  position: fixed;
487
487
  bottom: 82px;
488
488
  right: var(--spacing-base);
489
489
  z-index: var(--z-10);
490
490
  max-width: var(--site-width);
491
- `},(0,e.jsx)(Ie,{...t})):null):(0,e.jsx)("p",null,"Unable to find Uniform Context. Ensure the devtools plugin is activated.")}0&&(module.exports={ContextDevTools,EmbeddedContextDevTools,ToggleEmbeddedContextDevTools});
491
+ `},(0,e.jsx)(Pe,{...t})):null):(0,e.jsx)("p",null,"Unable to find Uniform Context. Ensure the devtools plugin is activated.")}0&&(module.exports={ContextDevTools,EmbeddedContextDevTools,ToggleEmbeddedContextDevTools});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniformdev/context-devtools",
3
- "version": "16.0.1-alpha.164+c3b15fc3f",
3
+ "version": "16.1.0",
4
4
  "description": "Uniform Context developer tools components",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "main": "./dist/index.js",
@@ -30,8 +30,8 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@emotion/react": "^11.9.0",
33
- "@uniformdev/context": "^16.0.1-alpha.164+c3b15fc3f",
34
- "@uniformdev/design-system": "^16.0.1-alpha.164+c3b15fc3f",
33
+ "@uniformdev/context": "^16.1.0",
34
+ "@uniformdev/design-system": "^16.1.0",
35
35
  "formik": "^2.2.9",
36
36
  "react-use": "^17.4.0",
37
37
  "reakit": "^1.3.11",
@@ -43,5 +43,5 @@
43
43
  "publishConfig": {
44
44
  "access": "public"
45
45
  },
46
- "gitHead": "c3b15fc3f3101dd990d7adfe84cb7e0bad77899d"
46
+ "gitHead": "18a24d68a80d079bfdf74b52ccf352fc2f8a2821"
47
47
  }