@spiffcommerce/core 16.8.1 → 16.8.3-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -297,6 +297,7 @@ const N = new Kt(), jt = y`
297
297
  clearCoat
298
298
  clearCoatIor
299
299
  refractionIntensity
300
+ reflectionIntensity
300
301
  albedoMap {
301
302
  key
302
303
  fileLink
@@ -325,6 +326,10 @@ const N = new Kt(), jt = y`
325
326
  key
326
327
  fileLink
327
328
  }
329
+ reflectionMap {
330
+ key
331
+ fileLink
332
+ }
328
333
  roughnessMap {
329
334
  key
330
335
  fileLink
@@ -6848,7 +6853,7 @@ class CA {
6848
6853
  if (A) {
6849
6854
  if (!a)
6850
6855
  throw new Error("Failed to generate cart preview image!");
6851
- return await ((u = this.workflowManager.getPreviewService()) == null ? void 0 : u.renderSceneScreenshot(512, a)) || "";
6856
+ return await ((u = this.workflowManager.getPreviewService()) == null ? void 0 : u.renderSceneScreenshot(e ?? 512, a)) || "";
6852
6857
  }
6853
6858
  let n = 2048;
6854
6859
  e && e <= 2048 && (n = e);
@@ -7021,7 +7026,7 @@ class CA {
7021
7026
  }),
7022
7027
  (t) => this.updateVariationRecords(t),
7023
7028
  this.workflowManager.getVariationRecords(),
7024
- (t) => e ? this.createPreviewImage(t) : Promise.resolve(void 0),
7029
+ (t) => e ? this.createPreviewImage(t, 1024) : Promise.resolve(void 0),
7025
7030
  this.workflowManager.getWorkflowMetadata()
7026
7031
  );
7027
7032
  }
@@ -35,6 +35,7 @@
35
35
  clearCoat
36
36
  clearCoatIor
37
37
  refractionIntensity
38
+ reflectionIntensity
38
39
  albedoMap {
39
40
  key
40
41
  fileLink
@@ -63,6 +64,10 @@
63
64
  key
64
65
  fileLink
65
66
  }
67
+ reflectionMap {
68
+ key
69
+ fileLink
70
+ }
66
71
  roughnessMap {
67
72
  key
68
73
  fileLink
@@ -1926,7 +1931,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
1926
1931
  }
1927
1932
  }
1928
1933
  }
