@spiffcommerce/core 17.0.0 → 17.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1788,6 +1788,11 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
1788
1788
  priceModifierTotal
1789
1789
  workflowViewerLink
1790
1790
  workflowViewerReadOnlyLink
1791
+ integrationProduct {
1792
+ id
1793
+ additionalExternalProductId
1794
+ additionalExternalVariantId
1795
+ }
1791
1796
  }
1792
1797
  `,en=M.gql`
1793
1798
  ${GA}
@@ -1835,7 +1840,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
1835
1840
  }
1836
1841
  }
1837
1842
  }
1838
- `,tn=async g=>{var A;return(A=(await H.getShadowGraphqlClient().mutate({mutation:en,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:g.name,layouts:g.layouts,workflowId:g.workflowId,transactionId:g.transactionId,previewImage:g.previewImage,useThreeDimPreview:g.useThreeDimPreview,metadata:g.metadata,selectedVariants:g.selectedVariants}})).data)==null?void 0:A.designCreate},nn=async g=>{var A;return(A=(await H.getShadowGraphqlClient().mutate({mutation:An,errorPolicy:"all",fetchPolicy:"no-cache",variables:{inputs:g.map(t=>({name:t.name,layouts:t.layouts,workflowId:t.workflowId,transactionId:t.transactionId,previewImage:t.previewImage,useThreeDimPreview:t.useThreeDimPreview,metadata:t.metadata,selectedVariants:t.selectedVariants}))}})).data)==null?void 0:A.designCreateMany},Le=(g,e,A)=>{const t=a=>{const i={};if(a.type==="Frame"){const o=g[a.stepName],s=a.data;if(!o||!o.image||s.hideImageInCart&&A)return i;i[`${a.stepTitle} image`]=o.image}if(a.type==="Illustration"){const o=g[a.stepName],s=a.data;if(!o||s.hideColorsInCart&&A||!o.colors)return i;if(o.colors.length>0){const r=o.colors.join(", ").toUpperCase();i[`${a.stepTitle} colors`]=r}}if(a.type==="Module"){const o=g[a.stepName],s=a.data;if(!o||o.text===void 0||o.text===null||s.hideTextInCart&&A)return i;i[`${a.stepTitle} text`]=o.text}if(a.type==="Text"){const o=g[a.stepName];if(!o)return i;const s=a.data;(!s.hideTextInCart||!A&&o.text!==void 0&&o.text!==null)&&(i[`${a.stepTitle} text`]=o.text),o.color&&(!s.hideColorInCart||!A)&&(i[`${a.stepTitle} color`]=o.color)}return i},n={};return e.steps.forEach(a=>{Object.assign(n,t(a))}),n},an=(g,e,A,t)=>{const n={};let a;if(A){a=Le(A,e,!1);for(const i of Object.keys(a))n[i]={value:a[i],priceModifier:0}}else if(t){a=t;for(const i of Object.keys(a))n[i]={value:a[i],priceModifier:0}}for(const i of Object.keys(g)){const o=g[i],s=e.steps.find(r=>r.stepTitle===i);if(o.length===1)n[`${s==null?void 0:s.stepTitle} selection`]={value:o[0].name,priceModifier:o[0].priceModifier};else if(o.length>1)for(let r=0;r<o.length;r++)n[`${s==null?void 0:s.stepTitle} selection ${r+1}`]={value:o[r].name,priceModifier:o[r].priceModifier}}return n},on=(g,e,A,t,n,a,i,o,s,r)=>{const d=(P.getMap("transactionOwnerIds")||new Map).get(g.id),B={baseCost:A,designProductId:g.externalDesignProductId,designProductVariantId:g.externalDesignProductVariantId,event:"onComplete",exportedData:a,externalCartProductId:g.externalCartProductId,externalCartProductVariantId:g.externalCartProductVariantId,lineItemImageUrl:i||"",optionsCost:t,processExecutionId:r,transactionId:g.id,transactionOwnerId:d,weight:e.weight,workflowViewerLink:g.workflowViewerLink||"",workflowViewerReadOnlyLink:g.workflowViewerReadOnlyLink||""};return n&&(B.metadata=n),o&&(B.selectedVariants=o),s&&(B.sku=s),B},vA=async(g,e,A,t,n,a,i,o)=>{const s=e.basePrice||0,r=g.priceModifierTotal||0,l=an(t,A,void 0,a);return on(g,e,s,r,a,l,i,t,n,o)},kA=async(g,e,A,t,n,a,i,o,s,r)=>{var Y;await(async()=>{var T;if(r!==void 0)return r;await g.outstandingRequestsPromise();const S=(P.getMap("transactionOwnerIds")||new Map).get(n.id),N=await H.getShadowGraphqlClient().query({query:lA,variables:{ids:[n.id]},fetchPolicy:"no-cache",errorPolicy:"all",context:{transactionOwnerId:S}}),v=(T=N.data)==null?void 0:T.transactions[0].workflowState;return N.errors?(N.errors.forEach(K=>{N.errors&&console.log("Server Error:",K.message)}),null):v??null})()||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(t())),await g.updateStateWithServerImmediate(t),console.log("Server state is undefined @ Workflow completion"));const B=g.getPreviewService(),w=(Y=e==null?void 0:e.finalizeStepConfig)==null?void 0:Y.lookAtAnimation,E=B&&e.showModelOnFinishStep&&!!w,m=s&&Le(s,e,!0),h=s&&Le(s,e,!1),u=async y=>{const S={};let G=0;if(Object.keys(a).length>0)for(const N of Object.keys(a)){const v=a[N],T=e.steps.find(K=>K.stepName===N);for(let K=0;K<v.selections.length;++K){const V=v.selections[K];if(T&&(!y||T.option&&(T.option.variants||[]).length>1&&!T.data.hideSelectionInCart&&!T.data.hideSelectionsInCart)){const Ve=T.stepTitle;S[Ve]?S[Ve].push({id:V.id||"",name:V.name,priceModifier:V.priceModifier}):S[Ve]=[{id:V.id||"",name:V.name,priceModifier:V.priceModifier}]}G+=V.priceModifier}}return[S,G]},[C]=await u(!0),f=Object.fromEntries(Object.keys(C).map(y=>[y,C[y].map(S=>S.id)])),[I]=await u(!1),F=Object.fromEntries(Object.keys(I).map(y=>[y,I[y].map(S=>S.id)])),p=await o(E);return{designDetails:(()=>{const y={name:i,layouts:A.map(S=>({index:S.index,panelId:S.panelId})),workflowId:e.id,transactionId:n.id,useThreeDimPreview:!!E,previewImage:p};if(h){const S=[];for(const[G,N]of Object.entries(h))S.push({key:G,value:N});y.metadata=S}if(f){const S=[];for(const[G,N]of Object.entries(F))S.push({key:G,ids:N});y.selectedVariants=S}return y})(),cartSelectionsWithPrices:C,cartMetadata:m}},bA=async(g,e,A,t,n,a,i,o,s,r,l)=>{var u,C;s("workflow.steps.finish.finalize.buildingLayouts");const{designDetails:d,cartSelectionsWithPrices:B,cartMetadata:w}=await kA(g,e,A,t,a,i,o,r,l);s("workflow.steps.finish.finalize.creatingDesign");const E=await tn(d),m=(u=E==null?void 0:E.transaction)==null?void 0:u.previewImageLink;if(!(E!=null&&E.transaction))throw new Error("Failed to create design");s("workflow.steps.finish.finalize.updatingTransaction");const h=E.transaction;return await vA(h,n,e,B,E==null?void 0:E.sku,w,m,(C=E==null?void 0:E.processExecution)==null?void 0:C.id)},sn=async(g,e)=>{e("workflow.steps.finish.finalize.buildingLayouts"),await Promise.all(g.map(async i=>{await i.workflowManager.outstandingRequestsPromise()}));const t=await(async()=>{var s;const o=await H.getShadowGraphqlClient().query({query:lA,variables:{ids:g.map(r=>r.transaction.id)},fetchPolicy:"no-cache",errorPolicy:"all"});return o.errors?(o.errors.forEach(r=>{o.errors&&console.log("Server Error:",r.message)}),null):(s=o.data)!=null&&s.transactions?o.data.transactions.map(r=>r.workflowState??null):null})(),n=await Promise.all(g.map(async(i,o)=>await kA(i.workflowManager,i.workflow,i.layouts,i.getReducerState,i.transaction,i.workflowSelections,i.designName,()=>Promise.resolve(void 0),i.workflowMetadata,t?t[o]:void 0)));e("workflow.steps.finish.finalize.creatingDesign");const a=await nn(n.map(i=>i.designDetails));if(!a)throw new Error("Failed to create designs");return e("workflow.steps.finish.finalize.updatingTransaction"),Promise.all(a.map(async(i,o)=>{var d;const s=g[o],r=n[o],l=i.transaction;return await vA(l,s.product,s.workflow,r.cartSelectionsWithPrices,i.sku,r.cartMetadata,void 0,(d=i.processExecution)==null?void 0:d.id)}))};class rn{constructor(){this.localPersistenceKey="designTransactions",this.storageMethod="Local",this.designSavedListeners=[]}attachSaveListener(e){this.designSavedListeners.push(e)}detachSaveListener(e){this.designSavedListeners=this.designSavedListeners.filter(A=>A!==e)}async getSavedDesigns(){if(this.storageMethod==="Local"){const e=P.get(this.localPersistenceKey);return e?JSON.parse(e):[]}throw new U("Unexpected storage method requested")}async getSavedDesignByTransaction(e){return(await this.getSavedDesigns()).find(t=>t.transactionId===e)}async addDesign(e){const t=(await this.getSavedDesigns()).filter(n=>n.transactionId!==e.transactionId);t.unshift(e),await this.setDesigns(t),this.designSavedListeners.forEach(n=>n(e))}async renameDesign(e,A){const t=await this.getSavedDesigns(),n=t.find(a=>a.transactionId===e);if(!n)throw new Error(`No saved design for transaction ${e}.`);n.title=A,await this.setDesigns(t)}async removeDesign(e){const A=await this.getSavedDesigns();await this.setDesigns(A.filter(t=>t.transactionId!==e))}async setDesigns(e){if(this.storageMethod==="Local"){P.set(this.localPersistenceKey,JSON.stringify(e));return}throw new U("Unexpected storage method requested")}}const fe=new rn,cn=M.gql`
1843
+ `,tn=async g=>{var A;return(A=(await H.getShadowGraphqlClient().mutate({mutation:en,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:g.name,layouts:g.layouts,workflowId:g.workflowId,transactionId:g.transactionId,previewImage:g.previewImage,useThreeDimPreview:g.useThreeDimPreview,metadata:g.metadata,selectedVariants:g.selectedVariants}})).data)==null?void 0:A.designCreate},nn=async g=>{var A;return(A=(await H.getShadowGraphqlClient().mutate({mutation:An,errorPolicy:"all",fetchPolicy:"no-cache",variables:{inputs:g.map(t=>({name:t.name,layouts:t.layouts,workflowId:t.workflowId,transactionId:t.transactionId,previewImage:t.previewImage,useThreeDimPreview:t.useThreeDimPreview,metadata:t.metadata,selectedVariants:t.selectedVariants}))}})).data)==null?void 0:A.designCreateMany},Le=(g,e,A)=>{const t=a=>{const i={};if(a.type==="Frame"){const o=g[a.stepName],s=a.data;if(!o||!o.image||s.hideImageInCart&&A)return i;i[`${a.stepTitle} image`]=o.image}if(a.type==="Illustration"){const o=g[a.stepName],s=a.data;if(!o||s.hideColorsInCart&&A||!o.colors)return i;if(o.colors.length>0){const r=o.colors.join(", ").toUpperCase();i[`${a.stepTitle} colors`]=r}}if(a.type==="Module"){const o=g[a.stepName],s=a.data;if(!o||o.text===void 0||o.text===null||s.hideTextInCart&&A)return i;i[`${a.stepTitle} text`]=o.text}if(a.type==="Text"){const o=g[a.stepName];if(!o)return i;const s=a.data;(!s.hideTextInCart||!A&&o.text!==void 0&&o.text!==null)&&(i[`${a.stepTitle} text`]=o.text),o.color&&(!s.hideColorInCart||!A)&&(i[`${a.stepTitle} color`]=o.color)}return i},n={};return e.steps.forEach(a=>{Object.assign(n,t(a))}),n},an=(g,e,A,t)=>{const n={};let a;if(A){a=Le(A,e,!1);for(const i of Object.keys(a))n[i]={value:a[i],priceModifier:0}}else if(t){a=t;for(const i of Object.keys(a))n[i]={value:a[i],priceModifier:0}}for(const i of Object.keys(g)){const o=g[i],s=e.steps.find(r=>r.stepTitle===i);if(o.length===1)n[`${s==null?void 0:s.stepTitle} selection`]={value:o[0].name,priceModifier:o[0].priceModifier};else if(o.length>1)for(let r=0;r<o.length;r++)n[`${s==null?void 0:s.stepTitle} selection ${r+1}`]={value:o[r].name,priceModifier:o[r].priceModifier}}return n},vA=(g,e,A,t,n,a,i,o)=>{var E,m;const s=e.basePrice||0,r=g.priceModifierTotal||0,l=an(t,A,void 0,a),B=(P.getMap("transactionOwnerIds")||new Map).get(g.id),w={additionalExternalProductId:(E=g.integrationProduct)==null?void 0:E.additionalExternalProductId,additionalExternalVariantId:(m=g.integrationProduct)==null?void 0:m.additionalExternalVariantId,baseCost:s,designProductId:g.externalDesignProductId,designProductVariantId:g.externalDesignProductVariantId,event:"onComplete",exportedData:l,externalCartProductId:g.externalCartProductId,externalCartProductVariantId:g.externalCartProductVariantId,lineItemImageUrl:i||"",optionsCost:r,processExecutionId:o,transactionId:g.id,transactionOwnerId:B,weight:e.weight,workflowViewerLink:g.workflowViewerLink||"",workflowViewerReadOnlyLink:g.workflowViewerReadOnlyLink||""};return a&&(w.metadata=a),t&&(w.selectedVariants=t),n&&(w.sku=n),w},kA=async(g,e,A,t,n,a,i,o,s,r)=>{var Y;await(async()=>{var T;if(r!==void 0)return r;await g.outstandingRequestsPromise();const S=(P.getMap("transactionOwnerIds")||new Map).get(n.id),N=await H.getShadowGraphqlClient().query({query:lA,variables:{ids:[n.id]},fetchPolicy:"no-cache",errorPolicy:"all",context:{transactionOwnerId:S}}),v=(T=N.data)==null?void 0:T.transactions[0].workflowState;return N.errors?(N.errors.forEach(K=>{N.errors&&console.log("Server Error:",K.message)}),null):v??null})()||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(t())),await g.updateStateWithServerImmediate(t),console.log("Server state is undefined @ Workflow completion"));const B=g.getPreviewService(),w=(Y=e==null?void 0:e.finalizeStepConfig)==null?void 0:Y.lookAtAnimation,E=B&&e.showModelOnFinishStep&&!!w,m=s&&Le(s,e,!0),h=s&&Le(s,e,!1),u=async y=>{const S={};let G=0;if(Object.keys(a).length>0)for(const N of Object.keys(a)){const v=a[N],T=e.steps.find(K=>K.stepName===N);for(let K=0;K<v.selections.length;++K){const V=v.selections[K];if(T&&(!y||T.option&&(T.option.variants||[]).length>1&&!T.data.hideSelectionInCart&&!T.data.hideSelectionsInCart)){const Ve=T.stepTitle;S[Ve]?S[Ve].push({id:V.id||"",name:V.name,priceModifier:V.priceModifier}):S[Ve]=[{id:V.id||"",name:V.name,priceModifier:V.priceModifier}]}G+=V.priceModifier}}return[S,G]},[C]=await u(!0),f=Object.fromEntries(Object.keys(C).map(y=>[y,C[y].map(S=>S.id)])),[I]=await u(!1),F=Object.fromEntries(Object.keys(I).map(y=>[y,I[y].map(S=>S.id)])),p=await o(E);return{designDetails:(()=>{const y={name:i,layouts:A.map(S=>({index:S.index,panelId:S.panelId})),workflowId:e.id,transactionId:n.id,useThreeDimPreview:!!E,previewImage:p};if(h){const S=[];for(const[G,N]of Object.entries(h))S.push({key:G,value:N});y.metadata=S}if(f){const S=[];for(const[G,N]of Object.entries(F))S.push({key:G,ids:N});y.selectedVariants=S}return y})(),cartSelectionsWithPrices:C,cartMetadata:m}},bA=async(g,e,A,t,n,a,i,o,s,r,l)=>{var u,C;s("workflow.steps.finish.finalize.buildingLayouts");const{designDetails:d,cartSelectionsWithPrices:B,cartMetadata:w}=await kA(g,e,A,t,a,i,o,r,l);s("workflow.steps.finish.finalize.creatingDesign");const E=await tn(d),m=(u=E==null?void 0:E.transaction)==null?void 0:u.previewImageLink;if(!(E!=null&&E.transaction))throw new Error("Failed to create design");s("workflow.steps.finish.finalize.updatingTransaction");const h=E.transaction;return await vA(h,n,e,B,E==null?void 0:E.sku,w,m,(C=E==null?void 0:E.processExecution)==null?void 0:C.id)},on=async(g,e)=>{e("workflow.steps.finish.finalize.buildingLayouts"),await Promise.all(g.map(async i=>{await i.workflowManager.outstandingRequestsPromise()}));const t=await(async()=>{var s;const o=await H.getShadowGraphqlClient().query({query:lA,variables:{ids:g.map(r=>r.transaction.id)},fetchPolicy:"no-cache",errorPolicy:"all"});return o.errors?(o.errors.forEach(r=>{o.errors&&console.log("Server Error:",r.message)}),null):(s=o.data)!=null&&s.transactions?o.data.transactions.map(r=>r.workflowState??null):null})(),n=await Promise.all(g.map(async(i,o)=>await kA(i.workflowManager,i.workflow,i.layouts,i.getReducerState,i.transaction,i.workflowSelections,i.designName,()=>Promise.resolve(void 0),i.workflowMetadata,t?t[o]:void 0)));e("workflow.steps.finish.finalize.creatingDesign");const a=await nn(n.map(i=>i.designDetails));if(!a)throw new Error("Failed to create designs");return e("workflow.steps.finish.finalize.updatingTransaction"),Promise.all(a.map(async(i,o)=>{var d;const s=g[o],r=n[o],l=i.transaction;return await vA(l,s.product,s.workflow,r.cartSelectionsWithPrices,i.sku,r.cartMetadata,void 0,(d=i.processExecution)==null?void 0:d.id)}))};class sn{constructor(){this.localPersistenceKey="designTransactions",this.storageMethod="Local",this.designSavedListeners=[]}attachSaveListener(e){this.designSavedListeners.push(e)}detachSaveListener(e){this.designSavedListeners=this.designSavedListeners.filter(A=>A!==e)}async getSavedDesigns(){if(this.storageMethod==="Local"){const e=P.get(this.localPersistenceKey);return e?JSON.parse(e):[]}throw new U("Unexpected storage method requested")}async getSavedDesignByTransaction(e){return(await this.getSavedDesigns()).find(t=>t.transactionId===e)}async addDesign(e){const t=(await this.getSavedDesigns()).filter(n=>n.transactionId!==e.transactionId);t.unshift(e),await this.setDesigns(t),this.designSavedListeners.forEach(n=>n(e))}async renameDesign(e,A){const t=await this.getSavedDesigns(),n=t.find(a=>a.transactionId===e);if(!n)throw new Error(`No saved design for transaction ${e}.`);n.title=A,await this.setDesigns(t)}async removeDesign(e){const A=await this.getSavedDesigns();await this.setDesigns(A.filter(t=>t.transactionId!==e))}async setDesigns(e){if(this.storageMethod==="Local"){P.set(this.localPersistenceKey,JSON.stringify(e));return}throw new U("Unexpected storage method requested")}}const fe=new sn,rn=M.gql`
1839
1844
  mutation AddTransactionStakeholder($id: String!, $type: String!, $details: CustomerDetailsInput!) {
1840
1845
  transactionAddStakeholder(id: $id, details: $details, type: $type) {
1841
1846
  id
@@ -1849,7 +1854,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
1849
1854
  }
1850
1855
  }
1851
1856
  }
