@spiffcommerce/core 21.13.0-alpha.4 → 21.13.0-alpha.5
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.js +51 -51
- package/dist/index.umd.cjs +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createHttpLink as IA, InMemoryCache as fA, ApolloClient as DA, from as FA, gql as D } from "@apollo/client/core";
|
|
2
|
-
import { fetch as et, getAttributesFromArrayBuffer as Rt, AssetType as ut, StepType as y, getFrameData as tt, frameDataCache as yA, GroupCommand as v, UpdateFramePattern as Ht, UpdateFrameThresholdSettingsCommand as MA, calculateOffsets as At, LayoutElementType as k, generate as J, CreateElementCommand as
|
|
2
|
+
import { fetch as et, getAttributesFromArrayBuffer as Rt, AssetType as ut, StepType as y, getFrameData as tt, frameDataCache as yA, GroupCommand as v, UpdateFramePattern as Ht, UpdateFrameThresholdSettingsCommand as MA, calculateOffsets as At, LayoutElementType as k, generate as J, CreateElementCommand as O, generateSVGWithUnknownColors as Ut, svgObjectURL as Pe, fetchAsString as _, DeleteElementCommand as ee, generateDefaultRectangleFrameSvg as Ct, GetSVGDimensions as SA, patternImageDataCache as Qt, fetchAsArrayBuffer as YA, findElement as xe, modifySVGWithElementProperties as PA, IllustrationColorCommand as We, IllustrationCacheCommand as xA, getFontMetrics as NA, getPatternImageData as Xe, FontAlignmentCommand as RA, FontColorCommand as HA, FontImageFillCommand as Te, applyTextTransformations as qe, determineCorrectFontSizeAndLines as Me, FontSourceCommand as mt, loadFont as at, TextChangeCommand as UA, FontSizeCommand as vA, createElementNS as GA, createElement as Qe, _loadFontExternalDataURL as nt, UpdateWorkflowStateCommand as pt, CommandContext as kA, createCanvas as Ne, getSvgElement as vt, LayoutRenderingPurpose as Gt, renderPapyrusComponentAsString as kt, loadImage as bt, getDomParser as Jt, toBase64 as It, getVariant as bA, generateFrameSVG as JA, getDefaultVariant as be, domParser as Lt, sanitizeSvgTree as Ot, traverse as LA, xmlSerializer as Tt, CreateLayoutCommand as OA, AspectType as Be, rehydrateSerializedLayout as Ae } from "@spiffcommerce/papyrus";
|
|
3
3
|
import { AspectType as es, AssetType as ts, BringForwardCommand as As, BringToBackCommand as as, BringToFrontCommand as ns, CanvasCommand as is, CommandContext as ss, CreateElementCommand as os, CreateLayoutCommand as rs, DeleteElementCommand as cs, FontAlignmentCommand as gs, FontColorCommand as ls, FontSizeCommand as Bs, FontSourceCommand as ds, GroupCommand as ws, LayoutElementFactory as hs, LayoutElementType as Es, MoveCommand as us, ResizeCommand as Cs, RotateCommand as Qs, SendBackwardsCommand as ms, StepAspectType as ps, StepType as Is, TextChangeCommand as fs, UnitOfMeasurement as Ds, UpdateImageSourceCommand as Fs, dataUrlFromExternalUrl as ys, determineCorrectFontSizeAndLines as Ms, findElement as Ss, frameDataCache as Ys, generate as Ps, generateSVGWithUnknownColors as xs, getAttributesFromArrayBuffer as Ns, getAxisAlignedBoundingBox as Rs, getFrameData as Hs, getSvgElement as Us, loadFont as vs, patternImageDataCache as Gs, registerFetchImplementation as ks, registerWindowImplementation as bs, rehydrateSerializedLayout as Js, setCanvasModule as Ls } from "@spiffcommerce/papyrus";
|
|
4
|
-
import { setContext as
|
|
4
|
+
import { setContext as TA } from "@apollo/client/link/context";
|
|
5
5
|
import { onError as zA } from "@apollo/client/link/error";
|
|
6
6
|
import { Pith as zt } from "pith";
|
|
7
7
|
import Kt from "lodash.debounce";
|
|
@@ -180,7 +180,7 @@ class $A {
|
|
|
180
180
|
const e = IA({
|
|
181
181
|
uri: `${$.getServerUrl()}/graphql`,
|
|
182
182
|
fetch: et
|
|
183
|
-
}), t =
|
|
183
|
+
}), t = TA(async (i, s) => {
|
|
184
184
|
const { headers: o } = s, r = o || {}, g = await ZA(), B = s.bearer ?? g.bearer, l = s.partnerId ?? g.partnerId, d = s.activeIntegration ?? g.activeIntegration, w = s.transactionOwnerId, E = s.customerToken ?? g.customerToken, h = s.applicationKey ?? g.applicationKey, u = s.bundleOwnerId;
|
|
185
185
|
try {
|
|
186
186
|
if (window && window.__SENTRY__) {
|
|
@@ -1604,7 +1604,7 @@ class Ya {
|
|
|
1604
1604
|
}
|
|
1605
1605
|
(!this.offsets || this.offsets.length !== this.frameData.length) && (this.offsets = new Array(this.frameData.length)), this.frameData.forEach((i, s) => {
|
|
1606
1606
|
this.offsets[s] = Sa(e[s], i, this.imageData, this.forceImageCover);
|
|
1607
|
-
}), this._debouncedUpdateFrameOffsets(
|
|
1607
|
+
}), console.log("updateOffsets"), this._debouncedUpdateFrameOffsets(
|
|
1608
1608
|
this.offsets,
|
|
1609
1609
|
a,
|
|
1610
1610
|
this.frameData,
|
|
@@ -1681,7 +1681,7 @@ class Ya {
|
|
|
1681
1681
|
recalculateOffsets(e) {
|
|
1682
1682
|
this.frameData && ((!this.offsets || this.offsets.length !== this.frameData.length) && (this.offsets = new Array(this.frameData.length)), this.frameData.forEach((t, A) => {
|
|
1683
1683
|
this.offsets[A] = At(e, t);
|
|
1684
|
-
}), this._debouncedUpdateFrameOffsets(
|
|
1684
|
+
}), console.log("recalculateOffsets"), this._debouncedUpdateFrameOffsets(
|
|
1685
1685
|
this.offsets,
|
|
1686
1686
|
e,
|
|
1687
1687
|
this.frameData,
|
|
@@ -1730,7 +1730,7 @@ class St {
|
|
|
1730
1730
|
id: d.id,
|
|
1731
1731
|
region: a
|
|
1732
1732
|
},
|
|
1733
|
-
command: new
|
|
1733
|
+
command: new O(d, n)
|
|
1734
1734
|
};
|
|
1735
1735
|
} else {
|
|
1736
1736
|
const l = this.configuration.type === y.SilentIllustration ? (B = this.configuration.data.asset) == null ? void 0 : B.fileLink : i, w = await Ut(await (async () => new Promise((h, u) => {
|
|
@@ -1765,7 +1765,7 @@ class St {
|
|
|
1765
1765
|
id: E.id,
|
|
1766
1766
|
region: a
|
|
1767
1767
|
},
|
|
1768
|
-
command: new
|
|
1768
|
+
command: new O(E, n)
|
|
1769
1769
|
};
|
|
1770
1770
|
}
|
|
1771
1771
|
}, this.configuration = e, this.layouts = t, this.product = A || void 0;
|
|
@@ -1903,7 +1903,7 @@ class xa {
|
|
|
1903
1903
|
throw new Error("Region not found");
|
|
1904
1904
|
if (!B || !g)
|
|
1905
1905
|
throw new Error("Neither a region or layout found!");
|
|
1906
|
-
return new
|
|
1906
|
+
return new O(
|
|
1907
1907
|
{
|
|
1908
1908
|
stepRegion: g,
|
|
1909
1909
|
stepName: a,
|
|
@@ -2052,7 +2052,7 @@ class Ra {
|
|
|
2052
2052
|
i && (i.command && a.getCommandDispatcher()(i.command), i.followup && await i.followup());
|
|
2053
2053
|
}
|
|
2054
2054
|
getCreateElementCommand(e, t, A, a) {
|
|
2055
|
-
return new
|
|
2055
|
+
return new O(
|
|
2056
2056
|
{
|
|
2057
2057
|
id: e,
|
|
2058
2058
|
type: k.Frame,
|
|
@@ -2196,7 +2196,7 @@ class Ha {
|
|
|
2196
2196
|
});
|
|
2197
2197
|
}
|
|
2198
2198
|
getCreateElementCommand(e, t, A, a) {
|
|
2199
|
-
return new
|
|
2199
|
+
return new O(
|
|
2200
2200
|
{
|
|
2201
2201
|
stepRegion: t,
|
|
2202
2202
|
stepName: a.stepName,
|
|
@@ -2600,7 +2600,7 @@ class Ga {
|
|
|
2600
2600
|
return console.error(`Can not find layout for region: ${l.panelId}`), null;
|
|
2601
2601
|
const u = [];
|
|
2602
2602
|
return d && u.push(new ee(w)), u.push(
|
|
2603
|
-
new
|
|
2603
|
+
new O(
|
|
2604
2604
|
{
|
|
2605
2605
|
stepRegion: l,
|
|
2606
2606
|
stepName: e.stepName,
|
|
@@ -2728,7 +2728,7 @@ class ba {
|
|
|
2728
2728
|
const E = J();
|
|
2729
2729
|
return {
|
|
2730
2730
|
regionElement: { id: E, region: l },
|
|
2731
|
-
command: new
|
|
2731
|
+
command: new O(
|
|
2732
2732
|
{
|
|
2733
2733
|
stepName: e.stepName,
|
|
2734
2734
|
stepRegion: l,
|
|
@@ -2958,7 +2958,7 @@ class La {
|
|
|
2958
2958
|
return {
|
|
2959
2959
|
id: C,
|
|
2960
2960
|
region: d,
|
|
2961
|
-
command: new
|
|
2961
|
+
command: new O(
|
|
2962
2962
|
{
|
|
2963
2963
|
stepRegion: d,
|
|
2964
2964
|
stepName: e.stepName,
|
|
@@ -2997,7 +2997,7 @@ class La {
|
|
|
2997
2997
|
}
|
|
2998
2998
|
}
|
|
2999
2999
|
const le = new La();
|
|
3000
|
-
class
|
|
3000
|
+
class Oa {
|
|
3001
3001
|
constructor() {
|
|
3002
3002
|
this.latestToast = null, this.toastType = null, this.toastCallbacks = [];
|
|
3003
3003
|
}
|
|
@@ -3022,7 +3022,7 @@ class Ta {
|
|
|
3022
3022
|
);
|
|
3023
3023
|
}
|
|
3024
3024
|
}
|
|
3025
|
-
const
|
|
3025
|
+
const Ta = new Oa(), ze = 30;
|
|
3026
3026
|
class ve extends Error {
|
|
3027
3027
|
constructor(e) {
|
|
3028
3028
|
super(e), Object.setPrototypeOf(this, new.target.prototype), this.name = ve.name;
|
|
@@ -3194,7 +3194,7 @@ class Ka {
|
|
|
3194
3194
|
fillImage: t
|
|
3195
3195
|
});
|
|
3196
3196
|
for (const r of A) {
|
|
3197
|
-
const g = new
|
|
3197
|
+
const g = new Te(r.id, t);
|
|
3198
3198
|
n(g);
|
|
3199
3199
|
}
|
|
3200
3200
|
}
|
|
@@ -3328,7 +3328,7 @@ class Ka {
|
|
|
3328
3328
|
if (a.length > 0) {
|
|
3329
3329
|
const l = a.map((E) => new mt(E.id, g));
|
|
3330
3330
|
if (o) {
|
|
3331
|
-
const E = a.map((h) => new
|
|
3331
|
+
const E = a.map((h) => new Te(h.id, o));
|
|
3332
3332
|
l.push(...E);
|
|
3333
3333
|
}
|
|
3334
3334
|
const d = await this.changeInputTextWithRegion(
|
|
@@ -3369,7 +3369,7 @@ class Ka {
|
|
|
3369
3369
|
), w = l.flatMap((h) => h.commands);
|
|
3370
3370
|
if (o) {
|
|
3371
3371
|
const h = l.map(
|
|
3372
|
-
(u) => new
|
|
3372
|
+
(u) => new Te(u.regionElement.id, o)
|
|
3373
3373
|
);
|
|
3374
3374
|
w.push(...h);
|
|
3375
3375
|
}
|
|
@@ -3402,8 +3402,8 @@ class Ka {
|
|
|
3402
3402
|
let u;
|
|
3403
3403
|
if (h && h.variants) {
|
|
3404
3404
|
const N = h.variants.find((R) => {
|
|
3405
|
-
var
|
|
3406
|
-
return R.id === ((
|
|
3405
|
+
var T;
|
|
3406
|
+
return R.id === ((T = h.defaultVariant) == null ? void 0 : T.id);
|
|
3407
3407
|
}) || h.variants[0];
|
|
3408
3408
|
u = this.createTextFillSpotColor(h, N), i.updateStorage(e, {
|
|
3409
3409
|
colorProfileAssetKey: (E = h.colorProfile) == null ? void 0 : E.key
|
|
@@ -3456,7 +3456,7 @@ class Ka {
|
|
|
3456
3456
|
Q.push(
|
|
3457
3457
|
this.generateTextChangeCommandsForRegion(F, A, m.id, P)
|
|
3458
3458
|
);
|
|
3459
|
-
const S = new
|
|
3459
|
+
const S = new O(m, d);
|
|
3460
3460
|
return {
|
|
3461
3461
|
regionElement: { id: w, region: B },
|
|
3462
3462
|
commands: [S, ...Q],
|
|
@@ -3467,7 +3467,7 @@ class Ka {
|
|
|
3467
3467
|
throw console.log(h), new ve("Error adding font to region");
|
|
3468
3468
|
}
|
|
3469
3469
|
}, g = await Promise.all(A.regions.map(r)).catch((B) => {
|
|
3470
|
-
throw B instanceof ve ? (
|
|
3470
|
+
throw B instanceof ve ? (Ta.setLatestToast("Failed to load font.", ke.Error), B) : B instanceof Ge ? B : new Error(B);
|
|
3471
3471
|
});
|
|
3472
3472
|
return await i.setSelectionsAndElements(
|
|
3473
3473
|
e,
|
|
@@ -6506,7 +6506,7 @@ const En = async (c) => {
|
|
|
6506
6506
|
}, EA = async (c, e, t, A, a, n, i, s, o, r) => {
|
|
6507
6507
|
var F;
|
|
6508
6508
|
await (async () => {
|
|
6509
|
-
var
|
|
6509
|
+
var T;
|
|
6510
6510
|
if (r !== void 0)
|
|
6511
6511
|
return r;
|
|
6512
6512
|
await c.outstandingRequestsPromise();
|
|
@@ -6518,7 +6518,7 @@ const En = async (c) => {
|
|
|
6518
6518
|
context: {
|
|
6519
6519
|
transactionOwnerId: P
|
|
6520
6520
|
}
|
|
6521
|
-
}), R = (
|
|
6521
|
+
}), R = (T = N.data) == null ? void 0 : T.transactions[0].workflowState;
|
|
6522
6522
|
return N.errors ? (N.errors.forEach((L) => {
|
|
6523
6523
|
N.errors && console.log("Server Error:", L.message);
|
|
6524
6524
|
}), null) : R ?? null;
|
|
@@ -6528,16 +6528,16 @@ const En = async (c) => {
|
|
|
6528
6528
|
let S = 0;
|
|
6529
6529
|
if (Object.keys(n).length > 0)
|
|
6530
6530
|
for (const N of Object.keys(n)) {
|
|
6531
|
-
const R = n[N],
|
|
6531
|
+
const R = n[N], T = e.steps.find((L) => L.stepName === N);
|
|
6532
6532
|
for (let L = 0; L < R.selections.length; ++L) {
|
|
6533
6533
|
const W = R.selections[L];
|
|
6534
|
-
if (
|
|
6535
|
-
const
|
|
6536
|
-
P[
|
|
6534
|
+
if (T && (!M || T.option && (T.option.variants || []).length > 1 && !T.data.hideSelectionInCart && !T.data.hideSelectionsInCart)) {
|
|
6535
|
+
const Oe = T.stepTitle;
|
|
6536
|
+
P[Oe] ? P[Oe].push({
|
|
6537
6537
|
id: W.id || "",
|
|
6538
6538
|
name: W.name,
|
|
6539
6539
|
priceModifier: W.priceModifier
|
|
6540
|
-
}) : P[
|
|
6540
|
+
}) : P[Oe] = [
|
|
6541
6541
|
{
|
|
6542
6542
|
id: W.id || "",
|
|
6543
6543
|
name: W.name,
|
|
@@ -7153,7 +7153,7 @@ const Dn = [
|
|
|
7153
7153
|
if (!w)
|
|
7154
7154
|
throw new z(d);
|
|
7155
7155
|
const E = J();
|
|
7156
|
-
return new
|
|
7156
|
+
return new O(
|
|
7157
7157
|
{
|
|
7158
7158
|
id: E,
|
|
7159
7159
|
src: g,
|
|
@@ -7194,7 +7194,7 @@ const Dn = [
|
|
|
7194
7194
|
top: a.y
|
|
7195
7195
|
});
|
|
7196
7196
|
return [
|
|
7197
|
-
new
|
|
7197
|
+
new O(
|
|
7198
7198
|
{
|
|
7199
7199
|
id: l,
|
|
7200
7200
|
path: B.path,
|
|
@@ -7242,7 +7242,7 @@ const Dn = [
|
|
|
7242
7242
|
const o = await _(s, !0), r = /<svg.*?<\/svg>/s, g = o.match(r) || [], B = (g == null ? void 0 : g.length) > 0 ? g[0] : "", w = Lt().parseFromString(B, "image/svg+xml").firstElementChild;
|
|
7243
7243
|
if (!w)
|
|
7244
7244
|
return console.error("Failed to read SVG."), [];
|
|
7245
|
-
|
|
7245
|
+
Ot(w);
|
|
7246
7246
|
const E = {};
|
|
7247
7247
|
LA(w, (f) => {
|
|
7248
7248
|
Dn.includes(f.tagName) && !f.attributes.getNamedItem("fill") && f.setAttribute("fill", "#000000");
|
|
@@ -7257,7 +7257,7 @@ const Dn = [
|
|
|
7257
7257
|
f.classList.add(N), E[N] = { browserValue: P };
|
|
7258
7258
|
}
|
|
7259
7259
|
});
|
|
7260
|
-
const u =
|
|
7260
|
+
const u = Tt().serializeToString(w), C = a.colors;
|
|
7261
7261
|
if (C) {
|
|
7262
7262
|
for (const [f, F] of Object.entries(E))
|
|
7263
7263
|
for (const M of Object.keys(C))
|
|
@@ -7271,7 +7271,7 @@ const Dn = [
|
|
|
7271
7271
|
if (!F)
|
|
7272
7272
|
throw new z(f);
|
|
7273
7273
|
const M = J();
|
|
7274
|
-
return new
|
|
7274
|
+
return new O(
|
|
7275
7275
|
{
|
|
7276
7276
|
colors: E,
|
|
7277
7277
|
id: M,
|
|
@@ -7300,7 +7300,7 @@ const Dn = [
|
|
|
7300
7300
|
if (!r)
|
|
7301
7301
|
throw new z(o);
|
|
7302
7302
|
const g = J();
|
|
7303
|
-
return new
|
|
7303
|
+
return new O(
|
|
7304
7304
|
{
|
|
7305
7305
|
colors: {},
|
|
7306
7306
|
id: g,
|
|
@@ -7343,7 +7343,7 @@ const Dn = [
|
|
|
7343
7343
|
if (!d)
|
|
7344
7344
|
throw new z(l);
|
|
7345
7345
|
const w = J();
|
|
7346
|
-
return new
|
|
7346
|
+
return new O(
|
|
7347
7347
|
{
|
|
7348
7348
|
id: w,
|
|
7349
7349
|
src: s,
|
|
@@ -7400,7 +7400,7 @@ const Dn = [
|
|
|
7400
7400
|
/>
|
|
7401
7401
|
</svg>
|
|
7402
7402
|
`, w = { "spiff-fill-shape": { browserValue: i.color || "#000000" } }, E = J();
|
|
7403
|
-
return new
|
|
7403
|
+
return new O(
|
|
7404
7404
|
{
|
|
7405
7405
|
colors: w,
|
|
7406
7406
|
id: E,
|
|
@@ -7451,7 +7451,7 @@ const Dn = [
|
|
|
7451
7451
|
excludeFromExport: e.data.excludeFromPrint,
|
|
7452
7452
|
preserveAspectRatio: "none"
|
|
7453
7453
|
};
|
|
7454
|
-
A.push(new
|
|
7454
|
+
A.push(new O(B, g));
|
|
7455
7455
|
});
|
|
7456
7456
|
} catch (r) {
|
|
7457
7457
|
console.error(r);
|
|
@@ -7461,7 +7461,7 @@ const Dn = [
|
|
|
7461
7461
|
const l = /<svg.*?<\/svg>/s, d = B.match(l) || [], w = (d == null ? void 0 : d.length) > 0 ? d[0] : "", u = Lt().parseFromString(w, "image/svg+xml").firstElementChild;
|
|
7462
7462
|
if (!u)
|
|
7463
7463
|
throw new ge("Failed to read SVG.");
|
|
7464
|
-
return
|
|
7464
|
+
return Ot(u), Tt().serializeToString(u);
|
|
7465
7465
|
};
|
|
7466
7466
|
o.forEach((B) => {
|
|
7467
7467
|
const l = c.find((w) => w.panelId === B.panelId);
|
|
@@ -7486,7 +7486,7 @@ const Dn = [
|
|
|
7486
7486
|
productOverlay: e.type === y.ProductOverlay ? !0 : void 0,
|
|
7487
7487
|
excludeFromExport: e.data.excludeFromPrint
|
|
7488
7488
|
};
|
|
7489
|
-
A.push(new
|
|
7489
|
+
A.push(new O(d, l));
|
|
7490
7490
|
});
|
|
7491
7491
|
}
|
|
7492
7492
|
return A;
|
|
@@ -7565,7 +7565,7 @@ const Dn = [
|
|
|
7565
7565
|
}
|
|
7566
7566
|
);
|
|
7567
7567
|
a.push(
|
|
7568
|
-
new
|
|
7568
|
+
new O(
|
|
7569
7569
|
{
|
|
7570
7570
|
...C,
|
|
7571
7571
|
fontSize: I,
|
|
@@ -7576,7 +7576,7 @@ const Dn = [
|
|
|
7576
7576
|
)
|
|
7577
7577
|
);
|
|
7578
7578
|
} else
|
|
7579
|
-
a.push(new
|
|
7579
|
+
a.push(new O(C, u));
|
|
7580
7580
|
}
|
|
7581
7581
|
return a;
|
|
7582
7582
|
}, Rn = (c, e) => c.conditions ? c.conditions.every((t) => {
|
|
@@ -7820,7 +7820,7 @@ const Vi = (c, e) => {
|
|
|
7820
7820
|
serializableWorkflow: { steps: [] },
|
|
7821
7821
|
layouts: {}
|
|
7822
7822
|
};
|
|
7823
|
-
a = new v(t.map((o) => new
|
|
7823
|
+
a = new v(t.map((o) => new OA(o))).apply(a);
|
|
7824
7824
|
const i = await Hn(c, e, t, A);
|
|
7825
7825
|
return new v(i).apply(a);
|
|
7826
7826
|
}, bn = D`
|
|
@@ -7963,7 +7963,7 @@ const Vi = (c, e) => {
|
|
|
7963
7963
|
}
|
|
7964
7964
|
}
|
|
7965
7965
|
}
|
|
7966
|
-
`,
|
|
7966
|
+
`, On = D`
|
|
7967
7967
|
query GetBundlesForCustomer($id: String!) {
|
|
7968
7968
|
customers(ids: [$id]) {
|
|
7969
7969
|
bundleStakeholders {
|
|
@@ -7984,7 +7984,7 @@ const Vi = (c, e) => {
|
|
|
7984
7984
|
}
|
|
7985
7985
|
}
|
|
7986
7986
|
}
|
|
7987
|
-
`,
|
|
7987
|
+
`, Tn = D`
|
|
7988
7988
|
${uA}
|
|
7989
7989
|
query GetProductCollectionProducts($id: String!) {
|
|
7990
7990
|
productCollections(ids: [$id]) {
|
|
@@ -8761,7 +8761,7 @@ class ci {
|
|
|
8761
8761
|
if (this.collection.productCollectionProducts)
|
|
8762
8762
|
return this.collection.productCollectionProducts.map((t) => new je(t));
|
|
8763
8763
|
const e = await x.getShadowGraphqlClient().query({
|
|
8764
|
-
query:
|
|
8764
|
+
query: Tn,
|
|
8765
8765
|
variables: {
|
|
8766
8766
|
id: this.getId()
|
|
8767
8767
|
},
|
|
@@ -10675,7 +10675,7 @@ class Ni {
|
|
|
10675
10675
|
if (!this.customer)
|
|
10676
10676
|
throw new Error("Customer not authenticated.");
|
|
10677
10677
|
const e = await x.getShadowGraphqlClient().query({
|
|
10678
|
-
query:
|
|
10678
|
+
query: On,
|
|
10679
10679
|
variables: {
|
|
10680
10680
|
id: this.customer.id
|
|
10681
10681
|
},
|
|
@@ -10825,7 +10825,7 @@ class Ni {
|
|
|
10825
10825
|
return {
|
|
10826
10826
|
transaction: S,
|
|
10827
10827
|
workflowId: S.workflowId,
|
|
10828
|
-
readOnly: ((R = Q.find((
|
|
10828
|
+
readOnly: ((R = Q.find((T) => T.option.transactionId === S.id)) == null ? void 0 : R.option.readOnly) ?? !1,
|
|
10829
10829
|
index: Q[N].index
|
|
10830
10830
|
};
|
|
10831
10831
|
});
|
|
@@ -10863,14 +10863,14 @@ class Ni {
|
|
|
10863
10863
|
...r.map(a),
|
|
10864
10864
|
...g.map(n)
|
|
10865
10865
|
])).flat(), l = [...new Set(B.map((Q) => Q.workflowId))], d = await pA(l, t), w = new Map(d.map((Q) => [Q.id, Q])), E = Y.getMap("transactionOwnerIds") || /* @__PURE__ */ new Map(), h = B.map(async (Q) => {
|
|
10866
|
-
var
|
|
10866
|
+
var T;
|
|
10867
10867
|
const { transaction: p, workflowId: f, readOnly: F, index: M } = Q, P = w.get(f), S = e[M];
|
|
10868
10868
|
!E.get(p.id) && p.transactionOwnerId && E.set(p.id, p.transactionOwnerId);
|
|
10869
10869
|
const N = E.get(p.id) || void 0, R = {
|
|
10870
10870
|
product: p.product,
|
|
10871
10871
|
transaction: p,
|
|
10872
10872
|
layouts: [],
|
|
10873
|
-
singleVariantsRenderable: (
|
|
10873
|
+
singleVariantsRenderable: (T = S == null ? void 0 : S.workflowConfiguration) == null ? void 0 : T.singleVariantsRenderable,
|
|
10874
10874
|
stateMutationFunc: F ? async () => {
|
|
10875
10875
|
throw new b("State mutation is forbidden in read only mode!");
|
|
10876
10876
|
} : async (L) => this.updateTransactionState({ ...L, context: { transactionOwnerId: N } }),
|
|
@@ -11512,5 +11512,5 @@ export {
|
|
|
11512
11512
|
$ as spiffCoreConfiguration,
|
|
11513
11513
|
Vi as stepAspectValuesToDesignInputSteps,
|
|
11514
11514
|
j as textStepService,
|
|
11515
|
-
|
|
11515
|
+
Ta as toast
|
|
11516
11516
|
};
|
package/dist/index.umd.cjs
CHANGED
|
@@ -649,7 +649,7 @@
|
|
|
649
649
|
...IntegrationProductFields
|
|
650
650
|
}
|
|
651
651
|
}
|
|
652
|
-
`,we=[l.StepType.SilentIllustration,l.StepType.ProductOverlay],KA=async c=>{const e=[];c.introduction&&e.push({name:"Introduction",title:c.name,renderableSteps:[{type:l.StepType.Introduction,stepName:"Introduction",stepTitle:c.name,helpText:c.introduction,data:{},conditions:[]}],silentSteps:[]});for(const A of c.steps){const n=VA(A.stepName,c.stepGroups);if(!n)e.push({name:A.stepName,title:A.stepTitle,renderableSteps:we.includes(A.type)?[]:[A],silentSteps:we.includes(A.type)?[A]:[]});else{const a=e.find(i=>i.name===n.name);a?we.includes(A.type)?a.silentSteps.push(A):a.renderableSteps.push(A):e.push({name:n.name,title:n.name,renderableSteps:we.includes(A.type)?[]:[A],silentSteps:we.includes(A.type)?[A]:[]})}}const t="workflow.steps.finish.confirmDesign";return e.push({name:"Finish",title:t,renderableSteps:[{type:l.StepType.Finish,stepName:"Finish",stepTitle:t,helpText:"",data:{modelAnimation:c.finalizeStepConfig?c.finalizeStepConfig.modelAnimation:void 0,lookAtAnimation:c.finalizeStepConfig?c.finalizeStepConfig.lookAtAnimation:void 0},conditions:[]}],silentSteps:[]}),e},VA=(c,e)=>e.find(t=>t.stepNames.includes(c)),Ae=(c,e)=>(c.conditions||[]).every(t=>{const A=e[t.targetStepName];if(A&&A.selectedVariants){const n=A.selectedVariants;return t.requiredVariantSelections.some(a=>n.find(i=>i.id===a)!==void 0)}return!1}),WA=(c,e)=>{const t={name:c.name,title:c.title,renderableSteps:c.renderableSteps.filter(A=>Ae(A,e)),silentSteps:c.silentSteps.filter(A=>Ae(A,e))};return t.silentSteps.length===0&&t.renderableSteps.length===0?null:t},ne=(c,e)=>c.map(t=>WA(t,e)).filter(t=>t!==null),XA=async(c,e,t=!1)=>{var i;const A=ne(c,e),n=[];for(const o of A)for(const s of o.renderableSteps){const r=(((i=s.option)==null?void 0:i.variants)||[]).length;s.silent||(s.type===l.StepType.Model||s.type===l.StepType.Material||s.type===l.StepType.Picture||s.type===l.StepType.Shape?(r>1||t)&&n.push(s.stepName):n.push(s.stepName))}const a=A.filter(o=>o.renderableSteps.filter(r=>n.includes(r.stepName)).length>0);for(const o of a)o.renderableSteps=o.renderableSteps.filter(s=>n.includes(s.stepName));return a};class Ge{constructor(){this.timestamp=Date.now()}}class ke{constructor(e,t=!0){this.queue=[],this.activePromise=void 0,this.queueMaxSize=void 0,this.queueMaxSize=e,this.isEnabled=t}enqueue(e){if(this.queue.push(e),this.queueMaxSize!==void 0&&this.queue.length>this.queueMaxSize){const t=this.queue.length-1;for(let A=0;A<t;++A)this.queue.shift()}this.isEnabled&&(this.activePromise||(this.activePromise=this.dequeue()))}get enabled(){return this.isEnabled}set enabled(e){!this.isEnabled&&e&&!this.activePromise&&(this.activePromise=this.dequeue()),this.isEnabled=e}hasActivePromise(){return!!this.activePromise}getRemainingQueueSize(){return this.queue.length}async finalize(){return this.activePromise?this.activePromise:Promise.resolve()}async dequeue(){const e=this.queue.shift();if(!e){this.activePromise=void 0;return}try{await e.execute()}catch(t){console.log(t)}finally{await this.dequeue()}}}function Ft(c,e,t,A){const n=t.width*c.zoom,a=t.height*c.zoom;if(A){const o=c,s=Math.max(e.width/t.width,e.height/t.height);o.zoom=Math.max(s,c.zoom);const r=t.width*o.zoom,g=t.height*o.zoom;return o.x=Fe(c.x,e.width-r,0),o.y=Fe(c.y,e.height-g,0),o}const i=c;return i.x=Fe(i.x,-n,e.width),i.y=Fe(i.y,-a,e.height),i}function Fe(c,e,t){return Math.min(Math.max(c,e),t)}class Mt{constructor(e){this.minZoomScale=[.03],this.maxZoomScale=[20],this._debouncedUpdateFrameOffsets=ot(this.updateFrameOffsets,200),this.targetElements=[],this.onFrameDataChangeListeners=[],this.onZoomChangeListeners=[],this.forceImageCover=e,this.thresholdSettings={useThreshold:!1,invertThreshold:!1,threshold:128,thresholdSaturation:.5}}connectWorkflowManager(e,t){t&&e.addStepSpecificStorageCallback(async A=>{if(A){const n=A;if(n.currentFrameSources){let a=!1;for(let i=0;i<n.currentFrameSources.length;i++){const o=n.currentFrameSources[i],s=await l.getFrameData(o);st(s,this.frameData)||(this.frameData||(this.frameData=new Array(n.currentFrameSources.length)),this.frameData[i]=s,a=!0)}a&&(this.onFrameDataChangeListeners.forEach(i=>i(this.frameData)),this.frameData&&this.imageData&&(this.recalculateOffsets(this.imageData),this.updateOffsets(this.offsets),this.recalculateZoomLimits(this.imageData,this.frameData)))}}},t),this.workflowManager=e,this.stepName=t}setTargetElements(e){this.targetElements=e}getFrameData(){return this.frameData}setFrameData(e){if(!e){this.frameData=void 0;return}e.forEach((t,A)=>{const n=l.frameDataCache.get(t);n&&(this.frameData||(this.frameData=new Array(e.length)),this.frameData[A]=n)})}getImageData(){return this.imageData}getOffsets(){return this.offsets}setOffsets(e){this.offsets=e}setZoom(e,t,A,n){if(this.imageData&&this.offsets&&this.frameData){(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length));const a=this.frameData.map((i,o)=>{const s=(t[o]-this.offsets[o].x)/this.offsets[o].zoom,r=(A[o]-this.offsets[o].y)/this.offsets[o].zoom,g=t[o]-s*e[o],B=A[o]-r*e[o];return{x:g,y:B,zoom:this.imageData.width*e[o]/this.imageData.width}});this.updateOffsets(a,n),this.onZoomChangeListeners.forEach(i=>i(e))}}setPatternData(e,t=!0){this.imageData=e,e&&this.frameData&&((t||!this.offsets)&&this.recalculateOffsets(e),this.updateOffsets(this.offsets,void 0,!0)),this.imageData&&this.frameData&&this.recalculateZoomLimits(this.imageData,this.frameData)}updateOffsets(e,t,A){const n=this.imageData;if(!n||!this.frameData)return;if(this.frameData.length!==e.length)throw new k("Frame data and offsets are not the same length. This is a bug. Please report it.");if(!this.offsets.some((i,o)=>!(e[o].x===i.x&&e[o].y===i.y&&e[o].zoom===i.zoom))&&!A){t&&t();return}(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((i,o)=>{this.offsets[o]=Ft(e[o],i,this.imageData,this.forceImageCover)}),this._debouncedUpdateFrameOffsets(this.offsets,n,this.frameData,this.thresholdSettings,this.targetElements,t)}getThresholdSettings(){return this.thresholdSettings}setThresholdSettings(e){this.thresholdSettings=e,this.imageData&&this.frameData&&this._debouncedUpdateFrameOffsets(this.offsets,this.imageData,this.frameData,e,this.targetElements)}onFrameDataChanged(e){e(this.frameData),this.onFrameDataChangeListeners.push(e)}onZoom(e){this.onZoomChangeListeners.push(e)}updateFrameOffsets(e,t,A,n,a,i){if(!A||A.length===0||A.some(s=>!s))throw new k("Frame data not set. This is a bug");if(!this.workflowManager)throw new k("No workflow manager set, cannot update offsets.");const o=this.workflowManager.getCommandDispatcher();a.forEach((s,r)=>{o(new l.GroupCommand([new l.UpdateFramePattern(s,t,e[r]),new l.UpdateFrameThresholdSettingsCommand(s,n.useThreshold,n.invertThreshold,n.threshold,n.thresholdSaturation)]))}),this.stepName&&this.workflowManager.updateStorage(this.stepName,{frameOffsetsList:e}),i&&i()}recalculateZoomLimits(e,t){(this.minZoomScale.length!==t.length||this.maxZoomScale.length!==t.length)&&(this.minZoomScale=new Array(t.length),this.maxZoomScale=new Array(t.length)),t.forEach((A,n)=>{const a=Math.max(A.width/e.width,A.height/e.height);this.forceImageCover?(this.minZoomScale[n]=a,this.maxZoomScale[n]=a*2.5):(this.minZoomScale[n]=a/10,this.maxZoomScale[n]=a*2.5)})}recalculateOffsets(e){this.frameData&&((!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((t,A)=>{this.offsets[A]=l.calculateOffsets(e,t)}),this._debouncedUpdateFrameOffsets(this.offsets,e,this.frameData,this.thresholdSettings,this.targetElements))}}class yt{constructor(e,t,A){this.processRegion=async n=>{var s,r,g,B;const a=this.layouts.find(d=>d.panelId===n.panelId);if(!a)throw new J(n);let i="";if(this.configuration.type===l.StepType.ProductOverlay){let d="";if((s=this.product)!=null&&s.overlayImageUrl&&(d=this.product.overlayImageUrl),i=d,!d)throw new ge(this.configuration,"Couldn't find an asset for product overlay step")}const o=this.evaluateAssetType();if(o===l.LayoutElementType.Image){const d=this.configuration.type===l.StepType.SilentIllustration?(r=this.configuration.data.asset)==null?void 0:r.fileLink:(g=this.product)==null?void 0:g.overlayImageUrl;if(!d)throw new Error("Undefined raster silent step source");const w={stepName:this.configuration.stepName,id:l.generate(),src:d,type:o,y:n.top,x:n.left,width:n.width,height:n.height,layer:n.layer,layerIndex:n.layerIndex,immutable:n.immutable,productOverlay:this.configuration.type===l.StepType.ProductOverlay?!0:void 0,rotation:n.rotation,excludeFromExport:this.configuration.data.excludeFromPrint,preserveAspectRatio:"none"};return{regionElement:{id:w.id,region:n},command:new l.CreateElementCommand(w,a)}}else{const d=this.configuration.type===l.StepType.SilentIllustration?(B=this.configuration.data.asset)==null?void 0:B.fileLink:i,w=async()=>new Promise((E,Q)=>{if(!d){Q("Undefined vector silent step source");return}l.fetchAsString(d,!0).then(m=>{E(m)}).catch(m=>console.error(m))}),h=await l.generateSVGWithUnknownColors(await w()),u={stepName:this.configuration.stepName,id:l.generate(),cachedObjectURL:await l.svgObjectURL(h.svg),src:d,svg:h.svg,colors:h.colors,type:o,y:n.top,x:n.left,width:n.width,height:n.height,layer:n.layer,layerIndex:n.layerIndex,rotation:n.rotation,immutable:n.immutable,productOverlay:this.configuration.type===l.StepType.ProductOverlay?!0:void 0,excludeFromExport:this.configuration.data.excludeFromPrint};return{regionElement:{id:u.id,region:n},command:new l.CreateElementCommand(u,a)}}},this.configuration=e,this.layouts=t,this.product=A||void 0}async trigger(){if(!this.configuration.data.regions)throw new ge(this.configuration,"Missing regions.");if(this.configuration.type===l.StepType.SilentIllustration){const e=this.configuration.data.regions.map(this.processRegion);return Promise.all(e)}else return this.configuration.type===l.StepType.ProductOverlay?Promise.all(this.configuration.data.regions.map(e=>{if(!this.layouts.find(A=>e.panelId===A.panelId))throw new J(e);return this.processRegion(e)})):Promise.reject("Unknown silent step. This is a bug")}evaluateAssetType(){var t,A,n;const e=this.configuration.type===l.StepType.ProductOverlay&&((t=this.product)!=null&&t.overlayImageUrl)?this.product.overlayImageUrl.toLowerCase():(n=(A=this.configuration.data.asset)==null?void 0:A.fileLink)==null?void 0:n.toLowerCase().split("?")[0];return e!=null&&e.startsWith("data:image/png")||e!=null&&e.endsWith(".jpeg")||e!=null&&e.endsWith(".jpg")||e!=null&&e.endsWith(".png")?l.LayoutElementType.Image:(e!=null&&e.endsWith(".svg")||e!=null&&e.startsWith("image/svg+xml"),l.LayoutElementType.Illustration)}}const St=async c=>{const e=`${X.getServicesApiUrl()}/shortener`;try{return(await(await fetch(e,{method:"POST",body:JSON.stringify({longUrl:c}),headers:{"Content-Type":"application/json"}})).json()).shortUrl}catch(t){throw console.error(t),new Ie("Failed to shorten URL, see console.")}};class Yt{async poll(){try{if(await this.predicate()){this.onSuccess(),this.pollingId>-1&&window.clearInterval(this.pollingId);return}}catch{}this.attempts+=1,this.attempts<this.maxAttempts?this.pollingId=window.setTimeout(this.poll.bind(this),this.interval):this.onFailure()}constructor(e,t,A,n=3e3,a=10){this.onSuccess=t,this.onFailure=A,this.predicate=e,this.attempts=0,this.pollingId=-1,this.interval=n,this.maxAttempts=a,this.poll()}}class qA{async init(e,t,A){return A&&await this.reload(e,t,A),null}async reload(e,t,A){const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),s=Object.values(A.layouts).map(r=>r.elements).flat().filter(r=>r.stepName===e.stepName).map(r=>({id:r.id,region:r.stepRegion}));await t.setSelectionsAndElements(e.stepName,[],s,async()=>{var B,d;const r=(B=n==null?void 0:n.storage)==null?void 0:B.videoShortUrl,g=(d=n==null?void 0:n.storage)==null?void 0:d.videoUrl;t.updateStorage(e.stepName,{videoShortUrl:r,videoUrl:g})})}async regenerateQRCode(e,t,A,n,a,i,o,s,r){if(!t&&A!==""&&n===""){const g=async()=>{var I,f;const m=(await wt([A]))[0],D=(f=(I=m==null?void 0:m.versions)==null?void 0:I.find(p=>p.name==="mpeg4"))==null?void 0:f.link;return{asset:m,link:D}},B=await new Promise((m,D)=>{new Yt(async()=>!!(await g()).link,async()=>{const I=await g();if(!I.link||!I.link)throw new Z(I.asset);m({rel:"mpeg4",href:I.link})},()=>{D("Poller timed out with 40 attempts @ 3 second interval")},3e3,40)});e.forEach(m=>s(new l.DeleteElementCommand(m.id)));const d=i.data.baseUrl.slice(0,4)==="http"?"":"https://",w=new URL(d+i.data.baseUrl);w.searchParams.append("video",btoa(JSON.stringify([B]))),w.pathname=w.pathname+(w.pathname.slice(-1)==="/"?"":"/");const h=w.toString();if(h.length>=2e3)throw new Ie("Cannot create QR code, URL too long.");const u=await St(h);if(o(u),!i.data||!i.data.regions)throw new ge(i,"Missing regions.");const E=await this.regionElements(i),Q=await this.command(u,E,a,i.stepName);Q&&(Q.command&&a.getCommandDispatcher()(Q.command),Q.followup&&await Q.followup()),await a.setSelectionsAndElements(i.stepName,[],E,async()=>{a.updateStorage(i.stepName,{videoShortUrl:u,videoUrl:n}),r(!1)})}else r(!1)}async regionElements(e){const t=A=>({id:l.generate(),region:A});return e.data.regions.map(t)}async command(e,t,A,n){const a=A.getLayouts(),o=`data:image/svg+xml;base64,${btoa(await rt.toString(e,{type:"svg"}))}`,s=t.map(r=>{const g=r.region,B=a.find(d=>d.panelId===(g==null?void 0:g.panelId));if(!B&&g)throw new J(g);if(B&&!g)throw new Error("Region not found");if(!B||!g)throw new Error("Neither a region or layout found!");return new l.CreateElementCommand({stepRegion:g,stepName:n,id:r.id,src:o,type:l.LayoutElementType.Image,y:g.top,x:g.left,width:g.width,height:g.height,rotation:0},B)});return{command:new l.GroupCommand(s),followup:async()=>{}}}}const Pt=new qA;class ZA{constructor(){this.frameSourceSvg=async(e,t)=>{if(!e)return l.generateDefaultRectangleFrameSvg(t);const A=e.asset;if(!A)throw new W(e);const n=A.fileLink;if(n)return l.fetchAsString(n,!0);throw new Z(A)}}async init(e,t,A){if(A)return await this.reload(e,t,A),null;if(e.mandatory&&t.setMandatoryFulfilled(e.stepName,!1),t.markStepsAsInitialised([e.stepName]),e.option&&e.option.variants&&e.option.variants.length>0){const n=e.option,a=L.getDefaultVariant(n);return a?this.selectVariantCommand(e,a,[],t,void 0,e.data.placeholderImageUrl):null}return this.selectVariantCommand(e,void 0,[],t,void 0,e.data.placeholderImageUrl)}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),s=Object.values(A.layouts).map(g=>g.elements).flat().filter(g=>g.stepName===e.stepName).map(g=>({id:g.id,region:g.stepRegion}));if(!e.option||(e.option.variants||[]).length===0){const g=e.data.regions.map(B=>l.generateDefaultRectangleFrameSvg(B));t.updateStorage(e.stepName,{currentFrameSources:g})}if(n){const g=async()=>{var w,h,u,E;const B=(w=n.storage)==null?void 0:w.framePatternSrc,d=(h=n.storage)==null?void 0:h.frameOffsetsList;if(t.updateMetadata(e.stepName,{frameOffsetsList:d,framePatternSrc:B}),B){const Q=(u=t.getStepSpecificServices(e.stepName))==null?void 0:u.frameService;if(!Q)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(B,Q,!0),t.updateMetadata(e.stepName,{image:B}),t.updateStorage(e.stepName,{framePatternSrc:B})}if(d!=null&&d.some(Q=>Q.zoom)){const Q=(E=t.getStepSpecificServices(e.stepName))==null?void 0:E.frameService;if(!Q)throw new Error("Frame service unavailable, cannot load pattern!");Q.updateOffsets(d)}t.setMandatoryFulfilled(e.stepName,!0)};if(n.selectedVariants&&n.selectedVariants.length>0){const B=n.selectedVariants[0].id;if(e.option&&B){const d=(r=e.option.variants)==null?void 0:r.find(w=>w.id===B);d&&await t.setSelectionsAndElements(e.stepName,[d],s,async()=>{const w=await Promise.all(e.data.regions.map(h=>this.frameSourceSvg(d,h)));t.updateStorage(e.stepName,{currentFrameSources:w}),await g()})}}else await t.setSelectionsAndElements(e.stepName,[],s,g)}}selectImage(e,t,A,n=!0){var s;const a=this.patternSource(t),i=(s=A.getStepStorage(e.stepName))==null?void 0:s.framePatternSrc;return console.log("selectImage: ",{asset:t,assetSrc:a,existingSrc:i,equals:i===a}),i&&i===a?Promise.resolve():(console.log("applying image"),A.setEditedStatus(e.stepName,!0),(t.fileLink||"").endsWith("pdf")?new Promise(r=>{A.addPoller(new Yt(async()=>{var w;const B=(w=(await G.getLocalOrFromServer(t.key||"")).versions)==null?void 0:w.find(h=>h.name==="svg");return B?(await fetch(B.link)).status===200:!1},()=>{G.getLocalOrFromServer(t.key||"").then(g=>{this.loadPatternFromAsset(g,e,A,n).then(r)})},()=>{throw new Ie("Failed to resolve transcoded PDF")}))}):this.loadPatternFromAsset(t,e,A,n))}async selectVariant(e,t,A,n,a){const i=await this.selectVariantCommand(e,t,A,n,a);i&&(i.command&&n.getCommandDispatcher()(i.command),i.followup&&await i.followup())}getCreateElementCommand(e,t,A,n){return new l.CreateElementCommand({id:e,type:l.LayoutElementType.Frame,x:t.left,y:t.top,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,rotation:t.rotation,scaleX:t.width/n.frameData.width,scaleY:t.height/n.frameData.height,path:n.frameData.path,dataWidth:n.frameData.width,dataHeight:n.frameData.height,stepRegion:t,stepName:n.stepName,disablePlaceholder:n.disablePlaceholder,focalBlur:n.focalBlur,focalBlurStrength:n.focalBlurStrength,focalBlurRadius:n.focalBlurRadius,pattern:n.pattern,immutable:t.immutable},A)}async loadPatternFromString(e,t,A){if(e.endsWith("svg")){const n=await l.GetSVGDimensions(e),a=n.width,i=n.height,o={src:e,width:a,height:i,aspect:a/i};l.patternImageDataCache.set(e,o),t.setPatternData(o,A)}else{const n=await l.fetchAsArrayBuffer(e,!0),a=await l.getAttributesFromArrayBuffer(n),i={src:e,width:a.width,height:a.height,aspect:a.width/a.height};l.patternImageDataCache.set(e,i),t.setPatternData(i,A)}}async selectVariantCommand(e,t,A,n,a,i){var d;const o=(d=n.getStepSpecificServices(e.stepName))==null?void 0:d.frameService;if(!o)throw new Error("Frame service unavailable, cannot load pattern!");const s=await Promise.all(e.data.regions.map(w=>this.frameSourceSvg(t,w)));a&&a(!0);const r=await Promise.all(e.data.regions.map(async(w,h)=>{const u=await l.getFrameData(s[h]),E=o.getImageData(),Q=A.map(F=>new l.DeleteElementCommand(F.id)),m=E?l.calculateOffsets(E,u):void 0,D=E?{id:l.generate(),src:E.src,x:(m==null?void 0:m.x)||0,y:(m==null?void 0:m.y)||0,width:E.width,height:E.height,scaleX:(m==null?void 0:m.zoom)||1,scaleY:(m==null?void 0:m.zoom)||1,rotation:0}:void 0,I=l.generate(),p=n.getLayouts().find(F=>F.panelId===w.panelId);if(!p)throw new J(w);return{command:this.getCreateElementCommand(I,w,p,{frameData:u,pattern:D,disablePlaceholder:e.data.disablePlaceholder,focalBlur:e.data.focalBlur,focalBlurStrength:e.data.focalBlurStrength,focalBlurRadius:e.data.focalBlurRadius,stepName:e.stepName}),regionEl:{id:I,region:w},removeExistingCommands:Q}})),g=r.map(w=>w.command),B=r.map(w=>w.removeExistingCommands).flat();return{command:new l.GroupCommand([...g,...B]),followup:async()=>{a&&a(!1),await n.setSelectionsAndElements(e.stepName,t?[t]:[],[...r.map(w=>w.regionEl)],async()=>{var w;if(n.updateStorage(e.stepName,{currentFrameSources:s}),i){const h=(w=n.getStepSpecificServices(e.stepName))==null?void 0:w.frameService;if(!h)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(i,h,!0)}})}}}patternSource(e){var n;const t=(n=e.versions)==null?void 0:n.find(a=>a.name==="svg");if(t)return t.link;const A=e.fileLink;if(A)return A;throw new Z(e)}async loadPatternFromAsset(e,t,A,n){var s;const a=this.patternSource(e),i=A.markUpdatePending(),o=(s=A.getStepSpecificServices(t.stepName))==null?void 0:s.frameService;if(!o)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(a,o,n),A.updateMetadata(t.stepName,{image:a}),A.updateStorage(t.stepName,{framePatternSrc:a}),A.markUpdateCompleted(i)}}const he=new ZA;class $A{async getIllustrationBody(e){return new Promise(t=>{l.fetchAsString(e,!0).then(A=>{t(A)}).catch(A=>console.error(A))})}getCreateElementCommand(e,t,A,n){return new l.CreateElementCommand({stepRegion:t,stepName:n.stepName,colors:n.svg.colors,id:e,src:n.src,svg:n.svg.svg,cachedObjectURL:n.objectURL,type:l.LayoutElementType.Illustration,y:t.top,x:t.left,rotation:t.rotation,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,immutable:t.immutable},A)}getColors(e,t){const A=t.getRegionElements(e.stepName)||[];if(A.length===0)return[];try{return l.findElement(A[0].id,t.getAllLayoutData()).colors}catch{return[]}}async init(e,t,A){const n=e.option;if(!n)return null;if(A)return this.reload(e,t,A);{const a=L.getDefaultVariant(n);if(a)return await this.selectVariantCommand(e,a,[],()=>{},t,!0)}return null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(g=>g.elements).flat().filter(g=>g.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const g=n.selectedVariants[0].id;if(s&&g){const B=(r=s.variants)==null?void 0:r.find(d=>d.id===g);if(B){const d=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[B],d,async()=>{var w;t.updateMetadata(e.stepName,{colors:(w=n.storage)==null?void 0:w.colors}),t.setMandatoryFulfilled(e.stepName,!0)})}}else throw new Error("Required illustration variant no longer available")}return null}async availableColors(e,t){var n;const A=e.data.colorOption;return A?A?(n=A.variants)==null?void 0:n.map(a=>({fill:a.color,stroke:a.color,variant:a})):[]:[]}async changeColorsCommand(e,t,A,n,a){var g;const i={};for(const[B,d]of a.entries())i[B]={browserValue:d,spotColor:(g=i[B])==null?void 0:g.spotColor};const o=l.modifySVGWithElementProperties(e,t,A,i),s=await l.svgObjectURL(o),r=[];for(const B of n){for(const[d,w]of a.entries())r.push(new l.IllustrationColorCommand(B,d,w));r.push(new l.IllustrationCacheCommand(B,o,s))}return new l.GroupCommand(r)}async changeColors(e,t,A,n,a){var w,h;if(t.length===0)return;const i=l.findElement(t[0].id,n().map(u=>u.layoutState)),o={...i.colors},s={};Object.entries(o).forEach(([u,E])=>{const Q={browserValue:E.browserValue},m=E.spotColor;m&&(Q.spotColor={profileName:m.profileName,namedColor:m.namedColor}),s[u]=Q});for(const[u,E]of a.entries())o[u]={browserValue:E,spotColor:(w=o[u])==null?void 0:w.spotColor},s[u]={browserValue:E};let r=Array.from(Object.values(o)).map(u=>u.browserValue);const g=e.data.colorOption;g&&((h=g.variants)==null||h.forEach(u=>{r=r.map(E=>{var Q;return E.toLowerCase()===((Q=u.color)==null?void 0:Q.toLowerCase())?u.name:E})})),A.updateMetadata(e.stepName,{colors:r});const B=new Map;if(Object.entries(o).forEach(([u,E])=>{B.set(u,E.browserValue)}),!i.svg)throw new Error("Colors changed before SVG loaded. This should never happen!");const d=await this.changeColorsCommand(i.svg,i.width,i.height,t.map(u=>u.id),B);A.updateStorage(e.stepName,{colors:s}),A.getCommandDispatcher()(d)}async selectVariant(e,t,A,n,a){const i=await this.selectVariantCommand(e,t,A,n,a);i&&(i.command&&a.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantCommand(e,t,A,n,a,i){var m;if(!e.data||!e.data.regions)throw new ge(e,"Missing regions.");n(!0);const o=A.map(D=>new l.DeleteElementCommand(D.id));e.mandatory&&a.setMandatoryFulfilled(e.stepName,!1);const s=t.asset;if(!s)throw new W(t);const r=s.fileLink;if(!r)throw new Z(s);const g=await l.generateSVGWithUnknownColors(await this.getIllustrationBody(r)),B=await l.svgObjectURL(g.svg),d=D=>{const I=a.getLayouts().find(p=>p.panelId===D.panelId);if(!I)throw new J(D);const f=l.generate();return{regionElement:{id:f,region:D},command:this.getCreateElementCommand(f,D,I,{stepName:e.stepName,src:r,objectURL:B,svg:g})}},w=e.data.regions.map(d),u=[...w.map(D=>D.command),...o];let E=Array.from(Object.values(g.colors)).map(D=>D.browserValue);const Q=e.data.colorOption;return Q&&((m=Q.variants)==null||m.forEach(D=>{E=E.map(I=>{var f;return I.toLowerCase()===((f=D.color)==null?void 0:f.toLowerCase())?D.name:I})})),a.updateMetadata(e.stepName,{colors:E}),{command:new l.GroupCommand(u),followup:async()=>{await a.setSelectionsAndElements(e.stepName,[t],w.map(f=>f.regionElement),async()=>{i||a.setMandatoryFulfilled(e.stepName,!0),n(!1)});const D=await this.availableColors(e,a)||[],I=Object.keys(g.colors);if(e.data.colorPickerEnabled&&D.length===1&&I.length===1){const f=D[0],p=I[0];await this.changeColors(e,w.map(F=>F.regionElement),a,()=>a.getCommandContext().getAllLayouts(),new Map([[p,f.variant.color]]))}}}}}const Ee=new $A;class _A{async init(e,t,A){const n=e.option;if(!n)throw new ce(e);if(A)await this.reload(e,t,A);else{const a=L.getDefaultVariant(n);if(a)return await this.selectVariantLambda(e,a,t,()=>{},!0)}return null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(g=>g.elements).flat().filter(g=>g.stepName===e.stepName),s=e.option;if(!s)throw new ce(e);if(n!=null&&n.selectedVariants){const g=n.selectedVariants[0].id;if(g){const B=(r=s.variants)==null?void 0:r.find(d=>d.id===g);if(B){const d=B.material,w=o.map(h=>({id:h.id,region:h.stepRegion}));await t.setSelectionsAndElements(e.stepName,[B],w,async()=>{const h=t.getModelContainer();if(h){const u=e.data.targetMaterials.map(E=>h.applyMaterialVariant(E,s.id||"",d||{}));Promise.all(u).then(()=>t.setMandatoryFulfilled(e.stepName,!0))}})}}}}async selectVariant(e,t,A,n){const a=await this.selectVariantLambda(e,t,A,n);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantLambda(e,t,A,n,a){const i=A.getModelContainer();n(!0);const o=t.material;if(!o)throw n(!1),new W(t);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(e.stepName,[t],[],async()=>{try{i&&e.data.targetMaterials.forEach(s=>{e.option&&i.applyMaterialVariant(s,e.option.id||"",o)}),a||A.setMandatoryFulfilled(e.stepName,!0)}finally{n(!1)}})}}}}const be=new _A;class en{async init(e,t,A){const n=e.option;if(!n)throw new ce(e);if(A)await this.reload(e,t,A);else{const a=L.getDefaultVariant(n);if(a)return await this.selectVariantLambda(e,a,t,()=>{},!0)}return null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(g=>g.elements).flat().filter(g=>g.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const g=n.selectedVariants[0].id;if(s&&g){const B=(r=s.variants)==null?void 0:r.find(d=>d.id===g);if(B){const d=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[B],d,async()=>{var h;const w=t.getModelContainer();if(w&&e.option){const u=(h=B.asset)==null?void 0:h.fileLink;if(!u)throw new W(B);await w.applyModelVariant(e.stepName||"",{model:u,contextService:t.getLayoutPreviewService()},e.data.replaceProductModel||!1),t.setMandatoryFulfilled(e.stepName,!0)}})}}}}async selectVariant(e,t,A,n){const a=await this.selectVariantLambda(e,t,A,n);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantLambda(e,t,A,n,a){var o;n(!0);const i=(o=t.asset)==null?void 0:o.fileLink;if(!i)throw new W(t);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(e.stepName,[t],[],async()=>{try{const s=A.getModelContainer();s&&await s.applyModelVariant(e.stepName,{model:i,contextService:A.getLayoutPreviewService()},e.data.replaceProductModel||!1),a||A.setMandatoryFulfilled(e.stepName,!0)}finally{n(!1)}})}}}}const Je=new en;class tn{async init(e,t,A){if(A)await this.reload(e,t,A);else return t.updateMetadata(e.stepName,{text:""}),this.changeTextCommand(e,"",t,"",()=>{});return null}async reload(e,t,A){const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),s=Object.values(A.layouts).map(r=>r.elements).flat().filter(r=>r.stepName===e.stepName).map(r=>({id:r.id,region:r.stepRegion}));await t.setSelectionsAndElements(e.stepName,[],s,async()=>{var r,g;t.updateStorage(e.stepName,{text:(r=n==null?void 0:n.storage)==null?void 0:r.text}),t.setMandatoryFulfilled(e.stepName,((g=n==null?void 0:n.storage)==null?void 0:g.text)!=="")})}async changeText(e,t,A,n,a){const i=await this.changeTextCommand(e,t,A,n,a);i&&(i.command&&A.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async changeTextCommand(e,t,A,n,a){var g;const i=A.getRegionElements(e.stepName),o=(g=A.getStepSpecificServices(e.stepName))==null?void 0:g.module;if(!o)return console.error("Missing module."),null;const s=A.getProfanities();if(!this.validateInput(e,t,s,a))return A.setMandatoryFulfilled(e.stepName,!1),console.error(n),null;if(A.setMandatoryFulfilled(e.stepName,t!==""),!e.data||!e.data.regions||e.data.regions.length<=0)return console.error("Missing configuration."),null;A.updateStorage(e.stepName,{text:t});const r=(B,d,w)=>{const h=w||l.generate(),E=A.getLayouts().find(m=>m.panelId===d.panelId);if(!E)return console.error(`Can not find layout for region: ${d.panelId}`),null;const Q=[];return w&&Q.push(new l.DeleteElementCommand(h)),Q.push(new l.CreateElementCommand({stepRegion:d,stepName:e.stepName,colors:{},id:h,svg:B,type:l.LayoutElementType.Illustration,y:d.top,x:d.left,rotation:d.rotation,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,immutable:d.immutable},E)),{id:h,region:d,command:new l.GroupCommand(Q)}};if(i.length>0){const d=i.map(w=>{if(!w.region)return null;const h=o.svgPrint(t,w.region);return r(h,w.region,w.id)}).filter(w=>!!w).filter(w=>!!w).map(w=>w&&w.command);return{command:new l.GroupCommand(d),followup:async()=>{}}}else{const B=e.data.regions.map(w=>r(o.svgPrint(t,w),w)),d=B.filter(w=>!!w).map(w=>w&&w.command);return{command:new l.GroupCommand(d),followup:async()=>{const w=B.filter(h=>h).map(h=>h&&{id:h.id,region:h.region});await A.setSelectionsAndElements(e.stepName,[],w)}}}}validateInput(e,t,A,n){if(e.data&&e.data.maxLength){const i=e.data.maxLength;if(t.length>i)return n("Too many characters."),!1}if(!/^$|^[a-zA-Z0-9 ]+$/.test(t))return n("Unsupported characters."),!1;const a=He.split(t.toLowerCase());for(const i of a)for(const o in A){const s=A[o].toLowerCase().replace(/\s/g,"");if(i===s)return n("Blocked profanity."),!1}return n(""),!0}}const xt=new tn;class An{async init(e,t,A){const n=e.option;if(!n)return null;if(A)await this.reload(e,t,A);else if(n.defaultVariant)return t.markStepsAsInitialised([e.stepName]),this.selectVariantCommand(e,n.defaultVariant,t,()=>{},!0);return t.markStepsAsInitialised([e.stepName]),null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(g=>g.elements).flat().filter(g=>g.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const g=n.selectedVariants[0].id;if(s&&g){const B=(r=s.variants)==null?void 0:r.find(d=>d.id===g);if(B){const d=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[B],d,async()=>{t.setMandatoryFulfilled(e.stepName,!0)})}}}}async selectVariant(e,t,A,n){const a=await this.selectVariantCommand(e,t,A,n);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantCommand(e,t,A,n,a){const i=t.asset;if(!i)throw new W(t);const o=i==null?void 0:i.fileLink;if(!o)return console.error("No URL for picture!"),null;n(!0),e.mandatory&&A.setMandatoryFulfilled(e.stepName,!1);const r=A.getRegionElements(e.stepName).map(d=>new l.DeleteElementCommand(d.id)),g=d=>{const h=A.getLayouts().find(E=>E.panelId===d.panelId);if(!h)throw new J(d);const u=l.generate();return{regionElement:{id:u,region:d},command:new l.CreateElementCommand({stepName:e.stepName,stepRegion:d,id:u,src:o,type:l.LayoutElementType.Image,y:d.top,x:d.left,rotation:d.rotation,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,immutable:d.immutable,preserveAspectRatio:"none"},h)}},B=e.data.regions.map(g);return{command:new l.GroupCommand([...r,...B.map(d=>d.command)]),followup:async()=>{await A.setSelectionsAndElements(e.stepName,[t],B.map(d=>d.regionElement),async()=>{a||A.setMandatoryFulfilled(e.stepName,!0),n(!1)})}}}}const Te=new An;class nn{async init(e,t,A){const n=e.option;if(!n)return null;if(A)await this.reload(e,t,A);else{const a=n.variants;if(L.getDefaultVariant(n)){const o=a==null?void 0:a.find(s=>{var r;return s.id===((r=n.defaultVariant)==null?void 0:r.id)});return this.selectVariantLambda(e,(o==null?void 0:o.id)||"",t,!0)}}return null}async reload(e,t,A){var i;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),a=e.option;if(n!=null&&n.selectedVariants){const o=n.selectedVariants[0].id;if(a&&o){const s=(i=a.variants)==null?void 0:i.find(r=>r.id===o);s&&await t.setSelectionsAndElements(e.stepName,[s],[])}}}async selectVariant(e,t,A){await A.getInitializationPromise();const n=await this.selectVariantLambda(e,t,A);n&&(n.command&&A.getCommandDispatcher()(n.command),n.followup&&await n.followup())}async selectVariantLambda(e,t,A,n){const a=e.option;if(!a)return null;const i=a.variants;if(!i)return null;const o=i.length>1?i.find(s=>s.id===t):i[0];if(!o)throw new Error("Failed to find selected variant in step variants, this should never happen!");return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(e.stepName,[o],[],async()=>{n||A.setMandatoryFulfilled(e.stepName,!0)})}}}}const Oe=new nn;class an{constructor(){this.shapeFillId="spiff-fill-shape"}async availableColours(e){var A;const t=e.option;return t?((A=t.variants)==null?void 0:A.map(n=>({fill:n.color,stroke:n.color,variant:n})))||[]:[]}setCustomColor(e,t,A){const n=A.getLayouts(),i=(A.getRegionElements(t.stepName)||[]).map(o=>{const s=o.region;if(!n.find(g=>g.panelId===(s==null?void 0:s.panelId)))throw new J(s);return new l.IllustrationColorCommand(o.id,this.shapeFillId,e)}).filter(o=>!!o);A.getCommandDispatcher()(new l.GroupCommand(i)),A.updateStorage(t.stepName,{colour:e})}async init(e,t,A){const n=e.option;if(!n)throw new ce(e);if(A)await this.reload(e,t,A);else{const a=L.getDefaultVariant(n);return a?this.selectVariantCommand(e,{fill:a.color,stroke:a.color,variant:a},[],t):null}return null}async selectVariant(e,t,A,n){const a=await this.selectVariantCommand(e,t,A,n);a&&(a.command&&n.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(g=>g.elements).flat().filter(g=>g.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const g=n.selectedVariants[0].id;if(s&&g){const B=(r=s.variants)==null?void 0:r.find(d=>d.id===g);if(B){const d=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[B],d,async()=>{var w;t.updateStorage(e.stepName,{colour:((w=n==null?void 0:n.storage)==null?void 0:w.colour)||""}),t.setMandatoryFulfilled(e.stepName,!0)})}}}}async selectVariantCommand(e,t,A,n){var s;const a=n.getLayouts(),i=(s=n.getStepStorage(e.stepName))==null?void 0:s.colour,o=()=>{var r,g;if(((r=t.variant)==null?void 0:r.color)==="#custom")return i||"#FFFFFF";if((g=t.variant)!=null&&g.color)return t.variant.color;throw new Error("Failed to resolve color for shape step.")};if(A.length>0){const r=B=>{const d=B.region;if(!a.find(u=>u.panelId===(d==null?void 0:d.panelId)))throw new J(d);const h=o();return new l.IllustrationColorCommand(B.id,this.shapeFillId,h)},g=A.map(r).filter(B=>!!B);return{command:new l.GroupCommand(g),followup:async()=>{await n.setSelectionsAndElements(e.stepName,t.variant?[t.variant]:[],A),n.updateStorage(e.stepName,{colour:o()})}}}else{const r=w=>{const h=a.find(D=>D.panelId===w.panelId);if(!h)throw new J(w);const u=o(),E=`
|
|
652
|
+
`,we=[l.StepType.SilentIllustration,l.StepType.ProductOverlay],KA=async c=>{const e=[];c.introduction&&e.push({name:"Introduction",title:c.name,renderableSteps:[{type:l.StepType.Introduction,stepName:"Introduction",stepTitle:c.name,helpText:c.introduction,data:{},conditions:[]}],silentSteps:[]});for(const A of c.steps){const n=VA(A.stepName,c.stepGroups);if(!n)e.push({name:A.stepName,title:A.stepTitle,renderableSteps:we.includes(A.type)?[]:[A],silentSteps:we.includes(A.type)?[A]:[]});else{const a=e.find(i=>i.name===n.name);a?we.includes(A.type)?a.silentSteps.push(A):a.renderableSteps.push(A):e.push({name:n.name,title:n.name,renderableSteps:we.includes(A.type)?[]:[A],silentSteps:we.includes(A.type)?[A]:[]})}}const t="workflow.steps.finish.confirmDesign";return e.push({name:"Finish",title:t,renderableSteps:[{type:l.StepType.Finish,stepName:"Finish",stepTitle:t,helpText:"",data:{modelAnimation:c.finalizeStepConfig?c.finalizeStepConfig.modelAnimation:void 0,lookAtAnimation:c.finalizeStepConfig?c.finalizeStepConfig.lookAtAnimation:void 0},conditions:[]}],silentSteps:[]}),e},VA=(c,e)=>e.find(t=>t.stepNames.includes(c)),Ae=(c,e)=>(c.conditions||[]).every(t=>{const A=e[t.targetStepName];if(A&&A.selectedVariants){const n=A.selectedVariants;return t.requiredVariantSelections.some(a=>n.find(i=>i.id===a)!==void 0)}return!1}),WA=(c,e)=>{const t={name:c.name,title:c.title,renderableSteps:c.renderableSteps.filter(A=>Ae(A,e)),silentSteps:c.silentSteps.filter(A=>Ae(A,e))};return t.silentSteps.length===0&&t.renderableSteps.length===0?null:t},ne=(c,e)=>c.map(t=>WA(t,e)).filter(t=>t!==null),XA=async(c,e,t=!1)=>{var i;const A=ne(c,e),n=[];for(const o of A)for(const s of o.renderableSteps){const r=(((i=s.option)==null?void 0:i.variants)||[]).length;s.silent||(s.type===l.StepType.Model||s.type===l.StepType.Material||s.type===l.StepType.Picture||s.type===l.StepType.Shape?(r>1||t)&&n.push(s.stepName):n.push(s.stepName))}const a=A.filter(o=>o.renderableSteps.filter(r=>n.includes(r.stepName)).length>0);for(const o of a)o.renderableSteps=o.renderableSteps.filter(s=>n.includes(s.stepName));return a};class Ge{constructor(){this.timestamp=Date.now()}}class ke{constructor(e,t=!0){this.queue=[],this.activePromise=void 0,this.queueMaxSize=void 0,this.queueMaxSize=e,this.isEnabled=t}enqueue(e){if(this.queue.push(e),this.queueMaxSize!==void 0&&this.queue.length>this.queueMaxSize){const t=this.queue.length-1;for(let A=0;A<t;++A)this.queue.shift()}this.isEnabled&&(this.activePromise||(this.activePromise=this.dequeue()))}get enabled(){return this.isEnabled}set enabled(e){!this.isEnabled&&e&&!this.activePromise&&(this.activePromise=this.dequeue()),this.isEnabled=e}hasActivePromise(){return!!this.activePromise}getRemainingQueueSize(){return this.queue.length}async finalize(){return this.activePromise?this.activePromise:Promise.resolve()}async dequeue(){const e=this.queue.shift();if(!e){this.activePromise=void 0;return}try{await e.execute()}catch(t){console.log(t)}finally{await this.dequeue()}}}function Ft(c,e,t,A){const n=t.width*c.zoom,a=t.height*c.zoom;if(A){const o=c,s=Math.max(e.width/t.width,e.height/t.height);o.zoom=Math.max(s,c.zoom);const r=t.width*o.zoom,g=t.height*o.zoom;return o.x=Fe(c.x,e.width-r,0),o.y=Fe(c.y,e.height-g,0),o}const i=c;return i.x=Fe(i.x,-n,e.width),i.y=Fe(i.y,-a,e.height),i}function Fe(c,e,t){return Math.min(Math.max(c,e),t)}class Mt{constructor(e){this.minZoomScale=[.03],this.maxZoomScale=[20],this._debouncedUpdateFrameOffsets=ot(this.updateFrameOffsets,200),this.targetElements=[],this.onFrameDataChangeListeners=[],this.onZoomChangeListeners=[],this.forceImageCover=e,this.thresholdSettings={useThreshold:!1,invertThreshold:!1,threshold:128,thresholdSaturation:.5}}connectWorkflowManager(e,t){t&&e.addStepSpecificStorageCallback(async A=>{if(A){const n=A;if(n.currentFrameSources){let a=!1;for(let i=0;i<n.currentFrameSources.length;i++){const o=n.currentFrameSources[i],s=await l.getFrameData(o);st(s,this.frameData)||(this.frameData||(this.frameData=new Array(n.currentFrameSources.length)),this.frameData[i]=s,a=!0)}a&&(this.onFrameDataChangeListeners.forEach(i=>i(this.frameData)),this.frameData&&this.imageData&&(this.recalculateOffsets(this.imageData),this.updateOffsets(this.offsets),this.recalculateZoomLimits(this.imageData,this.frameData)))}}},t),this.workflowManager=e,this.stepName=t}setTargetElements(e){this.targetElements=e}getFrameData(){return this.frameData}setFrameData(e){if(!e){this.frameData=void 0;return}e.forEach((t,A)=>{const n=l.frameDataCache.get(t);n&&(this.frameData||(this.frameData=new Array(e.length)),this.frameData[A]=n)})}getImageData(){return this.imageData}getOffsets(){return this.offsets}setOffsets(e){this.offsets=e}setZoom(e,t,A,n){if(this.imageData&&this.offsets&&this.frameData){(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length));const a=this.frameData.map((i,o)=>{const s=(t[o]-this.offsets[o].x)/this.offsets[o].zoom,r=(A[o]-this.offsets[o].y)/this.offsets[o].zoom,g=t[o]-s*e[o],B=A[o]-r*e[o];return{x:g,y:B,zoom:this.imageData.width*e[o]/this.imageData.width}});this.updateOffsets(a,n),this.onZoomChangeListeners.forEach(i=>i(e))}}setPatternData(e,t=!0){this.imageData=e,e&&this.frameData&&((t||!this.offsets)&&this.recalculateOffsets(e),this.updateOffsets(this.offsets,void 0,!0)),this.imageData&&this.frameData&&this.recalculateZoomLimits(this.imageData,this.frameData)}updateOffsets(e,t,A){const n=this.imageData;if(!n||!this.frameData)return;if(this.frameData.length!==e.length)throw new k("Frame data and offsets are not the same length. This is a bug. Please report it.");if(!this.offsets.some((i,o)=>!(e[o].x===i.x&&e[o].y===i.y&&e[o].zoom===i.zoom))&&!A){t&&t();return}(!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((i,o)=>{this.offsets[o]=Ft(e[o],i,this.imageData,this.forceImageCover)}),console.log("updateOffsets"),this._debouncedUpdateFrameOffsets(this.offsets,n,this.frameData,this.thresholdSettings,this.targetElements,t)}getThresholdSettings(){return this.thresholdSettings}setThresholdSettings(e){this.thresholdSettings=e,this.imageData&&this.frameData&&this._debouncedUpdateFrameOffsets(this.offsets,this.imageData,this.frameData,e,this.targetElements)}onFrameDataChanged(e){e(this.frameData),this.onFrameDataChangeListeners.push(e)}onZoom(e){this.onZoomChangeListeners.push(e)}updateFrameOffsets(e,t,A,n,a,i){if(!A||A.length===0||A.some(s=>!s))throw new k("Frame data not set. This is a bug");if(!this.workflowManager)throw new k("No workflow manager set, cannot update offsets.");const o=this.workflowManager.getCommandDispatcher();a.forEach((s,r)=>{o(new l.GroupCommand([new l.UpdateFramePattern(s,t,e[r]),new l.UpdateFrameThresholdSettingsCommand(s,n.useThreshold,n.invertThreshold,n.threshold,n.thresholdSaturation)]))}),this.stepName&&this.workflowManager.updateStorage(this.stepName,{frameOffsetsList:e}),i&&i()}recalculateZoomLimits(e,t){(this.minZoomScale.length!==t.length||this.maxZoomScale.length!==t.length)&&(this.minZoomScale=new Array(t.length),this.maxZoomScale=new Array(t.length)),t.forEach((A,n)=>{const a=Math.max(A.width/e.width,A.height/e.height);this.forceImageCover?(this.minZoomScale[n]=a,this.maxZoomScale[n]=a*2.5):(this.minZoomScale[n]=a/10,this.maxZoomScale[n]=a*2.5)})}recalculateOffsets(e){this.frameData&&((!this.offsets||this.offsets.length!==this.frameData.length)&&(this.offsets=new Array(this.frameData.length)),this.frameData.forEach((t,A)=>{this.offsets[A]=l.calculateOffsets(e,t)}),console.log("recalculateOffsets"),this._debouncedUpdateFrameOffsets(this.offsets,e,this.frameData,this.thresholdSettings,this.targetElements))}}class yt{constructor(e,t,A){this.processRegion=async n=>{var s,r,g,B;const a=this.layouts.find(d=>d.panelId===n.panelId);if(!a)throw new J(n);let i="";if(this.configuration.type===l.StepType.ProductOverlay){let d="";if((s=this.product)!=null&&s.overlayImageUrl&&(d=this.product.overlayImageUrl),i=d,!d)throw new ge(this.configuration,"Couldn't find an asset for product overlay step")}const o=this.evaluateAssetType();if(o===l.LayoutElementType.Image){const d=this.configuration.type===l.StepType.SilentIllustration?(r=this.configuration.data.asset)==null?void 0:r.fileLink:(g=this.product)==null?void 0:g.overlayImageUrl;if(!d)throw new Error("Undefined raster silent step source");const w={stepName:this.configuration.stepName,id:l.generate(),src:d,type:o,y:n.top,x:n.left,width:n.width,height:n.height,layer:n.layer,layerIndex:n.layerIndex,immutable:n.immutable,productOverlay:this.configuration.type===l.StepType.ProductOverlay?!0:void 0,rotation:n.rotation,excludeFromExport:this.configuration.data.excludeFromPrint,preserveAspectRatio:"none"};return{regionElement:{id:w.id,region:n},command:new l.CreateElementCommand(w,a)}}else{const d=this.configuration.type===l.StepType.SilentIllustration?(B=this.configuration.data.asset)==null?void 0:B.fileLink:i,w=async()=>new Promise((E,Q)=>{if(!d){Q("Undefined vector silent step source");return}l.fetchAsString(d,!0).then(m=>{E(m)}).catch(m=>console.error(m))}),h=await l.generateSVGWithUnknownColors(await w()),u={stepName:this.configuration.stepName,id:l.generate(),cachedObjectURL:await l.svgObjectURL(h.svg),src:d,svg:h.svg,colors:h.colors,type:o,y:n.top,x:n.left,width:n.width,height:n.height,layer:n.layer,layerIndex:n.layerIndex,rotation:n.rotation,immutable:n.immutable,productOverlay:this.configuration.type===l.StepType.ProductOverlay?!0:void 0,excludeFromExport:this.configuration.data.excludeFromPrint};return{regionElement:{id:u.id,region:n},command:new l.CreateElementCommand(u,a)}}},this.configuration=e,this.layouts=t,this.product=A||void 0}async trigger(){if(!this.configuration.data.regions)throw new ge(this.configuration,"Missing regions.");if(this.configuration.type===l.StepType.SilentIllustration){const e=this.configuration.data.regions.map(this.processRegion);return Promise.all(e)}else return this.configuration.type===l.StepType.ProductOverlay?Promise.all(this.configuration.data.regions.map(e=>{if(!this.layouts.find(A=>e.panelId===A.panelId))throw new J(e);return this.processRegion(e)})):Promise.reject("Unknown silent step. This is a bug")}evaluateAssetType(){var t,A,n;const e=this.configuration.type===l.StepType.ProductOverlay&&((t=this.product)!=null&&t.overlayImageUrl)?this.product.overlayImageUrl.toLowerCase():(n=(A=this.configuration.data.asset)==null?void 0:A.fileLink)==null?void 0:n.toLowerCase().split("?")[0];return e!=null&&e.startsWith("data:image/png")||e!=null&&e.endsWith(".jpeg")||e!=null&&e.endsWith(".jpg")||e!=null&&e.endsWith(".png")?l.LayoutElementType.Image:(e!=null&&e.endsWith(".svg")||e!=null&&e.startsWith("image/svg+xml"),l.LayoutElementType.Illustration)}}const St=async c=>{const e=`${X.getServicesApiUrl()}/shortener`;try{return(await(await fetch(e,{method:"POST",body:JSON.stringify({longUrl:c}),headers:{"Content-Type":"application/json"}})).json()).shortUrl}catch(t){throw console.error(t),new Ie("Failed to shorten URL, see console.")}};class Yt{async poll(){try{if(await this.predicate()){this.onSuccess(),this.pollingId>-1&&window.clearInterval(this.pollingId);return}}catch{}this.attempts+=1,this.attempts<this.maxAttempts?this.pollingId=window.setTimeout(this.poll.bind(this),this.interval):this.onFailure()}constructor(e,t,A,n=3e3,a=10){this.onSuccess=t,this.onFailure=A,this.predicate=e,this.attempts=0,this.pollingId=-1,this.interval=n,this.maxAttempts=a,this.poll()}}class qA{async init(e,t,A){return A&&await this.reload(e,t,A),null}async reload(e,t,A){const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),s=Object.values(A.layouts).map(r=>r.elements).flat().filter(r=>r.stepName===e.stepName).map(r=>({id:r.id,region:r.stepRegion}));await t.setSelectionsAndElements(e.stepName,[],s,async()=>{var B,d;const r=(B=n==null?void 0:n.storage)==null?void 0:B.videoShortUrl,g=(d=n==null?void 0:n.storage)==null?void 0:d.videoUrl;t.updateStorage(e.stepName,{videoShortUrl:r,videoUrl:g})})}async regenerateQRCode(e,t,A,n,a,i,o,s,r){if(!t&&A!==""&&n===""){const g=async()=>{var I,f;const m=(await wt([A]))[0],D=(f=(I=m==null?void 0:m.versions)==null?void 0:I.find(p=>p.name==="mpeg4"))==null?void 0:f.link;return{asset:m,link:D}},B=await new Promise((m,D)=>{new Yt(async()=>!!(await g()).link,async()=>{const I=await g();if(!I.link||!I.link)throw new Z(I.asset);m({rel:"mpeg4",href:I.link})},()=>{D("Poller timed out with 40 attempts @ 3 second interval")},3e3,40)});e.forEach(m=>s(new l.DeleteElementCommand(m.id)));const d=i.data.baseUrl.slice(0,4)==="http"?"":"https://",w=new URL(d+i.data.baseUrl);w.searchParams.append("video",btoa(JSON.stringify([B]))),w.pathname=w.pathname+(w.pathname.slice(-1)==="/"?"":"/");const h=w.toString();if(h.length>=2e3)throw new Ie("Cannot create QR code, URL too long.");const u=await St(h);if(o(u),!i.data||!i.data.regions)throw new ge(i,"Missing regions.");const E=await this.regionElements(i),Q=await this.command(u,E,a,i.stepName);Q&&(Q.command&&a.getCommandDispatcher()(Q.command),Q.followup&&await Q.followup()),await a.setSelectionsAndElements(i.stepName,[],E,async()=>{a.updateStorage(i.stepName,{videoShortUrl:u,videoUrl:n}),r(!1)})}else r(!1)}async regionElements(e){const t=A=>({id:l.generate(),region:A});return e.data.regions.map(t)}async command(e,t,A,n){const a=A.getLayouts(),o=`data:image/svg+xml;base64,${btoa(await rt.toString(e,{type:"svg"}))}`,s=t.map(r=>{const g=r.region,B=a.find(d=>d.panelId===(g==null?void 0:g.panelId));if(!B&&g)throw new J(g);if(B&&!g)throw new Error("Region not found");if(!B||!g)throw new Error("Neither a region or layout found!");return new l.CreateElementCommand({stepRegion:g,stepName:n,id:r.id,src:o,type:l.LayoutElementType.Image,y:g.top,x:g.left,width:g.width,height:g.height,rotation:0},B)});return{command:new l.GroupCommand(s),followup:async()=>{}}}}const Pt=new qA;class ZA{constructor(){this.frameSourceSvg=async(e,t)=>{if(!e)return l.generateDefaultRectangleFrameSvg(t);const A=e.asset;if(!A)throw new W(e);const n=A.fileLink;if(n)return l.fetchAsString(n,!0);throw new Z(A)}}async init(e,t,A){if(A)return await this.reload(e,t,A),null;if(e.mandatory&&t.setMandatoryFulfilled(e.stepName,!1),t.markStepsAsInitialised([e.stepName]),e.option&&e.option.variants&&e.option.variants.length>0){const n=e.option,a=L.getDefaultVariant(n);return a?this.selectVariantCommand(e,a,[],t,void 0,e.data.placeholderImageUrl):null}return this.selectVariantCommand(e,void 0,[],t,void 0,e.data.placeholderImageUrl)}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),s=Object.values(A.layouts).map(g=>g.elements).flat().filter(g=>g.stepName===e.stepName).map(g=>({id:g.id,region:g.stepRegion}));if(!e.option||(e.option.variants||[]).length===0){const g=e.data.regions.map(B=>l.generateDefaultRectangleFrameSvg(B));t.updateStorage(e.stepName,{currentFrameSources:g})}if(n){const g=async()=>{var w,h,u,E;const B=(w=n.storage)==null?void 0:w.framePatternSrc,d=(h=n.storage)==null?void 0:h.frameOffsetsList;if(t.updateMetadata(e.stepName,{frameOffsetsList:d,framePatternSrc:B}),B){const Q=(u=t.getStepSpecificServices(e.stepName))==null?void 0:u.frameService;if(!Q)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(B,Q,!0),t.updateMetadata(e.stepName,{image:B}),t.updateStorage(e.stepName,{framePatternSrc:B})}if(d!=null&&d.some(Q=>Q.zoom)){const Q=(E=t.getStepSpecificServices(e.stepName))==null?void 0:E.frameService;if(!Q)throw new Error("Frame service unavailable, cannot load pattern!");Q.updateOffsets(d)}t.setMandatoryFulfilled(e.stepName,!0)};if(n.selectedVariants&&n.selectedVariants.length>0){const B=n.selectedVariants[0].id;if(e.option&&B){const d=(r=e.option.variants)==null?void 0:r.find(w=>w.id===B);d&&await t.setSelectionsAndElements(e.stepName,[d],s,async()=>{const w=await Promise.all(e.data.regions.map(h=>this.frameSourceSvg(d,h)));t.updateStorage(e.stepName,{currentFrameSources:w}),await g()})}}else await t.setSelectionsAndElements(e.stepName,[],s,g)}}selectImage(e,t,A,n=!0){var s;const a=this.patternSource(t),i=(s=A.getStepStorage(e.stepName))==null?void 0:s.framePatternSrc;return console.log("selectImage: ",{asset:t,assetSrc:a,existingSrc:i,equals:i===a}),i&&i===a?Promise.resolve():(console.log("applying image"),A.setEditedStatus(e.stepName,!0),(t.fileLink||"").endsWith("pdf")?new Promise(r=>{A.addPoller(new Yt(async()=>{var w;const B=(w=(await G.getLocalOrFromServer(t.key||"")).versions)==null?void 0:w.find(h=>h.name==="svg");return B?(await fetch(B.link)).status===200:!1},()=>{G.getLocalOrFromServer(t.key||"").then(g=>{this.loadPatternFromAsset(g,e,A,n).then(r)})},()=>{throw new Ie("Failed to resolve transcoded PDF")}))}):this.loadPatternFromAsset(t,e,A,n))}async selectVariant(e,t,A,n,a){const i=await this.selectVariantCommand(e,t,A,n,a);i&&(i.command&&n.getCommandDispatcher()(i.command),i.followup&&await i.followup())}getCreateElementCommand(e,t,A,n){return new l.CreateElementCommand({id:e,type:l.LayoutElementType.Frame,x:t.left,y:t.top,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,rotation:t.rotation,scaleX:t.width/n.frameData.width,scaleY:t.height/n.frameData.height,path:n.frameData.path,dataWidth:n.frameData.width,dataHeight:n.frameData.height,stepRegion:t,stepName:n.stepName,disablePlaceholder:n.disablePlaceholder,focalBlur:n.focalBlur,focalBlurStrength:n.focalBlurStrength,focalBlurRadius:n.focalBlurRadius,pattern:n.pattern,immutable:t.immutable},A)}async loadPatternFromString(e,t,A){if(e.endsWith("svg")){const n=await l.GetSVGDimensions(e),a=n.width,i=n.height,o={src:e,width:a,height:i,aspect:a/i};l.patternImageDataCache.set(e,o),t.setPatternData(o,A)}else{const n=await l.fetchAsArrayBuffer(e,!0),a=await l.getAttributesFromArrayBuffer(n),i={src:e,width:a.width,height:a.height,aspect:a.width/a.height};l.patternImageDataCache.set(e,i),t.setPatternData(i,A)}}async selectVariantCommand(e,t,A,n,a,i){var d;const o=(d=n.getStepSpecificServices(e.stepName))==null?void 0:d.frameService;if(!o)throw new Error("Frame service unavailable, cannot load pattern!");const s=await Promise.all(e.data.regions.map(w=>this.frameSourceSvg(t,w)));a&&a(!0);const r=await Promise.all(e.data.regions.map(async(w,h)=>{const u=await l.getFrameData(s[h]),E=o.getImageData(),Q=A.map(F=>new l.DeleteElementCommand(F.id)),m=E?l.calculateOffsets(E,u):void 0,D=E?{id:l.generate(),src:E.src,x:(m==null?void 0:m.x)||0,y:(m==null?void 0:m.y)||0,width:E.width,height:E.height,scaleX:(m==null?void 0:m.zoom)||1,scaleY:(m==null?void 0:m.zoom)||1,rotation:0}:void 0,I=l.generate(),p=n.getLayouts().find(F=>F.panelId===w.panelId);if(!p)throw new J(w);return{command:this.getCreateElementCommand(I,w,p,{frameData:u,pattern:D,disablePlaceholder:e.data.disablePlaceholder,focalBlur:e.data.focalBlur,focalBlurStrength:e.data.focalBlurStrength,focalBlurRadius:e.data.focalBlurRadius,stepName:e.stepName}),regionEl:{id:I,region:w},removeExistingCommands:Q}})),g=r.map(w=>w.command),B=r.map(w=>w.removeExistingCommands).flat();return{command:new l.GroupCommand([...g,...B]),followup:async()=>{a&&a(!1),await n.setSelectionsAndElements(e.stepName,t?[t]:[],[...r.map(w=>w.regionEl)],async()=>{var w;if(n.updateStorage(e.stepName,{currentFrameSources:s}),i){const h=(w=n.getStepSpecificServices(e.stepName))==null?void 0:w.frameService;if(!h)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(i,h,!0)}})}}}patternSource(e){var n;const t=(n=e.versions)==null?void 0:n.find(a=>a.name==="svg");if(t)return t.link;const A=e.fileLink;if(A)return A;throw new Z(e)}async loadPatternFromAsset(e,t,A,n){var s;const a=this.patternSource(e),i=A.markUpdatePending(),o=(s=A.getStepSpecificServices(t.stepName))==null?void 0:s.frameService;if(!o)throw new Error("Frame service unavailable, cannot load pattern!");await this.loadPatternFromString(a,o,n),A.updateMetadata(t.stepName,{image:a}),A.updateStorage(t.stepName,{framePatternSrc:a}),A.markUpdateCompleted(i)}}const he=new ZA;class $A{async getIllustrationBody(e){return new Promise(t=>{l.fetchAsString(e,!0).then(A=>{t(A)}).catch(A=>console.error(A))})}getCreateElementCommand(e,t,A,n){return new l.CreateElementCommand({stepRegion:t,stepName:n.stepName,colors:n.svg.colors,id:e,src:n.src,svg:n.svg.svg,cachedObjectURL:n.objectURL,type:l.LayoutElementType.Illustration,y:t.top,x:t.left,rotation:t.rotation,width:t.width,height:t.height,layer:t.layer,layerIndex:t.layerIndex,immutable:t.immutable},A)}getColors(e,t){const A=t.getRegionElements(e.stepName)||[];if(A.length===0)return[];try{return l.findElement(A[0].id,t.getAllLayoutData()).colors}catch{return[]}}async init(e,t,A){const n=e.option;if(!n)return null;if(A)return this.reload(e,t,A);{const a=L.getDefaultVariant(n);if(a)return await this.selectVariantCommand(e,a,[],()=>{},t,!0)}return null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(g=>g.elements).flat().filter(g=>g.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const g=n.selectedVariants[0].id;if(s&&g){const B=(r=s.variants)==null?void 0:r.find(d=>d.id===g);if(B){const d=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[B],d,async()=>{var w;t.updateMetadata(e.stepName,{colors:(w=n.storage)==null?void 0:w.colors}),t.setMandatoryFulfilled(e.stepName,!0)})}}else throw new Error("Required illustration variant no longer available")}return null}async availableColors(e,t){var n;const A=e.data.colorOption;return A?A?(n=A.variants)==null?void 0:n.map(a=>({fill:a.color,stroke:a.color,variant:a})):[]:[]}async changeColorsCommand(e,t,A,n,a){var g;const i={};for(const[B,d]of a.entries())i[B]={browserValue:d,spotColor:(g=i[B])==null?void 0:g.spotColor};const o=l.modifySVGWithElementProperties(e,t,A,i),s=await l.svgObjectURL(o),r=[];for(const B of n){for(const[d,w]of a.entries())r.push(new l.IllustrationColorCommand(B,d,w));r.push(new l.IllustrationCacheCommand(B,o,s))}return new l.GroupCommand(r)}async changeColors(e,t,A,n,a){var w,h;if(t.length===0)return;const i=l.findElement(t[0].id,n().map(u=>u.layoutState)),o={...i.colors},s={};Object.entries(o).forEach(([u,E])=>{const Q={browserValue:E.browserValue},m=E.spotColor;m&&(Q.spotColor={profileName:m.profileName,namedColor:m.namedColor}),s[u]=Q});for(const[u,E]of a.entries())o[u]={browserValue:E,spotColor:(w=o[u])==null?void 0:w.spotColor},s[u]={browserValue:E};let r=Array.from(Object.values(o)).map(u=>u.browserValue);const g=e.data.colorOption;g&&((h=g.variants)==null||h.forEach(u=>{r=r.map(E=>{var Q;return E.toLowerCase()===((Q=u.color)==null?void 0:Q.toLowerCase())?u.name:E})})),A.updateMetadata(e.stepName,{colors:r});const B=new Map;if(Object.entries(o).forEach(([u,E])=>{B.set(u,E.browserValue)}),!i.svg)throw new Error("Colors changed before SVG loaded. This should never happen!");const d=await this.changeColorsCommand(i.svg,i.width,i.height,t.map(u=>u.id),B);A.updateStorage(e.stepName,{colors:s}),A.getCommandDispatcher()(d)}async selectVariant(e,t,A,n,a){const i=await this.selectVariantCommand(e,t,A,n,a);i&&(i.command&&a.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async selectVariantCommand(e,t,A,n,a,i){var m;if(!e.data||!e.data.regions)throw new ge(e,"Missing regions.");n(!0);const o=A.map(D=>new l.DeleteElementCommand(D.id));e.mandatory&&a.setMandatoryFulfilled(e.stepName,!1);const s=t.asset;if(!s)throw new W(t);const r=s.fileLink;if(!r)throw new Z(s);const g=await l.generateSVGWithUnknownColors(await this.getIllustrationBody(r)),B=await l.svgObjectURL(g.svg),d=D=>{const I=a.getLayouts().find(p=>p.panelId===D.panelId);if(!I)throw new J(D);const f=l.generate();return{regionElement:{id:f,region:D},command:this.getCreateElementCommand(f,D,I,{stepName:e.stepName,src:r,objectURL:B,svg:g})}},w=e.data.regions.map(d),u=[...w.map(D=>D.command),...o];let E=Array.from(Object.values(g.colors)).map(D=>D.browserValue);const Q=e.data.colorOption;return Q&&((m=Q.variants)==null||m.forEach(D=>{E=E.map(I=>{var f;return I.toLowerCase()===((f=D.color)==null?void 0:f.toLowerCase())?D.name:I})})),a.updateMetadata(e.stepName,{colors:E}),{command:new l.GroupCommand(u),followup:async()=>{await a.setSelectionsAndElements(e.stepName,[t],w.map(f=>f.regionElement),async()=>{i||a.setMandatoryFulfilled(e.stepName,!0),n(!1)});const D=await this.availableColors(e,a)||[],I=Object.keys(g.colors);if(e.data.colorPickerEnabled&&D.length===1&&I.length===1){const f=D[0],p=I[0];await this.changeColors(e,w.map(F=>F.regionElement),a,()=>a.getCommandContext().getAllLayouts(),new Map([[p,f.variant.color]]))}}}}}const Ee=new $A;class _A{async init(e,t,A){const n=e.option;if(!n)throw new ce(e);if(A)await this.reload(e,t,A);else{const a=L.getDefaultVariant(n);if(a)return await this.selectVariantLambda(e,a,t,()=>{},!0)}return null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(g=>g.elements).flat().filter(g=>g.stepName===e.stepName),s=e.option;if(!s)throw new ce(e);if(n!=null&&n.selectedVariants){const g=n.selectedVariants[0].id;if(g){const B=(r=s.variants)==null?void 0:r.find(d=>d.id===g);if(B){const d=B.material,w=o.map(h=>({id:h.id,region:h.stepRegion}));await t.setSelectionsAndElements(e.stepName,[B],w,async()=>{const h=t.getModelContainer();if(h){const u=e.data.targetMaterials.map(E=>h.applyMaterialVariant(E,s.id||"",d||{}));Promise.all(u).then(()=>t.setMandatoryFulfilled(e.stepName,!0))}})}}}}async selectVariant(e,t,A,n){const a=await this.selectVariantLambda(e,t,A,n);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantLambda(e,t,A,n,a){const i=A.getModelContainer();n(!0);const o=t.material;if(!o)throw n(!1),new W(t);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(e.stepName,[t],[],async()=>{try{i&&e.data.targetMaterials.forEach(s=>{e.option&&i.applyMaterialVariant(s,e.option.id||"",o)}),a||A.setMandatoryFulfilled(e.stepName,!0)}finally{n(!1)}})}}}}const be=new _A;class en{async init(e,t,A){const n=e.option;if(!n)throw new ce(e);if(A)await this.reload(e,t,A);else{const a=L.getDefaultVariant(n);if(a)return await this.selectVariantLambda(e,a,t,()=>{},!0)}return null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(g=>g.elements).flat().filter(g=>g.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const g=n.selectedVariants[0].id;if(s&&g){const B=(r=s.variants)==null?void 0:r.find(d=>d.id===g);if(B){const d=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[B],d,async()=>{var h;const w=t.getModelContainer();if(w&&e.option){const u=(h=B.asset)==null?void 0:h.fileLink;if(!u)throw new W(B);await w.applyModelVariant(e.stepName||"",{model:u,contextService:t.getLayoutPreviewService()},e.data.replaceProductModel||!1),t.setMandatoryFulfilled(e.stepName,!0)}})}}}}async selectVariant(e,t,A,n){const a=await this.selectVariantLambda(e,t,A,n);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantLambda(e,t,A,n,a){var o;n(!0);const i=(o=t.asset)==null?void 0:o.fileLink;if(!i)throw new W(t);return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(e.stepName,[t],[],async()=>{try{const s=A.getModelContainer();s&&await s.applyModelVariant(e.stepName,{model:i,contextService:A.getLayoutPreviewService()},e.data.replaceProductModel||!1),a||A.setMandatoryFulfilled(e.stepName,!0)}finally{n(!1)}})}}}}const Je=new en;class tn{async init(e,t,A){if(A)await this.reload(e,t,A);else return t.updateMetadata(e.stepName,{text:""}),this.changeTextCommand(e,"",t,"",()=>{});return null}async reload(e,t,A){const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),s=Object.values(A.layouts).map(r=>r.elements).flat().filter(r=>r.stepName===e.stepName).map(r=>({id:r.id,region:r.stepRegion}));await t.setSelectionsAndElements(e.stepName,[],s,async()=>{var r,g;t.updateStorage(e.stepName,{text:(r=n==null?void 0:n.storage)==null?void 0:r.text}),t.setMandatoryFulfilled(e.stepName,((g=n==null?void 0:n.storage)==null?void 0:g.text)!=="")})}async changeText(e,t,A,n,a){const i=await this.changeTextCommand(e,t,A,n,a);i&&(i.command&&A.getCommandDispatcher()(i.command),i.followup&&await i.followup())}async changeTextCommand(e,t,A,n,a){var g;const i=A.getRegionElements(e.stepName),o=(g=A.getStepSpecificServices(e.stepName))==null?void 0:g.module;if(!o)return console.error("Missing module."),null;const s=A.getProfanities();if(!this.validateInput(e,t,s,a))return A.setMandatoryFulfilled(e.stepName,!1),console.error(n),null;if(A.setMandatoryFulfilled(e.stepName,t!==""),!e.data||!e.data.regions||e.data.regions.length<=0)return console.error("Missing configuration."),null;A.updateStorage(e.stepName,{text:t});const r=(B,d,w)=>{const h=w||l.generate(),E=A.getLayouts().find(m=>m.panelId===d.panelId);if(!E)return console.error(`Can not find layout for region: ${d.panelId}`),null;const Q=[];return w&&Q.push(new l.DeleteElementCommand(h)),Q.push(new l.CreateElementCommand({stepRegion:d,stepName:e.stepName,colors:{},id:h,svg:B,type:l.LayoutElementType.Illustration,y:d.top,x:d.left,rotation:d.rotation,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,immutable:d.immutable},E)),{id:h,region:d,command:new l.GroupCommand(Q)}};if(i.length>0){const d=i.map(w=>{if(!w.region)return null;const h=o.svgPrint(t,w.region);return r(h,w.region,w.id)}).filter(w=>!!w).filter(w=>!!w).map(w=>w&&w.command);return{command:new l.GroupCommand(d),followup:async()=>{}}}else{const B=e.data.regions.map(w=>r(o.svgPrint(t,w),w)),d=B.filter(w=>!!w).map(w=>w&&w.command);return{command:new l.GroupCommand(d),followup:async()=>{const w=B.filter(h=>h).map(h=>h&&{id:h.id,region:h.region});await A.setSelectionsAndElements(e.stepName,[],w)}}}}validateInput(e,t,A,n){if(e.data&&e.data.maxLength){const i=e.data.maxLength;if(t.length>i)return n("Too many characters."),!1}if(!/^$|^[a-zA-Z0-9 ]+$/.test(t))return n("Unsupported characters."),!1;const a=He.split(t.toLowerCase());for(const i of a)for(const o in A){const s=A[o].toLowerCase().replace(/\s/g,"");if(i===s)return n("Blocked profanity."),!1}return n(""),!0}}const xt=new tn;class An{async init(e,t,A){const n=e.option;if(!n)return null;if(A)await this.reload(e,t,A);else if(n.defaultVariant)return t.markStepsAsInitialised([e.stepName]),this.selectVariantCommand(e,n.defaultVariant,t,()=>{},!0);return t.markStepsAsInitialised([e.stepName]),null}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(g=>g.elements).flat().filter(g=>g.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const g=n.selectedVariants[0].id;if(s&&g){const B=(r=s.variants)==null?void 0:r.find(d=>d.id===g);if(B){const d=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[B],d,async()=>{t.setMandatoryFulfilled(e.stepName,!0)})}}}}async selectVariant(e,t,A,n){const a=await this.selectVariantCommand(e,t,A,n);a&&(a.command&&A.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async selectVariantCommand(e,t,A,n,a){const i=t.asset;if(!i)throw new W(t);const o=i==null?void 0:i.fileLink;if(!o)return console.error("No URL for picture!"),null;n(!0),e.mandatory&&A.setMandatoryFulfilled(e.stepName,!1);const r=A.getRegionElements(e.stepName).map(d=>new l.DeleteElementCommand(d.id)),g=d=>{const h=A.getLayouts().find(E=>E.panelId===d.panelId);if(!h)throw new J(d);const u=l.generate();return{regionElement:{id:u,region:d},command:new l.CreateElementCommand({stepName:e.stepName,stepRegion:d,id:u,src:o,type:l.LayoutElementType.Image,y:d.top,x:d.left,rotation:d.rotation,width:d.width,height:d.height,layer:d.layer,layerIndex:d.layerIndex,immutable:d.immutable,preserveAspectRatio:"none"},h)}},B=e.data.regions.map(g);return{command:new l.GroupCommand([...r,...B.map(d=>d.command)]),followup:async()=>{await A.setSelectionsAndElements(e.stepName,[t],B.map(d=>d.regionElement),async()=>{a||A.setMandatoryFulfilled(e.stepName,!0),n(!1)})}}}}const Te=new An;class nn{async init(e,t,A){const n=e.option;if(!n)return null;if(A)await this.reload(e,t,A);else{const a=n.variants;if(L.getDefaultVariant(n)){const o=a==null?void 0:a.find(s=>{var r;return s.id===((r=n.defaultVariant)==null?void 0:r.id)});return this.selectVariantLambda(e,(o==null?void 0:o.id)||"",t,!0)}}return null}async reload(e,t,A){var i;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),a=e.option;if(n!=null&&n.selectedVariants){const o=n.selectedVariants[0].id;if(a&&o){const s=(i=a.variants)==null?void 0:i.find(r=>r.id===o);s&&await t.setSelectionsAndElements(e.stepName,[s],[])}}}async selectVariant(e,t,A){await A.getInitializationPromise();const n=await this.selectVariantLambda(e,t,A);n&&(n.command&&A.getCommandDispatcher()(n.command),n.followup&&await n.followup())}async selectVariantLambda(e,t,A,n){const a=e.option;if(!a)return null;const i=a.variants;if(!i)return null;const o=i.length>1?i.find(s=>s.id===t):i[0];if(!o)throw new Error("Failed to find selected variant in step variants, this should never happen!");return{command:void 0,followup:async()=>{await A.setSelectionsAndElements(e.stepName,[o],[],async()=>{n||A.setMandatoryFulfilled(e.stepName,!0)})}}}}const Oe=new nn;class an{constructor(){this.shapeFillId="spiff-fill-shape"}async availableColours(e){var A;const t=e.option;return t?((A=t.variants)==null?void 0:A.map(n=>({fill:n.color,stroke:n.color,variant:n})))||[]:[]}setCustomColor(e,t,A){const n=A.getLayouts(),i=(A.getRegionElements(t.stepName)||[]).map(o=>{const s=o.region;if(!n.find(g=>g.panelId===(s==null?void 0:s.panelId)))throw new J(s);return new l.IllustrationColorCommand(o.id,this.shapeFillId,e)}).filter(o=>!!o);A.getCommandDispatcher()(new l.GroupCommand(i)),A.updateStorage(t.stepName,{colour:e})}async init(e,t,A){const n=e.option;if(!n)throw new ce(e);if(A)await this.reload(e,t,A);else{const a=L.getDefaultVariant(n);return a?this.selectVariantCommand(e,{fill:a.color,stroke:a.color,variant:a},[],t):null}return null}async selectVariant(e,t,A,n){const a=await this.selectVariantCommand(e,t,A,n);a&&(a.command&&n.getCommandDispatcher()(a.command),a.followup&&await a.followup())}async reload(e,t,A){var r;const n=t.getSerializedStep(e.stepName,A.serializableWorkflow.steps),o=Object.values(A.layouts).map(g=>g.elements).flat().filter(g=>g.stepName===e.stepName),s=e.option;if(n!=null&&n.selectedVariants){const g=n.selectedVariants[0].id;if(s&&g){const B=(r=s.variants)==null?void 0:r.find(d=>d.id===g);if(B){const d=o.map(w=>({id:w.id,region:w.stepRegion}));await t.setSelectionsAndElements(e.stepName,[B],d,async()=>{var w;t.updateStorage(e.stepName,{colour:((w=n==null?void 0:n.storage)==null?void 0:w.colour)||""}),t.setMandatoryFulfilled(e.stepName,!0)})}}}}async selectVariantCommand(e,t,A,n){var s;const a=n.getLayouts(),i=(s=n.getStepStorage(e.stepName))==null?void 0:s.colour,o=()=>{var r,g;if(((r=t.variant)==null?void 0:r.color)==="#custom")return i||"#FFFFFF";if((g=t.variant)!=null&&g.color)return t.variant.color;throw new Error("Failed to resolve color for shape step.")};if(A.length>0){const r=B=>{const d=B.region;if(!a.find(u=>u.panelId===(d==null?void 0:d.panelId)))throw new J(d);const h=o();return new l.IllustrationColorCommand(B.id,this.shapeFillId,h)},g=A.map(r).filter(B=>!!B);return{command:new l.GroupCommand(g),followup:async()=>{await n.setSelectionsAndElements(e.stepName,t.variant?[t.variant]:[],A),n.updateStorage(e.stepName,{colour:o()})}}}else{const r=w=>{const h=a.find(D=>D.panelId===w.panelId);if(!h)throw new J(w);const u=o(),E=`
|
|
653
653
|
<svg
|
|
654
654
|
xmlns="http://www.w3.org/2000/svg"
|
|
655
655
|
xmlnsXlink="http://www.w3.org/1999/xlink"
|
package/package.json
CHANGED