@spiffcommerce/core 26.34.0 → 26.35.0-beta.aa978625-d361-5b17-8ca8-19a0a8ab12c8
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/CHANGELOG.md +6 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +22 -12
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
14
14
|
- `Fixed` for any bug fixes.
|
|
15
15
|
- `Security` in case of vulnerabilities.
|
|
16
16
|
|
|
17
|
+
## [26.35.0] - 03-07-2025
|
|
18
|
+
|
|
19
|
+
## Added
|
|
20
|
+
|
|
21
|
+
- The `Bundle` type now has the `productsCount` property.
|
|
22
|
+
|
|
17
23
|
## [26.33.0] - 02-07-2025
|
|
18
24
|
|
|
19
25
|
## Added
|
package/dist/index.d.ts
CHANGED
|
@@ -2615,7 +2615,7 @@ interface WorkflowManager {
|
|
|
2615
2615
|
/**
|
|
2616
2616
|
* Create or amend the recipient fo the transaction.
|
|
2617
2617
|
*/
|
|
2618
|
-
updateRecipient(firstName?: string, lastName?: string, address?: string, suburb?: string, state?: string, email?: string, postalCode?: string, country?: string, mobile?: string): Promise<void>;
|
|
2618
|
+
updateRecipient(firstName?: string, lastName?: string, address?: string, suburb?: string, state?: string, email?: string, postalCode?: string, country?: string, mobile?: string, company?: string): Promise<void>;
|
|
2619
2619
|
}
|
|
2620
2620
|
|
|
2621
2621
|
declare enum AssetType {
|
|
@@ -3637,6 +3637,7 @@ interface Recipient {
|
|
|
3637
3637
|
postalCode?: string;
|
|
3638
3638
|
country?: string;
|
|
3639
3639
|
mobile?: string;
|
|
3640
|
+
company?: string;
|
|
3640
3641
|
createdAt?: string;
|
|
3641
3642
|
updatedAt?: string;
|
|
3642
3643
|
deletedAt?: string;
|
|
@@ -4046,6 +4047,7 @@ interface Bundle {
|
|
|
4046
4047
|
workflowViewerReadOnlyLink: string;
|
|
4047
4048
|
createdAt: string;
|
|
4048
4049
|
transactionsCount?: number;
|
|
4050
|
+
productsCount?: number;
|
|
4049
4051
|
orderId?: string;
|
|
4050
4052
|
quoteId?: string;
|
|
4051
4053
|
}
|
|
@@ -4938,7 +4940,7 @@ declare class DigitalContentStepService implements StepService<DigitalContentSte
|
|
|
4938
4940
|
declare const digitalContentStepService: DigitalContentStepService;
|
|
4939
4941
|
|
|
4940
4942
|
declare class MockWorkflowManager implements WorkflowManager {
|
|
4941
|
-
updateRecipient(_firstName?: string, _lastName?: string, _address?: string, _suburb?: string, _state?: string, _email?: string, _postalCode?: string, _country?: string, _mobile?: string): Promise<void>;
|
|
4943
|
+
updateRecipient(_firstName?: string, _lastName?: string, _address?: string, _suburb?: string, _state?: string, _email?: string, _postalCode?: string, _country?: string, _mobile?: string, _company?: string): Promise<void>;
|
|
4942
4944
|
approveTransaction(_note?: string): Promise<void>;
|
|
4943
4945
|
rejectTransaction(_note?: string): Promise<void>;
|
|
4944
4946
|
private client;
|
package/dist/index.js
CHANGED
|
@@ -373,6 +373,7 @@
|
|
|
373
373
|
postalCode
|
|
374
374
|
country
|
|
375
375
|
mobile
|
|
376
|
+
company
|
|
376
377
|
}
|
|
377
378
|
product {
|
|
378
379
|
id
|
|
@@ -1985,6 +1986,7 @@
|
|
|
1985
1986
|
templateStatus
|
|
1986
1987
|
createdAt
|
|
1987
1988
|
transactionsCount
|
|
1989
|
+
productsCount
|
|
1988
1990
|
quoteId
|
|
1989
1991
|
orderId
|
|
1990
1992
|
productCollection {
|
|
@@ -2033,6 +2035,7 @@
|
|
|
2033
2035
|
$postalCode: String
|
|
2034
2036
|
$country: String
|
|
2035
2037
|
$mobile: String
|
|
2038
|
+
$company: String
|
|
2036
2039
|
) {
|
|
2037
2040
|
recipientCreate(
|
|
2038
2041
|
firstName: $firstName
|
|
@@ -2044,6 +2047,7 @@
|
|
|
2044
2047
|
postalCode: $postalCode
|
|
2045
2048
|
country: $country
|
|
2046
2049
|
mobile: $mobile
|
|
2050
|
+
company: $company
|
|
2047
2051
|
) {
|
|
2048
2052
|
id
|
|
2049
2053
|
}
|
|
@@ -2060,6 +2064,7 @@
|
|
|
2060
2064
|
$postalCode: String
|
|
2061
2065
|
$country: String
|
|
2062
2066
|
$mobile: String
|
|
2067
|
+
$company: String
|
|
2063
2068
|
) {
|
|
2064
2069
|
recipientUpdate(
|
|
2065
2070
|
id: $id
|
|
@@ -2072,6 +2077,7 @@
|
|
|
2072
2077
|
postalCode: $postalCode
|
|
2073
2078
|
country: $country
|
|
2074
2079
|
mobile: $mobile
|
|
2080
|
+
company: $company
|
|
2075
2081
|
) {
|
|
2076
2082
|
id
|
|
2077
2083
|
}
|
|
@@ -2082,7 +2088,7 @@
|
|
|
2082
2088
|
id
|
|
2083
2089
|
}
|
|
2084
2090
|
}
|
|
2085
|
-
`;var ue=(r=>(r.Error="Error",r.Warning="Warning",r.Info="Info",r))(ue||{});const ll=1e3;class ln extends Ba{constructor(t){super(),this.createdAt=new Date,this.update=t}async execute(){await this.update(),await new Promise(t=>{window.setTimeout(()=>{t()},ll)})}}class cl{constructor(t,e,a,n,i,s,o,l,c,d,A,u,h,g=!1,m,p=!1,f=!1,C=!1){this.workflowStatePromiseQueue=new ba(1),this.initialized=!1,this.readOnly=!1,this.isReloadedTransaction=!1,this.singleVariantsRenderable=!1,this.stepTags={},this.renderLayouts=()=>{var S;if(!this.previewService)return;const y=this.getCommandContext().getAllLayouts(),v=(S=this.getLayoutPreviewService())==null?void 0:S.getAll();if(v)for(const[,E]of v)E.render(y)},this.experience=t,this.client=e,this.updateTransaction=o,this.graphQlClient=l,this.commandContext=s,this.reloadedState=h,this.transaction=c,this.readOnly=g,this.singleVariantsRenderable=f,this.confirmedDesign=!1,this.editedSteps={},this.informationResults=[],this.mandatorySteps={},this.pendingUpdates=[],this.selectionCost=0,this.workflow=a,this.stepSpecificServices={},this.profanityFilter=n,this.pollers=[],this.allScenes=[],this.layouts=i,this.product=d,this.previewService=A,this.modelContainer=m,this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},this.validationErrors={steps:new Map},this.confirmCallbacks=[],this.editedCallbacks=[],this.elementsCallbacks=[],this.informationResultCallbacks=[],this.initCallbacks=[],this.mandatoryCallbacks=[],this.makingAdjustmentsCallback=[],this.metadataCallbacks=[],this.selectionCallbacks=[],this.stepSpecificStorageCallbacks={},this.storageCallbacks=[],this.validationCallbacks=[],this.currentAdjustingStepId="",this.renderableContextService=u,this.isReloadedTransaction=p,this.workflow.steps.forEach(y=>{this.stepTags[y.stepName]=y.tags??[]}),C&&(this.workflowStatePromiseQueue.enabled=!1),this.initializationPromise=this.initializeDefaultWorkflowState(a),this.initializationPromise.then(()=>{this.initialized=!0}),this.initializationPromise.catch(y=>{throw console.error(y),this.initialized=!1,new Error("Workflow initialization failed due to an error. See console.")}),this.initializationPromise.finally(()=>this.getCommandContext().registerStateCallback(()=>{this.updateStateWithServer(),this.renderLayouts()}))}async updateRecipient(t,e,a,n,i,s,o,l,c){var d,A,u,h,g;if((d=this.transaction.recipient)!=null&&d.id)this.transaction.recipient={id:this.transaction.recipient.id,firstName:t||this.transaction.recipient.firstName,lastName:e||this.transaction.recipient.lastName,address:a||this.transaction.recipient.address,suburb:n||this.transaction.recipient.suburb,state:i||this.transaction.recipient.state,email:s||this.transaction.recipient.email,postalCode:o||this.transaction.recipient.postalCode,country:l||this.transaction.recipient.country,mobile:c||this.transaction.recipient.mobile},await this.graphQlClient().mutate({mutation:sl,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.transaction.recipient.id,firstName:t||this.transaction.recipient.firstName,lastName:e||this.transaction.recipient.lastName,address:a||this.transaction.recipient.address,suburb:n||this.transaction.recipient.suburb,state:i||this.transaction.recipient.state,email:s||this.transaction.recipient.email,postalCode:o||this.transaction.recipient.postalCode,country:l||this.transaction.recipient.country,mobile:c||this.transaction.recipient.mobile}});else{const m=await this.graphQlClient().mutate({mutation:il,errorPolicy:"all",fetchPolicy:"no-cache",variables:{firstName:t,lastName:e,address:a,suburb:n,state:i,email:s,postalCode:o,country:l,mobile:c}});this.transaction.recipient={id:(u=(A=m==null?void 0:m.data)==null?void 0:A.recipientCreate)==null?void 0:u.id,firstName:t,lastName:e,address:a,suburb:n,state:i,email:s,postalCode:o,country:l,mobile:c},await this.graphQlClient().mutate({mutation:ol,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.transaction.id,recipientId:(g=(h=m.data)==null?void 0:h.recipientCreate)==null?void 0:g.id},context:{transactionOwnerId:this.transaction.transactionOwnerId}})}}async initializeDefaultWorkflowState(t){const e=()=>{var d,A;const o=this.workflow.finalizeStepConfig;if(!o)return;const l=o.lookAtAnimation,c=o.modelAnimation;l&&((d=this.previewService)==null||d.executeCameraAnimation(l)),c&&((A=this.modelContainer)==null||A.executeAnimation(c))};this.reloadedState&&this.reloadedState.serializableWorkflow.steps.forEach(o=>{this.storage[o.stepName]=o.storage||{}}),this.allScenes=await ys(t);const n=xt(this.allScenes,this.stepSelections).map(o=>o.silentSteps).flat(),{stepElements:i,commands:s}=await this.stepElementsForIntroducedSilentSteps(n,!!this.reloadedState);this.commandContext.apply(new $(s),!0),this.stepElements={...this.stepElements,...i},await this.ensureStepsAreLoaded(),!this.isReloadedTransaction&&this.updateStateWithServer(),this.renderLayouts(),this.reloadedState&&e()}getWorkflowExperience(){return this.experience}getClient(){return this.client}setWorkflowStateSyncEnabled(t){this.workflowStatePromiseQueue.enabled=t}getProduct(){return this.product}getInitializationPromise(){return this.initializationPromise}isInitialized(){return this.initialized}addConfirmCallback(t){t(this.confirmedDesign),this.confirmCallbacks.push(t)}addEditedCallback(t){t(this.editedSteps),this.editedCallbacks.push(t)}addElementsCallback(t){t(this.stepElements),this.elementsCallbacks.push(t)}addInformationResultCallback(t){t(this.informationResults),this.informationResultCallbacks.push(t)}addInitCallback(t){t(this.stepInitialised),this.initCallbacks.push(t)}addMandatoryCallback(t){t(this.mandatorySteps),this.mandatoryCallbacks.push(t)}addMetadataCallback(t){t(this.stepMetadata),this.metadataCallbacks.push(t)}async addSelectionCallback(t){t({selectionCost:this.selectionCost,selections:this.stepSelections,traversableScenes:await this.traversableScenes()}),this.selectionCallbacks.push(t)}addStepSpecificStorageCallback(t,e){Object.keys(this.storage).includes(e)||(this.storage[e]={}),t(this.storage[e]),Object.keys(this.stepSpecificStorageCallbacks).includes(e)||(this.stepSpecificStorageCallbacks[e]=[]),this.stepSpecificStorageCallbacks[e].push(t)}addStorageCallback(t){t(this.storage),this.storageCallbacks.push(t)}addMakingAdjustmentsCallback(t){t(this.currentAdjustingStepId),this.makingAdjustmentsCallback.push(t)}addPoller(t){this.pollers.push(t)}addValidationCallback(t){this.validationCallbacks.push(t),t(this.validationErrors)}getLayouts(){return this.layouts}getAllLayoutData(){return this.commandContext.getAllLayouts().map(t=>t.layoutState)}getLayoutPreviewService(){return this.renderableContextService}getInformationResults(){return this.informationResults}getPreviewService(){return this.previewService}getProfanities(){return this.profanityFilter}getCommandContext(){return this.commandContext}getRegionElements(t){return this.stepElements[t]||[]}getStepSpecificServices(t){return this.stepSpecificServices[t]}getTransaction(){return this.transaction}getTransactionCustomer(){return this.ownerCustomer}setTransactionCustomer(t){this.ownerCustomer=t}setTransactionCustomerDetails(t){this.ownerCustomer={...this.ownerCustomer,emailAddress:t.email}}getModelContainer(){return this.modelContainer}setModelContainer(t){(!t||this.previewService&&this.previewService.getAllModels().includes(t))&&(this.modelContainer=t,t&&t.metadata&&t.metadata instanceof Map&&this.modelContainer.metadata.set("workflowManager",this))}setTransaction(t){this.transaction=t}getWorkflow(){return this.workflow}getCommandDispatcher(){return t=>this.commandContext.apply(t,!this.initialized)}getWorkflowSelections(){const t={};return this.workflow.steps.forEach(e=>{const a=this.stepSelections[e.stepName];a&&a.selectedVariants&&a.selectedVariants.length>0&&(t[e.stepName]={selections:a.selectedVariants})}),t}getStepSelections(){return this.stepSelections}markStepsAsInitialised(t){const e={...this.stepInitialised};t.forEach(a=>{e[a]=!0}),this.stepInitialised=e,this.onInitChange()}getUpdatesPending(){return this.pendingUpdates.length>0}markUpdateCompleted(t){this.pendingUpdates=this.pendingUpdates.filter(e=>e!==t)}markUpdatePending(){const t=N();return this.pendingUpdates=[...this.pendingUpdates,t],t}setEditedStatus(t,e){this.editedSteps={...this.editedSteps,[t]:e},this.onEditedChange()}setInformationResults(t){this.informationResults=[...t],this.onInformationResultChange()}setCurrentAdjustingStepId(t){this.currentAdjustingStepId=t,this.onMakingAdjustmentsChange()}setMandatoryFulfilled(t,e){this.mandatorySteps[t]!==e&&(this.mandatorySteps={...this.mandatorySteps,[t]:e},this.onMandatoryChange())}setStepError(t,e,a){let n=!1;if(!this.validationErrors.steps.has(t)&&a)n=!0,this.validationErrors.steps.set(t,new Map([[e,a]]));else if(this.validationErrors.steps.has(t)){const i=this.validationErrors.steps.get(t);a&&a!==i.get(e)?(n=!0,i.set(e,a)):a||(n=!0,i.delete(e),i.size===0&&this.validationErrors.steps.delete(t))}n&&this.onValidationChange()}getStepErrors(t){return this.validationErrors.steps.get(t)}getValidationErrors(){return this.validationErrors}toggleDesignConfirmed(){this.confirmedDesign=!this.confirmedDesign,this.onConfirmChange()}toggleMakingAdjustmentsCallback(t){t(this.mandatorySteps),this.mandatoryCallbacks.push(t)}async injectIntoPreviewService(t,e){if(this.modelContainer)throw new Error("You must eject from the preview service before injecting again.");if(this.previewService=t,!this.getProduct().modelUrl||!this.previewService)return;const a=t.loadModel({model:this.getProduct().modelUrl,contextService:this.getLayoutPreviewService()},{refocusCamera:e});this.setModelContainer(a),xt(this.allScenes,this.stepSelections).filter(s=>s).map(s=>s.renderableSteps).flat().filter(s=>s.type===P.Model||s.type===P.Material).forEach(s=>{var c,d,A;if(!((c=s.option)!=null&&c.id)){console.error(`Failed to read option id from step: ${s.stepName}`);return}const o=((d=this.stepSelections[s.stepName])==null?void 0:d.selectedVariants)||[];if(o.length===0)return;const l=o[0];if(s.type===P.Model){if(!this.modelContainer)throw new V("We should always have a model container when injecting a preview!");const u=(A=l.asset)==null?void 0:A.fileLink;if(!u){console.error(`Failed to read model url from variant: ${l.id} for step: ${s.stepName}`);return}const h=s.data;this.modelContainer.applyModelVariant(s.stepName,{model:u,contextService:this.getLayoutPreviewService()},h.replaceProductModel||!1)}else{const u=l.material;if(!u){console.error(`Failed to read material from variant: ${l.id} for step: ${s.stepName}`);return}s.data.targetMaterials.forEach(g=>{if(!this.modelContainer)throw new V("We should always have a model container when injecting a preview!");this.modelContainer.applyMaterialVariant(g,s.option.id,u)})}}),await a.getInitializationPromise(),this.renderLayouts()}ejectFromPreviewService(){if(this.modelContainer){if(!this.modelContainer.dispose)throw new Error("This feature is not supported in the current preview service.");this.modelContainer.dispose(),this.modelContainer=void 0}this.previewService=void 0}updateStorage(t,e){const a={...this.storage,[t]:{...this.storage[t],...e}};if(!wn(a,this.storage)){this.storage=a;const n=new nn(this.constructSerializableWorkflow());this.commandContext.apply(n,!0),this.onStepSpecificStorageChange(t),this.onStorageChange()}}constructSerializableWorkflow(){const t=[];return this.allScenes.forEach(e=>{e.renderableSteps.forEach(a=>{var i,s;const n={stepName:a.stepName};n.storage=this.storage[a.stepName],n.selectedVariants=(s=(i=this.stepSelections[a.stepName])==null?void 0:i.selectedVariants)==null?void 0:s.map(o=>({id:o.id,priceModifier:o.priceModifier})),t.push(n)})}),{steps:t}}updateStateWithServer(){if(this.readOnly)return;const t=this.serialize();this.workflowStatePromiseQueue.enqueue(new ln(async()=>{await new Promise(e=>{setTimeout(()=>{e()},1)}),await this.updateTransaction({variables:{id:this.transaction.id,workflowState:t}})}))}async updateStateWithServerImmediate(){if(this.readOnly)return;const t=this.serialize();return new ln(async()=>{await this.updateTransaction({variables:{id:this.transaction.id,workflowState:t}})}).execute()}serialize(){const t=this.getCommandContext().getState();if(!t)throw new V("Attempted to serialize state before it was initialized.");const e=Mt(t.transaction),a=this.dehydrateState(e);return JSON.stringify(a)}dehydrateState(t){var e;for(const a of Object.values(t.layouts).map(n=>n.elements).flat())a.type==="illustration"&&(delete a.cachedObjectURL,a.src&&delete a.svg),a.type==="frame"&&((e=a.pattern)==null||delete e.svg);return this.deleteFieldNameFromObjectRecursive(t,"__typename"),t}deleteFieldNameFromObjectRecursive(t,e){if(!(typeof t!="object"||t===null))for(const a in t)a===e?delete t[a]:this.deleteFieldNameFromObjectRecursive(t[a],e)}async outstandingRequestsPromise(){return this.workflowStatePromiseQueue.finalize()}updateMetadata(t,e){this.stepMetadata={...this.stepMetadata,[t]:{...this.stepMetadata[t],...e}},this.onMetadataChange()}removeElements(t){const e=(a,n)=>Object.keys(a).reduce((i,s)=>{const o=[...a[s]||[]];return n.forEach(l=>{const c=o.findIndex(d=>d.id===l.id);c>-1&&o.splice(c,1)}),i[s]=o,i},{});this.stepElements=e(this.stepElements,t)}getInvalidCanvasRegions(){return this.workflow.steps.reduce((t,e)=>(Et(e,this.stepSelections)||this.stepElements[e.stepName]&&this.stepElements[e.stepName].forEach(a=>t.push(a)),t),[])}getInvalidModelVariants(){return this.workflow.steps.reduce((t,e)=>(e.type===P.Model&&!Et(e,this.stepSelections)&&t.push(e.stepName),t),[])}async stepElementsForIntroducedSilentSteps(t,e){const a=this.product;if(!a)return Promise.resolve({stepElements:{},commands:[]});const n=async(c,d,A)=>{if(c.type===P.SilentIllustration){const u=await new rn(c,d).trigger();return{step:c,results:u}}else if(c.type===P.ProductOverlay){const u=await new rn(c,d,A).trigger();return{step:c,results:u}}return Promise.reject("Unknown silent step. This is a bug")},i=t.filter(c=>!this.stepInitialised[c.stepName]),s={stepElements:{},commands:[]},o=[];for(const c of i)this.markStepsAsInitialised([c.stepName]),e||o.push(n(c,this.layouts,a));const l=await Promise.all(o);for(const c of l)s.stepElements[c.step.stepName]=c.results.map(d=>d.regionElement),s.commands=[...s.commands,...c.results.map(d=>d.command)];return s}getStepStorage(t){return this.storage[t]}getMetadata(t){return this.stepMetadata[t]}getWorkflowMetadata(){return this.stepMetadata}getStepTags(t){return this.stepTags[t]||[]}getSerializedStep(t,e){return e.find(a=>a.stepName===t)}async updateTransactionShareActions(){const t=await this.client.getShareActionsForTransaction(this.transaction.id);this.transaction.transactionShareActions=t}async updateTransactionStakeholders(){var e;const t=await b.getShadowGraphqlClient().query({query:ss,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.transaction.id}});!((e=t==null?void 0:t.data)!=null&&e.transactions)||t.data.transactions.length!==1?(this.transaction.currentStakeholder=void 0,this.transaction.stakeholders=void 0):(this.transaction.stakeholders=t.data.transactions[0].stakeholders,this.transaction.currentStakeholder=t.data.transactions[0].currentStakeholder)}async approveTransaction(t){await b.getShadowGraphqlClient().mutate({mutation:nl,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.getTransaction().id,note:t}})}async rejectTransaction(t){await b.getShadowGraphqlClient().mutate({mutation:rl,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.getTransaction().id,note:t}})}async reset(){this.commandContext.getAllLayouts().forEach(e=>e.layoutState.elements.forEach(a=>{this.getCommandDispatcher()(new Ct(a.id))})),this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},await this.ensureStepsAreLoaded()}async setSelectionsAndElements(t,e,a,n){var S;const i=this.stepSelections;this.stepSelections={...this.stepSelections,[t]:{selectedVariants:e}},this.selectionCost=Object.values(this.stepSelections).reduce((E,B)=>E+B.selectedVariants.map(I=>I.priceModifier||0).reduce((I,x)=>I+x,0),0),this.workflow.steps.forEach(E=>{Et(E,this.stepSelections)||(this.stepInitialised[E.stepName]=!1,delete this.stepMetadata[E.stepName],delete this.stepSelections[E.stepName],delete this.storage[E.stepName])});const s=this.allScenes,o=xt(s,i),l=xt(s,this.stepSelections),c=o.map(E=>E.silentSteps).flat(),A=l.map(E=>E.silentSteps).flat().filter(E=>!c.some(B=>B.stepName===E.stepName));c.forEach(E=>{Et(E,this.stepSelections)||(this.stepInitialised[E.stepName]=!1)});const u=this.getInvalidCanvasRegions(),{stepElements:h,commands:g}=await this.stepElementsForIntroducedSilentSteps(A,!1);this.stepElements={...this.stepElements,...h,[t]:a},this.removeElements(u);const m=this.workflow.steps.find(E=>E.stepName===t);if((m==null?void 0:m.type)===P.Frame){const E=(S=this.getWorkflowExperience().getStepById(m.stepName))==null?void 0:S.frameService;E==null||E.setTargetElements(a.map(B=>B.id))}const p=u.map(E=>new Ct(E.id)),f=new nn(this.constructSerializableWorkflow()),C=[...g,...p,f];C.length>0&&this.commandContext.apply(new $(C),!0),await this.ensureStepsAreLoaded(),this.onElementsChange();const y=this.getInvalidModelVariants(),v=this.modelContainer;if(v){const E=y.map(B=>v.applyModelVariant(B,{contextService:this.getLayoutPreviewService()},!1));await Promise.all(E)}await this.onSelectionChange(),n&&await n()}async ensureStepsAreLoaded(){const e=xt(this.allScenes,this.stepSelections).map(l=>l.renderableSteps),a=[],n=e.flat();for(const l of n)if(!this.stepInitialised[l.stepName])switch(this.stepInitialised[l.stepName]=!0,l.type){case P.DigitalContent:a.push(Ma.init(l,this,this.reloadedState));break;case P.Frame:a.push(ut.init(l,this,this.reloadedState));break;case P.Illustration:a.push(Yt.init(l,this,this.reloadedState));break;case P.Material:a.push(Ta.init(l,this,this.reloadedState));break;case P.Model:a.push(Qa.init(l,this,this.reloadedState));break;case P.Module:this.stepSpecificServices[l.stepName]={module:await Ar(l.data.module)},a.push(Na.init(l,this,this.reloadedState));break;case P.Picture:a.push(Ra.init(l,this,this.reloadedState));break;case P.Question:a.push(Oa.init(l,this,this.reloadedState));break;case P.Shape:a.push(kt.init(l,this,this.reloadedState));break;case P.Text:a.push(W.init(l,this,this.reloadedState));break}const i=(await Promise.allSettled(a)).map(l=>{if(l.status==="rejected")throw new Error(`Step initialization failed: ${l.reason}`);return l.value}),s=i.filter(l=>!!l&&!!l.command).map(l=>l.command),o=i.filter(l=>!!l&&!!l.followup).map(l=>l.followup);s&&s.length>0&&this.commandContext.apply(new $(s),!0);for(const l of o)await l();o.length>0&&await this.ensureStepsAreLoaded(),this.onInitChange()}onConfirmChange(){this.confirmCallbacks.forEach(t=>t(this.confirmedDesign))}onEditedChange(){this.editedCallbacks.forEach(t=>t(this.editedSteps))}onElementsChange(){this.elementsCallbacks.forEach(t=>t(this.stepElements))}onInformationResultChange(){this.informationResultCallbacks.forEach(t=>t(this.informationResults))}onInitChange(){this.initCallbacks.forEach(t=>t(this.stepInitialised))}onMakingAdjustmentsChange(){this.makingAdjustmentsCallback.forEach(t=>{t(this.currentAdjustingStepId)})}onMandatoryChange(){this.mandatoryCallbacks.forEach(t=>t(this.mandatorySteps))}onMetadataChange(){this.metadataCallbacks.forEach(t=>{t(this.stepMetadata)})}async onSelectionChange(){const t=await this.traversableScenes();for(const e of this.selectionCallbacks)e({selectionCost:this.selectionCost,selections:this.stepSelections,traversableScenes:t})}onStepSpecificStorageChange(t){Object.keys(this.stepSpecificStorageCallbacks).includes(t)||(this.stepSpecificStorageCallbacks[t]=[]),this.stepSpecificStorageCallbacks[t].forEach(e=>e(this.storage[t]))}onStorageChange(){this.storageCallbacks.forEach(t=>t(this.storage))}onValidationChange(){this.validationCallbacks.forEach(t=>t(this.validationErrors))}traversableScenes(){return Es(this.allScenes,this.stepSelections,this.singleVariantsRenderable)}}class rt{constructor(t){this.variantData=t}getType(){var t;return(t=this.variantData.asset)==null?void 0:t.type}getId(){return this.variantData.id}getName(){return this.variantData.name}getPriceFormatted(t,e){return this.variantData.priceModifier.toLocaleString(t||"en-US",{style:"currency",currency:"USD",...e})}getPrice(){return this.variantData.priceModifier}getAsset(){var t,e,a;return(a=(e=(t=this.variantData.asset)==null?void 0:t.versions)==null?void 0:e.find(n=>n.name==="cdn"))==null?void 0:a.link}getAssetResource(){return this.variantData.asset}getThumbnail(){var a,n,i,s;const t=(i=(n=(a=this.variantData.thumbnail)==null?void 0:a.versions)==null?void 0:n.find(o=>o.name==="thumbnail"))==null?void 0:i.link,e=(s=this.variantData.thumbnail)==null?void 0:s.fileLink;return t||e}getColor(){return this.variantData.color}isDefault(){return!!this.variantData.default}getResource(){return this.variantData}isEnabled(){return this.variantData.enabled}}const ur=class ha{constructor(t,e,a){this.manager=t,this.step=e,this.tags=a}setUpdateState(t){ha.updateState.set(`${this.step.stepName}-${this.manager.getTransaction().id}`,t)}getUpdateState(){return!!ha.updateState.get(`${this.step.stepName}-${this.manager.getTransaction().id}`)}getCurrentVariant(){const e=this.manager.getWorkflowSelections()[this.step.stepName],a=e==null?void 0:e.selections[0];if(a)return new rt(a)}getAvailableVariants(){var e,a;return(((a=(e=this.step.option)==null?void 0:e.variants)==null?void 0:a.filter(n=>n.enabled))||[]).map(n=>new rt(n))}getAllVariants(){var e;return(((e=this.step.option)==null?void 0:e.variants)||[]).map(a=>new rt(a))}getId(){return this.step.stepName}getName(){return this.step.stepTitle}getHelpText(){return this.step.helpText}getType(){return this.step.type}getRaw(){return this.step}getTags(){return this.tags}hasTag(t){return this.tags.includes(t)||!1}getMandatory(){return this.step.mandatory||!1}getOverrideGlobalPropertyConfiguration(t){var a;return(((a=this.manager.getStepStorage(this.step.stepName))==null?void 0:a.overrideGlobalConfigurations)??{})[t.toString()]??!1}setOverrideGlobalPropertyConfiguration(t,e){var n;const a=((n=this.manager.getStepStorage(this.step.stepName))==null?void 0:n.overrideGlobalConfigurations)??{};this.manager.updateStorage(this.step.stepName,{overrideGlobalConfigurations:{...a,[t.toString()]:e}})}getGlobalPropertyAspects(t){var e;return((e=this.step.globalPropertyAspectConfigurations)==null?void 0:e.filter(a=>a.globalPropertyConfigurationId===t&&a.aspectName).map(a=>a.aspectName))??[]}executeAnimations(t){const e=this.manager.getPreviewService(),a=this.manager.getModelContainer(),n=this.step.data.modelAnimation,i=this.step.data.lookAtAnimation;e?i&&e.executeCameraAnimation(i):console.warn("No preview service available, cannot execute camera animations."),a?n&&a.executeAnimation(n,t):console.warn("No model container available, cannot execute model animations.")}};ur.updateState=new Map;let nt=ur;class hr extends nt{constructor(t,e,a){super(t,e,a)}async selectVariant(t){if(!this.getUpdateState()&&this.getCurrentVariant()!==t)return Yt.selectVariant(this.step,t.getResource(),this.manager.getRegionElements(this.step.stepName)||[],e=>this.setUpdateState(e),this.manager)}getColors(){var o;const t=this.manager.getRegionElements(this.step.stepName)||[];if(t.length===0)return;const a=L(t[0].id,this.manager.getAllLayoutData()).colors,n=(o=this.getCurrentVariant())==null?void 0:o.getAssetResource(),i=n==null?void 0:n.assetConfiguration,s=(i==null?void 0:i.defaultColorVariants)||[];if(s.length!==0){const l={};return s.forEach(c=>{var A;const d=i.channelNumbers.find(u=>u.number===c.channelNumber);if(d){const u=d.id.replace(/\W/g,"");l[c.channelNumber]={browserValue:((A=a[u])==null?void 0:A.browserValue)||""}}}),l}try{return a}catch(l){console.error(l)}}setColor(t,e,a){var l;const n=new Map,i=(l=this.getCurrentVariant())==null?void 0:l.getAssetResource(),s=i==null?void 0:i.assetConfiguration;return((s==null?void 0:s.defaultColorVariants)||[]).length!==0?s.channelNumbers.forEach(c=>{if(c.number.toString()===t){const d=c.id.replace(/\W/g,"");a?n.set(d,{browserValue:e,pmsValue:a}):n.set(d,e)}}):a?n.set(t,{browserValue:e,pmsValue:a}):n.set(t,e),Yt.changeColors(this.step,this.manager.getRegionElements(this.step.stepName),this.manager,()=>this.manager.getCommandContext().getAllLayouts(),n)}async getColorOption(){return this.step.data.colorOption}getAvailableColors(){return this.step.data.colorPickerEnabled?Yt.availableColors(this.step,this.manager):Promise.resolve([])}isColorPickerEnabled(){return this.step.data.colorPickerEnabled??!1}isPMSPickerEnabled(){return this.step.data.pmsPickerEnabled??!1}}class gr extends nt{constructor(t,e,a){super(t,e,a)}selectVariant(t){return Ta.selectVariant(this.step,t.getResource(),this.manager,e=>this.setUpdateState(e))}}class mr extends nt{constructor(t,e,a){super(t,e,a)}selectVariant(t){return Qa.selectVariant(this.step,t.getResource(),this.manager,e=>this.setUpdateState(e))}}class pr extends nt{constructor(t,e,a){super(t,e,a)}selectVariant(t){return Ra.selectVariant(this.step,t.getResource(),this.manager,e=>this.setUpdateState(e))}}class fr extends nt{constructor(t,e,a){super(t,e,a)}async selectVariant(t){if(!t.getId())throw new Error("Unable to select variant with a null ID");await Oa.selectVariant(this.step,t.getId(),this.manager)}getDisplayType(){var t;return this.step.data.displayType||((t=this.step.option)==null?void 0:t.displayType)}}class Cr extends nt{constructor(t,e,a){super(t,e,a)}selectVariant(t){const e=t.getResource();return kt.selectVariant(this.step,{fill:e.color,stroke:e.color,variant:e},this.manager.getRegionElements(this.step.stepName)||[],this.manager)}setColor(t){return kt.selectVariant(this.step,t,this.manager.getRegionElements(this.step.stepName)||[],this.manager)}getColors(){return kt.availableColours(this.step)}setCustomColor(t){var e,a;return((e=this.getCurrentVariant())==null?void 0:e.getColor())!=="#custom"&&console.warn(`setting custom color for step ${this.step.stepName} but color is ${(a=this.getCurrentVariant())==null?void 0:a.getColor()}`),kt.setCustomColor(t,this.step,this.manager)}getCustomColor(){var e,a,n;((e=this.getCurrentVariant())==null?void 0:e.getColor())!=="#custom"&&console.warn(`setting custom color for step ${this.step.stepName} but color is ${(a=this.getCurrentVariant())==null?void 0:a.getColor()}`);const t=(n=this.manager.getStepStorage(this.step.stepName))==null?void 0:n.colour;if(!t)throw new Error(`Color not available on step ${this.step.stepName}. Set a default on the workflow to fix this.`);return t}}class wr extends nt{constructor(t,e,a){super(t,e,a)}async selectVariant(t){W.selectVariant(this.step,t.getResource(),this.manager,e=>{if(e)this.manager.setInformationResults([...this.manager.getInformationResults(),{message:"An issue has occurred with text",messageType:ue.Error,stepID:this.step.stepName}]);else{const a=this.manager.getInformationResults().filter(n=>n.stepID!==this.step.stepName);this.manager.setInformationResults(a)}},()=>{})}getAvailableFillColors(){return this.step.data.colorPickerEnabled?W.availableFillColors(this.step):[]}async setFillColor(t){const e=this.manager.getRegionElements(this.step.stepName);await W.changeFillColor(this.step,t,e,this.manager)}getFillColor(){var t;return((t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.color)||"#000000"}getAvailableFillImages(){return W.availableFillImages(this.step)}async setFillImage(t){const e=this.manager.getRegionElements(this.step.stepName);await W.changeFillImage(this.step,t,e,this.manager)}getFillImage(){var t;return(t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.fillImage}getAlignment(){const t=W.findLayoutElements(this.manager,this.step);return t==null?void 0:t[0].align}setAlignment(t){const e=this.manager.getRegionElements(this.step.stepName);W.changeAlignment(this.step,t,e,this.manager)}setFullTextCustomization(t){var s;const e=((s=this.manager.getStepStorage(this.step.stepName))==null?void 0:s.inputText)||"",a=this.step.data.replaceableText!==void 0?this.step.data.replaceableText.replace("{{}}",e):e,n=t?a:this.step.data.defaultText;return this.manager.updateStorage(this.step.stepName,{customiseAllText:t,text:n,defaultCleared:!1}),this.setText(n)}setText(t){var d;const e={input:t,helperData:{}},a=W.findLayoutElements(this.manager,this.step),n=W.filterUnsupportedCharacters(t,(d=a[0])==null?void 0:d.fontData),i=!!this.step.data&&!!this.step.data.maxLength&&n.length>this.step.data.maxLength;i||(e.input=n);const s=a.length<=0,o=s?{inputText:n,text:n}:{inputText:n};this.manager.updateStorage(this.step.stepName,o);const l=this.manager.getStepStorage(this.step.stepName),c=W.getProcessedInput(n,this.step.data,!!l.customiseAllText);if(s)i||this.manager.updateMetadata(this.step.stepName,{text:c});else{const{command:A,errorData:u,helperData:h}=W.updateInputText(n,a,this.step,this.manager);A&&this.manager.getCommandDispatcher()(A),e.helperData=h,e.errorData=u,!i&&!u&&this.manager.updateMetadata(this.step.stepName,{text:c})}return e}getText(){var a;const t=this.step.data.defaultText,e=this.manager.getStepStorage(this.step.stepName);return t&&(e==null?void 0:e.defaultCleared)!==void 0&&!(e!=null&&e.defaultCleared)?t:((a=this.manager.getStepStorage(this.step.stepName))==null?void 0:a.text)||""}isReplaceable(){return this.step.data.userCanReplaceText}newLinesSupported(){return this.step.data.allowNewlines||!1}clearDefaultTextIfNecessary(){const t=this.manager.getStepStorage(this.step.stepName);if(!(t!=null&&t.defaultCleared)&&this.step.data.deleteDefaultOnFocus){const e=this.setText("");this.manager.updateStorage(this.step.stepName,{defaultCleared:!0,inputText:""});const a=W.findLayoutElements(this.manager,this.step);return W.updateInputText("",a,this.step,this.manager),e}}hasColorPicker(){return this.step.data.colorPickerEnabled}getRegions(){return this.step.data.regions}getCharacterLimit(){return this.step.data.maxLength}getCharactersRemaining(){const t=this.step.data.maxLength;if(t===void 0)return;const e=this.getText();return t-e.length}setCustomColor(t){throw new Error("Custom color support is not yet available on text. Check back soon.")}getCustomColor(){throw new Error("Custom color support is not yet available on text. Check back soon.")}getAvailableStrokeColors(){return this.step.data.strokeEnabled?W.availableStrokeColors(this.step):[]}getStrokeColor(){var t,e;return((e=(t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.strokeColor)==null?void 0:e.browserValue)||"#000000"}async setStrokeColor(t){const e=this.manager.getRegionElements(this.step.stepName);await W.changeStrokeColor(this.step,t,e,this.manager)}}class yr extends nt{constructor(t,e,a){super(t,e,a)}async selectVariant(){}getContent(){return this.step.data.content}}class Sr extends nt{constructor(t,e,a){super(t,e,a)}async selectVariant(){}getPreviewURL(){var t;return((t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.videoUrl)||""}async selectVideo(t){return Ma.regenerateQRCode(this.manager.getRegionElements(this.step.stepName),t.key,this.manager,this.step)}}class vr extends nt{constructor(t,e,a){super(t,e,a)}async selectVariant(){console.info("Text Modules don't support variants.")}getCharactersRemaining(){const t=this.step.data.maxLength;if(t===void 0)return;const e=this.getText();return t-e.length}getCharacterLimit(){return this.step.data.maxLength}getText(){var t;return((t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.text)||""}setText(t){Na.changeText(this.step,t,this.manager,e=>{if(e){const a=[...this.manager.getInformationResults(),{message:e,messageType:ue.Error,stepID:this.step.stepName}];this.manager.setInformationResults(a)}else{const a=this.manager.getInformationResults().filter(n=>n.stepID!==this.step.stepName);this.manager.setInformationResults(a)}})}}class pe{static get(t,e){switch(e.type){case P.DigitalContent:return new Sr(t,e,t.getStepTags(e.stepName));case P.Information:return new yr(t,e,t.getStepTags(e.stepName));case P.Question:return new fr(t,e,t.getStepTags(e.stepName));case P.Text:return new wr(t,e,t.getStepTags(e.stepName));case P.Illustration:return new hr(t,e,t.getStepTags(e.stepName));case P.Picture:return new pr(t,e,t.getStepTags(e.stepName));case P.Shape:return new Cr(t,e,t.getStepTags(e.stepName));case P.Material:return new gr(t,e,t.getStepTags(e.stepName));case P.Model:return new mr(t,e,t.getStepTags(e.stepName));case P.Frame:return new Gr(t,e,t.getStepTags(e.stepName));case P.Module:return new vr(t,e,t.getStepTags(e.stepName));default:throw new V(`Step type ${e.type} not yet supported in Core SDK`)}}}const Er=w.gql`
|
|
2091
|
+
`;var ue=(r=>(r.Error="Error",r.Warning="Warning",r.Info="Info",r))(ue||{});const ll=1e3;class ln extends Ba{constructor(t){super(),this.createdAt=new Date,this.update=t}async execute(){await this.update(),await new Promise(t=>{window.setTimeout(()=>{t()},ll)})}}class cl{constructor(t,e,a,n,i,s,o,l,c,d,A,u,h,g=!1,m,p=!1,f=!1,C=!1){this.workflowStatePromiseQueue=new ba(1),this.initialized=!1,this.readOnly=!1,this.isReloadedTransaction=!1,this.singleVariantsRenderable=!1,this.stepTags={},this.renderLayouts=()=>{var S;if(!this.previewService)return;const y=this.getCommandContext().getAllLayouts(),v=(S=this.getLayoutPreviewService())==null?void 0:S.getAll();if(v)for(const[,E]of v)E.render(y)},this.experience=t,this.client=e,this.updateTransaction=o,this.graphQlClient=l,this.commandContext=s,this.reloadedState=h,this.transaction=c,this.readOnly=g,this.singleVariantsRenderable=f,this.confirmedDesign=!1,this.editedSteps={},this.informationResults=[],this.mandatorySteps={},this.pendingUpdates=[],this.selectionCost=0,this.workflow=a,this.stepSpecificServices={},this.profanityFilter=n,this.pollers=[],this.allScenes=[],this.layouts=i,this.product=d,this.previewService=A,this.modelContainer=m,this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},this.validationErrors={steps:new Map},this.confirmCallbacks=[],this.editedCallbacks=[],this.elementsCallbacks=[],this.informationResultCallbacks=[],this.initCallbacks=[],this.mandatoryCallbacks=[],this.makingAdjustmentsCallback=[],this.metadataCallbacks=[],this.selectionCallbacks=[],this.stepSpecificStorageCallbacks={},this.storageCallbacks=[],this.validationCallbacks=[],this.currentAdjustingStepId="",this.renderableContextService=u,this.isReloadedTransaction=p,this.workflow.steps.forEach(y=>{this.stepTags[y.stepName]=y.tags??[]}),C&&(this.workflowStatePromiseQueue.enabled=!1),this.initializationPromise=this.initializeDefaultWorkflowState(a),this.initializationPromise.then(()=>{this.initialized=!0}),this.initializationPromise.catch(y=>{throw console.error(y),this.initialized=!1,new Error("Workflow initialization failed due to an error. See console.")}),this.initializationPromise.finally(()=>this.getCommandContext().registerStateCallback(()=>{this.updateStateWithServer(),this.renderLayouts()}))}async updateRecipient(t,e,a,n,i,s,o,l,c,d){var A,u,h,g,m;if((A=this.transaction.recipient)!=null&&A.id)this.transaction.recipient={id:this.transaction.recipient.id,firstName:t||this.transaction.recipient.firstName,lastName:e||this.transaction.recipient.lastName,address:a||this.transaction.recipient.address,suburb:n||this.transaction.recipient.suburb,state:i||this.transaction.recipient.state,email:s||this.transaction.recipient.email,postalCode:o||this.transaction.recipient.postalCode,country:l||this.transaction.recipient.country,mobile:c||this.transaction.recipient.mobile,company:d||this.transaction.recipient.company},await this.graphQlClient().mutate({mutation:sl,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.transaction.recipient.id,firstName:t||this.transaction.recipient.firstName,lastName:e||this.transaction.recipient.lastName,address:a||this.transaction.recipient.address,suburb:n||this.transaction.recipient.suburb,state:i||this.transaction.recipient.state,email:s||this.transaction.recipient.email,postalCode:o||this.transaction.recipient.postalCode,country:l||this.transaction.recipient.country,mobile:c||this.transaction.recipient.mobile,company:d||this.transaction.recipient.company}});else{const p=await this.graphQlClient().mutate({mutation:il,errorPolicy:"all",fetchPolicy:"no-cache",variables:{firstName:t,lastName:e,address:a,suburb:n,state:i,email:s,postalCode:o,country:l,mobile:c,company:d}});this.transaction.recipient={id:(h=(u=p==null?void 0:p.data)==null?void 0:u.recipientCreate)==null?void 0:h.id,firstName:t,lastName:e,address:a,suburb:n,state:i,email:s,postalCode:o,country:l,mobile:c,company:d},await this.graphQlClient().mutate({mutation:ol,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.transaction.id,recipientId:(m=(g=p.data)==null?void 0:g.recipientCreate)==null?void 0:m.id},context:{transactionOwnerId:this.transaction.transactionOwnerId}})}}async initializeDefaultWorkflowState(t){const e=()=>{var d,A;const o=this.workflow.finalizeStepConfig;if(!o)return;const l=o.lookAtAnimation,c=o.modelAnimation;l&&((d=this.previewService)==null||d.executeCameraAnimation(l)),c&&((A=this.modelContainer)==null||A.executeAnimation(c))};this.reloadedState&&this.reloadedState.serializableWorkflow.steps.forEach(o=>{this.storage[o.stepName]=o.storage||{}}),this.allScenes=await ys(t);const n=xt(this.allScenes,this.stepSelections).map(o=>o.silentSteps).flat(),{stepElements:i,commands:s}=await this.stepElementsForIntroducedSilentSteps(n,!!this.reloadedState);this.commandContext.apply(new $(s),!0),this.stepElements={...this.stepElements,...i},await this.ensureStepsAreLoaded(),!this.isReloadedTransaction&&this.updateStateWithServer(),this.renderLayouts(),this.reloadedState&&e()}getWorkflowExperience(){return this.experience}getClient(){return this.client}setWorkflowStateSyncEnabled(t){this.workflowStatePromiseQueue.enabled=t}getProduct(){return this.product}getInitializationPromise(){return this.initializationPromise}isInitialized(){return this.initialized}addConfirmCallback(t){t(this.confirmedDesign),this.confirmCallbacks.push(t)}addEditedCallback(t){t(this.editedSteps),this.editedCallbacks.push(t)}addElementsCallback(t){t(this.stepElements),this.elementsCallbacks.push(t)}addInformationResultCallback(t){t(this.informationResults),this.informationResultCallbacks.push(t)}addInitCallback(t){t(this.stepInitialised),this.initCallbacks.push(t)}addMandatoryCallback(t){t(this.mandatorySteps),this.mandatoryCallbacks.push(t)}addMetadataCallback(t){t(this.stepMetadata),this.metadataCallbacks.push(t)}async addSelectionCallback(t){t({selectionCost:this.selectionCost,selections:this.stepSelections,traversableScenes:await this.traversableScenes()}),this.selectionCallbacks.push(t)}addStepSpecificStorageCallback(t,e){Object.keys(this.storage).includes(e)||(this.storage[e]={}),t(this.storage[e]),Object.keys(this.stepSpecificStorageCallbacks).includes(e)||(this.stepSpecificStorageCallbacks[e]=[]),this.stepSpecificStorageCallbacks[e].push(t)}addStorageCallback(t){t(this.storage),this.storageCallbacks.push(t)}addMakingAdjustmentsCallback(t){t(this.currentAdjustingStepId),this.makingAdjustmentsCallback.push(t)}addPoller(t){this.pollers.push(t)}addValidationCallback(t){this.validationCallbacks.push(t),t(this.validationErrors)}getLayouts(){return this.layouts}getAllLayoutData(){return this.commandContext.getAllLayouts().map(t=>t.layoutState)}getLayoutPreviewService(){return this.renderableContextService}getInformationResults(){return this.informationResults}getPreviewService(){return this.previewService}getProfanities(){return this.profanityFilter}getCommandContext(){return this.commandContext}getRegionElements(t){return this.stepElements[t]||[]}getStepSpecificServices(t){return this.stepSpecificServices[t]}getTransaction(){return this.transaction}getTransactionCustomer(){return this.ownerCustomer}setTransactionCustomer(t){this.ownerCustomer=t}setTransactionCustomerDetails(t){this.ownerCustomer={...this.ownerCustomer,emailAddress:t.email}}getModelContainer(){return this.modelContainer}setModelContainer(t){(!t||this.previewService&&this.previewService.getAllModels().includes(t))&&(this.modelContainer=t,t&&t.metadata&&t.metadata instanceof Map&&this.modelContainer.metadata.set("workflowManager",this))}setTransaction(t){this.transaction=t}getWorkflow(){return this.workflow}getCommandDispatcher(){return t=>this.commandContext.apply(t,!this.initialized)}getWorkflowSelections(){const t={};return this.workflow.steps.forEach(e=>{const a=this.stepSelections[e.stepName];a&&a.selectedVariants&&a.selectedVariants.length>0&&(t[e.stepName]={selections:a.selectedVariants})}),t}getStepSelections(){return this.stepSelections}markStepsAsInitialised(t){const e={...this.stepInitialised};t.forEach(a=>{e[a]=!0}),this.stepInitialised=e,this.onInitChange()}getUpdatesPending(){return this.pendingUpdates.length>0}markUpdateCompleted(t){this.pendingUpdates=this.pendingUpdates.filter(e=>e!==t)}markUpdatePending(){const t=N();return this.pendingUpdates=[...this.pendingUpdates,t],t}setEditedStatus(t,e){this.editedSteps={...this.editedSteps,[t]:e},this.onEditedChange()}setInformationResults(t){this.informationResults=[...t],this.onInformationResultChange()}setCurrentAdjustingStepId(t){this.currentAdjustingStepId=t,this.onMakingAdjustmentsChange()}setMandatoryFulfilled(t,e){this.mandatorySteps[t]!==e&&(this.mandatorySteps={...this.mandatorySteps,[t]:e},this.onMandatoryChange())}setStepError(t,e,a){let n=!1;if(!this.validationErrors.steps.has(t)&&a)n=!0,this.validationErrors.steps.set(t,new Map([[e,a]]));else if(this.validationErrors.steps.has(t)){const i=this.validationErrors.steps.get(t);a&&a!==i.get(e)?(n=!0,i.set(e,a)):a||(n=!0,i.delete(e),i.size===0&&this.validationErrors.steps.delete(t))}n&&this.onValidationChange()}getStepErrors(t){return this.validationErrors.steps.get(t)}getValidationErrors(){return this.validationErrors}toggleDesignConfirmed(){this.confirmedDesign=!this.confirmedDesign,this.onConfirmChange()}toggleMakingAdjustmentsCallback(t){t(this.mandatorySteps),this.mandatoryCallbacks.push(t)}async injectIntoPreviewService(t,e){if(this.modelContainer)throw new Error("You must eject from the preview service before injecting again.");if(this.previewService=t,!this.getProduct().modelUrl||!this.previewService)return;const a=t.loadModel({model:this.getProduct().modelUrl,contextService:this.getLayoutPreviewService()},{refocusCamera:e});this.setModelContainer(a),xt(this.allScenes,this.stepSelections).filter(s=>s).map(s=>s.renderableSteps).flat().filter(s=>s.type===P.Model||s.type===P.Material).forEach(s=>{var c,d,A;if(!((c=s.option)!=null&&c.id)){console.error(`Failed to read option id from step: ${s.stepName}`);return}const o=((d=this.stepSelections[s.stepName])==null?void 0:d.selectedVariants)||[];if(o.length===0)return;const l=o[0];if(s.type===P.Model){if(!this.modelContainer)throw new V("We should always have a model container when injecting a preview!");const u=(A=l.asset)==null?void 0:A.fileLink;if(!u){console.error(`Failed to read model url from variant: ${l.id} for step: ${s.stepName}`);return}const h=s.data;this.modelContainer.applyModelVariant(s.stepName,{model:u,contextService:this.getLayoutPreviewService()},h.replaceProductModel||!1)}else{const u=l.material;if(!u){console.error(`Failed to read material from variant: ${l.id} for step: ${s.stepName}`);return}s.data.targetMaterials.forEach(g=>{if(!this.modelContainer)throw new V("We should always have a model container when injecting a preview!");this.modelContainer.applyMaterialVariant(g,s.option.id,u)})}}),await a.getInitializationPromise(),this.renderLayouts()}ejectFromPreviewService(){if(this.modelContainer){if(!this.modelContainer.dispose)throw new Error("This feature is not supported in the current preview service.");this.modelContainer.dispose(),this.modelContainer=void 0}this.previewService=void 0}updateStorage(t,e){const a={...this.storage,[t]:{...this.storage[t],...e}};if(!wn(a,this.storage)){this.storage=a;const n=new nn(this.constructSerializableWorkflow());this.commandContext.apply(n,!0),this.onStepSpecificStorageChange(t),this.onStorageChange()}}constructSerializableWorkflow(){const t=[];return this.allScenes.forEach(e=>{e.renderableSteps.forEach(a=>{var i,s;const n={stepName:a.stepName};n.storage=this.storage[a.stepName],n.selectedVariants=(s=(i=this.stepSelections[a.stepName])==null?void 0:i.selectedVariants)==null?void 0:s.map(o=>({id:o.id,priceModifier:o.priceModifier})),t.push(n)})}),{steps:t}}updateStateWithServer(){if(this.readOnly)return;const t=this.serialize();this.workflowStatePromiseQueue.enqueue(new ln(async()=>{await new Promise(e=>{setTimeout(()=>{e()},1)}),await this.updateTransaction({variables:{id:this.transaction.id,workflowState:t}})}))}async updateStateWithServerImmediate(){if(this.readOnly)return;const t=this.serialize();return new ln(async()=>{await this.updateTransaction({variables:{id:this.transaction.id,workflowState:t}})}).execute()}serialize(){const t=this.getCommandContext().getState();if(!t)throw new V("Attempted to serialize state before it was initialized.");const e=Mt(t.transaction),a=this.dehydrateState(e);return JSON.stringify(a)}dehydrateState(t){var e;for(const a of Object.values(t.layouts).map(n=>n.elements).flat())a.type==="illustration"&&(delete a.cachedObjectURL,a.src&&delete a.svg),a.type==="frame"&&((e=a.pattern)==null||delete e.svg);return this.deleteFieldNameFromObjectRecursive(t,"__typename"),t}deleteFieldNameFromObjectRecursive(t,e){if(!(typeof t!="object"||t===null))for(const a in t)a===e?delete t[a]:this.deleteFieldNameFromObjectRecursive(t[a],e)}async outstandingRequestsPromise(){return this.workflowStatePromiseQueue.finalize()}updateMetadata(t,e){this.stepMetadata={...this.stepMetadata,[t]:{...this.stepMetadata[t],...e}},this.onMetadataChange()}removeElements(t){const e=(a,n)=>Object.keys(a).reduce((i,s)=>{const o=[...a[s]||[]];return n.forEach(l=>{const c=o.findIndex(d=>d.id===l.id);c>-1&&o.splice(c,1)}),i[s]=o,i},{});this.stepElements=e(this.stepElements,t)}getInvalidCanvasRegions(){return this.workflow.steps.reduce((t,e)=>(Et(e,this.stepSelections)||this.stepElements[e.stepName]&&this.stepElements[e.stepName].forEach(a=>t.push(a)),t),[])}getInvalidModelVariants(){return this.workflow.steps.reduce((t,e)=>(e.type===P.Model&&!Et(e,this.stepSelections)&&t.push(e.stepName),t),[])}async stepElementsForIntroducedSilentSteps(t,e){const a=this.product;if(!a)return Promise.resolve({stepElements:{},commands:[]});const n=async(c,d,A)=>{if(c.type===P.SilentIllustration){const u=await new rn(c,d).trigger();return{step:c,results:u}}else if(c.type===P.ProductOverlay){const u=await new rn(c,d,A).trigger();return{step:c,results:u}}return Promise.reject("Unknown silent step. This is a bug")},i=t.filter(c=>!this.stepInitialised[c.stepName]),s={stepElements:{},commands:[]},o=[];for(const c of i)this.markStepsAsInitialised([c.stepName]),e||o.push(n(c,this.layouts,a));const l=await Promise.all(o);for(const c of l)s.stepElements[c.step.stepName]=c.results.map(d=>d.regionElement),s.commands=[...s.commands,...c.results.map(d=>d.command)];return s}getStepStorage(t){return this.storage[t]}getMetadata(t){return this.stepMetadata[t]}getWorkflowMetadata(){return this.stepMetadata}getStepTags(t){return this.stepTags[t]||[]}getSerializedStep(t,e){return e.find(a=>a.stepName===t)}async updateTransactionShareActions(){const t=await this.client.getShareActionsForTransaction(this.transaction.id);this.transaction.transactionShareActions=t}async updateTransactionStakeholders(){var e;const t=await b.getShadowGraphqlClient().query({query:ss,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.transaction.id}});!((e=t==null?void 0:t.data)!=null&&e.transactions)||t.data.transactions.length!==1?(this.transaction.currentStakeholder=void 0,this.transaction.stakeholders=void 0):(this.transaction.stakeholders=t.data.transactions[0].stakeholders,this.transaction.currentStakeholder=t.data.transactions[0].currentStakeholder)}async approveTransaction(t){await b.getShadowGraphqlClient().mutate({mutation:nl,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.getTransaction().id,note:t}})}async rejectTransaction(t){await b.getShadowGraphqlClient().mutate({mutation:rl,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:this.getTransaction().id,note:t}})}async reset(){this.commandContext.getAllLayouts().forEach(e=>e.layoutState.elements.forEach(a=>{this.getCommandDispatcher()(new Ct(a.id))})),this.stepElements={},this.stepInitialised={},this.stepMetadata={},this.stepSelections={},this.storage={},await this.ensureStepsAreLoaded()}async setSelectionsAndElements(t,e,a,n){var S;const i=this.stepSelections;this.stepSelections={...this.stepSelections,[t]:{selectedVariants:e}},this.selectionCost=Object.values(this.stepSelections).reduce((E,B)=>E+B.selectedVariants.map(I=>I.priceModifier||0).reduce((I,x)=>I+x,0),0),this.workflow.steps.forEach(E=>{Et(E,this.stepSelections)||(this.stepInitialised[E.stepName]=!1,delete this.stepMetadata[E.stepName],delete this.stepSelections[E.stepName],delete this.storage[E.stepName])});const s=this.allScenes,o=xt(s,i),l=xt(s,this.stepSelections),c=o.map(E=>E.silentSteps).flat(),A=l.map(E=>E.silentSteps).flat().filter(E=>!c.some(B=>B.stepName===E.stepName));c.forEach(E=>{Et(E,this.stepSelections)||(this.stepInitialised[E.stepName]=!1)});const u=this.getInvalidCanvasRegions(),{stepElements:h,commands:g}=await this.stepElementsForIntroducedSilentSteps(A,!1);this.stepElements={...this.stepElements,...h,[t]:a},this.removeElements(u);const m=this.workflow.steps.find(E=>E.stepName===t);if((m==null?void 0:m.type)===P.Frame){const E=(S=this.getWorkflowExperience().getStepById(m.stepName))==null?void 0:S.frameService;E==null||E.setTargetElements(a.map(B=>B.id))}const p=u.map(E=>new Ct(E.id)),f=new nn(this.constructSerializableWorkflow()),C=[...g,...p,f];C.length>0&&this.commandContext.apply(new $(C),!0),await this.ensureStepsAreLoaded(),this.onElementsChange();const y=this.getInvalidModelVariants(),v=this.modelContainer;if(v){const E=y.map(B=>v.applyModelVariant(B,{contextService:this.getLayoutPreviewService()},!1));await Promise.all(E)}await this.onSelectionChange(),n&&await n()}async ensureStepsAreLoaded(){const e=xt(this.allScenes,this.stepSelections).map(l=>l.renderableSteps),a=[],n=e.flat();for(const l of n)if(!this.stepInitialised[l.stepName])switch(this.stepInitialised[l.stepName]=!0,l.type){case P.DigitalContent:a.push(Ma.init(l,this,this.reloadedState));break;case P.Frame:a.push(ut.init(l,this,this.reloadedState));break;case P.Illustration:a.push(Yt.init(l,this,this.reloadedState));break;case P.Material:a.push(Ta.init(l,this,this.reloadedState));break;case P.Model:a.push(Qa.init(l,this,this.reloadedState));break;case P.Module:this.stepSpecificServices[l.stepName]={module:await Ar(l.data.module)},a.push(Na.init(l,this,this.reloadedState));break;case P.Picture:a.push(Ra.init(l,this,this.reloadedState));break;case P.Question:a.push(Oa.init(l,this,this.reloadedState));break;case P.Shape:a.push(kt.init(l,this,this.reloadedState));break;case P.Text:a.push(W.init(l,this,this.reloadedState));break}const i=(await Promise.allSettled(a)).map(l=>{if(l.status==="rejected")throw new Error(`Step initialization failed: ${l.reason}`);return l.value}),s=i.filter(l=>!!l&&!!l.command).map(l=>l.command),o=i.filter(l=>!!l&&!!l.followup).map(l=>l.followup);s&&s.length>0&&this.commandContext.apply(new $(s),!0);for(const l of o)await l();o.length>0&&await this.ensureStepsAreLoaded(),this.onInitChange()}onConfirmChange(){this.confirmCallbacks.forEach(t=>t(this.confirmedDesign))}onEditedChange(){this.editedCallbacks.forEach(t=>t(this.editedSteps))}onElementsChange(){this.elementsCallbacks.forEach(t=>t(this.stepElements))}onInformationResultChange(){this.informationResultCallbacks.forEach(t=>t(this.informationResults))}onInitChange(){this.initCallbacks.forEach(t=>t(this.stepInitialised))}onMakingAdjustmentsChange(){this.makingAdjustmentsCallback.forEach(t=>{t(this.currentAdjustingStepId)})}onMandatoryChange(){this.mandatoryCallbacks.forEach(t=>t(this.mandatorySteps))}onMetadataChange(){this.metadataCallbacks.forEach(t=>{t(this.stepMetadata)})}async onSelectionChange(){const t=await this.traversableScenes();for(const e of this.selectionCallbacks)e({selectionCost:this.selectionCost,selections:this.stepSelections,traversableScenes:t})}onStepSpecificStorageChange(t){Object.keys(this.stepSpecificStorageCallbacks).includes(t)||(this.stepSpecificStorageCallbacks[t]=[]),this.stepSpecificStorageCallbacks[t].forEach(e=>e(this.storage[t]))}onStorageChange(){this.storageCallbacks.forEach(t=>t(this.storage))}onValidationChange(){this.validationCallbacks.forEach(t=>t(this.validationErrors))}traversableScenes(){return Es(this.allScenes,this.stepSelections,this.singleVariantsRenderable)}}class rt{constructor(t){this.variantData=t}getType(){var t;return(t=this.variantData.asset)==null?void 0:t.type}getId(){return this.variantData.id}getName(){return this.variantData.name}getPriceFormatted(t,e){return this.variantData.priceModifier.toLocaleString(t||"en-US",{style:"currency",currency:"USD",...e})}getPrice(){return this.variantData.priceModifier}getAsset(){var t,e,a;return(a=(e=(t=this.variantData.asset)==null?void 0:t.versions)==null?void 0:e.find(n=>n.name==="cdn"))==null?void 0:a.link}getAssetResource(){return this.variantData.asset}getThumbnail(){var a,n,i,s;const t=(i=(n=(a=this.variantData.thumbnail)==null?void 0:a.versions)==null?void 0:n.find(o=>o.name==="thumbnail"))==null?void 0:i.link,e=(s=this.variantData.thumbnail)==null?void 0:s.fileLink;return t||e}getColor(){return this.variantData.color}isDefault(){return!!this.variantData.default}getResource(){return this.variantData}isEnabled(){return this.variantData.enabled}}const ur=class ha{constructor(t,e,a){this.manager=t,this.step=e,this.tags=a}setUpdateState(t){ha.updateState.set(`${this.step.stepName}-${this.manager.getTransaction().id}`,t)}getUpdateState(){return!!ha.updateState.get(`${this.step.stepName}-${this.manager.getTransaction().id}`)}getCurrentVariant(){const e=this.manager.getWorkflowSelections()[this.step.stepName],a=e==null?void 0:e.selections[0];if(a)return new rt(a)}getAvailableVariants(){var e,a;return(((a=(e=this.step.option)==null?void 0:e.variants)==null?void 0:a.filter(n=>n.enabled))||[]).map(n=>new rt(n))}getAllVariants(){var e;return(((e=this.step.option)==null?void 0:e.variants)||[]).map(a=>new rt(a))}getId(){return this.step.stepName}getName(){return this.step.stepTitle}getHelpText(){return this.step.helpText}getType(){return this.step.type}getRaw(){return this.step}getTags(){return this.tags}hasTag(t){return this.tags.includes(t)||!1}getMandatory(){return this.step.mandatory||!1}getOverrideGlobalPropertyConfiguration(t){var a;return(((a=this.manager.getStepStorage(this.step.stepName))==null?void 0:a.overrideGlobalConfigurations)??{})[t.toString()]??!1}setOverrideGlobalPropertyConfiguration(t,e){var n;const a=((n=this.manager.getStepStorage(this.step.stepName))==null?void 0:n.overrideGlobalConfigurations)??{};this.manager.updateStorage(this.step.stepName,{overrideGlobalConfigurations:{...a,[t.toString()]:e}})}getGlobalPropertyAspects(t){var e;return((e=this.step.globalPropertyAspectConfigurations)==null?void 0:e.filter(a=>a.globalPropertyConfigurationId===t&&a.aspectName).map(a=>a.aspectName))??[]}executeAnimations(t){const e=this.manager.getPreviewService(),a=this.manager.getModelContainer(),n=this.step.data.modelAnimation,i=this.step.data.lookAtAnimation;e?i&&e.executeCameraAnimation(i):console.warn("No preview service available, cannot execute camera animations."),a?n&&a.executeAnimation(n,t):console.warn("No model container available, cannot execute model animations.")}};ur.updateState=new Map;let nt=ur;class hr extends nt{constructor(t,e,a){super(t,e,a)}async selectVariant(t){if(!this.getUpdateState()&&this.getCurrentVariant()!==t)return Yt.selectVariant(this.step,t.getResource(),this.manager.getRegionElements(this.step.stepName)||[],e=>this.setUpdateState(e),this.manager)}getColors(){var o;const t=this.manager.getRegionElements(this.step.stepName)||[];if(t.length===0)return;const a=L(t[0].id,this.manager.getAllLayoutData()).colors,n=(o=this.getCurrentVariant())==null?void 0:o.getAssetResource(),i=n==null?void 0:n.assetConfiguration,s=(i==null?void 0:i.defaultColorVariants)||[];if(s.length!==0){const l={};return s.forEach(c=>{var A;const d=i.channelNumbers.find(u=>u.number===c.channelNumber);if(d){const u=d.id.replace(/\W/g,"");l[c.channelNumber]={browserValue:((A=a[u])==null?void 0:A.browserValue)||""}}}),l}try{return a}catch(l){console.error(l)}}setColor(t,e,a){var l;const n=new Map,i=(l=this.getCurrentVariant())==null?void 0:l.getAssetResource(),s=i==null?void 0:i.assetConfiguration;return((s==null?void 0:s.defaultColorVariants)||[]).length!==0?s.channelNumbers.forEach(c=>{if(c.number.toString()===t){const d=c.id.replace(/\W/g,"");a?n.set(d,{browserValue:e,pmsValue:a}):n.set(d,e)}}):a?n.set(t,{browserValue:e,pmsValue:a}):n.set(t,e),Yt.changeColors(this.step,this.manager.getRegionElements(this.step.stepName),this.manager,()=>this.manager.getCommandContext().getAllLayouts(),n)}async getColorOption(){return this.step.data.colorOption}getAvailableColors(){return this.step.data.colorPickerEnabled?Yt.availableColors(this.step,this.manager):Promise.resolve([])}isColorPickerEnabled(){return this.step.data.colorPickerEnabled??!1}isPMSPickerEnabled(){return this.step.data.pmsPickerEnabled??!1}}class gr extends nt{constructor(t,e,a){super(t,e,a)}selectVariant(t){return Ta.selectVariant(this.step,t.getResource(),this.manager,e=>this.setUpdateState(e))}}class mr extends nt{constructor(t,e,a){super(t,e,a)}selectVariant(t){return Qa.selectVariant(this.step,t.getResource(),this.manager,e=>this.setUpdateState(e))}}class pr extends nt{constructor(t,e,a){super(t,e,a)}selectVariant(t){return Ra.selectVariant(this.step,t.getResource(),this.manager,e=>this.setUpdateState(e))}}class fr extends nt{constructor(t,e,a){super(t,e,a)}async selectVariant(t){if(!t.getId())throw new Error("Unable to select variant with a null ID");await Oa.selectVariant(this.step,t.getId(),this.manager)}getDisplayType(){var t;return this.step.data.displayType||((t=this.step.option)==null?void 0:t.displayType)}}class Cr extends nt{constructor(t,e,a){super(t,e,a)}selectVariant(t){const e=t.getResource();return kt.selectVariant(this.step,{fill:e.color,stroke:e.color,variant:e},this.manager.getRegionElements(this.step.stepName)||[],this.manager)}setColor(t){return kt.selectVariant(this.step,t,this.manager.getRegionElements(this.step.stepName)||[],this.manager)}getColors(){return kt.availableColours(this.step)}setCustomColor(t){var e,a;return((e=this.getCurrentVariant())==null?void 0:e.getColor())!=="#custom"&&console.warn(`setting custom color for step ${this.step.stepName} but color is ${(a=this.getCurrentVariant())==null?void 0:a.getColor()}`),kt.setCustomColor(t,this.step,this.manager)}getCustomColor(){var e,a,n;((e=this.getCurrentVariant())==null?void 0:e.getColor())!=="#custom"&&console.warn(`setting custom color for step ${this.step.stepName} but color is ${(a=this.getCurrentVariant())==null?void 0:a.getColor()}`);const t=(n=this.manager.getStepStorage(this.step.stepName))==null?void 0:n.colour;if(!t)throw new Error(`Color not available on step ${this.step.stepName}. Set a default on the workflow to fix this.`);return t}}class wr extends nt{constructor(t,e,a){super(t,e,a)}async selectVariant(t){W.selectVariant(this.step,t.getResource(),this.manager,e=>{if(e)this.manager.setInformationResults([...this.manager.getInformationResults(),{message:"An issue has occurred with text",messageType:ue.Error,stepID:this.step.stepName}]);else{const a=this.manager.getInformationResults().filter(n=>n.stepID!==this.step.stepName);this.manager.setInformationResults(a)}},()=>{})}getAvailableFillColors(){return this.step.data.colorPickerEnabled?W.availableFillColors(this.step):[]}async setFillColor(t){const e=this.manager.getRegionElements(this.step.stepName);await W.changeFillColor(this.step,t,e,this.manager)}getFillColor(){var t;return((t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.color)||"#000000"}getAvailableFillImages(){return W.availableFillImages(this.step)}async setFillImage(t){const e=this.manager.getRegionElements(this.step.stepName);await W.changeFillImage(this.step,t,e,this.manager)}getFillImage(){var t;return(t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.fillImage}getAlignment(){const t=W.findLayoutElements(this.manager,this.step);return t==null?void 0:t[0].align}setAlignment(t){const e=this.manager.getRegionElements(this.step.stepName);W.changeAlignment(this.step,t,e,this.manager)}setFullTextCustomization(t){var s;const e=((s=this.manager.getStepStorage(this.step.stepName))==null?void 0:s.inputText)||"",a=this.step.data.replaceableText!==void 0?this.step.data.replaceableText.replace("{{}}",e):e,n=t?a:this.step.data.defaultText;return this.manager.updateStorage(this.step.stepName,{customiseAllText:t,text:n,defaultCleared:!1}),this.setText(n)}setText(t){var d;const e={input:t,helperData:{}},a=W.findLayoutElements(this.manager,this.step),n=W.filterUnsupportedCharacters(t,(d=a[0])==null?void 0:d.fontData),i=!!this.step.data&&!!this.step.data.maxLength&&n.length>this.step.data.maxLength;i||(e.input=n);const s=a.length<=0,o=s?{inputText:n,text:n}:{inputText:n};this.manager.updateStorage(this.step.stepName,o);const l=this.manager.getStepStorage(this.step.stepName),c=W.getProcessedInput(n,this.step.data,!!l.customiseAllText);if(s)i||this.manager.updateMetadata(this.step.stepName,{text:c});else{const{command:A,errorData:u,helperData:h}=W.updateInputText(n,a,this.step,this.manager);A&&this.manager.getCommandDispatcher()(A),e.helperData=h,e.errorData=u,!i&&!u&&this.manager.updateMetadata(this.step.stepName,{text:c})}return e}getText(){var a;const t=this.step.data.defaultText,e=this.manager.getStepStorage(this.step.stepName);return t&&(e==null?void 0:e.defaultCleared)!==void 0&&!(e!=null&&e.defaultCleared)?t:((a=this.manager.getStepStorage(this.step.stepName))==null?void 0:a.text)||""}isReplaceable(){return this.step.data.userCanReplaceText}newLinesSupported(){return this.step.data.allowNewlines||!1}clearDefaultTextIfNecessary(){const t=this.manager.getStepStorage(this.step.stepName);if(!(t!=null&&t.defaultCleared)&&this.step.data.deleteDefaultOnFocus){const e=this.setText("");this.manager.updateStorage(this.step.stepName,{defaultCleared:!0,inputText:""});const a=W.findLayoutElements(this.manager,this.step);return W.updateInputText("",a,this.step,this.manager),e}}hasColorPicker(){return this.step.data.colorPickerEnabled}getRegions(){return this.step.data.regions}getCharacterLimit(){return this.step.data.maxLength}getCharactersRemaining(){const t=this.step.data.maxLength;if(t===void 0)return;const e=this.getText();return t-e.length}setCustomColor(t){throw new Error("Custom color support is not yet available on text. Check back soon.")}getCustomColor(){throw new Error("Custom color support is not yet available on text. Check back soon.")}getAvailableStrokeColors(){return this.step.data.strokeEnabled?W.availableStrokeColors(this.step):[]}getStrokeColor(){var t,e;return((e=(t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.strokeColor)==null?void 0:e.browserValue)||"#000000"}async setStrokeColor(t){const e=this.manager.getRegionElements(this.step.stepName);await W.changeStrokeColor(this.step,t,e,this.manager)}}class yr extends nt{constructor(t,e,a){super(t,e,a)}async selectVariant(){}getContent(){return this.step.data.content}}class Sr extends nt{constructor(t,e,a){super(t,e,a)}async selectVariant(){}getPreviewURL(){var t;return((t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.videoUrl)||""}async selectVideo(t){return Ma.regenerateQRCode(this.manager.getRegionElements(this.step.stepName),t.key,this.manager,this.step)}}class vr extends nt{constructor(t,e,a){super(t,e,a)}async selectVariant(){console.info("Text Modules don't support variants.")}getCharactersRemaining(){const t=this.step.data.maxLength;if(t===void 0)return;const e=this.getText();return t-e.length}getCharacterLimit(){return this.step.data.maxLength}getText(){var t;return((t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.text)||""}setText(t){Na.changeText(this.step,t,this.manager,e=>{if(e){const a=[...this.manager.getInformationResults(),{message:e,messageType:ue.Error,stepID:this.step.stepName}];this.manager.setInformationResults(a)}else{const a=this.manager.getInformationResults().filter(n=>n.stepID!==this.step.stepName);this.manager.setInformationResults(a)}})}}class pe{static get(t,e){switch(e.type){case P.DigitalContent:return new Sr(t,e,t.getStepTags(e.stepName));case P.Information:return new yr(t,e,t.getStepTags(e.stepName));case P.Question:return new fr(t,e,t.getStepTags(e.stepName));case P.Text:return new wr(t,e,t.getStepTags(e.stepName));case P.Illustration:return new hr(t,e,t.getStepTags(e.stepName));case P.Picture:return new pr(t,e,t.getStepTags(e.stepName));case P.Shape:return new Cr(t,e,t.getStepTags(e.stepName));case P.Material:return new gr(t,e,t.getStepTags(e.stepName));case P.Model:return new mr(t,e,t.getStepTags(e.stepName));case P.Frame:return new Gr(t,e,t.getStepTags(e.stepName));case P.Module:return new vr(t,e,t.getStepTags(e.stepName));default:throw new V(`Step type ${e.type} not yet supported in Core SDK`)}}}const Er=w.gql`
|
|
2086
2092
|
fragment CreateDesignTransaction on Transaction {
|
|
2087
2093
|
id
|
|
2088
2094
|
designName
|
|
@@ -2392,7 +2398,7 @@
|
|
|
2392
2398
|
}
|
|
2393
2399
|
}
|
|
2394
2400
|
}
|
|
2395
|
-
`;class rc{constructor(t,e=b.getShadowGraphqlClient.bind(b)){this.options=t,this.client=e}query(t){var a,n;const e=(a=this.options)!=null&&a.onQuery?(n=this.options)==null?void 0:n.onQuery(t):{};return this.client().query({...e,...t,context:{...e.context??{},...t.context??{}}})}mutate(t){var a,n;const e=(a=this.options)!=null&&a.onMutate?(n=this.options)==null?void 0:n.onMutate(t):{};return this.client().mutate({...e,...t,context:{...e.context??{},...t.context??{}}})}}const ic=async(r,t)=>{var n;const e=await b.getShadowGraphqlClient().query({query:us(((n=t==null?void 0:t.assets)==null?void 0:n.metadata)||!1),errorPolicy:"all",variables:{ids:r}});if(e.error)throw e.error;if(e.errors)throw e.errors.forEach(i=>console.error(i)),new Error("Unable to read workflows. Consult GraphQL errors.");const a=e.data.workflows;if(a===void 0||a.length!==r.length)throw new Error(`Unable to read workflows: ${e.errors??"Length mismatch in response"}`);return a.forEach(i=>{i.steps.forEach(s=>{var o,l,c;delete s.data.__typename,(o=s.option)!=null&&o.id&&((l=s.option.defaultVariant)!=null&&l.asset&&U.cacheAsset(s.option.defaultVariant.asset),s.option.colorProfile&&U.cacheAsset(s.option.colorProfile),(c=s.option.variants)==null||c.forEach(d=>{d.asset&&U.cacheAsset(d.asset),d.thumbnail&&U.cacheAsset(d.thumbnail),d.material&&U.cacheMaterial(d.material)}),$t.set({id:s.option.id},Promise.resolve(s.option)))}),i.finalizeStepConfig||(i.finalizeStepConfig={}),i.finalizeStepConfig.termsMarkdown=i.finalizeStepConfig.termsMarkdown||i.partner.termsMarkdown}),a},sc=async(r,t)=>{const a=(await t).find(n=>n.id===r);if(!a)throw new Error(`Workflow not found: ${r}`);return a},Ga=async(r,t)=>{const e=r.map(o=>$t.get({id:o,options:t})),a=r.filter((o,l)=>e[l]===void 0);if(a.length===0)return Promise.all(e);const n=ic(a,t),i=a.map(o=>$t.set({id:o,options:t},sc(o,n))),s=e.filter(o=>o!==void 0);return await Promise.all(s.concat(i))},oc=async(r,t)=>(await Ga([r],t))[0],lc=r=>r.sort((t,e)=>t.index-e.index).map(t=>({id:N(),panelId:t.name,name:t.name,title:t.title,index:t.index,createdAt:new Date,updatedAt:new Date,transparentBackground:t.transparentBackground,height:t.height,width:t.width,previewRegion:t.previewRegion,useEditableArea:t.useEditableArea,editableArea:t.editableArea})),cc=(r,t)=>{const e=r.workflowState,a=e?JSON.parse(e):void 0;return a?Object.values(a.layouts).map(n=>n.layout):lc(t.panels)};class dc{constructor(t){this.activeIntegration=void 0,this.updateTransactionState=async e=>{try{return b.getShadowGraphqlClient().mutate({...e,mutation:ts})}catch(a){throw console.error(a),new ht("Critical - Unable to synchronize workflow state with server.")}},this.options=t,this.options.applicationKey&&fi(this.options.applicationKey),console.debug("------------------------"),console.debug("Spiff Commerce Core SDK"),console.debug("Version: 26.34.0"),console.debug(`Application Key Provided: ${!!this.options.applicationKey}`),console.debug("------------------------")}configure(t){At.setHubUrl(t.hubUrl),At.setServerUrl(t.serverUrl),At.setServicesApiUrl(t.servicesApiUrl),this.marketplaceThemeInstallId=t.marketplaceThemeInstallId,this.marketplaceThemeInstallConfigurationId=t.marketplaceThemeInstallConfigurationId,t.bearerAuthenticationToken&&Qn(t.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(!Ci())throw new Error("Application key required to use Flow Service.");return new Rr}async getIntegration(){if(this.activeIntegration)return this.activeIntegration;if(!this.options.applicationKey)throw new Error("Cannot get current Integration without specifying an Application Key.");return this.activeIntegration=Ur(this.options.applicationKey),this.activeIntegration}async canUseAddon(t){var e;try{return((e=(await this.getIntegration()).partner.activeAddons)==null?void 0:e.includes(t))??!1}catch(a){return console.error(a),!1}}async authenticateBundleFromLocalStorage(t){var n,i;const e=M.getMap("bundleOwnerIds");if(e!=null&&e.has(t))return Promise.resolve({success:!0,stakeholderType:_t.Owner});const a=M.getMap("bundlePartnerIds")||new Map;if(a.has(t)){const s=a.get(t),l=(M.getMap("partnerCustomerIds")||new Map).get(s);if(l&&await this.authenticateCustomerId(l)){const d=(i=(n=this.customer)==null?void 0:n.bundleStakeholders)==null?void 0:i.find(A=>{var u;return((u=A.bundle)==null?void 0:u.id)===t});if(d)return Promise.resolve({success:!0,stakeholderType:d.type})}}return Promise.resolve({success:!1})}async authenticateTransactionFromLocalStorage(t){var d,A,u,h,g,m;const e=b.getShadowGraphqlClient(),a=await e.query({query:hs,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t}});if(!a.data.transactions||a.data.transactions.length===0)throw new Error(`Transaction not found: ${t}`);const n=a.data.transactions[0];if(!((A=(d=n.product)==null?void 0:d.partner)==null?void 0:A.id))throw new Error(`Unable to read transaction: ${t}`);if(n.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const s=M.getMap("transactionOwnerIds");if(s!=null&&s.has(t))return Promise.resolve({success:!0,stakeholderType:_t.Owner});const o=M.getMap("transactionCustomerIds");if(o!=null&&o.has(t)){const p=o.get(t);if(p&&await this.authenticateCustomerId(p)){const C=((h=(u=this.customer)==null?void 0:u.bundleStakeholders)==null?void 0:h.find(y=>{var v,S;return(S=(v=y.bundle)==null?void 0:v.transactions)==null?void 0:S.some(E=>E.id===t)}))||((m=(g=this.customer)==null?void 0:g.stakeholders)==null?void 0:m.find(y=>{var v;return((v=y.transaction)==null?void 0:v.id)===t}));if(C)return Promise.resolve({success:!0,stakeholderType:C.type})}}const c=(await e.query({query:gs,errorPolicy:"all",variables:{id:n.workflowId}})).data.workflow;if(!c)throw new Error(`Unable to read workflow: ${n.workflowId}`);return Promise.resolve({success:!1,theme:c.overrideTheme,customLogoLink:n.customLogoLink})}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(t){const e=M.getMap("transactionCustomerIds");e!=null&&e.has(t)&&(e.delete(t),M.setMap("transactionCustomerIds",e))}async customerHasBundleTemplates(t){const n=(await b.getShadowGraphqlClient().query({query:cn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;return n.id?n.hasBundleTemplates??!1:!1}getStakeholderTypeForTransaction(t){var a,n;const e=(n=(a=this.customer)==null?void 0:a.stakeholders)==null?void 0:n.find(i=>{var s;return((s=i.transaction)==null?void 0:s.id)===t});if(e)return e.type}async getOrCreateCustomer(t){var s;this.customer=void 0;const e=b.getShadowGraphqlClient(),n=(await e.query({query:cn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;if(!n.id){const l=(s=(await e.mutate({mutation:Zl,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:t}}})).data)==null?void 0:s.customerCreate;if(!l)throw new Error("Unable to create customer.");return this.storeCustomer(l),this.customer=l,{customer:l,isAuthenticated:!1}}this.storeCustomer(n);const i=await this.authenticateCustomerId(n.id);return{customer:this.customer||n,isAuthenticated:i}}getCustomer(){return this.customer}async authenticateCustomerId(t){var o;const e=b.getShadowGraphqlClient(),a=M.getMap("customerTokens");if(!(a!=null&&a.has(t)))return!1;const n=a.get(t);if(!n)return!1;const s=(o=(await e.mutate({mutation:tc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{loginToken:n}})).data)==null?void 0:o.customerAuthenticate;return s?(this.storeCustomer(s),_a(n),this.customer=s,!0):!1}async generateVerificationCode(t){await b.getShadowGraphqlClient().mutate({mutation:ec,variables:{emailAddress:t}})}async verifyCode(t,e){var i,s;const n=(i=(await b.getShadowGraphqlClient().mutate({mutation:ac,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t,verificationCode:e}})).data)==null?void 0:i.customerVerifyCode;if(n!=null&&n.loginToken){if(!((s=n.partner)!=null&&s.id))throw new Error(`Unable to find customer: ${t}`);const o=M.getMap("customerTokens")||new Map;return o.set(n.id,n.loginToken),M.setMap("customerTokens",o),this.storeCustomer(n),_a(n.loginToken),this.customer={...n,loginToken:void 0},!0}return!1}async getCustomerMetafields(){var e;if(!((e=this.customer)!=null&&e.id))throw new Error("Customer must be logged in before calling this function.");return(await b.getShadowGraphqlClient().query({query:nc,variables:{id:this.customer.id}})).data.metafields}async getNewBundle(t,e,a){var c,d,A,u,h;const i=(A=(await b.getShadowGraphqlClient().mutate({mutation:Lo(((d=(c=a==null?void 0:a.graphql)==null?void 0:c.productCollection)==null?void 0:d.eagerFetchProducts)||!1),variables:{collectionId:t,initialMetadata:e?Object.entries(e).map((g,m)=>({key:g[0],value:g[1]})):void 0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},fetchPolicy:"no-cache"})).data)==null?void 0:A.bundleCreate;if(!(i!=null&&i.id))throw new Error("Unable to create bundle");const s=M.getMap("bundlePartnerIds")||new Map;s.set(i.id,i.partner.id),M.setMap("bundlePartnerIds",s);const o=M.getMap("bundleOwnerIds")||new Map;o.set(i.id,i.bundleOwnerId),M.setMap("bundleOwnerIds",o);const l=new Ke(this,i,void 0,void 0,i.bundleOwnerId,{eagerFetchProducts:(h=(u=a==null?void 0:a.graphql)==null?void 0:u.productCollection)==null?void 0:h.eagerFetchProducts});return await l.getInitializationPromise(),l}async getExistingBundle(t,e,a,n){var p,f,C,y,v,S,E,B,I,x,F;const i=M.getMap("bundleOwnerIds"),s=i==null?void 0:i.get(t),l=((p=Object.entries(localStorage).find(([k,Q])=>k.startsWith("CognitoIdentityServiceProvider")&&k.endsWith("idToken")))==null?void 0:p[0])||"",c=localStorage.getItem(l),d={};c&&!Ie(c)&&(d.Authorization=`Bearer ${c}`);const A={bundleOwnerId:s,...d,...(f=n==null?void 0:n.graphql)==null?void 0:f.additionalHeaders},u=await b.getShadowGraphqlClient().query({query:No(((y=(C=n==null?void 0:n.graphql)==null?void 0:C.productCollection)==null?void 0:y.eagerFetchProducts)||!1),variables:{id:t},fetchPolicy:"no-cache",context:{headers:A}});if(!((v=u.data)!=null&&v.bundles)||((S=u.data)==null?void 0:S.bundles.length)===0||!((E=u.data)!=null&&E.bundles[0]))throw new Error(`Unable to find bundle: ${t}`);const h=(B=u.data)==null?void 0:B.bundles[0],g=M.getMap("bundlePartnerIds")||new Map;g.set(h.id,h.partner.id),M.setMap("bundlePartnerIds",g);const m=new Ke(this,h,e,a,s,{additionalHeaders:(I=n==null?void 0:n.graphql)==null?void 0:I.additionalHeaders,eagerFetchProducts:(F=(x=n==null?void 0:n.graphql)==null?void 0:x.productCollection)==null?void 0:F.eagerFetchProducts,existingGlobalPropertyState:u.data.globalPropertyState,readonly:n==null?void 0:n.readonly});return await m.getInitializationPromise(),m}async duplicateBundle(t,e,a,n){var p,f,C,y,v,S,E,B;const i=(p=M.getMap("bundleOwnerIds"))==null?void 0:p.get(t),o=((f=Object.entries(localStorage).find(([I,x])=>I.startsWith("CognitoIdentityServiceProvider")&&I.endsWith("idToken")))==null?void 0:f[0])||"",l=localStorage.getItem(o),c={};l&&!Ie(l)&&(c.Authorization=`Bearer ${l}`);const d={bundleOwnerId:i,...c,...(C=n==null?void 0:n.graphql)==null?void 0:C.additionalHeaders},u=(S=(await b.getShadowGraphqlClient().mutate({mutation:Vo(((v=(y=n==null?void 0:n.graphql)==null?void 0:y.productCollection)==null?void 0:v.eagerFetchProducts)||!1),variables:{id:t,template:e,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId,duplicateTransactions:a},context:{headers:d},fetchPolicy:"no-cache"})).data)==null?void 0:S.bundleDuplicate;if(!(u!=null&&u.id))throw new Error("Unable to duplicate bundle");const h=M.getMap("bundlePartnerIds")||new Map;h.set(u.id,u.partner.id),M.setMap("bundlePartnerIds",h);const g=M.getMap("bundleOwnerIds")||new Map;g.set(u.id,u.bundleOwnerId),M.setMap("bundleOwnerIds",g);const m=new Ke(this,u,void 0,void 0,u.bundleOwnerId,{eagerFetchProducts:(B=(E=n==null?void 0:n.graphql)==null?void 0:E.productCollection)==null?void 0:B.eagerFetchProducts,existingGlobalPropertyState:u.globalPropertyState});return await m.getInitializationPromise(),m}async getBundlesForCustomer(t){var i;if(!((i=this.customer)!=null&&i.id))throw new Error("Customer not authenticated.");const{includeMetadata:e,...a}=t;return(await b.getShadowGraphqlClient().query({query:Zo(e??!1),variables:{...a,id:this.customer.id},fetchPolicy:"no-cache"})).data.customerBundlesFeed}async getBundleStakeholders(){var i;if(!this.customer)throw new Error("Customer not authenticated.");const t=await b.getShadowGraphqlClient().query({query:Ro,variables:{id:this.customer.id},fetchPolicy:"no-cache"});if(!((i=t.data)!=null&&i.customers)||t.data.customers.length===0)throw new Error("Unable to find customer.");const a=t.data.customers[0].bundleStakeholders||[],n=M.getMap("bundlePartnerIds")||new Map;return a.forEach(s=>{var o,l;(o=s.bundle)!=null&&o.id&&((l=s.bundle.partner)!=null&&l.id)&&n.set(s.bundle.id,s.bundle.partner.id)}),M.setMap("bundlePartnerIds",n),a}async getWorkflowExperience(t,e){if(!t)throw new Error("getWorkflowExperience has been called without an options object! This is not supported.");const a=await this.getWorkflowExperiences([t],t.graphql),n=a[0];return e&&await n.getWorkflowManager().injectIntoPreviewService(e(n.getWorkflowManager().getWorkflow())),a[0]}async getWorkflowExperiences(t,e){if(t.length===0)throw new ht("No options provided!");const a=b.getShadowGraphqlClient(),n=async S=>{var x,F,k;if(S.length===0)return[];const E=S.map(Q=>Q.option.transactionId),B=await a.query({query:Zi,variables:{ids:E},errorPolicy:"all",fetchPolicy:"no-cache"}),I=B.data.transactions;if(I.length!==S.length){const Q=((F=(x=B.errors)==null?void 0:x[0])==null?void 0:F.message)||"Unknown error";throw new ht(`Not all transactions were found: ${Q}`)}return!this.activeIntegration&&((k=I[0].integrationProduct)!=null&&k.integration)&&(this.activeIntegration=Promise.resolve(I[0].integrationProduct.integration)),I.map((Q,ot)=>{var R;return{transaction:Q,workflowId:Q.workflowId,readOnly:((R=S.find(et=>et.option.transactionId===Q.id))==null?void 0:R.option.readOnly)??!1,index:S[ot].index}})},i=async S=>{var I,x,F;if(S.length===0)return[];const E=await a.mutate({mutation:Xi,variables:{inputs:S.map(k=>({integrationProductId:k.option.type==="integration"?k.option.integrationProductId:void 0,externalIntegrationId:k.option.type==="external"?k.option.externalIntegrationId:void 0,externalProductId:k.option.type==="external"?k.option.externalProductId:void 0,workflowId:k.option.workflowId,designName:k.option.designName,claim:!0})),marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache"}),B=(I=E.data)==null?void 0:I.transactionCreateMany;if(!B||B.length===0){const k=((F=(x=E.errors)==null?void 0:x[0])==null?void 0:F.message)||"Unknown error";throw new ht(`Failed to create transactions: ${k}`)}return B.map((k,Q)=>({transaction:k,workflowId:k.workflowId,readOnly:!1,index:S[Q].index}))},s=t.map((S,E)=>({option:S,index:E})),o=s.filter(S=>S.option.type==="transaction"),l=s.filter(S=>S.option.type==="integration"||S.option.type==="external"),c=ja(o,10),d=ja(l,10),A=(await Promise.all([...c.map(n),...d.map(i)])).flat(),u=[...new Set(A.map(S=>S.workflowId))],h=await Ga(u,e),g=new Map(h.map(S=>[S.id,S])),m=M.getMap("transactionOwnerIds")||new Map,p=A.map(async S=>{var et;const{transaction:E,workflowId:B,readOnly:I,index:x}=S,F=g.get(B),k=t[x];!m.get(E.id)&&E.transactionOwnerId&&m.set(E.id,E.transactionOwnerId);const Q=m.get(E.id)||void 0,ot=new rc({onMutate:()=>({context:{transactionOwnerId:Q,bundleOwnerId:e==null?void 0:e.bundleOwnerId}}),onQuery:()=>({context:{transactionOwnerId:Q,bundleOwnerId:e==null?void 0:e.bundleOwnerId}})}),R={product:E.product,transaction:E,layouts:[],singleVariantsRenderable:(et=k==null?void 0:k.workflowConfiguration)==null?void 0:et.singleVariantsRenderable,stateMutationFunc:I?async()=>{throw new V("State mutation is forbidden in read only mode!")}:async H=>this.updateTransactionState({...H,context:{transactionOwnerId:Q,bundleOwnerId:e==null?void 0:e.bundleOwnerId}}),graphQlClient:()=>ot,readOnly:I,workflow:F,isReloadedTransaction:k.type==="transaction"};if(k.type==="transaction"&&E.workflowState){const H=JSON.parse(E.workflowState);R.layouts=Object.values(H.layouts||{}).map(yt=>yt.layout),await da(H),R.reloadedState=H}else if(!I&&k.workflowState){const H=JSON.parse(k.workflowState);R.layouts=Object.values(H.layouts||{}).map(yt=>yt.layout),await da(H),R.reloadedState=H}else R.layouts=cc(R.transaction,R.workflow);return R.renderableContextService=new Fl(R.layouts),R.delayWorkflowStateSync=!0,{experienceOptions:R,index:x,options:k}}),f=await Promise.all(p);M.setMap("transactionOwnerIds",m);const y=f.sort((S,E)=>S.index-E.index).map(async S=>{const{experienceOptions:E,options:B}=S,I=new Dr(this,E);return await I.getWorkflowManager().getInitializationPromise(),B.type!=="transaction"&&this.customer&&await I.attachCustomerDetails({email:this.customer.emailAddress}),I}),v=await Promise.all(y);return v.forEach(S=>S.getWorkflowManager().setWorkflowStateSyncEnabled(!0)),v}storeCustomer(t){const e=M.getMap("partnerCustomerIds")||new Map;e.set(t.partner.id,t.id),M.setMap("partnerCustomerIds",e)}async getIntegrationProductById(t,e){var s,o;const i=(s=(await b.getShadowGraphqlClient().query({query:rs(e),variables:{ids:[t]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:s.integrationProducts;if(!i||i.length===0||!((o=i[0])!=null&&o.id))throw new Error("Integration product not found.");return new pa(i[0])}async getIntegrationProductFromExternalIds(t,e,a){var o;const s=(o=(await b.getShadowGraphqlClient().query({query:is(a),variables:{externalProductId:e,externalIntegrationId:t},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:o.integrationProductFromExternalIds;if(!(s!=null&&s.id))throw new Error("Integration product not found.");return new pa(s)}async getIntegrationProduct(t){return t.type==="integration"?this.getIntegrationProductById(t.integrationProductId):this.getIntegrationProductFromExternalIds(t.externalIntegrationId,t.externalProductId)}async getShareActionsForTransaction(t){const a=(M.getMap("transactionOwnerIds")||new Map).get(t)||void 0,n=await b.getShadowGraphqlClient().query({query:ns,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t},context:{transactionOwnerId:a}});if(!n.data.transactions||n.data.transactions.length!==1)throw new Error(`Failed to fetch share actions for transaction: ${t}`);return n.data.transactions[0].transactionShareActions}async placeOrder(t){const e=await b.getShadowGraphqlClient().mutate({mutation:ws,variables:{orderItems:t}});if(e.errors)throw new Error(e.errors[0].message);if(!e.data)throw new Error("Failed to create order: No order data in response.");return{id:e.data.orderCreate.id,internalId:e.data.orderCreate.internalId}}}const Ur=async(r,t)=>(await b.getShadowGraphqlClient().query({query:ps,errorPolicy:"all",fetchPolicy:"no-cache",context:{headers:{"x-application-key":r}},variables:{themeConfigurationId:t}})).data.currentIntegration,Ac=async r=>{const e=await b.getShadowGraphqlClient().query({query:as,errorPolicy:"all",fetchPolicy:"network-only",variables:{id:r}});if(e.data.transactions.length!==0)return e.data.transactions[0]},uc=async(r,t)=>{var a;return(a=(await b.getShadowGraphqlClient().query({query:ms,errorPolicy:"all",variables:{themeConfigurationId:r,themeInstallId:t}})).data)==null?void 0:a.marketplaceThemeInstallConfiguration},hc=async r=>{var e,a,n;return(n=(a=(e=(await b.getShadowGraphqlClient().query({query:Cs,errorPolicy:"all",variables:{id:r}})).data)==null?void 0:e.bundles)==null?void 0:a[0])==null?void 0:n.marketplaceThemeInstallConfiguration},gc=async r=>{var e,a,n;return(n=(a=(e=(await b.getShadowGraphqlClient().query({query:fs,errorPolicy:"all",variables:{id:r}})).data)==null?void 0:e.transactions)==null?void 0:a[0])==null?void 0:n.marketplaceThemeInstallConfiguration};function Lr(r,t,e,a){const n=e.width*r.zoom,i=e.height*r.zoom;if(a){const o=r,l=Math.max(t.width/e.width,t.height/e.height);o.zoom=Math.max(l,r.zoom);const c=e.width*o.zoom,d=e.height*o.zoom;return o.x=fe(r.x,t.width-c,0),o.y=fe(r.y,t.height-d,0),o}const s=r;return s.x=fe(s.x,-n,t.width),s.y=fe(s.y,-i,t.height),s}function fe(r,t,e){return Math.min(Math.max(r,t),e)}class Vr{constructor(t,e){this.minZoomScale=[.03],this.maxZoomScale=[20],this._debouncedUpdateFrameOffsets=yn(this.updateFrameOffsets,200),this.targetElements=[],this.onFrameDataChangeListeners=[],this.onZoomChangeListeners=[],this.forceImageCover=t,this.initialZoom=e,this.thresholdSettings={useThreshold:!1,invertThreshold:!1,threshold:128,thresholdSaturation:.5}}connectWorkflowManager(t,e){e&&t.addStepSpecificStorageCallback(async a=>{if(a){const n=a;if(n.currentFrameSources){let i=!1;for(let s=0;s<n.currentFrameSources.length;s++){const o=n.currentFrameSources[s],l=await ce(o),c=this.frameData?this.frameData[s]:void 0;wn(l,c)||(this.frameData||(this.frameData=new Array(n.currentFrameSources.length)),this.frameData[s]=l,i=!0)}i&&(this.onFrameDataChangeListeners.forEach(s=>s(this.frameData)),this.frameData&&this.imageData&&(this.recalculateOffsets(this.imageData),this.updateOffsets(this.offsets),this.recalculateZoomLimits(this.imageData,this.frameData)))}}},e),this.workflowManager=t,this.stepName=e}setTargetElements(t){this.targetElements=t}getFrameData(){return this.frameData}setFrameData(t){if(!t){this.frameData=void 0;return}t.forEach((e,a)=>{const n=Ft.get(e);n&&(this.frameData||(this.frameData=new Array(t.length)),this.frameData[a]=n)})}getImageData(){return this.imageData}getImageSrc(){if(this.imageData){if(this.imageData.svg){const t=Qe(this.imageData.svg,this.imageData.colors||{},!1);return Me(t)}return this.imageData.src}}getOffsets(){return this.offsets}setOffsets(t){this.offsets=t}setZoom(t,e,a,n){if(this.imageData&&this.offsets&&this.frameData){(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length));const i=this.frameData.map((s,o)=>{const l=(e[o]-this.offsets[o].x)/this.offsets[o].zoom,c=(a[o]-this.offsets[o].y)/this.offsets[o].zoom,d=e[o]-l*t[o],A=a[o]-c*t[o];return{x:d,y:A,zoom:this.imageData.width*t[o]/this.imageData.width}});this.updateOffsets(i,n),this.onZoomChangeListeners.forEach(s=>s(t))}}setPatternData(t,e=!0){this.imageData=t,t&&this.frameData&&((e||!this.offsets)&&this.recalculateOffsets(t),this.updateOffsets(this.offsets,void 0,!0)),this.imageData&&this.frameData&&this.recalculateZoomLimits(this.imageData,this.frameData)}updateOffsets(t,e,a){const n=this.imageData;if(!n||!this.frameData)return;if(this.frameData.length!==t.length)throw new V("Frame data and offsets are not the same length. This is a bug. Please report it.");if(!this.offsets.some((s,o)=>!(t[o].x===s.x&&t[o].y===s.y&&t[o].zoom===s.zoom))&&!a){e&&e();return}(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((s,o)=>{this.offsets[o]=Lr(t[o],s,this.imageData,this.forceImageCover)}),this._debouncedUpdateFrameOffsets(this.offsets,n,this.frameData,this.thresholdSettings,e)}getThresholdSettings(){return this.thresholdSettings}setThresholdSettings(t){this.thresholdSettings=t,this.imageData&&this.frameData&&this._debouncedUpdateFrameOffsets(this.offsets,this.imageData,this.frameData,t)}onFrameDataChanged(t){t(this.frameData),this.onFrameDataChangeListeners.push(t)}onZoom(t){this.onZoomChangeListeners.push(t)}updateFrameOffsets(t,e,a,n,i){if(!a||a.length===0||a.some(o=>!o))throw new V("Frame data not set. This is a bug");if(!this.workflowManager)throw new V("No workflow manager set, cannot update offsets.");const s=this.workflowManager.getCommandDispatcher();this.targetElements.forEach((o,l)=>{s(new $([new no(o,e,t[l]),new ro(o,n.useThreshold,n.invertThreshold,n.threshold,n.thresholdSaturation)]))}),this.stepName&&this.workflowManager.updateStorage(this.stepName,{frameOffsetsList:t}),i&&i()}recalculateZoomLimits(t,e){(this.minZoomScale.length!==e.length||this.maxZoomScale.length!==e.length)&&(this.minZoomScale=new Array(e.length),this.maxZoomScale=new Array(e.length)),e.forEach((a,n)=>{const i=Math.max(a.width/t.width,a.height/t.height);this.forceImageCover?(this.minZoomScale[n]=i,this.maxZoomScale[n]=i*2.5):(this.minZoomScale[n]=i/10,this.maxZoomScale[n]=i*2.5)})}recalculateOffsets(t){this.frameData&&((!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((e,a)=>{this.offsets[a]=Da(t,e,this.initialZoom&&!this.forceImageCover?{scale:this.initialZoom}:void 0,this.forceImageCover)}),this._debouncedUpdateFrameOffsets(this.offsets,t,this.frameData,this.thresholdSettings))}}class mc{updateRecipient(t,e,a,n,i,s,o,l,c){throw new Error("Method not implemented.")}approveTransaction(t){throw new Error("Method not implemented.")}rejectTransaction(t){throw new Error("Method not implemented.")}getClient(){return this.client??{}}getWorkflowExperience(){return{}}setClient(t){this.client=t}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}async reset(){}updateStateWithServer(t){}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(t){}addPoller(t){}addConfirmCallback(t){}addEditedCallback(t){}addElementsCallback(t){}addInformationResultCallback(t){}addInitCallback(t){}addMakingAdjustmentsCallback(t){}addMandatoryCallback(t){}addMetadataCallback(t){}addSelectionCallback(t){}addStepSpecificStorageCallback(t,e){}addStorageCallback(t){}getCommandDispatcher(){return t=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getProfanities(){return[]}getRegionElements(t){return[]}getSerializedStep(t,e){}getStepSpecificServices(t){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(t){}markUpdateCompleted(t){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}getStepSelections(){return{}}setCurrentAdjustingStepId(t){}setEditedStatus(t,e){}setInformationResults(t){}setMandatoryFulfilled(t,e){}async setSelectionsAndElements(t,e,a){}toggleDesignConfirmed(){}updateMetadata(t,e){}async updateStorage(t,e){}injectIntoPreviewService(t){return Promise.resolve()}ejectFromPreviewService(){}setWorkflowStateSyncEnabled(t){}async updateTransactionShareActions(){}addValidationCallback(t){}setStepError(t,e,a){}getStepErrors(t){}getValidationErrors(){return{steps:new Map}}async updateTransactionStakeholders(){}getStepTags(t){return[]}}var zr=(r=>(r.SelectFrame="SelectFrame",r.SelectImage="SelectImage",r.Position="Position",r))(zr||{});class Gr extends nt{constructor(t,e,a){super(t,e,a);const n=e.data;this.frameService=new Vr(n.forceImageCover,n.initialZoomLevel),this.frameService.connectWorkflowManager(t,e.stepName)}selectVariant(t){const e=this.manager.getRegionElements(this.step.stepName);return ut.selectVariant(this.step,t.getResource(),e,this.manager,a=>this.setUpdateState(a))}onFrameDataChanged(t){this.frameService&&this.frameService.onFrameDataChanged(e=>{e&&t(e)})}async selectImage(t,e=!0,a=!0){var n;if(await ut.selectImage(this.step,t,this.manager,a),e){const i=((n=this.manager.getStepStorage(this.step.stepName))==null?void 0:n.framePatternData)||{};this.manager.updateStorage(this.step.stepName,{framePatternData:{...i,originalAssetKey:t.key,backgroundRemovedAssetKey:void 0,useOriginalAsset:void 0}})}}async canUseBackgroundRemover(){return this.manager.getClient().canUseAddon(Pe.BackgroundRemover)}async canRemoveBackground(){var t,e,a,n;return await this.canUseBackgroundRemover()&&this.hasOriginalImageSelection()&&!!((e=(t=this.frameService)==null?void 0:t.getImageData())!=null&&e.src)&&!((n=(a=this.frameService)==null?void 0:a.getImageData())!=null&&n.svg)}async removeBackgroundFromImageSelection(t=!0){var i;if(!await this.canUseBackgroundRemover())throw new Error("The current Integration does not have access to the Background Remover. Please call canUseBackgroundRemover to ensure you disable this feature when appropriate.");const e=await this.getOriginalImageSelection();if(!e)throw new Error("You must supply an image selection before attempting to remove the background.");const a=await U.removeBackgroundFromAsset(e);t&&await ut.selectImage(this.step,a,this.manager,!1);const n=((i=this.manager.getStepStorage(this.step.stepName))==null?void 0:i.framePatternData)||{};return this.manager.updateStorage(this.step.stepName,{framePatternData:{...n,backgroundRemovedAssetKey:a.key,useOriginalAsset:!t}}),a}changeColors(t){ut.changeColors(this.step,this.manager,t)}getImageData(){if(this.frameService)return this.frameService.getImageData()}async getColorOption(){return this.step.data.colorOption}getAvailableColors(){return this.step.data.colorPickerEnabled?ut.availableColors(this.step,this.manager):Promise.resolve([])}isColorPickerEnabled(){return this.step.data.colorPickerEnabled??!1}async getOriginalImageColors(){const t=this.getImageData();return t!=null&&t.svg?(await st(t.svg)).colors:void 0}getMaxAllowedColors(){return this.step.data.maxColors}getUniqueColorCount(){return ut.getUniqueColorCount(this.step,this.manager)}getCurrentFrameStep(t,e,a,n){return n&&n.length>1&&t===void 0?"SelectFrame":e||a||this.getImageData()?"Position":"SelectImage"}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}getWhitelistedExtensions(){return[...this.step.data.whitelistedExtensions,...this.step.data.whitelistedExtensions.includes(".jpg")?[".jpeg"]:[]]}async getOriginalImageSelection(){var e,a;const t=(a=(e=this.manager.getStepStorage(this.step.stepName))==null?void 0:e.framePatternData)==null?void 0:a.originalAssetKey;if(t)return U.getLocalOrFromServer(t)}async getBackgroundRemovedImageSelection(){var e,a;const t=(a=(e=this.manager.getStepStorage(this.step.stepName))==null?void 0:e.framePatternData)==null?void 0:a.backgroundRemovedAssetKey;if(t)return U.getLocalOrFromServer(t)}hasOriginalImageSelection(){var t,e;return!!((e=(t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.framePatternData)!=null&&e.originalAssetKey)}hasBackgroundRemovedImageSelection(){var t,e;return!!((e=(t=this.getFrameStepStorage())==null?void 0:t.framePatternData)!=null&&e.backgroundRemovedAssetKey)}getUseOriginalImageSelection(){var t,e;return((e=(t=this.getFrameStepStorage())==null?void 0:t.framePatternData)==null?void 0:e.useOriginalAsset)??!1}async setUseOriginalImageSelection(t){var n;const e=((n=this.getFrameStepStorage())==null?void 0:n.framePatternData)||{};if(e.useOriginalAsset===t)return;const a=await this.getOriginalImageSelection();if(!a)throw new Error("You must provide an image selection before calling setUseOriginalImageSelection");if(t)await this.selectImage(a,!1,!1);else{const i=await this.getBackgroundRemovedImageSelection();if(!i)throw new Error("You must call removeBackgroundFromImageSelection before attempting to apply the image.");await this.selectImage(i,!1,!1)}this.manager.updateStorage(this.step.stepName,{framePatternData:{...e,useOriginalAsset:t}})}getFrameStepStorage(){return this.manager.getStepStorage(this.step.stepName)}}const pc=w.gql`
|
|
2401
|
+
`;class rc{constructor(t,e=b.getShadowGraphqlClient.bind(b)){this.options=t,this.client=e}query(t){var a,n;const e=(a=this.options)!=null&&a.onQuery?(n=this.options)==null?void 0:n.onQuery(t):{};return this.client().query({...e,...t,context:{...e.context??{},...t.context??{}}})}mutate(t){var a,n;const e=(a=this.options)!=null&&a.onMutate?(n=this.options)==null?void 0:n.onMutate(t):{};return this.client().mutate({...e,...t,context:{...e.context??{},...t.context??{}}})}}const ic=async(r,t)=>{var n;const e=await b.getShadowGraphqlClient().query({query:us(((n=t==null?void 0:t.assets)==null?void 0:n.metadata)||!1),errorPolicy:"all",variables:{ids:r}});if(e.error)throw e.error;if(e.errors)throw e.errors.forEach(i=>console.error(i)),new Error("Unable to read workflows. Consult GraphQL errors.");const a=e.data.workflows;if(a===void 0||a.length!==r.length)throw new Error(`Unable to read workflows: ${e.errors??"Length mismatch in response"}`);return a.forEach(i=>{i.steps.forEach(s=>{var o,l,c;delete s.data.__typename,(o=s.option)!=null&&o.id&&((l=s.option.defaultVariant)!=null&&l.asset&&U.cacheAsset(s.option.defaultVariant.asset),s.option.colorProfile&&U.cacheAsset(s.option.colorProfile),(c=s.option.variants)==null||c.forEach(d=>{d.asset&&U.cacheAsset(d.asset),d.thumbnail&&U.cacheAsset(d.thumbnail),d.material&&U.cacheMaterial(d.material)}),$t.set({id:s.option.id},Promise.resolve(s.option)))}),i.finalizeStepConfig||(i.finalizeStepConfig={}),i.finalizeStepConfig.termsMarkdown=i.finalizeStepConfig.termsMarkdown||i.partner.termsMarkdown}),a},sc=async(r,t)=>{const a=(await t).find(n=>n.id===r);if(!a)throw new Error(`Workflow not found: ${r}`);return a},Ga=async(r,t)=>{const e=r.map(o=>$t.get({id:o,options:t})),a=r.filter((o,l)=>e[l]===void 0);if(a.length===0)return Promise.all(e);const n=ic(a,t),i=a.map(o=>$t.set({id:o,options:t},sc(o,n))),s=e.filter(o=>o!==void 0);return await Promise.all(s.concat(i))},oc=async(r,t)=>(await Ga([r],t))[0],lc=r=>r.sort((t,e)=>t.index-e.index).map(t=>({id:N(),panelId:t.name,name:t.name,title:t.title,index:t.index,createdAt:new Date,updatedAt:new Date,transparentBackground:t.transparentBackground,height:t.height,width:t.width,previewRegion:t.previewRegion,useEditableArea:t.useEditableArea,editableArea:t.editableArea})),cc=(r,t)=>{const e=r.workflowState,a=e?JSON.parse(e):void 0;return a?Object.values(a.layouts).map(n=>n.layout):lc(t.panels)};class dc{constructor(t){this.activeIntegration=void 0,this.updateTransactionState=async e=>{try{return b.getShadowGraphqlClient().mutate({...e,mutation:ts})}catch(a){throw console.error(a),new ht("Critical - Unable to synchronize workflow state with server.")}},this.options=t,this.options.applicationKey&&fi(this.options.applicationKey),console.debug("------------------------"),console.debug("Spiff Commerce Core SDK"),console.debug("Version: 26.35.0"),console.debug(`Application Key Provided: ${!!this.options.applicationKey}`),console.debug("------------------------")}configure(t){At.setHubUrl(t.hubUrl),At.setServerUrl(t.serverUrl),At.setServicesApiUrl(t.servicesApiUrl),this.marketplaceThemeInstallId=t.marketplaceThemeInstallId,this.marketplaceThemeInstallConfigurationId=t.marketplaceThemeInstallConfigurationId,t.bearerAuthenticationToken&&Qn(t.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(!Ci())throw new Error("Application key required to use Flow Service.");return new Rr}async getIntegration(){if(this.activeIntegration)return this.activeIntegration;if(!this.options.applicationKey)throw new Error("Cannot get current Integration without specifying an Application Key.");return this.activeIntegration=Ur(this.options.applicationKey),this.activeIntegration}async canUseAddon(t){var e;try{return((e=(await this.getIntegration()).partner.activeAddons)==null?void 0:e.includes(t))??!1}catch(a){return console.error(a),!1}}async authenticateBundleFromLocalStorage(t){var n,i;const e=M.getMap("bundleOwnerIds");if(e!=null&&e.has(t))return Promise.resolve({success:!0,stakeholderType:_t.Owner});const a=M.getMap("bundlePartnerIds")||new Map;if(a.has(t)){const s=a.get(t),l=(M.getMap("partnerCustomerIds")||new Map).get(s);if(l&&await this.authenticateCustomerId(l)){const d=(i=(n=this.customer)==null?void 0:n.bundleStakeholders)==null?void 0:i.find(A=>{var u;return((u=A.bundle)==null?void 0:u.id)===t});if(d)return Promise.resolve({success:!0,stakeholderType:d.type})}}return Promise.resolve({success:!1})}async authenticateTransactionFromLocalStorage(t){var d,A,u,h,g,m;const e=b.getShadowGraphqlClient(),a=await e.query({query:hs,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t}});if(!a.data.transactions||a.data.transactions.length===0)throw new Error(`Transaction not found: ${t}`);const n=a.data.transactions[0];if(!((A=(d=n.product)==null?void 0:d.partner)==null?void 0:A.id))throw new Error(`Unable to read transaction: ${t}`);if(n.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const s=M.getMap("transactionOwnerIds");if(s!=null&&s.has(t))return Promise.resolve({success:!0,stakeholderType:_t.Owner});const o=M.getMap("transactionCustomerIds");if(o!=null&&o.has(t)){const p=o.get(t);if(p&&await this.authenticateCustomerId(p)){const C=((h=(u=this.customer)==null?void 0:u.bundleStakeholders)==null?void 0:h.find(y=>{var v,S;return(S=(v=y.bundle)==null?void 0:v.transactions)==null?void 0:S.some(E=>E.id===t)}))||((m=(g=this.customer)==null?void 0:g.stakeholders)==null?void 0:m.find(y=>{var v;return((v=y.transaction)==null?void 0:v.id)===t}));if(C)return Promise.resolve({success:!0,stakeholderType:C.type})}}const c=(await e.query({query:gs,errorPolicy:"all",variables:{id:n.workflowId}})).data.workflow;if(!c)throw new Error(`Unable to read workflow: ${n.workflowId}`);return Promise.resolve({success:!1,theme:c.overrideTheme,customLogoLink:n.customLogoLink})}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(t){const e=M.getMap("transactionCustomerIds");e!=null&&e.has(t)&&(e.delete(t),M.setMap("transactionCustomerIds",e))}async customerHasBundleTemplates(t){const n=(await b.getShadowGraphqlClient().query({query:cn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;return n.id?n.hasBundleTemplates??!1:!1}getStakeholderTypeForTransaction(t){var a,n;const e=(n=(a=this.customer)==null?void 0:a.stakeholders)==null?void 0:n.find(i=>{var s;return((s=i.transaction)==null?void 0:s.id)===t});if(e)return e.type}async getOrCreateCustomer(t){var s;this.customer=void 0;const e=b.getShadowGraphqlClient(),n=(await e.query({query:cn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;if(!n.id){const l=(s=(await e.mutate({mutation:Zl,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:t}}})).data)==null?void 0:s.customerCreate;if(!l)throw new Error("Unable to create customer.");return this.storeCustomer(l),this.customer=l,{customer:l,isAuthenticated:!1}}this.storeCustomer(n);const i=await this.authenticateCustomerId(n.id);return{customer:this.customer||n,isAuthenticated:i}}getCustomer(){return this.customer}async authenticateCustomerId(t){var o;const e=b.getShadowGraphqlClient(),a=M.getMap("customerTokens");if(!(a!=null&&a.has(t)))return!1;const n=a.get(t);if(!n)return!1;const s=(o=(await e.mutate({mutation:tc,errorPolicy:"all",fetchPolicy:"no-cache",variables:{loginToken:n}})).data)==null?void 0:o.customerAuthenticate;return s?(this.storeCustomer(s),_a(n),this.customer=s,!0):!1}async generateVerificationCode(t){await b.getShadowGraphqlClient().mutate({mutation:ec,variables:{emailAddress:t}})}async verifyCode(t,e){var i,s;const n=(i=(await b.getShadowGraphqlClient().mutate({mutation:ac,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t,verificationCode:e}})).data)==null?void 0:i.customerVerifyCode;if(n!=null&&n.loginToken){if(!((s=n.partner)!=null&&s.id))throw new Error(`Unable to find customer: ${t}`);const o=M.getMap("customerTokens")||new Map;return o.set(n.id,n.loginToken),M.setMap("customerTokens",o),this.storeCustomer(n),_a(n.loginToken),this.customer={...n,loginToken:void 0},!0}return!1}async getCustomerMetafields(){var e;if(!((e=this.customer)!=null&&e.id))throw new Error("Customer must be logged in before calling this function.");return(await b.getShadowGraphqlClient().query({query:nc,variables:{id:this.customer.id}})).data.metafields}async getNewBundle(t,e,a){var c,d,A,u,h;const i=(A=(await b.getShadowGraphqlClient().mutate({mutation:Lo(((d=(c=a==null?void 0:a.graphql)==null?void 0:c.productCollection)==null?void 0:d.eagerFetchProducts)||!1),variables:{collectionId:t,initialMetadata:e?Object.entries(e).map((g,m)=>({key:g[0],value:g[1]})):void 0,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},fetchPolicy:"no-cache"})).data)==null?void 0:A.bundleCreate;if(!(i!=null&&i.id))throw new Error("Unable to create bundle");const s=M.getMap("bundlePartnerIds")||new Map;s.set(i.id,i.partner.id),M.setMap("bundlePartnerIds",s);const o=M.getMap("bundleOwnerIds")||new Map;o.set(i.id,i.bundleOwnerId),M.setMap("bundleOwnerIds",o);const l=new Ke(this,i,void 0,void 0,i.bundleOwnerId,{eagerFetchProducts:(h=(u=a==null?void 0:a.graphql)==null?void 0:u.productCollection)==null?void 0:h.eagerFetchProducts});return await l.getInitializationPromise(),l}async getExistingBundle(t,e,a,n){var p,f,C,y,v,S,E,B,I,x,F;const i=M.getMap("bundleOwnerIds"),s=i==null?void 0:i.get(t),l=((p=Object.entries(localStorage).find(([k,Q])=>k.startsWith("CognitoIdentityServiceProvider")&&k.endsWith("idToken")))==null?void 0:p[0])||"",c=localStorage.getItem(l),d={};c&&!Ie(c)&&(d.Authorization=`Bearer ${c}`);const A={bundleOwnerId:s,...d,...(f=n==null?void 0:n.graphql)==null?void 0:f.additionalHeaders},u=await b.getShadowGraphqlClient().query({query:No(((y=(C=n==null?void 0:n.graphql)==null?void 0:C.productCollection)==null?void 0:y.eagerFetchProducts)||!1),variables:{id:t},fetchPolicy:"no-cache",context:{headers:A}});if(!((v=u.data)!=null&&v.bundles)||((S=u.data)==null?void 0:S.bundles.length)===0||!((E=u.data)!=null&&E.bundles[0]))throw new Error(`Unable to find bundle: ${t}`);const h=(B=u.data)==null?void 0:B.bundles[0],g=M.getMap("bundlePartnerIds")||new Map;g.set(h.id,h.partner.id),M.setMap("bundlePartnerIds",g);const m=new Ke(this,h,e,a,s,{additionalHeaders:(I=n==null?void 0:n.graphql)==null?void 0:I.additionalHeaders,eagerFetchProducts:(F=(x=n==null?void 0:n.graphql)==null?void 0:x.productCollection)==null?void 0:F.eagerFetchProducts,existingGlobalPropertyState:u.data.globalPropertyState,readonly:n==null?void 0:n.readonly});return await m.getInitializationPromise(),m}async duplicateBundle(t,e,a,n){var p,f,C,y,v,S,E,B;const i=(p=M.getMap("bundleOwnerIds"))==null?void 0:p.get(t),o=((f=Object.entries(localStorage).find(([I,x])=>I.startsWith("CognitoIdentityServiceProvider")&&I.endsWith("idToken")))==null?void 0:f[0])||"",l=localStorage.getItem(o),c={};l&&!Ie(l)&&(c.Authorization=`Bearer ${l}`);const d={bundleOwnerId:i,...c,...(C=n==null?void 0:n.graphql)==null?void 0:C.additionalHeaders},u=(S=(await b.getShadowGraphqlClient().mutate({mutation:Vo(((v=(y=n==null?void 0:n.graphql)==null?void 0:y.productCollection)==null?void 0:v.eagerFetchProducts)||!1),variables:{id:t,template:e,marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId,duplicateTransactions:a},context:{headers:d},fetchPolicy:"no-cache"})).data)==null?void 0:S.bundleDuplicate;if(!(u!=null&&u.id))throw new Error("Unable to duplicate bundle");const h=M.getMap("bundlePartnerIds")||new Map;h.set(u.id,u.partner.id),M.setMap("bundlePartnerIds",h);const g=M.getMap("bundleOwnerIds")||new Map;g.set(u.id,u.bundleOwnerId),M.setMap("bundleOwnerIds",g);const m=new Ke(this,u,void 0,void 0,u.bundleOwnerId,{eagerFetchProducts:(B=(E=n==null?void 0:n.graphql)==null?void 0:E.productCollection)==null?void 0:B.eagerFetchProducts,existingGlobalPropertyState:u.globalPropertyState});return await m.getInitializationPromise(),m}async getBundlesForCustomer(t){var i;if(!((i=this.customer)!=null&&i.id))throw new Error("Customer not authenticated.");const{includeMetadata:e,...a}=t;return(await b.getShadowGraphqlClient().query({query:Zo(e??!1),variables:{...a,id:this.customer.id},fetchPolicy:"no-cache"})).data.customerBundlesFeed}async getBundleStakeholders(){var i;if(!this.customer)throw new Error("Customer not authenticated.");const t=await b.getShadowGraphqlClient().query({query:Ro,variables:{id:this.customer.id},fetchPolicy:"no-cache"});if(!((i=t.data)!=null&&i.customers)||t.data.customers.length===0)throw new Error("Unable to find customer.");const a=t.data.customers[0].bundleStakeholders||[],n=M.getMap("bundlePartnerIds")||new Map;return a.forEach(s=>{var o,l;(o=s.bundle)!=null&&o.id&&((l=s.bundle.partner)!=null&&l.id)&&n.set(s.bundle.id,s.bundle.partner.id)}),M.setMap("bundlePartnerIds",n),a}async getWorkflowExperience(t,e){if(!t)throw new Error("getWorkflowExperience has been called without an options object! This is not supported.");const a=await this.getWorkflowExperiences([t],t.graphql),n=a[0];return e&&await n.getWorkflowManager().injectIntoPreviewService(e(n.getWorkflowManager().getWorkflow())),a[0]}async getWorkflowExperiences(t,e){if(t.length===0)throw new ht("No options provided!");const a=b.getShadowGraphqlClient(),n=async S=>{var x,F,k;if(S.length===0)return[];const E=S.map(Q=>Q.option.transactionId),B=await a.query({query:Zi,variables:{ids:E},errorPolicy:"all",fetchPolicy:"no-cache"}),I=B.data.transactions;if(I.length!==S.length){const Q=((F=(x=B.errors)==null?void 0:x[0])==null?void 0:F.message)||"Unknown error";throw new ht(`Not all transactions were found: ${Q}`)}return!this.activeIntegration&&((k=I[0].integrationProduct)!=null&&k.integration)&&(this.activeIntegration=Promise.resolve(I[0].integrationProduct.integration)),I.map((Q,ot)=>{var R;return{transaction:Q,workflowId:Q.workflowId,readOnly:((R=S.find(et=>et.option.transactionId===Q.id))==null?void 0:R.option.readOnly)??!1,index:S[ot].index}})},i=async S=>{var I,x,F;if(S.length===0)return[];const E=await a.mutate({mutation:Xi,variables:{inputs:S.map(k=>({integrationProductId:k.option.type==="integration"?k.option.integrationProductId:void 0,externalIntegrationId:k.option.type==="external"?k.option.externalIntegrationId:void 0,externalProductId:k.option.type==="external"?k.option.externalProductId:void 0,workflowId:k.option.workflowId,designName:k.option.designName,claim:!0})),marketplaceThemeInstallId:this.marketplaceThemeInstallId,marketplaceThemeInstallConfigurationId:this.marketplaceThemeInstallConfigurationId},errorPolicy:"all",fetchPolicy:"no-cache"}),B=(I=E.data)==null?void 0:I.transactionCreateMany;if(!B||B.length===0){const k=((F=(x=E.errors)==null?void 0:x[0])==null?void 0:F.message)||"Unknown error";throw new ht(`Failed to create transactions: ${k}`)}return B.map((k,Q)=>({transaction:k,workflowId:k.workflowId,readOnly:!1,index:S[Q].index}))},s=t.map((S,E)=>({option:S,index:E})),o=s.filter(S=>S.option.type==="transaction"),l=s.filter(S=>S.option.type==="integration"||S.option.type==="external"),c=ja(o,10),d=ja(l,10),A=(await Promise.all([...c.map(n),...d.map(i)])).flat(),u=[...new Set(A.map(S=>S.workflowId))],h=await Ga(u,e),g=new Map(h.map(S=>[S.id,S])),m=M.getMap("transactionOwnerIds")||new Map,p=A.map(async S=>{var et;const{transaction:E,workflowId:B,readOnly:I,index:x}=S,F=g.get(B),k=t[x];!m.get(E.id)&&E.transactionOwnerId&&m.set(E.id,E.transactionOwnerId);const Q=m.get(E.id)||void 0,ot=new rc({onMutate:()=>({context:{transactionOwnerId:Q,bundleOwnerId:e==null?void 0:e.bundleOwnerId}}),onQuery:()=>({context:{transactionOwnerId:Q,bundleOwnerId:e==null?void 0:e.bundleOwnerId}})}),R={product:E.product,transaction:E,layouts:[],singleVariantsRenderable:(et=k==null?void 0:k.workflowConfiguration)==null?void 0:et.singleVariantsRenderable,stateMutationFunc:I?async()=>{throw new V("State mutation is forbidden in read only mode!")}:async H=>this.updateTransactionState({...H,context:{transactionOwnerId:Q,bundleOwnerId:e==null?void 0:e.bundleOwnerId}}),graphQlClient:()=>ot,readOnly:I,workflow:F,isReloadedTransaction:k.type==="transaction"};if(k.type==="transaction"&&E.workflowState){const H=JSON.parse(E.workflowState);R.layouts=Object.values(H.layouts||{}).map(yt=>yt.layout),await da(H),R.reloadedState=H}else if(!I&&k.workflowState){const H=JSON.parse(k.workflowState);R.layouts=Object.values(H.layouts||{}).map(yt=>yt.layout),await da(H),R.reloadedState=H}else R.layouts=cc(R.transaction,R.workflow);return R.renderableContextService=new Fl(R.layouts),R.delayWorkflowStateSync=!0,{experienceOptions:R,index:x,options:k}}),f=await Promise.all(p);M.setMap("transactionOwnerIds",m);const y=f.sort((S,E)=>S.index-E.index).map(async S=>{const{experienceOptions:E,options:B}=S,I=new Dr(this,E);return await I.getWorkflowManager().getInitializationPromise(),B.type!=="transaction"&&this.customer&&await I.attachCustomerDetails({email:this.customer.emailAddress}),I}),v=await Promise.all(y);return v.forEach(S=>S.getWorkflowManager().setWorkflowStateSyncEnabled(!0)),v}storeCustomer(t){const e=M.getMap("partnerCustomerIds")||new Map;e.set(t.partner.id,t.id),M.setMap("partnerCustomerIds",e)}async getIntegrationProductById(t,e){var s,o;const i=(s=(await b.getShadowGraphqlClient().query({query:rs(e),variables:{ids:[t]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:s.integrationProducts;if(!i||i.length===0||!((o=i[0])!=null&&o.id))throw new Error("Integration product not found.");return new pa(i[0])}async getIntegrationProductFromExternalIds(t,e,a){var o;const s=(o=(await b.getShadowGraphqlClient().query({query:is(a),variables:{externalProductId:e,externalIntegrationId:t},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:o.integrationProductFromExternalIds;if(!(s!=null&&s.id))throw new Error("Integration product not found.");return new pa(s)}async getIntegrationProduct(t){return t.type==="integration"?this.getIntegrationProductById(t.integrationProductId):this.getIntegrationProductFromExternalIds(t.externalIntegrationId,t.externalProductId)}async getShareActionsForTransaction(t){const a=(M.getMap("transactionOwnerIds")||new Map).get(t)||void 0,n=await b.getShadowGraphqlClient().query({query:ns,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t},context:{transactionOwnerId:a}});if(!n.data.transactions||n.data.transactions.length!==1)throw new Error(`Failed to fetch share actions for transaction: ${t}`);return n.data.transactions[0].transactionShareActions}async placeOrder(t){const e=await b.getShadowGraphqlClient().mutate({mutation:ws,variables:{orderItems:t}});if(e.errors)throw new Error(e.errors[0].message);if(!e.data)throw new Error("Failed to create order: No order data in response.");return{id:e.data.orderCreate.id,internalId:e.data.orderCreate.internalId}}}const Ur=async(r,t)=>(await b.getShadowGraphqlClient().query({query:ps,errorPolicy:"all",fetchPolicy:"no-cache",context:{headers:{"x-application-key":r}},variables:{themeConfigurationId:t}})).data.currentIntegration,Ac=async r=>{const e=await b.getShadowGraphqlClient().query({query:as,errorPolicy:"all",fetchPolicy:"network-only",variables:{id:r}});if(e.data.transactions.length!==0)return e.data.transactions[0]},uc=async(r,t)=>{var a;return(a=(await b.getShadowGraphqlClient().query({query:ms,errorPolicy:"all",variables:{themeConfigurationId:r,themeInstallId:t}})).data)==null?void 0:a.marketplaceThemeInstallConfiguration},hc=async r=>{var e,a,n;return(n=(a=(e=(await b.getShadowGraphqlClient().query({query:Cs,errorPolicy:"all",variables:{id:r}})).data)==null?void 0:e.bundles)==null?void 0:a[0])==null?void 0:n.marketplaceThemeInstallConfiguration},gc=async r=>{var e,a,n;return(n=(a=(e=(await b.getShadowGraphqlClient().query({query:fs,errorPolicy:"all",variables:{id:r}})).data)==null?void 0:e.transactions)==null?void 0:a[0])==null?void 0:n.marketplaceThemeInstallConfiguration};function Lr(r,t,e,a){const n=e.width*r.zoom,i=e.height*r.zoom;if(a){const o=r,l=Math.max(t.width/e.width,t.height/e.height);o.zoom=Math.max(l,r.zoom);const c=e.width*o.zoom,d=e.height*o.zoom;return o.x=fe(r.x,t.width-c,0),o.y=fe(r.y,t.height-d,0),o}const s=r;return s.x=fe(s.x,-n,t.width),s.y=fe(s.y,-i,t.height),s}function fe(r,t,e){return Math.min(Math.max(r,t),e)}class Vr{constructor(t,e){this.minZoomScale=[.03],this.maxZoomScale=[20],this._debouncedUpdateFrameOffsets=yn(this.updateFrameOffsets,200),this.targetElements=[],this.onFrameDataChangeListeners=[],this.onZoomChangeListeners=[],this.forceImageCover=t,this.initialZoom=e,this.thresholdSettings={useThreshold:!1,invertThreshold:!1,threshold:128,thresholdSaturation:.5}}connectWorkflowManager(t,e){e&&t.addStepSpecificStorageCallback(async a=>{if(a){const n=a;if(n.currentFrameSources){let i=!1;for(let s=0;s<n.currentFrameSources.length;s++){const o=n.currentFrameSources[s],l=await ce(o),c=this.frameData?this.frameData[s]:void 0;wn(l,c)||(this.frameData||(this.frameData=new Array(n.currentFrameSources.length)),this.frameData[s]=l,i=!0)}i&&(this.onFrameDataChangeListeners.forEach(s=>s(this.frameData)),this.frameData&&this.imageData&&(this.recalculateOffsets(this.imageData),this.updateOffsets(this.offsets),this.recalculateZoomLimits(this.imageData,this.frameData)))}}},e),this.workflowManager=t,this.stepName=e}setTargetElements(t){this.targetElements=t}getFrameData(){return this.frameData}setFrameData(t){if(!t){this.frameData=void 0;return}t.forEach((e,a)=>{const n=Ft.get(e);n&&(this.frameData||(this.frameData=new Array(t.length)),this.frameData[a]=n)})}getImageData(){return this.imageData}getImageSrc(){if(this.imageData){if(this.imageData.svg){const t=Qe(this.imageData.svg,this.imageData.colors||{},!1);return Me(t)}return this.imageData.src}}getOffsets(){return this.offsets}setOffsets(t){this.offsets=t}setZoom(t,e,a,n){if(this.imageData&&this.offsets&&this.frameData){(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length));const i=this.frameData.map((s,o)=>{const l=(e[o]-this.offsets[o].x)/this.offsets[o].zoom,c=(a[o]-this.offsets[o].y)/this.offsets[o].zoom,d=e[o]-l*t[o],A=a[o]-c*t[o];return{x:d,y:A,zoom:this.imageData.width*t[o]/this.imageData.width}});this.updateOffsets(i,n),this.onZoomChangeListeners.forEach(s=>s(t))}}setPatternData(t,e=!0){this.imageData=t,t&&this.frameData&&((e||!this.offsets)&&this.recalculateOffsets(t),this.updateOffsets(this.offsets,void 0,!0)),this.imageData&&this.frameData&&this.recalculateZoomLimits(this.imageData,this.frameData)}updateOffsets(t,e,a){const n=this.imageData;if(!n||!this.frameData)return;if(this.frameData.length!==t.length)throw new V("Frame data and offsets are not the same length. This is a bug. Please report it.");if(!this.offsets.some((s,o)=>!(t[o].x===s.x&&t[o].y===s.y&&t[o].zoom===s.zoom))&&!a){e&&e();return}(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((s,o)=>{this.offsets[o]=Lr(t[o],s,this.imageData,this.forceImageCover)}),this._debouncedUpdateFrameOffsets(this.offsets,n,this.frameData,this.thresholdSettings,e)}getThresholdSettings(){return this.thresholdSettings}setThresholdSettings(t){this.thresholdSettings=t,this.imageData&&this.frameData&&this._debouncedUpdateFrameOffsets(this.offsets,this.imageData,this.frameData,t)}onFrameDataChanged(t){t(this.frameData),this.onFrameDataChangeListeners.push(t)}onZoom(t){this.onZoomChangeListeners.push(t)}updateFrameOffsets(t,e,a,n,i){if(!a||a.length===0||a.some(o=>!o))throw new V("Frame data not set. This is a bug");if(!this.workflowManager)throw new V("No workflow manager set, cannot update offsets.");const s=this.workflowManager.getCommandDispatcher();this.targetElements.forEach((o,l)=>{s(new $([new no(o,e,t[l]),new ro(o,n.useThreshold,n.invertThreshold,n.threshold,n.thresholdSaturation)]))}),this.stepName&&this.workflowManager.updateStorage(this.stepName,{frameOffsetsList:t}),i&&i()}recalculateZoomLimits(t,e){(this.minZoomScale.length!==e.length||this.maxZoomScale.length!==e.length)&&(this.minZoomScale=new Array(e.length),this.maxZoomScale=new Array(e.length)),e.forEach((a,n)=>{const i=Math.max(a.width/t.width,a.height/t.height);this.forceImageCover?(this.minZoomScale[n]=i,this.maxZoomScale[n]=i*2.5):(this.minZoomScale[n]=i/10,this.maxZoomScale[n]=i*2.5)})}recalculateOffsets(t){this.frameData&&((!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((e,a)=>{this.offsets[a]=Da(t,e,this.initialZoom&&!this.forceImageCover?{scale:this.initialZoom}:void 0,this.forceImageCover)}),this._debouncedUpdateFrameOffsets(this.offsets,t,this.frameData,this.thresholdSettings))}}class mc{updateRecipient(t,e,a,n,i,s,o,l,c,d){throw new Error("Method not implemented.")}approveTransaction(t){throw new Error("Method not implemented.")}rejectTransaction(t){throw new Error("Method not implemented.")}getClient(){return this.client??{}}getWorkflowExperience(){return{}}setClient(t){this.client=t}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}async reset(){}updateStateWithServer(t){}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(t){}addPoller(t){}addConfirmCallback(t){}addEditedCallback(t){}addElementsCallback(t){}addInformationResultCallback(t){}addInitCallback(t){}addMakingAdjustmentsCallback(t){}addMandatoryCallback(t){}addMetadataCallback(t){}addSelectionCallback(t){}addStepSpecificStorageCallback(t,e){}addStorageCallback(t){}getCommandDispatcher(){return t=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getProfanities(){return[]}getRegionElements(t){return[]}getSerializedStep(t,e){}getStepSpecificServices(t){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(t){}markUpdateCompleted(t){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}getStepSelections(){return{}}setCurrentAdjustingStepId(t){}setEditedStatus(t,e){}setInformationResults(t){}setMandatoryFulfilled(t,e){}async setSelectionsAndElements(t,e,a){}toggleDesignConfirmed(){}updateMetadata(t,e){}async updateStorage(t,e){}injectIntoPreviewService(t){return Promise.resolve()}ejectFromPreviewService(){}setWorkflowStateSyncEnabled(t){}async updateTransactionShareActions(){}addValidationCallback(t){}setStepError(t,e,a){}getStepErrors(t){}getValidationErrors(){return{steps:new Map}}async updateTransactionStakeholders(){}getStepTags(t){return[]}}var zr=(r=>(r.SelectFrame="SelectFrame",r.SelectImage="SelectImage",r.Position="Position",r))(zr||{});class Gr extends nt{constructor(t,e,a){super(t,e,a);const n=e.data;this.frameService=new Vr(n.forceImageCover,n.initialZoomLevel),this.frameService.connectWorkflowManager(t,e.stepName)}selectVariant(t){const e=this.manager.getRegionElements(this.step.stepName);return ut.selectVariant(this.step,t.getResource(),e,this.manager,a=>this.setUpdateState(a))}onFrameDataChanged(t){this.frameService&&this.frameService.onFrameDataChanged(e=>{e&&t(e)})}async selectImage(t,e=!0,a=!0){var n;if(await ut.selectImage(this.step,t,this.manager,a),e){const i=((n=this.manager.getStepStorage(this.step.stepName))==null?void 0:n.framePatternData)||{};this.manager.updateStorage(this.step.stepName,{framePatternData:{...i,originalAssetKey:t.key,backgroundRemovedAssetKey:void 0,useOriginalAsset:void 0}})}}async canUseBackgroundRemover(){return this.manager.getClient().canUseAddon(Pe.BackgroundRemover)}async canRemoveBackground(){var t,e,a,n;return await this.canUseBackgroundRemover()&&this.hasOriginalImageSelection()&&!!((e=(t=this.frameService)==null?void 0:t.getImageData())!=null&&e.src)&&!((n=(a=this.frameService)==null?void 0:a.getImageData())!=null&&n.svg)}async removeBackgroundFromImageSelection(t=!0){var i;if(!await this.canUseBackgroundRemover())throw new Error("The current Integration does not have access to the Background Remover. Please call canUseBackgroundRemover to ensure you disable this feature when appropriate.");const e=await this.getOriginalImageSelection();if(!e)throw new Error("You must supply an image selection before attempting to remove the background.");const a=await U.removeBackgroundFromAsset(e);t&&await ut.selectImage(this.step,a,this.manager,!1);const n=((i=this.manager.getStepStorage(this.step.stepName))==null?void 0:i.framePatternData)||{};return this.manager.updateStorage(this.step.stepName,{framePatternData:{...n,backgroundRemovedAssetKey:a.key,useOriginalAsset:!t}}),a}changeColors(t){ut.changeColors(this.step,this.manager,t)}getImageData(){if(this.frameService)return this.frameService.getImageData()}async getColorOption(){return this.step.data.colorOption}getAvailableColors(){return this.step.data.colorPickerEnabled?ut.availableColors(this.step,this.manager):Promise.resolve([])}isColorPickerEnabled(){return this.step.data.colorPickerEnabled??!1}async getOriginalImageColors(){const t=this.getImageData();return t!=null&&t.svg?(await st(t.svg)).colors:void 0}getMaxAllowedColors(){return this.step.data.maxColors}getUniqueColorCount(){return ut.getUniqueColorCount(this.step,this.manager)}getCurrentFrameStep(t,e,a,n){return n&&n.length>1&&t===void 0?"SelectFrame":e||a||this.getImageData()?"Position":"SelectImage"}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}getWhitelistedExtensions(){return[...this.step.data.whitelistedExtensions,...this.step.data.whitelistedExtensions.includes(".jpg")?[".jpeg"]:[]]}async getOriginalImageSelection(){var e,a;const t=(a=(e=this.manager.getStepStorage(this.step.stepName))==null?void 0:e.framePatternData)==null?void 0:a.originalAssetKey;if(t)return U.getLocalOrFromServer(t)}async getBackgroundRemovedImageSelection(){var e,a;const t=(a=(e=this.manager.getStepStorage(this.step.stepName))==null?void 0:e.framePatternData)==null?void 0:a.backgroundRemovedAssetKey;if(t)return U.getLocalOrFromServer(t)}hasOriginalImageSelection(){var t,e;return!!((e=(t=this.manager.getStepStorage(this.step.stepName))==null?void 0:t.framePatternData)!=null&&e.originalAssetKey)}hasBackgroundRemovedImageSelection(){var t,e;return!!((e=(t=this.getFrameStepStorage())==null?void 0:t.framePatternData)!=null&&e.backgroundRemovedAssetKey)}getUseOriginalImageSelection(){var t,e;return((e=(t=this.getFrameStepStorage())==null?void 0:t.framePatternData)==null?void 0:e.useOriginalAsset)??!1}async setUseOriginalImageSelection(t){var n;const e=((n=this.getFrameStepStorage())==null?void 0:n.framePatternData)||{};if(e.useOriginalAsset===t)return;const a=await this.getOriginalImageSelection();if(!a)throw new Error("You must provide an image selection before calling setUseOriginalImageSelection");if(t)await this.selectImage(a,!1,!1);else{const i=await this.getBackgroundRemovedImageSelection();if(!i)throw new Error("You must call removeBackgroundFromImageSelection before attempting to apply the image.");await this.selectImage(i,!1,!1)}this.manager.updateStorage(this.step.stepName,{framePatternData:{...e,useOriginalAsset:t}})}getFrameStepStorage(){return this.manager.getStepStorage(this.step.stepName)}}const pc=w.gql`
|
|
2396
2402
|
query GetLoggedInCustomer($email: String!) {
|
|
2397
2403
|
customer(emailAddress: $email) {
|
|
2398
2404
|
id
|