1852
- `;class ge{constructor(e,A){var n;if(this.renderableScenes=[],this.renderableSceneCallbacks=[],this.debouncedSavedDesignUpdate=qe(async()=>{await fe.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()},2500),this.getCanvasObjectURLAsync=async a=>new Promise((i,o)=>{try{a.toBlob(s=>{if(s){const r=URL.createObjectURL(s);i(r)}})}catch(s){o(s)}}),!A.workflow)throw new Error("No Workflow ID provided.");this.client=e;const t=A.layouts;this.commandContext=new c.CommandContext,this.commandContext.initialize(t,A.reloadedState),this.isReadOnly=A.transaction.isOrdered||!!A.readOnly,this.workflowManager=new _t(A.workflow,((n=A.product.profanities)==null?void 0:n.map(a=>a.word))||[],t,this.commandContext,a=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return A.stateMutationFunc(a)},A.transaction,A.product,A.previewService,A.renderableContextService,A.reloadedState,A.readOnly,A.modelContainer,A.isReloadedTransaction,A.singleVariantsRenderable),this.workflowManager.addSelectionCallback(a=>{const i=a.traversableScenes.map(o=>{const s=o.renderableSteps.map(r=>r.stepName);return{id:o.name,title:o.title,renderableSteps:s}});this.renderableScenes=i,this.renderableSceneCallbacks.forEach(o=>o(i))})}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async createPreviewImage(e,A){var C,f;const t=this.workflowManager.getWorkflow(),n=(C=t==null?void 0:t.finalizeStepConfig)==null?void 0:C.lookAtAnimation;if(e){if(!n)throw new Error("Failed to generate cart preview image!");return await((f=this.workflowManager.getPreviewService())==null?void 0:f.renderSceneScreenshot(A??512,n))||""}let a=2048;A&&A<=2048&&(a=A);const i=c.createCanvas(a,a),o=this.commandContext.getAllLayouts(),s=t.defaultPreviewPanelIndex||0,r=t.panels[s],l=o.find(I=>{var F;return((F=I.layoutState)==null?void 0:F.layout.panelId)===(r==null?void 0:r.name)})||o[0],d=l.layoutState.layout.previewRegion?{x:l.layoutState.layout.previewRegion.left,y:l.layoutState.layout.previewRegion.top,width:l.layoutState.layout.previewRegion.width,height:l.layoutState.layout.previewRegion.height}:{x:0,y:0,width:l.layoutState.layout.width,height:l.layoutState.layout.height},B=this.commandContext.getLayoutById(l.layoutState.layout.id),w=i.getContext("2d");if(!w)throw new Ee("Failed to obtain 2D context for preview image creation");const E=c.getSvgElement(B.layoutState.layout,B.layoutState.elements,{renderingConfiguration:{purpose:c.LayoutRenderingPurpose.Print,region:{left:d.x,top:d.y,width:d.width,height:d.height}}}),m=c.renderPapyrusComponentAsString(E);await(await Xe.Pith.from(w,m,{anonymousCrossOrigin:!0,ignoreDimensions:!1,createCanvas:c.createCanvas,createImage:c.loadImage,DOMParser:c.getDomParser(),fetch:c.fetch})).render();const u=await this.getCanvasObjectURLAsync(i);return i.toDataURL(u)}getStepById(e){const A=this.getWorkflowManager().getWorkflow().steps.find(t=>t.stepName===e);if(!(!A||!this.stepHasHandle(A)))return De.get(this.getWorkflowManager(),A)}getSteps(){return this.getScenes().flatMap(e=>this.getStepsByScene(e))}getScenes(){return this.getWorkflowManager().getWorkflow().stepGroups.map(A=>({id:A.id,name:A.name,stepIds:A.stepNames}))}getSelectionPriceSubunits(){const e=this.getWorkflowManager().getWorkflowSelections();let A=0;return Object.values(e).forEach(t=>{A+=t.selections.map(n=>n.priceModifier).reduce((n,a)=>n+a)}),A}getBasePriceSubunits(){return this.getWorkflowManager().getProduct().basePrice||0}getTotalPriceSubunits(){return this.getBasePriceSubunits()+this.getSelectionPriceSubunits()}getStepByName(e){const A=this.getWorkflowManager().getWorkflow().steps.find(t=>t.stepTitle===e);if(!(!A||!this.stepHasHandle(A)))return De.get(this.getWorkflowManager(),A)}getStepsByType(e){return this.getWorkflowManager().getWorkflow().steps.filter(A=>A.type===e).map(A=>De.get(this.getWorkflowManager(),A))}getStepsByScene(e){if(!this.getWorkflowManager().getWorkflow().stepGroups.find(t=>t.name===e.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 e.stepIds.map(t=>this.getWorkflowManager().getWorkflow().steps.find(n=>n.stepName===t)).filter(t=>this.stepHasHandle(t)).map(t=>De.get(this.getWorkflowManager(),t))}async attachCustomerDetails(e){return this.assignCustomerDetails({emailAddress:e.email})}async assignCustomerDetails(e){var i,o,s;const t=(P.getMap("transactionOwnerIds")||new Map).get(this.getWorkflowManager().getTransaction().id),a=(s=(o=(i=(await H.getShadowGraphqlClient().mutate({mutation:cn,variables:{id:this.getWorkflowManager().getTransaction().id,details:e,type:"Owner"},context:{transactionOwnerId:t}})).data)==null?void 0:i.transactionAddStakeholder)==null?void 0:o.stakeholders)==null?void 0:s.find(r=>{var l;return((l=r.customer)==null?void 0:l.emailAddress)===e.emailAddress});if(a!=null&&a.customer){this.getWorkflowManager().setTransactionCustomer(a.customer);const r=P.getMap("transactionCustomerIds")||new Map;r.set(this.getWorkflowManager().getTransaction().id,a.customer.id),P.setMap("transactionCustomerIds",r)}}attachRenderableSceneListener(e){this.renderableSceneCallbacks.push(e),e(this.renderableScenes)}detachRenderableSceneListener(e){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter(A=>A!==e)}async save(e){if(!this.getCommandContext().getState())throw new U("State undefined!");const n={title:await(async()=>{var s;if(e)return e;const a=this.getWorkflowManager().getTransaction().id,o=(s=(await fe.getSavedDesigns()).find(r=>r.transactionId===a))==null?void 0:s.title;return o||"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 fe.addDesign(n),n}async copy(){var o;const e=de(this.getCommandContext().getState());if(!e)throw new U("Internal state is undefined! Cannot copy experience!");const A=JSON.stringify(e.transaction),t=this.getWorkflowManager().getWorkflow(),n=new ZA({}),a=(o=this.getWorkflowManager().getTransaction().integrationProduct)==null?void 0:o.id;if(!a)throw new U("Integration product id is undefined!");return await n.initFromIntegrationProduct(a),await n.getWorkflowExperience(t.id,A,void 0)}async onDesignFinished(e,A=!0){return bA(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),()=>this.commandContext.getState(),this.workflowManager.getProduct(),this.workflowManager.getTransaction(),this.workflowManager.getWorkflowSelections(),this.workflowManager.getWorkflow().name,e||(()=>{}),t=>A?this.createPreviewImage(t,1024):Promise.resolve(void 0),this.workflowManager.getWorkflowMetadata())}stepHasHandle(e){return e.type!==c.StepType.SilentIllustration&&e.type!==c.StepType.ProductOverlay}getExportedData(){var n;const e=new Map,A=this.getWorkflowManager().getWorkflowMetadata(),t=this.getWorkflowManager().getWorkflowSelections();return Object.keys(A).forEach(a=>{const i=this.workflowManager.getWorkflow().steps.find(s=>s.stepName===a);if(!i)return;e.has(i.stepTitle)||e.set(i.stepTitle,{});const o=A[a];Object.keys(o).forEach(s=>{e.get(i.stepTitle)[s]=o[s]})}),(n=Object.keys(t))==null||n.forEach(a=>{const i=this.workflowManager.getWorkflow().steps.find(o=>o.stepName===a);i&&(e.has(i.stepTitle)||e.set(i.stepTitle,{}),e.get(i.stepTitle).selection=t[a].selections[0].name)}),e}}const gn=["altGlyph","circle","ellipse","path","polygon","polyline","rect","text","textPath","tref","tspan"],ln=async(g,e,A)=>{const t=e.data,n=A.data.baseUrl,a=t.assetUrl.replace("localhost","localstack"),i=n.slice(0,4)==="http"?"":"https://",o=new URL(i+n);o.searchParams.append("video",c.toBase64(JSON.stringify([{href:a}]))),o.pathname=o.pathname+(o.pathname.slice(-1)==="/"?"":"/");const s=o.toString(),l=`data:image/svg+xml;base64,${c.toBase64(await $e.toString(s,{type:"svg"}))}`,d=w=>{const E=g.find(h=>h.panelId===w.panelId);if(!E)throw new k(w);const m=c.generate();return new c.CreateElementCommand({id:m,src:l,type:c.LayoutElementType.Image,y:w.top,x:w.left,width:w.width,height:w.height,rotation:0},E)},B=A.data.regions;try{return B.map(d)}catch(w){return console.error(w),[]}},Bn=async(g,e,A,t)=>{const n=A.data,a=n.assetUrl,i=await c.getPatternImageData(a);try{const o=c.getVariant(n,t.option);o&&(e[t.stepName]={selectedVariants:[o]});const s=async r=>{var m;const l=await c.generateFrameSVG(r||{width:1,height:1},(m=o==null?void 0:o.asset)==null?void 0:m.fileLink),d=await c.getFrameData(l),B=c.generate(),w=g.find(h=>h.panelId===r.panelId);if(!w)throw new k(r);const E=c.calculateOffsets(i,d,{scale:n.scale,left:n.x,top:n.y});return[new c.CreateElementCommand({id:B,path:d.path,dataWidth:d.width,dataHeight:d.height,type:c.LayoutElementType.Frame,focalBlur:t.data.focalBlur,focalBlurStrength:t.data.focalBlurStrength,focalBlurRadius:t.data.focalBlurRadius,forceImageCover:t.data.forceImageCover,x:r.left,y:r.top,width:r.width,height:r.height,layer:r.layer,layerIndex:r.layerIndex,rotation:r.rotation,scaleX:r.width/d.width,scaleY:r.height/d.height,pattern:void 0},w),new c.UpdateFramePattern(B,i,E)]};return(await Promise.all(t.data.regions.map(r=>s(r)))).flat()}catch(o){return console.error(o),[]}},dn=async(g,e,A,t)=>{var F,p;const n=A.data,a=t.option;if(!a)return console.error(`No option for step ${t.stepName}.`),[];const i=((F=a.variants)==null?void 0:F.find(D=>D.id===n.illustrationVariantId))||c.getDefaultVariant(a);if(!i)return console.error(`No variant with ID: ${n.illustrationVariantId}`),[];if(!i.asset)return console.error(`No asset for variant with ID: ${n.illustrationVariantId}`),[];e[t.stepName]={selectedVariants:[i]};const o=(p=i.asset)==null?void 0:p.fileLink;if(!o)return console.error(`No asset link for variant with ID: ${n.illustrationVariantId}`),[];const s=await c.fetchAsString(o,!0),r=/<svg.*?<\/svg>/s,l=s.match(r)||[],d=(l==null?void 0:l.length)>0?l[0]:"",E=c.domParser().parseFromString(d,"image/svg+xml").firstElementChild;if(!E)return console.error("Failed to read SVG."),[];c.sanitizeSvgTree(E);const m={};c.traverse(E,D=>{gn.includes(D.tagName)&&!D.attributes.getNamedItem("fill")&&D.setAttribute("fill","#000000");const Y=D.attributes.getNamedItem("fill");if(Y&&Y.value!=="none"){const S=Y.value,N=`spiff-fill-${S.replace(/\W/g,"")}`;D.classList.add(N),m[N]={browserValue:S}}const y=D.attributes.getNamedItem("stroke");if(y&&y.value!=="none"){const S=y.value,N=`spiff-stroke-${S.replace(/\W/g,"")}`;D.classList.add(N),m[N]={browserValue:S}}});const u=c.xmlSerializer().serializeToString(E),C=n.colors;if(C){for(const[D,Y]of Object.entries(m))for(const y of Object.keys(C))if(Y.browserValue===y){m[D]={browserValue:C[y]};break}}const f=D=>{const Y=g.find(S=>S.panelId===D.panelId);if(!Y)throw new k(D);const y=c.generate();return new c.CreateElementCommand({colors:m,id:y,svg:u,type:c.LayoutElementType.Illustration,y:D.top,x:D.left,rotation:D.rotation,width:D.width,height:D.height,layer:D.layer,layerIndex:D.layerIndex,immutable:D.immutable},Y)},I=t.data.regions;try{return I.map(f)}catch(D){return console.error(D),[]}},wn=async(g,e,A)=>{const t=await FA(A.data.module),n=e.data,a=(o,s)=>{const r=g.find(d=>d.panelId===s.panelId);if(!r)throw new k(s);const l=c.generate();return new c.CreateElementCommand({colors:{},id:l,svg:o,type:c.LayoutElementType.Illustration,y:s.top,x:s.left,rotation:s.rotation,width:s.width,height:s.height,layer:s.layer,layerIndex:s.layerIndex},r)},i=A.data.regions;try{return i.map(o=>a(t.svgPrint(n.text,o),o))}catch(o){return console.error(o),[]}},En=async(g,e,A,t)=>{var l,d;const n=A.data,a=t.option;if(!a)return console.error(`No option for step ${t.stepName}.`),[];const i=((l=a.variants)==null?void 0:l.find(B=>B.id===n.pictureVariantId))||c.getDefaultVariant(a);if(!i)return console.error(`No variant with ID: ${n.pictureVariantId}`),[];if(!i.asset)return console.error(`No asset for variant with ID: ${n.pictureVariantId}`),[];e[t.stepName]={selectedVariants:[i]};const o=(d=i.asset)==null?void 0:d.fileLink;if(!o)return console.error(`No asset link for variant with ID: ${n.pictureVariantId}`),[];const s=B=>{const w=g.find(m=>m.panelId===B.panelId);if(!w)throw new k(B);const E=c.generate();return new c.CreateElementCommand({id:E,src:o,type:c.LayoutElementType.Image,y:B.top,x:B.left,rotation:B.rotation,width:B.width,height:B.height,layer:B.layer,layerIndex:B.layerIndex,immutable:B.immutable,preserveAspectRatio:"none"},w)},r=t.data.regions;try{return r.map(s)}catch(B){return console.error(B),[]}},hn=async(g,e,A,t)=>{var r;const n=A.data,a=t.option;if(!a)return console.error(`No option for step ${t.stepName}.`),[];const i=((r=a.variants)==null?void 0:r.find(l=>l.id===n.colorVariantId))||c.getDefaultVariant(a);if(!i)return console.error(`No variant with ID: ${n.colorVariantId}`),[];e[t.stepName]={selectedVariants:[i]};const o=l=>{const d=g.find(h=>h.panelId===l.panelId);if(!d)throw new k(l);const B=`
1857
+ `;class ge{constructor(e,A){var n;if(this.renderableScenes=[],this.renderableSceneCallbacks=[],this.debouncedSavedDesignUpdate=qe(async()=>{await fe.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()},2500),this.getCanvasObjectURLAsync=async a=>new Promise((i,o)=>{try{a.toBlob(s=>{if(s){const r=URL.createObjectURL(s);i(r)}})}catch(s){o(s)}}),!A.workflow)throw new Error("No Workflow ID provided.");this.client=e;const t=A.layouts;this.commandContext=new c.CommandContext,this.commandContext.initialize(t,A.reloadedState),this.isReadOnly=A.transaction.isOrdered||!!A.readOnly,this.workflowManager=new _t(A.workflow,((n=A.product.profanities)==null?void 0:n.map(a=>a.word))||[],t,this.commandContext,a=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return A.stateMutationFunc(a)},A.transaction,A.product,A.previewService,A.renderableContextService,A.reloadedState,A.readOnly,A.modelContainer,A.isReloadedTransaction,A.singleVariantsRenderable),this.workflowManager.addSelectionCallback(a=>{const i=a.traversableScenes.map(o=>{const s=o.renderableSteps.map(r=>r.stepName);return{id:o.name,title:o.title,renderableSteps:s}});this.renderableScenes=i,this.renderableSceneCallbacks.forEach(o=>o(i))})}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async createPreviewImage(e,A){var C,f;const t=this.workflowManager.getWorkflow(),n=(C=t==null?void 0:t.finalizeStepConfig)==null?void 0:C.lookAtAnimation;if(e){if(!n)throw new Error("Failed to generate cart preview image!");return await((f=this.workflowManager.getPreviewService())==null?void 0:f.renderSceneScreenshot(A??512,n))||""}let a=2048;A&&A<=2048&&(a=A);const i=c.createCanvas(a,a),o=this.commandContext.getAllLayouts(),s=t.defaultPreviewPanelIndex||0,r=t.panels[s],l=o.find(I=>{var F;return((F=I.layoutState)==null?void 0:F.layout.panelId)===(r==null?void 0:r.name)})||o[0],d=l.layoutState.layout.previewRegion?{x:l.layoutState.layout.previewRegion.left,y:l.layoutState.layout.previewRegion.top,width:l.layoutState.layout.previewRegion.width,height:l.layoutState.layout.previewRegion.height}:{x:0,y:0,width:l.layoutState.layout.width,height:l.layoutState.layout.height},B=this.commandContext.getLayoutById(l.layoutState.layout.id),w=i.getContext("2d");if(!w)throw new Ee("Failed to obtain 2D context for preview image creation");const E=c.getSvgElement(B.layoutState.layout,B.layoutState.elements,{renderingConfiguration:{purpose:c.LayoutRenderingPurpose.Print,region:{left:d.x,top:d.y,width:d.width,height:d.height}}}),m=c.renderPapyrusComponentAsString(E);await(await Xe.Pith.from(w,m,{anonymousCrossOrigin:!0,ignoreDimensions:!1,createCanvas:c.createCanvas,createImage:c.loadImage,DOMParser:c.getDomParser(),fetch:c.fetch})).render();const u=await this.getCanvasObjectURLAsync(i);return i.toDataURL(u)}getStepById(e){const A=this.getWorkflowManager().getWorkflow().steps.find(t=>t.stepName===e);if(!(!A||!this.stepHasHandle(A)))return De.get(this.getWorkflowManager(),A)}getSteps(){return this.getScenes().flatMap(e=>this.getStepsByScene(e))}getScenes(){return this.getWorkflowManager().getWorkflow().stepGroups.map(A=>({id:A.id,name:A.name,stepIds:A.stepNames}))}getSelectionPriceSubunits(){const e=this.getWorkflowManager().getWorkflowSelections();let A=0;return Object.values(e).forEach(t=>{A+=t.selections.map(n=>n.priceModifier).reduce((n,a)=>n+a)}),A}getBasePriceSubunits(){return this.getWorkflowManager().getProduct().basePrice||0}getTotalPriceSubunits(){return this.getBasePriceSubunits()+this.getSelectionPriceSubunits()}getStepByName(e){const A=this.getWorkflowManager().getWorkflow().steps.find(t=>t.stepTitle===e);if(!(!A||!this.stepHasHandle(A)))return De.get(this.getWorkflowManager(),A)}getStepsByType(e){return this.getWorkflowManager().getWorkflow().steps.filter(A=>A.type===e).map(A=>De.get(this.getWorkflowManager(),A))}getStepsByScene(e){if(!this.getWorkflowManager().getWorkflow().stepGroups.find(t=>t.name===e.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 e.stepIds.map(t=>this.getWorkflowManager().getWorkflow().steps.find(n=>n.stepName===t)).filter(t=>this.stepHasHandle(t)).map(t=>De.get(this.getWorkflowManager(),t))}async attachCustomerDetails(e){return this.assignCustomerDetails({emailAddress:e.email})}async assignCustomerDetails(e){var i,o,s;const t=(P.getMap("transactionOwnerIds")||new Map).get(this.getWorkflowManager().getTransaction().id),a=(s=(o=(i=(await H.getShadowGraphqlClient().mutate({mutation:rn,variables:{id:this.getWorkflowManager().getTransaction().id,details:e,type:"Owner"},context:{transactionOwnerId:t}})).data)==null?void 0:i.transactionAddStakeholder)==null?void 0:o.stakeholders)==null?void 0:s.find(r=>{var l;return((l=r.customer)==null?void 0:l.emailAddress)===e.emailAddress});if(a!=null&&a.customer){this.getWorkflowManager().setTransactionCustomer(a.customer);const r=P.getMap("transactionCustomerIds")||new Map;r.set(this.getWorkflowManager().getTransaction().id,a.customer.id),P.setMap("transactionCustomerIds",r)}}attachRenderableSceneListener(e){this.renderableSceneCallbacks.push(e),e(this.renderableScenes)}detachRenderableSceneListener(e){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter(A=>A!==e)}async save(e){if(!this.getCommandContext().getState())throw new U("State undefined!");const n={title:await(async()=>{var s;if(e)return e;const a=this.getWorkflowManager().getTransaction().id,o=(s=(await fe.getSavedDesigns()).find(r=>r.transactionId===a))==null?void 0:s.title;return o||"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 fe.addDesign(n),n}async copy(){var o;const e=de(this.getCommandContext().getState());if(!e)throw new U("Internal state is undefined! Cannot copy experience!");const A=JSON.stringify(e.transaction),t=this.getWorkflowManager().getWorkflow(),n=new ZA({}),a=(o=this.getWorkflowManager().getTransaction().integrationProduct)==null?void 0:o.id;if(!a)throw new U("Integration product id is undefined!");return await n.initFromIntegrationProduct(a),await n.getWorkflowExperience(t.id,A,void 0)}async onDesignFinished(e,A=!0){return bA(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),()=>this.commandContext.getState(),this.workflowManager.getProduct(),this.workflowManager.getTransaction(),this.workflowManager.getWorkflowSelections(),this.workflowManager.getWorkflow().name,e||(()=>{}),t=>A?this.createPreviewImage(t,1024):Promise.resolve(void 0),this.workflowManager.getWorkflowMetadata())}stepHasHandle(e){return e.type!==c.StepType.SilentIllustration&&e.type!==c.StepType.ProductOverlay}getExportedData(){var n;const e=new Map,A=this.getWorkflowManager().getWorkflowMetadata(),t=this.getWorkflowManager().getWorkflowSelections();return Object.keys(A).forEach(a=>{const i=this.workflowManager.getWorkflow().steps.find(s=>s.stepName===a);if(!i)return;e.has(i.stepTitle)||e.set(i.stepTitle,{});const o=A[a];Object.keys(o).forEach(s=>{e.get(i.stepTitle)[s]=o[s]})}),(n=Object.keys(t))==null||n.forEach(a=>{const i=this.workflowManager.getWorkflow().steps.find(o=>o.stepName===a);i&&(e.has(i.stepTitle)||e.set(i.stepTitle,{}),e.get(i.stepTitle).selection=t[a].selections[0].name)}),e}}const cn=["altGlyph","circle","ellipse","path","polygon","polyline","rect","text","textPath","tref","tspan"],gn=async(g,e,A)=>{const t=e.data,n=A.data.baseUrl,a=t.assetUrl.replace("localhost","localstack"),i=n.slice(0,4)==="http"?"":"https://",o=new URL(i+n);o.searchParams.append("video",c.toBase64(JSON.stringify([{href:a}]))),o.pathname=o.pathname+(o.pathname.slice(-1)==="/"?"":"/");const s=o.toString(),l=`data:image/svg+xml;base64,${c.toBase64(await $e.toString(s,{type:"svg"}))}`,d=w=>{const E=g.find(h=>h.panelId===w.panelId);if(!E)throw new k(w);const m=c.generate();return new c.CreateElementCommand({id:m,src:l,type:c.LayoutElementType.Image,y:w.top,x:w.left,width:w.width,height:w.height,rotation:0},E)},B=A.data.regions;try{return B.map(d)}catch(w){return console.error(w),[]}},ln=async(g,e,A,t)=>{const n=A.data,a=n.assetUrl,i=await c.getPatternImageData(a);try{const o=c.getVariant(n,t.option);o&&(e[t.stepName]={selectedVariants:[o]});const s=async r=>{var m;const l=await c.generateFrameSVG(r||{width:1,height:1},(m=o==null?void 0:o.asset)==null?void 0:m.fileLink),d=await c.getFrameData(l),B=c.generate(),w=g.find(h=>h.panelId===r.panelId);if(!w)throw new k(r);const E=c.calculateOffsets(i,d,{scale:n.scale,left:n.x,top:n.y});return[new c.CreateElementCommand({id:B,path:d.path,dataWidth:d.width,dataHeight:d.height,type:c.LayoutElementType.Frame,focalBlur:t.data.focalBlur,focalBlurStrength:t.data.focalBlurStrength,focalBlurRadius:t.data.focalBlurRadius,forceImageCover:t.data.forceImageCover,x:r.left,y:r.top,width:r.width,height:r.height,layer:r.layer,layerIndex:r.layerIndex,rotation:r.rotation,scaleX:r.width/d.width,scaleY:r.height/d.height,pattern:void 0},w),new c.UpdateFramePattern(B,i,E)]};return(await Promise.all(t.data.regions.map(r=>s(r)))).flat()}catch(o){return console.error(o),[]}},Bn=async(g,e,A,t)=>{var F,p;const n=A.data,a=t.option;if(!a)return console.error(`No option for step ${t.stepName}.`),[];const i=((F=a.variants)==null?void 0:F.find(D=>D.id===n.illustrationVariantId))||c.getDefaultVariant(a);if(!i)return console.error(`No variant with ID: ${n.illustrationVariantId}`),[];if(!i.asset)return console.error(`No asset for variant with ID: ${n.illustrationVariantId}`),[];e[t.stepName]={selectedVariants:[i]};const o=(p=i.asset)==null?void 0:p.fileLink;if(!o)return console.error(`No asset link for variant with ID: ${n.illustrationVariantId}`),[];const s=await c.fetchAsString(o,!0),r=/<svg.*?<\/svg>/s,l=s.match(r)||[],d=(l==null?void 0:l.length)>0?l[0]:"",E=c.domParser().parseFromString(d,"image/svg+xml").firstElementChild;if(!E)return console.error("Failed to read SVG."),[];c.sanitizeSvgTree(E);const m={};c.traverse(E,D=>{cn.includes(D.tagName)&&!D.attributes.getNamedItem("fill")&&D.setAttribute("fill","#000000");const Y=D.attributes.getNamedItem("fill");if(Y&&Y.value!=="none"){const S=Y.value,N=`spiff-fill-${S.replace(/\W/g,"")}`;D.classList.add(N),m[N]={browserValue:S}}const y=D.attributes.getNamedItem("stroke");if(y&&y.value!=="none"){const S=y.value,N=`spiff-stroke-${S.replace(/\W/g,"")}`;D.classList.add(N),m[N]={browserValue:S}}});const u=c.xmlSerializer().serializeToString(E),C=n.colors;if(C){for(const[D,Y]of Object.entries(m))for(const y of Object.keys(C))if(Y.browserValue===y){m[D]={browserValue:C[y]};break}}const f=D=>{const Y=g.find(S=>S.panelId===D.panelId);if(!Y)throw new k(D);const y=c.generate();return new c.CreateElementCommand({colors:m,id:y,svg:u,type:c.LayoutElementType.Illustration,y:D.top,x:D.left,rotation:D.rotation,width:D.width,height:D.height,layer:D.layer,layerIndex:D.layerIndex,immutable:D.immutable},Y)},I=t.data.regions;try{return I.map(f)}catch(D){return console.error(D),[]}},dn=async(g,e,A)=>{const t=await FA(A.data.module),n=e.data,a=(o,s)=>{const r=g.find(d=>d.panelId===s.panelId);if(!r)throw new k(s);const l=c.generate();return new c.CreateElementCommand({colors:{},id:l,svg:o,type:c.LayoutElementType.Illustration,y:s.top,x:s.left,rotation:s.rotation,width:s.width,height:s.height,layer:s.layer,layerIndex:s.layerIndex},r)},i=A.data.regions;try{return i.map(o=>a(t.svgPrint(n.text,o),o))}catch(o){return console.error(o),[]}},wn=async(g,e,A,t)=>{var l,d;const n=A.data,a=t.option;if(!a)return console.error(`No option for step ${t.stepName}.`),[];const i=((l=a.variants)==null?void 0:l.find(B=>B.id===n.pictureVariantId))||c.getDefaultVariant(a);if(!i)return console.error(`No variant with ID: ${n.pictureVariantId}`),[];if(!i.asset)return console.error(`No asset for variant with ID: ${n.pictureVariantId}`),[];e[t.stepName]={selectedVariants:[i]};const o=(d=i.asset)==null?void 0:d.fileLink;if(!o)return console.error(`No asset link for variant with ID: ${n.pictureVariantId}`),[];const s=B=>{const w=g.find(m=>m.panelId===B.panelId);if(!w)throw new k(B);const E=c.generate();return new c.CreateElementCommand({id:E,src:o,type:c.LayoutElementType.Image,y:B.top,x:B.left,rotation:B.rotation,width:B.width,height:B.height,layer:B.layer,layerIndex:B.layerIndex,immutable:B.immutable,preserveAspectRatio:"none"},w)},r=t.data.regions;try{return r.map(s)}catch(B){return console.error(B),[]}},En=async(g,e,A,t)=>{var r;const n=A.data,a=t.option;if(!a)return console.error(`No option for step ${t.stepName}.`),[];const i=((r=a.variants)==null?void 0:r.find(l=>l.id===n.colorVariantId))||c.getDefaultVariant(a);if(!i)return console.error(`No variant with ID: ${n.colorVariantId}`),[];e[t.stepName]={selectedVariants:[i]};const o=l=>{const d=g.find(h=>h.panelId===l.panelId);if(!d)throw new k(l);const B=`
1853
1858
  <svg
