@spiffcommerce/core 25.0.0 → 25.0.1

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.js CHANGED
@@ -841,7 +841,7 @@
841
841
  fill="${e.color}"
842
842
  />
843
843
  </svg>
844
- `,a={};a["spiff-fill-shape"]={browserValue:e.color};const i=e.region||await Lt(t,R.Illustration),s=H();return{stepRegion:e.region,colors:a,id:s,svg:A,type:R.Illustration,y:i.top,x:i.left,rotation:i.rotation,width:i.width,height:i.height,layer:i.layer||0,layerIndex:i.layerIndex||Ot(t,i.layer||0),immutable:i.immutable}}static async getIllustration(t,e){const A=e.region||await Lt(t,R.Illustration,e.src),a=await ot(await _a(e.src)),i=await ee(a.svg),s=H();return{cachedObjectURL:i,stepRegion:e.region,colors:a.colors,id:s,src:e.src,svg:a.svg,type:R.Illustration,y:A.top,x:A.left,rotation:A.rotation,width:A.width,height:A.height,layer:A.layer||0,layerIndex:A.layerIndex||Ot(t,A.layer||0),immutable:A.immutable}}}class Aa{constructor(t,e,A){this.processRegion=async a=>{var r,c,l,g;const i=this.layouts.find(d=>d.panelId===a.panelId);if(!i)throw new X(a);let s="";if(this.configuration.type===M.ProductOverlay){let d="";if((r=this.product)!=null&&r.overlayImageUrl&&(d=this.product.overlayImageUrl),s=d,!d)throw new _t(this.configuration,"Couldn't find an asset for product overlay step")}const o=this.evaluateAssetType();if(o===R.Image){const d=this.configuration.type===M.SilentIllustration?(c=this.configuration.data.asset)==null?void 0:c.fileLink:(l=this.product)==null?void 0:l.overlayImageUrl;if(!d)throw new Error("Undefined raster silent step source");const B={stepName:this.configuration.stepName,id:H(),src:d,type:o,y:a.top,x:a.left,width:a.width,height:a.height,layer:a.layer,layerIndex:a.layerIndex,immutable:a.immutable,productOverlay:this.configuration.type===M.ProductOverlay?!0:void 0,rotation:a.rotation,excludeFromExport:this.configuration.data.excludeFromPrint,preserveAspectRatio:"none"};return{regionElement:{id:B.id,region:a},command:new j(B,i)}}else{const d=this.configuration.type===M.SilentIllustration?(g=this.configuration.data.asset)==null?void 0:g.fileLink:s,h=await ot(await(async()=>new Promise((w,u)=>{if(!d){u("Undefined vector silent step source");return}tt(d,!0).then(E=>{w(E)}).catch(E=>console.error(E))}))()),C={stepName:this.configuration.stepName,id:H(),cachedObjectURL:await ee(h.svg),src:d,svg:h.svg,colors:h.colors,type:o,y:a.top,x:a.left,width:a.width,height:a.height,layer:a.layer,layerIndex:a.layerIndex,rotation:a.rotation,immutable:a.immutable,productOverlay:this.configuration.type===M.ProductOverlay?!0:void 0,excludeFromExport:this.configuration.data.excludeFromPrint};return{regionElement:{id:C.id,region:a},command:new j(C,i)}}},this.configuration=t,this.layouts=e,this.product=A||void 0}async trigger(){if(!this.configuration.data.regions)throw new _t(this.configuration,"Missing regions.");if(this.configuration.type===M.SilentIllustration){const t=this.configuration.data.regions.map(this.processRegion);return Promise.all(t)}else return this.configuration.type===M.ProductOverlay?Promise.all(this.configuration.data.regions.map(t=>{if(!this.layouts.find(A=>t.panelId===A.panelId))throw new X(t);return this.processRegion(t)})):Promise.reject("Unknown silent step. This is a bug")}evaluateAssetType(){var e,A,a;const t=this.configuration.type===M.ProductOverlay&&((e=this.product)!=null&&e.overlayImageUrl)?this.product.overlayImageUrl.toLowerCase():(a=(A=this.configuration.data.asset)==null?void 0:A.fileLink)==null?void 0:a.toLowerCase().split("?")[0];return t!=null&&t.startsWith("data:image/png")||t!=null&&t.endsWith(".jpeg")||t!=null&&t.endsWith(".jpg")||t!=null&&t.endsWith(".png")?R.Image:(t!=null&&t.endsWith(".svg")||t!=null&&t.startsWith("image/svg+xml"),R.Illustration)}}const tn=async n=>{const t=`${nt.getServicesApiUrl()}/shortener`;try{return(await(await rt(t,{method:"POST",body:JSON.stringify({longUrl:n}),headers:{"Content-Type":"application/json"}})).json()).shortUrl}catch(e){throw console.error(e),new Ye("Failed to shorten URL, see console.")}};class en{async poll(){try{if(await this.predicate()){this.onSuccess(),this.pollingId>-1&&window.clearInterval(this.pollingId);return}}catch{}this.attempts+=1,this.attempts<this.maxAttempts?this.pollingId=window.setTimeout(this.poll.bind(this),this.interval):this.onFailure()}constructor(t,e,A,a=3e3,i=10){this.onSuccess=e,this.onFailure=A,this.predicate=t,this.attempts=0,this.pollingId=-1,this.interval=a,this.maxAttempts=i,this.poll()}}class Hs{async init(t,e,A){return A&&await this.reload(t,e,A),null}async reload(t,e,A){const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),r=Object.values(A.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName).map(c=>({id:c.id,region:c.stepRegion}));await e.setSelectionsAndElements(t.stepName,[],r,async()=>{var g,d;const c=(g=a==null?void 0:a.storage)==null?void 0:g.videoShortUrl,l=(d=a==null?void 0:a.storage)==null?void 0:d.videoUrl;e.updateStorage(t.stepName,{videoShortUrl:c,videoUrl:l})})}async regenerateQRCode(t,e,A,a){const i=async()=>{var C,w;const B=(await eA([e]))[0],h=(w=(C=B==null?void 0:B.versions)==null?void 0:C.find(u=>u.name==="mpeg4"))==null?void 0:w.link;return{asset:B,link:h}},s=await new Promise((B,h)=>{new en(async()=>!!(await i()).link,async()=>{const C=await i();if(!C.link||!C.link)throw new Nt(C.asset);B({rel:"mpeg4",href:C.link})},()=>{h("Poller timed out with 40 attempts @ 3 second interval")},3e3,40)});t.forEach(B=>A.getCommandDispatcher()(new Ct(B.id)));const o=a.data.baseUrl.slice(0,4)==="http"?"":"https://",r=new URL(o+a.data.baseUrl);r.searchParams.append("video",btoa(JSON.stringify([s]))),r.pathname=r.pathname+(r.pathname.slice(-1)==="/"?"":"/");const c=r.toString();if(c.length>=2e3)throw new Ye("Cannot create QR code, URL too long.");const l=await tn(c);if(!a.data||!a.data.regions)throw new _t(a,"Missing regions.");const g=await this.regionElements(a),d=await this.command(l,g,A,a.stepName);return d&&(d.command&&A.getCommandDispatcher()(d.command),d.followup&&await d.followup()),await A.setSelectionsAndElements(a.stepName,[],g,async()=>{A.updateStorage(a.stepName,{videoShortUrl:l,videoUrl:s.href})}),l}async regionElements(t){const e=A=>({id:H(),region:A});return t.data.regions.map(e)}async command(t,e,A,a){const i=A.getLayouts(),o=`data:image/svg+xml;base64,${btoa(await oa.toString(t,{type:"svg"}))}`,r=e.map(c=>{const l=c.region,g=i.find(d=>d.panelId===(l==null?void 0:l.panelId));if(!g&&l)throw new X(l);if(g&&!l)throw new Error("Region not found");if(!g||!l)throw new Error("Neither a region or layout found!");return new j({stepRegion:l,stepName:a,id:c.id,src:o,type:R.Image,y:l.top,x:l.left,width:l.width,height:l.height,rotation:0},g)});return{command:new G(r),followup:async()=>{}}}}const SA=new Hs;class ks{constructor(){this.frameSourceSvg=async(t,e)=>{if(!t)return AA(e);const A=t.asset;if(!A)throw new dt(t);const a=A.fileLink;if(a)return tt(a,!0);throw new Nt(A)}}async init(t,e,A){if(A)return await this.reload(t,e,A),null;t.mandatory&&e.setMandatoryFulfilled(t.stepName,!1),e.markStepsAsInitialised([t.stepName]);let a;const i=e.getWorkflowExperience().getBundle();if(i&&t.globalPropertyAspectConfigurations){const s=i.getGlobalPropertyStateManager(),o=t.globalPropertyAspectConfigurations[0],r=s.getAspectStorage(o.aspectName);r&&r.originalAssetKey&&(a=(await T.getLocalOrFromServer(r.originalAssetKey)).fileLink)}if(t.option&&t.option.variants&&t.option.variants.length>0){const s=t.option,o=_.getDefaultVariant(s);return o?this.selectVariantCommand(t,o,[],e,void 0,a||t.data.placeholderImageUrl):null}return this.selectVariantCommand(t,void 0,[],e,void 0,a||t.data.placeholderImageUrl)}async reload(t,e,A){var c;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),r=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===t.stepName).map(l=>({id:l.id,region:l.stepRegion}));if(!t.option||(t.option.variants||[]).length===0){const l=t.data.regions.map(g=>AA(g));e.updateStorage(t.stepName,{currentFrameSources:l})}if(a){const l=async()=>{var h,C,w,u,E;const g=(h=a.storage)==null?void 0:h.colors,d=(C=a.storage)==null?void 0:C.framePatternSrc,B=(w=a.storage)==null?void 0:w.frameOffsetsList;if(e.updateMetadata(t.stepName,{frameOffsetsList:B,framePatternSrc:d}),d){const m=(u=e.getStepSpecificServices(t.stepName))==null?void 0:u.frameService;if(!m)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(d,m,!0,g),e.updateMetadata(t.stepName,{image:d}),e.updateStorage(t.stepName,{framePatternSrc:d}),this.validateColorCount(t,e)}if(B!=null&&B.some(m=>m.zoom)){const m=(E=e.getStepSpecificServices(t.stepName))==null?void 0:E.frameService;if(!m)throw new Error("Frame service unavailable, cannot load pattern!");m.updateOffsets(B)}e.setMandatoryFulfilled(t.stepName,!0)};if(a.selectedVariants&&a.selectedVariants.length>0){const g=a.selectedVariants[0].id;if(t.option&&g){const d=(c=t.option.variants)==null?void 0:c.find(B=>B.id===g);d&&await e.setSelectionsAndElements(t.stepName,[d],r,async()=>{const B=await Promise.all(t.data.regions.map(h=>this.frameSourceSvg(d,h)));e.updateStorage(t.stepName,{currentFrameSources:B}),await l()})}}else await e.setSelectionsAndElements(t.stepName,[],r,l)}}async availableColors(t,e){var a;const A=t.data.colorOption;return((a=A==null?void 0:A.variants)==null?void 0:a.map(i=>({fill:i.color,stroke:i.color,variant:i,pmsValue:i.name})))??[]}selectImage(t,e,A,a=!0){var r;const i=this.patternSource(e),s=(r=A.getStepStorage(t.stepName))==null?void 0:r.framePatternSrc;if(s&&s===i)return Promise.resolve();A.setEditedStatus(t.stepName,!0);const o=e.fileLink||"";return o.endsWith(".pdf")||o.endsWith(".eps")||o.endsWith(".ai")?new Promise(c=>{A.addPoller(new en(async()=>{var B;const g=(B=(await T.getFromServer(e.key||"")).versions)==null?void 0:B.find(h=>h.name==="svg");return g?(await rt(g.link)).status===200:!1},()=>{T.getLocalOrFromServer(e.key||"").then(l=>{this.loadPatternFromAsset(l,t,A,a).then(c)})},()=>{throw new Ye("Failed to resolve transcoded PDF")}))}):this.loadPatternFromAsset(e,t,A,a)}async selectVariant(t,e,A,a,i){const s=await this.selectVariantCommand(t,e,A,a,i);s&&(s.command&&a.getCommandDispatcher()(s.command),s.followup&&await s.followup())}getCreateElementCommand(t,e,A,a){return new j({id:t,type:R.Frame,x:e.left,y:e.top,width:e.width,height:e.height,layer:e.layer,layerIndex:e.layerIndex,rotation:e.rotation,scaleX:e.width/a.frameData.width,scaleY:e.height/a.frameData.height,path:a.frameData.path,dataWidth:a.frameData.width,dataHeight:a.frameData.height,stepRegion:e,stepName:a.stepName,disablePlaceholder:a.disablePlaceholder,pattern:a.pattern,immutable:e.immutable},A)}async loadPatternFromString(t,e,A=!0,a=void 0,i){if(t.endsWith("svg")){const s=await va(t),o=s.width,r=s.height,c=await tt(t);if(i){const d=c.match(/<(image|linearGradient|radialGradient)(\s|>|\/>)/gim);if(d&&d.length>0)throw new Error("Vector files may not include images or gradients when a color limit is specified.")}const l=await ot(c),g={src:t,width:o,height:r,aspect:o/r,svg:l.svg,colors:a??l.colors};lt.set(t,g),e.setPatternData(g,A)}else{const s=await ve(t,!0),o=await oe(s),r={src:t,width:o.width,height:o.height,aspect:o.width/o.height,svg:void 0,colors:void 0};lt.set(t,r),e.setPatternData(r,A)}}changeColors(t,e,A){var s,o;const a=(s=e.getStepSpecificServices(t.stepName))==null?void 0:s.frameService;if(!a||!((o=a.getImageData())!=null&&o.svg)){console.warn("changeColors was called without an SVG being assigned to a frame step");return}const i=this.calculateColorMetadata(a,t,A);e.updateMetadata(t.stepName,{colors:i.metadataColors}),e.updateStorage(t.stepName,{colors:i.storageColors}),a.setPatternData({...a.getImageData(),colors:i.newColors},!1),this.validateColorCount(t,e)}getUniqueColorCount(t,e){var s,o;const A=(s=e.getStepSpecificServices(t.stepName))==null?void 0:s.frameService;if(!A)return 0;const a=((o=A.getImageData())==null?void 0:o.colors)??{},i=[];for(const r in a){const c=a[r];if(c.pmsValue){const l=c.pmsValue.trim().toLocaleLowerCase();i.includes(l)||i.push(l)}else if(c.browserValue){const l=Ra(c.browserValue);i.includes(l)||i.push(l)}}return i.length}calculateColorMetadata(t,e,A){var r,c;if(!((r=t.getImageData())!=null&&r.svg))return{newColors:void 0,metadataColors:void 0,storageColors:void 0};const a={...t.getImageData().colors??{}},i={};Object.entries(a).forEach(([l,g])=>{const d={browserValue:g.browserValue};i[l]=d});for(const[l,g]of A.entries())a[l]={browserValue:g.browserValue,pmsValue:g.pmsValue},i[l]=g;let s=Array.from(Object.values(a)).map(l=>l.browserValue);const o=e.data.colorOption;return o&&((c=o.variants)==null||c.forEach(l=>{s=s.map(g=>{var d;return g.toLowerCase()===((d=l.color)==null?void 0:d.toLowerCase())?l.name:g})})),{newColors:a,metadataColors:s,storageColors:i}}validateColorCount(t,e){const A=t.data.colorPickerEnabled?t.data.maxColors??0:0;e.setStepError(t.stepName,"colors",A>0&&this.getUniqueColorCount(t,e)>A?"workflow.steps.frame.tooManyColors":void 0)}async selectVariantCommand(t,e,A,a,i,s){var B;const o=(B=a.getStepSpecificServices(t.stepName))==null?void 0:B.frameService;if(!o)throw new Error("Frame service unavailable, cannot load pattern!");const r=await Promise.all(t.data.regions.map(h=>this.frameSourceSvg(e,h)));i&&i(!0);const c=t.data.initialZoomLevel,l=await Promise.all(t.data.regions.map(async(h,C)=>{const w=await le(r[C]),u=o.getImageData(),E=A.map(D=>new Ct(D.id)),m=u?QA(u,w,c&&!t.data.forceImageCover?{scale:c}:void 0,t.data.forceImageCover):void 0,Q=u?{id:H(),src:u.src,x:(m==null?void 0:m.x)||0,y:(m==null?void 0:m.y)||0,width:u.width,height:u.height,scaleX:(m==null?void 0:m.zoom)||1,scaleY:(m==null?void 0:m.zoom)||1,rotation:0}:void 0,f=H(),I=a.getLayouts().find(D=>D.panelId===h.panelId);if(!I)throw new X(h);return{command:this.getCreateElementCommand(f,h,I,{frameData:w,pattern:Q,disablePlaceholder:t.data.disablePlaceholder,stepName:t.stepName}),regionEl:{id:f,region:h},removeExistingCommands:E}})),g=l.map(h=>h.command),d=l.map(h=>h.removeExistingCommands).flat();return{command:new G([...g,...d]),followup:async()=>{i&&i(!1),await a.setSelectionsAndElements(t.stepName,e?[e]:[],[...l.map(h=>h.regionEl)],async()=>{var h;if(a.updateStorage(t.stepName,{currentFrameSources:r}),s){const C=(h=a.getStepSpecificServices(t.stepName))==null?void 0:h.frameService;if(!C)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(s,C,!0)}})}}}patternSource(t){var a;const e=(a=t.versions)==null?void 0:a.find(i=>i.name==="svg");if(e)return e.link;const A=t.fileLink;if(A)return A;throw new Nt(t)}async loadPatternFromAsset(t,e,A,a){var c,l;const i=this.patternSource(t),s=A.markUpdatePending(),o=(c=A.getStepSpecificServices(e.stepName))==null?void 0:c.frameService;if(!o)throw A.markUpdateCompleted(s),new Error("Frame service unavailable, cannot load pattern!");try{await this.loadPatternFromString(i,o,a,void 0,e.data.colorPickerEnabled&&!!e.data.maxColors&&e.data.maxColors>0)}catch(g){throw A.markUpdateCompleted(s),g}const r=this.calculateColorMetadata(o,e,new Map(Object.entries(((l=o.getImageData())==null?void 0:l.colors)??{})));A.updateMetadata(e.stepName,{image:i,colors:r.metadataColors}),A.updateStorage(e.stepName,{framePatternSrc:i,colors:r.storageColors}),A.markUpdateCompleted(s),A.setMandatoryFulfilled(e.stepName,!0),A.setInformationResults(A.getInformationResults().filter(g=>g.stepID===e.stepName)),this.validateColorCount(e,A)}}const ct=new ks;class bs{async getIllustrationBody(t){return new Promise(e=>{tt(t,!0).then(A=>{e(A)}).catch(A=>console.error(A))})}getCreateElementCommand(t,e,A,a){return new j({stepRegion:e,stepName:a.stepName,colors:a.svg.colors,id:t,src:a.src,svg:a.svg.svg,cachedObjectURL:a.objectURL,type:R.Illustration,y:e.top,x:e.left,rotation:e.rotation,width:e.width,height:e.height,layer:e.layer,layerIndex:e.layerIndex,immutable:e.immutable},A)}getColors(t,e){const A=e.getRegionElements(t.stepName)||[];if(A.length===0)return[];try{return L(A[0].id,e.getAllLayoutData()).colors}catch{return[]}}async init(t,e,A){const a=t.option;if(!a)return null;if(A)return this.reload(t,e,A);{const i=_.getDefaultVariant(a);if(i)return await this.selectVariantCommand(t,i,[],()=>{},e)}return null}async reload(t,e,A){var c;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===t.stepName),r=t.option;if(a!=null&&a.selectedVariants){const l=a.selectedVariants[0].id;if(r&&l){const g=(c=r.variants)==null?void 0:c.find(d=>d.id===l);if(g){const d=o.map(B=>({id:B.id,region:B.stepRegion}));await e.setSelectionsAndElements(t.stepName,[g],d,async()=>{var B;e.updateMetadata(t.stepName,{colors:(B=a.storage)==null?void 0:B.colors}),e.setMandatoryFulfilled(t.stepName,!0)})}}else throw new Error("Required illustration variant no longer available")}return null}async availableColors(t,e){var a;const A=t.data.colorOption;return A?A?(a=A.variants)==null?void 0:a.map(i=>({fill:i.color,stroke:i.color,variant:i})):[]:[]}async changeColorsCommand(t,e,A,a,i){var l;const s={};for(const[g,d]of i.entries())s[g]={browserValue:d,spotColor:(l=s[g])==null?void 0:l.spotColor};const o=IA(t,e,A,s),r=await ee(o),c=[];for(const g of a){for(const[d,B]of i.entries())c.push(new oA(g,d,B));c.push(new xs(g,o,r))}return new G(c)}async changeColors(t,e,A,a,i){var B,h;if(e.length===0)return;const s=L(e[0].id,a().map(C=>C.layoutState)),o={...s.colors},r={};Object.entries(o).forEach(([C,w])=>{const u={browserValue:w.browserValue},E=w.spotColor;E&&(u.spotColor={profileName:E.profileName,namedColor:E.namedColor}),r[C]=u});for(const[C,w]of i.entries())o[C]={browserValue:w,spotColor:(B=o[C])==null?void 0:B.spotColor},r[C]={browserValue:w};let c=Array.from(Object.values(o)).map(C=>C.browserValue);const l=t.data.colorOption;l&&((h=l.variants)==null||h.forEach(C=>{c=c.map(w=>{var u;return w.toLowerCase()===((u=C.color)==null?void 0:u.toLowerCase())?C.name:w})})),A.updateMetadata(t.stepName,{colors:c});const g=new Map;if(Object.entries(o).forEach(([C,w])=>{g.set(C,w.browserValue)}),!s.svg)throw new Error("Colors changed before SVG loaded. This should never happen!");const d=await this.changeColorsCommand(s.svg,s.width,s.height,e.map(C=>C.id),g);A.updateStorage(t.stepName,{colors:r}),A.getCommandDispatcher()(d)}async selectVariant(t,e,A,a,i){const s=await this.selectVariantCommand(t,e,A,a,i);s&&(s.command&&i.getCommandDispatcher()(s.command),s.followup&&await s.followup())}async selectVariantCommand(t,e,A,a,i){var u;if(!t.data||!t.data.regions)throw new _t(t,"Missing regions.");a(!0);const s=A.map(E=>new Ct(E.id));t.mandatory&&i.setMandatoryFulfilled(t.stepName,!1);const o=e.asset;if(!o)throw new dt(e);const r=o.fileLink;if(!r)throw new Nt(o);const c=await ot(await this.getIllustrationBody(r)),l=await ee(c.svg),g=E=>{const m=i.getLayouts().find(f=>f.panelId===E.panelId);if(!m)throw new X(E);const Q=H();return{regionElement:{id:Q,region:E},command:this.getCreateElementCommand(Q,E,m,{stepName:t.stepName,src:r,objectURL:l,svg:c})}},d=t.data.regions.map(g),h=[...d.map(E=>E.command),...s];let C=Array.from(Object.values(c.colors)).map(E=>E.browserValue);const w=t.data.colorOption;return w&&((u=w.variants)==null||u.forEach(E=>{C=C.map(m=>{var Q;return m.toLowerCase()===((Q=E.color)==null?void 0:Q.toLowerCase())?E.name:m})})),i.updateMetadata(t.stepName,{colors:C}),{command:new G(h),followup:async()=>{await i.setSelectionsAndElements(t.stepName,[e],d.map(Q=>Q.regionElement),async()=>{i.setMandatoryFulfilled(t.stepName,!0),a(!1)});const E=await this.availableColors(t,i)||[],m=Object.keys(c.colors);if(t.data.colorPickerEnabled&&E.length===1&&m.length===1){const Q=E[0],f=m[0];await this.changeColors(t,d.map(p=>p.regionElement),i,()=>i.getCommandContext().getAllLayouts(),new Map([[f,Q.variant.color]]))}else t.data.colorPickerEnabled&&await this.changeColors(t,d.map(Q=>Q.regionElement),i,()=>i.getCommandContext().getAllLayouts(),new Map)}}}}const Wt=new bs;class Us{async init(t,e,A){const a=t.option;if(!a)throw new $t(t);if(A)await this.reload(t,e,A);else{const i=_.getDefaultVariant(a);if(i)return await this.selectVariantLambda(t,i,e,()=>{})}return null}async reload(t,e,A){var c;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===t.stepName),r=t.option;if(!r)throw new $t(t);if(a!=null&&a.selectedVariants){const l=a.selectedVariants[0].id;if(l){const g=(c=r.variants)==null?void 0:c.find(d=>d.id===l);if(g){const d=g.material,B=o.map(h=>({id:h.id,region:h.stepRegion}));await e.setSelectionsAndElements(t.stepName,[g],B,async()=>{const h=e.getModelContainer();if(h){const C=t.data.targetMaterials.map(w=>h.applyMaterialVariant(w,r.id||"",d||{}));Promise.all(C).then(()=>e.setMandatoryFulfilled(t.stepName,!0))}})}}}}async selectVariant(t,e,A,a){const i=await this.selectVariantLambda(t,e,A,a);i&&(i.command&&A.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantLambda(t,e,A,a){const i=A.getModelContainer();a(!0);const s=e.material;if(!s)throw a(!1),new dt(e);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(t.stepName,[e],[],async()=>{try{i&&t.data.targetMaterials.forEach(o=>{t.option&&i.applyMaterialVariant(o,t.option.id||"",s)}),A.setMandatoryFulfilled(t.stepName,!0)}finally{a(!1)}})}}}}const xA=new Us;class Gs{async init(t,e,A){const a=t.option;if(!a)throw new $t(t);if(A)await this.reload(t,e,A);else{const i=_.getDefaultVariant(a);if(i)return await this.selectVariantLambda(t,i,e,()=>{})}return null}async reload(t,e,A){var c;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===t.stepName),r=t.option;if(a!=null&&a.selectedVariants){const l=a.selectedVariants[0].id;if(r&&l){const g=(c=r.variants)==null?void 0:c.find(d=>d.id===l);if(g){const d=o.map(B=>({id:B.id,region:B.stepRegion}));await e.setSelectionsAndElements(t.stepName,[g],d,async()=>{var h;const B=e.getModelContainer();if(B&&t.option){const C=(h=g.asset)==null?void 0:h.fileLink;if(!C)throw new dt(g);await B.applyModelVariant(t.stepName||"",{model:C,contextService:e.getLayoutPreviewService()},t.data.replaceProductModel||!1),e.setMandatoryFulfilled(t.stepName,!0)}})}}}}async selectVariant(t,e,A,a){const i=await this.selectVariantLambda(t,e,A,a);i&&(i.command&&A.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantLambda(t,e,A,a){var s;a(!0);const i=(s=e.asset)==null?void 0:s.fileLink;if(!i)throw new dt(e);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(t.stepName,[e],[],async()=>{try{const o=A.getModelContainer();o&&await o.applyModelVariant(t.stepName,{model:i,contextService:A.getLayoutPreviewService()},t.data.replaceProductModel||!1),A.setMandatoryFulfilled(t.stepName,!0)}finally{a(!1)}})}}}}const YA=new Gs;class Ts{async init(t,e,A){if(A)await this.reload(t,e,A);else return e.updateMetadata(t.stepName,{text:""}),this.changeTextCommand(t,"",e,"",()=>{});return null}async reload(t,e,A){const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),r=Object.values(A.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName).map(c=>({id:c.id,region:c.stepRegion}));await e.setSelectionsAndElements(t.stepName,[],r,async()=>{var c,l;e.updateStorage(t.stepName,{text:(c=a==null?void 0:a.storage)==null?void 0:c.text}),e.setMandatoryFulfilled(t.stepName,((l=a==null?void 0:a.storage)==null?void 0:l.text)!=="")})}async changeText(t,e,A,a,i){const s=await this.changeTextCommand(t,e,A,a,i);s&&(s.command&&A.getCommandDispatcher()(s.command),s.followup&&await s.followup())}async changeTextCommand(t,e,A,a,i){var l;const s=A.getRegionElements(t.stepName),o=(l=A.getStepSpecificServices(t.stepName))==null?void 0:l.module;if(!o)return console.error("Missing module."),null;const r=A.getProfanities();if(!this.validateInput(t,e,r,i))return A.setMandatoryFulfilled(t.stepName,!1),console.error(a),null;if(A.setMandatoryFulfilled(t.stepName,e!==""),!t.data||!t.data.regions||t.data.regions.length<=0)return console.error("Missing configuration."),null;A.updateStorage(t.stepName,{text:e}),A.updateMetadata(t.stepName,{text:e});const c=(g,d,B)=>{const h=B||H(),w=A.getLayouts().find(E=>E.panelId===d.panelId);if(!w)return console.error(`Can not find layout for region: ${d.panelId}`),null;const u=[];return B&&u.push(new Ct(h)),u.push(new j({stepRegion:d,stepName:t.stepName,colors:{},id:h,svg:g,type:R.Illustration,y:d.top,x:d.left,rotation:d.rotation,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,immutable:d.immutable},w)),{id:h,region:d,command:new G(u)}};if(s.length>0){const d=s.map(B=>{if(!B.region)return null;const h=o.svgPrint(e,B.region);return c(h,B.region,B.id)}).filter(B=>!!B).filter(B=>!!B).map(B=>B&&B.command);return{command:new G(d),followup:async()=>{}}}else{const g=t.data.regions.map(B=>c(o.svgPrint(e,B),B)),d=g.filter(B=>!!B).map(B=>B&&B.command);return{command:new G(d),followup:async()=>{const B=g.filter(h=>h).map(h=>h&&{id:h.id,region:h.region});await A.setSelectionsAndElements(t.stepName,[],B)}}}}validateInput(t,e,A,a){if(t.data&&t.data.maxLength){const s=t.data.maxLength;if(e.length>s)return a("Too many characters."),!1}if(!/^$|^[a-zA-Z0-9 ]+$/.test(e))return a("Unsupported characters."),!1;const i=qe.split(e.toLowerCase());for(const s of i)for(const o in A){const r=A[o].toLowerCase().replace(/\s/g,"");if(s===r)return a("Blocked profanity."),!1}return a(""),!0}}const PA=new Ts;class Js{async init(t,e,A){const a=t.option;if(!a)return null;if(A)await this.reload(t,e,A);else if(a.defaultVariant)return e.markStepsAsInitialised([t.stepName]),this.selectVariantCommand(t,a.defaultVariant,e,()=>{});return e.markStepsAsInitialised([t.stepName]),null}async reload(t,e,A){var c;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===t.stepName),r=t.option;if(a!=null&&a.selectedVariants){const l=a.selectedVariants[0].id;if(r&&l){const g=(c=r.variants)==null?void 0:c.find(d=>d.id===l);if(g){const d=o.map(B=>({id:B.id,region:B.stepRegion}));await e.setSelectionsAndElements(t.stepName,[g],d,async()=>{e.setMandatoryFulfilled(t.stepName,!0)})}}}}async selectVariant(t,e,A,a){const i=await this.selectVariantCommand(t,e,A,a);i&&(i.command&&A.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantCommand(t,e,A,a){const i=e.asset;if(!i)throw new dt(e);const s=i==null?void 0:i.fileLink;if(!s)return console.error("No URL for picture!"),null;a(!0),t.mandatory&&A.setMandatoryFulfilled(t.stepName,!1);const r=A.getRegionElements(t.stepName).map(g=>new Ct(g.id)),c=g=>{const B=A.getLayouts().find(C=>C.panelId===g.panelId);if(!B)throw new X(g);const h=H();return{regionElement:{id:h,region:g},command:new j({stepName:t.stepName,stepRegion:g,id:h,src:s,type:R.Image,y:g.top,x:g.left,rotation:g.rotation,width:g.width,height:g.height,layer:g.layer,layerIndex:g.layerIndex,immutable:g.immutable,preserveAspectRatio:"none"},B)}},l=t.data.regions.map(c);return{command:new G([...r,...l.map(g=>g.command)]),followup:async()=>{await A.setSelectionsAndElements(t.stepName,[e],l.map(g=>g.regionElement),async()=>{A.setMandatoryFulfilled(t.stepName,!0),a(!1)})}}}}const vA=new Js;class Os{async init(t,e,A){const a=t.option;if(!a)return null;if(A)await this.reload(t,e,A);else{const i=a.variants;if(_.getDefaultVariant(a)){const o=i==null?void 0:i.find(r=>{var c;return r.id===((c=a.defaultVariant)==null?void 0:c.id)});return this.selectVariantLambda(t,(o==null?void 0:o.id)||"",e)}}return null}async reload(t,e,A){var s;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),i=t.option;if(a!=null&&a.selectedVariants){const o=a.selectedVariants[0].id;if(i&&o){const r=(s=i.variants)==null?void 0:s.find(c=>c.id===o);r&&await e.setSelectionsAndElements(t.stepName,[r],[])}}}async selectVariant(t,e,A){await A.getInitializationPromise();const a=await this.selectVariantLambda(t,e,A);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantLambda(t,e,A){const a=t.option;if(!a)return null;const i=a.variants;if(!i)return null;const s=i.length>1?i.find(o=>o.id===e):i[0];if(!s)throw new Error("Failed to find selected variant in step variants, this should never happen!");return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(t.stepName,[s],[],async()=>{A.setMandatoryFulfilled(t.stepName,!0)})}}}}const NA=new Os;class Ls{constructor(){this.shapeFillId="spiff-fill-shape"}async availableColours(t){var A;const e=t.option;return e?((A=e.variants)==null?void 0:A.map(a=>({fill:a.color,stroke:a.color,variant:a})))||[]:[]}setCustomColor(t,e,A){const a=A.getLayouts(),s=(A.getRegionElements(e.stepName)||[]).map(o=>{const r=o.region;if(!a.find(l=>l.panelId===(r==null?void 0:r.panelId)))throw new X(r);return new oA(o.id,this.shapeFillId,t)}).filter(o=>!!o);A.getCommandDispatcher()(new G(s)),A.updateStorage(e.stepName,{colour:t})}async init(t,e,A){const a=t.option;if(!a)throw new $t(t);if(A)await this.reload(t,e,A);else{const i=_.getDefaultVariant(a);return i?this.selectVariantCommand(t,{fill:i.color,stroke:i.color,variant:i},[],e):null}return null}async selectVariant(t,e,A,a){const i=await this.selectVariantCommand(t,e,A,a);i&&(i.command&&a.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async reload(t,e,A){var c;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===t.stepName),r=t.option;if(a!=null&&a.selectedVariants){const l=a.selectedVariants[0].id;if(r&&l){const g=(c=r.variants)==null?void 0:c.find(d=>d.id===l);if(g){const d=o.map(B=>({id:B.id,region:B.stepRegion}));await e.setSelectionsAndElements(t.stepName,[g],d,async()=>{var B;e.updateStorage(t.stepName,{colour:((B=a==null?void 0:a.storage)==null?void 0:B.colour)||""}),e.setMandatoryFulfilled(t.stepName,!0)})}}}}async selectVariantCommand(t,e,A,a){var r;const i=a.getLayouts(),s=(r=a.getStepStorage(t.stepName))==null?void 0:r.colour,o=()=>{var c,l;if(((c=e.variant)==null?void 0:c.color)==="#custom")return s||"#FFFFFF";if((l=e.variant)!=null&&l.color)return e.variant.color;throw new Error("Failed to resolve color for shape step.")};if(A.length>0){const c=g=>{const d=g.region;if(!i.find(C=>C.panelId===(d==null?void 0:d.panelId)))throw new X(d);const h=o();return new oA(g.id,this.shapeFillId,h)},l=A.map(c).filter(g=>!!g);return{command:new G(l),followup:async()=>{await a.setSelectionsAndElements(t.stepName,e.variant?[e.variant]:[],A),a.updateStorage(t.stepName,{colour:o()})}}}else{const c=B=>{const h=i.find(m=>m.panelId===B.panelId);if(!h)throw new X(B);const C=o(),w=`
844
+ `,a={};a["spiff-fill-shape"]={browserValue:e.color};const i=e.region||await Lt(t,R.Illustration),s=H();return{stepRegion:e.region,colors:a,id:s,svg:A,type:R.Illustration,y:i.top,x:i.left,rotation:i.rotation,width:i.width,height:i.height,layer:i.layer||0,layerIndex:i.layerIndex||Ot(t,i.layer||0),immutable:i.immutable}}static async getIllustration(t,e){const A=e.region||await Lt(t,R.Illustration,e.src),a=await ot(await _a(e.src)),i=await ee(a.svg),s=H();return{cachedObjectURL:i,stepRegion:e.region,colors:a.colors,id:s,src:e.src,svg:a.svg,type:R.Illustration,y:A.top,x:A.left,rotation:A.rotation,width:A.width,height:A.height,layer:A.layer||0,layerIndex:A.layerIndex||Ot(t,A.layer||0),immutable:A.immutable}}}class Aa{constructor(t,e,A){this.processRegion=async a=>{var r,c,l,g;const i=this.layouts.find(d=>d.panelId===a.panelId);if(!i)throw new X(a);let s="";if(this.configuration.type===M.ProductOverlay){let d="";if((r=this.product)!=null&&r.overlayImageUrl&&(d=this.product.overlayImageUrl),s=d,!d)throw new _t(this.configuration,"Couldn't find an asset for product overlay step")}const o=this.evaluateAssetType();if(o===R.Image){const d=this.configuration.type===M.SilentIllustration?(c=this.configuration.data.asset)==null?void 0:c.fileLink:(l=this.product)==null?void 0:l.overlayImageUrl;if(!d)throw new Error("Undefined raster silent step source");const B={stepName:this.configuration.stepName,id:H(),src:d,type:o,y:a.top,x:a.left,width:a.width,height:a.height,layer:a.layer,layerIndex:a.layerIndex,immutable:a.immutable,productOverlay:this.configuration.type===M.ProductOverlay?!0:void 0,rotation:a.rotation,excludeFromExport:this.configuration.data.excludeFromPrint,preserveAspectRatio:"none"};return{regionElement:{id:B.id,region:a},command:new j(B,i)}}else{const d=this.configuration.type===M.SilentIllustration?(g=this.configuration.data.asset)==null?void 0:g.fileLink:s,h=await ot(await(async()=>new Promise((w,u)=>{if(!d){u("Undefined vector silent step source");return}tt(d,!0).then(E=>{w(E)}).catch(E=>console.error(E))}))()),C={stepName:this.configuration.stepName,id:H(),cachedObjectURL:await ee(h.svg),src:d,svg:h.svg,colors:h.colors,type:o,y:a.top,x:a.left,width:a.width,height:a.height,layer:a.layer,layerIndex:a.layerIndex,rotation:a.rotation,immutable:a.immutable,productOverlay:this.configuration.type===M.ProductOverlay?!0:void 0,excludeFromExport:this.configuration.data.excludeFromPrint};return{regionElement:{id:C.id,region:a},command:new j(C,i)}}},this.configuration=t,this.layouts=e,this.product=A||void 0}async trigger(){if(!this.configuration.data.regions)throw new _t(this.configuration,"Missing regions.");if(this.configuration.type===M.SilentIllustration){const t=this.configuration.data.regions.map(this.processRegion);return Promise.all(t)}else return this.configuration.type===M.ProductOverlay?Promise.all(this.configuration.data.regions.map(t=>{if(!this.layouts.find(A=>t.panelId===A.panelId))throw new X(t);return this.processRegion(t)})):Promise.reject("Unknown silent step. This is a bug")}evaluateAssetType(){var e,A,a;const t=this.configuration.type===M.ProductOverlay&&((e=this.product)!=null&&e.overlayImageUrl)?this.product.overlayImageUrl.toLowerCase():(a=(A=this.configuration.data.asset)==null?void 0:A.fileLink)==null?void 0:a.toLowerCase().split("?")[0];return t!=null&&t.startsWith("data:image/png")||t!=null&&t.endsWith(".jpeg")||t!=null&&t.endsWith(".jpg")||t!=null&&t.endsWith(".png")?R.Image:(t!=null&&t.endsWith(".svg")||t!=null&&t.startsWith("image/svg+xml"),R.Illustration)}}const tn=async n=>{const t=`${nt.getServicesApiUrl()}/shortener`;try{return(await(await rt(t,{method:"POST",body:JSON.stringify({longUrl:n}),headers:{"Content-Type":"application/json"}})).json()).shortUrl}catch(e){throw console.error(e),new Ye("Failed to shorten URL, see console.")}};class en{async poll(){try{if(await this.predicate()){this.onSuccess(),this.pollingId>-1&&window.clearInterval(this.pollingId);return}}catch{}this.attempts+=1,this.attempts<this.maxAttempts?this.pollingId=window.setTimeout(this.poll.bind(this),this.interval):this.onFailure()}constructor(t,e,A,a=3e3,i=10){this.onSuccess=e,this.onFailure=A,this.predicate=t,this.attempts=0,this.pollingId=-1,this.interval=a,this.maxAttempts=i,this.poll()}}class Hs{async init(t,e,A){return A&&await this.reload(t,e,A),null}async reload(t,e,A){const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),r=Object.values(A.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName).map(c=>({id:c.id,region:c.stepRegion}));await e.setSelectionsAndElements(t.stepName,[],r,async()=>{var g,d;const c=(g=a==null?void 0:a.storage)==null?void 0:g.videoShortUrl,l=(d=a==null?void 0:a.storage)==null?void 0:d.videoUrl;e.updateStorage(t.stepName,{videoShortUrl:c,videoUrl:l})})}async regenerateQRCode(t,e,A,a){const i=async()=>{var C,w;const B=(await eA([e]))[0],h=(w=(C=B==null?void 0:B.versions)==null?void 0:C.find(u=>u.name==="mpeg4"))==null?void 0:w.link;return{asset:B,link:h}},s=await new Promise((B,h)=>{new en(async()=>!!(await i()).link,async()=>{const C=await i();if(!C.link||!C.link)throw new Nt(C.asset);B({rel:"mpeg4",href:C.link})},()=>{h("Poller timed out with 40 attempts @ 3 second interval")},3e3,40)});t.forEach(B=>A.getCommandDispatcher()(new Ct(B.id)));const o=a.data.baseUrl.slice(0,4)==="http"?"":"https://",r=new URL(o+a.data.baseUrl);r.searchParams.append("video",btoa(JSON.stringify([s]))),r.pathname=r.pathname+(r.pathname.slice(-1)==="/"?"":"/");const c=r.toString();if(c.length>=2e3)throw new Ye("Cannot create QR code, URL too long.");const l=await tn(c);if(!a.data||!a.data.regions)throw new _t(a,"Missing regions.");const g=await this.regionElements(a),d=await this.command(l,g,A,a.stepName);return d&&(d.command&&A.getCommandDispatcher()(d.command),d.followup&&await d.followup()),await A.setSelectionsAndElements(a.stepName,[],g,async()=>{A.updateStorage(a.stepName,{videoShortUrl:l,videoUrl:s.href})}),l}async regionElements(t){const e=A=>({id:H(),region:A});return t.data.regions.map(e)}async command(t,e,A,a){const i=A.getLayouts(),o=`data:image/svg+xml;base64,${btoa(await oa.toString(t,{type:"svg"}))}`,r=e.map(c=>{const l=c.region,g=i.find(d=>d.panelId===(l==null?void 0:l.panelId));if(!g&&l)throw new X(l);if(g&&!l)throw new Error("Region not found");if(!g||!l)throw new Error("Neither a region or layout found!");return new j({stepRegion:l,stepName:a,id:c.id,src:o,type:R.Image,y:l.top,x:l.left,width:l.width,height:l.height,rotation:0},g)});return{command:new G(r),followup:async()=>{}}}}const SA=new Hs;class ks{constructor(){this.frameSourceSvg=async(t,e)=>{if(!t)return AA(e);const A=t.asset;if(!A)throw new dt(t);const a=A.fileLink;if(a)return tt(a,!0);throw new Nt(A)}}async init(t,e,A){if(A)return await this.reload(t,e,A),null;t.mandatory&&e.setMandatoryFulfilled(t.stepName,!1),e.markStepsAsInitialised([t.stepName]);let a;const i=e.getWorkflowExperience().getBundle();if(i&&t.globalPropertyAspectConfigurations){const s=i.getGlobalPropertyStateManager(),o=t.globalPropertyAspectConfigurations[0],r=s.getAspectStorage(o.aspectName);r&&r.originalAssetKey&&(a=(await T.getLocalOrFromServer(r.originalAssetKey)).fileLink)}if(t.option&&t.option.variants&&t.option.variants.length>0){const s=t.option,o=_.getDefaultVariant(s);return o?this.selectVariantCommand(t,o,[],e,void 0,a||t.data.placeholderImageUrl):null}return this.selectVariantCommand(t,void 0,[],e,void 0,a||t.data.placeholderImageUrl)}async reload(t,e,A){var c;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),r=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===t.stepName).map(l=>({id:l.id,region:l.stepRegion}));if(!t.option||(t.option.variants||[]).length===0){const l=t.data.regions.map(g=>AA(g));e.updateStorage(t.stepName,{currentFrameSources:l})}if(a){const l=async()=>{var h,C,w,u,E;const g=(h=a.storage)==null?void 0:h.colors,d=(C=a.storage)==null?void 0:C.framePatternSrc,B=(w=a.storage)==null?void 0:w.frameOffsetsList;if(e.updateMetadata(t.stepName,{frameOffsetsList:B,framePatternSrc:d}),d){const m=(u=e.getStepSpecificServices(t.stepName))==null?void 0:u.frameService;if(!m)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(d,m,!0,g),e.updateMetadata(t.stepName,{image:d}),e.updateStorage(t.stepName,{framePatternSrc:d}),this.validateColorCount(t,e)}if(B!=null&&B.some(m=>m.zoom)){const m=(E=e.getStepSpecificServices(t.stepName))==null?void 0:E.frameService;if(!m)throw new Error("Frame service unavailable, cannot load pattern!");m.updateOffsets(B)}e.setMandatoryFulfilled(t.stepName,!0)};if(a.selectedVariants&&a.selectedVariants.length>0){const g=a.selectedVariants[0].id;if(t.option&&g){const d=(c=t.option.variants)==null?void 0:c.find(B=>B.id===g);d&&await e.setSelectionsAndElements(t.stepName,[d],r,async()=>{const B=await Promise.all(t.data.regions.map(h=>this.frameSourceSvg(d,h)));e.updateStorage(t.stepName,{currentFrameSources:B}),await l()})}}else await e.setSelectionsAndElements(t.stepName,[],r,l)}}async availableColors(t,e){var a;const A=t.data.colorOption;return((a=A==null?void 0:A.variants)==null?void 0:a.map(i=>({fill:i.color,stroke:i.color,variant:i,pmsValue:i.name})))??[]}selectImage(t,e,A,a=!0){var r;const i=this.patternSource(e),s=(r=A.getStepStorage(t.stepName))==null?void 0:r.framePatternSrc;if(s&&s===i)return Promise.resolve();A.setEditedStatus(t.stepName,!0);const o=e.fileLink||"";return o.endsWith(".pdf")||o.endsWith(".eps")||o.endsWith(".ai")?new Promise(c=>{A.addPoller(new en(async()=>{var B;const g=(B=(await T.getFromServer(e.key||"")).versions)==null?void 0:B.find(h=>h.name==="svg");return g?(await rt(g.link)).status===200:!1},()=>{T.getLocalOrFromServer(e.key||"").then(l=>{this.loadPatternFromAsset(l,t,A,a).then(c)})},()=>{throw new Ye("Failed to resolve transcoded PDF")}))}):this.loadPatternFromAsset(e,t,A,a)}async selectVariant(t,e,A,a,i){const s=await this.selectVariantCommand(t,e,A,a,i);s&&(s.command&&a.getCommandDispatcher()(s.command),s.followup&&await s.followup())}getCreateElementCommand(t,e,A,a){return new j({id:t,type:R.Frame,x:e.left,y:e.top,width:e.width,height:e.height,layer:e.layer,layerIndex:e.layerIndex,rotation:e.rotation,scaleX:e.width/a.frameData.width,scaleY:e.height/a.frameData.height,path:a.frameData.path,dataWidth:a.frameData.width,dataHeight:a.frameData.height,stepRegion:e,stepName:a.stepName,disablePlaceholder:a.disablePlaceholder,pattern:a.pattern,immutable:e.immutable},A)}async loadPatternFromString(t,e,A=!0,a=void 0,i){if(t.endsWith("svg")){const s=await va(t),o=s.width,r=s.height,c=await tt(t);if(i){const d=c.match(/<(image|linearGradient|radialGradient)(\s|>|\/>)/gim);if(d&&d.length>0)throw new Error("Vector files may not include images or gradients when a color limit is specified.")}const l=await ot(c),g={src:t,width:o,height:r,aspect:o/r,svg:l.svg,colors:a??l.colors};lt.set(t,g),e.setPatternData(g,A)}else{const s=await ve(t,!0),o=await oe(s),r={src:t,width:o.width,height:o.height,aspect:o.width/o.height,svg:void 0,colors:void 0};lt.set(t,r),e.setPatternData(r,A)}}changeColors(t,e,A){var s,o;const a=(s=e.getStepSpecificServices(t.stepName))==null?void 0:s.frameService;if(!a||!((o=a.getImageData())!=null&&o.svg)){console.warn("changeColors was called without an SVG being assigned to a frame step");return}const i=this.calculateColorMetadata(a,t,A);e.updateMetadata(t.stepName,{colors:i.metadataColors}),e.updateStorage(t.stepName,{colors:i.storageColors}),a.setPatternData({...a.getImageData(),colors:i.newColors},!1),this.validateColorCount(t,e)}getUniqueColorCount(t,e){var s,o;const A=(s=e.getStepSpecificServices(t.stepName))==null?void 0:s.frameService;if(!A)return 0;const a=((o=A.getImageData())==null?void 0:o.colors)??{},i=[];for(const r in a){const c=a[r];if(c.pmsValue){const l=c.pmsValue.trim().toLocaleLowerCase();i.includes(l)||i.push(l)}else if(c.browserValue){const l=Ra(c.browserValue);i.includes(l)||i.push(l)}}return i.length}calculateColorMetadata(t,e,A){var r,c;if(!((r=t.getImageData())!=null&&r.svg))return{newColors:void 0,metadataColors:void 0,storageColors:void 0};const a={...t.getImageData().colors??{}},i={};Object.entries(a).forEach(([l,g])=>{const d={browserValue:g.browserValue};i[l]=d});for(const[l,g]of A.entries())a[l]={browserValue:g.browserValue,pmsValue:g.pmsValue},i[l]=g;let s=Array.from(Object.values(a)).map(l=>l.browserValue);const o=e.data.colorOption;return o&&((c=o.variants)==null||c.forEach(l=>{s=s.map(g=>{var d;return g.toLowerCase()===((d=l.color)==null?void 0:d.toLowerCase())?l.name:g})})),{newColors:a,metadataColors:s,storageColors:i}}validateColorCount(t,e){const A=t.data.colorPickerEnabled?t.data.maxColors??0:0;e.setStepError(t.stepName,"colors",A>0&&this.getUniqueColorCount(t,e)>A?"workflow.steps.frame.tooManyColors":void 0)}async selectVariantCommand(t,e,A,a,i,s){var B;const o=(B=a.getStepSpecificServices(t.stepName))==null?void 0:B.frameService;if(!o)throw new Error("Frame service unavailable, cannot load pattern!");const r=await Promise.all(t.data.regions.map(h=>this.frameSourceSvg(e,h)));i&&i(!0);const c=t.data.initialZoomLevel,l=await Promise.all(t.data.regions.map(async(h,C)=>{const w=await le(r[C]),u=o.getImageData(),E=A.map(D=>new Ct(D.id)),m=u?QA(u,w,c&&!t.data.forceImageCover?{scale:c}:void 0,t.data.forceImageCover):void 0,Q=u?{id:H(),src:u.src,x:(m==null?void 0:m.x)||0,y:(m==null?void 0:m.y)||0,width:u.width,height:u.height,scaleX:(m==null?void 0:m.zoom)||1,scaleY:(m==null?void 0:m.zoom)||1,rotation:0}:void 0,f=H(),I=a.getLayouts().find(D=>D.panelId===h.panelId);if(!I)throw new X(h);return{command:this.getCreateElementCommand(f,h,I,{frameData:w,pattern:Q,disablePlaceholder:t.data.disablePlaceholder,stepName:t.stepName}),regionEl:{id:f,region:h},removeExistingCommands:E}})),g=l.map(h=>h.command),d=l.map(h=>h.removeExistingCommands).flat();return{command:new G([...g,...d]),followup:async()=>{i&&i(!1),await a.setSelectionsAndElements(t.stepName,e?[e]:[],[...l.map(h=>h.regionEl)],async()=>{var h;if(a.updateStorage(t.stepName,{currentFrameSources:r}),s){const C=(h=a.getStepSpecificServices(t.stepName))==null?void 0:h.frameService;if(!C)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(s,C,!0)}})}}}patternSource(t){var a;const e=(a=t.versions)==null?void 0:a.find(i=>i.name==="svg");if(e)return e.link;const A=t.fileLink;if(A)return A;throw new Nt(t)}async loadPatternFromAsset(t,e,A,a){var c,l;const i=this.patternSource(t),s=A.markUpdatePending(),o=(c=A.getStepSpecificServices(e.stepName))==null?void 0:c.frameService;if(!o)throw A.markUpdateCompleted(s),new Error("Frame service unavailable, cannot load pattern!");try{await this.loadPatternFromString(i,o,a,void 0,e.data.colorPickerEnabled&&!!e.data.maxColors&&e.data.maxColors>0)}catch(g){throw A.markUpdateCompleted(s),g}const r=this.calculateColorMetadata(o,e,new Map(Object.entries(((l=o.getImageData())==null?void 0:l.colors)??{})));A.updateMetadata(e.stepName,{image:i,colors:r.metadataColors}),A.updateStorage(e.stepName,{framePatternSrc:i,colors:r.storageColors}),A.markUpdateCompleted(s),A.setMandatoryFulfilled(e.stepName,!0),A.setInformationResults(A.getInformationResults().filter(g=>g.stepID===e.stepName)),this.validateColorCount(e,A)}}const ct=new ks;class bs{async getIllustrationBody(t){return new Promise(e=>{tt(t,!0).then(A=>{e(A)}).catch(A=>console.error(A))})}getCreateElementCommand(t,e,A,a){return new j({stepRegion:e,stepName:a.stepName,colors:a.svg.colors,id:t,src:a.src,svg:a.svg.svg,cachedObjectURL:a.objectURL,type:R.Illustration,y:e.top,x:e.left,rotation:e.rotation,width:e.width,height:e.height,layer:e.layer,layerIndex:e.layerIndex,immutable:e.immutable},A)}getColors(t,e){const A=e.getRegionElements(t.stepName)||[];if(A.length===0)return[];try{return L(A[0].id,e.getAllLayoutData()).colors}catch{return[]}}async init(t,e,A){const a=t.option;if(!a)return null;if(A)return this.reload(t,e,A);{const i=_.getDefaultVariant(a);if(i)return await this.selectVariantCommand(t,i,[],()=>{},e)}return null}async reload(t,e,A){var c;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===t.stepName),r=t.option;if(a!=null&&a.selectedVariants){const l=a.selectedVariants[0].id;if(r&&l){const g=(c=r.variants)==null?void 0:c.find(d=>d.id===l);if(g){const d=o.map(B=>({id:B.id,region:B.stepRegion}));await e.setSelectionsAndElements(t.stepName,[g],d,async()=>{var B;e.updateMetadata(t.stepName,{colors:(B=a.storage)==null?void 0:B.colors}),e.setMandatoryFulfilled(t.stepName,!0)})}}else throw new Error("Required illustration variant no longer available")}return null}async availableColors(t,e){var a;const A=t.data.colorOption;return A?A?(a=A.variants)==null?void 0:a.map(i=>({fill:i.color,stroke:i.color,variant:i})):[]:[]}async changeColorsCommand(t,e,A,a,i){var l;const s={};for(const[g,d]of i.entries())s[g]={browserValue:d,spotColor:(l=s[g])==null?void 0:l.spotColor};const o=IA(t,e,A,s),r=await ee(o),c=[];for(const g of a){for(const[d,B]of i.entries())c.push(new oA(g,d,B));c.push(new xs(g,o,r))}return new G(c)}async changeColors(t,e,A,a,i){var B,h;if(e.length===0)return;const s=L(e[0].id,a().map(C=>C.layoutState)),o={...s.colors},r={};Object.entries(o).forEach(([C,w])=>{const u={browserValue:w.browserValue},E=w.spotColor;E&&(u.spotColor={profileName:E.profileName,namedColor:E.namedColor}),r[C]=u});for(const[C,w]of i.entries())o[C]={browserValue:w,spotColor:(B=o[C])==null?void 0:B.spotColor},r[C]={browserValue:w};let c=Array.from(Object.values(o)).map(C=>C.browserValue);const l=t.data.colorOption;l&&((h=l.variants)==null||h.forEach(C=>{c=c.map(w=>{var u;return w.toLowerCase()===((u=C.color)==null?void 0:u.toLowerCase())?C.name:w})})),A.updateMetadata(t.stepName,{colors:c});const g=new Map;if(Object.entries(o).forEach(([C,w])=>{g.set(C,w.browserValue)}),!s.svg)throw new Error("Colors changed before SVG loaded. This should never happen!");const d=await this.changeColorsCommand(s.svg,s.width,s.height,e.map(C=>C.id),g);A.updateStorage(t.stepName,{colors:r}),A.getCommandDispatcher()(d)}async selectVariant(t,e,A,a,i){const s=await this.selectVariantCommand(t,e,A,a,i);s&&(s.command&&i.getCommandDispatcher()(s.command),s.followup&&await s.followup())}async selectVariantCommand(t,e,A,a,i){var u;if(!t.data||!t.data.regions)throw new _t(t,"Missing regions.");a(!0);const s=A.map(E=>new Ct(E.id));t.mandatory&&i.setMandatoryFulfilled(t.stepName,!1);const o=e.asset;if(!o)throw new dt(e);const r=o.fileLink;if(!r)throw new Nt(o);const c=await ot(await this.getIllustrationBody(r)),l=await ee(c.svg),g=E=>{const m=i.getLayouts().find(f=>f.panelId===E.panelId);if(!m)throw new X(E);const Q=H();return{regionElement:{id:Q,region:E},command:this.getCreateElementCommand(Q,E,m,{stepName:t.stepName,src:r,objectURL:l,svg:c})}},d=t.data.regions.map(g),h=[...d.map(E=>E.command),...s];let C=Array.from(Object.values(c.colors)).map(E=>E.browserValue);const w=t.data.colorOption;return w&&((u=w.variants)==null||u.forEach(E=>{C=C.map(m=>{var Q;return m.toLowerCase()===((Q=E.color)==null?void 0:Q.toLowerCase())?E.name:m})})),i.updateMetadata(t.stepName,{colors:C}),{command:new G(h),followup:async()=>{await i.setSelectionsAndElements(t.stepName,[e],d.map(Q=>Q.regionElement),async()=>{i.setMandatoryFulfilled(t.stepName,!0),a(!1)});const E=await this.availableColors(t,i)||[],m=Object.keys(c.colors);if(t.data.colorPickerEnabled&&E.length===1&&m.length===1){const Q=E[0],f=m[0];await this.changeColors(t,d.map(p=>p.regionElement),i,()=>i.getCommandContext().getAllLayouts(),new Map([[f,Q.variant.color]]))}else t.data.colorPickerEnabled&&await this.changeColors(t,d.map(Q=>Q.regionElement),i,()=>i.getCommandContext().getAllLayouts(),new Map)}}}}const Wt=new bs;class Us{async init(t,e,A){const a=t.option;if(!a)throw new $t(t);if(A)await this.reload(t,e,A);else{const i=_.getDefaultVariant(a);if(i)return await this.selectVariantLambda(t,i,e,()=>{})}return null}async reload(t,e,A){var c;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===t.stepName),r=t.option;if(!r)throw new $t(t);if(a!=null&&a.selectedVariants){const l=a.selectedVariants[0].id;if(l){const g=(c=r.variants)==null?void 0:c.find(d=>d.id===l);if(g){const d=g.material,B=o.map(h=>({id:h.id,region:h.stepRegion}));await e.setSelectionsAndElements(t.stepName,[g],B,async()=>{const h=e.getModelContainer();if(h){const C=t.data.targetMaterials.map(w=>h.applyMaterialVariant(w,r.id||"",d||{}));Promise.all(C).then(()=>e.setMandatoryFulfilled(t.stepName,!0))}})}}}}async selectVariant(t,e,A,a){const i=await this.selectVariantLambda(t,e,A,a);i&&(i.command&&A.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantLambda(t,e,A,a){const i=A.getModelContainer();a(!0);const s=e.material;if(!s)throw a(!1),new dt(e);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(t.stepName,[e],[],async()=>{try{i&&t.data.targetMaterials.forEach(o=>{t.option&&i.applyMaterialVariant(o,t.option.id||"",s)}),A.setMandatoryFulfilled(t.stepName,!0)}finally{a(!1)}})}}}}const xA=new Us;class Gs{async init(t,e,A){const a=t.option;if(!a)throw new $t(t);if(A)await this.reload(t,e,A);else{const i=_.getDefaultVariant(a);if(i)return await this.selectVariantLambda(t,i,e,()=>{})}return null}async reload(t,e,A){var c;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===t.stepName),r=t.option;if(a!=null&&a.selectedVariants){const l=a.selectedVariants[0].id;if(r&&l){const g=(c=r.variants)==null?void 0:c.find(d=>d.id===l);if(g){const d=o.map(B=>({id:B.id,region:B.stepRegion}));await e.setSelectionsAndElements(t.stepName,[g],d,async()=>{var h;const B=e.getModelContainer();if(B&&t.option){const C=(h=g.asset)==null?void 0:h.fileLink;if(!C)throw new dt(g);await B.applyModelVariant(t.stepName||"",{model:C,contextService:e.getLayoutPreviewService()},t.data.replaceProductModel||!1),e.setMandatoryFulfilled(t.stepName,!0)}})}}}}async selectVariant(t,e,A,a){const i=await this.selectVariantLambda(t,e,A,a);i&&(i.command&&A.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantLambda(t,e,A,a){var s;a(!0);const i=(s=e.asset)==null?void 0:s.fileLink;if(!i)throw new dt(e);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(t.stepName,[e],[],async()=>{try{const o=A.getModelContainer();o&&await o.applyModelVariant(t.stepName,{model:i,contextService:A.getLayoutPreviewService()},t.data.replaceProductModel||!1),A.setMandatoryFulfilled(t.stepName,!0)}finally{a(!1)}})}}}}const YA=new Gs;class Ts{async init(t,e,A){if(A)await this.reload(t,e,A);else return e.updateMetadata(t.stepName,{text:""}),this.changeTextCommand(t,"",e,"",()=>{});return null}async reload(t,e,A){const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),r=Object.values(A.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName).map(c=>({id:c.id,region:c.stepRegion}));await e.setSelectionsAndElements(t.stepName,[],r,async()=>{var c,l;e.updateStorage(t.stepName,{text:(c=a==null?void 0:a.storage)==null?void 0:c.text}),e.setMandatoryFulfilled(t.stepName,((l=a==null?void 0:a.storage)==null?void 0:l.text)!=="")})}async changeText(t,e,A,a,i){const s=await this.changeTextCommand(t,e,A,a,i);s&&(s.command&&A.getCommandDispatcher()(s.command),s.followup&&await s.followup())}async changeTextCommand(t,e,A,a,i){var l;const s=A.getRegionElements(t.stepName),o=(l=A.getStepSpecificServices(t.stepName))==null?void 0:l.module;if(!o)return console.error("Missing module."),null;const r=A.getProfanities();if(!this.validateInput(t,e,r,i))return A.setMandatoryFulfilled(t.stepName,!1),console.error(a),null;if(A.setMandatoryFulfilled(t.stepName,e!==""),!t.data||!t.data.regions||t.data.regions.length<=0)return console.error("Missing configuration."),null;A.updateStorage(t.stepName,{text:e}),A.updateMetadata(t.stepName,{text:e});const c=(g,d,B)=>{const h=B||H(),w=A.getLayouts().find(E=>E.panelId===d.panelId);if(!w)return console.error(`Can not find layout for region: ${d.panelId}`),null;const u=[];return B&&u.push(new Ct(h)),u.push(new j({stepRegion:d,stepName:t.stepName,colors:{},id:h,svg:g,type:R.Illustration,y:d.top,x:d.left,rotation:d.rotation,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,immutable:d.immutable},w)),{id:h,region:d,command:new G(u)}};if(s.length>0){const d=s.map(B=>{if(!B.region)return null;const h=o.svgPrint(e,B.region);return c(h,B.region,B.id)}).filter(B=>!!B).filter(B=>!!B).map(B=>B&&B.command);return{command:new G(d),followup:async()=>{}}}else{const g=t.data.regions.map(B=>c(o.svgPrint(e,B),B)),d=g.filter(B=>!!B).map(B=>B&&B.command);return{command:new G(d),followup:async()=>{const B=g.filter(h=>h).map(h=>h&&{id:h.id,region:h.region});await A.setSelectionsAndElements(t.stepName,[],B)}}}}validateInput(t,e,A,a){if(t.data&&t.data.maxLength){const s=t.data.maxLength;if(e.length>s)return a("Too many characters."),!1}if(!/^$|^[a-zA-Z0-9 ]+$/.test(e))return a("Unsupported characters."),!1;const i=qe.split(e.toLowerCase());for(const s of i)for(const o in A){const r=A[o].toLowerCase().replace(/\s/g,"");if(s===r)return a("Blocked profanity."),!1}return a(""),!0}}const PA=new Ts;class Js{async init(t,e,A){const a=t.option;if(!a)return null;if(A)await this.reload(t,e,A);else if(a.defaultVariant)return e.markStepsAsInitialised([t.stepName]),this.selectVariantCommand(t,a.defaultVariant,e,()=>{});return e.markStepsAsInitialised([t.stepName]),null}async reload(t,e,A){var c;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===t.stepName),r=t.option;if(a!=null&&a.selectedVariants){const l=a.selectedVariants[0].id;if(r&&l){const g=(c=r.variants)==null?void 0:c.find(d=>d.id===l);if(g){const d=o.map(B=>({id:B.id,region:B.stepRegion}));await e.setSelectionsAndElements(t.stepName,[g],d,async()=>{e.setMandatoryFulfilled(t.stepName,!0)})}}}}async selectVariant(t,e,A,a){const i=await this.selectVariantCommand(t,e,A,a);i&&(i.command&&A.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantCommand(t,e,A,a){const i=e.asset;if(!i)throw new dt(e);const s=i==null?void 0:i.fileLink;if(!s)return console.error("No URL for picture!"),null;a(!0),t.mandatory&&A.setMandatoryFulfilled(t.stepName,!1);const r=A.getRegionElements(t.stepName).map(g=>new Ct(g.id)),c=g=>{const B=A.getLayouts().find(C=>C.panelId===g.panelId);if(!B)throw new X(g);const h=H();return{regionElement:{id:h,region:g},command:new j({stepName:t.stepName,stepRegion:g,id:h,src:s,type:R.Image,y:g.top,x:g.left,rotation:g.rotation,width:g.width,height:g.height,layer:g.layer,layerIndex:g.layerIndex,immutable:g.immutable,preserveAspectRatio:"none"},B)}},l=t.data.regions.map(c);return{command:new G([...r,...l.map(g=>g.command)]),followup:async()=>{await A.setSelectionsAndElements(t.stepName,[e],l.map(g=>g.regionElement),async()=>{A.setMandatoryFulfilled(t.stepName,!0),a(!1)})}}}}const vA=new Js;class Os{async init(t,e,A){const a=t.option;if(!a)return null;if(A)await this.reload(t,e,A);else{const i=a.variants;if(_.getDefaultVariant(a)){const o=i==null?void 0:i.find(r=>{var c;return r.id===((c=a.defaultVariant)==null?void 0:c.id)});return this.selectVariantLambda(t,(o==null?void 0:o.id)||"",e)}}return null}async reload(t,e,A){var s;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),i=t.option;if(a!=null&&a.selectedVariants){const o=a.selectedVariants[0].id;if(i&&o){const r=(s=i.variants)==null?void 0:s.find(c=>c.id===o);r&&await e.setSelectionsAndElements(t.stepName,[r],[])}}}async selectVariant(t,e,A){await A.getInitializationPromise();const a=await this.selectVariantLambda(t,e,A);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantLambda(t,e,A){const a=t.option;if(!a)return null;const i=a.variants;if(!i)return null;const s=i.length>1?i.find(o=>o.id===e):i[0];if(!s)throw new Error(`Failed to find selected variant ${e} in option ${a.id} of step ${t.stepName} (${t.stepTitle})`);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(t.stepName,[s],[],async()=>{A.setMandatoryFulfilled(t.stepName,!0)})}}}}const NA=new Os;class Ls{constructor(){this.shapeFillId="spiff-fill-shape"}async availableColours(t){var A;const e=t.option;return e?((A=e.variants)==null?void 0:A.map(a=>({fill:a.color,stroke:a.color,variant:a})))||[]:[]}setCustomColor(t,e,A){const a=A.getLayouts(),s=(A.getRegionElements(e.stepName)||[]).map(o=>{const r=o.region;if(!a.find(l=>l.panelId===(r==null?void 0:r.panelId)))throw new X(r);return new oA(o.id,this.shapeFillId,t)}).filter(o=>!!o);A.getCommandDispatcher()(new G(s)),A.updateStorage(e.stepName,{colour:t})}async init(t,e,A){const a=t.option;if(!a)throw new $t(t);if(A)await this.reload(t,e,A);else{const i=_.getDefaultVariant(a);return i?this.selectVariantCommand(t,{fill:i.color,stroke:i.color,variant:i},[],e):null}return null}async selectVariant(t,e,A,a){const i=await this.selectVariantCommand(t,e,A,a);i&&(i.command&&a.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async reload(t,e,A){var c;const a=e.getSerializedStep(t.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===t.stepName),r=t.option;if(a!=null&&a.selectedVariants){const l=a.selectedVariants[0].id;if(r&&l){const g=(c=r.variants)==null?void 0:c.find(d=>d.id===l);if(g){const d=o.map(B=>({id:B.id,region:B.stepRegion}));await e.setSelectionsAndElements(t.stepName,[g],d,async()=>{var B;e.updateStorage(t.stepName,{colour:((B=a==null?void 0:a.storage)==null?void 0:B.colour)||""}),e.setMandatoryFulfilled(t.stepName,!0)})}}}}async selectVariantCommand(t,e,A,a){var r;const i=a.getLayouts(),s=(r=a.getStepStorage(t.stepName))==null?void 0:r.colour,o=()=>{var c,l;if(((c=e.variant)==null?void 0:c.color)==="#custom")return s||"#FFFFFF";if((l=e.variant)!=null&&l.color)return e.variant.color;throw new Error("Failed to resolve color for shape step.")};if(A.length>0){const c=g=>{const d=g.region;if(!i.find(C=>C.panelId===(d==null?void 0:d.panelId)))throw new X(d);const h=o();return new oA(g.id,this.shapeFillId,h)},l=A.map(c).filter(g=>!!g);return{command:new G(l),followup:async()=>{await a.setSelectionsAndElements(t.stepName,e.variant?[e.variant]:[],A),a.updateStorage(t.stepName,{colour:o()})}}}else{const c=B=>{const h=i.find(m=>m.panelId===B.panelId);if(!h)throw new X(B);const C=o(),w=`
845
845
  <svg
