@spiffcommerce/core 18.3.0 → 18.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +8 -2
- package/dist/index.js +735 -724
- package/dist/index.umd.cjs +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHttpLink as ct, InMemoryCache as gt, ApolloClient as lt, from as Bt, gql as M } from "@apollo/client/core";
|
|
2
2
|
import { fetch as qA, getAttributesFromArrayBuffer as pe, AssetType as re, StepType as f, getFrameData as ZA, frameDataCache as dt, GroupCommand as R, UpdateFramePattern as De, UpdateFrameThresholdSettingsCommand as wt, calculateOffsets as $A, LayoutElementType as U, generate as k, CreateElementCommand as b, generateSVGWithUnknownColors as fe, svgObjectURL as pA, fetchAsString as q, DeleteElementCommand as Z, generateDefaultRectangleFrameSvg as ce, GetSVGDimensions as Et, patternImageDataCache as ge, fetchAsArrayBuffer as ht, findElement as DA, modifySVGWithElementProperties as Ct, IllustrationColorCommand as TA, IllustrationCacheCommand as Qt, getFontMetrics as ut, getPatternImageData as zA, FontAlignmentCommand as mt, FontColorCommand as It, FontImageFillCommand as kA, applyTextTransformations as KA, determineCorrectFontSizeAndLines as uA, FontSourceCommand as le, loadFont as _A, TextChangeCommand as pt, FontSizeCommand as Dt, createElementNS as ft, createElement as lA, _loadFontExternalDataURL as Ae, UpdateWorkflowStateCommand as Be, CommandContext as Ft, createCanvas as fA, getSvgElement as Fe, LayoutRenderingPurpose as Me, renderPapyrusComponentAsString as ye, loadImage as Ye, getDomParser as Se, toBase64 as de, getVariant as Mt, generateFrameSVG as yt, getDefaultVariant as NA, domParser as xe, sanitizeSvgTree as Pe, traverse as Yt, xmlSerializer as Ne, CreateLayoutCommand as St, AspectType as mA, rehydrateSerializedLayout as _ } from "@spiffcommerce/papyrus";
|
|
3
|
-
import { AssetType as
|
|
3
|
+
import { AssetType as Ni, BringForwardCommand as Hi, BringToBackCommand as Ri, BringToFrontCommand as Ui, CanvasCommand as Gi, CommandContext as vi, CreateElementCommand as ki, CreateLayoutCommand as Ji, DeleteElementCommand as bi, FontAlignmentCommand as Li, FontColorCommand as Oi, FontSizeCommand as Ti, FontSourceCommand as zi, GroupCommand as Ki, LayoutElementFactory as ji, LayoutElementType as Vi, MoveCommand as Wi, ResizeCommand as Xi, RotateCommand as qi, SendBackwardsCommand as Zi, StepAspectType as $i, StepType as _i, TextChangeCommand as As, UnitOfMeasurement as es, dataUrlFromExternalUrl as ts, determineCorrectFontSizeAndLines as as, findElement as ns, frameDataCache as is, generate as ss, generateSVGWithUnknownColors as os, getAttributesFromArrayBuffer as rs, getAxisAlignedBoundingBox as cs, getFrameData as gs, getSvgElement as ls, loadFont as Bs, patternImageDataCache as ds, registerFetchImplementation as ws, registerWindowImplementation as Es, rehydrateSerializedLayout as hs, setCanvasModule as Cs } from "@spiffcommerce/papyrus";
|
|
4
4
|
import { setContext as xt } from "@apollo/client/link/context";
|
|
5
5
|
import { onError as Pt } from "@apollo/client/link/error";
|
|
6
6
|
import { Pith as He } from "pith";
|
|
@@ -55,7 +55,7 @@ class v extends RA {
|
|
|
55
55
|
super(`Unhandled Behavior Encountered: ${A}`);
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
class
|
|
58
|
+
class iA extends RA {
|
|
59
59
|
constructor(A) {
|
|
60
60
|
super(`Parsing Error: ${A}`);
|
|
61
61
|
}
|
|
@@ -179,8 +179,8 @@ class kt {
|
|
|
179
179
|
const A = ct({
|
|
180
180
|
uri: `${yA.getServerUrl()}/graphql`,
|
|
181
181
|
fetch: qA
|
|
182
|
-
}), e = xt(async (
|
|
183
|
-
const { headers: o } =
|
|
182
|
+
}), e = xt(async (i, s) => {
|
|
183
|
+
const { headers: o } = s, r = o || {}, g = await vt(), B = s.bearer ?? g.bearer, l = s.partnerId ?? g.partnerId, d = s.activeIntegration ?? g.activeIntegration, w = s.transactionOwnerId, C = s.customerToken ?? g.customerToken, E = s.applicationKey ?? g.applicationKey, Q = s.bundleOwnerId;
|
|
184
184
|
try {
|
|
185
185
|
if (window && window.__SENTRY__) {
|
|
186
186
|
const h = window.__SENTRY__.hub;
|
|
@@ -196,17 +196,17 @@ class kt {
|
|
|
196
196
|
return B && (r.Authorization = `Bearer ${B}`), l && (r.partnerId = l), d && (r.activeIntegration = d), w && (r.transactionOwnerId = w), C && (r.customerToken = C), E && (r["X-Application-Key"] = E), Q && (r.bundleOwnerId = Q), {
|
|
197
197
|
headers: r
|
|
198
198
|
};
|
|
199
|
-
}), t = Pt(({ operation:
|
|
200
|
-
const r =
|
|
201
|
-
o && console.log("GraphQL Network error"), r.forEach(() => console.log("GraphQL Error: " +
|
|
199
|
+
}), t = Pt(({ operation: i, graphQLErrors: s, networkError: o }) => {
|
|
200
|
+
const r = s || [];
|
|
201
|
+
o && console.log("GraphQL Network error"), r.forEach(() => console.log("GraphQL Error: " + i.operationName));
|
|
202
202
|
});
|
|
203
203
|
function a() {
|
|
204
204
|
return {
|
|
205
|
-
read(
|
|
206
|
-
return
|
|
205
|
+
read(i = null) {
|
|
206
|
+
return i;
|
|
207
207
|
},
|
|
208
|
-
merge(
|
|
209
|
-
return
|
|
208
|
+
merge(i, s) {
|
|
209
|
+
return s || i || null;
|
|
210
210
|
}
|
|
211
211
|
};
|
|
212
212
|
}
|
|
@@ -362,8 +362,8 @@ const P = new kt(), Jt = M`
|
|
|
362
362
|
ids: c
|
|
363
363
|
}
|
|
364
364
|
})).data.materials, zt = async (c, A, e, t, a) => {
|
|
365
|
-
var
|
|
366
|
-
return (
|
|
365
|
+
var i;
|
|
366
|
+
return (i = (await P.getShadowGraphqlClient().mutate({
|
|
367
367
|
mutation: Ot,
|
|
368
368
|
errorPolicy: "all",
|
|
369
369
|
fetchPolicy: "no-cache",
|
|
@@ -374,16 +374,16 @@ const P = new kt(), Jt = M`
|
|
|
374
374
|
anonymous: t,
|
|
375
375
|
temporary: a
|
|
376
376
|
}
|
|
377
|
-
})).data) == null ? void 0 :
|
|
377
|
+
})).data) == null ? void 0 : i.assetCreate;
|
|
378
378
|
};
|
|
379
379
|
class Kt {
|
|
380
380
|
constructor() {
|
|
381
381
|
this.cache = /* @__PURE__ */ new Map(), this.materialCache = /* @__PURE__ */ new Map(), this.loadImageAsFileInfo = async (A) => {
|
|
382
|
-
const e = await A.arrayBuffer(), t = await pe(e), a = (n,
|
|
383
|
-
const
|
|
384
|
-
for (let r = 0; r <
|
|
385
|
-
o.push(
|
|
386
|
-
return new Blob([new Uint8Array(o)], { type:
|
|
382
|
+
const e = await A.arrayBuffer(), t = await pe(e), a = (n, i) => {
|
|
383
|
+
const s = atob(n.split(",")[1]), o = [];
|
|
384
|
+
for (let r = 0; r < s.length; r++)
|
|
385
|
+
o.push(s.charCodeAt(r));
|
|
386
|
+
return new Blob([new Uint8Array(o)], { type: i });
|
|
387
387
|
};
|
|
388
388
|
return {
|
|
389
389
|
name: A.name.substring(A.name.lastIndexOf("/") + 1),
|
|
@@ -435,18 +435,18 @@ class Kt {
|
|
|
435
435
|
* The asset will be stored via the persistence service for future access, if available.
|
|
436
436
|
*/
|
|
437
437
|
async uploadAssetWithProgress(A, e, t, a, n) {
|
|
438
|
-
const
|
|
439
|
-
if (!
|
|
438
|
+
const i = await this.dispatchCreateAssetRequest(A, e, a, n);
|
|
439
|
+
if (!i)
|
|
440
440
|
throw new Error("Failed to create asset.");
|
|
441
|
-
return await new Promise((
|
|
441
|
+
return await new Promise((s, o) => {
|
|
442
442
|
const r = new XMLHttpRequest();
|
|
443
|
-
r.open("PUT",
|
|
443
|
+
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 = (g) => {
|
|
444
444
|
g.lengthComputable && t(g.loaded * 100 / g.total);
|
|
445
445
|
}, r.onload = () => {
|
|
446
|
-
const g =
|
|
447
|
-
JA.add(
|
|
446
|
+
const g = i.assetResponse.asset;
|
|
447
|
+
JA.add(i.assetResponse.asset), s(g);
|
|
448
448
|
}, r.onerror = o, r.send(A.blob);
|
|
449
|
-
}),
|
|
449
|
+
}), i.assetResponse.asset;
|
|
450
450
|
}
|
|
451
451
|
async uploadFile(A, e) {
|
|
452
452
|
const t = !(A.type === "image/svg+xml" || A.type === "application/pdf"), a = t ? re.Image : re.Illustration;
|
|
@@ -473,10 +473,10 @@ class Kt {
|
|
|
473
473
|
* @param assetType The type of asset we're expecting to upload
|
|
474
474
|
*/
|
|
475
475
|
async dispatchCreateAssetRequest(A, e, t, a) {
|
|
476
|
-
const n = A.blob.type ? A.blob.type : this.guessMIME(A.name),
|
|
477
|
-
if (
|
|
476
|
+
const n = A.blob.type ? A.blob.type : this.guessMIME(A.name), i = await zt(A.name, e, n, t, a);
|
|
477
|
+
if (i)
|
|
478
478
|
return {
|
|
479
|
-
assetResponse:
|
|
479
|
+
assetResponse: i,
|
|
480
480
|
mimeType: n
|
|
481
481
|
};
|
|
482
482
|
}
|
|
@@ -628,12 +628,12 @@ const rA = new jt(), Le = M`
|
|
|
628
628
|
});
|
|
629
629
|
}), A.data.options;
|
|
630
630
|
}, Xt = async (c, A) => (await A).find((t) => t.id === c), qt = async (c) => {
|
|
631
|
-
const A = c.map((
|
|
631
|
+
const A = c.map((i) => rA.get({ id: i })), e = c.filter((i, s) => A[s] === void 0);
|
|
632
632
|
if (e.length === 0)
|
|
633
633
|
return Promise.all(A);
|
|
634
634
|
const t = Wt(e), a = e.map(
|
|
635
|
-
(
|
|
636
|
-
), n = A.filter((
|
|
635
|
+
(i) => rA.set({ id: i }, Xt(i, t))
|
|
636
|
+
), n = A.filter((i) => i !== void 0);
|
|
637
637
|
return await Promise.all(n.concat(a));
|
|
638
638
|
};
|
|
639
639
|
class Zt {
|
|
@@ -666,13 +666,13 @@ class Zt {
|
|
|
666
666
|
var a, n;
|
|
667
667
|
const e = A.thumbnail;
|
|
668
668
|
if (e) {
|
|
669
|
-
const
|
|
670
|
-
return (
|
|
669
|
+
const i = (a = e.versions) == null ? void 0 : a.find((o) => o.name === "thumbnail"), s = e.fileLink;
|
|
670
|
+
return (i == null ? void 0 : i.link) || s;
|
|
671
671
|
}
|
|
672
672
|
const t = A.asset;
|
|
673
673
|
if (t) {
|
|
674
|
-
const
|
|
675
|
-
return (
|
|
674
|
+
const i = (n = t.versions) == null ? void 0 : n.find((o) => o.name === "thumbnail"), s = t.fileLink;
|
|
675
|
+
return (i == null ? void 0 : i.link) || s;
|
|
676
676
|
}
|
|
677
677
|
return A.material ? A.material.id : "";
|
|
678
678
|
}
|
|
@@ -1035,7 +1035,7 @@ const gA = M`
|
|
|
1035
1035
|
id
|
|
1036
1036
|
}
|
|
1037
1037
|
}
|
|
1038
|
-
`,
|
|
1038
|
+
`, ia = M`
|
|
1039
1039
|
mutation UpdateTransactionWorkflowId($id: String!, $workflowId: String!) {
|
|
1040
1040
|
transactionUpdate(id: $id, workflowId: $workflowId) {
|
|
1041
1041
|
id
|
|
@@ -1089,7 +1089,7 @@ const Oe = M`
|
|
|
1089
1089
|
workflowState
|
|
1090
1090
|
}
|
|
1091
1091
|
}
|
|
1092
|
-
`, nA = [f.SilentIllustration, f.ProductOverlay],
|
|
1092
|
+
`, nA = [f.SilentIllustration, f.ProductOverlay], sa = async (c) => {
|
|
1093
1093
|
const A = [];
|
|
1094
1094
|
c.introduction && A.push({
|
|
1095
1095
|
name: "Introduction",
|
|
@@ -1116,7 +1116,7 @@ const Oe = M`
|
|
|
1116
1116
|
silentSteps: nA.includes(t.type) ? [t] : []
|
|
1117
1117
|
});
|
|
1118
1118
|
else {
|
|
1119
|
-
const n = A.find((
|
|
1119
|
+
const n = A.find((i) => i.name === a.name);
|
|
1120
1120
|
n ? nA.includes(t.type) ? n.silentSteps.push(t) : n.renderableSteps.push(t) : A.push({
|
|
1121
1121
|
name: a.name,
|
|
1122
1122
|
title: a.name,
|
|
@@ -1149,7 +1149,7 @@ const Oe = M`
|
|
|
1149
1149
|
if (t && t.selectedVariants) {
|
|
1150
1150
|
const a = t.selectedVariants;
|
|
1151
1151
|
return e.requiredVariantSelections.some(
|
|
1152
|
-
(n) => a.find((
|
|
1152
|
+
(n) => a.find((i) => i.id === n) !== void 0
|
|
1153
1153
|
);
|
|
1154
1154
|
}
|
|
1155
1155
|
return !1;
|
|
@@ -1162,18 +1162,18 @@ const Oe = M`
|
|
|
1162
1162
|
};
|
|
1163
1163
|
return e.silentSteps.length === 0 && e.renderableSteps.length === 0 ? null : e;
|
|
1164
1164
|
}, eA = (c, A) => c.map((e) => ra(e, A)).filter((e) => e !== null), ca = async (c, A, e = !1) => {
|
|
1165
|
-
var
|
|
1165
|
+
var i;
|
|
1166
1166
|
const t = eA(c, A), a = [];
|
|
1167
|
-
for (const
|
|
1168
|
-
for (const o of
|
|
1169
|
-
const r = (((
|
|
1167
|
+
for (const s of t)
|
|
1168
|
+
for (const o of s.renderableSteps) {
|
|
1169
|
+
const r = (((i = o.option) == null ? void 0 : i.variants) || []).length;
|
|
1170
1170
|
o.silent || (o.type === f.Model || o.type === f.Material || o.type === f.Picture || o.type === f.Shape ? (r > 1 || e) && a.push(o.stepName) : a.push(o.stepName));
|
|
1171
1171
|
}
|
|
1172
|
-
const n = t.filter((
|
|
1172
|
+
const n = t.filter((s) => s.renderableSteps.filter(
|
|
1173
1173
|
(r) => a.includes(r.stepName)
|
|
1174
1174
|
).length > 0);
|
|
1175
|
-
for (const
|
|
1176
|
-
|
|
1175
|
+
for (const s of n)
|
|
1176
|
+
s.renderableSteps = s.renderableSteps.filter(
|
|
1177
1177
|
(o) => a.includes(o.stepName)
|
|
1178
1178
|
);
|
|
1179
1179
|
return n;
|
|
@@ -1245,13 +1245,13 @@ class ze {
|
|
|
1245
1245
|
function ga(c, A, e, t) {
|
|
1246
1246
|
const a = e.width * c.zoom, n = e.height * c.zoom;
|
|
1247
1247
|
if (t) {
|
|
1248
|
-
const
|
|
1249
|
-
|
|
1250
|
-
const r = e.width *
|
|
1251
|
-
return
|
|
1248
|
+
const s = c, o = Math.max(A.width / e.width, A.height / e.height);
|
|
1249
|
+
s.zoom = Math.max(o, c.zoom);
|
|
1250
|
+
const r = e.width * s.zoom, g = e.height * s.zoom;
|
|
1251
|
+
return s.x = dA(c.x, A.width - r, 0), s.y = dA(c.y, A.height - g, 0), s;
|
|
1252
1252
|
}
|
|
1253
|
-
const
|
|
1254
|
-
return
|
|
1253
|
+
const i = c;
|
|
1254
|
+
return i.x = dA(i.x, -a, A.width), i.y = dA(i.y, -n, A.height), i;
|
|
1255
1255
|
}
|
|
1256
1256
|
function dA(c, A, e) {
|
|
1257
1257
|
return Math.min(Math.max(c, A), e);
|
|
@@ -1272,12 +1272,12 @@ class la {
|
|
|
1272
1272
|
const a = t;
|
|
1273
1273
|
if (a.currentFrameSources) {
|
|
1274
1274
|
let n = !1;
|
|
1275
|
-
for (let
|
|
1276
|
-
const
|
|
1277
|
-
Ue(o, this.frameData) || (this.frameData || (this.frameData = new Array(a.currentFrameSources.length)), this.frameData[
|
|
1275
|
+
for (let i = 0; i < a.currentFrameSources.length; i++) {
|
|
1276
|
+
const s = a.currentFrameSources[i], o = await ZA(s);
|
|
1277
|
+
Ue(o, this.frameData) || (this.frameData || (this.frameData = new Array(a.currentFrameSources.length)), this.frameData[i] = o, n = !0);
|
|
1278
1278
|
}
|
|
1279
1279
|
n && (this.onFrameDataChangeListeners.forEach(
|
|
1280
|
-
(
|
|
1280
|
+
(i) => i(this.frameData)
|
|
1281
1281
|
), this.frameData && this.imageData && (this.recalculateOffsets(this.imageData), this.updateOffsets(this.offsets), this.recalculateZoomLimits(this.imageData, this.frameData)));
|
|
1282
1282
|
}
|
|
1283
1283
|
}
|
|
@@ -1342,15 +1342,15 @@ class la {
|
|
|
1342
1342
|
setZoom(A, e, t, a) {
|
|
1343
1343
|
if (this.imageData && this.offsets && this.frameData) {
|
|
1344
1344
|
(!this.offsets || this.offsets.length !== this.frameData.length) && (this.offsets = new Array(this.frameData.length));
|
|
1345
|
-
const n = this.frameData.map((
|
|
1346
|
-
const o = (e[
|
|
1345
|
+
const n = this.frameData.map((i, s) => {
|
|
1346
|
+
const o = (e[s] - this.offsets[s].x) / this.offsets[s].zoom, r = (t[s] - this.offsets[s].y) / this.offsets[s].zoom, g = e[s] - o * A[s], B = t[s] - r * A[s];
|
|
1347
1347
|
return {
|
|
1348
1348
|
x: g,
|
|
1349
1349
|
y: B,
|
|
1350
|
-
zoom: this.imageData.width * A[
|
|
1350
|
+
zoom: this.imageData.width * A[s] / this.imageData.width
|
|
1351
1351
|
};
|
|
1352
1352
|
});
|
|
1353
|
-
this.updateOffsets(n, a), this.onZoomChangeListeners.forEach((
|
|
1353
|
+
this.updateOffsets(n, a), this.onZoomChangeListeners.forEach((i) => i(A));
|
|
1354
1354
|
}
|
|
1355
1355
|
}
|
|
1356
1356
|
/**
|
|
@@ -1374,12 +1374,12 @@ class la {
|
|
|
1374
1374
|
throw new v(
|
|
1375
1375
|
"Frame data and offsets are not the same length. This is a bug. Please report it."
|
|
1376
1376
|
);
|
|
1377
|
-
if (!this.offsets.some((
|
|
1377
|
+
if (!this.offsets.some((i, s) => !(A[s].x === i.x && A[s].y === i.y && A[s].zoom === i.zoom)) && !t) {
|
|
1378
1378
|
e && e();
|
|
1379
1379
|
return;
|
|
1380
1380
|
}
|
|
1381
|
-
(!this.offsets || this.offsets.length !== this.frameData.length) && (this.offsets = new Array(this.frameData.length)), this.frameData.forEach((
|
|
1382
|
-
this.offsets[
|
|
1381
|
+
(!this.offsets || this.offsets.length !== this.frameData.length) && (this.offsets = new Array(this.frameData.length)), this.frameData.forEach((i, s) => {
|
|
1382
|
+
this.offsets[s] = ga(A[s], i, this.imageData, this.forceImageCover);
|
|
1383
1383
|
}), this._debouncedUpdateFrameOffsets(this.offsets, a, this.frameData, this.thresholdSettings, this.targetElements, e);
|
|
1384
1384
|
}
|
|
1385
1385
|
getThresholdSettings() {
|
|
@@ -1407,14 +1407,14 @@ class la {
|
|
|
1407
1407
|
* @param targetElements A list of elements that need updating, by ID
|
|
1408
1408
|
* @param onComplete A callback when the operation is completed.
|
|
1409
1409
|
*/
|
|
1410
|
-
updateFrameOffsets(A, e, t, a, n,
|
|
1410
|
+
updateFrameOffsets(A, e, t, a, n, i) {
|
|
1411
1411
|
if (!t || t.length === 0 || t.some((o) => !o))
|
|
1412
1412
|
throw new v("Frame data not set. This is a bug");
|
|
1413
1413
|
if (!this.workflowManager)
|
|
1414
1414
|
throw new v("No workflow manager set, cannot update offsets.");
|
|
1415
|
-
const
|
|
1415
|
+
const s = this.workflowManager.getCommandDispatcher();
|
|
1416
1416
|
n.forEach((o, r) => {
|
|
1417
|
-
|
|
1417
|
+
s(
|
|
1418
1418
|
new R([
|
|
1419
1419
|
new De(o, e, A[r]),
|
|
1420
1420
|
new wt(o, a.useThreshold, a.invertThreshold, a.threshold, a.thresholdSaturation)
|
|
@@ -1422,7 +1422,7 @@ class la {
|
|
|
1422
1422
|
);
|
|
1423
1423
|
}), this.stepName && this.workflowManager.updateStorage(this.stepName, {
|
|
1424
1424
|
frameOffsetsList: A
|
|
1425
|
-
}),
|
|
1425
|
+
}), i && i();
|
|
1426
1426
|
}
|
|
1427
1427
|
/**
|
|
1428
1428
|
* Determines limitations of zoom based on relative size of image and frame.
|
|
@@ -1448,14 +1448,14 @@ class Ce {
|
|
|
1448
1448
|
const n = this.layouts.find((l) => l.panelId === a.panelId);
|
|
1449
1449
|
if (!n)
|
|
1450
1450
|
throw new O(a);
|
|
1451
|
-
let
|
|
1451
|
+
let i = "";
|
|
1452
1452
|
if (this.configuration.type === f.ProductOverlay) {
|
|
1453
1453
|
let l = "";
|
|
1454
|
-
if ((o = this.product) != null && o.overlayImageUrl && (l = this.product.overlayImageUrl),
|
|
1454
|
+
if ((o = this.product) != null && o.overlayImageUrl && (l = this.product.overlayImageUrl), i = l, !l)
|
|
1455
1455
|
throw new MA(this.configuration, "Couldn't find an asset for product overlay step");
|
|
1456
1456
|
}
|
|
1457
|
-
const
|
|
1458
|
-
if (
|
|
1457
|
+
const s = this.evaluateAssetType();
|
|
1458
|
+
if (s === U.Image) {
|
|
1459
1459
|
const l = this.configuration.type === f.SilentIllustration ? (r = this.configuration.data.asset) == null ? void 0 : r.fileLink : (g = this.product) == null ? void 0 : g.overlayImageUrl;
|
|
1460
1460
|
if (!l)
|
|
1461
1461
|
throw new Error("Undefined raster silent step source");
|
|
@@ -1463,7 +1463,7 @@ class Ce {
|
|
|
1463
1463
|
stepName: this.configuration.stepName,
|
|
1464
1464
|
id: k(),
|
|
1465
1465
|
src: l,
|
|
1466
|
-
type:
|
|
1466
|
+
type: s,
|
|
1467
1467
|
y: a.top,
|
|
1468
1468
|
x: a.left,
|
|
1469
1469
|
width: a.width,
|
|
@@ -1484,7 +1484,7 @@ class Ce {
|
|
|
1484
1484
|
command: new b(d, n)
|
|
1485
1485
|
};
|
|
1486
1486
|
} else {
|
|
1487
|
-
const l = this.configuration.type === f.SilentIllustration ? (B = this.configuration.data.asset) == null ? void 0 : B.fileLink :
|
|
1487
|
+
const l = this.configuration.type === f.SilentIllustration ? (B = this.configuration.data.asset) == null ? void 0 : B.fileLink : i, w = await fe(await (async () => new Promise((E, Q) => {
|
|
1488
1488
|
if (!l) {
|
|
1489
1489
|
Q("Undefined vector silent step source");
|
|
1490
1490
|
return;
|
|
@@ -1499,7 +1499,7 @@ class Ce {
|
|
|
1499
1499
|
src: l,
|
|
1500
1500
|
svg: w.svg,
|
|
1501
1501
|
colors: w.colors,
|
|
1502
|
-
type:
|
|
1502
|
+
type: s,
|
|
1503
1503
|
y: a.top,
|
|
1504
1504
|
x: a.left,
|
|
1505
1505
|
width: a.width,
|
|
@@ -1597,7 +1597,7 @@ class da {
|
|
|
1597
1597
|
});
|
|
1598
1598
|
});
|
|
1599
1599
|
}
|
|
1600
|
-
async regenerateQRCode(A, e, t, a, n,
|
|
1600
|
+
async regenerateQRCode(A, e, t, a, n, i, s, o, r) {
|
|
1601
1601
|
if (!e && t !== "" && a === "") {
|
|
1602
1602
|
const g = async () => {
|
|
1603
1603
|
var u, D;
|
|
@@ -1623,17 +1623,17 @@ class da {
|
|
|
1623
1623
|
);
|
|
1624
1624
|
});
|
|
1625
1625
|
A.forEach((h) => o(new Z(h.id)));
|
|
1626
|
-
const l =
|
|
1626
|
+
const l = i.data.baseUrl.slice(0, 4) === "http" ? "" : "https://", d = new URL(l + i.data.baseUrl);
|
|
1627
1627
|
d.searchParams.append("video", btoa(JSON.stringify([B]))), d.pathname = d.pathname + (d.pathname.slice(-1) === "/" ? "" : "/");
|
|
1628
1628
|
const w = d.toString();
|
|
1629
1629
|
if (w.length >= 2e3)
|
|
1630
1630
|
throw new UA("Cannot create QR code, URL too long.");
|
|
1631
1631
|
const C = await Ba(w);
|
|
1632
|
-
if (
|
|
1633
|
-
throw new MA(
|
|
1634
|
-
const E = await this.regionElements(
|
|
1635
|
-
Q && (Q.command && n.getCommandDispatcher()(Q.command), Q.followup && await Q.followup()), await n.setSelectionsAndElements(
|
|
1636
|
-
n.updateStorage(
|
|
1632
|
+
if (s(C), !i.data || !i.data.regions)
|
|
1633
|
+
throw new MA(i, "Missing regions.");
|
|
1634
|
+
const E = await this.regionElements(i), Q = await this.command(C, E, n, i.stepName);
|
|
1635
|
+
Q && (Q.command && n.getCommandDispatcher()(Q.command), Q.followup && await Q.followup()), await n.setSelectionsAndElements(i.stepName, [], E, async () => {
|
|
1636
|
+
n.updateStorage(i.stepName, {
|
|
1637
1637
|
videoShortUrl: C,
|
|
1638
1638
|
videoUrl: a
|
|
1639
1639
|
}), r(!1);
|
|
@@ -1646,7 +1646,7 @@ class da {
|
|
|
1646
1646
|
return A.data.regions.map(e);
|
|
1647
1647
|
}
|
|
1648
1648
|
async command(A, e, t, a) {
|
|
1649
|
-
const n = t.getLayouts(),
|
|
1649
|
+
const n = t.getLayouts(), s = `data:image/svg+xml;base64,${btoa(await Ge(A, { type: "svg" }))}`, o = e.map((r) => {
|
|
1650
1650
|
const g = r.region, B = n.find((l) => l.panelId === (g == null ? void 0 : g.panelId));
|
|
1651
1651
|
if (!B && g)
|
|
1652
1652
|
throw new O(g);
|
|
@@ -1659,7 +1659,7 @@ class da {
|
|
|
1659
1659
|
stepRegion: g,
|
|
1660
1660
|
stepName: a,
|
|
1661
1661
|
id: r.id,
|
|
1662
|
-
src:
|
|
1662
|
+
src: s,
|
|
1663
1663
|
type: U.Image,
|
|
1664
1664
|
y: g.top,
|
|
1665
1665
|
x: g.left,
|
|
@@ -1772,8 +1772,8 @@ class Ea {
|
|
|
1772
1772
|
new Ke(
|
|
1773
1773
|
async () => {
|
|
1774
1774
|
var o;
|
|
1775
|
-
const
|
|
1776
|
-
return
|
|
1775
|
+
const i = (o = (await L.getLocalOrFromServer(e.key || "")).versions) == null ? void 0 : o.find((r) => r.name === "svg");
|
|
1776
|
+
return i ? (await fetch(i.link)).status === 200 : !1;
|
|
1777
1777
|
},
|
|
1778
1778
|
() => {
|
|
1779
1779
|
L.getLocalOrFromServer(e.key || "").then((n) => {
|
|
@@ -1787,14 +1787,14 @@ class Ea {
|
|
|
1787
1787
|
) : this.loadPatternFromAsset(e, A, t);
|
|
1788
1788
|
}
|
|
1789
1789
|
async selectVariant(A, e, t, a, n) {
|
|
1790
|
-
const
|
|
1790
|
+
const i = await this.selectVariantCommand(
|
|
1791
1791
|
A,
|
|
1792
1792
|
e,
|
|
1793
1793
|
t,
|
|
1794
1794
|
a,
|
|
1795
1795
|
n
|
|
1796
1796
|
);
|
|
1797
|
-
|
|
1797
|
+
i && (i.command && a.getCommandDispatcher()(i.command), i.followup && await i.followup());
|
|
1798
1798
|
}
|
|
1799
1799
|
getCreateElementCommand(A, e, t, a) {
|
|
1800
1800
|
return new b(
|
|
@@ -1827,13 +1827,13 @@ class Ea {
|
|
|
1827
1827
|
}
|
|
1828
1828
|
async loadPatternFromString(A, e) {
|
|
1829
1829
|
if (A.endsWith("svg")) {
|
|
1830
|
-
const t = await Et(A), a = t.width, n = t.height,
|
|
1830
|
+
const t = await Et(A), a = t.width, n = t.height, i = {
|
|
1831
1831
|
src: A,
|
|
1832
1832
|
width: a,
|
|
1833
1833
|
height: n,
|
|
1834
1834
|
aspect: a / n
|
|
1835
1835
|
};
|
|
1836
|
-
ge.set(A,
|
|
1836
|
+
ge.set(A, i), e.setPatternData(i);
|
|
1837
1837
|
} else {
|
|
1838
1838
|
const t = await ht(A, !0), a = await pe(t), n = {
|
|
1839
1839
|
src: A,
|
|
@@ -1844,10 +1844,10 @@ class Ea {
|
|
|
1844
1844
|
ge.set(A, n), e.setPatternData(n);
|
|
1845
1845
|
}
|
|
1846
1846
|
}
|
|
1847
|
-
async selectVariantCommand(A, e, t, a, n,
|
|
1847
|
+
async selectVariantCommand(A, e, t, a, n, i) {
|
|
1848
1848
|
var l;
|
|
1849
|
-
const
|
|
1850
|
-
if (!
|
|
1849
|
+
const s = (l = a.getStepSpecificServices(A.stepName)) == null ? void 0 : l.frameService;
|
|
1850
|
+
if (!s)
|
|
1851
1851
|
throw new Error("Frame service unavailable, cannot load pattern!");
|
|
1852
1852
|
const o = await Promise.all(
|
|
1853
1853
|
A.data.regions.map((d) => this.frameSourceSvg(e, d))
|
|
@@ -1855,7 +1855,7 @@ class Ea {
|
|
|
1855
1855
|
n && n(!0);
|
|
1856
1856
|
const r = await Promise.all(
|
|
1857
1857
|
A.data.regions.map(async (d, w) => {
|
|
1858
|
-
const C = await ZA(o[w]), E =
|
|
1858
|
+
const C = await ZA(o[w]), E = s.getImageData(), Q = t.map((I) => new Z(I.id)), h = E ? $A(E, C) : void 0, m = E ? {
|
|
1859
1859
|
id: k(),
|
|
1860
1860
|
src: E.src,
|
|
1861
1861
|
x: (h == null ? void 0 : h.x) || 0,
|
|
@@ -1895,13 +1895,13 @@ class Ea {
|
|
|
1895
1895
|
[...r.map((d) => d.regionEl)],
|
|
1896
1896
|
async () => {
|
|
1897
1897
|
var d;
|
|
1898
|
-
if (a.updateStorage(A.stepName, { currentFrameSources: o }),
|
|
1898
|
+
if (a.updateStorage(A.stepName, { currentFrameSources: o }), i) {
|
|
1899
1899
|
const w = (d = a.getStepSpecificServices(
|
|
1900
1900
|
A.stepName
|
|
1901
1901
|
)) == null ? void 0 : d.frameService;
|
|
1902
1902
|
if (!w)
|
|
1903
1903
|
throw new Error("Frame service unavailable, cannot load pattern!");
|
|
1904
|
-
await this.loadPatternFromString(
|
|
1904
|
+
await this.loadPatternFromString(i, w);
|
|
1905
1905
|
}
|
|
1906
1906
|
}
|
|
1907
1907
|
);
|
|
@@ -1922,11 +1922,11 @@ class Ea {
|
|
|
1922
1922
|
throw new oA(A);
|
|
1923
1923
|
}
|
|
1924
1924
|
async loadPatternFromAsset(A, e, t) {
|
|
1925
|
-
var
|
|
1926
|
-
const a = this.patternSource(A), n = t.markUpdatePending(),
|
|
1927
|
-
if (!
|
|
1925
|
+
var s;
|
|
1926
|
+
const a = this.patternSource(A), n = t.markUpdatePending(), i = (s = t.getStepSpecificServices(e.stepName)) == null ? void 0 : s.frameService;
|
|
1927
|
+
if (!i)
|
|
1928
1928
|
throw new Error("Frame service unavailable, cannot load pattern!");
|
|
1929
|
-
await this.loadPatternFromString(a,
|
|
1929
|
+
await this.loadPatternFromString(a, i), t.updateMetadata(e.stepName, { image: a }), t.updateStorage(e.stepName, {
|
|
1930
1930
|
framePatternSrc: a
|
|
1931
1931
|
}), t.markUpdateCompleted(n);
|
|
1932
1932
|
}
|
|
@@ -1995,13 +1995,13 @@ class ha {
|
|
|
1995
1995
|
const a = e.getSerializedStep(
|
|
1996
1996
|
A.stepName,
|
|
1997
1997
|
t.serializableWorkflow.steps
|
|
1998
|
-
),
|
|
1998
|
+
), s = Object.values(t.layouts).map((g) => g.elements).flat().filter((g) => g.stepName === A.stepName), o = A.option;
|
|
1999
1999
|
if (a != null && a.selectedVariants) {
|
|
2000
2000
|
const g = a.selectedVariants[0].id;
|
|
2001
2001
|
if (o && g) {
|
|
2002
2002
|
const B = (r = o.variants) == null ? void 0 : r.find((l) => l.id === g);
|
|
2003
2003
|
if (B) {
|
|
2004
|
-
const l =
|
|
2004
|
+
const l = s.map((d) => ({ id: d.id, region: d.stepRegion }));
|
|
2005
2005
|
await e.setSelectionsAndElements(
|
|
2006
2006
|
A.stepName,
|
|
2007
2007
|
[B],
|
|
@@ -2030,14 +2030,14 @@ class ha {
|
|
|
2030
2030
|
}
|
|
2031
2031
|
async changeColorsCommand(A, e, t, a, n) {
|
|
2032
2032
|
var g;
|
|
2033
|
-
const
|
|
2033
|
+
const i = {};
|
|
2034
2034
|
for (const [B, l] of n.entries())
|
|
2035
|
-
|
|
2036
|
-
const
|
|
2035
|
+
i[B] = { browserValue: l, spotColor: (g = i[B]) == null ? void 0 : g.spotColor };
|
|
2036
|
+
const s = Ct(A, e, t, i), o = await pA(s), r = [];
|
|
2037
2037
|
for (const B of a) {
|
|
2038
2038
|
for (const [l, d] of n.entries())
|
|
2039
2039
|
r.push(new TA(B, l, d));
|
|
2040
|
-
r.push(new Qt(B,
|
|
2040
|
+
r.push(new Qt(B, s, o));
|
|
2041
2041
|
}
|
|
2042
2042
|
return new R(r);
|
|
2043
2043
|
}
|
|
@@ -2045,17 +2045,17 @@ class ha {
|
|
|
2045
2045
|
var d, w;
|
|
2046
2046
|
if (e.length === 0)
|
|
2047
2047
|
return;
|
|
2048
|
-
const
|
|
2048
|
+
const i = DA(
|
|
2049
2049
|
e[0].id,
|
|
2050
2050
|
a().map((C) => C.layoutState)
|
|
2051
|
-
),
|
|
2052
|
-
Object.entries(
|
|
2051
|
+
), s = { ...i.colors }, o = {};
|
|
2052
|
+
Object.entries(s).forEach(([C, E]) => {
|
|
2053
2053
|
const Q = { browserValue: E.browserValue }, h = E.spotColor;
|
|
2054
2054
|
h && (Q.spotColor = { profileName: h.profileName, namedColor: h.namedColor }), o[C] = Q;
|
|
2055
2055
|
});
|
|
2056
2056
|
for (const [C, E] of n.entries())
|
|
2057
|
-
|
|
2058
|
-
let r = Array.from(Object.values(
|
|
2057
|
+
s[C] = { browserValue: E, spotColor: (d = s[C]) == null ? void 0 : d.spotColor }, o[C] = { browserValue: E };
|
|
2058
|
+
let r = Array.from(Object.values(s)).map((C) => C.browserValue);
|
|
2059
2059
|
const g = A.data.colorOption;
|
|
2060
2060
|
g && ((w = g.variants) == null || w.forEach((C) => {
|
|
2061
2061
|
r = r.map((E) => {
|
|
@@ -2064,14 +2064,14 @@ class ha {
|
|
|
2064
2064
|
});
|
|
2065
2065
|
})), t.updateMetadata(A.stepName, { colors: r });
|
|
2066
2066
|
const B = /* @__PURE__ */ new Map();
|
|
2067
|
-
if (Object.entries(
|
|
2067
|
+
if (Object.entries(s).forEach(([C, E]) => {
|
|
2068
2068
|
B.set(C, E.browserValue);
|
|
2069
|
-
}), !
|
|
2069
|
+
}), !i.svg)
|
|
2070
2070
|
throw new Error("Colors changed before SVG loaded. This should never happen!");
|
|
2071
2071
|
const l = await this.changeColorsCommand(
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2072
|
+
i.svg,
|
|
2073
|
+
i.width,
|
|
2074
|
+
i.height,
|
|
2075
2075
|
e.map((C) => C.id),
|
|
2076
2076
|
B
|
|
2077
2077
|
);
|
|
@@ -2080,22 +2080,22 @@ class ha {
|
|
|
2080
2080
|
}), t.getCommandDispatcher()(l);
|
|
2081
2081
|
}
|
|
2082
2082
|
async selectVariant(A, e, t, a, n) {
|
|
2083
|
-
const
|
|
2084
|
-
|
|
2083
|
+
const i = await this.selectVariantCommand(A, e, t, a, n);
|
|
2084
|
+
i && (i.command && n.getCommandDispatcher()(i.command), i.followup && await i.followup());
|
|
2085
2085
|
}
|
|
2086
2086
|
async selectVariantCommand(A, e, t, a, n) {
|
|
2087
2087
|
var Q;
|
|
2088
2088
|
if (!A.data || !A.data.regions)
|
|
2089
2089
|
throw new MA(A, "Missing regions.");
|
|
2090
2090
|
a(!0);
|
|
2091
|
-
const
|
|
2091
|
+
const i = t.map((h) => new Z(h.id));
|
|
2092
2092
|
n.setMandatoryFulfilled(A.stepName, !1);
|
|
2093
|
-
const
|
|
2094
|
-
if (!
|
|
2093
|
+
const s = e.asset;
|
|
2094
|
+
if (!s)
|
|
2095
2095
|
throw new $(e);
|
|
2096
|
-
const o =
|
|
2096
|
+
const o = s.fileLink;
|
|
2097
2097
|
if (!o)
|
|
2098
|
-
throw new oA(
|
|
2098
|
+
throw new oA(s);
|
|
2099
2099
|
const r = await fe(await this.getIllustrationBody(o)), g = await pA(r.svg), B = (h) => {
|
|
2100
2100
|
const m = n.getLayouts().find((D) => D.panelId === h.panelId);
|
|
2101
2101
|
if (!m)
|
|
@@ -2110,7 +2110,7 @@ class ha {
|
|
|
2110
2110
|
svg: r
|
|
2111
2111
|
})
|
|
2112
2112
|
};
|
|
2113
|
-
}, l = A.data.regions.map(B), w = [...l.map((h) => h.command), ...
|
|
2113
|
+
}, l = A.data.regions.map(B), w = [...l.map((h) => h.command), ...i];
|
|
2114
2114
|
let C = Array.from(Object.values(r.colors)).map((h) => h.browserValue);
|
|
2115
2115
|
const E = A.data.colorOption;
|
|
2116
2116
|
return E && ((Q = E.variants) == null || Q.forEach((h) => {
|
|
@@ -2165,7 +2165,7 @@ class Ca {
|
|
|
2165
2165
|
const a = e.getSerializedStep(
|
|
2166
2166
|
A.stepName,
|
|
2167
2167
|
t.serializableWorkflow.steps
|
|
2168
|
-
),
|
|
2168
|
+
), s = Object.values(t.layouts).map((g) => g.elements).flat().filter((g) => g.stepName === A.stepName), o = A.option;
|
|
2169
2169
|
if (!o)
|
|
2170
2170
|
throw new FA(A);
|
|
2171
2171
|
if (a != null && a.selectedVariants) {
|
|
@@ -2173,7 +2173,7 @@ class Ca {
|
|
|
2173
2173
|
if (g) {
|
|
2174
2174
|
const B = (r = o.variants) == null ? void 0 : r.find((l) => l.id === g);
|
|
2175
2175
|
if (B) {
|
|
2176
|
-
const l = B.material, d =
|
|
2176
|
+
const l = B.material, d = s.map((w) => ({ id: w.id, region: w.stepRegion }));
|
|
2177
2177
|
await e.setSelectionsAndElements(
|
|
2178
2178
|
A.stepName,
|
|
2179
2179
|
[B],
|
|
@@ -2199,16 +2199,16 @@ class Ca {
|
|
|
2199
2199
|
async selectVariantLambda(A, e, t, a) {
|
|
2200
2200
|
const n = t.getModelContainer();
|
|
2201
2201
|
a(!0);
|
|
2202
|
-
const
|
|
2203
|
-
if (!
|
|
2202
|
+
const i = e.material;
|
|
2203
|
+
if (!i)
|
|
2204
2204
|
throw a(!1), new $(e);
|
|
2205
2205
|
return {
|
|
2206
2206
|
command: void 0,
|
|
2207
2207
|
followup: async () => {
|
|
2208
2208
|
await t.setSelectionsAndElements(A.stepName, [e], [], async () => {
|
|
2209
2209
|
try {
|
|
2210
|
-
n && A.data.targetMaterials.forEach((
|
|
2211
|
-
A.option && n.applyMaterialVariant(
|
|
2210
|
+
n && A.data.targetMaterials.forEach((s) => {
|
|
2211
|
+
A.option && n.applyMaterialVariant(s, A.option.id || "", i);
|
|
2212
2212
|
}), t.setMandatoryFulfilled(A.stepName, !0);
|
|
2213
2213
|
} finally {
|
|
2214
2214
|
a(!1);
|
|
@@ -2239,13 +2239,13 @@ class Qa {
|
|
|
2239
2239
|
const a = e.getSerializedStep(
|
|
2240
2240
|
A.stepName,
|
|
2241
2241
|
t.serializableWorkflow.steps
|
|
2242
|
-
),
|
|
2242
|
+
), s = Object.values(t.layouts).map((g) => g.elements).flat().filter((g) => g.stepName === A.stepName), o = A.option;
|
|
2243
2243
|
if (a != null && a.selectedVariants) {
|
|
2244
2244
|
const g = a.selectedVariants[0].id;
|
|
2245
2245
|
if (o && g) {
|
|
2246
2246
|
const B = (r = o.variants) == null ? void 0 : r.find((l) => l.id === g);
|
|
2247
2247
|
if (B) {
|
|
2248
|
-
const l =
|
|
2248
|
+
const l = s.map((d) => ({ id: d.id, region: d.stepRegion }));
|
|
2249
2249
|
await e.setSelectionsAndElements(
|
|
2250
2250
|
A.stepName,
|
|
2251
2251
|
[B],
|
|
@@ -2277,9 +2277,9 @@ class Qa {
|
|
|
2277
2277
|
n && (n.command && t.getCommandDispatcher()(n.command), n.followup && await n.followup());
|
|
2278
2278
|
}
|
|
2279
2279
|
async selectVariantLambda(A, e, t, a) {
|
|
2280
|
-
var
|
|
2280
|
+
var i;
|
|
2281
2281
|
a(!0);
|
|
2282
|
-
const n = (
|
|
2282
|
+
const n = (i = e.asset) == null ? void 0 : i.fileLink;
|
|
2283
2283
|
if (!n)
|
|
2284
2284
|
throw new $(e);
|
|
2285
2285
|
return {
|
|
@@ -2287,8 +2287,8 @@ class Qa {
|
|
|
2287
2287
|
followup: async () => {
|
|
2288
2288
|
await t.setSelectionsAndElements(A.stepName, [e], [], async () => {
|
|
2289
2289
|
try {
|
|
2290
|
-
const
|
|
2291
|
-
|
|
2290
|
+
const s = t.getModelContainer();
|
|
2291
|
+
s && await s.applyModelVariant(
|
|
2292
2292
|
A.stepName,
|
|
2293
2293
|
{
|
|
2294
2294
|
model: n,
|
|
@@ -2325,13 +2325,13 @@ class ua {
|
|
|
2325
2325
|
});
|
|
2326
2326
|
}
|
|
2327
2327
|
async changeText(A, e, t, a, n) {
|
|
2328
|
-
const
|
|
2329
|
-
|
|
2328
|
+
const i = await this.changeTextCommand(A, e, t, a, n);
|
|
2329
|
+
i && (i.command && t.getCommandDispatcher()(i.command), i.followup && await i.followup());
|
|
2330
2330
|
}
|
|
2331
2331
|
async changeTextCommand(A, e, t, a, n) {
|
|
2332
2332
|
var g;
|
|
2333
|
-
const
|
|
2334
|
-
if (!
|
|
2333
|
+
const i = t.getRegionElements(A.stepName), s = (g = t.getStepSpecificServices(A.stepName)) == null ? void 0 : g.module;
|
|
2334
|
+
if (!s)
|
|
2335
2335
|
return console.error("Missing module."), null;
|
|
2336
2336
|
const o = t.getProfanities();
|
|
2337
2337
|
if (!this.validateInput(A, e, o, n))
|
|
@@ -2370,11 +2370,11 @@ class ua {
|
|
|
2370
2370
|
command: new R(Q)
|
|
2371
2371
|
};
|
|
2372
2372
|
};
|
|
2373
|
-
if (
|
|
2374
|
-
const l =
|
|
2373
|
+
if (i.length > 0) {
|
|
2374
|
+
const l = i.map((d) => {
|
|
2375
2375
|
if (!d.region)
|
|
2376
2376
|
return null;
|
|
2377
|
-
const w =
|
|
2377
|
+
const w = s.svgPrint(e, d.region);
|
|
2378
2378
|
return r(w, d.region, d.id);
|
|
2379
2379
|
}).filter((d) => !!d).filter((d) => !!d).map((d) => d && d.command);
|
|
2380
2380
|
return {
|
|
@@ -2384,7 +2384,7 @@ class ua {
|
|
|
2384
2384
|
};
|
|
2385
2385
|
} else {
|
|
2386
2386
|
const B = A.data.regions.map(
|
|
2387
|
-
(d) => r(
|
|
2387
|
+
(d) => r(s.svgPrint(e, d), d)
|
|
2388
2388
|
), l = B.filter((d) => !!d).map((d) => d && d.command);
|
|
2389
2389
|
return {
|
|
2390
2390
|
command: new R(l),
|
|
@@ -2401,17 +2401,17 @@ class ua {
|
|
|
2401
2401
|
}
|
|
2402
2402
|
validateInput(A, e, t, a) {
|
|
2403
2403
|
if (A.data && A.data.maxLength) {
|
|
2404
|
-
const
|
|
2405
|
-
if (e.length >
|
|
2404
|
+
const i = A.data.maxLength;
|
|
2405
|
+
if (e.length > i)
|
|
2406
2406
|
return a("Too many characters."), !1;
|
|
2407
2407
|
}
|
|
2408
2408
|
if (!/^$|^[a-zA-Z0-9 ]+$/.test(e))
|
|
2409
2409
|
return a("Unsupported characters."), !1;
|
|
2410
2410
|
const n = jA(e.toLowerCase());
|
|
2411
|
-
for (const
|
|
2412
|
-
for (const
|
|
2413
|
-
const o = t[
|
|
2414
|
-
if (
|
|
2411
|
+
for (const i of n)
|
|
2412
|
+
for (const s in t) {
|
|
2413
|
+
const o = t[s].toLowerCase().replace(/\s/g, "");
|
|
2414
|
+
if (i === o)
|
|
2415
2415
|
return a("Blocked profanity."), !1;
|
|
2416
2416
|
}
|
|
2417
2417
|
return a(""), !0;
|
|
@@ -2435,13 +2435,13 @@ class Ia {
|
|
|
2435
2435
|
const a = e.getSerializedStep(
|
|
2436
2436
|
A.stepName,
|
|
2437
2437
|
t.serializableWorkflow.steps
|
|
2438
|
-
),
|
|
2438
|
+
), s = Object.values(t.layouts).map((g) => g.elements).flat().filter((g) => g.stepName === A.stepName), o = A.option;
|
|
2439
2439
|
if (a != null && a.selectedVariants) {
|
|
2440
2440
|
const g = a.selectedVariants[0].id;
|
|
2441
2441
|
if (o && g) {
|
|
2442
2442
|
const B = (r = o.variants) == null ? void 0 : r.find((l) => l.id === g);
|
|
2443
2443
|
if (B) {
|
|
2444
|
-
const l =
|
|
2444
|
+
const l = s.map((d) => ({ id: d.id, region: d.stepRegion }));
|
|
2445
2445
|
await e.setSelectionsAndElements(
|
|
2446
2446
|
A.stepName,
|
|
2447
2447
|
[B],
|
|
@@ -2462,8 +2462,8 @@ class Ia {
|
|
|
2462
2462
|
const n = e.asset;
|
|
2463
2463
|
if (!n)
|
|
2464
2464
|
throw new $(e);
|
|
2465
|
-
const
|
|
2466
|
-
if (!
|
|
2465
|
+
const i = n == null ? void 0 : n.fileLink;
|
|
2466
|
+
if (!i)
|
|
2467
2467
|
return console.error("No URL for picture!"), null;
|
|
2468
2468
|
a(!0), t.setMandatoryFulfilled(A.stepName, !1);
|
|
2469
2469
|
const o = t.getRegionElements(A.stepName).map((B) => new Z(B.id)), r = (B) => {
|
|
@@ -2478,7 +2478,7 @@ class Ia {
|
|
|
2478
2478
|
stepName: A.stepName,
|
|
2479
2479
|
stepRegion: B,
|
|
2480
2480
|
id: w,
|
|
2481
|
-
src:
|
|
2481
|
+
src: i,
|
|
2482
2482
|
type: U.Image,
|
|
2483
2483
|
y: B.top,
|
|
2484
2484
|
x: B.left,
|
|
@@ -2520,25 +2520,25 @@ class pa {
|
|
|
2520
2520
|
else {
|
|
2521
2521
|
const n = a.variants;
|
|
2522
2522
|
if (K.getDefaultVariant(a)) {
|
|
2523
|
-
const
|
|
2523
|
+
const s = n == null ? void 0 : n.find((o) => {
|
|
2524
2524
|
var r;
|
|
2525
2525
|
return o.id === ((r = a.defaultVariant) == null ? void 0 : r.id);
|
|
2526
2526
|
});
|
|
2527
|
-
return this.selectVariantLambda(A, (
|
|
2527
|
+
return this.selectVariantLambda(A, (s == null ? void 0 : s.id) || "", e);
|
|
2528
2528
|
}
|
|
2529
2529
|
}
|
|
2530
2530
|
return null;
|
|
2531
2531
|
}
|
|
2532
2532
|
async reload(A, e, t) {
|
|
2533
|
-
var
|
|
2533
|
+
var i;
|
|
2534
2534
|
const a = e.getSerializedStep(
|
|
2535
2535
|
A.stepName,
|
|
2536
2536
|
t.serializableWorkflow.steps
|
|
2537
2537
|
), n = A.option;
|
|
2538
2538
|
if (a != null && a.selectedVariants) {
|
|
2539
|
-
const
|
|
2540
|
-
if (n &&
|
|
2541
|
-
const o = (
|
|
2539
|
+
const s = a.selectedVariants[0].id;
|
|
2540
|
+
if (n && s) {
|
|
2541
|
+
const o = (i = n.variants) == null ? void 0 : i.find((r) => r.id === s);
|
|
2542
2542
|
o && await e.setSelectionsAndElements(A.stepName, [o], []);
|
|
2543
2543
|
}
|
|
2544
2544
|
}
|
|
@@ -2555,13 +2555,13 @@ class pa {
|
|
|
2555
2555
|
const n = a.variants;
|
|
2556
2556
|
if (!n)
|
|
2557
2557
|
return null;
|
|
2558
|
-
const
|
|
2559
|
-
if (!
|
|
2558
|
+
const i = n.length > 1 ? n.find((s) => s.id === e) : n[0];
|
|
2559
|
+
if (!i)
|
|
2560
2560
|
throw new Error("Failed to find selected variant in step variants, this should never happen!");
|
|
2561
2561
|
return {
|
|
2562
2562
|
command: void 0,
|
|
2563
2563
|
followup: async () => {
|
|
2564
|
-
await t.setSelectionsAndElements(A.stepName, [
|
|
2564
|
+
await t.setSelectionsAndElements(A.stepName, [i], [], async () => {
|
|
2565
2565
|
t.setMandatoryFulfilled(A.stepName, !0);
|
|
2566
2566
|
});
|
|
2567
2567
|
}
|
|
@@ -2584,13 +2584,13 @@ class Da {
|
|
|
2584
2584
|
}))) || [] : [];
|
|
2585
2585
|
}
|
|
2586
2586
|
setCustomColor(A, e, t) {
|
|
2587
|
-
const a = t.getLayouts(),
|
|
2588
|
-
const o =
|
|
2587
|
+
const a = t.getLayouts(), i = (t.getRegionElements(e.stepName) || []).map((s) => {
|
|
2588
|
+
const o = s.region;
|
|
2589
2589
|
if (!a.find((g) => g.panelId === (o == null ? void 0 : o.panelId)))
|
|
2590
2590
|
throw new O(o);
|
|
2591
|
-
return new TA(
|
|
2592
|
-
}).filter((
|
|
2593
|
-
t.getCommandDispatcher()(new R(
|
|
2591
|
+
return new TA(s.id, this.shapeFillId, A);
|
|
2592
|
+
}).filter((s) => !!s);
|
|
2593
|
+
t.getCommandDispatcher()(new R(i)), t.updateStorage(e.stepName, { colour: A });
|
|
2594
2594
|
}
|
|
2595
2595
|
async init(A, e, t) {
|
|
2596
2596
|
const a = A.option;
|
|
@@ -2622,13 +2622,13 @@ class Da {
|
|
|
2622
2622
|
const a = e.getSerializedStep(
|
|
2623
2623
|
A.stepName,
|
|
2624
2624
|
t.serializableWorkflow.steps
|
|
2625
|
-
),
|
|
2625
|
+
), s = Object.values(t.layouts).map((g) => g.elements).flat().filter((g) => g.stepName === A.stepName), o = A.option;
|
|
2626
2626
|
if (a != null && a.selectedVariants) {
|
|
2627
2627
|
const g = a.selectedVariants[0].id;
|
|
2628
2628
|
if (o && g) {
|
|
2629
2629
|
const B = (r = o.variants) == null ? void 0 : r.find((l) => l.id === g);
|
|
2630
2630
|
if (B) {
|
|
2631
|
-
const l =
|
|
2631
|
+
const l = s.map((d) => ({ id: d.id, region: d.stepRegion }));
|
|
2632
2632
|
await e.setSelectionsAndElements(
|
|
2633
2633
|
A.stepName,
|
|
2634
2634
|
[B],
|
|
@@ -2646,10 +2646,10 @@ class Da {
|
|
|
2646
2646
|
}
|
|
2647
2647
|
async selectVariantCommand(A, e, t, a) {
|
|
2648
2648
|
var o;
|
|
2649
|
-
const n = a.getLayouts(),
|
|
2649
|
+
const n = a.getLayouts(), i = (o = a.getStepStorage(A.stepName)) == null ? void 0 : o.colour, s = () => {
|
|
2650
2650
|
var r, g;
|
|
2651
2651
|
if (((r = e.variant) == null ? void 0 : r.color) === "#custom")
|
|
2652
|
-
return
|
|
2652
|
+
return i || "#FFFFFF";
|
|
2653
2653
|
if ((g = e.variant) != null && g.color)
|
|
2654
2654
|
return e.variant.color;
|
|
2655
2655
|
throw new Error("Failed to resolve color for shape step.");
|
|
@@ -2659,7 +2659,7 @@ class Da {
|
|
|
2659
2659
|
const l = B.region;
|
|
2660
2660
|
if (!n.find((C) => C.panelId === (l == null ? void 0 : l.panelId)))
|
|
2661
2661
|
throw new O(l);
|
|
2662
|
-
const w =
|
|
2662
|
+
const w = s();
|
|
2663
2663
|
return new TA(B.id, this.shapeFillId, w);
|
|
2664
2664
|
}, g = t.map(r).filter((B) => !!B);
|
|
2665
2665
|
return {
|
|
@@ -2669,7 +2669,7 @@ class Da {
|
|
|
2669
2669
|
A.stepName,
|
|
2670
2670
|
e.variant ? [e.variant] : [],
|
|
2671
2671
|
t
|
|
2672
|
-
), a.updateStorage(A.stepName, { colour:
|
|
2672
|
+
), a.updateStorage(A.stepName, { colour: s() });
|
|
2673
2673
|
}
|
|
2674
2674
|
};
|
|
2675
2675
|
} else {
|
|
@@ -2677,7 +2677,7 @@ class Da {
|
|
|
2677
2677
|
const w = n.find((m) => m.panelId === d.panelId);
|
|
2678
2678
|
if (!w)
|
|
2679
2679
|
throw new O(d);
|
|
2680
|
-
const C =
|
|
2680
|
+
const C = s(), E = `
|
|
2681
2681
|
<svg
|
|
2682
2682
|
xmlns="http://www.w3.org/2000/svg"
|
|
2683
2683
|
xmlnsXlink="http://www.w3.org/1999/xlink"
|
|
@@ -2733,7 +2733,7 @@ class Da {
|
|
|
2733
2733
|
e.variant ? [e.variant] : [],
|
|
2734
2734
|
l,
|
|
2735
2735
|
async () => {
|
|
2736
|
-
a.updateStorage(A.stepName, { colour:
|
|
2736
|
+
a.updateStorage(A.stepName, { colour: s() });
|
|
2737
2737
|
}
|
|
2738
2738
|
);
|
|
2739
2739
|
}
|
|
@@ -2741,7 +2741,7 @@ class Da {
|
|
|
2741
2741
|
}
|
|
2742
2742
|
}
|
|
2743
2743
|
}
|
|
2744
|
-
const
|
|
2744
|
+
const sA = new Da();
|
|
2745
2745
|
class fa {
|
|
2746
2746
|
constructor() {
|
|
2747
2747
|
this.latestToast = null, this.toastType = null, this.toastCallbacks = [];
|
|
@@ -2786,18 +2786,18 @@ class ya {
|
|
|
2786
2786
|
);
|
|
2787
2787
|
const a = [], n = e ? ut(e.assetUrl) : void 0;
|
|
2788
2788
|
if (n) {
|
|
2789
|
-
const
|
|
2790
|
-
for (let o = 0; o <
|
|
2791
|
-
|
|
2789
|
+
const i = t.split("").filter((o) => !Ma.includes(o)).join(""), s = i.split("").map((o) => n.getFont().charToGlyph(o));
|
|
2790
|
+
for (let o = 0; o < s.length; o++)
|
|
2791
|
+
s[o].name === ".notdef" && a.push(String.fromCharCode(i.charCodeAt(o)));
|
|
2792
2792
|
}
|
|
2793
|
-
for (let
|
|
2794
|
-
t = t.replaceAll(a[
|
|
2793
|
+
for (let i = 0; i < a.length; i++)
|
|
2794
|
+
t = t.replaceAll(a[i], "");
|
|
2795
2795
|
return t;
|
|
2796
2796
|
}, this.textAlign = (A) => A.vertical ? "center" : A.textAlign || "center", this.getErrorsForText = (A, e, t) => {
|
|
2797
2797
|
const a = [];
|
|
2798
2798
|
e.data && e.data.maxLength && A.length > e.data.maxLength && a.push({ localizationKey: "workflow.steps.text.characterLimit" });
|
|
2799
|
-
const n = t.getProfanities(),
|
|
2800
|
-
for (const o of
|
|
2799
|
+
const n = t.getProfanities(), i = jA(A.toLowerCase());
|
|
2800
|
+
for (const o of i)
|
|
2801
2801
|
for (const r in n) {
|
|
2802
2802
|
const g = n[r].toLowerCase().replace(/\s/g, "");
|
|
2803
2803
|
if (o === g) {
|
|
@@ -2810,7 +2810,7 @@ class ya {
|
|
|
2810
2810
|
};
|
|
2811
2811
|
}
|
|
2812
2812
|
async init(A, e, t) {
|
|
2813
|
-
var n,
|
|
2813
|
+
var n, i, s;
|
|
2814
2814
|
const a = A.option;
|
|
2815
2815
|
if (!a)
|
|
2816
2816
|
return null;
|
|
@@ -2825,11 +2825,11 @@ class ya {
|
|
|
2825
2825
|
} : void 0;
|
|
2826
2826
|
e.updateStorage(A.stepName, {
|
|
2827
2827
|
inputText: A.data.defaultText || "",
|
|
2828
|
-
color: ((
|
|
2828
|
+
color: ((i = await this.getDefaultColorVariant(A.data)) == null ? void 0 : i.color) || await this.getDefaultColor(A.data),
|
|
2829
2829
|
fillImage: B
|
|
2830
2830
|
}), e.updateMetadata(A.stepName, {
|
|
2831
2831
|
text: A.data.defaultText || "",
|
|
2832
|
-
color: ((
|
|
2832
|
+
color: ((s = await this.getDefaultColorVariant(A.data)) == null ? void 0 : s.name) || await this.getDefaultColor(A.data),
|
|
2833
2833
|
fillImage: o == null ? void 0 : o.name
|
|
2834
2834
|
});
|
|
2835
2835
|
const l = K.getDefaultVariant(a);
|
|
@@ -2864,10 +2864,10 @@ class ya {
|
|
|
2864
2864
|
return e;
|
|
2865
2865
|
const t = A.data.colorOption;
|
|
2866
2866
|
if (t) {
|
|
2867
|
-
const n = ((a = t.variants) == null ? void 0 : a.map((
|
|
2868
|
-
fill:
|
|
2869
|
-
stroke:
|
|
2870
|
-
variant:
|
|
2867
|
+
const n = ((a = t.variants) == null ? void 0 : a.map((i) => ({
|
|
2868
|
+
fill: i.color,
|
|
2869
|
+
stroke: i.color,
|
|
2870
|
+
variant: i
|
|
2871
2871
|
}))) || [];
|
|
2872
2872
|
return this.cachedColors.set(A.stepName, n), n;
|
|
2873
2873
|
}
|
|
@@ -2877,9 +2877,9 @@ class ya {
|
|
|
2877
2877
|
if (!A.data || !A.data.regions)
|
|
2878
2878
|
return;
|
|
2879
2879
|
const n = a.getCommandDispatcher();
|
|
2880
|
-
for (const
|
|
2881
|
-
const
|
|
2882
|
-
n(
|
|
2880
|
+
for (const i of t) {
|
|
2881
|
+
const s = new mt(i.id, e);
|
|
2882
|
+
n(s);
|
|
2883
2883
|
}
|
|
2884
2884
|
}
|
|
2885
2885
|
async changeFillColor(A, e, t, a) {
|
|
@@ -2888,17 +2888,17 @@ class ya {
|
|
|
2888
2888
|
return;
|
|
2889
2889
|
const n = a.getCommandDispatcher();
|
|
2890
2890
|
e.variant ? a.updateMetadata(A.stepName, { color: e.variant.name }) : a.updateMetadata(A.stepName, { color: e.fill });
|
|
2891
|
-
const
|
|
2892
|
-
|
|
2891
|
+
const i = A.data.colorOption, s = i ? this.createTextFillSpotColor(i, e.variant) : void 0;
|
|
2892
|
+
i ? a.updateStorage(A.stepName, {
|
|
2893
2893
|
color: e.fill,
|
|
2894
|
-
colorProfileAssetKey: (o =
|
|
2894
|
+
colorProfileAssetKey: (o = i.colorProfile) == null ? void 0 : o.key
|
|
2895
2895
|
}) : a.updateStorage(A.stepName, {
|
|
2896
2896
|
color: e.fill
|
|
2897
2897
|
});
|
|
2898
2898
|
for (const r of t) {
|
|
2899
2899
|
if (!e.fill)
|
|
2900
2900
|
throw new Error("Fill not set on new color selection!");
|
|
2901
|
-
const g = new It(r.id, e.fill,
|
|
2901
|
+
const g = new It(r.id, e.fill, s);
|
|
2902
2902
|
n(g);
|
|
2903
2903
|
}
|
|
2904
2904
|
}
|
|
@@ -2906,17 +2906,17 @@ class ya {
|
|
|
2906
2906
|
var t, a;
|
|
2907
2907
|
const e = A.data.imageFillOption;
|
|
2908
2908
|
if (e) {
|
|
2909
|
-
const n = ((a = (t = e.variants) == null ? void 0 : t.map((
|
|
2910
|
-
var
|
|
2911
|
-
return (
|
|
2912
|
-
})) == null ? void 0 : a.filter((
|
|
2909
|
+
const n = ((a = (t = e.variants) == null ? void 0 : t.map((i) => {
|
|
2910
|
+
var s;
|
|
2911
|
+
return (s = i.asset) == null ? void 0 : s.fileLink;
|
|
2912
|
+
})) == null ? void 0 : a.filter((i) => !!i)) || [];
|
|
2913
2913
|
return Promise.all(
|
|
2914
|
-
n.map(async (
|
|
2915
|
-
const
|
|
2914
|
+
n.map(async (i) => {
|
|
2915
|
+
const s = await zA(i);
|
|
2916
2916
|
return {
|
|
2917
|
-
src:
|
|
2918
|
-
width:
|
|
2919
|
-
height:
|
|
2917
|
+
src: i,
|
|
2918
|
+
width: s.width,
|
|
2919
|
+
height: s.height,
|
|
2920
2920
|
scale: A.data.imageFillScale || 1
|
|
2921
2921
|
};
|
|
2922
2922
|
})
|
|
@@ -2925,14 +2925,14 @@ class ya {
|
|
|
2925
2925
|
return Promise.resolve([]);
|
|
2926
2926
|
}
|
|
2927
2927
|
async changeFillImage(A, e, t, a) {
|
|
2928
|
-
var
|
|
2928
|
+
var s, o;
|
|
2929
2929
|
if (!A.data || !A.data.regions)
|
|
2930
2930
|
return;
|
|
2931
|
-
const n = a.getCommandDispatcher(),
|
|
2931
|
+
const n = a.getCommandDispatcher(), i = (o = (s = A.option) == null ? void 0 : s.variants) == null ? void 0 : o.find((r) => {
|
|
2932
2932
|
var g;
|
|
2933
2933
|
return ((g = r.asset) == null ? void 0 : g.fileLink) === e.src;
|
|
2934
2934
|
});
|
|
2935
|
-
a.updateMetadata(A.stepName, { fillImage:
|
|
2935
|
+
a.updateMetadata(A.stepName, { fillImage: i == null ? void 0 : i.name }), a.updateStorage(A.stepName, {
|
|
2936
2936
|
fillImage: e
|
|
2937
2937
|
});
|
|
2938
2938
|
for (const r of t) {
|
|
@@ -2948,15 +2948,15 @@ class ya {
|
|
|
2948
2948
|
});
|
|
2949
2949
|
}
|
|
2950
2950
|
updateInputText(A, e, t, a) {
|
|
2951
|
-
const n = a.getStepStorage(t.stepName),
|
|
2951
|
+
const n = a.getStepStorage(t.stepName), i = this.getProcessedInput(A, t.data, !!n.customiseAllText), s = {
|
|
2952
2952
|
command: void 0,
|
|
2953
2953
|
helperText: "",
|
|
2954
2954
|
errors: this.getErrorsForText(A, t, a)
|
|
2955
2955
|
};
|
|
2956
|
-
if (
|
|
2957
|
-
return
|
|
2958
|
-
const o = (t.data.maxLength -
|
|
2959
|
-
|
|
2956
|
+
if (s.errors.length > 0)
|
|
2957
|
+
return s.helperText = s.errors[0].localizationKey, s;
|
|
2958
|
+
const o = (t.data.maxLength - i.length).toString();
|
|
2959
|
+
s.helperText = `${o} characters remaining`;
|
|
2960
2960
|
const r = [], g = /* @__PURE__ */ new Map(), B = /* @__PURE__ */ new Map();
|
|
2961
2961
|
for (const l of e) {
|
|
2962
2962
|
if (!l.fontData)
|
|
@@ -2965,20 +2965,20 @@ class ya {
|
|
|
2965
2965
|
l.fontSize,
|
|
2966
2966
|
l.fontData,
|
|
2967
2967
|
{ left: l.x, top: l.y, width: l.width, height: l.height, rotation: l.rotation, panelId: "" },
|
|
2968
|
-
[
|
|
2968
|
+
[i],
|
|
2969
2969
|
{ size: t.data.size, minSize: t.data.minSize, maxSize: t.data.maxSize }
|
|
2970
2970
|
);
|
|
2971
2971
|
g.set(l.id, d), B.set(l.id, w);
|
|
2972
|
-
const C = t.data.curved ?
|
|
2972
|
+
const C = t.data.curved ? i : (w || []).join(`
|
|
2973
2973
|
`);
|
|
2974
2974
|
r.push(this.generateTextChangeCommandsForRegion(d, t.data, l.id, C));
|
|
2975
2975
|
}
|
|
2976
|
-
return !t.data.curved && e.length > 0 && !Array.from(B.values()).every((d) => d) ? (
|
|
2977
|
-
text:
|
|
2978
|
-
}), n.defaultCleared && a.setMandatoryFulfilled(t.stepName, !0),
|
|
2976
|
+
return !t.data.curved && e.length > 0 && !Array.from(B.values()).every((d) => d) ? (s.errors.push({ localizationKey: "workflow.steps.text.doesNotFit" }), s) : (a.updateStorage(t.stepName, { text: A }), a.updateMetadata(t.stepName, {
|
|
2977
|
+
text: i
|
|
2978
|
+
}), n.defaultCleared && a.setMandatoryFulfilled(t.stepName, !0), s.command = new R(r), s);
|
|
2979
2979
|
}
|
|
2980
2980
|
async selectVariant(A, e, t, a, n) {
|
|
2981
|
-
const
|
|
2981
|
+
const i = await this.selectVariantCommand(
|
|
2982
2982
|
A,
|
|
2983
2983
|
e,
|
|
2984
2984
|
t.getStepStorage(A.stepName) || {},
|
|
@@ -2987,16 +2987,16 @@ class ya {
|
|
|
2987
2987
|
a,
|
|
2988
2988
|
n
|
|
2989
2989
|
);
|
|
2990
|
-
|
|
2990
|
+
i && (i.command && t.getCommandDispatcher()(i.command), i.followup && await i.followup());
|
|
2991
2991
|
}
|
|
2992
2992
|
createTextFillSpotColor(A, e) {
|
|
2993
2993
|
const t = A.colorProfile;
|
|
2994
2994
|
if (t) {
|
|
2995
|
-
const a = (t.name || "").replace(/\s/g, "-"), n = a.lastIndexOf("/"),
|
|
2995
|
+
const a = (t.name || "").replace(/\s/g, "-"), n = a.lastIndexOf("/"), s = a.slice(n + 1).slice(0, -4);
|
|
2996
2996
|
if (!e.namedColor)
|
|
2997
2997
|
throw new Error("variant named color not set!");
|
|
2998
2998
|
return {
|
|
2999
|
-
profileName:
|
|
2999
|
+
profileName: s,
|
|
3000
3000
|
namedColor: e.namedColor
|
|
3001
3001
|
};
|
|
3002
3002
|
}
|
|
@@ -3006,26 +3006,26 @@ class ya {
|
|
|
3006
3006
|
const a = e.getSerializedStep(
|
|
3007
3007
|
A.stepName,
|
|
3008
3008
|
t.serializableWorkflow.steps
|
|
3009
|
-
),
|
|
3009
|
+
), s = Object.values(t.layouts).map((l) => l.elements).flat().filter((l) => l.stepName === A.stepName), o = A.option;
|
|
3010
3010
|
if (a != null && a.selectedVariants) {
|
|
3011
3011
|
const l = a.selectedVariants[0].id;
|
|
3012
3012
|
if (o && l) {
|
|
3013
3013
|
const d = (r = o.variants) == null ? void 0 : r.find((w) => w.id === l);
|
|
3014
3014
|
if (d) {
|
|
3015
|
-
const w = await this.fontDataFromVariant(d), C =
|
|
3015
|
+
const w = await this.fontDataFromVariant(d), C = s.map((m) => ({ id: m.id, region: m.stepRegion })), E = (g = a.storage) == null ? void 0 : g.color, Q = (B = a.storage) == null ? void 0 : B.text;
|
|
3016
3016
|
await e.setSelectionsAndElements(
|
|
3017
3017
|
A.stepName,
|
|
3018
3018
|
[d],
|
|
3019
3019
|
C,
|
|
3020
3020
|
async () => {
|
|
3021
3021
|
e.updateMetadata(A.stepName, { color: E, text: Q }), e.updateStorage(A.stepName, { text: Q, inputText: Q });
|
|
3022
|
-
const m =
|
|
3022
|
+
const m = s.map((D) => new le(D.id, w)), u = new R(m);
|
|
3023
3023
|
e.getCommandDispatcher()(u), e.setMandatoryFulfilled(A.stepName, !0);
|
|
3024
3024
|
}
|
|
3025
3025
|
);
|
|
3026
3026
|
const { command: h } = z.updateInputText(
|
|
3027
3027
|
Q || "",
|
|
3028
|
-
|
|
3028
|
+
s,
|
|
3029
3029
|
A,
|
|
3030
3030
|
e
|
|
3031
3031
|
);
|
|
@@ -3064,7 +3064,7 @@ class ya {
|
|
|
3064
3064
|
name: a.names.fullName.en
|
|
3065
3065
|
};
|
|
3066
3066
|
}
|
|
3067
|
-
async selectVariantCommand(A, e, t, a, n,
|
|
3067
|
+
async selectVariantCommand(A, e, t, a, n, i, s, o) {
|
|
3068
3068
|
var B;
|
|
3069
3069
|
const r = n.markUpdatePending(), g = await this.fontDataFromVariant(e);
|
|
3070
3070
|
if (a.length > 0) {
|
|
@@ -3081,8 +3081,8 @@ class ya {
|
|
|
3081
3081
|
t,
|
|
3082
3082
|
n,
|
|
3083
3083
|
!!t.customiseAllText,
|
|
3084
|
-
|
|
3085
|
-
|
|
3084
|
+
i,
|
|
3085
|
+
s
|
|
3086
3086
|
);
|
|
3087
3087
|
return d && l.push(d), {
|
|
3088
3088
|
command: new R(l),
|
|
@@ -3106,8 +3106,8 @@ class ya {
|
|
|
3106
3106
|
t,
|
|
3107
3107
|
n,
|
|
3108
3108
|
!!t.customiseAllText,
|
|
3109
|
-
|
|
3110
|
-
|
|
3109
|
+
i,
|
|
3110
|
+
s
|
|
3111
3111
|
), w = l.flatMap((E) => E.commands);
|
|
3112
3112
|
if (o) {
|
|
3113
3113
|
const E = l.map(
|
|
@@ -3131,12 +3131,12 @@ class ya {
|
|
|
3131
3131
|
injectReplaceableText(A, e) {
|
|
3132
3132
|
return e.replaceableText ? e.replaceableText.replace("{{}}", A) : A;
|
|
3133
3133
|
}
|
|
3134
|
-
async createTextboxRegions(A, e, t, a, n,
|
|
3134
|
+
async createTextboxRegions(A, e, t, a, n, i) {
|
|
3135
3135
|
if (!t || !t.regions)
|
|
3136
3136
|
throw new Error("Step data not supplied");
|
|
3137
|
-
const
|
|
3137
|
+
const s = n.text || t.defaultText || "", o = this.getProcessedInput(s, t, !1), r = async (B) => {
|
|
3138
3138
|
var C;
|
|
3139
|
-
const d =
|
|
3139
|
+
const d = i.getLayouts().find((E) => E.panelId === B.panelId), w = k();
|
|
3140
3140
|
try {
|
|
3141
3141
|
if (!d)
|
|
3142
3142
|
throw new xA("Failed to find layout for region: " + B.panelId);
|
|
@@ -3147,7 +3147,7 @@ class ya {
|
|
|
3147
3147
|
var T;
|
|
3148
3148
|
return J.id === ((T = E.defaultVariant) == null ? void 0 : T.id);
|
|
3149
3149
|
}) || E.variants[0];
|
|
3150
|
-
Q = this.createTextFillSpotColor(E, S),
|
|
3150
|
+
Q = this.createTextFillSpotColor(E, S), i.updateStorage(A, {
|
|
3151
3151
|
colorProfileAssetKey: (C = E.colorProfile) == null ? void 0 : C.key
|
|
3152
3152
|
});
|
|
3153
3153
|
}
|
|
@@ -3163,7 +3163,7 @@ class ya {
|
|
|
3163
3163
|
layerIndex: B.layerIndex,
|
|
3164
3164
|
rotation: B.rotation,
|
|
3165
3165
|
text: o,
|
|
3166
|
-
input:
|
|
3166
|
+
input: s,
|
|
3167
3167
|
type: U.Textbox,
|
|
3168
3168
|
vertical: t.vertical,
|
|
3169
3169
|
x: B.left,
|
|
@@ -3211,22 +3211,22 @@ class ya {
|
|
|
3211
3211
|
}, g = await Promise.all(t.regions.map(r)).catch((B) => {
|
|
3212
3212
|
throw B instanceof SA ? (Fa.setLatestToast("Failed to load font.", PA.Error), B) : B instanceof xA ? B : new Error(B);
|
|
3213
3213
|
});
|
|
3214
|
-
return await
|
|
3214
|
+
return await i.setSelectionsAndElements(
|
|
3215
3215
|
A,
|
|
3216
3216
|
[e],
|
|
3217
3217
|
g.map((B) => B.regionElement),
|
|
3218
3218
|
async () => {
|
|
3219
|
-
|
|
3220
|
-
text:
|
|
3221
|
-
}),
|
|
3222
|
-
text:
|
|
3219
|
+
i.updateMetadata(A, {
|
|
3220
|
+
text: s
|
|
3221
|
+
}), i.updateStorage(A, {
|
|
3222
|
+
text: s
|
|
3223
3223
|
});
|
|
3224
3224
|
}
|
|
3225
3225
|
), g;
|
|
3226
3226
|
}
|
|
3227
3227
|
generateTextChangeCommandsForRegion(A, e, t, a) {
|
|
3228
|
-
const n = [],
|
|
3229
|
-
if (n.push(
|
|
3228
|
+
const n = [], i = new pt(t, a);
|
|
3229
|
+
if (n.push(i), !e.size) {
|
|
3230
3230
|
const o = new Dt(t, A);
|
|
3231
3231
|
n.push(o);
|
|
3232
3232
|
}
|
|
@@ -3235,8 +3235,8 @@ class ya {
|
|
|
3235
3235
|
/**
|
|
3236
3236
|
* @deprecated
|
|
3237
3237
|
*/
|
|
3238
|
-
async changeInputTextWithRegion(A, e, t, a, n,
|
|
3239
|
-
const B = (a || "").replace(/^(?![\u000A\u000D])[\u0000-\u001F\u007F-\u009F]/g, ""), l = this.getProcessedInput(B, A.data,
|
|
3238
|
+
async changeInputTextWithRegion(A, e, t, a, n, i, s, o, r, g) {
|
|
3239
|
+
const B = (a || "").replace(/^(?![\u000A\u000D])[\u0000-\u001F\u007F-\u009F]/g, ""), l = this.getProcessedInput(B, A.data, s), d = i.getRegionElements(A.stepName), w = /* @__PURE__ */ new Map(), C = /* @__PURE__ */ new Map();
|
|
3240
3240
|
for (const u of d)
|
|
3241
3241
|
if (u.region) {
|
|
3242
3242
|
const [D, p] = uA(
|
|
@@ -3251,7 +3251,7 @@ class ya {
|
|
|
3251
3251
|
const Q = (() => {
|
|
3252
3252
|
if (A.data && A.data.maxLength && l.length > A.data.maxLength)
|
|
3253
3253
|
return g && g(!0), { info: "0" };
|
|
3254
|
-
const u =
|
|
3254
|
+
const u = i.getProfanities(), D = jA(l.toLowerCase());
|
|
3255
3255
|
for (const p of D)
|
|
3256
3256
|
for (const I in u) {
|
|
3257
3257
|
const F = u[I].toLowerCase().replace(/\s/g, "");
|
|
@@ -3267,9 +3267,9 @@ class ya {
|
|
|
3267
3267
|
}
|
|
3268
3268
|
if (r(`${Q.info} characters remaining` || ""), g)
|
|
3269
3269
|
return;
|
|
3270
|
-
|
|
3270
|
+
i.updateStorage(A.stepName, { text: B }), i.updateMetadata(A.stepName, {
|
|
3271
3271
|
text: this.injectReplaceableText(B, A.data)
|
|
3272
|
-
}), n.defaultCleared &&
|
|
3272
|
+
}), n.defaultCleared && i.setMandatoryFulfilled(A.stepName, !0);
|
|
3273
3273
|
const h = [];
|
|
3274
3274
|
for (const u of d) {
|
|
3275
3275
|
const D = A.data.curved ? l : (C.get(u.id) || []).join(`
|
|
@@ -4577,16 +4577,16 @@ const $e = (c, A, e, t) => {
|
|
|
4577
4577
|
a.setAttribute("id", t), a.setAttribute("height", "200%"), a.setAttribute("width", "200%"), a.setAttribute("x", "-50%"), a.setAttribute("y", "-50%");
|
|
4578
4578
|
const n = lA("feOffset");
|
|
4579
4579
|
a.appendChild(n), n.setAttribute("result", "offOut"), n.setAttribute("in", "SourceAlpha"), n.setAttribute("dx", `${c}`), n.setAttribute("dy", `${A}`);
|
|
4580
|
-
const
|
|
4581
|
-
a.appendChild(
|
|
4582
|
-
const
|
|
4583
|
-
return a.appendChild(
|
|
4580
|
+
const i = lA("feGaussianBlur");
|
|
4581
|
+
a.appendChild(i), i.setAttribute("result", "blurOut"), i.setAttribute("in", "offOut"), i.setAttribute("stdDeviation", `${e}`);
|
|
4582
|
+
const s = lA("feBlend");
|
|
4583
|
+
return a.appendChild(s), s.setAttribute("in", "SourceGraphic"), s.setAttribute("in2", "blurOut"), s.setAttribute("mode", "normal"), a;
|
|
4584
4584
|
}, _e = (c) => {
|
|
4585
4585
|
let A = c;
|
|
4586
4586
|
return A = A.replace(/feoffset/gi, "feOffset"), A = A.replace(/fegaussianblur/gi, "feGaussianBlur"), A = A.replace(/feblend/gi, "feBlend"), A = A.replace(/lineargradient/gi, "linearGradient"), A = A.replace(/stddeviation/gi, "stdDeviation"), A;
|
|
4587
4587
|
};
|
|
4588
|
-
function
|
|
4589
|
-
const
|
|
4588
|
+
function ie(c, A, e, t, a, n) {
|
|
4589
|
+
const i = a || 1, s = n || 1, o = {
|
|
4590
4590
|
x: A[0],
|
|
4591
4591
|
y: A[1],
|
|
4592
4592
|
width: A[2] - A[0],
|
|
@@ -4594,7 +4594,7 @@ function se(c, A, e, t, a, n) {
|
|
|
4594
4594
|
};
|
|
4595
4595
|
if (o.width <= 0)
|
|
4596
4596
|
return;
|
|
4597
|
-
const r = Ha(o.height, o.width, e *
|
|
4597
|
+
const r = Ha(o.height, o.width, e * i, t * s), g = (t - r * o.width) / 2 - r * o.x, B = (e - r * o.height) / 2 - r * o.y;
|
|
4598
4598
|
c.setAttribute("transform", `translate(${g} ${B}) scale(${r} ${r})`);
|
|
4599
4599
|
}
|
|
4600
4600
|
function Ha(c, A, e, t) {
|
|
@@ -4613,7 +4613,7 @@ const Qe = {
|
|
|
4613
4613
|
t: ["x", "y"],
|
|
4614
4614
|
a: ["rx", "ry", "xRotation", "largeArc", "sweep", "x", "y"]
|
|
4615
4615
|
};
|
|
4616
|
-
class
|
|
4616
|
+
class se {
|
|
4617
4617
|
constructor(A) {
|
|
4618
4618
|
const e = Array.from(A.querySelectorAll("path"));
|
|
4619
4619
|
this.paths = e.map((t) => {
|
|
@@ -4629,10 +4629,10 @@ class ie {
|
|
|
4629
4629
|
encodePath(A) {
|
|
4630
4630
|
let e = "";
|
|
4631
4631
|
const a = (n) => {
|
|
4632
|
-
const
|
|
4633
|
-
let o = e !==
|
|
4632
|
+
const i = [], s = n.relative ? n.type : n.type.toUpperCase();
|
|
4633
|
+
let o = e !== s;
|
|
4634
4634
|
const r = Qe[n.type];
|
|
4635
|
-
o && (
|
|
4635
|
+
o && (i.push(s), e = s);
|
|
4636
4636
|
for (const g of r) {
|
|
4637
4637
|
const B = n[g];
|
|
4638
4638
|
let l;
|
|
@@ -4644,11 +4644,11 @@ class ie {
|
|
|
4644
4644
|
l = (B * 100 | 0) / 100;
|
|
4645
4645
|
break;
|
|
4646
4646
|
default:
|
|
4647
|
-
throw new
|
|
4647
|
+
throw new iA("Failed to encode path.");
|
|
4648
4648
|
}
|
|
4649
|
-
o ||
|
|
4649
|
+
o || i.push(" "), i.push(l), o = !1;
|
|
4650
4650
|
}
|
|
4651
|
-
return
|
|
4651
|
+
return i.join("");
|
|
4652
4652
|
};
|
|
4653
4653
|
return A.map(a).join("");
|
|
4654
4654
|
}
|
|
@@ -4656,24 +4656,24 @@ class ie {
|
|
|
4656
4656
|
const e = /([mzlhvcsqta])([^mzlhvcsqta]*)/gi, t = /-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi, a = [];
|
|
4657
4657
|
let n;
|
|
4658
4658
|
for (e.lastIndex = 0; n = e.exec(A); ) {
|
|
4659
|
-
const
|
|
4660
|
-
if (
|
|
4661
|
-
throw new
|
|
4662
|
-
`Path type "${
|
|
4659
|
+
const i = n[1].toLowerCase(), s = (n[2].match(t) || []).map(parseFloat), o = i === n[1], r = Qe[i];
|
|
4660
|
+
if (s.length < r.length)
|
|
4661
|
+
throw new iA(
|
|
4662
|
+
`Path type "${i}" given ${s.length} arguments, expected ${r.length}.`
|
|
4663
4663
|
);
|
|
4664
4664
|
if (r.length > 0) {
|
|
4665
|
-
if (
|
|
4666
|
-
throw new
|
|
4667
|
-
`Path type "${
|
|
4665
|
+
if (s.length % r.length !== 0)
|
|
4666
|
+
throw new iA(
|
|
4667
|
+
`Path type "${i}" given ${s.length} arguments, not divisible by ${r.length}`
|
|
4668
4668
|
);
|
|
4669
|
-
for (let g = 0; g <
|
|
4670
|
-
const B = { type:
|
|
4669
|
+
for (let g = 0; g < s.length / r.length; g++) {
|
|
4670
|
+
const B = { type: i, relative: o };
|
|
4671
4671
|
for (let l = 0; l < r.length; l++)
|
|
4672
|
-
B[r[l]] =
|
|
4672
|
+
B[r[l]] = s[g * r.length + l];
|
|
4673
4673
|
a.push(B);
|
|
4674
4674
|
}
|
|
4675
4675
|
} else
|
|
4676
|
-
a.push({ type:
|
|
4676
|
+
a.push({ type: i, relative: o });
|
|
4677
4677
|
}
|
|
4678
4678
|
return a;
|
|
4679
4679
|
}
|
|
@@ -4683,13 +4683,13 @@ class ie {
|
|
|
4683
4683
|
["x2", "y2"],
|
|
4684
4684
|
["x", "y"]
|
|
4685
4685
|
], a = (n) => {
|
|
4686
|
-
for (let
|
|
4687
|
-
const [
|
|
4688
|
-
if (
|
|
4689
|
-
const r = [n[
|
|
4686
|
+
for (let i = 0; i < t.length; i++) {
|
|
4687
|
+
const [s, o] = t[i];
|
|
4688
|
+
if (s in n && o in n) {
|
|
4689
|
+
const r = [n[s], n[o]], g = e(r);
|
|
4690
4690
|
if (g.length < 2)
|
|
4691
|
-
throw new
|
|
4692
|
-
n[
|
|
4691
|
+
throw new iA("Transformer must return at least 2 points.");
|
|
4692
|
+
n[s] = g[0], n[o] = g[1];
|
|
4693
4693
|
}
|
|
4694
4694
|
}
|
|
4695
4695
|
return n;
|
|
@@ -4699,8 +4699,8 @@ class ie {
|
|
|
4699
4699
|
transformPath(A, e) {
|
|
4700
4700
|
const t = [];
|
|
4701
4701
|
for (let a = 0; a < A.length; a++) {
|
|
4702
|
-
const n = JSON.parse(JSON.stringify(A[a])),
|
|
4703
|
-
Array.isArray(
|
|
4702
|
+
const n = JSON.parse(JSON.stringify(A[a])), i = e(n);
|
|
4703
|
+
Array.isArray(i) ? t.push(...i) : i && t.push(i);
|
|
4704
4704
|
}
|
|
4705
4705
|
return t;
|
|
4706
4706
|
}
|
|
@@ -4722,11 +4722,11 @@ class Ra extends ae {
|
|
|
4722
4722
|
return this.svg(A);
|
|
4723
4723
|
}
|
|
4724
4724
|
svg(A) {
|
|
4725
|
-
const e = Ae(Ya), a = A !== "" ? ((
|
|
4725
|
+
const e = Ae(Ya), a = A !== "" ? ((i) => i.charAt(0).toUpperCase() + i.substr(1).toLowerCase())(A) : "", n = e.getPath(a, 0, 72, 72);
|
|
4726
4726
|
return this.brandSvg(n, Sa);
|
|
4727
4727
|
}
|
|
4728
4728
|
brandSvg(A, e) {
|
|
4729
|
-
const t = A.toSVG(2), a = A.getBoundingBox(), n = a.x2 - a.x1,
|
|
4729
|
+
const t = A.toSVG(2), a = A.getBoundingBox(), n = a.x2 - a.x1, i = A.toPathData(3), s = () => {
|
|
4730
4730
|
const D = N("g"), p = N("defs");
|
|
4731
4731
|
D.appendChild(p), p.appendChild($e(3, 7, 4, "shadow"));
|
|
4732
4732
|
const I = N("g");
|
|
@@ -4736,7 +4736,7 @@ class Ra extends ae {
|
|
|
4736
4736
|
const Y = N("g");
|
|
4737
4737
|
D.appendChild(Y), Y.setAttribute("fill", "#9d2621"), Y.setAttribute("transform", "translate(1,1)"), Y.innerHTML = t;
|
|
4738
4738
|
const y = N("g");
|
|
4739
|
-
return D.appendChild(y), y.setAttribute("fill", "yellow"), y.innerHTML = t, new
|
|
4739
|
+
return D.appendChild(y), y.setAttribute("fill", "yellow"), y.innerHTML = t, new se(D).transform(([S, J]) => [S, J + (n / 2 - S) ** 2 / (n * 2.9)]), D;
|
|
4740
4740
|
}, [o, r, g] = qe(e);
|
|
4741
4741
|
if (!o)
|
|
4742
4742
|
return "";
|
|
@@ -4748,10 +4748,10 @@ class Ra extends ae {
|
|
|
4748
4748
|
Q.setAttribute("opacity", "0"), E.appendChild(Q);
|
|
4749
4749
|
const h = N("g");
|
|
4750
4750
|
E.appendChild(h);
|
|
4751
|
-
const m =
|
|
4751
|
+
const m = s();
|
|
4752
4752
|
h.appendChild(m);
|
|
4753
|
-
const u = ee(
|
|
4754
|
-
return
|
|
4753
|
+
const u = ee(i);
|
|
4754
|
+
return ie(h, u, l, d), _e(o.outerHTML);
|
|
4755
4755
|
}
|
|
4756
4756
|
}
|
|
4757
4757
|
const Ua = "data:application/octet-stream;base64,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ZWxmIE1ha2VyIDIuMy41AABNAGEAbAB0AGUAcwBlAHIAcwBSAGUAZwB1AGwAYQByAABNYWx0ZXNlcnNSZWd1bGFyAABNAGEAbAB0AGUAcwBlAHIAcwAATWFsdGVzZXJzAABSAGUAZwB1AGwAYQByAABSZWd1bGFyAAAAAAACAAAAAAAA/4MAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAAABAAIBAgEDAAMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQCsAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAljb250cm9sTEYJY29udHJvbENSB0FwLmxpZ2EHQWoubGlnYQdFdC5saWdhB0VmLmxpZ2EHRWoubGlnYQdFay5saWdhB0VsLmxpZ2EHRWIubGlnYQdGdC5saWdhB0ZoLmxpZ2EHRmsubGlnYQdGbC5saWdhB0ZiLmxpZ2EHSHQubGlnYQdIZi5saWdhB0l0LmxpZ2EHSXAubGlnYQdJZi5saWdhB0lqLmxpZ2EHSWwubGlnYQdJYi5saWdhB0p0LmxpZ2EHSmYubGlnYQdKaC5saWdhB0prLmxpZ2EHSmwubGlnYQdKYi5saWdhB0t0LmxpZ2EHS3AubGlnYQdLeS5saWdhB0xqLmxpZ2EHTWoubGlnYQdNaC5saWdhB01mLmxpZ2EHTnQubGlnYQdOZi5saWdhB09mLmxpZ2EHT3oubGlnYQdQcS5saWdhB1B3LmxpZ2EHUHIubGlnYQdQdC5saWdhB1B5LmxpZ2EHUHUubGlnYQdQaS5saWdhB1BmLmxpZ2EHUGgubGlnYQdQai5saWdhB1BrLmxpZ2EHUGwubGlnYQdQei5saWdhB1B4LmxpZ2EHUHYubGlnYQdQYi5saWdhB1BuLmxpZ2EHUG0ubGlnYQdScC5saWdhB1JmLmxpZ2EHUmoubGlnYQdUdC5saWdhB1RmLmxpZ2EHVGgubGlnYQdUay5saWdhB1RsLmxpZ2EHVGIubGlnYQdVdC5saWdhB1VzLmxpZ2EHVWYubGlnYQdWdC5saWdhB1ZzLmxpZ2EHVmYubGlnYQdWbC5saWdhB1d0LmxpZ2EHV2YubGlnYQdYcC5saWdhB1l0LmxpZ2EHWWkubGlnYQdZZi5saWdhB1loLmxpZ2EHWWwubGlnYQdZay5saWdhB1liLmxpZ2EHQWYubGlnYQdDeS5saWdhB0VoLmxpZ2EHR3IubGlnYQdPcC5saWdhB2J0LmxpZ2EHYnIubGlnYQdiZi5saWdhB2JqLmxpZ2EHYnoubGlnYQdkdC5saWdhB2VmLmxpZ2EHZnQubGlnYQdmaC5saWdhB2ZiLmxpZ2EHZmsubGlnYQdnai5saWdhB2pqLmxpZ2EHeWoubGlnYQd0dC5saWdhB3RmLmxpZ2EHdGgubGlnYQd0aS5saWdhB3RrLmxpZ2EHdGwubGlnYQh0dGgubGlnYQhlZmYubGlnYQhlZmIubGlnYQdmZi5saWdhB2ZpLmxpZ2EHZmwubGlnYQAAAAAAAAH//wACAAEAAAAMAAAAHAAAAAIAAgADADoAAQA7AKsAAgAEAAAAAgAAAAEAAAAKAB4ALAABbGF0bgAIAAQAAAAA//8AAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQQIAB0AQABaAGQAngDIANIA5AEWAUgBYgFsAYYBmAGyAkQCXgKQAqoCzALeAugDIgNMA1YDdAOuA7gDwgP+AAMACAAOABQAjQACACUAPAACACkAOwACAC8AAQAEAI4AAgA4AAcAEAAWABwAIgAoAC4ANACPAAIAJwBCAAIAIQBBAAIAKwBAAAIAKgA/AAIAKQA+AAIAJQA9AAIAMwAFAAwAEgAYAB4AJABHAAIAIQBGAAIAKwBFAAIAKgBEAAIAJwBDAAIAMwABAAQAkAACADEAAgAGAAwASQACACUASAACADMABgAOABQAGgAgACYALABPAAIAIQBOAAIAKwBNAAIAKQBMAAIAJQBLAAIALwBKAAIAMwAGAA4AFAAaACAAJgAsAFUAAgAhAFQAAgArAFMAAgAqAFIAAgAnAFEAAgAlAFAAAgAzAAMACAAOABQAWAACADgAVwACAC8AVgACADMAAQAEAFkAAgApAAMACAAOABQAXAACACUAWwACACcAWgACACkAAgAGAAwAXgACACUAXQACADMAAwAIAA4AFACRAAIALwBgAAIAOQBfAAIAJQASACYALAAyADgAPgBEAEoAUABWAFwAYgBoAG4AdAB6AIAAhgCMAHIAAgAsAHEAAgAtAHAAAgAhAG8AAgA1AG4AAgA3AG0AAgA5AGwAAgArAGsAAgAqAGoAAgApAGkAAgAnAGgAAgAlAGcAAgAoAGYAAgA0AGUAAgA4AGQAAgAzAGMAAgAxAGIAAgA2AGEAAgAwAAMACAAOABQAdQACACkAdAACACUAcwACAC8ABgAOABQAGgAgACYALAB7AAIAIQB6AAIAKwB5AAIAKgB4AAIAJwB3AAIAJQB2AAIAMwADAAgADgAUAH4AAgAlAH0AAgAyAHwAAgAzAAQACgAQABYAHACCAAIAKwCBAAIAJQCAAAIAMgB/AAIAMwACAAYADACEAAIAJQCDAAIAMwABAAQAhQACAC8ABwAQABYAHAAiACgALgA0AIwAAgAhAIsAAgAqAIoAAgArAIkAAgAnAIgAAgAlAIcAAgAoAIYAAgAzAAUADAASABgAHgAkAJYAAgA5AJUAAgApAJQAAgAlAJMAAgAxAJIAAgAzAAEABACXAAIAMwADAAgAEAAYAKgAAwAlACEApwADACUAJQCYAAIAJQAHABAAFgAcACIAKAAuADQAqwACACsAqgACACgAqQACACUAnAACACoAmwACACEAmgACACcAmQACADMAAQAEAJ0AAgApAAEABACeAAIAKQAHABAAGAAeACQAKgAwADYApgADADMAJwClAAIAKwCkAAIAKgCjAAIAKACiAAIAJwChAAIAJQCgAAIAMwABAAQAnwACACkAAQAdAAYACAAKAAsADAANAA4ADwAQABEAEgATABQAFQAXABkAGgAbABwAHQAeACEAIwAkACUAJgApADMAOAAAAAEAAAAKAB4ALAABbGF0bgAIAAQAAAAA//8AAQAAAAFrZXJuAAgAAAABAAAAAQAEAAIAAAABAAgAAQPGAAQAAABEAJIAnADSAOABIgEoATYBPAFKAVABXgFkAW4BfAGKAawBsgHAAcYB1AHiAewB/gIIAhYCSAJiAnAChgKcAqoCvALKAtAC6gL0AvoDAAMKAxADGgMgAyYDLAMyAzgDOAMyAz4DRANOAz4DVANaA2ADIANmA2wDcgN4A34DiAOOA5gDngOkA7IDvAACAC7//AA3//IADQAl/+oAKP/8ACn/9AAq//AAK//6ACz//gAt//4AMf/qADP//AA0//wANf/+ADb/+AA5//QAAwAt//wALv/8ADb//AAQACT//AAl/+wAJv/6ACf//AAp/+wAKv/0ACv/+gAs//gALf/8AC//7gAx//gAMv/0ADT/9gA3/+oAOP/6ADn/5AABADf/+gADADX//AA3/+gAOf/6AAEALv/2AAMAKP/8ACn/6AAy/+QAAQAu//IAAwAo/+4AL//2ADX/5gABACT/8AACABgAAgAoAAQAAwAo//4ALv/wADL/+AADACf/9gAv/+4Ao//sAAgAKf/qACv/9AAu//wAL//uADH/7gAy//IAN//mAJX/9AABADYADgADACAABAAjAAQAM//4AAEAMv/8AAMAJv/+ACr/+AA3//4AAwAo//gALv/0AJn/7AACACMAAgAl/+wABAAk//wAL//8ADT/9AA4//4AAgAt//IAq//iAAMAJf/sACb/+AA3//wADAAk//wAJv/+ACj/+gAp/+AAK//+ACz/9gAt//wAL//qADH/7AAy//IAN//cAKP/4gAGACQAAgAl/9oAK//yAC//4gAx/+gAMv/8AAMAKQB+ADL/7ACeAIgABQAg//wAIv/4ACb//AAu//YANQAEAAUAKf/0ACr/+AAv//QAM//mAKP/3gADACEAHAAkAAIALv/4AAQAJf/0AC3//gAv//wAmf/8AAMAJP/wACf/+AAp/+4AAQAk//oABgAg//QAIf/wACj/9gAu/+wAL//0ADP/9AACACH//gA3//IAAQApAEIAAQAnACgAAgAzADQAqgAoAAEAMwA0AAIAMwAyAKEARgABADL/6gABADMALAABACkANAABAJoAGAABADMAMgABACkAOAABADMAMAACACUAEgAzAC4AAQApAHgAAQApADYAAQAzAC4AAQAzADgAAQAzAEIAAQAzAEwAAQAz//IAAQAnAEgAAgAl/+4Amv/oAAEAKQBiAAIAKQBaAJ4AUAABACkAVgABAKEARAADADMANgCaABIAogBKAAIAJwAsAKEARgACAC3/8gA3/+oAAQBEAAYABwAIAAkACgAMABEAFAAVABgAHQAgACEAIgAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOQA8AD0APgBIAEkASwBMAE0AUABRAFkAWgBcAF4AXwBhAGgAagB+AIEAhACIAI0AkQCYAJoAnQCeAJ8AoAChAKkAqgAAAAAAAQAAAADUGBYRAAAAANfpcqUAAAAA1+lypQ==";
|
|
@@ -4766,22 +4766,22 @@ class Ga extends ae {
|
|
|
4766
4766
|
return this.svg(A);
|
|
4767
4767
|
}
|
|
4768
4768
|
svg(A) {
|
|
4769
|
-
const e = Ae(Ua), a = A !== "" ? ((o) => o.charAt(0).toUpperCase() + o.substr(1).toLowerCase())(A) : "", n = e.getPath(a, 0, 72, 72),
|
|
4770
|
-
return this.brandSvg(n,
|
|
4769
|
+
const e = Ae(Ua), a = A !== "" ? ((o) => o.charAt(0).toUpperCase() + o.substr(1).toLowerCase())(A) : "", n = e.getPath(a, 0, 72, 72), i = A.length < this.shortLength, s = i ? this.backgroundShortSvg : this.backgroundSvg;
|
|
4770
|
+
return this.brandSvg(n, s, i);
|
|
4771
4771
|
}
|
|
4772
4772
|
brandSvg(A, e, t) {
|
|
4773
|
-
const a = A.toSVG(2), n = A.getBoundingBox(),
|
|
4773
|
+
const a = A.toSVG(2), n = A.getBoundingBox(), i = n.y2 - n.y1, s = n.x2 - n.x1, o = A.toPathData(3), r = () => {
|
|
4774
4774
|
const I = N("g"), F = N("g");
|
|
4775
4775
|
I.appendChild(F), F.setAttribute("stroke", "#5C1A0D"), F.setAttribute("stroke-width", "4"), F.setAttribute("transform", "translate(1,1)"), F.innerHTML = a;
|
|
4776
4776
|
const Y = N("g");
|
|
4777
4777
|
I.appendChild(Y), Y.setAttribute("fill", "#FFE386"), Y.setAttribute("transform", "translate(1,1)"), Y.innerHTML = a;
|
|
4778
4778
|
const y = N("g");
|
|
4779
4779
|
I.appendChild(y), y.setAttribute("fill", "white"), y.innerHTML = a;
|
|
4780
|
-
const G = new
|
|
4781
|
-
return G.transform(([S, J]) => [S, J + ((
|
|
4780
|
+
const G = new se(I);
|
|
4781
|
+
return G.transform(([S, J]) => [S, J + ((s - S) * J) ** 2 / (s * 5e4)]), G.transform(([S, J]) => [
|
|
4782
4782
|
S,
|
|
4783
|
-
J + (
|
|
4784
|
-
]), G.transform(([S, J]) => [S - (
|
|
4783
|
+
J + (s / 3 - S) ** 2 / s * this.indicator(S < s / 3)
|
|
4784
|
+
]), G.transform(([S, J]) => [S - (i - J) * (s - S) / 800, J]), I;
|
|
4785
4785
|
}, [g, B, l] = qe(e);
|
|
4786
4786
|
if (!g)
|
|
4787
4787
|
return "";
|
|
@@ -4798,7 +4798,7 @@ class Ga extends ae {
|
|
|
4798
4798
|
const D = r();
|
|
4799
4799
|
u.appendChild(D);
|
|
4800
4800
|
const p = ee(o);
|
|
4801
|
-
return
|
|
4801
|
+
return ie(u, p, w, C), g.outerHTML;
|
|
4802
4802
|
}
|
|
4803
4803
|
// 1 if true, 0 if false.
|
|
4804
4804
|
}
|
|
@@ -4814,7 +4814,7 @@ class ka extends ae {
|
|
|
4814
4814
|
return this.svgElement(A, e);
|
|
4815
4815
|
}
|
|
4816
4816
|
svgElement(A, e) {
|
|
4817
|
-
const t = Ae(va), n = A !== "" ? ((m) => m.charAt(0).toUpperCase() + m.substr(1).toLowerCase())(A) : "",
|
|
4817
|
+
const t = Ae(va), n = A !== "" ? ((m) => m.charAt(0).toUpperCase() + m.substr(1).toLowerCase())(A) : "", i = t.getPath(n, 0, 72, 72), s = i.toSVG(2), o = i.getBoundingBox(), r = o.x2 - o.x1, g = i.toPathData(3), B = () => {
|
|
4818
4818
|
const m = N("g");
|
|
4819
4819
|
m.classList.add("module-text-group");
|
|
4820
4820
|
const u = N("defs");
|
|
@@ -4824,11 +4824,11 @@ class ka extends ae {
|
|
|
4824
4824
|
const p = N("g");
|
|
4825
4825
|
p.classList.add("module-layer0"), m.appendChild(p), p.setAttribute("filter", "url(#shadow)"), p.innerHTML = D.outerHTML;
|
|
4826
4826
|
const I = N("g");
|
|
4827
|
-
I.classList.add("module-layer1"), m.appendChild(I), I.setAttribute("stroke-width", "3"), I.setAttribute("stroke", "rgb(45,41,38)"), I.setAttribute("fill", "rgb(45,41,38)"), I.setAttribute("transform", "translate(0.5,0)"), I.innerHTML =
|
|
4827
|
+
I.classList.add("module-layer1"), m.appendChild(I), I.setAttribute("stroke-width", "3"), I.setAttribute("stroke", "rgb(45,41,38)"), I.setAttribute("fill", "rgb(45,41,38)"), I.setAttribute("transform", "translate(0.5,0)"), I.innerHTML = s;
|
|
4828
4828
|
const F = N("g");
|
|
4829
|
-
F.classList.add("module-layer2"), m.appendChild(F), F.setAttribute("fill", "rgb(255,209,0)"), F.setAttribute("transform", "translate(1,-0.1)"), F.innerHTML =
|
|
4829
|
+
F.classList.add("module-layer2"), m.appendChild(F), F.setAttribute("fill", "rgb(255,209,0)"), F.setAttribute("transform", "translate(1,-0.1)"), F.innerHTML = s;
|
|
4830
4830
|
const Y = N("g");
|
|
4831
|
-
return Y.classList.add("module-layer3"), m.appendChild(Y), Y.setAttribute("fill", "white"), Y.innerHTML =
|
|
4831
|
+
return Y.classList.add("module-layer3"), m.appendChild(Y), Y.setAttribute("fill", "white"), Y.innerHTML = s, new se(m).transform(([G, S]) => [G, S + (r / 2 - G) ** 2 / (r * 6)]), m;
|
|
4832
4832
|
}, l = N("g");
|
|
4833
4833
|
l.classList.add("module-root");
|
|
4834
4834
|
const d = N("defs");
|
|
@@ -4842,7 +4842,7 @@ class ka extends ae {
|
|
|
4842
4842
|
const Q = B();
|
|
4843
4843
|
E.appendChild(Q);
|
|
4844
4844
|
const h = ee(g);
|
|
4845
|
-
return
|
|
4845
|
+
return ie(E, h, e.height, e.width, 0.35, 0.65), _e(l.outerHTML);
|
|
4846
4846
|
}
|
|
4847
4847
|
}
|
|
4848
4848
|
async function At(c) {
|
|
@@ -4871,7 +4871,7 @@ class ue extends Te {
|
|
|
4871
4871
|
}
|
|
4872
4872
|
}
|
|
4873
4873
|
class ba {
|
|
4874
|
-
constructor(A, e, t, a, n,
|
|
4874
|
+
constructor(A, e, t, a, n, i, s, o, r, g, B = !1, l, d = !1, w = !1) {
|
|
4875
4875
|
this.workflowStatePromiseQueue = new ze(1), this.initialized = !1, this.readOnly = !1, this.isReloadedTransaction = !1, this.singleVariantsRenderable = !1, this.renderLayouts = () => {
|
|
4876
4876
|
var Q;
|
|
4877
4877
|
if (!this.previewService)
|
|
@@ -4884,7 +4884,7 @@ class ba {
|
|
|
4884
4884
|
C,
|
|
4885
4885
|
this.getProduct().overlayImageUrl
|
|
4886
4886
|
);
|
|
4887
|
-
}, this.updateTransaction = n, this.commandContext = a, this.reloadedState = g, this.transaction =
|
|
4887
|
+
}, this.updateTransaction = n, this.commandContext = a, this.reloadedState = g, this.transaction = i, this.readOnly = B, this.singleVariantsRenderable = w, this.confirmedDesign = !1, this.editedSteps = {}, this.informationResults = [], this.mandatorySteps = {}, this.pendingUpdates = [], this.selectionCost = 0, this.workflow = A, this.stepSpecificServices = {}, this.profanityFilter = e, this.pollers = [], this.allScenes = [], this.layouts = t, this.product = s, this.previewService = o, this.modelContainer = l, this.stepElements = {}, this.stepInitialised = {}, this.stepMetadata = {}, this.stepSelections = {}, this.storage = {}, this.confirmCallbacks = [], this.editedCallbacks = [], this.elementsCallbacks = [], this.informationResultCallbacks = [], this.initCallbacks = [], this.mandatoryCallbacks = [], this.makingAdjustmentsCallback = [], this.metadataCallbacks = [], this.selectionCallbacks = [], this.stepSpecificStorageCallbacks = {}, this.storageCallbacks = [], this.currentAdjustingStepId = "", this.renderableContextService = r, this.isReloadedTransaction = d, this.initializationPromise = this.initializeDefaultWorkflowState(A), this.initializationPromise.then(() => {
|
|
4888
4888
|
this.initialized = !0;
|
|
4889
4889
|
}), this.initializationPromise.catch((C) => {
|
|
4890
4890
|
throw console.error(C), this.initialized = !1, new Error("Workflow initialization failed due to an error. See console.");
|
|
@@ -4897,17 +4897,17 @@ class ba {
|
|
|
4897
4897
|
async initializeDefaultWorkflowState(A) {
|
|
4898
4898
|
const e = () => {
|
|
4899
4899
|
var g, B;
|
|
4900
|
-
const
|
|
4901
|
-
if (!
|
|
4900
|
+
const s = this.workflow.finalizeStepConfig;
|
|
4901
|
+
if (!s)
|
|
4902
4902
|
return;
|
|
4903
|
-
const o =
|
|
4903
|
+
const o = s.lookAtAnimation, r = s.modelAnimation;
|
|
4904
4904
|
o && ((g = this.previewService) == null || g.executeCameraAnimation(o)), r && ((B = this.modelContainer) == null || B.executeAnimation(r));
|
|
4905
4905
|
};
|
|
4906
|
-
this.reloadedState && this.reloadedState.serializableWorkflow.steps.forEach((
|
|
4907
|
-
this.storage[
|
|
4908
|
-
}), this.allScenes = await
|
|
4909
|
-
const a = eA(this.allScenes, this.stepSelections).map((
|
|
4910
|
-
this.commandContext.apply(new R(
|
|
4906
|
+
this.reloadedState && this.reloadedState.serializableWorkflow.steps.forEach((s) => {
|
|
4907
|
+
this.storage[s.stepName] = s.storage || {};
|
|
4908
|
+
}), this.allScenes = await sa(A);
|
|
4909
|
+
const a = eA(this.allScenes, this.stepSelections).map((s) => s.silentSteps).flat(), { stepElements: n, commands: i } = await this.stepElementsForIntroducedSilentSteps(a, !!this.reloadedState);
|
|
4910
|
+
this.commandContext.apply(new R(i), !0), this.stepElements = { ...this.stepElements, ...n }, await this.ensureStepsAreLoaded(), !this.isReloadedTransaction && this.updateStateWithServer(), this.renderLayouts(), this.reloadedState && e();
|
|
4911
4911
|
}
|
|
4912
4912
|
getProduct() {
|
|
4913
4913
|
return this.product;
|
|
@@ -5078,18 +5078,18 @@ class ba {
|
|
|
5078
5078
|
console.error(`Failed to read option id from step: ${n.stepName}`);
|
|
5079
5079
|
return;
|
|
5080
5080
|
}
|
|
5081
|
-
const
|
|
5082
|
-
if (
|
|
5081
|
+
const i = ((r = this.stepSelections[n.stepName]) == null ? void 0 : r.selectedVariants) || [];
|
|
5082
|
+
if (i.length === 0)
|
|
5083
5083
|
return;
|
|
5084
|
-
const
|
|
5084
|
+
const s = i[0];
|
|
5085
5085
|
if (n.type === f.Model) {
|
|
5086
5086
|
if (!this.modelContainer)
|
|
5087
5087
|
throw new v(
|
|
5088
5088
|
"We should always have a model container when injecting a preview!"
|
|
5089
5089
|
);
|
|
5090
|
-
const B = (g =
|
|
5090
|
+
const B = (g = s.asset) == null ? void 0 : g.fileLink;
|
|
5091
5091
|
if (!B) {
|
|
5092
|
-
console.error(`Failed to read model url from variant: ${
|
|
5092
|
+
console.error(`Failed to read model url from variant: ${s.id} for step: ${n.stepName}`);
|
|
5093
5093
|
return;
|
|
5094
5094
|
}
|
|
5095
5095
|
const l = n.data;
|
|
@@ -5102,9 +5102,9 @@ class ba {
|
|
|
5102
5102
|
l.replaceProductModel || !1
|
|
5103
5103
|
);
|
|
5104
5104
|
} else {
|
|
5105
|
-
const B =
|
|
5105
|
+
const B = s.material;
|
|
5106
5106
|
if (!B) {
|
|
5107
|
-
console.error(`Failed to read material from variant: ${
|
|
5107
|
+
console.error(`Failed to read material from variant: ${s.id} for step: ${n.stepName}`);
|
|
5108
5108
|
return;
|
|
5109
5109
|
}
|
|
5110
5110
|
n.data.targetMaterials.forEach((d) => {
|
|
@@ -5140,10 +5140,10 @@ class ba {
|
|
|
5140
5140
|
const A = [];
|
|
5141
5141
|
return this.allScenes.forEach((e) => {
|
|
5142
5142
|
e.renderableSteps.forEach((t) => {
|
|
5143
|
-
var n,
|
|
5143
|
+
var n, i;
|
|
5144
5144
|
const a = { stepName: t.stepName };
|
|
5145
|
-
a.storage = this.storage[t.stepName], a.selectedVariants = (
|
|
5146
|
-
(
|
|
5145
|
+
a.storage = this.storage[t.stepName], a.selectedVariants = (i = (n = this.stepSelections[t.stepName]) == null ? void 0 : n.selectedVariants) == null ? void 0 : i.map(
|
|
5146
|
+
(s) => ({ id: s.id, priceModifier: s.priceModifier })
|
|
5147
5147
|
), A.push(a);
|
|
5148
5148
|
});
|
|
5149
5149
|
}), { steps: A };
|
|
@@ -5197,12 +5197,12 @@ class ba {
|
|
|
5197
5197
|
}, this.onMetadataChange();
|
|
5198
5198
|
}
|
|
5199
5199
|
removeElements(A) {
|
|
5200
|
-
const e = (t, a) => Object.keys(t).reduce((n,
|
|
5201
|
-
const
|
|
5200
|
+
const e = (t, a) => Object.keys(t).reduce((n, i) => {
|
|
5201
|
+
const s = [...t[i] || []];
|
|
5202
5202
|
return a.forEach((o) => {
|
|
5203
|
-
const r =
|
|
5204
|
-
r > -1 &&
|
|
5205
|
-
}), n[
|
|
5203
|
+
const r = s.findIndex((g) => g.id === o.id);
|
|
5204
|
+
r > -1 && s.splice(r, 1);
|
|
5205
|
+
}), n[i] = s, n;
|
|
5206
5206
|
}, {});
|
|
5207
5207
|
this.stepElements = e(this.stepElements, A);
|
|
5208
5208
|
}
|
|
@@ -5233,16 +5233,16 @@ class ba {
|
|
|
5233
5233
|
return Promise.reject("Unknown silent step. This is a bug");
|
|
5234
5234
|
}, n = A.filter(
|
|
5235
5235
|
(r) => !this.stepInitialised[r.stepName]
|
|
5236
|
-
),
|
|
5236
|
+
), i = {
|
|
5237
5237
|
stepElements: {},
|
|
5238
5238
|
commands: []
|
|
5239
|
-
},
|
|
5239
|
+
}, s = [];
|
|
5240
5240
|
for (const r of n)
|
|
5241
|
-
this.markStepsAsInitialised([r.stepName]), e ||
|
|
5242
|
-
const o = await Promise.all(
|
|
5241
|
+
this.markStepsAsInitialised([r.stepName]), e || s.push(a(r, this.layouts, t));
|
|
5242
|
+
const o = await Promise.all(s);
|
|
5243
5243
|
for (const r of o)
|
|
5244
|
-
|
|
5245
|
-
return
|
|
5244
|
+
i.stepElements[r.step.stepName] = r.results.map((g) => g.regionElement), i.commands = [...i.commands, ...r.results.map((g) => g.command)];
|
|
5245
|
+
return i;
|
|
5246
5246
|
}
|
|
5247
5247
|
getStepStorage(A) {
|
|
5248
5248
|
return this.storage[A];
|
|
@@ -5275,7 +5275,7 @@ class ba {
|
|
|
5275
5275
|
}, this.selectionCost = Object.values(this.stepSelections).reduce((p, I) => p + I.selectedVariants.map((F) => F.priceModifier || 0).reduce((F, Y) => F + Y, 0), 0), this.workflow.steps.forEach((p) => {
|
|
5276
5276
|
tA(p, this.stepSelections) || (this.stepInitialised[p.stepName] = !1, delete this.stepMetadata[p.stepName], delete this.stepSelections[p.stepName], delete this.storage[p.stepName]);
|
|
5277
5277
|
});
|
|
5278
|
-
const
|
|
5278
|
+
const i = this.allScenes, s = eA(i, n), o = eA(i, this.stepSelections), r = s.map((p) => p.silentSteps).flat(), B = o.map((p) => p.silentSteps).flat().filter(
|
|
5279
5279
|
(p) => !r.some((I) => I.stepName === p.stepName)
|
|
5280
5280
|
);
|
|
5281
5281
|
r.forEach((p) => {
|
|
@@ -5365,7 +5365,7 @@ class ba {
|
|
|
5365
5365
|
);
|
|
5366
5366
|
break;
|
|
5367
5367
|
case f.Shape:
|
|
5368
|
-
t.push(
|
|
5368
|
+
t.push(sA.init(o, this, this.reloadedState));
|
|
5369
5369
|
break;
|
|
5370
5370
|
case f.Text:
|
|
5371
5371
|
t.push(z.init(o, this, this.reloadedState));
|
|
@@ -5375,11 +5375,11 @@ class ba {
|
|
|
5375
5375
|
if (o.status === "rejected")
|
|
5376
5376
|
throw new Error(`Step initialization failed: ${o.reason}`);
|
|
5377
5377
|
return o.value;
|
|
5378
|
-
}),
|
|
5379
|
-
|
|
5380
|
-
for (const o of
|
|
5378
|
+
}), i = n.filter((o) => !!o && !!o.command).map((o) => o.command), s = n.filter((o) => !!o && !!o.followup).map((o) => o.followup);
|
|
5379
|
+
i && i.length > 0 && this.commandContext.apply(new R(i), !0);
|
|
5380
|
+
for (const o of s)
|
|
5381
5381
|
await o();
|
|
5382
|
-
|
|
5382
|
+
s.length > 0 && await this.ensureStepsAreLoaded(), this.onInitChange();
|
|
5383
5383
|
}
|
|
5384
5384
|
onConfirmChange() {
|
|
5385
5385
|
this.confirmCallbacks.forEach((A) => A(this.confirmedDesign));
|
|
@@ -5482,8 +5482,8 @@ class V {
|
|
|
5482
5482
|
* @returns The URL for a thumbnail resource configured on this variant.
|
|
5483
5483
|
*/
|
|
5484
5484
|
getThumbnail() {
|
|
5485
|
-
var t, a, n,
|
|
5486
|
-
const A = (n = (a = (t = this.variantData.thumbnail) == null ? void 0 : t.versions) == null ? void 0 : a.find((
|
|
5485
|
+
var t, a, n, i;
|
|
5486
|
+
const A = (n = (a = (t = this.variantData.thumbnail) == null ? void 0 : t.versions) == null ? void 0 : a.find((s) => s.name === "thumbnail")) == null ? void 0 : n.link, e = (i = this.variantData.thumbnail) == null ? void 0 : i.fileLink;
|
|
5487
5487
|
return A || e;
|
|
5488
5488
|
}
|
|
5489
5489
|
/**
|
|
@@ -5730,7 +5730,7 @@ class ja extends j {
|
|
|
5730
5730
|
}
|
|
5731
5731
|
selectVariant(A) {
|
|
5732
5732
|
const e = A.getResource();
|
|
5733
|
-
return
|
|
5733
|
+
return sA.selectVariant(
|
|
5734
5734
|
this.step,
|
|
5735
5735
|
{
|
|
5736
5736
|
fill: e.color,
|
|
@@ -5748,7 +5748,7 @@ class ja extends j {
|
|
|
5748
5748
|
* @deprecated The shape step can now pass through colors returned by getColors via selectVariant. Please swap setColor for selectVariant.
|
|
5749
5749
|
*/
|
|
5750
5750
|
setColor(A) {
|
|
5751
|
-
return
|
|
5751
|
+
return sA.selectVariant(
|
|
5752
5752
|
this.step,
|
|
5753
5753
|
A,
|
|
5754
5754
|
this.manager.getRegionElements(this.step.stepName) || [],
|
|
@@ -5760,7 +5760,7 @@ class ja extends j {
|
|
|
5760
5760
|
* @returns A list of color definitions that are currently applied to the illustration.
|
|
5761
5761
|
*/
|
|
5762
5762
|
getColors() {
|
|
5763
|
-
return
|
|
5763
|
+
return sA.availableColours(this.step);
|
|
5764
5764
|
}
|
|
5765
5765
|
/**
|
|
5766
5766
|
* Allows for setting a custom color when the custom variant is selected. Will
|
|
@@ -5772,7 +5772,7 @@ class ja extends j {
|
|
|
5772
5772
|
throw new Error(
|
|
5773
5773
|
"Custom colors can only be set on a non-custom variant. Please add a custom variant to the step."
|
|
5774
5774
|
);
|
|
5775
|
-
return
|
|
5775
|
+
return sA.setCustomColor(A, this.step, this.manager);
|
|
5776
5776
|
}
|
|
5777
5777
|
getCustomColor() {
|
|
5778
5778
|
var e, t;
|
|
@@ -5864,8 +5864,8 @@ class Va extends j {
|
|
|
5864
5864
|
* @param shouldCustomizeAll When true the user can configure the entire text string.
|
|
5865
5865
|
*/
|
|
5866
5866
|
setFullTextCustomization(A) {
|
|
5867
|
-
var
|
|
5868
|
-
const e = ((
|
|
5867
|
+
var i;
|
|
5868
|
+
const e = ((i = this.manager.getStepStorage(this.step.stepName)) == null ? void 0 : i.inputText) || "", t = this.step.data.replaceableText !== void 0 ? this.step.data.replaceableText.replace("{{}}", e) : e, a = A ? t : this.step.data.defaultText;
|
|
5869
5869
|
return this.manager.updateStorage(this.step.stepName, {
|
|
5870
5870
|
customiseAllText: A,
|
|
5871
5871
|
text: a,
|
|
@@ -5882,10 +5882,10 @@ class Va extends j {
|
|
|
5882
5882
|
input: A
|
|
5883
5883
|
}, t = z.findLayoutElements(this.manager, this.step), a = z.filterUnsupportedCharacters(A, (d = t[0]) == null ? void 0 : d.fontData);
|
|
5884
5884
|
!!this.step.data && !!this.step.data.maxLength && a.length > this.step.data.maxLength || (e.input = a);
|
|
5885
|
-
const
|
|
5886
|
-
if (this.manager.updateStorage(this.step.stepName,
|
|
5885
|
+
const i = t.length <= 0, s = i ? { inputText: a, text: a } : { inputText: a };
|
|
5886
|
+
if (this.manager.updateStorage(this.step.stepName, s), this.manager.updateMetadata(this.step.stepName, {
|
|
5887
5887
|
text: a
|
|
5888
|
-
}),
|
|
5888
|
+
}), i)
|
|
5889
5889
|
return e;
|
|
5890
5890
|
const { command: o, errors: r, helperText: g } = z.updateInputText(
|
|
5891
5891
|
a,
|
|
@@ -5991,7 +5991,7 @@ class wA {
|
|
|
5991
5991
|
case f.Model:
|
|
5992
5992
|
return new Ta(A, e);
|
|
5993
5993
|
case f.Frame:
|
|
5994
|
-
return new
|
|
5994
|
+
return new Ei(A, e);
|
|
5995
5995
|
default:
|
|
5996
5996
|
throw new v(`Step type ${e.type} not yet supported in Core SDK`);
|
|
5997
5997
|
}
|
|
@@ -6100,36 +6100,36 @@ const tt = M`
|
|
|
6100
6100
|
})).data) == null ? void 0 : e.designCreateMany;
|
|
6101
6101
|
}, XA = (c, A, e) => {
|
|
6102
6102
|
const t = (n) => {
|
|
6103
|
-
const
|
|
6103
|
+
const i = {};
|
|
6104
6104
|
if (n.type === "Frame") {
|
|
6105
|
-
const
|
|
6106
|
-
if (!
|
|
6107
|
-
return
|
|
6108
|
-
|
|
6105
|
+
const s = c[n.stepName], o = n.data;
|
|
6106
|
+
if (!s || !s.image || o.hideImageInCart && e)
|
|
6107
|
+
return i;
|
|
6108
|
+
i[`${n.stepTitle} image`] = s.image;
|
|
6109
6109
|
}
|
|
6110
6110
|
if (n.type === "Illustration") {
|
|
6111
|
-
const
|
|
6112
|
-
if (!
|
|
6113
|
-
return
|
|
6114
|
-
if (
|
|
6115
|
-
const r =
|
|
6116
|
-
|
|
6111
|
+
const s = c[n.stepName], o = n.data;
|
|
6112
|
+
if (!s || o.hideColorsInCart && e || !s.colors)
|
|
6113
|
+
return i;
|
|
6114
|
+
if (s.colors.length > 0) {
|
|
6115
|
+
const r = s.colors.join(", ").toUpperCase();
|
|
6116
|
+
i[`${n.stepTitle} colors`] = r;
|
|
6117
6117
|
}
|
|
6118
6118
|
}
|
|
6119
6119
|
if (n.type === "Module") {
|
|
6120
|
-
const
|
|
6121
|
-
if (!
|
|
6122
|
-
return
|
|
6123
|
-
|
|
6120
|
+
const s = c[n.stepName], o = n.data;
|
|
6121
|
+
if (!s || s.text === void 0 || s.text === null || o.hideTextInCart && e)
|
|
6122
|
+
return i;
|
|
6123
|
+
i[`${n.stepTitle} text`] = s.text;
|
|
6124
6124
|
}
|
|
6125
6125
|
if (n.type === "Text") {
|
|
6126
|
-
const
|
|
6127
|
-
if (!
|
|
6128
|
-
return
|
|
6126
|
+
const s = c[n.stepName];
|
|
6127
|
+
if (!s)
|
|
6128
|
+
return i;
|
|
6129
6129
|
const o = n.data;
|
|
6130
|
-
(!o.hideTextInCart || !e &&
|
|
6130
|
+
(!o.hideTextInCart || !e && s.text !== void 0 && s.text !== null) && (i[`${n.stepTitle} text`] = s.text), s.color && (!o.hideColorInCart || !e) && (i[`${n.stepTitle} color`] = s.color);
|
|
6131
6131
|
}
|
|
6132
|
-
return
|
|
6132
|
+
return i;
|
|
6133
6133
|
}, a = {};
|
|
6134
6134
|
return A.steps.forEach((n) => {
|
|
6135
6135
|
Object.assign(a, t(n));
|
|
@@ -6139,35 +6139,35 @@ const tt = M`
|
|
|
6139
6139
|
let n;
|
|
6140
6140
|
if (e) {
|
|
6141
6141
|
n = XA(e, A, !1);
|
|
6142
|
-
for (const
|
|
6143
|
-
a[
|
|
6144
|
-
value: n[
|
|
6142
|
+
for (const i of Object.keys(n))
|
|
6143
|
+
a[i] = {
|
|
6144
|
+
value: n[i],
|
|
6145
6145
|
priceModifier: 0
|
|
6146
6146
|
};
|
|
6147
6147
|
} else if (t) {
|
|
6148
6148
|
n = t;
|
|
6149
|
-
for (const
|
|
6150
|
-
a[
|
|
6151
|
-
value: n[
|
|
6149
|
+
for (const i of Object.keys(n))
|
|
6150
|
+
a[i] = {
|
|
6151
|
+
value: n[i],
|
|
6152
6152
|
priceModifier: 0
|
|
6153
6153
|
};
|
|
6154
6154
|
}
|
|
6155
|
-
for (const
|
|
6156
|
-
const
|
|
6157
|
-
if (
|
|
6155
|
+
for (const i of Object.keys(c)) {
|
|
6156
|
+
const s = c[i], o = A.steps.find((r) => r.stepTitle === i);
|
|
6157
|
+
if (s.length === 1)
|
|
6158
6158
|
a[`${o == null ? void 0 : o.stepTitle} selection`] = {
|
|
6159
|
-
value:
|
|
6160
|
-
priceModifier:
|
|
6159
|
+
value: s[0].name,
|
|
6160
|
+
priceModifier: s[0].priceModifier
|
|
6161
6161
|
};
|
|
6162
|
-
else if (
|
|
6163
|
-
for (let r = 0; r <
|
|
6162
|
+
else if (s.length > 1)
|
|
6163
|
+
for (let r = 0; r < s.length; r++)
|
|
6164
6164
|
a[`${o == null ? void 0 : o.stepTitle} selection ${r + 1}`] = {
|
|
6165
|
-
value:
|
|
6166
|
-
priceModifier:
|
|
6165
|
+
value: s[r].name,
|
|
6166
|
+
priceModifier: s[r].priceModifier
|
|
6167
6167
|
};
|
|
6168
6168
|
}
|
|
6169
6169
|
return a;
|
|
6170
|
-
}, at = (c, A, e, t, a, n,
|
|
6170
|
+
}, at = (c, A, e, t, a, n, i, s) => {
|
|
6171
6171
|
var w, C;
|
|
6172
6172
|
const o = A.basePrice || 0, r = c.priceModifierTotal || 0, g = _a(t, e, void 0, n), l = (x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map()).get(c.id), d = {
|
|
6173
6173
|
additionalExternalProductId: (w = c.integrationProduct) == null ? void 0 : w.additionalExternalProductId,
|
|
@@ -6179,9 +6179,9 @@ const tt = M`
|
|
|
6179
6179
|
exportedData: g,
|
|
6180
6180
|
externalCartProductId: c.externalCartProductId,
|
|
6181
6181
|
externalCartProductVariantId: c.externalCartProductVariantId,
|
|
6182
|
-
lineItemImageUrl:
|
|
6182
|
+
lineItemImageUrl: i || "",
|
|
6183
6183
|
optionsCost: r,
|
|
6184
|
-
processExecutionId:
|
|
6184
|
+
processExecutionId: s,
|
|
6185
6185
|
transactionId: c.id,
|
|
6186
6186
|
transactionOwnerId: l,
|
|
6187
6187
|
weight: A.weight,
|
|
@@ -6189,7 +6189,7 @@ const tt = M`
|
|
|
6189
6189
|
workflowViewerReadOnlyLink: c.workflowViewerReadOnlyLink || ""
|
|
6190
6190
|
};
|
|
6191
6191
|
return n && (d.metadata = n), t && (d.selectedVariants = t), a && (d.sku = a), d;
|
|
6192
|
-
}, nt = async (c, A, e, t, a, n,
|
|
6192
|
+
}, nt = async (c, A, e, t, a, n, i, s, o, r) => {
|
|
6193
6193
|
var F;
|
|
6194
6194
|
await (async () => {
|
|
6195
6195
|
var T;
|
|
@@ -6242,11 +6242,11 @@ const tt = M`
|
|
|
6242
6242
|
Y,
|
|
6243
6243
|
u[Y].map((y) => y.id)
|
|
6244
6244
|
])
|
|
6245
|
-
), p = await
|
|
6245
|
+
), p = await s(w, a.id);
|
|
6246
6246
|
return {
|
|
6247
6247
|
designDetails: (() => {
|
|
6248
6248
|
const Y = {
|
|
6249
|
-
name:
|
|
6249
|
+
name: i,
|
|
6250
6250
|
layouts: e.map((y) => ({
|
|
6251
6251
|
index: y.index,
|
|
6252
6252
|
panelId: y.panelId
|
|
@@ -6273,7 +6273,7 @@ const tt = M`
|
|
|
6273
6273
|
cartSelectionsWithPrices: h,
|
|
6274
6274
|
cartMetadata: C
|
|
6275
6275
|
};
|
|
6276
|
-
}, An = async (c, A, e, t, a, n,
|
|
6276
|
+
}, An = async (c, A, e, t, a, n, i, s, o, r, g) => {
|
|
6277
6277
|
var Q, h;
|
|
6278
6278
|
o("workflow.steps.finish.finalize.buildingLayouts");
|
|
6279
6279
|
const { designDetails: B, cartSelectionsWithPrices: l, cartMetadata: d } = await nt(
|
|
@@ -6282,8 +6282,8 @@ const tt = M`
|
|
|
6282
6282
|
e,
|
|
6283
6283
|
t,
|
|
6284
6284
|
n,
|
|
6285
|
-
s,
|
|
6286
6285
|
i,
|
|
6286
|
+
s,
|
|
6287
6287
|
r,
|
|
6288
6288
|
g
|
|
6289
6289
|
);
|
|
@@ -6305,8 +6305,8 @@ const tt = M`
|
|
|
6305
6305
|
);
|
|
6306
6306
|
}, en = async (c, A, e) => {
|
|
6307
6307
|
A("workflow.steps.finish.finalize.buildingLayouts"), await Promise.all(
|
|
6308
|
-
c.map(async (
|
|
6309
|
-
await
|
|
6308
|
+
c.map(async (s) => {
|
|
6309
|
+
await s.workflowManager.outstandingRequestsPromise();
|
|
6310
6310
|
})
|
|
6311
6311
|
);
|
|
6312
6312
|
const a = await (async () => {
|
|
@@ -6321,37 +6321,37 @@ const tt = M`
|
|
|
6321
6321
|
o.errors && console.log("Server Error:", g.message);
|
|
6322
6322
|
}), null) : (r = o.data) != null && r.transactions ? o.data.transactions.map((g) => g.workflowState ?? null) : null;
|
|
6323
6323
|
})(), n = await Promise.all(
|
|
6324
|
-
c.map(async (
|
|
6325
|
-
|
|
6326
|
-
|
|
6327
|
-
|
|
6328
|
-
|
|
6329
|
-
|
|
6330
|
-
|
|
6331
|
-
|
|
6324
|
+
c.map(async (s, o) => await nt(
|
|
6325
|
+
s.workflowManager,
|
|
6326
|
+
s.workflow,
|
|
6327
|
+
s.layouts,
|
|
6328
|
+
s.getReducerState,
|
|
6329
|
+
s.transaction,
|
|
6330
|
+
s.workflowSelections,
|
|
6331
|
+
s.designName,
|
|
6332
6332
|
e ?? (() => Promise.resolve(void 0)),
|
|
6333
|
-
|
|
6333
|
+
s.workflowMetadata,
|
|
6334
6334
|
a ? a[o] : void 0
|
|
6335
6335
|
))
|
|
6336
6336
|
);
|
|
6337
6337
|
A("workflow.steps.finish.finalize.creatingDesign");
|
|
6338
|
-
const
|
|
6339
|
-
if (!
|
|
6338
|
+
const i = await $a(n.map((s) => s.designDetails));
|
|
6339
|
+
if (!i)
|
|
6340
6340
|
throw new Error("Failed to create designs");
|
|
6341
6341
|
return A("workflow.steps.finish.finalize.updatingTransaction"), Promise.all(
|
|
6342
|
-
|
|
6342
|
+
i.map(async (s, o) => {
|
|
6343
6343
|
var l;
|
|
6344
|
-
const r = c[o], g = n[o], B =
|
|
6344
|
+
const r = c[o], g = n[o], B = s.transaction;
|
|
6345
6345
|
return await at(
|
|
6346
6346
|
B,
|
|
6347
6347
|
r.product,
|
|
6348
6348
|
r.workflow,
|
|
6349
6349
|
g.cartSelectionsWithPrices,
|
|
6350
|
-
|
|
6350
|
+
s.sku,
|
|
6351
6351
|
g.cartMetadata,
|
|
6352
6352
|
//lineItemImageLink,
|
|
6353
6353
|
void 0,
|
|
6354
|
-
(l =
|
|
6354
|
+
(l = s.processExecution) == null ? void 0 : l.id
|
|
6355
6355
|
);
|
|
6356
6356
|
})
|
|
6357
6357
|
);
|
|
@@ -6445,16 +6445,16 @@ class EA {
|
|
|
6445
6445
|
await LA.getSavedDesignByTransaction(
|
|
6446
6446
|
this.getWorkflowManager().getTransaction().id
|
|
6447
6447
|
) && this.save();
|
|
6448
|
-
}, 2500), this.getCanvasObjectURLAsync = async (n) => new Promise((
|
|
6448
|
+
}, 2500), this.getCanvasObjectURLAsync = async (n) => new Promise((i, s) => {
|
|
6449
6449
|
try {
|
|
6450
6450
|
n.toBlob((o) => {
|
|
6451
6451
|
if (o) {
|
|
6452
6452
|
const r = URL.createObjectURL(o);
|
|
6453
|
-
|
|
6453
|
+
i(r);
|
|
6454
6454
|
}
|
|
6455
6455
|
});
|
|
6456
6456
|
} catch (o) {
|
|
6457
|
-
|
|
6457
|
+
s(o);
|
|
6458
6458
|
}
|
|
6459
6459
|
}), !e.workflow)
|
|
6460
6460
|
throw new Error("No Workflow ID provided.");
|
|
@@ -6483,15 +6483,15 @@ class EA {
|
|
|
6483
6483
|
e.isReloadedTransaction,
|
|
6484
6484
|
e.singleVariantsRenderable
|
|
6485
6485
|
), this.workflowManager.addSelectionCallback((n) => {
|
|
6486
|
-
const
|
|
6487
|
-
const o =
|
|
6486
|
+
const i = n.traversableScenes.map((s) => {
|
|
6487
|
+
const o = s.renderableSteps.map((r) => r.stepName);
|
|
6488
6488
|
return {
|
|
6489
|
-
id:
|
|
6490
|
-
title:
|
|
6489
|
+
id: s.name,
|
|
6490
|
+
title: s.title,
|
|
6491
6491
|
renderableSteps: o
|
|
6492
6492
|
};
|
|
6493
6493
|
});
|
|
6494
|
-
this.renderableScenes =
|
|
6494
|
+
this.renderableScenes = i, this.renderableSceneCallbacks.forEach((s) => s(i));
|
|
6495
6495
|
});
|
|
6496
6496
|
}
|
|
6497
6497
|
getClient() {
|
|
@@ -6516,10 +6516,10 @@ class EA {
|
|
|
6516
6516
|
}
|
|
6517
6517
|
let n = 2048;
|
|
6518
6518
|
e && e <= 2048 && (n = e);
|
|
6519
|
-
const
|
|
6519
|
+
const i = fA(n, n), s = this.commandContext.getAllLayouts(), o = t.defaultPreviewPanelIndex || 0, r = t.panels[o], g = s.find((u) => {
|
|
6520
6520
|
var D;
|
|
6521
6521
|
return ((D = u.layoutState) == null ? void 0 : D.layout.panelId) === (r == null ? void 0 : r.name);
|
|
6522
|
-
}) ||
|
|
6522
|
+
}) || s[0], B = g.layoutState.layout.previewRegion ? {
|
|
6523
6523
|
x: g.layoutState.layout.previewRegion.left,
|
|
6524
6524
|
y: g.layoutState.layout.previewRegion.top,
|
|
6525
6525
|
width: g.layoutState.layout.previewRegion.width,
|
|
@@ -6529,7 +6529,7 @@ class EA {
|
|
|
6529
6529
|
y: 0,
|
|
6530
6530
|
width: g.layoutState.layout.width,
|
|
6531
6531
|
height: g.layoutState.layout.height
|
|
6532
|
-
}, l = this.commandContext.getLayoutById(g.layoutState.layout.id), d =
|
|
6532
|
+
}, l = this.commandContext.getLayoutById(g.layoutState.layout.id), d = i.getContext("2d");
|
|
6533
6533
|
if (!d)
|
|
6534
6534
|
throw new UA("Failed to obtain 2D context for preview image creation");
|
|
6535
6535
|
const w = Fe(l.layoutState.layout, l.layoutState.elements, {
|
|
@@ -6546,8 +6546,8 @@ class EA {
|
|
|
6546
6546
|
DOMParser: Se(),
|
|
6547
6547
|
fetch: qA
|
|
6548
6548
|
})).render();
|
|
6549
|
-
const Q = await this.getCanvasObjectURLAsync(
|
|
6550
|
-
return
|
|
6549
|
+
const Q = await this.getCanvasObjectURLAsync(i);
|
|
6550
|
+
return i.toDataURL(Q);
|
|
6551
6551
|
}
|
|
6552
6552
|
getStepById(A) {
|
|
6553
6553
|
const e = this.getWorkflowManager().getWorkflow().steps.find((t) => t.stepName === A);
|
|
@@ -6571,17 +6571,28 @@ class EA {
|
|
|
6571
6571
|
e += t.selections.map((a) => a.priceModifier).reduce((a, n) => a + n);
|
|
6572
6572
|
}), e;
|
|
6573
6573
|
}
|
|
6574
|
-
getBasePriceSubunits() {
|
|
6575
|
-
|
|
6574
|
+
getBasePriceSubunits(A) {
|
|
6575
|
+
const e = this.getWorkflowManager().getProduct().basePrice || 0;
|
|
6576
|
+
if (A) {
|
|
6577
|
+
const t = this.getAdditionalProductPriceSubunits() || 0;
|
|
6578
|
+
return e + t;
|
|
6579
|
+
}
|
|
6580
|
+
return e;
|
|
6581
|
+
}
|
|
6582
|
+
getAdditionalProductPriceSubunits() {
|
|
6583
|
+
var e;
|
|
6584
|
+
const A = this.getWorkflowManager().getTransaction().integrationProduct;
|
|
6585
|
+
if ((e = A == null ? void 0 : A.additionalIntegrationProduct) != null && e.product)
|
|
6586
|
+
return A.additionalIntegrationProduct.product.basePrice || 0;
|
|
6576
6587
|
}
|
|
6577
6588
|
getTotalPriceSubunits() {
|
|
6578
6589
|
return this.getBasePriceSubunits() + this.getSelectionPriceSubunits();
|
|
6579
6590
|
}
|
|
6580
6591
|
async copySelectionsViaGlobalConfiguration(A, e, t) {
|
|
6581
|
-
const a = await A.getGlobalProperties(), n = t == null ? void 0 : t.map((r) => r.getId()),
|
|
6582
|
-
|
|
6592
|
+
const a = await A.getGlobalProperties(), n = t == null ? void 0 : t.map((r) => r.getId()), i = this.getSteps().filter((r) => n === void 0 || n.includes(r.getId())), s = e.getSteps(), o = (r) => a.find((g) => g.getRawProperty().name === r.aspectName);
|
|
6593
|
+
i.forEach((r) => {
|
|
6583
6594
|
const g = /* @__PURE__ */ new Set(), B = r.getRaw().globalPropertyAspectConfigurations;
|
|
6584
|
-
B !== void 0 && (B.forEach((l) => g.add(JSON.stringify(l))),
|
|
6595
|
+
B !== void 0 && (B.forEach((l) => g.add(JSON.stringify(l))), s.forEach((l) => {
|
|
6585
6596
|
const d = l.getRaw().globalPropertyAspectConfigurations;
|
|
6586
6597
|
d !== void 0 && d.forEach((w) => {
|
|
6587
6598
|
const C = o(w), E = g.has(JSON.stringify(w));
|
|
@@ -6619,8 +6630,8 @@ class EA {
|
|
|
6619
6630
|
return this.assignCustomerDetails({ emailAddress: A.email });
|
|
6620
6631
|
}
|
|
6621
6632
|
async assignCustomerDetails(A) {
|
|
6622
|
-
var
|
|
6623
|
-
const t = (x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map()).get(this.getWorkflowManager().getTransaction().id), n = (o = (
|
|
6633
|
+
var i, s, o;
|
|
6634
|
+
const t = (x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map()).get(this.getWorkflowManager().getTransaction().id), n = (o = (s = (i = (await P.getShadowGraphqlClient().mutate({
|
|
6624
6635
|
mutation: an,
|
|
6625
6636
|
variables: {
|
|
6626
6637
|
id: this.getWorkflowManager().getTransaction().id,
|
|
@@ -6630,7 +6641,7 @@ class EA {
|
|
|
6630
6641
|
context: {
|
|
6631
6642
|
transactionOwnerId: t
|
|
6632
6643
|
}
|
|
6633
|
-
})).data) == null ? void 0 :
|
|
6644
|
+
})).data) == null ? void 0 : i.transactionAddStakeholder) == null ? void 0 : s.stakeholders) == null ? void 0 : o.find(
|
|
6634
6645
|
(r) => {
|
|
6635
6646
|
var g;
|
|
6636
6647
|
return ((g = r.customer) == null ? void 0 : g.emailAddress) === A.emailAddress;
|
|
@@ -6656,8 +6667,8 @@ class EA {
|
|
|
6656
6667
|
var o;
|
|
6657
6668
|
if (A)
|
|
6658
6669
|
return A;
|
|
6659
|
-
const n = this.getWorkflowManager().getTransaction().id,
|
|
6660
|
-
return
|
|
6670
|
+
const n = this.getWorkflowManager().getTransaction().id, s = (o = (await LA.getSavedDesigns()).find((r) => r.transactionId === n)) == null ? void 0 : o.title;
|
|
6671
|
+
return s || "My design";
|
|
6661
6672
|
})(),
|
|
6662
6673
|
thumbnail: await this.createPreviewImage(!1, 256),
|
|
6663
6674
|
transactionId: this.getWorkflowManager().getTransaction().id,
|
|
@@ -6670,11 +6681,11 @@ class EA {
|
|
|
6670
6681
|
return await LA.addDesign(a), a;
|
|
6671
6682
|
}
|
|
6672
6683
|
async copy() {
|
|
6673
|
-
var
|
|
6684
|
+
var s;
|
|
6674
6685
|
const A = HA(this.getCommandContext().getState());
|
|
6675
6686
|
if (!A)
|
|
6676
6687
|
throw new v("Internal state is undefined! Cannot copy experience!");
|
|
6677
|
-
const e = JSON.stringify(A.transaction), t = this.getWorkflowManager().getWorkflow(), a = new
|
|
6688
|
+
const e = JSON.stringify(A.transaction), t = this.getWorkflowManager().getWorkflow(), a = new di({}), n = (s = this.getWorkflowManager().getTransaction().integrationProduct) == null ? void 0 : s.id;
|
|
6678
6689
|
if (!n)
|
|
6679
6690
|
throw new v("Integration product id is undefined!");
|
|
6680
6691
|
return await a.initFromIntegrationProduct(n), await a.getWorkflowExperience(t.id, e, void 0);
|
|
@@ -6707,17 +6718,17 @@ class EA {
|
|
|
6707
6718
|
var a;
|
|
6708
6719
|
const A = /* @__PURE__ */ new Map(), e = this.getWorkflowManager().getWorkflowMetadata(), t = this.getWorkflowManager().getWorkflowSelections();
|
|
6709
6720
|
return Object.keys(e).forEach((n) => {
|
|
6710
|
-
const
|
|
6711
|
-
if (!
|
|
6721
|
+
const i = this.workflowManager.getWorkflow().steps.find((o) => o.stepName === n);
|
|
6722
|
+
if (!i)
|
|
6712
6723
|
return;
|
|
6713
|
-
A.has(
|
|
6714
|
-
const
|
|
6715
|
-
Object.keys(
|
|
6716
|
-
A.get(
|
|
6724
|
+
A.has(i.stepTitle) || A.set(i.stepTitle, {});
|
|
6725
|
+
const s = e[n];
|
|
6726
|
+
Object.keys(s).forEach((o) => {
|
|
6727
|
+
A.get(i.stepTitle)[o] = s[o];
|
|
6717
6728
|
});
|
|
6718
6729
|
}), (a = Object.keys(t)) == null || a.forEach((n) => {
|
|
6719
|
-
const
|
|
6720
|
-
|
|
6730
|
+
const i = this.workflowManager.getWorkflow().steps.find((s) => s.stepName === n);
|
|
6731
|
+
i && (A.has(i.stepTitle) || A.set(i.stepTitle, {}), A.get(i.stepTitle).selection = t[n].selections[0].name);
|
|
6721
6732
|
}), A;
|
|
6722
6733
|
}
|
|
6723
6734
|
}
|
|
@@ -6734,9 +6745,9 @@ const nn = [
|
|
|
6734
6745
|
"tref",
|
|
6735
6746
|
"tspan"
|
|
6736
6747
|
], sn = async (c, A, e) => {
|
|
6737
|
-
const t = A.data, a = e.data.baseUrl, n = t.assetUrl.replace("localhost", "localstack"),
|
|
6738
|
-
|
|
6739
|
-
const o =
|
|
6748
|
+
const t = A.data, a = e.data.baseUrl, n = t.assetUrl.replace("localhost", "localstack"), i = a.slice(0, 4) === "http" ? "" : "https://", s = new URL(i + a);
|
|
6749
|
+
s.searchParams.append("video", de(JSON.stringify([{ href: n }]))), s.pathname = s.pathname + (s.pathname.slice(-1) === "/" ? "" : "/");
|
|
6750
|
+
const o = s.toString(), g = `data:image/svg+xml;base64,${de(await Ge(o, { type: "svg" }))}`, B = (d) => {
|
|
6740
6751
|
const w = c.find((E) => E.panelId === d.panelId);
|
|
6741
6752
|
if (!w)
|
|
6742
6753
|
throw new O(d);
|
|
@@ -6761,10 +6772,10 @@ const nn = [
|
|
|
6761
6772
|
return console.error(d), [];
|
|
6762
6773
|
}
|
|
6763
6774
|
}, on = async (c, A, e, t) => {
|
|
6764
|
-
const a = e.data, n = a.assetUrl,
|
|
6775
|
+
const a = e.data, n = a.assetUrl, i = await zA(n);
|
|
6765
6776
|
try {
|
|
6766
|
-
const
|
|
6767
|
-
|
|
6777
|
+
const s = Mt(a, t.option);
|
|
6778
|
+
s && (A[t.stepName] = { selectedVariants: [s] });
|
|
6768
6779
|
const o = async (r) => {
|
|
6769
6780
|
var C;
|
|
6770
6781
|
const g = await yt(
|
|
@@ -6772,11 +6783,11 @@ const nn = [
|
|
|
6772
6783
|
width: 1,
|
|
6773
6784
|
height: 1
|
|
6774
6785
|
},
|
|
6775
|
-
(C =
|
|
6786
|
+
(C = s == null ? void 0 : s.asset) == null ? void 0 : C.fileLink
|
|
6776
6787
|
), B = await ZA(g), l = k(), d = c.find((E) => E.panelId === r.panelId);
|
|
6777
6788
|
if (!d)
|
|
6778
6789
|
throw new O(r);
|
|
6779
|
-
const w = $A(
|
|
6790
|
+
const w = $A(i, B, {
|
|
6780
6791
|
scale: a.scale,
|
|
6781
6792
|
left: a.x,
|
|
6782
6793
|
top: a.y
|
|
@@ -6806,28 +6817,28 @@ const nn = [
|
|
|
6806
6817
|
},
|
|
6807
6818
|
d
|
|
6808
6819
|
),
|
|
6809
|
-
new De(l,
|
|
6820
|
+
new De(l, i, w)
|
|
6810
6821
|
];
|
|
6811
6822
|
};
|
|
6812
6823
|
return (await Promise.all(t.data.regions.map((r) => o(r)))).flat();
|
|
6813
|
-
} catch (
|
|
6814
|
-
return console.error(
|
|
6824
|
+
} catch (s) {
|
|
6825
|
+
return console.error(s), [];
|
|
6815
6826
|
}
|
|
6816
6827
|
}, rn = async (c, A, e, t) => {
|
|
6817
6828
|
var D, p;
|
|
6818
6829
|
const a = e.data, n = t.option;
|
|
6819
6830
|
if (!n)
|
|
6820
6831
|
return console.error(`No option for step ${t.stepName}.`), [];
|
|
6821
|
-
const
|
|
6822
|
-
if (!
|
|
6832
|
+
const i = ((D = n.variants) == null ? void 0 : D.find((I) => I.id === a.illustrationVariantId)) || NA(n);
|
|
6833
|
+
if (!i)
|
|
6823
6834
|
return console.error(`No variant with ID: ${a.illustrationVariantId}`), [];
|
|
6824
|
-
if (!
|
|
6835
|
+
if (!i.asset)
|
|
6825
6836
|
return console.error(`No asset for variant with ID: ${a.illustrationVariantId}`), [];
|
|
6826
|
-
A[t.stepName] = { selectedVariants: [
|
|
6827
|
-
const
|
|
6828
|
-
if (!
|
|
6837
|
+
A[t.stepName] = { selectedVariants: [i] };
|
|
6838
|
+
const s = (p = i.asset) == null ? void 0 : p.fileLink;
|
|
6839
|
+
if (!s)
|
|
6829
6840
|
return console.error(`No asset link for variant with ID: ${a.illustrationVariantId}`), [];
|
|
6830
|
-
const o = await q(
|
|
6841
|
+
const o = await q(s, !0), r = /<svg.*?<\/svg>/s, g = o.match(r) || [], B = (g == null ? void 0 : g.length) > 0 ? g[0] : "", w = xe().parseFromString(B, "image/svg+xml").firstElementChild;
|
|
6831
6842
|
if (!w)
|
|
6832
6843
|
return console.error("Failed to read SVG."), [];
|
|
6833
6844
|
Pe(w);
|
|
@@ -6883,7 +6894,7 @@ const nn = [
|
|
|
6883
6894
|
return console.error(I), [];
|
|
6884
6895
|
}
|
|
6885
6896
|
}, cn = async (c, A, e) => {
|
|
6886
|
-
const t = await At(e.data.module), a = A.data, n = (
|
|
6897
|
+
const t = await At(e.data.module), a = A.data, n = (s, o) => {
|
|
6887
6898
|
const r = c.find((B) => B.panelId === o.panelId);
|
|
6888
6899
|
if (!r)
|
|
6889
6900
|
throw new O(o);
|
|
@@ -6892,7 +6903,7 @@ const nn = [
|
|
|
6892
6903
|
{
|
|
6893
6904
|
colors: {},
|
|
6894
6905
|
id: g,
|
|
6895
|
-
svg:
|
|
6906
|
+
svg: s,
|
|
6896
6907
|
type: U.Illustration,
|
|
6897
6908
|
y: o.top,
|
|
6898
6909
|
x: o.left,
|
|
@@ -6904,27 +6915,27 @@ const nn = [
|
|
|
6904
6915
|
},
|
|
6905
6916
|
r
|
|
6906
6917
|
);
|
|
6907
|
-
},
|
|
6918
|
+
}, i = e.data.regions;
|
|
6908
6919
|
try {
|
|
6909
|
-
return
|
|
6910
|
-
(
|
|
6920
|
+
return i.map(
|
|
6921
|
+
(s) => n(t.svgPrint(a.text, s), s)
|
|
6911
6922
|
);
|
|
6912
|
-
} catch (
|
|
6913
|
-
return console.error(
|
|
6923
|
+
} catch (s) {
|
|
6924
|
+
return console.error(s), [];
|
|
6914
6925
|
}
|
|
6915
6926
|
}, gn = async (c, A, e, t) => {
|
|
6916
6927
|
var g, B;
|
|
6917
6928
|
const a = e.data, n = t.option;
|
|
6918
6929
|
if (!n)
|
|
6919
6930
|
return console.error(`No option for step ${t.stepName}.`), [];
|
|
6920
|
-
const
|
|
6921
|
-
if (!
|
|
6931
|
+
const i = ((g = n.variants) == null ? void 0 : g.find((l) => l.id === a.pictureVariantId)) || NA(n);
|
|
6932
|
+
if (!i)
|
|
6922
6933
|
return console.error(`No variant with ID: ${a.pictureVariantId}`), [];
|
|
6923
|
-
if (!
|
|
6934
|
+
if (!i.asset)
|
|
6924
6935
|
return console.error(`No asset for variant with ID: ${a.pictureVariantId}`), [];
|
|
6925
|
-
A[t.stepName] = { selectedVariants: [
|
|
6926
|
-
const
|
|
6927
|
-
if (!
|
|
6936
|
+
A[t.stepName] = { selectedVariants: [i] };
|
|
6937
|
+
const s = (B = i.asset) == null ? void 0 : B.fileLink;
|
|
6938
|
+
if (!s)
|
|
6928
6939
|
return console.error(`No asset link for variant with ID: ${a.pictureVariantId}`), [];
|
|
6929
6940
|
const o = (l) => {
|
|
6930
6941
|
const d = c.find((C) => C.panelId === l.panelId);
|
|
@@ -6934,7 +6945,7 @@ const nn = [
|
|
|
6934
6945
|
return new b(
|
|
6935
6946
|
{
|
|
6936
6947
|
id: w,
|
|
6937
|
-
src:
|
|
6948
|
+
src: s,
|
|
6938
6949
|
type: U.Image,
|
|
6939
6950
|
y: l.top,
|
|
6940
6951
|
x: l.left,
|
|
@@ -6959,11 +6970,11 @@ const nn = [
|
|
|
6959
6970
|
const a = e.data, n = t.option;
|
|
6960
6971
|
if (!n)
|
|
6961
6972
|
return console.error(`No option for step ${t.stepName}.`), [];
|
|
6962
|
-
const
|
|
6963
|
-
if (!
|
|
6973
|
+
const i = ((r = n.variants) == null ? void 0 : r.find((g) => g.id === a.colorVariantId)) || NA(n);
|
|
6974
|
+
if (!i)
|
|
6964
6975
|
return console.error(`No variant with ID: ${a.colorVariantId}`), [];
|
|
6965
|
-
A[t.stepName] = { selectedVariants: [
|
|
6966
|
-
const
|
|
6976
|
+
A[t.stepName] = { selectedVariants: [i] };
|
|
6977
|
+
const s = (g) => {
|
|
6967
6978
|
const B = c.find((E) => E.panelId === g.panelId);
|
|
6968
6979
|
if (!B)
|
|
6969
6980
|
throw new O(g);
|
|
@@ -6984,10 +6995,10 @@ const nn = [
|
|
|
6984
6995
|
width="1"
|
|
6985
6996
|
height="1"
|
|
6986
6997
|
class="spiff-fill-shape"
|
|
6987
|
-
fill="${
|
|
6998
|
+
fill="${i == null ? void 0 : i.color}"
|
|
6988
6999
|
/>
|
|
6989
7000
|
</svg>
|
|
6990
|
-
`, w = { "spiff-fill-shape": { browserValue:
|
|
7001
|
+
`, w = { "spiff-fill-shape": { browserValue: i.color || "#000000" } }, C = k();
|
|
6991
7002
|
return new b(
|
|
6992
7003
|
{
|
|
6993
7004
|
colors: w,
|
|
@@ -7007,7 +7018,7 @@ const nn = [
|
|
|
7007
7018
|
);
|
|
7008
7019
|
}, o = t.data.regions;
|
|
7009
7020
|
try {
|
|
7010
|
-
return o.map(
|
|
7021
|
+
return o.map(s);
|
|
7011
7022
|
} catch (g) {
|
|
7012
7023
|
return console.error(g), [];
|
|
7013
7024
|
}
|
|
@@ -7015,8 +7026,8 @@ const nn = [
|
|
|
7015
7026
|
const t = [], n = (() => {
|
|
7016
7027
|
var r, g;
|
|
7017
7028
|
return A.type === f.ProductOverlay ? e || ((r = A.data.asset) == null ? void 0 : r.fileLink) || "" : ((g = A.data.asset) == null ? void 0 : g.fileLink) || "";
|
|
7018
|
-
})(),
|
|
7019
|
-
if (
|
|
7029
|
+
})(), s = (() => n.endsWith(".jpeg") || n.endsWith(".jpg") || n.endsWith(".png") ? U.Image : n.endsWith(".svg") ? U.Illustration : U.Illustration)(), o = A.data.regions;
|
|
7030
|
+
if (s === "image")
|
|
7020
7031
|
try {
|
|
7021
7032
|
o.forEach((r) => {
|
|
7022
7033
|
const g = c.find((l) => l.panelId === r.panelId);
|
|
@@ -7025,7 +7036,7 @@ const nn = [
|
|
|
7025
7036
|
const B = {
|
|
7026
7037
|
id: k(),
|
|
7027
7038
|
src: n,
|
|
7028
|
-
type:
|
|
7039
|
+
type: s,
|
|
7029
7040
|
y: r.top,
|
|
7030
7041
|
x: r.left,
|
|
7031
7042
|
width: r.width,
|
|
@@ -7048,7 +7059,7 @@ const nn = [
|
|
|
7048
7059
|
const r = await q(n, !0), g = (B) => {
|
|
7049
7060
|
const l = /<svg.*?<\/svg>/s, d = B.match(l) || [], w = (d == null ? void 0 : d.length) > 0 ? d[0] : "", Q = xe().parseFromString(w, "image/svg+xml").firstElementChild;
|
|
7050
7061
|
if (!Q)
|
|
7051
|
-
throw new
|
|
7062
|
+
throw new iA("Failed to read SVG.");
|
|
7052
7063
|
return Pe(Q), Ne().serializeToString(Q);
|
|
7053
7064
|
};
|
|
7054
7065
|
o.forEach((B) => {
|
|
@@ -7061,7 +7072,7 @@ const nn = [
|
|
|
7061
7072
|
asset_key: n,
|
|
7062
7073
|
svg: g(r),
|
|
7063
7074
|
colors: {},
|
|
7064
|
-
type:
|
|
7075
|
+
type: s,
|
|
7065
7076
|
y: B.top,
|
|
7066
7077
|
x: B.left,
|
|
7067
7078
|
width: B.width,
|
|
@@ -7079,7 +7090,7 @@ const nn = [
|
|
|
7079
7090
|
}
|
|
7080
7091
|
return t;
|
|
7081
7092
|
}, dn = async (c, A, e, t) => {
|
|
7082
|
-
const a = [], n = e.data,
|
|
7093
|
+
const a = [], n = e.data, i = 30, s = (E) => E.vertical ? "center" : E.textAlign || "center", o = () => {
|
|
7083
7094
|
var m;
|
|
7084
7095
|
const E = t.option;
|
|
7085
7096
|
if (!E)
|
|
@@ -7117,11 +7128,11 @@ const nn = [
|
|
|
7117
7128
|
const h = {
|
|
7118
7129
|
stepName: e.name,
|
|
7119
7130
|
id: k(),
|
|
7120
|
-
align:
|
|
7131
|
+
align: s(t.data),
|
|
7121
7132
|
curved: t.data.curved,
|
|
7122
7133
|
fill: n.color || w || "#000000",
|
|
7123
7134
|
fontData: g,
|
|
7124
|
-
fontSize: t.data.size ||
|
|
7135
|
+
fontSize: t.data.size || i,
|
|
7125
7136
|
height: E.height,
|
|
7126
7137
|
layer: E.layer,
|
|
7127
7138
|
layerIndex: E.layerIndex,
|
|
@@ -7137,7 +7148,7 @@ const nn = [
|
|
|
7137
7148
|
};
|
|
7138
7149
|
if (g) {
|
|
7139
7150
|
const [m, u] = uA(
|
|
7140
|
-
t.data.size ||
|
|
7151
|
+
t.data.size || i,
|
|
7141
7152
|
g,
|
|
7142
7153
|
E,
|
|
7143
7154
|
[
|
|
@@ -7172,25 +7183,25 @@ const nn = [
|
|
|
7172
7183
|
if (t && t.selectedVariants) {
|
|
7173
7184
|
const a = t.selectedVariants;
|
|
7174
7185
|
return e.requiredVariantSelections.some(
|
|
7175
|
-
(n) => a.find((
|
|
7186
|
+
(n) => a.find((i) => i.id === n) !== void 0
|
|
7176
7187
|
);
|
|
7177
7188
|
}
|
|
7178
7189
|
return !1;
|
|
7179
7190
|
}) : !0, En = async (c, A, e, t) => {
|
|
7180
7191
|
const a = [], n = {};
|
|
7181
|
-
for (const
|
|
7182
|
-
const
|
|
7183
|
-
if (
|
|
7184
|
-
switch (
|
|
7192
|
+
for (const i of c) {
|
|
7193
|
+
const s = A.steps.find((o) => o.stepName === i.name);
|
|
7194
|
+
if (s)
|
|
7195
|
+
switch (s.type) {
|
|
7185
7196
|
case f.DigitalContent:
|
|
7186
7197
|
a.push(
|
|
7187
|
-
...await sn(e,
|
|
7198
|
+
...await sn(e, i, s)
|
|
7188
7199
|
);
|
|
7189
7200
|
break;
|
|
7190
7201
|
case f.Frame:
|
|
7191
7202
|
case f.Photo:
|
|
7192
7203
|
a.push(
|
|
7193
|
-
...await on(e, n,
|
|
7204
|
+
...await on(e, n, i, s)
|
|
7194
7205
|
);
|
|
7195
7206
|
break;
|
|
7196
7207
|
case f.Illustration:
|
|
@@ -7198,34 +7209,34 @@ const nn = [
|
|
|
7198
7209
|
...await rn(
|
|
7199
7210
|
e,
|
|
7200
7211
|
n,
|
|
7201
|
-
|
|
7202
|
-
|
|
7212
|
+
i,
|
|
7213
|
+
s
|
|
7203
7214
|
)
|
|
7204
7215
|
);
|
|
7205
7216
|
break;
|
|
7206
7217
|
case f.Module:
|
|
7207
|
-
a.push(...await cn(e,
|
|
7218
|
+
a.push(...await cn(e, i, s));
|
|
7208
7219
|
break;
|
|
7209
7220
|
case f.Picture:
|
|
7210
7221
|
a.push(
|
|
7211
|
-
...await gn(e, n,
|
|
7222
|
+
...await gn(e, n, i, s)
|
|
7212
7223
|
);
|
|
7213
7224
|
break;
|
|
7214
7225
|
case f.Shape:
|
|
7215
7226
|
a.push(
|
|
7216
|
-
...await ln(e, n,
|
|
7227
|
+
...await ln(e, n, i, s)
|
|
7217
7228
|
);
|
|
7218
7229
|
break;
|
|
7219
7230
|
case f.Text:
|
|
7220
7231
|
a.push(
|
|
7221
|
-
...await dn(e, n,
|
|
7232
|
+
...await dn(e, n, i, s)
|
|
7222
7233
|
);
|
|
7223
7234
|
break;
|
|
7224
7235
|
}
|
|
7225
7236
|
}
|
|
7226
|
-
for (const
|
|
7227
|
-
|
|
7228
|
-
...await Bn(e,
|
|
7237
|
+
for (const i of A.steps)
|
|
7238
|
+
i.type !== f.SilentIllustration && i.type !== f.ProductOverlay || wn(i, n) && a.push(
|
|
7239
|
+
...await Bn(e, i, t)
|
|
7229
7240
|
);
|
|
7230
7241
|
return a;
|
|
7231
7242
|
};
|
|
@@ -7327,8 +7338,8 @@ class Qn {
|
|
|
7327
7338
|
}
|
|
7328
7339
|
}
|
|
7329
7340
|
class un extends Te {
|
|
7330
|
-
constructor(A, e, t, a, n,
|
|
7331
|
-
super(), this.layoutId = A, this.ctx = e, this.nonPOTSupport = t, this.onRender = a, this.workflow = n, this.layouts =
|
|
7341
|
+
constructor(A, e, t, a, n, i, s) {
|
|
7342
|
+
super(), this.layoutId = A, this.ctx = e, this.nonPOTSupport = t, this.onRender = a, this.workflow = n, this.layouts = i, this.productOverlayImageUrl = s;
|
|
7332
7343
|
}
|
|
7333
7344
|
/**
|
|
7334
7345
|
* Returns the resolution expected for generated textures.
|
|
@@ -7366,15 +7377,15 @@ class un extends Te {
|
|
|
7366
7377
|
const A = this.layouts.find((l) => l.layoutState.layout.id === this.layoutId);
|
|
7367
7378
|
if (!A)
|
|
7368
7379
|
return;
|
|
7369
|
-
const e = A.layoutState.elements || [], t = A.layoutState.layout.width, a = A.layoutState.layout.height, n = this.getDynamicTextureResolution().width,
|
|
7370
|
-
let
|
|
7380
|
+
const e = A.layoutState.elements || [], t = A.layoutState.layout.width, a = A.layoutState.layout.height, n = this.getDynamicTextureResolution().width, i = this.getDynamicTextureResolution().height;
|
|
7381
|
+
let s, o;
|
|
7371
7382
|
if (this.nonPOTSupport) {
|
|
7372
|
-
const l = n /
|
|
7373
|
-
t / a < l ? (
|
|
7374
|
-
const w = this.resizeFit({ width:
|
|
7375
|
-
|
|
7383
|
+
const l = n / i;
|
|
7384
|
+
t / a < l ? (s = n, o = a * (n / t)) : (s = t * (i / a), o = i);
|
|
7385
|
+
const w = this.resizeFit({ width: s, height: o });
|
|
7386
|
+
s = w.width, o = w.height;
|
|
7376
7387
|
} else
|
|
7377
|
-
|
|
7388
|
+
s = this.getDynamicTextureResolution().width, o = this.getDynamicTextureResolution().height;
|
|
7378
7389
|
const r = Fe(A.layoutState.layout, e, {
|
|
7379
7390
|
renderingConfiguration: { purpose: Me.ThreeD }
|
|
7380
7391
|
}), g = ye(r), B = await He.from(this.ctx, g, {
|
|
@@ -7389,10 +7400,10 @@ class un extends Te {
|
|
|
7389
7400
|
DOMParser: Se(),
|
|
7390
7401
|
fetch: qA
|
|
7391
7402
|
});
|
|
7392
|
-
B.resize(
|
|
7403
|
+
B.resize(s, o), await B.render(), this.onRender();
|
|
7393
7404
|
}
|
|
7394
7405
|
}
|
|
7395
|
-
const
|
|
7406
|
+
const yi = (c, A) => {
|
|
7396
7407
|
const e = [];
|
|
7397
7408
|
return c.forEach((t) => {
|
|
7398
7409
|
const a = A.steps.find((n) => n.stepName === t.stepName);
|
|
@@ -7403,14 +7414,14 @@ const ys = (c, A) => {
|
|
|
7403
7414
|
}
|
|
7404
7415
|
});
|
|
7405
7416
|
}), e;
|
|
7406
|
-
},
|
|
7417
|
+
}, Yi = async (c, A, e, t) => {
|
|
7407
7418
|
let a = {
|
|
7408
7419
|
serializableWorkflow: { steps: [] },
|
|
7409
7420
|
layouts: {}
|
|
7410
7421
|
};
|
|
7411
7422
|
a = new R(e.map((o) => new St(o))).apply(a);
|
|
7412
|
-
const
|
|
7413
|
-
return new R(
|
|
7423
|
+
const i = await En(c, A, e, t);
|
|
7424
|
+
return new R(i).apply(a);
|
|
7414
7425
|
}, mn = M`
|
|
7415
7426
|
${gA}
|
|
7416
7427
|
fragment ProductFields on Product {
|
|
@@ -7463,7 +7474,7 @@ const ys = (c, A) => {
|
|
|
7463
7474
|
...ProductFields
|
|
7464
7475
|
}
|
|
7465
7476
|
}
|
|
7466
|
-
`,
|
|
7477
|
+
`, it = M`
|
|
7467
7478
|
${In}
|
|
7468
7479
|
fragment ProductCollectionFields on ProductCollection {
|
|
7469
7480
|
id
|
|
@@ -7511,7 +7522,7 @@ const ys = (c, A) => {
|
|
|
7511
7522
|
}
|
|
7512
7523
|
}
|
|
7513
7524
|
`, pn = M`
|
|
7514
|
-
${
|
|
7525
|
+
${it}
|
|
7515
7526
|
query GetBundle($id: String!) {
|
|
7516
7527
|
bundles(ids: [$id]) {
|
|
7517
7528
|
id
|
|
@@ -7574,7 +7585,7 @@ const ys = (c, A) => {
|
|
|
7574
7585
|
}
|
|
7575
7586
|
}
|
|
7576
7587
|
`, Fn = M`
|
|
7577
|
-
${
|
|
7588
|
+
${it}
|
|
7578
7589
|
mutation CreateBundle($collectionId: String, $initialMetadata: [MetadataInput!]) {
|
|
7579
7590
|
bundleCreate(collectionId: $collectionId, metadata: $initialMetadata) {
|
|
7580
7591
|
id
|
|
@@ -7734,7 +7745,7 @@ class Rn {
|
|
|
7734
7745
|
return new Un(this.bundle, A);
|
|
7735
7746
|
case mA.Option: {
|
|
7736
7747
|
const e = A.entityId ? await K.getOption(A.entityId) : void 0;
|
|
7737
|
-
return (e == null ? void 0 : e.type) === "Color" ? new vn(this.bundle, A, e) : new
|
|
7748
|
+
return (e == null ? void 0 : e.type) === "Color" ? new vn(this.bundle, A, e) : new st(this.bundle, A, e);
|
|
7738
7749
|
}
|
|
7739
7750
|
case mA.Text:
|
|
7740
7751
|
return new Gn(this.bundle, A);
|
|
@@ -7782,11 +7793,11 @@ class oe {
|
|
|
7782
7793
|
getSharedSteps(A) {
|
|
7783
7794
|
return (A ?? this.bundle.getWorkflowExperiences()).flatMap(
|
|
7784
7795
|
(a) => a.getSteps().filter((n) => {
|
|
7785
|
-
var
|
|
7786
|
-
return (
|
|
7787
|
-
(
|
|
7796
|
+
var i;
|
|
7797
|
+
return (i = n.getRaw().globalPropertyAspectConfigurations) == null ? void 0 : i.some(
|
|
7798
|
+
(s) => {
|
|
7788
7799
|
var o, r;
|
|
7789
|
-
return
|
|
7800
|
+
return s.globalPropertyConfigurationId === ((r = (o = this.bundle.getProductCollection()) == null ? void 0 : o.getResource().globalPropertyConfiguration) == null ? void 0 : r.id) && s.aspectName === this.property.name;
|
|
7790
7801
|
}
|
|
7791
7802
|
);
|
|
7792
7803
|
})
|
|
@@ -7853,7 +7864,7 @@ class Gn extends oe {
|
|
|
7853
7864
|
await Promise.all(a);
|
|
7854
7865
|
}
|
|
7855
7866
|
}
|
|
7856
|
-
class
|
|
7867
|
+
class st extends oe {
|
|
7857
7868
|
constructor(A, e, t) {
|
|
7858
7869
|
super(A, e), this.optionResource = t;
|
|
7859
7870
|
}
|
|
@@ -7871,8 +7882,8 @@ class it extends oe {
|
|
|
7871
7882
|
} else {
|
|
7872
7883
|
const a = (e = this.optionResource.variants) == null ? void 0 : e.find(
|
|
7873
7884
|
(n) => {
|
|
7874
|
-
var
|
|
7875
|
-
return n.id === ((
|
|
7885
|
+
var i, s;
|
|
7886
|
+
return n.id === ((s = (i = this.optionResource) == null ? void 0 : i.defaultVariant) == null ? void 0 : s.id);
|
|
7876
7887
|
}
|
|
7877
7888
|
);
|
|
7878
7889
|
return a ? new V(a) : void 0;
|
|
@@ -7907,7 +7918,7 @@ class it extends oe {
|
|
|
7907
7918
|
const e = this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);
|
|
7908
7919
|
if (!e)
|
|
7909
7920
|
return Promise.resolve();
|
|
7910
|
-
const t = (n = (a = this.optionResource) == null ? void 0 : a.variants) == null ? void 0 : n.find((
|
|
7921
|
+
const t = (n = (a = this.optionResource) == null ? void 0 : a.variants) == null ? void 0 : n.find((i) => i.id === e);
|
|
7911
7922
|
return t ? this.applyVariantSelection(new V(t), A) : Promise.resolve();
|
|
7912
7923
|
}
|
|
7913
7924
|
async applyVariantSelection(A, e) {
|
|
@@ -7915,7 +7926,7 @@ class it extends oe {
|
|
|
7915
7926
|
await Promise.all(a);
|
|
7916
7927
|
}
|
|
7917
7928
|
}
|
|
7918
|
-
class vn extends
|
|
7929
|
+
class vn extends st {
|
|
7919
7930
|
constructor(A, e, t) {
|
|
7920
7931
|
super(A, e, t);
|
|
7921
7932
|
}
|
|
@@ -8044,12 +8055,12 @@ class On {
|
|
|
8044
8055
|
A && (this.state = JSON.parse(A));
|
|
8045
8056
|
}
|
|
8046
8057
|
applyStateToWorkflowExperience(A) {
|
|
8047
|
-
var n,
|
|
8058
|
+
var n, i;
|
|
8048
8059
|
if (!this.state || !((n = A == null ? void 0 : A.getWorkflowManager()) != null && n.getModelContainer()))
|
|
8049
8060
|
return;
|
|
8050
|
-
const e = (
|
|
8051
|
-
(
|
|
8052
|
-
)) == null ? void 0 :
|
|
8061
|
+
const e = (i = this.state.transactions.find(
|
|
8062
|
+
(s) => s.transactionId === A.getWorkflowManager().getTransaction().id && s.transform
|
|
8063
|
+
)) == null ? void 0 : i.transform;
|
|
8053
8064
|
if (!e)
|
|
8054
8065
|
return;
|
|
8055
8066
|
const t = this.flipTransform(
|
|
@@ -8059,8 +8070,8 @@ class On {
|
|
|
8059
8070
|
a.position = t.position, a.rotation = t.rotation, a.scale = t.scale;
|
|
8060
8071
|
}
|
|
8061
8072
|
setWorkflowExperienceTransform(A, e) {
|
|
8062
|
-
var
|
|
8063
|
-
if (!((
|
|
8073
|
+
var s;
|
|
8074
|
+
if (!((s = A == null ? void 0 : A.getWorkflowManager()) != null && s.getModelContainer()))
|
|
8064
8075
|
return;
|
|
8065
8076
|
const t = this.flipTransform(
|
|
8066
8077
|
e,
|
|
@@ -8071,8 +8082,8 @@ class On {
|
|
|
8071
8082
|
this.state ? this.state.transactions || (this.state.transactions = []) : this.state = {
|
|
8072
8083
|
transactions: []
|
|
8073
8084
|
};
|
|
8074
|
-
const
|
|
8075
|
-
|
|
8085
|
+
const i = this.state.transactions.find((o) => o.transactionId === n);
|
|
8086
|
+
i ? i.transform = e : this.state.transactions.push({
|
|
8076
8087
|
transactionId: n,
|
|
8077
8088
|
transform: e
|
|
8078
8089
|
});
|
|
@@ -8166,8 +8177,8 @@ class zn {
|
|
|
8166
8177
|
getIntegrationByType(A, e) {
|
|
8167
8178
|
const a = (this.product.integrationProducts || []).find((n) => {
|
|
8168
8179
|
var r, g, B;
|
|
8169
|
-
const
|
|
8170
|
-
return
|
|
8180
|
+
const i = (r = n.integration) == null ? void 0 : r.type, s = ((g = n.integration) == null ? void 0 : g.type) === A, o = e ? ((B = n.integration) == null ? void 0 : B.externalIntegrationId) === e : !0;
|
|
8181
|
+
return i && s && o;
|
|
8171
8182
|
});
|
|
8172
8183
|
if (!a)
|
|
8173
8184
|
throw new Error(
|
|
@@ -8211,7 +8222,7 @@ class zn {
|
|
|
8211
8222
|
* @returns
|
|
8212
8223
|
*/
|
|
8213
8224
|
getBasePrice(A) {
|
|
8214
|
-
var a, n,
|
|
8225
|
+
var a, n, i, s;
|
|
8215
8226
|
const e = this.product.basePrice || 0;
|
|
8216
8227
|
if (!A)
|
|
8217
8228
|
return e;
|
|
@@ -8230,12 +8241,12 @@ class zn {
|
|
|
8230
8241
|
var r;
|
|
8231
8242
|
return ((r = o.integration) == null ? void 0 : r.externalIntegrationId) === A.externalId;
|
|
8232
8243
|
}
|
|
8233
|
-
) : t = (
|
|
8244
|
+
) : t = (i = this.product.integrationProducts) == null ? void 0 : i.find(
|
|
8234
8245
|
(o) => {
|
|
8235
8246
|
var r;
|
|
8236
8247
|
return ((r = o.integration) == null ? void 0 : r.type) === A.integrationType;
|
|
8237
8248
|
}
|
|
8238
|
-
), (
|
|
8249
|
+
), (s = t == null ? void 0 : t.additionalIntegrationProduct) != null && s.product ? e + (t.additionalIntegrationProduct.product.basePrice || 0) : e;
|
|
8239
8250
|
}
|
|
8240
8251
|
}
|
|
8241
8252
|
class me {
|
|
@@ -8314,8 +8325,8 @@ class jn {
|
|
|
8314
8325
|
}
|
|
8315
8326
|
class Ie {
|
|
8316
8327
|
constructor(A, e, t, a, n) {
|
|
8317
|
-
var
|
|
8318
|
-
this.eventListeners = /* @__PURE__ */ new Map(), this.workflowExperiences = [], this.client = A, this.id = e.id, this.name = e.name || "", this.ownerId = n, this.metadata = new Map(((
|
|
8328
|
+
var i, s, o;
|
|
8329
|
+
this.eventListeners = /* @__PURE__ */ new Map(), this.workflowExperiences = [], this.client = A, this.id = e.id, this.name = e.name || "", this.ownerId = n, this.metadata = new Map(((i = e.metadata) == null ? void 0 : i.map((r) => [r.key, r.value])) || []), this.productCollection = e.productCollection, this.bundleStateManager = new On(e.bundleStateData), this.globalConfiguration = (s = this.productCollection) == null ? void 0 : s.globalPropertyConfiguration, this.globalPropertyStateManager = new Ln(
|
|
8319
8330
|
this.id,
|
|
8320
8331
|
this.ownerId,
|
|
8321
8332
|
this.checkConditionalHandlesChanged.bind(this)
|
|
@@ -8385,14 +8396,14 @@ class Ie {
|
|
|
8385
8396
|
await Promise.all(e.map((t) => t.applyGlobalState([A])));
|
|
8386
8397
|
}
|
|
8387
8398
|
async addWorkflowExperiences(A) {
|
|
8388
|
-
const e = A.map((
|
|
8389
|
-
(
|
|
8399
|
+
const e = A.map((i) => i.getWorkflowManager().getTransaction().id), t = e.map(
|
|
8400
|
+
(i) => this.workflowExperiences.find((s) => s.getWorkflowManager().getTransaction().id === i)
|
|
8390
8401
|
);
|
|
8391
|
-
if (t.some((
|
|
8402
|
+
if (t.some((i) => !!i))
|
|
8392
8403
|
throw new Error(
|
|
8393
|
-
"Unable to add transaction to bundle - Already Exists: " + t.filter((
|
|
8404
|
+
"Unable to add transaction to bundle - Already Exists: " + t.filter((i) => !!i).map((i) => i == null ? void 0 : i.getWorkflowManager().getTransaction().id).join(", ")
|
|
8394
8405
|
);
|
|
8395
|
-
const a = x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map(), n = e.map((
|
|
8406
|
+
const a = x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map(), n = e.map((i) => a.get(i));
|
|
8396
8407
|
await P.getShadowGraphqlClient().mutate({
|
|
8397
8408
|
mutation: Yn,
|
|
8398
8409
|
variables: {
|
|
@@ -8403,25 +8414,25 @@ class Ie {
|
|
|
8403
8414
|
context: {
|
|
8404
8415
|
bundleOwnerId: this.ownerId
|
|
8405
8416
|
}
|
|
8406
|
-
}).catch((
|
|
8407
|
-
console.error(
|
|
8417
|
+
}).catch((i) => {
|
|
8418
|
+
console.error(i);
|
|
8408
8419
|
}), this.workflowExperiences.push(...A), await Promise.all([
|
|
8409
8420
|
this.updateTransactionOrder(),
|
|
8410
8421
|
(async () => {
|
|
8411
|
-
for (const
|
|
8412
|
-
await this.injectExperienceIntoPreviewService(
|
|
8413
|
-
const
|
|
8414
|
-
await Promise.all(
|
|
8422
|
+
for (const s of A)
|
|
8423
|
+
await this.injectExperienceIntoPreviewService(s);
|
|
8424
|
+
const i = await this.getGlobalProperties();
|
|
8425
|
+
await Promise.all(i.map((s) => s.applyGlobalState(A)));
|
|
8415
8426
|
})()
|
|
8416
8427
|
]);
|
|
8417
8428
|
}
|
|
8418
8429
|
async appendWorkflowExperience(A, e = !0) {
|
|
8419
8430
|
const t = A.getWorkflowManager().getTransaction().id;
|
|
8420
8431
|
if (this.workflowExperiences.find(
|
|
8421
|
-
(
|
|
8432
|
+
(s) => s.getWorkflowManager().getTransaction().id === t
|
|
8422
8433
|
))
|
|
8423
8434
|
throw new Error("Unable to add transaction to bundle - Already Exists!");
|
|
8424
|
-
const
|
|
8435
|
+
const i = (x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map()).get(t);
|
|
8425
8436
|
await P.getShadowGraphqlClient().mutate({
|
|
8426
8437
|
mutation: yn,
|
|
8427
8438
|
variables: {
|
|
@@ -8430,7 +8441,7 @@ class Ie {
|
|
|
8430
8441
|
},
|
|
8431
8442
|
context: {
|
|
8432
8443
|
bundleOwnerId: this.ownerId,
|
|
8433
|
-
transactionOwnerId:
|
|
8444
|
+
transactionOwnerId: i
|
|
8434
8445
|
}
|
|
8435
8446
|
}), e && this.workflowExperiences.push(A);
|
|
8436
8447
|
}
|
|
@@ -8461,7 +8472,7 @@ class Ie {
|
|
|
8461
8472
|
id: this.id,
|
|
8462
8473
|
transactionId: e.id,
|
|
8463
8474
|
name: this.name,
|
|
8464
|
-
metadata: Array.from(this.metadata.entries()).map(([n,
|
|
8475
|
+
metadata: Array.from(this.metadata.entries()).map(([n, i]) => ({ key: n, value: i })),
|
|
8465
8476
|
bundleStateData: this.bundleStateManager.getSerializedState()
|
|
8466
8477
|
},
|
|
8467
8478
|
context: {
|
|
@@ -8617,7 +8628,7 @@ class Ie {
|
|
|
8617
8628
|
}),
|
|
8618
8629
|
e ? (t, a) => {
|
|
8619
8630
|
const n = this.workflowExperiences.find(
|
|
8620
|
-
(
|
|
8631
|
+
(i) => i.getWorkflowManager().getTransaction().id === a
|
|
8621
8632
|
);
|
|
8622
8633
|
return n ? e(n) : (console.warn(
|
|
8623
8634
|
"SpiffCommerce - Bundle create design - Unable to find experience for transaction: " + a
|
|
@@ -8643,7 +8654,7 @@ class Ie {
|
|
|
8643
8654
|
onModelSelectedEvent(A, e) {
|
|
8644
8655
|
if (A && A.metadata && A.metadata instanceof Map && A.metadata.has("workflowManager")) {
|
|
8645
8656
|
const a = A.metadata.get("workflowManager").getTransaction(), n = this.workflowExperiences.find(
|
|
8646
|
-
(
|
|
8657
|
+
(i) => i.getWorkflowManager().getTransaction().id === a.id
|
|
8647
8658
|
);
|
|
8648
8659
|
n && this.fireEvent(e ? "workflow-experience-hover-enter" : "workflow-experience-hover-exit", {
|
|
8649
8660
|
workflowExperience: n
|
|
@@ -8708,8 +8719,8 @@ class Ie {
|
|
|
8708
8719
|
(() => {
|
|
8709
8720
|
if (a.length !== n.length)
|
|
8710
8721
|
return !0;
|
|
8711
|
-
for (let
|
|
8712
|
-
if (a[
|
|
8722
|
+
for (let s = 0; s < a.length; s++)
|
|
8723
|
+
if (a[s].getName() !== n[s].getName())
|
|
8713
8724
|
return !0;
|
|
8714
8725
|
return !1;
|
|
8715
8726
|
})() && this.fireEvent("conditional-global-properties-changed", {
|
|
@@ -8752,13 +8763,13 @@ class Wn {
|
|
|
8752
8763
|
})).data) == null ? void 0 : B.processExecutionCreate) == null ? void 0 : l.id;
|
|
8753
8764
|
if (!n)
|
|
8754
8765
|
throw new Error("Failed to create process execution.");
|
|
8755
|
-
function
|
|
8766
|
+
function i(w) {
|
|
8756
8767
|
return new Promise((C) => {
|
|
8757
8768
|
setTimeout(C, w);
|
|
8758
8769
|
});
|
|
8759
8770
|
}
|
|
8760
|
-
let
|
|
8761
|
-
for (; !
|
|
8771
|
+
let s = !1, o = 0, r, g;
|
|
8772
|
+
for (; !s; ) {
|
|
8762
8773
|
r = await P.getShadowGraphqlClient().query({
|
|
8763
8774
|
query: M`
|
|
8764
8775
|
query getProcessFlowExecution($ids: [String]!) {
|
|
@@ -8786,14 +8797,14 @@ class Wn {
|
|
|
8786
8797
|
"Execution has failed to complete. See Automation > FLows in Flight on partner account on SpiffCommerce Hub."
|
|
8787
8798
|
);
|
|
8788
8799
|
if (w.completedAt) {
|
|
8789
|
-
|
|
8800
|
+
s = !0, g = new Xn(w);
|
|
8790
8801
|
break;
|
|
8791
8802
|
}
|
|
8792
8803
|
o += 1;
|
|
8793
8804
|
const C = t != null && t.repeats ? t == null ? void 0 : t.repeats : 5;
|
|
8794
8805
|
if (o >= C)
|
|
8795
8806
|
throw new Error("Maximum wait time exceeded for execution result.");
|
|
8796
|
-
await
|
|
8807
|
+
await i(t != null && t.sleepTime ? Math.max(t.sleepTime, 500) : 2e3);
|
|
8797
8808
|
}
|
|
8798
8809
|
if (!g)
|
|
8799
8810
|
throw new Error("Failed to retrieve server response for execution.");
|
|
@@ -8925,7 +8936,7 @@ const $n = M`
|
|
|
8925
8936
|
z
|
|
8926
8937
|
}
|
|
8927
8938
|
}
|
|
8928
|
-
`,
|
|
8939
|
+
`, Ai = M`
|
|
8929
8940
|
fragment RenderingPipelineConfigurationFields on RenderingPipelineConfiguration {
|
|
8930
8941
|
antiAliasing {
|
|
8931
8942
|
samples
|
|
@@ -9009,21 +9020,21 @@ const $n = M`
|
|
|
9009
9020
|
weight
|
|
9010
9021
|
}
|
|
9011
9022
|
}
|
|
9012
|
-
`,
|
|
9023
|
+
`, ei = M`
|
|
9013
9024
|
fragment ModelAnimationFields on ModelAnimation {
|
|
9014
9025
|
from
|
|
9015
9026
|
to
|
|
9016
9027
|
loop
|
|
9017
9028
|
name
|
|
9018
9029
|
}
|
|
9019
|
-
`,
|
|
9030
|
+
`, ti = (c) => M`
|
|
9020
9031
|
${GA(c)}
|
|
9021
9032
|
${te}
|
|
9022
9033
|
${Le}
|
|
9023
9034
|
${$n}
|
|
9024
9035
|
${_n}
|
|
9025
|
-
${
|
|
9026
|
-
${
|
|
9036
|
+
${Ai}
|
|
9037
|
+
${ei}
|
|
9027
9038
|
query GetWorkflows($ids: [String!]!) {
|
|
9028
9039
|
workflows(ids: $ids) {
|
|
9029
9040
|
allowProofDownload
|
|
@@ -9401,7 +9412,7 @@ const $n = M`
|
|
|
9401
9412
|
}
|
|
9402
9413
|
}
|
|
9403
9414
|
}
|
|
9404
|
-
`,
|
|
9415
|
+
`, ai = M`
|
|
9405
9416
|
query GetTransactionForPartner($id: String!) {
|
|
9406
9417
|
transactions(ids: [$id]) {
|
|
9407
9418
|
id
|
|
@@ -9418,7 +9429,7 @@ const $n = M`
|
|
|
9418
9429
|
}
|
|
9419
9430
|
}
|
|
9420
9431
|
}
|
|
9421
|
-
`,
|
|
9432
|
+
`, ni = M`
|
|
9422
9433
|
${GA(!1)}
|
|
9423
9434
|
query GetWorkflowForTheme($id: String!) {
|
|
9424
9435
|
workflow(id: $id) {
|
|
@@ -9440,7 +9451,7 @@ const $n = M`
|
|
|
9440
9451
|
}
|
|
9441
9452
|
}
|
|
9442
9453
|
}
|
|
9443
|
-
`,
|
|
9454
|
+
`, ii = M`
|
|
9444
9455
|
query GetCustomer($emailAddress: String!) {
|
|
9445
9456
|
customer(emailAddress: $emailAddress) {
|
|
9446
9457
|
id
|
|
@@ -9450,7 +9461,7 @@ const $n = M`
|
|
|
9450
9461
|
}
|
|
9451
9462
|
}
|
|
9452
9463
|
}
|
|
9453
|
-
`,
|
|
9464
|
+
`, si = M`
|
|
9454
9465
|
mutation CustomerCreate($details: CustomerDetailsInput!) {
|
|
9455
9466
|
customerCreate(details: $details) {
|
|
9456
9467
|
id
|
|
@@ -9460,7 +9471,7 @@ const $n = M`
|
|
|
9460
9471
|
}
|
|
9461
9472
|
}
|
|
9462
9473
|
}
|
|
9463
|
-
`,
|
|
9474
|
+
`, oi = M`
|
|
9464
9475
|
mutation CustomerAuthenticate($loginToken: String!) {
|
|
9465
9476
|
customerAuthenticate(loginToken: $loginToken) {
|
|
9466
9477
|
id
|
|
@@ -9487,11 +9498,11 @@ const $n = M`
|
|
|
9487
9498
|
}
|
|
9488
9499
|
}
|
|
9489
9500
|
}
|
|
9490
|
-
`,
|
|
9501
|
+
`, ri = M`
|
|
9491
9502
|
mutation CustomerGenerateVerificationCode($emailAddress: String!) {
|
|
9492
9503
|
customerGenerateVerificationCode(emailAddress: $emailAddress)
|
|
9493
9504
|
}
|
|
9494
|
-
`,
|
|
9505
|
+
`, ci = M`
|
|
9495
9506
|
mutation CustomerVerifyCode($emailAddress: String!, $verificationCode: String!) {
|
|
9496
9507
|
customerVerifyCode(emailAddress: $emailAddress, verificationCode: $verificationCode) {
|
|
9497
9508
|
id
|
|
@@ -9526,19 +9537,19 @@ const $n = M`
|
|
|
9526
9537
|
(n) => n.type === U.Illustration
|
|
9527
9538
|
);
|
|
9528
9539
|
for (let n = 0; n < t.length; ++n) {
|
|
9529
|
-
const
|
|
9530
|
-
|
|
9540
|
+
const i = t[n];
|
|
9541
|
+
i.src && i.svg && (i.cachedObjectURL = await pA(i.svg));
|
|
9531
9542
|
}
|
|
9532
9543
|
const a = c.layouts[e].elements.filter((n) => n.type === U.Textbox);
|
|
9533
9544
|
for (let n = 0; n < a.length; ++n) {
|
|
9534
|
-
const
|
|
9535
|
-
(A =
|
|
9545
|
+
const i = a[n];
|
|
9546
|
+
(A = i.fontData) != null && A.assetUrl && await _A(i.fontData.assetUrl);
|
|
9536
9547
|
}
|
|
9537
9548
|
}
|
|
9538
|
-
},
|
|
9549
|
+
}, gi = async (c, A) => {
|
|
9539
9550
|
var a;
|
|
9540
9551
|
const e = await P.getShadowGraphqlClient().query({
|
|
9541
|
-
query:
|
|
9552
|
+
query: ti(((a = A == null ? void 0 : A.assets) == null ? void 0 : a.metadata) || !1),
|
|
9542
9553
|
errorPolicy: "all",
|
|
9543
9554
|
fetchPolicy: "no-cache",
|
|
9544
9555
|
variables: {
|
|
@@ -9548,27 +9559,27 @@ const $n = M`
|
|
|
9548
9559
|
if (t === void 0 || t.length !== c.length)
|
|
9549
9560
|
throw new Error(`Unable to read workflows: ${e.errors ?? "Length mismatch in response"}`);
|
|
9550
9561
|
return t.forEach((n) => {
|
|
9551
|
-
n.steps.forEach((
|
|
9552
|
-
var
|
|
9553
|
-
delete
|
|
9562
|
+
n.steps.forEach((i) => {
|
|
9563
|
+
var s, o, r;
|
|
9564
|
+
delete i.data.__typename, (s = i.option) != null && s.id && ((o = i.option.defaultVariant) != null && o.asset && L.cacheAsset(i.option.defaultVariant.asset), i.option.colorProfile && L.cacheAsset(i.option.colorProfile), (r = i.option.variants) == null || r.forEach((g) => {
|
|
9554
9565
|
g.asset && L.cacheAsset(g.asset), g.displayImage && L.cacheAsset(g.displayImage), g.thumbnail && L.cacheAsset(g.thumbnail), g.material && L.cacheMaterial(g.material);
|
|
9555
|
-
}), rA.set({ id:
|
|
9566
|
+
}), rA.set({ id: i.option.id }, Promise.resolve(i.option)));
|
|
9556
9567
|
});
|
|
9557
9568
|
}), t;
|
|
9558
|
-
},
|
|
9569
|
+
}, li = async (c, A) => {
|
|
9559
9570
|
const t = (await A).find((a) => a.id === c);
|
|
9560
9571
|
if (!t)
|
|
9561
9572
|
throw new Error(`Workflow not found: ${c}`);
|
|
9562
9573
|
return t;
|
|
9563
9574
|
}, rt = async (c, A) => {
|
|
9564
|
-
const e = c.map((
|
|
9575
|
+
const e = c.map((s) => rA.get({ id: s, options: A })), t = c.filter((s, o) => e[o] === void 0);
|
|
9565
9576
|
if (t.length === 0)
|
|
9566
9577
|
return Promise.all(e);
|
|
9567
|
-
const a =
|
|
9568
|
-
(
|
|
9569
|
-
),
|
|
9570
|
-
return await Promise.all(
|
|
9571
|
-
}, QA = async (c, A) => (await rt([c], A))[0],
|
|
9578
|
+
const a = gi(t, A), n = t.map(
|
|
9579
|
+
(s) => rA.set({ id: s, options: A }, li(s, a))
|
|
9580
|
+
), i = e.filter((s) => s !== void 0);
|
|
9581
|
+
return await Promise.all(i.concat(n));
|
|
9582
|
+
}, QA = async (c, A) => (await rt([c], A))[0], Bi = (c) => c.sort((A, e) => A.index - e.index).map((A) => ({
|
|
9572
9583
|
id: k(),
|
|
9573
9584
|
panelId: A.name,
|
|
9574
9585
|
name: A.name,
|
|
@@ -9583,9 +9594,9 @@ const $n = M`
|
|
|
9583
9594
|
editableArea: A.editableArea
|
|
9584
9595
|
})), OA = (c, A) => {
|
|
9585
9596
|
const e = c.workflowState, t = e ? JSON.parse(e) : void 0;
|
|
9586
|
-
return t ? Object.values(t.layouts).map((a) => a.layout) :
|
|
9597
|
+
return t ? Object.values(t.layouts).map((a) => a.layout) : Bi(A.panels);
|
|
9587
9598
|
};
|
|
9588
|
-
class
|
|
9599
|
+
class di {
|
|
9589
9600
|
constructor(A) {
|
|
9590
9601
|
this.updateTransactionState = async (e) => {
|
|
9591
9602
|
try {
|
|
@@ -9628,7 +9639,7 @@ class ds {
|
|
|
9628
9639
|
return Promise.resolve({ success: !0, stakeholderType: YA.Owner });
|
|
9629
9640
|
const t = x.getMap("bundlePartnerIds") || /* @__PURE__ */ new Map();
|
|
9630
9641
|
if (t.has(A)) {
|
|
9631
|
-
const
|
|
9642
|
+
const i = t.get(A), o = (x.getMap("partnerCustomerIds") || /* @__PURE__ */ new Map()).get(i);
|
|
9632
9643
|
if (o && await this.authenticateCustomerId(o)) {
|
|
9633
9644
|
const g = (n = (a = this.customer) == null ? void 0 : a.bundleStakeholders) == null ? void 0 : n.find(
|
|
9634
9645
|
(B) => {
|
|
@@ -9658,7 +9669,7 @@ class ds {
|
|
|
9658
9669
|
async authenticateTransactionFromLocalStorage(A) {
|
|
9659
9670
|
var g, B, l, d, w, C;
|
|
9660
9671
|
const e = P.getShadowGraphqlClient(), t = await e.query({
|
|
9661
|
-
query:
|
|
9672
|
+
query: ai,
|
|
9662
9673
|
errorPolicy: "all",
|
|
9663
9674
|
fetchPolicy: "no-cache",
|
|
9664
9675
|
variables: {
|
|
@@ -9672,12 +9683,12 @@ class ds {
|
|
|
9672
9683
|
throw new Error(`Unable to read transaction: ${A}`);
|
|
9673
9684
|
if (a.isOrdered)
|
|
9674
9685
|
return Promise.resolve({ success: !1, transactionReadOnly: !0 });
|
|
9675
|
-
const
|
|
9676
|
-
if (
|
|
9686
|
+
const i = x.getMap("transactionOwnerIds");
|
|
9687
|
+
if (i != null && i.has(A))
|
|
9677
9688
|
return Promise.resolve({ success: !0, stakeholderType: YA.Owner });
|
|
9678
|
-
const
|
|
9679
|
-
if (
|
|
9680
|
-
const E =
|
|
9689
|
+
const s = x.getMap("transactionCustomerIds");
|
|
9690
|
+
if (s != null && s.has(A)) {
|
|
9691
|
+
const E = s.get(A);
|
|
9681
9692
|
if (E && await this.authenticateCustomerId(E)) {
|
|
9682
9693
|
const h = ((d = (l = this.customer) == null ? void 0 : l.bundleStakeholders) == null ? void 0 : d.find(
|
|
9683
9694
|
(m) => {
|
|
@@ -9698,7 +9709,7 @@ class ds {
|
|
|
9698
9709
|
}
|
|
9699
9710
|
}
|
|
9700
9711
|
const r = (await e.query({
|
|
9701
|
-
query:
|
|
9712
|
+
query: ni,
|
|
9702
9713
|
errorPolicy: "all",
|
|
9703
9714
|
variables: {
|
|
9704
9715
|
id: a.workflowId
|
|
@@ -9723,18 +9734,18 @@ class ds {
|
|
|
9723
9734
|
var t, a;
|
|
9724
9735
|
const e = (a = (t = this.customer) == null ? void 0 : t.stakeholders) == null ? void 0 : a.find(
|
|
9725
9736
|
(n) => {
|
|
9726
|
-
var
|
|
9727
|
-
return ((
|
|
9737
|
+
var i;
|
|
9738
|
+
return ((i = n.transaction) == null ? void 0 : i.id) === A;
|
|
9728
9739
|
}
|
|
9729
9740
|
);
|
|
9730
9741
|
if (e)
|
|
9731
9742
|
return e.type;
|
|
9732
9743
|
}
|
|
9733
9744
|
async getOrCreateCustomer(A) {
|
|
9734
|
-
var
|
|
9745
|
+
var i;
|
|
9735
9746
|
this.customer = void 0;
|
|
9736
9747
|
const e = P.getShadowGraphqlClient(), a = (await e.query({
|
|
9737
|
-
query:
|
|
9748
|
+
query: ii,
|
|
9738
9749
|
errorPolicy: "all",
|
|
9739
9750
|
fetchPolicy: "no-cache",
|
|
9740
9751
|
variables: {
|
|
@@ -9742,8 +9753,8 @@ class ds {
|
|
|
9742
9753
|
}
|
|
9743
9754
|
})).data.customer;
|
|
9744
9755
|
if (!a.id) {
|
|
9745
|
-
const o = (
|
|
9746
|
-
mutation:
|
|
9756
|
+
const o = (i = (await e.mutate({
|
|
9757
|
+
mutation: si,
|
|
9747
9758
|
errorPolicy: "all",
|
|
9748
9759
|
fetchPolicy: "no-cache",
|
|
9749
9760
|
variables: {
|
|
@@ -9751,7 +9762,7 @@ class ds {
|
|
|
9751
9762
|
emailAddress: A
|
|
9752
9763
|
}
|
|
9753
9764
|
}
|
|
9754
|
-
})).data) == null ? void 0 :
|
|
9765
|
+
})).data) == null ? void 0 : i.customerCreate;
|
|
9755
9766
|
if (!o)
|
|
9756
9767
|
throw new Error("Unable to create customer.");
|
|
9757
9768
|
return this.storeCustomer(o), this.customer = o, {
|
|
@@ -9767,22 +9778,22 @@ class ds {
|
|
|
9767
9778
|
};
|
|
9768
9779
|
}
|
|
9769
9780
|
async authenticateCustomerId(A) {
|
|
9770
|
-
var
|
|
9781
|
+
var s;
|
|
9771
9782
|
const e = P.getShadowGraphqlClient(), t = x.getMap("customerTokens");
|
|
9772
9783
|
if (!(t != null && t.has(A)))
|
|
9773
9784
|
return !1;
|
|
9774
9785
|
const a = t.get(A);
|
|
9775
9786
|
if (!a)
|
|
9776
9787
|
return !1;
|
|
9777
|
-
const
|
|
9778
|
-
mutation:
|
|
9788
|
+
const i = (s = (await e.mutate({
|
|
9789
|
+
mutation: oi,
|
|
9779
9790
|
errorPolicy: "all",
|
|
9780
9791
|
fetchPolicy: "no-cache",
|
|
9781
9792
|
variables: {
|
|
9782
9793
|
loginToken: a
|
|
9783
9794
|
}
|
|
9784
|
-
})).data) == null ? void 0 :
|
|
9785
|
-
return
|
|
9795
|
+
})).data) == null ? void 0 : s.customerAuthenticate;
|
|
9796
|
+
return i ? (this.storeCustomer(i), Ee(a), this.customer = i, !0) : !1;
|
|
9786
9797
|
}
|
|
9787
9798
|
/**
|
|
9788
9799
|
* Generates a verification code for the given email address.
|
|
@@ -9790,7 +9801,7 @@ class ds {
|
|
|
9790
9801
|
*/
|
|
9791
9802
|
async generateVerificationCode(A) {
|
|
9792
9803
|
await P.getShadowGraphqlClient().mutate({
|
|
9793
|
-
mutation:
|
|
9804
|
+
mutation: ri,
|
|
9794
9805
|
variables: {
|
|
9795
9806
|
emailAddress: A
|
|
9796
9807
|
}
|
|
@@ -9803,9 +9814,9 @@ class ds {
|
|
|
9803
9814
|
* @returns True if the verification was successful, false otherwise.
|
|
9804
9815
|
*/
|
|
9805
9816
|
async verifyCode(A, e) {
|
|
9806
|
-
var n,
|
|
9817
|
+
var n, i;
|
|
9807
9818
|
const a = (n = (await P.getShadowGraphqlClient().mutate({
|
|
9808
|
-
mutation:
|
|
9819
|
+
mutation: ci,
|
|
9809
9820
|
errorPolicy: "all",
|
|
9810
9821
|
fetchPolicy: "no-cache",
|
|
9811
9822
|
variables: {
|
|
@@ -9814,10 +9825,10 @@ class ds {
|
|
|
9814
9825
|
}
|
|
9815
9826
|
})).data) == null ? void 0 : n.customerVerifyCode;
|
|
9816
9827
|
if (a != null && a.loginToken) {
|
|
9817
|
-
if (!((
|
|
9828
|
+
if (!((i = a.partner) != null && i.id))
|
|
9818
9829
|
throw new Error(`Unable to find customer: ${A}`);
|
|
9819
|
-
const
|
|
9820
|
-
return
|
|
9830
|
+
const s = x.getMap("customerTokens") || /* @__PURE__ */ new Map();
|
|
9831
|
+
return s.set(a.id, a.loginToken), x.setMap("customerTokens", s), this.storeCustomer(a), Ee(a.loginToken), this.customer = {
|
|
9821
9832
|
...a,
|
|
9822
9833
|
loginToken: void 0
|
|
9823
9834
|
}, !0;
|
|
@@ -9829,21 +9840,21 @@ class ds {
|
|
|
9829
9840
|
* @returns A bundle to be used for grouping and operating on large amounts of workflow experiences.
|
|
9830
9841
|
*/
|
|
9831
9842
|
async getNewBundle(A, e) {
|
|
9832
|
-
var
|
|
9833
|
-
const a = (
|
|
9843
|
+
var s;
|
|
9844
|
+
const a = (s = (await P.getShadowGraphqlClient().mutate({
|
|
9834
9845
|
mutation: Fn,
|
|
9835
9846
|
variables: {
|
|
9836
9847
|
collectionId: A,
|
|
9837
9848
|
initialMetadata: e ? Object.entries(e).map((o, r) => ({ key: o[0], value: o[1] })) : void 0
|
|
9838
9849
|
},
|
|
9839
9850
|
fetchPolicy: "no-cache"
|
|
9840
|
-
})).data) == null ? void 0 :
|
|
9851
|
+
})).data) == null ? void 0 : s.bundleCreate;
|
|
9841
9852
|
if (!(a != null && a.id))
|
|
9842
9853
|
throw new Error("Unable to create bundle");
|
|
9843
9854
|
const n = x.getMap("bundlePartnerIds") || /* @__PURE__ */ new Map();
|
|
9844
9855
|
n.set(a.id, a.partner.id), x.setMap("bundlePartnerIds", n);
|
|
9845
|
-
const
|
|
9846
|
-
return
|
|
9856
|
+
const i = x.getMap("bundleOwnerIds") || /* @__PURE__ */ new Map();
|
|
9857
|
+
return i.set(a.id, a.bundleOwnerId), x.setMap("bundleOwnerIds", i), new Ie(this, a, void 0, void 0, a.bundleOwnerId);
|
|
9847
9858
|
}
|
|
9848
9859
|
/**
|
|
9849
9860
|
* Retrieves an existing bundle from the API, by id.
|
|
@@ -9854,7 +9865,7 @@ class ds {
|
|
|
9854
9865
|
*/
|
|
9855
9866
|
async getExistingBundle(A, e, t) {
|
|
9856
9867
|
var g, B, l, d;
|
|
9857
|
-
const a = x.getMap("bundleOwnerIds"), n = a == null ? void 0 : a.get(A),
|
|
9868
|
+
const a = x.getMap("bundleOwnerIds"), n = a == null ? void 0 : a.get(A), i = await P.getShadowGraphqlClient().query({
|
|
9858
9869
|
query: pn,
|
|
9859
9870
|
variables: {
|
|
9860
9871
|
id: A
|
|
@@ -9864,11 +9875,11 @@ class ds {
|
|
|
9864
9875
|
bundleOwnerId: n
|
|
9865
9876
|
}
|
|
9866
9877
|
});
|
|
9867
|
-
if (!((g =
|
|
9878
|
+
if (!((g = i.data) != null && g.bundles) || ((B = i.data) == null ? void 0 : B.bundles.length) === 0 || !((l = i.data) != null && l.bundles[0]))
|
|
9868
9879
|
throw new Error(`Unable to find bundle: ${A}`);
|
|
9869
|
-
const
|
|
9870
|
-
o.set(
|
|
9871
|
-
const r = new Ie(this,
|
|
9880
|
+
const s = (d = i.data) == null ? void 0 : d.bundles[0], o = x.getMap("bundlePartnerIds") || /* @__PURE__ */ new Map();
|
|
9881
|
+
o.set(s.id, s.partner.id), x.setMap("bundlePartnerIds", o);
|
|
9882
|
+
const r = new Ie(this, s, e, t, n);
|
|
9872
9883
|
return await r.getInitializationPromise(), r;
|
|
9873
9884
|
}
|
|
9874
9885
|
/**
|
|
@@ -9889,9 +9900,9 @@ class ds {
|
|
|
9889
9900
|
if (!((n = A.data) != null && n.customers) || A.data.customers.length === 0)
|
|
9890
9901
|
throw new Error("Unable to find customer.");
|
|
9891
9902
|
const t = A.data.customers[0].bundleStakeholders || [], a = x.getMap("bundlePartnerIds") || /* @__PURE__ */ new Map();
|
|
9892
|
-
return t.forEach((
|
|
9893
|
-
var
|
|
9894
|
-
(
|
|
9903
|
+
return t.forEach((i) => {
|
|
9904
|
+
var s, o;
|
|
9905
|
+
(s = i.bundle) != null && s.id && ((o = i.bundle.partner) != null && o.id) && a.set(i.bundle.id, i.bundle.partner.id);
|
|
9895
9906
|
}), x.setMap("bundlePartnerIds", a), t;
|
|
9896
9907
|
}
|
|
9897
9908
|
/**
|
|
@@ -9955,24 +9966,24 @@ class ds {
|
|
|
9955
9966
|
return { transaction: D, workflow: p };
|
|
9956
9967
|
}
|
|
9957
9968
|
throw new H("No workflow ID provided.");
|
|
9958
|
-
}, { transaction:
|
|
9959
|
-
this.currencyCode = (B =
|
|
9969
|
+
}, { transaction: i, workflow: s, readOnly: o } = await n();
|
|
9970
|
+
this.currencyCode = (B = i.product.partner) == null ? void 0 : B.currencyCode;
|
|
9960
9971
|
const r = {
|
|
9961
|
-
product:
|
|
9962
|
-
transaction:
|
|
9972
|
+
product: i.product,
|
|
9973
|
+
transaction: i,
|
|
9963
9974
|
layouts: [],
|
|
9964
9975
|
singleVariantsRenderable: (l = a == null ? void 0 : a.workflowConfiguration) == null ? void 0 : l.singleVariantsRenderable,
|
|
9965
9976
|
stateMutationFunc: o ? async () => {
|
|
9966
9977
|
throw new v("State mutation is forbidden in read only mode!");
|
|
9967
9978
|
} : async (E) => {
|
|
9968
|
-
const h = (x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map()).get(
|
|
9979
|
+
const h = (x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map()).get(i.id) || void 0;
|
|
9969
9980
|
return this.updateTransactionState({ ...E, context: { transactionOwnerId: h } });
|
|
9970
9981
|
},
|
|
9971
9982
|
readOnly: o,
|
|
9972
|
-
workflow:
|
|
9983
|
+
workflow: s
|
|
9973
9984
|
};
|
|
9974
|
-
if (a.type === "transaction" &&
|
|
9975
|
-
const E = JSON.parse(
|
|
9985
|
+
if (a.type === "transaction" && i.workflowState) {
|
|
9986
|
+
const E = JSON.parse(i.workflowState);
|
|
9976
9987
|
r.layouts = Object.values(E.layouts).map((Q) => Q.layout), await _(E), await AA(E), r.reloadedState = E;
|
|
9977
9988
|
} else if (!o && a.workflowState) {
|
|
9978
9989
|
const E = JSON.parse(a.workflowState);
|
|
@@ -9987,12 +9998,12 @@ class ds {
|
|
|
9987
9998
|
), a.previewService ? (r.previewService = a.previewService, (d = r.product) != null && d.modelUrl && (r.modelContainer = r.previewService.loadModel({
|
|
9988
9999
|
model: r.product.modelUrl,
|
|
9989
10000
|
contextService: r.renderableContextService
|
|
9990
|
-
}))) : (r.previewService = t && t(
|
|
10001
|
+
}))) : (r.previewService = t && t(s), (w = r.product) != null && w.modelUrl && (r.modelContainer = (C = r.previewService) == null ? void 0 : C.loadModel({
|
|
9991
10002
|
model: r.product.modelUrl,
|
|
9992
10003
|
contextService: r.renderableContextService
|
|
9993
10004
|
}))), a.type !== "transaction") {
|
|
9994
10005
|
const E = x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map();
|
|
9995
|
-
E.set(
|
|
10006
|
+
E.set(i.id, i.transactionOwnerId), x.setMap("transactionOwnerIds", E);
|
|
9996
10007
|
} else
|
|
9997
10008
|
r.isReloadedTransaction = !0;
|
|
9998
10009
|
this.initialized = !0, this.experienceOptions = r;
|
|
@@ -10009,9 +10020,9 @@ class ds {
|
|
|
10009
10020
|
async getWorkflowExperiences(A, e) {
|
|
10010
10021
|
if (A.length === 0)
|
|
10011
10022
|
throw new H("No options provided!");
|
|
10012
|
-
const t = P.getShadowGraphqlClient(), a = A.map((h, m) => ({ option: h, index: m })), n = a.filter((h) => h.option.type === "transaction"),
|
|
10023
|
+
const t = P.getShadowGraphqlClient(), a = A.map((h, m) => ({ option: h, index: m })), n = a.filter((h) => h.option.type === "transaction"), i = a.filter(
|
|
10013
10024
|
(h) => h.option.type === "integration" || h.option.type === "external"
|
|
10014
|
-
),
|
|
10025
|
+
), s = async () => {
|
|
10015
10026
|
var D, p;
|
|
10016
10027
|
if (n.length === 0)
|
|
10017
10028
|
return [];
|
|
@@ -10038,12 +10049,12 @@ class ds {
|
|
|
10038
10049
|
});
|
|
10039
10050
|
}, o = async () => {
|
|
10040
10051
|
var u, D, p;
|
|
10041
|
-
if (
|
|
10052
|
+
if (i.length === 0)
|
|
10042
10053
|
return [];
|
|
10043
10054
|
const h = await t.mutate({
|
|
10044
10055
|
mutation: ta,
|
|
10045
10056
|
variables: {
|
|
10046
|
-
inputs:
|
|
10057
|
+
inputs: i.map((I) => ({
|
|
10047
10058
|
integrationProductId: I.option.type === "integration" ? I.option.integrationProductId : void 0,
|
|
10048
10059
|
externalIntegrationId: I.option.type === "external" ? I.option.externalIntegrationId : void 0,
|
|
10049
10060
|
externalProductId: I.option.type === "external" ? I.option.externalProductId : void 0,
|
|
@@ -10062,9 +10073,9 @@ class ds {
|
|
|
10062
10073
|
transaction: I,
|
|
10063
10074
|
workflowId: I.workflowId,
|
|
10064
10075
|
readOnly: !1,
|
|
10065
|
-
index:
|
|
10076
|
+
index: i[F].index
|
|
10066
10077
|
}));
|
|
10067
|
-
}, r = (await Promise.all([
|
|
10078
|
+
}, r = (await Promise.all([s(), o()])).flat(), g = [...new Set(r.map((h) => h.workflowId))], B = await rt(g, e), l = new Map(B.map((h) => [h.id, h])), d = x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map(), w = r.map(async (h) => {
|
|
10068
10079
|
var G;
|
|
10069
10080
|
const { transaction: m, workflowId: u, readOnly: D, index: p } = h, I = l.get(u), F = A[p];
|
|
10070
10081
|
!d.get(m.id) && m.transactionOwnerId && d.set(m.id, m.transactionOwnerId);
|
|
@@ -10108,7 +10119,7 @@ class ds {
|
|
|
10108
10119
|
* @deprecated Use getWorkflowExperience to initialize the experience.
|
|
10109
10120
|
*/
|
|
10110
10121
|
async initFromIntegrationProduct(A) {
|
|
10111
|
-
var
|
|
10122
|
+
var i;
|
|
10112
10123
|
if (A === "")
|
|
10113
10124
|
throw new H("No integration product ID provided.");
|
|
10114
10125
|
const t = await P.getShadowGraphqlClient().mutate({
|
|
@@ -10127,13 +10138,13 @@ class ds {
|
|
|
10127
10138
|
const a = t.data.transactionCreate;
|
|
10128
10139
|
if (!a.product)
|
|
10129
10140
|
throw new H("Failed to create transaction, product not available.");
|
|
10130
|
-
this.currencyCode = (
|
|
10141
|
+
this.currencyCode = (i = a.product.partner) == null ? void 0 : i.currencyCode;
|
|
10131
10142
|
const n = x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map();
|
|
10132
10143
|
n.set(a.id, a.transactionOwnerId), x.setMap("transactionOwnerIds", n), this.experienceOptions = {
|
|
10133
10144
|
product: a.product,
|
|
10134
10145
|
transaction: a,
|
|
10135
10146
|
layouts: [],
|
|
10136
|
-
stateMutationFunc: async (
|
|
10147
|
+
stateMutationFunc: async (s) => this.updateTransactionState({ ...s, context: { transactionOwnerId: a.transactionOwnerId } })
|
|
10137
10148
|
}, this.initialized = !0;
|
|
10138
10149
|
}
|
|
10139
10150
|
/**
|
|
@@ -10143,7 +10154,7 @@ class ds {
|
|
|
10143
10154
|
* @deprecated Use getWorkflowExperience to initialize the experience.
|
|
10144
10155
|
*/
|
|
10145
10156
|
async initFromTransaction(A, e = !1) {
|
|
10146
|
-
var
|
|
10157
|
+
var s, o, r, g;
|
|
10147
10158
|
if (A === "")
|
|
10148
10159
|
throw new H("No transaction ID provided.");
|
|
10149
10160
|
const t = P.getShadowGraphqlClient(), a = async () => {
|
|
@@ -10170,15 +10181,15 @@ class ds {
|
|
|
10170
10181
|
};
|
|
10171
10182
|
if (e)
|
|
10172
10183
|
return await a();
|
|
10173
|
-
const n = x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map(),
|
|
10174
|
-
if (
|
|
10175
|
-
const l = (
|
|
10184
|
+
const n = x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map(), i = n.get(A);
|
|
10185
|
+
if (i) {
|
|
10186
|
+
const l = (s = (await t.query({
|
|
10176
10187
|
query: BA,
|
|
10177
10188
|
variables: {
|
|
10178
10189
|
ids: [A]
|
|
10179
10190
|
},
|
|
10180
10191
|
errorPolicy: "all"
|
|
10181
|
-
})).data) == null ? void 0 :
|
|
10192
|
+
})).data) == null ? void 0 : s.transactions[0];
|
|
10182
10193
|
if (!l)
|
|
10183
10194
|
throw new H("Failed to read transaction.");
|
|
10184
10195
|
if (!l.product)
|
|
@@ -10187,7 +10198,7 @@ class ds {
|
|
|
10187
10198
|
product: l.product,
|
|
10188
10199
|
transaction: l,
|
|
10189
10200
|
layouts: [],
|
|
10190
|
-
stateMutationFunc: async (d) => this.updateTransactionState({ ...d, context: { transactionOwnerId:
|
|
10201
|
+
stateMutationFunc: async (d) => this.updateTransactionState({ ...d, context: { transactionOwnerId: i } }),
|
|
10191
10202
|
readOnly: e
|
|
10192
10203
|
}, this.initialized = !0;
|
|
10193
10204
|
return;
|
|
@@ -10217,7 +10228,7 @@ class ds {
|
|
|
10217
10228
|
* @deprecated Remove when the initFrom functions are removed.
|
|
10218
10229
|
*/
|
|
10219
10230
|
async getWorkflowExperienceDeprecated(A, e, t) {
|
|
10220
|
-
var a, n,
|
|
10231
|
+
var a, n, i, s;
|
|
10221
10232
|
if (!this.initialized || !this.experienceOptions)
|
|
10222
10233
|
throw new H("Cannot launch experience: Not initialized.");
|
|
10223
10234
|
if (this.experienceOptions.transaction.workflowId) {
|
|
@@ -10235,7 +10246,7 @@ class ds {
|
|
|
10235
10246
|
}
|
|
10236
10247
|
if (A) {
|
|
10237
10248
|
const r = (x.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map()).get(this.experienceOptions.transaction.id), g = P.getShadowGraphqlClient().mutate({
|
|
10238
|
-
mutation:
|
|
10249
|
+
mutation: ia,
|
|
10239
10250
|
variables: {
|
|
10240
10251
|
workflowId: A,
|
|
10241
10252
|
id: this.experienceOptions.transaction.id
|
|
@@ -10252,7 +10263,7 @@ class ds {
|
|
|
10252
10263
|
this.experienceOptions.transaction,
|
|
10253
10264
|
this.experienceOptions.workflow
|
|
10254
10265
|
);
|
|
10255
|
-
this.experienceOptions.previewService = t && t(await B), this.experienceOptions.renderableContextService = new hA(this.experienceOptions.layouts), (
|
|
10266
|
+
this.experienceOptions.previewService = t && t(await B), this.experienceOptions.renderableContextService = new hA(this.experienceOptions.layouts), (i = this.experienceOptions.product) != null && i.modelUrl && (this.experienceOptions.modelContainer = (s = this.experienceOptions.previewService) == null ? void 0 : s.loadModel({
|
|
10256
10267
|
model: this.experienceOptions.product.modelUrl,
|
|
10257
10268
|
contextService: this.experienceOptions.renderableContextService
|
|
10258
10269
|
}));
|
|
@@ -10292,7 +10303,7 @@ class ds {
|
|
|
10292
10303
|
e.set(A.partner.id, A.id), x.setMap("partnerCustomerIds", e);
|
|
10293
10304
|
}
|
|
10294
10305
|
}
|
|
10295
|
-
class
|
|
10306
|
+
class Si {
|
|
10296
10307
|
getInitializationPromise() {
|
|
10297
10308
|
return Promise.resolve();
|
|
10298
10309
|
}
|
|
@@ -10415,8 +10426,8 @@ class Ss {
|
|
|
10415
10426
|
ejectFromPreviewService() {
|
|
10416
10427
|
}
|
|
10417
10428
|
}
|
|
10418
|
-
var
|
|
10419
|
-
class
|
|
10429
|
+
var wi = /* @__PURE__ */ ((c) => (c.SelectFrame = "SelectFrame", c.SelectImage = "SelectImage", c.Position = "Position", c))(wi || {});
|
|
10430
|
+
class Ei extends j {
|
|
10420
10431
|
constructor(A, e) {
|
|
10421
10432
|
var t;
|
|
10422
10433
|
super(A, e), this.frameService = (t = this.manager.getStepSpecificServices(this.getId())) == null ? void 0 : t.frameService;
|
|
@@ -10458,46 +10469,46 @@ class Es extends j {
|
|
|
10458
10469
|
}
|
|
10459
10470
|
export {
|
|
10460
10471
|
$ as AssetNotFoundError,
|
|
10461
|
-
|
|
10462
|
-
|
|
10463
|
-
|
|
10464
|
-
|
|
10465
|
-
|
|
10472
|
+
Ni as AssetType,
|
|
10473
|
+
Hi as BringForwardCommand,
|
|
10474
|
+
Ri as BringToBackCommand,
|
|
10475
|
+
Ui as BringToFrontCommand,
|
|
10476
|
+
Gi as CanvasCommand,
|
|
10466
10477
|
zn as CollectionProduct,
|
|
10467
|
-
|
|
10478
|
+
vi as CommandContext,
|
|
10468
10479
|
ea as ConversionDataType,
|
|
10469
10480
|
Aa as ConversionLocation,
|
|
10470
|
-
|
|
10471
|
-
|
|
10472
|
-
|
|
10481
|
+
ki as CreateElementCommand,
|
|
10482
|
+
Ji as CreateLayoutCommand,
|
|
10483
|
+
bi as DeleteElementCommand,
|
|
10473
10484
|
CA as FlowExecutionNodeResult,
|
|
10474
10485
|
Xn as FlowExecutionResult,
|
|
10475
10486
|
Wn as FlowService,
|
|
10476
|
-
|
|
10477
|
-
|
|
10478
|
-
|
|
10479
|
-
|
|
10487
|
+
Li as FontAlignmentCommand,
|
|
10488
|
+
Oi as FontColorCommand,
|
|
10489
|
+
Ti as FontSizeCommand,
|
|
10490
|
+
zi as FontSourceCommand,
|
|
10480
10491
|
la as FrameService,
|
|
10481
|
-
|
|
10482
|
-
|
|
10492
|
+
wi as FrameStep,
|
|
10493
|
+
Ei as FrameStepHandle,
|
|
10483
10494
|
oe as GlobalPropertyHandle,
|
|
10484
|
-
|
|
10495
|
+
Ki as GroupCommand,
|
|
10485
10496
|
La as IllustrationStepHandle,
|
|
10486
10497
|
PA as InformationMessageType,
|
|
10487
10498
|
Wa as InformationStepHandle,
|
|
10488
10499
|
$t as IntegrationType,
|
|
10489
|
-
|
|
10490
|
-
|
|
10500
|
+
ji as LayoutElementFactory,
|
|
10501
|
+
Vi as LayoutElementType,
|
|
10491
10502
|
O as LayoutNotFoundError,
|
|
10492
10503
|
Oa as MaterialStepHandle,
|
|
10493
10504
|
MA as MisconfigurationError,
|
|
10494
|
-
|
|
10505
|
+
Si as MockWorkflowManager,
|
|
10495
10506
|
Ta as ModelStepHandle,
|
|
10496
|
-
|
|
10507
|
+
Wi as MoveCommand,
|
|
10497
10508
|
ot as ObjectInput,
|
|
10498
10509
|
Zn as ObjectInputType,
|
|
10499
10510
|
FA as OptionNotFoundError,
|
|
10500
|
-
|
|
10511
|
+
iA as ParseError,
|
|
10501
10512
|
za as PictureStepHandle,
|
|
10502
10513
|
_t as ProductCameraRig,
|
|
10503
10514
|
Tn as ProductCollection,
|
|
@@ -10506,63 +10517,63 @@ export {
|
|
|
10506
10517
|
ze as PromiseQueue,
|
|
10507
10518
|
Ka as QuestionStepHandle,
|
|
10508
10519
|
Te as QueueablePromise,
|
|
10509
|
-
|
|
10520
|
+
Xi as ResizeCommand,
|
|
10510
10521
|
oA as ResourceNotFoundError,
|
|
10511
|
-
|
|
10512
|
-
|
|
10522
|
+
qi as RotateCommand,
|
|
10523
|
+
Zi as SendBackwardsCommand,
|
|
10513
10524
|
ja as ShapeStepHandle,
|
|
10514
|
-
|
|
10525
|
+
di as SpiffCommerceClient,
|
|
10515
10526
|
YA as StakeholderType,
|
|
10516
|
-
$
|
|
10527
|
+
$i as StepAspectType,
|
|
10517
10528
|
j as StepHandle,
|
|
10518
|
-
|
|
10519
|
-
|
|
10529
|
+
_i as StepType,
|
|
10530
|
+
As as TextChangeCommand,
|
|
10520
10531
|
Va as TextStepHandle,
|
|
10521
10532
|
jn as Transform,
|
|
10522
10533
|
Kn as TransformCollection,
|
|
10523
10534
|
v as UnhandledBehaviorError,
|
|
10524
|
-
|
|
10535
|
+
es as UnitOfMeasurement,
|
|
10525
10536
|
V as Variant,
|
|
10526
10537
|
EA as WorkflowExperienceImpl,
|
|
10527
10538
|
L as assetService,
|
|
10528
10539
|
An as createDesign,
|
|
10529
|
-
|
|
10540
|
+
ts as dataUrlFromExternalUrl,
|
|
10530
10541
|
LA as designService,
|
|
10531
|
-
|
|
10542
|
+
as as determineCorrectFontSizeAndLines,
|
|
10532
10543
|
wa as digitalContentStepService,
|
|
10533
|
-
|
|
10534
|
-
|
|
10544
|
+
ns as findElement,
|
|
10545
|
+
is as frameDataCache,
|
|
10535
10546
|
VA as frameStepService,
|
|
10536
|
-
|
|
10547
|
+
ss as generate,
|
|
10537
10548
|
En as generateCommands,
|
|
10538
|
-
|
|
10539
|
-
|
|
10540
|
-
|
|
10541
|
-
|
|
10549
|
+
os as generateSVGWithUnknownColors,
|
|
10550
|
+
Yi as generateStateFromDesignInputSteps,
|
|
10551
|
+
rs as getAttributesFromArrayBuffer,
|
|
10552
|
+
cs as getAxisAlignedBoundingBox,
|
|
10542
10553
|
ga as getBoundedOffsets,
|
|
10543
|
-
|
|
10544
|
-
|
|
10554
|
+
gs as getFrameData,
|
|
10555
|
+
ls as getSvgElement,
|
|
10545
10556
|
QA as getWorkflow,
|
|
10546
10557
|
rt as getWorkflows,
|
|
10547
10558
|
P as graphQlManager,
|
|
10548
10559
|
IA as illustrationStepService,
|
|
10549
|
-
|
|
10560
|
+
Bs as loadFont,
|
|
10550
10561
|
je as materialStepService,
|
|
10551
10562
|
Ve as modelStepService,
|
|
10552
10563
|
ma as moduleStepService,
|
|
10553
10564
|
K as optionService,
|
|
10554
|
-
|
|
10565
|
+
ds as patternImageDataCache,
|
|
10555
10566
|
x as persistenceService,
|
|
10556
10567
|
We as pictureStepService,
|
|
10557
10568
|
Xe as questionStepService,
|
|
10558
|
-
|
|
10559
|
-
|
|
10560
|
-
|
|
10561
|
-
|
|
10562
|
-
|
|
10569
|
+
ws as registerFetchImplementation,
|
|
10570
|
+
Es as registerWindowImplementation,
|
|
10571
|
+
hs as rehydrateSerializedLayout,
|
|
10572
|
+
Cs as setCanvasModule,
|
|
10573
|
+
sA as shapeStepService,
|
|
10563
10574
|
Ba as shortenUrl,
|
|
10564
10575
|
yA as spiffCoreConfiguration,
|
|
10565
|
-
|
|
10576
|
+
yi as stepAspectValuesToDesignInputSteps,
|
|
10566
10577
|
z as textStepService,
|
|
10567
10578
|
Fa as toast
|
|
10568
10579
|
};
|