1854
1859
  xmlns="http://www.w3.org/2000/svg"
1855
1860
  xmlnsXlink="http://www.w3.org/1999/xlink"
@@ -1869,8 +1874,8 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
1869
1874
  fill="${i==null?void 0:i.color}"
1870
1875
  />
1871
1876
  </svg>
1872
- `,E={"spiff-fill-shape":{browserValue:i.color||"#000000"}},m=c.generate();return new c.CreateElementCommand({colors:E,id:m,svg:B,type:c.LayoutElementType.Illustration,y:l.top,x:l.left,rotation:l.rotation,width:l.width,height:l.height,layer:l.layer,layerIndex:l.layerIndex,immutable:l.immutable},d)},s=t.data.regions;try{return s.map(o)}catch(l){return console.error(l),[]}},Cn=async(g,e,A)=>{const t=[],a=(()=>{var r,l;return e.type===c.StepType.ProductOverlay?A||((r=e.data.asset)==null?void 0:r.fileLink)||"":((l=e.data.asset)==null?void 0:l.fileLink)||""})(),o=(()=>a.endsWith(".jpeg")||a.endsWith(".jpg")||a.endsWith(".png")?c.LayoutElementType.Image:(a.endsWith(".svg"),c.LayoutElementType.Illustration))(),s=e.data.regions;if(o==="image")try{s.forEach(r=>{const l=g.find(B=>B.panelId===r.panelId);if(!l)throw new k(r);const d={id:c.generate(),src:a,type:o,y:r.top,x:r.left,width:r.width,height:r.height,layer:r.layer,layerIndex:r.layerIndex,productOverlay:e.type===c.StepType.ProductOverlay?!0:void 0,scaleX:1,scaleY:1,rotation:r.rotation,excludeFromExport:e.data.excludeFromPrint,preserveAspectRatio:"none"};t.push(new c.CreateElementCommand(d,l))})}catch(r){console.error(r)}else{const r=await c.fetchAsString(a,!0),l=d=>{const B=/<svg.*?<\/svg>/s,w=d.match(B)||[],E=(w==null?void 0:w.length)>0?w[0]:"",u=c.domParser().parseFromString(E,"image/svg+xml").firstElementChild;if(!u)throw new X("Failed to read SVG.");return c.sanitizeSvgTree(u),c.xmlSerializer().serializeToString(u)};s.forEach(d=>{const B=g.find(E=>E.panelId===d.panelId);if(!B)throw new k(d);const w={id:c.generate(),src:a,asset_key:a,svg:l(r),colors:{},type:o,y:d.top,x:d.left,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,scaleX:1,scaleY:1,rotation:d.rotation,productOverlay:e.type===c.StepType.ProductOverlay?!0:void 0,excludeFromExport:e.data.excludeFromPrint};t.push(new c.CreateElementCommand(w,B))})}return t},Qn=async(g,e,A,t)=>{const n=[],a=A.data,i=30,o=h=>h.vertical?"center":h.textAlign||"center",s=()=>{var f;const h=t.option;if(!h)return;const u=((f=h.variants)==null?void 0:f.find(I=>I.id===a.fontVariantId))||c.getDefaultVariant(h);if(!u||!u.asset)return;e[t.stepName]={selectedVariants:[u]};const C=u.asset.fileLink;if(C)return C},l=await(async()=>{const h=s();if(!h)return;const u=await c.loadFont(h);return{assetUrl:h,name:u.names.fullName.en}})(),d=(t.data.replaceableText?t.data.replaceableText.replace("{{}}",a.text):a.text)||"",B=c.applyTextTransformations(d,{vertical:t.data.vertical,uppercase:t.data.uppercase}),w=async h=>{const u=h.colorOption;if(!u)return;const C=J.getDefaultVariant(u);return C==null?void 0:C.color},E=a.color||await w(t.data),m=t.data.regions;for(const h of m){const u=g.find(f=>f.panelId===h.panelId);if(!u)continue;const C={stepName:A.name,id:c.generate(),align:o(t.data),curved:t.data.curved,fill:a.color||E||"#000000",fontData:l,fontSize:t.data.size||i,height:h.height,layer:h.layer,layerIndex:h.layerIndex,paths:t.data.paths,rotation:h.rotation,text:B,type:c.LayoutElementType.Textbox,vertical:t.data.vertical,verticalAlign:t.data.verticalAlign||"middle",width:h.width,x:h.left,y:h.top};if(l){const[f,I]=c.determineCorrectFontSizeAndLines(t.data.size||i,l,h,[c.applyTextTransformations(B,{vertical:t.data.vertical,uppercase:t.data.uppercase})],{size:t.data.size,minSize:t.data.minSize,maxSize:t.data.maxSize});n.push(new c.CreateElementCommand({...C,fontSize:f,text:C.curved?C.text:(I||[]).join(`
1873
- `)},u))}else n.push(new c.CreateElementCommand(C,u))}return n},mn=(g,e)=>g.conditions?g.conditions.every(A=>{const t=e[A.targetStepName];if(t&&t.selectedVariants){const n=t.selectedVariants;return A.requiredVariantSelections.some(a=>n.find(i=>i.id===a)!==void 0)}return!1}):!0,JA=async(g,e,A,t)=>{const n=[],a={};for(const i of g){const o=e.steps.find(s=>s.stepName===i.name);if(o)switch(o.type){case c.StepType.DigitalContent:n.push(...await ln(A,i,o));break;case c.StepType.Frame:case c.StepType.Photo:n.push(...await Bn(A,a,i,o));break;case c.StepType.Illustration:n.push(...await dn(A,a,i,o));break;case c.StepType.Module:n.push(...await wn(A,i,o));break;case c.StepType.Picture:n.push(...await En(A,a,i,o));break;case c.StepType.Shape:n.push(...await hn(A,a,i,o));break;case c.StepType.Text:n.push(...await Qn(A,a,i,o));break}}for(const i of e.steps)i.type!==c.StepType.SilentIllustration&&i.type!==c.StepType.ProductOverlay||mn(i,a)&&n.push(...await Cn(A,i,t));return n};class pe{constructor(e){this.handleCompleteRender=null;const A=new Map;e.forEach(t=>A.set(t.id,new In(t.id,t.name,this))),this.layouts=A}setCompleteRenderCallback(e){this.handleCompleteRender=e,e(Array.from(this.layouts.values()))}onCompleteRender(){this.handleCompleteRender&&this.handleCompleteRender(Array.from(this.layouts.values()))}getAll(){return this.layouts}}let Fe;const un=()=>(Fe!==void 0||(Fe=!!c.createCanvas().getContext("webgl2")),Fe);class In{constructor(e,A,t){this.hasSetStaticContext=!1,this.interactiveDirty=!1,this.staticCtxDirty=!1,this.lastRequestedRenderArguments=void 0,this.lastCompletedStaticRender=void 0,this.lastModificationID=void 0,this.renderQueue=new He(2),this.id=e,this.name=A,this.service=t}getID(){return this.id}getName(){return this.name}getStaticContext(){return this.textureCtx}setStaticContext(e){if(this.textureCtx=e,this.lastRequestedRenderArguments){const{workflow:A,layouts:t,productOverlayImageUrl:n}=this.lastRequestedRenderArguments;this.render(A,t,n)}}getStaticContextDirty(){return this.staticCtxDirty}setStaticContextDirty(e){this.staticCtxDirty=e}getInteractiveCanvasDirty(){return this.interactiveDirty}setInteractiveCanvasDirty(e){this.interactiveDirty=e}markLastCompletedStaticRender(){this.lastCompletedStaticRender=Date.now(),this.service.onCompleteRender()}getLastCompletedStaticRender(){return this.lastCompletedStaticRender}getLastModificationID(){return this.lastModificationID}async render(e,A,t){const n=de(A);this.lastRequestedRenderArguments={workflow:e,layouts:n,productOverlayImageUrl:t};const a=this.getStaticContext();if(!a){this.markLastCompletedStaticRender(),this.setStaticContextDirty(!1);return}this.renderQueue.enqueue(new Dn(this.getID(),a,un(),()=>{this.markLastCompletedStaticRender(),this.setStaticContextDirty(!0)},e,n,t))}}class Dn extends Ne{constructor(e,A,t,n,a,i,o){super(),this.layoutId=e,this.ctx=A,this.nonPOTSupport=t,this.onRender=n,this.workflow=a,this.layouts=i,this.productOverlayImageUrl=o}getDynamicTextureResolution(){return this.getIsMobile()||!this.offscreenRenderingSupported()?{width:1024,height:1024}:{width:2048,height:2048}}getIsMobile(){return window.innerWidth<=480}offscreenRenderingSupported(){return navigator.userAgent.includes("SamsungBrowser")?!1:!!window.Worker&&!!window.OffscreenCanvas}resizeFit(e,A=4096){const t=A/e.width,n=A/e.height,a=Math.min(t,n);return a>1?e:{width:e.width*a,height:e.height*a}}async execute(){const e=this.layouts.find(B=>B.layoutState.layout.id===this.layoutId);if(!e)return;const A=e.layoutState.elements||[],t=e.layoutState.layout.width,n=e.layoutState.layout.height,a=this.getDynamicTextureResolution().width,i=this.getDynamicTextureResolution().height;let o,s;if(this.nonPOTSupport){const B=a/i;t/n<B?(o=a,s=n*(a/t)):(o=t*(i/n),s=i);const E=this.resizeFit({width:o,height:s});o=E.width,s=E.height}else o=this.getDynamicTextureResolution().width,s=this.getDynamicTextureResolution().height;const r=c.getSvgElement(e.layoutState.layout,A,{renderingConfiguration:{purpose:c.LayoutRenderingPurpose.ThreeD}}),l=c.renderPapyrusComponentAsString(r),d=await Xe.Pith.from(this.ctx,l,{anonymousCrossOrigin:!0,ignoreDimensions:!this.nonPOTSupport,ignoreAnimation:!0,ignoreClear:!0,ignoreMouse:!0,enableRedraw:!1,createCanvas:c.createCanvas,createImage:c.loadImage,DOMParser:c.getDomParser(),fetch:c.fetch});d.resize(o,s),await d.render(),this.onRender()}}const fn=(g,e)=>{const A=[];return g.forEach(t=>{const n=e.steps.find(a=>a.stepName===t.stepName);(n==null?void 0:n.type)===c.StepType.Text&&t.stepAspectType==="Text"&&A.push({name:n.stepName,data:{text:t.value}})}),A},pn=async(g,e,A,t)=>{let n={serializableWorkflow:{steps:[]},layouts:{}};n=new c.GroupCommand(A.map(s=>new c.CreateLayoutCommand(s))).apply(n);const i=await JA(g,e,A,t);return new c.GroupCommand(i).apply(n)},Fn=M.gql`
1877
+ `,E={"spiff-fill-shape":{browserValue:i.color||"#000000"}},m=c.generate();return new c.CreateElementCommand({colors:E,id:m,svg:B,type:c.LayoutElementType.Illustration,y:l.top,x:l.left,rotation:l.rotation,width:l.width,height:l.height,layer:l.layer,layerIndex:l.layerIndex,immutable:l.immutable},d)},s=t.data.regions;try{return s.map(o)}catch(l){return console.error(l),[]}},hn=async(g,e,A)=>{const t=[],a=(()=>{var r,l;return e.type===c.StepType.ProductOverlay?A||((r=e.data.asset)==null?void 0:r.fileLink)||"":((l=e.data.asset)==null?void 0:l.fileLink)||""})(),o=(()=>a.endsWith(".jpeg")||a.endsWith(".jpg")||a.endsWith(".png")?c.LayoutElementType.Image:(a.endsWith(".svg"),c.LayoutElementType.Illustration))(),s=e.data.regions;if(o==="image")try{s.forEach(r=>{const l=g.find(B=>B.panelId===r.panelId);if(!l)throw new k(r);const d={id:c.generate(),src:a,type:o,y:r.top,x:r.left,width:r.width,height:r.height,layer:r.layer,layerIndex:r.layerIndex,productOverlay:e.type===c.StepType.ProductOverlay?!0:void 0,scaleX:1,scaleY:1,rotation:r.rotation,excludeFromExport:e.data.excludeFromPrint,preserveAspectRatio:"none"};t.push(new c.CreateElementCommand(d,l))})}catch(r){console.error(r)}else{const r=await c.fetchAsString(a,!0),l=d=>{const B=/<svg.*?<\/svg>/s,w=d.match(B)||[],E=(w==null?void 0:w.length)>0?w[0]:"",u=c.domParser().parseFromString(E,"image/svg+xml").firstElementChild;if(!u)throw new X("Failed to read SVG.");return c.sanitizeSvgTree(u),c.xmlSerializer().serializeToString(u)};s.forEach(d=>{const B=g.find(E=>E.panelId===d.panelId);if(!B)throw new k(d);const w={id:c.generate(),src:a,asset_key:a,svg:l(r),colors:{},type:o,y:d.top,x:d.left,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,scaleX:1,scaleY:1,rotation:d.rotation,productOverlay:e.type===c.StepType.ProductOverlay?!0:void 0,excludeFromExport:e.data.excludeFromPrint};t.push(new c.CreateElementCommand(w,B))})}return t},Cn=async(g,e,A,t)=>{const n=[],a=A.data,i=30,o=h=>h.vertical?"center":h.textAlign||"center",s=()=>{var f;const h=t.option;if(!h)return;const u=((f=h.variants)==null?void 0:f.find(I=>I.id===a.fontVariantId))||c.getDefaultVariant(h);if(!u||!u.asset)return;e[t.stepName]={selectedVariants:[u]};const C=u.asset.fileLink;if(C)return C},l=await(async()=>{const h=s();if(!h)return;const u=await c.loadFont(h);return{assetUrl:h,name:u.names.fullName.en}})(),d=(t.data.replaceableText?t.data.replaceableText.replace("{{}}",a.text):a.text)||"",B=c.applyTextTransformations(d,{vertical:t.data.vertical,uppercase:t.data.uppercase}),w=async h=>{const u=h.colorOption;if(!u)return;const C=J.getDefaultVariant(u);return C==null?void 0:C.color},E=a.color||await w(t.data),m=t.data.regions;for(const h of m){const u=g.find(f=>f.panelId===h.panelId);if(!u)continue;const C={stepName:A.name,id:c.generate(),align:o(t.data),curved:t.data.curved,fill:a.color||E||"#000000",fontData:l,fontSize:t.data.size||i,height:h.height,layer:h.layer,layerIndex:h.layerIndex,paths:t.data.paths,rotation:h.rotation,text:B,type:c.LayoutElementType.Textbox,vertical:t.data.vertical,verticalAlign:t.data.verticalAlign||"middle",width:h.width,x:h.left,y:h.top};if(l){const[f,I]=c.determineCorrectFontSizeAndLines(t.data.size||i,l,h,[c.applyTextTransformations(B,{vertical:t.data.vertical,uppercase:t.data.uppercase})],{size:t.data.size,minSize:t.data.minSize,maxSize:t.data.maxSize});n.push(new c.CreateElementCommand({...C,fontSize:f,text:C.curved?C.text:(I||[]).join(`
1878
+ `)},u))}else n.push(new c.CreateElementCommand(C,u))}return n},Qn=(g,e)=>g.conditions?g.conditions.every(A=>{const t=e[A.targetStepName];if(t&&t.selectedVariants){const n=t.selectedVariants;return A.requiredVariantSelections.some(a=>n.find(i=>i.id===a)!==void 0)}return!1}):!0,JA=async(g,e,A,t)=>{const n=[],a={};for(const i of g){const o=e.steps.find(s=>s.stepName===i.name);if(o)switch(o.type){case c.StepType.DigitalContent:n.push(...await gn(A,i,o));break;case c.StepType.Frame:case c.StepType.Photo:n.push(...await ln(A,a,i,o));break;case c.StepType.Illustration:n.push(...await Bn(A,a,i,o));break;case c.StepType.Module:n.push(...await dn(A,i,o));break;case c.StepType.Picture:n.push(...await wn(A,a,i,o));break;case c.StepType.Shape:n.push(...await En(A,a,i,o));break;case c.StepType.Text:n.push(...await Cn(A,a,i,o));break}}for(const i of e.steps)i.type!==c.StepType.SilentIllustration&&i.type!==c.StepType.ProductOverlay||Qn(i,a)&&n.push(...await hn(A,i,t));return n};class pe{constructor(e){this.handleCompleteRender=null;const A=new Map;e.forEach(t=>A.set(t.id,new un(t.id,t.name,this))),this.layouts=A}setCompleteRenderCallback(e){this.handleCompleteRender=e,e(Array.from(this.layouts.values()))}onCompleteRender(){this.handleCompleteRender&&this.handleCompleteRender(Array.from(this.layouts.values()))}getAll(){return this.layouts}}let Fe;const mn=()=>(Fe!==void 0||(Fe=!!c.createCanvas().getContext("webgl2")),Fe);class un{constructor(e,A,t){this.hasSetStaticContext=!1,this.interactiveDirty=!1,this.staticCtxDirty=!1,this.lastRequestedRenderArguments=void 0,this.lastCompletedStaticRender=void 0,this.lastModificationID=void 0,this.renderQueue=new He(2),this.id=e,this.name=A,this.service=t}getID(){return this.id}getName(){return this.name}getStaticContext(){return this.textureCtx}setStaticContext(e){if(this.textureCtx=e,this.lastRequestedRenderArguments){const{workflow:A,layouts:t,productOverlayImageUrl:n}=this.lastRequestedRenderArguments;this.render(A,t,n)}}getStaticContextDirty(){return this.staticCtxDirty}setStaticContextDirty(e){this.staticCtxDirty=e}getInteractiveCanvasDirty(){return this.interactiveDirty}setInteractiveCanvasDirty(e){this.interactiveDirty=e}markLastCompletedStaticRender(){this.lastCompletedStaticRender=Date.now(),this.service.onCompleteRender()}getLastCompletedStaticRender(){return this.lastCompletedStaticRender}getLastModificationID(){return this.lastModificationID}async render(e,A,t){const n=de(A);this.lastRequestedRenderArguments={workflow:e,layouts:n,productOverlayImageUrl:t};const a=this.getStaticContext();if(!a){this.markLastCompletedStaticRender(),this.setStaticContextDirty(!1);return}this.renderQueue.enqueue(new In(this.getID(),a,mn(),()=>{this.markLastCompletedStaticRender(),this.setStaticContextDirty(!0)},e,n,t))}}class In extends Ne{constructor(e,A,t,n,a,i,o){super(),this.layoutId=e,this.ctx=A,this.nonPOTSupport=t,this.onRender=n,this.workflow=a,this.layouts=i,this.productOverlayImageUrl=o}getDynamicTextureResolution(){return this.getIsMobile()||!this.offscreenRenderingSupported()?{width:1024,height:1024}:{width:2048,height:2048}}getIsMobile(){return window.innerWidth<=480}offscreenRenderingSupported(){return navigator.userAgent.includes("SamsungBrowser")?!1:!!window.Worker&&!!window.OffscreenCanvas}resizeFit(e,A=4096){const t=A/e.width,n=A/e.height,a=Math.min(t,n);return a>1?e:{width:e.width*a,height:e.height*a}}async execute(){const e=this.layouts.find(B=>B.layoutState.layout.id===this.layoutId);if(!e)return;const A=e.layoutState.elements||[],t=e.layoutState.layout.width,n=e.layoutState.layout.height,a=this.getDynamicTextureResolution().width,i=this.getDynamicTextureResolution().height;let o,s;if(this.nonPOTSupport){const B=a/i;t/n<B?(o=a,s=n*(a/t)):(o=t*(i/n),s=i);const E=this.resizeFit({width:o,height:s});o=E.width,s=E.height}else o=this.getDynamicTextureResolution().width,s=this.getDynamicTextureResolution().height;const r=c.getSvgElement(e.layoutState.layout,A,{renderingConfiguration:{purpose:c.LayoutRenderingPurpose.ThreeD}}),l=c.renderPapyrusComponentAsString(r),d=await Xe.Pith.from(this.ctx,l,{anonymousCrossOrigin:!0,ignoreDimensions:!this.nonPOTSupport,ignoreAnimation:!0,ignoreClear:!0,ignoreMouse:!0,enableRedraw:!1,createCanvas:c.createCanvas,createImage:c.loadImage,DOMParser:c.getDomParser(),fetch:c.fetch});d.resize(o,s),await d.render(),this.onRender()}}const Dn=(g,e)=>{const A=[];return g.forEach(t=>{const n=e.steps.find(a=>a.stepName===t.stepName);(n==null?void 0:n.type)===c.StepType.Text&&t.stepAspectType==="Text"&&A.push({name:n.stepName,data:{text:t.value}})}),A},fn=async(g,e,A,t)=>{let n={serializableWorkflow:{steps:[]},layouts:{}};n=new c.GroupCommand(A.map(s=>new c.CreateLayoutCommand(s))).apply(n);const i=await JA(g,e,A,t);return new c.GroupCommand(i).apply(n)},pn=M.gql`
1874
1879
  fragment ProductFields on Product {
1875
1880
  id
1876
1881
  basePrice
@@ -1905,8 +1910,8 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
1905
1910
  name
1906
1911
  }
1907
1912
  }
1908
- `,Mn=M.gql`
1909
- ${Fn}
1913
+ `,Fn=M.gql`
1914
+ ${pn}
1910
1915
  fragment ProductCollectionProductFields on ProductCollectionProduct {
1911
1916
  id
1912
1917
  productId
@@ -1916,7 +1921,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
1916
1921
  }
1917
1922
  }
1918
1923
  `,TA=M.gql`
1919
- ${Mn}
1924
+ ${Fn}
1920
1925
  fragment ProductCollectionFields on ProductCollection {
1921
1926
  id
1922
1927
  name
@@ -1962,7 +1967,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
1962
1967
  }
1963
1968
  }
1964
1969
  }
1965
- `,Yn=M.gql`
1970
+ `,Mn=M.gql`
1966
1971
  ${TA}
1967
1972
  query GetBundle($id: String!) {
1968
1973
  bundles(ids: [$id]) {
@@ -1984,7 +1989,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
1984
1989
  }
1985
1990
  }
1986
1991
  }
1987
- `,Sn=M.gql`
1992
+ `,Yn=M.gql`
1988
1993
  query GetBundleStakeholders($id: String!) {
1989
1994
  bundles(ids: [$id]) {
1990
1995
  id
@@ -2004,7 +2009,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2004
2009
  }
2005
2010
  }
2006
2011
  }
2007
- `,yn=M.gql`
2012
+ `,Sn=M.gql`
2008
2013
  query GetBundlesForCustomer($id: String!) {
2009
2014
  customers(ids: [$id]) {
2010
2015
  bundleStakeholders {
@@ -2025,7 +2030,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2025
2030
  }
2026
2031
  }
2027
2032
  }
2028
- `,Pn=M.gql`
2033
+ `,yn=M.gql`
2029
2034
  ${TA}
2030
2035
  mutation CreateBundle($collectionId: String) {
2031
2036
  bundleCreate(collectionId: $collectionId) {
@@ -2044,25 +2049,25 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2044
2049
  }
2045
2050
  }
2046
2051
  }