846
846
  xmlns="http://www.w3.org/2000/svg"
847
847
  xmlnsXlink="http://www.w3.org/1999/xlink"
@@ -2606,7 +2606,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2606
2606
  total
2607
2607
  }
2608
2608
  }
2609
- `;class Xo{constructor(t){this.handleCache={},this.bundle=t}async getHandle(t){if(this.handleCache[t.name])return this.handleCache[t.name];const e=await this.createHandle(t);return this.handleCache[t.name]=e,e}async getHandles(){var e;if(!((e=this.bundle.getProductCollection())!=null&&e.getResource().globalPropertyConfiguration))return[];const t=this.bundle.getProductCollection().getResource().globalPropertyConfiguration;return Promise.all(t.aspects.map(A=>this.getHandle(A)))}applyConditionsFromState(t,e){return e?t.filter(A=>this.aspectConditionsSatisfied(A.getRawProperty(),e)):t}aspectConditionsSatisfied(t,e){return!t.conditions||t.conditions.length===0?!0:t.conditions.some(A=>{const a=e.aspects.find(i=>i.name===A.targetAspectName);return a?A.requiredVariantSelections.some(i=>i===a.value):!1})}async createHandle(t){switch(t.type){case st.FileUpload:return new Mn(this.bundle,t);case st.ColorOption:return new lA(this.bundle,t,t.entityId?await _.getOption(t.entityId):void 0);case st.Option:{const e=t.entityId?await _.getOption(t.entityId):void 0;return(e==null?void 0:e.type)==="Color"?new lA(this.bundle,t,e):new UA(this.bundle,t,e)}case st.Text:return new Sn(this.bundle,t);default:throw new Error("Unhandled Global Property Aspect Type")}}}class ke{constructor(t,e){this.bundle=t,this.property=e}getName(){return this.property.name}getTitle(){return this.property.title}getDescription(){return this.property.description}getType(){return this.property.type}getRawProperty(){return this.property}getSharedSteps(t){return(t??this.bundle.getWorkflowExperiences()).flatMap(a=>a.getStepsConditionallyActive().filter(i=>{var s;return i.getOverrideGlobalPropertyConfiguration(this.property.type)?!1:(s=i.getRaw().globalPropertyAspectConfigurations)==null?void 0:s.some(o=>{var r,c;return o.globalPropertyConfigurationId===((c=(r=this.bundle.getProductCollection())==null?void 0:r.getResource().globalPropertyConfiguration)==null?void 0:c.id)&&o.aspectName===this.property.name})}))}getStateValue(){return this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name)}}class Mn extends ke{constructor(t,e){super(t,e)}async selectImage(t){const e=this.bundle.getGlobalPropertyStateManager();await Promise.all([e.setAspect(this.property.name,t.key,{...e.getAspectStorage(this.property.name)||{},originalAssetKey:t.key,backgroundRemovedAssetKey:void 0,useOriginalAsset:void 0}),this.applyImageSelection(t)])}async canUseBackgroundRemover(){return this.bundle.getClient().canUseAddon(Se.BackgroundRemover)}async removeBackgroundFromImage(t=!0){if(!await this.canUseBackgroundRemover())throw new Error("The current Integration does not have access to the Background Remover. Please call canUseBackgroundRemover to ensure you disable this feature when appropriate.");const e=await this.getOriginalImage();if(!e)throw new Error("You must supply an image selection before attempting to remove the background.");const A=this.bundle.getGlobalPropertyStateManager(),a=await T.removeBackgroundFromAsset(e),s={...A.getAspectStorage(this.property.name),backgroundRemovedAssetKey:a.key,useOriginalAsset:!t},r=[t?A.setAspect(this.property.name,a.key,s):A.setAspectStorage(this.property.name,s)];return t&&r.push(this.applyImageSelection(a,void 0,!1,!1)),await Promise.all(r),this.updateSharedStepStorage(s),a}hasImage(){return!!this.getStateValue()}async getImage(){const t=this.getStateValue();if(t)return T.getLocalOrFromServer(t)}async getOriginalImage(){const t=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);if(t!=null&&t.originalAssetKey)return T.getLocalOrFromServer(t.originalAssetKey)}async getBackgroundRemovedImage(){const t=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);if(t!=null&&t.backgroundRemovedAssetKey)return T.getLocalOrFromServer(t.backgroundRemovedAssetKey)}getUseOriginalImage(){var t;return((t=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name))==null?void 0:t.useOriginalAsset)??!1}async setUseOriginalImage(t){const e=await this.getOriginalImage();if(!e)throw new Error("You must select an image before calling setUseOriginalImage");const A=this.bundle.getGlobalPropertyStateManager(),a=A.getAspectStorage(this.property.name);if((a==null?void 0:a.useOriginalAsset)===t)return;const i={...a,useOriginalAsset:t},s=t?a==null?void 0:a.originalAssetKey:a==null?void 0:a.backgroundRemovedAssetKey,o=[A.setAspect(this.property.name,s||"",i)];if(t)o.push(this.applyImageSelection(e,void 0,!1,!1));else{const r=async()=>{const c=await this.getBackgroundRemovedImage();if(!c)throw new Error("You must call removeBackgroundFromImage before attempting to use that version of the image.");this.applyImageSelection(c,void 0,!1,!1)};o.push(r())}this.updateSharedStepStorage(i)}async applyGlobalState(t){const e=this.getStateValue();if(!e)return;const A=await T.getLocalOrFromServer(e);if(!A)return;const a=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);await this.applyImageSelection(A,t,!1,!0),a?this.updateSharedStepStorage({...a}):(this.updateSharedStepStorage({originalAssetKey:e}),await this.bundle.getGlobalPropertyStateManager().setAspectStorage(this.property.name,{originalAssetKey:e}))}async applyImageSelection(t,e,A=!0,a=!0){const s=this.getSharedSteps(e).map(o=>{const r=o;if(r.getFrameService())return r.selectImage(t,A,a)});await Promise.all(s)}updateSharedStepStorage(t){this.bundle.getWorkflowExperiences().forEach(A=>A.getSteps().forEach(a=>{var s;if(a.getOverrideGlobalPropertyConfiguration(this.property.type))return;((s=a.getRaw().globalPropertyAspectConfigurations)==null?void 0:s.some(o=>{var r,c;return o.globalPropertyConfigurationId===((c=(r=this.bundle.getProductCollection())==null?void 0:r.getResource().globalPropertyConfiguration)==null?void 0:c.id)&&o.aspectName===this.property.name}))&&A.getWorkflowManager().updateStorage(a.getId(),{framePatternData:t})}))}}class Sn extends ke{constructor(t,e){super(t,e)}getText(){const t=this.getStateValue();return t||""}async setText(t){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t),this.applyTextSelection(t)])}async applyGlobalState(t){const e=this.getStateValue();if(!e)return Promise.resolve();await this.applyTextSelection(e,t)}async applyTextSelection(t,e){const a=this.getSharedSteps(e).map(i=>{i.setText(t)});await Promise.all(a)}}class UA extends ke{constructor(t,e,A){super(t,e),this.optionResource=A}getCurrentVariant(){var e,A;if(!this.optionResource)return;const t=this.getStateValue();if(t){const a=(A=this.optionResource.variants)==null?void 0:A.find(i=>i.id===t);return a?new it(a):void 0}else{const a=(e=this.optionResource.variants)==null?void 0:e.find(i=>{var s,o;return i.id===((o=(s=this.optionResource)==null?void 0:s.defaultVariant)==null?void 0:o.id)});return a?new it(a):void 0}}getAvailableVariants(){var e,A;return(((A=(e=this.optionResource)==null?void 0:e.variants)==null?void 0:A.filter(a=>a.enabled))||[]).map(a=>new it(a))}getAllVariants(){var e;return(((e=this.optionResource)==null?void 0:e.variants)||[]).map(A=>new it(A))}async selectVariant(t){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t.getId()),this.applyVariantSelection(t)])}async applyGlobalState(t){var a,i;const e=this.getStateValue();if(!e)return Promise.resolve();const A=(i=(a=this.optionResource)==null?void 0:a.variants)==null?void 0:i.find(s=>s.id===e);return A?this.applyVariantSelection(new it(A),t):Promise.resolve()}async applyVariantSelection(t,e){const a=this.getSharedSteps(e).map(i=>i.selectVariant(t));await Promise.all(a)}}class lA extends UA{constructor(t,e,A){super(t,e,A)}async selectVariant(t){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t.getId()),this.applyColorVariant(t)])}async applyGlobalState(t){var i,s,o;const e=this.getStateValue();if(!e)return Promise.resolve();const A=(s=(i=this.optionResource)==null?void 0:i.variants)==null?void 0:s.find(r=>r.id===e);if(!A)return Promise.resolve();await this.applyColorVariant(new it(A),t);const a=(o=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name))==null?void 0:o.customColor;a&&this.setCustomColor(a)}async applyColorVariant(t,e){const a=this.getSharedSteps(e).map(i=>{switch(i.getType()){case M.Shape:return i.selectVariant(t);case M.Text:return i.setFillColor({fill:t.getColor(),stroke:t.getColor(),variant:t.getResource()})}});await Promise.all(a)}setCustomColor(t){this.getSharedSteps().forEach(A=>A.setCustomColor(t)),this.bundle.getGlobalPropertyStateManager().setAspectStorage(this.property.name,{customColor:t})}getCustomColor(){var t,e;return((t=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name))==null?void 0:t.customColor)||((e=this.getCurrentVariant())==null?void 0:e.getColor())||"#ffffff"}}const GA=F.gql`
2609
+ `;class Xo{constructor(t){this.handleCache={},this.bundle=t}async getHandle(t){if(this.handleCache[t.name])return this.handleCache[t.name];const e=await this.createHandle(t);return this.handleCache[t.name]=e,e}async getHandles(){var e;if(!((e=this.bundle.getProductCollection())!=null&&e.getResource().globalPropertyConfiguration))return[];const t=this.bundle.getProductCollection().getResource().globalPropertyConfiguration;return Promise.all(t.aspects.map(A=>this.getHandle(A)))}applyConditionsFromState(t,e){return e?t.filter(A=>this.aspectConditionsSatisfied(A.getRawProperty(),e)):t}aspectConditionsSatisfied(t,e){return!t.conditions||t.conditions.length===0?!0:t.conditions.some(A=>{const a=e.aspects.find(i=>i.name===A.targetAspectName);return a?A.requiredVariantSelections.some(i=>i===a.value):!1})}async createHandle(t){switch(t.type){case st.FileUpload:return new Mn(this.bundle,t);case st.ColorOption:return new lA(this.bundle,t,t.entityId?await _.getOption(t.entityId):void 0);case st.Option:{const e=t.entityId?await _.getOption(t.entityId):void 0;return(e==null?void 0:e.type)==="Color"?new lA(this.bundle,t,e):new UA(this.bundle,t,e)}case st.Text:return new Sn(this.bundle,t);default:throw new Error("Unhandled Global Property Aspect Type")}}}class ke{constructor(t,e){this.bundle=t,this.property=e}getName(){return this.property.name}getTitle(){return this.property.title}getDescription(){return this.property.description}getType(){return this.property.type}getRawProperty(){return this.property}getSharedSteps(t){return(t??this.bundle.getWorkflowExperiences()).flatMap(a=>a.getStepsConditionallyActive().filter(i=>{var s;return i.getOverrideGlobalPropertyConfiguration(this.property.type)?!1:(s=i.getRaw().globalPropertyAspectConfigurations)==null?void 0:s.some(o=>{var r,c;return o.globalPropertyConfigurationId===((c=(r=this.bundle.getProductCollection())==null?void 0:r.getResource().globalPropertyConfiguration)==null?void 0:c.id)&&o.aspectName===this.property.name})}))}getStateValue(){return this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name)}}class Mn extends ke{constructor(t,e){super(t,e)}async selectImage(t){const e=this.bundle.getGlobalPropertyStateManager();await Promise.all([e.setAspect(this.property.name,t.key,{...e.getAspectStorage(this.property.name)||{},originalAssetKey:t.key,backgroundRemovedAssetKey:void 0,useOriginalAsset:void 0}),this.applyImageSelection(t)])}async canUseBackgroundRemover(){return this.bundle.getClient().canUseAddon(Se.BackgroundRemover)}async removeBackgroundFromImage(t=!0){if(!await this.canUseBackgroundRemover())throw new Error("The current Integration does not have access to the Background Remover. Please call canUseBackgroundRemover to ensure you disable this feature when appropriate.");const e=await this.getOriginalImage();if(!e)throw new Error("You must supply an image selection before attempting to remove the background.");const A=this.bundle.getGlobalPropertyStateManager(),a=await T.removeBackgroundFromAsset(e),s={...A.getAspectStorage(this.property.name),backgroundRemovedAssetKey:a.key,useOriginalAsset:!t},r=[t?A.setAspect(this.property.name,a.key,s):A.setAspectStorage(this.property.name,s)];return t&&r.push(this.applyImageSelection(a,void 0,!1,!1)),await Promise.all(r),this.updateSharedStepStorage(s),a}hasImage(){return!!this.getStateValue()}async getImage(){const t=this.getStateValue();if(t)return T.getLocalOrFromServer(t)}async getOriginalImage(){const t=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);if(t!=null&&t.originalAssetKey)return T.getLocalOrFromServer(t.originalAssetKey)}async getBackgroundRemovedImage(){const t=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);if(t!=null&&t.backgroundRemovedAssetKey)return T.getLocalOrFromServer(t.backgroundRemovedAssetKey)}getUseOriginalImage(){var t;return((t=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name))==null?void 0:t.useOriginalAsset)??!1}async setUseOriginalImage(t){const e=await this.getOriginalImage();if(!e)throw new Error("You must select an image before calling setUseOriginalImage");const A=this.bundle.getGlobalPropertyStateManager(),a=A.getAspectStorage(this.property.name);if((a==null?void 0:a.useOriginalAsset)===t)return;const i={...a,useOriginalAsset:t},s=t?a==null?void 0:a.originalAssetKey:a==null?void 0:a.backgroundRemovedAssetKey,o=[A.setAspect(this.property.name,s||"",i)];if(t)o.push(this.applyImageSelection(e,void 0,!1,!1));else{const r=async()=>{const c=await this.getBackgroundRemovedImage();if(!c)throw new Error("You must call removeBackgroundFromImage before attempting to use that version of the image.");this.applyImageSelection(c,void 0,!1,!1)};o.push(r())}this.updateSharedStepStorage(i)}async applyGlobalState(t){const e=this.getStateValue();if(!e)return;const A=await T.getLocalOrFromServer(e);if(!A)return;const a=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);await this.applyImageSelection(A,t,!1,!0),a?this.updateSharedStepStorage({...a}):(this.updateSharedStepStorage({originalAssetKey:e}),await this.bundle.getGlobalPropertyStateManager().setAspectStorage(this.property.name,{originalAssetKey:e}))}async applyImageSelection(t,e,A=!0,a=!0){const s=this.getSharedSteps(e).map(o=>{const r=o;if(r.getFrameService())return r.selectImage(t,A,a)});await Promise.all(s)}updateSharedStepStorage(t){this.bundle.getWorkflowExperiences().forEach(A=>A.getSteps().forEach(a=>{var s;if(a.getOverrideGlobalPropertyConfiguration(this.property.type))return;((s=a.getRaw().globalPropertyAspectConfigurations)==null?void 0:s.some(o=>{var r,c;return o.globalPropertyConfigurationId===((c=(r=this.bundle.getProductCollection())==null?void 0:r.getResource().globalPropertyConfiguration)==null?void 0:c.id)&&o.aspectName===this.property.name}))&&A.getWorkflowManager().updateStorage(a.getId(),{framePatternData:t})}))}}class Sn extends ke{constructor(t,e){super(t,e)}getText(){const t=this.getStateValue();return t||""}async setText(t){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t),this.applyTextSelection(t)])}async applyGlobalState(t){const e=this.getStateValue();if(!e)return Promise.resolve();await this.applyTextSelection(e,t)}async applyTextSelection(t,e){const a=this.getSharedSteps(e).map(i=>{i.setText(t)});await Promise.all(a)}}class UA extends ke{constructor(t,e,A){super(t,e),this.optionResource=A}getCurrentVariant(){var e,A;if(!this.optionResource)return;const t=this.getStateValue();if(t){const a=(A=this.optionResource.variants)==null?void 0:A.find(i=>i.id===t);return a?new it(a):void 0}else{const a=(e=this.optionResource.variants)==null?void 0:e.find(i=>{var s,o;return i.id===((o=(s=this.optionResource)==null?void 0:s.defaultVariant)==null?void 0:o.id)});return a?new it(a):void 0}}getAvailableVariants(){var e,A;return(((A=(e=this.optionResource)==null?void 0:e.variants)==null?void 0:A.filter(a=>a.enabled))||[]).map(a=>new it(a))}getAllVariants(){var e;return(((e=this.optionResource)==null?void 0:e.variants)||[]).map(A=>new it(A))}async selectVariant(t){console.log(`Selecting variant ${t.getId()}`),await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t.getId()),this.applyVariantSelection(t)])}async applyGlobalState(t){var a,i;const e=this.getStateValue();if(!e)return Promise.resolve();const A=(i=(a=this.optionResource)==null?void 0:a.variants)==null?void 0:i.find(s=>s.id===e);return A?(console.log(`Applying global state using variant ${A.id} for aspect ${e}`),this.applyVariantSelection(new it(A),t)):Promise.resolve()}async applyVariantSelection(t,e){const a=this.getSharedSteps(e).map(i=>i.selectVariant(t));await Promise.all(a)}}class lA extends UA{constructor(t,e,A){super(t,e,A)}async selectVariant(t){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t.getId()),this.applyColorVariant(t)])}async applyGlobalState(t){var i,s,o;const e=this.getStateValue();if(!e)return Promise.resolve();const A=(s=(i=this.optionResource)==null?void 0:i.variants)==null?void 0:s.find(r=>r.id===e);if(!A)return Promise.resolve();await this.applyColorVariant(new it(A),t);const a=(o=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name))==null?void 0:o.customColor;a&&this.setCustomColor(a)}async applyColorVariant(t,e){const a=this.getSharedSteps(e).map(i=>{switch(i.getType()){case M.Shape:return i.selectVariant(t);case M.Text:return i.setFillColor({fill:t.getColor(),stroke:t.getColor(),variant:t.getResource()})}});await Promise.all(a)}setCustomColor(t){this.getSharedSteps().forEach(A=>A.setCustomColor(t)),this.bundle.getGlobalPropertyStateManager().setAspectStorage(this.property.name,{customColor:t})}getCustomColor(){var t,e;return((t=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name))==null?void 0:t.customColor)||((e=this.getCurrentVariant())==null?void 0:e.getColor())||"#ffffff"}}const GA=F.gql`
2610
2610
  fragment GlobalPropertyStateAspectFields on GlobalPropertyStateAspect {
2611
2611
  name
2612
2612
  value
@@ -3332,4 +3332,4 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
3332
3332
  ...TagFields
3333
3333
  }
