@uniformdev/context-ui 16.2.4 → 17.0.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/index.d.ts CHANGED
@@ -3,6 +3,7 @@ import * as _emotion_react from '@emotion/react';
3
3
  import React, { ReactElement, ComponentType } from 'react';
4
4
  import { DimensionDefinition, ManifestGetResponse } from '@uniformdev/context/api';
5
5
  import { EnrichmentData, VariantMatchCriteria, DimensionMatch } from '@uniformdev/context';
6
+ import * as yup from 'yup';
6
7
  import { InputComboBoxProps, InputComboBoxOption } from '@uniformdev/design-system';
7
8
  export * from '@uniformdev/design-system';
8
9
 
@@ -56,6 +57,10 @@ interface PersonalizationCriteriaStaticProps {
56
57
  }
57
58
  declare const PersonalizationCriteriaStatic: React.FC<PersonalizationCriteriaStaticProps>;
58
59
 
60
+ declare type ParameterValidationError<TValue> = TValue extends string | number | boolean ? string : {
61
+ [key in keyof TValue]: ParameterValidationError<TValue[key]> | undefined;
62
+ };
63
+ declare function convertErrorsToObj(errors: yup.ValidationError[]): ParameterValidationError<VariantMatchCriteria>;
59
64
  declare type PersonalizationCriteriaProps = {
60
65
  contextConfig: ContextConfig;
61
66
  } & Omit<PersonalizationCriteriaStaticProps, 'dimensions'>;
@@ -146,5 +151,6 @@ declare const useValidateContextConfig: (contextConfig?: ContextConfig) => UseVa
146
151
 
147
152
  declare function isEnrichmentTagData(obj: any): obj is EnrichmentData[];
148
153
  declare function isPersonalizationCriteriaData(obj: any): obj is VariantMatchCriteria;
154
+ declare function opHasRhs(op: string): boolean;
149
155
 
150
- export { ContextConfig, ContextData, ContextDataProps, CriteriaMatchMenu, CriteriaMatchMenuProps, CriteriaOperatorMenu, CriteriaOperatorMenuProps, DataContextErrorProps, DimensionMenu, DimensionMenuProps, DimensionValue, DimensionValueProps, DimensionsData, EditLink, EditLinkProps, EnrichmentTag, EnrichmentTagProps, PersonalizationCriteria, PersonalizationCriteriaProps, PersonalizationCriteriaStatic, PersonalizationCriteriaStaticProps, ProjectUIVersion, ResolvedDimensionDefinition, UseContextDataResult, UseDimensionsResult, UseValidateContextConfigResult, addEnrichmentLink, contextCriteriaMenuOperators, isEnrichmentTagData, isPersonalizationCriteriaData, useContextConfig, useContextData, useDimensions, useDimensionsDataContext, useManifest, useValidateContextConfig, validateContextConfig };
156
+ export { ContextConfig, ContextData, ContextDataProps, CriteriaMatchMenu, CriteriaMatchMenuProps, CriteriaOperatorMenu, CriteriaOperatorMenuProps, DataContextErrorProps, DimensionMenu, DimensionMenuProps, DimensionValue, DimensionValueProps, DimensionsData, EditLink, EditLinkProps, EnrichmentTag, EnrichmentTagProps, PersonalizationCriteria, PersonalizationCriteriaProps, PersonalizationCriteriaStatic, PersonalizationCriteriaStaticProps, ProjectUIVersion, ResolvedDimensionDefinition, UseContextDataResult, UseDimensionsResult, UseValidateContextConfigResult, addEnrichmentLink, contextCriteriaMenuOperators, convertErrorsToObj, isEnrichmentTagData, isPersonalizationCriteriaData, opHasRhs, useContextConfig, useContextData, useDimensions, useDimensionsDataContext, useManifest, useValidateContextConfig, validateContextConfig };
package/dist/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import{jsx as e}from"@emotion/react";import*as p from"react";import{Icon as ye}from"@uniformdev/design-system";import{CgChevronRight as De}from"react-icons/cg";import{css as he}from"@emotion/react";var Y=he`
1
+ import{jsx as e}from"@emotion/react";import*as d from"react";import{Icon as xe}from"@uniformdev/design-system";import{CgChevronRight as we}from"react-icons/cg";import{css as De}from"@emotion/react";var Q=De`
2
2
  display: flex;
3
3
  align-items: center;
4
4
  font-weight: var(--fw-bold);
@@ -9,7 +9,7 @@ import{jsx as e}from"@emotion/react";import*as p from"react";import{Icon as ye}f
9
9
  &:focus {
10
10
  text-decoration-line: underline;
11
11
  }
12
- `;var X=({linkTo:t,name:n,linkText:o=`Edit ${n} Component`})=>e("a",{css:Y,title:`Edit ${n} component definition`,rel:"noopener noreferrer",target:"_blank",href:t},o,e(ye,{icon:De,iconColor:"currentColor",size:"1.5rem"}));import j,{useMemo as Q,useState as U}from"react";import{useEffect as xe,useState as Ie}from"react";import{DimensionClient as we,computeDimensionDisplayName as Be,ApiClientError as Se}from"@uniformdev/context/api";function J(t,n,o){return t.reduce((m,a)=>{let r=n(a);if(typeof r=="undefined"||r===null)throw new Error("Objectify key selector returned undefined or null.");return m[n(a)]=o?o(a):a,m},{})}function I({apiHost:t,apiKey:n,projectId:o}){let[m,a]=Ie({loading:!1,notConfigured:!1,error:null,result:null});return xe(()=>{if(!o||!n||!t){a({notConfigured:!0,loading:!1,error:null,result:null});return}(async()=>{a({notConfigured:!1,loading:!0,error:null,result:null});try{let i=(await new we({projectId:o,apiKey:n,apiHost:t}).get()).dimensions.map(c=>({...c,displayName:Be(c)})),l={dimensions:i,dimIndex:J(i,c=>c.dim,c=>c)};a({notConfigured:!1,loading:!1,error:null,result:l})}catch(s){let i;s instanceof Se?i=s.message:i=s.toString(),a({notConfigured:!1,loading:!1,error:i,result:null});return}})()},[t,n,o]),{result:m.result,error:m.error,loading:m.loading,notConfigured:m.notConfigured}}import{getEnrichmentVectorKey as G}from"@uniformdev/context";import{Input as ee,Button as Ee,InputSelect as Me,Callout as H,Icon as W,LoadingIndicator as Pe,AddListButton as Re}from"@uniformdev/design-system";import{CgMathPlus as Oe,CgMathMinus as ke,CgCloseO as Te}from"react-icons/cg";import Z from"immer";import{css as q}from"@emotion/react";var Ve=q`
12
+ `;var Z=({linkTo:t,name:n,linkText:o=`Edit ${n} Component`})=>e("a",{css:Q,title:`Edit ${n} component definition`,rel:"noopener noreferrer",target:"_blank",href:t},o,e(xe,{icon:we,iconColor:"currentColor",size:"1.5rem"}));import ne,{useMemo as ee,useState as G}from"react";import{useEffect as Me,useState as Ee}from"react";import{computeDimensionDisplayName as Se,ApiClientError as Ve,CachedDimensionClient as Be}from"@uniformdev/context/api";function j(t,n,o){return t.reduce((s,i)=>{let r=n(i);if(typeof r=="undefined"||r===null)throw new Error("Objectify key selector returned undefined or null.");return s[n(i)]=o?o(i):i,s},{})}function w({apiHost:t,apiKey:n,projectId:o}){let[s,i]=Ee({loading:!1,notConfigured:!1,error:null,result:null});return Me(()=>{if(!o||!n||!t){i({notConfigured:!0,loading:!1,error:null,result:null});return}(async()=>{i({notConfigured:!1,loading:!0,error:null,result:null});try{let a=(await new Be({projectId:o,apiKey:n,apiHost:t}).get()).dimensions.map(p=>({...p,displayName:Se(p)})),m={dimensions:a,dimIndex:j(a,p=>p.dim,p=>p)};i({notConfigured:!1,loading:!1,error:null,result:m})}catch(l){let a;l instanceof Ve?a=l.message:a=l.toString(),i({notConfigured:!1,loading:!1,error:a,result:null});return}})()},[t,n,o]),{result:s.result,error:s.error,loading:s.loading,notConfigured:s.notConfigured}}import{getEnrichmentVectorKey as H}from"@uniformdev/context";import{Input as oe,Button as Pe,InputSelect as Oe,Callout as q,Icon as W,LoadingIndicator as Re,AddListButton as ke}from"@uniformdev/design-system";import{CgMathPlus as Te,CgMathMinus as Ne,CgCloseO as ze}from"react-icons/cg";import te from"immer";import{css as _}from"@emotion/react";var Le=_`
13
13
  flex: 2;
14
14
  display: flex;
15
15
  width: 50%;
@@ -20,7 +20,7 @@ import{jsx as e}from"@emotion/react";import*as p from"react";import{Icon as ye}f
20
20
  &:focus {
21
21
  text-decoration-line: underline;
22
22
  }
23
- `,Ot=({value:t,setValue:n,contextConfig:o,displayTitle:m=!0})=>{let{loading:a,result:r,error:s}=I(o),i=Q(()=>{if(r)return r.dimensions.filter(g=>g.category==="ENR")},[r]),l=Q(()=>{if(!t)return i;if(i)return i.filter(g=>!t.some(y=>G(y.cat,y.key)===g.dim))},[i,t]),[c,h]=U(""),[u,C]=U(50),[f,D]=U(!1),d=i==null?void 0:i.find(g=>g.dim===c),v=()=>{let[g,y]=c.split("_");x([...t!=null?t:[],{cat:g,key:y,str:u}]),h(""),C(50),D(!1)},x=g=>{let y=[];r?y=g.filter(w=>{let E=r.dimIndex[G(w.cat,w.key)];return Boolean(E)}):y=g;let S=y.length===0?null:y;n(S)};return s?e(H,{type:"danger"},s):a||r===null?e(Pe,null):e("fieldset",{className:"enrichment-tag"},m?e("div",{css:{display:"flex",justifyContent:"space-between",marginBottom:"var(--spacing-base)"}},e("legend",{css:{fontSize:"var(--fs-md)",fontWeight:"var(--fw-bold)"}},"Enrichment Tags")):null,i!=null&&i.length?!f&&!t?e(H,{title:"No enrichment tags assigned.",type:"info",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"Click"," ",e("a",{onClick:()=>D(!0),target:"_blank",rel:"noopener noreferrer",css:{textDecorationLine:"underline"}},"here")," ","to assign your first enrichment tag.")):e(j.Fragment,null,r&&e($e,{list:t!=null?t:[],setList:x,dimIndex:r.dimIndex}),f&&l&&l.length>0?e("div",{className:"add-enrichment-tag",css:{display:"flex",flexWrap:"wrap",gap:"var(--spacing-lg)",marginTop:"var(--spacing-md)",alignItems:"center"}},e("div",{css:{flexGrow:1}},e(Me,{name:"enrichment-type",label:"Enrichment Tag",showLabel:!0,value:c,options:[{label:"Select",value:""},...l.map(g=>({label:g.displayName,value:g.dim}))],onChange:g=>h(g.currentTarget.value)})),e(Le,{score:u,setValue:C,cap:d?d.cap:100,css:{flexBasis:"9rem"}}),e(Ee,{buttonType:"tertiary",size:"xl",css:{marginBottom:"var(--spacing-xs)",height:"3.5rem",margin:0,alignSelf:"flex-end"},onClick:v,disabled:!c},"Add")):null,e("div",{className:"enrichment-cta",style:{paddingTop:"10px",display:"flex",justifyContent:"space-between"}},!f&&l&&l.length>0&&t?e(Re,{className:"add-more",buttonText:"Add More",onButtonClick:()=>D(!0)}):e("a",{css:Ve,title:"none",href:"#"}),e(X,{name:"Enrichments",linkText:"Manage Enrichments",linkTo:`${o.apiHost}/projects/${encodeURIComponent(o.projectId)}/personalization/enrichments`}))):e(Ne,{contextConfig:o}))},Ne=({contextConfig:t})=>e(H,{title:"No enrichments found.",type:"caution",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"Looks like you do not have any enrichment created in your connected Uniform project. Start by creating your first enrichment"," ",e("a",{href:`${t.apiHost}/projects/${encodeURIComponent(t.projectId)}/personalization/enrichments`,target:"_blank",rel:"noopener noreferrer",css:{":hover":{textDecorationLine:"underline"}}},"here"),".")),te=(t,n=100,o=0)=>Math.max(Math.min(t,n),o),ne=q`
23
+ `,$t=({value:t,setValue:n,contextConfig:o,displayTitle:s=!0})=>{let{loading:i,result:r,error:l}=w(o),a=ee(()=>{if(r)return r.dimensions.filter(h=>h.category==="ENR")},[r]),m=ee(()=>{if(!t)return a;if(a)return a.filter(h=>!t.some(D=>H(D.cat,D.key)===h.dim))},[a,t]),[p,C]=G(""),[c,u]=G(50),[f,I]=G(!1),g=a==null?void 0:a.find(h=>h.dim===p),b=()=>{let[h,D]=p.split("_");x([...t!=null?t:[],{cat:h,key:D,str:c}]),C(""),u(50),I(!1)},x=h=>{let D=[];r?D=h.filter(M=>{let V=r.dimIndex[H(M.cat,M.key)];return Boolean(V)}):D=h;let S=D.length===0?null:D;n(S)};return l?e(q,{type:"danger"},l):i||r===null?e(Re,null):e("fieldset",{className:"enrichment-tag"},s?e("div",{css:{display:"flex",justifyContent:"space-between",marginBottom:"var(--spacing-base)"}},e("legend",{css:{fontSize:"var(--fs-md)",fontWeight:"var(--fw-bold)"}},"Enrichment Tags")):null,a!=null&&a.length?!f&&!t?e(q,{title:"No enrichment tags assigned.",type:"info",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"Click"," ",e("a",{onClick:()=>I(!0),target:"_blank",rel:"noopener noreferrer",css:{textDecorationLine:"underline"}},"here")," ","to assign your first enrichment tag.")):e(ne.Fragment,null,r&&e(Ge,{list:t!=null?t:[],setList:x,dimIndex:r.dimIndex}),f&&m&&m.length>0?e("div",{className:"add-enrichment-tag",css:{display:"flex",flexWrap:"wrap",gap:"var(--spacing-lg)",marginTop:"var(--spacing-md)",alignItems:"center"}},e("div",{css:{flexGrow:1}},e(Oe,{name:"enrichment-type",label:"Enrichment Tag",showLabel:!0,value:p,options:[{label:"Select",value:""},...m.map(h=>({label:h.displayName,value:h.dim}))],onChange:h=>C(h.currentTarget.value)})),e(Ue,{score:c,setValue:u,cap:g?g.cap:100,css:{flexBasis:"9rem"}}),e(Pe,{buttonType:"tertiary",size:"xl",css:{marginBottom:"var(--spacing-xs)",height:"3.5rem",margin:0,alignSelf:"flex-end"},onClick:b,disabled:!p},"Add")):null,e("div",{className:"enrichment-cta",style:{paddingTop:"10px",display:"flex",justifyContent:"space-between"}},!f&&m&&m.length>0&&t?e(ke,{className:"add-more",buttonText:"Add More",onButtonClick:()=>I(!0)}):e("a",{css:Le,title:"none",href:"#"}),e(Z,{name:"Enrichments",linkText:"Manage Enrichments",linkTo:`${o.apiHost}/projects/${encodeURIComponent(o.projectId)}/personalization/enrichments`}))):e($e,{contextConfig:o}))},$e=({contextConfig:t})=>e(q,{title:"No enrichments found.",type:"caution",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"Looks like you do not have any enrichment created in your connected Uniform project. Start by creating your first enrichment"," ",e("a",{href:`${t.apiHost}/projects/${encodeURIComponent(t.projectId)}/personalization/enrichments`,target:"_blank",rel:"noopener noreferrer",css:{":hover":{textDecorationLine:"underline"}}},"here"),".")),re=(t,n=100,o=0)=>Math.max(Math.min(t,n),o),ie=_`
24
24
  position: absolute;
25
25
  bottom: 0.875rem;
26
26
  left: var(--spacing-sm);
@@ -32,27 +32,27 @@ import{jsx as e}from"@emotion/react";import*as p from"react";import{Icon as ye}f
32
32
  background-color: var(--gray-100);
33
33
  border: 1px solid var(--gray-300);
34
34
  border-radius: var(--rounded-full);
35
- `,ze=q`
36
- ${ne}
35
+ `,Ae=_`
36
+ ${ie}
37
37
  left: auto;
38
38
  right: var(--spacing-sm);
39
- `,Le=({score:t,setValue:n,cap:o=100,...m})=>{let a=r=>{let s=r==="increment"?t+10:t-10;s<0&&(s=0),s>o&&(s=o),n(s)};return e("div",{css:{position:"relative"},...m},e(ee,{label:"Strength",id:"enrichment-score",type:"number",min:0,max:o,value:t,onChange:r=>n(te(Number(r.currentTarget.value)||0,o)),css:{textAlign:"center",boxSizing:"border-box"}}),e("button",{type:"button",title:"Reduce enrichment count",onClick:()=>a("decrement"),disabled:t===0,className:"scoreCounterButton",css:ne},e(W,{icon:ke,iconColor:"gray",size:"1.5rem"})),e("button",{type:"button",title:"Increase enrichment count",onClick:()=>a("increment"),className:"scoreCounterButton",css:ze},e(W,{icon:Oe,iconColor:"gray",size:"1.5rem"})))},$e=({list:t,setList:n,dimIndex:o})=>{let m=r=>{n(Z(t,s=>{s.splice(r,1)}))},a=(r,s)=>{var l;let i=(l=o[`${t[r].cat}_${t[r].key}`])==null?void 0:l.cap;n(Z(t,c=>{c[r].str=te(Number(s)||0,i)}))};return e(j.Fragment,null,t.map((r,s)=>{let i=o[G(r.cat,r.key)];if(!!i)return e("div",{css:{display:"flex",alignItems:"center",gap:"var(--spacing-base)",backgroundColor:"var(--brand-secondary-2)",boxShadow:"var(--shadow-base)",borderRadius:"var(--rounded-base)",paddingInline:"var(--spacing-base)",marginBlock:"var(--spacing-base)"},className:"selected-enrichments",key:`${r.cat}-${r.key}`},e("span",{css:{fontWeight:"var(--fw-bold)",color:i?void 0:"var(--brand-secondary-5)"}},i?i.displayName:`Enrichment '${r.cat}_${r.key}' is unknown`),e("div",{css:{marginLeft:"auto",display:"flex",alignItems:"center",border:"0 solid var(--gray-400)",borderLeftWidth:"1px",borderRightWidth:"1px",padding:"var(--spacing-sm) var(--spacing-base)",flexBasis:"9rem"}},e(ee,{type:"text",min:0,max:i.cap||100,title:"score",value:r.str,css:{textAlign:"center",width:"100px"},onChange:l=>a(s,l.currentTarget.value)})),e("button",{type:"button",title:"Delete enrichment",onClick:()=>m(s),css:{border:0}},e(W,{icon:Te,iconColor:"red",size:"1.5rem"})))}))};import{LoadingIndicator as Ze,Callout as ge}from"@uniformdev/design-system";import{css as Fe}from"@emotion/react";import{Callout as ce,InputInlineSelect as Ke,Icon as Ye,AddListButton as Xe,Paragraph as Je}from"@uniformdev/design-system";import de from"immer";import{CgCloseO as Qe}from"react-icons/cg";import{css as B}from"@emotion/react";var _="6rem",oe=B`
39
+ `,Ue=({score:t,setValue:n,cap:o=100,...s})=>{let i=r=>{let l=r==="increment"?t+10:t-10;l<0&&(l=0),l>o&&(l=o),n(l)};return e("div",{css:{position:"relative"},...s},e(oe,{label:"Strength",id:"enrichment-score",type:"number",min:0,max:o,value:t,onChange:r=>n(re(Number(r.currentTarget.value)||0,o)),css:{textAlign:"center",boxSizing:"border-box"}}),e("button",{type:"button",title:"Reduce enrichment count",onClick:()=>i("decrement"),disabled:t===0,className:"scoreCounterButton",css:ie},e(W,{icon:Ne,iconColor:"gray",size:"1.5rem"})),e("button",{type:"button",title:"Increase enrichment count",onClick:()=>i("increment"),className:"scoreCounterButton",css:Ae},e(W,{icon:Te,iconColor:"gray",size:"1.5rem"})))},Ge=({list:t,setList:n,dimIndex:o})=>{let s=r=>{n(te(t,l=>{l.splice(r,1)}))},i=(r,l)=>{var m;let a=(m=o[`${t[r].cat}_${t[r].key}`])==null?void 0:m.cap;n(te(t,p=>{p[r].str=re(Number(l)||0,a)}))};return e(ne.Fragment,null,t.map((r,l)=>{let a=o[H(r.cat,r.key)];if(!!a)return e("div",{css:{display:"flex",alignItems:"center",gap:"var(--spacing-base)",backgroundColor:"var(--brand-secondary-2)",boxShadow:"var(--shadow-base)",borderRadius:"var(--rounded-base)",paddingInline:"var(--spacing-base)",marginBlock:"var(--spacing-base)"},className:"selected-enrichments",key:`${r.cat}-${r.key}`},e("span",{css:{fontWeight:"var(--fw-bold)",color:a?void 0:"var(--brand-secondary-5)"}},a?a.displayName:`Enrichment '${r.cat}_${r.key}' is unknown`),e("div",{css:{marginLeft:"auto",display:"flex",alignItems:"center",border:"0 solid var(--gray-400)",borderLeftWidth:"1px",borderRightWidth:"1px",padding:"var(--spacing-sm) var(--spacing-base)",flexBasis:"9rem"}},e(oe,{type:"text",min:0,max:a.cap||100,title:"score",value:r.str,css:{textAlign:"center",width:"100px"},onChange:m=>i(l,m.currentTarget.value)})),e("button",{type:"button",title:"Delete enrichment",onClick:()=>s(l),css:{border:0}},e(W,{icon:ze,iconColor:"red",size:"1.5rem"})))}))};import{useState as nt}from"react";import{LoadingIndicator as ot,Callout as be}from"@uniformdev/design-system";import{css as Je}from"@emotion/react";import{Callout as ge,InputInlineSelect as Qe,Icon as Ze,AddListButton as je,Paragraph as et}from"@uniformdev/design-system";import Ce from"immer";import{CgCloseO as tt}from"react-icons/cg";import{css as E}from"@emotion/react";var F="6rem",ae=E`
40
40
  position: relative;
41
41
  padding: var(--spacing-base);
42
42
  border: 1px solid var(--gray-300);
43
43
  box-shadow: var(--shadow-base);
44
44
  background-color: white;