2047
- `,Nn=M.gql`
2052
+ `,Pn=M.gql`
2048
2053
  mutation UpdateBundle($id: String!, $name: String, $metadata: [MetadataInput!], $bundleStateData: String) {
2049
2054
  bundleUpdate(id: $id, name: $name, metadata: $metadata, bundleStateData: $bundleStateData) {
2050
2055
  id
2051
2056
  }
2052
2057
  }
2053
- `,Hn=M.gql`
2058
+ `,Nn=M.gql`
2054
2059
  mutation BundleAddTransaction($id: String!, $transactionId: String!) {
2055
2060
  bundleAddTransaction(id: $id, transactionId: $transactionId) {
2056
2061
  id
2057
2062
  }
2058
2063
  }
2059
- `,xn=M.gql`
2064
+ `,Hn=M.gql`
2060
2065
  mutation BundleAddTransactions($id: String!, $transactionIds: [String!]!, $transactionOwnerIds: [String!]) {
2061
2066
  bundleAddTransactions(id: $id, transactionIds: $transactionIds, transactionOwnerIds: $transactionOwnerIds) {
2062
2067
  id
2063
2068
  }
2064
2069
  }
2065
- `,Rn=M.gql`
2070
+ `,xn=M.gql`
2066
2071
  mutation BundleRemoveTransaction(
2067
2072
  $id: String!
2068
2073
  $transactionId: String!
@@ -2077,7 +2082,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2077
2082
  id
2078
2083
  }
2079
2084
  }
2080
- `,Un=M.gql`
2085
+ `,Rn=M.gql`
2081
2086
  mutation BundleRemoveTransactions(
2082
2087
  $id: String!
2083
2088
  $transactionIds: [String!]!
@@ -2092,7 +2097,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2092
2097
  id
2093
2098
  }
2094
2099
  }
2095
- `,Gn=M.gql`
2100
+ `,Un=M.gql`
2096
2101
  mutation BundleAddStakeholder($id: String!, $details: CustomerDetailsInput!, $type: String!) {
2097
2102
  bundleAddStakeholder(id: $id, details: $details, type: $type) {
2098
2103
  id
@@ -2112,7 +2117,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2112
2117
  }
2113
2118
  }
2114
2119
  }
2115
- `,vn=M.gql`
2120
+ `,Gn=M.gql`
2116
2121
  mutation BundleUpdateStakeholders($id: String!, $input: [BundleStakeholderInput!]!) {
2117
2122
  bundleUpdateStakeholders(id: $id, input: $input) {
2118
2123
  id
@@ -2132,13 +2137,13 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2132
2137
  }
2133
2138
  }
2134
2139
  }
2135
- `,kn=M.gql`
2140
+ `,vn=M.gql`
2136
2141
  mutation BundleUpdateTransactionOrder($id: String!, $transactionIds: [String!]!) {
2137
2142
  bundleUpdateTransactionOrder(id: $id, transactionIds: $transactionIds) {
2138
2143
  id
2139
2144
  }
2140
2145
  }
2141
- `;class bn{constructor(e){this.handleCache={},this.bundle=e}async getHandle(e){if(this.handleCache[e.name])return this.handleCache[e.name];const A=await this.createHandle(e);return this.handleCache[e.name]=A,A}async getHandles(){var A;if(!((A=this.bundle.getProductCollection())!=null&&A.getResource().globalPropertyConfiguration))return[];const e=this.bundle.getProductCollection().getResource().globalPropertyConfiguration;return Promise.all(e.aspects.map(t=>this.getHandle(t)))}applyConditionsFromState(e,A){return A?e.filter(t=>this.aspectConditionsSatisfied(t.getRawProperty(),A)):e}aspectConditionsSatisfied(e,A){return!e.conditions||e.conditions.length===0?!0:e.conditions.some(t=>{const n=A.aspects.find(a=>a.name===t.targetAspectName);return n?t.requiredVariantSelections.some(a=>a===n.value):!1})}async createHandle(e){switch(e.type){case c.AspectType.FileUpload:return new Jn(this.bundle,e);case c.AspectType.Option:{const A=e.entityId?await J.getOption(e.entityId):void 0;return(A==null?void 0:A.type)==="Color"?new Ln(this.bundle,e,A):new LA(this.bundle,e,A)}case c.AspectType.Text:return new Tn(this.bundle,e)}}}class Me{constructor(e,A){this.bundle=e,this.property=A}getName(){return this.property.name}getTitle(){return this.property.title}getDescription(){return this.property.description}getType(){return this.property.type}getRawProperty(){return this.property}getSharedSteps(e){return(e??this.bundle.getWorkflowExperiences()).flatMap(n=>n.getSteps().filter(a=>{var i;return(i=a.getRaw().globalPropertyAspectConfigurations)==null?void 0:i.some(o=>{var s,r;return o.globalPropertyConfigurationId===((r=(s=this.bundle.getProductCollection())==null?void 0:s.getResource().globalPropertyConfiguration)==null?void 0:r.id)&&o.aspectName===this.property.name})}))}}class Jn extends Me{constructor(e,A){super(e,A)}async selectImage(e){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,e.key),this.applyImageSelection(e)])}async applyGlobalState(e){const A=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);if(!A)return Promise.resolve();const t=await b.getLocalOrFromServer(A);return t?this.applyImageSelection(t,e):Promise.resolve()}async applyImageSelection(e,A){const n=this.getSharedSteps(A).map(a=>a.selectImage(e));await Promise.all(n)}}class Tn extends Me{constructor(e,A){super(e,A)}getText(){const e=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);return e||""}async setText(e){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,e),this.applyTextSelection(e)])}async applyGlobalState(e){const A=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);if(!A)return Promise.resolve();await this.applyTextSelection(A,e)}async applyTextSelection(e,A){const n=this.getSharedSteps(A).map(a=>{a.setText(e)});await Promise.all(n)}}class LA extends Me{constructor(e,A,t){super(e,A),this.optionResource=t}getCurrentVariant(){var A,t;if(!this.optionResource)return;const e=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);if(e){const n=(t=this.optionResource.variants)==null?void 0:t.find(a=>a.id===e);return n?new z(n):void 0}else{const n=(A=this.optionResource.variants)==null?void 0:A.find(a=>{var i,o;return a.id===((o=(i=this.optionResource)==null?void 0:i.defaultVariant)==null?void 0:o.id)});return n?new z(n):void 0}}getAvailableVariants(){var A,t;return(((t=(A=this.optionResource)==null?void 0:A.variants)==null?void 0:t.filter(n=>n.enabled))||[]).map(n=>new z(n))}getAllVariants(){var A;return(((A=this.optionResource)==null?void 0:A.variants)||[]).map(t=>new z(t))}async selectVariant(e){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,e.getId()),this.applyVariantSelection(e)])}async applyGlobalState(e){var n,a;const A=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);if(!A)return Promise.resolve();const t=(a=(n=this.optionResource)==null?void 0:n.variants)==null?void 0:a.find(i=>i.id===A);return t?this.applyVariantSelection(new z(t),e):Promise.resolve()}async applyVariantSelection(e,A){const n=this.getSharedSteps(A).map(a=>a.selectVariant(e));await Promise.all(n)}}class Ln extends LA{constructor(e,A,t){super(e,A,t)}setCustomColor(e){this.getSharedSteps().forEach(t=>t.setCustomColor(e))}getCustomColor(){return this.getSharedSteps()[0].getCustomColor()}}const On=M.gql`
2146
+ `;class kn{constructor(e){this.handleCache={},this.bundle=e}async getHandle(e){if(this.handleCache[e.name])return this.handleCache[e.name];const A=await this.createHandle(e);return this.handleCache[e.name]=A,A}async getHandles(){var A;if(!((A=this.bundle.getProductCollection())!=null&&A.getResource().globalPropertyConfiguration))return[];const e=this.bundle.getProductCollection().getResource().globalPropertyConfiguration;return Promise.all(e.aspects.map(t=>this.getHandle(t)))}applyConditionsFromState(e,A){return A?e.filter(t=>this.aspectConditionsSatisfied(t.getRawProperty(),A)):e}aspectConditionsSatisfied(e,A){return!e.conditions||e.conditions.length===0?!0:e.conditions.some(t=>{const n=A.aspects.find(a=>a.name===t.targetAspectName);return n?t.requiredVariantSelections.some(a=>a===n.value):!1})}async createHandle(e){switch(e.type){case c.AspectType.FileUpload:return new bn(this.bundle,e);case c.AspectType.Option:{const A=e.entityId?await J.getOption(e.entityId):void 0;return(A==null?void 0:A.type)==="Color"?new Tn(this.bundle,e,A):new LA(this.bundle,e,A)}case c.AspectType.Text:return new Jn(this.bundle,e)}}}class Me{constructor(e,A){this.bundle=e,this.property=A}getName(){return this.property.name}getTitle(){return this.property.title}getDescription(){return this.property.description}getType(){return this.property.type}getRawProperty(){return this.property}getSharedSteps(e){return(e??this.bundle.getWorkflowExperiences()).flatMap(n=>n.getSteps().filter(a=>{var i;return(i=a.getRaw().globalPropertyAspectConfigurations)==null?void 0:i.some(o=>{var s,r;return o.globalPropertyConfigurationId===((r=(s=this.bundle.getProductCollection())==null?void 0:s.getResource().globalPropertyConfiguration)==null?void 0:r.id)&&o.aspectName===this.property.name})}))}}class bn extends Me{constructor(e,A){super(e,A)}async selectImage(e){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,e.key),this.applyImageSelection(e)])}async applyGlobalState(e){const A=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);if(!A)return Promise.resolve();const t=await b.getLocalOrFromServer(A);return t?this.applyImageSelection(t,e):Promise.resolve()}async applyImageSelection(e,A){const n=this.getSharedSteps(A).map(a=>a.selectImage(e));await Promise.all(n)}}class Jn extends Me{constructor(e,A){super(e,A)}getText(){const e=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);return e||""}async setText(e){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,e),this.applyTextSelection(e)])}async applyGlobalState(e){const A=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);if(!A)return Promise.resolve();await this.applyTextSelection(A,e)}async applyTextSelection(e,A){const n=this.getSharedSteps(A).map(a=>{a.setText(e)});await Promise.all(n)}}class LA extends Me{constructor(e,A,t){super(e,A),this.optionResource=t}getCurrentVariant(){var A,t;if(!this.optionResource)return;const e=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);if(e){const n=(t=this.optionResource.variants)==null?void 0:t.find(a=>a.id===e);return n?new z(n):void 0}else{const n=(A=this.optionResource.variants)==null?void 0:A.find(a=>{var i,o;return a.id===((o=(i=this.optionResource)==null?void 0:i.defaultVariant)==null?void 0:o.id)});return n?new z(n):void 0}}getAvailableVariants(){var A,t;return(((t=(A=this.optionResource)==null?void 0:A.variants)==null?void 0:t.filter(n=>n.enabled))||[]).map(n=>new z(n))}getAllVariants(){var A;return(((A=this.optionResource)==null?void 0:A.variants)||[]).map(t=>new z(t))}async selectVariant(e){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,e.getId()),this.applyVariantSelection(e)])}async applyGlobalState(e){var n,a;const A=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);if(!A)return Promise.resolve();const t=(a=(n=this.optionResource)==null?void 0:n.variants)==null?void 0:a.find(i=>i.id===A);return t?this.applyVariantSelection(new z(t),e):Promise.resolve()}async applyVariantSelection(e,A){const n=this.getSharedSteps(A).map(a=>a.selectVariant(e));await Promise.all(n)}}class Tn extends LA{constructor(e,A,t){super(e,A,t)}setCustomColor(e){this.getSharedSteps().forEach(t=>t.setCustomColor(e))}getCustomColor(){return this.getSharedSteps()[0].getCustomColor()}}const Ln=M.gql`
2142
2147
  mutation CreateGlobalPropertyState($bundleId: String!) {
2143
2148
  globalPropertyStateCreate(bundleId: $bundleId) {
2144
2149
  id
@@ -2148,7 +2153,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2148
2153
  }
2149
2154
  }
2150
2155
  }
2151
- `,zn=M.gql`
2156
+ `,On=M.gql`
2152
2157
  mutation UpdateGlobalPropertyState($id: String!, $aspects: [GlobalPropertyStateAspectInput]!) {
2153
2158
  globalPropertyStateUpdate(id: $id, aspects: $aspects) {
2154
2159
  id
@@ -2158,7 +2163,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2158
2163
  }
2159
2164
  }
2160
2165
  }
2161
- `,jn=M.gql`
2166
+ `,zn=M.gql`
2162
2167
  query GetGlobalPropertyState($bundleId: String!) {
2163
2168
  globalPropertyState(bundleId: $bundleId) {
2164
2169
  id
@@ -2168,13 +2173,13 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2168
2173
  }
2169
2174
  }
2170
2175
  }
