@spiffcommerce/core 0.10.254 → 1.0.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/main.js +2 -2
- package/dist/module.js +1 -1
- package/dist/types.d.ts +24 -2
- package/package.json +2 -2
package/dist/main.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var t=require("@apollo/client"),A=require("lodash.clonedeep"),e=require("react/jsx-runtime"),n=require("opentype.js"),i=require("buffer"),a=require("axios"),o=require("https"),r=require("file-type"),s=require("util"),c=require("css"),g=require("canvas"),l=require("exif"),B=require("canvg"),w=require("@apollo/client/link/context"),h=require("@apollo/client/link/error"),d=require("cross-fetch"),E=require("react"),u=require("lodash.isequal"),Q=require("react-dom/server"),C=require("qrcode"),m=require("svg-path-bbox"),p=require("lodash.debounce");function f(t,A,e,n){Object.defineProperty(t,A,{get:e,set:n,enumerable:!0,configurable:!0})}var D="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{};function I(t){return t&&t.__esModule?t.default:t}function y(t,A,e,n){Object.defineProperty(t,A,{get:e,set:n,enumerable:!0,configurable:!0})}f(module.exports,"SpiffCommerceClient",(()=>Mo)),f(module.exports,"CommandContext",(()=>MA)),f(module.exports,"spiffCoreConfiguration",(()=>Ze)),f(module.exports,"PromiseQueue",(()=>di)),f(module.exports,"QueueablePromise",(()=>hi)),f(module.exports,"MockWorkflowManager",(()=>Fo)),f(module.exports,"InformationMessageType",(()=>Ta)),f(module.exports,"StepHandle",(()=>Xa)),f(module.exports,"TextStepHandle",(()=>oo)),f(module.exports,"FrameStepHandle",(()=>No)),f(module.exports,"BulkStepHandle",(()=>_a)),f(module.exports,"ShapeStepHandle",(()=>ao)),f(module.exports,"IllustrationStepHandle",(()=>to)),f(module.exports,"MaterialStepHandle",(()=>Ao)),f(module.exports,"ModelStepHandle",(()=>eo)),f(module.exports,"PictureStepHandle",(()=>no)),f(module.exports,"QuestionStepHandle",(()=>io)),f(module.exports,"BulkPriceCalculationStrategy",(()=>vn)),f(module.exports,"OptionNotFoundError",(()=>Ue)),f(module.exports,"LayoutNotFoundError",(()=>Ge)),f(module.exports,"AssetNotFoundError",(()=>be)),f(module.exports,"ResourceNotFoundError",(()=>ke)),f(module.exports,"MisconfigurationError",(()=>Je)),f(module.exports,"ParseError",(()=>ze)),f(module.exports,"UnhandledBehaviorError",(()=>Oe)),f(module.exports,"assetService",(()=>ln)),f(module.exports,"designService",(()=>uo)),f(module.exports,"createDesign",(()=>wo)),f(module.exports,"optionService",(()=>dn)),f(module.exports,"persistenceService",(()=>Xe)),f(module.exports,"graphQlManager",(()=>An)),f(module.exports,"toast",(()=>ba)),f(module.exports,"FrameService",(()=>pa)),f(module.exports,"getBoundedOffsets",(()=>Ca)),f(module.exports,"frameStepService",(()=>Ya)),f(module.exports,"modelStepService",(()=>Na)),f(module.exports,"materialStepService",(()=>Sa)),f(module.exports,"shapeStepService",(()=>Ua)),f(module.exports,"questionStepService",(()=>Pa)),f(module.exports,"digitalContentStepService",(()=>xa)),f(module.exports,"moduleStepService",(()=>Ra)),f(module.exports,"pictureStepService",(()=>Ha)),f(module.exports,"textStepService",(()=>Oa)),f(module.exports,"illustrationStepService",(()=>va)),f(module.exports,"ProductCameraRig",(()=>Fn)),f(module.exports,"FrameStep",(()=>vo)),f(module.exports,"ConversionLocation",(()=>Nn)),f(module.exports,"ConversionData",(()=>Hn)),f(module.exports,"getWorkflow",(()=>Io)),f(module.exports,"AssetType",(()=>T)),f(module.exports,"BringForwardCommand",(()=>ne)),f(module.exports,"BringToFrontCommand",(()=>Ae)),f(module.exports,"BringToBackCommand",(()=>ee)),f(module.exports,"CanvasCommand",(()=>PA)),f(module.exports,"CreateElementCommand",(()=>zA)),f(module.exports,"CreateLayoutCommand",(()=>LA)),f(module.exports,"DeleteElementCommand",(()=>TA)),f(module.exports,"FontAlignmentCommand",(()=>qA)),f(module.exports,"FontColorCommand",(()=>KA)),f(module.exports,"FontSizeCommand",(()=>VA)),f(module.exports,"FontSourceCommand",(()=>XA)),f(module.exports,"GroupCommand",(()=>JA)),f(module.exports,"LayoutElementFactory",(()=>Ne)),f(module.exports,"LayoutElementType",(()=>N)),f(module.exports,"MoveCommand",(()=>GA)),f(module.exports,"ResizeCommand",(()=>kA)),f(module.exports,"RotateCommand",(()=>bA)),f(module.exports,"SendBackwardsCommand",(()=>ie)),f(module.exports,"StepAspectType",(()=>W)),f(module.exports,"StepType",(()=>K)),f(module.exports,"TextChangeCommand",(()=>$A)),f(module.exports,"UnitOfMeasurement",(()=>b)),f(module.exports,"dataUrlFromExternalUrl",(()=>Ut)),f(module.exports,"findElement",(()=>SA)),f(module.exports,"frameDataCache",(()=>he)),f(module.exports,"generate",(()=>F)),f(module.exports,"getAxisAlignedBoundingBox",(()=>$)),f(module.exports,"generateSVGWithUnknownColors",(()=>IA)),f(module.exports,"getAttributesFromArrayBuffer",(()=>le)),f(module.exports,"rehydrateSerializedLayout",(()=>HA)),f(module.exports,"getFrameData",(()=>Qe)),f(module.exports,"getSvgElement",(()=>FA)),f(module.exports,"loadFontFromDataUrl",(()=>Kt)),f(module.exports,"loadFontFromExternalUrl",(()=>jt)),f(module.exports,"determineCorrectFontSizeAndLines",(()=>ye)),f(module.exports,"patternImageDataCache",(()=>we)),f(module.exports,"generateCommands",(()=>Ki)),f(module.exports,"registerJSDOM",(()=>It)),f(module.exports,"minZoom",(()=>si)),f(module.exports,"AdvancedEditor",(()=>ea)),f(module.exports,"TransformWrapper",(()=>Ro)),f(module.exports,"EditorCore",(()=>Aa)),f(module.exports,"useLayouts",(()=>Qn)),f(module.exports,"useEditorState",(()=>xn)),f(module.exports,"useEditorInteraction",(()=>gi)),f(module.exports,"useShortcutCombination",(()=>li)),f(module.exports,"commandReducer",(()=>Dn)),f(module.exports,"getDefaultState",(()=>fn)),f(module.exports,"CommandContextContext",(()=>En)),f(module.exports,"AdvancedEditorStateProvider",(()=>yn)),f(module.exports,"AdvancedEditorContext",(()=>In)),f(module.exports,"UICommand",(()=>Mn)),f(module.exports,"EditorSubMenu",(()=>mn)),f(module.exports,"ElementEventType",(()=>Gn)),f(module.exports,"KeyEvent",(()=>kn)),f(module.exports,"gatherVaryingStepAspects",(()=>la));var M="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==D?D:{},x={};y(x,"CanvasCommand",(()=>PA)),y(x,"UpdateWorkflowStateCommand",(()=>UA)),y(x,"MoveCommand",(()=>GA)),y(x,"RotateCommand",(()=>bA)),y(x,"ResizeCommand",(()=>kA)),y(x,"GroupCommand",(()=>JA)),y(x,"CreateLayoutCommand",(()=>LA)),y(x,"ClearLayoutCommand",(()=>OA)),y(x,"CreateElementCommand",(()=>zA)),y(x,"DeleteElementCommand",(()=>TA)),y(x,"CloneElementCommand",(()=>jA)),y(x,"FontColorCommand",(()=>KA)),y(x,"FontSizeCommand",(()=>VA)),y(x,"FontAlgorithmCommand",(()=>WA)),y(x,"FontSourceCommand",(()=>XA)),y(x,"FontAlignmentCommand",(()=>qA)),y(x,"UpdateFramePattern",(()=>ZA)),y(x,"TextChangeCommand",(()=>$A)),y(x,"IllustrationColorCommand",(()=>_A)),y(x,"IllustrationCacheCommand",(()=>te)),y(x,"BringToFrontCommand",(()=>Ae)),y(x,"BringToBackCommand",(()=>ee)),y(x,"BringForwardCommand",(()=>ne)),y(x,"SendBackwardsCommand",(()=>ie)),y(x,"LayerCommand",(()=>ae)),y({},"generate",(()=>F));const F=()=>{const t=()=>Math.floor(65536*(1+Math.random())).toString(16).substring(1);return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()};var Y={};y(Y,"ElementNotFoundError",(()=>vA)),y(Y,"findElement",(()=>SA)),y(Y,"findLayoutForElement",(()=>NA)),y(Y,"updatedLayoutForElement",(()=>RA)),y(Y,"rehydrateSerializedLayout",(()=>HA));var v={};y(v,"CommandContext",(()=>MA)),y(v,"getSvgElement",(()=>FA)),y(v,"elementFactory",(()=>xA)),y(v,"sortElementsByLayersWithIndex",(()=>YA)),y({},"SVGLayout",(()=>q));var S={};let N;var R;let H;var P;let U;var G;let b;var k;let J;var L;let O;var z;let T;var j;let K;var V;let W;var X;y(S,"LayoutElementType",(()=>N)),y(S,"LayoutRenderingPurpose",(()=>H)),y(S,"TextAlgorithm",(()=>U)),y(S,"UnitOfMeasurement",(()=>b)),y(S,"ScaleAxis",(()=>J)),y(S,"MaterialEffectMode",(()=>O)),y(S,"AssetType",(()=>T)),y(S,"StepType",(()=>K)),y(S,"StepAspectType",(()=>W)),(R=N||(N={})).Frame="frame",R.Image="image",R.Illustration="illustration",R.Textbox="textbox",(P=H||(H={}))[P.ThreeD=0]="ThreeD",P[P.FreeDesign=1]="FreeDesign",P[P.Print=2]="Print",(G=U||(U={})).Autosize="Autosize",G.Traditional="Traditional",(k=b||(b={})).Pixel="px",k.Millimeter="mm",k.Centimeter="cm",(L=J||(J={}))[L.North=0]="North",L[L.Northeast=1]="Northeast",L[L.East=2]="East",L[L.Southeast=3]="Southeast",L[L.South=4]="South",L[L.Southwest=5]="Southwest",L[L.West=6]="West",L[L.Northwest=7]="Northwest",(z=O||(O={})).None="None",z.RemoveWhenSelected="RemoveWhenSelected",z.ApplyWhenSelected="ApplyWhenSelected",(j=T||(T={})).Font="Font",j.Frame="Frame",j.Illustration="Illustration",j.Image="Image",j.Model="Model",j.Material="Material",j.Color="Color",j.QuestionnaireCollateral="QuestionnaireCollateral",j.RequestCollateral="RequestCollateral",j.SignupCollateral="SignupCollateral",j.Video="Video",j.ColorProfile="ColorProfile",(V=K||(K={})).Bulk="Bulk",V.DigitalContent="DigitalContent",V.Finish="Finish",V.Frame="Frame",V.Illustration="Illustration",V.Introduction="Introduction",V.Material="Material",V.Model="Model",V.Module="Module",V.Picture="Picture",V.Photo="Photo",V.ProductOverlay="ProductOverlay",V.Question="Question",V.Shape="Shape",V.SilentIllustration="SilentIllustration",V.Text="Text",(X=W||(W={})).Color="Color",X.Colors="Colors",X.Selection="Selection",X.Selections="Selections",X.Text="Text",X.Upload="Upload";const q=({backgroundColor:t,outlineColor:A,borderRadius:n,configuration:i,elements:a,height:o,maxHeight:r,maxWidth:s,outlineArea:c,position:g,preserveAspectRatio:l,viewBox:B,width:w})=>{const h=n||0,d=2*(c?.scale||1),E=B||{x:0,y:0,width:w,height:o},u=`${E.x} ${E.y} ${E.width} ${E.height}`,Q=F(),C=i.purpose===H.FreeDesign&&(0,e.jsx)("defs",{children:(0,e.jsx)("clipPath",{id:"viewboxClip",children:(0,e.jsx)("rect",{width:E.width,height:E.height,rx:h})})}),m=i.colorProfiles?.map(((t,A)=>(0,e.jsx)("color-profile",{name:t.name,xlinkHref:t.key,children:" "},A))),p=YA(a.map((t=>({...t,_renderingConfiguration:i,mask:c?`url(#viewmask-${Q})`:void 0}))));return(0,e.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",xmlSpace:"preserve",version:"1.1",preserveAspectRatio:l,width:w,height:o,style:{gridColumn:1,gridRow:1,maxWidth:s,maxHeight:r,position:g},viewBox:u,children:[m,C,!!t&&(0,e.jsx)("rect",{id:"layout-background",width:E.width,height:E.height,fill:t,rx:h}),(0,e.jsx)("g",{id:"element-group",clipPath:i.purpose===H.FreeDesign?"url(#viewboxClip)":void 0,children:p.map((t=>xA(t))).filter((t=>!!t))}),c&&(0,e.jsx)("rect",{x:c.x,y:c.y,width:c.width,height:c.height,fill:"none",stroke:c.hidden?"none":A||"#aaaaaa",strokeWidth:d/2,strokeDasharray:`${2*d} ${d}`}),c&&(0,e.jsxs)("mask",{id:`viewmask-${Q}`,children:[(0,e.jsx)("rect",{x:E.x,y:E.y,width:E.width,height:E.height,fill:"black"}),(0,e.jsx)("rect",{x:c.x,y:c.y,width:c.width,height:c.height,fill:"white"})]})]})};y({},"Image",(()=>dt));var Z={};y(Z,"getAxisAlignedBoundingBox",(()=>$)),y(Z,"degreesToRadians",(()=>tt)),y(Z,"findAngle",(()=>_)),y(Z,"radiansToDegrees",(()=>At)),y(Z,"isCloseToValue",(()=>et)),y(Z,"getTrueCoordinates",(()=>nt)),y(Z,"getPointOfRotation",(()=>it)),y(Z,"getNWPoint",(()=>at)),y(Z,"getNEPoint",(()=>ot)),y(Z,"getSWPoint",(()=>rt)),y(Z,"getSEPoint",(()=>st)),y(Z,"turnRightClockwise",(()=>ct)),y(Z,"currentDirection",(()=>gt)),y(Z,"getElementVertices",(()=>lt)),y(Z,"rotateAroundPoint",(()=>Bt)),y(Z,"mmPerPixel",(()=>wt)),y(Z,"cmPerPixel",(()=>ht));const $=(t,A,e,n,i)=>{const a=tt(i),o=e/2,r=n/2,s=t+o,c=A+r,g=Math.sin(a),l=Math.cos(a),B=-r,w=o*l-B*g,h=o*l-r*g,d=o*g+B*l,E=o*g+r*l,u=Math.max(Math.abs(w),Math.abs(h)),Q=Math.max(Math.abs(d),Math.abs(E));return{minX:s-u,maxX:s+u,minY:c-Q,maxY:c+Q}},_=(t,A,e)=>{const n=Math.sqrt(Math.pow(A.x-t.x,2)+Math.pow(A.y-t.y,2)),i=Math.sqrt(Math.pow(A.x-e.x,2)+Math.pow(A.y-e.y,2)),a=Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2));return Math.acos((i*i+n*n-a*a)/(2*i*n))*(180/Math.PI)},tt=t=>t*(Math.PI/180),At=t=>t*(180/Math.PI),et=(t,A,e)=>Math.abs(t-A)<e,nt=(t,A,e)=>{const n=Math.sin(tt(e)),i=Math.cos(tt(e));return{x:(t.x-A.x)*i-(t.y-A.y)*n+A.x,y:(t.x-A.x)*n+(t.y-A.y)*i+A.y}},it=(t,A)=>({x:(t.x+A.x)/2,y:(t.y+A.y)/2}),at=(t,A,e,n)=>({x:t.x+A?.x*e,y:t.y+A?.y*n}),ot=(t,A,e,n)=>({x:t.x+(A?.x+A?.width)*e,y:t.y+A?.y*n}),rt=(t,A,e,n)=>({x:t.x+A?.x*e,y:t.y+(A?.y+A?.height)*n}),st=(t,A,e,n)=>({x:t.x+(A?.x+A?.width)*e,y:t.y+(A?.y+A?.height)*n}),ct=t=>{switch(t){case J.North:return J.East;case J.East:return J.South;case J.South:return J.West;case J.West:return J.North;case J.Northwest:return J.Northeast;case J.Northeast:return J.Southeast;case J.Southeast:return J.Southwest;case J.Southwest:return J.Northwest}},gt=(t,A)=>A>45&&A<=135?ct(t):A>135&&A<=225?ct(ct(t)):A>225&&A<=315?ct(ct(ct(t))):t,lt=(t,A={x:0,y:0},e={x:1,y:1})=>{const n=tt(t.rotation),i={x:A.x+t.x*e.x,y:A.x+t.y*e.y},a={x:t.x+t.width,y:t.y},o={x:A.x+(t.x+t.width)*e.x,y:A.y+(t.height+t.y)*e.y},r={x:A.x+t.x*e.x,y:A.y+(t.height+t.y)*e.y},s={x:(r.x+o.x)/2,y:r.y-t.height*e.y/2};return{a:Bt(i,s,n),b:Bt(a,s,n),c:Bt(o,s,n),d:Bt(r,s,n),center:s}},Bt=(t,A,e)=>{const n=Math.sin(e),i=Math.cos(e);return{x:(t.x-A.x)*i-(t.y-A.y)*n+A.x,y:(t.x-A.x)*n+(t.y-A.y)*i+A.y}},wt=.352778,ht=.035277,dt=t=>{const A=t.rotation||0,n=tt(A),i=Math.cos(n),a=-Math.sin(n);return(0,e.jsx)("g",{mask:t.stepName||t.productOverlay?void 0:t.mask,children:(0,e.jsx)("g",{transform:`\n matrix(1, 0, 0, 1, ${t.x}, ${t.y})\n matrix(1, 0, 0, 1, ${t.width/2}, ${t.height/2})\n matrix(${i}, ${-a}, ${a}, ${i}, 0, 0)\n matrix(1, 0, 0, 1, ${-t.width/2}, ${-t.height/2})\n `,children:(0,e.jsx)("image",{xlinkHref:t.src,preserveAspectRatio:t.preserveAspectRatio,width:t.width,height:t.height})})})};y({},"Frame",(()=>Et));const Et=t=>{const A=`spiff-frame-${t.id}`,n=`spiff-frame-blur-${t.id}`,i=`spiff-frame-blur-edge-${t.id}`,a=`spiff-frame-focal-mask-${t.id}`,o=!!t.focalBlur&&!!t.pattern,r=t.rotation||0,s=tt(r),c=Math.cos(s),g=-Math.sin(s);return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("defs",{children:(o=>{const r=t.pattern?.x||0,s=t.pattern?.y||0,c=t.pattern?t.pattern.width*t.pattern.scaleX+Math.abs(r):256,g=t.pattern?t.pattern.height*t.pattern.scaleY+Math.abs(s):256,l=t.pattern?t.pattern.width*t.pattern.scaleX:256,B=t.pattern?t.pattern.height*t.pattern.scaleY:256;return(0,e.jsxs)("g",{mask:t.stepName?void 0:t.mask,children:[(0,e.jsx)("pattern",{patternUnits:t.pattern?void 0:"userSpaceOnUse",x:0,y:0,width:t.pattern?1:c,height:t.pattern?1:g,"data-frame-width":t.pattern?c:void 0,"data-frame-height":t.pattern?g:void 0,id:A,children:(0,e.jsx)("image",{preserveAspectRatio:"none",x:r,y:s,width:l,height:B,xlinkHref:t.disablePlaceholder&&!t.pattern?"":t.pattern?t.pattern.src:"data:image/png;base64,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"})}),o?(0,e.jsx)(ut,{path:t.path,width:t.width,height:t.height,focalBlurStrength:t.focalBlurStrength||1,focalBlurRadius:t.focalBlurRadius||10,blurFilterId:n,focalMaskId:a,blurEdgeClipId:i}):null]})})(o)}),(0,e.jsx)("g",{mask:t.stepName?void 0:t.mask,children:(0,e.jsxs)("g",{transform:`\n matrix(1, 0, 0, 1, ${t.x}, ${t.y})\n matrix(1, 0, 0, 1, ${t.width/2}, ${t.height/2})\n matrix(${c}, ${-g}, ${g}, ${c}, 0, 0)\n matrix(1, 0, 0, 1, ${-t.width/2}, ${-t.height/2})\n matrix(${t.scaleX}, 0, 0, ${t.scaleY}, 0, 0)\n `,children:[(0,e.jsx)("path",{filter:o?`url(#${n})`:void 0,mask:o?`url(#${i})`:void 0,d:t.path,style:{fill:`url(#${A})`,opacity:t.opacity}}),o?(0,e.jsx)("path",{mask:`url(#${a})`,d:t.path,style:{fill:`url(#${A})`,opacity:t.opacity}}):void 0]})})]})},ut=t=>{const{path:A,width:n,height:i,focalBlurStrength:a,focalBlurRadius:o,blurFilterId:r,focalMaskId:s,blurEdgeClipId:c}=t;return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("filter",{id:r,children:(0,e.jsx)("feGaussianBlur",{stdDeviation:a||0})}),(0,e.jsx)("mask",{id:s,children:(0,e.jsx)("circle",{cx:n/2,cy:i/2,r:o||0,fill:"white",filter:`url(#${r})`})}),(0,e.jsx)("mask",{id:c,children:(0,e.jsx)("path",{d:A,style:{fill:"white",opacity:1}})})]})};y({},"Textbox",(()=>EA));var Qt={};y(Qt,"fontSizeStep",(()=>AA)),y(Qt,"textWidth",(()=>eA)),y(Qt,"charWidth",(()=>nA)),y(Qt,"lineWidth",(()=>iA)),y(Qt,"applyTextTransformations",(()=>oA)),y(Qt,"zip",(()=>rA)),y(Qt,"getTextAlignment",(()=>sA)),y(Qt,"getAnchor",(()=>cA)),y(Qt,"recomputeTextOnElement",(()=>gA)),y(Qt,"defaultLineHeightFactor",(()=>lA));var Ct={};y(Ct,"refitTextbox",(()=>_t)),y(Ct,"recalculateTextboxRegion",(()=>tA));var mt={};y(mt,"FontMetrics",(()=>zt)),y(mt,"loadFontFromExternalUrl",(()=>jt)),y(mt,"loadFontFromDataUrl",(()=>Kt)),y(mt,"getFontMetrics",(()=>Vt));var pt={};y(pt,"registerJSDOM",(()=>It)),y(pt,"createElement",(()=>Ft)),y(pt,"createElementNS",(()=>Yt)),y(pt,"domParser",(()=>vt)),y(pt,"fetchAsArrayBuffer",(()=>St)),y(pt,"fetchAsString",(()=>Nt)),y(pt,"loadFontFaceSet",(()=>Rt)),y(pt,"xmlSerializer",(()=>Ht)),y(pt,"toBase64",(()=>Pt)),y(pt,"dataUrlFromExternalUrl",(()=>Ut)),y(pt,"arrayBufferToDataUrl",(()=>Gt)),y(pt,"arrayBufferToBuffer",(()=>kt)),y(pt,"dataUrlToArrayBuffer",(()=>bt));var ft=i.Buffer;let Dt;function It(t){Dt=t}function yt(){if(!Dt)throw new Error("JSDOM is not registered. Please register it before calling this function.");return new Dt}if(void 0===M.TextEncoder){const{TextEncoder:t}=s;M.TextEncoder=t}if(void 0===M.TextDecoder){const{TextDecoder:t}=s;M.TextDecoder=t}const Mt=new(I(o).Agent)({rejectUnauthorized:!0}),xt=t=>t.every((t=>"undefined"!==t)),Ft=t=>xt([typeof document])?document.createElement(t):yt().window.document.createElement(t),Yt=(t,A)=>{if(xt([typeof document]))return document.createElementNS(t,A);const e=yt().window.document.createElement(A);return e.setAttribute("xmlns",t),e},vt=()=>xt([typeof DOMParser])?new DOMParser:new(yt().window.DOMParser),St=t=>{if(xt([typeof fetch]))return new Promise(((A,e)=>{fetch(t).then((t=>{A(t.arrayBuffer())})).catch((t=>{e(t)}))}));{const A=t.replace("localhost","localstack");return new Promise(((t,e)=>{I(a).get(A,{responseType:"arraybuffer",httpsAgent:Mt}).then((A=>{t(A.data)})).catch((t=>{e(t)}))}))}},Nt=t=>{if(xt([typeof fetch]))return new Promise(((A,e)=>{fetch(t).then((t=>{A(t.text())})).catch(e)}));{const A=t.replace("localhost","localstack");return new Promise(((t,e)=>{I(a).get(A,{responseType:"text",httpsAgent:Mt}).then((A=>{t(A.data)})).catch(e)}))}},Rt=async(t,A)=>{if(xt([typeof FontFace])){const e=t.names.fullName.en,n=new FontFace(e,`url(${A})`);return document.fonts.add(n),n.load()}},Ht=()=>xt([typeof XMLSerializer])?new XMLSerializer:new(yt().window.XMLSerializer),Pt=t=>xt([typeof btoa])?btoa(t):ft.from(t).toString("base64"),Ut=async t=>{if(xt([typeof fetch,typeof Blob,typeof FileReader])){const A=await fetch(t),e=await A.blob();return await Lt(e)}const A=(await I(a).get(t,{responseType:"arraybuffer"})).data;return Gt(A)},Gt=async t=>{const A=await(async t=>{const A=await(0,r.fromBuffer)(t);return A?A.mime:"image/svg+xml"})(t);return`data:${A};base64,${kt(t).toString("base64")}`},bt=t=>{const A=t.replace(/\r?\n/g,""),e=A.indexOf(",");if(-1===e||e<=4)throw new TypeError("malformed data: URI");const n=A.substring(5,e).split(";");let i=!1;for(let t=1;t<n.length;t++)"base64"===n[t]&&(i=!0);const a=i?"base64":"ascii",o=unescape(A.substring(e+1)),r=ft.from(o,a);return Jt(r)},kt=t=>ft.from(t),Jt=t=>{const A=new ArrayBuffer(t.byteLength),e=new Uint8Array(A);for(let A=0;A<t.length;++A)e[A]=t[A];return A},Lt=t=>new Promise(((A,e)=>{const n=new FileReader;n.onload=function(t){const n=t.target;n&&n.result?A(n.result.toString()):e()},n.readAsDataURL(t)})),Ot=new Map;class zt{constructor(t){this.font=t,this.glyphsFromText=new Map,this.kerningValues=new Map,this.height=this.calculateApproximateHeight()}getFont(){return this.font}getGlyphs(t){const A=this.glyphsFromText.get(t);if(A)return A;const e=this.font.stringToGlyphs(t);return this.glyphsFromText.set(t,e),e}getApproximateHeight(){return this.height}getExactHeight(t){const A=this.font.stringToGlyphs(t);let e=0,n=0;return A.forEach((t=>{const A=t.getMetrics();e=Math.max(e,A.yMax),n=Math.min(n,A.yMin)})),e-n}getKerningValue(t,A){let e=this.kerningValues.get(t.name);e||(e=new Map,this.kerningValues.set(t.name,e));let n=e.get(A.name);return n||(n=this.font.getKerningValue(t,A),e.set(A.name,n)),n}calculateApproximateHeight(){const t=this.font.stringToGlyphs("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");let A=0,e=0;return t.forEach((t=>{const n=t.getMetrics();A=Math.max(A,n.yMax),e=Math.min(e,n.yMin)})),A-e}}const Tt=t=>"data:"===t.substring(0,5).toLowerCase().trim(),jt=async t=>{const A=Tt(t)?Kt(t):Kt(await Ut(t));return Wt(A,{assetUrl:Tt(t)?t:await Ut(t),name:A.names.fullName.en}),await Rt(A,t),A},Kt=t=>{const A=bt(t),e=I(n).parse(A);return Wt(e,{assetUrl:t,name:e.names.fullName.en}),e},Vt=t=>{const A=Ot.get(t.name);if(A)return A;throw new Error("Font metrics unavailable for font")},Wt=(t,A)=>{const e=new zt(t);return Ot.set(A.name,e),e},Xt=(t,A,e,n)=>Math.max(nA(t.join("\n"),e,n),A),qt=(t,A,e,n,i,a)=>{const o=(a||lA)*i.getApproximateHeight(),r=A.split("\n");try{const A=r.flatMap((A=>Zt(A,t.width,n,i))),a=A.flatMap((t=>t.lines));return{lines:a,requiredHeight:A.flatMap((t=>t.lines)).length*(n*o),fontSize:e,requiredWidth:Xt(a,t.width,n,i)}}catch(a){const r=A.split("");return{lines:r,requiredHeight:r.length*(n*o),fontSize:e,requiredWidth:Xt(r,t.width,n,i)}}},Zt=(t,A,e,n)=>{const i=eA(t,e,n);if(i<=A)return{lines:[t],width:i};if(!(t.indexOf(" ")>-1)){if(t.length<=1)throw new Error(`Character ${t} is wider than region`);const i=Math.floor(t.length/2),a=Zt(t.slice(0,i),A,e,n),o=Zt(t.slice(i),A,e,n);return{lines:[...a.lines,...o.lines],width:Math.max(a.width,o.width)}}const a=t.split(" "),o=[];let r=-1/0,s=0;for(;s<a.length;){const t=a[s];if(eA(t,e,n)>A){const i=Zt(t,A,e,n);o.push(...i.lines),r=Math.max(r,i.width),s++}else{const i=[t];r=Math.max(r,eA(t,e,n));let c=s+1,g=!0;for(;c<a.length&&g;){const t=a[c],o=eA(`${i.join(" ")} ${t}`,e,n);o<=A?(i.push(t),r=Math.max(r,o),c++):g=!1}o.push(i.join(" ")),s=c}}if(r<0)throw new Error(`No max width calculated for text: ${o}.`);return{lines:o,width:r}},$t=(t,A,e,n,i,a)=>{const o=(a??lA)*A.getApproximateHeight(),r=1/e.unitsPerEm,s=n/iA(t,r,A),c=i/(t.length*o*r);return Math.min(c,s)},_t=(t,A,e,n)=>{const i=Vt(A.fontData),a=i.getFont(),o=A.fontSize/a.unitsPerEm;if(!e)return qt(A,t,A.fontSize,o,i,n);let r;if(r=A.text?A.text.split("\n"):A.input?.split("\n")??[""],e.input===t&&A.width===e.width&&A.height===e.height&&A.lineHeight===e.lineHeight)return{lines:r,requiredHeight:A.height,requiredWidth:Xt(r,A.width,o,i),fontSize:A.fontSize};const s=A.width!==e.width!=(A.height!==e.height);return A.lineHeight!==e.lineHeight||s||e.input!==t?qt(A,t,A.fontSize,o,i,n):{lines:r,requiredHeight:A.height,requiredWidth:Xt(r,A.width,o,i),fontSize:$t(r,i,a,A.width,A.height,n)}},tA=(t,A,e,n,i)=>{const a=Vt(A).getFont();let o={...t},r={...t},s=iA(n,e/a.unitsPerEm,Vt(A));return s&&s<o.width&&(r.width=s,"left"===i?(r.left+=Math.sin(o.rotation*Math.PI/360)*(o.width-s),r.top+=Math.sin(o.rotation*Math.PI/180)*(s-o.width)/2):r.left+="right"===i?o.width-s:(o.width-s)/2,n&&rA(n,n).every((([t,A])=>t===A))&&(o=r)),o},AA=1,eA=(t,A,e)=>{let n=0;const i=e.getGlyphs(t);return i.forEach(((t,A)=>{if(t.advanceWidth&&(n+=t.advanceWidth),A<i.length-1){const a=e.getKerningValue(t,i[A+1]);n+=a}})),n*=A,n},nA=(t,A,e)=>{let n=0;const i=e.getGlyphs(t);return i.forEach(((t,A)=>{if(t.advanceWidth&&(n=Math.max(n,t.advanceWidth)),A<i.length-1){const a=e.getKerningValue(t,i[A+1]);n=Math.max(n,a)}})),n*=A,n},iA=(t,A,e)=>{let n=0;return t.forEach((t=>{n=Math.max(n,eA(t,A,e))})),n},aA={stripControlCharacters:!0,vertical:!1,uppercase:!1},oA=(t,A=aA)=>{const e={...aA,...A};let n=t||"";return e.stripControlCharacters&&(n=n.replace(/^(?![\u000A\u000D])[\u0000-\u001F\u007F-\u009F]/g,"")),e.uppercase&&(n=n.toUpperCase()),e.vertical&&(n=n.split("").join("\n")),n},rA=(t,A)=>t.map(((t,e)=>[t,A[e]])),sA=(t="center",A=!1)=>A?"center":t,cA=t=>"left"===t?"start":"right"===t?"end":"middle",gA=(t,A,e)=>t.fontData?{...t,...(()=>{if(t.algorithm===U.Traditional){const n=_t(A,t,e,t.lineHeight);return{text:n.lines.join("\n"),height:n.requiredHeight,width:n.requiredWidth,fontSize:n.fontSize,input:A}}return{text:A}})()}:t,lA=1.1;var BA={};y(BA,"colorDefinitionPrintValue",(()=>wA)),y(BA,"spotColorDefinitionString",(()=>hA)),y(BA,"svgColorValueToDefinition",(()=>dA));const wA=t=>{const A=hA(t.spotColor);return A?`${t.browserValue} ${A}`:t.browserValue},hA=t=>{if(!t)return"";if(t.profileName.includes("/")&&t.profileName.includes(".icc")){const A=t.profileName.replace(/\s/g,"-"),e=A.lastIndexOf("/");return`icc-named-color(${A.slice(e+1).slice(0,-4)}, ${t.namedColor})`}return`icc-named-color(${t.profileName}, ${t.namedColor})`},dA=t=>{const A=t.split(/[ ](?=[^)]*?(?:\(|$))/);if(0===A.length)return{browserValue:"#000000"};if(1===A.length)return{browserValue:A[0]};const e=A[1].match(/\(([^)]+)\)/gm);if(!e)throw new Error("Unhandled state of color value in SVG");const n=e[0].replace(/[() ]/g,"").split(",");return{browserValue:A[0],spotColor:{profileName:n[0],namedColor:n[1]}}},EA=t=>{const A=(t.rotation||0)*Math.PI/180,n=Math.cos(A),i=-Math.sin(A),a=`text-path-${t.id}`,o=t.x+(t.curved?0:t.width/2),r=t.y+(t.curved?0:t.height/2),s=(t.text||"").split("\n");return t.curved&&!t.paths?null:t.fontData?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("defs",{children:[(0,e.jsx)("style",{type:"text/css",dangerouslySetInnerHTML:{__html:`\n @font-face {\n font-family: '${t.fontData.name}';\n src: url('${t.fontData.assetUrl}') format('truetype');\n }\n `}}),t.curved&&t.paths?(0,e.jsx)("path",{id:a,d:t.paths[0]}):void 0]}),t._renderingConfiguration?.debug?(0,e.jsx)("rect",{stroke:"blue",fill:"none",x:t.x,y:t.y,width:t.width,height:t.height}):void 0,(0,e.jsx)("g",{mask:t.stepName?void 0:t.mask,children:(0,e.jsx)("g",{transform:`matrix(${n}, ${-i}, ${i}, ${n}, ${o}, ${r})`,children:(0,e.jsx)("text",{xmlSpace:"preserve",fontFamily:`'${t.fontData.name}'`,fontSize:t.fontSize,fontStyle:"normal",fontWeight:"normal",fill:t._renderingConfiguration?.spotColors&&t.fillSpotColorDefinition?`${t.fill} ${hA(t.fillSpotColorDefinition)}`:t.fill,style:{whiteSpace:"pre",userSelect:"none"},children:t.curved?(0,e.jsx)(QA,{text:t.text||"",curvedPathId:a,align:t.align}):s.map(((A,n)=>(0,e.jsx)(uA,{align:t.vertical?"center":t.align,fontSize:t.fontSize,thisLineIdx:n,amountLines:s.length,text:A,textboxHeight:t.height,textboxWidth:t.width,lineHeight:t.lineHeight,vertical:t.vertical,verticalAlign:t.verticalAlign},n)))})})})]}):null},uA=t=>(0,e.jsx)("tspan",{textAnchor:cA(t.align),x:"left"===t.align?-t.textboxWidth/2:"right"===t.align?t.textboxWidth/2:0,y:`${(()=>{const A=t.fontSize*(void 0!==t.lineHeight?t.lineHeight:lA),e=t.textboxHeight/2;if("top"===t.verticalAlign)return-e+3*t.fontSize/4+t.thisLineIdx*A;if("bottom"===t.verticalAlign){const n=t.amountLines-1-t.thisLineIdx;return e-t.fontSize/4-n*A}const n=(t.amountLines-1)/2;return(t.thisLineIdx-n)*A+t.fontSize/4})()}px`,children:t.text}),QA=t=>{const A=`#${t.curvedPathId}`;return(0,e.jsx)("textPath",{startOffset:"left"===t.align?"0%":"right"===t.align?"100%":"50%",textAnchor:cA(t.align),href:A,xlinkHref:A,children:t.text})};y({},"Illustration",(()=>yA));var CA={};y(CA,"traverse",(()=>pA)),y(CA,"sanitizeSvgTree",(()=>fA)),y(CA,"modifySVGWithElementProperties",(()=>DA)),y(CA,"generateSVGWithUnknownColors",(()=>IA));const mA=["altGlyph","circle","ellipse","path","polygon","polyline","rect","text","textPath","tref","tspan"],pA=(t,A)=>{A(t),t.children.length>0&&Array.from(t.children).forEach((t=>pA(t,A)))},fA=(t,A=!1)=>{!A&&t.setAttribute("preserveAspectRatio","none");const e=[];pA(t,(t=>{if("script"!==t.tagName)if("style"!==t.tagName);else try{(0,c.parse)(t.innerHTML).stylesheet?.rules.forEach((t=>{e.push(t)})),t.remove()}catch(t){console.error(t)}else t.remove()})),pA(t,(t=>{e.forEach((A=>{A.selectors?.forEach((e=>{((t,A)=>{try{return t.matches(A)}catch(e){return t.classList.contains(A.substring(1))}})(t,e)&&A.declarations?.forEach((A=>{A.property&&A.value&&t.setAttribute(A.property,A.value)}))}))}))}))},DA=(t,A,e,n,i)=>{const a=(t=>vt().parseFromString(t,"image/svg+xml").firstElementChild)(t);if(!a)throw new Error("Failed to read SVG.");return((t,A,e)=>{t.setAttribute("height",`${e}px`),t.setAttribute("width",`${A}px`)})(a,A,e),((t,A,e)=>{pA(t,(t=>{const n=t.attributes.getNamedItem("fill");n&&"none"!==n.value&&t.classList.forEach((n=>{if(n.startsWith("spiff-fill")){const i=A[n];i&&t.setAttribute("fill",e?wA(i):i.browserValue)}}));const i=t.attributes.getNamedItem("stroke");i&&"none"!==i.value&&t.classList.forEach((n=>{if(n.startsWith("spiff-stroke")){const i=A[n];i&&t.setAttribute("stroke",e?wA(i):i.browserValue)}}))}))})(a,n,i),(t=>Ht().serializeToString(t))(a)},IA=async t=>{const A=t.match(/<svg.*?<\/svg>/s)||[],e=A?.length>0?A[0]:"",n=vt().parseFromString(e,"image/svg+xml").firstElementChild;if(!n)throw new Error("Failed to read SVG.");fA(n);const i={};pA(n,(t=>{mA.includes(t.tagName)&&!t.attributes.getNamedItem("fill")&&t.setAttribute("fill","black");const A=t.attributes.getNamedItem("fill");if(A&&"none"!==A.value){const e=dA(A.value),n=`spiff-fill-${e.browserValue.replace(/\W/g,"")}`;t.setAttribute("fill",e.browserValue),t.classList.add(n),i[n]=e}const e=t.attributes.getNamedItem("stroke");if(e&&"none"!==e.value){const A=dA(e.value),n=`spiff-stroke-${A.browserValue.replace(/\W/g,"")}`;t.classList.add(n),t.setAttribute("stroke",A.browserValue),i[n]=A}}));const a=Ht().serializeToString(n);return{colors:i,svg:a}},yA=t=>{if(t.cachedObjectURL&&!t._renderingConfiguration?.omitCachedFields)return(0,e.jsx)(dt,{id:t.id,src:t.cachedObjectURL,x:t.x,y:t.y,width:t.width,height:t.height,rotation:t.rotation,preserveAspectRatio:"none",immutable:t.immutable,mask:t.stepName?void 0:t.mask});const A=t.rotation||0,n=tt(A),i=Math.cos(n),a=-Math.sin(n),o=`\n matrix(1, 0, 0, 1, ${t.x}, ${t.y})\n matrix(1, 0, 0, 1, ${t.width/2}, ${t.height/2})\n matrix(${i}, ${-a}, ${a}, ${i}, 0, 0)\n matrix(1, 0, 0, 1, ${-t.width/2}, ${-t.height/2})\n `;if(!t.svg)throw new Error(`Illustration element ${t.id} (stepName ${t.stepName}) lacked svg from src ${t.src} at render time.`);return(0,e.jsx)("g",{mask:t.stepName?void 0:t.mask,children:(0,e.jsx)("g",{transform:o,dangerouslySetInnerHTML:{__html:DA(t.svg,t.width,t.height,t.colors,t._renderingConfiguration?.spotColors)}})})};class MA{constructor(){this.id=F(),this.stateCallbacks=[],this.prevCommands=[],this.nextCommands=[]}registerStateCallback(t){this.stateCallbacks.push(t)}unregisterStateCallback(t){this.stateCallbacks.filter((A=>A!==t))}getState(){return this.state}runStateCallbacks(){this.stateCallbacks.forEach((t=>t()))}apply(t,A){if(!this.state)throw new Error(`State not initialized for cc ${this.id}!`);this.state=this.commandReducer(this.state,t),this.runStateCallbacks(),this.nextCommands=[],A||this.prevCommands.push(t)}undo(){if(!this.state)return;const t=this.prevCommands.pop();if(!t)return;const A=t.undo();t.varying?this.state={...this.state,variation:A}:this.state={...this.state,transaction:A},this.nextCommands.push(t),this.runStateCallbacks()}redo(){if(!this.state)return;const t=this.nextCommands.pop();t&&(this.state=this.commandReducer(this.state,t),this.runStateCallbacks(),this.prevCommands.push(t))}flattenSequence(t,A){const e=this.prevCommands.filter((A=>A.sequenceId===t)).pop();e&&(this.prevCommands=this.prevCommands.filter((A=>A.sequenceId!==t)),e?.overrideOldState(A),this.prevCommands.push(e))}getLayoutById(t){if(!this.state)throw new Error(`State not initialized for cc ${this.id}!`);const A=this.state.transaction?.layouts?.[t],e=this.state.variation?.layouts?.[t],n=A?.layout||e?.layout;if(!n)throw new Error(`No layout: ${t}`);const i=[...A?.elements||[],...e?.elements||[]];return this.getLayoutDataWithState(n,i)}getAllLayouts(){if(!this.state)throw new Error(`State not initialized for cc ${this.id}!`);const t=[...Object.keys(this.state.transaction?.layouts),...Object.keys(this.state.variation?.layouts||{})];return[...new Set(t)].map((t=>this.getLayoutById(t)))}getLayoutDataWithState(t,A){return{layoutState:{layout:t,elements:A},getComponentWithProps:e=>FA(t,A,e)}}initialize(t,A){if(A)return void(this.state={transaction:A});let e={serializableWorkflow:{steps:[]},layouts:{}};t.forEach((t=>{e=new LA(t).apply(e)})),this.runStateCallbacks(),this.state={transaction:e}}commandReducer(t,A){if(A.varying){const e={layouts:{},serializableWorkflow:{steps:[]},...t.variation};return{...t,variation:A.apply(e)}}{const e=t.transaction||{layouts:{},serializableWorkflow:{steps:[]}};return{...t,transaction:A.apply(e)}}}}const xA=t=>"image"===t.type?(0,e.jsx)(dt,{...t},t.id):"frame"===t.type?(0,e.jsx)(Et,{...t},t.id):"illustration"===t.type?(0,e.jsx)(yA,{...t},t.id):"textbox"===t.type?(0,e.jsx)(EA,{...t},t.id):null,FA=(t,A,n)=>{const i=n.renderingConfiguration,a=i?.removeExcludedElements?A.filter((t=>!t.excludeFromExport)):A;return(0,e.jsx)(q,{preserveAspectRatio:void 0,elements:a,backgroundColor:t.transparentBackground?void 0:"white",width:n.width||t.width,height:n.height||t.height,viewBox:i?.region?{x:i.region.left,y:i.region.top,width:i.region.width,height:i.region.height}:{x:0,y:0,width:t.width,height:t.height},configuration:i,outlineArea:n.outlineArea,maxHeight:n.maxHeight,maxWidth:n.maxWidth,position:n.position,borderRadius:n.borderRadius,outlineColor:n.outlineColor})};function YA(t){return t.sort(((t,A)=>{const e=t.layer||0,n=A.layer||0;if(e<n)return-1;if(e>n)return 1;const i=t.layerIndex||0,a=A.layerIndex||0;return i<a?-1:i>a?1:0}))}class vA extends Error{constructor(){super("Element not found!"),Object.setPrototypeOf(this,vA.prototype)}}const SA=(t,A)=>NA(t,A).elements.find((A=>A.id===t)),NA=(t,A)=>{const e=Object.values(A).find((A=>A.elements.some((A=>A.id===t))));if(!e)throw new vA;return e},RA=(t,A)=>{const e=YA([...A.elements.filter((A=>A.id!==t.id)),t]);return{layout:A.layout,elements:e,modificationID:F()}},HA=async(t,A)=>{const e=[...Object.keys(t.layouts),...Object.keys(A?.layouts||{})],n=[...new Set(e)];for(let e=0;e<n.length;e++){const i=n[e],a=t.layouts[i],o=A?.layouts[i],r=(a||o).elements.filter((t=>"illustration"===t.type));for(let t=0;t<r.length;++t){const A=r[t];if(A.src&&!A.svg){const t=await Nt(A.src),e=await IA(t);A.svg=DA(e.svg,A.width,A.height,A.colors)}}}};class PA{undo(){if(!this.oldState)throw new Error("Cannot undo.");return this.oldState}overrideOldState(t){this.oldState=t}}class UA extends PA{constructor(t){super(),this.serializableWorkflow=t}apply(t){return this.oldState=t,{...t,serializableWorkflow:this.serializableWorkflow}}}class GA extends PA{constructor(t,A,e){super(),this.id=t,this.x=A,this.y=e}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,x:this.x,y:this.y},n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class bA extends PA{constructor(t,A){super(),this.id=t,this.angle=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,rotation:this.angle},n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class kA extends PA{constructor(t,A,e){super(),this.id=t,this.width=Math.abs(A),this.height=Math.abs(e)}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;let e={...A,width:this.width,height:this.height};if("frame"===A.type){const t=e;t.scaleX=t.scaleX*this.width/A.width,t.scaleY=t.scaleY*this.height/A.height}else if("textbox"===A.type){const t=e,n=(t.algorithm&&t.algorithm!==U.Autosize?t.input:t.text)??"";e=gA(t,n,A)}const n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class JA extends PA{constructor(t){super(),this.commands=t}apply(t){return this.oldState=t,this.commands.reduce(((t,A)=>A.apply(t)),t)}}class LA extends PA{constructor(t){super(),this.layout=t}apply(t){return this.oldState=t,{...t,layouts:{...t.layouts,[this.layout.id]:{elements:[],layout:{...this.layout},modificationID:F()}}}}}class OA extends PA{constructor(t){super(),this.panelName=t}apply(t){this.oldState=t;const A=Object.values(t.layouts).map((t=>{const A=t.layout.panelId===this.panelName;return{...t,elements:A?[]:[...t.elements],modificationID:F()}})),e={};return A.forEach((t=>{e[t.layout.id]=t})),{...t,layouts:e}}}class zA extends PA{constructor(t,A){super(),this.element=t,this.layout=A}apply(t){this.oldState=t,t.layouts[this.layout.id]||(t.layouts[this.layout.id]={layout:this.layout,elements:[],modificationID:""});const A=t.layouts[this.layout.id].elements;if(A.find((t=>t.id===this.element.id)))throw new Error(`Failed to apply new ${this.element.type} element because ID ${this.element.id} already taken`);if(this.element.productOverlay||0===A.length){const e=[...A,this.element];return void 0===this.element.layerIndex&&(this.element.layerIndex=this.assignIndex(this.element,e)),{...t,layouts:{...t.layouts,[this.layout.id]:{...t.layouts[this.layout.id],elements:e,modificationID:F()}}}}const e=A[A.length-1],n=e.productOverlay?e:null;let i;if(n&&A.pop(),null!==this.element.layerIndex&&void 0!==this.element.layerIndex)i=[...A,this.element].sort(((t,A)=>void 0!==t.layerIndex&&void 0!==A.layerIndex?t.layerIndex-A.layerIndex:0));else{const t=this.assignIndex(this.element,A);this.element.layerIndex=void 0!==t?t:0,i=[...A,this.element]}return n&&i.push(n),{...t,layouts:{...t.layouts,[this.layout.id]:{...t.layouts[this.layout.id],elements:i,modificationID:F()}}}}assignIndex(t,A){if(0===A.length)return 0;const e=A.filter((A=>(A.layer||0)===(t.layer||0))).sort(((t,A)=>(t.layerIndex||0)-(A.layerIndex||0)))[A.length-1]?.layerIndex;return void 0!==e?e+1:0}}class TA extends PA{constructor(t){super(),this.id=t}apply(t){this.oldState=t;let A=!1;const e=Object.values(t.layouts).map((t=>(t.elements.filter((t=>t.id!==this.id)).length!==t.elements.length&&(A=!0),{...t,elements:t.elements.filter((t=>t.id!==this.id)),modificationID:F()})));A||console.log(`Failed to delete element ${this.id}`);const n={};return e.forEach((t=>{n[t.layout.id]=t})),{...t,layouts:n}}}class jA extends PA{constructor(t,e){super(),this.el=I(A)(t),this.layout=e,this.el.id=F(),this.el.x+=5,this.el.y+=5}apply(t){return this.oldState=t,new zA(this.el,this.layout).apply(t)}}class KA extends PA{constructor(t,A,e){super(),this.id=t,this.color=A,this.textFillSpotColor=e}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,fill:this.color,fillSpotColorDefinition:this.textFillSpotColor},n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class VA extends PA{constructor(t,A){super(),this.id=t,this.size=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,fontSize:this.size},n=NA(A.id,Object.values(t.layouts)),i=(A.algorithm&&A.algorithm!==U.Autosize?A.input:A.text)??"",a=RA(gA(e,i),n);return{...t,layouts:{...t.layouts,[n.layout.id]:a}}}}class WA extends PA{constructor(t,A){super(),this.id=t,this.algorithm=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,algorithm:this.algorithm},n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class XA extends PA{constructor(t,A){super(),this.id=t,this.fontData=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,fontData:this.fontData},n=NA(A.id,Object.values(t.layouts)),i=(A.algorithm&&A.algorithm!==U.Autosize?A.input:A.text)??"",a=RA(gA(e,i),n);return{...t,layouts:{...t.layouts,[n.layout.id]:a}}}}class qA extends PA{constructor(t,A){super(),this.id=t,this.align=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,align:this.align},n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class ZA extends PA{constructor(t,A,e){super(),this.id=t,this.imageData=A,this.offsets=e}apply(t){this.oldState=t;const A=NA(this.id,Object.values(t.layouts)),e=A.elements.findIndex((t=>t.id===this.id)),n=A.elements[e].pattern,i=[...A.elements];i.splice(e,1,{...A.elements[e],pattern:{...n,src:this.imageData.src,x:this.offsets.x,y:this.offsets.y,width:this.imageData.width,height:this.imageData.height,scaleX:this.offsets.zoom,scaleY:this.offsets.zoom}});const a={...A,elements:i,modificationID:F()};return{...t,layouts:{...t.layouts,[A.layout.id]:a}}}}class $A extends PA{constructor(t,A){super(),this.id=t,this.text=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e=NA(A.id,Object.values(t.layouts)),n=RA(gA(A,this.text,A),e);return{...t,layouts:{...t.layouts,[e.layout.id]:n}}}}class _A extends PA{constructor(t,A,e){super(),this.id=t,this.className=A,this.fill=e}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e=A.colors||{},n=e[this.className];e[this.className]={browserValue:this.fill,spotColor:n?.spotColor};const i={...A,colors:e},a=NA(A.id,Object.values(t.layouts)),o=RA(i,a);return{...t,layouts:{...t.layouts,[a.layout.id]:o}}}}class te extends PA{constructor(t,A,e){super(),this.id=t,this.svgBody=A,this.objectURL=e}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,svg:this.svgBody,cachedObjectURL:this.objectURL},n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class Ae extends PA{constructor(t){super(),this.id=t}apply(t){if(this.oldState=t,!SA(this.id,Object.values(t.layouts)).id)throw new vA;const A=Object.values(t.layouts).find((t=>t.elements.find((t=>t.id===this.id))));if(!A)throw new Error("Layout missing from state!");const e=A.elements.findIndex((t=>t.id===this.id));A.elements.push(A.elements.splice(e,1)[0]);const n=[...A.elements];return n.forEach(((t,A)=>t.layerIndex=A)),{...t,layouts:{...t.layouts,[A.layout.id]:{...t.layouts[A.layout.id],elements:n,modificationID:F()}}}}}class ee extends PA{constructor(t){super(),this.id=t}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e=Object.values(t.layouts).find((t=>t.elements.find((t=>t.id===this.id))));if(!e)throw new Error("Layout missing from state!");const n=e.elements.findIndex((t=>t.id===this.id));e.elements.splice(n,1),e.elements.unshift(A);const i=[...e.elements],a=i.splice(n,1)[0];return i.splice(n,0,a),i.forEach(((t,A)=>t.layerIndex=A)),{...t,layouts:{...t.layouts,[e.layout.id]:{...t.layouts[e.layout.id],elements:i,modificationID:F()}}}}}class ne extends PA{constructor(t){super(),this.id=t}apply(t){if(this.oldState=t,!SA(this.id,Object.values(t.layouts)).id)throw new vA;const A=Object.values(t.layouts).find((t=>t.elements.find((t=>t.id===this.id))));if(!A)throw new Error("Layout missing from state!");const e=A.elements.findIndex((t=>t.id===this.id)),n=e+1,i=[...A.elements],a=i.splice(e,1)[0];return i.splice(n,0,a),i.forEach(((t,A)=>t.layerIndex=A)),{...t,layouts:{...t.layouts,[A.layout.id]:{...t.layouts[A.layout.id],elements:i,modificationID:F()}}}}}class ie extends PA{constructor(t){super(),this.id=t}apply(t){if(this.oldState=t,!SA(this.id,Object.values(t.layouts)).id)throw new vA;const A=Object.values(t.layouts).find((t=>t.elements.find((t=>t.id===this.id))));if(!A)throw new Error("Layout missing from state!");const e=A.elements.findIndex((t=>t.id===this.id)),n=e-1,i=[...A.elements],a=i.splice(e,1)[0];return i.splice(n,0,a),i.forEach(((t,A)=>t.layerIndex=A)),{...t,layouts:{...t.layouts,[A.layout.id]:{...t.layouts[A.layout.id],elements:i,modificationID:F()}}}}}class ae extends PA{constructor(t,A){super(),this.id=t,this.value=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e=Object.values(t.layouts).find((t=>t.elements.find((t=>t.id===this.id))));if(!e)throw new Error("Layout missing from state!");return{...t,layouts:{...t.layouts,[e.layout.id]:RA({...A,layer:this.value},e)}}}}var oe={};y(oe,"patternImageDataCache",(()=>we)),y(oe,"frameDataCache",(()=>he)),y(oe,"generateFrameSVG",(()=>de)),y(oe,"generateDefaultRectangleFrameSvg",(()=>Ee)),y(oe,"getVariant",(()=>ue)),y(oe,"getFrameData",(()=>Qe)),y(oe,"calculateOffsets",(()=>Ce)),y(oe,"getPatternImageData",(()=>me)),y(oe,"GetSVGDimensions",(()=>pe)),y(oe,"svgStringDimensions",(()=>fe));var re={};y(re,"getExifOrientation",(()=>ce)),y(re,"canvasDims",(()=>ge)),y(re,"getAttributesFromArrayBuffer",(()=>le));let se=null;const ce=t=>new Promise((A=>{const e=kt(t);(0,r.fromBuffer)(t).then((t=>{const n=t?.mime;if("image/jpeg"!==n)return A(1);(new(0,l.ExifImage)).loadImage(e,((t,e)=>A(t?1:e.image.Orientation||1)))}))})),ge=t=>{const A=8192,e=t.naturalWidth/t.naturalHeight;return t.naturalHeight<=A&&t.naturalWidth<=A?[t.naturalWidth,t.naturalHeight]:t.naturalHeight>t.naturalWidth?[e*A,A]:[A,A/e]},le=async t=>{const A=await(async t=>{const A=await Gt(t),e=await(0,g.loadImage)(A),[n,i]=ge(e),a=await(async()=>{if(null!==se)return!se;const t=await(0,g.loadImage)("data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAIAAwMBEQACEQEDEQH/xABRAAEAAAAAAAAAAAAAAAAAAAAKEAEBAQADAQEAAAAAAAAAAAAGBQQDCAkCBwEBAAAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AG8T9NfSMEVMhQvoP3fFiRZ+MTHDifa/95OFSZU5OzRzxkyejv8ciEfhSceSXGjS8eSdLnZc2HDm4M3BxcXwH/9k=");return se=2===t.width&&3===t.height,!se})();if(!a){const t=(0,g.createCanvas)(n,i);return t.getContext("2d").drawImage(e,0,0,n,i),t}const o=await ce(t),[r,s]=o>4?[i,n]:[n,i],c=(0,g.createCanvas)(r,s),l=c.getContext("2d");switch(o){case 2:l.translate(r,0),l.scale(-1,1);break;case 3:l.translate(r,s),l.rotate(Math.PI);break;case 4:l.translate(0,s),l.scale(1,-1);break;case 5:l.rotate(-.5*Math.PI),l.scale(-1,1);break;case 6:l.rotate(-.5*Math.PI),l.translate(-r,0);break;case 7:l.rotate(-.5*Math.PI),l.translate(-r,s),l.scale(1,-1);break;case 8:l.rotate(.5*Math.PI),l.translate(0,-s)}return l.drawImage(e,0,0,r,s),c})(t);return"image/jpeg"===(await(0,r.fromBuffer)(t))?.mime?{dataUrl:A.toDataURL("image/jpeg",1),height:A.height,width:A.width}:{dataUrl:A.toDataURL(),height:A.height,width:A.width}};y({},"getDefaultVariant",(()=>Be));const Be=t=>{const A=t.variants;if(A){if(1===A.length)return A[0];if(void 0!==t.defaultVariant)return A.find((A=>A.id===t.defaultVariant))}},we=new Map,he=new Map,de=async(t,A)=>{if(!A){if(!t)throw new Error("No region or src supplied. Cannot construct frame!");return Ee(t)}return Nt(A)},Ee=t=>{const A=t.width,e=A/t.height,n=Math.max(A,512),i=n/e;return`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${n} ${i}'>\n <path id="target-path" d='M0 0 h ${n} v ${i} h ${-n} Z' />\n </svg>\n `},ue=(t,A)=>{if(!A)return;const e=A.variants?.find((A=>A.id===t.frameVariantId))||Be(A);if(!e)throw new Error(`No variant with ID: ${t.frameVariantId}`);if(!e.asset)throw new Error(`No asset for variant with ID: ${t.frameVariantId}`);return e},Qe=async t=>{const A=vt().parseFromString(t,"image/svg+xml"),e=A.querySelector("svg");if(!e)throw new Error("Malformed frame SVG: <svg> tag not found");const n=e.getAttribute("viewBox");if(!n)throw new Error("SVG missing viewBox.");const i=n.split(" "),a=parseFloat(i[3])||1,o=parseFloat(i[2])||1,r=A.getElementById("target-path"),s=A.getElementsByClassName("st0").item(0);if(r){const t=r.getAttribute("d");if(!t)throw new Error("Malformed frame SVG: 'd' attribute not found on target element");const A={path:t,width:o,height:a};return he.set(t,A),A}if(s){const t=s.getAttribute("d");if(!t)throw new Error("Malformed frame SVG: 'd' attribute not found on target element");const A={path:t,width:o,height:a};return he.set(t,A),A}throw new Error("Malformed frame SVG")},Ce=(t,A,e)=>{const n=A.width>=A.height,i=t.width>=t.height,a=A.width/2,o=A.height/2,r=(n?A.height:A.width)/(i?t.width:t.height),s=e?.scale||r,c=a-t.width/2*s,g=e?.left||c,l=o-t.height/2*s;return{x:g,y:e?.top||l,zoom:s}},me=async t=>{if(we.has(t))return we.get(t);if(t.endsWith("svg")){const A=await pe(t),e=A.width,n=A.height,i={src:t,width:e,height:n,aspect:e/n};return we.set(t,i),i}{const A=await St(t),e=await le(A),n={src:t,width:e.width,height:e.height,aspect:e.width/e.height};return we.set(t,n),n}},pe=async t=>{const A=await Nt(t);return fe(A)},fe=t=>{const A=vt().parseFromString(t,"image/svg+xml").querySelector("svg");if(!A)throw new Error("No svg tag found, this svg must be malformed!");const e=A.getAttribute("viewBox"),n=A.getAttribute("width"),i=A.getAttribute("height"),a=e?e?.split(" ").map((t=>Number(t))):[0,0,Number(n),Number(i)];if(!a)throw new Error("No viewbox or width/height values detected on SVG file!");return{width:a[2],height:a[3]}};var De={};y(De,"determineCorrectFontSizeAndLines",(()=>ye)),y(De,"determineCorrectTextboxRegion",(()=>Me));const Ie=(t,A,e,n,i)=>{let a=A.map((t=>t.split("\n"))).flat(),o=a.length,r=a.map((t=>eA(t,n,i)));const s=i.getApproximateHeight()*n;let c=!0;for(;c;){if(s+(o-1)*e>t.height)return[null,null];const A=Math.max(...r);if(A<=t.width)return[a,A];const g=r.reduce(((t,A,e,n)=>A>n[t]?e:t),0),l=a[g];let B=!1,w=l.length;for(;!B&&w>-1;){w=l.lastIndexOf(" ",w-1);const A=[l.slice(0,w),l.slice(w+1)],e=A.map((t=>eA(t,n,i)));e[0]<=t.width&&(a=[...a.slice(0,g),...A,...a.slice(g+1)],r=[...r.slice(0,g),...e,...r.slice(g+1)],o+=1,B=!0)}B||(c=!1)}return[null,null]},ye=(t,A,e,n,i)=>{let a,o;const r=Vt(A),s=r.getFont();if(i.size){const A=t/s.unitsPerEm;return[a,o]=Ie(e,n,t,A,r),[i.size,a,o]}let c=6-AA;if(n.length>0){let t=n,A=0;for(;(!i.maxSize||c<=i.maxSize)&&t;)c+=AA,A=c/s.unitsPerEm,[t,o]=Ie(e,n,c,A,r)}c>6&&(c-=AA),i.minSize&&c<i.minSize&&(c=i.minSize);const g=c/s.unitsPerEm;return[a,o]=Ie(e,n,c,g,r),[c,a,o]},Me=(t,A,e,n,i)=>{let a={...t},o={...t},[r,s,c]=ye(e,A,o,n,{size:0,minSize:e,maxSize:e});var g,l;return c&&c<a.width&&(o.width=c,"left"===i?(o.left+=Math.sin(a.rotation*Math.PI/360)*(a.width-c),o.top+=Math.sin(a.rotation*Math.PI/180)*(c-a.width)/2):o.left+="right"===i?a.width-c:(a.width-c)/2,[r,s]=ye(e,A,o,n,{size:e}),r===e&&s&&(g=n,l=s,g.map(((t,A)=>[t,l[A]]))).every((([t,A])=>t===A))&&(a=o)),a};var xe={};y(xe,"svgObjectURL",(()=>ve)),y(xe,"LayoutElementFactory",(()=>Ne));const Fe=(t,A)=>{const e=t.layoutState.elements.filter((t=>t.layer===A)),n=Math.max(...e.map((t=>t.layerIndex)).filter((t=>void 0!==t)));return Math.max(n,0)+1},Ye=async t=>new Promise((A=>{Nt(t).then((t=>{A(t)})).catch((t=>console.error(t)))})),ve=async t=>{const A=vt().parseFromString(t,"image/svg+xml").firstElementChild;if(!A)throw new Error("Failed to read SVG");const e=(new XMLSerializer).serializeToString(A),n=document.createElement("canvas"),i=n.getContext("2d"),a=await B.Canvg.from(i,e,{anonymousCrossOrigin:!0,ignoreDimensions:!1}),o=A.getAttribute("width"),r=A.getAttribute("height"),s=2048;if(r&&o){const t=parseFloat(r),A=parseFloat(o)/t;A>1?a.resize(s,s/A):a.resize(s*A,s)}else a.resize(s,s);return await a.render(),await(async t=>new Promise(((A,e)=>{try{if(!URL||!URL.createObjectURL)throw new Error("Environment incapable of generating ObjectURL");t.toBlob((e=>{if(!e){if(0===t.width||0===t.height)throw new Error(`Canvas dimensions are invalid (${t.width},${t.height})`);if(t.width*t.height>=268435456)throw new Error(`Canvas dimensions exceed device limit (${t.width},${t.height})`);throw new Error("Couldn't generate object URL for Illustration, the blob was undefined!")}A(URL.createObjectURL(e))}))}catch(t){e(t)}})))(n)},Se=async(t,A,e,n)=>{const i=t.layoutState.layout.useEditableArea&&t.layoutState.layout.editableArea||{width:t.layoutState.layout.width,height:t.layoutState.layout.height,x:0,y:0},a=i.width<i.height?i.width:i.height,o=t.layoutState.layout.useEditableArea?a/1.3:a/2,r={top:i.y+i.height/2-o/2,left:i.x+i.width/2-o/2,width:o,height:o,rotation:0,panelId:t.layoutState.layout.panelId};if(e&&A===N.Illustration){const t=await IA(await Ye(e)),A=vt().parseFromString(t.svg,"image/svg+xml").firstElementChild.getAttribute("viewBox");if(!A)throw new Error("SVG missing viewBox.");const n=r.height,i=A.split(" "),a=(parseFloat(i[2])||1)/(parseFloat(i[3])||1);r.height=r.width/a,r.top+=(n-r.height)/2}if(e&&A===N.Image){const t=r.height,A=await St(e),n=await le(A),i=n.width/n.height;r.height=r.width/i,r.top+=(t-r.height)/2}if(e&&A===N.Textbox&&n?.text&&n?.fontScale){const t={assetUrl:e,name:(await jt(e)).names.fullName.en},A=Vt(t),a=eA(n.text,n?.fontScale,A);r.width=Math.min(a,.85*i.width),r.left=i.x+i.width/2-r.width/2}return r};class Ne{static async getFrame(t,A){const e=await de(A.region,A.src),n=await Qe(e),i=A.region||await Se(t,N.Frame);return{id:F(),x:i.left,y:i.top,width:i.width,height:i.height,layer:i.layer||0,layerIndex:i.layerIndex||Fe(t,i.layer||0),rotation:i.rotation,scaleX:i.width/n.width,scaleY:i.height/n.height,path:n.path,type:N.Frame,disablePlaceholder:A.configuration.disablePlaceholder,focalBlur:A.configuration.focalBlur,focalBlurStrength:A.configuration.focalBlurStrength,focalBlurRadius:A.configuration.focalBlurRadius,forceImageCover:A.configuration.forceImageCover,pattern:void 0,immutable:i.immutable}}static async getImage(t,A){const e=A.region||await Se(t,N.Image,A.src);return{id:F(),src:A.src,type:N.Image,y:e.top,x:e.left,rotation:e.rotation,width:e.width,height:e.height,layer:e.layer||0,layerIndex:e.layerIndex||Fe(t,e.layer||0),immutable:e.immutable,preserveAspectRatio:"none"}}static async getTextbox(t,A){const{configuration:e,fontSrc:n,designInputStep:i}=A,a=await jt(n),o={assetUrl:n,name:a.names.fullName.en},r=i?.text||e.defaultText||"",s=e.replaceableText?e.replaceableText.replace("{{}}",r):r,c=oA(s,{vertical:e.vertical,uppercase:e.uppercase}),g=A.region||await Se(t,N.Textbox,n,{text:c,fontScale:e.size?e.size/a.unitsPerEm:void 0}),l=gA({id:F(),type:N.Textbox,x:g.left,y:g.top,width:g.width,height:g.height,align:sA(e.textAlign,e.vertical),curved:e.curved,fill:i?.color||e.colour||"#000000",fontData:o,layer:g.layer||0,layerIndex:g.layerIndex||Fe(t,g.layer||0),paths:e.paths,rotation:g.rotation,vertical:e.vertical,verticalAlign:e.verticalAlign||"middle",algorithm:U.Traditional,fontSize:e.size||Math.max(Math.round(.025*g.height),1),text:c,input:r},c),B=tA({...g,height:l.height},o,l.fontSize,l?.text?.split("\n")||[],l.align);return{...l,x:B.left,y:B.top+(g.height-B.height)/2,width:B.width,height:B.height}}static async getShape(t,A){const e=`\n <svg\n xmlns="http://www.w3.org/2000/svg"\n xmlnsXlink="http://www.w3.org/1999/xlink"\n xmlSpace="preserve"\n preserveAspectRatio="none"\n version="1.1"\n width="1"\n height="1"\n viewBox="0 0 1 1"\n >\n <rect\n x="0"\n y="0"\n width="1"\n height="1"\n class="spiff-fill-shape"\n fill="${A.color}"\n />\n </svg>\n `,n={};n["spiff-fill-shape"]={browserValue:A.color};const i=A.region||await Se(t,N.Illustration),a=F();return{stepRegion:A.region,colors:n,id:a,svg:e,type:N.Illustration,y:i.top,x:i.left,rotation:i.rotation,width:i.width,height:i.height,layer:i.layer||0,layerIndex:i.layerIndex||Fe(t,i.layer||0),immutable:i.immutable}}static async getIllustration(t,A){const e=A.region||await Se(t,N.Illustration,A.src),n=await IA(await Ye(A.src)),i=await ve(n.svg),a=F();return{cachedObjectURL:i,stepRegion:A.region,colors:n.colors,id:a,svg:n.svg,type:N.Illustration,y:e.top,x:e.left,rotation:e.rotation,width:e.width,height:e.height,layer:e.layer||0,layerIndex:e.layerIndex||Fe(t,e.layer||0),immutable:e.immutable}}}function Re(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class He extends Error{constructor(t){super(t),this.name=this.constructor.name}}class Pe extends He{constructor(t){super(`ConfigurationError - ${t}`)}}class Ue extends Pe{constructor(t){super(`Option not Configured: ${t.stepTitle}`),Re(this,"optionId",void 0),this.optionId=t?.optionId||"N/A"}}class Ge extends Pe{constructor(t){super(`Panel not Found: ${t.panelId}`),Re(this,"panelId",void 0),this.panelId=t?.panelId||"N/A"}}class be extends Pe{constructor(t){super(`Asset not found for variant: ${t.name}`),Re(this,"variant",void 0),this.variant=t}}class ke extends Pe{constructor(t){super(`Resource not found for asset: ${t.name}`),Re(this,"asset",void 0),this.asset=t}}class Je extends Pe{constructor(t,A){super(`Workflow Misconfiguration: ${t.stepName} - ${A}`),Re(this,"step",void 0),this.step=t}}class Le extends He{constructor(t){super(`ImplementationError - ${t}`)}}class Oe extends Le{constructor(t){super(`Unhandled Behavior Encountered: ${t}`)}}class ze extends Le{constructor(t){super(`Parsing Error: ${t}`)}}class Te extends Le{constructor(t){super(`Client Error: ${t}`)}}class je extends Le{constructor(t){super(`Resource Generation Failed: ${t}`)}}function Ke(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class Ve{get(t){return localStorage.getItem(t)||void 0}set(t,A){localStorage.setItem(t,A)}remove(t){localStorage.removeItem(t)}getMap(t){const A=this.get(t);if(A)return new Map(JSON.parse(A))}setMap(t,A){const e=JSON.stringify([...A.entries()]);this.set(t,e)}}class We{constructor(){Ke(this,"storage",new Map)}get(t){return this.storage.get(t)||void 0}set(t,A){this.storage.set(t,A)}remove(t){this.storage.delete(t)}getMap(t){const A=this.get(t);if(A)return new Map(JSON.parse(A))}setMap(t,A){const e=JSON.stringify([...A.entries()]);this.set(t,e)}}const Xe=(()=>{try{return localStorage?new Ve:new We}catch{return console.warn("Local storage was unavilable due to browser security settings. Using in-memory storage instead."),new We}})();function qe(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}const Ze=new class{constructor(){qe(this,"defaultServerUrl","https://api.spiff.com.au"),qe(this,"defaultServicesApiUrl","https://services.spiff.com.au"),qe(this,"defaultHubUrl","https://hub.spiff.com.au"),qe(this,"serverUrl",void 0),qe(this,"servicesApiUrl",void 0),qe(this,"hubUrl",void 0),qe(this,"serverUrlCallbacks",void 0),this.serverUrl=this.defaultServerUrl,this.servicesApiUrl=this.defaultServicesApiUrl,this.hubUrl=this.defaultHubUrl,this.serverUrlCallbacks=[]}getServerUrl(){return this.serverUrl}getServicesApiUrl(){return this.servicesApiUrl}getHubUrl(){return this.hubUrl}setServerUrl(t){this.serverUrl=t,this.serverUrlCallbacks.forEach((t=>t()))}setServicesApiUrl(t){this.servicesApiUrl=t}setHubUrl(t){this.hubUrl=t}addServerUrlCallback(t){this.serverUrlCallbacks.push(t)}};function $e(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}let _e;const tn=t=>{_e=t};const An=new class{constructor(){$e(this,"shadowGraphqlClient",void 0),this.shadowGraphqlClient=this.constructShadowGraphqlClient(),Ze.addServerUrlCallback((()=>{this.shadowGraphqlClient=this.constructShadowGraphqlClient()}))}getShadowGraphqlClient(){return this.shadowGraphqlClient}constructShadowGraphqlClient(){const A=(0,t.createHttpLink)({uri:`${Ze.getServerUrl()}/graphql`,fetch:d.fetch}),e=(0,w.setContext)((async(t,{headers:A})=>{const e=A||{},n=await(async()=>{const t={transactionOwnerId:_e};return"undefined"!=typeof window&&window.location.href.includes("/workflows/product/")?{...await new Promise((t=>{const A=Ze.getHubUrl();if(window.location.href.includes("localhost")||window.location.href.includes("ngrok"))return void t({});const e=n=>{n.origin===A&&(window.removeEventListener("message",e),t(n.data))};window.parent!==window&&(window.addEventListener("message",e,!1),window.parent.postMessage("ready",A))})),...t}:t})();return n.bearer&&(e.Authorization=`Bearer ${n.bearer}`),n.partnerId&&(e.partnerId=n.partnerId),n.activeIntegration&&(e.activeIntegration=n.activeIntegration),n.transactionOwnerId&&(e.transactionOwnerId=n.transactionOwnerId),{headers:e}})),n=(0,h.onError)((({operation:t,graphQLErrors:A,networkError:e})=>{(A||[]).forEach((({message:A,locations:e,path:n})=>{console.log("[GraphQL Operation Error]"),console.log("Name:"+t.operationName),console.log("Query:"+JSON.stringify(t.query)),console.log(`Message: ${A}, Location: ${JSON.stringify(e,null,2)}, Path: ${n}`),console.log("Variables:"+JSON.stringify(t.variables))})),e&&console.log("GraphQL Network error")}));const i=new(0,t.InMemoryCache)({addTypename:!1,typePolicies:{Transaction:{fields:{bulkEmailAddress:{read:(t=null)=>t,merge:(t,A)=>A||t||null},transactionOwnerId:{read:(t=null)=>t,merge:(t,A)=>A||t||null},customLogoLink:{read:(t=null)=>t,merge:(t,A)=>A||t||null},workflowFooterLogoLink:{read:(t=null)=>t,merge:(t,A)=>A||t||null},workflowState:{read:(t=null)=>t,merge:(t,A)=>A||t||null},bulkSourceUrl:{read:(t=null)=>t,merge:(t,A)=>A||t||null},externalDesignProductId:{read:(t=null)=>t,merge:(t,A)=>A||t||null},externalDesignProductVariantId:{read:(t=null)=>t,merge:(t,A)=>A||t||null},externalCartProductId:{read:(t=null)=>t,merge:(t,A)=>A||t||null},externalCartProductVariantId:{read:(t=null)=>t,merge:(t,A)=>A||t||null},lastSyncedAt:{read:(t=null)=>t,merge:(t,A)=>A||t||null}}},WorkflowProduct:{fields:{isPresent:{read:(t=null)=>t,merge:(t,A)=>A||t||null}}},Product:{fields:{imageUrl:{read:(t=null)=>t,merge:(t,A)=>A||t||null},overlayImageUrl:{read:(t=null)=>t,merge:(t,A)=>A||t||null},preloadImageUrl:{read:(t=null)=>t,merge:(t,A)=>A||t||null},weight:{read:(t=null)=>t,merge:(t,A)=>A||t||null},conversionConfiguration:{read:(t=null)=>t,merge:(t,A)=>A||t||null},bulkConfiguration:{read:(t=null)=>t,merge:(t,A)=>A||t||null}}}}});return new(0,t.ApolloClient)({link:(0,t.from)([n,e,A]),cache:i,name:"Core"})}};function en(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}const nn=t.gql`
|
|
1
|
+
var t=require("@apollo/client"),A=require("lodash.clonedeep"),e=require("react/jsx-runtime"),n=require("opentype.js"),i=require("buffer"),a=require("axios"),o=require("https"),r=require("file-type"),s=require("util"),c=require("css"),g=require("canvas"),l=require("exif"),B=require("canvg"),w=require("@apollo/client/link/context"),h=require("@apollo/client/link/error"),d=require("cross-fetch"),E=require("react"),u=require("lodash.isequal"),Q=require("react-dom/server"),C=require("qrcode"),m=require("svg-path-bbox"),p=require("lodash.debounce");function f(t,A,e,n){Object.defineProperty(t,A,{get:e,set:n,enumerable:!0,configurable:!0})}var D="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{};function I(t){return t&&t.__esModule?t.default:t}function y(t,A,e,n){Object.defineProperty(t,A,{get:e,set:n,enumerable:!0,configurable:!0})}f(module.exports,"SpiffCommerceClient",(()=>Mo)),f(module.exports,"CommandContext",(()=>MA)),f(module.exports,"spiffCoreConfiguration",(()=>Ze)),f(module.exports,"PromiseQueue",(()=>di)),f(module.exports,"QueueablePromise",(()=>hi)),f(module.exports,"MockWorkflowManager",(()=>Fo)),f(module.exports,"InformationMessageType",(()=>Ta)),f(module.exports,"StepHandle",(()=>Xa)),f(module.exports,"TextStepHandle",(()=>oo)),f(module.exports,"FrameStepHandle",(()=>No)),f(module.exports,"BulkStepHandle",(()=>_a)),f(module.exports,"ShapeStepHandle",(()=>ao)),f(module.exports,"IllustrationStepHandle",(()=>to)),f(module.exports,"MaterialStepHandle",(()=>Ao)),f(module.exports,"ModelStepHandle",(()=>eo)),f(module.exports,"PictureStepHandle",(()=>no)),f(module.exports,"QuestionStepHandle",(()=>io)),f(module.exports,"BulkPriceCalculationStrategy",(()=>vn)),f(module.exports,"OptionNotFoundError",(()=>Ue)),f(module.exports,"LayoutNotFoundError",(()=>Ge)),f(module.exports,"AssetNotFoundError",(()=>be)),f(module.exports,"ResourceNotFoundError",(()=>ke)),f(module.exports,"MisconfigurationError",(()=>Je)),f(module.exports,"ParseError",(()=>ze)),f(module.exports,"UnhandledBehaviorError",(()=>Oe)),f(module.exports,"assetService",(()=>ln)),f(module.exports,"designService",(()=>uo)),f(module.exports,"createDesign",(()=>wo)),f(module.exports,"optionService",(()=>dn)),f(module.exports,"persistenceService",(()=>Xe)),f(module.exports,"graphQlManager",(()=>An)),f(module.exports,"toast",(()=>ba)),f(module.exports,"FrameService",(()=>pa)),f(module.exports,"getBoundedOffsets",(()=>Ca)),f(module.exports,"frameStepService",(()=>Ya)),f(module.exports,"modelStepService",(()=>Na)),f(module.exports,"materialStepService",(()=>Sa)),f(module.exports,"shapeStepService",(()=>Ua)),f(module.exports,"questionStepService",(()=>Pa)),f(module.exports,"digitalContentStepService",(()=>xa)),f(module.exports,"moduleStepService",(()=>Ra)),f(module.exports,"pictureStepService",(()=>Ha)),f(module.exports,"textStepService",(()=>Oa)),f(module.exports,"illustrationStepService",(()=>va)),f(module.exports,"ProductCameraRig",(()=>Fn)),f(module.exports,"FrameStep",(()=>vo)),f(module.exports,"ConversionLocation",(()=>Nn)),f(module.exports,"ConversionData",(()=>Hn)),f(module.exports,"getWorkflow",(()=>Io)),f(module.exports,"AssetType",(()=>T)),f(module.exports,"BringForwardCommand",(()=>ne)),f(module.exports,"BringToFrontCommand",(()=>Ae)),f(module.exports,"BringToBackCommand",(()=>ee)),f(module.exports,"CanvasCommand",(()=>PA)),f(module.exports,"CreateElementCommand",(()=>zA)),f(module.exports,"CreateLayoutCommand",(()=>LA)),f(module.exports,"DeleteElementCommand",(()=>TA)),f(module.exports,"FontAlignmentCommand",(()=>qA)),f(module.exports,"FontColorCommand",(()=>KA)),f(module.exports,"FontSizeCommand",(()=>VA)),f(module.exports,"FontSourceCommand",(()=>XA)),f(module.exports,"GroupCommand",(()=>JA)),f(module.exports,"LayoutElementFactory",(()=>Ne)),f(module.exports,"LayoutElementType",(()=>N)),f(module.exports,"MoveCommand",(()=>GA)),f(module.exports,"ResizeCommand",(()=>kA)),f(module.exports,"RotateCommand",(()=>bA)),f(module.exports,"SendBackwardsCommand",(()=>ie)),f(module.exports,"StepAspectType",(()=>W)),f(module.exports,"StepType",(()=>K)),f(module.exports,"TextChangeCommand",(()=>$A)),f(module.exports,"UnitOfMeasurement",(()=>b)),f(module.exports,"dataUrlFromExternalUrl",(()=>Ut)),f(module.exports,"findElement",(()=>SA)),f(module.exports,"frameDataCache",(()=>he)),f(module.exports,"generate",(()=>F)),f(module.exports,"getAxisAlignedBoundingBox",(()=>$)),f(module.exports,"generateSVGWithUnknownColors",(()=>IA)),f(module.exports,"getAttributesFromArrayBuffer",(()=>le)),f(module.exports,"rehydrateSerializedLayout",(()=>HA)),f(module.exports,"getFrameData",(()=>Qe)),f(module.exports,"getSvgElement",(()=>FA)),f(module.exports,"loadFontFromDataUrl",(()=>Kt)),f(module.exports,"loadFontFromExternalUrl",(()=>jt)),f(module.exports,"determineCorrectFontSizeAndLines",(()=>ye)),f(module.exports,"patternImageDataCache",(()=>we)),f(module.exports,"generateCommands",(()=>Ki)),f(module.exports,"registerJSDOM",(()=>It)),f(module.exports,"minZoom",(()=>si)),f(module.exports,"AdvancedEditor",(()=>ea)),f(module.exports,"TransformWrapper",(()=>Ro)),f(module.exports,"EditorCore",(()=>Aa)),f(module.exports,"useLayouts",(()=>Qn)),f(module.exports,"useEditorState",(()=>xn)),f(module.exports,"useEditorInteraction",(()=>gi)),f(module.exports,"useShortcutCombination",(()=>li)),f(module.exports,"commandReducer",(()=>Dn)),f(module.exports,"getDefaultState",(()=>fn)),f(module.exports,"CommandContextContext",(()=>En)),f(module.exports,"AdvancedEditorStateProvider",(()=>yn)),f(module.exports,"AdvancedEditorContext",(()=>In)),f(module.exports,"UICommand",(()=>Mn)),f(module.exports,"EditorSubMenu",(()=>mn)),f(module.exports,"ElementEventType",(()=>Gn)),f(module.exports,"KeyEvent",(()=>kn)),f(module.exports,"gatherVaryingStepAspects",(()=>la));var M="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==D?D:{},x={};y(x,"CanvasCommand",(()=>PA)),y(x,"UpdateWorkflowStateCommand",(()=>UA)),y(x,"MoveCommand",(()=>GA)),y(x,"RotateCommand",(()=>bA)),y(x,"ResizeCommand",(()=>kA)),y(x,"GroupCommand",(()=>JA)),y(x,"CreateLayoutCommand",(()=>LA)),y(x,"ClearLayoutCommand",(()=>OA)),y(x,"CreateElementCommand",(()=>zA)),y(x,"DeleteElementCommand",(()=>TA)),y(x,"CloneElementCommand",(()=>jA)),y(x,"FontColorCommand",(()=>KA)),y(x,"FontSizeCommand",(()=>VA)),y(x,"FontAlgorithmCommand",(()=>WA)),y(x,"FontSourceCommand",(()=>XA)),y(x,"FontAlignmentCommand",(()=>qA)),y(x,"UpdateFramePattern",(()=>ZA)),y(x,"TextChangeCommand",(()=>$A)),y(x,"IllustrationColorCommand",(()=>_A)),y(x,"IllustrationCacheCommand",(()=>te)),y(x,"BringToFrontCommand",(()=>Ae)),y(x,"BringToBackCommand",(()=>ee)),y(x,"BringForwardCommand",(()=>ne)),y(x,"SendBackwardsCommand",(()=>ie)),y(x,"LayerCommand",(()=>ae)),y({},"generate",(()=>F));const F=()=>{const t=()=>Math.floor(65536*(1+Math.random())).toString(16).substring(1);return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()};var Y={};y(Y,"ElementNotFoundError",(()=>vA)),y(Y,"findElement",(()=>SA)),y(Y,"findLayoutForElement",(()=>NA)),y(Y,"updatedLayoutForElement",(()=>RA)),y(Y,"rehydrateSerializedLayout",(()=>HA));var v={};y(v,"CommandContext",(()=>MA)),y(v,"getSvgElement",(()=>FA)),y(v,"elementFactory",(()=>xA)),y(v,"sortElementsByLayersWithIndex",(()=>YA)),y({},"SVGLayout",(()=>q));var S={};let N;var R;let H;var P;let U;var G;let b;var k;let J;var L;let O;var z;let T;var j;let K;var V;let W;var X;y(S,"LayoutElementType",(()=>N)),y(S,"LayoutRenderingPurpose",(()=>H)),y(S,"TextAlgorithm",(()=>U)),y(S,"UnitOfMeasurement",(()=>b)),y(S,"ScaleAxis",(()=>J)),y(S,"MaterialEffectMode",(()=>O)),y(S,"AssetType",(()=>T)),y(S,"StepType",(()=>K)),y(S,"StepAspectType",(()=>W)),(R=N||(N={})).Frame="frame",R.Image="image",R.Illustration="illustration",R.Textbox="textbox",(P=H||(H={}))[P.ThreeD=0]="ThreeD",P[P.FreeDesign=1]="FreeDesign",P[P.Print=2]="Print",(G=U||(U={})).Autosize="Autosize",G.Traditional="Traditional",(k=b||(b={})).Pixel="px",k.Millimeter="mm",k.Centimeter="cm",(L=J||(J={}))[L.North=0]="North",L[L.Northeast=1]="Northeast",L[L.East=2]="East",L[L.Southeast=3]="Southeast",L[L.South=4]="South",L[L.Southwest=5]="Southwest",L[L.West=6]="West",L[L.Northwest=7]="Northwest",(z=O||(O={})).None="None",z.RemoveWhenSelected="RemoveWhenSelected",z.ApplyWhenSelected="ApplyWhenSelected",(j=T||(T={})).Font="Font",j.Frame="Frame",j.Illustration="Illustration",j.Image="Image",j.Model="Model",j.Material="Material",j.Color="Color",j.QuestionnaireCollateral="QuestionnaireCollateral",j.RequestCollateral="RequestCollateral",j.SignupCollateral="SignupCollateral",j.Video="Video",j.ColorProfile="ColorProfile",(V=K||(K={})).Bulk="Bulk",V.DigitalContent="DigitalContent",V.Finish="Finish",V.Frame="Frame",V.Illustration="Illustration",V.Introduction="Introduction",V.Material="Material",V.Model="Model",V.Module="Module",V.Picture="Picture",V.Photo="Photo",V.ProductOverlay="ProductOverlay",V.Question="Question",V.Shape="Shape",V.SilentIllustration="SilentIllustration",V.Text="Text",(X=W||(W={})).Color="Color",X.Colors="Colors",X.Selection="Selection",X.Selections="Selections",X.Text="Text",X.Upload="Upload";const q=({backgroundColor:t,outlineColor:A,borderRadius:n,configuration:i,elements:a,height:o,maxHeight:r,maxWidth:s,outlineArea:c,position:g,preserveAspectRatio:l,viewBox:B,width:w})=>{const h=n||0,d=2*(c?.scale||1),E=B||{x:0,y:0,width:w,height:o},u=`${E.x} ${E.y} ${E.width} ${E.height}`,Q=F(),C=i.purpose===H.FreeDesign&&(0,e.jsx)("defs",{children:(0,e.jsx)("clipPath",{id:"viewboxClip",children:(0,e.jsx)("rect",{width:E.width,height:E.height,rx:h})})}),m=i.colorProfiles?.map(((t,A)=>(0,e.jsx)("color-profile",{name:t.name,xlinkHref:t.key,children:" "},A))),p=YA(a.map((t=>({...t,_renderingConfiguration:i,mask:c?`url(#viewmask-${Q})`:void 0}))));return(0,e.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",xmlSpace:"preserve",version:"1.1",preserveAspectRatio:l,width:w,height:o,style:{gridColumn:1,gridRow:1,maxWidth:s,maxHeight:r,position:g},viewBox:u,children:[m,C,!!t&&(0,e.jsx)("rect",{id:"layout-background",width:E.width,height:E.height,fill:t,rx:h}),(0,e.jsx)("g",{id:"element-group",clipPath:i.purpose===H.FreeDesign?"url(#viewboxClip)":void 0,children:p.map((t=>xA(t))).filter((t=>!!t))}),c&&(0,e.jsx)("rect",{x:c.x,y:c.y,width:c.width,height:c.height,fill:"none",stroke:c.hidden?"none":A||"#aaaaaa",strokeWidth:d/2,strokeDasharray:`${2*d} ${d}`}),c&&(0,e.jsxs)("mask",{id:`viewmask-${Q}`,children:[(0,e.jsx)("rect",{x:E.x,y:E.y,width:E.width,height:E.height,fill:"black"}),(0,e.jsx)("rect",{x:c.x,y:c.y,width:c.width,height:c.height,fill:"white"})]})]})};y({},"Image",(()=>dt));var Z={};y(Z,"getAxisAlignedBoundingBox",(()=>$)),y(Z,"degreesToRadians",(()=>tt)),y(Z,"findAngle",(()=>_)),y(Z,"radiansToDegrees",(()=>At)),y(Z,"isCloseToValue",(()=>et)),y(Z,"getTrueCoordinates",(()=>nt)),y(Z,"getPointOfRotation",(()=>it)),y(Z,"getNWPoint",(()=>at)),y(Z,"getNEPoint",(()=>ot)),y(Z,"getSWPoint",(()=>rt)),y(Z,"getSEPoint",(()=>st)),y(Z,"turnRightClockwise",(()=>ct)),y(Z,"currentDirection",(()=>gt)),y(Z,"getElementVertices",(()=>lt)),y(Z,"rotateAroundPoint",(()=>Bt)),y(Z,"mmPerPixel",(()=>wt)),y(Z,"cmPerPixel",(()=>ht));const $=(t,A,e,n,i)=>{const a=tt(i),o=e/2,r=n/2,s=t+o,c=A+r,g=Math.sin(a),l=Math.cos(a),B=-r,w=o*l-B*g,h=o*l-r*g,d=o*g+B*l,E=o*g+r*l,u=Math.max(Math.abs(w),Math.abs(h)),Q=Math.max(Math.abs(d),Math.abs(E));return{minX:s-u,maxX:s+u,minY:c-Q,maxY:c+Q}},_=(t,A,e)=>{const n=Math.sqrt(Math.pow(A.x-t.x,2)+Math.pow(A.y-t.y,2)),i=Math.sqrt(Math.pow(A.x-e.x,2)+Math.pow(A.y-e.y,2)),a=Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2));return Math.acos((i*i+n*n-a*a)/(2*i*n))*(180/Math.PI)},tt=t=>t*(Math.PI/180),At=t=>t*(180/Math.PI),et=(t,A,e)=>Math.abs(t-A)<e,nt=(t,A,e)=>{const n=Math.sin(tt(e)),i=Math.cos(tt(e));return{x:(t.x-A.x)*i-(t.y-A.y)*n+A.x,y:(t.x-A.x)*n+(t.y-A.y)*i+A.y}},it=(t,A)=>({x:(t.x+A.x)/2,y:(t.y+A.y)/2}),at=(t,A,e,n)=>({x:t.x+A?.x*e,y:t.y+A?.y*n}),ot=(t,A,e,n)=>({x:t.x+(A?.x+A?.width)*e,y:t.y+A?.y*n}),rt=(t,A,e,n)=>({x:t.x+A?.x*e,y:t.y+(A?.y+A?.height)*n}),st=(t,A,e,n)=>({x:t.x+(A?.x+A?.width)*e,y:t.y+(A?.y+A?.height)*n}),ct=t=>{switch(t){case J.North:return J.East;case J.East:return J.South;case J.South:return J.West;case J.West:return J.North;case J.Northwest:return J.Northeast;case J.Northeast:return J.Southeast;case J.Southeast:return J.Southwest;case J.Southwest:return J.Northwest}},gt=(t,A)=>A>45&&A<=135?ct(t):A>135&&A<=225?ct(ct(t)):A>225&&A<=315?ct(ct(ct(t))):t,lt=(t,A={x:0,y:0},e={x:1,y:1})=>{const n=tt(t.rotation),i={x:A.x+t.x*e.x,y:A.x+t.y*e.y},a={x:t.x+t.width,y:t.y},o={x:A.x+(t.x+t.width)*e.x,y:A.y+(t.height+t.y)*e.y},r={x:A.x+t.x*e.x,y:A.y+(t.height+t.y)*e.y},s={x:(r.x+o.x)/2,y:r.y-t.height*e.y/2};return{a:Bt(i,s,n),b:Bt(a,s,n),c:Bt(o,s,n),d:Bt(r,s,n),center:s}},Bt=(t,A,e)=>{const n=Math.sin(e),i=Math.cos(e);return{x:(t.x-A.x)*i-(t.y-A.y)*n+A.x,y:(t.x-A.x)*n+(t.y-A.y)*i+A.y}},wt=.352778,ht=.035277,dt=t=>{const A=t.rotation||0,n=tt(A),i=Math.cos(n),a=-Math.sin(n);return(0,e.jsx)("g",{mask:t.stepName||t.productOverlay?void 0:t.mask,children:(0,e.jsx)("g",{transform:`\n matrix(1, 0, 0, 1, ${t.x}, ${t.y})\n matrix(1, 0, 0, 1, ${t.width/2}, ${t.height/2})\n matrix(${i}, ${-a}, ${a}, ${i}, 0, 0)\n matrix(1, 0, 0, 1, ${-t.width/2}, ${-t.height/2})\n `,children:(0,e.jsx)("image",{xlinkHref:t.src,preserveAspectRatio:t.preserveAspectRatio,width:t.width,height:t.height})})})};y({},"Frame",(()=>Et));const Et=t=>{const A=`spiff-frame-${t.id}`,n=`spiff-frame-blur-${t.id}`,i=`spiff-frame-blur-edge-${t.id}`,a=`spiff-frame-focal-mask-${t.id}`,o=!!t.focalBlur&&!!t.pattern,r=t.rotation||0,s=tt(r),c=Math.cos(s),g=-Math.sin(s);return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("defs",{children:(o=>{const r=t.pattern?.x||0,s=t.pattern?.y||0,c=t.pattern?t.pattern.width*t.pattern.scaleX+Math.abs(r):256,g=t.pattern?t.pattern.height*t.pattern.scaleY+Math.abs(s):256,l=t.pattern?t.pattern.width*t.pattern.scaleX:256,B=t.pattern?t.pattern.height*t.pattern.scaleY:256;return(0,e.jsxs)("g",{mask:t.stepName?void 0:t.mask,children:[(0,e.jsx)("pattern",{patternUnits:t.pattern?void 0:"userSpaceOnUse",x:0,y:0,width:t.pattern?1:c,height:t.pattern?1:g,"data-frame-width":t.pattern?c:void 0,"data-frame-height":t.pattern?g:void 0,id:A,children:(0,e.jsx)("image",{preserveAspectRatio:"none",x:r,y:s,width:l,height:B,xlinkHref:t.disablePlaceholder&&!t.pattern?"":t.pattern?t.pattern.src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAACXBIWXMAAAsSAAALEgHS3X78AAAZL0lEQVR4nO2diVIbSRZFq/GCsZBZjRea6fn/r+oZGrMYBBhkLGwzE1cmTSqVWXuqVFXnRHREG6OlpX43X771j5O/7/+XAEAvWeFrB+gvCABAj0EAAHoMAgDQYxAAgB6DAAD0GAQAoMcgAAA9BgEA6DEIAECPQQAAGuLnz5+Nf/QIAEADyPhHl+fJ5/PTRj/+53z5AItFxn9y+in5Nvn2+3Xf7r5r5FvAAwBYID7jH4/Hyfcf3xv5GhAAgAXhM/5nK8+SD+8/Ji+ev2jka0AAABZAmvGvrr5q7CsgBgAQGZ/x68R/t/e+UeNPEACAuPiM/9Xqq+T9u4/Js2fPGv/0uQIARGLZjT/BAwCIw2TyLTk9O5mJ7i+b8ScIAED9yPiPTz4lPx+eKv2W0fgTrgAA9VKn8esKcXx8NH3OWCAAADUhd981frG9tVPK+BU/+Prt6/Q5Y4kAAgBQE0rtDQaDuSdTLKCIAbvBQwnKaHQR5WtCAABqRDX9b4ZvZp5QBpz3FA9lDvb23kf5mhAAgJpJE4G0mv8m0oYIAEAEQiJwdnbinQPQVM0AAgAQCZ8IyMBl6LYIyCtoqmAIAQAoyZeb68w2XonAK6fe3xYBxQWOjg4bqxZkOzBAQW7HN9OovIxfJ3zWMA+fe588Gvr3798bLRjCAwDIiQz59Ox4psT3y82XTC9Axiyj9nkCdRq/3l/ROYMIAEAOpq76p8Pkdnw788vq6R/f3mQ+QUgEDPIk9j8eVDJ+eRnnF2eFHkcvAEAGvvJesbO1kwyHG7mN1oiA7zpQhZkrxiRJVs5Pc88YxAMASCFU2//nx4Nkc3O78Ikd8gR0lSgzIdgXX7i/v899FUAAAAL4jF+uugy4yiQfiYAq+3R9sCkqAnXUDiAAAB5kXOcXn+eMX651HRF69Q1oHmBZETAxiarpQwQAwMP19eWMceVJ9xVFXkQZETCeSR3DRhAAAIe7u6/J5fXl7x/KuLa3dit9TKE7eVERqHvYCAIA4HB1dTnzg92dt5XcflUMHv7zn2A3YJoI6LGGGJOGEAAACxmZhnAY5PpXCfjJgD+fn02NdhpTKOgJ6LF6jlhjxhAAAIuxU+jzZrhR+uMxxm/wNQLZSATeefr+9Ryu8a8P1mspGUYAACzsSj9F6sue/q7xG7JEYG3tdfJ2d2/u52424t3eh1qyEQgAwCOKqtuR9bW1tVIfzdXVyGv8hiwRkNfhE4EkQjYCAQB45Mf32aaeMgs7Fbm/uHya36c7vaoG88wFsPGJQIxUJAIA8Ihb618UGb8i9wZ7+acM9/Wr1zPPWEQEYhh/ggAAPOF6AEVwjdi3+Vflv76W4NHlefCVJAIf3+9HMf4EAQB4wg34PTw85P50FJAzI8BCa7/LNgIpMBgLBAAgwN23u8IfjSoG03b+190NWBUEAOAR96SVe5417cdFBp6VOkwTgdEofB2IAQIAYOEG6pTSi4ERATfTsLKyWJNEAAAs3Nx/npl/ZXn438PMc0sMhhUqD8uAAABYTEd8OfX4WuYRA9fd394uvkS0KggAgIUMcHNjc+ZnigXUHaDT1cIuO1Zt//pguPCvAgGATqA8vN06WwWfF+C25lZBz2NXC8r1393xl/7GBgGA1mNm46n+/r+Hf1c2VHkBoa68qkFBt0lIQqPXWrTrb2AzELSa0NYdnaq6U1dxq2Xs9kltkLuuE7uI0ep9quLPLhVOpqvD9iq1HFcFAYDWEjJ+G6X1Nje3SlfTufX9Bp3cihXk2QugU19ThtxsQtPGnyAA0GYkABq1ZZp4ZJShhp4qQhASAfOag8FgWvwjr+P5ixfTngK9j/vJZBro86URl8H4EwQA2o5rnDKsm5svQa+grBCErgNFkUjozl9lzFidIADQanS6KvBnkIF/+LA/Ndir66tUj2D37V6hnn/N5dNcv7JrvdQopF6BpgJ+PhAAaD2uF6D2WZ3wuiLcOCk3FxmlVnwVEYLQnT6EgoZy92N29ZUFAYDWE/ICDPp7eQShe3xSUgjkEWiI6GQySSb3k9/exq9ZgqvJ6svVZLA+LDVZaFEgANAJjo+PZsZ5Gy/AJpYQtBkEADqBtvl8Ojn6/Z+iVlvt2/eRRwiKrv5uKwgAdIY8XoCNREN3efsxNkVy/W2FUmDoDErv2bgrvlwkDooVuDMADLrTK4CoWgN5DHl37rcJBAA6gwzavrvrZNcpn4YyCCEPwNBlIUAAoFO4XkBaY5CbPlTc4F8H/062Nra8v28LQV2dgU2DAMBSYRZhlkX5dtsLCJXi+ozfjOja3t6dCoG7zMMgITCdh7fjm1b/D4QAwNJgWmW1CDPLdU9jPhbw1MIr9/3o06HX+O1An4RAY77ThEBjw9ueLkQAYCnQiWz65HXCKqVX1s0evF6fGehh5vr5ugezVmyHhCA0+79tkAaExknrtivbNec278h47+/vZ4y/TF+/PBMJ0+bGVuuNXzxfgvcAEERewcPPn9PqvCIod283A7kCU3bXnjINy1jTXxauANA4rnG7CzN0khcdyqlTPXR3j7Vos40gANA4umfbxTgrf6zMGW+Z1VnDN/NXB7n9GP8TCAAsBcM3TwavwhzN8vOJwOnZce5CHAlLyAuAXyAAsBTI4O2Umsp4zbZdG+X103bqu7jXi1BdQF9BAGBpsPP38gJUEOQTAUXy84qAREVuv02sfX9tBAGApWE+f/+rDiBNBPJUDbppxJj7/toGAgBLgxu5tw01JAKqGswSAaXtFrX1t20gALBUuJF721B9IqA8fx4RmG8SwgtIEABYNtzIvWuoEgFN67ExIpBWOiwvwK0vuPnSjY6+KiAAsHS467zGt7Mdd4rsq0TYxnTopYnA0JNW7OKQjyIgALB0uKf1tKTXMVQF9lwRSB5Lh0Mi4LYKSzRuOtLXXxYEAGpDRqpqvSqtvAb7tA4ZqhEBd5W3RGA0Ovc+rxsLUEtvn0EAoBYUhDN99mrl1YDOKkLgntahbkH9ntpyXRG4vL70lg6/sXb/Tzf1bO/2+n8ABAAqM3lMx9nBOhXyVBUCOxio5w659mrL9YlAqH9Ak35pCPoF8wCgEjLMo6PD4A4+Q5mlnO72X3fjj4sRIve96HF7e+9/9/3rebs+7z8veABQCbnpa2trM0+hk9gdlVXGI5CRavW2/Rxp+X55Agd//jWX7tPj7NJhjP8JBAAqo6k6ttHpBJYouPn6pIQQuM08WWPCZNwa8eWKQJH+gT6BAEBlZHRTF9uZw6cIu2bp+RZv5BWCrMIgHyERUGaB038WBABqQYaqQJyNIvEybt3btabLN0E3jxC4XoBbGOTDiIDEQ8Kk1y8zW7DrEASEWjGjvW3swZ76+9HoIhg0lLew+3ZvTizswaEyaN31857miht0YYBnDPAAIBd5784ydHezjgzeBO/09zJexQfctF3y6BFo4YYM3nb1bS9A4jH+epv7i8P4wyAAkIkp8sm7sUfFNfYQDrdjTye3DDpNCHTaK71odvG5sYCsxZ+QDwQAUrGLfPK03Rp8mYHzi88znoQRgv39A+/sPrOLT+KjFVy2F6D30/a1XMsAMQAI4ivyKbIRx/d4icL+x4Pg7+vED5X9Kj6w8mxlOtcvyVEYBNngAUAQud12IU5SYABHEsgMKB8fGu+dtY9P8QFj/EmOwiDIBgGAVKpM4UkeA3Bu265O+FC3XmIJwZ8fD7w1BLPPxVCPKiAAkEmaCOQZq+XLDKhGIMt4p00+jzUEISFgqEc1EADIRUgEzs5OchmgmxlIHvv283gRaiAKCcEbqvsqQRAQCuHb5Ju1YtvgW89dZs22KgZHlxfJy5cvaemtCAIAhVFa7ptzcucVgVBmIM9joX64AkBhqnTbhTIDukrA4kEAoDBVW259mQGl9Ipu/4XqIABQiqoi4MsMKLbAxp7FggBAadJEYHQZzvMbfJkBlf5S4rs4EACoREgEQgM5XdyeAXF+/pkKvwWBAEBlfBOBkpwi4HusKTKiwCc+CADUgonulxEBX2aArT2LAQGA2ig6n9/GzQyows8dBQb1QyEQ1E5oPn+eZRxqEtLjqPBbDAgARCEkAvZ8QGgeBKDjKJB2fz+Zi6o/f/EiWXv1Omr5LSKw/CAAHUW59PH4dmaAhg911w3W16MZpBp3NPbbBRFYDhCAjmE65dxmnSyUi9/deRtlgq5vVHiCCCwFCEBHkKt/fX05HbRRBU3pjRF9D4mAevyLLAyFennO59l+1GKrbjrfqa+TffB6dq7f5H6S3N3deZdzqBRXz1d3FN6c9LYIKCuA8TcLAtByfIE25eG1A3+wPvSu4zLoVNZ8fXeslxn4EVME2M+/HHAFaDE+4w+t1gqhq4Mad3yjuGMZqeIUnPzLAQLQUnzGX+X+TqCun1AK3EJ8xi9DrRK8k5G7QzqSx71+eSb/QjtBAFpGyPjrOKV9IjBd6fV53jOAboAAtAjd12MZv0HP5Y7/1riu0O5+aDcIQEswI7Vt45ehxrifb2/tzgUR2cbbTRCAlqBIvZvnXx8Mo7z5X1t7Z+f1yQsgFtA9EIAWc3p2Em10ljwL1wsY3zKrr2sgAC2h6pLOMrivpwpC6BYIQIuouqSzKG6xzo8fP/r3oXccBKBlVF3SWQS3M7BohyEsPwhAC/GJQN6FHEXJW1IM7QQBaCkSgbJbeYrw8PDw+7fdYZ/QfhCAFlNlNVde7LqD1Zerff/IOwcC0GKq7ufLws0urK2t9f0j7xwIQMuJKQJu+S8tvN0DAWgAGeWXGrfeVF3SGcKeEaBgYIx5gdAsCMCCMTX96r3/7+HftQlB1SWdLnpfdm2BWxoM3QABWCDG+E0+XQZmhKCOldhVlnTaTKcEjS5+/0SnP0NBugkCsCBc47eREKiu//j4qHLbbZUlnYbzi7O5lmPoJgjAAvn+/cml9uXU1XGnJRpVhaDKkk79vb1MZGtji+Bfh0EAFoTc88HgaTz3rwWYe3N39qQmISgjArr324E/vbeNDe7+XQYBWCDuzL7x7W2y//FgOswzyyMo0+yTJgJu8FFbee2hoHrMNJ4QcXcgNA9TgReMTl/7lDWbcRQjuLm5ni7mCGF25hetz89a0um+Jxm/hIO0X/dBABaMTnJF/Q2a4//hw/7vP+vvr65G3jn9hjJCEFrSqeewvQuMv18gAA0gl17uvcG3Hy+GEIRm/xsw/v6BADSAexor2KZYgI88QqAYwnC4keu+HhKBmNuBYXlBABoijxdgI9HQZF77MTZmH2AeIXBFQMavKkICfv2DLEBDuKW1WWO3JQ6KFShm4EMBPgUQD//5z9RjSGsCsheA6BqB8fcXtgM3hAzaDsCZ5RtpXoCi9SEPwGCE4Or6KtUjMFN/KfLpN3gADeJ6AWmNQW6qTm77vw7+Pa3U82F7BKHnxfiBGEDDKCVop+Fk1G5U32f8ttueJ1Co59ze3om2TATaCR5Aw8zHAka//133+KNPh6nGnzwat2YESjzcYaEGzfZjwCe4IAANM3i9PlOqK2PXie7rHsyK1oeEgPw+hOAKsATo1LdLgGW89/f3M8a/PlhPdnf2CkXrFVTU/X9zYwvjBy8IQAl0Qqu+/sf32Qad5y9eJGuvXhdOqem0V7DOrdU3SBB0sgPUDWnAAug0VQdfVipOrvqwwOpuCYaM/PJ6vhYA44eYIAA50Gl/fvE592os/Z7+UXGPgnx5hGD4ZmNOAOT2Y/wQE4KAGejU/+fTYam9eGbm3+nZceZ47l9z9/wRfIBY4AGk4ObfDSrHdZdk3N3dBa8GGrGlv8+KxKuzz349PW77x3fSdxANgoAB3Mh8kqP91gz1MKk8lzzpOHkL9kw+YgAQE64AHpQ+s41fhvtu7/3UENNOYwXzJBBmzJeL2eXvrtyyceMFITEBqAMEwEGnuDsbT6d2kRJaIwRq8XXn8RkRCBm16vPdjj+7OhCgThAAhxt3I87GZukiGhnzwZ9/zU3+lQicnZ0EHzffJIQXAHFAABzcunt3km9R0vb2hU52CYf7+zdf6tslCGBAACy0nss+aYc1peVCK7sUZwid7O5rS5jq2vkPYEAALNzSXjXq1IWCh7u7b+eeLeQFmIEdBl0bbmrcKAyQIACzKFdvU/eYLAUS3WKftPu9GwtQSy9AnSAAAUKz96riiymMb/2bgeUFmGuDhGN7ezfmfzL0EATAwq7ky2r4KYuv5Hf8dRx8NmUhKAaCWCAAFnPpukhBN7fYJ63PYDid4IvxQxwQAIuVP2Y/jrtIXoDqCtyKwlB1IOO6ISYIgMXq6urMn6vs6M/CFQACfNAECIDFS0cAYube3W5CgCZAACzWPJF/cu/QZRAACzOay0bVemnde2WZ3E9mHsmSDmgCBMDBl6fXOLC6rwKTyZMAuNkHgEWBADj48vRK040uz2t7DXkUdvXf2iviAdAMCICH7a3ducYdBQQ1IqwO3F19GggK0ASdEYA6XXTFAnyNO3WIwK9lHU8tx/I2mPkHTdEJAZBLrR16dQbr1Ljj27wr480z5deH3t+pNQhEXkbVeQMAVWi9AMiozIitrHl7RVHzjW9Ut4Z2pq3d9qFZA3p/9vYfbevl9IcmafVUYBn90dHhjFHFWIQZGg+eWEHDwfrQa8wy/JsvX+aai2jwgWWg9WPBfcYZQwR8Y8JdJAC2CCjX79v3h/HDstCJvQCLEgEF8DQxuOyATr0nuf15dwYCxKYzi0FCIrC/f1D7PVvewNX1VXCbrw8NGNl9u8edH5aKTm0G8omAquw0lbfutlplAcZfb6degUaJ+cRAxq4Fn4PBOvv5YSnp3GqwRYqAja4F9lDRly9X6eWHpaeTuwGPPNt8FyECAG2jNXUAcrnlbucJwIUWcZycfmK2PoDFUnsAMnZtxFHhjW34Cu4NBoPMTb0y+JiegF4DjwLazFIKgAzr+voyuby+zPxdleuGxmXHFAHz3NrgQ1oP2srSXQEmj656HuMX+r1Qg07aXr4q7b22sKguoEhJMMAysVQCYOr63RNbbr7y6PrHbdNNMrr0QiJQtrPP51XcsLcPWsrSXAF0itp7+ZPH4hmtx3LHZel3R6OLudz7u733wT3+vr6BpGBZrs/4yS5Am1kKD0ANM67x72ztJB8+7Htn5enOrTJf1xuQKISQF+F7TF5PwLQcY/zQJRoXABnW+fnnmZ+93d3L7JNXZZ0M2kanfNp93DymqAjYLccGjB+6QKMCYAzLdstl/Hmj6jJot18/ax5AURHwvUeMH7pCYwKg+/R02q5lWHL7i6bU3N//8f1H5mPSRMD2IDB+6DqNCcD5xdlctL/MbPyyTTYhETBpPYwf+kBjArCyMv/SdY/0ykIioMyBi0TANX519WH80DUaEwCl3tz7uwyuqAi4vQFFd+7J61DcwcU2fr3Pd3sfMH7oHI0GAdNEIO/UHXeDb5krwZvpDv55EUgY3wUdp/E0YEgEzs5OMqvr9PdXV08lw8r1l92x5xMBjB+6TnQByLNj3ycCedp3Vc9vewqqGqyCLQIYP/SBqAKgvPqnk6NczTIytiI9/HpOe/KPyobr6MrTc3x8v4/xQy+IJgD2aK68HXN5B3m4fQNK5WngZl2wqhv6QhQBcPffJY8ikHUdSGvflQjI3ZewuMavfD7TdgGKE60bcDQ6n+vpzzurPzTIwyXG7H+APhHtCuDbq5c3zx/yBGZ+B+MHqEzUIGCVYp80EZDxH/z5F8YPUJHoacCqIrC3936uXl+PrzLSCwB+sZBCoCoiUHWQBwCEWVglYJoIZFX8lR3kAQDpLLQU2FfsIxHIs7ADEQCon4X3AlTZ2pN3kAcA5GPhApBV7FNWBJjPD1Cc3AJQ59z7OkQgNMgDEQDITy4BMCOx65zWkyYCagXOIjTIAxEAyE+mANgjsese2RUSga/fvuYK7IUGeeTpOwCADAEwRm/GY5UZ2ZVFqNhHgT0tDMkiNMiDjj6AbFIFQEU4WsNtE0MEQsU+WhiSJ/bAIA+AcuTqBrR7+w0xmnHktmuAiE3a+m/f4zn5AfKTKwhYx/DOPMh4tRzERi3FeTMQGD9AMXKnASUCmo1vk3d4ZxGGw4254R7jr7d8rQARKFQItLuzVzp3nxcFBV1vg4g+QBwKCUDVAp68DJ3hnpPJhK8fIAKFS4EXIQJ6DfsaUGecAQCeKNULsAgRYMgnQHxKNwPFFgH71NfMfwCon0rdgEYE3NNaIlBlZJeM3xaA1dXV2v/DAaCGdmCJwLtAKW/ZQR1XV6OZPw+c9CMA1EMt8wDSBnWcnh0Xug64S0Xk/jP9FyAOtQ0ECYnA7fj291afLNRfcOq0Am9v72Q+DgDKUftmINM+bDoIbVTmqxy/rg0ucvsvLi9mfqoGnzoWfgKAnyirwdJEIHl069fW1qb/Ls/g7u5uzkOgqw8gPtF2A+bd7+ejSAcgAJQnmgAYfK59iOma7923yfpgyFcKsACiC0Dy6OZLCMbjsfdaIMPf3NgMxgcAIA4LEQAbpfkkCA8/fyYrjzX/9PEDNMPzRb+qjH2NLxtgKVj4YhAAWB4QAIAegwAA9BgEAKDHIAAAPQYBAOgxCABAj0EAAHoMAgDQYxAAgB6DAAD0GAQAoMcgAAA9BgEA6DEIAEBfSZLk/xjo1hVZWiK0AAAAAElFTkSuQmCC"})}),o?(0,e.jsx)(ut,{path:t.path,width:t.width,height:t.height,focalBlurStrength:t.focalBlurStrength||1,focalBlurRadius:t.focalBlurRadius||10,blurFilterId:n,focalMaskId:a,blurEdgeClipId:i}):null]})})(o)}),(0,e.jsx)("g",{mask:t.stepName?void 0:t.mask,children:(0,e.jsxs)("g",{transform:`\n matrix(1, 0, 0, 1, ${t.x}, ${t.y})\n matrix(1, 0, 0, 1, ${t.width/2}, ${t.height/2})\n matrix(${c}, ${-g}, ${g}, ${c}, 0, 0)\n matrix(1, 0, 0, 1, ${-t.width/2}, ${-t.height/2})\n matrix(${t.scaleX}, 0, 0, ${t.scaleY}, 0, 0)\n `,children:[(0,e.jsx)("path",{filter:o?`url(#${n})`:void 0,mask:o?`url(#${i})`:void 0,d:t.path,style:{fill:`url(#${A})`,opacity:t.opacity}}),o?(0,e.jsx)("path",{mask:`url(#${a})`,d:t.path,style:{fill:`url(#${A})`,opacity:t.opacity}}):void 0]})})]})},ut=t=>{const{path:A,width:n,height:i,focalBlurStrength:a,focalBlurRadius:o,blurFilterId:r,focalMaskId:s,blurEdgeClipId:c}=t;return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("filter",{id:r,children:(0,e.jsx)("feGaussianBlur",{stdDeviation:a||0})}),(0,e.jsx)("mask",{id:s,children:(0,e.jsx)("circle",{cx:n/2,cy:i/2,r:o||0,fill:"white",filter:`url(#${r})`})}),(0,e.jsx)("mask",{id:c,children:(0,e.jsx)("path",{d:A,style:{fill:"white",opacity:1}})})]})};y({},"Textbox",(()=>EA));var Qt={};y(Qt,"fontSizeStep",(()=>AA)),y(Qt,"textWidth",(()=>eA)),y(Qt,"charWidth",(()=>nA)),y(Qt,"lineWidth",(()=>iA)),y(Qt,"applyTextTransformations",(()=>oA)),y(Qt,"zip",(()=>rA)),y(Qt,"getTextAlignment",(()=>sA)),y(Qt,"getAnchor",(()=>cA)),y(Qt,"recomputeTextOnElement",(()=>gA)),y(Qt,"defaultLineHeightFactor",(()=>lA));var Ct={};y(Ct,"refitTextbox",(()=>_t)),y(Ct,"recalculateTextboxRegion",(()=>tA));var mt={};y(mt,"FontMetrics",(()=>zt)),y(mt,"loadFontFromExternalUrl",(()=>jt)),y(mt,"loadFontFromDataUrl",(()=>Kt)),y(mt,"getFontMetrics",(()=>Vt));var pt={};y(pt,"registerJSDOM",(()=>It)),y(pt,"createElement",(()=>Ft)),y(pt,"createElementNS",(()=>Yt)),y(pt,"domParser",(()=>vt)),y(pt,"fetchAsArrayBuffer",(()=>St)),y(pt,"fetchAsString",(()=>Nt)),y(pt,"loadFontFaceSet",(()=>Rt)),y(pt,"xmlSerializer",(()=>Ht)),y(pt,"toBase64",(()=>Pt)),y(pt,"dataUrlFromExternalUrl",(()=>Ut)),y(pt,"arrayBufferToDataUrl",(()=>Gt)),y(pt,"arrayBufferToBuffer",(()=>kt)),y(pt,"dataUrlToArrayBuffer",(()=>bt));var ft=i.Buffer;let Dt;function It(t){Dt=t}function yt(){if(!Dt)throw new Error("JSDOM is not registered. Please register it before calling this function.");return new Dt}if(void 0===M.TextEncoder){const{TextEncoder:t}=s;M.TextEncoder=t}if(void 0===M.TextDecoder){const{TextDecoder:t}=s;M.TextDecoder=t}const Mt=new(I(o).Agent)({rejectUnauthorized:!0}),xt=t=>t.every((t=>"undefined"!==t)),Ft=t=>xt([typeof document])?document.createElement(t):yt().window.document.createElement(t),Yt=(t,A)=>{if(xt([typeof document]))return document.createElementNS(t,A);const e=yt().window.document.createElement(A);return e.setAttribute("xmlns",t),e},vt=()=>xt([typeof DOMParser])?new DOMParser:new(yt().window.DOMParser),St=t=>{if(xt([typeof fetch]))return new Promise(((A,e)=>{fetch(t).then((t=>{A(t.arrayBuffer())})).catch((t=>{e(t)}))}));{const A=t.replace("localhost","localstack");return new Promise(((t,e)=>{I(a).get(A,{responseType:"arraybuffer",httpsAgent:Mt}).then((A=>{t(A.data)})).catch((t=>{e(t)}))}))}},Nt=t=>{if(xt([typeof fetch]))return new Promise(((A,e)=>{fetch(t).then((t=>{A(t.text())})).catch(e)}));{const A=t.replace("localhost","localstack");return new Promise(((t,e)=>{I(a).get(A,{responseType:"text",httpsAgent:Mt}).then((A=>{t(A.data)})).catch(e)}))}},Rt=async(t,A)=>{if(xt([typeof FontFace])){const e=t.names.fullName.en,n=new FontFace(e,`url(${A})`);return document.fonts.add(n),n.load()}},Ht=()=>xt([typeof XMLSerializer])?new XMLSerializer:new(yt().window.XMLSerializer),Pt=t=>xt([typeof btoa])?btoa(t):ft.from(t).toString("base64"),Ut=async t=>{if(xt([typeof fetch,typeof Blob,typeof FileReader])){const A=await fetch(t),e=await A.blob();return await Lt(e)}const A=(await I(a).get(t,{responseType:"arraybuffer"})).data;return Gt(A)},Gt=async t=>{const A=await(async t=>{const A=await(0,r.fromBuffer)(t);return A?A.mime:"image/svg+xml"})(t);return`data:${A};base64,${kt(t).toString("base64")}`},bt=t=>{const A=t.replace(/\r?\n/g,""),e=A.indexOf(",");if(-1===e||e<=4)throw new TypeError("malformed data: URI");const n=A.substring(5,e).split(";");let i=!1;for(let t=1;t<n.length;t++)"base64"===n[t]&&(i=!0);const a=i?"base64":"ascii",o=unescape(A.substring(e+1)),r=ft.from(o,a);return Jt(r)},kt=t=>ft.from(t),Jt=t=>{const A=new ArrayBuffer(t.byteLength),e=new Uint8Array(A);for(let A=0;A<t.length;++A)e[A]=t[A];return A},Lt=t=>new Promise(((A,e)=>{const n=new FileReader;n.onload=function(t){const n=t.target;n&&n.result?A(n.result.toString()):e()},n.readAsDataURL(t)})),Ot=new Map;class zt{constructor(t){this.font=t,this.glyphsFromText=new Map,this.kerningValues=new Map,this.height=this.calculateApproximateHeight()}getFont(){return this.font}getGlyphs(t){const A=this.glyphsFromText.get(t);if(A)return A;const e=this.font.stringToGlyphs(t);return this.glyphsFromText.set(t,e),e}getApproximateHeight(){return this.height}getExactHeight(t){const A=this.font.stringToGlyphs(t);let e=0,n=0;return A.forEach((t=>{const A=t.getMetrics();e=Math.max(e,A.yMax),n=Math.min(n,A.yMin)})),e-n}getKerningValue(t,A){let e=this.kerningValues.get(t.name);e||(e=new Map,this.kerningValues.set(t.name,e));let n=e.get(A.name);return n||(n=this.font.getKerningValue(t,A),e.set(A.name,n)),n}calculateApproximateHeight(){const t=this.font.stringToGlyphs("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");let A=0,e=0;return t.forEach((t=>{const n=t.getMetrics();A=Math.max(A,n.yMax),e=Math.min(e,n.yMin)})),A-e}}const Tt=t=>"data:"===t.substring(0,5).toLowerCase().trim(),jt=async t=>{const A=Tt(t)?Kt(t):Kt(await Ut(t));return Wt(A,{assetUrl:Tt(t)?t:await Ut(t),name:A.names.fullName.en}),await Rt(A,t),A},Kt=t=>{const A=bt(t),e=I(n).parse(A);return Wt(e,{assetUrl:t,name:e.names.fullName.en}),e},Vt=t=>{const A=Ot.get(t.name);if(A)return A;throw new Error("Font metrics unavailable for font")},Wt=(t,A)=>{const e=new zt(t);return Ot.set(A.name,e),e},Xt=(t,A,e,n)=>Math.max(nA(t.join("\n"),e,n),A),qt=(t,A,e,n,i,a)=>{const o=(a||lA)*i.getApproximateHeight(),r=A.split("\n");try{const A=r.flatMap((A=>Zt(A,t.width,n,i))),a=A.flatMap((t=>t.lines));return{lines:a,requiredHeight:A.flatMap((t=>t.lines)).length*(n*o),fontSize:e,requiredWidth:Xt(a,t.width,n,i)}}catch(a){const r=A.split("");return{lines:r,requiredHeight:r.length*(n*o),fontSize:e,requiredWidth:Xt(r,t.width,n,i)}}},Zt=(t,A,e,n)=>{const i=eA(t,e,n);if(i<=A)return{lines:[t],width:i};if(!(t.indexOf(" ")>-1)){if(t.length<=1)throw new Error(`Character ${t} is wider than region`);const i=Math.floor(t.length/2),a=Zt(t.slice(0,i),A,e,n),o=Zt(t.slice(i),A,e,n);return{lines:[...a.lines,...o.lines],width:Math.max(a.width,o.width)}}const a=t.split(" "),o=[];let r=-1/0,s=0;for(;s<a.length;){const t=a[s];if(eA(t,e,n)>A){const i=Zt(t,A,e,n);o.push(...i.lines),r=Math.max(r,i.width),s++}else{const i=[t];r=Math.max(r,eA(t,e,n));let c=s+1,g=!0;for(;c<a.length&&g;){const t=a[c],o=eA(`${i.join(" ")} ${t}`,e,n);o<=A?(i.push(t),r=Math.max(r,o),c++):g=!1}o.push(i.join(" ")),s=c}}if(r<0)throw new Error(`No max width calculated for text: ${o}.`);return{lines:o,width:r}},$t=(t,A,e,n,i,a)=>{const o=(a??lA)*A.getApproximateHeight(),r=1/e.unitsPerEm,s=n/iA(t,r,A),c=i/(t.length*o*r);return Math.min(c,s)},_t=(t,A,e,n)=>{const i=Vt(A.fontData),a=i.getFont(),o=A.fontSize/a.unitsPerEm;if(!e)return qt(A,t,A.fontSize,o,i,n);let r;if(r=A.text?A.text.split("\n"):A.input?.split("\n")??[""],e.input===t&&A.width===e.width&&A.height===e.height&&A.lineHeight===e.lineHeight)return{lines:r,requiredHeight:A.height,requiredWidth:Xt(r,A.width,o,i),fontSize:A.fontSize};const s=A.width!==e.width!=(A.height!==e.height);return A.lineHeight!==e.lineHeight||s||e.input!==t?qt(A,t,A.fontSize,o,i,n):{lines:r,requiredHeight:A.height,requiredWidth:Xt(r,A.width,o,i),fontSize:$t(r,i,a,A.width,A.height,n)}},tA=(t,A,e,n,i)=>{const a=Vt(A).getFont();let o={...t},r={...t},s=iA(n,e/a.unitsPerEm,Vt(A));return s&&s<o.width&&(r.width=s,"left"===i?(r.left+=Math.sin(o.rotation*Math.PI/360)*(o.width-s),r.top+=Math.sin(o.rotation*Math.PI/180)*(s-o.width)/2):r.left+="right"===i?o.width-s:(o.width-s)/2,n&&rA(n,n).every((([t,A])=>t===A))&&(o=r)),o},AA=1,eA=(t,A,e)=>{let n=0;const i=e.getGlyphs(t);return i.forEach(((t,A)=>{if(t.advanceWidth&&(n+=t.advanceWidth),A<i.length-1){const a=e.getKerningValue(t,i[A+1]);n+=a}})),n*=A,n},nA=(t,A,e)=>{let n=0;const i=e.getGlyphs(t);return i.forEach(((t,A)=>{if(t.advanceWidth&&(n=Math.max(n,t.advanceWidth)),A<i.length-1){const a=e.getKerningValue(t,i[A+1]);n=Math.max(n,a)}})),n*=A,n},iA=(t,A,e)=>{let n=0;return t.forEach((t=>{n=Math.max(n,eA(t,A,e))})),n},aA={stripControlCharacters:!0,vertical:!1,uppercase:!1},oA=(t,A=aA)=>{const e={...aA,...A};let n=t||"";return e.stripControlCharacters&&(n=n.replace(/^(?![\u000A\u000D])[\u0000-\u001F\u007F-\u009F]/g,"")),e.uppercase&&(n=n.toUpperCase()),e.vertical&&(n=n.split("").join("\n")),n},rA=(t,A)=>t.map(((t,e)=>[t,A[e]])),sA=(t="center",A=!1)=>A?"center":t,cA=t=>"left"===t?"start":"right"===t?"end":"middle",gA=(t,A,e)=>t.fontData?{...t,...(()=>{if(t.algorithm===U.Traditional){const n=_t(A,t,e,t.lineHeight);return{text:n.lines.join("\n"),height:n.requiredHeight,width:n.requiredWidth,fontSize:n.fontSize,input:A}}return{text:A}})()}:t,lA=1.1;var BA={};y(BA,"colorDefinitionPrintValue",(()=>wA)),y(BA,"spotColorDefinitionString",(()=>hA)),y(BA,"svgColorValueToDefinition",(()=>dA));const wA=t=>{const A=hA(t.spotColor);return A?`${t.browserValue} ${A}`:t.browserValue},hA=t=>{if(!t)return"";if(t.profileName.includes("/")&&t.profileName.includes(".icc")){const A=t.profileName.replace(/\s/g,"-"),e=A.lastIndexOf("/");return`icc-named-color(${A.slice(e+1).slice(0,-4)}, ${t.namedColor})`}return`icc-named-color(${t.profileName}, ${t.namedColor})`},dA=t=>{const A=t.split(/[ ](?=[^)]*?(?:\(|$))/);if(0===A.length)return{browserValue:"#000000"};if(1===A.length)return{browserValue:A[0]};const e=A[1].match(/\(([^)]+)\)/gm);if(!e)throw new Error("Unhandled state of color value in SVG");const n=e[0].replace(/[() ]/g,"").split(",");return{browserValue:A[0],spotColor:{profileName:n[0],namedColor:n[1]}}},EA=t=>{const A=(t.rotation||0)*Math.PI/180,n=Math.cos(A),i=-Math.sin(A),a=`text-path-${t.id}`,o=t.x+(t.curved?0:t.width/2),r=t.y+(t.curved?0:t.height/2),s=(t.text||"").split("\n");return t.curved&&!t.paths?null:t.fontData?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("defs",{children:[(0,e.jsx)("style",{type:"text/css",dangerouslySetInnerHTML:{__html:`\n @font-face {\n font-family: '${t.fontData.name}';\n src: url('${t.fontData.assetUrl}') format('truetype');\n }\n `}}),t.curved&&t.paths?(0,e.jsx)("path",{id:a,d:t.paths[0]}):void 0]}),t._renderingConfiguration?.debug?(0,e.jsx)("rect",{stroke:"blue",fill:"none",x:t.x,y:t.y,width:t.width,height:t.height}):void 0,(0,e.jsx)("g",{mask:t.stepName?void 0:t.mask,children:(0,e.jsx)("g",{transform:`matrix(${n}, ${-i}, ${i}, ${n}, ${o}, ${r})`,children:(0,e.jsx)("text",{xmlSpace:"preserve",fontFamily:`'${t.fontData.name}'`,fontSize:t.fontSize,fontStyle:"normal",fontWeight:"normal",fill:t._renderingConfiguration?.spotColors&&t.fillSpotColorDefinition?`${t.fill} ${hA(t.fillSpotColorDefinition)}`:t.fill,style:{whiteSpace:"pre",userSelect:"none"},children:t.curved?(0,e.jsx)(QA,{text:t.text||"",curvedPathId:a,align:t.align}):s.map(((A,n)=>(0,e.jsx)(uA,{align:t.vertical?"center":t.align,fontSize:t.fontSize,thisLineIdx:n,amountLines:s.length,text:A,textboxHeight:t.height,textboxWidth:t.width,lineHeight:t.lineHeight,vertical:t.vertical,verticalAlign:t.verticalAlign},n)))})})})]}):null},uA=t=>(0,e.jsx)("tspan",{textAnchor:cA(t.align),x:"left"===t.align?-t.textboxWidth/2:"right"===t.align?t.textboxWidth/2:0,y:`${(()=>{const A=t.fontSize*(void 0!==t.lineHeight?t.lineHeight:lA),e=t.textboxHeight/2;if("top"===t.verticalAlign)return-e+3*t.fontSize/4+t.thisLineIdx*A;if("bottom"===t.verticalAlign){const n=t.amountLines-1-t.thisLineIdx;return e-t.fontSize/4-n*A}const n=(t.amountLines-1)/2;return(t.thisLineIdx-n)*A+t.fontSize/4})()}px`,children:t.text}),QA=t=>{const A=`#${t.curvedPathId}`;return(0,e.jsx)("textPath",{startOffset:"left"===t.align?"0%":"right"===t.align?"100%":"50%",textAnchor:cA(t.align),href:A,xlinkHref:A,children:t.text})};y({},"Illustration",(()=>yA));var CA={};y(CA,"traverse",(()=>pA)),y(CA,"sanitizeSvgTree",(()=>fA)),y(CA,"modifySVGWithElementProperties",(()=>DA)),y(CA,"generateSVGWithUnknownColors",(()=>IA));const mA=["altGlyph","circle","ellipse","path","polygon","polyline","rect","text","textPath","tref","tspan"],pA=(t,A)=>{A(t),t.children.length>0&&Array.from(t.children).forEach((t=>pA(t,A)))},fA=(t,A=!1)=>{!A&&t.setAttribute("preserveAspectRatio","none");const e=[];pA(t,(t=>{if("script"!==t.tagName)if("style"!==t.tagName);else try{(0,c.parse)(t.innerHTML).stylesheet?.rules.forEach((t=>{e.push(t)})),t.remove()}catch(t){console.error(t)}else t.remove()})),pA(t,(t=>{e.forEach((A=>{A.selectors?.forEach((e=>{((t,A)=>{try{return t.matches(A)}catch(e){return t.classList.contains(A.substring(1))}})(t,e)&&A.declarations?.forEach((A=>{A.property&&A.value&&t.setAttribute(A.property,A.value)}))}))}))}))},DA=(t,A,e,n,i)=>{const a=(t=>vt().parseFromString(t,"image/svg+xml").firstElementChild)(t);if(!a)throw new Error("Failed to read SVG.");return((t,A,e)=>{t.setAttribute("height",`${e}px`),t.setAttribute("width",`${A}px`)})(a,A,e),((t,A,e)=>{pA(t,(t=>{const n=t.attributes.getNamedItem("fill");n&&"none"!==n.value&&t.classList.forEach((n=>{if(n.startsWith("spiff-fill")){const i=A[n];i&&t.setAttribute("fill",e?wA(i):i.browserValue)}}));const i=t.attributes.getNamedItem("stroke");i&&"none"!==i.value&&t.classList.forEach((n=>{if(n.startsWith("spiff-stroke")){const i=A[n];i&&t.setAttribute("stroke",e?wA(i):i.browserValue)}}))}))})(a,n,i),(t=>Ht().serializeToString(t))(a)},IA=async t=>{const A=t.match(/<svg.*?<\/svg>/s)||[],e=A?.length>0?A[0]:"",n=vt().parseFromString(e,"image/svg+xml").firstElementChild;if(!n)throw new Error("Failed to read SVG.");fA(n);const i={};pA(n,(t=>{mA.includes(t.tagName)&&!t.attributes.getNamedItem("fill")&&t.setAttribute("fill","black");const A=t.attributes.getNamedItem("fill");if(A&&"none"!==A.value){const e=dA(A.value),n=`spiff-fill-${e.browserValue.replace(/\W/g,"")}`;t.setAttribute("fill",e.browserValue),t.classList.add(n),i[n]=e}const e=t.attributes.getNamedItem("stroke");if(e&&"none"!==e.value){const A=dA(e.value),n=`spiff-stroke-${A.browserValue.replace(/\W/g,"")}`;t.classList.add(n),t.setAttribute("stroke",A.browserValue),i[n]=A}}));const a=Ht().serializeToString(n);return{colors:i,svg:a}},yA=t=>{if(t.cachedObjectURL&&!t._renderingConfiguration?.omitCachedFields)return(0,e.jsx)(dt,{id:t.id,src:t.cachedObjectURL,x:t.x,y:t.y,width:t.width,height:t.height,rotation:t.rotation,preserveAspectRatio:"none",immutable:t.immutable,mask:t.stepName?void 0:t.mask});const A=t.rotation||0,n=tt(A),i=Math.cos(n),a=-Math.sin(n),o=`\n matrix(1, 0, 0, 1, ${t.x}, ${t.y})\n matrix(1, 0, 0, 1, ${t.width/2}, ${t.height/2})\n matrix(${i}, ${-a}, ${a}, ${i}, 0, 0)\n matrix(1, 0, 0, 1, ${-t.width/2}, ${-t.height/2})\n `;if(!t.svg)throw new Error(`Illustration element ${t.id} (stepName ${t.stepName}) lacked svg from src ${t.src} at render time.`);return(0,e.jsx)("g",{mask:t.stepName?void 0:t.mask,children:(0,e.jsx)("g",{transform:o,dangerouslySetInnerHTML:{__html:DA(t.svg,t.width,t.height,t.colors,t._renderingConfiguration?.spotColors)}})})};class MA{constructor(){this.id=F(),this.stateCallbacks=[],this.prevCommands=[],this.nextCommands=[]}registerStateCallback(t){this.stateCallbacks.push(t)}unregisterStateCallback(t){this.stateCallbacks.filter((A=>A!==t))}getState(){return this.state}runStateCallbacks(){this.stateCallbacks.forEach((t=>t()))}apply(t,A){if(!this.state)throw new Error(`State not initialized for cc ${this.id}!`);this.state=this.commandReducer(this.state,t),this.runStateCallbacks(),this.nextCommands=[],A||this.prevCommands.push(t)}undo(){if(!this.state)return;const t=this.prevCommands.pop();if(!t)return;const A=t.undo();t.varying?this.state={...this.state,variation:A}:this.state={...this.state,transaction:A},this.nextCommands.push(t),this.runStateCallbacks()}redo(){if(!this.state)return;const t=this.nextCommands.pop();t&&(this.state=this.commandReducer(this.state,t),this.runStateCallbacks(),this.prevCommands.push(t))}flattenSequence(t,A){const e=this.prevCommands.filter((A=>A.sequenceId===t)).pop();e&&(this.prevCommands=this.prevCommands.filter((A=>A.sequenceId!==t)),e?.overrideOldState(A),this.prevCommands.push(e))}getLayoutById(t){if(!this.state)throw new Error(`State not initialized for cc ${this.id}!`);const A=this.state.transaction?.layouts?.[t],e=this.state.variation?.layouts?.[t],n=A?.layout||e?.layout;if(!n)throw new Error(`No layout: ${t}`);const i=[...A?.elements||[],...e?.elements||[]];return this.getLayoutDataWithState(n,i)}getAllLayouts(){if(!this.state)throw new Error(`State not initialized for cc ${this.id}!`);const t=[...Object.keys(this.state.transaction?.layouts),...Object.keys(this.state.variation?.layouts||{})];return[...new Set(t)].map((t=>this.getLayoutById(t)))}getLayoutDataWithState(t,A){return{layoutState:{layout:t,elements:A},getComponentWithProps:e=>FA(t,A,e)}}initialize(t,A){if(A)return void(this.state={transaction:A});let e={serializableWorkflow:{steps:[]},layouts:{}};t.forEach((t=>{e=new LA(t).apply(e)})),this.runStateCallbacks(),this.state={transaction:e}}commandReducer(t,A){if(A.varying){const e={layouts:{},serializableWorkflow:{steps:[]},...t.variation};return{...t,variation:A.apply(e)}}{const e=t.transaction||{layouts:{},serializableWorkflow:{steps:[]}};return{...t,transaction:A.apply(e)}}}}const xA=t=>"image"===t.type?(0,e.jsx)(dt,{...t},t.id):"frame"===t.type?(0,e.jsx)(Et,{...t},t.id):"illustration"===t.type?(0,e.jsx)(yA,{...t},t.id):"textbox"===t.type?(0,e.jsx)(EA,{...t},t.id):null,FA=(t,A,n)=>{const i=n.renderingConfiguration,a=i?.removeExcludedElements?A.filter((t=>!t.excludeFromExport)):A;return(0,e.jsx)(q,{preserveAspectRatio:void 0,elements:a,backgroundColor:t.transparentBackground?void 0:"white",width:n.width||t.width,height:n.height||t.height,viewBox:i?.region?{x:i.region.left,y:i.region.top,width:i.region.width,height:i.region.height}:{x:0,y:0,width:t.width,height:t.height},configuration:i,outlineArea:n.outlineArea,maxHeight:n.maxHeight,maxWidth:n.maxWidth,position:n.position,borderRadius:n.borderRadius,outlineColor:n.outlineColor})};function YA(t){return t.sort(((t,A)=>{const e=t.layer||0,n=A.layer||0;if(e<n)return-1;if(e>n)return 1;const i=t.layerIndex||0,a=A.layerIndex||0;return i<a?-1:i>a?1:0}))}class vA extends Error{constructor(){super("Element not found!"),Object.setPrototypeOf(this,vA.prototype)}}const SA=(t,A)=>NA(t,A).elements.find((A=>A.id===t)),NA=(t,A)=>{const e=Object.values(A).find((A=>A.elements.some((A=>A.id===t))));if(!e)throw new vA;return e},RA=(t,A)=>{const e=YA([...A.elements.filter((A=>A.id!==t.id)),t]);return{layout:A.layout,elements:e,modificationID:F()}},HA=async(t,A)=>{const e=[...Object.keys(t.layouts),...Object.keys(A?.layouts||{})],n=[...new Set(e)];for(let e=0;e<n.length;e++){const i=n[e],a=t.layouts[i],o=A?.layouts[i],r=(a||o).elements.filter((t=>"illustration"===t.type));for(let t=0;t<r.length;++t){const A=r[t];if(A.src&&!A.svg){const t=await Nt(A.src),e=await IA(t);A.svg=DA(e.svg,A.width,A.height,A.colors)}}}};class PA{undo(){if(!this.oldState)throw new Error("Cannot undo.");return this.oldState}overrideOldState(t){this.oldState=t}}class UA extends PA{constructor(t){super(),this.serializableWorkflow=t}apply(t){return this.oldState=t,{...t,serializableWorkflow:this.serializableWorkflow}}}class GA extends PA{constructor(t,A,e){super(),this.id=t,this.x=A,this.y=e}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,x:this.x,y:this.y},n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class bA extends PA{constructor(t,A){super(),this.id=t,this.angle=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,rotation:this.angle},n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class kA extends PA{constructor(t,A,e){super(),this.id=t,this.width=Math.abs(A),this.height=Math.abs(e)}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;let e={...A,width:this.width,height:this.height};if("frame"===A.type){const t=e;t.scaleX=t.scaleX*this.width/A.width,t.scaleY=t.scaleY*this.height/A.height}else if("textbox"===A.type){const t=e,n=(t.algorithm&&t.algorithm!==U.Autosize?t.input:t.text)??"";e=gA(t,n,A)}const n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class JA extends PA{constructor(t){super(),this.commands=t}apply(t){return this.oldState=t,this.commands.reduce(((t,A)=>A.apply(t)),t)}}class LA extends PA{constructor(t){super(),this.layout=t}apply(t){return this.oldState=t,{...t,layouts:{...t.layouts,[this.layout.id]:{elements:[],layout:{...this.layout},modificationID:F()}}}}}class OA extends PA{constructor(t){super(),this.panelName=t}apply(t){this.oldState=t;const A=Object.values(t.layouts).map((t=>{const A=t.layout.panelId===this.panelName;return{...t,elements:A?[]:[...t.elements],modificationID:F()}})),e={};return A.forEach((t=>{e[t.layout.id]=t})),{...t,layouts:e}}}class zA extends PA{constructor(t,A){super(),this.element=t,this.layout=A}apply(t){this.oldState=t,t.layouts[this.layout.id]||(t.layouts[this.layout.id]={layout:this.layout,elements:[],modificationID:""});const A=t.layouts[this.layout.id].elements;if(A.find((t=>t.id===this.element.id)))throw new Error(`Failed to apply new ${this.element.type} element because ID ${this.element.id} already taken`);if(this.element.productOverlay||0===A.length){const e=[...A,this.element];return void 0===this.element.layerIndex&&(this.element.layerIndex=this.assignIndex(this.element,e)),{...t,layouts:{...t.layouts,[this.layout.id]:{...t.layouts[this.layout.id],elements:e,modificationID:F()}}}}const e=A[A.length-1],n=e.productOverlay?e:null;let i;if(n&&A.pop(),null!==this.element.layerIndex&&void 0!==this.element.layerIndex)i=[...A,this.element].sort(((t,A)=>void 0!==t.layerIndex&&void 0!==A.layerIndex?t.layerIndex-A.layerIndex:0));else{const t=this.assignIndex(this.element,A);this.element.layerIndex=void 0!==t?t:0,i=[...A,this.element]}return n&&i.push(n),{...t,layouts:{...t.layouts,[this.layout.id]:{...t.layouts[this.layout.id],elements:i,modificationID:F()}}}}assignIndex(t,A){if(0===A.length)return 0;const e=A.filter((A=>(A.layer||0)===(t.layer||0))).sort(((t,A)=>(t.layerIndex||0)-(A.layerIndex||0)))[A.length-1]?.layerIndex;return void 0!==e?e+1:0}}class TA extends PA{constructor(t){super(),this.id=t}apply(t){this.oldState=t;let A=!1;const e=Object.values(t.layouts).map((t=>(t.elements.filter((t=>t.id!==this.id)).length!==t.elements.length&&(A=!0),{...t,elements:t.elements.filter((t=>t.id!==this.id)),modificationID:F()})));A||console.log(`Failed to delete element ${this.id}`);const n={};return e.forEach((t=>{n[t.layout.id]=t})),{...t,layouts:n}}}class jA extends PA{constructor(t,e){super(),this.el=I(A)(t),this.layout=e,this.el.id=F(),this.el.x+=5,this.el.y+=5}apply(t){return this.oldState=t,new zA(this.el,this.layout).apply(t)}}class KA extends PA{constructor(t,A,e){super(),this.id=t,this.color=A,this.textFillSpotColor=e}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,fill:this.color,fillSpotColorDefinition:this.textFillSpotColor},n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class VA extends PA{constructor(t,A){super(),this.id=t,this.size=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,fontSize:this.size},n=NA(A.id,Object.values(t.layouts)),i=(A.algorithm&&A.algorithm!==U.Autosize?A.input:A.text)??"",a=RA(gA(e,i),n);return{...t,layouts:{...t.layouts,[n.layout.id]:a}}}}class WA extends PA{constructor(t,A){super(),this.id=t,this.algorithm=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,algorithm:this.algorithm},n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class XA extends PA{constructor(t,A){super(),this.id=t,this.fontData=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,fontData:this.fontData},n=NA(A.id,Object.values(t.layouts)),i=(A.algorithm&&A.algorithm!==U.Autosize?A.input:A.text)??"",a=RA(gA(e,i),n);return{...t,layouts:{...t.layouts,[n.layout.id]:a}}}}class qA extends PA{constructor(t,A){super(),this.id=t,this.align=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,align:this.align},n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class ZA extends PA{constructor(t,A,e){super(),this.id=t,this.imageData=A,this.offsets=e}apply(t){this.oldState=t;const A=NA(this.id,Object.values(t.layouts)),e=A.elements.findIndex((t=>t.id===this.id)),n=A.elements[e].pattern,i=[...A.elements];i.splice(e,1,{...A.elements[e],pattern:{...n,src:this.imageData.src,x:this.offsets.x,y:this.offsets.y,width:this.imageData.width,height:this.imageData.height,scaleX:this.offsets.zoom,scaleY:this.offsets.zoom}});const a={...A,elements:i,modificationID:F()};return{...t,layouts:{...t.layouts,[A.layout.id]:a}}}}class $A extends PA{constructor(t,A){super(),this.id=t,this.text=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e=NA(A.id,Object.values(t.layouts)),n=RA(gA(A,this.text,A),e);return{...t,layouts:{...t.layouts,[e.layout.id]:n}}}}class _A extends PA{constructor(t,A,e){super(),this.id=t,this.className=A,this.fill=e}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e=A.colors||{},n=e[this.className];e[this.className]={browserValue:this.fill,spotColor:n?.spotColor};const i={...A,colors:e},a=NA(A.id,Object.values(t.layouts)),o=RA(i,a);return{...t,layouts:{...t.layouts,[a.layout.id]:o}}}}class te extends PA{constructor(t,A,e){super(),this.id=t,this.svgBody=A,this.objectURL=e}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e={...A,svg:this.svgBody,cachedObjectURL:this.objectURL},n=NA(A.id,Object.values(t.layouts)),i=RA(e,n);return{...t,layouts:{...t.layouts,[n.layout.id]:i}}}}class Ae extends PA{constructor(t){super(),this.id=t}apply(t){if(this.oldState=t,!SA(this.id,Object.values(t.layouts)).id)throw new vA;const A=Object.values(t.layouts).find((t=>t.elements.find((t=>t.id===this.id))));if(!A)throw new Error("Layout missing from state!");const e=A.elements.findIndex((t=>t.id===this.id));A.elements.push(A.elements.splice(e,1)[0]);const n=[...A.elements];return n.forEach(((t,A)=>t.layerIndex=A)),{...t,layouts:{...t.layouts,[A.layout.id]:{...t.layouts[A.layout.id],elements:n,modificationID:F()}}}}}class ee extends PA{constructor(t){super(),this.id=t}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e=Object.values(t.layouts).find((t=>t.elements.find((t=>t.id===this.id))));if(!e)throw new Error("Layout missing from state!");const n=e.elements.findIndex((t=>t.id===this.id));e.elements.splice(n,1),e.elements.unshift(A);const i=[...e.elements],a=i.splice(n,1)[0];return i.splice(n,0,a),i.forEach(((t,A)=>t.layerIndex=A)),{...t,layouts:{...t.layouts,[e.layout.id]:{...t.layouts[e.layout.id],elements:i,modificationID:F()}}}}}class ne extends PA{constructor(t){super(),this.id=t}apply(t){if(this.oldState=t,!SA(this.id,Object.values(t.layouts)).id)throw new vA;const A=Object.values(t.layouts).find((t=>t.elements.find((t=>t.id===this.id))));if(!A)throw new Error("Layout missing from state!");const e=A.elements.findIndex((t=>t.id===this.id)),n=e+1,i=[...A.elements],a=i.splice(e,1)[0];return i.splice(n,0,a),i.forEach(((t,A)=>t.layerIndex=A)),{...t,layouts:{...t.layouts,[A.layout.id]:{...t.layouts[A.layout.id],elements:i,modificationID:F()}}}}}class ie extends PA{constructor(t){super(),this.id=t}apply(t){if(this.oldState=t,!SA(this.id,Object.values(t.layouts)).id)throw new vA;const A=Object.values(t.layouts).find((t=>t.elements.find((t=>t.id===this.id))));if(!A)throw new Error("Layout missing from state!");const e=A.elements.findIndex((t=>t.id===this.id)),n=e-1,i=[...A.elements],a=i.splice(e,1)[0];return i.splice(n,0,a),i.forEach(((t,A)=>t.layerIndex=A)),{...t,layouts:{...t.layouts,[A.layout.id]:{...t.layouts[A.layout.id],elements:i,modificationID:F()}}}}}class ae extends PA{constructor(t,A){super(),this.id=t,this.value=A}apply(t){this.oldState=t;const A=SA(this.id,Object.values(t.layouts));if(!A.id)throw new vA;const e=Object.values(t.layouts).find((t=>t.elements.find((t=>t.id===this.id))));if(!e)throw new Error("Layout missing from state!");return{...t,layouts:{...t.layouts,[e.layout.id]:RA({...A,layer:this.value},e)}}}}var oe={};y(oe,"patternImageDataCache",(()=>we)),y(oe,"frameDataCache",(()=>he)),y(oe,"generateFrameSVG",(()=>de)),y(oe,"generateDefaultRectangleFrameSvg",(()=>Ee)),y(oe,"getVariant",(()=>ue)),y(oe,"getFrameData",(()=>Qe)),y(oe,"calculateOffsets",(()=>Ce)),y(oe,"getPatternImageData",(()=>me)),y(oe,"GetSVGDimensions",(()=>pe)),y(oe,"svgStringDimensions",(()=>fe));var re={};y(re,"getExifOrientation",(()=>ce)),y(re,"canvasDims",(()=>ge)),y(re,"getAttributesFromArrayBuffer",(()=>le));let se=null;const ce=t=>new Promise((A=>{const e=kt(t);(0,r.fromBuffer)(t).then((t=>{const n=t?.mime;if("image/jpeg"!==n)return A(1);(new(0,l.ExifImage)).loadImage(e,((t,e)=>A(t?1:e.image.Orientation||1)))}))})),ge=t=>{const A=8192,e=t.naturalWidth/t.naturalHeight;return t.naturalHeight<=A&&t.naturalWidth<=A?[t.naturalWidth,t.naturalHeight]:t.naturalHeight>t.naturalWidth?[e*A,A]:[A,A/e]},le=async t=>{const A=await(async t=>{const A=await Gt(t),e=await(0,g.loadImage)(A),[n,i]=ge(e),a=await(async()=>{if(null!==se)return!se;const t=await(0,g.loadImage)("data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAIAAwMBEQACEQEDEQH/xABRAAEAAAAAAAAAAAAAAAAAAAAKEAEBAQADAQEAAAAAAAAAAAAGBQQDCAkCBwEBAAAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AG8T9NfSMEVMhQvoP3fFiRZ+MTHDifa/95OFSZU5OzRzxkyejv8ciEfhSceSXGjS8eSdLnZc2HDm4M3BxcXwH/9k=");return se=2===t.width&&3===t.height,!se})();if(!a){const t=(0,g.createCanvas)(n,i);return t.getContext("2d").drawImage(e,0,0,n,i),t}const o=await ce(t),[r,s]=o>4?[i,n]:[n,i],c=(0,g.createCanvas)(r,s),l=c.getContext("2d");switch(o){case 2:l.translate(r,0),l.scale(-1,1);break;case 3:l.translate(r,s),l.rotate(Math.PI);break;case 4:l.translate(0,s),l.scale(1,-1);break;case 5:l.rotate(-.5*Math.PI),l.scale(-1,1);break;case 6:l.rotate(-.5*Math.PI),l.translate(-r,0);break;case 7:l.rotate(-.5*Math.PI),l.translate(-r,s),l.scale(1,-1);break;case 8:l.rotate(.5*Math.PI),l.translate(0,-s)}return l.drawImage(e,0,0,r,s),c})(t);return"image/jpeg"===(await(0,r.fromBuffer)(t))?.mime?{dataUrl:A.toDataURL("image/jpeg",1),height:A.height,width:A.width}:{dataUrl:A.toDataURL(),height:A.height,width:A.width}};y({},"getDefaultVariant",(()=>Be));const Be=t=>{const A=t.variants;if(A){if(1===A.length)return A[0];if(void 0!==t.defaultVariant)return A.find((A=>A.id===t.defaultVariant))}},we=new Map,he=new Map,de=async(t,A)=>{if(!A){if(!t)throw new Error("No region or src supplied. Cannot construct frame!");return Ee(t)}return Nt(A)},Ee=t=>{const A=t.width,e=A/t.height,n=Math.max(A,512),i=n/e;return`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${n} ${i}'>\n <path id="target-path" d='M0 0 h ${n} v ${i} h ${-n} Z' />\n </svg>\n `},ue=(t,A)=>{if(!A)return;const e=A.variants?.find((A=>A.id===t.frameVariantId))||Be(A);if(!e)throw new Error(`No variant with ID: ${t.frameVariantId}`);if(!e.asset)throw new Error(`No asset for variant with ID: ${t.frameVariantId}`);return e},Qe=async t=>{const A=vt().parseFromString(t,"image/svg+xml"),e=A.querySelector("svg");if(!e)throw new Error("Malformed frame SVG: <svg> tag not found");const n=e.getAttribute("viewBox");if(!n)throw new Error("SVG missing viewBox.");const i=n.split(" "),a=parseFloat(i[3])||1,o=parseFloat(i[2])||1,r=A.getElementById("target-path"),s=A.getElementsByClassName("st0").item(0);if(r){const t=r.getAttribute("d");if(!t)throw new Error("Malformed frame SVG: 'd' attribute not found on target element");const A={path:t,width:o,height:a};return he.set(t,A),A}if(s){const t=s.getAttribute("d");if(!t)throw new Error("Malformed frame SVG: 'd' attribute not found on target element");const A={path:t,width:o,height:a};return he.set(t,A),A}throw new Error("Malformed frame SVG")},Ce=(t,A,e)=>{const n=A.width>=A.height,i=t.width>=t.height,a=A.width/2,o=A.height/2,r=(n?A.height:A.width)/(i?t.width:t.height),s=e?.scale||r,c=a-t.width/2*s,g=e?.left||c,l=o-t.height/2*s;return{x:g,y:e?.top||l,zoom:s}},me=async t=>{if(we.has(t))return we.get(t);if(t.endsWith("svg")){const A=await pe(t),e=A.width,n=A.height,i={src:t,width:e,height:n,aspect:e/n};return we.set(t,i),i}{const A=await St(t),e=await le(A),n={src:t,width:e.width,height:e.height,aspect:e.width/e.height};return we.set(t,n),n}},pe=async t=>{const A=await Nt(t);return fe(A)},fe=t=>{const A=vt().parseFromString(t,"image/svg+xml").querySelector("svg");if(!A)throw new Error("No svg tag found, this svg must be malformed!");const e=A.getAttribute("viewBox"),n=A.getAttribute("width"),i=A.getAttribute("height"),a=e?e?.split(" ").map((t=>Number(t))):[0,0,Number(n),Number(i)];if(!a)throw new Error("No viewbox or width/height values detected on SVG file!");return{width:a[2],height:a[3]}};var De={};y(De,"determineCorrectFontSizeAndLines",(()=>ye)),y(De,"determineCorrectTextboxRegion",(()=>Me));const Ie=(t,A,e,n,i)=>{let a=A.map((t=>t.split("\n"))).flat(),o=a.length,r=a.map((t=>eA(t,n,i)));const s=i.getApproximateHeight()*n;let c=!0;for(;c;){if(s+(o-1)*e>t.height)return[null,null];const A=Math.max(...r);if(A<=t.width)return[a,A];const g=r.reduce(((t,A,e,n)=>A>n[t]?e:t),0),l=a[g];let B=!1,w=l.length;for(;!B&&w>-1;){w=l.lastIndexOf(" ",w-1);const A=[l.slice(0,w),l.slice(w+1)],e=A.map((t=>eA(t,n,i)));e[0]<=t.width&&(a=[...a.slice(0,g),...A,...a.slice(g+1)],r=[...r.slice(0,g),...e,...r.slice(g+1)],o+=1,B=!0)}B||(c=!1)}return[null,null]},ye=(t,A,e,n,i)=>{let a,o;const r=Vt(A),s=r.getFont();if(i.size){const A=t/s.unitsPerEm;return[a,o]=Ie(e,n,t,A,r),[i.size,a,o]}let c=6-AA;if(n.length>0){let t=n,A=0;for(;(!i.maxSize||c<=i.maxSize)&&t;)c+=AA,A=c/s.unitsPerEm,[t,o]=Ie(e,n,c,A,r)}c>6&&(c-=AA),i.minSize&&c<i.minSize&&(c=i.minSize);const g=c/s.unitsPerEm;return[a,o]=Ie(e,n,c,g,r),[c,a,o]},Me=(t,A,e,n,i)=>{let a={...t},o={...t},[r,s,c]=ye(e,A,o,n,{size:0,minSize:e,maxSize:e});var g,l;return c&&c<a.width&&(o.width=c,"left"===i?(o.left+=Math.sin(a.rotation*Math.PI/360)*(a.width-c),o.top+=Math.sin(a.rotation*Math.PI/180)*(c-a.width)/2):o.left+="right"===i?a.width-c:(a.width-c)/2,[r,s]=ye(e,A,o,n,{size:e}),r===e&&s&&(g=n,l=s,g.map(((t,A)=>[t,l[A]]))).every((([t,A])=>t===A))&&(a=o)),a};var xe={};y(xe,"svgObjectURL",(()=>ve)),y(xe,"LayoutElementFactory",(()=>Ne));const Fe=(t,A)=>{const e=t.layoutState.elements.filter((t=>t.layer===A)),n=Math.max(...e.map((t=>t.layerIndex)).filter((t=>void 0!==t)));return Math.max(n,0)+1},Ye=async t=>new Promise((A=>{Nt(t).then((t=>{A(t)})).catch((t=>console.error(t)))})),ve=async t=>{const A=vt().parseFromString(t,"image/svg+xml").firstElementChild;if(!A)throw new Error("Failed to read SVG");const e=(new XMLSerializer).serializeToString(A),n=document.createElement("canvas"),i=n.getContext("2d"),a=await B.Canvg.from(i,e,{anonymousCrossOrigin:!0,ignoreDimensions:!1}),o=A.getAttribute("width"),r=A.getAttribute("height"),s=2048;if(r&&o){const t=parseFloat(r),A=parseFloat(o)/t;A>1?a.resize(s,s/A):a.resize(s*A,s)}else a.resize(s,s);return await a.render(),await(async t=>new Promise(((A,e)=>{try{if(!URL||!URL.createObjectURL)throw new Error("Environment incapable of generating ObjectURL");t.toBlob((e=>{if(!e){if(0===t.width||0===t.height)throw new Error(`Canvas dimensions are invalid (${t.width},${t.height})`);if(t.width*t.height>=268435456)throw new Error(`Canvas dimensions exceed device limit (${t.width},${t.height})`);throw new Error("Couldn't generate object URL for Illustration, the blob was undefined!")}A(URL.createObjectURL(e))}))}catch(t){e(t)}})))(n)},Se=async(t,A,e,n)=>{const i=t.layoutState.layout.useEditableArea&&t.layoutState.layout.editableArea||{width:t.layoutState.layout.width,height:t.layoutState.layout.height,x:0,y:0},a=i.width<i.height?i.width:i.height,o=t.layoutState.layout.useEditableArea?a/1.3:a/2,r={top:i.y+i.height/2-o/2,left:i.x+i.width/2-o/2,width:o,height:o,rotation:0,panelId:t.layoutState.layout.panelId};if(e&&A===N.Illustration){const t=await IA(await Ye(e)),A=vt().parseFromString(t.svg,"image/svg+xml").firstElementChild.getAttribute("viewBox");if(!A)throw new Error("SVG missing viewBox.");const n=r.height,i=A.split(" "),a=(parseFloat(i[2])||1)/(parseFloat(i[3])||1);r.height=r.width/a,r.top+=(n-r.height)/2}if(e&&A===N.Image){const t=r.height,A=await St(e),n=await le(A),i=n.width/n.height;r.height=r.width/i,r.top+=(t-r.height)/2}if(e&&A===N.Textbox&&n?.text&&n?.fontScale){const t={assetUrl:e,name:(await jt(e)).names.fullName.en},A=Vt(t),a=eA(n.text,n?.fontScale,A);r.width=Math.min(a,.85*i.width),r.left=i.x+i.width/2-r.width/2}return r};class Ne{static async getFrame(t,A){const e=await de(A.region,A.src),n=await Qe(e),i=A.region||await Se(t,N.Frame);return{id:F(),x:i.left,y:i.top,width:i.width,height:i.height,layer:i.layer||0,layerIndex:i.layerIndex||Fe(t,i.layer||0),rotation:i.rotation,scaleX:i.width/n.width,scaleY:i.height/n.height,path:n.path,type:N.Frame,disablePlaceholder:A.configuration.disablePlaceholder,focalBlur:A.configuration.focalBlur,focalBlurStrength:A.configuration.focalBlurStrength,focalBlurRadius:A.configuration.focalBlurRadius,forceImageCover:A.configuration.forceImageCover,pattern:void 0,immutable:i.immutable}}static async getImage(t,A){const e=A.region||await Se(t,N.Image,A.src);return{id:F(),src:A.src,type:N.Image,y:e.top,x:e.left,rotation:e.rotation,width:e.width,height:e.height,layer:e.layer||0,layerIndex:e.layerIndex||Fe(t,e.layer||0),immutable:e.immutable,preserveAspectRatio:"none"}}static async getTextbox(t,A){const{configuration:e,fontSrc:n,designInputStep:i}=A,a=await jt(n),o={assetUrl:n,name:a.names.fullName.en},r=i?.text||e.defaultText||"",s=e.replaceableText?e.replaceableText.replace("{{}}",r):r,c=oA(s,{vertical:e.vertical,uppercase:e.uppercase}),g=A.region||await Se(t,N.Textbox,n,{text:c,fontScale:e.size?e.size/a.unitsPerEm:void 0}),l=gA({id:F(),type:N.Textbox,x:g.left,y:g.top,width:g.width,height:g.height,align:sA(e.textAlign,e.vertical),curved:e.curved,fill:i?.color||e.colour||"#000000",fontData:o,layer:g.layer||0,layerIndex:g.layerIndex||Fe(t,g.layer||0),paths:e.paths,rotation:g.rotation,vertical:e.vertical,verticalAlign:e.verticalAlign||"middle",algorithm:U.Traditional,fontSize:e.size||Math.max(Math.round(.025*g.height),1),text:c,input:r},c),B=tA({...g,height:l.height},o,l.fontSize,l?.text?.split("\n")||[],l.align);return{...l,x:B.left,y:B.top+(g.height-B.height)/2,width:B.width,height:B.height}}static async getShape(t,A){const e=`\n <svg\n xmlns="http://www.w3.org/2000/svg"\n xmlnsXlink="http://www.w3.org/1999/xlink"\n xmlSpace="preserve"\n preserveAspectRatio="none"\n version="1.1"\n width="1"\n height="1"\n viewBox="0 0 1 1"\n >\n <rect\n x="0"\n y="0"\n width="1"\n height="1"\n class="spiff-fill-shape"\n fill="${A.color}"\n />\n </svg>\n `,n={};n["spiff-fill-shape"]={browserValue:A.color};const i=A.region||await Se(t,N.Illustration),a=F();return{stepRegion:A.region,colors:n,id:a,svg:e,type:N.Illustration,y:i.top,x:i.left,rotation:i.rotation,width:i.width,height:i.height,layer:i.layer||0,layerIndex:i.layerIndex||Fe(t,i.layer||0),immutable:i.immutable}}static async getIllustration(t,A){const e=A.region||await Se(t,N.Illustration,A.src),n=await IA(await Ye(A.src)),i=await ve(n.svg),a=F();return{cachedObjectURL:i,stepRegion:A.region,colors:n.colors,id:a,src:A.src,svg:n.svg,type:N.Illustration,y:e.top,x:e.left,rotation:e.rotation,width:e.width,height:e.height,layer:e.layer||0,layerIndex:e.layerIndex||Fe(t,e.layer||0),immutable:e.immutable}}}function Re(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class He extends Error{constructor(t){super(t),this.name=this.constructor.name}}class Pe extends He{constructor(t){super(`ConfigurationError - ${t}`)}}class Ue extends Pe{constructor(t){super(`Option not Configured: ${t.stepTitle}`),Re(this,"optionId",void 0),this.optionId=t?.optionId||"N/A"}}class Ge extends Pe{constructor(t){super(`Panel not Found: ${t.panelId}`),Re(this,"panelId",void 0),this.panelId=t?.panelId||"N/A"}}class be extends Pe{constructor(t){super(`Asset not found for variant: ${t.name}`),Re(this,"variant",void 0),this.variant=t}}class ke extends Pe{constructor(t){super(`Resource not found for asset: ${t.name}`),Re(this,"asset",void 0),this.asset=t}}class Je extends Pe{constructor(t,A){super(`Workflow Misconfiguration: ${t.stepName} - ${A}`),Re(this,"step",void 0),this.step=t}}class Le extends He{constructor(t){super(`ImplementationError - ${t}`)}}class Oe extends Le{constructor(t){super(`Unhandled Behavior Encountered: ${t}`)}}class ze extends Le{constructor(t){super(`Parsing Error: ${t}`)}}class Te extends Le{constructor(t){super(`Client Error: ${t}`)}}class je extends Le{constructor(t){super(`Resource Generation Failed: ${t}`)}}function Ke(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class Ve{get(t){return localStorage.getItem(t)||void 0}set(t,A){localStorage.setItem(t,A)}remove(t){localStorage.removeItem(t)}getMap(t){const A=this.get(t);if(A)return new Map(JSON.parse(A))}setMap(t,A){const e=JSON.stringify([...A.entries()]);this.set(t,e)}}class We{constructor(){Ke(this,"storage",new Map)}get(t){return this.storage.get(t)||void 0}set(t,A){this.storage.set(t,A)}remove(t){this.storage.delete(t)}getMap(t){const A=this.get(t);if(A)return new Map(JSON.parse(A))}setMap(t,A){const e=JSON.stringify([...A.entries()]);this.set(t,e)}}const Xe=(()=>{try{return localStorage?new Ve:new We}catch{return console.warn("Local storage was unavilable due to browser security settings. Using in-memory storage instead."),new We}})();function qe(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}const Ze=new class{constructor(){qe(this,"defaultServerUrl","https://api.spiff.com.au"),qe(this,"defaultServicesApiUrl","https://services.spiff.com.au"),qe(this,"defaultHubUrl","https://hub.spiff.com.au"),qe(this,"serverUrl",void 0),qe(this,"servicesApiUrl",void 0),qe(this,"hubUrl",void 0),qe(this,"serverUrlCallbacks",void 0),this.serverUrl=this.defaultServerUrl,this.servicesApiUrl=this.defaultServicesApiUrl,this.hubUrl=this.defaultHubUrl,this.serverUrlCallbacks=[]}getServerUrl(){return this.serverUrl}getServicesApiUrl(){return this.servicesApiUrl}getHubUrl(){return this.hubUrl}setServerUrl(t){this.serverUrl=t,this.serverUrlCallbacks.forEach((t=>t()))}setServicesApiUrl(t){this.servicesApiUrl=t}setHubUrl(t){this.hubUrl=t}addServerUrlCallback(t){this.serverUrlCallbacks.push(t)}};function $e(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}let _e;const tn=t=>{_e=t};const An=new class{constructor(){$e(this,"shadowGraphqlClient",void 0),this.shadowGraphqlClient=this.constructShadowGraphqlClient(),Ze.addServerUrlCallback((()=>{this.shadowGraphqlClient=this.constructShadowGraphqlClient()}))}getShadowGraphqlClient(){return this.shadowGraphqlClient}constructShadowGraphqlClient(){const A=(0,t.createHttpLink)({uri:`${Ze.getServerUrl()}/graphql`,fetch:d.fetch}),e=(0,w.setContext)((async(t,{headers:A})=>{const e=A||{},n=await(async()=>{const t={transactionOwnerId:_e};return"undefined"!=typeof window&&window.location.href.includes("/workflows/product/")?{...await new Promise((t=>{const A=Ze.getHubUrl();if(window.location.href.includes("localhost")||window.location.href.includes("ngrok"))return void t({});const e=n=>{n.origin===A&&(window.removeEventListener("message",e),t(n.data))};window.parent!==window&&(window.addEventListener("message",e,!1),window.parent.postMessage("ready",A))})),...t}:t})();return n.bearer&&(e.Authorization=`Bearer ${n.bearer}`),n.partnerId&&(e.partnerId=n.partnerId),n.activeIntegration&&(e.activeIntegration=n.activeIntegration),n.transactionOwnerId&&(e.transactionOwnerId=n.transactionOwnerId),{headers:e}})),n=(0,h.onError)((({operation:t,graphQLErrors:A,networkError:e})=>{(A||[]).forEach((({message:A,locations:e,path:n})=>{console.log("[GraphQL Operation Error]"),console.log("Name:"+t.operationName),console.log("Query:"+JSON.stringify(t.query)),console.log(`Message: ${A}, Location: ${JSON.stringify(e,null,2)}, Path: ${n}`),console.log("Variables:"+JSON.stringify(t.variables))})),e&&console.log("GraphQL Network error")}));const i=new(0,t.InMemoryCache)({addTypename:!1,typePolicies:{Transaction:{fields:{bulkEmailAddress:{read:(t=null)=>t,merge:(t,A)=>A||t||null},transactionOwnerId:{read:(t=null)=>t,merge:(t,A)=>A||t||null},customLogoLink:{read:(t=null)=>t,merge:(t,A)=>A||t||null},workflowFooterLogoLink:{read:(t=null)=>t,merge:(t,A)=>A||t||null},workflowState:{read:(t=null)=>t,merge:(t,A)=>A||t||null},bulkSourceUrl:{read:(t=null)=>t,merge:(t,A)=>A||t||null},externalDesignProductId:{read:(t=null)=>t,merge:(t,A)=>A||t||null},externalDesignProductVariantId:{read:(t=null)=>t,merge:(t,A)=>A||t||null},externalCartProductId:{read:(t=null)=>t,merge:(t,A)=>A||t||null},externalCartProductVariantId:{read:(t=null)=>t,merge:(t,A)=>A||t||null},lastSyncedAt:{read:(t=null)=>t,merge:(t,A)=>A||t||null}}},WorkflowProduct:{fields:{isPresent:{read:(t=null)=>t,merge:(t,A)=>A||t||null}}},Product:{fields:{imageUrl:{read:(t=null)=>t,merge:(t,A)=>A||t||null},overlayImageUrl:{read:(t=null)=>t,merge:(t,A)=>A||t||null},preloadImageUrl:{read:(t=null)=>t,merge:(t,A)=>A||t||null},weight:{read:(t=null)=>t,merge:(t,A)=>A||t||null},conversionConfiguration:{read:(t=null)=>t,merge:(t,A)=>A||t||null},bulkConfiguration:{read:(t=null)=>t,merge:(t,A)=>A||t||null}}}}});return new(0,t.ApolloClient)({link:(0,t.from)([n,e,A]),cache:i,name:"Core"})}};function en(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}const nn=t.gql`
|
|
2
2
|
fragment AssetFields on Asset {
|
|
3
3
|
name
|
|
4
4
|
key
|
|
@@ -447,7 +447,7 @@ var t=require("@apollo/client"),A=require("lodash.clonedeep"),e=require("react/j
|
|
|
447
447
|
}
|
|
448
448
|
}
|
|
449
449
|
}
|
|
450
|
-
`,go=(t,A,e)=>{const n={};return A.steps.forEach((A=>{Object.assign(n,(A=>{const n={};if("Frame"===A.type){const i=t[A.stepName],a=A.data;if(!i||a.hideImageInCart&&e)return n;n[`${A.stepTitle} image`]=i.image}if("Illustration"===A.type){const i=t[A.stepName],a=A.data;if(!i||a.hideColorsInCart&&e||!i.colors)return n;if(i.colors.length>0){const t=i.colors.join(", ").toUpperCase();n[`${A.stepTitle} colors`]=t}}if("Module"===A.type){const i=t[A.stepName],a=A.data;if(!i||a.hideTextInCart&&e)return n;n[`${A.stepTitle} text`]=i.text}if("Text"===A.type){const i=t[A.stepName];if(!i)return n;const a=A.data;a.hideTextInCart&&e||(n[`${A.stepTitle} text`]=i.text),!i.color||a.hideColorInCart&&e||(n[`${A.stepTitle} color`]=i.color)}return n})(A))})),n},lo=(t,A,e,n,i,a,o,r,s)=>{const c={event:"onComplete",lineItemImageUrl:o||"",transactionId:t.id,designProductVariantId:t.externalDesignProductVariantId,designProductId:t.externalDesignProductId,externalCartProductId:t.externalCartProductId,externalCartProductVariantId:t.externalCartProductVariantId,baseCost:e,weight:A.weight,optionsCost:n,exportedData:a,workflowViewerLink:t.workflowViewerLink||"",workflowViewerReadOnlyLink:t.workflowViewerReadOnlyLink||""};return i&&(c.metadata=i),r&&(c.selectedVariants=r),s&&(c.sku=s),c},Bo=async(t,A,e,n,i,a,o)=>{const r=t.product?.basePrice||0,s=t.priceModifierTotal||0,c=((t,A,e,n)=>{const i={};let a;if(e){a=go(e,A,!1);for(const t of Object.keys(a))i[t]={value:a[t],priceModifier:0}}else if(n){a=n;for(const t of Object.keys(a))i[t]={value:a[t],priceModifier:0}}for(const e of Object.keys(t)){const n=t[e],a=A.steps.find((t=>t.stepTitle===e));if(1===n.length)i[`${a?.stepTitle} selection`]={value:n[0].name,priceModifier:n[0].priceModifier};else if(n.length>1)for(let t=0;t<n.length;t++)i[`${a?.stepTitle} selection ${t+1}`]={value:n[t].name,priceModifier:n[t].priceModifier}}return i})(n,e,void 0,a);return lo(t,A,r,s,a,c,o,n,i)},wo=async(t,A,e,n,i,a,o,r,s,c,g,l,B)=>{s("workflow.steps.finish.finalize.buildingLayouts"),await t.outstandingRequestsPromise();const w=An.getShadowGraphqlClient();await w.resetStore();const h=await w.query({query:ga,variables:{id:a.id},errorPolicy:"all"}),d=h.data?.transactions[0].workflowState;!h.errors&&d||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(n())),h.errors&&h.errors.forEach((t=>{h.errors&&console.log("Server Error:",t.message)})),await t.updateStateWithServerImmediate(n),console.log("Server state is undefined @ Workflow completion"));const E=t.getPreviewService(),u=A?.finalizeStepConfig?.lookAtAnimation,Q=E&&100===E.getSceneInitializationProgress()&&A.showModelOnFinishStep&&!!u,C=B&&go(B,A,!0),m=B&&go(B,A,!1),p=async t=>{const e={};let n=0;if(Object.keys(o).length>0)for(const i of Object.keys(o)){const a=o[i],r=A.steps.find((t=>t.stepName===i));for(let A=0;A<a.selections.length;++A){const i=a.selections[A];if(r&&(!t||r.option&&(r.option.variants||[]).length>1&&!r.data.hideSelectionInCart&&!r.data.hideSelectionsInCart)){const t=r.stepTitle;e[t]?e[t].push({id:i.id||"",name:i.name,priceModifier:i.priceModifier}):e[t]=[{id:i.id||"",name:i.name,priceModifier:i.priceModifier}]}n+=i.priceModifier}}return[e,n]},[f]=await p(!0),D=Object.fromEntries(Object.keys(f).map((t=>[t,f[t].map((t=>t.id))]))),[I]=await p(!1),y=Object.fromEntries(Object.keys(I).map((t=>[t,I[t].map((t=>t.id))]))),M=await l(Q);s("workflow.steps.finish.finalize.creatingDesign"),a.bulk&&await c(g);const x=await(async t=>(await An.getShadowGraphqlClient().mutate({mutation:co,errorPolicy:"all",fetchPolicy:"no-cache",variables:{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?.designCreate)((()=>{const t={name:r,layouts:e.map((t=>({index:t.index,panelId:t.panelId}))),workflowId:A.id,transactionId:a.id,useThreeDimPreview:Q,previewImage:M};if(m){const A=[];for(const[t,e]of Object.entries(m))A.push({key:t,value:e});t.metadata=A}if(D){const A=[];for(const[t,e]of Object.entries(y))A.push({key:t,ids:e});t.selectedVariants=A}return t})()),F=x?.transaction?.previewImageLink;s("workflow.steps.finish.finalize.updatingTransaction");const Y=(await An.getShadowGraphqlClient().query({query:ca,variables:{id:a.id}})).data.transactions[0];return a.bulk?((t,A,e)=>{const n=(t.product?.basePrice||0)*(t.variationsCount||0),i=t.priceModifierTotal||0,a={items:{value:t.variationsCount?`${t.variationsCount}`:"0",priceModifier:0}};return lo(t,A,n,i,void 0,a,e)})(Y,i,F):await Bo(Y,i,A,f,x?.sku,C,F)};let ho;var Eo;(Eo=ho||(ho={})).Local="Local",Eo.Remote="Remote";const uo=new class{constructor(){so(this,"localPersistenceKey","designTransactions"),so(this,"storageMethod",ho.Local),so(this,"designSavedListeners",[])}attachSaveListener(t){this.designSavedListeners.push(t)}detachSaveListener(t){this.designSavedListeners=this.designSavedListeners.filter((A=>A!==t))}async getSavedDesigns(){return await this.getDesigns()}async getSavedDesignByTransaction(t){return(await this.getSavedDesigns()).find((A=>A.transactionId===t))}async addDesign(t){const A=(await this.getSavedDesigns()).filter((A=>A.transactionId!==t.transactionId));A.unshift(t),await this.setDesigns(A),this.notifyDesignSaved(t)}async removeDesign(t){const A=await this.getSavedDesigns();await this.setDesigns(A.filter((A=>A.transactionId!==t)))}async setDesigns(t){if(this.storageMethod!==ho.Local)throw new Oe("Unexpected storage method requested");Xe.set(this.localPersistenceKey,JSON.stringify(t))}async getDesigns(){if(this.storageMethod===ho.Local){const t=Xe.get(this.localPersistenceKey);return t?JSON.parse(t):[]}throw new Oe("Unexpected storage method requested")}notifyDesignSaved(t){this.designSavedListeners.forEach((A=>A(t)))}};function Qo(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class Co{constructor(t,A){if(Qo(this,"client",void 0),Qo(this,"commandContext",void 0),Qo(this,"workflowManager",void 0),Qo(this,"isReadOnly",void 0),Qo(this,"renderableScenes",[]),Qo(this,"renderableSceneCallbacks",[]),Qo(this,"debouncedSavedDesignUpdate",I(p)((async()=>{await uo.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()}),2500)),Qo(this,"getCanvasObjectURLAsync",(async t=>new Promise(((A,e)=>{try{t.toBlob((t=>{if(t){const e=URL.createObjectURL(t);A(e)}}))}catch(t){e(t)}})))),!A.workflow)throw new Error("No Workflow ID provided.");this.client=t;const e=A.layouts;this.commandContext=new MA,this.commandContext.initialize(e,A.reloadedState),this.isReadOnly=!!A.transaction.lineItem?.id||!Xe.getMap("transactionOwnerIds")?.get(A.transaction.id)||!!A.readOnly,this.workflowManager=new Va(A.workflow,A.product.profanities?.map((t=>t.word))||[],e,this.commandContext,(t=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return A.stateMutationFunc(t)}),A.transaction,A.product,A.previewService,A.renderableContextService,A.reloadedState,A.readOnly),this.workflowManager.addSelectionCallback((t=>{const A=t.traversableScenes.map((t=>{const A=t.renderableSteps.map((t=>t.stepName));return{id:t.name,title:t.title,renderableSteps:A}}));this.renderableScenes=A,this.renderableSceneCallbacks.forEach((t=>t(A)))}))}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async updateVariationRecords(t){await An.getShadowGraphqlClient().mutate({mutation:sa,variables:{transactionId:this.workflowManager.getTransaction().id,updates:t.map((t=>({recordNumber:t.recordNumber,values:t.values.map((t=>({aspect:t.aspect,stepName:t.stepName,value:t.value})))})))}})}async createPreviewImage(t,A){const e=this.workflowManager.getWorkflow(),n=e?.finalizeStepConfig?.lookAtAnimation;if(t){if(!n)throw new Error("Failed to generate cart preview image!");return await(this.workflowManager.getPreviewService()?.renderSceneScreenshot(512,n))||""}const i=document.createElement("canvas");let a=2048;A&&A<=2048&&(a=A),i.width=a,i.height=a;const o=this.commandContext.getAllLayouts(),r=e.defaultPreviewPanelIndex||0,s=e.panels[r],c=o.find((t=>t.layoutState?.layout.panelId===s?.name))||o[0],g=c.layoutState.layout.previewRegion?{x:c.layoutState.layout.previewRegion.left,y:c.layoutState.layout.previewRegion.top,width:c.layoutState.layout.previewRegion.width,height:c.layoutState.layout.previewRegion.height}:{x:0,y:0,width:c.layoutState.layout.width,height:c.layoutState.layout.height},l=this.commandContext.getLayoutById(c.layoutState.layout.id),w=i.getContext("2d");if(!w)throw new je("Failed to obtain 2D context for preview image creation");const h=FA(l.layoutState.layout,l.layoutState.elements,{renderingConfiguration:{purpose:H.Print,region:{left:g.x,top:g.y,width:g.width,height:g.height}}}),d=I(Q).renderToStaticMarkup(h),E=await B.Canvg.from(w,d,{anonymousCrossOrigin:!0,ignoreDimensions:!1});await E.render();const u=await this.getCanvasObjectURLAsync(i);return i.toDataURL(u)}getStepById(t){const A=this.getWorkflowManager().getWorkflow().steps.find((A=>A.stepName===t));if(A&&this.stepHasHandle(A))return ro.get(this.getWorkflowManager(),A)}getSteps(){return this.getWorkflowManager().getWorkflow().stepGroups.flatMap((t=>this.getStepsByScene(t)))}getBulkStep(){if(this.getWorkflowManager().getTransaction().bulk){const t=this.getWorkflowManager().getProduct().bulkConfiguration,A={type:K.Bulk,stepName:"Bulk",stepTitle:t?.stepTitle??"workflow.steps.bulk.title",helpText:t?.helpText,data:{aspects:la(this.getWorkflowManager().getWorkflow())},conditions:[]};return ro.get(this.getWorkflowManager(),A)}}getStepByName(t){const A=this.getWorkflowManager().getWorkflow().steps.find((A=>A.stepTitle===t));if(A&&this.stepHasHandle(A))return ro.get(this.getWorkflowManager(),A)}getStepsByType(t){return this.getWorkflowManager().getWorkflow().steps.filter((A=>A.type===t)).map((t=>ro.get(this.getWorkflowManager(),t)))}getStepsByScene(t){if(!this.getWorkflowManager().getWorkflow().stepGroups.find((A=>A.name===t.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 t.stepNames.map((t=>this.getWorkflowManager().getWorkflow().steps.find((A=>A.stepName===t)))).filter((t=>this.stepHasHandle(t))).map((t=>ro.get(this.getWorkflowManager(),t)))}async attachCustomerDetails(t){await An.getShadowGraphqlClient().mutate({mutation:Za,variables:{id:this.getWorkflowManager().getTransaction().id,emailAddress:t.email,type:"Owner"}}),this.getWorkflowManager().setTransactionCustomerDetails(t)}attachRenderableSceneListener(t){this.renderableSceneCallbacks.push(t),t(this.renderableScenes)}detachRenderableSceneListener(t){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter((A=>A!==t))}async save(t){if(!this.getCommandContext().getState())throw new Oe("State undefined!");const A={title:await(async()=>{if(t)return t;const A=this.getWorkflowManager().getTransaction().id,e=(await uo.getSavedDesigns()).find((t=>t.transactionId===A))?.title;return e||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getWorkflowManager().getTransaction().id,productId:this.getWorkflowManager().getProduct().id,integrationProductId:this.getWorkflowManager().getTransaction().integrationProduct.id,workflowName:this.getWorkflowManager().getWorkflow().name,workflowId:this.getWorkflowManager().getWorkflow().id,lastEdited:new Date};return await uo.addDesign(A),A}async copy(){const t=I(A)(this.getCommandContext().getState());if(!t)throw new Oe("Internal state is undefined! Cannot copy experience!");const e=JSON.stringify(t.transaction),n=this.getWorkflowManager().getWorkflow(),i=new Mo({}),a=this.getWorkflowManager().getTransaction().integrationProduct?.id;if(!a)throw new Oe("Integration product id is undefined!");await i.initFromIntegrationProduct(a);return await i.getWorkflowExperience(n.id,e,void 0)}async onDesignFinished(t,A,e,n){return wo(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),(()=>this.commandContext.getState()),t,this.workflowManager.getTransaction(),e,this.workflowManager.getWorkflow().name,A,(t=>this.updateVariationRecords(t)),this.workflowManager.getVariationRecords(),(t=>this.createPreviewImage(t)),n)}stepHasHandle(t){return t.type!==K.SilentIllustration&&t.type!==K.ProductOverlay}}function mo(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}const po=t.gql`
|
|
450
|
+
`,go=(t,A,e)=>{const n={};return A.steps.forEach((A=>{Object.assign(n,(A=>{const n={};if("Frame"===A.type){const i=t[A.stepName],a=A.data;if(!i||a.hideImageInCart&&e)return n;n[`${A.stepTitle} image`]=i.image}if("Illustration"===A.type){const i=t[A.stepName],a=A.data;if(!i||a.hideColorsInCart&&e||!i.colors)return n;if(i.colors.length>0){const t=i.colors.join(", ").toUpperCase();n[`${A.stepTitle} colors`]=t}}if("Module"===A.type){const i=t[A.stepName],a=A.data;if(!i||a.hideTextInCart&&e)return n;n[`${A.stepTitle} text`]=i.text}if("Text"===A.type){const i=t[A.stepName];if(!i)return n;const a=A.data;a.hideTextInCart&&e||(n[`${A.stepTitle} text`]=i.text),!i.color||a.hideColorInCart&&e||(n[`${A.stepTitle} color`]=i.color)}return n})(A))})),n},lo=(t,A,e,n,i,a,o,r,s)=>{const c={event:"onComplete",lineItemImageUrl:o||"",transactionId:t.id,designProductVariantId:t.externalDesignProductVariantId,designProductId:t.externalDesignProductId,externalCartProductId:t.externalCartProductId,externalCartProductVariantId:t.externalCartProductVariantId,baseCost:e,weight:A.weight,optionsCost:n,exportedData:a,workflowViewerLink:t.workflowViewerLink||"",workflowViewerReadOnlyLink:t.workflowViewerReadOnlyLink||""};return i&&(c.metadata=i),r&&(c.selectedVariants=r),s&&(c.sku=s),c},Bo=async(t,A,e,n,i,a,o)=>{const r=t.product?.basePrice||0,s=t.priceModifierTotal||0,c=((t,A,e,n)=>{const i={};let a;if(e){a=go(e,A,!1);for(const t of Object.keys(a))i[t]={value:a[t],priceModifier:0}}else if(n){a=n;for(const t of Object.keys(a))i[t]={value:a[t],priceModifier:0}}for(const e of Object.keys(t)){const n=t[e],a=A.steps.find((t=>t.stepTitle===e));if(1===n.length)i[`${a?.stepTitle} selection`]={value:n[0].name,priceModifier:n[0].priceModifier};else if(n.length>1)for(let t=0;t<n.length;t++)i[`${a?.stepTitle} selection ${t+1}`]={value:n[t].name,priceModifier:n[t].priceModifier}}return i})(n,e,void 0,a);return lo(t,A,r,s,a,c,o,n,i)},wo=async(t,A,e,n,i,a,o,r,s,c,g,l,B)=>{s("workflow.steps.finish.finalize.buildingLayouts"),await t.outstandingRequestsPromise();const w=An.getShadowGraphqlClient();await w.resetStore();const h=await w.query({query:ga,variables:{id:a.id},errorPolicy:"all"}),d=h.data?.transactions[0].workflowState;!h.errors&&d||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(n())),h.errors&&h.errors.forEach((t=>{h.errors&&console.log("Server Error:",t.message)})),await t.updateStateWithServerImmediate(n),console.log("Server state is undefined @ Workflow completion"));const E=t.getPreviewService(),u=A?.finalizeStepConfig?.lookAtAnimation,Q=E&&100===E.getSceneInitializationProgress()&&A.showModelOnFinishStep&&!!u,C=B&&go(B,A,!0),m=B&&go(B,A,!1),p=async t=>{const e={};let n=0;if(Object.keys(o).length>0)for(const i of Object.keys(o)){const a=o[i],r=A.steps.find((t=>t.stepName===i));for(let A=0;A<a.selections.length;++A){const i=a.selections[A];if(r&&(!t||r.option&&(r.option.variants||[]).length>1&&!r.data.hideSelectionInCart&&!r.data.hideSelectionsInCart)){const t=r.stepTitle;e[t]?e[t].push({id:i.id||"",name:i.name,priceModifier:i.priceModifier}):e[t]=[{id:i.id||"",name:i.name,priceModifier:i.priceModifier}]}n+=i.priceModifier}}return[e,n]},[f]=await p(!0),D=Object.fromEntries(Object.keys(f).map((t=>[t,f[t].map((t=>t.id))]))),[I]=await p(!1),y=Object.fromEntries(Object.keys(I).map((t=>[t,I[t].map((t=>t.id))]))),M=await l(Q);s("workflow.steps.finish.finalize.creatingDesign"),a.bulk&&await c(g);const x=await(async t=>(await An.getShadowGraphqlClient().mutate({mutation:co,errorPolicy:"all",fetchPolicy:"no-cache",variables:{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?.designCreate)((()=>{const t={name:r,layouts:e.map((t=>({index:t.index,panelId:t.panelId}))),workflowId:A.id,transactionId:a.id,useThreeDimPreview:Q,previewImage:M};if(m){const A=[];for(const[t,e]of Object.entries(m))A.push({key:t,value:e});t.metadata=A}if(D){const A=[];for(const[t,e]of Object.entries(y))A.push({key:t,ids:e});t.selectedVariants=A}return t})()),F=x?.transaction?.previewImageLink;s("workflow.steps.finish.finalize.updatingTransaction");const Y=(await An.getShadowGraphqlClient().query({query:ca,variables:{id:a.id}})).data.transactions[0];return a.bulk?((t,A,e)=>{const n=(t.product?.basePrice||0)*(t.variationsCount||0),i=t.priceModifierTotal||0,a={items:{value:t.variationsCount?`${t.variationsCount}`:"0",priceModifier:0}};return lo(t,A,n,i,void 0,a,e)})(Y,i,F):await Bo(Y,i,A,f,x?.sku,C,F)};let ho;var Eo;(Eo=ho||(ho={})).Local="Local",Eo.Remote="Remote";const uo=new class{constructor(){so(this,"localPersistenceKey","designTransactions"),so(this,"storageMethod",ho.Local),so(this,"designSavedListeners",[])}attachSaveListener(t){this.designSavedListeners.push(t)}detachSaveListener(t){this.designSavedListeners=this.designSavedListeners.filter((A=>A!==t))}async getSavedDesigns(){return await this.getDesigns()}async getSavedDesignByTransaction(t){return(await this.getSavedDesigns()).find((A=>A.transactionId===t))}async addDesign(t){const A=(await this.getSavedDesigns()).filter((A=>A.transactionId!==t.transactionId));A.unshift(t),await this.setDesigns(A),this.notifyDesignSaved(t)}async removeDesign(t){const A=await this.getSavedDesigns();await this.setDesigns(A.filter((A=>A.transactionId!==t)))}async setDesigns(t){if(this.storageMethod!==ho.Local)throw new Oe("Unexpected storage method requested");Xe.set(this.localPersistenceKey,JSON.stringify(t))}async getDesigns(){if(this.storageMethod===ho.Local){const t=Xe.get(this.localPersistenceKey);return t?JSON.parse(t):[]}throw new Oe("Unexpected storage method requested")}notifyDesignSaved(t){this.designSavedListeners.forEach((A=>A(t)))}};function Qo(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class Co{constructor(t,A){if(Qo(this,"client",void 0),Qo(this,"commandContext",void 0),Qo(this,"workflowManager",void 0),Qo(this,"isReadOnly",void 0),Qo(this,"renderableScenes",[]),Qo(this,"renderableSceneCallbacks",[]),Qo(this,"debouncedSavedDesignUpdate",I(p)((async()=>{await uo.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()}),2500)),Qo(this,"getCanvasObjectURLAsync",(async t=>new Promise(((A,e)=>{try{t.toBlob((t=>{if(t){const e=URL.createObjectURL(t);A(e)}}))}catch(t){e(t)}})))),!A.workflow)throw new Error("No Workflow ID provided.");this.client=t;const e=A.layouts;this.commandContext=new MA,this.commandContext.initialize(e,A.reloadedState),this.isReadOnly=!!A.transaction.lineItem?.id||!Xe.getMap("transactionOwnerIds")?.get(A.transaction.id)||!!A.readOnly,this.workflowManager=new Va(A.workflow,A.product.profanities?.map((t=>t.word))||[],e,this.commandContext,(t=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return A.stateMutationFunc(t)}),A.transaction,A.product,A.previewService,A.renderableContextService,A.reloadedState,A.readOnly),this.workflowManager.addSelectionCallback((t=>{const A=t.traversableScenes.map((t=>{const A=t.renderableSteps.map((t=>t.stepName));return{id:t.name,title:t.title,renderableSteps:A}}));this.renderableScenes=A,this.renderableSceneCallbacks.forEach((t=>t(A)))}))}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async updateVariationRecords(t){await An.getShadowGraphqlClient().mutate({mutation:sa,variables:{transactionId:this.workflowManager.getTransaction().id,updates:t.map((t=>({recordNumber:t.recordNumber,values:t.values.map((t=>({aspect:t.aspect,stepName:t.stepName,value:t.value})))})))}})}async createPreviewImage(t,A){const e=this.workflowManager.getWorkflow(),n=e?.finalizeStepConfig?.lookAtAnimation;if(t){if(!n)throw new Error("Failed to generate cart preview image!");return await(this.workflowManager.getPreviewService()?.renderSceneScreenshot(512,n))||""}const i=document.createElement("canvas");let a=2048;A&&A<=2048&&(a=A),i.width=a,i.height=a;const o=this.commandContext.getAllLayouts(),r=e.defaultPreviewPanelIndex||0,s=e.panels[r],c=o.find((t=>t.layoutState?.layout.panelId===s?.name))||o[0],g=c.layoutState.layout.previewRegion?{x:c.layoutState.layout.previewRegion.left,y:c.layoutState.layout.previewRegion.top,width:c.layoutState.layout.previewRegion.width,height:c.layoutState.layout.previewRegion.height}:{x:0,y:0,width:c.layoutState.layout.width,height:c.layoutState.layout.height},l=this.commandContext.getLayoutById(c.layoutState.layout.id),w=i.getContext("2d");if(!w)throw new je("Failed to obtain 2D context for preview image creation");const h=FA(l.layoutState.layout,l.layoutState.elements,{renderingConfiguration:{purpose:H.Print,region:{left:g.x,top:g.y,width:g.width,height:g.height}}}),d=I(Q).renderToStaticMarkup(h),E=await B.Canvg.from(w,d,{anonymousCrossOrigin:!0,ignoreDimensions:!1});await E.render();const u=await this.getCanvasObjectURLAsync(i);return i.toDataURL(u)}getStepById(t){const A=this.getWorkflowManager().getWorkflow().steps.find((A=>A.stepName===t));if(A&&this.stepHasHandle(A))return ro.get(this.getWorkflowManager(),A)}getSteps(){return this.getScenes().flatMap((t=>this.getStepsByScene(t)))}getScenes(){return this.getWorkflowManager().getWorkflow().stepGroups.map((t=>({id:t.id,name:t.name,stepIds:t.stepNames})))}getBulkStep(){if(this.getWorkflowManager().getTransaction().bulk){const t=this.getWorkflowManager().getProduct().bulkConfiguration,A={type:K.Bulk,stepName:"Bulk",stepTitle:t?.stepTitle??"workflow.steps.bulk.title",helpText:t?.helpText,data:{aspects:la(this.getWorkflowManager().getWorkflow())},conditions:[]};return ro.get(this.getWorkflowManager(),A)}}getStepByName(t){const A=this.getWorkflowManager().getWorkflow().steps.find((A=>A.stepTitle===t));if(A&&this.stepHasHandle(A))return ro.get(this.getWorkflowManager(),A)}getStepsByType(t){return this.getWorkflowManager().getWorkflow().steps.filter((A=>A.type===t)).map((t=>ro.get(this.getWorkflowManager(),t)))}getStepsByScene(t){if(!this.getWorkflowManager().getWorkflow().stepGroups.find((A=>A.name===t.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 t.stepIds.map((t=>this.getWorkflowManager().getWorkflow().steps.find((A=>A.stepName===t)))).filter((t=>this.stepHasHandle(t))).map((t=>ro.get(this.getWorkflowManager(),t)))}async attachCustomerDetails(t){await An.getShadowGraphqlClient().mutate({mutation:Za,variables:{id:this.getWorkflowManager().getTransaction().id,emailAddress:t.email,type:"Owner"}}),this.getWorkflowManager().setTransactionCustomerDetails(t)}attachRenderableSceneListener(t){this.renderableSceneCallbacks.push(t),t(this.renderableScenes)}detachRenderableSceneListener(t){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter((A=>A!==t))}async save(t){if(!this.getCommandContext().getState())throw new Oe("State undefined!");const A={title:await(async()=>{if(t)return t;const A=this.getWorkflowManager().getTransaction().id,e=(await uo.getSavedDesigns()).find((t=>t.transactionId===A))?.title;return e||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getWorkflowManager().getTransaction().id,productId:this.getWorkflowManager().getProduct().id,integrationProductId:this.getWorkflowManager().getTransaction().integrationProduct.id,workflowName:this.getWorkflowManager().getWorkflow().name,workflowId:this.getWorkflowManager().getWorkflow().id,lastEdited:new Date};return await uo.addDesign(A),A}async copy(){const t=I(A)(this.getCommandContext().getState());if(!t)throw new Oe("Internal state is undefined! Cannot copy experience!");const e=JSON.stringify(t.transaction),n=this.getWorkflowManager().getWorkflow(),i=new Mo({}),a=this.getWorkflowManager().getTransaction().integrationProduct?.id;if(!a)throw new Oe("Integration product id is undefined!");await i.initFromIntegrationProduct(a);return await i.getWorkflowExperience(n.id,e,void 0)}async onDesignFinished(t,A,e,n){return wo(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),(()=>this.commandContext.getState()),t,this.workflowManager.getTransaction(),e,this.workflowManager.getWorkflow().name,A,(t=>this.updateVariationRecords(t)),this.workflowManager.getVariationRecords(),(t=>this.createPreviewImage(t)),n)}stepHasHandle(t){return t.type!==K.SilentIllustration&&t.type!==K.ProductOverlay}}function mo(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}const po=t.gql`
|
|
451
451
|
fragment RegionFields on Region {
|
|
452
452
|
width
|
|
453
453
|
top
|
package/dist/module.js
CHANGED
|
@@ -447,7 +447,7 @@ import{CommandContext as A,AssetType as t,BringForwardCommand as e,BringToFrontC
|
|
|
447
447
|
}
|
|
448
448
|
}
|
|
449
449
|
}
|
|
450
|
-
`,Mi=(A,t,e)=>{const n={};return t.steps.forEach((t=>{Object.assign(n,(t=>{const n={};if("Frame"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideImageInCart&&e)return n;n[`${t.stepTitle} image`]=i.image}if("Illustration"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideColorsInCart&&e||!i.colors)return n;if(i.colors.length>0){const A=i.colors.join(", ").toUpperCase();n[`${t.stepTitle} colors`]=A}}if("Module"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideTextInCart&&e)return n;n[`${t.stepTitle} text`]=i.text}if("Text"===t.type){const i=A[t.stepName];if(!i)return n;const a=t.data;a.hideTextInCart&&e||(n[`${t.stepTitle} text`]=i.text),!i.color||a.hideColorInCart&&e||(n[`${t.stepTitle} color`]=i.color)}return n})(t))})),n},yi=(A,t,e,n,i,a,o,r,s)=>{const c={event:"onComplete",lineItemImageUrl:o||"",transactionId:A.id,designProductVariantId:A.externalDesignProductVariantId,designProductId:A.externalDesignProductId,externalCartProductId:A.externalCartProductId,externalCartProductVariantId:A.externalCartProductVariantId,baseCost:e,weight:t.weight,optionsCost:n,exportedData:a,workflowViewerLink:A.workflowViewerLink||"",workflowViewerReadOnlyLink:A.workflowViewerReadOnlyLink||""};return i&&(c.metadata=i),r&&(c.selectedVariants=r),s&&(c.sku=s),c},Fi=async(A,t,e,n,i,a,o)=>{const r=A.product?.basePrice||0,s=A.priceModifierTotal||0,c=((A,t,e,n)=>{const i={};let a;if(e){a=Mi(e,t,!1);for(const A of Object.keys(a))i[A]={value:a[A],priceModifier:0}}else if(n){a=n;for(const A of Object.keys(a))i[A]={value:a[A],priceModifier:0}}for(const e of Object.keys(A)){const n=A[e],a=t.steps.find((A=>A.stepTitle===e));if(1===n.length)i[`${a?.stepTitle} selection`]={value:n[0].name,priceModifier:n[0].priceModifier};else if(n.length>1)for(let A=0;A<n.length;A++)i[`${a?.stepTitle} selection ${A+1}`]={value:n[A].name,priceModifier:n[A].priceModifier}}return i})(n,e,void 0,a);return yi(A,t,r,s,a,c,o,n,i)},Yi=async(A,t,e,n,i,a,o,r,s,c,g,B,l)=>{s("workflow.steps.finish.finalize.buildingLayouts"),await A.outstandingRequestsPromise();const w=ht.getShadowGraphqlClient();await w.resetStore();const E=await w.query({query:Mn,variables:{id:a.id},errorPolicy:"all"}),d=E.data?.transactions[0].workflowState;!E.errors&&d||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(n())),E.errors&&E.errors.forEach((A=>{E.errors&&console.log("Server Error:",A.message)})),await A.updateStateWithServerImmediate(n),console.log("Server state is undefined @ Workflow completion"));const h=A.getPreviewService(),Q=t?.finalizeStepConfig?.lookAtAnimation,C=h&&100===h.getSceneInitializationProgress()&&t.showModelOnFinishStep&&!!Q,u=l&&Mi(l,t,!0),D=l&&Mi(l,t,!1),m=async A=>{const e={};let n=0;if(Object.keys(o).length>0)for(const i of Object.keys(o)){const a=o[i],r=t.steps.find((A=>A.stepName===i));for(let t=0;t<a.selections.length;++t){const i=a.selections[t];if(r&&(!A||r.option&&(r.option.variants||[]).length>1&&!r.data.hideSelectionInCart&&!r.data.hideSelectionsInCart)){const A=r.stepTitle;e[A]?e[A].push({id:i.id||"",name:i.name,priceModifier:i.priceModifier}):e[A]=[{id:i.id||"",name:i.name,priceModifier:i.priceModifier}]}n+=i.priceModifier}}return[e,n]},[I]=await m(!0),p=Object.fromEntries(Object.keys(I).map((A=>[A,I[A].map((A=>A.id))]))),[f]=await m(!1),M=Object.fromEntries(Object.keys(f).map((A=>[A,f[A].map((A=>A.id))]))),y=await B(C);s("workflow.steps.finish.finalize.creatingDesign"),a.bulk&&await c(g);const F=await(async A=>(await ht.getShadowGraphqlClient().mutate({mutation:fi,errorPolicy:"all",fetchPolicy:"no-cache",variables:{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?.designCreate)((()=>{const A={name:r,layouts:e.map((A=>({index:A.index,panelId:A.panelId}))),workflowId:t.id,transactionId:a.id,useThreeDimPreview:C,previewImage:y};if(D){const t=[];for(const[A,e]of Object.entries(D))t.push({key:A,value:e});A.metadata=t}if(p){const t=[];for(const[A,e]of Object.entries(M))t.push({key:A,ids:e});A.selectedVariants=t}return A})()),Y=F?.transaction?.previewImageLink;s("workflow.steps.finish.finalize.updatingTransaction");const x=(await ht.getShadowGraphqlClient().query({query:fn,variables:{id:a.id}})).data.transactions[0];return a.bulk?((A,t,e)=>{const n=(A.product?.basePrice||0)*(A.variationsCount||0),i=A.priceModifierTotal||0,a={items:{value:A.variationsCount?`${A.variationsCount}`:"0",priceModifier:0}};return yi(A,t,n,i,void 0,a,e)})(x,i,Y):await Fi(x,i,t,I,F?.sku,u,Y)};let xi;var Si;(Si=xi||(xi={})).Local="Local",Si.Remote="Remote";const Ni=new class{constructor(){pi(this,"localPersistenceKey","designTransactions"),pi(this,"storageMethod",xi.Local),pi(this,"designSavedListeners",[])}attachSaveListener(A){this.designSavedListeners.push(A)}detachSaveListener(A){this.designSavedListeners=this.designSavedListeners.filter((t=>t!==A))}async getSavedDesigns(){return await this.getDesigns()}async getSavedDesignByTransaction(A){return(await this.getSavedDesigns()).find((t=>t.transactionId===A))}async addDesign(A){const t=(await this.getSavedDesigns()).filter((t=>t.transactionId!==A.transactionId));t.unshift(A),await this.setDesigns(t),this.notifyDesignSaved(A)}async removeDesign(A){const t=await this.getSavedDesigns();await this.setDesigns(t.filter((t=>t.transactionId!==A)))}async setDesigns(A){if(this.storageMethod!==xi.Local)throw new nt("Unexpected storage method requested");gt.set(this.localPersistenceKey,JSON.stringify(A))}async getDesigns(){if(this.storageMethod===xi.Local){const A=gt.get(this.localPersistenceKey);return A?JSON.parse(A):[]}throw new nt("Unexpected storage method requested")}notifyDesignSaved(A){this.designSavedListeners.forEach((t=>t(A)))}};function vi(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class Hi{constructor(t,e){if(vi(this,"client",void 0),vi(this,"commandContext",void 0),vi(this,"workflowManager",void 0),vi(this,"isReadOnly",void 0),vi(this,"renderableScenes",[]),vi(this,"renderableSceneCallbacks",[]),vi(this,"debouncedSavedDesignUpdate",VA((async()=>{await Ni.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()}),2500)),vi(this,"getCanvasObjectURLAsync",(async A=>new Promise(((t,e)=>{try{A.toBlob((A=>{if(A){const e=URL.createObjectURL(A);t(e)}}))}catch(A){e(A)}})))),!e.workflow)throw new Error("No Workflow ID provided.");this.client=t;const n=e.layouts;this.commandContext=new A,this.commandContext.initialize(n,e.reloadedState),this.isReadOnly=!!e.transaction.lineItem?.id||!gt.getMap("transactionOwnerIds")?.get(e.transaction.id)||!!e.readOnly,this.workflowManager=new si(e.workflow,e.product.profanities?.map((A=>A.word))||[],n,this.commandContext,(A=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return e.stateMutationFunc(A)}),e.transaction,e.product,e.previewService,e.renderableContextService,e.reloadedState,e.readOnly),this.workflowManager.addSelectionCallback((A=>{const t=A.traversableScenes.map((A=>{const t=A.renderableSteps.map((A=>A.stepName));return{id:A.name,title:A.title,renderableSteps:t}}));this.renderableScenes=t,this.renderableSceneCallbacks.forEach((A=>A(t)))}))}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async updateVariationRecords(A){await ht.getShadowGraphqlClient().mutate({mutation:pn,variables:{transactionId:this.workflowManager.getTransaction().id,updates:A.map((A=>({recordNumber:A.recordNumber,values:A.values.map((A=>({aspect:A.aspect,stepName:A.stepName,value:A.value})))})))}})}async createPreviewImage(A,t){const e=this.workflowManager.getWorkflow(),n=e?.finalizeStepConfig?.lookAtAnimation;if(A){if(!n)throw new Error("Failed to generate cart preview image!");return await(this.workflowManager.getPreviewService()?.renderSceneScreenshot(512,n))||""}const i=document.createElement("canvas");let a=2048;t&&t<=2048&&(a=t),i.width=a,i.height=a;const o=this.commandContext.getAllLayouts(),r=e.defaultPreviewPanelIndex||0,s=e.panels[r],c=o.find((A=>A.layoutState?.layout.panelId===s?.name))||o[0],g=c.layoutState.layout.previewRegion?{x:c.layoutState.layout.previewRegion.left,y:c.layoutState.layout.previewRegion.top,width:c.layoutState.layout.previewRegion.width,height:c.layoutState.layout.previewRegion.height}:{x:0,y:0,width:c.layoutState.layout.width,height:c.layoutState.layout.height},B=this.commandContext.getLayoutById(c.layoutState.layout.id),l=i.getContext("2d");if(!l)throw new ot("Failed to obtain 2D context for preview image creation");const w=H(B.layoutState.layout,B.layoutState.elements,{renderingConfiguration:{purpose:W.Print,region:{left:g.x,top:g.y,width:g.width,height:g.height}}}),E=zA.renderToStaticMarkup(w),d=await TA.from(l,E,{anonymousCrossOrigin:!0,ignoreDimensions:!1});await d.render();const h=await this.getCanvasObjectURLAsync(i);return i.toDataURL(h)}getStepById(A){const t=this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepName===A));if(t&&this.stepHasHandle(t))return Ii.get(this.getWorkflowManager(),t)}getSteps(){return this.getWorkflowManager().getWorkflow().stepGroups.flatMap((A=>this.getStepsByScene(A)))}getBulkStep(){if(this.getWorkflowManager().getTransaction().bulk){const A=this.getWorkflowManager().getProduct().bulkConfiguration,t={type:m.Bulk,stepName:"Bulk",stepTitle:A?.stepTitle??"workflow.steps.bulk.title",helpText:A?.helpText,data:{aspects:yn(this.getWorkflowManager().getWorkflow())},conditions:[]};return Ii.get(this.getWorkflowManager(),t)}}getStepByName(A){const t=this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepTitle===A));if(t&&this.stepHasHandle(t))return Ii.get(this.getWorkflowManager(),t)}getStepsByType(A){return this.getWorkflowManager().getWorkflow().steps.filter((t=>t.type===A)).map((A=>Ii.get(this.getWorkflowManager(),A)))}getStepsByScene(A){if(!this.getWorkflowManager().getWorkflow().stepGroups.find((t=>t.name===A.name)))throw new Error("Given scene is not present on workflow! Be careful when persisting scenes that you only use them with the relevant workflow.");return A.stepNames.map((A=>this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepName===A)))).filter((A=>this.stepHasHandle(A))).map((A=>Ii.get(this.getWorkflowManager(),A)))}async attachCustomerDetails(A){await ht.getShadowGraphqlClient().mutate({mutation:li,variables:{id:this.getWorkflowManager().getTransaction().id,emailAddress:A.email,type:"Owner"}}),this.getWorkflowManager().setTransactionCustomerDetails(A)}attachRenderableSceneListener(A){this.renderableSceneCallbacks.push(A),A(this.renderableScenes)}detachRenderableSceneListener(A){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter((t=>t!==A))}async save(A){if(!this.getCommandContext().getState())throw new nt("State undefined!");const t={title:await(async()=>{if(A)return A;const t=this.getWorkflowManager().getTransaction().id,e=(await Ni.getSavedDesigns()).find((A=>A.transactionId===t))?.title;return e||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getWorkflowManager().getTransaction().id,productId:this.getWorkflowManager().getProduct().id,integrationProductId:this.getWorkflowManager().getTransaction().integrationProduct.id,workflowName:this.getWorkflowManager().getWorkflow().name,workflowId:this.getWorkflowManager().getWorkflow().id,lastEdited:new Date};return await Ni.addDesign(t),t}async copy(){const A=OA(this.getCommandContext().getState());if(!A)throw new nt("Internal state is undefined! Cannot copy experience!");const t=JSON.stringify(A.transaction),e=this.getWorkflowManager().getWorkflow(),n=new ki({}),i=this.getWorkflowManager().getTransaction().integrationProduct?.id;if(!i)throw new nt("Integration product id is undefined!");await n.initFromIntegrationProduct(i);return await n.getWorkflowExperience(e.id,t,void 0)}async onDesignFinished(A,t,e,n){return Yi(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),(()=>this.commandContext.getState()),A,this.workflowManager.getTransaction(),e,this.workflowManager.getWorkflow().name,t,(A=>this.updateVariationRecords(A)),this.workflowManager.getVariationRecords(),(A=>this.createPreviewImage(A)),n)}stepHasHandle(A){return A.type!==m.SilentIllustration&&A.type!==m.ProductOverlay}}function Ri(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const Ui=IA`
|
|
450
|
+
`,Mi=(A,t,e)=>{const n={};return t.steps.forEach((t=>{Object.assign(n,(t=>{const n={};if("Frame"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideImageInCart&&e)return n;n[`${t.stepTitle} image`]=i.image}if("Illustration"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideColorsInCart&&e||!i.colors)return n;if(i.colors.length>0){const A=i.colors.join(", ").toUpperCase();n[`${t.stepTitle} colors`]=A}}if("Module"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideTextInCart&&e)return n;n[`${t.stepTitle} text`]=i.text}if("Text"===t.type){const i=A[t.stepName];if(!i)return n;const a=t.data;a.hideTextInCart&&e||(n[`${t.stepTitle} text`]=i.text),!i.color||a.hideColorInCart&&e||(n[`${t.stepTitle} color`]=i.color)}return n})(t))})),n},yi=(A,t,e,n,i,a,o,r,s)=>{const c={event:"onComplete",lineItemImageUrl:o||"",transactionId:A.id,designProductVariantId:A.externalDesignProductVariantId,designProductId:A.externalDesignProductId,externalCartProductId:A.externalCartProductId,externalCartProductVariantId:A.externalCartProductVariantId,baseCost:e,weight:t.weight,optionsCost:n,exportedData:a,workflowViewerLink:A.workflowViewerLink||"",workflowViewerReadOnlyLink:A.workflowViewerReadOnlyLink||""};return i&&(c.metadata=i),r&&(c.selectedVariants=r),s&&(c.sku=s),c},Fi=async(A,t,e,n,i,a,o)=>{const r=A.product?.basePrice||0,s=A.priceModifierTotal||0,c=((A,t,e,n)=>{const i={};let a;if(e){a=Mi(e,t,!1);for(const A of Object.keys(a))i[A]={value:a[A],priceModifier:0}}else if(n){a=n;for(const A of Object.keys(a))i[A]={value:a[A],priceModifier:0}}for(const e of Object.keys(A)){const n=A[e],a=t.steps.find((A=>A.stepTitle===e));if(1===n.length)i[`${a?.stepTitle} selection`]={value:n[0].name,priceModifier:n[0].priceModifier};else if(n.length>1)for(let A=0;A<n.length;A++)i[`${a?.stepTitle} selection ${A+1}`]={value:n[A].name,priceModifier:n[A].priceModifier}}return i})(n,e,void 0,a);return yi(A,t,r,s,a,c,o,n,i)},Yi=async(A,t,e,n,i,a,o,r,s,c,g,B,l)=>{s("workflow.steps.finish.finalize.buildingLayouts"),await A.outstandingRequestsPromise();const w=ht.getShadowGraphqlClient();await w.resetStore();const E=await w.query({query:Mn,variables:{id:a.id},errorPolicy:"all"}),d=E.data?.transactions[0].workflowState;!E.errors&&d||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(n())),E.errors&&E.errors.forEach((A=>{E.errors&&console.log("Server Error:",A.message)})),await A.updateStateWithServerImmediate(n),console.log("Server state is undefined @ Workflow completion"));const h=A.getPreviewService(),Q=t?.finalizeStepConfig?.lookAtAnimation,C=h&&100===h.getSceneInitializationProgress()&&t.showModelOnFinishStep&&!!Q,u=l&&Mi(l,t,!0),D=l&&Mi(l,t,!1),m=async A=>{const e={};let n=0;if(Object.keys(o).length>0)for(const i of Object.keys(o)){const a=o[i],r=t.steps.find((A=>A.stepName===i));for(let t=0;t<a.selections.length;++t){const i=a.selections[t];if(r&&(!A||r.option&&(r.option.variants||[]).length>1&&!r.data.hideSelectionInCart&&!r.data.hideSelectionsInCart)){const A=r.stepTitle;e[A]?e[A].push({id:i.id||"",name:i.name,priceModifier:i.priceModifier}):e[A]=[{id:i.id||"",name:i.name,priceModifier:i.priceModifier}]}n+=i.priceModifier}}return[e,n]},[I]=await m(!0),p=Object.fromEntries(Object.keys(I).map((A=>[A,I[A].map((A=>A.id))]))),[f]=await m(!1),M=Object.fromEntries(Object.keys(f).map((A=>[A,f[A].map((A=>A.id))]))),y=await B(C);s("workflow.steps.finish.finalize.creatingDesign"),a.bulk&&await c(g);const F=await(async A=>(await ht.getShadowGraphqlClient().mutate({mutation:fi,errorPolicy:"all",fetchPolicy:"no-cache",variables:{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?.designCreate)((()=>{const A={name:r,layouts:e.map((A=>({index:A.index,panelId:A.panelId}))),workflowId:t.id,transactionId:a.id,useThreeDimPreview:C,previewImage:y};if(D){const t=[];for(const[A,e]of Object.entries(D))t.push({key:A,value:e});A.metadata=t}if(p){const t=[];for(const[A,e]of Object.entries(M))t.push({key:A,ids:e});A.selectedVariants=t}return A})()),Y=F?.transaction?.previewImageLink;s("workflow.steps.finish.finalize.updatingTransaction");const x=(await ht.getShadowGraphqlClient().query({query:fn,variables:{id:a.id}})).data.transactions[0];return a.bulk?((A,t,e)=>{const n=(A.product?.basePrice||0)*(A.variationsCount||0),i=A.priceModifierTotal||0,a={items:{value:A.variationsCount?`${A.variationsCount}`:"0",priceModifier:0}};return yi(A,t,n,i,void 0,a,e)})(x,i,Y):await Fi(x,i,t,I,F?.sku,u,Y)};let xi;var Si;(Si=xi||(xi={})).Local="Local",Si.Remote="Remote";const Ni=new class{constructor(){pi(this,"localPersistenceKey","designTransactions"),pi(this,"storageMethod",xi.Local),pi(this,"designSavedListeners",[])}attachSaveListener(A){this.designSavedListeners.push(A)}detachSaveListener(A){this.designSavedListeners=this.designSavedListeners.filter((t=>t!==A))}async getSavedDesigns(){return await this.getDesigns()}async getSavedDesignByTransaction(A){return(await this.getSavedDesigns()).find((t=>t.transactionId===A))}async addDesign(A){const t=(await this.getSavedDesigns()).filter((t=>t.transactionId!==A.transactionId));t.unshift(A),await this.setDesigns(t),this.notifyDesignSaved(A)}async removeDesign(A){const t=await this.getSavedDesigns();await this.setDesigns(t.filter((t=>t.transactionId!==A)))}async setDesigns(A){if(this.storageMethod!==xi.Local)throw new nt("Unexpected storage method requested");gt.set(this.localPersistenceKey,JSON.stringify(A))}async getDesigns(){if(this.storageMethod===xi.Local){const A=gt.get(this.localPersistenceKey);return A?JSON.parse(A):[]}throw new nt("Unexpected storage method requested")}notifyDesignSaved(A){this.designSavedListeners.forEach((t=>t(A)))}};function vi(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class Hi{constructor(t,e){if(vi(this,"client",void 0),vi(this,"commandContext",void 0),vi(this,"workflowManager",void 0),vi(this,"isReadOnly",void 0),vi(this,"renderableScenes",[]),vi(this,"renderableSceneCallbacks",[]),vi(this,"debouncedSavedDesignUpdate",VA((async()=>{await Ni.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()}),2500)),vi(this,"getCanvasObjectURLAsync",(async A=>new Promise(((t,e)=>{try{A.toBlob((A=>{if(A){const e=URL.createObjectURL(A);t(e)}}))}catch(A){e(A)}})))),!e.workflow)throw new Error("No Workflow ID provided.");this.client=t;const n=e.layouts;this.commandContext=new A,this.commandContext.initialize(n,e.reloadedState),this.isReadOnly=!!e.transaction.lineItem?.id||!gt.getMap("transactionOwnerIds")?.get(e.transaction.id)||!!e.readOnly,this.workflowManager=new si(e.workflow,e.product.profanities?.map((A=>A.word))||[],n,this.commandContext,(A=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return e.stateMutationFunc(A)}),e.transaction,e.product,e.previewService,e.renderableContextService,e.reloadedState,e.readOnly),this.workflowManager.addSelectionCallback((A=>{const t=A.traversableScenes.map((A=>{const t=A.renderableSteps.map((A=>A.stepName));return{id:A.name,title:A.title,renderableSteps:t}}));this.renderableScenes=t,this.renderableSceneCallbacks.forEach((A=>A(t)))}))}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async updateVariationRecords(A){await ht.getShadowGraphqlClient().mutate({mutation:pn,variables:{transactionId:this.workflowManager.getTransaction().id,updates:A.map((A=>({recordNumber:A.recordNumber,values:A.values.map((A=>({aspect:A.aspect,stepName:A.stepName,value:A.value})))})))}})}async createPreviewImage(A,t){const e=this.workflowManager.getWorkflow(),n=e?.finalizeStepConfig?.lookAtAnimation;if(A){if(!n)throw new Error("Failed to generate cart preview image!");return await(this.workflowManager.getPreviewService()?.renderSceneScreenshot(512,n))||""}const i=document.createElement("canvas");let a=2048;t&&t<=2048&&(a=t),i.width=a,i.height=a;const o=this.commandContext.getAllLayouts(),r=e.defaultPreviewPanelIndex||0,s=e.panels[r],c=o.find((A=>A.layoutState?.layout.panelId===s?.name))||o[0],g=c.layoutState.layout.previewRegion?{x:c.layoutState.layout.previewRegion.left,y:c.layoutState.layout.previewRegion.top,width:c.layoutState.layout.previewRegion.width,height:c.layoutState.layout.previewRegion.height}:{x:0,y:0,width:c.layoutState.layout.width,height:c.layoutState.layout.height},B=this.commandContext.getLayoutById(c.layoutState.layout.id),l=i.getContext("2d");if(!l)throw new ot("Failed to obtain 2D context for preview image creation");const w=H(B.layoutState.layout,B.layoutState.elements,{renderingConfiguration:{purpose:W.Print,region:{left:g.x,top:g.y,width:g.width,height:g.height}}}),E=zA.renderToStaticMarkup(w),d=await TA.from(l,E,{anonymousCrossOrigin:!0,ignoreDimensions:!1});await d.render();const h=await this.getCanvasObjectURLAsync(i);return i.toDataURL(h)}getStepById(A){const t=this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepName===A));if(t&&this.stepHasHandle(t))return Ii.get(this.getWorkflowManager(),t)}getSteps(){return this.getScenes().flatMap((A=>this.getStepsByScene(A)))}getScenes(){return this.getWorkflowManager().getWorkflow().stepGroups.map((A=>({id:A.id,name:A.name,stepIds:A.stepNames})))}getBulkStep(){if(this.getWorkflowManager().getTransaction().bulk){const A=this.getWorkflowManager().getProduct().bulkConfiguration,t={type:m.Bulk,stepName:"Bulk",stepTitle:A?.stepTitle??"workflow.steps.bulk.title",helpText:A?.helpText,data:{aspects:yn(this.getWorkflowManager().getWorkflow())},conditions:[]};return Ii.get(this.getWorkflowManager(),t)}}getStepByName(A){const t=this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepTitle===A));if(t&&this.stepHasHandle(t))return Ii.get(this.getWorkflowManager(),t)}getStepsByType(A){return this.getWorkflowManager().getWorkflow().steps.filter((t=>t.type===A)).map((A=>Ii.get(this.getWorkflowManager(),A)))}getStepsByScene(A){if(!this.getWorkflowManager().getWorkflow().stepGroups.find((t=>t.name===A.name)))throw new Error("Given scene is not present on workflow! Be careful when persisting scenes that you only use them with the relevant workflow.");return A.stepIds.map((A=>this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepName===A)))).filter((A=>this.stepHasHandle(A))).map((A=>Ii.get(this.getWorkflowManager(),A)))}async attachCustomerDetails(A){await ht.getShadowGraphqlClient().mutate({mutation:li,variables:{id:this.getWorkflowManager().getTransaction().id,emailAddress:A.email,type:"Owner"}}),this.getWorkflowManager().setTransactionCustomerDetails(A)}attachRenderableSceneListener(A){this.renderableSceneCallbacks.push(A),A(this.renderableScenes)}detachRenderableSceneListener(A){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter((t=>t!==A))}async save(A){if(!this.getCommandContext().getState())throw new nt("State undefined!");const t={title:await(async()=>{if(A)return A;const t=this.getWorkflowManager().getTransaction().id,e=(await Ni.getSavedDesigns()).find((A=>A.transactionId===t))?.title;return e||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getWorkflowManager().getTransaction().id,productId:this.getWorkflowManager().getProduct().id,integrationProductId:this.getWorkflowManager().getTransaction().integrationProduct.id,workflowName:this.getWorkflowManager().getWorkflow().name,workflowId:this.getWorkflowManager().getWorkflow().id,lastEdited:new Date};return await Ni.addDesign(t),t}async copy(){const A=OA(this.getCommandContext().getState());if(!A)throw new nt("Internal state is undefined! Cannot copy experience!");const t=JSON.stringify(A.transaction),e=this.getWorkflowManager().getWorkflow(),n=new ki({}),i=this.getWorkflowManager().getTransaction().integrationProduct?.id;if(!i)throw new nt("Integration product id is undefined!");await n.initFromIntegrationProduct(i);return await n.getWorkflowExperience(e.id,t,void 0)}async onDesignFinished(A,t,e,n){return Yi(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),(()=>this.commandContext.getState()),A,this.workflowManager.getTransaction(),e,this.workflowManager.getWorkflow().name,t,(A=>this.updateVariationRecords(A)),this.workflowManager.getVariationRecords(),(A=>this.createPreviewImage(A)),n)}stepHasHandle(A){return A.type!==m.SilentIllustration&&A.type!==m.ProductOverlay}}function Ri(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const Ui=IA`
|
|
451
451
|
${Ct}
|
|
452
452
|
${Dt}
|
|
453
453
|
${Ft}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Workflow as _Workflow1, StepAspect as _StepAspect1, Step as _Step1, AnyStepData as _AnyStepData1, Asset as _Asset1, Region, VariantResource as _VariantResource1, FrameOffsets, PatternImageData, DigitalContentStepData as _DigitalContentStepData1, LayoutsState as _LayoutsState1, CanvasCommand as _CanvasCommand1, FrameStepData as _FrameStepData1, ILayout as _ILayout1, CreateElementCommand as _CreateElementCommand1, FrameElement as _FrameElement1, ColorDefinition as _ColorDefinition1, IllustrationStepData as _IllustrationStepData1, IllustrationElement as _IllustrationElement1, LayoutData as _LayoutData1, MaterialStepData as _MaterialStepData1, ModelStepData as _ModelStepData1, ModuleStepData as _ModuleStepData1, PictureStepData as _PictureStepData1, QuestionStepData as _QuestionStepData1, ShapeStepData as _ShapeStepData1, FontData, GroupCommand as _GroupCommand1, OptionResource as _OptionResource1, TextboxElement as _TextboxElement1, TextStepData as _TextStepData1, StepStorage as _StepStorage1, SerializableStep, CommandState as _CommandState1, CommandContext as _CommandContext1, LayoutState, MaterialResource, AssetType as _AssetType1, Point, ScaleAxis, UnitOfMeasurement as _UnitOfMeasurement1, StepType as _StepType1, BulkStepData as _BulkStepData1,
|
|
1
|
+
import { Workflow as _Workflow1, StepAspect as _StepAspect1, Step as _Step1, AnyStepData as _AnyStepData1, Asset as _Asset1, Region, VariantResource as _VariantResource1, FrameOffsets, PatternImageData, DigitalContentStepData as _DigitalContentStepData1, LayoutsState as _LayoutsState1, CanvasCommand as _CanvasCommand1, FrameStepData as _FrameStepData1, ILayout as _ILayout1, CreateElementCommand as _CreateElementCommand1, FrameElement as _FrameElement1, ColorDefinition as _ColorDefinition1, IllustrationStepData as _IllustrationStepData1, IllustrationElement as _IllustrationElement1, LayoutData as _LayoutData1, MaterialStepData as _MaterialStepData1, ModelStepData as _ModelStepData1, ModuleStepData as _ModuleStepData1, PictureStepData as _PictureStepData1, QuestionStepData as _QuestionStepData1, ShapeStepData as _ShapeStepData1, FontData, GroupCommand as _GroupCommand1, OptionResource as _OptionResource1, TextboxElement as _TextboxElement1, TextStepData as _TextStepData1, StepStorage as _StepStorage1, SerializableStep, CommandState as _CommandState1, CommandContext as _CommandContext1, LayoutState, MaterialResource, AssetType as _AssetType1, Point, ScaleAxis, UnitOfMeasurement as _UnitOfMeasurement1, StepType as _StepType1, BulkStepData as _BulkStepData1, FrameData as _FrameData1, Animatable, AnyStepData, Asset, AssetType, BringForwardCommand, BringToFrontCommand, BringToBackCommand, BulkStepData, CanvasCommand, ColorDefinition, CommandContext, CommandState, CreateElementCommand, DeleteElementCommand, DigitalContentStepData, FontAlignmentCommand, FontColorCommand, FontSizeCommand, FontSourceCommand, FrameElement, FrameStepData, GroupCommand, ILayout, IllustrationElement, IllustrationStepData, ImageElement, LayoutData, LayoutElement, LayoutElementFactory, LayoutElementType, LayoutsState, MaterialStepData, ModelStepData, ModuleStepData, MoveCommand, OptionResource, PictureStepData, QuestionStepData, ResizeCommand, RotateCommand, SendBackwardsCommand, ShapeStepData, Step, StepAspect, StepAspectType, StepStorage, StepType, TextChangeCommand, TextStepData, TextboxElement, UnitOfMeasurement, VariantResource, Workflow, dataUrlFromExternalUrl, findElement, frameDataCache, generate, generateSVGWithUnknownColors, getAttributesFromArrayBuffer, getFrameData, getSvgElement, loadFontFromDataUrl, loadFontFromExternalUrl, patternImageDataCache, CreateLayoutCommand, rehydrateSerializedLayout, ColorProfileProps, WorkflowPanel, determineCorrectFontSizeAndLines, registerJSDOM, getAxisAlignedBoundingBox } from "@spiffcommerce/papyrus";
|
|
2
2
|
import { ApolloClient } from "@apollo/client";
|
|
3
3
|
import React, { ReactNode, Dispatch, FunctionComponent, RefObject, PointerEvent, KeyboardEvent } from "react";
|
|
4
4
|
export const gatherVaryingStepAspects: (workflow: _Workflow1) => _StepAspect1[];
|
|
@@ -1536,6 +1536,23 @@ declare class DesignService {
|
|
|
1536
1536
|
removeDesign(transactionId: string): Promise<void>;
|
|
1537
1537
|
}
|
|
1538
1538
|
export const designService: DesignService;
|
|
1539
|
+
/**
|
|
1540
|
+
* A scene is a collection of steps that can be used to group steps together.
|
|
1541
|
+
*/
|
|
1542
|
+
interface Scene {
|
|
1543
|
+
/**
|
|
1544
|
+
* The unique identifier for the scene.
|
|
1545
|
+
*/
|
|
1546
|
+
id?: string;
|
|
1547
|
+
/**
|
|
1548
|
+
* The name of the scene.
|
|
1549
|
+
*/
|
|
1550
|
+
name: string;
|
|
1551
|
+
/**
|
|
1552
|
+
* The steps that are part of the scene. A list of ids. See getStepById.
|
|
1553
|
+
*/
|
|
1554
|
+
stepIds: string[];
|
|
1555
|
+
}
|
|
1539
1556
|
/**
|
|
1540
1557
|
* A Workflow experience encapsulates the workflow manager and command context. It
|
|
1541
1558
|
* provides a simplified interface for interacting with the workflow manager. You
|
|
@@ -1585,11 +1602,16 @@ export interface WorkflowExperience {
|
|
|
1585
1602
|
* Returns all steps that are children of a given scene.
|
|
1586
1603
|
* @param scene The scene you want the steps for.
|
|
1587
1604
|
*/
|
|
1588
|
-
getStepsByScene(scene:
|
|
1605
|
+
getStepsByScene(scene: Scene): StepHandle<_AnyStepData1>[];
|
|
1589
1606
|
/**
|
|
1590
1607
|
* Returns all steps in the workflow that are currently active. Ordered by scene and appearance within their respective scenes.
|
|
1591
1608
|
*/
|
|
1592
1609
|
getSteps(): StepHandle<_AnyStepData1>[];
|
|
1610
|
+
/**
|
|
1611
|
+
* Returns a list of scenes that are configured in the workflow. Each scene
|
|
1612
|
+
* contains a list of steps. See getStepsByScene to access these.
|
|
1613
|
+
*/
|
|
1614
|
+
getScenes(): Scene[];
|
|
1593
1615
|
/**
|
|
1594
1616
|
* Attach specific details about the customer to the experience. This is useful for things like retargeting. Currently only
|
|
1595
1617
|
* email is supported. From SpiffCommerce hosted experiences these details will be attached whenever the customer has provided & given permission.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spiffcommerce/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Core client API for interacting with the Spiff Commerce backend.",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
},
|
|
87
87
|
"dependencies": {
|
|
88
88
|
"@apollo/client": "^3.7.0",
|
|
89
|
-
"@spiffcommerce/papyrus": "1.5.
|
|
89
|
+
"@spiffcommerce/papyrus": "1.5.72",
|
|
90
90
|
"canvg": "https://github.com/spiffdev/canvg.git#03bcd151b12441e88ecb552bb658356f5bbe92c4",
|
|
91
91
|
"cross-fetch": "^3.1.5",
|
|
92
92
|
"graphql": "^16.6.0",
|