45
45
  border-radius: var(--rounded-base);
46
- margin-top: ${_};
46
+ margin-top: ${F};
47
47
  display: flex;
48
48
  &:before {
49
49
  content: '';
50
50
  display: block;
51
51
  width: 1px;
52
- height: ${_};
52
+ height: ${F};
53
53
  background-color: var(--gray-300);
54
54
  position: absolute;
55
- top: -${_};
55
+ top: -${F};
56
56
  left: var(--spacing-lg);
57
57
  }
58
58
  &:first-of-type {
@@ -61,21 +61,31 @@ import{jsx as e}from"@emotion/react";import*as p from"react";import{Icon as ye}f
61
61
  display: none;
62
62
  }
63
63
  }
64
- `,re=B`
64
+ `,se=E`
65
65
  display: grid;
66
66
  gap: var(--spacing-xs);
67
67
  flex-grow: 1;
68
68
  margin-right: var(--spacing-base);
69
- `,M=B`
69
+ `,B=E`
70
70
  width: 100%;
71
71
  display: flex;
72
72
  align-items: stretch;
73
- `,P=B`
73
+ `,P=E`
74
74
  height: 100%;
75
75
  width: 100%;
76
- `,Vt=B`
76
+ `,Gt=E`
77
77
  height: 100%;
78
- `;import{InputComboBox as Ue}from"@uniformdev/design-system";function R({op:t}){return e("div",{css:{background:"var(--gray-700)",color:"white",borderRadius:"100%",width:"30px",height:"30px",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"24px"}},t)}var ie=t=>{var l,c;let{data:n,getStyles:o,isDisabled:m,innerRef:a,innerProps:r}=t,[s,i]=(c=(l=n.label)==null?void 0:l.split(":"))!=null?c:[];return e("div",{css:{...o("option",t),display:"flex",alignItems:"center",gap:"var(--spacing-sm)"},ref:a,"aria-disabled":m,...r},i?e(R,{op:s}):e("div",{css:{width:"20px",height:"20px"}}),e("div",null,i!=null?i:s))};var ae=t=>{let{data:n,getStyles:o}=t;return e("div",{css:{...o("singleValue",t),width:"max-content"}},n.label.length===1?e(R,{op:n.label}):n.label)};var se=[{name:"=",description:"equals",value:"="},{name:"\u2260",description:"not equal",value:"!="},{name:">",description:"is greater than",value:">"},{name:"\u2265",description:"is greater than or equal to",value:">="},{name:"<",description:"is less than",value:"<"},{name:"\u2264",description:"is less than or equal to",value:"<="},{name:"has the strongest score",value:"+"},{name:"has the weakest score",value:"-"}];function le({onChange:t,value:n,...o}){var m,a;return e(Ue,{...o,value:{label:(a=(m=se.find(r=>r.value===n))==null?void 0:m.name)!=null?a:n,value:n},options:se.map(r=>({label:r.description?`${r.name}:${r.description}`:r.name,value:r.value})),styles:{...o.styles,valueContainer:(r,s)=>{var i,l;return{...r,padding:"var(--spacing-sm)",...(l=(i=o.styles)==null?void 0:i.valueContainer)==null?void 0:l.call(i,r,s)}},menu:(r,s)=>{var i,l;return{...r,width:"max-content",...(l=(i=o.styles)==null?void 0:i.menu)==null?void 0:l.call(i,r,s)}},control:(r,s)=>{var i,l;return{...r,border:0,...(l=(i=o.styles)==null?void 0:i.control)==null?void 0:l.call(i,r,s)}},indicatorSeparator:(r,s)=>{var i,l;return{...r,display:"none",...(l=(i=o.styles)==null?void 0:i.indicatorSeparator)==null?void 0:l.call(i,r,s)}}},onChange:r=>{r&&t(r.value)},components:{SingleValue:ae,Option:ie,...o.components}})}import{InputComboBox as We}from"@uniformdev/design-system";import{Icon as Ge}from"@uniformdev/design-system";function F(t){return{label:t.displayName,value:t.dim,isDisabled:!1}}function O(t){if(!t)return"unavailable";let[n]=t.split(":");switch(n.toLowerCase()){case"signal":return"data";case"intent":return"assign";case"audience":return"boy";default:return"user-list"}}function k(t){let n=[],o="";for(let m of t){let[a]=m.displayName.split(":");o!==a&&(n.push({label:a,options:[]}),o=a),n[n.length-1].options.push(F(m))}return n}var T=t=>{var a;let{data:n,getStyles:o,className:m}=t;return e("div",{css:{...o("groupHeading",t),textTransform:"none",fontSize:"var(--font-size-sm)"},className:m},e("small",{css:{color:"var(--gray-500)",display:"flex",alignItems:"center",gap:"var(--spacing-xs)"}},e(Ge,{icon:O((a=n.label)!=null?a:""),iconColor:"currentColor",size:16}),e("span",null,n.label)))};function V({message:t}){return t?e("div",{css:{position:"absolute",background:"white",borderRadius:"3px",fontSize:"0.8rem",color:"var(--brand-primary-2)",bottom:"calc(var(--spacing-xs) * -1)"}},t):null}var N=t=>{var u,C;let{data:n,getStyles:o,cx:m,isDisabled:a,isFocused:r,isSelected:s,className:i,innerRef:l,innerProps:c}=t,[,h]=(C=(u=n.label)==null?void 0:u.split(":"))!=null?C:[];return e("div",{css:o("option",t),className:m({option:!0,"option--is-disabled":a,"option--is-focused":r,"option--is-selected":s},i),ref:l,"aria-disabled":a,...c},e("div",{css:{color:"var(--gray-700)"}},h!=null?h:n.label))};import{Icon as He}from"@uniformdev/design-system";function me({displayName:t}){let[n,o]=t.split(":");return e("div",{css:{whiteSpace:"normal",overflow:"hidden"}},o?e("small",{css:{color:"var(--gray-500)",display:"flex",alignItems:"center",gap:"var(--spacing-xs)"}},n?e(He,{icon:O(n),iconColor:"currentColor",size:16}):null,e("span",null,n)):null,e("div",{css:{color:"var(--gray-700)"}},o!=null?o:n))}var z=t=>{let{data:n,getStyles:o}=t;return e("div",{css:o("singleValue",t)},e(me,{displayName:n.label}))};function ue({onChange:t,value:n,dimensions:o,errorMessage:m,...a}){return e(p.Fragment,null,e(We,{...a,value:n?F(n):void 0,options:k(o),styles:{...a.styles,valueContainer:(r,s)=>{var i,l;return{...r,padding:"var(--spacing-sm)",...(l=(i=a.styles)==null?void 0:i.valueContainer)==null?void 0:l.call(i,r,s)}}},onChange:r=>{r&&t(o.find(s=>s.dim===r.value))},components:{Option:N,SingleValue:z,GroupHeading:T,...a.components}}),e(V,{message:m}))}import{InputComboBox as qe}from"@uniformdev/design-system";import{useState as _e}from"react";function pe({onChange:t,criteriaMatch:n,dimensions:o,errorMessage:m,...a}){var c,h;let[r,s]=_e(typeof n.r!="undefined"&&L(n.r)!==null?n.r.toString(10):""),i=n.rDim,l=n.rDim?o.dimIndex[n.rDim]:void 0;return e(p.Fragment,null,e(qe,{...a,inputValue:r,menuShouldScrollIntoView:!0,value:{label:(c=l==null?void 0:l.displayName)!=null?c:i&&!l?`${n.rDim} (unknown)`:"",value:(h=n.rDim)!=null?h:n.r?n.r.toString(10):"",isDisabled:!1},options:[{label:"Enter a numeric score to match, or choose another dimension to match its score",value:"",isDisabled:!0},...k(o.dimensions)],styles:{...a.styles,valueContainer:(u,C)=>{var f,D;return{...u,padding:"var(--spacing-sm)",...(D=(f=a.styles)==null?void 0:f.valueContainer)==null?void 0:D.call(f,u,C)}},option:(u,C)=>{var f,D;return{fontSize:C.isDisabled?"0.8rem":void 0,...(D=(f=a.styles)==null?void 0:f.option)==null?void 0:D.call(f,u,C)}}},onChange:u=>{var C;u&&(t({...n,rDim:(C=u.value)==null?void 0:C.toString(),r:void 0}),s(""))},onInputChange:(u,C)=>{let f=L(u);C.action==="input-change"||C.action==="set-value"?(s(u),(f||u==="")&&t({...n,r:u||void 0,rDim:void 0})):!f&&!L(C.prevInputValue)&&(!u&&n.r?s(n.r.toString()):s(u))},components:{...a.components,Option:N,SingleValue:z,GroupHeading:T},noOptionsMessage:({inputValue:u})=>L(u)?e(p.Fragment,null,e("div",null,"Score: ",u),e("small",null,"If you want to match on another dimension\u2019s score instead, clear the score value to search for a dimension.")):e(p.Fragment,null,e("div",null,"No dimensions match your search \u201C",u,"\u201D"),e("small",null,"If you want to match a literal score, enter a numeric value."))}),e(V,{message:m}))}function L(t){return/^\d+$/.test(t.toString(10))}var fe=({value:t,setValue:n,dimensions:o,onMenuOpen:m,onMenuClose:a,onAddCriteria:r,onRemoveCriteria:s,displayTitle:i=!0,components:l,errors:c={}})=>{let h=t||{crit:[]},u=d=>{n({...h,op:d==="&"?void 0:d})},C=()=>{let d={...h,crit:[...h.crit,{l:"",op:">",r:0}]};n(d),r==null||r(d)},f=(d,v)=>{n(de(h,x=>{x.crit[v]=d}))},D=d=>{let v=de(h,g=>{g.crit.splice(d,1)}),x=v.crit.length===0?null:v;n(x),s==null||s(x)};return e("fieldset",{className:"personalization-criteria"},i?l!=null&&l.Title?e(l.Title,null):e("legend",{css:{fontSize:"var(--fs-md)",fontWeight:"var(--fw-bold)"}},"Personalize This"):null,l!=null&&l.CustomVariantName?e(l.CustomVariantName,null):null,h.crit.length?e("div",null,h.crit.map((d,v)=>{var y,S,w,E;let x=((y=d.l)==null?void 0:y.length)>0,g=d.op!=="+"&&d.op!=="-";return e("div",{css:oe,key:v},e("div",{css:Fe`
79
- ${re}
80
- grid-template-columns: minmax(0, 1fr) ${g?"minmax(0, 79px) minmax(0, 1fr)":"minmax(0, 1fr)"}
81
- `,className:"criteriaItemInner"},e("div",{css:M},e(ue,{errorMessage:(S=c.lhs)==null?void 0:S[v],css:P,styles:{control:b=>({...b,height:"100%"})},dimensions:o.dimensions,onChange:b=>{f({...d,l:b.dim},v)},value:o.dimIndex[d.l],onMenuOpen:m,onMenuClose:a})),e("div",{css:M},e(le,{name:`op-${v}`,css:P,styles:{control:b=>({...b,height:"100%"})},value:d.op,onChange:b=>{f(b==="+"||b==="-"?{...d,op:b,r:void 0,rDim:void 0}:{...d,op:b},v)},onMenuOpen:m,onMenuClose:a})),g?e("div",{css:M},e(pe,{errorMessage:(w=c.rhs)==null?void 0:w[v],css:P,styles:{control:b=>({...b,height:"100%"})},criteriaMatch:d,onChange:b=>{f(b,v)},isDisabled:!x,dimensions:o,onMenuOpen:m,onMenuClose:a})):null),e("button",{type:"button",onClick:()=>D(v),title:"Delete Personalization",css:{backgroundColor:"transparent",backgroundImage:"none",borderWidth:0}},e(Ye,{icon:Qe,iconColor:"red",size:"1.5rem"})),v>0?e("div",{className:"criteria-group-operation",css:{position:"absolute",top:"-4rem",transform:"translateX(calc(1.5rem - 50%))"}},e(Ke,{disabled:v>1,value:(E=h.op)!=null?E:"&",options:[{label:"AND",value:"&"},{label:"OR",value:"|"}],onChange:b=>{u(b.value)}})):null)})):e(ce,{title:"Default variant",type:"info",css:{marginBlock:"var(--spacing-base)"}},e(Je,null,'This personalized variant has no match criteria and will be shown to any visitor that does not match any preceding variants. Ensure that default variants come last in the variant list. Personalize this variant by clicking "Add Criteria" to get started.')),o.dimensions.length===0?l!=null&&l.NoDimensionsDefined?e(l.NoDimensionsDefined,null):e(ce,{title:"Dimensions",type:"info",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"You do not have any dimensions configured.")):e(Xe,{className:"add-more",buttonText:"Add Criteria",onButtonClick:C}))};var zn=({contextConfig:t,...n})=>{let{loading:o,result:m,error:a}=I(t);return a?e(ge,{type:"danger"},a):o||m===null?e(Ze,null):e(fe,{...n,dimensions:m,components:{NoDimensionsDefined:()=>e(ge,{title:"Dimensions",type:"info",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"You do not have any dimensions configured. Create your first"," ",e("a",{href:`${t.apiHost}/projects/${encodeURIComponent(t.projectId)}/personalization/signals`,target:"_blank",rel:"noopener noreferrer",css:{":hover":{textDecorationLine:"underline"}}},"Dimension")))}})};import ot from"react";import{useEffect as je,useState as et}from"react";import{ManifestClient as tt,ApiClientError as nt}from"@uniformdev/context/api";function $({apiHost:t,apiKey:n,projectId:o}){let[m,a]=et({loading:!1,notConfigured:!1,error:null,result:null});return je(()=>{if(!o||!n||!t){a({notConfigured:!0,loading:!1,error:null,result:null});return}(async()=>{a({notConfigured:!1,loading:!0,error:null,result:null});try{let i=await new tt({projectId:o,apiKey:n,apiHost:t}).get({preview:!0});a({notConfigured:!1,loading:!1,error:null,result:i})}catch(s){let i;s instanceof nt?(s.statusCode===403&&(i=`The API key ${n} did not have permissions to fetch the manifest. Ensure Context > Read Drafts permissions are granted.`),i=s.message):i=s.toString(),a({notConfigured:!1,loading:!1,error:i,result:null});return}})()},[t,n,o]),{result:m.result,error:m.error,loading:m.loading,notConfigured:m.notConfigured}}import{LoadingIndicator as rt}from"@uniformdev/design-system";function Fn({children:t,versionMap:n,contextConfig:o}){let{loading:m,result:a}=$(o);if(m)return e(rt,null);if(a){let r=n[a.project.ui_version];if(r)return e(r,null)}return e(ot.Fragment,null,t)}import Ce,{createContext as it,useContext as K}from"react";import{LoadingIndicator as at}from"@uniformdev/design-system";var A=it(null),to=({loadingComponent:t,errorComponent:n,contextConfig:o,children:m})=>{let a=$(o),r=I(o);return a.error||a.notConfigured?n?e(n,{contextConfig:o,result:a}):e(Ce.Fragment,null,"ErrorComponent is not configured"):r.error||r.notConfigured?n?e(n,{contextConfig:o,result:r}):e(Ce.Fragment,null,"ErrorComponent is not configured"):a.loading||r.loading?t?e(t,null):e(at,null):e(A.Provider,{value:{manifest:a.result,dimensions:r.result,contextConfig:o}},m)};function no(){let t=K(A);if(!(t!=null&&t.contextConfig))throw new Error("Not within DataContext! Configuration data is not exist.");return t.contextConfig}function oo(){let t=K(A);if(!(t!=null&&t.manifest))throw new Error("Not within DataContext! Manifest data is not exist.");return t.manifest}function ro(){let t=K(A);if(!(t!=null&&t.dimensions))throw new Error("Not within DataContext! Dimensions data is not exist.");return t.dimensions}import{validate as st}from"uuid";import{ManifestClient as lt}from"@uniformdev/context/api";var ve=async t=>{if(!t)return{valid:!1,error:new Error("contextConfig was not defined.")};if(!t.apiHost)return{valid:!1,error:new Error("apiHost was not defined.")};if(!t.apiKey)return{valid:!1,error:new Error("apiKey was not defined.")};if(!st(t.apiKey)&&!t.projectId)return{valid:!1,error:new Error("projectId is required when using a modern API key.")};let n=new lt({projectId:t.projectId,apiKey:t.apiKey,apiHost:t.apiHost});try{let o=await n.get({preview:!0});return{valid:!0,result:o}}catch(o){return{valid:!1,error:o}}};import{useEffect as mt,useState as ut}from"react";var co=t=>{let[n,o]=ut({validating:!1,error:void 0}),{apiKey:m,apiHost:a,projectId:r}=t||{};return mt(()=>{if(!m||!a)return;(async()=>{o({validating:!0,error:void 0});let{error:i,result:l}=await ve({apiHost:a,apiKey:m,projectId:r});o(i?{error:i,validating:!1}:{error:void 0,validating:!1,result:l})})()},[a,m,r]),{validating:n.validating,error:n.error,result:n.result}};function go(t){return Array.isArray(t)&&t.length>0&&t[0].cat!==void 0}function Co(t){return t.crit!==void 0}export*from"@uniformdev/design-system";export{to as ContextData,pe as CriteriaMatchMenu,le as CriteriaOperatorMenu,ue as DimensionMenu,me as DimensionValue,X as EditLink,Ot as EnrichmentTag,zn as PersonalizationCriteria,fe as PersonalizationCriteriaStatic,Fn as ProjectUIVersion,Ve as addEnrichmentLink,se as contextCriteriaMenuOperators,go as isEnrichmentTagData,Co as isPersonalizationCriteriaData,no as useContextConfig,$ as useContextData,I as useDimensions,ro as useDimensionsDataContext,oo as useManifest,co as useValidateContextConfig,ve as validateContextConfig};
78
+ `;import{InputComboBox as We}from"@uniformdev/design-system";import{css as qe}from"@emotion/react";function O({op:t}){return e("div",{className:"operation-bubble",css:qe`
79
+ align-items: center;
80
+ background: var(--gray-700);
81
+ border-radius: var(--rounded-full);
82
+ color: var(--white);
83
+ display: flex;
84
+ width: 30px;
85
+ height: 30px;
86
+ justify-content: center;
87
+ font-size: var(--fs-base);
88
+ `},t)}var le=t=>{var m,p;let{data:n,getStyles:o,isDisabled:s,innerRef:i,innerProps:r}=t,[l,a]=(p=(m=n.label)==null?void 0:m.split(":"))!=null?p:[];return e("div",{css:{...o("option",t),display:"flex",alignItems:"center",gap:"var(--spacing-sm)"},ref:i,"aria-disabled":s,...r},a?e(O,{op:l}):e("div",{css:{width:"20px",height:"20px"}}),e("div",null,a!=null?a:l))};var me=t=>{let{data:n,getStyles:o}=t;return e("div",{css:{...o("singleValue",t),width:"max-content"}},n.label.length===1?e(O,{op:n.label}):n.label)};var ue=[{name:"=",description:"equals",value:"="},{name:"\u2260",description:"not equal",value:"!="},{name:">",description:"is greater than",value:">"},{name:"\u2265",description:"is greater than or equal to",value:">="},{name:"<",description:"is less than",value:"<"},{name:"\u2264",description:"is less than or equal to",value:"<="},{name:"has the strongest score",value:"+"},{name:"has the weakest score",value:"-"}];function ce({onChange:t,value:n,...o}){var s,i;return e(We,{...o,value:{label:(i=(s=ue.find(r=>r.value===n))==null?void 0:s.name)!=null?i:n,value:n},options:ue.map(r=>({label:r.description?`${r.name}:${r.description}`:r.name,value:r.value})),styles:{...o.styles,valueContainer:(r,l)=>{var a,m;return{...r,padding:"var(--spacing-sm)",...(m=(a=o.styles)==null?void 0:a.valueContainer)==null?void 0:m.call(a,r,l)}},menu:(r,l)=>{var a,m;return{...r,width:"max-content",...(m=(a=o.styles)==null?void 0:a.menu)==null?void 0:m.call(a,r,l)}},control:(r,l)=>{var a,m;return{...r,border:0,...(m=(a=o.styles)==null?void 0:a.control)==null?void 0:m.call(a,r,l)}},indicatorSeparator:(r,l)=>{var a,m;return{...r,display:"none",...(m=(a=o.styles)==null?void 0:a.indicatorSeparator)==null?void 0:m.call(a,r,l)}}},onChange:r=>{r&&t(r.value)},components:{SingleValue:me,Option:le,...o.components}})}import{InputComboBox as Ke}from"@uniformdev/design-system";import{Icon as _e}from"@uniformdev/design-system";function K(t){return{label:t.displayName,value:t.dim,isDisabled:!1}}function R(t){if(!t)return"unavailable";let[n]=t.split(":");switch(n.toLowerCase()){case"signal":return"data";case"intent":return"assign";case"audience":return"boy";default:return"user-list"}}function k(t){let n=[],o="";for(let s of t){let[i]=s.displayName.split(":");o!==i&&(n.push({label:i,options:[]}),o=i),n[n.length-1].options.push(K(s))}return n}var T=t=>{var i;let{data:n,getStyles:o,className:s}=t;return e("div",{css:{...o("groupHeading",t),textTransform:"none",fontSize:"var(--font-size-sm)"},className:s},e("small",{css:{color:"var(--gray-500)",display:"flex",alignItems:"center",gap:"var(--spacing-xs)"}},e(_e,{icon:R((i=n.label)!=null?i:""),iconColor:"currentColor",size:16}),e("span",null,n.label)))};function N({message:t}){return t?e("div",{css:{position:"absolute",background:"white",borderRadius:"3px",fontSize:"0.8rem",color:"var(--brand-primary-2)",bottom:"calc(var(--spacing-xs) * -1)"}},t):null}var z=t=>{var c,u;let{data:n,getStyles:o,cx:s,isDisabled:i,isFocused:r,isSelected:l,className:a,innerRef:m,innerProps:p}=t,[,C]=(u=(c=n.label)==null?void 0:c.split(":"))!=null?u:[];return e("div",{css:o("option",t),className:s({option:!0,"option--is-disabled":i,"option--is-focused":r,"option--is-selected":l},a),ref:m,"aria-disabled":i,...p},e("div",{css:{color:"var(--gray-700)"}},C!=null?C:n.label))};import{Icon as Fe}from"@uniformdev/design-system";function pe({displayName:t}){let[n,o]=t.split(":");return e("div",{css:{whiteSpace:"normal",overflow:"hidden"}},o?e("small",{css:{color:"var(--gray-500)",display:"flex",alignItems:"center",gap:"var(--spacing-xs)"}},n?e(Fe,{icon:R(n),iconColor:"currentColor",size:16}):null,e("span",{"data-test-id":"dimension-name"},n)):null,e("div",{css:{color:"var(--gray-700)"},"data-test-id":"dimension-value"},o!=null?o:n))}var L=t=>{let{data:n,getStyles:o}=t;return e("div",{css:o("singleValue",t)},e(pe,{displayName:n.label}))};function de({onChange:t,value:n,dimensions:o,errorMessage:s,...i}){return e(d.Fragment,null,e(Ke,{...i,value:n?K(n):void 0,options:k(o),styles:{...i.styles,valueContainer:(r,l)=>{var a,m;return{...r,padding:"var(--spacing-sm)",...(m=(a=i.styles)==null?void 0:a.valueContainer)==null?void 0:m.call(a,r,l)}}},onChange:r=>{r&&t(o.find(l=>l.dim===r.value))},components:{Option:z,SingleValue:L,GroupHeading:T,...i.components}}),e(N,{message:s}))}import{InputComboBox as Ye}from"@uniformdev/design-system";import{useState as Xe}from"react";function fe({onChange:t,criteriaMatch:n,dimensions:o,errorMessage:s,...i}){var p,C;let[r,l]=Xe(typeof n.r!="undefined"&&$(n.r)!==null?n.r.toString(10):""),a=n.rDim,m=n.rDim?o.dimIndex[n.rDim]:void 0;return e(d.Fragment,null,e(Ye,{...i,inputValue:r,menuShouldScrollIntoView:!0,value:{label:(p=m==null?void 0:m.displayName)!=null?p:a&&!m?`${n.rDim} (unknown)`:"",value:(C=n.rDim)!=null?C:n.r?n.r.toString(10):"",isDisabled:!1},options:[{label:"Enter a numeric score to match, or choose another dimension to match its score",value:"",isDisabled:!0},...k(o.dimensions)],styles:{...i.styles,valueContainer:(c,u)=>{var f,I;return{...c,padding:"var(--spacing-sm)",...(I=(f=i.styles)==null?void 0:f.valueContainer)==null?void 0:I.call(f,c,u)}},option:(c,u)=>{var f,I;return{fontSize:u.isDisabled?"0.8rem":void 0,...(I=(f=i.styles)==null?void 0:f.option)==null?void 0:I.call(f,c,u)}}},onChange:c=>{var u;c&&(t({...n,rDim:(u=c.value)==null?void 0:u.toString(),r:void 0}),l(""))},onInputChange:(c,u)=>{let f=$(c);u.action==="input-change"||u.action==="set-value"?(l(c),(f||c==="")&&t({...n,r:c||void 0,rDim:void 0})):!f&&!$(u.prevInputValue)&&(!c&&n.r?l(n.r.toString()):l(c))},components:{...i.components,Option:z,SingleValue:L,GroupHeading:T},noOptionsMessage:({inputValue:c})=>$(c)?e(d.Fragment,null,e("div",null,"Score: ",c),e("small",null,"If you want to match on another dimension\u2019s score instead, clear the score value to search for a dimension.")):e(d.Fragment,null,e("div",null,"No dimensions match your search \u201C",c,"\u201D"),e("small",null,"If you want to match a literal score, enter a numeric value."))}),e(N,{message:s}))}function $(t){return/^\d+$/.test(t.toString(10))}var he=({value:t,setValue:n,dimensions:o,onMenuOpen:s,onMenuClose:i,onAddCriteria:r,onRemoveCriteria:l,displayTitle:a=!0,components:m,errors:p={}})=>{let C=t||{crit:[]},c=g=>{n({...C,op:g==="&"?void 0:g})},u=()=>{let g={...C,crit:[...C.crit,{l:"",op:">",r:0}]};n(g),r==null||r(g)},f=(g,b)=>{n(Ce(C,x=>{x.crit[b]=g}))},I=g=>{let b=Ce(C,h=>{h.crit.splice(g,1)}),x=b.crit.length===0?null:b;n(x),l==null||l(x)};return e("fieldset",{className:"personalization-criteria"},a?m!=null&&m.Title?e(m.Title,null):e("legend",{css:{fontSize:"var(--fs-md)",fontWeight:"var(--fw-bold)"}},"Personalize This"):null,m!=null&&m.CustomVariantName?e(m.CustomVariantName,null):null,C.crit.length?e("div",null,C.crit.map((g,b)=>{var D,S,M,V;let x=((D=g.l)==null?void 0:D.length)>0,h=g.op!=="+"&&g.op!=="-";return e("div",{css:ae,key:b,"data-test-id":"criteria-container"},e("div",{css:Je`
89
+ ${se}
90
+ grid-template-columns: minmax(0, 1fr) ${h?"minmax(0, 79px) minmax(0, 1fr)":"minmax(0, 1fr)"}
91
+ `,className:"criteriaItemInner"},e("div",{css:B,className:"criteria-wrapper","data-test-id":"select-criteria"},e(de,{errorMessage:(S=p.lhs)==null?void 0:S[b],css:P,styles:{control:v=>({...v,height:"100%"})},dimensions:o.dimensions,onChange:v=>{f({...g,l:v.dim},b)},value:o.dimIndex[g.l],onMenuOpen:s,onMenuClose:i})),e("div",{css:B,className:"criteria-wrapper","data-test-id":"select-operator"},e(ce,{name:`op-${b}`,css:P,styles:{control:v=>({...v,height:"100%"})},value:g.op,onChange:v=>{f(v==="+"||v==="-"?{...g,op:v,r:void 0,rDim:void 0}:{...g,op:v},b)},onMenuOpen:s,onMenuClose:i})),h?e("div",{css:B,className:"criteria-wrapper","data-test-id":"select-match-criteria"},e(fe,{errorMessage:(M=p.rhs)==null?void 0:M[b],css:P,styles:{control:v=>({...v,height:"100%"})},criteriaMatch:g,onChange:v=>{f(v,b)},isDisabled:!x,dimensions:o,onMenuOpen:s,onMenuClose:i})):null),e("button",{type:"button",onClick:()=>I(b),title:"Delete Personalization",css:{backgroundColor:"transparent",backgroundImage:"none",borderWidth:0},"data-test-id":"button-delete"},e(Ze,{icon:tt,iconColor:"red",size:"1.5rem"})),b>0?e("div",{className:"criteria-group-operation",css:{position:"absolute",top:"-4rem",transform:"translateX(calc(1.5rem - 50%))"}},e(Qe,{"data-test-id":"dropdown-button-combine",disabled:b>1,value:(V=C.op)!=null?V:"&",options:[{label:"AND",value:"&"},{label:"OR",value:"|"}],onChange:v=>{c(v.value)}})):null)})):e(ge,{title:"Default variant",type:"info",css:{marginBlock:"var(--spacing-base)"}},e(et,null,'This personalized variant has no match criteria and will be shown to any visitor that does not match any preceding variants. Ensure that default variants come last in the variant list. Personalize this variant by clicking "Add Criteria" to get started.')),o.dimensions.length===0?m!=null&&m.NoDimensionsDefined?e(m.NoDimensionsDefined,null):e(ge,{title:"Dimensions",type:"info",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"You do not have any dimensions configured.")):e(je,{"data-test-id":"button-add-criteria",className:"add-more",buttonText:"Add Criteria",onButtonClick:u}))};import*as y from"yup";import{useAsync as rt}from"react-use";function Un(t){return Array.isArray(t)&&t.length>0&&t[0].cat!==void 0}function Gn(t){return t.crit!==void 0}function Y(t){return t!=="+"&&t!=="-"}function it(t){let n={crit:[]};return t.forEach(o=>{if(!o.path)return;let s=/\[(\d+)\]\.(\w+)/g,i=[...o.path.matchAll(s)][0];if((i==null?void 0:i.length)==3){let r=Number(i[1]),l=i[2];if(n.crit.length>r)n.crit[r]={...n.crit[r],[l]:o.message};else{let a={};a[l]=o.message,n.crit.push(a)}}}),n}async function X(t,n){let o=y.object().shape({l:y.string().required("Please select a dimension").oneOf(n==null?void 0:n.dimensions.map(s=>s.dim),"Selected left-side criteria dimension does not exist"),op:y.string().required(),r:y.mixed().nullable().when(["rDim","op"],{is:(s,i)=>Y(i)&&!s,then:y.string().required("Choose a score or dimension")}),rDim:y.string().oneOf(n==null?void 0:n.dimensions.map(s=>s.dim),"Selected right-side criteria dimension does not exist").when(["r","op"],{is:(s,i)=>Y(i)&&!s,then:y.string().required("Choose a score or dimension")})},["rDim","r"]);try{await y.object({crit:y.array(o)}).nullable().validate(t,{abortEarly:!1})}catch(s){return it(s.inner)}}var Qn=({contextConfig:t,value:n,setValue:o,...s})=>{var C,c;let[i,r]=nt(void 0),{loading:l,result:a,error:m}=w(t);return rt(async()=>{if(n&&a){let u=await X(n,a);r(u)}},[n,a,X]),m?e(be,{type:"danger"},m):l||a===null?e(ot,null):e(he,{...s,value:n,setValue:async u=>{let f=await X(u,a);r(f),o(u)},errors:{lhs:(C=i==null?void 0:i.crit)==null?void 0:C.map(u=>u==null?void 0:u.l),rhs:(c=i==null?void 0:i.crit)==null?void 0:c.map(u=>u==null?void 0:u.rDim)},dimensions:a,components:{NoDimensionsDefined:()=>e(be,{title:"Dimensions",type:"info",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"You do not have any dimensions configured. Create your first"," ",e("a",{href:`${t.apiHost}/projects/${encodeURIComponent(t.projectId)}/personalization/signals`,target:"_blank",rel:"noopener noreferrer",css:{":hover":{textDecorationLine:"underline"}}},"Dimension")))}})};import ut from"react";import{useEffect as at,useState as st}from"react";import{ApiClientError as lt,CachedManifestClient as mt}from"@uniformdev/context/api";function A({apiHost:t,apiKey:n,projectId:o}){let[s,i]=st({loading:!1,notConfigured:!1,error:null,result:null});return at(()=>{if(!o||!n||!t){i({notConfigured:!0,loading:!1,error:null,result:null});return}(async()=>{i({notConfigured:!1,loading:!0,error:null,result:null});try{let a=await new mt({projectId:o,apiKey:n,apiHost:t}).get({preview:!0});i({notConfigured:!1,loading:!1,error:null,result:a})}catch(l){let a;l instanceof lt?(l.statusCode===403&&(a=`The API key ${n} did not have permissions to fetch the manifest. Ensure Context > Read Drafts permissions are granted.`),a=l.message):a=l.toString(),i({notConfigured:!1,loading:!1,error:a,result:null});return}})()},[t,n,o]),{result:s.result,error:s.error,loading:s.loading,notConfigured:s.notConfigured}}import{LoadingIndicator as ct}from"@uniformdev/design-system";function so({children:t,versionMap:n,contextConfig:o}){let{loading:s,result:i}=A(o);if(s)return e(ct,null);if(i){let r=n[i.project.ui_version];if(r)return e(r,null)}return e(ut.Fragment,null,t)}import ve,{createContext as pt,useContext as J}from"react";import{LoadingIndicator as dt}from"@uniformdev/design-system";var U=pt(null),ho=({loadingComponent:t,errorComponent:n,contextConfig:o,children:s})=>{let i=A(o),r=w(o);return i.error||i.notConfigured?n?e(n,{contextConfig:o,result:i}):e(ve.Fragment,null,"ErrorComponent is not configured"):r.error||r.notConfigured?n?e(n,{contextConfig:o,result:r}):e(ve.Fragment,null,"ErrorComponent is not configured"):i.loading||r.loading?t?e(t,null):e(dt,null):e(U.Provider,{value:{manifest:i.result,dimensions:r.result,contextConfig:o}},s)};function bo(){let t=J(U);if(!(t!=null&&t.contextConfig))throw new Error("Not within DataContext! Configuration data is not exist.");return t.contextConfig}function vo(){let t=J(U);if(!(t!=null&&t.manifest))throw new Error("Not within DataContext! Manifest data is not exist.");return t.manifest}function yo(){let t=J(U);if(!(t!=null&&t.dimensions))throw new Error("Not within DataContext! Dimensions data is not exist.");return t.dimensions}import{validate as ft}from"uuid";import{UncachedManifestClient as gt}from"@uniformdev/context/api";var ye=async t=>{if(!t)return{valid:!1,error:new Error("contextConfig was not defined.")};if(!t.apiHost)return{valid:!1,error:new Error("apiHost was not defined.")};if(!t.apiKey)return{valid:!1,error:new Error("apiKey was not defined.")};if(!ft(t.apiKey)&&!t.projectId)return{valid:!1,error:new Error("projectId is required when using a modern API key.")};let n=new gt({projectId:t.projectId,apiKey:t.apiKey,apiHost:t.apiHost});try{let o=await n.get({preview:!0});return{valid:!0,result:o}}catch(o){return{valid:!1,error:o}}};import{useEffect as Ct,useState as ht}from"react";var Vo=t=>{let[n,o]=ht({validating:!1,error:void 0}),{apiKey:s,apiHost:i,projectId:r}=t||{};return Ct(()=>{if(!s||!i)return;(async()=>{o({validating:!0,error:void 0});let{error:a,result:m}=await ye({apiHost:i,apiKey:s,projectId:r});o(a?{error:a,validating:!1}:{error:void 0,validating:!1,result:m})})()},[i,s,r]),{validating:n.validating,error:n.error,result:n.result}};export*from"@uniformdev/design-system";export{ho as ContextData,fe as CriteriaMatchMenu,ce as CriteriaOperatorMenu,de as DimensionMenu,pe as DimensionValue,Z as EditLink,$t as EnrichmentTag,Qn as PersonalizationCriteria,he as PersonalizationCriteriaStatic,so as ProjectUIVersion,Le as addEnrichmentLink,ue as contextCriteriaMenuOperators,it as convertErrorsToObj,Un as isEnrichmentTagData,Gn as isPersonalizationCriteriaData,Y as opHasRhs,bo as useContextConfig,A as useContextData,w as useDimensions,yo as useDimensionsDataContext,vo as useManifest,Vo as useValidateContextConfig,ye as validateContextConfig};
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- var Ge=Object.create;var U=Object.defineProperty;var He=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var qe=Object.getPrototypeOf,_e=Object.prototype.hasOwnProperty;var Fe=(t,n)=>{for(var o in n)U(t,o,{get:n[o],enumerable:!0})},A=(t,n,o,l)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of We(n))!_e.call(t,i)&&i!==o&&U(t,i,{get:()=>n[i],enumerable:!(l=He(n,i))||l.enumerable});return t},w=(t,n,o)=>(A(t,n,"default"),o&&A(o,n,"default")),R=(t,n,o)=>(o=t!=null?Ge(qe(t)):{},A(n||!t||!t.__esModule?U(o,"default",{value:t,enumerable:!0}):o,t)),Ke=t=>A(U({},"__esModule",{value:!0}),t);var x={};Fe(x,{ContextData:()=>ot,CriteriaMatchMenu:()=>ce,CriteriaOperatorMenu:()=>le,DimensionMenu:()=>pe,DimensionValue:()=>ue,EditLink:()=>re,EnrichmentTag:()=>Xe,PersonalizationCriteria:()=>tt,PersonalizationCriteriaStatic:()=>fe,ProjectUIVersion:()=>nt,addEnrichmentLink:()=>De,contextCriteriaMenuOperators:()=>se,isEnrichmentTagData:()=>lt,isPersonalizationCriteriaData:()=>mt,useContextConfig:()=>rt,useContextData:()=>z,useDimensions:()=>P,useDimensionsDataContext:()=>at,useManifest:()=>it,useValidateContextConfig:()=>st,validateContextConfig:()=>ge});module.exports=Ke(x);var e=require("@emotion/react"),p=R(require("react"));var he=require("@uniformdev/design-system"),be=require("react-icons/cg");var Ce=require("@emotion/react"),ve=Ce.css`
1
+ "use strict";var Ye=Object.create;var G=Object.defineProperty;var Xe=Object.getOwnPropertyDescriptor;var Je=Object.getOwnPropertyNames;var Qe=Object.getPrototypeOf,Ze=Object.prototype.hasOwnProperty;var je=(e,n)=>{for(var o in n)G(e,o,{get:n[o],enumerable:!0})},U=(e,n,o,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of Je(n))!Ze.call(e,i)&&i!==o&&G(e,i,{get:()=>n[i],enumerable:!(s=Xe(n,i))||s.enumerable});return e},M=(e,n,o)=>(U(e,n,"default"),o&&U(o,n,"default")),P=(e,n,o)=>(o=e!=null?Ye(Qe(e)):{},U(n||!e||!e.__esModule?G(o,"default",{value:e,enumerable:!0}):o,e)),et=e=>U(G({},"__esModule",{value:!0}),e);var x={};je(x,{ContextData:()=>pt,CriteriaMatchMenu:()=>fe,CriteriaOperatorMenu:()=>ue,DimensionMenu:()=>de,DimensionValue:()=>pe,EditLink:()=>ae,EnrichmentTag:()=>nt,PersonalizationCriteria:()=>ut,PersonalizationCriteriaStatic:()=>Ce,ProjectUIVersion:()=>ct,addEnrichmentLink:()=>we,contextCriteriaMenuOperators:()=>me,convertErrorsToObj:()=>He,isEnrichmentTagData:()=>lt,isPersonalizationCriteriaData:()=>mt,opHasRhs:()=>te,useContextConfig:()=>dt,useContextData:()=>L,useDimensions:()=>O,useDimensionsDataContext:()=>gt,useManifest:()=>ft,useValidateContextConfig:()=>Ct,validateContextConfig:()=>be});module.exports=et(x);var t=require("@emotion/react"),d=P(require("react"));var De=require("@uniformdev/design-system"),Ie=require("react-icons/cg");var ve=require("@emotion/react"),ye=ve.css`
2
2
  display: flex;