2171
- `;class Kn{constructor(e,A,t){this.bundleId=e,this.bundleOwnerId=A,this.initPromise=this.getOrCreateGlobalPropertyState().then(n=>{this.globalPropertyState=n}),this.onGlobalPropertyStateChange=t}getInitializationPromise(){return this.initPromise}getGlobalPropertyState(){return this.globalPropertyState}getAspect(e){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const A=this.globalPropertyState.aspects.find(t=>t.name===e);if(A)return A.value}async setAspect(e,A){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const t=de(this.globalPropertyState),n=this.globalPropertyState.aspects.find(a=>a.name===e);n?n.value=A:this.globalPropertyState.aspects.push({name:e,value:A}),await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(t,this.globalPropertyState)}async updateGlobalPropertyState(){var A;if(!this.globalPropertyState)throw new Error("Global property state not initialized");const e=await H.getShadowGraphqlClient().mutate({mutation:zn,variables:{id:this.globalPropertyState.id,aspects:this.globalPropertyState.aspects},context:{bundleOwnerId:this.bundleOwnerId}});if((A=e.data)!=null&&A.globalPropertyStateUpdate)this.globalPropertyState=e.data.globalPropertyStateUpdate;else throw new Error("Unable to update global property state")}async getOrCreateGlobalPropertyState(){var t;const e=await H.getShadowGraphqlClient().query({query:jn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{bundleId:this.bundleId},context:{bundleOwnerId:this.bundleOwnerId}});if(e.data.globalPropertyState&&e.data.globalPropertyState.id)return e.data.globalPropertyState;const A=await H.getShadowGraphqlClient().mutate({mutation:On,variables:{bundleId:this.bundleId},context:{bundleOwnerId:this.bundleOwnerId}});if((t=A.data)!=null&&t.globalPropertyStateCreate&&A.data.globalPropertyStateCreate.id)return A.data.globalPropertyStateCreate;throw new Error(`Unable to create global property state for bundle: ${this.bundleId}`)}}class Vn{constructor(e){this.setState(e)}setState(e){e&&(this.state=JSON.parse(e))}applyStateToWorkflowExperience(e){var a,i;if(!this.state||!((a=e==null?void 0:e.getWorkflowManager())!=null&&a.getModelContainer()))return;const A=(i=this.state.transactions.find(o=>o.transactionId===e.getWorkflowManager().getTransaction().id&&o.transform))==null?void 0:i.transform;if(!A)return;const t=this.flipTransform(A,e.getWorkflowManager().getPreviewService()),n=e.getWorkflowManager().getModelContainer();n.position=t.position,n.rotation=t.rotation,n.scale=t.scale}setWorkflowExperienceTransform(e,A){var o;if(!((o=e==null?void 0:e.getWorkflowManager())!=null&&o.getModelContainer()))return;const t=this.flipTransform(A,e.getWorkflowManager().getPreviewService()),n=e.getWorkflowManager().getModelContainer();n.position=t.position,n.rotation=t.rotation,n.scale=t.scale;const a=e.getWorkflowManager().getTransaction().id;this.state?this.state.transactions||(this.state.transactions=[]):this.state={transactions:[]};const i=this.state.transactions.find(s=>s.transactionId===a);i?i.transform=A:this.state.transactions.push({transactionId:a,transform:A})}removeStateForTransaction(e){if(!this.state||!this.state.transactions)return;const A=this.state.transactions.findIndex(t=>t.transactionId===e);A!==-1&&this.state.transactions.splice(A,1)}getSerializedState(){if(this.state)return JSON.stringify(this.state)}flipTransform(e,A){return A&&A.flipTransform?A.flipTransform(e.position,{x:e.rotation.x*Math.PI/180,y:e.rotation.y*Math.PI/180,z:e.rotation.z*Math.PI/180},e.scale):{position:e.position,rotation:{x:e.rotation.x*Math.PI/180,y:e.rotation.y*Math.PI/180,z:e.rotation.z*Math.PI/180},scale:e.scale}}}class OA{constructor(e){this.collection=e}getId(){return this.collection.id}getName(){return this.collection.name}getProducts(){return this.collection.productCollectionProducts.map(e=>new zA(e))}getTransformCollection(){if(this.collection.transformCollection)return new jA(this.collection.transformCollection)}getResource(){return this.collection}}class zA{constructor(e){this.product=e.product,this.productResource=e}getId(){return this.product.id}getName(){return this.product.name}getIntegrationByType(e,A){const n=(this.product.integrationProducts||[]).find(a=>{var r,l,d;const i=(r=a.integration)==null?void 0:r.type,o=((l=a.integration)==null?void 0:l.type)===e,s=A?((d=a.integration)==null?void 0:d.externalIntegrationId)===A:!0;return i&&o&&s});if(!n)throw new Error("Failed to find requested integration type on product. This is generally due to a configuration error");return n}getDefaultWorkflow(){const e=this.product.workflows||[];if(e.length===0)throw new R("No workflows found on product. This is generally due to a configuration error. Please confirm at least one workflow is configured for this product.");const A=this.productResource.workflowId;if(A){const n=e.find(a=>a.workflowName===A);if(n)return new Oe(n)}const t=e[0];return new Oe(t)}getIntegrations(){return this.product.integrationProducts||[]}getResource(){return this.product}}class Oe{constructor(e){this.workflow=e}getId(){return this.workflow.workflowName}getName(){return this.workflow.friendlyName}getThumbnail(){return this.workflow.imageUrl}}class jA{constructor(e){this.collection=e}getId(){return this.collection.id}getName(){return this.collection.name}getTransforms(){return this.collection.transforms.map(e=>new KA(e))}}class KA{constructor(e){this.transform=e}getId(){return this.transform.id}getName(){return this.transform.name}get(){return{position:this.transform.position,rotation:this.transform.rotation,scale:this.transform.scale}}}class VA{constructor(e,A,t,n,a){var i,o,s;this.eventListeners=new Map,this.workflowExperiences=[],this.client=e,this.id=A.id,this.name=A.name||"",this.ownerId=a,this.metadata=new Map(((i=A.metadata)==null?void 0:i.map(r=>[r.key,r.value]))||[]),this.productCollection=A.productCollection,this.bundleStateManager=new Vn(A.bundleStateData),this.globalConfiguration=(o=this.productCollection)==null?void 0:o.globalPropertyConfiguration,this.globalPropertyStateManager=new Kn(this.id,this.ownerId,this.checkConditionalHandlesChanged.bind(this)),this.globalPropertyHandleService=new bn(this),this.setPreviewService(t),this.initializationPromise=this.loadExistingBundles(((s=A.transactions)==null?void 0:s.map(r=>r.id))||[],n)}getInitializationPromise(){return this.initializationPromise}addEventListener(e,A){this.eventListeners.set(e,[...this.eventListeners.get(e)||[],A])}removeEventListener(e,A){const t=this.eventListeners.get(e)||[],n=t.indexOf(A);n>-1&&t.splice(n,1)}getClient(){return this.client}getId(){return this.id}getName(){return this.name}setName(e){return this.name=e,this.updateBundle()}getMetadata(){return new Map(this.metadata)}setMetadata(e){return this.metadata=new Map(e),this.updateBundle()}setNameAndMetadata(e,A){return this.name=e,this.metadata=new Map(A),this.updateBundle()}hasGlobalProperties(){return!!this.globalConfiguration&&this.globalConfiguration.aspects.length>0}async getGlobalProperties(){return this.globalPropertyHandleService.applyConditionsFromState(await this.globalPropertyHandleService.getHandles(),this.getGlobalPropertyStateManager().getGlobalPropertyState())}getGlobalPropertyStateManager(){return this.globalPropertyStateManager}async getGlobalPropertyTotalSubunits(){return(await this.globalPropertyHandleService.getHandles()).filter(t=>t.getType()===c.AspectType.Option).map(t=>{var n;return((n=t.getCurrentVariant())==null?void 0:n.getPrice())||0}).reduce((t,n)=>t+n,0)}getTotalSubunits(){return this.workflowExperiences.map(e=>e.getTotalPriceSubunits()).reduce((e,A)=>e+A,0)}getProductCollection(){return this.productCollection?new OA(this.productCollection):void 0}async addWorkflowExperience(e){await this.appendWorkflowExperience(e),await this.injectExperienceIntoPreviewService(e);const A=await this.getGlobalProperties();await Promise.all(A.map(t=>t.applyGlobalState([e])))}async addWorkflowExperiences(e){const A=e.map(i=>i.getWorkflowManager().getTransaction().id),t=A.map(i=>this.workflowExperiences.find(o=>o.getWorkflowManager().getTransaction().id===i));if(t.some(i=>!!i))throw new Error("Unable to add transaction to bundle - Already Exists: "+t.filter(i=>!!i).map(i=>i==null?void 0:i.getWorkflowManager().getTransaction().id).join(", "));const n=P.getMap("transactionOwnerIds")||new Map,a=A.map(i=>n.get(i));await H.getShadowGraphqlClient().mutate({mutation:xn,variables:{id:this.id,transactionIds:A,transactionOwnerIds:a},context:{bundleOwnerId:this.ownerId}}).catch(i=>{console.error(i)}),this.workflowExperiences.push(...e),await Promise.all([this.updateTransactionOrder(),(async()=>{for(const o of e)await this.injectExperienceIntoPreviewService(o);const i=await this.getGlobalProperties();await Promise.all(i.map(o=>o.applyGlobalState(e)))})()])}async appendWorkflowExperience(e,A=!0){const t=e.getWorkflowManager().getTransaction().id;if(this.workflowExperiences.find(o=>o.getWorkflowManager().getTransaction().id===t))throw new Error("Unable to add transaction to bundle - Already Exists!");const i=(P.getMap("transactionOwnerIds")||new Map).get(t);await H.getShadowGraphqlClient().mutate({mutation:Hn,variables:{id:this.id,transactionId:t},context:{bundleOwnerId:this.ownerId,transactionOwnerId:i}}),A&&this.workflowExperiences.push(e)}async removeWorkflowExperience(e){const A=this.workflowExperiences.indexOf(e);await this.removeTransaction(A,this.workflowExperiences[A].getWorkflowManager().getTransaction())}async removeWorkflowExperiences(e){await this.removeTransactions(e.map(A=>A.getWorkflowManager().getTransaction()))}async removeWorkflowExperienceByTransaction(e){const A=this.workflowExperiences.findIndex(t=>t.getWorkflowManager().getTransaction().id===e.id);await this.removeTransaction(A,e)}async removeWorkflowExperiencesByTransactions(e){await this.removeTransactions(e)}async removeTransaction(e,A,t=!0){if(e>-1){const n=this.workflowExperiences.find(a=>a.getWorkflowManager().getTransaction().id===A.id);this.previewService&&n.getWorkflowManager().ejectFromPreviewService(),this.bundleStateManager.removeStateForTransaction(A.id),await H.getShadowGraphqlClient().mutate({mutation:Rn,variables:{id:this.id,transactionId:A.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([a,i])=>({key:a,value:i})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),t&&(this.workflowExperiences.splice(e,1),await this.updateTransactionOrder())}else throw new Error("Unable to remove workflow experience from bundle - Not Found! - "+A.id)}async removeTransactions(e){const A=e.map(n=>this.workflowExperiences.findIndex(a=>a.getWorkflowManager().getTransaction().id===n.id));if(A.some(n=>n===-1))throw new Error("Unable to remove workflow experience from bundle - The following aren't included in the bundle: "+e.filter((n,a)=>A[a]===-1).map(n=>n.id).join(", "));const t=e.map(n=>this.workflowExperiences.splice(this.workflowExperiences.findIndex(a=>a.getWorkflowManager().getTransaction().id===n.id),1)[0]);this.previewService&&t.forEach(n=>n.getWorkflowManager().ejectFromPreviewService()),e.forEach(n=>this.bundleStateManager.removeStateForTransaction(n.id)),await H.getShadowGraphqlClient().mutate({mutation:Un,variables:{id:this.id,transactionIds:e.map(n=>n.id),name:this.name,metadata:Array.from(this.metadata.entries()).map(([n,a])=>({key:n,value:a})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),await this.updateTransactionOrder()}async insertWorkflowExperience(e,A){await this.appendWorkflowExperience(e,!1),this.workflowExperiences.splice(A,0,e),await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(e);const t=await this.getGlobalProperties();await Promise.all(t.map(n=>n.applyGlobalState([e])))})()])}async replaceWorkflowExperience(e,A){if(e<0||e>=this.workflowExperiences.length)throw new Error("Unable to replace workflow experience in bundle - Index out of range!");const t=this.workflowExperiences[e];if(t.getWorkflowManager().getTransaction().id===A.getWorkflowManager().getTransaction().id)throw new Error("Unable to replace workflow experience in bundle - Same transaction!");await Promise.all([this.removeTransaction(e,t.getWorkflowManager().getTransaction(),!1),this.appendWorkflowExperience(A,!1)]),this.workflowExperiences[e]=A,await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(A);const n=await this.getGlobalProperties();await Promise.all(n.map(a=>a.applyGlobalState([A])))})()])}async swapWorkflowExperiences(e,A){if(e<0||e>=this.workflowExperiences.length||A<0||A>=this.workflowExperiences.length)throw new Error("Unable to swap workflow experiences in bundle - Index out of range!");if(e===A)return;const t=this.workflowExperiences[e];this.workflowExperiences[e]=this.workflowExperiences[A],this.workflowExperiences[A]=t,await this.updateTransactionOrder()}getWorkflowExperiences(){return[...this.workflowExperiences]}async sortWorkflowExperiences(e){this.workflowExperiences=this.workflowExperiences.sort(e),await this.updateTransactionOrder()}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(e,A){var a;const t=await H.getShadowGraphqlClient().mutate({mutation:Gn,variables:{id:this.id,details:e,type:A||oe.Owner},context:{bundleOwnerId:this.ownerId}});if(!((a=t.data)!=null&&a.bundleAddStakeholder))throw new Error("Bundle not found!");const n=t.data.bundleAddStakeholder.bundleStakeholders||[];this.storeStakeholderCustomers(n)}async updateStakeholders(e){var n;const A=await H.getShadowGraphqlClient().mutate({mutation:vn,variables:{id:this.id,input:e},context:{bundleOwnerId:this.ownerId}});if(!((n=A.data)!=null&&n.bundleUpdateStakeholders))throw new Error("Bundle not found!");const t=A.data.bundleUpdateStakeholders.bundleStakeholders||[];this.storeStakeholderCustomers(t)}async getAllStakeholders(){const e=await H.getShadowGraphqlClient().query({query:Sn,errorPolicy:"all",variables:{id:this.id},context:{bundleOwnerId:this.ownerId}});if(!e.data.bundles||e.data.bundles.length===0)throw new Error("Bundle not found!");const A=e.data.bundles[0].bundleStakeholders||[];return this.storeStakeholderCustomers(A),A}storeStakeholderCustomers(e){e.forEach(A=>{A.customer&&this.client.storeCustomer(A.customer)})}async finish(e){return await sn(this.workflowExperiences.map(A=>({workflowManager:A.getWorkflowManager(),workflow:A.getWorkflowManager().getWorkflow(),layouts:A.getWorkflowManager().getLayouts(),getReducerState:()=>A.getCommandContext().getState(),product:A.getWorkflowManager().getProduct(),transaction:A.getWorkflowManager().getTransaction(),workflowSelections:A.getWorkflowManager().getWorkflowSelections(),designName:A.getWorkflowManager().getWorkflow().name,workflowMetadata:A.getWorkflowManager().getWorkflowMetadata()})),e??(()=>{}))}getPreviewService(){return this.previewService}async setPreviewService(e){if(this.workflowExperiences&&this.workflowExperiences.length>0&&(this.workflowExperiences.forEach(A=>A.getWorkflowManager().ejectFromPreviewService()),e))for(const A of this.workflowExperiences)await this.injectExperienceIntoPreviewService(A);e&&e.registerModelLoadEventListener&&e.registerModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService&&this.previewService!==e&&this.previewService.unregisterModelLoadEventListener&&this.previewService.unregisterModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService=e}setWorkflowExperienceTransform(e,A){return this.bundleStateManager.setWorkflowExperienceTransform(e,A),this.updateBundle()}onModelLoadEvent(e){e.eventType==="unload"||!e.modelContainer||(e.modelContainer.registerMaterialSelectedCallback(()=>this.onModelSelectedEvent(e.modelContainer,!0)),e.modelContainer.registerMaterialDeselectedCallback(()=>this.onModelSelectedEvent(e.modelContainer,!1)))}onModelSelectedEvent(e,A){if(e&&e.metadata&&e.metadata instanceof Map&&e.metadata.has("workflowManager")){const n=e.metadata.get("workflowManager").getTransaction(),a=this.workflowExperiences.find(i=>i.getWorkflowManager().getTransaction().id===n.id);a&&this.fireEvent(A?"workflow-experience-hover-enter":"workflow-experience-hover-exit",{workflowExperience:a})}}async injectExperienceIntoPreviewService(e){if(this.previewService){const A=e.getWorkflowManager().injectIntoPreviewService(this.previewService);try{this.bundleStateManager.applyStateToWorkflowExperience(e)}catch(t){console.error(`Unable to apply state to workflow experience: ${t}`)}await A}}async loadExistingBundles(e,A){if(e.length===0)return;const t=await this.client.getWorkflowExperiences(e.map(n=>({type:"transaction",transactionId:n})),A);if(this.workflowExperiences=t,this.previewService)for(const n of t)await this.injectExperienceIntoPreviewService(n)}async updateBundle(){var A;if(!((A=(await H.getShadowGraphqlClient().mutate({mutation:Nn,variables:{id:this.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([t,n])=>({key:t,value:n})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}})).data)!=null&&A.bundleUpdate))throw new Error("Bundle not found!")}async updateTransactionOrder(){await H.getShadowGraphqlClient().mutate({mutation:kn,variables:{id:this.id,transactionIds:this.workflowExperiences.map(e=>e.getWorkflowManager().getTransaction().id)},context:{bundleOwnerId:this.ownerId}})}async checkConditionalHandlesChanged(e,A){const t=await this.globalPropertyHandleService.getHandles(),n=this.globalPropertyHandleService.applyConditionsFromState(t,e),a=this.globalPropertyHandleService.applyConditionsFromState(t,A);(()=>{if(n.length!==a.length)return!0;for(let o=0;o<n.length;o++)if(n[o].getName()!==a[o].getName())return!0;return!1})()&&this.fireEvent("conditional-global-properties-changed",{globalProperties:a})}fireEvent(e,A){(this.eventListeners.get(e)||[]).forEach(n=>n({bundle:this,event:e,data:A}))}}const Wn=M.gql`
2176
+ `;class jn{constructor(e,A,t){this.bundleId=e,this.bundleOwnerId=A,this.initPromise=this.getOrCreateGlobalPropertyState().then(n=>{this.globalPropertyState=n}),this.onGlobalPropertyStateChange=t}getInitializationPromise(){return this.initPromise}getGlobalPropertyState(){return this.globalPropertyState}getAspect(e){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const A=this.globalPropertyState.aspects.find(t=>t.name===e);if(A)return A.value}async setAspect(e,A){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const t=de(this.globalPropertyState),n=this.globalPropertyState.aspects.find(a=>a.name===e);n?n.value=A:this.globalPropertyState.aspects.push({name:e,value:A}),await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(t,this.globalPropertyState)}async updateGlobalPropertyState(){var A;if(!this.globalPropertyState)throw new Error("Global property state not initialized");const e=await H.getShadowGraphqlClient().mutate({mutation:On,variables:{id:this.globalPropertyState.id,aspects:this.globalPropertyState.aspects},context:{bundleOwnerId:this.bundleOwnerId}});if((A=e.data)!=null&&A.globalPropertyStateUpdate)this.globalPropertyState=e.data.globalPropertyStateUpdate;else throw new Error("Unable to update global property state")}async getOrCreateGlobalPropertyState(){var t;const e=await H.getShadowGraphqlClient().query({query:zn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{bundleId:this.bundleId},context:{bundleOwnerId:this.bundleOwnerId}});if(e.data.globalPropertyState&&e.data.globalPropertyState.id)return e.data.globalPropertyState;const A=await H.getShadowGraphqlClient().mutate({mutation:Ln,variables:{bundleId:this.bundleId},context:{bundleOwnerId:this.bundleOwnerId}});if((t=A.data)!=null&&t.globalPropertyStateCreate&&A.data.globalPropertyStateCreate.id)return A.data.globalPropertyStateCreate;throw new Error(`Unable to create global property state for bundle: ${this.bundleId}`)}}class Kn{constructor(e){this.setState(e)}setState(e){e&&(this.state=JSON.parse(e))}applyStateToWorkflowExperience(e){var a,i;if(!this.state||!((a=e==null?void 0:e.getWorkflowManager())!=null&&a.getModelContainer()))return;const A=(i=this.state.transactions.find(o=>o.transactionId===e.getWorkflowManager().getTransaction().id&&o.transform))==null?void 0:i.transform;if(!A)return;const t=this.flipTransform(A,e.getWorkflowManager().getPreviewService()),n=e.getWorkflowManager().getModelContainer();n.position=t.position,n.rotation=t.rotation,n.scale=t.scale}setWorkflowExperienceTransform(e,A){var o;if(!((o=e==null?void 0:e.getWorkflowManager())!=null&&o.getModelContainer()))return;const t=this.flipTransform(A,e.getWorkflowManager().getPreviewService()),n=e.getWorkflowManager().getModelContainer();n.position=t.position,n.rotation=t.rotation,n.scale=t.scale;const a=e.getWorkflowManager().getTransaction().id;this.state?this.state.transactions||(this.state.transactions=[]):this.state={transactions:[]};const i=this.state.transactions.find(s=>s.transactionId===a);i?i.transform=A:this.state.transactions.push({transactionId:a,transform:A})}removeStateForTransaction(e){if(!this.state||!this.state.transactions)return;const A=this.state.transactions.findIndex(t=>t.transactionId===e);A!==-1&&this.state.transactions.splice(A,1)}getSerializedState(){if(this.state)return JSON.stringify(this.state)}flipTransform(e,A){return A&&A.flipTransform?A.flipTransform(e.position,{x:e.rotation.x*Math.PI/180,y:e.rotation.y*Math.PI/180,z:e.rotation.z*Math.PI/180},e.scale):{position:e.position,rotation:{x:e.rotation.x*Math.PI/180,y:e.rotation.y*Math.PI/180,z:e.rotation.z*Math.PI/180},scale:e.scale}}}class OA{constructor(e){this.collection=e}getId(){return this.collection.id}getName(){return this.collection.name}getProducts(){return this.collection.productCollectionProducts.map(e=>new zA(e))}getTransformCollection(){if(this.collection.transformCollection)return new jA(this.collection.transformCollection)}getResource(){return this.collection}}class zA{constructor(e){this.product=e.product,this.productResource=e}getId(){return this.product.id}getName(){return this.product.name}getIntegrationByType(e,A){const n=(this.product.integrationProducts||[]).find(a=>{var r,l,d;const i=(r=a.integration)==null?void 0:r.type,o=((l=a.integration)==null?void 0:l.type)===e,s=A?((d=a.integration)==null?void 0:d.externalIntegrationId)===A:!0;return i&&o&&s});if(!n)throw new Error("Failed to find requested integration type on product. This is generally due to a configuration error");return n}getDefaultWorkflow(){const e=this.product.workflows||[];if(e.length===0)throw new R("No workflows found on product. This is generally due to a configuration error. Please confirm at least one workflow is configured for this product.");const A=this.productResource.workflowId;if(A){const n=e.find(a=>a.workflowName===A);if(n)return new Oe(n)}const t=e[0];return new Oe(t)}getIntegrations(){return this.product.integrationProducts||[]}getResource(){return this.product}}class Oe{constructor(e){this.workflow=e}getId(){return this.workflow.workflowName}getName(){return this.workflow.friendlyName}getThumbnail(){return this.workflow.imageUrl}}class jA{constructor(e){this.collection=e}getId(){return this.collection.id}getName(){return this.collection.name}getTransforms(){return this.collection.transforms.map(e=>new KA(e))}}class KA{constructor(e){this.transform=e}getId(){return this.transform.id}getName(){return this.transform.name}get(){return{position:this.transform.position,rotation:this.transform.rotation,scale:this.transform.scale}}}class VA{constructor(e,A,t,n,a){var i,o,s;this.eventListeners=new Map,this.workflowExperiences=[],this.client=e,this.id=A.id,this.name=A.name||"",this.ownerId=a,this.metadata=new Map(((i=A.metadata)==null?void 0:i.map(r=>[r.key,r.value]))||[]),this.productCollection=A.productCollection,this.bundleStateManager=new Kn(A.bundleStateData),this.globalConfiguration=(o=this.productCollection)==null?void 0:o.globalPropertyConfiguration,this.globalPropertyStateManager=new jn(this.id,this.ownerId,this.checkConditionalHandlesChanged.bind(this)),this.globalPropertyHandleService=new kn(this),this.setPreviewService(t),this.initializationPromise=this.loadExistingBundles(((s=A.transactions)==null?void 0:s.map(r=>r.id))||[],n)}getInitializationPromise(){return this.initializationPromise}addEventListener(e,A){this.eventListeners.set(e,[...this.eventListeners.get(e)||[],A])}removeEventListener(e,A){const t=this.eventListeners.get(e)||[],n=t.indexOf(A);n>-1&&t.splice(n,1)}getClient(){return this.client}getId(){return this.id}getName(){return this.name}setName(e){return this.name=e,this.updateBundle()}getMetadata(){return new Map(this.metadata)}setMetadata(e){return this.metadata=new Map(e),this.updateBundle()}setNameAndMetadata(e,A){return this.name=e,this.metadata=new Map(A),this.updateBundle()}hasGlobalProperties(){return!!this.globalConfiguration&&this.globalConfiguration.aspects.length>0}async getGlobalProperties(){return this.globalPropertyHandleService.applyConditionsFromState(await this.globalPropertyHandleService.getHandles(),this.getGlobalPropertyStateManager().getGlobalPropertyState())}getGlobalPropertyStateManager(){return this.globalPropertyStateManager}async getGlobalPropertyTotalSubunits(){return(await this.globalPropertyHandleService.getHandles()).filter(t=>t.getType()===c.AspectType.Option).map(t=>{var n;return((n=t.getCurrentVariant())==null?void 0:n.getPrice())||0}).reduce((t,n)=>t+n,0)}getTotalSubunits(){return this.workflowExperiences.map(e=>e.getTotalPriceSubunits()).reduce((e,A)=>e+A,0)}getProductCollection(){return this.productCollection?new OA(this.productCollection):void 0}async addWorkflowExperience(e){await this.appendWorkflowExperience(e),await this.injectExperienceIntoPreviewService(e);const A=await this.getGlobalProperties();await Promise.all(A.map(t=>t.applyGlobalState([e])))}async addWorkflowExperiences(e){const A=e.map(i=>i.getWorkflowManager().getTransaction().id),t=A.map(i=>this.workflowExperiences.find(o=>o.getWorkflowManager().getTransaction().id===i));if(t.some(i=>!!i))throw new Error("Unable to add transaction to bundle - Already Exists: "+t.filter(i=>!!i).map(i=>i==null?void 0:i.getWorkflowManager().getTransaction().id).join(", "));const n=P.getMap("transactionOwnerIds")||new Map,a=A.map(i=>n.get(i));await H.getShadowGraphqlClient().mutate({mutation:Hn,variables:{id:this.id,transactionIds:A,transactionOwnerIds:a},context:{bundleOwnerId:this.ownerId}}).catch(i=>{console.error(i)}),this.workflowExperiences.push(...e),await Promise.all([this.updateTransactionOrder(),(async()=>{for(const o of e)await this.injectExperienceIntoPreviewService(o);const i=await this.getGlobalProperties();await Promise.all(i.map(o=>o.applyGlobalState(e)))})()])}async appendWorkflowExperience(e,A=!0){const t=e.getWorkflowManager().getTransaction().id;if(this.workflowExperiences.find(o=>o.getWorkflowManager().getTransaction().id===t))throw new Error("Unable to add transaction to bundle - Already Exists!");const i=(P.getMap("transactionOwnerIds")||new Map).get(t);await H.getShadowGraphqlClient().mutate({mutation:Nn,variables:{id:this.id,transactionId:t},context:{bundleOwnerId:this.ownerId,transactionOwnerId:i}}),A&&this.workflowExperiences.push(e)}async removeWorkflowExperience(e){const A=this.workflowExperiences.indexOf(e);await this.removeTransaction(A,this.workflowExperiences[A].getWorkflowManager().getTransaction())}async removeWorkflowExperiences(e){await this.removeTransactions(e.map(A=>A.getWorkflowManager().getTransaction()))}async removeWorkflowExperienceByTransaction(e){const A=this.workflowExperiences.findIndex(t=>t.getWorkflowManager().getTransaction().id===e.id);await this.removeTransaction(A,e)}async removeWorkflowExperiencesByTransactions(e){await this.removeTransactions(e)}async removeTransaction(e,A,t=!0){if(e>-1){const n=this.workflowExperiences.find(a=>a.getWorkflowManager().getTransaction().id===A.id);this.previewService&&n.getWorkflowManager().ejectFromPreviewService(),this.bundleStateManager.removeStateForTransaction(A.id),await H.getShadowGraphqlClient().mutate({mutation:xn,variables:{id:this.id,transactionId:A.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([a,i])=>({key:a,value:i})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),t&&(this.workflowExperiences.splice(e,1),await this.updateTransactionOrder())}else throw new Error("Unable to remove workflow experience from bundle - Not Found! - "+A.id)}async removeTransactions(e){const A=e.map(n=>this.workflowExperiences.findIndex(a=>a.getWorkflowManager().getTransaction().id===n.id));if(A.some(n=>n===-1))throw new Error("Unable to remove workflow experience from bundle - The following aren't included in the bundle: "+e.filter((n,a)=>A[a]===-1).map(n=>n.id).join(", "));const t=e.map(n=>this.workflowExperiences.splice(this.workflowExperiences.findIndex(a=>a.getWorkflowManager().getTransaction().id===n.id),1)[0]);this.previewService&&t.forEach(n=>n.getWorkflowManager().ejectFromPreviewService()),e.forEach(n=>this.bundleStateManager.removeStateForTransaction(n.id)),await H.getShadowGraphqlClient().mutate({mutation:Rn,variables:{id:this.id,transactionIds:e.map(n=>n.id),name:this.name,metadata:Array.from(this.metadata.entries()).map(([n,a])=>({key:n,value:a})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),await this.updateTransactionOrder()}async insertWorkflowExperience(e,A){await this.appendWorkflowExperience(e,!1),this.workflowExperiences.splice(A,0,e),await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(e);const t=await this.getGlobalProperties();await Promise.all(t.map(n=>n.applyGlobalState([e])))})()])}async replaceWorkflowExperience(e,A){if(e<0||e>=this.workflowExperiences.length)throw new Error("Unable to replace workflow experience in bundle - Index out of range!");const t=this.workflowExperiences[e];if(t.getWorkflowManager().getTransaction().id===A.getWorkflowManager().getTransaction().id)throw new Error("Unable to replace workflow experience in bundle - Same transaction!");await Promise.all([this.removeTransaction(e,t.getWorkflowManager().getTransaction(),!1),this.appendWorkflowExperience(A,!1)]),this.workflowExperiences[e]=A,await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(A);const n=await this.getGlobalProperties();await Promise.all(n.map(a=>a.applyGlobalState([A])))})()])}async swapWorkflowExperiences(e,A){if(e<0||e>=this.workflowExperiences.length||A<0||A>=this.workflowExperiences.length)throw new Error("Unable to swap workflow experiences in bundle - Index out of range!");if(e===A)return;const t=this.workflowExperiences[e];this.workflowExperiences[e]=this.workflowExperiences[A],this.workflowExperiences[A]=t,await this.updateTransactionOrder()}getWorkflowExperiences(){return[...this.workflowExperiences]}async sortWorkflowExperiences(e){this.workflowExperiences=this.workflowExperiences.sort(e),await this.updateTransactionOrder()}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(e,A){var a;const t=await H.getShadowGraphqlClient().mutate({mutation:Un,variables:{id:this.id,details:e,type:A||oe.Owner},context:{bundleOwnerId:this.ownerId}});if(!((a=t.data)!=null&&a.bundleAddStakeholder))throw new Error("Bundle not found!");const n=t.data.bundleAddStakeholder.bundleStakeholders||[];this.storeStakeholderCustomers(n)}async updateStakeholders(e){var n;const A=await H.getShadowGraphqlClient().mutate({mutation:Gn,variables:{id:this.id,input:e},context:{bundleOwnerId:this.ownerId}});if(!((n=A.data)!=null&&n.bundleUpdateStakeholders))throw new Error("Bundle not found!");const t=A.data.bundleUpdateStakeholders.bundleStakeholders||[];this.storeStakeholderCustomers(t)}async getAllStakeholders(){const e=await H.getShadowGraphqlClient().query({query:Yn,errorPolicy:"all",variables:{id:this.id},context:{bundleOwnerId:this.ownerId}});if(!e.data.bundles||e.data.bundles.length===0)throw new Error("Bundle not found!");const A=e.data.bundles[0].bundleStakeholders||[];return this.storeStakeholderCustomers(A),A}storeStakeholderCustomers(e){e.forEach(A=>{A.customer&&this.client.storeCustomer(A.customer)})}async finish(e){return await on(this.workflowExperiences.map(A=>({workflowManager:A.getWorkflowManager(),workflow:A.getWorkflowManager().getWorkflow(),layouts:A.getWorkflowManager().getLayouts(),getReducerState:()=>A.getCommandContext().getState(),product:A.getWorkflowManager().getProduct(),transaction:A.getWorkflowManager().getTransaction(),workflowSelections:A.getWorkflowManager().getWorkflowSelections(),designName:A.getWorkflowManager().getWorkflow().name,workflowMetadata:A.getWorkflowManager().getWorkflowMetadata()})),e??(()=>{}))}getPreviewService(){return this.previewService}async setPreviewService(e){if(this.workflowExperiences&&this.workflowExperiences.length>0&&(this.workflowExperiences.forEach(A=>A.getWorkflowManager().ejectFromPreviewService()),e))for(const A of this.workflowExperiences)await this.injectExperienceIntoPreviewService(A);e&&e.registerModelLoadEventListener&&e.registerModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService&&this.previewService!==e&&this.previewService.unregisterModelLoadEventListener&&this.previewService.unregisterModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService=e}setWorkflowExperienceTransform(e,A){return this.bundleStateManager.setWorkflowExperienceTransform(e,A),this.updateBundle()}onModelLoadEvent(e){e.eventType==="unload"||!e.modelContainer||(e.modelContainer.registerMaterialSelectedCallback(()=>this.onModelSelectedEvent(e.modelContainer,!0)),e.modelContainer.registerMaterialDeselectedCallback(()=>this.onModelSelectedEvent(e.modelContainer,!1)))}onModelSelectedEvent(e,A){if(e&&e.metadata&&e.metadata instanceof Map&&e.metadata.has("workflowManager")){const n=e.metadata.get("workflowManager").getTransaction(),a=this.workflowExperiences.find(i=>i.getWorkflowManager().getTransaction().id===n.id);a&&this.fireEvent(A?"workflow-experience-hover-enter":"workflow-experience-hover-exit",{workflowExperience:a})}}async injectExperienceIntoPreviewService(e){if(this.previewService){const A=e.getWorkflowManager().injectIntoPreviewService(this.previewService);try{this.bundleStateManager.applyStateToWorkflowExperience(e)}catch(t){console.error(`Unable to apply state to workflow experience: ${t}`)}await A}}async loadExistingBundles(e,A){if(e.length===0)return;const t=await this.client.getWorkflowExperiences(e.map(n=>({type:"transaction",transactionId:n})),A);if(this.workflowExperiences=t,this.previewService)for(const n of t)await this.injectExperienceIntoPreviewService(n)}async updateBundle(){var A;if(!((A=(await H.getShadowGraphqlClient().mutate({mutation:Pn,variables:{id:this.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([t,n])=>({key:t,value:n})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}})).data)!=null&&A.bundleUpdate))throw new Error("Bundle not found!")}async updateTransactionOrder(){await H.getShadowGraphqlClient().mutate({mutation:vn,variables:{id:this.id,transactionIds:this.workflowExperiences.map(e=>e.getWorkflowManager().getTransaction().id)},context:{bundleOwnerId:this.ownerId}})}async checkConditionalHandlesChanged(e,A){const t=await this.globalPropertyHandleService.getHandles(),n=this.globalPropertyHandleService.applyConditionsFromState(t,e),a=this.globalPropertyHandleService.applyConditionsFromState(t,A);(()=>{if(n.length!==a.length)return!0;for(let o=0;o<n.length;o++)if(n[o].getName()!==a[o].getName())return!0;return!1})()&&this.fireEvent("conditional-global-properties-changed",{globalProperties:a})}fireEvent(e,A){(this.eventListeners.get(e)||[]).forEach(n=>n({bundle:this,event:e,data:A}))}}const Vn=M.gql`
2172
2177
  mutation processFlowCreate($processFlowId: String!, $inputs: [String]!) {
2173
2178
  processExecutionCreate(processFlowId: $processFlowId, inputs: $inputs) {
2174
2179
  id
2175
2180
  }
2176
2181
  }