1929
- `,wa=async l=>{var t;return(t=(await R.getShadowGraphqlClient().mutate({mutation:Ba,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:l.name,layouts:l.layouts,workflowId:l.workflowId,transactionId:l.transactionId,previewImage:l.previewImage,useThreeDimPreview:l.useThreeDimPreview,metadata:l.metadata,selectedVariants:l.selectedVariants}})).data)==null?void 0:t.designCreate},Ea=async l=>{var t;return(t=(await R.getShadowGraphqlClient().mutate({mutation:da,errorPolicy:"all",fetchPolicy:"no-cache",variables:{inputs:l.map(A=>({name:A.name,layouts:A.layouts,workflowId:A.workflowId,transactionId:A.transactionId,previewImage:A.previewImage,useThreeDimPreview:A.useThreeDimPreview,metadata:A.metadata,selectedVariants:A.selectedVariants}))}})).data)==null?void 0:t.designCreateMany},je=(l,e,t)=>{const A=n=>{const i={};if(n.type==="Frame"){const o=l[n.stepName],s=n.data;if(!o||!o.image||s.hideImageInCart&&t)return i;i[`${n.stepTitle} image`]=o.image}if(n.type==="Illustration"){const o=l[n.stepName],s=n.data;if(!o||s.hideColorsInCart&&t||!o.colors)return i;if(o.colors.length>0){const r=o.colors.join(", ").toUpperCase();i[`${n.stepTitle} colors`]=r}}if(n.type==="Module"){const o=l[n.stepName],s=n.data;if(!o||o.text===void 0||o.text===null||s.hideTextInCart&&t)return i;i[`${n.stepTitle} text`]=o.text}if(n.type==="Text"){const o=l[n.stepName];if(!o)return i;const s=n.data;(!s.hideTextInCart||!t&&o.text!==void 0&&o.text!==null)&&(i[`${n.stepTitle} text`]=o.text),o.color&&(!s.hideColorInCart||!t)&&(i[`${n.stepTitle} color`]=o.color)}return i},a={};return e.steps.forEach(n=>{Object.assign(a,A(n))}),a},ha=(l,e,t,A)=>{const a={};let n;if(t){n=je(t,e,!1);for(const i of Object.keys(n))a[i]={value:n[i],priceModifier:0}}else if(A){n=A;for(const i of Object.keys(n))a[i]={value:n[i],priceModifier:0}}for(const i of Object.keys(l)){const o=l[i],s=e.steps.find(r=>r.stepTitle===i);if(o.length===1)a[`${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++)a[`${s==null?void 0:s.stepTitle} selection ${r+1}`]={value:o[r].name,priceModifier:o[r].priceModifier}}return a},zt=(l,e,t,A,a,n,i,o,s,r)=>{const d=(P.getMap("transactionOwnerIds")||new Map).get(l.id),B={baseCost:t,designProductId:l.externalDesignProductId,designProductVariantId:l.externalDesignProductVariantId,event:"onComplete",exportedData:n,externalCartProductId:l.externalCartProductId,externalCartProductVariantId:l.externalCartProductVariantId,lineItemImageUrl:i||"",optionsCost:A,processExecutionId:r,transactionId:l.id,transactionOwnerId:d,weight:e.weight,workflowViewerLink:l.workflowViewerLink||"",workflowViewerReadOnlyLink:l.workflowViewerReadOnlyLink||""};return a&&(B.metadata=a),o&&(B.selectedVariants=o),s&&(B.sku=s),B},Ca=(l,e,t,A)=>{const a=(e.basePrice||0)*(l.variationsCount||0),n=l.priceModifierTotal||0,i={items:{value:l.variationsCount?`${l.variationsCount}`:"0",priceModifier:0}};return zt(l,e,a,n,void 0,i,t,void 0,void 0,A)},jt=async(l,e,t,A,a,n,i,o)=>{const s=e.basePrice||0,r=l.priceModifierTotal||0,g=ha(A,t,void 0,n);return zt(l,e,s,r,n,g,i,A,a,o)},Kt=async(l,e,t,A,a,n,i,o,s,r)=>{var y;await(async()=>{var N;if(r!==void 0)return r;await l.outstandingRequestsPromise();const S=await R.getShadowGraphqlClient().query({query:ht,variables:{ids:[a.id]},fetchPolicy:"no-cache",errorPolicy:"all"}),G=(N=S.data)==null?void 0:N.transactions[0].workflowState;return S.errors?(S.errors.forEach(v=>{S.errors&&console.log("Server Error:",v.message)}),null):G??null})()||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(A())),await l.updateStateWithServerImmediate(A),console.log("Server state is undefined @ Workflow completion"));const B=l.getPreviewService(),w=(y=e==null?void 0:e.finalizeStepConfig)==null?void 0:y.lookAtAnimation,h=B&&e.showModelOnFinishStep&&!!w,Q=s&&je(s,e,!0),E=s&&je(s,e,!1),m=async Y=>{const S={};let G=0;if(Object.keys(n).length>0)for(const N of Object.keys(n)){const v=n[N],j=e.steps.find(K=>K.stepName===N);for(let K=0;K<v.selections.length;++K){const V=v.selections[K];if(j&&(!Y||j.option&&(j.option.variants||[]).length>1&&!j.data.hideSelectionInCart&&!j.data.hideSelectionsInCart)){const qe=j.stepTitle;S[qe]?S[qe].push({id:V.id||"",name:V.name,priceModifier:V.priceModifier}):S[qe]=[{id:V.id||"",name:V.name,priceModifier:V.priceModifier}]}G+=V.priceModifier}}return[S,G]},[C]=await m(!0),I=Object.fromEntries(Object.keys(C).map(Y=>[Y,C[Y].map(S=>S.id)])),[F]=await m(!1),D=Object.fromEntries(Object.keys(F).map(Y=>[Y,F[Y].map(S=>S.id)])),p=await o(h);return{designDetails:(()=>{const Y={name:i,layouts:t.map(S=>({index:S.index,panelId:S.panelId})),workflowId:e.id,transactionId:a.id,useThreeDimPreview:!!h,previewImage:p};if(E){const S=[];for(const[G,N]of Object.entries(E))S.push({key:G,value:N});Y.metadata=S}if(I){const S=[];for(const[G,N]of Object.entries(D))S.push({key:G,ids:N});Y.selectedVariants=S}return Y})(),cartSelectionsWithPrices:C,cartMetadata:Q}},Vt=async(l,e,t,A,a,n,i,o,s,r,g,d,B)=>{var I,F,D;s("workflow.steps.finish.finalize.buildingLayouts");const{designDetails:w,cartSelectionsWithPrices:h,cartMetadata:Q}=await Kt(l,e,t,A,n,i,o,d,B);s("workflow.steps.finish.finalize.creatingDesign"),n.bulk&&await r(g);const E=await wa(w),m=(I=E==null?void 0:E.transaction)==null?void 0:I.previewImageLink;if(!(E!=null&&E.transaction))throw new Error("Failed to create design");s("workflow.steps.finish.finalize.updatingTransaction");const C=E.transaction;return n.bulk?Ca(C,a,m,(F=E==null?void 0:E.processExecution)==null?void 0:F.id):await jt(C,a,e,h,E==null?void 0:E.sku,Q,m,(D=E==null?void 0:E.processExecution)==null?void 0:D.id)},Qa=async(l,e)=>{e("workflow.steps.finish.finalize.buildingLayouts"),await Promise.all(l.map(async i=>{await i.workflowManager.outstandingRequestsPromise()}));const A=await(async()=>{var s;const o=await R.getShadowGraphqlClient().query({query:ht,variables:{ids:l.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})(),a=await Promise.all(l.map(async(i,o)=>await Kt(i.workflowManager,i.workflow,i.layouts,i.getReducerState,i.transaction,i.workflowSelections,i.designName,()=>Promise.resolve(void 0),i.workflowMetadata,A?A[o]:void 0)));e("workflow.steps.finish.finalize.creatingDesign");const n=await Ea(a.map(i=>i.designDetails));if(!n)throw new Error("Failed to create designs");return e("workflow.steps.finish.finalize.updatingTransaction"),Promise.all(n.map(async(i,o)=>{var d;const s=l[o],r=a[o],g=i.transaction;return await jt(g,s.product,s.workflow,r.cartSelectionsWithPrices,i.sku,r.cartMetadata,void 0,(d=i.processExecution)==null?void 0:d.id)}))};class ua{constructor(){this.localPersistenceKey="designTransactions",this.storageMethod="Local",this.designSavedListeners=[]}attachSaveListener(e){this.designSavedListeners.push(e)}detachSaveListener(e){this.designSavedListeners=this.designSavedListeners.filter(t=>t!==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(A=>A.transactionId===e)}async addDesign(e){const A=(await this.getSavedDesigns()).filter(a=>a.transactionId!==e.transactionId);A.unshift(e),await this.setDesigns(A),this.designSavedListeners.forEach(a=>a(e))}async renameDesign(e,t){const A=await this.getSavedDesigns(),a=A.find(n=>n.transactionId===e);if(!a)throw new Error(`No saved design for transaction ${e}.`);a.title=t,await this.setDesigns(A)}async removeDesign(e){const t=await this.getSavedDesigns();await this.setDesigns(t.filter(A=>A.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 pe=new ua;class de{constructor(e,t){var a;if(this.renderableScenes=[],this.renderableSceneCallbacks=[],this.debouncedSavedDesignUpdate=_e(async()=>{await pe.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()},2500),this.getCanvasObjectURLAsync=async n=>new Promise((i,o)=>{try{n.toBlob(s=>{if(s){const r=URL.createObjectURL(s);i(r)}})}catch(s){o(s)}}),!t.workflow)throw new Error("No Workflow ID provided.");this.client=e;const A=t.layouts;this.commandContext=new c.CommandContext,this.commandContext.initialize(A,t.reloadedState),this.isReadOnly=t.transaction.isOrdered||!!t.readOnly,this.workflowManager=new ga(t.workflow,((a=t.product.profanities)==null?void 0:a.map(n=>n.word))||[],A,this.commandContext,n=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return t.stateMutationFunc(n)},t.transaction,t.product,t.previewService,t.renderableContextService,t.reloadedState,t.readOnly,t.modelContainer,t.isReloadedTransaction,t.singleVariantsRenderable),this.workflowManager.addSelectionCallback(n=>{const i=n.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 updateVariationRecords(e){await R.getShadowGraphqlClient().mutate({mutation:UA,variables:{transactionId:this.workflowManager.getTransaction().id,updates:e.map(t=>({recordNumber:t.recordNumber,values:t.values.map(A=>({aspect:A.aspect,stepName:A.stepName,value:A.value}))}))}})}async createPreviewImage(e,t){var C,I;const A=this.workflowManager.getWorkflow(),a=(C=A==null?void 0:A.finalizeStepConfig)==null?void 0:C.lookAtAnimation;if(e){if(!a)throw new Error("Failed to generate cart preview image!");return await((I=this.workflowManager.getPreviewService())==null?void 0:I.renderSceneScreenshot(512,a))||""}let n=2048;t&&t<=2048&&(n=t);const i=c.createCanvas(n,n),o=this.commandContext.getAllLayouts(),s=A.defaultPreviewPanelIndex||0,r=A.panels[s],g=o.find(F=>{var D;return((D=F.layoutState)==null?void 0:D.layout.panelId)===(r==null?void 0:r.name)})||o[0],d=g.layoutState.layout.previewRegion?{x:g.layoutState.layout.previewRegion.left,y:g.layoutState.layout.previewRegion.top,width:g.layoutState.layout.previewRegion.width,height:g.layoutState.layout.previewRegion.height}:{x:0,y:0,width:g.layoutState.layout.width,height:g.layoutState.layout.height},B=this.commandContext.getLayoutById(g.layoutState.layout.id),w=i.getContext("2d");if(!w)throw new Ce("Failed to obtain 2D context for preview image creation");const h=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}}}),Q=c.renderPapyrusComponentAsString(h);await(await $e.Pith.from(w,Q,{anonymousCrossOrigin:!0,ignoreDimensions:!1,createCanvas:c.createCanvas,createImage:c.loadImage,DOMParser:c.getDomParser(),fetch:c.fetch})).render();const m=await this.getCanvasObjectURLAsync(i);return i.toDataURL(m)}getStepById(e){const t=this.getWorkflowManager().getWorkflow().steps.find(A=>A.stepName===e);if(!(!t||!this.stepHasHandle(t)))return Be.get(this.getWorkflowManager(),t)}getSteps(){return this.getScenes().flatMap(e=>this.getStepsByScene(e))}getScenes(){return this.getWorkflowManager().getWorkflow().stepGroups.map(t=>({id:t.id,name:t.name,stepIds:t.stepNames}))}getSelectionPriceSubunits(){const e=this.getWorkflowManager().getWorkflowSelections();let t=0;return Object.values(e).forEach(A=>{t+=A.selections.map(a=>a.priceModifier).reduce((a,n)=>a+n)}),t}getBasePriceSubunits(){return this.getWorkflowManager().getProduct().basePrice||0}getTotalPriceSubunits(){return this.getBasePriceSubunits()+this.getSelectionPriceSubunits()}getBulkStep(){if(this.getWorkflowManager().getTransaction().bulk){const e=this.getWorkflowManager().getProduct().bulkConfiguration,t={type:c.StepType.Bulk,stepName:"Bulk",stepTitle:(e==null?void 0:e.stepTitle)??"workflow.steps.bulk.title",helpText:e==null?void 0:e.helpText,data:{aspects:He(this.getWorkflowManager().getWorkflow())},conditions:[]};return Be.get(this.getWorkflowManager(),t)}}getStepByName(e){const t=this.getWorkflowManager().getWorkflow().steps.find(A=>A.stepTitle===e);if(!(!t||!this.stepHasHandle(t)))return Be.get(this.getWorkflowManager(),t)}getStepsByType(e){return this.getWorkflowManager().getWorkflow().steps.filter(t=>t.type===e).map(t=>Be.get(this.getWorkflowManager(),t))}getStepsByScene(e){if(!this.getWorkflowManager().getWorkflow().stepGroups.find(A=>A.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(A=>this.getWorkflowManager().getWorkflow().steps.find(a=>a.stepName===A)).filter(A=>this.stepHasHandle(A)).map(A=>Be.get(this.getWorkflowManager(),A))}async attachCustomerDetails(e){return this.assignCustomerDetails({emailAddress:e.email})}async assignCustomerDetails(e){var a,n,i;const A=(i=(n=(a=(await R.getShadowGraphqlClient().mutate({mutation:Ht,variables:{id:this.getWorkflowManager().getTransaction().id,details:e,type:"Owner"}})).data)==null?void 0:a.transactionAddStakeholder)==null?void 0:n.stakeholders)==null?void 0:i.find(o=>{var s;return((s=o.customer)==null?void 0:s.emailAddress)===e.emailAddress});if(A!=null&&A.customer){this.getWorkflowManager().setTransactionCustomer(A.customer);const o=P.getMap("transactionCustomerIds")||new Map;o.set(this.getWorkflowManager().getTransaction().id,A.customer.id),P.setMap("transactionCustomerIds",o)}}attachRenderableSceneListener(e){this.renderableSceneCallbacks.push(e),e(this.renderableScenes)}detachRenderableSceneListener(e){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter(t=>t!==e)}async save(e){if(!this.getCommandContext().getState())throw new U("State undefined!");const a={title:await(async()=>{var s;if(e)return e;const n=this.getWorkflowManager().getTransaction().id,o=(s=(await pe.getSavedDesigns()).find(r=>r.transactionId===n))==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 pe.addDesign(a),a}async copy(){var o;const e=Ae(this.getCommandContext().getState());if(!e)throw new U("Internal state is undefined! Cannot copy experience!");const t=JSON.stringify(e.transaction),A=this.getWorkflowManager().getWorkflow(),a=new sA({}),n=(o=this.getWorkflowManager().getTransaction().integrationProduct)==null?void 0:o.id;if(!n)throw new U("Integration product id is undefined!");return await a.initFromIntegrationProduct(n),await a.getWorkflowExperience(A.id,t,void 0)}async onDesignFinished(e,t=!0){return Vt(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||(()=>{}),A=>this.updateVariationRecords(A),this.workflowManager.getVariationRecords(),A=>t?this.createPreviewImage(A):Promise.resolve(void 0),this.workflowManager.getWorkflowMetadata())}stepHasHandle(e){return e.type!==c.StepType.SilentIllustration&&e.type!==c.StepType.ProductOverlay}getExportedData(){var a;const e=new Map,t=this.getWorkflowManager().getWorkflowMetadata(),A=this.getWorkflowManager().getWorkflowSelections();return Object.keys(t).forEach(n=>{const i=this.workflowManager.getWorkflow().steps.find(s=>s.stepName===n);if(!i)return;e.has(i.stepTitle)||e.set(i.stepTitle,{});const o=t[n];Object.keys(o).forEach(s=>{e.get(i.stepTitle)[s]=o[s]})}),(a=Object.keys(A))==null||a.forEach(n=>{const i=this.workflowManager.getWorkflow().steps.find(o=>o.stepName===n);i&&(e.has(i.stepTitle)||e.set(i.stepTitle,{}),e.get(i.stepTitle).selection=A[n].selections[0].name)}),e}}const ma=["altGlyph","circle","ellipse","path","polygon","polyline","rect","text","textPath","tref","tspan"],Ia=async(l,e,t)=>{const A=e.data,a=t.data.baseUrl,n=A.assetUrl.replace("localhost","localstack"),i=a.slice(0,4)==="http"?"":"https://",o=new URL(i+a);o.searchParams.append("video",c.toBase64(JSON.stringify([{href:n}]))),o.pathname=o.pathname+(o.pathname.slice(-1)==="/"?"":"/");const s=o.toString(),g=`data:image/svg+xml;base64,${c.toBase64(await tt.toString(s,{type:"svg"}))}`,d=w=>{const h=l.find(E=>E.panelId===w.panelId);if(!h)throw new k(w);const Q=c.generate();return new c.CreateElementCommand({id:Q,src:g,type:c.LayoutElementType.Image,y:w.top,x:w.left,width:w.width,height:w.height,rotation:0},h)},B=t.data.regions;try{return B.map(d)}catch(w){return console.error(w),[]}},fa=async(l,e,t,A)=>{const a=t.data,n=a.assetUrl,i=await c.getPatternImageData(n);try{const o=c.getVariant(a,A.option);o&&(e[A.stepName]={selectedVariants:[o]});const s=async r=>{var Q;const g=await c.generateFrameSVG(r||{width:1,height:1},(Q=o==null?void 0:o.asset)==null?void 0:Q.fileLink),d=await c.getFrameData(g),B=c.generate(),w=l.find(E=>E.panelId===r.panelId);if(!w)throw new k(r);const h=c.calculateOffsets(i,d,{scale:a.scale,left:a.x,top:a.y});return[new c.CreateElementCommand({id:B,path:d.path,dataWidth:d.width,dataHeight:d.height,type:c.LayoutElementType.Frame,focalBlur:A.data.focalBlur,focalBlurStrength:A.data.focalBlurStrength,focalBlurRadius:A.data.focalBlurRadius,forceImageCover:A.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,h)]};return(await Promise.all(A.data.regions.map(r=>s(r)))).flat()}catch(o){return console.error(o),[]}},Da=async(l,e,t,A)=>{var D,p;const a=t.data,n=A.option;if(!n)return console.error(`No option for step ${A.stepName}.`),[];const i=((D=n.variants)==null?void 0:D.find(f=>f.id===a.illustrationVariantId))||c.getDefaultVariant(n);if(!i)return console.error(`No variant with ID: ${a.illustrationVariantId}`),[];if(!i.asset)return console.error(`No asset for variant with ID: ${a.illustrationVariantId}`),[];e[A.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: ${a.illustrationVariantId}`),[];const s=await c.fetchAsString(o,!0),r=/<svg.*?<\/svg>/s,g=s.match(r)||[],d=(g==null?void 0:g.length)>0?g[0]:"",h=c.domParser().parseFromString(d,"image/svg+xml").firstElementChild;if(!h)return console.error("Failed to read SVG."),[];c.sanitizeSvgTree(h);const Q={};c.traverse(h,f=>{ma.includes(f.tagName)&&!f.attributes.getNamedItem("fill")&&f.setAttribute("fill","#000000");const y=f.attributes.getNamedItem("fill");if(y&&y.value!=="none"){const S=y.value,N=`spiff-fill-${S.replace(/\W/g,"")}`;f.classList.add(N),Q[N]={browserValue:S}}const Y=f.attributes.getNamedItem("stroke");if(Y&&Y.value!=="none"){const S=Y.value,N=`spiff-stroke-${S.replace(/\W/g,"")}`;f.classList.add(N),Q[N]={browserValue:S}}});const m=c.xmlSerializer().serializeToString(h),C=a.colors;if(C){for(const[f,y]of Object.entries(Q))for(const Y of Object.keys(C))if(y.browserValue===Y){Q[f]={browserValue:C[Y]};break}}const I=f=>{const y=l.find(S=>S.panelId===f.panelId);if(!y)throw new k(f);const Y=c.generate();return new c.CreateElementCommand({colors:Q,id:Y,svg:m,type:c.LayoutElementType.Illustration,y:f.top,x:f.left,rotation:f.rotation,width:f.width,height:f.height,layer:f.layer,layerIndex:f.layerIndex,immutable:f.immutable},y)},F=A.data.regions;try{return F.map(I)}catch(f){return console.error(f),[]}},pa=async(l,e,t)=>{const A=await Nt(t.data.module),a=e.data,n=(o,s)=>{const r=l.find(d=>d.panelId===s.panelId);if(!r)throw new k(s);const g=c.generate();return new c.CreateElementCommand({colors:{},id:g,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=t.data.regions;try{return i.map(o=>n(A.svgPrint(a.text,o),o))}catch(o){return console.error(o),[]}},Fa=async(l,e,t,A)=>{var g,d;const a=t.data,n=A.option;if(!n)return console.error(`No option for step ${A.stepName}.`),[];const i=((g=n.variants)==null?void 0:g.find(B=>B.id===a.pictureVariantId))||c.getDefaultVariant(n);if(!i)return console.error(`No variant with ID: ${a.pictureVariantId}`),[];if(!i.asset)return console.error(`No asset for variant with ID: ${a.pictureVariantId}`),[];e[A.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: ${a.pictureVariantId}`),[];const s=B=>{const w=l.find(Q=>Q.panelId===B.panelId);if(!w)throw new k(B);const h=c.generate();return new c.CreateElementCommand({id:h,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=A.data.regions;try{return r.map(s)}catch(B){return console.error(B),[]}},Ma=async(l,e,t,A)=>{var r;const a=t.data,n=A.option;if(!n)return console.error(`No option for step ${A.stepName}.`),[];const i=((r=n.variants)==null?void 0:r.find(g=>g.id===a.colorVariantId))||c.getDefaultVariant(n);if(!i)return console.error(`No variant with ID: ${a.colorVariantId}`),[];e[A.stepName]={selectedVariants:[i]};const o=g=>{const d=l.find(E=>E.panelId===g.panelId);if(!d)throw new k(g);const B=`
1934
+ `,wa=async l=>{var t;return(t=(await R.getShadowGraphqlClient().mutate({mutation:Ba,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:l.name,layouts:l.layouts,workflowId:l.workflowId,transactionId:l.transactionId,previewImage:l.previewImage,useThreeDimPreview:l.useThreeDimPreview,metadata:l.metadata,selectedVariants:l.selectedVariants}})).data)==null?void 0:t.designCreate},Ea=async l=>{var t;return(t=(await R.getShadowGraphqlClient().mutate({mutation:da,errorPolicy:"all",fetchPolicy:"no-cache",variables:{inputs:l.map(A=>({name:A.name,layouts:A.layouts,workflowId:A.workflowId,transactionId:A.transactionId,previewImage:A.previewImage,useThreeDimPreview:A.useThreeDimPreview,metadata:A.metadata,selectedVariants:A.selectedVariants}))}})).data)==null?void 0:t.designCreateMany},je=(l,e,t)=>{const A=n=>{const i={};if(n.type==="Frame"){const o=l[n.stepName],s=n.data;if(!o||!o.image||s.hideImageInCart&&t)return i;i[`${n.stepTitle} image`]=o.image}if(n.type==="Illustration"){const o=l[n.stepName],s=n.data;if(!o||s.hideColorsInCart&&t||!o.colors)return i;if(o.colors.length>0){const r=o.colors.join(", ").toUpperCase();i[`${n.stepTitle} colors`]=r}}if(n.type==="Module"){const o=l[n.stepName],s=n.data;if(!o||o.text===void 0||o.text===null||s.hideTextInCart&&t)return i;i[`${n.stepTitle} text`]=o.text}if(n.type==="Text"){const o=l[n.stepName];if(!o)return i;const s=n.data;(!s.hideTextInCart||!t&&o.text!==void 0&&o.text!==null)&&(i[`${n.stepTitle} text`]=o.text),o.color&&(!s.hideColorInCart||!t)&&(i[`${n.stepTitle} color`]=o.color)}return i},a={};return e.steps.forEach(n=>{Object.assign(a,A(n))}),a},ha=(l,e,t,A)=>{const a={};let n;if(t){n=je(t,e,!1);for(const i of Object.keys(n))a[i]={value:n[i],priceModifier:0}}else if(A){n=A;for(const i of Object.keys(n))a[i]={value:n[i],priceModifier:0}}for(const i of Object.keys(l)){const o=l[i],s=e.steps.find(r=>r.stepTitle===i);if(o.length===1)a[`${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++)a[`${s==null?void 0:s.stepTitle} selection ${r+1}`]={value:o[r].name,priceModifier:o[r].priceModifier}}return a},zt=(l,e,t,A,a,n,i,o,s,r)=>{const d=(P.getMap("transactionOwnerIds")||new Map).get(l.id),B={baseCost:t,designProductId:l.externalDesignProductId,designProductVariantId:l.externalDesignProductVariantId,event:"onComplete",exportedData:n,externalCartProductId:l.externalCartProductId,externalCartProductVariantId:l.externalCartProductVariantId,lineItemImageUrl:i||"",optionsCost:A,processExecutionId:r,transactionId:l.id,transactionOwnerId:d,weight:e.weight,workflowViewerLink:l.workflowViewerLink||"",workflowViewerReadOnlyLink:l.workflowViewerReadOnlyLink||""};return a&&(B.metadata=a),o&&(B.selectedVariants=o),s&&(B.sku=s),B},Ca=(l,e,t,A)=>{const a=(e.basePrice||0)*(l.variationsCount||0),n=l.priceModifierTotal||0,i={items:{value:l.variationsCount?`${l.variationsCount}`:"0",priceModifier:0}};return zt(l,e,a,n,void 0,i,t,void 0,void 0,A)},jt=async(l,e,t,A,a,n,i,o)=>{const s=e.basePrice||0,r=l.priceModifierTotal||0,g=ha(A,t,void 0,n);return zt(l,e,s,r,n,g,i,A,a,o)},Kt=async(l,e,t,A,a,n,i,o,s,r)=>{var y;await(async()=>{var N;if(r!==void 0)return r;await l.outstandingRequestsPromise();const S=await R.getShadowGraphqlClient().query({query:ht,variables:{ids:[a.id]},fetchPolicy:"no-cache",errorPolicy:"all"}),G=(N=S.data)==null?void 0:N.transactions[0].workflowState;return S.errors?(S.errors.forEach(v=>{S.errors&&console.log("Server Error:",v.message)}),null):G??null})()||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(A())),await l.updateStateWithServerImmediate(A),console.log("Server state is undefined @ Workflow completion"));const B=l.getPreviewService(),w=(y=e==null?void 0:e.finalizeStepConfig)==null?void 0:y.lookAtAnimation,h=B&&e.showModelOnFinishStep&&!!w,Q=s&&je(s,e,!0),E=s&&je(s,e,!1),m=async Y=>{const S={};let G=0;if(Object.keys(n).length>0)for(const N of Object.keys(n)){const v=n[N],j=e.steps.find(K=>K.stepName===N);for(let K=0;K<v.selections.length;++K){const V=v.selections[K];if(j&&(!Y||j.option&&(j.option.variants||[]).length>1&&!j.data.hideSelectionInCart&&!j.data.hideSelectionsInCart)){const qe=j.stepTitle;S[qe]?S[qe].push({id:V.id||"",name:V.name,priceModifier:V.priceModifier}):S[qe]=[{id:V.id||"",name:V.name,priceModifier:V.priceModifier}]}G+=V.priceModifier}}return[S,G]},[C]=await m(!0),I=Object.fromEntries(Object.keys(C).map(Y=>[Y,C[Y].map(S=>S.id)])),[F]=await m(!1),D=Object.fromEntries(Object.keys(F).map(Y=>[Y,F[Y].map(S=>S.id)])),p=await o(h);return{designDetails:(()=>{const Y={name:i,layouts:t.map(S=>({index:S.index,panelId:S.panelId})),workflowId:e.id,transactionId:a.id,useThreeDimPreview:!!h,previewImage:p};if(E){const S=[];for(const[G,N]of Object.entries(E))S.push({key:G,value:N});Y.metadata=S}if(I){const S=[];for(const[G,N]of Object.entries(D))S.push({key:G,ids:N});Y.selectedVariants=S}return Y})(),cartSelectionsWithPrices:C,cartMetadata:Q}},Vt=async(l,e,t,A,a,n,i,o,s,r,g,d,B)=>{var I,F,D;s("workflow.steps.finish.finalize.buildingLayouts");const{designDetails:w,cartSelectionsWithPrices:h,cartMetadata:Q}=await Kt(l,e,t,A,n,i,o,d,B);s("workflow.steps.finish.finalize.creatingDesign"),n.bulk&&await r(g);const E=await wa(w),m=(I=E==null?void 0:E.transaction)==null?void 0:I.previewImageLink;if(!(E!=null&&E.transaction))throw new Error("Failed to create design");s("workflow.steps.finish.finalize.updatingTransaction");const C=E.transaction;return n.bulk?Ca(C,a,m,(F=E==null?void 0:E.processExecution)==null?void 0:F.id):await jt(C,a,e,h,E==null?void 0:E.sku,Q,m,(D=E==null?void 0:E.processExecution)==null?void 0:D.id)},Qa=async(l,e)=>{e("workflow.steps.finish.finalize.buildingLayouts"),await Promise.all(l.map(async i=>{await i.workflowManager.outstandingRequestsPromise()}));const A=await(async()=>{var s;const o=await R.getShadowGraphqlClient().query({query:ht,variables:{ids:l.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})(),a=await Promise.all(l.map(async(i,o)=>await Kt(i.workflowManager,i.workflow,i.layouts,i.getReducerState,i.transaction,i.workflowSelections,i.designName,()=>Promise.resolve(void 0),i.workflowMetadata,A?A[o]:void 0)));e("workflow.steps.finish.finalize.creatingDesign");const n=await Ea(a.map(i=>i.designDetails));if(!n)throw new Error("Failed to create designs");return e("workflow.steps.finish.finalize.updatingTransaction"),Promise.all(n.map(async(i,o)=>{var d;const s=l[o],r=a[o],g=i.transaction;return await jt(g,s.product,s.workflow,r.cartSelectionsWithPrices,i.sku,r.cartMetadata,void 0,(d=i.processExecution)==null?void 0:d.id)}))};class ua{constructor(){this.localPersistenceKey="designTransactions",this.storageMethod="Local",this.designSavedListeners=[]}attachSaveListener(e){this.designSavedListeners.push(e)}detachSaveListener(e){this.designSavedListeners=this.designSavedListeners.filter(t=>t!==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(A=>A.transactionId===e)}async addDesign(e){const A=(await this.getSavedDesigns()).filter(a=>a.transactionId!==e.transactionId);A.unshift(e),await this.setDesigns(A),this.designSavedListeners.forEach(a=>a(e))}async renameDesign(e,t){const A=await this.getSavedDesigns(),a=A.find(n=>n.transactionId===e);if(!a)throw new Error(`No saved design for transaction ${e}.`);a.title=t,await this.setDesigns(A)}async removeDesign(e){const t=await this.getSavedDesigns();await this.setDesigns(t.filter(A=>A.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 pe=new ua;class de{constructor(e,t){var a;if(this.renderableScenes=[],this.renderableSceneCallbacks=[],this.debouncedSavedDesignUpdate=_e(async()=>{await pe.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()},2500),this.getCanvasObjectURLAsync=async n=>new Promise((i,o)=>{try{n.toBlob(s=>{if(s){const r=URL.createObjectURL(s);i(r)}})}catch(s){o(s)}}),!t.workflow)throw new Error("No Workflow ID provided.");this.client=e;const A=t.layouts;this.commandContext=new c.CommandContext,this.commandContext.initialize(A,t.reloadedState),this.isReadOnly=t.transaction.isOrdered||!!t.readOnly,this.workflowManager=new ga(t.workflow,((a=t.product.profanities)==null?void 0:a.map(n=>n.word))||[],A,this.commandContext,n=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return t.stateMutationFunc(n)},t.transaction,t.product,t.previewService,t.renderableContextService,t.reloadedState,t.readOnly,t.modelContainer,t.isReloadedTransaction,t.singleVariantsRenderable),this.workflowManager.addSelectionCallback(n=>{const i=n.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 updateVariationRecords(e){await R.getShadowGraphqlClient().mutate({mutation:UA,variables:{transactionId:this.workflowManager.getTransaction().id,updates:e.map(t=>({recordNumber:t.recordNumber,values:t.values.map(A=>({aspect:A.aspect,stepName:A.stepName,value:A.value}))}))}})}async createPreviewImage(e,t){var C,I;const A=this.workflowManager.getWorkflow(),a=(C=A==null?void 0:A.finalizeStepConfig)==null?void 0:C.lookAtAnimation;if(e){if(!a)throw new Error("Failed to generate cart preview image!");return await((I=this.workflowManager.getPreviewService())==null?void 0:I.renderSceneScreenshot(t??512,a))||""}let n=2048;t&&t<=2048&&(n=t);const i=c.createCanvas(n,n),o=this.commandContext.getAllLayouts(),s=A.defaultPreviewPanelIndex||0,r=A.panels[s],g=o.find(F=>{var D;return((D=F.layoutState)==null?void 0:D.layout.panelId)===(r==null?void 0:r.name)})||o[0],d=g.layoutState.layout.previewRegion?{x:g.layoutState.layout.previewRegion.left,y:g.layoutState.layout.previewRegion.top,width:g.layoutState.layout.previewRegion.width,height:g.layoutState.layout.previewRegion.height}:{x:0,y:0,width:g.layoutState.layout.width,height:g.layoutState.layout.height},B=this.commandContext.getLayoutById(g.layoutState.layout.id),w=i.getContext("2d");if(!w)throw new Ce("Failed to obtain 2D context for preview image creation");const h=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}}}),Q=c.renderPapyrusComponentAsString(h);await(await $e.Pith.from(w,Q,{anonymousCrossOrigin:!0,ignoreDimensions:!1,createCanvas:c.createCanvas,createImage:c.loadImage,DOMParser:c.getDomParser(),fetch:c.fetch})).render();const m=await this.getCanvasObjectURLAsync(i);return i.toDataURL(m)}getStepById(e){const t=this.getWorkflowManager().getWorkflow().steps.find(A=>A.stepName===e);if(!(!t||!this.stepHasHandle(t)))return Be.get(this.getWorkflowManager(),t)}getSteps(){return this.getScenes().flatMap(e=>this.getStepsByScene(e))}getScenes(){return this.getWorkflowManager().getWorkflow().stepGroups.map(t=>({id:t.id,name:t.name,stepIds:t.stepNames}))}getSelectionPriceSubunits(){const e=this.getWorkflowManager().getWorkflowSelections();let t=0;return Object.values(e).forEach(A=>{t+=A.selections.map(a=>a.priceModifier).reduce((a,n)=>a+n)}),t}getBasePriceSubunits(){return this.getWorkflowManager().getProduct().basePrice||0}getTotalPriceSubunits(){return this.getBasePriceSubunits()+this.getSelectionPriceSubunits()}getBulkStep(){if(this.getWorkflowManager().getTransaction().bulk){const e=this.getWorkflowManager().getProduct().bulkConfiguration,t={type:c.StepType.Bulk,stepName:"Bulk",stepTitle:(e==null?void 0:e.stepTitle)??"workflow.steps.bulk.title",helpText:e==null?void 0:e.helpText,data:{aspects:He(this.getWorkflowManager().getWorkflow())},conditions:[]};return Be.get(this.getWorkflowManager(),t)}}getStepByName(e){const t=this.getWorkflowManager().getWorkflow().steps.find(A=>A.stepTitle===e);if(!(!t||!this.stepHasHandle(t)))return Be.get(this.getWorkflowManager(),t)}getStepsByType(e){return this.getWorkflowManager().getWorkflow().steps.filter(t=>t.type===e).map(t=>Be.get(this.getWorkflowManager(),t))}getStepsByScene(e){if(!this.getWorkflowManager().getWorkflow().stepGroups.find(A=>A.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(A=>this.getWorkflowManager().getWorkflow().steps.find(a=>a.stepName===A)).filter(A=>this.stepHasHandle(A)).map(A=>Be.get(this.getWorkflowManager(),A))}async attachCustomerDetails(e){return this.assignCustomerDetails({emailAddress:e.email})}async assignCustomerDetails(e){var a,n,i;const A=(i=(n=(a=(await R.getShadowGraphqlClient().mutate({mutation:Ht,variables:{id:this.getWorkflowManager().getTransaction().id,details:e,type:"Owner"}})).data)==null?void 0:a.transactionAddStakeholder)==null?void 0:n.stakeholders)==null?void 0:i.find(o=>{var s;return((s=o.customer)==null?void 0:s.emailAddress)===e.emailAddress});if(A!=null&&A.customer){this.getWorkflowManager().setTransactionCustomer(A.customer);const o=P.getMap("transactionCustomerIds")||new Map;o.set(this.getWorkflowManager().getTransaction().id,A.customer.id),P.setMap("transactionCustomerIds",o)}}attachRenderableSceneListener(e){this.renderableSceneCallbacks.push(e),e(this.renderableScenes)}detachRenderableSceneListener(e){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter(t=>t!==e)}async save(e){if(!this.getCommandContext().getState())throw new U("State undefined!");const a={title:await(async()=>{var s;if(e)return e;const n=this.getWorkflowManager().getTransaction().id,o=(s=(await pe.getSavedDesigns()).find(r=>r.transactionId===n))==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 pe.addDesign(a),a}async copy(){var o;const e=Ae(this.getCommandContext().getState());if(!e)throw new U("Internal state is undefined! Cannot copy experience!");const t=JSON.stringify(e.transaction),A=this.getWorkflowManager().getWorkflow(),a=new sA({}),n=(o=this.getWorkflowManager().getTransaction().integrationProduct)==null?void 0:o.id;if(!n)throw new U("Integration product id is undefined!");return await a.initFromIntegrationProduct(n),await a.getWorkflowExperience(A.id,t,void 0)}async onDesignFinished(e,t=!0){return Vt(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||(()=>{}),A=>this.updateVariationRecords(A),this.workflowManager.getVariationRecords(),A=>t?this.createPreviewImage(A,1024):Promise.resolve(void 0),this.workflowManager.getWorkflowMetadata())}stepHasHandle(e){return e.type!==c.StepType.SilentIllustration&&e.type!==c.StepType.ProductOverlay}getExportedData(){var a;const e=new Map,t=this.getWorkflowManager().getWorkflowMetadata(),A=this.getWorkflowManager().getWorkflowSelections();return Object.keys(t).forEach(n=>{const i=this.workflowManager.getWorkflow().steps.find(s=>s.stepName===n);if(!i)return;e.has(i.stepTitle)||e.set(i.stepTitle,{});const o=t[n];Object.keys(o).forEach(s=>{e.get(i.stepTitle)[s]=o[s]})}),(a=Object.keys(A))==null||a.forEach(n=>{const i=this.workflowManager.getWorkflow().steps.find(o=>o.stepName===n);i&&(e.has(i.stepTitle)||e.set(i.stepTitle,{}),e.get(i.stepTitle).selection=A[n].selections[0].name)}),e}}const ma=["altGlyph","circle","ellipse","path","polygon","polyline","rect","text","textPath","tref","tspan"],Ia=async(l,e,t)=>{const A=e.data,a=t.data.baseUrl,n=A.assetUrl.replace("localhost","localstack"),i=a.slice(0,4)==="http"?"":"https://",o=new URL(i+a);o.searchParams.append("video",c.toBase64(JSON.stringify([{href:n}]))),o.pathname=o.pathname+(o.pathname.slice(-1)==="/"?"":"/");const s=o.toString(),g=`data:image/svg+xml;base64,${c.toBase64(await tt.toString(s,{type:"svg"}))}`,d=w=>{const h=l.find(E=>E.panelId===w.panelId);if(!h)throw new k(w);const Q=c.generate();return new c.CreateElementCommand({id:Q,src:g,type:c.LayoutElementType.Image,y:w.top,x:w.left,width:w.width,height:w.height,rotation:0},h)},B=t.data.regions;try{return B.map(d)}catch(w){return console.error(w),[]}},fa=async(l,e,t,A)=>{const a=t.data,n=a.assetUrl,i=await c.getPatternImageData(n);try{const o=c.getVariant(a,A.option);o&&(e[A.stepName]={selectedVariants:[o]});const s=async r=>{var Q;const g=await c.generateFrameSVG(r||{width:1,height:1},(Q=o==null?void 0:o.asset)==null?void 0:Q.fileLink),d=await c.getFrameData(g),B=c.generate(),w=l.find(E=>E.panelId===r.panelId);if(!w)throw new k(r);const h=c.calculateOffsets(i,d,{scale:a.scale,left:a.x,top:a.y});return[new c.CreateElementCommand({id:B,path:d.path,dataWidth:d.width,dataHeight:d.height,type:c.LayoutElementType.Frame,focalBlur:A.data.focalBlur,focalBlurStrength:A.data.focalBlurStrength,focalBlurRadius:A.data.focalBlurRadius,forceImageCover:A.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,h)]};return(await Promise.all(A.data.regions.map(r=>s(r)))).flat()}catch(o){return console.error(o),[]}},Da=async(l,e,t,A)=>{var D,p;const a=t.data,n=A.option;if(!n)return console.error(`No option for step ${A.stepName}.`),[];const i=((D=n.variants)==null?void 0:D.find(f=>f.id===a.illustrationVariantId))||c.getDefaultVariant(n);if(!i)return console.error(`No variant with ID: ${a.illustrationVariantId}`),[];if(!i.asset)return console.error(`No asset for variant with ID: ${a.illustrationVariantId}`),[];e[A.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: ${a.illustrationVariantId}`),[];const s=await c.fetchAsString(o,!0),r=/<svg.*?<\/svg>/s,g=s.match(r)||[],d=(g==null?void 0:g.length)>0?g[0]:"",h=c.domParser().parseFromString(d,"image/svg+xml").firstElementChild;if(!h)return console.error("Failed to read SVG."),[];c.sanitizeSvgTree(h);const Q={};c.traverse(h,f=>{ma.includes(f.tagName)&&!f.attributes.getNamedItem("fill")&&f.setAttribute("fill","#000000");const y=f.attributes.getNamedItem("fill");if(y&&y.value!=="none"){const S=y.value,N=`spiff-fill-${S.replace(/\W/g,"")}`;f.classList.add(N),Q[N]={browserValue:S}}const Y=f.attributes.getNamedItem("stroke");if(Y&&Y.value!=="none"){const S=Y.value,N=`spiff-stroke-${S.replace(/\W/g,"")}`;f.classList.add(N),Q[N]={browserValue:S}}});const m=c.xmlSerializer().serializeToString(h),C=a.colors;if(C){for(const[f,y]of Object.entries(Q))for(const Y of Object.keys(C))if(y.browserValue===Y){Q[f]={browserValue:C[Y]};break}}const I=f=>{const y=l.find(S=>S.panelId===f.panelId);if(!y)throw new k(f);const Y=c.generate();return new c.CreateElementCommand({colors:Q,id:Y,svg:m,type:c.LayoutElementType.Illustration,y:f.top,x:f.left,rotation:f.rotation,width:f.width,height:f.height,layer:f.layer,layerIndex:f.layerIndex,immutable:f.immutable},y)},F=A.data.regions;try{return F.map(I)}catch(f){return console.error(f),[]}},pa=async(l,e,t)=>{const A=await Nt(t.data.module),a=e.data,n=(o,s)=>{const r=l.find(d=>d.panelId===s.panelId);if(!r)throw new k(s);const g=c.generate();return new c.CreateElementCommand({colors:{},id:g,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=t.data.regions;try{return i.map(o=>n(A.svgPrint(a.text,o),o))}catch(o){return console.error(o),[]}},Fa=async(l,e,t,A)=>{var g,d;const a=t.data,n=A.option;if(!n)return console.error(`No option for step ${A.stepName}.`),[];const i=((g=n.variants)==null?void 0:g.find(B=>B.id===a.pictureVariantId))||c.getDefaultVariant(n);if(!i)return console.error(`No variant with ID: ${a.pictureVariantId}`),[];if(!i.asset)return console.error(`No asset for variant with ID: ${a.pictureVariantId}`),[];e[A.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: ${a.pictureVariantId}`),[];const s=B=>{const w=l.find(Q=>Q.panelId===B.panelId);if(!w)throw new k(B);const h=c.generate();return new c.CreateElementCommand({id:h,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=A.data.regions;try{return r.map(s)}catch(B){return console.error(B),[]}},Ma=async(l,e,t,A)=>{var r;const a=t.data,n=A.option;if(!n)return console.error(`No option for step ${A.stepName}.`),[];const i=((r=n.variants)==null?void 0:r.find(g=>g.id===a.colorVariantId))||c.getDefaultVariant(n);if(!i)return console.error(`No variant with ID: ${a.colorVariantId}`),[];e[A.stepName]={selectedVariants:[i]};const o=g=>{const d=l.find(E=>E.panelId===g.panelId);if(!d)throw new k(g);const B=`
1930
1935
  <svg
1931
1936
  xmlns="http://www.w3.org/2000/svg"
1932
1937
  xmlnsXlink="http://www.w3.org/1999/xlink"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spiffcommerce/core",
3
- "version": "16.8.1",
3
+ "version": "16.8.3-beta.0",
4
4
  "description": "Core client API for interacting with the Spiff Commerce backend.",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/index.umd.cjs",
@@ -52,7 +52,7 @@
52
52
  },
53
53
  "dependencies": {
54
54
  "@apollo/client": "^3.8.3",
55
- "@spiffcommerce/papyrus": "6.2.1",
55
+ "@spiffcommerce/papyrus": "6.2.2",
56
56
  "graphql": "^16.8.0",
57
57
  "lodash.clonedeep": "^4.5.0",
58
58
  "lodash.debounce": "^4.0.8",