3
3
  align-items: center;
4
4
  font-weight: var(--fw-bold);
@@ -9,7 +9,7 @@ var Ge=Object.create;var U=Object.defineProperty;var He=Object.getOwnPropertyDes
9
9
  &:focus {
10
10
  text-decoration-line: underline;
11
11
  }
12
- `;var re=({linkTo:t,name:n,linkText:o=`Edit ${n} Component`})=>(0,e.jsx)("a",{css:ve,title:`Edit ${n} component definition`,rel:"noopener noreferrer",target:"_blank",href:t},o,(0,e.jsx)(he.Icon,{icon:be.CgChevronRight,iconColor:"currentColor",size:"1.5rem"}));var S=R(require("react"));var G=require("react"),O=require("@uniformdev/context/api");function ye(t,n,o){return t.reduce((l,i)=>{let r=n(i);if(typeof r=="undefined"||r===null)throw new Error("Objectify key selector returned undefined or null.");return l[n(i)]=o?o(i):i,l},{})}function P({apiHost:t,apiKey:n,projectId:o}){let[l,i]=(0,G.useState)({loading:!1,notConfigured:!1,error:null,result:null});return(0,G.useEffect)(()=>{if(!o||!n||!t){i({notConfigured:!0,loading:!1,error:null,result:null});return}(async()=>{i({notConfigured:!1,loading:!0,error:null,result:null});try{let a=(await new O.DimensionClient({projectId:o,apiKey:n,apiHost:t}).get()).dimensions.map(c=>({...c,displayName:(0,O.computeDimensionDisplayName)(c)})),m={dimensions:a,dimIndex:ye(a,c=>c.dim,c=>c)};i({notConfigured:!1,loading:!1,error:null,result:m})}catch(s){let a;s instanceof O.ApiClientError?a=s.message:a=s.toString(),i({notConfigured:!1,loading:!1,error:a,result:null});return}})()},[t,n,o]),{result:l.result,error:l.error,loading:l.loading,notConfigured:l.notConfigured}}var H=require("@uniformdev/context"),h=require("@uniformdev/design-system"),k=require("react-icons/cg"),ie=R(require("immer")),W=require("@emotion/react"),De=W.css`
12
+ `;var ae=({linkTo:e,name:n,linkText:o=`Edit ${n} Component`})=>(0,t.jsx)("a",{css:ye,title:`Edit ${n} component definition`,rel:"noopener noreferrer",target:"_blank",href:e},o,(0,t.jsx)(De.Icon,{icon:Ie.CgChevronRight,iconColor:"currentColor",size:"1.5rem"}));var S=P(require("react"));var H=require("react"),R=require("@uniformdev/context/api");function xe(e,n,o){return e.reduce((s,i)=>{let r=n(i);if(typeof r=="undefined"||r===null)throw new Error("Objectify key selector returned undefined or null.");return s[n(i)]=o?o(i):i,s},{})}function O({apiHost:e,apiKey:n,projectId:o}){let[s,i]=(0,H.useState)({loading:!1,notConfigured:!1,error:null,result:null});return(0,H.useEffect)(()=>{if(!o||!n||!e){i({notConfigured:!0,loading:!1,error:null,result:null});return}(async()=>{i({notConfigured:!1,loading:!0,error:null,result:null});try{let a=(await new R.CachedDimensionClient({projectId:o,apiKey:n,apiHost:e}).get()).dimensions.map(p=>({...p,displayName:(0,R.computeDimensionDisplayName)(p)})),m={dimensions:a,dimIndex:xe(a,p=>p.dim,p=>p)};i({notConfigured:!1,loading:!1,error:null,result:m})}catch(l){let a;l instanceof R.ApiClientError?a=l.message:a=l.toString(),i({notConfigured:!1,loading:!1,error:a,result:null});return}})()},[e,n,o]),{result:s.result,error:s.error,loading:s.loading,notConfigured:s.notConfigured}}var q=require("@uniformdev/context"),v=require("@uniformdev/design-system"),k=require("react-icons/cg"),se=P(require("immer")),W=require("@emotion/react"),we=W.css`
13
13
  flex: 2;
14
14
  display: flex;
15
15
  width: 50%;
@@ -20,7 +20,7 @@ var Ge=Object.create;var U=Object.defineProperty;var He=Object.getOwnPropertyDes
20
20
  &:focus {
21
21
  text-decoration-line: underline;
22
22
  }
