@uniformdev/context-devtools 16.2.1-alpha.142 → 16.2.1-nuxt.252
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 +2 -2
- package/dist/index.js +2 -2
- package/package.json +4 -4
package/dist/esm/index.js
CHANGED
|
@@ -414,7 +414,7 @@ to {
|
|
|
414
414
|
font-weight: var(--fw-bold);
|
|
415
415
|
border-bottom: 1px solid var(--gray-400);
|
|
416
416
|
width: 100%;
|
|
417
|
-
`},t);import{Context as xt,TransitionDataStore as Rt}from"@uniformdev/context";function Be({manifest:t,visitor:r,override:n}){let o=new xt({manifest:t,transitionStore:new se({initialData:r})}),i={...o.scores};o.storage.updateData([n]);let d={...{...o.scores}};return Object.entries(d).forEach(([p,m])=>{i[p]===m&&delete d[p]}),d}var se=class extends Rt{async handleDelete(){}async handleUpdateData(){}};function N({scores:t,scoreOverrides:r}){let n=[];return r?(Object.entries(r).forEach(([o,i])=>{var p;let s=(p=t[o])!=null?p:0;if(s===i.override)return;let d=i.override-s;n.push({type:"modscoreS",data:{dimension:o,delta:d}})}),n):[]}function oe({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}import{Button as Mt}from"@uniformdev/design-system";var ae=t=>({field:r,form:n,meta:o,...i})=>e(t,{...r,...i,errorMessage:n.errors[r.name]});import{Input as Vt,InputSelect as Pt}from"@uniformdev/design-system";var re=ae(Vt),Qe=ae(Pt);var Et=Q.object({dimension:Q.string(),score:Q.number()}),ce=({settings:t,saveSettings:r,state:n,actions:o,dimensionIndex:{index:i}})=>{var m,u;let s=t.route?[...t.route.matchAll(/overrides\/(?!.*add)(\w+)?/g)]:[],d=s[0]?s[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(i).filter(([,a])=>a.type!=="Audience"&&a.type!=="Intent").map(([a,c])=>{let l=c.type?`${c.type}: `:"",v=c.category?`${c.category} - `:"",g=`${l}${v}${c.name}`;return{value:a,label:g}});return p.unshift({value:"",label:"Choose dimension to override"}),e(Ht,{initialValues:{dimension:d,score:(u=n.scores[d])!=null?u:0},validate:a=>{let c={};return(a.score===n.scores[a.dimension]||a.score===0&&!n.scores[d])&&(c.score="You have to modify current score value"),c},validationSchema:Et,enableReinitialize:!0,validateOnChange:!1,validateOnBlur:!1,onSubmit:async a=>{var f,y,C,w,R,V;let c=(y=(f=i[a.dimension])==null?void 0:f.cap)!=null?y:0,l=Math.min(a.score,c),v={...t,scoreOverrides:{...t.scoreOverrides,[a.dimension]:{initial:(V=(R=(w=(C=t.scoreOverrides)==null?void 0:C[a.dimension])==null?void 0:w.initial)!=null?R:n.scores[a.dimension])!=null?V:0,override:l}},route:"/overrides"};await r(v);let g=N({scores:n.scores,scoreOverrides:v.scoreOverrides});o.rawUpdate(g)}},({isSubmitting:a,values:c,setFieldValue:l})=>{var C;let v=Be({manifest:n.manifest,visitor:n.data,override:{type:"modscore",data:{dimension:c.dimension,delta:c.score-((C=n.scores[c.dimension])!=null?C:0)}}}),g=Object.entries(n.scores).reduce((w,[R,V])=>(w[R]={initial:V,override:V},w),{}),f={max:100,step:50};i[c.dimension]&&(f.max=i[c.dimension].cap,f.step=i[c.dimension].str);let y=c.score&&Object.keys(v).length>0;return e(It,{css:h.page},e("h1",{css:h.title},"Override Dimension"),e(Fe,{component:Qe,label:"Dimension",id:"dimension",name:"dimension",options:p,disabled:a,onChange:w=>{l("score",0,!1),l("dimension",w.target.value)}}),e("p",{css:h.text},e("small",null,"Audiences and Intents are aggregated from other dimension scores and cannot be overridden directly.")),c.dimension?e(Fe,{component:Ae,name:"score",label:"Score",disabled:a,max:f.max,step:f.step,caption:`Range: 0 - ${f.max} in increments of ${f.step}`}):null,e(x,{disabled:a,css:{marginBottom:"2rem"}},y?e(_,null,e(G,{title:`Impacted Dimensions (${Object.keys(v).length})`},e(P,{preemptiveOverrides:g,dimensionIndex:i,dimensions:v,disableEditOverride:!0}))):null,e(Mt,{type:"submit",css:h.submitButton,disabled:a},"Save"),e(H,{route:"/overrides",css:h.cancelButton},"Cancel")))})};import{useState as Nt}from"react";import{useState as At,useEffect as Bt}from"react";import{Button as Qt,Input as Ft}from"@uniformdev/design-system";var qt=({name:t,value:r,submit:n})=>{let[o,i]=At(r!=null?r:"");return Bt(()=>{i(r!=null?r:"")},[r]),e("div",{css:{display:"flex",gap:"var(--spacing-sm)"}},e(Ft,{type:"text",css:[Ie],name:t,value:o,onChange:p=>{i(p.target.value)}}),e(Qt,{buttonType:"primary",disabled:o===r,size:"sm",onClick:()=>n(t,o!=null?o:"")},"Save"))},qe=qt;import{Button as Ne,InputSelect as Zt}from"@uniformdev/design-system";var Ze=({...t})=>{let{state:{data:{quirks:r}},quirksIndex:{index:n},settings:o,saveSettings:i,actions:s}=t,[d,p]=Nt(""),m;d&&(m=n[d]);let u=async(a,c)=>{var g,f,y;p("");let l={...o,quirkOverrides:{...o.quirkOverrides,[a]:{initial:(y=(f=(g=o.quirkOverrides)==null?void 0:g[a])==null?void 0:f.initial)!=null?y:r[a],override:c}}};await i(l);let v=oe({quirks:r,quirkOverrides:l.quirkOverrides});await s.update({quirks:v})};return e(b.Fragment,null,e("article",{css:[h.page,h.quirks]},e("h1",{css:h.title},"Quirks"),e("p",{css:h.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(q,null,e(j,{width:"30%"},"Key"),e(j,{width:"50%"},"Value"),e(j,{width:"20%"},""))),e(X,null,Object.values(n).map(({name:a,value:c,id:l})=>{var f,y,C;let v=(y=(f=o.quirkOverrides)==null?void 0:f[a])==null?void 0:y.initial,g=[];return m&&m.options&&(g=m.options.map(w=>({value:w.value,label:w.name}))),e(q,{key:l,border:"bottom"},e(O,null,e("strong",null,a)),e(O,null,d!==l?e("div",{onClick:()=>{p(l)}},v?e("div",null,e("s",null,v)):null,c):null,d===l&&m&&e(b.Fragment,null,m.options?e(Zt,{showLabel:!1,label:`Change ${a}`,defaultOption:`Change ${a}`,name:l,onChange:w=>u(w.target.name,w.target.value),options:g}):e(qe,{name:l,value:c,submit:u}))),e(O,null,d?null:(C=o.quirkOverrides)!=null&&C[l]?e(Ne,{buttonType:"ghost",onClick:()=>{Le({quirk:l,settings:o,saveSettings:i,actions:s})}},e("small",null,"Clear Override")):e(Ne,{buttonType:"ghost",onClick:()=>{p(l)}},e("small",null,"Override"))))}))):e(A,{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 ze}from"@uniformdev/design-system";import{Switch as Ue}from"@uniformdev/design-system";var _e=({settings:t,saveSettings:r,actions:n,state:{data:o},clearAllExtensionData:i})=>e("article",{css:[h.page,{display:"flex",flexDirection:"column",gap:"var(--spacing-base)"}]},e("h1",{css:h.title},"Settings"),e(x,null,e(B,null,"Data Connection"),e(ze,{buttonType:"tertiary",onClick:()=>{r({...t,route:"/connect"})}},"Manage Connection to Uniform")),e(x,null,e(B,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(x,null,e(B,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"})})),e(x,null,e(B,null,"Clear extension storage"),e(ze,{onClick:()=>{i()}},"Clear"),e("p",null,e("small",null,"May be necessary when you have multiple different sites on the same domain name (e.g. http://localhost:3000) and there are some conflicts or other unexpected behaviour."))));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})},i=t.route==="/connect",s=!(t!=null&&t.apiKey);return!t.ignoreApiKeyPrompt&&s&&!i?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(Ge,{buttonType:"secondary",onClick:n},"Connect this site"),e(Ge,{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 $e,
|
|
417
|
+
`},t);import{Context as xt,TransitionDataStore as Rt}from"@uniformdev/context";function Be({manifest:t,visitor:r,override:n}){let o=new xt({manifest:t,transitionStore:new se({initialData:r})}),i={...o.scores};o.storage.updateData([n]);let d={...{...o.scores}};return Object.entries(d).forEach(([p,m])=>{i[p]===m&&delete d[p]}),d}var se=class extends Rt{async handleDelete(){}async handleUpdateData(){}};function N({scores:t,scoreOverrides:r}){let n=[];return r?(Object.entries(r).forEach(([o,i])=>{var p;let s=(p=t[o])!=null?p:0;if(s===i.override)return;let d=i.override-s;n.push({type:"modscoreS",data:{dimension:o,delta:d}})}),n):[]}function oe({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}import{Button as Mt}from"@uniformdev/design-system";var ae=t=>({field:r,form:n,meta:o,...i})=>e(t,{...r,...i,errorMessage:n.errors[r.name]});import{Input as Vt,InputSelect as Pt}from"@uniformdev/design-system";var re=ae(Vt),Qe=ae(Pt);var Et=Q.object({dimension:Q.string(),score:Q.number()}),ce=({settings:t,saveSettings:r,state:n,actions:o,dimensionIndex:{index:i}})=>{var m,u;let s=t.route?[...t.route.matchAll(/overrides\/(?!.*add)(\w+)?/g)]:[],d=s[0]?s[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(i).filter(([,a])=>a.type!=="Audience"&&a.type!=="Intent").map(([a,c])=>{let l=c.type?`${c.type}: `:"",v=c.category?`${c.category} - `:"",g=`${l}${v}${c.name}`;return{value:a,label:g}});return p.unshift({value:"",label:"Choose dimension to override"}),e(Ht,{initialValues:{dimension:d,score:(u=n.scores[d])!=null?u:0},validate:a=>{let c={};return(a.score===n.scores[a.dimension]||a.score===0&&!n.scores[d])&&(c.score="You have to modify current score value"),c},validationSchema:Et,enableReinitialize:!0,validateOnChange:!1,validateOnBlur:!1,onSubmit:async a=>{var f,y,C,w,R,V;let c=(y=(f=i[a.dimension])==null?void 0:f.cap)!=null?y:0,l=Math.min(a.score,c),v={...t,scoreOverrides:{...t.scoreOverrides,[a.dimension]:{initial:(V=(R=(w=(C=t.scoreOverrides)==null?void 0:C[a.dimension])==null?void 0:w.initial)!=null?R:n.scores[a.dimension])!=null?V:0,override:l}},route:"/overrides"};await r(v);let g=N({scores:n.scores,scoreOverrides:v.scoreOverrides});o.rawUpdate(g)}},({isSubmitting:a,values:c,setFieldValue:l})=>{var C;let v=Be({manifest:n.manifest,visitor:n.data,override:{type:"modscore",data:{dimension:c.dimension,delta:c.score-((C=n.scores[c.dimension])!=null?C:0)}}}),g=Object.entries(n.scores).reduce((w,[R,V])=>(w[R]={initial:V,override:V},w),{}),f={max:100,step:50};i[c.dimension]&&(f.max=i[c.dimension].cap,f.step=i[c.dimension].str);let y=c.score&&Object.keys(v).length>0;return e(It,{css:h.page},e("h1",{css:h.title},"Override Dimension"),e(Fe,{component:Qe,label:"Dimension",id:"dimension",name:"dimension",options:p,disabled:a,onChange:w=>{l("score",0,!1),l("dimension",w.target.value)}}),e("p",{css:h.text},e("small",null,"Audiences and Intents are aggregated from other dimension scores and cannot be overridden directly.")),c.dimension?e(Fe,{component:Ae,name:"score",label:"Score",disabled:a,max:f.max,step:f.step,caption:`Range: 0 - ${f.max} in increments of ${f.step}`}):null,e(x,{disabled:a,css:{marginBottom:"2rem"}},y?e(_,null,e(G,{title:`Impacted Dimensions (${Object.keys(v).length})`},e(P,{preemptiveOverrides:g,dimensionIndex:i,dimensions:v,disableEditOverride:!0}))):null,e(Mt,{type:"submit",css:h.submitButton,disabled:a},"Save"),e(H,{route:"/overrides",css:h.cancelButton},"Cancel")))})};import{useState as Nt}from"react";import{useState as At,useEffect as Bt}from"react";import{Button as Qt,Input as Ft}from"@uniformdev/design-system";var qt=({name:t,value:r,submit:n})=>{let[o,i]=At(r!=null?r:"");return Bt(()=>{i(r!=null?r:"")},[r]),e("div",{css:{display:"flex",gap:"var(--spacing-sm)"}},e(Ft,{type:"text",css:[Ie],name:t,value:o,onChange:p=>{i(p.target.value)}}),e(Qt,{buttonType:"primary",disabled:o===r,size:"sm",onClick:()=>n(t,o!=null?o:"")},"Save"))},qe=qt;import{Button as Ne,InputSelect as Zt}from"@uniformdev/design-system";var Ze=({...t})=>{let{state:{data:{quirks:r}},quirksIndex:{index:n},settings:o,saveSettings:i,actions:s}=t,[d,p]=Nt(""),m;d&&(m=n[d]);let u=async(a,c)=>{var g,f,y;p("");let l={...o,quirkOverrides:{...o.quirkOverrides,[a]:{initial:(y=(f=(g=o.quirkOverrides)==null?void 0:g[a])==null?void 0:f.initial)!=null?y:r[a],override:c}}};await i(l);let v=oe({quirks:r,quirkOverrides:l.quirkOverrides});await s.update({quirks:v})};return e(b.Fragment,null,e("article",{css:[h.page,h.quirks]},e("h1",{css:h.title},"Quirks"),e("p",{css:h.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(q,null,e(j,{width:"30%"},"Key"),e(j,{width:"50%"},"Value"),e(j,{width:"20%"},""))),e(X,null,Object.values(n).map(({name:a,value:c,id:l})=>{var f,y,C;let v=(y=(f=o.quirkOverrides)==null?void 0:f[a])==null?void 0:y.initial,g=[];return m&&m.options&&(g=m.options.map(w=>({value:w.value,label:w.name}))),e(q,{key:l,border:"bottom"},e(O,null,e("strong",null,a)),e(O,null,d!==l?e("div",{onClick:()=>{p(l)}},v?e("div",null,e("s",null,v)):null,c):null,d===l&&m&&e(b.Fragment,null,m.options?e(Zt,{showLabel:!1,label:`Change ${a}`,defaultOption:`Change ${a}`,name:l,onChange:w=>u(w.target.name,w.target.value),options:g}):e(qe,{name:l,value:c,submit:u}))),e(O,null,d?null:(C=o.quirkOverrides)!=null&&C[l]?e(Ne,{buttonType:"ghost",onClick:()=>{Le({quirk:l,settings:o,saveSettings:i,actions:s})}},e("small",null,"Clear Override")):e(Ne,{buttonType:"ghost",onClick:()=>{p(l)}},e("small",null,"Override"))))}))):e(A,{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 ze}from"@uniformdev/design-system";import{Switch as Ue}from"@uniformdev/design-system";var _e=({settings:t,saveSettings:r,actions:n,state:{data:o},clearAllExtensionData:i})=>e("article",{css:[h.page,{display:"flex",flexDirection:"column",gap:"var(--spacing-base)"}]},e("h1",{css:h.title},"Settings"),e(x,null,e(B,null,"Data Connection"),e(ze,{buttonType:"tertiary",onClick:()=>{r({...t,route:"/connect"})}},"Manage Connection to Uniform")),e(x,null,e(B,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(x,null,e(B,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"})})),e(x,null,e(B,null,"Clear extension storage"),e(ze,{onClick:()=>{i()}},"Clear"),e("p",null,e("small",null,"May be necessary when you have multiple different sites on the same domain name (e.g. http://localhost:3000) and there are some conflicts or other unexpected behaviour."))));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})},i=t.route==="/connect",s=!(t!=null&&t.apiKey);return!t.ignoreApiKeyPrompt&&s&&!i?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(Ge,{buttonType:"secondary",onClick:n},"Connect this site"),e(Ge,{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 $e,UncachedDimensionClient 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:i,error:s,value:d}=_t(async()=>{if(!r||!n)return p;let u=(await new Ut({projectId:n,apiKey:r,apiHost:t||void 0}).get()).dimensions,a={};return u.map(c=>{var l,v,g,f,y,C,w,R;if(a[c.dim]={...zt(c),cap:c.cap,str:(f=(g=(v=(l=o==null?void 0:o.project.pz)==null?void 0:l.sig)==null?void 0:v[c.dim])==null?void 0:g.str)!=null?f:50},a[c.dim].type==="Enrichment"){let V=c.dim.split("_")[0];a[c.dim].cap=(R=(w=(C=(y=o==null?void 0:o.project.pz)==null?void 0:y.enr)==null?void 0:C[V])==null?void 0:w.cap)!=null?R:100}}),a},[t,r,n]),p=Ke.useMemo(()=>{var u,a,c,l;let m={};return o&&(Object.entries((a=(u=o==null?void 0:o.project.pz)==null?void 0:u.sig)!=null?a:{}).map(([v,g])=>{let f=$e(v,o);f&&(m[v]={...g,...f})}),Object.entries((l=(c=o==null?void 0:o.project.pz)==null?void 0:c.enr)!=null?l:{}).map(([v,g])=>{var C;let f=$e(v,o),y={cap:(C=g.cap)!=null?C:100,str:10};f&&(m[v]={...f,cap:y.cap,str:y.str})}),d&&Object.entries(d).map(([v,g])=>{m[v]={...m[v],...g}})),m},[o,d]);return{loading:i,error:s,index:p}}import{useMemo as Gt}from"react";import{UncachedQuirkClient as $t}from"@uniformdev/context/api";import{useAsync as Kt}from"react-use";function Ye({apiHost:t,apiKey:r,projectId:n},o){let{loading:i,error:s,value:d}=Kt(async()=>{if(!r||!n)return{};let u=await new $t({projectId:n,apiKey:r,apiHost:t||void 0}).get(),a={};return u.quirks.map(c=>{a[c.id]={...c,value:o[c.id]}}),a},[t,r,n]),p=Gt(()=>{let m={};return Object.entries(o).map(([u,a])=>m[u]={value:a,id:u,name:u}),d&&Object.entries(d).map(([u,a])=>m[u]={...a,value:o[u]}),m},[o,d]);return{loading:i,error:s,index:p}}import{css as et}from"@emotion/react";import{Theme as so}from"@uniformdev/design-system";function ne(){return e("style",null,`
|
|
418
418
|
:root {
|
|
419
419
|
--site-width: 700px;
|
|
420
420
|
|
|
@@ -424,7 +424,7 @@ to {
|
|
|
424
424
|
|
|
425
425
|
--min-height: 450px;
|
|
426
426
|
}
|
|
427
|
-
`)}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:h.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,
|
|
427
|
+
`)}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:h.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,UncachedManifestClient as eo}from"@uniformdev/context/api";import{Field as de,Form as to,Formik as oo}from"formik";import*as k from"react";import{ErrorMessage as ro,Input as no,Button as F}from"@uniformdev/design-system";function Xe(t){let[r,n]=k.useState(t.currentData?"c":"qc"),[o,i]=k.useState(void 0),[s,d]=k.useState(void 0),p=k.useCallback(async a=>{let c=new eo(a);i(void 0);try{let l=await c.get({preview:!0});return d({manifest:l,target:a}),l}catch(l){if(l instanceof jt){l.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(l.errorMessage);return}if("message"in l){l.message==="Failed to fetch"?i("A network error occurred. Ensure the API host is valid."):i(l.message);return}i(JSON.stringify(l,null,2));return}},[]);k.useEffect(()=>{!t.currentData||p(t.currentData)},[p,t.currentData]);let m=async a=>{await p(a)&&(n("c"),await t.onConnect(a))},u=()=>{confirm("Disconnect from Uniform? Make sure to save your API key if you want to reconnect.")&&(n("qc"),d(void 0),i(void 0),t.onConnect(null))};return e("div",null,o?e(k.Fragment,null,e(ro,{message:o}),e(F,{buttonType:"secondary",type:"button",onClick:u},"Clear old/broken settings")):null,r==="qc"||r==="mc"?e(io,{...t,state:r,setState:n,onConnect:m}):e("div",null,s?e(k.Fragment,null,e("p",null,"Connected to"," ",e("a",{href:`${s==null?void 0:s.target.apiHost}/projects/${s==null?void 0:s.target.projectId}`,target:"_blank",rel:"noopener noreferrer",css:{textDecoration:"underline"}},e("strong",null,s==null?void 0:s.manifest.project.name))," ",e("small",null,"(",s==null?void 0:s.manifest.project.id,")")),e(F,{buttonType:"secondary",type:"button",onClick:u},"Disconnect")):null))}function io({setState:t,state:r,currentData:n,onConnect:o}){var i,s,d;return e("div",null,e(oo,{initialValues:{apiHost:(i=n==null?void 0:n.apiHost)!=null?i:"https://uniform.app",apiKey:(s=n==null?void 0:n.apiKey)!=null?s:"",projectId:(d=n==null?void 0:n.projectId)!=null?d:"",qc:""},onSubmit:o},({setFieldValue:p,setFieldError:m,errors:{qc:u},isSubmitting:a})=>e(to,null,e("fieldset",{css:{display:"flex",flexDirection:"column",gap:"var(--spacing-base)"}},r==="qc"?e(k.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:c=>{try{let l=Xt(c.currentTarget.value);p("apiHost",l.apiHost),p("apiKey",l.apiKey),p("projectId",l.projectId)}catch(l){m("qc",l.message)}}})),e("section",{css:{display:"flex",gap:"var(--spacing-sm)"}},e(F,{type:"submit",buttonType:"primary",disabled:a},a?"Verifying...":"Connect"),e(F,{type:"button",buttonType:"ghost",onClick:()=>t("mc"),disabled:a},"Connect Manually"))):e(k.Fragment,null,e("div",null,e(de,{component:re,label:"API Key",name:"apiKey",caption:"Generate an API key in your Uniform team settings."})),e("div",null,e(de,{component:re,label:"Project ID",name:"projectId",caption:"Available to copy after generating an API key"})),e("div",null,e(de,{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(F,{type:"submit",buttonType:"primary",disabled:a},a?"Verifying...":"Connect"),e(F,{type:"button",buttonType:"ghost",onClick:()=>t("qc"),disabled:a},"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:h.page},e("h1",{css:h.title},"Connect to a Uniform Project"),e("p",{css:h.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`
|
|
428
428
|
background: var(--white);
|
|
429
429
|
padding: var(--spacing-base);
|
|
430
430
|
overflow-y: auto;
|
package/dist/index.js
CHANGED
|
@@ -414,7 +414,7 @@ to {
|
|
|
414
414
|
font-weight: var(--fw-bold);
|
|
415
415
|
border-bottom: 1px solid var(--gray-400);
|
|
416
416
|
width: 100%;
|
|
417
|
-
`},t);var pe=require("@uniformdev/context");function dt({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 d={...{...o.scores}};return Object.entries(d).forEach(([p,m])=>{i[p]===m&&delete d[p]}),d}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 s=(p=t[o])!=null?p:0;if(s===i.override)return;let d=i.override-s;n.push({type:"modscoreS",data:{dimension:o,delta:d}})}),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 mt=require("@uniformdev/design-system");var De=t=>({field:r,form:n,meta:o,...i})=>(0,e.jsx)(t,{...r,...i,errorMessage:n.errors[r.name]});var ue=require("@uniformdev/design-system"),ge=De(ue.Input),pt=De(ue.InputSelect);var eo=z.object({dimension:z.string(),score:z.number()}),Se=({settings:t,saveSettings:r,state:n,actions:o,dimensionIndex:{index:i}})=>{var m,u;let s=t.route?[...t.route.matchAll(/overrides\/(?!.*add)(\w+)?/g)]:[],d=s[0]?s[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(([,a])=>a.type!=="Audience"&&a.type!=="Intent").map(([a,c])=>{let l=c.type?`${c.type}: `:"",v=c.category?`${c.category} - `:"",g=`${l}${v}${c.name}`;return{value:a,label:g}});return p.unshift({value:"",label:"Choose dimension to override"}),(0,e.jsx)(Q.Formik,{initialValues:{dimension:d,score:(u=n.scores[d])!=null?u:0},validate:a=>{let c={};return(a.score===n.scores[a.dimension]||a.score===0&&!n.scores[d])&&(c.score="You have to modify current score value"),c},validationSchema:eo,enableReinitialize:!0,validateOnChange:!1,validateOnBlur:!1,onSubmit:async a=>{var f,y,C,w,H,M;let c=(y=(f=i[a.dimension])==null?void 0:f.cap)!=null?y:0,l=Math.min(a.score,c),v={...t,scoreOverrides:{...t.scoreOverrides,[a.dimension]:{initial:(M=(H=(w=(C=t.scoreOverrides)==null?void 0:C[a.dimension])==null?void 0:w.initial)!=null?H:n.scores[a.dimension])!=null?M:0,override:l}},route:"/overrides"};await r(v);let g=_({scores:n.scores,scoreOverrides:v.scoreOverrides});o.rawUpdate(g)}},({isSubmitting:a,values:c,setFieldValue:l})=>{var C;let v=dt({manifest:n.manifest,visitor:n.data,override:{type:"modscore",data:{dimension:c.dimension,delta:c.score-((C=n.scores[c.dimension])!=null?C:0)}}}),g=Object.entries(n.scores).reduce((w,[H,M])=>(w[H]={initial:M,override:M},w),{}),f={max:100,step:50};i[c.dimension]&&(f.max=i[c.dimension].cap,f.step=i[c.dimension].str);let y=c.score&&Object.keys(v).length>0;return(0,e.jsx)(Q.Form,{css:h.page},(0,e.jsx)("h1",{css:h.title},"Override Dimension"),(0,e.jsx)(Q.Field,{component:pt,label:"Dimension",id:"dimension",name:"dimension",options:p,disabled:a,onChange:w=>{l("score",0,!1),l("dimension",w.target.value)}}),(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.")),c.dimension?(0,e.jsx)(Q.Field,{component:at,name:"score",label:"Score",disabled:a,max:f.max,step:f.step,caption:`Range: 0 - ${f.max} in increments of ${f.step}`}):null,(0,e.jsx)(P,{disabled:a,css:{marginBottom:"2rem"}},y?(0,e.jsx)(X,null,(0,e.jsx)(j,{title:`Impacted Dimensions (${Object.keys(v).length})`},(0,e.jsx)(B,{preemptiveOverrides:g,dimensionIndex:i,dimensions:v,disableEditOverride:!0}))):null,(0,e.jsx)(mt.Button,{type:"submit",css:h.submitButton,disabled:a},"Save"),(0,e.jsx)(q,{route:"/overrides",css:h.cancelButton},"Cancel")))})};var gt=require("react");var ve=require("react"),fe=require("@uniformdev/design-system");var to=({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:[rt],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"))},ut=to;var G=require("@uniformdev/design-system"),vt=({...t})=>{let{state:{data:{quirks:r}},quirksIndex:{index:n},settings:o,saveSettings:i,actions:s}=t,[d,p]=(0,gt.useState)(""),m;d&&(m=n[d]);let u=async(a,c)=>{var g,f,y;p("");let l={...o,quirkOverrides:{...o.quirkOverrides,[a]:{initial:(y=(f=(g=o.quirkOverrides)==null?void 0:g[a])==null?void 0:f.initial)!=null?y:r[a],override:c}}};await i(l);let v=me({quirks:r,quirkOverrides:l.quirkOverrides});await s.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)(Ue,null,(0,e.jsx)(U,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:a,value:c,id:l})=>{var f,y,C;let v=(y=(f=o.quirkOverrides)==null?void 0:f[a])==null?void 0:y.initial,g=[];return m&&m.options&&(g=m.options.map(w=>({value:w.value,label:w.name}))),(0,e.jsx)(U,{key:l,border:"bottom"},(0,e.jsx)(R,null,(0,e.jsx)("strong",null,a)),(0,e.jsx)(R,null,d!==l?(0,e.jsx)("div",{onClick:()=>{p(l)}},v?(0,e.jsx)("div",null,(0,e.jsx)("s",null,v)):null,c):null,d===l&&m&&(0,e.jsx)(b.Fragment,null,m.options?(0,e.jsx)(G.InputSelect,{showLabel:!1,label:`Change ${a}`,defaultOption:`Change ${a}`,name:l,onChange:w=>u(w.target.name,w.target.value),options:g}):(0,e.jsx)(ut,{name:l,value:c,submit:u}))),(0,e.jsx)(R,null,d?null:(C=o.quirkOverrides)!=null&&C[l]?(0,e.jsx)(G.Button,{buttonType:"ghost",onClick:()=>{Je({quirk:l,settings:o,saveSettings:i,actions:s})}},(0,e.jsx)("small",null,"Clear Override")):(0,e.jsx)(G.Button,{buttonType:"ghost",onClick:()=>{p(l)}},(0,e.jsx)("small",null,"Override"))))}))):(0,e.jsx)(N,{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 Le=require("@uniformdev/design-system"),Oe=require("@uniformdev/design-system"),ft=({settings:t,saveSettings:r,actions:n,state:{data:o},clearAllExtensionData:i})=>(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)(P,null,(0,e.jsx)(Z,null,"Data Connection"),(0,e.jsx)(Le.Button,{buttonType:"tertiary",onClick:()=>{r({...t,route:"/connect"})}},"Manage Connection to Uniform")),(0,e.jsx)(P,null,(0,e.jsx)(Z,null,"Storage Consent"),(0,e.jsx)(Oe.Switch,{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})}}),(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)(P,null,(0,e.jsx)(Z,null,"Logging"),(0,e.jsx)(Oe.Switch,{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"})})),(0,e.jsx)(P,null,(0,e.jsx)(Z,null,"Clear extension storage"),(0,e.jsx)(Le.Button,{onClick:()=>{i()}},"Clear"),(0,e.jsx)("p",null,(0,e.jsx)("small",null,"May be necessary when you have multiple different sites on the same domain name (e.g. http://localhost:3000) and there are some conflicts or other unexpected behaviour."))));var xe=require("@uniformdev/design-system");var Re=({settings:t,saveSettings:r})=>{let n=()=>{r({...t,route:"/connect"})},o=()=>{r({...t,ignoreApiKeyPrompt:!0})},i=t.route==="/connect",s=!(t!=null&&t.apiKey);return!t.ignoreApiKeyPrompt&&s&&!i?(0,e.jsx)("div",{css:[ee,Ze]},(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)(xe.Button,{buttonType:"secondary",onClick:n},"Connect this site"),(0,e.jsx)(xe.Button,{buttonType:"ghost",onClick:o},"Skip for now")),(0,e.jsx)("button",{type:"button",css:ze,title:"close",onClick:o},(0,e.jsx)("span",{hidden:!0},"Close"))):null};var F=require("@uniformdev/context/api"),ht=require("react-use"),bt=O(require("react"));function yt({apiHost:t,apiKey:r,projectId:n},o){let{loading:i,error:s,value:d}=(0,ht.useAsync)(async()=>{if(!r||!n)return p;let u=(await new F.DimensionClient({projectId:n,apiKey:r,apiHost:t||void 0}).get()).dimensions,a={};return u.map(c=>{var l,v,g,f,y,C,w,H;if(a[c.dim]={...(0,F.computeDimensionDefinitionDisplayData)(c),cap:c.cap,str:(f=(g=(v=(l=o==null?void 0:o.project.pz)==null?void 0:l.sig)==null?void 0:v[c.dim])==null?void 0:g.str)!=null?f:50},a[c.dim].type==="Enrichment"){let M=c.dim.split("_")[0];a[c.dim].cap=(H=(w=(C=(y=o==null?void 0:o.project.pz)==null?void 0:y.enr)==null?void 0:C[M])==null?void 0:w.cap)!=null?H:100}}),a},[t,r,n]),p=bt.useMemo(()=>{var u,a,c,l;let m={};return o&&(Object.entries((a=(u=o==null?void 0:o.project.pz)==null?void 0:u.sig)!=null?a:{}).map(([v,g])=>{let f=(0,F.computeDimensionDisplayData)(v,o);f&&(m[v]={...g,...f})}),Object.entries((l=(c=o==null?void 0:o.project.pz)==null?void 0:c.enr)!=null?l:{}).map(([v,g])=>{var C;let f=(0,F.computeDimensionDisplayData)(v,o),y={cap:(C=g.cap)!=null?C:100,str:10};f&&(m[v]={...f,cap:y.cap,str:y.str})}),d&&Object.entries(d).map(([v,g])=>{m[v]={...m[v],...g}})),m},[o,d]);return{loading:i,error:s,index:p}}var Ct=require("react"),wt=require("@uniformdev/context/api"),kt=require("react-use");function Tt({apiHost:t,apiKey:r,projectId:n},o){let{loading:i,error:s,value:d}=(0,kt.useAsync)(async()=>{if(!r||!n)return{};let u=await new wt.QuirkClient({projectId:n,apiKey:r,apiHost:t||void 0}).get(),a={};return u.quirks.map(c=>{a[c.id]={...c,value:o[c.id]}}),a},[t,r,n]),p=(0,Ct.useMemo)(()=>{let m={};return Object.entries(o).map(([u,a])=>m[u]={value:a,id:u,name:u}),d&&Object.entries(d).map(([u,a])=>m[u]={...a,value:o[u]}),m},[o,d]);return{loading:i,error:s,index:p}}var Ve=require("@emotion/react"),Rt=require("@uniformdev/design-system");function he(){return(0,e.jsx)("style",null,`
|
|
417
|
+
`},t);var pe=require("@uniformdev/context");function dt({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 d={...{...o.scores}};return Object.entries(d).forEach(([p,m])=>{i[p]===m&&delete d[p]}),d}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 s=(p=t[o])!=null?p:0;if(s===i.override)return;let d=i.override-s;n.push({type:"modscoreS",data:{dimension:o,delta:d}})}),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 mt=require("@uniformdev/design-system");var De=t=>({field:r,form:n,meta:o,...i})=>(0,e.jsx)(t,{...r,...i,errorMessage:n.errors[r.name]});var ue=require("@uniformdev/design-system"),ge=De(ue.Input),pt=De(ue.InputSelect);var eo=z.object({dimension:z.string(),score:z.number()}),Se=({settings:t,saveSettings:r,state:n,actions:o,dimensionIndex:{index:i}})=>{var m,u;let s=t.route?[...t.route.matchAll(/overrides\/(?!.*add)(\w+)?/g)]:[],d=s[0]?s[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(([,a])=>a.type!=="Audience"&&a.type!=="Intent").map(([a,c])=>{let l=c.type?`${c.type}: `:"",v=c.category?`${c.category} - `:"",g=`${l}${v}${c.name}`;return{value:a,label:g}});return p.unshift({value:"",label:"Choose dimension to override"}),(0,e.jsx)(Q.Formik,{initialValues:{dimension:d,score:(u=n.scores[d])!=null?u:0},validate:a=>{let c={};return(a.score===n.scores[a.dimension]||a.score===0&&!n.scores[d])&&(c.score="You have to modify current score value"),c},validationSchema:eo,enableReinitialize:!0,validateOnChange:!1,validateOnBlur:!1,onSubmit:async a=>{var f,y,C,w,H,M;let c=(y=(f=i[a.dimension])==null?void 0:f.cap)!=null?y:0,l=Math.min(a.score,c),v={...t,scoreOverrides:{...t.scoreOverrides,[a.dimension]:{initial:(M=(H=(w=(C=t.scoreOverrides)==null?void 0:C[a.dimension])==null?void 0:w.initial)!=null?H:n.scores[a.dimension])!=null?M:0,override:l}},route:"/overrides"};await r(v);let g=_({scores:n.scores,scoreOverrides:v.scoreOverrides});o.rawUpdate(g)}},({isSubmitting:a,values:c,setFieldValue:l})=>{var C;let v=dt({manifest:n.manifest,visitor:n.data,override:{type:"modscore",data:{dimension:c.dimension,delta:c.score-((C=n.scores[c.dimension])!=null?C:0)}}}),g=Object.entries(n.scores).reduce((w,[H,M])=>(w[H]={initial:M,override:M},w),{}),f={max:100,step:50};i[c.dimension]&&(f.max=i[c.dimension].cap,f.step=i[c.dimension].str);let y=c.score&&Object.keys(v).length>0;return(0,e.jsx)(Q.Form,{css:h.page},(0,e.jsx)("h1",{css:h.title},"Override Dimension"),(0,e.jsx)(Q.Field,{component:pt,label:"Dimension",id:"dimension",name:"dimension",options:p,disabled:a,onChange:w=>{l("score",0,!1),l("dimension",w.target.value)}}),(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.")),c.dimension?(0,e.jsx)(Q.Field,{component:at,name:"score",label:"Score",disabled:a,max:f.max,step:f.step,caption:`Range: 0 - ${f.max} in increments of ${f.step}`}):null,(0,e.jsx)(P,{disabled:a,css:{marginBottom:"2rem"}},y?(0,e.jsx)(X,null,(0,e.jsx)(j,{title:`Impacted Dimensions (${Object.keys(v).length})`},(0,e.jsx)(B,{preemptiveOverrides:g,dimensionIndex:i,dimensions:v,disableEditOverride:!0}))):null,(0,e.jsx)(mt.Button,{type:"submit",css:h.submitButton,disabled:a},"Save"),(0,e.jsx)(q,{route:"/overrides",css:h.cancelButton},"Cancel")))})};var gt=require("react");var ve=require("react"),fe=require("@uniformdev/design-system");var to=({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:[rt],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"))},ut=to;var G=require("@uniformdev/design-system"),vt=({...t})=>{let{state:{data:{quirks:r}},quirksIndex:{index:n},settings:o,saveSettings:i,actions:s}=t,[d,p]=(0,gt.useState)(""),m;d&&(m=n[d]);let u=async(a,c)=>{var g,f,y;p("");let l={...o,quirkOverrides:{...o.quirkOverrides,[a]:{initial:(y=(f=(g=o.quirkOverrides)==null?void 0:g[a])==null?void 0:f.initial)!=null?y:r[a],override:c}}};await i(l);let v=me({quirks:r,quirkOverrides:l.quirkOverrides});await s.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)(Ue,null,(0,e.jsx)(U,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:a,value:c,id:l})=>{var f,y,C;let v=(y=(f=o.quirkOverrides)==null?void 0:f[a])==null?void 0:y.initial,g=[];return m&&m.options&&(g=m.options.map(w=>({value:w.value,label:w.name}))),(0,e.jsx)(U,{key:l,border:"bottom"},(0,e.jsx)(R,null,(0,e.jsx)("strong",null,a)),(0,e.jsx)(R,null,d!==l?(0,e.jsx)("div",{onClick:()=>{p(l)}},v?(0,e.jsx)("div",null,(0,e.jsx)("s",null,v)):null,c):null,d===l&&m&&(0,e.jsx)(b.Fragment,null,m.options?(0,e.jsx)(G.InputSelect,{showLabel:!1,label:`Change ${a}`,defaultOption:`Change ${a}`,name:l,onChange:w=>u(w.target.name,w.target.value),options:g}):(0,e.jsx)(ut,{name:l,value:c,submit:u}))),(0,e.jsx)(R,null,d?null:(C=o.quirkOverrides)!=null&&C[l]?(0,e.jsx)(G.Button,{buttonType:"ghost",onClick:()=>{Je({quirk:l,settings:o,saveSettings:i,actions:s})}},(0,e.jsx)("small",null,"Clear Override")):(0,e.jsx)(G.Button,{buttonType:"ghost",onClick:()=>{p(l)}},(0,e.jsx)("small",null,"Override"))))}))):(0,e.jsx)(N,{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 Le=require("@uniformdev/design-system"),Oe=require("@uniformdev/design-system"),ft=({settings:t,saveSettings:r,actions:n,state:{data:o},clearAllExtensionData:i})=>(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)(P,null,(0,e.jsx)(Z,null,"Data Connection"),(0,e.jsx)(Le.Button,{buttonType:"tertiary",onClick:()=>{r({...t,route:"/connect"})}},"Manage Connection to Uniform")),(0,e.jsx)(P,null,(0,e.jsx)(Z,null,"Storage Consent"),(0,e.jsx)(Oe.Switch,{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})}}),(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)(P,null,(0,e.jsx)(Z,null,"Logging"),(0,e.jsx)(Oe.Switch,{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"})})),(0,e.jsx)(P,null,(0,e.jsx)(Z,null,"Clear extension storage"),(0,e.jsx)(Le.Button,{onClick:()=>{i()}},"Clear"),(0,e.jsx)("p",null,(0,e.jsx)("small",null,"May be necessary when you have multiple different sites on the same domain name (e.g. http://localhost:3000) and there are some conflicts or other unexpected behaviour."))));var xe=require("@uniformdev/design-system");var Re=({settings:t,saveSettings:r})=>{let n=()=>{r({...t,route:"/connect"})},o=()=>{r({...t,ignoreApiKeyPrompt:!0})},i=t.route==="/connect",s=!(t!=null&&t.apiKey);return!t.ignoreApiKeyPrompt&&s&&!i?(0,e.jsx)("div",{css:[ee,Ze]},(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)(xe.Button,{buttonType:"secondary",onClick:n},"Connect this site"),(0,e.jsx)(xe.Button,{buttonType:"ghost",onClick:o},"Skip for now")),(0,e.jsx)("button",{type:"button",css:ze,title:"close",onClick:o},(0,e.jsx)("span",{hidden:!0},"Close"))):null};var F=require("@uniformdev/context/api"),ht=require("react-use"),bt=O(require("react"));function yt({apiHost:t,apiKey:r,projectId:n},o){let{loading:i,error:s,value:d}=(0,ht.useAsync)(async()=>{if(!r||!n)return p;let u=(await new F.UncachedDimensionClient({projectId:n,apiKey:r,apiHost:t||void 0}).get()).dimensions,a={};return u.map(c=>{var l,v,g,f,y,C,w,H;if(a[c.dim]={...(0,F.computeDimensionDefinitionDisplayData)(c),cap:c.cap,str:(f=(g=(v=(l=o==null?void 0:o.project.pz)==null?void 0:l.sig)==null?void 0:v[c.dim])==null?void 0:g.str)!=null?f:50},a[c.dim].type==="Enrichment"){let M=c.dim.split("_")[0];a[c.dim].cap=(H=(w=(C=(y=o==null?void 0:o.project.pz)==null?void 0:y.enr)==null?void 0:C[M])==null?void 0:w.cap)!=null?H:100}}),a},[t,r,n]),p=bt.useMemo(()=>{var u,a,c,l;let m={};return o&&(Object.entries((a=(u=o==null?void 0:o.project.pz)==null?void 0:u.sig)!=null?a:{}).map(([v,g])=>{let f=(0,F.computeDimensionDisplayData)(v,o);f&&(m[v]={...g,...f})}),Object.entries((l=(c=o==null?void 0:o.project.pz)==null?void 0:c.enr)!=null?l:{}).map(([v,g])=>{var C;let f=(0,F.computeDimensionDisplayData)(v,o),y={cap:(C=g.cap)!=null?C:100,str:10};f&&(m[v]={...f,cap:y.cap,str:y.str})}),d&&Object.entries(d).map(([v,g])=>{m[v]={...m[v],...g}})),m},[o,d]);return{loading:i,error:s,index:p}}var Ct=require("react"),wt=require("@uniformdev/context/api"),kt=require("react-use");function Tt({apiHost:t,apiKey:r,projectId:n},o){let{loading:i,error:s,value:d}=(0,kt.useAsync)(async()=>{if(!r||!n)return{};let u=await new wt.UncachedQuirkClient({projectId:n,apiKey:r,apiHost:t||void 0}).get(),a={};return u.quirks.map(c=>{a[c.id]={...c,value:o[c.id]}}),a},[t,r,n]),p=(0,Ct.useMemo)(()=>{let m={};return Object.entries(o).map(([u,a])=>m[u]={value:a,id:u,name:u}),d&&Object.entries(d).map(([u,a])=>m[u]={...a,value:o[u]}),m},[o,d]);return{loading:i,error:s,index:p}}var Ve=require("@emotion/react"),Rt=require("@uniformdev/design-system");function he(){return(0,e.jsx)("style",null,`
|
|
418
418
|
:root {
|
|
419
419
|
--site-width: 700px;
|
|
420
420
|
|
|
@@ -424,7 +424,7 @@ to {
|
|
|
424
424
|
|
|
425
425
|
--min-height: 450px;
|
|
426
426
|
}
|
|
427
|
-
`)}var be=require("react"),Dt=require("react-use");var St=()=>{let[t,r]=(0,be.useState)(!1),n=(0,Dt.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 Lt=require("@uniformdev/context"),ye=require("@uniformdev/context/api"),I=require("formik"),T=O(require("react")),D=require("@uniformdev/design-system");function Ot(t){let[r,n]=T.useState(t.currentData?"c":"qc"),[o,i]=T.useState(void 0),[s,d]=T.useState(void 0),p=T.useCallback(async a=>{let c=new ye.
|
|
427
|
+
`)}var be=require("react"),Dt=require("react-use");var St=()=>{let[t,r]=(0,be.useState)(!1),n=(0,Dt.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 Lt=require("@uniformdev/context"),ye=require("@uniformdev/context/api"),I=require("formik"),T=O(require("react")),D=require("@uniformdev/design-system");function Ot(t){let[r,n]=T.useState(t.currentData?"c":"qc"),[o,i]=T.useState(void 0),[s,d]=T.useState(void 0),p=T.useCallback(async a=>{let c=new ye.UncachedManifestClient(a);i(void 0);try{let l=await c.get({preview:!0});return d({manifest:l,target:a}),l}catch(l){if(l instanceof ye.ApiClientError){l.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(l.errorMessage);return}if("message"in l){l.message==="Failed to fetch"?i("A network error occurred. Ensure the API host is valid."):i(l.message);return}i(JSON.stringify(l,null,2));return}},[]);T.useEffect(()=>{!t.currentData||p(t.currentData)},[p,t.currentData]);let m=async a=>{await p(a)&&(n("c"),await t.onConnect(a))},u=()=>{confirm("Disconnect from Uniform? Make sure to save your API key if you want to reconnect.")&&(n("qc"),d(void 0),i(void 0),t.onConnect(null))};return(0,e.jsx)("div",null,o?(0,e.jsx)(T.Fragment,null,(0,e.jsx)(D.ErrorMessage,{message:o}),(0,e.jsx)(D.Button,{buttonType:"secondary",type:"button",onClick:u},"Clear old/broken settings")):null,r==="qc"||r==="mc"?(0,e.jsx)(oo,{...t,state:r,setState:n,onConnect:m}):(0,e.jsx)("div",null,s?(0,e.jsx)(T.Fragment,null,(0,e.jsx)("p",null,"Connected to"," ",(0,e.jsx)("a",{href:`${s==null?void 0:s.target.apiHost}/projects/${s==null?void 0:s.target.projectId}`,target:"_blank",rel:"noopener noreferrer",css:{textDecoration:"underline"}},(0,e.jsx)("strong",null,s==null?void 0:s.manifest.project.name))," ",(0,e.jsx)("small",null,"(",s==null?void 0:s.manifest.project.id,")")),(0,e.jsx)(D.Button,{buttonType:"secondary",type:"button",onClick:u},"Disconnect")):null))}function oo({setState:t,state:r,currentData:n,onConnect:o}){var i,s,d;return(0,e.jsx)("div",null,(0,e.jsx)(I.Formik,{initialValues:{apiHost:(i=n==null?void 0:n.apiHost)!=null?i:"https://uniform.app",apiKey:(s=n==null?void 0:n.apiKey)!=null?s:"",projectId:(d=n==null?void 0:n.projectId)!=null?d:"",qc:""},onSubmit:o},({setFieldValue:p,setFieldError:m,errors:{qc:u},isSubmitting:a})=>(0,e.jsx)(I.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)(D.Input,{placeholder:"Paste Quick Connect Code Here",caption:"Copy the Quick Connect code after creating an API key in Uniform.",errorMessage:u,onChange:c=>{try{let l=(0,Lt.parseQuickConnect)(c.currentTarget.value);p("apiHost",l.apiHost),p("apiKey",l.apiKey),p("projectId",l.projectId)}catch(l){m("qc",l.message)}}})),(0,e.jsx)("section",{css:{display:"flex",gap:"var(--spacing-sm)"}},(0,e.jsx)(D.Button,{type:"submit",buttonType:"primary",disabled:a},a?"Verifying...":"Connect"),(0,e.jsx)(D.Button,{type:"button",buttonType:"ghost",onClick:()=>t("mc"),disabled:a},"Connect Manually"))):(0,e.jsx)(T.Fragment,null,(0,e.jsx)("div",null,(0,e.jsx)(I.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)(I.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)(I.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)(D.Button,{type:"submit",buttonType:"primary",disabled:a},a?"Verifying...":"Connect"),(0,e.jsx)(D.Button,{type:"button",buttonType:"ghost",onClick:()=>t("qc"),disabled:a},"Use Quick Connect")))))))}var xt=({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)(Ot,{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 ro=Ve.css`
|
|
428
428
|
background: var(--white);
|
|
429
429
|
padding: var(--spacing-base);
|
|
430
430
|
overflow-y: auto;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uniformdev/context-devtools",
|
|
3
|
-
"version": "16.2.1-
|
|
3
|
+
"version": "16.2.1-nuxt.252+5c8ef696a",
|
|
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.3",
|
|
33
|
-
"@uniformdev/context": "^16.2.1-
|
|
34
|
-
"@uniformdev/design-system": "^16.2.1-
|
|
33
|
+
"@uniformdev/context": "^16.2.1-nuxt.252+5c8ef696a",
|
|
34
|
+
"@uniformdev/design-system": "^16.2.1-nuxt.252+5c8ef696a",
|
|
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": "
|
|
46
|
+
"gitHead": "5c8ef696a903f69c8f4c369bd117611b9073d55d"
|
|
47
47
|
}
|