@spiffcommerce/core 22.10.1 → 22.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1195,6 +1195,14 @@ declare class ProductCollection {
1195
1195
  * The name of the collection.
1196
1196
  */
1197
1197
  getName(): string;
1198
+ /**
1199
+ * The description of the collection.
1200
+ */
1201
+ getDescription(): string;
1202
+ /**
1203
+ * The image of the collection.
1204
+ */
1205
+ getImage(): undefined | Asset;
1198
1206
  /**
1199
1207
  * A list of products in this collections with useful helpers for interacting with them.
1200
1208
  */
@@ -2803,6 +2811,8 @@ type ProductCollectionResource = {
2803
2811
  globalPropertyConfiguration?: GlobalPropertyConfiguration;
2804
2812
  productCollectionProducts?: ProductCollectionProductResource[];
2805
2813
  name: string;
2814
+ description?: string;
2815
+ image?: Asset;
2806
2816
  transformCollection?: TransformCollection;
2807
2817
  };
2808
2818
  type ProductCollectionProductResource = {
package/dist/index.js CHANGED
@@ -11027,6 +11027,12 @@ const fs = (g, e) => {
11027
11027
  fragment ProductCollectionFields on ProductCollection {
11028
11028
  id
11029
11029
  name
11030
+ description
11031
+ image {
11032
+ key
11033
+ name
11034
+ fileLink
11035
+ }
11030
11036
  globalPropertyConfiguration {
11031
11037
  id
11032
11038
  aspects {
@@ -12013,6 +12019,18 @@ class Ri {
12013
12019
  getName() {
12014
12020
  return this.collection.name;
12015
12021
  }
12022
+ /**
12023
+ * The description of the collection.
12024
+ */
12025
+ getDescription() {
12026
+ return this.collection.description || "";
12027
+ }
12028
+ /**
12029
+ * The image of the collection.
12030
+ */
12031
+ getImage() {
12032
+ return this.collection.image;
12033
+ }
12016
12034
  /**
12017
12035
  * A list of products in this collections with useful helpers for interacting with them.
12018
12036
  */
@@ -13681,7 +13699,7 @@ class is {
13681
13699
  } catch (A) {
13682
13700
  throw console.error(A), new H("Critical - Unable to synchronize workflow state with server.");
13683
13701
  }
13684
- }, this.initialized = !1, this.options = e, this.options.applicationKey && ca(this.options.applicationKey), console.debug("------------------------"), console.debug("Spiff Commerce Core SDK"), console.debug("Version: 22.10.1"), console.debug(`Application Key Provided: ${!!this.options.applicationKey}`), console.debug("------------------------");
13702
+ }, this.initialized = !1, this.options = e, this.options.applicationKey && ca(this.options.applicationKey), console.debug("------------------------"), console.debug("Spiff Commerce Core SDK"), console.debug("Version: 22.12.0"), console.debug(`Application Key Provided: ${!!this.options.applicationKey}`), console.debug("------------------------");
13685
13703
  }
13686
13704
  /** @deprecated Use `configure` instead */
13687
13705
  configureUrls(e, t, A) {
@@ -2231,6 +2231,12 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2231
2231
  fragment ProductCollectionFields on ProductCollection {
2232
2232
  id
2233
2233
  name
2234
+ description
2235
+ image {
2236
+ key
2237
+ name
2238
+ fileLink
2239
+ }
2234
2240
  globalPropertyConfiguration {
2235
2241
  id
2236
2242
  aspects {
@@ -2560,7 +2566,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
2560
2566
  }
2561
2567
  }
2562
2568
  }
2563
- `;class kn{constructor(e,t,A,a,n){this.bundleId=e,this.bundleOwnerId=t,this.configuration=A,this.bundleOptions=n,this.initPromise=this.getOrCreateGlobalPropertyState().then(i=>{this.globalPropertyState=i}),this.onGlobalPropertyStateChange=a}setBundleOptions(e){this.bundleOptions=e}getBundleOptions(){return this.bundleOptions}setConfiguration(e){this.configuration=e}getInitializationPromise(){return this.initPromise}getGlobalPropertyState(){return this.globalPropertyState}async setGlobalPropertyState(e){this.globalPropertyState||await this.initPromise;const t=ee(this.globalPropertyState);this.globalPropertyState={...e,id:t.id},await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(t,this.globalPropertyState)}getAspect(e){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const t=this.globalPropertyState.aspects.find(A=>A.name===e);if(t)return t.value}getAspectStorage(e){var t;if(!this.globalPropertyState)throw new Error("Global property state not initialized");return(t=this.globalPropertyState.aspects.find(A=>A.name===e))==null?void 0:t.storage}async setAspect(e,t,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 a=this.configuration.aspects.find(o=>o.name===e);if(!a)throw new Error(`Failed to find configuration aspect with name: ${e}`);const n=ee(this.globalPropertyState),i=this.globalPropertyState.aspects.find(o=>o.name===e);i?(i.value=t,i.type=a.type,A!==void 0&&(i.storage=A!==null?A:void 0)):this.globalPropertyState.aspects.push({name:e,value:t,type:a.type,storage:A!==null?A:void 0}),await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(n,this.globalPropertyState)}async setAspectStorage(e,t){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 A=this.configuration.aspects.find(i=>i.name===e);if(!A)throw new Error(`Failed to find configuration aspect with name: ${e}`);const a=ee(this.globalPropertyState),n=this.globalPropertyState.aspects.find(i=>i.name===e);n?(n.storage=t!==null?t:void 0,n.type=A.type):this.globalPropertyState.aspects.push({name:e,value:"",type:A.type,storage:t!==null?t:void 0}),await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(a,this.globalPropertyState)}async updateGlobalPropertyState(){var t,A;if(!this.globalPropertyState)throw new Error("Global property state not initialized");const e=await v.getShadowGraphqlClient().mutate({mutation:Rn,variables:{id:this.globalPropertyState.id,aspects:this.globalPropertyState.aspects.map(a=>{const n=a.type&&a.storage?{}:void 0;if(n)switch(a.type){case g.AspectType.FileUpload:{n.fileUpload=a.storage;break}case g.AspectType.Option:case g.AspectType.ColorOption:{n.option=a.storage;break}}return{name:a.name,value:a.value,type:a.type,storage:n}})},context:{headers:{bundleOwnerId:this.bundleOwnerId,...(t=this.bundleOptions)==null?void 0:t.additionalHeaders}}});if((A=e.data)!=null&&A.globalPropertyStateUpdate)this.globalPropertyState=e.data.globalPropertyStateUpdate;else throw new Error("Unable to update global property state")}async getOrCreateGlobalPropertyState(){var A,a,n;const e=await v.getShadowGraphqlClient().query({query:Hn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{bundleId:this.bundleId},context:{headers:{bundleOwnerId:this.bundleOwnerId,...(A=this.bundleOptions)==null?void 0:A.additionalHeaders}}});if(e.data.globalPropertyState&&e.data.globalPropertyState.id)return e.data.globalPropertyState;const t=await v.getShadowGraphqlClient().mutate({mutation:Nn,variables:{bundleId:this.bundleId},context:{headers:{bundleOwnerId:this.bundleOwnerId,...(a=this.bundleOptions)==null?void 0:a.additionalHeaders}}});if((n=t.data)!=null&&n.globalPropertyStateCreate&&t.data.globalPropertyStateCreate.id)return t.data.globalPropertyStateCreate;throw new Error(`Unable to create global property state for bundle: ${this.bundleId}`)}}class Un{constructor(e){this.setState(e)}setState(e){e&&(this.state=JSON.parse(e))}applyStateToWorkflowExperience(e){var i;if(!this.state||!((i=e==null?void 0:e.getWorkflowManager())!=null&&i.getModelContainer()))return;const t=this.state.transactions.find(o=>o.transactionId===e.getWorkflowManager().getTransaction().id);if(!t)return;const A=this.getTransformToApply(t);if(!A)return;const a=this.flipTransform(A,e.getWorkflowManager().getPreviewService()),n=e.getWorkflowManager().getModelContainer();n.position=a.position,n.rotation=a.rotation,n.scale=a.scale}getTransformToApply(e){return e.activeTransform&&e.transforms?e.transforms[e.activeTransform]:e.transform}updateWorkflowExperienceTransform(e,t,A){const a=e.getWorkflowManager().getTransaction().id;this.state?this.state.transactions||(this.state.transactions=[]):this.state={transactions:[]};const n=this.state.transactions.find(i=>i.transactionId===a);n?(n.transforms||(n.transforms={}),n.transforms[t]=A):this.state.transactions.push({transactionId:a,activeTransform:t,transforms:{[t]:A}})}activateWorkflowExperienceTransform(e,t){var s,r;if(!((s=e==null?void 0:e.getWorkflowManager())!=null&&s.getModelContainer())||!this.state)return;const A=e.getWorkflowManager().getTransaction().id,a=this.state.transactions.find(c=>c.transactionId===A),n=(r=a==null?void 0:a.transforms)==null?void 0:r[t];if(!n)return;const i=this.flipTransform(n,e.getWorkflowManager().getPreviewService()),o=e.getWorkflowManager().getModelContainer();o.position=i.position,o.rotation=i.rotation,o.scale=i.scale,a.activeTransform=t}removeStateForTransaction(e){if(!this.state||!this.state.transactions)return;const t=this.state.transactions.findIndex(A=>A.transactionId===e);t!==-1&&this.state.transactions.splice(t,1)}getSerializedState(){if(this.state)return JSON.stringify(this.state)}flipTransform(e,t){return t&&t.flipTransform?t.flipTransform(e.position,{x:e.rotation.x*Math.PI/180,y:e.rotation.y*Math.PI/180,z:e.rotation.z*Math.PI/180},e.scale):{position:e.position,rotation:{x:e.rotation.x*Math.PI/180,y:e.rotation.y*Math.PI/180,z:e.rotation.z*Math.PI/180},scale:e.scale}}}class fA{constructor(e){this.fullFetched=!1,this.collection=e}getId(){return this.collection.id}getName(){return this.collection.name}getProducts(){if(!this.collection.productCollectionProducts)throw new Error("Failed to find products on collection. Ensure you fetch them first!");return this.collection.productCollectionProducts.map(e=>new Ge(e))}async fetchProducts(e){if(this.fullFetched)return this.collection.productCollectionProducts.map(A=>new Ge(A));const t=await v.getShadowGraphqlClient().query({query:mn,variables:{id:this.getId(),productIds:e},errorPolicy:"all",fetchPolicy:"no-cache"});return e||(this.fullFetched=!0),this.collection.productCollectionProducts=t.data.productCollections[0].productCollectionProducts||[],this.collection.productCollectionProducts.map(A=>new Ge(A))}getTransformCollection(){if(this.collection.transformCollection)return new IA(this.collection.transformCollection)}getResource(){return this.collection}}class Ge{constructor(e){this.product=e.product,this.productResource=e}getId(){return this.product.id}getName(){return this.product.name}getIntegrationByType(e,t){const a=(this.product.integrationProducts||[]).find(n=>{var r,c,B;const i=(r=n.integration)==null?void 0:r.type,o=((c=n.integration)==null?void 0:c.type)===e,s=t?((B=n.integration)==null?void 0:B.externalIntegrationId)===t:!0;return i&&o&&s});if(!a)throw new Error("Failed to find requested integration type on product. This is generally due to a configuration error");return a}getCurrentIntegration(){const t=(this.product.integrationProducts||[]).find(A=>{var a;return(a=A.integration)==null?void 0:a.isCurrent});if(!t)throw new Error(`Product: ${this.productResource.id} is not linked to this current integration. This is generally due to a configuration error.`);return t}getDefaultWorkflow(){const e=this.product.workflows||[];if(e.length===0)throw new H("No workflows on configured product. Ensure at least 1 workflow is assigned to this product.");const t=this.productResource.workflowId;if(t){const A=e.find(a=>a.workflowName===t);if(A)return new fe(A)}throw new H("Called getDefaultWorkflow() before fetching collection products. Use collection.fetchProducts() first to ensure the data is available.")}getAllWorkflows(){if((this.product.workflows||[]).length===0)throw new H("No workflows on configured product. Ensure at least 1 workflow is assigned to this product.");return this.product.workflows.sort((t,A)=>(t.index??0)-(A.index??0)).map(t=>new fe(t))}getIntegrations(){return this.product.integrationProducts||[]}getResource(){return this.product}getBasePrice(e){var a,n,i,o;const t=this.product.basePrice||0;if(!e)return t;if(!e.integrationType&&!e.externalId&&!e.integrationId)throw new Error("You must provide at least one of the following fields on the includeAdditionalProduct object: integrationType, externalId, integrationId");let A;return e.integrationId?A=(a=this.product.integrationProducts)==null?void 0:a.find(s=>{var r;return((r=s.integration)==null?void 0:r.id)===e.integrationId}):e.externalId?A=(n=this.product.integrationProducts)==null?void 0:n.find(s=>{var r;return((r=s.integration)==null?void 0:r.externalIntegrationId)===e.externalId}):A=(i=this.product.integrationProducts)==null?void 0:i.find(s=>{var r;return((r=s.integration)==null?void 0:r.type)===e.integrationType}),(o=A==null?void 0:A.additionalIntegrationProduct)!=null&&o.product?t+(A.additionalIntegrationProduct.product.basePrice||0):t}}class fe{constructor(e){this.workflow=e}getId(){return this.workflow.workflowName}getName(){return this.workflow.friendlyName}getThumbnail(){return this.workflow.imageUrl}}class IA{constructor(e){this.collection=e}getId(){return this.collection.id}getName(){return this.collection.name}getTransforms(){return this.collection.transforms.map(e=>new pA(e))}}class pA{constructor(e){this.transform=e}getId(){return this.transform.id}getName(){return this.transform.name}get(){return{position:this.transform.position,rotation:this.transform.rotation,scale:this.transform.scale}}}class rt{constructor(e,t,A,a,n,i){var o,s,r;this.eventListeners=new Map,this.workflowExperiences=[],this.client=e,this.id=t.id,this.name=t.name||"",this.ownerId=n,this.metadata=new Map(((o=t.metadata)==null?void 0:o.map(c=>[c.key,c.value]))||[]),this.productCollection=t.productCollection,this.bundleStateManager=new Un(t.bundleStateData),this.globalPropertyStateManager=new kn(this.id,this.ownerId,(s=this.productCollection)==null?void 0:s.globalPropertyConfiguration,this.checkConditionalHandlesChanged.bind(this),i),this.globalPropertyHandleService=new vn(this),this.setPreviewService(A),this.initializationPromise=Promise.all([this.loadExistingWorkflowExperiences(((r=t.transactions)==null?void 0:r.map(c=>c.id))||[],a),this.globalPropertyStateManager.getInitializationPromise()]),this.initializationPromise.catch(c=>{console.error(`Bundle initialization failed: ${c}`)})}setBundleOptions(e){this.globalPropertyStateManager.setBundleOptions(e)}getInitializationPromise(){return this.initializationPromise}addEventListener(e,t){this.eventListeners.set(e,[...this.eventListeners.get(e)||[],t])}removeEventListener(e,t){const A=this.eventListeners.get(e)||[],a=A.indexOf(t);a>-1&&A.splice(a,1)}getClient(){return this.client}getId(){return this.id}getName(){return this.name}setName(e){return this.name=e,this.updateBundle()}getMetadata(){return new Map(this.metadata)}setMetadata(e){return this.metadata=new Map(e),this.updateBundle()}setNameAndMetadata(e,t){return this.name=e,this.metadata=new Map(t),this.updateBundle()}hasGlobalProperties(){var e;return!!((e=this.productCollection)!=null&&e.globalPropertyConfiguration)}getGlobalPropertyConfiguration(){var e;return(e=this.productCollection)==null?void 0:e.globalPropertyConfiguration}async getGlobalProperties(){return this.globalPropertyHandleService.applyConditionsFromState(await this.globalPropertyHandleService.getHandles(),this.getGlobalPropertyStateManager().getGlobalPropertyState())}getGlobalPropertyStateManager(){return this.globalPropertyStateManager}async getGlobalPropertyTotalSubunits(){return(await this.globalPropertyHandleService.getHandles()).filter(A=>A.getType()===g.AspectType.Option).map(A=>{var a;return((a=A.getCurrentVariant())==null?void 0:a.getPrice())||0}).reduce((A,a)=>A+a,0)}getTotalSubunits(){return this.workflowExperiences.map(e=>e.getTotalPriceSubunits()).reduce((e,t)=>e+t,0)}getProductCollection(){return this.productCollection?new fA(this.productCollection):void 0}async addWorkflowExperience(e){e.setBundle(this),await this.appendWorkflowExperience(e),await this.injectExperienceIntoPreviewService(e),await e.getWorkflowManager().getInitializationPromise();const t=await this.getGlobalProperties();for(const A of t)await A.applyGlobalState([e])}async addWorkflowExperiences(e){const t=e.map(o=>o.getWorkflowManager().getTransaction().id),A=t.map(o=>this.workflowExperiences.find(s=>s.getWorkflowManager().getTransaction().id===o));if(A.some(o=>!!o))throw new Error("Unable to add transaction to bundle - Already Exists: "+A.filter(o=>!!o).map(o=>o==null?void 0:o.getWorkflowManager().getTransaction().id).join(", "));const a=P.getMap("transactionOwnerIds")||new Map,n=t.map(o=>a.get(o));await v.getShadowGraphqlClient().mutate({mutation:pn,variables:{id:this.id,transactionIds:t,transactionOwnerIds:n},context:{bundleOwnerId:this.ownerId}}).catch(o=>{console.error(o)}),this.workflowExperiences.push(...e);const i=async()=>{for(const s of e)s.setBundle(this),await this.injectExperienceIntoPreviewService(s);await Promise.all(e.map(s=>s.getWorkflowManager().getInitializationPromise()));const o=await this.getGlobalProperties();for(const s of o)await s.applyGlobalState(e)};await Promise.all([this.updateTransactionOrder(),i()]),this.workflowExperiences.forEach(o=>o.checkForPriceBreakChanges())}async appendWorkflowExperience(e,t=!0){const A=e.getWorkflowManager().getTransaction().id;if(this.workflowExperiences.find(o=>o.getWorkflowManager().getTransaction().id===A))throw new Error("Unable to add transaction to bundle - Already Exists!");const i=(P.getMap("transactionOwnerIds")||new Map).get(A);await v.getShadowGraphqlClient().mutate({mutation:In,variables:{id:this.id,transactionId:A},context:{bundleOwnerId:this.ownerId,transactionOwnerId:i}}),t&&(this.workflowExperiences.push(e),this.workflowExperiences.forEach(o=>o.checkForPriceBreakChanges()))}async removeWorkflowExperience(e){const t=this.workflowExperiences.indexOf(e);await this.removeTransaction(t,this.workflowExperiences[t].getWorkflowManager().getTransaction())}async removeWorkflowExperiences(e){await this.removeTransactions(e.map(t=>t.getWorkflowManager().getTransaction()))}async removeWorkflowExperienceByTransaction(e){const t=this.workflowExperiences.findIndex(A=>A.getWorkflowManager().getTransaction().id===e.id);await this.removeTransaction(t,e)}async removeWorkflowExperiencesByTransactions(e){await this.removeTransactions(e)}async removeTransaction(e,t,A=!0){if(e>-1){const a=this.workflowExperiences.find(n=>n.getWorkflowManager().getTransaction().id===t.id);a.setBundle(void 0),this.previewService&&a.getWorkflowManager().ejectFromPreviewService(),this.bundleStateManager.removeStateForTransaction(t.id),await v.getShadowGraphqlClient().mutate({mutation:Fn,variables:{id:this.id,transactionId:t.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([n,i])=>({key:n,value:i})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),A&&(this.workflowExperiences.splice(e,1),this.workflowExperiences.forEach(n=>n.checkForPriceBreakChanges()),a.checkForPriceBreakChanges(),await this.updateTransactionOrder())}else throw new Error("Unable to remove workflow experience from bundle - Not Found! - "+t.id)}async removeTransactions(e){const t=e.map(a=>this.workflowExperiences.findIndex(n=>n.getWorkflowManager().getTransaction().id===a.id));if(t.some(a=>a===-1))throw new Error("Unable to remove workflow experience from bundle - The following aren't included in the bundle: "+e.filter((a,n)=>t[n]===-1).map(a=>a.id).join(", "));const A=e.map(a=>this.workflowExperiences.splice(this.workflowExperiences.findIndex(n=>n.getWorkflowManager().getTransaction().id===a.id),1)[0]);A.forEach(a=>a.setBundle(void 0)),[...this.workflowExperiences,...A].forEach(a=>a.checkForPriceBreakChanges()),this.previewService&&A.forEach(a=>a.getWorkflowManager().ejectFromPreviewService()),e.forEach(a=>this.bundleStateManager.removeStateForTransaction(a.id)),await v.getShadowGraphqlClient().mutate({mutation:Sn,variables:{id:this.id,transactionIds:e.map(a=>a.id),name:this.name,metadata:Array.from(this.metadata.entries()).map(([a,n])=>({key:a,value:n})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),await this.updateTransactionOrder()}async insertWorkflowExperience(e,t){await this.appendWorkflowExperience(e,!1),this.workflowExperiences.splice(t,0,e),await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(e);const A=await this.getGlobalProperties();await Promise.all(A.map(a=>a.applyGlobalState([e])))})()])}async replaceWorkflowExperience(e,t){if(e<0||e>=this.workflowExperiences.length)throw new Error("Unable to replace workflow experience in bundle - Index out of range!");const A=this.workflowExperiences[e];if(A.getWorkflowManager().getTransaction().id===t.getWorkflowManager().getTransaction().id)throw new Error("Unable to replace workflow experience in bundle - Same transaction!");await Promise.all([this.removeTransaction(e,A.getWorkflowManager().getTransaction(),!1),this.appendWorkflowExperience(t,!1)]),this.workflowExperiences[e]=t,await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(t);const a=await this.getGlobalProperties();await Promise.all(a.map(n=>n.applyGlobalState([t])))})()])}async swapWorkflowExperiences(e,t){if(e<0||e>=this.workflowExperiences.length||t<0||t>=this.workflowExperiences.length)throw new Error("Unable to swap workflow experiences in bundle - Index out of range!");if(e===t)return;const A=this.workflowExperiences[e];this.workflowExperiences[e]=this.workflowExperiences[t],this.workflowExperiences[t]=A,await this.updateTransactionOrder()}getWorkflowExperiences(){return[...this.workflowExperiences]}async sortWorkflowExperiences(e){this.workflowExperiences=this.workflowExperiences.sort(e),await this.updateTransactionOrder()}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(e,t){var n;const A=await v.getShadowGraphqlClient().mutate({mutation:Mn,variables:{id:this.id,details:e,type:t||we.Owner},context:{bundleOwnerId:this.ownerId}});if(!((n=A.data)!=null&&n.bundleAddStakeholder))throw new Error("Bundle not found!");const a=A.data.bundleAddStakeholder.bundleStakeholders||[];this.storeStakeholderCustomers(a)}async removeStakeholder(e){var A;if(!((A=(await v.getShadowGraphqlClient().mutate({mutation:yn,variables:{id:this.id,emailAddress:e},context:{bundleOwnerId:this.ownerId}})).data)!=null&&A.bundleRemoveStakeholder))throw new Error("Bundle not found!")}async updateStakeholders(e){var a;const t=await v.getShadowGraphqlClient().mutate({mutation:Yn,variables:{id:this.id,input:e},context:{bundleOwnerId:this.ownerId}});if(!((a=t.data)!=null&&a.bundleUpdateStakeholders))throw new Error("Bundle not found!");const A=t.data.bundleUpdateStakeholders.bundleStakeholders||[];this.storeStakeholderCustomers(A)}async getAllStakeholders(){const e=await v.getShadowGraphqlClient().query({query:hn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.id},context:{bundleOwnerId:this.ownerId}});if(!e.data.bundles||e.data.bundles.length===0)throw new Error("Bundle not found!");const t=e.data.bundles[0].bundleStakeholders||[];return this.storeStakeholderCustomers(t),t}storeStakeholderCustomers(e){e.forEach(t=>{t.customer&&this.client.storeCustomer(t.customer)})}async finish(e,t){const A=await qa(this.workflowExperiences.map(a=>({workflowManager:a.getWorkflowManager(),workflow:a.getWorkflowManager().getWorkflow(),layouts:a.getWorkflowManager().getLayouts(),getReducerState:()=>a.getCommandContext().getState(),product:a.getWorkflowManager().getProduct(),transaction:a.getWorkflowManager().getTransaction(),workflowSelections:a.getWorkflowManager().getWorkflowSelections(),designName:a.getWorkflowManager().getWorkflow().name,workflowMetadata:a.getWorkflowManager().getWorkflowMetadata()})),e??(()=>{}),t?(a,n)=>{const i=this.workflowExperiences.find(o=>o.getWorkflowManager().getTransaction().id===n);return i?t(i):(console.warn("SpiffCommerce - Bundle create design - Unable to find experience for transaction: "+n),Promise.resolve(void 0))}:void 0);return{bundleId:this.id,items:A,bundleOwnerId:this.ownerId}}getPreviewService(){return this.previewService}async setPreviewService(e){if(this.workflowExperiences&&this.workflowExperiences.length>0&&(this.workflowExperiences.forEach(t=>t.getWorkflowManager().ejectFromPreviewService()),e))for(const t of this.workflowExperiences)await this.injectExperienceIntoPreviewService(t);e&&e.registerModelLoadEventListener&&e.registerModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService&&this.previewService!==e&&this.previewService.unregisterModelLoadEventListener&&this.previewService.unregisterModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService=e}updateWorkflowExperienceTransform(e,t,A){return this.bundleStateManager.updateWorkflowExperienceTransform(e,t,A),this.updateBundle()}activateWorkflowExperienceTransform(e,t){return this.bundleStateManager.activateWorkflowExperienceTransform(e,t),this.updateBundle()}async assignProductCollection(e){var A,a;const t=await v.getShadowGraphqlClient().mutate({mutation:xn(((A=this.globalPropertyStateManager.getBundleOptions())==null?void 0:A.eagerFetchProducts)??!1),variables:{id:this.id,productCollectionId:e??""},context:{bundleOwnerId:this.ownerId}});(a=t.data)!=null&&a.bundleAssignProductCollection.productCollection&&(this.productCollection=t.data.bundleAssignProductCollection.productCollection,this.globalPropertyStateManager.setConfiguration(t.data.bundleAssignProductCollection.productCollection.globalPropertyConfiguration))}onModelLoadEvent(e){e.eventType==="unload"||!e.modelContainer||(e.modelContainer.registerMaterialSelectedCallback(()=>this.onModelSelectedEvent(e.modelContainer,!0)),e.modelContainer.registerMaterialDeselectedCallback(()=>this.onModelSelectedEvent(e.modelContainer,!1)))}onModelSelectedEvent(e,t){if(e&&e.metadata&&e.metadata instanceof Map&&e.metadata.has("workflowManager")){const a=e.metadata.get("workflowManager").getTransaction(),n=this.workflowExperiences.find(i=>i.getWorkflowManager().getTransaction().id===a.id);n&&this.fireEvent(t?"workflow-experience-hover-enter":"workflow-experience-hover-exit",{workflowExperience:n})}}async injectExperienceIntoPreviewService(e){if(this.previewService){const t=e.getWorkflowManager().injectIntoPreviewService(this.previewService);try{this.bundleStateManager.applyStateToWorkflowExperience(e)}catch(A){console.error(`Unable to apply state to workflow experience: ${A}`)}await t}}async loadExistingWorkflowExperiences(e,t){if(e.length===0)return;const A=await this.client.getWorkflowExperiences(e.map(a=>({type:"transaction",transactionId:a})),t);if(A.forEach(a=>a.setBundle(this)),A.forEach(a=>a.checkForPriceBreakChanges()),this.workflowExperiences=A,this.previewService)for(const a of A)await this.injectExperienceIntoPreviewService(a)}async updateBundle(){var t;if(!((t=(await v.getShadowGraphqlClient().mutate({mutation:fn,variables:{id:this.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([A,a])=>({key:A,value:a})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}})).data)!=null&&t.bundleUpdate))throw new Error("Bundle not found!")}async updateTransactionOrder(){await v.getShadowGraphqlClient().mutate({mutation:Pn,variables:{id:this.id,transactionIds:this.workflowExperiences.map(e=>e.getWorkflowManager().getTransaction().id)},context:{bundleOwnerId:this.ownerId}})}async checkConditionalHandlesChanged(e,t){const A=await this.globalPropertyHandleService.getHandles(),a=this.globalPropertyHandleService.applyConditionsFromState(A,e),n=this.globalPropertyHandleService.applyConditionsFromState(A,t);if((()=>{if(a.length!==n.length)return!0;for(let o=0;o<a.length;o++)if(a[o].getName()!==n[o].getName())return!0;return!1})()){this.fireEvent("conditional-global-properties-changed",{globalProperties:n});const o=n.filter(s=>!a.includes(s));await Promise.all(o.map(s=>s.applyGlobalState()))}}fireEvent(e,t){(this.eventListeners.get(e)||[]).forEach(a=>a({bundle:this,event:e,data:t}))}}const Gn=S.gql`
2569
+ `;class kn{constructor(e,t,A,a,n){this.bundleId=e,this.bundleOwnerId=t,this.configuration=A,this.bundleOptions=n,this.initPromise=this.getOrCreateGlobalPropertyState().then(i=>{this.globalPropertyState=i}),this.onGlobalPropertyStateChange=a}setBundleOptions(e){this.bundleOptions=e}getBundleOptions(){return this.bundleOptions}setConfiguration(e){this.configuration=e}getInitializationPromise(){return this.initPromise}getGlobalPropertyState(){return this.globalPropertyState}async setGlobalPropertyState(e){this.globalPropertyState||await this.initPromise;const t=ee(this.globalPropertyState);this.globalPropertyState={...e,id:t.id},await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(t,this.globalPropertyState)}getAspect(e){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const t=this.globalPropertyState.aspects.find(A=>A.name===e);if(t)return t.value}getAspectStorage(e){var t;if(!this.globalPropertyState)throw new Error("Global property state not initialized");return(t=this.globalPropertyState.aspects.find(A=>A.name===e))==null?void 0:t.storage}async setAspect(e,t,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 a=this.configuration.aspects.find(o=>o.name===e);if(!a)throw new Error(`Failed to find configuration aspect with name: ${e}`);const n=ee(this.globalPropertyState),i=this.globalPropertyState.aspects.find(o=>o.name===e);i?(i.value=t,i.type=a.type,A!==void 0&&(i.storage=A!==null?A:void 0)):this.globalPropertyState.aspects.push({name:e,value:t,type:a.type,storage:A!==null?A:void 0}),await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(n,this.globalPropertyState)}async setAspectStorage(e,t){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 A=this.configuration.aspects.find(i=>i.name===e);if(!A)throw new Error(`Failed to find configuration aspect with name: ${e}`);const a=ee(this.globalPropertyState),n=this.globalPropertyState.aspects.find(i=>i.name===e);n?(n.storage=t!==null?t:void 0,n.type=A.type):this.globalPropertyState.aspects.push({name:e,value:"",type:A.type,storage:t!==null?t:void 0}),await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(a,this.globalPropertyState)}async updateGlobalPropertyState(){var t,A;if(!this.globalPropertyState)throw new Error("Global property state not initialized");const e=await v.getShadowGraphqlClient().mutate({mutation:Rn,variables:{id:this.globalPropertyState.id,aspects:this.globalPropertyState.aspects.map(a=>{const n=a.type&&a.storage?{}:void 0;if(n)switch(a.type){case g.AspectType.FileUpload:{n.fileUpload=a.storage;break}case g.AspectType.Option:case g.AspectType.ColorOption:{n.option=a.storage;break}}return{name:a.name,value:a.value,type:a.type,storage:n}})},context:{headers:{bundleOwnerId:this.bundleOwnerId,...(t=this.bundleOptions)==null?void 0:t.additionalHeaders}}});if((A=e.data)!=null&&A.globalPropertyStateUpdate)this.globalPropertyState=e.data.globalPropertyStateUpdate;else throw new Error("Unable to update global property state")}async getOrCreateGlobalPropertyState(){var A,a,n;const e=await v.getShadowGraphqlClient().query({query:Hn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{bundleId:this.bundleId},context:{headers:{bundleOwnerId:this.bundleOwnerId,...(A=this.bundleOptions)==null?void 0:A.additionalHeaders}}});if(e.data.globalPropertyState&&e.data.globalPropertyState.id)return e.data.globalPropertyState;const t=await v.getShadowGraphqlClient().mutate({mutation:Nn,variables:{bundleId:this.bundleId},context:{headers:{bundleOwnerId:this.bundleOwnerId,...(a=this.bundleOptions)==null?void 0:a.additionalHeaders}}});if((n=t.data)!=null&&n.globalPropertyStateCreate&&t.data.globalPropertyStateCreate.id)return t.data.globalPropertyStateCreate;throw new Error(`Unable to create global property state for bundle: ${this.bundleId}`)}}class Un{constructor(e){this.setState(e)}setState(e){e&&(this.state=JSON.parse(e))}applyStateToWorkflowExperience(e){var i;if(!this.state||!((i=e==null?void 0:e.getWorkflowManager())!=null&&i.getModelContainer()))return;const t=this.state.transactions.find(o=>o.transactionId===e.getWorkflowManager().getTransaction().id);if(!t)return;const A=this.getTransformToApply(t);if(!A)return;const a=this.flipTransform(A,e.getWorkflowManager().getPreviewService()),n=e.getWorkflowManager().getModelContainer();n.position=a.position,n.rotation=a.rotation,n.scale=a.scale}getTransformToApply(e){return e.activeTransform&&e.transforms?e.transforms[e.activeTransform]:e.transform}updateWorkflowExperienceTransform(e,t,A){const a=e.getWorkflowManager().getTransaction().id;this.state?this.state.transactions||(this.state.transactions=[]):this.state={transactions:[]};const n=this.state.transactions.find(i=>i.transactionId===a);n?(n.transforms||(n.transforms={}),n.transforms[t]=A):this.state.transactions.push({transactionId:a,activeTransform:t,transforms:{[t]:A}})}activateWorkflowExperienceTransform(e,t){var s,r;if(!((s=e==null?void 0:e.getWorkflowManager())!=null&&s.getModelContainer())||!this.state)return;const A=e.getWorkflowManager().getTransaction().id,a=this.state.transactions.find(c=>c.transactionId===A),n=(r=a==null?void 0:a.transforms)==null?void 0:r[t];if(!n)return;const i=this.flipTransform(n,e.getWorkflowManager().getPreviewService()),o=e.getWorkflowManager().getModelContainer();o.position=i.position,o.rotation=i.rotation,o.scale=i.scale,a.activeTransform=t}removeStateForTransaction(e){if(!this.state||!this.state.transactions)return;const t=this.state.transactions.findIndex(A=>A.transactionId===e);t!==-1&&this.state.transactions.splice(t,1)}getSerializedState(){if(this.state)return JSON.stringify(this.state)}flipTransform(e,t){return t&&t.flipTransform?t.flipTransform(e.position,{x:e.rotation.x*Math.PI/180,y:e.rotation.y*Math.PI/180,z:e.rotation.z*Math.PI/180},e.scale):{position:e.position,rotation:{x:e.rotation.x*Math.PI/180,y:e.rotation.y*Math.PI/180,z:e.rotation.z*Math.PI/180},scale:e.scale}}}class fA{constructor(e){this.fullFetched=!1,this.collection=e}getId(){return this.collection.id}getName(){return this.collection.name}getDescription(){return this.collection.description||""}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.map(e=>new Ge(e))}async fetchProducts(e){if(this.fullFetched)return this.collection.productCollectionProducts.map(A=>new Ge(A));const t=await v.getShadowGraphqlClient().query({query:mn,variables:{id:this.getId(),productIds:e},errorPolicy:"all",fetchPolicy:"no-cache"});return e||(this.fullFetched=!0),this.collection.productCollectionProducts=t.data.productCollections[0].productCollectionProducts||[],this.collection.productCollectionProducts.map(A=>new Ge(A))}getTransformCollection(){if(this.collection.transformCollection)return new IA(this.collection.transformCollection)}getResource(){return this.collection}}class Ge{constructor(e){this.product=e.product,this.productResource=e}getId(){return this.product.id}getName(){return this.product.name}getIntegrationByType(e,t){const a=(this.product.integrationProducts||[]).find(n=>{var r,c,B;const i=(r=n.integration)==null?void 0:r.type,o=((c=n.integration)==null?void 0:c.type)===e,s=t?((B=n.integration)==null?void 0:B.externalIntegrationId)===t:!0;return i&&o&&s});if(!a)throw new Error("Failed to find requested integration type on product. This is generally due to a configuration error");return a}getCurrentIntegration(){const t=(this.product.integrationProducts||[]).find(A=>{var a;return(a=A.integration)==null?void 0:a.isCurrent});if(!t)throw new Error(`Product: ${this.productResource.id} is not linked to this current integration. This is generally due to a configuration error.`);return t}getDefaultWorkflow(){const e=this.product.workflows||[];if(e.length===0)throw new H("No workflows on configured product. Ensure at least 1 workflow is assigned to this product.");const t=this.productResource.workflowId;if(t){const A=e.find(a=>a.workflowName===t);if(A)return new fe(A)}throw new H("Called getDefaultWorkflow() before fetching collection products. Use collection.fetchProducts() first to ensure the data is available.")}getAllWorkflows(){if((this.product.workflows||[]).length===0)throw new H("No workflows on configured product. Ensure at least 1 workflow is assigned to this product.");return this.product.workflows.sort((t,A)=>(t.index??0)-(A.index??0)).map(t=>new fe(t))}getIntegrations(){return this.product.integrationProducts||[]}getResource(){return this.product}getBasePrice(e){var a,n,i,o;const t=this.product.basePrice||0;if(!e)return t;if(!e.integrationType&&!e.externalId&&!e.integrationId)throw new Error("You must provide at least one of the following fields on the includeAdditionalProduct object: integrationType, externalId, integrationId");let A;return e.integrationId?A=(a=this.product.integrationProducts)==null?void 0:a.find(s=>{var r;return((r=s.integration)==null?void 0:r.id)===e.integrationId}):e.externalId?A=(n=this.product.integrationProducts)==null?void 0:n.find(s=>{var r;return((r=s.integration)==null?void 0:r.externalIntegrationId)===e.externalId}):A=(i=this.product.integrationProducts)==null?void 0:i.find(s=>{var r;return((r=s.integration)==null?void 0:r.type)===e.integrationType}),(o=A==null?void 0:A.additionalIntegrationProduct)!=null&&o.product?t+(A.additionalIntegrationProduct.product.basePrice||0):t}}class fe{constructor(e){this.workflow=e}getId(){return this.workflow.workflowName}getName(){return this.workflow.friendlyName}getThumbnail(){return this.workflow.imageUrl}}class IA{constructor(e){this.collection=e}getId(){return this.collection.id}getName(){return this.collection.name}getTransforms(){return this.collection.transforms.map(e=>new pA(e))}}class pA{constructor(e){this.transform=e}getId(){return this.transform.id}getName(){return this.transform.name}get(){return{position:this.transform.position,rotation:this.transform.rotation,scale:this.transform.scale}}}class rt{constructor(e,t,A,a,n,i){var o,s,r;this.eventListeners=new Map,this.workflowExperiences=[],this.client=e,this.id=t.id,this.name=t.name||"",this.ownerId=n,this.metadata=new Map(((o=t.metadata)==null?void 0:o.map(c=>[c.key,c.value]))||[]),this.productCollection=t.productCollection,this.bundleStateManager=new Un(t.bundleStateData),this.globalPropertyStateManager=new kn(this.id,this.ownerId,(s=this.productCollection)==null?void 0:s.globalPropertyConfiguration,this.checkConditionalHandlesChanged.bind(this),i),this.globalPropertyHandleService=new vn(this),this.setPreviewService(A),this.initializationPromise=Promise.all([this.loadExistingWorkflowExperiences(((r=t.transactions)==null?void 0:r.map(c=>c.id))||[],a),this.globalPropertyStateManager.getInitializationPromise()]),this.initializationPromise.catch(c=>{console.error(`Bundle initialization failed: ${c}`)})}setBundleOptions(e){this.globalPropertyStateManager.setBundleOptions(e)}getInitializationPromise(){return this.initializationPromise}addEventListener(e,t){this.eventListeners.set(e,[...this.eventListeners.get(e)||[],t])}removeEventListener(e,t){const A=this.eventListeners.get(e)||[],a=A.indexOf(t);a>-1&&A.splice(a,1)}getClient(){return this.client}getId(){return this.id}getName(){return this.name}setName(e){return this.name=e,this.updateBundle()}getMetadata(){return new Map(this.metadata)}setMetadata(e){return this.metadata=new Map(e),this.updateBundle()}setNameAndMetadata(e,t){return this.name=e,this.metadata=new Map(t),this.updateBundle()}hasGlobalProperties(){var e;return!!((e=this.productCollection)!=null&&e.globalPropertyConfiguration)}getGlobalPropertyConfiguration(){var e;return(e=this.productCollection)==null?void 0:e.globalPropertyConfiguration}async getGlobalProperties(){return this.globalPropertyHandleService.applyConditionsFromState(await this.globalPropertyHandleService.getHandles(),this.getGlobalPropertyStateManager().getGlobalPropertyState())}getGlobalPropertyStateManager(){return this.globalPropertyStateManager}async getGlobalPropertyTotalSubunits(){return(await this.globalPropertyHandleService.getHandles()).filter(A=>A.getType()===g.AspectType.Option).map(A=>{var a;return((a=A.getCurrentVariant())==null?void 0:a.getPrice())||0}).reduce((A,a)=>A+a,0)}getTotalSubunits(){return this.workflowExperiences.map(e=>e.getTotalPriceSubunits()).reduce((e,t)=>e+t,0)}getProductCollection(){return this.productCollection?new fA(this.productCollection):void 0}async addWorkflowExperience(e){e.setBundle(this),await this.appendWorkflowExperience(e),await this.injectExperienceIntoPreviewService(e),await e.getWorkflowManager().getInitializationPromise();const t=await this.getGlobalProperties();for(const A of t)await A.applyGlobalState([e])}async addWorkflowExperiences(e){const t=e.map(o=>o.getWorkflowManager().getTransaction().id),A=t.map(o=>this.workflowExperiences.find(s=>s.getWorkflowManager().getTransaction().id===o));if(A.some(o=>!!o))throw new Error("Unable to add transaction to bundle - Already Exists: "+A.filter(o=>!!o).map(o=>o==null?void 0:o.getWorkflowManager().getTransaction().id).join(", "));const a=P.getMap("transactionOwnerIds")||new Map,n=t.map(o=>a.get(o));await v.getShadowGraphqlClient().mutate({mutation:pn,variables:{id:this.id,transactionIds:t,transactionOwnerIds:n},context:{bundleOwnerId:this.ownerId}}).catch(o=>{console.error(o)}),this.workflowExperiences.push(...e);const i=async()=>{for(const s of e)s.setBundle(this),await this.injectExperienceIntoPreviewService(s);await Promise.all(e.map(s=>s.getWorkflowManager().getInitializationPromise()));const o=await this.getGlobalProperties();for(const s of o)await s.applyGlobalState(e)};await Promise.all([this.updateTransactionOrder(),i()]),this.workflowExperiences.forEach(o=>o.checkForPriceBreakChanges())}async appendWorkflowExperience(e,t=!0){const A=e.getWorkflowManager().getTransaction().id;if(this.workflowExperiences.find(o=>o.getWorkflowManager().getTransaction().id===A))throw new Error("Unable to add transaction to bundle - Already Exists!");const i=(P.getMap("transactionOwnerIds")||new Map).get(A);await v.getShadowGraphqlClient().mutate({mutation:In,variables:{id:this.id,transactionId:A},context:{bundleOwnerId:this.ownerId,transactionOwnerId:i}}),t&&(this.workflowExperiences.push(e),this.workflowExperiences.forEach(o=>o.checkForPriceBreakChanges()))}async removeWorkflowExperience(e){const t=this.workflowExperiences.indexOf(e);await this.removeTransaction(t,this.workflowExperiences[t].getWorkflowManager().getTransaction())}async removeWorkflowExperiences(e){await this.removeTransactions(e.map(t=>t.getWorkflowManager().getTransaction()))}async removeWorkflowExperienceByTransaction(e){const t=this.workflowExperiences.findIndex(A=>A.getWorkflowManager().getTransaction().id===e.id);await this.removeTransaction(t,e)}async removeWorkflowExperiencesByTransactions(e){await this.removeTransactions(e)}async removeTransaction(e,t,A=!0){if(e>-1){const a=this.workflowExperiences.find(n=>n.getWorkflowManager().getTransaction().id===t.id);a.setBundle(void 0),this.previewService&&a.getWorkflowManager().ejectFromPreviewService(),this.bundleStateManager.removeStateForTransaction(t.id),await v.getShadowGraphqlClient().mutate({mutation:Fn,variables:{id:this.id,transactionId:t.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([n,i])=>({key:n,value:i})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),A&&(this.workflowExperiences.splice(e,1),this.workflowExperiences.forEach(n=>n.checkForPriceBreakChanges()),a.checkForPriceBreakChanges(),await this.updateTransactionOrder())}else throw new Error("Unable to remove workflow experience from bundle - Not Found! - "+t.id)}async removeTransactions(e){const t=e.map(a=>this.workflowExperiences.findIndex(n=>n.getWorkflowManager().getTransaction().id===a.id));if(t.some(a=>a===-1))throw new Error("Unable to remove workflow experience from bundle - The following aren't included in the bundle: "+e.filter((a,n)=>t[n]===-1).map(a=>a.id).join(", "));const A=e.map(a=>this.workflowExperiences.splice(this.workflowExperiences.findIndex(n=>n.getWorkflowManager().getTransaction().id===a.id),1)[0]);A.forEach(a=>a.setBundle(void 0)),[...this.workflowExperiences,...A].forEach(a=>a.checkForPriceBreakChanges()),this.previewService&&A.forEach(a=>a.getWorkflowManager().ejectFromPreviewService()),e.forEach(a=>this.bundleStateManager.removeStateForTransaction(a.id)),await v.getShadowGraphqlClient().mutate({mutation:Sn,variables:{id:this.id,transactionIds:e.map(a=>a.id),name:this.name,metadata:Array.from(this.metadata.entries()).map(([a,n])=>({key:a,value:n})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),await this.updateTransactionOrder()}async insertWorkflowExperience(e,t){await this.appendWorkflowExperience(e,!1),this.workflowExperiences.splice(t,0,e),await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(e);const A=await this.getGlobalProperties();await Promise.all(A.map(a=>a.applyGlobalState([e])))})()])}async replaceWorkflowExperience(e,t){if(e<0||e>=this.workflowExperiences.length)throw new Error("Unable to replace workflow experience in bundle - Index out of range!");const A=this.workflowExperiences[e];if(A.getWorkflowManager().getTransaction().id===t.getWorkflowManager().getTransaction().id)throw new Error("Unable to replace workflow experience in bundle - Same transaction!");await Promise.all([this.removeTransaction(e,A.getWorkflowManager().getTransaction(),!1),this.appendWorkflowExperience(t,!1)]),this.workflowExperiences[e]=t,await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(t);const a=await this.getGlobalProperties();await Promise.all(a.map(n=>n.applyGlobalState([t])))})()])}async swapWorkflowExperiences(e,t){if(e<0||e>=this.workflowExperiences.length||t<0||t>=this.workflowExperiences.length)throw new Error("Unable to swap workflow experiences in bundle - Index out of range!");if(e===t)return;const A=this.workflowExperiences[e];this.workflowExperiences[e]=this.workflowExperiences[t],this.workflowExperiences[t]=A,await this.updateTransactionOrder()}getWorkflowExperiences(){return[...this.workflowExperiences]}async sortWorkflowExperiences(e){this.workflowExperiences=this.workflowExperiences.sort(e),await this.updateTransactionOrder()}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(e,t){var n;const A=await v.getShadowGraphqlClient().mutate({mutation:Mn,variables:{id:this.id,details:e,type:t||we.Owner},context:{bundleOwnerId:this.ownerId}});if(!((n=A.data)!=null&&n.bundleAddStakeholder))throw new Error("Bundle not found!");const a=A.data.bundleAddStakeholder.bundleStakeholders||[];this.storeStakeholderCustomers(a)}async removeStakeholder(e){var A;if(!((A=(await v.getShadowGraphqlClient().mutate({mutation:yn,variables:{id:this.id,emailAddress:e},context:{bundleOwnerId:this.ownerId}})).data)!=null&&A.bundleRemoveStakeholder))throw new Error("Bundle not found!")}async updateStakeholders(e){var a;const t=await v.getShadowGraphqlClient().mutate({mutation:Yn,variables:{id:this.id,input:e},context:{bundleOwnerId:this.ownerId}});if(!((a=t.data)!=null&&a.bundleUpdateStakeholders))throw new Error("Bundle not found!");const A=t.data.bundleUpdateStakeholders.bundleStakeholders||[];this.storeStakeholderCustomers(A)}async getAllStakeholders(){const e=await v.getShadowGraphqlClient().query({query:hn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.id},context:{bundleOwnerId:this.ownerId}});if(!e.data.bundles||e.data.bundles.length===0)throw new Error("Bundle not found!");const t=e.data.bundles[0].bundleStakeholders||[];return this.storeStakeholderCustomers(t),t}storeStakeholderCustomers(e){e.forEach(t=>{t.customer&&this.client.storeCustomer(t.customer)})}async finish(e,t){const A=await qa(this.workflowExperiences.map(a=>({workflowManager:a.getWorkflowManager(),workflow:a.getWorkflowManager().getWorkflow(),layouts:a.getWorkflowManager().getLayouts(),getReducerState:()=>a.getCommandContext().getState(),product:a.getWorkflowManager().getProduct(),transaction:a.getWorkflowManager().getTransaction(),workflowSelections:a.getWorkflowManager().getWorkflowSelections(),designName:a.getWorkflowManager().getWorkflow().name,workflowMetadata:a.getWorkflowManager().getWorkflowMetadata()})),e??(()=>{}),t?(a,n)=>{const i=this.workflowExperiences.find(o=>o.getWorkflowManager().getTransaction().id===n);return i?t(i):(console.warn("SpiffCommerce - Bundle create design - Unable to find experience for transaction: "+n),Promise.resolve(void 0))}:void 0);return{bundleId:this.id,items:A,bundleOwnerId:this.ownerId}}getPreviewService(){return this.previewService}async setPreviewService(e){if(this.workflowExperiences&&this.workflowExperiences.length>0&&(this.workflowExperiences.forEach(t=>t.getWorkflowManager().ejectFromPreviewService()),e))for(const t of this.workflowExperiences)await this.injectExperienceIntoPreviewService(t);e&&e.registerModelLoadEventListener&&e.registerModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService&&this.previewService!==e&&this.previewService.unregisterModelLoadEventListener&&this.previewService.unregisterModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService=e}updateWorkflowExperienceTransform(e,t,A){return this.bundleStateManager.updateWorkflowExperienceTransform(e,t,A),this.updateBundle()}activateWorkflowExperienceTransform(e,t){return this.bundleStateManager.activateWorkflowExperienceTransform(e,t),this.updateBundle()}async assignProductCollection(e){var A,a;const t=await v.getShadowGraphqlClient().mutate({mutation:xn(((A=this.globalPropertyStateManager.getBundleOptions())==null?void 0:A.eagerFetchProducts)??!1),variables:{id:this.id,productCollectionId:e??""},context:{bundleOwnerId:this.ownerId}});(a=t.data)!=null&&a.bundleAssignProductCollection.productCollection&&(this.productCollection=t.data.bundleAssignProductCollection.productCollection,this.globalPropertyStateManager.setConfiguration(t.data.bundleAssignProductCollection.productCollection.globalPropertyConfiguration))}onModelLoadEvent(e){e.eventType==="unload"||!e.modelContainer||(e.modelContainer.registerMaterialSelectedCallback(()=>this.onModelSelectedEvent(e.modelContainer,!0)),e.modelContainer.registerMaterialDeselectedCallback(()=>this.onModelSelectedEvent(e.modelContainer,!1)))}onModelSelectedEvent(e,t){if(e&&e.metadata&&e.metadata instanceof Map&&e.metadata.has("workflowManager")){const a=e.metadata.get("workflowManager").getTransaction(),n=this.workflowExperiences.find(i=>i.getWorkflowManager().getTransaction().id===a.id);n&&this.fireEvent(t?"workflow-experience-hover-enter":"workflow-experience-hover-exit",{workflowExperience:n})}}async injectExperienceIntoPreviewService(e){if(this.previewService){const t=e.getWorkflowManager().injectIntoPreviewService(this.previewService);try{this.bundleStateManager.applyStateToWorkflowExperience(e)}catch(A){console.error(`Unable to apply state to workflow experience: ${A}`)}await t}}async loadExistingWorkflowExperiences(e,t){if(e.length===0)return;const A=await this.client.getWorkflowExperiences(e.map(a=>({type:"transaction",transactionId:a})),t);if(A.forEach(a=>a.setBundle(this)),A.forEach(a=>a.checkForPriceBreakChanges()),this.workflowExperiences=A,this.previewService)for(const a of A)await this.injectExperienceIntoPreviewService(a)}async updateBundle(){var t;if(!((t=(await v.getShadowGraphqlClient().mutate({mutation:fn,variables:{id:this.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([A,a])=>({key:A,value:a})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}})).data)!=null&&t.bundleUpdate))throw new Error("Bundle not found!")}async updateTransactionOrder(){await v.getShadowGraphqlClient().mutate({mutation:Pn,variables:{id:this.id,transactionIds:this.workflowExperiences.map(e=>e.getWorkflowManager().getTransaction().id)},context:{bundleOwnerId:this.ownerId}})}async checkConditionalHandlesChanged(e,t){const A=await this.globalPropertyHandleService.getHandles(),a=this.globalPropertyHandleService.applyConditionsFromState(A,e),n=this.globalPropertyHandleService.applyConditionsFromState(A,t);if((()=>{if(a.length!==n.length)return!0;for(let o=0;o<a.length;o++)if(a[o].getName()!==n[o].getName())return!0;return!1})()){this.fireEvent("conditional-global-properties-changed",{globalProperties:n});const o=n.filter(s=>!a.includes(s));await Promise.all(o.map(s=>s.applyGlobalState()))}}fireEvent(e,t){(this.eventListeners.get(e)||[]).forEach(a=>a({bundle:this,event:e,data:t}))}}const Gn=S.gql`
2564
2570
  mutation processFlowCreate($processFlowId: String!, $inputs: [String]!) {
2565
2571
  processExecutionCreate(processFlowId: $processFlowId, inputs: $inputs) {
2566
2572
  id
@@ -3243,4 +3249,4 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
3243
3249
  ...TagFields
3244
3250
  }
3245
3251
  }
3246
- `,ce=async l=>{var e;for(const t in l.layouts){const A=l.layouts[t].elements.filter(n=>n.type===g.LayoutElementType.Illustration);for(let n=0;n<A.length;++n){const i=A[n];i.src&&i.svg&&(i.cachedObjectURL=await g.svgObjectURL(i.svg))}const a=l.layouts[t].elements.filter(n=>n.type===g.LayoutElementType.Textbox);for(let n=0;n<a.length;++n){const i=a[n];(e=i.fontData)!=null&&e.assetUrl&&await g.loadFont(i.fontData.assetUrl)}}},Ai=async(l,e)=>{var a;const t=await v.getShadowGraphqlClient().query({query:Zn(((a=e==null?void 0:e.assets)==null?void 0:a.metadata)||!1),errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:l}}),A=t.data.workflows;if(A===void 0||A.length!==l.length)throw new Error(`Unable to read workflows: ${t.errors??"Length mismatch in response"}`);return A.forEach(n=>{n.steps.forEach(i=>{var o,s,r;delete i.data.__typename,(o=i.option)!=null&&o.id&&((s=i.option.defaultVariant)!=null&&s.asset&&U.cacheAsset(i.option.defaultVariant.asset),i.option.colorProfile&&U.cacheAsset(i.option.colorProfile),(r=i.option.variants)==null||r.forEach(c=>{c.asset&&U.cacheAsset(c.asset),c.thumbnail&&U.cacheAsset(c.thumbnail),c.material&&U.cacheMaterial(c.material)}),ne.set({id:i.option.id},Promise.resolve(i.option)))}),n.finalizeStepConfig||(n.finalizeStepConfig={}),n.finalizeStepConfig.termsMarkdown=n.partner.termsMarkdown}),A},ai=async(l,e)=>{const A=(await e).find(a=>a.id===l);if(!A)throw new Error(`Workflow not found: ${l}`);return A},dt=async(l,e)=>{const t=l.map(o=>ne.get({id:o,options:e})),A=l.filter((o,s)=>t[s]===void 0);if(A.length===0)return Promise.all(t);const a=Ai(A,e),n=A.map(o=>ne.set({id:o,options:e},ai(o,a))),i=t.filter(o=>o!==void 0);return await Promise.all(i.concat(n))},pe=async(l,e)=>(await dt([l],e))[0],ni=l=>l.sort((e,t)=>e.index-t.index).map(e=>({id:g.generate(),panelId:e.name,name:e.name,index:e.index,createdAt:new Date,updatedAt:new Date,transparentBackground:e.transparentBackground,height:e.height,width:e.width,previewRegion:e.previewRegion,useEditableArea:e.useEditableArea,editableArea:e.editableArea})),Bt=(l,e)=>{const t=l.workflowState,A=t?JSON.parse(t):void 0;return A?Object.values(A.layouts).map(a=>a.layout):ni(e.panels)};class yA{constructor(e){this.activeIntegration=void 0,this.updateTransactionState=async t=>{try{return v.getShadowGraphqlClient().mutate({...t,mutation:na})}catch(A){throw console.error(A),new H("Critical - Unable to synchronize workflow state with server.")}},this.initialized=!1,this.options=e,this.options.applicationKey&&kA(this.options.applicationKey),console.debug("------------------------"),console.debug("Spiff Commerce Core SDK"),console.debug("Version: 22.10.1"),console.debug(`Application Key Provided: ${!!this.options.applicationKey}`),console.debug("------------------------")}configureUrls(e,t,A){V.setHubUrl(e),V.setServerUrl(t),V.setServicesApiUrl(A),this.options.applicationKey&&this.getIntegration()}configure(e){V.setHubUrl(e.hubUrl),V.setServerUrl(e.serverUrl),V.setServicesApiUrl(e.servicesApiUrl),this.marketplaceThemeInstallId=e.marketplaceThemeInstallId,this.marketplaceThemeInstallConfigurationId=e.marketplaceThemeInstallConfigurationId,e.bearerAuthenticationToken&&Ft(e.bearerAuthenticationToken),this.options.applicationKey&&this.getIntegration()}getAssetManager(){return U}getCurrencyCode(){if(this.currencyCode===void 0)throw new Error("No currency code set.");return this.currencyCode}getFlowService(){if(!UA())throw new Error("Application key required to use Flow Service.");return new FA}async getIntegration(){if(this.activeIntegration)return this.activeIntegration;if(!this.options.applicationKey)throw new Error("Cannot get current Integration without specifying an Application Key.");const e=async()=>(await v.getShadowGraphqlClient().query({query:ta,errorPolicy:"all",fetchPolicy:"no-cache"})).data.currentIntegration;return this.activeIntegration=e(),this.activeIntegration}async canUseAddon(e){var t;try{return((t=(await this.getIntegration()).partner.activeAddons)==null?void 0:t.includes(e))??!1}catch(A){return console.error(A),!1}}async authenticateBundleFromLocalStorage(e){var a,n;const t=P.getMap("bundleOwnerIds");if(t!=null&&t.has(e))return Promise.resolve({success:!0,stakeholderType:we.Owner});const A=P.getMap("bundlePartnerIds")||new Map;if(A.has(e)){const i=A.get(e),s=(P.getMap("partnerCustomerIds")||new Map).get(i);if(s&&await this.authenticateCustomerId(s)){const c=(n=(a=this.customer)==null?void 0:a.bundleStakeholders)==null?void 0:n.find(B=>{var d;return((d=B.bundle)==null?void 0:d.id)===e});if(c)return Promise.resolve({success:!0,stakeholderType:c.type})}}return Promise.resolve({success:!1})}async authenticateTransactionFromLocalStorage(e){var c,B,d,C,w,h;const t=v.getShadowGraphqlClient(),A=await t.query({query:$n,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:e}});if(!A.data.transactions||A.data.transactions.length===0)throw new Error(`Transaction not found: ${e}`);const a=A.data.transactions[0];if(!((B=(c=a.product)==null?void 0:c.partner)==null?void 0:B.id))throw new Error(`Unable to read transaction: ${e}`);if(a.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const i=P.getMap("transactionOwnerIds");if(i!=null&&i.has(e))return Promise.resolve({success:!0,stakeholderType:we.Owner});const o=P.getMap("transactionCustomerIds");if(o!=null&&o.has(e)){const u=o.get(e);if(u&&await this.authenticateCustomerId(u)){const m=((C=(d=this.customer)==null?void 0:d.bundleStakeholders)==null?void 0:C.find(p=>{var f,I;return(I=(f=p.bundle)==null?void 0:f.transactions)==null?void 0:I.some(D=>D.id===e)}))||((h=(w=this.customer)==null?void 0:w.stakeholders)==null?void 0:h.find(p=>{var f;return((f=p.transaction)==null?void 0:f.id)===e}));if(m)return Promise.resolve({success:!0,stakeholderType:m.type})}}const r=(await t.query({query:_n,errorPolicy:"all",variables:{id:a.workflowId}})).data.workflow;if(!r)throw new Error(`Unable to read workflow: ${a.workflowId}`);return Promise.resolve({success:!1,theme:r.overrideTheme,customLogoLink:a.customLogoLink})}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(e){const t=P.getMap("transactionCustomerIds");t!=null&&t.has(e)&&(t.delete(e),P.setMap("transactionCustomerIds",t))}getStakeholderTypeForTransaction(e){var A,a;const t=(a=(A=this.customer)==null?void 0:A.stakeholders)==null?void 0:a.find(n=>{var i;return((i=n.transaction)==null?void 0:i.id)===e});if(t)return t.type}async getOrCreateCustomer(e){var i;this.customer=void 0;const t=v.getShadowGraphqlClient(),a=(await t.query({query:Jn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:e}})).data.customer;if(!a.id){const s=(i=(await t.mutate({mutation:On,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:e}}})).data)==null?void 0:i.customerCreate;if(!s)throw new Error("Unable to create customer.");return this.storeCustomer(s),this.customer=s,{customer:s,isAuthenticated:!1}}this.storeCustomer(a);const n=await this.authenticateCustomerId(a.id);return{customer:this.customer||a,isAuthenticated:n}}getCustomer(){return this.customer}async authenticateCustomerId(e){var o;const t=v.getShadowGraphqlClient(),A=P.getMap("customerTokens");if(!(A!=null&&A.has(e)))return!1;const a=A.get(e);if(!a)return!1;const i=(o=(await t.mutate({mutation:Ln,errorPolicy:"all",fetchPolicy:"no-cache",variables:{loginToken:a}})).data)==null?void 0:o.customerAuthenticate;return i?(this.storeCustomer(i),It(a),this.customer=i,!0):!1}async generateVerificationCode(e){await v.getShadowGraphqlClient().mutate({mutation:zn,variables:{emailAddress:e}})}async verifyCode(e,t){var n,i;const a=(n=(await v.getShadowGraphqlClient().mutate({mutation:jn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:e,verificationCode:t}})).data)==null?void 0:n.customerVerifyCode;if(a!=null&&a.loginToken){if(!((i=a.partner)!=null&&i.id))throw new Error(`Unable to find customer: ${e}`);const o=P.getMap("customerTokens")||new Map;return o.set(a.id,a.loginToken),P.setMap("customerTokens",o),this.storeCustomer(a),It(a.loginToken),this.customer={...a,loginToken:void 0},!0}return!1}async getCustomerMetafields(){var t;if(!((t=this.customer)!=null&&t.id))throw new Error("Customer must be logged in before calling this function.");return(await v.getShadowGraphqlClient().query({query:Kn,fetchPolicy:"no-cache",variables:{id:this.customer.id}})).data.metafields}async getNewBundle(e,t,A){var r,c,B,d,C;const n=(B=(await v.getShadowGraphqlClient().mutate({mutation:Qn(((c=(r=A==null?void 0:A.graphql)==null?void 0:r.productCollection)==null?void 0:c.eagerFetchProducts)||!1),variables:{collectionId:e,initialMetadata:t?Object.entries(t).map((w,h)=>({key:w[0],value:w[1]})):void 0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},fetchPolicy:"no-cache"})).data)==null?void 0:B.bundleCreate;if(!(n!=null&&n.id))throw new Error("Unable to create bundle");const i=P.getMap("bundlePartnerIds")||new Map;i.set(n.id,n.partner.id),P.setMap("bundlePartnerIds",i);const o=P.getMap("bundleOwnerIds")||new Map;o.set(n.id,n.bundleOwnerId),P.setMap("bundleOwnerIds",o);const s=new rt(this,n,void 0,void 0,n.bundleOwnerId,{eagerFetchProducts:(C=(d=A==null?void 0:A.graphql)==null?void 0:d.productCollection)==null?void 0:C.eagerFetchProducts});return await s.getInitializationPromise(),s}async getExistingBundle(e,t,A,a){var u,Q,m,p,f,I,D,F,M,y,x;const n=P.getMap("bundleOwnerIds"),i=n==null?void 0:n.get(e),s=((u=Object.entries(localStorage).find(([N,Y])=>N.startsWith("CognitoIdentityServiceProvider")&&N.endsWith("idToken")))==null?void 0:u[0])||"",r=localStorage.getItem(s),c={};r&&!Ne(r)&&(c.Authorization=`Bearer ${r}`);const B={bundleOwnerId:i,...c,...(Q=a==null?void 0:a.graphql)==null?void 0:Q.additionalHeaders},d=await v.getShadowGraphqlClient().query({query:En(((p=(m=a==null?void 0:a.graphql)==null?void 0:m.productCollection)==null?void 0:p.eagerFetchProducts)||!1),variables:{id:e},fetchPolicy:"no-cache",context:{headers:B}});if(!((f=d.data)!=null&&f.bundles)||((I=d.data)==null?void 0:I.bundles.length)===0||!((D=d.data)!=null&&D.bundles[0]))throw new Error(`Unable to find bundle: ${e}`);const C=(F=d.data)==null?void 0:F.bundles[0],w=P.getMap("bundlePartnerIds")||new Map;w.set(C.id,C.partner.id),P.setMap("bundlePartnerIds",w);const h=new rt(this,C,t,A,i,{additionalHeaders:(M=a==null?void 0:a.graphql)==null?void 0:M.additionalHeaders,eagerFetchProducts:(x=(y=a==null?void 0:a.graphql)==null?void 0:y.productCollection)==null?void 0:x.eagerFetchProducts});return await h.getInitializationPromise(),h}async duplicateBundle(e,t,A,a){var u,Q,m,p,f,I,D,F;const n=(u=P.getMap("bundleOwnerIds"))==null?void 0:u.get(e),o=((Q=Object.entries(localStorage).find(([M,y])=>M.startsWith("CognitoIdentityServiceProvider")&&M.endsWith("idToken")))==null?void 0:Q[0])||"",s=localStorage.getItem(o),r={};s&&!Ne(s)&&(r.Authorization=`Bearer ${s}`);const c={bundleOwnerId:n,...r,...(m=a==null?void 0:a.graphql)==null?void 0:m.additionalHeaders},d=(I=(await v.getShadowGraphqlClient().mutate({mutation:Dn(((f=(p=a==null?void 0:a.graphql)==null?void 0:p.productCollection)==null?void 0:f.eagerFetchProducts)||!1),variables:{id:e,template:t,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId,duplicateTransactions:A},context:{headers:c},fetchPolicy:"no-cache"})).data)==null?void 0:I.bundleDuplicate;if(!(d!=null&&d.id))throw new Error("Unable to duplicate bundle");const C=P.getMap("bundlePartnerIds")||new Map;C.set(d.id,d.partner.id),P.setMap("bundlePartnerIds",C);const w=P.getMap("bundleOwnerIds")||new Map;w.set(d.id,d.bundleOwnerId),P.setMap("bundleOwnerIds",w);const h=new rt(this,d,void 0,void 0,d.bundleOwnerId,{eagerFetchProducts:(F=(D=a==null?void 0:a.graphql)==null?void 0:D.productCollection)==null?void 0:F.eagerFetchProducts});return await h.getInitializationPromise(),h}async getBundleStakeholders(){var n;if(!this.customer)throw new Error("Customer not authenticated.");const e=await v.getShadowGraphqlClient().query({query:un,variables:{id:this.customer.id},fetchPolicy:"no-cache"});if(!((n=e.data)!=null&&n.customers)||e.data.customers.length===0)throw new Error("Unable to find customer.");const A=e.data.customers[0].bundleStakeholders||[],a=P.getMap("bundlePartnerIds")||new Map;return A.forEach(i=>{var o,s;(o=i.bundle)!=null&&o.id&&((s=i.bundle.partner)!=null&&s.id)&&a.set(i.bundle.id,i.bundle.partner.id)}),P.setMap("bundlePartnerIds",a),A}async getStepTags(e){const t=v.getShadowGraphqlClient();let A={};const a=e.steps.map(i=>`${e.id}_${i.stepName}`),n=await t.query({query:ti,fetchPolicy:"no-cache",variables:{entityIds:a}});for(const[i,o]of e.steps.entries()){const s=n.data.tagsMany[i];A={...A,[o.stepName]:s.map(r=>r.name)}}return A}async getWorkflowExperience(e,t,A,a){var d,C,w,h,u;if(!a)return await this.getWorkflowExperienceDeprecated(e,t,A);const n=async()=>{var m,p,f;const Q=v.getShadowGraphqlClient();if(a.type==="transaction"){const{transactionId:I,readOnly:D}=a,F=await Q.query({query:ye,variables:{ids:[I]},errorPolicy:"all",fetchPolicy:"no-cache"});if(!((m=F.data)!=null&&m.transactions)||F.data.transactions.length===0)throw new H("Existing transaction not found.");const M=(p=F.data)==null?void 0:p.transactions[0];if(!M.workflowId)throw new H("Existing transaction has no workflow ID.");const y=await pe(M.workflowId);if(!M.product)throw new H("Failed to load transaction, product not available.");!this.activeIntegration&&((f=M.integrationProduct)!=null&&f.integration)&&(this.activeIntegration=Promise.resolve(M.integrationProduct.integration));const x=await this.getStepTags(y);return{transaction:M,workflow:y,stepTags:x,readOnly:D}}if(a.type==="integration"||a.type==="external"){const I=async()=>{const x=a.type==="integration"?{integrationProductId:a.integrationProductId}:{externalIntegrationId:a.externalIntegrationId,externalProductId:a.externalProductId},N=await Q.mutate({mutation:Ht,variables:{...x,workflowId:a.workflowId,designName:a.designName,claim:!0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!N.data||!N.data.transactionCreate)throw new H("Failed to create transaction!");const Y=N.data.transactionCreate;if(!Y.product)throw new H("Failed to create transaction, product not available.");return Y},D=pe(a.workflowId,a==null?void 0:a.graphql),[F,M]=await Promise.all([I(),D]),y=await this.getStepTags(M);return{transaction:F,workflow:M,stepTags:y}}throw new H("No workflow ID provided.")},{transaction:i,workflow:o,stepTags:s,readOnly:r}=await n();this.currencyCode=(d=i.product.partner)==null?void 0:d.currencyCode;const c={product:i.product,transaction:i,stepTags:s,layouts:[],singleVariantsRenderable:(C=a==null?void 0:a.workflowConfiguration)==null?void 0:C.singleVariantsRenderable,stateMutationFunc:r?async()=>{throw new G("State mutation is forbidden in read only mode!")}:async Q=>{const p=(P.getMap("transactionOwnerIds")||new Map).get(i.id)||void 0;return this.updateTransactionState({...Q,context:{transactionOwnerId:p}})},readOnly:r,workflow:o};if(a.type==="transaction"&&i.workflowState){const Q=JSON.parse(i.workflowState);c.layouts=Object.values(Q.layouts).map(m=>m.layout),await g.rehydrateSerializedLayout(Q),await ce(Q),c.reloadedState=Q}else if(!r&&a.workflowState){const Q=JSON.parse(a.workflowState);c.layouts=Object.values(Q.layouts).map(m=>m.layout),await g.rehydrateSerializedLayout(Q),await ce(Q),c.reloadedState=Q}else c.layouts=Bt(c.transaction,c.workflow);if(c.renderableContextService=new He(c.layouts),a.previewService?(c.previewService=a.previewService,(w=c.product)!=null&&w.modelUrl&&(c.modelContainer=c.previewService.loadModel({model:c.product.modelUrl,contextService:c.renderableContextService}))):(c.previewService=A&&A(o),(h=c.product)!=null&&h.modelUrl&&(c.modelContainer=(u=c.previewService)==null?void 0:u.loadModel({model:c.product.modelUrl,contextService:c.renderableContextService}))),a.type!=="transaction"){const Q=P.getMap("transactionOwnerIds")||new Map;Q.set(i.id,i.transactionOwnerId),P.setMap("transactionOwnerIds",Q)}else c.isReloadedTransaction=!0;this.initialized=!0,this.experienceOptions=c;const B=new De(this,c);return await B.getWorkflowManager().getInitializationPromise(),a.type!=="transaction"&&this.customer&&await B.attachCustomerDetails({email:this.customer.emailAddress}),B}async getWorkflowExperiences(e,t){if(e.length===0)throw new H("No options provided!");const A=v.getShadowGraphqlClient(),a=async I=>{var y,x,N;if(I.length===0)return[];const D=I.map(Y=>Y.option.transactionId),F=await A.query({query:ye,variables:{ids:D},errorPolicy:"all",fetchPolicy:"no-cache"}),M=F.data.transactions;if(M.length!==I.length){const Y=((x=(y=F.errors)==null?void 0:y[0])==null?void 0:x.message)||"Unknown error";throw new H(`Not all transactions were found: ${Y}`)}return!this.activeIntegration&&((N=M[0].integrationProduct)!=null&&N.integration)&&(this.activeIntegration=Promise.resolve(M[0].integrationProduct.integration)),M.map((Y,b)=>{var k;return{transaction:Y,workflowId:Y.workflowId,readOnly:((k=I.find(K=>K.option.transactionId===Y.id))==null?void 0:k.option.readOnly)??!1,index:I[b].index}})},n=async I=>{var M,y,x;if(I.length===0)return[];const D=await A.mutate({mutation:Aa,variables:{inputs:I.map(N=>({integrationProductId:N.option.type==="integration"?N.option.integrationProductId:void 0,externalIntegrationId:N.option.type==="external"?N.option.externalIntegrationId:void 0,externalProductId:N.option.type==="external"?N.option.externalProductId:void 0,workflowId:N.option.workflowId,designName:N.option.designName,claim:!0})),marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache"}),F=(M=D.data)==null?void 0:M.transactionCreateMany;if(!F||F.length===0){const N=((x=(y=D.errors)==null?void 0:y[0])==null?void 0:x.message)||"Unknown error";throw new H(`Failed to create transactions: ${N}`)}return F.map((N,Y)=>({transaction:N,workflowId:N.workflowId,readOnly:!1,index:I[Y].index}))},i=e.map((I,D)=>({option:I,index:D})),o=i.filter(I=>I.option.type==="transaction"),s=i.filter(I=>I.option.type==="integration"||I.option.type==="external"),r=mt(o,10),c=mt(s,10),B=(await Promise.all([...r.map(a),...c.map(n)])).flat(),d=[...new Set(B.map(I=>I.workflowId))],C=await dt(d,t),w=new Map(C.map(I=>[I.id,I])),h=P.getMap("transactionOwnerIds")||new Map,u=B.map(async I=>{var K;const{transaction:D,workflowId:F,readOnly:M,index:y}=I,x=w.get(F),N=await this.getStepTags(x),Y=e[y];!h.get(D.id)&&D.transactionOwnerId&&h.set(D.id,D.transactionOwnerId);const b=h.get(D.id)||void 0,k={product:D.product,transaction:D,stepTags:N,layouts:[],singleVariantsRenderable:(K=Y==null?void 0:Y.workflowConfiguration)==null?void 0:K.singleVariantsRenderable,stateMutationFunc:M?async()=>{throw new G("State mutation is forbidden in read only mode!")}:async T=>this.updateTransactionState({...T,context:{transactionOwnerId:b}}),readOnly:M,workflow:x,isReloadedTransaction:Y.type==="transaction"};if(Y.type==="transaction"&&D.workflowState){const T=JSON.parse(D.workflowState);k.layouts=Object.values(T.layouts||{}).map($=>$.layout),await g.rehydrateSerializedLayout(T),await ce(T),k.reloadedState=T}else if(!M&&Y.workflowState){const T=JSON.parse(Y.workflowState);k.layouts=Object.values(T.layouts||{}).map($=>$.layout),await g.rehydrateSerializedLayout(T),await ce(T),k.reloadedState=T}else k.layouts=Bt(k.transaction,k.workflow);return k.renderableContextService=new He(k.layouts),k.delayWorkflowStateSync=!0,this.initialized=!0,this.experienceOptions=k,{experienceOptions:k,index:y,options:Y}}),Q=await Promise.all(u);P.setMap("transactionOwnerIds",h);const p=Q.sort((I,D)=>I.index-D.index).map(async I=>{const{experienceOptions:D,options:F}=I,M=new De(this,D);return await M.getWorkflowManager().getInitializationPromise(),F.type!=="transaction"&&this.customer&&await M.attachCustomerDetails({email:this.customer.emailAddress}),M}),f=await Promise.all(p);return f.forEach(I=>I.getWorkflowManager().setWorkflowStateSyncEnabled(!0)),f}async initFromIntegrationProduct(e){var i;if(e==="")throw new H("No integration product ID provided.");const A=await v.getShadowGraphqlClient().mutate({mutation:Ht,variables:{integrationProductId:e,claim:!0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!A.data||!A.data.transactionCreate)throw new H("Failed to create transaction!");const a=A.data.transactionCreate;if(!a.product)throw new H("Failed to create transaction, product not available.");this.currencyCode=(i=a.product.partner)==null?void 0:i.currencyCode;const n=P.getMap("transactionOwnerIds")||new Map;n.set(a.id,a.transactionOwnerId),P.setMap("transactionOwnerIds",n),this.experienceOptions={product:a.product,transaction:a,layouts:[],stateMutationFunc:async o=>this.updateTransactionState({...o,context:{transactionOwnerId:a.transactionOwnerId}})},this.initialized=!0}async initFromTransaction(e,t=!1){var o,s,r,c;if(e==="")throw new H("No transaction ID provided.");const A=v.getShadowGraphqlClient(),a=async()=>{var C,w;const d=(C=(await A.query({query:ye,variables:{ids:[e]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:C.transactions[0];if(!d)throw new H("Failed to read transaction.");if(!d.product)throw new H("Failed to load transaction, product not available.");this.currencyCode=(w=d.product.partner)==null?void 0:w.currencyCode,this.experienceOptions={product:d.product,transaction:d,layouts:[],stateMutationFunc:async()=>{throw new G("State mutation is forbidden in read only mode!")},readOnly:t},this.initialized=!0};if(t)return await a();const n=P.getMap("transactionOwnerIds")||new Map,i=n.get(e);if(i){const d=(o=(await A.query({query:ye,variables:{ids:[e]},errorPolicy:"all"})).data)==null?void 0:o.transactions[0];if(!d)throw new H("Failed to read transaction.");if(!d.product)throw new H("Failed to load transaction, product not available.");this.currencyCode=(s=d.product.partner)==null?void 0:s.currencyCode,this.experienceOptions={product:d.product,transaction:d,layouts:[],stateMutationFunc:async C=>this.updateTransactionState({...C,context:{transactionOwnerId:i}}),readOnly:t},this.initialized=!0;return}try{const d=(r=(await A.mutate({mutation:aa,variables:{id:e},errorPolicy:"all"})).data)==null?void 0:r.transactionClaim;if(!d)throw new H("Failed to read transaction.");if(!d.product)throw new H("Failed to load transaction, product not available.");this.currencyCode=(c=d.product.partner)==null?void 0:c.currencyCode,d.transactionOwnerId&&(n.set(d.id,d.transactionOwnerId),P.setMap("transactionOwnerIds",n)),this.experienceOptions={product:d.product,transaction:d,layouts:[],stateMutationFunc:async C=>this.updateTransactionState({...C,context:{transactionOwnerId:d.transactionOwnerId}}),readOnly:t},this.initialized=!0}catch{throw new H("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(e,t,A){var a,n,i,o;if(!this.initialized||!this.experienceOptions)throw new H("Cannot launch experience: Not initialized.");if(this.experienceOptions.transaction.workflowId){const s=await pe(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=s,this.experienceOptions.transaction.workflowState){const c=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(c.layouts).map(B=>B.layout),await g.rehydrateSerializedLayout(c),await ce(c),this.experienceOptions.reloadedState=c}this.experienceOptions.previewService=A&&A(s),this.experienceOptions.renderableContextService=new He(this.experienceOptions.layouts),(a=this.experienceOptions.product)!=null&&a.modelUrl&&(this.experienceOptions.modelContainer=(n=this.experienceOptions.previewService)==null?void 0:n.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const r=new De(this,this.experienceOptions);return await r.getWorkflowManager().getInitializationPromise(),r}if(e){const r=(P.getMap("transactionOwnerIds")||new Map).get(this.experienceOptions.transaction.id),c=v.getShadowGraphqlClient().mutate({mutation:ia,variables:{workflowId:e,id:this.experienceOptions.transaction.id},context:{transactionOwnerId:r}}),B=pe(e);if(await Promise.all([c,B]),this.experienceOptions.workflow=await B,t){const C=JSON.parse(t);this.experienceOptions.layouts=Object.values(C.layouts).map(w=>w.layout),await g.rehydrateSerializedLayout(C),await ce(C),this.experienceOptions.reloadedState=C}else this.experienceOptions.layouts=Bt(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=A&&A(await B),this.experienceOptions.renderableContextService=new He(this.experienceOptions.layouts),(i=this.experienceOptions.product)!=null&&i.modelUrl&&(this.experienceOptions.modelContainer=(o=this.experienceOptions.previewService)==null?void 0:o.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const d=new De(this,this.experienceOptions);return await d.getWorkflowManager().getInitializationPromise(),d}throw new H("No workflow ID provided.")}getPreviewService(){var e;return(e=this.experienceOptions)==null?void 0:e.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new H("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new H("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}storeCustomer(e){const t=P.getMap("partnerCustomerIds")||new Map;t.set(e.partner.id,e.id),P.setMap("partnerCustomerIds",t)}async getIntegrationProductById(e){var n,i;const a=(n=(await v.getShadowGraphqlClient().query({query:ra,variables:{ids:[e]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:n.integrationProducts;if(!a||a.length===0||!((i=a[0])!=null&&i.id))throw new Error("Integration product not found.");return new gt(a[0])}async getIntegrationProductFromExternalIds(e,t){var i;const n=(i=(await v.getShadowGraphqlClient().query({query:ca,variables:{externalProductId:t,externalIntegrationId:e},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:i.integrationProductFromExternalIds;if(!(n!=null&&n.id))throw new Error("Integration product not found.");return new gt(n)}async getIntegrationProduct(e){return e.type==="integration"?this.getIntegrationProductById(e.integrationProductId):this.getIntegrationProductFromExternalIds(e.externalIntegrationId,e.externalProductId)}async getShareActionsForTransaction(e){const A=(P.getMap("transactionOwnerIds")||new Map).get(e)||void 0,a=await v.getShadowGraphqlClient().query({query:sa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:e},context:{transactionOwnerId:A}});if(!a.data.transactions||a.data.transactions.length!==1)throw new Error(`Failed to fetch share actions for transaction: ${e}`);return a.data.transactions[0].transactionShareActions}}class ii{getClient(){return this.client??{}}getWorkflowExperience(){return{}}setClient(e){this.client=e}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}async reset(){}updateStateWithServer(e){}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(e){}addPoller(e){}addConfirmCallback(e){}addEditedCallback(e){}addElementsCallback(e){}addInformationResultCallback(e){}addInitCallback(e){}addMakingAdjustmentsCallback(e){}addMandatoryCallback(e){}addMetadataCallback(e){}addSelectionCallback(e){}addStepSpecificStorageCallback(e,t){}addStorageCallback(e){}getCommandDispatcher(){return e=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getProfanities(){return[]}getRegionElements(e){return[]}getSerializedStep(e,t){}getStepSpecificServices(e){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(e){}markUpdateCompleted(e){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}getStepSelections(){return{}}setCurrentAdjustingStepId(e){}setEditedStatus(e,t){}setInformationResults(e){}setMandatoryFulfilled(e,t){}async setSelectionsAndElements(e,t,A){}toggleDesignConfirmed(){}updateMetadata(e,t){}async updateStorage(e,t){}injectIntoPreviewService(e){return Promise.resolve()}ejectFromPreviewService(){}setWorkflowStateSyncEnabled(e){}async updateTransactionShareActions(){}addValidationCallback(e){}setStepError(e,t,A){}getStepErrors(e){}getValidationErrors(){return{steps:new Map}}async updateTransactionStakeholders(){}getStepTags(e){return[]}}var YA=(l=>(l.SelectFrame="SelectFrame",l.SelectImage="SelectImage",l.Position="Position",l))(YA||{});class PA extends j{constructor(e,t,A){var a;super(e,t,A),this.frameService=(a=this.manager.getStepSpecificServices(this.getId()))==null?void 0:a.frameService}selectVariant(e){const t=this.manager.getRegionElements(this.step.stepName);return q.selectVariant(this.step,e.getResource(),t,this.manager,A=>this.setUpdateState(A))}onFrameDataChanged(e){this.frameService&&this.frameService.onFrameDataChanged(t=>{t&&e(t)})}async selectImage(e,t=!0,A=!0){var a;if(await q.selectImage(this.step,e,this.manager,A),t){const n=((a=this.manager.getStepStorage(this.step.stepName))==null?void 0:a.framePatternData)||{};this.manager.updateStorage(this.step.stepName,{framePatternData:{...n,originalAssetKey:e.key,backgroundRemovedAssetKey:void 0,useOriginalAsset:void 0}})}}async canUseBackgroundRemover(){return this.manager.getClient().canUseAddon(Me.BackgroundRemover)}async canRemoveBackground(){var e,t,A,a;return await this.canUseBackgroundRemover()&&this.hasOriginalImageSelection()&&!!((t=(e=this.frameService)==null?void 0:e.getImageData())!=null&&t.src)&&!((a=(A=this.frameService)==null?void 0:A.getImageData())!=null&&a.svg)}async removeBackgroundFromImageSelection(e=!0){var n;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 t=await this.getOriginalImageSelection();if(!t)throw new Error("You must supply an image selection before attempting to remove the background.");const A=await U.removeBackgroundFromAsset(t);e&&await q.selectImage(this.step,A,this.manager,!1);const a=((n=this.manager.getStepStorage(this.step.stepName))==null?void 0:n.framePatternData)||{};return this.manager.updateStorage(this.step.stepName,{framePatternData:{...a,backgroundRemovedAssetKey:A.key,useOriginalAsset:!e}}),A}changeColors(e){q.changeColors(this.step,this.manager,e)}getImageData(){if(this.frameService)return this.frameService.getImageData()}async getColorOption(){return this.step.data.colorOption}getAvailableColors(){return this.step.data.colorPickerEnabled?q.availableColors(this.step,this.manager):Promise.resolve([])}isColorPickerEnabled(){return this.step.data.colorPickerEnabled??!1}async getOriginalImageColors(){const e=this.getImageData();return e!=null&&e.svg?(await g.generateSVGWithUnknownColors(e.svg)).colors:void 0}getMaxAllowedColors(){return this.step.data.maxColors}getUniqueColorCount(){return q.getUniqueColorCount(this.step,this.manager)}getCurrentFrameStep(e,t,A,a){return a&&a.length>1&&e===void 0?"SelectFrame":t||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(){var t,A;const e=(A=(t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.framePatternData)==null?void 0:A.originalAssetKey;if(e)return U.getLocalOrFromServer(e)}async getBackgroundRemovedImageSelection(){var t,A;const e=(A=(t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.framePatternData)==null?void 0:A.backgroundRemovedAssetKey;if(e)return U.getLocalOrFromServer(e)}hasOriginalImageSelection(){var e,t;return!!((t=(e=this.manager.getStepStorage(this.step.stepName))==null?void 0:e.framePatternData)!=null&&t.originalAssetKey)}hasBackgroundRemovedImageSelection(){var e,t;return!!((t=(e=this.getFrameStepStorage())==null?void 0:e.framePatternData)!=null&&t.backgroundRemovedAssetKey)}getUseOriginalImageSelection(){var e,t;return((t=(e=this.getFrameStepStorage())==null?void 0:e.framePatternData)==null?void 0:t.useOriginalAsset)??!1}async setUseOriginalImageSelection(e){var a;const t=((a=this.getFrameStepStorage())==null?void 0:a.framePatternData)||{};if(t.useOriginalAsset===e)return;const A=await this.getOriginalImageSelection();if(!A)throw new Error("You must provide an image selection before calling setUseOriginalImageSelection");if(e)await this.selectImage(A,!1,!1);else{const n=await this.getBackgroundRemovedImageSelection();if(!n)throw new Error("You must call removeBackgroundFromImageSelection before attempting to apply the image.");await this.selectImage(n,!1,!1)}this.manager.updateStorage(this.step.stepName,{framePatternData:{...t,useOriginalAsset:e}})}getFrameStepStorage(){return this.manager.getStepStorage(this.step.stepName)}}Object.defineProperty(E,"AspectType",{enumerable:!0,get:()=>g.AspectType}),Object.defineProperty(E,"AssetType",{enumerable:!0,get:()=>g.AssetType}),Object.defineProperty(E,"BringForwardCommand",{enumerable:!0,get:()=>g.BringForwardCommand}),Object.defineProperty(E,"BringToBackCommand",{enumerable:!0,get:()=>g.BringToBackCommand}),Object.defineProperty(E,"BringToFrontCommand",{enumerable:!0,get:()=>g.BringToFrontCommand}),Object.defineProperty(E,"CanvasCommand",{enumerable:!0,get:()=>g.CanvasCommand}),Object.defineProperty(E,"CommandContext",{enumerable:!0,get:()=>g.CommandContext}),Object.defineProperty(E,"CreateElementCommand",{enumerable:!0,get:()=>g.CreateElementCommand}),Object.defineProperty(E,"CreateLayoutCommand",{enumerable:!0,get:()=>g.CreateLayoutCommand}),Object.defineProperty(E,"DeleteElementCommand",{enumerable:!0,get:()=>g.DeleteElementCommand}),Object.defineProperty(E,"FontAlignmentCommand",{enumerable:!0,get:()=>g.FontAlignmentCommand}),Object.defineProperty(E,"FontColorCommand",{enumerable:!0,get:()=>g.FontColorCommand}),Object.defineProperty(E,"FontSizeCommand",{enumerable:!0,get:()=>g.FontSizeCommand}),Object.defineProperty(E,"FontSourceCommand",{enumerable:!0,get:()=>g.FontSourceCommand}),Object.defineProperty(E,"GroupCommand",{enumerable:!0,get:()=>g.GroupCommand}),Object.defineProperty(E,"LayoutElementFactory",{enumerable:!0,get:()=>g.LayoutElementFactory}),Object.defineProperty(E,"LayoutElementType",{enumerable:!0,get:()=>g.LayoutElementType}),Object.defineProperty(E,"MoveCommand",{enumerable:!0,get:()=>g.MoveCommand}),Object.defineProperty(E,"ResizeCommand",{enumerable:!0,get:()=>g.ResizeCommand}),Object.defineProperty(E,"RotateCommand",{enumerable:!0,get:()=>g.RotateCommand}),Object.defineProperty(E,"SendBackwardsCommand",{enumerable:!0,get:()=>g.SendBackwardsCommand}),Object.defineProperty(E,"StepAspectType",{enumerable:!0,get:()=>g.StepAspectType}),Object.defineProperty(E,"StepType",{enumerable:!0,get:()=>g.StepType}),Object.defineProperty(E,"TextChangeCommand",{enumerable:!0,get:()=>g.TextChangeCommand}),Object.defineProperty(E,"UnitOfMeasurement",{enumerable:!0,get:()=>g.UnitOfMeasurement}),Object.defineProperty(E,"UpdateImageSourceCommand",{enumerable:!0,get:()=>g.UpdateImageSourceCommand}),Object.defineProperty(E,"dataUrlFromExternalUrl",{enumerable:!0,get:()=>g.dataUrlFromExternalUrl}),Object.defineProperty(E,"determineCorrectFontSizeAndLines",{enumerable:!0,get:()=>g.determineCorrectFontSizeAndLines}),Object.defineProperty(E,"findElement",{enumerable:!0,get:()=>g.findElement}),Object.defineProperty(E,"frameDataCache",{enumerable:!0,get:()=>g.frameDataCache}),Object.defineProperty(E,"generate",{enumerable:!0,get:()=>g.generate}),Object.defineProperty(E,"generateSVGWithUnknownColors",{enumerable:!0,get:()=>g.generateSVGWithUnknownColors}),Object.defineProperty(E,"getAttributesFromArrayBuffer",{enumerable:!0,get:()=>g.getAttributesFromArrayBuffer}),Object.defineProperty(E,"getAxisAlignedBoundingBox",{enumerable:!0,get:()=>g.getAxisAlignedBoundingBox}),Object.defineProperty(E,"getFrameData",{enumerable:!0,get:()=>g.getFrameData}),Object.defineProperty(E,"getSvgElement",{enumerable:!0,get:()=>g.getSvgElement}),Object.defineProperty(E,"loadFont",{enumerable:!0,get:()=>g.loadFont}),Object.defineProperty(E,"patternImageDataCache",{enumerable:!0,get:()=>g.patternImageDataCache}),Object.defineProperty(E,"registerFetchImplementation",{enumerable:!0,get:()=>g.registerFetchImplementation}),Object.defineProperty(E,"registerWindowImplementation",{enumerable:!0,get:()=>g.registerWindowImplementation}),Object.defineProperty(E,"rehydrateSerializedLayout",{enumerable:!0,get:()=>g.rehydrateSerializedLayout}),Object.defineProperty(E,"setCanvasModule",{enumerable:!0,get:()=>g.setCanvasModule}),Object.defineProperty(E,"svgToDataUrl",{enumerable:!0,get:()=>g.svgToDataUrl}),E.AddonHandle=Me,E.ArrayInput=Tn,E.AssetNotFoundError=X,E.CollectionProduct=Ge,E.ColorOptionGlobalPropertyHandle=ot,E.ConversionDataType=Nt,E.ConversionLocation=vt,E.DigitalContentStepHandle=gA,E.FileUploadGlobalPropertyHandle=QA,E.FlowExecutionNodeResult=Ie,E.FlowExecutionResult=SA,E.FlowService=FA,E.FrameService=Jt,E.FrameStep=YA,E.FrameStepHandle=PA,E.GlobalPropertyHandle=Ue,E.IllustrationStepHandle=aA,E.InformationMessageType=Qe,E.InformationStepHandle=lA,E.IntegrationProduct=gt,E.IntegrationType=Pt,E.LayoutNotFoundError=J,E.MaterialStepHandle=nA,E.MisconfigurationError=de,E.MockWorkflowManager=ii,E.ModelStepHandle=iA,E.ModuleStepHandle=dA,E.ObjectInput=lt,E.ObjectInputType=MA,E.OptionGlobalPropertyHandle=it,E.OptionNotFoundError=ge,E.ParseError=Ae,E.PictureStepHandle=oA,E.ProductCameraRig=xt,E.ProductCollection=fA,E.ProductWorkflow=fe,E.PromiseCache=ne,E.PromiseQueue=je,E.QuestionStepHandle=sA,E.QueueablePromise=ze,E.ResourceNotFoundError=te,E.ShapeStepHandle=rA,E.SpiffCommerceClient=yA,E.StakeholderType=we,E.StepHandle=j,E.TextGlobalPropertyHandle=DA,E.TextInput=bn,E.TextStepHandle=cA,E.TransactionShareActionType=Yt,E.Transform=pA,E.TransformCollection=IA,E.UnhandledBehaviorError=G,E.Variant=W,E.WorkflowExperienceEventType=hA,E.WorkflowExperienceImpl=De,E.assetService=U,E.browserColorToHex=Kt,E.createDesign=EA,E.designService=Re,E.digitalContentStepService=Ke,E.findPmsColors=Qa,E.frameStepService=q,E.generateCommands=uA,E.generateStateFromDesignInputSteps=Cn,E.getBoundedOffsets=Tt,E.getWorkflow=pe,E.getWorkflows=dt,E.graphQlManager=v,E.illustrationStepService=me,E.matchHexToPms=ha,E.materialStepService=We,E.modelStepService=Xe,E.moduleStepService=qe,E.optionService=z,E.persistenceService=P,E.pictureStepService=Ze,E.pmsToRgb=Ea,E.questionStepService=$e,E.rgbToPms=jt,E.setBearerAuthenticationToken=Ft,E.shapeStepService=re,E.shortenUrl=Lt,E.spiffCoreConfiguration=V,E.stepAspectValuesToDesignInputSteps=Bn,E.textStepService=L,E.toast=Wt,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})});
3252
+ `,ce=async l=>{var e;for(const t in l.layouts){const A=l.layouts[t].elements.filter(n=>n.type===g.LayoutElementType.Illustration);for(let n=0;n<A.length;++n){const i=A[n];i.src&&i.svg&&(i.cachedObjectURL=await g.svgObjectURL(i.svg))}const a=l.layouts[t].elements.filter(n=>n.type===g.LayoutElementType.Textbox);for(let n=0;n<a.length;++n){const i=a[n];(e=i.fontData)!=null&&e.assetUrl&&await g.loadFont(i.fontData.assetUrl)}}},Ai=async(l,e)=>{var a;const t=await v.getShadowGraphqlClient().query({query:Zn(((a=e==null?void 0:e.assets)==null?void 0:a.metadata)||!1),errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:l}}),A=t.data.workflows;if(A===void 0||A.length!==l.length)throw new Error(`Unable to read workflows: ${t.errors??"Length mismatch in response"}`);return A.forEach(n=>{n.steps.forEach(i=>{var o,s,r;delete i.data.__typename,(o=i.option)!=null&&o.id&&((s=i.option.defaultVariant)!=null&&s.asset&&U.cacheAsset(i.option.defaultVariant.asset),i.option.colorProfile&&U.cacheAsset(i.option.colorProfile),(r=i.option.variants)==null||r.forEach(c=>{c.asset&&U.cacheAsset(c.asset),c.thumbnail&&U.cacheAsset(c.thumbnail),c.material&&U.cacheMaterial(c.material)}),ne.set({id:i.option.id},Promise.resolve(i.option)))}),n.finalizeStepConfig||(n.finalizeStepConfig={}),n.finalizeStepConfig.termsMarkdown=n.partner.termsMarkdown}),A},ai=async(l,e)=>{const A=(await e).find(a=>a.id===l);if(!A)throw new Error(`Workflow not found: ${l}`);return A},dt=async(l,e)=>{const t=l.map(o=>ne.get({id:o,options:e})),A=l.filter((o,s)=>t[s]===void 0);if(A.length===0)return Promise.all(t);const a=Ai(A,e),n=A.map(o=>ne.set({id:o,options:e},ai(o,a))),i=t.filter(o=>o!==void 0);return await Promise.all(i.concat(n))},pe=async(l,e)=>(await dt([l],e))[0],ni=l=>l.sort((e,t)=>e.index-t.index).map(e=>({id:g.generate(),panelId:e.name,name:e.name,index:e.index,createdAt:new Date,updatedAt:new Date,transparentBackground:e.transparentBackground,height:e.height,width:e.width,previewRegion:e.previewRegion,useEditableArea:e.useEditableArea,editableArea:e.editableArea})),Bt=(l,e)=>{const t=l.workflowState,A=t?JSON.parse(t):void 0;return A?Object.values(A.layouts).map(a=>a.layout):ni(e.panels)};class yA{constructor(e){this.activeIntegration=void 0,this.updateTransactionState=async t=>{try{return v.getShadowGraphqlClient().mutate({...t,mutation:na})}catch(A){throw console.error(A),new H("Critical - Unable to synchronize workflow state with server.")}},this.initialized=!1,this.options=e,this.options.applicationKey&&kA(this.options.applicationKey),console.debug("------------------------"),console.debug("Spiff Commerce Core SDK"),console.debug("Version: 22.12.0"),console.debug(`Application Key Provided: ${!!this.options.applicationKey}`),console.debug("------------------------")}configureUrls(e,t,A){V.setHubUrl(e),V.setServerUrl(t),V.setServicesApiUrl(A),this.options.applicationKey&&this.getIntegration()}configure(e){V.setHubUrl(e.hubUrl),V.setServerUrl(e.serverUrl),V.setServicesApiUrl(e.servicesApiUrl),this.marketplaceThemeInstallId=e.marketplaceThemeInstallId,this.marketplaceThemeInstallConfigurationId=e.marketplaceThemeInstallConfigurationId,e.bearerAuthenticationToken&&Ft(e.bearerAuthenticationToken),this.options.applicationKey&&this.getIntegration()}getAssetManager(){return U}getCurrencyCode(){if(this.currencyCode===void 0)throw new Error("No currency code set.");return this.currencyCode}getFlowService(){if(!UA())throw new Error("Application key required to use Flow Service.");return new FA}async getIntegration(){if(this.activeIntegration)return this.activeIntegration;if(!this.options.applicationKey)throw new Error("Cannot get current Integration without specifying an Application Key.");const e=async()=>(await v.getShadowGraphqlClient().query({query:ta,errorPolicy:"all",fetchPolicy:"no-cache"})).data.currentIntegration;return this.activeIntegration=e(),this.activeIntegration}async canUseAddon(e){var t;try{return((t=(await this.getIntegration()).partner.activeAddons)==null?void 0:t.includes(e))??!1}catch(A){return console.error(A),!1}}async authenticateBundleFromLocalStorage(e){var a,n;const t=P.getMap("bundleOwnerIds");if(t!=null&&t.has(e))return Promise.resolve({success:!0,stakeholderType:we.Owner});const A=P.getMap("bundlePartnerIds")||new Map;if(A.has(e)){const i=A.get(e),s=(P.getMap("partnerCustomerIds")||new Map).get(i);if(s&&await this.authenticateCustomerId(s)){const c=(n=(a=this.customer)==null?void 0:a.bundleStakeholders)==null?void 0:n.find(B=>{var d;return((d=B.bundle)==null?void 0:d.id)===e});if(c)return Promise.resolve({success:!0,stakeholderType:c.type})}}return Promise.resolve({success:!1})}async authenticateTransactionFromLocalStorage(e){var c,B,d,C,w,h;const t=v.getShadowGraphqlClient(),A=await t.query({query:$n,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:e}});if(!A.data.transactions||A.data.transactions.length===0)throw new Error(`Transaction not found: ${e}`);const a=A.data.transactions[0];if(!((B=(c=a.product)==null?void 0:c.partner)==null?void 0:B.id))throw new Error(`Unable to read transaction: ${e}`);if(a.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const i=P.getMap("transactionOwnerIds");if(i!=null&&i.has(e))return Promise.resolve({success:!0,stakeholderType:we.Owner});const o=P.getMap("transactionCustomerIds");if(o!=null&&o.has(e)){const u=o.get(e);if(u&&await this.authenticateCustomerId(u)){const m=((C=(d=this.customer)==null?void 0:d.bundleStakeholders)==null?void 0:C.find(p=>{var f,I;return(I=(f=p.bundle)==null?void 0:f.transactions)==null?void 0:I.some(D=>D.id===e)}))||((h=(w=this.customer)==null?void 0:w.stakeholders)==null?void 0:h.find(p=>{var f;return((f=p.transaction)==null?void 0:f.id)===e}));if(m)return Promise.resolve({success:!0,stakeholderType:m.type})}}const r=(await t.query({query:_n,errorPolicy:"all",variables:{id:a.workflowId}})).data.workflow;if(!r)throw new Error(`Unable to read workflow: ${a.workflowId}`);return Promise.resolve({success:!1,theme:r.overrideTheme,customLogoLink:a.customLogoLink})}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(e){const t=P.getMap("transactionCustomerIds");t!=null&&t.has(e)&&(t.delete(e),P.setMap("transactionCustomerIds",t))}getStakeholderTypeForTransaction(e){var A,a;const t=(a=(A=this.customer)==null?void 0:A.stakeholders)==null?void 0:a.find(n=>{var i;return((i=n.transaction)==null?void 0:i.id)===e});if(t)return t.type}async getOrCreateCustomer(e){var i;this.customer=void 0;const t=v.getShadowGraphqlClient(),a=(await t.query({query:Jn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:e}})).data.customer;if(!a.id){const s=(i=(await t.mutate({mutation:On,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:e}}})).data)==null?void 0:i.customerCreate;if(!s)throw new Error("Unable to create customer.");return this.storeCustomer(s),this.customer=s,{customer:s,isAuthenticated:!1}}this.storeCustomer(a);const n=await this.authenticateCustomerId(a.id);return{customer:this.customer||a,isAuthenticated:n}}getCustomer(){return this.customer}async authenticateCustomerId(e){var o;const t=v.getShadowGraphqlClient(),A=P.getMap("customerTokens");if(!(A!=null&&A.has(e)))return!1;const a=A.get(e);if(!a)return!1;const i=(o=(await t.mutate({mutation:Ln,errorPolicy:"all",fetchPolicy:"no-cache",variables:{loginToken:a}})).data)==null?void 0:o.customerAuthenticate;return i?(this.storeCustomer(i),It(a),this.customer=i,!0):!1}async generateVerificationCode(e){await v.getShadowGraphqlClient().mutate({mutation:zn,variables:{emailAddress:e}})}async verifyCode(e,t){var n,i;const a=(n=(await v.getShadowGraphqlClient().mutate({mutation:jn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:e,verificationCode:t}})).data)==null?void 0:n.customerVerifyCode;if(a!=null&&a.loginToken){if(!((i=a.partner)!=null&&i.id))throw new Error(`Unable to find customer: ${e}`);const o=P.getMap("customerTokens")||new Map;return o.set(a.id,a.loginToken),P.setMap("customerTokens",o),this.storeCustomer(a),It(a.loginToken),this.customer={...a,loginToken:void 0},!0}return!1}async getCustomerMetafields(){var t;if(!((t=this.customer)!=null&&t.id))throw new Error("Customer must be logged in before calling this function.");return(await v.getShadowGraphqlClient().query({query:Kn,fetchPolicy:"no-cache",variables:{id:this.customer.id}})).data.metafields}async getNewBundle(e,t,A){var r,c,B,d,C;const n=(B=(await v.getShadowGraphqlClient().mutate({mutation:Qn(((c=(r=A==null?void 0:A.graphql)==null?void 0:r.productCollection)==null?void 0:c.eagerFetchProducts)||!1),variables:{collectionId:e,initialMetadata:t?Object.entries(t).map((w,h)=>({key:w[0],value:w[1]})):void 0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},fetchPolicy:"no-cache"})).data)==null?void 0:B.bundleCreate;if(!(n!=null&&n.id))throw new Error("Unable to create bundle");const i=P.getMap("bundlePartnerIds")||new Map;i.set(n.id,n.partner.id),P.setMap("bundlePartnerIds",i);const o=P.getMap("bundleOwnerIds")||new Map;o.set(n.id,n.bundleOwnerId),P.setMap("bundleOwnerIds",o);const s=new rt(this,n,void 0,void 0,n.bundleOwnerId,{eagerFetchProducts:(C=(d=A==null?void 0:A.graphql)==null?void 0:d.productCollection)==null?void 0:C.eagerFetchProducts});return await s.getInitializationPromise(),s}async getExistingBundle(e,t,A,a){var u,Q,m,p,f,I,D,F,M,y,x;const n=P.getMap("bundleOwnerIds"),i=n==null?void 0:n.get(e),s=((u=Object.entries(localStorage).find(([N,Y])=>N.startsWith("CognitoIdentityServiceProvider")&&N.endsWith("idToken")))==null?void 0:u[0])||"",r=localStorage.getItem(s),c={};r&&!Ne(r)&&(c.Authorization=`Bearer ${r}`);const B={bundleOwnerId:i,...c,...(Q=a==null?void 0:a.graphql)==null?void 0:Q.additionalHeaders},d=await v.getShadowGraphqlClient().query({query:En(((p=(m=a==null?void 0:a.graphql)==null?void 0:m.productCollection)==null?void 0:p.eagerFetchProducts)||!1),variables:{id:e},fetchPolicy:"no-cache",context:{headers:B}});if(!((f=d.data)!=null&&f.bundles)||((I=d.data)==null?void 0:I.bundles.length)===0||!((D=d.data)!=null&&D.bundles[0]))throw new Error(`Unable to find bundle: ${e}`);const C=(F=d.data)==null?void 0:F.bundles[0],w=P.getMap("bundlePartnerIds")||new Map;w.set(C.id,C.partner.id),P.setMap("bundlePartnerIds",w);const h=new rt(this,C,t,A,i,{additionalHeaders:(M=a==null?void 0:a.graphql)==null?void 0:M.additionalHeaders,eagerFetchProducts:(x=(y=a==null?void 0:a.graphql)==null?void 0:y.productCollection)==null?void 0:x.eagerFetchProducts});return await h.getInitializationPromise(),h}async duplicateBundle(e,t,A,a){var u,Q,m,p,f,I,D,F;const n=(u=P.getMap("bundleOwnerIds"))==null?void 0:u.get(e),o=((Q=Object.entries(localStorage).find(([M,y])=>M.startsWith("CognitoIdentityServiceProvider")&&M.endsWith("idToken")))==null?void 0:Q[0])||"",s=localStorage.getItem(o),r={};s&&!Ne(s)&&(r.Authorization=`Bearer ${s}`);const c={bundleOwnerId:n,...r,...(m=a==null?void 0:a.graphql)==null?void 0:m.additionalHeaders},d=(I=(await v.getShadowGraphqlClient().mutate({mutation:Dn(((f=(p=a==null?void 0:a.graphql)==null?void 0:p.productCollection)==null?void 0:f.eagerFetchProducts)||!1),variables:{id:e,template:t,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId,duplicateTransactions:A},context:{headers:c},fetchPolicy:"no-cache"})).data)==null?void 0:I.bundleDuplicate;if(!(d!=null&&d.id))throw new Error("Unable to duplicate bundle");const C=P.getMap("bundlePartnerIds")||new Map;C.set(d.id,d.partner.id),P.setMap("bundlePartnerIds",C);const w=P.getMap("bundleOwnerIds")||new Map;w.set(d.id,d.bundleOwnerId),P.setMap("bundleOwnerIds",w);const h=new rt(this,d,void 0,void 0,d.bundleOwnerId,{eagerFetchProducts:(F=(D=a==null?void 0:a.graphql)==null?void 0:D.productCollection)==null?void 0:F.eagerFetchProducts});return await h.getInitializationPromise(),h}async getBundleStakeholders(){var n;if(!this.customer)throw new Error("Customer not authenticated.");const e=await v.getShadowGraphqlClient().query({query:un,variables:{id:this.customer.id},fetchPolicy:"no-cache"});if(!((n=e.data)!=null&&n.customers)||e.data.customers.length===0)throw new Error("Unable to find customer.");const A=e.data.customers[0].bundleStakeholders||[],a=P.getMap("bundlePartnerIds")||new Map;return A.forEach(i=>{var o,s;(o=i.bundle)!=null&&o.id&&((s=i.bundle.partner)!=null&&s.id)&&a.set(i.bundle.id,i.bundle.partner.id)}),P.setMap("bundlePartnerIds",a),A}async getStepTags(e){const t=v.getShadowGraphqlClient();let A={};const a=e.steps.map(i=>`${e.id}_${i.stepName}`),n=await t.query({query:ti,fetchPolicy:"no-cache",variables:{entityIds:a}});for(const[i,o]of e.steps.entries()){const s=n.data.tagsMany[i];A={...A,[o.stepName]:s.map(r=>r.name)}}return A}async getWorkflowExperience(e,t,A,a){var d,C,w,h,u;if(!a)return await this.getWorkflowExperienceDeprecated(e,t,A);const n=async()=>{var m,p,f;const Q=v.getShadowGraphqlClient();if(a.type==="transaction"){const{transactionId:I,readOnly:D}=a,F=await Q.query({query:ye,variables:{ids:[I]},errorPolicy:"all",fetchPolicy:"no-cache"});if(!((m=F.data)!=null&&m.transactions)||F.data.transactions.length===0)throw new H("Existing transaction not found.");const M=(p=F.data)==null?void 0:p.transactions[0];if(!M.workflowId)throw new H("Existing transaction has no workflow ID.");const y=await pe(M.workflowId);if(!M.product)throw new H("Failed to load transaction, product not available.");!this.activeIntegration&&((f=M.integrationProduct)!=null&&f.integration)&&(this.activeIntegration=Promise.resolve(M.integrationProduct.integration));const x=await this.getStepTags(y);return{transaction:M,workflow:y,stepTags:x,readOnly:D}}if(a.type==="integration"||a.type==="external"){const I=async()=>{const x=a.type==="integration"?{integrationProductId:a.integrationProductId}:{externalIntegrationId:a.externalIntegrationId,externalProductId:a.externalProductId},N=await Q.mutate({mutation:Ht,variables:{...x,workflowId:a.workflowId,designName:a.designName,claim:!0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!N.data||!N.data.transactionCreate)throw new H("Failed to create transaction!");const Y=N.data.transactionCreate;if(!Y.product)throw new H("Failed to create transaction, product not available.");return Y},D=pe(a.workflowId,a==null?void 0:a.graphql),[F,M]=await Promise.all([I(),D]),y=await this.getStepTags(M);return{transaction:F,workflow:M,stepTags:y}}throw new H("No workflow ID provided.")},{transaction:i,workflow:o,stepTags:s,readOnly:r}=await n();this.currencyCode=(d=i.product.partner)==null?void 0:d.currencyCode;const c={product:i.product,transaction:i,stepTags:s,layouts:[],singleVariantsRenderable:(C=a==null?void 0:a.workflowConfiguration)==null?void 0:C.singleVariantsRenderable,stateMutationFunc:r?async()=>{throw new G("State mutation is forbidden in read only mode!")}:async Q=>{const p=(P.getMap("transactionOwnerIds")||new Map).get(i.id)||void 0;return this.updateTransactionState({...Q,context:{transactionOwnerId:p}})},readOnly:r,workflow:o};if(a.type==="transaction"&&i.workflowState){const Q=JSON.parse(i.workflowState);c.layouts=Object.values(Q.layouts).map(m=>m.layout),await g.rehydrateSerializedLayout(Q),await ce(Q),c.reloadedState=Q}else if(!r&&a.workflowState){const Q=JSON.parse(a.workflowState);c.layouts=Object.values(Q.layouts).map(m=>m.layout),await g.rehydrateSerializedLayout(Q),await ce(Q),c.reloadedState=Q}else c.layouts=Bt(c.transaction,c.workflow);if(c.renderableContextService=new He(c.layouts),a.previewService?(c.previewService=a.previewService,(w=c.product)!=null&&w.modelUrl&&(c.modelContainer=c.previewService.loadModel({model:c.product.modelUrl,contextService:c.renderableContextService}))):(c.previewService=A&&A(o),(h=c.product)!=null&&h.modelUrl&&(c.modelContainer=(u=c.previewService)==null?void 0:u.loadModel({model:c.product.modelUrl,contextService:c.renderableContextService}))),a.type!=="transaction"){const Q=P.getMap("transactionOwnerIds")||new Map;Q.set(i.id,i.transactionOwnerId),P.setMap("transactionOwnerIds",Q)}else c.isReloadedTransaction=!0;this.initialized=!0,this.experienceOptions=c;const B=new De(this,c);return await B.getWorkflowManager().getInitializationPromise(),a.type!=="transaction"&&this.customer&&await B.attachCustomerDetails({email:this.customer.emailAddress}),B}async getWorkflowExperiences(e,t){if(e.length===0)throw new H("No options provided!");const A=v.getShadowGraphqlClient(),a=async I=>{var y,x,N;if(I.length===0)return[];const D=I.map(Y=>Y.option.transactionId),F=await A.query({query:ye,variables:{ids:D},errorPolicy:"all",fetchPolicy:"no-cache"}),M=F.data.transactions;if(M.length!==I.length){const Y=((x=(y=F.errors)==null?void 0:y[0])==null?void 0:x.message)||"Unknown error";throw new H(`Not all transactions were found: ${Y}`)}return!this.activeIntegration&&((N=M[0].integrationProduct)!=null&&N.integration)&&(this.activeIntegration=Promise.resolve(M[0].integrationProduct.integration)),M.map((Y,b)=>{var k;return{transaction:Y,workflowId:Y.workflowId,readOnly:((k=I.find(K=>K.option.transactionId===Y.id))==null?void 0:k.option.readOnly)??!1,index:I[b].index}})},n=async I=>{var M,y,x;if(I.length===0)return[];const D=await A.mutate({mutation:Aa,variables:{inputs:I.map(N=>({integrationProductId:N.option.type==="integration"?N.option.integrationProductId:void 0,externalIntegrationId:N.option.type==="external"?N.option.externalIntegrationId:void 0,externalProductId:N.option.type==="external"?N.option.externalProductId:void 0,workflowId:N.option.workflowId,designName:N.option.designName,claim:!0})),marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache"}),F=(M=D.data)==null?void 0:M.transactionCreateMany;if(!F||F.length===0){const N=((x=(y=D.errors)==null?void 0:y[0])==null?void 0:x.message)||"Unknown error";throw new H(`Failed to create transactions: ${N}`)}return F.map((N,Y)=>({transaction:N,workflowId:N.workflowId,readOnly:!1,index:I[Y].index}))},i=e.map((I,D)=>({option:I,index:D})),o=i.filter(I=>I.option.type==="transaction"),s=i.filter(I=>I.option.type==="integration"||I.option.type==="external"),r=mt(o,10),c=mt(s,10),B=(await Promise.all([...r.map(a),...c.map(n)])).flat(),d=[...new Set(B.map(I=>I.workflowId))],C=await dt(d,t),w=new Map(C.map(I=>[I.id,I])),h=P.getMap("transactionOwnerIds")||new Map,u=B.map(async I=>{var K;const{transaction:D,workflowId:F,readOnly:M,index:y}=I,x=w.get(F),N=await this.getStepTags(x),Y=e[y];!h.get(D.id)&&D.transactionOwnerId&&h.set(D.id,D.transactionOwnerId);const b=h.get(D.id)||void 0,k={product:D.product,transaction:D,stepTags:N,layouts:[],singleVariantsRenderable:(K=Y==null?void 0:Y.workflowConfiguration)==null?void 0:K.singleVariantsRenderable,stateMutationFunc:M?async()=>{throw new G("State mutation is forbidden in read only mode!")}:async T=>this.updateTransactionState({...T,context:{transactionOwnerId:b}}),readOnly:M,workflow:x,isReloadedTransaction:Y.type==="transaction"};if(Y.type==="transaction"&&D.workflowState){const T=JSON.parse(D.workflowState);k.layouts=Object.values(T.layouts||{}).map($=>$.layout),await g.rehydrateSerializedLayout(T),await ce(T),k.reloadedState=T}else if(!M&&Y.workflowState){const T=JSON.parse(Y.workflowState);k.layouts=Object.values(T.layouts||{}).map($=>$.layout),await g.rehydrateSerializedLayout(T),await ce(T),k.reloadedState=T}else k.layouts=Bt(k.transaction,k.workflow);return k.renderableContextService=new He(k.layouts),k.delayWorkflowStateSync=!0,this.initialized=!0,this.experienceOptions=k,{experienceOptions:k,index:y,options:Y}}),Q=await Promise.all(u);P.setMap("transactionOwnerIds",h);const p=Q.sort((I,D)=>I.index-D.index).map(async I=>{const{experienceOptions:D,options:F}=I,M=new De(this,D);return await M.getWorkflowManager().getInitializationPromise(),F.type!=="transaction"&&this.customer&&await M.attachCustomerDetails({email:this.customer.emailAddress}),M}),f=await Promise.all(p);return f.forEach(I=>I.getWorkflowManager().setWorkflowStateSyncEnabled(!0)),f}async initFromIntegrationProduct(e){var i;if(e==="")throw new H("No integration product ID provided.");const A=await v.getShadowGraphqlClient().mutate({mutation:Ht,variables:{integrationProductId:e,claim:!0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!A.data||!A.data.transactionCreate)throw new H("Failed to create transaction!");const a=A.data.transactionCreate;if(!a.product)throw new H("Failed to create transaction, product not available.");this.currencyCode=(i=a.product.partner)==null?void 0:i.currencyCode;const n=P.getMap("transactionOwnerIds")||new Map;n.set(a.id,a.transactionOwnerId),P.setMap("transactionOwnerIds",n),this.experienceOptions={product:a.product,transaction:a,layouts:[],stateMutationFunc:async o=>this.updateTransactionState({...o,context:{transactionOwnerId:a.transactionOwnerId}})},this.initialized=!0}async initFromTransaction(e,t=!1){var o,s,r,c;if(e==="")throw new H("No transaction ID provided.");const A=v.getShadowGraphqlClient(),a=async()=>{var C,w;const d=(C=(await A.query({query:ye,variables:{ids:[e]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:C.transactions[0];if(!d)throw new H("Failed to read transaction.");if(!d.product)throw new H("Failed to load transaction, product not available.");this.currencyCode=(w=d.product.partner)==null?void 0:w.currencyCode,this.experienceOptions={product:d.product,transaction:d,layouts:[],stateMutationFunc:async()=>{throw new G("State mutation is forbidden in read only mode!")},readOnly:t},this.initialized=!0};if(t)return await a();const n=P.getMap("transactionOwnerIds")||new Map,i=n.get(e);if(i){const d=(o=(await A.query({query:ye,variables:{ids:[e]},errorPolicy:"all"})).data)==null?void 0:o.transactions[0];if(!d)throw new H("Failed to read transaction.");if(!d.product)throw new H("Failed to load transaction, product not available.");this.currencyCode=(s=d.product.partner)==null?void 0:s.currencyCode,this.experienceOptions={product:d.product,transaction:d,layouts:[],stateMutationFunc:async C=>this.updateTransactionState({...C,context:{transactionOwnerId:i}}),readOnly:t},this.initialized=!0;return}try{const d=(r=(await A.mutate({mutation:aa,variables:{id:e},errorPolicy:"all"})).data)==null?void 0:r.transactionClaim;if(!d)throw new H("Failed to read transaction.");if(!d.product)throw new H("Failed to load transaction, product not available.");this.currencyCode=(c=d.product.partner)==null?void 0:c.currencyCode,d.transactionOwnerId&&(n.set(d.id,d.transactionOwnerId),P.setMap("transactionOwnerIds",n)),this.experienceOptions={product:d.product,transaction:d,layouts:[],stateMutationFunc:async C=>this.updateTransactionState({...C,context:{transactionOwnerId:d.transactionOwnerId}}),readOnly:t},this.initialized=!0}catch{throw new H("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(e,t,A){var a,n,i,o;if(!this.initialized||!this.experienceOptions)throw new H("Cannot launch experience: Not initialized.");if(this.experienceOptions.transaction.workflowId){const s=await pe(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=s,this.experienceOptions.transaction.workflowState){const c=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(c.layouts).map(B=>B.layout),await g.rehydrateSerializedLayout(c),await ce(c),this.experienceOptions.reloadedState=c}this.experienceOptions.previewService=A&&A(s),this.experienceOptions.renderableContextService=new He(this.experienceOptions.layouts),(a=this.experienceOptions.product)!=null&&a.modelUrl&&(this.experienceOptions.modelContainer=(n=this.experienceOptions.previewService)==null?void 0:n.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const r=new De(this,this.experienceOptions);return await r.getWorkflowManager().getInitializationPromise(),r}if(e){const r=(P.getMap("transactionOwnerIds")||new Map).get(this.experienceOptions.transaction.id),c=v.getShadowGraphqlClient().mutate({mutation:ia,variables:{workflowId:e,id:this.experienceOptions.transaction.id},context:{transactionOwnerId:r}}),B=pe(e);if(await Promise.all([c,B]),this.experienceOptions.workflow=await B,t){const C=JSON.parse(t);this.experienceOptions.layouts=Object.values(C.layouts).map(w=>w.layout),await g.rehydrateSerializedLayout(C),await ce(C),this.experienceOptions.reloadedState=C}else this.experienceOptions.layouts=Bt(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=A&&A(await B),this.experienceOptions.renderableContextService=new He(this.experienceOptions.layouts),(i=this.experienceOptions.product)!=null&&i.modelUrl&&(this.experienceOptions.modelContainer=(o=this.experienceOptions.previewService)==null?void 0:o.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const d=new De(this,this.experienceOptions);return await d.getWorkflowManager().getInitializationPromise(),d}throw new H("No workflow ID provided.")}getPreviewService(){var e;return(e=this.experienceOptions)==null?void 0:e.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new H("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new H("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}storeCustomer(e){const t=P.getMap("partnerCustomerIds")||new Map;t.set(e.partner.id,e.id),P.setMap("partnerCustomerIds",t)}async getIntegrationProductById(e){var n,i;const a=(n=(await v.getShadowGraphqlClient().query({query:ra,variables:{ids:[e]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:n.integrationProducts;if(!a||a.length===0||!((i=a[0])!=null&&i.id))throw new Error("Integration product not found.");return new gt(a[0])}async getIntegrationProductFromExternalIds(e,t){var i;const n=(i=(await v.getShadowGraphqlClient().query({query:ca,variables:{externalProductId:t,externalIntegrationId:e},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:i.integrationProductFromExternalIds;if(!(n!=null&&n.id))throw new Error("Integration product not found.");return new gt(n)}async getIntegrationProduct(e){return e.type==="integration"?this.getIntegrationProductById(e.integrationProductId):this.getIntegrationProductFromExternalIds(e.externalIntegrationId,e.externalProductId)}async getShareActionsForTransaction(e){const A=(P.getMap("transactionOwnerIds")||new Map).get(e)||void 0,a=await v.getShadowGraphqlClient().query({query:sa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:e},context:{transactionOwnerId:A}});if(!a.data.transactions||a.data.transactions.length!==1)throw new Error(`Failed to fetch share actions for transaction: ${e}`);return a.data.transactions[0].transactionShareActions}}class ii{getClient(){return this.client??{}}getWorkflowExperience(){return{}}setClient(e){this.client=e}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}async reset(){}updateStateWithServer(e){}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(e){}addPoller(e){}addConfirmCallback(e){}addEditedCallback(e){}addElementsCallback(e){}addInformationResultCallback(e){}addInitCallback(e){}addMakingAdjustmentsCallback(e){}addMandatoryCallback(e){}addMetadataCallback(e){}addSelectionCallback(e){}addStepSpecificStorageCallback(e,t){}addStorageCallback(e){}getCommandDispatcher(){return e=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getProfanities(){return[]}getRegionElements(e){return[]}getSerializedStep(e,t){}getStepSpecificServices(e){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(e){}markUpdateCompleted(e){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}getStepSelections(){return{}}setCurrentAdjustingStepId(e){}setEditedStatus(e,t){}setInformationResults(e){}setMandatoryFulfilled(e,t){}async setSelectionsAndElements(e,t,A){}toggleDesignConfirmed(){}updateMetadata(e,t){}async updateStorage(e,t){}injectIntoPreviewService(e){return Promise.resolve()}ejectFromPreviewService(){}setWorkflowStateSyncEnabled(e){}async updateTransactionShareActions(){}addValidationCallback(e){}setStepError(e,t,A){}getStepErrors(e){}getValidationErrors(){return{steps:new Map}}async updateTransactionStakeholders(){}getStepTags(e){return[]}}var YA=(l=>(l.SelectFrame="SelectFrame",l.SelectImage="SelectImage",l.Position="Position",l))(YA||{});class PA extends j{constructor(e,t,A){var a;super(e,t,A),this.frameService=(a=this.manager.getStepSpecificServices(this.getId()))==null?void 0:a.frameService}selectVariant(e){const t=this.manager.getRegionElements(this.step.stepName);return q.selectVariant(this.step,e.getResource(),t,this.manager,A=>this.setUpdateState(A))}onFrameDataChanged(e){this.frameService&&this.frameService.onFrameDataChanged(t=>{t&&e(t)})}async selectImage(e,t=!0,A=!0){var a;if(await q.selectImage(this.step,e,this.manager,A),t){const n=((a=this.manager.getStepStorage(this.step.stepName))==null?void 0:a.framePatternData)||{};this.manager.updateStorage(this.step.stepName,{framePatternData:{...n,originalAssetKey:e.key,backgroundRemovedAssetKey:void 0,useOriginalAsset:void 0}})}}async canUseBackgroundRemover(){return this.manager.getClient().canUseAddon(Me.BackgroundRemover)}async canRemoveBackground(){var e,t,A,a;return await this.canUseBackgroundRemover()&&this.hasOriginalImageSelection()&&!!((t=(e=this.frameService)==null?void 0:e.getImageData())!=null&&t.src)&&!((a=(A=this.frameService)==null?void 0:A.getImageData())!=null&&a.svg)}async removeBackgroundFromImageSelection(e=!0){var n;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 t=await this.getOriginalImageSelection();if(!t)throw new Error("You must supply an image selection before attempting to remove the background.");const A=await U.removeBackgroundFromAsset(t);e&&await q.selectImage(this.step,A,this.manager,!1);const a=((n=this.manager.getStepStorage(this.step.stepName))==null?void 0:n.framePatternData)||{};return this.manager.updateStorage(this.step.stepName,{framePatternData:{...a,backgroundRemovedAssetKey:A.key,useOriginalAsset:!e}}),A}changeColors(e){q.changeColors(this.step,this.manager,e)}getImageData(){if(this.frameService)return this.frameService.getImageData()}async getColorOption(){return this.step.data.colorOption}getAvailableColors(){return this.step.data.colorPickerEnabled?q.availableColors(this.step,this.manager):Promise.resolve([])}isColorPickerEnabled(){return this.step.data.colorPickerEnabled??!1}async getOriginalImageColors(){const e=this.getImageData();return e!=null&&e.svg?(await g.generateSVGWithUnknownColors(e.svg)).colors:void 0}getMaxAllowedColors(){return this.step.data.maxColors}getUniqueColorCount(){return q.getUniqueColorCount(this.step,this.manager)}getCurrentFrameStep(e,t,A,a){return a&&a.length>1&&e===void 0?"SelectFrame":t||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(){var t,A;const e=(A=(t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.framePatternData)==null?void 0:A.originalAssetKey;if(e)return U.getLocalOrFromServer(e)}async getBackgroundRemovedImageSelection(){var t,A;const e=(A=(t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.framePatternData)==null?void 0:A.backgroundRemovedAssetKey;if(e)return U.getLocalOrFromServer(e)}hasOriginalImageSelection(){var e,t;return!!((t=(e=this.manager.getStepStorage(this.step.stepName))==null?void 0:e.framePatternData)!=null&&t.originalAssetKey)}hasBackgroundRemovedImageSelection(){var e,t;return!!((t=(e=this.getFrameStepStorage())==null?void 0:e.framePatternData)!=null&&t.backgroundRemovedAssetKey)}getUseOriginalImageSelection(){var e,t;return((t=(e=this.getFrameStepStorage())==null?void 0:e.framePatternData)==null?void 0:t.useOriginalAsset)??!1}async setUseOriginalImageSelection(e){var a;const t=((a=this.getFrameStepStorage())==null?void 0:a.framePatternData)||{};if(t.useOriginalAsset===e)return;const A=await this.getOriginalImageSelection();if(!A)throw new Error("You must provide an image selection before calling setUseOriginalImageSelection");if(e)await this.selectImage(A,!1,!1);else{const n=await this.getBackgroundRemovedImageSelection();if(!n)throw new Error("You must call removeBackgroundFromImageSelection before attempting to apply the image.");await this.selectImage(n,!1,!1)}this.manager.updateStorage(this.step.stepName,{framePatternData:{...t,useOriginalAsset:e}})}getFrameStepStorage(){return this.manager.getStepStorage(this.step.stepName)}}Object.defineProperty(E,"AspectType",{enumerable:!0,get:()=>g.AspectType}),Object.defineProperty(E,"AssetType",{enumerable:!0,get:()=>g.AssetType}),Object.defineProperty(E,"BringForwardCommand",{enumerable:!0,get:()=>g.BringForwardCommand}),Object.defineProperty(E,"BringToBackCommand",{enumerable:!0,get:()=>g.BringToBackCommand}),Object.defineProperty(E,"BringToFrontCommand",{enumerable:!0,get:()=>g.BringToFrontCommand}),Object.defineProperty(E,"CanvasCommand",{enumerable:!0,get:()=>g.CanvasCommand}),Object.defineProperty(E,"CommandContext",{enumerable:!0,get:()=>g.CommandContext}),Object.defineProperty(E,"CreateElementCommand",{enumerable:!0,get:()=>g.CreateElementCommand}),Object.defineProperty(E,"CreateLayoutCommand",{enumerable:!0,get:()=>g.CreateLayoutCommand}),Object.defineProperty(E,"DeleteElementCommand",{enumerable:!0,get:()=>g.DeleteElementCommand}),Object.defineProperty(E,"FontAlignmentCommand",{enumerable:!0,get:()=>g.FontAlignmentCommand}),Object.defineProperty(E,"FontColorCommand",{enumerable:!0,get:()=>g.FontColorCommand}),Object.defineProperty(E,"FontSizeCommand",{enumerable:!0,get:()=>g.FontSizeCommand}),Object.defineProperty(E,"FontSourceCommand",{enumerable:!0,get:()=>g.FontSourceCommand}),Object.defineProperty(E,"GroupCommand",{enumerable:!0,get:()=>g.GroupCommand}),Object.defineProperty(E,"LayoutElementFactory",{enumerable:!0,get:()=>g.LayoutElementFactory}),Object.defineProperty(E,"LayoutElementType",{enumerable:!0,get:()=>g.LayoutElementType}),Object.defineProperty(E,"MoveCommand",{enumerable:!0,get:()=>g.MoveCommand}),Object.defineProperty(E,"ResizeCommand",{enumerable:!0,get:()=>g.ResizeCommand}),Object.defineProperty(E,"RotateCommand",{enumerable:!0,get:()=>g.RotateCommand}),Object.defineProperty(E,"SendBackwardsCommand",{enumerable:!0,get:()=>g.SendBackwardsCommand}),Object.defineProperty(E,"StepAspectType",{enumerable:!0,get:()=>g.StepAspectType}),Object.defineProperty(E,"StepType",{enumerable:!0,get:()=>g.StepType}),Object.defineProperty(E,"TextChangeCommand",{enumerable:!0,get:()=>g.TextChangeCommand}),Object.defineProperty(E,"UnitOfMeasurement",{enumerable:!0,get:()=>g.UnitOfMeasurement}),Object.defineProperty(E,"UpdateImageSourceCommand",{enumerable:!0,get:()=>g.UpdateImageSourceCommand}),Object.defineProperty(E,"dataUrlFromExternalUrl",{enumerable:!0,get:()=>g.dataUrlFromExternalUrl}),Object.defineProperty(E,"determineCorrectFontSizeAndLines",{enumerable:!0,get:()=>g.determineCorrectFontSizeAndLines}),Object.defineProperty(E,"findElement",{enumerable:!0,get:()=>g.findElement}),Object.defineProperty(E,"frameDataCache",{enumerable:!0,get:()=>g.frameDataCache}),Object.defineProperty(E,"generate",{enumerable:!0,get:()=>g.generate}),Object.defineProperty(E,"generateSVGWithUnknownColors",{enumerable:!0,get:()=>g.generateSVGWithUnknownColors}),Object.defineProperty(E,"getAttributesFromArrayBuffer",{enumerable:!0,get:()=>g.getAttributesFromArrayBuffer}),Object.defineProperty(E,"getAxisAlignedBoundingBox",{enumerable:!0,get:()=>g.getAxisAlignedBoundingBox}),Object.defineProperty(E,"getFrameData",{enumerable:!0,get:()=>g.getFrameData}),Object.defineProperty(E,"getSvgElement",{enumerable:!0,get:()=>g.getSvgElement}),Object.defineProperty(E,"loadFont",{enumerable:!0,get:()=>g.loadFont}),Object.defineProperty(E,"patternImageDataCache",{enumerable:!0,get:()=>g.patternImageDataCache}),Object.defineProperty(E,"registerFetchImplementation",{enumerable:!0,get:()=>g.registerFetchImplementation}),Object.defineProperty(E,"registerWindowImplementation",{enumerable:!0,get:()=>g.registerWindowImplementation}),Object.defineProperty(E,"rehydrateSerializedLayout",{enumerable:!0,get:()=>g.rehydrateSerializedLayout}),Object.defineProperty(E,"setCanvasModule",{enumerable:!0,get:()=>g.setCanvasModule}),Object.defineProperty(E,"svgToDataUrl",{enumerable:!0,get:()=>g.svgToDataUrl}),E.AddonHandle=Me,E.ArrayInput=Tn,E.AssetNotFoundError=X,E.CollectionProduct=Ge,E.ColorOptionGlobalPropertyHandle=ot,E.ConversionDataType=Nt,E.ConversionLocation=vt,E.DigitalContentStepHandle=gA,E.FileUploadGlobalPropertyHandle=QA,E.FlowExecutionNodeResult=Ie,E.FlowExecutionResult=SA,E.FlowService=FA,E.FrameService=Jt,E.FrameStep=YA,E.FrameStepHandle=PA,E.GlobalPropertyHandle=Ue,E.IllustrationStepHandle=aA,E.InformationMessageType=Qe,E.InformationStepHandle=lA,E.IntegrationProduct=gt,E.IntegrationType=Pt,E.LayoutNotFoundError=J,E.MaterialStepHandle=nA,E.MisconfigurationError=de,E.MockWorkflowManager=ii,E.ModelStepHandle=iA,E.ModuleStepHandle=dA,E.ObjectInput=lt,E.ObjectInputType=MA,E.OptionGlobalPropertyHandle=it,E.OptionNotFoundError=ge,E.ParseError=Ae,E.PictureStepHandle=oA,E.ProductCameraRig=xt,E.ProductCollection=fA,E.ProductWorkflow=fe,E.PromiseCache=ne,E.PromiseQueue=je,E.QuestionStepHandle=sA,E.QueueablePromise=ze,E.ResourceNotFoundError=te,E.ShapeStepHandle=rA,E.SpiffCommerceClient=yA,E.StakeholderType=we,E.StepHandle=j,E.TextGlobalPropertyHandle=DA,E.TextInput=bn,E.TextStepHandle=cA,E.TransactionShareActionType=Yt,E.Transform=pA,E.TransformCollection=IA,E.UnhandledBehaviorError=G,E.Variant=W,E.WorkflowExperienceEventType=hA,E.WorkflowExperienceImpl=De,E.assetService=U,E.browserColorToHex=Kt,E.createDesign=EA,E.designService=Re,E.digitalContentStepService=Ke,E.findPmsColors=Qa,E.frameStepService=q,E.generateCommands=uA,E.generateStateFromDesignInputSteps=Cn,E.getBoundedOffsets=Tt,E.getWorkflow=pe,E.getWorkflows=dt,E.graphQlManager=v,E.illustrationStepService=me,E.matchHexToPms=ha,E.materialStepService=We,E.modelStepService=Xe,E.moduleStepService=qe,E.optionService=z,E.persistenceService=P,E.pictureStepService=Ze,E.pmsToRgb=Ea,E.questionStepService=$e,E.rgbToPms=jt,E.setBearerAuthenticationToken=Ft,E.shapeStepService=re,E.shortenUrl=Lt,E.spiffCoreConfiguration=V,E.stepAspectValuesToDesignInputSteps=Bn,E.textStepService=L,E.toast=Wt,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spiffcommerce/core",
3
- "version": "22.10.1",
3
+ "version": "22.12.0",
4
4
  "description": "Core client API for interacting with the Spiff Commerce backend.",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/index.umd.cjs",