23
- `,Xe=({value:t,setValue:n,contextConfig:o,displayTitle:l=!0})=>{let{loading:i,result:r,error:s}=P(o),a=(0,S.useMemo)(()=>{if(r)return r.dimensions.filter(g=>g.category==="ENR")},[r]),m=(0,S.useMemo)(()=>{if(!t)return a;if(a)return a.filter(g=>!t.some(D=>(0,H.getEnrichmentVectorKey)(D.cat,D.key)===g.dim))},[a,t]),[c,b]=(0,S.useState)(""),[u,C]=(0,S.useState)(50),[f,I]=(0,S.useState)(!1),d=a==null?void 0:a.find(g=>g.dim===c),v=()=>{let[g,D]=c.split("_");E([...t!=null?t:[],{cat:g,key:D,str:u}]),b(""),C(50),I(!1)},E=g=>{let D=[];r?D=g.filter(V=>{let $=r.dimIndex[(0,H.getEnrichmentVectorKey)(V.cat,V.key)];return Boolean($)}):D=g;let L=D.length===0?null:D;n(L)};return s?(0,e.jsx)(h.Callout,{type:"danger"},s):i||r===null?(0,e.jsx)(h.LoadingIndicator,null):(0,e.jsx)("fieldset",{className:"enrichment-tag"},l?(0,e.jsx)("div",{css:{display:"flex",justifyContent:"space-between",marginBottom:"var(--spacing-base)"}},(0,e.jsx)("legend",{css:{fontSize:"var(--fs-md)",fontWeight:"var(--fw-bold)"}},"Enrichment Tags")):null,a!=null&&a.length?!f&&!t?(0,e.jsx)(h.Callout,{title:"No enrichment tags assigned.",type:"info",css:{marginBlock:"var(--spacing-base)"}},(0,e.jsx)("p",null,"Click"," ",(0,e.jsx)("a",{onClick:()=>I(!0),target:"_blank",rel:"noopener noreferrer",css:{textDecorationLine:"underline"}},"here")," ","to assign your first enrichment tag.")):(0,e.jsx)(S.default.Fragment,null,r&&(0,e.jsx)(je,{list:t!=null?t:[],setList:E,dimIndex:r.dimIndex}),f&&m&&m.length>0?(0,e.jsx)("div",{className:"add-enrichment-tag",css:{display:"flex",flexWrap:"wrap",gap:"var(--spacing-lg)",marginTop:"var(--spacing-md)",alignItems:"center"}},(0,e.jsx)("div",{css:{flexGrow:1}},(0,e.jsx)(h.InputSelect,{name:"enrichment-type",label:"Enrichment Tag",showLabel:!0,value:c,options:[{label:"Select",value:""},...m.map(g=>({label:g.displayName,value:g.dim}))],onChange:g=>b(g.currentTarget.value)})),(0,e.jsx)(Ze,{score:u,setValue:C,cap:d?d.cap:100,css:{flexBasis:"9rem"}}),(0,e.jsx)(h.Button,{buttonType:"tertiary",size:"xl",css:{marginBottom:"var(--spacing-xs)",height:"3.5rem",margin:0,alignSelf:"flex-end"},onClick:v,disabled:!c},"Add")):null,(0,e.jsx)("div",{className:"enrichment-cta",style:{paddingTop:"10px",display:"flex",justifyContent:"space-between"}},!f&&m&&m.length>0&&t?(0,e.jsx)(h.AddListButton,{className:"add-more",buttonText:"Add More",onButtonClick:()=>I(!0)}):(0,e.jsx)("a",{css:De,title:"none",href:"#"}),(0,e.jsx)(re,{name:"Enrichments",linkText:"Manage Enrichments",linkTo:`${o.apiHost}/projects/${encodeURIComponent(o.projectId)}/personalization/enrichments`}))):(0,e.jsx)(Je,{contextConfig:o}))},Je=({contextConfig:t})=>(0,e.jsx)(h.Callout,{title:"No enrichments found.",type:"caution",css:{marginBlock:"var(--spacing-base)"}},(0,e.jsx)("p",null,"Looks like you do not have any enrichment created in your connected Uniform project. Start by creating your first enrichment"," ",(0,e.jsx)("a",{href:`${t.apiHost}/projects/${encodeURIComponent(t.projectId)}/personalization/enrichments`,target:"_blank",rel:"noopener noreferrer",css:{":hover":{textDecorationLine:"underline"}}},"here"),".")),xe=(t,n=100,o=0)=>Math.max(Math.min(t,n),o),Ie=W.css`
23
+ `,nt=({value:e,setValue:n,contextConfig:o,displayTitle:s=!0})=>{let{loading:i,result:r,error:l}=O(o),a=(0,S.useMemo)(()=>{if(r)return r.dimensions.filter(h=>h.category==="ENR")},[r]),m=(0,S.useMemo)(()=>{if(!e)return a;if(a)return a.filter(h=>!e.some(I=>(0,q.getEnrichmentVectorKey)(I.cat,I.key)===h.dim))},[a,e]),[p,C]=(0,S.useState)(""),[c,u]=(0,S.useState)(50),[f,w]=(0,S.useState)(!1),g=a==null?void 0:a.find(h=>h.dim===p),b=()=>{let[h,I]=p.split("_");V([...e!=null?e:[],{cat:h,key:I,str:c}]),C(""),u(50),w(!1)},V=h=>{let I=[];r?I=h.filter(N=>{let A=r.dimIndex[(0,q.getEnrichmentVectorKey)(N.cat,N.key)];return Boolean(A)}):I=h;let $=I.length===0?null:I;n($)};return l?(0,t.jsx)(v.Callout,{type:"danger"},l):i||r===null?(0,t.jsx)(v.LoadingIndicator,null):(0,t.jsx)("fieldset",{className:"enrichment-tag"},s?(0,t.jsx)("div",{css:{display:"flex",justifyContent:"space-between",marginBottom:"var(--spacing-base)"}},(0,t.jsx)("legend",{css:{fontSize:"var(--fs-md)",fontWeight:"var(--fw-bold)"}},"Enrichment Tags")):null,a!=null&&a.length?!f&&!e?(0,t.jsx)(v.Callout,{title:"No enrichment tags assigned.",type:"info",css:{marginBlock:"var(--spacing-base)"}},(0,t.jsx)("p",null,"Click"," ",(0,t.jsx)("a",{onClick:()=>w(!0),target:"_blank",rel:"noopener noreferrer",css:{textDecorationLine:"underline"}},"here")," ","to assign your first enrichment tag.")):(0,t.jsx)(S.default.Fragment,null,r&&(0,t.jsx)(at,{list:e!=null?e:[],setList:V,dimIndex:r.dimIndex}),f&&m&&m.length>0?(0,t.jsx)("div",{className:"add-enrichment-tag",css:{display:"flex",flexWrap:"wrap",gap:"var(--spacing-lg)",marginTop:"var(--spacing-md)",alignItems:"center"}},(0,t.jsx)("div",{css:{flexGrow:1}},(0,t.jsx)(v.InputSelect,{name:"enrichment-type",label:"Enrichment Tag",showLabel:!0,value:p,options:[{label:"Select",value:""},...m.map(h=>({label:h.displayName,value:h.dim}))],onChange:h=>C(h.currentTarget.value)})),(0,t.jsx)(it,{score:c,setValue:u,cap:g?g.cap:100,css:{flexBasis:"9rem"}}),(0,t.jsx)(v.Button,{buttonType:"tertiary",size:"xl",css:{marginBottom:"var(--spacing-xs)",height:"3.5rem",margin:0,alignSelf:"flex-end"},onClick:b,disabled:!p},"Add")):null,(0,t.jsx)("div",{className:"enrichment-cta",style:{paddingTop:"10px",display:"flex",justifyContent:"space-between"}},!f&&m&&m.length>0&&e?(0,t.jsx)(v.AddListButton,{className:"add-more",buttonText:"Add More",onButtonClick:()=>w(!0)}):(0,t.jsx)("a",{css:we,title:"none",href:"#"}),(0,t.jsx)(ae,{name:"Enrichments",linkText:"Manage Enrichments",linkTo:`${o.apiHost}/projects/${encodeURIComponent(o.projectId)}/personalization/enrichments`}))):(0,t.jsx)(ot,{contextConfig:o}))},ot=({contextConfig:e})=>(0,t.jsx)(v.Callout,{title:"No enrichments found.",type:"caution",css:{marginBlock:"var(--spacing-base)"}},(0,t.jsx)("p",null,"Looks like you do not have any enrichment created in your connected Uniform project. Start by creating your first enrichment"," ",(0,t.jsx)("a",{href:`${e.apiHost}/projects/${encodeURIComponent(e.projectId)}/personalization/enrichments`,target:"_blank",rel:"noopener noreferrer",css:{":hover":{textDecorationLine:"underline"}}},"here"),".")),Me=(e,n=100,o=0)=>Math.max(Math.min(e,n),o),Ee=W.css`
24
24
  position: absolute;
25
25
  bottom: 0.875rem;
26
26
  left: var(--spacing-sm);
@@ -32,27 +32,27 @@ var Ge=Object.create;var U=Object.defineProperty;var He=Object.getOwnPropertyDes
32
32
  background-color: var(--gray-100);
33
33
  border: 1px solid var(--gray-300);
34
34
  border-radius: var(--rounded-full);
35
- `,Qe=W.css`
36
- ${Ie}
35
+ `,rt=W.css`
36
+ ${Ee}
37
37
  left: auto;
38
38
  right: var(--spacing-sm);
39
- `,Ze=({score:t,setValue:n,cap:o=100,...l})=>{let i=r=>{let s=r==="increment"?t+10:t-10;s<0&&(s=0),s>o&&(s=o),n(s)};return(0,e.jsx)("div",{css:{position:"relative"},...l},(0,e.jsx)(h.Input,{label:"Strength",id:"enrichment-score",type:"number",min:0,max:o,value:t,onChange:r=>n(xe(Number(r.currentTarget.value)||0,o)),css:{textAlign:"center",boxSizing:"border-box"}}),(0,e.jsx)("button",{type:"button",title:"Reduce enrichment count",onClick:()=>i("decrement"),disabled:t===0,className:"scoreCounterButton",css:Ie},(0,e.jsx)(h.Icon,{icon:k.CgMathMinus,iconColor:"gray",size:"1.5rem"})),(0,e.jsx)("button",{type:"button",title:"Increase enrichment count",onClick:()=>i("increment"),className:"scoreCounterButton",css:Qe},(0,e.jsx)(h.Icon,{icon:k.CgMathPlus,iconColor:"gray",size:"1.5rem"})))},je=({list:t,setList:n,dimIndex:o})=>{let l=r=>{n((0,ie.default)(t,s=>{s.splice(r,1)}))},i=(r,s)=>{var m;let a=(m=o[`${t[r].cat}_${t[r].key}`])==null?void 0:m.cap;n((0,ie.default)(t,c=>{c[r].str=xe(Number(s)||0,a)}))};return(0,e.jsx)(S.default.Fragment,null,t.map((r,s)=>{let a=o[(0,H.getEnrichmentVectorKey)(r.cat,r.key)];if(!!a)return(0,e.jsx)("div",{css:{display:"flex",alignItems:"center",gap:"var(--spacing-base)",backgroundColor:"var(--brand-secondary-2)",boxShadow:"var(--shadow-base)",borderRadius:"var(--rounded-base)",paddingInline:"var(--spacing-base)",marginBlock:"var(--spacing-base)"},className:"selected-enrichments",key:`${r.cat}-${r.key}`},(0,e.jsx)("span",{css:{fontWeight:"var(--fw-bold)",color:a?void 0:"var(--brand-secondary-5)"}},a?a.displayName:`Enrichment '${r.cat}_${r.key}' is unknown`),(0,e.jsx)("div",{css:{marginLeft:"auto",display:"flex",alignItems:"center",border:"0 solid var(--gray-400)",borderLeftWidth:"1px",borderRightWidth:"1px",padding:"var(--spacing-sm) var(--spacing-base)",flexBasis:"9rem"}},(0,e.jsx)(h.Input,{type:"text",min:0,max:a.cap||100,title:"score",value:r.str,css:{textAlign:"center",width:"100px"},onChange:m=>i(s,m.currentTarget.value)})),(0,e.jsx)("button",{type:"button",title:"Delete enrichment",onClick:()=>l(s),css:{border:0}},(0,e.jsx)(h.Icon,{icon:k.CgCloseO,iconColor:"red",size:"1.5rem"})))}))};var N=require("@uniformdev/design-system");var Ve=require("@emotion/react"),B=require("@uniformdev/design-system"),de=R(require("immer")),Ne=require("react-icons/cg");var T=require("@emotion/react"),ae="6rem",we=T.css`
39
+ `,it=({score:e,setValue:n,cap:o=100,...s})=>{let i=r=>{let l=r==="increment"?e+10:e-10;l<0&&(l=0),l>o&&(l=o),n(l)};return(0,t.jsx)("div",{css:{position:"relative"},...s},(0,t.jsx)(v.Input,{label:"Strength",id:"enrichment-score",type:"number",min:0,max:o,value:e,onChange:r=>n(Me(Number(r.currentTarget.value)||0,o)),css:{textAlign:"center",boxSizing:"border-box"}}),(0,t.jsx)("button",{type:"button",title:"Reduce enrichment count",onClick:()=>i("decrement"),disabled:e===0,className:"scoreCounterButton",css:Ee},(0,t.jsx)(v.Icon,{icon:k.CgMathMinus,iconColor:"gray",size:"1.5rem"})),(0,t.jsx)("button",{type:"button",title:"Increase enrichment count",onClick:()=>i("increment"),className:"scoreCounterButton",css:rt},(0,t.jsx)(v.Icon,{icon:k.CgMathPlus,iconColor:"gray",size:"1.5rem"})))},at=({list:e,setList:n,dimIndex:o})=>{let s=r=>{n((0,se.default)(e,l=>{l.splice(r,1)}))},i=(r,l)=>{var m;let a=(m=o[`${e[r].cat}_${e[r].key}`])==null?void 0:m.cap;n((0,se.default)(e,p=>{p[r].str=Me(Number(l)||0,a)}))};return(0,t.jsx)(S.default.Fragment,null,e.map((r,l)=>{let a=o[(0,q.getEnrichmentVectorKey)(r.cat,r.key)];if(!!a)return(0,t.jsx)("div",{css:{display:"flex",alignItems:"center",gap:"var(--spacing-base)",backgroundColor:"var(--brand-secondary-2)",boxShadow:"var(--shadow-base)",borderRadius:"var(--rounded-base)",paddingInline:"var(--spacing-base)",marginBlock:"var(--spacing-base)"},className:"selected-enrichments",key:`${r.cat}-${r.key}`},(0,t.jsx)("span",{css:{fontWeight:"var(--fw-bold)",color:a?void 0:"var(--brand-secondary-5)"}},a?a.displayName:`Enrichment '${r.cat}_${r.key}' is unknown`),(0,t.jsx)("div",{css:{marginLeft:"auto",display:"flex",alignItems:"center",border:"0 solid var(--gray-400)",borderLeftWidth:"1px",borderRightWidth:"1px",padding:"var(--spacing-sm) var(--spacing-base)",flexBasis:"9rem"}},(0,t.jsx)(v.Input,{type:"text",min:0,max:a.cap||100,title:"score",value:r.str,css:{textAlign:"center",width:"100px"},onChange:m=>i(l,m.currentTarget.value)})),(0,t.jsx)("button",{type:"button",title:"Delete enrichment",onClick:()=>s(l),css:{border:0}},(0,t.jsx)(v.Icon,{icon:k.CgCloseO,iconColor:"red",size:"1.5rem"})))}))};var Ue=require("react");var z=require("@uniformdev/design-system");var $e=require("@emotion/react"),E=require("@uniformdev/design-system"),ge=P(require("immer")),Ae=require("react-icons/cg");var T=require("@emotion/react"),le="6rem",Se=T.css`
40
40
  position: relative;
41
41
  padding: var(--spacing-base);
42
42
  border: 1px solid var(--gray-300);
43
43
  box-shadow: var(--shadow-base);
44
44
  background-color: white;
45
45
  border-radius: var(--rounded-base);
46
- margin-top: ${ae};
46
+ margin-top: ${le};
47
47
  display: flex;
48
48
  &:before {
49
49
  content: '';
50
50
  display: block;
51
51
  width: 1px;
52
- height: ${ae};
52
+ height: ${le};
53
53
  background-color: var(--gray-300);
54
54
  position: absolute;
55
- top: -${ae};
55
+ top: -${le};
56
56
  left: var(--spacing-lg);
57
57
  }
58
58
  &:first-of-type {
@@ -61,21 +61,31 @@ var Ge=Object.create;var U=Object.defineProperty;var He=Object.getOwnPropertyDes
61
61
  display: none;
62
62
  }
63
63
  }
64
- `,Be=T.css`
64
+ `,Ve=T.css`
65
65
  display: grid;
66
66
  gap: var(--spacing-xs);
67
67
  flex-grow: 1;
68
68
  margin-right: var(--spacing-base);
69
- `,q=T.css`
69
+ `,_=T.css`
70
70
  width: 100%;
71
71
  display: flex;
72
72
  align-items: stretch;
73
- `,_=T.css`
73
+ `,F=T.css`
74
74
  height: 100%;
75
75
  width: 100%;
76
- `,yt=T.css`
76
+ `,St=T.css`
77
77
  height: 100%;