2177
- `;class WA{async execute(e,A,t){var d,B,w;const a=(B=(d=(await H.getShadowGraphqlClient().mutate({mutation:Wn,variables:{processFlowId:e,inputs:[...A.map(E=>E.getValueForTransmission())]}})).data)==null?void 0:d.processExecutionCreate)==null?void 0:B.id;if(!a)throw new Error("Failed to create process execution.");function i(E){return new Promise(m=>{setTimeout(m,E)})}let o=!1,s=0,r,l;for(;!o;){r=await H.getShadowGraphqlClient().query({query:M.gql`
2182
+ `;class WA{async execute(e,A,t){var d,B,w;const a=(B=(d=(await H.getShadowGraphqlClient().mutate({mutation:Vn,variables:{processFlowId:e,inputs:[...A.map(E=>E.getValueForTransmission())]}})).data)==null?void 0:d.processExecutionCreate)==null?void 0:B.id;if(!a)throw new Error("Failed to create process execution.");function i(E){return new Promise(m=>{setTimeout(m,E)})}let o=!1,s=0,r,l;for(;!o;){r=await H.getShadowGraphqlClient().query({query:M.gql`
2178
2183
  query getProcessFlowExecution($ids: [String]!) {
2179
2184
  processExecutions(ids: $ids) {
2180
2185
  id
@@ -2187,7 +2192,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2187
2192
  }
2188
2193
  }
2189
2194
  }
2190
- `,variables:{ids:[a]}});const E=(w=r.data)==null?void 0:w.processExecutions[0];if(!r||!E)throw new Error("Failed to retrieve server response for execution.");if(E.failedAt)throw new Error("Execution has failed to complete. See Automation > FLows in Flight on partner account on SpiffCommerce Hub.");if(E.completedAt){o=!0,l=new XA(E);break}s+=1;const m=t!=null&&t.repeats?t==null?void 0:t.repeats:5;if(s>=m)throw new Error("Maximum wait time exceeded for execution result.");await i(t!=null&&t.sleepTime?Math.max(t.sleepTime,500):2e3)}if(!l)throw new Error("Failed to retrieve server response for execution.");return Promise.resolve(l)}}class XA{constructor(e){this.execution=e}getRaw(){return this.execution}getNodes(){return this.execution.nodes.map(e=>new le(e))}getNodesByType(e){return this.execution.nodes.filter(A=>A.type===e).map(A=>new le(A))}getInputs(){return this.execution.nodes.filter(e=>e.type==="StartTerminal").map(e=>new le(e))}getOutputs(){return this.execution.nodes.filter(e=>e.type==="EndTerminal").map(e=>new le(e))}getCompletedAt(){if(this.execution.completedAt)return new Date(this.execution.completedAt)}getFailedAt(){if(this.execution.failedAt)return new Date(this.execution.failedAt)}}class le{constructor(e){this.node=e}getId(){return this.node.id}getType(){return this.node.type}getArtifacts(){return new Map(Object.entries(JSON.parse(this.node.artifacts).value))}getArtifactByName(e){return this.getArtifacts().get(e)}}class Xn{constructor(e){this.value=e}getRaw(){return this.value}getValueForTransmission(){const e=this.value;return e.startsWith("[")?JSON.stringify(JSON.parse(e)):e}}var qA=(g=>(g.Transaction="Transaction",g.Bundle="Bundle",g.Product="Product",g.Variant="Variant",g.Option="Option",g.LineItem="LineItem",g.Asset="Asset",g))(qA||{});class ze extends Xn{constructor(e,A){if(A!=="Asset"&&!ze.validUUID(e))throw new Error("Invalid ID, must be a valid v4 UUID. https://www.uuidgenerator.net/");super(`{"isSpiffObject": true, "id": "${e}", "type": "${A}"}`)}static validUUID(e){return e.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i)}}const qn=M.gql`
2195
+ `,variables:{ids:[a]}});const E=(w=r.data)==null?void 0:w.processExecutions[0];if(!r||!E)throw new Error("Failed to retrieve server response for execution.");if(E.failedAt)throw new Error("Execution has failed to complete. See Automation > FLows in Flight on partner account on SpiffCommerce Hub.");if(E.completedAt){o=!0,l=new XA(E);break}s+=1;const m=t!=null&&t.repeats?t==null?void 0:t.repeats:5;if(s>=m)throw new Error("Maximum wait time exceeded for execution result.");await i(t!=null&&t.sleepTime?Math.max(t.sleepTime,500):2e3)}if(!l)throw new Error("Failed to retrieve server response for execution.");return Promise.resolve(l)}}class XA{constructor(e){this.execution=e}getRaw(){return this.execution}getNodes(){return this.execution.nodes.map(e=>new le(e))}getNodesByType(e){return this.execution.nodes.filter(A=>A.type===e).map(A=>new le(A))}getInputs(){return this.execution.nodes.filter(e=>e.type==="StartTerminal").map(e=>new le(e))}getOutputs(){return this.execution.nodes.filter(e=>e.type==="EndTerminal").map(e=>new le(e))}getCompletedAt(){if(this.execution.completedAt)return new Date(this.execution.completedAt)}getFailedAt(){if(this.execution.failedAt)return new Date(this.execution.failedAt)}}class le{constructor(e){this.node=e}getId(){return this.node.id}getType(){return this.node.type}getArtifacts(){return new Map(Object.entries(JSON.parse(this.node.artifacts).value))}getArtifactByName(e){return this.getArtifacts().get(e)}}class Wn{constructor(e){this.value=e}getRaw(){return this.value}getValueForTransmission(){const e=this.value;return e.startsWith("[")?JSON.stringify(JSON.parse(e)):e}}var qA=(g=>(g.Transaction="Transaction",g.Bundle="Bundle",g.Product="Product",g.Variant="Variant",g.Option="Option",g.LineItem="LineItem",g.Asset="Asset",g))(qA||{});class ze extends Wn{constructor(e,A){if(A!=="Asset"&&!ze.validUUID(e))throw new Error("Invalid ID, must be a valid v4 UUID. https://www.uuidgenerator.net/");super(`{"isSpiffObject": true, "id": "${e}", "type": "${A}"}`)}static validUUID(e){return e.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i)}}const Xn=M.gql`
2191
2196
  fragment RegionFields on Region {
2192
2197
  width
2193
2198
  top
@@ -2205,7 +2210,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2205
2210
  height
2206
2211
  }
2207
2212
  }
2208
- `,Zn=M.gql`
2213
+ `,qn=M.gql`
2209
2214
  fragment LookAtAnimationFields on LookAtAnimation {
2210
2215
  latDeg
2211
2216
  lonDeg
@@ -2216,7 +2221,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2216
2221
  z
2217
2222
  }
2218
2223
  }
2219
- `,$n=M.gql`
2224
+ `,Zn=M.gql`
2220
2225
  fragment RenderingPipelineConfigurationFields on RenderingPipelineConfiguration {
2221
2226
  antiAliasing {
2222
2227
  samples
@@ -2300,21 +2305,21 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2300
2305
  weight
2301
2306
  }
2302
2307
  }
2303
- `,_n=M.gql`
2308
+ `,$n=M.gql`
2304
2309
  fragment ModelAnimationFields on ModelAnimation {
2305
2310
  from
2306
2311
  to
2307
2312
  loop
2308
2313
  name
2309
2314
  }
2310
- `,ea=g=>M.gql`
2315
+ `,_n=g=>M.gql`
2311
2316
  ${he(g)}
2312
2317
  ${ye}
2313
2318
  ${iA}
2319
+ ${Xn}
2314
2320
  ${qn}
2315
2321
  ${Zn}
2316
2322
  ${$n}
2317
- ${_n}
2318
2323
  query GetWorkflows($ids: [String!]!) {
2319
2324
  workflows(ids: $ids) {
2320
2325
  allowProofDownload
@@ -2691,7 +2696,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2691
2696
  }
2692
2697
  }
2693
2698
  }
2694
- `,Aa=M.gql`
2699
+ `,ea=M.gql`
2695
2700
  query GetTransactionForPartner($id: String!) {
2696
2701
  transactions(ids: [$id]) {
2697
2702
  id
@@ -2708,7 +2713,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2708
2713
  }
2709
2714
  }
2710
2715
  }
2711
- `,ta=M.gql`
2716
+ `,Aa=M.gql`
2712
2717
  ${he(!1)}
2713
2718
  query GetWorkflowForTheme($id: String!) {
2714
2719
  workflow(id: $id) {
@@ -2730,7 +2735,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2730
2735
  }
2731
2736
  }
2732
2737
  }
2733
- `,na=M.gql`
2738
+ `,ta=M.gql`
2734
2739
  query GetCustomer($emailAddress: String!) {
2735
2740
  customer(emailAddress: $emailAddress) {
2736
2741
  id
@@ -2740,7 +2745,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2740
2745
  }
2741
2746
  }
2742
2747
  }
2743
- `,aa=M.gql`
2748
+ `,na=M.gql`
2744
2749
  mutation CustomerCreate($details: CustomerDetailsInput!) {
2745
2750
  customerCreate(details: $details) {
2746
2751
  id
@@ -2750,7 +2755,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2750
2755
  }
2751
2756
  }
2752
2757
  }
2753
- `,ia=M.gql`
2758
+ `,aa=M.gql`
2754
2759
  mutation CustomerAuthenticate($loginToken: String!) {
2755
2760
  customerAuthenticate(loginToken: $loginToken) {
2756
2761
  id
@@ -2777,11 +2782,11 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2777
2782
  }
2778
2783
  }
2779
2784
  }
2780
- `,oa=M.gql`
2785
+ `,ia=M.gql`
2781
2786
  mutation CustomerGenerateVerificationCode($emailAddress: String!) {
2782
2787
  customerGenerateVerificationCode(emailAddress: $emailAddress)
2783
2788
  }
2784
- `,sa=M.gql`
2789
+ `,oa=M.gql`
2785
2790
  mutation CustomerVerifyCode($emailAddress: String!, $verificationCode: String!) {
2786
2791
  customerVerifyCode(emailAddress: $emailAddress, verificationCode: $verificationCode) {
2787
2792
  id
@@ -2809,4 +2814,4 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2809
2814
  }
2810
2815
  }
2811
2816
  }