3334
3334
  }
3335
- `,Ft=async n=>{var t;for(const e in n.layouts){const A=n.layouts[e].elements.filter(i=>i.type===R.Illustration);for(let i=0;i<A.length;++i){const s=A[i];s.src&&s.svg&&(s.cachedObjectURL=await ee(s.svg))}const a=n.layouts[e].elements.filter(i=>i.type===R.Textbox);for(let i=0;i<a.length;++i){const s=a[i];(t=s.fontData)!=null&&t.assetUrl&&await Ut(s.fontData.assetUrl)}}},mr=async(n,t)=>{var a;const e=await v.getShadowGraphqlClient().query({query:hr(((a=t==null?void 0:t.assets)==null?void 0:a.metadata)||!1),errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:n}});if(e.error)throw e.error;if(e.errors)throw e.errors.forEach(i=>console.error(i)),new Error("Unable to read workflows. Consult GraphQL errors.");const A=e.data.workflows;if(A===void 0||A.length!==n.length)throw new Error(`Unable to read workflows: ${e.errors??"Length mismatch in response"}`);return A.forEach(i=>{i.steps.forEach(s=>{var o,r,c;delete s.data.__typename,(o=s.option)!=null&&o.id&&((r=s.option.defaultVariant)!=null&&r.asset&&T.cacheAsset(s.option.defaultVariant.asset),s.option.colorProfile&&T.cacheAsset(s.option.colorProfile),(c=s.option.variants)==null||c.forEach(l=>{l.asset&&T.cacheAsset(l.asset),l.thumbnail&&T.cacheAsset(l.thumbnail),l.material&&T.cacheMaterial(l.material)}),Rt.set({id:s.option.id},Promise.resolve(s.option)))}),i.finalizeStepConfig||(i.finalizeStepConfig={}),i.finalizeStepConfig.termsMarkdown=i.partner.termsMarkdown}),A},fr=async(n,t)=>{const A=(await t).find(a=>a.id===n);if(!A)throw new Error(`Workflow not found: ${n}`);return A},OA=async(n,t)=>{const e=n.map(o=>Rt.get({id:o,options:t})),A=n.filter((o,r)=>e[r]===void 0);if(A.length===0)return Promise.all(e);const a=mr(A,t),i=A.map(o=>Rt.set({id:o,options:t},fr(o,a))),s=e.filter(o=>o!==void 0);return await Promise.all(s.concat(i))},Vt=async(n,t)=>(await OA([n],t))[0],Qr=n=>n.sort((t,e)=>t.index-e.index).map(t=>({id:H(),panelId:t.name,name:t.name,index:t.index,createdAt:new Date,updatedAt:new Date,transparentBackground:t.transparentBackground,height:t.height,width:t.width,previewRegion:t.previewRegion,useEditableArea:t.useEditableArea,editableArea:t.editableArea})),We=(n,t)=>{const e=n.workflowState,A=e?JSON.parse(e):void 0;return A?Object.values(A.layouts).map(a=>a.layout):Qr(t.panels)};class Hn{constructor(t){this.activeIntegration=void 0,this.updateTransactionState=async e=>{try{return v.getShadowGraphqlClient().mutate({...e,mutation:xi})}catch(A){throw console.error(A),new b("Critical - Unable to synchronize workflow state with server.")}},this.initialized=!1,this.options=t,this.options.applicationKey&&ai(this.options.applicationKey),console.debug("------------------------"),console.debug("Spiff Commerce Core SDK"),console.debug("Version: 25.0.0"),console.debug(`Application Key Provided: ${!!this.options.applicationKey}`),console.debug("------------------------")}configureUrls(t,e,A){nt.setHubUrl(t),nt.setServerUrl(e),nt.setServicesApiUrl(A),this.options.applicationKey&&this.getIntegration()}configure(t){nt.setHubUrl(t.hubUrl),nt.setServerUrl(t.serverUrl),nt.setServicesApiUrl(t.servicesApiUrl),this.marketplaceThemeInstallId=t.marketplaceThemeInstallId,this.marketplaceThemeInstallConfigurationId=t.marketplaceThemeInstallConfigurationId,t.bearerAuthenticationToken&&pa(t.bearerAuthenticationToken),this.options.applicationKey&&this.getIntegration()}getAssetManager(){return T}getCurrencyCode(){if(this.currencyCode===void 0)throw new Error("No currency code set.");return this.currencyCode}getFlowService(){if(!ni())throw new Error("Application key required to use Flow Service.");return new vn}async getIntegration(){if(this.activeIntegration)return this.activeIntegration;if(!this.options.applicationKey)throw new Error("Cannot get current Integration without specifying an Application Key.");const t=async()=>(await v.getShadowGraphqlClient().query({query:yi,errorPolicy:"all",fetchPolicy:"no-cache"})).data.currentIntegration;return this.activeIntegration=t(),this.activeIntegration}async canUseAddon(t){var e;try{return((e=(await this.getIntegration()).partner.activeAddons)==null?void 0:e.includes(t))??!1}catch(A){return console.error(A),!1}}async authenticateBundleFromLocalStorage(t){var a,i;const e=P.getMap("bundleOwnerIds");if(e!=null&&e.has(t))return Promise.resolve({success:!0,stakeholderType:Zt.Owner});const A=P.getMap("bundlePartnerIds")||new Map;if(A.has(t)){const s=A.get(t),r=(P.getMap("partnerCustomerIds")||new Map).get(s);if(r&&await this.authenticateCustomerId(r)){const l=(i=(a=this.customer)==null?void 0:a.bundleStakeholders)==null?void 0:i.find(g=>{var d;return((d=g.bundle)==null?void 0:d.id)===t});if(l)return Promise.resolve({success:!0,stakeholderType:l.type})}}return Promise.resolve({success:!1})}async authenticateTransactionFromLocalStorage(t){var l,g,d,B,h,C;const e=v.getShadowGraphqlClient(),A=await e.query({query:Cr,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t}});if(!A.data.transactions||A.data.transactions.length===0)throw new Error(`Transaction not found: ${t}`);const a=A.data.transactions[0];if(!((g=(l=a.product)==null?void 0:l.partner)==null?void 0:g.id))throw new Error(`Unable to read transaction: ${t}`);if(a.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const s=P.getMap("transactionOwnerIds");if(s!=null&&s.has(t))return Promise.resolve({success:!0,stakeholderType:Zt.Owner});const o=P.getMap("transactionCustomerIds");if(o!=null&&o.has(t)){const w=o.get(t);if(w&&await this.authenticateCustomerId(w)){const E=((B=(d=this.customer)==null?void 0:d.bundleStakeholders)==null?void 0:B.find(m=>{var Q,f;return(f=(Q=m.bundle)==null?void 0:Q.transactions)==null?void 0:f.some(p=>p.id===t)}))||((C=(h=this.customer)==null?void 0:h.stakeholders)==null?void 0:C.find(m=>{var Q;return((Q=m.transaction)==null?void 0:Q.id)===t}));if(E)return Promise.resolve({success:!0,stakeholderType:E.type})}}const c=(await e.query({query:wr,errorPolicy:"all",variables:{id:a.workflowId}})).data.workflow;if(!c)throw new Error(`Unable to read workflow: ${a.workflowId}`);return Promise.resolve({success:!1,theme:c.overrideTheme,customLogoLink:a.customLogoLink})}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(t){const e=P.getMap("transactionCustomerIds");e!=null&&e.has(t)&&(e.delete(t),P.setMap("transactionCustomerIds",e))}getStakeholderTypeForTransaction(t){var A,a;const e=(a=(A=this.customer)==null?void 0:A.stakeholders)==null?void 0:a.find(i=>{var s;return((s=i.transaction)==null?void 0:s.id)===t});if(e)return e.type}async getOrCreateCustomer(t){var s;this.customer=void 0;const e=v.getShadowGraphqlClient(),a=(await e.query({query:nr,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;if(!a.id){const r=(s=(await e.mutate({mutation:ir,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:t}}})).data)==null?void 0:s.customerCreate;if(!r)throw new Error("Unable to create customer.");return this.storeCustomer(r),this.customer=r,{customer:r,isAuthenticated:!1}}this.storeCustomer(a);const i=await this.authenticateCustomerId(a.id);return{customer:this.customer||a,isAuthenticated:i}}getCustomer(){return this.customer}async authenticateCustomerId(t){var o;const e=v.getShadowGraphqlClient(),A=P.getMap("customerTokens");if(!(A!=null&&A.has(t)))return!1;const a=A.get(t);if(!a)return!1;const s=(o=(await e.mutate({mutation:sr,errorPolicy:"all",fetchPolicy:"no-cache",variables:{loginToken:a}})).data)==null?void 0:o.customerAuthenticate;return s?(this.storeCustomer(s),WA(a),this.customer=s,!0):!1}async generateVerificationCode(t){await v.getShadowGraphqlClient().mutate({mutation:or,variables:{emailAddress:t}})}async verifyCode(t,e){var i,s;const a=(i=(await v.getShadowGraphqlClient().mutate({mutation:rr,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t,verificationCode:e}})).data)==null?void 0:i.customerVerifyCode;if(a!=null&&a.loginToken){if(!((s=a.partner)!=null&&s.id))throw new Error(`Unable to find customer: ${t}`);const o=P.getMap("customerTokens")||new Map;return o.set(a.id,a.loginToken),P.setMap("customerTokens",o),this.storeCustomer(a),WA(a.loginToken),this.customer={...a,loginToken:void 0},!0}return!1}async getCustomerMetafields(){var e;if(!((e=this.customer)!=null&&e.id))throw new Error("Customer must be logged in before calling this function.");return(await v.getShadowGraphqlClient().query({query:cr,fetchPolicy:"no-cache",variables:{id:this.customer.id}})).data.metafields}async getNewBundle(t,e,A){var c,l,g,d,B;const i=(g=(await v.getShadowGraphqlClient().mutate({mutation:ko(((l=(c=A==null?void 0:A.graphql)==null?void 0:c.productCollection)==null?void 0:l.eagerFetchProducts)||!1),variables:{collectionId:t,initialMetadata:e?Object.entries(e).map((h,C)=>({key:h[0],value:h[1]})):void 0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},fetchPolicy:"no-cache"})).data)==null?void 0:g.bundleCreate;if(!(i!=null&&i.id))throw new Error("Unable to create bundle");const s=P.getMap("bundlePartnerIds")||new Map;s.set(i.id,i.partner.id),P.setMap("bundlePartnerIds",s);const o=P.getMap("bundleOwnerIds")||new Map;o.set(i.id,i.bundleOwnerId),P.setMap("bundleOwnerIds",o);const r=new Ve(this,i,void 0,void 0,i.bundleOwnerId,{eagerFetchProducts:(B=(d=A==null?void 0:A.graphql)==null?void 0:d.productCollection)==null?void 0:B.eagerFetchProducts});return await r.getInitializationPromise(),r}async getExistingBundle(t,e,A,a){var w,u,E,m,Q,f,p,I,D,y,Y;const i=P.getMap("bundleOwnerIds"),s=i==null?void 0:i.get(t),r=((w=Object.entries(localStorage).find(([N,x])=>N.startsWith("CognitoIdentityServiceProvider")&&N.endsWith("idToken")))==null?void 0:w[0])||"",c=localStorage.getItem(r),l={};c&&!Me(c)&&(l.Authorization=`Bearer ${c}`);const g={bundleOwnerId:s,...l,...(u=a==null?void 0:a.graphql)==null?void 0:u.additionalHeaders},d=await v.getShadowGraphqlClient().query({query:vo(((m=(E=a==null?void 0:a.graphql)==null?void 0:E.productCollection)==null?void 0:m.eagerFetchProducts)||!1),variables:{id:t},fetchPolicy:"no-cache",context:{headers:g}});if(!((Q=d.data)!=null&&Q.bundles)||((f=d.data)==null?void 0:f.bundles.length)===0||!((p=d.data)!=null&&p.bundles[0]))throw new Error(`Unable to find bundle: ${t}`);const B=(I=d.data)==null?void 0:I.bundles[0],h=P.getMap("bundlePartnerIds")||new Map;h.set(B.id,B.partner.id),P.setMap("bundlePartnerIds",h);const C=new Ve(this,B,e,A,s,{additionalHeaders:(D=a==null?void 0:a.graphql)==null?void 0:D.additionalHeaders,eagerFetchProducts:(Y=(y=a==null?void 0:a.graphql)==null?void 0:y.productCollection)==null?void 0:Y.eagerFetchProducts});return await C.getInitializationPromise(),C}async duplicateBundle(t,e,A,a){var w,u,E,m,Q,f,p,I;const i=(w=P.getMap("bundleOwnerIds"))==null?void 0:w.get(t),o=((u=Object.entries(localStorage).find(([D,y])=>D.startsWith("CognitoIdentityServiceProvider")&&D.endsWith("idToken")))==null?void 0:u[0])||"",r=localStorage.getItem(o),c={};r&&!Me(r)&&(c.Authorization=`Bearer ${r}`);const l={bundleOwnerId:i,...c,...(E=a==null?void 0:a.graphql)==null?void 0:E.additionalHeaders},d=(f=(await v.getShadowGraphqlClient().mutate({mutation:bo(((Q=(m=a==null?void 0:a.graphql)==null?void 0:m.productCollection)==null?void 0:Q.eagerFetchProducts)||!1),variables:{id:t,template:e,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId,duplicateTransactions:A},context:{headers:l},fetchPolicy:"no-cache"})).data)==null?void 0:f.bundleDuplicate;if(!(d!=null&&d.id))throw new Error("Unable to duplicate bundle");const B=P.getMap("bundlePartnerIds")||new Map;B.set(d.id,d.partner.id),P.setMap("bundlePartnerIds",B);const h=P.getMap("bundleOwnerIds")||new Map;h.set(d.id,d.bundleOwnerId),P.setMap("bundleOwnerIds",h);const C=new Ve(this,d,void 0,void 0,d.bundleOwnerId,{eagerFetchProducts:(I=(p=a==null?void 0:a.graphql)==null?void 0:p.productCollection)==null?void 0:I.eagerFetchProducts});return await C.getInitializationPromise(),C}async getBundlesForCustomer(t){var i;if(!((i=this.customer)!=null&&i.id))throw new Error("Customer not authenticated.");const{includeMetadata:e,...A}=t;return(await v.getShadowGraphqlClient().query({query:Wo(e??!1),variables:{...A,id:this.customer.id},fetchPolicy:"no-cache"})).data.customerBundlesFeed}async getBundleStakeholders(){var i;if(!this.customer)throw new Error("Customer not authenticated.");const t=await v.getShadowGraphqlClient().query({query:Ro,variables:{id:this.customer.id},fetchPolicy:"no-cache"});if(!((i=t.data)!=null&&i.customers)||t.data.customers.length===0)throw new Error("Unable to find customer.");const A=t.data.customers[0].bundleStakeholders||[],a=P.getMap("bundlePartnerIds")||new Map;return A.forEach(s=>{var o,r;(o=s.bundle)!=null&&o.id&&((r=s.bundle.partner)!=null&&r.id)&&a.set(s.bundle.id,s.bundle.partner.id)}),P.setMap("bundlePartnerIds",a),A}async getStepTags(t){const e=v.getShadowGraphqlClient();let A={};const a=t.steps.map(s=>`${t.id}_${s.stepName}`),i=await e.query({query:Er,fetchPolicy:"no-cache",variables:{entityIds:a}});for(const[s,o]of t.steps.entries()){const r=i.data.tagsMany[s];A={...A,[o.stepName]:r.map(c=>c.name)}}return A}async getWorkflowExperience(t,e,A,a){var d,B,h,C,w;if(!a)return await this.getWorkflowExperienceDeprecated(t,e,A);const i=async()=>{var E,m,Q;const u=v.getShadowGraphqlClient();if(a.type==="transaction"){const{transactionId:f,readOnly:p}=a,I=await u.query({query:Ce,variables:{ids:[f]},errorPolicy:"all",fetchPolicy:"no-cache"});if(!((E=I.data)!=null&&E.transactions)||I.data.transactions.length===0)throw new b("Existing transaction not found.");const D=(m=I.data)==null?void 0:m.transactions[0];if(!D.workflowId)throw new b("Existing transaction has no workflow ID.");const y=await Vt(D.workflowId);if(!D.product)throw new b("Failed to load transaction, product not available.");!this.activeIntegration&&((Q=D.integrationProduct)!=null&&Q.integration)&&(this.activeIntegration=Promise.resolve(D.integrationProduct.integration));const Y=await this.getStepTags(y);return{transaction:D,workflow:y,stepTags:Y,readOnly:p}}if(a.type==="integration"||a.type==="external"){const f=async()=>{const Y=a.type==="integration"?{integrationProductId:a.integrationProductId}:{externalIntegrationId:a.externalIntegrationId,externalProductId:a.externalProductId},N=await u.mutate({mutation:qA,variables:{...Y,workflowId:a.workflowId,designName:a.designName,claim:!0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!N.data||!N.data.transactionCreate)throw new b("Failed to create transaction!");const x=N.data.transactionCreate;if(!x.product)throw new b("Failed to create transaction, product not available.");return x},p=Vt(a.workflowId,a==null?void 0:a.graphql),[I,D]=await Promise.all([f(),p]),y=await this.getStepTags(D);return{transaction:I,workflow:D,stepTags:y}}throw new b("No workflow ID provided.")},{transaction:s,workflow:o,stepTags:r,readOnly:c}=await i();this.currencyCode=(d=s.product.partner)==null?void 0:d.currencyCode;const l={product:s.product,transaction:s,stepTags:r,layouts:[],singleVariantsRenderable:(B=a==null?void 0:a.workflowConfiguration)==null?void 0:B.singleVariantsRenderable,stateMutationFunc:c?async()=>{throw new O("State mutation is forbidden in read only mode!")}:async u=>{const m=(P.getMap("transactionOwnerIds")||new Map).get(s.id)||void 0;return this.updateTransactionState({...u,context:{transactionOwnerId:m}})},readOnly:c,workflow:o};if(a.type==="transaction"&&s.workflowState){const u=JSON.parse(s.workflowState);l.layouts=Object.values(u.layouts).map(E=>E.layout),await mt(u),await Ft(u),l.reloadedState=u}else if(!c&&a.workflowState){const u=JSON.parse(a.workflowState);l.layouts=Object.values(u.layouts).map(E=>E.layout),await mt(u),await Ft(u),l.reloadedState=u}else l.layouts=We(l.transaction,l.workflow);if(l.renderableContextService=new me(l.layouts),a.previewService?(l.previewService=a.previewService,(h=l.product)!=null&&h.modelUrl&&(l.modelContainer=l.previewService.loadModel({model:l.product.modelUrl,contextService:l.renderableContextService}))):(l.previewService=A&&A(o),(C=l.product)!=null&&C.modelUrl&&(l.modelContainer=(w=l.previewService)==null?void 0:w.loadModel({model:l.product.modelUrl,contextService:l.renderableContextService}))),a.type!=="transaction"){const u=P.getMap("transactionOwnerIds")||new Map;u.set(s.id,s.transactionOwnerId),P.setMap("transactionOwnerIds",u)}else l.isReloadedTransaction=!0;this.initialized=!0,this.experienceOptions=l;const g=new jt(this,l);return await g.getWorkflowManager().getInitializationPromise(),a.type!=="transaction"&&this.customer&&await g.attachCustomerDetails({email:this.customer.emailAddress}),g}async getWorkflowExperiences(t,e){if(t.length===0)throw new b("No options provided!");const A=v.getShadowGraphqlClient(),a=async f=>{var y,Y,N;if(f.length===0)return[];const p=f.map(x=>x.option.transactionId),I=await A.query({query:Ce,variables:{ids:p},errorPolicy:"all",fetchPolicy:"no-cache"}),D=I.data.transactions;if(D.length!==f.length){const x=((Y=(y=I.errors)==null?void 0:y[0])==null?void 0:Y.message)||"Unknown error";throw new b(`Not all transactions were found: ${x}`)}return!this.activeIntegration&&((N=D[0].integrationProduct)!=null&&N.integration)&&(this.activeIntegration=Promise.resolve(D[0].integrationProduct.integration)),D.map((x,z)=>{var U;return{transaction:x,workflowId:x.workflowId,readOnly:((U=f.find(At=>At.option.transactionId===x.id))==null?void 0:U.option.readOnly)??!1,index:f[z].index}})},i=async f=>{var D,y,Y;if(f.length===0)return[];const p=await A.mutate({mutation:Mi,variables:{inputs:f.map(N=>({integrationProductId:N.option.type==="integration"?N.option.integrationProductId:void 0,externalIntegrationId:N.option.type==="external"?N.option.externalIntegrationId:void 0,externalProductId:N.option.type==="external"?N.option.externalProductId:void 0,workflowId:N.option.workflowId,designName:N.option.designName,claim:!0})),marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache"}),I=(D=p.data)==null?void 0:D.transactionCreateMany;if(!I||I.length===0){const N=((Y=(y=p.errors)==null?void 0:y[0])==null?void 0:Y.message)||"Unknown error";throw new b(`Failed to create transactions: ${N}`)}return I.map((N,x)=>({transaction:N,workflowId:N.workflowId,readOnly:!1,index:f[x].index}))},s=t.map((f,p)=>({option:f,index:p})),o=s.filter(f=>f.option.type==="transaction"),r=s.filter(f=>f.option.type==="integration"||f.option.type==="external"),c=LA(o,10),l=LA(r,10),g=(await Promise.all([...c.map(a),...l.map(i)])).flat(),d=[...new Set(g.map(f=>f.workflowId))],B=await OA(d,e),h=new Map(B.map(f=>[f.id,f])),C=P.getMap("transactionOwnerIds")||new Map,w=g.map(async f=>{var At;const{transaction:p,workflowId:I,readOnly:D,index:y}=f,Y=h.get(I),N=await this.getStepTags(Y),x=t[y];!C.get(p.id)&&p.transactionOwnerId&&C.set(p.id,p.transactionOwnerId);const z=C.get(p.id)||void 0,U={product:p.product,transaction:p,stepTags:N,layouts:[],singleVariantsRenderable:(At=x==null?void 0:x.workflowConfiguration)==null?void 0:At.singleVariantsRenderable,stateMutationFunc:D?async()=>{throw new O("State mutation is forbidden in read only mode!")}:async V=>this.updateTransactionState({...V,context:{transactionOwnerId:z}}),readOnly:D,workflow:Y,isReloadedTransaction:x.type==="transaction"};if(x.type==="transaction"&&p.workflowState){const V=JSON.parse(p.workflowState);U.layouts=Object.values(V.layouts||{}).map(ut=>ut.layout),await mt(V),await Ft(V),U.reloadedState=V}else if(!D&&x.workflowState){const V=JSON.parse(x.workflowState);U.layouts=Object.values(V.layouts||{}).map(ut=>ut.layout),await mt(V),await Ft(V),U.reloadedState=V}else U.layouts=We(U.transaction,U.workflow);return U.renderableContextService=new me(U.layouts),U.delayWorkflowStateSync=!0,this.initialized=!0,this.experienceOptions=U,{experienceOptions:U,index:y,options:x}}),u=await Promise.all(w);P.setMap("transactionOwnerIds",C);const m=u.sort((f,p)=>f.index-p.index).map(async f=>{const{experienceOptions:p,options:I}=f,D=new jt(this,p);return await D.getWorkflowManager().getInitializationPromise(),I.type!=="transaction"&&this.customer&&await D.attachCustomerDetails({email:this.customer.emailAddress}),D}),Q=await Promise.all(m);return Q.forEach(f=>f.getWorkflowManager().setWorkflowStateSyncEnabled(!0)),Q}async initFromIntegrationProduct(t){var s;if(t==="")throw new b("No integration product ID provided.");const A=await v.getShadowGraphqlClient().mutate({mutation:qA,variables:{integrationProductId:t,claim:!0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!A.data||!A.data.transactionCreate)throw new b("Failed to create transaction!");const a=A.data.transactionCreate;if(!a.product)throw new b("Failed to create transaction, product not available.");this.currencyCode=(s=a.product.partner)==null?void 0:s.currencyCode;const i=P.getMap("transactionOwnerIds")||new Map;i.set(a.id,a.transactionOwnerId),P.setMap("transactionOwnerIds",i),this.experienceOptions={product:a.product,transaction:a,layouts:[],stateMutationFunc:async o=>this.updateTransactionState({...o,context:{transactionOwnerId:a.transactionOwnerId}})},this.initialized=!0}async initFromTransaction(t,e=!1){var o,r,c,l;if(t==="")throw new b("No transaction ID provided.");const A=v.getShadowGraphqlClient(),a=async()=>{var B,h;const d=(B=(await A.query({query:Ce,variables:{ids:[t]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:B.transactions[0];if(!d)throw new b("Failed to read transaction.");if(!d.product)throw new b("Failed to load transaction, product not available.");this.currencyCode=(h=d.product.partner)==null?void 0:h.currencyCode,this.experienceOptions={product:d.product,transaction:d,layouts:[],stateMutationFunc:async()=>{throw new O("State mutation is forbidden in read only mode!")},readOnly:e},this.initialized=!0};if(e)return await a();const i=P.getMap("transactionOwnerIds")||new Map,s=i.get(t);if(s){const d=(o=(await A.query({query:Ce,variables:{ids:[t]},errorPolicy:"all"})).data)==null?void 0:o.transactions[0];if(!d)throw new b("Failed to read transaction.");if(!d.product)throw new b("Failed to load transaction, product not available.");this.currencyCode=(r=d.product.partner)==null?void 0:r.currencyCode,this.experienceOptions={product:d.product,transaction:d,layouts:[],stateMutationFunc:async B=>this.updateTransactionState({...B,context:{transactionOwnerId:s}}),readOnly:e},this.initialized=!0;return}try{const d=(c=(await A.mutate({mutation:Si,variables:{id:t},errorPolicy:"all"})).data)==null?void 0:c.transactionClaim;if(!d)throw new b("Failed to read transaction.");if(!d.product)throw new b("Failed to load transaction, product not available.");this.currencyCode=(l=d.product.partner)==null?void 0:l.currencyCode,d.transactionOwnerId&&(i.set(d.id,d.transactionOwnerId),P.setMap("transactionOwnerIds",i)),this.experienceOptions={product:d.product,transaction:d,layouts:[],stateMutationFunc:async B=>this.updateTransactionState({...B,context:{transactionOwnerId:d.transactionOwnerId}}),readOnly:e},this.initialized=!0}catch{throw new b("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(t,e,A){var a,i,s,o;if(!this.initialized||!this.experienceOptions)throw new b("Cannot launch experience: Not initialized.");if(this.experienceOptions.transaction.workflowId){const r=await Vt(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=r,this.experienceOptions.transaction.workflowState){const l=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(l.layouts).map(g=>g.layout),await mt(l),await Ft(l),this.experienceOptions.reloadedState=l}this.experienceOptions.previewService=A&&A(r),this.experienceOptions.renderableContextService=new me(this.experienceOptions.layouts),(a=this.experienceOptions.product)!=null&&a.modelUrl&&(this.experienceOptions.modelContainer=(i=this.experienceOptions.previewService)==null?void 0:i.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const c=new jt(this,this.experienceOptions);return await c.getWorkflowManager().getInitializationPromise(),c}if(t){const c=(P.getMap("transactionOwnerIds")||new Map).get(this.experienceOptions.transaction.id),l=v.getShadowGraphqlClient().mutate({mutation:Yi,variables:{workflowId:t,id:this.experienceOptions.transaction.id},context:{transactionOwnerId:c}}),g=Vt(t);if(await Promise.all([l,g]),this.experienceOptions.workflow=await g,e){const B=JSON.parse(e);this.experienceOptions.layouts=Object.values(B.layouts).map(h=>h.layout),await mt(B),await Ft(B),this.experienceOptions.reloadedState=B}else this.experienceOptions.layouts=We(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=A&&A(await g),this.experienceOptions.renderableContextService=new me(this.experienceOptions.layouts),(s=this.experienceOptions.product)!=null&&s.modelUrl&&(this.experienceOptions.modelContainer=(o=this.experienceOptions.previewService)==null?void 0:o.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const d=new jt(this,this.experienceOptions);return await d.getWorkflowManager().getInitializationPromise(),d}throw new b("No workflow ID provided.")}getPreviewService(){var t;return(t=this.experienceOptions)==null?void 0:t.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new b("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new b("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}storeCustomer(t){const e=P.getMap("partnerCustomerIds")||new Map;e.set(t.partner.id,t.id),P.setMap("partnerCustomerIds",e)}async getIntegrationProductById(t){var i,s;const a=(i=(await v.getShadowGraphqlClient().query({query:Ni,variables:{ids:[t]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:i.integrationProducts;if(!a||a.length===0||!((s=a[0])!=null&&s.id))throw new Error("Integration product not found.");return new gA(a[0])}async getIntegrationProductFromExternalIds(t,e){var s;const i=(s=(await v.getShadowGraphqlClient().query({query:Ri,variables:{externalProductId:e,externalIntegrationId:t},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:s.integrationProductFromExternalIds;if(!(i!=null&&i.id))throw new Error("Integration product not found.");return new gA(i)}async getIntegrationProduct(t){return t.type==="integration"?this.getIntegrationProductById(t.integrationProductId):this.getIntegrationProductFromExternalIds(t.externalIntegrationId,t.externalProductId)}async getShareActionsForTransaction(t){const A=(P.getMap("transactionOwnerIds")||new Map).get(t)||void 0,a=await v.getShadowGraphqlClient().query({query:vi,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t},context:{transactionOwnerId:A}});if(!a.data.transactions||a.data.transactions.length!==1)throw new Error(`Failed to fetch share actions for transaction: ${t}`);return a.data.transactions[0].transactionShareActions}}class pr{getClient(){return this.client??{}}getWorkflowExperience(){return{}}setClient(t){this.client=t}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}async reset(){}updateStateWithServer(t){}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(t){}addPoller(t){}addConfirmCallback(t){}addEditedCallback(t){}addElementsCallback(t){}addInformationResultCallback(t){}addInitCallback(t){}addMakingAdjustmentsCallback(t){}addMandatoryCallback(t){}addMetadataCallback(t){}addSelectionCallback(t){}addStepSpecificStorageCallback(t,e){}addStorageCallback(t){}getCommandDispatcher(){return t=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getProfanities(){return[]}getRegionElements(t){return[]}getSerializedStep(t,e){}getStepSpecificServices(t){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(t){}markUpdateCompleted(t){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}getStepSelections(){return{}}setCurrentAdjustingStepId(t){}setEditedStatus(t,e){}setInformationResults(t){}setMandatoryFulfilled(t,e){}async setSelectionsAndElements(t,e,A){}toggleDesignConfirmed(){}updateMetadata(t,e){}async updateStorage(t,e){}injectIntoPreviewService(t){return Promise.resolve()}ejectFromPreviewService(){}setWorkflowStateSyncEnabled(t){}async updateTransactionShareActions(){}addValidationCallback(t){}setStepError(t,e,A){}getStepErrors(t){}getValidationErrors(){return{steps:new Map}}async updateTransactionStakeholders(){}getStepTags(t){return[]}}var kn=(n=>(n.SelectFrame="SelectFrame",n.SelectImage="SelectImage",n.Position="Position",n))(kn||{});class bn extends at{constructor(t,e,A){var a;super(t,e,A),this.frameService=(a=this.manager.getStepSpecificServices(this.getId()))==null?void 0:a.frameService}selectVariant(t){const e=this.manager.getRegionElements(this.step.stepName);return ct.selectVariant(this.step,t.getResource(),e,this.manager,A=>this.setUpdateState(A))}onFrameDataChanged(t){this.frameService&&this.frameService.onFrameDataChanged(e=>{e&&t(e)})}async selectImage(t,e=!0,A=!0){var a;if(await ct.selectImage(this.step,t,this.manager,A),e){const i=((a=this.manager.getStepStorage(this.step.stepName))==null?void 0:a.framePatternData)||{};this.manager.updateStorage(this.step.stepName,{framePatternData:{...i,originalAssetKey:t.key,backgroundRemovedAssetKey:void 0,useOriginalAsset:void 0}})}}async canUseBackgroundRemover(){return this.manager.getClient().canUseAddon(Se.BackgroundRemover)}async canRemoveBackground(){var t,e,A,a;return await this.canUseBackgroundRemover()&&this.hasOriginalImageSelection()&&!!((e=(t=this.frameService)==null?void 0:t.getImageData())!=null&&e.src)&&!((a=(A=this.frameService)==null?void 0:A.getImageData())!=null&&a.svg)}async removeBackgroundFromImageSelection(t=!0){var i;if(!await this.canUseBackgroundRemover())throw new Error("The current Integration does not have access to the Background Remover. Please call canUseBackgroundRemover to ensure you disable this feature when appropriate.");const e=await this.getOriginalImageSelection();if(!e)throw new Error("You must supply an image selection before attempting to remove the background.");const A=await T.removeBackgroundFromAsset(e);t&&await ct.selectImage(this.step,A,this.manager,!1);const a=((i=this.manager.getStepStorage(this.step.stepName))==null?void 0:i.framePatternData)||{};return this.manager.updateStorage(this.step.stepName,{framePatternData:{...a,backgroundRemovedAssetKey:A.key,useOriginalAsset:!t}}),A}changeColors(t){ct.changeColors(this.step,this.manager,t)}getImageData(){if(this.frameService)return this.frameService.getImageData()}async getColorOption(){return this.step.data.colorOption}getAvailableColors(){return this.step.data.colorPickerEnabled?ct.availableColors(this.step,this.manager):Promise.resolve([])}isColorPickerEnabled(){return this.step.data.colorPickerEnabled??!1}async getOriginalImageColors(){const t=this.getImageData();return t!=null&&t.svg?(await ot(t.svg)).colors:void 0}getMaxAllowedColors(){return this.step.data.maxColors}getUniqueColorCount(){return ct.getUniqueColorCount(this.step,this.manager)}getCurrentFrameStep(t,e,A,a){return a&&a.length>1&&t===void 0?"SelectFrame":e||A||this.getImageData()?"Position":"SelectImage"}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}getWhitelistedExtensions(){return[...this.step.data.whitelistedExtensions,...this.step.data.whitelistedExtensions.includes(".jpg")?[".jpeg"]:[]]}async getOriginalImageSelection(){var e,A;const t=(A=(e=this.manager.getStepStorage(this.step.stepName))==null?void 0:e.framePatternData)==null?void 0:A.originalAssetKey;if(t)return T.getLocalOrFromServer(t)}async getBackgroundRemovedImageSelection(){var e,A;const t=(A=(e=this.manager.getStepStorage(this.step.stepName))==null?void 0:e.framePatternData)==null?void 0:A.backgroundRemovedAssetKey;if(t)return T.getLocalOrFromServer(t)}hasOriginalImageSelection(){var t,e;return!!((e=(t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.framePatternData)!=null&&e.originalAssetKey)}hasBackgroundRemovedImageSelection(){var t,e;return!!((e=(t=this.getFrameStepStorage())==null?void 0:t.framePatternData)!=null&&e.backgroundRemovedAssetKey)}getUseOriginalImageSelection(){var t,e;return((e=(t=this.getFrameStepStorage())==null?void 0:t.framePatternData)==null?void 0:e.useOriginalAsset)??!1}async setUseOriginalImageSelection(t){var a;const e=((a=this.getFrameStepStorage())==null?void 0:a.framePatternData)||{};if(e.useOriginalAsset===t)return;const A=await this.getOriginalImageSelection();if(!A)throw new Error("You must provide an image selection before calling setUseOriginalImageSelection");if(t)await this.selectImage(A,!1,!1);else{const i=await this.getBackgroundRemovedImageSelection();if(!i)throw new Error("You must call removeBackgroundFromImageSelection before attempting to apply the image.");await this.selectImage(i,!1,!1)}this.manager.updateStorage(this.step.stepName,{framePatternData:{...e,useOriginalAsset:t}})}getFrameStepStorage(){return this.manager.getStepStorage(this.step.stepName)}}exports.AddonHandle=Se;exports.ArrayInput=ar;exports.AspectType=st;exports.AssetNotFoundError=dt;exports.AssetType=qt;exports.BringForwardCommand=vs;exports.BringToBackCommand=Ps;exports.BringToFrontCommand=Ys;exports.CanvasCommand=J;exports.CollectionProduct=pe;exports.ColorOptionGlobalPropertyHandle=lA;exports.CommandContext=ja;exports.ConversionDataType=Ba;exports.ConversionLocation=da;exports.CreateElementCommand=j;exports.CreateLayoutCommand=MA;exports.DeleteElementCommand=Ct;exports.DigitalContentStepHandle=En;exports.FileUploadGlobalPropertyHandle=Mn;exports.FlowExecutionNodeResult=Kt;exports.FlowExecutionResult=Nn;exports.FlowService=vn;exports.FontAlignmentCommand=Xa;exports.FontColorCommand=Va;exports.FontSizeCommand=Wa;exports.FontSourceCommand=sA;exports.FrameService=$a;exports.FrameStep=kn;exports.FrameStepHandle=bn;exports.GlobalPropertyHandle=ke;exports.GroupCommand=G;exports.IllustrationStepHandle=ln;exports.InformationMessageType=de;exports.InformationStepHandle=un;exports.IntegrationProduct=gA;exports.IntegrationType=la;exports.LayoutElementFactory=Rs;exports.LayoutElementType=R;exports.LayoutNotFoundError=X;exports.LayoutRenderingPurpose=vt;exports.MaterialStepHandle=gn;exports.MisconfigurationError=_t;exports.MockWorkflowManager=pr;exports.ModelStepHandle=dn;exports.ModuleStepHandle=mn;exports.MoveCommand=Is;exports.ObjectInput=JA;exports.ObjectInputType=Rn;exports.OptionGlobalPropertyHandle=UA;exports.OptionNotFoundError=$t;exports.ParseError=Mt;exports.PictureStepHandle=Bn;exports.ProductCameraRig=ga;exports.ProductCollection=xn;exports.ProductWorkflow=Pt;exports.PromiseCache=Rt;exports.PromiseQueue=fA;exports.QuestionStepHandle=hn;exports.QueueablePromise=mA;exports.ResizeCommand=Fs;exports.ResourceNotFoundError=Nt;exports.RotateCommand=Ds;exports.ScaleAxis=W;exports.SendBackwardsCommand=Ns;exports.ShapeStepHandle=Cn;exports.SpiffCommerceClient=Hn;exports.StakeholderType=Zt;exports.StepAspectType=ra;exports.StepHandle=at;exports.StepType=M;exports.TextAlgorithm=pt;exports.TextChangeCommand=qa;exports.TextGlobalPropertyHandle=Sn;exports.TextInput=Ar;exports.TextStepHandle=wn;exports.TransactionShareActionType=ca;exports.Transform=Pn;exports.TransformCollection=Yn;exports.UnhandledBehaviorError=O;exports.UnitOfMeasurement=ha;exports.UpdateImageSourceCommand=Ss;exports.Variant=it;exports.WorkflowExperienceEventType=Dn;exports.WorkflowExperienceImpl=jt;exports.assetService=T;exports.browserColorToHex=Ra;exports.cmPerPixel=cs;exports.createDesign=In;exports.currentDirection=ss;exports.dataUrlFromExternalUrl=_n;exports.designService=Qe;exports.determineCorrectFontSizeAndLines=Xt;exports.digitalContentStepService=SA;exports.fetchAsString=tt;exports.findAngle=_i;exports.findElement=L;exports.findPmsColors=ji;exports.frameDataCache=St;exports.frameStepService=ct;exports.generate=H;exports.generateCommands=Fn;exports.generateSVGWithUnknownColors=ot;exports.generateStateFromDesignInputSteps=Yo;exports.getAttributesFromArrayBuffer=oe;exports.getAxisAlignedBoundingBox=$i;exports.getBoundedOffsets=Za;exports.getElementVertices=os;exports.getFrameData=le;exports.getNEPoint=ns;exports.getNWPoint=as;exports.getPointOfRotation=As;exports.getSEPoint=is;exports.getSvgElement=Re;exports.getTrueCoordinates=es;exports.getWorkflow=Vt;exports.getWorkflows=OA;exports.graphQlManager=v;exports.illustrationStepService=Wt;exports.isCloseToValue=ts;exports.loadFont=Ut;exports.matchHexToPms=Oi;exports.materialStepService=xA;exports.mmPerPixel=rs;exports.modelStepService=YA;exports.moduleStepService=PA;exports.optionService=_;exports.patternImageDataCache=lt;exports.persistenceService=P;exports.pictureStepService=vA;exports.pmsToRgb=Ji;exports.questionStepService=NA;exports.registerFetchImplementation=Xn;exports.registerWindowImplementation=Wn;exports.rehydrateSerializedLayout=mt;exports.rgbToPms=Na;exports.rotateAroundPoint=zt;exports.sanitizeSvgTree=Ne;exports.setBearerAuthenticationToken=pa;exports.setCanvasModule=wA;exports.shapeStepService=xt;exports.shortenUrl=tn;exports.spiffCoreConfiguration=nt;exports.stepAspectValuesToDesignInputSteps=xo;exports.svgColorValueToDefinition=nA;exports.svgStringDimensions=pA;exports.svgToDataUrl=hA;exports.textStepService=Z;exports.toast=An;exports.xmlSerializer=ne;
3335
+ `,Ft=async n=>{var t;for(const e in n.layouts){const A=n.layouts[e].elements.filter(i=>i.type===R.Illustration);for(let i=0;i<A.length;++i){const s=A[i];s.src&&s.svg&&(s.cachedObjectURL=await ee(s.svg))}const a=n.layouts[e].elements.filter(i=>i.type===R.Textbox);for(let i=0;i<a.length;++i){const s=a[i];(t=s.fontData)!=null&&t.assetUrl&&await Ut(s.fontData.assetUrl)}}},mr=async(n,t)=>{var a;const e=await v.getShadowGraphqlClient().query({query:hr(((a=t==null?void 0:t.assets)==null?void 0:a.metadata)||!1),errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:n}});if(e.error)throw e.error;if(e.errors)throw e.errors.forEach(i=>console.error(i)),new Error("Unable to read workflows. Consult GraphQL errors.");const A=e.data.workflows;if(A===void 0||A.length!==n.length)throw new Error(`Unable to read workflows: ${e.errors??"Length mismatch in response"}`);return A.forEach(i=>{i.steps.forEach(s=>{var o,r,c;delete s.data.__typename,(o=s.option)!=null&&o.id&&((r=s.option.defaultVariant)!=null&&r.asset&&T.cacheAsset(s.option.defaultVariant.asset),s.option.colorProfile&&T.cacheAsset(s.option.colorProfile),(c=s.option.variants)==null||c.forEach(l=>{l.asset&&T.cacheAsset(l.asset),l.thumbnail&&T.cacheAsset(l.thumbnail),l.material&&T.cacheMaterial(l.material)}),Rt.set({id:s.option.id},Promise.resolve(s.option)))}),i.finalizeStepConfig||(i.finalizeStepConfig={}),i.finalizeStepConfig.termsMarkdown=i.partner.termsMarkdown}),A},fr=async(n,t)=>{const A=(await t).find(a=>a.id===n);if(!A)throw new Error(`Workflow not found: ${n}`);return A},OA=async(n,t)=>{const e=n.map(o=>Rt.get({id:o,options:t})),A=n.filter((o,r)=>e[r]===void 0);if(A.length===0)return Promise.all(e);const a=mr(A,t),i=A.map(o=>Rt.set({id:o,options:t},fr(o,a))),s=e.filter(o=>o!==void 0);return await Promise.all(s.concat(i))},Vt=async(n,t)=>(await OA([n],t))[0],Qr=n=>n.sort((t,e)=>t.index-e.index).map(t=>({id:H(),panelId:t.name,name:t.name,index:t.index,createdAt:new Date,updatedAt:new Date,transparentBackground:t.transparentBackground,height:t.height,width:t.width,previewRegion:t.previewRegion,useEditableArea:t.useEditableArea,editableArea:t.editableArea})),We=(n,t)=>{const e=n.workflowState,A=e?JSON.parse(e):void 0;return A?Object.values(A.layouts).map(a=>a.layout):Qr(t.panels)};class Hn{constructor(t){this.activeIntegration=void 0,this.updateTransactionState=async e=>{try{return v.getShadowGraphqlClient().mutate({...e,mutation:xi})}catch(A){throw console.error(A),new b("Critical - Unable to synchronize workflow state with server.")}},this.initialized=!1,this.options=t,this.options.applicationKey&&ai(this.options.applicationKey),console.debug("------------------------"),console.debug("Spiff Commerce Core SDK"),console.debug("Version: 25.0.1"),console.debug(`Application Key Provided: ${!!this.options.applicationKey}`),console.debug("------------------------")}configureUrls(t,e,A){nt.setHubUrl(t),nt.setServerUrl(e),nt.setServicesApiUrl(A),this.options.applicationKey&&this.getIntegration()}configure(t){nt.setHubUrl(t.hubUrl),nt.setServerUrl(t.serverUrl),nt.setServicesApiUrl(t.servicesApiUrl),this.marketplaceThemeInstallId=t.marketplaceThemeInstallId,this.marketplaceThemeInstallConfigurationId=t.marketplaceThemeInstallConfigurationId,t.bearerAuthenticationToken&&pa(t.bearerAuthenticationToken),this.options.applicationKey&&this.getIntegration()}getAssetManager(){return T}getCurrencyCode(){if(this.currencyCode===void 0)throw new Error("No currency code set.");return this.currencyCode}getFlowService(){if(!ni())throw new Error("Application key required to use Flow Service.");return new vn}async getIntegration(){if(this.activeIntegration)return this.activeIntegration;if(!this.options.applicationKey)throw new Error("Cannot get current Integration without specifying an Application Key.");const t=async()=>(await v.getShadowGraphqlClient().query({query:yi,errorPolicy:"all",fetchPolicy:"no-cache"})).data.currentIntegration;return this.activeIntegration=t(),this.activeIntegration}async canUseAddon(t){var e;try{return((e=(await this.getIntegration()).partner.activeAddons)==null?void 0:e.includes(t))??!1}catch(A){return console.error(A),!1}}async authenticateBundleFromLocalStorage(t){var a,i;const e=P.getMap("bundleOwnerIds");if(e!=null&&e.has(t))return Promise.resolve({success:!0,stakeholderType:Zt.Owner});const A=P.getMap("bundlePartnerIds")||new Map;if(A.has(t)){const s=A.get(t),r=(P.getMap("partnerCustomerIds")||new Map).get(s);if(r&&await this.authenticateCustomerId(r)){const l=(i=(a=this.customer)==null?void 0:a.bundleStakeholders)==null?void 0:i.find(g=>{var d;return((d=g.bundle)==null?void 0:d.id)===t});if(l)return Promise.resolve({success:!0,stakeholderType:l.type})}}return Promise.resolve({success:!1})}async authenticateTransactionFromLocalStorage(t){var l,g,d,B,h,C;const e=v.getShadowGraphqlClient(),A=await e.query({query:Cr,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t}});if(!A.data.transactions||A.data.transactions.length===0)throw new Error(`Transaction not found: ${t}`);const a=A.data.transactions[0];if(!((g=(l=a.product)==null?void 0:l.partner)==null?void 0:g.id))throw new Error(`Unable to read transaction: ${t}`);if(a.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const s=P.getMap("transactionOwnerIds");if(s!=null&&s.has(t))return Promise.resolve({success:!0,stakeholderType:Zt.Owner});const o=P.getMap("transactionCustomerIds");if(o!=null&&o.has(t)){const w=o.get(t);if(w&&await this.authenticateCustomerId(w)){const E=((B=(d=this.customer)==null?void 0:d.bundleStakeholders)==null?void 0:B.find(m=>{var Q,f;return(f=(Q=m.bundle)==null?void 0:Q.transactions)==null?void 0:f.some(p=>p.id===t)}))||((C=(h=this.customer)==null?void 0:h.stakeholders)==null?void 0:C.find(m=>{var Q;return((Q=m.transaction)==null?void 0:Q.id)===t}));if(E)return Promise.resolve({success:!0,stakeholderType:E.type})}}const c=(await e.query({query:wr,errorPolicy:"all",variables:{id:a.workflowId}})).data.workflow;if(!c)throw new Error(`Unable to read workflow: ${a.workflowId}`);return Promise.resolve({success:!1,theme:c.overrideTheme,customLogoLink:a.customLogoLink})}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(t){const e=P.getMap("transactionCustomerIds");e!=null&&e.has(t)&&(e.delete(t),P.setMap("transactionCustomerIds",e))}getStakeholderTypeForTransaction(t){var A,a;const e=(a=(A=this.customer)==null?void 0:A.stakeholders)==null?void 0:a.find(i=>{var s;return((s=i.transaction)==null?void 0:s.id)===t});if(e)return e.type}async getOrCreateCustomer(t){var s;this.customer=void 0;const e=v.getShadowGraphqlClient(),a=(await e.query({query:nr,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;if(!a.id){const r=(s=(await e.mutate({mutation:ir,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:t}}})).data)==null?void 0:s.customerCreate;if(!r)throw new Error("Unable to create customer.");return this.storeCustomer(r),this.customer=r,{customer:r,isAuthenticated:!1}}this.storeCustomer(a);const i=await this.authenticateCustomerId(a.id);return{customer:this.customer||a,isAuthenticated:i}}getCustomer(){return this.customer}async authenticateCustomerId(t){var o;const e=v.getShadowGraphqlClient(),A=P.getMap("customerTokens");if(!(A!=null&&A.has(t)))return!1;const a=A.get(t);if(!a)return!1;const s=(o=(await e.mutate({mutation:sr,errorPolicy:"all",fetchPolicy:"no-cache",variables:{loginToken:a}})).data)==null?void 0:o.customerAuthenticate;return s?(this.storeCustomer(s),WA(a),this.customer=s,!0):!1}async generateVerificationCode(t){await v.getShadowGraphqlClient().mutate({mutation:or,variables:{emailAddress:t}})}async verifyCode(t,e){var i,s;const a=(i=(await v.getShadowGraphqlClient().mutate({mutation:rr,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t,verificationCode:e}})).data)==null?void 0:i.customerVerifyCode;if(a!=null&&a.loginToken){if(!((s=a.partner)!=null&&s.id))throw new Error(`Unable to find customer: ${t}`);const o=P.getMap("customerTokens")||new Map;return o.set(a.id,a.loginToken),P.setMap("customerTokens",o),this.storeCustomer(a),WA(a.loginToken),this.customer={...a,loginToken:void 0},!0}return!1}async getCustomerMetafields(){var e;if(!((e=this.customer)!=null&&e.id))throw new Error("Customer must be logged in before calling this function.");return(await v.getShadowGraphqlClient().query({query:cr,fetchPolicy:"no-cache",variables:{id:this.customer.id}})).data.metafields}async getNewBundle(t,e,A){var c,l,g,d,B;const i=(g=(await v.getShadowGraphqlClient().mutate({mutation:ko(((l=(c=A==null?void 0:A.graphql)==null?void 0:c.productCollection)==null?void 0:l.eagerFetchProducts)||!1),variables:{collectionId:t,initialMetadata:e?Object.entries(e).map((h,C)=>({key:h[0],value:h[1]})):void 0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},fetchPolicy:"no-cache"})).data)==null?void 0:g.bundleCreate;if(!(i!=null&&i.id))throw new Error("Unable to create bundle");const s=P.getMap("bundlePartnerIds")||new Map;s.set(i.id,i.partner.id),P.setMap("bundlePartnerIds",s);const o=P.getMap("bundleOwnerIds")||new Map;o.set(i.id,i.bundleOwnerId),P.setMap("bundleOwnerIds",o);const r=new Ve(this,i,void 0,void 0,i.bundleOwnerId,{eagerFetchProducts:(B=(d=A==null?void 0:A.graphql)==null?void 0:d.productCollection)==null?void 0:B.eagerFetchProducts});return await r.getInitializationPromise(),r}async getExistingBundle(t,e,A,a){var w,u,E,m,Q,f,p,I,D,y,Y;const i=P.getMap("bundleOwnerIds"),s=i==null?void 0:i.get(t),r=((w=Object.entries(localStorage).find(([N,x])=>N.startsWith("CognitoIdentityServiceProvider")&&N.endsWith("idToken")))==null?void 0:w[0])||"",c=localStorage.getItem(r),l={};c&&!Me(c)&&(l.Authorization=`Bearer ${c}`);const g={bundleOwnerId:s,...l,...(u=a==null?void 0:a.graphql)==null?void 0:u.additionalHeaders},d=await v.getShadowGraphqlClient().query({query:vo(((m=(E=a==null?void 0:a.graphql)==null?void 0:E.productCollection)==null?void 0:m.eagerFetchProducts)||!1),variables:{id:t},fetchPolicy:"no-cache",context:{headers:g}});if(!((Q=d.data)!=null&&Q.bundles)||((f=d.data)==null?void 0:f.bundles.length)===0||!((p=d.data)!=null&&p.bundles[0]))throw new Error(`Unable to find bundle: ${t}`);const B=(I=d.data)==null?void 0:I.bundles[0],h=P.getMap("bundlePartnerIds")||new Map;h.set(B.id,B.partner.id),P.setMap("bundlePartnerIds",h);const C=new Ve(this,B,e,A,s,{additionalHeaders:(D=a==null?void 0:a.graphql)==null?void 0:D.additionalHeaders,eagerFetchProducts:(Y=(y=a==null?void 0:a.graphql)==null?void 0:y.productCollection)==null?void 0:Y.eagerFetchProducts});return await C.getInitializationPromise(),C}async duplicateBundle(t,e,A,a){var w,u,E,m,Q,f,p,I;const i=(w=P.getMap("bundleOwnerIds"))==null?void 0:w.get(t),o=((u=Object.entries(localStorage).find(([D,y])=>D.startsWith("CognitoIdentityServiceProvider")&&D.endsWith("idToken")))==null?void 0:u[0])||"",r=localStorage.getItem(o),c={};r&&!Me(r)&&(c.Authorization=`Bearer ${r}`);const l={bundleOwnerId:i,...c,...(E=a==null?void 0:a.graphql)==null?void 0:E.additionalHeaders},d=(f=(await v.getShadowGraphqlClient().mutate({mutation:bo(((Q=(m=a==null?void 0:a.graphql)==null?void 0:m.productCollection)==null?void 0:Q.eagerFetchProducts)||!1),variables:{id:t,template:e,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId,duplicateTransactions:A},context:{headers:l},fetchPolicy:"no-cache"})).data)==null?void 0:f.bundleDuplicate;if(!(d!=null&&d.id))throw new Error("Unable to duplicate bundle");const B=P.getMap("bundlePartnerIds")||new Map;B.set(d.id,d.partner.id),P.setMap("bundlePartnerIds",B);const h=P.getMap("bundleOwnerIds")||new Map;h.set(d.id,d.bundleOwnerId),P.setMap("bundleOwnerIds",h);const C=new Ve(this,d,void 0,void 0,d.bundleOwnerId,{eagerFetchProducts:(I=(p=a==null?void 0:a.graphql)==null?void 0:p.productCollection)==null?void 0:I.eagerFetchProducts});return await C.getInitializationPromise(),C}async getBundlesForCustomer(t){var i;if(!((i=this.customer)!=null&&i.id))throw new Error("Customer not authenticated.");const{includeMetadata:e,...A}=t;return(await v.getShadowGraphqlClient().query({query:Wo(e??!1),variables:{...A,id:this.customer.id},fetchPolicy:"no-cache"})).data.customerBundlesFeed}async getBundleStakeholders(){var i;if(!this.customer)throw new Error("Customer not authenticated.");const t=await v.getShadowGraphqlClient().query({query:Ro,variables:{id:this.customer.id},fetchPolicy:"no-cache"});if(!((i=t.data)!=null&&i.customers)||t.data.customers.length===0)throw new Error("Unable to find customer.");const A=t.data.customers[0].bundleStakeholders||[],a=P.getMap("bundlePartnerIds")||new Map;return A.forEach(s=>{var o,r;(o=s.bundle)!=null&&o.id&&((r=s.bundle.partner)!=null&&r.id)&&a.set(s.bundle.id,s.bundle.partner.id)}),P.setMap("bundlePartnerIds",a),A}async getStepTags(t){const e=v.getShadowGraphqlClient();let A={};const a=t.steps.map(s=>`${t.id}_${s.stepName}`),i=await e.query({query:Er,fetchPolicy:"no-cache",variables:{entityIds:a}});for(const[s,o]of t.steps.entries()){const r=i.data.tagsMany[s];A={...A,[o.stepName]:r.map(c=>c.name)}}return A}async getWorkflowExperience(t,e,A,a){var d,B,h,C,w;if(!a)return await this.getWorkflowExperienceDeprecated(t,e,A);const i=async()=>{var E,m,Q;const u=v.getShadowGraphqlClient();if(a.type==="transaction"){const{transactionId:f,readOnly:p}=a,I=await u.query({query:Ce,variables:{ids:[f]},errorPolicy:"all",fetchPolicy:"no-cache"});if(!((E=I.data)!=null&&E.transactions)||I.data.transactions.length===0)throw new b("Existing transaction not found.");const D=(m=I.data)==null?void 0:m.transactions[0];if(!D.workflowId)throw new b("Existing transaction has no workflow ID.");const y=await Vt(D.workflowId);if(!D.product)throw new b("Failed to load transaction, product not available.");!this.activeIntegration&&((Q=D.integrationProduct)!=null&&Q.integration)&&(this.activeIntegration=Promise.resolve(D.integrationProduct.integration));const Y=await this.getStepTags(y);return{transaction:D,workflow:y,stepTags:Y,readOnly:p}}if(a.type==="integration"||a.type==="external"){const f=async()=>{const Y=a.type==="integration"?{integrationProductId:a.integrationProductId}:{externalIntegrationId:a.externalIntegrationId,externalProductId:a.externalProductId},N=await u.mutate({mutation:qA,variables:{...Y,workflowId:a.workflowId,designName:a.designName,claim:!0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!N.data||!N.data.transactionCreate)throw new b("Failed to create transaction!");const x=N.data.transactionCreate;if(!x.product)throw new b("Failed to create transaction, product not available.");return x},p=Vt(a.workflowId,a==null?void 0:a.graphql),[I,D]=await Promise.all([f(),p]),y=await this.getStepTags(D);return{transaction:I,workflow:D,stepTags:y}}throw new b("No workflow ID provided.")},{transaction:s,workflow:o,stepTags:r,readOnly:c}=await i();this.currencyCode=(d=s.product.partner)==null?void 0:d.currencyCode;const l={product:s.product,transaction:s,stepTags:r,layouts:[],singleVariantsRenderable:(B=a==null?void 0:a.workflowConfiguration)==null?void 0:B.singleVariantsRenderable,stateMutationFunc:c?async()=>{throw new O("State mutation is forbidden in read only mode!")}:async u=>{const m=(P.getMap("transactionOwnerIds")||new Map).get(s.id)||void 0;return this.updateTransactionState({...u,context:{transactionOwnerId:m}})},readOnly:c,workflow:o};if(a.type==="transaction"&&s.workflowState){const u=JSON.parse(s.workflowState);l.layouts=Object.values(u.layouts).map(E=>E.layout),await mt(u),await Ft(u),l.reloadedState=u}else if(!c&&a.workflowState){const u=JSON.parse(a.workflowState);l.layouts=Object.values(u.layouts).map(E=>E.layout),await mt(u),await Ft(u),l.reloadedState=u}else l.layouts=We(l.transaction,l.workflow);if(l.renderableContextService=new me(l.layouts),a.previewService?(l.previewService=a.previewService,(h=l.product)!=null&&h.modelUrl&&(l.modelContainer=l.previewService.loadModel({model:l.product.modelUrl,contextService:l.renderableContextService}))):(l.previewService=A&&A(o),(C=l.product)!=null&&C.modelUrl&&(l.modelContainer=(w=l.previewService)==null?void 0:w.loadModel({model:l.product.modelUrl,contextService:l.renderableContextService}))),a.type!=="transaction"){const u=P.getMap("transactionOwnerIds")||new Map;u.set(s.id,s.transactionOwnerId),P.setMap("transactionOwnerIds",u)}else l.isReloadedTransaction=!0;this.initialized=!0,this.experienceOptions=l;const g=new jt(this,l);return await g.getWorkflowManager().getInitializationPromise(),a.type!=="transaction"&&this.customer&&await g.attachCustomerDetails({email:this.customer.emailAddress}),g}async getWorkflowExperiences(t,e){if(t.length===0)throw new b("No options provided!");const A=v.getShadowGraphqlClient(),a=async f=>{var y,Y,N;if(f.length===0)return[];const p=f.map(x=>x.option.transactionId),I=await A.query({query:Ce,variables:{ids:p},errorPolicy:"all",fetchPolicy:"no-cache"}),D=I.data.transactions;if(D.length!==f.length){const x=((Y=(y=I.errors)==null?void 0:y[0])==null?void 0:Y.message)||"Unknown error";throw new b(`Not all transactions were found: ${x}`)}return!this.activeIntegration&&((N=D[0].integrationProduct)!=null&&N.integration)&&(this.activeIntegration=Promise.resolve(D[0].integrationProduct.integration)),D.map((x,z)=>{var U;return{transaction:x,workflowId:x.workflowId,readOnly:((U=f.find(At=>At.option.transactionId===x.id))==null?void 0:U.option.readOnly)??!1,index:f[z].index}})},i=async f=>{var D,y,Y;if(f.length===0)return[];const p=await A.mutate({mutation:Mi,variables:{inputs:f.map(N=>({integrationProductId:N.option.type==="integration"?N.option.integrationProductId:void 0,externalIntegrationId:N.option.type==="external"?N.option.externalIntegrationId:void 0,externalProductId:N.option.type==="external"?N.option.externalProductId:void 0,workflowId:N.option.workflowId,designName:N.option.designName,claim:!0})),marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache"}),I=(D=p.data)==null?void 0:D.transactionCreateMany;if(!I||I.length===0){const N=((Y=(y=p.errors)==null?void 0:y[0])==null?void 0:Y.message)||"Unknown error";throw new b(`Failed to create transactions: ${N}`)}return I.map((N,x)=>({transaction:N,workflowId:N.workflowId,readOnly:!1,index:f[x].index}))},s=t.map((f,p)=>({option:f,index:p})),o=s.filter(f=>f.option.type==="transaction"),r=s.filter(f=>f.option.type==="integration"||f.option.type==="external"),c=LA(o,10),l=LA(r,10),g=(await Promise.all([...c.map(a),...l.map(i)])).flat(),d=[...new Set(g.map(f=>f.workflowId))],B=await OA(d,e),h=new Map(B.map(f=>[f.id,f])),C=P.getMap("transactionOwnerIds")||new Map,w=g.map(async f=>{var At;const{transaction:p,workflowId:I,readOnly:D,index:y}=f,Y=h.get(I),N=await this.getStepTags(Y),x=t[y];!C.get(p.id)&&p.transactionOwnerId&&C.set(p.id,p.transactionOwnerId);const z=C.get(p.id)||void 0,U={product:p.product,transaction:p,stepTags:N,layouts:[],singleVariantsRenderable:(At=x==null?void 0:x.workflowConfiguration)==null?void 0:At.singleVariantsRenderable,stateMutationFunc:D?async()=>{throw new O("State mutation is forbidden in read only mode!")}:async V=>this.updateTransactionState({...V,context:{transactionOwnerId:z}}),readOnly:D,workflow:Y,isReloadedTransaction:x.type==="transaction"};if(x.type==="transaction"&&p.workflowState){const V=JSON.parse(p.workflowState);U.layouts=Object.values(V.layouts||{}).map(ut=>ut.layout),await mt(V),await Ft(V),U.reloadedState=V}else if(!D&&x.workflowState){const V=JSON.parse(x.workflowState);U.layouts=Object.values(V.layouts||{}).map(ut=>ut.layout),await mt(V),await Ft(V),U.reloadedState=V}else U.layouts=We(U.transaction,U.workflow);return U.renderableContextService=new me(U.layouts),U.delayWorkflowStateSync=!0,this.initialized=!0,this.experienceOptions=U,{experienceOptions:U,index:y,options:x}}),u=await Promise.all(w);P.setMap("transactionOwnerIds",C);const m=u.sort((f,p)=>f.index-p.index).map(async f=>{const{experienceOptions:p,options:I}=f,D=new jt(this,p);return await D.getWorkflowManager().getInitializationPromise(),I.type!=="transaction"&&this.customer&&await D.attachCustomerDetails({email:this.customer.emailAddress}),D}),Q=await Promise.all(m);return Q.forEach(f=>f.getWorkflowManager().setWorkflowStateSyncEnabled(!0)),Q}async initFromIntegrationProduct(t){var s;if(t==="")throw new b("No integration product ID provided.");const A=await v.getShadowGraphqlClient().mutate({mutation:qA,variables:{integrationProductId:t,claim:!0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!A.data||!A.data.transactionCreate)throw new b("Failed to create transaction!");const a=A.data.transactionCreate;if(!a.product)throw new b("Failed to create transaction, product not available.");this.currencyCode=(s=a.product.partner)==null?void 0:s.currencyCode;const i=P.getMap("transactionOwnerIds")||new Map;i.set(a.id,a.transactionOwnerId),P.setMap("transactionOwnerIds",i),this.experienceOptions={product:a.product,transaction:a,layouts:[],stateMutationFunc:async o=>this.updateTransactionState({...o,context:{transactionOwnerId:a.transactionOwnerId}})},this.initialized=!0}async initFromTransaction(t,e=!1){var o,r,c,l;if(t==="")throw new b("No transaction ID provided.");const A=v.getShadowGraphqlClient(),a=async()=>{var B,h;const d=(B=(await A.query({query:Ce,variables:{ids:[t]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:B.transactions[0];if(!d)throw new b("Failed to read transaction.");if(!d.product)throw new b("Failed to load transaction, product not available.");this.currencyCode=(h=d.product.partner)==null?void 0:h.currencyCode,this.experienceOptions={product:d.product,transaction:d,layouts:[],stateMutationFunc:async()=>{throw new O("State mutation is forbidden in read only mode!")},readOnly:e},this.initialized=!0};if(e)return await a();const i=P.getMap("transactionOwnerIds")||new Map,s=i.get(t);if(s){const d=(o=(await A.query({query:Ce,variables:{ids:[t]},errorPolicy:"all"})).data)==null?void 0:o.transactions[0];if(!d)throw new b("Failed to read transaction.");if(!d.product)throw new b("Failed to load transaction, product not available.");this.currencyCode=(r=d.product.partner)==null?void 0:r.currencyCode,this.experienceOptions={product:d.product,transaction:d,layouts:[],stateMutationFunc:async B=>this.updateTransactionState({...B,context:{transactionOwnerId:s}}),readOnly:e},this.initialized=!0;return}try{const d=(c=(await A.mutate({mutation:Si,variables:{id:t},errorPolicy:"all"})).data)==null?void 0:c.transactionClaim;if(!d)throw new b("Failed to read transaction.");if(!d.product)throw new b("Failed to load transaction, product not available.");this.currencyCode=(l=d.product.partner)==null?void 0:l.currencyCode,d.transactionOwnerId&&(i.set(d.id,d.transactionOwnerId),P.setMap("transactionOwnerIds",i)),this.experienceOptions={product:d.product,transaction:d,layouts:[],stateMutationFunc:async B=>this.updateTransactionState({...B,context:{transactionOwnerId:d.transactionOwnerId}}),readOnly:e},this.initialized=!0}catch{throw new b("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(t,e,A){var a,i,s,o;if(!this.initialized||!this.experienceOptions)throw new b("Cannot launch experience: Not initialized.");if(this.experienceOptions.transaction.workflowId){const r=await Vt(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=r,this.experienceOptions.transaction.workflowState){const l=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(l.layouts).map(g=>g.layout),await mt(l),await Ft(l),this.experienceOptions.reloadedState=l}this.experienceOptions.previewService=A&&A(r),this.experienceOptions.renderableContextService=new me(this.experienceOptions.layouts),(a=this.experienceOptions.product)!=null&&a.modelUrl&&(this.experienceOptions.modelContainer=(i=this.experienceOptions.previewService)==null?void 0:i.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const c=new jt(this,this.experienceOptions);return await c.getWorkflowManager().getInitializationPromise(),c}if(t){const c=(P.getMap("transactionOwnerIds")||new Map).get(this.experienceOptions.transaction.id),l=v.getShadowGraphqlClient().mutate({mutation:Yi,variables:{workflowId:t,id:this.experienceOptions.transaction.id},context:{transactionOwnerId:c}}),g=Vt(t);if(await Promise.all([l,g]),this.experienceOptions.workflow=await g,e){const B=JSON.parse(e);this.experienceOptions.layouts=Object.values(B.layouts).map(h=>h.layout),await mt(B),await Ft(B),this.experienceOptions.reloadedState=B}else this.experienceOptions.layouts=We(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=A&&A(await g),this.experienceOptions.renderableContextService=new me(this.experienceOptions.layouts),(s=this.experienceOptions.product)!=null&&s.modelUrl&&(this.experienceOptions.modelContainer=(o=this.experienceOptions.previewService)==null?void 0:o.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const d=new jt(this,this.experienceOptions);return await d.getWorkflowManager().getInitializationPromise(),d}throw new b("No workflow ID provided.")}getPreviewService(){var t;return(t=this.experienceOptions)==null?void 0:t.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new b("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new b("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}storeCustomer(t){const e=P.getMap("partnerCustomerIds")||new Map;e.set(t.partner.id,t.id),P.setMap("partnerCustomerIds",e)}async getIntegrationProductById(t){var i,s;const a=(i=(await v.getShadowGraphqlClient().query({query:Ni,variables:{ids:[t]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:i.integrationProducts;if(!a||a.length===0||!((s=a[0])!=null&&s.id))throw new Error("Integration product not found.");return new gA(a[0])}async getIntegrationProductFromExternalIds(t,e){var s;const i=(s=(await v.getShadowGraphqlClient().query({query:Ri,variables:{externalProductId:e,externalIntegrationId:t},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:s.integrationProductFromExternalIds;if(!(i!=null&&i.id))throw new Error("Integration product not found.");return new gA(i)}async getIntegrationProduct(t){return t.type==="integration"?this.getIntegrationProductById(t.integrationProductId):this.getIntegrationProductFromExternalIds(t.externalIntegrationId,t.externalProductId)}async getShareActionsForTransaction(t){const A=(P.getMap("transactionOwnerIds")||new Map).get(t)||void 0,a=await v.getShadowGraphqlClient().query({query:vi,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t},context:{transactionOwnerId:A}});if(!a.data.transactions||a.data.transactions.length!==1)throw new Error(`Failed to fetch share actions for transaction: ${t}`);return a.data.transactions[0].transactionShareActions}}class pr{getClient(){return this.client??{}}getWorkflowExperience(){return{}}setClient(t){this.client=t}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}async reset(){}updateStateWithServer(t){}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(t){}addPoller(t){}addConfirmCallback(t){}addEditedCallback(t){}addElementsCallback(t){}addInformationResultCallback(t){}addInitCallback(t){}addMakingAdjustmentsCallback(t){}addMandatoryCallback(t){}addMetadataCallback(t){}addSelectionCallback(t){}addStepSpecificStorageCallback(t,e){}addStorageCallback(t){}getCommandDispatcher(){return t=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getProfanities(){return[]}getRegionElements(t){return[]}getSerializedStep(t,e){}getStepSpecificServices(t){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(t){}markUpdateCompleted(t){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}getStepSelections(){return{}}setCurrentAdjustingStepId(t){}setEditedStatus(t,e){}setInformationResults(t){}setMandatoryFulfilled(t,e){}async setSelectionsAndElements(t,e,A){}toggleDesignConfirmed(){}updateMetadata(t,e){}async updateStorage(t,e){}injectIntoPreviewService(t){return Promise.resolve()}ejectFromPreviewService(){}setWorkflowStateSyncEnabled(t){}async updateTransactionShareActions(){}addValidationCallback(t){}setStepError(t,e,A){}getStepErrors(t){}getValidationErrors(){return{steps:new Map}}async updateTransactionStakeholders(){}getStepTags(t){return[]}}var kn=(n=>(n.SelectFrame="SelectFrame",n.SelectImage="SelectImage",n.Position="Position",n))(kn||{});class bn extends at{constructor(t,e,A){var a;super(t,e,A),this.frameService=(a=this.manager.getStepSpecificServices(this.getId()))==null?void 0:a.frameService}selectVariant(t){const e=this.manager.getRegionElements(this.step.stepName);return ct.selectVariant(this.step,t.getResource(),e,this.manager,A=>this.setUpdateState(A))}onFrameDataChanged(t){this.frameService&&this.frameService.onFrameDataChanged(e=>{e&&t(e)})}async selectImage(t,e=!0,A=!0){var a;if(await ct.selectImage(this.step,t,this.manager,A),e){const i=((a=this.manager.getStepStorage(this.step.stepName))==null?void 0:a.framePatternData)||{};this.manager.updateStorage(this.step.stepName,{framePatternData:{...i,originalAssetKey:t.key,backgroundRemovedAssetKey:void 0,useOriginalAsset:void 0}})}}async canUseBackgroundRemover(){return this.manager.getClient().canUseAddon(Se.BackgroundRemover)}async canRemoveBackground(){var t,e,A,a;return await this.canUseBackgroundRemover()&&this.hasOriginalImageSelection()&&!!((e=(t=this.frameService)==null?void 0:t.getImageData())!=null&&e.src)&&!((a=(A=this.frameService)==null?void 0:A.getImageData())!=null&&a.svg)}async removeBackgroundFromImageSelection(t=!0){var i;if(!await this.canUseBackgroundRemover())throw new Error("The current Integration does not have access to the Background Remover. Please call canUseBackgroundRemover to ensure you disable this feature when appropriate.");const e=await this.getOriginalImageSelection();if(!e)throw new Error("You must supply an image selection before attempting to remove the background.");const A=await T.removeBackgroundFromAsset(e);t&&await ct.selectImage(this.step,A,this.manager,!1);const a=((i=this.manager.getStepStorage(this.step.stepName))==null?void 0:i.framePatternData)||{};return this.manager.updateStorage(this.step.stepName,{framePatternData:{...a,backgroundRemovedAssetKey:A.key,useOriginalAsset:!t}}),A}changeColors(t){ct.changeColors(this.step,this.manager,t)}getImageData(){if(this.frameService)return this.frameService.getImageData()}async getColorOption(){return this.step.data.colorOption}getAvailableColors(){return this.step.data.colorPickerEnabled?ct.availableColors(this.step,this.manager):Promise.resolve([])}isColorPickerEnabled(){return this.step.data.colorPickerEnabled??!1}async getOriginalImageColors(){const t=this.getImageData();return t!=null&&t.svg?(await ot(t.svg)).colors:void 0}getMaxAllowedColors(){return this.step.data.maxColors}getUniqueColorCount(){return ct.getUniqueColorCount(this.step,this.manager)}getCurrentFrameStep(t,e,A,a){return a&&a.length>1&&t===void 0?"SelectFrame":e||A||this.getImageData()?"Position":"SelectImage"}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}getWhitelistedExtensions(){return[...this.step.data.whitelistedExtensions,...this.step.data.whitelistedExtensions.includes(".jpg")?[".jpeg"]:[]]}async getOriginalImageSelection(){var e,A;const t=(A=(e=this.manager.getStepStorage(this.step.stepName))==null?void 0:e.framePatternData)==null?void 0:A.originalAssetKey;if(t)return T.getLocalOrFromServer(t)}async getBackgroundRemovedImageSelection(){var e,A;const t=(A=(e=this.manager.getStepStorage(this.step.stepName))==null?void 0:e.framePatternData)==null?void 0:A.backgroundRemovedAssetKey;if(t)return T.getLocalOrFromServer(t)}hasOriginalImageSelection(){var t,e;return!!((e=(t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.framePatternData)!=null&&e.originalAssetKey)}hasBackgroundRemovedImageSelection(){var t,e;return!!((e=(t=this.getFrameStepStorage())==null?void 0:t.framePatternData)!=null&&e.backgroundRemovedAssetKey)}getUseOriginalImageSelection(){var t,e;return((e=(t=this.getFrameStepStorage())==null?void 0:t.framePatternData)==null?void 0:e.useOriginalAsset)??!1}async setUseOriginalImageSelection(t){var a;const e=((a=this.getFrameStepStorage())==null?void 0:a.framePatternData)||{};if(e.useOriginalAsset===t)return;const A=await this.getOriginalImageSelection();if(!A)throw new Error("You must provide an image selection before calling setUseOriginalImageSelection");if(t)await this.selectImage(A,!1,!1);else{const i=await this.getBackgroundRemovedImageSelection();if(!i)throw new Error("You must call removeBackgroundFromImageSelection before attempting to apply the image.");await this.selectImage(i,!1,!1)}this.manager.updateStorage(this.step.stepName,{framePatternData:{...e,useOriginalAsset:t}})}getFrameStepStorage(){return this.manager.getStepStorage(this.step.stepName)}}exports.AddonHandle=Se;exports.ArrayInput=ar;exports.AspectType=st;exports.AssetNotFoundError=dt;exports.AssetType=qt;exports.BringForwardCommand=vs;exports.BringToBackCommand=Ps;exports.BringToFrontCommand=Ys;exports.CanvasCommand=J;exports.CollectionProduct=pe;exports.ColorOptionGlobalPropertyHandle=lA;exports.CommandContext=ja;exports.ConversionDataType=Ba;exports.ConversionLocation=da;exports.CreateElementCommand=j;exports.CreateLayoutCommand=MA;exports.DeleteElementCommand=Ct;exports.DigitalContentStepHandle=En;exports.FileUploadGlobalPropertyHandle=Mn;exports.FlowExecutionNodeResult=Kt;exports.FlowExecutionResult=Nn;exports.FlowService=vn;exports.FontAlignmentCommand=Xa;exports.FontColorCommand=Va;exports.FontSizeCommand=Wa;exports.FontSourceCommand=sA;exports.FrameService=$a;exports.FrameStep=kn;exports.FrameStepHandle=bn;exports.GlobalPropertyHandle=ke;exports.GroupCommand=G;exports.IllustrationStepHandle=ln;exports.InformationMessageType=de;exports.InformationStepHandle=un;exports.IntegrationProduct=gA;exports.IntegrationType=la;exports.LayoutElementFactory=Rs;exports.LayoutElementType=R;exports.LayoutNotFoundError=X;exports.LayoutRenderingPurpose=vt;exports.MaterialStepHandle=gn;exports.MisconfigurationError=_t;exports.MockWorkflowManager=pr;exports.ModelStepHandle=dn;exports.ModuleStepHandle=mn;exports.MoveCommand=Is;exports.ObjectInput=JA;exports.ObjectInputType=Rn;exports.OptionGlobalPropertyHandle=UA;exports.OptionNotFoundError=$t;exports.ParseError=Mt;exports.PictureStepHandle=Bn;exports.ProductCameraRig=ga;exports.ProductCollection=xn;exports.ProductWorkflow=Pt;exports.PromiseCache=Rt;exports.PromiseQueue=fA;exports.QuestionStepHandle=hn;exports.QueueablePromise=mA;exports.ResizeCommand=Fs;exports.ResourceNotFoundError=Nt;exports.RotateCommand=Ds;exports.ScaleAxis=W;exports.SendBackwardsCommand=Ns;exports.ShapeStepHandle=Cn;exports.SpiffCommerceClient=Hn;exports.StakeholderType=Zt;exports.StepAspectType=ra;exports.StepHandle=at;exports.StepType=M;exports.TextAlgorithm=pt;exports.TextChangeCommand=qa;exports.TextGlobalPropertyHandle=Sn;exports.TextInput=Ar;exports.TextStepHandle=wn;exports.TransactionShareActionType=ca;exports.Transform=Pn;exports.TransformCollection=Yn;exports.UnhandledBehaviorError=O;exports.UnitOfMeasurement=ha;exports.UpdateImageSourceCommand=Ss;exports.Variant=it;exports.WorkflowExperienceEventType=Dn;exports.WorkflowExperienceImpl=jt;exports.assetService=T;exports.browserColorToHex=Ra;exports.cmPerPixel=cs;exports.createDesign=In;exports.currentDirection=ss;exports.dataUrlFromExternalUrl=_n;exports.designService=Qe;exports.determineCorrectFontSizeAndLines=Xt;exports.digitalContentStepService=SA;exports.fetchAsString=tt;exports.findAngle=_i;exports.findElement=L;exports.findPmsColors=ji;exports.frameDataCache=St;exports.frameStepService=ct;exports.generate=H;exports.generateCommands=Fn;exports.generateSVGWithUnknownColors=ot;exports.generateStateFromDesignInputSteps=Yo;exports.getAttributesFromArrayBuffer=oe;exports.getAxisAlignedBoundingBox=$i;exports.getBoundedOffsets=Za;exports.getElementVertices=os;exports.getFrameData=le;exports.getNEPoint=ns;exports.getNWPoint=as;exports.getPointOfRotation=As;exports.getSEPoint=is;exports.getSvgElement=Re;exports.getTrueCoordinates=es;exports.getWorkflow=Vt;exports.getWorkflows=OA;exports.graphQlManager=v;exports.illustrationStepService=Wt;exports.isCloseToValue=ts;exports.loadFont=Ut;exports.matchHexToPms=Oi;exports.materialStepService=xA;exports.mmPerPixel=rs;exports.modelStepService=YA;exports.moduleStepService=PA;exports.optionService=_;exports.patternImageDataCache=lt;exports.persistenceService=P;exports.pictureStepService=vA;exports.pmsToRgb=Ji;exports.questionStepService=NA;exports.registerFetchImplementation=Xn;exports.registerWindowImplementation=Wn;exports.rehydrateSerializedLayout=mt;exports.rgbToPms=Na;exports.rotateAroundPoint=zt;exports.sanitizeSvgTree=Ne;exports.setBearerAuthenticationToken=pa;exports.setCanvasModule=wA;exports.shapeStepService=xt;exports.shortenUrl=tn;exports.spiffCoreConfiguration=nt;exports.stepAspectValuesToDesignInputSteps=xo;exports.svgColorValueToDefinition=nA;exports.svgStringDimensions=pA;exports.svgToDataUrl=hA;exports.textStepService=Z;exports.toast=An;exports.xmlSerializer=ne;
package/dist/index.mjs CHANGED
@@ -8044,7 +8044,7 @@ class qi {
8044
8044
  return null;
8045
8045
  const s = i.length > 1 ? i.find((o) => o.id === e) : i[0];
8046
8046
  if (!s)
8047
- throw new Error("Failed to find selected variant in step variants, this should never happen!");
8047
+ throw new Error(`Failed to find selected variant ${e} in option ${a.id} of step ${t.stepName} (${t.stepTitle})`);
8048
8048
  return {
8049
8049
  command: void 0,
8050
8050
  followup: async () => {
@@ -13950,7 +13950,7 @@ class Va extends IA {
13950
13950
  * @param variant The variant to select.
13951
13951
  */
13952
13952
  async selectVariant(t) {
13953
- await Promise.all([
13953
+ console.log(`Selecting variant ${t.getId()}`), await Promise.all([
13954
13954
  this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name, t.getId()),
13955
13955
  this.applyVariantSelection(t)
13956
13956
  ]);
@@ -13961,7 +13961,7 @@ class Va extends IA {
13961
13961
  if (!e)
13962
13962
  return Promise.resolve();
13963
13963
  const A = (i = (a = this.optionResource) == null ? void 0 : a.variants) == null ? void 0 : i.find((s) => s.id === e);
13964
- return A ? this.applyVariantSelection(new it(A), t) : Promise.resolve();
13964
+ return A ? (console.log(`Applying global state using variant ${A.id} for aspect ${e}`), this.applyVariantSelection(new it(A), t)) : Promise.resolve();
13965
13965
  }
13966
13966
  async applyVariantSelection(t, e) {
13967
13967
  const a = this.getSharedSteps(e).map((i) => i.selectVariant(t));
@@ -16010,7 +16010,7 @@ class Wo {
16010
16010
  } catch (A) {
16011
16011
  throw console.error(A), new b("Critical - Unable to synchronize workflow state with server.");
16012
16012
  }
16013
- }, this.initialized = !1, this.options = t, this.options.applicationKey && Dn(this.options.applicationKey), console.debug("------------------------"), console.debug("Spiff Commerce Core SDK"), console.debug("Version: 25.0.0"), console.debug(`Application Key Provided: ${!!this.options.applicationKey}`), console.debug("------------------------");
16013
+ }, this.initialized = !1, this.options = t, this.options.applicationKey && Dn(this.options.applicationKey), console.debug("------------------------"), console.debug("Spiff Commerce Core SDK"), console.debug("Version: 25.0.1"), console.debug(`Application Key Provided: ${!!this.options.applicationKey}`), console.debug("------------------------");
16014
16014
  }
16015
16015
  /** @deprecated Use `configure` instead */
16016
16016
  configureUrls(t, e, A) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spiffcommerce/core",
3
- "version": "25.0.0",
3
+ "version": "25.0.1",
4
4
  "description": "Core client API for interacting with the Spiff Commerce backend.",
5
5
  "source": "src/index.ts",
6
6
  "main": "./dist/index.js",