78
- `;var Me=require("@uniformdev/design-system");function F({op:t}){return(0,e.jsx)("div",{css:{background:"var(--gray-700)",color:"white",borderRadius:"100%",width:"30px",height:"30px",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"24px"}},t)}var Se=t=>{var m,c;let{data:n,getStyles:o,isDisabled:l,innerRef:i,innerProps:r}=t,[s,a]=(c=(m=n.label)==null?void 0:m.split(":"))!=null?c:[];return(0,e.jsx)("div",{css:{...o("option",t),display:"flex",alignItems:"center",gap:"var(--spacing-sm)"},ref:i,"aria-disabled":l,...r},a?(0,e.jsx)(F,{op:s}):(0,e.jsx)("div",{css:{width:"20px",height:"20px"}}),(0,e.jsx)("div",null,a!=null?a:s))};var Ee=t=>{let{data:n,getStyles:o}=t;return(0,e.jsx)("div",{css:{...o("singleValue",t),width:"max-content"}},n.label.length===1?(0,e.jsx)(F,{op:n.label}):n.label)};var se=[{name:"=",description:"equals",value:"="},{name:"\u2260",description:"not equal",value:"!="},{name:">",description:"is greater than",value:">"},{name:"\u2265",description:"is greater than or equal to",value:">="},{name:"<",description:"is less than",value:"<"},{name:"\u2264",description:"is less than or equal to",value:"<="},{name:"has the strongest score",value:"+"},{name:"has the weakest score",value:"-"}];function le({onChange:t,value:n,...o}){var l,i;return(0,e.jsx)(Me.InputComboBox,{...o,value:{label:(i=(l=se.find(r=>r.value===n))==null?void 0:l.name)!=null?i:n,value:n},options:se.map(r=>({label:r.description?`${r.name}:${r.description}`:r.name,value:r.value})),styles:{...o.styles,valueContainer:(r,s)=>{var a,m;return{...r,padding:"var(--spacing-sm)",...(m=(a=o.styles)==null?void 0:a.valueContainer)==null?void 0:m.call(a,r,s)}},menu:(r,s)=>{var a,m;return{...r,width:"max-content",...(m=(a=o.styles)==null?void 0:a.menu)==null?void 0:m.call(a,r,s)}},control:(r,s)=>{var a,m;return{...r,border:0,...(m=(a=o.styles)==null?void 0:a.control)==null?void 0:m.call(a,r,s)}},indicatorSeparator:(r,s)=>{var a,m;return{...r,display:"none",...(m=(a=o.styles)==null?void 0:a.indicatorSeparator)==null?void 0:m.call(a,r,s)}}},onChange:r=>{r&&t(r.value)},components:{SingleValue:Ee,Option:Se,...o.components}})}var Oe=require("@uniformdev/design-system");var Pe=require("@uniformdev/design-system");function me(t){return{label:t.displayName,value:t.dim,isDisabled:!1}}function K(t){if(!t)return"unavailable";let[n]=t.split(":");switch(n.toLowerCase()){case"signal":return"data";case"intent":return"assign";case"audience":return"boy";default:return"user-list"}}function Y(t){let n=[],o="";for(let l of t){let[i]=l.displayName.split(":");o!==i&&(n.push({label:i,options:[]}),o=i),n[n.length-1].options.push(me(l))}return n}var X=t=>{var i;let{data:n,getStyles:o,className:l}=t;return(0,e.jsx)("div",{css:{...o("groupHeading",t),textTransform:"none",fontSize:"var(--font-size-sm)"},className:l},(0,e.jsx)("small",{css:{color:"var(--gray-500)",display:"flex",alignItems:"center",gap:"var(--spacing-xs)"}},(0,e.jsx)(Pe.Icon,{icon:K((i=n.label)!=null?i:""),iconColor:"currentColor",size:16}),(0,e.jsx)("span",null,n.label)))};function J({message:t}){return t?(0,e.jsx)("div",{css:{position:"absolute",background:"white",borderRadius:"3px",fontSize:"0.8rem",color:"var(--brand-primary-2)",bottom:"calc(var(--spacing-xs) * -1)"}},t):null}var Q=t=>{var u,C;let{data:n,getStyles:o,cx:l,isDisabled:i,isFocused:r,isSelected:s,className:a,innerRef:m,innerProps:c}=t,[,b]=(C=(u=n.label)==null?void 0:u.split(":"))!=null?C:[];return(0,e.jsx)("div",{css:o("option",t),className:l({option:!0,"option--is-disabled":i,"option--is-focused":r,"option--is-selected":s},a),ref:m,"aria-disabled":i,...c},(0,e.jsx)("div",{css:{color:"var(--gray-700)"}},b!=null?b:n.label))};var Re=require("@uniformdev/design-system");function ue({displayName:t}){let[n,o]=t.split(":");return(0,e.jsx)("div",{css:{whiteSpace:"normal",overflow:"hidden"}},o?(0,e.jsx)("small",{css:{color:"var(--gray-500)",display:"flex",alignItems:"center",gap:"var(--spacing-xs)"}},n?(0,e.jsx)(Re.Icon,{icon:K(n),iconColor:"currentColor",size:16}):null,(0,e.jsx)("span",null,n)):null,(0,e.jsx)("div",{css:{color:"var(--gray-700)"}},o!=null?o:n))}var Z=t=>{let{data:n,getStyles:o}=t;return(0,e.jsx)("div",{css:o("singleValue",t)},(0,e.jsx)(ue,{displayName:n.label}))};function pe({onChange:t,value:n,dimensions:o,errorMessage:l,...i}){return(0,e.jsx)(p.Fragment,null,(0,e.jsx)(Oe.InputComboBox,{...i,value:n?me(n):void 0,options:Y(o),styles:{...i.styles,valueContainer:(r,s)=>{var a,m;return{...r,padding:"var(--spacing-sm)",...(m=(a=i.styles)==null?void 0:a.valueContainer)==null?void 0:m.call(a,r,s)}}},onChange:r=>{r&&t(o.find(s=>s.dim===r.value))},components:{Option:Q,SingleValue:Z,GroupHeading:X,...i.components}}),(0,e.jsx)(J,{message:l}))}var ke=require("@uniformdev/design-system"),Te=require("react");function ce({onChange:t,criteriaMatch:n,dimensions:o,errorMessage:l,...i}){var c,b;let[r,s]=(0,Te.useState)(typeof n.r!="undefined"&&j(n.r)!==null?n.r.toString(10):""),a=n.rDim,m=n.rDim?o.dimIndex[n.rDim]:void 0;return(0,e.jsx)(p.Fragment,null,(0,e.jsx)(ke.InputComboBox,{...i,inputValue:r,menuShouldScrollIntoView:!0,value:{label:(c=m==null?void 0:m.displayName)!=null?c:a&&!m?`${n.rDim} (unknown)`:"",value:(b=n.rDim)!=null?b:n.r?n.r.toString(10):"",isDisabled:!1},options:[{label:"Enter a numeric score to match, or choose another dimension to match its score",value:"",isDisabled:!0},...Y(o.dimensions)],styles:{...i.styles,valueContainer:(u,C)=>{var f,I;return{...u,padding:"var(--spacing-sm)",...(I=(f=i.styles)==null?void 0:f.valueContainer)==null?void 0:I.call(f,u,C)}},option:(u,C)=>{var f,I;return{fontSize:C.isDisabled?"0.8rem":void 0,...(I=(f=i.styles)==null?void 0:f.option)==null?void 0:I.call(f,u,C)}}},onChange:u=>{var C;u&&(t({...n,rDim:(C=u.value)==null?void 0:C.toString(),r:void 0}),s(""))},onInputChange:(u,C)=>{let f=j(u);C.action==="input-change"||C.action==="set-value"?(s(u),(f||u==="")&&t({...n,r:u||void 0,rDim:void 0})):!f&&!j(C.prevInputValue)&&(!u&&n.r?s(n.r.toString()):s(u))},components:{...i.components,Option:Q,SingleValue:Z,GroupHeading:X},noOptionsMessage:({inputValue:u})=>j(u)?(0,e.jsx)(p.Fragment,null,(0,e.jsx)("div",null,"Score: ",u),(0,e.jsx)("small",null,"If you want to match on another dimension\u2019s score instead, clear the score value to search for a dimension.")):(0,e.jsx)(p.Fragment,null,(0,e.jsx)("div",null,"No dimensions match your search \u201C",u,"\u201D"),(0,e.jsx)("small",null,"If you want to match a literal score, enter a numeric value."))}),(0,e.jsx)(J,{message:l}))}function j(t){return/^\d+$/.test(t.toString(10))}var fe=({value:t,setValue:n,dimensions:o,onMenuOpen:l,onMenuClose:i,onAddCriteria:r,onRemoveCriteria:s,displayTitle:a=!0,components:m,errors:c={}})=>{let b=t||{crit:[]},u=d=>{n({...b,op:d==="&"?void 0:d})},C=()=>{let d={...b,crit:[...b.crit,{l:"",op:">",r:0}]};n(d),r==null||r(d)},f=(d,v)=>{n((0,de.default)(b,E=>{E.crit[v]=d}))},I=d=>{let v=(0,de.default)(b,g=>{g.crit.splice(d,1)}),E=v.crit.length===0?null:v;n(E),s==null||s(E)};return(0,e.jsx)("fieldset",{className:"personalization-criteria"},a?m!=null&&m.Title?(0,e.jsx)(m.Title,null):(0,e.jsx)("legend",{css:{fontSize:"var(--fs-md)",fontWeight:"var(--fw-bold)"}},"Personalize This"):null,m!=null&&m.CustomVariantName?(0,e.jsx)(m.CustomVariantName,null):null,b.crit.length?(0,e.jsx)("div",null,b.crit.map((d,v)=>{var D,L,V,$;let E=((D=d.l)==null?void 0:D.length)>0,g=d.op!=="+"&&d.op!=="-";return(0,e.jsx)("div",{css:we,key:v},(0,e.jsx)("div",{css:Ve.css`
79
- ${Be}
80
- grid-template-columns: minmax(0, 1fr) ${g?"minmax(0, 79px) minmax(0, 1fr)":"minmax(0, 1fr)"}
81
- `,className:"criteriaItemInner"},(0,e.jsx)("div",{css:q},(0,e.jsx)(pe,{errorMessage:(L=c.lhs)==null?void 0:L[v],css:_,styles:{control:y=>({...y,height:"100%"})},dimensions:o.dimensions,onChange:y=>{f({...d,l:y.dim},v)},value:o.dimIndex[d.l],onMenuOpen:l,onMenuClose:i})),(0,e.jsx)("div",{css:q},(0,e.jsx)(le,{name:`op-${v}`,css:_,styles:{control:y=>({...y,height:"100%"})},value:d.op,onChange:y=>{f(y==="+"||y==="-"?{...d,op:y,r:void 0,rDim:void 0}:{...d,op:y},v)},onMenuOpen:l,onMenuClose:i})),g?(0,e.jsx)("div",{css:q},(0,e.jsx)(ce,{errorMessage:(V=c.rhs)==null?void 0:V[v],css:_,styles:{control:y=>({...y,height:"100%"})},criteriaMatch:d,onChange:y=>{f(y,v)},isDisabled:!E,dimensions:o,onMenuOpen:l,onMenuClose:i})):null),(0,e.jsx)("button",{type:"button",onClick:()=>I(v),title:"Delete Personalization",css:{backgroundColor:"transparent",backgroundImage:"none",borderWidth:0}},(0,e.jsx)(B.Icon,{icon:Ne.CgCloseO,iconColor:"red",size:"1.5rem"})),v>0?(0,e.jsx)("div",{className:"criteria-group-operation",css:{position:"absolute",top:"-4rem",transform:"translateX(calc(1.5rem - 50%))"}},(0,e.jsx)(B.InputInlineSelect,{disabled:v>1,value:($=b.op)!=null?$:"&",options:[{label:"AND",value:"&"},{label:"OR",value:"|"}],onChange:y=>{u(y.value)}})):null)})):(0,e.jsx)(B.Callout,{title:"Default variant",type:"info",css:{marginBlock:"var(--spacing-base)"}},(0,e.jsx)(B.Paragraph,null,'This personalized variant has no match criteria and will be shown to any visitor that does not match any preceding variants. Ensure that default variants come last in the variant list. Personalize this variant by clicking "Add Criteria" to get started.')),o.dimensions.length===0?m!=null&&m.NoDimensionsDefined?(0,e.jsx)(m.NoDimensionsDefined,null):(0,e.jsx)(B.Callout,{title:"Dimensions",type:"info",css:{marginBlock:"var(--spacing-base)"}},(0,e.jsx)("p",null,"You do not have any dimensions configured.")):(0,e.jsx)(B.AddListButton,{className:"add-more",buttonText:"Add Criteria",onButtonClick:C}))};var tt=({contextConfig:t,...n})=>{let{loading:o,result:l,error:i}=P(t);return i?(0,e.jsx)(N.Callout,{type:"danger"},i):o||l===null?(0,e.jsx)(N.LoadingIndicator,null):(0,e.jsx)(fe,{...n,dimensions:l,components:{NoDimensionsDefined:()=>(0,e.jsx)(N.Callout,{title:"Dimensions",type:"info",css:{marginBlock:"var(--spacing-base)"}},(0,e.jsx)("p",null,"You do not have any dimensions configured. Create your first"," ",(0,e.jsx)("a",{href:`${t.apiHost}/projects/${encodeURIComponent(t.projectId)}/personalization/signals`,target:"_blank",rel:"noopener noreferrer",css:{":hover":{textDecorationLine:"underline"}}},"Dimension")))}})};var ze=R(require("react"));var ee=require("react"),te=require("@uniformdev/context/api");function z({apiHost:t,apiKey:n,projectId:o}){let[l,i]=(0,ee.useState)({loading:!1,notConfigured:!1,error:null,result:null});return(0,ee.useEffect)(()=>{if(!o||!n||!t){i({notConfigured:!0,loading:!1,error:null,result:null});return}(async()=>{i({notConfigured:!1,loading:!0,error:null,result:null});try{let a=await new te.ManifestClient({projectId:o,apiKey:n,apiHost:t}).get({preview:!0});i({notConfigured:!1,loading:!1,error:null,result:a})}catch(s){let a;s instanceof te.ApiClientError?(s.statusCode===403&&(a=`The API key ${n} did not have permissions to fetch the manifest. Ensure Context > Read Drafts permissions are granted.`),a=s.message):a=s.toString(),i({notConfigured:!1,loading:!1,error:a,result:null});return}})()},[t,n,o]),{result:l.result,error:l.error,loading:l.loading,notConfigured:l.notConfigured}}var Le=require("@uniformdev/design-system");function nt({children:t,versionMap:n,contextConfig:o}){let{loading:l,result:i}=z(o);if(l)return(0,e.jsx)(Le.LoadingIndicator,null);if(i){let r=n[i.project.ui_version];if(r)return(0,e.jsx)(r,null)}return(0,e.jsx)(ze.default.Fragment,null,t)}var M=R(require("react"));var $e=require("@uniformdev/design-system"),ne=(0,M.createContext)(null),ot=({loadingComponent:t,errorComponent:n,contextConfig:o,children:l})=>{let i=z(o),r=P(o);return i.error||i.notConfigured?n?(0,e.jsx)(n,{contextConfig:o,result:i}):(0,e.jsx)(M.default.Fragment,null,"ErrorComponent is not configured"):r.error||r.notConfigured?n?(0,e.jsx)(n,{contextConfig:o,result:r}):(0,e.jsx)(M.default.Fragment,null,"ErrorComponent is not configured"):i.loading||r.loading?t?(0,e.jsx)(t,null):(0,e.jsx)($e.LoadingIndicator,null):(0,e.jsx)(ne.Provider,{value:{manifest:i.result,dimensions:r.result,contextConfig:o}},l)};function rt(){let t=(0,M.useContext)(ne);if(!(t!=null&&t.contextConfig))throw new Error("Not within DataContext! Configuration data is not exist.");return t.contextConfig}function it(){let t=(0,M.useContext)(ne);if(!(t!=null&&t.manifest))throw new Error("Not within DataContext! Manifest data is not exist.");return t.manifest}function at(){let t=(0,M.useContext)(ne);if(!(t!=null&&t.dimensions))throw new Error("Not within DataContext! Dimensions data is not exist.");return t.dimensions}var Ae=require("uuid"),Ue=require("@uniformdev/context/api"),ge=async t=>{if(!t)return{valid:!1,error:new Error("contextConfig was not defined.")};if(!t.apiHost)return{valid:!1,error:new Error("apiHost was not defined.")};if(!t.apiKey)return{valid:!1,error:new Error("apiKey was not defined.")};if(!(0,Ae.validate)(t.apiKey)&&!t.projectId)return{valid:!1,error:new Error("projectId is required when using a modern API key.")};let n=new Ue.ManifestClient({projectId:t.projectId,apiKey:t.apiKey,apiHost:t.apiHost});try{let o=await n.get({preview:!0});return{valid:!0,result:o}}catch(o){return{valid:!1,error:o}}};var oe=require("react");var st=t=>{let[n,o]=(0,oe.useState)({validating:!1,error:void 0}),{apiKey:l,apiHost:i,projectId:r}=t||{};return(0,oe.useEffect)(()=>{if(!l||!i)return;(async()=>{o({validating:!0,error:void 0});let{error:a,result:m}=await ge({apiHost:i,apiKey:l,projectId:r});o(a?{error:a,validating:!1}:{error:void 0,validating:!1,result:m})})()},[i,l,r]),{validating:n.validating,error:n.error,result:n.result}};function lt(t){return Array.isArray(t)&&t.length>0&&t[0].cat!==void 0}function mt(t){return t.crit!==void 0}w(x,require("@uniformdev/design-system"),module.exports);0&&(module.exports={ContextData,CriteriaMatchMenu,CriteriaOperatorMenu,DimensionMenu,DimensionValue,EditLink,EnrichmentTag,PersonalizationCriteria,PersonalizationCriteriaStatic,ProjectUIVersion,addEnrichmentLink,contextCriteriaMenuOperators,isEnrichmentTagData,isPersonalizationCriteriaData,useContextConfig,useContextData,useDimensions,useDimensionsDataContext,useManifest,useValidateContextConfig,validateContextConfig});
78
+ `;var Re=require("@uniformdev/design-system");var Be=require("@emotion/react");function K({op:e}){return(0,t.jsx)("div",{className:"operation-bubble",css:Be.css`
79
+ align-items: center;
80
+ background: var(--gray-700);
81
+ border-radius: var(--rounded-full);
82
+ color: var(--white);
83
+ display: flex;
84
+ width: 30px;
85
+ height: 30px;
86
+ justify-content: center;
87
+ font-size: var(--fs-base);
88
+ `},e)}var Pe=e=>{var m,p;let{data:n,getStyles:o,isDisabled:s,innerRef:i,innerProps:r}=e,[l,a]=(p=(m=n.label)==null?void 0:m.split(":"))!=null?p:[];return(0,t.jsx)("div",{css:{...o("option",e),display:"flex",alignItems:"center",gap:"var(--spacing-sm)"},ref:i,"aria-disabled":s,...r},a?(0,t.jsx)(K,{op:l}):(0,t.jsx)("div",{css:{width:"20px",height:"20px"}}),(0,t.jsx)("div",null,a!=null?a:l))};var Oe=e=>{let{data:n,getStyles:o}=e;return(0,t.jsx)("div",{css:{...o("singleValue",e),width:"max-content"}},n.label.length===1?(0,t.jsx)(K,{op:n.label}):n.label)};var me=[{name:"=",description:"equals",value:"="},{name:"\u2260",description:"not equal",value:"!="},{name:">",description:"is greater than",value:">"},{name:"\u2265",description:"is greater than or equal to",value:">="},{name:"<",description:"is less than",value:"<"},{name:"\u2264",description:"is less than or equal to",value:"<="},{name:"has the strongest score",value:"+"},{name:"has the weakest score",value:"-"}];function ue({onChange:e,value:n,...o}){var s,i;return(0,t.jsx)(Re.InputComboBox,{...o,value:{label:(i=(s=me.find(r=>r.value===n))==null?void 0:s.name)!=null?i:n,value:n},options:me.map(r=>({label:r.description?`${r.name}:${r.description}`:r.name,value:r.value})),styles:{...o.styles,valueContainer:(r,l)=>{var a,m;return{...r,padding:"var(--spacing-sm)",...(m=(a=o.styles)==null?void 0:a.valueContainer)==null?void 0:m.call(a,r,l)}},menu:(r,l)=>{var a,m;return{...r,width:"max-content",...(m=(a=o.styles)==null?void 0:a.menu)==null?void 0:m.call(a,r,l)}},control:(r,l)=>{var a,m;return{...r,border:0,...(m=(a=o.styles)==null?void 0:a.control)==null?void 0:m.call(a,r,l)}},indicatorSeparator:(r,l)=>{var a,m;return{...r,display:"none",...(m=(a=o.styles)==null?void 0:a.indicatorSeparator)==null?void 0:m.call(a,r,l)}}},onChange:r=>{r&&e(r.value)},components:{SingleValue:Oe,Option:Pe,...o.components}})}var Ne=require("@uniformdev/design-system");var ke=require("@uniformdev/design-system");function ce(e){return{label:e.displayName,value:e.dim,isDisabled:!1}}function Y(e){if(!e)return"unavailable";let[n]=e.split(":");switch(n.toLowerCase()){case"signal":return"data";case"intent":return"assign";case"audience":return"boy";default:return"user-list"}}function X(e){let n=[],o="";for(let s of e){let[i]=s.displayName.split(":");o!==i&&(n.push({label:i,options:[]}),o=i),n[n.length-1].options.push(ce(s))}return n}var J=e=>{var i;let{data:n,getStyles:o,className:s}=e;return(0,t.jsx)("div",{css:{...o("groupHeading",e),textTransform:"none",fontSize:"var(--font-size-sm)"},className:s},(0,t.jsx)("small",{css:{color:"var(--gray-500)",display:"flex",alignItems:"center",gap:"var(--spacing-xs)"}},(0,t.jsx)(ke.Icon,{icon:Y((i=n.label)!=null?i:""),iconColor:"currentColor",size:16}),(0,t.jsx)("span",null,n.label)))};function Q({message:e}){return e?(0,t.jsx)("div",{css:{position:"absolute",background:"white",borderRadius:"3px",fontSize:"0.8rem",color:"var(--brand-primary-2)",bottom:"calc(var(--spacing-xs) * -1)"}},e):null}var Z=e=>{var c,u;let{data:n,getStyles:o,cx:s,isDisabled:i,isFocused:r,isSelected:l,className:a,innerRef:m,innerProps:p}=e,[,C]=(u=(c=n.label)==null?void 0:c.split(":"))!=null?u:[];return(0,t.jsx)("div",{css:o("option",e),className:s({option:!0,"option--is-disabled":i,"option--is-focused":r,"option--is-selected":l},a),ref:m,"aria-disabled":i,...p},(0,t.jsx)("div",{css:{color:"var(--gray-700)"}},C!=null?C:n.label))};var Te=require("@uniformdev/design-system");function pe({displayName:e}){let[n,o]=e.split(":");return(0,t.jsx)("div",{css:{whiteSpace:"normal",overflow:"hidden"}},o?(0,t.jsx)("small",{css:{color:"var(--gray-500)",display:"flex",alignItems:"center",gap:"var(--spacing-xs)"}},n?(0,t.jsx)(Te.Icon,{icon:Y(n),iconColor:"currentColor",size:16}):null,(0,t.jsx)("span",{"data-test-id":"dimension-name"},n)):null,(0,t.jsx)("div",{css:{color:"var(--gray-700)"},"data-test-id":"dimension-value"},o!=null?o:n))}var j=e=>{let{data:n,getStyles:o}=e;return(0,t.jsx)("div",{css:o("singleValue",e)},(0,t.jsx)(pe,{displayName:n.label}))};function de({onChange:e,value:n,dimensions:o,errorMessage:s,...i}){return(0,t.jsx)(d.Fragment,null,(0,t.jsx)(Ne.InputComboBox,{...i,value:n?ce(n):void 0,options:X(o),styles:{...i.styles,valueContainer:(r,l)=>{var a,m;return{...r,padding:"var(--spacing-sm)",...(m=(a=i.styles)==null?void 0:a.valueContainer)==null?void 0:m.call(a,r,l)}}},onChange:r=>{r&&e(o.find(l=>l.dim===r.value))},components:{Option:Z,SingleValue:j,GroupHeading:J,...i.components}}),(0,t.jsx)(Q,{message:s}))}var ze=require("@uniformdev/design-system"),Le=require("react");function fe({onChange:e,criteriaMatch:n,dimensions:o,errorMessage:s,...i}){var p,C;let[r,l]=(0,Le.useState)(typeof n.r!="undefined"&&ee(n.r)!==null?n.r.toString(10):""),a=n.rDim,m=n.rDim?o.dimIndex[n.rDim]:void 0;return(0,t.jsx)(d.Fragment,null,(0,t.jsx)(ze.InputComboBox,{...i,inputValue:r,menuShouldScrollIntoView:!0,value:{label:(p=m==null?void 0:m.displayName)!=null?p:a&&!m?`${n.rDim} (unknown)`:"",value:(C=n.rDim)!=null?C:n.r?n.r.toString(10):"",isDisabled:!1},options:[{label:"Enter a numeric score to match, or choose another dimension to match its score",value:"",isDisabled:!0},...X(o.dimensions)],styles:{...i.styles,valueContainer:(c,u)=>{var f,w;return{...c,padding:"var(--spacing-sm)",...(w=(f=i.styles)==null?void 0:f.valueContainer)==null?void 0:w.call(f,c,u)}},option:(c,u)=>{var f,w;return{fontSize:u.isDisabled?"0.8rem":void 0,...(w=(f=i.styles)==null?void 0:f.option)==null?void 0:w.call(f,c,u)}}},onChange:c=>{var u;c&&(e({...n,rDim:(u=c.value)==null?void 0:u.toString(),r:void 0}),l(""))},onInputChange:(c,u)=>{let f=ee(c);u.action==="input-change"||u.action==="set-value"?(l(c),(f||c==="")&&e({...n,r:c||void 0,rDim:void 0})):!f&&!ee(u.prevInputValue)&&(!c&&n.r?l(n.r.toString()):l(c))},components:{...i.components,Option:Z,SingleValue:j,GroupHeading:J},noOptionsMessage:({inputValue:c})=>ee(c)?(0,t.jsx)(d.Fragment,null,(0,t.jsx)("div",null,"Score: ",c),(0,t.jsx)("small",null,"If you want to match on another dimension\u2019s score instead, clear the score value to search for a dimension.")):(0,t.jsx)(d.Fragment,null,(0,t.jsx)("div",null,"No dimensions match your search \u201C",c,"\u201D"),(0,t.jsx)("small",null,"If you want to match a literal score, enter a numeric value."))}),(0,t.jsx)(Q,{message:s}))}function ee(e){return/^\d+$/.test(e.toString(10))}var Ce=({value:e,setValue:n,dimensions:o,onMenuOpen:s,onMenuClose:i,onAddCriteria:r,onRemoveCriteria:l,displayTitle:a=!0,components:m,errors:p={}})=>{let C=e||{crit:[]},c=g=>{n({...C,op:g==="&"?void 0:g})},u=()=>{let g={...C,crit:[...C.crit,{l:"",op:">",r:0}]};n(g),r==null||r(g)},f=(g,b)=>{n((0,ge.default)(C,V=>{V.crit[b]=g}))},w=g=>{let b=(0,ge.default)(C,h=>{h.crit.splice(g,1)}),V=b.crit.length===0?null:b;n(V),l==null||l(V)};return(0,t.jsx)("fieldset",{className:"personalization-criteria"},a?m!=null&&m.Title?(0,t.jsx)(m.Title,null):(0,t.jsx)("legend",{css:{fontSize:"var(--fs-md)",fontWeight:"var(--fw-bold)"}},"Personalize This"):null,m!=null&&m.CustomVariantName?(0,t.jsx)(m.CustomVariantName,null):null,C.crit.length?(0,t.jsx)("div",null,C.crit.map((g,b)=>{var I,$,N,A;let V=((I=g.l)==null?void 0:I.length)>0,h=g.op!=="+"&&g.op!=="-";return(0,t.jsx)("div",{css:Se,key:b,"data-test-id":"criteria-container"},(0,t.jsx)("div",{css:$e.css`
89
+ ${Ve}
90
+ grid-template-columns: minmax(0, 1fr) ${h?"minmax(0, 79px) minmax(0, 1fr)":"minmax(0, 1fr)"}
91
+ `,className:"criteriaItemInner"},(0,t.jsx)("div",{css:_,className:"criteria-wrapper","data-test-id":"select-criteria"},(0,t.jsx)(de,{errorMessage:($=p.lhs)==null?void 0:$[b],css:F,styles:{control:y=>({...y,height:"100%"})},dimensions:o.dimensions,onChange:y=>{f({...g,l:y.dim},b)},value:o.dimIndex[g.l],onMenuOpen:s,onMenuClose:i})),(0,t.jsx)("div",{css:_,className:"criteria-wrapper","data-test-id":"select-operator"},(0,t.jsx)(ue,{name:`op-${b}`,css:F,styles:{control:y=>({...y,height:"100%"})},value:g.op,onChange:y=>{f(y==="+"||y==="-"?{...g,op:y,r:void 0,rDim:void 0}:{...g,op:y},b)},onMenuOpen:s,onMenuClose:i})),h?(0,t.jsx)("div",{css:_,className:"criteria-wrapper","data-test-id":"select-match-criteria"},(0,t.jsx)(fe,{errorMessage:(N=p.rhs)==null?void 0:N[b],css:F,styles:{control:y=>({...y,height:"100%"})},criteriaMatch:g,onChange:y=>{f(y,b)},isDisabled:!V,dimensions:o,onMenuOpen:s,onMenuClose:i})):null),(0,t.jsx)("button",{type:"button",onClick:()=>w(b),title:"Delete Personalization",css:{backgroundColor:"transparent",backgroundImage:"none",borderWidth:0},"data-test-id":"button-delete"},(0,t.jsx)(E.Icon,{icon:Ae.CgCloseO,iconColor:"red",size:"1.5rem"})),b>0?(0,t.jsx)("div",{className:"criteria-group-operation",css:{position:"absolute",top:"-4rem",transform:"translateX(calc(1.5rem - 50%))"}},(0,t.jsx)(E.InputInlineSelect,{"data-test-id":"dropdown-button-combine",disabled:b>1,value:(A=C.op)!=null?A:"&",options:[{label:"AND",value:"&"},{label:"OR",value:"|"}],onChange:y=>{c(y.value)}})):null)})):(0,t.jsx)(E.Callout,{title:"Default variant",type:"info",css:{marginBlock:"var(--spacing-base)"}},(0,t.jsx)(E.Paragraph,null,'This personalized variant has no match criteria and will be shown to any visitor that does not match any preceding variants. Ensure that default variants come last in the variant list. Personalize this variant by clicking "Add Criteria" to get started.')),o.dimensions.length===0?m!=null&&m.NoDimensionsDefined?(0,t.jsx)(m.NoDimensionsDefined,null):(0,t.jsx)(E.Callout,{title:"Dimensions",type:"info",css:{marginBlock:"var(--spacing-base)"}},(0,t.jsx)("p",null,"You do not have any dimensions configured.")):(0,t.jsx)(E.AddListButton,{"data-test-id":"button-add-criteria",className:"add-more",buttonText:"Add Criteria",onButtonClick:u}))};var D=P(require("yup")),Ge=require("react-use");function lt(e){return Array.isArray(e)&&e.length>0&&e[0].cat!==void 0}function mt(e){return e.crit!==void 0}function te(e){return e!=="+"&&e!=="-"}function He(e){let n={crit:[]};return e.forEach(o=>{if(!o.path)return;let s=/\[(\d+)\]\.(\w+)/g,i=[...o.path.matchAll(s)][0];if((i==null?void 0:i.length)==3){let r=Number(i[1]),l=i[2];if(n.crit.length>r)n.crit[r]={...n.crit[r],[l]:o.message};else{let a={};a[l]=o.message,n.crit.push(a)}}}),n}async function he(e,n){let o=D.object().shape({l:D.string().required("Please select a dimension").oneOf(n==null?void 0:n.dimensions.map(s=>s.dim),"Selected left-side criteria dimension does not exist"),op:D.string().required(),r:D.mixed().nullable().when(["rDim","op"],{is:(s,i)=>te(i)&&!s,then:D.string().required("Choose a score or dimension")}),rDim:D.string().oneOf(n==null?void 0:n.dimensions.map(s=>s.dim),"Selected right-side criteria dimension does not exist").when(["r","op"],{is:(s,i)=>te(i)&&!s,then:D.string().required("Choose a score or dimension")})},["rDim","r"]);try{await D.object({crit:D.array(o)}).nullable().validate(e,{abortEarly:!1})}catch(s){return He(s.inner)}}var ut=({contextConfig:e,value:n,setValue:o,...s})=>{var C,c;let[i,r]=(0,Ue.useState)(void 0),{loading:l,result:a,error:m}=O(e);return(0,Ge.useAsync)(async()=>{if(n&&a){let u=await he(n,a);r(u)}},[n,a,he]),m?(0,t.jsx)(z.Callout,{type:"danger"},m):l||a===null?(0,t.jsx)(z.LoadingIndicator,null):(0,t.jsx)(Ce,{...s,value:n,setValue:async u=>{let f=await he(u,a);r(f),o(u)},errors:{lhs:(C=i==null?void 0:i.crit)==null?void 0:C.map(u=>u==null?void 0:u.l),rhs:(c=i==null?void 0:i.crit)==null?void 0:c.map(u=>u==null?void 0:u.rDim)},dimensions:a,components:{NoDimensionsDefined:()=>(0,t.jsx)(z.Callout,{title:"Dimensions",type:"info",css:{marginBlock:"var(--spacing-base)"}},(0,t.jsx)("p",null,"You do not have any dimensions configured. Create your first"," ",(0,t.jsx)("a",{href:`${e.apiHost}/projects/${encodeURIComponent(e.projectId)}/personalization/signals`,target:"_blank",rel:"noopener noreferrer",css:{":hover":{textDecorationLine:"underline"}}},"Dimension")))}})};var qe=P(require("react"));var ne=require("react"),oe=require("@uniformdev/context/api");function L({apiHost:e,apiKey:n,projectId:o}){let[s,i]=(0,ne.useState)({loading:!1,notConfigured:!1,error:null,result:null});return(0,ne.useEffect)(()=>{if(!o||!n||!e){i({notConfigured:!0,loading:!1,error:null,result:null});return}(async()=>{i({notConfigured:!1,loading:!0,error:null,result:null});try{let a=await new oe.CachedManifestClient({projectId:o,apiKey:n,apiHost:e}).get({preview:!0});i({notConfigured:!1,loading:!1,error:null,result:a})}catch(l){let a;l instanceof oe.ApiClientError?(l.statusCode===403&&(a=`The API key ${n} did not have permissions to fetch the manifest. Ensure Context > Read Drafts permissions are granted.`),a=l.message):a=l.toString(),i({notConfigured:!1,loading:!1,error:a,result:null});return}})()},[e,n,o]),{result:s.result,error:s.error,loading:s.loading,notConfigured:s.notConfigured}}var We=require("@uniformdev/design-system");function ct({children:e,versionMap:n,contextConfig:o}){let{loading:s,result:i}=L(o);if(s)return(0,t.jsx)(We.LoadingIndicator,null);if(i){let r=n[i.project.ui_version];if(r)return(0,t.jsx)(r,null)}return(0,t.jsx)(qe.default.Fragment,null,e)}var B=P(require("react"));var _e=require("@uniformdev/design-system"),re=(0,B.createContext)(null),pt=({loadingComponent:e,errorComponent:n,contextConfig:o,children:s})=>{let i=L(o),r=O(o);return i.error||i.notConfigured?n?(0,t.jsx)(n,{contextConfig:o,result:i}):(0,t.jsx)(B.default.Fragment,null,"ErrorComponent is not configured"):r.error||r.notConfigured?n?(0,t.jsx)(n,{contextConfig:o,result:r}):(0,t.jsx)(B.default.Fragment,null,"ErrorComponent is not configured"):i.loading||r.loading?e?(0,t.jsx)(e,null):(0,t.jsx)(_e.LoadingIndicator,null):(0,t.jsx)(re.Provider,{value:{manifest:i.result,dimensions:r.result,contextConfig:o}},s)};function dt(){let e=(0,B.useContext)(re);if(!(e!=null&&e.contextConfig))throw new Error("Not within DataContext! Configuration data is not exist.");return e.contextConfig}function ft(){let e=(0,B.useContext)(re);if(!(e!=null&&e.manifest))throw new Error("Not within DataContext! Manifest data is not exist.");return e.manifest}function gt(){let e=(0,B.useContext)(re);if(!(e!=null&&e.dimensions))throw new Error("Not within DataContext! Dimensions data is not exist.");return e.dimensions}var Fe=require("uuid"),Ke=require("@uniformdev/context/api"),be=async e=>{if(!e)return{valid:!1,error:new Error("contextConfig was not defined.")};if(!e.apiHost)return{valid:!1,error:new Error("apiHost was not defined.")};if(!e.apiKey)return{valid:!1,error:new Error("apiKey was not defined.")};if(!(0,Fe.validate)(e.apiKey)&&!e.projectId)return{valid:!1,error:new Error("projectId is required when using a modern API key.")};let n=new Ke.UncachedManifestClient({projectId:e.projectId,apiKey:e.apiKey,apiHost:e.apiHost});try{let o=await n.get({preview:!0});return{valid:!0,result:o}}catch(o){return{valid:!1,error:o}}};var ie=require("react");var Ct=e=>{let[n,o]=(0,ie.useState)({validating:!1,error:void 0}),{apiKey:s,apiHost:i,projectId:r}=e||{};return(0,ie.useEffect)(()=>{if(!s||!i)return;(async()=>{o({validating:!0,error:void 0});let{error:a,result:m}=await be({apiHost:i,apiKey:s,projectId:r});o(a?{error:a,validating:!1}:{error:void 0,validating:!1,result:m})})()},[i,s,r]),{validating:n.validating,error:n.error,result:n.result}};M(x,require("@uniformdev/design-system"),module.exports);0&&(module.exports={ContextData,CriteriaMatchMenu,CriteriaOperatorMenu,DimensionMenu,DimensionValue,EditLink,EnrichmentTag,PersonalizationCriteria,PersonalizationCriteriaStatic,ProjectUIVersion,addEnrichmentLink,contextCriteriaMenuOperators,convertErrorsToObj,isEnrichmentTagData,isPersonalizationCriteriaData,opHasRhs,useContextConfig,useContextData,useDimensions,useDimensionsDataContext,useManifest,useValidateContextConfig,validateContextConfig});
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{jsx as e}from"@emotion/react";import*as p from"react";import{Icon as ye}from"@uniformdev/design-system";import{CgChevronRight as De}from"react-icons/cg";import{css as he}from"@emotion/react";var Y=he`
1
+ import{jsx as e}from"@emotion/react";import*as d from"react";import{Icon as xe}from"@uniformdev/design-system";import{CgChevronRight as we}from"react-icons/cg";import{css as De}from"@emotion/react";var Q=De`
2
2
  display: flex;
