@spiffcommerce/core 36.1.1 → 37.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,12 +1,12 @@
1
- "use strict";var wr=Object.create;var sn=Object.defineProperty;var yr=Object.getOwnPropertyDescriptor;var Sr=Object.getOwnPropertyNames;var vr=Object.getPrototypeOf,Er=Object.prototype.hasOwnProperty;var br=(n,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Sr(t))!Er.call(n,i)&&i!==e&&sn(n,i,{get:()=>t[i],enumerable:!(a=yr(t,i))||a.enumerable});return n};var Ir=(n,t,e)=>(e=n!=null?wr(vr(n)):{},br(t||!n||!n.__esModule?sn(e,"default",{value:n,enumerable:!0}):e,n));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C=require("@apollo/client/core"),Br=require("@apollo/client/link/context"),Pr=require("@apollo/client/link/error"),xr=require("preact-render-to-string"),Fr=require("@apollo/client/link/remove-typename"),Dr=require("exifr/dist/mini.umd.cjs"),Rn=require("css"),kr=require("fuse.js"),Ma=require("pith"),ha=require("lodash.chunk"),Pt=require("lodash.clonedeep"),B=require("preact/jsx-runtime"),ga=require("opentype.js"),Mr=require("html-entities"),Tr=require("handlebars"),Nr=require("data-uri-to-buffer"),pe=require("@aws-sdk/client-cognito-identity-provider"),Qr=require("dinero.js"),Or=require("currency-codes"),$n=require("lodash.debounce"),te=require("lodash.isequal"),ma=require("unicode-default-word-boundary"),Un=require("qrcode"),Rr=require("svg-path-bbox");require("fs");require("path");const $r=require("lodash.omit");function Ur(n){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const e in n)if(e!=="default"){const a=Object.getOwnPropertyDescriptor(n,e);Object.defineProperty(t,e,a.get?a:{enumerable:!0,get:()=>n[e]})}}return t.default=n,Object.freeze(t)}const ln=Ur(Or);var ee=(n=>(n.Data="Data",n.Font="Font",n.Frame="Frame",n.Illustration="Illustration",n.Image="Image",n.Model="Model",n.Material="Material",n.Color="Color",n.QuestionnaireCollateral="QuestionnaireCollateral",n.RequestCollateral="RequestCollateral",n.SignupCollateral="SignupCollateral",n.Video="Video",n.ColorProfile="ColorProfile",n.Environment="Environment",n))(ee||{}),Vn=(n=>(n.AND="AND",n.OR="OR",n))(Vn||{}),q=(n=>(n.FileUpload="FileUpload",n.Option="Option",n.ColorOption="ColorOption",n.Text="Text",n))(q||{}),E=(n=>(n.Information="Information",n.Bulk="Bulk",n.DigitalContent="DigitalContent",n.Finish="Finish",n.Frame="Frame",n.Illustration="Illustration",n.Introduction="Introduction",n.Material="Material",n.Model="Model",n.Module="Module",n.Picture="Picture",n.Photo="Photo",n.ProductOverlay="ProductOverlay",n.Question="Question",n.Shape="Shape",n.SilentIllustration="SilentIllustration",n.Text="Text",n))(E||{}),Ln=(n=>(n.Color="Color",n.Colors="Colors",n.Selection="Selection",n.Selections="Selections",n.Text="Text",n.Upload="Upload",n))(Ln||{}),Ot=(n=>(n.ThreeD="ThreeD",n.FreeDesign="FreeDesign",n.Print="Print",n))(Ot||{}),D=(n=>(n.Frame="frame",n.Group="group",n.Image="image",n.Pattern="pattern",n.Illustration="illustration",n.Textbox="textbox",n))(D||{}),qn=(n=>(n.Default="Default",n.FirstTransaction="FirstTransaction",n.OneToOne="OneToOne",n))(qn||{}),Ta=(n=>(n.Pending="Pending",n.Failed="Failed",n.Validated="Validated",n.Overridden="Overridden",n))(Ta||{}),zn=(n=>(n.Hyperlink="Hyperlink",n.Edit="Edit",n.Approve="Approve",n))(zn||{}),Gn=(n=>(n.Hub="Hub",n.Shopify="Shopify",n))(Gn||{}),Qe=(n=>(n.BackgroundRemover="BackgroundRemover",n.ConversionAccelerator="Conversion Accelerator",n.ProcessBuilder="ProcessBuilder",n))(Qe||{}),jn=(n=>(n[n.Orbit=0]="Orbit",n[n.Pan=1]="Pan",n))(jn||{}),Na=(n=>(n.Owner="Owner",n.Approver="Approver",n.Editor="Editor",n.Viewer="Viewer",n))(Na||{}),xt=(n=>(n.Autosize="Autosize",n.Traditional="Traditional",n))(xt||{}),H=(n=>(n[n.North=0]="North",n[n.Northeast=1]="Northeast",n[n.East=2]="East",n[n.Southeast=3]="Southeast",n[n.South=4]="South",n[n.Southwest=5]="Southwest",n[n.West=6]="West",n[n.Northwest=7]="Northwest",n))(H||{}),Hn=(n=>(n.Pixel="px",n.Millimeter="mm",n.Centimeter="cm",n))(Hn||{});class Wn extends Error{constructor(t){super(t),this.name=this.constructor.name}}class oe extends Wn{constructor(t){super(`ConfigurationError - ${t}`)}}class ae extends oe{constructor(t){super(`Option not Configured: ${t.stepTitle}`),this.optionId=t?.optionId||"N/A"}}class Y extends oe{constructor(t){super(`Panel not Found: ${t.panelId}`),this.panelId=t?.panelId||"N/A"}}class wt extends oe{constructor(t){super(`Asset not found for variant: ${t.name}`),this.variant=t}}class Rt extends oe{constructor(t){super(`Resource not found for asset: ${t.name}`),this.asset=t}}class lt extends oe{constructor(t,e){super(`Workflow Misconfiguration: ${t.stepName} - ${e}`),this.step=t}}class Oe extends Wn{constructor(t){super(`ImplementationError - ${t}`)}}class O extends Oe{constructor(t){super(`Unhandled Behavior Encountered: ${t}`)}}class It extends Oe{constructor(t){super(`Parsing Error: ${t}`)}}class ft extends Oe{constructor(t){super(`Client Error: ${t}`)}}class Re extends Oe{constructor(t){super(`Resource Generation Failed: ${t}`)}}class Vr{get(t){return localStorage.getItem(t)||void 0}set(t,e){localStorage.setItem(t,e)}remove(t){localStorage.removeItem(t)}getMap(t){const e=this.get(t);if(e)return new Map(JSON.parse(e))}setMap(t,e){const a=JSON.stringify([...e.entries()]);this.set(t,a)}}class cn{constructor(){this.storage=new Map}get(t){return this.storage.get(t)||void 0}set(t,e){this.storage.set(t,e)}remove(t){this.storage.delete(t)}getMap(t){const e=this.get(t);if(e)return new Map(JSON.parse(e))}setMap(t,e){const a=JSON.stringify([...e.entries()]);this.set(t,a)}}const Lr=()=>{try{return localStorage?new Vr:new cn}catch{return console.warn("Local storage was unavilable due to browser security settings. Using in-memory storage instead."),new cn}},Q=Lr();class qr{constructor(){this.defaultServerUrl="https://api.au.spiffcommerce.com",this.defaultServicesApiUrl="https://services.au.spiffcommerce.com",this.defaultHubUrl="https://hub.au.spiffcommerce.com",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(e=>e())}setServicesApiUrl(t){this.servicesApiUrl=t}setHubUrl(t){this.hubUrl=t}addServerUrlCallback(t){this.serverUrlCallbacks.push(t)}}const ht=new qr;let pa,fa;function zr(n){pa=n}function Gr(n){fa=n}function se(){return pa?new pa().window:(console.log("DOM constructor is not registered. Assuming browser environment. If not, please register DOM constructor before calling this function."),window)}function it(n,t){if(!fa){if(typeof window<"u"&&window.fetch)return window.fetch(n,t);if(typeof global<"u"&&global.fetch)return global.fetch(n,t);throw new Error("Fetch implementation is not registered. Please register it before calling this function.")}return fa(n,t)}const Yn=new Map,dn=new Map,un=new Map,Jn=async n=>{const t=dn.get(n);if(t)return t;const a=(async()=>{const i=await it(n);return Yn.set(n,i.headers?.get("content-type")||""),await i.arrayBuffer()})();return dn.set(n,a),a},jr=async n=>{const t=un.get(n);if(t)return t;const a=(async()=>await(await it(n)).text())();return un.set(n,a),a},Vt=n=>n.every(t=>t!=="undefined"),fe=n=>Vt([typeof document])?document.createElement(n):se().document.createElement(n),Hr=(n,t)=>{if(Vt([typeof document]))return document.createElementNS(n,t);const a=se().document.createElement(t);return a.setAttribute("xmlns",n),a},ct=()=>{if(Vt([typeof DOMParser]))return new DOMParser;const n=se();return new n.DOMParser},Wr=()=>Vt([typeof DOMParser])?DOMParser:se().DOMParser,$e=(n,t)=>new Promise((e,a)=>{t?Jn(n).then(e).catch(a):it(n).then(i=>{i.arrayBuffer().then(e).catch(a)}).catch(i=>{a(i)})}),et=(n,t)=>new Promise((e,a)=>{t?jr(n).then(e).catch(a):it(n).then(i=>{i.text().then(e).catch(a)}).catch(a)}),Kn=n=>xr.renderToStaticMarkup(n),_e=new Map,Yr=async(n,t)=>{if(Vt([typeof FontFace])){if(_e.has(t))return _e.get(t);const e=n.names.fullName.en,a=new FontFace(e,`url(${t})`);document.fonts.add(a);const i=a.load();return _e.set(t,i),i}},Et=()=>{if(Vt([typeof XMLSerializer]))return new XMLSerializer;const n=se();return new n.XMLSerializer},An=n=>btoa(n),Ue=n=>{function t(){const a=new Uint8Array(n),i=4;if(a.length>=i){const r=new Array(i);for(let l=0;l<i;l++)r[l]=new Uint8Array(n)[l].toString(16);const o=r.join("").toUpperCase();switch(o){case"89504E47":return"image/png";case"47494638":return"image/gif";case"25504446":return"application/pdf";case"504B0304":return"application/zip"}switch(o.slice(0,4)){case"FFD8":return"image/jpeg"}}return null}const e=t();return e||"image/svg+xml"},Jr=async n=>{const t=await Jn(n),e=Yn.get(n)||Ue(t);return await Xr(new Blob([t],{type:e}))},Kr=n=>{let t="";const e=n.byteLength;for(let a=0;a<e;a++)t+=String.fromCharCode(n[a]);return t},_r=async n=>{const t=Ue(n),e=new Uint8Array(n),a=Kr(e),i=btoa(a);return`data:${t};base64,${i}`},Ve=n=>`data:image/svg+xml;base64,${btoa(n)}`,_n=n=>{const t=n.replace(/\r?\n/g,""),e=t.indexOf(",");if(e===-1||e<=4)throw new TypeError("malformed data: URI");const a=t.substring(5,e).split(";");let i=!1;for(let o=1;o<a.length;o++)a[o]==="base64"&&(i=!0);const r=decodeURI(t.substring(e+1));return i?new Uint8Array(atob(r).split("").map(s=>s.charCodeAt(0))).buffer:new Uint8Array(r.split("").map(s=>s.charCodeAt(0))).buffer},Xr=n=>new Promise((t,e)=>{const a=new FileReader;a.onload=function(i){const r=i.target;!r||!r.result?e():t(r.result.toString())},a.readAsDataURL(n)});let Zr,Qa;const to=n=>{Qa=n},eo=()=>Qa;let Xn;const Zn=n=>{Xn=n},ao=()=>new Promise(n=>{const t=ht.getHubUrl(),e=a=>{a.origin===t&&(window.removeEventListener("message",e),n(a.data))};window.parent!==window&&(window.addEventListener("message",e,!1),window.parent.postMessage("ready",t))}),no=async()=>{const n={applicationKey:Qa,customerToken:Zr,bearer:Xn};return typeof window<"u"&&(window.location.href.includes("/workflows/product/")||window.location.href.includes("hub=true"))?{...await ao(),...n}:n};async function io(n,t){const e=ht.getServerUrl(),a=e.includes(".aumelbdev.spiffcommerce.com")?"https://moonlight.aumelbdev.spiffcommerce.com":e.includes(".us.spiffcommerce.com")?"https://moonlight.us.spiffcommerce.com":"https://moonlight.au.spiffcommerce.com";let i=await it(n,{...t,redirect:"manual"});return(i.type==="opaqueredirect"||i.status===307)&&(typeof n!="string"&&"url"in n?i=await it({...n,url:`${a}/graphql`},t):i=await it(`${a}/graphql`,t)),i}class ro{constructor(){this.shadowGraphqlClient=this.constructShadowGraphqlClient(),ht.addServerUrlCallback(()=>{this.shadowGraphqlClient=this.constructShadowGraphqlClient()})}setSpiffCommerceClient(t){this.spiffClient=t,this.shadowGraphqlClient=this.constructShadowGraphqlClient()}getShadowGraphqlClient(){return this.shadowGraphqlClient}constructShadowGraphqlClient(){const t=C.createHttpLink({uri:`${ht.getServerUrl()}/graphql`,fetch:io}),e=Br.setContext(async(r,o)=>{const{headers:s}=o,l=s||{},c=await no();let d=o.bearer??c.bearer,u=!1;if(this.spiffClient){try{d=await this.spiffClient.loggedInBearerToken()}catch{}try{o.skipIntegrationCheck||(u=await this.spiffClient.getBetaEnabled())}catch{}}const A=o.partnerId??c.partnerId,h=o.activeIntegration??c.activeIntegration,g=o.transactionOwnerId,p=o.customerToken??c.customerToken,m=o.applicationKey??c.applicationKey,f=o.bundleOwnerId;try{if(window&&window.__SENTRY__){const y=window.__SENTRY__.hub;if(y){const w=y.traceHeaders();Object.entries(w).forEach(([F,b])=>{l[F]=b})}}}catch{}return d&&(l.Authorization=`Bearer ${d}`),A&&(l.partnerId=A),h&&(l.activeIntegration=h),g&&(l.transactionOwnerId=g),p&&(l.customerToken=p),m&&(l["X-Application-Key"]=m),f&&(l.bundleOwnerId=f),u&&(l["X-Spiff-Beta"]="true"),l["Allow-Moonlight-Redirect"]="true",{headers:l}}),a=Pr.onError(({operation:r,graphQLErrors:o,networkError:s})=>{const l=o||[],c=r.getContext();s&&!c?.fetchOptions?.signal?.aborted&&console.log("GraphQL Network error"),l.forEach(()=>console.log("GraphQL Error: "+r.operationName))}),i=Fr.removeTypenameFromVariables();return new C.ApolloClient({link:C.from([i,a,e,t]),cache:new C.InMemoryCache,name:"Core"})}}const S=new ro;let Ca,wa;const yt=(n,t,e)=>{if(Ca!==void 0)return Ca(n,t,e);try{const a=ti(!0);return Oa(a),a.createCanvas(n,t,e)}catch{throw new Error("Canvas module not set")}},le=(n,t)=>{if(wa!==void 0)return wa(n,t);try{const e=ti(!0);return Oa(e),e.loadImage(n,t)}catch{throw new Error("Canvas module not set")}};function Oa(n){Ca=n?.createCanvas,wa=n?.loadImage}function ti(n){try{if(document.createElement("canvas").getContext("2d"))return{createCanvas:(e,a,i)=>{const r=document.createElement("canvas");return e!=null&&(r.width=e),a!=null&&(r.height=a),r},loadImage:(e,a)=>new Promise((i,r)=>{const o=document.createElement("img");a!==!1&&(o.crossOrigin="Anonymous"),o.onload=()=>{i(o)},o.onerror=r,o.src=e})}}catch(t){throw t}}let Xe;function Ra(){return Xe===void 0&&(Xe=Wr()),Xe}let Ce=null;const oo=n=>new Promise(t=>{if(Ue(n)!=="image/jpeg")return t(1);Dr.orientation(n).then(a=>t(a||1)).catch(()=>t(1))}),so=async()=>{if(Ce!==null)return!Ce;const t=await le("data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAIAAwMBEQACEQEDEQH/xABRAAEAAAAAAAAAAAAAAAAAAAAKEAEBAQADAQEAAAAAAAAAAAAGBQQDCAkCBwEBAAAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AG8T9NfSMEVMhQvoP3fFiRZ+MTHDifa/95OFSZU5OzRzxkyejv8ciEfhSceSXGjS8eSdLnZc2HDm4M3BxcXwH/9k=");return Ce=t.width===2&&t.height===3,!Ce},lo=n=>{const e=n.naturalWidth/n.naturalHeight;return n.naturalHeight<=8192&&n.naturalWidth<=8192?[n.naturalWidth,n.naturalHeight]:n.naturalHeight>n.naturalWidth?[e*8192,8192]:[8192,8192/e]},co=async n=>{const t=await _r(n),e=await le(t),[a,i]=lo(e);if(!await so()){const u=yt(a,i);return u.getContext("2d")?.drawImage(e,0,0,a,i),u}const o=await oo(n),[s,l]=o>4?[i,a]:[a,i],c=yt(s,l),d=c.getContext("2d");switch(o){case 2:d.translate(s,0),d.scale(-1,1);break;case 3:d.translate(s,l),d.rotate(Math.PI);break;case 4:d.translate(0,l),d.scale(1,-1);break;case 5:d.rotate(-.5*Math.PI),d.scale(-1,1);break;case 6:d.rotate(-.5*Math.PI),d.translate(-s,0);break;case 7:d.rotate(-.5*Math.PI),d.translate(-s,l),d.scale(1,-1);break;case 8:d.rotate(.5*Math.PI),d.translate(0,-l);break}return d.drawImage(e,0,0,s,l),c},ce=async n=>{const t=await co(n);return Ue(n)==="image/jpeg"?{dataUrl:t.toDataURL("image/jpeg",1),height:t.height,width:t.width}:{dataUrl:t.toDataURL(),height:t.height,width:t.width}},ne=["Yellow C","Yellow 012 C","Orange 021 C","Warm Red C","Red 032 C","Rubine Red C","Rhodamine Red C","Purple C","Violet C","Blue 072 C","Reflex Blue C","Process Blue C","Green C","Black C","Yellow 0131 C","Red 0331 C","Magenta 0521 C","Violet 0631 C","Blue 0821 C","Green 0921 C","Black 0961 C","801 C","802 C","803 C","804 C","805 C","806 C","807 C","871 C","872 C","873 C","874 C","875 C","876 C","877 C","Medium Yellow C","Bright Orange C","Bright Red C","Strong Red C","Pink C","Medium Purple C","Dark Blue C","Medium Blue C","Bright Green C","Neutral Black C","100 C","101 C","102 C","103 C","104 C","105 C","7401 C","7402 C","7403 C","7404 C","7405 C","7406 C","7407 C","106 C","107 C","108 C","109 C","110 C","111 C","112 C","113 C","114 C","115 C","116 C","117 C","118 C","119 C","127 C","128 C","129 C","130 C","131 C","132 C","133 C","1205 C","1215 C","1225 C","1235 C","1245 C","1255 C","1265 C","120 C","121 C","122 C","123 C","124 C","125 C","126 C","7548 C","7549 C","7550 C","7551 C","7552 C","7553 C","7554 C","7555 C","7556 C","7557 C","7558 C","7559 C","7560 C","7561 C","134 C","135 C","136 C","137 C","138 C","139 C","140 C","1345 C","1355 C","1365 C","1375 C","1385 C","1395 C","1405 C","141 C","142 C","143 C","144 C","145 C","146 C","147 C","7408 C","7409 C","7410 C","7411 C","7412 C","7413 C","7414 C","7562 C","7563 C","7564 C","7565 C","7566 C","7567 C","7568 C","7569 C","7570 C","7571 C","7572 C","7573 C","7574 C","7575 C","712 C","713 C","714 C","715 C","716 C","717 C","718 C","148 C","149 C","150 C","151 C","152 C","153 C","154 C","155 C","156 C","157 C","158 C","159 C","160 C","161 C","1485 C","1495 C","1505 C","1525 C","1535 C","1545 C","1555 C","1565 C","1575 C","1585 C","1595 C","1605 C","1615 C","162 C","163 C","164 C","165 C","166 C","167 C","168 C","7576 C","7577 C","7578 C","7579 C","7580 C","7581 C","7582 C","1625 C","1635 C","1645 C","1655 C","1665 C","1675 C","1685 C","169 C","170 C","171 C","172 C","173 C","174 C","175 C","7583 C","7584 C","7585 C","7586 C","7587 C","7588 C","7589 C","7590 C","7591 C","7592 C","7593 C","7594 C","7595 C","7596 C","7597 C","7598 C","7599 C","7600 C","7601 C","7602 C","7603 C","7604 C","7605 C","7606 C","7607 C","7608 C","7609 C","7610 C","7611 C","7612 C","7613 C","7614 C","7615 C","7616 C","7617 C","7520 C","7521 C","7522 C","7523 C","7524 C","7525 C","7526 C","489 C","488 C","487 C","486 C","485 C","484 C","483 C","176 C","177 C","178 C","179 C","180 C","181 C","1765 C","1775 C","1785 C","1788 C","1795 C","1805 C","1815 C","1767 C","1777 C","1787 C","1797 C","1807 C","1817 C","7618 C","7619 C","7620 C","7621 C","7622 C","7623 C","7624 C","7625 C","7626 C","7627 C","7628 C","7629 C","7630 C","7631 C","7415 C","7416 C","7417 C","7418 C","7419 C","7420 C","7421 C","182 C","183 C","184 C","185 C","186 C","187 C","188 C","196 C","197 C","198 C","199 C","200 C","201 C","202 C","189 C","190 C","191 C","192 C","193 C","194 C","195 C","1895 C","1905 C","1915 C","1925 C","1935 C","1945 C","1955 C","705 C","706 C","707 C","708 C","709 C","710 C","711 C","698 C","699 C","700 C","701 C","702 C","703 C","704 C","203 C","204 C","205 C","206 C","207 C","208 C","209 C","210 C","211 C","212 C","213 C","214 C","215 C","216 C","7422 C","7423 C","7424 C","7425 C","7426 C","7427 C","7428 C","7632 C","7633 C","7634 C","7635 C","7636 C","7637 C","7638 C","217 C","218 C","219 C","220 C","221 C","222 C","7639 C","7640 C","7641 C","7642 C","7643 C","7644 C","7645 C","223 C","224 C","225 C","226 C","227 C","228 C","229 C","230 C","231 C","232 C","233 C","234 C","235 C","670 C","671 C","672 C","673 C","674 C","675 C","676 C","677 C","678 C","679 C","680 C","681 C","682 C","683 C","684 C","685 C","686 C","687 C","688 C","689 C","690 C","510 C","509 C","508 C","507 C","506 C","505 C","504 C","7429 C","7430 C","7431 C","7432 C","7433 C","7434 C","7435 C","691 C","692 C","693 C","694 C","695 C","696 C","697 C","496 C","495 C","494 C","493 C","492 C","491 C","490 C","503 C","502 C","501 C","500 C","499 C","498 C","497 C","5035 C","5025 C","5015 C","5005 C","4995 C","4985 C","4975 C","236 C","237 C","238 C","239 C","240 C","241 C","242 C","2365 C","2375 C","2385 C","2395 C","2405 C","2415 C","2425 C","243 C","244 C","245 C","246 C","247 C","248 C","249 C","7646 C","7647 C","7648 C","7649 C","7650 C","7651 C","7652 C","250 C","251 C","252 C","253 C","254 C","255 C","517 C","516 C","515 C","514 C","513 C","512 C","511 C","7436 C","7437 C","7438 C","7439 C","7440 C","7441 C","7442 C","2562 C","2572 C","2582 C","2592 C","2602 C","2612 C","2622 C","7653 C","7654 C","7655 C","7656 C","7657 C","7658 C","7659 C","524 C","523 C","522 C","521 C","520 C","519 C","518 C","5245 C","5235 C","5225 C","5215 C","5205 C","5195 C","5185 C","5175 C","5165 C","5155 C","5145 C","5135 C","5125 C","5115 C","531 C","530 C","529 C","528 C","527 C","526 C","525 C","256 C","257 C","258 C","259 C","260 C","261 C","262 C","2563 C","2573 C","2583 C","2593 C","2603 C","2613 C","2623 C","7660 C","7661 C","7662 C","7663 C","7664 C","7665 C","7666 C","2567 C","2577 C","2587 C","2597 C","2607 C","2617 C","2627 C","263 C","264 C","265 C","266 C","267 C","268 C","269 C","2635 C","2645 C","2655 C","2665 C","2685 C","2695 C","270 C","271 C","272 C","273 C","274 C","275 C","276 C","2705 C","2715 C","2725 C","2735 C","2745 C","2755 C","2765 C","7667 C","7668 C","7669 C","7670 C","7671 C","7672 C","7673 C","7443 C","7444 C","7445 C","7446 C","7447 C","7448 C","7449 C","7674 C","7675 C","7676 C","7677 C","7678 C","7679 C","7680 C","663 C","664 C","665 C","666 C","667 C","668 C","669 C","5315 C","5305 C","5295 C","5285 C","5275 C","5265 C","5255 C","538 C","537 C","536 C","535 C","534 C","533 C","532 C","7541 C","7542 C","7543 C","7544 C","7545 C","7546 C","7547 C","552 C","551 C","550 C","549 C","548 C","547 C","546 C","5455 C","5445 C","5435 C","5425 C","5415 C","5405 C","5395 C","642 C","643 C","644 C","645 C","646 C","647 C","648 C","649 C","650 C","651 C","652 C","653 C","654 C","655 C","656 C","657 C","658 C","659 C","660 C","661 C","662 C","7450 C","7451 C","7452 C","7453 C","7454 C","7455 C","7456 C","2706 C","2716 C","2726 C","2736 C","2746 C","2756 C","2766 C","2708 C","2718 C","2728 C","2738 C","2748 C","2758 C","2768 C","2707 C","2717 C","2727 C","2747 C","2757 C","2767 C","277 C","278 C","279 C","280 C","281 C","282 C","283 C","284 C","285 C","286 C","287 C","288 C","289 C","7681 C","7682 C","7683 C","7684 C","7685 C","7686 C","7687 C","545 C","544 C","543 C","542 C","541 C","540 C","539 C","290 C","291 C","292 C","293 C","294 C","295 C","296 C","2905 C","2915 C","2925 C","2935 C","2945 C","2955 C","2965 C","297 C","298 C","299 C","300 C","301 C","302 C","303 C","7688 C","7689 C","7690 C","7691 C","7692 C","7693 C","7694 C","2975 C","2985 C","2995 C","3005 C","3015 C","3025 C","3035 C","7695 C","7696 C","7697 C","7698 C","7699 C","7700 C","7701 C","7457 C","7458 C","7459 C","7460 C","7461 C","7462 C","7463 C","304 C","305 C","306 C","307 C","308 C","309 C","635 C","636 C","637 C","638 C","639 C","640 C","641 C","7702 C","7703 C","7704 C","7705 C","7706 C","7707 C","7708 C","628 C","629 C","630 C","631 C","632 C","633 C","634 C","310 C","311 C","312 C","313 C","314 C","315 C","316 C","3105 C","3115 C","3125 C","3135 C","3145 C","3155 C","3165 C","7709 C","7710 C","7711 C","7712 C","7713 C","7714 C","7715 C","317 C","318 C","319 C","320 C","321 C","322 C","323 C","7464 C","7465 C","7466 C","7467 C","7468 C","7469 C","7470 C","7471 C","7472 C","7473 C","7474 C","7475 C","7476 C","7477 C","5523 C","5513 C","5503 C","5493 C","5483 C","5473 C","5463 C","7716 C","7717 C","7718 C","7719 C","7720 C","7721 C","7722 C","324 C","325 C","326 C","327 C","328 C","329 C","330 C","3242 C","3252 C","3262 C","3272 C","3282 C","3292 C","3302 C","3245 C","3255 C","3265 C","3275 C","3285 C","3295 C","3305 C","3248 C","3258 C","3268 C","3278 C","3288 C","3298 C","3308 C","566 C","565 C","564 C","563 C","562 C","561 C","560 C","573 C","572 C","571 C","570 C","569 C","568 C","567 C","559 C","558 C","557 C","556 C","555 C","554 C","553 C","5595 C","5585 C","5575 C","5565 C","5555 C","5545 C","5535 C","5665 C","5655 C","5645 C","5635 C","5625 C","5615 C","5605 C","5527 C","5517 C","5507 C","5497 C","5487 C","5477 C","5467 C","621 C","622 C","623 C","624 C","625 C","626 C","627 C","331 C","332 C","333 C","334 C","335 C","336 C","337 C","338 C","339 C","340 C","341 C","342 C","343 C","7723 C","7724 C","7725 C","7726 C","7727 C","7728 C","7729 C","3375 C","3385 C","3395 C","3405 C","3415 C","3425 C","3435 C","344 C","345 C","346 C","347 C","348 C","349 C","350 C","351 C","352 C","353 C","354 C","355 C","356 C","357 C","7478 C","7479 C","7480 C","7481 C","7482 C","7483 C","7484 C","7730 C","7731 C","7732 C","7733 C","7734 C","7735 C","7736 C","7737 C","7738 C","7739 C","7740 C","7741 C","7742 C","7743 C","358 C","359 C","360 C","361 C","362 C","363 C","364 C","7485 C","7486 C","7487 C","7488 C","7489 C","7490 C","7491 C","365 C","366 C","367 C","368 C","369 C","370 C","371 C","372 C","373 C","374 C","375 C","376 C","377 C","378 C","580 C","579 C","578 C","577 C","576 C","575 C","574 C","5807 C","5797 C","5787 C","5777 C","5767 C","5757 C","5747 C","5875 C","5865 C","5855 C","5845 C","5835 C","5825 C","5815 C","5803 C","5793 C","5783 C","5773 C","5763 C","5753 C","5743 C","7492 C","7493 C","7494 C","7495 C","7496 C","7497 C","7498 C","7744 C","7745 C","7746 C","7747 C","7748 C","7749 C","7750 C","379 C","380 C","381 C","382 C","383 C","384 C","385 C","386 C","387 C","388 C","389 C","390 C","391 C","392 C","587 C","586 C","585 C","584 C","583 C","582 C","581 C","393 C","394 C","395 C","396 C","397 C","398 C","399 C","3935 C","3945 C","3955 C","3965 C","3975 C","3985 C","3995 C","600 C","601 C","602 C","603 C","604 C","605 C","606 C","607 C","608 C","609 C","610 C","611 C","612 C","613 C","461 C","460 C","459 C","458 C","457 C","456 C","455 C","614 C","615 C","616 C","617 C","618 C","619 C","620 C","7751 C","7752 C","7753 C","7754 C","7755 C","7756 C","7757 C","7758 C","7759 C","7760 C","7761 C","7762 C","7763 C","7764 C","7765 C","7766 C","7767 C","7768 C","7769 C","7770 C","7771 C","4545 C","4535 C","4525 C","4515 C","4505 C","4495 C","4485 C","454 C","453 C","452 C","451 C","450 C","449 C","448 C","7499 C","7500 C","7501 C","7502 C","7503 C","7504 C","7505 C","468 C","467 C","466 C","465 C","464 C","463 C","462 C","7506 C","7507 C","7508 C","7509 C","7510 C","7511 C","7512 C","719 C","720 C","721 C","722 C","723 C","724 C","725 C","475 C","474 C","473 C","472 C","471 C","470 C","469 C","726 C","727 C","728 C","729 C","730 C","731 C","732 C","4685 C","4675 C","4665 C","4655 C","4645 C","4635 C","4625 C","7513 C","7514 C","7515 C","7516 C","7517 C","7518 C","7519 C","4755 C","4745 C","4735 C","4725 C","4715 C","4705 C","4695 C","482 C","481 C","480 C","479 C","478 C","477 C","476 C","7527 C","7528 C","7529 C","7530 C","7531 C","7532 C","7533 C","7534 C","7535 C","7536 C","7537 C","7538 C","7539 C","7540 C","427 C","428 C","429 C","430 C","431 C","432 C","433 C","420 C","421 C","422 C","423 C","424 C","425 C","426 C","441 C","442 C","443 C","444 C","445 C","446 C","447 C","413 C","414 C","415 C","416 C","417 C","418 C","419 C","400 C","401 C","402 C","403 C","404 C","405 C","406 C","407 C","408 C","409 C","410 C","411 C","412 C","434 C","435 C","436 C","437 C","438 C","439 C","440 C","Warm Gray 1 C","Warm Gray 2 C","Warm Gray 3 C","Warm Gray 4 C","Warm Gray 5 C","Warm Gray 6 C","Warm Gray 7 C","Warm Gray 8 C","Warm Gray 9 C","Warm Gray 10 C","Warm Gray 11 C","Cool Gray 1 C","Cool Gray 2 C","Cool Gray 3 C","Cool Gray 4 C","Cool Gray 5 C","Cool Gray 6 C","Cool Gray 7 C","Cool Gray 8 C","Cool Gray 9 C","Cool Gray 10 C","Cool Gray 11 C","Black 2 C","Black 3 C","Black 4 C","Black 5 C","Black 6 C","Black 7 C"],$t=["FEDD00","FFD700","FE5000","F9423A","EF3340","CE0058","E10098","BB29BB","440099","10069F","001489","0085CA","00AB84","2D2926","F2F0A1","FCAEBB","F1B2DC","BF9BDE","74D1EA","9DE7D7","9E978E","009ACE","44D62C","FFE900","FFAA4D","FF7276","FF3EB5","EA27C2","84754E","85714D","866D4B","8B6F4E","87674F","8B634B","8A8D8F","FFD900","FF5E00","F93822","CE0056","D62598","4E008E","00239C","0084CA","00B08B","222223","F6EB61","F7EA48","FCE300","C5A900","AF9800","897A27","F5E1A4","ECD898","EED484","F4DA40","F2CD00","F1C400","CBA052","F9E547","FBE122","FEDB00","FFD100","DAAA00","AA8A00","9C8412","FAE053","FBDD40","FDDA24","FFCD00","C99700","AC8400","897322","F3DD6D","F3D54E","F3D03E","F2A900","CC8A00","A07400","6C571B","F8E08E","FBD872","FFC845","FFB81C","C69214","AD841F","886B25","FBDB65","FDD757","FED141","FFC72C","EAAA00","B58500","9A7611","FFC600","FFB500","D19000","B47E00","73531D","5A4522","4B3D2A","D29F13","B78B20","9F7D23","967126","8F6A2A","7D622E","6C5D34","FDD26E","FFC658","FFBF3F","FFA300","DE7C00","AF6D04","74531C","FDD086","FFC56E","FFB549","FF9E1B","D57800","996017","6E4C1E","F2C75C","F1BE48","F1B434","ED8B00","CF7F00","A76D11","715C2A","F6BE00","F0B323","FEAD77","E6A65D","D38235","DC8633","C16C18","BD9B60","D69A2D","DB8A06","CD7925","AD6433","89532F","775135","D78825","D3832B","C67D30","B67233","A7662B","9E6A38","835D32","FCC89B","FDBE87","FDAA63","F68D2E","EA7600","D45D00","BE4D00","FECB8B","FFC27B","FFB25B","FF8200","E57200","BE6A14","9B5A1A","EFD19F","EFBE7D","ECA154","E87722","CB6015","A1561C","603D20","FFAE62","FF8F1C","FF6900","B94700","94450B","653819","FFB990","FFA06A","FF7F32","FF6A13","D86018","A65523","8B4720","FFBE9F","FF9D6E","FF7F41","FF671F","E35205","BE531C","73381D","DB864E","E07E3C","DC6B2F","DC582A","C05131","864A33","674736","FFA38B","FF8D6D","FF6A39","FC4C02","DC4405","A9431E","833921","FFB3AB","FF8674","FF5C39","FA4616","CF4520","963821","6B3529","C4622D","BA5826","AF5C37","9E5330","924C2E","7B4D35","5C4738","D4B59E","C07D59","B15533","9D432C","7C3A2D","6B3D2E","5C3D31","D14124","BD472A","B33D26","8D3F2B","83412C","7B4931","674230","E4D5D3","E1BBB4","D6938A","C26E60","A4493D","823B34","683431","DDBCB0","CA9A8E","BC8A7E","A37F74","866761","6B4C4C","583D3E","EABEB0","C09C83","B46A55","AB5C57","A45248","9A6A4F","8A391B","ECC3B2","ECBAA8","EAA794","E8927C","DA291C","9A3324","653024","FFB1BB","FF808B","FF585D","E03C31","BE3A34","81312F","FFA3B5","FF8DA1","F8485E","EE2737","D22630","AF272F","7C2529","FCAFC0","FB637E","F4364C","CB333B","A4343A","643335","C66E4E","C04C36","B7312C","AB2328","93272C","8A2A2B","802F2D","E1523D","C63527","A72B2A","9E2A2B","6D3332","633231","572D2D","E6BAA8","E56A54","E04E39","CD545B","B04A5A","9B2242","651D32","FABBCB","FC9BB3","F65275","E4002B","C8102E","A6192E","76232F","ECC7CD","E89CAE","DF4661","D50032","BA0C2F","9D2235","862633","F8A3BC","F67599","EF426F","E40046","BF0D3E","9B2743","782F40","F5B6CD","F59BBB","EF4A81","E0004D","C5003E","A6093D","8A1538","F5DADF","F7CED7","F9B5C4","F890A5","EF6079","E03E52","CB2C30","F2D4D7","F4C3CC","F2ACB9","E68699","D25B73","B83A4B","9E2A2F","ECB3CB","E782A9","E0457B","CE0037","A50034","861F41","6F263D","F99FC9","F57EB6","F04E98","E31C79","CE0F69","AC145A","7D2248","F4CDD4","E06287","E24585","B52555","A4123F","971B2F","6A2C3E","D6C9CA","C4A4A7","C16784","C63663","BC204B","912F46","7E2D40","EABEDB","E56DB1","DA1884","A50050","910048","6C1D45","936D73","934054","8E2C48","732E4A","672E45","582D40","502B3A","EF95CF","EB6FBD","DF1995","D0006F","AA0061","890C58","672146","F4A6D7","F277C6","E93CAC","C6007E","A20067","840B55","EAD3E2","E6BCD8","DFA0C9","D986BA","C6579A","AE2573","960051","E5CEDB","E3C8D8","DEBED2","C996B6","B06C96","994878","7C2855","E4C6D4","DCB6C9","D0A1BA","BE84A3","A76389","893B67","612141","EBBECB","E8B3C3","E4A9BB","D592AA","84344E","6F2C3F","572932","E2BCCB","DCA9BF","C9809E","B55C80","A73A64","9B3259","872651","E9CDD0","E4BEC3","D7A3AB","C48490","B46B7A","984856","893C47","F2C6CF","F1BDC8","E9A2B2","DC8699","8F3237","7F3035","5D2A2C","E9C4C7","E5BAC1","DAA5AD","C6858F","7A3E3A","6A3735","512F2E","DFC2C3","DBB7BB","CCA1A6","B07C83","9C6169","874B52","3F2021","F1A7DC","EC86D0","E45DBF","DB3EB1","C5299B","AF1685","80225F","EFBAE1","E277CD","D539B5","C800A1","B0008E","9E007E","830065","EAB8E4","E59BDC","DD7FD3","C724B1","BB16A3","A51890","80276C","A56E87","A83D72","991E66","8A1B61","722257","6A2A5B","5E2751","E7BAE4","DD9CDF","C964CF","AD1AAC","981D97","72246C","EBC6DF","E6BEDD","E2ACD7","D48BC8","93328E","833177","612C51","EEDAEA","CCAED0","D59ED7","B288B9","A277A6","9F5CC0","963CBD","D7A9E3","C98BDB","AC4FC6","9B26B6","87189D","772583","653165","948794","A2789C","A15A95","8E3A80","6E2B62","6A3460","5D3754","D5C2D8","C9B1D0","BA9CC5","A57FB2","642F6C","59315F","4B3048","DBCDD3","D0BEC7","C6B0BC","AF95A6","86647A","66435A","4A3041","D8C8D1","D3C0CD","BFA5B8","9B7793","7E5475","693C5E","512A44","DFC8E7","D7B9E4","CAA2DD","B580D1","8031A7","702F8A","572C5F","D6BFDD","C6A1CF","8C4799","6D2077","642667","5D285F","51284F","CBA3D8","B884CB","A05EB5","84329B","702082","671E75","5F2167","9991A4","8D6E97","7A4183","6B3077","653279","5E366E","5C4E63","C1A0DA","A77BCA","8246AF","5C068C","500778","470A68","3C1053","D7C6E6","C1A7E2","9063CD","753BBD","5F259F","582C83","512D6D","C5B4E3","AD96DC","9678D3","7D55C7","330072","2E1A47","B4B5DF","9595D2","7474C1","24135F","211551","201747","221C35","A7A4E0","8B84D7","685BC7","2E008B","280071","250E62","201547","6E7CA0","686E9F","615E9B","565294","514689","4C4184","535486","DDDAE8","B6B8DC","A7A2C3","8986CA","5D4777","4B384C","41273B","878CB4","7C7FAB","7566A0","6F5091","68478D","563D82","523178","E5E1E6","E0DBE3","C6BCD0","A192B2","7C6992","614B79","3F2A56","D8D7DF","C6C4D2","B3B0C4","8D89A5","595478","403A60","1E1A34","C5CFDA","BBC7D6","A2B2C8","8E9FBC","1B365D","1F2A44","1C1F2A","D9E1E2","A4BCC2","98A4AE","768692","425563","253746","131E29","B9D3DC","A3C7D2","8DB9CA","6BA4B8","003D4C","00313C","072B31","BFCED6","B7C9D3","A6BBC8","7A99AC","5B7F95","4F758B","081F2C","D1DDE6","C6D6E3","9BB8D3","7DA1C4","5E8AB4","236192","002E5D","DBE2E9","CED9E5","A7BCD6","7D9BC1","326295","003A70","002554","DDE5ED","C8D8EB","B1C9E8","7BA4DB","407EC9","003594","001A70","BDC5DB","89ABE3","8094DD","7BA6DE","5F8FB4","3A5DAE","606EB2","CBD3EB","9FAEE5","485CC7","1E22AA","171C8F","151F6D","141B4D","B8CCEA","5C88DA","0047BB","06038D","001871","001E62","071D49","C3D7EE","A7C6ED","307FE2","001A72","001E60","13294B","ABCAE9","8BB8E8","418FDE","012169","00205B","041E42","92C1E9","6CACE4","0072CE","0033A0","003087","002D72","0C2340","94A9CB","6787B7","426DA9","385E9D","2C5697","1D4F91","1D428A","C6DAE7","BDD6E6","A4C8E1","7BAFD4","003C71","003057","00263A","B9D9EB","9BCBEB","69B3E7","003DA5","002F6C","002855","041C2C","8DC8E8","62B5E5","009CDE","0057B8","004C97","003865","00263E","71C5E8","41B6E6","00A3E0","005EB8","004B87","003B5C","002A3A","4698CB","298FC2","0076A8","006298","005587","004976","01426A","99D6EA","5BC2E7","00A9E0","0077C8","00629B","004F71","003E51","7BA7BC","6399AE","4E87A0","41748D","34657F","165C7D","005776","BBDDE6","71B2C9","4298B5","0086BF","007DBA","00558C","002B49","9ADBE8","59CBE8","00B5E2","006BA6","00587C","003B49","A4DBE8","8BD3E6","4EC3E0","00AFD7","0095C8","0082BA","0067A0","48A9C5","009CBD","0085AD","007096","006A8E","00617F","005670","B8DDE1","9BD3DD","77C5D5","3EB1C8","0093B2","007396","005F83","6AD1E3","05C3DE","00A9CE","0092BC","007FA3","00677F","004851","68D2DF","00C1D5","00AEC7","008EAA","00778B","006272","004F59","63B1BC","00A7B5","0097A9","00859B","007D8A","007680","006269","B1E4E3","88DBDF","2DCCD3","009CA6","008C95","007377","005F61","A0D1CA","40C1AC","00B0B9","00A3AD","007398","005F86","005A70","7EDDD3","5CB8B2","279989","007681","487A7B","0D5257","244C5A","B6CFD0","ABC7CA","94B7BB","7FA9AE","4F868E","115E67","07272D","00968F","00857D","007672","006D68","00635B","005E5D","005151","9CDBD9","64CCC9","00B2A9","008675","007367","00685E","00534C","71DBD4","2AD2C9","00BFB3","00A499","008578","00594F","004C45","7CE0D3","2CD5C4","00C7B1","00B398","009681","007864","004E42","6DCDB8","49C5B1","00AB8E","009B77","008264","006A52","034638","B9DCD2","A1D6CA","86C8BC","6BBBAE","006F62","00594C","1D3C34","B5E3D8","A5DFD3","98DBCE","6BCABA","00816D","006C5B","173F35","ADCAB8","9ABEAA","85B09A","6FA287","28724F","205C40","284734","BFCEC2","A7BDB1","92ACA0","7F9C90","5C7F71","43695B","183028","BAC5B9","B0BDB0","A3B2A4","94A596","708573","5E7461","22372B","BCC9C5","B1C0BC","9DB0AC","829995","5D7975","3E5D58","18332F","D1E0D7","B7CDC2","9AB9AD","789F90","507F70","285C4D","13322B","A7E6D7","8CE2D0","3CDBC0","009775","007B5F","00664F","8FD6BD","6ECEB2","00B388","00965E","007A53","006747","115740","50A684","00966C","008755","007B4B","006F44","006845","005844","7AE1BF","47D7AC","00C389","00AF66","007749","006341","154734","A0DAB3","91D6AC","71CC98","009A44","00843D","046A38","2C5234","A2E4B8","8FE2B0","80E0A7","00B140","009639","007A33","215732","9BE3BF","26D07C","00BF6F","00B74F","009F4D","275D38","00573F","4B9560","228848","007A3E","007041","286140","36573B","395542","6BA539","48A23F","319B42","3A913F","44883E","4A773C","44693D","ADDC91","A1D884","6CC24A","43B02A","509E2F","4C8C2B","4A7729","D0DEBB","BCE194","8EDD65","78D64B","74AA50","719949","79863C","C2E189","B7DD79","A4D65E","78BE20","64A70B","658D1B","546223","D4EB8E","CDEA80","C5E86C","97D700","84BD00","7A9A01","59621D","C4D6A4","BCD19B","B7CE95","A9C47F","789D4A","67823A","4E5B31","D0D1AB","C6C89B","BABD8B","A2A569","8A8D4A","6D712E","3D441E","D2CE9E","CBC793","C0BB87","AFA96E","A09958","89813D","555025","C3C6A8","B3B995","A3AA83","899064","737B4C","5E6738","3E4827","BFCC80","BBC592","9CAF88","8F993E","76881D","7A7256","5B6236","BABC16","ABAD23","999B30","888D30","7C8034","727337","656635","E2E868","DBE442","CEDC00","C4D600","A8AD00","949300","787121","E9EC6B","E3E935","E0E721","D0DF00","B5BD00","9A9500","827A04","E3E48D","E0E27C","DBDE70","D2D755","B7BF10","8E8C13","625D20","F0EC74","EDE939","ECE81A","E1E000","BFB800","ADA400","A09200","F3EA5D","F3E500","EFDF00","EEDC00","BBA600","9A8700","685C20","F1EB9C","F0E991","F0E87B","EDE04B","EADA24","E1CD00","CFB500","EBE49A","E9E186","E6DE77","E1D555","D7C826","C4B000","B39B00","E9DF97","E4D77E","DECD63","D9C756","B89D18","A28E2A","695B24","DCD59A","D6CF8D","D0C883","C0B561","AC9F3C","9F912A","8A7B19","CAB64B","CFB023","C1A01E","A08629","897630","736635","675E33","D4C304","C4B200","91852C","747136","5D6439","585C3B","535435","BBB323","B4A91F","AA9D2E","8F7E35","716135","635939","4E4934","D5CB9F","CFC493","C5B783","B3A369","998542","8C7732","614F25","CAC7A7","BFBB98","B0AA7E","9B945F","594A25","524727","4A412A","F1E6B2","DFD1A7","D9C89E","CEB888","A89968","94795D","816040","DDCBA4","D3BC8D","C6AA76","B9975B","8B5B29","744F28","5C462B","EFDBB2","FCD299","E1B87F","D6A461","C6893F","B77729","A6631B","EDC8A3","E7B78A","DDA46F","C88242","B36924","934D11","7D3F16","F3CFB3","F1C6A7","F0BF9B","E59E6D","B86125","A45A2A","693F23","E0C09F","D9B48F","CDA077","B58150","9E652E","774212","623412","E0C6AD","DCBFA6","CDA788","BF9474","AD7C59","946037","4F2C1D","E1B7A7","D5A286","C58B68","99552B","85431E","6D4F47","5E4B3C","D7C4B7","CDB5A7","C0A392","AE8A79","956C58","7C4D3A","5B3427","DBC8B6","D3BBA8","C6A992","AA8066","703F2A","623B2A","4E3629","D6D2C4","C5B9AC","B7A99A","A39382","7A6855","63513D","473729","D1CCBD","B7B09C","A69F88","A7ACA2","949A90","8E9089","4B4F54","D0D3D4","C1C6C8","A2AAAD","7C878E","5B6770","333F48","1D252D","C7C9C7","B2B4B2","9EA2A2","898D8D","707372","54585A","25282A","BEC6C4","A2ACAB","919D9D","717C7D","505759","3F4444","373A36","BABBB1","A8A99E","919388","7E7F74","65665C","51534A","212322","C4BFB6","AFA9A0","9D968D","8C857B","776E64","696158","C4BCB7","B2A8A2","978C87","857874","746661","5E514D","382F2D","D0C4C5","C1B2B6","AB989D","7B6469","584446","453536","382E2C","D7D2CB","CBC4BC","BFB8AF","B6ADA5","ACA39A","A59C94","968C83","8C8279","83786F","796E65","6E6259","D9D9D6","D0D0CE","C8C9C7","BBBCBC","B1B3B3","A7A8AA","97999B","888B8D","75787B","63666A","53565A","332F21","212721","31261D","3E2B2E","101820","3D3935"],Ze=$t.map(n=>[parseInt(n.substring(0,2),16),parseInt(n.substring(2,4),16),parseInt(n.substring(4,6),16)]);function uo(n){const t=ne.indexOf(n);return t>=0?$t[t]:""}function ei(n){const t=$t.indexOf(n);return t>=0?ne[t]:""}function Ao(n,t=64){const e=[],a=[],i=ei(n);i&&e.push({pms:i,hex:n,distance:0});const r=parseInt(n.substring(0,2),16),o=parseInt(n.substring(2,4),16),s=parseInt(n.substring(4,6),16);let l,c,d;for(let u=0;u<$t.length;u++){l=Ze[u][0],c=Ze[u][1],d=Ze[u][2];const A=Math.sqrt(Math.pow(r-l,2)+Math.pow(o-c,2)+Math.pow(s-d,2));a.push(A)}for(let u=0;u<a.length;u++)a[u]<=t&&!e.some(A=>A.pms===ne[u])&&e.push({pms:ne[u],hex:$t[u],distance:a[u]});return e.sort((u,A)=>u.distance-A.distance)}const ho=ne.map((n,t)=>({pms:n,hex:$t[t]})),go=new kr(ho,{keys:["pms"]});function mo(n,t){return go.search(n,t?{limit:t}:void 0)}let Lt=null;function ai(n){if(n.startsWith("#"))return hn(n);if(!document)throw new Error("browserColorToHex is only supported on browsers");if(Lt||(Lt=document.createElement("canvas").getContext("2d")),!Lt)throw new Error("Failed to create canvas context required to convert colors");Lt.fillStyle=n;const t=hn(Lt.fillStyle);return t||console.error(`Unknown browser color ${n}`),t}function hn(n){const t=n.substring(1).toUpperCase();return t.length===6?t:t.length===3?`${t[0]}${t[0]}${t[1]}${t[1]}${t[2]}${t[2]}`:""}const we=n=>{const t=ni(n.spotColor);return t?`${n.browserValue} ${t}`:n.browserValue},ni=n=>{if(!n)return"";if(n.profileName.includes("/")&&n.profileName.includes(".icc")){const t=n.profileName.replace(/\s/g,"-"),e=t.lastIndexOf("/");return`icc-named-color(${t.slice(e+1).slice(0,-4)}, ${n.namedColor})`}return`icc-named-color(${n.profileName}, ${n.namedColor})`},ya=n=>{const t=n.split(/[ ](?=[^)]*?(?:\(|$))/);if(t.length===0)return{browserValue:"#000000"};if(t.length===1)return{browserValue:t[0]};const e=t[1].match(/\(([^)]+)\)/gm);if(!e)throw new Error("Unhandled state of color value in SVG");const a=e[0].replace(/[() ]/g,"").split(",");return{browserValue:t[0],spotColor:{profileName:a[0],namedColor:a[1]}}},po=["altGlyph","circle","ellipse","path","polygon","polyline","rect","text","textPath","tref","tspan"],fo=["fill","stroke"],Ut=(n,t)=>{t(n),n.children.length>0&&Array.from(n.children).forEach(e=>Ut(e,t))},ii=(n,t)=>{const e=t(n);if(e)return e;const a=n.parentElement;if(a)return ii(a,t)},Co=(n,t)=>{try{return n.matches(t)}catch{return n.classList.contains(t.substring(1))}},Le=(n,t=!1)=>{!t&&n.setAttribute("preserveAspectRatio","none");const e=[];Ut(n,a=>{if(a.tagName==="script"){a.remove();return}if(a.tagName==="style"){try{Rn.parse(a.innerHTML).stylesheet?.rules.forEach(o=>{e.push(o)}),a.remove()}catch(r){console.error(r)}return}const i=a.attributes.getNamedItem("style")?.value?.trim();if(i){const r=[];i.split(";").forEach(s=>{const l=s.trim();if(l){const[c,d]=l.split(":"),u=c.toLowerCase();fo.indexOf(u)>-1?a.setAttribute(u,d.trim()):r.push(l)}}),r.length>0?a.setAttribute("style",r.join(";")):a.removeAttribute("style")}}),Ut(n,a=>{e.forEach(i=>{i.selectors?.forEach(r=>{Co(a,r)&&i.declarations?.forEach(o=>{o.property&&o.value&&a.setAttribute(o.property,o.value)})})})})},wo=n=>{const t=/pt|pc|mm|cm|in/gm,e=n.getAttribute("viewBox"),a=n.getAttribute("width"),i=n.getAttribute("height");if(!e)throw new Error("viewBox not specified on SVG!");a&&n.setAttribute("width",a.replace(t,"")),i&&n.setAttribute("height",i.replace(t,""))},ri=n=>ct().parseFromString(n,"image/svg+xml").firstElementChild,yo=(n,t,e)=>{n.setAttribute("height",`${e}px`),n.setAttribute("width",`${t}px`)},oi=(n,t,e)=>{Ut(n,a=>{const i=a.attributes.getNamedItem("fill");i&&i.value!=="none"&&a.classList.forEach(o=>{if(o.startsWith("spiff-fill")){const s=t[o.replace("spiff-fill-","")];if(s)a.setAttribute("fill",e?we(s):s.browserValue);else{const l=t[o];l&&a.setAttribute("fill",e?we(l):l.browserValue)}}});const r=a.attributes.getNamedItem("stroke");r&&r.value!=="none"&&a.classList.forEach(o=>{if(o.startsWith("spiff-stroke")){const s=t[o.replace("spiff-stroke-","")];if(s)a.setAttribute("stroke",e?we(s):s.browserValue);else{const l=t[o];l&&a.setAttribute("fill",e?we(l):l.browserValue)}}})})},si=n=>Et().serializeToString(n),$a=(n,t,e,a,i)=>{const r=ri(n);if(!r)throw new Error("Failed to read SVG.");return yo(r,t,e),oi(r,a,i),si(r)},qe=(n,t,e)=>{const a=ri(n);if(!a)throw new Error("Failed to read SVG.");return oi(a,t,e),si(a)},So=n=>{const t=/<svg.*<\/svg>/s,e=n.match(t)||[],a=e?.length>0?e[0]:"";return ct().parseFromString(a,"image/svg+xml")},rt=async n=>{const e=So(n).firstElementChild;if(!e)throw new Error("Failed to read SVG.");Le(e);const a={};Ut(e,o=>{if(po.includes(o.tagName)&&!o.attributes.getNamedItem("fill")){let c="black";const d=o.parentElement;if(d){const u=ii(d,A=>{const g=A.style.fill;if(g)return g;const p=A.getAttribute("fill");if(p)return p});u&&(c=u)}o.setAttribute("fill",c)}const s=o.attributes.getNamedItem("fill");if(s&&s.value!=="none"&&!s.value.startsWith("url(")){const c=ya(s.value),d=c.browserValue.replace(/\W/g,""),u=`spiff-fill-${d}`;o.setAttribute("fill",c.browserValue),o.classList.add(u),a[d]=c}const l=o.attributes.getNamedItem("stroke");if(l&&l.value!=="none"&&!l.value.startsWith("url(")){const c=ya(l.value),d=c.browserValue.replace(/\W/g,""),u=`spiff-stroke-${d}`;o.classList.add(u),o.setAttribute("stroke",c.browserValue),a[d]=c}});const r=Et().serializeToString(e);return{colors:a,svg:r}},vo=C.gql`
1
+ "use strict";var yr=Object.create;var sn=Object.defineProperty;var Sr=Object.getOwnPropertyDescriptor;var vr=Object.getOwnPropertyNames;var Er=Object.getPrototypeOf,br=Object.prototype.hasOwnProperty;var Ir=(n,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of vr(t))!br.call(n,i)&&i!==e&&sn(n,i,{get:()=>t[i],enumerable:!(a=Sr(t,i))||a.enumerable});return n};var Br=(n,t,e)=>(e=n!=null?yr(Er(n)):{},Ir(t||!n||!n.__esModule?sn(e,"default",{value:n,enumerable:!0}):e,n));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C=require("@apollo/client/core"),Pr=require("@apollo/client/link/context"),xr=require("@apollo/client/link/error"),Fr=require("preact-render-to-string"),Dr=require("@apollo/client/link/remove-typename"),kr=require("exifr/dist/mini.umd.cjs"),Rn=require("css"),Mr=require("fuse.js"),Ma=require("pith"),ha=require("lodash.chunk"),Pt=require("lodash.clonedeep"),B=require("preact/jsx-runtime"),ga=require("opentype.js"),Tr=require("html-entities"),Nr=require("handlebars"),Qr=require("data-uri-to-buffer"),pe=require("@aws-sdk/client-cognito-identity-provider"),Or=require("dinero.js"),Rr=require("currency-codes"),$n=require("lodash.debounce"),te=require("lodash.isequal"),ma=require("unicode-default-word-boundary"),Un=require("qrcode"),$r=require("svg-path-bbox");require("fs");require("path");const Ur=require("lodash.omit");function Vr(n){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const e in n)if(e!=="default"){const a=Object.getOwnPropertyDescriptor(n,e);Object.defineProperty(t,e,a.get?a:{enumerable:!0,get:()=>n[e]})}}return t.default=n,Object.freeze(t)}const ln=Vr(Rr);var ee=(n=>(n.Data="Data",n.Font="Font",n.Frame="Frame",n.Illustration="Illustration",n.Image="Image",n.Model="Model",n.Material="Material",n.Color="Color",n.QuestionnaireCollateral="QuestionnaireCollateral",n.RequestCollateral="RequestCollateral",n.SignupCollateral="SignupCollateral",n.Video="Video",n.ColorProfile="ColorProfile",n.Environment="Environment",n))(ee||{}),Vn=(n=>(n.AND="AND",n.OR="OR",n))(Vn||{}),q=(n=>(n.FileUpload="FileUpload",n.Option="Option",n.ColorOption="ColorOption",n.Text="Text",n))(q||{}),E=(n=>(n.Information="Information",n.Bulk="Bulk",n.DigitalContent="DigitalContent",n.Finish="Finish",n.Frame="Frame",n.Illustration="Illustration",n.Introduction="Introduction",n.Material="Material",n.Model="Model",n.Module="Module",n.Picture="Picture",n.Photo="Photo",n.ProductOverlay="ProductOverlay",n.Question="Question",n.Shape="Shape",n.SilentIllustration="SilentIllustration",n.Text="Text",n))(E||{}),Ln=(n=>(n.Color="Color",n.Colors="Colors",n.Selection="Selection",n.Selections="Selections",n.Text="Text",n.Upload="Upload",n))(Ln||{}),Ot=(n=>(n.ThreeD="ThreeD",n.FreeDesign="FreeDesign",n.Print="Print",n))(Ot||{}),D=(n=>(n.Frame="frame",n.Group="group",n.Image="image",n.Pattern="pattern",n.Illustration="illustration",n.Textbox="textbox",n))(D||{}),qn=(n=>(n.Default="Default",n.FirstTransaction="FirstTransaction",n.OneToOne="OneToOne",n))(qn||{}),Ta=(n=>(n.Pending="Pending",n.Failed="Failed",n.Validated="Validated",n.Overridden="Overridden",n))(Ta||{}),zn=(n=>(n.Hyperlink="Hyperlink",n.Edit="Edit",n.Approve="Approve",n))(zn||{}),Gn=(n=>(n.Hub="Hub",n.Shopify="Shopify",n))(Gn||{}),Oe=(n=>(n.BackgroundRemover="BackgroundRemover",n.ConversionAccelerator="Conversion Accelerator",n.ProcessBuilder="ProcessBuilder",n))(Oe||{}),jn=(n=>(n[n.Orbit=0]="Orbit",n[n.Pan=1]="Pan",n))(jn||{}),Na=(n=>(n.Owner="Owner",n.Approver="Approver",n.Editor="Editor",n.Viewer="Viewer",n))(Na||{}),xt=(n=>(n.Autosize="Autosize",n.Traditional="Traditional",n))(xt||{}),H=(n=>(n[n.North=0]="North",n[n.Northeast=1]="Northeast",n[n.East=2]="East",n[n.Southeast=3]="Southeast",n[n.South=4]="South",n[n.Southwest=5]="Southwest",n[n.West=6]="West",n[n.Northwest=7]="Northwest",n))(H||{}),Hn=(n=>(n.Pixel="px",n.Millimeter="mm",n.Centimeter="cm",n))(Hn||{});class Wn extends Error{constructor(t){super(t),this.name=this.constructor.name}}class oe extends Wn{constructor(t){super(`ConfigurationError - ${t}`)}}class ae extends oe{constructor(t){super(`Option not Configured: ${t.stepTitle}`),this.optionId=t?.optionId||"N/A"}}class Y extends oe{constructor(t){super(`Panel not Found: ${t.panelId}`),this.panelId=t?.panelId||"N/A"}}class wt extends oe{constructor(t){super(`Asset not found for variant: ${t.name}`),this.variant=t}}class Rt extends oe{constructor(t){super(`Resource not found for asset: ${t.name}`),this.asset=t}}class lt extends oe{constructor(t,e){super(`Workflow Misconfiguration: ${t.stepName} - ${e}`),this.step=t}}class Re extends Wn{constructor(t){super(`ImplementationError - ${t}`)}}class O extends Re{constructor(t){super(`Unhandled Behavior Encountered: ${t}`)}}class It extends Re{constructor(t){super(`Parsing Error: ${t}`)}}class ft extends Re{constructor(t){super(`Client Error: ${t}`)}}class $e extends Re{constructor(t){super(`Resource Generation Failed: ${t}`)}}class Lr{get(t){return localStorage.getItem(t)||void 0}set(t,e){localStorage.setItem(t,e)}remove(t){localStorage.removeItem(t)}getMap(t){const e=this.get(t);if(e)return new Map(JSON.parse(e))}setMap(t,e){const a=JSON.stringify([...e.entries()]);this.set(t,a)}}class cn{constructor(){this.storage=new Map}get(t){return this.storage.get(t)||void 0}set(t,e){this.storage.set(t,e)}remove(t){this.storage.delete(t)}getMap(t){const e=this.get(t);if(e)return new Map(JSON.parse(e))}setMap(t,e){const a=JSON.stringify([...e.entries()]);this.set(t,a)}}const qr=()=>{try{return localStorage?new Lr:new cn}catch{return console.warn("Local storage was unavilable due to browser security settings. Using in-memory storage instead."),new cn}},Q=qr();class zr{constructor(){this.defaultServerUrl="https://api.au.spiffcommerce.com",this.defaultServicesApiUrl="https://services.au.spiffcommerce.com",this.defaultHubUrl="https://hub.au.spiffcommerce.com",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(e=>e())}setServicesApiUrl(t){this.servicesApiUrl=t}setHubUrl(t){this.hubUrl=t}addServerUrlCallback(t){this.serverUrlCallbacks.push(t)}}const ht=new zr;let pa,fa;function Gr(n){pa=n}function jr(n){fa=n}function se(){return pa?new pa().window:(console.log("DOM constructor is not registered. Assuming browser environment. If not, please register DOM constructor before calling this function."),window)}function it(n,t){if(!fa){if(typeof window<"u"&&window.fetch)return window.fetch(n,t);if(typeof global<"u"&&global.fetch)return global.fetch(n,t);throw new Error("Fetch implementation is not registered. Please register it before calling this function.")}return fa(n,t)}const Yn=new Map,dn=new Map,un=new Map,Jn=async n=>{const t=dn.get(n);if(t)return t;const a=(async()=>{const i=await it(n);return Yn.set(n,i.headers?.get("content-type")||""),await i.arrayBuffer()})();return dn.set(n,a),a},Hr=async n=>{const t=un.get(n);if(t)return t;const a=(async()=>await(await it(n)).text())();return un.set(n,a),a},Vt=n=>n.every(t=>t!=="undefined"),fe=n=>Vt([typeof document])?document.createElement(n):se().document.createElement(n),Wr=(n,t)=>{if(Vt([typeof document]))return document.createElementNS(n,t);const a=se().document.createElement(t);return a.setAttribute("xmlns",n),a},ct=()=>{if(Vt([typeof DOMParser]))return new DOMParser;const n=se();return new n.DOMParser},Yr=()=>Vt([typeof DOMParser])?DOMParser:se().DOMParser,Ue=(n,t)=>new Promise((e,a)=>{t?Jn(n).then(e).catch(a):it(n).then(i=>{i.arrayBuffer().then(e).catch(a)}).catch(i=>{a(i)})}),et=(n,t)=>new Promise((e,a)=>{t?Hr(n).then(e).catch(a):it(n).then(i=>{i.text().then(e).catch(a)}).catch(a)}),Kn=n=>Fr.renderToStaticMarkup(n),Xe=new Map,Jr=async(n,t)=>{if(Vt([typeof FontFace])){if(Xe.has(t))return Xe.get(t);const e=n.names.fullName.en,a=new FontFace(e,`url(${t})`);document.fonts.add(a);const i=a.load();return Xe.set(t,i),i}},Et=()=>{if(Vt([typeof XMLSerializer]))return new XMLSerializer;const n=se();return new n.XMLSerializer},An=n=>btoa(n),Ve=n=>{function t(){const a=new Uint8Array(n),i=4;if(a.length>=i){const r=new Array(i);for(let l=0;l<i;l++)r[l]=new Uint8Array(n)[l].toString(16);const o=r.join("").toUpperCase();switch(o){case"89504E47":return"image/png";case"47494638":return"image/gif";case"25504446":return"application/pdf";case"504B0304":return"application/zip"}switch(o.slice(0,4)){case"FFD8":return"image/jpeg"}}return null}const e=t();return e||"image/svg+xml"},Kr=async n=>{const t=await Jn(n),e=Yn.get(n)||Ve(t);return await Zr(new Blob([t],{type:e}))},_r=n=>{let t="";const e=n.byteLength;for(let a=0;a<e;a++)t+=String.fromCharCode(n[a]);return t},Xr=async n=>{const t=Ve(n),e=new Uint8Array(n),a=_r(e),i=btoa(a);return`data:${t};base64,${i}`},Le=n=>`data:image/svg+xml;base64,${btoa(n)}`,_n=n=>{const t=n.replace(/\r?\n/g,""),e=t.indexOf(",");if(e===-1||e<=4)throw new TypeError("malformed data: URI");const a=t.substring(5,e).split(";");let i=!1;for(let o=1;o<a.length;o++)a[o]==="base64"&&(i=!0);const r=decodeURI(t.substring(e+1));return i?new Uint8Array(atob(r).split("").map(s=>s.charCodeAt(0))).buffer:new Uint8Array(r.split("").map(s=>s.charCodeAt(0))).buffer},Zr=n=>new Promise((t,e)=>{const a=new FileReader;a.onload=function(i){const r=i.target;!r||!r.result?e():t(r.result.toString())},a.readAsDataURL(n)});let to,Qa;const eo=n=>{Qa=n},ao=()=>Qa;let Xn;const Zn=n=>{Xn=n},no=()=>new Promise(n=>{const t=ht.getHubUrl(),e=a=>{a.origin===t&&(window.removeEventListener("message",e),n(a.data))};window.parent!==window&&(window.addEventListener("message",e,!1),window.parent.postMessage("ready",t))}),io=async()=>{const n={applicationKey:Qa,customerToken:to,bearer:Xn};return typeof window<"u"&&(window.location.href.includes("/workflows/product/")||window.location.href.includes("hub=true"))?{...await no(),...n}:n};async function ro(n,t){const e=ht.getServerUrl(),a=e.includes(".aumelbdev.spiffcommerce.com")?"https://moonlight.aumelbdev.spiffcommerce.com":e.includes(".us.spiffcommerce.com")?"https://moonlight.us.spiffcommerce.com":"https://moonlight.au.spiffcommerce.com";let i=await it(n,{...t,redirect:"manual"});return(i.type==="opaqueredirect"||i.status===307)&&(typeof n!="string"&&"url"in n?i=await it({...n,url:`${a}/graphql`},t):i=await it(`${a}/graphql`,t)),i}class oo{constructor(){this.shadowGraphqlClient=this.constructShadowGraphqlClient(),ht.addServerUrlCallback(()=>{this.shadowGraphqlClient=this.constructShadowGraphqlClient()})}setSpiffCommerceClient(t){this.spiffClient=t,this.shadowGraphqlClient=this.constructShadowGraphqlClient()}getShadowGraphqlClient(){return this.shadowGraphqlClient}constructShadowGraphqlClient(){const t=C.createHttpLink({uri:`${ht.getServerUrl()}/graphql`,fetch:ro}),e=Pr.setContext(async(r,o)=>{const{headers:s}=o,l=s||{},c=await io();let d=o.bearer??c.bearer,u=!1;if(this.spiffClient){try{d=await this.spiffClient.loggedInBearerToken()}catch{}try{o.skipIntegrationCheck||(u=await this.spiffClient.getBetaEnabled())}catch{}}const A=o.partnerId??c.partnerId,h=o.activeIntegration??c.activeIntegration,g=o.transactionOwnerId,p=o.customerToken??c.customerToken,m=o.applicationKey??c.applicationKey,f=o.bundleOwnerId;try{if(window&&window.__SENTRY__){const y=window.__SENTRY__.hub;if(y){const w=y.traceHeaders();Object.entries(w).forEach(([F,b])=>{l[F]=b})}}}catch{}return d&&(l.Authorization=`Bearer ${d}`),A&&(l.partnerId=A),h&&(l.activeIntegration=h),g&&(l.transactionOwnerId=g),p&&(l.customerToken=p),m&&(l["X-Application-Key"]=m),f&&(l.bundleOwnerId=f),u&&(l["X-Spiff-Beta"]="true"),l["Allow-Moonlight-Redirect"]="true",{headers:l}}),a=xr.onError(({operation:r,graphQLErrors:o,networkError:s})=>{const l=o||[],c=r.getContext();s&&!c?.fetchOptions?.signal?.aborted&&console.log("GraphQL Network error"),l.forEach(()=>console.log("GraphQL Error: "+r.operationName))}),i=Dr.removeTypenameFromVariables();return new C.ApolloClient({link:C.from([i,a,e,t]),cache:new C.InMemoryCache,name:"Core"})}}const S=new oo;let Ca,wa;const yt=(n,t,e)=>{if(Ca!==void 0)return Ca(n,t,e);try{const a=ti(!0);return Oa(a),a.createCanvas(n,t,e)}catch{throw new Error("Canvas module not set")}},le=(n,t)=>{if(wa!==void 0)return wa(n,t);try{const e=ti(!0);return Oa(e),e.loadImage(n,t)}catch{throw new Error("Canvas module not set")}};function Oa(n){Ca=n?.createCanvas,wa=n?.loadImage}function ti(n){try{if(document.createElement("canvas").getContext("2d"))return{createCanvas:(e,a,i)=>{const r=document.createElement("canvas");return e!=null&&(r.width=e),a!=null&&(r.height=a),r},loadImage:(e,a)=>new Promise((i,r)=>{const o=document.createElement("img");a!==!1&&(o.crossOrigin="Anonymous"),o.onload=()=>{i(o)},o.onerror=r,o.src=e})}}catch(t){throw t}}let Ze;function Ra(){return Ze===void 0&&(Ze=Yr()),Ze}let Ce=null;const so=n=>new Promise(t=>{if(Ve(n)!=="image/jpeg")return t(1);kr.orientation(n).then(a=>t(a||1)).catch(()=>t(1))}),lo=async()=>{if(Ce!==null)return!Ce;const t=await le("data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAIAAwMBEQACEQEDEQH/xABRAAEAAAAAAAAAAAAAAAAAAAAKEAEBAQADAQEAAAAAAAAAAAAGBQQDCAkCBwEBAAAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AG8T9NfSMEVMhQvoP3fFiRZ+MTHDifa/95OFSZU5OzRzxkyejv8ciEfhSceSXGjS8eSdLnZc2HDm4M3BxcXwH/9k=");return Ce=t.width===2&&t.height===3,!Ce},co=n=>{const e=n.naturalWidth/n.naturalHeight;return n.naturalHeight<=8192&&n.naturalWidth<=8192?[n.naturalWidth,n.naturalHeight]:n.naturalHeight>n.naturalWidth?[e*8192,8192]:[8192,8192/e]},uo=async n=>{const t=await Xr(n),e=await le(t),[a,i]=co(e);if(!await lo()){const u=yt(a,i);return u.getContext("2d")?.drawImage(e,0,0,a,i),u}const o=await so(n),[s,l]=o>4?[i,a]:[a,i],c=yt(s,l),d=c.getContext("2d");switch(o){case 2:d.translate(s,0),d.scale(-1,1);break;case 3:d.translate(s,l),d.rotate(Math.PI);break;case 4:d.translate(0,l),d.scale(1,-1);break;case 5:d.rotate(-.5*Math.PI),d.scale(-1,1);break;case 6:d.rotate(-.5*Math.PI),d.translate(-s,0);break;case 7:d.rotate(-.5*Math.PI),d.translate(-s,l),d.scale(1,-1);break;case 8:d.rotate(.5*Math.PI),d.translate(0,-l);break}return d.drawImage(e,0,0,s,l),c},ce=async n=>{const t=await uo(n);return Ve(n)==="image/jpeg"?{dataUrl:t.toDataURL("image/jpeg",1),height:t.height,width:t.width}:{dataUrl:t.toDataURL(),height:t.height,width:t.width}},ne=["Yellow C","Yellow 012 C","Orange 021 C","Warm Red C","Red 032 C","Rubine Red C","Rhodamine Red C","Purple C","Violet C","Blue 072 C","Reflex Blue C","Process Blue C","Green C","Black C","Yellow 0131 C","Red 0331 C","Magenta 0521 C","Violet 0631 C","Blue 0821 C","Green 0921 C","Black 0961 C","801 C","802 C","803 C","804 C","805 C","806 C","807 C","871 C","872 C","873 C","874 C","875 C","876 C","877 C","Medium Yellow C","Bright Orange C","Bright Red C","Strong Red C","Pink C","Medium Purple C","Dark Blue C","Medium Blue C","Bright Green C","Neutral Black C","100 C","101 C","102 C","103 C","104 C","105 C","7401 C","7402 C","7403 C","7404 C","7405 C","7406 C","7407 C","106 C","107 C","108 C","109 C","110 C","111 C","112 C","113 C","114 C","115 C","116 C","117 C","118 C","119 C","127 C","128 C","129 C","130 C","131 C","132 C","133 C","1205 C","1215 C","1225 C","1235 C","1245 C","1255 C","1265 C","120 C","121 C","122 C","123 C","124 C","125 C","126 C","7548 C","7549 C","7550 C","7551 C","7552 C","7553 C","7554 C","7555 C","7556 C","7557 C","7558 C","7559 C","7560 C","7561 C","134 C","135 C","136 C","137 C","138 C","139 C","140 C","1345 C","1355 C","1365 C","1375 C","1385 C","1395 C","1405 C","141 C","142 C","143 C","144 C","145 C","146 C","147 C","7408 C","7409 C","7410 C","7411 C","7412 C","7413 C","7414 C","7562 C","7563 C","7564 C","7565 C","7566 C","7567 C","7568 C","7569 C","7570 C","7571 C","7572 C","7573 C","7574 C","7575 C","712 C","713 C","714 C","715 C","716 C","717 C","718 C","148 C","149 C","150 C","151 C","152 C","153 C","154 C","155 C","156 C","157 C","158 C","159 C","160 C","161 C","1485 C","1495 C","1505 C","1525 C","1535 C","1545 C","1555 C","1565 C","1575 C","1585 C","1595 C","1605 C","1615 C","162 C","163 C","164 C","165 C","166 C","167 C","168 C","7576 C","7577 C","7578 C","7579 C","7580 C","7581 C","7582 C","1625 C","1635 C","1645 C","1655 C","1665 C","1675 C","1685 C","169 C","170 C","171 C","172 C","173 C","174 C","175 C","7583 C","7584 C","7585 C","7586 C","7587 C","7588 C","7589 C","7590 C","7591 C","7592 C","7593 C","7594 C","7595 C","7596 C","7597 C","7598 C","7599 C","7600 C","7601 C","7602 C","7603 C","7604 C","7605 C","7606 C","7607 C","7608 C","7609 C","7610 C","7611 C","7612 C","7613 C","7614 C","7615 C","7616 C","7617 C","7520 C","7521 C","7522 C","7523 C","7524 C","7525 C","7526 C","489 C","488 C","487 C","486 C","485 C","484 C","483 C","176 C","177 C","178 C","179 C","180 C","181 C","1765 C","1775 C","1785 C","1788 C","1795 C","1805 C","1815 C","1767 C","1777 C","1787 C","1797 C","1807 C","1817 C","7618 C","7619 C","7620 C","7621 C","7622 C","7623 C","7624 C","7625 C","7626 C","7627 C","7628 C","7629 C","7630 C","7631 C","7415 C","7416 C","7417 C","7418 C","7419 C","7420 C","7421 C","182 C","183 C","184 C","185 C","186 C","187 C","188 C","196 C","197 C","198 C","199 C","200 C","201 C","202 C","189 C","190 C","191 C","192 C","193 C","194 C","195 C","1895 C","1905 C","1915 C","1925 C","1935 C","1945 C","1955 C","705 C","706 C","707 C","708 C","709 C","710 C","711 C","698 C","699 C","700 C","701 C","702 C","703 C","704 C","203 C","204 C","205 C","206 C","207 C","208 C","209 C","210 C","211 C","212 C","213 C","214 C","215 C","216 C","7422 C","7423 C","7424 C","7425 C","7426 C","7427 C","7428 C","7632 C","7633 C","7634 C","7635 C","7636 C","7637 C","7638 C","217 C","218 C","219 C","220 C","221 C","222 C","7639 C","7640 C","7641 C","7642 C","7643 C","7644 C","7645 C","223 C","224 C","225 C","226 C","227 C","228 C","229 C","230 C","231 C","232 C","233 C","234 C","235 C","670 C","671 C","672 C","673 C","674 C","675 C","676 C","677 C","678 C","679 C","680 C","681 C","682 C","683 C","684 C","685 C","686 C","687 C","688 C","689 C","690 C","510 C","509 C","508 C","507 C","506 C","505 C","504 C","7429 C","7430 C","7431 C","7432 C","7433 C","7434 C","7435 C","691 C","692 C","693 C","694 C","695 C","696 C","697 C","496 C","495 C","494 C","493 C","492 C","491 C","490 C","503 C","502 C","501 C","500 C","499 C","498 C","497 C","5035 C","5025 C","5015 C","5005 C","4995 C","4985 C","4975 C","236 C","237 C","238 C","239 C","240 C","241 C","242 C","2365 C","2375 C","2385 C","2395 C","2405 C","2415 C","2425 C","243 C","244 C","245 C","246 C","247 C","248 C","249 C","7646 C","7647 C","7648 C","7649 C","7650 C","7651 C","7652 C","250 C","251 C","252 C","253 C","254 C","255 C","517 C","516 C","515 C","514 C","513 C","512 C","511 C","7436 C","7437 C","7438 C","7439 C","7440 C","7441 C","7442 C","2562 C","2572 C","2582 C","2592 C","2602 C","2612 C","2622 C","7653 C","7654 C","7655 C","7656 C","7657 C","7658 C","7659 C","524 C","523 C","522 C","521 C","520 C","519 C","518 C","5245 C","5235 C","5225 C","5215 C","5205 C","5195 C","5185 C","5175 C","5165 C","5155 C","5145 C","5135 C","5125 C","5115 C","531 C","530 C","529 C","528 C","527 C","526 C","525 C","256 C","257 C","258 C","259 C","260 C","261 C","262 C","2563 C","2573 C","2583 C","2593 C","2603 C","2613 C","2623 C","7660 C","7661 C","7662 C","7663 C","7664 C","7665 C","7666 C","2567 C","2577 C","2587 C","2597 C","2607 C","2617 C","2627 C","263 C","264 C","265 C","266 C","267 C","268 C","269 C","2635 C","2645 C","2655 C","2665 C","2685 C","2695 C","270 C","271 C","272 C","273 C","274 C","275 C","276 C","2705 C","2715 C","2725 C","2735 C","2745 C","2755 C","2765 C","7667 C","7668 C","7669 C","7670 C","7671 C","7672 C","7673 C","7443 C","7444 C","7445 C","7446 C","7447 C","7448 C","7449 C","7674 C","7675 C","7676 C","7677 C","7678 C","7679 C","7680 C","663 C","664 C","665 C","666 C","667 C","668 C","669 C","5315 C","5305 C","5295 C","5285 C","5275 C","5265 C","5255 C","538 C","537 C","536 C","535 C","534 C","533 C","532 C","7541 C","7542 C","7543 C","7544 C","7545 C","7546 C","7547 C","552 C","551 C","550 C","549 C","548 C","547 C","546 C","5455 C","5445 C","5435 C","5425 C","5415 C","5405 C","5395 C","642 C","643 C","644 C","645 C","646 C","647 C","648 C","649 C","650 C","651 C","652 C","653 C","654 C","655 C","656 C","657 C","658 C","659 C","660 C","661 C","662 C","7450 C","7451 C","7452 C","7453 C","7454 C","7455 C","7456 C","2706 C","2716 C","2726 C","2736 C","2746 C","2756 C","2766 C","2708 C","2718 C","2728 C","2738 C","2748 C","2758 C","2768 C","2707 C","2717 C","2727 C","2747 C","2757 C","2767 C","277 C","278 C","279 C","280 C","281 C","282 C","283 C","284 C","285 C","286 C","287 C","288 C","289 C","7681 C","7682 C","7683 C","7684 C","7685 C","7686 C","7687 C","545 C","544 C","543 C","542 C","541 C","540 C","539 C","290 C","291 C","292 C","293 C","294 C","295 C","296 C","2905 C","2915 C","2925 C","2935 C","2945 C","2955 C","2965 C","297 C","298 C","299 C","300 C","301 C","302 C","303 C","7688 C","7689 C","7690 C","7691 C","7692 C","7693 C","7694 C","2975 C","2985 C","2995 C","3005 C","3015 C","3025 C","3035 C","7695 C","7696 C","7697 C","7698 C","7699 C","7700 C","7701 C","7457 C","7458 C","7459 C","7460 C","7461 C","7462 C","7463 C","304 C","305 C","306 C","307 C","308 C","309 C","635 C","636 C","637 C","638 C","639 C","640 C","641 C","7702 C","7703 C","7704 C","7705 C","7706 C","7707 C","7708 C","628 C","629 C","630 C","631 C","632 C","633 C","634 C","310 C","311 C","312 C","313 C","314 C","315 C","316 C","3105 C","3115 C","3125 C","3135 C","3145 C","3155 C","3165 C","7709 C","7710 C","7711 C","7712 C","7713 C","7714 C","7715 C","317 C","318 C","319 C","320 C","321 C","322 C","323 C","7464 C","7465 C","7466 C","7467 C","7468 C","7469 C","7470 C","7471 C","7472 C","7473 C","7474 C","7475 C","7476 C","7477 C","5523 C","5513 C","5503 C","5493 C","5483 C","5473 C","5463 C","7716 C","7717 C","7718 C","7719 C","7720 C","7721 C","7722 C","324 C","325 C","326 C","327 C","328 C","329 C","330 C","3242 C","3252 C","3262 C","3272 C","3282 C","3292 C","3302 C","3245 C","3255 C","3265 C","3275 C","3285 C","3295 C","3305 C","3248 C","3258 C","3268 C","3278 C","3288 C","3298 C","3308 C","566 C","565 C","564 C","563 C","562 C","561 C","560 C","573 C","572 C","571 C","570 C","569 C","568 C","567 C","559 C","558 C","557 C","556 C","555 C","554 C","553 C","5595 C","5585 C","5575 C","5565 C","5555 C","5545 C","5535 C","5665 C","5655 C","5645 C","5635 C","5625 C","5615 C","5605 C","5527 C","5517 C","5507 C","5497 C","5487 C","5477 C","5467 C","621 C","622 C","623 C","624 C","625 C","626 C","627 C","331 C","332 C","333 C","334 C","335 C","336 C","337 C","338 C","339 C","340 C","341 C","342 C","343 C","7723 C","7724 C","7725 C","7726 C","7727 C","7728 C","7729 C","3375 C","3385 C","3395 C","3405 C","3415 C","3425 C","3435 C","344 C","345 C","346 C","347 C","348 C","349 C","350 C","351 C","352 C","353 C","354 C","355 C","356 C","357 C","7478 C","7479 C","7480 C","7481 C","7482 C","7483 C","7484 C","7730 C","7731 C","7732 C","7733 C","7734 C","7735 C","7736 C","7737 C","7738 C","7739 C","7740 C","7741 C","7742 C","7743 C","358 C","359 C","360 C","361 C","362 C","363 C","364 C","7485 C","7486 C","7487 C","7488 C","7489 C","7490 C","7491 C","365 C","366 C","367 C","368 C","369 C","370 C","371 C","372 C","373 C","374 C","375 C","376 C","377 C","378 C","580 C","579 C","578 C","577 C","576 C","575 C","574 C","5807 C","5797 C","5787 C","5777 C","5767 C","5757 C","5747 C","5875 C","5865 C","5855 C","5845 C","5835 C","5825 C","5815 C","5803 C","5793 C","5783 C","5773 C","5763 C","5753 C","5743 C","7492 C","7493 C","7494 C","7495 C","7496 C","7497 C","7498 C","7744 C","7745 C","7746 C","7747 C","7748 C","7749 C","7750 C","379 C","380 C","381 C","382 C","383 C","384 C","385 C","386 C","387 C","388 C","389 C","390 C","391 C","392 C","587 C","586 C","585 C","584 C","583 C","582 C","581 C","393 C","394 C","395 C","396 C","397 C","398 C","399 C","3935 C","3945 C","3955 C","3965 C","3975 C","3985 C","3995 C","600 C","601 C","602 C","603 C","604 C","605 C","606 C","607 C","608 C","609 C","610 C","611 C","612 C","613 C","461 C","460 C","459 C","458 C","457 C","456 C","455 C","614 C","615 C","616 C","617 C","618 C","619 C","620 C","7751 C","7752 C","7753 C","7754 C","7755 C","7756 C","7757 C","7758 C","7759 C","7760 C","7761 C","7762 C","7763 C","7764 C","7765 C","7766 C","7767 C","7768 C","7769 C","7770 C","7771 C","4545 C","4535 C","4525 C","4515 C","4505 C","4495 C","4485 C","454 C","453 C","452 C","451 C","450 C","449 C","448 C","7499 C","7500 C","7501 C","7502 C","7503 C","7504 C","7505 C","468 C","467 C","466 C","465 C","464 C","463 C","462 C","7506 C","7507 C","7508 C","7509 C","7510 C","7511 C","7512 C","719 C","720 C","721 C","722 C","723 C","724 C","725 C","475 C","474 C","473 C","472 C","471 C","470 C","469 C","726 C","727 C","728 C","729 C","730 C","731 C","732 C","4685 C","4675 C","4665 C","4655 C","4645 C","4635 C","4625 C","7513 C","7514 C","7515 C","7516 C","7517 C","7518 C","7519 C","4755 C","4745 C","4735 C","4725 C","4715 C","4705 C","4695 C","482 C","481 C","480 C","479 C","478 C","477 C","476 C","7527 C","7528 C","7529 C","7530 C","7531 C","7532 C","7533 C","7534 C","7535 C","7536 C","7537 C","7538 C","7539 C","7540 C","427 C","428 C","429 C","430 C","431 C","432 C","433 C","420 C","421 C","422 C","423 C","424 C","425 C","426 C","441 C","442 C","443 C","444 C","445 C","446 C","447 C","413 C","414 C","415 C","416 C","417 C","418 C","419 C","400 C","401 C","402 C","403 C","404 C","405 C","406 C","407 C","408 C","409 C","410 C","411 C","412 C","434 C","435 C","436 C","437 C","438 C","439 C","440 C","Warm Gray 1 C","Warm Gray 2 C","Warm Gray 3 C","Warm Gray 4 C","Warm Gray 5 C","Warm Gray 6 C","Warm Gray 7 C","Warm Gray 8 C","Warm Gray 9 C","Warm Gray 10 C","Warm Gray 11 C","Cool Gray 1 C","Cool Gray 2 C","Cool Gray 3 C","Cool Gray 4 C","Cool Gray 5 C","Cool Gray 6 C","Cool Gray 7 C","Cool Gray 8 C","Cool Gray 9 C","Cool Gray 10 C","Cool Gray 11 C","Black 2 C","Black 3 C","Black 4 C","Black 5 C","Black 6 C","Black 7 C"],$t=["FEDD00","FFD700","FE5000","F9423A","EF3340","CE0058","E10098","BB29BB","440099","10069F","001489","0085CA","00AB84","2D2926","F2F0A1","FCAEBB","F1B2DC","BF9BDE","74D1EA","9DE7D7","9E978E","009ACE","44D62C","FFE900","FFAA4D","FF7276","FF3EB5","EA27C2","84754E","85714D","866D4B","8B6F4E","87674F","8B634B","8A8D8F","FFD900","FF5E00","F93822","CE0056","D62598","4E008E","00239C","0084CA","00B08B","222223","F6EB61","F7EA48","FCE300","C5A900","AF9800","897A27","F5E1A4","ECD898","EED484","F4DA40","F2CD00","F1C400","CBA052","F9E547","FBE122","FEDB00","FFD100","DAAA00","AA8A00","9C8412","FAE053","FBDD40","FDDA24","FFCD00","C99700","AC8400","897322","F3DD6D","F3D54E","F3D03E","F2A900","CC8A00","A07400","6C571B","F8E08E","FBD872","FFC845","FFB81C","C69214","AD841F","886B25","FBDB65","FDD757","FED141","FFC72C","EAAA00","B58500","9A7611","FFC600","FFB500","D19000","B47E00","73531D","5A4522","4B3D2A","D29F13","B78B20","9F7D23","967126","8F6A2A","7D622E","6C5D34","FDD26E","FFC658","FFBF3F","FFA300","DE7C00","AF6D04","74531C","FDD086","FFC56E","FFB549","FF9E1B","D57800","996017","6E4C1E","F2C75C","F1BE48","F1B434","ED8B00","CF7F00","A76D11","715C2A","F6BE00","F0B323","FEAD77","E6A65D","D38235","DC8633","C16C18","BD9B60","D69A2D","DB8A06","CD7925","AD6433","89532F","775135","D78825","D3832B","C67D30","B67233","A7662B","9E6A38","835D32","FCC89B","FDBE87","FDAA63","F68D2E","EA7600","D45D00","BE4D00","FECB8B","FFC27B","FFB25B","FF8200","E57200","BE6A14","9B5A1A","EFD19F","EFBE7D","ECA154","E87722","CB6015","A1561C","603D20","FFAE62","FF8F1C","FF6900","B94700","94450B","653819","FFB990","FFA06A","FF7F32","FF6A13","D86018","A65523","8B4720","FFBE9F","FF9D6E","FF7F41","FF671F","E35205","BE531C","73381D","DB864E","E07E3C","DC6B2F","DC582A","C05131","864A33","674736","FFA38B","FF8D6D","FF6A39","FC4C02","DC4405","A9431E","833921","FFB3AB","FF8674","FF5C39","FA4616","CF4520","963821","6B3529","C4622D","BA5826","AF5C37","9E5330","924C2E","7B4D35","5C4738","D4B59E","C07D59","B15533","9D432C","7C3A2D","6B3D2E","5C3D31","D14124","BD472A","B33D26","8D3F2B","83412C","7B4931","674230","E4D5D3","E1BBB4","D6938A","C26E60","A4493D","823B34","683431","DDBCB0","CA9A8E","BC8A7E","A37F74","866761","6B4C4C","583D3E","EABEB0","C09C83","B46A55","AB5C57","A45248","9A6A4F","8A391B","ECC3B2","ECBAA8","EAA794","E8927C","DA291C","9A3324","653024","FFB1BB","FF808B","FF585D","E03C31","BE3A34","81312F","FFA3B5","FF8DA1","F8485E","EE2737","D22630","AF272F","7C2529","FCAFC0","FB637E","F4364C","CB333B","A4343A","643335","C66E4E","C04C36","B7312C","AB2328","93272C","8A2A2B","802F2D","E1523D","C63527","A72B2A","9E2A2B","6D3332","633231","572D2D","E6BAA8","E56A54","E04E39","CD545B","B04A5A","9B2242","651D32","FABBCB","FC9BB3","F65275","E4002B","C8102E","A6192E","76232F","ECC7CD","E89CAE","DF4661","D50032","BA0C2F","9D2235","862633","F8A3BC","F67599","EF426F","E40046","BF0D3E","9B2743","782F40","F5B6CD","F59BBB","EF4A81","E0004D","C5003E","A6093D","8A1538","F5DADF","F7CED7","F9B5C4","F890A5","EF6079","E03E52","CB2C30","F2D4D7","F4C3CC","F2ACB9","E68699","D25B73","B83A4B","9E2A2F","ECB3CB","E782A9","E0457B","CE0037","A50034","861F41","6F263D","F99FC9","F57EB6","F04E98","E31C79","CE0F69","AC145A","7D2248","F4CDD4","E06287","E24585","B52555","A4123F","971B2F","6A2C3E","D6C9CA","C4A4A7","C16784","C63663","BC204B","912F46","7E2D40","EABEDB","E56DB1","DA1884","A50050","910048","6C1D45","936D73","934054","8E2C48","732E4A","672E45","582D40","502B3A","EF95CF","EB6FBD","DF1995","D0006F","AA0061","890C58","672146","F4A6D7","F277C6","E93CAC","C6007E","A20067","840B55","EAD3E2","E6BCD8","DFA0C9","D986BA","C6579A","AE2573","960051","E5CEDB","E3C8D8","DEBED2","C996B6","B06C96","994878","7C2855","E4C6D4","DCB6C9","D0A1BA","BE84A3","A76389","893B67","612141","EBBECB","E8B3C3","E4A9BB","D592AA","84344E","6F2C3F","572932","E2BCCB","DCA9BF","C9809E","B55C80","A73A64","9B3259","872651","E9CDD0","E4BEC3","D7A3AB","C48490","B46B7A","984856","893C47","F2C6CF","F1BDC8","E9A2B2","DC8699","8F3237","7F3035","5D2A2C","E9C4C7","E5BAC1","DAA5AD","C6858F","7A3E3A","6A3735","512F2E","DFC2C3","DBB7BB","CCA1A6","B07C83","9C6169","874B52","3F2021","F1A7DC","EC86D0","E45DBF","DB3EB1","C5299B","AF1685","80225F","EFBAE1","E277CD","D539B5","C800A1","B0008E","9E007E","830065","EAB8E4","E59BDC","DD7FD3","C724B1","BB16A3","A51890","80276C","A56E87","A83D72","991E66","8A1B61","722257","6A2A5B","5E2751","E7BAE4","DD9CDF","C964CF","AD1AAC","981D97","72246C","EBC6DF","E6BEDD","E2ACD7","D48BC8","93328E","833177","612C51","EEDAEA","CCAED0","D59ED7","B288B9","A277A6","9F5CC0","963CBD","D7A9E3","C98BDB","AC4FC6","9B26B6","87189D","772583","653165","948794","A2789C","A15A95","8E3A80","6E2B62","6A3460","5D3754","D5C2D8","C9B1D0","BA9CC5","A57FB2","642F6C","59315F","4B3048","DBCDD3","D0BEC7","C6B0BC","AF95A6","86647A","66435A","4A3041","D8C8D1","D3C0CD","BFA5B8","9B7793","7E5475","693C5E","512A44","DFC8E7","D7B9E4","CAA2DD","B580D1","8031A7","702F8A","572C5F","D6BFDD","C6A1CF","8C4799","6D2077","642667","5D285F","51284F","CBA3D8","B884CB","A05EB5","84329B","702082","671E75","5F2167","9991A4","8D6E97","7A4183","6B3077","653279","5E366E","5C4E63","C1A0DA","A77BCA","8246AF","5C068C","500778","470A68","3C1053","D7C6E6","C1A7E2","9063CD","753BBD","5F259F","582C83","512D6D","C5B4E3","AD96DC","9678D3","7D55C7","330072","2E1A47","B4B5DF","9595D2","7474C1","24135F","211551","201747","221C35","A7A4E0","8B84D7","685BC7","2E008B","280071","250E62","201547","6E7CA0","686E9F","615E9B","565294","514689","4C4184","535486","DDDAE8","B6B8DC","A7A2C3","8986CA","5D4777","4B384C","41273B","878CB4","7C7FAB","7566A0","6F5091","68478D","563D82","523178","E5E1E6","E0DBE3","C6BCD0","A192B2","7C6992","614B79","3F2A56","D8D7DF","C6C4D2","B3B0C4","8D89A5","595478","403A60","1E1A34","C5CFDA","BBC7D6","A2B2C8","8E9FBC","1B365D","1F2A44","1C1F2A","D9E1E2","A4BCC2","98A4AE","768692","425563","253746","131E29","B9D3DC","A3C7D2","8DB9CA","6BA4B8","003D4C","00313C","072B31","BFCED6","B7C9D3","A6BBC8","7A99AC","5B7F95","4F758B","081F2C","D1DDE6","C6D6E3","9BB8D3","7DA1C4","5E8AB4","236192","002E5D","DBE2E9","CED9E5","A7BCD6","7D9BC1","326295","003A70","002554","DDE5ED","C8D8EB","B1C9E8","7BA4DB","407EC9","003594","001A70","BDC5DB","89ABE3","8094DD","7BA6DE","5F8FB4","3A5DAE","606EB2","CBD3EB","9FAEE5","485CC7","1E22AA","171C8F","151F6D","141B4D","B8CCEA","5C88DA","0047BB","06038D","001871","001E62","071D49","C3D7EE","A7C6ED","307FE2","001A72","001E60","13294B","ABCAE9","8BB8E8","418FDE","012169","00205B","041E42","92C1E9","6CACE4","0072CE","0033A0","003087","002D72","0C2340","94A9CB","6787B7","426DA9","385E9D","2C5697","1D4F91","1D428A","C6DAE7","BDD6E6","A4C8E1","7BAFD4","003C71","003057","00263A","B9D9EB","9BCBEB","69B3E7","003DA5","002F6C","002855","041C2C","8DC8E8","62B5E5","009CDE","0057B8","004C97","003865","00263E","71C5E8","41B6E6","00A3E0","005EB8","004B87","003B5C","002A3A","4698CB","298FC2","0076A8","006298","005587","004976","01426A","99D6EA","5BC2E7","00A9E0","0077C8","00629B","004F71","003E51","7BA7BC","6399AE","4E87A0","41748D","34657F","165C7D","005776","BBDDE6","71B2C9","4298B5","0086BF","007DBA","00558C","002B49","9ADBE8","59CBE8","00B5E2","006BA6","00587C","003B49","A4DBE8","8BD3E6","4EC3E0","00AFD7","0095C8","0082BA","0067A0","48A9C5","009CBD","0085AD","007096","006A8E","00617F","005670","B8DDE1","9BD3DD","77C5D5","3EB1C8","0093B2","007396","005F83","6AD1E3","05C3DE","00A9CE","0092BC","007FA3","00677F","004851","68D2DF","00C1D5","00AEC7","008EAA","00778B","006272","004F59","63B1BC","00A7B5","0097A9","00859B","007D8A","007680","006269","B1E4E3","88DBDF","2DCCD3","009CA6","008C95","007377","005F61","A0D1CA","40C1AC","00B0B9","00A3AD","007398","005F86","005A70","7EDDD3","5CB8B2","279989","007681","487A7B","0D5257","244C5A","B6CFD0","ABC7CA","94B7BB","7FA9AE","4F868E","115E67","07272D","00968F","00857D","007672","006D68","00635B","005E5D","005151","9CDBD9","64CCC9","00B2A9","008675","007367","00685E","00534C","71DBD4","2AD2C9","00BFB3","00A499","008578","00594F","004C45","7CE0D3","2CD5C4","00C7B1","00B398","009681","007864","004E42","6DCDB8","49C5B1","00AB8E","009B77","008264","006A52","034638","B9DCD2","A1D6CA","86C8BC","6BBBAE","006F62","00594C","1D3C34","B5E3D8","A5DFD3","98DBCE","6BCABA","00816D","006C5B","173F35","ADCAB8","9ABEAA","85B09A","6FA287","28724F","205C40","284734","BFCEC2","A7BDB1","92ACA0","7F9C90","5C7F71","43695B","183028","BAC5B9","B0BDB0","A3B2A4","94A596","708573","5E7461","22372B","BCC9C5","B1C0BC","9DB0AC","829995","5D7975","3E5D58","18332F","D1E0D7","B7CDC2","9AB9AD","789F90","507F70","285C4D","13322B","A7E6D7","8CE2D0","3CDBC0","009775","007B5F","00664F","8FD6BD","6ECEB2","00B388","00965E","007A53","006747","115740","50A684","00966C","008755","007B4B","006F44","006845","005844","7AE1BF","47D7AC","00C389","00AF66","007749","006341","154734","A0DAB3","91D6AC","71CC98","009A44","00843D","046A38","2C5234","A2E4B8","8FE2B0","80E0A7","00B140","009639","007A33","215732","9BE3BF","26D07C","00BF6F","00B74F","009F4D","275D38","00573F","4B9560","228848","007A3E","007041","286140","36573B","395542","6BA539","48A23F","319B42","3A913F","44883E","4A773C","44693D","ADDC91","A1D884","6CC24A","43B02A","509E2F","4C8C2B","4A7729","D0DEBB","BCE194","8EDD65","78D64B","74AA50","719949","79863C","C2E189","B7DD79","A4D65E","78BE20","64A70B","658D1B","546223","D4EB8E","CDEA80","C5E86C","97D700","84BD00","7A9A01","59621D","C4D6A4","BCD19B","B7CE95","A9C47F","789D4A","67823A","4E5B31","D0D1AB","C6C89B","BABD8B","A2A569","8A8D4A","6D712E","3D441E","D2CE9E","CBC793","C0BB87","AFA96E","A09958","89813D","555025","C3C6A8","B3B995","A3AA83","899064","737B4C","5E6738","3E4827","BFCC80","BBC592","9CAF88","8F993E","76881D","7A7256","5B6236","BABC16","ABAD23","999B30","888D30","7C8034","727337","656635","E2E868","DBE442","CEDC00","C4D600","A8AD00","949300","787121","E9EC6B","E3E935","E0E721","D0DF00","B5BD00","9A9500","827A04","E3E48D","E0E27C","DBDE70","D2D755","B7BF10","8E8C13","625D20","F0EC74","EDE939","ECE81A","E1E000","BFB800","ADA400","A09200","F3EA5D","F3E500","EFDF00","EEDC00","BBA600","9A8700","685C20","F1EB9C","F0E991","F0E87B","EDE04B","EADA24","E1CD00","CFB500","EBE49A","E9E186","E6DE77","E1D555","D7C826","C4B000","B39B00","E9DF97","E4D77E","DECD63","D9C756","B89D18","A28E2A","695B24","DCD59A","D6CF8D","D0C883","C0B561","AC9F3C","9F912A","8A7B19","CAB64B","CFB023","C1A01E","A08629","897630","736635","675E33","D4C304","C4B200","91852C","747136","5D6439","585C3B","535435","BBB323","B4A91F","AA9D2E","8F7E35","716135","635939","4E4934","D5CB9F","CFC493","C5B783","B3A369","998542","8C7732","614F25","CAC7A7","BFBB98","B0AA7E","9B945F","594A25","524727","4A412A","F1E6B2","DFD1A7","D9C89E","CEB888","A89968","94795D","816040","DDCBA4","D3BC8D","C6AA76","B9975B","8B5B29","744F28","5C462B","EFDBB2","FCD299","E1B87F","D6A461","C6893F","B77729","A6631B","EDC8A3","E7B78A","DDA46F","C88242","B36924","934D11","7D3F16","F3CFB3","F1C6A7","F0BF9B","E59E6D","B86125","A45A2A","693F23","E0C09F","D9B48F","CDA077","B58150","9E652E","774212","623412","E0C6AD","DCBFA6","CDA788","BF9474","AD7C59","946037","4F2C1D","E1B7A7","D5A286","C58B68","99552B","85431E","6D4F47","5E4B3C","D7C4B7","CDB5A7","C0A392","AE8A79","956C58","7C4D3A","5B3427","DBC8B6","D3BBA8","C6A992","AA8066","703F2A","623B2A","4E3629","D6D2C4","C5B9AC","B7A99A","A39382","7A6855","63513D","473729","D1CCBD","B7B09C","A69F88","A7ACA2","949A90","8E9089","4B4F54","D0D3D4","C1C6C8","A2AAAD","7C878E","5B6770","333F48","1D252D","C7C9C7","B2B4B2","9EA2A2","898D8D","707372","54585A","25282A","BEC6C4","A2ACAB","919D9D","717C7D","505759","3F4444","373A36","BABBB1","A8A99E","919388","7E7F74","65665C","51534A","212322","C4BFB6","AFA9A0","9D968D","8C857B","776E64","696158","C4BCB7","B2A8A2","978C87","857874","746661","5E514D","382F2D","D0C4C5","C1B2B6","AB989D","7B6469","584446","453536","382E2C","D7D2CB","CBC4BC","BFB8AF","B6ADA5","ACA39A","A59C94","968C83","8C8279","83786F","796E65","6E6259","D9D9D6","D0D0CE","C8C9C7","BBBCBC","B1B3B3","A7A8AA","97999B","888B8D","75787B","63666A","53565A","332F21","212721","31261D","3E2B2E","101820","3D3935"],ta=$t.map(n=>[parseInt(n.substring(0,2),16),parseInt(n.substring(2,4),16),parseInt(n.substring(4,6),16)]);function Ao(n){const t=ne.indexOf(n);return t>=0?$t[t]:""}function ei(n){const t=$t.indexOf(n);return t>=0?ne[t]:""}function ho(n,t=64){const e=[],a=[],i=ei(n);i&&e.push({pms:i,hex:n,distance:0});const r=parseInt(n.substring(0,2),16),o=parseInt(n.substring(2,4),16),s=parseInt(n.substring(4,6),16);let l,c,d;for(let u=0;u<$t.length;u++){l=ta[u][0],c=ta[u][1],d=ta[u][2];const A=Math.sqrt(Math.pow(r-l,2)+Math.pow(o-c,2)+Math.pow(s-d,2));a.push(A)}for(let u=0;u<a.length;u++)a[u]<=t&&!e.some(A=>A.pms===ne[u])&&e.push({pms:ne[u],hex:$t[u],distance:a[u]});return e.sort((u,A)=>u.distance-A.distance)}const go=ne.map((n,t)=>({pms:n,hex:$t[t]})),mo=new Mr(go,{keys:["pms"]});function po(n,t){return mo.search(n,t?{limit:t}:void 0)}let Lt=null;function ai(n){if(n.startsWith("#"))return hn(n);if(!document)throw new Error("browserColorToHex is only supported on browsers");if(Lt||(Lt=document.createElement("canvas").getContext("2d")),!Lt)throw new Error("Failed to create canvas context required to convert colors");Lt.fillStyle=n;const t=hn(Lt.fillStyle);return t||console.error(`Unknown browser color ${n}`),t}function hn(n){const t=n.substring(1).toUpperCase();return t.length===6?t:t.length===3?`${t[0]}${t[0]}${t[1]}${t[1]}${t[2]}${t[2]}`:""}const we=n=>{const t=ni(n.spotColor);return t?`${n.browserValue} ${t}`:n.browserValue},ni=n=>{if(!n)return"";if(n.profileName.includes("/")&&n.profileName.includes(".icc")){const t=n.profileName.replace(/\s/g,"-"),e=t.lastIndexOf("/");return`icc-named-color(${t.slice(e+1).slice(0,-4)}, ${n.namedColor})`}return`icc-named-color(${n.profileName}, ${n.namedColor})`},ya=n=>{const t=n.split(/[ ](?=[^)]*?(?:\(|$))/);if(t.length===0)return{browserValue:"#000000"};if(t.length===1)return{browserValue:t[0]};const e=t[1].match(/\(([^)]+)\)/gm);if(!e)throw new Error("Unhandled state of color value in SVG");const a=e[0].replace(/[() ]/g,"").split(",");return{browserValue:t[0],spotColor:{profileName:a[0],namedColor:a[1]}}},fo=["altGlyph","circle","ellipse","path","polygon","polyline","rect","text","textPath","tref","tspan"],Co=["fill","stroke"],Ut=(n,t)=>{t(n),n.children.length>0&&Array.from(n.children).forEach(e=>Ut(e,t))},ii=(n,t)=>{const e=t(n);if(e)return e;const a=n.parentElement;if(a)return ii(a,t)},wo=(n,t)=>{try{return n.matches(t)}catch{return n.classList.contains(t.substring(1))}},qe=(n,t=!1)=>{!t&&n.setAttribute("preserveAspectRatio","none");const e=[];Ut(n,a=>{if(a.tagName==="script"){a.remove();return}if(a.tagName==="style"){try{Rn.parse(a.innerHTML).stylesheet?.rules.forEach(o=>{e.push(o)}),a.remove()}catch(r){console.error(r)}return}const i=a.attributes.getNamedItem("style")?.value?.trim();if(i){const r=[];i.split(";").forEach(s=>{const l=s.trim();if(l){const[c,d]=l.split(":"),u=c.toLowerCase();Co.indexOf(u)>-1?a.setAttribute(u,d.trim()):r.push(l)}}),r.length>0?a.setAttribute("style",r.join(";")):a.removeAttribute("style")}}),Ut(n,a=>{e.forEach(i=>{i.selectors?.forEach(r=>{wo(a,r)&&i.declarations?.forEach(o=>{o.property&&o.value&&a.setAttribute(o.property,o.value)})})})})},yo=n=>{const t=/pt|pc|mm|cm|in/gm,e=n.getAttribute("viewBox"),a=n.getAttribute("width"),i=n.getAttribute("height");if(!e)throw new Error("viewBox not specified on SVG!");a&&n.setAttribute("width",a.replace(t,"")),i&&n.setAttribute("height",i.replace(t,""))},ri=n=>ct().parseFromString(n,"image/svg+xml").firstElementChild,So=(n,t,e)=>{n.setAttribute("height",`${e}px`),n.setAttribute("width",`${t}px`)},oi=(n,t,e)=>{Ut(n,a=>{const i=a.attributes.getNamedItem("fill");i&&i.value!=="none"&&a.classList.forEach(o=>{if(o.startsWith("spiff-fill")){const s=t[o.replace("spiff-fill-","")];if(s)a.setAttribute("fill",e?we(s):s.browserValue);else{const l=t[o];l&&a.setAttribute("fill",e?we(l):l.browserValue)}}});const r=a.attributes.getNamedItem("stroke");r&&r.value!=="none"&&a.classList.forEach(o=>{if(o.startsWith("spiff-stroke")){const s=t[o.replace("spiff-stroke-","")];if(s)a.setAttribute("stroke",e?we(s):s.browserValue);else{const l=t[o];l&&a.setAttribute("fill",e?we(l):l.browserValue)}}})})},si=n=>Et().serializeToString(n),$a=(n,t,e,a,i)=>{const r=ri(n);if(!r)throw new Error("Failed to read SVG.");return So(r,t,e),oi(r,a,i),si(r)},ze=(n,t,e)=>{const a=ri(n);if(!a)throw new Error("Failed to read SVG.");return oi(a,t,e),si(a)},vo=n=>{const t=/<svg.*<\/svg>/s,e=n.match(t)||[],a=e?.length>0?e[0]:"";return ct().parseFromString(a,"image/svg+xml")},rt=async n=>{const e=vo(n).firstElementChild;if(!e)throw new Error("Failed to read SVG.");qe(e);const a={};Ut(e,o=>{if(fo.includes(o.tagName)&&!o.attributes.getNamedItem("fill")){let c="black";const d=o.parentElement;if(d){const u=ii(d,A=>{const g=A.style.fill;if(g)return g;const p=A.getAttribute("fill");if(p)return p});u&&(c=u)}o.setAttribute("fill",c)}const s=o.attributes.getNamedItem("fill");if(s&&s.value!=="none"&&!s.value.startsWith("url(")){const c=ya(s.value),d=c.browserValue.replace(/\W/g,""),u=`spiff-fill-${d}`;o.setAttribute("fill",c.browserValue),o.classList.add(u),a[d]=c}const l=o.attributes.getNamedItem("stroke");if(l&&l.value!=="none"&&!l.value.startsWith("url(")){const c=ya(l.value),d=c.browserValue.replace(/\W/g,""),u=`spiff-stroke-${d}`;o.classList.add(u),o.setAttribute("stroke",c.browserValue),a[d]=c}});const r=Et().serializeToString(e);return{colors:a,svg:r}},Eo=C.gql`
2
2
  fragment AssetMetadataFields on Asset {
3
3
  metadata {
4
4
  key
5
5
  value
6
6
  }
7
7
  }
8
- `,ze=n=>C.gql`
9
- ${n&&vo||""}
8
+ `,Ge=n=>C.gql`
9
+ ${n&&Eo||""}
10
10
  fragment AssetFields on Asset {
11
11
  name
12
12
  key
@@ -48,8 +48,8 @@
48
48
  }
49
49
  ${n&&"...AssetMetadataFields"||""}
50
50
  }
51
- `,Eo=C.gql`
52
- ${ze(!1)}
51
+ `,bo=C.gql`
52
+ ${Ge(!1)}
53
53
  query GetAssets($keys: [String]!) {
54
54
  assets(keys: $keys) {
55
55
  ...AssetFields
@@ -102,14 +102,14 @@
102
102
  fileLink
103
103
  }
104
104
  }
105
- `,bo=C.gql`
105
+ `,Io=C.gql`
106
106
  ${li}
107
107
  query GetMaterials($ids: [String]) {
108
108
  materials(id: $ids) {
109
109
  ...MaterialFields
110
110
  }
111
111
  }
112
- `,Io=C.gql`
112
+ `,Bo=C.gql`
113
113
  mutation CreateAsset($name: String!, $type: String!, $mimeType: String!, $anonymous: Boolean, $temporary: Boolean) {
114
114
  assetCreate(name: $name, type: $type, mimeType: $mimeType, anonymous: $anonymous, temporary: $temporary) {
115
115
  uploadUrl
@@ -123,21 +123,21 @@
123
123
  }
124
124
  }
125
125
  }
126
- `,Bo=C.gql`
127
- ${ze(!1)}
126
+ `,Po=C.gql`
127
+ ${Ge(!1)}
128
128
  mutation RemoveBackgroundFromAsset($key: String!) {
129
129
  assetRemoveBackground(key: $key) {
130
130
  ...AssetFields
131
131
  }
132
132
  }
133
- `,Pe=async n=>(await S.getShadowGraphqlClient().query({query:Eo,errorPolicy:"all",fetchPolicy:"no-cache",variables:{keys:n}})).data.assets,Po=async n=>(await S.getShadowGraphqlClient().query({query:bo,errorPolicy:"all",variables:{ids:n}})).data.materials,xo=async(n,t,e,a,i)=>(await S.getShadowGraphqlClient().mutate({mutation:Io,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:n,type:t,mimeType:e,anonymous:a,temporary:i}})).data?.assetCreate;class Fo{constructor(){this.cache=new Map,this.bgrmProcessCache=new Map,this.materialCache=new Map,this.loadImageAsFileInfo=async t=>{const e=await t.arrayBuffer(),a=await ce(e),i=(r,o)=>{const s=atob(r.split(",")[1]),l=[];for(let c=0;c<s.length;c++)l.push(s.charCodeAt(c));return new Blob([new Uint8Array(l)],{type:o})};return{name:t.name.substring(t.name.lastIndexOf("/")+1),blob:i(a.dataUrl,t.type)}}}async getLocalOrFromServer(t){if(this.cache.has(t)){const i=this.cache.get(t);if(!i)throw new O("Failed to get asset from cache!");return i}const a=(async()=>(await Pe([t]))[0])();return this.cache.set(t,a),a}async getFromServer(t){const a=(async()=>(await Pe([t]))[0])();return this.cache.set(t,a),a}keyFromURL(t){let e;try{e=new URL(t).pathname}catch{e=void 0}return e!==void 0&&e.startsWith("/")&&(e=e.replace("/","")),e?.split("?")[0]}cacheAsset(t){if(!t.key)throw new O("Asset has no key!");this.cache.has(t.key)||this.cache.set(t.key,Promise.resolve(t))}cacheMaterial(t){if(!t.id)throw new O("Material has no id!");this.materialCache.has(t.id)||this.materialCache.set(t.id,Promise.resolve(t))}async getMaterialLocalOrFromServer(t){if(this.materialCache.has(t))return this.materialCache.get(t);const a=(async()=>(await Po([t]))[0])();return this.materialCache.set(t,a),a}async uploadAssetWithProgress(t,e,a,i,r){const o=await this.dispatchCreateAssetRequest(t,e,i,r);if(!o)throw new Error("Failed to create asset.");return await new Promise((s,l)=>{const c=new XMLHttpRequest;c.open("PUT",o.assetResponse.uploadUrl,!0),c.setRequestHeader("Content-Type",o.mimeType),c.setRequestHeader("Cache-Control","public,max-age=31536000,immutable"),c.upload.onprogress=d=>{d.lengthComputable&&a(d.loaded*100/d.total)},c.onload=()=>{const d=o.assetResponse.asset;mt.add(o.assetResponse.asset),s(d)},c.onerror=l,this.postProcessFileUpload(t,o.mimeType).then(d=>c.send(d.blob)).catch(l)}),this.cacheAsset(o.assetResponse.asset),o.assetResponse.asset}async uploadAsset(t,e,a,i){return this.uploadAssetWithProgress(t,e,()=>{},a,i)}async uploadFile(t,e){const i=this.isRaster(t)?ee.Image:ee.Illustration,r=await this.loadImageAsFileInfo(t);return await this.uploadAssetWithProgress(r,i,e,!0)}async removeBackgroundFromAsset(t){const e=t.key;if(this.bgrmProcessCache.has(e))return this.bgrmProcessCache.get(e);if(J.has(e)){const r=this.getLocalOrFromServer(J.get(e));return this.bgrmProcessCache.set(e,r),r}const i=(async()=>{const r=await S.getShadowGraphqlClient().mutate({mutation:Bo,fetchPolicy:"no-cache",errorPolicy:"all",variables:{key:e}});if(this.bgrmProcessCache.delete(e),!r.data?.assetRemoveBackground?.key)throw new Error("Failed to remove background from image");return mt.add(r.data.assetRemoveBackground),J.add(e,r.data.assetRemoveBackground.key),this.cache.set(r.data.assetRemoveBackground.key,Promise.resolve(r.data.assetRemoveBackground)),r.data.assetRemoveBackground})();return this.bgrmProcessCache.set(e,i),i}removePersistedAsset(t){mt.remove(t),J.delete(t),J.deleteForBgRemovedKey(t)}getPersistedAssets(){return mt.list()}registerPersistedAssetListener(t){mt.addCallback(t)}unRegisterPersistedAssetListener(t){mt.removeCallback(t)}isRaster(t){return!(t.type==="image/svg+xml"||t.type==="application/pdf"||t.type==="application/postscript")}async postProcessFileUpload(t,e){if(e==="image/svg+xml"){const a=await t.blob.text(),o=new window.DOMParser().parseFromString(a,"image/svg+xml").documentElement;if(!o)throw new It("Failed to read SVG.");wo(o);const l=Et().serializeToString(o);return{name:t.name,blob:new Blob([l],{type:"image/svg+xml"})}}return t}async dispatchCreateAssetRequest(t,e,a,i){const r=t.blob.type?t.blob.type:this.guessMIME(t.name),o=await xo(t.name,e,r,a,i);if(o)return{assetResponse:o,mimeType:r}}guessMIME(t){const e=t.split(".").pop();switch(e){case"glb":return"model/gltf-binary";case"ttf":return"font/ttf";case"mkv":return"video/x-matroska";default:throw new O("Unexpected mimetype: "+e)}}}const qt="persistentAssets",ut=class ut{static add(t){if(!t.fileLink){console.error("Failed to find cdn link on asset, cannot persist!");return}const e=new Map;e.set(t.key||"",t.fileLink);const a=Q.getMap(qt);a&&a.forEach((i,r)=>{e.set(r,i)}),Q.setMap(qt,e),ut.executeCallbacks()}static remove(t){const e=Q.getMap(qt);if(!e)return;const a=Array.from(e.entries()).find(i=>i[0]===t);a&&(e.delete(a[0]),Q.setMap(qt,e),ut.executeCallbacks())}static list(){const t=Q.getMap(qt);return t?Array.from(t.entries()).map(e=>({assetKey:e[0],src:e[1]})):[]}static addCallback(t){ut.callbacks.push(t)}static removeCallback(t){ut.callbacks=ut.callbacks.filter(e=>e!==t)}static executeCallbacks(){ut.callbacks.forEach(t=>t())}};ut.callbacks=[];let mt=ut;const gn="bgrmPersistentAssets";class J{static has(t){return J.getMap().has(t)}static get(t){return J.getMap().get(t)}static keys(){return J.getMap().keys()}static values(){return J.getMap().values()}static add(t,e){const a=J.getMap();a.set(t,e),J.setMap(a)}static delete(t){const e=J.getMap();e.delete(t),J.setMap(e)}static deleteForBgRemovedKey(t){const e=J.getMap(),a=Array.from(e.keys()).find(i=>e.get(i)===t);a&&(e.delete(a),J.setMap(e))}static getMap(){return Q.getMap(gn)||new Map}static setMap(t){Q.setMap(gn,t)}}const W=new Fo;class Do{constructor(){this.cache={},this.disabled=!1}get(t){if(this.disabled)return;const e=JSON.stringify(t);return this.cache[e]}set(t,e){if(this.disabled)return e;const a=JSON.stringify(t);return this.cache[a]=e,e}disable(t){this.disabled=t}}const ie=new Do,ko=C.gql`
133
+ `,xe=async n=>(await S.getShadowGraphqlClient().query({query:bo,errorPolicy:"all",fetchPolicy:"no-cache",variables:{keys:n}})).data.assets,xo=async n=>(await S.getShadowGraphqlClient().query({query:Io,errorPolicy:"all",variables:{ids:n}})).data.materials,Fo=async(n,t,e,a,i)=>(await S.getShadowGraphqlClient().mutate({mutation:Bo,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:n,type:t,mimeType:e,anonymous:a,temporary:i}})).data?.assetCreate;class Do{constructor(){this.cache=new Map,this.bgrmProcessCache=new Map,this.materialCache=new Map,this.loadImageAsFileInfo=async t=>{const e=await t.arrayBuffer(),a=await ce(e),i=(r,o)=>{const s=atob(r.split(",")[1]),l=[];for(let c=0;c<s.length;c++)l.push(s.charCodeAt(c));return new Blob([new Uint8Array(l)],{type:o})};return{name:t.name.substring(t.name.lastIndexOf("/")+1),blob:i(a.dataUrl,t.type)}}}async getLocalOrFromServer(t){if(this.cache.has(t)){const i=this.cache.get(t);if(!i)throw new O("Failed to get asset from cache!");return i}const a=(async()=>(await xe([t]))[0])();return this.cache.set(t,a),a}async getFromServer(t){const a=(async()=>(await xe([t]))[0])();return this.cache.set(t,a),a}keyFromURL(t){let e;try{e=new URL(t).pathname}catch{e=void 0}return e!==void 0&&e.startsWith("/")&&(e=e.replace("/","")),e?.split("?")[0]}cacheAsset(t){if(!t.key)throw new O("Asset has no key!");this.cache.has(t.key)||this.cache.set(t.key,Promise.resolve(t))}cacheMaterial(t){if(!t.id)throw new O("Material has no id!");this.materialCache.has(t.id)||this.materialCache.set(t.id,Promise.resolve(t))}async getMaterialLocalOrFromServer(t){if(this.materialCache.has(t))return this.materialCache.get(t);const a=(async()=>(await xo([t]))[0])();return this.materialCache.set(t,a),a}async uploadAssetWithProgress(t,e,a,i,r){const o=await this.dispatchCreateAssetRequest(t,e,i,r);if(!o)throw new Error("Failed to create asset.");return await new Promise((s,l)=>{const c=new XMLHttpRequest;c.open("PUT",o.assetResponse.uploadUrl,!0),c.setRequestHeader("Content-Type",o.mimeType),c.setRequestHeader("Cache-Control","public,max-age=31536000,immutable"),c.upload.onprogress=d=>{d.lengthComputable&&a(d.loaded*100/d.total)},c.onload=()=>{const d=o.assetResponse.asset;mt.add(o.assetResponse.asset),s(d)},c.onerror=l,this.postProcessFileUpload(t,o.mimeType).then(d=>c.send(d.blob)).catch(l)}),this.cacheAsset(o.assetResponse.asset),o.assetResponse.asset}async uploadAsset(t,e,a,i){return this.uploadAssetWithProgress(t,e,()=>{},a,i)}async uploadFile(t,e){const i=this.isRaster(t)?ee.Image:ee.Illustration,r=await this.loadImageAsFileInfo(t);return await this.uploadAssetWithProgress(r,i,e,!0)}async removeBackgroundFromAsset(t){const e=t.key;if(this.bgrmProcessCache.has(e))return this.bgrmProcessCache.get(e);if(J.has(e)){const r=this.getLocalOrFromServer(J.get(e));return this.bgrmProcessCache.set(e,r),r}const i=(async()=>{const r=await S.getShadowGraphqlClient().mutate({mutation:Po,fetchPolicy:"no-cache",errorPolicy:"all",variables:{key:e}});if(this.bgrmProcessCache.delete(e),!r.data?.assetRemoveBackground?.key)throw new Error("Failed to remove background from image");return mt.add(r.data.assetRemoveBackground),J.add(e,r.data.assetRemoveBackground.key),this.cache.set(r.data.assetRemoveBackground.key,Promise.resolve(r.data.assetRemoveBackground)),r.data.assetRemoveBackground})();return this.bgrmProcessCache.set(e,i),i}removePersistedAsset(t){mt.remove(t),J.delete(t),J.deleteForBgRemovedKey(t)}getPersistedAssets(){return mt.list()}registerPersistedAssetListener(t){mt.addCallback(t)}unRegisterPersistedAssetListener(t){mt.removeCallback(t)}isRaster(t){return!(t.type==="image/svg+xml"||t.type==="application/pdf"||t.type==="application/postscript")}async postProcessFileUpload(t,e){if(e==="image/svg+xml"){const a=await t.blob.text(),o=new window.DOMParser().parseFromString(a,"image/svg+xml").documentElement;if(!o)throw new It("Failed to read SVG.");yo(o);const l=Et().serializeToString(o);return{name:t.name,blob:new Blob([l],{type:"image/svg+xml"})}}return t}async dispatchCreateAssetRequest(t,e,a,i){const r=t.blob.type?t.blob.type:this.guessMIME(t.name),o=await Fo(t.name,e,r,a,i);if(o)return{assetResponse:o,mimeType:r}}guessMIME(t){const e=t.split(".").pop();switch(e){case"glb":return"model/gltf-binary";case"ttf":return"font/ttf";case"mkv":return"video/x-matroska";default:throw new O("Unexpected mimetype: "+e)}}}const qt="persistentAssets",ut=class ut{static add(t){if(!t.fileLink){console.error("Failed to find cdn link on asset, cannot persist!");return}const e=new Map;e.set(t.key||"",t.fileLink);const a=Q.getMap(qt);a&&a.forEach((i,r)=>{e.set(r,i)}),Q.setMap(qt,e),ut.executeCallbacks()}static remove(t){const e=Q.getMap(qt);if(!e)return;const a=Array.from(e.entries()).find(i=>i[0]===t);a&&(e.delete(a[0]),Q.setMap(qt,e),ut.executeCallbacks())}static list(){const t=Q.getMap(qt);return t?Array.from(t.entries()).map(e=>({assetKey:e[0],src:e[1]})):[]}static addCallback(t){ut.callbacks.push(t)}static removeCallback(t){ut.callbacks=ut.callbacks.filter(e=>e!==t)}static executeCallbacks(){ut.callbacks.forEach(t=>t())}};ut.callbacks=[];let mt=ut;const gn="bgrmPersistentAssets";class J{static has(t){return J.getMap().has(t)}static get(t){return J.getMap().get(t)}static keys(){return J.getMap().keys()}static values(){return J.getMap().values()}static add(t,e){const a=J.getMap();a.set(t,e),J.setMap(a)}static delete(t){const e=J.getMap();e.delete(t),J.setMap(e)}static deleteForBgRemovedKey(t){const e=J.getMap(),a=Array.from(e.keys()).find(i=>e.get(i)===t);a&&(e.delete(a),J.setMap(e))}static getMap(){return Q.getMap(gn)||new Map}static setMap(t){Q.setMap(gn,t)}}const W=new Do;class ko{constructor(){this.cache={},this.disabled=!1}get(t){if(this.disabled)return;const e=JSON.stringify(t);return this.cache[e]}set(t,e){if(this.disabled)return e;const a=JSON.stringify(t);return this.cache[a]=e,e}disable(t){this.disabled=t}}const ie=new ko,Mo=C.gql`
134
134
  fragment OptionMinimalFields on Option {
135
135
  id
136
136
  defaultVariant {
137
137
  id
138
138
  }
139
139
  }
140
- `,Mo=C.gql`
140
+ `,To=C.gql`
141
141
  fragment OptionFields on Option {
142
142
  id
143
143
  name
@@ -174,16 +174,16 @@
174
174
  ...AssetFields
175
175
  }
176
176
  }
177
- `,To=C.gql`
178
- ${ze(!1)}
177
+ `,No=C.gql`
178
+ ${Ge(!1)}
179
179
  ${li}
180
- ${Mo}
180
+ ${To}
181
181
  query GetOptions($ids: [String]!) {
182
182
  options(ids: $ids) {
183
183
  ...OptionFields
184
184
  }
185
185
  }
186
- `,No=C.gql`
186
+ `,Qo=C.gql`
187
187
  query GetTagsMany($ids: [String!]!) {
188
188
  tagsMany(entityIds: $ids) {
189
189
  id
@@ -191,7 +191,7 @@
191
191
  name
192
192
  }
193
193
  }
194
- `,Qo=async n=>{const t=await S.getShadowGraphqlClient().query({query:To,errorPolicy:"all",variables:{ids:n}});return t.data.options.forEach(e=>{e.colorProfile&&W.cacheAsset(e.colorProfile),e.variants?.forEach(a=>{a.asset&&W.cacheAsset(a.asset),a.thumbnail&&W.cacheAsset(a.thumbnail),a.material&&W.cacheMaterial(a.material)})}),t.data.options},Oo=async(n,t)=>(await t).find(a=>a.id===n),ta=async n=>{const t=new Map(n.map(i=>[i,ie.get({id:i})])),e=n.filter(i=>t.get(i)===void 0);if(e.length>0){const i=Qo(e);e.forEach(r=>t.set(r,ie.set({id:r},Oo(r,i))))}return(await Promise.all(n.map(i=>t.get(i)))).filter(i=>i!==void 0)},mn=n=>n?n.versions?.find(e=>e.name==="thumbnail")?.link||n.fileLink:void 0,pn=(n,t,e)=>{if(n.length===1)return n[0];if(e){const a=n.find(i=>i.id===e);if(a)return a}if(t.defaultVariant!==void 0)return n.find(a=>a.id===t.defaultVariant?.id)};class Ro{constructor(){this.getDefaultVariant=async(t,e)=>{const a=t?.variants;if(a)return pn(a,t,e);const r=(await this.getOption(t.id))?.variants;if(r)return pn(r,t,e)},this.getTagsForAssets=async t=>{const e=t?.map(o=>o.asset?.key)||[],a=t?.map(o=>o.material?.id)||[],i=[...e,...a].filter(o=>!!o);return i.length===0?[]:(await S.getShadowGraphqlClient().query({query:No,errorPolicy:"all",variables:{ids:i}})).data.tagsMany}}async getOption(t){return t?(await ta([t]))[0]:void 0}async getOptions(t){return ta(t)}async getOptionForStep(t){return this.ensureFullOption(t.option)}async ensureFullOption(t){return t?.variants?t:t?.id?(await ta([t.id]))[0]:void 0}async getAssetTileImageForVariant(t){const e=mn(t.thumbnail)??mn(t.asset);return e||(t.material?t.material.id:"")}}const P=new Ro,ci=C.gql`
194
+ `,Oo=async n=>{const t=await S.getShadowGraphqlClient().query({query:No,errorPolicy:"all",variables:{ids:n}});return t.data.options.forEach(e=>{e.colorProfile&&W.cacheAsset(e.colorProfile),e.variants?.forEach(a=>{a.asset&&W.cacheAsset(a.asset),a.thumbnail&&W.cacheAsset(a.thumbnail),a.material&&W.cacheMaterial(a.material)})}),t.data.options},Ro=async(n,t)=>(await t).find(a=>a.id===n),ea=async n=>{const t=new Map(n.map(i=>[i,ie.get({id:i})])),e=n.filter(i=>t.get(i)===void 0);if(e.length>0){const i=Oo(e);e.forEach(r=>t.set(r,ie.set({id:r},Ro(r,i))))}return(await Promise.all(n.map(i=>t.get(i)))).filter(i=>i!==void 0)},mn=n=>n?n.versions?.find(e=>e.name==="thumbnail")?.link||n.fileLink:void 0,pn=(n,t,e)=>{if(n.length===1)return n[0];if(e){const a=n.find(i=>i.id===e);if(a)return a}if(t.defaultVariant!==void 0)return n.find(a=>a.id===t.defaultVariant?.id)};class $o{constructor(){this.getDefaultVariant=async(t,e)=>{const a=t?.variants;if(a)return pn(a,t,e);const r=(await this.getOption(t.id))?.variants;if(r)return pn(r,t,e)},this.getTagsForAssets=async t=>{const e=t?.map(o=>o.asset?.key)||[],a=t?.map(o=>o.material?.id)||[],i=[...e,...a].filter(o=>!!o);return i.length===0?[]:(await S.getShadowGraphqlClient().query({query:Qo,errorPolicy:"all",variables:{ids:i}})).data.tagsMany}}async getOption(t){return t?(await ea([t]))[0]:void 0}async getOptions(t){return ea(t)}async getOptionForStep(t){return this.ensureFullOption(t.option)}async ensureFullOption(t){return t?.variants?t:t?.id?(await ea([t.id]))[0]:void 0}async getAssetTileImageForVariant(t){const e=mn(t.thumbnail)??mn(t.asset);return e||(t.material?t.material.id:"")}}const P=new $o,ci=C.gql`
195
195
  fragment ActiveIntegrationFields on Integration {
196
196
  id
197
197
  logo
@@ -211,7 +211,7 @@
211
211
  beta
212
212
  }
213
213
  }
214
- `,Ge=C.gql`
214
+ `,je=C.gql`
215
215
  fragment AdditionalIntegrationProductFields on IntegrationProduct {
216
216
  id
217
217
  product {
@@ -279,7 +279,7 @@
279
279
  }
280
280
  }
281
281
  }
282
- `,$o=C.gql`
282
+ `,Uo=C.gql`
283
283
  ${di}
284
284
  mutation CreateTransactions(
285
285
  $inputs: [TransactionCreateInput]!
@@ -325,8 +325,8 @@
325
325
  precedence
326
326
  url
327
327
  }
328
- `,Uo=C.gql`
329
- ${Ge}
328
+ `,hi=C.gql`
329
+ ${je}
330
330
  ${de}
331
331
  ${ci}
332
332
  query ReadIntegrationProducts($ids: [String!]!) {
@@ -568,8 +568,8 @@
568
568
  query ConfirmWorkflowStates($transactions: [TransactionConfirmInput!]!) {
569
569
  transactionConfirmWorkflowStates(transactions: $transactions)
570
570
  }
571
- `,hi=n=>C.gql`
572
- ${Ge}
571
+ `,gi=n=>C.gql`
572
+ ${je}
573
573
  fragment IntegrationProductFields on IntegrationProduct {
574
574
  id
575
575
  externalProductId
@@ -652,14 +652,14 @@
652
652
  }
653
653
  }
654
654
  `,Yo=n=>C.gql`
655
- ${hi(n)}
655
+ ${gi(n)}
656
656
  query GetIntegrationProducts($ids: [String!]!) {
657
657
  integrationProducts(ids: $ids) {
658
658
  ...IntegrationProductFields
659
659
  }
660
660
  }
661
661
  `,Jo=n=>C.gql`
662
- ${hi(n)}
662
+ ${gi(n)}
663
663
  query GetIntegrationProductFromExternalIds($externalIntegrationId: String!, $externalProductId: String!) {
664
664
  integrationProductFromExternalIds(
665
665
  externalIntegrationId: $externalIntegrationId
@@ -805,8 +805,8 @@
805
805
  name
806
806
  }
807
807
  `,as=n=>C.gql`
808
- ${ze(n)}
809
- ${ko}
808
+ ${Ge(n)}
809
+ ${Mo}
810
810
  ${Xo}
811
811
  ${Zo}
812
812
  ${ts}
@@ -1196,7 +1196,7 @@
1196
1196
  }
1197
1197
  }
1198
1198
  }
1199
- `,je=C.gql`
1199
+ `,He=C.gql`
1200
1200
  ${de}
1201
1201
  fragment MarketplaceThemeInstallConfigurationFields on MarketplaceThemeInstallConfiguration {
1202
1202
  id
@@ -1265,7 +1265,7 @@
1265
1265
  }
1266
1266
  }
1267
1267
  `,ns=C.gql`
1268
- ${je}
1268
+ ${He}
1269
1269
  query GetMarketplaceThemeInstallConfiguration($themeConfigurationId: String!, $themeInstallId: String!) {
1270
1270
  marketplaceThemeInstallConfiguration(id: $themeConfigurationId, themeInstallId: $themeInstallId, raw: false) {
1271
1271
  ...MarketplaceThemeInstallConfigurationFields
@@ -1273,7 +1273,7 @@
1273
1273
  }
1274
1274
  `,is=C.gql`
1275
1275
  ${ci}
1276
- ${je}
1276
+ ${He}
1277
1277
  query GetCurrentIntegration($themeConfigurationId: String) {
1278
1278
  currentIntegration {
1279
1279
  id
@@ -1285,7 +1285,7 @@
1285
1285
  }
1286
1286
  }
1287
1287
  `,rs=C.gql`
1288
- ${je}
1288
+ ${He}
1289
1289
  query ReadTransactionForMarketplaceTheme($id: String!) {
1290
1290
  transactions(ids: [$id]) {
1291
1291
  marketplaceThemeInstallConfiguration(raw: false) {
@@ -1294,7 +1294,7 @@
1294
1294
  }
1295
1295
  }
1296
1296
  `,os=C.gql`
1297
- ${je}
1297
+ ${He}
1298
1298
  query ReadBundleForMarketplaceTheme($id: String!) {
1299
1299
  bundles(ids: [$id]) {
1300
1300
  marketplaceThemeInstallConfiguration(raw: false) {
@@ -1317,17 +1317,17 @@
1317
1317
  timestamp
1318
1318
  }
1319
1319
  }
1320
- `,ea=[E.SilentIllustration,E.ProductOverlay],fn=n=>{const t=[];for(const a of n.steps){const i=cs(a.stepName,n.stepGroups);if(!i)throw new Error("Workflow step does not belong to a group, all steps must belong to a group. Step: "+a.stepName);const r=t.find(o=>o.name===i.name);r?ea.includes(a.type)?r.silentSteps.push(a):r.renderableSteps.push(a):t.push({name:i.name,title:i.name,renderableSteps:ea.includes(a.type)?[]:[a],silentSteps:ea.includes(a.type)?[a]:[]})}const e="workflow.steps.finish.confirmDesign";return t.push({name:"Finish",title:e,renderableSteps:[{type:E.Finish,stepName:"Finish",stepTitle:e,helpText:"",data:{modelAnimation:n.finalizeStepConfig?n.finalizeStepConfig.modelAnimation:void 0,lookAtAnimation:n.finalizeStepConfig?n.finalizeStepConfig.lookAtAnimation:void 0},conditions:[]}],silentSteps:[]}),t},cs=(n,t)=>t.find(e=>e.stepNames.includes(n)),Bt=(n,t)=>(n.conditions||[]).every(e=>{const a=t[e.targetStepName];if(a&&a.selectedVariants){const i=a.selectedVariants;return e.requiredVariantSelections.some(r=>i.find(o=>o.id===r)!==void 0)}return!1}),ds=(n,t)=>{const e={name:n.name,title:n.title,renderableSteps:n.renderableSteps.filter(a=>Bt(a,t)),silentSteps:n.silentSteps.filter(a=>Bt(a,t))};return e.silentSteps.length===0&&e.renderableSteps.length===0?null:e},dt=(n,t)=>n.map(e=>ds(e,t)).filter(e=>e!==null),us=async(n,t,e=!1)=>{const a=dt(n,t),i=[];for(const o of a)for(const s of o.renderableSteps){let l=0;if(s.type!=="Finish"&&s.type!=="Module"){let c;s.option?.variants?(c=s.option,l=c?.variants?.length||0):(c=await P.getOption(s.option?.id),l=c?.variants?.length||0)}s.silent||(s.type===E.Model||s.type===E.Material||s.type===E.Picture||s.type===E.Shape?(l>1||e)&&i.push(s.stepName):i.push(s.stepName))}const r=a.filter(o=>o.renderableSteps.filter(l=>i.includes(l.stepName)).length>0);for(const o of r)o.renderableSteps=o.renderableSteps.filter(s=>i.includes(s.stepName));return r};class Ua{constructor(){this.timestamp=Date.now()}}class Va{constructor(t,e=!0){this.queue=[],this.activePromise=void 0,this.queueMaxSize=void 0,this.queueMaxSize=t,this.isEnabled=e}enqueue(t){if(this.queue.push(t),this.queueMaxSize!==void 0&&this.queue.length>this.queueMaxSize){const e=this.queue.length-1;for(let a=0;a<e;++a)this.queue.shift()}this.isEnabled&&(this.activePromise||(this.activePromise=this.dequeue()))}get enabled(){return this.isEnabled}set enabled(t){!this.isEnabled&&t&&!this.activePromise&&this.getRemainingQueueSize()>0&&(this.activePromise=this.dequeue()),this.isEnabled=t}hasActivePromise(){return!!this.activePromise}getRemainingQueueSize(){return this.queue.length}async finalize(){return this.activePromise?this.activePromise:Promise.resolve()}async dequeue(){const t=this.queue.shift();if(!t){this.activePromise=void 0;return}try{await t.execute()}catch(e){console.log(e)}finally{await this.dequeue()}}}const N=()=>{const n=()=>Math.floor((1+Math.random())*65536).toString(16).substring(1);return n()+n()+"-"+n()+"-"+n()+"-"+n()+"-"+n()+n()+n()},As=({backgroundColor:n,outlineColor:t,borderRadius:e,configuration:a,elements:i,height:r,maxHeight:o,maxWidth:s,outlineArea:l,position:c,preserveAspectRatio:d,viewBox:u,width:A})=>{const h=e||0,g=2*(l?.scale||1),p=u||{x:0,y:0,width:A,height:r},m=`${p.x} ${p.y} ${p.width} ${p.height}`,f=N(),y=a.purpose===Ot.FreeDesign&&B.jsx("defs",{children:B.jsx("clipPath",{id:"viewboxClip",children:B.jsx("rect",{width:p.width,height:p.height,rx:h})})}),w=a.colorProfiles?.map((v,I)=>B.jsx("color-profile",{name:v.name,xlinkHref:v.key,children:" "},I)),F=i.map(v=>({...v,_renderingConfiguration:a,mask:l?`url(#viewmask-${f})`:void 0})),b=La(F);return B.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",xmlSpace:"preserve",version:"1.1",preserveAspectRatio:d,width:A,height:r,style:{gridColumn:1,gridRow:1,maxWidth:s,maxHeight:o,position:c},viewBox:m,children:[w,y,!!n&&B.jsx("rect",{id:"layout-background",width:p.width,height:p.height,fill:n,rx:h}),B.jsx("g",{id:"element-group",clipPath:a.purpose===Ot.FreeDesign?"url(#viewboxClip)":void 0,children:b.map(v=>vi(v)).filter(v=>!!v)}),l&&B.jsx("rect",{x:l.x,y:l.y,width:l.width,height:l.height,fill:"none",stroke:l.hidden?"none":t||"#aaaaaa",strokeWidth:g/2,strokeDasharray:`${g*2} ${g}`}),l&&B.jsxs("mask",{id:`viewmask-${f}`,children:[B.jsx("rect",{x:p.x,y:p.y,width:p.width,height:p.height,fill:"black"}),B.jsx("rect",{x:l.x,y:l.y,width:l.width,height:l.height,fill:"white"})]})]})},hs=(n,t,e,a,i)=>{const r=St(i),o=e/2,s=a/2,l=n+o,c=t+s,d=Math.sin(r),u=Math.cos(r),A=o,h=o,g=-s,p=s,m=A*u-g*d,f=h*u-p*d,y=A*d+g*u,w=h*d+p*u,F=Math.max(Math.abs(m),Math.abs(f)),b=Math.max(Math.abs(y),Math.abs(w));return{minX:l-F,maxX:l+F,minY:c-b,maxY:c+b}},gs=(n,t,e)=>{const a=Math.sqrt(Math.pow(t.x-n.x,2)+Math.pow(t.y-n.y,2)),i=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),r=Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2));return Math.acos((i*i+a*a-r*r)/(2*i*a))*(180/Math.PI)},St=n=>n*(Math.PI/180),ms=(n,t,e)=>Math.abs(n-t)<e,ps=(n,t,e)=>{const a=Math.sin(St(e)),i=Math.cos(St(e));return{x:(n.x-t.x)*i-(n.y-t.y)*a+t.x,y:(n.x-t.x)*a+(n.y-t.y)*i+t.y}},fs=(n,t)=>({x:(n.x+t.x)/2,y:(n.y+t.y)/2}),Cs=(n,t,e,a)=>({x:n.x+t?.x*e,y:n.y+t?.y*a}),ws=(n,t,e,a)=>({x:n.x+(t?.x+t?.width)*e,y:n.y+t?.y*a}),ys=(n,t,e,a)=>({x:n.x+(t?.x+t?.width)*e,y:n.y+(t?.y+t?.height)*a}),kt=n=>{switch(n){case H.North:return H.East;case H.East:return H.South;case H.South:return H.West;case H.West:return H.North;case H.Northwest:return H.Northeast;case H.Northeast:return H.Southeast;case H.Southeast:return H.Southwest;case H.Southwest:return H.Northwest}},Ss=(n,t)=>t>45&&t<=135?kt(n):t>135&&t<=225?kt(kt(n)):t>225&&t<=315?kt(kt(kt(n))):n,vs=(n,t={x:0,y:0},e={x:1,y:1})=>{const a=St(n.rotation),i={x:t.x+n.x*e.x,y:t.x+n.y*e.y},r={x:n.x+n.width,y:n.y},o={x:t.x+(n.x+n.width)*e.x,y:t.y+(n.height+n.y)*e.y},s={x:t.x+n.x*e.x,y:t.y+(n.height+n.y)*e.y},l={x:(s.x+o.x)/2,y:s.y-n.height*e.y/2};return{a:Ht(i,l,a),b:Ht(r,l,a),c:Ht(o,l,a),d:Ht(s,l,a),center:l}},Ht=(n,t,e)=>{const a=Math.sin(e),i=Math.cos(e);return{x:(n.x-t.x)*i-(n.y-t.y)*a+t.x,y:(n.x-t.x)*a+(n.y-t.y)*i+t.y}},Es=.352778,bs=.035277,gi=n=>{const t=n.rotation||0,e=St(t),a=Math.cos(e),i=-Math.sin(e);return B.jsx("g",{mask:n.stepName||n.productOverlay?void 0:n.mask,children:B.jsx("g",{transform:`
1320
+ `,aa=[E.SilentIllustration,E.ProductOverlay],fn=n=>{const t=[];for(const a of n.steps){const i=cs(a.stepName,n.stepGroups);if(!i)throw new Error("Workflow step does not belong to a group, all steps must belong to a group. Step: "+a.stepName);const r=t.find(o=>o.name===i.name);r?aa.includes(a.type)?r.silentSteps.push(a):r.renderableSteps.push(a):t.push({name:i.name,title:i.name,renderableSteps:aa.includes(a.type)?[]:[a],silentSteps:aa.includes(a.type)?[a]:[]})}const e="workflow.steps.finish.confirmDesign";return t.push({name:"Finish",title:e,renderableSteps:[{type:E.Finish,stepName:"Finish",stepTitle:e,helpText:"",data:{modelAnimation:n.finalizeStepConfig?n.finalizeStepConfig.modelAnimation:void 0,lookAtAnimation:n.finalizeStepConfig?n.finalizeStepConfig.lookAtAnimation:void 0},conditions:[]}],silentSteps:[]}),t},cs=(n,t)=>t.find(e=>e.stepNames.includes(n)),Bt=(n,t)=>(n.conditions||[]).every(e=>{const a=t[e.targetStepName];if(a&&a.selectedVariants){const i=a.selectedVariants;return e.requiredVariantSelections.some(r=>i.find(o=>o.id===r)!==void 0)}return!1}),ds=(n,t)=>{const e={name:n.name,title:n.title,renderableSteps:n.renderableSteps.filter(a=>Bt(a,t)),silentSteps:n.silentSteps.filter(a=>Bt(a,t))};return e.silentSteps.length===0&&e.renderableSteps.length===0?null:e},dt=(n,t)=>n.map(e=>ds(e,t)).filter(e=>e!==null),us=async(n,t,e=!1)=>{const a=dt(n,t),i=[];for(const o of a)for(const s of o.renderableSteps){let l=0;if(s.type!=="Finish"&&s.type!=="Module"){let c;s.option?.variants?(c=s.option,l=c?.variants?.length||0):(c=await P.getOption(s.option?.id),l=c?.variants?.length||0)}s.silent||(s.type===E.Model||s.type===E.Material||s.type===E.Picture||s.type===E.Shape?(l>1||e)&&i.push(s.stepName):i.push(s.stepName))}const r=a.filter(o=>o.renderableSteps.filter(l=>i.includes(l.stepName)).length>0);for(const o of r)o.renderableSteps=o.renderableSteps.filter(s=>i.includes(s.stepName));return r};class Ua{constructor(){this.timestamp=Date.now()}}class Va{constructor(t,e=!0){this.queue=[],this.activePromise=void 0,this.queueMaxSize=void 0,this.queueMaxSize=t,this.isEnabled=e}enqueue(t){if(this.queue.push(t),this.queueMaxSize!==void 0&&this.queue.length>this.queueMaxSize){const e=this.queue.length-1;for(let a=0;a<e;++a)this.queue.shift()}this.isEnabled&&(this.activePromise||(this.activePromise=this.dequeue()))}get enabled(){return this.isEnabled}set enabled(t){!this.isEnabled&&t&&!this.activePromise&&this.getRemainingQueueSize()>0&&(this.activePromise=this.dequeue()),this.isEnabled=t}hasActivePromise(){return!!this.activePromise}getRemainingQueueSize(){return this.queue.length}async finalize(){return this.activePromise?this.activePromise:Promise.resolve()}async dequeue(){const t=this.queue.shift();if(!t){this.activePromise=void 0;return}try{await t.execute()}catch(e){console.log(e)}finally{await this.dequeue()}}}const N=()=>{const n=()=>Math.floor((1+Math.random())*65536).toString(16).substring(1);return n()+n()+"-"+n()+"-"+n()+"-"+n()+"-"+n()+n()+n()},As=({backgroundColor:n,outlineColor:t,borderRadius:e,configuration:a,elements:i,height:r,maxHeight:o,maxWidth:s,outlineArea:l,position:c,preserveAspectRatio:d,viewBox:u,width:A})=>{const h=e||0,g=2*(l?.scale||1),p=u||{x:0,y:0,width:A,height:r},m=`${p.x} ${p.y} ${p.width} ${p.height}`,f=N(),y=a.purpose===Ot.FreeDesign&&B.jsx("defs",{children:B.jsx("clipPath",{id:"viewboxClip",children:B.jsx("rect",{width:p.width,height:p.height,rx:h})})}),w=a.colorProfiles?.map((v,I)=>B.jsx("color-profile",{name:v.name,xlinkHref:v.key,children:" "},I)),F=i.map(v=>({...v,_renderingConfiguration:a,mask:l?`url(#viewmask-${f})`:void 0})),b=La(F);return B.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",xmlSpace:"preserve",version:"1.1",preserveAspectRatio:d,width:A,height:r,style:{gridColumn:1,gridRow:1,maxWidth:s,maxHeight:o,position:c},viewBox:m,children:[w,y,!!n&&B.jsx("rect",{id:"layout-background",width:p.width,height:p.height,fill:n,rx:h}),B.jsx("g",{id:"element-group",clipPath:a.purpose===Ot.FreeDesign?"url(#viewboxClip)":void 0,children:b.map(v=>Ei(v)).filter(v=>!!v)}),l&&B.jsx("rect",{x:l.x,y:l.y,width:l.width,height:l.height,fill:"none",stroke:l.hidden?"none":t||"#aaaaaa",strokeWidth:g/2,strokeDasharray:`${g*2} ${g}`}),l&&B.jsxs("mask",{id:`viewmask-${f}`,children:[B.jsx("rect",{x:p.x,y:p.y,width:p.width,height:p.height,fill:"black"}),B.jsx("rect",{x:l.x,y:l.y,width:l.width,height:l.height,fill:"white"})]})]})},hs=(n,t,e,a,i)=>{const r=St(i),o=e/2,s=a/2,l=n+o,c=t+s,d=Math.sin(r),u=Math.cos(r),A=o,h=o,g=-s,p=s,m=A*u-g*d,f=h*u-p*d,y=A*d+g*u,w=h*d+p*u,F=Math.max(Math.abs(m),Math.abs(f)),b=Math.max(Math.abs(y),Math.abs(w));return{minX:l-F,maxX:l+F,minY:c-b,maxY:c+b}},gs=(n,t,e)=>{const a=Math.sqrt(Math.pow(t.x-n.x,2)+Math.pow(t.y-n.y,2)),i=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),r=Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2));return Math.acos((i*i+a*a-r*r)/(2*i*a))*(180/Math.PI)},St=n=>n*(Math.PI/180),ms=(n,t,e)=>Math.abs(n-t)<e,ps=(n,t,e)=>{const a=Math.sin(St(e)),i=Math.cos(St(e));return{x:(n.x-t.x)*i-(n.y-t.y)*a+t.x,y:(n.x-t.x)*a+(n.y-t.y)*i+t.y}},fs=(n,t)=>({x:(n.x+t.x)/2,y:(n.y+t.y)/2}),Cs=(n,t,e,a)=>({x:n.x+t?.x*e,y:n.y+t?.y*a}),ws=(n,t,e,a)=>({x:n.x+(t?.x+t?.width)*e,y:n.y+t?.y*a}),ys=(n,t,e,a)=>({x:n.x+(t?.x+t?.width)*e,y:n.y+(t?.y+t?.height)*a}),kt=n=>{switch(n){case H.North:return H.East;case H.East:return H.South;case H.South:return H.West;case H.West:return H.North;case H.Northwest:return H.Northeast;case H.Northeast:return H.Southeast;case H.Southeast:return H.Southwest;case H.Southwest:return H.Northwest}},Ss=(n,t)=>t>45&&t<=135?kt(n):t>135&&t<=225?kt(kt(n)):t>225&&t<=315?kt(kt(kt(n))):n,vs=(n,t={x:0,y:0},e={x:1,y:1})=>{const a=St(n.rotation),i={x:t.x+n.x*e.x,y:t.x+n.y*e.y},r={x:n.x+n.width,y:n.y},o={x:t.x+(n.x+n.width)*e.x,y:t.y+(n.height+n.y)*e.y},s={x:t.x+n.x*e.x,y:t.y+(n.height+n.y)*e.y},l={x:(s.x+o.x)/2,y:s.y-n.height*e.y/2};return{a:Ht(i,l,a),b:Ht(r,l,a),c:Ht(o,l,a),d:Ht(s,l,a),center:l}},Ht=(n,t,e)=>{const a=Math.sin(e),i=Math.cos(e);return{x:(n.x-t.x)*i-(n.y-t.y)*a+t.x,y:(n.x-t.x)*a+(n.y-t.y)*i+t.y}},Es=.352778,bs=.035277,mi=n=>{const t=n.rotation||0,e=St(t),a=Math.cos(e),i=-Math.sin(e);return B.jsx("g",{mask:n.stepName||n.productOverlay?void 0:n.mask,children:B.jsx("g",{transform:`
1321
1321
  matrix(1, 0, 0, 1, ${n.x}, ${n.y})
1322
1322
  matrix(1, 0, 0, 1, ${n.width/2}, ${n.height/2})
1323
1323
  matrix(${a}, ${-i}, ${i}, ${a}, 0, 0)
1324
1324
  matrix(1, 0, 0, 1, ${-n.width/2}, ${-n.height/2})
1325
- `,children:B.jsx("image",{xlinkHref:n.src,preserveAspectRatio:n.preserveAspectRatio,width:n.width,height:n.height})})})},mi=n=>{const t=`spiff-group-clip-${n.id}`,e=n.rotation||0,a=St(e),i=Math.cos(a),r=-Math.sin(a),o=La(n.children),s=()=>B.jsx("clipPath",{id:t,preserveAspectRatio:"none",children:n.clipPath?B.jsx("path",{d:n.clipPath}):B.jsx("rect",{x:0,y:0,width:n.width,height:n.height})});return B.jsxs(B.Fragment,{children:[B.jsx("defs",{children:s()}),B.jsxs("g",{transform:`
1325
+ `,children:B.jsx("image",{xlinkHref:n.src,preserveAspectRatio:n.preserveAspectRatio,width:n.width,height:n.height})})})},pi=n=>{const t=`spiff-group-clip-${n.id}`,e=n.rotation||0,a=St(e),i=Math.cos(a),r=-Math.sin(a),o=La(n.children),s=()=>B.jsx("clipPath",{id:t,preserveAspectRatio:"none",children:n.clipPath?B.jsx("path",{d:n.clipPath}):B.jsx("rect",{x:0,y:0,width:n.width,height:n.height})});return B.jsxs(B.Fragment,{children:[B.jsx("defs",{children:s()}),B.jsxs("g",{transform:`
1326
1326
  matrix(1, 0, 0, 1, ${n.x}, ${n.y})
1327
1327
  matrix(1, 0, 0, 1, ${n.width/2}, ${n.height/2})
1328
1328
  matrix(${i}, ${-r}, ${r}, ${i}, 0, 0)
1329
1329
  matrix(1, 0, 0, 1, ${-n.width/2}, ${-n.height/2})
1330
- `,children:[n._renderingConfiguration?.debug?B.jsx("rect",{stroke:"red",opacity:.3,fill:"none",x:0,y:0,width:n.width,height:n.height}):void 0,o.map(l=>vi(l)).filter(l=>!!l).map(l=>B.jsx("g",{clipPath:`url(#${t})`,children:l}))]})]})},Is=n=>{const t=`spiff-frame-${n.id}`,e=`spiff-frame-threshold-${n.id}`,a=()=>{if(!n.pattern)return"";if(n.pattern.svg){const u=qe(n.pattern.svg,n.pattern.colors||{},!1);return Ve(u)}return n.pattern.src};if(!a())return B.jsx(B.Fragment,{});const i=()=>n.threshold?n.invertThreshold?"1 ".repeat(n.threshold)+"0 ".repeat(256-n.threshold):"0 ".repeat(n.threshold)+"1 ".repeat(256-n.threshold):"",r=()=>B.jsx(B.Fragment,{children:n.useThreshold&&B.jsx("defs",{children:B.jsxs("filter",{id:e,"color-interpolation-filters":"sRGB",children:[B.jsx("feColorMatrix",{type:"matrix",values:`
1330
+ `,children:[n._renderingConfiguration?.debug?B.jsx("rect",{stroke:"red",opacity:.3,fill:"none",x:0,y:0,width:n.width,height:n.height}):void 0,o.map(l=>Ei(l)).filter(l=>!!l).map(l=>B.jsx("g",{clipPath:`url(#${t})`,children:l}))]})]})},Is=n=>{const t=`spiff-frame-${n.id}`,e=`spiff-frame-threshold-${n.id}`,a=()=>{if(!n.pattern)return"";if(n.pattern.svg){const u=ze(n.pattern.svg,n.pattern.colors||{},!1);return Le(u)}return n.pattern.src};if(!a())return B.jsx(B.Fragment,{});const i=()=>n.threshold?n.invertThreshold?"1 ".repeat(n.threshold)+"0 ".repeat(256-n.threshold):"0 ".repeat(n.threshold)+"1 ".repeat(256-n.threshold):"",r=()=>B.jsx(B.Fragment,{children:n.useThreshold&&B.jsx("defs",{children:B.jsxs("filter",{id:e,"color-interpolation-filters":"sRGB",children:[B.jsx("feColorMatrix",{type:"matrix",values:`
1331
1331
  ${n.thresholdSaturation} ${n.thresholdSaturation} ${n.thresholdSaturation} 0 0
1332
1332
  ${n.thresholdSaturation} ${n.thresholdSaturation} ${n.thresholdSaturation} 0 0
1333
1333
  ${n.thresholdSaturation} ${n.thresholdSaturation} ${n.thresholdSaturation} 0 0
@@ -1338,27 +1338,27 @@
1338
1338
  matrix(${l}, ${-c}, ${c}, ${l}, 0, 0)
1339
1339
  matrix(1, 0, 0, 1, ${-n.width/2}, ${-n.height/2})
1340
1340
  matrix(${n.scaleX}, 0, 0, ${n.scaleY}, 0, 0)
1341
- `,children:B.jsx(mi,{id:t,x:0,y:0,rotation:0,width:n.width,height:n.height,clipPath:n.path,children:d()})})})]})},pi=new Map;class Bs{constructor(t){this.font=t,this.glyphsFromText=new Map,this.kerningValues=new Map,this.height=this.calculateApproximateHeight()}getFont(){return this.font}getGlyphs(t){const e=this.glyphsFromText.get(t);if(e)return e;const a=this.font.stringToGlyphs(t);return this.glyphsFromText.set(t,a),a}getApproximateHeight(){return this.height}getExactHeight(t){const e=this.font.stringToGlyphs(t);let a=0,i=0;return e.forEach(r=>{const o=r.getMetrics();a=Math.max(a,o.yMax),i=Math.min(i,o.yMin)}),a-i}getKerningValue(t,e){if(!t.name||!e.name)return;let a=this.kerningValues.get(t.name);a||(a=new Map,this.kerningValues.set(t.name,a));let i=a.get(e.name);return i||(i=this.font.getKerningValue(t,e),a.set(e.name,i)),i}calculateApproximateHeight(){const e=this.font.stringToGlyphs("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");let a=0,i=0;return e.forEach(r=>{const o=r.getMetrics();a=Math.max(a,o.yMax),i=Math.min(i,o.yMin)}),a-i}}const Ps=n=>n.substring(0,5).toLowerCase().trim()==="data:",aa=new Map,Ft=async n=>{if(aa.has(n))return aa.get(n);const e=(async()=>{try{return vt(n).getFont()}catch{if(Ps(n)){const a=_n(n),i=ga.parse(a);return Sa(n,i),i}else{const a=await $e(n,!0),i=ga.parse(a);return Sa(n,i),await Yr(i,n),i}}})();return aa.set(n,e),e},xs=n=>{const t=_n(n),e=ga.parse(t);return Sa(n,e),e},vt=n=>{const t=pi.get(n);if(t)return t;throw new Error("Font metrics unavailable for font")},Sa=(n,t)=>{const e=new Bs(t);return pi.set(n,e),e},Fs=async n=>{const t=ct(),e=t.parseFromString(n,"image/svg+xml"),a=e.firstElementChild,i=new Map;a.querySelectorAll("style").forEach(d=>{Rn.parse(d.innerHTML).stylesheet?.rules.forEach(A=>{if(A.type==="font-face"&&A.declarations){const h=A.declarations.find(m=>m.property==="font-family")?.value,p=A.declarations.find(m=>m.property==="src")?.value?.match(/'(https.*?)'/)?.[1];h&&p&&i.set(h,p)}})});const o=e.querySelectorAll("tspan");for(let d=0;d<o.length;d++){const u=o.item(d),A=u.closest("text"),h=u.closest("g"),g=A.getAttribute("font-family"),p=await Ft(i.get(g)),m=Mr.decode(u.innerHTML),f=A.getAttribute("fill"),y=A.getAttribute("stroke"),w=A.getAttribute("stroke-width"),F=p.getPath(m,0,0,parseInt(A.getAttribute("font-size")??"72")),b=F.getBoundingBox().x2-F.getBoundingBox().x1;let v=0;const I=u.getAttribute("text-anchor");I==="middle"?v=b/2:I==="end"&&(v=b);const M=p.getPath(m,parseFloat(u.getAttribute("x")??"0")-v,parseFloat(u.getAttribute("y")??"0"),parseInt(A.getAttribute("font-size")??"72"));M.fill=f,M.stroke=y,M.strokeWidth=parseFloat(w??"0");const R=M.toSVG(2),T=t.parseFromString(R,"image/svg+xml").firstElementChild;h.appendChild(T)}return e.querySelectorAll("text").forEach(d=>d.remove()),Et().serializeToString(a)},xe=(n,t,e,a)=>Math.max(Ts(n.join(`
1342
- `),e,a),t),Cn=(n,t,e,a,i,r)=>{const o=(r||wi)*i.getApproximateHeight(),s=t.split(`
1343
- `);try{const l=s.flatMap(d=>be(d,n.width,a,i)),c=l.flatMap(d=>d.lines);return{lines:c,requiredHeight:l.flatMap(d=>d.lines).length*(a*o),fontSize:e,requiredWidth:xe(c,n.width,a,i)}}catch{const c=t.split("");return{lines:c,requiredHeight:c.length*(a*o),fontSize:e,requiredWidth:xe(c,n.width,a,i)}}},be=(n,t,e,a)=>{const i=Ct(n,e,a);if(i<=t)return{lines:[n],width:i};if(!(n.indexOf(" ")>-1)){if(n.length<=1)throw new Error(`Character ${n} is wider than region`);const d=Math.floor(n.length/2),u=be(n.slice(0,d),t,e,a),A=be(n.slice(d),t,e,a);return{lines:[...u.lines,...A.lines],width:Math.max(u.width,A.width)}}const o=n.split(" "),s=[];let l=-1/0,c=0;for(;c<o.length;){const d=o[c];if(Ct(d,e,a)>t){const u=be(d,t,e,a);s.push(...u.lines),l=Math.max(l,u.width),c++}else{const u=[d];l=Math.max(l,Ct(d,e,a));let A=c+1,h=!0;for(;A<o.length&&h;){const g=o[A],p=Ct(`${u.join(" ")} ${g}`,e,a);p<=t?(u.push(g),l=Math.max(l,p),A++):h=!1}s.push(u.join(" ")),c=A}}if(l<0)throw new Error(`No max width calculated for text: ${s}.`);return{lines:s,width:l}},Ds=(n,t,e,a,i,r)=>{const o=(r??wi)*t.getApproximateHeight(),s=1/e.unitsPerEm,l=fi(n,s,t),c=n.length*o*s,d=a/l,u=i/c;return Math.min(u,d)},ks=(n,t,e,a)=>{const i=vt(t.fontData.assetUrl),r=i.getFont(),o=t.fontSize/r.unitsPerEm;if(!e)return Cn(t,n,t.fontSize,o,i,a);let s;if(t.text?s=t.text.split(`
1341
+ `,children:B.jsx(pi,{id:t,x:0,y:0,rotation:0,width:n.width,height:n.height,clipPath:n.path,children:d()})})})]})},fi=new Map;class Bs{constructor(t){this.font=t,this.glyphsFromText=new Map,this.kerningValues=new Map,this.height=this.calculateApproximateHeight()}getFont(){return this.font}getGlyphs(t){const e=this.glyphsFromText.get(t);if(e)return e;const a=this.font.stringToGlyphs(t);return this.glyphsFromText.set(t,a),a}getApproximateHeight(){return this.height}getExactHeight(t){const e=this.font.stringToGlyphs(t);let a=0,i=0;return e.forEach(r=>{const o=r.getMetrics();a=Math.max(a,o.yMax),i=Math.min(i,o.yMin)}),a-i}getKerningValue(t,e){if(!t.name||!e.name)return;let a=this.kerningValues.get(t.name);a||(a=new Map,this.kerningValues.set(t.name,a));let i=a.get(e.name);return i||(i=this.font.getKerningValue(t,e),a.set(e.name,i)),i}calculateApproximateHeight(){const e=this.font.stringToGlyphs("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");let a=0,i=0;return e.forEach(r=>{const o=r.getMetrics();a=Math.max(a,o.yMax),i=Math.min(i,o.yMin)}),a-i}}const Ps=n=>n.substring(0,5).toLowerCase().trim()==="data:",na=new Map,Ft=async n=>{if(na.has(n))return na.get(n);const e=(async()=>{try{return vt(n).getFont()}catch{if(Ps(n)){const a=_n(n),i=ga.parse(a);return Sa(n,i),i}else{const a=await Ue(n,!0),i=ga.parse(a);return Sa(n,i),await Jr(i,n),i}}})();return na.set(n,e),e},xs=n=>{const t=_n(n),e=ga.parse(t);return Sa(n,e),e},vt=n=>{const t=fi.get(n);if(t)return t;throw new Error("Font metrics unavailable for font")},Sa=(n,t)=>{const e=new Bs(t);return fi.set(n,e),e},Fs=async n=>{const t=ct(),e=t.parseFromString(n,"image/svg+xml"),a=e.firstElementChild,i=new Map;a.querySelectorAll("style").forEach(d=>{Rn.parse(d.innerHTML).stylesheet?.rules.forEach(A=>{if(A.type==="font-face"&&A.declarations){const h=A.declarations.find(m=>m.property==="font-family")?.value,p=A.declarations.find(m=>m.property==="src")?.value?.match(/'(https.*?)'/)?.[1];h&&p&&i.set(h,p)}})});const o=e.querySelectorAll("tspan");for(let d=0;d<o.length;d++){const u=o.item(d),A=u.closest("text"),h=u.closest("g"),g=A.getAttribute("font-family"),p=await Ft(i.get(g)),m=Tr.decode(u.innerHTML),f=A.getAttribute("fill"),y=A.getAttribute("stroke"),w=A.getAttribute("stroke-width"),F=p.getPath(m,0,0,parseInt(A.getAttribute("font-size")??"72")),b=F.getBoundingBox().x2-F.getBoundingBox().x1;let v=0;const I=u.getAttribute("text-anchor");I==="middle"?v=b/2:I==="end"&&(v=b);const M=p.getPath(m,parseFloat(u.getAttribute("x")??"0")-v,parseFloat(u.getAttribute("y")??"0"),parseInt(A.getAttribute("font-size")??"72"));M.fill=f,M.stroke=y,M.strokeWidth=parseFloat(w??"0");const R=M.toSVG(2),T=t.parseFromString(R,"image/svg+xml").firstElementChild;h.appendChild(T)}return e.querySelectorAll("text").forEach(d=>d.remove()),Et().serializeToString(a)},Fe=(n,t,e,a)=>Math.max(Ts(n.join(`
1342
+ `),e,a),t),Cn=(n,t,e,a,i,r)=>{const o=(r||yi)*i.getApproximateHeight(),s=t.split(`
1343
+ `);try{const l=s.flatMap(d=>Ie(d,n.width,a,i)),c=l.flatMap(d=>d.lines);return{lines:c,requiredHeight:l.flatMap(d=>d.lines).length*(a*o),fontSize:e,requiredWidth:Fe(c,n.width,a,i)}}catch{const c=t.split("");return{lines:c,requiredHeight:c.length*(a*o),fontSize:e,requiredWidth:Fe(c,n.width,a,i)}}},Ie=(n,t,e,a)=>{const i=Ct(n,e,a);if(i<=t)return{lines:[n],width:i};if(!(n.indexOf(" ")>-1)){if(n.length<=1)throw new Error(`Character ${n} is wider than region`);const d=Math.floor(n.length/2),u=Ie(n.slice(0,d),t,e,a),A=Ie(n.slice(d),t,e,a);return{lines:[...u.lines,...A.lines],width:Math.max(u.width,A.width)}}const o=n.split(" "),s=[];let l=-1/0,c=0;for(;c<o.length;){const d=o[c];if(Ct(d,e,a)>t){const u=Ie(d,t,e,a);s.push(...u.lines),l=Math.max(l,u.width),c++}else{const u=[d];l=Math.max(l,Ct(d,e,a));let A=c+1,h=!0;for(;A<o.length&&h;){const g=o[A],p=Ct(`${u.join(" ")} ${g}`,e,a);p<=t?(u.push(g),l=Math.max(l,p),A++):h=!1}s.push(u.join(" ")),c=A}}if(l<0)throw new Error(`No max width calculated for text: ${s}.`);return{lines:s,width:l}},Ds=(n,t,e,a,i,r)=>{const o=(r??yi)*t.getApproximateHeight(),s=1/e.unitsPerEm,l=Ci(n,s,t),c=n.length*o*s,d=a/l,u=i/c;return Math.min(u,d)},ks=(n,t,e,a)=>{const i=vt(t.fontData.assetUrl),r=i.getFont(),o=t.fontSize/r.unitsPerEm;if(!e)return Cn(t,n,t.fontSize,o,i,a);let s;if(t.text?s=t.text.split(`
1344
1344
  `):s=t.input?.split(`
1345
- `)??[""],e.input===n&&t.width===e.width&&t.height===e.height&&t.lineHeight===e.lineHeight)return{lines:s,requiredHeight:t.height,requiredWidth:xe(s,t.width,o,i),fontSize:t.fontSize};const l=t.width!==e.width!=(t.height!==e.height);return t.lineHeight===e.lineHeight&&!l&&e.input===n?{lines:s,requiredHeight:t.height,requiredWidth:xe(s,t.width,o,i),fontSize:Ds(s,i,r,t.width,t.height,a)}:Cn(t,n,t.fontSize,o,i,a)},Ms=(n,t,e,a,i)=>{const o=vt(t.assetUrl).getFont();let s={...n};const l={...n},c=fi(a,e/o.unitsPerEm,vt(t.assetUrl));return c&&c<s.width&&(l.width=c,i==="left"?(l.left+=Math.sin(s.rotation*Math.PI/360)*(s.width-c),l.top+=Math.sin(s.rotation*Math.PI/180)*(c-s.width)/2):i==="right"?l.left+=s.width-c:l.left+=(s.width-c)/2,a&&Ns(a,a).every(([d,u])=>d===u)&&(s=l)),s},na=1,Ct=(n,t,e)=>{let a=0;const i=e.getGlyphs(n);return i.forEach((r,o)=>{if(r.advanceWidth&&(a+=r.advanceWidth),o<i.length-1){const s=e.getKerningValue(r,i[o+1]);a+=s||0}}),a*=t,a},Ts=(n,t,e)=>{let a=0;const i=e.getGlyphs(n);return i.forEach((r,o)=>{if(r.advanceWidth&&(a=Math.max(a,r.advanceWidth)),o<i.length-1){const s=e.getKerningValue(r,i[o+1]);a=Math.max(a,s||0)}}),a*=t,a},fi=(n,t,e)=>{let a=0;return n.forEach(i=>{a=Math.max(a,Ct(i,t,e))}),a},wn={stripControlCharacters:!0,vertical:!1,uppercase:!1},Fe=(n,t=wn)=>{const e={...wn,...t};let a=n||"";return e.stripControlCharacters&&(a=a.replace(/^(?![\u000A\u000D])[\u0000-\u001F\u007F-\u009F]/g,"")),e.uppercase&&(a=a.toUpperCase()),e.vertical&&(a=a.split("").join(`
1346
- `)),a},Ns=(n,t)=>n.map((e,a)=>[e,t[a]]),Qs=(n="center",t=!1)=>t?"center":n,Ci=n=>n==="left"?"start":n==="right"?"end":"middle",ue=(n,t,e)=>n.fontData?{...n,...(()=>{if(n.algorithm===xt.Traditional){const i=ks(t,n,e,n.lineHeight);return{text:i.lines.join(`
1347
- `),height:i.requiredHeight,width:i.requiredWidth,fontSize:i.fontSize,input:t}}else return{text:t}})()}:n,wi=1.1;function Nt(n,t){return yi(n,t.getTemplatingContext())}function yi(n,t){try{n=Tr.compile(n)(t)}catch(e){console.error("failed to render templated text",e)}return n}const Os=n=>{const e=(n.rotation||0)*Math.PI/180,a=Math.cos(e),i=-Math.sin(e),r=`text-path-${n.id}`,o=`text-fill-${n.id}`,s=n.x+(n.curved?0:n.width/2),l=n.y+(n.curved?0:n.height/2),c=yi(n.text||"",n._renderingConfiguration?.templatingContext),d=c.split(`
1345
+ `)??[""],e.input===n&&t.width===e.width&&t.height===e.height&&t.lineHeight===e.lineHeight)return{lines:s,requiredHeight:t.height,requiredWidth:Fe(s,t.width,o,i),fontSize:t.fontSize};const l=t.width!==e.width!=(t.height!==e.height);return t.lineHeight===e.lineHeight&&!l&&e.input===n?{lines:s,requiredHeight:t.height,requiredWidth:Fe(s,t.width,o,i),fontSize:Ds(s,i,r,t.width,t.height,a)}:Cn(t,n,t.fontSize,o,i,a)},Ms=(n,t,e,a,i)=>{const o=vt(t.assetUrl).getFont();let s={...n};const l={...n},c=Ci(a,e/o.unitsPerEm,vt(t.assetUrl));return c&&c<s.width&&(l.width=c,i==="left"?(l.left+=Math.sin(s.rotation*Math.PI/360)*(s.width-c),l.top+=Math.sin(s.rotation*Math.PI/180)*(c-s.width)/2):i==="right"?l.left+=s.width-c:l.left+=(s.width-c)/2,a&&Ns(a,a).every(([d,u])=>d===u)&&(s=l)),s},ia=1,Ct=(n,t,e)=>{let a=0;const i=e.getGlyphs(n);return i.forEach((r,o)=>{if(r.advanceWidth&&(a+=r.advanceWidth),o<i.length-1){const s=e.getKerningValue(r,i[o+1]);a+=s||0}}),a*=t,a},Ts=(n,t,e)=>{let a=0;const i=e.getGlyphs(n);return i.forEach((r,o)=>{if(r.advanceWidth&&(a=Math.max(a,r.advanceWidth)),o<i.length-1){const s=e.getKerningValue(r,i[o+1]);a=Math.max(a,s||0)}}),a*=t,a},Ci=(n,t,e)=>{let a=0;return n.forEach(i=>{a=Math.max(a,Ct(i,t,e))}),a},wn={stripControlCharacters:!0,vertical:!1,uppercase:!1},De=(n,t=wn)=>{const e={...wn,...t};let a=n||"";return e.stripControlCharacters&&(a=a.replace(/^(?![\u000A\u000D])[\u0000-\u001F\u007F-\u009F]/g,"")),e.uppercase&&(a=a.toUpperCase()),e.vertical&&(a=a.split("").join(`
1346
+ `)),a},Ns=(n,t)=>n.map((e,a)=>[e,t[a]]),Qs=(n="center",t=!1)=>t?"center":n,wi=n=>n==="left"?"start":n==="right"?"end":"middle",ue=(n,t,e)=>n.fontData?{...n,...(()=>{if(n.algorithm===xt.Traditional){const i=ks(t,n,e,n.lineHeight);return{text:i.lines.join(`
1347
+ `),height:i.requiredHeight,width:i.requiredWidth,fontSize:i.fontSize,input:t}}else return{text:t}})()}:n,yi=1.1;function Nt(n,t){return Si(n,t.getTemplatingContext())}function Si(n,t){try{n=Nr.compile(n)(t)}catch(e){console.error("failed to render templated text",e)}return n}const Os=n=>{const e=(n.rotation||0)*Math.PI/180,a=Math.cos(e),i=-Math.sin(e),r=`text-path-${n.id}`,o=`text-fill-${n.id}`,s=n.x+(n.curved?0:n.width/2),l=n.y+(n.curved?0:n.height/2),c=Si(n.text||"",n._renderingConfiguration?.templatingContext),d=c.split(`
1348
1348
  `),u=n.strokeColor?.browserValue&&n.strokeThickness?n.strokeColor?.browserValue:void 0,A=n.strokeColor?.browserValue&&n.strokeThickness?n.strokeThickness:void 0;if(n.curved&&!n.paths||!n.fontData)return null;const h=()=>n.textFillImage?`url("#${o}")`:n._renderingConfiguration?.spotColors&&n.fillSpotColorDefinition?`${n.fill} ${ni(n.fillSpotColorDefinition)}`:n.fill;return B.jsxs(B.Fragment,{children:[B.jsxs("defs",{children:[n.textFillImage&&B.jsx("pattern",{id:o,patternUnits:"userSpaceOnUse",width:n.textFillImage.scale*n.textFillImage.width,height:n.textFillImage.scale*n.textFillImage.height,x:0,y:0,children:B.jsx("image",{href:n.textFillImage.src,xlinkHref:n.textFillImage.src,width:n.textFillImage.scale*n.textFillImage.width,height:n.textFillImage.scale*n.textFillImage.height})}),B.jsx("style",{type:"text/css",dangerouslySetInnerHTML:{__html:`
1349
1349
  @font-face {
1350
1350
  font-family: '${n.fontData.name}';
1351
1351
  src: url('${n.fontData.assetUrl}') format('truetype');
1352
1352
  }
1353
- `}}),n.curved&&n.paths?B.jsx("path",{id:r,d:n.paths[0]}):void 0]}),n._renderingConfiguration?.debug?B.jsx("rect",{stroke:"blue",fill:"none",x:n.x,y:n.y,width:n.width,height:n.height}):void 0,B.jsx("g",{mask:n.stepName?void 0:n.mask,children:B.jsx("g",{transform:`matrix(${a}, ${-i}, ${i}, ${a}, ${s}, ${l})`,children:B.jsx("text",{xmlSpace:"preserve",fontFamily:`'${n.fontData.name}'`,fontSize:n.fontSize,fontStyle:"normal",fontWeight:"normal",fill:h(),style:{whiteSpace:"pre",userSelect:"none"},stroke:u,strokeWidth:A,children:n.curved?B.jsx($s,{text:c,curvedPathId:r,align:n.align}):d.map((g,p)=>B.jsx(Rs,{align:n.vertical?"center":n.align,fontSize:n.fontSize,thisLineIdx:p,amountLines:d.length,text:g,textboxHeight:n.height,textboxWidth:n.width,lineHeight:n.lineHeight,vertical:n.vertical,verticalAlign:n.verticalAlign,fontData:n.fontData},p))})})})]})},Rs=n=>{const t=()=>{if(n.lineHeight!==void 0)return n.lineHeight*n.fontSize;const i=vt(n.fontData.assetUrl),r=i.getFont(),o=n.fontSize/r.unitsPerEm;return i.getApproximateHeight()*o},e=()=>n.align==="left"?-n.textboxWidth/2:n.align==="right"?n.textboxWidth/2:0,a=()=>{const i=t(),r=n.textboxHeight/2;if(n.verticalAlign==="top")return-r+n.fontSize*3/4+n.thisLineIdx*i;if(n.verticalAlign==="bottom"){const s=n.amountLines-1-n.thisLineIdx;return r-n.fontSize/4-s*i}const o=(n.amountLines-1)/2;return(n.thisLineIdx-o)*i+n.fontSize/4};return B.jsx("tspan",{textAnchor:Ci(n.align),x:e(),y:`${a()}px`,children:n.text})},$s=n=>{const t=`#${n.curvedPathId}`,e=()=>n.align==="left"?"0%":n.align==="right"?"100%":"50%";return B.jsx("textPath",{startOffset:e(),textAnchor:Ci(n.align),href:t,xlinkHref:t,children:n.text})},Us=n=>{if(n.cachedObjectURL&&!n._renderingConfiguration?.omitCachedFields)return B.jsx(gi,{id:n.id,src:n.cachedObjectURL,x:n.x,y:n.y,width:n.width,height:n.height,rotation:n.rotation,preserveAspectRatio:"none",immutable:n.immutable,mask:n.stepName?void 0:n.mask});const t=n.rotation||0,e=St(t),a=Math.cos(e),i=-Math.sin(e),r=`
1353
+ `}}),n.curved&&n.paths?B.jsx("path",{id:r,d:n.paths[0]}):void 0]}),n._renderingConfiguration?.debug?B.jsx("rect",{stroke:"blue",fill:"none",x:n.x,y:n.y,width:n.width,height:n.height}):void 0,B.jsx("g",{mask:n.stepName?void 0:n.mask,children:B.jsx("g",{transform:`matrix(${a}, ${-i}, ${i}, ${a}, ${s}, ${l})`,children:B.jsx("text",{xmlSpace:"preserve",fontFamily:`'${n.fontData.name}'`,fontSize:n.fontSize,fontStyle:"normal",fontWeight:"normal",fill:h(),style:{whiteSpace:"pre",userSelect:"none"},stroke:u,strokeWidth:A,children:n.curved?B.jsx($s,{text:c,curvedPathId:r,align:n.align}):d.map((g,p)=>B.jsx(Rs,{align:n.vertical?"center":n.align,fontSize:n.fontSize,thisLineIdx:p,amountLines:d.length,text:g,textboxHeight:n.height,textboxWidth:n.width,lineHeight:n.lineHeight,vertical:n.vertical,verticalAlign:n.verticalAlign,fontData:n.fontData},p))})})})]})},Rs=n=>{const t=()=>{if(n.lineHeight!==void 0)return n.lineHeight*n.fontSize;const i=vt(n.fontData.assetUrl),r=i.getFont(),o=n.fontSize/r.unitsPerEm;return i.getApproximateHeight()*o},e=()=>n.align==="left"?-n.textboxWidth/2:n.align==="right"?n.textboxWidth/2:0,a=()=>{const i=t(),r=n.textboxHeight/2;if(n.verticalAlign==="top")return-r+n.fontSize*3/4+n.thisLineIdx*i;if(n.verticalAlign==="bottom"){const s=n.amountLines-1-n.thisLineIdx;return r-n.fontSize/4-s*i}const o=(n.amountLines-1)/2;return(n.thisLineIdx-o)*i+n.fontSize/4};return B.jsx("tspan",{textAnchor:wi(n.align),x:e(),y:`${a()}px`,children:n.text})},$s=n=>{const t=`#${n.curvedPathId}`,e=()=>n.align==="left"?"0%":n.align==="right"?"100%":"50%";return B.jsx("textPath",{startOffset:e(),textAnchor:wi(n.align),href:t,xlinkHref:t,children:n.text})},Us=n=>{if(n.cachedObjectURL&&!n._renderingConfiguration?.omitCachedFields)return B.jsx(mi,{id:n.id,src:n.cachedObjectURL,x:n.x,y:n.y,width:n.width,height:n.height,rotation:n.rotation,preserveAspectRatio:"none",immutable:n.immutable,mask:n.stepName?void 0:n.mask});const t=n.rotation||0,e=St(t),a=Math.cos(e),i=-Math.sin(e),r=`
1354
1354
  matrix(1, 0, 0, 1, ${n.x}, ${n.y})
1355
1355
  matrix(1, 0, 0, 1, ${n.width/2}, ${n.height/2})
1356
1356
  matrix(${a}, ${-i}, ${i}, ${a}, 0, 0)
1357
1357
  matrix(1, 0, 0, 1, ${-n.width/2}, ${-n.height/2})
1358
- `;if(!n.svg)throw new Error(`Illustration element ${n.id} (stepName ${n.stepName}) lacked svg from src ${n.src} at render time.`);return B.jsx("g",{mask:n.stepName?void 0:n.mask,children:B.jsx("g",{transform:r,dangerouslySetInnerHTML:{__html:$a(n.svg,n.width,n.height,n.colors,n._renderingConfiguration?.spotColors)}})})};class Si{constructor(){this.id=N(),this.stateCallbacks=[],this.prevCommands=[],this.nextCommands=[]}registerStateCallback(t){this.stateCallbacks.push(t)}unregisterStateCallback(t){this.stateCallbacks.filter(e=>e!==t)}getState(){return this.state}runStateCallbacks(){this.stateCallbacks.forEach(t=>t())}apply(t,e){if(!this.state)throw new Error(`State not initialized for cc ${this.id}!`);this.state=this.commandReducer(this.state,t),this.runStateCallbacks(),this.nextCommands=[],e||this.prevCommands.push(t)}undo(){if(!this.state)return;const t=this.prevCommands.pop();if(!t)return;const e=t.undo();this.state={...this.state,transaction:e},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,e){const i=this.prevCommands.filter(r=>r.sequenceId===t).pop();i&&(this.prevCommands=this.prevCommands.filter(r=>r.sequenceId!==t),i?.overrideOldState(e),this.prevCommands.push(i))}getLayoutById(t){if(!this.state)throw new Error(`State not initialized for cc ${this.id}!`);const e=this.state.transaction?.layouts?.[t],a=e?.layout;if(!a)throw new Error(`No layout: ${t}`);const i=[...e?.elements||[]];return this.getLayoutDataWithState(a,i)}getAllLayouts(){if(!this.state)throw new Error(`State not initialized for cc ${this.id}!`);const t=[...Object.keys(this.state.transaction?.layouts)];return[...new Set(t)].map(a=>this.getLayoutById(a))}getLayoutDataWithState(t,e){return{layoutState:{layout:t,elements:e},getComponentWithProps:a=>He(t,e,a)}}initialize(t,e){if(e){this.state={transaction:e};return}let a={serializableWorkflow:{steps:[]},layouts:{}};t.forEach(i=>{a=new ja(i).apply(a)}),this.runStateCallbacks(),this.state={transaction:a}}commandReducer(t,e){const a=t.transaction||{layouts:{},serializableWorkflow:{steps:[]}};return{...t,transaction:e.apply(a)}}}const vi=n=>n.type===D.Image?B.jsx(gi,{...n},n.id):n.type===D.Frame?B.jsx(Is,{...n},n.id):n.type===D.Illustration?B.jsx(Us,{...n},n.id):n.type===D.Textbox?B.jsx(Os,{...n},n.id):n.type===D.Group?B.jsx(mi,{...n},n.id):null,He=(n,t,e)=>{const a=e.renderingConfiguration,i=a?.removeExcludedElements?t.filter(r=>!r.excludeFromExport):t;return B.jsx(As,{preserveAspectRatio:void 0,elements:i,backgroundColor:n.transparentBackground?void 0:e.backgroundColor?e.backgroundColor:"white",width:e.width||n.width,height:e.height||n.height,viewBox:a?.region?{x:a.region.left,y:a.region.top,width:a.region.width,height:a.region.height}:{x:0,y:0,width:n.width,height:n.height},configuration:a,outlineArea:e.outlineArea,maxHeight:e.maxHeight,maxWidth:e.maxWidth,position:e.position,borderRadius:e.borderRadius,outlineColor:e.outlineColor})};function La(n){return n.sort((t,e)=>{const a=t.layer||0,i=e.layer||0;if(a<i)return-1;if(a>i)return 1;const r=t.layerIndex||0,o=e.layerIndex||0;return r<o?-1:r>o?1:0})}const At=new Map,Mt=new Map,ia=new Map,Ei=async(n,t)=>{if(!t){if(!n)throw new Error("No region or src supplied. Cannot construct frame!");return va(n)}return et(t)},va=n=>{const t=n.width,e=n.height;return`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${t} ${e}'>
1358
+ `;if(!n.svg)throw new Error(`Illustration element ${n.id} (stepName ${n.stepName}) lacked svg from src ${n.src} at render time.`);return B.jsx("g",{mask:n.stepName?void 0:n.mask,children:B.jsx("g",{transform:r,dangerouslySetInnerHTML:{__html:$a(n.svg,n.width,n.height,n.colors,n._renderingConfiguration?.spotColors)}})})};class vi{constructor(){this.id=N(),this.stateCallbacks=[],this.prevCommands=[],this.nextCommands=[]}registerStateCallback(t){this.stateCallbacks.push(t)}unregisterStateCallback(t){this.stateCallbacks.filter(e=>e!==t)}getState(){return this.state}runStateCallbacks(){this.stateCallbacks.forEach(t=>t())}apply(t,e){if(!this.state)throw new Error(`State not initialized for cc ${this.id}!`);this.state=this.commandReducer(this.state,t),this.runStateCallbacks(),this.nextCommands=[],e||this.prevCommands.push(t)}undo(){if(!this.state)return;const t=this.prevCommands.pop();if(!t)return;const e=t.undo();this.state={...this.state,transaction:e},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,e){const i=this.prevCommands.filter(r=>r.sequenceId===t).pop();i&&(this.prevCommands=this.prevCommands.filter(r=>r.sequenceId!==t),i?.overrideOldState(e),this.prevCommands.push(i))}getLayoutById(t){if(!this.state)throw new Error(`State not initialized for cc ${this.id}!`);const e=this.state.transaction?.layouts?.[t],a=e?.layout;if(!a)throw new Error(`No layout: ${t}`);const i=[...e?.elements||[]];return this.getLayoutDataWithState(a,i)}getAllLayouts(){if(!this.state)throw new Error(`State not initialized for cc ${this.id}!`);const t=[...Object.keys(this.state.transaction?.layouts)];return[...new Set(t)].map(a=>this.getLayoutById(a))}getLayoutDataWithState(t,e){return{layoutState:{layout:t,elements:e},getComponentWithProps:a=>We(t,e,a)}}initialize(t,e){if(e){this.state={transaction:e};return}let a={serializableWorkflow:{steps:[]},layouts:{}};t.forEach(i=>{a=new ja(i).apply(a)}),this.runStateCallbacks(),this.state={transaction:a}}commandReducer(t,e){const a=t.transaction||{layouts:{},serializableWorkflow:{steps:[]}};return{...t,transaction:e.apply(a)}}}const Ei=n=>n.type===D.Image?B.jsx(mi,{...n},n.id):n.type===D.Frame?B.jsx(Is,{...n},n.id):n.type===D.Illustration?B.jsx(Us,{...n},n.id):n.type===D.Textbox?B.jsx(Os,{...n},n.id):n.type===D.Group?B.jsx(pi,{...n},n.id):null,We=(n,t,e)=>{const a=e.renderingConfiguration,i=a?.removeExcludedElements?t.filter(r=>!r.excludeFromExport):t;return B.jsx(As,{preserveAspectRatio:void 0,elements:i,backgroundColor:n.transparentBackground?void 0:e.backgroundColor?e.backgroundColor:"white",width:e.width||n.width,height:e.height||n.height,viewBox:a?.region?{x:a.region.left,y:a.region.top,width:a.region.width,height:a.region.height}:{x:0,y:0,width:n.width,height:n.height},configuration:a,outlineArea:e.outlineArea,maxHeight:e.maxHeight,maxWidth:e.maxWidth,position:e.position,borderRadius:e.borderRadius,outlineColor:e.outlineColor})};function La(n){return n.sort((t,e)=>{const a=t.layer||0,i=e.layer||0;if(a<i)return-1;if(a>i)return 1;const r=t.layerIndex||0,o=e.layerIndex||0;return r<o?-1:r>o?1:0})}const At=new Map,Mt=new Map,ra=new Map,bi=async(n,t)=>{if(!t){if(!n)throw new Error("No region or src supplied. Cannot construct frame!");return va(n)}return et(t)},va=n=>{const t=n.width,e=n.height;return`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${t} ${e}'>
1359
1359
  <path id="target-path" d='M0 0 h ${t} v ${e} h ${-t} Z' />
1360
1360
  </svg>
1361
- `},Vs=async(n,t)=>{if(!t)return;const e=await P.getDefaultVariant(t,n.frameVariantId);if(!e)throw new Error(`No variant with ID: ${n.frameVariantId}`);if(!e.asset)throw new Error(`No asset for variant with ID: ${n.frameVariantId}`);return e},Ae=async n=>{if(ia.has(n))return ia.get(n);const e=(async()=>{if(Mt.has(n))return Mt.get(n);await new Promise(A=>setTimeout(A,0));const i=ct().parseFromString(n,"image/svg+xml"),r=i.querySelector("svg");if(!r)throw new Error("Malformed frame SVG: <svg> tag not found");const o=r.getAttribute("viewBox");if(!o)throw new Error("SVG missing viewBox.");const s=o.split(" "),l=parseFloat(s[3])||1,c=parseFloat(s[2])||1,d=i.getElementById("target-path"),u=i.getElementsByClassName("st0").item(0);if(d){const A=d.getAttribute("d");if(!A)throw new Error("Malformed frame SVG: 'd' attribute not found on target element");const h={path:A,width:c,height:l};return Mt.set(A,h),h}if(u){const A=u.getAttribute("d");if(!A)throw new Error("Malformed frame SVG: 'd' attribute not found on target element");const h={path:A,width:c,height:l};return Mt.set(A,h),h}throw new Error("Malformed frame SVG")})();return ia.set(n,e),e},qa=(n,t,e,a)=>{const i=t.width/t.height,r=n.width/n.height;let o;a?r>i?o=t.height/n.height:o=t.width/n.width:r>i?o=t.width/n.width:o=t.height/n.height,e?.scale!==void 0&&(o*=e?.scale);const s=t.width/2,l=t.height/2,c=s-n.width/2*o,d=e?.left||c,u=l-n.height/2*o,A=e?.top||u;return{x:d,y:A,zoom:o}},Ea=async n=>{if(At.has(n))return At.get(n);if(n.startsWith("data:image/svg+xml")){const e=Nr.dataUriToBuffer(n),a=new TextDecoder().decode(e.buffer),i=Ga(a),r={src:n,width:i.width,height:i.height,aspect:i.width/i.height};return At.set(n,r),r}if((n.split(".").pop()?.toLowerCase()??"")==="svg"){const e=await za(n),a=e.width,i=e.height,r={src:n,width:a,height:i,aspect:a/i};return At.set(n,r),r}else{const e=await $e(n,!0),a=await ce(e),i={src:n,width:a.width,height:a.height,aspect:a.width/a.height};return At.set(n,i),i}},za=async n=>{const t=await et(n);return Ga(t)},yn=n=>n.endsWith("mm")?Number(n.replace("mm",""))*3.7795275591:n.endsWith("px")?Number(n.replace("px","")):Number(n),Ga=n=>{const a=ct().parseFromString(n,"image/svg+xml").querySelector("svg");if(!a)throw new Error("No svg tag found, this svg must be malformed!");const i=a.getAttribute("viewBox"),r=a.getAttribute("width"),o=a.getAttribute("height"),s=o&&r?[0,0,yn(r),yn(o)]:i?.split(" ").map(l=>Number(l));if(!s)throw new Error("No viewbox or width/height values detected on SVG file!");return{width:s[2],height:s[3]}},zt=(n,t)=>{const e=n.layoutState.elements.filter(i=>i.layer===t),a=Math.max(...e.map(i=>i.layerIndex).filter(i=>i!==void 0));return Math.max(a,0)+1},bi=async n=>new Promise(t=>{et(n).then(e=>{t(e)}).catch(e=>console.error(e))}),ra=new Map,re=async n=>{if(ra.has(n))return ra.get(n);const t=async i=>new Promise((r,o)=>{try{if(!(!!URL&&!!URL.createObjectURL))throw new Error("Environment incapable of generating ObjectURL");i.toBlob(l=>{if(!l)throw i.width===0||i.height===0?new Error(`Canvas dimensions are invalid (${i.width},${i.height})`):i.width*i.height>=268435456?new Error(`Canvas dimensions exceed device limit (${i.width},${i.height})`):new Error("Couldn't generate object URL for Illustration, the blob was undefined!");r(URL.createObjectURL(l))})}catch(s){o(s)}}),a=(async()=>{const o=ct().parseFromString(n,"image/svg+xml").firstElementChild;if(!o)throw new Error("Failed to read SVG");const l=Et().serializeToString(o),c=yt(),d=c.getContext("2d"),u=await Ma.Pith.from(d,l,{anonymousCrossOrigin:!0,ignoreDimensions:!1,createCanvas:yt,createImage:le,DOMParser:Ra(),fetch:it}),A=o.getAttribute("width"),h=o.getAttribute("height"),g=2048;if(h&&A){const p=parseFloat(h),f=parseFloat(A)/p;f>1?u.resize(g,g/f):u.resize(g*f,g)}else u.resize(g,g);return await u.render(),await t(c)})();return ra.set(n,a),a},Gt=async(n,t,e,a)=>{const i=n.layoutState.layout.useEditableArea&&n.layoutState.layout.editableArea||{width:n.layoutState.layout.width,height:n.layoutState.layout.height,x:0,y:0},r=i.width<i.height?i.width:i.height,o=n.layoutState.layout.useEditableArea?r/1.3:r/2,s={top:i.y+i.height/2-o/2,left:i.x+i.width/2-o/2,width:o,height:o,rotation:0,panelId:n.layoutState.layout.panelId};if(e&&t===D.Illustration){const l=await rt(await bi(e)),A=ct().parseFromString(l.svg,"image/svg+xml").firstElementChild.getAttribute("viewBox");if(!A)throw new Error("SVG missing viewBox.");const h=s.height,g=A.split(" "),p=parseFloat(g[2])||1,m=parseFloat(g[3])||1,f=p/m;s.height=s.width/f,s.top+=(h-s.height)/2}if(e&&t===D.Image){const l=s.height,c=await $e(e),d=await ce(c),u=d.width/d.height;s.height=s.width/u,s.top+=(l-s.height)/2}if(e&&t===D.Textbox&&a?.text&&a?.fontScale){await Ft(e);const l=vt(e),c=Ct(a.text,a?.fontScale,l);s.width=Math.min(c,i.width*.85),s.left=i.x+i.width/2-s.width/2}return s};class Ls{static async getFrame(t,e){const a=await Ei(e.region,e.src),i=await Ae(a),r=e.region||await Gt(t,D.Frame);return{id:N(),x:r.left,y:r.top,width:r.width,height:r.height,layer:r.layer||0,layerIndex:r.layerIndex||zt(t,r.layer||0),rotation:r.rotation,scaleX:r.width/i.width,scaleY:r.height/i.height,path:i.path,dataWidth:i.width,dataHeight:i.height,type:D.Frame,disablePlaceholder:e.configuration.disablePlaceholder,focalBlur:e.configuration.focalBlur,focalBlurStrength:e.configuration.focalBlurStrength,focalBlurRadius:e.configuration.focalBlurRadius,forceImageCover:e.configuration.forceImageCover,pattern:void 0,immutable:r.immutable}}static async getImage(t,e){const a=e.region||await Gt(t,D.Image,e.src);return{id:N(),src:e.src,type:D.Image,y:a.top,x:a.left,rotation:a.rotation,width:a.width,height:a.height,layer:a.layer||0,layerIndex:a.layerIndex||zt(t,a.layer||0),immutable:a.immutable,preserveAspectRatio:"none"}}static async getTextbox(t,e){const{configuration:a,fontSrc:i,designInputStep:r}=e,o=await Ft(i),s={assetUrl:i,name:o.names.fullName.en},l=r?.text||a.defaultText||"",c=a.replaceableText?a.replaceableText.replace("{{}}",l):l,d=Fe(c,{vertical:a.vertical,uppercase:a.uppercase}),u=e.region||await Gt(t,D.Textbox,i,{text:d,fontScale:a.size?a.size/o.unitsPerEm:void 0}),A=ue({id:N(),type:D.Textbox,x:u.left,y:u.top,width:u.width,height:u.height,align:Qs(a.textAlign,a.vertical),curved:a.curved,fill:r?.color||a.colour||"#000000",fontData:s,layer:u.layer||0,layerIndex:u.layerIndex||zt(t,u.layer||0),paths:a.paths,rotation:u.rotation,vertical:a.vertical,verticalAlign:a.verticalAlign||"middle",algorithm:xt.Traditional,fontSize:a.size||Math.max(Math.round(u.height*.025),1),text:d,input:l},d),h=Ms({...u,height:A.height},s,A.fontSize,A?.text?.split(`
1361
+ `},Vs=async(n,t)=>{if(!t)return;const e=await P.getDefaultVariant(t,n.frameVariantId);if(!e)throw new Error(`No variant with ID: ${n.frameVariantId}`);if(!e.asset)throw new Error(`No asset for variant with ID: ${n.frameVariantId}`);return e},Ae=async n=>{if(ra.has(n))return ra.get(n);const e=(async()=>{if(Mt.has(n))return Mt.get(n);await new Promise(A=>setTimeout(A,0));const i=ct().parseFromString(n,"image/svg+xml"),r=i.querySelector("svg");if(!r)throw new Error("Malformed frame SVG: <svg> tag not found");const o=r.getAttribute("viewBox");if(!o)throw new Error("SVG missing viewBox.");const s=o.split(" "),l=parseFloat(s[3])||1,c=parseFloat(s[2])||1,d=i.getElementById("target-path"),u=i.getElementsByClassName("st0").item(0);if(d){const A=d.getAttribute("d");if(!A)throw new Error("Malformed frame SVG: 'd' attribute not found on target element");const h={path:A,width:c,height:l};return Mt.set(A,h),h}if(u){const A=u.getAttribute("d");if(!A)throw new Error("Malformed frame SVG: 'd' attribute not found on target element");const h={path:A,width:c,height:l};return Mt.set(A,h),h}throw new Error("Malformed frame SVG")})();return ra.set(n,e),e},qa=(n,t,e,a)=>{const i=t.width/t.height,r=n.width/n.height;let o;a?r>i?o=t.height/n.height:o=t.width/n.width:r>i?o=t.width/n.width:o=t.height/n.height,e?.scale!==void 0&&(o*=e?.scale);const s=t.width/2,l=t.height/2,c=s-n.width/2*o,d=e?.left||c,u=l-n.height/2*o,A=e?.top||u;return{x:d,y:A,zoom:o}},Ea=async n=>{if(At.has(n))return At.get(n);if(n.startsWith("data:image/svg+xml")){const e=Qr.dataUriToBuffer(n),a=new TextDecoder().decode(e.buffer),i=Ga(a),r={src:n,width:i.width,height:i.height,aspect:i.width/i.height};return At.set(n,r),r}if((n.split(".").pop()?.toLowerCase()??"")==="svg"){const e=await za(n),a=e.width,i=e.height,r={src:n,width:a,height:i,aspect:a/i};return At.set(n,r),r}else{const e=await Ue(n,!0),a=await ce(e),i={src:n,width:a.width,height:a.height,aspect:a.width/a.height};return At.set(n,i),i}},za=async n=>{const t=await et(n);return Ga(t)},yn=n=>n.endsWith("mm")?Number(n.replace("mm",""))*3.7795275591:n.endsWith("px")?Number(n.replace("px","")):Number(n),Ga=n=>{const a=ct().parseFromString(n,"image/svg+xml").querySelector("svg");if(!a)throw new Error("No svg tag found, this svg must be malformed!");const i=a.getAttribute("viewBox"),r=a.getAttribute("width"),o=a.getAttribute("height"),s=o&&r?[0,0,yn(r),yn(o)]:i?.split(" ").map(l=>Number(l));if(!s)throw new Error("No viewbox or width/height values detected on SVG file!");return{width:s[2],height:s[3]}},zt=(n,t)=>{const e=n.layoutState.elements.filter(i=>i.layer===t),a=Math.max(...e.map(i=>i.layerIndex).filter(i=>i!==void 0));return Math.max(a,0)+1},Ii=async n=>new Promise(t=>{et(n).then(e=>{t(e)}).catch(e=>console.error(e))}),oa=new Map,re=async n=>{if(oa.has(n))return oa.get(n);const t=async i=>new Promise((r,o)=>{try{if(!(!!URL&&!!URL.createObjectURL))throw new Error("Environment incapable of generating ObjectURL");i.toBlob(l=>{if(!l)throw i.width===0||i.height===0?new Error(`Canvas dimensions are invalid (${i.width},${i.height})`):i.width*i.height>=268435456?new Error(`Canvas dimensions exceed device limit (${i.width},${i.height})`):new Error("Couldn't generate object URL for Illustration, the blob was undefined!");r(URL.createObjectURL(l))})}catch(s){o(s)}}),a=(async()=>{const o=ct().parseFromString(n,"image/svg+xml").firstElementChild;if(!o)throw new Error("Failed to read SVG");const l=Et().serializeToString(o),c=yt(),d=c.getContext("2d"),u=await Ma.Pith.from(d,l,{anonymousCrossOrigin:!0,ignoreDimensions:!1,createCanvas:yt,createImage:le,DOMParser:Ra(),fetch:it}),A=o.getAttribute("width"),h=o.getAttribute("height"),g=2048;if(h&&A){const p=parseFloat(h),f=parseFloat(A)/p;f>1?u.resize(g,g/f):u.resize(g*f,g)}else u.resize(g,g);return await u.render(),await t(c)})();return oa.set(n,a),a},Gt=async(n,t,e,a)=>{const i=n.layoutState.layout.useEditableArea&&n.layoutState.layout.editableArea||{width:n.layoutState.layout.width,height:n.layoutState.layout.height,x:0,y:0},r=i.width<i.height?i.width:i.height,o=n.layoutState.layout.useEditableArea?r/1.3:r/2,s={top:i.y+i.height/2-o/2,left:i.x+i.width/2-o/2,width:o,height:o,rotation:0,panelId:n.layoutState.layout.panelId};if(e&&t===D.Illustration){const l=await rt(await Ii(e)),A=ct().parseFromString(l.svg,"image/svg+xml").firstElementChild.getAttribute("viewBox");if(!A)throw new Error("SVG missing viewBox.");const h=s.height,g=A.split(" "),p=parseFloat(g[2])||1,m=parseFloat(g[3])||1,f=p/m;s.height=s.width/f,s.top+=(h-s.height)/2}if(e&&t===D.Image){const l=s.height,c=await Ue(e),d=await ce(c),u=d.width/d.height;s.height=s.width/u,s.top+=(l-s.height)/2}if(e&&t===D.Textbox&&a?.text&&a?.fontScale){await Ft(e);const l=vt(e),c=Ct(a.text,a?.fontScale,l);s.width=Math.min(c,i.width*.85),s.left=i.x+i.width/2-s.width/2}return s};class Ls{static async getFrame(t,e){const a=await bi(e.region,e.src),i=await Ae(a),r=e.region||await Gt(t,D.Frame);return{id:N(),x:r.left,y:r.top,width:r.width,height:r.height,layer:r.layer||0,layerIndex:r.layerIndex||zt(t,r.layer||0),rotation:r.rotation,scaleX:r.width/i.width,scaleY:r.height/i.height,path:i.path,dataWidth:i.width,dataHeight:i.height,type:D.Frame,disablePlaceholder:e.configuration.disablePlaceholder,focalBlur:e.configuration.focalBlur,focalBlurStrength:e.configuration.focalBlurStrength,focalBlurRadius:e.configuration.focalBlurRadius,forceImageCover:e.configuration.forceImageCover,pattern:void 0,immutable:r.immutable}}static async getImage(t,e){const a=e.region||await Gt(t,D.Image,e.src);return{id:N(),src:e.src,type:D.Image,y:a.top,x:a.left,rotation:a.rotation,width:a.width,height:a.height,layer:a.layer||0,layerIndex:a.layerIndex||zt(t,a.layer||0),immutable:a.immutable,preserveAspectRatio:"none"}}static async getTextbox(t,e){const{configuration:a,fontSrc:i,designInputStep:r}=e,o=await Ft(i),s={assetUrl:i,name:o.names.fullName.en},l=r?.text||a.defaultText||"",c=a.replaceableText?a.replaceableText.replace("{{}}",l):l,d=De(c,{vertical:a.vertical,uppercase:a.uppercase}),u=e.region||await Gt(t,D.Textbox,i,{text:d,fontScale:a.size?a.size/o.unitsPerEm:void 0}),A=ue({id:N(),type:D.Textbox,x:u.left,y:u.top,width:u.width,height:u.height,align:Qs(a.textAlign,a.vertical),curved:a.curved,fill:r?.color||a.colour||"#000000",fontData:s,layer:u.layer||0,layerIndex:u.layerIndex||zt(t,u.layer||0),paths:a.paths,rotation:u.rotation,vertical:a.vertical,verticalAlign:a.verticalAlign||"middle",algorithm:xt.Traditional,fontSize:a.size||Math.max(Math.round(u.height*.025),1),text:d,input:l},d),h=Ms({...u,height:A.height},s,A.fontSize,A?.text?.split(`
1362
1362
  `)||[],A.align);return{...A,x:h.left,y:h.top+(u.height-h.height)/2,width:h.width,height:h.height}}static async getShape(t,e){const a=`
1363
1363
  <svg
1364
1364
  xmlns="http://www.w3.org/2000/svg"
@@ -1379,7 +1379,7 @@
1379
1379
  fill="${e.color}"
1380
1380
  />
1381
1381
  </svg>
1382
- `,i={};i["spiff-fill-shape"]={browserValue:e.color};const r=e.region?.item||await Gt(t,D.Illustration),o=N();return{stepRegion:e.region?.item,stepRegionIndex:e.region?.index,colors:i,id:o,svg:a,type:D.Illustration,y:r.top,x:r.left,rotation:r.rotation,width:r.width,height:r.height,layer:r.layer||0,layerIndex:r.layerIndex||zt(t,r.layer||0),immutable:r.immutable}}static async getIllustration(t,e){const a=e.region?.item||await Gt(t,D.Illustration,e.src),i=await rt(await bi(e.src)),r=await re(i.svg),o=N();return{cachedObjectURL:r,stepRegion:e.region?.item,stepRegionIndex:e.region?.index,colors:i.colors,id:o,src:e.src,svg:i.svg,type:D.Illustration,y:a.top,x:a.left,rotation:a.rotation,width:a.width,height:a.height,layer:a.layer||0,layerIndex:a.layerIndex||zt(t,a.layer||0),immutable:a.immutable}}}class z extends Error{constructor(){super("Element not found!"),Object.setPrototypeOf(this,z.prototype)}}const V=(n,t)=>_(n,t).elements.find(i=>i.id===n),_=(n,t)=>{const e=Object.values(t).find(a=>a.elements.some(i=>i.id===n));if(!e)throw new z;return e},tt=(n,t)=>{const e=[...t.elements.filter(i=>i.id!==n.id),n],a=La(e);return{layout:t.layout,elements:a,modificationID:N()}},ba=async n=>{const t=[...Object.keys(n.layouts)],e=[...new Set(t)];for(let a=0;a<e.length;a++){const i=e[a],r=n.layouts[i];await Promise.all(r.elements.map(async o=>{if(o.type==="illustration"){const s=o;if(s.src&&!s.svg){const l=await et(s.src),c=await rt(l);s.svg=$a(c.svg,s.width,s.height,s.colors)}}else if(o.type==="frame"){const s=o;if(s.pattern?.colors&&s.pattern?.src){const l=await et(s.pattern?.src),c=await rt(l);s.pattern.svg=c.svg}}isNaN(o.x)&&(o.x=0),isNaN(o.y)&&(o.y=0),isNaN(o.width)&&(o.width=0),isNaN(o.height)&&(o.height=0),isNaN(o.rotation)&&(o.rotation=0)}))}for(const a in n.layouts){const i=n.layouts[a].elements.filter(o=>o.type===D.Illustration);for(let o=0;o<i.length;++o){const s=i[o];if(s.src&&s.svg)try{s.cachedObjectURL=await re(s.svg)}catch(l){console.log(l)}}const r=n.layouts[a].elements.filter(o=>o.type===D.Textbox);for(let o=0;o<r.length;++o){const s=r[o];s.fontData?.assetUrl&&await Ft(s.fontData.assetUrl)}}};class ${undo(){if(!this.oldState)throw new Error("Cannot undo.");return this.oldState}overrideOldState(t){this.oldState=t}}class Sn extends ${constructor(t){super(),this.serializableWorkflow=t}apply(t){return this.oldState=t,{...t,serializableWorkflow:this.serializableWorkflow}}}class qs extends ${constructor(t,e,a){super(),this.id=t,this.x=e,this.y=a}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,x:this.x,y:this.y},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class zs extends ${constructor(t,e){super(),this.id=t,this.angle=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,rotation:this.angle},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class Gs extends ${constructor(t,e,a){super(),this.id=t,this.width=Math.abs(e),this.height=Math.abs(a)}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;let a={...e,width:this.width,height:this.height};if(e.type==="frame"){const o=a;o.scaleX=o.scaleX*this.width/e.width,o.scaleY=o.scaleY*this.height/e.height}else if(e.type==="textbox"){const o=a,s=(!o.algorithm||o.algorithm===xt.Autosize?o.text:o.input)??"";a=ue(o,s,e)}const i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class U extends ${constructor(t){super(),this.commands=t}apply(t){return this.oldState=t,this.commands.reduce((e,a)=>a.apply(e),t)}}class ja extends ${constructor(t){super(),this.layout=t}apply(t){return this.oldState=t,{...t,layouts:{...t.layouts,[this.layout.id]:{elements:[],layout:{...this.layout},modificationID:N()}}}}}class G extends ${constructor(t,e){super(),this.element=t,this.layout=e}apply(t){this.oldState=t,t.layouts[this.layout.id]||(t.layouts[this.layout.id]={layout:this.layout,elements:[],modificationID:""});const e=t.layouts[this.layout.id].elements;if(e.find(s=>s.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||e.length===0){const s=[...e,this.element];return this.element.layerIndex===void 0&&(this.element.layerIndex=this.assignIndex(this.element,s)),{...t,layouts:{...t.layouts,[this.layout.id]:{...t.layouts[this.layout.id],elements:s,modificationID:N()}}}}const i=e[e.length-1],r=i.productOverlay?i:null;r&&e.pop();let o;if(this.element.layerIndex!==null&&this.element.layerIndex!==void 0)o=[...e,this.element].sort((s,l)=>s.layerIndex!==void 0&&l.layerIndex!==void 0?s.layerIndex-l.layerIndex:0);else{const s=this.assignIndex(this.element,e);this.element.layerIndex=s!==void 0?s:0,o=[...e,this.element]}return r&&o.push(r),{...t,layouts:{...t.layouts,[this.layout.id]:{...t.layouts[this.layout.id],elements:o,modificationID:N()}}}}assignIndex(t,e){if(e.length===0)return 0;const a=e.filter(i=>(i.layer||0)===(t.layer||0)).sort((i,r)=>(i.layerIndex||0)-(r.layerIndex||0))[e.length-1]?.layerIndex;return a!==void 0?a+1:0}}class Dt extends ${constructor(t){super(),this.id=t}apply(t){this.oldState=t;let e=!1;const a=Object.values(t.layouts).map(r=>(r.elements.filter(s=>s.id!==this.id).length!==r.elements.length&&(e=!0),{...r,elements:r.elements.filter(s=>s.id!==this.id),modificationID:N()}));e||console.log(`Failed to delete element ${this.id}`);const i={};return a.forEach(r=>{i[r.layout.id]=r}),{...t,layouts:i}}}class Ii extends ${constructor(t,e,a){super(),this.id=t,this.color=e,this.textFillSpotColor=a}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,fill:this.color,fillSpotColorDefinition:this.textFillSpotColor,textFillImage:void 0},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class oa extends ${constructor(t,e){super(),this.id=t,this.imageFill=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,textFillImage:this.imageFill},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class Bi extends ${constructor(t,e){super(),this.id=t,this.size=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,fontSize:this.size},i=_(e.id,Object.values(t.layouts)),r=(!e.algorithm||e.algorithm===xt.Autosize?e.text:e.input)??"",o=tt(ue(a,r),i);return{...t,layouts:{...t.layouts,[i.layout.id]:o}}}}class Ia extends ${constructor(t,e){super(),this.id=t,this.fontData=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,fontData:this.fontData},i=_(e.id,Object.values(t.layouts)),r=(!e.algorithm||e.algorithm===xt.Autosize?e.text:e.input)??"",o=tt(ue(a,r),i);return{...t,layouts:{...t.layouts,[i.layout.id]:o}}}}class Pi extends ${constructor(t,e){super(),this.id=t,this.align=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,align:this.align},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class js extends ${constructor(t,e,a){super(),this.id=t,this.imageData=e,this.offsets=a}apply(t){this.oldState=t;const e=_(this.id,Object.values(t.layouts)),a=e.elements.findIndex(s=>s.id===this.id),i=e.elements[a].pattern,r=[...e.elements];r.splice(a,1,{...e.elements[a],pattern:{...i,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,svg:this.imageData.svg,colors:this.imageData.colors}});const o={...e,elements:r,modificationID:N()};return{...t,layouts:{...t.layouts,[e.layout.id]:o}}}}class Hs extends ${constructor(t,e,a,i,r){super(),this.id=t,this.useThreshold=e,this.invertThreshold=a,this.threshold=i,this.thresholdSaturation=r}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,useThreshold:this.useThreshold,invertThreshold:this.invertThreshold,threshold:this.threshold,thresholdSaturation:this.thresholdSaturation},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class Ws extends ${constructor(t,e){super(),this.id=t,this.src=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,src:this.src},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class xi extends ${constructor(t,e){super(),this.id=t,this.text=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a=_(e.id,Object.values(t.layouts)),i=tt(ue(e,this.text,e),a);return{...t,layouts:{...t.layouts,[a.layout.id]:i}}}}class sa extends ${constructor(t,e,a){super(),this.id=t,this.strokeColor=e,this.strokeThickness=a}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,strokeColor:this.strokeColor,strokeThickness:this.strokeThickness},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class Ba extends ${constructor(t,e,a){super(),this.id=t,this.className=e,this.fill=a}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a=e.colors||{},i=a[this.className];typeof this.fill=="string"?a[this.className]={browserValue:this.fill,spotColor:i?.spotColor,pmsValue:i?.pmsValue}:a[this.className]={browserValue:this.fill.browserValue,spotColor:i?.spotColor,pmsValue:this.fill.pmsValue};const r={...e,colors:a},o=_(e.id,Object.values(t.layouts)),s=tt(r,o);return{...t,layouts:{...t.layouts,[o.layout.id]:s}}}}class Ys extends ${constructor(t,e,a){super(),this.id=t,this.svgBody=e,this.objectURL=a}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,svg:this.svgBody,cachedObjectURL:this.objectURL},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class Js extends ${constructor(t){super(),this.id=t}apply(t){if(this.oldState=t,!V(this.id,Object.values(t.layouts)).id)throw new z;const a=Object.values(t.layouts).find(o=>o.elements.find(s=>s.id===this.id));if(!a)throw new Error("Layout missing from state!");const i=a.elements.findIndex(o=>o.id===this.id);a.elements.push(a.elements.splice(i,1)[0]);const r=[...a.elements];return r.forEach((o,s)=>o.layerIndex=s),{...t,layouts:{...t.layouts,[a.layout.id]:{...t.layouts[a.layout.id],elements:r,modificationID:N()}}}}}class Ks extends ${constructor(t){super(),this.id=t}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a=Object.values(t.layouts).find(s=>s.elements.find(l=>l.id===this.id));if(!a)throw new Error("Layout missing from state!");const i=a.elements.findIndex(s=>s.id===this.id);a.elements.splice(i,1),a.elements.unshift(e);const r=[...a.elements],o=r.splice(i,1)[0];return r.splice(i,0,o),r.forEach((s,l)=>s.layerIndex=l),{...t,layouts:{...t.layouts,[a.layout.id]:{...t.layouts[a.layout.id],elements:r,modificationID:N()}}}}}class _s extends ${constructor(t){super(),this.id=t}apply(t){if(this.oldState=t,!V(this.id,Object.values(t.layouts)).id)throw new z;const a=Object.values(t.layouts).find(l=>l.elements.find(c=>c.id===this.id));if(!a)throw new Error("Layout missing from state!");const i=a.elements.findIndex(l=>l.id===this.id),r=i+1,o=[...a.elements],s=o.splice(i,1)[0];return o.splice(r,0,s),o.forEach((l,c)=>l.layerIndex=c),{...t,layouts:{...t.layouts,[a.layout.id]:{...t.layouts[a.layout.id],elements:o,modificationID:N()}}}}}class Xs extends ${constructor(t){super(),this.id=t}apply(t){if(this.oldState=t,!V(this.id,Object.values(t.layouts)).id)throw new z;const a=Object.values(t.layouts).find(l=>l.elements.find(c=>c.id===this.id));if(!a)throw new Error("Layout missing from state!");const i=a.elements.findIndex(l=>l.id===this.id),r=i-1,o=[...a.elements],s=o.splice(i,1)[0];return o.splice(r,0,s),o.forEach((l,c)=>l.layerIndex=c),{...t,layouts:{...t.layouts,[a.layout.id]:{...t.layouts[a.layout.id],elements:o,modificationID:N()}}}}}class vn{constructor(t,e,a){this.processRegion=async i=>{const r=this.layouts.find(l=>l.panelId===i.panelId);if(!r)throw new Y(i);let o="";if(this.configuration.type===E.ProductOverlay){let l="";if(this.product?.overlayImageUrl&&(l=this.product.overlayImageUrl),o=l,!l)throw new lt(this.configuration,"Couldn't find an asset for product overlay step")}const s=this.evaluateAssetType();if(s===D.Image){const l=this.configuration.type===E.SilentIllustration?this.configuration.data.asset?.fileLink:this.product?.overlayImageUrl;if(!l)throw new Error("Undefined raster silent step source");const c={stepName:this.configuration.stepName,id:N(),src:l,type:s,y:i.top,x:i.left,width:i.width,height:i.height,layer:i.layer,layerIndex:i.layerIndex,immutable:i.immutable,productOverlay:this.configuration.type===E.ProductOverlay?!0:void 0,rotation:i.rotation,excludeFromExport:this.configuration.data.excludeFromPrint,preserveAspectRatio:"none"};return{regionElement:{id:c.id,region:i},command:new G(c,r)}}else{const l=this.configuration.type===E.SilentIllustration?this.configuration.data.asset?.fileLink:o,d=await rt(await(async()=>new Promise((A,h)=>{if(!l){h("Undefined vector silent step source");return}et(l,!0).then(g=>{A(g)}).catch(g=>console.error(g))}))()),u={stepName:this.configuration.stepName,id:N(),cachedObjectURL:await re(d.svg),src:l,svg:d.svg,colors:d.colors,type:s,y:i.top,x:i.left,width:i.width,height:i.height,layer:i.layer,layerIndex:i.layerIndex,rotation:i.rotation,immutable:i.immutable,productOverlay:this.configuration.type===E.ProductOverlay?!0:void 0,excludeFromExport:this.configuration.data.excludeFromPrint};return{regionElement:{id:u.id,region:i},command:new G(u,r)}}},this.configuration=t,this.layouts=e,this.product=a||void 0}async trigger(){if(!this.configuration.data.regions)throw new lt(this.configuration,"Missing regions.");if(this.configuration.type===E.SilentIllustration){const t=this.configuration.data.regions.map(this.processRegion);return Promise.all(t)}else return this.configuration.type===E.ProductOverlay?Promise.all(this.configuration.data.regions.map(t=>{if(!this.layouts.find(a=>t.panelId===a.panelId))throw new Y(t);return this.processRegion(t)})):Promise.reject("Unknown silent step. This is a bug")}evaluateAssetType(){const t=this.configuration.type===E.ProductOverlay&&this.product?.overlayImageUrl?this.product.overlayImageUrl.toLowerCase():this.configuration.data.asset?.fileLink?.toLowerCase().split("?")[0];return t?.startsWith("data:image/png")||t?.endsWith(".jpeg")||t?.endsWith(".jpg")||t?.endsWith(".png")?D.Image:(t?.endsWith(".svg")||t?.startsWith("image/svg+xml"),D.Illustration)}}const Fi=async n=>{const t=`${ht.getServicesApiUrl()}/shortener`;try{return(await(await it(t,{method:"POST",body:JSON.stringify({longUrl:n}),headers:{"Content-Type":"application/json"}})).json()).shortUrl}catch(e){throw console.error(e),new Re("Failed to shorten URL, see console.")}};class Di{async poll(){try{if(await this.predicate()){this.onSuccess(),this.pollingId>-1&&window.clearInterval(this.pollingId);return}}catch{}this.attempts+=1,this.attempts<this.maxAttempts?this.pollingId=window.setTimeout(this.poll.bind(this),this.interval):this.onFailure()}constructor(t,e,a,i=3e3,r=10){this.onSuccess=e,this.onFailure=a,this.predicate=t,this.attempts=0,this.pollingId=-1,this.interval=i,this.maxAttempts=r,this.poll()}}class Zs{async init(t,e,a){return a&&await this.reload(t,e,a),null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),l=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName).map(c=>({id:c.id,region:c.stepRegion,regionIndex:c.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[],l,async()=>{const c=i?.storage?.videoShortUrl,d=i?.storage?.videoUrl;e.updateStorage(t.stepName,{videoShortUrl:c,videoUrl:d})})}async regenerateQRCode(t,e,a,i){const r=async()=>{const h=(await Pe([e]))[0],g=h?.versions?.find(p=>p.name==="mpeg4")?.link;return{asset:h,link:g}},o=await new Promise((h,g)=>{new Di(async()=>!!(await r()).link,async()=>{const p=await r();if(!p.link||!p.link)throw new Rt(p.asset);h({rel:"mpeg4",href:p.link})},()=>{g("Poller timed out with 40 attempts @ 3 second interval")},3e3,40)});t.forEach(h=>a.getCommandDispatcher()(new Dt(h.id)));const s=i.data.baseUrl.slice(0,4)==="http"?"":"https://",l=new URL(s+i.data.baseUrl);l.searchParams.append("video",btoa(JSON.stringify([o]))),l.pathname=l.pathname+(l.pathname.slice(-1)==="/"?"":"/");const c=l.toString();if(c.length>=2e3)throw new Re("Cannot create QR code, URL too long.");const d=await Fi(c);if(!i.data||!i.data.regions)throw new lt(i,"Missing regions.");const u=await this.regionElements(i),A=await this.command(d,u,a,i.stepName);return A&&(A.command&&a.getCommandDispatcher()(A.command),A.followup&&await A.followup()),await a.setSelectionsAndElements(i.stepName,[],u,async()=>{a.updateStorage(i.stepName,{videoShortUrl:d,videoUrl:o.href})}),d}async regionElements(t){const e=(a,i)=>({id:N(),region:a,regionIndex:i});return t.data.regions.map(e)}async command(t,e,a,i){const r=a.getLayouts(),s=`data:image/svg+xml;base64,${btoa(await Un.toString(t,{type:"svg"}))}`,l=e.map(c=>{const d=c.region,u=r.find(A=>A.panelId===d?.panelId);if(!u&&d)throw new Y(d);if(u&&!d)throw new Error("Region not found");if(!u||!d)throw new Error("Neither a region or layout found!");return new G({stepRegion:d,stepRegionIndex:c.regionIndex,stepName:i,id:c.id,src:s,type:D.Image,y:d.top,x:d.left,width:d.width,height:d.height,rotation:0},u)});return{command:new U(l),followup:async()=>{}}}}const Ha=new Zs;class De{constructor(){this.frameSourceSvg=async(t,e)=>{if(!t)return va(e);const a=t.asset;if(!a)throw new wt(t);const i=a.fileLink;if(i)return et(i,!0);throw new Rt(a)}}async init(t,e,a){const i=a?.serializableWorkflow.steps.find(s=>s.stepName===t.stepName);if(i?.storage&&Object.keys(i.storage).length!==0||i?.selectedVariants&&i.selectedVariants.length!==0)return await this.reload(t,e,a),null;t.mandatory&&e.setMandatoryFulfilled(t.stepName,!1),e.markStepsAsInitialised([t.stepName]);let r;const o=e.getWorkflowExperience().getBundle();if(o&&t.globalPropertyAspectConfigurations){const s=o.getGlobalPropertyStateManager(),l=t.globalPropertyAspectConfigurations[0],c=s.getAspectStorage(l.aspectName);c&&c.originalAssetKey&&(r=(await W.getLocalOrFromServer(c.originalAssetKey)).fileLink)}if(t.option&&t.option.variants&&t.option.variants.length>0){const s=t.option,l=await P.getDefaultVariant(s,t.overrideDefaultVariantId);return l?this.selectVariantCommand(t,l,[],e,void 0,r||t.data.placeholderImageUrl):null}return this.selectVariantCommand(t,void 0,[],e,void 0,r||t.data.placeholderImageUrl)}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),l=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName).map(c=>({id:c.id,region:c.stepRegion,regionIndex:c.stepRegionIndex}));if(!t.option||(t.option.variants||[]).length===0){const c=t.data.regions.map(d=>va(d));e.updateStorage(t.stepName,{currentFrameSources:c})}if(i){const c=async()=>{const d=i.storage?.colors,u=i.storage?.framePatternSrc,A=i.storage?.frameOffsetsList;if(e.updateMetadata(t.stepName,{frameOffsetsList:A,framePatternSrc:u}),u){const h=e.getWorkflowExperience().getStepById(t.stepName)?.frameService;if(!h)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(u,h,!0,d),e.updateMetadata(t.stepName,{image:u}),e.updateStorage(t.stepName,{framePatternSrc:u}),this.validateColorCount(t,e)}if(A?.some(h=>h.zoom)){const h=e.getWorkflowExperience().getStepById(t.stepName)?.frameService;if(!h)throw new Error("Frame service unavailable, cannot load pattern!");h.updateOffsets(A)}e.setMandatoryFulfilled(t.stepName,!0)};if(i.selectedVariants&&i.selectedVariants.length>0){const d=i.selectedVariants[0].id;if(t.option&&d){const u=t.option.variants?.find(A=>A.id===d);u&&await e.setSelectionsAndElements(t.stepName,[u],l,async()=>{const A=await Promise.all(t.data.regions.map(h=>this.frameSourceSvg(u,h)));e.updateStorage(t.stepName,{currentFrameSources:A}),await c()})}}else await e.setSelectionsAndElements(t.stepName,[],l,c)}}async availableColors(t,e){return(await P.ensureFullOption(t.data.colorOption))?.variants?.map(i=>({fill:i.color,stroke:i.color,variant:i,pmsValue:i.name}))??[]}selectImage(t,e,a,i=!0){const r=De.patternSource(e),o=a.getStepStorage(t.stepName)?.framePatternSrc;if(o&&o===r)return Promise.resolve();a.setEditedStatus(t.stepName,!0);const s=e.fileLink||"";return s.endsWith(".pdf")||s.endsWith(".eps")||s.endsWith(".ai")?new Promise(l=>{a.addPoller(new Di(async()=>{const d=(await W.getFromServer(e.key||"")).versions?.find(A=>A.name==="svg");return d?(await it(d.link)).status===200:!1},()=>{W.getLocalOrFromServer(e.key||"").then(c=>{this.loadPatternFromAsset(c,t,a,i).then(l)})},()=>{throw new Re("Failed to resolve transcoded PDF")}))}):this.loadPatternFromAsset(e,t,a,i)}async selectVariant(t,e,a,i,r){const o=await this.selectVariantCommand(t,e,a,i,r);o&&(o.command&&i.getCommandDispatcher()(o.command),o.followup&&await o.followup())}getCreateElementCommand(t,e,a,i,r){return new G({id:t,type:D.Frame,x:e.left,y:e.top,width:e.width,height:e.height,layer:e.layer,layerIndex:e.layerIndex,rotation:e.rotation,scaleX:e.width/r.frameData.width,scaleY:e.height/r.frameData.height,path:r.frameData.path,dataWidth:r.frameData.width,dataHeight:r.frameData.height,stepRegion:e,stepRegionIndex:a,stepName:r.stepName,disablePlaceholder:r.disablePlaceholder,pattern:r.pattern,immutable:e.immutable},i)}async loadPatternFromString(t,e,a=!0,i=void 0,r){if(t.endsWith("svg")){const o=await za(t),s=o.width,l=o.height,c=await et(t);if(r){const A=c.match(/<(image|linearGradient|radialGradient)(\s|>|\/>)/gim);if(A&&A.length>0)throw new Error("Vector files may not include images or gradients when a color limit is specified.")}const d=await rt(c),u={src:t,width:s,height:l,aspect:s/l,svg:d.svg,colors:i??d.colors};At.set(t,u),e.setPatternData(u,a)}else{const o=await $e(t,!0),s=await ce(o),l={src:t,width:s.width,height:s.height,aspect:s.width/s.height,svg:void 0,colors:void 0};At.set(t,l),e.setPatternData(l,a)}}async changeColors(t,e,a){const i=e.getWorkflowExperience().getStepById(t.stepName)?.frameService;if(!i||!i.getImageData()?.svg){console.warn("changeColors was called without an SVG being assigned to a frame step");return}const r=await this.calculateColorMetadata(i,t,a);e.updateMetadata(t.stepName,{colors:r.metadataColors}),e.updateStorage(t.stepName,{colors:r.storageColors}),i.setPatternData({...i.getImageData(),colors:r.newColors},!1),this.validateColorCount(t,e)}getUniqueColorCount(t,e){const a=e.getWorkflowExperience().getStepById(t.stepName)?.frameService;if(!a)return 0;const i=a.getImageData()?.colors??{},r=[];for(const o in i){const s=i[o];if(s.pmsValue){const l=s.pmsValue.trim().toLocaleLowerCase();r.includes(l)||r.push(l)}else if(s.browserValue){const l=ai(s.browserValue);r.includes(l)||r.push(l)}}return r.length}async calculateColorMetadata(t,e,a){if(!t.getImageData()?.svg)return{newColors:void 0,metadataColors:void 0,storageColors:void 0};const i={...t.getImageData().colors??{}},r={};Object.entries(i).forEach(([l,c])=>{const d={browserValue:c.browserValue};r[l]=d});for(const[l,c]of a.entries())i[l]={browserValue:c.browserValue,pmsValue:c.pmsValue},r[l]=c;let o=Array.from(Object.values(i)).map(l=>l.browserValue);const s=await P.ensureFullOption(e.data.colorOption);return s&&s.variants?.forEach(l=>{o=o.map(c=>c.toLowerCase()===l.color?.toLowerCase()?l.name:c)}),{newColors:i,metadataColors:o,storageColors:r}}validateColorCount(t,e){const a=t.data.colorPickerEnabled?t.data.maxColors??0:0;e.setStepError(t.stepName,"colors",a>0&&this.getUniqueColorCount(t,e)>a?"workflow.steps.frame.tooManyColors":void 0)}async selectVariantCommand(t,e,a,i,r,o){const s=i.getWorkflowExperience().getStepById(t.stepName)?.frameService;if(!s)throw new Error("Frame service unavailable, cannot load pattern!");const l=await Promise.all(t.data.regions.map(h=>this.frameSourceSvg(e,h)));r&&r(!0);const c=t.data.initialZoomLevel,d=await Promise.all(t.data.regions.map(async(h,g)=>{const p=await Ae(l[g]),m=s.getImageData(),f=a.map(I=>new Dt(I.id)),y=m?qa(m,p,c&&!t.data.forceImageCover?{scale:c}:void 0,t.data.forceImageCover):void 0,w=m?{id:N(),src:m.src,x:y?.x||0,y:y?.y||0,width:m.width,height:m.height,scaleX:y?.zoom||1,scaleY:y?.zoom||1,rotation:0}:void 0,F=N(),v=i.getLayouts().find(I=>I.panelId===h.panelId);if(!v)throw new Y(h);return{command:this.getCreateElementCommand(F,h,g,v,{frameData:p,pattern:w,disablePlaceholder:t.data.disablePlaceholder,stepName:t.stepName}),regionEl:{id:F,region:h,regionIndex:g},removeExistingCommands:f}})),u=d.map(h=>h.command),A=d.map(h=>h.removeExistingCommands).flat();return{command:new U([...u,...A]),followup:async()=>{r&&r(!1),await i.setSelectionsAndElements(t.stepName,e?[e]:[],[...d.map(h=>h.regionEl)],async()=>{if(i.updateStorage(t.stepName,{currentFrameSources:l}),o){const h=i.getWorkflowExperience().getStepById(t.stepName)?.frameService;if(!h)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(o,h,!0)}})}}}static patternSource(t){const e=t.versions?.find(i=>i.name==="svg");if(e?.link)return e.link;const a=t.fileLink;if(a)return a;throw new Rt(t)}async loadPatternFromAsset(t,e,a,i){const r=De.patternSource(t),o=a.markUpdatePending(),s=a.getWorkflowExperience().getStepById(e.stepName)?.frameService;if(!s)throw a.markUpdateCompleted(o),new Error("Frame service unavailable, cannot load pattern!");try{await this.loadPatternFromString(r,s,i,void 0,e.data.colorPickerEnabled&&!!e.data.maxColors&&e.data.maxColors>0)}catch(c){throw a.markUpdateCompleted(o),c}const l=await this.calculateColorMetadata(s,e,new Map(Object.entries(s.getImageData()?.colors??{})));a.updateMetadata(e.stepName,{image:r,colors:l.metadataColors}),a.updateStorage(e.stepName,{framePatternSrc:r,colors:l.storageColors}),a.markUpdateCompleted(o),a.setMandatoryFulfilled(e.stepName,!0),a.setInformationResults(a.getInformationResults().filter(c=>c.stepID===e.stepName)),this.validateColorCount(e,a)}}const pt=new De;class tl{async getIllustrationBody(t){return new Promise(e=>{et(t,!0).then(a=>{e(a)}).catch(a=>console.error(a))})}getCreateElementCommand(t,e,a,i,r){return new G({stepRegion:e,stepRegionIndex:a,stepName:r.stepName,colors:r.svg.colors,id:t,src:r.src,svg:r.svg.svg,cachedObjectURL:r.objectURL,type:D.Illustration,y:e.top,x:e.left,rotation:e.rotation,width:e.width,height:e.height,layer:e.layer,layerIndex:e.layerIndex,immutable:e.immutable},i)}getColors(t,e){const a=e.getRegionElements(t.stepName)||[];if(a.length===0)return[];try{return V(a[0].id,e.getAllLayoutData()).colors}catch{return[]}}async init(t,e,a){const i=await P.getOptionForStep(t);if(!i)throw new lt(t,"No option configured for illustration step.");if(a)return await this.reload(t,e,a);{const r=await P.getDefaultVariant(i,t.overrideDefaultVariantId);if(r)return await this.selectVariantCommand(t,r,[],e)}return null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),s=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName),l=await P.getOptionForStep(t);if(i?.selectedVariants){const c=i.selectedVariants[0].id;if(l&&c){const d=l.variants?.find(u=>u.id===c);if(d){const u=s.map(A=>({id:A.id,region:A.stepRegion,regionIndex:A.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[d],u,async()=>{e.updateMetadata(t.stepName,{colors:i.storage?.colors})})}}else throw new Error("Required illustration variant no longer available")}return null}async availableColors(t,e){const a=await P.ensureFullOption(t.data.colorOption);return a?a?a.variants?.map(i=>({fill:i.color,stroke:i.color,variant:i,pmsValue:i.name})):[]:[]}async changeColorsCommand(t,e,a,i,r){const o={};for(const[d,u]of r.entries())typeof u=="string"?o[d]={browserValue:u,spotColor:void 0,pmsValue:void 0}:o[d]={browserValue:u.browserValue,spotColor:u.spotColor,pmsValue:u.pmsValue};const s=$a(t,e,a,o),l=await re(s),c=[];for(const d of i){for(const[u,A]of r.entries())c.push(new Ba(d,u,A));c.push(new Ys(d,s,l))}return new U(c)}async changeColors(t,e,a,i){if(e.length===0)return;const r=V(e[0].id,a.getCommandContext().getAllLayouts().map(A=>A.layoutState)),o={...r.colors},s={};Object.entries(o).forEach(([A,h])=>{const g={browserValue:h.browserValue,pmsValue:h.pmsValue},p=h.spotColor;p&&(g.spotColor={profileName:p.profileName,namedColor:p.namedColor}),s[A]=g});for(const[A,h]of i.entries()){const g=typeof h=="string"?h:h.browserValue,p=typeof h=="string"?void 0:h.pmsValue;A===""?Object.keys(o).forEach(m=>{o[m]={browserValue:g,spotColor:o[m]?.spotColor,pmsValue:p},s[m]={browserValue:g}}):(o[A]={browserValue:g,spotColor:o[A]?.spotColor,pmsValue:p},s[A]={browserValue:g})}let l=Array.from(Object.values(o)).map(A=>A.browserValue);const c=await P.ensureFullOption(t.data.colorOption);c&&c.variants?.forEach(A=>{l=l.map(h=>h.toLowerCase()===A.color?.toLowerCase()?A.name:h)}),a.updateMetadata(t.stepName,{colors:l});const d=new Map;if(Object.entries(o).forEach(([A,h])=>{d.set(A,h)}),!r.svg)throw new Error("Colors changed before SVG loaded. This should never happen!");const u=await this.changeColorsCommand(r.svg,r.width,r.height,e.map(A=>A.id),d);a.updateStorage(t.stepName,{colors:s}),a.getCommandDispatcher()(u)}async selectVariant(t,e,a,i,r){i(!0);try{const o=await this.selectVariantCommand(t,e,a,r);o&&(o.command&&r.getCommandDispatcher()(o.command),o.followup&&await o.followup())}finally{i(!1)}}async selectVariantCommand(t,e,a,i){if(!t.data||!t.data.regions)throw new lt(t,"Missing regions.");const r=e.asset;if(!r)throw new wt(e);const o=r.fileLink;if(!o)throw new Rt(r);t.mandatory&&i.setMandatoryFulfilled(t.stepName,!1);const s=a.map(m=>new Dt(m.id)),l=await rt(await this.getIllustrationBody(o)),c=await re(l.svg),d=(m,f)=>{const y=i.getLayouts().find(F=>F.panelId===m.panelId);if(!y)throw new Y(m);const w=N();return{regionElement:{id:w,region:m,regionIndex:f},command:this.getCreateElementCommand(w,m,f,y,{stepName:t.stepName,src:o,objectURL:c,svg:l})}},u=t.data.regions.map(d),A=u.map(m=>m.command),h=[...s,...A];let g=Array.from(Object.values(l.colors)).map(m=>m.browserValue);const p=await P.ensureFullOption(t.data.colorOption);return p&&p.variants?.forEach(m=>{g=g.map(f=>f.toLowerCase()===m.color?.toLowerCase()?m.name:f)}),i.updateMetadata(t.stepName,{colors:g}),{command:new U(h),followup:async()=>{const m=u.map(y=>y.regionElement);await i.setSelectionsAndElements(t.stepName,[e],m);const f=r.assetConfiguration?.defaultColorVariants||[];if(f.length!==0){const y={};(r.assetConfiguration?.channelNumbers||[]).forEach(F=>{const b=f.find(v=>v.channelNumber===F.number);b&&(y[`${F.id.replace(/\W/g,"")}`]={browserValue:b?.variant?.color||""})}),await this.changeColors(t,m,i,new Map(Object.entries(y)))}if(t.data.colorPickerEnabled){const y=await this.availableColors(t,i)||[],w=Object.keys(l.colors),F=y.length===1&&w.length===1;if(F){const b=y[0],v=w[0];await this.changeColors(t,m,i,new Map([[v,b.variant.color]]))}!F&&f.length===0&&await this.changeColors(t,m,i,new Map)}}}}}const Jt=new tl;class el{async init(t,e,a){const i=t.option;if(!i)throw new ae(t);if(a)await this.reload(t,e,a);else{const r=await P.getDefaultVariant(i,t.overrideDefaultVariantId);if(r)return await this.selectVariantLambda(t,r,e,()=>{})}return null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),s=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName),l=t.option;if(!l)throw new ae(t);if(i?.selectedVariants){const c=i.selectedVariants[0].id;if(c){const d=l.variants?.find(u=>u.id===c);if(d){const u=d.material,A=s.map(h=>({id:h.id,region:h.stepRegion,regionIndex:h.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[d],A,async()=>{const h=e.getModelContainer();if(h){const g=t.data.targetMaterials.map(p=>h.applyMaterialVariant(p,l.id||"",u||{}));Promise.all(g)}})}}}}async selectVariant(t,e,a,i){const r=await this.selectVariantLambda(t,e,a,i);r&&(r.command&&a.getCommandDispatcher()(r.command),r.followup&&await r.followup())}async selectVariantLambda(t,e,a,i){const r=a.getModelContainer();i(!0);const o=e.material;if(!o)throw i(!1),new wt(e);return{command:void 0,followup:async()=>{await a.setSelectionsAndElements(t.stepName,[e],[],async()=>{try{r&&t.data.targetMaterials.forEach(s=>{t.option&&r.applyMaterialVariant(s,t.option.id||"",o)})}finally{i(!1)}})}}}}const Wa=new el;class al{async init(t,e,a){const i=await P.getOptionForStep(t);if(!i)throw new ae(t);if(a)await this.reload(t,e,a);else{const r=await P.getDefaultVariant(i,t.overrideDefaultVariantId);if(r)return await this.selectVariantLambda(t,r,e,()=>{})}return null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),s=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName),l=await P.getOptionForStep(t);if(i?.selectedVariants){const c=i.selectedVariants[0].id;if(l&&c){const d=l.variants?.find(u=>u.id===c);if(d){const u=s.map(A=>({id:A.id,region:A.stepRegion,regionIndex:A.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[d],u,async()=>{const A=e.getModelContainer();if(A&&t.option){const h=d.asset?.fileLink;if(!h)throw new wt(d);await A.applyModelVariant(t.stepName||"",{model:h,contextService:e.getLayoutPreviewService()},t.data.replaceProductModel||!1)}})}}}}async selectVariant(t,e,a,i){const r=await this.selectVariantLambda(t,e,a,i);r&&(r.command&&a.getCommandDispatcher()(r.command),r.followup&&await r.followup())}async selectVariantLambda(t,e,a,i){i(!0);const r=e.asset?.fileLink;if(!r)throw new wt(e);return{command:void 0,followup:async()=>{await a.setSelectionsAndElements(t.stepName,[e],[],async()=>{try{const o=a.getModelContainer();o&&await o.applyModelVariant(t.stepName,{model:r,contextService:a.getLayoutPreviewService()},t.data.replaceProductModel||!1)}finally{i(!1)}})}}}}const Ya=new al;class nl{async init(t,e,a){if(a)await this.reload(t,e,a);else return e.updateMetadata(t.stepName,{text:""}),this.changeTextCommand(t,"",e,()=>{});return null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),l=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName).map(c=>({id:c.id,region:c.stepRegion,regionIndex:c.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[],l,async()=>{e.updateStorage(t.stepName,{text:i?.storage?.text}),e.setMandatoryFulfilled(t.stepName,i?.storage?.text!=="")})}async changeText(t,e,a,i){const r=await this.changeTextCommand(t,e,a,i);r&&(r.command&&a.getCommandDispatcher()(r.command),r.followup&&await r.followup())}async changeTextCommand(t,e,a,i){const r=a.getRegionElements(t.stepName),o=a.getStepSpecificServices(t.stepName)?.module;if(!o)return console.error("Missing module."),null;const s=a.getWorkflowExperience().getProfanityList(),l=this.validateInput(t,e,s,i);if(l.errorData)return a.setMandatoryFulfilled(t.stepName,!1),l.errorData.blockedProfanity?console.error("Blocked profanity."):l.errorData.hitCharacterLimit?console.error("Too many characters."):l.errorData.unsupportedCharacters&&console.error("Unsupported characters."),null;if(a.setMandatoryFulfilled(t.stepName,e!==""),!t.data||!t.data.regions||t.data.regions.length<=0)return console.error("Missing configuration."),null;a.updateStorage(t.stepName,{text:e}),a.updateMetadata(t.stepName,{text:e});const c=(d,u,A,h)=>{const g=h||N(),m=a.getLayouts().find(y=>y.panelId===u.panelId);if(!m)return console.error(`Can not find layout for region: ${u.panelId}`),null;const f=[];return h&&f.push(new Dt(g)),f.push(new G({stepRegion:u,stepRegionIndex:A,stepName:t.stepName,colors:{},id:g,svg:d,type:D.Illustration,y:u.top,x:u.left,rotation:u.rotation,width:u.width,height:u.height,layer:u.layer,layerIndex:u.layerIndex,immutable:u.immutable},m)),{id:g,region:u,command:new U(f)}};if(r.length>0){const u=r.map(A=>{if(!A.region)return null;const h=o.svgPrint(e,A.region);return c(h,A.region,A.regionIndex,A.id)}).filter(A=>!!A).filter(A=>!!A).map(A=>A&&A.command);return{command:new U(u),followup:async()=>{}}}else{const d=t.data.regions.map((A,h)=>c(o.svgPrint(e,A),A,h)),u=d.filter(A=>!!A).map(A=>A&&A.command);return{command:new U(u),followup:async()=>{const A=d.filter(h=>h).map(h=>h&&{id:h.id,region:h.region});await a.setSelectionsAndElements(t.stepName,[],A)}}}}validateInput(t,e,a,i){if(t.data&&t.data.maxLength){const o=t.data.maxLength;if(e.length>o)return i("Too many characters."),{input:e,helperData:{},errorData:{hitCharacterLimit:!0}}}if(!/^$|^[a-zA-Z0-9 ]+$/.test(e))return i("Unsupported characters."),{input:e,helperData:{},errorData:{unsupportedCharacters:!0}};const r=ma.split(e.toLowerCase());for(const o of r)for(const s in a){const l=a[s].toLowerCase().replace(/\s/g,"");if(o===l)return i("Blocked profanity."),{input:e,helperData:{},errorData:{blockedProfanity:!0}}}return i(""),{input:e,helperData:{}}}}const Ja=new nl;class il{async init(t,e,a){const i=await P.getOptionForStep(t);if(!i)throw new lt(t,"Missing option for picture step");if(a)await this.reload(t,e,a);else{const r=await P.getDefaultVariant(i,t.overrideDefaultVariantId);if(r)return e.markStepsAsInitialised([t.stepName]),this.selectVariantCommand(t,r,e,()=>{})}return e.markStepsAsInitialised([t.stepName]),null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),s=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName),l=await P.getOptionForStep(t);if(i?.selectedVariants){const c=i.selectedVariants[0].id;if(l&&c){const d=l.variants?.find(u=>u.id===c);if(d){const u=s.map(A=>({id:A.id,region:A.stepRegion,regionIndex:A.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[d],u)}}}}async selectVariant(t,e,a,i){const r=await this.selectVariantCommand(t,e,a,i);r&&(r.command&&a.getCommandDispatcher()(r.command),r.followup&&await r.followup())}async selectVariantCommand(t,e,a,i){const r=e.asset;if(!r)throw new wt(e);const o=r?.fileLink;if(!o)return console.error("No URL for picture!"),null;i(!0),t.mandatory&&a.setMandatoryFulfilled(t.stepName,!1);const l=a.getRegionElements(t.stepName).map(u=>new Dt(u.id)),c=(u,A)=>{const g=a.getLayouts().find(m=>m.panelId===u.panelId);if(!g)throw new Y(u);const p=N();return{regionElement:{id:p,region:u,regionIndex:A},command:new G({stepName:t.stepName,stepRegion:u,stepRegionIndex:A,id:p,src:o,type:D.Image,y:u.top,x:u.left,rotation:u.rotation,width:u.width,height:u.height,layer:u.layer,layerIndex:u.layerIndex,immutable:u.immutable,preserveAspectRatio:"none"},g)}},d=t.data.regions.map(c);return{command:new U([...l,...d.map(u=>u.command)]),followup:async()=>{await a.setSelectionsAndElements(t.stepName,[e],d.map(u=>u.regionElement),async()=>{i(!1)})}}}}const Ka=new il;class rl{async init(t,e,a){const i=t.option;if(!i)throw new lt(t,"Missing option for question step");if(a)await this.reload(t,e,a);else{const r=await P.getDefaultVariant(i,t.overrideDefaultVariantId);if(r)return this.selectVariantLambda(t,r.id||"",e)}return null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),r=await P.getOptionForStep(t);if(i?.selectedVariants){const o=i.selectedVariants[0].id;if(r&&o){const s=r.variants?.find(l=>l.id===o);s&&await e.setSelectionsAndElements(t.stepName,[s],[])}}}async selectVariant(t,e,a){const i=await this.selectVariantLambda(t,e,a);i&&(i.command&&a.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantLambda(t,e,a){const i=await P.getOptionForStep(t);if(!i)throw new lt(t,"Missing option for question step");const r=i.variants;if(!r)throw new lt(t,"Option for question step is missing variants");const o=r.length>1?r.find(s=>s.id===e):r[0];if(!o)throw new Error(`Failed to find selected variant ${e} in option ${i.id} of step ${t.stepName} (${t.stepTitle})`);return{command:void 0,followup:async()=>{await a.setSelectionsAndElements(t.stepName,[o],[])}}}}const _a=new rl;class ol{constructor(){this.shapeFillId="spiff-fill-shape"}async availableColours(t){const e=await P.getOptionForStep(t);return e?e.variants?.map(a=>({fill:a.color,stroke:a.color,variant:a}))||[]:[]}setCustomColor(t,e,a){const i=a.getLayouts(),o=(a.getRegionElements(e.stepName)||[]).map(s=>{const l=s.region;if(!i.find(d=>d.panelId===l?.panelId))throw new Y(l);return new Ba(s.id,this.shapeFillId,t)}).filter(s=>!!s);a.getCommandDispatcher()(new U(o)),a.updateStorage(e.stepName,{colour:t})}async init(t,e,a){const i=await P.getOptionForStep(t);if(!i)throw new ae(t);if(a)await this.reload(t,e,a);else{const r=await P.getDefaultVariant(i,t.overrideDefaultVariantId);return r?this.selectVariantCommand(t,{fill:r.color,stroke:r.color,variant:r},[],e):null}return null}async selectVariant(t,e,a,i){const r=await this.selectVariantCommand(t,e,a,i);r&&(r.command&&i.getCommandDispatcher()(r.command),r.followup&&await r.followup())}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),s=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName),l=await P.getOptionForStep(t);if(i?.selectedVariants){const c=i.selectedVariants[0].id;if(l&&c){const d=l.variants?.find(u=>u.id===c);if(d){const u=s.map(A=>({id:A.id,region:A.stepRegion,regionIndex:A.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[d],u,async()=>{e.updateStorage(t.stepName,{colour:i?.storage?.colour||""})})}}}}async selectVariantCommand(t,e,a,i){const r=i.getLayouts(),o=i.getStepStorage(t.stepName)?.colour,s=()=>{if(e.variant?.color==="#custom")return o||"#FFFFFF";if(e.variant?.color)return e.variant.color;throw new Error("Failed to resolve color for shape step.")};if(a.length>0){const l=d=>{const u=d.region;if(!r.find(g=>g.panelId===u?.panelId))throw new Y(u);const h=s();return new Ba(d.id,this.shapeFillId,h)},c=a.map(l).filter(d=>!!d);return{command:new U(c),followup:async()=>{await i.setSelectionsAndElements(t.stepName,e.variant?[e.variant]:[],a),i.updateStorage(t.stepName,{colour:s()})}}}else{const l=(A,h)=>{const g=r.find(w=>w.panelId===A.panelId);if(!g)throw new Y(A);const p=s(),m=`
1382
+ `,i={};i["spiff-fill-shape"]={browserValue:e.color};const r=e.region?.item||await Gt(t,D.Illustration),o=N();return{stepRegion:e.region?.item,stepRegionIndex:e.region?.index,colors:i,id:o,svg:a,type:D.Illustration,y:r.top,x:r.left,rotation:r.rotation,width:r.width,height:r.height,layer:r.layer||0,layerIndex:r.layerIndex||zt(t,r.layer||0),immutable:r.immutable}}static async getIllustration(t,e){const a=e.region?.item||await Gt(t,D.Illustration,e.src),i=await rt(await Ii(e.src)),r=await re(i.svg),o=N();return{cachedObjectURL:r,stepRegion:e.region?.item,stepRegionIndex:e.region?.index,colors:i.colors,id:o,src:e.src,svg:i.svg,type:D.Illustration,y:a.top,x:a.left,rotation:a.rotation,width:a.width,height:a.height,layer:a.layer||0,layerIndex:a.layerIndex||zt(t,a.layer||0),immutable:a.immutable}}}class z extends Error{constructor(){super("Element not found!"),Object.setPrototypeOf(this,z.prototype)}}const V=(n,t)=>_(n,t).elements.find(i=>i.id===n),_=(n,t)=>{const e=Object.values(t).find(a=>a.elements.some(i=>i.id===n));if(!e)throw new z;return e},tt=(n,t)=>{const e=[...t.elements.filter(i=>i.id!==n.id),n],a=La(e);return{layout:t.layout,elements:a,modificationID:N()}},ba=async n=>{const t=[...Object.keys(n.layouts)],e=[...new Set(t)];for(let a=0;a<e.length;a++){const i=e[a],r=n.layouts[i];await Promise.all(r.elements.map(async o=>{if(o.type==="illustration"){const s=o;if(s.src&&!s.svg){const l=await et(s.src),c=await rt(l);s.svg=$a(c.svg,s.width,s.height,s.colors)}}else if(o.type==="frame"){const s=o;if(s.pattern?.colors&&s.pattern?.src){const l=await et(s.pattern?.src),c=await rt(l);s.pattern.svg=c.svg}}isNaN(o.x)&&(o.x=0),isNaN(o.y)&&(o.y=0),isNaN(o.width)&&(o.width=0),isNaN(o.height)&&(o.height=0),isNaN(o.rotation)&&(o.rotation=0)}))}for(const a in n.layouts){const i=n.layouts[a].elements.filter(o=>o.type===D.Illustration);for(let o=0;o<i.length;++o){const s=i[o];if(s.src&&s.svg)try{s.cachedObjectURL=await re(s.svg)}catch(l){console.log(l)}}const r=n.layouts[a].elements.filter(o=>o.type===D.Textbox);for(let o=0;o<r.length;++o){const s=r[o];s.fontData?.assetUrl&&await Ft(s.fontData.assetUrl)}}};class ${undo(){if(!this.oldState)throw new Error("Cannot undo.");return this.oldState}overrideOldState(t){this.oldState=t}}class Sn extends ${constructor(t){super(),this.serializableWorkflow=t}apply(t){return this.oldState=t,{...t,serializableWorkflow:this.serializableWorkflow}}}class qs extends ${constructor(t,e,a){super(),this.id=t,this.x=e,this.y=a}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,x:this.x,y:this.y},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class zs extends ${constructor(t,e){super(),this.id=t,this.angle=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,rotation:this.angle},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class Gs extends ${constructor(t,e,a){super(),this.id=t,this.width=Math.abs(e),this.height=Math.abs(a)}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;let a={...e,width:this.width,height:this.height};if(e.type==="frame"){const o=a;o.scaleX=o.scaleX*this.width/e.width,o.scaleY=o.scaleY*this.height/e.height}else if(e.type==="textbox"){const o=a,s=(!o.algorithm||o.algorithm===xt.Autosize?o.text:o.input)??"";a=ue(o,s,e)}const i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class U extends ${constructor(t){super(),this.commands=t}apply(t){return this.oldState=t,this.commands.reduce((e,a)=>a.apply(e),t)}}class ja extends ${constructor(t){super(),this.layout=t}apply(t){return this.oldState=t,{...t,layouts:{...t.layouts,[this.layout.id]:{elements:[],layout:{...this.layout},modificationID:N()}}}}}class G extends ${constructor(t,e){super(),this.element=t,this.layout=e}apply(t){this.oldState=t,t.layouts[this.layout.id]||(t.layouts[this.layout.id]={layout:this.layout,elements:[],modificationID:""});const e=t.layouts[this.layout.id].elements;if(e.find(s=>s.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||e.length===0){const s=[...e,this.element];return this.element.layerIndex===void 0&&(this.element.layerIndex=this.assignIndex(this.element,s)),{...t,layouts:{...t.layouts,[this.layout.id]:{...t.layouts[this.layout.id],elements:s,modificationID:N()}}}}const i=e[e.length-1],r=i.productOverlay?i:null;r&&e.pop();let o;if(this.element.layerIndex!==null&&this.element.layerIndex!==void 0)o=[...e,this.element].sort((s,l)=>s.layerIndex!==void 0&&l.layerIndex!==void 0?s.layerIndex-l.layerIndex:0);else{const s=this.assignIndex(this.element,e);this.element.layerIndex=s!==void 0?s:0,o=[...e,this.element]}return r&&o.push(r),{...t,layouts:{...t.layouts,[this.layout.id]:{...t.layouts[this.layout.id],elements:o,modificationID:N()}}}}assignIndex(t,e){if(e.length===0)return 0;const a=e.filter(i=>(i.layer||0)===(t.layer||0)).sort((i,r)=>(i.layerIndex||0)-(r.layerIndex||0))[e.length-1]?.layerIndex;return a!==void 0?a+1:0}}class Dt extends ${constructor(t){super(),this.id=t}apply(t){this.oldState=t;let e=!1;const a=Object.values(t.layouts).map(r=>(r.elements.filter(s=>s.id!==this.id).length!==r.elements.length&&(e=!0),{...r,elements:r.elements.filter(s=>s.id!==this.id),modificationID:N()}));e||console.log(`Failed to delete element ${this.id}`);const i={};return a.forEach(r=>{i[r.layout.id]=r}),{...t,layouts:i}}}class Bi extends ${constructor(t,e,a){super(),this.id=t,this.color=e,this.textFillSpotColor=a}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,fill:this.color,fillSpotColorDefinition:this.textFillSpotColor,textFillImage:void 0},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class sa extends ${constructor(t,e){super(),this.id=t,this.imageFill=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,textFillImage:this.imageFill},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class Pi extends ${constructor(t,e){super(),this.id=t,this.size=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,fontSize:this.size},i=_(e.id,Object.values(t.layouts)),r=(!e.algorithm||e.algorithm===xt.Autosize?e.text:e.input)??"",o=tt(ue(a,r),i);return{...t,layouts:{...t.layouts,[i.layout.id]:o}}}}class Ia extends ${constructor(t,e){super(),this.id=t,this.fontData=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,fontData:this.fontData},i=_(e.id,Object.values(t.layouts)),r=(!e.algorithm||e.algorithm===xt.Autosize?e.text:e.input)??"",o=tt(ue(a,r),i);return{...t,layouts:{...t.layouts,[i.layout.id]:o}}}}class xi extends ${constructor(t,e){super(),this.id=t,this.align=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,align:this.align},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class js extends ${constructor(t,e,a){super(),this.id=t,this.imageData=e,this.offsets=a}apply(t){this.oldState=t;const e=_(this.id,Object.values(t.layouts)),a=e.elements.findIndex(s=>s.id===this.id),i=e.elements[a].pattern,r=[...e.elements];r.splice(a,1,{...e.elements[a],pattern:{...i,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,svg:this.imageData.svg,colors:this.imageData.colors}});const o={...e,elements:r,modificationID:N()};return{...t,layouts:{...t.layouts,[e.layout.id]:o}}}}class Hs extends ${constructor(t,e,a,i,r){super(),this.id=t,this.useThreshold=e,this.invertThreshold=a,this.threshold=i,this.thresholdSaturation=r}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,useThreshold:this.useThreshold,invertThreshold:this.invertThreshold,threshold:this.threshold,thresholdSaturation:this.thresholdSaturation},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class Ws extends ${constructor(t,e){super(),this.id=t,this.src=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,src:this.src},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class Fi extends ${constructor(t,e){super(),this.id=t,this.text=e}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a=_(e.id,Object.values(t.layouts)),i=tt(ue(e,this.text,e),a);return{...t,layouts:{...t.layouts,[a.layout.id]:i}}}}class la extends ${constructor(t,e,a){super(),this.id=t,this.strokeColor=e,this.strokeThickness=a}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,strokeColor:this.strokeColor,strokeThickness:this.strokeThickness},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class Ba extends ${constructor(t,e,a){super(),this.id=t,this.className=e,this.fill=a}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a=e.colors||{},i=a[this.className];typeof this.fill=="string"?a[this.className]={browserValue:this.fill,spotColor:i?.spotColor,pmsValue:i?.pmsValue}:a[this.className]={browserValue:this.fill.browserValue,spotColor:i?.spotColor,pmsValue:this.fill.pmsValue};const r={...e,colors:a},o=_(e.id,Object.values(t.layouts)),s=tt(r,o);return{...t,layouts:{...t.layouts,[o.layout.id]:s}}}}class Ys extends ${constructor(t,e,a){super(),this.id=t,this.svgBody=e,this.objectURL=a}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a={...e,svg:this.svgBody,cachedObjectURL:this.objectURL},i=_(e.id,Object.values(t.layouts)),r=tt(a,i);return{...t,layouts:{...t.layouts,[i.layout.id]:r}}}}class Js extends ${constructor(t){super(),this.id=t}apply(t){if(this.oldState=t,!V(this.id,Object.values(t.layouts)).id)throw new z;const a=Object.values(t.layouts).find(o=>o.elements.find(s=>s.id===this.id));if(!a)throw new Error("Layout missing from state!");const i=a.elements.findIndex(o=>o.id===this.id);a.elements.push(a.elements.splice(i,1)[0]);const r=[...a.elements];return r.forEach((o,s)=>o.layerIndex=s),{...t,layouts:{...t.layouts,[a.layout.id]:{...t.layouts[a.layout.id],elements:r,modificationID:N()}}}}}class Ks extends ${constructor(t){super(),this.id=t}apply(t){this.oldState=t;const e=V(this.id,Object.values(t.layouts));if(!e.id)throw new z;const a=Object.values(t.layouts).find(s=>s.elements.find(l=>l.id===this.id));if(!a)throw new Error("Layout missing from state!");const i=a.elements.findIndex(s=>s.id===this.id);a.elements.splice(i,1),a.elements.unshift(e);const r=[...a.elements],o=r.splice(i,1)[0];return r.splice(i,0,o),r.forEach((s,l)=>s.layerIndex=l),{...t,layouts:{...t.layouts,[a.layout.id]:{...t.layouts[a.layout.id],elements:r,modificationID:N()}}}}}class _s extends ${constructor(t){super(),this.id=t}apply(t){if(this.oldState=t,!V(this.id,Object.values(t.layouts)).id)throw new z;const a=Object.values(t.layouts).find(l=>l.elements.find(c=>c.id===this.id));if(!a)throw new Error("Layout missing from state!");const i=a.elements.findIndex(l=>l.id===this.id),r=i+1,o=[...a.elements],s=o.splice(i,1)[0];return o.splice(r,0,s),o.forEach((l,c)=>l.layerIndex=c),{...t,layouts:{...t.layouts,[a.layout.id]:{...t.layouts[a.layout.id],elements:o,modificationID:N()}}}}}class Xs extends ${constructor(t){super(),this.id=t}apply(t){if(this.oldState=t,!V(this.id,Object.values(t.layouts)).id)throw new z;const a=Object.values(t.layouts).find(l=>l.elements.find(c=>c.id===this.id));if(!a)throw new Error("Layout missing from state!");const i=a.elements.findIndex(l=>l.id===this.id),r=i-1,o=[...a.elements],s=o.splice(i,1)[0];return o.splice(r,0,s),o.forEach((l,c)=>l.layerIndex=c),{...t,layouts:{...t.layouts,[a.layout.id]:{...t.layouts[a.layout.id],elements:o,modificationID:N()}}}}}class vn{constructor(t,e,a){this.processRegion=async i=>{const r=this.layouts.find(l=>l.panelId===i.panelId);if(!r)throw new Y(i);let o="";if(this.configuration.type===E.ProductOverlay){let l="";if(this.product?.overlayImageUrl&&(l=this.product.overlayImageUrl),o=l,!l)throw new lt(this.configuration,"Couldn't find an asset for product overlay step")}const s=this.evaluateAssetType();if(s===D.Image){const l=this.configuration.type===E.SilentIllustration?this.configuration.data.asset?.fileLink:this.product?.overlayImageUrl;if(!l)throw new Error("Undefined raster silent step source");const c={stepName:this.configuration.stepName,id:N(),src:l,type:s,y:i.top,x:i.left,width:i.width,height:i.height,layer:i.layer,layerIndex:i.layerIndex,immutable:i.immutable,productOverlay:this.configuration.type===E.ProductOverlay?!0:void 0,rotation:i.rotation,excludeFromExport:this.configuration.data.excludeFromPrint,preserveAspectRatio:"none"};return{regionElement:{id:c.id,region:i},command:new G(c,r)}}else{const l=this.configuration.type===E.SilentIllustration?this.configuration.data.asset?.fileLink:o,d=await rt(await(async()=>new Promise((A,h)=>{if(!l){h("Undefined vector silent step source");return}et(l,!0).then(g=>{A(g)}).catch(g=>console.error(g))}))()),u={stepName:this.configuration.stepName,id:N(),cachedObjectURL:await re(d.svg),src:l,svg:d.svg,colors:d.colors,type:s,y:i.top,x:i.left,width:i.width,height:i.height,layer:i.layer,layerIndex:i.layerIndex,rotation:i.rotation,immutable:i.immutable,productOverlay:this.configuration.type===E.ProductOverlay?!0:void 0,excludeFromExport:this.configuration.data.excludeFromPrint};return{regionElement:{id:u.id,region:i},command:new G(u,r)}}},this.configuration=t,this.layouts=e,this.product=a||void 0}async trigger(){if(!this.configuration.data.regions)throw new lt(this.configuration,"Missing regions.");if(this.configuration.type===E.SilentIllustration){const t=this.configuration.data.regions.map(this.processRegion);return Promise.all(t)}else return this.configuration.type===E.ProductOverlay?Promise.all(this.configuration.data.regions.map(t=>{if(!this.layouts.find(a=>t.panelId===a.panelId))throw new Y(t);return this.processRegion(t)})):Promise.reject("Unknown silent step. This is a bug")}evaluateAssetType(){const t=this.configuration.type===E.ProductOverlay&&this.product?.overlayImageUrl?this.product.overlayImageUrl.toLowerCase():this.configuration.data.asset?.fileLink?.toLowerCase().split("?")[0];return t?.startsWith("data:image/png")||t?.endsWith(".jpeg")||t?.endsWith(".jpg")||t?.endsWith(".png")?D.Image:(t?.endsWith(".svg")||t?.startsWith("image/svg+xml"),D.Illustration)}}const Di=async n=>{const t=`${ht.getServicesApiUrl()}/shortener`;try{return(await(await it(t,{method:"POST",body:JSON.stringify({longUrl:n}),headers:{"Content-Type":"application/json"}})).json()).shortUrl}catch(e){throw console.error(e),new $e("Failed to shorten URL, see console.")}};class ki{async poll(){try{if(await this.predicate()){this.onSuccess(),this.pollingId>-1&&window.clearInterval(this.pollingId);return}}catch{}this.attempts+=1,this.attempts<this.maxAttempts?this.pollingId=window.setTimeout(this.poll.bind(this),this.interval):this.onFailure()}constructor(t,e,a,i=3e3,r=10){this.onSuccess=e,this.onFailure=a,this.predicate=t,this.attempts=0,this.pollingId=-1,this.interval=i,this.maxAttempts=r,this.poll()}}class Zs{async init(t,e,a){return a&&await this.reload(t,e,a),null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),l=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName).map(c=>({id:c.id,region:c.stepRegion,regionIndex:c.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[],l,async()=>{const c=i?.storage?.videoShortUrl,d=i?.storage?.videoUrl;e.updateStorage(t.stepName,{videoShortUrl:c,videoUrl:d})})}async regenerateQRCode(t,e,a,i){const r=async()=>{const h=(await xe([e]))[0],g=h?.versions?.find(p=>p.name==="mpeg4")?.link;return{asset:h,link:g}},o=await new Promise((h,g)=>{new ki(async()=>!!(await r()).link,async()=>{const p=await r();if(!p.link||!p.link)throw new Rt(p.asset);h({rel:"mpeg4",href:p.link})},()=>{g("Poller timed out with 40 attempts @ 3 second interval")},3e3,40)});t.forEach(h=>a.getCommandDispatcher()(new Dt(h.id)));const s=i.data.baseUrl.slice(0,4)==="http"?"":"https://",l=new URL(s+i.data.baseUrl);l.searchParams.append("video",btoa(JSON.stringify([o]))),l.pathname=l.pathname+(l.pathname.slice(-1)==="/"?"":"/");const c=l.toString();if(c.length>=2e3)throw new $e("Cannot create QR code, URL too long.");const d=await Di(c);if(!i.data||!i.data.regions)throw new lt(i,"Missing regions.");const u=await this.regionElements(i),A=await this.command(d,u,a,i.stepName);return A&&(A.command&&a.getCommandDispatcher()(A.command),A.followup&&await A.followup()),await a.setSelectionsAndElements(i.stepName,[],u,async()=>{a.updateStorage(i.stepName,{videoShortUrl:d,videoUrl:o.href})}),d}async regionElements(t){const e=(a,i)=>({id:N(),region:a,regionIndex:i});return t.data.regions.map(e)}async command(t,e,a,i){const r=a.getLayouts(),s=`data:image/svg+xml;base64,${btoa(await Un.toString(t,{type:"svg"}))}`,l=e.map(c=>{const d=c.region,u=r.find(A=>A.panelId===d?.panelId);if(!u&&d)throw new Y(d);if(u&&!d)throw new Error("Region not found");if(!u||!d)throw new Error("Neither a region or layout found!");return new G({stepRegion:d,stepRegionIndex:c.regionIndex,stepName:i,id:c.id,src:s,type:D.Image,y:d.top,x:d.left,width:d.width,height:d.height,rotation:0},u)});return{command:new U(l),followup:async()=>{}}}}const Ha=new Zs;class ke{constructor(){this.frameSourceSvg=async(t,e)=>{if(!t)return va(e);const a=t.asset;if(!a)throw new wt(t);const i=a.fileLink;if(i)return et(i,!0);throw new Rt(a)}}async init(t,e,a){const i=a?.serializableWorkflow.steps.find(s=>s.stepName===t.stepName);if(i?.storage&&Object.keys(i.storage).length!==0||i?.selectedVariants&&i.selectedVariants.length!==0)return await this.reload(t,e,a),null;t.mandatory&&e.setMandatoryFulfilled(t.stepName,!1),e.markStepsAsInitialised([t.stepName]);let r;const o=e.getWorkflowExperience().getBundle();if(o&&t.globalPropertyAspectConfigurations){const s=o.getGlobalPropertyStateManager(),l=t.globalPropertyAspectConfigurations[0],c=s.getAspectStorage(l.aspectName);c&&c.originalAssetKey&&(r=(await W.getLocalOrFromServer(c.originalAssetKey)).fileLink)}if(t.option&&t.option.variants&&t.option.variants.length>0){const s=t.option,l=await P.getDefaultVariant(s,t.overrideDefaultVariantId);return l?this.selectVariantCommand(t,l,[],e,void 0,r||t.data.placeholderImageUrl):null}return this.selectVariantCommand(t,void 0,[],e,void 0,r||t.data.placeholderImageUrl)}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),l=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName).map(c=>({id:c.id,region:c.stepRegion,regionIndex:c.stepRegionIndex}));if(!t.option||(t.option.variants||[]).length===0){const c=t.data.regions.map(d=>va(d));e.updateStorage(t.stepName,{currentFrameSources:c})}if(i){const c=async()=>{const d=i.storage?.colors,u=i.storage?.framePatternSrc,A=i.storage?.frameOffsetsList;if(e.updateMetadata(t.stepName,{frameOffsetsList:A,framePatternSrc:u}),u){const h=e.getWorkflowExperience().getStepById(t.stepName)?.frameService;if(!h)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(u,h,!0,d),e.updateMetadata(t.stepName,{image:u}),e.updateStorage(t.stepName,{framePatternSrc:u}),this.validateColorCount(t,e)}if(A?.some(h=>h.zoom)){const h=e.getWorkflowExperience().getStepById(t.stepName)?.frameService;if(!h)throw new Error("Frame service unavailable, cannot load pattern!");h.updateOffsets(A)}e.setMandatoryFulfilled(t.stepName,!0)};if(i.selectedVariants&&i.selectedVariants.length>0){const d=i.selectedVariants[0].id;if(t.option&&d){const u=t.option.variants?.find(A=>A.id===d);u&&await e.setSelectionsAndElements(t.stepName,[u],l,async()=>{const A=await Promise.all(t.data.regions.map(h=>this.frameSourceSvg(u,h)));e.updateStorage(t.stepName,{currentFrameSources:A}),await c()})}}else await e.setSelectionsAndElements(t.stepName,[],l,c)}}async availableColors(t,e){return(await P.ensureFullOption(t.data.colorOption))?.variants?.map(i=>({fill:i.color,stroke:i.color,variant:i,pmsValue:i.name}))??[]}selectImage(t,e,a,i=!0){const r=ke.patternSource(e),o=a.getStepStorage(t.stepName)?.framePatternSrc;if(o&&o===r)return Promise.resolve();a.setEditedStatus(t.stepName,!0);const s=e.fileLink||"";return s.endsWith(".pdf")||s.endsWith(".eps")||s.endsWith(".ai")?new Promise(l=>{a.addPoller(new ki(async()=>{const d=(await W.getFromServer(e.key||"")).versions?.find(A=>A.name==="svg");return d?(await it(d.link)).status===200:!1},()=>{W.getLocalOrFromServer(e.key||"").then(c=>{this.loadPatternFromAsset(c,t,a,i).then(l)})},()=>{throw new $e("Failed to resolve transcoded PDF")}))}):this.loadPatternFromAsset(e,t,a,i)}async selectVariant(t,e,a,i,r){const o=await this.selectVariantCommand(t,e,a,i,r);o&&(o.command&&i.getCommandDispatcher()(o.command),o.followup&&await o.followup())}getCreateElementCommand(t,e,a,i,r){return new G({id:t,type:D.Frame,x:e.left,y:e.top,width:e.width,height:e.height,layer:e.layer,layerIndex:e.layerIndex,rotation:e.rotation,scaleX:e.width/r.frameData.width,scaleY:e.height/r.frameData.height,path:r.frameData.path,dataWidth:r.frameData.width,dataHeight:r.frameData.height,stepRegion:e,stepRegionIndex:a,stepName:r.stepName,disablePlaceholder:r.disablePlaceholder,pattern:r.pattern,immutable:e.immutable},i)}async loadPatternFromString(t,e,a=!0,i=void 0,r){if(t.endsWith("svg")){const o=await za(t),s=o.width,l=o.height,c=await et(t);if(r){const A=c.match(/<(image|linearGradient|radialGradient)(\s|>|\/>)/gim);if(A&&A.length>0)throw new Error("Vector files may not include images or gradients when a color limit is specified.")}const d=await rt(c),u={src:t,width:s,height:l,aspect:s/l,svg:d.svg,colors:i??d.colors};At.set(t,u),e.setPatternData(u,a)}else{const o=await Ue(t,!0),s=await ce(o),l={src:t,width:s.width,height:s.height,aspect:s.width/s.height,svg:void 0,colors:void 0};At.set(t,l),e.setPatternData(l,a)}}async changeColors(t,e,a){const i=e.getWorkflowExperience().getStepById(t.stepName)?.frameService;if(!i||!i.getImageData()?.svg){console.warn("changeColors was called without an SVG being assigned to a frame step");return}const r=await this.calculateColorMetadata(i,t,a);e.updateMetadata(t.stepName,{colors:r.metadataColors}),e.updateStorage(t.stepName,{colors:r.storageColors}),i.setPatternData({...i.getImageData(),colors:r.newColors},!1),this.validateColorCount(t,e)}getUniqueColorCount(t,e){const a=e.getWorkflowExperience().getStepById(t.stepName)?.frameService;if(!a)return 0;const i=a.getImageData()?.colors??{},r=[];for(const o in i){const s=i[o];if(s.pmsValue){const l=s.pmsValue.trim().toLocaleLowerCase();r.includes(l)||r.push(l)}else if(s.browserValue){const l=ai(s.browserValue);r.includes(l)||r.push(l)}}return r.length}async calculateColorMetadata(t,e,a){if(!t.getImageData()?.svg)return{newColors:void 0,metadataColors:void 0,storageColors:void 0};const i={...t.getImageData().colors??{}},r={};Object.entries(i).forEach(([l,c])=>{const d={browserValue:c.browserValue};r[l]=d});for(const[l,c]of a.entries())i[l]={browserValue:c.browserValue,pmsValue:c.pmsValue},r[l]=c;let o=Array.from(Object.values(i)).map(l=>l.browserValue);const s=await P.ensureFullOption(e.data.colorOption);return s&&s.variants?.forEach(l=>{o=o.map(c=>c.toLowerCase()===l.color?.toLowerCase()?l.name:c)}),{newColors:i,metadataColors:o,storageColors:r}}validateColorCount(t,e){const a=t.data.colorPickerEnabled?t.data.maxColors??0:0;e.setStepError(t.stepName,"colors",a>0&&this.getUniqueColorCount(t,e)>a?"workflow.steps.frame.tooManyColors":void 0)}async selectVariantCommand(t,e,a,i,r,o){const s=i.getWorkflowExperience().getStepById(t.stepName)?.frameService;if(!s)throw new Error("Frame service unavailable, cannot load pattern!");const l=await Promise.all(t.data.regions.map(h=>this.frameSourceSvg(e,h)));r&&r(!0);const c=t.data.initialZoomLevel,d=await Promise.all(t.data.regions.map(async(h,g)=>{const p=await Ae(l[g]),m=s.getImageData(),f=a.map(I=>new Dt(I.id)),y=m?qa(m,p,c&&!t.data.forceImageCover?{scale:c}:void 0,t.data.forceImageCover):void 0,w=m?{id:N(),src:m.src,x:y?.x||0,y:y?.y||0,width:m.width,height:m.height,scaleX:y?.zoom||1,scaleY:y?.zoom||1,rotation:0}:void 0,F=N(),v=i.getLayouts().find(I=>I.panelId===h.panelId);if(!v)throw new Y(h);return{command:this.getCreateElementCommand(F,h,g,v,{frameData:p,pattern:w,disablePlaceholder:t.data.disablePlaceholder,stepName:t.stepName}),regionEl:{id:F,region:h,regionIndex:g},removeExistingCommands:f}})),u=d.map(h=>h.command),A=d.map(h=>h.removeExistingCommands).flat();return{command:new U([...u,...A]),followup:async()=>{r&&r(!1),await i.setSelectionsAndElements(t.stepName,e?[e]:[],[...d.map(h=>h.regionEl)],async()=>{if(i.updateStorage(t.stepName,{currentFrameSources:l}),o){const h=i.getWorkflowExperience().getStepById(t.stepName)?.frameService;if(!h)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(o,h,!0)}})}}}static patternSource(t){const e=t.versions?.find(i=>i.name==="svg");if(e?.link)return e.link;const a=t.fileLink;if(a)return a;throw new Rt(t)}async loadPatternFromAsset(t,e,a,i){const r=ke.patternSource(t),o=a.markUpdatePending(),s=a.getWorkflowExperience().getStepById(e.stepName)?.frameService;if(!s)throw a.markUpdateCompleted(o),new Error("Frame service unavailable, cannot load pattern!");try{await this.loadPatternFromString(r,s,i,void 0,e.data.colorPickerEnabled&&!!e.data.maxColors&&e.data.maxColors>0)}catch(c){throw a.markUpdateCompleted(o),c}const l=await this.calculateColorMetadata(s,e,new Map(Object.entries(s.getImageData()?.colors??{})));a.updateMetadata(e.stepName,{image:r,colors:l.metadataColors}),a.updateStorage(e.stepName,{framePatternSrc:r,colors:l.storageColors}),a.markUpdateCompleted(o),a.setMandatoryFulfilled(e.stepName,!0),a.setInformationResults(a.getInformationResults().filter(c=>c.stepID===e.stepName)),this.validateColorCount(e,a)}}const pt=new ke;class tl{async getIllustrationBody(t){return new Promise(e=>{et(t,!0).then(a=>{e(a)}).catch(a=>console.error(a))})}getCreateElementCommand(t,e,a,i,r){return new G({stepRegion:e,stepRegionIndex:a,stepName:r.stepName,colors:r.svg.colors,id:t,src:r.src,svg:r.svg.svg,cachedObjectURL:r.objectURL,type:D.Illustration,y:e.top,x:e.left,rotation:e.rotation,width:e.width,height:e.height,layer:e.layer,layerIndex:e.layerIndex,immutable:e.immutable},i)}getColors(t,e){const a=e.getRegionElements(t.stepName)||[];if(a.length===0)return[];try{return V(a[0].id,e.getAllLayoutData()).colors}catch{return[]}}async init(t,e,a){const i=await P.getOptionForStep(t);if(!i)throw new lt(t,"No option configured for illustration step.");if(a)return await this.reload(t,e,a);{const r=await P.getDefaultVariant(i,t.overrideDefaultVariantId);if(r)return await this.selectVariantCommand(t,r,[],e)}return null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),s=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName),l=await P.getOptionForStep(t);if(i?.selectedVariants){const c=i.selectedVariants[0].id;if(l&&c){const d=l.variants?.find(u=>u.id===c);if(d){const u=s.map(A=>({id:A.id,region:A.stepRegion,regionIndex:A.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[d],u,async()=>{e.updateMetadata(t.stepName,{colors:i.storage?.colors})})}}else throw new Error("Required illustration variant no longer available")}return null}async availableColors(t,e){const a=await P.ensureFullOption(t.data.colorOption);return a?a?a.variants?.map(i=>({fill:i.color,stroke:i.color,variant:i,pmsValue:i.name})):[]:[]}async changeColorsCommand(t,e,a,i,r){const o={};for(const[d,u]of r.entries())typeof u=="string"?o[d]={browserValue:u,spotColor:void 0,pmsValue:void 0}:o[d]={browserValue:u.browserValue,spotColor:u.spotColor,pmsValue:u.pmsValue};const s=$a(t,e,a,o),l=await re(s),c=[];for(const d of i){for(const[u,A]of r.entries())c.push(new Ba(d,u,A));c.push(new Ys(d,s,l))}return new U(c)}async changeColors(t,e,a,i){if(e.length===0)return;const r=V(e[0].id,a.getCommandContext().getAllLayouts().map(A=>A.layoutState)),o={...r.colors},s={};Object.entries(o).forEach(([A,h])=>{const g={browserValue:h.browserValue,pmsValue:h.pmsValue},p=h.spotColor;p&&(g.spotColor={profileName:p.profileName,namedColor:p.namedColor}),s[A]=g});for(const[A,h]of i.entries()){const g=typeof h=="string"?h:h.browserValue,p=typeof h=="string"?void 0:h.pmsValue;A===""?Object.keys(o).forEach(m=>{o[m]={browserValue:g,spotColor:o[m]?.spotColor,pmsValue:p},s[m]={browserValue:g}}):(o[A]={browserValue:g,spotColor:o[A]?.spotColor,pmsValue:p},s[A]={browserValue:g})}let l=Array.from(Object.values(o)).map(A=>A.browserValue);const c=await P.ensureFullOption(t.data.colorOption);c&&c.variants?.forEach(A=>{l=l.map(h=>h.toLowerCase()===A.color?.toLowerCase()?A.name:h)}),a.updateMetadata(t.stepName,{colors:l});const d=new Map;if(Object.entries(o).forEach(([A,h])=>{d.set(A,h)}),!r.svg)throw new Error("Colors changed before SVG loaded. This should never happen!");const u=await this.changeColorsCommand(r.svg,r.width,r.height,e.map(A=>A.id),d);a.updateStorage(t.stepName,{colors:s}),a.getCommandDispatcher()(u)}async selectVariant(t,e,a,i,r){i(!0);try{const o=await this.selectVariantCommand(t,e,a,r);o&&(o.command&&r.getCommandDispatcher()(o.command),o.followup&&await o.followup())}finally{i(!1)}}async selectVariantCommand(t,e,a,i){if(!t.data||!t.data.regions)throw new lt(t,"Missing regions.");const r=e.asset;if(!r)throw new wt(e);const o=r.fileLink;if(!o)throw new Rt(r);t.mandatory&&i.setMandatoryFulfilled(t.stepName,!1);const s=a.map(m=>new Dt(m.id)),l=await rt(await this.getIllustrationBody(o)),c=await re(l.svg),d=(m,f)=>{const y=i.getLayouts().find(F=>F.panelId===m.panelId);if(!y)throw new Y(m);const w=N();return{regionElement:{id:w,region:m,regionIndex:f},command:this.getCreateElementCommand(w,m,f,y,{stepName:t.stepName,src:o,objectURL:c,svg:l})}},u=t.data.regions.map(d),A=u.map(m=>m.command),h=[...s,...A];let g=Array.from(Object.values(l.colors)).map(m=>m.browserValue);const p=await P.ensureFullOption(t.data.colorOption);return p&&p.variants?.forEach(m=>{g=g.map(f=>f.toLowerCase()===m.color?.toLowerCase()?m.name:f)}),i.updateMetadata(t.stepName,{colors:g}),{command:new U(h),followup:async()=>{const m=u.map(y=>y.regionElement);await i.setSelectionsAndElements(t.stepName,[e],m);const f=r.assetConfiguration?.defaultColorVariants||[];if(f.length!==0){const y={};(r.assetConfiguration?.channelNumbers||[]).forEach(F=>{const b=f.find(v=>v.channelNumber===F.number);b&&(y[`${F.id.replace(/\W/g,"")}`]={browserValue:b?.variant?.color||""})}),await this.changeColors(t,m,i,new Map(Object.entries(y)))}if(t.data.colorPickerEnabled){const y=await this.availableColors(t,i)||[],w=Object.keys(l.colors),F=y.length===1&&w.length===1;if(F){const b=y[0],v=w[0];await this.changeColors(t,m,i,new Map([[v,b.variant.color]]))}!F&&f.length===0&&await this.changeColors(t,m,i,new Map)}}}}}const Jt=new tl;class el{async init(t,e,a){const i=t.option;if(!i)throw new ae(t);if(a)await this.reload(t,e,a);else{const r=await P.getDefaultVariant(i,t.overrideDefaultVariantId);if(r)return await this.selectVariantLambda(t,r,e,()=>{})}return null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),s=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName),l=t.option;if(!l)throw new ae(t);if(i?.selectedVariants){const c=i.selectedVariants[0].id;if(c){const d=l.variants?.find(u=>u.id===c);if(d){const u=d.material,A=s.map(h=>({id:h.id,region:h.stepRegion,regionIndex:h.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[d],A,async()=>{const h=e.getModelContainer();if(h){const g=t.data.targetMaterials.map(p=>h.applyMaterialVariant(p,l.id||"",u||{}));Promise.all(g)}})}}}}async selectVariant(t,e,a,i){const r=await this.selectVariantLambda(t,e,a,i);r&&(r.command&&a.getCommandDispatcher()(r.command),r.followup&&await r.followup())}async selectVariantLambda(t,e,a,i){const r=a.getModelContainer();i(!0);const o=e.material;if(!o)throw i(!1),new wt(e);return{command:void 0,followup:async()=>{await a.setSelectionsAndElements(t.stepName,[e],[],async()=>{try{r&&t.data.targetMaterials.forEach(s=>{t.option&&r.applyMaterialVariant(s,t.option.id||"",o)})}finally{i(!1)}})}}}}const Wa=new el;class al{async init(t,e,a){const i=await P.getOptionForStep(t);if(!i)throw new ae(t);if(a)await this.reload(t,e,a);else{const r=await P.getDefaultVariant(i,t.overrideDefaultVariantId);if(r)return await this.selectVariantLambda(t,r,e,()=>{})}return null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),s=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName),l=await P.getOptionForStep(t);if(i?.selectedVariants){const c=i.selectedVariants[0].id;if(l&&c){const d=l.variants?.find(u=>u.id===c);if(d){const u=s.map(A=>({id:A.id,region:A.stepRegion,regionIndex:A.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[d],u,async()=>{const A=e.getModelContainer();if(A&&t.option){const h=d.asset?.fileLink;if(!h)throw new wt(d);await A.applyModelVariant(t.stepName||"",{model:h,contextService:e.getLayoutPreviewService()},t.data.replaceProductModel||!1)}})}}}}async selectVariant(t,e,a,i){const r=await this.selectVariantLambda(t,e,a,i);r&&(r.command&&a.getCommandDispatcher()(r.command),r.followup&&await r.followup())}async selectVariantLambda(t,e,a,i){i(!0);const r=e.asset?.fileLink;if(!r)throw new wt(e);return{command:void 0,followup:async()=>{await a.setSelectionsAndElements(t.stepName,[e],[],async()=>{try{const o=a.getModelContainer();o&&await o.applyModelVariant(t.stepName,{model:r,contextService:a.getLayoutPreviewService()},t.data.replaceProductModel||!1)}finally{i(!1)}})}}}}const Ya=new al;class nl{async init(t,e,a){if(a)await this.reload(t,e,a);else return e.updateMetadata(t.stepName,{text:""}),this.changeTextCommand(t,"",e,()=>{});return null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),l=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName).map(c=>({id:c.id,region:c.stepRegion,regionIndex:c.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[],l,async()=>{e.updateStorage(t.stepName,{text:i?.storage?.text}),e.setMandatoryFulfilled(t.stepName,i?.storage?.text!=="")})}async changeText(t,e,a,i){const r=await this.changeTextCommand(t,e,a,i);r&&(r.command&&a.getCommandDispatcher()(r.command),r.followup&&await r.followup())}async changeTextCommand(t,e,a,i){const r=a.getRegionElements(t.stepName),o=a.getStepSpecificServices(t.stepName)?.module;if(!o)return console.error("Missing module."),null;const s=a.getWorkflowExperience().getProfanityList(),l=this.validateInput(t,e,s,i);if(l.errorData)return a.setMandatoryFulfilled(t.stepName,!1),l.errorData.blockedProfanity?console.error("Blocked profanity."):l.errorData.hitCharacterLimit?console.error("Too many characters."):l.errorData.unsupportedCharacters&&console.error("Unsupported characters."),null;if(a.setMandatoryFulfilled(t.stepName,e!==""),!t.data||!t.data.regions||t.data.regions.length<=0)return console.error("Missing configuration."),null;a.updateStorage(t.stepName,{text:e}),a.updateMetadata(t.stepName,{text:e});const c=(d,u,A,h)=>{const g=h||N(),m=a.getLayouts().find(y=>y.panelId===u.panelId);if(!m)return console.error(`Can not find layout for region: ${u.panelId}`),null;const f=[];return h&&f.push(new Dt(g)),f.push(new G({stepRegion:u,stepRegionIndex:A,stepName:t.stepName,colors:{},id:g,svg:d,type:D.Illustration,y:u.top,x:u.left,rotation:u.rotation,width:u.width,height:u.height,layer:u.layer,layerIndex:u.layerIndex,immutable:u.immutable},m)),{id:g,region:u,command:new U(f)}};if(r.length>0){const u=r.map(A=>{if(!A.region)return null;const h=o.svgPrint(e,A.region);return c(h,A.region,A.regionIndex,A.id)}).filter(A=>!!A).filter(A=>!!A).map(A=>A&&A.command);return{command:new U(u),followup:async()=>{}}}else{const d=t.data.regions.map((A,h)=>c(o.svgPrint(e,A),A,h)),u=d.filter(A=>!!A).map(A=>A&&A.command);return{command:new U(u),followup:async()=>{const A=d.filter(h=>h).map(h=>h&&{id:h.id,region:h.region});await a.setSelectionsAndElements(t.stepName,[],A)}}}}validateInput(t,e,a,i){if(t.data&&t.data.maxLength){const o=t.data.maxLength;if(e.length>o)return i("Too many characters."),{input:e,helperData:{},errorData:{hitCharacterLimit:!0}}}if(!/^$|^[a-zA-Z0-9 ]+$/.test(e))return i("Unsupported characters."),{input:e,helperData:{},errorData:{unsupportedCharacters:!0}};const r=ma.split(e.toLowerCase());for(const o of r)for(const s in a){const l=a[s].toLowerCase().replace(/\s/g,"");if(o===l)return i("Blocked profanity."),{input:e,helperData:{},errorData:{blockedProfanity:!0}}}return i(""),{input:e,helperData:{}}}}const Ja=new nl;class il{async init(t,e,a){const i=await P.getOptionForStep(t);if(!i)throw new lt(t,"Missing option for picture step");if(a)await this.reload(t,e,a);else{const r=await P.getDefaultVariant(i,t.overrideDefaultVariantId);if(r)return e.markStepsAsInitialised([t.stepName]),this.selectVariantCommand(t,r,e,()=>{})}return e.markStepsAsInitialised([t.stepName]),null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),s=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName),l=await P.getOptionForStep(t);if(i?.selectedVariants){const c=i.selectedVariants[0].id;if(l&&c){const d=l.variants?.find(u=>u.id===c);if(d){const u=s.map(A=>({id:A.id,region:A.stepRegion,regionIndex:A.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[d],u)}}}}async selectVariant(t,e,a,i){const r=await this.selectVariantCommand(t,e,a,i);r&&(r.command&&a.getCommandDispatcher()(r.command),r.followup&&await r.followup())}async selectVariantCommand(t,e,a,i){const r=e.asset;if(!r)throw new wt(e);const o=r?.fileLink;if(!o)return console.error("No URL for picture!"),null;i(!0),t.mandatory&&a.setMandatoryFulfilled(t.stepName,!1);const l=a.getRegionElements(t.stepName).map(u=>new Dt(u.id)),c=(u,A)=>{const g=a.getLayouts().find(m=>m.panelId===u.panelId);if(!g)throw new Y(u);const p=N();return{regionElement:{id:p,region:u,regionIndex:A},command:new G({stepName:t.stepName,stepRegion:u,stepRegionIndex:A,id:p,src:o,type:D.Image,y:u.top,x:u.left,rotation:u.rotation,width:u.width,height:u.height,layer:u.layer,layerIndex:u.layerIndex,immutable:u.immutable,preserveAspectRatio:"none"},g)}},d=t.data.regions.map(c);return{command:new U([...l,...d.map(u=>u.command)]),followup:async()=>{await a.setSelectionsAndElements(t.stepName,[e],d.map(u=>u.regionElement),async()=>{i(!1)})}}}}const Ka=new il;class rl{async init(t,e,a){const i=t.option;if(!i)throw new lt(t,"Missing option for question step");if(a)await this.reload(t,e,a);else{const r=await P.getDefaultVariant(i,t.overrideDefaultVariantId);if(r)return this.selectVariantLambda(t,r.id||"",e)}return null}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),r=await P.getOptionForStep(t);if(i?.selectedVariants){const o=i.selectedVariants[0].id;if(r&&o){const s=r.variants?.find(l=>l.id===o);s&&await e.setSelectionsAndElements(t.stepName,[s],[])}}}async selectVariant(t,e,a){const i=await this.selectVariantLambda(t,e,a);i&&(i.command&&a.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantLambda(t,e,a){const i=await P.getOptionForStep(t);if(!i)throw new lt(t,"Missing option for question step");const r=i.variants;if(!r)throw new lt(t,"Option for question step is missing variants");const o=r.length>1?r.find(s=>s.id===e):r[0];if(!o)throw new Error(`Failed to find selected variant ${e} in option ${i.id} of step ${t.stepName} (${t.stepTitle})`);return{command:void 0,followup:async()=>{await a.setSelectionsAndElements(t.stepName,[o],[])}}}}const _a=new rl;class ol{constructor(){this.shapeFillId="spiff-fill-shape"}async availableColours(t){const e=await P.getOptionForStep(t);return e?e.variants?.map(a=>({fill:a.color,stroke:a.color,variant:a}))||[]:[]}setCustomColor(t,e,a){const i=a.getLayouts(),o=(a.getRegionElements(e.stepName)||[]).map(s=>{const l=s.region;if(!i.find(d=>d.panelId===l?.panelId))throw new Y(l);return new Ba(s.id,this.shapeFillId,t)}).filter(s=>!!s);a.getCommandDispatcher()(new U(o)),a.updateStorage(e.stepName,{colour:t})}async init(t,e,a){const i=await P.getOptionForStep(t);if(!i)throw new ae(t);if(a)await this.reload(t,e,a);else{const r=await P.getDefaultVariant(i,t.overrideDefaultVariantId);return r?this.selectVariantCommand(t,{fill:r.color,stroke:r.color,variant:r},[],e):null}return null}async selectVariant(t,e,a,i){const r=await this.selectVariantCommand(t,e,a,i);r&&(r.command&&i.getCommandDispatcher()(r.command),r.followup&&await r.followup())}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),s=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName),l=await P.getOptionForStep(t);if(i?.selectedVariants){const c=i.selectedVariants[0].id;if(l&&c){const d=l.variants?.find(u=>u.id===c);if(d){const u=s.map(A=>({id:A.id,region:A.stepRegion,regionIndex:A.stepRegionIndex}));await e.setSelectionsAndElements(t.stepName,[d],u,async()=>{e.updateStorage(t.stepName,{colour:i?.storage?.colour||""})})}}}}async selectVariantCommand(t,e,a,i){const r=i.getLayouts(),o=i.getStepStorage(t.stepName)?.colour,s=()=>{if(e.variant?.color==="#custom")return o||"#FFFFFF";if(e.variant?.color)return e.variant.color;throw new Error("Failed to resolve color for shape step.")};if(a.length>0){const l=d=>{const u=d.region;if(!r.find(g=>g.panelId===u?.panelId))throw new Y(u);const h=s();return new Ba(d.id,this.shapeFillId,h)},c=a.map(l).filter(d=>!!d);return{command:new U(c),followup:async()=>{await i.setSelectionsAndElements(t.stepName,e.variant?[e.variant]:[],a),i.updateStorage(t.stepName,{colour:s()})}}}else{const l=(A,h)=>{const g=r.find(w=>w.panelId===A.panelId);if(!g)throw new Y(A);const p=s(),m=`
1383
1383
  <svg
1384
1384
  xmlns="http://www.w3.org/2000/svg"
1385
1385
  xmlnsXlink="http://www.w3.org/1999/xlink"
@@ -1399,14 +1399,14 @@
1399
1399
  fill="${p}"
1400
1400
  />
1401
1401
  </svg>
1402
- `,f={};f[this.shapeFillId]={browserValue:p};const y=N();return{id:y,region:A,command:new G({stepRegion:A,stepRegionIndex:h,stepName:t.stepName,colors:f,id:y,svg:m,type:D.Illustration,y:A.top,x:A.left,rotation:A.rotation,width:A.width,height:A.height,layer:A.layer,layerIndex:A.layerIndex,immutable:A.immutable,excludeFromExport:t.data.excludeFromPrint},g)}},c=t.data.regions.map(l),d=c.filter(A=>!!A).map(A=>A?.command),u=c.filter(A=>!!A).map((A,h)=>({id:A.id,region:A.region,regionIndex:h}));return{command:new U(d),followup:async()=>{await i.setSelectionsAndElements(t.stepName,e.variant?[e.variant]:[],u,async()=>{i.updateStorage(t.stepName,{colour:s()})})}}}}}const Tt=new ol;class sl{constructor(){this.latestToast=null,this.toastType=null,this.toastCallbacks=[]}addToastCallback(t){t({toastMessage:this.latestToast,toastType:this.toastType}),this.toastCallbacks.push(t)}removeToastCallback(t){this.toastCallbacks=this.toastCallbacks.filter(e=>e!==t)}setLatestToast(t,e){this.latestToast=t,this.toastType=e,this.onToastChange()}onToastChange(){this.toastCallbacks.forEach(t=>t({toastMessage:this.latestToast,toastType:this.toastType}))}}const ki=new sl,la=(n,t,e,a,i)=>{if(t.some(d=>d==null))throw new Error(`Failed to autosize lines: ${t.join(", ")}`);let r=t.map(d=>d.split(`
1403
- `)).flat(),o=r.length,s=r.map(d=>Ct(d,a,i));const l=i.getApproximateHeight()*a;let c=!0;for(;c;){if(l+(o-1)*e>n.height)return[null,null];const u=Math.max(...s);if(u<=n.width)return[r,u];const A=s.reduce((m,f,y,w)=>f>w[m]?y:m,0),h=r[A];let g=!1,p=h.length;for(;!g&&p>-1;){p=h.lastIndexOf(" ",p-1);const m=[h.slice(0,p),h.slice(p+1)],f=m.map(w=>Ct(w,a,i));f[0]<=n.width&&(r=[...r.slice(0,A),...m,...r.slice(A+1)],s=[...s.slice(0,A),...f,...s.slice(A+1)],o+=1,g=!0)}g||(c=!1)}return[null,null]},Kt=(n,t,e,a,i)=>{let r,o;const s=vt(t.assetUrl),l=s.getFont();if(i.size){const A=n/l.unitsPerEm;return[r,o]=la(e,a,n,A,s),[i.size,r,o]}const c=6;let d=c-na;if(a.length>0){let A=a,h=0;for(;(!i.maxSize||d<=i.maxSize)&&A;)d+=na,h=d/l.unitsPerEm,[A,o]=la(e,a,d,h,s)}d>c&&(d-=na),i.minSize&&d<i.minSize&&(d=i.minSize);const u=d/l.unitsPerEm;return[r,o]=la(e,a,d,u,s),[d,r,o]},ca=30;class ke extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype),this.name=ke.name}}const ll=["‘","’","“","”",`
1404
- `];class Me extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype),this.name=Me.name}}class cl{constructor(){this.cachedColors=new Map,this.cachedStrokeColors=new Map,this.filterUnsupportedCharacters=(t,e)=>{let a=t.replace(/(\r\n|\r|(\u2665|\u00a9|\u00ae|[\u2000-\u2017]|[\u201E-\u3300]]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]))/gm,"");const i=[],r=e?vt(e.assetUrl):void 0;if(r){const o=a.split("").filter(l=>!ll.includes(l)).join(""),s=o.split("").map(l=>r.getFont().charToGlyph(l));for(let l=0;l<s.length;l++)s[l].name===".notdef"&&i.push(String.fromCharCode(o.charCodeAt(l)))}for(let o=0;o<i.length;o++)a=a.replaceAll(i[o],"");return a},this.textAlign=t=>t.vertical?"center":t.textAlign||"center",this.getErrorsForText=(t,e,a,i)=>{let r;a.data&&a.data.maxLength&&e.length>a.data.maxLength&&(r||(r={}),r.hitCharacterLimit=!0);const o=i.getWorkflowExperience().getProfanityList(),s=ma.split(t.toLowerCase());for(const c of s)for(const d in o){const u=o[d].toLowerCase().replace(/\s/g,"");if(c===u){r||(r={}),r.blockedProfanity=!0;break}}return!a.data.allowNewlines&&(t.includes(`
1405
- `)||t.includes("\r"))&&(r||(r={}),r.illegalMultipleLines=!0),r}}async init(t,e,a){const i=await P.getOptionForStep(t);if(!i)return null;if(a)await this.reload(t,e,a);else{const r=await this.getDefaultImageFillVariant(t.data),o=r?.asset?.fileLink,s=o?await Ea(o):void 0,l=s?{src:s.src,height:s.height,width:s.width,scale:t.data.imageFillScale||1}:void 0,c=await this.getDefaultStrokeColorVariant(t.data),d=t.data.strokeEnabled&&c?.color?{browserValue:c.color,pmsValue:c.name}:void 0;let u=t.data.defaultText||"";const A=e.getWorkflowExperience().getBundle();if(A&&t.globalPropertyAspectConfigurations){const p=A.getGlobalPropertyConfiguration()?.aspects?.find(m=>m.type===q.Text&&t.globalPropertyAspectConfigurations?.map(f=>f.aspectName).includes(m.name));if(p){const f=A.getGlobalPropertyStateManager().getAspect(p.name);f&&(u=f)}}e.updateStorage(t.stepName,{text:u,inputText:t.data.defaultText||"",color:(await this.getDefaultColorVariant(t.data))?.color||await this.getDefaultColor(t.data),fillImage:l,strokeColor:d}),e.updateMetadata(t.stepName,{text:u,color:(await this.getDefaultColorVariant(t.data))?.name||await this.getDefaultColor(t.data),fillImage:r?.name,strokeColor:t.data.strokeEnabled?c?.color:void 0});const h=await P.getDefaultVariant(i,t.overrideDefaultVariantId);if(h)return this.selectVariantCommand(t,h,{text:u},[],e,()=>{},()=>{},l,d)}return null}findLayoutElements(t,e){return t.getRegionElements(e.stepName).map(r=>V(r.id,t.getAllLayoutData()))}async availableFillColors(t){const e=this.cachedColors.get(t.stepName);if(e)return e;const a=await P.ensureFullOption(t.data.colorOption);if(a){const i=a.variants?.map(r=>({fill:r.color,stroke:r.color,variant:r}))||[];return this.cachedColors.set(t.stepName,i),i}return[]}changeAlignment(t,e,a,i){if(!t.data||!t.data.regions)return;const r=i.getCommandDispatcher();for(const o of a){const s=new Pi(o.id,e);r(s)}}async changeFillColor(t,e,a,i){if(!t.data||!t.data.regions)return;const r=i.getCommandDispatcher();e.variant?i.updateMetadata(t.stepName,{color:e.variant.name}):i.updateMetadata(t.stepName,{color:e.fill});const o=await P.ensureFullOption(t.data.colorOption),s=o?this.createTextFillSpotColor(o,e.variant):void 0;o?i.updateStorage(t.stepName,{color:e.fill,colorProfileAssetKey:o.colorProfile?.key}):i.updateStorage(t.stepName,{color:e.fill});for(const l of a){if(!e.fill)throw new Error("Fill not set on new color selection!");const c=new Ii(l.id,e.fill,s);r(c)}}async availableFillImages(t){const e=await P.ensureFullOption(t.data.imageFillOption);if(e){const a=e.variants?.map(i=>i.asset?.fileLink)?.filter(i=>!!i)||[];return Promise.all(a.map(async i=>{const r=await Ea(i);return{src:i,width:r.width,height:r.height,scale:t.data.imageFillScale||1}}))}return Promise.resolve([])}async changeFillImage(t,e,a,i){if(!t.data||!t.data.regions)return;const r=i.getCommandDispatcher(),o=t.option?.variants?.find(s=>s.asset?.fileLink===e.src);i.updateMetadata(t.stepName,{fillImage:o?.name}),i.updateStorage(t.stepName,{fillImage:e});for(const s of a){const l=new oa(s.id,e);r(l)}}async availableStrokeColors(t){const e=this.cachedStrokeColors.get(t.stepName);if(e)return e;const a=await P.ensureFullOption(t.data.strokeOption);if(a){const i=a.variants?.map(r=>({fill:r.color,stroke:r.color,variant:r}))||[];return this.cachedStrokeColors.set(t.stepName,i),i}return[]}async changeStrokeColor(t,e,a,i){if(!t.data||!t.data.regions)return;const r=i.getCommandDispatcher();e?.variant?i.updateMetadata(t.stepName,{strokeColor:e.variant.name}):i.updateMetadata(t.stepName,{strokeColor:e?.fill});const o=e?{browserValue:e.fill,pmsValue:e.pmsValue}:void 0;i.updateStorage(t.stepName,{strokeColor:o});for(const s of a){const l=new sa(s.id,o,t.data?.strokeThickness);r(l)}}getProcessedInput(t,e,a){const i=a?t:this.injectReplaceableText(t,e);return Fe(i,{vertical:e.vertical,uppercase:e.uppercase})}updateInputText(t,e,a,i){const r=i.getStepStorage(a.stepName),o=Nt(t,i),s=this.getProcessedInput(o,a.data,r?.customiseAllText??!1),l={command:void 0,helperData:{},errorData:this.getErrorsForText(t,s,a,i)};if(l.errorData)return l;l.helperData.charactersRemaining=a.data.maxLength-s.length;const c=[],d=new Map,u=new Map;for(const A of e){if(!A.fontData)throw new O("Failed to resolve font data for text.");const[h,g]=Kt(A.fontSize,A.fontData,{left:A.x,top:A.y,width:A.width,height:A.height,rotation:A.rotation},[s],{size:a.data.size,minSize:a.data.minSize,maxSize:a.data.maxSize});d.set(A.id,h),u.set(A.id,g);const p=a.data.curved?s:(g||[]).join(`
1406
- `);c.push(this.generateTextChangeCommandsForRegion(h,a.data,A.id,p))}return!a.data.curved&&e.length>0&&!Array.from(u.values()).every(h=>h)?(l.errorData||(l.errorData={}),l.errorData.doesNotFit=!0,l):(i.updateStorage(a.stepName,{text:t}),i.updateMetadata(a.stepName,{text:s}),(r?.defaultCleared||!a.data.deleteDefaultOnFocus)&&s.trim()!==""&&i.setMandatoryFulfilled(a.stepName,!0),l.command=new U(c),l)}async selectVariant(t,e,a,i,r){const o=await this.selectVariantCommand(t,e,a.getStepStorage(t.stepName)||{},a.getRegionElements(t.stepName),a,i,r);o&&(o.command&&a.getCommandDispatcher()(o.command),o.followup&&await o.followup())}createTextFillSpotColor(t,e){const a=t.colorProfile;if(a){const i=(a.name||"").replace(/\s/g,"-"),r=i.lastIndexOf("/"),s=i.slice(r+1).slice(0,-4);if(!e.namedColor)throw new Error("variant named color not set!");return{profileName:s,namedColor:e.namedColor}}}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),s=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName),l=await P.getOptionForStep(t);if(i?.selectedVariants){const c=i.selectedVariants[0].id;if(l&&c){const d=l.variants?.find(u=>u.id===c);if(d){const u=await this.fontDataFromVariant(d),A=s.map(m=>({id:m.id,region:m.stepRegion,regionIndex:m.stepRegionIndex})),h=i.storage?.color;let g=i.storage?.text;const p=e.getWorkflowExperience().getBundle();if(p&&t.globalPropertyAspectConfigurations){const f=p.getGlobalPropertyConfiguration()?.aspects?.find(y=>y.type===q.Text&&t.globalPropertyAspectConfigurations?.map(w=>w.aspectName).includes(y.name));if(f){const w=p.getGlobalPropertyStateManager().getAspect(f.name);w&&(g=w)}}if(await e.setSelectionsAndElements(t.stepName,[d],A,async()=>{e.updateMetadata(t.stepName,{color:h,text:g}),e.updateStorage(t.stepName,{text:g,inputText:g});const m=s.map(y=>new Ia(y.id,u)),f=new U(m);e.getCommandDispatcher()(f)}),s.length===0&&l){const m=await P.getDefaultVariant(l,t.overrideDefaultVariantId);if(m){const f=await this.selectVariantCommand(t,m,{text:g},[],e,()=>{},()=>{});f?.command&&e.getCommandDispatcher()(f.command)}}else{const{command:m}=j.updateInputText(g||"",s,t,e);m&&e.getCommandDispatcher()(m)}}}}else{const c=e.getWorkflowExperience().getBundle();if(c&&t.globalPropertyAspectConfigurations){const u=c.getGlobalPropertyConfiguration()?.aspects?.find(A=>A.type===q.Text&&t.globalPropertyAspectConfigurations?.map(h=>h.aspectName).includes(A.name));if(u){const h=c.getGlobalPropertyStateManager().getAspect(u.name);if(h)if(s.length===0&&l){const g=await P.getDefaultVariant(l,t.overrideDefaultVariantId);if(g){const p=await this.selectVariantCommand(t,g,{text:h},[],e,()=>{},()=>{});p?.command&&e.getCommandDispatcher()(p.command)}}else{const{command:g}=j.updateInputText(h,s,t,e);g&&e.getCommandDispatcher()(g)}}}}}async getDefaultColorVariant(t){const e=t.colorOption;if(e)return P.getDefaultVariant(e)}async getDefaultColor(t){const e=t.colorOption;return e?(await P.getDefaultVariant(e))?.color:void 0}async getDefaultImageFillVariant(t){const e=t.imageFillOption;if(e)return P.getDefaultVariant(e)}async getDefaultStrokeColorVariant(t){const e=t.strokeOption;if(e)return P.getDefaultVariant(e)}async fontDataFromVariant(t){const e=t.asset;if(!e)throw new wt(t);const a=e.fileLink;if(!a)throw new Rt(e);const i=await Ft(a);return{assetUrl:a,name:i.names.fullName.en}}async selectVariantCommand(t,e,a,i,r,o,s,l,c){const d=r.markUpdatePending(),u=await this.fontDataFromVariant(e);let A=!0;const h=g=>{o(g),g&&(A=!1)};if(i.length>0){const g=i.map(f=>new Ia(f.id,u));if(l){const f=i.map(y=>new oa(y.id,l));g.push(...f)}if(c){const f=i.map(y=>new sa(y.id,c,t.data.strokeThickness));g.push(...f)}const p=await this.changeInputTextWithRegion(t,t.data.size||ca,u,a.text||"",a,r,a?.customiseAllText??!1,h,s);p&&g.push(p);const m=new U(g);return A?{command:m,followup:async()=>{r.markUpdateCompleted(d),await r.setSelectionsAndElements(t.stepName,[e],i)}}:null}else{const g=await this.createTextboxRegions(t.stepName,e,t.data,u,a,r),p=await this.changeInputTextWithRegion(t,t.data.size||ca,u,g[0]?.newElement.input||a.text||t.data.defaultText||"",a,r,a?.customiseAllText??!1,h,s),m=g.flatMap(y=>y.commands);if(l){const y=g.map(w=>new oa(w.regionElement.id,l));m.push(...y)}if(c){const y=g.map(w=>new sa(w.newElement.id,c,t.data.strokeThickness));m.push(...y)}p&&m.push(p);const f=new U(m);return A?{command:f,followup:async()=>{r.markUpdateCompleted(d)}}:null}}injectReplaceableText(t,e){return e.replaceableText?e.replaceableText.replace("{{}}",t):t}async createTextboxRegions(t,e,a,i,r,o){if(!a||!a.regions)throw new Error("Step data not supplied");const s=r.text||a.defaultText||"",l=Nt(s,o),c=this.getProcessedInput(l,a,!1),d=async(A,h)=>{const p=o.getLayouts().find(f=>f.panelId===A.panelId),m=N();try{if(!p)throw new Me("Failed to find layout for region: "+A.panelId);const f=await P.ensureFullOption(a.colorOption);let y;if(f&&f.variants){const k=await P.getDefaultVariant(f);k&&(y=this.createTextFillSpotColor(f,k),o.updateStorage(t,{colorProfileAssetKey:f.colorProfile?.key}))}const w=await this.getDefaultColor(a),F=w||"#000000",b={stepRegion:A,stepRegionIndex:h,stepName:t,align:this.textAlign(a),fill:r.color?r.color:F,fontSize:a.size||ca,fontData:i,id:m,layer:A.layer,layerIndex:A.layerIndex,rotation:A.rotation,text:c,input:s,type:D.Textbox,vertical:a.vertical,x:A.left,y:A.top,height:A.height,width:A.width,immutable:A.immutable,verticalAlign:a.verticalAlign||"middle",curved:a.curved,paths:a.paths,fillSpotColorDefinition:y},v=[],I=new Map,M=new Map;if(!b.fontData)throw new O("Failed to resolve font data for text.");const[R,x]=Kt(b.fontSize,b.fontData,{left:b.x,top:b.y,width:b.width,height:b.height,rotation:b.rotation,panelId:""},[c],{size:a.size,minSize:a.minSize,maxSize:a.maxSize});I.set(b.id,R),M.set(b.id,x);const T=a.curved||a.vertical?c:(x||[]).join(`
1407
- `);v.push(this.generateTextChangeCommandsForRegion(R,a,b.id,T));const L=new G(b,p);return{regionElement:{id:m,region:A,regionIndex:h},commands:[L,...v],newElement:b,fontData:i}}catch(f){throw console.log(f),new ke("Error adding font to region")}},u=await Promise.all(a.regions.map(d)).catch(A=>{throw A instanceof ke?(ki.setLatestToast("Failed to load font.",he.Error),A):A instanceof Me?A:new Error(A)});return await o.setSelectionsAndElements(t,[e],u.map(A=>A.regionElement),async()=>{o.updateMetadata(t,{text:s}),o.updateStorage(t,{text:s})}),u}generateTextChangeCommandsForRegion(t,e,a,i){const r=[],o=new xi(a,i);if(r.push(o),!e.size){const l=new Bi(a,t);r.push(l)}return new U(r)}async changeInputTextWithRegion(t,e,a,i,r,o,s,l,c,d){const u=(i||"").replace(/^(?![\u000A\u000D])[\u0000-\u001F\u007F-\u009F]/g,""),A=Nt(u,o),h=this.getProcessedInput(A,t.data,s),g=o.getRegionElements(t.stepName),p=new Map,m=new Map;for(const b of g)if(b.region){const[v,I]=Kt(e,a,b.region,[h],{size:t.data.size,minSize:t.data.minSize,maxSize:t.data.maxSize});p.set(b.id,v),m.set(b.id,I)}const y=(()=>{if(t.data&&t.data.maxLength&&h.length>t.data.maxLength)return d&&d(!0),{info:"0"};const b=o.getWorkflowExperience().getProfanityList(),v=ma.split(h.toLowerCase());for(const I of v)for(const M in b){const R=b[M].toLowerCase().replace(/\s/g,"");if(I===R){const T="Blocked profanity.";return l(T),{error:T}}}if(!t.data.vertical&&!t.data.allowNewlines&&(h.includes(`
1402
+ `,f={};f[this.shapeFillId]={browserValue:p};const y=N();return{id:y,region:A,command:new G({stepRegion:A,stepRegionIndex:h,stepName:t.stepName,colors:f,id:y,svg:m,type:D.Illustration,y:A.top,x:A.left,rotation:A.rotation,width:A.width,height:A.height,layer:A.layer,layerIndex:A.layerIndex,immutable:A.immutable,excludeFromExport:t.data.excludeFromPrint},g)}},c=t.data.regions.map(l),d=c.filter(A=>!!A).map(A=>A?.command),u=c.filter(A=>!!A).map((A,h)=>({id:A.id,region:A.region,regionIndex:h}));return{command:new U(d),followup:async()=>{await i.setSelectionsAndElements(t.stepName,e.variant?[e.variant]:[],u,async()=>{i.updateStorage(t.stepName,{colour:s()})})}}}}}const Tt=new ol;class sl{constructor(){this.latestToast=null,this.toastType=null,this.toastCallbacks=[]}addToastCallback(t){t({toastMessage:this.latestToast,toastType:this.toastType}),this.toastCallbacks.push(t)}removeToastCallback(t){this.toastCallbacks=this.toastCallbacks.filter(e=>e!==t)}setLatestToast(t,e){this.latestToast=t,this.toastType=e,this.onToastChange()}onToastChange(){this.toastCallbacks.forEach(t=>t({toastMessage:this.latestToast,toastType:this.toastType}))}}const Mi=new sl,ca=(n,t,e,a,i)=>{if(t.some(d=>d==null))throw new Error(`Failed to autosize lines: ${t.join(", ")}`);let r=t.map(d=>d.split(`
1403
+ `)).flat(),o=r.length,s=r.map(d=>Ct(d,a,i));const l=i.getApproximateHeight()*a;let c=!0;for(;c;){if(l+(o-1)*e>n.height)return[null,null];const u=Math.max(...s);if(u<=n.width)return[r,u];const A=s.reduce((m,f,y,w)=>f>w[m]?y:m,0),h=r[A];let g=!1,p=h.length;for(;!g&&p>-1;){p=h.lastIndexOf(" ",p-1);const m=[h.slice(0,p),h.slice(p+1)],f=m.map(w=>Ct(w,a,i));f[0]<=n.width&&(r=[...r.slice(0,A),...m,...r.slice(A+1)],s=[...s.slice(0,A),...f,...s.slice(A+1)],o+=1,g=!0)}g||(c=!1)}return[null,null]},Kt=(n,t,e,a,i)=>{let r,o;const s=vt(t.assetUrl),l=s.getFont();if(i.size){const A=n/l.unitsPerEm;return[r,o]=ca(e,a,n,A,s),[i.size,r,o]}const c=6;let d=c-ia;if(a.length>0){let A=a,h=0;for(;(!i.maxSize||d<=i.maxSize)&&A;)d+=ia,h=d/l.unitsPerEm,[A,o]=ca(e,a,d,h,s)}d>c&&(d-=ia),i.minSize&&d<i.minSize&&(d=i.minSize);const u=d/l.unitsPerEm;return[r,o]=ca(e,a,d,u,s),[d,r,o]},da=30;class Me extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype),this.name=Me.name}}const ll=["‘","’","“","”",`
1404
+ `];class Te extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype),this.name=Te.name}}class cl{constructor(){this.cachedColors=new Map,this.cachedStrokeColors=new Map,this.filterUnsupportedCharacters=(t,e)=>{let a=t.replace(/(\r\n|\r|(\u2665|\u00a9|\u00ae|[\u2000-\u2017]|[\u201E-\u3300]]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]))/gm,"");const i=[],r=e?vt(e.assetUrl):void 0;if(r){const o=a.split("").filter(l=>!ll.includes(l)).join(""),s=o.split("").map(l=>r.getFont().charToGlyph(l));for(let l=0;l<s.length;l++)s[l].name===".notdef"&&i.push(String.fromCharCode(o.charCodeAt(l)))}for(let o=0;o<i.length;o++)a=a.replaceAll(i[o],"");return a},this.textAlign=t=>t.vertical?"center":t.textAlign||"center",this.getErrorsForText=(t,e,a,i)=>{let r;a.data&&a.data.maxLength&&e.length>a.data.maxLength&&(r||(r={}),r.hitCharacterLimit=!0);const o=i.getWorkflowExperience().getProfanityList(),s=ma.split(t.toLowerCase());for(const c of s)for(const d in o){const u=o[d].toLowerCase().replace(/\s/g,"");if(c===u){r||(r={}),r.blockedProfanity=!0;break}}return!a.data.allowNewlines&&(t.includes(`
1405
+ `)||t.includes("\r"))&&(r||(r={}),r.illegalMultipleLines=!0),r}}async init(t,e,a){const i=await P.getOptionForStep(t);if(!i)return null;if(a)await this.reload(t,e,a);else{const r=await this.getDefaultImageFillVariant(t.data),o=r?.asset?.fileLink,s=o?await Ea(o):void 0,l=s?{src:s.src,height:s.height,width:s.width,scale:t.data.imageFillScale||1}:void 0,c=await this.getDefaultStrokeColorVariant(t.data),d=t.data.strokeEnabled&&c?.color?{browserValue:c.color,pmsValue:c.name}:void 0;let u=t.data.defaultText||"";const A=e.getWorkflowExperience().getBundle();if(A&&t.globalPropertyAspectConfigurations){const p=A.getGlobalPropertyConfiguration()?.aspects?.find(m=>m.type===q.Text&&t.globalPropertyAspectConfigurations?.map(f=>f.aspectName).includes(m.name));if(p){const f=A.getGlobalPropertyStateManager().getAspect(p.name);f&&(u=f)}}e.updateStorage(t.stepName,{text:u,inputText:t.data.defaultText||"",color:(await this.getDefaultColorVariant(t.data))?.color||await this.getDefaultColor(t.data),fillImage:l,strokeColor:d}),e.updateMetadata(t.stepName,{text:u,color:(await this.getDefaultColorVariant(t.data))?.name||await this.getDefaultColor(t.data),fillImage:r?.name,strokeColor:t.data.strokeEnabled?c?.color:void 0});const h=await P.getDefaultVariant(i,t.overrideDefaultVariantId);if(h)return this.selectVariantCommand(t,h,{text:u},[],e,()=>{},()=>{},l,d)}return null}findLayoutElements(t,e){return t.getRegionElements(e.stepName).map(r=>V(r.id,t.getAllLayoutData()))}async availableFillColors(t){const e=this.cachedColors.get(t.stepName);if(e)return e;const a=await P.ensureFullOption(t.data.colorOption);if(a){const i=a.variants?.map(r=>({fill:r.color,stroke:r.color,variant:r}))||[];return this.cachedColors.set(t.stepName,i),i}return[]}changeAlignment(t,e,a,i){if(!t.data||!t.data.regions)return;const r=i.getCommandDispatcher();for(const o of a){const s=new xi(o.id,e);r(s)}}async changeFillColor(t,e,a,i){if(!t.data||!t.data.regions)return;const r=i.getCommandDispatcher();e.variant?i.updateMetadata(t.stepName,{color:e.variant.name}):i.updateMetadata(t.stepName,{color:e.fill});const o=await P.ensureFullOption(t.data.colorOption),s=o?this.createTextFillSpotColor(o,e.variant):void 0;o?i.updateStorage(t.stepName,{color:e.fill,colorProfileAssetKey:o.colorProfile?.key}):i.updateStorage(t.stepName,{color:e.fill});for(const l of a){if(!e.fill)throw new Error("Fill not set on new color selection!");const c=new Bi(l.id,e.fill,s);r(c)}}async availableFillImages(t){const e=await P.ensureFullOption(t.data.imageFillOption);if(e){const a=e.variants?.map(i=>i.asset?.fileLink)?.filter(i=>!!i)||[];return Promise.all(a.map(async i=>{const r=await Ea(i);return{src:i,width:r.width,height:r.height,scale:t.data.imageFillScale||1}}))}return Promise.resolve([])}async changeFillImage(t,e,a,i){if(!t.data||!t.data.regions)return;const r=i.getCommandDispatcher(),o=t.option?.variants?.find(s=>s.asset?.fileLink===e.src);i.updateMetadata(t.stepName,{fillImage:o?.name}),i.updateStorage(t.stepName,{fillImage:e});for(const s of a){const l=new sa(s.id,e);r(l)}}async availableStrokeColors(t){const e=this.cachedStrokeColors.get(t.stepName);if(e)return e;const a=await P.ensureFullOption(t.data.strokeOption);if(a){const i=a.variants?.map(r=>({fill:r.color,stroke:r.color,variant:r}))||[];return this.cachedStrokeColors.set(t.stepName,i),i}return[]}async changeStrokeColor(t,e,a,i){if(!t.data||!t.data.regions)return;const r=i.getCommandDispatcher();e?.variant?i.updateMetadata(t.stepName,{strokeColor:e.variant.name}):i.updateMetadata(t.stepName,{strokeColor:e?.fill});const o=e?{browserValue:e.fill,pmsValue:e.pmsValue}:void 0;i.updateStorage(t.stepName,{strokeColor:o});for(const s of a){const l=new la(s.id,o,t.data?.strokeThickness);r(l)}}getProcessedInput(t,e,a){const i=a?t:this.injectReplaceableText(t,e);return De(i,{vertical:e.vertical,uppercase:e.uppercase})}updateInputText(t,e,a,i){const r=i.getStepStorage(a.stepName),o=Nt(t,i),s=this.getProcessedInput(o,a.data,r?.customiseAllText??!1),l={command:void 0,helperData:{},errorData:this.getErrorsForText(t,s,a,i)};if(l.errorData)return l;l.helperData.charactersRemaining=a.data.maxLength-s.length;const c=[],d=new Map,u=new Map;for(const A of e){if(!A.fontData)throw new O("Failed to resolve font data for text.");const[h,g]=Kt(A.fontSize,A.fontData,{left:A.x,top:A.y,width:A.width,height:A.height,rotation:A.rotation},[s],{size:a.data.size,minSize:a.data.minSize,maxSize:a.data.maxSize});d.set(A.id,h),u.set(A.id,g);const p=a.data.curved?s:(g||[]).join(`
1406
+ `);c.push(this.generateTextChangeCommandsForRegion(h,a.data,A.id,p))}return!a.data.curved&&e.length>0&&!Array.from(u.values()).every(h=>h)?(l.errorData||(l.errorData={}),l.errorData.doesNotFit=!0,l):(i.updateStorage(a.stepName,{text:t}),i.updateMetadata(a.stepName,{text:s}),(r?.defaultCleared||!a.data.deleteDefaultOnFocus)&&s.trim()!==""&&i.setMandatoryFulfilled(a.stepName,!0),l.command=new U(c),l)}async selectVariant(t,e,a,i,r){const o=await this.selectVariantCommand(t,e,a.getStepStorage(t.stepName)||{},a.getRegionElements(t.stepName),a,i,r);o&&(o.command&&a.getCommandDispatcher()(o.command),o.followup&&await o.followup())}createTextFillSpotColor(t,e){const a=t.colorProfile;if(a){const i=(a.name||"").replace(/\s/g,"-"),r=i.lastIndexOf("/"),s=i.slice(r+1).slice(0,-4);if(!e.namedColor)throw new Error("variant named color not set!");return{profileName:s,namedColor:e.namedColor}}}async reload(t,e,a){const i=e.getSerializedStep(t.stepName,a.serializableWorkflow.steps),s=Object.values(a.layouts).map(c=>c.elements).flat().filter(c=>c.stepName===t.stepName),l=await P.getOptionForStep(t);if(i?.selectedVariants){const c=i.selectedVariants[0].id;if(l&&c){const d=l.variants?.find(u=>u.id===c);if(d){const u=await this.fontDataFromVariant(d),A=s.map(m=>({id:m.id,region:m.stepRegion,regionIndex:m.stepRegionIndex})),h=i.storage?.color;let g=i.storage?.text;const p=e.getWorkflowExperience().getBundle();if(p&&t.globalPropertyAspectConfigurations){const f=p.getGlobalPropertyConfiguration()?.aspects?.find(y=>y.type===q.Text&&t.globalPropertyAspectConfigurations?.map(w=>w.aspectName).includes(y.name));if(f){const w=p.getGlobalPropertyStateManager().getAspect(f.name);w&&(g=w)}}if(await e.setSelectionsAndElements(t.stepName,[d],A,async()=>{e.updateMetadata(t.stepName,{color:h,text:g}),e.updateStorage(t.stepName,{text:g,inputText:g});const m=s.map(y=>new Ia(y.id,u)),f=new U(m);e.getCommandDispatcher()(f)}),s.length===0&&l){const m=await P.getDefaultVariant(l,t.overrideDefaultVariantId);if(m){const f=await this.selectVariantCommand(t,m,{text:g},[],e,()=>{},()=>{});f?.command&&e.getCommandDispatcher()(f.command)}}else{const{command:m}=j.updateInputText(g||"",s,t,e);m&&e.getCommandDispatcher()(m)}}}}else{const c=e.getWorkflowExperience().getBundle();if(c&&t.globalPropertyAspectConfigurations){const u=c.getGlobalPropertyConfiguration()?.aspects?.find(A=>A.type===q.Text&&t.globalPropertyAspectConfigurations?.map(h=>h.aspectName).includes(A.name));if(u){const h=c.getGlobalPropertyStateManager().getAspect(u.name);if(h)if(s.length===0&&l){const g=await P.getDefaultVariant(l,t.overrideDefaultVariantId);if(g){const p=await this.selectVariantCommand(t,g,{text:h},[],e,()=>{},()=>{});p?.command&&e.getCommandDispatcher()(p.command)}}else{const{command:g}=j.updateInputText(h,s,t,e);g&&e.getCommandDispatcher()(g)}}}}}async getDefaultColorVariant(t){const e=t.colorOption;if(e)return P.getDefaultVariant(e)}async getDefaultColor(t){const e=t.colorOption;return e?(await P.getDefaultVariant(e))?.color:void 0}async getDefaultImageFillVariant(t){const e=t.imageFillOption;if(e)return P.getDefaultVariant(e)}async getDefaultStrokeColorVariant(t){const e=t.strokeOption;if(e)return P.getDefaultVariant(e)}async fontDataFromVariant(t){const e=t.asset;if(!e)throw new wt(t);const a=e.fileLink;if(!a)throw new Rt(e);const i=await Ft(a);return{assetUrl:a,name:i.names.fullName.en}}async selectVariantCommand(t,e,a,i,r,o,s,l,c){const d=r.markUpdatePending(),u=await this.fontDataFromVariant(e);let A=!0;const h=g=>{o(g),g&&(A=!1)};if(i.length>0){const g=i.map(f=>new Ia(f.id,u));if(l){const f=i.map(y=>new sa(y.id,l));g.push(...f)}if(c){const f=i.map(y=>new la(y.id,c,t.data.strokeThickness));g.push(...f)}const p=await this.changeInputTextWithRegion(t,t.data.size||da,u,a.text||"",a,r,a?.customiseAllText??!1,h,s);p&&g.push(p);const m=new U(g);return A?{command:m,followup:async()=>{r.markUpdateCompleted(d),await r.setSelectionsAndElements(t.stepName,[e],i)}}:null}else{const g=await this.createTextboxRegions(t.stepName,e,t.data,u,a,r),p=await this.changeInputTextWithRegion(t,t.data.size||da,u,g[0]?.newElement.input||a.text||t.data.defaultText||"",a,r,a?.customiseAllText??!1,h,s),m=g.flatMap(y=>y.commands);if(l){const y=g.map(w=>new sa(w.regionElement.id,l));m.push(...y)}if(c){const y=g.map(w=>new la(w.newElement.id,c,t.data.strokeThickness));m.push(...y)}p&&m.push(p);const f=new U(m);return A?{command:f,followup:async()=>{r.markUpdateCompleted(d)}}:null}}injectReplaceableText(t,e){return e.replaceableText?e.replaceableText.replace("{{}}",t):t}async createTextboxRegions(t,e,a,i,r,o){if(!a||!a.regions)throw new Error("Step data not supplied");const s=r.text||a.defaultText||"",l=Nt(s,o),c=this.getProcessedInput(l,a,!1),d=async(A,h)=>{const p=o.getLayouts().find(f=>f.panelId===A.panelId),m=N();try{if(!p)throw new Te("Failed to find layout for region: "+A.panelId);const f=await P.ensureFullOption(a.colorOption);let y;if(f&&f.variants){const k=await P.getDefaultVariant(f);k&&(y=this.createTextFillSpotColor(f,k),o.updateStorage(t,{colorProfileAssetKey:f.colorProfile?.key}))}const w=await this.getDefaultColor(a),F=w||"#000000",b={stepRegion:A,stepRegionIndex:h,stepName:t,align:this.textAlign(a),fill:r.color?r.color:F,fontSize:a.size||da,fontData:i,id:m,layer:A.layer,layerIndex:A.layerIndex,rotation:A.rotation,text:c,input:s,type:D.Textbox,vertical:a.vertical,x:A.left,y:A.top,height:A.height,width:A.width,immutable:A.immutable,verticalAlign:a.verticalAlign||"middle",curved:a.curved,paths:a.paths,fillSpotColorDefinition:y},v=[],I=new Map,M=new Map;if(!b.fontData)throw new O("Failed to resolve font data for text.");const[R,x]=Kt(b.fontSize,b.fontData,{left:b.x,top:b.y,width:b.width,height:b.height,rotation:b.rotation,panelId:""},[c],{size:a.size,minSize:a.minSize,maxSize:a.maxSize});I.set(b.id,R),M.set(b.id,x);const T=a.curved||a.vertical?c:(x||[]).join(`
1407
+ `);v.push(this.generateTextChangeCommandsForRegion(R,a,b.id,T));const L=new G(b,p);return{regionElement:{id:m,region:A,regionIndex:h},commands:[L,...v],newElement:b,fontData:i}}catch(f){throw console.log(f),new Me("Error adding font to region")}},u=await Promise.all(a.regions.map(d)).catch(A=>{throw A instanceof Me?(Mi.setLatestToast("Failed to load font.",he.Error),A):A instanceof Te?A:new Error(A)});return await o.setSelectionsAndElements(t,[e],u.map(A=>A.regionElement),async()=>{o.updateMetadata(t,{text:s}),o.updateStorage(t,{text:s})}),u}generateTextChangeCommandsForRegion(t,e,a,i){const r=[],o=new Fi(a,i);if(r.push(o),!e.size){const l=new Pi(a,t);r.push(l)}return new U(r)}async changeInputTextWithRegion(t,e,a,i,r,o,s,l,c,d){const u=(i||"").replace(/^(?![\u000A\u000D])[\u0000-\u001F\u007F-\u009F]/g,""),A=Nt(u,o),h=this.getProcessedInput(A,t.data,s),g=o.getRegionElements(t.stepName),p=new Map,m=new Map;for(const b of g)if(b.region){const[v,I]=Kt(e,a,b.region,[h],{size:t.data.size,minSize:t.data.minSize,maxSize:t.data.maxSize});p.set(b.id,v),m.set(b.id,I)}const y=(()=>{if(t.data&&t.data.maxLength&&h.length>t.data.maxLength)return d&&d(!0),{info:"0"};const b=o.getWorkflowExperience().getProfanityList(),v=ma.split(h.toLowerCase());for(const I of v)for(const M in b){const R=b[M].toLowerCase().replace(/\s/g,"");if(I===R){const T="Blocked profanity.";return l(T),{error:T}}}if(!t.data.vertical&&!t.data.allowNewlines&&(h.includes(`
1408
1408
  `)||h.includes("\r"))){const I="Text may not span multiple lines.";return l(I),{error:I}}if(!t.data.curved&&!Array.from(m.values()).every(M=>M)){const M="Text does not fit.";return l(M),{error:M}}return l(void 0),{info:(t.data.maxLength-h.length).toString()}})();if(y.error){c(y.error);return}if(c(`${y.info} characters remaining`||""),d)return;o.updateStorage(t.stepName,{text:u}),o.updateMetadata(t.stepName,{text:this.injectReplaceableText(u,t.data)}),(r.defaultCleared||!t.data.deleteDefaultOnFocus)&&u.trim()!==""&&o.setMandatoryFulfilled(t.stepName,!0);const w=[];for(const b of g){const v=t.data.curved?h:(m.get(b.id)||[]).join(`
1409
- `);w.push(this.generateTextChangeCommandsForRegion(p.get(b.id)||1,t.data,b.id,v))}return new U(w)}}const j=new cl;class dl{}const ul="data:application/octet-stream;base64,AAEAAAAPAIAAAwBwRkZUTYdHeHoAAElcAAAAHEdERUYAJwBUAAAe2AAAAB5HUE9TkNtcVAAAHygAACoyR1NVQrj/uP4AAB74AAAAME9TLzJoWmUcAAABeAAAAGBjbWFwtkIacAAAAxAAAAJWZ2FzcP//AAMAAB7QAAAACGdseWY27KOUAAAGCAAAFcRoZWFkFPal0gAAAPwAAAA2aGhlYQU0Ar0AAAE0AAAAJGhtdHiADw6qAAAB2AAAAThsb2Nh5CzfJAAABWgAAACebWF4cACVAEwAAAFYAAAAIG5hbWXeIPPyAAAbzAAAAiJwb3N0ABeZTwAAHfAAAADdAAEAAAABAAAZ9vREXw889QALA+gAAAAA2ZexNAAAAADZl7E0ADL/yQJ2ArwAAAAIAAIAAAAAAAAAAQAAArz/wwAAAqsAAAAAAnYAAQAAAAAAAAAAAAAAAAAAAE4AAQAAAE4ASQAFAAAAAAACAAAAAQABAAAAQAAAAAAAAAAEAbsBkAAFAAACigK7AAAAjAKKArsAAAHfADEBAgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAABYWFhYAEAACgCtArz/wwAAAqkANgAAAAMAAAAAAmQCZAAAACAAAgIPADIAAAAAAU0AAAAAAAAAAAAAALQAAAD3ADUCfQA1AcoANQKrADUCDQA1AX4ANQHYADUBNQA1AcgANQHUADUB8AA1AeEANQHpADUBqQA1AdAANQHpADUCqgA1Af8ANQGaADUB3wA1AbgANQFtADUBbQA1AekANQG8ADUA1QA1AYcANQHBADUBUAA1AhsANQHBADUB4QA1AZYANQH0ADUBxQA1AcUAMgGJADUBwwA1Ad0ANQJ1ADUB9wA1AcoANQF6ADUB3AA1Af8ANQGaADUB3wA1AbgANQFtADUBbQA1AekANQG8ADUA1QA1AYcANQHBADUBUAA1AhsANQHBADUB4QA1AZYANQH0ADUBxQA1AcUAMgGJADUBwwA1Ad0ANQJ1ADUB9wA1AcoANQF6ADUAtAAAAAAAAAAAAAMAAAADAAAAHAABAAAAAAFQAAMAAQAAABwABAE0AAAALgAgAAQADgAAAAoADQAhACYAKgA5AFoAXgB6AKAArQDFAM8A1gDdAOUA7wD2AP0A/wF4//8AAAAAAAoADQAgACMAKgAwAEAAXgBhAKAArQDAAMcA0QDYAOAA5wDxAPgA/wF4//8AAf/5//f/5f/k/+H/3P/W/9P/0f+s/6AAAAAAAAAAAAAAAAAAAAAA/0v+twABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAIAAwADoARABOAF4AaAAAAAAAAAAXABcAFwAXABcAFwAZABsAGwAbABsAHwAfAB8AHwAkACUAJQAlACUAJQAlACsAKwArACsALwAyADIAMgAyADIAMgA0ADYANgA2ADYAOgA6ADoAOgA/AEAAQABAAEAAQABAAEYARgBGAEYASgAAAQYAAAEAAAAAAAAAAQIDAAAEAAAAAAAAAAAAAAAAAAAAAQAABQYABwgJCgAAAAsAAAAAAAwNDg8QERITFBUAAAAAAAAWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAAAAAxAAAyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKSwAAAAAAFxcZGyQlKzIyMjIyMjQ2NjY2Ojo6Oj9AQEBAQEZGRkYAAAAAAAAAAAAAAAAAAAAlAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABMFxclAAAAAAAAAAAAAEovAAAAAAAAAAAAAAAXGxcbGx8fHx8lJQAlKysrAAAAAAAAAAAAAAAAAAAAACgAKAAoACgAKAAoADwAbgC0AQgBbgGQAcYB1AIGAkYCYAKSAtAC4gMoA2ADyAPgBBoEUAR4BI4EogTWBOoE9gUiBToFSAViBXoFqgXWBjAGWgaaBqwG2AbqBwYHIAc2B0wHXgd2B7AH5ggOCCQIOAhsCIAIjAi4CNAI3gj4CRAJQAlsCcYJ8AowCkIKbgqACpwKtgrMCuIK4griAAAABQAyAAAB3QK8AAMABgAJAAwADwAAEyERIRsCCwEREwMhAxMRMgGr/lUcubrGtMG5AXKttQK8/UQCqP7LATX+tgEs/acBGP7MAUn+0QJdAAACADUABQDCAmoAAwAHAAATESMRExUjNcGLi4sCaf5mAZr+KY2NAAAAAgA1AAACSAJkABsAHwAAJQcjNyMHIzcjNzM3IzczNzMHMzczBzMHIwczByc3IwcBthdrFkoXbBdeDl8KYA9fFWwVShVtFWoPagpqDscJSgqqqqqqqmxHbJqamppsR2xsR0cAAAEANf/JAZUCqgAwAAABFR4BByM0LgEjIgYVFBYXHgMVFA4BBxUjNS4BNTMUFjMyNjU0LgInJjU0Njc1ARwwPAF3CBQOExcsPCEwFgkZNyhnPkGDGRQTGBElHBprRzQCqkQNV0INGBIdFB8hGw4tMCkUJkU7EENDCmk8GiUgFBIeGA4LKXpKVxBEAAAABQA1/+8CdgJrAAwAGAAcACkAOAAAEzQ2MzIeARUUBiMiJjcVFBYzMjY1NCYiBiUDIxMDNTQ+ATMyFhQGIyImNxUUHgEzMjY1NC4BIyIGNk02JD0jTTc2TVEeFBUeHiodAWjhVeEtIz0kN01ONjZOUQ4YDRUeDhcOFR4B1j5XKEUoPldXPgEXISEYGCEhcf2dAmP+JgEoRChXfFdWPwEPGhAiGBAbDyIAAwA1AAAB2AJnACQAOQBIAAAlFwcnDgEjIiY1ND4CNyY1NDYzMhYVFA4IBxc3MyciBhUUHgQXPgU1NCYjAxY+ATcnDgUVFBYBmT8qQgdUMk1cDyETFDVTNzdPAwUJBw0HDgUMATUabPULGQQFCgUKAQENBAsEBBYNAQ8bEQRRAQ4ECwUEIbFNZEERMGJKHzMqEhFDQD9ZVjsLFxITDRAJDgULAUFBtRgSBw4LDwcOAQEQBg8LDwcPGf58AQsOB2IBDQUOCg8IGyQAAAAAAQA1ATwBSQJtABEAABMHNxcHFwcnFyM3Byc3JzcXJ+YXVSVnZyhTGE0WUShnZyVWGAJselJLJSVOVXp7Vk4nI0tReQACADUAAAGjAmQAFwAmAAA3NTQ+AzMyHgMdARQOAiMiLgI3FRQeATMyPQE0IyIOAjYZJzIvFxQtMicaIjc9Hh09OiR8CBsXOTkSGAsF4KQxTzEhDQwhMFAypDtaMhkYMlvjrBUkH1isVxEeGgABADUAAAEAAmEABQAAMxEjNTMRhE7KAd6D/Z8AAQA1AAMBkwJmACEAADc1Njc+AzU0JiMiByM+Ajc+AzMyFhUUBgcGBzMVOi5WFxkaCx0XMQJ2AQINDQ4qLCIQTlkjLkAargN3L1kYHCcoFyIhXhsgNxccJxIHbU04WDRHHYEAAAEANQAAAZ8CZAAtAAATNjc2MzIWFRQOAwcWFRQGIyImJyYnMxYXMjY1NC4DKwE1MzI1NCYjIgdDAjktP0RVCw0VCwlca0otVRYVBn4KLhobCg8UDQcsFT0RESQCAaxgMCdfQRcoGBcIBiVpTWwrKCRENgElHRAYCwcCbzsVHjMAAgA1//8BuwJjAAoADQAAITUjNRMzETMVIxUnMzUBDdfadDY20WJrcgGF/oN6a+XAAAAAAAEANf//AawCYwAgAAABFSMHNjMyHgIVFA4CIyIuASczFjMyNjU0JiMiBycTAX+uCxsnKUIlExYrSy8zUS8HfRYjGygkHy4SZSoCYoBSEic+QyEkSkIqL00xJi8hHy80HwFTAAACADUAAAG0AmIAFgAoAAABMhYVFAYjIiYnJjU0PwEzBw4BBzAyNgMyPgE1NC4EIyIGFRQeAQEaO19vTy9QGCksepBYAw4CCA0kEx8TBAgLDxQLHSUVHQGvbF9kgConOV1LVdqUBRYFAv7XFCYXChMSEAwHLyEaJxIAAAAAAQA1//8BdAJjAAYAABMhFQMjEyM2AT6sibS9AmJ3/hUB3wAAAwA1AAABmwJkABkAJAAuAAATNTQ2MhYVFA4BBxYVFA4BIi4BNTQ3LgMXFRQWMjY1NCYiBjcVFBYyNjQmIgZCVqBWFBAMPC1RaFEtPAkLEgpwHjAdHTAeCRskGxskGwG/AUJhYkIeMxINJGU5WjMzWjllJAkNHSbhARgqKhkaKirTARcfHy8fHwAAAAACADUAAAG0AmQAFgAkAAA/AT4BNyYOASMiJjU0NjMyFhcWFRQPARM1NC4BIyIGFRQWMzI2fVgDDQQBCA0EO15uTy9QGCoteSsVHhAcKCUfHiUBlAQWBgEBAWxfZIAqJzldTFXaAYkBGiYSLiIgMi4AAgA1/8wCdQJtADgASAAAAQcGBwYzMjY1NCYjIgYHBh4DFxY3FQYnLgQ3ND4CMzIWFRQGIyInBicuATU0NjMyFhc3BzY1NC4CJyYGHQEUFjc2AfscBAIBFhYmbFVhdgcBBhwtVThNX01cQGlGMBUBLExzQniZWjs3FB07NT1PQBwoBwgqCQIHEg0gKCAUIQG2ux0NGVo8Wm2Laxg2RTcpBAUfWxsCASlBVlsvQHpfOqF8XZBBNwEBWkRIcyAWKMkaIgcQGBEBAz8rAyYjAQIAAAIANQAAAcgCZQAHAAoAADcHIxMzEyMvAge8GG6bYJdvGhknK3JyAmT9nHJz1tYAAAMANQABAWQCaAAPABoAJQAANxEzMhcWFRQHFhUUBw4BIwMzMjc2NTQnJisBFxUzMjc2NTQnJiM2lEAiJC9DJhszNx0mEgkQEAgUJQExFAsVFAoWAgJlKShQUygka1cuIhMBfAYLIB4LBuNwCA4mIgwGAAAAAQA1AAABqQJnACUAACUzDgEjIi4CNTQ+AjMyHgMXIy4DIyIOARUUFjMyPgIBSWAQX0cxSiwWFStLMSM7KB4QA2AFDhQfER4pEi8qFCEUCulrfjNXbD47alk0HzJAPR0SISATNEwsSWcXJxkAAgA1AAABgwJlAA8AGAAAMxEzMh4DFxYVFA4CIwMRMzI1NCcmIzZ/EhcsICYOJBUtTzUiKF4TFzMCZAEMFi4hT29BbFcwAdr+r6dDLjkAAAABADUAAAE3AmUACwAAEyEVIxUzFSMVMxUhNgEBlpGSlv8AAmR4cHmKeQAAAAEANQAAATcCZQAJAAAzESEVIxUzFSMRNgEBmJOTAmR5b3r+/gAAAAABADUAAAG3AmYAIQAAARUmBw4CFRQeAjMyNzY3IzUzFgcGIyIuATU0NjMyFhcBQBQ3FygbEBkgESEWGQVr0wUTMH89WCpiX0haEAGbAUgCASNPOC1FKhUaHDlpZkOyVYlXiaZvWwAAAAEANQAAAYYCZQALAAAzIxEzFTM1MxEjNSOcZmaDZ2eDAmTm5v2c9QABADUAAACgAmUAAwAAMxEzETZpAmT9nAABADUAAAFRAmUAGgAAAREUBwYHBiMiLgMnJjUzFBYVFjMyNzY1EQFQDQ8fJi4IESsgIAUCcQEEGxUHBAJk/pZkLCscIwIRHkEsFxcCDAQzGxAhAZEAAAAAAQA1//8BiwJmAAoAABcRMxETMwMTIwMRNmdzbISTfnABAmb+7AEU/s/+zAEJ/vYAAQA1AAABGgJlAAUAADMRMxEzFTZpewJk/iaKAAEANQAAAeUCZQAMAAAzIxEzGwEzESMTAyMDlmCLTEuMYARZRVgCZP52AYr9nAHK/jYBygABADUAAAGMAmUACQAAGwEDMxEjAxMjEZ2NAWNikwJjAmT+lAFs/ZwBaf6XAmQAAAACADUAAAGsAmUADAAfAAATNDYzMhYVFA4BIyImNxQWMzI+BDU0LgIjIg4BNmRWUWs0VDRWZGgqKg8aEQ0IAwgSIhceJw4BLKGXmJpfjUaelUtjDxohKCcUHzo1IDVKAAACADUAAAFgAmYAEAAbAAATMzIeARcWFRQGBw4BKwEVIxMVMzI3NjU0JyYjNoEjMRoMLhcSFjEtKGRkJRoNGBkOHAJlCxMPO2cvWRkdGMAB3ZMJEi8uEQoAAwA1//8BvwJmABsALgA8AAAlFwYiLgInDgIjIi4BNTQ+ATMyFhUUBx4CAyIOBAc2MzIXFhc2NTQuAQMeAzsBMjcmJyYjIgG9AQINGRgcChMsFBM+VycmWD1Uah0GDQzAERwSDQcCARgVKCIbHQkbLGgGFRUTBgYWDhEOGSAPenkBAggSDRMTAlaGU1GIXK5/ZUkIBwEBZxIgHScLCBEoHzQeLTJOKP7/HCgQCQwiFSMAAAAAAgA1//8BjwJmAA0AGgAAJRcjJxUjETMXFhcWFRQnNjU0LgInKwEVMzIBDYF+cGpqOi4UW4QYCxARBQY1Lhb7++vqAmQBBQosgohEFyoVHg4IAZkAAQAyAAABjwJnACsAADczFBY3NjU0JicuAycmPgEzMhYXIy4DIyIGFRQWFx4BFRQOAiMiJjZ2JBIyJjwRICobAQE0TSs5WQp0AQMJEg0RHCdBQTEUJkQsXFbFKx8BBDgWIB4JFyg7ITlVKFRbCwwTCh0UFSIkJEc2JUE3IGkAAAABADUAAAFTAmUABwAAMxEjNSEVIxGLVQEdVQHseHj+FAAAAAABADUAAAGNAmUAGgAAEzMRFBceATI2NzY1ETMRFA4BBwYjIiYnLgE1NmsIBR8qHgUIagcQDjBUIk0ZGQwCZP6WLhsSGBYQFzUBa/6WM0MvFEEcJCZISwAAAQA1AAABpwJlAAYAADMDMxsBMwO2gGdQUWmAAmT+UwGt/ZwAAQA1AAACQAJkAAwAADMDMxsBMxsBMwMjCwGfaWk4PFA8OGhrWz4+AmP+cwGN/nEBj/2dAYz+dAABADUAAAHBAmUACwAAMxMDMxc3MwMTIycHNop6c0NCcnmJc1VRAUYBHq6u/t/+vdnZAAAAAQA1AAABlAJlAAkAADczAzMXNzMDFSOsAXdvQUFtd3HrAXn29v6H6wAAAAABADUAAAFDAmYACQAAAQMzFSE1EyM1IQFDiIj+85OTAQ0B5v6kimcBdYkAAAEANQFFAaYCagAGAAAbATMTIycHNnx3fYE4NwFFAST+3LOzAAIANQAAAcgCZQAHAAoAADcHIxMzEyMvAge8GG6bYJdvGhknK3JyAmT9nHJz1tYAAAMANQABAWQCaAAPABoAJQAANxEzMhcWFRQHFhUUBw4BIwMzMjc2NTQnJisBFxUzMjc2NTQnJiM2lEAiJC9DJhszNx0mEgkQEAgUJQExFAsVFAoWAgJlKShQUygka1cuIhMBfAYLIB4LBuNwCA4mIgwGAAAAAQA1AAABqQJnACUAACUzDgEjIi4CNTQ+AjMyHgMXIy4DIyIOARUUFjMyPgIBSWAQX0cxSiwWFStLMSM7KB4QA2AFDhQfER4pEi8qFCEUCulrfjNXbD47alk0HzJAPR0SISATNEwsSWcXJxkAAgA1AAABgwJlAA8AGAAAMxEzMh4DFxYVFA4CIwMRMzI1NCcmIzZ/EhcsICYOJBUtTzUiKF4TFzMCZAEMFi4hT29BbFcwAdr+r6dDLjkAAAABADUAAAE3AmUACwAAEyEVIxUzFSMVMxUhNgEBlpGSlv8AAmR4cHmKeQAAAAEANQAAATcCZQAJAAAzESEVIxUzFSMRNgEBmJOTAmR5b3r+/gAAAAABADUAAAG3AmYAIQAAARUmBw4CFRQeAjMyNzY3IzUzFgcGIyIuATU0NjMyFhcBQBQ3FygbEBkgESEWGQVr0wUTMH89WCpiX0haEAGbAUgCASNPOC1FKhUaHDlpZkOyVYlXiaZvWwAAAAEANQAAAYYCZQALAAAzIxEzFTM1MxEjNSOcZmaDZ2eDAmTm5v2c9QABADUAAACgAmUAAwAAMxEzETZpAmT9nAABADUAAAFRAmUAGgAAAREUBwYHBiMiLgMnJjUzFBYVFjMyNzY1EQFQDQ8fJi4IESsgIAUCcQEEGxUHBAJk/pZkLCscIwIRHkEsFxcCDAQzGxAhAZEAAAAAAQA1//8BiwJmAAoAABcRMxETMwMTIwMRNmdzbISTfnABAmb+7AEU/s/+zAEJ/vYAAQA1AAABGgJlAAUAADMRMxEzFTZpewJk/iaKAAEANQAAAeUCZQAMAAAzIxEzGwEzESMTAyMDlmCLTEuMYARZRVgCZP52AYr9nAHK/jYBygABADUAAAGMAmUACQAAGwEDMxEjAxMjEZ2NAWNikwJjAmT+lAFs/ZwBaf6XAmQAAAACADUAAAGsAmUADAAfAAATNDYzMhYVFA4BIyImNxQWMzI+BDU0LgIjIg4BNmRWUWs0VDRWZGgqKg8aEQ0IAwgSIhceJw4BLKGXmJpfjUaelUtjDxohKCcUHzo1IDVKAAACADUAAAFgAmYAEAAbAAATMzIeARcWFRQGBw4BKwEVIxMVMzI3NjU0JyYjNoEjMRoMLhcSFjEtKGRkJRoNGBkOHAJlCxMPO2cvWRkdGMAB3ZMJEi8uEQoAAwA1//8BvwJmABsALgA8AAAlFwYiLgInDgIjIi4BNTQ+ATMyFhUUBx4CAyIOBAc2MzIXFhc2NTQuAQMeAzsBMjcmJyYjIgG9AQINGRgcChMsFBM+VycmWD1Uah0GDQzAERwSDQcCARgVKCIbHQkbLGgGFRUTBgYWDhEOGSAPenkBAggSDRMTAlaGU1GIXK5/ZUkIBwEBZxIgHScLCBEoHzQeLTJOKP7/HCgQCQwiFSMAAAAAAgA1//8BjwJmAA0AGgAAJRcjJxUjETMXFhcWFRQnNjU0LgInKwEVMzIBDYF+cGpqOi4UW4QYCxARBQY1Lhb7++vqAmQBBQosgohEFyoVHg4IAZkAAQAyAAABjwJnACsAADczFBY3NjU0JicuAycmPgEzMhYXIy4DIyIGFRQWFx4BFRQOAiMiJjZ2JBIyJjwRICobAQE0TSs5WQp0AQMJEg0RHCdBQTEUJkQsXFbFKx8BBDgWIB4JFyg7ITlVKFRbCwwTCh0UFSIkJEc2JUE3IGkAAAABADUAAAFTAmUABwAAMxEjNSEVIxGLVQEdVQHseHj+FAAAAAABADUAAAGNAmUAGgAAEzMRFBceATI2NzY1ETMRFA4BBwYjIiYnLgE1NmsIBR8qHgUIagcQDjBUIk0ZGQwCZP6WLhsSGBYQFzUBa/6WM0MvFEEcJCZISwAAAQA1AAABpwJlAAYAADMDMxsBMwO2gGdQUWmAAmT+UwGt/ZwAAQA1AAACQAJkAAwAADMDMxsBMxsBMwMjCwGfaWk4PFA8OGhrWz4+AmP+cwGN/nEBj/2dAYz+dAABADUAAAHBAmUACwAAMxMDMxc3MwMTIycHNop6c0NCcnmJc1VRAUYBHq6u/t/+vdnZAAAAAQA1AAABlAJlAAkAADczAzMXNzMDFSOsAXdvQUFtd3HrAXn29v6H6wAAAAABADUAAAFDAmYACQAAAQMzFSE1EyM1IQFDiIj+85OTAQ0B5v6kimcBdYkAAAAAEADGAAEAAAAAAAEACAASAAEAAAAAAAIABwArAAEAAAAAAAMAFQBfAAEAAAAAAAQACACHAAEAAAAAAAUAIgDWAAEAAAAAAAYADwEZAAEAAAAAABAACAE7AAEAAAAAABEABwFUAAMAAQQJAAEAEAAAAAMAAQQJAAIADgAbAAMAAQQJAAMAKgAzAAMAAQQJAAQAEAB1AAMAAQQJAAUARACQAAMAAQQJAAYAHgD5AAMAAQQJABAAEAEpAAMAAQQJABEADgFEAFYAZQBnAGUAbQBpAHQAZQAAVmVnZW1pdGUAAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAADEALgAwADAAMgA7AFYAZQBnAGUAbQBpAHQAZQBSAGUAZwB1AGwAYQByAAAxLjAwMjtWZWdlbWl0ZVJlZ3VsYXIAAFYAZQBnAGUAbQBpAHQAZQAAVmVnZW1pdGUAAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAwADIAOwBGAG8AbgB0AHMAZQBsAGYAIABNAGEAawBlAHIAIAAzAC4AMwAuADAAAFZlcnNpb24gMS4wMDI7Rm9udHNlbGYgTWFrZXIgMy4zLjAAAFYAZQBnAGUAbQBpAHQAZQBSAGUAZwB1AGwAYQByAABWZWdlbWl0ZVJlZ3VsYXIAAFYAZQBnAGUAbQBpAHQAZQAAVmVnZW1pdGUAAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAAAAAAgAAAAAAAP+DADIAAAAAAAAAAAAAAAAAAAAAAAAAAABOAAAAAQACAQIBAwADAAQABgAHAAgACQANABMAFAAVABYAFwAYABkAGgAbABwAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0AQQBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0ArAEECWNvbnRyb2xMRgljb250cm9sQ1IKc29mdGh5cGhlbgAAAAAAAAH//wACAAEAAAAMAAAAFgAAAAIAAQABAE0AAQAEAAAAAgAAAAAAAQAAAAoALAAuAAJERkxUAA5sYXRuABgABAAAAAD//wAAAAQAAAAA//8AAAAAAAAAAQAAAAoAMAA+AAJERkxUAA5sYXRuABoABAAAAAD//wABAAAABAAAAAD//wABAAAAAWtlcm4ACAAAAAEAAAABAAQAAgAAAAEACAABKd4ABAAAAEYAlgEwAd4CjAM2A+AEegUsBWYGDAa+B3AIHgjQCYIKNAriC4gMAgx0DOYNZA3mDlQOyg88D54QEBCGEQARchHsEmIS1BOWFAwUghTwFWIV1BaiFxQXkhgEGMYZdBomGtQbfhwYHL4dYB3+HpgfPh/oIJYhPCHmIpQjRiPsJJolSCXuJpQnQifoKJIpRAAmAAn/8QAK//sADP/7AA3/+wAO//sAD//7ABD/+wAR//sAEv/7ABP/+wAU//sAFf/xABb/8QAZ//sAHf/2AB7/+wAf//sAIP/xACH/+wAi//sAI//7ACT/+wAl//EAJv/2ACf/8QAo//sAKf/2ACr/+wAr//sALP/sAC3/7AAu/+IAL//dADD/9gAx/+wAMv/7ADP/+wA0//YAKwAG//EACP/nAAn/4gAK/9MAC//iAAz/9gAN/+IADv/sAA//4gAQ/9gAEf/iABL/1QAT//EAFP/nABX/8QAW/9gAMf/TADL/pgAz//MANP/nADX/8QA2//EAN//7ADj/7gA5//YAOv/7ADv/2AA8//EAPf/2AD7/9gA///EAQP/sAEH/+wBC/+wAQ//xAET/7ABF/+wARv/2AEf/3QBI/90ASf/EAEr/zgBL//YAKwAG//YAB//2AAn/3QAL/+wADP/sAA3/8QAO//YAD//sABD/8QAR/+wAEv/iABP/5wAU/+wAFf/dABb/7AAX/78AMf/YADL/sAAz/+IANP/iADX/8QA2/+cAN//xADj/3QA5/+wAOv/2ADv/4gA8//EAPf/xAD7/8QA///YAQP/YAEH/9gBC/+cAQ//sAET/7ABF/+wARv/xAEf/zgBI/9MASf/OAEr/zgBL/+wAKgAG//YAB//iAAj/4gAK/+IADP/dAA3/ugAO/+IAD//iABD/5wAR/+IAEv/dABP/yQAU/90AFf+mABb/0wAx/5gAMv/YADP/4gA0/9MANf/xADb/7AA3/+wAOP/iADn/7AA6//EAO//dADz/5wA9/+wAPv/sAD//5wBA/9gAQf/sAEL/zgBD/+wARP/YAEX/tQBG/90AR/+hAEj/oQBJ/8QASv+DAEv/7AAqAAb/8QAH/90ACP/YAAn/oQAL/8kADP/iAA3/sAAO/+cAD//YABD/4gAR/90AEv/bABP/4gAU/+IAFf/TABb/5wAg/+QAMf/nADL/3AAz//QANP/rADX/9AA2//IAN//4ADj/8AA5//QAOv/1ADv/7AA8/+oAPf/7AD7/9wA///IAQP/tAEH/+wBC/+IAQ//2AET/4wBF/7YARv/vAEf/pgBK/6MAS//yACYAB//TAAj/8QAK/84ADP/dAA3/9gAO//EAD//dABD/pgAR/8kAEv+6ABP/7AAU/90AFf/OADH/xAAy/5IAM//sADT/3QA1/+cANv/xADf/9gA4/90AO/9WADz/5wA9//EAPv/sAD//5wBA/84AQf/dAEL/0wBD/+cARP/nAEX/5wBG/+cAR//dAEj/2ABJ/7oASv/JAEv/4gAsAAb/+wAH//sACP/xAAn/zgAK/+cAC//dAAz/9gAN/9gADv/tAA//7AAQ/+kAEf/rABL/3QAT/90AFP/hABX/3QAW/90AMf/nADL/vwAz/+cANP/nADX/8QA2//EAN//sADj/5wA5//YAOv/2ADv/4gA8//EAPf/2AD7/+wA///sAQP/2AEH/+wBC/+wAQ//7AET/7ABF/9MARv/7AEf/yQBI/84ASf+wAEr/xABL/+cADgAG//sACf/xAAv/7AAN//sADv/7AA8AAAAR//EAEv/0ABP/9gAU//EAFf/xABb/7AAx//YAQP/2ACkABv/7AAf/9gAI//sACf/iAAr/5wAL/+wADP/vAA3/3QAO//sAD//qABD/8QAR/+wAEv/nABP/8QAU/+cAFf/iABb/7AAx/+cAMv/vADP//AA0/+cANf/7ADb//gA4//EAOf/8ADr//AA7/+kAPP/6AD3//QA+//4AP//7AEL/6gBD//0ARP/2AEX/7ABG//EAR//YAEj/4gBJ/+wASv/LAEv//AAsAAb/+wAH//EACP/2AAn/0wAK/+IAC//JAAz/5wAN/90ADv/iAA//7AAQ/+cAEf/sABL/3QAT/9MAFP/iABX/zgAW/+cAMf/YADL/xAAz/+wANP/dADX/6AA2//EAN//xADj/4wA5//EAOv/2ADv/7AA8/+wAPf/sAD7/9gA//+wAQP/iAEH/8QBC/90AQ//nAET/5wBF/8QARv/mAEf/xABI/8kASf+1AEr/rQBL/+IALAAG//sAB//7AAj/9gAJ/9MACv/2AAv/ugAM/+kADf/dAA7/9gAP/+wAEP/2ABH/8AAS//EAE//2ABT/5wAV/9gAFv/sADH/vwAy/9UAM//eADT/3wA1//EANv/xADf/9gA4/+IAOf/xADr/9gA7/+wAPP/xAD3/9gA+//EAP//2AED/2ABB//EAQv/nAEP/9gBE/+cARf/TAEb/8QBH/9gASP/YAEn/xgBK/78AS//xACsABv/7AAf/9gAI/+wACf/TAAr/5wAL/90ADP/lAA3/zgAO/90AD//dABD/7AAR/+IAEv/iABP/2AAU/+IAFf/JABb/5wAx/90AMv/EADP/6wA0/+EANf/wADb/8AA4/9wAOf/dADr/7AA7/9gAPP/sAD3/5wA+/+wAP//iAED/0wBB/+IAQv/YAEP/4gBE/84ARf/JAEb/4gBH/8kASP/OAEn/vwBK/8kAS//TACwABv/7AAf/3wAI/+cACf+wAAr/4wAL/8kADP/dAA3/xwAO/+cAD//dABD/7AAR/+cAEv/iABP/yQAU/9cAFf+/ABb/4gAa/+kAMf/YADL/uwAz/+EANP/dADb/6wA3//MAOP/lADn/8QA6//IAO//eADz/5wA9/+4APv/zAD//8ABA/+IAQf/2AEL/6gBD//YARP/kAEX/zABG/+8AR/+0AEj/uwBJ/64ASv+vAEv/5QAsAAb/+wAH/90ACP/nAAn/4gAK/9MAC//nAAz/3QAN//YADv/eAA//3QAQ/7AAEf/OABL/sAAT//sAFP/dABX/0wAW/9MAMf/iADL/iAAz//YANP/OADX/9gA2//EAN//xADj/0wA5//YAOv/zADv/gAA8//EAPf/7AD7/+wA///YAQP/OAEH/7gBC/84AQ//2AET/2ABF//sARv/2AEf/5wBI/+cASf/TAEr/4gBL/+wALAAG//sAB//2AAj/8QAJ/9gACv/nAAv/3QAM/+IADf/dAA7/4gAP/+IAEP/nABH/5wAS/9gAE//YABT/3QAV/84AFv/sADH/5wAy/78AM//nADT/2AA1/+cANv/nADf/7AA4/90AOf/sADr/7AA7/+cAPP/sAD3/8QA+/+wAP//xAED/4gBB//EAQv/dAEP/5wBE/+IARf/YAEb/5wBH/78ASP/HAEn/sABK/7UAS//dACsABv/xAAf/8QAI/+IACf/dAAr/0wAL/+IADP/iAA3/3QAO/+cAD//dABD/zgAR/9MAEv/EABP/0wAU/84AFv/dADH/4gAy/6EAM//jADT/3QA1/+wANv/sADf/5wA4/90AOf/nADr/8QA7/78APP/xAD3/9gA+/+wAP//nAED/3QBB/+cAQv/nAEP/5wBE/+IARf/OAEb/3QBH/8QASP/JAEn/lwBK/7oAS//YACkABv/sAAf/0wAI/90ACf/OAAr/3QAM/90ADf/EAA7/5wAP/9gAEP/YABH/3QAS/9MAE//YABT/4gAV/90AMf/sADL/wAAz/+8ANP/kADX/6wA2//AAN//2ADj/5AA5//EAOv/uADv/1gA8//QAPf/2AD7/8QA///AAQP/dAEH/7ABD/+gARP/YAEX/1QBG/+wAR/+3AEj/wwBJ/7UASv+wAEv/5gAeAAf/zgAi/+4AI//5ACT/7wAy/9AAM//pADT/sQA1/+sANv/nADf/5gA4/7oAOf/vADr/9wA7/9AAPP/sAD3/6wA+/+YAP//sAED/uwBB/+kAQv+7AEP/5ABE/9QARf+6AEb/0ABH/34ASP+SAEn/zQBK/5sAS//nABwAF//RACT//wAy/9EAM//uADT/5wA1/+8ANv/3ADf/7gA4/+gAOf/3ADr/+wA7/9oAPP/vAD3/9wA+/+4AP//vAED/4QBB//cAQv/nAEP/7wBE/+4ARf/QAEb/9wBH/8EASP/MAEn/wwBK/7sAS//nABwAF//QABv/+QAy/8EAM//zADT/6wA1//sANv/zADf/+wA4/+8AOf/zADr//gA7/+EAPP/vAD3/9wA+//kAP//3AED/4gBB//kAQv/jAEP/8wBE/+YARf/VAEb/+QBH/84ASP/JAEn/twBK/8EAS//rAB8ABv/7ABL/3wAX/8kAJf/5ACv/7wAy/7oAM//zADT/6wA1/+8ANv/uADf/8wA4/+oAOf/vADr/7wA7/9QAPP/5AD3//gA+//EAP//vAED/4wBB//MAQv/mAEP/7gBE/+cARf/XAEb/6wBH/8kASP/JAEn/twBK/7cAS//nACAABv/7ACQAAgAl/+8AJ//5AC3//gAv//4AMv/oADP//QA0/+sANf/7ADb/+gA3//sAOP/jADn/9wA6//oAO//kADz//wA9//0APv/+AD8AAABA/+gAQf/7AEL/6ABD//sARP/sAEX/8QBG//sAR//qAEj/6wBJ/+cASv/qAEv/+QAbAAb/+wAl/+8AMv+5ADP/+wA0/+8ANf/7ADb/+wA3//0AOP/vADn/+wA6AAAAO/+7ADz//gA9//4APv/7AED/7ABB//4AQv/nAEP/+QBE//kARf/7AEb/+QBH//MASP/rAEn/4gBK/+8AS//7AB0ABv/2ABf/zgAl/+8AMv+3ADP/9wA0/+sANf/3ADb/8QA3//kAOP/uADn/8wA6//sAO//YADz/8wA9/+4APv/3AD//8wBA/+MAQf/3AEL/6QBD/+8ARP/nAEX/1ABG/+8AR//JAEj/zABJ/6YASv/JAEv/3AAcAAb/+wAX//MAJf/7ADL/6wAz//4ANP/uADX/+wA2//4AN//+ADj/8wA5//0AOv/+ADv/7gA8//4APf/+AD7/+wA///4AQP/uAEL/9wBD//4ARP/+AEX/+QBG//4AR//uAEj/9wBJ/+4ASv/zAEv//gAYAAb/+wAx//YAMv/rADP//wA0//MANf//ADYAAQA3//8AOP/zADv/6AA8//4APf/+AD4AAQBA/+4AQf//AEL/8wBD//4ARP/4AEX//QBH/+wASP/3AEn/7ABK//EASwABABwABv/2ABf/4QAy/8oAM//9ADT/+QA1//4ANv/7ADf//gA4//MAOf/+ADr//wA7/+EAPP/7AD3//gA+//4AP//+AED/7wBB//4AQv/zAEP//gBE//sARf/7AEb//gBH/+8ASP/5AEn/2gBK//oAS//+AB0ABv/nABf/5wAx/7AAMv/hADP/7gA0/7QANf/rADb/5wA3/+4AOP+sADn/6wA6//kAO/+3ADz/6gA9/+8APv/nAD//5wBA/6wAQf/uAEL/rgBD/+cARP+8AEX/3ABG/9oAR//cAEj/0QBJ/9oASv/RAEv/7wAeAAb/9gAX//cAI//9ADH/vwAy/+4AM//5ADT/2gA1//4ANv/3ADf/+wA4/9oAOf/3ADr/+wA7/+cAPP/7AD3/+QA+//cAP//5AED/1ABB//sAQv/cAEP/9wBE/+8ARf/JAEb/6wBH/8QASP++AEn/5wBK/8EAS//+ABwAF//7ADH/7AAy/+QAM//+ADT/7gA1//4ANgAAADf//QA4//cAOf/7ADr//gA7/+4APP/+AD3//gA+//0AP//7AED/7wBB//4AQv/uAEP//gBE//cARf/7AEb/+QBH/+gASP/vAEn/6wBK/+gAS//+AB4ABv/7ABf/8wAa//4AHf/3ACX/9wAq//4AMf/2ADL/5AAz//0ANP/zADX/+wA2//4AN//+ADj/+QA7/+4APf/+AD7/+wA///4AQP/2AEH/+gBC/+4AQ//7AET/+QBF//sARv/+AEf/8wBI/+8ASf/zAEr/6wBL//4AHQAG//EAJP/3ADH/7AAy/7sAM//sADT/4wA1/+8ANv/vADf/9wA4/+QAOf/qADr/9wA7/98APP/vAD3/9wA+/+sAP//uAED/4wBB/+4AQv/mAEP/7wBE/+IARf/VAEb/7gBH/8MASP/GAEn/uwBK/7oAS//fABwABv/sACT//gAy/54AM//rADT/6gA1//EANv/rADf/9wA4/+MAOf/oADr/9wA7/64APP/sAD3/8QA+/+wAP//sAED/4QBB//MAQv/oAEP/5ABE/9gARf/kAEb/7gBH/9EASP/QAEn/uwBK/8QAS//zADAAF//3ABj//wAZ/+kAGv//ABv//QAc//4AHf/pAB7/+wAf//8AIP/iACH//gAi//8AI//+ACT//wAl/+IAJ//uACj//gAp/+cAKv/hACv/+QAs/8MALf/QAC7/5AAv/8wAMP//ADL/4QAz//4ANP/jADX/9wA3//kAOP/fADn/9wA7/+IAPP/5AD3/+gA+//EAP//6AED/2gBB/+8AQv/aAET/7wBF/9cARv/qAEf/xgBI/7sASf/qAEr/tABL//sAHQAG/+cAF//oACT/+gAy/+IAM//xADT/zAA1/+8ANv/sADf/+gA4/8wAOf/3ADr/8wA7/8kAPP/uAD3/7wA+/+wAP//rAED/yQBB//cAQv/MAEP/+ABE/9QARf/KAEb/2gBH/8EASP/EAEn/4gBK/7cAS//vAB0ABv/xABv/+QAl/+4AMv+8ADP/7wA0/9wANf/zADb/6AA3//cAOP/hADn/5gA6//MAO//aADz/6QA9//MAPv/pAD//6wBA/+MAQf/3AEL/2gBD/+kARP/rAEX/1ABG/+kAR//JAEj/zABJ/7QASv+7AEv/5wAbAAb/9gAy/6YAM//9ADT/0wA1//oANv/+ADf//QA4/9UAOf/3ADr//wA7/7kAPP/6AD3//gA+//sAP//7AED/0ABB//oAQv/XAEP/+QBE/+IARf/zAEb/9wBH/+8ASP/vAEn/6gBK/+cAS//6ABwABv/7ACQAAgAy/9UAM//7ADT/7wA1//cANv/9ADf//wA4/+4AOf/7ADr//wA7/+sAPP/+AD3//gA+//0AP//6AED/7gBB//sAQv/sAEP/+wBE/+8ARf/7AEb//QBH/+8ASP/qAEn/3wBK//gAS//+ABwABv/nABf/lQAy/4IAM//3ADT/wQA1/+kANv/nADf/+gA4/8QAOf/oADr/6wA7/5UAPP/uAD3/+wA+//cAP//vAED/wQBB/+8AQv/DAEP/5wBE/84ARf/uAEb/7gBH/+kASP/pAEn/zgBK/+4AS//7ADMABv/sABf/owAY//kAGf/XABr//gAb//4AHP/5AB3/0AAe//gAIP+tACH/8wAi//4AJP/+ACX/0AAm//kAJ//MACj//gAp/9oAKv/+ACv//gAs/+MALf/zAC7/3AAv//cAMP/7ADL/jwAz/+oANP/CADX/7wA2/+oAN//3ADj/xgA5/+sAOv/6ADv/qgA8/+sAPf/7AD7/7wA//+8AQP++AEH/7gBC/8MAQ//qAET/1QBF/+sARv/pAEf/6ABI/+cASf/iAEr/2gBL/+4AHAAG/+cAF//hADL/1AAz/+sANP+wADX/6wA2/+QAN//jADj/qgA5/+cAOv/jADv/ugA8/+cAPf/vAD7/2gA//+kAQP+uAEH/7wBC/64AQ//kAET/uwBF/9oARv/aAEf/zABI/84ASf/TAEr/zQBL/+sAHwAG/+IAF/+lACP//gAk//sAL//uADL/hwAz/+8ANP+sADX/+AA2/9wAN//6ADj/uQA5/+4AOv/vADv/hAA8/+gAPf/pAD7/5wA//+YAQP+wAEH/6QBC/7oAQ//vAET/zgBF/+gARv/oAEf/2gBI/+YASf/QAEr/4gBL/+kAHAAG//sAF//+ADL/5wAz//sANP/kADX/+wA2//8AN//7ADj/4QA5//4AOv//ADv/6wA8//sAPf/+AD7//gA///sAQP/hAEH/+wBC/9oAQ//+AET/7wBF//sARv/6AEf/6QBI//kASf/rAEr/6QBL//sAMAAG/+wAB//YAAj/3QAJ/9MACv+/AAv/yQAM/+IADf/YAA7/7AAP/9MAEP/JABH/5wAS/+IAE//OABT/4gAV/+wAFv/nACD/WwAh/+wAIv/xACP/8QAk//YAJf/xADL/oQAz/+wANP/nADX/7AA2//sAN//2ADj/9gA5//sAO/+PADz/7AA9//YAPv/sAD//8QBA/+IAQf/nAEL/7ABD/+IARP/JAEX/zgBG/+cAR/+/AEj/xABJ/5IASv+/AEv/4gArAAb/9gAI/8QACf+cAAr/zAAL/5QADP+6AA3/xAAO/+oAD//BABD/zgAR/78AEv+7ABP/2AAU/78AFf+mABcAAgAk/+cAMf+mADL/2AAz/+cANP+7ADX/5gA2//MAN//zADj/sQA5/+oAOv/rADz/6AA9/+gAPv/mAD//5wBA/7oAQf/4AEL/twBD/+gARP/OAEX/sQBG/88AR/+EAEj/lwBJ/9AASv+NAEv/9wAsAAb/9gAH/+oACP/nAAn/xAAK/+gAC//TAAz/3QAN/9gADv/lAA//5wAQ/+IAEf/aABL/3AAT/9MAFP/bABX/xAAk//EAMf/YADL/zQAz/+wANP/kADX/9wA2//MAN//9ADj/4wA5//cAOv/3ADv/5gA8//4APf/9AD7/7gA//+4AQP/kAEH/+QBC/+YAQ//vAET/6QBF/9oARv/vAEf/zgBI/88ASf/QAEr/uQBL//kAKwAG//YAB//qAAj/7AAJ/9gACv/uAAv/4gAM/+IADf/dAA7/9AAP/+IAEP/eABH/5gAS/+IAE//TABT/3QAV/90AJP/2ADH/7AAy/74AM//uADT/3wA1//oANv/xADj/5wA5/+8AOv/5ADv/2AA8/+0APf/9AD7/8wA///EAQP/rAEH/+ABC/+QAQ//3AET/5gBF/9AARv/zAEf/xgBI/80ASf++AEr/twBL/+gAKgAH//EACP/xAAn/0wAK/+YAC//YAAz/5wAN/9gADv/oAA//5wAQ/+IAEf/iABP/2AAU/90AFf/dACT/+wAx/+wAMv+7ADP/9wA0/+QANf/rADb/5wA3//EAOP/kADn/+QA6//YAO//aADz/9wA9//4APv/uAD//8QBA/+cAQf/vAEL/4wBD/+sARP/cAEX/0ABG/+sAR//CAEj/xABJ/7QASv+6AEv/6AAmAAf/9gAI//EACf/sAAr/9gAM/+cADv/6AA//8QAQ//EAEf/vABL/4QAT//EAFP/iABX/5wAy/+kAM//9ADT/5wA1//sANv/9ADf//gA4/+sAOf/+ADoAAQA7/+gAPP/9AD3/9wA+//0AP//9AED/6wBBAAEAQv/pAEP/+QBE/+wARgACAEf/6QBI/+8ASf/nAEr/6wBL//sAKQAH//sACP/xAAn/5wAK/+4AC//2AAz/4gAN//sADv/1AA//8QAQ/90AEf/kABL/4gAT/+wAFP/YABX/3QAx//YAMv+5ADP/+AA0/+MANf/3ADb/+AA3//kAOP/iADn/+gA6//0AO//OADz//QA9//4APv/5AD///ABA/+YAQv/jAEP/9wBE/+YARf/vAEb//gBH/+cASP/vAEn/0QBK/+YAS//9ACgAB//2AAj/4gAJ/90ACv/sAAv/4gAM/+gADf/iAA7/9QAP/+gAEP/dABH/4AAS/+YAE//OABT/4gAV/90AJP/7ADH/9gAy/8EAM//vADT/3wA2//QAN//4ADj/4wA5/+kAOv/6ADv/0QA8/+YAPf/zAD7/6QA///EAQP/qAEL/3ABD/+gARP/fAEb/+ABH/7sASP+7AEn/rwBK/68AS//jACcACP/xAAn/7AAK//gADP/2AA7/9wAP//YAEP/xABH/5wAS/+cAE//xABT/7AAV/+UAMf/2ADL/6AAz//kANP/qADX/+wA2//oAN//7ADj/6wA5//cAOv//ADv/4wA8//sAPf/+AD7/+wA///oAQP/sAEH/+gBC/+MAQ//5AET/7wBF/+oARv/7AEf/4wBI/+wASf/jAEr/6gBL//4AJgAH//sACP/7AAn/5wAK//oADP/2AA7/9gAP//YAEP/xABH/8QAS//IAE//xABT/5wAV//EAMv/nADP/+wA0//EANf/9ADb//gA3//4AOP/uADn/+wA6//4AO//oAD0AAAA+//sAP//+AED/7wBB//4AQv/qAEP//wBE//EARf/3AEb/+wBH/+YASP/3AEn/2gBK/+QAS//7ACkAB//2AAj/9gAJ/90ACv/yAAz/8QAO//EAD//wABD/6gAR/+wAEv/mABP/9AAU/+wAFf/rABf/zgAx//YAMv/OADP/7wA0/+oANf/5ADb//gA3//0AOP/oADn/+QA6//0AO//YADz//gA9//8APv/6AD//+QBA/+4AQf/5AEL/4wBD//gARP/qAEX/+QBG//oAR//pAEj/6QBJ/9UASv/rAEv/+gAqAAf/sgAI/8kACf+wAAr/ugAL/7UADP+1AA3/3QAO/+QAD/+6ABD/sgAR/7UAEv+xABP/4gAU/6sAFf+mADH/lwAy/9oAM//jADT/qwA1/+IANv/iADf/4wA4/5oAOf/XADr/7gA7/7QAPP/kAD3/6wA+/+4AP//mAED/rQBB/+8AQv+qAEP/6gBE/74ARf/XAEb/2gBH/9AASP/SAEn/1QBK/80AS//qACsAB//nAAj/8QAJ/6YACv/sAAv/nAAM/90ADf+6AA7/9gAP/+IAEP/sABH/3QAS/9oAE//sABT/3QAV/8QAJP/+ADH/pgAy/+sAM//vADT/ygA1//0ANv/zADf/+wA4/9MAOf/vADr/+wA7/9gAPP/3AD3/9wA+//EAP//7AED/1QBB//cAQv/PAEP/8wBE/+YARf+7AEb/5wBH/7UASP/JAEn/2gBK/6UAS//zACkAB//2AAn/7AAK//kAC//sAAz/9gAO//oAD//2ABD/7AAR/+cAEv/vABP/9gAU//EAFf/sABcAAQAx/+YAMv/pADP/+QA0/+oANf/zADb/+wA3//oAOP/nADn/9wA6//4AO//uADz/+QA9//oAPv/7AD//+QBA/+8AQf/3AEL/6QBD//oARP/sAEX/8wBG//gAR//pAEj/6QBJ/+MASv/nAEv//QAqAAf/9gAI//sACf/sAAr/9wAL/+wADP/7AA7/+gAP//EAEP/2ABH/7AAS//EAE//2ABT/9gAV/+QAFwABADH/8QAy/+kAM//3ADT/6QA1//kANv/5ADf/+QA4/+8AOf/6ADr//gA7/+8APP/7AD3/+gA+//oAP//4AED/7wBB//sAQv/rAEP//QBE/+8ARf/3AEb/+gBH/+4ASP/rAEn/4QBK/+wAS//5ACsAB//xAAj/4gAJ/9gACv/sAAv/2AAM//YADf/iAA7/8QAP/90AEP/iABH/0wAS/+IAE//JABT/4gAV/94AJP/7ADH/3QAy/7QAM//pADT/4QA1/+wANv/vADf/6gA4/+IAOf/qADr/+gA7/9oAPP/pAD3/6wA+/+wAP//pAED/4QBB/+sAQv/cAEP/6wBE/+IARf/JAEb/7gBH/7wASP/BAEn/pgBK/7UAS//kACwAB//iAAj/5wAJ/+IACv/OAAv/2AAM/+cADf/nAA7/8AAP/90AEP+6ABH/xAAS/9cAE//XABT/2AAV/9gAG//3ACT/+wAx/+IAMv+gADP/6QA0/+MANf/mADb/7wA3/+sAOP/aADn/6AA6//YAO/+xADz/6wA9/+4APv/oAD//7wBA/9oAQf/oAEL/1wBD/+MARP/aAEX/2ABG/+cAR//PAEj/yQBJ/7kASv/BAEv/6AApAAf/8QAI/+wACf/OAAr/6gAL/84ADP/nAA3/2AAO//YAD//fABD/4gAR/9gAEv/lABP/5wAU/+IAFf/YADH/4gAy/+cAM//3ADT/2gA1//gANv/5ADf/+wA4/9wAOf/3ADr//gA7/+MAPP/3AD3//QA+//cAP//3AED/1QBC/9UAQ//9AET/6QBF/+EARv/pAEf/ugBI/8QASf/aAEr/wgBL//sAKwAH/8kACP/YAAn/xAAK/9MAC/+/AAz/yQAN/9gADv/nAA//xAAQ/7oAEf+1ABL/wQAT/9gAFP+6ABX/vwAk//sAMf+/ADL/2gAz/+gANP/KADX/6QA2/+kAN//oADj/xgA5/+QAOv/nADv/uQA8/+wAPf/uAD7/6QA//+cAQP/GAEH/7ABC/8kAQ//mAET/2ABF/84ARv/VAEf/wQBI/7wASf/GAEr/tABL/+8AKwAH//EACP/2AAn/yQAK/+oAC//TAAz/3QAN/+cADv/sAA//4gAQ/+IAEf/YABL/3wAT/90AFP/dABX/2AAk//sAMf/nADL/xgAz//MANP/iADX/7wA2/+4AN//3ADj/4wA5/+kAOv/vADv/1wA8/+4APf/zAD7/6gA//+0AQP/kAEH/9wBC/98AQ//qAET/5wBF/9AARv/vAEf/yQBI/9AASf/PAEr/xABL/+8AKQAH/+cACP/sAAn/5wAK/+kAC//dAAz/2AAO/+wAD//XABD/qwAR/8kAEv/AABP/9gAU/9MAFf/OADH/2AAy/7AAM//5ADT/2gA1//0ANv/6ADf//gA4/98AOf/3ADr//QA7/8YAPP/7AD3//gA+//gAP//4AED/1QBB//0AQv/VAEP/+ABE/+MARf/zAEb/+QBH/+4ASP/zAEn/4gBK/+cAS//zACkACP/2AAn/5wAK//QAC//sAAz/+wAN//4ADv/2AA//5QAQ/+wAEf/nABL/8wAT//EAFP/nABX/3QAx/+QAMv/KADP/+QA0/+wANf/6ADb/+gA3//sAOP/vADn/+gA6AAAAO//hADz//wA9//0APv/5AD///gBA/+wAQf/7AEL/7ABD//sARP/vAEX/9wBG//sAR//zAEj/6gBJ/+EASv/jAEv/+wArAAf/zgAI/84ACf/YAAr/ygAL/9gADP/JAA3/+wAO/9kAD//JABD/ogAR/7oAEv+5ABP/5wAU/8QAFf+9ACT/+wAx/7oAMv+FADP/+wA0/7sANf/qADb/6wA3/+wAOP++ADn/5gA6/+8AO/+iADz/6AA9/+oAPv/sAD//7wBA/8MAQf/mAEL/uwBD/+YARP/KAEX/6QBG/+8AR//jAEj/3wBJ/9MASv/hAEv/6wApAAf/zgAI/84ACf/TAAv/2AAM/84ADv/eAA//xAAQ/7AAEf/TABL/sQAT/+wAFP/FABX/yQAk//sAMf/JADL/lQAz//MANP/BADX/+QA2//MAN//3ADj/xgA5//sAOv/3ADv/pQA8/+8APf/+AD7/7gA//+oAQP/DAEH/7gBC/8QAQ//vAET/0ABF/+4ARv/uAEf/6QBI/+QASf/aAEr/5gBL//cAKgAH/8QACP/OAAn/pgAL/7oADP+rAA3/3QAO/+cAD/+5ABD/twAR/8QAEv+zABP/0wAU/7AAFf+cACT/+wAx/6EAMv/aADP/4wA0/7cANf/4ADb/4wA3//0AOP+3ADn/7gA6/+8AO/+7ADz/7gA9//EAPv/jAD//6ABA/7oAQf/zAEL/uQBD/+sARP/OAEX/3wBG/+EAR//aAEj/2ABJ/9gASv/MAEv/7gAsAAf/yQAI/84ACf/JAAr/wgAL/8kADP/JAA3//gAO/8kAD/+6ABD/jQAR/7oAEv+gABP/4gAU/7UAFf+6AB7/8QAk//sAMf+1ADL/lwAz/+8ANP+7ADX/5gA2/+4AN//uADj/uQA5/+gAOv/3ADv/hAA8/+8APf/sAD7/7AA//+oAQP+6AEH/7ABC/7kAQ//pAET/ygBF/+8ARv/vAEf/6ABI/+kASf/fAEr/5ABL//EAJgAH//YACf/iAAr/7AAL/+cADP/iAA3//wAO//UAD//nABD/7AAR/+IAEv/gABP/7AAU/90AFf/TADH/4gAy/+sAM//+ADT/6AA1//4ANgAEADf//wA4/9wAOf/6ADv/5gA8//8APf//AD///QBA/+MAQf//AEMAAABE/+8ARf/4AEb/+wBH//cASP/rAEn/6QBK/+kAS//9AAIAAQAGAEsAAAAAAAAAAQAAAADUGBYRAAAAANmXsTQAAAAA2ZexNA==",at=n=>Hr("http://www.w3.org/2000/svg",n),Al=(n,t)=>{const e=at("rect");return e.setAttribute("height",`${n}`),e.setAttribute("width",`${t}`),e},hl=(n,t,e,a)=>{const i=fe("filter");i.setAttribute("id",a),i.setAttribute("height","200%"),i.setAttribute("width","200%"),i.setAttribute("x","-50%"),i.setAttribute("y","-50%");const r=fe("feOffset");i.appendChild(r),r.setAttribute("result","offOut"),r.setAttribute("in","SourceAlpha"),r.setAttribute("dx",`${n}`),r.setAttribute("dy",`${t}`);const o=fe("feGaussianBlur");i.appendChild(o),o.setAttribute("result","blurOut"),o.setAttribute("in","offOut"),o.setAttribute("stdDeviation",`${e}`);const s=fe("feBlend");return i.appendChild(s),s.setAttribute("in","SourceGraphic"),s.setAttribute("in2","blurOut"),s.setAttribute("mode","normal"),i},gl=n=>{let t=n;return t=t.replace(/feoffset/gi,"feOffset"),t=t.replace(/fegaussianblur/gi,"feGaussianBlur"),t=t.replace(/feblend/gi,"feBlend"),t=t.replace(/lineargradient/gi,"linearGradient"),t=t.replace(/stddeviation/gi,"stdDeviation"),t};function ml(n,t,e,a,i,r){const o=i,s=r,l={x:t[0],y:t[1],width:t[2]-t[0],height:t[3]-t[1]};if(l.width<=0)return;const c=pl(l.height,l.width,e*o,a*s),d=(a-c*l.width)/2-c*l.x,u=(e-c*l.height)/2-c*l.y;n.setAttribute("transform",`translate(${d} ${u}) scale(${c} ${c})`)}function pl(n,t,e,a){const i=e/n,r=a/t;return i>1&&r>1?Math.min(i,r):i>1&&r<1?r:i<1&&r>1?i:Math.min(i,r)}const En={m:["x","y"],z:[],l:["x","y"],h:["x"],v:["y"],c:["x1","y1","x2","y2","x","y"],s:["x2","y2","x","y"],q:["x1","y1","x","y"],t:["x","y"],a:["rx","ry","xRotation","largeArc","sweep","x","y"]};class fl{constructor(t){const e=Array.from(t.querySelectorAll("path"));this.paths=e.map(a=>{const i=a.getAttribute("d")||"",r=this.parsePath(i);return{pathElement:a,pathData:r}})}transform(t){for(const e of this.paths)e.pathData=this.runTransformer(e.pathData,t);this.update()}encodePath(t){let e="";const i=r=>{const o=[],s=r.relative?r.type:r.type.toUpperCase();let l=e!==s;const c=En[r.type];l&&(o.push(s),e=s);for(const d of c){const u=r[d];let A;switch(typeof u){case"boolean":A=u|0;break;case"number":A=(u*100|0)/100;break;default:throw new It("Failed to encode path.")}l||o.push(" "),o.push(A),l=!1}return o.join("")};return t.map(i).join("")}parsePath(t){const e=/([mzlhvcsqta])([^mzlhvcsqta]*)/gi,a=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi,i=[];let r;for(e.lastIndex=0;r=e.exec(t);){const o=r[1].toLowerCase(),s=(r[2].match(a)||[]).map(parseFloat),l=o===r[1],c=En[o];if(s.length<c.length)throw new It(`Path type "${o}" given ${s.length} arguments, expected ${c.length}.`);if(c.length>0){if(s.length%c.length!==0)throw new It(`Path type "${o}" given ${s.length} arguments, not divisible by ${c.length}`);for(let d=0;d<s.length/c.length;d++){const u={type:o,relative:l};for(let A=0;A<c.length;A++)u[c[A]]=s[d*c.length+A];i.push(u)}}else i.push({type:o,relative:l})}return i}runTransformer(t,e){const a=[["x1","y1"],["x2","y2"],["x","y"]],i=r=>{for(let o=0;o<a.length;o++){const[s,l]=a[o];if(s in r&&l in r){const c=[r[s],r[l]],d=e(c);if(d.length<2)throw new It("Transformer must return at least 2 points.");r[s]=d[0],r[l]=d[1]}}return r};return this.transformPath(t,i)}transformPath(t,e){const a=[];for(let i=0;i<t.length;i++){const r=JSON.parse(JSON.stringify(t[i])),o=e(r);Array.isArray(o)?a.push(...o):o&&a.push(o)}return a}update(){for(const{pathElement:t,pathData:e}of this.paths){const a=this.encodePath(e);t.setAttribute("d",a)}}}class Cl extends dl{constructor(){super(...arguments),this.moduleName="Vegemite"}svgPreview(t,e){return this.svgElement(t,e)}svgPrint(t,e){return this.svgElement(t,e)}svgElement(t,e){const a=xs(ul),r=t!==""?(w=>w.charAt(0).toUpperCase()+w.substr(1).toLowerCase())(t):"",o=a.getPath(r,0,72,72),s=o.toSVG(2),l=o.getBoundingBox(),c=l.x2-l.x1,d=o.toPathData(3),u=()=>{const w=at("g");w.classList.add("module-text-group");const F=at("defs");w.appendChild(F),F.appendChild(hl(0,2,2,"shadow"));const b=at("path");b.setAttribute("d",d),b.setAttribute("stroke","black"),b.setAttribute("stroke-width","3"),F.appendChild(b);const v=at("g");v.classList.add("module-layer0"),w.appendChild(v),v.setAttribute("filter","url(#shadow)"),v.innerHTML=b.outerHTML;const I=at("g");I.classList.add("module-layer1"),w.appendChild(I),I.setAttribute("stroke-width","3"),I.setAttribute("stroke","rgb(45,41,38)"),I.setAttribute("fill","rgb(45,41,38)"),I.setAttribute("transform","translate(0.5,0)"),I.innerHTML=s;const M=at("g");M.classList.add("module-layer2"),w.appendChild(M),M.setAttribute("fill","rgb(255,209,0)"),M.setAttribute("transform","translate(1,-0.1)"),M.innerHTML=s;const R=at("g");return R.classList.add("module-layer3"),w.appendChild(R),R.setAttribute("fill","white"),R.innerHTML=s,new fl(w).transform(([T,L])=>[T,L+(c/2-T)**2/(c*6)]),w},A=at("g");A.classList.add("module-root");const h=at("defs");A.appendChild(h);const g=at("g");g.classList.add("module-bounds"),A.appendChild(g);const p=Al(e.height,e.width);p.setAttribute("opacity","0"),g.appendChild(p);const m=at("g");m.classList.add("module-text-enclosure"),A.appendChild(m);const f=u();m.appendChild(f);const y=Rr(d);return ml(m,y,e.height,e.width,.35,.65),gl(A.outerHTML)}}async function Mi(n){if(n==="Vegemite")return new Cl;throw new O(`Failed to resolve Module, Module ${n} not found`)}const wl=["altGlyph","circle","ellipse","path","polygon","polyline","rect","text","textPath","tref","tspan"],yl=async(n,t,e)=>{const a=t.data,i=e.data.baseUrl,r=a.assetUrl.replace("localhost","localstack"),o=i.slice(0,4)==="http"?"":"https://",s=new URL(o+i);s.searchParams.append("video",An(JSON.stringify([{href:r}]))),s.pathname=s.pathname+(s.pathname.slice(-1)==="/"?"":"/");const l=s.toString(),d=`data:image/svg+xml;base64,${An(await Un.toString(l,{type:"svg"}))}`,u=h=>{const g=n.find(m=>m.panelId===h.panelId);if(!g)throw new Y(h);const p=N();return new G({id:p,src:d,type:D.Image,y:h.top,x:h.left,width:h.width,height:h.height,rotation:0},g)},A=e.data.regions;try{return A.map(u)}catch(h){return console.error(h),[]}},Sl=async(n,t,e,a)=>{const i=e.data,r=i.assetUrl,o=await Ea(r);try{const s=await Vs(i,a.option);s&&(t[a.stepName]={selectedVariants:[s]});const l=async c=>{const d=await Ei(c,s?.asset?.fileLink),u=await Ae(d),A=N(),h=n.find(p=>p.panelId===c.panelId);if(!h)throw new Y(c);const g=qa(o,u,{scale:i.scale,left:i.x,top:i.y},a.data.forceImageCover);return[new G({id:A,path:u.path,type:D.Frame,forceImageCover:a.data.forceImageCover,x:c.left,y:c.top,width:c.width,height:c.height,layer:c.layer,layerIndex:c.layerIndex,rotation:c.rotation,scaleX:c.width/u.width,scaleY:c.height/u.height,pattern:{id:`${A}-pattern`,src:o.src,x:g.x,y:g.y,width:o.width,height:o.height,rotation:0,scaleX:g.zoom,scaleY:g.zoom,svg:o.svg,colors:o.colors}},h)]};return(await Promise.all(a.data.regions.map(c=>l(c)))).flat()}catch(s){return console.error(s),[]}},vl=async(n,t,e,a)=>{const i=e.data,r=a.option;if(!r)return console.error(`No option for step ${a.stepName}.`),[];const o=r.variants?.find(b=>b.id===i.illustrationVariantId)||await P.getDefaultVariant(r,a.overrideDefaultVariantId);if(!o)return console.error(`No variant with ID: ${i.illustrationVariantId}`),[];if(!o.asset)return console.error(`No asset for variant with ID: ${i.illustrationVariantId}`),[];t[a.stepName]={selectedVariants:[o]};const s=o.asset?.fileLink;if(!s)return console.error(`No asset link for variant with ID: ${i.illustrationVariantId}`),[];const l=await et(s,!0),c=/<svg.*?<\/svg>/s,d=l.match(c)||[],u=d?.length>0?d[0]:"",g=ct().parseFromString(u,"image/svg+xml").firstElementChild;if(!g)return console.error("Failed to read SVG."),[];Le(g);const p={};Ut(g,b=>{wl.includes(b.tagName)&&!b.attributes.getNamedItem("fill")&&b.setAttribute("fill","#000000");const v=b.attributes.getNamedItem("fill");if(v&&v.value!=="none"){const M=v.value,x=`spiff-fill-${M.replace(/\W/g,"")}`;b.classList.add(x),p[x]={browserValue:M}}const I=b.attributes.getNamedItem("stroke");if(I&&I.value!=="none"){const M=I.value,x=`spiff-stroke-${M.replace(/\W/g,"")}`;b.classList.add(x),p[x]={browserValue:M}}});const f=Et().serializeToString(g),y=i.colors;if(y){for(const[b,v]of Object.entries(p))for(const I of Object.keys(y))if(v.browserValue===I){p[b]={browserValue:y[I]};break}}const w=b=>{const v=n.find(M=>M.panelId===b.panelId);if(!v)throw new Y(b);const I=N();return new G({colors:p,id:I,svg:f,type:D.Illustration,y:b.top,x:b.left,rotation:b.rotation,width:b.width,height:b.height,layer:b.layer,layerIndex:b.layerIndex,immutable:b.immutable},v)},F=a.data.regions;try{return F.map(w)}catch(b){return console.error(b),[]}},El=async(n,t,e)=>{const a=await Mi(e.data.module),i=t.data,r=(s,l)=>{const c=n.find(u=>u.panelId===l.panelId);if(!c)throw new Y(l);const d=N();return new G({colors:{},id:d,svg:s,type:D.Illustration,y:l.top,x:l.left,rotation:l.rotation,width:l.width,height:l.height,layer:l.layer,layerIndex:l.layerIndex},c)},o=e.data.regions;try{return o.map(s=>r(a.svgPrint(i.text,s),s))}catch(s){return console.error(s),[]}},bl=async(n,t,e,a)=>{const i=e.data,r=a.option;if(!r)return console.error(`No option for step ${a.stepName}.`),[];const o=r.variants?.find(d=>d.id===i.pictureVariantId)||await P.getDefaultVariant(r,a.overrideDefaultVariantId);if(!o)return console.error(`No variant with ID: ${i.pictureVariantId}`),[];if(!o.asset)return console.error(`No asset for variant with ID: ${i.pictureVariantId}`),[];t[a.stepName]={selectedVariants:[o]};const s=o.asset?.fileLink;if(!s)return console.error(`No asset link for variant with ID: ${i.pictureVariantId}`),[];const l=d=>{const u=n.find(h=>h.panelId===d.panelId);if(!u)throw new Y(d);const A=N();return new G({id:A,src:s,type:D.Image,y:d.top,x:d.left,rotation:d.rotation,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,immutable:d.immutable,preserveAspectRatio:"none"},u)},c=a.data.regions;try{return c.map(l)}catch(d){return console.error(d),[]}},Il=async(n,t,e,a)=>{const i=e.data,r=a.option;if(!r)return console.error(`No option for step ${a.stepName}.`),[];const o=r.variants?.find(c=>c.id===i.colorVariantId)||await P.getDefaultVariant(r,a.overrideDefaultVariantId);if(!o)return console.error(`No variant with ID: ${i.colorVariantId}`),[];t[a.stepName]={selectedVariants:[o]};const s=c=>{const d=n.find(p=>p.panelId===c.panelId);if(!d)throw new Y(c);const u=`
1409
+ `);w.push(this.generateTextChangeCommandsForRegion(p.get(b.id)||1,t.data,b.id,v))}return new U(w)}}const j=new cl;class dl{}const ul="data:application/octet-stream;base64,AAEAAAAPAIAAAwBwRkZUTYdHeHoAAElcAAAAHEdERUYAJwBUAAAe2AAAAB5HUE9TkNtcVAAAHygAACoyR1NVQrj/uP4AAB74AAAAME9TLzJoWmUcAAABeAAAAGBjbWFwtkIacAAAAxAAAAJWZ2FzcP//AAMAAB7QAAAACGdseWY27KOUAAAGCAAAFcRoZWFkFPal0gAAAPwAAAA2aGhlYQU0Ar0AAAE0AAAAJGhtdHiADw6qAAAB2AAAAThsb2Nh5CzfJAAABWgAAACebWF4cACVAEwAAAFYAAAAIG5hbWXeIPPyAAAbzAAAAiJwb3N0ABeZTwAAHfAAAADdAAEAAAABAAAZ9vREXw889QALA+gAAAAA2ZexNAAAAADZl7E0ADL/yQJ2ArwAAAAIAAIAAAAAAAAAAQAAArz/wwAAAqsAAAAAAnYAAQAAAAAAAAAAAAAAAAAAAE4AAQAAAE4ASQAFAAAAAAACAAAAAQABAAAAQAAAAAAAAAAEAbsBkAAFAAACigK7AAAAjAKKArsAAAHfADEBAgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAABYWFhYAEAACgCtArz/wwAAAqkANgAAAAMAAAAAAmQCZAAAACAAAgIPADIAAAAAAU0AAAAAAAAAAAAAALQAAAD3ADUCfQA1AcoANQKrADUCDQA1AX4ANQHYADUBNQA1AcgANQHUADUB8AA1AeEANQHpADUBqQA1AdAANQHpADUCqgA1Af8ANQGaADUB3wA1AbgANQFtADUBbQA1AekANQG8ADUA1QA1AYcANQHBADUBUAA1AhsANQHBADUB4QA1AZYANQH0ADUBxQA1AcUAMgGJADUBwwA1Ad0ANQJ1ADUB9wA1AcoANQF6ADUB3AA1Af8ANQGaADUB3wA1AbgANQFtADUBbQA1AekANQG8ADUA1QA1AYcANQHBADUBUAA1AhsANQHBADUB4QA1AZYANQH0ADUBxQA1AcUAMgGJADUBwwA1Ad0ANQJ1ADUB9wA1AcoANQF6ADUAtAAAAAAAAAAAAAMAAAADAAAAHAABAAAAAAFQAAMAAQAAABwABAE0AAAALgAgAAQADgAAAAoADQAhACYAKgA5AFoAXgB6AKAArQDFAM8A1gDdAOUA7wD2AP0A/wF4//8AAAAAAAoADQAgACMAKgAwAEAAXgBhAKAArQDAAMcA0QDYAOAA5wDxAPgA/wF4//8AAf/5//f/5f/k/+H/3P/W/9P/0f+s/6AAAAAAAAAAAAAAAAAAAAAA/0v+twABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAIAAwADoARABOAF4AaAAAAAAAAAAXABcAFwAXABcAFwAZABsAGwAbABsAHwAfAB8AHwAkACUAJQAlACUAJQAlACsAKwArACsALwAyADIAMgAyADIAMgA0ADYANgA2ADYAOgA6ADoAOgA/AEAAQABAAEAAQABAAEYARgBGAEYASgAAAQYAAAEAAAAAAAAAAQIDAAAEAAAAAAAAAAAAAAAAAAAAAQAABQYABwgJCgAAAAsAAAAAAAwNDg8QERITFBUAAAAAAAAWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAAAAAxAAAyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKSwAAAAAAFxcZGyQlKzIyMjIyMjQ2NjY2Ojo6Oj9AQEBAQEZGRkYAAAAAAAAAAAAAAAAAAAAlAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABMFxclAAAAAAAAAAAAAEovAAAAAAAAAAAAAAAXGxcbGx8fHx8lJQAlKysrAAAAAAAAAAAAAAAAAAAAACgAKAAoACgAKAAoADwAbgC0AQgBbgGQAcYB1AIGAkYCYAKSAtAC4gMoA2ADyAPgBBoEUAR4BI4EogTWBOoE9gUiBToFSAViBXoFqgXWBjAGWgaaBqwG2AbqBwYHIAc2B0wHXgd2B7AH5ggOCCQIOAhsCIAIjAi4CNAI3gj4CRAJQAlsCcYJ8AowCkIKbgqACpwKtgrMCuIK4griAAAABQAyAAAB3QK8AAMABgAJAAwADwAAEyERIRsCCwEREwMhAxMRMgGr/lUcubrGtMG5AXKttQK8/UQCqP7LATX+tgEs/acBGP7MAUn+0QJdAAACADUABQDCAmoAAwAHAAATESMRExUjNcGLi4sCaf5mAZr+KY2NAAAAAgA1AAACSAJkABsAHwAAJQcjNyMHIzcjNzM3IzczNzMHMzczBzMHIwczByc3IwcBthdrFkoXbBdeDl8KYA9fFWwVShVtFWoPagpqDscJSgqqqqqqqmxHbJqamppsR2xsR0cAAAEANf/JAZUCqgAwAAABFR4BByM0LgEjIgYVFBYXHgMVFA4BBxUjNS4BNTMUFjMyNjU0LgInJjU0Njc1ARwwPAF3CBQOExcsPCEwFgkZNyhnPkGDGRQTGBElHBprRzQCqkQNV0INGBIdFB8hGw4tMCkUJkU7EENDCmk8GiUgFBIeGA4LKXpKVxBEAAAABQA1/+8CdgJrAAwAGAAcACkAOAAAEzQ2MzIeARUUBiMiJjcVFBYzMjY1NCYiBiUDIxMDNTQ+ATMyFhQGIyImNxUUHgEzMjY1NC4BIyIGNk02JD0jTTc2TVEeFBUeHiodAWjhVeEtIz0kN01ONjZOUQ4YDRUeDhcOFR4B1j5XKEUoPldXPgEXISEYGCEhcf2dAmP+JgEoRChXfFdWPwEPGhAiGBAbDyIAAwA1AAAB2AJnACQAOQBIAAAlFwcnDgEjIiY1ND4CNyY1NDYzMhYVFA4IBxc3MyciBhUUHgQXPgU1NCYjAxY+ATcnDgUVFBYBmT8qQgdUMk1cDyETFDVTNzdPAwUJBw0HDgUMATUabPULGQQFCgUKAQENBAsEBBYNAQ8bEQRRAQ4ECwUEIbFNZEERMGJKHzMqEhFDQD9ZVjsLFxITDRAJDgULAUFBtRgSBw4LDwcOAQEQBg8LDwcPGf58AQsOB2IBDQUOCg8IGyQAAAAAAQA1ATwBSQJtABEAABMHNxcHFwcnFyM3Byc3JzcXJ+YXVSVnZyhTGE0WUShnZyVWGAJselJLJSVOVXp7Vk4nI0tReQACADUAAAGjAmQAFwAmAAA3NTQ+AzMyHgMdARQOAiMiLgI3FRQeATMyPQE0IyIOAjYZJzIvFxQtMicaIjc9Hh09OiR8CBsXOTkSGAsF4KQxTzEhDQwhMFAypDtaMhkYMlvjrBUkH1isVxEeGgABADUAAAEAAmEABQAAMxEjNTMRhE7KAd6D/Z8AAQA1AAMBkwJmACEAADc1Njc+AzU0JiMiByM+Ajc+AzMyFhUUBgcGBzMVOi5WFxkaCx0XMQJ2AQINDQ4qLCIQTlkjLkAargN3L1kYHCcoFyIhXhsgNxccJxIHbU04WDRHHYEAAAEANQAAAZ8CZAAtAAATNjc2MzIWFRQOAwcWFRQGIyImJyYnMxYXMjY1NC4DKwE1MzI1NCYjIgdDAjktP0RVCw0VCwlca0otVRYVBn4KLhobCg8UDQcsFT0RESQCAaxgMCdfQRcoGBcIBiVpTWwrKCRENgElHRAYCwcCbzsVHjMAAgA1//8BuwJjAAoADQAAITUjNRMzETMVIxUnMzUBDdfadDY20WJrcgGF/oN6a+XAAAAAAAEANf//AawCYwAgAAABFSMHNjMyHgIVFA4CIyIuASczFjMyNjU0JiMiBycTAX+uCxsnKUIlExYrSy8zUS8HfRYjGygkHy4SZSoCYoBSEic+QyEkSkIqL00xJi8hHy80HwFTAAACADUAAAG0AmIAFgAoAAABMhYVFAYjIiYnJjU0PwEzBw4BBzAyNgMyPgE1NC4EIyIGFRQeAQEaO19vTy9QGCksepBYAw4CCA0kEx8TBAgLDxQLHSUVHQGvbF9kgConOV1LVdqUBRYFAv7XFCYXChMSEAwHLyEaJxIAAAAAAQA1//8BdAJjAAYAABMhFQMjEyM2AT6sibS9AmJ3/hUB3wAAAwA1AAABmwJkABkAJAAuAAATNTQ2MhYVFA4BBxYVFA4BIi4BNTQ3LgMXFRQWMjY1NCYiBjcVFBYyNjQmIgZCVqBWFBAMPC1RaFEtPAkLEgpwHjAdHTAeCRskGxskGwG/AUJhYkIeMxINJGU5WjMzWjllJAkNHSbhARgqKhkaKirTARcfHy8fHwAAAAACADUAAAG0AmQAFgAkAAA/AT4BNyYOASMiJjU0NjMyFhcWFRQPARM1NC4BIyIGFRQWMzI2fVgDDQQBCA0EO15uTy9QGCoteSsVHhAcKCUfHiUBlAQWBgEBAWxfZIAqJzldTFXaAYkBGiYSLiIgMi4AAgA1/8wCdQJtADgASAAAAQcGBwYzMjY1NCYjIgYHBh4DFxY3FQYnLgQ3ND4CMzIWFRQGIyInBicuATU0NjMyFhc3BzY1NC4CJyYGHQEUFjc2AfscBAIBFhYmbFVhdgcBBhwtVThNX01cQGlGMBUBLExzQniZWjs3FB07NT1PQBwoBwgqCQIHEg0gKCAUIQG2ux0NGVo8Wm2Laxg2RTcpBAUfWxsCASlBVlsvQHpfOqF8XZBBNwEBWkRIcyAWKMkaIgcQGBEBAz8rAyYjAQIAAAIANQAAAcgCZQAHAAoAADcHIxMzEyMvAge8GG6bYJdvGhknK3JyAmT9nHJz1tYAAAMANQABAWQCaAAPABoAJQAANxEzMhcWFRQHFhUUBw4BIwMzMjc2NTQnJisBFxUzMjc2NTQnJiM2lEAiJC9DJhszNx0mEgkQEAgUJQExFAsVFAoWAgJlKShQUygka1cuIhMBfAYLIB4LBuNwCA4mIgwGAAAAAQA1AAABqQJnACUAACUzDgEjIi4CNTQ+AjMyHgMXIy4DIyIOARUUFjMyPgIBSWAQX0cxSiwWFStLMSM7KB4QA2AFDhQfER4pEi8qFCEUCulrfjNXbD47alk0HzJAPR0SISATNEwsSWcXJxkAAgA1AAABgwJlAA8AGAAAMxEzMh4DFxYVFA4CIwMRMzI1NCcmIzZ/EhcsICYOJBUtTzUiKF4TFzMCZAEMFi4hT29BbFcwAdr+r6dDLjkAAAABADUAAAE3AmUACwAAEyEVIxUzFSMVMxUhNgEBlpGSlv8AAmR4cHmKeQAAAAEANQAAATcCZQAJAAAzESEVIxUzFSMRNgEBmJOTAmR5b3r+/gAAAAABADUAAAG3AmYAIQAAARUmBw4CFRQeAjMyNzY3IzUzFgcGIyIuATU0NjMyFhcBQBQ3FygbEBkgESEWGQVr0wUTMH89WCpiX0haEAGbAUgCASNPOC1FKhUaHDlpZkOyVYlXiaZvWwAAAAEANQAAAYYCZQALAAAzIxEzFTM1MxEjNSOcZmaDZ2eDAmTm5v2c9QABADUAAACgAmUAAwAAMxEzETZpAmT9nAABADUAAAFRAmUAGgAAAREUBwYHBiMiLgMnJjUzFBYVFjMyNzY1EQFQDQ8fJi4IESsgIAUCcQEEGxUHBAJk/pZkLCscIwIRHkEsFxcCDAQzGxAhAZEAAAAAAQA1//8BiwJmAAoAABcRMxETMwMTIwMRNmdzbISTfnABAmb+7AEU/s/+zAEJ/vYAAQA1AAABGgJlAAUAADMRMxEzFTZpewJk/iaKAAEANQAAAeUCZQAMAAAzIxEzGwEzESMTAyMDlmCLTEuMYARZRVgCZP52AYr9nAHK/jYBygABADUAAAGMAmUACQAAGwEDMxEjAxMjEZ2NAWNikwJjAmT+lAFs/ZwBaf6XAmQAAAACADUAAAGsAmUADAAfAAATNDYzMhYVFA4BIyImNxQWMzI+BDU0LgIjIg4BNmRWUWs0VDRWZGgqKg8aEQ0IAwgSIhceJw4BLKGXmJpfjUaelUtjDxohKCcUHzo1IDVKAAACADUAAAFgAmYAEAAbAAATMzIeARcWFRQGBw4BKwEVIxMVMzI3NjU0JyYjNoEjMRoMLhcSFjEtKGRkJRoNGBkOHAJlCxMPO2cvWRkdGMAB3ZMJEi8uEQoAAwA1//8BvwJmABsALgA8AAAlFwYiLgInDgIjIi4BNTQ+ATMyFhUUBx4CAyIOBAc2MzIXFhc2NTQuAQMeAzsBMjcmJyYjIgG9AQINGRgcChMsFBM+VycmWD1Uah0GDQzAERwSDQcCARgVKCIbHQkbLGgGFRUTBgYWDhEOGSAPenkBAggSDRMTAlaGU1GIXK5/ZUkIBwEBZxIgHScLCBEoHzQeLTJOKP7/HCgQCQwiFSMAAAAAAgA1//8BjwJmAA0AGgAAJRcjJxUjETMXFhcWFRQnNjU0LgInKwEVMzIBDYF+cGpqOi4UW4QYCxARBQY1Lhb7++vqAmQBBQosgohEFyoVHg4IAZkAAQAyAAABjwJnACsAADczFBY3NjU0JicuAycmPgEzMhYXIy4DIyIGFRQWFx4BFRQOAiMiJjZ2JBIyJjwRICobAQE0TSs5WQp0AQMJEg0RHCdBQTEUJkQsXFbFKx8BBDgWIB4JFyg7ITlVKFRbCwwTCh0UFSIkJEc2JUE3IGkAAAABADUAAAFTAmUABwAAMxEjNSEVIxGLVQEdVQHseHj+FAAAAAABADUAAAGNAmUAGgAAEzMRFBceATI2NzY1ETMRFA4BBwYjIiYnLgE1NmsIBR8qHgUIagcQDjBUIk0ZGQwCZP6WLhsSGBYQFzUBa/6WM0MvFEEcJCZISwAAAQA1AAABpwJlAAYAADMDMxsBMwO2gGdQUWmAAmT+UwGt/ZwAAQA1AAACQAJkAAwAADMDMxsBMxsBMwMjCwGfaWk4PFA8OGhrWz4+AmP+cwGN/nEBj/2dAYz+dAABADUAAAHBAmUACwAAMxMDMxc3MwMTIycHNop6c0NCcnmJc1VRAUYBHq6u/t/+vdnZAAAAAQA1AAABlAJlAAkAADczAzMXNzMDFSOsAXdvQUFtd3HrAXn29v6H6wAAAAABADUAAAFDAmYACQAAAQMzFSE1EyM1IQFDiIj+85OTAQ0B5v6kimcBdYkAAAEANQFFAaYCagAGAAAbATMTIycHNnx3fYE4NwFFAST+3LOzAAIANQAAAcgCZQAHAAoAADcHIxMzEyMvAge8GG6bYJdvGhknK3JyAmT9nHJz1tYAAAMANQABAWQCaAAPABoAJQAANxEzMhcWFRQHFhUUBw4BIwMzMjc2NTQnJisBFxUzMjc2NTQnJiM2lEAiJC9DJhszNx0mEgkQEAgUJQExFAsVFAoWAgJlKShQUygka1cuIhMBfAYLIB4LBuNwCA4mIgwGAAAAAQA1AAABqQJnACUAACUzDgEjIi4CNTQ+AjMyHgMXIy4DIyIOARUUFjMyPgIBSWAQX0cxSiwWFStLMSM7KB4QA2AFDhQfER4pEi8qFCEUCulrfjNXbD47alk0HzJAPR0SISATNEwsSWcXJxkAAgA1AAABgwJlAA8AGAAAMxEzMh4DFxYVFA4CIwMRMzI1NCcmIzZ/EhcsICYOJBUtTzUiKF4TFzMCZAEMFi4hT29BbFcwAdr+r6dDLjkAAAABADUAAAE3AmUACwAAEyEVIxUzFSMVMxUhNgEBlpGSlv8AAmR4cHmKeQAAAAEANQAAATcCZQAJAAAzESEVIxUzFSMRNgEBmJOTAmR5b3r+/gAAAAABADUAAAG3AmYAIQAAARUmBw4CFRQeAjMyNzY3IzUzFgcGIyIuATU0NjMyFhcBQBQ3FygbEBkgESEWGQVr0wUTMH89WCpiX0haEAGbAUgCASNPOC1FKhUaHDlpZkOyVYlXiaZvWwAAAAEANQAAAYYCZQALAAAzIxEzFTM1MxEjNSOcZmaDZ2eDAmTm5v2c9QABADUAAACgAmUAAwAAMxEzETZpAmT9nAABADUAAAFRAmUAGgAAAREUBwYHBiMiLgMnJjUzFBYVFjMyNzY1EQFQDQ8fJi4IESsgIAUCcQEEGxUHBAJk/pZkLCscIwIRHkEsFxcCDAQzGxAhAZEAAAAAAQA1//8BiwJmAAoAABcRMxETMwMTIwMRNmdzbISTfnABAmb+7AEU/s/+zAEJ/vYAAQA1AAABGgJlAAUAADMRMxEzFTZpewJk/iaKAAEANQAAAeUCZQAMAAAzIxEzGwEzESMTAyMDlmCLTEuMYARZRVgCZP52AYr9nAHK/jYBygABADUAAAGMAmUACQAAGwEDMxEjAxMjEZ2NAWNikwJjAmT+lAFs/ZwBaf6XAmQAAAACADUAAAGsAmUADAAfAAATNDYzMhYVFA4BIyImNxQWMzI+BDU0LgIjIg4BNmRWUWs0VDRWZGgqKg8aEQ0IAwgSIhceJw4BLKGXmJpfjUaelUtjDxohKCcUHzo1IDVKAAACADUAAAFgAmYAEAAbAAATMzIeARcWFRQGBw4BKwEVIxMVMzI3NjU0JyYjNoEjMRoMLhcSFjEtKGRkJRoNGBkOHAJlCxMPO2cvWRkdGMAB3ZMJEi8uEQoAAwA1//8BvwJmABsALgA8AAAlFwYiLgInDgIjIi4BNTQ+ATMyFhUUBx4CAyIOBAc2MzIXFhc2NTQuAQMeAzsBMjcmJyYjIgG9AQINGRgcChMsFBM+VycmWD1Uah0GDQzAERwSDQcCARgVKCIbHQkbLGgGFRUTBgYWDhEOGSAPenkBAggSDRMTAlaGU1GIXK5/ZUkIBwEBZxIgHScLCBEoHzQeLTJOKP7/HCgQCQwiFSMAAAAAAgA1//8BjwJmAA0AGgAAJRcjJxUjETMXFhcWFRQnNjU0LgInKwEVMzIBDYF+cGpqOi4UW4QYCxARBQY1Lhb7++vqAmQBBQosgohEFyoVHg4IAZkAAQAyAAABjwJnACsAADczFBY3NjU0JicuAycmPgEzMhYXIy4DIyIGFRQWFx4BFRQOAiMiJjZ2JBIyJjwRICobAQE0TSs5WQp0AQMJEg0RHCdBQTEUJkQsXFbFKx8BBDgWIB4JFyg7ITlVKFRbCwwTCh0UFSIkJEc2JUE3IGkAAAABADUAAAFTAmUABwAAMxEjNSEVIxGLVQEdVQHseHj+FAAAAAABADUAAAGNAmUAGgAAEzMRFBceATI2NzY1ETMRFA4BBwYjIiYnLgE1NmsIBR8qHgUIagcQDjBUIk0ZGQwCZP6WLhsSGBYQFzUBa/6WM0MvFEEcJCZISwAAAQA1AAABpwJlAAYAADMDMxsBMwO2gGdQUWmAAmT+UwGt/ZwAAQA1AAACQAJkAAwAADMDMxsBMxsBMwMjCwGfaWk4PFA8OGhrWz4+AmP+cwGN/nEBj/2dAYz+dAABADUAAAHBAmUACwAAMxMDMxc3MwMTIycHNop6c0NCcnmJc1VRAUYBHq6u/t/+vdnZAAAAAQA1AAABlAJlAAkAADczAzMXNzMDFSOsAXdvQUFtd3HrAXn29v6H6wAAAAABADUAAAFDAmYACQAAAQMzFSE1EyM1IQFDiIj+85OTAQ0B5v6kimcBdYkAAAAAEADGAAEAAAAAAAEACAASAAEAAAAAAAIABwArAAEAAAAAAAMAFQBfAAEAAAAAAAQACACHAAEAAAAAAAUAIgDWAAEAAAAAAAYADwEZAAEAAAAAABAACAE7AAEAAAAAABEABwFUAAMAAQQJAAEAEAAAAAMAAQQJAAIADgAbAAMAAQQJAAMAKgAzAAMAAQQJAAQAEAB1AAMAAQQJAAUARACQAAMAAQQJAAYAHgD5AAMAAQQJABAAEAEpAAMAAQQJABEADgFEAFYAZQBnAGUAbQBpAHQAZQAAVmVnZW1pdGUAAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAADEALgAwADAAMgA7AFYAZQBnAGUAbQBpAHQAZQBSAGUAZwB1AGwAYQByAAAxLjAwMjtWZWdlbWl0ZVJlZ3VsYXIAAFYAZQBnAGUAbQBpAHQAZQAAVmVnZW1pdGUAAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAwADIAOwBGAG8AbgB0AHMAZQBsAGYAIABNAGEAawBlAHIAIAAzAC4AMwAuADAAAFZlcnNpb24gMS4wMDI7Rm9udHNlbGYgTWFrZXIgMy4zLjAAAFYAZQBnAGUAbQBpAHQAZQBSAGUAZwB1AGwAYQByAABWZWdlbWl0ZVJlZ3VsYXIAAFYAZQBnAGUAbQBpAHQAZQAAVmVnZW1pdGUAAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAAAAAAgAAAAAAAP+DADIAAAAAAAAAAAAAAAAAAAAAAAAAAABOAAAAAQACAQIBAwADAAQABgAHAAgACQANABMAFAAVABYAFwAYABkAGgAbABwAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0AQQBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0ArAEECWNvbnRyb2xMRgljb250cm9sQ1IKc29mdGh5cGhlbgAAAAAAAAH//wACAAEAAAAMAAAAFgAAAAIAAQABAE0AAQAEAAAAAgAAAAAAAQAAAAoALAAuAAJERkxUAA5sYXRuABgABAAAAAD//wAAAAQAAAAA//8AAAAAAAAAAQAAAAoAMAA+AAJERkxUAA5sYXRuABoABAAAAAD//wABAAAABAAAAAD//wABAAAAAWtlcm4ACAAAAAEAAAABAAQAAgAAAAEACAABKd4ABAAAAEYAlgEwAd4CjAM2A+AEegUsBWYGDAa+B3AIHgjQCYIKNAriC4gMAgx0DOYNZA3mDlQOyg88D54QEBCGEQARchHsEmIS1BOWFAwUghTwFWIV1BaiFxQXkhgEGMYZdBomGtQbfhwYHL4dYB3+HpgfPh/oIJYhPCHmIpQjRiPsJJolSCXuJpQnQifoKJIpRAAmAAn/8QAK//sADP/7AA3/+wAO//sAD//7ABD/+wAR//sAEv/7ABP/+wAU//sAFf/xABb/8QAZ//sAHf/2AB7/+wAf//sAIP/xACH/+wAi//sAI//7ACT/+wAl//EAJv/2ACf/8QAo//sAKf/2ACr/+wAr//sALP/sAC3/7AAu/+IAL//dADD/9gAx/+wAMv/7ADP/+wA0//YAKwAG//EACP/nAAn/4gAK/9MAC//iAAz/9gAN/+IADv/sAA//4gAQ/9gAEf/iABL/1QAT//EAFP/nABX/8QAW/9gAMf/TADL/pgAz//MANP/nADX/8QA2//EAN//7ADj/7gA5//YAOv/7ADv/2AA8//EAPf/2AD7/9gA///EAQP/sAEH/+wBC/+wAQ//xAET/7ABF/+wARv/2AEf/3QBI/90ASf/EAEr/zgBL//YAKwAG//YAB//2AAn/3QAL/+wADP/sAA3/8QAO//YAD//sABD/8QAR/+wAEv/iABP/5wAU/+wAFf/dABb/7AAX/78AMf/YADL/sAAz/+IANP/iADX/8QA2/+cAN//xADj/3QA5/+wAOv/2ADv/4gA8//EAPf/xAD7/8QA///YAQP/YAEH/9gBC/+cAQ//sAET/7ABF/+wARv/xAEf/zgBI/9MASf/OAEr/zgBL/+wAKgAG//YAB//iAAj/4gAK/+IADP/dAA3/ugAO/+IAD//iABD/5wAR/+IAEv/dABP/yQAU/90AFf+mABb/0wAx/5gAMv/YADP/4gA0/9MANf/xADb/7AA3/+wAOP/iADn/7AA6//EAO//dADz/5wA9/+wAPv/sAD//5wBA/9gAQf/sAEL/zgBD/+wARP/YAEX/tQBG/90AR/+hAEj/oQBJ/8QASv+DAEv/7AAqAAb/8QAH/90ACP/YAAn/oQAL/8kADP/iAA3/sAAO/+cAD//YABD/4gAR/90AEv/bABP/4gAU/+IAFf/TABb/5wAg/+QAMf/nADL/3AAz//QANP/rADX/9AA2//IAN//4ADj/8AA5//QAOv/1ADv/7AA8/+oAPf/7AD7/9wA///IAQP/tAEH/+wBC/+IAQ//2AET/4wBF/7YARv/vAEf/pgBK/6MAS//yACYAB//TAAj/8QAK/84ADP/dAA3/9gAO//EAD//dABD/pgAR/8kAEv+6ABP/7AAU/90AFf/OADH/xAAy/5IAM//sADT/3QA1/+cANv/xADf/9gA4/90AO/9WADz/5wA9//EAPv/sAD//5wBA/84AQf/dAEL/0wBD/+cARP/nAEX/5wBG/+cAR//dAEj/2ABJ/7oASv/JAEv/4gAsAAb/+wAH//sACP/xAAn/zgAK/+cAC//dAAz/9gAN/9gADv/tAA//7AAQ/+kAEf/rABL/3QAT/90AFP/hABX/3QAW/90AMf/nADL/vwAz/+cANP/nADX/8QA2//EAN//sADj/5wA5//YAOv/2ADv/4gA8//EAPf/2AD7/+wA///sAQP/2AEH/+wBC/+wAQ//7AET/7ABF/9MARv/7AEf/yQBI/84ASf+wAEr/xABL/+cADgAG//sACf/xAAv/7AAN//sADv/7AA8AAAAR//EAEv/0ABP/9gAU//EAFf/xABb/7AAx//YAQP/2ACkABv/7AAf/9gAI//sACf/iAAr/5wAL/+wADP/vAA3/3QAO//sAD//qABD/8QAR/+wAEv/nABP/8QAU/+cAFf/iABb/7AAx/+cAMv/vADP//AA0/+cANf/7ADb//gA4//EAOf/8ADr//AA7/+kAPP/6AD3//QA+//4AP//7AEL/6gBD//0ARP/2AEX/7ABG//EAR//YAEj/4gBJ/+wASv/LAEv//AAsAAb/+wAH//EACP/2AAn/0wAK/+IAC//JAAz/5wAN/90ADv/iAA//7AAQ/+cAEf/sABL/3QAT/9MAFP/iABX/zgAW/+cAMf/YADL/xAAz/+wANP/dADX/6AA2//EAN//xADj/4wA5//EAOv/2ADv/7AA8/+wAPf/sAD7/9gA//+wAQP/iAEH/8QBC/90AQ//nAET/5wBF/8QARv/mAEf/xABI/8kASf+1AEr/rQBL/+IALAAG//sAB//7AAj/9gAJ/9MACv/2AAv/ugAM/+kADf/dAA7/9gAP/+wAEP/2ABH/8AAS//EAE//2ABT/5wAV/9gAFv/sADH/vwAy/9UAM//eADT/3wA1//EANv/xADf/9gA4/+IAOf/xADr/9gA7/+wAPP/xAD3/9gA+//EAP//2AED/2ABB//EAQv/nAEP/9gBE/+cARf/TAEb/8QBH/9gASP/YAEn/xgBK/78AS//xACsABv/7AAf/9gAI/+wACf/TAAr/5wAL/90ADP/lAA3/zgAO/90AD//dABD/7AAR/+IAEv/iABP/2AAU/+IAFf/JABb/5wAx/90AMv/EADP/6wA0/+EANf/wADb/8AA4/9wAOf/dADr/7AA7/9gAPP/sAD3/5wA+/+wAP//iAED/0wBB/+IAQv/YAEP/4gBE/84ARf/JAEb/4gBH/8kASP/OAEn/vwBK/8kAS//TACwABv/7AAf/3wAI/+cACf+wAAr/4wAL/8kADP/dAA3/xwAO/+cAD//dABD/7AAR/+cAEv/iABP/yQAU/9cAFf+/ABb/4gAa/+kAMf/YADL/uwAz/+EANP/dADb/6wA3//MAOP/lADn/8QA6//IAO//eADz/5wA9/+4APv/zAD//8ABA/+IAQf/2AEL/6gBD//YARP/kAEX/zABG/+8AR/+0AEj/uwBJ/64ASv+vAEv/5QAsAAb/+wAH/90ACP/nAAn/4gAK/9MAC//nAAz/3QAN//YADv/eAA//3QAQ/7AAEf/OABL/sAAT//sAFP/dABX/0wAW/9MAMf/iADL/iAAz//YANP/OADX/9gA2//EAN//xADj/0wA5//YAOv/zADv/gAA8//EAPf/7AD7/+wA///YAQP/OAEH/7gBC/84AQ//2AET/2ABF//sARv/2AEf/5wBI/+cASf/TAEr/4gBL/+wALAAG//sAB//2AAj/8QAJ/9gACv/nAAv/3QAM/+IADf/dAA7/4gAP/+IAEP/nABH/5wAS/9gAE//YABT/3QAV/84AFv/sADH/5wAy/78AM//nADT/2AA1/+cANv/nADf/7AA4/90AOf/sADr/7AA7/+cAPP/sAD3/8QA+/+wAP//xAED/4gBB//EAQv/dAEP/5wBE/+IARf/YAEb/5wBH/78ASP/HAEn/sABK/7UAS//dACsABv/xAAf/8QAI/+IACf/dAAr/0wAL/+IADP/iAA3/3QAO/+cAD//dABD/zgAR/9MAEv/EABP/0wAU/84AFv/dADH/4gAy/6EAM//jADT/3QA1/+wANv/sADf/5wA4/90AOf/nADr/8QA7/78APP/xAD3/9gA+/+wAP//nAED/3QBB/+cAQv/nAEP/5wBE/+IARf/OAEb/3QBH/8QASP/JAEn/lwBK/7oAS//YACkABv/sAAf/0wAI/90ACf/OAAr/3QAM/90ADf/EAA7/5wAP/9gAEP/YABH/3QAS/9MAE//YABT/4gAV/90AMf/sADL/wAAz/+8ANP/kADX/6wA2//AAN//2ADj/5AA5//EAOv/uADv/1gA8//QAPf/2AD7/8QA///AAQP/dAEH/7ABD/+gARP/YAEX/1QBG/+wAR/+3AEj/wwBJ/7UASv+wAEv/5gAeAAf/zgAi/+4AI//5ACT/7wAy/9AAM//pADT/sQA1/+sANv/nADf/5gA4/7oAOf/vADr/9wA7/9AAPP/sAD3/6wA+/+YAP//sAED/uwBB/+kAQv+7AEP/5ABE/9QARf+6AEb/0ABH/34ASP+SAEn/zQBK/5sAS//nABwAF//RACT//wAy/9EAM//uADT/5wA1/+8ANv/3ADf/7gA4/+gAOf/3ADr/+wA7/9oAPP/vAD3/9wA+/+4AP//vAED/4QBB//cAQv/nAEP/7wBE/+4ARf/QAEb/9wBH/8EASP/MAEn/wwBK/7sAS//nABwAF//QABv/+QAy/8EAM//zADT/6wA1//sANv/zADf/+wA4/+8AOf/zADr//gA7/+EAPP/vAD3/9wA+//kAP//3AED/4gBB//kAQv/jAEP/8wBE/+YARf/VAEb/+QBH/84ASP/JAEn/twBK/8EAS//rAB8ABv/7ABL/3wAX/8kAJf/5ACv/7wAy/7oAM//zADT/6wA1/+8ANv/uADf/8wA4/+oAOf/vADr/7wA7/9QAPP/5AD3//gA+//EAP//vAED/4wBB//MAQv/mAEP/7gBE/+cARf/XAEb/6wBH/8kASP/JAEn/twBK/7cAS//nACAABv/7ACQAAgAl/+8AJ//5AC3//gAv//4AMv/oADP//QA0/+sANf/7ADb/+gA3//sAOP/jADn/9wA6//oAO//kADz//wA9//0APv/+AD8AAABA/+gAQf/7AEL/6ABD//sARP/sAEX/8QBG//sAR//qAEj/6wBJ/+cASv/qAEv/+QAbAAb/+wAl/+8AMv+5ADP/+wA0/+8ANf/7ADb/+wA3//0AOP/vADn/+wA6AAAAO/+7ADz//gA9//4APv/7AED/7ABB//4AQv/nAEP/+QBE//kARf/7AEb/+QBH//MASP/rAEn/4gBK/+8AS//7AB0ABv/2ABf/zgAl/+8AMv+3ADP/9wA0/+sANf/3ADb/8QA3//kAOP/uADn/8wA6//sAO//YADz/8wA9/+4APv/3AD//8wBA/+MAQf/3AEL/6QBD/+8ARP/nAEX/1ABG/+8AR//JAEj/zABJ/6YASv/JAEv/3AAcAAb/+wAX//MAJf/7ADL/6wAz//4ANP/uADX/+wA2//4AN//+ADj/8wA5//0AOv/+ADv/7gA8//4APf/+AD7/+wA///4AQP/uAEL/9wBD//4ARP/+AEX/+QBG//4AR//uAEj/9wBJ/+4ASv/zAEv//gAYAAb/+wAx//YAMv/rADP//wA0//MANf//ADYAAQA3//8AOP/zADv/6AA8//4APf/+AD4AAQBA/+4AQf//AEL/8wBD//4ARP/4AEX//QBH/+wASP/3AEn/7ABK//EASwABABwABv/2ABf/4QAy/8oAM//9ADT/+QA1//4ANv/7ADf//gA4//MAOf/+ADr//wA7/+EAPP/7AD3//gA+//4AP//+AED/7wBB//4AQv/zAEP//gBE//sARf/7AEb//gBH/+8ASP/5AEn/2gBK//oAS//+AB0ABv/nABf/5wAx/7AAMv/hADP/7gA0/7QANf/rADb/5wA3/+4AOP+sADn/6wA6//kAO/+3ADz/6gA9/+8APv/nAD//5wBA/6wAQf/uAEL/rgBD/+cARP+8AEX/3ABG/9oAR//cAEj/0QBJ/9oASv/RAEv/7wAeAAb/9gAX//cAI//9ADH/vwAy/+4AM//5ADT/2gA1//4ANv/3ADf/+wA4/9oAOf/3ADr/+wA7/+cAPP/7AD3/+QA+//cAP//5AED/1ABB//sAQv/cAEP/9wBE/+8ARf/JAEb/6wBH/8QASP++AEn/5wBK/8EAS//+ABwAF//7ADH/7AAy/+QAM//+ADT/7gA1//4ANgAAADf//QA4//cAOf/7ADr//gA7/+4APP/+AD3//gA+//0AP//7AED/7wBB//4AQv/uAEP//gBE//cARf/7AEb/+QBH/+gASP/vAEn/6wBK/+gAS//+AB4ABv/7ABf/8wAa//4AHf/3ACX/9wAq//4AMf/2ADL/5AAz//0ANP/zADX/+wA2//4AN//+ADj/+QA7/+4APf/+AD7/+wA///4AQP/2AEH/+gBC/+4AQ//7AET/+QBF//sARv/+AEf/8wBI/+8ASf/zAEr/6wBL//4AHQAG//EAJP/3ADH/7AAy/7sAM//sADT/4wA1/+8ANv/vADf/9wA4/+QAOf/qADr/9wA7/98APP/vAD3/9wA+/+sAP//uAED/4wBB/+4AQv/mAEP/7wBE/+IARf/VAEb/7gBH/8MASP/GAEn/uwBK/7oAS//fABwABv/sACT//gAy/54AM//rADT/6gA1//EANv/rADf/9wA4/+MAOf/oADr/9wA7/64APP/sAD3/8QA+/+wAP//sAED/4QBB//MAQv/oAEP/5ABE/9gARf/kAEb/7gBH/9EASP/QAEn/uwBK/8QAS//zADAAF//3ABj//wAZ/+kAGv//ABv//QAc//4AHf/pAB7/+wAf//8AIP/iACH//gAi//8AI//+ACT//wAl/+IAJ//uACj//gAp/+cAKv/hACv/+QAs/8MALf/QAC7/5AAv/8wAMP//ADL/4QAz//4ANP/jADX/9wA3//kAOP/fADn/9wA7/+IAPP/5AD3/+gA+//EAP//6AED/2gBB/+8AQv/aAET/7wBF/9cARv/qAEf/xgBI/7sASf/qAEr/tABL//sAHQAG/+cAF//oACT/+gAy/+IAM//xADT/zAA1/+8ANv/sADf/+gA4/8wAOf/3ADr/8wA7/8kAPP/uAD3/7wA+/+wAP//rAED/yQBB//cAQv/MAEP/+ABE/9QARf/KAEb/2gBH/8EASP/EAEn/4gBK/7cAS//vAB0ABv/xABv/+QAl/+4AMv+8ADP/7wA0/9wANf/zADb/6AA3//cAOP/hADn/5gA6//MAO//aADz/6QA9//MAPv/pAD//6wBA/+MAQf/3AEL/2gBD/+kARP/rAEX/1ABG/+kAR//JAEj/zABJ/7QASv+7AEv/5wAbAAb/9gAy/6YAM//9ADT/0wA1//oANv/+ADf//QA4/9UAOf/3ADr//wA7/7kAPP/6AD3//gA+//sAP//7AED/0ABB//oAQv/XAEP/+QBE/+IARf/zAEb/9wBH/+8ASP/vAEn/6gBK/+cAS//6ABwABv/7ACQAAgAy/9UAM//7ADT/7wA1//cANv/9ADf//wA4/+4AOf/7ADr//wA7/+sAPP/+AD3//gA+//0AP//6AED/7gBB//sAQv/sAEP/+wBE/+8ARf/7AEb//QBH/+8ASP/qAEn/3wBK//gAS//+ABwABv/nABf/lQAy/4IAM//3ADT/wQA1/+kANv/nADf/+gA4/8QAOf/oADr/6wA7/5UAPP/uAD3/+wA+//cAP//vAED/wQBB/+8AQv/DAEP/5wBE/84ARf/uAEb/7gBH/+kASP/pAEn/zgBK/+4AS//7ADMABv/sABf/owAY//kAGf/XABr//gAb//4AHP/5AB3/0AAe//gAIP+tACH/8wAi//4AJP/+ACX/0AAm//kAJ//MACj//gAp/9oAKv/+ACv//gAs/+MALf/zAC7/3AAv//cAMP/7ADL/jwAz/+oANP/CADX/7wA2/+oAN//3ADj/xgA5/+sAOv/6ADv/qgA8/+sAPf/7AD7/7wA//+8AQP++AEH/7gBC/8MAQ//qAET/1QBF/+sARv/pAEf/6ABI/+cASf/iAEr/2gBL/+4AHAAG/+cAF//hADL/1AAz/+sANP+wADX/6wA2/+QAN//jADj/qgA5/+cAOv/jADv/ugA8/+cAPf/vAD7/2gA//+kAQP+uAEH/7wBC/64AQ//kAET/uwBF/9oARv/aAEf/zABI/84ASf/TAEr/zQBL/+sAHwAG/+IAF/+lACP//gAk//sAL//uADL/hwAz/+8ANP+sADX/+AA2/9wAN//6ADj/uQA5/+4AOv/vADv/hAA8/+gAPf/pAD7/5wA//+YAQP+wAEH/6QBC/7oAQ//vAET/zgBF/+gARv/oAEf/2gBI/+YASf/QAEr/4gBL/+kAHAAG//sAF//+ADL/5wAz//sANP/kADX/+wA2//8AN//7ADj/4QA5//4AOv//ADv/6wA8//sAPf/+AD7//gA///sAQP/hAEH/+wBC/9oAQ//+AET/7wBF//sARv/6AEf/6QBI//kASf/rAEr/6QBL//sAMAAG/+wAB//YAAj/3QAJ/9MACv+/AAv/yQAM/+IADf/YAA7/7AAP/9MAEP/JABH/5wAS/+IAE//OABT/4gAV/+wAFv/nACD/WwAh/+wAIv/xACP/8QAk//YAJf/xADL/oQAz/+wANP/nADX/7AA2//sAN//2ADj/9gA5//sAO/+PADz/7AA9//YAPv/sAD//8QBA/+IAQf/nAEL/7ABD/+IARP/JAEX/zgBG/+cAR/+/AEj/xABJ/5IASv+/AEv/4gArAAb/9gAI/8QACf+cAAr/zAAL/5QADP+6AA3/xAAO/+oAD//BABD/zgAR/78AEv+7ABP/2AAU/78AFf+mABcAAgAk/+cAMf+mADL/2AAz/+cANP+7ADX/5gA2//MAN//zADj/sQA5/+oAOv/rADz/6AA9/+gAPv/mAD//5wBA/7oAQf/4AEL/twBD/+gARP/OAEX/sQBG/88AR/+EAEj/lwBJ/9AASv+NAEv/9wAsAAb/9gAH/+oACP/nAAn/xAAK/+gAC//TAAz/3QAN/9gADv/lAA//5wAQ/+IAEf/aABL/3AAT/9MAFP/bABX/xAAk//EAMf/YADL/zQAz/+wANP/kADX/9wA2//MAN//9ADj/4wA5//cAOv/3ADv/5gA8//4APf/9AD7/7gA//+4AQP/kAEH/+QBC/+YAQ//vAET/6QBF/9oARv/vAEf/zgBI/88ASf/QAEr/uQBL//kAKwAG//YAB//qAAj/7AAJ/9gACv/uAAv/4gAM/+IADf/dAA7/9AAP/+IAEP/eABH/5gAS/+IAE//TABT/3QAV/90AJP/2ADH/7AAy/74AM//uADT/3wA1//oANv/xADj/5wA5/+8AOv/5ADv/2AA8/+0APf/9AD7/8wA///EAQP/rAEH/+ABC/+QAQ//3AET/5gBF/9AARv/zAEf/xgBI/80ASf++AEr/twBL/+gAKgAH//EACP/xAAn/0wAK/+YAC//YAAz/5wAN/9gADv/oAA//5wAQ/+IAEf/iABP/2AAU/90AFf/dACT/+wAx/+wAMv+7ADP/9wA0/+QANf/rADb/5wA3//EAOP/kADn/+QA6//YAO//aADz/9wA9//4APv/uAD//8QBA/+cAQf/vAEL/4wBD/+sARP/cAEX/0ABG/+sAR//CAEj/xABJ/7QASv+6AEv/6AAmAAf/9gAI//EACf/sAAr/9gAM/+cADv/6AA//8QAQ//EAEf/vABL/4QAT//EAFP/iABX/5wAy/+kAM//9ADT/5wA1//sANv/9ADf//gA4/+sAOf/+ADoAAQA7/+gAPP/9AD3/9wA+//0AP//9AED/6wBBAAEAQv/pAEP/+QBE/+wARgACAEf/6QBI/+8ASf/nAEr/6wBL//sAKQAH//sACP/xAAn/5wAK/+4AC//2AAz/4gAN//sADv/1AA//8QAQ/90AEf/kABL/4gAT/+wAFP/YABX/3QAx//YAMv+5ADP/+AA0/+MANf/3ADb/+AA3//kAOP/iADn/+gA6//0AO//OADz//QA9//4APv/5AD///ABA/+YAQv/jAEP/9wBE/+YARf/vAEb//gBH/+cASP/vAEn/0QBK/+YAS//9ACgAB//2AAj/4gAJ/90ACv/sAAv/4gAM/+gADf/iAA7/9QAP/+gAEP/dABH/4AAS/+YAE//OABT/4gAV/90AJP/7ADH/9gAy/8EAM//vADT/3wA2//QAN//4ADj/4wA5/+kAOv/6ADv/0QA8/+YAPf/zAD7/6QA///EAQP/qAEL/3ABD/+gARP/fAEb/+ABH/7sASP+7AEn/rwBK/68AS//jACcACP/xAAn/7AAK//gADP/2AA7/9wAP//YAEP/xABH/5wAS/+cAE//xABT/7AAV/+UAMf/2ADL/6AAz//kANP/qADX/+wA2//oAN//7ADj/6wA5//cAOv//ADv/4wA8//sAPf/+AD7/+wA///oAQP/sAEH/+gBC/+MAQ//5AET/7wBF/+oARv/7AEf/4wBI/+wASf/jAEr/6gBL//4AJgAH//sACP/7AAn/5wAK//oADP/2AA7/9gAP//YAEP/xABH/8QAS//IAE//xABT/5wAV//EAMv/nADP/+wA0//EANf/9ADb//gA3//4AOP/uADn/+wA6//4AO//oAD0AAAA+//sAP//+AED/7wBB//4AQv/qAEP//wBE//EARf/3AEb/+wBH/+YASP/3AEn/2gBK/+QAS//7ACkAB//2AAj/9gAJ/90ACv/yAAz/8QAO//EAD//wABD/6gAR/+wAEv/mABP/9AAU/+wAFf/rABf/zgAx//YAMv/OADP/7wA0/+oANf/5ADb//gA3//0AOP/oADn/+QA6//0AO//YADz//gA9//8APv/6AD//+QBA/+4AQf/5AEL/4wBD//gARP/qAEX/+QBG//oAR//pAEj/6QBJ/9UASv/rAEv/+gAqAAf/sgAI/8kACf+wAAr/ugAL/7UADP+1AA3/3QAO/+QAD/+6ABD/sgAR/7UAEv+xABP/4gAU/6sAFf+mADH/lwAy/9oAM//jADT/qwA1/+IANv/iADf/4wA4/5oAOf/XADr/7gA7/7QAPP/kAD3/6wA+/+4AP//mAED/rQBB/+8AQv+qAEP/6gBE/74ARf/XAEb/2gBH/9AASP/SAEn/1QBK/80AS//qACsAB//nAAj/8QAJ/6YACv/sAAv/nAAM/90ADf+6AA7/9gAP/+IAEP/sABH/3QAS/9oAE//sABT/3QAV/8QAJP/+ADH/pgAy/+sAM//vADT/ygA1//0ANv/zADf/+wA4/9MAOf/vADr/+wA7/9gAPP/3AD3/9wA+//EAP//7AED/1QBB//cAQv/PAEP/8wBE/+YARf+7AEb/5wBH/7UASP/JAEn/2gBK/6UAS//zACkAB//2AAn/7AAK//kAC//sAAz/9gAO//oAD//2ABD/7AAR/+cAEv/vABP/9gAU//EAFf/sABcAAQAx/+YAMv/pADP/+QA0/+oANf/zADb/+wA3//oAOP/nADn/9wA6//4AO//uADz/+QA9//oAPv/7AD//+QBA/+8AQf/3AEL/6QBD//oARP/sAEX/8wBG//gAR//pAEj/6QBJ/+MASv/nAEv//QAqAAf/9gAI//sACf/sAAr/9wAL/+wADP/7AA7/+gAP//EAEP/2ABH/7AAS//EAE//2ABT/9gAV/+QAFwABADH/8QAy/+kAM//3ADT/6QA1//kANv/5ADf/+QA4/+8AOf/6ADr//gA7/+8APP/7AD3/+gA+//oAP//4AED/7wBB//sAQv/rAEP//QBE/+8ARf/3AEb/+gBH/+4ASP/rAEn/4QBK/+wAS//5ACsAB//xAAj/4gAJ/9gACv/sAAv/2AAM//YADf/iAA7/8QAP/90AEP/iABH/0wAS/+IAE//JABT/4gAV/94AJP/7ADH/3QAy/7QAM//pADT/4QA1/+wANv/vADf/6gA4/+IAOf/qADr/+gA7/9oAPP/pAD3/6wA+/+wAP//pAED/4QBB/+sAQv/cAEP/6wBE/+IARf/JAEb/7gBH/7wASP/BAEn/pgBK/7UAS//kACwAB//iAAj/5wAJ/+IACv/OAAv/2AAM/+cADf/nAA7/8AAP/90AEP+6ABH/xAAS/9cAE//XABT/2AAV/9gAG//3ACT/+wAx/+IAMv+gADP/6QA0/+MANf/mADb/7wA3/+sAOP/aADn/6AA6//YAO/+xADz/6wA9/+4APv/oAD//7wBA/9oAQf/oAEL/1wBD/+MARP/aAEX/2ABG/+cAR//PAEj/yQBJ/7kASv/BAEv/6AApAAf/8QAI/+wACf/OAAr/6gAL/84ADP/nAA3/2AAO//YAD//fABD/4gAR/9gAEv/lABP/5wAU/+IAFf/YADH/4gAy/+cAM//3ADT/2gA1//gANv/5ADf/+wA4/9wAOf/3ADr//gA7/+MAPP/3AD3//QA+//cAP//3AED/1QBC/9UAQ//9AET/6QBF/+EARv/pAEf/ugBI/8QASf/aAEr/wgBL//sAKwAH/8kACP/YAAn/xAAK/9MAC/+/AAz/yQAN/9gADv/nAA//xAAQ/7oAEf+1ABL/wQAT/9gAFP+6ABX/vwAk//sAMf+/ADL/2gAz/+gANP/KADX/6QA2/+kAN//oADj/xgA5/+QAOv/nADv/uQA8/+wAPf/uAD7/6QA//+cAQP/GAEH/7ABC/8kAQ//mAET/2ABF/84ARv/VAEf/wQBI/7wASf/GAEr/tABL/+8AKwAH//EACP/2AAn/yQAK/+oAC//TAAz/3QAN/+cADv/sAA//4gAQ/+IAEf/YABL/3wAT/90AFP/dABX/2AAk//sAMf/nADL/xgAz//MANP/iADX/7wA2/+4AN//3ADj/4wA5/+kAOv/vADv/1wA8/+4APf/zAD7/6gA//+0AQP/kAEH/9wBC/98AQ//qAET/5wBF/9AARv/vAEf/yQBI/9AASf/PAEr/xABL/+8AKQAH/+cACP/sAAn/5wAK/+kAC//dAAz/2AAO/+wAD//XABD/qwAR/8kAEv/AABP/9gAU/9MAFf/OADH/2AAy/7AAM//5ADT/2gA1//0ANv/6ADf//gA4/98AOf/3ADr//QA7/8YAPP/7AD3//gA+//gAP//4AED/1QBB//0AQv/VAEP/+ABE/+MARf/zAEb/+QBH/+4ASP/zAEn/4gBK/+cAS//zACkACP/2AAn/5wAK//QAC//sAAz/+wAN//4ADv/2AA//5QAQ/+wAEf/nABL/8wAT//EAFP/nABX/3QAx/+QAMv/KADP/+QA0/+wANf/6ADb/+gA3//sAOP/vADn/+gA6AAAAO//hADz//wA9//0APv/5AD///gBA/+wAQf/7AEL/7ABD//sARP/vAEX/9wBG//sAR//zAEj/6gBJ/+EASv/jAEv/+wArAAf/zgAI/84ACf/YAAr/ygAL/9gADP/JAA3/+wAO/9kAD//JABD/ogAR/7oAEv+5ABP/5wAU/8QAFf+9ACT/+wAx/7oAMv+FADP/+wA0/7sANf/qADb/6wA3/+wAOP++ADn/5gA6/+8AO/+iADz/6AA9/+oAPv/sAD//7wBA/8MAQf/mAEL/uwBD/+YARP/KAEX/6QBG/+8AR//jAEj/3wBJ/9MASv/hAEv/6wApAAf/zgAI/84ACf/TAAv/2AAM/84ADv/eAA//xAAQ/7AAEf/TABL/sQAT/+wAFP/FABX/yQAk//sAMf/JADL/lQAz//MANP/BADX/+QA2//MAN//3ADj/xgA5//sAOv/3ADv/pQA8/+8APf/+AD7/7gA//+oAQP/DAEH/7gBC/8QAQ//vAET/0ABF/+4ARv/uAEf/6QBI/+QASf/aAEr/5gBL//cAKgAH/8QACP/OAAn/pgAL/7oADP+rAA3/3QAO/+cAD/+5ABD/twAR/8QAEv+zABP/0wAU/7AAFf+cACT/+wAx/6EAMv/aADP/4wA0/7cANf/4ADb/4wA3//0AOP+3ADn/7gA6/+8AO/+7ADz/7gA9//EAPv/jAD//6ABA/7oAQf/zAEL/uQBD/+sARP/OAEX/3wBG/+EAR//aAEj/2ABJ/9gASv/MAEv/7gAsAAf/yQAI/84ACf/JAAr/wgAL/8kADP/JAA3//gAO/8kAD/+6ABD/jQAR/7oAEv+gABP/4gAU/7UAFf+6AB7/8QAk//sAMf+1ADL/lwAz/+8ANP+7ADX/5gA2/+4AN//uADj/uQA5/+gAOv/3ADv/hAA8/+8APf/sAD7/7AA//+oAQP+6AEH/7ABC/7kAQ//pAET/ygBF/+8ARv/vAEf/6ABI/+kASf/fAEr/5ABL//EAJgAH//YACf/iAAr/7AAL/+cADP/iAA3//wAO//UAD//nABD/7AAR/+IAEv/gABP/7AAU/90AFf/TADH/4gAy/+sAM//+ADT/6AA1//4ANgAEADf//wA4/9wAOf/6ADv/5gA8//8APf//AD///QBA/+MAQf//AEMAAABE/+8ARf/4AEb/+wBH//cASP/rAEn/6QBK/+kAS//9AAIAAQAGAEsAAAAAAAAAAQAAAADUGBYRAAAAANmXsTQAAAAA2ZexNA==",at=n=>Wr("http://www.w3.org/2000/svg",n),Al=(n,t)=>{const e=at("rect");return e.setAttribute("height",`${n}`),e.setAttribute("width",`${t}`),e},hl=(n,t,e,a)=>{const i=fe("filter");i.setAttribute("id",a),i.setAttribute("height","200%"),i.setAttribute("width","200%"),i.setAttribute("x","-50%"),i.setAttribute("y","-50%");const r=fe("feOffset");i.appendChild(r),r.setAttribute("result","offOut"),r.setAttribute("in","SourceAlpha"),r.setAttribute("dx",`${n}`),r.setAttribute("dy",`${t}`);const o=fe("feGaussianBlur");i.appendChild(o),o.setAttribute("result","blurOut"),o.setAttribute("in","offOut"),o.setAttribute("stdDeviation",`${e}`);const s=fe("feBlend");return i.appendChild(s),s.setAttribute("in","SourceGraphic"),s.setAttribute("in2","blurOut"),s.setAttribute("mode","normal"),i},gl=n=>{let t=n;return t=t.replace(/feoffset/gi,"feOffset"),t=t.replace(/fegaussianblur/gi,"feGaussianBlur"),t=t.replace(/feblend/gi,"feBlend"),t=t.replace(/lineargradient/gi,"linearGradient"),t=t.replace(/stddeviation/gi,"stdDeviation"),t};function ml(n,t,e,a,i,r){const o=i,s=r,l={x:t[0],y:t[1],width:t[2]-t[0],height:t[3]-t[1]};if(l.width<=0)return;const c=pl(l.height,l.width,e*o,a*s),d=(a-c*l.width)/2-c*l.x,u=(e-c*l.height)/2-c*l.y;n.setAttribute("transform",`translate(${d} ${u}) scale(${c} ${c})`)}function pl(n,t,e,a){const i=e/n,r=a/t;return i>1&&r>1?Math.min(i,r):i>1&&r<1?r:i<1&&r>1?i:Math.min(i,r)}const En={m:["x","y"],z:[],l:["x","y"],h:["x"],v:["y"],c:["x1","y1","x2","y2","x","y"],s:["x2","y2","x","y"],q:["x1","y1","x","y"],t:["x","y"],a:["rx","ry","xRotation","largeArc","sweep","x","y"]};class fl{constructor(t){const e=Array.from(t.querySelectorAll("path"));this.paths=e.map(a=>{const i=a.getAttribute("d")||"",r=this.parsePath(i);return{pathElement:a,pathData:r}})}transform(t){for(const e of this.paths)e.pathData=this.runTransformer(e.pathData,t);this.update()}encodePath(t){let e="";const i=r=>{const o=[],s=r.relative?r.type:r.type.toUpperCase();let l=e!==s;const c=En[r.type];l&&(o.push(s),e=s);for(const d of c){const u=r[d];let A;switch(typeof u){case"boolean":A=u|0;break;case"number":A=(u*100|0)/100;break;default:throw new It("Failed to encode path.")}l||o.push(" "),o.push(A),l=!1}return o.join("")};return t.map(i).join("")}parsePath(t){const e=/([mzlhvcsqta])([^mzlhvcsqta]*)/gi,a=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi,i=[];let r;for(e.lastIndex=0;r=e.exec(t);){const o=r[1].toLowerCase(),s=(r[2].match(a)||[]).map(parseFloat),l=o===r[1],c=En[o];if(s.length<c.length)throw new It(`Path type "${o}" given ${s.length} arguments, expected ${c.length}.`);if(c.length>0){if(s.length%c.length!==0)throw new It(`Path type "${o}" given ${s.length} arguments, not divisible by ${c.length}`);for(let d=0;d<s.length/c.length;d++){const u={type:o,relative:l};for(let A=0;A<c.length;A++)u[c[A]]=s[d*c.length+A];i.push(u)}}else i.push({type:o,relative:l})}return i}runTransformer(t,e){const a=[["x1","y1"],["x2","y2"],["x","y"]],i=r=>{for(let o=0;o<a.length;o++){const[s,l]=a[o];if(s in r&&l in r){const c=[r[s],r[l]],d=e(c);if(d.length<2)throw new It("Transformer must return at least 2 points.");r[s]=d[0],r[l]=d[1]}}return r};return this.transformPath(t,i)}transformPath(t,e){const a=[];for(let i=0;i<t.length;i++){const r=JSON.parse(JSON.stringify(t[i])),o=e(r);Array.isArray(o)?a.push(...o):o&&a.push(o)}return a}update(){for(const{pathElement:t,pathData:e}of this.paths){const a=this.encodePath(e);t.setAttribute("d",a)}}}class Cl extends dl{constructor(){super(...arguments),this.moduleName="Vegemite"}svgPreview(t,e){return this.svgElement(t,e)}svgPrint(t,e){return this.svgElement(t,e)}svgElement(t,e){const a=xs(ul),r=t!==""?(w=>w.charAt(0).toUpperCase()+w.substr(1).toLowerCase())(t):"",o=a.getPath(r,0,72,72),s=o.toSVG(2),l=o.getBoundingBox(),c=l.x2-l.x1,d=o.toPathData(3),u=()=>{const w=at("g");w.classList.add("module-text-group");const F=at("defs");w.appendChild(F),F.appendChild(hl(0,2,2,"shadow"));const b=at("path");b.setAttribute("d",d),b.setAttribute("stroke","black"),b.setAttribute("stroke-width","3"),F.appendChild(b);const v=at("g");v.classList.add("module-layer0"),w.appendChild(v),v.setAttribute("filter","url(#shadow)"),v.innerHTML=b.outerHTML;const I=at("g");I.classList.add("module-layer1"),w.appendChild(I),I.setAttribute("stroke-width","3"),I.setAttribute("stroke","rgb(45,41,38)"),I.setAttribute("fill","rgb(45,41,38)"),I.setAttribute("transform","translate(0.5,0)"),I.innerHTML=s;const M=at("g");M.classList.add("module-layer2"),w.appendChild(M),M.setAttribute("fill","rgb(255,209,0)"),M.setAttribute("transform","translate(1,-0.1)"),M.innerHTML=s;const R=at("g");return R.classList.add("module-layer3"),w.appendChild(R),R.setAttribute("fill","white"),R.innerHTML=s,new fl(w).transform(([T,L])=>[T,L+(c/2-T)**2/(c*6)]),w},A=at("g");A.classList.add("module-root");const h=at("defs");A.appendChild(h);const g=at("g");g.classList.add("module-bounds"),A.appendChild(g);const p=Al(e.height,e.width);p.setAttribute("opacity","0"),g.appendChild(p);const m=at("g");m.classList.add("module-text-enclosure"),A.appendChild(m);const f=u();m.appendChild(f);const y=$r(d);return ml(m,y,e.height,e.width,.35,.65),gl(A.outerHTML)}}async function Ti(n){if(n==="Vegemite")return new Cl;throw new O(`Failed to resolve Module, Module ${n} not found`)}const wl=["altGlyph","circle","ellipse","path","polygon","polyline","rect","text","textPath","tref","tspan"],yl=async(n,t,e)=>{const a=t.data,i=e.data.baseUrl,r=a.assetUrl.replace("localhost","localstack"),o=i.slice(0,4)==="http"?"":"https://",s=new URL(o+i);s.searchParams.append("video",An(JSON.stringify([{href:r}]))),s.pathname=s.pathname+(s.pathname.slice(-1)==="/"?"":"/");const l=s.toString(),d=`data:image/svg+xml;base64,${An(await Un.toString(l,{type:"svg"}))}`,u=h=>{const g=n.find(m=>m.panelId===h.panelId);if(!g)throw new Y(h);const p=N();return new G({id:p,src:d,type:D.Image,y:h.top,x:h.left,width:h.width,height:h.height,rotation:0},g)},A=e.data.regions;try{return A.map(u)}catch(h){return console.error(h),[]}},Sl=async(n,t,e,a)=>{const i=e.data,r=i.assetUrl,o=await Ea(r);try{const s=await Vs(i,a.option);s&&(t[a.stepName]={selectedVariants:[s]});const l=async c=>{const d=await bi(c,s?.asset?.fileLink),u=await Ae(d),A=N(),h=n.find(p=>p.panelId===c.panelId);if(!h)throw new Y(c);const g=qa(o,u,{scale:i.scale,left:i.x,top:i.y},a.data.forceImageCover);return[new G({id:A,path:u.path,type:D.Frame,forceImageCover:a.data.forceImageCover,x:c.left,y:c.top,width:c.width,height:c.height,layer:c.layer,layerIndex:c.layerIndex,rotation:c.rotation,scaleX:c.width/u.width,scaleY:c.height/u.height,pattern:{id:`${A}-pattern`,src:o.src,x:g.x,y:g.y,width:o.width,height:o.height,rotation:0,scaleX:g.zoom,scaleY:g.zoom,svg:o.svg,colors:o.colors}},h)]};return(await Promise.all(a.data.regions.map(c=>l(c)))).flat()}catch(s){return console.error(s),[]}},vl=async(n,t,e,a)=>{const i=e.data,r=a.option;if(!r)return console.error(`No option for step ${a.stepName}.`),[];const o=r.variants?.find(b=>b.id===i.illustrationVariantId)||await P.getDefaultVariant(r,a.overrideDefaultVariantId);if(!o)return console.error(`No variant with ID: ${i.illustrationVariantId}`),[];if(!o.asset)return console.error(`No asset for variant with ID: ${i.illustrationVariantId}`),[];t[a.stepName]={selectedVariants:[o]};const s=o.asset?.fileLink;if(!s)return console.error(`No asset link for variant with ID: ${i.illustrationVariantId}`),[];const l=await et(s,!0),c=/<svg.*?<\/svg>/s,d=l.match(c)||[],u=d?.length>0?d[0]:"",g=ct().parseFromString(u,"image/svg+xml").firstElementChild;if(!g)return console.error("Failed to read SVG."),[];qe(g);const p={};Ut(g,b=>{wl.includes(b.tagName)&&!b.attributes.getNamedItem("fill")&&b.setAttribute("fill","#000000");const v=b.attributes.getNamedItem("fill");if(v&&v.value!=="none"){const M=v.value,x=`spiff-fill-${M.replace(/\W/g,"")}`;b.classList.add(x),p[x]={browserValue:M}}const I=b.attributes.getNamedItem("stroke");if(I&&I.value!=="none"){const M=I.value,x=`spiff-stroke-${M.replace(/\W/g,"")}`;b.classList.add(x),p[x]={browserValue:M}}});const f=Et().serializeToString(g),y=i.colors;if(y){for(const[b,v]of Object.entries(p))for(const I of Object.keys(y))if(v.browserValue===I){p[b]={browserValue:y[I]};break}}const w=b=>{const v=n.find(M=>M.panelId===b.panelId);if(!v)throw new Y(b);const I=N();return new G({colors:p,id:I,svg:f,type:D.Illustration,y:b.top,x:b.left,rotation:b.rotation,width:b.width,height:b.height,layer:b.layer,layerIndex:b.layerIndex,immutable:b.immutable},v)},F=a.data.regions;try{return F.map(w)}catch(b){return console.error(b),[]}},El=async(n,t,e)=>{const a=await Ti(e.data.module),i=t.data,r=(s,l)=>{const c=n.find(u=>u.panelId===l.panelId);if(!c)throw new Y(l);const d=N();return new G({colors:{},id:d,svg:s,type:D.Illustration,y:l.top,x:l.left,rotation:l.rotation,width:l.width,height:l.height,layer:l.layer,layerIndex:l.layerIndex},c)},o=e.data.regions;try{return o.map(s=>r(a.svgPrint(i.text,s),s))}catch(s){return console.error(s),[]}},bl=async(n,t,e,a)=>{const i=e.data,r=a.option;if(!r)return console.error(`No option for step ${a.stepName}.`),[];const o=r.variants?.find(d=>d.id===i.pictureVariantId)||await P.getDefaultVariant(r,a.overrideDefaultVariantId);if(!o)return console.error(`No variant with ID: ${i.pictureVariantId}`),[];if(!o.asset)return console.error(`No asset for variant with ID: ${i.pictureVariantId}`),[];t[a.stepName]={selectedVariants:[o]};const s=o.asset?.fileLink;if(!s)return console.error(`No asset link for variant with ID: ${i.pictureVariantId}`),[];const l=d=>{const u=n.find(h=>h.panelId===d.panelId);if(!u)throw new Y(d);const A=N();return new G({id:A,src:s,type:D.Image,y:d.top,x:d.left,rotation:d.rotation,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,immutable:d.immutable,preserveAspectRatio:"none"},u)},c=a.data.regions;try{return c.map(l)}catch(d){return console.error(d),[]}},Il=async(n,t,e,a)=>{const i=e.data,r=a.option;if(!r)return console.error(`No option for step ${a.stepName}.`),[];const o=r.variants?.find(c=>c.id===i.colorVariantId)||await P.getDefaultVariant(r,a.overrideDefaultVariantId);if(!o)return console.error(`No variant with ID: ${i.colorVariantId}`),[];t[a.stepName]={selectedVariants:[o]};const s=c=>{const d=n.find(p=>p.panelId===c.panelId);if(!d)throw new Y(c);const u=`
1410
1410
  <svg
1411
1411
  xmlns="http://www.w3.org/2000/svg"
1412
1412
  xmlnsXlink="http://www.w3.org/1999/xlink"
@@ -1426,8 +1426,8 @@
1426
1426
  fill="${o?.color}"
1427
1427
  />
1428
1428
  </svg>
1429
- `,h={"spiff-fill-shape":{browserValue:o.color||"#000000"}},g=N();return new G({colors:h,id:g,svg:u,type:D.Illustration,y:c.top,x:c.left,rotation:c.rotation,width:c.width,height:c.height,layer:c.layer,layerIndex:c.layerIndex,immutable:c.immutable},d)},l=a.data.regions;try{return l.map(s)}catch(c){return console.error(c),[]}},Bl=async(n,t,e)=>{const a=[],r=t.type===E.ProductOverlay?e||t.data.asset?.fileLink||"":t.data.asset?.fileLink||"",s=r.endsWith(".jpeg")||r.endsWith(".jpg")||r.endsWith(".png")?D.Image:(r.endsWith(".svg"),D.Illustration),l=t.data.regions;if(s==="image")try{l.forEach(c=>{const d=n.find(A=>A.panelId===c.panelId);if(!d)throw new Y(c);const u={id:N(),src:r,type:s,y:c.top,x:c.left,width:c.width,height:c.height,layer:c.layer,layerIndex:c.layerIndex,productOverlay:t.type===E.ProductOverlay?!0:void 0,scaleX:1,scaleY:1,rotation:c.rotation,excludeFromExport:t.data.excludeFromPrint,preserveAspectRatio:"none"};a.push(new G(u,d))})}catch(c){console.error(c)}else{const c=await et(r,!0),d=u=>{const A=/<svg.*?<\/svg>/s,h=u.match(A)||[],g=h?.length>0?h[0]:"",f=ct().parseFromString(g,"image/svg+xml").firstElementChild;if(!f)throw new It("Failed to read SVG.");return Le(f),Et().serializeToString(f)};l.forEach(u=>{const A=n.find(g=>g.panelId===u.panelId);if(!A)throw new Y(u);const h={id:N(),src:r,asset_key:r,svg:d(c),colors:{},type:s,y:u.top,x:u.left,width:u.width,height:u.height,layer:u.layer,layerIndex:u.layerIndex,scaleX:1,scaleY:1,rotation:u.rotation,productOverlay:t.type===E.ProductOverlay?!0:void 0,excludeFromExport:t.data.excludeFromPrint};a.push(new G(h,A))})}return a},Pl=async(n,t,e,a)=>{const i=[],r=e.data,o=30,s=m=>m.vertical?"center":m.textAlign||"center",l=async()=>{const m=a.option;if(!m)return;const f=m.variants?.find(w=>w.id===r.fontVariantId)||await P.getDefaultVariant(m,a.overrideDefaultVariantId);if(!f||!f.asset)return;t[a.stepName]={selectedVariants:[f]};const y=f.asset.fileLink;if(y)return y},d=await(async()=>{const m=await l();if(!m)return;const f=await Ft(m);return{assetUrl:m,name:f.names.fullName.en}})(),u=(a.data.replaceableText?a.data.replaceableText.replace("{{}}",r.text):r.text)||"",A=Fe(u,{vertical:a.data.vertical,uppercase:a.data.uppercase}),h=async m=>{const f=m.colorOption;return f?(await P.getDefaultVariant(f))?.color:void 0},g=r.color||await h(a.data),p=a.data.regions;for(const m of p){const f=n.find(w=>w.panelId===m.panelId);if(!f)continue;const y={stepName:e.name,id:N(),align:s(a.data),curved:a.data.curved,fill:r.color||g||"#000000",fontData:d,fontSize:a.data.size||o,height:m.height,layer:m.layer,layerIndex:m.layerIndex,paths:a.data.paths,rotation:m.rotation,text:A,type:D.Textbox,vertical:a.data.vertical,verticalAlign:a.data.verticalAlign||"middle",width:m.width,x:m.left,y:m.top};if(d){const[w,F]=Kt(a.data.size||o,d,m,[Fe(A,{vertical:a.data.vertical,uppercase:a.data.uppercase})],{size:a.data.size,minSize:a.data.minSize,maxSize:a.data.maxSize});i.push(new G({...y,fontSize:w,text:y.curved?y.text:(F||[]).join(`
1430
- `)},f))}else i.push(new G(y,f))}return i},xl=(n,t)=>n.conditions?n.conditions.every(e=>{const a=t[e.targetStepName];if(a&&a.selectedVariants){const i=a.selectedVariants;return e.requiredVariantSelections.some(r=>i.find(o=>o.id===r)!==void 0)}return!1}):!0,Ti=async(n,t,e,a)=>{const i=[],r={};for(const o of n){const s=t.steps.find(l=>l.stepName===o.name);if(s)switch(s.type){case E.DigitalContent:i.push(...await yl(e,o,s));break;case E.Frame:case E.Photo:i.push(...await Sl(e,r,o,s));break;case E.Illustration:i.push(...await vl(e,r,o,s));break;case E.Module:i.push(...await El(e,o,s));break;case E.Picture:i.push(...await bl(e,r,o,s));break;case E.Shape:i.push(...await Il(e,r,o,s));break;case E.Text:i.push(...await Pl(e,r,o,s));break}}for(const o of t.steps)o.type!==E.SilentIllustration&&o.type!==E.ProductOverlay||xl(o,r)&&i.push(...await Bl(e,o,a));return i};class Fl{constructor(t){this.handleCompleteRender=null;const e=new Map;t.forEach(a=>e.set(a.id,new Ml(a.id,a.name,this,{width:a.width,height:a.height},this.getWorkflowManager.bind(this)))),this.layouts=e}setCompleteRenderCallback(t){this.handleCompleteRender=t,t(Array.from(this.layouts.values()))}onCompleteRender(){this.handleCompleteRender&&this.handleCompleteRender(Array.from(this.layouts.values()))}getAll(){return this.layouts}setWorkflowManager(t){this.workflowManager=t}getWorkflowManager(){return this.workflowManager}}const Dl=()=>new Promise((n,t)=>{try{const a=yt().getContext("webgl2");n(!!a)}catch{n(!1)}}),kl=Dl();class Ml{constructor(t,e,a,i,r){this.hasSetStaticContext=!1,this.interactiveDirty=!1,this.staticCtxDirty=!1,this.lastRequestedRenderArguments=void 0,this.lastCompletedStaticRender=void 0,this.renderQueue=new Va(2),this.id=t,this.name=e,this.service=a,this.panelSize=i,this.getWorkflowManager=r}getID(){return this.id}getName(){return this.name}getPanelSize(){return this.panelSize}getStaticContext(){return this.textureCtx}setStaticContext(t){this.textureCtx=t,this.lastRequestedRenderArguments&&this.render(this.lastRequestedRenderArguments)}getStaticContextDirty(){return this.staticCtxDirty}setStaticContextDirty(t){this.staticCtxDirty=t}getInteractiveCanvasDirty(){return this.interactiveDirty}setInteractiveCanvasDirty(t){this.interactiveDirty=t}markLastCompletedStaticRender(){this.lastCompletedStaticRender=Date.now(),this.service.onCompleteRender()}getLastCompletedStaticRender(){return this.lastCompletedStaticRender}async render(t){const e=Pt(t);this.lastRequestedRenderArguments=e;const a=this.getStaticContext();if(!a){this.markLastCompletedStaticRender(),this.setStaticContextDirty(!1);return}this.renderQueue.enqueue(new Tl(this.getID(),a,await kl,()=>{this.markLastCompletedStaticRender(),this.setStaticContextDirty(!0)},e,this.getWorkflowManager))}}class Tl extends Ua{constructor(t,e,a,i,r,o){super(),this.layoutId=t,this.ctx=e,this.nonPOTSupport=a,this.onRender=i,this.layouts=r,this.getWorkflowManager=o}getDynamicTextureResolution(){return this.getIsMobile()||!this.offscreenRenderingSupported()?{width:1024,height:1024}:{width:2048,height:2048}}getIsMobile(){return window.innerWidth<=480}offscreenRenderingSupported(){return navigator.userAgent.includes("SamsungBrowser")?!1:!!window.Worker&&!!window.OffscreenCanvas}resizeFit(t,e=4096){const a=e/t.width,i=e/t.height,r=Math.min(a,i);return r>1?t:{width:t.width*r,height:t.height*r}}async execute(){const t=this.layouts.find(g=>g.layoutState.layout.id===this.layoutId);if(!t)return;const e=t.layoutState.elements||[],a=t.layoutState.layout.width,i=t.layoutState.layout.height,r=a===1||i===1?{width:1,height:1}:this.getDynamicTextureResolution(),o=r.width,s=r.height;let l,c;if(this.nonPOTSupport){const g=o/s;a/i<g?(l=o,c=i*(o/a)):(l=a*(s/i),c=s);const m=this.resizeFit({width:l,height:c});l=m.width,c=m.height}else l=r.width,c=r.height;const d=this.getWorkflowManager?.()?.getTemplatingContext(),u=He(t.layoutState.layout,e,{renderingConfiguration:{purpose:Ot.ThreeD,templatingContext:d}}),A=Kn(u),h=await Ma.Pith.from(this.ctx,A,{anonymousCrossOrigin:!0,ignoreDimensions:!this.nonPOTSupport,ignoreAnimation:!0,ignoreClear:!0,ignoreMouse:!0,enableRedraw:!1,createCanvas:yt,createImage:le,DOMParser:Ra(),fetch});h.resize(l,c),await h.render(),this.onRender()}}const Nl=(n,t)=>{const e=[];return n.forEach(a=>{const i=t.steps.find(r=>r.stepName===a.stepName);i?.type===E.Text&&a.stepAspectType==="Text"&&e.push({name:i.stepName,data:{text:a.value}})}),e},Ql=async(n,t,e,a)=>{let i={serializableWorkflow:{steps:[]},layouts:{}};i=new U(e.map(l=>new ja(l))).apply(i);const o=await Ti(n,t,e,a);return new U(o).apply(i)},We=C.gql`
1429
+ `,h={"spiff-fill-shape":{browserValue:o.color||"#000000"}},g=N();return new G({colors:h,id:g,svg:u,type:D.Illustration,y:c.top,x:c.left,rotation:c.rotation,width:c.width,height:c.height,layer:c.layer,layerIndex:c.layerIndex,immutable:c.immutable},d)},l=a.data.regions;try{return l.map(s)}catch(c){return console.error(c),[]}},Bl=async(n,t,e)=>{const a=[],r=t.type===E.ProductOverlay?e||t.data.asset?.fileLink||"":t.data.asset?.fileLink||"",s=r.endsWith(".jpeg")||r.endsWith(".jpg")||r.endsWith(".png")?D.Image:(r.endsWith(".svg"),D.Illustration),l=t.data.regions;if(s==="image")try{l.forEach(c=>{const d=n.find(A=>A.panelId===c.panelId);if(!d)throw new Y(c);const u={id:N(),src:r,type:s,y:c.top,x:c.left,width:c.width,height:c.height,layer:c.layer,layerIndex:c.layerIndex,productOverlay:t.type===E.ProductOverlay?!0:void 0,scaleX:1,scaleY:1,rotation:c.rotation,excludeFromExport:t.data.excludeFromPrint,preserveAspectRatio:"none"};a.push(new G(u,d))})}catch(c){console.error(c)}else{const c=await et(r,!0),d=u=>{const A=/<svg.*?<\/svg>/s,h=u.match(A)||[],g=h?.length>0?h[0]:"",f=ct().parseFromString(g,"image/svg+xml").firstElementChild;if(!f)throw new It("Failed to read SVG.");return qe(f),Et().serializeToString(f)};l.forEach(u=>{const A=n.find(g=>g.panelId===u.panelId);if(!A)throw new Y(u);const h={id:N(),src:r,asset_key:r,svg:d(c),colors:{},type:s,y:u.top,x:u.left,width:u.width,height:u.height,layer:u.layer,layerIndex:u.layerIndex,scaleX:1,scaleY:1,rotation:u.rotation,productOverlay:t.type===E.ProductOverlay?!0:void 0,excludeFromExport:t.data.excludeFromPrint};a.push(new G(h,A))})}return a},Pl=async(n,t,e,a)=>{const i=[],r=e.data,o=30,s=m=>m.vertical?"center":m.textAlign||"center",l=async()=>{const m=a.option;if(!m)return;const f=m.variants?.find(w=>w.id===r.fontVariantId)||await P.getDefaultVariant(m,a.overrideDefaultVariantId);if(!f||!f.asset)return;t[a.stepName]={selectedVariants:[f]};const y=f.asset.fileLink;if(y)return y},d=await(async()=>{const m=await l();if(!m)return;const f=await Ft(m);return{assetUrl:m,name:f.names.fullName.en}})(),u=(a.data.replaceableText?a.data.replaceableText.replace("{{}}",r.text):r.text)||"",A=De(u,{vertical:a.data.vertical,uppercase:a.data.uppercase}),h=async m=>{const f=m.colorOption;return f?(await P.getDefaultVariant(f))?.color:void 0},g=r.color||await h(a.data),p=a.data.regions;for(const m of p){const f=n.find(w=>w.panelId===m.panelId);if(!f)continue;const y={stepName:e.name,id:N(),align:s(a.data),curved:a.data.curved,fill:r.color||g||"#000000",fontData:d,fontSize:a.data.size||o,height:m.height,layer:m.layer,layerIndex:m.layerIndex,paths:a.data.paths,rotation:m.rotation,text:A,type:D.Textbox,vertical:a.data.vertical,verticalAlign:a.data.verticalAlign||"middle",width:m.width,x:m.left,y:m.top};if(d){const[w,F]=Kt(a.data.size||o,d,m,[De(A,{vertical:a.data.vertical,uppercase:a.data.uppercase})],{size:a.data.size,minSize:a.data.minSize,maxSize:a.data.maxSize});i.push(new G({...y,fontSize:w,text:y.curved?y.text:(F||[]).join(`
1430
+ `)},f))}else i.push(new G(y,f))}return i},xl=(n,t)=>n.conditions?n.conditions.every(e=>{const a=t[e.targetStepName];if(a&&a.selectedVariants){const i=a.selectedVariants;return e.requiredVariantSelections.some(r=>i.find(o=>o.id===r)!==void 0)}return!1}):!0,Ni=async(n,t,e,a)=>{const i=[],r={};for(const o of n){const s=t.steps.find(l=>l.stepName===o.name);if(s)switch(s.type){case E.DigitalContent:i.push(...await yl(e,o,s));break;case E.Frame:case E.Photo:i.push(...await Sl(e,r,o,s));break;case E.Illustration:i.push(...await vl(e,r,o,s));break;case E.Module:i.push(...await El(e,o,s));break;case E.Picture:i.push(...await bl(e,r,o,s));break;case E.Shape:i.push(...await Il(e,r,o,s));break;case E.Text:i.push(...await Pl(e,r,o,s));break}}for(const o of t.steps)o.type!==E.SilentIllustration&&o.type!==E.ProductOverlay||xl(o,r)&&i.push(...await Bl(e,o,a));return i};class Fl{constructor(t){this.handleCompleteRender=null;const e=new Map;t.forEach(a=>e.set(a.id,new Ml(a.id,a.name,this,{width:a.width,height:a.height},this.getWorkflowManager.bind(this)))),this.layouts=e}setCompleteRenderCallback(t){this.handleCompleteRender=t,t(Array.from(this.layouts.values()))}onCompleteRender(){this.handleCompleteRender&&this.handleCompleteRender(Array.from(this.layouts.values()))}getAll(){return this.layouts}setWorkflowManager(t){this.workflowManager=t}getWorkflowManager(){return this.workflowManager}}const Dl=()=>new Promise((n,t)=>{try{const a=yt().getContext("webgl2");n(!!a)}catch{n(!1)}}),kl=Dl();class Ml{constructor(t,e,a,i,r){this.hasSetStaticContext=!1,this.interactiveDirty=!1,this.staticCtxDirty=!1,this.lastRequestedRenderArguments=void 0,this.lastCompletedStaticRender=void 0,this.renderQueue=new Va(2),this.id=t,this.name=e,this.service=a,this.panelSize=i,this.getWorkflowManager=r}getID(){return this.id}getName(){return this.name}getPanelSize(){return this.panelSize}getStaticContext(){return this.textureCtx}setStaticContext(t){this.textureCtx=t,this.lastRequestedRenderArguments&&this.render(this.lastRequestedRenderArguments)}getStaticContextDirty(){return this.staticCtxDirty}setStaticContextDirty(t){this.staticCtxDirty=t}getInteractiveCanvasDirty(){return this.interactiveDirty}setInteractiveCanvasDirty(t){this.interactiveDirty=t}markLastCompletedStaticRender(){this.lastCompletedStaticRender=Date.now(),this.service.onCompleteRender()}getLastCompletedStaticRender(){return this.lastCompletedStaticRender}async render(t){const e=Pt(t);this.lastRequestedRenderArguments=e;const a=this.getStaticContext();if(!a){this.markLastCompletedStaticRender(),this.setStaticContextDirty(!1);return}this.renderQueue.enqueue(new Tl(this.getID(),a,await kl,()=>{this.markLastCompletedStaticRender(),this.setStaticContextDirty(!0)},e,this.getWorkflowManager))}}class Tl extends Ua{constructor(t,e,a,i,r,o){super(),this.layoutId=t,this.ctx=e,this.nonPOTSupport=a,this.onRender=i,this.layouts=r,this.getWorkflowManager=o}getDynamicTextureResolution(){return this.getIsMobile()||!this.offscreenRenderingSupported()?{width:1024,height:1024}:{width:2048,height:2048}}getIsMobile(){return window.innerWidth<=480}offscreenRenderingSupported(){return navigator.userAgent.includes("SamsungBrowser")?!1:!!window.Worker&&!!window.OffscreenCanvas}resizeFit(t,e=4096){const a=e/t.width,i=e/t.height,r=Math.min(a,i);return r>1?t:{width:t.width*r,height:t.height*r}}async execute(){const t=this.layouts.find(g=>g.layoutState.layout.id===this.layoutId);if(!t)return;const e=t.layoutState.elements||[],a=t.layoutState.layout.width,i=t.layoutState.layout.height,r=a===1||i===1?{width:1,height:1}:this.getDynamicTextureResolution(),o=r.width,s=r.height;let l,c;if(this.nonPOTSupport){const g=o/s;a/i<g?(l=o,c=i*(o/a)):(l=a*(s/i),c=s);const m=this.resizeFit({width:l,height:c});l=m.width,c=m.height}else l=r.width,c=r.height;const d=this.getWorkflowManager?.()?.getTemplatingContext(),u=We(t.layoutState.layout,e,{renderingConfiguration:{purpose:Ot.ThreeD,templatingContext:d}}),A=Kn(u),h=await Ma.Pith.from(this.ctx,A,{anonymousCrossOrigin:!0,ignoreDimensions:!this.nonPOTSupport,ignoreAnimation:!0,ignoreClear:!0,ignoreMouse:!0,enableRedraw:!1,createCanvas:yt,createImage:le,DOMParser:Ra(),fetch});h.resize(l,c),await h.render(),this.onRender()}}const Nl=(n,t)=>{const e=[];return n.forEach(a=>{const i=t.steps.find(r=>r.stepName===a.stepName);i?.type===E.Text&&a.stepAspectType==="Text"&&e.push({name:i.stepName,data:{text:a.value}})}),e},Ql=async(n,t,e,a)=>{let i={serializableWorkflow:{steps:[]},layouts:{}};i=new U(e.map(l=>new ja(l))).apply(i);const o=await Ni(n,t,e,a);return new U(o).apply(i)},Ye=C.gql`
1431
1431
  fragment GlobalPropertyStateAspectFields on GlobalPropertyStateAspect {
1432
1432
  name
1433
1433
  value
@@ -1450,7 +1450,7 @@
1450
1450
  }
1451
1451
  }
1452
1452
  `,Ol=C.gql`
1453
- ${We}
1453
+ ${Ye}
1454
1454
  mutation CreateGlobalPropertyState($bundleId: String!) {
1455
1455
  globalPropertyStateCreate(bundleId: $bundleId) {
1456
1456
  id
@@ -1460,7 +1460,7 @@
1460
1460
  }
1461
1461
  }
1462
1462
  `,Rl=C.gql`
1463
- ${We}
1463
+ ${Ye}
1464
1464
  mutation UpdateGlobalPropertyState($id: String!, $aspects: [GlobalPropertyStateAspectInput]!) {
1465
1465
  globalPropertyStateUpdate(id: $id, aspects: $aspects) {
1466
1466
  id
@@ -1470,7 +1470,7 @@
1470
1470
  }
1471
1471
  }
1472
1472
  `,$l=C.gql`
1473
- ${We}
1473
+ ${Ye}
1474
1474
  query GetGlobalPropertyState($bundleId: String!) {
1475
1475
  globalPropertyState(bundleId: $bundleId) {
1476
1476
  id
@@ -1480,7 +1480,7 @@
1480
1480
  }
1481
1481
  }
1482
1482
  `,Ul=async n=>(await S.getShadowGraphqlClient().query({query:$l,fetchPolicy:"cache-first",errorPolicy:"all",variables:{bundleId:n}})).data.globalPropertyState,Vl=n=>C.gql`
1483
- ${Ge}
1483
+ ${je}
1484
1484
  fragment ProductFields on Product {
1485
1485
  id
1486
1486
  basePrice
@@ -1534,7 +1534,7 @@
1534
1534
  ...ProductFields
1535
1535
  }
1536
1536
  }
1537
- `,Ye=(n,t=!1)=>C.gql`
1537
+ `,Je=(n,t=!1)=>C.gql`
1538
1538
  ${n?Xa(t):""}
1539
1539
  fragment ProductCollectionFields on ProductCollection {
1540
1540
  id
@@ -1542,6 +1542,7 @@
1542
1542
  description
1543
1543
  dispatchStartDate
1544
1544
  dispatchEndDate
1545
+ total
1545
1546
  productCollectionCustomers {
1546
1547
  id
1547
1548
  customer {
@@ -1582,7 +1583,7 @@
1582
1583
  }
1583
1584
  ${n?"productCollectionProducts { ...ProductCollectionProductFields }":""}
1584
1585
  }
1585
- `,Ni=C.gql`
1586
+ `,Qi=C.gql`
1586
1587
  fragment BundleBaseFields on Bundle {
1587
1588
  id
1588
1589
  dispatchDate
@@ -1604,9 +1605,9 @@
1604
1605
  workflowViewerAmendLink
1605
1606
  }
1606
1607
  `,Ll=n=>C.gql`
1607
- ${We}
1608
- ${Ye(n)}
1609
- ${Ni}
1608
+ ${Ye}
1609
+ ${Je(n)}
1610
+ ${Qi}
1610
1611
  query GetBundle($id: String!) {
1611
1612
  globalPropertyState(bundleId: $id) {
1612
1613
  id
@@ -1778,7 +1779,7 @@
1778
1779
  }
1779
1780
  }
1780
1781
  `,Hl=n=>C.gql`
1781
- ${Ye(n)}
1782
+ ${Je(n)}
1782
1783
  mutation CreateBundle(
1783
1784
  $collectionId: String
1784
1785
  $initialMetadata: [MetadataInput!]
@@ -1828,7 +1829,7 @@
1828
1829
  }
1829
1830
  }
1830
1831
  }
1831
- `,da=C.gql`
1832
+ `,ye=C.gql`
1832
1833
  mutation UpdateBundle(
1833
1834
  $id: String!
1834
1835
  $name: String
@@ -1943,7 +1944,7 @@
1943
1944
  }
1944
1945
  }
1945
1946
  `,ac=n=>C.gql`
1946
- ${Ye(n)}
1947
+ ${Je(n)}
1947
1948
  mutation BundleAssignProductCollection($id: String!, $productCollectionId: String!) {
1948
1949
  bundleAssignProductCollection(id: $id, collectionId: $productCollectionId) {
1949
1950
  id
@@ -1959,7 +1960,7 @@
1959
1960
  }
1960
1961
  }
1961
1962
  `,ic=n=>C.gql`
1962
- ${Ni}
1963
+ ${Qi}
1963
1964
  query CustomerBundlesFeed($id: String!, $limit: Int!, $offset: Int!, $template: Boolean, $templateStatus: BundleTemplateStatus, $ordered: Boolean) {
1964
1965
  customerBundlesFeed(id: $id, limit: $limit, offset: $offset, template: $template, templateStatus: $templateStatus, ordered: $ordered) {
1965
1966
  items {
@@ -2111,7 +2112,7 @@
2111
2112
  }
2112
2113
  }
2113
2114
  }
2114
- `,mc=(n,t)=>t&&typeof t=="object"&&!Array.isArray(t)?Object.keys(t).sort().reduce((e,a)=>(e[a]=t[a],e),{}):t,pc=n=>{for(const t of Object.values(n.layouts).map(e=>e.elements).flat())t.type==="illustration"&&(delete t.cachedObjectURL,t.src&&delete t.svg),t.type==="frame"&&delete t.pattern?.svg;return Qi(n,"__typename"),n},Qi=(n,t)=>{if(!(typeof n!="object"||n===null))for(const e in n)e===t?delete n[e]:Qi(n[e],t)};var he=(n=>(n.Error="Error",n.Warning="Warning",n.Info="Info",n))(he||{});const fc=1e3;class In extends Ua{constructor(t){super(),this.createdAt=new Date,this.update=t}async execute(){await this.update(),await new Promise(t=>{window.setTimeout(()=>{t()},fc)})}}const Cc=n=>n.sort((t,e)=>t.index-e.index).map(t=>({id:N(),panelId:t.name,name:t.name,title:t.title,index:t.index,createdAt:new Date,updatedAt:new Date,transparentBackground:t.transparentBackground,height:t.height,width:t.width,previewRegion:t.previewRegion,useEditableArea:t.useEditableArea,editableArea:t.editableArea})),wc=(n,t)=>{const e=n.workflowState,a=e?JSON.parse(e):void 0;return a?Object.values(a.layouts).map(i=>i.layout):Cc(t.panels)},Xt=class Xt{constructor(t,e,a,i,r,o=!1,s,l=!1,c=!1,d=!1){this.workflowStatePromiseQueue=new Va(1),this.initialized=!1,this.readOnly=!1,this.isReloadedTransaction=!1,this.singleVariantsRenderable=!1,this.stepTags={},this.setWorkflow=async A=>{this.confirmedDesign=!1,this.editedSteps={},this.informationResults=[],this.mandatorySteps={},this.pendingUpdates=[],this.selectionCost=0,this.stepSpecificServices={},this.pollers=[],this.allScenes=[],this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},this.validationErrors={steps:new Map},this.currentAdjustingStepId="",this.reloadedState?this.layouts=Object.values(this.reloadedState.layouts||{}).map(g=>g.layout):A?this.layouts=wc(this.experience.getTransaction(),A):this.layouts=[],this.commandContext.initialize(this.layouts,this.reloadedState),this.renderableContextService=new Fl(this.layouts),this.renderableContextService.setWorkflowManager(this),A.steps.forEach(g=>{this.stepTags[g.stepName]=g.tags??[]});const h=this.previewService;this.ejectFromPreviewService(),this.initializationPromise=this.initializeDefaultWorkflowState(A),this.initializationPromise.then(()=>{this.initialized=!0}),this.initializationPromise.catch(g=>{throw this.initialized=!1,new Error(g)}),this.initializationPromise.finally(()=>this.commandContext.registerStateCallback(()=>{this.updateStateWithServer(),this.renderLayouts()})),h&&await this.injectIntoPreviewService(h,!0)},this.renderLayouts=()=>{if(!this.previewService)return;const A=this.getCommandContext().getAllLayouts(),h=this.getLayoutPreviewService()?.getAll();if(h)for(const[,g]of h)g.render(A)},this.experience=t,this.client=e,this.updateTransaction=a,this.graphQlClient=i,this.reloadedState=r,this.readOnly=o,this.singleVariantsRenderable=c,this.commandContext=new Si,this.confirmCallbacks=[],this.editedCallbacks=[],this.elementsCallbacks=[],this.informationResultCallbacks=[],this.initCallbacks=[],this.mandatoryCallbacks=[],this.makingAdjustmentsCallback=[],this.metadataCallbacks=[],this.selectionCallbacks=[],this.stepSpecificStorageCallbacks={},this.storageCallbacks=[],this.validationCallbacks=[],this.recipientCallbacks=[],this.modelContainer=s,this.confirmedDesign=!1,this.editedSteps={},this.informationResults=[],this.mandatorySteps={},this.pendingUpdates=[],this.selectionCost=0,this.stepSpecificServices={},this.pollers=[],this.allScenes=[],this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},this.validationErrors={steps:new Map},this.currentAdjustingStepId="",this.isReloadedTransaction=l,d&&(this.workflowStatePromiseQueue.enabled=!1);const u=this.experience.getWorkflow();u&&this.setWorkflow(u)}getTemplatingContext(){const t=this.experience.getTransaction().recipient,e={recipient:t};return this.recipientConversionConfiguration?.requestedDataItems?.forEach(a=>{const i=a.uniqueIdentifier??a.title??"";a.type===_t.FirstName?e[i]=t?.firstName:a.type===_t.LastName?e[i]=t?.lastName:a.type===_t.Custom&&(a.customFieldIndex===1?e[i]=t?.customField1:a.customFieldIndex===2?e[i]=t?.customField2:a.customFieldIndex===3?e[i]=t?.customField3:a.customFieldIndex===4?e[i]=t?.customField4:a.customFieldIndex===5&&(e[i]=t?.customField5),a.option&&(e[i]=a.option.variants?.find(r=>r.id===e[i])?.name))}),e}async updateRecipient(t,e,a,i,r,o,s,l,c,d,u,A,h,g,p,m,f,y){const w=this.experience.getTransaction();if(w.recipient?.id)this.experience.getTransaction().recipient={id:w.recipient.id,firstName:t??w.recipient.firstName,lastName:e??w.recipient.lastName,address:a??w.recipient.address,suburb:i??w.recipient.suburb,state:r??w.recipient.state,email:o??w.recipient.email,postalCode:s??w.recipient.postalCode,country:l??w.recipient.country,mobile:c??w.recipient.mobile,company:d??w.recipient.company,apartment:u??w.recipient.apartment,customField1:A??w.recipient.customField1,customField2:h??w.recipient.customField2,customField3:g??w.recipient.customField3,customField4:p??w.recipient.customField4,customField5:m??w.recipient.customField5,conversionConfigurationId:f||w.recipient.conversionConfigurationId},this.experience.callEvent(Ne.RecipientChanged),await this.graphQlClient().mutate({mutation:uc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:w.recipient.id,firstName:t||w.recipient.firstName,lastName:e||w.recipient.lastName,address:a||w.recipient.address,suburb:i||w.recipient.suburb,state:r||w.recipient.state,email:o||w.recipient.email,postalCode:s||w.recipient.postalCode,country:l||w.recipient.country,mobile:c||w.recipient.mobile,company:d||w.recipient.company,apartment:u||w.recipient.apartment,customField1:A||w.recipient.customField1,customField2:h||w.recipient.customField2,customField3:g||w.recipient.customField3,customField4:p||w.recipient.customField4,customField5:m||w.recipient.customField5,conversionConfigurationId:f||w.recipient.conversionConfigurationId,prevalidated:y}});else{const F=await this.graphQlClient().mutate({mutation:dc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{firstName:t,lastName:e,address:a,suburb:i,state:r,email:o,postalCode:s,country:l,mobile:c,company:d,apartment:u,customField1:A,customField2:h,customField3:g,customField4:p,customField5:m,conversionConfigurationId:f}});w.recipient={id:F?.data?.recipientCreate?.id,firstName:t,lastName:e,address:a,suburb:i,state:r,email:o,postalCode:s,country:l,mobile:c,company:d,apartment:u,customField1:A,customField2:h,customField3:g,customField4:p,customField5:m,conversionConfigurationId:f},this.experience.callEvent(Ne.RecipientChanged),await this.graphQlClient().mutate({mutation:Ac,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.experience.getTransaction().id,recipientId:F.data?.recipientCreate?.id},context:{transactionOwnerId:this.experience.getTransaction().transactionOwnerId}})}await this.fetchConversionConfiguration(),this.recipientCallbacks.forEach(F=>F(this.experience.getTransaction().recipient))}async fetchConversionConfiguration(){const t=this.experience.getTransaction().recipient;if(t?.conversionConfigurationId&&!this.recipientConversionConfiguration){const e=Xt.configurationPromiseMap.get(t.conversionConfigurationId);if(e)this.recipientConversionConfiguration=await e;else{const i=(async()=>(await this.graphQlClient().query({query:Go,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t.conversionConfigurationId}})).data.conversionConfiguration)();Xt.configurationPromiseMap.set(t.conversionConfigurationId,i),this.recipientConversionConfiguration=await i}}}async initializeDefaultWorkflowState(t){const e=()=>{const d=t.finalizeStepConfig;if(!d)return;const u=d.lookAtAnimation,A=d.modelAnimation;u&&this.previewService?.executeCameraAnimation(u),A&&this.modelContainer?.executeAnimation(A)};this.reloadedState&&this.reloadedState.serializableWorkflow.steps.forEach(d=>{this.storage[d.stepName]=d.storage||{}});const a=this.getInitialOptionIds(this.reloadedState?.serializableWorkflow?.steps.reduce((d,u)=>(u.selectedVariants?.length&&(d[u.stepName]={selectedVariants:u.selectedVariants.map(A=>({id:A.id}))}),d),{})),i=P.getOptions(Array.from(a)),r=this.fetchConversionConfiguration();await Promise.all([i,r]),this.allScenes=fn(t);const s=dt(this.allScenes,this.stepSelections).map(d=>d.silentSteps).flat(),{stepElements:l,commands:c}=await this.stepElementsForIntroducedSilentSteps(s,!!this.reloadedState);this.commandContext.apply(new U(c),!0),this.stepElements={...this.stepElements,...l},await this.ensureStepsAreLoaded(),this.isReloadedTransaction||this.updateStateWithServer(),this.renderLayouts(),this.reloadedState&&e()}getWorkflowExperience(){return this.experience}getClient(){return this.client}setWorkflowStateSyncEnabled(t){this.workflowStatePromiseQueue.enabled=t}getInitializationPromise(){return this.initializationPromise}isInitialized(){return this.initialized}getInitialOptionIds(t){const e=new Set,a=this.experience.getWorkflow();if(!a)return e;const i=fn(a),r={...t};let o=-1;for(;;){const c=dt(i,r).flatMap(d=>d.renderableSteps);if(c.length===o)break;o=c.length;for(const d of c){if(r[d.stepName])continue;const u=d.option?.defaultVariant?.id;u&&(r[d.stepName]={selectedVariants:[{id:u}]})}}return dt(i,r).flatMap(l=>l.renderableSteps).forEach(l=>{l.option?.id&&!l.option?.variants&&e.add(l.option.id)}),e}addConfirmCallback(t){t(this.confirmedDesign),this.confirmCallbacks.push(t)}addEditedCallback(t){t(this.editedSteps),this.editedCallbacks.push(t)}addElementsCallback(t){t(this.stepElements),this.elementsCallbacks.push(t)}addInformationResultCallback(t){t(this.informationResults),this.informationResultCallbacks.push(t)}addInitCallback(t){t(this.stepInitialised),this.initCallbacks.push(t)}addMandatoryCallback(t){t(this.mandatorySteps),this.mandatoryCallbacks.push(t)}addMetadataCallback(t){t(this.stepMetadata),this.metadataCallbacks.push(t)}async addSelectionCallback(t){t({selectionCost:this.selectionCost,selections:this.stepSelections,traversableScenes:await this.traversableScenes()}),this.selectionCallbacks.push(t)}addStepSpecificStorageCallback(t,e){Object.keys(this.storage).includes(e)||(this.storage[e]={}),t(this.storage[e]),Object.keys(this.stepSpecificStorageCallbacks).includes(e)||(this.stepSpecificStorageCallbacks[e]=[]),this.stepSpecificStorageCallbacks[e].push(t)}addStorageCallback(t){t(this.storage),this.storageCallbacks.push(t)}addMakingAdjustmentsCallback(t){t(this.currentAdjustingStepId),this.makingAdjustmentsCallback.push(t)}addPoller(t){this.pollers.push(t)}addValidationCallback(t){this.validationCallbacks.push(t),t(this.validationErrors)}addRecipientCallback(t){this.recipientCallbacks.push(t),t(this.experience.getTransaction().recipient)}removeRecipientCallback(t){this.recipientCallbacks=this.recipientCallbacks.filter(e=>e!==t)}getLayouts(){return this.layouts}getAllLayoutData(){return this.commandContext.getAllLayouts().map(t=>t.layoutState)}getLayoutPreviewService(){return this.renderableContextService}getInformationResults(){return this.informationResults}getPreviewService(){return this.previewService}getCommandContext(){return this.commandContext}getRegionElements(t){return this.stepElements[t]||[]}getStepSpecificServices(t){return this.stepSpecificServices[t]}getTransactionCustomer(){return this.ownerCustomer}setTransactionCustomer(t){this.ownerCustomer=t}setTransactionCustomerDetails(t){this.ownerCustomer={...this.ownerCustomer,emailAddress:t.email}}getModelContainer(){return this.modelContainer}setModelContainer(t){(!t||this.previewService&&this.previewService.getAllModels().includes(t))&&(this.modelContainer=t,t&&t.metadata&&t.metadata instanceof Map&&this.modelContainer.metadata.set("workflowManager",this))}getCommandDispatcher(){return t=>this.commandContext.apply(t,!this.initialized)}getWorkflowSelections(){const t={};return this.experience.getWorkflow()?.steps.forEach(e=>{const a=this.stepSelections[e.stepName];a&&a.selectedVariants&&a.selectedVariants.length>0&&(t[e.stepName]={selections:a.selectedVariants})}),t}getStepSelections(){return this.stepSelections}markStepsAsInitialised(t){const e={...this.stepInitialised};t.forEach(a=>{e[a]=!0}),this.stepInitialised=e,this.onInitChange()}getUpdatesPending(){return this.pendingUpdates.length>0}markUpdateCompleted(t){this.pendingUpdates=this.pendingUpdates.filter(e=>e!==t)}markUpdatePending(){const t=N();return this.pendingUpdates=[...this.pendingUpdates,t],t}setEditedStatus(t,e){this.editedSteps={...this.editedSteps,[t]:e},this.onEditedChange()}setInformationResults(t){this.informationResults=[...t],this.onInformationResultChange()}setCurrentAdjustingStepId(t){this.currentAdjustingStepId=t,this.onMakingAdjustmentsChange()}setMandatoryFulfilled(t,e){this.mandatorySteps[t]!==e&&(this.mandatorySteps={...this.mandatorySteps,[t]:e},this.onMandatoryChange())}getMandatoryUnfulfilledSteps(){return dt(this.allScenes,this.stepSelections).flatMap(r=>r.renderableSteps).filter(r=>r.mandatory).filter(r=>!this.mandatorySteps[r.stepName]).map(r=>r.stepName)}setStepError(t,e,a){let i=!1;if(!this.validationErrors.steps.has(t)&&a)i=!0,this.validationErrors.steps.set(t,new Map([[e,a]]));else if(this.validationErrors.steps.has(t)){const r=this.validationErrors.steps.get(t);a&&a!==r.get(e)?(i=!0,r.set(e,a)):a||(i=!0,r.delete(e),r.size===0&&this.validationErrors.steps.delete(t))}i&&this.onValidationChange()}getStepErrors(t){return this.validationErrors.steps.get(t)}getValidationErrors(){return this.validationErrors}toggleDesignConfirmed(){this.confirmedDesign=!this.confirmedDesign,this.onConfirmChange()}toggleMakingAdjustmentsCallback(t){t(this.mandatorySteps),this.mandatoryCallbacks.push(t)}async injectIntoPreviewService(t,e){if(this.modelContainer)throw new Error("You must eject from the preview service before injecting again.");this.previewService=t;const a=this.experience.getProduct();if(!a?.modelUrl||!this.previewService)return;const i=t.loadModel({model:a.modelUrl,contextService:this.getLayoutPreviewService()},{refocusCamera:e});this.setModelContainer(i),dt(this.allScenes,this.stepSelections).filter(s=>s).map(s=>s.renderableSteps).flat().filter(s=>s.type===E.Model||s.type===E.Material).forEach(s=>{if(!s.option?.id){console.error(`Failed to read option id from step: ${s.stepName}`);return}const l=this.stepSelections[s.stepName]?.selectedVariants||[];if(l.length===0)return;const c=l[0];if(s.type===E.Model){if(!this.modelContainer)throw new O("We should always have a model container when injecting a preview!");const d=c.asset?.fileLink;if(!d){console.error(`Failed to read model url from variant: ${c.id} for step: ${s.stepName}`);return}const u=s.data;this.modelContainer.applyModelVariant(s.stepName,{model:d,contextService:this.getLayoutPreviewService()},u.replaceProductModel||!1)}else{const d=c.material;if(!d){console.error(`Failed to read material from variant: ${c.id} for step: ${s.stepName}`);return}s.data.targetMaterials.forEach(A=>{if(!this.modelContainer)throw new O("We should always have a model container when injecting a preview!");this.modelContainer.applyMaterialVariant(A,s.option.id,d)})}}),await i.getInitializationPromise(),this.renderLayouts()}ejectFromPreviewService(){if(this.modelContainer){if(!this.modelContainer.dispose)throw new Error("This feature is not supported in the current preview service.");this.modelContainer.dispose(),this.modelContainer=void 0}this.previewService=void 0}updateStorage(t,e){const a={...this.storage,[t]:{...this.storage[t],...e}};if(!te(a,this.storage)){this.storage=a;const i=new Sn(this.constructSerializableWorkflow());this.commandContext.apply(i,!0),this.onStepSpecificStorageChange(t),this.onStorageChange()}}constructSerializableWorkflow(){const t=[];return this.allScenes.forEach(e=>{e.renderableSteps.forEach(a=>{const i={stepName:a.stepName};i.storage=this.storage[a.stepName],i.selectedVariants=this.stepSelections[a.stepName]?.selectedVariants?.map(r=>({id:r.id,priceModifier:r.priceModifier})),t.push(i)})}),{steps:t}}updateStateWithServer(){if(this.readOnly)return;const t=this.serialize();this.workflowStatePromiseQueue.enqueue(new In(async()=>{await new Promise(e=>{setTimeout(()=>{e()},1)}),await this.updateTransaction({variables:{id:this.experience.getTransaction().id,workflowState:t}})}))}async updateStateWithServerImmediate(){if(this.readOnly)return;const t=this.serialize();return new In(async()=>{await this.updateTransaction({variables:{id:this.experience.getTransaction().id,workflowState:t}})}).execute()}serialize(){const t=this.getCommandContext().getState();if(!t)throw new O("Attempted to serialize state before it was initialized.");const e=Pt(t.transaction),a=pc(e);return JSON.stringify(a,mc,void 0)}async getStateHash(){const t=this.getCommandContext().getState(),a=Object.values(t?.transaction.layouts||{}).map(o=>o.modificationID??"").sort().join(""),r=new TextEncoder().encode(a);if(typeof window<"u"&&window.crypto&&window.crypto.subtle&&window.crypto.subtle.digest){const o=await window.crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(o)).map(c=>c.toString(16).padStart(2,"0")).join("")}try{return(await import("crypto")).createHash("sha256").update(a,"utf8").digest("hex")}catch{throw new Error("Unable to compute SHA-256 hash: no suitable crypto implementation available.")}}async outstandingRequestsPromise(){return this.workflowStatePromiseQueue.finalize()}updateMetadata(t,e){this.stepMetadata={...this.stepMetadata,[t]:{...this.stepMetadata[t],...e}},this.onMetadataChange()}removeElements(t){const e=(a,i)=>Object.keys(a).reduce((r,o)=>{const s=[...a[o]||[]];return i.forEach(l=>{const c=s.findIndex(d=>d.id===l.id);c>-1&&s.splice(c,1)}),r[o]=s,r},{});this.stepElements=e(this.stepElements,t)}getInvalidCanvasRegions(){return this.experience.getWorkflow()?.steps.reduce((t,e)=>(Bt(e,this.stepSelections)||this.stepElements[e.stepName]&&this.stepElements[e.stepName].forEach(a=>t.push(a)),t),[])||[]}getInvalidModelVariants(){return this.experience.getWorkflow()?.steps.reduce((t,e)=>(e.type===E.Model&&!Bt(e,this.stepSelections)&&t.push(e.stepName),t),[])||[]}async stepElementsForIntroducedSilentSteps(t,e){const a=this.experience.getProduct();if(!a)return Promise.resolve({stepElements:{},commands:[]});const i=async(c,d,u)=>{if(c.type===E.SilentIllustration){const A=await new vn(c,d).trigger();return{step:c,results:A}}else if(c.type===E.ProductOverlay){const A=await new vn(c,d,u).trigger();return{step:c,results:A}}return Promise.reject("Unknown silent step. This is a bug")},r=t.filter(c=>!this.stepInitialised[c.stepName]),o={stepElements:{},commands:[]},s=[];for(const c of r)this.markStepsAsInitialised([c.stepName]),e||s.push(i(c,this.layouts,a));const l=await Promise.all(s);for(const c of l)o.stepElements[c.step.stepName]=c.results.map(d=>d.regionElement),o.commands=[...o.commands,...c.results.map(d=>d.command)];return o}getStepStorage(t){return this.storage[t]}getMetadata(t){return this.stepMetadata[t]}getWorkflowMetadata(){return this.stepMetadata}getStepTags(t){return this.stepTags[t]||[]}getSerializedStep(t,e){return e.find(a=>a.stepName===t)}async updateTransactionShareActions(){const t=await this.client.getShareActionsForTransaction(this.experience.getTransaction().id);this.experience.getTransaction().transactionShareActions=t}async updateTransactionStakeholders(){const t=await S.getShadowGraphqlClient().query({query:Ko,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.experience.getTransaction().id}});!t?.data?.transactions||t.data.transactions.length!==1?(this.experience.getTransaction().currentStakeholder=void 0,this.experience.getTransaction().stakeholders=void 0):(this.experience.getTransaction().stakeholders=t.data.transactions[0].stakeholders,this.experience.getTransaction().currentStakeholder=t.data.transactions[0].currentStakeholder)}async approveTransaction(t){await S.getShadowGraphqlClient().mutate({mutation:lc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.experience.getTransaction().id,note:t}})}async rejectTransaction(t){await S.getShadowGraphqlClient().mutate({mutation:cc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.experience.getTransaction().id,note:t}})}async reset(){this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},await this.ensureStepsAreLoaded()}async setSelectionsAndElements(t,e,a,i){const r=this.experience.getWorkflow();if(!r)throw new Error("Attempted to set selections when no workflow is set!");const o=this.stepSelections;this.stepSelections={...this.stepSelections,[t]:{selectedVariants:e}},this.selectionCost=Object.values(this.stepSelections).reduce((v,I)=>v+I.selectedVariants.map(M=>M.priceModifier||0).reduce((M,R)=>M+R,0),0),r.steps.forEach(v=>{Bt(v,this.stepSelections)||(this.stepInitialised[v.stepName]=!1,delete this.stepMetadata[v.stepName],delete this.stepSelections[v.stepName],delete this.storage[v.stepName])});const s=this.allScenes,l=dt(s,o),c=dt(s,this.stepSelections),d=l.map(v=>v.silentSteps).flat(),A=c.map(v=>v.silentSteps).flat().filter(v=>!d.some(I=>I.stepName===v.stepName));d.forEach(v=>{Bt(v,this.stepSelections)||(this.stepInitialised[v.stepName]=!1)});const h=this.getInvalidCanvasRegions(),{stepElements:g,commands:p}=await this.stepElementsForIntroducedSilentSteps(A,!1);this.stepElements={...this.stepElements,...g,[t]:a},this.removeElements(h);const m=r.steps.find(v=>v.stepName===t);m?.type===E.Frame&&this.getWorkflowExperience().getStepById(m.stepName)?.frameService?.setTargetElements(a.map(I=>I.id));const f=h.map(v=>new Dt(v.id)),y=new Sn(this.constructSerializableWorkflow()),w=[...p,...f,y];w.length>0&&this.commandContext.apply(new U(w),!0),await this.ensureStepsAreLoaded(),this.onElementsChange();const F=this.getInvalidModelVariants(),b=this.modelContainer;if(b){const v=F.map(I=>b.applyModelVariant(I,{contextService:this.getLayoutPreviewService()},!1));await Promise.all(v)}await this.onSelectionChange(),m?.type!==E.Frame&&m?.type!==E.Text&&this.setMandatoryFulfilled(t,!0),i&&await i()}async ensureStepsAreLoaded(){const e=dt(this.allScenes,this.stepSelections).map(l=>l.renderableSteps),a=[],i=e.flat();for(const l of i)if(!this.stepInitialised[l.stepName])switch(this.stepInitialised[l.stepName]=!0,l.type){case E.DigitalContent:a.push(Ha.init(l,this,this.reloadedState));break;case E.Frame:a.push(pt.init(l,this,this.reloadedState));break;case E.Illustration:a.push(Jt.init(l,this,this.reloadedState));break;case E.Material:a.push(Wa.init(l,this,this.reloadedState));break;case E.Model:a.push(Ya.init(l,this,this.reloadedState));break;case E.Module:this.stepSpecificServices[l.stepName]={module:await Mi(l.data.module)},a.push(Ja.init(l,this,this.reloadedState));break;case E.Picture:a.push(Ka.init(l,this,this.reloadedState));break;case E.Question:a.push(_a.init(l,this,this.reloadedState));break;case E.Shape:a.push(Tt.init(l,this,this.reloadedState));break;case E.Text:a.push(j.init(l,this,this.reloadedState));break}const r=(await Promise.allSettled(a)).map(l=>{if(l.status==="rejected")throw new Error(`Step initialization failed: ${l.reason}`);return l.value}),o=r.flatMap(l=>l?.command?[l.command]:[]),s=r.flatMap(l=>l?.followup?[l.followup]:[]);o&&o.length>0&&this.commandContext.apply(new U(o),!0);for(const l of s)await l();s.length>0&&await this.ensureStepsAreLoaded(),this.onInitChange()}onConfirmChange(){this.confirmCallbacks.forEach(t=>t(this.confirmedDesign))}onEditedChange(){this.editedCallbacks.forEach(t=>t(this.editedSteps))}onElementsChange(){this.elementsCallbacks.forEach(t=>t(this.stepElements))}onInformationResultChange(){this.informationResultCallbacks.forEach(t=>t(this.informationResults))}onInitChange(){this.initCallbacks.forEach(t=>t(this.stepInitialised))}onMakingAdjustmentsChange(){this.makingAdjustmentsCallback.forEach(t=>{t(this.currentAdjustingStepId)})}onMandatoryChange(){this.mandatoryCallbacks.forEach(t=>t(this.mandatorySteps))}onMetadataChange(){this.metadataCallbacks.forEach(t=>{t(this.stepMetadata)})}async onSelectionChange(){const t=await this.traversableScenes();for(const e of this.selectionCallbacks)e({selectionCost:this.selectionCost,selections:this.stepSelections,traversableScenes:t})}onStepSpecificStorageChange(t){Object.keys(this.stepSpecificStorageCallbacks).includes(t)||(this.stepSpecificStorageCallbacks[t]=[]),this.stepSpecificStorageCallbacks[t].forEach(e=>e(this.storage[t]))}onStorageChange(){this.storageCallbacks.forEach(t=>t(this.storage))}onValidationChange(){this.validationCallbacks.forEach(t=>t(this.validationErrors))}traversableScenes(){return us(this.allScenes,this.stepSelections,this.singleVariantsRenderable)}};Xt.configurationPromiseMap=new Map;let Pa=Xt;class nt{constructor(t){this.variantData=t}getType(){return this.variantData.asset?.type}getId(){return this.variantData.id}getName(){return this.variantData.name}getPriceFormatted(t,e){return this.variantData.priceModifier.toLocaleString(t||"en-US",{style:"currency",currency:"USD",...e})}getPrice(){return this.variantData.priceModifier}getAsset(){return this.variantData.asset?.versions?.find(t=>t.name==="cdn")?.link}getAssetResource(){return this.variantData.asset}getThumbnail(){const t=this.variantData.thumbnail?.versions?.find(a=>a.name==="thumbnail")?.link,e=this.variantData.thumbnail?.fileLink;return t||e}getColor(){return this.variantData.color}isDefault(){return!!this.variantData.default}getResource(){return this.variantData}isEnabled(){return this.variantData.enabled}}const Zt=class Zt{constructor(t,e,a){this.manager=t,this.step=e,this.tags=a}setUpdateState(t){Zt.updateState.set(`${this.step.stepName}-${this.manager.getWorkflowExperience().getTransaction().id}`,t)}getUpdateState(){return!!Zt.updateState.get(`${this.step.stepName}-${this.manager.getWorkflowExperience().getTransaction().id}`)}getCurrentVariant(){const a=this.manager.getWorkflowSelections()[this.step.stepName]?.selections[0];if(a)return new nt(a)}async getAvailableVariants(){return(await this.getAllVariants()).filter(e=>e.isEnabled())||[]}async getAllVariants(){if(!this.step.option?.id)return[];if(this.step.option.variants)return(this.step.option.variants||[]).map(e=>new nt(e))||[];const t=await P.getOption(this.step.option?.id);if(!t)throw new Error("Option not found, cannot fetch variants.");return(t.variants||[]).map(e=>new nt(e))||[]}getId(){return this.step.stepName}getName(){return this.step.stepTitle}getHelpText(){return this.step.helpText}getType(){return this.step.type}getRaw(){return this.step}getTags(){return this.tags}hasTag(t){return this.tags.includes(t)||!1}getMandatory(){return this.step.mandatory||!1}getOverrideGlobalPropertyConfiguration(t){return(this.manager.getStepStorage(this.step.stepName)?.overrideGlobalConfigurations??{})[t.toString()]??!1}setOverrideGlobalPropertyConfiguration(t,e){const a=this.manager.getStepStorage(this.step.stepName)?.overrideGlobalConfigurations??{};this.manager.updateStorage(this.step.stepName,{overrideGlobalConfigurations:{...a,[t.toString()]:e}})}getGlobalPropertyAspects(t){return this.step.globalPropertyAspectConfigurations?.filter(e=>e.globalPropertyConfigurationId===t&&e.aspectName).map(e=>e.aspectName)??[]}executeAnimations(t){const e=this.manager.getPreviewService(),a=this.manager.getModelContainer(),i=this.step.data.modelAnimation,r=this.step.data.lookAtAnimation;e?r&&e.executeCameraAnimation(r):console.warn("No preview service available, cannot execute camera animations."),a?i&&a.executeAnimation(i,t):console.warn("No model container available, cannot execute model animations.")}};Zt.updateState=new Map;let Z=Zt;class Oi extends Z{constructor(t,e,a){super(t,e,a)}async selectVariant(t){if(!this.getUpdateState()&&this.getCurrentVariant()!==t)return Jt.selectVariant(this.step,t.getResource(),this.manager.getRegionElements(this.step.stepName)||[],e=>this.setUpdateState(e),this.manager)}getColors(){const t=this.manager.getRegionElements(this.step.stepName)||[];if(t.length===0)return;const a=V(t[0].id,this.manager.getAllLayoutData()).colors,r=this.getCurrentVariant()?.getAssetResource()?.assetConfiguration,o=r?.defaultColorVariants||[];if(o.length!==0){const s={};return o.forEach(l=>{const c=r.channelNumbers.find(d=>d.number===l.channelNumber);if(c){const d=c.id.replace(/\W/g,"");s[l.channelNumber]={browserValue:a[d]?.browserValue||""}}}),s}try{return a}catch(s){console.error(s)}}setColor(t,e,a){const i=new Map,o=this.getCurrentVariant()?.getAssetResource()?.assetConfiguration;return(o?.defaultColorVariants||[]).length!==0?o.channelNumbers.forEach(l=>{if(l.number.toString()===t){const c=l.id.replace(/\W/g,"");a?i.set(c,{browserValue:e,pmsValue:a}):i.set(c,e)}}):a?i.set(t,{browserValue:e,pmsValue:a}):i.set(t,e),Jt.changeColors(this.step,this.manager.getRegionElements(this.step.stepName),this.manager,i)}async getColorOption(){return await P.ensureFullOption(this.step.data.colorOption)}getAvailableColors(){return this.step.data.colorPickerEnabled?Jt.availableColors(this.step,this.manager):Promise.resolve([])}isColorPickerEnabled(){return this.step.data.colorPickerEnabled??!1}isPMSPickerEnabled(){return this.step.data.pmsPickerEnabled??!1}isVariantSearchEnabled(){return this.step.data.enableVariantSearch??!1}}class Ri extends Z{constructor(t,e,a){super(t,e,a)}selectVariant(t){return Wa.selectVariant(this.step,t.getResource(),this.manager,e=>this.setUpdateState(e))}}class $i extends Z{constructor(t,e,a){super(t,e,a)}selectVariant(t){return Ya.selectVariant(this.step,t.getResource(),this.manager,e=>this.setUpdateState(e))}}class Ui extends Z{constructor(t,e,a){super(t,e,a)}selectVariant(t){return Ka.selectVariant(this.step,t.getResource(),this.manager,e=>this.setUpdateState(e))}isVariantSearchEnabled(){return this.step.data.enableVariantSearch??!1}}class Vi extends Z{constructor(t,e,a){super(t,e,a)}async selectVariant(t){if(!t.getId())throw new Error("Unable to select variant with a null ID");await _a.selectVariant(this.step,t.getId(),this.manager)}getDisplayType(){return this.step.data.displayType||this.step.option?.displayType}}class Li extends Z{constructor(t,e,a){super(t,e,a)}selectVariant(t){const e=t.getResource();return Tt.selectVariant(this.step,{fill:e.color,stroke:e.color,variant:e},this.manager.getRegionElements(this.step.stepName)||[],this.manager)}setColor(t){return Tt.selectVariant(this.step,t,this.manager.getRegionElements(this.step.stepName)||[],this.manager)}getColors(){return Tt.availableColours(this.step)}setCustomColor(t){return this.getCurrentVariant()?.getColor()!=="#custom"&&console.warn(`setting custom color for step ${this.step.stepName} but color is ${this.getCurrentVariant()?.getColor()}`),Tt.setCustomColor(t,this.step,this.manager)}getCustomColor(){this.getCurrentVariant()?.getColor()!=="#custom"&&console.warn(`setting custom color for step ${this.step.stepName} but color is ${this.getCurrentVariant()?.getColor()}`);const t=this.manager.getStepStorage(this.step.stepName)?.colour;if(!t)throw new Error(`Color not available on step ${this.step.stepName}. Set a default on the workflow to fix this.`);return t}}class qi extends Z{constructor(t,e,a){super(t,e,a)}async selectVariant(t){await j.selectVariant(this.step,t.getResource(),this.manager,e=>{if(e)this.manager.setInformationResults([...this.manager.getInformationResults(),{message:e,messageType:he.Error,stepID:this.step.stepName}]);else{const a=this.manager.getInformationResults().filter(i=>i.stepID!==this.step.stepName);this.manager.setInformationResults(a)}},()=>{})}async getAvailableFillColors(){return this.step.data.colorPickerEnabled?j.availableFillColors(this.step):[]}async setFillColor(t){const e=this.manager.getRegionElements(this.step.stepName);await j.changeFillColor(this.step,t,e,this.manager)}getFillColor(){return this.manager.getStepStorage(this.step.stepName)?.color||"#000000"}getAvailableFillImages(){return j.availableFillImages(this.step)}async setFillImage(t){const e=this.manager.getRegionElements(this.step.stepName);await j.changeFillImage(this.step,t,e,this.manager)}getFillImage(){return this.manager.getStepStorage(this.step.stepName)?.fillImage}getAlignment(){return j.findLayoutElements(this.manager,this.step)?.[0].align}setAlignment(t){const e=this.manager.getRegionElements(this.step.stepName);j.changeAlignment(this.step,t,e,this.manager)}setFullTextCustomization(t){const e=this.manager.getStepStorage(this.step.stepName)?.inputText||"",a=this.step.data.replaceableText!==void 0?this.step.data.replaceableText.replace("{{}}",e):e,i=t?a:this.step.data.defaultText;return this.manager.updateStorage(this.step.stepName,{customiseAllText:t,text:i,defaultCleared:!1}),this.setText(i)}setText(t){const e={input:t,helperData:{}},a=j.findLayoutElements(this.manager,this.step),i=j.filterUnsupportedCharacters(t,a[0]?.fontData),r=Nt(i,this.manager).length,o=!!this.step.data&&!!this.step.data.maxLength&&r>this.step.data.maxLength;o||(e.input=i);const s=a.length<=0,l=s?{inputText:i,text:i}:{inputText:i};this.manager.updateStorage(this.step.stepName,l);const c=this.manager.getStepStorage(this.step.stepName),d=j.getProcessedInput(i,this.step.data,c?.customiseAllText??!1);if(s)o||this.manager.updateMetadata(this.step.stepName,{text:d});else{const{command:u,errorData:A,helperData:h}=j.updateInputText(i,a,this.step,this.manager);u&&this.manager.getCommandDispatcher()(u),e.helperData=h,e.errorData=A,!o&&!A&&this.manager.updateMetadata(this.step.stepName,{text:d})}return e}getText(){const t=this.step.data.defaultText,e=this.manager.getStepStorage(this.step.stepName);return t&&e?.defaultCleared!==void 0&&!e?.defaultCleared?t:this.manager.getStepStorage(this.step.stepName)?.text||""}isReplaceable(){return this.step.data.userCanReplaceText}newLinesSupported(){return this.step.data.allowNewlines||!1}clearDefaultTextIfNecessary(){if(!this.manager.getStepStorage(this.step.stepName)?.defaultCleared&&this.step.data.deleteDefaultOnFocus){const e=this.setText("");this.manager.updateStorage(this.step.stepName,{defaultCleared:!0,inputText:""});const a=j.findLayoutElements(this.manager,this.step);return j.updateInputText("",a,this.step,this.manager),e}}hasColorPicker(){return this.step.data.colorPickerEnabled}getRegions(){return this.step.data.regions}getCharacterLimit(){return this.step.data.maxLength}getCharactersRemaining(){const t=this.step.data.maxLength;if(t===void 0)return;const e=Nt(this.getText(),this.manager);return t-e.length}setCustomColor(t){throw new Error("Custom color support is not yet available on text. Check back soon.")}getCustomColor(){throw new Error("Custom color support is not yet available on text. Check back soon.")}async getAvailableStrokeColors(){return this.step.data.strokeEnabled?j.availableStrokeColors(this.step):[]}getStrokeColor(){return this.manager.getStepStorage(this.step.stepName)?.strokeColor?.browserValue||"#000000"}async setStrokeColor(t){const e=this.manager.getRegionElements(this.step.stepName);await j.changeStrokeColor(this.step,t,e,this.manager)}}class zi extends Z{constructor(t,e,a){super(t,e,a)}async selectVariant(){}getContent(){return this.step.data.content}}class Gi extends Z{constructor(t,e,a){super(t,e,a)}async selectVariant(){}getPreviewURL(){return this.manager.getStepStorage(this.step.stepName)?.videoUrl||""}async selectVideo(t){return Ha.regenerateQRCode(this.manager.getRegionElements(this.step.stepName),t.key,this.manager,this.step)}}class ji extends Z{constructor(t,e,a){super(t,e,a)}async selectVariant(){console.info("Text Modules don't support variants.")}getCharactersRemaining(){const t=this.step.data.maxLength;if(t===void 0)return;const e=Nt(this.getText(),this.manager);return t-e.length}getCharacterLimit(){return this.step.data.maxLength}getText(){return this.manager.getStepStorage(this.step.stepName)?.text||""}setText(t){Ja.changeText(this.step,t,this.manager,e=>{if(e){const a=[...this.manager.getInformationResults(),{message:e,messageType:he.Error,stepID:this.step.stepName}];this.manager.setInformationResults(a)}else{const a=this.manager.getInformationResults().filter(i=>i.stepID!==this.step.stepName);this.manager.setInformationResults(a)}})}}class ye{static get(t,e){switch(e.type){case E.DigitalContent:return new Gi(t,e,t.getStepTags(e.stepName));case E.Information:return new zi(t,e,t.getStepTags(e.stepName));case E.Question:return new Vi(t,e,t.getStepTags(e.stepName));case E.Text:return new qi(t,e,t.getStepTags(e.stepName));case E.Illustration:return new Oi(t,e,t.getStepTags(e.stepName));case E.Picture:return new Ui(t,e,t.getStepTags(e.stepName));case E.Shape:return new Li(t,e,t.getStepTags(e.stepName));case E.Material:return new Ri(t,e,t.getStepTags(e.stepName));case E.Model:return new $i(t,e,t.getStepTags(e.stepName));case E.Frame:return new Ar(t,e,t.getStepTags(e.stepName));case E.Module:return new ji(t,e,t.getStepTags(e.stepName));default:throw new O(`Step type ${e.type} not yet supported in Core SDK`)}}}const yc=C.gql`
2115
+ `,mc=(n,t)=>t&&typeof t=="object"&&!Array.isArray(t)?Object.keys(t).sort().reduce((e,a)=>(e[a]=t[a],e),{}):t,pc=n=>{for(const t of Object.values(n.layouts).map(e=>e.elements).flat())t.type==="illustration"&&(delete t.cachedObjectURL,t.src&&delete t.svg),t.type==="frame"&&delete t.pattern?.svg;return Oi(n,"__typename"),n},Oi=(n,t)=>{if(!(typeof n!="object"||n===null))for(const e in n)e===t?delete n[e]:Oi(n[e],t)};var he=(n=>(n.Error="Error",n.Warning="Warning",n.Info="Info",n))(he||{});const fc=1e3;class In extends Ua{constructor(t){super(),this.createdAt=new Date,this.update=t}async execute(){await this.update(),await new Promise(t=>{window.setTimeout(()=>{t()},fc)})}}const Cc=n=>n.sort((t,e)=>t.index-e.index).map(t=>({id:N(),panelId:t.name,name:t.name,title:t.title,index:t.index,createdAt:new Date,updatedAt:new Date,transparentBackground:t.transparentBackground,height:t.height,width:t.width,previewRegion:t.previewRegion,useEditableArea:t.useEditableArea,editableArea:t.editableArea})),wc=(n,t)=>{const e=n.workflowState,a=e?JSON.parse(e):void 0;return a?Object.values(a.layouts).map(i=>i.layout):Cc(t.panels)},Xt=class Xt{constructor(t,e,a,i,r,o=!1,s,l=!1,c=!1,d=!1){this.workflowStatePromiseQueue=new Va(1),this.initialized=!1,this.readOnly=!1,this.isReloadedTransaction=!1,this.singleVariantsRenderable=!1,this.stepTags={},this.setWorkflow=async A=>{this.confirmedDesign=!1,this.editedSteps={},this.informationResults=[],this.mandatorySteps={},this.pendingUpdates=[],this.selectionCost=0,this.stepSpecificServices={},this.pollers=[],this.allScenes=[],this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},this.validationErrors={steps:new Map},this.currentAdjustingStepId="",this.reloadedState?this.layouts=Object.values(this.reloadedState.layouts||{}).map(g=>g.layout):A?this.layouts=wc(this.experience.getTransaction(),A):this.layouts=[],this.commandContext.initialize(this.layouts,this.reloadedState),this.renderableContextService=new Fl(this.layouts),this.renderableContextService.setWorkflowManager(this),A.steps.forEach(g=>{this.stepTags[g.stepName]=g.tags??[]});const h=this.previewService;this.ejectFromPreviewService(),this.initializationPromise=this.initializeDefaultWorkflowState(A),this.initializationPromise.then(()=>{this.initialized=!0}),this.initializationPromise.catch(g=>{throw this.initialized=!1,new Error(g)}),this.initializationPromise.finally(()=>this.commandContext.registerStateCallback(()=>{this.updateStateWithServer(),this.renderLayouts()})),h&&await this.injectIntoPreviewService(h,!0)},this.renderLayouts=()=>{if(!this.previewService)return;const A=this.getCommandContext().getAllLayouts(),h=this.getLayoutPreviewService()?.getAll();if(h)for(const[,g]of h)g.render(A)},this.experience=t,this.client=e,this.updateTransaction=a,this.graphQlClient=i,this.reloadedState=r,this.readOnly=o,this.singleVariantsRenderable=c,this.commandContext=new vi,this.confirmCallbacks=[],this.editedCallbacks=[],this.elementsCallbacks=[],this.informationResultCallbacks=[],this.initCallbacks=[],this.mandatoryCallbacks=[],this.makingAdjustmentsCallback=[],this.metadataCallbacks=[],this.selectionCallbacks=[],this.stepSpecificStorageCallbacks={},this.storageCallbacks=[],this.validationCallbacks=[],this.recipientCallbacks=[],this.modelContainer=s,this.confirmedDesign=!1,this.editedSteps={},this.informationResults=[],this.mandatorySteps={},this.pendingUpdates=[],this.selectionCost=0,this.stepSpecificServices={},this.pollers=[],this.allScenes=[],this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},this.validationErrors={steps:new Map},this.currentAdjustingStepId="",this.isReloadedTransaction=l,d&&(this.workflowStatePromiseQueue.enabled=!1);const u=this.experience.getWorkflow();u&&this.setWorkflow(u)}getTemplatingContext(){const t=this.experience.getTransaction().recipient,e={recipient:t};return this.recipientConversionConfiguration?.requestedDataItems?.forEach(a=>{const i=a.uniqueIdentifier??a.title??"";a.type===_t.FirstName?e[i]=t?.firstName:a.type===_t.LastName?e[i]=t?.lastName:a.type===_t.Custom&&(a.customFieldIndex===1?e[i]=t?.customField1:a.customFieldIndex===2?e[i]=t?.customField2:a.customFieldIndex===3?e[i]=t?.customField3:a.customFieldIndex===4?e[i]=t?.customField4:a.customFieldIndex===5&&(e[i]=t?.customField5),a.option&&(e[i]=a.option.variants?.find(r=>r.id===e[i])?.name))}),e}async updateRecipient(t,e,a,i,r,o,s,l,c,d,u,A,h,g,p,m,f,y){const w=this.experience.getTransaction();if(w.recipient?.id)this.experience.getTransaction().recipient={id:w.recipient.id,firstName:t??w.recipient.firstName,lastName:e??w.recipient.lastName,address:a??w.recipient.address,suburb:i??w.recipient.suburb,state:r??w.recipient.state,email:o??w.recipient.email,postalCode:s??w.recipient.postalCode,country:l??w.recipient.country,mobile:c??w.recipient.mobile,company:d??w.recipient.company,apartment:u??w.recipient.apartment,customField1:A??w.recipient.customField1,customField2:h??w.recipient.customField2,customField3:g??w.recipient.customField3,customField4:p??w.recipient.customField4,customField5:m??w.recipient.customField5,conversionConfigurationId:f||w.recipient.conversionConfigurationId},this.experience.callEvent(Qe.RecipientChanged),await this.graphQlClient().mutate({mutation:uc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:w.recipient.id,firstName:t||w.recipient.firstName,lastName:e||w.recipient.lastName,address:a||w.recipient.address,suburb:i||w.recipient.suburb,state:r||w.recipient.state,email:o||w.recipient.email,postalCode:s||w.recipient.postalCode,country:l||w.recipient.country,mobile:c||w.recipient.mobile,company:d||w.recipient.company,apartment:u||w.recipient.apartment,customField1:A||w.recipient.customField1,customField2:h||w.recipient.customField2,customField3:g||w.recipient.customField3,customField4:p||w.recipient.customField4,customField5:m||w.recipient.customField5,conversionConfigurationId:f||w.recipient.conversionConfigurationId,prevalidated:y}});else{const F=await this.graphQlClient().mutate({mutation:dc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{firstName:t,lastName:e,address:a,suburb:i,state:r,email:o,postalCode:s,country:l,mobile:c,company:d,apartment:u,customField1:A,customField2:h,customField3:g,customField4:p,customField5:m,conversionConfigurationId:f}});w.recipient={id:F?.data?.recipientCreate?.id,firstName:t,lastName:e,address:a,suburb:i,state:r,email:o,postalCode:s,country:l,mobile:c,company:d,apartment:u,customField1:A,customField2:h,customField3:g,customField4:p,customField5:m,conversionConfigurationId:f},this.experience.callEvent(Qe.RecipientChanged),await this.graphQlClient().mutate({mutation:Ac,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.experience.getTransaction().id,recipientId:F.data?.recipientCreate?.id},context:{transactionOwnerId:this.experience.getTransaction().transactionOwnerId}})}await this.fetchConversionConfiguration(),this.recipientCallbacks.forEach(F=>F(this.experience.getTransaction().recipient))}async fetchConversionConfiguration(){const t=this.experience.getTransaction().recipient;if(t?.conversionConfigurationId&&!this.recipientConversionConfiguration){const e=Xt.configurationPromiseMap.get(t.conversionConfigurationId);if(e)this.recipientConversionConfiguration=await e;else{const i=(async()=>(await this.graphQlClient().query({query:Go,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t.conversionConfigurationId}})).data.conversionConfiguration)();Xt.configurationPromiseMap.set(t.conversionConfigurationId,i),this.recipientConversionConfiguration=await i}}}async initializeDefaultWorkflowState(t){const e=()=>{const d=t.finalizeStepConfig;if(!d)return;const u=d.lookAtAnimation,A=d.modelAnimation;u&&this.previewService?.executeCameraAnimation(u),A&&this.modelContainer?.executeAnimation(A)};this.reloadedState&&this.reloadedState.serializableWorkflow.steps.forEach(d=>{this.storage[d.stepName]=d.storage||{}});const a=this.getInitialOptionIds(this.reloadedState?.serializableWorkflow?.steps.reduce((d,u)=>(u.selectedVariants?.length&&(d[u.stepName]={selectedVariants:u.selectedVariants.map(A=>({id:A.id}))}),d),{})),i=P.getOptions(Array.from(a)),r=this.fetchConversionConfiguration();await Promise.all([i,r]),this.allScenes=fn(t);const s=dt(this.allScenes,this.stepSelections).map(d=>d.silentSteps).flat(),{stepElements:l,commands:c}=await this.stepElementsForIntroducedSilentSteps(s,!!this.reloadedState);this.commandContext.apply(new U(c),!0),this.stepElements={...this.stepElements,...l},await this.ensureStepsAreLoaded(),this.isReloadedTransaction||this.updateStateWithServer(),this.renderLayouts(),this.reloadedState&&e()}getWorkflowExperience(){return this.experience}getClient(){return this.client}setWorkflowStateSyncEnabled(t){this.workflowStatePromiseQueue.enabled=t}getInitializationPromise(){return this.initializationPromise}isInitialized(){return this.initialized}getInitialOptionIds(t){const e=new Set,a=this.experience.getWorkflow();if(!a)return e;const i=fn(a),r={...t};let o=-1;for(;;){const c=dt(i,r).flatMap(d=>d.renderableSteps);if(c.length===o)break;o=c.length;for(const d of c){if(r[d.stepName])continue;const u=d.option?.defaultVariant?.id;u&&(r[d.stepName]={selectedVariants:[{id:u}]})}}return dt(i,r).flatMap(l=>l.renderableSteps).forEach(l=>{l.option?.id&&!l.option?.variants&&e.add(l.option.id)}),e}addConfirmCallback(t){t(this.confirmedDesign),this.confirmCallbacks.push(t)}addEditedCallback(t){t(this.editedSteps),this.editedCallbacks.push(t)}addElementsCallback(t){t(this.stepElements),this.elementsCallbacks.push(t)}addInformationResultCallback(t){t(this.informationResults),this.informationResultCallbacks.push(t)}addInitCallback(t){t(this.stepInitialised),this.initCallbacks.push(t)}addMandatoryCallback(t){t(this.mandatorySteps),this.mandatoryCallbacks.push(t)}addMetadataCallback(t){t(this.stepMetadata),this.metadataCallbacks.push(t)}async addSelectionCallback(t){t({selectionCost:this.selectionCost,selections:this.stepSelections,traversableScenes:await this.traversableScenes()}),this.selectionCallbacks.push(t)}addStepSpecificStorageCallback(t,e){Object.keys(this.storage).includes(e)||(this.storage[e]={}),t(this.storage[e]),Object.keys(this.stepSpecificStorageCallbacks).includes(e)||(this.stepSpecificStorageCallbacks[e]=[]),this.stepSpecificStorageCallbacks[e].push(t)}addStorageCallback(t){t(this.storage),this.storageCallbacks.push(t)}addMakingAdjustmentsCallback(t){t(this.currentAdjustingStepId),this.makingAdjustmentsCallback.push(t)}addPoller(t){this.pollers.push(t)}addValidationCallback(t){this.validationCallbacks.push(t),t(this.validationErrors)}addRecipientCallback(t){this.recipientCallbacks.push(t),t(this.experience.getTransaction().recipient)}removeRecipientCallback(t){this.recipientCallbacks=this.recipientCallbacks.filter(e=>e!==t)}getLayouts(){return this.layouts}getAllLayoutData(){return this.commandContext.getAllLayouts().map(t=>t.layoutState)}getLayoutPreviewService(){return this.renderableContextService}getInformationResults(){return this.informationResults}getPreviewService(){return this.previewService}getCommandContext(){return this.commandContext}getRegionElements(t){return this.stepElements[t]||[]}getStepSpecificServices(t){return this.stepSpecificServices[t]}getTransactionCustomer(){return this.ownerCustomer}setTransactionCustomer(t){this.ownerCustomer=t}setTransactionCustomerDetails(t){this.ownerCustomer={...this.ownerCustomer,emailAddress:t.email}}getModelContainer(){return this.modelContainer}setModelContainer(t){(!t||this.previewService&&this.previewService.getAllModels().includes(t))&&(this.modelContainer=t,t&&t.metadata&&t.metadata instanceof Map&&this.modelContainer.metadata.set("workflowManager",this))}getCommandDispatcher(){return t=>this.commandContext.apply(t,!this.initialized)}getWorkflowSelections(){const t={};return this.experience.getWorkflow()?.steps.forEach(e=>{const a=this.stepSelections[e.stepName];a&&a.selectedVariants&&a.selectedVariants.length>0&&(t[e.stepName]={selections:a.selectedVariants})}),t}getStepSelections(){return this.stepSelections}markStepsAsInitialised(t){const e={...this.stepInitialised};t.forEach(a=>{e[a]=!0}),this.stepInitialised=e,this.onInitChange()}getUpdatesPending(){return this.pendingUpdates.length>0}markUpdateCompleted(t){this.pendingUpdates=this.pendingUpdates.filter(e=>e!==t)}markUpdatePending(){const t=N();return this.pendingUpdates=[...this.pendingUpdates,t],t}setEditedStatus(t,e){this.editedSteps={...this.editedSteps,[t]:e},this.onEditedChange()}setInformationResults(t){this.informationResults=[...t],this.onInformationResultChange()}setCurrentAdjustingStepId(t){this.currentAdjustingStepId=t,this.onMakingAdjustmentsChange()}setMandatoryFulfilled(t,e){this.mandatorySteps[t]!==e&&(this.mandatorySteps={...this.mandatorySteps,[t]:e},this.onMandatoryChange())}getMandatoryUnfulfilledSteps(){return dt(this.allScenes,this.stepSelections).flatMap(r=>r.renderableSteps).filter(r=>r.mandatory).filter(r=>!this.mandatorySteps[r.stepName]).map(r=>r.stepName)}setStepError(t,e,a){let i=!1;if(!this.validationErrors.steps.has(t)&&a)i=!0,this.validationErrors.steps.set(t,new Map([[e,a]]));else if(this.validationErrors.steps.has(t)){const r=this.validationErrors.steps.get(t);a&&a!==r.get(e)?(i=!0,r.set(e,a)):a||(i=!0,r.delete(e),r.size===0&&this.validationErrors.steps.delete(t))}i&&this.onValidationChange()}getStepErrors(t){return this.validationErrors.steps.get(t)}getValidationErrors(){return this.validationErrors}toggleDesignConfirmed(){this.confirmedDesign=!this.confirmedDesign,this.onConfirmChange()}toggleMakingAdjustmentsCallback(t){t(this.mandatorySteps),this.mandatoryCallbacks.push(t)}async injectIntoPreviewService(t,e){if(this.modelContainer)throw new Error("You must eject from the preview service before injecting again.");this.previewService=t;const a=this.experience.getProduct();if(!a?.modelUrl||!this.previewService)return;const i=t.loadModel({model:a.modelUrl,contextService:this.getLayoutPreviewService()},{refocusCamera:e});this.setModelContainer(i),dt(this.allScenes,this.stepSelections).filter(s=>s).map(s=>s.renderableSteps).flat().filter(s=>s.type===E.Model||s.type===E.Material).forEach(s=>{if(!s.option?.id){console.error(`Failed to read option id from step: ${s.stepName}`);return}const l=this.stepSelections[s.stepName]?.selectedVariants||[];if(l.length===0)return;const c=l[0];if(s.type===E.Model){if(!this.modelContainer)throw new O("We should always have a model container when injecting a preview!");const d=c.asset?.fileLink;if(!d){console.error(`Failed to read model url from variant: ${c.id} for step: ${s.stepName}`);return}const u=s.data;this.modelContainer.applyModelVariant(s.stepName,{model:d,contextService:this.getLayoutPreviewService()},u.replaceProductModel||!1)}else{const d=c.material;if(!d){console.error(`Failed to read material from variant: ${c.id} for step: ${s.stepName}`);return}s.data.targetMaterials.forEach(A=>{if(!this.modelContainer)throw new O("We should always have a model container when injecting a preview!");this.modelContainer.applyMaterialVariant(A,s.option.id,d)})}}),await i.getInitializationPromise(),this.renderLayouts()}ejectFromPreviewService(){if(this.modelContainer){if(!this.modelContainer.dispose)throw new Error("This feature is not supported in the current preview service.");this.modelContainer.dispose(),this.modelContainer=void 0}this.previewService=void 0}updateStorage(t,e){const a={...this.storage,[t]:{...this.storage[t],...e}};if(!te(a,this.storage)){this.storage=a;const i=new Sn(this.constructSerializableWorkflow());this.commandContext.apply(i,!0),this.onStepSpecificStorageChange(t),this.onStorageChange()}}constructSerializableWorkflow(){const t=[];return this.allScenes.forEach(e=>{e.renderableSteps.forEach(a=>{const i={stepName:a.stepName};i.storage=this.storage[a.stepName],i.selectedVariants=this.stepSelections[a.stepName]?.selectedVariants?.map(r=>({id:r.id,priceModifier:r.priceModifier})),t.push(i)})}),{steps:t}}updateStateWithServer(){if(this.readOnly)return;const t=this.serialize();this.workflowStatePromiseQueue.enqueue(new In(async()=>{await new Promise(e=>{setTimeout(()=>{e()},1)}),await this.updateTransaction({variables:{id:this.experience.getTransaction().id,workflowState:t}})}))}async updateStateWithServerImmediate(){if(this.readOnly)return;const t=this.serialize();return new In(async()=>{await this.updateTransaction({variables:{id:this.experience.getTransaction().id,workflowState:t}})}).execute()}serialize(){const t=this.getCommandContext().getState();if(!t)throw new O("Attempted to serialize state before it was initialized.");const e=Pt(t.transaction),a=pc(e);return JSON.stringify(a,mc,void 0)}async getStateHash(){const t=this.getCommandContext().getState(),a=Object.values(t?.transaction.layouts||{}).map(o=>o.modificationID??"").sort().join(""),r=new TextEncoder().encode(a);if(typeof window<"u"&&window.crypto&&window.crypto.subtle&&window.crypto.subtle.digest){const o=await window.crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(o)).map(c=>c.toString(16).padStart(2,"0")).join("")}try{return(await import("crypto")).createHash("sha256").update(a,"utf8").digest("hex")}catch{throw new Error("Unable to compute SHA-256 hash: no suitable crypto implementation available.")}}async outstandingRequestsPromise(){return this.workflowStatePromiseQueue.finalize()}updateMetadata(t,e){this.stepMetadata={...this.stepMetadata,[t]:{...this.stepMetadata[t],...e}},this.onMetadataChange()}removeElements(t){const e=(a,i)=>Object.keys(a).reduce((r,o)=>{const s=[...a[o]||[]];return i.forEach(l=>{const c=s.findIndex(d=>d.id===l.id);c>-1&&s.splice(c,1)}),r[o]=s,r},{});this.stepElements=e(this.stepElements,t)}getInvalidCanvasRegions(){return this.experience.getWorkflow()?.steps.reduce((t,e)=>(Bt(e,this.stepSelections)||this.stepElements[e.stepName]&&this.stepElements[e.stepName].forEach(a=>t.push(a)),t),[])||[]}getInvalidModelVariants(){return this.experience.getWorkflow()?.steps.reduce((t,e)=>(e.type===E.Model&&!Bt(e,this.stepSelections)&&t.push(e.stepName),t),[])||[]}async stepElementsForIntroducedSilentSteps(t,e){const a=this.experience.getProduct();if(!a)return Promise.resolve({stepElements:{},commands:[]});const i=async(c,d,u)=>{if(c.type===E.SilentIllustration){const A=await new vn(c,d).trigger();return{step:c,results:A}}else if(c.type===E.ProductOverlay){const A=await new vn(c,d,u).trigger();return{step:c,results:A}}return Promise.reject("Unknown silent step. This is a bug")},r=t.filter(c=>!this.stepInitialised[c.stepName]),o={stepElements:{},commands:[]},s=[];for(const c of r)this.markStepsAsInitialised([c.stepName]),e||s.push(i(c,this.layouts,a));const l=await Promise.all(s);for(const c of l)o.stepElements[c.step.stepName]=c.results.map(d=>d.regionElement),o.commands=[...o.commands,...c.results.map(d=>d.command)];return o}getStepStorage(t){return this.storage[t]}getMetadata(t){return this.stepMetadata[t]}getWorkflowMetadata(){return this.stepMetadata}getStepTags(t){return this.stepTags[t]||[]}getSerializedStep(t,e){return e.find(a=>a.stepName===t)}async updateTransactionShareActions(){const t=await this.client.getShareActionsForTransaction(this.experience.getTransaction().id);this.experience.getTransaction().transactionShareActions=t}async updateTransactionStakeholders(){const t=await S.getShadowGraphqlClient().query({query:Ko,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.experience.getTransaction().id}});!t?.data?.transactions||t.data.transactions.length!==1?(this.experience.getTransaction().currentStakeholder=void 0,this.experience.getTransaction().stakeholders=void 0):(this.experience.getTransaction().stakeholders=t.data.transactions[0].stakeholders,this.experience.getTransaction().currentStakeholder=t.data.transactions[0].currentStakeholder)}async approveTransaction(t){await S.getShadowGraphqlClient().mutate({mutation:lc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.experience.getTransaction().id,note:t}})}async rejectTransaction(t){await S.getShadowGraphqlClient().mutate({mutation:cc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.experience.getTransaction().id,note:t}})}async reset(){this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},await this.ensureStepsAreLoaded()}async setSelectionsAndElements(t,e,a,i){const r=this.experience.getWorkflow();if(!r)throw new Error("Attempted to set selections when no workflow is set!");const o=this.stepSelections;this.stepSelections={...this.stepSelections,[t]:{selectedVariants:e}},this.selectionCost=Object.values(this.stepSelections).reduce((v,I)=>v+I.selectedVariants.map(M=>M.priceModifier||0).reduce((M,R)=>M+R,0),0),r.steps.forEach(v=>{Bt(v,this.stepSelections)||(this.stepInitialised[v.stepName]=!1,delete this.stepMetadata[v.stepName],delete this.stepSelections[v.stepName],delete this.storage[v.stepName])});const s=this.allScenes,l=dt(s,o),c=dt(s,this.stepSelections),d=l.map(v=>v.silentSteps).flat(),A=c.map(v=>v.silentSteps).flat().filter(v=>!d.some(I=>I.stepName===v.stepName));d.forEach(v=>{Bt(v,this.stepSelections)||(this.stepInitialised[v.stepName]=!1)});const h=this.getInvalidCanvasRegions(),{stepElements:g,commands:p}=await this.stepElementsForIntroducedSilentSteps(A,!1);this.stepElements={...this.stepElements,...g,[t]:a},this.removeElements(h);const m=r.steps.find(v=>v.stepName===t);m?.type===E.Frame&&this.getWorkflowExperience().getStepById(m.stepName)?.frameService?.setTargetElements(a.map(I=>I.id));const f=h.map(v=>new Dt(v.id)),y=new Sn(this.constructSerializableWorkflow()),w=[...p,...f,y];w.length>0&&this.commandContext.apply(new U(w),!0),await this.ensureStepsAreLoaded(),this.onElementsChange();const F=this.getInvalidModelVariants(),b=this.modelContainer;if(b){const v=F.map(I=>b.applyModelVariant(I,{contextService:this.getLayoutPreviewService()},!1));await Promise.all(v)}await this.onSelectionChange(),m?.type!==E.Frame&&m?.type!==E.Text&&this.setMandatoryFulfilled(t,!0),i&&await i()}async ensureStepsAreLoaded(){const e=dt(this.allScenes,this.stepSelections).map(l=>l.renderableSteps),a=[],i=e.flat();for(const l of i)if(!this.stepInitialised[l.stepName])switch(this.stepInitialised[l.stepName]=!0,l.type){case E.DigitalContent:a.push(Ha.init(l,this,this.reloadedState));break;case E.Frame:a.push(pt.init(l,this,this.reloadedState));break;case E.Illustration:a.push(Jt.init(l,this,this.reloadedState));break;case E.Material:a.push(Wa.init(l,this,this.reloadedState));break;case E.Model:a.push(Ya.init(l,this,this.reloadedState));break;case E.Module:this.stepSpecificServices[l.stepName]={module:await Ti(l.data.module)},a.push(Ja.init(l,this,this.reloadedState));break;case E.Picture:a.push(Ka.init(l,this,this.reloadedState));break;case E.Question:a.push(_a.init(l,this,this.reloadedState));break;case E.Shape:a.push(Tt.init(l,this,this.reloadedState));break;case E.Text:a.push(j.init(l,this,this.reloadedState));break}const r=(await Promise.allSettled(a)).map(l=>{if(l.status==="rejected")throw new Error(`Step initialization failed: ${l.reason}`);return l.value}),o=r.flatMap(l=>l?.command?[l.command]:[]),s=r.flatMap(l=>l?.followup?[l.followup]:[]);o&&o.length>0&&this.commandContext.apply(new U(o),!0);for(const l of s)await l();s.length>0&&await this.ensureStepsAreLoaded(),this.onInitChange()}onConfirmChange(){this.confirmCallbacks.forEach(t=>t(this.confirmedDesign))}onEditedChange(){this.editedCallbacks.forEach(t=>t(this.editedSteps))}onElementsChange(){this.elementsCallbacks.forEach(t=>t(this.stepElements))}onInformationResultChange(){this.informationResultCallbacks.forEach(t=>t(this.informationResults))}onInitChange(){this.initCallbacks.forEach(t=>t(this.stepInitialised))}onMakingAdjustmentsChange(){this.makingAdjustmentsCallback.forEach(t=>{t(this.currentAdjustingStepId)})}onMandatoryChange(){this.mandatoryCallbacks.forEach(t=>t(this.mandatorySteps))}onMetadataChange(){this.metadataCallbacks.forEach(t=>{t(this.stepMetadata)})}async onSelectionChange(){const t=await this.traversableScenes();for(const e of this.selectionCallbacks)e({selectionCost:this.selectionCost,selections:this.stepSelections,traversableScenes:t})}onStepSpecificStorageChange(t){Object.keys(this.stepSpecificStorageCallbacks).includes(t)||(this.stepSpecificStorageCallbacks[t]=[]),this.stepSpecificStorageCallbacks[t].forEach(e=>e(this.storage[t]))}onStorageChange(){this.storageCallbacks.forEach(t=>t(this.storage))}onValidationChange(){this.validationCallbacks.forEach(t=>t(this.validationErrors))}traversableScenes(){return us(this.allScenes,this.stepSelections,this.singleVariantsRenderable)}};Xt.configurationPromiseMap=new Map;let Pa=Xt;class nt{constructor(t){this.variantData=t}getType(){return this.variantData.asset?.type}getId(){return this.variantData.id}getName(){return this.variantData.name}getPriceFormatted(t,e){return this.variantData.priceModifier.toLocaleString(t||"en-US",{style:"currency",currency:"USD",...e})}getPrice(){return this.variantData.priceModifier}getAsset(){return this.variantData.asset?.versions?.find(t=>t.name==="cdn")?.link}getAssetResource(){return this.variantData.asset}getThumbnail(){const t=this.variantData.thumbnail?.versions?.find(a=>a.name==="thumbnail")?.link,e=this.variantData.thumbnail?.fileLink;return t||e}getColor(){return this.variantData.color}isDefault(){return!!this.variantData.default}getResource(){return this.variantData}isEnabled(){return this.variantData.enabled}}const Zt=class Zt{constructor(t,e,a){this.manager=t,this.step=e,this.tags=a}setUpdateState(t){Zt.updateState.set(`${this.step.stepName}-${this.manager.getWorkflowExperience().getTransaction().id}`,t)}getUpdateState(){return!!Zt.updateState.get(`${this.step.stepName}-${this.manager.getWorkflowExperience().getTransaction().id}`)}getCurrentVariant(){const a=this.manager.getWorkflowSelections()[this.step.stepName]?.selections[0];if(a)return new nt(a)}async getAvailableVariants(){return(await this.getAllVariants()).filter(e=>e.isEnabled())||[]}async getAllVariants(){if(!this.step.option?.id)return[];if(this.step.option.variants)return(this.step.option.variants||[]).map(e=>new nt(e))||[];const t=await P.getOption(this.step.option?.id);if(!t)throw new Error("Option not found, cannot fetch variants.");return(t.variants||[]).map(e=>new nt(e))||[]}getId(){return this.step.stepName}getName(){return this.step.stepTitle}getHelpText(){return this.step.helpText}getType(){return this.step.type}getRaw(){return this.step}getTags(){return this.tags}hasTag(t){return this.tags.includes(t)||!1}getMandatory(){return this.step.mandatory||!1}getOverrideGlobalPropertyConfiguration(t){return(this.manager.getStepStorage(this.step.stepName)?.overrideGlobalConfigurations??{})[t.toString()]??!1}setOverrideGlobalPropertyConfiguration(t,e){const a=this.manager.getStepStorage(this.step.stepName)?.overrideGlobalConfigurations??{};this.manager.updateStorage(this.step.stepName,{overrideGlobalConfigurations:{...a,[t.toString()]:e}})}getGlobalPropertyAspects(t){return this.step.globalPropertyAspectConfigurations?.filter(e=>e.globalPropertyConfigurationId===t&&e.aspectName).map(e=>e.aspectName)??[]}executeAnimations(t){const e=this.manager.getPreviewService(),a=this.manager.getModelContainer(),i=this.step.data.modelAnimation,r=this.step.data.lookAtAnimation;e?r&&e.executeCameraAnimation(r):console.warn("No preview service available, cannot execute camera animations."),a?i&&a.executeAnimation(i,t):console.warn("No model container available, cannot execute model animations.")}};Zt.updateState=new Map;let Z=Zt;class Ri extends Z{constructor(t,e,a){super(t,e,a)}async selectVariant(t){if(!this.getUpdateState()&&this.getCurrentVariant()!==t)return Jt.selectVariant(this.step,t.getResource(),this.manager.getRegionElements(this.step.stepName)||[],e=>this.setUpdateState(e),this.manager)}getColors(){const t=this.manager.getRegionElements(this.step.stepName)||[];if(t.length===0)return;const a=V(t[0].id,this.manager.getAllLayoutData()).colors,r=this.getCurrentVariant()?.getAssetResource()?.assetConfiguration,o=r?.defaultColorVariants||[];if(o.length!==0){const s={};return o.forEach(l=>{const c=r.channelNumbers.find(d=>d.number===l.channelNumber);if(c){const d=c.id.replace(/\W/g,"");s[l.channelNumber]={browserValue:a[d]?.browserValue||""}}}),s}try{return a}catch(s){console.error(s)}}setColor(t,e,a){const i=new Map,o=this.getCurrentVariant()?.getAssetResource()?.assetConfiguration;return(o?.defaultColorVariants||[]).length!==0?o.channelNumbers.forEach(l=>{if(l.number.toString()===t){const c=l.id.replace(/\W/g,"");a?i.set(c,{browserValue:e,pmsValue:a}):i.set(c,e)}}):a?i.set(t,{browserValue:e,pmsValue:a}):i.set(t,e),Jt.changeColors(this.step,this.manager.getRegionElements(this.step.stepName),this.manager,i)}async getColorOption(){return await P.ensureFullOption(this.step.data.colorOption)}getAvailableColors(){return this.step.data.colorPickerEnabled?Jt.availableColors(this.step,this.manager):Promise.resolve([])}isColorPickerEnabled(){return this.step.data.colorPickerEnabled??!1}isPMSPickerEnabled(){return this.step.data.pmsPickerEnabled??!1}isVariantSearchEnabled(){return this.step.data.enableVariantSearch??!1}}class $i extends Z{constructor(t,e,a){super(t,e,a)}selectVariant(t){return Wa.selectVariant(this.step,t.getResource(),this.manager,e=>this.setUpdateState(e))}}class Ui extends Z{constructor(t,e,a){super(t,e,a)}selectVariant(t){return Ya.selectVariant(this.step,t.getResource(),this.manager,e=>this.setUpdateState(e))}}class Vi extends Z{constructor(t,e,a){super(t,e,a)}selectVariant(t){return Ka.selectVariant(this.step,t.getResource(),this.manager,e=>this.setUpdateState(e))}isVariantSearchEnabled(){return this.step.data.enableVariantSearch??!1}}class Li extends Z{constructor(t,e,a){super(t,e,a)}async selectVariant(t){if(!t.getId())throw new Error("Unable to select variant with a null ID");await _a.selectVariant(this.step,t.getId(),this.manager)}getDisplayType(){return this.step.data.displayType||this.step.option?.displayType}}class qi extends Z{constructor(t,e,a){super(t,e,a)}selectVariant(t){const e=t.getResource();return Tt.selectVariant(this.step,{fill:e.color,stroke:e.color,variant:e},this.manager.getRegionElements(this.step.stepName)||[],this.manager)}setColor(t){return Tt.selectVariant(this.step,t,this.manager.getRegionElements(this.step.stepName)||[],this.manager)}getColors(){return Tt.availableColours(this.step)}setCustomColor(t){return this.getCurrentVariant()?.getColor()!=="#custom"&&console.warn(`setting custom color for step ${this.step.stepName} but color is ${this.getCurrentVariant()?.getColor()}`),Tt.setCustomColor(t,this.step,this.manager)}getCustomColor(){this.getCurrentVariant()?.getColor()!=="#custom"&&console.warn(`setting custom color for step ${this.step.stepName} but color is ${this.getCurrentVariant()?.getColor()}`);const t=this.manager.getStepStorage(this.step.stepName)?.colour;if(!t)throw new Error(`Color not available on step ${this.step.stepName}. Set a default on the workflow to fix this.`);return t}}class zi extends Z{constructor(t,e,a){super(t,e,a)}async selectVariant(t){await j.selectVariant(this.step,t.getResource(),this.manager,e=>{if(e)this.manager.setInformationResults([...this.manager.getInformationResults(),{message:e,messageType:he.Error,stepID:this.step.stepName}]);else{const a=this.manager.getInformationResults().filter(i=>i.stepID!==this.step.stepName);this.manager.setInformationResults(a)}},()=>{})}async getAvailableFillColors(){return this.step.data.colorPickerEnabled?j.availableFillColors(this.step):[]}async setFillColor(t){const e=this.manager.getRegionElements(this.step.stepName);await j.changeFillColor(this.step,t,e,this.manager)}getFillColor(){return this.manager.getStepStorage(this.step.stepName)?.color||"#000000"}getAvailableFillImages(){return j.availableFillImages(this.step)}async setFillImage(t){const e=this.manager.getRegionElements(this.step.stepName);await j.changeFillImage(this.step,t,e,this.manager)}getFillImage(){return this.manager.getStepStorage(this.step.stepName)?.fillImage}getAlignment(){return j.findLayoutElements(this.manager,this.step)?.[0].align}setAlignment(t){const e=this.manager.getRegionElements(this.step.stepName);j.changeAlignment(this.step,t,e,this.manager)}setFullTextCustomization(t){const e=this.manager.getStepStorage(this.step.stepName)?.inputText||"",a=this.step.data.replaceableText!==void 0?this.step.data.replaceableText.replace("{{}}",e):e,i=t?a:this.step.data.defaultText;return this.manager.updateStorage(this.step.stepName,{customiseAllText:t,text:i,defaultCleared:!1}),this.setText(i)}setText(t){const e={input:t,helperData:{}},a=j.findLayoutElements(this.manager,this.step),i=j.filterUnsupportedCharacters(t,a[0]?.fontData),r=Nt(i,this.manager).length,o=!!this.step.data&&!!this.step.data.maxLength&&r>this.step.data.maxLength;o||(e.input=i);const s=a.length<=0,l=s?{inputText:i,text:i}:{inputText:i};this.manager.updateStorage(this.step.stepName,l);const c=this.manager.getStepStorage(this.step.stepName),d=j.getProcessedInput(i,this.step.data,c?.customiseAllText??!1);if(s)o||this.manager.updateMetadata(this.step.stepName,{text:d});else{const{command:u,errorData:A,helperData:h}=j.updateInputText(i,a,this.step,this.manager);u&&this.manager.getCommandDispatcher()(u),e.helperData=h,e.errorData=A,!o&&!A&&this.manager.updateMetadata(this.step.stepName,{text:d})}return e}getText(){const t=this.step.data.defaultText,e=this.manager.getStepStorage(this.step.stepName);return t&&e?.defaultCleared!==void 0&&!e?.defaultCleared?t:this.manager.getStepStorage(this.step.stepName)?.text||""}isReplaceable(){return this.step.data.userCanReplaceText}newLinesSupported(){return this.step.data.allowNewlines||!1}clearDefaultTextIfNecessary(){if(!this.manager.getStepStorage(this.step.stepName)?.defaultCleared&&this.step.data.deleteDefaultOnFocus){const e=this.setText("");this.manager.updateStorage(this.step.stepName,{defaultCleared:!0,inputText:""});const a=j.findLayoutElements(this.manager,this.step);return j.updateInputText("",a,this.step,this.manager),e}}hasColorPicker(){return this.step.data.colorPickerEnabled}getRegions(){return this.step.data.regions}getCharacterLimit(){return this.step.data.maxLength}getCharactersRemaining(){const t=this.step.data.maxLength;if(t===void 0)return;const e=Nt(this.getText(),this.manager);return t-e.length}setCustomColor(t){throw new Error("Custom color support is not yet available on text. Check back soon.")}getCustomColor(){throw new Error("Custom color support is not yet available on text. Check back soon.")}async getAvailableStrokeColors(){return this.step.data.strokeEnabled?j.availableStrokeColors(this.step):[]}getStrokeColor(){return this.manager.getStepStorage(this.step.stepName)?.strokeColor?.browserValue||"#000000"}async setStrokeColor(t){const e=this.manager.getRegionElements(this.step.stepName);await j.changeStrokeColor(this.step,t,e,this.manager)}}class Gi extends Z{constructor(t,e,a){super(t,e,a)}async selectVariant(){}getContent(){return this.step.data.content}}class ji extends Z{constructor(t,e,a){super(t,e,a)}async selectVariant(){}getPreviewURL(){return this.manager.getStepStorage(this.step.stepName)?.videoUrl||""}async selectVideo(t){return Ha.regenerateQRCode(this.manager.getRegionElements(this.step.stepName),t.key,this.manager,this.step)}}class Hi extends Z{constructor(t,e,a){super(t,e,a)}async selectVariant(){console.info("Text Modules don't support variants.")}getCharactersRemaining(){const t=this.step.data.maxLength;if(t===void 0)return;const e=Nt(this.getText(),this.manager);return t-e.length}getCharacterLimit(){return this.step.data.maxLength}getText(){return this.manager.getStepStorage(this.step.stepName)?.text||""}setText(t){Ja.changeText(this.step,t,this.manager,e=>{if(e){const a=[...this.manager.getInformationResults(),{message:e,messageType:he.Error,stepID:this.step.stepName}];this.manager.setInformationResults(a)}else{const a=this.manager.getInformationResults().filter(i=>i.stepID!==this.step.stepName);this.manager.setInformationResults(a)}})}}class Se{static get(t,e){switch(e.type){case E.DigitalContent:return new ji(t,e,t.getStepTags(e.stepName));case E.Information:return new Gi(t,e,t.getStepTags(e.stepName));case E.Question:return new Li(t,e,t.getStepTags(e.stepName));case E.Text:return new zi(t,e,t.getStepTags(e.stepName));case E.Illustration:return new Ri(t,e,t.getStepTags(e.stepName));case E.Picture:return new Vi(t,e,t.getStepTags(e.stepName));case E.Shape:return new qi(t,e,t.getStepTags(e.stepName));case E.Material:return new $i(t,e,t.getStepTags(e.stepName));case E.Model:return new Ui(t,e,t.getStepTags(e.stepName));case E.Frame:return new hr(t,e,t.getStepTags(e.stepName));case E.Module:return new Hi(t,e,t.getStepTags(e.stepName));default:throw new O(`Step type ${e.type} not yet supported in Core SDK`)}}}const yc=C.gql`
2115
2116
  fragment CreateDesignTransaction on Transaction {
2116
2117
  id
2117
2118
  designName
@@ -2150,7 +2151,7 @@
2150
2151
  }
2151
2152
  }
2152
2153
  }
2153
- `;function Te(n){const t=JSON.parse(atob(n.split(".")[1])).exp;return Math.floor(new Date().getTime()/1e3)>=t}const vc=async(n,t)=>{const e={};try{if(t){const i=await t.loggedInBearerToken();e.Authorization=`Bearer ${i}`}else throw new Error}catch{const o=Object.entries(localStorage).find(([l,c])=>l.startsWith("CognitoIdentityServiceProvider")&&l.endsWith("idToken"))?.[0]||"",s=localStorage.getItem(o);s&&!Te(s)&&(e.Authorization=`Bearer ${s}`)}return await t.getBetaEnabled()&&(e["X-Spiff-Beta"]="true"),(await S.getShadowGraphqlClient().mutate({mutation:Sc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{inputs:n.map(i=>({name:i.name,layouts:i.layouts,workflowId:i.workflowId,transactionId:i.transactionId,previewImage:i.previewImage,useThreeDimPreview:i.useThreeDimPreview,metadata:i.metadata,selectedVariants:i.selectedVariants}))},context:{headers:e}})).data?.designCreateMany},Bn=(n,t,e)=>{const a=r=>{const o={};if(r.type==="Frame"){const s=n[r.stepName],l=r.data;if(!s||!s.image||l.hideImageInCart&&e)return o;o[`${r.stepTitle} image`]=s.image}if(r.type==="Illustration"){const s=n[r.stepName],l=r.data;if(!s||l.hideColorsInCart&&e||!s.colors)return o;if(s.colors.length>0){const c=s.colors.join(", ").toUpperCase();o[`${r.stepTitle} colors`]=c}}if(r.type==="Module"){const s=n[r.stepName],l=r.data;if(!s||s.text===void 0||s.text===null||l.hideTextInCart&&e)return o;o[`${r.stepTitle} text`]=s.text}if(r.type==="Text"){const s=n[r.stepName];if(!s)return o;const l=r.data;(!l.hideTextInCart||!e&&s.text!==void 0&&s.text!==null)&&(o[`${r.stepTitle} text`]=s.text),s.color&&(!l.hideColorInCart||!e)&&(o[`${r.stepTitle} color`]=s.color),s.strokeColor&&(!l.hideStrokeInCart||!e)&&(o[`${r.stepTitle} stroke`]=s.strokeColor)}return o},i={};return t.steps.forEach(r=>{Object.assign(i,a(r))}),i},Ec=(n,t,e,a)=>{const i={};let r={};a&&(r=a);const s=t.steps.map(l=>l.stepTitle).filter((l,c,d)=>d.indexOf(l)==c);for(const l of s){if(Object.keys(n).includes(l)){const c=n[l],d=t.steps.find(u=>u.stepTitle===l);i[`${d?.stepTitle} selection`]={value:c[0].name,priceModifier:c[0].priceModifier}}for(const c of Object.keys(r))[`${l} color`,`${l} colors`,`${l} text`,`${l} image`].includes(c)&&(i[c]={value:r[c],priceModifier:0})}return i},bc=(n,t,e,a,i,r,o,s)=>{const l=t.basePrice||0,c=n.priceModifierTotal||0,d=Ec(a,e,void 0,r),A=(Q.getMap("transactionOwnerIds")||new Map).get(n.id),h={additionalExternalProductId:n.integrationProduct?.additionalExternalProductId,additionalExternalVariantId:n.integrationProduct?.additionalExternalVariantId,baseCost:l,designExternalVariants:n.designExternalVariants,designProductId:n.externalDesignProductId,designProductVariantId:n.externalDesignProductVariantId,event:"onComplete",exportedData:d,externalCartProductId:n.externalCartProductId,externalCartProductVariantId:n.externalCartProductVariantId,lineItemImageUrl:o||"",optionsCost:c,processExecutionId:s,quantity:n.quantity,transactionId:n.id,transactionOwnerId:A,weight:t.weight,workflowViewerLink:n.workflowViewerLink||"",workflowViewerReadOnlyLink:n.workflowViewerReadOnlyLink||""};return r&&(h.metadata=r),a&&(h.selectedVariants=a),i&&(h.sku=i),h},Ic=async(n,t,e,a,i,r,o,s,l,c)=>{c&&(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(a())),await n.updateStateWithServerImmediate(a),console.log("Server state is undefined @ Workflow completion"));const d=n.getPreviewService(),u=t?.finalizeStepConfig?.lookAtAnimation,A=d&&t.showModelOnFinishStep&&!!u,h=l&&Bn(l,t,!0),g=l&&Bn(l,t,!1),p=async v=>{const I={};let M=0;if(Object.keys(r).length>0)for(const R of Object.keys(r)){const x=r[R],T=t.steps.find(L=>L.stepName===R);for(let L=0;L<x.selections.length;++L){const k=x.selections[L];if(T){const X=await P.getOptionForStep(T);if(!v||X&&(X.variants||[]).length>1&&!T.data.hideSelectionInCart&&!T.data.hideSelectionsInCart){const bt=T.stepTitle;I[bt]?I[bt].push({id:k.id||"",name:k.name,priceModifier:k.priceModifier}):I[bt]=[{id:k.id||"",name:k.name,priceModifier:k.priceModifier}]}}M+=k.priceModifier}}return[I,M]},[m]=await p(!0),f=Object.fromEntries(Object.keys(m).map(v=>[v,m[v].map(I=>I.id)])),[y]=await p(!1),w=Object.fromEntries(Object.keys(y).map(v=>[v,y[v].map(I=>I.id)]));let F=await s(A,i.id);if(F){const v=await(await it(F)).blob();F=(await W.uploadAsset({name:`${i.id}-preview-image.png`,blob:v},ee.Image,!0,!1)).fileLink}return{designDetails:(()=>{const v={name:o,layouts:e.map(I=>({index:I.index,panelId:I.panelId})),workflowId:t.id,transactionId:i.id,useThreeDimPreview:!!A,previewImage:F};if(g){const I=[];for(const[M,R]of Object.entries(g))I.push({key:M,value:R});v.metadata=I}if(f){const I=[];for(const[M,R]of Object.entries(w))I.push({key:M,ids:R});v.selectedVariants=I}return v})(),cartSelectionsWithPrices:m,cartMetadata:h}},Hi=async(n,t)=>{await Promise.all(n.map(async s=>{await s.workflowManager.outstandingRequestsPromise()}));const a=await(async()=>{const s=S.getShadowGraphqlClient(),l=await Promise.all(n.map(async A=>({id:A.transaction.id,hash:await A.workflowManager.getStateHash()}))),d=ha(l,100),u=[];for(const A of d){const h=await s.query({query:Wo,variables:{transactions:A},fetchPolicy:"no-cache",errorPolicy:"all"});if(h.errors&&h.errors.length>0)return l.map(g=>g.id);u.push(...h.data?.transactionConfirmWorkflowStates??[])}return u})(),i=await Promise.all(n.map(async s=>await Ic(s.workflowManager,s.workflow,s.layouts,s.getReducerState,s.transaction,s.workflowSelections,s.designName,t??(()=>Promise.resolve(void 0)),s.workflowMetadata,a.includes(s.transaction.id)))),r=n[0].workflowManager.getClient(),o=await vc(i.map(s=>s.designDetails),r);if(!o)throw new Error("Failed to create designs");return o.map((s,l)=>{const c=n[l],d=i[l],u=s.transaction;return bc(u,c.product,c.workflow,d.cartSelectionsWithPrices,s.sku,d.cartMetadata,u.previewImageLink,s.processExecution?.id)})};class Bc{constructor(){this.localPersistenceKey="designTransactions",this.storageMethod="Local",this.designSavedListeners=[]}attachSaveListener(t){this.designSavedListeners.push(t)}detachSaveListener(t){this.designSavedListeners=this.designSavedListeners.filter(e=>e!==t)}async getSavedDesigns(){if(this.storageMethod==="Local"){const t=Q.get(this.localPersistenceKey);return t?JSON.parse(t):[]}throw new O("Unexpected storage method requested")}async getSavedDesignByTransaction(t){return(await this.getSavedDesigns()).find(a=>a.transactionId===t)}async addDesign(t){const a=(await this.getSavedDesigns()).filter(i=>i.transactionId!==t.transactionId);a.unshift(t),await this.setDesigns(a),this.designSavedListeners.forEach(i=>i(t))}async renameDesign(t,e){const a=await this.getSavedDesigns(),i=a.find(r=>r.transactionId===t);if(!i)throw new Error(`No saved design for transaction ${t}.`);i.title=e,await this.setDesigns(a)}async removeDesign(t){const e=await this.getSavedDesigns();await this.setDesigns(e.filter(a=>a.transactionId!==t))}async setDesigns(t){if(this.storageMethod==="Local"){Q.set(this.localPersistenceKey,JSON.stringify(t));return}throw new O("Unexpected storage method requested")}}const Ie=new Bc,Pc=C.gql`
2154
+ `;function Ne(n){const t=JSON.parse(atob(n.split(".")[1])).exp;return Math.floor(new Date().getTime()/1e3)>=t}const vc=async(n,t)=>{const e={};try{if(t){const i=await t.loggedInBearerToken();e.Authorization=`Bearer ${i}`}else throw new Error}catch{const o=Object.entries(localStorage).find(([l,c])=>l.startsWith("CognitoIdentityServiceProvider")&&l.endsWith("idToken"))?.[0]||"",s=localStorage.getItem(o);s&&!Ne(s)&&(e.Authorization=`Bearer ${s}`)}return await t.getBetaEnabled()&&(e["X-Spiff-Beta"]="true"),(await S.getShadowGraphqlClient().mutate({mutation:Sc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{inputs:n.map(i=>({name:i.name,layouts:i.layouts,workflowId:i.workflowId,transactionId:i.transactionId,previewImage:i.previewImage,useThreeDimPreview:i.useThreeDimPreview,metadata:i.metadata,selectedVariants:i.selectedVariants}))},context:{headers:e}})).data?.designCreateMany},Bn=(n,t,e)=>{const a=r=>{const o={};if(r.type==="Frame"){const s=n[r.stepName],l=r.data;if(!s||!s.image||l.hideImageInCart&&e)return o;o[`${r.stepTitle} image`]=s.image}if(r.type==="Illustration"){const s=n[r.stepName],l=r.data;if(!s||l.hideColorsInCart&&e||!s.colors)return o;if(s.colors.length>0){const c=s.colors.join(", ").toUpperCase();o[`${r.stepTitle} colors`]=c}}if(r.type==="Module"){const s=n[r.stepName],l=r.data;if(!s||s.text===void 0||s.text===null||l.hideTextInCart&&e)return o;o[`${r.stepTitle} text`]=s.text}if(r.type==="Text"){const s=n[r.stepName];if(!s)return o;const l=r.data;(!l.hideTextInCart||!e&&s.text!==void 0&&s.text!==null)&&(o[`${r.stepTitle} text`]=s.text),s.color&&(!l.hideColorInCart||!e)&&(o[`${r.stepTitle} color`]=s.color),s.strokeColor&&(!l.hideStrokeInCart||!e)&&(o[`${r.stepTitle} stroke`]=s.strokeColor)}return o},i={};return t.steps.forEach(r=>{Object.assign(i,a(r))}),i},Ec=(n,t,e,a)=>{const i={};let r={};a&&(r=a);const s=t.steps.map(l=>l.stepTitle).filter((l,c,d)=>d.indexOf(l)==c);for(const l of s){if(Object.keys(n).includes(l)){const c=n[l],d=t.steps.find(u=>u.stepTitle===l);i[`${d?.stepTitle} selection`]={value:c[0].name,priceModifier:c[0].priceModifier}}for(const c of Object.keys(r))[`${l} color`,`${l} colors`,`${l} text`,`${l} image`].includes(c)&&(i[c]={value:r[c],priceModifier:0})}return i},bc=(n,t,e,a,i,r,o,s)=>{const l=t.basePrice||0,c=n.priceModifierTotal||0,d=Ec(a,e,void 0,r),A=(Q.getMap("transactionOwnerIds")||new Map).get(n.id),h={additionalExternalProductId:n.integrationProduct?.additionalExternalProductId,additionalExternalVariantId:n.integrationProduct?.additionalExternalVariantId,baseCost:l,designExternalVariants:n.designExternalVariants,designProductId:n.externalDesignProductId,designProductVariantId:n.externalDesignProductVariantId,event:"onComplete",exportedData:d,externalCartProductId:n.externalCartProductId,externalCartProductVariantId:n.externalCartProductVariantId,lineItemImageUrl:o||"",optionsCost:c,processExecutionId:s,quantity:n.quantity,transactionId:n.id,transactionOwnerId:A,weight:t.weight,workflowViewerLink:n.workflowViewerLink||"",workflowViewerReadOnlyLink:n.workflowViewerReadOnlyLink||""};return r&&(h.metadata=r),a&&(h.selectedVariants=a),i&&(h.sku=i),h},Ic=async(n,t,e,a,i,r,o,s,l,c)=>{c&&(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(a())),await n.updateStateWithServerImmediate(a),console.log("Server state is undefined @ Workflow completion"));const d=n.getPreviewService(),u=t?.finalizeStepConfig?.lookAtAnimation,A=d&&t.showModelOnFinishStep&&!!u,h=l&&Bn(l,t,!0),g=l&&Bn(l,t,!1),p=async v=>{const I={};let M=0;if(Object.keys(r).length>0)for(const R of Object.keys(r)){const x=r[R],T=t.steps.find(L=>L.stepName===R);for(let L=0;L<x.selections.length;++L){const k=x.selections[L];if(T){const X=await P.getOptionForStep(T);if(!v||X&&(X.variants||[]).length>1&&!T.data.hideSelectionInCart&&!T.data.hideSelectionsInCart){const bt=T.stepTitle;I[bt]?I[bt].push({id:k.id||"",name:k.name,priceModifier:k.priceModifier}):I[bt]=[{id:k.id||"",name:k.name,priceModifier:k.priceModifier}]}}M+=k.priceModifier}}return[I,M]},[m]=await p(!0),f=Object.fromEntries(Object.keys(m).map(v=>[v,m[v].map(I=>I.id)])),[y]=await p(!1),w=Object.fromEntries(Object.keys(y).map(v=>[v,y[v].map(I=>I.id)]));let F=await s(A,i.id);if(F){const v=await(await it(F)).blob();F=(await W.uploadAsset({name:`${i.id}-preview-image.png`,blob:v},ee.Image,!0,!1)).fileLink}return{designDetails:(()=>{const v={name:o,layouts:e.map(I=>({index:I.index,panelId:I.panelId})),workflowId:t.id,transactionId:i.id,useThreeDimPreview:!!A,previewImage:F};if(g){const I=[];for(const[M,R]of Object.entries(g))I.push({key:M,value:R});v.metadata=I}if(f){const I=[];for(const[M,R]of Object.entries(w))I.push({key:M,ids:R});v.selectedVariants=I}return v})(),cartSelectionsWithPrices:m,cartMetadata:h}},Wi=async(n,t)=>{await Promise.all(n.map(async s=>{await s.workflowManager.outstandingRequestsPromise()}));const a=await(async()=>{const s=S.getShadowGraphqlClient(),l=await Promise.all(n.map(async A=>({id:A.transaction.id,hash:await A.workflowManager.getStateHash()}))),d=ha(l,100),u=[];for(const A of d){const h=await s.query({query:Wo,variables:{transactions:A},fetchPolicy:"no-cache",errorPolicy:"all"});if(h.errors&&h.errors.length>0)return l.map(g=>g.id);u.push(...h.data?.transactionConfirmWorkflowStates??[])}return u})(),i=await Promise.all(n.map(async s=>await Ic(s.workflowManager,s.workflow,s.layouts,s.getReducerState,s.transaction,s.workflowSelections,s.designName,t??(()=>Promise.resolve(void 0)),s.workflowMetadata,a.includes(s.transaction.id)))),r=n[0].workflowManager.getClient(),o=await vc(i.map(s=>s.designDetails),r);if(!o)throw new Error("Failed to create designs");return o.map((s,l)=>{const c=n[l],d=i[l],u=s.transaction;return bc(u,c.product,c.workflow,d.cartSelectionsWithPrices,s.sku,d.cartMetadata,u.previewImageLink,s.processExecution?.id)})};class Bc{constructor(){this.localPersistenceKey="designTransactions",this.storageMethod="Local",this.designSavedListeners=[]}attachSaveListener(t){this.designSavedListeners.push(t)}detachSaveListener(t){this.designSavedListeners=this.designSavedListeners.filter(e=>e!==t)}async getSavedDesigns(){if(this.storageMethod==="Local"){const t=Q.get(this.localPersistenceKey);return t?JSON.parse(t):[]}throw new O("Unexpected storage method requested")}async getSavedDesignByTransaction(t){return(await this.getSavedDesigns()).find(a=>a.transactionId===t)}async addDesign(t){const a=(await this.getSavedDesigns()).filter(i=>i.transactionId!==t.transactionId);a.unshift(t),await this.setDesigns(a),this.designSavedListeners.forEach(i=>i(t))}async renameDesign(t,e){const a=await this.getSavedDesigns(),i=a.find(r=>r.transactionId===t);if(!i)throw new Error(`No saved design for transaction ${t}.`);i.title=e,await this.setDesigns(a)}async removeDesign(t){const e=await this.getSavedDesigns();await this.setDesigns(e.filter(a=>a.transactionId!==t))}async setDesigns(t){if(this.storageMethod==="Local"){Q.set(this.localPersistenceKey,JSON.stringify(t));return}throw new O("Unexpected storage method requested")}}const Be=new Bc,Pc=C.gql`
2154
2155
  mutation AddTransactionStakeholder($id: String!, $type: String!, $details: CustomerDetailsInput!) {
2155
2156
  transactionAddStakeholder(id: $id, details: $details, type: $type) {
2156
2157
  id
@@ -2193,7 +2194,7 @@
2193
2194
  }
2194
2195
  }
2195
2196
  `,Pn=C.gql`
2196
- ${Ge}
2197
+ ${je}
2197
2198
  ${de}
2198
2199
  mutation TransactionUpdateIntegrationProduct($id: String!, $integrationProductId: String) {
2199
2200
  transactionUpdateIntegrationProduct(id: $id, integrationProductId: $integrationProductId) {
@@ -2280,7 +2281,7 @@
2280
2281
  }
2281
2282
  }
2282
2283
  }
2283
- `;var Ne=(n=>(n.PriceBreakChanged="PriceBreakChanged",n.ProductChanged="ProductChanged",n.QuantityChanged="QuantityChanged",n.RecipientChanged="RecipientChanged",n.SelectionChanged="SelectionChanged",n))(Ne||{});class Wi{constructor(t,e){this.cachedStepHandles=new Map,this.profanityList=[],this.currentPriceBreak=1,this.renderableScenes=[],this.renderableSceneCallbacks=[],this.eventCallbacks=new Map,this.debouncedSavedDesignUpdate=$n(async()=>{await Ie.getSavedDesignByTransaction(this.getTransaction().id)&&this.save()},2500),this.getCanvasObjectURLAsync=async a=>new Promise((i,r)=>{try{a.toBlob(o=>{if(o){const s=URL.createObjectURL(o);i(s)}})}catch(o){r(o)}}),this.client=t,this.transaction=e.transaction,this.workflow=e.workflow,this.profanityList=this.transaction.product?.profanities?.map(a=>a.word)||[],this.isReadOnly=e.transaction.isOrdered||!!e.readOnly,this.graphQlClient=e.graphQlClient,this.workflowManager=new Pa(this,t,a=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return e.stateMutationFunc(a)},e.graphQlClient,e.reloadedState,e.readOnly,e.modelContainer,e.isReloadedTransaction,e.singleVariantsRenderable,e.delayWorkflowStateSync),this.workflowManager.addSelectionCallback(a=>{const i=a.traversableScenes.map(r=>{const o=r.renderableSteps.map(s=>s.stepName);return{id:r.name,title:r.title,renderableSteps:o,workflowScene:r}});this.renderableScenes=i,this.renderableSceneCallbacks.forEach(r=>r(i)),this.callEvent("SelectionChanged")}),this.currentPriceBreak=this.priceBreakToBeApplied()}getTransaction(){return this.transaction}getProduct(){return this.transaction.product}getProfanityList(){return this.profanityList}async setProduct(t){this.workflow=void 0;const e=await this.graphQlClient().mutate({mutation:Pn,variables:{id:this.getTransaction().id,integrationProductId:t}}),a=e.data?.transactionUpdateIntegrationProduct.product;if(!a)throw new O("Failed to set product. No product returned from server.");if(!this.bundle)throw new O("Cannot set product on experience that is not part of a bundle.");this.transaction.product={...this.transaction.product,...e.data?.transactionUpdateIntegrationProduct.product},this.transaction.integrationProduct={...this.transaction.integrationProduct,...e.data?.transactionUpdateIntegrationProduct.integrationProduct},this.transaction.workflowState=void 0,this.currentPriceBreak=this.priceBreakToBeApplied(),this.callEvent("ProductChanged");const i=(await this.bundle.getProductCollection().fetchProducts()).find(r=>r.getId()===a.id);try{const r=i?.getDefaultWorkflow();if(r){const o=await rr(r.getId());await this.setWorkflow(o),console.log("Setting Product - Workflow set to default for product.")}}catch{console.log("Setting Product - No default workflow available, must be set manually.")}}async clearProduct(){if(!this.bundle)throw new O("Cannot clear product on experience that is not part of a bundle.");this.workflow=void 0,this.transaction.workflowState=void 0,this.transaction.product=void 0,this.transaction.integrationProduct=void 0,this.currentPriceBreak=this.priceBreakToBeApplied(),this.callEvent("ProductChanged"),await this.graphQlClient().mutate({mutation:Pn,variables:{id:this.getTransaction().id}})}getWorkflow(){return this.workflow}async setWorkflow(t){return this.workflow=t,await this.graphQlClient().mutate({mutation:zo,variables:{id:this.getTransaction().id,workflowId:t.id}}),this.workflowManager.setWorkflow(t)}async attachAddress(t,e,a,i,r,o){await this.graphQlClient().mutate({mutation:xc,variables:{transactionId:this.getTransaction().id,streetAddress:t||void 0,apartment:e||void 0,city:a||void 0,country:i||void 0,state:r||void 0,postCode:o||void 0}})}async attachOrganization(t){await this.graphQlClient().mutate({mutation:Fc,variables:{transactionId:this.getTransaction().id,organizationName:t}})}getBundle(){return this.bundle}setBundle(t){this.bundle=t}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.workflowManager.getCommandContext()}getWorkflowManager(){return this.workflowManager}async createPreviewImage(t,e){const a=this.getWorkflow(),i=a?.finalizeStepConfig?.lookAtAnimation;if(!a)throw new Error("Failed to generate cart preview image! No workflow is set.");if(t){if(!i)throw new Error("Failed to generate cart preview image! No camera orientation configured.");return await this.workflowManager.getPreviewService()?.renderSceneScreenshot(e??512,i)||""}let r=2048;e&&e<=2048&&(r=e);const o=yt(r,r),s=this.workflowManager.getCommandContext().getAllLayouts(),l=a.defaultPreviewPanelIndex||0,c=a.panels[l],d=s.find(w=>w.layoutState?.layout.panelId===c?.name)||s[0],u=d.layoutState.layout.previewRegion?{x:d.layoutState.layout.previewRegion.left,y:d.layoutState.layout.previewRegion.top,width:d.layoutState.layout.previewRegion.width,height:d.layoutState.layout.previewRegion.height}:{x:0,y:0,width:d.layoutState.layout.width,height:d.layoutState.layout.height},A=this.workflowManager.getCommandContext().getLayoutById(d.layoutState.layout.id),h=o.getContext("2d");if(!h)throw new Re("Failed to obtain 2D context for preview image creation");const g=this.workflowManager.getTemplatingContext(),p=He(A.layoutState.layout,A.layoutState.elements,{renderingConfiguration:{purpose:Ot.Print,region:{left:u.x,top:u.y,width:u.width,height:u.height},templatingContext:g}}),m=Kn(p);await(await Ma.Pith.from(h,m,{anonymousCrossOrigin:!0,ignoreDimensions:!1,createCanvas:yt,createImage:le,DOMParser:Ra(),fetch})).render();const y=await this.getCanvasObjectURLAsync(o);return o.toDataURL(y)}getStepById(t){const e=this.getWorkflow()?.steps.find(r=>r.stepName===t);if(!e||!this.stepHasHandle(e))return;const a=this.cachedStepHandles.get(e.stepName);if(a)return a;const i=ye.get(this.getWorkflowManager(),e);return this.cachedStepHandles.set(e.stepName,i),i}getSteps(){return this.getScenes().flatMap(t=>this.getStepsByScene(t))}getStepsConditionallyActive(){return this.getScenes().flatMap(t=>this.getStepsByScene(t).filter(e=>Bt(e.getRaw(),this.getWorkflowManager().getStepSelections())))}getScenes(){return(this.getWorkflow()?.stepGroups||[]).map(e=>({id:e.id,name:e.name,stepIds:e.stepNames}))}getSelectionPriceSubunits(t){const e=this.getWorkflowManager().getWorkflowSelections();let a=0;return Object.values(e).forEach(i=>{a+=i.selections.reduce((r,o)=>r+(o.priceModifier||0),0)}),this.getPriceSubUnitsAfterPriceBreaks(a,t)}getBasePriceSubunits(t,e){const a=this.getPriceSubUnitsAfterPriceBreaks(this.getProduct()?.basePrice||0,e);if(t){const i=this.getAdditionalProductPriceSubunits(e)||0;return a+i}return a}getAdditionalProductPriceSubunits(t){const e=this.getTransaction().integrationProduct;if(e?.additionalIntegrationProduct?.product){const a=e.additionalIntegrationProduct.product.basePrice||0;return this.getPriceSubUnitsAfterPriceBreaks(a,t)}}getTotalPriceSubunits(t){return this.getBasePriceSubunits(!1,t)+this.getSelectionPriceSubunits(t)}getPriceSubUnitsAfterPriceBreaks(t,e){const a=e?1:this.priceBreakToBeApplied(),i=t*a;return Math.ceil(i)}priceBreakToBeApplied(){const t=(this.getProduct()?.priceBreaks||[]).sort((i,r)=>-(i.minQty-r.minQty)),a=[...this.getMatchingExperiencesFromBundle(),this].reduce((i,r)=>i+r.getQuantity(),0);for(const i of t)if(i.minQty<=a)return i.percentage;return 1}checkForPriceBreakChanges(){const t=this.priceBreakToBeApplied();this.currentPriceBreak!==t&&(this.updatePriceBreak(t),this.getMatchingExperiencesFromBundle().forEach(e=>e.updatePriceBreak(t)))}getMatchingExperiencesFromBundle(){return(this.bundle?.getWorkflowExperiences()||[]).filter(t=>{const e=t.getTransaction().id,a=this.getTransaction().id,i=t.getProduct()?.id,r=this.getProduct()?.id;return e!==a&&i===r})}updatePriceBreak(t){this.currentPriceBreak=t,this.callEvent("PriceBreakChanged")}async copySelectionsViaGlobalConfiguration(t,e,a){const i=await t.getGlobalProperties(),r=a?.map(c=>c.getId()),o=this.getSteps().filter(c=>r===void 0||r.includes(c.getId())),s=e.getSteps(),l=c=>i.find(d=>d.getRawProperty().name===c.aspectName);o.forEach(c=>{const d=new Set,u=c.getRaw().globalPropertyAspectConfigurations;u!==void 0&&(u.forEach(A=>d.add(JSON.stringify(A))),s.forEach(A=>{const h=A.getRaw().globalPropertyAspectConfigurations;h!==void 0&&h.forEach(g=>{const p=l(g),m=d.has(JSON.stringify(g));if(m&&p?.getType()==="Option"){const f=A.getCurrentVariant();if(!f)return;c.selectVariant(f),d.delete(JSON.stringify(g))}else if(m&&p?.getType()==="Text"){const f=A.getText();c.setText(f),d.delete(JSON.stringify(g))}})}))})}getStepByName(t){const e=this.getWorkflow()?.steps.find(a=>a.stepTitle===t);if(!(!e||!this.stepHasHandle(e)))return ye.get(this.getWorkflowManager(),e)}getStepsByType(t){return this.getWorkflow()?.steps.filter(e=>e.type===t).map(e=>ye.get(this.getWorkflowManager(),e))||[]}getStepsByScene(t){const e=this.getWorkflow();if(!e?.stepGroups.find(i=>i.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(i=>e.steps.find(r=>r.stepName===i)).filter(i=>!!i&&this.stepHasHandle(i)).map(i=>ye.get(this.getWorkflowManager(),i))}async attachCustomerDetails(t){return this.assignCustomerDetails({emailAddress:t.email})}async assignCustomerDetails(t){const a=(await this.graphQlClient().mutate({mutation:Pc,variables:{id:this.getTransaction().id,details:t,type:"Owner"}})).data?.transactionAddStakeholder?.stakeholders?.find(i=>i.customer?.emailAddress===t.emailAddress);if(a?.customer){this.getWorkflowManager().setTransactionCustomer(a.customer);const i=Q.getMap("transactionCustomerIds")||new Map;i.set(this.getTransaction().id,a.customer.id),Q.setMap("transactionCustomerIds",i)}}attachRenderableSceneListener(t){this.renderableSceneCallbacks.push(t),t(this.renderableScenes)}detachRenderableSceneListener(t){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter(e=>e!==t)}async save(t){const e=this.getProduct(),a=this.getWorkflow(),i=this.getCommandContext().getState();if(!e)throw new O("Product undefined!");if(!a)throw new O("Workflow undefined!");if(!i)throw new O("State undefined!");const o={title:await(async()=>{if(t)return t;const s=this.getTransaction().id,c=(await Ie.getSavedDesigns()).find(d=>d.transactionId===s)?.title;return c||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getTransaction().id,productId:e.id,integrationProductId:this.getTransaction().integrationProduct.id,workflowName:a.name,workflowId:a.id,lastEdited:new Date};return await Ie.addDesign(o),o}async copy(){const t=Pt(this.getCommandContext().getState());if(!t)throw new O("Internal state is undefined! Cannot copy experience!");const e=JSON.stringify(t.transaction),a=this.getWorkflow();if(!a)throw new O("Workflow is undefined! Cannot copy experience!");const i=this.getTransaction().integrationProduct?.id;if(!i)throw new O("Integration product id is undefined!");return await this.getClient().getWorkflowExperience({type:"integration",integrationProductId:i,workflowId:a.id,workflowState:e})}async onDesignFinished(t=!0){const e=this.getTransaction(),a=this.getProduct(),i=this.getWorkflow();if(!a)throw new O("Product undefined! Cannot finish an experience without a product.");if(!i)throw new O("Workflow undefined! Cannot finish an experience without a workflow.");if(e.isOrdered)return{event:"",exportedData:{},lineItemImageUrl:"",optionsCost:0,transactionId:e.id,workflowViewerLink:"",workflowViewerReadOnlyLink:""};const r=await Hi([{workflowManager:this.workflowManager,workflow:i,layouts:this.workflowManager.getLayouts(),getReducerState:()=>this.workflowManager.getCommandContext().getState(),product:a,transaction:e,workflowSelections:this.workflowManager.getWorkflowSelections(),workflowMetadata:this.workflowManager.getWorkflowMetadata(),designName:i.name}],o=>t?this.createPreviewImage(o,1024):Promise.resolve(void 0));return e.completed&&await this.graphQlClient().mutate({mutation:_o,variables:{transactionId:e.id}}),r[0]}stepHasHandle(t){return t.type!==E.SilentIllustration&&t.type!==E.ProductOverlay}async getExportedStepData(){const t=this.getWorkflow(),e=this.getWorkflowManager().getWorkflowMetadata(),a=this.getWorkflowManager().getWorkflowSelections(),i=[];for(const r of t?.steps||[]){const o=r.stepName,s=e[o],l=a[o]?.selections[0],c={stepId:o,title:r.stepTitle,properties:[]};if(l&&await kc(r,a)&&c.properties.push({type:"selection",value:l.name,priceModifier:l.priceModifier}),!s){i.push(c);continue}switch(r.type){case E.Frame:{const d=r.data,u=s;u.image&&d.displayImageOnFinishStep&&c.properties.push({type:"image",value:u.image,priceModifier:0})}break;case E.Illustration:{const d=r.data,u=s;if(u&&u.colors&&u.colors.length>0&&d.displayColorsOnFinishStep){const A=u.colors.join(", ").toUpperCase();c.properties.push({type:"color",value:A,priceModifier:0})}}break;case E.Module:{const d=r.data,u=s;u&&u.text&&d.displayTextOnFinishStep&&c.properties.push({type:"text",value:u.text,priceModifier:0})}break;case E.Text:{const d=r.data,u=s;u&&u.text&&d.displayTextOnFinishStep&&c.properties.push({type:"text",value:u.text,priceModifier:0}),u&&u.color&&d.displayColorOnFinishStep&&c.properties.push({type:"color",value:u.color,priceModifier:0})}}i.push(c)}return i.filter(r=>r.properties&&r.properties.length>0)}getQuantity(){return this.getTransaction().quantity||1}async setQuantity(t){if(t<1)throw new RangeError("WorkflowExperience quantity must be greater than zero.");if(this.isReadOnly)throw new Error("Cannot update quantity on a read-only WorkflowExperience");this.getTransaction().quantity=t,this.callEvent("QuantityChanged"),this.checkForPriceBreakChanges();const e=this.getTransaction();await this.graphQlClient().mutate({mutation:qo,variables:{id:e.id,quantity:t}})}addEventListener(t,e){const a=this.eventCallbacks.get(t)||[];a.push(e),this.eventCallbacks.set(t,a)}removeEventListener(t,e){const a=this.eventCallbacks.get(t)||[];this.eventCallbacks.set(t,a.filter(i=>i!==e))}callEvent(t){(this.eventCallbacks.get(t)||[]).forEach(e=>e(this))}}const Dc=n=>{if([E.Question,E.Frame,E.Illustration,E.Material,E.Model,E.Picture,E.Shape,E.Text].includes(n.type)){const e=n.data;return!!e.displaySelectionOnFinishStep||!!e.displaySelectionsOnFinishStep}return!1},kc=async(n,t)=>{if(!Dc(n))return!1;const e=await P.getOptionForStep(n);if(e&&(e.variants||[]).length>1){const a=t[n.stepName];return!!(a&&a.selections.length>0)}return!1};class Mc{constructor(t){this.handleCache={},this.bundle=t}async getHandle(t){if(this.handleCache[t.name])return this.handleCache[t.name];const e=await this.createHandle(t);return this.handleCache[t.name]=e,e}async getHandles(){if(!this.bundle.getProductCollection()?.getResource().globalPropertyConfiguration)return[];await this.bundle.getGlobalPropertyStateManager().getInitializationPromise();const t=this.bundle.getProductCollection()?.getResource().globalPropertyConfiguration;return t?Promise.all(t.aspects.map(e=>this.getHandle(e))):[]}applyConditionsFromState(t,e){return e?t.filter(a=>this.aspectConditionsSatisfied(a.getRawProperty(),e)):t}aspectConditionsSatisfied(t,e){return!t.conditions||t.conditions.length===0?!0:(t.conditionMode===Vn.AND?Array.prototype.every.bind(t.conditions):Array.prototype.some.bind(t.conditions))(i=>{const r=e.aspects.find(o=>o.name===i.targetAspectName);return r?i.requiredVariantSelections.some(o=>o===r.value):!1})}async createHandle(t){switch(t.type){case q.FileUpload:return new Yi(this.bundle,t).initialize();case q.ColorOption:return new xa(this.bundle,t,t.entityId?await P.getOption(t.entityId):void 0);case q.Option:{const e=t.entityId?await P.getOption(t.entityId):void 0;return e?.type==="Color"?new xa(this.bundle,t,e):new Za(this.bundle,t,e)}case q.Text:return new Ji(this.bundle,t);default:throw new Error("Unhandled Global Property Aspect Type")}}}class Je{constructor(t,e){this.bundle=t,this.property=e}getName(){return this.property.name}getTitle(){return this.property.title}getDescription(){return this.property.description}getType(){return this.property.type}getRawProperty(){return this.property}isMandatory(){return!!this.property.mandatory}isMandatoryFulfilled(){return!this.property.mandatory||!!this.bundle.getGlobalPropertyStateManager().getAspectMandatoryFulfilled(this.property.name)}getSharedSteps(t){return(t??this.bundle.getWorkflowExperiences()).flatMap(i=>i.getStepsConditionallyActive().filter(r=>r.getOverrideGlobalPropertyConfiguration(this.property.type)?!1:r.getRaw().globalPropertyAspectConfigurations?.some(o=>o.globalPropertyConfigurationId===this.bundle.getProductCollection()?.getResource().globalPropertyConfiguration?.id&&o.aspectName===this.property.name)))}getStateValue(){return this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name)}}class Yi extends Je{constructor(t,e){super(t,e)}async initialize(){return this.property.data?.fileUpload?.colorOptionId&&(this.colorOption=await P.getOption(this.property.data?.fileUpload?.colorOptionId)),await this.loadImageData(),this}async loadImageData(){const t=await this.getImage();if(t?.fileLink)if(t?.fileLink.endsWith(".svg")){const e=await et(t?.fileLink),a=await za(t?.fileLink),i=a.width,r=a.height,o=await rt(e);this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name)?.colors?.forEach(c=>{o.colors[c.key]={browserValue:c.browserValue,pmsValue:c.pmsValue}});const l={src:t?.fileLink,width:i,height:r,aspect:i/r,svg:o.svg,colors:o.colors};At.set(t?.fileLink,l),this.imageData=l}else this.imageData=void 0}async selectImage(t){const e=this.bundle.getGlobalPropertyStateManager();await Promise.all([e.setAspect(this.property.name,t.key,{...e.getAspectStorage(this.property.name)||{},originalAssetKey:t.key,backgroundRemovedAssetKey:void 0,useOriginalAsset:void 0},void 0),this.applyImageSelection(t),this.loadImageData()])}async canUseBackgroundRemover(){return this.bundle.getClient().canUseAddon(Qe.BackgroundRemover)}async removeBackgroundFromImage(t=!0){if(!await this.canUseBackgroundRemover())throw new Error("The current Integration does not have access to the Background Remover. Please call canUseBackgroundRemover to ensure you disable this feature when appropriate.");const e=await this.getOriginalImage();if(!e)throw new Error("You must supply an image selection before attempting to remove the background.");const a=this.bundle.getGlobalPropertyStateManager(),i=await W.removeBackgroundFromAsset(e),o={...a.getAspectStorage(this.property.name),backgroundRemovedAssetKey:i.key,useOriginalAsset:!t},l=[t?a.setAspect(this.property.name,i.key,o):a.setAspectStorage(this.property.name,o)];return t&&(l.push(this.applyImageSelection(i,void 0,!1,!1)),l.push(this.loadImageData())),await Promise.all(l),this.updateSharedStepStorage(o),i}hasImage(){return!!this.getStateValue()}async getImage(){const t=this.getStateValue();if(t)return W.getLocalOrFromServer(t)}async getImageWithColors(){return await this.loadImageData(),this.imageData?.svg?Ve(qe(this.imageData.svg,this.imageData.colors??{},!1)):this.imageData?.src}async getOriginalImage(){const t=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);if(t?.originalAssetKey)return W.getLocalOrFromServer(t.originalAssetKey)}async getBackgroundRemovedImage(){const t=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);if(t?.backgroundRemovedAssetKey)return W.getLocalOrFromServer(t.backgroundRemovedAssetKey)}getUseOriginalImage(){return this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name)?.useOriginalAsset??!1}async setUseOriginalImage(t){const e=await this.getOriginalImage();if(!e)throw new Error("You must select an image before calling setUseOriginalImage");const a=this.bundle.getGlobalPropertyStateManager(),i=a.getAspectStorage(this.property.name);if(i?.useOriginalAsset===t)return;const r={...i,useOriginalAsset:t},o=t?i?.originalAssetKey:i?.backgroundRemovedAssetKey,s=[a.setAspect(this.property.name,o||"",r)];if(t)s.push(this.applyImageSelection(e,void 0,!1,!1));else{const l=async()=>{const c=await this.getBackgroundRemovedImage();if(!c)throw new Error("You must call removeBackgroundFromImage before attempting to use that version of the image.");this.applyImageSelection(c,void 0,!1,!1)};s.push(l())}s.push(this.loadImageData()),await Promise.all(s),this.updateSharedStepStorage(r)}async applyGlobalState(t){const e=this.getStateValue();if(!e)return;const a=await W.getLocalOrFromServer(e);if(!a)return;await this.applyImageSelection(a,t,!1,!0);const i=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);if(i){if(this.updateSharedStepStorage({...i}),i.colors){const r=new Map(i.colors.map(o=>[o.key,{browserValue:o.browserValue,pmsValue:o.pmsValue}])??[]);await Promise.all(this.getSharedSteps(t).map(async o=>{await o.changeColors(r)}))}}else this.updateSharedStepStorage({originalAssetKey:e}),await this.bundle.getGlobalPropertyStateManager().setAspectStorage(this.property.name,{originalAssetKey:e})}getAvailableColors(){return this.property.data?.fileUpload?.colorPickerEnabled?this.colorOption?.variants?.map(t=>({fill:t.color,stroke:t.color,variant:t,pmsValue:t.name}))??[]:[]}getCurrentColors(){return this.imageData?.colors}isColorPickerEnabled(){return this.property.data?.fileUpload?.colorPickerEnabled??!1}isPmsPickerEnabled(){return this.property.data?.fileUpload?.pmsPickerEnabled??!1}async getOriginalColors(){return this.imageData?.svg?(await rt(this.imageData.svg)).colors:void 0}async changeColors(t){if(!this.imageData?.svg)return;const e=this.getSharedSteps(),a=new Map(Object.entries(t));await Promise.all(e.map(async r=>{await r.changeColors(a)}));const i=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspectStorage(this.property.name,{...i,colors:Object.entries(t).map(([r,o])=>({key:r,browserValue:o.browserValue,pmsValue:o.pmsValue}))}),await this.loadImageData()])}async applyImageSelection(t,e,a=!0,i=!0){const o=this.getSharedSteps(e).map(s=>{const l=s;if(l.getFrameService())return l.selectImage(t,a,i)});await Promise.all(o)}updateSharedStepStorage(t){this.bundle.getWorkflowExperiences().forEach(a=>a.getSteps().forEach(i=>{if(i.getOverrideGlobalPropertyConfiguration(this.property.type))return;i.getRaw().globalPropertyAspectConfigurations?.some(o=>o.globalPropertyConfigurationId===this.bundle.getProductCollection()?.getResource().globalPropertyConfiguration?.id&&o.aspectName===this.property.name)&&a.getWorkflowManager().updateStorage(i.getId(),{framePatternData:{originalAssetKey:t.originalAssetKey,backgroundRemovedAssetKey:t.backgroundRemovedAssetKey,useOriginalAsset:t.useOriginalAsset}})}))}}class Ji extends Je{constructor(t,e){super(t,e)}isTemplatingEnabled(){return this.property.data?.text?.templatingEnabled||!1}getText(){const t=this.getStateValue();return t||""}async setText(t){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t,void 0,void 0),this.applyTextSelection(t)])}async applyGlobalState(t){const e=this.getStateValue();if(!e)return Promise.resolve();await this.applyTextSelection(e,t)}async applyTextSelection(t,e){const i=this.getSharedSteps(e).map(r=>{r.setText(t)});await Promise.all(i)}}class Za extends Je{constructor(t,e,a){super(t,e),this.optionResource=a}async ensureOptionLoaded(){if(this.optionResource?.variants)return this.optionResource;if(!this.property.entityId)return this.optionResource;const t=await P.getOption(this.property.entityId);return t&&(this.optionResource=t),this.optionResource}async initDefaultVariant(){await this.ensureOptionLoaded();const t=this.optionResource?.variants?.find(e=>e.id===this.optionResource?.defaultVariant?.id);t&&await this.selectVariant(new nt(t))}getCurrentVariant(){if(!this.optionResource)return;const t=this.getStateValue();if(t){const e=this.optionResource.variants?.find(a=>a.id===t);return e?new nt(e):void 0}else{const e=this.optionResource.variants?.find(a=>a.id===this.optionResource?.defaultVariant?.id);return e?new nt(e):void 0}}async getAvailableVariants(){return await this.ensureOptionLoaded(),(this.optionResource?.variants?.filter(e=>e.enabled)||[]).map(e=>new nt(e))}async getAllVariants(){return await this.ensureOptionLoaded(),(this.optionResource?.variants||[]).map(e=>new nt(e))}async selectVariant(t,e){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t.getId(),void 0,e),this.applyVariantSelection(t)])}async applyGlobalState(t){const e=this.getStateValue();if(!e)return;await this.ensureOptionLoaded();const a=this.optionResource?.variants?.find(i=>i.id===e);if(a)return this.applyVariantSelection(new nt(a),t)}async applyVariantSelection(t,e){const i=this.getSharedSteps(e).map(r=>r.selectVariant(t));await Promise.all(i)}}class xa extends Za{constructor(t,e,a){super(t,e,a)}async selectVariant(t,e){await this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t.getId(),void 0,e),await this.applyColorVariant(t,void 0,e)}async applyGlobalState(t){const e=this.getStateValue();if(!e)return;await this.ensureOptionLoaded();const a=this.optionResource?.variants?.find(r=>r.id===e);if(!a)return;await this.applyColorVariant(new nt(a),t);const i=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name)?.customColor;i&&this.setCustomColor(i)}async applyColorVariant(t,e,a){const r=this.getSharedSteps(e).map(o=>{switch(o.getType()){case E.Shape:return o.selectVariant(t);case E.Text:return o.setFillColor({fill:t.getColor(),stroke:t.getColor(),variant:t.getResource()});case E.Illustration:return o.setColor(a?.toString()||"",t.getColor()||"")}});await Promise.all(r)}setCustomColor(t){const e=this.getCurrentVariant()?.getColor();e&&e.toLowerCase()==="#custom"&&this.getSharedSteps().forEach(i=>i.setCustomColor(t)),this.bundle.getGlobalPropertyStateManager().setAspectStorage(this.property.name,{customColor:t})}getCustomColor(){return this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name)?.customColor||this.getCurrentVariant()?.getColor()||"#ffffff"}}const Tc=(n,t,e)=>{const a=n.getWorkflowExperiences(),i=n.getGlobalPropertyConfiguration();return i?a.flatMap(o=>o.getSteps()).filter(o=>o.getGlobalPropertyAspects(i.id).includes(t)&&o.getType()===e):[]},Ki=(n,t)=>{const a=Tc(n,t,E.Illustration).map(i=>{if(!i.getCurrentVariant()?.getAssetResource()?.assetConfiguration)return 0;const o=i.getColors();return o?Object.getOwnPropertyNames(o).length:0});return Math.max(...a)};function Fa(n,t){function e(a){if(typeof a>"u"||!Array.isArray(a)&&!Qc(a))return a;if(Array.isArray(a))return Fa(a,t);let i={};for(const[r,o]of Object.entries(a))i[r]=Nc(o)?o:Fa(o,t);return $r(i,t)}return Array.isArray(n)?n.map(e):e(n)}function Nc(n){return n==null}function Qc(n){return typeof n=="object"&&!Array.isArray(n)&&n!==null}function _i(n){const t=new Map;return n?.aspects?.forEach(e=>{e.value!==""&&t.set(e.name,!0)}),t}function Se(n){return Fa(n,["__typename"])}class Oc{constructor(t,e,a,i,r){this.mandatoryFulfilledAspects=new Map,this.bundleId=t,this.bundleOwnerId=e,this.configuration=a,this.bundleOptions=r;const o=r?.existingGlobalPropertyState;this.initPromise=o?Promise.resolve(o).then(()=>{console.log("Setting global property state to existing state."),this.globalPropertyState=Se(o),this.recalculateMandatoryStates()}):this.createGlobalPropertyState().then(s=>{console.log("Setting global property state to new state."),this.globalPropertyState=Se(s),this.recalculateMandatoryStates()}),this.onGlobalPropertyStateChange=i}async clearAspects(t){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const e=this.globalPropertyState.aspects;this.globalPropertyState.aspects=e.filter(a=>!t.includes(a.name))}recalculateMandatoryStates(){this.mandatoryFulfilledAspects=_i(this.globalPropertyState)}setBundleOptions(t){this.bundleOptions=t}getBundleOptions(){return this.bundleOptions}setConfiguration(t){this.configuration=t}getInitializationPromise(){return this.initPromise}getGlobalPropertyState(){return this.globalPropertyState}async setGlobalPropertyState(t){this.globalPropertyState||await this.initPromise;const e=Pt(this.globalPropertyState);this.globalPropertyState={...Se(t),id:e.id},this.recalculateMandatoryStates(),await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(e,this.globalPropertyState)}getAspectMandatoryFulfilled(t){return this.mandatoryFulfilledAspects.get(t)}getAspect(t,e){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const a=this.globalPropertyState.aspects.find(i=>i.name===t&&i.channel===e);if(a)return a.value}getAspectStorage(t,e){if(!this.globalPropertyState)throw new Error("Global property state not initialized");return this.globalPropertyState.aspects.find(a=>a.name===t&&a.channel===e)?.storage}async setAspect(t,e,a,i){if(!this.globalPropertyState)throw new Error("Global property state not initialized");if(!this.configuration)throw new Error("Global property configuration not linked to the state manager.");const r=this.configuration.aspects.find(l=>l.name===t);if(!r)throw new Error(`Failed to find configuration aspect with name: ${t}`);this.mandatoryFulfilledAspects.set(t,e!=="");const o=Pt(this.globalPropertyState),s=this.globalPropertyState.aspects.filter(l=>l.name===t);if(s.length>0)if(i){const l=s.find(c=>c.channel===i);if(l)l.value=e,l.type=r.type,l.channel=i,a!==void 0&&(l.storage=a!==null?a:void 0);else{if(i===1){const c=this.globalPropertyState.aspects.findIndex(d=>!d.channel&&d.name===t);c&&c>0&&this.globalPropertyState.aspects.splice(c,1)}this.globalPropertyState.aspects.push({name:t,value:e,type:r.type,storage:a!==null?a:void 0,channel:i})}}else{const l=s[0];l.value=e,l.type=r.type,a!==void 0&&(l.storage=a!==null?a:void 0)}else this.globalPropertyState.aspects.push({name:t,value:e,type:r.type,storage:a!==null?a:void 0,channel:i});te(o,this.globalPropertyState)||(await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(o,this.globalPropertyState))}async setAspectStorage(t,e,a){if(!this.globalPropertyState)throw new Error("Global property state not initialized");if(!this.configuration)throw new Error("Global property configuration not linked to the state manager.");const i=this.configuration.aspects.find(s=>s.name===t);if(!i)throw new Error(`Failed to find configuration aspect with name: ${t}`);const r=Pt(this.globalPropertyState),o=this.globalPropertyState.aspects.filter(s=>s.name===t);if(o.length>0)if(a){const s=o.find(l=>l.channel===a);s&&(s.storage=e!==null?e:void 0,s.type=i.type)}else{const s=o[0];s.storage=e!==null?e:void 0,s.type=i.type}else this.globalPropertyState.aspects.push({name:t,value:"",type:i.type,storage:e!==null?e:void 0,channel:a});te(r,this.globalPropertyState)||(await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(r,this.globalPropertyState))}async updateGlobalPropertyState(){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const t=await S.getShadowGraphqlClient().mutate({mutation:Rl,variables:{id:this.globalPropertyState.id,aspects:this.globalPropertyState.aspects.map(e=>{let a=e.type&&e.storage?{}:void 0;if(a)switch(e.type){case q.FileUpload:{a.fileUpload=e.storage;break}case q.Option:{a.option=e.storage;break}case q.ColorOption:{a=e.storage;break}}return{name:e.name,value:e.value,type:e.type,storage:a,channel:e.channel}})},context:{headers:{bundleOwnerId:this.bundleOwnerId,...this.bundleOptions?.additionalHeaders}}});if(t.data?.globalPropertyStateUpdate)this.globalPropertyState=Se(t.data.globalPropertyStateUpdate);else throw new Error("Unable to update global property state")}async createGlobalPropertyState(){const t=await S.getShadowGraphqlClient().mutate({mutation:Ol,variables:{bundleId:this.bundleId},context:{headers:{bundleOwnerId:this.bundleOwnerId,...this.bundleOptions?.additionalHeaders}}});if(t.data?.globalPropertyStateCreate&&t.data.globalPropertyStateCreate.id)return t.data.globalPropertyStateCreate;throw new Error(`Unable to create global property state for bundle: ${this.bundleId}`)}}class Rc{constructor(t){this.setState(t||'{"transactions": []}')}setState(t){t&&(this.state=JSON.parse(t))}getState(){return this.state}removeStateForTransaction(t){if(!this.state||!this.state.transactions)return;const e=this.state.transactions.findIndex(a=>a.transactionId===t);e!==-1&&this.state.transactions.splice(e,1)}getSerializedState(){if(this.state)return this.deleteFieldNameFromObjectRecursive(this.state,"__typename"),JSON.stringify(this.state)}deleteFieldNameFromObjectRecursive(t,e){if(!(typeof t!="object"||t===null))for(const a in t)a===e?delete t[a]:this.deleteFieldNameFromObjectRecursive(t[a],e)}}const $c=C.gql`
2284
+ `;var Qe=(n=>(n.PriceBreakChanged="PriceBreakChanged",n.ProductChanged="ProductChanged",n.QuantityChanged="QuantityChanged",n.RecipientChanged="RecipientChanged",n.SelectionChanged="SelectionChanged",n))(Qe||{});class Yi{constructor(t,e){this.cachedStepHandles=new Map,this.profanityList=[],this.currentPriceBreak=1,this.renderableScenes=[],this.renderableSceneCallbacks=[],this.eventCallbacks=new Map,this.debouncedSavedDesignUpdate=$n(async()=>{await Be.getSavedDesignByTransaction(this.getTransaction().id)&&this.save()},2500),this.getCanvasObjectURLAsync=async a=>new Promise((i,r)=>{try{a.toBlob(o=>{if(o){const s=URL.createObjectURL(o);i(s)}})}catch(o){r(o)}}),this.client=t,this.transaction=e.transaction,this.workflow=e.workflow,this.profanityList=this.transaction.product?.profanities?.map(a=>a.word)||[],this.isReadOnly=e.transaction.isOrdered||!!e.readOnly,this.graphQlClient=e.graphQlClient,this.workflowManager=new Pa(this,t,a=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return e.stateMutationFunc(a)},e.graphQlClient,e.reloadedState,e.readOnly,e.modelContainer,e.isReloadedTransaction,e.singleVariantsRenderable,e.delayWorkflowStateSync),this.workflowManager.addSelectionCallback(a=>{const i=a.traversableScenes.map(r=>{const o=r.renderableSteps.map(s=>s.stepName);return{id:r.name,title:r.title,renderableSteps:o,workflowScene:r}});this.renderableScenes=i,this.renderableSceneCallbacks.forEach(r=>r(i)),this.callEvent("SelectionChanged")}),this.currentPriceBreak=this.priceBreakToBeApplied()}getTransaction(){return this.transaction}getProduct(){return this.transaction.product}getProfanityList(){return this.profanityList}async setProduct(t){this.workflow=void 0;const e=await this.graphQlClient().mutate({mutation:Pn,variables:{id:this.getTransaction().id,integrationProductId:t}}),a=e.data?.transactionUpdateIntegrationProduct.product;if(!a)throw new O("Failed to set product. No product returned from server.");if(!this.bundle)throw new O("Cannot set product on experience that is not part of a bundle.");this.transaction.product={...this.transaction.product,...e.data?.transactionUpdateIntegrationProduct.product},this.transaction.integrationProduct={...this.transaction.integrationProduct,...e.data?.transactionUpdateIntegrationProduct.integrationProduct},this.transaction.workflowState=void 0,this.currentPriceBreak=this.priceBreakToBeApplied(),this.callEvent("ProductChanged");const i=(await this.bundle.getProductCollection().fetchProducts()).find(r=>r.getId()===a.id);try{const r=i?.getDefaultWorkflow();if(r){const o=await or(r.getId());await this.setWorkflow(o),console.log("Setting Product - Workflow set to default for product.")}}catch{console.log("Setting Product - No default workflow available, must be set manually.")}}async clearProduct(){if(!this.bundle)throw new O("Cannot clear product on experience that is not part of a bundle.");this.workflow=void 0,this.transaction.workflowState=void 0,this.transaction.product=void 0,this.transaction.integrationProduct=void 0,this.currentPriceBreak=this.priceBreakToBeApplied(),this.callEvent("ProductChanged"),await this.graphQlClient().mutate({mutation:Pn,variables:{id:this.getTransaction().id}})}getWorkflow(){return this.workflow}async setWorkflow(t){return this.workflow=t,await this.graphQlClient().mutate({mutation:zo,variables:{id:this.getTransaction().id,workflowId:t.id}}),this.workflowManager.setWorkflow(t)}async attachAddress(t,e,a,i,r,o){await this.graphQlClient().mutate({mutation:xc,variables:{transactionId:this.getTransaction().id,streetAddress:t||void 0,apartment:e||void 0,city:a||void 0,country:i||void 0,state:r||void 0,postCode:o||void 0}})}async attachOrganization(t){await this.graphQlClient().mutate({mutation:Fc,variables:{transactionId:this.getTransaction().id,organizationName:t}})}getBundle(){return this.bundle}setBundle(t){this.bundle=t}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.workflowManager.getCommandContext()}getWorkflowManager(){return this.workflowManager}async createPreviewImage(t,e){const a=this.getWorkflow(),i=a?.finalizeStepConfig?.lookAtAnimation;if(!a)throw new Error("Failed to generate cart preview image! No workflow is set.");if(t){if(!i)throw new Error("Failed to generate cart preview image! No camera orientation configured.");return await this.workflowManager.getPreviewService()?.renderSceneScreenshot(e??512,i)||""}let r=2048;e&&e<=2048&&(r=e);const o=yt(r,r),s=this.workflowManager.getCommandContext().getAllLayouts(),l=a.defaultPreviewPanelIndex||0,c=a.panels[l],d=s.find(w=>w.layoutState?.layout.panelId===c?.name)||s[0],u=d.layoutState.layout.previewRegion?{x:d.layoutState.layout.previewRegion.left,y:d.layoutState.layout.previewRegion.top,width:d.layoutState.layout.previewRegion.width,height:d.layoutState.layout.previewRegion.height}:{x:0,y:0,width:d.layoutState.layout.width,height:d.layoutState.layout.height},A=this.workflowManager.getCommandContext().getLayoutById(d.layoutState.layout.id),h=o.getContext("2d");if(!h)throw new $e("Failed to obtain 2D context for preview image creation");const g=this.workflowManager.getTemplatingContext(),p=We(A.layoutState.layout,A.layoutState.elements,{renderingConfiguration:{purpose:Ot.Print,region:{left:u.x,top:u.y,width:u.width,height:u.height},templatingContext:g}}),m=Kn(p);await(await Ma.Pith.from(h,m,{anonymousCrossOrigin:!0,ignoreDimensions:!1,createCanvas:yt,createImage:le,DOMParser:Ra(),fetch})).render();const y=await this.getCanvasObjectURLAsync(o);return o.toDataURL(y)}getStepById(t){const e=this.getWorkflow()?.steps.find(r=>r.stepName===t);if(!e||!this.stepHasHandle(e))return;const a=this.cachedStepHandles.get(e.stepName);if(a)return a;const i=Se.get(this.getWorkflowManager(),e);return this.cachedStepHandles.set(e.stepName,i),i}getSteps(){return this.getScenes().flatMap(t=>this.getStepsByScene(t))}getStepsConditionallyActive(){return this.getScenes().flatMap(t=>this.getStepsByScene(t).filter(e=>Bt(e.getRaw(),this.getWorkflowManager().getStepSelections())))}getScenes(){return(this.getWorkflow()?.stepGroups||[]).map(e=>({id:e.id,name:e.name,stepIds:e.stepNames}))}getSelectionPriceSubunits(t){const e=this.getWorkflowManager().getWorkflowSelections();let a=0;return Object.values(e).forEach(i=>{a+=i.selections.reduce((r,o)=>r+(o.priceModifier||0),0)}),this.getPriceSubUnitsAfterPriceBreaks(a,t)}getBasePriceSubunits(t,e){const a=this.getPriceSubUnitsAfterPriceBreaks(this.getProduct()?.basePrice||0,e);if(t){const i=this.getAdditionalProductPriceSubunits(e)||0;return a+i}return a}getAdditionalProductPriceSubunits(t){const e=this.getTransaction().integrationProduct;if(e?.additionalIntegrationProduct?.product){const a=e.additionalIntegrationProduct.product.basePrice||0;return this.getPriceSubUnitsAfterPriceBreaks(a,t)}}getTotalPriceSubunits(t){return this.getBasePriceSubunits(!1,t)+this.getSelectionPriceSubunits(t)}getPriceSubUnitsAfterPriceBreaks(t,e){const a=e?1:this.priceBreakToBeApplied(),i=t*a;return Math.ceil(i)}priceBreakToBeApplied(){const t=(this.getProduct()?.priceBreaks||[]).sort((i,r)=>-(i.minQty-r.minQty)),a=[...this.getMatchingExperiencesFromBundle(),this].reduce((i,r)=>i+r.getQuantity(),0);for(const i of t)if(i.minQty<=a)return i.percentage;return 1}checkForPriceBreakChanges(){const t=this.priceBreakToBeApplied();this.currentPriceBreak!==t&&(this.updatePriceBreak(t),this.getMatchingExperiencesFromBundle().forEach(e=>e.updatePriceBreak(t)))}getMatchingExperiencesFromBundle(){return(this.bundle?.getWorkflowExperiences()||[]).filter(t=>{const e=t.getTransaction().id,a=this.getTransaction().id,i=t.getProduct()?.id,r=this.getProduct()?.id;return e!==a&&i===r})}updatePriceBreak(t){this.currentPriceBreak=t,this.callEvent("PriceBreakChanged")}async copySelectionsViaGlobalConfiguration(t,e,a){const i=await t.getGlobalProperties(),r=a?.map(c=>c.getId()),o=this.getSteps().filter(c=>r===void 0||r.includes(c.getId())),s=e.getSteps(),l=c=>i.find(d=>d.getRawProperty().name===c.aspectName);o.forEach(c=>{const d=new Set,u=c.getRaw().globalPropertyAspectConfigurations;u!==void 0&&(u.forEach(A=>d.add(JSON.stringify(A))),s.forEach(A=>{const h=A.getRaw().globalPropertyAspectConfigurations;h!==void 0&&h.forEach(g=>{const p=l(g),m=d.has(JSON.stringify(g));if(m&&p?.getType()==="Option"){const f=A.getCurrentVariant();if(!f)return;c.selectVariant(f),d.delete(JSON.stringify(g))}else if(m&&p?.getType()==="Text"){const f=A.getText();c.setText(f),d.delete(JSON.stringify(g))}})}))})}getStepByName(t){const e=this.getWorkflow()?.steps.find(a=>a.stepTitle===t);if(!(!e||!this.stepHasHandle(e)))return Se.get(this.getWorkflowManager(),e)}getStepsByType(t){return this.getWorkflow()?.steps.filter(e=>e.type===t).map(e=>Se.get(this.getWorkflowManager(),e))||[]}getStepsByScene(t){const e=this.getWorkflow();if(!e?.stepGroups.find(i=>i.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(i=>e.steps.find(r=>r.stepName===i)).filter(i=>!!i&&this.stepHasHandle(i)).map(i=>Se.get(this.getWorkflowManager(),i))}async attachCustomerDetails(t){return this.assignCustomerDetails({emailAddress:t.email})}async assignCustomerDetails(t){const a=(await this.graphQlClient().mutate({mutation:Pc,variables:{id:this.getTransaction().id,details:t,type:"Owner"}})).data?.transactionAddStakeholder?.stakeholders?.find(i=>i.customer?.emailAddress===t.emailAddress);if(a?.customer){this.getWorkflowManager().setTransactionCustomer(a.customer);const i=Q.getMap("transactionCustomerIds")||new Map;i.set(this.getTransaction().id,a.customer.id),Q.setMap("transactionCustomerIds",i)}}attachRenderableSceneListener(t){this.renderableSceneCallbacks.push(t),t(this.renderableScenes)}detachRenderableSceneListener(t){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter(e=>e!==t)}async save(t){const e=this.getProduct(),a=this.getWorkflow(),i=this.getCommandContext().getState();if(!e)throw new O("Product undefined!");if(!a)throw new O("Workflow undefined!");if(!i)throw new O("State undefined!");const o={title:await(async()=>{if(t)return t;const s=this.getTransaction().id,c=(await Be.getSavedDesigns()).find(d=>d.transactionId===s)?.title;return c||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getTransaction().id,productId:e.id,integrationProductId:this.getTransaction().integrationProduct.id,workflowName:a.name,workflowId:a.id,lastEdited:new Date};return await Be.addDesign(o),o}async copy(){const t=Pt(this.getCommandContext().getState());if(!t)throw new O("Internal state is undefined! Cannot copy experience!");const e=JSON.stringify(t.transaction),a=this.getWorkflow();if(!a)throw new O("Workflow is undefined! Cannot copy experience!");const i=this.getTransaction().integrationProduct?.id;if(!i)throw new O("Integration product id is undefined!");return await this.getClient().getWorkflowExperience({type:"integration",integrationProductId:i,workflowId:a.id,workflowState:e})}async onDesignFinished(t=!0){const e=this.getTransaction(),a=this.getProduct(),i=this.getWorkflow();if(!a)throw new O("Product undefined! Cannot finish an experience without a product.");if(!i)throw new O("Workflow undefined! Cannot finish an experience without a workflow.");if(e.isOrdered)return{event:"",exportedData:{},lineItemImageUrl:"",optionsCost:0,transactionId:e.id,workflowViewerLink:"",workflowViewerReadOnlyLink:""};const r=await Wi([{workflowManager:this.workflowManager,workflow:i,layouts:this.workflowManager.getLayouts(),getReducerState:()=>this.workflowManager.getCommandContext().getState(),product:a,transaction:e,workflowSelections:this.workflowManager.getWorkflowSelections(),workflowMetadata:this.workflowManager.getWorkflowMetadata(),designName:i.name}],o=>t?this.createPreviewImage(o,1024):Promise.resolve(void 0));return e.completed&&await this.graphQlClient().mutate({mutation:_o,variables:{transactionId:e.id}}),r[0]}stepHasHandle(t){return t.type!==E.SilentIllustration&&t.type!==E.ProductOverlay}async getExportedStepData(){const t=this.getWorkflow(),e=this.getWorkflowManager().getWorkflowMetadata(),a=this.getWorkflowManager().getWorkflowSelections(),i=[];for(const r of t?.steps||[]){const o=r.stepName,s=e[o],l=a[o]?.selections[0],c={stepId:o,title:r.stepTitle,properties:[]};if(l&&await kc(r,a)&&c.properties.push({type:"selection",value:l.name,priceModifier:l.priceModifier}),!s){i.push(c);continue}switch(r.type){case E.Frame:{const d=r.data,u=s;u.image&&d.displayImageOnFinishStep&&c.properties.push({type:"image",value:u.image,priceModifier:0})}break;case E.Illustration:{const d=r.data,u=s;if(u&&u.colors&&u.colors.length>0&&d.displayColorsOnFinishStep){const A=u.colors.join(", ").toUpperCase();c.properties.push({type:"color",value:A,priceModifier:0})}}break;case E.Module:{const d=r.data,u=s;u&&u.text&&d.displayTextOnFinishStep&&c.properties.push({type:"text",value:u.text,priceModifier:0})}break;case E.Text:{const d=r.data,u=s;u&&u.text&&d.displayTextOnFinishStep&&c.properties.push({type:"text",value:u.text,priceModifier:0}),u&&u.color&&d.displayColorOnFinishStep&&c.properties.push({type:"color",value:u.color,priceModifier:0})}}i.push(c)}return i.filter(r=>r.properties&&r.properties.length>0)}getQuantity(){return this.getTransaction().quantity||1}async setQuantity(t){if(t<1)throw new RangeError("WorkflowExperience quantity must be greater than zero.");if(this.isReadOnly)throw new Error("Cannot update quantity on a read-only WorkflowExperience");this.getTransaction().quantity=t,this.callEvent("QuantityChanged"),this.checkForPriceBreakChanges();const e=this.getTransaction();await this.graphQlClient().mutate({mutation:qo,variables:{id:e.id,quantity:t}})}addEventListener(t,e){const a=this.eventCallbacks.get(t)||[];a.push(e),this.eventCallbacks.set(t,a)}removeEventListener(t,e){const a=this.eventCallbacks.get(t)||[];this.eventCallbacks.set(t,a.filter(i=>i!==e))}callEvent(t){(this.eventCallbacks.get(t)||[]).forEach(e=>e(this))}}const Dc=n=>{if([E.Question,E.Frame,E.Illustration,E.Material,E.Model,E.Picture,E.Shape,E.Text].includes(n.type)){const e=n.data;return!!e.displaySelectionOnFinishStep||!!e.displaySelectionsOnFinishStep}return!1},kc=async(n,t)=>{if(!Dc(n))return!1;const e=await P.getOptionForStep(n);if(e&&(e.variants||[]).length>1){const a=t[n.stepName];return!!(a&&a.selections.length>0)}return!1};class Mc{constructor(t){this.handleCache={},this.bundle=t}async getHandle(t){if(this.handleCache[t.name])return this.handleCache[t.name];const e=await this.createHandle(t);return this.handleCache[t.name]=e,e}async getHandles(){if(!this.bundle.getProductCollection()?.getResource().globalPropertyConfiguration)return[];await this.bundle.getGlobalPropertyStateManager().getInitializationPromise();const t=this.bundle.getProductCollection()?.getResource().globalPropertyConfiguration;return t?Promise.all(t.aspects.map(e=>this.getHandle(e))):[]}applyConditionsFromState(t,e){return e?t.filter(a=>this.aspectConditionsSatisfied(a.getRawProperty(),e)):t}aspectConditionsSatisfied(t,e){return!t.conditions||t.conditions.length===0?!0:(t.conditionMode===Vn.AND?Array.prototype.every.bind(t.conditions):Array.prototype.some.bind(t.conditions))(i=>{const r=e.aspects.find(o=>o.name===i.targetAspectName);return r?i.requiredVariantSelections.some(o=>o===r.value):!1})}async createHandle(t){switch(t.type){case q.FileUpload:return new Ji(this.bundle,t).initialize();case q.ColorOption:return new xa(this.bundle,t,t.entityId?await P.getOption(t.entityId):void 0);case q.Option:{const e=t.entityId?await P.getOption(t.entityId):void 0;return e?.type==="Color"?new xa(this.bundle,t,e):new Za(this.bundle,t,e)}case q.Text:return new Ki(this.bundle,t);default:throw new Error("Unhandled Global Property Aspect Type")}}}class Ke{constructor(t,e){this.bundle=t,this.property=e}getName(){return this.property.name}getTitle(){return this.property.title}getDescription(){return this.property.description}getType(){return this.property.type}getRawProperty(){return this.property}isMandatory(){return!!this.property.mandatory}isMandatoryFulfilled(){return!this.property.mandatory||!!this.bundle.getGlobalPropertyStateManager().getAspectMandatoryFulfilled(this.property.name)}getSharedSteps(t){return(t??this.bundle.getWorkflowExperiences()).flatMap(i=>i.getStepsConditionallyActive().filter(r=>r.getOverrideGlobalPropertyConfiguration(this.property.type)?!1:r.getRaw().globalPropertyAspectConfigurations?.some(o=>o.globalPropertyConfigurationId===this.bundle.getProductCollection()?.getResource().globalPropertyConfiguration?.id&&o.aspectName===this.property.name)))}getStateValue(){return this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name)}}class Ji extends Ke{constructor(t,e){super(t,e)}async initialize(){return this.property.data?.fileUpload?.colorOptionId&&(this.colorOption=await P.getOption(this.property.data?.fileUpload?.colorOptionId)),await this.loadImageData(),this}async loadImageData(){const t=await this.getImage();if(t?.fileLink)if(t?.fileLink.endsWith(".svg")){const e=await et(t?.fileLink),a=await za(t?.fileLink),i=a.width,r=a.height,o=await rt(e);this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name)?.colors?.forEach(c=>{o.colors[c.key]={browserValue:c.browserValue,pmsValue:c.pmsValue}});const l={src:t?.fileLink,width:i,height:r,aspect:i/r,svg:o.svg,colors:o.colors};At.set(t?.fileLink,l),this.imageData=l}else this.imageData=void 0}async selectImage(t){const e=this.bundle.getGlobalPropertyStateManager();await Promise.all([e.setAspect(this.property.name,t.key,{...e.getAspectStorage(this.property.name)||{},originalAssetKey:t.key,backgroundRemovedAssetKey:void 0,useOriginalAsset:void 0},void 0),this.applyImageSelection(t),this.loadImageData()])}async canUseBackgroundRemover(){return this.bundle.getClient().canUseAddon(Oe.BackgroundRemover)}async removeBackgroundFromImage(t=!0){if(!await this.canUseBackgroundRemover())throw new Error("The current Integration does not have access to the Background Remover. Please call canUseBackgroundRemover to ensure you disable this feature when appropriate.");const e=await this.getOriginalImage();if(!e)throw new Error("You must supply an image selection before attempting to remove the background.");const a=this.bundle.getGlobalPropertyStateManager(),i=await W.removeBackgroundFromAsset(e),o={...a.getAspectStorage(this.property.name),backgroundRemovedAssetKey:i.key,useOriginalAsset:!t},l=[t?a.setAspect(this.property.name,i.key,o):a.setAspectStorage(this.property.name,o)];return t&&(l.push(this.applyImageSelection(i,void 0,!1,!1)),l.push(this.loadImageData())),await Promise.all(l),this.updateSharedStepStorage(o),i}hasImage(){return!!this.getStateValue()}async getImage(){const t=this.getStateValue();if(t)return W.getLocalOrFromServer(t)}async getImageWithColors(){return await this.loadImageData(),this.imageData?.svg?Le(ze(this.imageData.svg,this.imageData.colors??{},!1)):this.imageData?.src}async getOriginalImage(){const t=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);if(t?.originalAssetKey)return W.getLocalOrFromServer(t.originalAssetKey)}async getBackgroundRemovedImage(){const t=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);if(t?.backgroundRemovedAssetKey)return W.getLocalOrFromServer(t.backgroundRemovedAssetKey)}getUseOriginalImage(){return this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name)?.useOriginalAsset??!1}async setUseOriginalImage(t){const e=await this.getOriginalImage();if(!e)throw new Error("You must select an image before calling setUseOriginalImage");const a=this.bundle.getGlobalPropertyStateManager(),i=a.getAspectStorage(this.property.name);if(i?.useOriginalAsset===t)return;const r={...i,useOriginalAsset:t},o=t?i?.originalAssetKey:i?.backgroundRemovedAssetKey,s=[a.setAspect(this.property.name,o||"",r)];if(t)s.push(this.applyImageSelection(e,void 0,!1,!1));else{const l=async()=>{const c=await this.getBackgroundRemovedImage();if(!c)throw new Error("You must call removeBackgroundFromImage before attempting to use that version of the image.");this.applyImageSelection(c,void 0,!1,!1)};s.push(l())}s.push(this.loadImageData()),await Promise.all(s),this.updateSharedStepStorage(r)}async applyGlobalState(t){const e=this.getStateValue();if(!e)return;const a=await W.getLocalOrFromServer(e);if(!a)return;await this.applyImageSelection(a,t,!1,!0);const i=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);if(i){if(this.updateSharedStepStorage({...i}),i.colors){const r=new Map(i.colors.map(o=>[o.key,{browserValue:o.browserValue,pmsValue:o.pmsValue}])??[]);await Promise.all(this.getSharedSteps(t).map(async o=>{await o.changeColors(r)}))}}else this.updateSharedStepStorage({originalAssetKey:e}),await this.bundle.getGlobalPropertyStateManager().setAspectStorage(this.property.name,{originalAssetKey:e})}getAvailableColors(){return this.property.data?.fileUpload?.colorPickerEnabled?this.colorOption?.variants?.map(t=>({fill:t.color,stroke:t.color,variant:t,pmsValue:t.name}))??[]:[]}getCurrentColors(){return this.imageData?.colors}isColorPickerEnabled(){return this.property.data?.fileUpload?.colorPickerEnabled??!1}isPmsPickerEnabled(){return this.property.data?.fileUpload?.pmsPickerEnabled??!1}async getOriginalColors(){return this.imageData?.svg?(await rt(this.imageData.svg)).colors:void 0}async changeColors(t){if(!this.imageData?.svg)return;const e=this.getSharedSteps(),a=new Map(Object.entries(t));await Promise.all(e.map(async r=>{await r.changeColors(a)}));const i=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name);await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspectStorage(this.property.name,{...i,colors:Object.entries(t).map(([r,o])=>({key:r,browserValue:o.browserValue,pmsValue:o.pmsValue}))}),await this.loadImageData()])}async applyImageSelection(t,e,a=!0,i=!0){const o=this.getSharedSteps(e).map(s=>{const l=s;if(l.getFrameService())return l.selectImage(t,a,i)});await Promise.all(o)}updateSharedStepStorage(t){this.bundle.getWorkflowExperiences().forEach(a=>a.getSteps().forEach(i=>{if(i.getOverrideGlobalPropertyConfiguration(this.property.type))return;i.getRaw().globalPropertyAspectConfigurations?.some(o=>o.globalPropertyConfigurationId===this.bundle.getProductCollection()?.getResource().globalPropertyConfiguration?.id&&o.aspectName===this.property.name)&&a.getWorkflowManager().updateStorage(i.getId(),{framePatternData:{originalAssetKey:t.originalAssetKey,backgroundRemovedAssetKey:t.backgroundRemovedAssetKey,useOriginalAsset:t.useOriginalAsset}})}))}}class Ki extends Ke{constructor(t,e){super(t,e)}isTemplatingEnabled(){return this.property.data?.text?.templatingEnabled||!1}getText(){const t=this.getStateValue();return t||""}async setText(t){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t,void 0,void 0),this.applyTextSelection(t)])}async applyGlobalState(t){const e=this.getStateValue();if(!e)return Promise.resolve();await this.applyTextSelection(e,t)}async applyTextSelection(t,e){const i=this.getSharedSteps(e).map(r=>{r.setText(t)});await Promise.all(i)}}class Za extends Ke{constructor(t,e,a){super(t,e),this.optionResource=a}async ensureOptionLoaded(){if(this.optionResource?.variants)return this.optionResource;if(!this.property.entityId)return this.optionResource;const t=await P.getOption(this.property.entityId);return t&&(this.optionResource=t),this.optionResource}async initDefaultVariant(){await this.ensureOptionLoaded();const t=this.optionResource?.variants?.find(e=>e.id===this.optionResource?.defaultVariant?.id);t&&await this.selectVariant(new nt(t))}getCurrentVariant(){if(!this.optionResource)return;const t=this.getStateValue();if(t){const e=this.optionResource.variants?.find(a=>a.id===t);return e?new nt(e):void 0}else{const e=this.optionResource.variants?.find(a=>a.id===this.optionResource?.defaultVariant?.id);return e?new nt(e):void 0}}async getAvailableVariants(){return await this.ensureOptionLoaded(),(this.optionResource?.variants?.filter(e=>e.enabled)||[]).map(e=>new nt(e))}async getAllVariants(){return await this.ensureOptionLoaded(),(this.optionResource?.variants||[]).map(e=>new nt(e))}async selectVariant(t,e){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t.getId(),void 0,e),this.applyVariantSelection(t)])}async applyGlobalState(t){const e=this.getStateValue();if(!e)return;await this.ensureOptionLoaded();const a=this.optionResource?.variants?.find(i=>i.id===e);if(a)return this.applyVariantSelection(new nt(a),t)}async applyVariantSelection(t,e){const i=this.getSharedSteps(e).map(r=>r.selectVariant(t));await Promise.all(i)}}class xa extends Za{constructor(t,e,a){super(t,e,a)}async selectVariant(t,e){await this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t.getId(),void 0,e),await this.applyColorVariant(t,void 0,e)}async applyGlobalState(t){const e=this.getStateValue();if(!e)return;await this.ensureOptionLoaded();const a=this.optionResource?.variants?.find(r=>r.id===e);if(!a)return;await this.applyColorVariant(new nt(a),t);const i=this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name)?.customColor;i&&this.setCustomColor(i)}async applyColorVariant(t,e,a){const r=this.getSharedSteps(e).map(o=>{switch(o.getType()){case E.Shape:return o.selectVariant(t);case E.Text:return o.setFillColor({fill:t.getColor(),stroke:t.getColor(),variant:t.getResource()});case E.Illustration:return o.setColor(a?.toString()||"",t.getColor()||"")}});await Promise.all(r)}setCustomColor(t){const e=this.getCurrentVariant()?.getColor();e&&e.toLowerCase()==="#custom"&&this.getSharedSteps().forEach(i=>i.setCustomColor(t)),this.bundle.getGlobalPropertyStateManager().setAspectStorage(this.property.name,{customColor:t})}getCustomColor(){return this.bundle.getGlobalPropertyStateManager().getAspectStorage(this.property.name)?.customColor||this.getCurrentVariant()?.getColor()||"#ffffff"}}const Tc=(n,t,e)=>{const a=n.getWorkflowExperiences(),i=n.getGlobalPropertyConfiguration();return i?a.flatMap(o=>o.getSteps()).filter(o=>o.getGlobalPropertyAspects(i.id).includes(t)&&o.getType()===e):[]},_i=(n,t)=>{const a=Tc(n,t,E.Illustration).map(i=>{if(!i.getCurrentVariant()?.getAssetResource()?.assetConfiguration)return 0;const o=i.getColors();return o?Object.getOwnPropertyNames(o).length:0});return Math.max(...a)};function Fa(n,t){function e(a){if(typeof a>"u"||!Array.isArray(a)&&!Qc(a))return a;if(Array.isArray(a))return Fa(a,t);let i={};for(const[r,o]of Object.entries(a))i[r]=Nc(o)?o:Fa(o,t);return Ur(i,t)}return Array.isArray(n)?n.map(e):e(n)}function Nc(n){return n==null}function Qc(n){return typeof n=="object"&&!Array.isArray(n)&&n!==null}function Xi(n){const t=new Map;return n?.aspects?.forEach(e=>{e.value!==""&&t.set(e.name,!0)}),t}function ve(n){return Fa(n,["__typename"])}class Oc{constructor(t,e,a,i,r){this.mandatoryFulfilledAspects=new Map,this.bundleId=t,this.bundleOwnerId=e,this.configuration=a,this.bundleOptions=r;const o=r?.existingGlobalPropertyState;this.initPromise=o?Promise.resolve(o).then(()=>{console.log("Setting global property state to existing state."),this.globalPropertyState=ve(o),this.recalculateMandatoryStates()}):this.createGlobalPropertyState().then(s=>{console.log("Setting global property state to new state."),this.globalPropertyState=ve(s),this.recalculateMandatoryStates()}),this.onGlobalPropertyStateChange=i}async clearAspects(t){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const e=this.globalPropertyState.aspects;this.globalPropertyState.aspects=e.filter(a=>!t.includes(a.name))}recalculateMandatoryStates(){this.mandatoryFulfilledAspects=Xi(this.globalPropertyState)}setBundleOptions(t){this.bundleOptions=t}getBundleOptions(){return this.bundleOptions}setConfiguration(t){this.configuration=t}getInitializationPromise(){return this.initPromise}getGlobalPropertyState(){return this.globalPropertyState}async setGlobalPropertyState(t){this.globalPropertyState||await this.initPromise;const e=Pt(this.globalPropertyState);this.globalPropertyState={...ve(t),id:e.id},this.recalculateMandatoryStates(),await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(e,this.globalPropertyState)}getAspectMandatoryFulfilled(t){return this.mandatoryFulfilledAspects.get(t)}getAspect(t,e){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const a=this.globalPropertyState.aspects.find(i=>i.name===t&&i.channel===e);if(a)return a.value}getAspectStorage(t,e){if(!this.globalPropertyState)throw new Error("Global property state not initialized");return this.globalPropertyState.aspects.find(a=>a.name===t&&a.channel===e)?.storage}async setAspect(t,e,a,i){if(!this.globalPropertyState)throw new Error("Global property state not initialized");if(!this.configuration)throw new Error("Global property configuration not linked to the state manager.");const r=this.configuration.aspects.find(l=>l.name===t);if(!r)throw new Error(`Failed to find configuration aspect with name: ${t}`);this.mandatoryFulfilledAspects.set(t,e!=="");const o=Pt(this.globalPropertyState),s=this.globalPropertyState.aspects.filter(l=>l.name===t);if(s.length>0)if(i){const l=s.find(c=>c.channel===i);if(l)l.value=e,l.type=r.type,l.channel=i,a!==void 0&&(l.storage=a!==null?a:void 0);else{if(i===1){const c=this.globalPropertyState.aspects.findIndex(d=>!d.channel&&d.name===t);c&&c>0&&this.globalPropertyState.aspects.splice(c,1)}this.globalPropertyState.aspects.push({name:t,value:e,type:r.type,storage:a!==null?a:void 0,channel:i})}}else{const l=s[0];l.value=e,l.type=r.type,a!==void 0&&(l.storage=a!==null?a:void 0)}else this.globalPropertyState.aspects.push({name:t,value:e,type:r.type,storage:a!==null?a:void 0,channel:i});te(o,this.globalPropertyState)||(await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(o,this.globalPropertyState))}async setAspectStorage(t,e,a){if(!this.globalPropertyState)throw new Error("Global property state not initialized");if(!this.configuration)throw new Error("Global property configuration not linked to the state manager.");const i=this.configuration.aspects.find(s=>s.name===t);if(!i)throw new Error(`Failed to find configuration aspect with name: ${t}`);const r=Pt(this.globalPropertyState),o=this.globalPropertyState.aspects.filter(s=>s.name===t);if(o.length>0)if(a){const s=o.find(l=>l.channel===a);s&&(s.storage=e!==null?e:void 0,s.type=i.type)}else{const s=o[0];s.storage=e!==null?e:void 0,s.type=i.type}else this.globalPropertyState.aspects.push({name:t,value:"",type:i.type,storage:e!==null?e:void 0,channel:a});te(r,this.globalPropertyState)||(await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(r,this.globalPropertyState))}async updateGlobalPropertyState(){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const t=await S.getShadowGraphqlClient().mutate({mutation:Rl,variables:{id:this.globalPropertyState.id,aspects:this.globalPropertyState.aspects.map(e=>{let a=e.type&&e.storage?{}:void 0;if(a)switch(e.type){case q.FileUpload:{a.fileUpload=e.storage;break}case q.Option:{a.option=e.storage;break}case q.ColorOption:{a=e.storage;break}}return{name:e.name,value:e.value,type:e.type,storage:a,channel:e.channel}})},context:{headers:{bundleOwnerId:this.bundleOwnerId,...this.bundleOptions?.additionalHeaders}}});if(t.data?.globalPropertyStateUpdate)this.globalPropertyState=ve(t.data.globalPropertyStateUpdate);else throw new Error("Unable to update global property state")}async createGlobalPropertyState(){const t=await S.getShadowGraphqlClient().mutate({mutation:Ol,variables:{bundleId:this.bundleId},context:{headers:{bundleOwnerId:this.bundleOwnerId,...this.bundleOptions?.additionalHeaders}}});if(t.data?.globalPropertyStateCreate&&t.data.globalPropertyStateCreate.id)return t.data.globalPropertyStateCreate;throw new Error(`Unable to create global property state for bundle: ${this.bundleId}`)}}class Rc{constructor(t){this.setState(t||'{"transactions": []}')}setState(t){t&&(this.state=JSON.parse(t))}getState(){return this.state}removeStateForTransaction(t){if(!this.state||!this.state.transactions)return;const e=this.state.transactions.findIndex(a=>a.transactionId===t);e!==-1&&this.state.transactions.splice(e,1)}getSerializedState(){if(this.state)return this.deleteFieldNameFromObjectRecursive(this.state,"__typename"),JSON.stringify(this.state)}deleteFieldNameFromObjectRecursive(t,e){if(!(typeof t!="object"||t===null))for(const a in t)a===e?delete t[a]:this.deleteFieldNameFromObjectRecursive(t[a],e)}}const $c=C.gql`
2284
2285
  query GetManyMetafields($entityIds: [String!]!) {
2285
2286
  metafieldsMany(entityIds: $entityIds) {
2286
2287
  id
@@ -2291,8 +2292,8 @@
2291
2292
  }
2292
2293
  }
2293
2294
  }
2294
- `;class Uc{constructor(){this.internalMap=new Map}async requestKeysForEntity(t,e){const a=new Map;return await this.ensureIdsArePresent([t]),e.forEach(i=>{const r=this.requestKeyForEntityIfAvailable(t,i);r&&a.set(i,r)}),a}async ensureIdsArePresent(t){if(t.every(a=>this.internalMap.has(a)))return;const e=await S.getShadowGraphqlClient().query({query:$c,errorPolicy:"all",variables:{entityIds:t.filter(a=>!this.internalMap.has(a))}});t.forEach((a,i)=>{const r=e.data.metafieldsMany[i];this.internalMap.set(a,r.map(o=>({key:o.metafieldConfiguration.name,value:o.value})))})}async requestKeyForEntity(t,e){if(!this.internalMap.has(t))return;let a=this.internalMap.get(t);const i=a.find(r=>r.key===e);return i||(await this.ensureIdsArePresent([t]),a=this.internalMap.get(t)),i?JSON.parse(i.value):void 0}requestKeyForEntityIfAvailable(t,e){if(!this.internalMap.has(t))return;const i=this.internalMap.get(t).find(r=>r.key===e);if(i)return JSON.parse(i.value)}}const Xi=new Uc;var Zi=(n=>(n.Default="Default",n.Name="Name",n.Price="Price",n))(Zi||{});class tn{constructor(t){this.fullFetched=!1,this.collection=t;const e=this.collection.productCollectionProducts;e&&e.length>0&&(this.fullFetched=!0)}getId(){return this.collection.id}getName(){return this.collection.name}getDescription(){return this.collection.description||""}getDispatchStartDate(){if(this.collection.dispatchStartDate)return new Date(this.collection.dispatchStartDate)}getDispatchEndDate(){if(this.collection.dispatchEndDate)return new Date(this.collection.dispatchEndDate)}getImage(){return this.collection.image}getProducts(){if(!this.collection.productCollectionProducts)throw new Error("Failed to find products on collection. Ensure you fetch them first!");return this.collection.productCollectionProducts.filter(t=>!!t.product).map(t=>new Wt(t))}async fetchProducts(t){if(this.fullFetched)return(this.collection.productCollectionProducts??[]).filter(a=>!!a.product).map(a=>new Wt(a));const e=await S.getShadowGraphqlClient().query({query:zl,variables:{id:this.getId(),productIds:t},errorPolicy:"all"});return t||(this.fullFetched=!0),this.collection.productCollectionProducts=e.data.productCollections[0].productCollectionProducts||[],this.collection.productCollectionProducts.filter(a=>!!a.product).map(a=>new Wt(a))}async filterProducts(t,e,a,i){const r=await S.getShadowGraphqlClient().query({query:Gl,errorPolicy:"all",variables:{id:this.getId(),filters:t?{link:"And",metafields:t}:void 0,tags:e?{include:e.include??[],exclude:e.exclude??[]}:void 0,sortKey:a,sortDescending:i}});if(!r.data?.productCollections||r.data?.productCollections.length===0)throw new Error("Failed to filter product collection products.");const o=this.getProducts(),s=r.data.productCollections[0].productCollectionProducts.map(l=>l.product.id);return o.filter(l=>s.includes(l.getId()))}async fetchProductsFeed(t,e,a,i,r,o,s,l){if(this.fullFetched){const A=await(a?this.filterProducts(a):this.fetchProducts());return{total:A.length,items:A.slice(t,t+e)}}const c=new AbortController,{signal:d}=c,u=S.getShadowGraphqlClient().watchQuery({query:jl,variables:{id:this.getId(),limit:e,offset:t,productFilters:a?{link:"And",metafields:a}:void 0,productWorkflowFilters:l?{link:"And",metafields:l}:void 0,tags:i?{include:i.include??[],exclude:i.exclude??[]}:void 0,sortKey:r,sortDescending:o,quickSearch:s},errorPolicy:"all",fetchPolicy:"cache-first",returnPartialData:!0,context:{fetchOptions:{signal:d}}});return new Promise(A=>{let h=!1;const g=u.subscribe({next(p){if(h||p.partial&&(!p.data.productCollections||p.data.productCollections.length===0||!p.data.productCollections[0].productCollectionProductsFeed?.items||p.data.productCollections[0].productCollectionProductsFeed?.items.length===0))return;c.abort(),h=!0,g.unsubscribe();const m=p.data.productCollections?.[0].productCollectionProductsFeed?.items.filter(f=>!!f.product).map(f=>new Wt(Pt(f)))||[];A({items:m,total:p.data.productCollections?.[0].productCollectionProductsFeed?.total??0})},error(){h||(h=!0,g.unsubscribe(),A({items:[],total:0}))}})})}getResource(){return this.collection}}class Wt{constructor(t){this.product=t.product,this.productResource=t}getId(){return this.product.id}getName(){return this.product.name}getIntegrationByType(t,e){const i=(this.product.integrationProducts||[]).find(r=>{const o=r.integration?.type,s=r.integration?.type===t,l=e?r.integration?.externalIntegrationId===e:!0;return o&&s&&l});if(!i)throw new Error("Failed to find requested integration type on product. This is generally due to a configuration error");return i}getCurrentIntegration(){const e=(this.product.integrationProducts||[]).find(a=>a.integration?.isCurrent);if(!e)throw new Error(`Product: ${this.productResource.id} is not linked to this current integration. This is generally due to a configuration error.`);return e}getDefaultWorkflow(){const t=this.product.workflows;if(t===void 0)throw new ft("Called getDefaultWorkflow() before fetching collection products. Use collection.fetchProducts() first to ensure the data is available.");if(t.length===0)throw new ft("Called getDefaultWorkflow() but no workflows on requested product. Ensure at least 1 workflow is assigned to this product.");const e=this.productResource.workflowId;if(e){const a=t.find(i=>i.workflowName===e);if(a)return new Qt(a)}if(t.length===1)return new Qt(t[0]);throw new ft("Called getDefaultWorkflow() but no default workflow is configured for the requested product. Multiple workflows exist so we can't assume!")}getAllWorkflows(){if((this.product.workflows||[]).length===0)throw new ft("No workflows on configured product. Ensure at least 1 workflow is assigned to this product.");return this.product.workflows.sort((e,a)=>(e.index??0)-(a.index??0)).map(e=>new Qt(e))}getIntegrations(){return this.product.integrationProducts||[]}getResource(){return this.product}getBasePrice(t){const e=this.product.basePrice||0;if(!t)return e;if(!t.integrationType&&!t.externalId&&!t.integrationId)throw new Error("You must provide at least one of the following fields on the includeAdditionalProduct object: integrationType, externalId, integrationId");let a;return t.integrationId?a=this.product.integrationProducts?.find(i=>i.integration?.id===t.integrationId):t.externalId?a=this.product.integrationProducts?.find(i=>i.integration?.externalIntegrationId===t.externalId):a=this.product.integrationProducts?.find(i=>i.integration?.type===t.integrationType),a?.additionalIntegrationProduct?.product?e+(a.additionalIntegrationProduct.product.basePrice||0):e}async requestMetafields(t){return Xi.requestKeysForEntity(this.product.id,t)}}class Qt{constructor(t){this.workflow=t}getId(){return this.workflow.workflowName}getName(){return this.workflow.friendlyName}getThumbnail(){return this.workflow.imageUrl}}const Vc=C.gql`
2295
- ${Ye(!1)}
2295
+ `;class Uc{constructor(){this.internalMap=new Map}async requestKeysForEntity(t,e){const a=new Map;return await this.ensureIdsArePresent([t]),e.forEach(i=>{const r=this.requestKeyForEntityIfAvailable(t,i);r&&a.set(i,r)}),a}async ensureIdsArePresent(t){if(t.every(a=>this.internalMap.has(a)))return;const e=await S.getShadowGraphqlClient().query({query:$c,errorPolicy:"all",variables:{entityIds:t.filter(a=>!this.internalMap.has(a))}});t.forEach((a,i)=>{const r=e.data.metafieldsMany[i];this.internalMap.set(a,r.map(o=>({key:o.metafieldConfiguration.name,value:o.value})))})}async requestKeyForEntity(t,e){if(!this.internalMap.has(t))return;let a=this.internalMap.get(t);const i=a.find(r=>r.key===e);return i||(await this.ensureIdsArePresent([t]),a=this.internalMap.get(t)),i?JSON.parse(i.value):void 0}requestKeyForEntityIfAvailable(t,e){if(!this.internalMap.has(t))return;const i=this.internalMap.get(t).find(r=>r.key===e);if(i)return JSON.parse(i.value)}}const Zi=new Uc;var tr=(n=>(n.Default="Default",n.Name="Name",n.Price="Price",n))(tr||{});class tn{constructor(t){this.fullFetched=!1,this.collection=t;const e=this.collection.productCollectionProducts;e&&e.length>=this.collection.total&&(this.fullFetched=!0)}getId(){return this.collection.id}getName(){return this.collection.name}getDescription(){return this.collection.description||""}getDispatchStartDate(){if(this.collection.dispatchStartDate)return new Date(this.collection.dispatchStartDate)}getDispatchEndDate(){if(this.collection.dispatchEndDate)return new Date(this.collection.dispatchEndDate)}getImage(){return this.collection.image}getProducts(){if(!this.collection.productCollectionProducts)throw new Error("Failed to find products on collection. Ensure you fetch them first!");return this.collection.productCollectionProducts.filter(t=>!!t.product).map(t=>new Wt(t))}async fetchProducts(t){if(this.fullFetched)return(this.collection.productCollectionProducts??[]).filter(i=>!!i.product).map(i=>new Wt(i));const e=await S.getShadowGraphqlClient().query({query:zl,variables:{id:this.getId(),productIds:t},errorPolicy:"all"}),a=this.collection.productCollectionProducts||[];return this.collection.productCollectionProducts=[...a,...e.data.productCollections[0].productCollectionProducts?.filter(i=>!a.some(r=>i.id===r.id))||[]],this.collection.productCollectionProducts.length>=this.collection.total&&(this.fullFetched=!0),this.collection.productCollectionProducts.filter(i=>!!i.product&&(!t||t.includes(i.product.id))).map(i=>new Wt(i))}async filterProducts(t,e,a,i){const r=await S.getShadowGraphqlClient().query({query:Gl,errorPolicy:"all",variables:{id:this.getId(),filters:t?{link:"And",metafields:t}:void 0,tags:e?{include:e.include??[],exclude:e.exclude??[]}:void 0,sortKey:a,sortDescending:i}});if(!r.data?.productCollections||r.data?.productCollections.length===0)throw new Error("Failed to filter product collection products.");const o=this.getProducts(),s=r.data.productCollections[0].productCollectionProducts.map(l=>l.product.id);return o.filter(l=>s.includes(l.getId()))}async fetchProductsFeed(t,e,a,i,r,o,s,l){if(this.fullFetched){const A=await(a?this.filterProducts(a):this.fetchProducts());return{total:A.length,items:A.slice(t,t+e)}}const c=new AbortController,{signal:d}=c,u=S.getShadowGraphqlClient().watchQuery({query:jl,variables:{id:this.getId(),limit:e,offset:t,productFilters:a?{link:"And",metafields:a}:void 0,productWorkflowFilters:l?{link:"And",metafields:l}:void 0,tags:i?{include:i.include??[],exclude:i.exclude??[]}:void 0,sortKey:r,sortDescending:o,quickSearch:s},errorPolicy:"all",fetchPolicy:"cache-first",returnPartialData:!0,context:{fetchOptions:{signal:d}}});return new Promise(A=>{let h=!1;const g=u.subscribe({next(p){if(h||p.partial&&(!p.data.productCollections||p.data.productCollections.length===0||!p.data.productCollections[0].productCollectionProductsFeed?.items||p.data.productCollections[0].productCollectionProductsFeed?.items.length===0))return;c.abort(),h=!0,g.unsubscribe();const m=p.data.productCollections?.[0].productCollectionProductsFeed?.items.filter(f=>!!f.product).map(f=>new Wt(Pt(f)))||[];A({items:m,total:p.data.productCollections?.[0].productCollectionProductsFeed?.total??0})},error(){h||(h=!0,g.unsubscribe(),A({items:[],total:0}))}})})}getResource(){return this.collection}}class Wt{constructor(t){this.product=t.product,this.productResource=t}getId(){return this.product.id}getName(){return this.product.name}getIntegrationByType(t,e){const i=(this.product.integrationProducts||[]).find(r=>{const o=r.integration?.type,s=r.integration?.type===t,l=e?r.integration?.externalIntegrationId===e:!0;return o&&s&&l});if(!i)throw new Error("Failed to find requested integration type on product. This is generally due to a configuration error");return i}getCurrentIntegration(){const e=(this.product.integrationProducts||[]).find(a=>a.integration?.isCurrent);if(!e)throw new Error(`Product: ${this.productResource.id} is not linked to this current integration. This is generally due to a configuration error.`);return e}getDefaultWorkflow(){const t=this.product.workflows;if(t===void 0)throw new ft("Called getDefaultWorkflow() before fetching collection products. Use collection.fetchProducts() first to ensure the data is available.");if(t.length===0)throw new ft("Called getDefaultWorkflow() but no workflows on requested product. Ensure at least 1 workflow is assigned to this product.");const e=this.productResource.workflowId;if(e){const a=t.find(i=>i.workflowName===e);if(a)return new Qt(a)}if(t.length===1)return new Qt(t[0]);throw new ft("Called getDefaultWorkflow() but no default workflow is configured for the requested product. Multiple workflows exist so we can't assume!")}getAllWorkflows(){if((this.product.workflows||[]).length===0)throw new ft("No workflows on configured product. Ensure at least 1 workflow is assigned to this product.");return this.product.workflows.sort((e,a)=>(e.index??0)-(a.index??0)).map(e=>new Qt(e))}getIntegrations(){return this.product.integrationProducts||[]}getResource(){return this.product}getBasePrice(t){const e=this.product.basePrice||0;if(!t)return e;if(!t.integrationType&&!t.externalId&&!t.integrationId)throw new Error("You must provide at least one of the following fields on the includeAdditionalProduct object: integrationType, externalId, integrationId");let a;return t.integrationId?a=this.product.integrationProducts?.find(i=>i.integration?.id===t.integrationId):t.externalId?a=this.product.integrationProducts?.find(i=>i.integration?.externalIntegrationId===t.externalId):a=this.product.integrationProducts?.find(i=>i.integration?.type===t.integrationType),a?.additionalIntegrationProduct?.product?e+(a.additionalIntegrationProduct.product.basePrice||0):e}async requestMetafields(t){return Zi.requestKeysForEntity(this.product.id,t)}}class Qt{constructor(t){this.workflow=t}getId(){return this.workflow.workflowName}getName(){return this.workflow.friendlyName}getThumbnail(){return this.workflow.imageUrl}}const Vc=C.gql`
2296
+ ${Je(!1)}
2296
2297
  query GetProductCollections($ids: [String!]!) {
2297
2298
  productCollections(ids: $ids) {
2298
2299
  ...ProductCollectionFields
@@ -2333,13 +2334,13 @@
2333
2334
  quoteId
2334
2335
  }
2335
2336
  }
2336
- `;class xn{constructor(t,e,a,i,r,o,s){this.workflowExperiences=[],this.eventEmitter=new qc,this.updatesLocked=!1,this.client=t,this.id=e.id,this.name=e.name||"",this.dispatchDate=e.dispatchDate,this.template=e.template||!1,this.quoteId=e.quoteId,this.shareActions=e.bundleShareActions,this.workflowViewerLink=e.workflowViewerLink,this.workflowViewerAmendLink=e.workflowViewerAmendLink,this.ownerId=r,this.metadata=new Map(e.metadata?.map(c=>[c.key,c.value])||[]),this.completed=e.completed??!1,this.productCollection=e.productCollection,this.bundleStateManager=new Rc(e.bundleStateData);const l=this.productCollection?.globalPropertyConfiguration;this.globalConfigurationPropertyId=l?.id,this.globalPropertyStateManager=new Oc(this.id,this.ownerId,l,this.onGlobalPropertiesChanged.bind(this),o),this.globalPropertyHandleService=new Mc(this),this.setPreviewService(a),this.initializationPromise=Promise.all([this.loadExistingWorkflowExperiences(e.transactionIds||[],{...i,bundleOwnerId:r},s),this.globalPropertyStateManager.getInitializationPromise()]).then(()=>new Promise((c,d)=>{if(o?.readonly){c([]);return}console.log("Setting default global variants.");const u=this.globalPropertyStateManager.getGlobalPropertyState();u?this.globalPropertyHandleService.getHandles().then(A=>{const h=A.map(async g=>{if(g.getType()===q.ColorOption||g.getType()===q.Option){const p=g;if(!u.aspects.find(f=>f.name===p.getName()))try{return await p.initDefaultVariant()}catch(f){console.error(`Failed to initialize default global variant - ${f}`)}}});Promise.all(h).then(c).catch(d)}):(console.log("Attempted to set global default variant before state was initialized."),c([]))})),this.initializationPromise.catch(c=>{console.error(`Bundle initialization failed: ${c}`)}),this.initializationPromise.then(()=>{this.getGlobalProperties().then(c=>this.checkMandatoryHandlesChanged(void 0,c))})}getIntegrationProductIds(){return this.bundleStateManager.getState()?.integrationProductIds}async addIntegrationProductId(t){const e=this.bundleStateManager.getState();if(e){if(!e.integrationProductIds)e.integrationProductIds=[];else if(e.integrationProductIds.some(i=>i===t)){this.fireEvent("bundle-integration-products-added",{integrationProductIds:e.integrationProductIds});return}e.integrationProductIds=[...e.integrationProductIds,t];const a=JSON.stringify(e);this.bundleStateManager.setState(a),this.fireEvent("bundle-integration-products-added",{integrationProductIds:e.integrationProductIds}),await S.getShadowGraphqlClient().mutate({mutation:da,variables:{id:this.id,bundleStateData:a},context:{bundleOwnerId:this.ownerId}})}}async removeIntegrationProductIds(t){const e=this.bundleStateManager.getState();if(e){const a=t.filter(r=>(e.integrationProductIds??[]).includes(r));if(a.length===0)return;e.integrationProductIds=(e.integrationProductIds??[]).filter(r=>!a.includes(r));const i=JSON.stringify(e);this.bundleStateManager.setState(i),this.fireEvent("bundle-integration-products-removed",{integrationProductIds:a}),await S.getShadowGraphqlClient().mutate({mutation:da,variables:{id:this.id,bundleStateData:i},context:{bundleOwnerId:this.ownerId}})}}getTemplate(){return this.template}async generateQuoteId(){const e=(await S.getShadowGraphqlClient().mutate({mutation:jc,variables:{id:this.id},context:{bundleOwnerId:this.ownerId}})).data?.bundleGenerateQuoteId?.quoteId;return this.quoteId=e,e||""}async attachAddress(t,e,a,i,r,o){await S.getShadowGraphqlClient().mutate({mutation:zc,variables:{bundleId:this.id,streetAddress:t||void 0,apartment:e||void 0,city:a||void 0,country:i||void 0,state:r||void 0,postCode:o||void 0},context:{bundleOwnerId:this.ownerId}})}async attachOrganization(t){await S.getShadowGraphqlClient().mutate({mutation:Gc,variables:{bundleId:this.id,organizationName:t},context:{bundleOwnerId:this.ownerId}})}setBundleOptions(t){this.globalPropertyStateManager.setBundleOptions(t)}getInitializationPromise(){return this.initializationPromise}addEventListener(t,e){this.eventEmitter.on(t,e)}removeEventListener(t,e){this.eventEmitter.off(t,e)}getClient(){return this.client}getId(){return this.id}getName(){return this.name}getQuoteId(){return this.quoteId}setName(t){return this.name=t,this.updateBundle()}getDispatchDate(){return this.dispatchDate}setDispatchDate(t){return this.dispatchDate=t,this.updateBundle()}getPurchaseOrder(){return this.purchaseOrder}setPurchaseOrder(t){return this.purchaseOrder=t,this.updateBundle()}getMetadata(){return new Map(this.metadata)}setMetadata(t){return this.metadata=new Map(t),this.updateBundle()}setNameAndMetadata(t,e){return this.name=t,this.metadata=new Map(e),this.updateBundle()}hasGlobalProperties(){return!!this.productCollection?.globalPropertyConfiguration}getGlobalPropertyConfiguration(){return this.productCollection?.globalPropertyConfiguration}async getGlobalProperties(){return this.globalPropertyHandleService.applyConditionsFromState(await this.globalPropertyHandleService.getHandles(),this.getGlobalPropertyStateManager().getGlobalPropertyState())}async applyGlobalPropertyState(t){this.updatesLocked=!0;const e=await this.globalPropertyHandleService.getHandles();try{for(const a of t.aspects){const i=a?.name;await this.getGlobalPropertyStateManager().setAspect(i,a.value)}for(const a of t.aspects){const i=a?.name,r=e.find(o=>o.getName()===i);if(r)switch(a.type){case q.FileUpload:{const o=r,s=await Pe([a.value]);s.length>0&&await o.selectImage(s[0]);const l=a.storage?.colors;if(l){const c=Object.fromEntries(l.map(d=>[d.key,{browserValue:d.browserValue,pmsValue:d.pmsValue}])??[]);await o.changeColors(c)}break}case q.ColorOption:{const o=r,l=(await o.getAllVariants()).find(d=>d.getId()===a.value),c=a.storage?a.storage:void 0;l&&await o.selectVariant(l),c?.customColor&&o.setCustomColor(c.customColor);break}case q.Option:{const o=r,l=(await o.getAllVariants()).find(c=>c.getId()===a.value);l&&await o.selectVariant(l);break}case q.Text:{await r.setText(a.value);break}}}}finally{this.updatesLocked=!1,this.onGlobalPropertiesChanged(void 0,this.globalPropertyStateManager.getGlobalPropertyState())}}getGlobalPropertyStateManager(){return this.globalPropertyStateManager}async getGlobalPropertyTotalSubunits(){return(await this.globalPropertyHandleService.getHandles()).filter(a=>a.getType()===q.Option).map(a=>a.getCurrentVariant()?.getPrice()||0).reduce((a,i)=>a+i,0)}getTotalSubunits(){return this.workflowExperiences.map(t=>t.getTotalPriceSubunits()).reduce((t,e)=>t+e,0)}getProductCollection(){return this.productCollection?new tn(this.productCollection):void 0}async initializeAdditionalRequiredColorChannels(t){for(const e of t.getStepsByType(E.Illustration)){const a=e.getGlobalPropertyAspects(this.globalConfigurationPropertyId||"");for(const i of a){const r=this.getGlobalPropertyConfiguration()?.aspects.find(o=>o.name===i);if(r&&r.type===q.ColorOption){const o=e.getCurrentVariant()?.getAssetResource(),s=o?.assetConfiguration?.channelNumbers||[],l=o?.assetConfiguration?.defaultColorVariants||[],c=Ki(this,i),d=[...new Set(s.map(A=>A.number))];if(d.length>c)for(const A of d){const h=this.getGlobalPropertyStateManager(),g=l.find(p=>p.channelNumber===A);g&&await h.setAspect(i,g.variant.id||"",void 0,g.channelNumber)}}}}}async addWorkflowExperience(t){await this.initializeAdditionalRequiredColorChannels(t),t.setBundle(this),await this.appendWorkflowExperience(t),await this.injectExperienceIntoPreviewService(t),await t.getWorkflowManager().getInitializationPromise();const e=await this.getGlobalProperties();for(const a of e)await a.applyGlobalState([t]);this.fireEvent("workflow-experience-added",{workflowExperiences:[t]})}async addWorkflowExperiences(t){for(const s of t)await this.initializeAdditionalRequiredColorChannels(s);const e=t.map(s=>s.getTransaction().id),a=e.map(s=>this.workflowExperiences.find(l=>l.getTransaction().id===s));if(a.some(s=>!!s))throw new Error("Unable to add transaction to bundle - Already Exists: "+a.filter(s=>!!s).map(s=>s?.getTransaction().id).join(", "));const i=Q.getMap("transactionOwnerIds")||new Map,r=e.map(s=>i.get(s));await S.getShadowGraphqlClient().mutate({mutation:Jl,variables:{id:this.id,transactionIds:e,transactionOwnerIds:r},context:{bundleOwnerId:this.ownerId}}).catch(s=>{console.error(s)}),this.workflowExperiences.push(...t);const o=async()=>{for(const l of t)l.setBundle(this),await this.injectExperienceIntoPreviewService(l);await Promise.all(t.map(l=>l.getWorkflowManager().getInitializationPromise()));const s=await this.getGlobalProperties();for(const l of s)await l.applyGlobalState(t)};await Promise.all([this.updateTransactionOrder(),o()]),this.workflowExperiences.forEach(s=>s.checkForPriceBreakChanges()),this.fireEvent("workflow-experience-added",{workflowExperiences:this.workflowExperiences})}async appendWorkflowExperience(t,e=!0){const a=t.getTransaction().id;if(this.workflowExperiences.find(s=>s.getTransaction().id===a))throw new Error("Unable to add transaction to bundle - Already Exists!");const o=(Q.getMap("transactionOwnerIds")||new Map).get(a);await S.getShadowGraphqlClient().mutate({mutation:Yl,variables:{id:this.id,transactionId:a},context:{bundleOwnerId:this.ownerId,transactionOwnerId:o}}),e&&(this.workflowExperiences.push(t),this.workflowExperiences.forEach(s=>s.checkForPriceBreakChanges()))}async removeWorkflowExperience(t){const e=this.workflowExperiences.indexOf(t);await this.removeTransaction(e,this.workflowExperiences[e].getTransaction()),this.fireEvent("workflow-experience-added",{workflowExperiences:[t]})}async removeWorkflowExperiences(t){await this.removeTransactions(t.map(e=>e.getTransaction()))}async removeWorkflowExperienceByTransaction(t){const e=this.workflowExperiences.findIndex(a=>a.getTransaction().id===t.id);await this.removeTransaction(e,t)}async removeWorkflowExperiencesByTransactions(t){await this.removeTransactions(t)}async removeTransaction(t,e,a=!0){if(t>-1){const i=this.workflowExperiences.find(r=>r.getTransaction().id===e.id);if(i.setBundle(void 0),this.previewService&&i.getWorkflowManager().ejectFromPreviewService(),this.bundleStateManager.removeStateForTransaction(e.id),await S.getShadowGraphqlClient().mutate({mutation:Kl,variables:{id:this.id,transactionId:e.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([r,o])=>({key:r,value:o})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),a){const r=this.workflowExperiences.splice(t,1);this.workflowExperiences.forEach(o=>o.checkForPriceBreakChanges()),i.checkForPriceBreakChanges(),await this.updateTransactionOrder(),this.fireEvent("workflow-experience-removed",{workflowExperiences:r})}}else throw new Error("Unable to remove workflow experience from bundle - Not Found! - "+e.id)}async removeTransactions(t){const e=t.map(i=>this.workflowExperiences.findIndex(r=>r.getTransaction().id===i.id));if(e.some(i=>i===-1))throw new Error("Unable to remove workflow experience from bundle - The following aren't included in the bundle: "+t.filter((i,r)=>e[r]===-1).map(i=>i.id).join(", "));const a=t.map(i=>this.workflowExperiences.splice(this.workflowExperiences.findIndex(r=>r.getTransaction().id===i.id),1)[0]);a.forEach(i=>i.setBundle(void 0)),[...this.workflowExperiences,...a].forEach(i=>i.checkForPriceBreakChanges()),this.previewService&&a.forEach(i=>i.getWorkflowManager().ejectFromPreviewService()),t.forEach(i=>this.bundleStateManager.removeStateForTransaction(i.id)),await S.getShadowGraphqlClient().mutate({mutation:_l,variables:{id:this.id,transactionIds:t.map(i=>i.id),name:this.name,metadata:Array.from(this.metadata.entries()).map(([i,r])=>({key:i,value:r})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),this.fireEvent("workflow-experience-removed",{workflowExperiences:a}),await this.updateTransactionOrder()}async insertWorkflowExperience(t,e){await this.appendWorkflowExperience(t,!1),this.workflowExperiences.splice(e,0,t),await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(t);const a=await this.getGlobalProperties();await Promise.all(a.map(i=>i.applyGlobalState([t])))})()])}async replaceWorkflowExperience(t,e){if(t<0||t>=this.workflowExperiences.length)throw new Error("Unable to replace workflow experience in bundle - Index out of range!");const a=this.workflowExperiences[t];if(a.getTransaction().id===e.getTransaction().id)throw new Error("Unable to replace workflow experience in bundle - Same transaction!");await Promise.all([this.removeTransaction(t,a.getTransaction(),!1),this.appendWorkflowExperience(e,!1)]),this.workflowExperiences[t]=e,await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(e);const i=await this.getGlobalProperties();await Promise.all(i.map(r=>r.applyGlobalState([e])))})()])}async swapWorkflowExperiences(t,e){if(t<0||t>=this.workflowExperiences.length||e<0||e>=this.workflowExperiences.length)throw new Error("Unable to swap workflow experiences in bundle - Index out of range!");if(t===e)return;const a=this.workflowExperiences[t];this.workflowExperiences[t]=this.workflowExperiences[e],this.workflowExperiences[e]=a,await this.updateTransactionOrder()}getWorkflowExperiences(){return[...this.workflowExperiences]}async sortWorkflowExperiences(t){this.workflowExperiences=this.workflowExperiences.sort(t),await this.updateTransactionOrder()}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(t,e){const a=await S.getShadowGraphqlClient().mutate({mutation:Xl,variables:{id:this.id,details:t,type:e||Na.Owner},context:{bundleOwnerId:this.ownerId}});if(!a.data?.bundleAddStakeholder)throw new Error("Bundle not found!");const i=a.data.bundleAddStakeholder.bundleStakeholders||[];this.storeStakeholderCustomers(i)}async removeStakeholder(t){if(!(await S.getShadowGraphqlClient().mutate({mutation:Zl,variables:{id:this.id,emailAddress:t},context:{bundleOwnerId:this.ownerId}})).data?.bundleRemoveStakeholder)throw new Error("Bundle not found!")}async updateStakeholders(t){const e=await S.getShadowGraphqlClient().mutate({mutation:tc,variables:{id:this.id,input:t},context:{bundleOwnerId:this.ownerId}});if(!e.data?.bundleUpdateStakeholders)throw new Error("Bundle not found!");const a=e.data.bundleUpdateStakeholders.bundleStakeholders||[];this.storeStakeholderCustomers(a)}async getAllStakeholders(){const t=await S.getShadowGraphqlClient().query({query:bn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.id},context:{bundleOwnerId:this.ownerId}});if(!t.data.bundles||t.data.bundles.length===0)throw new Error("Bundle not found!");const e=t.data.bundles[0].bundleStakeholders||[];return this.storeStakeholderCustomers(e),e}async getCurrentStakeholder(){const t=await S.getShadowGraphqlClient().query({query:bn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.id},context:{bundleOwnerId:this.ownerId}});if(!t.data.bundles||t.data.bundles.length===0)throw new Error("Bundle not found!");return t.data.bundles[0].currentBundleStakeholder}storeStakeholderCustomers(t){t.forEach(e=>{e.customer&&this.client.storeCustomer(e.customer)})}async finish(t,e){this.completed&&await S.getShadowGraphqlClient().mutate({mutation:rc,variables:{bundleId:this.id}});const a=await Hi(this.workflowExperiences.map(i=>{const r=i.getWorkflow();if(!r)throw new Error("Unable to create designs - Workflow not found!");const o=i.getProduct();if(!o)throw new Error("Unable to create designs - Product not found!");return{workflowManager:i.getWorkflowManager(),workflow:r,layouts:i.getWorkflowManager().getLayouts(),getReducerState:()=>i.getCommandContext().getState(),product:o,transaction:i.getTransaction(),workflowSelections:i.getWorkflowManager().getWorkflowSelections(),designName:r.name,workflowMetadata:i.getWorkflowManager().getWorkflowMetadata()}}),e?(i,r)=>{const o=this.workflowExperiences.find(s=>s.getTransaction().id===r);return o?e(o,i):(console.warn("SpiffCommerce - Bundle create design - Unable to find experience for transaction: "+r),Promise.resolve(void 0))}:void 0);return{bundleId:this.id,name:this.getName(),dispatchDate:this.getDispatchDate()||"",purchaseOrder:this.getPurchaseOrder()||"",collectionId:this.getProductCollection()?.getId()||"",collectionName:this.getProductCollection()?.getName()||"",items:a,bundleOwnerId:this.ownerId}}async placeOrder(){const t=this.workflowExperiences.map(e=>({transactionId:e.getTransaction().id,amountToOrder:e.getTransaction().quantity||1}));return await this.getClient().placeOrder(t)}getPreviewService(){return this.previewService}async setPreviewService(t){if(this.workflowExperiences&&this.workflowExperiences.length>0&&(this.workflowExperiences.forEach(e=>e.getWorkflowManager().ejectFromPreviewService()),t))for(const e of this.workflowExperiences)await this.injectExperienceIntoPreviewService(e);t&&t.registerModelLoadEventListener&&t.registerModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService&&this.previewService!==t&&this.previewService.unregisterModelLoadEventListener&&this.previewService.unregisterModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService=t}async assignGlobalPropertyConfiguration(t){await S.getShadowGraphqlClient().mutate({mutation:nc,variables:{bundleId:this.id,globalPropertyConfigurationId:t},context:{bundleOwnerId:this.ownerId}}),this.globalConfigurationPropertyId=t}async assignProductCollection(t){const e=await S.getShadowGraphqlClient().mutate({mutation:ac(this.globalPropertyStateManager.getBundleOptions()?.eagerFetchProducts??!1),variables:{id:this.id,productCollectionId:t??""},context:{bundleOwnerId:this.ownerId}});if(e.data?.bundleAssignProductCollection.productCollection){this.productCollection=e.data.bundleAssignProductCollection.productCollection;const a=e.data.bundleAssignProductCollection.productCollection.globalPropertyConfiguration;this.globalPropertyStateManager.setConfiguration(a),await this.globalPropertyHandleService.getHandles(),this.globalConfigurationPropertyId=a?.id}}onModelLoadEvent(t){t.eventType==="unload"||!t.modelContainer||(t.modelContainer.registerMaterialSelectedCallback(()=>this.onModelSelectedEvent(t.modelContainer,!0)),t.modelContainer.registerMaterialDeselectedCallback(()=>this.onModelSelectedEvent(t.modelContainer,!1)))}onModelSelectedEvent(t,e){if(t&&t.metadata&&t.metadata instanceof Map&&t.metadata.has("workflowManager")){const i=t.metadata.get("workflowManager").getWorkflowExperience().getTransaction(),r=this.workflowExperiences.find(o=>o.getTransaction().id===i.id);r&&this.fireEvent(e?"workflow-experience-hover-enter":"workflow-experience-hover-exit",{workflowExperience:r})}}async injectExperienceIntoPreviewService(t){this.previewService&&await t.getWorkflowManager().injectIntoPreviewService(this.previewService)}async loadExistingWorkflowExperiences(t,e,a){if(t.length===0)return;const i=await this.client.getWorkflowExperiences(t.map(s=>({type:"transaction",transactionId:s})),e,void 0,a);if(i.forEach(s=>s.setBundle(this)),i.forEach(s=>s.checkForPriceBreakChanges()),this.workflowExperiences=i,this.previewService)for(const s of i)await this.injectExperienceIntoPreviewService(s);const r=this.getIntegrationProductIds()||[],o=this.getProductCollection();if(o&&r.length>0){await o.fetchProducts();const s=o.getProducts();for(const l of r)if(!s.find(d=>d.getCurrentIntegration().id===l)){for(const d of i)d.getProduct()?.integrationProducts?.map(u=>u.id)?.includes(l)&&await d.clearProduct();await this.removeIntegrationProductIds([l])}}}async updateBundle(){if(!(await S.getShadowGraphqlClient().mutate({mutation:da,variables:{id:this.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([e,a])=>({key:e,value:a})),bundleStateData:this.bundleStateManager.getSerializedState(),dispatchDate:this.dispatchDate,purchaseOrder:this.purchaseOrder},context:{bundleOwnerId:this.ownerId}})).data?.bundleUpdate)throw new Error("Bundle not found!")}async updateTransactionOrder(){await S.getShadowGraphqlClient().mutate({mutation:ec,variables:{id:this.id,transactionIds:this.workflowExperiences.map(t=>t.getTransaction().id)},context:{bundleOwnerId:this.ownerId}})}async onGlobalPropertiesChanged(t,e){if(this.updatesLocked)return;const a=await this.globalPropertyHandleService.getHandles(),i=this.globalPropertyHandleService.applyConditionsFromState(a,t),r=this.globalPropertyHandleService.applyConditionsFromState(a,e);this.checkConditionalHandlesChanged(i,r),this.checkMandatoryHandlesChanged(t,r);const o=this.getGlobalPropertyStateManager();let s=[];for(const u of a)r.find(A=>A.getName()==u.getName())||(s=[...s,u.getName()]);await o.clearAspects(s);const l=r.map(u=>{if(u.getType()===q.ColorOption||u.getType()===q.Option){const A=u;if(!e.aspects.find(g=>g.name===A.getName()))return A.initDefaultVariant()}});await Promise.all(l),await Promise.all(r.map(u=>u.applyGlobalState()));const c=this.globalPropertyStateManager.getGlobalPropertyState(),d=this.globalPropertyHandleService.applyConditionsFromState(a,c);te(r.sort(),d.sort())||(this.checkConditionalHandlesChanged(r,d),this.checkMandatoryHandlesChanged(c,d),await this.onGlobalPropertiesChanged(e,c))}checkConditionalHandlesChanged(t,e){(()=>{if(t.length!==e.length)return!0;for(let r=0;r<t.length;r++)if(t[r].getName()!==e[r].getName())return!0;return!1})()&&this.fireEvent("conditional-global-properties-changed",{globalProperties:e})}checkMandatoryHandlesChanged(t,e){const a=[],i=[],r=[],o=_i(t);e.forEach(s=>{if(s.isMandatory()){const l=s.isMandatoryFulfilled();l?i.push(s):r.push(s);const c=o.get(s.getName());(c===void 0||c!==l)&&a.push(s)}}),this.fireEvent("global-properties-mandatory-changed",{changed:a,completed:i,remaining:r})}fireEvent(t,e){this.eventEmitter.emit(t,e)}getShareActions(){return this.shareActions}getWorkflowViewerLink(){return this.workflowViewerLink}getWorkflowViewerAmendLink(){return this.workflowViewerAmendLink}async approve(t,e){await S.getShadowGraphqlClient().mutate({mutation:oc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.id,note:t,stakeholderId:e}})}async reject(t,e){await S.getShadowGraphqlClient().mutate({mutation:sc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.id,note:t,stakeholderId:e}})}getQuoteCompleteMessage(){return{bundleId:this.id,bundleOwnerId:this.ownerId,quoteId:this.quoteId||""}}}const Hc=C.gql`
2337
+ `;class xn{constructor(t,e,a,i,r,o,s){this.workflowExperiences=[],this.eventEmitter=new qc,this.updatesLocked=!1,this.client=t,this.id=e.id,this.name=e.name||"",this.dispatchDate=e.dispatchDate,this.template=e.template||!1,this.quoteId=e.quoteId,this.shareActions=e.bundleShareActions,this.workflowViewerLink=e.workflowViewerLink,this.workflowViewerAmendLink=e.workflowViewerAmendLink,this.ownerId=r,this.metadata=new Map(e.metadata?.map(c=>[c.key,c.value])||[]),this.completed=e.completed??!1,this.productCollection=e.productCollection,this.bundleStateManager=new Rc(e.bundleStateData);const l=this.productCollection?.globalPropertyConfiguration;this.globalConfigurationPropertyId=l?.id,this.globalPropertyStateManager=new Oc(this.id,this.ownerId,l,this.onGlobalPropertiesChanged.bind(this),o),this.globalPropertyHandleService=new Mc(this),this.setPreviewService(a),this.initializationPromise=(async()=>{if(!o?.readonly){const c=this.bundleStateManager.getState();if(c.integrationProductIds&&c.integrationProductIds.length>0){const d=await S.getShadowGraphqlClient().query({query:hi,variables:{ids:c.integrationProductIds},errorPolicy:"all",fetchPolicy:"no-cache"});if(d.errors)throw new Error(`Failed to fetch integration products for Bundle ${e.id}`);const u=d.data.integrationProducts?.filter(h=>!!h.product?.id&&c.integrationProductIds.includes(h.id)).map(h=>h.product.id);c.integrationProductIds=[],c.productIds=Array.from(new Set([...c.productIds||[],...u||[]]));const A=JSON.stringify(c);this.bundleStateManager.setState(A),await S.getShadowGraphqlClient().mutate({mutation:ye,variables:{id:this.id,bundleStateData:A},context:{bundleOwnerId:r}})}}return Promise.all([this.loadExistingWorkflowExperiences(e.transactionIds||[],{...i,bundleOwnerId:r},s),this.globalPropertyStateManager.getInitializationPromise()]).then(()=>new Promise((c,d)=>{if(o?.readonly){c([]);return}console.log("Setting default global variants.");const u=this.globalPropertyStateManager.getGlobalPropertyState();u?this.globalPropertyHandleService.getHandles().then(A=>{const h=A.map(async g=>{if(g.getType()===q.ColorOption||g.getType()===q.Option){const p=g;if(!u.aspects.find(f=>f.name===p.getName()))try{return await p.initDefaultVariant()}catch(f){console.error(`Failed to initialize default global variant - ${f}`)}}});Promise.all(h).then(c).catch(d)}):(console.log("Attempted to set global default variant before state was initialized."),c([]))}))})(),this.initializationPromise.catch(c=>{console.error(`Bundle initialization failed: ${c}`)}),this.initializationPromise.then(()=>{this.getGlobalProperties().then(c=>this.checkMandatoryHandlesChanged(void 0,c))})}getProductIds(){return this.bundleStateManager.getState()?.productIds}async addProductId(t){const e=this.bundleStateManager.getState();if(e){if(!e.productIds)e.productIds=[];else if(e.productIds.some(i=>i===t)){this.fireEvent("bundle-products-added",{productIds:e.productIds,added:[]});return}e.productIds=[...e.productIds,t];const a=JSON.stringify(e);this.bundleStateManager.setState(a),this.fireEvent("bundle-products-added",{productIds:e.productIds,added:[t]}),await S.getShadowGraphqlClient().mutate({mutation:ye,variables:{id:this.id,bundleStateData:a},context:{bundleOwnerId:this.ownerId}})}}async removeProductIds(t){const e=this.bundleStateManager.getState();if(e){const a=t.filter(r=>(e.productIds??[]).includes(r));if(a.length===0)return;e.productIds=(e.productIds??[]).filter(r=>!a.includes(r));const i=JSON.stringify(e);this.bundleStateManager.setState(i),this.fireEvent("bundle-products-removed",{productIds:e.productIds,removed:a}),await S.getShadowGraphqlClient().mutate({mutation:ye,variables:{id:this.id,bundleStateData:i},context:{bundleOwnerId:this.ownerId}})}}getTemplate(){return this.template}async generateQuoteId(){const e=(await S.getShadowGraphqlClient().mutate({mutation:jc,variables:{id:this.id},context:{bundleOwnerId:this.ownerId}})).data?.bundleGenerateQuoteId?.quoteId;return this.quoteId=e,e||""}async attachAddress(t,e,a,i,r,o){await S.getShadowGraphqlClient().mutate({mutation:zc,variables:{bundleId:this.id,streetAddress:t||void 0,apartment:e||void 0,city:a||void 0,country:i||void 0,state:r||void 0,postCode:o||void 0},context:{bundleOwnerId:this.ownerId}})}async attachOrganization(t){await S.getShadowGraphqlClient().mutate({mutation:Gc,variables:{bundleId:this.id,organizationName:t},context:{bundleOwnerId:this.ownerId}})}setBundleOptions(t){this.globalPropertyStateManager.setBundleOptions(t)}getInitializationPromise(){return this.initializationPromise}addEventListener(t,e){this.eventEmitter.on(t,e)}removeEventListener(t,e){this.eventEmitter.off(t,e)}getClient(){return this.client}getId(){return this.id}getName(){return this.name}getQuoteId(){return this.quoteId}setName(t){return this.name=t,this.updateBundle()}getDispatchDate(){return this.dispatchDate}setDispatchDate(t){return this.dispatchDate=t,this.updateBundle()}getPurchaseOrder(){return this.purchaseOrder}setPurchaseOrder(t){return this.purchaseOrder=t,this.updateBundle()}getMetadata(){return new Map(this.metadata)}setMetadata(t){return this.metadata=new Map(t),this.updateBundle()}setNameAndMetadata(t,e){return this.name=t,this.metadata=new Map(e),this.updateBundle()}hasGlobalProperties(){return!!this.productCollection?.globalPropertyConfiguration}getGlobalPropertyConfiguration(){return this.productCollection?.globalPropertyConfiguration}async getGlobalProperties(){return this.globalPropertyHandleService.applyConditionsFromState(await this.globalPropertyHandleService.getHandles(),this.getGlobalPropertyStateManager().getGlobalPropertyState())}async applyGlobalPropertyState(t){this.updatesLocked=!0;const e=await this.globalPropertyHandleService.getHandles();try{for(const a of t.aspects){const i=a?.name;await this.getGlobalPropertyStateManager().setAspect(i,a.value)}for(const a of t.aspects){const i=a?.name,r=e.find(o=>o.getName()===i);if(r)switch(a.type){case q.FileUpload:{const o=r,s=await xe([a.value]);s.length>0&&await o.selectImage(s[0]);const l=a.storage?.colors;if(l){const c=Object.fromEntries(l.map(d=>[d.key,{browserValue:d.browserValue,pmsValue:d.pmsValue}])??[]);await o.changeColors(c)}break}case q.ColorOption:{const o=r,l=(await o.getAllVariants()).find(d=>d.getId()===a.value),c=a.storage?a.storage:void 0;l&&await o.selectVariant(l),c?.customColor&&o.setCustomColor(c.customColor);break}case q.Option:{const o=r,l=(await o.getAllVariants()).find(c=>c.getId()===a.value);l&&await o.selectVariant(l);break}case q.Text:{await r.setText(a.value);break}}}}finally{this.updatesLocked=!1,this.onGlobalPropertiesChanged(void 0,this.globalPropertyStateManager.getGlobalPropertyState())}}getGlobalPropertyStateManager(){return this.globalPropertyStateManager}async getGlobalPropertyTotalSubunits(){return(await this.globalPropertyHandleService.getHandles()).filter(a=>a.getType()===q.Option).map(a=>a.getCurrentVariant()?.getPrice()||0).reduce((a,i)=>a+i,0)}getTotalSubunits(){return this.workflowExperiences.map(t=>t.getTotalPriceSubunits()).reduce((t,e)=>t+e,0)}getProductCollection(){return this.productCollection?new tn(this.productCollection):void 0}async initializeAdditionalRequiredColorChannels(t){for(const e of t.getStepsByType(E.Illustration)){const a=e.getGlobalPropertyAspects(this.globalConfigurationPropertyId||"");for(const i of a){const r=this.getGlobalPropertyConfiguration()?.aspects.find(o=>o.name===i);if(r&&r.type===q.ColorOption){const o=e.getCurrentVariant()?.getAssetResource(),s=o?.assetConfiguration?.channelNumbers||[],l=o?.assetConfiguration?.defaultColorVariants||[],c=_i(this,i),d=[...new Set(s.map(A=>A.number))];if(d.length>c)for(const A of d){const h=this.getGlobalPropertyStateManager(),g=l.find(p=>p.channelNumber===A);g&&await h.setAspect(i,g.variant.id||"",void 0,g.channelNumber)}}}}}async addWorkflowExperience(t){await this.initializeAdditionalRequiredColorChannels(t),t.setBundle(this),await this.appendWorkflowExperience(t),await this.injectExperienceIntoPreviewService(t),await t.getWorkflowManager().getInitializationPromise();const e=await this.getGlobalProperties();for(const a of e)await a.applyGlobalState([t]);this.fireEvent("workflow-experience-added",{workflowExperiences:[t]})}async addWorkflowExperiences(t){for(const s of t)await this.initializeAdditionalRequiredColorChannels(s);const e=t.map(s=>s.getTransaction().id),a=e.map(s=>this.workflowExperiences.find(l=>l.getTransaction().id===s));if(a.some(s=>!!s))throw new Error("Unable to add transaction to bundle - Already Exists: "+a.filter(s=>!!s).map(s=>s?.getTransaction().id).join(", "));const i=Q.getMap("transactionOwnerIds")||new Map,r=e.map(s=>i.get(s));await S.getShadowGraphqlClient().mutate({mutation:Jl,variables:{id:this.id,transactionIds:e,transactionOwnerIds:r},context:{bundleOwnerId:this.ownerId}}).catch(s=>{console.error(s)}),this.workflowExperiences.push(...t);const o=async()=>{for(const l of t)l.setBundle(this),await this.injectExperienceIntoPreviewService(l);await Promise.all(t.map(l=>l.getWorkflowManager().getInitializationPromise()));const s=await this.getGlobalProperties();for(const l of s)await l.applyGlobalState(t)};await Promise.all([this.updateTransactionOrder(),o()]),this.workflowExperiences.forEach(s=>s.checkForPriceBreakChanges()),this.fireEvent("workflow-experience-added",{workflowExperiences:this.workflowExperiences})}async appendWorkflowExperience(t,e=!0){const a=t.getTransaction().id;if(this.workflowExperiences.find(s=>s.getTransaction().id===a))throw new Error("Unable to add transaction to bundle - Already Exists!");const o=(Q.getMap("transactionOwnerIds")||new Map).get(a);await S.getShadowGraphqlClient().mutate({mutation:Yl,variables:{id:this.id,transactionId:a},context:{bundleOwnerId:this.ownerId,transactionOwnerId:o}}),e&&(this.workflowExperiences.push(t),this.workflowExperiences.forEach(s=>s.checkForPriceBreakChanges()))}async removeWorkflowExperience(t){const e=this.workflowExperiences.indexOf(t);await this.removeTransaction(e,this.workflowExperiences[e].getTransaction()),this.fireEvent("workflow-experience-added",{workflowExperiences:[t]})}async removeWorkflowExperiences(t){await this.removeTransactions(t.map(e=>e.getTransaction()))}async removeWorkflowExperienceByTransaction(t){const e=this.workflowExperiences.findIndex(a=>a.getTransaction().id===t.id);await this.removeTransaction(e,t)}async removeWorkflowExperiencesByTransactions(t){await this.removeTransactions(t)}async removeTransaction(t,e,a=!0){if(t>-1){const i=this.workflowExperiences.find(r=>r.getTransaction().id===e.id);if(i.setBundle(void 0),this.previewService&&i.getWorkflowManager().ejectFromPreviewService(),this.bundleStateManager.removeStateForTransaction(e.id),await S.getShadowGraphqlClient().mutate({mutation:Kl,variables:{id:this.id,transactionId:e.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([r,o])=>({key:r,value:o})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),a){const r=this.workflowExperiences.splice(t,1);this.workflowExperiences.forEach(o=>o.checkForPriceBreakChanges()),i.checkForPriceBreakChanges(),await this.updateTransactionOrder(),this.fireEvent("workflow-experience-removed",{workflowExperiences:r})}}else throw new Error("Unable to remove workflow experience from bundle - Not Found! - "+e.id)}async removeTransactions(t){const e=t.map(i=>this.workflowExperiences.findIndex(r=>r.getTransaction().id===i.id));if(e.some(i=>i===-1))throw new Error("Unable to remove workflow experience from bundle - The following aren't included in the bundle: "+t.filter((i,r)=>e[r]===-1).map(i=>i.id).join(", "));const a=t.map(i=>this.workflowExperiences.splice(this.workflowExperiences.findIndex(r=>r.getTransaction().id===i.id),1)[0]);a.forEach(i=>i.setBundle(void 0)),[...this.workflowExperiences,...a].forEach(i=>i.checkForPriceBreakChanges()),this.previewService&&a.forEach(i=>i.getWorkflowManager().ejectFromPreviewService()),t.forEach(i=>this.bundleStateManager.removeStateForTransaction(i.id)),await S.getShadowGraphqlClient().mutate({mutation:_l,variables:{id:this.id,transactionIds:t.map(i=>i.id),name:this.name,metadata:Array.from(this.metadata.entries()).map(([i,r])=>({key:i,value:r})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),this.fireEvent("workflow-experience-removed",{workflowExperiences:a}),await this.updateTransactionOrder()}async insertWorkflowExperience(t,e){await this.appendWorkflowExperience(t,!1),this.workflowExperiences.splice(e,0,t),await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(t);const a=await this.getGlobalProperties();await Promise.all(a.map(i=>i.applyGlobalState([t])))})()])}async replaceWorkflowExperience(t,e){if(t<0||t>=this.workflowExperiences.length)throw new Error("Unable to replace workflow experience in bundle - Index out of range!");const a=this.workflowExperiences[t];if(a.getTransaction().id===e.getTransaction().id)throw new Error("Unable to replace workflow experience in bundle - Same transaction!");await Promise.all([this.removeTransaction(t,a.getTransaction(),!1),this.appendWorkflowExperience(e,!1)]),this.workflowExperiences[t]=e,await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(e);const i=await this.getGlobalProperties();await Promise.all(i.map(r=>r.applyGlobalState([e])))})()])}async swapWorkflowExperiences(t,e){if(t<0||t>=this.workflowExperiences.length||e<0||e>=this.workflowExperiences.length)throw new Error("Unable to swap workflow experiences in bundle - Index out of range!");if(t===e)return;const a=this.workflowExperiences[t];this.workflowExperiences[t]=this.workflowExperiences[e],this.workflowExperiences[e]=a,await this.updateTransactionOrder()}getWorkflowExperiences(){return[...this.workflowExperiences]}async sortWorkflowExperiences(t){this.workflowExperiences=this.workflowExperiences.sort(t),await this.updateTransactionOrder()}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(t,e){const a=await S.getShadowGraphqlClient().mutate({mutation:Xl,variables:{id:this.id,details:t,type:e||Na.Owner},context:{bundleOwnerId:this.ownerId}});if(!a.data?.bundleAddStakeholder)throw new Error("Bundle not found!");const i=a.data.bundleAddStakeholder.bundleStakeholders||[];this.storeStakeholderCustomers(i)}async removeStakeholder(t){if(!(await S.getShadowGraphqlClient().mutate({mutation:Zl,variables:{id:this.id,emailAddress:t},context:{bundleOwnerId:this.ownerId}})).data?.bundleRemoveStakeholder)throw new Error("Bundle not found!")}async updateStakeholders(t){const e=await S.getShadowGraphqlClient().mutate({mutation:tc,variables:{id:this.id,input:t},context:{bundleOwnerId:this.ownerId}});if(!e.data?.bundleUpdateStakeholders)throw new Error("Bundle not found!");const a=e.data.bundleUpdateStakeholders.bundleStakeholders||[];this.storeStakeholderCustomers(a)}async getAllStakeholders(){const t=await S.getShadowGraphqlClient().query({query:bn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.id},context:{bundleOwnerId:this.ownerId}});if(!t.data.bundles||t.data.bundles.length===0)throw new Error("Bundle not found!");const e=t.data.bundles[0].bundleStakeholders||[];return this.storeStakeholderCustomers(e),e}async getCurrentStakeholder(){const t=await S.getShadowGraphqlClient().query({query:bn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.id},context:{bundleOwnerId:this.ownerId}});if(!t.data.bundles||t.data.bundles.length===0)throw new Error("Bundle not found!");return t.data.bundles[0].currentBundleStakeholder}storeStakeholderCustomers(t){t.forEach(e=>{e.customer&&this.client.storeCustomer(e.customer)})}async finish(t,e){this.completed&&await S.getShadowGraphqlClient().mutate({mutation:rc,variables:{bundleId:this.id}});const a=await Wi(this.workflowExperiences.map(i=>{const r=i.getWorkflow();if(!r)throw new Error("Unable to create designs - Workflow not found!");const o=i.getProduct();if(!o)throw new Error("Unable to create designs - Product not found!");return{workflowManager:i.getWorkflowManager(),workflow:r,layouts:i.getWorkflowManager().getLayouts(),getReducerState:()=>i.getCommandContext().getState(),product:o,transaction:i.getTransaction(),workflowSelections:i.getWorkflowManager().getWorkflowSelections(),designName:r.name,workflowMetadata:i.getWorkflowManager().getWorkflowMetadata()}}),e?(i,r)=>{const o=this.workflowExperiences.find(s=>s.getTransaction().id===r);return o?e(o,i):(console.warn("SpiffCommerce - Bundle create design - Unable to find experience for transaction: "+r),Promise.resolve(void 0))}:void 0);return{bundleId:this.id,name:this.getName(),dispatchDate:this.getDispatchDate()||"",purchaseOrder:this.getPurchaseOrder()||"",collectionId:this.getProductCollection()?.getId()||"",collectionName:this.getProductCollection()?.getName()||"",items:a,bundleOwnerId:this.ownerId}}async placeOrder(){const t=this.workflowExperiences.map(e=>({transactionId:e.getTransaction().id,amountToOrder:e.getTransaction().quantity||1}));return await this.getClient().placeOrder(t)}getPreviewService(){return this.previewService}async setPreviewService(t){if(this.workflowExperiences&&this.workflowExperiences.length>0&&(this.workflowExperiences.forEach(e=>e.getWorkflowManager().ejectFromPreviewService()),t))for(const e of this.workflowExperiences)await this.injectExperienceIntoPreviewService(e);t&&t.registerModelLoadEventListener&&t.registerModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService&&this.previewService!==t&&this.previewService.unregisterModelLoadEventListener&&this.previewService.unregisterModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService=t}async assignGlobalPropertyConfiguration(t){await S.getShadowGraphqlClient().mutate({mutation:nc,variables:{bundleId:this.id,globalPropertyConfigurationId:t},context:{bundleOwnerId:this.ownerId}}),this.globalConfigurationPropertyId=t}async assignProductCollection(t){const e=await S.getShadowGraphqlClient().mutate({mutation:ac(this.globalPropertyStateManager.getBundleOptions()?.eagerFetchProducts??!1),variables:{id:this.id,productCollectionId:t??""},context:{bundleOwnerId:this.ownerId}});if(e.data?.bundleAssignProductCollection.productCollection){this.productCollection=e.data.bundleAssignProductCollection.productCollection;const a=e.data.bundleAssignProductCollection.productCollection.globalPropertyConfiguration;this.globalPropertyStateManager.setConfiguration(a),await this.globalPropertyHandleService.getHandles(),this.globalConfigurationPropertyId=a?.id}}onModelLoadEvent(t){t.eventType==="unload"||!t.modelContainer||(t.modelContainer.registerMaterialSelectedCallback(()=>this.onModelSelectedEvent(t.modelContainer,!0)),t.modelContainer.registerMaterialDeselectedCallback(()=>this.onModelSelectedEvent(t.modelContainer,!1)))}onModelSelectedEvent(t,e){if(t&&t.metadata&&t.metadata instanceof Map&&t.metadata.has("workflowManager")){const i=t.metadata.get("workflowManager").getWorkflowExperience().getTransaction(),r=this.workflowExperiences.find(o=>o.getTransaction().id===i.id);r&&this.fireEvent(e?"workflow-experience-hover-enter":"workflow-experience-hover-exit",{workflowExperience:r})}}async injectExperienceIntoPreviewService(t){this.previewService&&await t.getWorkflowManager().injectIntoPreviewService(this.previewService)}async loadExistingWorkflowExperiences(t,e,a){if(t.length===0)return;const i=await this.client.getWorkflowExperiences(t.map(r=>({type:"transaction",transactionId:r})),e,void 0,a);if(i.forEach(r=>r.setBundle(this)),i.forEach(r=>r.checkForPriceBreakChanges()),this.workflowExperiences=i,this.previewService)for(const r of i)await this.injectExperienceIntoPreviewService(r);if(!this.globalPropertyStateManager.getBundleOptions()?.readonly){const r=this.getProductIds()||[],o=this.getProductCollection();if(o&&r.length>0){await o.fetchProducts();const s=o.getProducts(),l=[],c=[];for(const u of r)if(!s.find(h=>h.getId()===u)){for(const h of i)h.getProduct()?.id===u&&c.push(h);l.push(u)}const d=[];l.length>0&&d.push(this.removeProductIds(l)),c.length>0&&d.push(Promise.all(c.map(u=>u.clearProduct()))),d.length>0&&await Promise.all(d)}}}async updateBundle(){if(!(await S.getShadowGraphqlClient().mutate({mutation:ye,variables:{id:this.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([e,a])=>({key:e,value:a})),bundleStateData:this.bundleStateManager.getSerializedState(),dispatchDate:this.dispatchDate,purchaseOrder:this.purchaseOrder},context:{bundleOwnerId:this.ownerId}})).data?.bundleUpdate)throw new Error("Bundle not found!")}async updateTransactionOrder(){await S.getShadowGraphqlClient().mutate({mutation:ec,variables:{id:this.id,transactionIds:this.workflowExperiences.map(t=>t.getTransaction().id)},context:{bundleOwnerId:this.ownerId}})}async onGlobalPropertiesChanged(t,e){if(this.updatesLocked)return;const a=await this.globalPropertyHandleService.getHandles(),i=this.globalPropertyHandleService.applyConditionsFromState(a,t),r=this.globalPropertyHandleService.applyConditionsFromState(a,e);this.checkConditionalHandlesChanged(i,r),this.checkMandatoryHandlesChanged(t,r);const o=this.getGlobalPropertyStateManager();let s=[];for(const u of a)r.find(A=>A.getName()==u.getName())||(s=[...s,u.getName()]);await o.clearAspects(s);const l=r.map(u=>{if(u.getType()===q.ColorOption||u.getType()===q.Option){const A=u;if(!e.aspects.find(g=>g.name===A.getName()))return A.initDefaultVariant()}});await Promise.all(l),await Promise.all(r.map(u=>u.applyGlobalState()));const c=this.globalPropertyStateManager.getGlobalPropertyState(),d=this.globalPropertyHandleService.applyConditionsFromState(a,c);te(r.sort(),d.sort())||(this.checkConditionalHandlesChanged(r,d),this.checkMandatoryHandlesChanged(c,d),await this.onGlobalPropertiesChanged(e,c))}checkConditionalHandlesChanged(t,e){(()=>{if(t.length!==e.length)return!0;for(let r=0;r<t.length;r++)if(t[r].getName()!==e[r].getName())return!0;return!1})()&&this.fireEvent("conditional-global-properties-changed",{globalProperties:e})}checkMandatoryHandlesChanged(t,e){const a=[],i=[],r=[],o=Xi(t);e.forEach(s=>{if(s.isMandatory()){const l=s.isMandatoryFulfilled();l?i.push(s):r.push(s);const c=o.get(s.getName());(c===void 0||c!==l)&&a.push(s)}}),this.fireEvent("global-properties-mandatory-changed",{changed:a,completed:i,remaining:r})}fireEvent(t,e){this.eventEmitter.emit(t,e)}getShareActions(){return this.shareActions}getWorkflowViewerLink(){return this.workflowViewerLink}getWorkflowViewerAmendLink(){return this.workflowViewerAmendLink}async approve(t,e){await S.getShadowGraphqlClient().mutate({mutation:oc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.id,note:t,stakeholderId:e}})}async reject(t,e){await S.getShadowGraphqlClient().mutate({mutation:sc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.id,note:t,stakeholderId:e}})}getQuoteCompleteMessage(){return{bundleId:this.id,bundleOwnerId:this.ownerId,quoteId:this.quoteId||""}}}const Hc=C.gql`
2337
2338
  mutation processFlowCreate($processFlowId: String!, $inputs: [String]!) {
2338
2339
  processExecutionCreate(processFlowId: $processFlowId, inputs: $inputs) {
2339
2340
  id
2340
2341
  }
2341
2342
  }
2342
- `;class tr{async execute(t,e,a){const r=(await S.getShadowGraphqlClient().mutate({mutation:Hc,variables:{processFlowId:t,inputs:[...e.map(u=>u.getValueForTransmission())]}})).data?.processExecutionCreate?.id;if(!r)throw new Error("Failed to create process execution.");function o(u){return new Promise(A=>{setTimeout(A,u)})}let s=!1,l=0,c,d;for(;!s;){c=await S.getShadowGraphqlClient().query({query:C.gql`
2343
+ `;class er{async execute(t,e,a){const r=(await S.getShadowGraphqlClient().mutate({mutation:Hc,variables:{processFlowId:t,inputs:[...e.map(u=>u.getValueForTransmission())]}})).data?.processExecutionCreate?.id;if(!r)throw new Error("Failed to create process execution.");function o(u){return new Promise(A=>{setTimeout(A,u)})}let s=!1,l=0,c,d;for(;!s;){c=await S.getShadowGraphqlClient().query({query:C.gql`
2343
2344
  query getProcessFlowExecution($ids: [String]!) {
2344
2345
  processExecutions(ids: $ids) {
2345
2346
  id
@@ -2352,7 +2353,7 @@
2352
2353
  }
2353
2354
  }
2354
2355
  }
2355
- `,variables:{ids:[r]}});const u=c.data?.processExecutions[0];if(!c||!u)throw new Error("Failed to retrieve server response for execution.");if(u.failedAt)throw new Error("Execution has failed to complete. See Automation > FLows in Flight on partner account on SpiffCommerce Hub.");if(u.completedAt){s=!0,d=new er(u);break}l+=1;const A=a?.repeats?a?.repeats:5;if(l>=A)throw new Error("Maximum wait time exceeded for execution result.");await o(a?.sleepTime?Math.max(a.sleepTime,500):2e3)}if(!d)throw new Error("Failed to retrieve server response for execution.");return Promise.resolve(d)}}class er{constructor(t){this.execution=t}getRaw(){return this.execution}getNodes(){return this.execution.nodes.map(t=>new Yt(t))}getNodesByType(t){return this.execution.nodes.filter(e=>e.type===t).map(e=>new Yt(e))}getInputs(){return this.execution.nodes.filter(t=>t.type==="StartTerminal").map(t=>new Yt(t))}getOutputs(){return this.execution.nodes.filter(t=>t.type==="EndTerminal").map(t=>new Yt(t))}getCompletedAt(){if(this.execution.completedAt)return new Date(this.execution.completedAt)}getFailedAt(){if(this.execution.failedAt)return new Date(this.execution.failedAt)}}class Yt{constructor(t){this.node=t}getId(){return this.node.id}getType(){return this.node.type}getArtifacts(){return new Map(Object.entries(JSON.parse(this.node.artifacts).value))}getArtifactByName(t){return this.getArtifacts().get(t)}}class en{constructor(t){this.value=t}getRaw(){return this.value}getValueForTransmission(){const t=this.value;return t.startsWith("[")?JSON.stringify(JSON.parse(t)):t}}var ar=(n=>(n.Transaction="Transaction",n.Bundle="Bundle",n.Product="Product",n.Variant="Variant",n.Option="Option",n.LineItem="LineItem",n.Asset="Asset",n))(ar||{});class Wc extends en{constructor(t){super(`"${t}"`)}}class an extends en{constructor(t,e){if(e!=="Asset"&&!an.validUUID(t))throw new Error("Invalid ID, must be a valid v4 UUID. https://www.uuidgenerator.net/");super(`{"isSpiffObject": true, "id": "${t}", "type": "${e}"}`)}static validUUID(t){return t.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i)}}class Yc extends en{constructor(t){super(`[${t.map(e=>e.getRaw()).join(",")}]`)}}class Da{constructor(t){this.integrationProduct=t}getId(){return this.integrationProduct.id}getResource(){return this.integrationProduct}getBasePrice(){if(!this.integrationProduct.product)throw new Error("IntegrationProductResource does not have a product");const t=this.integrationProduct.product.basePrice||0,e=this.integrationProduct?.additionalIntegrationProduct;if(!e)return t;if(e&&!e.product)throw new Error("An additional integration product was found, but it does not have a product");return t+(e.product.basePrice||0)}getDefaultWorkflow(){if(!this.integrationProduct.product)throw new Error("IntegrationProductResource does not have a product");const t=this.integrationProduct.product.workflows||[];if(t.length===0)throw new Error("No workflows found on product. This is generally due to a configuration error. Please confirm at least one workflow is configured for this product.");return new Qt(t[0])}getAllWorkflows(){if(!this.integrationProduct.product)throw new Error("IntegrationProductResource does not have a product");const t=this.integrationProduct.product.workflows||[];if(t.length===0)throw new Error("No workflows found on product. This is generally due to a configuration error. Please confirm at least one workflow is configured for this product.");return t.sort((e,a)=>(e.index??0)-(a.index??0)).map(e=>new Qt(e))}}const ve=C.gql`
2356
+ `,variables:{ids:[r]}});const u=c.data?.processExecutions[0];if(!c||!u)throw new Error("Failed to retrieve server response for execution.");if(u.failedAt)throw new Error("Execution has failed to complete. See Automation > FLows in Flight on partner account on SpiffCommerce Hub.");if(u.completedAt){s=!0,d=new ar(u);break}l+=1;const A=a?.repeats?a?.repeats:5;if(l>=A)throw new Error("Maximum wait time exceeded for execution result.");await o(a?.sleepTime?Math.max(a.sleepTime,500):2e3)}if(!d)throw new Error("Failed to retrieve server response for execution.");return Promise.resolve(d)}}class ar{constructor(t){this.execution=t}getRaw(){return this.execution}getNodes(){return this.execution.nodes.map(t=>new Yt(t))}getNodesByType(t){return this.execution.nodes.filter(e=>e.type===t).map(e=>new Yt(e))}getInputs(){return this.execution.nodes.filter(t=>t.type==="StartTerminal").map(t=>new Yt(t))}getOutputs(){return this.execution.nodes.filter(t=>t.type==="EndTerminal").map(t=>new Yt(t))}getCompletedAt(){if(this.execution.completedAt)return new Date(this.execution.completedAt)}getFailedAt(){if(this.execution.failedAt)return new Date(this.execution.failedAt)}}class Yt{constructor(t){this.node=t}getId(){return this.node.id}getType(){return this.node.type}getArtifacts(){return new Map(Object.entries(JSON.parse(this.node.artifacts).value))}getArtifactByName(t){return this.getArtifacts().get(t)}}class en{constructor(t){this.value=t}getRaw(){return this.value}getValueForTransmission(){const t=this.value;return t.startsWith("[")?JSON.stringify(JSON.parse(t)):t}}var nr=(n=>(n.Transaction="Transaction",n.Bundle="Bundle",n.Product="Product",n.Variant="Variant",n.Option="Option",n.LineItem="LineItem",n.Asset="Asset",n))(nr||{});class Wc extends en{constructor(t){super(`"${t}"`)}}class an extends en{constructor(t,e){if(e!=="Asset"&&!an.validUUID(t))throw new Error("Invalid ID, must be a valid v4 UUID. https://www.uuidgenerator.net/");super(`{"isSpiffObject": true, "id": "${t}", "type": "${e}"}`)}static validUUID(t){return t.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i)}}class Yc extends en{constructor(t){super(`[${t.map(e=>e.getRaw()).join(",")}]`)}}class Da{constructor(t){this.integrationProduct=t}getId(){return this.integrationProduct.id}getResource(){return this.integrationProduct}getBasePrice(){if(!this.integrationProduct.product)throw new Error("IntegrationProductResource does not have a product");const t=this.integrationProduct.product.basePrice||0,e=this.integrationProduct?.additionalIntegrationProduct;if(!e)return t;if(e&&!e.product)throw new Error("An additional integration product was found, but it does not have a product");return t+(e.product.basePrice||0)}getDefaultWorkflow(){if(!this.integrationProduct.product)throw new Error("IntegrationProductResource does not have a product");const t=this.integrationProduct.product.workflows||[];if(t.length===0)throw new Error("No workflows found on product. This is generally due to a configuration error. Please confirm at least one workflow is configured for this product.");return new Qt(t[0])}getAllWorkflows(){if(!this.integrationProduct.product)throw new Error("IntegrationProductResource does not have a product");const t=this.integrationProduct.product.workflows||[];if(t.length===0)throw new Error("No workflows found on product. This is generally due to a configuration error. Please confirm at least one workflow is configured for this product.");return t.sort((e,a)=>(e.index??0)-(a.index??0)).map(e=>new Qt(e))}}const Ee=C.gql`
2356
2357
  query GetCustomer($emailAddress: String!) {
2357
2358
  customer(emailAddress: $emailAddress) {
2358
2359
  id
@@ -2462,7 +2463,7 @@
2462
2463
  }
2463
2464
  }
2464
2465
  }
2465
- `;class Xc{constructor(t,e=S.getShadowGraphqlClient.bind(S)){this.options=t,this.client=e}query(t){const e=this.options?.onQuery?this.options?.onQuery(t):{};return this.client().query({...e,...t,context:{...e.context??{},...t.context??{}}})}mutate(t){const e=this.options?.onMutate?this.options?.onMutate(t):{};return this.client().mutate({...e,...t,context:{...e.context??{},...t.context??{}}})}}class Zc{init(t,e,a){this.cognitoClient=new pe.CognitoIdentityProviderClient({region:e}),this.spiffRegion=t,this.userPoolClientId=a}async generateCode(t){const e=await this.cognitoClient?.send(new pe.InitiateAuthCommand({AuthFlow:"CUSTOM_AUTH",ClientId:this.userPoolClientId,AuthParameters:{USERNAME:t}}));e?.ChallengeName==="CUSTOM_CHALLENGE"&&(this.challengeSession=e.Session)}async verifyCode(t,e,a){const i=await this.cognitoClient?.send(new pe.RespondToAuthChallengeCommand({ClientId:this.userPoolClientId,ChallengeName:"CUSTOM_CHALLENGE",Session:this.challengeSession,ChallengeResponses:{USERNAME:t,ANSWER:e},ClientMetadata:{partnerId:a,environment:(this.spiffRegion||"").toLowerCase()}}));return i?.ChallengeName==="CUSTOM_CHALLENGE"&&(this.challengeSession=i.Session),i}async refreshTokens(){const t=localStorage.getItem("cognito-tokens");if(!t)throw new Error("Failed to find existing tokens.");const e=JSON.parse(t);return await this.cognitoClient?.send(new pe.InitiateAuthCommand({AuthFlow:"REFRESH_TOKEN_AUTH",ClientId:this.userPoolClientId,AuthParameters:{REFRESH_TOKEN:e.RefreshToken||""}}))}}const jt=new Zc;class nr{formatCurrencyForDisplay(t,e){const a={amount:e||0,currency:t,precision:this.getPrecisionForCurrency(t)};return Qr(a).toFormat(this.getSpecialFormat(t))}getPrecisionForCurrency(t){const e=t,a=ln.code(e);return a?a.digits:2}getSpecialFormat(t){const e=t;if(ln.code(e)?.code==="CLP")return"USD0,0"}}const Fn=new nr;class ir{constructor(t,e,a,i){this.presentmentCurrency=void 0,this.presentmentCurrency=i,this.partnerCurrency=a,this.rateFrom=t,this.rateTo=e}code(){return this.presentmentCurrency?this.presentmentCurrency:this.partnerCurrency}conversionRequired(){return this.presentmentCurrency!==void 0&&this.code()!==this.partnerCurrency}getConvertedSubunits(t){return this.conversionRequired()?Math.ceil(this.subunits(this.units(t,this.partnerCurrency)/this.rateFrom*this.rateTo,this.code())):t}units(t,e){return t/Math.pow(10,Fn.getPrecisionForCurrency(e))}subunits(t,e){return t*Math.pow(10,Fn.getPrecisionForCurrency(e))}}const td=async(n,t)=>{const e=await S.getShadowGraphqlClient().query({query:as(t?.assets?.metadata||!1),errorPolicy:"all",variables:{ids:n}});if(e.error)throw e.error;if(e.errors)throw e.errors.forEach(i=>console.error(i)),new Error("Unable to read workflows. Consult GraphQL errors.");const a=e.data.workflows;if(a===void 0||a.length!==n.length)throw new Error(`Unable to read workflows: ${e.errors??"Length mismatch in response"}`);return a.forEach(i=>{i.finalizeStepConfig||(i.finalizeStepConfig={}),i.finalizeStepConfig.termsMarkdown=i.finalizeStepConfig.termsMarkdown||i.partner.termsMarkdown}),a},ed=async(n,t)=>{const a=(await t).find(i=>i.id===n);if(!a)throw new Error(`Workflow not found: ${n}`);return a},nn=async(n,t)=>{const e=n.map(s=>ie.get({id:s,options:t})),a=n.filter((s,l)=>e[l]===void 0);if(a.length===0)return Promise.all(e);const i=td(a,t),r=a.map(s=>ie.set({id:s,options:t},ed(s,i))),o=e.filter(s=>s!==void 0);return await Promise.all(o.concat(r))},rr=async(n,t)=>(await nn([n],t))[0],ad=async n=>{const t=await S.getShadowGraphqlClient().query({query:Uo,variables:{ids:n},errorPolicy:"all",fetchPolicy:"no-cache"});return t.errors&&console.error(t.errors),t.data.integrationProducts||[]};class nd{constructor(t){this.activeIntegration=void 0,this.updateTransactionState=async e=>{try{return S.getShadowGraphqlClient().mutate({...e,mutation:Lo})}catch(a){throw console.error(a),new ft("Critical - Unable to synchronize workflow state with server.")}},this.options=t,this.options.applicationKey&&to(this.options.applicationKey),console.debug("------------------------"),console.debug("Spiff Commerce Core SDK"),console.debug("Version: 36.1.1"),console.debug(`Application Key Provided: ${!!this.options.applicationKey}`),console.debug("------------------------")}configure(t){ht.setHubUrl(t.hubUrl),ht.setServerUrl(t.serverUrl),ht.setServicesApiUrl(t.servicesApiUrl),this.marketplaceThemeInstallId=t.marketplaceThemeInstallId,this.marketplaceThemeInstallConfigurationId=t.marketplaceThemeInstallConfigurationId,this.userPoolClientId=t.userPoolClientId,this.userPoolRegion=t.userPoolRegion,this.spiffRegion=t.spiffRegion,t.bearerAuthenticationToken&&Zn(t.bearerAuthenticationToken),this.options.applicationKey&&this.getIntegration(),this.spiffRegion&&this.userPoolRegion&&this.userPoolClientId&&jt.init(this.spiffRegion,this.userPoolRegion,this.userPoolClientId)}getAssetManager(){return W}async getBetaEnabled(){return this.options.enableBetaFeatures?!0:(await this.getIntegration()).partner.beta===!0}getFlowService(){if(!eo())throw new Error("Application key required to use Flow Service.");return new tr}async getCurrencyContext(t){const a=(await this.getIntegration()).partner.currencyCode,r=await S.getShadowGraphqlClient().query({query:ls,errorPolicy:"all",fetchPolicy:"cache-first",variables:{from:a,to:t}}),{rateFrom:o,rateTo:s}=r.data.currencyConversion;return new ir(o,s,a,t)}async getIntegration(){if(this.activeIntegration)return this.activeIntegration;if(!this.options.applicationKey)throw new Error("Cannot get current Integration without specifying an Application Key.");return this.activeIntegration=or(this.options.applicationKey),this.activeIntegration}async canUseAddon(t){try{return(await this.getIntegration()).partner.activeAddons?.includes(t)??!1}catch(e){return console.error(e),!1}}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(t){const e=Q.getMap("transactionCustomerIds");e?.has(t)&&(e.delete(t),Q.setMap("transactionCustomerIds",e))}async customerHasBundleTemplates(t){const i=(await S.getShadowGraphqlClient().query({query:ve,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;return i.id?i.hasBundleTemplates??!1:!1}getStakeholderTypeForTransaction(t){const e=this.customer?.stakeholders?.find(a=>a.transaction?.id===t);if(e)return e.type}async getOrCreateCustomer(t){this.customer=void 0;const e=S.getShadowGraphqlClient(),i=(await e.query({query:ve,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;if(!i.id){const s=(await e.mutate({mutation:Jc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:t}}})).data?.customerCreate;if(!s)throw new Error("Unable to create customer.");return this.storeCustomer(s),this.customer=s,{customer:s,isAuthenticated:!1}}this.storeCustomer(i);const r=await this.reloadLoggedInCustomer();return{customer:this.customer||i,isAuthenticated:r}}getCustomer(){return this.customer}async reloadLoggedInCustomer(){const t=localStorage.getItem("last-refreshed-cognito-tokens"),e=localStorage.getItem("cognito-tokens"),a=localStorage.getItem("cognito-email");if(!t||!e||!a)return!1;const i=JSON.parse(e),r=new Date().getTime()/1e3;if(!i.ExpiresIn||i.ExpiresIn<r-parseInt(t)){const l=await jt.refreshTokens();if(l?.AuthenticationResult)localStorage.setItem("last-refreshed-cognito-tokens",`${new Date().getTime()/1e3}`),i.AccessToken=l.AuthenticationResult.AccessToken,localStorage.setItem("cognito-tokens",JSON.stringify(i));else return this.logOut(),console.error("Failed to refresh tokens."),!1}const s=(await S.getShadowGraphqlClient().query({query:ve,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:a}})).data.customer;return s.id?(this.customer=s,!0):(console.error("Failed to get customer."),!1)}async generateVerificationCode(t){await S.getShadowGraphqlClient().mutate({mutation:Kc,variables:{emailAddress:t}}),await jt.generateCode(t)}async verifyCode(t,e){const a=(await this.getIntegration()).partner.id||"",i=await jt.verifyCode(t,e,a);if(i?.AuthenticationResult){localStorage.setItem("last-refreshed-cognito-tokens",`${new Date().getTime()/1e3}`),localStorage.setItem("cognito-tokens",JSON.stringify(i.AuthenticationResult)),localStorage.setItem("cognito-email",t);const o=(await S.getShadowGraphqlClient().query({query:ve,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;if(!o.id)throw new Error("Failed to get customer.");return this.customer=o,!0}else throw new Error}async logOut(){localStorage.removeItem("last-refreshed-cognito-tokens"),localStorage.removeItem("cognito-tokens"),localStorage.removeItem("cognito-email"),this.clearCustomer()}async loggedInBearerToken(){const t=localStorage.getItem("last-refreshed-cognito-tokens"),e=localStorage.getItem("cognito-tokens");if(!t||!e)throw new Error("No token data in storage.");const a=JSON.parse(e),i=new Date().getTime()/1e3,r=!a?.AccessToken||Te(a.AccessToken);if(!a.ExpiresIn||a.ExpiresIn<i-parseInt(t)||r){const o=await jt.refreshTokens();if(o?.AuthenticationResult)localStorage.setItem("last-refreshed-cognito-tokens",`${new Date().getTime()/1e3}`),a.AccessToken=o.AuthenticationResult.AccessToken,localStorage.setItem("cognito-tokens",JSON.stringify(a));else throw this.logOut(),new Error("Failed to refresh tokens.")}if(!a.AccessToken)throw new Error("No bearer token in storage.");return a.AccessToken}async getCustomerMetafields(){if(!this.customer?.id)throw new Error("Customer must be logged in before calling this function.");return(await S.getShadowGraphqlClient().query({query:_c,variables:{id:this.customer.id}})).data.metafields}async getNewBundle(t,e,a){const r=(await S.getShadowGraphqlClient().mutate({mutation:Hl(a?.graphql?.productCollection?.eagerFetchProducts||!1),variables:{collectionId:t,initialMetadata:e?Object.entries(e).map((c,d)=>({key:c[0],value:c[1]})):void 0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},fetchPolicy:"no-cache"})).data?.bundleCreate;if(!r?.id)throw new Error("Unable to create bundle");const o=Q.getMap("bundlePartnerIds")||new Map;o.set(r.id,r.partner.id),Q.setMap("bundlePartnerIds",o);const s=Q.getMap("bundleOwnerIds")||new Map;s.set(r.id,r.bundleOwnerId),Q.setMap("bundleOwnerIds",s);const l=new xn(this,r,void 0,void 0,r.bundleOwnerId,{eagerFetchProducts:a?.graphql?.productCollection?.eagerFetchProducts});return await l.getInitializationPromise(),l}async getExistingBundle(t,e,a,i,r){const s=Q.getMap("bundleOwnerIds")?.get(t),l={};try{const g=await this.loggedInBearerToken();l.Authorization=`Bearer ${g}`}catch{const m=Object.entries(localStorage).find(([y,w])=>y.startsWith("CognitoIdentityServiceProvider")&&y.endsWith("idToken"))?.[0]||"",f=localStorage.getItem(m);f&&!Te(f)&&(l.Authorization=`Bearer ${f}`)}const c={bundleOwnerId:s,...l,...i?.graphql?.additionalHeaders},d=await S.getShadowGraphqlClient().query({query:Ll(i?.graphql?.productCollection?.eagerFetchProducts||!1),variables:{id:t},fetchPolicy:"no-cache",context:{headers:c}});if(!d.data?.bundles||d.data?.bundles.length===0||!d.data?.bundles[0])throw new Error(`Unable to find bundle: ${t}`);const u=d.data?.bundles[0],A=Q.getMap("bundlePartnerIds")||new Map;A.set(u.id,u.partner.id),Q.setMap("bundlePartnerIds",A);const h=new xn(this,u,e,a,s,{additionalHeaders:i?.graphql?.additionalHeaders,eagerFetchProducts:i?.graphql?.productCollection?.eagerFetchProducts,existingGlobalPropertyState:d.data.globalPropertyState,readonly:i?.readonly},r);return await h.getInitializationPromise(),h}async duplicateBundle(t,e,a,i){const o={...await lr(t),...i?.graphql?.additionalHeaders},l=(await S.getShadowGraphqlClient().mutate({mutation:Wl(),variables:{id:t,template:e,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId,duplicateTransactions:a},context:{headers:o},fetchPolicy:"no-cache"})).data?.bundleDuplicate;if(!l?.id)throw new Error("Unable to duplicate bundle");const c=Q.getMap("bundlePartnerIds")||new Map;c.set(l.id,l.partner.id),Q.setMap("bundlePartnerIds",c);const d=Q.getMap("bundleOwnerIds")||new Map;return d.set(l.id,l.bundleOwnerId),Q.setMap("bundleOwnerIds",d),async()=>await this.getExistingBundle(l.id,void 0,void 0,{graphql:{productCollection:{eagerFetchProducts:i?.graphql?.productCollection?.eagerFetchProducts||!1}}})}async getBundlesForCustomer(t){if(!this.customer?.id)throw new Error("Customer not authenticated.");const{includeMetadata:e,...a}=t;return(await S.getShadowGraphqlClient().query({query:ic(e??!1),variables:{...a,id:this.customer.id},fetchPolicy:"no-cache"})).data.customerBundlesFeed}async getBundleStakeholders(){if(!this.customer)throw new Error("Customer not authenticated.");const t=await S.getShadowGraphqlClient().query({query:ql,variables:{id:this.customer.id},fetchPolicy:"no-cache"});if(!t.data?.customers||t.data.customers.length===0)throw new Error("Unable to find customer.");const a=t.data.customers[0].bundleStakeholders||[],i=Q.getMap("bundlePartnerIds")||new Map;return a.forEach(r=>{r.bundle?.id&&r.bundle.partner?.id&&i.set(r.bundle.id,r.bundle.partner.id)}),Q.setMap("bundlePartnerIds",i),a}async getWorkflowExperience(t,e){if(!t)throw new Error("getWorkflowExperience has been called without an options object! This is not supported.");const a=await this.getWorkflowExperiences([t],t.graphql),i=a[0],r=i.getWorkflow();return e&&!r&&console.error("No workflow instantiated when trying to create preview service."),e&&r&&await i.getWorkflowManager().injectIntoPreviewService(e(r)),a[0]}async getWorkflowExperiences(t,e,a,i){if(t.length===0)throw new ft("No options provided!");const r=t.map((x,T)=>({option:x,index:T})),o=r.filter(x=>x.option.type==="transaction"),s=r.filter(x=>x.option.type==="integration"||x.option.type==="external"||x.option.type==="blank"),l=50,c=ha(o,l),d=ha(s,l);let u=0;const A=S.getShadowGraphqlClient(),h=async x=>{if(x.length===0)return[];const T=x.map(X=>X.option.transactionId),L=await A.query({query:Vo,variables:{ids:T},errorPolicy:"all",fetchPolicy:"no-cache"}),k=L.data.transactions;if(u=u+k.length,i&&i(u,o.length),k.length!==x.length){const X=L.errors?.[0]?.message||"Unknown error";throw new ft(`Not all transactions were found: ${X}`)}return!this.activeIntegration&&k[0].integrationProduct?.integration&&(this.activeIntegration=Promise.resolve(k[0].integrationProduct.integration)),k.map((X,bt)=>({transaction:X,workflowId:X.workflowId,readOnly:x.find(gt=>gt.option.transactionId===X.id)?.option.readOnly??!1,index:x[bt].index}))},g=async x=>{if(x.length===0)return[];const T=await A.mutate({mutation:$o,variables:{inputs:x.map(k=>({integrationProductId:k.option.type==="integration"?k.option.integrationProductId:void 0,externalIntegrationId:k.option.type==="external"?k.option.externalIntegrationId:void 0,externalProductId:k.option.type==="external"?k.option.externalProductId:void 0,workflowId:k.option.workflowId,designName:k.option.designName,claim:!0,quantity:k.option.quantity,recipient:k.option.recipient})),marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache"}),L=T.data?.transactionCreateMany;if(!L||L.length===0){const k=T.errors?.[0]?.message||"Unknown error";throw new ft(`Failed to create transactions: ${k}`)}return u=u+L.length,i&&i(u,o.length),L.map((k,X)=>({transaction:k,workflowId:k.workflowId,readOnly:!1,index:x[X].index}))},p=(await Promise.all([...c.map(h),...d.map(g)])).flat(),m=[...new Set(p.map(x=>x.transaction.integrationProductId))].filter(x=>x!==void 0),f=[...new Set(p.map(x=>x.workflowId))].filter(x=>x!==void 0),[y,w]=await Promise.all([(async()=>m.length>0?await ad(m):[])(),(async()=>f.length>0?await nn(f,e):[])()]),F=new Map(y.map(x=>[x.id,x])),b=new Map(w.map(x=>[x.id,x])),v=p.map(async x=>{const{transaction:T,workflowId:L,readOnly:k,index:X}=x,bt=L?b.get(L):void 0,gt=t[X];if(T.integrationProductId){const ot=F.get(T.integrationProductId);T.integrationProduct=ot,T.product=ot?.product,T.integrationProduct||console.error("failed to find transaction's product")}const ge=Q.getMap("transactionOwnerIds")||new Map;!ge.get(T.id)&&T.transactionOwnerId&&(ge.set(T.id,T.transactionOwnerId),Q.setMap("transactionOwnerIds",ge));const Ke=ge.get(T.id)||void 0,Cr=new Xc({onMutate:()=>({context:{transactionOwnerId:Ke,bundleOwnerId:e?.bundleOwnerId}}),onQuery:()=>({context:{transactionOwnerId:Ke,bundleOwnerId:e?.bundleOwnerId}})}),me={workflow:bt,transaction:T,singleVariantsRenderable:gt?.workflowConfiguration?.singleVariantsRenderable,stateMutationFunc:k?async()=>{throw new O("State mutation is forbidden in read only mode!")}:async ot=>this.updateTransactionState({...ot,context:{transactionOwnerId:Ke,bundleOwnerId:e?.bundleOwnerId}}),graphQlClient:()=>Cr,readOnly:k,isReloadedTransaction:gt.type==="transaction"};if(gt.type==="transaction"&&T.workflowState){const ot=JSON.parse(T.workflowState);await ba(ot),me.reloadedState=ot}else if(!k&&gt.workflowState){const ot=JSON.parse(gt.workflowState);await ba(ot),me.reloadedState=ot}return me.delayWorkflowStateSync=!0,{experienceOptions:me,index:X,options:gt}}),M=(await Promise.all(v)).sort((x,T)=>x.index-T.index);let R=[];for(const x of M){const{experienceOptions:T,options:L}=x,k=new Wi(this,T);await k.getWorkflowManager().getInitializationPromise(),a&&a(),L.type!=="transaction"&&this.customer&&await k.attachCustomerDetails({email:this.customer.emailAddress}),R=[...R,k],k.getWorkflowManager().setWorkflowStateSyncEnabled(!0)}return R}storeCustomer(t){const e=Q.getMap("partnerCustomerIds")||new Map;e.set(t.partner.id,t.id),Q.setMap("partnerCustomerIds",e)}async getIntegrationProductById(t,e){const r=(await S.getShadowGraphqlClient().query({query:Yo(e),variables:{ids:[t]},fetchPolicy:"no-cache",errorPolicy:"all"})).data?.integrationProducts;if(!r||r.length===0||!r[0]?.id)throw new Error("Integration product not found.");return new Da(r[0])}async getIntegrationProductFromExternalIds(t,e,a){const o=(await S.getShadowGraphqlClient().query({query:Jo(a),variables:{externalProductId:e,externalIntegrationId:t},fetchPolicy:"no-cache",errorPolicy:"all"})).data?.integrationProductFromExternalIds;if(!o?.id)throw new Error("Integration product not found.");return new Da(o)}async getIntegrationProduct(t){return t.type==="integration"?this.getIntegrationProductById(t.integrationProductId):this.getIntegrationProductFromExternalIds(t.externalIntegrationId,t.externalProductId)}async getShareActionsForTransaction(t){const a=(Q.getMap("transactionOwnerIds")||new Map).get(t)||void 0,i=await S.getShadowGraphqlClient().query({query:Ho,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t},context:{transactionOwnerId:a}});if(!i.data.transactions||i.data.transactions.length!==1)throw new Error(`Failed to fetch share actions for transaction: ${t}`);return i.data.transactions[0].transactionShareActions}async placeOrder(t){const e=await S.getShadowGraphqlClient().mutate({mutation:ss,variables:{orderItems:t}});if(e.errors)throw new Error(e.errors[0].message);if(!e.data)throw new Error("Failed to create order: No order data in response.");return{id:e.data.orderCreate.id,internalId:e.data.orderCreate.internalId}}}const or=async(n,t)=>(await S.getShadowGraphqlClient().query({query:is,errorPolicy:"all",fetchPolicy:"no-cache",context:{headers:{"x-application-key":n},skipIntegrationCheck:!0},variables:{themeConfigurationId:t}})).data.currentIntegration,id=async n=>{const e=await S.getShadowGraphqlClient().query({query:jo,errorPolicy:"all",fetchPolicy:"network-only",variables:{id:n}});if(e.data.transactions.length!==0)return e.data.transactions[0]},rd=async(n,t)=>(await S.getShadowGraphqlClient().query({query:ns,errorPolicy:"all",variables:{themeConfigurationId:n,themeInstallId:t}})).data?.marketplaceThemeInstallConfiguration,od=async n=>(await S.getShadowGraphqlClient().query({query:os,errorPolicy:"all",variables:{id:n}})).data?.bundles?.[0]?.marketplaceThemeInstallConfiguration,sd=async n=>(await S.getShadowGraphqlClient().query({query:rs,errorPolicy:"all",variables:{id:n}})).data?.transactions?.[0]?.marketplaceThemeInstallConfiguration;async function sr(){const n={};try{const t=await this.loggedInBearerToken();n.Authorization=`Bearer ${t}`}catch{const a=Object.entries(localStorage).find(([r,o])=>r.startsWith("CognitoIdentityServiceProvider")&&r.endsWith("idToken"))?.[0]||"",i=localStorage.getItem(a);i&&!Te(i)&&(n.Authorization=`Bearer ${i}`)}return n}async function lr(n){const e=Q.getMap("bundleOwnerIds")?.get(n),a=await sr();return{bundleOwnerId:e,...a}}async function ld(n){const e=Q.getMap("transactionOwnerIds")?.get(n),a=await sr();return{transactionOwnerId:e,...a}}const cd=async n=>{const t=await lr(n),e=await S.getShadowGraphqlClient().mutate({mutation:hc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n},context:{headers:t}});if(e.data?.bundleDelete!==n)throw new Error(`Failed to delete bundle: ${e.errors}`)},dd=async n=>{const t=await ld(n),e=await S.getShadowGraphqlClient().mutate({mutation:gc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:[n]},context:{headers:t}});if(!e.data?.transactions||e.data.transactions.length!==1||e.data.transactions[0].id!==n)throw new Error(`Failed to find transaction to read bundle id: ${JSON.stringify(e.errors)}`);return e.data.transactions[0].bundle?.id};function cr(n,t,e,a){const i=e.width*n.zoom,r=e.height*n.zoom;if(a){const s=n,l=Math.max(t.width/e.width,t.height/e.height);s.zoom=Math.max(l,n.zoom);const c=e.width*s.zoom,d=e.height*s.zoom;return s.x=Ee(n.x,t.width-c,0),s.y=Ee(n.y,t.height-d,0),s}const o=n;return o.x=Ee(o.x,-i,t.width),o.y=Ee(o.y,-r,t.height),o}function Ee(n,t,e){return Math.min(Math.max(n,t),e)}class dr{constructor(t,e){this.minZoomScale=[.03],this.maxZoomScale=[20],this._debouncedUpdateFrameOffsets=$n(this.updateFrameOffsets,200),this.targetElements=[],this.onFrameDataChangeListeners=[],this.onZoomChangeListeners=[],this.forceImageCover=t,this.initialZoom=e,this.thresholdSettings={useThreshold:!1,invertThreshold:!1,threshold:128,thresholdSaturation:.5}}connectWorkflowManager(t,e){e&&t.addStepSpecificStorageCallback(async a=>{if(a){const i=a;if(i.currentFrameSources){let r=!1;for(let o=0;o<i.currentFrameSources.length;o++){const s=i.currentFrameSources[o],l=await Ae(s),c=this.frameData?this.frameData[o]:void 0;te(l,c)||(this.frameData||(this.frameData=new Array(i.currentFrameSources.length)),this.frameData[o]=l,r=!0)}r&&(this.onFrameDataChangeListeners.forEach(o=>o(this.frameData)),this.frameData&&this.imageData&&(this.recalculateOffsets(this.imageData),this.updateOffsets(this.offsets),this.recalculateZoomLimits(this.imageData,this.frameData)))}}},e),this.workflowManager=t,this.stepName=e}setTargetElements(t){this.targetElements=t}getFrameData(){return this.frameData}setFrameData(t){if(!t){this.frameData=void 0;return}t.forEach((e,a)=>{const i=Mt.get(e);i&&(this.frameData||(this.frameData=new Array(t.length)),this.frameData[a]=i)})}getImageData(){return this.imageData}getImageSrc(){if(this.imageData){if(this.imageData.svg){const t=qe(this.imageData.svg,this.imageData.colors||{},!1);return Ve(t)}return this.imageData.src}}getOffsets(){return this.offsets}setOffsets(t){this.offsets=t}setZoom(t,e,a,i){if(this.imageData&&this.offsets&&this.frameData){(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length));const r=this.frameData.map((o,s)=>{const l=(e[s]-this.offsets[s].x)/this.offsets[s].zoom,c=(a[s]-this.offsets[s].y)/this.offsets[s].zoom,d=e[s]-l*t[s],u=a[s]-c*t[s];return{x:d,y:u,zoom:this.imageData.width*t[s]/this.imageData.width}});this.updateOffsets(r,i),this.onZoomChangeListeners.forEach(o=>o(t))}}setPatternData(t,e=!0){this.imageData=t,t&&this.frameData&&((e||!this.offsets)&&this.recalculateOffsets(t),this.updateOffsets(this.offsets,void 0,!0)),this.imageData&&this.frameData&&this.recalculateZoomLimits(this.imageData,this.frameData)}updateOffsets(t,e,a){const i=this.imageData;if(!i||!this.frameData)return;if(this.frameData.length!==t.length)throw new O("Frame data and offsets are not the same length. This is a bug. Please report it.");if(!this.offsets.some((o,s)=>!(t[s].x===o.x&&t[s].y===o.y&&t[s].zoom===o.zoom))&&!a){e&&e();return}(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((o,s)=>{this.offsets[s]=cr(t[s],o,this.imageData,this.forceImageCover)}),this._debouncedUpdateFrameOffsets(this.offsets,i,this.frameData,this.thresholdSettings,e)}getThresholdSettings(){return this.thresholdSettings}setThresholdSettings(t){this.thresholdSettings=t,this.imageData&&this.frameData&&this._debouncedUpdateFrameOffsets(this.offsets,this.imageData,this.frameData,t)}onFrameDataChanged(t){t(this.frameData),this.onFrameDataChangeListeners.push(t)}onZoom(t){this.onZoomChangeListeners.push(t)}updateFrameOffsets(t,e,a,i,r){if(!a||a.length===0||a.some(l=>!l))throw new O("Frame data not set. This is a bug");if(!this.workflowManager)throw new O("No workflow manager set, cannot update offsets.");const o=this.workflowManager.getRegionElements(this.stepName||""),s=this.workflowManager.getCommandDispatcher();this.targetElements.forEach((l,c)=>{let d=o.find(u=>u.id===l)?.regionIndex??c;d>=t.length&&(d=c),s(new U([new js(l,e,t[d]),new Hs(l,i.useThreshold,i.invertThreshold,i.threshold,i.thresholdSaturation)]))}),this.stepName&&this.workflowManager.updateStorage(this.stepName,{frameOffsetsList:t}),r&&r()}recalculateZoomLimits(t,e){(this.minZoomScale.length!==e.length||this.maxZoomScale.length!==e.length)&&(this.minZoomScale=new Array(e.length),this.maxZoomScale=new Array(e.length)),e.forEach((a,i)=>{const r=Math.max(a.width/t.width,a.height/t.height);this.forceImageCover?(this.minZoomScale[i]=r,this.maxZoomScale[i]=r*2.5):(this.minZoomScale[i]=r/10,this.maxZoomScale[i]=r*2.5)})}recalculateOffsets(t){this.frameData&&((!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((e,a)=>{this.offsets[a]=qa(t,e,this.initialZoom&&!this.forceImageCover?{scale:this.initialZoom}:void 0,this.forceImageCover)}),this._debouncedUpdateFrameOffsets(this.offsets,t,this.frameData,this.thresholdSettings))}}class ud{traversableScenes(){throw new Error("Method not implemented.")}updateRecipient(t,e,a,i,r,o,s,l,c,d,u,A,h,g,p,m,f){throw new Error("Method not implemented.")}approveTransaction(t){throw new Error("Method not implemented.")}rejectTransaction(t){throw new Error("Method not implemented.")}getClient(){return this.client??{}}getWorkflowExperience(){return{}}setClient(t){this.client=t}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}async reset(){}updateStateWithServer(t){}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(t){}addPoller(t){}addConfirmCallback(t){}addEditedCallback(t){}addElementsCallback(t){}addInformationResultCallback(t){}addInitCallback(t){}addMakingAdjustmentsCallback(t){}addMandatoryCallback(t){}addMetadataCallback(t){}addSelectionCallback(t){}addStepSpecificStorageCallback(t,e){}addStorageCallback(t){}getCommandDispatcher(){return t=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getRegionElements(t){return[]}getSerializedStep(t,e){}getStepSpecificServices(t){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getInitialOptionIds(){return new Set}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(t){}markUpdateCompleted(t){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}getStepSelections(){return{}}setCurrentAdjustingStepId(t){}setEditedStatus(t,e){}setInformationResults(t){}setMandatoryFulfilled(t,e){}async setSelectionsAndElements(t,e,a){}toggleDesignConfirmed(){}updateMetadata(t,e){}async updateStorage(t,e){}injectIntoPreviewService(t){return Promise.resolve()}ejectFromPreviewService(){}setWorkflowStateSyncEnabled(t){}async updateTransactionShareActions(){}addValidationCallback(t){}setStepError(t,e,a){}getStepErrors(t){}getValidationErrors(){return{steps:new Map}}async updateTransactionStakeholders(){}getStepTags(t){return[]}}var ur=(n=>(n.SelectFrame="SelectFrame",n.SelectImage="SelectImage",n.Position="Position",n))(ur||{});class Ar extends Z{constructor(t,e,a){super(t,e,a);const i=e.data;this.frameService=new dr(i.forceImageCover,i.initialZoomLevel),this.frameService.connectWorkflowManager(t,e.stepName)}selectVariant(t){const e=this.manager.getRegionElements(this.step.stepName);return pt.selectVariant(this.step,t.getResource(),e,this.manager,a=>this.setUpdateState(a))}onFrameDataChanged(t){this.frameService&&this.frameService.onFrameDataChanged(e=>{e&&t(e)})}async selectImage(t,e=!0,a=!0){if(await pt.selectImage(this.step,t,this.manager,a),e){const i=this.manager.getStepStorage(this.step.stepName)?.framePatternData||{};this.manager.updateStorage(this.step.stepName,{framePatternData:{...i,originalAssetKey:t.key,backgroundRemovedAssetKey:void 0,useOriginalAsset:void 0}})}}async canUseBackgroundRemover(){return this.manager.getClient().canUseAddon(Qe.BackgroundRemover)}async canRemoveBackground(){return await this.canUseBackgroundRemover()&&this.hasOriginalImageSelection()&&!!this.frameService?.getImageData()?.src&&!this.frameService?.getImageData()?.svg}async removeBackgroundFromImageSelection(t=!0){if(!await this.canUseBackgroundRemover())throw new Error("The current Integration does not have access to the Background Remover. Please call canUseBackgroundRemover to ensure you disable this feature when appropriate.");const e=await this.getOriginalImageSelection();if(!e)throw new Error("You must supply an image selection before attempting to remove the background.");const a=await W.removeBackgroundFromAsset(e);t&&await pt.selectImage(this.step,a,this.manager,!1);const i=this.manager.getStepStorage(this.step.stepName)?.framePatternData||{};return this.manager.updateStorage(this.step.stepName,{framePatternData:{...i,backgroundRemovedAssetKey:a.key,useOriginalAsset:!t}}),a}async changeColors(t){await pt.changeColors(this.step,this.manager,t)}getImageData(){if(this.frameService)return this.frameService.getImageData()}async getColorOption(){return await P.ensureFullOption(this.step.data.colorOption)}getAvailableColors(){return this.step.data.colorPickerEnabled?pt.availableColors(this.step,this.manager):Promise.resolve([])}isColorPickerEnabled(){return this.step.data.colorPickerEnabled??!1}async getOriginalImageColors(){const t=this.getImageData();return t?.svg?(await rt(t.svg)).colors:void 0}getMaxAllowedColors(){return this.step.data.maxColors}getUniqueColorCount(){return pt.getUniqueColorCount(this.step,this.manager)}getCurrentFrameStep(t,e,a,i){return i&&i.length>1&&t===void 0?"SelectFrame":e||a||this.getImageData()?"Position":"SelectImage"}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}getWhitelistedExtensions(){return[...this.step.data.whitelistedExtensions,...this.step.data.whitelistedExtensions.includes(".jpg")?[".jpeg"]:[]]}async getOriginalImageSelection(){const t=this.manager.getStepStorage(this.step.stepName)?.framePatternData?.originalAssetKey;if(t)return W.getLocalOrFromServer(t)}async getBackgroundRemovedImageSelection(){const t=this.manager.getStepStorage(this.step.stepName)?.framePatternData?.backgroundRemovedAssetKey;if(t)return W.getLocalOrFromServer(t)}hasOriginalImageSelection(){return!!this.manager.getStepStorage(this.step.stepName)?.framePatternData?.originalAssetKey}hasBackgroundRemovedImageSelection(){return!!this.getFrameStepStorage()?.framePatternData?.backgroundRemovedAssetKey}getUseOriginalImageSelection(){return this.getFrameStepStorage()?.framePatternData?.useOriginalAsset??!1}async setUseOriginalImageSelection(t){const e=this.getFrameStepStorage()?.framePatternData||{};if(e.useOriginalAsset===t)return;const a=await this.getOriginalImageSelection();if(!a)throw new Error("You must provide an image selection before calling setUseOriginalImageSelection");if(t)await this.selectImage(a,!1,!1);else{const i=await this.getBackgroundRemovedImageSelection();if(!i)throw new Error("You must call removeBackgroundFromImageSelection before attempting to apply the image.");await this.selectImage(i,!1,!1)}this.manager.updateStorage(this.step.stepName,{framePatternData:{...e,useOriginalAsset:t}})}getFrameStepStorage(){return this.manager.getStepStorage(this.step.stepName)}}const Ad=C.gql`
2466
+ `;class Xc{constructor(t,e=S.getShadowGraphqlClient.bind(S)){this.options=t,this.client=e}query(t){const e=this.options?.onQuery?this.options?.onQuery(t):{};return this.client().query({...e,...t,context:{...e.context??{},...t.context??{}}})}mutate(t){const e=this.options?.onMutate?this.options?.onMutate(t):{};return this.client().mutate({...e,...t,context:{...e.context??{},...t.context??{}}})}}class Zc{init(t,e,a){this.cognitoClient=new pe.CognitoIdentityProviderClient({region:e}),this.spiffRegion=t,this.userPoolClientId=a}async generateCode(t){const e=await this.cognitoClient?.send(new pe.InitiateAuthCommand({AuthFlow:"CUSTOM_AUTH",ClientId:this.userPoolClientId,AuthParameters:{USERNAME:t}}));e?.ChallengeName==="CUSTOM_CHALLENGE"&&(this.challengeSession=e.Session)}async verifyCode(t,e,a){const i=await this.cognitoClient?.send(new pe.RespondToAuthChallengeCommand({ClientId:this.userPoolClientId,ChallengeName:"CUSTOM_CHALLENGE",Session:this.challengeSession,ChallengeResponses:{USERNAME:t,ANSWER:e},ClientMetadata:{partnerId:a,environment:(this.spiffRegion||"").toLowerCase()}}));return i?.ChallengeName==="CUSTOM_CHALLENGE"&&(this.challengeSession=i.Session),i}async refreshTokens(){const t=localStorage.getItem("cognito-tokens");if(!t)throw new Error("Failed to find existing tokens.");const e=JSON.parse(t);return await this.cognitoClient?.send(new pe.InitiateAuthCommand({AuthFlow:"REFRESH_TOKEN_AUTH",ClientId:this.userPoolClientId,AuthParameters:{REFRESH_TOKEN:e.RefreshToken||""}}))}}const jt=new Zc;class ir{formatCurrencyForDisplay(t,e){const a={amount:e||0,currency:t,precision:this.getPrecisionForCurrency(t)};return Or(a).toFormat(this.getSpecialFormat(t))}getPrecisionForCurrency(t){const e=t,a=ln.code(e);return a?a.digits:2}getSpecialFormat(t){const e=t;if(ln.code(e)?.code==="CLP")return"USD0,0"}}const Fn=new ir;class rr{constructor(t,e,a,i){this.presentmentCurrency=void 0,this.presentmentCurrency=i,this.partnerCurrency=a,this.rateFrom=t,this.rateTo=e}code(){return this.presentmentCurrency?this.presentmentCurrency:this.partnerCurrency}conversionRequired(){return this.presentmentCurrency!==void 0&&this.code()!==this.partnerCurrency}getConvertedSubunits(t){return this.conversionRequired()?Math.ceil(this.subunits(this.units(t,this.partnerCurrency)/this.rateFrom*this.rateTo,this.code())):t}units(t,e){return t/Math.pow(10,Fn.getPrecisionForCurrency(e))}subunits(t,e){return t*Math.pow(10,Fn.getPrecisionForCurrency(e))}}const td=async(n,t)=>{const e=await S.getShadowGraphqlClient().query({query:as(t?.assets?.metadata||!1),errorPolicy:"all",variables:{ids:n}});if(e.error)throw e.error;if(e.errors)throw e.errors.forEach(i=>console.error(i)),new Error("Unable to read workflows. Consult GraphQL errors.");const a=e.data.workflows;if(a===void 0||a.length!==n.length)throw new Error(`Unable to read workflows: ${e.errors??"Length mismatch in response"}`);return a.forEach(i=>{i.finalizeStepConfig||(i.finalizeStepConfig={}),i.finalizeStepConfig.termsMarkdown=i.finalizeStepConfig.termsMarkdown||i.partner.termsMarkdown}),a},ed=async(n,t)=>{const a=(await t).find(i=>i.id===n);if(!a)throw new Error(`Workflow not found: ${n}`);return a},nn=async(n,t)=>{const e=n.map(s=>ie.get({id:s,options:t})),a=n.filter((s,l)=>e[l]===void 0);if(a.length===0)return Promise.all(e);const i=td(a,t),r=a.map(s=>ie.set({id:s,options:t},ed(s,i))),o=e.filter(s=>s!==void 0);return await Promise.all(o.concat(r))},or=async(n,t)=>(await nn([n],t))[0],ad=async n=>{const t=await S.getShadowGraphqlClient().query({query:hi,variables:{ids:n},errorPolicy:"all",fetchPolicy:"no-cache"});return t.errors&&console.error(t.errors),t.data.integrationProducts||[]};class nd{constructor(t){this.activeIntegration=void 0,this.updateTransactionState=async e=>{try{return S.getShadowGraphqlClient().mutate({...e,mutation:Lo})}catch(a){throw console.error(a),new ft("Critical - Unable to synchronize workflow state with server.")}},this.options=t,this.options.applicationKey&&eo(this.options.applicationKey),console.debug("------------------------"),console.debug("Spiff Commerce Core SDK"),console.debug("Version: 37.0.1"),console.debug(`Application Key Provided: ${!!this.options.applicationKey}`),console.debug("------------------------")}configure(t){ht.setHubUrl(t.hubUrl),ht.setServerUrl(t.serverUrl),ht.setServicesApiUrl(t.servicesApiUrl),this.marketplaceThemeInstallId=t.marketplaceThemeInstallId,this.marketplaceThemeInstallConfigurationId=t.marketplaceThemeInstallConfigurationId,this.userPoolClientId=t.userPoolClientId,this.userPoolRegion=t.userPoolRegion,this.spiffRegion=t.spiffRegion,t.bearerAuthenticationToken&&Zn(t.bearerAuthenticationToken),this.options.applicationKey&&this.getIntegration(),this.spiffRegion&&this.userPoolRegion&&this.userPoolClientId&&jt.init(this.spiffRegion,this.userPoolRegion,this.userPoolClientId)}getAssetManager(){return W}async getBetaEnabled(){return this.options.enableBetaFeatures?!0:(await this.getIntegration()).partner.beta===!0}getFlowService(){if(!ao())throw new Error("Application key required to use Flow Service.");return new er}async getCurrencyContext(t){const a=(await this.getIntegration()).partner.currencyCode,r=await S.getShadowGraphqlClient().query({query:ls,errorPolicy:"all",fetchPolicy:"cache-first",variables:{from:a,to:t}}),{rateFrom:o,rateTo:s}=r.data.currencyConversion;return new rr(o,s,a,t)}async getIntegration(){if(this.activeIntegration)return this.activeIntegration;if(!this.options.applicationKey)throw new Error("Cannot get current Integration without specifying an Application Key.");return this.activeIntegration=sr(this.options.applicationKey),this.activeIntegration}async canUseAddon(t){try{return(await this.getIntegration()).partner.activeAddons?.includes(t)??!1}catch(e){return console.error(e),!1}}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(t){const e=Q.getMap("transactionCustomerIds");e?.has(t)&&(e.delete(t),Q.setMap("transactionCustomerIds",e))}async customerHasBundleTemplates(t){const i=(await S.getShadowGraphqlClient().query({query:Ee,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;return i.id?i.hasBundleTemplates??!1:!1}getStakeholderTypeForTransaction(t){const e=this.customer?.stakeholders?.find(a=>a.transaction?.id===t);if(e)return e.type}async getOrCreateCustomer(t){this.customer=void 0;const e=S.getShadowGraphqlClient(),i=(await e.query({query:Ee,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;if(!i.id){const s=(await e.mutate({mutation:Jc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:t}}})).data?.customerCreate;if(!s)throw new Error("Unable to create customer.");return this.storeCustomer(s),this.customer=s,{customer:s,isAuthenticated:!1}}this.storeCustomer(i);const r=await this.reloadLoggedInCustomer();return{customer:this.customer||i,isAuthenticated:r}}getCustomer(){return this.customer}async reloadLoggedInCustomer(){const t=localStorage.getItem("last-refreshed-cognito-tokens"),e=localStorage.getItem("cognito-tokens"),a=localStorage.getItem("cognito-email");if(!t||!e||!a)return!1;const i=JSON.parse(e),r=new Date().getTime()/1e3;if(!i.ExpiresIn||i.ExpiresIn<r-parseInt(t)){const l=await jt.refreshTokens();if(l?.AuthenticationResult)localStorage.setItem("last-refreshed-cognito-tokens",`${new Date().getTime()/1e3}`),i.AccessToken=l.AuthenticationResult.AccessToken,localStorage.setItem("cognito-tokens",JSON.stringify(i));else return this.logOut(),console.error("Failed to refresh tokens."),!1}const s=(await S.getShadowGraphqlClient().query({query:Ee,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:a}})).data.customer;return s.id?(this.customer=s,!0):(console.error("Failed to get customer."),!1)}async generateVerificationCode(t){await S.getShadowGraphqlClient().mutate({mutation:Kc,variables:{emailAddress:t}}),await jt.generateCode(t)}async verifyCode(t,e){const a=(await this.getIntegration()).partner.id||"",i=await jt.verifyCode(t,e,a);if(i?.AuthenticationResult){localStorage.setItem("last-refreshed-cognito-tokens",`${new Date().getTime()/1e3}`),localStorage.setItem("cognito-tokens",JSON.stringify(i.AuthenticationResult)),localStorage.setItem("cognito-email",t);const o=(await S.getShadowGraphqlClient().query({query:Ee,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;if(!o.id)throw new Error("Failed to get customer.");return this.customer=o,!0}else throw new Error}async logOut(){localStorage.removeItem("last-refreshed-cognito-tokens"),localStorage.removeItem("cognito-tokens"),localStorage.removeItem("cognito-email"),this.clearCustomer()}async loggedInBearerToken(){const t=localStorage.getItem("last-refreshed-cognito-tokens"),e=localStorage.getItem("cognito-tokens");if(!t||!e)throw new Error("No token data in storage.");const a=JSON.parse(e),i=new Date().getTime()/1e3,r=!a?.AccessToken||Ne(a.AccessToken);if(!a.ExpiresIn||a.ExpiresIn<i-parseInt(t)||r){const o=await jt.refreshTokens();if(o?.AuthenticationResult)localStorage.setItem("last-refreshed-cognito-tokens",`${new Date().getTime()/1e3}`),a.AccessToken=o.AuthenticationResult.AccessToken,localStorage.setItem("cognito-tokens",JSON.stringify(a));else throw this.logOut(),new Error("Failed to refresh tokens.")}if(!a.AccessToken)throw new Error("No bearer token in storage.");return a.AccessToken}async getCustomerMetafields(){if(!this.customer?.id)throw new Error("Customer must be logged in before calling this function.");return(await S.getShadowGraphqlClient().query({query:_c,variables:{id:this.customer.id}})).data.metafields}async getNewBundle(t,e,a){const r=(await S.getShadowGraphqlClient().mutate({mutation:Hl(a?.graphql?.productCollection?.eagerFetchProducts||!1),variables:{collectionId:t,initialMetadata:e?Object.entries(e).map((c,d)=>({key:c[0],value:c[1]})):void 0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},fetchPolicy:"no-cache"})).data?.bundleCreate;if(!r?.id)throw new Error("Unable to create bundle");const o=Q.getMap("bundlePartnerIds")||new Map;o.set(r.id,r.partner.id),Q.setMap("bundlePartnerIds",o);const s=Q.getMap("bundleOwnerIds")||new Map;s.set(r.id,r.bundleOwnerId),Q.setMap("bundleOwnerIds",s);const l=new xn(this,r,void 0,void 0,r.bundleOwnerId,{eagerFetchProducts:a?.graphql?.productCollection?.eagerFetchProducts});return await l.getInitializationPromise(),l}async getExistingBundle(t,e,a,i,r){const s=Q.getMap("bundleOwnerIds")?.get(t),l={};try{const g=await this.loggedInBearerToken();l.Authorization=`Bearer ${g}`}catch{const m=Object.entries(localStorage).find(([y,w])=>y.startsWith("CognitoIdentityServiceProvider")&&y.endsWith("idToken"))?.[0]||"",f=localStorage.getItem(m);f&&!Ne(f)&&(l.Authorization=`Bearer ${f}`)}const c={bundleOwnerId:s,...l,...i?.graphql?.additionalHeaders},d=await S.getShadowGraphqlClient().query({query:Ll(i?.graphql?.productCollection?.eagerFetchProducts||!1),variables:{id:t},fetchPolicy:"no-cache",context:{headers:c}});if(!d.data?.bundles||d.data?.bundles.length===0||!d.data?.bundles[0])throw new Error(`Unable to find bundle: ${t}`);const u=d.data?.bundles[0],A=Q.getMap("bundlePartnerIds")||new Map;A.set(u.id,u.partner.id),Q.setMap("bundlePartnerIds",A);const h=new xn(this,u,e,a,s,{additionalHeaders:i?.graphql?.additionalHeaders,eagerFetchProducts:i?.graphql?.productCollection?.eagerFetchProducts,existingGlobalPropertyState:d.data.globalPropertyState,readonly:i?.readonly},r);return await h.getInitializationPromise(),h}async duplicateBundle(t,e,a,i){const o={...await cr(t),...i?.graphql?.additionalHeaders},l=(await S.getShadowGraphqlClient().mutate({mutation:Wl(),variables:{id:t,template:e,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId,duplicateTransactions:a},context:{headers:o},fetchPolicy:"no-cache"})).data?.bundleDuplicate;if(!l?.id)throw new Error("Unable to duplicate bundle");const c=Q.getMap("bundlePartnerIds")||new Map;c.set(l.id,l.partner.id),Q.setMap("bundlePartnerIds",c);const d=Q.getMap("bundleOwnerIds")||new Map;return d.set(l.id,l.bundleOwnerId),Q.setMap("bundleOwnerIds",d),async()=>await this.getExistingBundle(l.id,void 0,void 0,{graphql:{productCollection:{eagerFetchProducts:i?.graphql?.productCollection?.eagerFetchProducts||!1}}})}async getBundlesForCustomer(t){if(!this.customer?.id)throw new Error("Customer not authenticated.");const{includeMetadata:e,...a}=t;return(await S.getShadowGraphqlClient().query({query:ic(e??!1),variables:{...a,id:this.customer.id},fetchPolicy:"no-cache"})).data.customerBundlesFeed}async getBundleStakeholders(){if(!this.customer)throw new Error("Customer not authenticated.");const t=await S.getShadowGraphqlClient().query({query:ql,variables:{id:this.customer.id},fetchPolicy:"no-cache"});if(!t.data?.customers||t.data.customers.length===0)throw new Error("Unable to find customer.");const a=t.data.customers[0].bundleStakeholders||[],i=Q.getMap("bundlePartnerIds")||new Map;return a.forEach(r=>{r.bundle?.id&&r.bundle.partner?.id&&i.set(r.bundle.id,r.bundle.partner.id)}),Q.setMap("bundlePartnerIds",i),a}async getWorkflowExperience(t,e){if(!t)throw new Error("getWorkflowExperience has been called without an options object! This is not supported.");const a=await this.getWorkflowExperiences([t],t.graphql),i=a[0],r=i.getWorkflow();return e&&!r&&console.error("No workflow instantiated when trying to create preview service."),e&&r&&await i.getWorkflowManager().injectIntoPreviewService(e(r)),a[0]}async getWorkflowExperiences(t,e,a,i){if(t.length===0)throw new ft("No options provided!");const r=t.map((x,T)=>({option:x,index:T})),o=r.filter(x=>x.option.type==="transaction"),s=r.filter(x=>x.option.type==="integration"||x.option.type==="external"||x.option.type==="blank"),l=50,c=ha(o,l),d=ha(s,l);let u=0;const A=S.getShadowGraphqlClient(),h=async x=>{if(x.length===0)return[];const T=x.map(X=>X.option.transactionId),L=await A.query({query:Vo,variables:{ids:T},errorPolicy:"all",fetchPolicy:"no-cache"}),k=L.data.transactions;if(u=u+k.length,i&&i(u,o.length),k.length!==x.length){const X=L.errors?.[0]?.message||"Unknown error";throw new ft(`Not all transactions were found: ${X}`)}return!this.activeIntegration&&k[0].integrationProduct?.integration&&(this.activeIntegration=Promise.resolve(k[0].integrationProduct.integration)),k.map((X,bt)=>({transaction:X,workflowId:X.workflowId,readOnly:x.find(gt=>gt.option.transactionId===X.id)?.option.readOnly??!1,index:x[bt].index}))},g=async x=>{if(x.length===0)return[];const T=await A.mutate({mutation:Uo,variables:{inputs:x.map(k=>({integrationProductId:k.option.type==="integration"?k.option.integrationProductId:void 0,externalIntegrationId:k.option.type==="external"?k.option.externalIntegrationId:void 0,externalProductId:k.option.type==="external"?k.option.externalProductId:void 0,workflowId:k.option.workflowId,designName:k.option.designName,claim:!0,quantity:k.option.quantity,recipient:k.option.recipient})),marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache"}),L=T.data?.transactionCreateMany;if(!L||L.length===0){const k=T.errors?.[0]?.message||"Unknown error";throw new ft(`Failed to create transactions: ${k}`)}return u=u+L.length,i&&i(u,o.length),L.map((k,X)=>({transaction:k,workflowId:k.workflowId,readOnly:!1,index:x[X].index}))},p=(await Promise.all([...c.map(h),...d.map(g)])).flat(),m=[...new Set(p.map(x=>x.transaction.integrationProductId))].filter(x=>x!==void 0),f=[...new Set(p.map(x=>x.workflowId))].filter(x=>x!==void 0),[y,w]=await Promise.all([(async()=>m.length>0?await ad(m):[])(),(async()=>f.length>0?await nn(f,e):[])()]),F=new Map(y.map(x=>[x.id,x])),b=new Map(w.map(x=>[x.id,x])),v=p.map(async x=>{const{transaction:T,workflowId:L,readOnly:k,index:X}=x,bt=L?b.get(L):void 0,gt=t[X];if(T.integrationProductId){const ot=F.get(T.integrationProductId);T.integrationProduct=ot,T.product=ot?.product,T.integrationProduct||console.error("failed to find transaction's product")}const ge=Q.getMap("transactionOwnerIds")||new Map;!ge.get(T.id)&&T.transactionOwnerId&&(ge.set(T.id,T.transactionOwnerId),Q.setMap("transactionOwnerIds",ge));const _e=ge.get(T.id)||void 0,wr=new Xc({onMutate:()=>({context:{transactionOwnerId:_e,bundleOwnerId:e?.bundleOwnerId}}),onQuery:()=>({context:{transactionOwnerId:_e,bundleOwnerId:e?.bundleOwnerId}})}),me={workflow:bt,transaction:T,singleVariantsRenderable:gt?.workflowConfiguration?.singleVariantsRenderable,stateMutationFunc:k?async()=>{throw new O("State mutation is forbidden in read only mode!")}:async ot=>this.updateTransactionState({...ot,context:{transactionOwnerId:_e,bundleOwnerId:e?.bundleOwnerId}}),graphQlClient:()=>wr,readOnly:k,isReloadedTransaction:gt.type==="transaction"};if(gt.type==="transaction"&&T.workflowState){const ot=JSON.parse(T.workflowState);await ba(ot),me.reloadedState=ot}else if(!k&&gt.workflowState){const ot=JSON.parse(gt.workflowState);await ba(ot),me.reloadedState=ot}return me.delayWorkflowStateSync=!0,{experienceOptions:me,index:X,options:gt}}),M=(await Promise.all(v)).sort((x,T)=>x.index-T.index);let R=[];for(const x of M){const{experienceOptions:T,options:L}=x,k=new Yi(this,T);await k.getWorkflowManager().getInitializationPromise(),a&&a(),L.type!=="transaction"&&this.customer&&await k.attachCustomerDetails({email:this.customer.emailAddress}),R=[...R,k],k.getWorkflowManager().setWorkflowStateSyncEnabled(!0)}return R}storeCustomer(t){const e=Q.getMap("partnerCustomerIds")||new Map;e.set(t.partner.id,t.id),Q.setMap("partnerCustomerIds",e)}async getIntegrationProductById(t,e){const r=(await S.getShadowGraphqlClient().query({query:Yo(e),variables:{ids:[t]},fetchPolicy:"no-cache",errorPolicy:"all"})).data?.integrationProducts;if(!r||r.length===0||!r[0]?.id)throw new Error("Integration product not found.");return new Da(r[0])}async getIntegrationProductFromExternalIds(t,e,a){const o=(await S.getShadowGraphqlClient().query({query:Jo(a),variables:{externalProductId:e,externalIntegrationId:t},fetchPolicy:"no-cache",errorPolicy:"all"})).data?.integrationProductFromExternalIds;if(!o?.id)throw new Error("Integration product not found.");return new Da(o)}async getIntegrationProduct(t){return t.type==="integration"?this.getIntegrationProductById(t.integrationProductId):this.getIntegrationProductFromExternalIds(t.externalIntegrationId,t.externalProductId)}async getShareActionsForTransaction(t){const a=(Q.getMap("transactionOwnerIds")||new Map).get(t)||void 0,i=await S.getShadowGraphqlClient().query({query:Ho,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t},context:{transactionOwnerId:a}});if(!i.data.transactions||i.data.transactions.length!==1)throw new Error(`Failed to fetch share actions for transaction: ${t}`);return i.data.transactions[0].transactionShareActions}async placeOrder(t){const e=await S.getShadowGraphqlClient().mutate({mutation:ss,variables:{orderItems:t}});if(e.errors)throw new Error(e.errors[0].message);if(!e.data)throw new Error("Failed to create order: No order data in response.");return{id:e.data.orderCreate.id,internalId:e.data.orderCreate.internalId}}}const sr=async(n,t)=>(await S.getShadowGraphqlClient().query({query:is,errorPolicy:"all",fetchPolicy:"no-cache",context:{headers:{"x-application-key":n},skipIntegrationCheck:!0},variables:{themeConfigurationId:t}})).data.currentIntegration,id=async n=>{const e=await S.getShadowGraphqlClient().query({query:jo,errorPolicy:"all",fetchPolicy:"network-only",variables:{id:n}});if(e.data.transactions.length!==0)return e.data.transactions[0]},rd=async(n,t)=>(await S.getShadowGraphqlClient().query({query:ns,errorPolicy:"all",variables:{themeConfigurationId:n,themeInstallId:t}})).data?.marketplaceThemeInstallConfiguration,od=async n=>(await S.getShadowGraphqlClient().query({query:os,errorPolicy:"all",variables:{id:n}})).data?.bundles?.[0]?.marketplaceThemeInstallConfiguration,sd=async n=>(await S.getShadowGraphqlClient().query({query:rs,errorPolicy:"all",variables:{id:n}})).data?.transactions?.[0]?.marketplaceThemeInstallConfiguration;async function lr(){const n={};try{const t=await this.loggedInBearerToken();n.Authorization=`Bearer ${t}`}catch{const a=Object.entries(localStorage).find(([r,o])=>r.startsWith("CognitoIdentityServiceProvider")&&r.endsWith("idToken"))?.[0]||"",i=localStorage.getItem(a);i&&!Ne(i)&&(n.Authorization=`Bearer ${i}`)}return n}async function cr(n){const e=Q.getMap("bundleOwnerIds")?.get(n),a=await lr();return{bundleOwnerId:e,...a}}async function ld(n){const e=Q.getMap("transactionOwnerIds")?.get(n),a=await lr();return{transactionOwnerId:e,...a}}const cd=async n=>{const t=await cr(n),e=await S.getShadowGraphqlClient().mutate({mutation:hc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n},context:{headers:t}});if(e.data?.bundleDelete!==n)throw new Error(`Failed to delete bundle: ${e.errors}`)},dd=async n=>{const t=await ld(n),e=await S.getShadowGraphqlClient().mutate({mutation:gc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:[n]},context:{headers:t}});if(!e.data?.transactions||e.data.transactions.length!==1||e.data.transactions[0].id!==n)throw new Error(`Failed to find transaction to read bundle id: ${JSON.stringify(e.errors)}`);return e.data.transactions[0].bundle?.id};function dr(n,t,e,a){const i=e.width*n.zoom,r=e.height*n.zoom;if(a){const s=n,l=Math.max(t.width/e.width,t.height/e.height);s.zoom=Math.max(l,n.zoom);const c=e.width*s.zoom,d=e.height*s.zoom;return s.x=be(n.x,t.width-c,0),s.y=be(n.y,t.height-d,0),s}const o=n;return o.x=be(o.x,-i,t.width),o.y=be(o.y,-r,t.height),o}function be(n,t,e){return Math.min(Math.max(n,t),e)}class ur{constructor(t,e){this.minZoomScale=[.03],this.maxZoomScale=[20],this._debouncedUpdateFrameOffsets=$n(this.updateFrameOffsets,200),this.targetElements=[],this.onFrameDataChangeListeners=[],this.onZoomChangeListeners=[],this.forceImageCover=t,this.initialZoom=e,this.thresholdSettings={useThreshold:!1,invertThreshold:!1,threshold:128,thresholdSaturation:.5}}connectWorkflowManager(t,e){e&&t.addStepSpecificStorageCallback(async a=>{if(a){const i=a;if(i.currentFrameSources){let r=!1;for(let o=0;o<i.currentFrameSources.length;o++){const s=i.currentFrameSources[o],l=await Ae(s),c=this.frameData?this.frameData[o]:void 0;te(l,c)||(this.frameData||(this.frameData=new Array(i.currentFrameSources.length)),this.frameData[o]=l,r=!0)}r&&(this.onFrameDataChangeListeners.forEach(o=>o(this.frameData)),this.frameData&&this.imageData&&(this.recalculateOffsets(this.imageData),this.updateOffsets(this.offsets),this.recalculateZoomLimits(this.imageData,this.frameData)))}}},e),this.workflowManager=t,this.stepName=e}setTargetElements(t){this.targetElements=t}getFrameData(){return this.frameData}setFrameData(t){if(!t){this.frameData=void 0;return}t.forEach((e,a)=>{const i=Mt.get(e);i&&(this.frameData||(this.frameData=new Array(t.length)),this.frameData[a]=i)})}getImageData(){return this.imageData}getImageSrc(){if(this.imageData){if(this.imageData.svg){const t=ze(this.imageData.svg,this.imageData.colors||{},!1);return Le(t)}return this.imageData.src}}getOffsets(){return this.offsets}setOffsets(t){this.offsets=t}setZoom(t,e,a,i){if(this.imageData&&this.offsets&&this.frameData){(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length));const r=this.frameData.map((o,s)=>{const l=(e[s]-this.offsets[s].x)/this.offsets[s].zoom,c=(a[s]-this.offsets[s].y)/this.offsets[s].zoom,d=e[s]-l*t[s],u=a[s]-c*t[s];return{x:d,y:u,zoom:this.imageData.width*t[s]/this.imageData.width}});this.updateOffsets(r,i),this.onZoomChangeListeners.forEach(o=>o(t))}}setPatternData(t,e=!0){this.imageData=t,t&&this.frameData&&((e||!this.offsets)&&this.recalculateOffsets(t),this.updateOffsets(this.offsets,void 0,!0)),this.imageData&&this.frameData&&this.recalculateZoomLimits(this.imageData,this.frameData)}updateOffsets(t,e,a){const i=this.imageData;if(!i||!this.frameData)return;if(this.frameData.length!==t.length)throw new O("Frame data and offsets are not the same length. This is a bug. Please report it.");if(!this.offsets.some((o,s)=>!(t[s].x===o.x&&t[s].y===o.y&&t[s].zoom===o.zoom))&&!a){e&&e();return}(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((o,s)=>{this.offsets[s]=dr(t[s],o,this.imageData,this.forceImageCover)}),this._debouncedUpdateFrameOffsets(this.offsets,i,this.frameData,this.thresholdSettings,e)}getThresholdSettings(){return this.thresholdSettings}setThresholdSettings(t){this.thresholdSettings=t,this.imageData&&this.frameData&&this._debouncedUpdateFrameOffsets(this.offsets,this.imageData,this.frameData,t)}onFrameDataChanged(t){t(this.frameData),this.onFrameDataChangeListeners.push(t)}onZoom(t){this.onZoomChangeListeners.push(t)}updateFrameOffsets(t,e,a,i,r){if(!a||a.length===0||a.some(l=>!l))throw new O("Frame data not set. This is a bug");if(!this.workflowManager)throw new O("No workflow manager set, cannot update offsets.");const o=this.workflowManager.getRegionElements(this.stepName||""),s=this.workflowManager.getCommandDispatcher();this.targetElements.forEach((l,c)=>{let d=o.find(u=>u.id===l)?.regionIndex??c;d>=t.length&&(d=c),s(new U([new js(l,e,t[d]),new Hs(l,i.useThreshold,i.invertThreshold,i.threshold,i.thresholdSaturation)]))}),this.stepName&&this.workflowManager.updateStorage(this.stepName,{frameOffsetsList:t}),r&&r()}recalculateZoomLimits(t,e){(this.minZoomScale.length!==e.length||this.maxZoomScale.length!==e.length)&&(this.minZoomScale=new Array(e.length),this.maxZoomScale=new Array(e.length)),e.forEach((a,i)=>{const r=Math.max(a.width/t.width,a.height/t.height);this.forceImageCover?(this.minZoomScale[i]=r,this.maxZoomScale[i]=r*2.5):(this.minZoomScale[i]=r/10,this.maxZoomScale[i]=r*2.5)})}recalculateOffsets(t){this.frameData&&((!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((e,a)=>{this.offsets[a]=qa(t,e,this.initialZoom&&!this.forceImageCover?{scale:this.initialZoom}:void 0,this.forceImageCover)}),this._debouncedUpdateFrameOffsets(this.offsets,t,this.frameData,this.thresholdSettings))}}class ud{traversableScenes(){throw new Error("Method not implemented.")}updateRecipient(t,e,a,i,r,o,s,l,c,d,u,A,h,g,p,m,f){throw new Error("Method not implemented.")}approveTransaction(t){throw new Error("Method not implemented.")}rejectTransaction(t){throw new Error("Method not implemented.")}getClient(){return this.client??{}}getWorkflowExperience(){return{}}setClient(t){this.client=t}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}async reset(){}updateStateWithServer(t){}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(t){}addPoller(t){}addConfirmCallback(t){}addEditedCallback(t){}addElementsCallback(t){}addInformationResultCallback(t){}addInitCallback(t){}addMakingAdjustmentsCallback(t){}addMandatoryCallback(t){}addMetadataCallback(t){}addSelectionCallback(t){}addStepSpecificStorageCallback(t,e){}addStorageCallback(t){}getCommandDispatcher(){return t=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getRegionElements(t){return[]}getSerializedStep(t,e){}getStepSpecificServices(t){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getInitialOptionIds(){return new Set}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(t){}markUpdateCompleted(t){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}getStepSelections(){return{}}setCurrentAdjustingStepId(t){}setEditedStatus(t,e){}setInformationResults(t){}setMandatoryFulfilled(t,e){}async setSelectionsAndElements(t,e,a){}toggleDesignConfirmed(){}updateMetadata(t,e){}async updateStorage(t,e){}injectIntoPreviewService(t){return Promise.resolve()}ejectFromPreviewService(){}setWorkflowStateSyncEnabled(t){}async updateTransactionShareActions(){}addValidationCallback(t){}setStepError(t,e,a){}getStepErrors(t){}getValidationErrors(){return{steps:new Map}}async updateTransactionStakeholders(){}getStepTags(t){return[]}}var Ar=(n=>(n.SelectFrame="SelectFrame",n.SelectImage="SelectImage",n.Position="Position",n))(Ar||{});class hr extends Z{constructor(t,e,a){super(t,e,a);const i=e.data;this.frameService=new ur(i.forceImageCover,i.initialZoomLevel),this.frameService.connectWorkflowManager(t,e.stepName)}selectVariant(t){const e=this.manager.getRegionElements(this.step.stepName);return pt.selectVariant(this.step,t.getResource(),e,this.manager,a=>this.setUpdateState(a))}onFrameDataChanged(t){this.frameService&&this.frameService.onFrameDataChanged(e=>{e&&t(e)})}async selectImage(t,e=!0,a=!0){if(await pt.selectImage(this.step,t,this.manager,a),e){const i=this.manager.getStepStorage(this.step.stepName)?.framePatternData||{};this.manager.updateStorage(this.step.stepName,{framePatternData:{...i,originalAssetKey:t.key,backgroundRemovedAssetKey:void 0,useOriginalAsset:void 0}})}}async canUseBackgroundRemover(){return this.manager.getClient().canUseAddon(Oe.BackgroundRemover)}async canRemoveBackground(){return await this.canUseBackgroundRemover()&&this.hasOriginalImageSelection()&&!!this.frameService?.getImageData()?.src&&!this.frameService?.getImageData()?.svg}async removeBackgroundFromImageSelection(t=!0){if(!await this.canUseBackgroundRemover())throw new Error("The current Integration does not have access to the Background Remover. Please call canUseBackgroundRemover to ensure you disable this feature when appropriate.");const e=await this.getOriginalImageSelection();if(!e)throw new Error("You must supply an image selection before attempting to remove the background.");const a=await W.removeBackgroundFromAsset(e);t&&await pt.selectImage(this.step,a,this.manager,!1);const i=this.manager.getStepStorage(this.step.stepName)?.framePatternData||{};return this.manager.updateStorage(this.step.stepName,{framePatternData:{...i,backgroundRemovedAssetKey:a.key,useOriginalAsset:!t}}),a}async changeColors(t){await pt.changeColors(this.step,this.manager,t)}getImageData(){if(this.frameService)return this.frameService.getImageData()}async getColorOption(){return await P.ensureFullOption(this.step.data.colorOption)}getAvailableColors(){return this.step.data.colorPickerEnabled?pt.availableColors(this.step,this.manager):Promise.resolve([])}isColorPickerEnabled(){return this.step.data.colorPickerEnabled??!1}async getOriginalImageColors(){const t=this.getImageData();return t?.svg?(await rt(t.svg)).colors:void 0}getMaxAllowedColors(){return this.step.data.maxColors}getUniqueColorCount(){return pt.getUniqueColorCount(this.step,this.manager)}getCurrentFrameStep(t,e,a,i){return i&&i.length>1&&t===void 0?"SelectFrame":e||a||this.getImageData()?"Position":"SelectImage"}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}getWhitelistedExtensions(){return[...this.step.data.whitelistedExtensions,...this.step.data.whitelistedExtensions.includes(".jpg")?[".jpeg"]:[]]}async getOriginalImageSelection(){const t=this.manager.getStepStorage(this.step.stepName)?.framePatternData?.originalAssetKey;if(t)return W.getLocalOrFromServer(t)}async getBackgroundRemovedImageSelection(){const t=this.manager.getStepStorage(this.step.stepName)?.framePatternData?.backgroundRemovedAssetKey;if(t)return W.getLocalOrFromServer(t)}hasOriginalImageSelection(){return!!this.manager.getStepStorage(this.step.stepName)?.framePatternData?.originalAssetKey}hasBackgroundRemovedImageSelection(){return!!this.getFrameStepStorage()?.framePatternData?.backgroundRemovedAssetKey}getUseOriginalImageSelection(){return this.getFrameStepStorage()?.framePatternData?.useOriginalAsset??!1}async setUseOriginalImageSelection(t){const e=this.getFrameStepStorage()?.framePatternData||{};if(e.useOriginalAsset===t)return;const a=await this.getOriginalImageSelection();if(!a)throw new Error("You must provide an image selection before calling setUseOriginalImageSelection");if(t)await this.selectImage(a,!1,!1);else{const i=await this.getBackgroundRemovedImageSelection();if(!i)throw new Error("You must call removeBackgroundFromImageSelection before attempting to apply the image.");await this.selectImage(i,!1,!1)}this.manager.updateStorage(this.step.stepName,{framePatternData:{...e,useOriginalAsset:t}})}getFrameStepStorage(){return this.manager.getStepStorage(this.step.stepName)}}const Ad=C.gql`
2466
2467
  query GetLoggedInCustomer($email: String!) {
2467
2468
  customer(emailAddress: $email) {
2468
2469
  id
@@ -2582,7 +2583,7 @@
2582
2583
  total
2583
2584
  }
2584
2585
  }
2585
- `,yd=async(n,t,e)=>await S.getShadowGraphqlClient().mutate({mutation:fd,errorPolicy:"all",variables:{id:n,name:t},context:e}),Sd=async(n,t)=>await S.getShadowGraphqlClient().mutate({mutation:hd,errorPolicy:"all",variables:{id:n,name:t}}),vd=async(n,t)=>await S.getShadowGraphqlClient().mutate({mutation:Cd,errorPolicy:"all",variables:{id:n,template:t}}),Ed=async(n,t)=>await S.getShadowGraphqlClient().mutate({mutation:gd,errorPolicy:"all",variables:{id:n,template:t}}),bd=async n=>(await S.getShadowGraphqlClient().query({query:Ad,errorPolicy:"all",variables:{email:n}})).data.customer,Id=async(n,t,e)=>await S.getShadowGraphqlClient().query({query:md,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n,offset:e,limit:t}}),Bd=async(n,t)=>await S.getShadowGraphqlClient().query({query:pd,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n},context:t}),Pd=async(n,t,e)=>(await S.getShadowGraphqlClient().query({query:rn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n,quicksearch:"",filters:{link:"and",status:{operator:"isAnyOf",values:["Created","DesignCompleted","ExternallyOrdered"]},template:{value:"false"}},offset:e,limit:t}}))?.data.customerTransactionsFeed?.items||[],xd=async(n,t,e)=>(await S.getShadowGraphqlClient().query({query:rn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n,quicksearch:"",filters:{link:"and",status:{operator:"equals",value:"Ordered"},template:{value:"false"}},offset:e,limit:t}}))?.data.customerTransactionsFeed?.items||[],Fd=async(n,t,e)=>(await S.getShadowGraphqlClient().query({query:rn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n,quicksearch:"",filters:{link:"and",template:{value:"true"}},offset:e,limit:t}}))?.data.customerTransactionsFeed?.items||[],Dd=async(n,t,e)=>(await S.getShadowGraphqlClient().query({query:wd,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n,offset:e,limit:t}}))?.data.customerBundlesFeed?.items||[];(function(){try{if(typeof document<"u"){var n=document.createElement("style");n.appendChild(document.createTextNode("#spiffThemeWrapper{width:100%;height:100%}")),document.head.appendChild(n)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();var hr=(n=>(n.Manual="Manual",n.OnStart="OnStart",n.OnQuit="OnQuit",n.OnEnd="OnEnd",n))(hr||{}),_t=(n=>(n.Email="Email",n.FirstName="FirstName",n.LastName="LastName",n.Phone="Phone",n.Apartment="Apartment",n.City="City",n.Country="Country",n.OrganizationName="OrganizationName",n.PostCode="PostCode",n.State="State",n.StreetAddress="StreetAddress",n.Custom="Custom",n))(_t||{}),K;K={__e:function(n,t,e,a){for(var i,r,o;t=t.__;)if((i=t.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(n,a||{}),o=i.__d),o)return i.__E=i}catch(s){n=s}throw n}},typeof Promise=="function"&&Promise.prototype.then.bind(Promise.resolve());var st,ua,Dn,gr=[],Aa=[],kn=K.__b,Mn=K.__r,Tn=K.diffed,Nn=K.__c,Qn=K.unmount;function kd(){for(var n;n=gr.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(Be),n.__H.__h.forEach(ka),n.__H.__h=[]}catch(t){n.__H.__h=[],K.__e(t,n.__v)}}K.__b=function(n){st=null,kn&&kn(n)},K.__r=function(n){Mn&&Mn(n);var t=(st=n.__c).__H;t&&(ua===st?(t.__h=[],st.__h=[],t.__.forEach(function(e){e.__N&&(e.__=e.__N),e.__V=Aa,e.__N=e.i=void 0})):(t.__h.forEach(Be),t.__h.forEach(ka),t.__h=[])),ua=st},K.diffed=function(n){Tn&&Tn(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(gr.push(t)!==1&&Dn===K.requestAnimationFrame||((Dn=K.requestAnimationFrame)||Md)(kd)),t.__H.__.forEach(function(e){e.i&&(e.__H=e.i),e.__V!==Aa&&(e.__=e.__V),e.i=void 0,e.__V=Aa})),ua=st=null},K.__c=function(n,t){t.some(function(e){try{e.__h.forEach(Be),e.__h=e.__h.filter(function(a){return!a.__||ka(a)})}catch(a){t.some(function(i){i.__h&&(i.__h=[])}),t=[],K.__e(a,e.__v)}}),Nn&&Nn(n,t)},K.unmount=function(n){Qn&&Qn(n);var t,e=n.__c;e&&e.__H&&(e.__H.__.forEach(function(a){try{Be(a)}catch(i){t=i}}),e.__H=void 0,t&&K.__e(t,e.__v))};var On=typeof requestAnimationFrame=="function";function Md(n){var t,e=function(){clearTimeout(a),On&&cancelAnimationFrame(t),setTimeout(n)},a=setTimeout(e,100);On&&(t=requestAnimationFrame(e))}function Be(n){var t=st,e=n.__c;typeof e=="function"&&(n.__c=void 0,e()),st=t}function ka(n){var t=st;n.__c=n.__(),st=t}const mr=C.gql`
2586
+ `,yd=async(n,t,e)=>await S.getShadowGraphqlClient().mutate({mutation:fd,errorPolicy:"all",variables:{id:n,name:t},context:e}),Sd=async(n,t)=>await S.getShadowGraphqlClient().mutate({mutation:hd,errorPolicy:"all",variables:{id:n,name:t}}),vd=async(n,t)=>await S.getShadowGraphqlClient().mutate({mutation:Cd,errorPolicy:"all",variables:{id:n,template:t}}),Ed=async(n,t)=>await S.getShadowGraphqlClient().mutate({mutation:gd,errorPolicy:"all",variables:{id:n,template:t}}),bd=async n=>(await S.getShadowGraphqlClient().query({query:Ad,errorPolicy:"all",variables:{email:n}})).data.customer,Id=async(n,t,e)=>await S.getShadowGraphqlClient().query({query:md,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n,offset:e,limit:t}}),Bd=async(n,t)=>await S.getShadowGraphqlClient().query({query:pd,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n},context:t}),Pd=async(n,t,e)=>(await S.getShadowGraphqlClient().query({query:rn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n,quicksearch:"",filters:{link:"and",status:{operator:"isAnyOf",values:["Created","DesignCompleted","ExternallyOrdered"]},template:{value:"false"}},offset:e,limit:t}}))?.data.customerTransactionsFeed?.items||[],xd=async(n,t,e)=>(await S.getShadowGraphqlClient().query({query:rn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n,quicksearch:"",filters:{link:"and",status:{operator:"equals",value:"Ordered"},template:{value:"false"}},offset:e,limit:t}}))?.data.customerTransactionsFeed?.items||[],Fd=async(n,t,e)=>(await S.getShadowGraphqlClient().query({query:rn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n,quicksearch:"",filters:{link:"and",template:{value:"true"}},offset:e,limit:t}}))?.data.customerTransactionsFeed?.items||[],Dd=async(n,t,e)=>(await S.getShadowGraphqlClient().query({query:wd,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:n,offset:e,limit:t}}))?.data.customerBundlesFeed?.items||[];(function(){try{if(typeof document<"u"){var n=document.createElement("style");n.appendChild(document.createTextNode("#spiffThemeWrapper{width:100%;height:100%}")),document.head.appendChild(n)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();var gr=(n=>(n.Manual="Manual",n.OnStart="OnStart",n.OnQuit="OnQuit",n.OnEnd="OnEnd",n))(gr||{}),_t=(n=>(n.Email="Email",n.FirstName="FirstName",n.LastName="LastName",n.Phone="Phone",n.Apartment="Apartment",n.City="City",n.Country="Country",n.OrganizationName="OrganizationName",n.PostCode="PostCode",n.State="State",n.StreetAddress="StreetAddress",n.Custom="Custom",n))(_t||{}),K;K={__e:function(n,t,e,a){for(var i,r,o;t=t.__;)if((i=t.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(n,a||{}),o=i.__d),o)return i.__E=i}catch(s){n=s}throw n}},typeof Promise=="function"&&Promise.prototype.then.bind(Promise.resolve());var st,ua,Dn,mr=[],Aa=[],kn=K.__b,Mn=K.__r,Tn=K.diffed,Nn=K.__c,Qn=K.unmount;function kd(){for(var n;n=mr.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(Pe),n.__H.__h.forEach(ka),n.__H.__h=[]}catch(t){n.__H.__h=[],K.__e(t,n.__v)}}K.__b=function(n){st=null,kn&&kn(n)},K.__r=function(n){Mn&&Mn(n);var t=(st=n.__c).__H;t&&(ua===st?(t.__h=[],st.__h=[],t.__.forEach(function(e){e.__N&&(e.__=e.__N),e.__V=Aa,e.__N=e.i=void 0})):(t.__h.forEach(Pe),t.__h.forEach(ka),t.__h=[])),ua=st},K.diffed=function(n){Tn&&Tn(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(mr.push(t)!==1&&Dn===K.requestAnimationFrame||((Dn=K.requestAnimationFrame)||Md)(kd)),t.__H.__.forEach(function(e){e.i&&(e.__H=e.i),e.__V!==Aa&&(e.__=e.__V),e.i=void 0,e.__V=Aa})),ua=st=null},K.__c=function(n,t){t.some(function(e){try{e.__h.forEach(Pe),e.__h=e.__h.filter(function(a){return!a.__||ka(a)})}catch(a){t.some(function(i){i.__h&&(i.__h=[])}),t=[],K.__e(a,e.__v)}}),Nn&&Nn(n,t)},K.unmount=function(n){Qn&&Qn(n);var t,e=n.__c;e&&e.__H&&(e.__H.__.forEach(function(a){try{Pe(a)}catch(i){t=i}}),e.__H=void 0,t&&K.__e(t,e.__v))};var On=typeof requestAnimationFrame=="function";function Md(n){var t,e=function(){clearTimeout(a),On&&cancelAnimationFrame(t),setTimeout(n)},a=setTimeout(e,100);On&&(t=requestAnimationFrame(e))}function Pe(n){var t=st,e=n.__c;typeof e=="function"&&(n.__c=void 0,e()),st=t}function ka(n){var t=st;n.__c=n.__(),st=t}const pr=C.gql`
2586
2587
  fragment AddressValidationResultFields on AddressValidationResult {
2587
2588
  addressComplete
2588
2589
  address {
@@ -2605,7 +2606,7 @@
2605
2606
  missingComponentTypes
2606
2607
  }
2607
2608
  `,on=C.gql`
2608
- ${mr}
2609
+ ${pr}
2609
2610
  fragment AddressValidationJobFields on AddressValidationJob {
2610
2611
  id
2611
2612
  entityId
@@ -2634,7 +2635,7 @@
2634
2635
  }
2635
2636
  }
2636
2637
  `,Qd=C.gql`
2637
- ${mr}
2638
+ ${pr}
2638
2639
  mutation ValidateRecipientAddress($id: String!) {
2639
2640
  recipientValidate(id: $id) {
2640
2641
  ...AddressValidationResultFields
@@ -2653,7 +2654,7 @@
2653
2654
  id
2654
2655
  }
2655
2656
  }
2656
- `;var pr=(n=>(n.Confirmed="Confirmed",n.Plausible="Plausible",n.Unlikely="Unlikely",n))(pr||{}),fr=(n=>(n.Created="Created",n.Processing="Processing",n.Completed="Completed",n.Failed="Failed",n.Cancelled="Cancelled",n))(fr||{});const $d=async n=>{const t=n.map(a=>a.getTransaction().recipient?.id).filter(a=>!!a),e=await S.getShadowGraphqlClient().query({query:Nd,errorPolicy:"all",fetchPolicy:"network-only",variables:{ids:t}});return n.map(a=>{const i=a.getTransaction().recipient?.id;if(i)return e.data?.recipients?.find(r=>r.id===i)?.addressValidationJob})},Ud=async n=>(await S.getShadowGraphqlClient().query({query:Td,errorPolicy:"all",fetchPolicy:"network-only",variables:{ids:n}})).data?.addressValidationJobs,Vd=async n=>n.getTransaction().recipient?.id?(await S.getShadowGraphqlClient().mutate({mutation:Qd,errorPolicy:"all",fetchPolicy:"network-only",variables:{id:n.getTransaction().recipient.id}})).data?.recipientValidate:void 0,Ld=async n=>{const t=n.map(a=>a.getTransaction().recipient?.id).filter(a=>!!a),e=await S.getShadowGraphqlClient().mutate({mutation:Od,errorPolicy:"all",fetchPolicy:"network-only",variables:{ids:t}});return n.map(a=>{const i=a.getTransaction().recipient?.id;if(i)return e.data?.recipientValidateBatch?.find(r=>r.entityId===i)})},qd=async n=>{const t=n.getTransaction().recipient?.id;if(!t)return;(await S.getShadowGraphqlClient().mutate({mutation:Rd,errorPolicy:"all",fetchPolicy:"network-only",variables:{id:t}})).data?.recipientOverrideAddress?.id&&(n.getTransaction().addressValidationStatus=Ta.Overridden)},zd=C.gql`
2657
+ `;var fr=(n=>(n.Confirmed="Confirmed",n.Plausible="Plausible",n.Unlikely="Unlikely",n))(fr||{}),Cr=(n=>(n.Created="Created",n.Processing="Processing",n.Completed="Completed",n.Failed="Failed",n.Cancelled="Cancelled",n))(Cr||{});const $d=async n=>{const t=n.map(a=>a.getTransaction().recipient?.id).filter(a=>!!a),e=await S.getShadowGraphqlClient().query({query:Nd,errorPolicy:"all",fetchPolicy:"network-only",variables:{ids:t}});return n.map(a=>{const i=a.getTransaction().recipient?.id;if(i)return e.data?.recipients?.find(r=>r.id===i)?.addressValidationJob})},Ud=async n=>(await S.getShadowGraphqlClient().query({query:Td,errorPolicy:"all",fetchPolicy:"network-only",variables:{ids:n}})).data?.addressValidationJobs,Vd=async n=>n.getTransaction().recipient?.id?(await S.getShadowGraphqlClient().mutate({mutation:Qd,errorPolicy:"all",fetchPolicy:"network-only",variables:{id:n.getTransaction().recipient.id}})).data?.recipientValidate:void 0,Ld=async n=>{const t=n.map(a=>a.getTransaction().recipient?.id).filter(a=>!!a),e=await S.getShadowGraphqlClient().mutate({mutation:Od,errorPolicy:"all",fetchPolicy:"network-only",variables:{ids:t}});return n.map(a=>{const i=a.getTransaction().recipient?.id;if(i)return e.data?.recipientValidateBatch?.find(r=>r.entityId===i)})},qd=async n=>{const t=n.getTransaction().recipient?.id;if(!t)return;(await S.getShadowGraphqlClient().mutate({mutation:Rd,errorPolicy:"all",fetchPolicy:"network-only",variables:{id:t}})).data?.recipientOverrideAddress?.id&&(n.getTransaction().addressValidationStatus=Ta.Overridden)},zd=C.gql`
2657
2658
  query GetIntegrationProductsForIds($ids: [String!]!) {
2658
2659
  integrationProducts(ids: $ids) {
2659
2660
  id
@@ -2663,5 +2664,5 @@
2663
2664
  }
2664
2665
  }
2665
2666
  }
2666
- `,Gd=async n=>(await S.getShadowGraphqlClient().query({query:zd,variables:{ids:n}})).data.integrationProducts;exports.AddonHandle=Qe;exports.AddressValidationJobStatus=fr;exports.AddressValidationResultConfirmationLevel=pr;exports.AddressValidationStatus=Ta;exports.ArrayInput=Yc;exports.AspectType=q;exports.AssetNotFoundError=wt;exports.AssetType=ee;exports.BringForwardCommand=_s;exports.BringToBackCommand=Ks;exports.BringToFrontCommand=Js;exports.BundleDesignCreationCartAddMode=qn;exports.CanvasCommand=$;exports.CollectionProduct=Wt;exports.ColorOptionGlobalPropertyHandle=xa;exports.CommandContext=Si;exports.ConversionDataType=_t;exports.ConversionLocation=hr;exports.CreateElementCommand=G;exports.CreateLayoutCommand=ja;exports.CurrencyContext=ir;exports.CurrencyService=nr;exports.DeleteElementCommand=Dt;exports.DigitalContentStepHandle=Gi;exports.FileUploadGlobalPropertyHandle=Yi;exports.FlowExecutionNodeResult=Yt;exports.FlowExecutionResult=er;exports.FlowService=tr;exports.FontAlignmentCommand=Pi;exports.FontColorCommand=Ii;exports.FontSizeCommand=Bi;exports.FontSourceCommand=Ia;exports.FrameService=dr;exports.FrameStep=ur;exports.FrameStepHandle=Ar;exports.GlobalPropertyHandle=Je;exports.GroupCommand=U;exports.IllustrationStepHandle=Oi;exports.InformationMessageType=he;exports.InformationStepHandle=zi;exports.IntegrationProduct=Da;exports.IntegrationType=Gn;exports.LayoutElementFactory=Ls;exports.LayoutElementType=D;exports.LayoutNotFoundError=Y;exports.LayoutRenderingPurpose=Ot;exports.MaterialStepHandle=Ri;exports.MisconfigurationError=lt;exports.MockWorkflowManager=ud;exports.ModelStepHandle=$i;exports.ModuleStepHandle=ji;exports.MoveCommand=qs;exports.ObjectInput=an;exports.ObjectInputType=ar;exports.OptionGlobalPropertyHandle=Za;exports.OptionNotFoundError=ae;exports.ParseError=It;exports.PictureStepHandle=Ui;exports.ProductCameraRig=jn;exports.ProductCollection=tn;exports.ProductCollectionProductSortKey=Zi;exports.ProductWorkflow=Qt;exports.PromiseCache=ie;exports.PromiseQueue=Va;exports.QuestionStepHandle=Vi;exports.QueueablePromise=Ua;exports.ResizeCommand=Gs;exports.ResourceNotFoundError=Rt;exports.RotateCommand=zs;exports.ScaleAxis=H;exports.SendBackwardsCommand=Xs;exports.ShapeStepHandle=Li;exports.ShareActionType=zn;exports.SpiffCommerceClient=nd;exports.StakeholderType=Na;exports.StepAspectType=Ln;exports.StepHandle=Z;exports.StepType=E;exports.TextAlgorithm=xt;exports.TextChangeCommand=xi;exports.TextGlobalPropertyHandle=Ji;exports.TextInput=Wc;exports.TextStepHandle=qi;exports.UnhandledBehaviorError=O;exports.UnitOfMeasurement=Hn;exports.UpdateImageSourceCommand=Ws;exports.Variant=nt;exports.WorkflowExperienceEventType=Ne;exports.WorkflowExperienceImpl=Wi;exports.amtChannelsForAspect=Ki;exports.assetService=W;exports.browserColorToHex=ai;exports.cmPerPixel=bs;exports.currentDirection=Ss;exports.dataUrlFromExternalUrl=Jr;exports.deleteBundle=cd;exports.designService=Ie;exports.determineCorrectFontSizeAndLines=Kt;exports.digitalContentStepService=Ha;exports.domParser=ct;exports.duplicateBundle=vd;exports.duplicateTransaction=Ed;exports.fetchAsString=et;exports.findAngle=gs;exports.findElement=V;exports.findPmsColors=mo;exports.frameDataCache=Mt;exports.frameStepService=pt;exports.generate=N;exports.generateCommands=Ti;exports.generateSVGWithUnknownColors=rt;exports.generateStateFromDesignInputSteps=Ql;exports.getAddressValidationJobs=Ud;exports.getAttributesFromArrayBuffer=ce;exports.getAxisAlignedBoundingBox=hs;exports.getBoundedOffsets=cr;exports.getBundleIdForTransaction=dd;exports.getBundleThemeConfiguration=od;exports.getCustomer=bd;exports.getCustomerBundles=Id;exports.getElementVertices=vs;exports.getFrameData=Ae;exports.getGlobalPropertyStateForBundle=Ul;exports.getIntegration=or;exports.getIntegrationProducts=Gd;exports.getNEPoint=ws;exports.getNWPoint=Cs;exports.getOrderedTransactions=xd;exports.getOverrideThemeConfiguration=rd;exports.getPointOfRotation=fs;exports.getProductCollections=Lc;exports.getSEPoint=ys;exports.getSvgElement=He;exports.getTemplateBundles=Dd;exports.getTemplateTransactions=Fd;exports.getTransaction=id;exports.getTransactionThemeConfiguration=sd;exports.getTransactionsForBundle=Bd;exports.getTrueCoordinates=ps;exports.getUnorderedTransactions=Pd;exports.getValidationJobsForWorkflowExperiences=$d;exports.getWorkflow=rr;exports.getWorkflows=nn;exports.graphQlManager=S;exports.illustrationStepService=Jt;exports.isCloseToValue=ms;exports.loadFont=Ft;exports.matchHexToPms=Ao;exports.materialStepService=Wa;exports.metafieldManager=Xi;exports.mmPerPixel=Es;exports.modelStepService=Ya;exports.modifySVGColors=qe;exports.moduleStepService=Ja;exports.nameBundle=yd;exports.nameTransaction=Sd;exports.optionService=P;exports.outlineFontsInSvg=Fs;exports.overrideWorkflowExperienceRecipientAddress=qd;exports.patternImageDataCache=At;exports.persistenceService=Q;exports.pictureStepService=Ka;exports.pmsToRgb=uo;exports.questionStepService=_a;exports.registerFetchImplementation=Gr;exports.registerWindowImplementation=zr;exports.rehydrateSerializedLayout=ba;exports.rgbToPms=ei;exports.rotateAroundPoint=Ht;exports.sanitizeSvgTree=Le;exports.setBearerAuthenticationToken=Zn;exports.setCanvasModule=Oa;exports.shapeStepService=Tt;exports.shortenUrl=Fi;exports.spiffCoreConfiguration=ht;exports.stepAspectValuesToDesignInputSteps=Nl;exports.svgColorValueToDefinition=ya;exports.svgStringDimensions=Ga;exports.svgToDataUrl=Ve;exports.textStepService=j;exports.toast=ki;exports.validateWorkflowExperienceRecipient=Vd;exports.validateWorkflowExperienceRecipients=Ld;exports.xmlSerializer=Et;
2667
+ `,Gd=async n=>(await S.getShadowGraphqlClient().query({query:zd,variables:{ids:n}})).data.integrationProducts;exports.AddonHandle=Oe;exports.AddressValidationJobStatus=Cr;exports.AddressValidationResultConfirmationLevel=fr;exports.AddressValidationStatus=Ta;exports.ArrayInput=Yc;exports.AspectType=q;exports.AssetNotFoundError=wt;exports.AssetType=ee;exports.BringForwardCommand=_s;exports.BringToBackCommand=Ks;exports.BringToFrontCommand=Js;exports.BundleDesignCreationCartAddMode=qn;exports.CanvasCommand=$;exports.CollectionProduct=Wt;exports.ColorOptionGlobalPropertyHandle=xa;exports.CommandContext=vi;exports.ConversionDataType=_t;exports.ConversionLocation=gr;exports.CreateElementCommand=G;exports.CreateLayoutCommand=ja;exports.CurrencyContext=rr;exports.CurrencyService=ir;exports.DeleteElementCommand=Dt;exports.DigitalContentStepHandle=ji;exports.FileUploadGlobalPropertyHandle=Ji;exports.FlowExecutionNodeResult=Yt;exports.FlowExecutionResult=ar;exports.FlowService=er;exports.FontAlignmentCommand=xi;exports.FontColorCommand=Bi;exports.FontSizeCommand=Pi;exports.FontSourceCommand=Ia;exports.FrameService=ur;exports.FrameStep=Ar;exports.FrameStepHandle=hr;exports.GlobalPropertyHandle=Ke;exports.GroupCommand=U;exports.IllustrationStepHandle=Ri;exports.InformationMessageType=he;exports.InformationStepHandle=Gi;exports.IntegrationProduct=Da;exports.IntegrationType=Gn;exports.LayoutElementFactory=Ls;exports.LayoutElementType=D;exports.LayoutNotFoundError=Y;exports.LayoutRenderingPurpose=Ot;exports.MaterialStepHandle=$i;exports.MisconfigurationError=lt;exports.MockWorkflowManager=ud;exports.ModelStepHandle=Ui;exports.ModuleStepHandle=Hi;exports.MoveCommand=qs;exports.ObjectInput=an;exports.ObjectInputType=nr;exports.OptionGlobalPropertyHandle=Za;exports.OptionNotFoundError=ae;exports.ParseError=It;exports.PictureStepHandle=Vi;exports.ProductCameraRig=jn;exports.ProductCollection=tn;exports.ProductCollectionProductSortKey=tr;exports.ProductWorkflow=Qt;exports.PromiseCache=ie;exports.PromiseQueue=Va;exports.QuestionStepHandle=Li;exports.QueueablePromise=Ua;exports.ResizeCommand=Gs;exports.ResourceNotFoundError=Rt;exports.RotateCommand=zs;exports.ScaleAxis=H;exports.SendBackwardsCommand=Xs;exports.ShapeStepHandle=qi;exports.ShareActionType=zn;exports.SpiffCommerceClient=nd;exports.StakeholderType=Na;exports.StepAspectType=Ln;exports.StepHandle=Z;exports.StepType=E;exports.TextAlgorithm=xt;exports.TextChangeCommand=Fi;exports.TextGlobalPropertyHandle=Ki;exports.TextInput=Wc;exports.TextStepHandle=zi;exports.UnhandledBehaviorError=O;exports.UnitOfMeasurement=Hn;exports.UpdateImageSourceCommand=Ws;exports.Variant=nt;exports.WorkflowExperienceEventType=Qe;exports.WorkflowExperienceImpl=Yi;exports.amtChannelsForAspect=_i;exports.assetService=W;exports.browserColorToHex=ai;exports.cmPerPixel=bs;exports.currentDirection=Ss;exports.dataUrlFromExternalUrl=Kr;exports.deleteBundle=cd;exports.designService=Be;exports.determineCorrectFontSizeAndLines=Kt;exports.digitalContentStepService=Ha;exports.domParser=ct;exports.duplicateBundle=vd;exports.duplicateTransaction=Ed;exports.fetchAsString=et;exports.findAngle=gs;exports.findElement=V;exports.findPmsColors=po;exports.frameDataCache=Mt;exports.frameStepService=pt;exports.generate=N;exports.generateCommands=Ni;exports.generateSVGWithUnknownColors=rt;exports.generateStateFromDesignInputSteps=Ql;exports.getAddressValidationJobs=Ud;exports.getAttributesFromArrayBuffer=ce;exports.getAxisAlignedBoundingBox=hs;exports.getBoundedOffsets=dr;exports.getBundleIdForTransaction=dd;exports.getBundleThemeConfiguration=od;exports.getCustomer=bd;exports.getCustomerBundles=Id;exports.getElementVertices=vs;exports.getFrameData=Ae;exports.getGlobalPropertyStateForBundle=Ul;exports.getIntegration=sr;exports.getIntegrationProducts=Gd;exports.getNEPoint=ws;exports.getNWPoint=Cs;exports.getOrderedTransactions=xd;exports.getOverrideThemeConfiguration=rd;exports.getPointOfRotation=fs;exports.getProductCollections=Lc;exports.getSEPoint=ys;exports.getSvgElement=We;exports.getTemplateBundles=Dd;exports.getTemplateTransactions=Fd;exports.getTransaction=id;exports.getTransactionThemeConfiguration=sd;exports.getTransactionsForBundle=Bd;exports.getTrueCoordinates=ps;exports.getUnorderedTransactions=Pd;exports.getValidationJobsForWorkflowExperiences=$d;exports.getWorkflow=or;exports.getWorkflows=nn;exports.graphQlManager=S;exports.illustrationStepService=Jt;exports.isCloseToValue=ms;exports.loadFont=Ft;exports.matchHexToPms=ho;exports.materialStepService=Wa;exports.metafieldManager=Zi;exports.mmPerPixel=Es;exports.modelStepService=Ya;exports.modifySVGColors=ze;exports.moduleStepService=Ja;exports.nameBundle=yd;exports.nameTransaction=Sd;exports.optionService=P;exports.outlineFontsInSvg=Fs;exports.overrideWorkflowExperienceRecipientAddress=qd;exports.patternImageDataCache=At;exports.persistenceService=Q;exports.pictureStepService=Ka;exports.pmsToRgb=Ao;exports.questionStepService=_a;exports.registerFetchImplementation=jr;exports.registerWindowImplementation=Gr;exports.rehydrateSerializedLayout=ba;exports.rgbToPms=ei;exports.rotateAroundPoint=Ht;exports.sanitizeSvgTree=qe;exports.setBearerAuthenticationToken=Zn;exports.setCanvasModule=Oa;exports.shapeStepService=Tt;exports.shortenUrl=Di;exports.spiffCoreConfiguration=ht;exports.stepAspectValuesToDesignInputSteps=Nl;exports.svgColorValueToDefinition=ya;exports.svgStringDimensions=Ga;exports.svgToDataUrl=Le;exports.textStepService=j;exports.toast=Mi;exports.validateWorkflowExperienceRecipient=Vd;exports.validateWorkflowExperienceRecipients=Ld;exports.xmlSerializer=Et;
2667
2668
  //# sourceMappingURL=index.cjs.map