2812
- `,ee=async g=>{var e;for(const A in g.layouts){const t=g.layouts[A].elements.filter(a=>a.type===c.LayoutElementType.Illustration);for(let a=0;a<t.length;++a){const i=t[a];i.src&&i.svg&&(i.cachedObjectURL=await c.svgObjectURL(i.svg))}const n=g.layouts[A].elements.filter(a=>a.type===c.LayoutElementType.Textbox);for(let a=0;a<n.length;++a){const i=n[a];(e=i.fontData)!=null&&e.assetUrl&&await c.loadFont(i.fontData.assetUrl)}}},ra=async(g,e)=>{var n;const A=await H.getShadowGraphqlClient().query({query:ea(((n=e==null?void 0:e.assets)==null?void 0:n.metadata)||!1),errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:g}}),t=A.data.workflows;if(t===void 0||t.length!==g.length)throw new Error(`Unable to read workflows: ${A.errors??"Length mismatch in response"}`);return t.forEach(a=>{a.steps.forEach(i=>{var o,s,r;delete i.data.__typename,(o=i.option)!=null&&o.id&&((s=i.option.defaultVariant)!=null&&s.asset&&b.cacheAsset(i.option.defaultVariant.asset),i.option.colorProfile&&b.cacheAsset(i.option.colorProfile),(r=i.option.variants)==null||r.forEach(l=>{l.asset&&b.cacheAsset(l.asset),l.displayImage&&b.cacheAsset(l.displayImage),l.thumbnail&&b.cacheAsset(l.thumbnail),l.material&&b.cacheMaterial(l.material)}),q.set({id:i.option.id},Promise.resolve(i.option)))})}),t},ca=async(g,e)=>{const t=(await e).find(n=>n.id===g);if(!t)throw new Error(`Workflow not found: ${g}`);return t},je=async(g,e)=>{const A=g.map(o=>q.get({id:o,options:e})),t=g.filter((o,s)=>A[s]===void 0);if(t.length===0)return Promise.all(A);const n=ra(t,e),a=t.map(o=>q.set({id:o,options:e},ca(o,n))),i=A.filter(o=>o!==void 0);return await Promise.all(i.concat(a))},Be=async(g,e)=>(await je([g],e))[0],ga=g=>g.sort((e,A)=>e.index-A.index).map(e=>({id:c.generate(),panelId:e.name,name:e.name,index:e.index,createdAt:new Date,updatedAt:new Date,transparentBackground:e.transparentBackground,height:e.height,width:e.width,previewRegion:e.previewRegion,useEditableArea:e.useEditableArea,editableArea:e.editableArea})),Ke=(g,e)=>{const A=g.workflowState,t=A?JSON.parse(A):void 0;return t?Object.values(t.layouts).map(n=>n.layout):ga(e.panels)};class ZA{constructor(e){this.updateTransactionState=async A=>{try{return H.getShadowGraphqlClient().mutate({...A,mutation:ft})}catch(t){throw console.error(t),new R("Critical - Unable to synchronize workflow state with server.")}},this.initialized=!1,this.options=e,this.options.applicationKey&&at(this.options.applicationKey)}getAssetManager(){return b}getCurrencyCode(){if(this.currencyCode===void 0)throw new Error("No currency code set.");return this.currencyCode}getFlowService(){if(!this.options.applicationKey)throw new Error("Application key required to use Flow Service.");return new WA}async authenticateBundleFromLocalStorage(e){var n,a;const A=P.getMap("bundleOwnerIds");if(A!=null&&A.has(e))return Promise.resolve({success:!0,stakeholderType:oe.Owner});const t=P.getMap("bundlePartnerIds")||new Map;if(t.has(e)){const i=t.get(e),s=(P.getMap("partnerCustomerIds")||new Map).get(i);if(s&&await this.authenticateCustomerId(s)){const l=(a=(n=this.customer)==null?void 0:n.bundleStakeholders)==null?void 0:a.find(d=>{var B;return((B=d.bundle)==null?void 0:B.id)===e});if(l)return Promise.resolve({success:!0,stakeholderType:l.type})}}return Promise.resolve({success:!1})}async authenticateTransactionFromLocalStorage(e){var l,d,B,w,E,m;const A=H.getShadowGraphqlClient(),t=await A.query({query:Aa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:e}});if(!t.data.transactions||t.data.transactions.length===0)throw new Error(`Transaction not found: ${e}`);const n=t.data.transactions[0];if(!((d=(l=n.product)==null?void 0:l.partner)==null?void 0:d.id))throw new Error(`Unable to read transaction: ${e}`);if(n.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const i=P.getMap("transactionOwnerIds");if(i!=null&&i.has(e))return Promise.resolve({success:!0,stakeholderType:oe.Owner});const o=P.getMap("transactionCustomerIds");if(o!=null&&o.has(e)){const h=o.get(e);if(h&&await this.authenticateCustomerId(h)){const C=((w=(B=this.customer)==null?void 0:B.bundleStakeholders)==null?void 0:w.find(f=>{var I,F;return(F=(I=f.bundle)==null?void 0:I.transactions)==null?void 0:F.some(p=>p.id===e)}))||((m=(E=this.customer)==null?void 0:E.stakeholders)==null?void 0:m.find(f=>{var I;return((I=f.transaction)==null?void 0:I.id)===e}));if(C)return Promise.resolve({success:!0,stakeholderType:C.type})}}const r=(await A.query({query:ta,errorPolicy:"all",variables:{id:n.workflowId}})).data.workflow;if(!r)throw new Error(`Unable to read workflow: ${n.workflowId}`);return Promise.resolve({success:!1,theme:r.overrideTheme,customLogoLink:n.customLogoLink})}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(e){const A=P.getMap("transactionCustomerIds");A!=null&&A.has(e)&&(A.delete(e),P.setMap("transactionCustomerIds",A))}getStakeholderTypeForTransaction(e){var t,n;const A=(n=(t=this.customer)==null?void 0:t.stakeholders)==null?void 0:n.find(a=>{var i;return((i=a.transaction)==null?void 0:i.id)===e});if(A)return A.type}async getOrCreateCustomer(e){var i;this.customer=void 0;const A=H.getShadowGraphqlClient(),n=(await A.query({query:na,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:e}})).data.customer;if(!n.id){const s=(i=(await A.mutate({mutation:aa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:e}}})).data)==null?void 0:i.customerCreate;if(!s)throw new Error("Unable to create customer.");return this.storeCustomer(s),this.customer=s,{customer:s,isAuthenticated:!1}}this.storeCustomer(n);const a=await this.authenticateCustomerId(n.id);return{customer:this.customer||n,isAuthenticated:a}}async authenticateCustomerId(e){var o;const A=H.getShadowGraphqlClient(),t=P.getMap("customerTokens");if(!(t!=null&&t.has(e)))return!1;const n=t.get(e);if(!n)return!1;const i=(o=(await A.mutate({mutation:ia,errorPolicy:"all",fetchPolicy:"no-cache",variables:{loginToken:n}})).data)==null?void 0:o.customerAuthenticate;return i?(this.storeCustomer(i),tA(n),this.customer=i,!0):!1}async generateVerificationCode(e){await H.getShadowGraphqlClient().mutate({mutation:oa,variables:{emailAddress:e}})}async verifyCode(e,A){var a,i;const n=(a=(await H.getShadowGraphqlClient().mutate({mutation:sa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:e,verificationCode:A}})).data)==null?void 0:a.customerVerifyCode;if(n!=null&&n.loginToken){if(!((i=n.partner)!=null&&i.id))throw new Error(`Unable to find customer: ${e}`);const o=P.getMap("customerTokens")||new Map;return o.set(n.id,n.loginToken),P.setMap("customerTokens",o),this.storeCustomer(n),tA(n.loginToken),this.customer={...n,loginToken:void 0},!0}return!1}async getNewBundle(e){var i;const t=(i=(await H.getShadowGraphqlClient().mutate({mutation:Pn,variables:{collectionId:e},fetchPolicy:"no-cache"})).data)==null?void 0:i.bundleCreate;if(!(t!=null&&t.id))throw new Error("Unable to create bundle");const n=P.getMap("bundlePartnerIds")||new Map;n.set(t.id,t.partner.id),P.setMap("bundlePartnerIds",n);const a=P.getMap("bundleOwnerIds")||new Map;return a.set(t.id,t.bundleOwnerId),P.setMap("bundleOwnerIds",a),new VA(this,t,void 0,void 0,t.bundleOwnerId)}async getExistingBundle(e,A,t){var l,d,B,w;const n=P.getMap("bundleOwnerIds"),a=n==null?void 0:n.get(e),i=await H.getShadowGraphqlClient().query({query:Yn,variables:{id:e},fetchPolicy:"no-cache",context:{bundleOwnerId:a}});if(!((l=i.data)!=null&&l.bundles)||((d=i.data)==null?void 0:d.bundles.length)===0||!((B=i.data)!=null&&B.bundles[0]))throw new Error(`Unable to find bundle: ${e}`);const o=(w=i.data)==null?void 0:w.bundles[0],s=P.getMap("bundlePartnerIds")||new Map;s.set(o.id,o.partner.id),P.setMap("bundlePartnerIds",s);const r=new VA(this,o,A,t,a);return await r.getInitializationPromise(),r}async getBundleStakeholders(){var a;if(!this.customer)throw new Error("Customer not authenticated.");const e=await H.getShadowGraphqlClient().query({query:yn,variables:{id:this.customer.id},fetchPolicy:"no-cache"});if(!((a=e.data)!=null&&a.customers)||e.data.customers.length===0)throw new Error("Unable to find customer.");const t=e.data.customers[0].bundleStakeholders||[],n=P.getMap("bundlePartnerIds")||new Map;return t.forEach(i=>{var o,s;(o=i.bundle)!=null&&o.id&&((s=i.bundle.partner)!=null&&s.id)&&n.set(i.bundle.id,i.bundle.partner.id)}),P.setMap("bundlePartnerIds",n),t}async getWorkflowExperience(e,A,t,n){var d,B,w,E,m;if(!n)return await this.getWorkflowExperienceDeprecated(e,A,t);const a=async()=>{var u,C;const h=H.getShadowGraphqlClient();if(n.type==="transaction"){const{transactionId:f,readOnly:I}=n,F=await h.query({query:Ce,variables:{ids:[f]},errorPolicy:"all",fetchPolicy:"no-cache"});if(!((u=F.data)!=null&&u.transactions)||F.data.transactions.length===0)throw new R("Existing transaction not found.");const p=(C=F.data)==null?void 0:C.transactions[0];if(!p.workflowId)throw new R("Existing transaction has no workflow ID.");const D=await Be(p.workflowId);if(!p.product)throw new R("Failed to load transaction, product not available.");return{transaction:p,workflow:D,readOnly:I}}if(n.type==="integration"||n.type==="external"){const f=async()=>{const D=n.type==="integration"?{integrationProductId:n.integrationProductId}:{externalIntegrationId:n.externalIntegrationId,externalProductId:n.externalProductId},Y=await h.mutate({mutation:gA,variables:{...D,workflowId:n.workflowId,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!Y.data||!Y.data.transactionCreate)throw new R("Failed to create transaction!");const y=Y.data.transactionCreate;if(!y.product)throw new R("Failed to create transaction, product not available.");return y},I=Be(n.workflowId,n==null?void 0:n.graphql),[F,p]=await Promise.all([f(),I]);return{transaction:F,workflow:p}}throw new R("No workflow ID provided.")},{transaction:i,workflow:o,readOnly:s}=await a();this.currencyCode=(d=i.product.partner)==null?void 0:d.currencyCode;const r={product:i.product,transaction:i,layouts:[],singleVariantsRenderable:(B=n==null?void 0:n.workflowConfiguration)==null?void 0:B.singleVariantsRenderable,stateMutationFunc:s?async()=>{throw new U("State mutation is forbidden in read only mode!")}:async h=>{const C=(P.getMap("transactionOwnerIds")||new Map).get(i.id)||void 0;return this.updateTransactionState({...h,context:{transactionOwnerId:C}})},readOnly:s,workflow:o};if(n.type==="transaction"&&i.workflowState){const h=JSON.parse(i.workflowState);r.layouts=Object.values(h.layouts).map(u=>u.layout),await c.rehydrateSerializedLayout(h),await ee(h),r.reloadedState=h}else if(!s&&n.workflowState){const h=JSON.parse(n.workflowState);r.layouts=Object.values(h.layouts).map(u=>u.layout),await c.rehydrateSerializedLayout(h),await ee(h),r.reloadedState=h}else r.layouts=Ke(r.transaction,r.workflow);if(r.renderableContextService=new pe(r.layouts),n.previewService?(r.previewService=n.previewService,(w=r.product)!=null&&w.modelUrl&&(r.modelContainer=r.previewService.loadModel({model:r.product.modelUrl,contextService:r.renderableContextService}))):(r.previewService=t&&t(o),(E=r.product)!=null&&E.modelUrl&&(r.modelContainer=(m=r.previewService)==null?void 0:m.loadModel({model:r.product.modelUrl,contextService:r.renderableContextService}))),n.type!=="transaction"){const h=P.getMap("transactionOwnerIds")||new Map;h.set(i.id,i.transactionOwnerId),P.setMap("transactionOwnerIds",h)}else r.isReloadedTransaction=!0;this.initialized=!0,this.experienceOptions=r;const l=new ge(this,r);return await l.getWorkflowManager().getInitializationPromise(),n.type!=="transaction"&&this.customer&&await l.attachCustomerDetails({email:this.customer.emailAddress}),l}async getWorkflowExperiences(e,A){if(e.length===0)throw new R("No options provided!");const t=H.getShadowGraphqlClient(),n=e.map((C,f)=>({option:C,index:f})),a=n.filter(C=>C.option.type==="transaction"),i=n.filter(C=>C.option.type==="integration"||C.option.type==="external"),o=async()=>{var F,p;if(a.length===0)return[];const C=a.map(D=>D.option.transactionId),f=await t.query({query:Ce,variables:{ids:C},errorPolicy:"all",fetchPolicy:"no-cache"}),I=f.data.transactions;if(I.length!==a.length){const D=((p=(F=f.errors)==null?void 0:F[0])==null?void 0:p.message)||"Unknown error";throw new R(`Not all transactions were found: ${D}`)}return I.map((D,Y)=>{var y;return{transaction:D,workflowId:D.workflowId,readOnly:((y=a.find(S=>S.option.transactionId===D.id))==null?void 0:y.option.readOnly)??!1,index:a[Y].index}})},s=async()=>{var I,F,p;if(i.length===0)return[];const C=await t.mutate({mutation:It,variables:{inputs:i.map(D=>({integrationProductId:D.option.type==="integration"?D.option.integrationProductId:void 0,externalIntegrationId:D.option.type==="external"?D.option.externalIntegrationId:void 0,externalProductId:D.option.type==="external"?D.option.externalProductId:void 0,workflowId:D.option.workflowId,claim:!0}))},errorPolicy:"all",fetchPolicy:"no-cache"}),f=(I=C.data)==null?void 0:I.transactionCreateMany;if(!f||f.length===0){const D=((p=(F=C.errors)==null?void 0:F[0])==null?void 0:p.message)||"Unknown error";throw new R(`Failed to create transactions: ${D}`)}return f.map((D,Y)=>({transaction:D,workflowId:D.workflowId,readOnly:!1,index:i[Y].index}))},r=(await Promise.all([o(),s()])).flat(),l=[...new Set(r.map(C=>C.workflowId))],d=await je(l,A),B=new Map(d.map(C=>[C.id,C])),w=P.getMap("transactionOwnerIds")||new Map,E=r.map(async C=>{var G;const{transaction:f,workflowId:I,readOnly:F,index:p}=C,D=B.get(I),Y=e[p];!w.get(f.id)&&f.transactionOwnerId&&w.set(f.id,f.transactionOwnerId);const y=w.get(f.id)||void 0,S={product:f.product,transaction:f,layouts:[],singleVariantsRenderable:(G=Y==null?void 0:Y.workflowConfiguration)==null?void 0:G.singleVariantsRenderable,stateMutationFunc:F?async()=>{throw new U("State mutation is forbidden in read only mode!")}:async N=>this.updateTransactionState({...N,context:{transactionOwnerId:y}}),readOnly:F,workflow:D,isReloadedTransaction:Y.type==="transaction"};if(Y.type==="transaction"&&f.workflowState){const N=JSON.parse(f.workflowState);S.layouts=Object.values(N.layouts).map(v=>v.layout),await c.rehydrateSerializedLayout(N),await ee(N),S.reloadedState=N}else if(!F&&Y.workflowState){const N=JSON.parse(Y.workflowState);S.layouts=Object.values(N.layouts).map(v=>v.layout),await c.rehydrateSerializedLayout(N),await ee(N),S.reloadedState=N}else S.layouts=Ke(S.transaction,S.workflow);return S.renderableContextService=new pe(S.layouts),this.initialized=!0,this.experienceOptions=S,{experienceOptions:S,index:p,options:Y}});P.setMap("transactionOwnerIds",w);const u=(await Promise.all(E)).sort((C,f)=>C.index-f.index).map(async C=>{const{experienceOptions:f,options:I}=C,F=new ge(this,f);return await F.getWorkflowManager().getInitializationPromise(),I.type!=="transaction"&&this.customer&&await F.attachCustomerDetails({email:this.customer.emailAddress}),F});return await Promise.all(u)}async initFromIntegrationProduct(e){var i;if(e==="")throw new R("No integration product ID provided.");const t=await H.getShadowGraphqlClient().mutate({mutation:gA,variables:{integrationProductId:e,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!t.data||!t.data.transactionCreate)throw new R("Failed to create transaction!");const n=t.data.transactionCreate;if(!n.product)throw new R("Failed to create transaction, product not available.");this.currencyCode=(i=n.product.partner)==null?void 0:i.currencyCode;const a=P.getMap("transactionOwnerIds")||new Map;a.set(n.id,n.transactionOwnerId),P.setMap("transactionOwnerIds",a),this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:async o=>this.updateTransactionState({...o,context:{transactionOwnerId:n.transactionOwnerId}})},this.initialized=!0}async initFromTransaction(e,A=!1){var o,s,r,l;if(e==="")throw new R("No transaction ID provided.");const t=H.getShadowGraphqlClient(),n=async()=>{var w,E;const B=(w=(await t.query({query:Ce,variables:{ids:[e]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:w.transactions[0];if(!B)throw new R("Failed to read transaction.");if(!B.product)throw new R("Failed to load transaction, product not available.");this.currencyCode=(E=B.product.partner)==null?void 0:E.currencyCode,this.experienceOptions={product:B.product,transaction:B,layouts:[],stateMutationFunc:async()=>{throw new U("State mutation is forbidden in read only mode!")},readOnly:A},this.initialized=!0};if(A)return await n();const a=P.getMap("transactionOwnerIds")||new Map,i=a.get(e);if(i){const B=(o=(await t.query({query:Ce,variables:{ids:[e]},errorPolicy:"all"})).data)==null?void 0:o.transactions[0];if(!B)throw new R("Failed to read transaction.");if(!B.product)throw new R("Failed to load transaction, product not available.");this.currencyCode=(s=B.product.partner)==null?void 0:s.currencyCode,this.experienceOptions={product:B.product,transaction:B,layouts:[],stateMutationFunc:async w=>this.updateTransactionState({...w,context:{transactionOwnerId:i}}),readOnly:A},this.initialized=!0;return}try{const B=(r=(await t.mutate({mutation:Dt,variables:{id:e},errorPolicy:"all"})).data)==null?void 0:r.transactionClaim;if(!B)throw new R("Failed to read transaction.");if(!B.product)throw new R("Failed to load transaction, product not available.");this.currencyCode=(l=B.product.partner)==null?void 0:l.currencyCode,B.transactionOwnerId&&(a.set(B.id,B.transactionOwnerId),P.setMap("transactionOwnerIds",a)),this.experienceOptions={product:B.product,transaction:B,layouts:[],stateMutationFunc:async w=>this.updateTransactionState({...w,context:{transactionOwnerId:B.transactionOwnerId}}),readOnly:A},this.initialized=!0}catch{throw new R("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(e,A,t){var n,a,i,o;if(!this.initialized||!this.experienceOptions)throw new R("Cannot launch experience: Not initialized.");if(this.experienceOptions.transaction.workflowId){const s=await Be(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=s,this.experienceOptions.transaction.workflowState){const l=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(l.layouts).map(d=>d.layout),await c.rehydrateSerializedLayout(l),await ee(l),this.experienceOptions.reloadedState=l}this.experienceOptions.previewService=t&&t(s),this.experienceOptions.renderableContextService=new pe(this.experienceOptions.layouts),(n=this.experienceOptions.product)!=null&&n.modelUrl&&(this.experienceOptions.modelContainer=(a=this.experienceOptions.previewService)==null?void 0:a.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const r=new ge(this,this.experienceOptions);return await r.getWorkflowManager().getInitializationPromise(),r}if(e){const r=(P.getMap("transactionOwnerIds")||new Map).get(this.experienceOptions.transaction.id),l=H.getShadowGraphqlClient().mutate({mutation:pt,variables:{workflowId:e,id:this.experienceOptions.transaction.id},context:{transactionOwnerId:r}}),d=Be(e);if(await Promise.all([l,d]),this.experienceOptions.workflow=await d,A){const w=JSON.parse(A);this.experienceOptions.layouts=Object.values(w.layouts).map(E=>E.layout),await c.rehydrateSerializedLayout(w),await ee(w),this.experienceOptions.reloadedState=w}else this.experienceOptions.layouts=Ke(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=t&&t(await d),this.experienceOptions.renderableContextService=new pe(this.experienceOptions.layouts),(i=this.experienceOptions.product)!=null&&i.modelUrl&&(this.experienceOptions.modelContainer=(o=this.experienceOptions.previewService)==null?void 0:o.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const B=new ge(this,this.experienceOptions);return await B.getWorkflowManager().getInitializationPromise(),B}throw new R("No workflow ID provided.")}getPreviewService(){var e;return(e=this.experienceOptions)==null?void 0:e.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new R("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new R("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}storeCustomer(e){const A=P.getMap("partnerCustomerIds")||new Map;A.set(e.partner.id,e.id),P.setMap("partnerCustomerIds",A)}}class la{getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}async reset(){}updateStateWithServer(e){}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(e){}addPoller(e){}addConfirmCallback(e){}addEditedCallback(e){}addElementsCallback(e){}addInformationResultCallback(e){}addInitCallback(e){}addMakingAdjustmentsCallback(e){}addMandatoryCallback(e){}addMetadataCallback(e){}addSelectionCallback(e){}addStepSpecificStorageCallback(e,A){}addStorageCallback(e){}getCommandDispatcher(){return e=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getProfanities(){return[]}getRegionElements(e){return[]}getSerializedStep(e,A){}getStepSpecificServices(e){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(e){}markUpdateCompleted(e){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}setCurrentAdjustingStepId(e){}setEditedStatus(e,A){}setInformationResults(e){}setMandatoryFulfilled(e,A){}async setSelectionsAndElements(e,A,t){}toggleDesignConfirmed(){}updateMetadata(e,A){}async updateStorage(e,A){}injectIntoPreviewService(e){return Promise.resolve()}ejectFromPreviewService(){}}var $A=(g=>(g.SelectFrame="SelectFrame",g.SelectImage="SelectImage",g.Position="Position",g))($A||{});class _A extends O{constructor(e,A){var t;super(e,A),this.frameService=(t=this.manager.getStepSpecificServices(this.getId()))==null?void 0:t.frameService}selectVariant(e){const A=this.manager.getRegionElements(this.step.stepName);return me.selectVariant(this.step,e.getResource(),A,this.manager,t=>this.setUpdateState(t))}onFrameDataChanged(e){this.frameService&&this.frameService.onFrameDataChanged(A=>{A&&e(A)})}selectImage(e){return me.selectImage(this.step,e,this.manager)}getImageData(){if(this.frameService)return this.frameService.getImageData()}getCurrentFrameStep(e,A,t,n){return n&&n.length>1&&e===void 0?"SelectFrame":A||t||this.getImageData()?"Position":"SelectImage"}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}}Object.defineProperty(Q,"AssetType",{enumerable:!0,get:()=>c.AssetType}),Object.defineProperty(Q,"BringForwardCommand",{enumerable:!0,get:()=>c.BringForwardCommand}),Object.defineProperty(Q,"BringToBackCommand",{enumerable:!0,get:()=>c.BringToBackCommand}),Object.defineProperty(Q,"BringToFrontCommand",{enumerable:!0,get:()=>c.BringToFrontCommand}),Object.defineProperty(Q,"CanvasCommand",{enumerable:!0,get:()=>c.CanvasCommand}),Object.defineProperty(Q,"CommandContext",{enumerable:!0,get:()=>c.CommandContext}),Object.defineProperty(Q,"CreateElementCommand",{enumerable:!0,get:()=>c.CreateElementCommand}),Object.defineProperty(Q,"CreateLayoutCommand",{enumerable:!0,get:()=>c.CreateLayoutCommand}),Object.defineProperty(Q,"DeleteElementCommand",{enumerable:!0,get:()=>c.DeleteElementCommand}),Object.defineProperty(Q,"FontAlignmentCommand",{enumerable:!0,get:()=>c.FontAlignmentCommand}),Object.defineProperty(Q,"FontColorCommand",{enumerable:!0,get:()=>c.FontColorCommand}),Object.defineProperty(Q,"FontSizeCommand",{enumerable:!0,get:()=>c.FontSizeCommand}),Object.defineProperty(Q,"FontSourceCommand",{enumerable:!0,get:()=>c.FontSourceCommand}),Object.defineProperty(Q,"GroupCommand",{enumerable:!0,get:()=>c.GroupCommand}),Object.defineProperty(Q,"LayoutElementFactory",{enumerable:!0,get:()=>c.LayoutElementFactory}),Object.defineProperty(Q,"LayoutElementType",{enumerable:!0,get:()=>c.LayoutElementType}),Object.defineProperty(Q,"MoveCommand",{enumerable:!0,get:()=>c.MoveCommand}),Object.defineProperty(Q,"ResizeCommand",{enumerable:!0,get:()=>c.ResizeCommand}),Object.defineProperty(Q,"RotateCommand",{enumerable:!0,get:()=>c.RotateCommand}),Object.defineProperty(Q,"SendBackwardsCommand",{enumerable:!0,get:()=>c.SendBackwardsCommand}),Object.defineProperty(Q,"StepAspectType",{enumerable:!0,get:()=>c.StepAspectType}),Object.defineProperty(Q,"StepType",{enumerable:!0,get:()=>c.StepType}),Object.defineProperty(Q,"TextChangeCommand",{enumerable:!0,get:()=>c.TextChangeCommand}),Object.defineProperty(Q,"UnitOfMeasurement",{enumerable:!0,get:()=>c.UnitOfMeasurement}),Object.defineProperty(Q,"dataUrlFromExternalUrl",{enumerable:!0,get:()=>c.dataUrlFromExternalUrl}),Object.defineProperty(Q,"determineCorrectFontSizeAndLines",{enumerable:!0,get:()=>c.determineCorrectFontSizeAndLines}),Object.defineProperty(Q,"findElement",{enumerable:!0,get:()=>c.findElement}),Object.defineProperty(Q,"frameDataCache",{enumerable:!0,get:()=>c.frameDataCache}),Object.defineProperty(Q,"generate",{enumerable:!0,get:()=>c.generate}),Object.defineProperty(Q,"generateSVGWithUnknownColors",{enumerable:!0,get:()=>c.generateSVGWithUnknownColors}),Object.defineProperty(Q,"getAttributesFromArrayBuffer",{enumerable:!0,get:()=>c.getAttributesFromArrayBuffer}),Object.defineProperty(Q,"getAxisAlignedBoundingBox",{enumerable:!0,get:()=>c.getAxisAlignedBoundingBox}),Object.defineProperty(Q,"getFrameData",{enumerable:!0,get:()=>c.getFrameData}),Object.defineProperty(Q,"getSvgElement",{enumerable:!0,get:()=>c.getSvgElement}),Object.defineProperty(Q,"loadFont",{enumerable:!0,get:()=>c.loadFont}),Object.defineProperty(Q,"patternImageDataCache",{enumerable:!0,get:()=>c.patternImageDataCache}),Object.defineProperty(Q,"registerFetchImplementation",{enumerable:!0,get:()=>c.registerFetchImplementation}),Object.defineProperty(Q,"registerWindowImplementation",{enumerable:!0,get:()=>c.registerWindowImplementation}),Object.defineProperty(Q,"rehydrateSerializedLayout",{enumerable:!0,get:()=>c.rehydrateSerializedLayout}),Object.defineProperty(Q,"setCanvasModule",{enumerable:!0,get:()=>c.setCanvasModule}),Q.AssetNotFoundError=j,Q.CollectionProduct=zA,Q.ConversionDataType=cA,Q.ConversionLocation=rA,Q.FlowExecutionNodeResult=le,Q.FlowExecutionResult=XA,Q.FlowService=WA,Q.FrameService=dA,Q.FrameStep=$A,Q.FrameStepHandle=_A,Q.GlobalPropertyHandle=Me,Q.IllustrationStepHandle=SA,Q.InformationMessageType=ce,Q.InformationStepHandle=UA,Q.IntegrationType=oA,Q.LayoutNotFoundError=k,Q.MaterialStepHandle=yA,Q.MisconfigurationError=ne,Q.MockWorkflowManager=la,Q.ModelStepHandle=PA,Q.ObjectInput=ze,Q.ObjectInputType=qA,Q.OptionNotFoundError=te,Q.ParseError=X,Q.PictureStepHandle=NA,Q.ProductCameraRig=sA,Q.ProductCollection=OA,Q.ProductWorkflow=Oe,Q.PromiseCache=q,Q.PromiseQueue=He,Q.QuestionStepHandle=HA,Q.QueueablePromise=Ne,Q.ResourceNotFoundError=W,Q.ShapeStepHandle=xA,Q.SpiffCommerceClient=ZA,Q.StakeholderType=oe,Q.StepHandle=O,Q.TextStepHandle=RA,Q.Transform=KA,Q.TransformCollection=jA,Q.UnhandledBehaviorError=U,Q.Variant=z,Q.WorkflowExperienceImpl=ge,Q.assetService=b,Q.createDesign=bA,Q.designService=fe,Q.digitalContentStepService=CA,Q.frameStepService=me,Q.generateCommands=JA,Q.generateStateFromDesignInputSteps=pn,Q.getBoundedOffsets=BA,Q.getWorkflow=Be,Q.getWorkflows=je,Q.graphQlManager=H,Q.illustrationStepService=re,Q.materialStepService=xe,Q.modelStepService=Re,Q.moduleStepService=QA,Q.optionService=J,Q.persistenceService=P,Q.pictureStepService=Ue,Q.questionStepService=Ge,Q.shapeStepService=_,Q.shortenUrl=EA,Q.spiffCoreConfiguration=ae,Q.stepAspectValuesToDesignInputSteps=fn,Q.textStepService=L,Q.toast=mA,Object.defineProperty(Q,Symbol.toStringTag,{value:"Module"})});
2817
+ `,ee=async g=>{var e;for(const A in g.layouts){const t=g.layouts[A].elements.filter(a=>a.type===c.LayoutElementType.Illustration);for(let a=0;a<t.length;++a){const i=t[a];i.src&&i.svg&&(i.cachedObjectURL=await c.svgObjectURL(i.svg))}const n=g.layouts[A].elements.filter(a=>a.type===c.LayoutElementType.Textbox);for(let a=0;a<n.length;++a){const i=n[a];(e=i.fontData)!=null&&e.assetUrl&&await c.loadFont(i.fontData.assetUrl)}}},sa=async(g,e)=>{var n;const A=await H.getShadowGraphqlClient().query({query:_n(((n=e==null?void 0:e.assets)==null?void 0:n.metadata)||!1),errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:g}}),t=A.data.workflows;if(t===void 0||t.length!==g.length)throw new Error(`Unable to read workflows: ${A.errors??"Length mismatch in response"}`);return t.forEach(a=>{a.steps.forEach(i=>{var o,s,r;delete i.data.__typename,(o=i.option)!=null&&o.id&&((s=i.option.defaultVariant)!=null&&s.asset&&b.cacheAsset(i.option.defaultVariant.asset),i.option.colorProfile&&b.cacheAsset(i.option.colorProfile),(r=i.option.variants)==null||r.forEach(l=>{l.asset&&b.cacheAsset(l.asset),l.displayImage&&b.cacheAsset(l.displayImage),l.thumbnail&&b.cacheAsset(l.thumbnail),l.material&&b.cacheMaterial(l.material)}),q.set({id:i.option.id},Promise.resolve(i.option)))})}),t},ra=async(g,e)=>{const t=(await e).find(n=>n.id===g);if(!t)throw new Error(`Workflow not found: ${g}`);return t},je=async(g,e)=>{const A=g.map(o=>q.get({id:o,options:e})),t=g.filter((o,s)=>A[s]===void 0);if(t.length===0)return Promise.all(A);const n=sa(t,e),a=t.map(o=>q.set({id:o,options:e},ra(o,n))),i=A.filter(o=>o!==void 0);return await Promise.all(i.concat(a))},Be=async(g,e)=>(await je([g],e))[0],ca=g=>g.sort((e,A)=>e.index-A.index).map(e=>({id:c.generate(),panelId:e.name,name:e.name,index:e.index,createdAt:new Date,updatedAt:new Date,transparentBackground:e.transparentBackground,height:e.height,width:e.width,previewRegion:e.previewRegion,useEditableArea:e.useEditableArea,editableArea:e.editableArea})),Ke=(g,e)=>{const A=g.workflowState,t=A?JSON.parse(A):void 0;return t?Object.values(t.layouts).map(n=>n.layout):ca(e.panels)};class ZA{constructor(e){this.updateTransactionState=async A=>{try{return H.getShadowGraphqlClient().mutate({...A,mutation:ft})}catch(t){throw console.error(t),new R("Critical - Unable to synchronize workflow state with server.")}},this.initialized=!1,this.options=e,this.options.applicationKey&&at(this.options.applicationKey)}getAssetManager(){return b}getCurrencyCode(){if(this.currencyCode===void 0)throw new Error("No currency code set.");return this.currencyCode}getFlowService(){if(!this.options.applicationKey)throw new Error("Application key required to use Flow Service.");return new WA}async authenticateBundleFromLocalStorage(e){var n,a;const A=P.getMap("bundleOwnerIds");if(A!=null&&A.has(e))return Promise.resolve({success:!0,stakeholderType:oe.Owner});const t=P.getMap("bundlePartnerIds")||new Map;if(t.has(e)){const i=t.get(e),s=(P.getMap("partnerCustomerIds")||new Map).get(i);if(s&&await this.authenticateCustomerId(s)){const l=(a=(n=this.customer)==null?void 0:n.bundleStakeholders)==null?void 0:a.find(d=>{var B;return((B=d.bundle)==null?void 0:B.id)===e});if(l)return Promise.resolve({success:!0,stakeholderType:l.type})}}return Promise.resolve({success:!1})}async authenticateTransactionFromLocalStorage(e){var l,d,B,w,E,m;const A=H.getShadowGraphqlClient(),t=await A.query({query:ea,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:e}});if(!t.data.transactions||t.data.transactions.length===0)throw new Error(`Transaction not found: ${e}`);const n=t.data.transactions[0];if(!((d=(l=n.product)==null?void 0:l.partner)==null?void 0:d.id))throw new Error(`Unable to read transaction: ${e}`);if(n.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const i=P.getMap("transactionOwnerIds");if(i!=null&&i.has(e))return Promise.resolve({success:!0,stakeholderType:oe.Owner});const o=P.getMap("transactionCustomerIds");if(o!=null&&o.has(e)){const h=o.get(e);if(h&&await this.authenticateCustomerId(h)){const C=((w=(B=this.customer)==null?void 0:B.bundleStakeholders)==null?void 0:w.find(f=>{var I,F;return(F=(I=f.bundle)==null?void 0:I.transactions)==null?void 0:F.some(p=>p.id===e)}))||((m=(E=this.customer)==null?void 0:E.stakeholders)==null?void 0:m.find(f=>{var I;return((I=f.transaction)==null?void 0:I.id)===e}));if(C)return Promise.resolve({success:!0,stakeholderType:C.type})}}const r=(await A.query({query:Aa,errorPolicy:"all",variables:{id:n.workflowId}})).data.workflow;if(!r)throw new Error(`Unable to read workflow: ${n.workflowId}`);return Promise.resolve({success:!1,theme:r.overrideTheme,customLogoLink:n.customLogoLink})}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(e){const A=P.getMap("transactionCustomerIds");A!=null&&A.has(e)&&(A.delete(e),P.setMap("transactionCustomerIds",A))}getStakeholderTypeForTransaction(e){var t,n;const A=(n=(t=this.customer)==null?void 0:t.stakeholders)==null?void 0:n.find(a=>{var i;return((i=a.transaction)==null?void 0:i.id)===e});if(A)return A.type}async getOrCreateCustomer(e){var i;this.customer=void 0;const A=H.getShadowGraphqlClient(),n=(await A.query({query:ta,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:e}})).data.customer;if(!n.id){const s=(i=(await A.mutate({mutation:na,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:e}}})).data)==null?void 0:i.customerCreate;if(!s)throw new Error("Unable to create customer.");return this.storeCustomer(s),this.customer=s,{customer:s,isAuthenticated:!1}}this.storeCustomer(n);const a=await this.authenticateCustomerId(n.id);return{customer:this.customer||n,isAuthenticated:a}}async authenticateCustomerId(e){var o;const A=H.getShadowGraphqlClient(),t=P.getMap("customerTokens");if(!(t!=null&&t.has(e)))return!1;const n=t.get(e);if(!n)return!1;const i=(o=(await A.mutate({mutation:aa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{loginToken:n}})).data)==null?void 0:o.customerAuthenticate;return i?(this.storeCustomer(i),tA(n),this.customer=i,!0):!1}async generateVerificationCode(e){await H.getShadowGraphqlClient().mutate({mutation:ia,variables:{emailAddress:e}})}async verifyCode(e,A){var a,i;const n=(a=(await H.getShadowGraphqlClient().mutate({mutation:oa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:e,verificationCode:A}})).data)==null?void 0:a.customerVerifyCode;if(n!=null&&n.loginToken){if(!((i=n.partner)!=null&&i.id))throw new Error(`Unable to find customer: ${e}`);const o=P.getMap("customerTokens")||new Map;return o.set(n.id,n.loginToken),P.setMap("customerTokens",o),this.storeCustomer(n),tA(n.loginToken),this.customer={...n,loginToken:void 0},!0}return!1}async getNewBundle(e){var i;const t=(i=(await H.getShadowGraphqlClient().mutate({mutation:yn,variables:{collectionId:e},fetchPolicy:"no-cache"})).data)==null?void 0:i.bundleCreate;if(!(t!=null&&t.id))throw new Error("Unable to create bundle");const n=P.getMap("bundlePartnerIds")||new Map;n.set(t.id,t.partner.id),P.setMap("bundlePartnerIds",n);const a=P.getMap("bundleOwnerIds")||new Map;return a.set(t.id,t.bundleOwnerId),P.setMap("bundleOwnerIds",a),new VA(this,t,void 0,void 0,t.bundleOwnerId)}async getExistingBundle(e,A,t){var l,d,B,w;const n=P.getMap("bundleOwnerIds"),a=n==null?void 0:n.get(e),i=await H.getShadowGraphqlClient().query({query:Mn,variables:{id:e},fetchPolicy:"no-cache",context:{bundleOwnerId:a}});if(!((l=i.data)!=null&&l.bundles)||((d=i.data)==null?void 0:d.bundles.length)===0||!((B=i.data)!=null&&B.bundles[0]))throw new Error(`Unable to find bundle: ${e}`);const o=(w=i.data)==null?void 0:w.bundles[0],s=P.getMap("bundlePartnerIds")||new Map;s.set(o.id,o.partner.id),P.setMap("bundlePartnerIds",s);const r=new VA(this,o,A,t,a);return await r.getInitializationPromise(),r}async getBundleStakeholders(){var a;if(!this.customer)throw new Error("Customer not authenticated.");const e=await H.getShadowGraphqlClient().query({query:Sn,variables:{id:this.customer.id},fetchPolicy:"no-cache"});if(!((a=e.data)!=null&&a.customers)||e.data.customers.length===0)throw new Error("Unable to find customer.");const t=e.data.customers[0].bundleStakeholders||[],n=P.getMap("bundlePartnerIds")||new Map;return t.forEach(i=>{var o,s;(o=i.bundle)!=null&&o.id&&((s=i.bundle.partner)!=null&&s.id)&&n.set(i.bundle.id,i.bundle.partner.id)}),P.setMap("bundlePartnerIds",n),t}async getWorkflowExperience(e,A,t,n){var d,B,w,E,m;if(!n)return await this.getWorkflowExperienceDeprecated(e,A,t);const a=async()=>{var u,C;const h=H.getShadowGraphqlClient();if(n.type==="transaction"){const{transactionId:f,readOnly:I}=n,F=await h.query({query:Ce,variables:{ids:[f]},errorPolicy:"all",fetchPolicy:"no-cache"});if(!((u=F.data)!=null&&u.transactions)||F.data.transactions.length===0)throw new R("Existing transaction not found.");const p=(C=F.data)==null?void 0:C.transactions[0];if(!p.workflowId)throw new R("Existing transaction has no workflow ID.");const D=await Be(p.workflowId);if(!p.product)throw new R("Failed to load transaction, product not available.");return{transaction:p,workflow:D,readOnly:I}}if(n.type==="integration"||n.type==="external"){const f=async()=>{const D=n.type==="integration"?{integrationProductId:n.integrationProductId}:{externalIntegrationId:n.externalIntegrationId,externalProductId:n.externalProductId},Y=await h.mutate({mutation:gA,variables:{...D,workflowId:n.workflowId,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!Y.data||!Y.data.transactionCreate)throw new R("Failed to create transaction!");const y=Y.data.transactionCreate;if(!y.product)throw new R("Failed to create transaction, product not available.");return y},I=Be(n.workflowId,n==null?void 0:n.graphql),[F,p]=await Promise.all([f(),I]);return{transaction:F,workflow:p}}throw new R("No workflow ID provided.")},{transaction:i,workflow:o,readOnly:s}=await a();this.currencyCode=(d=i.product.partner)==null?void 0:d.currencyCode;const r={product:i.product,transaction:i,layouts:[],singleVariantsRenderable:(B=n==null?void 0:n.workflowConfiguration)==null?void 0:B.singleVariantsRenderable,stateMutationFunc:s?async()=>{throw new U("State mutation is forbidden in read only mode!")}:async h=>{const C=(P.getMap("transactionOwnerIds")||new Map).get(i.id)||void 0;return this.updateTransactionState({...h,context:{transactionOwnerId:C}})},readOnly:s,workflow:o};if(n.type==="transaction"&&i.workflowState){const h=JSON.parse(i.workflowState);r.layouts=Object.values(h.layouts).map(u=>u.layout),await c.rehydrateSerializedLayout(h),await ee(h),r.reloadedState=h}else if(!s&&n.workflowState){const h=JSON.parse(n.workflowState);r.layouts=Object.values(h.layouts).map(u=>u.layout),await c.rehydrateSerializedLayout(h),await ee(h),r.reloadedState=h}else r.layouts=Ke(r.transaction,r.workflow);if(r.renderableContextService=new pe(r.layouts),n.previewService?(r.previewService=n.previewService,(w=r.product)!=null&&w.modelUrl&&(r.modelContainer=r.previewService.loadModel({model:r.product.modelUrl,contextService:r.renderableContextService}))):(r.previewService=t&&t(o),(E=r.product)!=null&&E.modelUrl&&(r.modelContainer=(m=r.previewService)==null?void 0:m.loadModel({model:r.product.modelUrl,contextService:r.renderableContextService}))),n.type!=="transaction"){const h=P.getMap("transactionOwnerIds")||new Map;h.set(i.id,i.transactionOwnerId),P.setMap("transactionOwnerIds",h)}else r.isReloadedTransaction=!0;this.initialized=!0,this.experienceOptions=r;const l=new ge(this,r);return await l.getWorkflowManager().getInitializationPromise(),n.type!=="transaction"&&this.customer&&await l.attachCustomerDetails({email:this.customer.emailAddress}),l}async getWorkflowExperiences(e,A){if(e.length===0)throw new R("No options provided!");const t=H.getShadowGraphqlClient(),n=e.map((C,f)=>({option:C,index:f})),a=n.filter(C=>C.option.type==="transaction"),i=n.filter(C=>C.option.type==="integration"||C.option.type==="external"),o=async()=>{var F,p;if(a.length===0)return[];const C=a.map(D=>D.option.transactionId),f=await t.query({query:Ce,variables:{ids:C},errorPolicy:"all",fetchPolicy:"no-cache"}),I=f.data.transactions;if(I.length!==a.length){const D=((p=(F=f.errors)==null?void 0:F[0])==null?void 0:p.message)||"Unknown error";throw new R(`Not all transactions were found: ${D}`)}return I.map((D,Y)=>{var y;return{transaction:D,workflowId:D.workflowId,readOnly:((y=a.find(S=>S.option.transactionId===D.id))==null?void 0:y.option.readOnly)??!1,index:a[Y].index}})},s=async()=>{var I,F,p;if(i.length===0)return[];const C=await t.mutate({mutation:It,variables:{inputs:i.map(D=>({integrationProductId:D.option.type==="integration"?D.option.integrationProductId:void 0,externalIntegrationId:D.option.type==="external"?D.option.externalIntegrationId:void 0,externalProductId:D.option.type==="external"?D.option.externalProductId:void 0,workflowId:D.option.workflowId,claim:!0}))},errorPolicy:"all",fetchPolicy:"no-cache"}),f=(I=C.data)==null?void 0:I.transactionCreateMany;if(!f||f.length===0){const D=((p=(F=C.errors)==null?void 0:F[0])==null?void 0:p.message)||"Unknown error";throw new R(`Failed to create transactions: ${D}`)}return f.map((D,Y)=>({transaction:D,workflowId:D.workflowId,readOnly:!1,index:i[Y].index}))},r=(await Promise.all([o(),s()])).flat(),l=[...new Set(r.map(C=>C.workflowId))],d=await je(l,A),B=new Map(d.map(C=>[C.id,C])),w=P.getMap("transactionOwnerIds")||new Map,E=r.map(async C=>{var G;const{transaction:f,workflowId:I,readOnly:F,index:p}=C,D=B.get(I),Y=e[p];!w.get(f.id)&&f.transactionOwnerId&&w.set(f.id,f.transactionOwnerId);const y=w.get(f.id)||void 0,S={product:f.product,transaction:f,layouts:[],singleVariantsRenderable:(G=Y==null?void 0:Y.workflowConfiguration)==null?void 0:G.singleVariantsRenderable,stateMutationFunc:F?async()=>{throw new U("State mutation is forbidden in read only mode!")}:async N=>this.updateTransactionState({...N,context:{transactionOwnerId:y}}),readOnly:F,workflow:D,isReloadedTransaction:Y.type==="transaction"};if(Y.type==="transaction"&&f.workflowState){const N=JSON.parse(f.workflowState);S.layouts=Object.values(N.layouts).map(v=>v.layout),await c.rehydrateSerializedLayout(N),await ee(N),S.reloadedState=N}else if(!F&&Y.workflowState){const N=JSON.parse(Y.workflowState);S.layouts=Object.values(N.layouts).map(v=>v.layout),await c.rehydrateSerializedLayout(N),await ee(N),S.reloadedState=N}else S.layouts=Ke(S.transaction,S.workflow);return S.renderableContextService=new pe(S.layouts),this.initialized=!0,this.experienceOptions=S,{experienceOptions:S,index:p,options:Y}});P.setMap("transactionOwnerIds",w);const u=(await Promise.all(E)).sort((C,f)=>C.index-f.index).map(async C=>{const{experienceOptions:f,options:I}=C,F=new ge(this,f);return await F.getWorkflowManager().getInitializationPromise(),I.type!=="transaction"&&this.customer&&await F.attachCustomerDetails({email:this.customer.emailAddress}),F});return await Promise.all(u)}async initFromIntegrationProduct(e){var i;if(e==="")throw new R("No integration product ID provided.");const t=await H.getShadowGraphqlClient().mutate({mutation:gA,variables:{integrationProductId:e,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!t.data||!t.data.transactionCreate)throw new R("Failed to create transaction!");const n=t.data.transactionCreate;if(!n.product)throw new R("Failed to create transaction, product not available.");this.currencyCode=(i=n.product.partner)==null?void 0:i.currencyCode;const a=P.getMap("transactionOwnerIds")||new Map;a.set(n.id,n.transactionOwnerId),P.setMap("transactionOwnerIds",a),this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:async o=>this.updateTransactionState({...o,context:{transactionOwnerId:n.transactionOwnerId}})},this.initialized=!0}async initFromTransaction(e,A=!1){var o,s,r,l;if(e==="")throw new R("No transaction ID provided.");const t=H.getShadowGraphqlClient(),n=async()=>{var w,E;const B=(w=(await t.query({query:Ce,variables:{ids:[e]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:w.transactions[0];if(!B)throw new R("Failed to read transaction.");if(!B.product)throw new R("Failed to load transaction, product not available.");this.currencyCode=(E=B.product.partner)==null?void 0:E.currencyCode,this.experienceOptions={product:B.product,transaction:B,layouts:[],stateMutationFunc:async()=>{throw new U("State mutation is forbidden in read only mode!")},readOnly:A},this.initialized=!0};if(A)return await n();const a=P.getMap("transactionOwnerIds")||new Map,i=a.get(e);if(i){const B=(o=(await t.query({query:Ce,variables:{ids:[e]},errorPolicy:"all"})).data)==null?void 0:o.transactions[0];if(!B)throw new R("Failed to read transaction.");if(!B.product)throw new R("Failed to load transaction, product not available.");this.currencyCode=(s=B.product.partner)==null?void 0:s.currencyCode,this.experienceOptions={product:B.product,transaction:B,layouts:[],stateMutationFunc:async w=>this.updateTransactionState({...w,context:{transactionOwnerId:i}}),readOnly:A},this.initialized=!0;return}try{const B=(r=(await t.mutate({mutation:Dt,variables:{id:e},errorPolicy:"all"})).data)==null?void 0:r.transactionClaim;if(!B)throw new R("Failed to read transaction.");if(!B.product)throw new R("Failed to load transaction, product not available.");this.currencyCode=(l=B.product.partner)==null?void 0:l.currencyCode,B.transactionOwnerId&&(a.set(B.id,B.transactionOwnerId),P.setMap("transactionOwnerIds",a)),this.experienceOptions={product:B.product,transaction:B,layouts:[],stateMutationFunc:async w=>this.updateTransactionState({...w,context:{transactionOwnerId:B.transactionOwnerId}}),readOnly:A},this.initialized=!0}catch{throw new R("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(e,A,t){var n,a,i,o;if(!this.initialized||!this.experienceOptions)throw new R("Cannot launch experience: Not initialized.");if(this.experienceOptions.transaction.workflowId){const s=await Be(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=s,this.experienceOptions.transaction.workflowState){const l=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(l.layouts).map(d=>d.layout),await c.rehydrateSerializedLayout(l),await ee(l),this.experienceOptions.reloadedState=l}this.experienceOptions.previewService=t&&t(s),this.experienceOptions.renderableContextService=new pe(this.experienceOptions.layouts),(n=this.experienceOptions.product)!=null&&n.modelUrl&&(this.experienceOptions.modelContainer=(a=this.experienceOptions.previewService)==null?void 0:a.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const r=new ge(this,this.experienceOptions);return await r.getWorkflowManager().getInitializationPromise(),r}if(e){const r=(P.getMap("transactionOwnerIds")||new Map).get(this.experienceOptions.transaction.id),l=H.getShadowGraphqlClient().mutate({mutation:pt,variables:{workflowId:e,id:this.experienceOptions.transaction.id},context:{transactionOwnerId:r}}),d=Be(e);if(await Promise.all([l,d]),this.experienceOptions.workflow=await d,A){const w=JSON.parse(A);this.experienceOptions.layouts=Object.values(w.layouts).map(E=>E.layout),await c.rehydrateSerializedLayout(w),await ee(w),this.experienceOptions.reloadedState=w}else this.experienceOptions.layouts=Ke(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=t&&t(await d),this.experienceOptions.renderableContextService=new pe(this.experienceOptions.layouts),(i=this.experienceOptions.product)!=null&&i.modelUrl&&(this.experienceOptions.modelContainer=(o=this.experienceOptions.previewService)==null?void 0:o.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const B=new ge(this,this.experienceOptions);return await B.getWorkflowManager().getInitializationPromise(),B}throw new R("No workflow ID provided.")}getPreviewService(){var e;return(e=this.experienceOptions)==null?void 0:e.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new R("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new R("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}storeCustomer(e){const A=P.getMap("partnerCustomerIds")||new Map;A.set(e.partner.id,e.id),P.setMap("partnerCustomerIds",A)}}class ga{getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}async reset(){}updateStateWithServer(e){}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(e){}addPoller(e){}addConfirmCallback(e){}addEditedCallback(e){}addElementsCallback(e){}addInformationResultCallback(e){}addInitCallback(e){}addMakingAdjustmentsCallback(e){}addMandatoryCallback(e){}addMetadataCallback(e){}addSelectionCallback(e){}addStepSpecificStorageCallback(e,A){}addStorageCallback(e){}getCommandDispatcher(){return e=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getProfanities(){return[]}getRegionElements(e){return[]}getSerializedStep(e,A){}getStepSpecificServices(e){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(e){}markUpdateCompleted(e){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}setCurrentAdjustingStepId(e){}setEditedStatus(e,A){}setInformationResults(e){}setMandatoryFulfilled(e,A){}async setSelectionsAndElements(e,A,t){}toggleDesignConfirmed(){}updateMetadata(e,A){}async updateStorage(e,A){}injectIntoPreviewService(e){return Promise.resolve()}ejectFromPreviewService(){}}var $A=(g=>(g.SelectFrame="SelectFrame",g.SelectImage="SelectImage",g.Position="Position",g))($A||{});class _A extends O{constructor(e,A){var t;super(e,A),this.frameService=(t=this.manager.getStepSpecificServices(this.getId()))==null?void 0:t.frameService}selectVariant(e){const A=this.manager.getRegionElements(this.step.stepName);return me.selectVariant(this.step,e.getResource(),A,this.manager,t=>this.setUpdateState(t))}onFrameDataChanged(e){this.frameService&&this.frameService.onFrameDataChanged(A=>{A&&e(A)})}selectImage(e){return me.selectImage(this.step,e,this.manager)}getImageData(){if(this.frameService)return this.frameService.getImageData()}getCurrentFrameStep(e,A,t,n){return n&&n.length>1&&e===void 0?"SelectFrame":A||t||this.getImageData()?"Position":"SelectImage"}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}}Object.defineProperty(Q,"AssetType",{enumerable:!0,get:()=>c.AssetType}),Object.defineProperty(Q,"BringForwardCommand",{enumerable:!0,get:()=>c.BringForwardCommand}),Object.defineProperty(Q,"BringToBackCommand",{enumerable:!0,get:()=>c.BringToBackCommand}),Object.defineProperty(Q,"BringToFrontCommand",{enumerable:!0,get:()=>c.BringToFrontCommand}),Object.defineProperty(Q,"CanvasCommand",{enumerable:!0,get:()=>c.CanvasCommand}),Object.defineProperty(Q,"CommandContext",{enumerable:!0,get:()=>c.CommandContext}),Object.defineProperty(Q,"CreateElementCommand",{enumerable:!0,get:()=>c.CreateElementCommand}),Object.defineProperty(Q,"CreateLayoutCommand",{enumerable:!0,get:()=>c.CreateLayoutCommand}),Object.defineProperty(Q,"DeleteElementCommand",{enumerable:!0,get:()=>c.DeleteElementCommand}),Object.defineProperty(Q,"FontAlignmentCommand",{enumerable:!0,get:()=>c.FontAlignmentCommand}),Object.defineProperty(Q,"FontColorCommand",{enumerable:!0,get:()=>c.FontColorCommand}),Object.defineProperty(Q,"FontSizeCommand",{enumerable:!0,get:()=>c.FontSizeCommand}),Object.defineProperty(Q,"FontSourceCommand",{enumerable:!0,get:()=>c.FontSourceCommand}),Object.defineProperty(Q,"GroupCommand",{enumerable:!0,get:()=>c.GroupCommand}),Object.defineProperty(Q,"LayoutElementFactory",{enumerable:!0,get:()=>c.LayoutElementFactory}),Object.defineProperty(Q,"LayoutElementType",{enumerable:!0,get:()=>c.LayoutElementType}),Object.defineProperty(Q,"MoveCommand",{enumerable:!0,get:()=>c.MoveCommand}),Object.defineProperty(Q,"ResizeCommand",{enumerable:!0,get:()=>c.ResizeCommand}),Object.defineProperty(Q,"RotateCommand",{enumerable:!0,get:()=>c.RotateCommand}),Object.defineProperty(Q,"SendBackwardsCommand",{enumerable:!0,get:()=>c.SendBackwardsCommand}),Object.defineProperty(Q,"StepAspectType",{enumerable:!0,get:()=>c.StepAspectType}),Object.defineProperty(Q,"StepType",{enumerable:!0,get:()=>c.StepType}),Object.defineProperty(Q,"TextChangeCommand",{enumerable:!0,get:()=>c.TextChangeCommand}),Object.defineProperty(Q,"UnitOfMeasurement",{enumerable:!0,get:()=>c.UnitOfMeasurement}),Object.defineProperty(Q,"dataUrlFromExternalUrl",{enumerable:!0,get:()=>c.dataUrlFromExternalUrl}),Object.defineProperty(Q,"determineCorrectFontSizeAndLines",{enumerable:!0,get:()=>c.determineCorrectFontSizeAndLines}),Object.defineProperty(Q,"findElement",{enumerable:!0,get:()=>c.findElement}),Object.defineProperty(Q,"frameDataCache",{enumerable:!0,get:()=>c.frameDataCache}),Object.defineProperty(Q,"generate",{enumerable:!0,get:()=>c.generate}),Object.defineProperty(Q,"generateSVGWithUnknownColors",{enumerable:!0,get:()=>c.generateSVGWithUnknownColors}),Object.defineProperty(Q,"getAttributesFromArrayBuffer",{enumerable:!0,get:()=>c.getAttributesFromArrayBuffer}),Object.defineProperty(Q,"getAxisAlignedBoundingBox",{enumerable:!0,get:()=>c.getAxisAlignedBoundingBox}),Object.defineProperty(Q,"getFrameData",{enumerable:!0,get:()=>c.getFrameData}),Object.defineProperty(Q,"getSvgElement",{enumerable:!0,get:()=>c.getSvgElement}),Object.defineProperty(Q,"loadFont",{enumerable:!0,get:()=>c.loadFont}),Object.defineProperty(Q,"patternImageDataCache",{enumerable:!0,get:()=>c.patternImageDataCache}),Object.defineProperty(Q,"registerFetchImplementation",{enumerable:!0,get:()=>c.registerFetchImplementation}),Object.defineProperty(Q,"registerWindowImplementation",{enumerable:!0,get:()=>c.registerWindowImplementation}),Object.defineProperty(Q,"rehydrateSerializedLayout",{enumerable:!0,get:()=>c.rehydrateSerializedLayout}),Object.defineProperty(Q,"setCanvasModule",{enumerable:!0,get:()=>c.setCanvasModule}),Q.AssetNotFoundError=j,Q.CollectionProduct=zA,Q.ConversionDataType=cA,Q.ConversionLocation=rA,Q.FlowExecutionNodeResult=le,Q.FlowExecutionResult=XA,Q.FlowService=WA,Q.FrameService=dA,Q.FrameStep=$A,Q.FrameStepHandle=_A,Q.GlobalPropertyHandle=Me,Q.IllustrationStepHandle=SA,Q.InformationMessageType=ce,Q.InformationStepHandle=UA,Q.IntegrationType=oA,Q.LayoutNotFoundError=k,Q.MaterialStepHandle=yA,Q.MisconfigurationError=ne,Q.MockWorkflowManager=ga,Q.ModelStepHandle=PA,Q.ObjectInput=ze,Q.ObjectInputType=qA,Q.OptionNotFoundError=te,Q.ParseError=X,Q.PictureStepHandle=NA,Q.ProductCameraRig=sA,Q.ProductCollection=OA,Q.ProductWorkflow=Oe,Q.PromiseCache=q,Q.PromiseQueue=He,Q.QuestionStepHandle=HA,Q.QueueablePromise=Ne,Q.ResourceNotFoundError=W,Q.ShapeStepHandle=xA,Q.SpiffCommerceClient=ZA,Q.StakeholderType=oe,Q.StepHandle=O,Q.TextStepHandle=RA,Q.Transform=KA,Q.TransformCollection=jA,Q.UnhandledBehaviorError=U,Q.Variant=z,Q.WorkflowExperienceImpl=ge,Q.assetService=b,Q.createDesign=bA,Q.designService=fe,Q.digitalContentStepService=CA,Q.frameStepService=me,Q.generateCommands=JA,Q.generateStateFromDesignInputSteps=fn,Q.getBoundedOffsets=BA,Q.getWorkflow=Be,Q.getWorkflows=je,Q.graphQlManager=H,Q.illustrationStepService=re,Q.materialStepService=xe,Q.modelStepService=Re,Q.moduleStepService=QA,Q.optionService=J,Q.persistenceService=P,Q.pictureStepService=Ue,Q.questionStepService=Ge,Q.shapeStepService=_,Q.shortenUrl=EA,Q.spiffCoreConfiguration=ae,Q.stepAspectValuesToDesignInputSteps=Dn,Q.textStepService=L,Q.toast=mA,Object.defineProperty(Q,Symbol.toStringTag,{value:"Module"})});