3
3
  align-items: center;
4
4
  font-weight: var(--fw-bold);
@@ -9,7 +9,7 @@ import{jsx as e}from"@emotion/react";import*as p from"react";import{Icon as ye}f
9
9
  &:focus {
10
10
  text-decoration-line: underline;
11
11
  }
12
- `;var X=({linkTo:t,name:n,linkText:o=`Edit ${n} Component`})=>e("a",{css:Y,title:`Edit ${n} component definition`,rel:"noopener noreferrer",target:"_blank",href:t},o,e(ye,{icon:De,iconColor:"currentColor",size:"1.5rem"}));import j,{useMemo as Q,useState as U}from"react";import{useEffect as xe,useState as Ie}from"react";import{DimensionClient as we,computeDimensionDisplayName as Be,ApiClientError as Se}from"@uniformdev/context/api";function J(t,n,o){return t.reduce((m,a)=>{let r=n(a);if(typeof r=="undefined"||r===null)throw new Error("Objectify key selector returned undefined or null.");return m[n(a)]=o?o(a):a,m},{})}function I({apiHost:t,apiKey:n,projectId:o}){let[m,a]=Ie({loading:!1,notConfigured:!1,error:null,result:null});return xe(()=>{if(!o||!n||!t){a({notConfigured:!0,loading:!1,error:null,result:null});return}(async()=>{a({notConfigured:!1,loading:!0,error:null,result:null});try{let i=(await new we({projectId:o,apiKey:n,apiHost:t}).get()).dimensions.map(c=>({...c,displayName:Be(c)})),l={dimensions:i,dimIndex:J(i,c=>c.dim,c=>c)};a({notConfigured:!1,loading:!1,error:null,result:l})}catch(s){let i;s instanceof Se?i=s.message:i=s.toString(),a({notConfigured:!1,loading:!1,error:i,result:null});return}})()},[t,n,o]),{result:m.result,error:m.error,loading:m.loading,notConfigured:m.notConfigured}}import{getEnrichmentVectorKey as G}from"@uniformdev/context";import{Input as ee,Button as Ee,InputSelect as Me,Callout as H,Icon as W,LoadingIndicator as Pe,AddListButton as Re}from"@uniformdev/design-system";import{CgMathPlus as Oe,CgMathMinus as ke,CgCloseO as Te}from"react-icons/cg";import Z from"immer";import{css as q}from"@emotion/react";var Ve=q`
12
+ `;var Z=({linkTo:t,name:n,linkText:o=`Edit ${n} Component`})=>e("a",{css:Q,title:`Edit ${n} component definition`,rel:"noopener noreferrer",target:"_blank",href:t},o,e(xe,{icon:we,iconColor:"currentColor",size:"1.5rem"}));import ne,{useMemo as ee,useState as G}from"react";import{useEffect as Me,useState as Ee}from"react";import{computeDimensionDisplayName as Se,ApiClientError as Ve,CachedDimensionClient as Be}from"@uniformdev/context/api";function j(t,n,o){return t.reduce((s,i)=>{let r=n(i);if(typeof r=="undefined"||r===null)throw new Error("Objectify key selector returned undefined or null.");return s[n(i)]=o?o(i):i,s},{})}function w({apiHost:t,apiKey:n,projectId:o}){let[s,i]=Ee({loading:!1,notConfigured:!1,error:null,result:null});return Me(()=>{if(!o||!n||!t){i({notConfigured:!0,loading:!1,error:null,result:null});return}(async()=>{i({notConfigured:!1,loading:!0,error:null,result:null});try{let a=(await new Be({projectId:o,apiKey:n,apiHost:t}).get()).dimensions.map(p=>({...p,displayName:Se(p)})),m={dimensions:a,dimIndex:j(a,p=>p.dim,p=>p)};i({notConfigured:!1,loading:!1,error:null,result:m})}catch(l){let a;l instanceof Ve?a=l.message:a=l.toString(),i({notConfigured:!1,loading:!1,error:a,result:null});return}})()},[t,n,o]),{result:s.result,error:s.error,loading:s.loading,notConfigured:s.notConfigured}}import{getEnrichmentVectorKey as H}from"@uniformdev/context";import{Input as oe,Button as Pe,InputSelect as Oe,Callout as q,Icon as W,LoadingIndicator as Re,AddListButton as ke}from"@uniformdev/design-system";import{CgMathPlus as Te,CgMathMinus as Ne,CgCloseO as ze}from"react-icons/cg";import te from"immer";import{css as _}from"@emotion/react";var Le=_`
13
13
  flex: 2;
14
14
  display: flex;
15
15
  width: 50%;
@@ -20,7 +20,7 @@ import{jsx as e}from"@emotion/react";import*as p from"react";import{Icon as ye}f
20
20
  &:focus {
21
21
  text-decoration-line: underline;
22
22
  }
23
- `,Ot=({value:t,setValue:n,contextConfig:o,displayTitle:m=!0})=>{let{loading:a,result:r,error:s}=I(o),i=Q(()=>{if(r)return r.dimensions.filter(g=>g.category==="ENR")},[r]),l=Q(()=>{if(!t)return i;if(i)return i.filter(g=>!t.some(y=>G(y.cat,y.key)===g.dim))},[i,t]),[c,h]=U(""),[u,C]=U(50),[f,D]=U(!1),d=i==null?void 0:i.find(g=>g.dim===c),v=()=>{let[g,y]=c.split("_");x([...t!=null?t:[],{cat:g,key:y,str:u}]),h(""),C(50),D(!1)},x=g=>{let y=[];r?y=g.filter(w=>{let E=r.dimIndex[G(w.cat,w.key)];return Boolean(E)}):y=g;let S=y.length===0?null:y;n(S)};return s?e(H,{type:"danger"},s):a||r===null?e(Pe,null):e("fieldset",{className:"enrichment-tag"},m?e("div",{css:{display:"flex",justifyContent:"space-between",marginBottom:"var(--spacing-base)"}},e("legend",{css:{fontSize:"var(--fs-md)",fontWeight:"var(--fw-bold)"}},"Enrichment Tags")):null,i!=null&&i.length?!f&&!t?e(H,{title:"No enrichment tags assigned.",type:"info",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"Click"," ",e("a",{onClick:()=>D(!0),target:"_blank",rel:"noopener noreferrer",css:{textDecorationLine:"underline"}},"here")," ","to assign your first enrichment tag.")):e(j.Fragment,null,r&&e($e,{list:t!=null?t:[],setList:x,dimIndex:r.dimIndex}),f&&l&&l.length>0?e("div",{className:"add-enrichment-tag",css:{display:"flex",flexWrap:"wrap",gap:"var(--spacing-lg)",marginTop:"var(--spacing-md)",alignItems:"center"}},e("div",{css:{flexGrow:1}},e(Me,{name:"enrichment-type",label:"Enrichment Tag",showLabel:!0,value:c,options:[{label:"Select",value:""},...l.map(g=>({label:g.displayName,value:g.dim}))],onChange:g=>h(g.currentTarget.value)})),e(Le,{score:u,setValue:C,cap:d?d.cap:100,css:{flexBasis:"9rem"}}),e(Ee,{buttonType:"tertiary",size:"xl",css:{marginBottom:"var(--spacing-xs)",height:"3.5rem",margin:0,alignSelf:"flex-end"},onClick:v,disabled:!c},"Add")):null,e("div",{className:"enrichment-cta",style:{paddingTop:"10px",display:"flex",justifyContent:"space-between"}},!f&&l&&l.length>0&&t?e(Re,{className:"add-more",buttonText:"Add More",onButtonClick:()=>D(!0)}):e("a",{css:Ve,title:"none",href:"#"}),e(X,{name:"Enrichments",linkText:"Manage Enrichments",linkTo:`${o.apiHost}/projects/${encodeURIComponent(o.projectId)}/personalization/enrichments`}))):e(Ne,{contextConfig:o}))},Ne=({contextConfig:t})=>e(H,{title:"No enrichments found.",type:"caution",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"Looks like you do not have any enrichment created in your connected Uniform project. Start by creating your first enrichment"," ",e("a",{href:`${t.apiHost}/projects/${encodeURIComponent(t.projectId)}/personalization/enrichments`,target:"_blank",rel:"noopener noreferrer",css:{":hover":{textDecorationLine:"underline"}}},"here"),".")),te=(t,n=100,o=0)=>Math.max(Math.min(t,n),o),ne=q`
23
+ `,$t=({value:t,setValue:n,contextConfig:o,displayTitle:s=!0})=>{let{loading:i,result:r,error:l}=w(o),a=ee(()=>{if(r)return r.dimensions.filter(h=>h.category==="ENR")},[r]),m=ee(()=>{if(!t)return a;if(a)return a.filter(h=>!t.some(D=>H(D.cat,D.key)===h.dim))},[a,t]),[p,C]=G(""),[c,u]=G(50),[f,I]=G(!1),g=a==null?void 0:a.find(h=>h.dim===p),b=()=>{let[h,D]=p.split("_");x([...t!=null?t:[],{cat:h,key:D,str:c}]),C(""),u(50),I(!1)},x=h=>{let D=[];r?D=h.filter(M=>{let V=r.dimIndex[H(M.cat,M.key)];return Boolean(V)}):D=h;let S=D.length===0?null:D;n(S)};return l?e(q,{type:"danger"},l):i||r===null?e(Re,null):e("fieldset",{className:"enrichment-tag"},s?e("div",{css:{display:"flex",justifyContent:"space-between",marginBottom:"var(--spacing-base)"}},e("legend",{css:{fontSize:"var(--fs-md)",fontWeight:"var(--fw-bold)"}},"Enrichment Tags")):null,a!=null&&a.length?!f&&!t?e(q,{title:"No enrichment tags assigned.",type:"info",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"Click"," ",e("a",{onClick:()=>I(!0),target:"_blank",rel:"noopener noreferrer",css:{textDecorationLine:"underline"}},"here")," ","to assign your first enrichment tag.")):e(ne.Fragment,null,r&&e(Ge,{list:t!=null?t:[],setList:x,dimIndex:r.dimIndex}),f&&m&&m.length>0?e("div",{className:"add-enrichment-tag",css:{display:"flex",flexWrap:"wrap",gap:"var(--spacing-lg)",marginTop:"var(--spacing-md)",alignItems:"center"}},e("div",{css:{flexGrow:1}},e(Oe,{name:"enrichment-type",label:"Enrichment Tag",showLabel:!0,value:p,options:[{label:"Select",value:""},...m.map(h=>({label:h.displayName,value:h.dim}))],onChange:h=>C(h.currentTarget.value)})),e(Ue,{score:c,setValue:u,cap:g?g.cap:100,css:{flexBasis:"9rem"}}),e(Pe,{buttonType:"tertiary",size:"xl",css:{marginBottom:"var(--spacing-xs)",height:"3.5rem",margin:0,alignSelf:"flex-end"},onClick:b,disabled:!p},"Add")):null,e("div",{className:"enrichment-cta",style:{paddingTop:"10px",display:"flex",justifyContent:"space-between"}},!f&&m&&m.length>0&&t?e(ke,{className:"add-more",buttonText:"Add More",onButtonClick:()=>I(!0)}):e("a",{css:Le,title:"none",href:"#"}),e(Z,{name:"Enrichments",linkText:"Manage Enrichments",linkTo:`${o.apiHost}/projects/${encodeURIComponent(o.projectId)}/personalization/enrichments`}))):e($e,{contextConfig:o}))},$e=({contextConfig:t})=>e(q,{title:"No enrichments found.",type:"caution",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"Looks like you do not have any enrichment created in your connected Uniform project. Start by creating your first enrichment"," ",e("a",{href:`${t.apiHost}/projects/${encodeURIComponent(t.projectId)}/personalization/enrichments`,target:"_blank",rel:"noopener noreferrer",css:{":hover":{textDecorationLine:"underline"}}},"here"),".")),re=(t,n=100,o=0)=>Math.max(Math.min(t,n),o),ie=_`
24
24
  position: absolute;
25
25
  bottom: 0.875rem;
26
26
  left: var(--spacing-sm);
@@ -32,27 +32,27 @@ import{jsx as e}from"@emotion/react";import*as p from"react";import{Icon as ye}f
32
32
  background-color: var(--gray-100);
33
33
  border: 1px solid var(--gray-300);
34
34
  border-radius: var(--rounded-full);
35
- `,ze=q`
36
- ${ne}
35
+ `,Ae=_`
36
+ ${ie}
37
37
  left: auto;
