@spiffcommerce/core 21.1.2 → 21.2.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/CHANGELOG.md +8 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +44 -26
- package/dist/index.umd.cjs +9 -9
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [21.2.0] - 15-03-2024
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `FileUploadGlobalPropertyHandle`:
|
|
13
|
+
- `hasImage(): boolean`: Returns a boolean value indicating if the associated state has an image.
|
|
14
|
+
- `getImage(): Promise<Asset | undefined>`: Retrieves the current image from the server.
|
|
15
|
+
|
|
8
16
|
## [21.1.1] - 15-03-2024
|
|
9
17
|
|
|
10
18
|
### Fixed
|
package/dist/index.d.ts
CHANGED
|
@@ -1666,6 +1666,7 @@ declare abstract class GlobalPropertyHandle {
|
|
|
1666
1666
|
* @param targetExperiences Optionally filter the steps to only those in the given experiences.
|
|
1667
1667
|
*/
|
|
1668
1668
|
protected getSharedSteps(targetExperiences?: WorkflowExperience[]): StepHandle<_spiffcommerce_papyrus.AnyStepData>[];
|
|
1669
|
+
protected getStateValue(): string | undefined;
|
|
1669
1670
|
}
|
|
1670
1671
|
/**
|
|
1671
1672
|
* A file upload global property allows for setting a frame image against all shared steps.
|
|
@@ -1678,6 +1679,15 @@ declare class FileUploadGlobalPropertyHandle extends GlobalPropertyHandle {
|
|
|
1678
1679
|
* @returns A promise resolving when all affected steps have been updated.
|
|
1679
1680
|
*/
|
|
1680
1681
|
selectImage(asset: Asset): Promise<void>;
|
|
1682
|
+
/**
|
|
1683
|
+
* Returns `true` if the state has an image assigned, otherwise `false`.
|
|
1684
|
+
*/
|
|
1685
|
+
hasImage(): boolean;
|
|
1686
|
+
/**
|
|
1687
|
+
* Retrieves the current image selection, if one exists.
|
|
1688
|
+
* @returns A promise that resolves with an `Asset` object if one is assigned to the state, otherwise `undefined`.
|
|
1689
|
+
*/
|
|
1690
|
+
getImage(): Promise<Asset | undefined>;
|
|
1681
1691
|
applyGlobalState(targetExperiences?: WorkflowExperience[]): Promise<void>;
|
|
1682
1692
|
private applyImageSelection;
|
|
1683
1693
|
}
|
package/dist/index.js
CHANGED
|
@@ -460,7 +460,7 @@ class $t {
|
|
|
460
460
|
name: e.name,
|
|
461
461
|
blob: new Blob([e], { type: e.type })
|
|
462
462
|
};
|
|
463
|
-
return await
|
|
463
|
+
return await T.uploadAssetWithProgress(a, n, A, !0);
|
|
464
464
|
}
|
|
465
465
|
}
|
|
466
466
|
removePersistedAsset(e) {
|
|
@@ -533,7 +533,7 @@ class be {
|
|
|
533
533
|
return e ? Array.from(e.entries()).map((A) => ({ assetKey: A[0], src: A[1] })) : [];
|
|
534
534
|
}
|
|
535
535
|
}
|
|
536
|
-
const
|
|
536
|
+
const T = new $t();
|
|
537
537
|
class _t {
|
|
538
538
|
constructor() {
|
|
539
539
|
this.cache = {}, this.disabled = !1;
|
|
@@ -625,8 +625,8 @@ const ge = new _t(), KA = F`
|
|
|
625
625
|
});
|
|
626
626
|
return e.data.options.forEach((A) => {
|
|
627
627
|
var t, n;
|
|
628
|
-
(t = A.defaultVariant) != null && t.asset &&
|
|
629
|
-
a.asset &&
|
|
628
|
+
(t = A.defaultVariant) != null && t.asset && T.cacheAsset(A.defaultVariant.asset), A.colorProfile && T.cacheAsset(A.colorProfile), (n = A.variants) == null || n.forEach((a) => {
|
|
629
|
+
a.asset && T.cacheAsset(a.asset), a.displayImage && T.cacheAsset(a.displayImage), a.thumbnail && T.cacheAsset(a.thumbnail), a.material && T.cacheMaterial(a.material);
|
|
630
630
|
});
|
|
631
631
|
}), e.data.options;
|
|
632
632
|
}, tn = async (c, e) => (await e).find((t) => t.id === c), nn = async (c) => {
|
|
@@ -1852,11 +1852,11 @@ class Mn {
|
|
|
1852
1852
|
new qA(
|
|
1853
1853
|
async () => {
|
|
1854
1854
|
var o;
|
|
1855
|
-
const i = (o = (await
|
|
1855
|
+
const i = (o = (await T.getLocalOrFromServer(A.key || "")).versions) == null ? void 0 : o.find((r) => r.name === "svg");
|
|
1856
1856
|
return i ? (await fetch(i.link)).status === 200 : !1;
|
|
1857
1857
|
},
|
|
1858
1858
|
() => {
|
|
1859
|
-
|
|
1859
|
+
T.getLocalOrFromServer(A.key || "").then((a) => {
|
|
1860
1860
|
this.loadPatternFromAsset(a, e, t);
|
|
1861
1861
|
});
|
|
1862
1862
|
},
|
|
@@ -3224,8 +3224,8 @@ class kn {
|
|
|
3224
3224
|
let Q;
|
|
3225
3225
|
if (E && E.variants) {
|
|
3226
3226
|
const N = E.variants.find((H) => {
|
|
3227
|
-
var
|
|
3228
|
-
return H.id === ((
|
|
3227
|
+
var O;
|
|
3228
|
+
return H.id === ((O = E.defaultVariant) == null ? void 0 : O.id);
|
|
3229
3229
|
}) || E.variants[0];
|
|
3230
3230
|
Q = this.createTextFillSpotColor(E, N), i.updateStorage(e, {
|
|
3231
3231
|
colorProfileAssetKey: (h = E.colorProfile) == null ? void 0 : h.key
|
|
@@ -6280,7 +6280,7 @@ const ot = F`
|
|
|
6280
6280
|
}, ct = async (c, e, A, t, n, a, i, s, o, r) => {
|
|
6281
6281
|
var M;
|
|
6282
6282
|
await (async () => {
|
|
6283
|
-
var
|
|
6283
|
+
var O;
|
|
6284
6284
|
if (r !== void 0)
|
|
6285
6285
|
return r;
|
|
6286
6286
|
await c.outstandingRequestsPromise();
|
|
@@ -6292,7 +6292,7 @@ const ot = F`
|
|
|
6292
6292
|
context: {
|
|
6293
6293
|
transactionOwnerId: S
|
|
6294
6294
|
}
|
|
6295
|
-
}), H = (
|
|
6295
|
+
}), H = (O = N.data) == null ? void 0 : O.transactions[0].workflowState;
|
|
6296
6296
|
return N.errors ? (N.errors.forEach((b) => {
|
|
6297
6297
|
N.errors && console.log("Server Error:", b.message);
|
|
6298
6298
|
}), null) : H ?? null;
|
|
@@ -6302,11 +6302,11 @@ const ot = F`
|
|
|
6302
6302
|
let Y = 0;
|
|
6303
6303
|
if (Object.keys(a).length > 0)
|
|
6304
6304
|
for (const N of Object.keys(a)) {
|
|
6305
|
-
const H = a[N],
|
|
6305
|
+
const H = a[N], O = e.steps.find((b) => b.stepName === N);
|
|
6306
6306
|
for (let b = 0; b < H.selections.length; ++b) {
|
|
6307
6307
|
const V = H.selections[b];
|
|
6308
|
-
if (
|
|
6309
|
-
const ke =
|
|
6308
|
+
if (O && (!y || O.option && (O.option.variants || []).length > 1 && !O.data.hideSelectionInCart && !O.data.hideSelectionsInCart)) {
|
|
6309
|
+
const ke = O.stepTitle;
|
|
6310
6310
|
S[ke] ? S[ke].push({
|
|
6311
6311
|
id: V.id || "",
|
|
6312
6312
|
name: V.name,
|
|
@@ -7944,6 +7944,9 @@ class gA {
|
|
|
7944
7944
|
})
|
|
7945
7945
|
);
|
|
7946
7946
|
}
|
|
7947
|
+
getStateValue() {
|
|
7948
|
+
return this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);
|
|
7949
|
+
}
|
|
7947
7950
|
}
|
|
7948
7951
|
class ja extends gA {
|
|
7949
7952
|
constructor(e, A) {
|
|
@@ -7960,11 +7963,26 @@ class ja extends gA {
|
|
|
7960
7963
|
this.applyImageSelection(e)
|
|
7961
7964
|
]);
|
|
7962
7965
|
}
|
|
7966
|
+
/**
|
|
7967
|
+
* Returns `true` if the state has an image assigned, otherwise `false`.
|
|
7968
|
+
*/
|
|
7969
|
+
hasImage() {
|
|
7970
|
+
return !!this.getStateValue();
|
|
7971
|
+
}
|
|
7972
|
+
/**
|
|
7973
|
+
* Retrieves the current image selection, if one exists.
|
|
7974
|
+
* @returns A promise that resolves with an `Asset` object if one is assigned to the state, otherwise `undefined`.
|
|
7975
|
+
*/
|
|
7976
|
+
async getImage() {
|
|
7977
|
+
const e = this.getStateValue();
|
|
7978
|
+
if (e)
|
|
7979
|
+
return T.getLocalOrFromServer(e);
|
|
7980
|
+
}
|
|
7963
7981
|
async applyGlobalState(e) {
|
|
7964
|
-
const A = this.
|
|
7982
|
+
const A = this.getStateValue();
|
|
7965
7983
|
if (!A)
|
|
7966
7984
|
return Promise.resolve();
|
|
7967
|
-
const t = await
|
|
7985
|
+
const t = await T.getLocalOrFromServer(A);
|
|
7968
7986
|
return t ? this.applyImageSelection(t, e) : Promise.resolve();
|
|
7969
7987
|
}
|
|
7970
7988
|
async applyImageSelection(e, A) {
|
|
@@ -7980,7 +7998,7 @@ class Va extends gA {
|
|
|
7980
7998
|
* Gets the current text
|
|
7981
7999
|
*/
|
|
7982
8000
|
getText() {
|
|
7983
|
-
const e = this.
|
|
8001
|
+
const e = this.getStateValue();
|
|
7984
8002
|
return e || "";
|
|
7985
8003
|
}
|
|
7986
8004
|
/**
|
|
@@ -7993,7 +8011,7 @@ class Va extends gA {
|
|
|
7993
8011
|
]);
|
|
7994
8012
|
}
|
|
7995
8013
|
async applyGlobalState(e) {
|
|
7996
|
-
const A = this.
|
|
8014
|
+
const A = this.getStateValue();
|
|
7997
8015
|
if (!A)
|
|
7998
8016
|
return Promise.resolve();
|
|
7999
8017
|
await this.applyTextSelection(A, e);
|
|
@@ -8016,7 +8034,7 @@ class Bt extends gA {
|
|
|
8016
8034
|
var A, t;
|
|
8017
8035
|
if (!this.optionResource)
|
|
8018
8036
|
return;
|
|
8019
|
-
const e = this.
|
|
8037
|
+
const e = this.getStateValue();
|
|
8020
8038
|
if (e) {
|
|
8021
8039
|
const n = (t = this.optionResource.variants) == null ? void 0 : t.find((a) => a.id === e);
|
|
8022
8040
|
return n ? new X(n) : void 0;
|
|
@@ -8056,7 +8074,7 @@ class Bt extends gA {
|
|
|
8056
8074
|
}
|
|
8057
8075
|
async applyGlobalState(e) {
|
|
8058
8076
|
var n, a;
|
|
8059
|
-
const A = this.
|
|
8077
|
+
const A = this.getStateValue();
|
|
8060
8078
|
if (!A)
|
|
8061
8079
|
return Promise.resolve();
|
|
8062
8080
|
const t = (a = (n = this.optionResource) == null ? void 0 : n.variants) == null ? void 0 : a.find((i) => i.id === A);
|
|
@@ -9821,8 +9839,8 @@ const oi = F`
|
|
|
9821
9839
|
return t.forEach((a) => {
|
|
9822
9840
|
a.steps.forEach((i) => {
|
|
9823
9841
|
var s, o, r;
|
|
9824
|
-
delete i.data.__typename, (s = i.option) != null && s.id && ((o = i.option.defaultVariant) != null && o.asset &&
|
|
9825
|
-
g.asset &&
|
|
9842
|
+
delete i.data.__typename, (s = i.option) != null && s.id && ((o = i.option.defaultVariant) != null && o.asset && T.cacheAsset(i.option.defaultVariant.asset), i.option.colorProfile && T.cacheAsset(i.option.colorProfile), (r = i.option.variants) == null || r.forEach((g) => {
|
|
9843
|
+
g.asset && T.cacheAsset(g.asset), g.displayImage && T.cacheAsset(g.displayImage), g.thumbnail && T.cacheAsset(g.thumbnail), g.material && T.cacheMaterial(g.material);
|
|
9826
9844
|
}), ge.set({ id: i.option.id }, Promise.resolve(i.option)));
|
|
9827
9845
|
});
|
|
9828
9846
|
}), t;
|
|
@@ -9874,7 +9892,7 @@ class fi {
|
|
|
9874
9892
|
* and the Spiff Commerce platform.
|
|
9875
9893
|
*/
|
|
9876
9894
|
getAssetManager() {
|
|
9877
|
-
return
|
|
9895
|
+
return T;
|
|
9878
9896
|
}
|
|
9879
9897
|
getCurrencyCode() {
|
|
9880
9898
|
if (this.currencyCode === void 0)
|
|
@@ -10307,7 +10325,7 @@ class fi {
|
|
|
10307
10325
|
return {
|
|
10308
10326
|
transaction: Y,
|
|
10309
10327
|
workflowId: Y.workflowId,
|
|
10310
|
-
readOnly: ((H = m.find((
|
|
10328
|
+
readOnly: ((H = m.find((O) => O.option.transactionId === Y.id)) == null ? void 0 : H.option.readOnly) ?? !1,
|
|
10311
10329
|
index: m[N].index
|
|
10312
10330
|
};
|
|
10313
10331
|
});
|
|
@@ -10345,14 +10363,14 @@ class fi {
|
|
|
10345
10363
|
...r.map(n),
|
|
10346
10364
|
...g.map(a)
|
|
10347
10365
|
])).flat(), l = [...new Set(B.map((m) => m.workflowId))], d = await wt(l, A), w = new Map(d.map((m) => [m.id, m])), h = x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map(), E = B.map(async (m) => {
|
|
10348
|
-
var
|
|
10366
|
+
var O;
|
|
10349
10367
|
const { transaction: I, workflowId: p, readOnly: M, index: y } = m, S = w.get(p), Y = e[y];
|
|
10350
10368
|
!h.get(I.id) && I.transactionOwnerId && h.set(I.id, I.transactionOwnerId);
|
|
10351
10369
|
const N = h.get(I.id) || void 0, H = {
|
|
10352
10370
|
product: I.product,
|
|
10353
10371
|
transaction: I,
|
|
10354
10372
|
layouts: [],
|
|
10355
|
-
singleVariantsRenderable: (
|
|
10373
|
+
singleVariantsRenderable: (O = Y == null ? void 0 : Y.workflowConfiguration) == null ? void 0 : O.singleVariantsRenderable,
|
|
10356
10374
|
stateMutationFunc: M ? async () => {
|
|
10357
10375
|
throw new k("State mutation is forbidden in read only mode!");
|
|
10358
10376
|
} : async (b) => this.updateTransactionState({ ...b, context: { transactionOwnerId: N } }),
|
|
@@ -10856,7 +10874,7 @@ export {
|
|
|
10856
10874
|
X as Variant,
|
|
10857
10875
|
Ea as WorkflowExperienceEventType,
|
|
10858
10876
|
he as WorkflowExperienceImpl,
|
|
10859
|
-
|
|
10877
|
+
T as assetService,
|
|
10860
10878
|
la as createDesign,
|
|
10861
10879
|
hs as dataUrlFromExternalUrl,
|
|
10862
10880
|
Te as designService,
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(Q,M){typeof exports=="object"&&typeof module<"u"?M(exports,require("@apollo/client/core"),require("@spiffcommerce/papyrus"),require("@apollo/client/link/context"),require("@apollo/client/link/error"),require("pith"),require("lodash.debounce"),require("lodash.isequal"),require("lodash.clonedeep"),require("qrcode"),require("unicode-default-word-boundary"),require("svg-path-bbox"),require("lodash.chunk")):typeof define=="function"&&define.amd?define(["exports","@apollo/client/core","@spiffcommerce/papyrus","@apollo/client/link/context","@apollo/client/link/error","pith","lodash.debounce","lodash.isequal","lodash.clonedeep","qrcode","unicode-default-word-boundary","svg-path-bbox","lodash.chunk"],M):(Q=typeof globalThis<"u"?globalThis:Q||self,M(Q.Core={},Q.core,Q.papyrus,Q.context,Q.error,Q.pith,Q.debounce,Q.isEqual,Q.cloneDeep,Q.qrcode,Q.unicodeDefaultWordBoundary,Q.svgPathBbox,Q.chunk))})(this,function(Q,M,g,cA,gA,et,tt,At,Ee,nt,Ye,Pe,at){"use strict";class it extends Error{constructor(e){super(e),this.name=this.constructor.name}}class ne extends it{constructor(e){super(`ConfigurationError - ${e}`)}}class ae extends ne{constructor(e){super(`Option not Configured: ${e.stepTitle}`),this.optionId=(e==null?void 0:e.optionId)||"N/A"}}class
|
|
1
|
+
(function(Q,M){typeof exports=="object"&&typeof module<"u"?M(exports,require("@apollo/client/core"),require("@spiffcommerce/papyrus"),require("@apollo/client/link/context"),require("@apollo/client/link/error"),require("pith"),require("lodash.debounce"),require("lodash.isequal"),require("lodash.clonedeep"),require("qrcode"),require("unicode-default-word-boundary"),require("svg-path-bbox"),require("lodash.chunk")):typeof define=="function"&&define.amd?define(["exports","@apollo/client/core","@spiffcommerce/papyrus","@apollo/client/link/context","@apollo/client/link/error","pith","lodash.debounce","lodash.isequal","lodash.clonedeep","qrcode","unicode-default-word-boundary","svg-path-bbox","lodash.chunk"],M):(Q=typeof globalThis<"u"?globalThis:Q||self,M(Q.Core={},Q.core,Q.papyrus,Q.context,Q.error,Q.pith,Q.debounce,Q.isEqual,Q.cloneDeep,Q.qrcode,Q.unicodeDefaultWordBoundary,Q.svgPathBbox,Q.chunk))})(this,function(Q,M,g,cA,gA,et,tt,At,Ee,nt,Ye,Pe,at){"use strict";class it extends Error{constructor(e){super(e),this.name=this.constructor.name}}class ne extends it{constructor(e){super(`ConfigurationError - ${e}`)}}class ae extends ne{constructor(e){super(`Option not Configured: ${e.stepTitle}`),this.optionId=(e==null?void 0:e.optionId)||"N/A"}}class J extends ne{constructor(e){super(`Panel not Found: ${e.panelId}`),this.panelId=(e==null?void 0:e.panelId)||"N/A"}}class V extends ne{constructor(e){super(`Asset not found for variant: ${e.name}`),this.variant=e}}class X extends ne{constructor(e){super(`Resource not found for asset: ${e.name}`),this.asset=e}}class ie extends ne{constructor(e,t){super(`Workflow Misconfiguration: ${e.stepName} - ${t}`),this.step=e}}class he extends it{constructor(e){super(`ImplementationError - ${e}`)}}class v extends he{constructor(e){super(`Unhandled Behavior Encountered: ${e}`)}}class q extends he{constructor(e){super(`Parsing Error: ${e}`)}}class G extends he{constructor(e){super(`Client Error: ${e}`)}}class Ce extends he{constructor(e){super(`Resource Generation Failed: ${e}`)}}class lA{get(e){return localStorage.getItem(e)||void 0}set(e,t){localStorage.setItem(e,t)}remove(e){localStorage.removeItem(e)}getMap(e){const t=this.get(e);if(t)return new Map(JSON.parse(t))}setMap(e,t){const A=JSON.stringify([...t.entries()]);this.set(e,A)}}class ot{constructor(){this.storage=new Map}get(e){return this.storage.get(e)||void 0}set(e,t){this.storage.set(e,t)}remove(e){this.storage.delete(e)}getMap(e){const t=this.get(e);if(t)return new Map(JSON.parse(t))}setMap(e,t){const A=JSON.stringify([...t.entries()]);this.set(e,A)}}const P=(()=>{try{return localStorage?new lA:new ot}catch{return console.warn("Local storage was unavilable due to browser security settings. Using in-memory storage instead."),new ot}})();class BA{constructor(){this.defaultServerUrl="https://api.spiff.com.au",this.defaultServicesApiUrl="https://services.spiff.com.au",this.defaultHubUrl="https://hub.spiff.com.au",this.serverUrl=this.defaultServerUrl,this.servicesApiUrl=this.defaultServicesApiUrl,this.hubUrl=this.defaultHubUrl,this.serverUrlCallbacks=[]}getServerUrl(){return this.serverUrl}getServicesApiUrl(){return this.servicesApiUrl}getHubUrl(){return this.hubUrl}setServerUrl(e){this.serverUrl=e,this.serverUrlCallbacks.forEach(t=>t())}setServicesApiUrl(e){this.servicesApiUrl=e}setHubUrl(e){this.hubUrl=e}addServerUrlCallback(e){this.serverUrlCallbacks.push(e)}}const W=new BA;let st;const rt=c=>{st=c};let xe;const dA=c=>{xe=c},wA=()=>xe,EA=()=>new Promise(c=>{const e=W.getHubUrl(),t=A=>{A.origin===e&&(window.removeEventListener("message",t),c(A.data))};window.parent!==window&&(window.addEventListener("message",t,!1),window.parent.postMessage("ready",e))}),hA=async()=>{const c={applicationKey:xe,customerToken:st};return typeof window<"u"&&(window.location.href.includes("/workflows/product/")||window.location.href.includes("hub=true"))?{...await EA(),...c}:c};class CA{constructor(){this.shadowGraphqlClient=this.constructShadowGraphqlClient(),W.addServerUrlCallback(()=>{this.shadowGraphqlClient=this.constructShadowGraphqlClient()})}getShadowGraphqlClient(){return this.shadowGraphqlClient}constructShadowGraphqlClient(){const e=M.createHttpLink({uri:`${W.getServerUrl()}/graphql`,fetch:g.fetch}),t=cA.setContext(async(i,o)=>{const{headers:s}=o,r=s||{},l=await hA(),d=o.bearer??l.bearer,B=o.partnerId??l.partnerId,w=o.activeIntegration??l.activeIntegration,E=o.transactionOwnerId,C=o.customerToken??l.customerToken,h=o.applicationKey??l.applicationKey,m=o.bundleOwnerId;try{if(window&&window.__SENTRY__){const u=window.__SENTRY__.hub;if(u){const F=u.traceHeaders();Object.entries(F).forEach(([I,f])=>{r[I]=f})}}}catch{}return d&&(r.Authorization=`Bearer ${d}`),B&&(r.partnerId=B),w&&(r.activeIntegration=w),E&&(r.transactionOwnerId=E),C&&(r.customerToken=C),h&&(r["X-Application-Key"]=h),m&&(r.bundleOwnerId=m),{headers:r}}),A=gA.onError(({operation:i,graphQLErrors:o,networkError:s})=>{const r=o||[];s&&console.log("GraphQL Network error"),r.forEach(()=>console.log("GraphQL Error: "+i.operationName))});function n(){return{read(i=null){return i},merge(i,o){return o||i||null}}}const a=new M.InMemoryCache({addTypename:!1,typePolicies:{Transaction:{fields:{transactionOwnerId:n(),customLogoLink:n(),workflowFooterLogoLink:n(),workflowState:n(),externalDesignProductId:n(),externalDesignProductVariantId:n(),externalCartProductId:n(),externalCartProductVariantId:n(),lastSyncedAt:n(),quantity:n(),lineItem:n()}},WorkflowProduct:{fields:{isPresent:n()}},Product:{fields:{imageUrl:n(),overlayImageUrl:n(),preloadImageUrl:n(),weight:n(),conversionConfiguration:n()}}}});return new M.ApolloClient({link:M.from([A,t,e]),cache:a,name:"Core"})}}const N=new CA,QA=M.gql`
|
|
2
2
|
fragment AssetMetadataFields on Asset {
|
|
3
3
|
metadata {
|
|
4
4
|
key
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
-
`,ct=async c=>(await N.getShadowGraphqlClient().query({query:uA,errorPolicy:"all",fetchPolicy:"no-cache",variables:{keys:c}})).data.assets,fA=async c=>(await N.getShadowGraphqlClient().query({query:mA,errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:c}})).data.materials,DA=async(c,e,t,A,n)=>{var i;return(i=(await N.getShadowGraphqlClient().mutate({mutation:IA,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:c,type:e,mimeType:t,anonymous:A,temporary:n}})).data)==null?void 0:i.assetCreate};class pA{constructor(){this.cache=new Map,this.materialCache=new Map,this.loadImageAsFileInfo=async e=>{const t=await e.arrayBuffer(),A=await g.getAttributesFromArrayBuffer(t),n=(a,i)=>{const o=atob(a.split(",")[1]),s=[];for(let r=0;r<o.length;r++)s.push(o.charCodeAt(r));return new Blob([new Uint8Array(s)],{type:i})};return{name:e.name.substring(e.name.lastIndexOf("/")+1),blob:n(A.dataUrl,e.type)}}}async getLocalOrFromServer(e){if(this.cache.has(e)){const n=this.cache.get(e);if(!n)throw new v("Failed to get asset from cache!");return n}const A=(async()=>(await ct([e]))[0])();return this.cache.set(e,A),A}cacheAsset(e){if(!e.key)throw new v("Asset has no key!");this.cache.has(e.key)||this.cache.set(e.key,Promise.resolve(e))}cacheMaterial(e){if(!e.id)throw new v("Material has no id!");this.materialCache.has(e.id)||this.materialCache.set(e.id,Promise.resolve(e))}async getMaterialLocalOrFromServer(e){if(this.materialCache.has(e))return this.materialCache.get(e);const A=(async()=>(await fA([e]))[0])();return this.materialCache.set(e,A),A}async uploadAssetWithProgress(e,t,A,n,a){const i=await this.dispatchCreateAssetRequest(e,t,n,a);if(!i)throw new Error("Failed to create asset.");return await new Promise((o,s)=>{const r=new XMLHttpRequest;r.open("PUT",i.assetResponse.uploadUrl,!0),r.setRequestHeader("Content-Type",i.mimeType),r.setRequestHeader("Cache-Control","public,max-age=31536000,immutable"),r.upload.onprogress=l=>{l.lengthComputable&&A(l.loaded*100/l.total)},r.onload=()=>{const l=i.assetResponse.asset;He.add(i.assetResponse.asset),o(l)},r.onerror=s,r.send(e.blob)}),i.assetResponse.asset}async uploadFile(e,t){const A=!(e.type==="image/svg+xml"||e.type==="application/pdf"),n=A?g.AssetType.Image:g.AssetType.Illustration;if(A){const a=await this.loadImageAsFileInfo(e);return await this.uploadAssetWithProgress(a,n,t,!0)}else{const a={name:e.name,blob:new Blob([e],{type:e.type})};return await
|
|
98
|
+
`,ct=async c=>(await N.getShadowGraphqlClient().query({query:uA,errorPolicy:"all",fetchPolicy:"no-cache",variables:{keys:c}})).data.assets,fA=async c=>(await N.getShadowGraphqlClient().query({query:mA,errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:c}})).data.materials,DA=async(c,e,t,A,n)=>{var i;return(i=(await N.getShadowGraphqlClient().mutate({mutation:IA,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:c,type:e,mimeType:t,anonymous:A,temporary:n}})).data)==null?void 0:i.assetCreate};class pA{constructor(){this.cache=new Map,this.materialCache=new Map,this.loadImageAsFileInfo=async e=>{const t=await e.arrayBuffer(),A=await g.getAttributesFromArrayBuffer(t),n=(a,i)=>{const o=atob(a.split(",")[1]),s=[];for(let r=0;r<o.length;r++)s.push(o.charCodeAt(r));return new Blob([new Uint8Array(s)],{type:i})};return{name:e.name.substring(e.name.lastIndexOf("/")+1),blob:n(A.dataUrl,e.type)}}}async getLocalOrFromServer(e){if(this.cache.has(e)){const n=this.cache.get(e);if(!n)throw new v("Failed to get asset from cache!");return n}const A=(async()=>(await ct([e]))[0])();return this.cache.set(e,A),A}cacheAsset(e){if(!e.key)throw new v("Asset has no key!");this.cache.has(e.key)||this.cache.set(e.key,Promise.resolve(e))}cacheMaterial(e){if(!e.id)throw new v("Material has no id!");this.materialCache.has(e.id)||this.materialCache.set(e.id,Promise.resolve(e))}async getMaterialLocalOrFromServer(e){if(this.materialCache.has(e))return this.materialCache.get(e);const A=(async()=>(await fA([e]))[0])();return this.materialCache.set(e,A),A}async uploadAssetWithProgress(e,t,A,n,a){const i=await this.dispatchCreateAssetRequest(e,t,n,a);if(!i)throw new Error("Failed to create asset.");return await new Promise((o,s)=>{const r=new XMLHttpRequest;r.open("PUT",i.assetResponse.uploadUrl,!0),r.setRequestHeader("Content-Type",i.mimeType),r.setRequestHeader("Cache-Control","public,max-age=31536000,immutable"),r.upload.onprogress=l=>{l.lengthComputable&&A(l.loaded*100/l.total)},r.onload=()=>{const l=i.assetResponse.asset;He.add(i.assetResponse.asset),o(l)},r.onerror=s,r.send(e.blob)}),i.assetResponse.asset}async uploadFile(e,t){const A=!(e.type==="image/svg+xml"||e.type==="application/pdf"),n=A?g.AssetType.Image:g.AssetType.Illustration;if(A){const a=await this.loadImageAsFileInfo(e);return await this.uploadAssetWithProgress(a,n,t,!0)}else{const a={name:e.name,blob:new Blob([e],{type:e.type})};return await k.uploadAssetWithProgress(a,n,t,!0)}}removePersistedAsset(e){He.remove(e)}getPersistedAssets(){return He.list()}async dispatchCreateAssetRequest(e,t,A,n){const a=e.blob.type?e.blob.type:this.guessMIME(e.name),i=await DA(e.name,t,a,A,n);if(i)return{assetResponse:i,mimeType:a}}guessMIME(e){const t=e.split(".").pop();switch(t){case"glb":return"model/gltf-binary";case"ttf":return"font/ttf";case"mkv":return"video/x-matroska";default:throw new v("Unexpected mimetype: "+t)}}}const oe="persistentAssets";class He{static add(e){if(!e.fileLink){console.error("Failed to find cdn link on asset, cannot persist!");return}const t=new Map;t.set(e.key||"",e.fileLink);const A=P.getMap(oe);A&&A.forEach((n,a)=>{t.set(a,n)}),P.setMap(oe,t)}static remove(e){const t=P.getMap(oe);if(!t)return;const A=Array.from(t.entries()).find(n=>n[0]===e);A&&(t.delete(A[0]),P.setMap(oe,t))}static list(){const e=P.getMap(oe);return e?Array.from(e.entries()).map(t=>({assetKey:t[0],src:t[1]})):[]}}const k=new pA;class FA{constructor(){this.cache={},this.disabled=!1}get(e){if(this.disabled)return;const t=JSON.stringify(e);return this.cache[t]}set(e,t){if(this.disabled)return t;const A=JSON.stringify(e);return this.cache[A]=t,t}disable(e){this.disabled=e}}const Z=new FA,gt=M.gql`
|
|
99
99
|
fragment OptionFields on Option {
|
|
100
100
|
id
|
|
101
101
|
name
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
...OptionFields
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
|
-
`,SA=async c=>{const e=await N.getShadowGraphqlClient().query({query:MA,errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:c}});return e.data.options.forEach(t=>{var A,n;(A=t.defaultVariant)!=null&&A.asset&&
|
|
147
|
+
`,SA=async c=>{const e=await N.getShadowGraphqlClient().query({query:MA,errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:c}});return e.data.options.forEach(t=>{var A,n;(A=t.defaultVariant)!=null&&A.asset&&k.cacheAsset(t.defaultVariant.asset),t.colorProfile&&k.cacheAsset(t.colorProfile),(n=t.variants)==null||n.forEach(a=>{a.asset&&k.cacheAsset(a.asset),a.displayImage&&k.cacheAsset(a.displayImage),a.thumbnail&&k.cacheAsset(a.thumbnail),a.material&&k.cacheMaterial(a.material)})}),e.data.options},yA=async(c,e)=>(await e).find(A=>A.id===c),YA=async c=>{const e=c.map(i=>Z.get({id:i})),t=c.filter((i,o)=>e[o]===void 0);if(t.length===0)return Promise.all(e);const A=SA(t),n=t.map(i=>Z.set({id:i},yA(i,A))),a=e.filter(i=>i!==void 0);return await Promise.all(a.concat(n))};class PA{constructor(){this.getDisplayImageSource=e=>{var t;if(e){const A=(t=e.displayImage)==null?void 0:t.fileLink;if(A)return A}},this.getSelectedVariant=(e,t)=>{var A;if(!(!e||t.length===0))return(A=e.variants)==null?void 0:A.find(n=>n.id===t[0])}}async getOption(e){return(async()=>{const n=(await YA([e]))[0];if(n)return n})()}async getAssetTileImageForVariant(e){var n,a;const t=e.thumbnail;if(t){const i=(n=t.versions)==null?void 0:n.find(s=>s.name==="thumbnail"),o=t.fileLink;return(i==null?void 0:i.link)||o}const A=e.asset;if(A){const i=(a=A.versions)==null?void 0:a.find(s=>s.name==="thumbnail"),o=A.fileLink;return(i==null?void 0:i.link)||o}return e.material?e.material.id:""}getDefaultVariant(e){const t=e.variants;if(t){if(t.length===1)return t[0];if(e.defaultVariant!==void 0)return t.find(A=>{var n;return A.id===((n=e.defaultVariant)==null?void 0:n.id)})}}}const L=new PA;var lt=(c=>(c.Hub="Hub",c.Shopify="Shopify",c))(lt||{}),Bt=(c=>(c[c.Orbit=0]="Orbit",c[c.Pan=1]="Pan",c))(Bt||{}),dt=(c=>(c.Manual="Manual",c.OnStart="OnStart",c.OnQuit="OnQuit",c.OnEnd="OnEnd",c))(dt||{}),wt=(c=>(c.Email="Email",c.FirstName="FirstName",c.LastName="LastName",c.Phone="Phone",c))(wt||{}),se=(c=>(c.Owner="Owner",c.Approver="Approver",c.Editor="Editor",c.Viewer="Viewer",c))(se||{});const $=M.gql`
|
|
148
148
|
fragment AdditionalIntegrationProductFields on IntegrationProduct {
|
|
149
149
|
id
|
|
150
150
|
product {
|
|
@@ -607,7 +607,7 @@
|
|
|
607
607
|
...IntegrationProductFields
|
|
608
608
|
}
|
|
609
609
|
}
|
|
610
|
-
`,re=[g.StepType.SilentIllustration,g.StepType.ProductOverlay],kA=async c=>{const e=[];c.introduction&&e.push({name:"Introduction",title:c.name,renderableSteps:[{type:g.StepType.Introduction,stepName:"Introduction",stepTitle:c.name,helpText:c.introduction,data:{},conditions:[]}],silentSteps:[]});for(const A of c.steps){const n=bA(A.stepName,c.stepGroups);if(!n)e.push({name:A.stepName,title:A.stepTitle,renderableSteps:re.includes(A.type)?[]:[A],silentSteps:re.includes(A.type)?[A]:[]});else{const a=e.find(i=>i.name===n.name);a?re.includes(A.type)?a.silentSteps.push(A):a.renderableSteps.push(A):e.push({name:n.name,title:n.name,renderableSteps:re.includes(A.type)?[]:[A],silentSteps:re.includes(A.type)?[A]:[]})}}const t="workflow.steps.finish.confirmDesign";return e.push({name:"Finish",title:t,renderableSteps:[{type:g.StepType.Finish,stepName:"Finish",stepTitle:t,helpText:"",data:{modelAnimation:c.finalizeStepConfig?c.finalizeStepConfig.modelAnimation:void 0,lookAtAnimation:c.finalizeStepConfig?c.finalizeStepConfig.lookAtAnimation:void 0},conditions:[]}],silentSteps:[]}),e},bA=(c,e)=>e.find(t=>t.stepNames.includes(c)),_=(c,e)=>(c.conditions||[]).every(t=>{const A=e[t.targetStepName];if(A&&A.selectedVariants){const n=A.selectedVariants;return t.requiredVariantSelections.some(a=>n.find(i=>i.id===a)!==void 0)}return!1}),JA=(c,e)=>{const t={name:c.name,title:c.title,renderableSteps:c.renderableSteps.filter(A=>_(A,e)),silentSteps:c.silentSteps.filter(A=>_(A,e))};return t.silentSteps.length===0&&t.renderableSteps.length===0?null:t},ee=(c,e)=>c.map(t=>JA(t,e)).filter(t=>t!==null),TA=async(c,e,t=!1)=>{var i;const A=ee(c,e),n=[];for(const o of A)for(const s of o.renderableSteps){const r=(((i=s.option)==null?void 0:i.variants)||[]).length;s.silent||(s.type===g.StepType.Model||s.type===g.StepType.Material||s.type===g.StepType.Picture||s.type===g.StepType.Shape?(r>1||t)&&n.push(s.stepName):n.push(s.stepName))}const a=A.filter(o=>o.renderableSteps.filter(r=>n.includes(r.stepName)).length>0);for(const o of a)o.renderableSteps=o.renderableSteps.filter(s=>n.includes(s.stepName));return a};class Re{constructor(){this.timestamp=Date.now()}}class Ue{constructor(e,t=!0){this.queue=[],this.activePromise=void 0,this.queueMaxSize=void 0,this.queueMaxSize=e,this.isEnabled=t}enqueue(e){if(this.queue.push(e),this.queueMaxSize!==void 0&&this.queue.length>this.queueMaxSize){const t=this.queue.length-1;for(let A=0;A<t;++A)this.queue.shift()}this.isEnabled&&(this.activePromise||(this.activePromise=this.dequeue()))}get enabled(){return this.isEnabled}set enabled(e){!this.isEnabled&&e&&!this.activePromise&&(this.activePromise=this.dequeue()),this.isEnabled=e}hasActivePromise(){return!!this.activePromise}getRemainingQueueSize(){return this.queue.length}async finalize(){return this.activePromise?this.activePromise:Promise.resolve()}async dequeue(){const e=this.queue.shift();if(!e){this.activePromise=void 0;return}try{await e.execute()}catch(t){console.log(t)}finally{await this.dequeue()}}}function Qt(c,e,t,A){const n=t.width*c.zoom,a=t.height*c.zoom;if(A){const o=c,s=Math.max(e.width/t.width,e.height/t.height);o.zoom=Math.max(s,c.zoom);const r=t.width*o.zoom,l=t.height*o.zoom;return o.x=me(c.x,e.width-r,0),o.y=me(c.y,e.height-l,0),o}const i=c;return i.x=me(i.x,-n,e.width),i.y=me(i.y,-a,e.height),i}function me(c,e,t){return Math.min(Math.max(c,e),t)}class ut{constructor(e){this.minZoomScale=[.03],this.maxZoomScale=[20],this._debouncedUpdateFrameOffsets=tt(this.updateFrameOffsets,200),this.targetElements=[],this.onFrameDataChangeListeners=[],this.onZoomChangeListeners=[],this.forceImageCover=e,this.thresholdSettings={useThreshold:!1,invertThreshold:!1,threshold:128,thresholdSaturation:.5}}connectWorkflowManager(e,t){t&&e.addStepSpecificStorageCallback(async A=>{if(A){const n=A;if(n.currentFrameSources){let a=!1;for(let i=0;i<n.currentFrameSources.length;i++){const o=n.currentFrameSources[i],s=await g.getFrameData(o);At(s,this.frameData)||(this.frameData||(this.frameData=new Array(n.currentFrameSources.length)),this.frameData[i]=s,a=!0)}a&&(this.onFrameDataChangeListeners.forEach(i=>i(this.frameData)),this.frameData&&this.imageData&&(this.recalculateOffsets(this.imageData),this.updateOffsets(this.offsets),this.recalculateZoomLimits(this.imageData,this.frameData)))}}},t),this.workflowManager=e,this.stepName=t}setTargetElements(e){this.targetElements=e}getFrameData(){return this.frameData}setFrameData(e){if(!e){this.frameData=void 0;return}e.forEach((t,A)=>{const n=g.frameDataCache.get(t);n&&(this.frameData||(this.frameData=new Array(e.length)),this.frameData[A]=n)})}getImageData(){return this.imageData}getOffsets(){return this.offsets}setOffsets(e){this.offsets=e}setZoom(e,t,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 a=this.frameData.map((i,o)=>{const s=(t[o]-this.offsets[o].x)/this.offsets[o].zoom,r=(A[o]-this.offsets[o].y)/this.offsets[o].zoom,l=t[o]-s*e[o],d=A[o]-r*e[o];return{x:l,y:d,zoom:this.imageData.width*e[o]/this.imageData.width}});this.updateOffsets(a,n),this.onZoomChangeListeners.forEach(i=>i(e))}}setPatternData(e){this.imageData=e,e&&this.frameData&&(this.recalculateOffsets(e),this.updateOffsets(this.offsets,void 0,!0)),this.imageData&&this.frameData&&this.recalculateZoomLimits(this.imageData,this.frameData)}updateOffsets(e,t,A){const n=this.imageData;if(!n||!this.frameData)return;if(this.frameData.length!==e.length)throw new v("Frame data and offsets are not the same length. This is a bug. Please report it.");if(!this.offsets.some((i,o)=>!(e[o].x===i.x&&e[o].y===i.y&&e[o].zoom===i.zoom))&&!A){t&&t();return}(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((i,o)=>{this.offsets[o]=Qt(e[o],i,this.imageData,this.forceImageCover)}),this._debouncedUpdateFrameOffsets(this.offsets,n,this.frameData,this.thresholdSettings,this.targetElements,t)}getThresholdSettings(){return this.thresholdSettings}setThresholdSettings(e){this.thresholdSettings=e,this.imageData&&this.frameData&&this._debouncedUpdateFrameOffsets(this.offsets,this.imageData,this.frameData,e,this.targetElements)}onFrameDataChanged(e){e(this.frameData),this.onFrameDataChangeListeners.push(e)}onZoom(e){this.onZoomChangeListeners.push(e)}updateFrameOffsets(e,t,A,n,a,i){if(!A||A.length===0||A.some(s=>!s))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 o=this.workflowManager.getCommandDispatcher();a.forEach((s,r)=>{o(new g.GroupCommand([new g.UpdateFramePattern(s,t,e[r]),new g.UpdateFrameThresholdSettingsCommand(s,n.useThreshold,n.invertThreshold,n.threshold,n.thresholdSaturation)]))}),this.stepName&&this.workflowManager.updateStorage(this.stepName,{frameOffsetsList:e}),i&&i()}recalculateZoomLimits(e,t){(this.minZoomScale.length!==t.length||this.maxZoomScale.length!==t.length)&&(this.minZoomScale=new Array(t.length),this.maxZoomScale=new Array(t.length)),t.forEach((A,n)=>{const a=Math.max(A.width/e.width,A.height/e.height);this.forceImageCover?(this.minZoomScale[n]=a,this.maxZoomScale[n]=a*2.5):(this.minZoomScale[n]=a/10,this.maxZoomScale[n]=a*2.5)})}recalculateOffsets(e){this.frameData&&((!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((t,A)=>{this.offsets[A]=g.calculateOffsets(e,t)}),this._debouncedUpdateFrameOffsets(this.offsets,e,this.frameData,this.thresholdSettings,this.targetElements))}}class mt{constructor(e,t,A){this.processRegion=async n=>{var s,r,l,d;const a=this.layouts.find(B=>B.panelId===n.panelId);if(!a)throw new b(n);let i="";if(this.configuration.type===g.StepType.ProductOverlay){let B="";if((s=this.product)!=null&&s.overlayImageUrl&&(B=this.product.overlayImageUrl),i=B,!B)throw new ie(this.configuration,"Couldn't find an asset for product overlay step")}const o=this.evaluateAssetType();if(o===g.LayoutElementType.Image){const B=this.configuration.type===g.StepType.SilentIllustration?(r=this.configuration.data.asset)==null?void 0:r.fileLink:(l=this.product)==null?void 0:l.overlayImageUrl;if(!B)throw new Error("Undefined raster silent step source");const w={stepName:this.configuration.stepName,id:g.generate(),src:B,type:o,y:n.top,x:n.left,width:n.width,height:n.height,layer:n.layer,layerIndex:n.layerIndex,immutable:n.immutable,productOverlay:this.configuration.type===g.StepType.ProductOverlay?!0:void 0,rotation:n.rotation,excludeFromExport:this.configuration.data.excludeFromPrint,preserveAspectRatio:"none"};return{regionElement:{id:w.id,region:n},command:new g.CreateElementCommand(w,a)}}else{const B=this.configuration.type===g.StepType.SilentIllustration?(d=this.configuration.data.asset)==null?void 0:d.fileLink:i,w=async()=>new Promise((h,m)=>{if(!B){m("Undefined vector silent step source");return}g.fetchAsString(B,!0).then(u=>{h(u)}).catch(u=>console.error(u))}),E=await g.generateSVGWithUnknownColors(await w()),C={stepName:this.configuration.stepName,id:g.generate(),cachedObjectURL:await g.svgObjectURL(E.svg),src:B,svg:E.svg,colors:E.colors,type:o,y:n.top,x:n.left,width:n.width,height:n.height,layer:n.layer,layerIndex:n.layerIndex,rotation:n.rotation,immutable:n.immutable,productOverlay:this.configuration.type===g.StepType.ProductOverlay?!0:void 0,excludeFromExport:this.configuration.data.excludeFromPrint};return{regionElement:{id:C.id,region:n},command:new g.CreateElementCommand(C,a)}}},this.configuration=e,this.layouts=t,this.product=A||void 0}async trigger(){if(!this.configuration.data.regions)throw new ie(this.configuration,"Missing regions.");if(this.configuration.type===g.StepType.SilentIllustration){const e=this.configuration.data.regions.map(this.processRegion);return Promise.all(e)}else return this.configuration.type===g.StepType.ProductOverlay?Promise.all(this.configuration.data.regions.map(e=>{if(!this.layouts.find(A=>e.panelId===A.panelId))throw new b(e);return this.processRegion(e)})):Promise.reject("Unknown silent step. This is a bug")}evaluateAssetType(){var t,A,n;const e=this.configuration.type===g.StepType.ProductOverlay&&((t=this.product)!=null&&t.overlayImageUrl)?this.product.overlayImageUrl.toLowerCase():(n=(A=this.configuration.data.asset)==null?void 0:A.fileLink)==null?void 0:n.toLowerCase().split("?")[0];return e!=null&&e.startsWith("data:image/png")||e!=null&&e.endsWith(".jpeg")||e!=null&&e.endsWith(".jpg")||e!=null&&e.endsWith(".png")?g.LayoutElementType.Image:(e!=null&&e.endsWith(".svg")||e!=null&&e.startsWith("image/svg+xml"),g.LayoutElementType.Illustration)}}const It=async c=>{const e=`${W.getServicesApiUrl()}/shortener`;try{return(await(await fetch(e,{method:"POST",body:JSON.stringify({longUrl:c}),headers:{"Content-Type":"application/json"}})).json()).shortUrl}catch(t){throw console.error(t),new Ce("Failed to shorten URL, see console.")}};class ft{async poll(){try{if(await this.predicate()){this.onSuccess(),this.pollingId>-1&&window.clearInterval(this.pollingId);return}}catch{}this.attempts+=1,this.attempts<this.maxAttempts?this.pollingId=window.setTimeout(this.poll.bind(this),this.interval):this.onFailure()}constructor(e,t,A,n=3e3,a=10){this.onSuccess=t,this.onFailure=A,this.predicate=e,this.attempts=0,this.pollingId=-1,this.interval=n,this.maxAttempts=a,this.poll()}}class LA{async init(e,t,A){return A&&await this.reload(e,t,A),null}async reload(e,t,A){const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),s=Object.values(A.layouts).map(r=>r.elements).flat().filter(r=>r.stepName===e.stepName).map(r=>({id:r.id,region:r.stepRegion}));await t.setSelectionsAndElements(e.stepName,[],s,async()=>{var d,B;const r=(d=n==null?void 0:n.storage)==null?void 0:d.videoShortUrl,l=(B=n==null?void 0:n.storage)==null?void 0:B.videoUrl;t.updateStorage(e.stepName,{videoShortUrl:r,videoUrl:l})})}async regenerateQRCode(e,t,A,n,a,i,o,s,r){if(!t&&A!==""&&n===""){const l=async()=>{var I,f;const u=(await ct([A]))[0],F=(f=(I=u==null?void 0:u.versions)==null?void 0:I.find(D=>D.name==="mpeg4"))==null?void 0:f.link;return{asset:u,link:F}},d=await new Promise((u,F)=>{new ft(async()=>!!(await l()).link,async()=>{const I=await l();if(!I.link||!I.link)throw new X(I.asset);u({rel:"mpeg4",href:I.link})},()=>{F("Poller timed out with 40 attempts @ 3 second interval")},3e3,40)});e.forEach(u=>s(new g.DeleteElementCommand(u.id)));const B=i.data.baseUrl.slice(0,4)==="http"?"":"https://",w=new URL(B+i.data.baseUrl);w.searchParams.append("video",btoa(JSON.stringify([d]))),w.pathname=w.pathname+(w.pathname.slice(-1)==="/"?"":"/");const E=w.toString();if(E.length>=2e3)throw new Ce("Cannot create QR code, URL too long.");const C=await It(E);if(o(C),!i.data||!i.data.regions)throw new ie(i,"Missing regions.");const h=await this.regionElements(i),m=await this.command(C,h,a,i.stepName);m&&(m.command&&a.getCommandDispatcher()(m.command),m.followup&&await m.followup()),await a.setSelectionsAndElements(i.stepName,[],h,async()=>{a.updateStorage(i.stepName,{videoShortUrl:C,videoUrl:n}),r(!1)})}else r(!1)}async regionElements(e){const t=A=>({id:g.generate(),region:A});return e.data.regions.map(t)}async command(e,t,A,n){const a=A.getLayouts(),o=`data:image/svg+xml;base64,${btoa(await nt.toString(e,{type:"svg"}))}`,s=t.map(r=>{const l=r.region,d=a.find(B=>B.panelId===(l==null?void 0:l.panelId));if(!d&&l)throw new b(l);if(d&&!l)throw new Error("Region not found");if(!d||!l)throw new Error("Neither a region or layout found!");return new g.CreateElementCommand({stepRegion:l,stepName:n,id:r.id,src:o,type:g.LayoutElementType.Image,y:l.top,x:l.left,width:l.width,height:l.height,rotation:0},d)});return{command:new g.GroupCommand(s),followup:async()=>{}}}}const Dt=new LA;class OA{constructor(){this.frameSourceSvg=async(e,t)=>{if(!e)return g.generateDefaultRectangleFrameSvg(t);const A=e.asset;if(!A)throw new V(e);const n=A.fileLink;if(n)return g.fetchAsString(n,!0);throw new X(A)}}async init(e,t,A){if(A)return await this.reload(e,t,A),null;if(t.setMandatoryFulfilled(e.stepName,!1),t.markStepsAsInitialised([e.stepName]),e.option&&e.option.variants&&e.option.variants.length>0){const n=e.option,a=L.getDefaultVariant(n);return a?this.selectVariantCommand(e,a,[],t,void 0,e.data.placeholderImageUrl):null}return this.selectVariantCommand(e,void 0,[],t,void 0,e.data.placeholderImageUrl)}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),s=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===e.stepName).map(l=>({id:l.id,region:l.stepRegion}));if(!e.option||(e.option.variants||[]).length===0){const l=e.data.regions.map(d=>g.generateDefaultRectangleFrameSvg(d));t.updateStorage(e.stepName,{currentFrameSources:l})}if(n){const l=async()=>{var w,E,C,h;const d=(w=n.storage)==null?void 0:w.framePatternSrc,B=(E=n.storage)==null?void 0:E.frameOffsetsList;if(t.updateMetadata(e.stepName,{frameOffsetsList:B,framePatternSrc:d}),d){const m=(C=t.getStepSpecificServices(e.stepName))==null?void 0:C.frameService;if(!m)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(d,m),t.updateMetadata(e.stepName,{image:d}),t.updateStorage(e.stepName,{framePatternSrc:d})}if(B!=null&&B.some(m=>m.zoom)){const m=(h=t.getStepSpecificServices(e.stepName))==null?void 0:h.frameService;if(!m)throw new Error("Frame service unavailable, cannot load pattern!");m.updateOffsets(B)}t.setMandatoryFulfilled(e.stepName,!0)};if(n.selectedVariants&&n.selectedVariants.length>0){const d=n.selectedVariants[0].id;if(e.option&&d){const B=(r=e.option.variants)==null?void 0:r.find(w=>w.id===d);B&&await t.setSelectionsAndElements(e.stepName,[B],s,async()=>{const w=await Promise.all(e.data.regions.map(E=>this.frameSourceSvg(B,E)));t.updateStorage(e.stepName,{currentFrameSources:w}),await l()})}}else await t.setSelectionsAndElements(e.stepName,[],s,l)}}selectImage(e,t,A){A.setEditedStatus(e.stepName,!0),(t.fileLink||"").endsWith("pdf")?A.addPoller(new ft(async()=>{var s;const i=(s=(await J.getLocalOrFromServer(t.key||"")).versions)==null?void 0:s.find(r=>r.name==="svg");return i?(await fetch(i.link)).status===200:!1},()=>{J.getLocalOrFromServer(t.key||"").then(a=>{this.loadPatternFromAsset(a,e,A)})},()=>{throw new Ce("Failed to resolve transcoded PDF")})):this.loadPatternFromAsset(t,e,A)}async selectVariant(e,t,A,n,a){const i=await this.selectVariantCommand(e,t,A,n,a);i&&(i.command&&n.getCommandDispatcher()(i.command),i.followup&&await i.followup())}getCreateElementCommand(e,t,A,n){return new g.CreateElementCommand({id:e,type:g.LayoutElementType.Frame,x:t.left,y:t.top,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,rotation:t.rotation,scaleX:t.width/n.frameData.width,scaleY:t.height/n.frameData.height,path:n.frameData.path,dataWidth:n.frameData.width,dataHeight:n.frameData.height,stepRegion:t,stepName:n.stepName,disablePlaceholder:n.disablePlaceholder,focalBlur:n.focalBlur,focalBlurStrength:n.focalBlurStrength,focalBlurRadius:n.focalBlurRadius,pattern:n.pattern,immutable:t.immutable},A)}async loadPatternFromString(e,t){if(e.endsWith("svg")){const A=await g.GetSVGDimensions(e),n=A.width,a=A.height,i={src:e,width:n,height:a,aspect:n/a};g.patternImageDataCache.set(e,i),t.setPatternData(i)}else{const A=await g.fetchAsArrayBuffer(e,!0),n=await g.getAttributesFromArrayBuffer(A),a={src:e,width:n.width,height:n.height,aspect:n.width/n.height};g.patternImageDataCache.set(e,a),t.setPatternData(a)}}async selectVariantCommand(e,t,A,n,a,i){var B;const o=(B=n.getStepSpecificServices(e.stepName))==null?void 0:B.frameService;if(!o)throw new Error("Frame service unavailable, cannot load pattern!");const s=await Promise.all(e.data.regions.map(w=>this.frameSourceSvg(t,w)));a&&a(!0);const r=await Promise.all(e.data.regions.map(async(w,E)=>{const C=await g.getFrameData(s[E]),h=o.getImageData(),m=A.map(p=>new g.DeleteElementCommand(p.id)),u=h?g.calculateOffsets(h,C):void 0,F=h?{id:g.generate(),src:h.src,x:(u==null?void 0:u.x)||0,y:(u==null?void 0:u.y)||0,width:h.width,height:h.height,scaleX:(u==null?void 0:u.zoom)||1,scaleY:(u==null?void 0:u.zoom)||1,rotation:0}:void 0,I=g.generate(),D=n.getLayouts().find(p=>p.panelId===w.panelId);if(!D)throw new b(w);return{command:this.getCreateElementCommand(I,w,D,{frameData:C,pattern:F,disablePlaceholder:e.data.disablePlaceholder,focalBlur:e.data.focalBlur,focalBlurStrength:e.data.focalBlurStrength,focalBlurRadius:e.data.focalBlurRadius,stepName:e.stepName}),regionEl:{id:I,region:w},removeExistingCommands:m}})),l=r.map(w=>w.command),d=r.map(w=>w.removeExistingCommands).flat();return{command:new g.GroupCommand([...l,...d]),followup:async()=>{a&&a(!1),await n.setSelectionsAndElements(e.stepName,t?[t]:[],[...r.map(w=>w.regionEl)],async()=>{var w;if(n.updateStorage(e.stepName,{currentFrameSources:s}),i){const E=(w=n.getStepSpecificServices(e.stepName))==null?void 0:w.frameService;if(!E)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(i,E)}})}}}patternSource(e){var n;const t=(n=e.versions)==null?void 0:n.find(a=>a.name==="svg");if(t)return t.link;const A=e.fileLink;if(A)return A;throw new X(e)}async loadPatternFromAsset(e,t,A){var o;const n=this.patternSource(e),a=A.markUpdatePending(),i=(o=A.getStepSpecificServices(t.stepName))==null?void 0:o.frameService;if(!i)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(n,i),A.updateMetadata(t.stepName,{image:n}),A.updateStorage(t.stepName,{framePatternSrc:n}),A.markUpdateCompleted(a)}}const Ie=new OA;class zA{async getIllustrationBody(e){return new Promise(t=>{g.fetchAsString(e,!0).then(A=>{t(A)}).catch(A=>console.error(A))})}getCreateElementCommand(e,t,A,n){return new g.CreateElementCommand({stepRegion:t,stepName:n.stepName,colors:n.svg.colors,id:e,src:n.src,svg:n.svg.svg,cachedObjectURL:n.objectURL,type:g.LayoutElementType.Illustration,y:t.top,x:t.left,rotation:t.rotation,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,immutable:t.immutable},A)}getColors(e,t){const A=t.getRegionElements(e.stepName)||[];if(A.length===0)return[];try{return g.findElement(A[0].id,t.getAllLayoutData()).colors}catch{return[]}}async init(e,t,A){const n=e.option;if(!n)return null;if(A)return this.reload(e,t,A);{const a=L.getDefaultVariant(n);if(a)return await this.selectVariantCommand(e,a,[],()=>{},t)}return null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const l=n.selectedVariants[0].id;if(s&&l){const d=(r=s.variants)==null?void 0:r.find(B=>B.id===l);if(d){const B=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[d],B,async()=>{var w;t.updateMetadata(e.stepName,{colors:(w=n.storage)==null?void 0:w.colors}),t.setMandatoryFulfilled(e.stepName,!0)})}}else throw new Error("Required illustration variant no longer available")}return null}async availableColors(e,t){var n;const A=e.data.colorOption;return A?A?(n=A.variants)==null?void 0:n.map(a=>({fill:a.color,stroke:a.color,variant:a})):[]:[]}async changeColorsCommand(e,t,A,n,a){var l;const i={};for(const[d,B]of a.entries())i[d]={browserValue:B,spotColor:(l=i[d])==null?void 0:l.spotColor};const o=g.modifySVGWithElementProperties(e,t,A,i),s=await g.svgObjectURL(o),r=[];for(const d of n){for(const[B,w]of a.entries())r.push(new g.IllustrationColorCommand(d,B,w));r.push(new g.IllustrationCacheCommand(d,o,s))}return new g.GroupCommand(r)}async changeColors(e,t,A,n,a){var w,E;if(t.length===0)return;const i=g.findElement(t[0].id,n().map(C=>C.layoutState)),o={...i.colors},s={};Object.entries(o).forEach(([C,h])=>{const m={browserValue:h.browserValue},u=h.spotColor;u&&(m.spotColor={profileName:u.profileName,namedColor:u.namedColor}),s[C]=m});for(const[C,h]of a.entries())o[C]={browserValue:h,spotColor:(w=o[C])==null?void 0:w.spotColor},s[C]={browserValue:h};let r=Array.from(Object.values(o)).map(C=>C.browserValue);const l=e.data.colorOption;l&&((E=l.variants)==null||E.forEach(C=>{r=r.map(h=>{var m;return h.toLowerCase()===((m=C.color)==null?void 0:m.toLowerCase())?C.name:h})})),A.updateMetadata(e.stepName,{colors:r});const d=new Map;if(Object.entries(o).forEach(([C,h])=>{d.set(C,h.browserValue)}),!i.svg)throw new Error("Colors changed before SVG loaded. This should never happen!");const B=await this.changeColorsCommand(i.svg,i.width,i.height,t.map(C=>C.id),d);A.updateStorage(e.stepName,{colors:s}),A.getCommandDispatcher()(B)}async selectVariant(e,t,A,n,a){const i=await this.selectVariantCommand(e,t,A,n,a);i&&(i.command&&a.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantCommand(e,t,A,n,a){var m;if(!e.data||!e.data.regions)throw new ie(e,"Missing regions.");n(!0);const i=A.map(u=>new g.DeleteElementCommand(u.id));a.setMandatoryFulfilled(e.stepName,!1);const o=t.asset;if(!o)throw new V(t);const s=o.fileLink;if(!s)throw new X(o);const r=await g.generateSVGWithUnknownColors(await this.getIllustrationBody(s)),l=await g.svgObjectURL(r.svg),d=u=>{const F=a.getLayouts().find(f=>f.panelId===u.panelId);if(!F)throw new b(u);const I=g.generate();return{regionElement:{id:I,region:u},command:this.getCreateElementCommand(I,u,F,{stepName:e.stepName,src:s,objectURL:l,svg:r})}},B=e.data.regions.map(d),E=[...B.map(u=>u.command),...i];let C=Array.from(Object.values(r.colors)).map(u=>u.browserValue);const h=e.data.colorOption;return h&&((m=h.variants)==null||m.forEach(u=>{C=C.map(F=>{var I;return F.toLowerCase()===((I=u.color)==null?void 0:I.toLowerCase())?u.name:F})})),a.updateMetadata(e.stepName,{colors:C}),{command:new g.GroupCommand(E),followup:async()=>{await a.setSelectionsAndElements(e.stepName,[t],B.map(I=>I.regionElement),async()=>{a.setMandatoryFulfilled(e.stepName,!0),n(!1)});const u=await this.availableColors(e,a)||[],F=Object.keys(r.colors);if(e.data.colorPickerEnabled&&u.length===1&&F.length===1){const I=u[0],f=F[0];await this.changeColors(e,B.map(D=>D.regionElement),a,()=>a.getCommandContext().getAllLayouts(),new Map([[f,I.variant.color]]))}}}}}const ce=new zA;class jA{async init(e,t,A){const n=e.option;if(!n)throw new ae(e);if(A)await this.reload(e,t,A);else{const a=L.getDefaultVariant(n);if(a)return await this.selectVariantLambda(e,a,t,()=>{})}return null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===e.stepName),s=e.option;if(!s)throw new ae(e);if(n!=null&&n.selectedVariants){const l=n.selectedVariants[0].id;if(l){const d=(r=s.variants)==null?void 0:r.find(B=>B.id===l);if(d){const B=d.material,w=o.map(E=>({id:E.id,region:E.stepRegion}));await t.setSelectionsAndElements(e.stepName,[d],w,async()=>{const E=t.getModelContainer();if(E){const C=e.data.targetMaterials.map(h=>E.applyMaterialVariant(h,s.id||"",B||{}));Promise.all(C).then(()=>t.setMandatoryFulfilled(e.stepName,!0))}})}}}}async selectVariant(e,t,A,n){const a=await this.selectVariantLambda(e,t,A,n);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantLambda(e,t,A,n){const a=A.getModelContainer();n(!0);const i=t.material;if(!i)throw n(!1),new V(t);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(e.stepName,[t],[],async()=>{try{a&&e.data.targetMaterials.forEach(o=>{e.option&&a.applyMaterialVariant(o,e.option.id||"",i)}),A.setMandatoryFulfilled(e.stepName,!0)}finally{n(!1)}})}}}}const Ge=new jA;class KA{async init(e,t,A){const n=e.option;if(!n)throw new ae(e);if(A)await this.reload(e,t,A);else{const a=L.getDefaultVariant(n);if(a)return await this.selectVariantLambda(e,a,t,()=>{})}return null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const l=n.selectedVariants[0].id;if(s&&l){const d=(r=s.variants)==null?void 0:r.find(B=>B.id===l);if(d){const B=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[d],B,async()=>{var E;const w=t.getModelContainer();if(w&&e.option){const C=(E=d.asset)==null?void 0:E.fileLink;if(!C)throw new V(d);await w.applyModelVariant(e.stepName||"",{model:C,contextService:t.getLayoutPreviewService()},e.data.replaceProductModel||!1),t.setMandatoryFulfilled(e.stepName,!0)}})}}}}async selectVariant(e,t,A,n){const a=await this.selectVariantLambda(e,t,A,n);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantLambda(e,t,A,n){var i;n(!0);const a=(i=t.asset)==null?void 0:i.fileLink;if(!a)throw new V(t);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(e.stepName,[t],[],async()=>{try{const o=A.getModelContainer();o&&await o.applyModelVariant(e.stepName,{model:a,contextService:A.getLayoutPreviewService()},e.data.replaceProductModel||!1),A.setMandatoryFulfilled(e.stepName,!0)}finally{n(!1)}})}}}}const ve=new KA;class VA{async init(e,t,A){if(A)await this.reload(e,t,A);else return t.updateMetadata(e.stepName,{text:""}),this.changeTextCommand(e,"",t,"",()=>{});return null}async reload(e,t,A){const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),s=Object.values(A.layouts).map(r=>r.elements).flat().filter(r=>r.stepName===e.stepName).map(r=>({id:r.id,region:r.stepRegion}));await t.setSelectionsAndElements(e.stepName,[],s,async()=>{var r,l;t.updateStorage(e.stepName,{text:(r=n==null?void 0:n.storage)==null?void 0:r.text}),t.setMandatoryFulfilled(e.stepName,((l=n==null?void 0:n.storage)==null?void 0:l.text)!=="")})}async changeText(e,t,A,n,a){const i=await this.changeTextCommand(e,t,A,n,a);i&&(i.command&&A.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async changeTextCommand(e,t,A,n,a){var l;const i=A.getRegionElements(e.stepName),o=(l=A.getStepSpecificServices(e.stepName))==null?void 0:l.module;if(!o)return console.error("Missing module."),null;const s=A.getProfanities();if(!this.validateInput(e,t,s,a))return A.setMandatoryFulfilled(e.stepName,!1),console.error(n),null;if(A.setMandatoryFulfilled(e.stepName,t!==""),!e.data||!e.data.regions||e.data.regions.length<=0)return console.error("Missing configuration."),null;A.updateStorage(e.stepName,{text:t});const r=(d,B,w)=>{const E=w||g.generate(),h=A.getLayouts().find(u=>u.panelId===B.panelId);if(!h)return console.error(`Can not find layout for region: ${B.panelId}`),null;const m=[];return w&&m.push(new g.DeleteElementCommand(E)),m.push(new g.CreateElementCommand({stepRegion:B,stepName:e.stepName,colors:{},id:E,svg:d,type:g.LayoutElementType.Illustration,y:B.top,x:B.left,rotation:B.rotation,width:B.width,height:B.height,layer:B.layer,layerIndex:B.layerIndex,immutable:B.immutable},h)),{id:E,region:B,command:new g.GroupCommand(m)}};if(i.length>0){const B=i.map(w=>{if(!w.region)return null;const E=o.svgPrint(t,w.region);return r(E,w.region,w.id)}).filter(w=>!!w).filter(w=>!!w).map(w=>w&&w.command);return{command:new g.GroupCommand(B),followup:async()=>{}}}else{const d=e.data.regions.map(w=>r(o.svgPrint(t,w),w)),B=d.filter(w=>!!w).map(w=>w&&w.command);return{command:new g.GroupCommand(B),followup:async()=>{const w=d.filter(E=>E).map(E=>E&&{id:E.id,region:E.region});await A.setSelectionsAndElements(e.stepName,[],w)}}}}validateInput(e,t,A,n){if(e.data&&e.data.maxLength){const i=e.data.maxLength;if(t.length>i)return n("Too many characters."),!1}if(!/^$|^[a-zA-Z0-9 ]+$/.test(t))return n("Unsupported characters."),!1;const a=Ye.split(t.toLowerCase());for(const i of a)for(const o in A){const s=A[o].toLowerCase().replace(/\s/g,"");if(i===s)return n("Blocked profanity."),!1}return n(""),!0}}const pt=new VA;class WA{async init(e,t,A){const n=e.option;if(!n)return null;if(A)await this.reload(e,t,A);else if(n.defaultVariant)return t.markStepsAsInitialised([e.stepName]),this.selectVariantCommand(e,n.defaultVariant,t,()=>{});return t.markStepsAsInitialised([e.stepName]),null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const l=n.selectedVariants[0].id;if(s&&l){const d=(r=s.variants)==null?void 0:r.find(B=>B.id===l);if(d){const B=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[d],B,async()=>{t.setMandatoryFulfilled(e.stepName,!0)})}}}}async selectVariant(e,t,A,n){const a=await this.selectVariantCommand(e,t,A,n);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantCommand(e,t,A,n){const a=t.asset;if(!a)throw new V(t);const i=a==null?void 0:a.fileLink;if(!i)return console.error("No URL for picture!"),null;n(!0),A.setMandatoryFulfilled(e.stepName,!1);const s=A.getRegionElements(e.stepName).map(d=>new g.DeleteElementCommand(d.id)),r=d=>{const w=A.getLayouts().find(C=>C.panelId===d.panelId);if(!w)throw new b(d);const E=g.generate();return{regionElement:{id:E,region:d},command:new g.CreateElementCommand({stepName:e.stepName,stepRegion:d,id:E,src:i,type:g.LayoutElementType.Image,y:d.top,x:d.left,rotation:d.rotation,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,immutable:d.immutable,preserveAspectRatio:"none"},w)}},l=e.data.regions.map(r);return{command:new g.GroupCommand([...s,...l.map(d=>d.command)]),followup:async()=>{await A.setSelectionsAndElements(e.stepName,[t],l.map(d=>d.regionElement),async()=>{A.setMandatoryFulfilled(e.stepName,!0),n(!1)})}}}}const ke=new WA;class XA{async init(e,t,A){const n=e.option;if(!n)return null;if(A)await this.reload(e,t,A);else{const a=n.variants;if(L.getDefaultVariant(n)){const o=a==null?void 0:a.find(s=>{var r;return s.id===((r=n.defaultVariant)==null?void 0:r.id)});return this.selectVariantLambda(e,(o==null?void 0:o.id)||"",t)}}return null}async reload(e,t,A){var i;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),a=e.option;if(n!=null&&n.selectedVariants){const o=n.selectedVariants[0].id;if(a&&o){const s=(i=a.variants)==null?void 0:i.find(r=>r.id===o);s&&await t.setSelectionsAndElements(e.stepName,[s],[])}}}async selectVariant(e,t,A){await A.getInitializationPromise();const n=await this.selectVariantLambda(e,t,A);n&&(n.command&&A.getCommandDispatcher()(n.command),n.followup&&await n.followup())}async selectVariantLambda(e,t,A){const n=e.option;if(!n)return null;const a=n.variants;if(!a)return null;const i=a.length>1?a.find(o=>o.id===t):a[0];if(!i)throw new Error("Failed to find selected variant in step variants, this should never happen!");return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(e.stepName,[i],[],async()=>{A.setMandatoryFulfilled(e.stepName,!0)})}}}}const be=new XA;class qA{constructor(){this.shapeFillId="spiff-fill-shape"}async availableColours(e){var A;const t=e.option;return t?((A=t.variants)==null?void 0:A.map(n=>({fill:n.color,stroke:n.color,variant:n})))||[]:[]}setCustomColor(e,t,A){const n=A.getLayouts(),i=(A.getRegionElements(t.stepName)||[]).map(o=>{const s=o.region;if(!n.find(l=>l.panelId===(s==null?void 0:s.panelId)))throw new b(s);return new g.IllustrationColorCommand(o.id,this.shapeFillId,e)}).filter(o=>!!o);A.getCommandDispatcher()(new g.GroupCommand(i)),A.updateStorage(t.stepName,{colour:e})}async init(e,t,A){const n=e.option;if(!n)throw new ae(e);if(A)await this.reload(e,t,A);else{const a=L.getDefaultVariant(n);return a?this.selectVariantCommand(e,{fill:a.color,stroke:a.color,variant:a},[],t):null}return null}async selectVariant(e,t,A,n){const a=await this.selectVariantCommand(e,t,A,n);a&&(a.command&&n.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const l=n.selectedVariants[0].id;if(s&&l){const d=(r=s.variants)==null?void 0:r.find(B=>B.id===l);if(d){const B=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[d],B,async()=>{var w;t.updateStorage(e.stepName,{colour:((w=n==null?void 0:n.storage)==null?void 0:w.colour)||""}),t.setMandatoryFulfilled(e.stepName,!0)})}}}}async selectVariantCommand(e,t,A,n){var s;const a=n.getLayouts(),i=(s=n.getStepStorage(e.stepName))==null?void 0:s.colour,o=()=>{var r,l;if(((r=t.variant)==null?void 0:r.color)==="#custom")return i||"#FFFFFF";if((l=t.variant)!=null&&l.color)return t.variant.color;throw new Error("Failed to resolve color for shape step.")};if(A.length>0){const r=d=>{const B=d.region;if(!a.find(C=>C.panelId===(B==null?void 0:B.panelId)))throw new b(B);const E=o();return new g.IllustrationColorCommand(d.id,this.shapeFillId,E)},l=A.map(r).filter(d=>!!d);return{command:new g.GroupCommand(l),followup:async()=>{await n.setSelectionsAndElements(e.stepName,t.variant?[t.variant]:[],A),n.updateStorage(e.stepName,{colour:o()})}}}else{const r=w=>{const E=a.find(F=>F.panelId===w.panelId);if(!E)throw new b(w);const C=o(),h=`
|
|
610
|
+
`,re=[g.StepType.SilentIllustration,g.StepType.ProductOverlay],kA=async c=>{const e=[];c.introduction&&e.push({name:"Introduction",title:c.name,renderableSteps:[{type:g.StepType.Introduction,stepName:"Introduction",stepTitle:c.name,helpText:c.introduction,data:{},conditions:[]}],silentSteps:[]});for(const A of c.steps){const n=bA(A.stepName,c.stepGroups);if(!n)e.push({name:A.stepName,title:A.stepTitle,renderableSteps:re.includes(A.type)?[]:[A],silentSteps:re.includes(A.type)?[A]:[]});else{const a=e.find(i=>i.name===n.name);a?re.includes(A.type)?a.silentSteps.push(A):a.renderableSteps.push(A):e.push({name:n.name,title:n.name,renderableSteps:re.includes(A.type)?[]:[A],silentSteps:re.includes(A.type)?[A]:[]})}}const t="workflow.steps.finish.confirmDesign";return e.push({name:"Finish",title:t,renderableSteps:[{type:g.StepType.Finish,stepName:"Finish",stepTitle:t,helpText:"",data:{modelAnimation:c.finalizeStepConfig?c.finalizeStepConfig.modelAnimation:void 0,lookAtAnimation:c.finalizeStepConfig?c.finalizeStepConfig.lookAtAnimation:void 0},conditions:[]}],silentSteps:[]}),e},bA=(c,e)=>e.find(t=>t.stepNames.includes(c)),_=(c,e)=>(c.conditions||[]).every(t=>{const A=e[t.targetStepName];if(A&&A.selectedVariants){const n=A.selectedVariants;return t.requiredVariantSelections.some(a=>n.find(i=>i.id===a)!==void 0)}return!1}),JA=(c,e)=>{const t={name:c.name,title:c.title,renderableSteps:c.renderableSteps.filter(A=>_(A,e)),silentSteps:c.silentSteps.filter(A=>_(A,e))};return t.silentSteps.length===0&&t.renderableSteps.length===0?null:t},ee=(c,e)=>c.map(t=>JA(t,e)).filter(t=>t!==null),TA=async(c,e,t=!1)=>{var i;const A=ee(c,e),n=[];for(const o of A)for(const s of o.renderableSteps){const r=(((i=s.option)==null?void 0:i.variants)||[]).length;s.silent||(s.type===g.StepType.Model||s.type===g.StepType.Material||s.type===g.StepType.Picture||s.type===g.StepType.Shape?(r>1||t)&&n.push(s.stepName):n.push(s.stepName))}const a=A.filter(o=>o.renderableSteps.filter(r=>n.includes(r.stepName)).length>0);for(const o of a)o.renderableSteps=o.renderableSteps.filter(s=>n.includes(s.stepName));return a};class Re{constructor(){this.timestamp=Date.now()}}class Ue{constructor(e,t=!0){this.queue=[],this.activePromise=void 0,this.queueMaxSize=void 0,this.queueMaxSize=e,this.isEnabled=t}enqueue(e){if(this.queue.push(e),this.queueMaxSize!==void 0&&this.queue.length>this.queueMaxSize){const t=this.queue.length-1;for(let A=0;A<t;++A)this.queue.shift()}this.isEnabled&&(this.activePromise||(this.activePromise=this.dequeue()))}get enabled(){return this.isEnabled}set enabled(e){!this.isEnabled&&e&&!this.activePromise&&(this.activePromise=this.dequeue()),this.isEnabled=e}hasActivePromise(){return!!this.activePromise}getRemainingQueueSize(){return this.queue.length}async finalize(){return this.activePromise?this.activePromise:Promise.resolve()}async dequeue(){const e=this.queue.shift();if(!e){this.activePromise=void 0;return}try{await e.execute()}catch(t){console.log(t)}finally{await this.dequeue()}}}function Qt(c,e,t,A){const n=t.width*c.zoom,a=t.height*c.zoom;if(A){const o=c,s=Math.max(e.width/t.width,e.height/t.height);o.zoom=Math.max(s,c.zoom);const r=t.width*o.zoom,l=t.height*o.zoom;return o.x=me(c.x,e.width-r,0),o.y=me(c.y,e.height-l,0),o}const i=c;return i.x=me(i.x,-n,e.width),i.y=me(i.y,-a,e.height),i}function me(c,e,t){return Math.min(Math.max(c,e),t)}class ut{constructor(e){this.minZoomScale=[.03],this.maxZoomScale=[20],this._debouncedUpdateFrameOffsets=tt(this.updateFrameOffsets,200),this.targetElements=[],this.onFrameDataChangeListeners=[],this.onZoomChangeListeners=[],this.forceImageCover=e,this.thresholdSettings={useThreshold:!1,invertThreshold:!1,threshold:128,thresholdSaturation:.5}}connectWorkflowManager(e,t){t&&e.addStepSpecificStorageCallback(async A=>{if(A){const n=A;if(n.currentFrameSources){let a=!1;for(let i=0;i<n.currentFrameSources.length;i++){const o=n.currentFrameSources[i],s=await g.getFrameData(o);At(s,this.frameData)||(this.frameData||(this.frameData=new Array(n.currentFrameSources.length)),this.frameData[i]=s,a=!0)}a&&(this.onFrameDataChangeListeners.forEach(i=>i(this.frameData)),this.frameData&&this.imageData&&(this.recalculateOffsets(this.imageData),this.updateOffsets(this.offsets),this.recalculateZoomLimits(this.imageData,this.frameData)))}}},t),this.workflowManager=e,this.stepName=t}setTargetElements(e){this.targetElements=e}getFrameData(){return this.frameData}setFrameData(e){if(!e){this.frameData=void 0;return}e.forEach((t,A)=>{const n=g.frameDataCache.get(t);n&&(this.frameData||(this.frameData=new Array(e.length)),this.frameData[A]=n)})}getImageData(){return this.imageData}getOffsets(){return this.offsets}setOffsets(e){this.offsets=e}setZoom(e,t,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 a=this.frameData.map((i,o)=>{const s=(t[o]-this.offsets[o].x)/this.offsets[o].zoom,r=(A[o]-this.offsets[o].y)/this.offsets[o].zoom,l=t[o]-s*e[o],d=A[o]-r*e[o];return{x:l,y:d,zoom:this.imageData.width*e[o]/this.imageData.width}});this.updateOffsets(a,n),this.onZoomChangeListeners.forEach(i=>i(e))}}setPatternData(e){this.imageData=e,e&&this.frameData&&(this.recalculateOffsets(e),this.updateOffsets(this.offsets,void 0,!0)),this.imageData&&this.frameData&&this.recalculateZoomLimits(this.imageData,this.frameData)}updateOffsets(e,t,A){const n=this.imageData;if(!n||!this.frameData)return;if(this.frameData.length!==e.length)throw new v("Frame data and offsets are not the same length. This is a bug. Please report it.");if(!this.offsets.some((i,o)=>!(e[o].x===i.x&&e[o].y===i.y&&e[o].zoom===i.zoom))&&!A){t&&t();return}(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((i,o)=>{this.offsets[o]=Qt(e[o],i,this.imageData,this.forceImageCover)}),this._debouncedUpdateFrameOffsets(this.offsets,n,this.frameData,this.thresholdSettings,this.targetElements,t)}getThresholdSettings(){return this.thresholdSettings}setThresholdSettings(e){this.thresholdSettings=e,this.imageData&&this.frameData&&this._debouncedUpdateFrameOffsets(this.offsets,this.imageData,this.frameData,e,this.targetElements)}onFrameDataChanged(e){e(this.frameData),this.onFrameDataChangeListeners.push(e)}onZoom(e){this.onZoomChangeListeners.push(e)}updateFrameOffsets(e,t,A,n,a,i){if(!A||A.length===0||A.some(s=>!s))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 o=this.workflowManager.getCommandDispatcher();a.forEach((s,r)=>{o(new g.GroupCommand([new g.UpdateFramePattern(s,t,e[r]),new g.UpdateFrameThresholdSettingsCommand(s,n.useThreshold,n.invertThreshold,n.threshold,n.thresholdSaturation)]))}),this.stepName&&this.workflowManager.updateStorage(this.stepName,{frameOffsetsList:e}),i&&i()}recalculateZoomLimits(e,t){(this.minZoomScale.length!==t.length||this.maxZoomScale.length!==t.length)&&(this.minZoomScale=new Array(t.length),this.maxZoomScale=new Array(t.length)),t.forEach((A,n)=>{const a=Math.max(A.width/e.width,A.height/e.height);this.forceImageCover?(this.minZoomScale[n]=a,this.maxZoomScale[n]=a*2.5):(this.minZoomScale[n]=a/10,this.maxZoomScale[n]=a*2.5)})}recalculateOffsets(e){this.frameData&&((!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((t,A)=>{this.offsets[A]=g.calculateOffsets(e,t)}),this._debouncedUpdateFrameOffsets(this.offsets,e,this.frameData,this.thresholdSettings,this.targetElements))}}class mt{constructor(e,t,A){this.processRegion=async n=>{var s,r,l,d;const a=this.layouts.find(B=>B.panelId===n.panelId);if(!a)throw new J(n);let i="";if(this.configuration.type===g.StepType.ProductOverlay){let B="";if((s=this.product)!=null&&s.overlayImageUrl&&(B=this.product.overlayImageUrl),i=B,!B)throw new ie(this.configuration,"Couldn't find an asset for product overlay step")}const o=this.evaluateAssetType();if(o===g.LayoutElementType.Image){const B=this.configuration.type===g.StepType.SilentIllustration?(r=this.configuration.data.asset)==null?void 0:r.fileLink:(l=this.product)==null?void 0:l.overlayImageUrl;if(!B)throw new Error("Undefined raster silent step source");const w={stepName:this.configuration.stepName,id:g.generate(),src:B,type:o,y:n.top,x:n.left,width:n.width,height:n.height,layer:n.layer,layerIndex:n.layerIndex,immutable:n.immutable,productOverlay:this.configuration.type===g.StepType.ProductOverlay?!0:void 0,rotation:n.rotation,excludeFromExport:this.configuration.data.excludeFromPrint,preserveAspectRatio:"none"};return{regionElement:{id:w.id,region:n},command:new g.CreateElementCommand(w,a)}}else{const B=this.configuration.type===g.StepType.SilentIllustration?(d=this.configuration.data.asset)==null?void 0:d.fileLink:i,w=async()=>new Promise((h,m)=>{if(!B){m("Undefined vector silent step source");return}g.fetchAsString(B,!0).then(u=>{h(u)}).catch(u=>console.error(u))}),E=await g.generateSVGWithUnknownColors(await w()),C={stepName:this.configuration.stepName,id:g.generate(),cachedObjectURL:await g.svgObjectURL(E.svg),src:B,svg:E.svg,colors:E.colors,type:o,y:n.top,x:n.left,width:n.width,height:n.height,layer:n.layer,layerIndex:n.layerIndex,rotation:n.rotation,immutable:n.immutable,productOverlay:this.configuration.type===g.StepType.ProductOverlay?!0:void 0,excludeFromExport:this.configuration.data.excludeFromPrint};return{regionElement:{id:C.id,region:n},command:new g.CreateElementCommand(C,a)}}},this.configuration=e,this.layouts=t,this.product=A||void 0}async trigger(){if(!this.configuration.data.regions)throw new ie(this.configuration,"Missing regions.");if(this.configuration.type===g.StepType.SilentIllustration){const e=this.configuration.data.regions.map(this.processRegion);return Promise.all(e)}else return this.configuration.type===g.StepType.ProductOverlay?Promise.all(this.configuration.data.regions.map(e=>{if(!this.layouts.find(A=>e.panelId===A.panelId))throw new J(e);return this.processRegion(e)})):Promise.reject("Unknown silent step. This is a bug")}evaluateAssetType(){var t,A,n;const e=this.configuration.type===g.StepType.ProductOverlay&&((t=this.product)!=null&&t.overlayImageUrl)?this.product.overlayImageUrl.toLowerCase():(n=(A=this.configuration.data.asset)==null?void 0:A.fileLink)==null?void 0:n.toLowerCase().split("?")[0];return e!=null&&e.startsWith("data:image/png")||e!=null&&e.endsWith(".jpeg")||e!=null&&e.endsWith(".jpg")||e!=null&&e.endsWith(".png")?g.LayoutElementType.Image:(e!=null&&e.endsWith(".svg")||e!=null&&e.startsWith("image/svg+xml"),g.LayoutElementType.Illustration)}}const It=async c=>{const e=`${W.getServicesApiUrl()}/shortener`;try{return(await(await fetch(e,{method:"POST",body:JSON.stringify({longUrl:c}),headers:{"Content-Type":"application/json"}})).json()).shortUrl}catch(t){throw console.error(t),new Ce("Failed to shorten URL, see console.")}};class ft{async poll(){try{if(await this.predicate()){this.onSuccess(),this.pollingId>-1&&window.clearInterval(this.pollingId);return}}catch{}this.attempts+=1,this.attempts<this.maxAttempts?this.pollingId=window.setTimeout(this.poll.bind(this),this.interval):this.onFailure()}constructor(e,t,A,n=3e3,a=10){this.onSuccess=t,this.onFailure=A,this.predicate=e,this.attempts=0,this.pollingId=-1,this.interval=n,this.maxAttempts=a,this.poll()}}class LA{async init(e,t,A){return A&&await this.reload(e,t,A),null}async reload(e,t,A){const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),s=Object.values(A.layouts).map(r=>r.elements).flat().filter(r=>r.stepName===e.stepName).map(r=>({id:r.id,region:r.stepRegion}));await t.setSelectionsAndElements(e.stepName,[],s,async()=>{var d,B;const r=(d=n==null?void 0:n.storage)==null?void 0:d.videoShortUrl,l=(B=n==null?void 0:n.storage)==null?void 0:B.videoUrl;t.updateStorage(e.stepName,{videoShortUrl:r,videoUrl:l})})}async regenerateQRCode(e,t,A,n,a,i,o,s,r){if(!t&&A!==""&&n===""){const l=async()=>{var I,f;const u=(await ct([A]))[0],F=(f=(I=u==null?void 0:u.versions)==null?void 0:I.find(D=>D.name==="mpeg4"))==null?void 0:f.link;return{asset:u,link:F}},d=await new Promise((u,F)=>{new ft(async()=>!!(await l()).link,async()=>{const I=await l();if(!I.link||!I.link)throw new X(I.asset);u({rel:"mpeg4",href:I.link})},()=>{F("Poller timed out with 40 attempts @ 3 second interval")},3e3,40)});e.forEach(u=>s(new g.DeleteElementCommand(u.id)));const B=i.data.baseUrl.slice(0,4)==="http"?"":"https://",w=new URL(B+i.data.baseUrl);w.searchParams.append("video",btoa(JSON.stringify([d]))),w.pathname=w.pathname+(w.pathname.slice(-1)==="/"?"":"/");const E=w.toString();if(E.length>=2e3)throw new Ce("Cannot create QR code, URL too long.");const C=await It(E);if(o(C),!i.data||!i.data.regions)throw new ie(i,"Missing regions.");const h=await this.regionElements(i),m=await this.command(C,h,a,i.stepName);m&&(m.command&&a.getCommandDispatcher()(m.command),m.followup&&await m.followup()),await a.setSelectionsAndElements(i.stepName,[],h,async()=>{a.updateStorage(i.stepName,{videoShortUrl:C,videoUrl:n}),r(!1)})}else r(!1)}async regionElements(e){const t=A=>({id:g.generate(),region:A});return e.data.regions.map(t)}async command(e,t,A,n){const a=A.getLayouts(),o=`data:image/svg+xml;base64,${btoa(await nt.toString(e,{type:"svg"}))}`,s=t.map(r=>{const l=r.region,d=a.find(B=>B.panelId===(l==null?void 0:l.panelId));if(!d&&l)throw new J(l);if(d&&!l)throw new Error("Region not found");if(!d||!l)throw new Error("Neither a region or layout found!");return new g.CreateElementCommand({stepRegion:l,stepName:n,id:r.id,src:o,type:g.LayoutElementType.Image,y:l.top,x:l.left,width:l.width,height:l.height,rotation:0},d)});return{command:new g.GroupCommand(s),followup:async()=>{}}}}const Dt=new LA;class OA{constructor(){this.frameSourceSvg=async(e,t)=>{if(!e)return g.generateDefaultRectangleFrameSvg(t);const A=e.asset;if(!A)throw new V(e);const n=A.fileLink;if(n)return g.fetchAsString(n,!0);throw new X(A)}}async init(e,t,A){if(A)return await this.reload(e,t,A),null;if(t.setMandatoryFulfilled(e.stepName,!1),t.markStepsAsInitialised([e.stepName]),e.option&&e.option.variants&&e.option.variants.length>0){const n=e.option,a=L.getDefaultVariant(n);return a?this.selectVariantCommand(e,a,[],t,void 0,e.data.placeholderImageUrl):null}return this.selectVariantCommand(e,void 0,[],t,void 0,e.data.placeholderImageUrl)}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),s=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===e.stepName).map(l=>({id:l.id,region:l.stepRegion}));if(!e.option||(e.option.variants||[]).length===0){const l=e.data.regions.map(d=>g.generateDefaultRectangleFrameSvg(d));t.updateStorage(e.stepName,{currentFrameSources:l})}if(n){const l=async()=>{var w,E,C,h;const d=(w=n.storage)==null?void 0:w.framePatternSrc,B=(E=n.storage)==null?void 0:E.frameOffsetsList;if(t.updateMetadata(e.stepName,{frameOffsetsList:B,framePatternSrc:d}),d){const m=(C=t.getStepSpecificServices(e.stepName))==null?void 0:C.frameService;if(!m)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(d,m),t.updateMetadata(e.stepName,{image:d}),t.updateStorage(e.stepName,{framePatternSrc:d})}if(B!=null&&B.some(m=>m.zoom)){const m=(h=t.getStepSpecificServices(e.stepName))==null?void 0:h.frameService;if(!m)throw new Error("Frame service unavailable, cannot load pattern!");m.updateOffsets(B)}t.setMandatoryFulfilled(e.stepName,!0)};if(n.selectedVariants&&n.selectedVariants.length>0){const d=n.selectedVariants[0].id;if(e.option&&d){const B=(r=e.option.variants)==null?void 0:r.find(w=>w.id===d);B&&await t.setSelectionsAndElements(e.stepName,[B],s,async()=>{const w=await Promise.all(e.data.regions.map(E=>this.frameSourceSvg(B,E)));t.updateStorage(e.stepName,{currentFrameSources:w}),await l()})}}else await t.setSelectionsAndElements(e.stepName,[],s,l)}}selectImage(e,t,A){A.setEditedStatus(e.stepName,!0),(t.fileLink||"").endsWith("pdf")?A.addPoller(new ft(async()=>{var s;const i=(s=(await k.getLocalOrFromServer(t.key||"")).versions)==null?void 0:s.find(r=>r.name==="svg");return i?(await fetch(i.link)).status===200:!1},()=>{k.getLocalOrFromServer(t.key||"").then(a=>{this.loadPatternFromAsset(a,e,A)})},()=>{throw new Ce("Failed to resolve transcoded PDF")})):this.loadPatternFromAsset(t,e,A)}async selectVariant(e,t,A,n,a){const i=await this.selectVariantCommand(e,t,A,n,a);i&&(i.command&&n.getCommandDispatcher()(i.command),i.followup&&await i.followup())}getCreateElementCommand(e,t,A,n){return new g.CreateElementCommand({id:e,type:g.LayoutElementType.Frame,x:t.left,y:t.top,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,rotation:t.rotation,scaleX:t.width/n.frameData.width,scaleY:t.height/n.frameData.height,path:n.frameData.path,dataWidth:n.frameData.width,dataHeight:n.frameData.height,stepRegion:t,stepName:n.stepName,disablePlaceholder:n.disablePlaceholder,focalBlur:n.focalBlur,focalBlurStrength:n.focalBlurStrength,focalBlurRadius:n.focalBlurRadius,pattern:n.pattern,immutable:t.immutable},A)}async loadPatternFromString(e,t){if(e.endsWith("svg")){const A=await g.GetSVGDimensions(e),n=A.width,a=A.height,i={src:e,width:n,height:a,aspect:n/a};g.patternImageDataCache.set(e,i),t.setPatternData(i)}else{const A=await g.fetchAsArrayBuffer(e,!0),n=await g.getAttributesFromArrayBuffer(A),a={src:e,width:n.width,height:n.height,aspect:n.width/n.height};g.patternImageDataCache.set(e,a),t.setPatternData(a)}}async selectVariantCommand(e,t,A,n,a,i){var B;const o=(B=n.getStepSpecificServices(e.stepName))==null?void 0:B.frameService;if(!o)throw new Error("Frame service unavailable, cannot load pattern!");const s=await Promise.all(e.data.regions.map(w=>this.frameSourceSvg(t,w)));a&&a(!0);const r=await Promise.all(e.data.regions.map(async(w,E)=>{const C=await g.getFrameData(s[E]),h=o.getImageData(),m=A.map(p=>new g.DeleteElementCommand(p.id)),u=h?g.calculateOffsets(h,C):void 0,F=h?{id:g.generate(),src:h.src,x:(u==null?void 0:u.x)||0,y:(u==null?void 0:u.y)||0,width:h.width,height:h.height,scaleX:(u==null?void 0:u.zoom)||1,scaleY:(u==null?void 0:u.zoom)||1,rotation:0}:void 0,I=g.generate(),D=n.getLayouts().find(p=>p.panelId===w.panelId);if(!D)throw new J(w);return{command:this.getCreateElementCommand(I,w,D,{frameData:C,pattern:F,disablePlaceholder:e.data.disablePlaceholder,focalBlur:e.data.focalBlur,focalBlurStrength:e.data.focalBlurStrength,focalBlurRadius:e.data.focalBlurRadius,stepName:e.stepName}),regionEl:{id:I,region:w},removeExistingCommands:m}})),l=r.map(w=>w.command),d=r.map(w=>w.removeExistingCommands).flat();return{command:new g.GroupCommand([...l,...d]),followup:async()=>{a&&a(!1),await n.setSelectionsAndElements(e.stepName,t?[t]:[],[...r.map(w=>w.regionEl)],async()=>{var w;if(n.updateStorage(e.stepName,{currentFrameSources:s}),i){const E=(w=n.getStepSpecificServices(e.stepName))==null?void 0:w.frameService;if(!E)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(i,E)}})}}}patternSource(e){var n;const t=(n=e.versions)==null?void 0:n.find(a=>a.name==="svg");if(t)return t.link;const A=e.fileLink;if(A)return A;throw new X(e)}async loadPatternFromAsset(e,t,A){var o;const n=this.patternSource(e),a=A.markUpdatePending(),i=(o=A.getStepSpecificServices(t.stepName))==null?void 0:o.frameService;if(!i)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(n,i),A.updateMetadata(t.stepName,{image:n}),A.updateStorage(t.stepName,{framePatternSrc:n}),A.markUpdateCompleted(a)}}const Ie=new OA;class zA{async getIllustrationBody(e){return new Promise(t=>{g.fetchAsString(e,!0).then(A=>{t(A)}).catch(A=>console.error(A))})}getCreateElementCommand(e,t,A,n){return new g.CreateElementCommand({stepRegion:t,stepName:n.stepName,colors:n.svg.colors,id:e,src:n.src,svg:n.svg.svg,cachedObjectURL:n.objectURL,type:g.LayoutElementType.Illustration,y:t.top,x:t.left,rotation:t.rotation,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,immutable:t.immutable},A)}getColors(e,t){const A=t.getRegionElements(e.stepName)||[];if(A.length===0)return[];try{return g.findElement(A[0].id,t.getAllLayoutData()).colors}catch{return[]}}async init(e,t,A){const n=e.option;if(!n)return null;if(A)return this.reload(e,t,A);{const a=L.getDefaultVariant(n);if(a)return await this.selectVariantCommand(e,a,[],()=>{},t)}return null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const l=n.selectedVariants[0].id;if(s&&l){const d=(r=s.variants)==null?void 0:r.find(B=>B.id===l);if(d){const B=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[d],B,async()=>{var w;t.updateMetadata(e.stepName,{colors:(w=n.storage)==null?void 0:w.colors}),t.setMandatoryFulfilled(e.stepName,!0)})}}else throw new Error("Required illustration variant no longer available")}return null}async availableColors(e,t){var n;const A=e.data.colorOption;return A?A?(n=A.variants)==null?void 0:n.map(a=>({fill:a.color,stroke:a.color,variant:a})):[]:[]}async changeColorsCommand(e,t,A,n,a){var l;const i={};for(const[d,B]of a.entries())i[d]={browserValue:B,spotColor:(l=i[d])==null?void 0:l.spotColor};const o=g.modifySVGWithElementProperties(e,t,A,i),s=await g.svgObjectURL(o),r=[];for(const d of n){for(const[B,w]of a.entries())r.push(new g.IllustrationColorCommand(d,B,w));r.push(new g.IllustrationCacheCommand(d,o,s))}return new g.GroupCommand(r)}async changeColors(e,t,A,n,a){var w,E;if(t.length===0)return;const i=g.findElement(t[0].id,n().map(C=>C.layoutState)),o={...i.colors},s={};Object.entries(o).forEach(([C,h])=>{const m={browserValue:h.browserValue},u=h.spotColor;u&&(m.spotColor={profileName:u.profileName,namedColor:u.namedColor}),s[C]=m});for(const[C,h]of a.entries())o[C]={browserValue:h,spotColor:(w=o[C])==null?void 0:w.spotColor},s[C]={browserValue:h};let r=Array.from(Object.values(o)).map(C=>C.browserValue);const l=e.data.colorOption;l&&((E=l.variants)==null||E.forEach(C=>{r=r.map(h=>{var m;return h.toLowerCase()===((m=C.color)==null?void 0:m.toLowerCase())?C.name:h})})),A.updateMetadata(e.stepName,{colors:r});const d=new Map;if(Object.entries(o).forEach(([C,h])=>{d.set(C,h.browserValue)}),!i.svg)throw new Error("Colors changed before SVG loaded. This should never happen!");const B=await this.changeColorsCommand(i.svg,i.width,i.height,t.map(C=>C.id),d);A.updateStorage(e.stepName,{colors:s}),A.getCommandDispatcher()(B)}async selectVariant(e,t,A,n,a){const i=await this.selectVariantCommand(e,t,A,n,a);i&&(i.command&&a.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantCommand(e,t,A,n,a){var m;if(!e.data||!e.data.regions)throw new ie(e,"Missing regions.");n(!0);const i=A.map(u=>new g.DeleteElementCommand(u.id));a.setMandatoryFulfilled(e.stepName,!1);const o=t.asset;if(!o)throw new V(t);const s=o.fileLink;if(!s)throw new X(o);const r=await g.generateSVGWithUnknownColors(await this.getIllustrationBody(s)),l=await g.svgObjectURL(r.svg),d=u=>{const F=a.getLayouts().find(f=>f.panelId===u.panelId);if(!F)throw new J(u);const I=g.generate();return{regionElement:{id:I,region:u},command:this.getCreateElementCommand(I,u,F,{stepName:e.stepName,src:s,objectURL:l,svg:r})}},B=e.data.regions.map(d),E=[...B.map(u=>u.command),...i];let C=Array.from(Object.values(r.colors)).map(u=>u.browserValue);const h=e.data.colorOption;return h&&((m=h.variants)==null||m.forEach(u=>{C=C.map(F=>{var I;return F.toLowerCase()===((I=u.color)==null?void 0:I.toLowerCase())?u.name:F})})),a.updateMetadata(e.stepName,{colors:C}),{command:new g.GroupCommand(E),followup:async()=>{await a.setSelectionsAndElements(e.stepName,[t],B.map(I=>I.regionElement),async()=>{a.setMandatoryFulfilled(e.stepName,!0),n(!1)});const u=await this.availableColors(e,a)||[],F=Object.keys(r.colors);if(e.data.colorPickerEnabled&&u.length===1&&F.length===1){const I=u[0],f=F[0];await this.changeColors(e,B.map(D=>D.regionElement),a,()=>a.getCommandContext().getAllLayouts(),new Map([[f,I.variant.color]]))}}}}}const ce=new zA;class jA{async init(e,t,A){const n=e.option;if(!n)throw new ae(e);if(A)await this.reload(e,t,A);else{const a=L.getDefaultVariant(n);if(a)return await this.selectVariantLambda(e,a,t,()=>{})}return null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===e.stepName),s=e.option;if(!s)throw new ae(e);if(n!=null&&n.selectedVariants){const l=n.selectedVariants[0].id;if(l){const d=(r=s.variants)==null?void 0:r.find(B=>B.id===l);if(d){const B=d.material,w=o.map(E=>({id:E.id,region:E.stepRegion}));await t.setSelectionsAndElements(e.stepName,[d],w,async()=>{const E=t.getModelContainer();if(E){const C=e.data.targetMaterials.map(h=>E.applyMaterialVariant(h,s.id||"",B||{}));Promise.all(C).then(()=>t.setMandatoryFulfilled(e.stepName,!0))}})}}}}async selectVariant(e,t,A,n){const a=await this.selectVariantLambda(e,t,A,n);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantLambda(e,t,A,n){const a=A.getModelContainer();n(!0);const i=t.material;if(!i)throw n(!1),new V(t);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(e.stepName,[t],[],async()=>{try{a&&e.data.targetMaterials.forEach(o=>{e.option&&a.applyMaterialVariant(o,e.option.id||"",i)}),A.setMandatoryFulfilled(e.stepName,!0)}finally{n(!1)}})}}}}const Ge=new jA;class KA{async init(e,t,A){const n=e.option;if(!n)throw new ae(e);if(A)await this.reload(e,t,A);else{const a=L.getDefaultVariant(n);if(a)return await this.selectVariantLambda(e,a,t,()=>{})}return null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const l=n.selectedVariants[0].id;if(s&&l){const d=(r=s.variants)==null?void 0:r.find(B=>B.id===l);if(d){const B=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[d],B,async()=>{var E;const w=t.getModelContainer();if(w&&e.option){const C=(E=d.asset)==null?void 0:E.fileLink;if(!C)throw new V(d);await w.applyModelVariant(e.stepName||"",{model:C,contextService:t.getLayoutPreviewService()},e.data.replaceProductModel||!1),t.setMandatoryFulfilled(e.stepName,!0)}})}}}}async selectVariant(e,t,A,n){const a=await this.selectVariantLambda(e,t,A,n);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantLambda(e,t,A,n){var i;n(!0);const a=(i=t.asset)==null?void 0:i.fileLink;if(!a)throw new V(t);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(e.stepName,[t],[],async()=>{try{const o=A.getModelContainer();o&&await o.applyModelVariant(e.stepName,{model:a,contextService:A.getLayoutPreviewService()},e.data.replaceProductModel||!1),A.setMandatoryFulfilled(e.stepName,!0)}finally{n(!1)}})}}}}const ve=new KA;class VA{async init(e,t,A){if(A)await this.reload(e,t,A);else return t.updateMetadata(e.stepName,{text:""}),this.changeTextCommand(e,"",t,"",()=>{});return null}async reload(e,t,A){const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),s=Object.values(A.layouts).map(r=>r.elements).flat().filter(r=>r.stepName===e.stepName).map(r=>({id:r.id,region:r.stepRegion}));await t.setSelectionsAndElements(e.stepName,[],s,async()=>{var r,l;t.updateStorage(e.stepName,{text:(r=n==null?void 0:n.storage)==null?void 0:r.text}),t.setMandatoryFulfilled(e.stepName,((l=n==null?void 0:n.storage)==null?void 0:l.text)!=="")})}async changeText(e,t,A,n,a){const i=await this.changeTextCommand(e,t,A,n,a);i&&(i.command&&A.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async changeTextCommand(e,t,A,n,a){var l;const i=A.getRegionElements(e.stepName),o=(l=A.getStepSpecificServices(e.stepName))==null?void 0:l.module;if(!o)return console.error("Missing module."),null;const s=A.getProfanities();if(!this.validateInput(e,t,s,a))return A.setMandatoryFulfilled(e.stepName,!1),console.error(n),null;if(A.setMandatoryFulfilled(e.stepName,t!==""),!e.data||!e.data.regions||e.data.regions.length<=0)return console.error("Missing configuration."),null;A.updateStorage(e.stepName,{text:t});const r=(d,B,w)=>{const E=w||g.generate(),h=A.getLayouts().find(u=>u.panelId===B.panelId);if(!h)return console.error(`Can not find layout for region: ${B.panelId}`),null;const m=[];return w&&m.push(new g.DeleteElementCommand(E)),m.push(new g.CreateElementCommand({stepRegion:B,stepName:e.stepName,colors:{},id:E,svg:d,type:g.LayoutElementType.Illustration,y:B.top,x:B.left,rotation:B.rotation,width:B.width,height:B.height,layer:B.layer,layerIndex:B.layerIndex,immutable:B.immutable},h)),{id:E,region:B,command:new g.GroupCommand(m)}};if(i.length>0){const B=i.map(w=>{if(!w.region)return null;const E=o.svgPrint(t,w.region);return r(E,w.region,w.id)}).filter(w=>!!w).filter(w=>!!w).map(w=>w&&w.command);return{command:new g.GroupCommand(B),followup:async()=>{}}}else{const d=e.data.regions.map(w=>r(o.svgPrint(t,w),w)),B=d.filter(w=>!!w).map(w=>w&&w.command);return{command:new g.GroupCommand(B),followup:async()=>{const w=d.filter(E=>E).map(E=>E&&{id:E.id,region:E.region});await A.setSelectionsAndElements(e.stepName,[],w)}}}}validateInput(e,t,A,n){if(e.data&&e.data.maxLength){const i=e.data.maxLength;if(t.length>i)return n("Too many characters."),!1}if(!/^$|^[a-zA-Z0-9 ]+$/.test(t))return n("Unsupported characters."),!1;const a=Ye.split(t.toLowerCase());for(const i of a)for(const o in A){const s=A[o].toLowerCase().replace(/\s/g,"");if(i===s)return n("Blocked profanity."),!1}return n(""),!0}}const pt=new VA;class WA{async init(e,t,A){const n=e.option;if(!n)return null;if(A)await this.reload(e,t,A);else if(n.defaultVariant)return t.markStepsAsInitialised([e.stepName]),this.selectVariantCommand(e,n.defaultVariant,t,()=>{});return t.markStepsAsInitialised([e.stepName]),null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const l=n.selectedVariants[0].id;if(s&&l){const d=(r=s.variants)==null?void 0:r.find(B=>B.id===l);if(d){const B=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[d],B,async()=>{t.setMandatoryFulfilled(e.stepName,!0)})}}}}async selectVariant(e,t,A,n){const a=await this.selectVariantCommand(e,t,A,n);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantCommand(e,t,A,n){const a=t.asset;if(!a)throw new V(t);const i=a==null?void 0:a.fileLink;if(!i)return console.error("No URL for picture!"),null;n(!0),A.setMandatoryFulfilled(e.stepName,!1);const s=A.getRegionElements(e.stepName).map(d=>new g.DeleteElementCommand(d.id)),r=d=>{const w=A.getLayouts().find(C=>C.panelId===d.panelId);if(!w)throw new J(d);const E=g.generate();return{regionElement:{id:E,region:d},command:new g.CreateElementCommand({stepName:e.stepName,stepRegion:d,id:E,src:i,type:g.LayoutElementType.Image,y:d.top,x:d.left,rotation:d.rotation,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,immutable:d.immutable,preserveAspectRatio:"none"},w)}},l=e.data.regions.map(r);return{command:new g.GroupCommand([...s,...l.map(d=>d.command)]),followup:async()=>{await A.setSelectionsAndElements(e.stepName,[t],l.map(d=>d.regionElement),async()=>{A.setMandatoryFulfilled(e.stepName,!0),n(!1)})}}}}const ke=new WA;class XA{async init(e,t,A){const n=e.option;if(!n)return null;if(A)await this.reload(e,t,A);else{const a=n.variants;if(L.getDefaultVariant(n)){const o=a==null?void 0:a.find(s=>{var r;return s.id===((r=n.defaultVariant)==null?void 0:r.id)});return this.selectVariantLambda(e,(o==null?void 0:o.id)||"",t)}}return null}async reload(e,t,A){var i;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),a=e.option;if(n!=null&&n.selectedVariants){const o=n.selectedVariants[0].id;if(a&&o){const s=(i=a.variants)==null?void 0:i.find(r=>r.id===o);s&&await t.setSelectionsAndElements(e.stepName,[s],[])}}}async selectVariant(e,t,A){await A.getInitializationPromise();const n=await this.selectVariantLambda(e,t,A);n&&(n.command&&A.getCommandDispatcher()(n.command),n.followup&&await n.followup())}async selectVariantLambda(e,t,A){const n=e.option;if(!n)return null;const a=n.variants;if(!a)return null;const i=a.length>1?a.find(o=>o.id===t):a[0];if(!i)throw new Error("Failed to find selected variant in step variants, this should never happen!");return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(e.stepName,[i],[],async()=>{A.setMandatoryFulfilled(e.stepName,!0)})}}}}const be=new XA;class qA{constructor(){this.shapeFillId="spiff-fill-shape"}async availableColours(e){var A;const t=e.option;return t?((A=t.variants)==null?void 0:A.map(n=>({fill:n.color,stroke:n.color,variant:n})))||[]:[]}setCustomColor(e,t,A){const n=A.getLayouts(),i=(A.getRegionElements(t.stepName)||[]).map(o=>{const s=o.region;if(!n.find(l=>l.panelId===(s==null?void 0:s.panelId)))throw new J(s);return new g.IllustrationColorCommand(o.id,this.shapeFillId,e)}).filter(o=>!!o);A.getCommandDispatcher()(new g.GroupCommand(i)),A.updateStorage(t.stepName,{colour:e})}async init(e,t,A){const n=e.option;if(!n)throw new ae(e);if(A)await this.reload(e,t,A);else{const a=L.getDefaultVariant(n);return a?this.selectVariantCommand(e,{fill:a.color,stroke:a.color,variant:a},[],t):null}return null}async selectVariant(e,t,A,n){const a=await this.selectVariantCommand(e,t,A,n);a&&(a.command&&n.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(l=>l.elements).flat().filter(l=>l.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const l=n.selectedVariants[0].id;if(s&&l){const d=(r=s.variants)==null?void 0:r.find(B=>B.id===l);if(d){const B=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[d],B,async()=>{var w;t.updateStorage(e.stepName,{colour:((w=n==null?void 0:n.storage)==null?void 0:w.colour)||""}),t.setMandatoryFulfilled(e.stepName,!0)})}}}}async selectVariantCommand(e,t,A,n){var s;const a=n.getLayouts(),i=(s=n.getStepStorage(e.stepName))==null?void 0:s.colour,o=()=>{var r,l;if(((r=t.variant)==null?void 0:r.color)==="#custom")return i||"#FFFFFF";if((l=t.variant)!=null&&l.color)return t.variant.color;throw new Error("Failed to resolve color for shape step.")};if(A.length>0){const r=d=>{const B=d.region;if(!a.find(C=>C.panelId===(B==null?void 0:B.panelId)))throw new J(B);const E=o();return new g.IllustrationColorCommand(d.id,this.shapeFillId,E)},l=A.map(r).filter(d=>!!d);return{command:new g.GroupCommand(l),followup:async()=>{await n.setSelectionsAndElements(e.stepName,t.variant?[t.variant]:[],A),n.updateStorage(e.stepName,{colour:o()})}}}else{const r=w=>{const E=a.find(F=>F.panelId===w.panelId);if(!E)throw new J(w);const C=o(),h=`
|
|
611
611
|
<svg
|
|
612
612
|
xmlns="http://www.w3.org/2000/svg"
|
|
613
613
|
xmlnsXlink="http://www.w3.org/1999/xlink"
|
|
@@ -1960,7 +1960,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
|
|
|
1960
1960
|
}
|
|
1961
1961
|
}
|
|
1962
1962
|
}
|
|
1963
|
-
`,hn=async c=>{var t;return(t=(await N.getShadowGraphqlClient().mutate({mutation:wn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:c.name,layouts:c.layouts,workflowId:c.workflowId,transactionId:c.transactionId,previewImage:c.previewImage,useThreeDimPreview:c.useThreeDimPreview,metadata:c.metadata,selectedVariants:c.selectedVariants}})).data)==null?void 0:t.designCreate},Cn=async c=>{var t;return(t=(await N.getShadowGraphqlClient().mutate({mutation:En,errorPolicy:"all",fetchPolicy:"no-cache",variables:{inputs:c.map(A=>({name:A.name,layouts:A.layouts,workflowId:A.workflowId,transactionId:A.transactionId,previewImage:A.previewImage,useThreeDimPreview:A.useThreeDimPreview,metadata:A.metadata,selectedVariants:A.selectedVariants}))}})).data)==null?void 0:t.designCreateMany},je=(c,e,t)=>{const A=a=>{const i={};if(a.type==="Frame"){const o=c[a.stepName],s=a.data;if(!o||!o.image||s.hideImageInCart&&t)return i;i[`${a.stepTitle} image`]=o.image}if(a.type==="Illustration"){const o=c[a.stepName],s=a.data;if(!o||s.hideColorsInCart&&t||!o.colors)return i;if(o.colors.length>0){const r=o.colors.join(", ").toUpperCase();i[`${a.stepTitle} colors`]=r}}if(a.type==="Module"){const o=c[a.stepName],s=a.data;if(!o||o.text===void 0||o.text===null||s.hideTextInCart&&t)return i;i[`${a.stepTitle} text`]=o.text}if(a.type==="Text"){const o=c[a.stepName];if(!o)return i;const s=a.data;(!s.hideTextInCart||!t&&o.text!==void 0&&o.text!==null)&&(i[`${a.stepTitle} text`]=o.text),o.color&&(!s.hideColorInCart||!t)&&(i[`${a.stepTitle} color`]=o.color)}return i},n={};return e.steps.forEach(a=>{Object.assign(n,A(a))}),n},Qn=(c,e,t,A)=>{const n={};let a;if(t){a=je(t,e,!1);for(const i of Object.keys(a))n[i]={value:a[i],priceModifier:0}}else if(A){a=A;for(const i of Object.keys(a))n[i]={value:a[i],priceModifier:0}}for(const i of Object.keys(c)){const o=c[i],s=e.steps.find(r=>r.stepTitle===i);if(o.length===1)n[`${s==null?void 0:s.stepTitle} selection`]={value:o[0].name,priceModifier:o[0].priceModifier};else if(o.length>1)for(let r=0;r<o.length;r++)n[`${s==null?void 0:s.stepTitle} selection ${r+1}`]={value:o[r].name,priceModifier:o[r].priceModifier}}return n},Ot=(c,e,t,A,n,a,i,o)=>{var E,C;const s=e.basePrice||0,r=c.priceModifierTotal||0,l=Qn(A,t,void 0,a),B=(P.getMap("transactionOwnerIds")||new Map).get(c.id),w={additionalExternalProductId:(E=c.integrationProduct)==null?void 0:E.additionalExternalProductId,additionalExternalVariantId:(C=c.integrationProduct)==null?void 0:C.additionalExternalVariantId,baseCost:s,designProductId:c.externalDesignProductId,designProductVariantId:c.externalDesignProductVariantId,event:"onComplete",exportedData:l,externalCartProductId:c.externalCartProductId,externalCartProductVariantId:c.externalCartProductVariantId,lineItemImageUrl:i||"",optionsCost:r,processExecutionId:o,quantity:c.quantity,transactionId:c.id,transactionOwnerId:B,weight:e.weight,workflowViewerLink:c.workflowViewerLink||"",workflowViewerReadOnlyLink:c.workflowViewerReadOnlyLink||""};return a&&(w.metadata=a),A&&(w.selectedVariants=A),n&&(w.sku=n),w},zt=async(c,e,t,A,n,a,i,o,s,r)=>{var S;await(async()=>{var T;if(r!==void 0)return r;await c.outstandingRequestsPromise();const x=(P.getMap("transactionOwnerIds")||new Map).get(n.id),H=await N.getShadowGraphqlClient().query({query:ht,variables:{ids:[n.id]},fetchPolicy:"no-cache",errorPolicy:"all",context:{transactionOwnerId:x}}),R=(T=H.data)==null?void 0:T.transactions[0].workflowState;return H.errors?(H.errors.forEach(
|
|
1963
|
+
`,hn=async c=>{var t;return(t=(await N.getShadowGraphqlClient().mutate({mutation:wn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:c.name,layouts:c.layouts,workflowId:c.workflowId,transactionId:c.transactionId,previewImage:c.previewImage,useThreeDimPreview:c.useThreeDimPreview,metadata:c.metadata,selectedVariants:c.selectedVariants}})).data)==null?void 0:t.designCreate},Cn=async c=>{var t;return(t=(await N.getShadowGraphqlClient().mutate({mutation:En,errorPolicy:"all",fetchPolicy:"no-cache",variables:{inputs:c.map(A=>({name:A.name,layouts:A.layouts,workflowId:A.workflowId,transactionId:A.transactionId,previewImage:A.previewImage,useThreeDimPreview:A.useThreeDimPreview,metadata:A.metadata,selectedVariants:A.selectedVariants}))}})).data)==null?void 0:t.designCreateMany},je=(c,e,t)=>{const A=a=>{const i={};if(a.type==="Frame"){const o=c[a.stepName],s=a.data;if(!o||!o.image||s.hideImageInCart&&t)return i;i[`${a.stepTitle} image`]=o.image}if(a.type==="Illustration"){const o=c[a.stepName],s=a.data;if(!o||s.hideColorsInCart&&t||!o.colors)return i;if(o.colors.length>0){const r=o.colors.join(", ").toUpperCase();i[`${a.stepTitle} colors`]=r}}if(a.type==="Module"){const o=c[a.stepName],s=a.data;if(!o||o.text===void 0||o.text===null||s.hideTextInCart&&t)return i;i[`${a.stepTitle} text`]=o.text}if(a.type==="Text"){const o=c[a.stepName];if(!o)return i;const s=a.data;(!s.hideTextInCart||!t&&o.text!==void 0&&o.text!==null)&&(i[`${a.stepTitle} text`]=o.text),o.color&&(!s.hideColorInCart||!t)&&(i[`${a.stepTitle} color`]=o.color)}return i},n={};return e.steps.forEach(a=>{Object.assign(n,A(a))}),n},Qn=(c,e,t,A)=>{const n={};let a;if(t){a=je(t,e,!1);for(const i of Object.keys(a))n[i]={value:a[i],priceModifier:0}}else if(A){a=A;for(const i of Object.keys(a))n[i]={value:a[i],priceModifier:0}}for(const i of Object.keys(c)){const o=c[i],s=e.steps.find(r=>r.stepTitle===i);if(o.length===1)n[`${s==null?void 0:s.stepTitle} selection`]={value:o[0].name,priceModifier:o[0].priceModifier};else if(o.length>1)for(let r=0;r<o.length;r++)n[`${s==null?void 0:s.stepTitle} selection ${r+1}`]={value:o[r].name,priceModifier:o[r].priceModifier}}return n},Ot=(c,e,t,A,n,a,i,o)=>{var E,C;const s=e.basePrice||0,r=c.priceModifierTotal||0,l=Qn(A,t,void 0,a),B=(P.getMap("transactionOwnerIds")||new Map).get(c.id),w={additionalExternalProductId:(E=c.integrationProduct)==null?void 0:E.additionalExternalProductId,additionalExternalVariantId:(C=c.integrationProduct)==null?void 0:C.additionalExternalVariantId,baseCost:s,designProductId:c.externalDesignProductId,designProductVariantId:c.externalDesignProductVariantId,event:"onComplete",exportedData:l,externalCartProductId:c.externalCartProductId,externalCartProductVariantId:c.externalCartProductVariantId,lineItemImageUrl:i||"",optionsCost:r,processExecutionId:o,quantity:c.quantity,transactionId:c.id,transactionOwnerId:B,weight:e.weight,workflowViewerLink:c.workflowViewerLink||"",workflowViewerReadOnlyLink:c.workflowViewerReadOnlyLink||""};return a&&(w.metadata=a),A&&(w.selectedVariants=A),n&&(w.sku=n),w},zt=async(c,e,t,A,n,a,i,o,s,r)=>{var S;await(async()=>{var T;if(r!==void 0)return r;await c.outstandingRequestsPromise();const x=(P.getMap("transactionOwnerIds")||new Map).get(n.id),H=await N.getShadowGraphqlClient().query({query:ht,variables:{ids:[n.id]},fetchPolicy:"no-cache",errorPolicy:"all",context:{transactionOwnerId:x}}),R=(T=H.data)==null?void 0:T.transactions[0].workflowState;return H.errors?(H.errors.forEach(b=>{H.errors&&console.log("Server Error:",b.message)}),null):R??null})()||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(A())),await c.updateStateWithServerImmediate(A),console.log("Server state is undefined @ Workflow completion"));const B=c.getPreviewService(),w=(S=e==null?void 0:e.finalizeStepConfig)==null?void 0:S.lookAtAnimation,E=B&&e.showModelOnFinishStep&&!!w,C=s&&je(s,e,!0),h=s&&je(s,e,!1),m=async y=>{const x={};let Y=0;if(Object.keys(a).length>0)for(const H of Object.keys(a)){const R=a[H],T=e.steps.find(b=>b.stepName===H);for(let b=0;b<R.selections.length;++b){const z=R.selections[b];if(T&&(!y||T.option&&(T.option.variants||[]).length>1&&!T.data.hideSelectionInCart&&!T.data.hideSelectionsInCart)){const $e=T.stepTitle;x[$e]?x[$e].push({id:z.id||"",name:z.name,priceModifier:z.priceModifier}):x[$e]=[{id:z.id||"",name:z.name,priceModifier:z.priceModifier}]}Y+=z.priceModifier}}return[x,Y]},[u]=await m(!0),F=Object.fromEntries(Object.keys(u).map(y=>[y,u[y].map(x=>x.id)])),[I]=await m(!1),f=Object.fromEntries(Object.keys(I).map(y=>[y,I[y].map(x=>x.id)])),D=await o(E,n.id);return{designDetails:(()=>{const y={name:i,layouts:t.map(x=>({index:x.index,panelId:x.panelId})),workflowId:e.id,transactionId:n.id,useThreeDimPreview:!!E,previewImage:D};if(h){const x=[];for(const[Y,H]of Object.entries(h))x.push({key:Y,value:H});y.metadata=x}if(F){const x=[];for(const[Y,H]of Object.entries(f))x.push({key:Y,ids:H});y.selectedVariants=x}return y})(),cartSelectionsWithPrices:u,cartMetadata:C}},jt=async(c,e,t,A,n,a,i,o,s,r,l)=>{var m,u;s("workflow.steps.finish.finalize.buildingLayouts");const{designDetails:d,cartSelectionsWithPrices:B,cartMetadata:w}=await zt(c,e,t,A,a,i,o,r,l);s("workflow.steps.finish.finalize.creatingDesign");const E=await hn(d),C=(m=E==null?void 0:E.transaction)==null?void 0:m.previewImageLink;if(!(E!=null&&E.transaction))throw new Error("Failed to create design");s("workflow.steps.finish.finalize.updatingTransaction");const h=E.transaction;return Ot(h,n,e,B,E==null?void 0:E.sku,w,C,(u=E==null?void 0:E.processExecution)==null?void 0:u.id)},un=async(c,e,t)=>{e("workflow.steps.finish.finalize.buildingLayouts"),await Promise.all(c.map(async o=>{await o.workflowManager.outstandingRequestsPromise()}));const n=await(async()=>{var r;const s=await N.getShadowGraphqlClient().query({query:ht,variables:{ids:c.map(l=>l.transaction.id)},fetchPolicy:"no-cache",errorPolicy:"all"});return s.errors?(s.errors.forEach(l=>{s.errors&&console.log("Server Error:",l.message)}),null):(r=s.data)!=null&&r.transactions?s.data.transactions.map(l=>l.workflowState??null):null})(),a=await Promise.all(c.map(async(o,s)=>await zt(o.workflowManager,o.workflow,o.layouts,o.getReducerState,o.transaction,o.workflowSelections,o.designName,t??(()=>Promise.resolve(void 0)),o.workflowMetadata,n?n[s]:void 0)));e("workflow.steps.finish.finalize.creatingDesign");const i=await Cn(a.map(o=>o.designDetails));if(!i)throw new Error("Failed to create designs");return e("workflow.steps.finish.finalize.updatingTransaction"),i.map((o,s)=>{var B;const r=c[s],l=a[s],d=o.transaction;return Ot(d,r.product,r.workflow,l.cartSelectionsWithPrices,o.sku,l.cartMetadata,void 0,(B=o.processExecution)==null?void 0:B.id)})};class mn{constructor(){this.localPersistenceKey="designTransactions",this.storageMethod="Local",this.designSavedListeners=[]}attachSaveListener(e){this.designSavedListeners.push(e)}detachSaveListener(e){this.designSavedListeners=this.designSavedListeners.filter(t=>t!==e)}async getSavedDesigns(){if(this.storageMethod==="Local"){const e=P.get(this.localPersistenceKey);return e?JSON.parse(e):[]}throw new v("Unexpected storage method requested")}async getSavedDesignByTransaction(e){return(await this.getSavedDesigns()).find(A=>A.transactionId===e)}async addDesign(e){const A=(await this.getSavedDesigns()).filter(n=>n.transactionId!==e.transactionId);A.unshift(e),await this.setDesigns(A),this.designSavedListeners.forEach(n=>n(e))}async renameDesign(e,t){const A=await this.getSavedDesigns(),n=A.find(a=>a.transactionId===e);if(!n)throw new Error(`No saved design for transaction ${e}.`);n.title=t,await this.setDesigns(A)}async removeDesign(e){const t=await this.getSavedDesigns();await this.setDesigns(t.filter(A=>A.transactionId!==e))}async setDesigns(e){if(this.storageMethod==="Local"){P.set(this.localPersistenceKey,JSON.stringify(e));return}throw new v("Unexpected storage method requested")}}const Fe=new mn,In=M.gql`
|
|
1964
1964
|
mutation AddTransactionStakeholder($id: String!, $type: String!, $details: CustomerDetailsInput!) {
|
|
1965
1965
|
transactionAddStakeholder(id: $id, details: $details, type: $type) {
|
|
1966
1966
|
id
|
|
@@ -1974,7 +1974,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
|
|
|
1974
1974
|
}
|
|
1975
1975
|
}
|
|
1976
1976
|
}
|
|
1977
|
-
`;var Kt=(c=>(c.QuantityChanged="QuantityChanged",c))(Kt||{});class le{constructor(e,t){var n;if(this.cachedStepHandles=new Map,this.renderableScenes=[],this.renderableSceneCallbacks=[],this.eventCallbacks=new Map,this.debouncedSavedDesignUpdate=tt(async()=>{await Fe.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()},2500),this.getCanvasObjectURLAsync=async a=>new Promise((i,o)=>{try{a.toBlob(s=>{if(s){const r=URL.createObjectURL(s);i(r)}})}catch(s){o(s)}}),!t.workflow)throw new Error("No Workflow ID provided.");this.client=e;const A=t.layouts;this.commandContext=new g.CommandContext,this.commandContext.initialize(A,t.reloadedState),this.isReadOnly=t.transaction.isOrdered||!!t.readOnly,this.workflowManager=new dn(t.workflow,((n=t.product.profanities)==null?void 0:n.map(a=>a.word))||[],A,this.commandContext,a=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return t.stateMutationFunc(a)},t.transaction,t.product,t.previewService,t.renderableContextService,t.reloadedState,t.readOnly,t.modelContainer,t.isReloadedTransaction,t.singleVariantsRenderable,t.delayWorkflowStateSync),this.workflowManager.addSelectionCallback(a=>{const i=a.traversableScenes.map(o=>{const s=o.renderableSteps.map(r=>r.stepName);return{id:o.name,title:o.title,renderableSteps:s,workflowScene:o}});this.renderableScenes=i,this.renderableSceneCallbacks.forEach(o=>o(i))})}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async createPreviewImage(e,t){var u,F;const A=this.workflowManager.getWorkflow(),n=(u=A==null?void 0:A.finalizeStepConfig)==null?void 0:u.lookAtAnimation;if(e){if(!n)throw new Error("Failed to generate cart preview image!");return await((F=this.workflowManager.getPreviewService())==null?void 0:F.renderSceneScreenshot(t??512,n))||""}let a=2048;t&&t<=2048&&(a=t);const i=g.createCanvas(a,a),o=this.commandContext.getAllLayouts(),s=A.defaultPreviewPanelIndex||0,r=A.panels[s],l=o.find(I=>{var f;return((f=I.layoutState)==null?void 0:f.layout.panelId)===(r==null?void 0:r.name)})||o[0],d=l.layoutState.layout.previewRegion?{x:l.layoutState.layout.previewRegion.left,y:l.layoutState.layout.previewRegion.top,width:l.layoutState.layout.previewRegion.width,height:l.layoutState.layout.previewRegion.height}:{x:0,y:0,width:l.layoutState.layout.width,height:l.layoutState.layout.height},B=this.commandContext.getLayoutById(l.layoutState.layout.id),w=i.getContext("2d");if(!w)throw new Ce("Failed to obtain 2D context for preview image creation");const E=g.getSvgElement(B.layoutState.layout,B.layoutState.elements,{renderingConfiguration:{purpose:g.LayoutRenderingPurpose.Print,region:{left:d.x,top:d.y,width:d.width,height:d.height}}}),C=g.renderPapyrusComponentAsString(E);await(await et.Pith.from(w,C,{anonymousCrossOrigin:!0,ignoreDimensions:!1,createCanvas:g.createCanvas,createImage:g.loadImage,DOMParser:g.getDomParser(),fetch:g.fetch})).render();const m=await this.getCanvasObjectURLAsync(i);return i.toDataURL(m)}getStepById(e){const t=this.getWorkflowManager().getWorkflow().steps.find(a=>a.stepName===e);if(!t||!this.stepHasHandle(t))return;const A=this.cachedStepHandles.get(t.stepName);if(A)return A;const n=pe.get(this.getWorkflowManager(),t);return this.cachedStepHandles.set(t.stepName,n),n}getSteps(){return this.getScenes().flatMap(e=>this.getStepsByScene(e))}getScenes(){return this.getWorkflowManager().getWorkflow().stepGroups.map(t=>({id:t.id,name:t.name,stepIds:t.stepNames}))}getSelectionPriceSubunits(){const e=this.getWorkflowManager().getWorkflowSelections();let t=0;return Object.values(e).forEach(A=>{t+=A.selections.reduce((n,a)=>n+(a.priceModifier||0),0)}),t}getBasePriceSubunits(e){const t=this.getWorkflowManager().getProduct().basePrice||0;if(e){const A=this.getAdditionalProductPriceSubunits()||0;return t+A}return t}getAdditionalProductPriceSubunits(){var t;const e=this.getWorkflowManager().getTransaction().integrationProduct;if((t=e==null?void 0:e.additionalIntegrationProduct)!=null&&t.product)return e.additionalIntegrationProduct.product.basePrice||0}getTotalPriceSubunits(){return this.getBasePriceSubunits()+this.getSelectionPriceSubunits()}async copySelectionsViaGlobalConfiguration(e,t,A){const n=await e.getGlobalProperties(),a=A==null?void 0:A.map(r=>r.getId()),i=this.getSteps().filter(r=>a===void 0||a.includes(r.getId())),o=t.getSteps(),s=r=>n.find(l=>l.getRawProperty().name===r.aspectName);i.forEach(r=>{const l=new Set,d=r.getRaw().globalPropertyAspectConfigurations;d!==void 0&&(d.forEach(B=>l.add(JSON.stringify(B))),o.forEach(B=>{const w=B.getRaw().globalPropertyAspectConfigurations;w!==void 0&&w.forEach(E=>{const C=s(E),h=l.has(JSON.stringify(E));if(h&&(C==null?void 0:C.getType())==="Option"){const m=B.getCurrentVariant();if(!m)return;r.selectVariant(m),l.delete(JSON.stringify(E))}else if(h&&(C==null?void 0:C.getType())==="Text"){const m=B.getText();r.setText(m),l.delete(JSON.stringify(E))}})}))})}getStepByName(e){const t=this.getWorkflowManager().getWorkflow().steps.find(A=>A.stepTitle===e);if(!(!t||!this.stepHasHandle(t)))return pe.get(this.getWorkflowManager(),t)}getStepsByType(e){return this.getWorkflowManager().getWorkflow().steps.filter(t=>t.type===e).map(t=>pe.get(this.getWorkflowManager(),t))}getStepsByScene(e){if(!this.getWorkflowManager().getWorkflow().stepGroups.find(A=>A.name===e.name))throw new Error("Given scene is not present on workflow! Be careful when persisting scenes that you only use them with the relevant workflow.");return e.stepIds.map(A=>this.getWorkflowManager().getWorkflow().steps.find(n=>n.stepName===A)).filter(A=>this.stepHasHandle(A)).map(A=>pe.get(this.getWorkflowManager(),A))}async attachCustomerDetails(e){return this.assignCustomerDetails({emailAddress:e.email})}async assignCustomerDetails(e){var i,o,s;const A=(P.getMap("transactionOwnerIds")||new Map).get(this.getWorkflowManager().getTransaction().id),a=(s=(o=(i=(await N.getShadowGraphqlClient().mutate({mutation:In,variables:{id:this.getWorkflowManager().getTransaction().id,details:e,type:"Owner"},context:{transactionOwnerId:A}})).data)==null?void 0:i.transactionAddStakeholder)==null?void 0:o.stakeholders)==null?void 0:s.find(r=>{var l;return((l=r.customer)==null?void 0:l.emailAddress)===e.emailAddress});if(a!=null&&a.customer){this.getWorkflowManager().setTransactionCustomer(a.customer);const r=P.getMap("transactionCustomerIds")||new Map;r.set(this.getWorkflowManager().getTransaction().id,a.customer.id),P.setMap("transactionCustomerIds",r)}}attachRenderableSceneListener(e){this.renderableSceneCallbacks.push(e),e(this.renderableScenes)}detachRenderableSceneListener(e){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter(t=>t!==e)}async save(e){if(!this.getCommandContext().getState())throw new v("State undefined!");const n={title:await(async()=>{var s;if(e)return e;const a=this.getWorkflowManager().getTransaction().id,o=(s=(await Fe.getSavedDesigns()).find(r=>r.transactionId===a))==null?void 0:s.title;return o||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getWorkflowManager().getTransaction().id,productId:this.getWorkflowManager().getProduct().id,integrationProductId:this.getWorkflowManager().getTransaction().integrationProduct.id,workflowName:this.getWorkflowManager().getWorkflow().name,workflowId:this.getWorkflowManager().getWorkflow().id,lastEdited:new Date};return await Fe.addDesign(n),n}async copy(){var o;const e=Ee(this.getCommandContext().getState());if(!e)throw new v("Internal state is undefined! Cannot copy experience!");const t=JSON.stringify(e.transaction),A=this.getWorkflowManager().getWorkflow(),n=new oA({}),a=(o=this.getWorkflowManager().getTransaction().integrationProduct)==null?void 0:o.id;if(!a)throw new v("Integration product id is undefined!");return await n.initFromIntegrationProduct(a),await n.getWorkflowExperience(A.id,t,void 0)}async onDesignFinished(e,t=!0){return jt(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),()=>this.commandContext.getState(),this.workflowManager.getProduct(),this.workflowManager.getTransaction(),this.workflowManager.getWorkflowSelections(),this.workflowManager.getWorkflow().name,e||(()=>{}),A=>t?this.createPreviewImage(A,1024):Promise.resolve(void 0),this.workflowManager.getWorkflowMetadata())}stepHasHandle(e){return e.type!==g.StepType.SilentIllustration&&e.type!==g.StepType.ProductOverlay}getExportedData(){var n;const e=new Map,t=this.getWorkflowManager().getWorkflowMetadata(),A=this.getWorkflowManager().getWorkflowSelections();return Object.keys(t).forEach(a=>{const i=this.workflowManager.getWorkflow().steps.find(s=>s.stepName===a);if(!i)return;e.has(i.stepTitle)||e.set(i.stepTitle,{});const o=t[a];Object.keys(o).forEach(s=>{e.get(i.stepTitle)[s]=o[s]})}),(n=Object.keys(A))==null||n.forEach(a=>{const i=this.workflowManager.getWorkflow().steps.find(o=>o.stepName===a);i&&(e.has(i.stepTitle)||e.set(i.stepTitle,{}),e.get(i.stepTitle).selection=A[a].selections[0].name)}),e}getQuantity(){return this.getWorkflowManager().getTransaction().quantity||1}async setQuantity(e){if(e<1)throw new RangeError("WorkflowExperience quantity must be greater than zero.");if(this.isReadOnly)throw new Error("Cannot update quantity on a read-only WorkflowExperience");this.getWorkflowManager().getTransaction().quantity=e,this.callEvent("QuantityChanged");const t=P.getMap("transactionOwnerIds")||new Map,A=this.getWorkflowManager().getTransaction(),n=t.get(A.id)||void 0;await N.getShadowGraphqlClient().mutate({mutation:UA,variables:{id:A.id,quantity:e},context:{transactionOwnerId:n}})}addEventListener(e,t){const A=this.eventCallbacks.get(e)||[];A.push(t),this.eventCallbacks.set(e,A)}removeEventListener(e,t){const A=this.eventCallbacks.get(e)||[];this.eventCallbacks.set(e,A.filter(n=>n!==t))}callEvent(e){(this.eventCallbacks.get(e)||[]).forEach(t=>t(this))}}const fn=["altGlyph","circle","ellipse","path","polygon","polyline","rect","text","textPath","tref","tspan"],Dn=async(c,e,t)=>{const A=e.data,n=t.data.baseUrl,a=A.assetUrl.replace("localhost","localstack"),i=n.slice(0,4)==="http"?"":"https://",o=new URL(i+n);o.searchParams.append("video",g.toBase64(JSON.stringify([{href:a}]))),o.pathname=o.pathname+(o.pathname.slice(-1)==="/"?"":"/");const s=o.toString(),l=`data:image/svg+xml;base64,${g.toBase64(await nt.toString(s,{type:"svg"}))}`,d=w=>{const E=c.find(h=>h.panelId===w.panelId);if(!E)throw new b(w);const C=g.generate();return new g.CreateElementCommand({id:C,src:l,type:g.LayoutElementType.Image,y:w.top,x:w.left,width:w.width,height:w.height,rotation:0},E)},B=t.data.regions;try{return B.map(d)}catch(w){return console.error(w),[]}},pn=async(c,e,t,A)=>{const n=t.data,a=n.assetUrl,i=await g.getPatternImageData(a);try{const o=g.getVariant(n,A.option);o&&(e[A.stepName]={selectedVariants:[o]});const s=async r=>{var C;const l=await g.generateFrameSVG(r||{width:1,height:1},(C=o==null?void 0:o.asset)==null?void 0:C.fileLink),d=await g.getFrameData(l),B=g.generate(),w=c.find(h=>h.panelId===r.panelId);if(!w)throw new b(r);const E=g.calculateOffsets(i,d,{scale:n.scale,left:n.x,top:n.y});return[new g.CreateElementCommand({id:B,path:d.path,dataWidth:d.width,dataHeight:d.height,type:g.LayoutElementType.Frame,focalBlur:A.data.focalBlur,focalBlurStrength:A.data.focalBlurStrength,focalBlurRadius:A.data.focalBlurRadius,forceImageCover:A.data.forceImageCover,x:r.left,y:r.top,width:r.width,height:r.height,layer:r.layer,layerIndex:r.layerIndex,rotation:r.rotation,scaleX:r.width/d.width,scaleY:r.height/d.height,pattern:void 0},w),new g.UpdateFramePattern(B,i,E)]};return(await Promise.all(A.data.regions.map(r=>s(r)))).flat()}catch(o){return console.error(o),[]}},Fn=async(c,e,t,A)=>{var f,D;const n=t.data,a=A.option;if(!a)return console.error(`No option for step ${A.stepName}.`),[];const i=((f=a.variants)==null?void 0:f.find(p=>p.id===n.illustrationVariantId))||g.getDefaultVariant(a);if(!i)return console.error(`No variant with ID: ${n.illustrationVariantId}`),[];if(!i.asset)return console.error(`No asset for variant with ID: ${n.illustrationVariantId}`),[];e[A.stepName]={selectedVariants:[i]};const o=(D=i.asset)==null?void 0:D.fileLink;if(!o)return console.error(`No asset link for variant with ID: ${n.illustrationVariantId}`),[];const s=await g.fetchAsString(o,!0),r=/<svg.*?<\/svg>/s,l=s.match(r)||[],d=(l==null?void 0:l.length)>0?l[0]:"",E=g.domParser().parseFromString(d,"image/svg+xml").firstElementChild;if(!E)return console.error("Failed to read SVG."),[];g.sanitizeSvgTree(E);const C={};g.traverse(E,p=>{fn.includes(p.tagName)&&!p.attributes.getNamedItem("fill")&&p.setAttribute("fill","#000000");const S=p.attributes.getNamedItem("fill");if(S&&S.value!=="none"){const x=S.value,H=`spiff-fill-${x.replace(/\W/g,"")}`;p.classList.add(H),C[H]={browserValue:x}}const y=p.attributes.getNamedItem("stroke");if(y&&y.value!=="none"){const x=y.value,H=`spiff-stroke-${x.replace(/\W/g,"")}`;p.classList.add(H),C[H]={browserValue:x}}});const m=g.xmlSerializer().serializeToString(E),u=n.colors;if(u){for(const[p,S]of Object.entries(C))for(const y of Object.keys(u))if(S.browserValue===y){C[p]={browserValue:u[y]};break}}const F=p=>{const S=c.find(x=>x.panelId===p.panelId);if(!S)throw new b(p);const y=g.generate();return new g.CreateElementCommand({colors:C,id:y,svg:m,type:g.LayoutElementType.Illustration,y:p.top,x:p.left,rotation:p.rotation,width:p.width,height:p.height,layer:p.layer,layerIndex:p.layerIndex,immutable:p.immutable},S)},I=A.data.regions;try{return I.map(F)}catch(p){return console.error(p),[]}},Mn=async(c,e,t)=>{const A=await xt(t.data.module),n=e.data,a=(o,s)=>{const r=c.find(d=>d.panelId===s.panelId);if(!r)throw new b(s);const l=g.generate();return new g.CreateElementCommand({colors:{},id:l,svg:o,type:g.LayoutElementType.Illustration,y:s.top,x:s.left,rotation:s.rotation,width:s.width,height:s.height,layer:s.layer,layerIndex:s.layerIndex},r)},i=t.data.regions;try{return i.map(o=>a(A.svgPrint(n.text,o),o))}catch(o){return console.error(o),[]}},Sn=async(c,e,t,A)=>{var l,d;const n=t.data,a=A.option;if(!a)return console.error(`No option for step ${A.stepName}.`),[];const i=((l=a.variants)==null?void 0:l.find(B=>B.id===n.pictureVariantId))||g.getDefaultVariant(a);if(!i)return console.error(`No variant with ID: ${n.pictureVariantId}`),[];if(!i.asset)return console.error(`No asset for variant with ID: ${n.pictureVariantId}`),[];e[A.stepName]={selectedVariants:[i]};const o=(d=i.asset)==null?void 0:d.fileLink;if(!o)return console.error(`No asset link for variant with ID: ${n.pictureVariantId}`),[];const s=B=>{const w=c.find(C=>C.panelId===B.panelId);if(!w)throw new b(B);const E=g.generate();return new g.CreateElementCommand({id:E,src:o,type:g.LayoutElementType.Image,y:B.top,x:B.left,rotation:B.rotation,width:B.width,height:B.height,layer:B.layer,layerIndex:B.layerIndex,immutable:B.immutable,preserveAspectRatio:"none"},w)},r=A.data.regions;try{return r.map(s)}catch(B){return console.error(B),[]}},yn=async(c,e,t,A)=>{var r;const n=t.data,a=A.option;if(!a)return console.error(`No option for step ${A.stepName}.`),[];const i=((r=a.variants)==null?void 0:r.find(l=>l.id===n.colorVariantId))||g.getDefaultVariant(a);if(!i)return console.error(`No variant with ID: ${n.colorVariantId}`),[];e[A.stepName]={selectedVariants:[i]};const o=l=>{const d=c.find(h=>h.panelId===l.panelId);if(!d)throw new b(l);const B=`
|
|
1977
|
+
`;var Kt=(c=>(c.QuantityChanged="QuantityChanged",c))(Kt||{});class le{constructor(e,t){var n;if(this.cachedStepHandles=new Map,this.renderableScenes=[],this.renderableSceneCallbacks=[],this.eventCallbacks=new Map,this.debouncedSavedDesignUpdate=tt(async()=>{await Fe.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()},2500),this.getCanvasObjectURLAsync=async a=>new Promise((i,o)=>{try{a.toBlob(s=>{if(s){const r=URL.createObjectURL(s);i(r)}})}catch(s){o(s)}}),!t.workflow)throw new Error("No Workflow ID provided.");this.client=e;const A=t.layouts;this.commandContext=new g.CommandContext,this.commandContext.initialize(A,t.reloadedState),this.isReadOnly=t.transaction.isOrdered||!!t.readOnly,this.workflowManager=new dn(t.workflow,((n=t.product.profanities)==null?void 0:n.map(a=>a.word))||[],A,this.commandContext,a=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return t.stateMutationFunc(a)},t.transaction,t.product,t.previewService,t.renderableContextService,t.reloadedState,t.readOnly,t.modelContainer,t.isReloadedTransaction,t.singleVariantsRenderable,t.delayWorkflowStateSync),this.workflowManager.addSelectionCallback(a=>{const i=a.traversableScenes.map(o=>{const s=o.renderableSteps.map(r=>r.stepName);return{id:o.name,title:o.title,renderableSteps:s,workflowScene:o}});this.renderableScenes=i,this.renderableSceneCallbacks.forEach(o=>o(i))})}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async createPreviewImage(e,t){var u,F;const A=this.workflowManager.getWorkflow(),n=(u=A==null?void 0:A.finalizeStepConfig)==null?void 0:u.lookAtAnimation;if(e){if(!n)throw new Error("Failed to generate cart preview image!");return await((F=this.workflowManager.getPreviewService())==null?void 0:F.renderSceneScreenshot(t??512,n))||""}let a=2048;t&&t<=2048&&(a=t);const i=g.createCanvas(a,a),o=this.commandContext.getAllLayouts(),s=A.defaultPreviewPanelIndex||0,r=A.panels[s],l=o.find(I=>{var f;return((f=I.layoutState)==null?void 0:f.layout.panelId)===(r==null?void 0:r.name)})||o[0],d=l.layoutState.layout.previewRegion?{x:l.layoutState.layout.previewRegion.left,y:l.layoutState.layout.previewRegion.top,width:l.layoutState.layout.previewRegion.width,height:l.layoutState.layout.previewRegion.height}:{x:0,y:0,width:l.layoutState.layout.width,height:l.layoutState.layout.height},B=this.commandContext.getLayoutById(l.layoutState.layout.id),w=i.getContext("2d");if(!w)throw new Ce("Failed to obtain 2D context for preview image creation");const E=g.getSvgElement(B.layoutState.layout,B.layoutState.elements,{renderingConfiguration:{purpose:g.LayoutRenderingPurpose.Print,region:{left:d.x,top:d.y,width:d.width,height:d.height}}}),C=g.renderPapyrusComponentAsString(E);await(await et.Pith.from(w,C,{anonymousCrossOrigin:!0,ignoreDimensions:!1,createCanvas:g.createCanvas,createImage:g.loadImage,DOMParser:g.getDomParser(),fetch:g.fetch})).render();const m=await this.getCanvasObjectURLAsync(i);return i.toDataURL(m)}getStepById(e){const t=this.getWorkflowManager().getWorkflow().steps.find(a=>a.stepName===e);if(!t||!this.stepHasHandle(t))return;const A=this.cachedStepHandles.get(t.stepName);if(A)return A;const n=pe.get(this.getWorkflowManager(),t);return this.cachedStepHandles.set(t.stepName,n),n}getSteps(){return this.getScenes().flatMap(e=>this.getStepsByScene(e))}getScenes(){return this.getWorkflowManager().getWorkflow().stepGroups.map(t=>({id:t.id,name:t.name,stepIds:t.stepNames}))}getSelectionPriceSubunits(){const e=this.getWorkflowManager().getWorkflowSelections();let t=0;return Object.values(e).forEach(A=>{t+=A.selections.reduce((n,a)=>n+(a.priceModifier||0),0)}),t}getBasePriceSubunits(e){const t=this.getWorkflowManager().getProduct().basePrice||0;if(e){const A=this.getAdditionalProductPriceSubunits()||0;return t+A}return t}getAdditionalProductPriceSubunits(){var t;const e=this.getWorkflowManager().getTransaction().integrationProduct;if((t=e==null?void 0:e.additionalIntegrationProduct)!=null&&t.product)return e.additionalIntegrationProduct.product.basePrice||0}getTotalPriceSubunits(){return this.getBasePriceSubunits()+this.getSelectionPriceSubunits()}async copySelectionsViaGlobalConfiguration(e,t,A){const n=await e.getGlobalProperties(),a=A==null?void 0:A.map(r=>r.getId()),i=this.getSteps().filter(r=>a===void 0||a.includes(r.getId())),o=t.getSteps(),s=r=>n.find(l=>l.getRawProperty().name===r.aspectName);i.forEach(r=>{const l=new Set,d=r.getRaw().globalPropertyAspectConfigurations;d!==void 0&&(d.forEach(B=>l.add(JSON.stringify(B))),o.forEach(B=>{const w=B.getRaw().globalPropertyAspectConfigurations;w!==void 0&&w.forEach(E=>{const C=s(E),h=l.has(JSON.stringify(E));if(h&&(C==null?void 0:C.getType())==="Option"){const m=B.getCurrentVariant();if(!m)return;r.selectVariant(m),l.delete(JSON.stringify(E))}else if(h&&(C==null?void 0:C.getType())==="Text"){const m=B.getText();r.setText(m),l.delete(JSON.stringify(E))}})}))})}getStepByName(e){const t=this.getWorkflowManager().getWorkflow().steps.find(A=>A.stepTitle===e);if(!(!t||!this.stepHasHandle(t)))return pe.get(this.getWorkflowManager(),t)}getStepsByType(e){return this.getWorkflowManager().getWorkflow().steps.filter(t=>t.type===e).map(t=>pe.get(this.getWorkflowManager(),t))}getStepsByScene(e){if(!this.getWorkflowManager().getWorkflow().stepGroups.find(A=>A.name===e.name))throw new Error("Given scene is not present on workflow! Be careful when persisting scenes that you only use them with the relevant workflow.");return e.stepIds.map(A=>this.getWorkflowManager().getWorkflow().steps.find(n=>n.stepName===A)).filter(A=>this.stepHasHandle(A)).map(A=>pe.get(this.getWorkflowManager(),A))}async attachCustomerDetails(e){return this.assignCustomerDetails({emailAddress:e.email})}async assignCustomerDetails(e){var i,o,s;const A=(P.getMap("transactionOwnerIds")||new Map).get(this.getWorkflowManager().getTransaction().id),a=(s=(o=(i=(await N.getShadowGraphqlClient().mutate({mutation:In,variables:{id:this.getWorkflowManager().getTransaction().id,details:e,type:"Owner"},context:{transactionOwnerId:A}})).data)==null?void 0:i.transactionAddStakeholder)==null?void 0:o.stakeholders)==null?void 0:s.find(r=>{var l;return((l=r.customer)==null?void 0:l.emailAddress)===e.emailAddress});if(a!=null&&a.customer){this.getWorkflowManager().setTransactionCustomer(a.customer);const r=P.getMap("transactionCustomerIds")||new Map;r.set(this.getWorkflowManager().getTransaction().id,a.customer.id),P.setMap("transactionCustomerIds",r)}}attachRenderableSceneListener(e){this.renderableSceneCallbacks.push(e),e(this.renderableScenes)}detachRenderableSceneListener(e){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter(t=>t!==e)}async save(e){if(!this.getCommandContext().getState())throw new v("State undefined!");const n={title:await(async()=>{var s;if(e)return e;const a=this.getWorkflowManager().getTransaction().id,o=(s=(await Fe.getSavedDesigns()).find(r=>r.transactionId===a))==null?void 0:s.title;return o||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getWorkflowManager().getTransaction().id,productId:this.getWorkflowManager().getProduct().id,integrationProductId:this.getWorkflowManager().getTransaction().integrationProduct.id,workflowName:this.getWorkflowManager().getWorkflow().name,workflowId:this.getWorkflowManager().getWorkflow().id,lastEdited:new Date};return await Fe.addDesign(n),n}async copy(){var o;const e=Ee(this.getCommandContext().getState());if(!e)throw new v("Internal state is undefined! Cannot copy experience!");const t=JSON.stringify(e.transaction),A=this.getWorkflowManager().getWorkflow(),n=new oA({}),a=(o=this.getWorkflowManager().getTransaction().integrationProduct)==null?void 0:o.id;if(!a)throw new v("Integration product id is undefined!");return await n.initFromIntegrationProduct(a),await n.getWorkflowExperience(A.id,t,void 0)}async onDesignFinished(e,t=!0){return jt(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),()=>this.commandContext.getState(),this.workflowManager.getProduct(),this.workflowManager.getTransaction(),this.workflowManager.getWorkflowSelections(),this.workflowManager.getWorkflow().name,e||(()=>{}),A=>t?this.createPreviewImage(A,1024):Promise.resolve(void 0),this.workflowManager.getWorkflowMetadata())}stepHasHandle(e){return e.type!==g.StepType.SilentIllustration&&e.type!==g.StepType.ProductOverlay}getExportedData(){var n;const e=new Map,t=this.getWorkflowManager().getWorkflowMetadata(),A=this.getWorkflowManager().getWorkflowSelections();return Object.keys(t).forEach(a=>{const i=this.workflowManager.getWorkflow().steps.find(s=>s.stepName===a);if(!i)return;e.has(i.stepTitle)||e.set(i.stepTitle,{});const o=t[a];Object.keys(o).forEach(s=>{e.get(i.stepTitle)[s]=o[s]})}),(n=Object.keys(A))==null||n.forEach(a=>{const i=this.workflowManager.getWorkflow().steps.find(o=>o.stepName===a);i&&(e.has(i.stepTitle)||e.set(i.stepTitle,{}),e.get(i.stepTitle).selection=A[a].selections[0].name)}),e}getQuantity(){return this.getWorkflowManager().getTransaction().quantity||1}async setQuantity(e){if(e<1)throw new RangeError("WorkflowExperience quantity must be greater than zero.");if(this.isReadOnly)throw new Error("Cannot update quantity on a read-only WorkflowExperience");this.getWorkflowManager().getTransaction().quantity=e,this.callEvent("QuantityChanged");const t=P.getMap("transactionOwnerIds")||new Map,A=this.getWorkflowManager().getTransaction(),n=t.get(A.id)||void 0;await N.getShadowGraphqlClient().mutate({mutation:UA,variables:{id:A.id,quantity:e},context:{transactionOwnerId:n}})}addEventListener(e,t){const A=this.eventCallbacks.get(e)||[];A.push(t),this.eventCallbacks.set(e,A)}removeEventListener(e,t){const A=this.eventCallbacks.get(e)||[];this.eventCallbacks.set(e,A.filter(n=>n!==t))}callEvent(e){(this.eventCallbacks.get(e)||[]).forEach(t=>t(this))}}const fn=["altGlyph","circle","ellipse","path","polygon","polyline","rect","text","textPath","tref","tspan"],Dn=async(c,e,t)=>{const A=e.data,n=t.data.baseUrl,a=A.assetUrl.replace("localhost","localstack"),i=n.slice(0,4)==="http"?"":"https://",o=new URL(i+n);o.searchParams.append("video",g.toBase64(JSON.stringify([{href:a}]))),o.pathname=o.pathname+(o.pathname.slice(-1)==="/"?"":"/");const s=o.toString(),l=`data:image/svg+xml;base64,${g.toBase64(await nt.toString(s,{type:"svg"}))}`,d=w=>{const E=c.find(h=>h.panelId===w.panelId);if(!E)throw new J(w);const C=g.generate();return new g.CreateElementCommand({id:C,src:l,type:g.LayoutElementType.Image,y:w.top,x:w.left,width:w.width,height:w.height,rotation:0},E)},B=t.data.regions;try{return B.map(d)}catch(w){return console.error(w),[]}},pn=async(c,e,t,A)=>{const n=t.data,a=n.assetUrl,i=await g.getPatternImageData(a);try{const o=g.getVariant(n,A.option);o&&(e[A.stepName]={selectedVariants:[o]});const s=async r=>{var C;const l=await g.generateFrameSVG(r||{width:1,height:1},(C=o==null?void 0:o.asset)==null?void 0:C.fileLink),d=await g.getFrameData(l),B=g.generate(),w=c.find(h=>h.panelId===r.panelId);if(!w)throw new J(r);const E=g.calculateOffsets(i,d,{scale:n.scale,left:n.x,top:n.y});return[new g.CreateElementCommand({id:B,path:d.path,dataWidth:d.width,dataHeight:d.height,type:g.LayoutElementType.Frame,focalBlur:A.data.focalBlur,focalBlurStrength:A.data.focalBlurStrength,focalBlurRadius:A.data.focalBlurRadius,forceImageCover:A.data.forceImageCover,x:r.left,y:r.top,width:r.width,height:r.height,layer:r.layer,layerIndex:r.layerIndex,rotation:r.rotation,scaleX:r.width/d.width,scaleY:r.height/d.height,pattern:void 0},w),new g.UpdateFramePattern(B,i,E)]};return(await Promise.all(A.data.regions.map(r=>s(r)))).flat()}catch(o){return console.error(o),[]}},Fn=async(c,e,t,A)=>{var f,D;const n=t.data,a=A.option;if(!a)return console.error(`No option for step ${A.stepName}.`),[];const i=((f=a.variants)==null?void 0:f.find(p=>p.id===n.illustrationVariantId))||g.getDefaultVariant(a);if(!i)return console.error(`No variant with ID: ${n.illustrationVariantId}`),[];if(!i.asset)return console.error(`No asset for variant with ID: ${n.illustrationVariantId}`),[];e[A.stepName]={selectedVariants:[i]};const o=(D=i.asset)==null?void 0:D.fileLink;if(!o)return console.error(`No asset link for variant with ID: ${n.illustrationVariantId}`),[];const s=await g.fetchAsString(o,!0),r=/<svg.*?<\/svg>/s,l=s.match(r)||[],d=(l==null?void 0:l.length)>0?l[0]:"",E=g.domParser().parseFromString(d,"image/svg+xml").firstElementChild;if(!E)return console.error("Failed to read SVG."),[];g.sanitizeSvgTree(E);const C={};g.traverse(E,p=>{fn.includes(p.tagName)&&!p.attributes.getNamedItem("fill")&&p.setAttribute("fill","#000000");const S=p.attributes.getNamedItem("fill");if(S&&S.value!=="none"){const x=S.value,H=`spiff-fill-${x.replace(/\W/g,"")}`;p.classList.add(H),C[H]={browserValue:x}}const y=p.attributes.getNamedItem("stroke");if(y&&y.value!=="none"){const x=y.value,H=`spiff-stroke-${x.replace(/\W/g,"")}`;p.classList.add(H),C[H]={browserValue:x}}});const m=g.xmlSerializer().serializeToString(E),u=n.colors;if(u){for(const[p,S]of Object.entries(C))for(const y of Object.keys(u))if(S.browserValue===y){C[p]={browserValue:u[y]};break}}const F=p=>{const S=c.find(x=>x.panelId===p.panelId);if(!S)throw new J(p);const y=g.generate();return new g.CreateElementCommand({colors:C,id:y,svg:m,type:g.LayoutElementType.Illustration,y:p.top,x:p.left,rotation:p.rotation,width:p.width,height:p.height,layer:p.layer,layerIndex:p.layerIndex,immutable:p.immutable},S)},I=A.data.regions;try{return I.map(F)}catch(p){return console.error(p),[]}},Mn=async(c,e,t)=>{const A=await xt(t.data.module),n=e.data,a=(o,s)=>{const r=c.find(d=>d.panelId===s.panelId);if(!r)throw new J(s);const l=g.generate();return new g.CreateElementCommand({colors:{},id:l,svg:o,type:g.LayoutElementType.Illustration,y:s.top,x:s.left,rotation:s.rotation,width:s.width,height:s.height,layer:s.layer,layerIndex:s.layerIndex},r)},i=t.data.regions;try{return i.map(o=>a(A.svgPrint(n.text,o),o))}catch(o){return console.error(o),[]}},Sn=async(c,e,t,A)=>{var l,d;const n=t.data,a=A.option;if(!a)return console.error(`No option for step ${A.stepName}.`),[];const i=((l=a.variants)==null?void 0:l.find(B=>B.id===n.pictureVariantId))||g.getDefaultVariant(a);if(!i)return console.error(`No variant with ID: ${n.pictureVariantId}`),[];if(!i.asset)return console.error(`No asset for variant with ID: ${n.pictureVariantId}`),[];e[A.stepName]={selectedVariants:[i]};const o=(d=i.asset)==null?void 0:d.fileLink;if(!o)return console.error(`No asset link for variant with ID: ${n.pictureVariantId}`),[];const s=B=>{const w=c.find(C=>C.panelId===B.panelId);if(!w)throw new J(B);const E=g.generate();return new g.CreateElementCommand({id:E,src:o,type:g.LayoutElementType.Image,y:B.top,x:B.left,rotation:B.rotation,width:B.width,height:B.height,layer:B.layer,layerIndex:B.layerIndex,immutable:B.immutable,preserveAspectRatio:"none"},w)},r=A.data.regions;try{return r.map(s)}catch(B){return console.error(B),[]}},yn=async(c,e,t,A)=>{var r;const n=t.data,a=A.option;if(!a)return console.error(`No option for step ${A.stepName}.`),[];const i=((r=a.variants)==null?void 0:r.find(l=>l.id===n.colorVariantId))||g.getDefaultVariant(a);if(!i)return console.error(`No variant with ID: ${n.colorVariantId}`),[];e[A.stepName]={selectedVariants:[i]};const o=l=>{const d=c.find(h=>h.panelId===l.panelId);if(!d)throw new J(l);const B=`
|
|
1978
1978
|
<svg
|
|
1979
1979
|
xmlns="http://www.w3.org/2000/svg"
|
|
1980
1980
|
xmlnsXlink="http://www.w3.org/1999/xlink"
|
|
@@ -1994,7 +1994,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
|
|
|
1994
1994
|
fill="${i==null?void 0:i.color}"
|
|
1995
1995
|
/>
|
|
1996
1996
|
</svg>
|
|
1997
|
-
`,E={"spiff-fill-shape":{browserValue:i.color||"#000000"}},C=g.generate();return new g.CreateElementCommand({colors:E,id:C,svg:B,type:g.LayoutElementType.Illustration,y:l.top,x:l.left,rotation:l.rotation,width:l.width,height:l.height,layer:l.layer,layerIndex:l.layerIndex,immutable:l.immutable},d)},s=A.data.regions;try{return s.map(o)}catch(l){return console.error(l),[]}},Yn=async(c,e,t)=>{const A=[],a=(()=>{var r,l;return e.type===g.StepType.ProductOverlay?t||((r=e.data.asset)==null?void 0:r.fileLink)||"":((l=e.data.asset)==null?void 0:l.fileLink)||""})(),o=(()=>a.endsWith(".jpeg")||a.endsWith(".jpg")||a.endsWith(".png")?g.LayoutElementType.Image:(a.endsWith(".svg"),g.LayoutElementType.Illustration))(),s=e.data.regions;if(o==="image")try{s.forEach(r=>{const l=c.find(B=>B.panelId===r.panelId);if(!l)throw new
|
|
1997
|
+
`,E={"spiff-fill-shape":{browserValue:i.color||"#000000"}},C=g.generate();return new g.CreateElementCommand({colors:E,id:C,svg:B,type:g.LayoutElementType.Illustration,y:l.top,x:l.left,rotation:l.rotation,width:l.width,height:l.height,layer:l.layer,layerIndex:l.layerIndex,immutable:l.immutable},d)},s=A.data.regions;try{return s.map(o)}catch(l){return console.error(l),[]}},Yn=async(c,e,t)=>{const A=[],a=(()=>{var r,l;return e.type===g.StepType.ProductOverlay?t||((r=e.data.asset)==null?void 0:r.fileLink)||"":((l=e.data.asset)==null?void 0:l.fileLink)||""})(),o=(()=>a.endsWith(".jpeg")||a.endsWith(".jpg")||a.endsWith(".png")?g.LayoutElementType.Image:(a.endsWith(".svg"),g.LayoutElementType.Illustration))(),s=e.data.regions;if(o==="image")try{s.forEach(r=>{const l=c.find(B=>B.panelId===r.panelId);if(!l)throw new J(r);const d={id:g.generate(),src:a,type:o,y:r.top,x:r.left,width:r.width,height:r.height,layer:r.layer,layerIndex:r.layerIndex,productOverlay:e.type===g.StepType.ProductOverlay?!0:void 0,scaleX:1,scaleY:1,rotation:r.rotation,excludeFromExport:e.data.excludeFromPrint,preserveAspectRatio:"none"};A.push(new g.CreateElementCommand(d,l))})}catch(r){console.error(r)}else{const r=await g.fetchAsString(a,!0),l=d=>{const B=/<svg.*?<\/svg>/s,w=d.match(B)||[],E=(w==null?void 0:w.length)>0?w[0]:"",m=g.domParser().parseFromString(E,"image/svg+xml").firstElementChild;if(!m)throw new q("Failed to read SVG.");return g.sanitizeSvgTree(m),g.xmlSerializer().serializeToString(m)};s.forEach(d=>{const B=c.find(E=>E.panelId===d.panelId);if(!B)throw new J(d);const w={id:g.generate(),src:a,asset_key:a,svg:l(r),colors:{},type:o,y:d.top,x:d.left,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,scaleX:1,scaleY:1,rotation:d.rotation,productOverlay:e.type===g.StepType.ProductOverlay?!0:void 0,excludeFromExport:e.data.excludeFromPrint};A.push(new g.CreateElementCommand(w,B))})}return A},Pn=async(c,e,t,A)=>{const n=[],a=t.data,i=30,o=h=>h.vertical?"center":h.textAlign||"center",s=()=>{var F;const h=A.option;if(!h)return;const m=((F=h.variants)==null?void 0:F.find(I=>I.id===a.fontVariantId))||g.getDefaultVariant(h);if(!m||!m.asset)return;e[A.stepName]={selectedVariants:[m]};const u=m.asset.fileLink;if(u)return u},l=await(async()=>{const h=s();if(!h)return;const m=await g.loadFont(h);return{assetUrl:h,name:m.names.fullName.en}})(),d=(A.data.replaceableText?A.data.replaceableText.replace("{{}}",a.text):a.text)||"",B=g.applyTextTransformations(d,{vertical:A.data.vertical,uppercase:A.data.uppercase}),w=async h=>{const m=h.colorOption;if(!m)return;const u=L.getDefaultVariant(m);return u==null?void 0:u.color},E=a.color||await w(A.data),C=A.data.regions;for(const h of C){const m=c.find(F=>F.panelId===h.panelId);if(!m)continue;const u={stepName:t.name,id:g.generate(),align:o(A.data),curved:A.data.curved,fill:a.color||E||"#000000",fontData:l,fontSize:A.data.size||i,height:h.height,layer:h.layer,layerIndex:h.layerIndex,paths:A.data.paths,rotation:h.rotation,text:B,type:g.LayoutElementType.Textbox,vertical:A.data.vertical,verticalAlign:A.data.verticalAlign||"middle",width:h.width,x:h.left,y:h.top};if(l){const[F,I]=g.determineCorrectFontSizeAndLines(A.data.size||i,l,h,[g.applyTextTransformations(B,{vertical:A.data.vertical,uppercase:A.data.uppercase})],{size:A.data.size,minSize:A.data.minSize,maxSize:A.data.maxSize});n.push(new g.CreateElementCommand({...u,fontSize:F,text:u.curved?u.text:(I||[]).join(`
|
|
1998
1998
|
`)},m))}else n.push(new g.CreateElementCommand(u,m))}return n},xn=(c,e)=>c.conditions?c.conditions.every(t=>{const A=e[t.targetStepName];if(A&&A.selectedVariants){const n=A.selectedVariants;return t.requiredVariantSelections.some(a=>n.find(i=>i.id===a)!==void 0)}return!1}):!0,Vt=async(c,e,t,A)=>{const n=[],a={};for(const i of c){const o=e.steps.find(s=>s.stepName===i.name);if(o)switch(o.type){case g.StepType.DigitalContent:n.push(...await Dn(t,i,o));break;case g.StepType.Frame:case g.StepType.Photo:n.push(...await pn(t,a,i,o));break;case g.StepType.Illustration:n.push(...await Fn(t,a,i,o));break;case g.StepType.Module:n.push(...await Mn(t,i,o));break;case g.StepType.Picture:n.push(...await Sn(t,a,i,o));break;case g.StepType.Shape:n.push(...await yn(t,a,i,o));break;case g.StepType.Text:n.push(...await Pn(t,a,i,o));break}}for(const i of e.steps)i.type!==g.StepType.SilentIllustration&&i.type!==g.StepType.ProductOverlay||xn(i,a)&&n.push(...await Yn(t,i,A));return n};class Me{constructor(e){this.handleCompleteRender=null;const t=new Map;e.forEach(A=>t.set(A.id,new Hn(A.id,A.name,this))),this.layouts=t}setCompleteRenderCallback(e){this.handleCompleteRender=e,e(Array.from(this.layouts.values()))}onCompleteRender(){this.handleCompleteRender&&this.handleCompleteRender(Array.from(this.layouts.values()))}getAll(){return this.layouts}}const Nn=(()=>new Promise((c,e)=>{const A=g.createCanvas().getContext("webgl2");c(!!A)}))();class Hn{constructor(e,t,A){this.hasSetStaticContext=!1,this.interactiveDirty=!1,this.staticCtxDirty=!1,this.lastRequestedRenderArguments=void 0,this.lastCompletedStaticRender=void 0,this.lastModificationID=void 0,this.renderQueue=new Ue(2),this.id=e,this.name=t,this.service=A}getID(){return this.id}getName(){return this.name}getStaticContext(){return this.textureCtx}setStaticContext(e){if(this.textureCtx=e,this.lastRequestedRenderArguments){const{workflow:t,layouts:A,productOverlayImageUrl:n}=this.lastRequestedRenderArguments;this.render(t,A,n)}}getStaticContextDirty(){return this.staticCtxDirty}setStaticContextDirty(e){this.staticCtxDirty=e}getInteractiveCanvasDirty(){return this.interactiveDirty}setInteractiveCanvasDirty(e){this.interactiveDirty=e}markLastCompletedStaticRender(){this.lastCompletedStaticRender=Date.now(),this.service.onCompleteRender()}getLastCompletedStaticRender(){return this.lastCompletedStaticRender}getLastModificationID(){return this.lastModificationID}async render(e,t,A){const n=Ee(t);this.lastRequestedRenderArguments={workflow:e,layouts:n,productOverlayImageUrl:A};const a=this.getStaticContext();if(!a){this.markLastCompletedStaticRender(),this.setStaticContextDirty(!1);return}this.renderQueue.enqueue(new Rn(this.getID(),a,await Nn,()=>{this.markLastCompletedStaticRender(),this.setStaticContextDirty(!0)},e,n,A))}}class Rn extends Re{constructor(e,t,A,n,a,i,o){super(),this.layoutId=e,this.ctx=t,this.nonPOTSupport=A,this.onRender=n,this.workflow=a,this.layouts=i,this.productOverlayImageUrl=o}getDynamicTextureResolution(){return this.getIsMobile()||!this.offscreenRenderingSupported()?{width:1024,height:1024}:{width:2048,height:2048}}getIsMobile(){return window.innerWidth<=480}offscreenRenderingSupported(){return navigator.userAgent.includes("SamsungBrowser")?!1:!!window.Worker&&!!window.OffscreenCanvas}resizeFit(e,t=4096){const A=t/e.width,n=t/e.height,a=Math.min(A,n);return a>1?e:{width:e.width*a,height:e.height*a}}async execute(){const e=this.layouts.find(B=>B.layoutState.layout.id===this.layoutId);if(!e)return;const t=e.layoutState.elements||[],A=e.layoutState.layout.width,n=e.layoutState.layout.height,a=this.getDynamicTextureResolution().width,i=this.getDynamicTextureResolution().height;let o,s;if(this.nonPOTSupport){const B=a/i;A/n<B?(o=a,s=n*(a/A)):(o=A*(i/n),s=i);const E=this.resizeFit({width:o,height:s});o=E.width,s=E.height}else o=this.getDynamicTextureResolution().width,s=this.getDynamicTextureResolution().height;const r=g.getSvgElement(e.layoutState.layout,t,{renderingConfiguration:{purpose:g.LayoutRenderingPurpose.ThreeD}}),l=g.renderPapyrusComponentAsString(r),d=await et.Pith.from(this.ctx,l,{anonymousCrossOrigin:!0,ignoreDimensions:!this.nonPOTSupport,ignoreAnimation:!0,ignoreClear:!0,ignoreMouse:!0,enableRedraw:!1,createCanvas:g.createCanvas,createImage:g.loadImage,DOMParser:g.getDomParser(),fetch:g.fetch});d.resize(o,s),await d.render(),this.onRender()}}const Un=(c,e)=>{const t=[];return c.forEach(A=>{const n=e.steps.find(a=>a.stepName===A.stepName);(n==null?void 0:n.type)===g.StepType.Text&&A.stepAspectType==="Text"&&t.push({name:n.stepName,data:{text:A.value}})}),t},Gn=async(c,e,t,A)=>{let n={serializableWorkflow:{steps:[]},layouts:{}};n=new g.GroupCommand(t.map(s=>new g.CreateLayoutCommand(s))).apply(n);const i=await Vt(c,e,t,A);return new g.GroupCommand(i).apply(n)},vn=M.gql`
|
|
1999
1999
|
${$}
|
|
2000
2000
|
fragment ProductFields on Product {
|
|
@@ -2279,7 +2279,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
|
|
|
2279
2279
|
id
|
|
2280
2280
|
}
|
|
2281
2281
|
}
|
|
2282
|
-
`;class Zn{constructor(e){this.handleCache={},this.bundle=e}async getHandle(e){if(this.handleCache[e.name])return this.handleCache[e.name];const t=await this.createHandle(e);return this.handleCache[e.name]=t,t}async getHandles(){var t;if(!((t=this.bundle.getProductCollection())!=null&&t.getResource().globalPropertyConfiguration))return[];const e=this.bundle.getProductCollection().getResource().globalPropertyConfiguration;return Promise.all(e.aspects.map(A=>this.getHandle(A)))}applyConditionsFromState(e,t){return t?e.filter(A=>this.aspectConditionsSatisfied(A.getRawProperty(),t)):e}aspectConditionsSatisfied(e,t){return!e.conditions||e.conditions.length===0?!0:e.conditions.some(A=>{const n=t.aspects.find(a=>a.name===A.targetAspectName);return n?A.requiredVariantSelections.some(a=>a===n.value):!1})}async createHandle(e){switch(e.type){case g.AspectType.FileUpload:return new qt(this.bundle,e);case g.AspectType.Option:{const t=e.entityId?await L.getOption(e.entityId):void 0;return(t==null?void 0:t.type)==="Color"?new $t(this.bundle,e,t):new Ke(this.bundle,e,t)}case g.AspectType.Text:return new Zt(this.bundle,e)}}}class Se{constructor(e,t){this.bundle=e,this.property=t}getName(){return this.property.name}getTitle(){return this.property.title}getDescription(){return this.property.description}getType(){return this.property.type}getRawProperty(){return this.property}getSharedSteps(e){return(e??this.bundle.getWorkflowExperiences()).flatMap(n=>n.getSteps().filter(a=>{var i;return(i=a.getRaw().globalPropertyAspectConfigurations)==null?void 0:i.some(o=>{var s,r;return o.globalPropertyConfigurationId===((r=(s=this.bundle.getProductCollection())==null?void 0:s.getResource().globalPropertyConfiguration)==null?void 0:r.id)&&o.aspectName===this.property.name})}))}}class qt extends Se{constructor(e,t){super(e,t)}async selectImage(e){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,e.key),this.applyImageSelection(e)])}async
|
|
2282
|
+
`;class Zn{constructor(e){this.handleCache={},this.bundle=e}async getHandle(e){if(this.handleCache[e.name])return this.handleCache[e.name];const t=await this.createHandle(e);return this.handleCache[e.name]=t,t}async getHandles(){var t;if(!((t=this.bundle.getProductCollection())!=null&&t.getResource().globalPropertyConfiguration))return[];const e=this.bundle.getProductCollection().getResource().globalPropertyConfiguration;return Promise.all(e.aspects.map(A=>this.getHandle(A)))}applyConditionsFromState(e,t){return t?e.filter(A=>this.aspectConditionsSatisfied(A.getRawProperty(),t)):e}aspectConditionsSatisfied(e,t){return!e.conditions||e.conditions.length===0?!0:e.conditions.some(A=>{const n=t.aspects.find(a=>a.name===A.targetAspectName);return n?A.requiredVariantSelections.some(a=>a===n.value):!1})}async createHandle(e){switch(e.type){case g.AspectType.FileUpload:return new qt(this.bundle,e);case g.AspectType.Option:{const t=e.entityId?await L.getOption(e.entityId):void 0;return(t==null?void 0:t.type)==="Color"?new $t(this.bundle,e,t):new Ke(this.bundle,e,t)}case g.AspectType.Text:return new Zt(this.bundle,e)}}}class Se{constructor(e,t){this.bundle=e,this.property=t}getName(){return this.property.name}getTitle(){return this.property.title}getDescription(){return this.property.description}getType(){return this.property.type}getRawProperty(){return this.property}getSharedSteps(e){return(e??this.bundle.getWorkflowExperiences()).flatMap(n=>n.getSteps().filter(a=>{var i;return(i=a.getRaw().globalPropertyAspectConfigurations)==null?void 0:i.some(o=>{var s,r;return o.globalPropertyConfigurationId===((r=(s=this.bundle.getProductCollection())==null?void 0:s.getResource().globalPropertyConfiguration)==null?void 0:r.id)&&o.aspectName===this.property.name})}))}getStateValue(){return this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name)}}class qt extends Se{constructor(e,t){super(e,t)}async selectImage(e){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,e.key),this.applyImageSelection(e)])}hasImage(){return!!this.getStateValue()}async getImage(){const e=this.getStateValue();if(e)return k.getLocalOrFromServer(e)}async applyGlobalState(e){const t=this.getStateValue();if(!t)return Promise.resolve();const A=await k.getLocalOrFromServer(t);return A?this.applyImageSelection(A,e):Promise.resolve()}async applyImageSelection(e,t){const n=this.getSharedSteps(t).map(a=>a.selectImage(e));await Promise.all(n)}}class Zt extends Se{constructor(e,t){super(e,t)}getText(){const e=this.getStateValue();return e||""}async setText(e){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,e),this.applyTextSelection(e)])}async applyGlobalState(e){const t=this.getStateValue();if(!t)return Promise.resolve();await this.applyTextSelection(t,e)}async applyTextSelection(e,t){const n=this.getSharedSteps(t).map(a=>{a.setText(e)});await Promise.all(n)}}class Ke extends Se{constructor(e,t,A){super(e,t),this.optionResource=A}getCurrentVariant(){var t,A;if(!this.optionResource)return;const e=this.getStateValue();if(e){const n=(A=this.optionResource.variants)==null?void 0:A.find(a=>a.id===e);return n?new K(n):void 0}else{const n=(t=this.optionResource.variants)==null?void 0:t.find(a=>{var i,o;return a.id===((o=(i=this.optionResource)==null?void 0:i.defaultVariant)==null?void 0:o.id)});return n?new K(n):void 0}}getAvailableVariants(){var t,A;return(((A=(t=this.optionResource)==null?void 0:t.variants)==null?void 0:A.filter(n=>n.enabled))||[]).map(n=>new K(n))}getAllVariants(){var t;return(((t=this.optionResource)==null?void 0:t.variants)||[]).map(A=>new K(A))}async selectVariant(e){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,e.getId()),this.applyVariantSelection(e)])}async applyGlobalState(e){var n,a;const t=this.getStateValue();if(!t)return Promise.resolve();const A=(a=(n=this.optionResource)==null?void 0:n.variants)==null?void 0:a.find(i=>i.id===t);return A?this.applyVariantSelection(new K(A),e):Promise.resolve()}async applyVariantSelection(e,t){const n=this.getSharedSteps(t).map(a=>a.selectVariant(e));await Promise.all(n)}}class $t extends Ke{constructor(e,t,A){super(e,t,A)}setCustomColor(e){this.getSharedSteps().forEach(A=>A.setCustomColor(e))}getCustomColor(){return this.getSharedSteps()[0].getCustomColor()}}const $n=M.gql`
|
|
2283
2283
|
mutation CreateGlobalPropertyState($bundleId: String!) {
|
|
2284
2284
|
globalPropertyStateCreate(bundleId: $bundleId) {
|
|
2285
2285
|
id
|
|
@@ -2969,4 +2969,4 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
|
|
|
2969
2969
|
}
|
|
2970
2970
|
}
|
|
2971
2971
|
}
|
|
2972
|
-
`,Ae=async c=>{var e;for(const t in c.layouts){const A=c.layouts[t].elements.filter(a=>a.type===g.LayoutElementType.Illustration);for(let a=0;a<A.length;++a){const i=A[a];i.src&&i.svg&&(i.cachedObjectURL=await g.svgObjectURL(i.svg))}const n=c.layouts[t].elements.filter(a=>a.type===g.LayoutElementType.Textbox);for(let a=0;a<n.length;++a){const i=n[a];(e=i.fontData)!=null&&e.assetUrl&&await g.loadFont(i.fontData.assetUrl)}}},ua=async(c,e)=>{var n;const t=await N.getShadowGraphqlClient().query({query:ga(((n=e==null?void 0:e.assets)==null?void 0:n.metadata)||!1),errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:c}}),A=t.data.workflows;if(A===void 0||A.length!==c.length)throw new Error(`Unable to read workflows: ${t.errors??"Length mismatch in response"}`);return A.forEach(a=>{a.steps.forEach(i=>{var o,s,r;delete i.data.__typename,(o=i.option)!=null&&o.id&&((s=i.option.defaultVariant)!=null&&s.asset&&J.cacheAsset(i.option.defaultVariant.asset),i.option.colorProfile&&J.cacheAsset(i.option.colorProfile),(r=i.option.variants)==null||r.forEach(l=>{l.asset&&J.cacheAsset(l.asset),l.displayImage&&J.cacheAsset(l.displayImage),l.thumbnail&&J.cacheAsset(l.thumbnail),l.material&&J.cacheMaterial(l.material)}),Z.set({id:i.option.id},Promise.resolve(i.option)))})}),A},ma=async(c,e)=>{const A=(await e).find(n=>n.id===c);if(!A)throw new Error(`Workflow not found: ${c}`);return A},qe=async(c,e)=>{const t=c.map(o=>Z.get({id:o,options:e})),A=c.filter((o,s)=>t[s]===void 0);if(A.length===0)return Promise.all(t);const n=ua(A,e),a=A.map(o=>Z.set({id:o,options:e},ma(o,n))),i=t.filter(o=>o!==void 0);return await Promise.all(i.concat(a))},we=async(c,e)=>(await qe([c],e))[0],Ia=c=>c.sort((e,t)=>e.index-t.index).map(e=>({id:g.generate(),panelId:e.name,name:e.name,index:e.index,createdAt:new Date,updatedAt:new Date,transparentBackground:e.transparentBackground,height:e.height,width:e.width,previewRegion:e.previewRegion,useEditableArea:e.useEditableArea,editableArea:e.editableArea})),Ze=(c,e)=>{const t=c.workflowState,A=t?JSON.parse(t):void 0;return A?Object.values(A.layouts).map(n=>n.layout):Ia(e.panels)};class oA{constructor(e){this.updateTransactionState=async t=>{try{return N.getShadowGraphqlClient().mutate({...t,mutation:HA})}catch(A){throw console.error(A),new G("Critical - Unable to synchronize workflow state with server.")}},this.initialized=!1,this.options=e,this.options.applicationKey&&dA(this.options.applicationKey)}getAssetManager(){return J}getCurrencyCode(){if(this.currencyCode===void 0)throw new Error("No currency code set.");return this.currencyCode}getFlowService(){if(!wA())throw new Error("Application key required to use Flow Service.");return new nA}async getIntegration(){return(await N.getShadowGraphqlClient().query({query:Ba,errorPolicy:"all"})).data.currentIntegration}async authenticateBundleFromLocalStorage(e){var n,a;const t=P.getMap("bundleOwnerIds");if(t!=null&&t.has(e))return Promise.resolve({success:!0,stakeholderType:se.Owner});const A=P.getMap("bundlePartnerIds")||new Map;if(A.has(e)){const i=A.get(e),s=(P.getMap("partnerCustomerIds")||new Map).get(i);if(s&&await this.authenticateCustomerId(s)){const l=(a=(n=this.customer)==null?void 0:n.bundleStakeholders)==null?void 0:a.find(d=>{var B;return((B=d.bundle)==null?void 0:B.id)===e});if(l)return Promise.resolve({success:!0,stakeholderType:l.type})}}return Promise.resolve({success:!1})}async authenticateTransactionFromLocalStorage(e){var l,d,B,w,E,C;const t=N.getShadowGraphqlClient(),A=await t.query({query:la,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:e}});if(!A.data.transactions||A.data.transactions.length===0)throw new Error(`Transaction not found: ${e}`);const n=A.data.transactions[0];if(!((d=(l=n.product)==null?void 0:l.partner)==null?void 0:d.id))throw new Error(`Unable to read transaction: ${e}`);if(n.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const i=P.getMap("transactionOwnerIds");if(i!=null&&i.has(e))return Promise.resolve({success:!0,stakeholderType:se.Owner});const o=P.getMap("transactionCustomerIds");if(o!=null&&o.has(e)){const h=o.get(e);if(h&&await this.authenticateCustomerId(h)){const u=((w=(B=this.customer)==null?void 0:B.bundleStakeholders)==null?void 0:w.find(F=>{var I,f;return(f=(I=F.bundle)==null?void 0:I.transactions)==null?void 0:f.some(D=>D.id===e)}))||((C=(E=this.customer)==null?void 0:E.stakeholders)==null?void 0:C.find(F=>{var I;return((I=F.transaction)==null?void 0:I.id)===e}));if(u)return Promise.resolve({success:!0,stakeholderType:u.type})}}const r=(await t.query({query:da,errorPolicy:"all",variables:{id:n.workflowId}})).data.workflow;if(!r)throw new Error(`Unable to read workflow: ${n.workflowId}`);return Promise.resolve({success:!1,theme:r.overrideTheme,customLogoLink:n.customLogoLink})}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(e){const t=P.getMap("transactionCustomerIds");t!=null&&t.has(e)&&(t.delete(e),P.setMap("transactionCustomerIds",t))}getStakeholderTypeForTransaction(e){var A,n;const t=(n=(A=this.customer)==null?void 0:A.stakeholders)==null?void 0:n.find(a=>{var i;return((i=a.transaction)==null?void 0:i.id)===e});if(t)return t.type}async getOrCreateCustomer(e){var i;this.customer=void 0;const t=N.getShadowGraphqlClient(),n=(await t.query({query:wa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:e}})).data.customer;if(!n.id){const s=(i=(await t.mutate({mutation:Ea,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:e}}})).data)==null?void 0:i.customerCreate;if(!s)throw new Error("Unable to create customer.");return this.storeCustomer(s),this.customer=s,{customer:s,isAuthenticated:!1}}this.storeCustomer(n);const a=await this.authenticateCustomerId(n.id);return{customer:this.customer||n,isAuthenticated:a}}async authenticateCustomerId(e){var o;const t=N.getShadowGraphqlClient(),A=P.getMap("customerTokens");if(!(A!=null&&A.has(e)))return!1;const n=A.get(e);if(!n)return!1;const i=(o=(await t.mutate({mutation:ha,errorPolicy:"all",fetchPolicy:"no-cache",variables:{loginToken:n}})).data)==null?void 0:o.customerAuthenticate;return i?(this.storeCustomer(i),rt(n),this.customer=i,!0):!1}async generateVerificationCode(e){await N.getShadowGraphqlClient().mutate({mutation:Ca,variables:{emailAddress:e}})}async verifyCode(e,t){var a,i;const n=(a=(await N.getShadowGraphqlClient().mutate({mutation:Qa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:e,verificationCode:t}})).data)==null?void 0:a.customerVerifyCode;if(n!=null&&n.loginToken){if(!((i=n.partner)!=null&&i.id))throw new Error(`Unable to find customer: ${e}`);const o=P.getMap("customerTokens")||new Map;return o.set(n.id,n.loginToken),P.setMap("customerTokens",o),this.storeCustomer(n),rt(n.loginToken),this.customer={...n,loginToken:void 0},!0}return!1}async getNewBundle(e,t,A){var s,r,l;const a=(l=(await N.getShadowGraphqlClient().mutate({mutation:Ln(((r=(s=A==null?void 0:A.graphql)==null?void 0:s.productCollection)==null?void 0:r.eagerFetchProducts)||!1),variables:{collectionId:e,initialMetadata:t?Object.entries(t).map((d,B)=>({key:d[0],value:d[1]})):void 0},fetchPolicy:"no-cache"})).data)==null?void 0:l.bundleCreate;if(!(a!=null&&a.id))throw new Error("Unable to create bundle");const i=P.getMap("bundlePartnerIds")||new Map;i.set(a.id,a.partner.id),P.setMap("bundlePartnerIds",i);const o=P.getMap("bundleOwnerIds")||new Map;return o.set(a.id,a.bundleOwnerId),P.setMap("bundleOwnerIds",o),new AA(this,a,void 0,void 0,a.bundleOwnerId)}async getExistingBundle(e,t,A,n){var d,B,w,E,C,h;const a=P.getMap("bundleOwnerIds"),i=a==null?void 0:a.get(e),o=await N.getShadowGraphqlClient().query({query:kn(((B=(d=n==null?void 0:n.graphql)==null?void 0:d.productCollection)==null?void 0:B.eagerFetchProducts)||!1),variables:{id:e},fetchPolicy:"no-cache",context:{bundleOwnerId:i}});if(!((w=o.data)!=null&&w.bundles)||((E=o.data)==null?void 0:E.bundles.length)===0||!((C=o.data)!=null&&C.bundles[0]))throw new Error(`Unable to find bundle: ${e}`);const s=(h=o.data)==null?void 0:h.bundles[0],r=P.getMap("bundlePartnerIds")||new Map;r.set(s.id,s.partner.id),P.setMap("bundlePartnerIds",r);const l=new AA(this,s,t,A,i);return await l.getInitializationPromise(),l}async getBundleStakeholders(){var a;if(!this.customer)throw new Error("Customer not authenticated.");const e=await N.getShadowGraphqlClient().query({query:Jn,variables:{id:this.customer.id},fetchPolicy:"no-cache"});if(!((a=e.data)!=null&&a.customers)||e.data.customers.length===0)throw new Error("Unable to find customer.");const A=e.data.customers[0].bundleStakeholders||[],n=P.getMap("bundlePartnerIds")||new Map;return A.forEach(i=>{var o,s;(o=i.bundle)!=null&&o.id&&((s=i.bundle.partner)!=null&&s.id)&&n.set(i.bundle.id,i.bundle.partner.id)}),P.setMap("bundlePartnerIds",n),A}async getWorkflowExperience(e,t,A,n){var d,B,w,E,C;if(!n)return await this.getWorkflowExperienceDeprecated(e,t,A);const a=async()=>{var m,u;const h=N.getShadowGraphqlClient();if(n.type==="transaction"){const{transactionId:F,readOnly:I}=n,f=await h.query({query:ue,variables:{ids:[F]},errorPolicy:"all",fetchPolicy:"no-cache"});if(!((m=f.data)!=null&&m.transactions)||f.data.transactions.length===0)throw new G("Existing transaction not found.");const D=(u=f.data)==null?void 0:u.transactions[0];if(!D.workflowId)throw new G("Existing transaction has no workflow ID.");const p=await we(D.workflowId);if(!D.product)throw new G("Failed to load transaction, product not available.");return{transaction:D,workflow:p,readOnly:I}}if(n.type==="integration"||n.type==="external"){const F=async()=>{const p=n.type==="integration"?{integrationProductId:n.integrationProductId}:{externalIntegrationId:n.externalIntegrationId,externalProductId:n.externalProductId},S=await h.mutate({mutation:Et,variables:{...p,workflowId:n.workflowId,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!S.data||!S.data.transactionCreate)throw new G("Failed to create transaction!");const y=S.data.transactionCreate;if(!y.product)throw new G("Failed to create transaction, product not available.");return y},I=we(n.workflowId,n==null?void 0:n.graphql),[f,D]=await Promise.all([F(),I]);return{transaction:f,workflow:D}}throw new G("No workflow ID provided.")},{transaction:i,workflow:o,readOnly:s}=await a();this.currencyCode=(d=i.product.partner)==null?void 0:d.currencyCode;const r={product:i.product,transaction:i,layouts:[],singleVariantsRenderable:(B=n==null?void 0:n.workflowConfiguration)==null?void 0:B.singleVariantsRenderable,stateMutationFunc:s?async()=>{throw new v("State mutation is forbidden in read only mode!")}:async h=>{const u=(P.getMap("transactionOwnerIds")||new Map).get(i.id)||void 0;return this.updateTransactionState({...h,context:{transactionOwnerId:u}})},readOnly:s,workflow:o};if(n.type==="transaction"&&i.workflowState){const h=JSON.parse(i.workflowState);r.layouts=Object.values(h.layouts).map(m=>m.layout),await g.rehydrateSerializedLayout(h),await Ae(h),r.reloadedState=h}else if(!s&&n.workflowState){const h=JSON.parse(n.workflowState);r.layouts=Object.values(h.layouts).map(m=>m.layout),await g.rehydrateSerializedLayout(h),await Ae(h),r.reloadedState=h}else r.layouts=Ze(r.transaction,r.workflow);if(r.renderableContextService=new Me(r.layouts),n.previewService?(r.previewService=n.previewService,(w=r.product)!=null&&w.modelUrl&&(r.modelContainer=r.previewService.loadModel({model:r.product.modelUrl,contextService:r.renderableContextService}))):(r.previewService=A&&A(o),(E=r.product)!=null&&E.modelUrl&&(r.modelContainer=(C=r.previewService)==null?void 0:C.loadModel({model:r.product.modelUrl,contextService:r.renderableContextService}))),n.type!=="transaction"){const h=P.getMap("transactionOwnerIds")||new Map;h.set(i.id,i.transactionOwnerId),P.setMap("transactionOwnerIds",h)}else r.isReloadedTransaction=!0;this.initialized=!0,this.experienceOptions=r;const l=new le(this,r);return await l.getWorkflowManager().getInitializationPromise(),n.type!=="transaction"&&this.customer&&await l.attachCustomerDetails({email:this.customer.emailAddress}),l}async getWorkflowExperiences(e,t){if(e.length===0)throw new G("No options provided!");const A=N.getShadowGraphqlClient(),n=async f=>{var y,x;if(f.length===0)return[];const D=f.map(Y=>Y.option.transactionId),p=await A.query({query:ue,variables:{ids:D},errorPolicy:"all",fetchPolicy:"no-cache"}),S=p.data.transactions;if(S.length!==f.length){const Y=((x=(y=p.errors)==null?void 0:y[0])==null?void 0:x.message)||"Unknown error";throw new G(`Not all transactions were found: ${Y}`)}return S.map((Y,H)=>{var R;return{transaction:Y,workflowId:Y.workflowId,readOnly:((R=f.find(T=>T.option.transactionId===Y.id))==null?void 0:R.option.readOnly)??!1,index:f[H].index}})},a=async f=>{var S,y,x;if(f.length===0)return[];const D=await A.mutate({mutation:xA,variables:{inputs:f.map(Y=>({integrationProductId:Y.option.type==="integration"?Y.option.integrationProductId:void 0,externalIntegrationId:Y.option.type==="external"?Y.option.externalIntegrationId:void 0,externalProductId:Y.option.type==="external"?Y.option.externalProductId:void 0,workflowId:Y.option.workflowId,claim:!0}))},errorPolicy:"all",fetchPolicy:"no-cache"}),p=(S=D.data)==null?void 0:S.transactionCreateMany;if(!p||p.length===0){const Y=((x=(y=D.errors)==null?void 0:y[0])==null?void 0:x.message)||"Unknown error";throw new G(`Failed to create transactions: ${Y}`)}return p.map((Y,H)=>({transaction:Y,workflowId:Y.workflowId,readOnly:!1,index:f[H].index}))},i=e.map((f,D)=>({option:f,index:D})),o=i.filter(f=>f.option.type==="transaction"),s=i.filter(f=>f.option.type==="integration"||f.option.type==="external"),r=at(o,10),l=at(s,10),d=(await Promise.all([...r.map(n),...l.map(a)])).flat(),B=[...new Set(d.map(f=>f.workflowId))],w=await qe(B,t),E=new Map(w.map(f=>[f.id,f])),C=P.getMap("transactionOwnerIds")||new Map,h=d.map(async f=>{var T;const{transaction:D,workflowId:p,readOnly:S,index:y}=f,x=E.get(p),Y=e[y];!C.get(D.id)&&D.transactionOwnerId&&C.set(D.id,D.transactionOwnerId);const H=C.get(D.id)||void 0,R={product:D.product,transaction:D,layouts:[],singleVariantsRenderable:(T=Y==null?void 0:Y.workflowConfiguration)==null?void 0:T.singleVariantsRenderable,stateMutationFunc:S?async()=>{throw new v("State mutation is forbidden in read only mode!")}:async k=>this.updateTransactionState({...k,context:{transactionOwnerId:H}}),readOnly:S,workflow:x,isReloadedTransaction:Y.type==="transaction"};if(Y.type==="transaction"&&D.workflowState){const k=JSON.parse(D.workflowState);R.layouts=Object.values(k.layouts).map(z=>z.layout),await g.rehydrateSerializedLayout(k),await Ae(k),R.reloadedState=k}else if(!S&&Y.workflowState){const k=JSON.parse(Y.workflowState);R.layouts=Object.values(k.layouts).map(z=>z.layout),await g.rehydrateSerializedLayout(k),await Ae(k),R.reloadedState=k}else R.layouts=Ze(R.transaction,R.workflow);return R.renderableContextService=new Me(R.layouts),R.delayWorkflowStateSync=!0,this.initialized=!0,this.experienceOptions=R,{experienceOptions:R,index:y,options:Y}});P.setMap("transactionOwnerIds",C);const F=(await Promise.all(h)).sort((f,D)=>f.index-D.index).map(async f=>{const{experienceOptions:D,options:p}=f,S=new le(this,D);return await S.getWorkflowManager().getInitializationPromise(),p.type!=="transaction"&&this.customer&&await S.attachCustomerDetails({email:this.customer.emailAddress}),S}),I=await Promise.all(F);return I.forEach(f=>f.getWorkflowManager().setWorkflowStateSyncEnabled(!0)),I}async initFromIntegrationProduct(e){var i;if(e==="")throw new G("No integration product ID provided.");const A=await N.getShadowGraphqlClient().mutate({mutation:Et,variables:{integrationProductId:e,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 G("Failed to create transaction!");const n=A.data.transactionCreate;if(!n.product)throw new G("Failed to create transaction, product not available.");this.currencyCode=(i=n.product.partner)==null?void 0:i.currencyCode;const a=P.getMap("transactionOwnerIds")||new Map;a.set(n.id,n.transactionOwnerId),P.setMap("transactionOwnerIds",a),this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:async o=>this.updateTransactionState({...o,context:{transactionOwnerId:n.transactionOwnerId}})},this.initialized=!0}async initFromTransaction(e,t=!1){var o,s,r,l;if(e==="")throw new G("No transaction ID provided.");const A=N.getShadowGraphqlClient(),n=async()=>{var w,E;const B=(w=(await A.query({query:ue,variables:{ids:[e]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:w.transactions[0];if(!B)throw new G("Failed to read transaction.");if(!B.product)throw new G("Failed to load transaction, product not available.");this.currencyCode=(E=B.product.partner)==null?void 0:E.currencyCode,this.experienceOptions={product:B.product,transaction:B,layouts:[],stateMutationFunc:async()=>{throw new v("State mutation is forbidden in read only mode!")},readOnly:t},this.initialized=!0};if(t)return await n();const a=P.getMap("transactionOwnerIds")||new Map,i=a.get(e);if(i){const B=(o=(await A.query({query:ue,variables:{ids:[e]},errorPolicy:"all"})).data)==null?void 0:o.transactions[0];if(!B)throw new G("Failed to read transaction.");if(!B.product)throw new G("Failed to load transaction, product not available.");this.currencyCode=(s=B.product.partner)==null?void 0:s.currencyCode,this.experienceOptions={product:B.product,transaction:B,layouts:[],stateMutationFunc:async w=>this.updateTransactionState({...w,context:{transactionOwnerId:i}}),readOnly:t},this.initialized=!0;return}try{const B=(r=(await A.mutate({mutation:NA,variables:{id:e},errorPolicy:"all"})).data)==null?void 0:r.transactionClaim;if(!B)throw new G("Failed to read transaction.");if(!B.product)throw new G("Failed to load transaction, product not available.");this.currencyCode=(l=B.product.partner)==null?void 0:l.currencyCode,B.transactionOwnerId&&(a.set(B.id,B.transactionOwnerId),P.setMap("transactionOwnerIds",a)),this.experienceOptions={product:B.product,transaction:B,layouts:[],stateMutationFunc:async w=>this.updateTransactionState({...w,context:{transactionOwnerId:B.transactionOwnerId}}),readOnly:t},this.initialized=!0}catch{throw new G("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(e,t,A){var n,a,i,o;if(!this.initialized||!this.experienceOptions)throw new G("Cannot launch experience: Not initialized.");if(this.experienceOptions.transaction.workflowId){const s=await we(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=s,this.experienceOptions.transaction.workflowState){const l=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(l.layouts).map(d=>d.layout),await g.rehydrateSerializedLayout(l),await Ae(l),this.experienceOptions.reloadedState=l}this.experienceOptions.previewService=A&&A(s),this.experienceOptions.renderableContextService=new Me(this.experienceOptions.layouts),(n=this.experienceOptions.product)!=null&&n.modelUrl&&(this.experienceOptions.modelContainer=(a=this.experienceOptions.previewService)==null?void 0:a.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const r=new le(this,this.experienceOptions);return await r.getWorkflowManager().getInitializationPromise(),r}if(e){const r=(P.getMap("transactionOwnerIds")||new Map).get(this.experienceOptions.transaction.id),l=N.getShadowGraphqlClient().mutate({mutation:RA,variables:{workflowId:e,id:this.experienceOptions.transaction.id},context:{transactionOwnerId:r}}),d=we(e);if(await Promise.all([l,d]),this.experienceOptions.workflow=await d,t){const w=JSON.parse(t);this.experienceOptions.layouts=Object.values(w.layouts).map(E=>E.layout),await g.rehydrateSerializedLayout(w),await Ae(w),this.experienceOptions.reloadedState=w}else this.experienceOptions.layouts=Ze(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=A&&A(await d),this.experienceOptions.renderableContextService=new Me(this.experienceOptions.layouts),(i=this.experienceOptions.product)!=null&&i.modelUrl&&(this.experienceOptions.modelContainer=(o=this.experienceOptions.previewService)==null?void 0:o.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const B=new le(this,this.experienceOptions);return await B.getWorkflowManager().getInitializationPromise(),B}throw new G("No workflow ID provided.")}getPreviewService(){var e;return(e=this.experienceOptions)==null?void 0:e.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new G("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new G("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}configureUrls(e,t,A){W.setHubUrl(e),W.setServerUrl(t),W.setServicesApiUrl(A)}storeCustomer(e){const t=P.getMap("partnerCustomerIds")||new Map;t.set(e.partner.id,e.id),P.setMap("partnerCustomerIds",t)}async getIntegrationProductById(e){var a,i;const n=(a=(await N.getShadowGraphqlClient().query({query:GA,variables:{ids:[e]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:a.integrationProducts;if(!n||n.length===0||!((i=n[0])!=null&&i.id))throw new Error("Integration product not found.");return new Xe(n[0])}async getIntegrationProductFromExternalIds(e,t){var i;const a=(i=(await N.getShadowGraphqlClient().query({query:vA,variables:{externalProductId:t,externalIntegrationId:e},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:i.integrationProductFromExternalIds;if(!(a!=null&&a.id))throw new Error("Integration product not found.");return new Xe(a)}async getIntegrationProduct(e){return e.type==="integration"?this.getIntegrationProductById(e.integrationProductId):this.getIntegrationProductFromExternalIds(e.externalIntegrationId,e.externalProductId)}}class fa{getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}async reset(){}updateStateWithServer(e){}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(e){}addPoller(e){}addConfirmCallback(e){}addEditedCallback(e){}addElementsCallback(e){}addInformationResultCallback(e){}addInitCallback(e){}addMakingAdjustmentsCallback(e){}addMandatoryCallback(e){}addMetadataCallback(e){}addSelectionCallback(e){}addStepSpecificStorageCallback(e,t){}addStorageCallback(e){}getCommandDispatcher(){return e=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getProfanities(){return[]}getRegionElements(e){return[]}getSerializedStep(e,t){}getStepSpecificServices(e){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(e){}markUpdateCompleted(e){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}setCurrentAdjustingStepId(e){}setEditedStatus(e,t){}setInformationResults(e){}setMandatoryFulfilled(e,t){}async setSelectionsAndElements(e,t,A){}toggleDesignConfirmed(){}updateMetadata(e,t){}async updateStorage(e,t){}injectIntoPreviewService(e){return Promise.resolve()}ejectFromPreviewService(){}setWorkflowStateSyncEnabled(e){}}var sA=(c=>(c.SelectFrame="SelectFrame",c.SelectImage="SelectImage",c.Position="Position",c))(sA||{});class rA extends j{constructor(e,t){var A;super(e,t),this.frameService=(A=this.manager.getStepSpecificServices(this.getId()))==null?void 0:A.frameService}selectVariant(e){const t=this.manager.getRegionElements(this.step.stepName);return Ie.selectVariant(this.step,e.getResource(),t,this.manager,A=>this.setUpdateState(A))}onFrameDataChanged(e){this.frameService&&this.frameService.onFrameDataChanged(t=>{t&&e(t)})}selectImage(e){return Ie.selectImage(this.step,e,this.manager)}getImageData(){if(this.frameService)return this.frameService.getImageData()}getCurrentFrameStep(e,t,A,n){return n&&n.length>1&&e===void 0?"SelectFrame":t||A||this.getImageData()?"Position":"SelectImage"}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}}Object.defineProperty(Q,"AspectType",{enumerable:!0,get:()=>g.AspectType}),Object.defineProperty(Q,"AssetType",{enumerable:!0,get:()=>g.AssetType}),Object.defineProperty(Q,"BringForwardCommand",{enumerable:!0,get:()=>g.BringForwardCommand}),Object.defineProperty(Q,"BringToBackCommand",{enumerable:!0,get:()=>g.BringToBackCommand}),Object.defineProperty(Q,"BringToFrontCommand",{enumerable:!0,get:()=>g.BringToFrontCommand}),Object.defineProperty(Q,"CanvasCommand",{enumerable:!0,get:()=>g.CanvasCommand}),Object.defineProperty(Q,"CommandContext",{enumerable:!0,get:()=>g.CommandContext}),Object.defineProperty(Q,"CreateElementCommand",{enumerable:!0,get:()=>g.CreateElementCommand}),Object.defineProperty(Q,"CreateLayoutCommand",{enumerable:!0,get:()=>g.CreateLayoutCommand}),Object.defineProperty(Q,"DeleteElementCommand",{enumerable:!0,get:()=>g.DeleteElementCommand}),Object.defineProperty(Q,"FontAlignmentCommand",{enumerable:!0,get:()=>g.FontAlignmentCommand}),Object.defineProperty(Q,"FontColorCommand",{enumerable:!0,get:()=>g.FontColorCommand}),Object.defineProperty(Q,"FontSizeCommand",{enumerable:!0,get:()=>g.FontSizeCommand}),Object.defineProperty(Q,"FontSourceCommand",{enumerable:!0,get:()=>g.FontSourceCommand}),Object.defineProperty(Q,"GroupCommand",{enumerable:!0,get:()=>g.GroupCommand}),Object.defineProperty(Q,"LayoutElementFactory",{enumerable:!0,get:()=>g.LayoutElementFactory}),Object.defineProperty(Q,"LayoutElementType",{enumerable:!0,get:()=>g.LayoutElementType}),Object.defineProperty(Q,"MoveCommand",{enumerable:!0,get:()=>g.MoveCommand}),Object.defineProperty(Q,"ResizeCommand",{enumerable:!0,get:()=>g.ResizeCommand}),Object.defineProperty(Q,"RotateCommand",{enumerable:!0,get:()=>g.RotateCommand}),Object.defineProperty(Q,"SendBackwardsCommand",{enumerable:!0,get:()=>g.SendBackwardsCommand}),Object.defineProperty(Q,"StepAspectType",{enumerable:!0,get:()=>g.StepAspectType}),Object.defineProperty(Q,"StepType",{enumerable:!0,get:()=>g.StepType}),Object.defineProperty(Q,"TextChangeCommand",{enumerable:!0,get:()=>g.TextChangeCommand}),Object.defineProperty(Q,"UnitOfMeasurement",{enumerable:!0,get:()=>g.UnitOfMeasurement}),Object.defineProperty(Q,"dataUrlFromExternalUrl",{enumerable:!0,get:()=>g.dataUrlFromExternalUrl}),Object.defineProperty(Q,"determineCorrectFontSizeAndLines",{enumerable:!0,get:()=>g.determineCorrectFontSizeAndLines}),Object.defineProperty(Q,"findElement",{enumerable:!0,get:()=>g.findElement}),Object.defineProperty(Q,"frameDataCache",{enumerable:!0,get:()=>g.frameDataCache}),Object.defineProperty(Q,"generate",{enumerable:!0,get:()=>g.generate}),Object.defineProperty(Q,"generateSVGWithUnknownColors",{enumerable:!0,get:()=>g.generateSVGWithUnknownColors}),Object.defineProperty(Q,"getAttributesFromArrayBuffer",{enumerable:!0,get:()=>g.getAttributesFromArrayBuffer}),Object.defineProperty(Q,"getAxisAlignedBoundingBox",{enumerable:!0,get:()=>g.getAxisAlignedBoundingBox}),Object.defineProperty(Q,"getFrameData",{enumerable:!0,get:()=>g.getFrameData}),Object.defineProperty(Q,"getSvgElement",{enumerable:!0,get:()=>g.getSvgElement}),Object.defineProperty(Q,"loadFont",{enumerable:!0,get:()=>g.loadFont}),Object.defineProperty(Q,"patternImageDataCache",{enumerable:!0,get:()=>g.patternImageDataCache}),Object.defineProperty(Q,"registerFetchImplementation",{enumerable:!0,get:()=>g.registerFetchImplementation}),Object.defineProperty(Q,"registerWindowImplementation",{enumerable:!0,get:()=>g.registerWindowImplementation}),Object.defineProperty(Q,"rehydrateSerializedLayout",{enumerable:!0,get:()=>g.rehydrateSerializedLayout}),Object.defineProperty(Q,"setCanvasModule",{enumerable:!0,get:()=>g.setCanvasModule}),Q.ArrayInput=ia,Q.AssetNotFoundError=V,Q.CollectionProduct=ye,Q.ColorOptionGlobalPropertyHandle=$t,Q.ConversionDataType=wt,Q.ConversionLocation=dt,Q.FileUploadGlobalPropertyHandle=qt,Q.FlowExecutionNodeResult=de,Q.FlowExecutionResult=aA,Q.FlowService=nA,Q.FrameService=ut,Q.FrameStep=sA,Q.FrameStepHandle=rA,Q.GlobalPropertyHandle=Se,Q.IllustrationStepHandle=Rt,Q.InformationMessageType=ge,Q.InformationStepHandle=Tt,Q.IntegrationProduct=Xe,Q.IntegrationType=lt,Q.LayoutNotFoundError=b,Q.MaterialStepHandle=Ut,Q.MisconfigurationError=ie,Q.MockWorkflowManager=fa,Q.ModelStepHandle=Gt,Q.ObjectInput=We,Q.ObjectInputType=iA,Q.OptionGlobalPropertyHandle=Ke,Q.OptionNotFoundError=ae,Q.ParseError=q,Q.PictureStepHandle=vt,Q.ProductCameraRig=Bt,Q.ProductCollection=_t,Q.ProductWorkflow=Be,Q.PromiseCache=Z,Q.PromiseQueue=Ue,Q.QuestionStepHandle=kt,Q.QueueablePromise=Re,Q.ResourceNotFoundError=X,Q.ShapeStepHandle=bt,Q.SpiffCommerceClient=oA,Q.StakeholderType=se,Q.StepHandle=j,Q.TextGlobalPropertyHandle=Zt,Q.TextInput=aa,Q.TextStepHandle=Jt,Q.Transform=tA,Q.TransformCollection=eA,Q.UnhandledBehaviorError=v,Q.Variant=K,Q.WorkflowExperienceEventType=Kt,Q.WorkflowExperienceImpl=le,Q.assetService=J,Q.createDesign=jt,Q.designService=Fe,Q.digitalContentStepService=Dt,Q.frameStepService=Ie,Q.generateCommands=Vt,Q.generateStateFromDesignInputSteps=Gn,Q.getBoundedOffsets=Qt,Q.getWorkflow=we,Q.getWorkflows=qe,Q.graphQlManager=N,Q.illustrationStepService=ce,Q.materialStepService=Ge,Q.modelStepService=ve,Q.moduleStepService=pt,Q.optionService=L,Q.persistenceService=P,Q.pictureStepService=ke,Q.questionStepService=be,Q.shapeStepService=te,Q.shortenUrl=It,Q.spiffCoreConfiguration=W,Q.stepAspectValuesToDesignInputSteps=Un,Q.textStepService=O,Q.toast=Ft,Object.defineProperty(Q,Symbol.toStringTag,{value:"Module"})});
|
|
2972
|
+
`,Ae=async c=>{var e;for(const t in c.layouts){const A=c.layouts[t].elements.filter(a=>a.type===g.LayoutElementType.Illustration);for(let a=0;a<A.length;++a){const i=A[a];i.src&&i.svg&&(i.cachedObjectURL=await g.svgObjectURL(i.svg))}const n=c.layouts[t].elements.filter(a=>a.type===g.LayoutElementType.Textbox);for(let a=0;a<n.length;++a){const i=n[a];(e=i.fontData)!=null&&e.assetUrl&&await g.loadFont(i.fontData.assetUrl)}}},ua=async(c,e)=>{var n;const t=await N.getShadowGraphqlClient().query({query:ga(((n=e==null?void 0:e.assets)==null?void 0:n.metadata)||!1),errorPolicy:"all",fetchPolicy:"no-cache",variables:{ids:c}}),A=t.data.workflows;if(A===void 0||A.length!==c.length)throw new Error(`Unable to read workflows: ${t.errors??"Length mismatch in response"}`);return A.forEach(a=>{a.steps.forEach(i=>{var o,s,r;delete i.data.__typename,(o=i.option)!=null&&o.id&&((s=i.option.defaultVariant)!=null&&s.asset&&k.cacheAsset(i.option.defaultVariant.asset),i.option.colorProfile&&k.cacheAsset(i.option.colorProfile),(r=i.option.variants)==null||r.forEach(l=>{l.asset&&k.cacheAsset(l.asset),l.displayImage&&k.cacheAsset(l.displayImage),l.thumbnail&&k.cacheAsset(l.thumbnail),l.material&&k.cacheMaterial(l.material)}),Z.set({id:i.option.id},Promise.resolve(i.option)))})}),A},ma=async(c,e)=>{const A=(await e).find(n=>n.id===c);if(!A)throw new Error(`Workflow not found: ${c}`);return A},qe=async(c,e)=>{const t=c.map(o=>Z.get({id:o,options:e})),A=c.filter((o,s)=>t[s]===void 0);if(A.length===0)return Promise.all(t);const n=ua(A,e),a=A.map(o=>Z.set({id:o,options:e},ma(o,n))),i=t.filter(o=>o!==void 0);return await Promise.all(i.concat(a))},we=async(c,e)=>(await qe([c],e))[0],Ia=c=>c.sort((e,t)=>e.index-t.index).map(e=>({id:g.generate(),panelId:e.name,name:e.name,index:e.index,createdAt:new Date,updatedAt:new Date,transparentBackground:e.transparentBackground,height:e.height,width:e.width,previewRegion:e.previewRegion,useEditableArea:e.useEditableArea,editableArea:e.editableArea})),Ze=(c,e)=>{const t=c.workflowState,A=t?JSON.parse(t):void 0;return A?Object.values(A.layouts).map(n=>n.layout):Ia(e.panels)};class oA{constructor(e){this.updateTransactionState=async t=>{try{return N.getShadowGraphqlClient().mutate({...t,mutation:HA})}catch(A){throw console.error(A),new G("Critical - Unable to synchronize workflow state with server.")}},this.initialized=!1,this.options=e,this.options.applicationKey&&dA(this.options.applicationKey)}getAssetManager(){return k}getCurrencyCode(){if(this.currencyCode===void 0)throw new Error("No currency code set.");return this.currencyCode}getFlowService(){if(!wA())throw new Error("Application key required to use Flow Service.");return new nA}async getIntegration(){return(await N.getShadowGraphqlClient().query({query:Ba,errorPolicy:"all"})).data.currentIntegration}async authenticateBundleFromLocalStorage(e){var n,a;const t=P.getMap("bundleOwnerIds");if(t!=null&&t.has(e))return Promise.resolve({success:!0,stakeholderType:se.Owner});const A=P.getMap("bundlePartnerIds")||new Map;if(A.has(e)){const i=A.get(e),s=(P.getMap("partnerCustomerIds")||new Map).get(i);if(s&&await this.authenticateCustomerId(s)){const l=(a=(n=this.customer)==null?void 0:n.bundleStakeholders)==null?void 0:a.find(d=>{var B;return((B=d.bundle)==null?void 0:B.id)===e});if(l)return Promise.resolve({success:!0,stakeholderType:l.type})}}return Promise.resolve({success:!1})}async authenticateTransactionFromLocalStorage(e){var l,d,B,w,E,C;const t=N.getShadowGraphqlClient(),A=await t.query({query:la,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:e}});if(!A.data.transactions||A.data.transactions.length===0)throw new Error(`Transaction not found: ${e}`);const n=A.data.transactions[0];if(!((d=(l=n.product)==null?void 0:l.partner)==null?void 0:d.id))throw new Error(`Unable to read transaction: ${e}`);if(n.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const i=P.getMap("transactionOwnerIds");if(i!=null&&i.has(e))return Promise.resolve({success:!0,stakeholderType:se.Owner});const o=P.getMap("transactionCustomerIds");if(o!=null&&o.has(e)){const h=o.get(e);if(h&&await this.authenticateCustomerId(h)){const u=((w=(B=this.customer)==null?void 0:B.bundleStakeholders)==null?void 0:w.find(F=>{var I,f;return(f=(I=F.bundle)==null?void 0:I.transactions)==null?void 0:f.some(D=>D.id===e)}))||((C=(E=this.customer)==null?void 0:E.stakeholders)==null?void 0:C.find(F=>{var I;return((I=F.transaction)==null?void 0:I.id)===e}));if(u)return Promise.resolve({success:!0,stakeholderType:u.type})}}const r=(await t.query({query:da,errorPolicy:"all",variables:{id:n.workflowId}})).data.workflow;if(!r)throw new Error(`Unable to read workflow: ${n.workflowId}`);return Promise.resolve({success:!1,theme:r.overrideTheme,customLogoLink:n.customLogoLink})}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(e){const t=P.getMap("transactionCustomerIds");t!=null&&t.has(e)&&(t.delete(e),P.setMap("transactionCustomerIds",t))}getStakeholderTypeForTransaction(e){var A,n;const t=(n=(A=this.customer)==null?void 0:A.stakeholders)==null?void 0:n.find(a=>{var i;return((i=a.transaction)==null?void 0:i.id)===e});if(t)return t.type}async getOrCreateCustomer(e){var i;this.customer=void 0;const t=N.getShadowGraphqlClient(),n=(await t.query({query:wa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:e}})).data.customer;if(!n.id){const s=(i=(await t.mutate({mutation:Ea,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:e}}})).data)==null?void 0:i.customerCreate;if(!s)throw new Error("Unable to create customer.");return this.storeCustomer(s),this.customer=s,{customer:s,isAuthenticated:!1}}this.storeCustomer(n);const a=await this.authenticateCustomerId(n.id);return{customer:this.customer||n,isAuthenticated:a}}async authenticateCustomerId(e){var o;const t=N.getShadowGraphqlClient(),A=P.getMap("customerTokens");if(!(A!=null&&A.has(e)))return!1;const n=A.get(e);if(!n)return!1;const i=(o=(await t.mutate({mutation:ha,errorPolicy:"all",fetchPolicy:"no-cache",variables:{loginToken:n}})).data)==null?void 0:o.customerAuthenticate;return i?(this.storeCustomer(i),rt(n),this.customer=i,!0):!1}async generateVerificationCode(e){await N.getShadowGraphqlClient().mutate({mutation:Ca,variables:{emailAddress:e}})}async verifyCode(e,t){var a,i;const n=(a=(await N.getShadowGraphqlClient().mutate({mutation:Qa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:e,verificationCode:t}})).data)==null?void 0:a.customerVerifyCode;if(n!=null&&n.loginToken){if(!((i=n.partner)!=null&&i.id))throw new Error(`Unable to find customer: ${e}`);const o=P.getMap("customerTokens")||new Map;return o.set(n.id,n.loginToken),P.setMap("customerTokens",o),this.storeCustomer(n),rt(n.loginToken),this.customer={...n,loginToken:void 0},!0}return!1}async getNewBundle(e,t,A){var s,r,l;const a=(l=(await N.getShadowGraphqlClient().mutate({mutation:Ln(((r=(s=A==null?void 0:A.graphql)==null?void 0:s.productCollection)==null?void 0:r.eagerFetchProducts)||!1),variables:{collectionId:e,initialMetadata:t?Object.entries(t).map((d,B)=>({key:d[0],value:d[1]})):void 0},fetchPolicy:"no-cache"})).data)==null?void 0:l.bundleCreate;if(!(a!=null&&a.id))throw new Error("Unable to create bundle");const i=P.getMap("bundlePartnerIds")||new Map;i.set(a.id,a.partner.id),P.setMap("bundlePartnerIds",i);const o=P.getMap("bundleOwnerIds")||new Map;return o.set(a.id,a.bundleOwnerId),P.setMap("bundleOwnerIds",o),new AA(this,a,void 0,void 0,a.bundleOwnerId)}async getExistingBundle(e,t,A,n){var d,B,w,E,C,h;const a=P.getMap("bundleOwnerIds"),i=a==null?void 0:a.get(e),o=await N.getShadowGraphqlClient().query({query:kn(((B=(d=n==null?void 0:n.graphql)==null?void 0:d.productCollection)==null?void 0:B.eagerFetchProducts)||!1),variables:{id:e},fetchPolicy:"no-cache",context:{bundleOwnerId:i}});if(!((w=o.data)!=null&&w.bundles)||((E=o.data)==null?void 0:E.bundles.length)===0||!((C=o.data)!=null&&C.bundles[0]))throw new Error(`Unable to find bundle: ${e}`);const s=(h=o.data)==null?void 0:h.bundles[0],r=P.getMap("bundlePartnerIds")||new Map;r.set(s.id,s.partner.id),P.setMap("bundlePartnerIds",r);const l=new AA(this,s,t,A,i);return await l.getInitializationPromise(),l}async getBundleStakeholders(){var a;if(!this.customer)throw new Error("Customer not authenticated.");const e=await N.getShadowGraphqlClient().query({query:Jn,variables:{id:this.customer.id},fetchPolicy:"no-cache"});if(!((a=e.data)!=null&&a.customers)||e.data.customers.length===0)throw new Error("Unable to find customer.");const A=e.data.customers[0].bundleStakeholders||[],n=P.getMap("bundlePartnerIds")||new Map;return A.forEach(i=>{var o,s;(o=i.bundle)!=null&&o.id&&((s=i.bundle.partner)!=null&&s.id)&&n.set(i.bundle.id,i.bundle.partner.id)}),P.setMap("bundlePartnerIds",n),A}async getWorkflowExperience(e,t,A,n){var d,B,w,E,C;if(!n)return await this.getWorkflowExperienceDeprecated(e,t,A);const a=async()=>{var m,u;const h=N.getShadowGraphqlClient();if(n.type==="transaction"){const{transactionId:F,readOnly:I}=n,f=await h.query({query:ue,variables:{ids:[F]},errorPolicy:"all",fetchPolicy:"no-cache"});if(!((m=f.data)!=null&&m.transactions)||f.data.transactions.length===0)throw new G("Existing transaction not found.");const D=(u=f.data)==null?void 0:u.transactions[0];if(!D.workflowId)throw new G("Existing transaction has no workflow ID.");const p=await we(D.workflowId);if(!D.product)throw new G("Failed to load transaction, product not available.");return{transaction:D,workflow:p,readOnly:I}}if(n.type==="integration"||n.type==="external"){const F=async()=>{const p=n.type==="integration"?{integrationProductId:n.integrationProductId}:{externalIntegrationId:n.externalIntegrationId,externalProductId:n.externalProductId},S=await h.mutate({mutation:Et,variables:{...p,workflowId:n.workflowId,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!S.data||!S.data.transactionCreate)throw new G("Failed to create transaction!");const y=S.data.transactionCreate;if(!y.product)throw new G("Failed to create transaction, product not available.");return y},I=we(n.workflowId,n==null?void 0:n.graphql),[f,D]=await Promise.all([F(),I]);return{transaction:f,workflow:D}}throw new G("No workflow ID provided.")},{transaction:i,workflow:o,readOnly:s}=await a();this.currencyCode=(d=i.product.partner)==null?void 0:d.currencyCode;const r={product:i.product,transaction:i,layouts:[],singleVariantsRenderable:(B=n==null?void 0:n.workflowConfiguration)==null?void 0:B.singleVariantsRenderable,stateMutationFunc:s?async()=>{throw new v("State mutation is forbidden in read only mode!")}:async h=>{const u=(P.getMap("transactionOwnerIds")||new Map).get(i.id)||void 0;return this.updateTransactionState({...h,context:{transactionOwnerId:u}})},readOnly:s,workflow:o};if(n.type==="transaction"&&i.workflowState){const h=JSON.parse(i.workflowState);r.layouts=Object.values(h.layouts).map(m=>m.layout),await g.rehydrateSerializedLayout(h),await Ae(h),r.reloadedState=h}else if(!s&&n.workflowState){const h=JSON.parse(n.workflowState);r.layouts=Object.values(h.layouts).map(m=>m.layout),await g.rehydrateSerializedLayout(h),await Ae(h),r.reloadedState=h}else r.layouts=Ze(r.transaction,r.workflow);if(r.renderableContextService=new Me(r.layouts),n.previewService?(r.previewService=n.previewService,(w=r.product)!=null&&w.modelUrl&&(r.modelContainer=r.previewService.loadModel({model:r.product.modelUrl,contextService:r.renderableContextService}))):(r.previewService=A&&A(o),(E=r.product)!=null&&E.modelUrl&&(r.modelContainer=(C=r.previewService)==null?void 0:C.loadModel({model:r.product.modelUrl,contextService:r.renderableContextService}))),n.type!=="transaction"){const h=P.getMap("transactionOwnerIds")||new Map;h.set(i.id,i.transactionOwnerId),P.setMap("transactionOwnerIds",h)}else r.isReloadedTransaction=!0;this.initialized=!0,this.experienceOptions=r;const l=new le(this,r);return await l.getWorkflowManager().getInitializationPromise(),n.type!=="transaction"&&this.customer&&await l.attachCustomerDetails({email:this.customer.emailAddress}),l}async getWorkflowExperiences(e,t){if(e.length===0)throw new G("No options provided!");const A=N.getShadowGraphqlClient(),n=async f=>{var y,x;if(f.length===0)return[];const D=f.map(Y=>Y.option.transactionId),p=await A.query({query:ue,variables:{ids:D},errorPolicy:"all",fetchPolicy:"no-cache"}),S=p.data.transactions;if(S.length!==f.length){const Y=((x=(y=p.errors)==null?void 0:y[0])==null?void 0:x.message)||"Unknown error";throw new G(`Not all transactions were found: ${Y}`)}return S.map((Y,H)=>{var R;return{transaction:Y,workflowId:Y.workflowId,readOnly:((R=f.find(T=>T.option.transactionId===Y.id))==null?void 0:R.option.readOnly)??!1,index:f[H].index}})},a=async f=>{var S,y,x;if(f.length===0)return[];const D=await A.mutate({mutation:xA,variables:{inputs:f.map(Y=>({integrationProductId:Y.option.type==="integration"?Y.option.integrationProductId:void 0,externalIntegrationId:Y.option.type==="external"?Y.option.externalIntegrationId:void 0,externalProductId:Y.option.type==="external"?Y.option.externalProductId:void 0,workflowId:Y.option.workflowId,claim:!0}))},errorPolicy:"all",fetchPolicy:"no-cache"}),p=(S=D.data)==null?void 0:S.transactionCreateMany;if(!p||p.length===0){const Y=((x=(y=D.errors)==null?void 0:y[0])==null?void 0:x.message)||"Unknown error";throw new G(`Failed to create transactions: ${Y}`)}return p.map((Y,H)=>({transaction:Y,workflowId:Y.workflowId,readOnly:!1,index:f[H].index}))},i=e.map((f,D)=>({option:f,index:D})),o=i.filter(f=>f.option.type==="transaction"),s=i.filter(f=>f.option.type==="integration"||f.option.type==="external"),r=at(o,10),l=at(s,10),d=(await Promise.all([...r.map(n),...l.map(a)])).flat(),B=[...new Set(d.map(f=>f.workflowId))],w=await qe(B,t),E=new Map(w.map(f=>[f.id,f])),C=P.getMap("transactionOwnerIds")||new Map,h=d.map(async f=>{var T;const{transaction:D,workflowId:p,readOnly:S,index:y}=f,x=E.get(p),Y=e[y];!C.get(D.id)&&D.transactionOwnerId&&C.set(D.id,D.transactionOwnerId);const H=C.get(D.id)||void 0,R={product:D.product,transaction:D,layouts:[],singleVariantsRenderable:(T=Y==null?void 0:Y.workflowConfiguration)==null?void 0:T.singleVariantsRenderable,stateMutationFunc:S?async()=>{throw new v("State mutation is forbidden in read only mode!")}:async b=>this.updateTransactionState({...b,context:{transactionOwnerId:H}}),readOnly:S,workflow:x,isReloadedTransaction:Y.type==="transaction"};if(Y.type==="transaction"&&D.workflowState){const b=JSON.parse(D.workflowState);R.layouts=Object.values(b.layouts).map(z=>z.layout),await g.rehydrateSerializedLayout(b),await Ae(b),R.reloadedState=b}else if(!S&&Y.workflowState){const b=JSON.parse(Y.workflowState);R.layouts=Object.values(b.layouts).map(z=>z.layout),await g.rehydrateSerializedLayout(b),await Ae(b),R.reloadedState=b}else R.layouts=Ze(R.transaction,R.workflow);return R.renderableContextService=new Me(R.layouts),R.delayWorkflowStateSync=!0,this.initialized=!0,this.experienceOptions=R,{experienceOptions:R,index:y,options:Y}});P.setMap("transactionOwnerIds",C);const F=(await Promise.all(h)).sort((f,D)=>f.index-D.index).map(async f=>{const{experienceOptions:D,options:p}=f,S=new le(this,D);return await S.getWorkflowManager().getInitializationPromise(),p.type!=="transaction"&&this.customer&&await S.attachCustomerDetails({email:this.customer.emailAddress}),S}),I=await Promise.all(F);return I.forEach(f=>f.getWorkflowManager().setWorkflowStateSyncEnabled(!0)),I}async initFromIntegrationProduct(e){var i;if(e==="")throw new G("No integration product ID provided.");const A=await N.getShadowGraphqlClient().mutate({mutation:Et,variables:{integrationProductId:e,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 G("Failed to create transaction!");const n=A.data.transactionCreate;if(!n.product)throw new G("Failed to create transaction, product not available.");this.currencyCode=(i=n.product.partner)==null?void 0:i.currencyCode;const a=P.getMap("transactionOwnerIds")||new Map;a.set(n.id,n.transactionOwnerId),P.setMap("transactionOwnerIds",a),this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:async o=>this.updateTransactionState({...o,context:{transactionOwnerId:n.transactionOwnerId}})},this.initialized=!0}async initFromTransaction(e,t=!1){var o,s,r,l;if(e==="")throw new G("No transaction ID provided.");const A=N.getShadowGraphqlClient(),n=async()=>{var w,E;const B=(w=(await A.query({query:ue,variables:{ids:[e]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:w.transactions[0];if(!B)throw new G("Failed to read transaction.");if(!B.product)throw new G("Failed to load transaction, product not available.");this.currencyCode=(E=B.product.partner)==null?void 0:E.currencyCode,this.experienceOptions={product:B.product,transaction:B,layouts:[],stateMutationFunc:async()=>{throw new v("State mutation is forbidden in read only mode!")},readOnly:t},this.initialized=!0};if(t)return await n();const a=P.getMap("transactionOwnerIds")||new Map,i=a.get(e);if(i){const B=(o=(await A.query({query:ue,variables:{ids:[e]},errorPolicy:"all"})).data)==null?void 0:o.transactions[0];if(!B)throw new G("Failed to read transaction.");if(!B.product)throw new G("Failed to load transaction, product not available.");this.currencyCode=(s=B.product.partner)==null?void 0:s.currencyCode,this.experienceOptions={product:B.product,transaction:B,layouts:[],stateMutationFunc:async w=>this.updateTransactionState({...w,context:{transactionOwnerId:i}}),readOnly:t},this.initialized=!0;return}try{const B=(r=(await A.mutate({mutation:NA,variables:{id:e},errorPolicy:"all"})).data)==null?void 0:r.transactionClaim;if(!B)throw new G("Failed to read transaction.");if(!B.product)throw new G("Failed to load transaction, product not available.");this.currencyCode=(l=B.product.partner)==null?void 0:l.currencyCode,B.transactionOwnerId&&(a.set(B.id,B.transactionOwnerId),P.setMap("transactionOwnerIds",a)),this.experienceOptions={product:B.product,transaction:B,layouts:[],stateMutationFunc:async w=>this.updateTransactionState({...w,context:{transactionOwnerId:B.transactionOwnerId}}),readOnly:t},this.initialized=!0}catch{throw new G("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(e,t,A){var n,a,i,o;if(!this.initialized||!this.experienceOptions)throw new G("Cannot launch experience: Not initialized.");if(this.experienceOptions.transaction.workflowId){const s=await we(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=s,this.experienceOptions.transaction.workflowState){const l=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(l.layouts).map(d=>d.layout),await g.rehydrateSerializedLayout(l),await Ae(l),this.experienceOptions.reloadedState=l}this.experienceOptions.previewService=A&&A(s),this.experienceOptions.renderableContextService=new Me(this.experienceOptions.layouts),(n=this.experienceOptions.product)!=null&&n.modelUrl&&(this.experienceOptions.modelContainer=(a=this.experienceOptions.previewService)==null?void 0:a.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const r=new le(this,this.experienceOptions);return await r.getWorkflowManager().getInitializationPromise(),r}if(e){const r=(P.getMap("transactionOwnerIds")||new Map).get(this.experienceOptions.transaction.id),l=N.getShadowGraphqlClient().mutate({mutation:RA,variables:{workflowId:e,id:this.experienceOptions.transaction.id},context:{transactionOwnerId:r}}),d=we(e);if(await Promise.all([l,d]),this.experienceOptions.workflow=await d,t){const w=JSON.parse(t);this.experienceOptions.layouts=Object.values(w.layouts).map(E=>E.layout),await g.rehydrateSerializedLayout(w),await Ae(w),this.experienceOptions.reloadedState=w}else this.experienceOptions.layouts=Ze(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=A&&A(await d),this.experienceOptions.renderableContextService=new Me(this.experienceOptions.layouts),(i=this.experienceOptions.product)!=null&&i.modelUrl&&(this.experienceOptions.modelContainer=(o=this.experienceOptions.previewService)==null?void 0:o.loadModel({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}));const B=new le(this,this.experienceOptions);return await B.getWorkflowManager().getInitializationPromise(),B}throw new G("No workflow ID provided.")}getPreviewService(){var e;return(e=this.experienceOptions)==null?void 0:e.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new G("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new G("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}configureUrls(e,t,A){W.setHubUrl(e),W.setServerUrl(t),W.setServicesApiUrl(A)}storeCustomer(e){const t=P.getMap("partnerCustomerIds")||new Map;t.set(e.partner.id,e.id),P.setMap("partnerCustomerIds",t)}async getIntegrationProductById(e){var a,i;const n=(a=(await N.getShadowGraphqlClient().query({query:GA,variables:{ids:[e]},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:a.integrationProducts;if(!n||n.length===0||!((i=n[0])!=null&&i.id))throw new Error("Integration product not found.");return new Xe(n[0])}async getIntegrationProductFromExternalIds(e,t){var i;const a=(i=(await N.getShadowGraphqlClient().query({query:vA,variables:{externalProductId:t,externalIntegrationId:e},fetchPolicy:"no-cache",errorPolicy:"all"})).data)==null?void 0:i.integrationProductFromExternalIds;if(!(a!=null&&a.id))throw new Error("Integration product not found.");return new Xe(a)}async getIntegrationProduct(e){return e.type==="integration"?this.getIntegrationProductById(e.integrationProductId):this.getIntegrationProductFromExternalIds(e.externalIntegrationId,e.externalProductId)}}class fa{getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}async reset(){}updateStateWithServer(e){}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(e){}addPoller(e){}addConfirmCallback(e){}addEditedCallback(e){}addElementsCallback(e){}addInformationResultCallback(e){}addInitCallback(e){}addMakingAdjustmentsCallback(e){}addMandatoryCallback(e){}addMetadataCallback(e){}addSelectionCallback(e){}addStepSpecificStorageCallback(e,t){}addStorageCallback(e){}getCommandDispatcher(){return e=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getProfanities(){return[]}getRegionElements(e){return[]}getSerializedStep(e,t){}getStepSpecificServices(e){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(e){}markUpdateCompleted(e){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}setCurrentAdjustingStepId(e){}setEditedStatus(e,t){}setInformationResults(e){}setMandatoryFulfilled(e,t){}async setSelectionsAndElements(e,t,A){}toggleDesignConfirmed(){}updateMetadata(e,t){}async updateStorage(e,t){}injectIntoPreviewService(e){return Promise.resolve()}ejectFromPreviewService(){}setWorkflowStateSyncEnabled(e){}}var sA=(c=>(c.SelectFrame="SelectFrame",c.SelectImage="SelectImage",c.Position="Position",c))(sA||{});class rA extends j{constructor(e,t){var A;super(e,t),this.frameService=(A=this.manager.getStepSpecificServices(this.getId()))==null?void 0:A.frameService}selectVariant(e){const t=this.manager.getRegionElements(this.step.stepName);return Ie.selectVariant(this.step,e.getResource(),t,this.manager,A=>this.setUpdateState(A))}onFrameDataChanged(e){this.frameService&&this.frameService.onFrameDataChanged(t=>{t&&e(t)})}selectImage(e){return Ie.selectImage(this.step,e,this.manager)}getImageData(){if(this.frameService)return this.frameService.getImageData()}getCurrentFrameStep(e,t,A,n){return n&&n.length>1&&e===void 0?"SelectFrame":t||A||this.getImageData()?"Position":"SelectImage"}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}}Object.defineProperty(Q,"AspectType",{enumerable:!0,get:()=>g.AspectType}),Object.defineProperty(Q,"AssetType",{enumerable:!0,get:()=>g.AssetType}),Object.defineProperty(Q,"BringForwardCommand",{enumerable:!0,get:()=>g.BringForwardCommand}),Object.defineProperty(Q,"BringToBackCommand",{enumerable:!0,get:()=>g.BringToBackCommand}),Object.defineProperty(Q,"BringToFrontCommand",{enumerable:!0,get:()=>g.BringToFrontCommand}),Object.defineProperty(Q,"CanvasCommand",{enumerable:!0,get:()=>g.CanvasCommand}),Object.defineProperty(Q,"CommandContext",{enumerable:!0,get:()=>g.CommandContext}),Object.defineProperty(Q,"CreateElementCommand",{enumerable:!0,get:()=>g.CreateElementCommand}),Object.defineProperty(Q,"CreateLayoutCommand",{enumerable:!0,get:()=>g.CreateLayoutCommand}),Object.defineProperty(Q,"DeleteElementCommand",{enumerable:!0,get:()=>g.DeleteElementCommand}),Object.defineProperty(Q,"FontAlignmentCommand",{enumerable:!0,get:()=>g.FontAlignmentCommand}),Object.defineProperty(Q,"FontColorCommand",{enumerable:!0,get:()=>g.FontColorCommand}),Object.defineProperty(Q,"FontSizeCommand",{enumerable:!0,get:()=>g.FontSizeCommand}),Object.defineProperty(Q,"FontSourceCommand",{enumerable:!0,get:()=>g.FontSourceCommand}),Object.defineProperty(Q,"GroupCommand",{enumerable:!0,get:()=>g.GroupCommand}),Object.defineProperty(Q,"LayoutElementFactory",{enumerable:!0,get:()=>g.LayoutElementFactory}),Object.defineProperty(Q,"LayoutElementType",{enumerable:!0,get:()=>g.LayoutElementType}),Object.defineProperty(Q,"MoveCommand",{enumerable:!0,get:()=>g.MoveCommand}),Object.defineProperty(Q,"ResizeCommand",{enumerable:!0,get:()=>g.ResizeCommand}),Object.defineProperty(Q,"RotateCommand",{enumerable:!0,get:()=>g.RotateCommand}),Object.defineProperty(Q,"SendBackwardsCommand",{enumerable:!0,get:()=>g.SendBackwardsCommand}),Object.defineProperty(Q,"StepAspectType",{enumerable:!0,get:()=>g.StepAspectType}),Object.defineProperty(Q,"StepType",{enumerable:!0,get:()=>g.StepType}),Object.defineProperty(Q,"TextChangeCommand",{enumerable:!0,get:()=>g.TextChangeCommand}),Object.defineProperty(Q,"UnitOfMeasurement",{enumerable:!0,get:()=>g.UnitOfMeasurement}),Object.defineProperty(Q,"dataUrlFromExternalUrl",{enumerable:!0,get:()=>g.dataUrlFromExternalUrl}),Object.defineProperty(Q,"determineCorrectFontSizeAndLines",{enumerable:!0,get:()=>g.determineCorrectFontSizeAndLines}),Object.defineProperty(Q,"findElement",{enumerable:!0,get:()=>g.findElement}),Object.defineProperty(Q,"frameDataCache",{enumerable:!0,get:()=>g.frameDataCache}),Object.defineProperty(Q,"generate",{enumerable:!0,get:()=>g.generate}),Object.defineProperty(Q,"generateSVGWithUnknownColors",{enumerable:!0,get:()=>g.generateSVGWithUnknownColors}),Object.defineProperty(Q,"getAttributesFromArrayBuffer",{enumerable:!0,get:()=>g.getAttributesFromArrayBuffer}),Object.defineProperty(Q,"getAxisAlignedBoundingBox",{enumerable:!0,get:()=>g.getAxisAlignedBoundingBox}),Object.defineProperty(Q,"getFrameData",{enumerable:!0,get:()=>g.getFrameData}),Object.defineProperty(Q,"getSvgElement",{enumerable:!0,get:()=>g.getSvgElement}),Object.defineProperty(Q,"loadFont",{enumerable:!0,get:()=>g.loadFont}),Object.defineProperty(Q,"patternImageDataCache",{enumerable:!0,get:()=>g.patternImageDataCache}),Object.defineProperty(Q,"registerFetchImplementation",{enumerable:!0,get:()=>g.registerFetchImplementation}),Object.defineProperty(Q,"registerWindowImplementation",{enumerable:!0,get:()=>g.registerWindowImplementation}),Object.defineProperty(Q,"rehydrateSerializedLayout",{enumerable:!0,get:()=>g.rehydrateSerializedLayout}),Object.defineProperty(Q,"setCanvasModule",{enumerable:!0,get:()=>g.setCanvasModule}),Q.ArrayInput=ia,Q.AssetNotFoundError=V,Q.CollectionProduct=ye,Q.ColorOptionGlobalPropertyHandle=$t,Q.ConversionDataType=wt,Q.ConversionLocation=dt,Q.FileUploadGlobalPropertyHandle=qt,Q.FlowExecutionNodeResult=de,Q.FlowExecutionResult=aA,Q.FlowService=nA,Q.FrameService=ut,Q.FrameStep=sA,Q.FrameStepHandle=rA,Q.GlobalPropertyHandle=Se,Q.IllustrationStepHandle=Rt,Q.InformationMessageType=ge,Q.InformationStepHandle=Tt,Q.IntegrationProduct=Xe,Q.IntegrationType=lt,Q.LayoutNotFoundError=J,Q.MaterialStepHandle=Ut,Q.MisconfigurationError=ie,Q.MockWorkflowManager=fa,Q.ModelStepHandle=Gt,Q.ObjectInput=We,Q.ObjectInputType=iA,Q.OptionGlobalPropertyHandle=Ke,Q.OptionNotFoundError=ae,Q.ParseError=q,Q.PictureStepHandle=vt,Q.ProductCameraRig=Bt,Q.ProductCollection=_t,Q.ProductWorkflow=Be,Q.PromiseCache=Z,Q.PromiseQueue=Ue,Q.QuestionStepHandle=kt,Q.QueueablePromise=Re,Q.ResourceNotFoundError=X,Q.ShapeStepHandle=bt,Q.SpiffCommerceClient=oA,Q.StakeholderType=se,Q.StepHandle=j,Q.TextGlobalPropertyHandle=Zt,Q.TextInput=aa,Q.TextStepHandle=Jt,Q.Transform=tA,Q.TransformCollection=eA,Q.UnhandledBehaviorError=v,Q.Variant=K,Q.WorkflowExperienceEventType=Kt,Q.WorkflowExperienceImpl=le,Q.assetService=k,Q.createDesign=jt,Q.designService=Fe,Q.digitalContentStepService=Dt,Q.frameStepService=Ie,Q.generateCommands=Vt,Q.generateStateFromDesignInputSteps=Gn,Q.getBoundedOffsets=Qt,Q.getWorkflow=we,Q.getWorkflows=qe,Q.graphQlManager=N,Q.illustrationStepService=ce,Q.materialStepService=Ge,Q.modelStepService=ve,Q.moduleStepService=pt,Q.optionService=L,Q.persistenceService=P,Q.pictureStepService=ke,Q.questionStepService=be,Q.shapeStepService=te,Q.shortenUrl=It,Q.spiffCoreConfiguration=W,Q.stepAspectValuesToDesignInputSteps=Un,Q.textStepService=O,Q.toast=Ft,Object.defineProperty(Q,Symbol.toStringTag,{value:"Module"})});
|