@spiffcommerce/core 0.10.209 → 0.10.211
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/main.js +2 -2
- package/dist/module.js +2 -2
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -201,7 +201,7 @@ var A=require("lodash.clonedeep"),t=require("react/jsx-runtime"),e=require("open
|
|
|
201
201
|
workflowState
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
|
-
`,ea=A=>{const t=[];for(const e of A.steps)switch(e.type){case V.DigitalContent:e.data.varyUpload&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Upload});break;case V.Frame:const A=e.data;A.varySelection&&e.optionId&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection}),A.varyUpload&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Upload});break;case V.Illustration:const n=e.data;n.varySelection&&e.optionId&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection}),n.varyColors&&n.colourPickerEnabled&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Colors});break;case V.Material:e.data.varySelection&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection});break;case V.Model:e.data.varySelection&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection});break;case V.Picture:e.data.varySelection&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection});break;case V.Question:e.data.varySelections&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selections});break;case V.Shape:e.data.varySelection&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection});break;case V.Text:const i=e.data;i.varyText&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Text}),i.varySelection&&e.optionId&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection}),i.varyColor&&i.colourPickerEnabled&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Color})}return t},na=[V.SilentIllustration,V.ProductOverlay],ia=async(A,t)=>{const e=[];A.introduction&&e.push({name:"Introduction",title:A.name,renderableSteps:[{type:V.Introduction,stepName:"Introduction",stepTitle:A.name,helpText:A.introduction,data:{},conditions:[]}],silentSteps:[]});for(const n of A.steps){if(t.bulkScene){let A=!1;switch(n.type){case V.DigitalContent:n.data.varyUpload&&(A=!0);break;case V.Frame:{const t=n.data;!t.varyUpload||!t.varySelection&&n.optionId||(A=!0)}break;case V.Illustration:{const t=n.data;!t.varySelection&&n.optionId&&1!==(await ln.getOption(nn,n.optionId)).data.variants.length||!t.varyColors&&t.colourPickerEnabled||(A=!0)}break;case V.Material:n.data.varySelection&&(A=!0);break;case V.Model:n.data.varySelection&&(A=!0);break;case V.Picture:n.data.varySelection&&(A=!0);break;case V.Question:n.data.varySelections&&(A=!0);break;case V.Shape:n.data.varySelection&&(A=!0);break;case V.Text:{const t=n.data;!t.varySelection&&n.optionId&&1!==(await ln.getOption(nn,n.optionId)).data.variants.length||!t.varyColor&&t.colourPickerEnabled&&t.colourOptionId||!t.varyText||(A=!0)}}if(A)continue}const i=aa(n.stepName,A.stepGroups);if(i){const A=e.find((A=>A.name===i.name));A?na.includes(n.type)?A.silentSteps.push(n):A.renderableSteps.push(n):e.push({name:i.name,title:i.name,renderableSteps:na.includes(n.type)?[]:[n],silentSteps:na.includes(n.type)?[n]:[]})}else e.push({name:n.stepName,title:n.stepTitle,renderableSteps:na.includes(n.type)?[]:[n],silentSteps:na.includes(n.type)?[n]:[]})}return t.bulkScene&&e.push({name:"Bulk",title:t.bulkSceneTitle,renderableSteps:[{type:V.Bulk,stepName:"Bulk",stepTitle:t.bulkSceneTitle,helpText:"help:/billing/bulk-ordering.md",data:{aspects:ea(A)},conditions:[]}],silentSteps:[]}),t.finishScene&&e.push({name:"Finish",title:t.finishSceneTitle,renderableSteps:[{type:V.Finish,stepName:"Finish",stepTitle:t.finishSceneTitle,helpText:"",data:{modelAnimation:A.finalizeStepConfig?A.finalizeStepConfig.modelAnimation:void 0,lookAtAnimation:A.finalizeStepConfig?A.finalizeStepConfig.lookAtAnimation:void 0},conditions:[]}],silentSteps:[]}),e},aa=(A,t)=>t.find((t=>t.stepNames.includes(A))),sa=(A,t)=>(A.conditions||[]).every((A=>{const e=t[A.targetStepName];if(e&&e.selectedVariants){const t=e.selectedVariants;return A.requiredVariantSelections.some((A=>void 0!==t.find((t=>t.id===A))))}return!1})),ra=(A,t)=>A.map((A=>((A,t)=>{const e={name:A.name,title:A.title,renderableSteps:A.renderableSteps.filter((A=>sa(A,t))),silentSteps:A.silentSteps.filter((A=>sa(A,t)))};return 0===e.silentSteps.length&&0===e.renderableSteps.length?null:e})(A,t))).filter((A=>null!==A)),oa=async(A,t)=>{const e=ra(A,t),n=[];for(const A of e)for(const t of A.renderableSteps)if(t.type===V.Model||t.type===V.Material||t.type===V.Picture||t.type===V.Shape){const A=(t.option?t.option:t.optionId?await ln.getOption(nn,t.optionId):void 0)?.data.variants.length;A&&A>1&&n.push(t.stepName)}else n.push(t.stepName);const i=e.filter((A=>A.renderableSteps.filter((A=>n.includes(A.stepName))).length>0));for(const A of i)A.renderableSteps=A.renderableSteps.filter((A=>n.includes(A.stepName)));return i};function ca(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}function ga(A,t,e,n){const i=e.width*A.zoom,a=e.height*A.zoom;if(n){const n=A,i=Math.max(t.width/e.width,t.height/e.height);n.zoom=Math.max(i,A.zoom);const a=e.width*n.zoom,s=e.height*n.zoom;return n.x=la(A.x,t.width-a,0),n.y=la(A.y,t.height-s,0),n}const s=A;return s.x=la(s.x,-i,t.width),s.y=la(s.y,-a,t.height),s}function la(A,t,e){return Math.min(Math.max(A,t),e)}class Ba{constructor(A){ca(this,"offsets",void 0),ca(this,"forceImageCover",void 0),ca(this,"targetElements",void 0),ca(this,"imageData",void 0),ca(this,"frameData",void 0),ca(this,"_debouncedUpdateFrameOffsets",void 0),ca(this,"minZoomScale",.03),ca(this,"maxZoomScale",20),ca(this,"onFrameDataChangeListeners",void 0),ca(this,"onZoomChangeListeners",void 0),ca(this,"workflowManager",void 0),ca(this,"stepName",void 0),this._debouncedUpdateFrameOffsets=y(D)(this.updateFrameOffsets,200),this.targetElements=[],this.onFrameDataChangeListeners=[],this.onZoomChangeListeners=[],this.forceImageCover=A}connectWorkflowManager(A,t){t&&A.addStepSpecificStorageCallback((async A=>{if(A){const t=A;if(t.currentFrameSource){const A=await ue(t.currentFrameSource);y(Q)(A,this.frameData)||(this.frameData=A,this.onFrameDataChangeListeners.forEach((A=>A(this.frameData))),this.frameData&&this.imageData&&(this.offsets=Ie(this.imageData,this.frameData),this._debouncedUpdateFrameOffsets(this.offsets,this.imageData,this.frameData,this.targetElements),this.recalculateZoomLimits(this.imageData,this.frameData)))}}}),t),this.workflowManager=A,this.stepName=t}setTargetElements(A){this.targetElements=A}getFrameData(){return this.frameData}async setFrameData(A){const t=he.get(A);this.frameData=t}getImageData(){return this.imageData}getOffsets(){return this.offsets}setOffsets(A){this.offsets=A}setZoom(A,t,e,n){if(this.imageData&&this.offsets&&this.frameData){const i=(t-this.offsets.x)/this.offsets.zoom,a=(e-this.offsets.y)/this.offsets.zoom,s={x:t-i*A,y:e-a*A,zoom:this.imageData.width*A/this.imageData.width};this.updateOffsets(ga(s,this.frameData,this.imageData,this.forceImageCover),n),this.onZoomChangeListeners.forEach((t=>t(A)))}}setPatternData(A){(A&&this.frameData||A&&this.frameData&&!this.imageData)&&(this.offsets=Ie(A,this.frameData),this._debouncedUpdateFrameOffsets(this.offsets,A,this.frameData,this.targetElements),this.updateOffsets(ga(this.offsets,this.frameData,A,this.forceImageCover))),this.imageData=A,this.imageData&&this.frameData&&this.recalculateZoomLimits(this.imageData,this.frameData)}updateOffsets(A,t){const e=this.imageData;e&&this.frameData&&(this.offsets&&A.x===this.offsets.x&&A.y===this.offsets.y&&A.zoom===this.offsets.zoom?t&&t():(this.offsets=ga(A,this.frameData,e,this.forceImageCover),this._debouncedUpdateFrameOffsets(A,e,this.frameData,this.targetElements,t)))}onFrameDataChanged(A){A(this.frameData),this.onFrameDataChangeListeners.push(A)}onZoom(A){this.onZoomChangeListeners.push(A)}updateFrameOffsets(A,t,e,n,i){if(!e)throw new je("Frame data not set. This is a bug");if(!this.workflowManager)throw new je("No workflow manager set, cannot update offsets.");const a=this.workflowManager.getCommandDispatcher();n.forEach((e=>{a(new $t(e,t,A))})),this.stepName&&this.workflowManager.updateStorage(this.stepName,{frameOffsets:A}),i&&i()}recalculateZoomLimits(A,t){const e=Math.max(t.width/A.width,t.height/A.height);this.forceImageCover?(this.minZoomScale=e,this.maxZoomScale=2.5*e):(this.minZoomScale=e/10,this.maxZoomScale=2.5*e)}}function wa(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class da{constructor(A,t,e){wa(this,"configuration",void 0),wa(this,"layouts",void 0),wa(this,"product",void 0),wa(this,"processRegion",(async A=>{const t=this.layouts.find((t=>t.panelId===A.panelId));if(!t)throw new Ge(A);let e="";if(this.configuration.type===V.ProductOverlay){let A="";if(this.product?.overlayImageUrl&&(A=this.product.overlayImageUrl),e=A,!A)throw new Oe(this.configuration,"Couldn't find an asset for product overlay step")}const n=this.evaluateAssetType();if(n===P.Image){const e=this.configuration.type===V.SilentIllustration?this.configuration.data.assetKey:this.product?.overlayImageUrl,i={stepName:this.configuration.stepName,id:Y(),src:e,type:n,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===V.ProductOverlay||void 0,rotation:A.rotation,excludeFromExport:this.configuration.data.excludeFromPrint,preserveAspectRatio:"none"};return{regionElement:{id:i.id,region:A},command:new Lt(i,t)}}{const i=this.configuration.type===V.SilentIllustration?this.configuration.data.assetKey:e,a=async()=>new Promise((A=>{fetch(i).then((t=>{A(t.text())})).catch((A=>console.error(A)))})),s=await yt(await a()),r={stepName:this.configuration.stepName,id:Y(),cachedObjectURL:await Se(s.svg),src:i,svg:s.svg,colors:s.colors,type:n,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===V.ProductOverlay||void 0,excludeFromExport:this.configuration.data.excludeFromPrint};return{regionElement:{id:r.id,region:A},command:new Lt(r,t)}}})),this.configuration=A,this.layouts=t,this.product=e||void 0}async trigger(){if(!this.configuration.data.regions)throw new Oe(this.configuration,"Missing regions.");if(this.configuration.type===V.SilentIllustration){const A=this.configuration.data.regions.map(this.processRegion);return Promise.all(A)}return this.configuration.type===V.ProductOverlay?Promise.all(this.configuration.data.regions.map((A=>{if(!this.layouts.find((t=>A.panelId===t.panelId)))throw new Ge(A);return this.processRegion(A)}))):Promise.reject("Unknown silent step. This is a bug")}evaluateAssetType(){const A=this.configuration.type===V.ProductOverlay&&this.product?.overlayImageUrl?this.product.overlayImageUrl.toLowerCase():this.configuration.data.assetKey?.toLowerCase().split("?")[0];return A?.startsWith("data:image/png")||A?.endsWith(".jpeg")||A?.endsWith(".jpg")||A?.endsWith(".png")?P.Image:(A?.endsWith(".svg")||A?.startsWith("image/svg+xml"),P.Illustration)}}const ha=async A=>{const t=`${$e.getServicesApiUrl()}/shortener`;try{const e=await fetch(t,{method:"POST",body:JSON.stringify({longUrl:A}),headers:{"Content-Type":"application/json"}});return(await e.json()).shortUrl}catch(A){throw console.error(A),new Ke("Failed to shorten URL, see console.")}};function Ea(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class Ca{async poll(){try{if(await this.predicate())return this.onSuccess(),void(this.pollingId>-1&&window.clearInterval(this.pollingId))}catch(A){}this.attempts+=1,this.attempts<this.maxAttempts?this.pollingId=window.setTimeout(this.poll.bind(this),this.interval):this.onFailure()}constructor(A,t,e,n=3e3,i=10){Ea(this,"pollingId",void 0),Ea(this,"attempts",void 0),Ea(this,"interval",void 0),Ea(this,"maxAttempts",void 0),Ea(this,"predicate",void 0),Ea(this,"onSuccess",void 0),Ea(this,"onFailure",void 0),this.onSuccess=t,this.onFailure=e,this.predicate=A,this.attempts=0,this.pollingId=-1,this.interval=n,this.maxAttempts=i,this.poll()}}const Qa=new class{async init(A,t,e){return e&&await this.reload(A,t,e),null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)).map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[],i,(async()=>{const e=n?.storage?.videoShortUrl,i=n?.storage?.videoUrl;t.updateStorage(A.stepName,{videoShortUrl:e,videoUrl:i})}))}async regenerateQRCode(A,t,e,n,i,a,s,r,o){if(t||""===e||""!==n)o(!1);else{const t=async()=>{const A=(await i.getServer().execute("getAssetByKeyV2_private",{assetKey:e.replace(/\//g,"_")})).body,t=A.links.find((A=>"mpeg4"===A.rel));return{asset:A,link:t}},c=await new Promise(((A,e)=>{new Ca((async()=>!!(await t()).link),(async()=>{const e=await t();if(!e.link||!e.link.href)throw new Je(e.asset.data);A(e.link)}),(()=>{e("Poller timed out with 40 attempts @ 3 second interval")}),3e3,40)}));A.forEach((A=>r(new Tt(A.id))));const g="http"===a.data.baseUrl.slice(0,4)?"":"https://",l=new URL(g+a.data.baseUrl);l.searchParams.append("video",btoa(JSON.stringify([c]))),l.pathname=l.pathname+("/"===l.pathname.slice(-1)?"":"/");const B=l.toString();if(B.length>=2e3)throw new Ke("Cannot create QR code, URL too long.");const w=await ha(B);if(s(w),!a.data||!a.data.regions)throw new Oe(a,"Missing regions.");const d=await this.regionElements(a),h=await this.command(w,d,i,a.stepName);h&&(h.command&&i.getCommandDispatcher()(h.command),h.followup&&await h.followup()),await i.setSelectionsAndElements(a.stepName,[],d,(async()=>{i.updateStorage(a.stepName,{videoShortUrl:w,videoUrl:n}),o(!1)}))}}async regionElements(A){return A.data.regions.map((A=>({id:Y(),region:A})))}async command(A,t,e,n){const i=e.getLayouts(),a=`data:image/svg+xml;base64,${btoa(await(0,I.toString)(A,{type:"svg"}))}`,s=t.map((A=>{const t=A.region,e=i.find((A=>A.panelId===t?.panelId));if(!e&&t)throw new Ge(t);if(e&&!t)throw new Error("Region not found");if(!e||!t)throw new Error("Neither a region or layout found!");return new Lt({stepRegion:t,stepName:n,id:A.id,src:a,type:P.Image,y:t.top,x:t.left,width:t.width,height:t.height,rotation:0},e)}));return{command:new Ot(s),followup:async()=>{}}}};function ua(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const Ia=new class{constructor(){ua(this,"frameSourceSvg",(async(A,t)=>{if(!A)return Ce(t.data.regions[0]);if(!A.assetKey)throw new ke(A);const e=await cn.getAssetFromVariant(A),n=e.links.find((A=>"cdn"===A.rel));if(n)return PA(n.href);throw new Je(e.data)}))}async init(A,t,e){if(e)return await this.reload(A,t,e),null;if(t.setMandatoryFulfilled(A.stepName,!1),t.markStepsAsInitialised([A.stepName]),A.optionId){const e=await ln.getOption(t.getServer(),A.optionId);if(e&&e.data.variants.length>0){const n=ln.getDefaultVariant(e.data);if(n)return this.selectVariantCommand(A,n,[],t,void 0,A.data.placeholderImageKey)}return null}return this.selectVariantCommand(A,void 0,[],t,void 0,A.data.placeholderImageKey)}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)).map((A=>({id:A.id,region:A.stepRegion}))),a=(await ln.getOption(t.getServer(),A.optionId))?.data;if(!a||0===a.variants.length){const e=Ce(A.data.regions[0]);t.updateStorage(A.stepName,{currentFrameSource:e})}if(n){const e=async()=>{const e=n.storage?.framePatternSrc,i=n.storage?.frameOffsets;if(t.updateMetadata(A.stepName,{frameOffsets:i,framePatternSrc:e}),e){const n=t.getStepSpecificServices(A.stepName)?.frameService;await this.loadPatternFromString(e,n),t.updateMetadata(A.stepName,{image:e}),t.updateStorage(A.stepName,{framePatternSrc:e})}if(i?.zoom){const e=t.getStepSpecificServices(A.stepName)?.frameService;e.updateOffsets(i)}t.setMandatoryFulfilled(A.stepName,!0)};if(n.selectedVariants&&n.selectedVariants.length>0){const s=n.selectedVariants[0].id;if(a&&s){const n=a.variants.find((A=>A.id===s));n&&await t.setSelectionsAndElements(A.stepName,[n],i,(async()=>{const i=await this.frameSourceSvg(n,A);t.updateStorage(A.stepName,{currentFrameSource:i}),await e()}))}}else await t.setSelectionsAndElements(A.stepName,[],i,e)}}selectImage(A,t,e){e.setEditedStatus(A.stepName,!0);if(t.links.find((A=>"cdn"===A.rel)).href.endsWith("pdf")){const n=e.getServer();e.addPoller(new Ca((async()=>{const A=(await n.execute("getAssetByKeyV2_private",{assetKey:t.data.key.replace(/\//g,"_")})).body.links.find((A=>"svg"===A.rel));if(!A)return!1;return 200===(await fetch(A.href)).status}),(()=>{n.execute("getAssetByKeyV2_private",{assetKey:t.data.key.replace(/\//g,"_")}).then((t=>{const n=t.body;this.loadPatternFromAsset(n,A,e)}))}),(()=>{throw new Ke("Failed to resolve transcoded PDF")})))}else this.loadPatternFromAsset(t,A,e)}async selectVariant(A,t,e,n,i){const a=await this.selectVariantCommand(A,t,e,n,i);a&&(a.command&&n.getCommandDispatcher()(a.command),a.followup&&await a.followup())}getCreateElementCommand(A,t,e,n){return new Lt({id:A,type:P.Frame,x:t.left,y:t.top,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,rotation:t.rotation,scaleX:t.width/n.frameData.width,scaleY:t.height/n.frameData.height,path:n.frameData.path,stepRegion:t,stepName:n.stepName,disablePlaceholder:n.disablePlaceholder,focalBlur:n.focalBlur,focalBlurStrength:n.focalBlurStrength,focalBlurRadius:n.focalBlurRadius,pattern:n.pattern,immutable:t.immutable},e)}async loadPatternFromString(A,t){if(A.endsWith("svg")){const e=await De(A),n=e.width,i=e.height,a={src:A,width:n,height:i,aspect:n/i};de.set(A,a),t.setPatternData(a)}else{const e=await fetch(A),n=await e.arrayBuffer(),i=await Be(n),a={src:A,width:i.width,height:i.height,aspect:i.width/i.height};de.set(A,a),t.setPatternData(a)}}async selectVariantCommand(A,t,e,n,i,a){const s=n.getStepSpecificServices(A.stepName)?.frameService,r=await this.frameSourceSvg(t,A),o=await ue(r),c=s.getImageData(),g=e.map((A=>new Tt(A.id))),l=c?Ie(c,o):void 0,B=c?{id:Y(),src:c.src,x:l?.x||0,y:l?.y||0,width:c.width,height:c.height,scaleX:l?.zoom||1,scaleY:l?.zoom||1,rotation:0}:void 0;i&&i(!0);const w=A.data.regions.map((t=>{const e=Y(),i=n.getLayouts().find((A=>A.panelId===t.panelId));if(!i)throw new Ge(t);return{command:this.getCreateElementCommand(e,t,i,{frameData:o,pattern:B,disablePlaceholder:A.data.disablePlaceholder,focalBlur:A.data.focalBlur,focalBlurStrength:A.data.focalBlurStrength,focalBlurRadius:A.data.focalBlurRadius,stepName:A.stepName}),regionEl:{id:e,region:t}}})),d=w.map((A=>A.command));return{command:new Ot([...d,...g]),followup:async()=>{i&&i(!1),await n.setSelectionsAndElements(A.stepName,t?[t]:[],[...w.map((A=>A.regionEl))],(async()=>{if(n.updateStorage(A.stepName,{currentFrameSource:r}),a){const t=n.getStepSpecificServices(A.stepName)?.frameService;await this.loadPatternFromString(a,t)}}))}}}patternSource(A){const t=A.links.find((A=>"svg"===A.rel));if(t)return t.href;const e=A.links.find((A=>"cdn"===A.rel));if(e)return e.href;throw new Je(A.data)}async loadPatternFromAsset(A,t,e){const n=this.patternSource(A),i=e.markUpdatePending(),a=e.getStepSpecificServices(t.stepName)?.frameService;await this.loadPatternFromString(n,a),e.updateMetadata(t.stepName,{image:n}),e.updateStorage(t.stepName,{framePatternSrc:n}),e.markUpdateCompleted(i)}};const ma=new class{async getIllustrationBody(A){return new Promise((t=>{fetch(A).then((A=>{t(A.text())})).catch((A=>console.error(A)))}))}getCreateElementCommand(A,t,e,n){return new Lt({stepRegion:t,stepName:n.stepName,colors:n.svg.colors,id:A,src:n.src,svg:n.svg.svg,cachedObjectURL:n.objectURL,type:P.Illustration,y:t.top,x:t.left,rotation:t.rotation,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,immutable:t.immutable},e)}getColors(A,t){const e=t.getRegionElements(A.stepName)||[];if(0===e.length)return[];try{return Nt(e[0].id,t.getAllLayoutData()).colors}catch(A){return[]}}async init(A,t,e){const n=await ln.getOptionFromStep(A,t.getServer());if(!n)return null;if(e)return this.reload(A,t,e);{const e=ln.getDefaultVariant(n.data);if(e)return await this.selectVariantCommand(A,e,[],(()=>{}),t)}return null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)),a=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(!a||!e)throw new Error("Required illustration variant no longer available");{const s=a.variants.find((A=>A.id===e));if(s){const e=i.map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[s],e,(async()=>{t.updateMetadata(A.stepName,{colors:n.storage?.colors}),t.setMandatoryFulfilled(A.stepName,!0)}))}}}return null}async availableColors(A,t){if(A.data.colourOptionId){const e=await ln.getOption(t.getServer(),A.data.colourOptionId);return e?e.data.variants.map((A=>({fill:A.color,stroke:A.color,variant:A}))):[]}return[]}async changeColorsCommand(A,t,e,n,i){const a={};for(const[A,t]of i.entries())a[A]={browserValue:t,spotColor:a[A]?.spotColor};const s=ft(A,t,e,a),r=await Se(s),o=[];for(const A of n){for(const[t,e]of i.entries())o.push(new Ae(A,t,e));o.push(new te(A,s,r))}return new Ot(o)}async changeColors(A,t,e,n,i){if(0===t.length)return;const a=Nt(t[0].id,n().map((A=>A.layoutState))),s={...a.colors},r={};Object.entries(s).forEach((([A,t])=>{const e={browserValue:t.browserValue},n=t.spotColor;n&&(e.spotColor={profileName:n.profileName,namedColor:n.namedColor}),r[A]=e}));for(const[A,t]of i.entries())s[A]={browserValue:t,spotColor:s[A]?.spotColor},r[A]={browserValue:t};let o=Array.from(Object.values(s)).map((A=>A.browserValue));const c=A.data.colourOptionId?await ln.getOption(e.getServer(),A.data.colourOptionId):void 0;c&&c.data.variants.forEach((A=>{o=o.map((t=>t.toLowerCase()===A.color?.toLowerCase()?A.name:t))})),e.updateMetadata(A.stepName,{colors:o});const g=new Map;if(Object.entries(s).forEach((([A,t])=>{g.set(A,t.browserValue)})),!a.svg)throw new Error("Colors changed before SVG loaded. This should never happen!");const l=await this.changeColorsCommand(a.svg,a.width,a.height,t.map((A=>A.id)),g);e.updateStorage(A.stepName,{colors:r}),e.getCommandDispatcher()(l)}async selectVariant(A,t,e,n,i){const a=await this.selectVariantCommand(A,t,e,n,i);a&&(a.command&&i.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantCommand(A,t,e,n,i){if(!A.data||!A.data.regions)throw new Oe(A,"Missing regions.");n(!0);const a=e.map((A=>new Tt(A.id)));if(i.setMandatoryFulfilled(A.stepName,!1),!t.assetKey)throw new ke(t);const s=await cn.getAssetFromVariant(t),r=s.links.find((A=>"cdn"===A.rel));if(!r)throw new Je(s.data);const o=await yt(await this.getIllustrationBody(r.href)),c=await Se(o.svg),g=A.data.regions.map((t=>{const e=i.getLayouts().find((A=>A.panelId===t.panelId));if(!e)throw new Ge(t);const n=Y();return{regionElement:{id:n,region:t},command:this.getCreateElementCommand(n,t,e,{stepName:A.stepName,src:r.href,objectURL:c,svg:o})}})),l=[...g.map((A=>A.command)),...a];let B=Array.from(Object.values(o.colors)).map((A=>A.browserValue));const w=A.data.colourOptionId?await ln.getOption(i.getServer(),A.data.colourOptionId):void 0;return w&&w.data.variants.forEach((A=>{B=B.map((t=>t.toLowerCase()===A.color?.toLowerCase()?A.name:t))})),i.updateMetadata(A.stepName,{colors:B}),{command:new Ot(l),followup:async()=>{await i.setSelectionsAndElements(A.stepName,[t],g.map((A=>A.regionElement)),(async()=>{i.setMandatoryFulfilled(A.stepName,!0),n(!1)}))}}}};const Da=new class{async init(A,t,e){const n=await ln.getOptionFromStep(A,t.getServer());if(!n)throw new be(A);if(e)await this.reload(A,t,e);else{const e=ln.getDefaultVariant(n.data);if(e)return await this.selectVariantLambda(A,e,t,(()=>{}))}return null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)),a=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(!a)throw new be(A);if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(e){const n=a.variants.find((A=>A.id===e));if(n){const e=await cn.getMaterialFromVariant(n),a=i.map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[n],a,(async()=>{const n=t.getPreviewService();if(n){const i=A.data.targetMaterials.map((t=>n.applyMaterialVariant(t,A.optionId,e.data)));Promise.all(i).then((()=>t.setMandatoryFulfilled(A.stepName,!0)))}}))}}}}async selectVariant(A,t,e,n){const i=await this.selectVariantLambda(A,t,e,n);i&&(i.command&&e.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantLambda(A,t,e,n){const i=e.getPreviewService();n(!0);const a=await cn.getMaterialFromVariant(t);if(!a)throw n(!1),new ke(t);return{command:void 0,followup:async()=>{await e.setSelectionsAndElements(A.stepName,[t],[],(async()=>{try{i&&A.data.targetMaterials.forEach((t=>{i.applyMaterialVariant(t,A.optionId,a.data)})),e.setMandatoryFulfilled(A.stepName,!0)}finally{n(!1)}}))}}}};const pa=new class{async init(A,t,e){const n=await ln.getOptionFromStep(A,t.getServer());if(!n)throw new be(A);if(e)await this.reload(A,t,e);else{const e=ln.getDefaultVariant(n.data);if(e)return await this.selectVariantLambda(A,e,t,(()=>{}))}return null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)),a=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(a&&e){const n=a.variants.find((A=>A.id===e));if(n){const e=i.map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[n],e,(async()=>{const e=t.getPreviewService();if(e){const i=(await cn.getAssetFromVariant(n)).links.find((A=>"cdn"===A.rel));if(!i)throw new ke(n);await e.applyModelVariant(A.optionId,{model:i.href,contextService:t.getLayoutPreviewService()},A.data.replaceProductModel||!1),t.setMandatoryFulfilled(A.stepName,!0)}}))}}}}async selectVariant(A,t,e,n){const i=await this.selectVariantLambda(A,t,e,n);i&&(i.command&&e.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantLambda(A,t,e,n){n(!0);const i=(await cn.getAssetFromVariant(t)).links.find((A=>"cdn"===A.rel));if(!i)throw new ke(t);return{command:void 0,followup:async()=>{await e.setSelectionsAndElements(A.stepName,[t],[],(async()=>{try{const t=e.getPreviewService();t&&t.applyModelVariant(A.optionId,{model:i.href,contextService:e.getLayoutPreviewService()},A.data.replaceProductModel||!1),e.setMandatoryFulfilled(A.stepName,!0)}finally{n(!1)}}))}}}};const fa=new class{async init(A,t,e){return e?(await this.reload(A,t,e),null):(t.updateMetadata(A.stepName,{text:""}),this.changeTextCommand(A,"",t,"",(()=>{})))}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)).map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[],i,(async()=>{t.updateStorage(A.stepName,{text:n?.storage?.text}),t.setMandatoryFulfilled(A.stepName,""!==n?.storage?.text)}))}async changeText(A,t,e,n,i){const a=await this.changeTextCommand(A,t,e,n,i);a&&(a.command&&e.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async changeTextCommand(A,t,e,n,i){const a=e.getRegionElements(A.stepName),s=e.getStepSpecificServices(A.stepName)?.module;if(!s)return console.error("Missing module."),null;const r=e.getProfanities();if(!this.validateInput(A,t,r,i))return e.setMandatoryFulfilled(A.stepName,!1),console.error(n),null;if(e.setMandatoryFulfilled(A.stepName,""!==t),!A.data||!A.data.regions||A.data.regions.length<=0)return console.error("Missing configuration."),null;e.updateStorage(A.stepName,{text:t});const o=(t,n,i)=>{const a=i||Y(),s=e.getLayouts().find((A=>A.panelId===n.panelId));if(!s)return console.error(`Can not find layout for region: ${n.panelId}`),null;const r=[];return i&&r.push(new Tt(a)),r.push(new Lt({stepRegion:n,stepName:A.stepName,colors:{},id:a,svg:t,type:P.Illustration,y:n.top,x:n.left,rotation:n.rotation,width:n.width,height:n.height,layer:n.layer,layerIndex:n.layerIndex,immutable:n.immutable},s)),{id:a,region:n,command:new Ot(r)}};if(a.length>0){const A=a.map((A=>{if(!A.region)return null;const e=s.svgPrint(t,A.region);return o(e,A.region,A.id)})).filter((A=>!!A)).filter((A=>!!A)).map((A=>A&&A.command));return{command:new Ot(A),followup:async()=>{}}}{const n=A.data.regions.map((A=>o(s.svgPrint(t,A),A))),i=n.filter((A=>!!A)).map((A=>A&&A.command));return{command:new Ot(i),followup:async()=>{const t=n.filter((A=>A)).map((A=>A&&{id:A.id,region:A.region}));await e.setSelectionsAndElements(A.stepName,[],t)}}}}validateInput(A,t,e,n){if(A.data&&A.data.maxLength){const e=A.data.maxLength;if(t.length>e)return n("Too many characters."),!1}if(!/^$|^[a-zA-Z0-9 ]+$/.test(t))return n("Unsupported characters."),!1;const i=t.toLowerCase();for(const A in e)if(i===e[A].toLowerCase().trim()&&""!==i)return n("Blocked profanity."),!1;return n(""),!0}};const ya=new class{async init(A,t,e){const n=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(!n)return null;if(e)await this.reload(A,t,e);else if(n.defaultVariant){const e=n.defaultVariant,i=n.variants.find((A=>!!A.assetKey&&A.id===e));if(i)return t.markStepsAsInitialised([A.stepName]),this.selectVariantCommand(A,i,t,(()=>{}))}return t.markStepsAsInitialised([A.stepName]),null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)),a=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(a&&e){const n=a.variants.find((A=>A.id===e));if(n){const e=i.map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[n],e,(async()=>{t.setMandatoryFulfilled(A.stepName,!0)}))}}}}async selectVariant(A,t,e,n){const i=await this.selectVariantCommand(A,t,e,n);i&&(i.command&&e.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantCommand(A,t,e,n){if(!t.assetKey)throw new ke(t);const i=(await cn.getAssetFromVariant(t)).links.find((A=>"cdn"===A.rel));if(!i)return console.error("No URL for picture!"),null;const a=i.href;n(!0),e.setMandatoryFulfilled(A.stepName,!1);const s=e.getRegionElements(A.stepName).map((A=>new Tt(A.id))),r=A.data.regions.map((t=>{const n=e.getLayouts().find((A=>A.panelId===t.panelId));if(!n)throw new Ge(t);const i=Y();return{regionElement:{id:i,region:t},command:new Lt({stepName:A.stepName,stepRegion:t,id:i,src:a,type:P.Image,y:t.top,x:t.left,rotation:t.rotation,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,immutable:t.immutable,preserveAspectRatio:"none"},n)}}));return{command:new Ot([...s,...r.map((A=>A.command))]),followup:async()=>{await e.setSelectionsAndElements(A.stepName,[t],r.map((A=>A.regionElement)),(async()=>{e.setMandatoryFulfilled(A.stepName,!0),n(!1)}))}}}};const Ma=new class{async init(A,t,e){const n=await ln.getOptionFromStep(A,t.getServer());if(!n)return null;if(e)await this.reload(A,t,e);else{const e=n.data.variants;if(ln.getDefaultVariant(n.data)){const i=e.find((A=>A.id===n.data.defaultVariant));return this.selectVariantLambda(A,i?.id||"",t)}}return null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(i&&e){const n=i.variants.find((A=>A.id===e));n&&await t.setSelectionsAndElements(A.stepName,[n],[])}}}async selectVariant(A,t,e){const n=await this.selectVariantLambda(A,t,e);n&&(n.command&&e.getCommandDispatcher()(n.command),n.followup&&await n.followup())}async selectVariantLambda(A,t,e){const n=await ln.getOptionFromStep(A,e.getServer());if(!n)return null;const i=n.data.variants,a=i.length>1?i.find((A=>A.id===t)):i[0];if(!a)throw new Error("Failed to find selected variant in step variants, this should never happen!");return{command:void 0,followup:async()=>{await e.setSelectionsAndElements(A.stepName,[a],[],(async()=>{e.setMandatoryFulfilled(A.stepName,!0)}))}}}};const Fa=new class{async availableColours(A,t){const e=await ln.getOptionFromStep(A,t.getServer());return e?e.data.variants.map((A=>({fill:A.color,stroke:A.color,variant:A}))):[]}async init(A,t,e){const n=await ln.getOptionFromStep(A,t.getServer());if(!n)throw new be(A);if(!e){const e=ln.getDefaultVariant(n.data);if(!e)return null;const i={fill:e.color,stroke:e.color,variant:e};return this.selectVariantCommand(A,i,[],t)}return await this.reload(A,t,e),null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)),a=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(a&&e){const n=a.variants.find((A=>A.id===e));if(n){const e=i.map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[n],e,(async()=>{t.updateStorage(A.stepName,{colour:n.color||""}),t.setMandatoryFulfilled(A.stepName,!0)}))}}}}async selectVariant(A,t,e,n){const i=await this.selectVariantCommand(A,t,e,n);i&&(i.command&&n.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantCommand(A,t,e,n){const i=n.getLayouts();if(e.length>0){const a=A=>{const e=A.region;if(!i.find((A=>A.panelId===e?.panelId)))throw new Ge(e);const n=t.variant?.color;return n?new Ae(A.id,"spiff-fill-shape",n):(console.error("Failed to change color."),null)},s=e.map(a).filter((A=>!!A));return{command:new Ot(s),followup:async()=>{await n.setSelectionsAndElements(A.stepName,t.variant?[t.variant]:[],e),n.updateStorage(A.stepName,{colour:t.fill||""})}}}{const e=e=>{const n=i.find((A=>A.panelId===e.panelId));if(!n)throw new Ge(e);const a=`\n <svg\n xmlns="http://www.w3.org/2000/svg"\n xmlnsXlink="http://www.w3.org/1999/xlink"\n xmlSpace="preserve"\n preserveAspectRatio="none"\n version="1.1"\n width="1"\n height="1"\n viewBox="0 0 1 1"\n >\n <rect\n x="0"\n y="0"\n width="1"\n height="1"\n class="spiff-fill-shape"\n fill="${t.variant?.color}"\n />\n </svg>\n `,s={};s["spiff-fill-shape"]={browserValue:t.variant.color};const r=Y();return{id:r,region:e,command:new Lt({stepRegion:e,stepName:A.stepName,colors:s,id:r,svg:a,type:P.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,excludeFromExport:A.data.excludeFromPrint},n)}},a=A.data.regions.map(e),s=a.filter((A=>!!A)).map((A=>A?.command)),r=a.filter((A=>!!A)).map((A=>({id:A.id,region:A.region})));return{command:new Ot(s),followup:async()=>{await n.setSelectionsAndElements(A.stepName,t.variant?[t.variant]:[],r,(async()=>{n.updateStorage(A.stepName,{colour:t.fill||""})}))}}}}};function xa(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const Ya=new class{constructor(){xa(this,"latestToast",void 0),xa(this,"toastType",void 0),xa(this,"toastCallbacks",void 0),this.latestToast=null,this.toastType=null,this.toastCallbacks=[]}addToastCallback(A){A({toastMessage:this.latestToast,toastType:this.toastType}),this.toastCallbacks.push(A)}setLatestToast(A,t){this.latestToast=A,this.toastType=t,this.onToastChange()}onToastChange(){this.toastCallbacks.forEach((A=>A({toastMessage:this.latestToast,toastType:this.toastType})))}};function va(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class Sa extends Error{constructor(A){super(A),Object.setPrototypeOf(this,new.target.prototype),this.name=Sa.name}}class Na extends Error{constructor(A){super(A),Object.setPrototypeOf(this,new.target.prototype),this.name=Na.name}}const Pa=new class{constructor(){va(this,"cachedColors",new Map),va(this,"filterUnsupportedCharacters",((A,t)=>{let e=A.replace(/(\r\n|\r|(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]))/gm,"");const n=[],i=t?XA(t):void 0;if(i){const A=e.split("").map((A=>i.getFont().charToGlyph(A)));for(let t=0;t<A.length;t++){const i=".notdef"===A[t].name;"\n"===e.charAt(t)||i&&n.push(String.fromCharCode(e.charCodeAt(t)))}}for(let A=0;A<n.length;A++)e=e.replaceAll(n[A],"");return e})),va(this,"textAlign",(A=>A.vertical?"center":A.textAlign||"center")),va(this,"getErrorsForText",((A,t,e)=>{const n=[];t.data&&t.data.maxLength&&A.length>t.data.maxLength&&n.push({localizationKey:"workflow.steps.text.characterLimit"});const i=e.getProfanities(),a=A.toLowerCase();if(""!==a)for(const A in i){if(a===i[A].toLowerCase().trim()){n.push({localizationKey:"workflow.steps.text.blockedProfanity"});break}}return!t.data.allowNewlines&&(A.includes("\n")||A.includes("\r"))&&n.push({localizationKey:"workflow.steps.text.multipleLines"}),n}))}async init(A,t,e){const n=await ln.getOptionFromStep(A,t.getServer());if(!n)return null;if(e)await this.reload(A,t,e);else{const e=t.getServer();t.updateStorage(A.stepName,{inputText:A.data.defaultText||"",color:(await this.getDefaultColorVariant(A.data,e))?.color||await this.getDefaultColor(A.data,e)}),t.updateMetadata(A.stepName,{text:A.data.defaultText||"",color:(await this.getDefaultColorVariant(A.data,e))?.name||await this.getDefaultColor(A.data,e)});const i=ln.getDefaultVariant(n.data);if(i)return this.selectVariantCommand(A,i,{},[],t,(()=>{}),(()=>{}))}return null}findLayoutElements(A,t){return A.getRegionElements(t.stepName).map((t=>Nt(t.id,A.getAllLayoutData())))}async availableColors(A,t){const e=this.cachedColors.get(A.stepName);if(e)return e;if(A.data.colourOptionId){const e=(await ln.getOption(t.getServer(),A.data.colourOptionId)).data.variants.map((A=>({fill:A.color,stroke:A.color,variant:A})));return this.cachedColors.set(A.stepName,e),e}return[]}async changeFill(A,t,e,n){if(!A.data||!A.data.regions)return;const i=n.getCommandDispatcher();t.variant?n.updateMetadata(A.stepName,{color:t.variant.name}):n.updateMetadata(A.stepName,{color:t.fill});const a=await this.getColorOption(A,n.getServer()),s=a?this.createTextFillSpotColor(a,t.variant):void 0;a?n.updateStorage(A.stepName,{color:t.fill,colorProfileAssetKey:a.data.colorProfileAssetKey}):n.updateStorage(A.stepName,{color:t.fill});for(const A of e){if(!t.fill)throw new Error("Fill not set on new color selection!");i(new Vt(A.id,t.fill,s))}}getProcessedInput(A,t,e){const n=e?A:this.injectReplaceableText(A,t);return rt(n,{vertical:t.vertical,uppercase:t.uppercase})}updateInputText(A,t,e,n){const i=n.getStepStorage(e.stepName),a=this.getProcessedInput(A,e.data,!!i.customiseAllText),s={command:void 0,helperText:"",errors:this.getErrorsForText(A,e,n)};if(s.errors.length>0)return s.helperText=s.errors[0].localizationKey,s;const r=(e.data.maxLength-a.length).toString();s.helperText=`${r} characters remaining`;const o=n.getTransaction().bulk&&e.data.varyText||!1,c=[],g=new Map,l=new Map;for(const A of t){if(!A.fontData)throw new je("Failed to resolve font data for text.");const[t,n]=Me(A.fontSize,A.fontData,{left:A.x,top:A.y,width:A.width,height:A.height,rotation:A.rotation,panelId:""},[a],{size:e.data.size,minSize:e.data.minSize,maxSize:e.data.maxSize});g.set(A.id,t),l.set(A.id,n);const i=e.data.curved?a:(n||[]).join("\n");c.push(this.generateTextChangeCommandsForRegion(t,e.data,A.id,i,o))}if(!e.data.curved&&t.length>0){if(!Array.from(l.values()).every((A=>A)))return s.errors.push({localizationKey:"workflow.steps.text.doesNotFit"}),s}return n.updateStorage(e.stepName,{text:A}),n.updateMetadata(e.stepName,{text:a}),i.defaultCleared&&n.setMandatoryFulfilled(e.stepName,!0),s.command=new Ot(c),s.command.varying=o,s}async selectVariant(A,t,e,n,i){const a=await this.selectVariantCommand(A,t,e.getStepStorage(A.stepName)||{},e.getRegionElements(A.stepName),e,n,i);a&&(a.command&&e.getCommandDispatcher()(a.command),a.followup&&await a.followup())}createTextFillSpotColor(A,t){const e=A.data.colorProfileAssetKey;if(""!==e&&void 0!==e){const A=e.replace(/\s/g,"-"),n=A.lastIndexOf("/"),i=A.slice(n+1).slice(0,-4);if(!t.namedColor)throw new Error("variant named color not set!");return{profileName:i,namedColor:t.namedColor}}}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)),a=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(a&&e){const s=a.variants.find((A=>A.id===e));if(s){const e=await this.fontDataFromVariant(s),a=i.map((A=>({id:A.id,region:A.stepRegion}))),r=n.storage?.color,o=n.storage?.text;await t.setSelectionsAndElements(A.stepName,[s],a,(async()=>{t.updateMetadata(A.stepName,{color:r,text:o}),t.updateStorage(A.stepName,{text:o,inputText:o});const n=i.map((A=>new Zt(A.id,e))),a=new Ot(n);t.getCommandDispatcher()(a),t.setMandatoryFulfilled(A.stepName,!0)}));const{command:c}=Pa.updateInputText(o||"",i,A,t);c&&t.getCommandDispatcher()(c)}}}}async getDefaultColorVariant(A,t){if(A.colourOptionId){const e=await ln.getOption(t,A.colourOptionId);if(!e)return;return ln.getDefaultVariant(e.data)}}async getDefaultColor(A,t){if(A.colourOptionId){const e=await ln.getOption(t,A.colourOptionId);if(!e)return;return ln.getDefaultVariant(e.data)?.color}if(A.colour)return A.colour}async getColorOption(A,t){return A.data.colourOptionId?await ln.getOption(t,A.data.colourOptionId):void 0}async fontDataFromVariant(A){if(!A.assetKey)throw new ke(A);const t=await cn.getAssetFromVariant(A),e=t.links.find((A=>"cdn"===A.rel))?.href;if(!e)throw new Je(t.data);return{assetUrl:e,name:(await KA(e)).names.fullName.en}}async selectVariantCommand(A,t,e,n,i,a,s){const r=i.markUpdatePending(),o=await this.fontDataFromVariant(t);if(n.length>0){const c=n.map((A=>new Zt(A.id,o))),g=await this.changeInputTextWithRegion(A,A.data.size||30,o,e.text||"",e,i,!!e.customiseAllText,a,s);g&&c.push(g);return{command:new Ot(c),followup:async()=>{i.markUpdateCompleted(r),await i.setSelectionsAndElements(A.stepName,[t],n)}}}{const n=await this.createTextboxRegions(A.stepName,t,A.data,o,e,i),c=await this.changeInputTextWithRegion(A,A.data.size||30,o,n[0]?.newElement.input||e.text||A.data.defaultText||"",e,i,!!e.customiseAllText,a,s),g=n.flatMap((A=>A.commands));c&&g.push(c);return{command:new Ot(g),followup:async()=>{i.markUpdateCompleted(r)}}}}injectReplaceableText(A,t){return t.replaceableText?t.replaceableText.replace("{{}}",A):A}async createTextboxRegions(A,t,e,n,i,a){if(!e||!e.regions)throw new Error("Step data not supplied");const s=a.getTransaction().bulk&&e.varyText||!1,r=s?"":i.text||e.defaultText||"",o=this.getProcessedInput(r,e,!1),c=await Promise.all(e.regions.map((async t=>{const c=a.getLayouts().find((A=>A.panelId===t.panelId)),g=Y();try{if(!c)throw new Na("Failed to find layout for region: "+t.panelId);const l=a.getServer(),B=e.colourOptionId?await ln.getOption(l,e.colourOptionId):void 0;let w;if(B){const t=B.data.variants.find((A=>A.id===B.data.defaultVariant))||B.data.variants[0];w=this.createTextFillSpotColor(B,t),a.updateStorage(A,{colorProfileAssetKey:B.data.colorProfileAssetKey})}const d=await this.getDefaultColor(e,l),h=d||"#000000",E={stepRegion:t,stepName:A,align:this.textAlign(e),fill:i.color?i.color:h,fontSize:e.size||30,fontData:n,id:g,layer:t.layer,layerIndex:t.layerIndex,rotation:t.rotation,text:o,input:r,type:P.Textbox,vertical:e.vertical,x:t.left,y:t.top,height:t.height,width:t.width,immutable:t.immutable,verticalAlign:e.verticalAlign||"middle",curved:e.curved,paths:e.paths,fillSpotColorDefinition:w},C=[],Q=new Map,u=new Map;if(!E.fontData)throw new je("Failed to resolve font data for text.");const[I,m]=Me(E.fontSize,E.fontData,{left:E.x,top:E.y,width:E.width,height:E.height,rotation:E.rotation,panelId:""},[o],{size:e.size,minSize:e.minSize,maxSize:e.maxSize});Q.set(E.id,I),u.set(E.id,m);const D=e.curved||e.vertical?o:(m||[]).join("\n");C.push(this.generateTextChangeCommandsForRegion(I,e,E.id,D,s));const p=new Lt(E,c);return p.varying=s,{regionElement:{id:g,region:t},commands:[p,...C],newElement:E,fontData:n}}catch(A){throw console.log(A),new Sa("Error adding font to region")}}))).catch((A=>{throw A instanceof Sa?(Ya.setLatestToast("Failed to load font.",Ha.Error),A):A instanceof Na?A:new Error(A)}));return await a.setSelectionsAndElements(A,[t],c.map((A=>A.regionElement)),(async()=>{a.updateMetadata(A,{text:r}),a.updateStorage(A,{text:r})})),c}generateTextChangeCommandsForRegion(A,t,e,n,i){const a=[],s=new _t(e,n);if(s.varying=i,a.push(s),!t.size){const t=new Xt(e,A);t.varying=i,a.push(t)}const r=new Ot(a);return r.varying=i,r}async changeInputTextWithRegion(A,t,e,n,i,a,s,r,o,c){const g=(n||"").replace(/^(?![\u000A\u000D])[\u0000-\u001F\u007F-\u009F]/g,""),l=this.getProcessedInput(g,A.data,s),B=a.getRegionElements(A.stepName),w=new Map,d=new Map;for(const n of B)if(n.region){const[i,a]=Me(t,e,n.region,[l],{size:A.data.size,minSize:A.data.minSize,maxSize:A.data.maxSize});w.set(n.id,i),d.set(n.id,a)}const h=(()=>{if(A.data&&A.data.maxLength&&l.length>A.data.maxLength)return c&&c(!0),{info:"0"};const t=l.toLowerCase(),e=a.getProfanities();for(const A in e)if(t===e[A].toLowerCase().trim()&&""!==t)return r(!0),{error:"Blocked profanity."};if(!A.data.vertical&&!A.data.allowNewlines&&(l.includes("\n")||l.includes("\r")))return r(!0),{error:"Cannot span multiple lines."};if(!A.data.curved){if(!Array.from(d.values()).every((A=>A)))return r(!0),{error:"Does not fit."}}return r(!1),{info:(A.data.maxLength-l.length).toString()}})();if(h.error)return void o(h.error);if(o(`${h.info} characters remaining`||""),c)return;a.updateStorage(A.stepName,{text:g}),a.updateMetadata(A.stepName,{text:this.injectReplaceableText(g,A.data)});const E=a.getTransaction().bulk&&A.data.varyText||!1;i.defaultCleared&&a.setMandatoryFulfilled(A.stepName,!0);const C=[];for(const t of B){const e=A.data.curved?l:(d.get(t.id)||[]).join("\n");C.push(this.generateTextChangeCommandsForRegion(w.get(t.id)||1,A.data,t.id,e,E))}const Q=new Ot(C);return Q.varying=E,Q}};function Ra(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}let Ha;var Ua;(Ua=Ha||(Ha={})).Error="Error",Ua.Warning="Warning",Ua.Info="Info";class ba extends ai{constructor(A){super(),Ra(this,"update",void 0),Ra(this,"createdAt",new Date),this.update=A}async execute(){await this.update(),await new Promise((A=>{window.setTimeout((()=>{A()}),1e3)}))}}class Ga{constructor(A,t,e,n,i,a,s,r,o,c,g,l=!1){Ra(this,"reloadedState",void 0),Ra(this,"transaction",void 0),Ra(this,"updateTransaction",void 0),Ra(this,"confirmedDesign",void 0),Ra(this,"editedSteps",void 0),Ra(this,"informationResults",void 0),Ra(this,"layouts",void 0),Ra(this,"mandatorySteps",void 0),Ra(this,"pendingUpdates",void 0),Ra(this,"selectionCost",void 0),Ra(this,"workflow",void 0),Ra(this,"stepSpecificServices",void 0),Ra(this,"previewService",void 0),Ra(this,"profanityFilter",void 0),Ra(this,"pollers",void 0),Ra(this,"commandContext",void 0),Ra(this,"stepElements",void 0),Ra(this,"stepInitialised",void 0),Ra(this,"stepMetadata",void 0),Ra(this,"stepSelections",void 0),Ra(this,"storage",void 0),Ra(this,"confirmCallbacks",void 0),Ra(this,"editedCallbacks",void 0),Ra(this,"elementsCallbacks",void 0),Ra(this,"informationResultCallbacks",void 0),Ra(this,"initCallbacks",void 0),Ra(this,"makingAdjustmentsCallback",void 0),Ra(this,"mandatoryCallbacks",void 0),Ra(this,"metadataCallbacks",void 0),Ra(this,"selectionCallbacks",void 0),Ra(this,"stepSpecificStorageCallbacks",void 0),Ra(this,"storageCallbacks",void 0),Ra(this,"currentVariationRecordCallbacks",void 0),Ra(this,"variationRecordCallbacks",void 0),Ra(this,"allScenes",void 0),Ra(this,"product",void 0),Ra(this,"invalidModelVariants",void 0),Ra(this,"currentAdjustingStepId",void 0),Ra(this,"renderableContextService",void 0),Ra(this,"workflowStatePromiseQueue",new si(1)),Ra(this,"variationRecords",[]),Ra(this,"currentVariationRecord",void 0),Ra(this,"initializationPromise",void 0),Ra(this,"initialized",!1),Ra(this,"readOnly",!1),Ra(this,"server",void 0),this.updateTransaction=i,this.server=r,this.commandContext=n,this.reloadedState=g,this.transaction=a,this.readOnly=l,this.confirmedDesign=!1,this.editedSteps={},this.informationResults=[],this.mandatorySteps={},this.pendingUpdates=[],this.selectionCost=0,this.workflow=A,this.stepSpecificServices={},this.profanityFilter=t,this.pollers=[],this.allScenes=[],this.layouts=e,this.product=s,this.previewService=o,this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},this.confirmCallbacks=[],this.editedCallbacks=[],this.elementsCallbacks=[],this.informationResultCallbacks=[],this.initCallbacks=[],this.mandatoryCallbacks=[],this.makingAdjustmentsCallback=[],this.metadataCallbacks=[],this.selectionCallbacks=[],this.stepSpecificStorageCallbacks={},this.storageCallbacks=[],this.currentVariationRecordCallbacks=[],this.variationRecordCallbacks=[],this.invalidModelVariants=[],this.currentAdjustingStepId="",this.renderableContextService=c,this.currentVariationRecord=null,this.initializationPromise=this.initializeDefaultWorkflowState(A,a),this.initializationPromise.then((()=>{this.initialized=!0})),this.initializationPromise.catch((A=>{throw console.error(A),this.initialized=!1,new Error("Workflow initialization failed due to an error. See console.")})),this.initializationPromise.finally((()=>this.getCommandContext().registerStateCallback((()=>this.updateStateWithServer()))))}async initializeDefaultWorkflowState(A,t){this.reloadedState&&this.reloadedState.serializableWorkflow.steps.forEach((A=>{this.storage[A.stepName]=A.storage||{}})),this.allScenes=await ia(A,{bulkScene:t.bulk||!1,bulkSceneTitle:"workflow.steps.bulk.title",finishScene:!0,finishSceneTitle:"workflow.steps.finish.confirmDesign"});const e=ra(this.allScenes,this.stepSelections).map((A=>A.silentSteps)).flat(),{stepElements:n,commands:i}=await this.stepElementsForIntroducedSilentSteps(e,!!this.reloadedState);this.commandContext.apply(new Ot(i),!0),this.stepElements={...this.stepElements,...n},await this.ensureStepsAreLoaded(),!this.readOnly&&await this.updateStateWithServerImmediate(),this.reloadedState&&(()=>{const A=this.workflow.finalizeStepConfig;if(!A)return;const t=A.lookAtAnimation,e=A.modelAnimation;t&&this.previewService?.executeCameraAnimation(t),e&&this.previewService?.executeModelAnimation(e)})()}getProduct(){return this.product}getInitializationPromise(){return this.initializationPromise}isInitialized(){return this.initialized}addVariationRecord(A){const t={...A,recordNumber:this.variationRecords.reduce(((A,t)=>t.recordNumber>A?t.recordNumber:A),0)+1};return this.variationRecords.push(t),this.onVariationRecordsChange(),t}removeVariationRecord(A){if(this.variationRecords=this.variationRecords.filter((t=>t.recordNumber!==A)),this.variationRecords.forEach(((A,t)=>{A.recordNumber=t+1})),this.currentVariationRecord&&this.currentVariationRecord.recordNumber===A){const A=this.currentVariationRecord.recordNumber,t=A>1?this.variationRecords[A-2]:this.variationRecords[0];this.setCurrentVariationRecord(t||null)}return this.onVariationRecordsChange(),this.variationRecords}setVariationRecords(A){this.variationRecords=A,this.onVariationRecordsChange(),0===A.length?this.setCurrentVariationRecord(null):this.setCurrentVariationRecord(A[0])}setCurrentVariationRecord(A){if(this.currentVariationRecord=A,this.onCurrentVariationRecordChange(),A){const t=this.variationRecords.findIndex((t=>t.recordNumber===A.recordNumber));-1!==t&&this.variationRecords.splice(t,1),this.variationRecords=[...this.variationRecords,A],this.variationRecords.sort(((A,t)=>A.recordNumber-t.recordNumber)),this.onVariationRecordsChange()}}addConfirmCallback(A){A(this.confirmedDesign),this.confirmCallbacks.push(A)}addEditedCallback(A){A(this.editedSteps),this.editedCallbacks.push(A)}addElementsCallback(A){A(this.stepElements),this.elementsCallbacks.push(A)}addInformationResultCallback(A){A(this.informationResults),this.informationResultCallbacks.push(A)}addInitCallback(A){A(this.stepInitialised),this.initCallbacks.push(A)}addMandatoryCallback(A){A(this.mandatorySteps),this.mandatoryCallbacks.push(A)}addMetadataCallback(A){A(this.stepMetadata),this.metadataCallbacks.push(A)}async addSelectionCallback(A){A({invalidModelVariants:this.invalidModelVariants,selectionCost:this.selectionCost,selections:this.stepSelections,traversableScenes:await this.traversableScenes()}),this.selectionCallbacks.push(A)}addStepSpecificStorageCallback(A,t){Object.keys(this.storage).includes(t)||(this.storage[t]={}),A(this.storage[t]),Object.keys(this.stepSpecificStorageCallbacks).includes(t)||(this.stepSpecificStorageCallbacks[t]=[]),this.stepSpecificStorageCallbacks[t].push(A)}addStorageCallback(A){A(this.storage),this.storageCallbacks.push(A)}addMakingAdjustmentsCallback(A){A(this.currentAdjustingStepId),this.makingAdjustmentsCallback.push(A)}addCurrentVariationCallback(A){A(this.currentVariationRecord),this.currentVariationRecordCallbacks.push(A)}addVariationRecordsCallback(A){A(this.variationRecords),this.variationRecordCallbacks.push(A)}addPoller(A){this.pollers.push(A)}getLayouts(){return this.layouts}getAllLayoutData(){return this.commandContext.getAllLayouts().map((A=>A.layoutState))}getLayoutPreviewService(){return this.renderableContextService}getInformationResults(){return this.informationResults}getPreviewService(){return this.previewService}getProfanities(){return this.profanityFilter}getCommandContext(){return this.commandContext}getRegionElements(A){return this.stepElements[A]||[]}getStepSpecificServices(A){return this.stepSpecificServices[A]}getTransaction(){return this.transaction}setTransactionCustomerDetails(A){this.transaction.bulkEmailAddress=A.email}setTransaction(A){this.transaction=A}getWorkflow(){return this.workflow}getCommandDispatcher(){return A=>this.commandContext.apply(A,!this.initialized)}getServer(){return this.server}getWorkflowSelections(){const A={};return this.workflow.steps.forEach((t=>{const e=this.stepSelections[t.stepName];e&&e.selectedVariants&&e.selectedVariants.length>0&&(A[t.stepName]={selections:e.selectedVariants})})),A}markStepsAsInitialised(A){const t={...this.stepInitialised};A.forEach((A=>{t[A]=!0})),this.stepInitialised=t,this.onInitChange()}getUpdatesPending(){return this.pendingUpdates.length>0}markUpdateCompleted(A){this.pendingUpdates=this.pendingUpdates.filter((t=>t!==A))}markUpdatePending(){const A=Y();return this.pendingUpdates=[...this.pendingUpdates,A],A}setEditedStatus(A,t){this.editedSteps={...this.editedSteps,[A]:t},this.onEditedChange()}setInformationResults(A){this.informationResults=[...A],this.onInformationResultChange()}setCurrentAdjustingStepId(A){this.currentAdjustingStepId=A,this.onMakingAdjustmentsChange()}setMandatoryFulfilled(A,t){this.mandatorySteps[A]!==t&&(this.mandatorySteps={...this.mandatorySteps,[A]:t},this.onMandatoryChange())}toggleDesignConfirmed(){this.confirmedDesign=!this.confirmedDesign,this.onConfirmChange()}toggleMakingAdjustmentsCallback(A){A(this.mandatorySteps),this.mandatoryCallbacks.push(A)}async updateStorage(A,t){const e={...this.storage,[A]:{...this.storage[A],...t}};if(!y(Q)(e,this.storage)){this.storage=e;const t=new bt(this.constructSerializableWorkflow());this.commandContext.apply(t,!0),this.onStepSpecificStorageChange(A),this.onStorageChange()}}constructSerializableWorkflow(){const A=[];return this.allScenes.forEach((t=>{t.renderableSteps.forEach((t=>{const e={stepName:t.stepName};e.storage=this.storage[t.stepName],e.selectedVariants=this.stepSelections[t.stepName]?.selectedVariants?.map((A=>({id:A.id,priceModifier:A.priceModifier}))),A.push(e)}))})),{steps:A}}updateStateWithServer(){if(this.readOnly)return;const A=this.serialize();this.workflowStatePromiseQueue.enqueue(new ba((async()=>{await this.updateTransaction({variables:{id:this.transaction.id,workflowState:A.transaction}})})))}async updateStateWithServerImmediate(){if(this.readOnly)return;const A=this.serialize();return new ba((async()=>{await this.updateTransaction({variables:{id:this.transaction.id,workflowState:A.transaction}})})).execute()}serialize(){const t=this.getCommandContext().getState();if(!t)throw new je("Attempted to serialize state before it was initialized.");const e=JSON.stringify(this.dehydrateState(y(A)(t.transaction))),n=t.variation;if(!n)return{transaction:e};const i={layouts:{},serializableWorkflow:{steps:[]},...y(A)(n)||{}};return{transaction:e,variation:JSON.stringify(this.dehydrateState(i))}}dehydrateState(A){for(const t of Object.values(A.layouts).map((A=>A.elements)).flat())"illustration"===t.type&&(delete t.cachedObjectURL,t.src&&delete t.svg);return A}async outstandingRequestsPromise(){return this.workflowStatePromiseQueue.finalize()}updateMetadata(A,t){this.stepMetadata={...this.stepMetadata,[A]:{...this.stepMetadata[A],...t}},this.onMetadataChange()}removeElements(A){this.stepElements=((A,t)=>Object.keys(A).reduce(((e,n)=>{const i=[...A[n]||[]];return t.forEach((A=>{const t=i.findIndex((t=>t.id===A.id));t>-1&&i.splice(t,1)})),e[n]=i,e}),{}))(this.stepElements,A)}getInvalidCanvasRegions(){return this.workflow.steps.reduce(((A,t)=>(sa(t,this.stepSelections)||this.stepElements[t.stepName]&&this.stepElements[t.stepName].forEach((t=>A.push(t))),A)),[])}getInvalidModelVariants(){return this.workflow.steps.reduce(((A,t)=>("Model"!==t.type||sa(t,this.stepSelections)||t.optionId&&A.push(t.optionId),A)),[])}async stepElementsForIntroducedSilentSteps(A,t){const e=this.product;if(!e)return Promise.resolve({stepElements:{},commands:[]});const n=async(A,t,e)=>{if(A.type===V.SilentIllustration){return{step:A,results:await new da(A,t).trigger()}}if(A.type===V.ProductOverlay){return{step:A,results:await new da(A,t,e).trigger()}}return Promise.reject("Unknown silent step. This is a bug")},i=A.filter((A=>!this.stepInitialised[A.stepName])),a={stepElements:{},commands:[]},s=[];for(const A of i)this.markStepsAsInitialised([A.stepName]),t||s.push(n(A,this.layouts,e));const r=await Promise.all(s);for(const A of r)a.stepElements[A.step.stepName]=A.results.map((A=>A.regionElement)),a.commands=[...a.commands,...A.results.map((A=>A.command))];return a}getStepStorage(A){return this.storage[A]}getMetadata(A){return this.stepMetadata[A]}getWorkflowMetadata(){return this.stepMetadata}getSerializedStep(A,t){return t.find((t=>t.stepName===A))}getCurrentVariationRecord(){return this.currentVariationRecord||void 0}getVariationRecords(){return this.variationRecords}async reset(){this.commandContext.getAllLayouts().forEach((A=>A.layoutState.elements.forEach((A=>{this.getCommandDispatcher()(new Tt(A.id))})))),this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},this.currentVariationRecord=null,await this.ensureStepsAreLoaded()}async setSelectionsAndElements(A,t,e,n){const i=this.stepSelections;this.stepSelections={...this.stepSelections,[A]:{selectedVariants:t}},this.selectionCost=Object.values(this.stepSelections).reduce(((A,t)=>A+t.selectedVariants.map((A=>A.priceModifier)).reduce(((A,t)=>A+t),0)),0),this.workflow.steps.forEach((A=>{sa(A,this.stepSelections)||(this.stepInitialised[A.stepName]=!1,delete this.stepMetadata[A.stepName],delete this.stepSelections[A.stepName],delete this.storage[A.stepName])}));const a=this.allScenes,s=ra(a,i),r=ra(a,this.stepSelections),o=s.map((A=>A.silentSteps)).flat(),c=r.map((A=>A.silentSteps)).flat().filter((A=>!o.some((t=>t.stepName===A.stepName))));o.forEach((A=>{sa(A,this.stepSelections)||(this.stepInitialised[A.stepName]=!1)})),this.invalidModelVariants=this.getInvalidModelVariants();const g=this.getInvalidCanvasRegions(),{stepElements:l,commands:B}=await this.stepElementsForIntroducedSilentSteps(c,!1);this.stepElements={...this.stepElements,...l,[A]:e},this.removeElements(g);if(this.workflow.steps.find((t=>t.stepName===A))?.type===V.Frame){this.getStepSpecificServices(A)?.frameService?.setTargetElements(e.map((A=>A.id)))}const w=[...B,...g.map((A=>new Tt(A.id))),new bt(this.constructSerializableWorkflow())];w.length>0&&this.commandContext.apply(new Ot(w),!0),await this.ensureStepsAreLoaded(),this.onElementsChange(),await this.onSelectionChange(),n&&await n()}async ensureStepsAreLoaded(){const A=[],t=ra(this.allScenes,this.stepSelections).map((A=>A.renderableSteps)).flat();for(const e of t)if(!this.stepInitialised[e.stepName])switch(this.stepInitialised[e.stepName]=!0,e.type){case V.Bulk:this.updateStorage("Bulk",this.reloadedState?.serializableWorkflow.steps.find((A=>"Bulk"===A.stepName))?.storage||{});break;case V.DigitalContent:A.push(Qa.init(e,this,this.reloadedState));break;case V.Frame:case V.Photo:{const t=new Ba(e.data.forceImageCover);t.connectWorkflowManager(this,e.stepName),this.stepSpecificServices[e.stepName]={frameService:t},A.push(Ia.init(e,this,this.reloadedState))}break;case V.Illustration:A.push(ma.init(e,this,this.reloadedState));break;case V.Material:A.push(Da.init(e,this,this.reloadedState));break;case V.Model:A.push(pa.init(e,this,this.reloadedState));break;case V.Module:this.stepSpecificServices[e.stepName]={module:await Mi(e.data.module)},A.push(fa.init(e,this,this.reloadedState));break;case V.Picture:A.push(ya.init(e,this,this.reloadedState));break;case V.Question:A.push(Ma.init(e,this,this.reloadedState));break;case V.Shape:A.push(Fa.init(e,this,this.reloadedState));break;case V.Text:A.push(Pa.init(e,this,this.reloadedState))}const e=(await Promise.allSettled(A)).map((A=>{if("rejected"===A.status)throw new Error(`Step initialization failed: ${A.reason}`);return A.value})),n=e.filter((A=>!!A&&!!A.command)).map((A=>A.command)),i=e.filter((A=>!!A&&!!A.followup)).map((A=>A.followup));n&&n.length>0&&this.commandContext.apply(new Ot(n),!0);for(const A of i)await A();i.length>0&&await this.ensureStepsAreLoaded(),this.onInitChange()}onConfirmChange(){this.confirmCallbacks.forEach((A=>A(this.confirmedDesign)))}onEditedChange(){this.editedCallbacks.forEach((A=>A(this.editedSteps)))}onElementsChange(){this.elementsCallbacks.forEach((A=>A(this.stepElements)))}onInformationResultChange(){this.informationResultCallbacks.forEach((A=>A(this.informationResults)))}onInitChange(){this.initCallbacks.forEach((A=>A(this.stepInitialised)))}onMakingAdjustmentsChange(){this.makingAdjustmentsCallback.forEach((A=>{A(this.currentAdjustingStepId)}))}onMandatoryChange(){this.mandatoryCallbacks.forEach((A=>A(this.mandatorySteps)))}onMetadataChange(){this.metadataCallbacks.forEach((A=>{A(this.stepMetadata)}))}async onSelectionChange(){const A=await this.traversableScenes();for(const t of this.selectionCallbacks)t({invalidModelVariants:this.invalidModelVariants,selectionCost:this.selectionCost,selections:this.stepSelections,traversableScenes:A})}onStepSpecificStorageChange(A){Object.keys(this.stepSpecificStorageCallbacks).includes(A)||(this.stepSpecificStorageCallbacks[A]=[]),this.stepSpecificStorageCallbacks[A].forEach((t=>t(this.storage[A])))}onStorageChange(){this.storageCallbacks.forEach((A=>A(this.storage)))}onCurrentVariationRecordChange(){this.currentVariationRecordCallbacks.forEach((A=>{A(this.currentVariationRecord)}))}onVariationRecordsChange(){this.variationRecordCallbacks.forEach((A=>{A(this.variationRecords)}))}traversableScenes(){return oa(this.allScenes,this.stepSelections)}}function ka(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class Ja{constructor(A,t){ka(this,"manager",void 0),ka(this,"step",void 0),this.manager=A,this.step=t}setUpdateState(A){Ja.updateState.set(this.step.stepName,A)}getUpdateState(){return!!Ja.updateState.get(this.step.stepName)}async getCurrentVariant(){return(await this.manager.getWorkflowSelections())[this.step.stepName]?.selections[0]}async getAvailableVariants(){if(this.step.type===V.Frame&&!this.step.optionId)return[];const A=await ln.getOptionFromStep(this.step,this.manager.getServer());return A?A.data.variants:[]}getName(){return this.step.stepTitle}getId(){return this.step.stepName}getType(){return this.step.type}getHelpText(){return this.step.helpText}}function Oa(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}ka(Ja,"updateState",new Map);const za=w.gql`
|
|
204
|
+
`,ea=A=>{const t=[];for(const e of A.steps)switch(e.type){case V.DigitalContent:e.data.varyUpload&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Upload});break;case V.Frame:const A=e.data;A.varySelection&&e.optionId&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection}),A.varyUpload&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Upload});break;case V.Illustration:const n=e.data;n.varySelection&&e.optionId&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection}),n.varyColors&&n.colourPickerEnabled&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Colors});break;case V.Material:e.data.varySelection&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection});break;case V.Model:e.data.varySelection&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection});break;case V.Picture:e.data.varySelection&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection});break;case V.Question:e.data.varySelections&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selections});break;case V.Shape:e.data.varySelection&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection});break;case V.Text:const i=e.data;i.varyText&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Text}),i.varySelection&&e.optionId&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Selection}),i.varyColor&&i.colourPickerEnabled&&t.push({stepName:e.stepName,stepType:e.type,aspectType:W.Color})}return t},na=[V.SilentIllustration,V.ProductOverlay],ia=async(A,t)=>{const e=[];A.introduction&&e.push({name:"Introduction",title:A.name,renderableSteps:[{type:V.Introduction,stepName:"Introduction",stepTitle:A.name,helpText:A.introduction,data:{},conditions:[]}],silentSteps:[]});for(const n of A.steps){if(t.bulkScene){let A=!1;switch(n.type){case V.DigitalContent:n.data.varyUpload&&(A=!0);break;case V.Frame:{const t=n.data;!t.varyUpload||!t.varySelection&&n.optionId||(A=!0)}break;case V.Illustration:{const t=n.data;!t.varySelection&&n.optionId&&1!==(await ln.getOption(nn,n.optionId)).data.variants.length||!t.varyColors&&t.colourPickerEnabled||(A=!0)}break;case V.Material:n.data.varySelection&&(A=!0);break;case V.Model:n.data.varySelection&&(A=!0);break;case V.Picture:n.data.varySelection&&(A=!0);break;case V.Question:n.data.varySelections&&(A=!0);break;case V.Shape:n.data.varySelection&&(A=!0);break;case V.Text:{const t=n.data;!t.varySelection&&n.optionId&&1!==(await ln.getOption(nn,n.optionId)).data.variants.length||!t.varyColor&&t.colourPickerEnabled&&t.colourOptionId||!t.varyText||(A=!0)}}if(A)continue}const i=aa(n.stepName,A.stepGroups);if(i){const A=e.find((A=>A.name===i.name));A?na.includes(n.type)?A.silentSteps.push(n):A.renderableSteps.push(n):e.push({name:i.name,title:i.name,renderableSteps:na.includes(n.type)?[]:[n],silentSteps:na.includes(n.type)?[n]:[]})}else e.push({name:n.stepName,title:n.stepTitle,renderableSteps:na.includes(n.type)?[]:[n],silentSteps:na.includes(n.type)?[n]:[]})}return t.bulkScene&&e.push({name:"Bulk",title:t.bulkSceneTitle,renderableSteps:[{type:V.Bulk,stepName:"Bulk",stepTitle:t.bulkSceneTitle,helpText:"help:/billing/bulk-ordering.md",data:{aspects:ea(A)},conditions:[]}],silentSteps:[]}),t.finishScene&&e.push({name:"Finish",title:t.finishSceneTitle,renderableSteps:[{type:V.Finish,stepName:"Finish",stepTitle:t.finishSceneTitle,helpText:"",data:{modelAnimation:A.finalizeStepConfig?A.finalizeStepConfig.modelAnimation:void 0,lookAtAnimation:A.finalizeStepConfig?A.finalizeStepConfig.lookAtAnimation:void 0},conditions:[]}],silentSteps:[]}),e},aa=(A,t)=>t.find((t=>t.stepNames.includes(A))),sa=(A,t)=>(A.conditions||[]).every((A=>{const e=t[A.targetStepName];if(e&&e.selectedVariants){const t=e.selectedVariants;return A.requiredVariantSelections.some((A=>void 0!==t.find((t=>t.id===A))))}return!1})),ra=(A,t)=>A.map((A=>((A,t)=>{const e={name:A.name,title:A.title,renderableSteps:A.renderableSteps.filter((A=>sa(A,t))),silentSteps:A.silentSteps.filter((A=>sa(A,t)))};return 0===e.silentSteps.length&&0===e.renderableSteps.length?null:e})(A,t))).filter((A=>null!==A)),oa=async(A,t)=>{const e=ra(A,t),n=[];for(const A of e)for(const t of A.renderableSteps)if(t.type===V.Model||t.type===V.Material||t.type===V.Picture||t.type===V.Shape){const A=(t.option?t.option:t.optionId?await ln.getOption(nn,t.optionId):void 0)?.data.variants.length;A&&A>1&&n.push(t.stepName)}else n.push(t.stepName);const i=e.filter((A=>A.renderableSteps.filter((A=>n.includes(A.stepName))).length>0));for(const A of i)A.renderableSteps=A.renderableSteps.filter((A=>n.includes(A.stepName)));return i};function ca(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}function ga(A,t,e,n){const i=e.width*A.zoom,a=e.height*A.zoom;if(n){const n=A,i=Math.max(t.width/e.width,t.height/e.height);n.zoom=Math.max(i,A.zoom);const a=e.width*n.zoom,s=e.height*n.zoom;return n.x=la(A.x,t.width-a,0),n.y=la(A.y,t.height-s,0),n}const s=A;return s.x=la(s.x,-i,t.width),s.y=la(s.y,-a,t.height),s}function la(A,t,e){return Math.min(Math.max(A,t),e)}class Ba{constructor(A){ca(this,"offsets",void 0),ca(this,"forceImageCover",void 0),ca(this,"targetElements",void 0),ca(this,"imageData",void 0),ca(this,"frameData",void 0),ca(this,"_debouncedUpdateFrameOffsets",void 0),ca(this,"minZoomScale",.03),ca(this,"maxZoomScale",20),ca(this,"onFrameDataChangeListeners",void 0),ca(this,"onZoomChangeListeners",void 0),ca(this,"workflowManager",void 0),ca(this,"stepName",void 0),this._debouncedUpdateFrameOffsets=y(D)(this.updateFrameOffsets,200),this.targetElements=[],this.onFrameDataChangeListeners=[],this.onZoomChangeListeners=[],this.forceImageCover=A}connectWorkflowManager(A,t){t&&A.addStepSpecificStorageCallback((async A=>{if(A){const t=A;if(t.currentFrameSource){const A=await ue(t.currentFrameSource);y(Q)(A,this.frameData)||(this.frameData=A,this.onFrameDataChangeListeners.forEach((A=>A(this.frameData))),this.frameData&&this.imageData&&(this.offsets=Ie(this.imageData,this.frameData),this._debouncedUpdateFrameOffsets(this.offsets,this.imageData,this.frameData,this.targetElements),this.recalculateZoomLimits(this.imageData,this.frameData)))}}}),t),this.workflowManager=A,this.stepName=t}setTargetElements(A){this.targetElements=A}getFrameData(){return this.frameData}async setFrameData(A){const t=he.get(A);this.frameData=t}getImageData(){return this.imageData}getOffsets(){return this.offsets}setOffsets(A){this.offsets=A}setZoom(A,t,e,n){if(this.imageData&&this.offsets&&this.frameData){const i=(t-this.offsets.x)/this.offsets.zoom,a=(e-this.offsets.y)/this.offsets.zoom,s={x:t-i*A,y:e-a*A,zoom:this.imageData.width*A/this.imageData.width};this.updateOffsets(ga(s,this.frameData,this.imageData,this.forceImageCover),n),this.onZoomChangeListeners.forEach((t=>t(A)))}}setPatternData(A){(A&&this.frameData||A&&this.frameData&&!this.imageData)&&(this.offsets=Ie(A,this.frameData),this._debouncedUpdateFrameOffsets(this.offsets,A,this.frameData,this.targetElements),this.updateOffsets(ga(this.offsets,this.frameData,A,this.forceImageCover))),this.imageData=A,this.imageData&&this.frameData&&this.recalculateZoomLimits(this.imageData,this.frameData)}updateOffsets(A,t){const e=this.imageData;e&&this.frameData&&(this.offsets&&A.x===this.offsets.x&&A.y===this.offsets.y&&A.zoom===this.offsets.zoom?t&&t():(this.offsets=ga(A,this.frameData,e,this.forceImageCover),this._debouncedUpdateFrameOffsets(A,e,this.frameData,this.targetElements,t)))}onFrameDataChanged(A){A(this.frameData),this.onFrameDataChangeListeners.push(A)}onZoom(A){this.onZoomChangeListeners.push(A)}updateFrameOffsets(A,t,e,n,i){if(!e)throw new je("Frame data not set. This is a bug");if(!this.workflowManager)throw new je("No workflow manager set, cannot update offsets.");const a=this.workflowManager.getCommandDispatcher();n.forEach((e=>{a(new $t(e,t,A))})),this.stepName&&this.workflowManager.updateStorage(this.stepName,{frameOffsets:A}),i&&i()}recalculateZoomLimits(A,t){const e=Math.max(t.width/A.width,t.height/A.height);this.forceImageCover?(this.minZoomScale=e,this.maxZoomScale=2.5*e):(this.minZoomScale=e/10,this.maxZoomScale=2.5*e)}}function wa(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class da{constructor(A,t,e){wa(this,"configuration",void 0),wa(this,"layouts",void 0),wa(this,"product",void 0),wa(this,"processRegion",(async A=>{const t=this.layouts.find((t=>t.panelId===A.panelId));if(!t)throw new Ge(A);let e="";if(this.configuration.type===V.ProductOverlay){let A="";if(this.product?.overlayImageUrl&&(A=this.product.overlayImageUrl),e=A,!A)throw new Oe(this.configuration,"Couldn't find an asset for product overlay step")}const n=this.evaluateAssetType();if(n===P.Image){const e=this.configuration.type===V.SilentIllustration?this.configuration.data.assetKey:this.product?.overlayImageUrl,i={stepName:this.configuration.stepName,id:Y(),src:e,type:n,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===V.ProductOverlay||void 0,rotation:A.rotation,excludeFromExport:this.configuration.data.excludeFromPrint,preserveAspectRatio:"none"};return{regionElement:{id:i.id,region:A},command:new Lt(i,t)}}{const i=this.configuration.type===V.SilentIllustration?this.configuration.data.assetKey:e,a=async()=>new Promise((A=>{fetch(i).then((t=>{A(t.text())})).catch((A=>console.error(A)))})),s=await yt(await a()),r={stepName:this.configuration.stepName,id:Y(),cachedObjectURL:await Se(s.svg),src:i,svg:s.svg,colors:s.colors,type:n,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===V.ProductOverlay||void 0,excludeFromExport:this.configuration.data.excludeFromPrint};return{regionElement:{id:r.id,region:A},command:new Lt(r,t)}}})),this.configuration=A,this.layouts=t,this.product=e||void 0}async trigger(){if(!this.configuration.data.regions)throw new Oe(this.configuration,"Missing regions.");if(this.configuration.type===V.SilentIllustration){const A=this.configuration.data.regions.map(this.processRegion);return Promise.all(A)}return this.configuration.type===V.ProductOverlay?Promise.all(this.configuration.data.regions.map((A=>{if(!this.layouts.find((t=>A.panelId===t.panelId)))throw new Ge(A);return this.processRegion(A)}))):Promise.reject("Unknown silent step. This is a bug")}evaluateAssetType(){const A=this.configuration.type===V.ProductOverlay&&this.product?.overlayImageUrl?this.product.overlayImageUrl.toLowerCase():this.configuration.data.assetKey?.toLowerCase().split("?")[0];return A?.startsWith("data:image/png")||A?.endsWith(".jpeg")||A?.endsWith(".jpg")||A?.endsWith(".png")?P.Image:(A?.endsWith(".svg")||A?.startsWith("image/svg+xml"),P.Illustration)}}const ha=async A=>{const t=`${$e.getServicesApiUrl()}/shortener`;try{const e=await fetch(t,{method:"POST",body:JSON.stringify({longUrl:A}),headers:{"Content-Type":"application/json"}});return(await e.json()).shortUrl}catch(A){throw console.error(A),new Ke("Failed to shorten URL, see console.")}};function Ea(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class Ca{async poll(){try{if(await this.predicate())return this.onSuccess(),void(this.pollingId>-1&&window.clearInterval(this.pollingId))}catch(A){}this.attempts+=1,this.attempts<this.maxAttempts?this.pollingId=window.setTimeout(this.poll.bind(this),this.interval):this.onFailure()}constructor(A,t,e,n=3e3,i=10){Ea(this,"pollingId",void 0),Ea(this,"attempts",void 0),Ea(this,"interval",void 0),Ea(this,"maxAttempts",void 0),Ea(this,"predicate",void 0),Ea(this,"onSuccess",void 0),Ea(this,"onFailure",void 0),this.onSuccess=t,this.onFailure=e,this.predicate=A,this.attempts=0,this.pollingId=-1,this.interval=n,this.maxAttempts=i,this.poll()}}const Qa=new class{async init(A,t,e){return e&&await this.reload(A,t,e),null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)).map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[],i,(async()=>{const e=n?.storage?.videoShortUrl,i=n?.storage?.videoUrl;t.updateStorage(A.stepName,{videoShortUrl:e,videoUrl:i})}))}async regenerateQRCode(A,t,e,n,i,a,s,r,o){if(t||""===e||""!==n)o(!1);else{const t=async()=>{const A=(await i.getServer().execute("getAssetByKeyV2_private",{assetKey:e.replace(/\//g,"_")})).body,t=A.links.find((A=>"mpeg4"===A.rel));return{asset:A,link:t}},c=await new Promise(((A,e)=>{new Ca((async()=>!!(await t()).link),(async()=>{const e=await t();if(!e.link||!e.link.href)throw new Je(e.asset.data);A(e.link)}),(()=>{e("Poller timed out with 40 attempts @ 3 second interval")}),3e3,40)}));A.forEach((A=>r(new Tt(A.id))));const g="http"===a.data.baseUrl.slice(0,4)?"":"https://",l=new URL(g+a.data.baseUrl);l.searchParams.append("video",btoa(JSON.stringify([c]))),l.pathname=l.pathname+("/"===l.pathname.slice(-1)?"":"/");const B=l.toString();if(B.length>=2e3)throw new Ke("Cannot create QR code, URL too long.");const w=await ha(B);if(s(w),!a.data||!a.data.regions)throw new Oe(a,"Missing regions.");const d=await this.regionElements(a),h=await this.command(w,d,i,a.stepName);h&&(h.command&&i.getCommandDispatcher()(h.command),h.followup&&await h.followup()),await i.setSelectionsAndElements(a.stepName,[],d,(async()=>{i.updateStorage(a.stepName,{videoShortUrl:w,videoUrl:n}),o(!1)}))}}async regionElements(A){return A.data.regions.map((A=>({id:Y(),region:A})))}async command(A,t,e,n){const i=e.getLayouts(),a=`data:image/svg+xml;base64,${btoa(await(0,I.toString)(A,{type:"svg"}))}`,s=t.map((A=>{const t=A.region,e=i.find((A=>A.panelId===t?.panelId));if(!e&&t)throw new Ge(t);if(e&&!t)throw new Error("Region not found");if(!e||!t)throw new Error("Neither a region or layout found!");return new Lt({stepRegion:t,stepName:n,id:A.id,src:a,type:P.Image,y:t.top,x:t.left,width:t.width,height:t.height,rotation:0},e)}));return{command:new Ot(s),followup:async()=>{}}}};function ua(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const Ia=new class{constructor(){ua(this,"frameSourceSvg",(async(A,t)=>{if(!A)return Ce(t.data.regions[0]);if(!A.assetKey)throw new ke(A);const e=await cn.getAssetFromVariant(A),n=e.links.find((A=>"cdn"===A.rel));if(n)return PA(n.href);throw new Je(e.data)}))}async init(A,t,e){if(e)return await this.reload(A,t,e),null;if(t.setMandatoryFulfilled(A.stepName,!1),t.markStepsAsInitialised([A.stepName]),A.optionId){const e=await ln.getOption(t.getServer(),A.optionId);if(e&&e.data.variants.length>0){const n=ln.getDefaultVariant(e.data);if(n)return this.selectVariantCommand(A,n,[],t,void 0,A.data.placeholderImageKey)}return null}return this.selectVariantCommand(A,void 0,[],t,void 0,A.data.placeholderImageKey)}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)).map((A=>({id:A.id,region:A.stepRegion}))),a=(await ln.getOption(t.getServer(),A.optionId))?.data;if(!a||0===a.variants.length){const e=Ce(A.data.regions[0]);t.updateStorage(A.stepName,{currentFrameSource:e})}if(n){const e=async()=>{const e=n.storage?.framePatternSrc,i=n.storage?.frameOffsets;if(t.updateMetadata(A.stepName,{frameOffsets:i,framePatternSrc:e}),e){const n=t.getStepSpecificServices(A.stepName)?.frameService;await this.loadPatternFromString(e,n),t.updateMetadata(A.stepName,{image:e}),t.updateStorage(A.stepName,{framePatternSrc:e})}if(i?.zoom){const e=t.getStepSpecificServices(A.stepName)?.frameService;e.updateOffsets(i)}t.setMandatoryFulfilled(A.stepName,!0)};if(n.selectedVariants&&n.selectedVariants.length>0){const s=n.selectedVariants[0].id;if(a&&s){const n=a.variants.find((A=>A.id===s));n&&await t.setSelectionsAndElements(A.stepName,[n],i,(async()=>{const i=await this.frameSourceSvg(n,A);t.updateStorage(A.stepName,{currentFrameSource:i}),await e()}))}}else await t.setSelectionsAndElements(A.stepName,[],i,e)}}selectImage(A,t,e){e.setEditedStatus(A.stepName,!0);if(t.links.find((A=>"cdn"===A.rel)).href.endsWith("pdf")){const n=e.getServer();e.addPoller(new Ca((async()=>{const A=(await n.execute("getAssetByKeyV2_private",{assetKey:t.data.key.replace(/\//g,"_")})).body.links.find((A=>"svg"===A.rel));if(!A)return!1;return 200===(await fetch(A.href)).status}),(()=>{n.execute("getAssetByKeyV2_private",{assetKey:t.data.key.replace(/\//g,"_")}).then((t=>{const n=t.body;this.loadPatternFromAsset(n,A,e)}))}),(()=>{throw new Ke("Failed to resolve transcoded PDF")})))}else this.loadPatternFromAsset(t,A,e)}async selectVariant(A,t,e,n,i){const a=await this.selectVariantCommand(A,t,e,n,i);a&&(a.command&&n.getCommandDispatcher()(a.command),a.followup&&await a.followup())}getCreateElementCommand(A,t,e,n){return new Lt({id:A,type:P.Frame,x:t.left,y:t.top,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,rotation:t.rotation,scaleX:t.width/n.frameData.width,scaleY:t.height/n.frameData.height,path:n.frameData.path,stepRegion:t,stepName:n.stepName,disablePlaceholder:n.disablePlaceholder,focalBlur:n.focalBlur,focalBlurStrength:n.focalBlurStrength,focalBlurRadius:n.focalBlurRadius,pattern:n.pattern,immutable:t.immutable},e)}async loadPatternFromString(A,t){if(A.endsWith("svg")){const e=await De(A),n=e.width,i=e.height,a={src:A,width:n,height:i,aspect:n/i};de.set(A,a),t.setPatternData(a)}else{const e=await fetch(A),n=await e.arrayBuffer(),i=await Be(n),a={src:A,width:i.width,height:i.height,aspect:i.width/i.height};de.set(A,a),t.setPatternData(a)}}async selectVariantCommand(A,t,e,n,i,a){const s=n.getStepSpecificServices(A.stepName)?.frameService,r=await this.frameSourceSvg(t,A),o=await ue(r),c=s.getImageData(),g=e.map((A=>new Tt(A.id))),l=c?Ie(c,o):void 0,B=c?{id:Y(),src:c.src,x:l?.x||0,y:l?.y||0,width:c.width,height:c.height,scaleX:l?.zoom||1,scaleY:l?.zoom||1,rotation:0}:void 0;i&&i(!0);const w=A.data.regions.map((t=>{const e=Y(),i=n.getLayouts().find((A=>A.panelId===t.panelId));if(!i)throw new Ge(t);return{command:this.getCreateElementCommand(e,t,i,{frameData:o,pattern:B,disablePlaceholder:A.data.disablePlaceholder,focalBlur:A.data.focalBlur,focalBlurStrength:A.data.focalBlurStrength,focalBlurRadius:A.data.focalBlurRadius,stepName:A.stepName}),regionEl:{id:e,region:t}}})),d=w.map((A=>A.command));return{command:new Ot([...d,...g]),followup:async()=>{i&&i(!1),await n.setSelectionsAndElements(A.stepName,t?[t]:[],[...w.map((A=>A.regionEl))],(async()=>{if(n.updateStorage(A.stepName,{currentFrameSource:r}),a){const t=n.getStepSpecificServices(A.stepName)?.frameService;await this.loadPatternFromString(a,t)}}))}}}patternSource(A){const t=A.links.find((A=>"svg"===A.rel));if(t)return t.href;const e=A.links.find((A=>"cdn"===A.rel));if(e)return e.href;throw new Je(A.data)}async loadPatternFromAsset(A,t,e){const n=this.patternSource(A),i=e.markUpdatePending(),a=e.getStepSpecificServices(t.stepName)?.frameService;await this.loadPatternFromString(n,a),e.updateMetadata(t.stepName,{image:n}),e.updateStorage(t.stepName,{framePatternSrc:n}),e.markUpdateCompleted(i)}};const ma=new class{async getIllustrationBody(A){return new Promise((t=>{fetch(A).then((A=>{t(A.text())})).catch((A=>console.error(A)))}))}getCreateElementCommand(A,t,e,n){return new Lt({stepRegion:t,stepName:n.stepName,colors:n.svg.colors,id:A,src:n.src,svg:n.svg.svg,cachedObjectURL:n.objectURL,type:P.Illustration,y:t.top,x:t.left,rotation:t.rotation,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,immutable:t.immutable},e)}getColors(A,t){const e=t.getRegionElements(A.stepName)||[];if(0===e.length)return[];try{return Nt(e[0].id,t.getAllLayoutData()).colors}catch(A){return[]}}async init(A,t,e){const n=await ln.getOptionFromStep(A,t.getServer());if(!n)return null;if(e)return this.reload(A,t,e);{const e=ln.getDefaultVariant(n.data);if(e)return await this.selectVariantCommand(A,e,[],(()=>{}),t)}return null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)),a=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(!a||!e)throw new Error("Required illustration variant no longer available");{const s=a.variants.find((A=>A.id===e));if(s){const e=i.map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[s],e,(async()=>{t.updateMetadata(A.stepName,{colors:n.storage?.colors}),t.setMandatoryFulfilled(A.stepName,!0)}))}}}return null}async availableColors(A,t){if(A.data.colourOptionId){const e=await ln.getOption(t.getServer(),A.data.colourOptionId);return e?e.data.variants.map((A=>({fill:A.color,stroke:A.color,variant:A}))):[]}return[]}async changeColorsCommand(A,t,e,n,i){const a={};for(const[A,t]of i.entries())a[A]={browserValue:t,spotColor:a[A]?.spotColor};const s=ft(A,t,e,a),r=await Se(s),o=[];for(const A of n){for(const[t,e]of i.entries())o.push(new Ae(A,t,e));o.push(new te(A,s,r))}return new Ot(o)}async changeColors(A,t,e,n,i){if(0===t.length)return;const a=Nt(t[0].id,n().map((A=>A.layoutState))),s={...a.colors},r={};Object.entries(s).forEach((([A,t])=>{const e={browserValue:t.browserValue},n=t.spotColor;n&&(e.spotColor={profileName:n.profileName,namedColor:n.namedColor}),r[A]=e}));for(const[A,t]of i.entries())s[A]={browserValue:t,spotColor:s[A]?.spotColor},r[A]={browserValue:t};let o=Array.from(Object.values(s)).map((A=>A.browserValue));const c=A.data.colourOptionId?await ln.getOption(e.getServer(),A.data.colourOptionId):void 0;c&&c.data.variants.forEach((A=>{o=o.map((t=>t.toLowerCase()===A.color?.toLowerCase()?A.name:t))})),e.updateMetadata(A.stepName,{colors:o});const g=new Map;if(Object.entries(s).forEach((([A,t])=>{g.set(A,t.browserValue)})),!a.svg)throw new Error("Colors changed before SVG loaded. This should never happen!");const l=await this.changeColorsCommand(a.svg,a.width,a.height,t.map((A=>A.id)),g);e.updateStorage(A.stepName,{colors:r}),e.getCommandDispatcher()(l)}async selectVariant(A,t,e,n,i){const a=await this.selectVariantCommand(A,t,e,n,i);a&&(a.command&&i.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantCommand(A,t,e,n,i){if(!A.data||!A.data.regions)throw new Oe(A,"Missing regions.");n(!0);const a=e.map((A=>new Tt(A.id)));if(i.setMandatoryFulfilled(A.stepName,!1),!t.assetKey)throw new ke(t);const s=await cn.getAssetFromVariant(t),r=s.links.find((A=>"cdn"===A.rel));if(!r)throw new Je(s.data);const o=await yt(await this.getIllustrationBody(r.href)),c=await Se(o.svg),g=A.data.regions.map((t=>{const e=i.getLayouts().find((A=>A.panelId===t.panelId));if(!e)throw new Ge(t);const n=Y();return{regionElement:{id:n,region:t},command:this.getCreateElementCommand(n,t,e,{stepName:A.stepName,src:r.href,objectURL:c,svg:o})}})),l=[...g.map((A=>A.command)),...a];let B=Array.from(Object.values(o.colors)).map((A=>A.browserValue));const w=A.data.colourOptionId?await ln.getOption(i.getServer(),A.data.colourOptionId):void 0;return w&&w.data.variants.forEach((A=>{B=B.map((t=>t.toLowerCase()===A.color?.toLowerCase()?A.name:t))})),i.updateMetadata(A.stepName,{colors:B}),{command:new Ot(l),followup:async()=>{await i.setSelectionsAndElements(A.stepName,[t],g.map((A=>A.regionElement)),(async()=>{i.setMandatoryFulfilled(A.stepName,!0),n(!1)}))}}}};const Da=new class{async init(A,t,e){const n=await ln.getOptionFromStep(A,t.getServer());if(!n)throw new be(A);if(e)await this.reload(A,t,e);else{const e=ln.getDefaultVariant(n.data);if(e)return await this.selectVariantLambda(A,e,t,(()=>{}))}return null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)),a=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(!a)throw new be(A);if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(e){const n=a.variants.find((A=>A.id===e));if(n){const e=await cn.getMaterialFromVariant(n),a=i.map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[n],a,(async()=>{const n=t.getPreviewService();if(n){const i=A.data.targetMaterials.map((t=>n.applyMaterialVariant(t,A.optionId,e.data)));Promise.all(i).then((()=>t.setMandatoryFulfilled(A.stepName,!0)))}}))}}}}async selectVariant(A,t,e,n){const i=await this.selectVariantLambda(A,t,e,n);i&&(i.command&&e.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantLambda(A,t,e,n){const i=e.getPreviewService();n(!0);const a=await cn.getMaterialFromVariant(t);if(!a)throw n(!1),new ke(t);return{command:void 0,followup:async()=>{await e.setSelectionsAndElements(A.stepName,[t],[],(async()=>{try{i&&A.data.targetMaterials.forEach((t=>{i.applyMaterialVariant(t,A.optionId,a.data)})),e.setMandatoryFulfilled(A.stepName,!0)}finally{n(!1)}}))}}}};const pa=new class{async init(A,t,e){const n=await ln.getOptionFromStep(A,t.getServer());if(!n)throw new be(A);if(e)await this.reload(A,t,e);else{const e=ln.getDefaultVariant(n.data);if(e)return await this.selectVariantLambda(A,e,t,(()=>{}))}return null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)),a=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(a&&e){const n=a.variants.find((A=>A.id===e));if(n){const e=i.map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[n],e,(async()=>{const e=t.getPreviewService();if(e){const i=(await cn.getAssetFromVariant(n)).links.find((A=>"cdn"===A.rel));if(!i)throw new ke(n);await e.applyModelVariant(A.optionId,{model:i.href,contextService:t.getLayoutPreviewService()},A.data.replaceProductModel||!1),t.setMandatoryFulfilled(A.stepName,!0)}}))}}}}async selectVariant(A,t,e,n){const i=await this.selectVariantLambda(A,t,e,n);i&&(i.command&&e.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantLambda(A,t,e,n){n(!0);const i=(await cn.getAssetFromVariant(t)).links.find((A=>"cdn"===A.rel));if(!i)throw new ke(t);return{command:void 0,followup:async()=>{await e.setSelectionsAndElements(A.stepName,[t],[],(async()=>{try{const t=e.getPreviewService();t&&t.applyModelVariant(A.optionId,{model:i.href,contextService:e.getLayoutPreviewService()},A.data.replaceProductModel||!1),e.setMandatoryFulfilled(A.stepName,!0)}finally{n(!1)}}))}}}};const fa=new class{async init(A,t,e){return e?(await this.reload(A,t,e),null):(t.updateMetadata(A.stepName,{text:""}),this.changeTextCommand(A,"",t,"",(()=>{})))}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)).map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[],i,(async()=>{t.updateStorage(A.stepName,{text:n?.storage?.text}),t.setMandatoryFulfilled(A.stepName,""!==n?.storage?.text)}))}async changeText(A,t,e,n,i){const a=await this.changeTextCommand(A,t,e,n,i);a&&(a.command&&e.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async changeTextCommand(A,t,e,n,i){const a=e.getRegionElements(A.stepName),s=e.getStepSpecificServices(A.stepName)?.module;if(!s)return console.error("Missing module."),null;const r=e.getProfanities();if(!this.validateInput(A,t,r,i))return e.setMandatoryFulfilled(A.stepName,!1),console.error(n),null;if(e.setMandatoryFulfilled(A.stepName,""!==t),!A.data||!A.data.regions||A.data.regions.length<=0)return console.error("Missing configuration."),null;e.updateStorage(A.stepName,{text:t});const o=(t,n,i)=>{const a=i||Y(),s=e.getLayouts().find((A=>A.panelId===n.panelId));if(!s)return console.error(`Can not find layout for region: ${n.panelId}`),null;const r=[];return i&&r.push(new Tt(a)),r.push(new Lt({stepRegion:n,stepName:A.stepName,colors:{},id:a,svg:t,type:P.Illustration,y:n.top,x:n.left,rotation:n.rotation,width:n.width,height:n.height,layer:n.layer,layerIndex:n.layerIndex,immutable:n.immutable},s)),{id:a,region:n,command:new Ot(r)}};if(a.length>0){const A=a.map((A=>{if(!A.region)return null;const e=s.svgPrint(t,A.region);return o(e,A.region,A.id)})).filter((A=>!!A)).filter((A=>!!A)).map((A=>A&&A.command));return{command:new Ot(A),followup:async()=>{}}}{const n=A.data.regions.map((A=>o(s.svgPrint(t,A),A))),i=n.filter((A=>!!A)).map((A=>A&&A.command));return{command:new Ot(i),followup:async()=>{const t=n.filter((A=>A)).map((A=>A&&{id:A.id,region:A.region}));await e.setSelectionsAndElements(A.stepName,[],t)}}}}validateInput(A,t,e,n){if(A.data&&A.data.maxLength){const e=A.data.maxLength;if(t.length>e)return n("Too many characters."),!1}if(!/^$|^[a-zA-Z0-9 ]+$/.test(t))return n("Unsupported characters."),!1;const i=t.toLowerCase();for(const A in e)if(i===e[A].toLowerCase().trim()&&""!==i)return n("Blocked profanity."),!1;return n(""),!0}};const ya=new class{async init(A,t,e){const n=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(!n)return null;if(e)await this.reload(A,t,e);else if(n.defaultVariant){const e=n.defaultVariant,i=n.variants.find((A=>!!A.assetKey&&A.id===e));if(i)return t.markStepsAsInitialised([A.stepName]),this.selectVariantCommand(A,i,t,(()=>{}))}return t.markStepsAsInitialised([A.stepName]),null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)),a=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(a&&e){const n=a.variants.find((A=>A.id===e));if(n){const e=i.map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[n],e,(async()=>{t.setMandatoryFulfilled(A.stepName,!0)}))}}}}async selectVariant(A,t,e,n){const i=await this.selectVariantCommand(A,t,e,n);i&&(i.command&&e.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantCommand(A,t,e,n){if(!t.assetKey)throw new ke(t);const i=(await cn.getAssetFromVariant(t)).links.find((A=>"cdn"===A.rel));if(!i)return console.error("No URL for picture!"),null;const a=i.href;n(!0),e.setMandatoryFulfilled(A.stepName,!1);const s=e.getRegionElements(A.stepName).map((A=>new Tt(A.id))),r=A.data.regions.map((t=>{const n=e.getLayouts().find((A=>A.panelId===t.panelId));if(!n)throw new Ge(t);const i=Y();return{regionElement:{id:i,region:t},command:new Lt({stepName:A.stepName,stepRegion:t,id:i,src:a,type:P.Image,y:t.top,x:t.left,rotation:t.rotation,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,immutable:t.immutable,preserveAspectRatio:"none"},n)}}));return{command:new Ot([...s,...r.map((A=>A.command))]),followup:async()=>{await e.setSelectionsAndElements(A.stepName,[t],r.map((A=>A.regionElement)),(async()=>{e.setMandatoryFulfilled(A.stepName,!0),n(!1)}))}}}};const Ma=new class{async init(A,t,e){const n=await ln.getOptionFromStep(A,t.getServer());if(!n)return null;if(e)await this.reload(A,t,e);else{const e=n.data.variants;if(ln.getDefaultVariant(n.data)){const i=e.find((A=>A.id===n.data.defaultVariant));return this.selectVariantLambda(A,i?.id||"",t)}}return null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(i&&e){const n=i.variants.find((A=>A.id===e));n&&await t.setSelectionsAndElements(A.stepName,[n],[])}}}async selectVariant(A,t,e){const n=await this.selectVariantLambda(A,t,e);n&&(n.command&&e.getCommandDispatcher()(n.command),n.followup&&await n.followup())}async selectVariantLambda(A,t,e){const n=await ln.getOptionFromStep(A,e.getServer());if(!n)return null;const i=n.data.variants,a=i.length>1?i.find((A=>A.id===t)):i[0];if(!a)throw new Error("Failed to find selected variant in step variants, this should never happen!");return{command:void 0,followup:async()=>{await e.setSelectionsAndElements(A.stepName,[a],[],(async()=>{e.setMandatoryFulfilled(A.stepName,!0)}))}}}};const Fa=new class{async availableColours(A,t){const e=await ln.getOptionFromStep(A,t.getServer());return e?e.data.variants.map((A=>({fill:A.color,stroke:A.color,variant:A}))):[]}async init(A,t,e){const n=await ln.getOptionFromStep(A,t.getServer());if(!n)throw new be(A);if(!e){const e=ln.getDefaultVariant(n.data);if(!e)return null;const i={fill:e.color,stroke:e.color,variant:e};return this.selectVariantCommand(A,i,[],t)}return await this.reload(A,t,e),null}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)),a=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(a&&e){const n=a.variants.find((A=>A.id===e));if(n){const e=i.map((A=>({id:A.id,region:A.stepRegion})));await t.setSelectionsAndElements(A.stepName,[n],e,(async()=>{t.updateStorage(A.stepName,{colour:n.color||""}),t.setMandatoryFulfilled(A.stepName,!0)}))}}}}async selectVariant(A,t,e,n){const i=await this.selectVariantCommand(A,t,e,n);i&&(i.command&&n.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantCommand(A,t,e,n){const i=n.getLayouts();if(e.length>0){const a=A=>{const e=A.region;if(!i.find((A=>A.panelId===e?.panelId)))throw new Ge(e);const n=t.variant?.color;return n?new Ae(A.id,"spiff-fill-shape",n):(console.error("Failed to change color."),null)},s=e.map(a).filter((A=>!!A));return{command:new Ot(s),followup:async()=>{await n.setSelectionsAndElements(A.stepName,t.variant?[t.variant]:[],e),n.updateStorage(A.stepName,{colour:t.fill||""})}}}{const e=e=>{const n=i.find((A=>A.panelId===e.panelId));if(!n)throw new Ge(e);const a=`\n <svg\n xmlns="http://www.w3.org/2000/svg"\n xmlnsXlink="http://www.w3.org/1999/xlink"\n xmlSpace="preserve"\n preserveAspectRatio="none"\n version="1.1"\n width="1"\n height="1"\n viewBox="0 0 1 1"\n >\n <rect\n x="0"\n y="0"\n width="1"\n height="1"\n class="spiff-fill-shape"\n fill="${t.variant?.color}"\n />\n </svg>\n `,s={};s["spiff-fill-shape"]={browserValue:t.variant.color};const r=Y();return{id:r,region:e,command:new Lt({stepRegion:e,stepName:A.stepName,colors:s,id:r,svg:a,type:P.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,excludeFromExport:A.data.excludeFromPrint},n)}},a=A.data.regions.map(e),s=a.filter((A=>!!A)).map((A=>A?.command)),r=a.filter((A=>!!A)).map((A=>({id:A.id,region:A.region})));return{command:new Ot(s),followup:async()=>{await n.setSelectionsAndElements(A.stepName,t.variant?[t.variant]:[],r,(async()=>{n.updateStorage(A.stepName,{colour:t.fill||""})}))}}}}};function xa(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const Ya=new class{constructor(){xa(this,"latestToast",void 0),xa(this,"toastType",void 0),xa(this,"toastCallbacks",void 0),this.latestToast=null,this.toastType=null,this.toastCallbacks=[]}addToastCallback(A){A({toastMessage:this.latestToast,toastType:this.toastType}),this.toastCallbacks.push(A)}setLatestToast(A,t){this.latestToast=A,this.toastType=t,this.onToastChange()}onToastChange(){this.toastCallbacks.forEach((A=>A({toastMessage:this.latestToast,toastType:this.toastType})))}};function va(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class Sa extends Error{constructor(A){super(A),Object.setPrototypeOf(this,new.target.prototype),this.name=Sa.name}}class Na extends Error{constructor(A){super(A),Object.setPrototypeOf(this,new.target.prototype),this.name=Na.name}}const Pa=new class{constructor(){va(this,"cachedColors",new Map),va(this,"filterUnsupportedCharacters",((A,t)=>{let e=A.replace(/(\r\n|\r|(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]))/gm,"");const n=[],i=t?XA(t):void 0;if(i){const A=e.split("").map((A=>i.getFont().charToGlyph(A)));for(let t=0;t<A.length;t++){const i=".notdef"===A[t].name;"\n"===e.charAt(t)||i&&n.push(String.fromCharCode(e.charCodeAt(t)))}}for(let A=0;A<n.length;A++)e=e.replaceAll(n[A],"");return e})),va(this,"textAlign",(A=>A.vertical?"center":A.textAlign||"center")),va(this,"getErrorsForText",((A,t,e)=>{const n=[];t.data&&t.data.maxLength&&A.length>t.data.maxLength&&n.push({localizationKey:"workflow.steps.text.characterLimit"});const i=e.getProfanities(),a=A.toLowerCase();if(""!==a)for(const A in i){if(a===i[A].toLowerCase().trim()){n.push({localizationKey:"workflow.steps.text.blockedProfanity"});break}}return!t.data.allowNewlines&&(A.includes("\n")||A.includes("\r"))&&n.push({localizationKey:"workflow.steps.text.multipleLines"}),n}))}async init(A,t,e){const n=await ln.getOptionFromStep(A,t.getServer());if(!n)return null;if(e)await this.reload(A,t,e);else{const e=t.getServer();t.updateStorage(A.stepName,{inputText:A.data.defaultText||"",color:(await this.getDefaultColorVariant(A.data,e))?.color||await this.getDefaultColor(A.data,e)}),t.updateMetadata(A.stepName,{text:A.data.defaultText||"",color:(await this.getDefaultColorVariant(A.data,e))?.name||await this.getDefaultColor(A.data,e)});const i=ln.getDefaultVariant(n.data);if(i)return this.selectVariantCommand(A,i,{},[],t,(()=>{}),(()=>{}))}return null}findLayoutElements(A,t){return A.getRegionElements(t.stepName).map((t=>Nt(t.id,A.getAllLayoutData())))}async availableColors(A,t){const e=this.cachedColors.get(A.stepName);if(e)return e;if(A.data.colourOptionId){const e=(await ln.getOption(t.getServer(),A.data.colourOptionId)).data.variants.map((A=>({fill:A.color,stroke:A.color,variant:A})));return this.cachedColors.set(A.stepName,e),e}return[]}async changeFill(A,t,e,n){if(!A.data||!A.data.regions)return;const i=n.getCommandDispatcher();t.variant?n.updateMetadata(A.stepName,{color:t.variant.name}):n.updateMetadata(A.stepName,{color:t.fill});const a=await this.getColorOption(A,n.getServer()),s=a?this.createTextFillSpotColor(a,t.variant):void 0;a?n.updateStorage(A.stepName,{color:t.fill,colorProfileAssetKey:a.data.colorProfileAssetKey}):n.updateStorage(A.stepName,{color:t.fill});for(const A of e){if(!t.fill)throw new Error("Fill not set on new color selection!");i(new Vt(A.id,t.fill,s))}}getProcessedInput(A,t,e){const n=e?A:this.injectReplaceableText(A,t);return rt(n,{vertical:t.vertical,uppercase:t.uppercase})}updateInputText(A,t,e,n){const i=n.getStepStorage(e.stepName),a=this.getProcessedInput(A,e.data,!!i.customiseAllText),s={command:void 0,helperText:"",errors:this.getErrorsForText(A,e,n)};if(s.errors.length>0)return s.helperText=s.errors[0].localizationKey,s;const r=(e.data.maxLength-a.length).toString();s.helperText=`${r} characters remaining`;const o=n.getTransaction().bulk&&e.data.varyText||!1,c=[],g=new Map,l=new Map;for(const A of t){if(!A.fontData)throw new je("Failed to resolve font data for text.");const[t,n]=Me(A.fontSize,A.fontData,{left:A.x,top:A.y,width:A.width,height:A.height,rotation:A.rotation,panelId:""},[a],{size:e.data.size,minSize:e.data.minSize,maxSize:e.data.maxSize});g.set(A.id,t),l.set(A.id,n);const i=e.data.curved?a:(n||[]).join("\n");c.push(this.generateTextChangeCommandsForRegion(t,e.data,A.id,i,o))}if(!e.data.curved&&t.length>0){if(!Array.from(l.values()).every((A=>A)))return s.errors.push({localizationKey:"workflow.steps.text.doesNotFit"}),s}return n.updateStorage(e.stepName,{text:A}),n.updateMetadata(e.stepName,{text:a}),i.defaultCleared&&n.setMandatoryFulfilled(e.stepName,!0),s.command=new Ot(c),s.command.varying=o,s}async selectVariant(A,t,e,n,i){const a=await this.selectVariantCommand(A,t,e.getStepStorage(A.stepName)||{},e.getRegionElements(A.stepName),e,n,i);a&&(a.command&&e.getCommandDispatcher()(a.command),a.followup&&await a.followup())}createTextFillSpotColor(A,t){const e=A.data.colorProfileAssetKey;if(""!==e&&void 0!==e){const A=e.replace(/\s/g,"-"),n=A.lastIndexOf("/"),i=A.slice(n+1).slice(0,-4);if(!t.namedColor)throw new Error("variant named color not set!");return{profileName:i,namedColor:t.namedColor}}}async reload(A,t,e){const n=t.getSerializedStep(A.stepName,e.serializableWorkflow.steps),i=Object.values(e.layouts).map((A=>A.elements)).flat().filter((t=>t.stepName===A.stepName)),a=(await ln.getOptionFromStep(A,t.getServer()))?.data;if(n?.selectedVariants){const e=n.selectedVariants[0].id;if(a&&e){const s=a.variants.find((A=>A.id===e));if(s){const e=await this.fontDataFromVariant(s),a=i.map((A=>({id:A.id,region:A.stepRegion}))),r=n.storage?.color,o=n.storage?.text;await t.setSelectionsAndElements(A.stepName,[s],a,(async()=>{t.updateMetadata(A.stepName,{color:r,text:o}),t.updateStorage(A.stepName,{text:o,inputText:o});const n=i.map((A=>new Zt(A.id,e))),a=new Ot(n);t.getCommandDispatcher()(a),t.setMandatoryFulfilled(A.stepName,!0)}));const{command:c}=Pa.updateInputText(o||"",i,A,t);c&&t.getCommandDispatcher()(c)}}}}async getDefaultColorVariant(A,t){if(A.colourOptionId){const e=await ln.getOption(t,A.colourOptionId);if(!e)return;return ln.getDefaultVariant(e.data)}}async getDefaultColor(A,t){if(A.colourOptionId){const e=await ln.getOption(t,A.colourOptionId);if(!e)return;return ln.getDefaultVariant(e.data)?.color}if(A.colour)return A.colour}async getColorOption(A,t){return A.data.colourOptionId?await ln.getOption(t,A.data.colourOptionId):void 0}async fontDataFromVariant(A){if(!A.assetKey)throw new ke(A);const t=await cn.getAssetFromVariant(A),e=t.links.find((A=>"cdn"===A.rel))?.href;if(!e)throw new Je(t.data);return{assetUrl:e,name:(await KA(e)).names.fullName.en}}async selectVariantCommand(A,t,e,n,i,a,s){const r=i.markUpdatePending(),o=await this.fontDataFromVariant(t);if(n.length>0){const c=n.map((A=>new Zt(A.id,o))),g=await this.changeInputTextWithRegion(A,A.data.size||30,o,e.text||"",e,i,!!e.customiseAllText,a,s);g&&c.push(g);return{command:new Ot(c),followup:async()=>{i.markUpdateCompleted(r),await i.setSelectionsAndElements(A.stepName,[t],n)}}}{const n=await this.createTextboxRegions(A.stepName,t,A.data,o,e,i),c=await this.changeInputTextWithRegion(A,A.data.size||30,o,n[0]?.newElement.input||e.text||A.data.defaultText||"",e,i,!!e.customiseAllText,a,s),g=n.flatMap((A=>A.commands));c&&g.push(c);return{command:new Ot(g),followup:async()=>{i.markUpdateCompleted(r)}}}}injectReplaceableText(A,t){return t.replaceableText?t.replaceableText.replace("{{}}",A):A}async createTextboxRegions(A,t,e,n,i,a){if(!e||!e.regions)throw new Error("Step data not supplied");const s=a.getTransaction().bulk&&e.varyText||!1,r=s?"":i.text||e.defaultText||"",o=this.getProcessedInput(r,e,!1),c=await Promise.all(e.regions.map((async t=>{const c=a.getLayouts().find((A=>A.panelId===t.panelId)),g=Y();try{if(!c)throw new Na("Failed to find layout for region: "+t.panelId);const l=a.getServer(),B=e.colourOptionId?await ln.getOption(l,e.colourOptionId):void 0;let w;if(B){const t=B.data.variants.find((A=>A.id===B.data.defaultVariant))||B.data.variants[0];w=this.createTextFillSpotColor(B,t),a.updateStorage(A,{colorProfileAssetKey:B.data.colorProfileAssetKey})}const d=await this.getDefaultColor(e,l),h=d||"#000000",E={stepRegion:t,stepName:A,align:this.textAlign(e),fill:i.color?i.color:h,fontSize:e.size||30,fontData:n,id:g,layer:t.layer,layerIndex:t.layerIndex,rotation:t.rotation,text:o,input:r,type:P.Textbox,vertical:e.vertical,x:t.left,y:t.top,height:t.height,width:t.width,immutable:t.immutable,verticalAlign:e.verticalAlign||"middle",curved:e.curved,paths:e.paths,fillSpotColorDefinition:w},C=[],Q=new Map,u=new Map;if(!E.fontData)throw new je("Failed to resolve font data for text.");const[I,m]=Me(E.fontSize,E.fontData,{left:E.x,top:E.y,width:E.width,height:E.height,rotation:E.rotation,panelId:""},[o],{size:e.size,minSize:e.minSize,maxSize:e.maxSize});Q.set(E.id,I),u.set(E.id,m);const D=e.curved||e.vertical?o:(m||[]).join("\n");C.push(this.generateTextChangeCommandsForRegion(I,e,E.id,D,s));const p=new Lt(E,c);return p.varying=s,{regionElement:{id:g,region:t},commands:[p,...C],newElement:E,fontData:n}}catch(A){throw console.log(A),new Sa("Error adding font to region")}}))).catch((A=>{throw A instanceof Sa?(Ya.setLatestToast("Failed to load font.",Ha.Error),A):A instanceof Na?A:new Error(A)}));return await a.setSelectionsAndElements(A,[t],c.map((A=>A.regionElement)),(async()=>{a.updateMetadata(A,{text:r}),a.updateStorage(A,{text:r})})),c}generateTextChangeCommandsForRegion(A,t,e,n,i){const a=[],s=new _t(e,n);if(s.varying=i,a.push(s),!t.size){const t=new Xt(e,A);t.varying=i,a.push(t)}const r=new Ot(a);return r.varying=i,r}async changeInputTextWithRegion(A,t,e,n,i,a,s,r,o,c){const g=(n||"").replace(/^(?![\u000A\u000D])[\u0000-\u001F\u007F-\u009F]/g,""),l=this.getProcessedInput(g,A.data,s),B=a.getRegionElements(A.stepName),w=new Map,d=new Map;for(const n of B)if(n.region){const[i,a]=Me(t,e,n.region,[l],{size:A.data.size,minSize:A.data.minSize,maxSize:A.data.maxSize});w.set(n.id,i),d.set(n.id,a)}const h=(()=>{if(A.data&&A.data.maxLength&&l.length>A.data.maxLength)return c&&c(!0),{info:"0"};const t=l.toLowerCase(),e=a.getProfanities();for(const A in e)if(t===e[A].toLowerCase().trim()&&""!==t)return r(!0),{error:"Blocked profanity."};if(!A.data.vertical&&!A.data.allowNewlines&&(l.includes("\n")||l.includes("\r")))return r(!0),{error:"Cannot span multiple lines."};if(!A.data.curved){if(!Array.from(d.values()).every((A=>A)))return r(!0),{error:"Does not fit."}}return r(!1),{info:(A.data.maxLength-l.length).toString()}})();if(h.error)return void o(h.error);if(o(`${h.info} characters remaining`||""),c)return;a.updateStorage(A.stepName,{text:g}),a.updateMetadata(A.stepName,{text:this.injectReplaceableText(g,A.data)});const E=a.getTransaction().bulk&&A.data.varyText||!1;i.defaultCleared&&a.setMandatoryFulfilled(A.stepName,!0);const C=[];for(const t of B){const e=A.data.curved?l:(d.get(t.id)||[]).join("\n");C.push(this.generateTextChangeCommandsForRegion(w.get(t.id)||1,A.data,t.id,e,E))}const Q=new Ot(C);return Q.varying=E,Q}};function Ra(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}let Ha;var Ua;(Ua=Ha||(Ha={})).Error="Error",Ua.Warning="Warning",Ua.Info="Info";class ba extends ai{constructor(A){super(),Ra(this,"update",void 0),Ra(this,"createdAt",new Date),this.update=A}async execute(){await this.update(),await new Promise((A=>{window.setTimeout((()=>{A()}),1e3)}))}}class Ga{constructor(A,t,e,n,i,a,s,r,o,c,g,l=!1){Ra(this,"reloadedState",void 0),Ra(this,"transaction",void 0),Ra(this,"updateTransaction",void 0),Ra(this,"confirmedDesign",void 0),Ra(this,"editedSteps",void 0),Ra(this,"informationResults",void 0),Ra(this,"layouts",void 0),Ra(this,"mandatorySteps",void 0),Ra(this,"pendingUpdates",void 0),Ra(this,"selectionCost",void 0),Ra(this,"workflow",void 0),Ra(this,"stepSpecificServices",void 0),Ra(this,"previewService",void 0),Ra(this,"profanityFilter",void 0),Ra(this,"pollers",void 0),Ra(this,"commandContext",void 0),Ra(this,"stepElements",void 0),Ra(this,"stepInitialised",void 0),Ra(this,"stepMetadata",void 0),Ra(this,"stepSelections",void 0),Ra(this,"storage",void 0),Ra(this,"confirmCallbacks",void 0),Ra(this,"editedCallbacks",void 0),Ra(this,"elementsCallbacks",void 0),Ra(this,"informationResultCallbacks",void 0),Ra(this,"initCallbacks",void 0),Ra(this,"makingAdjustmentsCallback",void 0),Ra(this,"mandatoryCallbacks",void 0),Ra(this,"metadataCallbacks",void 0),Ra(this,"selectionCallbacks",void 0),Ra(this,"stepSpecificStorageCallbacks",void 0),Ra(this,"storageCallbacks",void 0),Ra(this,"currentVariationRecordCallbacks",void 0),Ra(this,"variationRecordCallbacks",void 0),Ra(this,"allScenes",void 0),Ra(this,"product",void 0),Ra(this,"invalidModelVariants",void 0),Ra(this,"currentAdjustingStepId",void 0),Ra(this,"renderableContextService",void 0),Ra(this,"workflowStatePromiseQueue",new si(1)),Ra(this,"variationRecords",[]),Ra(this,"currentVariationRecord",void 0),Ra(this,"initializationPromise",void 0),Ra(this,"initialized",!1),Ra(this,"readOnly",!1),Ra(this,"server",void 0),this.updateTransaction=i,this.server=r,this.commandContext=n,this.reloadedState=g,this.transaction=a,this.readOnly=l,this.confirmedDesign=!1,this.editedSteps={},this.informationResults=[],this.mandatorySteps={},this.pendingUpdates=[],this.selectionCost=0,this.workflow=A,this.stepSpecificServices={},this.profanityFilter=t,this.pollers=[],this.allScenes=[],this.layouts=e,this.product=s,this.previewService=o,this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},this.confirmCallbacks=[],this.editedCallbacks=[],this.elementsCallbacks=[],this.informationResultCallbacks=[],this.initCallbacks=[],this.mandatoryCallbacks=[],this.makingAdjustmentsCallback=[],this.metadataCallbacks=[],this.selectionCallbacks=[],this.stepSpecificStorageCallbacks={},this.storageCallbacks=[],this.currentVariationRecordCallbacks=[],this.variationRecordCallbacks=[],this.invalidModelVariants=[],this.currentAdjustingStepId="",this.renderableContextService=c,this.currentVariationRecord=null,this.initializationPromise=this.initializeDefaultWorkflowState(A,a),this.initializationPromise.then((()=>{this.initialized=!0})),this.initializationPromise.catch((A=>{throw console.error(A),this.initialized=!1,new Error("Workflow initialization failed due to an error. See console.")})),this.initializationPromise.finally((()=>this.getCommandContext().registerStateCallback((()=>this.updateStateWithServer()))))}async initializeDefaultWorkflowState(A,t){this.reloadedState&&this.reloadedState.serializableWorkflow.steps.forEach((A=>{this.storage[A.stepName]=A.storage||{}})),this.allScenes=await ia(A,{bulkScene:t.bulk||!1,bulkSceneTitle:"workflow.steps.bulk.title",finishScene:!0,finishSceneTitle:"workflow.steps.finish.confirmDesign"});const e=ra(this.allScenes,this.stepSelections).map((A=>A.silentSteps)).flat(),{stepElements:n,commands:i}=await this.stepElementsForIntroducedSilentSteps(e,!!this.reloadedState);this.commandContext.apply(new Ot(i),!0),this.stepElements={...this.stepElements,...n},await this.ensureStepsAreLoaded(),!this.readOnly&&await this.updateStateWithServerImmediate(),this.reloadedState&&(()=>{const A=this.workflow.finalizeStepConfig;if(!A)return;const t=A.lookAtAnimation,e=A.modelAnimation;t&&this.previewService?.executeCameraAnimation(t),e&&this.previewService?.executeModelAnimation(e)})()}getProduct(){return this.product}getInitializationPromise(){return this.initializationPromise}isInitialized(){return this.initialized}addVariationRecord(A){const t={...A,recordNumber:this.variationRecords.reduce(((A,t)=>t.recordNumber>A?t.recordNumber:A),0)+1};return this.variationRecords.push(t),this.onVariationRecordsChange(),t}removeVariationRecord(A){if(this.variationRecords=this.variationRecords.filter((t=>t.recordNumber!==A)),this.variationRecords.forEach(((A,t)=>A.recordNumber=t+1)),this.currentVariationRecord&&this.currentVariationRecord.recordNumber===A){const A=this.currentVariationRecord.recordNumber,t=A>1?this.variationRecords[A-2]:this.variationRecords[0];this.setCurrentVariationRecord(t||null)}return this.onVariationRecordsChange(),this.variationRecords}setVariationRecords(A){this.variationRecords=A,this.onVariationRecordsChange(),0===A.length?this.setCurrentVariationRecord(null):this.setCurrentVariationRecord(A[0])}setCurrentVariationRecord(A){if(this.currentVariationRecord=A,this.onCurrentVariationRecordChange(),A){const t=this.variationRecords.find((t=>t.recordNumber===A.recordNumber));t&&(t.values=A.values,this.onVariationRecordsChange())}}addConfirmCallback(A){A(this.confirmedDesign),this.confirmCallbacks.push(A)}addEditedCallback(A){A(this.editedSteps),this.editedCallbacks.push(A)}addElementsCallback(A){A(this.stepElements),this.elementsCallbacks.push(A)}addInformationResultCallback(A){A(this.informationResults),this.informationResultCallbacks.push(A)}addInitCallback(A){A(this.stepInitialised),this.initCallbacks.push(A)}addMandatoryCallback(A){A(this.mandatorySteps),this.mandatoryCallbacks.push(A)}addMetadataCallback(A){A(this.stepMetadata),this.metadataCallbacks.push(A)}async addSelectionCallback(A){A({invalidModelVariants:this.invalidModelVariants,selectionCost:this.selectionCost,selections:this.stepSelections,traversableScenes:await this.traversableScenes()}),this.selectionCallbacks.push(A)}addStepSpecificStorageCallback(A,t){Object.keys(this.storage).includes(t)||(this.storage[t]={}),A(this.storage[t]),Object.keys(this.stepSpecificStorageCallbacks).includes(t)||(this.stepSpecificStorageCallbacks[t]=[]),this.stepSpecificStorageCallbacks[t].push(A)}addStorageCallback(A){A(this.storage),this.storageCallbacks.push(A)}addMakingAdjustmentsCallback(A){A(this.currentAdjustingStepId),this.makingAdjustmentsCallback.push(A)}addCurrentVariationCallback(A){A(this.currentVariationRecord),this.currentVariationRecordCallbacks.push(A)}addVariationRecordsCallback(A){A(this.variationRecords),this.variationRecordCallbacks.push(A)}addPoller(A){this.pollers.push(A)}getLayouts(){return this.layouts}getAllLayoutData(){return this.commandContext.getAllLayouts().map((A=>A.layoutState))}getLayoutPreviewService(){return this.renderableContextService}getInformationResults(){return this.informationResults}getPreviewService(){return this.previewService}getProfanities(){return this.profanityFilter}getCommandContext(){return this.commandContext}getRegionElements(A){return this.stepElements[A]||[]}getStepSpecificServices(A){return this.stepSpecificServices[A]}getTransaction(){return this.transaction}setTransactionCustomerDetails(A){this.transaction.bulkEmailAddress=A.email}setTransaction(A){this.transaction=A}getWorkflow(){return this.workflow}getCommandDispatcher(){return A=>this.commandContext.apply(A,!this.initialized)}getServer(){return this.server}getWorkflowSelections(){const A={};return this.workflow.steps.forEach((t=>{const e=this.stepSelections[t.stepName];e&&e.selectedVariants&&e.selectedVariants.length>0&&(A[t.stepName]={selections:e.selectedVariants})})),A}markStepsAsInitialised(A){const t={...this.stepInitialised};A.forEach((A=>{t[A]=!0})),this.stepInitialised=t,this.onInitChange()}getUpdatesPending(){return this.pendingUpdates.length>0}markUpdateCompleted(A){this.pendingUpdates=this.pendingUpdates.filter((t=>t!==A))}markUpdatePending(){const A=Y();return this.pendingUpdates=[...this.pendingUpdates,A],A}setEditedStatus(A,t){this.editedSteps={...this.editedSteps,[A]:t},this.onEditedChange()}setInformationResults(A){this.informationResults=[...A],this.onInformationResultChange()}setCurrentAdjustingStepId(A){this.currentAdjustingStepId=A,this.onMakingAdjustmentsChange()}setMandatoryFulfilled(A,t){this.mandatorySteps[A]!==t&&(this.mandatorySteps={...this.mandatorySteps,[A]:t},this.onMandatoryChange())}toggleDesignConfirmed(){this.confirmedDesign=!this.confirmedDesign,this.onConfirmChange()}toggleMakingAdjustmentsCallback(A){A(this.mandatorySteps),this.mandatoryCallbacks.push(A)}async updateStorage(A,t){const e={...this.storage,[A]:{...this.storage[A],...t}};if(!y(Q)(e,this.storage)){this.storage=e;const t=new bt(this.constructSerializableWorkflow());this.commandContext.apply(t,!0),this.onStepSpecificStorageChange(A),this.onStorageChange()}}constructSerializableWorkflow(){const A=[];return this.allScenes.forEach((t=>{t.renderableSteps.forEach((t=>{const e={stepName:t.stepName};e.storage=this.storage[t.stepName],e.selectedVariants=this.stepSelections[t.stepName]?.selectedVariants?.map((A=>({id:A.id,priceModifier:A.priceModifier}))),A.push(e)}))})),{steps:A}}updateStateWithServer(){if(this.readOnly)return;const A=this.serialize();this.workflowStatePromiseQueue.enqueue(new ba((async()=>{await this.updateTransaction({variables:{id:this.transaction.id,workflowState:A.transaction}})})))}async updateStateWithServerImmediate(){if(this.readOnly)return;const A=this.serialize();return new ba((async()=>{await this.updateTransaction({variables:{id:this.transaction.id,workflowState:A.transaction}})})).execute()}serialize(){const t=this.getCommandContext().getState();if(!t)throw new je("Attempted to serialize state before it was initialized.");const e=JSON.stringify(this.dehydrateState(y(A)(t.transaction))),n=t.variation;if(!n)return{transaction:e};const i={layouts:{},serializableWorkflow:{steps:[]},...y(A)(n)||{}};return{transaction:e,variation:JSON.stringify(this.dehydrateState(i))}}dehydrateState(A){for(const t of Object.values(A.layouts).map((A=>A.elements)).flat())"illustration"===t.type&&(delete t.cachedObjectURL,t.src&&delete t.svg);return A}async outstandingRequestsPromise(){return this.workflowStatePromiseQueue.finalize()}updateMetadata(A,t){this.stepMetadata={...this.stepMetadata,[A]:{...this.stepMetadata[A],...t}},this.onMetadataChange()}removeElements(A){this.stepElements=((A,t)=>Object.keys(A).reduce(((e,n)=>{const i=[...A[n]||[]];return t.forEach((A=>{const t=i.findIndex((t=>t.id===A.id));t>-1&&i.splice(t,1)})),e[n]=i,e}),{}))(this.stepElements,A)}getInvalidCanvasRegions(){return this.workflow.steps.reduce(((A,t)=>(sa(t,this.stepSelections)||this.stepElements[t.stepName]&&this.stepElements[t.stepName].forEach((t=>A.push(t))),A)),[])}getInvalidModelVariants(){return this.workflow.steps.reduce(((A,t)=>("Model"!==t.type||sa(t,this.stepSelections)||t.optionId&&A.push(t.optionId),A)),[])}async stepElementsForIntroducedSilentSteps(A,t){const e=this.product;if(!e)return Promise.resolve({stepElements:{},commands:[]});const n=async(A,t,e)=>{if(A.type===V.SilentIllustration){return{step:A,results:await new da(A,t).trigger()}}if(A.type===V.ProductOverlay){return{step:A,results:await new da(A,t,e).trigger()}}return Promise.reject("Unknown silent step. This is a bug")},i=A.filter((A=>!this.stepInitialised[A.stepName])),a={stepElements:{},commands:[]},s=[];for(const A of i)this.markStepsAsInitialised([A.stepName]),t||s.push(n(A,this.layouts,e));const r=await Promise.all(s);for(const A of r)a.stepElements[A.step.stepName]=A.results.map((A=>A.regionElement)),a.commands=[...a.commands,...A.results.map((A=>A.command))];return a}getStepStorage(A){return this.storage[A]}getMetadata(A){return this.stepMetadata[A]}getWorkflowMetadata(){return this.stepMetadata}getSerializedStep(A,t){return t.find((t=>t.stepName===A))}getCurrentVariationRecord(){return this.currentVariationRecord||void 0}getVariationRecords(){return this.variationRecords}async reset(){this.commandContext.getAllLayouts().forEach((A=>A.layoutState.elements.forEach((A=>{this.getCommandDispatcher()(new Tt(A.id))})))),this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},this.currentVariationRecord=null,await this.ensureStepsAreLoaded()}async setSelectionsAndElements(A,t,e,n){const i=this.stepSelections;this.stepSelections={...this.stepSelections,[A]:{selectedVariants:t}},this.selectionCost=Object.values(this.stepSelections).reduce(((A,t)=>A+t.selectedVariants.map((A=>A.priceModifier)).reduce(((A,t)=>A+t),0)),0),this.workflow.steps.forEach((A=>{sa(A,this.stepSelections)||(this.stepInitialised[A.stepName]=!1,delete this.stepMetadata[A.stepName],delete this.stepSelections[A.stepName],delete this.storage[A.stepName])}));const a=this.allScenes,s=ra(a,i),r=ra(a,this.stepSelections),o=s.map((A=>A.silentSteps)).flat(),c=r.map((A=>A.silentSteps)).flat().filter((A=>!o.some((t=>t.stepName===A.stepName))));o.forEach((A=>{sa(A,this.stepSelections)||(this.stepInitialised[A.stepName]=!1)})),this.invalidModelVariants=this.getInvalidModelVariants();const g=this.getInvalidCanvasRegions(),{stepElements:l,commands:B}=await this.stepElementsForIntroducedSilentSteps(c,!1);this.stepElements={...this.stepElements,...l,[A]:e},this.removeElements(g);if(this.workflow.steps.find((t=>t.stepName===A))?.type===V.Frame){this.getStepSpecificServices(A)?.frameService?.setTargetElements(e.map((A=>A.id)))}const w=[...B,...g.map((A=>new Tt(A.id))),new bt(this.constructSerializableWorkflow())];w.length>0&&this.commandContext.apply(new Ot(w),!0),await this.ensureStepsAreLoaded(),this.onElementsChange(),await this.onSelectionChange(),n&&await n()}async ensureStepsAreLoaded(){const A=[],t=ra(this.allScenes,this.stepSelections).map((A=>A.renderableSteps)).flat();for(const e of t)if(!this.stepInitialised[e.stepName])switch(this.stepInitialised[e.stepName]=!0,e.type){case V.Bulk:this.updateStorage("Bulk",this.reloadedState?.serializableWorkflow.steps.find((A=>"Bulk"===A.stepName))?.storage||{});break;case V.DigitalContent:A.push(Qa.init(e,this,this.reloadedState));break;case V.Frame:case V.Photo:{const t=new Ba(e.data.forceImageCover);t.connectWorkflowManager(this,e.stepName),this.stepSpecificServices[e.stepName]={frameService:t},A.push(Ia.init(e,this,this.reloadedState))}break;case V.Illustration:A.push(ma.init(e,this,this.reloadedState));break;case V.Material:A.push(Da.init(e,this,this.reloadedState));break;case V.Model:A.push(pa.init(e,this,this.reloadedState));break;case V.Module:this.stepSpecificServices[e.stepName]={module:await Mi(e.data.module)},A.push(fa.init(e,this,this.reloadedState));break;case V.Picture:A.push(ya.init(e,this,this.reloadedState));break;case V.Question:A.push(Ma.init(e,this,this.reloadedState));break;case V.Shape:A.push(Fa.init(e,this,this.reloadedState));break;case V.Text:A.push(Pa.init(e,this,this.reloadedState))}const e=(await Promise.allSettled(A)).map((A=>{if("rejected"===A.status)throw new Error(`Step initialization failed: ${A.reason}`);return A.value})),n=e.filter((A=>!!A&&!!A.command)).map((A=>A.command)),i=e.filter((A=>!!A&&!!A.followup)).map((A=>A.followup));n&&n.length>0&&this.commandContext.apply(new Ot(n),!0);for(const A of i)await A();i.length>0&&await this.ensureStepsAreLoaded(),this.onInitChange()}onConfirmChange(){this.confirmCallbacks.forEach((A=>A(this.confirmedDesign)))}onEditedChange(){this.editedCallbacks.forEach((A=>A(this.editedSteps)))}onElementsChange(){this.elementsCallbacks.forEach((A=>A(this.stepElements)))}onInformationResultChange(){this.informationResultCallbacks.forEach((A=>A(this.informationResults)))}onInitChange(){this.initCallbacks.forEach((A=>A(this.stepInitialised)))}onMakingAdjustmentsChange(){this.makingAdjustmentsCallback.forEach((A=>{A(this.currentAdjustingStepId)}))}onMandatoryChange(){this.mandatoryCallbacks.forEach((A=>A(this.mandatorySteps)))}onMetadataChange(){this.metadataCallbacks.forEach((A=>{A(this.stepMetadata)}))}async onSelectionChange(){const A=await this.traversableScenes();for(const t of this.selectionCallbacks)t({invalidModelVariants:this.invalidModelVariants,selectionCost:this.selectionCost,selections:this.stepSelections,traversableScenes:A})}onStepSpecificStorageChange(A){Object.keys(this.stepSpecificStorageCallbacks).includes(A)||(this.stepSpecificStorageCallbacks[A]=[]),this.stepSpecificStorageCallbacks[A].forEach((t=>t(this.storage[A])))}onStorageChange(){this.storageCallbacks.forEach((A=>A(this.storage)))}onCurrentVariationRecordChange(){this.currentVariationRecordCallbacks.forEach((A=>{A(this.currentVariationRecord)}))}onVariationRecordsChange(){this.variationRecordCallbacks.forEach((A=>{A(this.variationRecords)}))}traversableScenes(){return oa(this.allScenes,this.stepSelections)}}function ka(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class Ja{constructor(A,t){ka(this,"manager",void 0),ka(this,"step",void 0),this.manager=A,this.step=t}setUpdateState(A){Ja.updateState.set(this.step.stepName,A)}getUpdateState(){return!!Ja.updateState.get(this.step.stepName)}async getCurrentVariant(){return(await this.manager.getWorkflowSelections())[this.step.stepName]?.selections[0]}async getAvailableVariants(){if(this.step.type===V.Frame&&!this.step.optionId)return[];const A=await ln.getOptionFromStep(this.step,this.manager.getServer());return A?A.data.variants:[]}getName(){return this.step.stepTitle}getId(){return this.step.stepName}getType(){return this.step.type}getHelpText(){return this.step.helpText}}function Oa(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}ka(Ja,"updateState",new Map);const za=w.gql`
|
|
205
205
|
mutation UpdateTransactionBulkEmailAddress($id: String!, $bulkEmailAddress: String!) {
|
|
206
206
|
transactionUpdate(id: $id, bulkEmailAddress: $bulkEmailAddress) {
|
|
207
207
|
id
|
|
@@ -235,5 +235,5 @@ var A=require("lodash.clonedeep"),t=require("react/jsx-runtime"),e=require("open
|
|
|
235
235
|
lastSyncedAt
|
|
236
236
|
}
|
|
237
237
|
}
|
|
238
|
-
`;class La extends Ja{constructor(A,t){super(A,t),Oa(this,"transaction",this.manager.getTransaction())}selectVariant(){throw new Error("Bulk step does not support variants.")}async setDesignName(A){await an.getShadowGraphqlClient().mutate({mutation:ja,variables:{transactionId:this.manager.getTransaction().id,designName:A}});const t=this.manager.getTransaction();this.manager.setTransaction({...t,designName:A})}addVariationRecord(){const A=this.manager.addVariationRecord({transactionId:this.transaction.id,values:[]});return this.manager.setCurrentVariationRecord(A),A}updateBulkIsConnected(A){this.manager.updateStorage(this.getId(),{bulkIsConnected:A})}openBulkSourceUrl(){window.open(this.transaction.bulkSourceUrl,"_blank")}async sendGoogleSheetLinkToEmail(A){await an.getShadowGraphqlClient().mutate({mutation:za,variables:{id:this.transaction.id,bulkEmailAddress:A}}),this.openBulkSourceUrl()}deleteVariationRecord(A){this.manager.removeVariationRecord(A)}getAspects(){return this.step.data.aspects}}class Ta extends Ja{constructor(A,t){super(A,t)}async selectVariant(A){if(await this.getCurrentVariant()!==A)return ma.selectVariant(this.step,A,this.manager.getRegionElements(this.step.stepName)||[],(A=>this.setUpdateState(A)),this.manager)}getColors(){const A=this.manager.getRegionElements(this.step.stepName)||[];if(0!==A.length)try{return Nt(A[0].id,this.manager.getAllLayoutData()).colors}catch(A){}}setColor(A,t){const e=new Map;return e.set(A,t),ma.changeColors(this.step,this.manager.getRegionElements(this.step.stepName),this.manager,(()=>this.manager.getCommandContext().getAllLayouts()),e)}async getColorOption(){const A=this.step.data.colourOptionId;if(!A)return;const t=await ln.getOption(nn,A);return t||void 0}getAvailableColors(){return this.step.data.colourPickerEnabled?ma.availableColors(this.step,this.manager):Promise.resolve([])}hasVaryingSelection(){return this.step.data.varySelection}hasVaryingColors(){return this.step.data.varyColors}isColorPickerEnabled(){return this.step.data.colourPickerEnabled}}class Ka extends Ja{constructor(A,t){super(A,t)}selectVariant(A){return Da.selectVariant(this.step,A,this.manager,(A=>this.setUpdateState(A)))}}class Va extends Ja{constructor(A,t){super(A,t)}selectVariant(A){return pa.selectVariant(this.step,A,this.manager,(A=>this.setUpdateState(A)))}}class Xa extends Ja{constructor(A,t){super(A,t)}selectVariant(A){return ya.selectVariant(this.step,A,this.manager,(A=>this.setUpdateState(A)))}}class Wa extends Ja{constructor(A,t){super(A,t)}async selectVariant(A){if(!A.id)throw new Error("Unable to select variant with a null ID");await Ma.selectVariant(this.step,A.id,this.manager)}getDisplayType(){return this.step.option?.data.displayType}}class Za extends Ja{constructor(A,t){super(A,t)}selectVariant(A){return Promise.resolve()}setColor(A){return Fa.selectVariant(this.step,A,this.manager.getRegionElements(this.step.stepName)||[],this.manager)}getColors(){return Fa.availableColours(this.step,this.manager)}}class qa extends Ja{constructor(A,t){super(A,t)}async selectVariant(A){Pa.selectVariant(this.step,A,this.manager,(A=>{if(A)this.manager.setInformationResults([...this.manager.getInformationResults(),{message:"An issue has occured with test",messageType:Ha.Error,stepID:this.step.stepName}]);else{const A=this.manager.getInformationResults().filter((A=>A.stepID!==this.step.stepName));this.manager.setInformationResults(A)}}),(A=>{}))}getAvailableColors(){return this.step.data.colourPickerEnabled?Pa.availableColors(this.step,this.manager):Promise.resolve([])}async setFill(A){const t=this.manager.getRegionElements(this.step.stepName);await Pa.changeFill(this.step,A,t,this.manager)}getFill(){return this.manager.getStepStorage(this.step.stepName)?.color||"#000000"}setFullTextCustomization(A){const t=this.manager.getStepStorage(this.step.stepName)?.inputText||"",e=void 0!==this.step.data.replaceableText?this.step.data.replaceableText.replace("{{}}",t):t,n=A?e:this.step.data.defaultText;this.manager.updateStorage(this.step.stepName,{customiseAllText:A,text:n,defaultCleared:!1});return this.setText(n)}setText(A){const t={input:A},e=Pa.findLayoutElements(this.manager,this.step),n=Pa.filterUnsupportedCharacters(A,e[0]?.fontData);!!this.step.data&&!!this.step.data.maxLength&&n.length>this.step.data.maxLength||(t.input=n);const i=e.length<=0,a=i?{inputText:n,text:n}:{inputText:n};if(this.manager.updateStorage(this.step.stepName,a),this.manager.updateMetadata(this.step.stepName,{text:n}),i)return t;const{command:s,errors:r,helperText:o}=Pa.updateInputText(n,e,this.step,this.manager);s&&this.manager.getCommandDispatcher()(s);const c=this.manager.getInformationResults(),g=r[0]?.localizationKey;if(g)this.manager.setInformationResults([...c,{message:`${g} - ${this.step.stepTitle}`,messageType:Ha.Error,stepID:this.step.stepName}]);else{const A=c.filter((A=>A.stepID!==this.step.stepName));this.manager.setInformationResults(A)}return t.helperText=g||o,t.errorText=g,t}getText(){const A=this.step.data.defaultText;return this.manager.getStepStorage(this.step.stepName)?.text||A||""}isReplaceable(){return this.step.data.userCanReplaceText}clearDefaultTextIfNecessary(){if(!this.manager.getStepStorage(this.step.stepName)?.defaultCleared&&this.step.data.deleteDefaultOnFocus){const A=this.setText("");return this.manager.updateStorage(this.step.stepName,{defaultCleared:!0,inputText:""}),A}}hasVaryingText(){return this.step.data.varyText}hasVaryingColor(){return this.step.data.varyColor}hasVaryingSelection(){return this.step.data.varySelection}hasColorPicker(){return this.step.data.colourPickerEnabled}getRegions(){return this.step.data.regions}}class $a{static get(A,t){switch(t.type){case V.Question:return new Wa(A,t);case V.Text:return new qa(A,t);case V.Illustration:return new Ta(A,t);case V.Picture:return new Xa(A,t);case V.Shape:return new Za(A,t);case V.Material:return new Ka(A,t);case V.Model:return new Va(A,t);case V.Frame:return new Is(A,t);case V.Bulk:return new La(A,t);default:throw new je(`Step type ${t.type} not yet supported in Core SDK`)}}}function _a(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const As=(A,t,e)=>{const n={};return t.steps.forEach((t=>{Object.assign(n,(t=>{const n={};if("Frame"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideImageInCart&&e)return n;n[`${t.stepTitle} image`]=i.image}if("Illustration"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideColorsInCart&&e||!i.colors)return n;if(i.colors.length>0){const A=i.colors.join(", ").toUpperCase();n[`${t.stepTitle} colors`]=A}}if("Module"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideTextInCart&&e)return n;n[`${t.stepTitle} text`]=i.text}if("Text"===t.type){const i=A[t.stepName];if(!i)return n;const a=t.data;a.hideTextInCart&&e||(n[`${t.stepTitle} text`]=i.text),!i.color||a.hideColorInCart&&e||(n[`${t.stepTitle} color`]=i.color)}return n})(t))})),n},ts=(A,t,e,n,i,a,s,r,o)=>{const c={event:"onComplete",lineItemImageUrl:s?s.href:"",transactionId:A.id,designProductVariantId:A.externalDesignProductVariantId,designProductId:A.externalDesignProductId,baseCost:e,weight:t.weight,optionsCost:n,exportedData:a,workflowViewerLink:A.workflowViewerLink||"",workflowViewerReadOnlyLink:A.workflowViewerReadOnlyLink||""};return i&&(c.metadata=i),r&&(c.selectedVariants=r),o&&(c.sku=o),c},es=async(A,t,e,n,i,a,s)=>{const r=(A.product?.basePrice||0)*(A.variationsCount||0),o=A.priceModifierTotal||0,c=((A,t,e,n)=>{const i={};let a;if(e){a=As(e,t,!1);for(const A of Object.keys(a))i[A]={value:a[A],priceModifier:0}}else if(n){a=n;for(const A of Object.keys(a))i[A]={value:a[A],priceModifier:0}}for(const e of Object.keys(A)){const n=A[e],a=t.steps.find((A=>A.stepTitle===e));if(1===n.length)i[`${a?.stepTitle} selection`]={value:n[0].name,priceModifier:n[0].priceModifier};else if(n.length>1)for(let A=0;A<n.length;A++)i[`${a?.stepTitle} selection ${A+1}`]={value:n[A].name,priceModifier:n[A].priceModifier}}return i})(n,e,void 0,a);return ts(A,t,r,o,a,c,s,n,i)},ns=async(A,t,e,n,i,a,s,r,o,c,g,l,B)=>{o("workflow.steps.finish.finalize.buildingLayouts"),await A.outstandingRequestsPromise();const w=an.getShadowGraphqlClient();await w.resetStore();const d=await w.query({query:ta,variables:{id:a.id},errorPolicy:"all"}),h=d.data?.transactions[0].workflowState;!d.errors&&h||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(n())),d.errors&&d.errors.forEach((A=>{d.errors&&console.log("Server Error:",A.message)})),await A.updateStateWithServerImmediate(n),console.log("Server state is undefined @ Workflow completion"));const E=A.getPreviewService(),C=t?.finalizeStepConfig?.lookAtAnimation,Q=E&&100===E.getSceneInitializationProgress()&&t.showModelOnFinishStep&&!!C,u=B&&As(B,t,!0),I=B&&As(B,t,!1),m=async A=>{const e={};let n=0;if(Object.keys(s).length>0)for(const i of Object.keys(s)){const a=s[i],r=t.steps.find((A=>A.stepName===i));for(let t=0;t<a.selections.length;++t){const i=a.selections[t];if(r&&(!A||await ln.getOption(nn,r.optionId)&&(await ln.getOption(nn,r.optionId)).data.variants.length>1&&!r.data.hideSelectionInCart&&!r.data.hideSelectionsInCart)){const A=r.stepTitle;e[A]?e[A].push({id:i.id||"",name:i.name,priceModifier:i.priceModifier}):e[A]=[{id:i.id||"",name:i.name,priceModifier:i.priceModifier}]}n+=i.priceModifier}}return[e,n]},[D]=await m(!0),p=Object.fromEntries(Object.keys(D).map((A=>[A,D[A].map((A=>A.id))]))),[f]=await m(!1),y=Object.fromEntries(Object.keys(f).map((A=>[A,f[A].map((A=>A.id))]))),M=await l(Q);o("workflow.steps.finish.finalize.creatingDesign");const F=(await nn.execute("createDesign",{designDetails:(()=>{const A={designName:r,layouts:e.map((A=>({index:A.index,panelId:A.panelId}))),workflowId:t.id,productId:i.id,transactionId:a.id,threeDimPreview:Q,previewImage:M};return B&&(A.metadata=I),p&&(A.selectedVariants=y),A})()})).body,x=F.links.find((A=>"image"===A.rel));o("workflow.steps.finish.finalize.updatingTransaction");const Y=(await an.getShadowGraphqlClient().query({query:Aa,variables:{id:a.id}})).data.transactions[0];return a.bulk?(await c(g),((A,t,e)=>{const n=(A.product?.basePrice||0)*(A.variationsCount||0),i=A.priceModifierTotal||0,a={items:{value:A.variationsCount?`${A.variationsCount}`:"0",priceModifier:0}};return ts(A,t,n,i,void 0,a,e)})(Y,i,x)):await es(Y,i,t,D,F.data.sku,u,x)};let is;var as;(as=is||(is={})).Local="Local",as.Remote="Remote";const ss=new class{constructor(){_a(this,"localPersistenceKey","designTransactions"),_a(this,"storageMethod",is.Local),_a(this,"designSavedListeners",[])}attachSaveListener(A){this.designSavedListeners.push(A)}detachSaveListener(A){this.designSavedListeners=this.designSavedListeners.filter((t=>t!==A))}async getSavedDesigns(){return await this.getDesigns()}async getSavedDesignByTransaction(A){return(await this.getSavedDesigns()).find((t=>t.transactionId===A))}async addDesign(A){const t=(await this.getSavedDesigns()).filter((t=>t.transactionId!==A.transactionId));t.unshift(A),await this.setDesigns(t),this.notifyDesignSaved(A)}async removeDesign(A){const t=await this.getSavedDesigns();await this.setDesigns(t.filter((t=>t.transactionId!==A)))}async setDesigns(A){if(this.storageMethod!==is.Local)throw new je("Unexpected storage method requested");Ze.set(this.localPersistenceKey,JSON.stringify(A))}async getDesigns(){if(this.storageMethod===is.Local){const A=Ze.get(this.localPersistenceKey);return A?JSON.parse(A):[]}throw new je("Unexpected storage method requested")}notifyDesignSaved(A){this.designSavedListeners.forEach((t=>t(A)))}};function rs(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class os{constructor(A,t,e){if(rs(this,"client",void 0),rs(this,"commandContext",void 0),rs(this,"workflowManager",void 0),rs(this,"isReadOnly",void 0),rs(this,"server",void 0),rs(this,"renderableScenes",[]),rs(this,"renderableSceneCallbacks",[]),rs(this,"debouncedSavedDesignUpdate",y(D)((async()=>{await ss.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()}),2500)),!t.workflow)throw new Error("No Workflow ID provided.");this.client=A,this.server=e;const n=t.layouts;this.commandContext=new Ft,this.commandContext.initialize(n,t.reloadedState),this.isReadOnly=!!t.transaction.lineItem?.id||!Ze.getMap("transactionOwnerIds")?.get(t.transaction.id)||!!t.readOnly,this.workflowManager=new Ga(t.workflow,t.product.profanities?.map((A=>A.word))||[],n,this.commandContext,(A=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return t.stateMutationFunc(A)}),t.transaction,t.product,this.server,t.previewService,t.renderableContextService,t.reloadedState,t.readOnly),this.workflowManager.addSelectionCallback((A=>{const t=A.traversableScenes.map((A=>{const t=A.renderableSteps.map((A=>A.stepName));return{id:A.name,title:A.title,renderableSteps:t}}));this.renderableScenes=t,this.renderableSceneCallbacks.forEach((A=>A(t)))}))}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async updateVariationRecords(A){await an.getShadowGraphqlClient().mutate({mutation:_i,variables:{transactionId:this.workflowManager.getTransaction().id,updates:A.map((A=>({recordNumber:A.recordNumber,values:A.values.map((A=>({aspect:A.aspect,stepName:A.stepName,value:A.value})))})))}})}async createPreviewImage(A,t){const e=this.workflowManager.getWorkflow()?.finalizeStepConfig?.lookAtAnimation;if(A){if(!e)throw new Error("Failed to generate cart preview image!");return await(this.workflowManager.getPreviewService()?.renderSceneScreenshot(512,e))||""}const n=document.createElement("canvas");let i=2048;t&&t<=2048&&(i=t),n.width=i,n.height=i;const a=this.commandContext.getAllLayouts()[this.workflowManager.getWorkflow().defaultPreviewPanelIndex||0],s=a.layoutState.layout.previewRegion?{x:a.layoutState.layout.previewRegion.left,y:a.layoutState.layout.previewRegion.top,width:a.layoutState.layout.previewRegion.width,height:a.layoutState.layout.previewRegion.height}:{x:0,y:0,width:a.layoutState.layout.width,height:a.layoutState.layout.height},r=this.commandContext.getLayoutById(a.layoutState.layout.id),o=n.getContext("2d");if(!o)throw new Ke("Failed to obtain 2D context for preview image creation");const c=Yt(r.layoutState.layout,r.layoutState.elements,{renderingConfiguration:{purpose:H.Print,region:{left:s.x,top:s.y,width:s.width,height:s.height}}}),g=y(u).renderToStaticMarkup(c),B=await l.Canvg.from(o,g,{anonymousCrossOrigin:!0,ignoreDimensions:!1});await B.render();const w=await(async A=>new Promise(((t,e)=>{try{A.toBlob((A=>{if(A){const e=URL.createObjectURL(A);t(e)}}))}catch(A){e(A)}})))(n);return n.toDataURL(w)}getStepById(A){const t=this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepName===A));if(t&&this.stepHasHandle(t))return $a.get(this.getWorkflowManager(),t)}getBulkStep(){if(this.getWorkflowManager().getTransaction().bulk){const A={type:V.Bulk,stepName:"Bulk",stepTitle:"workflow.steps.bulk.title",helpText:"help:/partner/add-ons/bulk-ordering",data:{aspects:ea(this.getWorkflowManager().getWorkflow())},conditions:[]};return $a.get(this.getWorkflowManager(),A)}}getStepByName(A){const t=this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepTitle===A));if(t&&this.stepHasHandle(t))return $a.get(this.getWorkflowManager(),t)}getStepsByType(A){return this.getWorkflowManager().getWorkflow().steps.filter((t=>t.type===A)).map((A=>$a.get(this.getWorkflowManager(),A)))}getStepsByScene(A){if(!this.getWorkflowManager().getWorkflow().stepGroups.find((t=>t.name===A.name)))throw new Error("Given scene is not present on workflow! Be careful when persisting scenes that you only use them with the relevant workflow.");return A.stepNames.map((A=>this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepName===A)))).filter((A=>this.stepHasHandle(A))).map((A=>$a.get(this.getWorkflowManager(),A)))}async attachCustomerDetails(A){await an.getShadowGraphqlClient().mutate({mutation:za,variables:{id:this.getWorkflowManager().getTransaction().id,bulkEmailAddress:A.email}}),this.getWorkflowManager().setTransactionCustomerDetails(A)}attachRenderableSceneListener(A){this.renderableSceneCallbacks.push(A),A(this.renderableScenes)}detachRenderableSceneListener(A){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter((t=>t!==A))}async save(A){if(!this.getCommandContext().getState())throw new je("State undefined!");const t={title:await(async()=>{if(A)return A;const t=this.getWorkflowManager().getTransaction().id,e=(await ss.getSavedDesigns()).find((A=>A.transactionId===t))?.title;return e||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getWorkflowManager().getTransaction().id,productId:this.getWorkflowManager().getProduct().id,integrationProductId:this.getWorkflowManager().getTransaction().integrationProduct.id,workflowName:this.getWorkflowManager().getWorkflow().name,workflowId:this.getWorkflowManager().getWorkflow().id,lastEdited:new Date};return await ss.addDesign(t),t}async copy(){const t=y(A)(this.getCommandContext().getState());if(!t)throw new je("Internal state is undefined! Cannot copy experience!");const e=JSON.stringify(t.transaction),n=this.getWorkflowManager().getWorkflow(),i=new ls({}),a=this.getWorkflowManager().getTransaction().integrationProduct?.id;if(!a)throw new je("Integration product id is undefined!");await i.initFromIntegrationProduct(a);return await i.getWorkflowExperience(n.id,e,void 0,this.server)}async onDesignFinished(A,t,e,n){return ns(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),(()=>this.commandContext.getState()),A,this.workflowManager.getTransaction(),e,this.workflowManager.getWorkflow().name,t,(A=>this.updateVariationRecords(A)),this.workflowManager.getVariationRecords(),(A=>this.createPreviewImage(A)),n)}stepHasHandle(A){return A.type!==V.SilentIllustration&&A.type!==V.ProductOverlay}}function cs(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const gs=(A,t)=>{const e=A.workflowState,n=e?JSON.parse(e):void 0;return n?Object.values(n.layouts).map((A=>A.layout)):t.panels.sort(((A,t)=>A.index-t.index)).map((A=>({id:Y(),panelId:A.name,name:A.name,index:A.index,createdAt:new Date,updatedAt:new Date,transparentBackground:A.transparentBackground,height:A.height,width:A.width,previewRegion:A.previewRegion,useEditableArea:A.useEditableArea,editableArea:A.editableArea})))};class ls{constructor(A){cs(this,"options",void 0),cs(this,"initialized",void 0),cs(this,"experienceOptions",void 0),cs(this,"updateTransactionState",(async A=>{try{return an.getShadowGraphqlClient().mutate({...A,mutation:qi})}catch(A){throw console.error(A),new Te("Critical - Unable to synchronize workflow state with server.")}})),this.initialized=!1,this.options=A}getAssetManager(){return cn}async initFromIntegrationProduct(A){if(""===A)throw new Te("No integration product ID provided.");this.options.useUncachedEndpoints&&nn.setUncachedOperations(["getAssetByKeyV2","getWorkflowV2","getMaterialV2","getOptionV2"]);const t=an.getShadowGraphqlClient();await t.resetStore();const e=await t.mutate({mutation:Xi,variables:{integrationProductId:A,bulk:this.options.bulk||!1},errorPolicy:"all"});if(!e.data)throw new Te("Failed to create transaction!");const n=(await t.mutate({mutation:Wi,variables:{id:e.data.transactionCreate.id},errorPolicy:"all"})).data?.transactionClaim;if(!n)throw new Te("Failed to create transaction.");if(!e.data.transactionCreate.product)throw new Te("Failed to create transaction, product not available.");const i=Ze.getMap("transactionOwnerIds")||new Map;i.set(n.id,n.transactionOwnerId),tn(n.transactionOwnerId||""),Ze.setMap("transactionOwnerIds",i),this.experienceOptions={product:e.data.transactionCreate.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState},this.initialized=!0}async initFromTransaction(A,t=!1){if(""===A)throw new Te("No transaction ID provided.");const e=an.getShadowGraphqlClient();await e.resetStore();if(t)return await(async()=>{console.log("Readonly Mode");const n=(await e.query({query:Zi,variables:{id:A},errorPolicy:"all"})).data?.transactions[0];if(!n)throw new Te("Failed to read transaction.");if(!n.product)throw new Te("Failed to load transaction, product not available.");this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:async()=>{throw new je("State mutation is forbidden in read only mode!")},readOnly:t},this.initialized=!0})();const n=Ze.getMap("transactionOwnerIds")||new Map,i=n.get(A);if(i){tn(i);const n=(await e.query({query:Zi,variables:{id:A},errorPolicy:"all"})).data?.transactions[0];if(!n)throw new Te("Failed to read transaction.");if(!n.product)throw new Te("Failed to load transaction, product not available.");return this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:t},void(this.initialized=!0)}try{const i=(await e.mutate({mutation:Wi,variables:{id:A},errorPolicy:"all"})).data?.transactionClaim;if(!i)throw new Te("Failed to read transaction.");if(!i.product)throw new Te("Failed to load transaction, product not available.");i.transactionOwnerId&&(n.set(i.id,i.transactionOwnerId),tn(i.transactionOwnerId),Ze.setMap("transactionOwnerIds",n)),this.experienceOptions={product:i.product,transaction:i,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:t},this.initialized=!0}catch{throw new Te("Attempted to access a transaction that isn't available.")}}async getWorkflowExperience(A,t,e,n){if(!this.initialized||!this.experienceOptions)throw new Te("Cannot launch experience: Not initialized.");const i=async A=>{for(const t in A.layouts){const e=A.layouts[t].elements.filter((A=>A.type===P.Illustration));for(let A=0;A<e.length;++A){const t=e[A];t.src&&t.svg&&(t.cachedObjectURL=await Se(t.svg))}const n=A.layouts[t].elements.filter((A=>A.type===P.Textbox));for(let A=0;A<n.length;++A){const t=n[A];t.fontData?.assetUrl&&KA(t.fontData.assetUrl)}}},a=n||nn;if(this.experienceOptions.transaction.workflowId){const A=(await a.execute("getWorkflowV2",{workflowSlug:this.experienceOptions.transaction.workflowId})).body.data;if(this.experienceOptions.workflow=A,this.experienceOptions.transaction.workflowState){const A=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(A.layouts).map((A=>A.layout)),await Ht(A),await i(A),this.experienceOptions.reloadedState=A}this.experienceOptions.previewService=e&&e(A),this.experienceOptions.renderableContextService=new ki(this.experienceOptions.layouts,a),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService);const t=new os(this,this.experienceOptions,a);return await t.getWorkflowManager().getInitializationPromise(),t}if(A){const n=(await a.execute("getWorkflowV2",{workflowSlug:A})).body.data;if(this.experienceOptions.workflow=n,await an.getShadowGraphqlClient().mutate({mutation:$i,variables:{workflowId:A,id:this.experienceOptions.transaction.id}}),t){const A=JSON.parse(t);this.experienceOptions.layouts=Object.values(A.layouts).map((A=>A.layout)),await Ht(A),await i(A),this.experienceOptions.reloadedState=A}else this.experienceOptions.layouts=gs(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=e&&e(n),this.experienceOptions.renderableContextService=new ki(this.experienceOptions.layouts,a),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService);const s=new os(this,this.experienceOptions,a);return await s.getWorkflowManager().getInitializationPromise(),s}throw new Te("No workflow ID provided.")}getPreviewService(){return this.experienceOptions?.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new Te("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new Te("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}}function Bs(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const ws={setUncachedOperations:()=>{},execute:async()=>({body:{},headers:{"content-type":""}})};class ds{static getFrameStep(A){return{type:V.Frame,stepTitle:"My frame Step",stepName:"My Step Name",conditions:[],option:{data:{name:"test",defaultVariant:"1",variants:[{id:"1",name:"my-new-variant",priceModifier:1,asset:{data:{key:"1",createdAt:0,licenseId:"",mimeType:"",ownerId:"",price:0,public:!0,type:T.Frame,objectVersions:[],tags:[]},links:[{href:ds.aFrame,rel:"cdn"}]}},{id:"2",name:"my-new-variant-2",priceModifier:1,asset:{data:{key:"2",createdAt:0,licenseId:"",mimeType:"",ownerId:"",price:0,public:!0,type:T.Frame,objectVersions:[],tags:[]},links:[{href:ds.bFrame,rel:"cdn"}]}}]},links:[]},data:{regions:[{top:0,left:0,width:100,height:100,layer:0,layerIndex:0,rotation:0,panelId:"p-123",immutable:!1,adjustmentBoundary:{x:0,y:0,height:0,width:0}}],...A}}}static getBulkStep(){return{type:V.Bulk,stepTitle:"Bulk",stepName:"bulk-step",data:{aspects:[]}}}static getQuestionStep(A,t){return{type:V.Question,stepTitle:"question-step",stepName:A||"question-step",conditions:t,option:{data:{name:"test",defaultVariant:"1",variants:[{id:"1",name:"my-variant",priceModifier:1},{id:"2",name:"my-variant2",priceModifier:1}]},links:[]},data:{}}}static getMaterialStep(A,t){return{type:V.Material,stepTitle:"My Material Step",stepName:A||"material-step",conditions:t,option:{data:{name:"test",defaultVariant:"1",variants:[{id:"1",name:"my-variant",priceModifier:1,material:{data:{id:"1",name:"mat-1",clearCoat:j.None,createdAt:(new Date).toISOString(),updatedAt:(new Date).toISOString(),albedoMapKey:ds.redRaster},links:[]}},{id:"2",name:"my-variant2",priceModifier:1,material:{data:{id:"2",name:"mat-2",clearCoat:j.None,createdAt:(new Date).toISOString(),updatedAt:(new Date).toISOString(),albedoMapKey:ds.blueRaster},links:[]}}]},links:[]},data:{targetMaterials:["panel"]}}}static getTextStep(A){return{type:V.Text,stepTitle:"s-1",stepName:"s-1",option:{data:{name:"test",defaultVariant:"1",variants:[{id:"1",name:"",priceModifier:1,assetKey:"123",asset:{data:{key:"123",createdAt:0,mimeType:"font/ttf",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Font,tags:[]},links:[{rel:"cdn",href:ds.minimalFont}]}}]},links:[]},data:{regions:[{top:0,left:0,width:100,height:100,rotation:0,panelId:"p-123"}],defaultText:"",font:"",maxLength:100,size:16,textAlign:"center",colour:"#000000",verticalAlign:"top",...A}}}static getIllustrationStep(A){return{type:V.Illustration,stepTitle:"s-1",stepName:"s-1",option:{data:{name:"test",defaultVariant:"1",variants:[{id:"1",name:"",priceModifier:1,assetKey:"123",asset:{data:{key:"123",createdAt:0,mimeType:"image/svg+xml",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Illustration,tags:[]},links:[{rel:"cdn",href:ds.blueShape.src}]}},{id:"2",name:"",priceModifier:1,assetKey:"456",asset:{data:{key:"456",createdAt:0,mimeType:"image/svg+xml",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Illustration,tags:[]},links:[{rel:"cdn",href:ds.redShape.src}]}}]},links:[]},data:{regions:[{top:0,left:0,width:100,height:100,rotation:0,panelId:"p-123"}],colourPickerEnabled:!1,...A}}}static getPictureStep(A,t){return{type:V.Picture,stepTitle:"s-1",stepName:"s-1",option:{data:{name:"test",defaultVariant:t,variants:[{id:"1",name:"a",priceModifier:1,assetKey:"123",asset:{data:{key:"123",createdAt:0,mimeType:"image/png",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Image,tags:[]},links:[{rel:"cdn",href:ds.blueRaster}]}},{id:"2",name:"b",priceModifier:1,assetKey:"456",asset:{data:{key:"456",createdAt:0,mimeType:"image/png",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Image,tags:[]},links:[{rel:"cdn",href:ds.redRaster}]}}]},links:[]},data:{regions:[{top:0,left:0,width:100,height:100,rotation:0,panelId:"p-123"}],...A}}}static getModelStep(A,t){return{type:V.Model,stepTitle:"s-1",stepName:"s-1",optionId:"om-1",option:{data:{id:"om-1",name:"test",defaultVariant:t,variants:[{id:"1",name:"a",priceModifier:1,assetKey:"123",asset:{data:{key:"123",createdAt:0,mimeType:"application/octet-stream",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Model,tags:[]},links:[{rel:"cdn",href:ds.glbBox}]}},{id:"2",name:"b",priceModifier:1,assetKey:"456",asset:{data:{key:"456",createdAt:0,mimeType:"application/octet-stream",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Model,tags:[]},links:[{rel:"cdn",href:ds.glbVertexTest}]}}]},links:[]},data:{regions:[{top:0,left:0,width:100,height:100,rotation:0,panelId:"p-123"}],...A}}}static getShapeStep(A,t=[]){return{type:V.Shape,stepTitle:"s-1",stepName:A,conditions:t,option:{data:{name:"test",defaultVariant:"1",variants:[{id:"1",name:"a",priceModifier:1,color:"#FFFFFF"},{id:"2",name:"b",priceModifier:1,color:"#000000"}]},links:[]},data:{regions:[{top:0,left:0,width:100,height:100,rotation:0,panelId:"p-123"}]}}}static getSilentIllustrationStep(A,t=[]){return{type:V.SilentIllustration,stepTitle:"s-1",stepName:A,conditions:t,data:{assetKey:ds.redRaster,regions:[{top:0,left:0,width:100,height:100,rotation:0,panelId:"p-123"}]}}}}Bs(ds,"minimalFont","data:font/truetype;charset=utf-8;base64,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"),Bs(ds,"redShape",{src:"https://assets.spiff.com.au/public/assets/56cf72f5-a98d-487f-9e79-8129030ab99e.svg",text:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><script xmlns=""/><defs><style>.cls-1{fill:#f285b1;}</style></defs><title>Asset 4</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><rect class="cls-1" width="512" height="512"/></g></g></svg>'}),Bs(ds,"blueShape",{src:"https://assets.spiff.com.au/public/assets/6b9c3b7a-a669-41be-8ba2-538588d449e0.svg",text:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><script xmlns=""/><defs><style>.cls-1{fill:#53c6d6;}</style></defs><title>Asset 3</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><rect class="cls-1" width="512" height="512"/></g></g></svg>'}),Bs(ds,"aFrame","https://assets.spiff.com.au/public/assets/5bb3c003-3d30-4c98-9f07-2cfe25fbc4f7.svg"),Bs(ds,"bFrame","https://assets.spiff.com.au/public/assets/25e42f93-3f5d-43b6-9075-29164000bdf5.svg"),Bs(ds,"redRaster","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg=="),Bs(ds,"blueRaster","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPj/HwADBwIAMCbHYQAAAABJRU5ErkJggg=="),Bs(ds,"glbBox","data:@file/octet-stream;base64,Z2xURgIAAACABgAA3AMAAEpTT057ImFzc2V0Ijp7ImdlbmVyYXRvciI6IkNPTExBREEyR0xURiIsInZlcnNpb24iOiIyLjAifSwic2NlbmUiOjAsInNjZW5lcyI6W3sibm9kZXMiOlswXX1dLCJub2RlcyI6W3siY2hpbGRyZW4iOlsxXSwibWF0cml4IjpbMS4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsLTEuMCwwLjAsMC4wLDEuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMF19LHsibWVzaCI6MH1dLCJtZXNoZXMiOlt7InByaW1pdGl2ZXMiOlt7ImF0dHJpYnV0ZXMiOnsiTk9STUFMIjoxLCJQT1NJVElPTiI6Mn0sImluZGljZXMiOjAsIm1vZGUiOjQsIm1hdGVyaWFsIjowfV0sIm5hbWUiOiJNZXNoIn1dLCJhY2Nlc3NvcnMiOlt7ImJ1ZmZlclZpZXciOjAsImJ5dGVPZmZzZXQiOjAsImNvbXBvbmVudFR5cGUiOjUxMjMsImNvdW50IjozNiwibWF4IjpbMjNdLCJtaW4iOlswXSwidHlwZSI6IlNDQUxBUiJ9LHsiYnVmZmVyVmlldyI6MSwiYnl0ZU9mZnNldCI6MCwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjI0LCJtYXgiOlsxLjAsMS4wLDEuMF0sIm1pbiI6Wy0xLjAsLTEuMCwtMS4wXSwidHlwZSI6IlZFQzMifSx7ImJ1ZmZlclZpZXciOjEsImJ5dGVPZmZzZXQiOjI4OCwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjI0LCJtYXgiOlswLjUsMC41LDAuNV0sIm1pbiI6Wy0wLjUsLTAuNSwtMC41XSwidHlwZSI6IlZFQzMifV0sIm1hdGVyaWFscyI6W3sicGJyTWV0YWxsaWNSb3VnaG5lc3MiOnsiYmFzZUNvbG9yRmFjdG9yIjpbMC44MDAwMDAwMTE5MjA5MjksMC4wLDAuMCwxLjBdLCJtZXRhbGxpY0ZhY3RvciI6MC4wfSwibmFtZSI6IlJlZCJ9XSwiYnVmZmVyVmlld3MiOlt7ImJ1ZmZlciI6MCwiYnl0ZU9mZnNldCI6NTc2LCJieXRlTGVuZ3RoIjo3MiwidGFyZ2V0IjozNDk2M30seyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjAsImJ5dGVMZW5ndGgiOjU3NiwiYnl0ZVN0cmlkZSI6MTIsInRhcmdldCI6MzQ5NjJ9XSwiYnVmZmVycyI6W3siYnl0ZUxlbmd0aCI6NjQ4fV19iAIAAEJJTgAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAC/AAAAvwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAvwAAAD8AAAA/AAAAvwAAAL8AAAC/AAAAvwAAAL8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAC/AAAAPwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAC/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAA/AAAAPwAAAL8AAAEAAgADAAIAAQAEAAUABgAHAAYABQAIAAkACgALAAoACQAMAA0ADgAPAA4ADQAQABEAEgATABIAEQAUABUAFgAXABYAFQA="),Bs(ds,"glbVertexTest","data:@file/octet-stream;base64,Z2xURgIAAABsZgAAxA0AAEpTT057ImFjY2Vzc29ycyI6W3siYnVmZmVyVmlldyI6MCwiY29tcG9uZW50VHlwZSI6NTEyMSwiY291bnQiOjM2LCJtYXgiOlsyM10sIm1pbiI6WzBdLCJ0eXBlIjoiU0NBTEFSIn0seyJidWZmZXJWaWV3IjoxLCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6MjQsIm1heCI6WzAuNzU1NDc4MzgyMTEwNTk1NywtMC44NTEyNDE2NDgxOTcxNzQxLDAuOTc1MDMyODY2MDAxMTI5Ml0sIm1pbiI6Wy0wLjcwNDU2NTgyMzA3ODE1NTUsLTAuODUxMjQxNzA3ODAxODE4OCwtMC45NjExMTU0Nzk0NjkyOTkzXSwidHlwZSI6IlZFQzMifSx7ImJ1ZmZlclZpZXciOjIsImNvbXBvbmVudFR5cGUiOjUxMjYsImNvdW50IjoyNCwibWF4IjpbMCwxLDBdLCJtaW4iOlswLDEsMF0sInR5cGUiOiJWRUMzIn0seyJidWZmZXJWaWV3IjozLCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6MjQsIm1heCI6WzEsNy4xMjE5Mzg5NDk2OTQ1OTVlLTgsMS41MTA1MTkyMTE5MzM1Njk3ZS03LDFdLCJtaW4iOlsxLC0xLjQzNDg4MTM2OTI3NzcxODVlLTcsLTEuMTI1NzY3NjM5MTA5NjUzOGUtNywxXSwidHlwZSI6IlZFQzQifSx7ImJ1ZmZlclZpZXciOjQsImNvbXBvbmVudFR5cGUiOjUxMjYsImNvdW50IjoyNCwibWF4IjpbMC45OTk5OTk4ODA3OTA3MTA0LDAuODAxMDQwOTQ3NDM3Mjg2NF0sIm1pbiI6WzAsMC4wNTUzOTcyNzIxMDk5ODUzNV0sInR5cGUiOiJWRUMyIn0seyJidWZmZXJWaWV3Ijo1LCJjb21wb25lbnRUeXBlIjo1MTIxLCJjb3VudCI6NzIsIm1heCI6WzQ3XSwibWluIjpbMF0sInR5cGUiOiJTQ0FMQVIifSx7ImJ1ZmZlclZpZXciOjYsImNvbXBvbmVudFR5cGUiOjUxMjYsImNvdW50Ijo0OCwibWF4IjpbMS4wMDAwMDA0NzY4MzcxNTgyLDEsMC40ODc0MjI0NjYyNzgwNzYxN10sIm1pbiI6Wy0xLjAwMDAwMDM1NzYyNzg2ODcsLTEsLTAuMTcxODY2NTM2MTQwNDQxOV0sInR5cGUiOiJWRUMzIn0seyJidWZmZXJWaWV3Ijo3LCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6NDgsIm1heCI6WzEsMSwxXSwibWluIjpbLTEsLTEsLTFdLCJ0eXBlIjoiVkVDMyJ9LHsiYnVmZmVyVmlldyI6OCwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjQ4LCJtYXgiOlsxLDcuOTQwOTMzODgwNTA5MDY2ZS0yMyw0LjQ3MDM0ODM1ODE1NDI5N2UtOCwxXSwibWluIjpbMSwtNi42MTc0NDQ5MDA0MjQyMjJlLTI0LDAsMV0sInR5cGUiOiJWRUM0In0seyJidWZmZXJWaWV3Ijo5LCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6NDgsIm1heCI6WzAuODM2MTI5NjA1NzcwMTExMSwwLjc2NjYzMTkwMTI2NDE5MDddLCJtaW4iOlswLjIyNjEzMDQ1NTczMjM0NTU4LDAuMjMyMTE3NjUyODkzMDY2NF0sInR5cGUiOiJWRUMyIn0seyJidWZmZXJWaWV3IjoxMCwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjQ4LCJtYXgiOlsxLDEsMSwxXSwibWluIjpbMCwwLDAsMV0sInR5cGUiOiJWRUM0In1dLCJhc3NldCI6eyJjb3B5cmlnaHQiOiJDb3B5cmlnaHQgMjAxOCBBbmFseXRpY2FsIEdyYXBoaWNzLCBJbmMuLCBDQy1CWSA0LjAgaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC8gLSBNZXNoIGFuZCB0ZXh0dXJlcyBieSBFZCBNYWNrZXkuIiwiZ2VuZXJhdG9yIjoiS2hyb25vcyBCbGVuZGVyIGdsVEYgMi4wIGV4cG9ydGVyIiwidmVyc2lvbiI6IjIuMCJ9LCJidWZmZXJWaWV3cyI6W3siYnVmZmVyIjowLCJieXRlTGVuZ3RoIjozNiwiYnl0ZU9mZnNldCI6MCwidGFyZ2V0IjozNDk2M30seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjI4OCwiYnl0ZU9mZnNldCI6MzYsInRhcmdldCI6MzQ5NjJ9LHsiYnVmZmVyIjowLCJieXRlTGVuZ3RoIjoyODgsImJ5dGVPZmZzZXQiOjMyNCwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjM4NCwiYnl0ZU9mZnNldCI6NjEyLCJ0YXJnZXQiOjM0OTYyfSx7ImJ1ZmZlciI6MCwiYnl0ZUxlbmd0aCI6MTkyLCJieXRlT2Zmc2V0Ijo5OTYsInRhcmdldCI6MzQ5NjJ9LHsiYnVmZmVyIjowLCJieXRlTGVuZ3RoIjo3MiwiYnl0ZU9mZnNldCI6MTE4OCwidGFyZ2V0IjozNDk2M30seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjU3NiwiYnl0ZU9mZnNldCI6MTI2MCwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjU3NiwiYnl0ZU9mZnNldCI6MTgzNiwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjc2OCwiYnl0ZU9mZnNldCI6MjQxMiwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjM4NCwiYnl0ZU9mZnNldCI6MzE4MCwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjc2OCwiYnl0ZU9mZnNldCI6MzU2NCwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjQzMzIsImJ5dGVMZW5ndGgiOjk2NzR9LHsiYnVmZmVyIjowLCJieXRlT2Zmc2V0IjoxNDAwOCwiYnl0ZUxlbmd0aCI6ODY1OH1dLCJidWZmZXJzIjpbeyJieXRlTGVuZ3RoIjoyMjY2OH1dLCJpbWFnZXMiOlt7ImJ1ZmZlclZpZXciOjExLCJtaW1lVHlwZSI6ImltYWdlL3BuZyJ9LHsiYnVmZmVyVmlldyI6MTIsIm1pbWVUeXBlIjoiaW1hZ2UvcG5nIn1dLCJtYXRlcmlhbHMiOlt7ImRvdWJsZVNpZGVkIjp0cnVlLCJuYW1lIjoiTGFiZWxfTWF0IiwicGJyTWV0YWxsaWNSb3VnaG5lc3MiOnsiYmFzZUNv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AAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAP7H/fzIRGt01AACAP7H/fzIRGt01AACAP7H/fzIRGt01AACAP7H/fzIRGt01AQAAswIAALMAAIA/AQAAswIAALMAAIA/AQAAswIAALMAAIA/AQAAswIAALMAAIA/AACAvwAAELTXja61AACAvwAAELTXja61AACAvwAAELTXja61AACAvwAAELTXja61AABAM/7/fzIAAIC/AABAM/7/fzIAAIC/AABAM/7/fzIAAIC/AABAM/7/fzIAAIC/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AACAPwAAAAAAAACAAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAAAAAAIAAAIA/AACAPwAAAAAAAACAAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAAAAAAIAAAIA/AACAPwAAAAAAAACAAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAAAAAAIAAAIA/AACAPwAAAAAAAACAAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAAAAAAIAAAIA/AACAPwAAwBoBAAAzAACAPwAAgD8AAMAaAQAAMwAAgD8AAIA/AADAGgEAADMAAIA/AACAPwAAwBoBAAAzAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAAAAAAIAAAIA/AACAPwAAAAAAAACAAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAmQAAQDMAAIA/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");function hs(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class Es{constructor(){hs(this,"getProduct",void 0),hs(this,"getCommandContext",void 0),hs(this,"getAllLayoutData",void 0),hs(this,"getMetadata",void 0),hs(this,"getWorkflowMetadata",void 0),hs(this,"getStepStorage",void 0),hs(this,"getUpdatesPending",void 0)}getServer(){return ws}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}getVariationRecords(){return[]}async reset(){}updateStateWithServer(A){}addVariationRecord(A){return{recordNumber:0,transactionId:"",values:[]}}getCurrentVariationRecord(){}removeVariationRecord(A){return[]}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(A){}addPoller(A){}addConfirmCallback(A){}addCurrentVariationCallback(A){}addEditedCallback(A){}addElementsCallback(A){}addInformationResultCallback(A){}addInitCallback(A){}addMakingAdjustmentsCallback(A){}addMandatoryCallback(A){}addMetadataCallback(A){}addSelectionCallback(A){}addStepSpecificStorageCallback(A,t){}addStorageCallback(A){}addVariationRecordsCallback(A){}getCommandDispatcher(){return A=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getProfanities(){return[]}getRegionElements(A){return[]}getSerializedStep(A,t){}getStepSpecificServices(A){}getTransaction(){return{id:""}}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(A){}markUpdateCompleted(A){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}setCurrentAdjustingStepId(A){}setCurrentVariationRecord(A){}setEditedStatus(A,t){}setInformationResults(A){}setMandatoryFulfilled(A,t){}async setSelectionsAndElements(A,t,e){}setVariationRecords(A){}toggleDesignConfirmed(){}updateMetadata(A,t){}async updateStorage(A,t){}}function Cs(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}let Qs;var us;(us=Qs||(Qs={})).SelectFrame="SelectFrame",us.SelectImage="SelectImage",us.Position="Position";class Is extends Ja{constructor(A,t){super(A,t),Cs(this,"frameService",this.manager.getStepSpecificServices(this.getId())?.frameService)}selectVariant(A){const t=this.manager.getRegionElements(this.step.stepName);return Ia.selectVariant(this.step,A,t,this.manager,(A=>this.setUpdateState(A)))}onFrameDataChanged(A){this.frameService&&this.frameService.onFrameDataChanged((t=>{t&&A(t)}))}selectImage(A){return Ia.selectImage(this.step,A,this.manager)}getImageData(){if(this.frameService)return this.frameService.getImageData()}getCurrentFrameStep(A,t,e,n){return n&&n.length>1&&void 0===A?Qs.SelectFrame:t||e||this.getImageData()?Qs.Position:Qs.SelectImage}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasVaryingUpload(){return this.step.data.varyUpload}hasVaryingSelection(){return this.step.data.varySelection}}const ms=A=>{const e=(0,C.useRef)(null),[n,i]=(0,C.useState)(void 0),[a,s]=(0,C.useState)(void 0),{addEvent:r,removeEvent:o,updateEvent:c,eventCache:g}=wn(),[l,B]=(0,C.useState)(!1),[w,d]=(0,C.useState)(!1),{state:h,uiDispatcher:E}=pn(),Q=(0,C.useCallback)((A=>{const t=A;E(new Dn({zoom:Math.max(.1,Math.min(t,h.maxZoom))}))}),[E,h.maxZoom]),u=(0,C.useCallback)((A=>{o(A),1===g.length&&i(void 0),2===g.length&&s(void 0);"touch"===A.pointerType&&g.length>1&&g.length-1==1&&(d(!1),B(!1))}),[e,g]),I=(0,C.useCallback)((A=>{r(A);"touch"===A.pointerType&&1===g.length&&(E(new Dn({selectedElement:void 0})),d(!0),B(!0))}),[e,w,g]),m=(0,C.useCallback)((A=>{c(A),A.isPrimary&&i({x:A.screenX,y:A.screenY});const t=1===g.length&&"touch"!==g[0].pointerType,e=2===g.length&&"touch"===g[0].pointerType;if(l&&e){const[A,t]=g,e=Math.abs(A.clientX-t.clientX),n=a;n&&Q(h.zoom-.0055*(n-e)),s(e)}if(w&&(t||e)&&A.isPrimary){const t=(n?.x||A.screenX)-A.screenX,e=(n?.y||A.screenY)-A.screenY;E(new Dn({selectedElement:void 0,xTranslation:h.xTranslation-t/h.zoom,yTranslation:h.yTranslation-e/h.zoom}))}}),[h.xTranslation,h.yTranslation,h.zoom,w,l,Q,g,n,a]),D=(0,C.useCallback)((A=>{l&&Q(h.zoom-.035*Math.sign(A.deltaY))}),[h,l]);(0,C.useEffect)((()=>{if(!e.current||0===g.length)return;const A=g[0].pointerId,t=e.current.hasPointerCapture(A);w&&!t&&e.current.setPointerCapture(A),!w&&t&&e.current.releasePointerCapture(A)}),[e,w,g]),ei([" "],(()=>{d(!0),E(new Dn({selectedElement:void 0}))}),(()=>d(!1))),ei(["Control"],(()=>B(!0)),(()=>B(!1)));const p=(0,C.useMemo)((()=>({cursor:w&&0===g.length?"grab":w&&1===g.length?"grabbing":l?"zoom-in":void 0,width:"100%",height:"100%",overflow:"clip"})),[w,l,g]);return(0,t.jsx)("div",{ref:e,className:"transform-wrapper",onWheel:D,onPointerDown:I,onPointerUp:u,onPointerCancel:u,onPointerLeave:u,onPointerMove:m,style:p,children:A.children})};
|
|
238
|
+
`;class La extends Ja{constructor(A,t){super(A,t),Oa(this,"transaction",this.manager.getTransaction())}selectVariant(){throw new Error("Bulk step does not support variants.")}async setDesignName(A){await an.getShadowGraphqlClient().mutate({mutation:ja,variables:{transactionId:this.manager.getTransaction().id,designName:A}});const t=this.manager.getTransaction();this.manager.setTransaction({...t,designName:A})}addVariationRecord(){const A=this.manager.addVariationRecord({transactionId:this.transaction.id,values:[]});return this.manager.setCurrentVariationRecord(A),A}updateBulkIsConnected(A){this.manager.updateStorage(this.getId(),{bulkIsConnected:A})}openBulkSourceUrl(){window.open(this.transaction.bulkSourceUrl,"_blank")}async sendGoogleSheetLinkToEmail(A){await an.getShadowGraphqlClient().mutate({mutation:za,variables:{id:this.transaction.id,bulkEmailAddress:A}}),this.openBulkSourceUrl()}deleteVariationRecord(A){this.manager.removeVariationRecord(A)}getAspects(){return this.step.data.aspects}}class Ta extends Ja{constructor(A,t){super(A,t)}async selectVariant(A){if(await this.getCurrentVariant()!==A)return ma.selectVariant(this.step,A,this.manager.getRegionElements(this.step.stepName)||[],(A=>this.setUpdateState(A)),this.manager)}getColors(){const A=this.manager.getRegionElements(this.step.stepName)||[];if(0!==A.length)try{return Nt(A[0].id,this.manager.getAllLayoutData()).colors}catch(A){}}setColor(A,t){const e=new Map;return e.set(A,t),ma.changeColors(this.step,this.manager.getRegionElements(this.step.stepName),this.manager,(()=>this.manager.getCommandContext().getAllLayouts()),e)}async getColorOption(){const A=this.step.data.colourOptionId;if(!A)return;const t=await ln.getOption(nn,A);return t||void 0}getAvailableColors(){return this.step.data.colourPickerEnabled?ma.availableColors(this.step,this.manager):Promise.resolve([])}hasVaryingSelection(){return this.step.data.varySelection}hasVaryingColors(){return this.step.data.varyColors}isColorPickerEnabled(){return this.step.data.colourPickerEnabled}}class Ka extends Ja{constructor(A,t){super(A,t)}selectVariant(A){return Da.selectVariant(this.step,A,this.manager,(A=>this.setUpdateState(A)))}}class Va extends Ja{constructor(A,t){super(A,t)}selectVariant(A){return pa.selectVariant(this.step,A,this.manager,(A=>this.setUpdateState(A)))}}class Xa extends Ja{constructor(A,t){super(A,t)}selectVariant(A){return ya.selectVariant(this.step,A,this.manager,(A=>this.setUpdateState(A)))}}class Wa extends Ja{constructor(A,t){super(A,t)}async selectVariant(A){if(!A.id)throw new Error("Unable to select variant with a null ID");await Ma.selectVariant(this.step,A.id,this.manager)}getDisplayType(){return this.step.option?.data.displayType}}class Za extends Ja{constructor(A,t){super(A,t)}selectVariant(A){return Promise.resolve()}setColor(A){return Fa.selectVariant(this.step,A,this.manager.getRegionElements(this.step.stepName)||[],this.manager)}getColors(){return Fa.availableColours(this.step,this.manager)}}class qa extends Ja{constructor(A,t){super(A,t)}async selectVariant(A){Pa.selectVariant(this.step,A,this.manager,(A=>{if(A)this.manager.setInformationResults([...this.manager.getInformationResults(),{message:"An issue has occured with test",messageType:Ha.Error,stepID:this.step.stepName}]);else{const A=this.manager.getInformationResults().filter((A=>A.stepID!==this.step.stepName));this.manager.setInformationResults(A)}}),(A=>{}))}getAvailableColors(){return this.step.data.colourPickerEnabled?Pa.availableColors(this.step,this.manager):Promise.resolve([])}async setFill(A){const t=this.manager.getRegionElements(this.step.stepName);await Pa.changeFill(this.step,A,t,this.manager)}getFill(){return this.manager.getStepStorage(this.step.stepName)?.color||"#000000"}setFullTextCustomization(A){const t=this.manager.getStepStorage(this.step.stepName)?.inputText||"",e=void 0!==this.step.data.replaceableText?this.step.data.replaceableText.replace("{{}}",t):t,n=A?e:this.step.data.defaultText;this.manager.updateStorage(this.step.stepName,{customiseAllText:A,text:n,defaultCleared:!1});return this.setText(n)}setText(A){const t={input:A},e=Pa.findLayoutElements(this.manager,this.step),n=Pa.filterUnsupportedCharacters(A,e[0]?.fontData);!!this.step.data&&!!this.step.data.maxLength&&n.length>this.step.data.maxLength||(t.input=n);const i=e.length<=0,a=i?{inputText:n,text:n}:{inputText:n};if(this.manager.updateStorage(this.step.stepName,a),this.manager.updateMetadata(this.step.stepName,{text:n}),i)return t;const{command:s,errors:r,helperText:o}=Pa.updateInputText(n,e,this.step,this.manager);s&&this.manager.getCommandDispatcher()(s);const c=this.manager.getInformationResults(),g=r[0]?.localizationKey;if(g)this.manager.setInformationResults([...c,{message:`${g} - ${this.step.stepTitle}`,messageType:Ha.Error,stepID:this.step.stepName}]);else{const A=c.filter((A=>A.stepID!==this.step.stepName));this.manager.setInformationResults(A)}return t.helperText=g||o,t.errorText=g,t}getText(){const A=this.step.data.defaultText;return this.manager.getStepStorage(this.step.stepName)?.text||A||""}isReplaceable(){return this.step.data.userCanReplaceText}clearDefaultTextIfNecessary(){if(!this.manager.getStepStorage(this.step.stepName)?.defaultCleared&&this.step.data.deleteDefaultOnFocus){const A=this.setText("");return this.manager.updateStorage(this.step.stepName,{defaultCleared:!0,inputText:""}),A}}hasVaryingText(){return this.step.data.varyText}hasVaryingColor(){return this.step.data.varyColor}hasVaryingSelection(){return this.step.data.varySelection}hasColorPicker(){return this.step.data.colourPickerEnabled}getRegions(){return this.step.data.regions}}class $a{static get(A,t){switch(t.type){case V.Question:return new Wa(A,t);case V.Text:return new qa(A,t);case V.Illustration:return new Ta(A,t);case V.Picture:return new Xa(A,t);case V.Shape:return new Za(A,t);case V.Material:return new Ka(A,t);case V.Model:return new Va(A,t);case V.Frame:return new Is(A,t);case V.Bulk:return new La(A,t);default:throw new je(`Step type ${t.type} not yet supported in Core SDK`)}}}function _a(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const As=(A,t,e)=>{const n={};return t.steps.forEach((t=>{Object.assign(n,(t=>{const n={};if("Frame"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideImageInCart&&e)return n;n[`${t.stepTitle} image`]=i.image}if("Illustration"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideColorsInCart&&e||!i.colors)return n;if(i.colors.length>0){const A=i.colors.join(", ").toUpperCase();n[`${t.stepTitle} colors`]=A}}if("Module"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideTextInCart&&e)return n;n[`${t.stepTitle} text`]=i.text}if("Text"===t.type){const i=A[t.stepName];if(!i)return n;const a=t.data;a.hideTextInCart&&e||(n[`${t.stepTitle} text`]=i.text),!i.color||a.hideColorInCart&&e||(n[`${t.stepTitle} color`]=i.color)}return n})(t))})),n},ts=(A,t,e,n,i,a,s,r,o)=>{const c={event:"onComplete",lineItemImageUrl:s?s.href:"",transactionId:A.id,designProductVariantId:A.externalDesignProductVariantId,designProductId:A.externalDesignProductId,baseCost:e,weight:t.weight,optionsCost:n,exportedData:a,workflowViewerLink:A.workflowViewerLink||"",workflowViewerReadOnlyLink:A.workflowViewerReadOnlyLink||""};return i&&(c.metadata=i),r&&(c.selectedVariants=r),o&&(c.sku=o),c},es=async(A,t,e,n,i,a,s)=>{const r=(A.product?.basePrice||0)*(A.variationsCount||0),o=A.priceModifierTotal||0,c=((A,t,e,n)=>{const i={};let a;if(e){a=As(e,t,!1);for(const A of Object.keys(a))i[A]={value:a[A],priceModifier:0}}else if(n){a=n;for(const A of Object.keys(a))i[A]={value:a[A],priceModifier:0}}for(const e of Object.keys(A)){const n=A[e],a=t.steps.find((A=>A.stepTitle===e));if(1===n.length)i[`${a?.stepTitle} selection`]={value:n[0].name,priceModifier:n[0].priceModifier};else if(n.length>1)for(let A=0;A<n.length;A++)i[`${a?.stepTitle} selection ${A+1}`]={value:n[A].name,priceModifier:n[A].priceModifier}}return i})(n,e,void 0,a);return ts(A,t,r,o,a,c,s,n,i)},ns=async(A,t,e,n,i,a,s,r,o,c,g,l,B)=>{o("workflow.steps.finish.finalize.buildingLayouts"),await A.outstandingRequestsPromise();const w=an.getShadowGraphqlClient();await w.resetStore();const d=await w.query({query:ta,variables:{id:a.id},errorPolicy:"all"}),h=d.data?.transactions[0].workflowState;!d.errors&&h||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(n())),d.errors&&d.errors.forEach((A=>{d.errors&&console.log("Server Error:",A.message)})),await A.updateStateWithServerImmediate(n),console.log("Server state is undefined @ Workflow completion"));const E=A.getPreviewService(),C=t?.finalizeStepConfig?.lookAtAnimation,Q=E&&100===E.getSceneInitializationProgress()&&t.showModelOnFinishStep&&!!C,u=B&&As(B,t,!0),I=B&&As(B,t,!1),m=async A=>{const e={};let n=0;if(Object.keys(s).length>0)for(const i of Object.keys(s)){const a=s[i],r=t.steps.find((A=>A.stepName===i));for(let t=0;t<a.selections.length;++t){const i=a.selections[t];if(r&&(!A||await ln.getOption(nn,r.optionId)&&(await ln.getOption(nn,r.optionId)).data.variants.length>1&&!r.data.hideSelectionInCart&&!r.data.hideSelectionsInCart)){const A=r.stepTitle;e[A]?e[A].push({id:i.id||"",name:i.name,priceModifier:i.priceModifier}):e[A]=[{id:i.id||"",name:i.name,priceModifier:i.priceModifier}]}n+=i.priceModifier}}return[e,n]},[D]=await m(!0),p=Object.fromEntries(Object.keys(D).map((A=>[A,D[A].map((A=>A.id))]))),[f]=await m(!1),y=Object.fromEntries(Object.keys(f).map((A=>[A,f[A].map((A=>A.id))]))),M=await l(Q);o("workflow.steps.finish.finalize.creatingDesign"),a.bulk&&await c(g);const F=(await nn.execute("createDesign",{designDetails:(()=>{const A={designName:r,layouts:e.map((A=>({index:A.index,panelId:A.panelId}))),workflowId:t.id,productId:i.id,transactionId:a.id,threeDimPreview:Q,previewImage:M};return B&&(A.metadata=I),p&&(A.selectedVariants=y),A})()})).body,x=F.links.find((A=>"image"===A.rel));o("workflow.steps.finish.finalize.updatingTransaction");const Y=(await an.getShadowGraphqlClient().query({query:Aa,variables:{id:a.id}})).data.transactions[0];return a.bulk?((A,t,e)=>{const n=(A.product?.basePrice||0)*(A.variationsCount||0),i=A.priceModifierTotal||0,a={items:{value:A.variationsCount?`${A.variationsCount}`:"0",priceModifier:0}};return ts(A,t,n,i,void 0,a,e)})(Y,i,x):await es(Y,i,t,D,F.data.sku,u,x)};let is;var as;(as=is||(is={})).Local="Local",as.Remote="Remote";const ss=new class{constructor(){_a(this,"localPersistenceKey","designTransactions"),_a(this,"storageMethod",is.Local),_a(this,"designSavedListeners",[])}attachSaveListener(A){this.designSavedListeners.push(A)}detachSaveListener(A){this.designSavedListeners=this.designSavedListeners.filter((t=>t!==A))}async getSavedDesigns(){return await this.getDesigns()}async getSavedDesignByTransaction(A){return(await this.getSavedDesigns()).find((t=>t.transactionId===A))}async addDesign(A){const t=(await this.getSavedDesigns()).filter((t=>t.transactionId!==A.transactionId));t.unshift(A),await this.setDesigns(t),this.notifyDesignSaved(A)}async removeDesign(A){const t=await this.getSavedDesigns();await this.setDesigns(t.filter((t=>t.transactionId!==A)))}async setDesigns(A){if(this.storageMethod!==is.Local)throw new je("Unexpected storage method requested");Ze.set(this.localPersistenceKey,JSON.stringify(A))}async getDesigns(){if(this.storageMethod===is.Local){const A=Ze.get(this.localPersistenceKey);return A?JSON.parse(A):[]}throw new je("Unexpected storage method requested")}notifyDesignSaved(A){this.designSavedListeners.forEach((t=>t(A)))}};function rs(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class os{constructor(A,t,e){if(rs(this,"client",void 0),rs(this,"commandContext",void 0),rs(this,"workflowManager",void 0),rs(this,"isReadOnly",void 0),rs(this,"server",void 0),rs(this,"renderableScenes",[]),rs(this,"renderableSceneCallbacks",[]),rs(this,"debouncedSavedDesignUpdate",y(D)((async()=>{await ss.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()}),2500)),!t.workflow)throw new Error("No Workflow ID provided.");this.client=A,this.server=e;const n=t.layouts;this.commandContext=new Ft,this.commandContext.initialize(n,t.reloadedState),this.isReadOnly=!!t.transaction.lineItem?.id||!Ze.getMap("transactionOwnerIds")?.get(t.transaction.id)||!!t.readOnly,this.workflowManager=new Ga(t.workflow,t.product.profanities?.map((A=>A.word))||[],n,this.commandContext,(A=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return t.stateMutationFunc(A)}),t.transaction,t.product,this.server,t.previewService,t.renderableContextService,t.reloadedState,t.readOnly),this.workflowManager.addSelectionCallback((A=>{const t=A.traversableScenes.map((A=>{const t=A.renderableSteps.map((A=>A.stepName));return{id:A.name,title:A.title,renderableSteps:t}}));this.renderableScenes=t,this.renderableSceneCallbacks.forEach((A=>A(t)))}))}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async updateVariationRecords(A){await an.getShadowGraphqlClient().mutate({mutation:_i,variables:{transactionId:this.workflowManager.getTransaction().id,updates:A.map((A=>({recordNumber:A.recordNumber,values:A.values.map((A=>({aspect:A.aspect,stepName:A.stepName,value:A.value})))})))}})}async createPreviewImage(A,t){const e=this.workflowManager.getWorkflow()?.finalizeStepConfig?.lookAtAnimation;if(A){if(!e)throw new Error("Failed to generate cart preview image!");return await(this.workflowManager.getPreviewService()?.renderSceneScreenshot(512,e))||""}const n=document.createElement("canvas");let i=2048;t&&t<=2048&&(i=t),n.width=i,n.height=i;const a=this.commandContext.getAllLayouts()[this.workflowManager.getWorkflow().defaultPreviewPanelIndex||0],s=a.layoutState.layout.previewRegion?{x:a.layoutState.layout.previewRegion.left,y:a.layoutState.layout.previewRegion.top,width:a.layoutState.layout.previewRegion.width,height:a.layoutState.layout.previewRegion.height}:{x:0,y:0,width:a.layoutState.layout.width,height:a.layoutState.layout.height},r=this.commandContext.getLayoutById(a.layoutState.layout.id),o=n.getContext("2d");if(!o)throw new Ke("Failed to obtain 2D context for preview image creation");const c=Yt(r.layoutState.layout,r.layoutState.elements,{renderingConfiguration:{purpose:H.Print,region:{left:s.x,top:s.y,width:s.width,height:s.height}}}),g=y(u).renderToStaticMarkup(c),B=await l.Canvg.from(o,g,{anonymousCrossOrigin:!0,ignoreDimensions:!1});await B.render();const w=await(async A=>new Promise(((t,e)=>{try{A.toBlob((A=>{if(A){const e=URL.createObjectURL(A);t(e)}}))}catch(A){e(A)}})))(n);return n.toDataURL(w)}getStepById(A){const t=this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepName===A));if(t&&this.stepHasHandle(t))return $a.get(this.getWorkflowManager(),t)}getBulkStep(){if(this.getWorkflowManager().getTransaction().bulk){const A={type:V.Bulk,stepName:"Bulk",stepTitle:"workflow.steps.bulk.title",helpText:"help:/partner/add-ons/bulk-ordering",data:{aspects:ea(this.getWorkflowManager().getWorkflow())},conditions:[]};return $a.get(this.getWorkflowManager(),A)}}getStepByName(A){const t=this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepTitle===A));if(t&&this.stepHasHandle(t))return $a.get(this.getWorkflowManager(),t)}getStepsByType(A){return this.getWorkflowManager().getWorkflow().steps.filter((t=>t.type===A)).map((A=>$a.get(this.getWorkflowManager(),A)))}getStepsByScene(A){if(!this.getWorkflowManager().getWorkflow().stepGroups.find((t=>t.name===A.name)))throw new Error("Given scene is not present on workflow! Be careful when persisting scenes that you only use them with the relevant workflow.");return A.stepNames.map((A=>this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepName===A)))).filter((A=>this.stepHasHandle(A))).map((A=>$a.get(this.getWorkflowManager(),A)))}async attachCustomerDetails(A){await an.getShadowGraphqlClient().mutate({mutation:za,variables:{id:this.getWorkflowManager().getTransaction().id,bulkEmailAddress:A.email}}),this.getWorkflowManager().setTransactionCustomerDetails(A)}attachRenderableSceneListener(A){this.renderableSceneCallbacks.push(A),A(this.renderableScenes)}detachRenderableSceneListener(A){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter((t=>t!==A))}async save(A){if(!this.getCommandContext().getState())throw new je("State undefined!");const t={title:await(async()=>{if(A)return A;const t=this.getWorkflowManager().getTransaction().id,e=(await ss.getSavedDesigns()).find((A=>A.transactionId===t))?.title;return e||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getWorkflowManager().getTransaction().id,productId:this.getWorkflowManager().getProduct().id,integrationProductId:this.getWorkflowManager().getTransaction().integrationProduct.id,workflowName:this.getWorkflowManager().getWorkflow().name,workflowId:this.getWorkflowManager().getWorkflow().id,lastEdited:new Date};return await ss.addDesign(t),t}async copy(){const t=y(A)(this.getCommandContext().getState());if(!t)throw new je("Internal state is undefined! Cannot copy experience!");const e=JSON.stringify(t.transaction),n=this.getWorkflowManager().getWorkflow(),i=new ls({}),a=this.getWorkflowManager().getTransaction().integrationProduct?.id;if(!a)throw new je("Integration product id is undefined!");await i.initFromIntegrationProduct(a);return await i.getWorkflowExperience(n.id,e,void 0,this.server)}async onDesignFinished(A,t,e,n){return ns(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),(()=>this.commandContext.getState()),A,this.workflowManager.getTransaction(),e,this.workflowManager.getWorkflow().name,t,(A=>this.updateVariationRecords(A)),this.workflowManager.getVariationRecords(),(A=>this.createPreviewImage(A)),n)}stepHasHandle(A){return A.type!==V.SilentIllustration&&A.type!==V.ProductOverlay}}function cs(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const gs=(A,t)=>{const e=A.workflowState,n=e?JSON.parse(e):void 0;return n?Object.values(n.layouts).map((A=>A.layout)):t.panels.sort(((A,t)=>A.index-t.index)).map((A=>({id:Y(),panelId:A.name,name:A.name,index:A.index,createdAt:new Date,updatedAt:new Date,transparentBackground:A.transparentBackground,height:A.height,width:A.width,previewRegion:A.previewRegion,useEditableArea:A.useEditableArea,editableArea:A.editableArea})))};class ls{constructor(A){cs(this,"options",void 0),cs(this,"initialized",void 0),cs(this,"experienceOptions",void 0),cs(this,"updateTransactionState",(async A=>{try{return an.getShadowGraphqlClient().mutate({...A,mutation:qi})}catch(A){throw console.error(A),new Te("Critical - Unable to synchronize workflow state with server.")}})),this.initialized=!1,this.options=A}getAssetManager(){return cn}async initFromIntegrationProduct(A){if(""===A)throw new Te("No integration product ID provided.");this.options.useUncachedEndpoints&&nn.setUncachedOperations(["getAssetByKeyV2","getWorkflowV2","getMaterialV2","getOptionV2"]);const t=an.getShadowGraphqlClient();await t.resetStore();const e=await t.mutate({mutation:Xi,variables:{integrationProductId:A,bulk:this.options.bulk||!1},errorPolicy:"all"});if(!e.data)throw new Te("Failed to create transaction!");const n=(await t.mutate({mutation:Wi,variables:{id:e.data.transactionCreate.id},errorPolicy:"all"})).data?.transactionClaim;if(!n)throw new Te("Failed to create transaction.");if(!e.data.transactionCreate.product)throw new Te("Failed to create transaction, product not available.");const i=Ze.getMap("transactionOwnerIds")||new Map;i.set(n.id,n.transactionOwnerId),tn(n.transactionOwnerId||""),Ze.setMap("transactionOwnerIds",i),this.experienceOptions={product:e.data.transactionCreate.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState},this.initialized=!0}async initFromTransaction(A,t=!1){if(""===A)throw new Te("No transaction ID provided.");const e=an.getShadowGraphqlClient();await e.resetStore();if(t)return await(async()=>{console.log("Readonly Mode");const n=(await e.query({query:Zi,variables:{id:A},errorPolicy:"all"})).data?.transactions[0];if(!n)throw new Te("Failed to read transaction.");if(!n.product)throw new Te("Failed to load transaction, product not available.");this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:async()=>{throw new je("State mutation is forbidden in read only mode!")},readOnly:t},this.initialized=!0})();const n=Ze.getMap("transactionOwnerIds")||new Map,i=n.get(A);if(i){tn(i);const n=(await e.query({query:Zi,variables:{id:A},errorPolicy:"all"})).data?.transactions[0];if(!n)throw new Te("Failed to read transaction.");if(!n.product)throw new Te("Failed to load transaction, product not available.");return this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:t},void(this.initialized=!0)}try{const i=(await e.mutate({mutation:Wi,variables:{id:A},errorPolicy:"all"})).data?.transactionClaim;if(!i)throw new Te("Failed to read transaction.");if(!i.product)throw new Te("Failed to load transaction, product not available.");i.transactionOwnerId&&(n.set(i.id,i.transactionOwnerId),tn(i.transactionOwnerId),Ze.setMap("transactionOwnerIds",n)),this.experienceOptions={product:i.product,transaction:i,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:t},this.initialized=!0}catch{throw new Te("Attempted to access a transaction that isn't available.")}}async getWorkflowExperience(A,t,e,n){if(!this.initialized||!this.experienceOptions)throw new Te("Cannot launch experience: Not initialized.");const i=async A=>{for(const t in A.layouts){const e=A.layouts[t].elements.filter((A=>A.type===P.Illustration));for(let A=0;A<e.length;++A){const t=e[A];t.src&&t.svg&&(t.cachedObjectURL=await Se(t.svg))}const n=A.layouts[t].elements.filter((A=>A.type===P.Textbox));for(let A=0;A<n.length;++A){const t=n[A];t.fontData?.assetUrl&&KA(t.fontData.assetUrl)}}},a=n||nn;if(this.experienceOptions.transaction.workflowId){const A=(await a.execute("getWorkflowV2",{workflowSlug:this.experienceOptions.transaction.workflowId})).body.data;if(this.experienceOptions.workflow=A,this.experienceOptions.transaction.workflowState){const A=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(A.layouts).map((A=>A.layout)),await Ht(A),await i(A),this.experienceOptions.reloadedState=A}this.experienceOptions.previewService=e&&e(A),this.experienceOptions.renderableContextService=new ki(this.experienceOptions.layouts,a),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService);const t=new os(this,this.experienceOptions,a);return await t.getWorkflowManager().getInitializationPromise(),t}if(A){const n=(await a.execute("getWorkflowV2",{workflowSlug:A})).body.data;if(this.experienceOptions.workflow=n,await an.getShadowGraphqlClient().mutate({mutation:$i,variables:{workflowId:A,id:this.experienceOptions.transaction.id}}),t){const A=JSON.parse(t);this.experienceOptions.layouts=Object.values(A.layouts).map((A=>A.layout)),await Ht(A),await i(A),this.experienceOptions.reloadedState=A}else this.experienceOptions.layouts=gs(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=e&&e(n),this.experienceOptions.renderableContextService=new ki(this.experienceOptions.layouts,a),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService);const s=new os(this,this.experienceOptions,a);return await s.getWorkflowManager().getInitializationPromise(),s}throw new Te("No workflow ID provided.")}getPreviewService(){return this.experienceOptions?.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new Te("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new Te("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}}function Bs(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const ws={setUncachedOperations:()=>{},execute:async()=>({body:{},headers:{"content-type":""}})};class ds{static getFrameStep(A){return{type:V.Frame,stepTitle:"My frame Step",stepName:"My Step Name",conditions:[],option:{data:{name:"test",defaultVariant:"1",variants:[{id:"1",name:"my-new-variant",priceModifier:1,asset:{data:{key:"1",createdAt:0,licenseId:"",mimeType:"",ownerId:"",price:0,public:!0,type:T.Frame,objectVersions:[],tags:[]},links:[{href:ds.aFrame,rel:"cdn"}]}},{id:"2",name:"my-new-variant-2",priceModifier:1,asset:{data:{key:"2",createdAt:0,licenseId:"",mimeType:"",ownerId:"",price:0,public:!0,type:T.Frame,objectVersions:[],tags:[]},links:[{href:ds.bFrame,rel:"cdn"}]}}]},links:[]},data:{regions:[{top:0,left:0,width:100,height:100,layer:0,layerIndex:0,rotation:0,panelId:"p-123",immutable:!1,adjustmentBoundary:{x:0,y:0,height:0,width:0}}],...A}}}static getBulkStep(){return{type:V.Bulk,stepTitle:"Bulk",stepName:"bulk-step",data:{aspects:[]}}}static getQuestionStep(A,t){return{type:V.Question,stepTitle:"question-step",stepName:A||"question-step",conditions:t,option:{data:{name:"test",defaultVariant:"1",variants:[{id:"1",name:"my-variant",priceModifier:1},{id:"2",name:"my-variant2",priceModifier:1}]},links:[]},data:{}}}static getMaterialStep(A,t){return{type:V.Material,stepTitle:"My Material Step",stepName:A||"material-step",conditions:t,option:{data:{name:"test",defaultVariant:"1",variants:[{id:"1",name:"my-variant",priceModifier:1,material:{data:{id:"1",name:"mat-1",clearCoat:j.None,createdAt:(new Date).toISOString(),updatedAt:(new Date).toISOString(),albedoMapKey:ds.redRaster},links:[]}},{id:"2",name:"my-variant2",priceModifier:1,material:{data:{id:"2",name:"mat-2",clearCoat:j.None,createdAt:(new Date).toISOString(),updatedAt:(new Date).toISOString(),albedoMapKey:ds.blueRaster},links:[]}}]},links:[]},data:{targetMaterials:["panel"]}}}static getTextStep(A){return{type:V.Text,stepTitle:"s-1",stepName:"s-1",option:{data:{name:"test",defaultVariant:"1",variants:[{id:"1",name:"",priceModifier:1,assetKey:"123",asset:{data:{key:"123",createdAt:0,mimeType:"font/ttf",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Font,tags:[]},links:[{rel:"cdn",href:ds.minimalFont}]}}]},links:[]},data:{regions:[{top:0,left:0,width:100,height:100,rotation:0,panelId:"p-123"}],defaultText:"",font:"",maxLength:100,size:16,textAlign:"center",colour:"#000000",verticalAlign:"top",...A}}}static getIllustrationStep(A){return{type:V.Illustration,stepTitle:"s-1",stepName:"s-1",option:{data:{name:"test",defaultVariant:"1",variants:[{id:"1",name:"",priceModifier:1,assetKey:"123",asset:{data:{key:"123",createdAt:0,mimeType:"image/svg+xml",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Illustration,tags:[]},links:[{rel:"cdn",href:ds.blueShape.src}]}},{id:"2",name:"",priceModifier:1,assetKey:"456",asset:{data:{key:"456",createdAt:0,mimeType:"image/svg+xml",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Illustration,tags:[]},links:[{rel:"cdn",href:ds.redShape.src}]}}]},links:[]},data:{regions:[{top:0,left:0,width:100,height:100,rotation:0,panelId:"p-123"}],colourPickerEnabled:!1,...A}}}static getPictureStep(A,t){return{type:V.Picture,stepTitle:"s-1",stepName:"s-1",option:{data:{name:"test",defaultVariant:t,variants:[{id:"1",name:"a",priceModifier:1,assetKey:"123",asset:{data:{key:"123",createdAt:0,mimeType:"image/png",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Image,tags:[]},links:[{rel:"cdn",href:ds.blueRaster}]}},{id:"2",name:"b",priceModifier:1,assetKey:"456",asset:{data:{key:"456",createdAt:0,mimeType:"image/png",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Image,tags:[]},links:[{rel:"cdn",href:ds.redRaster}]}}]},links:[]},data:{regions:[{top:0,left:0,width:100,height:100,rotation:0,panelId:"p-123"}],...A}}}static getModelStep(A,t){return{type:V.Model,stepTitle:"s-1",stepName:"s-1",optionId:"om-1",option:{data:{id:"om-1",name:"test",defaultVariant:t,variants:[{id:"1",name:"a",priceModifier:1,assetKey:"123",asset:{data:{key:"123",createdAt:0,mimeType:"application/octet-stream",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Model,tags:[]},links:[{rel:"cdn",href:ds.glbBox}]}},{id:"2",name:"b",priceModifier:1,assetKey:"456",asset:{data:{key:"456",createdAt:0,mimeType:"application/octet-stream",ownerId:"",price:0,licenseId:"",public:!1,objectVersions:[],type:T.Model,tags:[]},links:[{rel:"cdn",href:ds.glbVertexTest}]}}]},links:[]},data:{regions:[{top:0,left:0,width:100,height:100,rotation:0,panelId:"p-123"}],...A}}}static getShapeStep(A,t=[]){return{type:V.Shape,stepTitle:"s-1",stepName:A,conditions:t,option:{data:{name:"test",defaultVariant:"1",variants:[{id:"1",name:"a",priceModifier:1,color:"#FFFFFF"},{id:"2",name:"b",priceModifier:1,color:"#000000"}]},links:[]},data:{regions:[{top:0,left:0,width:100,height:100,rotation:0,panelId:"p-123"}]}}}static getSilentIllustrationStep(A,t=[]){return{type:V.SilentIllustration,stepTitle:"s-1",stepName:A,conditions:t,data:{assetKey:ds.redRaster,regions:[{top:0,left:0,width:100,height:100,rotation:0,panelId:"p-123"}]}}}}Bs(ds,"minimalFont","data:font/truetype;charset=utf-8;base64,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"),Bs(ds,"redShape",{src:"https://assets.spiff.com.au/public/assets/56cf72f5-a98d-487f-9e79-8129030ab99e.svg",text:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><script xmlns=""/><defs><style>.cls-1{fill:#f285b1;}</style></defs><title>Asset 4</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><rect class="cls-1" width="512" height="512"/></g></g></svg>'}),Bs(ds,"blueShape",{src:"https://assets.spiff.com.au/public/assets/6b9c3b7a-a669-41be-8ba2-538588d449e0.svg",text:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><script xmlns=""/><defs><style>.cls-1{fill:#53c6d6;}</style></defs><title>Asset 3</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><rect class="cls-1" width="512" height="512"/></g></g></svg>'}),Bs(ds,"aFrame","https://assets.spiff.com.au/public/assets/5bb3c003-3d30-4c98-9f07-2cfe25fbc4f7.svg"),Bs(ds,"bFrame","https://assets.spiff.com.au/public/assets/25e42f93-3f5d-43b6-9075-29164000bdf5.svg"),Bs(ds,"redRaster","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg=="),Bs(ds,"blueRaster","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPj/HwADBwIAMCbHYQAAAABJRU5ErkJggg=="),Bs(ds,"glbBox","data:@file/octet-stream;base64,Z2xURgIAAACABgAA3AMAAEpTT057ImFzc2V0Ijp7ImdlbmVyYXRvciI6IkNPTExBREEyR0xURiIsInZlcnNpb24iOiIyLjAifSwic2NlbmUiOjAsInNjZW5lcyI6W3sibm9kZXMiOlswXX1dLCJub2RlcyI6W3siY2hpbGRyZW4iOlsxXSwibWF0cml4IjpbMS4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsLTEuMCwwLjAsMC4wLDEuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMF19LHsibWVzaCI6MH1dLCJtZXNoZXMiOlt7InByaW1pdGl2ZXMiOlt7ImF0dHJpYnV0ZXMiOnsiTk9STUFMIjoxLCJQT1NJVElPTiI6Mn0sImluZGljZXMiOjAsIm1vZGUiOjQsIm1hdGVyaWFsIjowfV0sIm5hbWUiOiJNZXNoIn1dLCJhY2Nlc3NvcnMiOlt7ImJ1ZmZlclZpZXciOjAsImJ5dGVPZmZzZXQiOjAsImNvbXBvbmVudFR5cGUiOjUxMjMsImNvdW50IjozNiwibWF4IjpbMjNdLCJtaW4iOlswXSwidHlwZSI6IlNDQUxBUiJ9LHsiYnVmZmVyVmlldyI6MSwiYnl0ZU9mZnNldCI6MCwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjI0LCJtYXgiOlsxLjAsMS4wLDEuMF0sIm1pbiI6Wy0xLjAsLTEuMCwtMS4wXSwidHlwZSI6IlZFQzMifSx7ImJ1ZmZlclZpZXciOjEsImJ5dGVPZmZzZXQiOjI4OCwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjI0LCJtYXgiOlswLjUsMC41LDAuNV0sIm1pbiI6Wy0wLjUsLTAuNSwtMC41XSwidHlwZSI6IlZFQzMifV0sIm1hdGVyaWFscyI6W3sicGJyTWV0YWxsaWNSb3VnaG5lc3MiOnsiYmFzZUNvbG9yRmFjdG9yIjpbMC44MDAwMDAwMTE5MjA5MjksMC4wLDAuMCwxLjBdLCJtZXRhbGxpY0ZhY3RvciI6MC4wfSwibmFtZSI6IlJlZCJ9XSwiYnVmZmVyVmlld3MiOlt7ImJ1ZmZlciI6MCwiYnl0ZU9mZnNldCI6NTc2LCJieXRlTGVuZ3RoIjo3MiwidGFyZ2V0IjozNDk2M30seyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjAsImJ5dGVMZW5ndGgiOjU3NiwiYnl0ZVN0cmlkZSI6MTIsInRhcmdldCI6MzQ5NjJ9XSwiYnVmZmVycyI6W3siYnl0ZUxlbmd0aCI6NjQ4fV19iAIAAEJJTgAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAC/AAAAvwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAvwAAAD8AAAA/AAAAvwAAAL8AAAC/AAAAvwAAAL8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAC/AAAAPwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAC/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAA/AAAAPwAAAL8AAAEAAgADAAIAAQAEAAUABgAHAAYABQAIAAkACgALAAoACQAMAA0ADgAPAA4ADQAQABEAEgATABIAEQAUABUAFgAXABYAFQA="),Bs(ds,"glbVertexTest","data:@file/octet-stream;base64,Z2xURgIAAABsZgAAxA0AAEpTT057ImFjY2Vzc29ycyI6W3siYnVmZmVyVmlldyI6MCwiY29tcG9uZW50VHlwZSI6NTEyMSwiY291bnQiOjM2LCJtYXgiOlsyM10sIm1pbiI6WzBdLCJ0eXBlIjoiU0NBTEFSIn0seyJidWZmZXJWaWV3IjoxLCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6MjQsIm1heCI6WzAuNzU1NDc4MzgyMTEwNTk1NywtMC44NTEyNDE2NDgxOTcxNzQxLDAuOTc1MDMyODY2MDAxMTI5Ml0sIm1pbiI6Wy0wLjcwNDU2NTgyMzA3ODE1NTUsLTAuODUxMjQxNzA3ODAxODE4OCwtMC45NjExMTU0Nzk0NjkyOTkzXSwidHlwZSI6IlZFQzMifSx7ImJ1ZmZlclZpZXciOjIsImNvbXBvbmVudFR5cGUiOjUxMjYsImNvdW50IjoyNCwibWF4IjpbMCwxLDBdLCJtaW4iOlswLDEsMF0sInR5cGUiOiJWRUMzIn0seyJidWZmZXJWaWV3IjozLCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6MjQsIm1heCI6WzEsNy4xMjE5Mzg5NDk2OTQ1OTVlLTgsMS41MTA1MTkyMTE5MzM1Njk3ZS03LDFdLCJtaW4iOlsxLC0xLjQzNDg4MTM2OTI3NzcxODVlLTcsLTEuMTI1NzY3NjM5MTA5NjUzOGUtNywxXSwidHlwZSI6IlZFQzQifSx7ImJ1ZmZlclZpZXciOjQsImNvbXBvbmVudFR5cGUiOjUxMjYsImNvdW50IjoyNCwibWF4IjpbMC45OTk5OTk4ODA3OTA3MTA0LDAuODAxMDQwOTQ3NDM3Mjg2NF0sIm1pbiI6WzAsMC4wNTUzOTcyNzIxMDk5ODUzNV0sInR5cGUiOiJWRUMyIn0seyJidWZmZXJWaWV3Ijo1LCJjb21wb25lbnRUeXBlIjo1MTIxLCJjb3VudCI6NzIsIm1heCI6WzQ3XSwibWluIjpbMF0sInR5cGUiOiJTQ0FMQVIifSx7ImJ1ZmZlclZpZXciOjYsImNvbXBvbmVudFR5cGUiOjUxMjYsImNvdW50Ijo0OCwibWF4IjpbMS4wMDAwMDA0NzY4MzcxNTgyLDEsMC40ODc0MjI0NjYyNzgwNzYxN10sIm1pbiI6Wy0xLjAwMDAwMDM1NzYyNzg2ODcsLTEsLTAuMTcxODY2NTM2MTQwNDQxOV0sInR5cGUiOiJWRUMzIn0seyJidWZmZXJWaWV3Ijo3LCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6NDgsIm1heCI6WzEsMSwxXSwibWluIjpbLTEsLTEsLTFdLCJ0eXBlIjoiVkVDMyJ9LHsiYnVmZmVyVmlldyI6OCwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjQ4LCJtYXgiOlsxLDcuOTQwOTMzODgwNTA5MDY2ZS0yMyw0LjQ3MDM0ODM1ODE1NDI5N2UtOCwxXSwibWluIjpbMSwtNi42MTc0NDQ5MDA0MjQyMjJlLTI0LDAsMV0sInR5cGUiOiJWRUM0In0seyJidWZmZXJWaWV3Ijo5LCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6NDgsIm1heCI6WzAuODM2MTI5NjA1NzcwMTExMSwwLjc2NjYzMTkwMTI2NDE5MDddLCJtaW4iOlswLjIyNjEzMDQ1NTczMjM0NTU4LDAuMjMyMTE3NjUyODkzMDY2NF0sInR5cGUiOiJWRUMyIn0seyJidWZmZXJWaWV3IjoxMCwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjQ4LCJtYXgiOlsxLDEsMSwxXSwibWluIjpbMCwwLDAsMV0sInR5cGUiOiJWRUM0In1dLCJhc3NldCI6eyJjb3B5cmlnaHQiOiJDb3B5cmlnaHQgMjAxOCBBbmFseXRpY2FsIEdyYXBoaWNzLCBJbmMuLCBDQy1CWSA0LjAgaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC8gLSBNZXNoIGFuZCB0ZXh0dXJlcyBieSBFZCBNYWNrZXkuIiwiZ2VuZXJhdG9yIjoiS2hyb25vcyBCbGVuZGVyIGdsVEYgMi4wIGV4cG9ydGVyIiwidmVyc2lvbiI6IjIuMCJ9LCJidWZmZXJWaWV3cyI6W3siYnVmZmVyIjowLCJieXRlTGVuZ3RoIjozNiwiYnl0ZU9mZnNldCI6MCwidGFyZ2V0IjozNDk2M30seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjI4OCwiYnl0ZU9mZnNldCI6MzYsInRhcmdldCI6MzQ5NjJ9LHsiYnVmZmVyIjowLCJieXRlTGVuZ3RoIjoyODgsImJ5dGVPZmZzZXQiOjMyNCwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjM4NCwiYnl0ZU9mZnNldCI6NjEyLCJ0YXJnZXQiOjM0OTYyfSx7ImJ1ZmZlciI6MCwiYnl0ZUxlbmd0aCI6MTkyLCJieXRlT2Zmc2V0Ijo5OTYsInRhcmdldCI6MzQ5NjJ9LHsiYnVmZmVyIjowLCJieXRlTGVuZ3RoIjo3MiwiYnl0ZU9mZnNldCI6MTE4OCwidGFyZ2V0IjozNDk2M30seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjU3NiwiYnl0ZU9mZnNldCI6MTI2MCwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjU3NiwiYnl0ZU9mZnNldCI6MTgzNiwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjc2OCwiYnl0ZU9mZnNldCI6MjQxMiwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjM4NCwiYnl0ZU9mZnNldCI6MzE4MCwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVMZW5ndGgiOjc2OCwiYnl0ZU9mZnNldCI6MzU2NCwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjQzMzIsImJ5dGVMZW5ndGgiOjk2NzR9LHsiYnVmZmVyIjowLCJieXRlT2Zmc2V0IjoxNDAwOCwiYnl0ZUxlbmd0aCI6ODY1OH1dLCJidWZmZXJzIjpbeyJieXRlTGVuZ3RoIjoyMjY2OH1dLCJpbWFnZXMiOlt7ImJ1ZmZlclZpZXciOjExLCJtaW1lVHlwZSI6ImltYWdlL3BuZyJ9LHsiYnVmZmVyVmlldyI6MTIsIm1pbWVUeXBlIjoiaW1hZ2UvcG5nIn1dLCJtYXRlcmlhbHMiOlt7ImRvdWJsZVNpZGVkIjp0cnVlLCJuYW1lIjoiTGFiZWxfTWF0IiwicGJyTWV0YWxsaWNSb3VnaG5lc3MiOnsiYmFzZUNv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AAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAP7H/fzIRGt01AACAP7H/fzIRGt01AACAP7H/fzIRGt01AACAP7H/fzIRGt01AQAAswIAALMAAIA/AQAAswIAALMAAIA/AQAAswIAALMAAIA/AQAAswIAALMAAIA/AACAvwAAELTXja61AACAvwAAELTXja61AACAvwAAELTXja61AACAvwAAELTXja61AABAM/7/fzIAAIC/AABAM/7/fzIAAIC/AABAM/7/fzIAAIC/AABAM/7/fzIAAIC/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrb//38/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AAAAADFlCrYAAIA/AACAPwAAAAAAAACAAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAAAAAAIAAAIA/AACAPwAAAAAAAACAAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAAAAAAIAAAIA/AACAPwAAAAAAAACAAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAAAAAAIAAAIA/AACAPwAAAAAAAACAAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAAAAAAIAAAIA/AACAPwAAwBoBAAAzAACAPwAAgD8AAMAaAQAAMwAAgD8AAIA/AADAGgEAADMAAIA/AACAPwAAwBoBAAAzAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAAAAAAIAAAIA/AACAPwAAAAAAAACAAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAmQAAQDMAAIA/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");function hs(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class Es{constructor(){hs(this,"getProduct",void 0),hs(this,"getCommandContext",void 0),hs(this,"getAllLayoutData",void 0),hs(this,"getMetadata",void 0),hs(this,"getWorkflowMetadata",void 0),hs(this,"getStepStorage",void 0),hs(this,"getUpdatesPending",void 0)}getServer(){return ws}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}getVariationRecords(){return[]}async reset(){}updateStateWithServer(A){}addVariationRecord(A){return{recordNumber:0,transactionId:"",values:[]}}getCurrentVariationRecord(){}removeVariationRecord(A){return[]}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(A){}addPoller(A){}addConfirmCallback(A){}addCurrentVariationCallback(A){}addEditedCallback(A){}addElementsCallback(A){}addInformationResultCallback(A){}addInitCallback(A){}addMakingAdjustmentsCallback(A){}addMandatoryCallback(A){}addMetadataCallback(A){}addSelectionCallback(A){}addStepSpecificStorageCallback(A,t){}addStorageCallback(A){}addVariationRecordsCallback(A){}getCommandDispatcher(){return A=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getProfanities(){return[]}getRegionElements(A){return[]}getSerializedStep(A,t){}getStepSpecificServices(A){}getTransaction(){return{id:""}}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(A){}markUpdateCompleted(A){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}setCurrentAdjustingStepId(A){}setCurrentVariationRecord(A){}setEditedStatus(A,t){}setInformationResults(A){}setMandatoryFulfilled(A,t){}async setSelectionsAndElements(A,t,e){}setVariationRecords(A){}toggleDesignConfirmed(){}updateMetadata(A,t){}async updateStorage(A,t){}}function Cs(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}let Qs;var us;(us=Qs||(Qs={})).SelectFrame="SelectFrame",us.SelectImage="SelectImage",us.Position="Position";class Is extends Ja{constructor(A,t){super(A,t),Cs(this,"frameService",this.manager.getStepSpecificServices(this.getId())?.frameService)}selectVariant(A){const t=this.manager.getRegionElements(this.step.stepName);return Ia.selectVariant(this.step,A,t,this.manager,(A=>this.setUpdateState(A)))}onFrameDataChanged(A){this.frameService&&this.frameService.onFrameDataChanged((t=>{t&&A(t)}))}selectImage(A){return Ia.selectImage(this.step,A,this.manager)}getImageData(){if(this.frameService)return this.frameService.getImageData()}getCurrentFrameStep(A,t,e,n){return n&&n.length>1&&void 0===A?Qs.SelectFrame:t||e||this.getImageData()?Qs.Position:Qs.SelectImage}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasVaryingUpload(){return this.step.data.varyUpload}hasVaryingSelection(){return this.step.data.varySelection}}const ms=A=>{const e=(0,C.useRef)(null),[n,i]=(0,C.useState)(void 0),[a,s]=(0,C.useState)(void 0),{addEvent:r,removeEvent:o,updateEvent:c,eventCache:g}=wn(),[l,B]=(0,C.useState)(!1),[w,d]=(0,C.useState)(!1),{state:h,uiDispatcher:E}=pn(),Q=(0,C.useCallback)((A=>{const t=A;E(new Dn({zoom:Math.max(.1,Math.min(t,h.maxZoom))}))}),[E,h.maxZoom]),u=(0,C.useCallback)((A=>{o(A),1===g.length&&i(void 0),2===g.length&&s(void 0);"touch"===A.pointerType&&g.length>1&&g.length-1==1&&(d(!1),B(!1))}),[e,g]),I=(0,C.useCallback)((A=>{r(A);"touch"===A.pointerType&&1===g.length&&(E(new Dn({selectedElement:void 0})),d(!0),B(!0))}),[e,w,g]),m=(0,C.useCallback)((A=>{c(A),A.isPrimary&&i({x:A.screenX,y:A.screenY});const t=1===g.length&&"touch"!==g[0].pointerType,e=2===g.length&&"touch"===g[0].pointerType;if(l&&e){const[A,t]=g,e=Math.abs(A.clientX-t.clientX),n=a;n&&Q(h.zoom-.0055*(n-e)),s(e)}if(w&&(t||e)&&A.isPrimary){const t=(n?.x||A.screenX)-A.screenX,e=(n?.y||A.screenY)-A.screenY;E(new Dn({selectedElement:void 0,xTranslation:h.xTranslation-t/h.zoom,yTranslation:h.yTranslation-e/h.zoom}))}}),[h.xTranslation,h.yTranslation,h.zoom,w,l,Q,g,n,a]),D=(0,C.useCallback)((A=>{l&&Q(h.zoom-.035*Math.sign(A.deltaY))}),[h,l]);(0,C.useEffect)((()=>{if(!e.current||0===g.length)return;const A=g[0].pointerId,t=e.current.hasPointerCapture(A);w&&!t&&e.current.setPointerCapture(A),!w&&t&&e.current.releasePointerCapture(A)}),[e,w,g]),ei([" "],(()=>{d(!0),E(new Dn({selectedElement:void 0}))}),(()=>d(!1))),ei(["Control"],(()=>B(!0)),(()=>B(!1)));const p=(0,C.useMemo)((()=>({cursor:w&&0===g.length?"grab":w&&1===g.length?"grabbing":l?"zoom-in":void 0,width:"100%",height:"100%",overflow:"clip"})),[w,l,g]);return(0,t.jsx)("div",{ref:e,className:"transform-wrapper",onWheel:D,onPointerDown:I,onPointerUp:u,onPointerCancel:u,onPointerLeave:u,onPointerMove:m,style:p,children:A.children})};
|
|
239
239
|
//# sourceMappingURL=main.js.map
|