38
38
  right: var(--spacing-sm);
39
- `,Le=({score:t,setValue:n,cap:o=100,...m})=>{let a=r=>{let s=r==="increment"?t+10:t-10;s<0&&(s=0),s>o&&(s=o),n(s)};return e("div",{css:{position:"relative"},...m},e(ee,{label:"Strength",id:"enrichment-score",type:"number",min:0,max:o,value:t,onChange:r=>n(te(Number(r.currentTarget.value)||0,o)),css:{textAlign:"center",boxSizing:"border-box"}}),e("button",{type:"button",title:"Reduce enrichment count",onClick:()=>a("decrement"),disabled:t===0,className:"scoreCounterButton",css:ne},e(W,{icon:ke,iconColor:"gray",size:"1.5rem"})),e("button",{type:"button",title:"Increase enrichment count",onClick:()=>a("increment"),className:"scoreCounterButton",css:ze},e(W,{icon:Oe,iconColor:"gray",size:"1.5rem"})))},$e=({list:t,setList:n,dimIndex:o})=>{let m=r=>{n(Z(t,s=>{s.splice(r,1)}))},a=(r,s)=>{var l;let i=(l=o[`${t[r].cat}_${t[r].key}`])==null?void 0:l.cap;n(Z(t,c=>{c[r].str=te(Number(s)||0,i)}))};return e(j.Fragment,null,t.map((r,s)=>{let i=o[G(r.cat,r.key)];if(!!i)return e("div",{css:{display:"flex",alignItems:"center",gap:"var(--spacing-base)",backgroundColor:"var(--brand-secondary-2)",boxShadow:"var(--shadow-base)",borderRadius:"var(--rounded-base)",paddingInline:"var(--spacing-base)",marginBlock:"var(--spacing-base)"},className:"selected-enrichments",key:`${r.cat}-${r.key}`},e("span",{css:{fontWeight:"var(--fw-bold)",color:i?void 0:"var(--brand-secondary-5)"}},i?i.displayName:`Enrichment '${r.cat}_${r.key}' is unknown`),e("div",{css:{marginLeft:"auto",display:"flex",alignItems:"center",border:"0 solid var(--gray-400)",borderLeftWidth:"1px",borderRightWidth:"1px",padding:"var(--spacing-sm) var(--spacing-base)",flexBasis:"9rem"}},e(ee,{type:"text",min:0,max:i.cap||100,title:"score",value:r.str,css:{textAlign:"center",width:"100px"},onChange:l=>a(s,l.currentTarget.value)})),e("button",{type:"button",title:"Delete enrichment",onClick:()=>m(s),css:{border:0}},e(W,{icon:Te,iconColor:"red",size:"1.5rem"})))}))};import{LoadingIndicator as Ze,Callout as ge}from"@uniformdev/design-system";import{css as Fe}from"@emotion/react";import{Callout as ce,InputInlineSelect as Ke,Icon as Ye,AddListButton as Xe,Paragraph as Je}from"@uniformdev/design-system";import de from"immer";import{CgCloseO as Qe}from"react-icons/cg";import{css as B}from"@emotion/react";var _="6rem",oe=B`
39
+ `,Ue=({score:t,setValue:n,cap:o=100,...s})=>{let i=r=>{let l=r==="increment"?t+10:t-10;l<0&&(l=0),l>o&&(l=o),n(l)};return e("div",{css:{position:"relative"},...s},e(oe,{label:"Strength",id:"enrichment-score",type:"number",min:0,max:o,value:t,onChange:r=>n(re(Number(r.currentTarget.value)||0,o)),css:{textAlign:"center",boxSizing:"border-box"}}),e("button",{type:"button",title:"Reduce enrichment count",onClick:()=>i("decrement"),disabled:t===0,className:"scoreCounterButton",css:ie},e(W,{icon:Ne,iconColor:"gray",size:"1.5rem"})),e("button",{type:"button",title:"Increase enrichment count",onClick:()=>i("increment"),className:"scoreCounterButton",css:Ae},e(W,{icon:Te,iconColor:"gray",size:"1.5rem"})))},Ge=({list:t,setList:n,dimIndex:o})=>{let s=r=>{n(te(t,l=>{l.splice(r,1)}))},i=(r,l)=>{var m;let a=(m=o[`${t[r].cat}_${t[r].key}`])==null?void 0:m.cap;n(te(t,p=>{p[r].str=re(Number(l)||0,a)}))};return e(ne.Fragment,null,t.map((r,l)=>{let a=o[H(r.cat,r.key)];if(!!a)return e("div",{css:{display:"flex",alignItems:"center",gap:"var(--spacing-base)",backgroundColor:"var(--brand-secondary-2)",boxShadow:"var(--shadow-base)",borderRadius:"var(--rounded-base)",paddingInline:"var(--spacing-base)",marginBlock:"var(--spacing-base)"},className:"selected-enrichments",key:`${r.cat}-${r.key}`},e("span",{css:{fontWeight:"var(--fw-bold)",color:a?void 0:"var(--brand-secondary-5)"}},a?a.displayName:`Enrichment '${r.cat}_${r.key}' is unknown`),e("div",{css:{marginLeft:"auto",display:"flex",alignItems:"center",border:"0 solid var(--gray-400)",borderLeftWidth:"1px",borderRightWidth:"1px",padding:"var(--spacing-sm) var(--spacing-base)",flexBasis:"9rem"}},e(oe,{type:"text",min:0,max:a.cap||100,title:"score",value:r.str,css:{textAlign:"center",width:"100px"},onChange:m=>i(l,m.currentTarget.value)})),e("button",{type:"button",title:"Delete enrichment",onClick:()=>s(l),css:{border:0}},e(W,{icon:ze,iconColor:"red",size:"1.5rem"})))}))};import{useState as nt}from"react";import{LoadingIndicator as ot,Callout as be}from"@uniformdev/design-system";import{css as Je}from"@emotion/react";import{Callout as ge,InputInlineSelect as Qe,Icon as Ze,AddListButton as je,Paragraph as et}from"@uniformdev/design-system";import Ce from"immer";import{CgCloseO as tt}from"react-icons/cg";import{css as E}from"@emotion/react";var F="6rem",ae=E`
40
40
  position: relative;
41
41
  padding: var(--spacing-base);
42
42
  border: 1px solid var(--gray-300);
43
43
  box-shadow: var(--shadow-base);
44
44
  background-color: white;
45
45
  border-radius: var(--rounded-base);
46
- margin-top: ${_};
46
+ margin-top: ${F};
47
47
  display: flex;
48
48
  &:before {
49
49
  content: '';
50
50
  display: block;
51
51
  width: 1px;
52
- height: ${_};
52
+ height: ${F};
53
53
  background-color: var(--gray-300);
54
54
  position: absolute;
55
- top: -${_};
55
+ top: -${F};
56
56
  left: var(--spacing-lg);
57
57
  }
58
58
  &:first-of-type {
@@ -61,21 +61,31 @@ import{jsx as e}from"@emotion/react";import*as p from"react";import{Icon as ye}f
61
61
  display: none;
62
62
  }
63
63
  }
64
- `,re=B`
64
+ `,se=E`
65
65
  display: grid;
66
66
  gap: var(--spacing-xs);
67
67
  flex-grow: 1;
68
68
  margin-right: var(--spacing-base);
69
- `,M=B`
69
+ `,B=E`
70
70
  width: 100%;
71
71
  display: flex;
72
72
  align-items: stretch;
73
- `,P=B`
73
+ `,P=E`
74
74
  height: 100%;
75
75
  width: 100%;
76
- `,Vt=B`
76
+ `,Gt=E`
77
77
  height: 100%;
