@spiffcommerce/core 10.3.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -1009,6 +1009,7 @@ var t=require("@apollo/client"),e=require("lodash.clonedeep"),A=require("react/j
1009
1009
  id
1010
1010
  customLogoLink
1011
1011
  designName
1012
+ isOrdered
1012
1013
  product {
1013
1014
  id
1014
1015
  partner {
@@ -1085,5 +1086,5 @@ var t=require("@apollo/client"),e=require("lodash.clonedeep"),A=require("react/j
1085
1086
  }
1086
1087
  }
1087
1088
  }
1088
- `,Zo=async t=>{const e=(await wr.getShadowGraphqlClient().query({query:jo,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t}})).data.workflow;return e.steps.forEach((t=>{delete t.data.__typename})),e},$o=(t,e)=>{const A=t.workflowState,i=A?JSON.parse(A):void 0;return i?Object.values(i.layouts).map((t=>t.layout)):e.panels.sort(((t,e)=>t.index-e.index)).map((t=>({id:Ge(),panelId:t.name,name:t.name,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})))};class _o{constructor(t){Oo(this,"options",void 0),Oo(this,"initialized",void 0),Oo(this,"experienceOptions",void 0),Oo(this,"currencyCode",void 0),Oo(this,"updateTransactionState",(async t=>{try{return wr.getShadowGraphqlClient().mutate({...t,mutation:xs})}catch(t){throw console.error(t),new ir("Critical - Unable to synchronize workflow state with server.")}})),this.initialized=!1,this.options=t}getAssetManager(){return xr}getCurrencyCode(){if(void 0===this.currencyCode)throw new Error("No currency code set.");return this.currencyCode}async loadTransactionAuth(t){const e=or.getMap("transactionOwnerIds");if(e?.has(t)){const A=e.get(t);return dr(A),Promise.resolve({success:!0,stakeholderType:Zr.Owner})}const A=wr.getShadowGraphqlClient(),i=await A.query({query:Vo,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t}});if(!i.data.transactions||0===i.data.transactions.length)throw new Error(`Transaction not found: ${t}`);const n=i.data.transactions[0],r=n.product?.partner?.id;if(!r)throw new Error(`Unable to read transaction: ${t}`);const a=async()=>{const t=(await A.query({query:Ko,errorPolicy:"all",variables:{id:n.workflowId}})).data.workflow;if(!t)throw new Error(`Unable to read workflow: ${n.workflowId}`);return{theme:t.overrideTheme,customLogoLink:n.customLogoLink}},s=or.getMap("partnerCustomerTokens");if(s?.has(r)){const e=s.get(r);if(e)return new Promise((i=>{A.mutate({mutation:Wo,variables:{transactionId:t,loginToken:e}}).then((A=>{const n=A.data?.customerAuthenticate.stakeholders?.find((e=>e.transaction?.id===t));if(!n||!n.transaction)throw new Error(`Unable to read transaction: ${t}`);Br(e),i({success:!0,stakeholderType:n.type})})).catch((t=>{console.error(t),a().then((t=>i({success:!1,...t})))}))}))}return Promise.resolve({success:!1,...await a()})}async generateVerificationCode(t,e){await wr.getShadowGraphqlClient().mutate({mutation:Xo,variables:{transactionId:t,emailAddress:e}})}verifyCode(t,e,A){return new Promise((i=>{wr.getShadowGraphqlClient().mutate({mutation:qo,errorPolicy:"all",fetchPolicy:"no-cache",variables:{transactionId:t,emailAddress:e,verificationCode:A}}).then((e=>{if(e.data?.customerVerifyCode.loginToken){if(!e.data.customerVerifyCode.partner?.id)throw new Error(`Unable to find stakeholder for transaction: ${t}`);const A=e.data?.customerVerifyCode.stakeholders?.find((e=>e.transaction?.id===t));if(!A)throw new Error(`Unable to read transaction: ${t}`);const n=or.getMap("partnerCustomerTokens")||new Map;n.set(e.data.customerVerifyCode.partner?.id,e.data.customerVerifyCode.loginToken),or.setMap("partnerCustomerTokens",n),Br(e.data.customerVerifyCode.loginToken),i({success:!0,stakeholderType:A.type})}else i({success:!1})})).catch((()=>{i({success:!1})}))}))}async getWorkflowExperience(t,e,A,i){if(!i)return await this.getWorkflowExperienceDeprecated(t,e,A);const n=async t=>{for(const e in t.layouts){const A=t.layouts[e].elements.filter((t=>t.type===Le.Illustration));for(let t=0;t<A.length;++t){const e=A[t];e.src&&e.svg&&(e.cachedObjectURL=await Ln(e.svg))}const i=t.layouts[e].elements.filter((t=>t.type===Le.Textbox));for(let t=0;t<i.length;++t){const e=i[t];e.fontData?.assetUrl&&Ai(e.fontData.assetUrl)}}},{transaction:r,workflow:a,readOnly:s}=await(async()=>{const t=wr.getShadowGraphqlClient();if(await t.resetStore(),"transaction"===i.type){const{transactionId:e,readOnly:A}=i,n=await t.query({query:Is,variables:{id:e},errorPolicy:"all",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!n.data?.transactions||0===n.data.transactions.length)throw new ir("Existing transaction not found.");const r=n.data?.transactions[0];if(!r.workflowId)throw new ir("Existing transaction has no workflow ID.");const a=await Zo(r.workflowId);if(!r.product)throw new ir("Failed to load transaction, product not available.");return{transaction:r,workflow:a,readOnly:A}}if("integration"===i.type||"external"===i.type){const e=async()=>{const e="integration"===i.type?{integrationProductId:i.integrationProductId}:{externalIntegrationId:i.externalIntegrationId,externalProductId:i.externalProductId},A=await t.mutate({mutation:ys,variables:{...e,bulk:i.bulk,workflowId:i.workflowId,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!A.data||!A.data.transactionCreate)throw new ir("Failed to create transaction!");const n=A.data.transactionCreate;if(!n.product)throw new ir("Failed to create transaction, product not available.");return n},A=Zo(i.workflowId),[n,r]=await Promise.all([e(),A]);return{transaction:n,workflow:r}}throw new ir("No workflow ID provided.")})();if(this.currencyCode=r.product.partner?.currencyCode,this.experienceOptions={product:r.product,transaction:r,layouts:[],stateMutationFunc:s?async()=>{throw new er("State mutation is forbidden in read only mode!")}:this.updateTransactionState,readOnly:s,workflow:a},"transaction"===i.type&&r.workflowState){const t=JSON.parse(r.workflowState);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await ji(t),await n(t),this.experienceOptions.reloadedState=t}else if(!s&&i.workflowState){const t=JSON.parse(i.workflowState);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await ji(t),await n(t),this.experienceOptions.reloadedState=t}else this.experienceOptions.layouts=$o(this.experienceOptions.transaction,this.experienceOptions.workflow);if(this.experienceOptions.previewService=A&&A(a),this.experienceOptions.renderableContextService=new us(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService),"transaction"!==i.type){const t=or.getMap("transactionOwnerIds")||new Map;t.set(r.id,r.transactionOwnerId),dr(r.transactionOwnerId||""),or.setMap("transactionOwnerIds",t)}this.initialized=!0;const o=new To(this,this.experienceOptions);return await o.getWorkflowManager().getInitializationPromise(),o}async initFromIntegrationProduct(t){if(""===t)throw new ir("No integration product ID provided.");const e=wr.getShadowGraphqlClient();await e.resetStore();const A=await e.mutate({mutation:ys,variables:{integrationProductId:t,bulk:this.options.bulk||!1,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!A.data||!A.data.transactionCreate)throw new ir("Failed to create transaction!");const i=A.data.transactionCreate;if(!i.product)throw new ir("Failed to create transaction, product not available.");this.currencyCode=i.product.partner?.currencyCode;const n=or.getMap("transactionOwnerIds")||new Map;n.set(i.id,i.transactionOwnerId),dr(i.transactionOwnerId||""),or.setMap("transactionOwnerIds",n),this.experienceOptions={product:i.product,transaction:i,layouts:[],stateMutationFunc:this.updateTransactionState},this.initialized=!0}async initFromTransaction(t,e=!1){if(""===t)throw new ir("No transaction ID provided.");const A=wr.getShadowGraphqlClient();await A.resetStore();if(e)return await(async()=>{const i=(await A.query({query:Is,variables:{id:t},errorPolicy:"all"})).data?.transactions[0];if(!i)throw new ir("Failed to read transaction.");if(!i.product)throw new ir("Failed to load transaction, product not available.");this.currencyCode=i.product.partner?.currencyCode,this.experienceOptions={product:i.product,transaction:i,layouts:[],stateMutationFunc:async()=>{throw new er("State mutation is forbidden in read only mode!")},readOnly:e},this.initialized=!0})();const i=or.getMap("transactionOwnerIds")||new Map,n=i.get(t);if(n){dr(n);const i=(await A.query({query:Is,variables:{id:t},errorPolicy:"all"})).data?.transactions[0];if(!i)throw new ir("Failed to read transaction.");if(!i.product)throw new ir("Failed to load transaction, product not available.");return this.currencyCode=i.product.partner?.currencyCode,this.experienceOptions={product:i.product,transaction:i,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:e},void(this.initialized=!0)}try{const n=(await A.mutate({mutation:Ds,variables:{id:t},errorPolicy:"all"})).data?.transactionClaim;if(!n)throw new ir("Failed to read transaction.");if(!n.product)throw new ir("Failed to load transaction, product not available.");this.currencyCode=n.product.partner?.currencyCode,n.transactionOwnerId&&(i.set(n.id,n.transactionOwnerId),dr(n.transactionOwnerId),or.setMap("transactionOwnerIds",i)),this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:e},this.initialized=!0}catch{throw new ir("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(t,e,A){if(!this.initialized||!this.experienceOptions)throw new ir("Cannot launch experience: Not initialized.");const i=async t=>{for(const e in t.layouts){const A=t.layouts[e].elements.filter((t=>t.type===Le.Illustration));for(let t=0;t<A.length;++t){const e=A[t];e.src&&e.svg&&(e.cachedObjectURL=await Ln(e.svg))}const i=t.layouts[e].elements.filter((t=>t.type===Le.Textbox));for(let t=0;t<i.length;++t){const e=i[t];e.fontData?.assetUrl&&Ai(e.fontData.assetUrl)}}};if(this.experienceOptions.transaction.workflowId){const t=await Zo(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=t,this.experienceOptions.transaction.workflowState){const t=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await ji(t),await i(t),this.experienceOptions.reloadedState=t}this.experienceOptions.previewService=A&&A(t),this.experienceOptions.renderableContextService=new us(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService);const e=new To(this,this.experienceOptions);return await e.getWorkflowManager().getInitializationPromise(),e}if(t){const n=wr.getShadowGraphqlClient().mutate({mutation:Ms,variables:{workflowId:t,id:this.experienceOptions.transaction.id}}),r=Zo(t);if(await Promise.all([n,r]),this.experienceOptions.workflow=await r,e){const t=JSON.parse(e);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await ji(t),await i(t),this.experienceOptions.reloadedState=t}else this.experienceOptions.layouts=$o(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=A&&A(await r),this.experienceOptions.renderableContextService=new us(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService);const a=new To(this,this.experienceOptions);return await a.getWorkflowManager().getInitializationPromise(),a}throw new ir("No workflow ID provided.")}getPreviewService(){return this.experienceOptions?.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new ir("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new ir("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}}function tc(t,e,A){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var A=t[Symbol.toPrimitive];if(void 0!==A){var i=A.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:A,enumerable:!0,configurable:!0,writable:!0}):t[e]=A,t}class ec{constructor(){tc(this,"getProduct",void 0),tc(this,"getCommandContext",void 0),tc(this,"getAllLayoutData",void 0),tc(this,"getMetadata",void 0),tc(this,"getWorkflowMetadata",void 0),tc(this,"getStepStorage",void 0),tc(this,"getUpdatesPending",void 0)}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}getVariationRecords(){return[]}async reset(){}updateStateWithServer(t){}addVariationRecord(t){return{recordNumber:0,transactionId:"",values:[]}}getCurrentVariationRecord(){}removeVariationRecord(t){return[]}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(t){}addPoller(t){}addConfirmCallback(t){}addCurrentVariationCallback(t){}addEditedCallback(t){}addElementsCallback(t){}addInformationResultCallback(t){}addInitCallback(t){}addMakingAdjustmentsCallback(t){}addMandatoryCallback(t){}addMetadataCallback(t){}addSelectionCallback(t){}addStepSpecificStorageCallback(t,e){}addStorageCallback(t){}addVariationRecordsCallback(t){}getCommandDispatcher(){return t=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}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{}}setCurrentAdjustingStepId(t){}setCurrentVariationRecord(t){}setEditedStatus(t,e){}setInformationResults(t){}setMandatoryFulfilled(t,e){}async setSelectionsAndElements(t,e,A){}setVariationRecords(t){}toggleDesignConfirmed(){}updateMetadata(t,e){}async updateStorage(t,e){}}function Ac(t,e,A){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var A=t[Symbol.toPrimitive];if(void 0!==A){var i=A.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:A,enumerable:!0,configurable:!0,writable:!0}):t[e]=A,t}let ic;var nc;(nc=ic||(ic={})).SelectFrame="SelectFrame",nc.SelectImage="SelectImage",nc.Position="Position";class rc extends Eo{constructor(t,e){super(t,e),Ac(this,"frameService",this.manager.getStepSpecificServices(this.getId())?.frameService)}selectVariant(t){const e=this.manager.getRegionElements(this.step.stepName);return Xs.selectVariant(this.step,t.getResource(),e,this.manager,(t=>this.setUpdateState(t)))}onFrameDataChanged(t){this.frameService&&this.frameService.onFrameDataChanged((e=>{e&&t(e)}))}selectImage(t){return Xs.selectImage(this.step,t,this.manager)}getImageData(){if(this.frameService)return this.frameService.getImageData()}getCurrentFrameStep(t,e,A,i){return i&&i.length>1&&void 0===t?ic.SelectFrame:e||A||this.getImageData()?ic.Position:ic.SelectImage}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}hasVaryingUpload(){return this.step.data.varyUpload}hasVaryingSelection(){return this.step.data.varySelection}}const ac=t=>{const e=(0,i.useRef)(null);let n=(0,i.useRef)(void 0);const[r,a]=(0,i.useState)(void 0),{addEvent:s,removeEvent:o,updateEvent:c,eventCache:l}=br(),[g,h]=(0,i.useState)(!1),[d,u]=(0,i.useState)(!1),{state:B,uiDispatcher:w}=Jr(),E=(0,i.useCallback)((t=>{const e=t;w(new Or({zoom:Math.max(.1,Math.min(e,B.maxZoom))}))}),[w,B.maxZoom]),p=(0,i.useCallback)((t=>{o(t),1===l.length&&(n.current=void 0),2===l.length&&a(void 0);"touch"===t.pointerType&&l.length>1&&l.length-1==1&&(u(!1),h(!1))}),[e,l]),m=(0,i.useCallback)((t=>{s(t);"touch"===t.pointerType&&1===l.length&&(w(new Or({selectedElement:void 0})),u(!0),h(!0))}),[e,d,l]),C=(0,i.useCallback)((t=>{c(t),t.isPrimary&&(n.current={x:t.screenX,y:t.screenY});const e=1===l.length&&"touch"!==l[0].pointerType,A=2===l.length&&"touch"===l[0].pointerType;if(g&&A){const[t,e]=l,A=Math.abs(t.clientX-e.clientX),i=r;i&&E(B.zoom-.0055*(i-A)),a(A)}if(d&&(e||A)&&t.isPrimary){const e=(n?.current?.x||t.screenX)-t.screenX,A=(n?.current?.y||t.screenY)-t.screenY;w(new Or({selectedElement:void 0,xTranslation:B.xTranslation-e/B.zoom,yTranslation:B.yTranslation-A/B.zoom}))}}),[B.xTranslation,B.yTranslation,B.zoom,d,g,E,l,n,r]),f=(0,i.useCallback)((t=>{g&&E(B.zoom-.035*Math.sign(t.deltaY))}),[B,g]);(0,i.useEffect)((()=>{if(!e.current||0===l.length)return;const t=l[0].pointerId,A=e.current.hasPointerCapture(t);d&&!A&&e.current.setPointerCapture(t),!d&&A&&e.current.releasePointerCapture(t)}),[e,d,l]),Ya([" "],(()=>{u(!0),w(new Or({selectedElement:void 0}))}),(()=>u(!1))),Ya(["Control"],(()=>h(!0)),(()=>h(!1)));const Q=(0,i.useMemo)((()=>({cursor:d&&0===l.length?"grab":d&&1===l.length?"grabbing":g?"zoom-in":void 0,width:"100%",height:"100%",overflow:"clip"})),[d,g,l]);return(0,A.jsx)("div",{ref:e,className:"transform-wrapper",onWheel:f,onPointerDown:m,onPointerUp:p,onPointerCancel:p,onPointerLeave:p,onPointerMove:C,style:Q,children:t.children})};
1089
+ `,Zo=async t=>{const e=(await wr.getShadowGraphqlClient().query({query:jo,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t}})).data.workflow;return e.steps.forEach((t=>{delete t.data.__typename})),e},$o=(t,e)=>{const A=t.workflowState,i=A?JSON.parse(A):void 0;return i?Object.values(i.layouts).map((t=>t.layout)):e.panels.sort(((t,e)=>t.index-e.index)).map((t=>({id:Ge(),panelId:t.name,name:t.name,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})))};class _o{constructor(t){Oo(this,"options",void 0),Oo(this,"initialized",void 0),Oo(this,"experienceOptions",void 0),Oo(this,"currencyCode",void 0),Oo(this,"updateTransactionState",(async t=>{try{return wr.getShadowGraphqlClient().mutate({...t,mutation:xs})}catch(t){throw console.error(t),new ir("Critical - Unable to synchronize workflow state with server.")}})),this.initialized=!1,this.options=t}getAssetManager(){return xr}getCurrencyCode(){if(void 0===this.currencyCode)throw new Error("No currency code set.");return this.currencyCode}async loadTransactionAuth(t){const e=wr.getShadowGraphqlClient(),A=await e.query({query:Vo,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t}});if(!A.data.transactions||0===A.data.transactions.length)throw new Error(`Transaction not found: ${t}`);const i=A.data.transactions[0],n=i.product?.partner?.id;if(!n)throw new Error(`Unable to read transaction: ${t}`);if(i.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const r=or.getMap("transactionOwnerIds");if(r?.has(t)){const e=r.get(t);return dr(e),Promise.resolve({success:!0,stakeholderType:Zr.Owner})}const a=async()=>{const t=(await e.query({query:Ko,errorPolicy:"all",variables:{id:i.workflowId}})).data.workflow;if(!t)throw new Error(`Unable to read workflow: ${i.workflowId}`);return{theme:t.overrideTheme,customLogoLink:i.customLogoLink}},s=or.getMap("partnerCustomerTokens");if(s?.has(n)){const A=s.get(n);if(A)return new Promise((i=>{e.mutate({mutation:Wo,variables:{transactionId:t,loginToken:A}}).then((e=>{const n=e.data?.customerAuthenticate.stakeholders?.find((e=>e.transaction?.id===t));if(!n||!n.transaction)throw new Error(`Unable to read transaction: ${t}`);Br(A),i({success:!0,stakeholderType:n.type})})).catch((t=>{console.error(t),a().then((t=>i({success:!1,...t})))}))}))}return Promise.resolve({success:!1,...await a()})}async generateVerificationCode(t,e){await wr.getShadowGraphqlClient().mutate({mutation:Xo,variables:{transactionId:t,emailAddress:e}})}verifyCode(t,e,A){return new Promise((i=>{wr.getShadowGraphqlClient().mutate({mutation:qo,errorPolicy:"all",fetchPolicy:"no-cache",variables:{transactionId:t,emailAddress:e,verificationCode:A}}).then((e=>{if(e.data?.customerVerifyCode.loginToken){if(!e.data.customerVerifyCode.partner?.id)throw new Error(`Unable to find stakeholder for transaction: ${t}`);const A=e.data?.customerVerifyCode.stakeholders?.find((e=>e.transaction?.id===t));if(!A)throw new Error(`Unable to read transaction: ${t}`);const n=or.getMap("partnerCustomerTokens")||new Map;n.set(e.data.customerVerifyCode.partner?.id,e.data.customerVerifyCode.loginToken),or.setMap("partnerCustomerTokens",n),Br(e.data.customerVerifyCode.loginToken),i({success:!0,stakeholderType:A.type})}else i({success:!1})})).catch((()=>{i({success:!1})}))}))}async getWorkflowExperience(t,e,A,i){if(!i)return await this.getWorkflowExperienceDeprecated(t,e,A);const n=async t=>{for(const e in t.layouts){const A=t.layouts[e].elements.filter((t=>t.type===Le.Illustration));for(let t=0;t<A.length;++t){const e=A[t];e.src&&e.svg&&(e.cachedObjectURL=await Ln(e.svg))}const i=t.layouts[e].elements.filter((t=>t.type===Le.Textbox));for(let t=0;t<i.length;++t){const e=i[t];e.fontData?.assetUrl&&Ai(e.fontData.assetUrl)}}},{transaction:r,workflow:a,readOnly:s}=await(async()=>{const t=wr.getShadowGraphqlClient();if(await t.resetStore(),"transaction"===i.type){const{transactionId:e,readOnly:A}=i,n=await t.query({query:Is,variables:{id:e},errorPolicy:"all",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!n.data?.transactions||0===n.data.transactions.length)throw new ir("Existing transaction not found.");const r=n.data?.transactions[0];if(!r.workflowId)throw new ir("Existing transaction has no workflow ID.");const a=await Zo(r.workflowId);if(!r.product)throw new ir("Failed to load transaction, product not available.");return{transaction:r,workflow:a,readOnly:A}}if("integration"===i.type||"external"===i.type){const e=async()=>{const e="integration"===i.type?{integrationProductId:i.integrationProductId}:{externalIntegrationId:i.externalIntegrationId,externalProductId:i.externalProductId},A=await t.mutate({mutation:ys,variables:{...e,bulk:i.bulk,workflowId:i.workflowId,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!A.data||!A.data.transactionCreate)throw new ir("Failed to create transaction!");const n=A.data.transactionCreate;if(!n.product)throw new ir("Failed to create transaction, product not available.");return n},A=Zo(i.workflowId),[n,r]=await Promise.all([e(),A]);return{transaction:n,workflow:r}}throw new ir("No workflow ID provided.")})();if(this.currencyCode=r.product.partner?.currencyCode,this.experienceOptions={product:r.product,transaction:r,layouts:[],stateMutationFunc:s?async()=>{throw new er("State mutation is forbidden in read only mode!")}:this.updateTransactionState,readOnly:s,workflow:a},"transaction"===i.type&&r.workflowState){const t=JSON.parse(r.workflowState);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await ji(t),await n(t),this.experienceOptions.reloadedState=t}else if(!s&&i.workflowState){const t=JSON.parse(i.workflowState);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await ji(t),await n(t),this.experienceOptions.reloadedState=t}else this.experienceOptions.layouts=$o(this.experienceOptions.transaction,this.experienceOptions.workflow);if(this.experienceOptions.previewService=A&&A(a),this.experienceOptions.renderableContextService=new us(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService),"transaction"!==i.type){const t=or.getMap("transactionOwnerIds")||new Map;t.set(r.id,r.transactionOwnerId),dr(r.transactionOwnerId||""),or.setMap("transactionOwnerIds",t)}this.initialized=!0;const o=new To(this,this.experienceOptions);return await o.getWorkflowManager().getInitializationPromise(),o}async initFromIntegrationProduct(t){if(""===t)throw new ir("No integration product ID provided.");const e=wr.getShadowGraphqlClient();await e.resetStore();const A=await e.mutate({mutation:ys,variables:{integrationProductId:t,bulk:this.options.bulk||!1,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!A.data||!A.data.transactionCreate)throw new ir("Failed to create transaction!");const i=A.data.transactionCreate;if(!i.product)throw new ir("Failed to create transaction, product not available.");this.currencyCode=i.product.partner?.currencyCode;const n=or.getMap("transactionOwnerIds")||new Map;n.set(i.id,i.transactionOwnerId),dr(i.transactionOwnerId||""),or.setMap("transactionOwnerIds",n),this.experienceOptions={product:i.product,transaction:i,layouts:[],stateMutationFunc:this.updateTransactionState},this.initialized=!0}async initFromTransaction(t,e=!1){if(""===t)throw new ir("No transaction ID provided.");const A=wr.getShadowGraphqlClient();await A.resetStore();if(e)return await(async()=>{const i=(await A.query({query:Is,variables:{id:t},errorPolicy:"all"})).data?.transactions[0];if(!i)throw new ir("Failed to read transaction.");if(!i.product)throw new ir("Failed to load transaction, product not available.");this.currencyCode=i.product.partner?.currencyCode,this.experienceOptions={product:i.product,transaction:i,layouts:[],stateMutationFunc:async()=>{throw new er("State mutation is forbidden in read only mode!")},readOnly:e},this.initialized=!0})();const i=or.getMap("transactionOwnerIds")||new Map,n=i.get(t);if(n){dr(n);const i=(await A.query({query:Is,variables:{id:t},errorPolicy:"all"})).data?.transactions[0];if(!i)throw new ir("Failed to read transaction.");if(!i.product)throw new ir("Failed to load transaction, product not available.");return this.currencyCode=i.product.partner?.currencyCode,this.experienceOptions={product:i.product,transaction:i,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:e},void(this.initialized=!0)}try{const n=(await A.mutate({mutation:Ds,variables:{id:t},errorPolicy:"all"})).data?.transactionClaim;if(!n)throw new ir("Failed to read transaction.");if(!n.product)throw new ir("Failed to load transaction, product not available.");this.currencyCode=n.product.partner?.currencyCode,n.transactionOwnerId&&(i.set(n.id,n.transactionOwnerId),dr(n.transactionOwnerId),or.setMap("transactionOwnerIds",i)),this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:e},this.initialized=!0}catch{throw new ir("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(t,e,A){if(!this.initialized||!this.experienceOptions)throw new ir("Cannot launch experience: Not initialized.");const i=async t=>{for(const e in t.layouts){const A=t.layouts[e].elements.filter((t=>t.type===Le.Illustration));for(let t=0;t<A.length;++t){const e=A[t];e.src&&e.svg&&(e.cachedObjectURL=await Ln(e.svg))}const i=t.layouts[e].elements.filter((t=>t.type===Le.Textbox));for(let t=0;t<i.length;++t){const e=i[t];e.fontData?.assetUrl&&Ai(e.fontData.assetUrl)}}};if(this.experienceOptions.transaction.workflowId){const t=await Zo(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=t,this.experienceOptions.transaction.workflowState){const t=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await ji(t),await i(t),this.experienceOptions.reloadedState=t}this.experienceOptions.previewService=A&&A(t),this.experienceOptions.renderableContextService=new us(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService);const e=new To(this,this.experienceOptions);return await e.getWorkflowManager().getInitializationPromise(),e}if(t){const n=wr.getShadowGraphqlClient().mutate({mutation:Ms,variables:{workflowId:t,id:this.experienceOptions.transaction.id}}),r=Zo(t);if(await Promise.all([n,r]),this.experienceOptions.workflow=await r,e){const t=JSON.parse(e);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await ji(t),await i(t),this.experienceOptions.reloadedState=t}else this.experienceOptions.layouts=$o(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=A&&A(await r),this.experienceOptions.renderableContextService=new us(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService);const a=new To(this,this.experienceOptions);return await a.getWorkflowManager().getInitializationPromise(),a}throw new ir("No workflow ID provided.")}getPreviewService(){return this.experienceOptions?.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new ir("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new ir("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}}function tc(t,e,A){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var A=t[Symbol.toPrimitive];if(void 0!==A){var i=A.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:A,enumerable:!0,configurable:!0,writable:!0}):t[e]=A,t}class ec{constructor(){tc(this,"getProduct",void 0),tc(this,"getCommandContext",void 0),tc(this,"getAllLayoutData",void 0),tc(this,"getMetadata",void 0),tc(this,"getWorkflowMetadata",void 0),tc(this,"getStepStorage",void 0),tc(this,"getUpdatesPending",void 0)}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}getVariationRecords(){return[]}async reset(){}updateStateWithServer(t){}addVariationRecord(t){return{recordNumber:0,transactionId:"",values:[]}}getCurrentVariationRecord(){}removeVariationRecord(t){return[]}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(t){}addPoller(t){}addConfirmCallback(t){}addCurrentVariationCallback(t){}addEditedCallback(t){}addElementsCallback(t){}addInformationResultCallback(t){}addInitCallback(t){}addMakingAdjustmentsCallback(t){}addMandatoryCallback(t){}addMetadataCallback(t){}addSelectionCallback(t){}addStepSpecificStorageCallback(t,e){}addStorageCallback(t){}addVariationRecordsCallback(t){}getCommandDispatcher(){return t=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}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{}}setCurrentAdjustingStepId(t){}setCurrentVariationRecord(t){}setEditedStatus(t,e){}setInformationResults(t){}setMandatoryFulfilled(t,e){}async setSelectionsAndElements(t,e,A){}setVariationRecords(t){}toggleDesignConfirmed(){}updateMetadata(t,e){}async updateStorage(t,e){}}function Ac(t,e,A){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var A=t[Symbol.toPrimitive];if(void 0!==A){var i=A.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:A,enumerable:!0,configurable:!0,writable:!0}):t[e]=A,t}let ic;var nc;(nc=ic||(ic={})).SelectFrame="SelectFrame",nc.SelectImage="SelectImage",nc.Position="Position";class rc extends Eo{constructor(t,e){super(t,e),Ac(this,"frameService",this.manager.getStepSpecificServices(this.getId())?.frameService)}selectVariant(t){const e=this.manager.getRegionElements(this.step.stepName);return Xs.selectVariant(this.step,t.getResource(),e,this.manager,(t=>this.setUpdateState(t)))}onFrameDataChanged(t){this.frameService&&this.frameService.onFrameDataChanged((e=>{e&&t(e)}))}selectImage(t){return Xs.selectImage(this.step,t,this.manager)}getImageData(){if(this.frameService)return this.frameService.getImageData()}getCurrentFrameStep(t,e,A,i){return i&&i.length>1&&void 0===t?ic.SelectFrame:e||A||this.getImageData()?ic.Position:ic.SelectImage}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}hasVaryingUpload(){return this.step.data.varyUpload}hasVaryingSelection(){return this.step.data.varySelection}}const ac=t=>{const e=(0,i.useRef)(null);let n=(0,i.useRef)(void 0);const[r,a]=(0,i.useState)(void 0),{addEvent:s,removeEvent:o,updateEvent:c,eventCache:l}=br(),[g,h]=(0,i.useState)(!1),[d,u]=(0,i.useState)(!1),{state:B,uiDispatcher:w}=Jr(),E=(0,i.useCallback)((t=>{const e=t;w(new Or({zoom:Math.max(.1,Math.min(e,B.maxZoom))}))}),[w,B.maxZoom]),p=(0,i.useCallback)((t=>{o(t),1===l.length&&(n.current=void 0),2===l.length&&a(void 0);"touch"===t.pointerType&&l.length>1&&l.length-1==1&&(u(!1),h(!1))}),[e,l]),m=(0,i.useCallback)((t=>{s(t);"touch"===t.pointerType&&1===l.length&&(w(new Or({selectedElement:void 0})),u(!0),h(!0))}),[e,d,l]),C=(0,i.useCallback)((t=>{c(t),t.isPrimary&&(n.current={x:t.screenX,y:t.screenY});const e=1===l.length&&"touch"!==l[0].pointerType,A=2===l.length&&"touch"===l[0].pointerType;if(g&&A){const[t,e]=l,A=Math.abs(t.clientX-e.clientX),i=r;i&&E(B.zoom-.0055*(i-A)),a(A)}if(d&&(e||A)&&t.isPrimary){const e=(n?.current?.x||t.screenX)-t.screenX,A=(n?.current?.y||t.screenY)-t.screenY;w(new Or({selectedElement:void 0,xTranslation:B.xTranslation-e/B.zoom,yTranslation:B.yTranslation-A/B.zoom}))}}),[B.xTranslation,B.yTranslation,B.zoom,d,g,E,l,n,r]),f=(0,i.useCallback)((t=>{g&&E(B.zoom-.035*Math.sign(t.deltaY))}),[B,g]);(0,i.useEffect)((()=>{if(!e.current||0===l.length)return;const t=l[0].pointerId,A=e.current.hasPointerCapture(t);d&&!A&&e.current.setPointerCapture(t),!d&&A&&e.current.releasePointerCapture(t)}),[e,d,l]),Ya([" "],(()=>{u(!0),w(new Or({selectedElement:void 0}))}),(()=>u(!1))),Ya(["Control"],(()=>h(!0)),(()=>h(!1)));const Q=(0,i.useMemo)((()=>({cursor:d&&0===l.length?"grab":d&&1===l.length?"grabbing":g?"zoom-in":void 0,width:"100%",height:"100%",overflow:"clip"})),[d,g,l]);return(0,A.jsx)("div",{ref:e,className:"transform-wrapper",onWheel:f,onPointerDown:m,onPointerUp:p,onPointerCancel:p,onPointerLeave:p,onPointerMove:C,style:Q,children:t.children})};
1089
1090
  //# sourceMappingURL=main.js.map
package/dist/module.js CHANGED
@@ -1009,6 +1009,7 @@ import{CommandContext as A,AssetType as t,BringForwardCommand as e,BringToFrontC
1009
1009
  id
1010
1010
  customLogoLink
1011
1011
  designName
1012
+ isOrdered
1012
1013
  product {
1013
1014
  id
1014
1015
  partner {
@@ -1085,5 +1086,5 @@ import{CommandContext as A,AssetType as t,BringForwardCommand as e,BringToFrontC
1085
1086
  }
1086
1087
  }
1087
1088
  }
1088
- `,$i=async A=>{const t=(await Dt.getShadowGraphqlClient().query({query:Ki,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:A}})).data.workflow;return t.steps.forEach((A=>{delete A.data.__typename})),t},_i=(A,t)=>{const e=A.workflowState,n=e?JSON.parse(e):void 0;return n?Object.values(n.layouts).map((A=>A.layout)):t.panels.sort(((A,t)=>A.index-t.index)).map((A=>({id:F(),panelId:A.name,name:A.name,index:A.index,createdAt:new Date,updatedAt:new Date,transparentBackground:A.transparentBackground,height:A.height,width:A.width,previewRegion:A.previewRegion,useEditableArea:A.useEditableArea,editableArea:A.editableArea})))};class Aa{constructor(A){ji(this,"options",void 0),ji(this,"initialized",void 0),ji(this,"experienceOptions",void 0),ji(this,"currencyCode",void 0),ji(this,"updateTransactionState",(async A=>{try{return Dt.getShadowGraphqlClient().mutate({...A,mutation:vn})}catch(A){throw console.error(A),new rt("Critical - Unable to synchronize workflow state with server.")}})),this.initialized=!1,this.options=A}getAssetManager(){return St}getCurrencyCode(){if(void 0===this.currencyCode)throw new Error("No currency code set.");return this.currencyCode}async loadTransactionAuth(A){const t=lt.getMap("transactionOwnerIds");if(t?.has(A)){const e=t.get(A);return Qt(e),Promise.resolve({success:!0,stakeholderType:te.Owner})}const e=Dt.getShadowGraphqlClient(),n=await e.query({query:Vi,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:A}});if(!n.data.transactions||0===n.data.transactions.length)throw new Error(`Transaction not found: ${A}`);const i=n.data.transactions[0],a=i.product?.partner?.id;if(!a)throw new Error(`Unable to read transaction: ${A}`);const o=async()=>{const A=(await e.query({query:Wi,errorPolicy:"all",variables:{id:i.workflowId}})).data.workflow;if(!A)throw new Error(`Unable to read workflow: ${i.workflowId}`);return{theme:A.overrideTheme,customLogoLink:i.customLogoLink}},r=lt.getMap("partnerCustomerTokens");if(r?.has(a)){const t=r.get(a);if(t)return new Promise((n=>{e.mutate({mutation:Xi,variables:{transactionId:A,loginToken:t}}).then((e=>{const i=e.data?.customerAuthenticate.stakeholders?.find((t=>t.transaction?.id===A));if(!i||!i.transaction)throw new Error(`Unable to read transaction: ${A}`);ut(t),n({success:!0,stakeholderType:i.type})})).catch((A=>{console.error(A),o().then((A=>n({success:!1,...A})))}))}))}return Promise.resolve({success:!1,...await o()})}async generateVerificationCode(A,t){await Dt.getShadowGraphqlClient().mutate({mutation:qi,variables:{transactionId:A,emailAddress:t}})}verifyCode(A,t,e){return new Promise((n=>{Dt.getShadowGraphqlClient().mutate({mutation:Zi,errorPolicy:"all",fetchPolicy:"no-cache",variables:{transactionId:A,emailAddress:t,verificationCode:e}}).then((t=>{if(t.data?.customerVerifyCode.loginToken){if(!t.data.customerVerifyCode.partner?.id)throw new Error(`Unable to find stakeholder for transaction: ${A}`);const e=t.data?.customerVerifyCode.stakeholders?.find((t=>t.transaction?.id===A));if(!e)throw new Error(`Unable to read transaction: ${A}`);const i=lt.getMap("partnerCustomerTokens")||new Map;i.set(t.data.customerVerifyCode.partner?.id,t.data.customerVerifyCode.loginToken),lt.setMap("partnerCustomerTokens",i),ut(t.data.customerVerifyCode.loginToken),n({success:!0,stakeholderType:e.type})}else n({success:!1})})).catch((()=>{n({success:!1})}))}))}async getWorkflowExperience(A,t,e,n){if(!n)return await this.getWorkflowExperienceDeprecated(A,t,e);const i=async A=>{for(const t in A.layouts){const e=A.layouts[t].elements.filter((A=>A.type===E.Illustration));for(let A=0;A<e.length;++A){const t=e[A];t.src&&t.svg&&(t.cachedObjectURL=await dA(t.svg))}const n=A.layouts[t].elements.filter((A=>A.type===E.Textbox));for(let A=0;A<n.length;++A){const t=n[A];t.fontData?.assetUrl&&U(t.fontData.assetUrl)}}},{transaction:a,workflow:o,readOnly:r}=await(async()=>{const A=Dt.getShadowGraphqlClient();if(await A.resetStore(),"transaction"===n.type){const{transactionId:t,readOnly:e}=n,i=await A.query({query:Sn,variables:{id:t},errorPolicy:"all",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!i.data?.transactions||0===i.data.transactions.length)throw new rt("Existing transaction not found.");const a=i.data?.transactions[0];if(!a.workflowId)throw new rt("Existing transaction has no workflow ID.");const o=await $i(a.workflowId);if(!a.product)throw new rt("Failed to load transaction, product not available.");return{transaction:a,workflow:o,readOnly:e}}if("integration"===n.type||"external"===n.type){const t=async()=>{const t="integration"===n.type?{integrationProductId:n.integrationProductId}:{externalIntegrationId:n.externalIntegrationId,externalProductId:n.externalProductId},e=await A.mutate({mutation:Yn,variables:{...t,bulk:n.bulk,workflowId:n.workflowId,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!e.data||!e.data.transactionCreate)throw new rt("Failed to create transaction!");const i=e.data.transactionCreate;if(!i.product)throw new rt("Failed to create transaction, product not available.");return i},e=$i(n.workflowId),[i,a]=await Promise.all([t(),e]);return{transaction:i,workflow:a}}throw new rt("No workflow ID provided.")})();if(this.currencyCode=a.product.partner?.currencyCode,this.experienceOptions={product:a.product,transaction:a,layouts:[],stateMutationFunc:r?async()=>{throw new at("State mutation is forbidden in read only mode!")}:this.updateTransactionState,readOnly:r,workflow:o},"transaction"===n.type&&a.workflowState){const A=JSON.parse(a.workflowState);this.experienceOptions.layouts=Object.values(A.layouts).map((A=>A.layout)),await v(A),await i(A),this.experienceOptions.reloadedState=A}else if(!r&&n.workflowState){const A=JSON.parse(n.workflowState);this.experienceOptions.layouts=Object.values(A.layouts).map((A=>A.layout)),await v(A),await i(A),this.experienceOptions.reloadedState=A}else this.experienceOptions.layouts=_i(this.experienceOptions.transaction,this.experienceOptions.workflow);if(this.experienceOptions.previewService=e&&e(o),this.experienceOptions.renderableContextService=new un(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService),"transaction"!==n.type){const A=lt.getMap("transactionOwnerIds")||new Map;A.set(a.id,a.transactionOwnerId),Qt(a.transactionOwnerId||""),lt.setMap("transactionOwnerIds",A)}this.initialized=!0;const s=new zi(this,this.experienceOptions);return await s.getWorkflowManager().getInitializationPromise(),s}async initFromIntegrationProduct(A){if(""===A)throw new rt("No integration product ID provided.");const t=Dt.getShadowGraphqlClient();await t.resetStore();const e=await t.mutate({mutation:Yn,variables:{integrationProductId:A,bulk:this.options.bulk||!1,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!e.data||!e.data.transactionCreate)throw new rt("Failed to create transaction!");const n=e.data.transactionCreate;if(!n.product)throw new rt("Failed to create transaction, product not available.");this.currencyCode=n.product.partner?.currencyCode;const i=lt.getMap("transactionOwnerIds")||new Map;i.set(n.id,n.transactionOwnerId),Qt(n.transactionOwnerId||""),lt.setMap("transactionOwnerIds",i),this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState},this.initialized=!0}async initFromTransaction(A,t=!1){if(""===A)throw new rt("No transaction ID provided.");const e=Dt.getShadowGraphqlClient();await e.resetStore();if(t)return await(async()=>{const n=(await e.query({query:Sn,variables:{id:A},errorPolicy:"all"})).data?.transactions[0];if(!n)throw new rt("Failed to read transaction.");if(!n.product)throw new rt("Failed to load transaction, product not available.");this.currencyCode=n.product.partner?.currencyCode,this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:async()=>{throw new at("State mutation is forbidden in read only mode!")},readOnly:t},this.initialized=!0})();const n=lt.getMap("transactionOwnerIds")||new Map,i=n.get(A);if(i){Qt(i);const n=(await e.query({query:Sn,variables:{id:A},errorPolicy:"all"})).data?.transactions[0];if(!n)throw new rt("Failed to read transaction.");if(!n.product)throw new rt("Failed to load transaction, product not available.");return this.currencyCode=n.product.partner?.currencyCode,this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:t},void(this.initialized=!0)}try{const i=(await e.mutate({mutation:xn,variables:{id:A},errorPolicy:"all"})).data?.transactionClaim;if(!i)throw new rt("Failed to read transaction.");if(!i.product)throw new rt("Failed to load transaction, product not available.");this.currencyCode=i.product.partner?.currencyCode,i.transactionOwnerId&&(n.set(i.id,i.transactionOwnerId),Qt(i.transactionOwnerId),lt.setMap("transactionOwnerIds",n)),this.experienceOptions={product:i.product,transaction:i,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:t},this.initialized=!0}catch{throw new rt("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(A,t,e){if(!this.initialized||!this.experienceOptions)throw new rt("Cannot launch experience: Not initialized.");const n=async A=>{for(const t in A.layouts){const e=A.layouts[t].elements.filter((A=>A.type===E.Illustration));for(let A=0;A<e.length;++A){const t=e[A];t.src&&t.svg&&(t.cachedObjectURL=await dA(t.svg))}const n=A.layouts[t].elements.filter((A=>A.type===E.Textbox));for(let A=0;A<n.length;++A){const t=n[A];t.fontData?.assetUrl&&U(t.fontData.assetUrl)}}};if(this.experienceOptions.transaction.workflowId){const A=await $i(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=A,this.experienceOptions.transaction.workflowState){const A=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(A.layouts).map((A=>A.layout)),await v(A),await n(A),this.experienceOptions.reloadedState=A}this.experienceOptions.previewService=e&&e(A),this.experienceOptions.renderableContextService=new un(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService);const t=new zi(this,this.experienceOptions);return await t.getWorkflowManager().getInitializationPromise(),t}if(A){const i=Dt.getShadowGraphqlClient().mutate({mutation:Nn,variables:{workflowId:A,id:this.experienceOptions.transaction.id}}),a=$i(A);if(await Promise.all([i,a]),this.experienceOptions.workflow=await a,t){const A=JSON.parse(t);this.experienceOptions.layouts=Object.values(A.layouts).map((A=>A.layout)),await v(A),await n(A),this.experienceOptions.reloadedState=A}else this.experienceOptions.layouts=_i(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=e&&e(await a),this.experienceOptions.renderableContextService=new un(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService);const o=new zi(this,this.experienceOptions);return await o.getWorkflowManager().getInitializationPromise(),o}throw new rt("No workflow ID provided.")}getPreviewService(){return this.experienceOptions?.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new rt("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new rt("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}}function ta(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class ea{constructor(){ta(this,"getProduct",void 0),ta(this,"getCommandContext",void 0),ta(this,"getAllLayoutData",void 0),ta(this,"getMetadata",void 0),ta(this,"getWorkflowMetadata",void 0),ta(this,"getStepStorage",void 0),ta(this,"getUpdatesPending",void 0)}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}getVariationRecords(){return[]}async reset(){}updateStateWithServer(A){}addVariationRecord(A){return{recordNumber:0,transactionId:"",values:[]}}getCurrentVariationRecord(){}removeVariationRecord(A){return[]}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(A){}addPoller(A){}addConfirmCallback(A){}addCurrentVariationCallback(A){}addEditedCallback(A){}addElementsCallback(A){}addInformationResultCallback(A){}addInitCallback(A){}addMakingAdjustmentsCallback(A){}addMandatoryCallback(A){}addMetadataCallback(A){}addSelectionCallback(A){}addStepSpecificStorageCallback(A,t){}addStorageCallback(A){}addVariationRecordsCallback(A){}getCommandDispatcher(){return A=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getProfanities(){return[]}getRegionElements(A){return[]}getSerializedStep(A,t){}getStepSpecificServices(A){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(A){}markUpdateCompleted(A){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}setCurrentAdjustingStepId(A){}setCurrentVariationRecord(A){}setEditedStatus(A,t){}setInformationResults(A){}setMandatoryFulfilled(A,t){}async setSelectionsAndElements(A,t,e){}setVariationRecords(A){}toggleDesignConfirmed(){}updateMetadata(A,t){}async updateStorage(A,t){}}function na(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}let ia;var aa;(aa=ia||(ia={})).SelectFrame="SelectFrame",aa.SelectImage="SelectImage",aa.Position="Position";class oa extends mi{constructor(A,t){super(A,t),na(this,"frameService",this.manager.getStepSpecificServices(this.getId())?.frameService)}selectVariant(A){const t=this.manager.getRegionElements(this.step.stepName);return Ai.selectVariant(this.step,A.getResource(),t,this.manager,(A=>this.setUpdateState(A)))}onFrameDataChanged(A){this.frameService&&this.frameService.onFrameDataChanged((t=>{t&&A(t)}))}selectImage(A){return Ai.selectImage(this.step,A,this.manager)}getImageData(){if(this.frameService)return this.frameService.getImageData()}getCurrentFrameStep(A,t,e,n){return n&&n.length>1&&void 0===A?ia.SelectFrame:t||e||this.getImageData()?ia.Position:ia.SelectImage}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}hasVaryingUpload(){return this.step.data.varyUpload}hasVaryingSelection(){return this.step.data.varySelection}}const ra=A=>{const t=kA(null);let e=kA(void 0);const[n,i]=NA(void 0),{addEvent:a,removeEvent:o,updateEvent:r,eventCache:s}=Pt(),[c,g]=NA(!1),[B,l]=NA(!1),{state:w,uiDispatcher:d}=Kt(),E=RA((A=>{const t=A;d(new jt({zoom:Math.max(.1,Math.min(t,w.maxZoom))}))}),[d,w.maxZoom]),h=RA((A=>{o(A),1===s.length&&(e.current=void 0),2===s.length&&i(void 0);"touch"===A.pointerType&&s.length>1&&s.length-1==1&&(l(!1),g(!1))}),[t,s]),Q=RA((A=>{a(A);"touch"===A.pointerType&&1===s.length&&(d(new jt({selectedElement:void 0})),l(!0),g(!0))}),[t,B,s]),C=RA((A=>{r(A),A.isPrimary&&(e.current={x:A.screenX,y:A.screenY});const t=1===s.length&&"touch"!==s[0].pointerType,a=2===s.length&&"touch"===s[0].pointerType;if(c&&a){const[A,t]=s,e=Math.abs(A.clientX-t.clientX),a=n;a&&E(w.zoom-.0055*(a-e)),i(e)}if(B&&(t||a)&&A.isPrimary){const t=(e?.current?.x||A.screenX)-A.screenX,n=(e?.current?.y||A.screenY)-A.screenY;d(new jt({selectedElement:void 0,xTranslation:w.xTranslation-t/w.zoom,yTranslation:w.yTranslation-n/w.zoom}))}}),[w.xTranslation,w.yTranslation,w.zoom,B,c,E,s,e,n]),u=RA((A=>{c&&E(w.zoom-.035*Math.sign(A.deltaY))}),[w,c]);UA((()=>{if(!t.current||0===s.length)return;const A=s[0].pointerId,e=t.current.hasPointerCapture(A);B&&!e&&t.current.setPointerCapture(A),!B&&e&&t.current.releasePointerCapture(A)}),[t,B,s]),Ue([" "],(()=>{l(!0),d(new jt({selectedElement:void 0}))}),(()=>l(!1))),Ue(["Control"],(()=>g(!0)),(()=>g(!1)));const D=GA((()=>({cursor:B&&0===s.length?"grab":B&&1===s.length?"grabbing":c?"zoom-in":void 0,width:"100%",height:"100%",overflow:"clip"})),[B,c,s]);return bA("div",{ref:t,className:"transform-wrapper",onWheel:u,onPointerDown:Q,onPointerUp:h,onPointerCancel:h,onPointerLeave:h,onPointerMove:C,style:D,children:A.children})};export{Aa as SpiffCommerceClient,A as CommandContext,dt as spiffCoreConfiguration,be as PromiseQueue,ke as QueueablePromise,ea as MockWorkflowManager,di as InformationMessageType,mi as StepHandle,Ni as TextStepHandle,oa as FrameStepHandle,yi as BulkStepHandle,vi as ShapeStepHandle,Mi as IllustrationStepHandle,Fi as MaterialStepHandle,Yi as ModelStepHandle,xi as PictureStepHandle,Si as QuestionStepHandle,Xt as BulkPriceCalculationStrategy,ui as Variant,_A as OptionNotFoundError,At as LayoutNotFoundError,tt as AssetNotFoundError,et as ResourceNotFoundError,nt as MisconfigurationError,ot as ParseError,at as UnhandledBehaviorError,St as assetService,Oi as designService,bi as createDesign,Ht as optionService,lt as persistenceService,Dt as graphQlManager,ae as toast,Kn as FrameService,zn as getBoundedOffsets,Ai as frameStepService,ni as modelStepService,ei as materialStepService,ri as shapeStepService,oi as questionStepService,$n as digitalContentStepService,ii as moduleStepService,ai as pictureStepService,li as textStepService,ti as illustrationStepService,Vt as ProductCameraRig,ia as FrameStep,Zt as ConversionLocation,_t as ConversionDataType,$i as getWorkflow,t as AssetType,e as BringForwardCommand,n as BringToFrontCommand,i as BringToBackCommand,a as CanvasCommand,o as CreateElementCommand,r as CreateLayoutCommand,s as DeleteElementCommand,c as FontAlignmentCommand,g as FontColorCommand,B as FontSizeCommand,l as FontSourceCommand,w as GroupCommand,d as LayoutElementFactory,E as LayoutElementType,h as MoveCommand,Q as ResizeCommand,C as RotateCommand,u as SendBackwardsCommand,te as StakeholderType,D as StepAspectType,m as StepType,p as TextChangeCommand,I as UnitOfMeasurement,f as dataUrlFromExternalUrl,y as findElement,M as frameDataCache,F as generate,Y as getAxisAlignedBoundingBox,x as generateSVGWithUnknownColors,S as getAttributesFromArrayBuffer,v as rehydrateSerializedLayout,N as getFrameData,R as getSvgElement,H as loadFontFromDataUrl,U as loadFontFromExternalUrl,P as determineCorrectFontSizeAndLines,G as patternImageDataCache,Qn as generateCommands,k as registerJSDOM,Ne as minZoom,Fn as AdvancedEditor,ra as TransformWrapper,Mn as EditorCore,Gt as useLayouts,Kt as useEditorState,He as useEditorInteraction,Ue as useShortcutCombination,Ot as commandReducer,Lt as getDefaultState,Ut as CommandContextContext,zt as AdvancedEditorStateProvider,Tt as AdvancedEditorContext,jt as UICommand,bt as EditorSubMenu,oe as ElementEventType,se as KeyEvent,Pn as gatherVaryingStepAspects};
1089
+ `,$i=async A=>{const t=(await Dt.getShadowGraphqlClient().query({query:Ki,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:A}})).data.workflow;return t.steps.forEach((A=>{delete A.data.__typename})),t},_i=(A,t)=>{const e=A.workflowState,n=e?JSON.parse(e):void 0;return n?Object.values(n.layouts).map((A=>A.layout)):t.panels.sort(((A,t)=>A.index-t.index)).map((A=>({id:F(),panelId:A.name,name:A.name,index:A.index,createdAt:new Date,updatedAt:new Date,transparentBackground:A.transparentBackground,height:A.height,width:A.width,previewRegion:A.previewRegion,useEditableArea:A.useEditableArea,editableArea:A.editableArea})))};class Aa{constructor(A){ji(this,"options",void 0),ji(this,"initialized",void 0),ji(this,"experienceOptions",void 0),ji(this,"currencyCode",void 0),ji(this,"updateTransactionState",(async A=>{try{return Dt.getShadowGraphqlClient().mutate({...A,mutation:vn})}catch(A){throw console.error(A),new rt("Critical - Unable to synchronize workflow state with server.")}})),this.initialized=!1,this.options=A}getAssetManager(){return St}getCurrencyCode(){if(void 0===this.currencyCode)throw new Error("No currency code set.");return this.currencyCode}async loadTransactionAuth(A){const t=Dt.getShadowGraphqlClient(),e=await t.query({query:Vi,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:A}});if(!e.data.transactions||0===e.data.transactions.length)throw new Error(`Transaction not found: ${A}`);const n=e.data.transactions[0],i=n.product?.partner?.id;if(!i)throw new Error(`Unable to read transaction: ${A}`);if(n.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const a=lt.getMap("transactionOwnerIds");if(a?.has(A)){const t=a.get(A);return Qt(t),Promise.resolve({success:!0,stakeholderType:te.Owner})}const o=async()=>{const A=(await t.query({query:Wi,errorPolicy:"all",variables:{id:n.workflowId}})).data.workflow;if(!A)throw new Error(`Unable to read workflow: ${n.workflowId}`);return{theme:A.overrideTheme,customLogoLink:n.customLogoLink}},r=lt.getMap("partnerCustomerTokens");if(r?.has(i)){const e=r.get(i);if(e)return new Promise((n=>{t.mutate({mutation:Xi,variables:{transactionId:A,loginToken:e}}).then((t=>{const i=t.data?.customerAuthenticate.stakeholders?.find((t=>t.transaction?.id===A));if(!i||!i.transaction)throw new Error(`Unable to read transaction: ${A}`);ut(e),n({success:!0,stakeholderType:i.type})})).catch((A=>{console.error(A),o().then((A=>n({success:!1,...A})))}))}))}return Promise.resolve({success:!1,...await o()})}async generateVerificationCode(A,t){await Dt.getShadowGraphqlClient().mutate({mutation:qi,variables:{transactionId:A,emailAddress:t}})}verifyCode(A,t,e){return new Promise((n=>{Dt.getShadowGraphqlClient().mutate({mutation:Zi,errorPolicy:"all",fetchPolicy:"no-cache",variables:{transactionId:A,emailAddress:t,verificationCode:e}}).then((t=>{if(t.data?.customerVerifyCode.loginToken){if(!t.data.customerVerifyCode.partner?.id)throw new Error(`Unable to find stakeholder for transaction: ${A}`);const e=t.data?.customerVerifyCode.stakeholders?.find((t=>t.transaction?.id===A));if(!e)throw new Error(`Unable to read transaction: ${A}`);const i=lt.getMap("partnerCustomerTokens")||new Map;i.set(t.data.customerVerifyCode.partner?.id,t.data.customerVerifyCode.loginToken),lt.setMap("partnerCustomerTokens",i),ut(t.data.customerVerifyCode.loginToken),n({success:!0,stakeholderType:e.type})}else n({success:!1})})).catch((()=>{n({success:!1})}))}))}async getWorkflowExperience(A,t,e,n){if(!n)return await this.getWorkflowExperienceDeprecated(A,t,e);const i=async A=>{for(const t in A.layouts){const e=A.layouts[t].elements.filter((A=>A.type===E.Illustration));for(let A=0;A<e.length;++A){const t=e[A];t.src&&t.svg&&(t.cachedObjectURL=await dA(t.svg))}const n=A.layouts[t].elements.filter((A=>A.type===E.Textbox));for(let A=0;A<n.length;++A){const t=n[A];t.fontData?.assetUrl&&U(t.fontData.assetUrl)}}},{transaction:a,workflow:o,readOnly:r}=await(async()=>{const A=Dt.getShadowGraphqlClient();if(await A.resetStore(),"transaction"===n.type){const{transactionId:t,readOnly:e}=n,i=await A.query({query:Sn,variables:{id:t},errorPolicy:"all",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!i.data?.transactions||0===i.data.transactions.length)throw new rt("Existing transaction not found.");const a=i.data?.transactions[0];if(!a.workflowId)throw new rt("Existing transaction has no workflow ID.");const o=await $i(a.workflowId);if(!a.product)throw new rt("Failed to load transaction, product not available.");return{transaction:a,workflow:o,readOnly:e}}if("integration"===n.type||"external"===n.type){const t=async()=>{const t="integration"===n.type?{integrationProductId:n.integrationProductId}:{externalIntegrationId:n.externalIntegrationId,externalProductId:n.externalProductId},e=await A.mutate({mutation:Yn,variables:{...t,bulk:n.bulk,workflowId:n.workflowId,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!e.data||!e.data.transactionCreate)throw new rt("Failed to create transaction!");const i=e.data.transactionCreate;if(!i.product)throw new rt("Failed to create transaction, product not available.");return i},e=$i(n.workflowId),[i,a]=await Promise.all([t(),e]);return{transaction:i,workflow:a}}throw new rt("No workflow ID provided.")})();if(this.currencyCode=a.product.partner?.currencyCode,this.experienceOptions={product:a.product,transaction:a,layouts:[],stateMutationFunc:r?async()=>{throw new at("State mutation is forbidden in read only mode!")}:this.updateTransactionState,readOnly:r,workflow:o},"transaction"===n.type&&a.workflowState){const A=JSON.parse(a.workflowState);this.experienceOptions.layouts=Object.values(A.layouts).map((A=>A.layout)),await v(A),await i(A),this.experienceOptions.reloadedState=A}else if(!r&&n.workflowState){const A=JSON.parse(n.workflowState);this.experienceOptions.layouts=Object.values(A.layouts).map((A=>A.layout)),await v(A),await i(A),this.experienceOptions.reloadedState=A}else this.experienceOptions.layouts=_i(this.experienceOptions.transaction,this.experienceOptions.workflow);if(this.experienceOptions.previewService=e&&e(o),this.experienceOptions.renderableContextService=new un(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService),"transaction"!==n.type){const A=lt.getMap("transactionOwnerIds")||new Map;A.set(a.id,a.transactionOwnerId),Qt(a.transactionOwnerId||""),lt.setMap("transactionOwnerIds",A)}this.initialized=!0;const s=new zi(this,this.experienceOptions);return await s.getWorkflowManager().getInitializationPromise(),s}async initFromIntegrationProduct(A){if(""===A)throw new rt("No integration product ID provided.");const t=Dt.getShadowGraphqlClient();await t.resetStore();const e=await t.mutate({mutation:Yn,variables:{integrationProductId:A,bulk:this.options.bulk||!1,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!e.data||!e.data.transactionCreate)throw new rt("Failed to create transaction!");const n=e.data.transactionCreate;if(!n.product)throw new rt("Failed to create transaction, product not available.");this.currencyCode=n.product.partner?.currencyCode;const i=lt.getMap("transactionOwnerIds")||new Map;i.set(n.id,n.transactionOwnerId),Qt(n.transactionOwnerId||""),lt.setMap("transactionOwnerIds",i),this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState},this.initialized=!0}async initFromTransaction(A,t=!1){if(""===A)throw new rt("No transaction ID provided.");const e=Dt.getShadowGraphqlClient();await e.resetStore();if(t)return await(async()=>{const n=(await e.query({query:Sn,variables:{id:A},errorPolicy:"all"})).data?.transactions[0];if(!n)throw new rt("Failed to read transaction.");if(!n.product)throw new rt("Failed to load transaction, product not available.");this.currencyCode=n.product.partner?.currencyCode,this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:async()=>{throw new at("State mutation is forbidden in read only mode!")},readOnly:t},this.initialized=!0})();const n=lt.getMap("transactionOwnerIds")||new Map,i=n.get(A);if(i){Qt(i);const n=(await e.query({query:Sn,variables:{id:A},errorPolicy:"all"})).data?.transactions[0];if(!n)throw new rt("Failed to read transaction.");if(!n.product)throw new rt("Failed to load transaction, product not available.");return this.currencyCode=n.product.partner?.currencyCode,this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:t},void(this.initialized=!0)}try{const i=(await e.mutate({mutation:xn,variables:{id:A},errorPolicy:"all"})).data?.transactionClaim;if(!i)throw new rt("Failed to read transaction.");if(!i.product)throw new rt("Failed to load transaction, product not available.");this.currencyCode=i.product.partner?.currencyCode,i.transactionOwnerId&&(n.set(i.id,i.transactionOwnerId),Qt(i.transactionOwnerId),lt.setMap("transactionOwnerIds",n)),this.experienceOptions={product:i.product,transaction:i,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:t},this.initialized=!0}catch{throw new rt("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(A,t,e){if(!this.initialized||!this.experienceOptions)throw new rt("Cannot launch experience: Not initialized.");const n=async A=>{for(const t in A.layouts){const e=A.layouts[t].elements.filter((A=>A.type===E.Illustration));for(let A=0;A<e.length;++A){const t=e[A];t.src&&t.svg&&(t.cachedObjectURL=await dA(t.svg))}const n=A.layouts[t].elements.filter((A=>A.type===E.Textbox));for(let A=0;A<n.length;++A){const t=n[A];t.fontData?.assetUrl&&U(t.fontData.assetUrl)}}};if(this.experienceOptions.transaction.workflowId){const A=await $i(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=A,this.experienceOptions.transaction.workflowState){const A=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(A.layouts).map((A=>A.layout)),await v(A),await n(A),this.experienceOptions.reloadedState=A}this.experienceOptions.previewService=e&&e(A),this.experienceOptions.renderableContextService=new un(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService);const t=new zi(this,this.experienceOptions);return await t.getWorkflowManager().getInitializationPromise(),t}if(A){const i=Dt.getShadowGraphqlClient().mutate({mutation:Nn,variables:{workflowId:A,id:this.experienceOptions.transaction.id}}),a=$i(A);if(await Promise.all([i,a]),this.experienceOptions.workflow=await a,t){const A=JSON.parse(t);this.experienceOptions.layouts=Object.values(A.layouts).map((A=>A.layout)),await v(A),await n(A),this.experienceOptions.reloadedState=A}else this.experienceOptions.layouts=_i(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=e&&e(await a),this.experienceOptions.renderableContextService=new un(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&this.experienceOptions.previewService?.initialize(this.experienceOptions.product.modelUrl,this.experienceOptions.renderableContextService);const o=new zi(this,this.experienceOptions);return await o.getWorkflowManager().getInitializationPromise(),o}throw new rt("No workflow ID provided.")}getPreviewService(){return this.experienceOptions?.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new rt("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new rt("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}}function ta(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class ea{constructor(){ta(this,"getProduct",void 0),ta(this,"getCommandContext",void 0),ta(this,"getAllLayoutData",void 0),ta(this,"getMetadata",void 0),ta(this,"getWorkflowMetadata",void 0),ta(this,"getStepStorage",void 0),ta(this,"getUpdatesPending",void 0)}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}getVariationRecords(){return[]}async reset(){}updateStateWithServer(A){}addVariationRecord(A){return{recordNumber:0,transactionId:"",values:[]}}getCurrentVariationRecord(){}removeVariationRecord(A){return[]}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(A){}addPoller(A){}addConfirmCallback(A){}addCurrentVariationCallback(A){}addEditedCallback(A){}addElementsCallback(A){}addInformationResultCallback(A){}addInitCallback(A){}addMakingAdjustmentsCallback(A){}addMandatoryCallback(A){}addMetadataCallback(A){}addSelectionCallback(A){}addStepSpecificStorageCallback(A,t){}addStorageCallback(A){}addVariationRecordsCallback(A){}getCommandDispatcher(){return A=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getProfanities(){return[]}getRegionElements(A){return[]}getSerializedStep(A,t){}getStepSpecificServices(A){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(A){}markUpdateCompleted(A){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}setCurrentAdjustingStepId(A){}setCurrentVariationRecord(A){}setEditedStatus(A,t){}setInformationResults(A){}setMandatoryFulfilled(A,t){}async setSelectionsAndElements(A,t,e){}setVariationRecords(A){}toggleDesignConfirmed(){}updateMetadata(A,t){}async updateStorage(A,t){}}function na(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}let ia;var aa;(aa=ia||(ia={})).SelectFrame="SelectFrame",aa.SelectImage="SelectImage",aa.Position="Position";class oa extends mi{constructor(A,t){super(A,t),na(this,"frameService",this.manager.getStepSpecificServices(this.getId())?.frameService)}selectVariant(A){const t=this.manager.getRegionElements(this.step.stepName);return Ai.selectVariant(this.step,A.getResource(),t,this.manager,(A=>this.setUpdateState(A)))}onFrameDataChanged(A){this.frameService&&this.frameService.onFrameDataChanged((t=>{t&&A(t)}))}selectImage(A){return Ai.selectImage(this.step,A,this.manager)}getImageData(){if(this.frameService)return this.frameService.getImageData()}getCurrentFrameStep(A,t,e,n){return n&&n.length>1&&void 0===A?ia.SelectFrame:t||e||this.getImageData()?ia.Position:ia.SelectImage}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}hasVaryingUpload(){return this.step.data.varyUpload}hasVaryingSelection(){return this.step.data.varySelection}}const ra=A=>{const t=kA(null);let e=kA(void 0);const[n,i]=NA(void 0),{addEvent:a,removeEvent:o,updateEvent:r,eventCache:s}=Pt(),[c,g]=NA(!1),[B,l]=NA(!1),{state:w,uiDispatcher:d}=Kt(),E=RA((A=>{const t=A;d(new jt({zoom:Math.max(.1,Math.min(t,w.maxZoom))}))}),[d,w.maxZoom]),h=RA((A=>{o(A),1===s.length&&(e.current=void 0),2===s.length&&i(void 0);"touch"===A.pointerType&&s.length>1&&s.length-1==1&&(l(!1),g(!1))}),[t,s]),Q=RA((A=>{a(A);"touch"===A.pointerType&&1===s.length&&(d(new jt({selectedElement:void 0})),l(!0),g(!0))}),[t,B,s]),C=RA((A=>{r(A),A.isPrimary&&(e.current={x:A.screenX,y:A.screenY});const t=1===s.length&&"touch"!==s[0].pointerType,a=2===s.length&&"touch"===s[0].pointerType;if(c&&a){const[A,t]=s,e=Math.abs(A.clientX-t.clientX),a=n;a&&E(w.zoom-.0055*(a-e)),i(e)}if(B&&(t||a)&&A.isPrimary){const t=(e?.current?.x||A.screenX)-A.screenX,n=(e?.current?.y||A.screenY)-A.screenY;d(new jt({selectedElement:void 0,xTranslation:w.xTranslation-t/w.zoom,yTranslation:w.yTranslation-n/w.zoom}))}}),[w.xTranslation,w.yTranslation,w.zoom,B,c,E,s,e,n]),u=RA((A=>{c&&E(w.zoom-.035*Math.sign(A.deltaY))}),[w,c]);UA((()=>{if(!t.current||0===s.length)return;const A=s[0].pointerId,e=t.current.hasPointerCapture(A);B&&!e&&t.current.setPointerCapture(A),!B&&e&&t.current.releasePointerCapture(A)}),[t,B,s]),Ue([" "],(()=>{l(!0),d(new jt({selectedElement:void 0}))}),(()=>l(!1))),Ue(["Control"],(()=>g(!0)),(()=>g(!1)));const D=GA((()=>({cursor:B&&0===s.length?"grab":B&&1===s.length?"grabbing":c?"zoom-in":void 0,width:"100%",height:"100%",overflow:"clip"})),[B,c,s]);return bA("div",{ref:t,className:"transform-wrapper",onWheel:u,onPointerDown:Q,onPointerUp:h,onPointerCancel:h,onPointerLeave:h,onPointerMove:C,style:D,children:A.children})};export{Aa as SpiffCommerceClient,A as CommandContext,dt as spiffCoreConfiguration,be as PromiseQueue,ke as QueueablePromise,ea as MockWorkflowManager,di as InformationMessageType,mi as StepHandle,Ni as TextStepHandle,oa as FrameStepHandle,yi as BulkStepHandle,vi as ShapeStepHandle,Mi as IllustrationStepHandle,Fi as MaterialStepHandle,Yi as ModelStepHandle,xi as PictureStepHandle,Si as QuestionStepHandle,Xt as BulkPriceCalculationStrategy,ui as Variant,_A as OptionNotFoundError,At as LayoutNotFoundError,tt as AssetNotFoundError,et as ResourceNotFoundError,nt as MisconfigurationError,ot as ParseError,at as UnhandledBehaviorError,St as assetService,Oi as designService,bi as createDesign,Ht as optionService,lt as persistenceService,Dt as graphQlManager,ae as toast,Kn as FrameService,zn as getBoundedOffsets,Ai as frameStepService,ni as modelStepService,ei as materialStepService,ri as shapeStepService,oi as questionStepService,$n as digitalContentStepService,ii as moduleStepService,ai as pictureStepService,li as textStepService,ti as illustrationStepService,Vt as ProductCameraRig,ia as FrameStep,Zt as ConversionLocation,_t as ConversionDataType,$i as getWorkflow,t as AssetType,e as BringForwardCommand,n as BringToFrontCommand,i as BringToBackCommand,a as CanvasCommand,o as CreateElementCommand,r as CreateLayoutCommand,s as DeleteElementCommand,c as FontAlignmentCommand,g as FontColorCommand,B as FontSizeCommand,l as FontSourceCommand,w as GroupCommand,d as LayoutElementFactory,E as LayoutElementType,h as MoveCommand,Q as ResizeCommand,C as RotateCommand,u as SendBackwardsCommand,te as StakeholderType,D as StepAspectType,m as StepType,p as TextChangeCommand,I as UnitOfMeasurement,f as dataUrlFromExternalUrl,y as findElement,M as frameDataCache,F as generate,Y as getAxisAlignedBoundingBox,x as generateSVGWithUnknownColors,S as getAttributesFromArrayBuffer,v as rehydrateSerializedLayout,N as getFrameData,R as getSvgElement,H as loadFontFromDataUrl,U as loadFontFromExternalUrl,P as determineCorrectFontSizeAndLines,G as patternImageDataCache,Qn as generateCommands,k as registerJSDOM,Ne as minZoom,Fn as AdvancedEditor,ra as TransformWrapper,Mn as EditorCore,Gt as useLayouts,Kt as useEditorState,He as useEditorInteraction,Ue as useShortcutCombination,Ot as commandReducer,Lt as getDefaultState,Ut as CommandContextContext,zt as AdvancedEditorStateProvider,Tt as AdvancedEditorContext,jt as UICommand,bt as EditorSubMenu,oe as ElementEventType,se as KeyEvent,Pn as gatherVaryingStepAspects};
1089
1090
  //# sourceMappingURL=module.js.map
package/dist/types.d.ts CHANGED
@@ -1873,11 +1873,16 @@ export class SpiffCommerceClient {
1873
1873
  /**
1874
1874
  * Attempts to load persisted authentication information from local storage, and authenticate with the Spiff Commerce API.
1875
1875
  * @param transactionId The ID of the transaction that the user is attempting to load.
1876
- * @returns An object containing the success status of the authentication attempt, a custom logo link if available, the stakeholder type, and the theme of the workflow.
1876
+ * @returns An object containing the following:
1877
+ * - `customLogoLink`: A link to a custom logo to display in the header.
1878
+ * - `transactionReadOnly`: Whether or not the transaction is read-only. Shadow will not accept any changes to the transaction if this is set to true.
1879
+ * - `stakeholderType`: The type of stakeholder that the user is authenticated as.
1880
+ * - `success`: Whether or not the authentication was successful.
1877
1881
  * @throws An error if the transaction is not found.
1878
1882
  */
1879
1883
  loadTransactionAuth(transactionId: string): Promise<{
1880
1884
  customLogoLink?: string;
1885
+ transactionReadOnly?: boolean;
1881
1886
  stakeholderType?: StakeholderType;
1882
1887
  success: boolean;
1883
1888
  theme?: _Theme1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spiffcommerce/core",
3
- "version": "10.3.0",
3
+ "version": "11.0.0",
4
4
  "description": "Core client API for interacting with the Spiff Commerce backend.",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/main.js",