@spiffcommerce/core 16.8.2 → 16.8.3

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
@@ -7429,7 +7429,7 @@ const En = [
7429
7429
  assetUrl: w,
7430
7430
  name: Q.names.fullName.en
7431
7431
  };
7432
- })(), B = t.data.replaceableText ? t.data.replaceableText.replace("{{}}", n.text) : n.text, l = WA(B, {
7432
+ })(), B = (t.data.replaceableText ? t.data.replaceableText.replace("{{}}", n.text) : n.text) || "", l = WA(B, {
7433
7433
  vertical: t.data.vertical,
7434
7434
  uppercase: t.data.uppercase
7435
7435
  }), d = async (w) => {
@@ -1946,7 +1946,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
1946
1946
  fill="${i==null?void 0:i.color}"
1947
1947
  />
1948
1948
  </svg>
1949
- `,h={"spiff-fill-shape":{browserValue:i.color||"#000000"}},Q=c.generate();return new c.CreateElementCommand({colors:h,id:Q,svg:B,type:c.LayoutElementType.Illustration,y:g.top,x:g.left,rotation:g.rotation,width:g.width,height:g.height,layer:g.layer,layerIndex:g.layerIndex,immutable:g.immutable},d)},s=A.data.regions;try{return s.map(o)}catch(g){return console.error(g),[]}},Sa=async(l,e,t)=>{const A=[],n=(()=>{var r,g;return e.type===c.StepType.ProductOverlay?t||((r=e.data.asset)==null?void 0:r.fileLink)||"":((g=e.data.asset)==null?void 0:g.fileLink)||""})(),o=(()=>n.endsWith(".jpeg")||n.endsWith(".jpg")||n.endsWith(".png")?c.LayoutElementType.Image:(n.endsWith(".svg"),c.LayoutElementType.Illustration))(),s=e.data.regions;if(o==="image")try{s.forEach(r=>{const g=l.find(B=>B.panelId===r.panelId);if(!g)throw new k(r);const d={id:c.generate(),src:n,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"};A.push(new c.CreateElementCommand(d,g))})}catch(r){console.error(r)}else{const r=await c.fetchAsString(n,!0),g=d=>{const B=/<svg.*?<\/svg>/s,w=d.match(B)||[],h=(w==null?void 0:w.length)>0?w[0]:"",m=c.domParser().parseFromString(h,"image/svg+xml").firstElementChild;if(!m)throw new X("Failed to read SVG.");return c.sanitizeSvgTree(m),c.xmlSerializer().serializeToString(m)};s.forEach(d=>{const B=l.find(h=>h.panelId===d.panelId);if(!B)throw new k(d);const w={id:c.generate(),src:n,asset_key:n,svg:g(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};A.push(new c.CreateElementCommand(w,B))})}return A},ya=async(l,e,t,A)=>{const a=[],n=t.data,i=30,o=E=>E.vertical?"center":E.textAlign||"center",s=()=>{var I;const E=A.option;if(!E)return;const m=((I=E.variants)==null?void 0:I.find(F=>F.id===n.fontVariantId))||c.getDefaultVariant(E);if(!m||!m.asset)return;e[A.stepName]={selectedVariants:[m]};const C=m.asset.fileLink;if(C)return C},g=await(async()=>{const E=s();if(!E)return;const m=await c.loadFont(E);return{assetUrl:E,name:m.names.fullName.en}})(),d=A.data.replaceableText?A.data.replaceableText.replace("{{}}",n.text):n.text,B=c.applyTextTransformations(d,{vertical:A.data.vertical,uppercase:A.data.uppercase}),w=async E=>{const m=E.colorOption;if(!m)return;const C=T.getDefaultVariant(m);return C==null?void 0:C.color},h=n.color||await w(A.data),Q=A.data.regions;for(const E of Q){const m=l.find(I=>I.panelId===E.panelId);if(!m)continue;const C={stepName:t.name,id:c.generate(),align:o(A.data),curved:A.data.curved,fill:n.color||h||"#000000",fontData:g,fontSize:A.data.size||i,height:E.height,layer:E.layer,layerIndex:E.layerIndex,paths:A.data.paths,rotation:E.rotation,text:B,type:c.LayoutElementType.Textbox,vertical:A.data.vertical,verticalAlign:A.data.verticalAlign||"middle",width:E.width,x:E.left,y:E.top};if(g){const[I,F]=c.determineCorrectFontSizeAndLines(A.data.size||i,g,E,[c.applyTextTransformations(B,{vertical:A.data.vertical,uppercase:A.data.uppercase})],{size:A.data.size,minSize:A.data.minSize,maxSize:A.data.maxSize});a.push(new c.CreateElementCommand({...C,fontSize:I,text:C.curved?C.text:(F||[]).join(`
1949
+ `,h={"spiff-fill-shape":{browserValue:i.color||"#000000"}},Q=c.generate();return new c.CreateElementCommand({colors:h,id:Q,svg:B,type:c.LayoutElementType.Illustration,y:g.top,x:g.left,rotation:g.rotation,width:g.width,height:g.height,layer:g.layer,layerIndex:g.layerIndex,immutable:g.immutable},d)},s=A.data.regions;try{return s.map(o)}catch(g){return console.error(g),[]}},Sa=async(l,e,t)=>{const A=[],n=(()=>{var r,g;return e.type===c.StepType.ProductOverlay?t||((r=e.data.asset)==null?void 0:r.fileLink)||"":((g=e.data.asset)==null?void 0:g.fileLink)||""})(),o=(()=>n.endsWith(".jpeg")||n.endsWith(".jpg")||n.endsWith(".png")?c.LayoutElementType.Image:(n.endsWith(".svg"),c.LayoutElementType.Illustration))(),s=e.data.regions;if(o==="image")try{s.forEach(r=>{const g=l.find(B=>B.panelId===r.panelId);if(!g)throw new k(r);const d={id:c.generate(),src:n,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"};A.push(new c.CreateElementCommand(d,g))})}catch(r){console.error(r)}else{const r=await c.fetchAsString(n,!0),g=d=>{const B=/<svg.*?<\/svg>/s,w=d.match(B)||[],h=(w==null?void 0:w.length)>0?w[0]:"",m=c.domParser().parseFromString(h,"image/svg+xml").firstElementChild;if(!m)throw new X("Failed to read SVG.");return c.sanitizeSvgTree(m),c.xmlSerializer().serializeToString(m)};s.forEach(d=>{const B=l.find(h=>h.panelId===d.panelId);if(!B)throw new k(d);const w={id:c.generate(),src:n,asset_key:n,svg:g(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};A.push(new c.CreateElementCommand(w,B))})}return A},ya=async(l,e,t,A)=>{const a=[],n=t.data,i=30,o=E=>E.vertical?"center":E.textAlign||"center",s=()=>{var I;const E=A.option;if(!E)return;const m=((I=E.variants)==null?void 0:I.find(F=>F.id===n.fontVariantId))||c.getDefaultVariant(E);if(!m||!m.asset)return;e[A.stepName]={selectedVariants:[m]};const C=m.asset.fileLink;if(C)return C},g=await(async()=>{const E=s();if(!E)return;const m=await c.loadFont(E);return{assetUrl:E,name:m.names.fullName.en}})(),d=(A.data.replaceableText?A.data.replaceableText.replace("{{}}",n.text):n.text)||"",B=c.applyTextTransformations(d,{vertical:A.data.vertical,uppercase:A.data.uppercase}),w=async E=>{const m=E.colorOption;if(!m)return;const C=T.getDefaultVariant(m);return C==null?void 0:C.color},h=n.color||await w(A.data),Q=A.data.regions;for(const E of Q){const m=l.find(I=>I.panelId===E.panelId);if(!m)continue;const C={stepName:t.name,id:c.generate(),align:o(A.data),curved:A.data.curved,fill:n.color||h||"#000000",fontData:g,fontSize:A.data.size||i,height:E.height,layer:E.layer,layerIndex:E.layerIndex,paths:A.data.paths,rotation:E.rotation,text:B,type:c.LayoutElementType.Textbox,vertical:A.data.vertical,verticalAlign:A.data.verticalAlign||"middle",width:E.width,x:E.left,y:E.top};if(g){const[I,F]=c.determineCorrectFontSizeAndLines(A.data.size||i,g,E,[c.applyTextTransformations(B,{vertical:A.data.vertical,uppercase:A.data.uppercase})],{size:A.data.size,minSize:A.data.minSize,maxSize:A.data.maxSize});a.push(new c.CreateElementCommand({...C,fontSize:I,text:C.curved?C.text:(F||[]).join(`
1950
1950
  `)},m))}else a.push(new c.CreateElementCommand(C,m))}return a},Ya=(l,e)=>l.conditions?l.conditions.every(t=>{const A=e[t.targetStepName];if(A&&A.selectedVariants){const a=A.selectedVariants;return t.requiredVariantSelections.some(n=>a.find(i=>i.id===n)!==void 0)}return!1}):!0,Wt=async(l,e,t,A)=>{const a=[],n={};for(const i of l){const o=e.steps.find(s=>s.stepName===i.name);if(o)switch(o.type){case c.StepType.DigitalContent:a.push(...await Ia(t,i,o));break;case c.StepType.Frame:case c.StepType.Photo:a.push(...await fa(t,n,i,o));break;case c.StepType.Illustration:a.push(...await Da(t,n,i,o));break;case c.StepType.Module:a.push(...await pa(t,i,o));break;case c.StepType.Picture:a.push(...await Fa(t,n,i,o));break;case c.StepType.Shape:a.push(...await Ma(t,n,i,o));break;case c.StepType.Text:a.push(...await ya(t,n,i,o));break}}for(const i of e.steps)i.type!==c.StepType.SilentIllustration&&i.type!==c.StepType.ProductOverlay||Ya(i,n)&&a.push(...await Sa(t,i,A));return a};class Fe{constructor(e){this.handleCompleteRender=null;const t=new Map;e.forEach(A=>t.set(A.id,new Pa(A.id,A.name,this))),this.layouts=t}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 Me;const Na=()=>(Me!==void 0||(Me=!!c.createCanvas().getContext("webgl2")),Me);class Pa{constructor(e,t,A){this.hasSetStaticContext=!1,this.interactiveDirty=!1,this.staticCtxDirty=!1,this.lastRequestedRenderArguments=void 0,this.lastCompletedStaticRender=void 0,this.lastModificationID=void 0,this.renderQueue=new Ue(2),this.id=e,this.name=t,this.service=A}getID(){return this.id}getName(){return this.name}getStaticContext(){return this.textureCtx}setStaticContext(e){if(this.textureCtx=e,this.lastRequestedRenderArguments){const{workflow:t,layouts:A,variationRecord:a,productOverlayImageUrl:n}=this.lastRequestedRenderArguments;this.render(t,A,a,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,t,A,a){const n=Ae(t);this.lastRequestedRenderArguments={workflow:e,layouts:n,variationRecord:A,productOverlayImageUrl:a};const i=this.getStaticContext();if(!i){this.markLastCompletedStaticRender(),this.setStaticContextDirty(!1);return}this.renderQueue.enqueue(new Ra(this.getID(),i,Na(),()=>{this.markLastCompletedStaticRender(),this.setStaticContextDirty(!0)},e,n,A,a))}}class Ra extends xe{constructor(e,t,A,a,n,i,o,s){super(),this.layoutId=e,this.ctx=t,this.nonPOTSupport=A,this.onRender=a,this.workflow=n,this.layouts=i,this.variationRecord=o,this.productOverlayImageUrl=s}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,t=4096){const A=t/e.width,a=t/e.height,n=Math.min(A,a);return n>1?e:{width:e.width*n,height:e.height*n}}async execute(){const e=this.layouts.find(B=>B.layoutState.layout.id===this.layoutId);if(!e)return;const t=e.layoutState.elements||[];if(this.variationRecord){const B=this.variationRecord.values.map(Q=>({stepName:Q.stepName,stepAspectType:Q.aspect,value:Q.value})),w=await qt(Xt(B,this.workflow),this.workflow,this.layouts.map(Q=>Q.layoutState.layout),this.productOverlayImageUrl),h=w==null?void 0:w.layouts[e.layoutState.layout.id];((h==null?void 0:h.elements)||[]).forEach(Q=>{const E=t.find(m=>m.stepName===Q.stepName);E&&E.type===c.LayoutElementType.Textbox?(E.text=Q.text,E.fontSize=Q.fontSize):t.push(Q)}),c.sortElementsByLayersWithIndex(t)}const A=e.layoutState.layout.width,a=e.layoutState.layout.height,n=this.getDynamicTextureResolution().width,i=this.getDynamicTextureResolution().height;let o,s;if(this.nonPOTSupport){const B=n/i;A/a<B?(o=n,s=a*(n/A)):(o=A*(i/a),s=i);const h=this.resizeFit({width:o,height:s});o=h.width,s=h.height}else o=this.getDynamicTextureResolution().width,s=this.getDynamicTextureResolution().height;const r=c.getSvgElement(e.layoutState.layout,t,{renderingConfiguration:{purpose:c.LayoutRenderingPurpose.ThreeD}}),g=c.renderPapyrusComponentAsString(r),d=await $e.Pith.from(this.ctx,g,{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 Xt=(l,e)=>{const t=[];return l.forEach(A=>{const a=e.steps.find(n=>n.stepName===A.stepName);(a==null?void 0:a.type)===c.StepType.Text&&A.stepAspectType==="Text"&&t.push({name:a.stepName,data:{text:A.value}})}),t},qt=async(l,e,t,A)=>{let a={serializableWorkflow:{steps:[]},layouts:{}};a=new c.GroupCommand(t.map(s=>new c.CreateLayoutCommand(s))).apply(a);const i=await Wt(l,e,t,A);return new c.GroupCommand(i).apply(a)},Ha=M.gql`
1951
1951
  fragment ProductFields on Product {
1952
1952
  id
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spiffcommerce/core",
3
- "version": "16.8.2",
3
+ "version": "16.8.3",
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",