78
- `;import{InputComboBox as Ue}from"@uniformdev/design-system";function R({op:t}){return e("div",{css:{background:"var(--gray-700)",color:"white",borderRadius:"100%",width:"30px",height:"30px",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"24px"}},t)}var ie=t=>{var l,c;let{data:n,getStyles:o,isDisabled:m,innerRef:a,innerProps:r}=t,[s,i]=(c=(l=n.label)==null?void 0:l.split(":"))!=null?c:[];return e("div",{css:{...o("option",t),display:"flex",alignItems:"center",gap:"var(--spacing-sm)"},ref:a,"aria-disabled":m,...r},i?e(R,{op:s}):e("div",{css:{width:"20px",height:"20px"}}),e("div",null,i!=null?i:s))};var ae=t=>{let{data:n,getStyles:o}=t;return e("div",{css:{...o("singleValue",t),width:"max-content"}},n.label.length===1?e(R,{op:n.label}):n.label)};var se=[{name:"=",description:"equals",value:"="},{name:"\u2260",description:"not equal",value:"!="},{name:">",description:"is greater than",value:">"},{name:"\u2265",description:"is greater than or equal to",value:">="},{name:"<",description:"is less than",value:"<"},{name:"\u2264",description:"is less than or equal to",value:"<="},{name:"has the strongest score",value:"+"},{name:"has the weakest score",value:"-"}];function le({onChange:t,value:n,...o}){var m,a;return e(Ue,{...o,value:{label:(a=(m=se.find(r=>r.value===n))==null?void 0:m.name)!=null?a:n,value:n},options:se.map(r=>({label:r.description?`${r.name}:${r.description}`:r.name,value:r.value})),styles:{...o.styles,valueContainer:(r,s)=>{var i,l;return{...r,padding:"var(--spacing-sm)",...(l=(i=o.styles)==null?void 0:i.valueContainer)==null?void 0:l.call(i,r,s)}},menu:(r,s)=>{var i,l;return{...r,width:"max-content",...(l=(i=o.styles)==null?void 0:i.menu)==null?void 0:l.call(i,r,s)}},control:(r,s)=>{var i,l;return{...r,border:0,...(l=(i=o.styles)==null?void 0:i.control)==null?void 0:l.call(i,r,s)}},indicatorSeparator:(r,s)=>{var i,l;return{...r,display:"none",...(l=(i=o.styles)==null?void 0:i.indicatorSeparator)==null?void 0:l.call(i,r,s)}}},onChange:r=>{r&&t(r.value)},components:{SingleValue:ae,Option:ie,...o.components}})}import{InputComboBox as We}from"@uniformdev/design-system";import{Icon as Ge}from"@uniformdev/design-system";function F(t){return{label:t.displayName,value:t.dim,isDisabled:!1}}function O(t){if(!t)return"unavailable";let[n]=t.split(":");switch(n.toLowerCase()){case"signal":return"data";case"intent":return"assign";case"audience":return"boy";default:return"user-list"}}function k(t){let n=[],o="";for(let m of t){let[a]=m.displayName.split(":");o!==a&&(n.push({label:a,options:[]}),o=a),n[n.length-1].options.push(F(m))}return n}var T=t=>{var a;let{data:n,getStyles:o,className:m}=t;return e("div",{css:{...o("groupHeading",t),textTransform:"none",fontSize:"var(--font-size-sm)"},className:m},e("small",{css:{color:"var(--gray-500)",display:"flex",alignItems:"center",gap:"var(--spacing-xs)"}},e(Ge,{icon:O((a=n.label)!=null?a:""),iconColor:"currentColor",size:16}),e("span",null,n.label)))};function V({message:t}){return t?e("div",{css:{position:"absolute",background:"white",borderRadius:"3px",fontSize:"0.8rem",color:"var(--brand-primary-2)",bottom:"calc(var(--spacing-xs) * -1)"}},t):null}var N=t=>{var u,C;let{data:n,getStyles:o,cx:m,isDisabled:a,isFocused:r,isSelected:s,className:i,innerRef:l,innerProps:c}=t,[,h]=(C=(u=n.label)==null?void 0:u.split(":"))!=null?C:[];return e("div",{css:o("option",t),className:m({option:!0,"option--is-disabled":a,"option--is-focused":r,"option--is-selected":s},i),ref:l,"aria-disabled":a,...c},e("div",{css:{color:"var(--gray-700)"}},h!=null?h:n.label))};import{Icon as He}from"@uniformdev/design-system";function me({displayName:t}){let[n,o]=t.split(":");return e("div",{css:{whiteSpace:"normal",overflow:"hidden"}},o?e("small",{css:{color:"var(--gray-500)",display:"flex",alignItems:"center",gap:"var(--spacing-xs)"}},n?e(He,{icon:O(n),iconColor:"currentColor",size:16}):null,e("span",null,n)):null,e("div",{css:{color:"var(--gray-700)"}},o!=null?o:n))}var z=t=>{let{data:n,getStyles:o}=t;return e("div",{css:o("singleValue",t)},e(me,{displayName:n.label}))};function ue({onChange:t,value:n,dimensions:o,errorMessage:m,...a}){return e(p.Fragment,null,e(We,{...a,value:n?F(n):void 0,options:k(o),styles:{...a.styles,valueContainer:(r,s)=>{var i,l;return{...r,padding:"var(--spacing-sm)",...(l=(i=a.styles)==null?void 0:i.valueContainer)==null?void 0:l.call(i,r,s)}}},onChange:r=>{r&&t(o.find(s=>s.dim===r.value))},components:{Option:N,SingleValue:z,GroupHeading:T,...a.components}}),e(V,{message:m}))}import{InputComboBox as qe}from"@uniformdev/design-system";import{useState as _e}from"react";function pe({onChange:t,criteriaMatch:n,dimensions:o,errorMessage:m,...a}){var c,h;let[r,s]=_e(typeof n.r!="undefined"&&L(n.r)!==null?n.r.toString(10):""),i=n.rDim,l=n.rDim?o.dimIndex[n.rDim]:void 0;return e(p.Fragment,null,e(qe,{...a,inputValue:r,menuShouldScrollIntoView:!0,value:{label:(c=l==null?void 0:l.displayName)!=null?c:i&&!l?`${n.rDim} (unknown)`:"",value:(h=n.rDim)!=null?h:n.r?n.r.toString(10):"",isDisabled:!1},options:[{label:"Enter a numeric score to match, or choose another dimension to match its score",value:"",isDisabled:!0},...k(o.dimensions)],styles:{...a.styles,valueContainer:(u,C)=>{var f,D;return{...u,padding:"var(--spacing-sm)",...(D=(f=a.styles)==null?void 0:f.valueContainer)==null?void 0:D.call(f,u,C)}},option:(u,C)=>{var f,D;return{fontSize:C.isDisabled?"0.8rem":void 0,...(D=(f=a.styles)==null?void 0:f.option)==null?void 0:D.call(f,u,C)}}},onChange:u=>{var C;u&&(t({...n,rDim:(C=u.value)==null?void 0:C.toString(),r:void 0}),s(""))},onInputChange:(u,C)=>{let f=L(u);C.action==="input-change"||C.action==="set-value"?(s(u),(f||u==="")&&t({...n,r:u||void 0,rDim:void 0})):!f&&!L(C.prevInputValue)&&(!u&&n.r?s(n.r.toString()):s(u))},components:{...a.components,Option:N,SingleValue:z,GroupHeading:T},noOptionsMessage:({inputValue:u})=>L(u)?e(p.Fragment,null,e("div",null,"Score: ",u),e("small",null,"If you want to match on another dimension\u2019s score instead, clear the score value to search for a dimension.")):e(p.Fragment,null,e("div",null,"No dimensions match your search \u201C",u,"\u201D"),e("small",null,"If you want to match a literal score, enter a numeric value."))}),e(V,{message:m}))}function L(t){return/^\d+$/.test(t.toString(10))}var fe=({value:t,setValue:n,dimensions:o,onMenuOpen:m,onMenuClose:a,onAddCriteria:r,onRemoveCriteria:s,displayTitle:i=!0,components:l,errors:c={}})=>{let h=t||{crit:[]},u=d=>{n({...h,op:d==="&"?void 0:d})},C=()=>{let d={...h,crit:[...h.crit,{l:"",op:">",r:0}]};n(d),r==null||r(d)},f=(d,v)=>{n(de(h,x=>{x.crit[v]=d}))},D=d=>{let v=de(h,g=>{g.crit.splice(d,1)}),x=v.crit.length===0?null:v;n(x),s==null||s(x)};return e("fieldset",{className:"personalization-criteria"},i?l!=null&&l.Title?e(l.Title,null):e("legend",{css:{fontSize:"var(--fs-md)",fontWeight:"var(--fw-bold)"}},"Personalize This"):null,l!=null&&l.CustomVariantName?e(l.CustomVariantName,null):null,h.crit.length?e("div",null,h.crit.map((d,v)=>{var y,S,w,E;let x=((y=d.l)==null?void 0:y.length)>0,g=d.op!=="+"&&d.op!=="-";return e("div",{css:oe,key:v},e("div",{css:Fe`
79
- ${re}
80
- grid-template-columns: minmax(0, 1fr) ${g?"minmax(0, 79px) minmax(0, 1fr)":"minmax(0, 1fr)"}
81
- `,className:"criteriaItemInner"},e("div",{css:M},e(ue,{errorMessage:(S=c.lhs)==null?void 0:S[v],css:P,styles:{control:b=>({...b,height:"100%"})},dimensions:o.dimensions,onChange:b=>{f({...d,l:b.dim},v)},value:o.dimIndex[d.l],onMenuOpen:m,onMenuClose:a})),e("div",{css:M},e(le,{name:`op-${v}`,css:P,styles:{control:b=>({...b,height:"100%"})},value:d.op,onChange:b=>{f(b==="+"||b==="-"?{...d,op:b,r:void 0,rDim:void 0}:{...d,op:b},v)},onMenuOpen:m,onMenuClose:a})),g?e("div",{css:M},e(pe,{errorMessage:(w=c.rhs)==null?void 0:w[v],css:P,styles:{control:b=>({...b,height:"100%"})},criteriaMatch:d,onChange:b=>{f(b,v)},isDisabled:!x,dimensions:o,onMenuOpen:m,onMenuClose:a})):null),e("button",{type:"button",onClick:()=>D(v),title:"Delete Personalization",css:{backgroundColor:"transparent",backgroundImage:"none",borderWidth:0}},e(Ye,{icon:Qe,iconColor:"red",size:"1.5rem"})),v>0?e("div",{className:"criteria-group-operation",css:{position:"absolute",top:"-4rem",transform:"translateX(calc(1.5rem - 50%))"}},e(Ke,{disabled:v>1,value:(E=h.op)!=null?E:"&",options:[{label:"AND",value:"&"},{label:"OR",value:"|"}],onChange:b=>{u(b.value)}})):null)})):e(ce,{title:"Default variant",type:"info",css:{marginBlock:"var(--spacing-base)"}},e(Je,null,'This personalized variant has no match criteria and will be shown to any visitor that does not match any preceding variants. Ensure that default variants come last in the variant list. Personalize this variant by clicking "Add Criteria" to get started.')),o.dimensions.length===0?l!=null&&l.NoDimensionsDefined?e(l.NoDimensionsDefined,null):e(ce,{title:"Dimensions",type:"info",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"You do not have any dimensions configured.")):e(Xe,{className:"add-more",buttonText:"Add Criteria",onButtonClick:C}))};var zn=({contextConfig:t,...n})=>{let{loading:o,result:m,error:a}=I(t);return a?e(ge,{type:"danger"},a):o||m===null?e(Ze,null):e(fe,{...n,dimensions:m,components:{NoDimensionsDefined:()=>e(ge,{title:"Dimensions",type:"info",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"You do not have any dimensions configured. Create your first"," ",e("a",{href:`${t.apiHost}/projects/${encodeURIComponent(t.projectId)}/personalization/signals`,target:"_blank",rel:"noopener noreferrer",css:{":hover":{textDecorationLine:"underline"}}},"Dimension")))}})};import ot from"react";import{useEffect as je,useState as et}from"react";import{ManifestClient as tt,ApiClientError as nt}from"@uniformdev/context/api";function $({apiHost:t,apiKey:n,projectId:o}){let[m,a]=et({loading:!1,notConfigured:!1,error:null,result:null});return je(()=>{if(!o||!n||!t){a({notConfigured:!0,loading:!1,error:null,result:null});return}(async()=>{a({notConfigured:!1,loading:!0,error:null,result:null});try{let i=await new tt({projectId:o,apiKey:n,apiHost:t}).get({preview:!0});a({notConfigured:!1,loading:!1,error:null,result:i})}catch(s){let i;s instanceof nt?(s.statusCode===403&&(i=`The API key ${n} did not have permissions to fetch the manifest. Ensure Context > Read Drafts permissions are granted.`),i=s.message):i=s.toString(),a({notConfigured:!1,loading:!1,error:i,result:null});return}})()},[t,n,o]),{result:m.result,error:m.error,loading:m.loading,notConfigured:m.notConfigured}}import{LoadingIndicator as rt}from"@uniformdev/design-system";function Fn({children:t,versionMap:n,contextConfig:o}){let{loading:m,result:a}=$(o);if(m)return e(rt,null);if(a){let r=n[a.project.ui_version];if(r)return e(r,null)}return e(ot.Fragment,null,t)}import Ce,{createContext as it,useContext as K}from"react";import{LoadingIndicator as at}from"@uniformdev/design-system";var A=it(null),to=({loadingComponent:t,errorComponent:n,contextConfig:o,children:m})=>{let a=$(o),r=I(o);return a.error||a.notConfigured?n?e(n,{contextConfig:o,result:a}):e(Ce.Fragment,null,"ErrorComponent is not configured"):r.error||r.notConfigured?n?e(n,{contextConfig:o,result:r}):e(Ce.Fragment,null,"ErrorComponent is not configured"):a.loading||r.loading?t?e(t,null):e(at,null):e(A.Provider,{value:{manifest:a.result,dimensions:r.result,contextConfig:o}},m)};function no(){let t=K(A);if(!(t!=null&&t.contextConfig))throw new Error("Not within DataContext! Configuration data is not exist.");return t.contextConfig}function oo(){let t=K(A);if(!(t!=null&&t.manifest))throw new Error("Not within DataContext! Manifest data is not exist.");return t.manifest}function ro(){let t=K(A);if(!(t!=null&&t.dimensions))throw new Error("Not within DataContext! Dimensions data is not exist.");return t.dimensions}import{validate as st}from"uuid";import{ManifestClient as lt}from"@uniformdev/context/api";var ve=async t=>{if(!t)return{valid:!1,error:new Error("contextConfig was not defined.")};if(!t.apiHost)return{valid:!1,error:new Error("apiHost was not defined.")};if(!t.apiKey)return{valid:!1,error:new Error("apiKey was not defined.")};if(!st(t.apiKey)&&!t.projectId)return{valid:!1,error:new Error("projectId is required when using a modern API key.")};let n=new lt({projectId:t.projectId,apiKey:t.apiKey,apiHost:t.apiHost});try{let o=await n.get({preview:!0});return{valid:!0,result:o}}catch(o){return{valid:!1,error:o}}};import{useEffect as mt,useState as ut}from"react";var co=t=>{let[n,o]=ut({validating:!1,error:void 0}),{apiKey:m,apiHost:a,projectId:r}=t||{};return mt(()=>{if(!m||!a)return;(async()=>{o({validating:!0,error:void 0});let{error:i,result:l}=await ve({apiHost:a,apiKey:m,projectId:r});o(i?{error:i,validating:!1}:{error:void 0,validating:!1,result:l})})()},[a,m,r]),{validating:n.validating,error:n.error,result:n.result}};function go(t){return Array.isArray(t)&&t.length>0&&t[0].cat!==void 0}function Co(t){return t.crit!==void 0}export*from"@uniformdev/design-system";export{to as ContextData,pe as CriteriaMatchMenu,le as CriteriaOperatorMenu,ue as DimensionMenu,me as DimensionValue,X as EditLink,Ot as EnrichmentTag,zn as PersonalizationCriteria,fe as PersonalizationCriteriaStatic,Fn as ProjectUIVersion,Ve as addEnrichmentLink,se as contextCriteriaMenuOperators,go as isEnrichmentTagData,Co as isPersonalizationCriteriaData,no as useContextConfig,$ as useContextData,I as useDimensions,ro as useDimensionsDataContext,oo as useManifest,co as useValidateContextConfig,ve as validateContextConfig};
78
+ `;import{InputComboBox as We}from"@uniformdev/design-system";import{css as qe}from"@emotion/react";function O({op:t}){return e("div",{className:"operation-bubble",css:qe`
79
+ align-items: center;
80
+ background: var(--gray-700);
81
+ border-radius: var(--rounded-full);
82
+ color: var(--white);
83
+ display: flex;
84
+ width: 30px;
85
+ height: 30px;
86
+ justify-content: center;
87
+ font-size: var(--fs-base);
88
+ `},t)}var le=t=>{var m,p;let{data:n,getStyles:o,isDisabled:s,innerRef:i,innerProps:r}=t,[l,a]=(p=(m=n.label)==null?void 0:m.split(":"))!=null?p:[];return e("div",{css:{...o("option",t),display:"flex",alignItems:"center",gap:"var(--spacing-sm)"},ref:i,"aria-disabled":s,...r},a?e(O,{op:l}):e("div",{css:{width:"20px",height:"20px"}}),e("div",null,a!=null?a:l))};var me=t=>{let{data:n,getStyles:o}=t;return e("div",{css:{...o("singleValue",t),width:"max-content"}},n.label.length===1?e(O,{op:n.label}):n.label)};var ue=[{name:"=",description:"equals",value:"="},{name:"\u2260",description:"not equal",value:"!="},{name:">",description:"is greater than",value:">"},{name:"\u2265",description:"is greater than or equal to",value:">="},{name:"<",description:"is less than",value:"<"},{name:"\u2264",description:"is less than or equal to",value:"<="},{name:"has the strongest score",value:"+"},{name:"has the weakest score",value:"-"}];function ce({onChange:t,value:n,...o}){var s,i;return e(We,{...o,value:{label:(i=(s=ue.find(r=>r.value===n))==null?void 0:s.name)!=null?i:n,value:n},options:ue.map(r=>({label:r.description?`${r.name}:${r.description}`:r.name,value:r.value})),styles:{...o.styles,valueContainer:(r,l)=>{var a,m;return{...r,padding:"var(--spacing-sm)",...(m=(a=o.styles)==null?void 0:a.valueContainer)==null?void 0:m.call(a,r,l)}},menu:(r,l)=>{var a,m;return{...r,width:"max-content",...(m=(a=o.styles)==null?void 0:a.menu)==null?void 0:m.call(a,r,l)}},control:(r,l)=>{var a,m;return{...r,border:0,...(m=(a=o.styles)==null?void 0:a.control)==null?void 0:m.call(a,r,l)}},indicatorSeparator:(r,l)=>{var a,m;return{...r,display:"none",...(m=(a=o.styles)==null?void 0:a.indicatorSeparator)==null?void 0:m.call(a,r,l)}}},onChange:r=>{r&&t(r.value)},components:{SingleValue:me,Option:le,...o.components}})}import{InputComboBox as Ke}from"@uniformdev/design-system";import{Icon as _e}from"@uniformdev/design-system";function K(t){return{label:t.displayName,value:t.dim,isDisabled:!1}}function R(t){if(!t)return"unavailable";let[n]=t.split(":");switch(n.toLowerCase()){case"signal":return"data";case"intent":return"assign";case"audience":return"boy";default:return"user-list"}}function k(t){let n=[],o="";for(let s of t){let[i]=s.displayName.split(":");o!==i&&(n.push({label:i,options:[]}),o=i),n[n.length-1].options.push(K(s))}return n}var T=t=>{var i;let{data:n,getStyles:o,className:s}=t;return e("div",{css:{...o("groupHeading",t),textTransform:"none",fontSize:"var(--font-size-sm)"},className:s},e("small",{css:{color:"var(--gray-500)",display:"flex",alignItems:"center",gap:"var(--spacing-xs)"}},e(_e,{icon:R((i=n.label)!=null?i:""),iconColor:"currentColor",size:16}),e("span",null,n.label)))};function N({message:t}){return t?e("div",{css:{position:"absolute",background:"white",borderRadius:"3px",fontSize:"0.8rem",color:"var(--brand-primary-2)",bottom:"calc(var(--spacing-xs) * -1)"}},t):null}var z=t=>{var c,u;let{data:n,getStyles:o,cx:s,isDisabled:i,isFocused:r,isSelected:l,className:a,innerRef:m,innerProps:p}=t,[,C]=(u=(c=n.label)==null?void 0:c.split(":"))!=null?u:[];return e("div",{css:o("option",t),className:s({option:!0,"option--is-disabled":i,"option--is-focused":r,"option--is-selected":l},a),ref:m,"aria-disabled":i,...p},e("div",{css:{color:"var(--gray-700)"}},C!=null?C:n.label))};import{Icon as Fe}from"@uniformdev/design-system";function pe({displayName:t}){let[n,o]=t.split(":");return e("div",{css:{whiteSpace:"normal",overflow:"hidden"}},o?e("small",{css:{color:"var(--gray-500)",display:"flex",alignItems:"center",gap:"var(--spacing-xs)"}},n?e(Fe,{icon:R(n),iconColor:"currentColor",size:16}):null,e("span",{"data-test-id":"dimension-name"},n)):null,e("div",{css:{color:"var(--gray-700)"},"data-test-id":"dimension-value"},o!=null?o:n))}var L=t=>{let{data:n,getStyles:o}=t;return e("div",{css:o("singleValue",t)},e(pe,{displayName:n.label}))};function de({onChange:t,value:n,dimensions:o,errorMessage:s,...i}){return e(d.Fragment,null,e(Ke,{...i,value:n?K(n):void 0,options:k(o),styles:{...i.styles,valueContainer:(r,l)=>{var a,m;return{...r,padding:"var(--spacing-sm)",...(m=(a=i.styles)==null?void 0:a.valueContainer)==null?void 0:m.call(a,r,l)}}},onChange:r=>{r&&t(o.find(l=>l.dim===r.value))},components:{Option:z,SingleValue:L,GroupHeading:T,...i.components}}),e(N,{message:s}))}import{InputComboBox as Ye}from"@uniformdev/design-system";import{useState as Xe}from"react";function fe({onChange:t,criteriaMatch:n,dimensions:o,errorMessage:s,...i}){var p,C;let[r,l]=Xe(typeof n.r!="undefined"&&$(n.r)!==null?n.r.toString(10):""),a=n.rDim,m=n.rDim?o.dimIndex[n.rDim]:void 0;return e(d.Fragment,null,e(Ye,{...i,inputValue:r,menuShouldScrollIntoView:!0,value:{label:(p=m==null?void 0:m.displayName)!=null?p:a&&!m?`${n.rDim} (unknown)`:"",value:(C=n.rDim)!=null?C:n.r?n.r.toString(10):"",isDisabled:!1},options:[{label:"Enter a numeric score to match, or choose another dimension to match its score",value:"",isDisabled:!0},...k(o.dimensions)],styles:{...i.styles,valueContainer:(c,u)=>{var f,I;return{...c,padding:"var(--spacing-sm)",...(I=(f=i.styles)==null?void 0:f.valueContainer)==null?void 0:I.call(f,c,u)}},option:(c,u)=>{var f,I;return{fontSize:u.isDisabled?"0.8rem":void 0,...(I=(f=i.styles)==null?void 0:f.option)==null?void 0:I.call(f,c,u)}}},onChange:c=>{var u;c&&(t({...n,rDim:(u=c.value)==null?void 0:u.toString(),r:void 0}),l(""))},onInputChange:(c,u)=>{let f=$(c);u.action==="input-change"||u.action==="set-value"?(l(c),(f||c==="")&&t({...n,r:c||void 0,rDim:void 0})):!f&&!$(u.prevInputValue)&&(!c&&n.r?l(n.r.toString()):l(c))},components:{...i.components,Option:z,SingleValue:L,GroupHeading:T},noOptionsMessage:({inputValue:c})=>$(c)?e(d.Fragment,null,e("div",null,"Score: ",c),e("small",null,"If you want to match on another dimension\u2019s score instead, clear the score value to search for a dimension.")):e(d.Fragment,null,e("div",null,"No dimensions match your search \u201C",c,"\u201D"),e("small",null,"If you want to match a literal score, enter a numeric value."))}),e(N,{message:s}))}function $(t){return/^\d+$/.test(t.toString(10))}var he=({value:t,setValue:n,dimensions:o,onMenuOpen:s,onMenuClose:i,onAddCriteria:r,onRemoveCriteria:l,displayTitle:a=!0,components:m,errors:p={}})=>{let C=t||{crit:[]},c=g=>{n({...C,op:g==="&"?void 0:g})},u=()=>{let g={...C,crit:[...C.crit,{l:"",op:">",r:0}]};n(g),r==null||r(g)},f=(g,b)=>{n(Ce(C,x=>{x.crit[b]=g}))},I=g=>{let b=Ce(C,h=>{h.crit.splice(g,1)}),x=b.crit.length===0?null:b;n(x),l==null||l(x)};return e("fieldset",{className:"personalization-criteria"},a?m!=null&&m.Title?e(m.Title,null):e("legend",{css:{fontSize:"var(--fs-md)",fontWeight:"var(--fw-bold)"}},"Personalize This"):null,m!=null&&m.CustomVariantName?e(m.CustomVariantName,null):null,C.crit.length?e("div",null,C.crit.map((g,b)=>{var D,S,M,V;let x=((D=g.l)==null?void 0:D.length)>0,h=g.op!=="+"&&g.op!=="-";return e("div",{css:ae,key:b,"data-test-id":"criteria-container"},e("div",{css:Je`
89
+ ${se}
90
+ grid-template-columns: minmax(0, 1fr) ${h?"minmax(0, 79px) minmax(0, 1fr)":"minmax(0, 1fr)"}
91
+ `,className:"criteriaItemInner"},e("div",{css:B,className:"criteria-wrapper","data-test-id":"select-criteria"},e(de,{errorMessage:(S=p.lhs)==null?void 0:S[b],css:P,styles:{control:v=>({...v,height:"100%"})},dimensions:o.dimensions,onChange:v=>{f({...g,l:v.dim},b)},value:o.dimIndex[g.l],onMenuOpen:s,onMenuClose:i})),e("div",{css:B,className:"criteria-wrapper","data-test-id":"select-operator"},e(ce,{name:`op-${b}`,css:P,styles:{control:v=>({...v,height:"100%"})},value:g.op,onChange:v=>{f(v==="+"||v==="-"?{...g,op:v,r:void 0,rDim:void 0}:{...g,op:v},b)},onMenuOpen:s,onMenuClose:i})),h?e("div",{css:B,className:"criteria-wrapper","data-test-id":"select-match-criteria"},e(fe,{errorMessage:(M=p.rhs)==null?void 0:M[b],css:P,styles:{control:v=>({...v,height:"100%"})},criteriaMatch:g,onChange:v=>{f(v,b)},isDisabled:!x,dimensions:o,onMenuOpen:s,onMenuClose:i})):null),e("button",{type:"button",onClick:()=>I(b),title:"Delete Personalization",css:{backgroundColor:"transparent",backgroundImage:"none",borderWidth:0},"data-test-id":"button-delete"},e(Ze,{icon:tt,iconColor:"red",size:"1.5rem"})),b>0?e("div",{className:"criteria-group-operation",css:{position:"absolute",top:"-4rem",transform:"translateX(calc(1.5rem - 50%))"}},e(Qe,{"data-test-id":"dropdown-button-combine",disabled:b>1,value:(V=C.op)!=null?V:"&",options:[{label:"AND",value:"&"},{label:"OR",value:"|"}],onChange:v=>{c(v.value)}})):null)})):e(ge,{title:"Default variant",type:"info",css:{marginBlock:"var(--spacing-base)"}},e(et,null,'This personalized variant has no match criteria and will be shown to any visitor that does not match any preceding variants. Ensure that default variants come last in the variant list. Personalize this variant by clicking "Add Criteria" to get started.')),o.dimensions.length===0?m!=null&&m.NoDimensionsDefined?e(m.NoDimensionsDefined,null):e(ge,{title:"Dimensions",type:"info",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"You do not have any dimensions configured.")):e(je,{"data-test-id":"button-add-criteria",className:"add-more",buttonText:"Add Criteria",onButtonClick:u}))};import*as y from"yup";import{useAsync as rt}from"react-use";function Un(t){return Array.isArray(t)&&t.length>0&&t[0].cat!==void 0}function Gn(t){return t.crit!==void 0}function Y(t){return t!=="+"&&t!=="-"}function it(t){let n={crit:[]};return t.forEach(o=>{if(!o.path)return;let s=/\[(\d+)\]\.(\w+)/g,i=[...o.path.matchAll(s)][0];if((i==null?void 0:i.length)==3){let r=Number(i[1]),l=i[2];if(n.crit.length>r)n.crit[r]={...n.crit[r],[l]:o.message};else{let a={};a[l]=o.message,n.crit.push(a)}}}),n}async function X(t,n){let o=y.object().shape({l:y.string().required("Please select a dimension").oneOf(n==null?void 0:n.dimensions.map(s=>s.dim),"Selected left-side criteria dimension does not exist"),op:y.string().required(),r:y.mixed().nullable().when(["rDim","op"],{is:(s,i)=>Y(i)&&!s,then:y.string().required("Choose a score or dimension")}),rDim:y.string().oneOf(n==null?void 0:n.dimensions.map(s=>s.dim),"Selected right-side criteria dimension does not exist").when(["r","op"],{is:(s,i)=>Y(i)&&!s,then:y.string().required("Choose a score or dimension")})},["rDim","r"]);try{await y.object({crit:y.array(o)}).nullable().validate(t,{abortEarly:!1})}catch(s){return it(s.inner)}}var Qn=({contextConfig:t,value:n,setValue:o,...s})=>{var C,c;let[i,r]=nt(void 0),{loading:l,result:a,error:m}=w(t);return rt(async()=>{if(n&&a){let u=await X(n,a);r(u)}},[n,a,X]),m?e(be,{type:"danger"},m):l||a===null?e(ot,null):e(he,{...s,value:n,setValue:async u=>{let f=await X(u,a);r(f),o(u)},errors:{lhs:(C=i==null?void 0:i.crit)==null?void 0:C.map(u=>u==null?void 0:u.l),rhs:(c=i==null?void 0:i.crit)==null?void 0:c.map(u=>u==null?void 0:u.rDim)},dimensions:a,components:{NoDimensionsDefined:()=>e(be,{title:"Dimensions",type:"info",css:{marginBlock:"var(--spacing-base)"}},e("p",null,"You do not have any dimensions configured. Create your first"," ",e("a",{href:`${t.apiHost}/projects/${encodeURIComponent(t.projectId)}/personalization/signals`,target:"_blank",rel:"noopener noreferrer",css:{":hover":{textDecorationLine:"underline"}}},"Dimension")))}})};import ut from"react";import{useEffect as at,useState as st}from"react";import{ApiClientError as lt,CachedManifestClient as mt}from"@uniformdev/context/api";function A({apiHost:t,apiKey:n,projectId:o}){let[s,i]=st({loading:!1,notConfigured:!1,error:null,result:null});return at(()=>{if(!o||!n||!t){i({notConfigured:!0,loading:!1,error:null,result:null});return}(async()=>{i({notConfigured:!1,loading:!0,error:null,result:null});try{let a=await new mt({projectId:o,apiKey:n,apiHost:t}).get({preview:!0});i({notConfigured:!1,loading:!1,error:null,result:a})}catch(l){let a;l instanceof lt?(l.statusCode===403&&(a=`The API key ${n} did not have permissions to fetch the manifest. Ensure Context > Read Drafts permissions are granted.`),a=l.message):a=l.toString(),i({notConfigured:!1,loading:!1,error:a,result:null});return}})()},[t,n,o]),{result:s.result,error:s.error,loading:s.loading,notConfigured:s.notConfigured}}import{LoadingIndicator as ct}from"@uniformdev/design-system";function so({children:t,versionMap:n,contextConfig:o}){let{loading:s,result:i}=A(o);if(s)return e(ct,null);if(i){let r=n[i.project.ui_version];if(r)return e(r,null)}return e(ut.Fragment,null,t)}import ve,{createContext as pt,useContext as J}from"react";import{LoadingIndicator as dt}from"@uniformdev/design-system";var U=pt(null),ho=({loadingComponent:t,errorComponent:n,contextConfig:o,children:s})=>{let i=A(o),r=w(o);return i.error||i.notConfigured?n?e(n,{contextConfig:o,result:i}):e(ve.Fragment,null,"ErrorComponent is not configured"):r.error||r.notConfigured?n?e(n,{contextConfig:o,result:r}):e(ve.Fragment,null,"ErrorComponent is not configured"):i.loading||r.loading?t?e(t,null):e(dt,null):e(U.Provider,{value:{manifest:i.result,dimensions:r.result,contextConfig:o}},s)};function bo(){let t=J(U);if(!(t!=null&&t.contextConfig))throw new Error("Not within DataContext! Configuration data is not exist.");return t.contextConfig}function vo(){let t=J(U);if(!(t!=null&&t.manifest))throw new Error("Not within DataContext! Manifest data is not exist.");return t.manifest}function yo(){let t=J(U);if(!(t!=null&&t.dimensions))throw new Error("Not within DataContext! Dimensions data is not exist.");return t.dimensions}import{validate as ft}from"uuid";import{UncachedManifestClient as gt}from"@uniformdev/context/api";var ye=async t=>{if(!t)return{valid:!1,error:new Error("contextConfig was not defined.")};if(!t.apiHost)return{valid:!1,error:new Error("apiHost was not defined.")};if(!t.apiKey)return{valid:!1,error:new Error("apiKey was not defined.")};if(!ft(t.apiKey)&&!t.projectId)return{valid:!1,error:new Error("projectId is required when using a modern API key.")};let n=new gt({projectId:t.projectId,apiKey:t.apiKey,apiHost:t.apiHost});try{let o=await n.get({preview:!0});return{valid:!0,result:o}}catch(o){return{valid:!1,error:o}}};import{useEffect as Ct,useState as ht}from"react";var Vo=t=>{let[n,o]=ht({validating:!1,error:void 0}),{apiKey:s,apiHost:i,projectId:r}=t||{};return Ct(()=>{if(!s||!i)return;(async()=>{o({validating:!0,error:void 0});let{error:a,result:m}=await ye({apiHost:i,apiKey:s,projectId:r});o(a?{error:a,validating:!1}:{error:void 0,validating:!1,result:m})})()},[i,s,r]),{validating:n.validating,error:n.error,result:n.result}};export*from"@uniformdev/design-system";export{ho as ContextData,fe as CriteriaMatchMenu,ce as CriteriaOperatorMenu,de as DimensionMenu,pe as DimensionValue,Z as EditLink,$t as EnrichmentTag,Qn as PersonalizationCriteria,he as PersonalizationCriteriaStatic,so as ProjectUIVersion,Le as addEnrichmentLink,ue as contextCriteriaMenuOperators,it as convertErrorsToObj,Un as isEnrichmentTagData,Gn as isPersonalizationCriteriaData,Y as opHasRhs,bo as useContextConfig,A as useContextData,w as useDimensions,yo as useDimensionsDataContext,vo as useManifest,Vo as useValidateContextConfig,ye as validateContextConfig};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniformdev/context-ui",
3
- "version": "16.2.4",
3
+ "version": "17.0.0",
4
4
  "description": "React-based functionality and components for Uniform Context",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "main": "./dist/index.js",
@@ -31,25 +31,26 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@emotion/react": "11.9.3",
34
- "@uniformdev/context": "^16.2.4",
35
- "@uniformdev/design-system": "^16.2.4",
34
+ "@uniformdev/context": "^17.0.0",
35
+ "@uniformdev/design-system": "^17.0.0",
36
36
  "immer": "9.0.15",
37
37
  "react-beautiful-dnd": "13.1.0",
38
38
  "react-icons": "^4.3.1",
39
- "react-select": "5.3.2",
39
+ "react-select": "5.4.0",
40
40
  "react-use": "17.4.0",
41
41
  "reakit": "1.3.11",
42
42
  "timeago.js": "4.0.2",
43
- "uuid": "8.3.2"
43
+ "uuid": "8.3.2",
44
+ "yup": "0.32.11"
44
45
  },
45
46
  "peerDependencies": {
46
47
  "react": ">=16.8",
47
48
  "react-dom": ">=16.8"
48
49
  },
49
50
  "devDependencies": {
50
- "@babel/core": "7.18.5",
51
- "@babel/preset-env": "7.18.2",
52
- "@babel/preset-react": "7.17.12",
51
+ "@babel/core": "7.18.9",
52
+ "@babel/preset-env": "7.18.9",
53
+ "@babel/preset-react": "7.18.6",
53
54
  "@emotion/babel-preset-css-prop": "11.2.0",
54
55
  "@storybook/addon-controls": "6.5.9",
55
56
  "@storybook/addon-essentials": "6.5.9",
@@ -57,7 +58,7 @@
57
58
  "@storybook/builder-webpack5": "6.5.9",
58
59
  "@storybook/manager-webpack5": "6.5.9",
59
60
  "@storybook/react": "6.5.9",
60
- "@types/react": "18.0.14",
61
+ "@types/react": "18.0.15",
61
62
  "@types/react-beautiful-dnd": "13.1.2",
62
63
  "@types/uuid": "8.3.4",
63
64
  "autoprefixer": "10.4.7",
@@ -73,5 +74,5 @@
73
74
  "publishConfig": {
74
75
  "access": "public"
75
76
  },
76
- "gitHead": "b2ed666efec0c0e255c2a1b8561ff7899834a2d5"
77
+ "gitHead": "d15f59e5cc80184d983b8c1ca67b1ee390158672"
77
78
  }