@merchi/product-form 1.19.12
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/README.md +272 -0
- package/lib/actions/jobs.d.ts +3 -0
- package/lib/actions/jobs.js +80 -0
- package/lib/actions/leads.d.ts +7 -0
- package/lib/actions/leads.js +67 -0
- package/lib/components/AlertVariationSellerEditable.d.ts +6 -0
- package/lib/components/AlertVariationSellerEditable.js +46 -0
- package/lib/components/Collapse.d.ts +3 -0
- package/lib/components/Collapse.js +34 -0
- package/lib/components/DateCountdown.d.ts +44 -0
- package/lib/components/DateCountdown.js +188 -0
- package/lib/components/DropzoneInput.d.ts +10 -0
- package/lib/components/DropzoneInput.js +169 -0
- package/lib/components/DynamicVariationInput.d.ts +9 -0
- package/lib/components/DynamicVariationInput.js +71 -0
- package/lib/components/FormLead.d.ts +10 -0
- package/lib/components/FormLead.js +215 -0
- package/lib/components/GroupInventory.d.ts +6 -0
- package/lib/components/GroupInventory.js +16 -0
- package/lib/components/InputGroupQuantity.d.ts +8 -0
- package/lib/components/InputGroupQuantity.js +117 -0
- package/lib/components/InputHiddenStatic.d.ts +8 -0
- package/lib/components/InputHiddenStatic.js +24 -0
- package/lib/components/InputProductQuantity.d.ts +7 -0
- package/lib/components/InputProductQuantity.js +102 -0
- package/lib/components/InventoryStatus.d.ts +7 -0
- package/lib/components/InventoryStatus.js +67 -0
- package/lib/components/MerchiProductForm.d.ts +62 -0
- package/lib/components/MerchiProductForm.js +51 -0
- package/lib/components/PriceMatrix.d.ts +27 -0
- package/lib/components/PriceMatrix.js +106 -0
- package/lib/components/ProductButtonsSubmit.d.ts +3 -0
- package/lib/components/ProductButtonsSubmit.js +52 -0
- package/lib/components/ProductFeatureDeadline.d.ts +3 -0
- package/lib/components/ProductFeatureDeadline.js +25 -0
- package/lib/components/ProductGroupBuyStatus.d.ts +3 -0
- package/lib/components/ProductGroupBuyStatus.js +47 -0
- package/lib/components/ProductPriceMatrix.d.ts +3 -0
- package/lib/components/ProductPriceMatrix.js +51 -0
- package/lib/components/ProductTitle.d.ts +3 -0
- package/lib/components/ProductTitle.js +36 -0
- package/lib/components/ProductTotalCost.d.ts +3 -0
- package/lib/components/ProductTotalCost.js +74 -0
- package/lib/components/ProductUnitPrice.d.ts +7 -0
- package/lib/components/ProductUnitPrice.js +51 -0
- package/lib/components/TooltipElement.d.ts +9 -0
- package/lib/components/TooltipElement.js +35 -0
- package/lib/components/VariationAreaInput.d.ts +8 -0
- package/lib/components/VariationAreaInput.js +219 -0
- package/lib/components/VariationCheckBoxOrRadioOption.d.ts +10 -0
- package/lib/components/VariationCheckBoxOrRadioOption.js +82 -0
- package/lib/components/VariationCheckboxRadio.d.ts +17 -0
- package/lib/components/VariationCheckboxRadio.js +57 -0
- package/lib/components/VariationColourExtractInput.d.ts +8 -0
- package/lib/components/VariationColourExtractInput.js +395 -0
- package/lib/components/VariationError.d.ts +7 -0
- package/lib/components/VariationError.js +52 -0
- package/lib/components/VariationFieldInputInstructions.d.ts +10 -0
- package/lib/components/VariationFieldInputInstructions.js +50 -0
- package/lib/components/VariationFieldInstructions.d.ts +3 -0
- package/lib/components/VariationFieldInstructions.js +22 -0
- package/lib/components/VariationFieldNameAndCostInputs.d.ts +7 -0
- package/lib/components/VariationFieldNameAndCostInputs.js +34 -0
- package/lib/components/VariationFieldOptionDefaultInputs.d.ts +7 -0
- package/lib/components/VariationFieldOptionDefaultInputs.js +48 -0
- package/lib/components/VariationFieldStaticValues.d.ts +8 -0
- package/lib/components/VariationFieldStaticValues.js +57 -0
- package/lib/components/VariationFileInput.d.ts +8 -0
- package/lib/components/VariationFileInput.js +229 -0
- package/lib/components/VariationInput.d.ts +11 -0
- package/lib/components/VariationInput.js +97 -0
- package/lib/components/VariationLabel.d.ts +11 -0
- package/lib/components/VariationLabel.js +85 -0
- package/lib/components/VariationOptionColour.d.ts +8 -0
- package/lib/components/VariationOptionColour.js +50 -0
- package/lib/components/VariationOptionImage.d.ts +8 -0
- package/lib/components/VariationOptionImage.js +52 -0
- package/lib/components/VariationSelect.d.ts +8 -0
- package/lib/components/VariationSelect.js +66 -0
- package/lib/components/VariationSelectElements.d.ts +16 -0
- package/lib/components/VariationSelectElements.js +141 -0
- package/lib/components/VariationTurnaroundTime.d.ts +9 -0
- package/lib/components/VariationTurnaroundTime.js +156 -0
- package/lib/components/Variations.d.ts +9 -0
- package/lib/components/Variations.js +109 -0
- package/lib/components/VariationsGroups.d.ts +8 -0
- package/lib/components/VariationsGroups.js +79 -0
- package/lib/components/buttons/ButtonAddGroup.d.ts +7 -0
- package/lib/components/buttons/ButtonAddGroup.js +38 -0
- package/lib/components/buttons/ButtonProductSubmit.d.ts +7 -0
- package/lib/components/buttons/ButtonProductSubmit.js +33 -0
- package/lib/components/buttons/ButtonRemoveGroup.d.ts +8 -0
- package/lib/components/buttons/ButtonRemoveGroup.js +25 -0
- package/lib/components/buttons/index.d.ts +4 -0
- package/lib/components/buttons/index.js +5 -0
- package/lib/components/cost.d.ts +11 -0
- package/lib/components/cost.js +44 -0
- package/lib/components/currency.d.ts +16 -0
- package/lib/components/currency.js +184 -0
- package/lib/components/drafts/DraftApprovePanel.d.ts +6 -0
- package/lib/components/drafts/DraftApprovePanel.js +315 -0
- package/lib/components/drafts/DraftCanvas.d.ts +13 -0
- package/lib/components/drafts/DraftCanvas.js +496 -0
- package/lib/components/drafts/DraftDesignerSheet.d.ts +9 -0
- package/lib/components/drafts/DraftDesignerSheet.js +685 -0
- package/lib/components/drafts/ProductDraftsHost.d.ts +3 -0
- package/lib/components/drafts/ProductDraftsHost.js +207 -0
- package/lib/components/drafts/useHtmlImage.d.ts +1 -0
- package/lib/components/drafts/useHtmlImage.js +45 -0
- package/lib/components/icons/IconChecked.d.ts +3 -0
- package/lib/components/icons/IconChecked.js +10 -0
- package/lib/components/icons/IconCheckedOrNoStock.d.ts +7 -0
- package/lib/components/icons/IconCheckedOrNoStock.js +13 -0
- package/lib/components/icons/IconCountryFlag.d.ts +8 -0
- package/lib/components/icons/IconCountryFlag.js +27 -0
- package/lib/components/icons/IconFile.d.ts +7 -0
- package/lib/components/icons/IconFile.js +41 -0
- package/lib/components/icons/IconNoStock.d.ts +3 -0
- package/lib/components/icons/IconNoStock.js +12 -0
- package/lib/components/icons/index.d.ts +5 -0
- package/lib/components/icons/index.js +6 -0
- package/lib/components/quoteAfterFieldChange.d.ts +7 -0
- package/lib/components/quoteAfterFieldChange.js +11 -0
- package/lib/components/quoteAfterFieldChange.test.js +58 -0
- package/lib/components/utils.d.ts +26 -0
- package/lib/components/utils.js +500 -0
- package/lib/context/MerchiProductFormProvider.d.ts +177 -0
- package/lib/context/MerchiProductFormProvider.js +1020 -0
- package/lib/images/product-not-found.png +0 -0
- package/lib/index.d.ts +42 -0
- package/lib/index.js +41 -0
- package/lib/styles/globals.css +1590 -0
- package/lib/styles/globals.css.map +1 -0
- package/lib/styles/globals.scss +1698 -0
- package/lib/utils/area.d.ts +77 -0
- package/lib/utils/area.js +298 -0
- package/lib/utils/cleanFormVariationJson.d.ts +5 -0
- package/lib/utils/cleanFormVariationJson.js +39 -0
- package/lib/utils/cleanFormVariationJson.test.js +54 -0
- package/lib/utils/countries.d.ts +7 -0
- package/lib/utils/countries.js +290 -0
- package/lib/utils/currency.d.ts +2 -0
- package/lib/utils/currency.js +188 -0
- package/lib/utils/draftExport.d.ts +21 -0
- package/lib/utils/draftExport.js +481 -0
- package/lib/utils/draftExport.test.js +78 -0
- package/lib/utils/draftFonts.d.ts +55 -0
- package/lib/utils/draftFonts.js +68 -0
- package/lib/utils/draftStorage.d.ts +25 -0
- package/lib/utils/draftStorage.js +148 -0
- package/lib/utils/draftStorage.test.js +125 -0
- package/lib/utils/draftTemplates.d.ts +87 -0
- package/lib/utils/draftTemplates.js +579 -0
- package/lib/utils/draftTemplates.test.js +476 -0
- package/lib/utils/formErrors.d.ts +2 -0
- package/lib/utils/formErrors.js +29 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +4 -0
- package/lib/utils/priceMatrix.d.ts +57 -0
- package/lib/utils/priceMatrix.js +82 -0
- package/lib/utils/priceMatrix.test.js +200 -0
- package/lib/utils/products.d.ts +40 -0
- package/lib/utils/products.js +68 -0
- package/lib/utils/quantity.d.ts +7 -0
- package/lib/utils/quantity.js +19 -0
- package/lib/utils/quantity.test.js +42 -0
- package/lib/utils/reconcileVariations.d.ts +25 -0
- package/lib/utils/reconcileVariations.js +246 -0
- package/lib/utils/reconcileVariations.test.js +239 -0
- package/lib/utils/selectedVariationCosts.d.ts +6 -0
- package/lib/utils/selectedVariationCosts.js +59 -0
- package/lib/utils/selectedVariationCosts.test.js +66 -0
- package/lib/utils/selections.d.ts +23 -0
- package/lib/utils/selections.js +76 -0
- package/lib/utils/selections.test.js +159 -0
- package/lib/utils/singleOptionVariation.d.ts +2 -0
- package/lib/utils/singleOptionVariation.js +22 -0
- package/lib/utils/singleOptionVariation.test.js +59 -0
- package/lib/utils/supportedNumbers.d.ts +1 -0
- package/lib/utils/supportedNumbers.js +27 -0
- package/lib/utils/types.d.ts +114 -0
- package/lib/utils/types.js +50 -0
- package/lib/utils/url.d.ts +3 -0
- package/lib/utils/url.js +65 -0
- package/lib/utils/variationFields.d.ts +5 -0
- package/lib/utils/variationFields.js +116 -0
- package/lib/utils/variationFields.test.js +108 -0
- package/package.json +93 -0
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
6
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
7
|
+
import { FieldType } from './types';
|
|
8
|
+
import { blankTemplate, bboxToPixels, canvasKindForFieldType, defaultPlacement, designGroupCount, detachField, fitInside, fitTextBox, inferArtworkRole, isTemplateVisible, normaliseCssColour, resolveArtworkRole, linkedVariationsForTemplate, productAllowsClientDesign, regionsForRole, seedOrSyncCanvas, selectedOptionIdsFromVariations, variationCanvasContent, visibleTemplatesForGroup } from './draftTemplates';
|
|
9
|
+
test('productAllowsClientDesign requires both flags and a template', function () {
|
|
10
|
+
expect(productAllowsClientDesign({})).toBe(false);
|
|
11
|
+
expect(productAllowsClientDesign({
|
|
12
|
+
needsDrafting: true
|
|
13
|
+
})).toBe(false);
|
|
14
|
+
expect(productAllowsClientDesign({
|
|
15
|
+
allowClientDraftContribution: true
|
|
16
|
+
})).toBe(false);
|
|
17
|
+
expect(productAllowsClientDesign({
|
|
18
|
+
needsDrafting: true,
|
|
19
|
+
allowClientDraftContribution: true
|
|
20
|
+
})).toBe(false);
|
|
21
|
+
expect(productAllowsClientDesign({
|
|
22
|
+
needsDrafting: true,
|
|
23
|
+
allowClientDraftContribution: true,
|
|
24
|
+
draftTemplates: []
|
|
25
|
+
})).toBe(false);
|
|
26
|
+
expect(productAllowsClientDesign({
|
|
27
|
+
needsDrafting: true,
|
|
28
|
+
allowClientDraftContribution: true,
|
|
29
|
+
draftTemplates: [{
|
|
30
|
+
id: 1
|
|
31
|
+
}]
|
|
32
|
+
})).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
test('designGroupCount is 1 without group fields', function () {
|
|
35
|
+
expect(designGroupCount({}, {
|
|
36
|
+
variationsGroups: [{}, {}]
|
|
37
|
+
})).toBe(1);
|
|
38
|
+
expect(designGroupCount({
|
|
39
|
+
groupVariationFields: [{
|
|
40
|
+
id: 1
|
|
41
|
+
}]
|
|
42
|
+
}, {
|
|
43
|
+
variationsGroups: [{}, {}, {}]
|
|
44
|
+
})).toBe(3);
|
|
45
|
+
});
|
|
46
|
+
test('isTemplateVisible requires every selectedBy option', function () {
|
|
47
|
+
var selected = new Set([10, 20]);
|
|
48
|
+
expect(isTemplateVisible({
|
|
49
|
+
selectedByVariationFieldOptions: []
|
|
50
|
+
}, selected)).toBe(true);
|
|
51
|
+
expect(isTemplateVisible({
|
|
52
|
+
selectedByVariationFieldOptions: [{
|
|
53
|
+
id: 10
|
|
54
|
+
}]
|
|
55
|
+
}, selected)).toBe(true);
|
|
56
|
+
expect(isTemplateVisible({
|
|
57
|
+
selectedByVariationFieldOptions: [{
|
|
58
|
+
id: 10
|
|
59
|
+
}, {
|
|
60
|
+
id: 20
|
|
61
|
+
}]
|
|
62
|
+
}, selected)).toBe(true);
|
|
63
|
+
expect(isTemplateVisible({
|
|
64
|
+
selectedByVariationFieldOptions: [{
|
|
65
|
+
id: 10
|
|
66
|
+
}, {
|
|
67
|
+
id: 30
|
|
68
|
+
}]
|
|
69
|
+
}, selected)).toBe(false);
|
|
70
|
+
});
|
|
71
|
+
test('visibleTemplatesForGroup uses independent and group selections', function () {
|
|
72
|
+
var product = {
|
|
73
|
+
draftTemplates: [{
|
|
74
|
+
id: 1,
|
|
75
|
+
selectedByVariationFieldOptions: []
|
|
76
|
+
}, {
|
|
77
|
+
id: 2,
|
|
78
|
+
selectedByVariationFieldOptions: [{
|
|
79
|
+
id: 99
|
|
80
|
+
}]
|
|
81
|
+
}]
|
|
82
|
+
};
|
|
83
|
+
expect(visibleTemplatesForGroup(product, [], []).map(function (t) {
|
|
84
|
+
return t.id;
|
|
85
|
+
})).toEqual([1]);
|
|
86
|
+
expect(visibleTemplatesForGroup(product, [{
|
|
87
|
+
value: '99'
|
|
88
|
+
}], []).map(function (t) {
|
|
89
|
+
return t.id;
|
|
90
|
+
})).toEqual([1, 2]);
|
|
91
|
+
});
|
|
92
|
+
test('canvasKindForFieldType maps injectable types and skips the rest', function () {
|
|
93
|
+
expect(canvasKindForFieldType(FieldType.TEXT_INPUT)).toBe('text');
|
|
94
|
+
expect(canvasKindForFieldType(FieldType.FILE_UPLOAD)).toBe('image');
|
|
95
|
+
expect(canvasKindForFieldType(FieldType.COLOUR_PICKER)).toBe('rect');
|
|
96
|
+
expect(canvasKindForFieldType(FieldType.FIELD_INSTRUCTIONS)).toBe(null);
|
|
97
|
+
expect(canvasKindForFieldType(FieldType.AREA)).toBe(null);
|
|
98
|
+
});
|
|
99
|
+
test('variationCanvasContent reads text, option labels, files and colours', function () {
|
|
100
|
+
expect(variationCanvasContent({
|
|
101
|
+
value: 'Hello',
|
|
102
|
+
variationField: {
|
|
103
|
+
fieldType: FieldType.TEXT_INPUT
|
|
104
|
+
}
|
|
105
|
+
})).toEqual({
|
|
106
|
+
kind: 'text',
|
|
107
|
+
text: 'Hello'
|
|
108
|
+
});
|
|
109
|
+
expect(variationCanvasContent({
|
|
110
|
+
value: '5,6',
|
|
111
|
+
selectableOptions: [{
|
|
112
|
+
optionId: 5,
|
|
113
|
+
value: 'Red'
|
|
114
|
+
}, {
|
|
115
|
+
optionId: 6,
|
|
116
|
+
value: 'Large'
|
|
117
|
+
}],
|
|
118
|
+
variationField: {
|
|
119
|
+
fieldType: FieldType.CHECKBOX
|
|
120
|
+
}
|
|
121
|
+
})).toEqual({
|
|
122
|
+
kind: 'text',
|
|
123
|
+
text: 'Red, Large'
|
|
124
|
+
});
|
|
125
|
+
expect(variationCanvasContent({
|
|
126
|
+
variationFiles: [{
|
|
127
|
+
viewUrl: 'https://cdn.example/logo.png'
|
|
128
|
+
}],
|
|
129
|
+
variationField: {
|
|
130
|
+
fieldType: FieldType.FILE_UPLOAD
|
|
131
|
+
}
|
|
132
|
+
})).toEqual({
|
|
133
|
+
kind: 'image',
|
|
134
|
+
src: 'https://cdn.example/logo.png'
|
|
135
|
+
});
|
|
136
|
+
expect(variationCanvasContent({
|
|
137
|
+
value: '#ff00aa',
|
|
138
|
+
variationField: {
|
|
139
|
+
fieldType: FieldType.COLOUR_PICKER
|
|
140
|
+
}
|
|
141
|
+
})).toEqual({
|
|
142
|
+
kind: 'rect',
|
|
143
|
+
fill: '#ff00aa'
|
|
144
|
+
});
|
|
145
|
+
expect(variationCanvasContent({
|
|
146
|
+
value: '12',
|
|
147
|
+
variationField: {
|
|
148
|
+
fieldType: FieldType.COLOUR_SELECT,
|
|
149
|
+
options: [{
|
|
150
|
+
id: 12,
|
|
151
|
+
colour: '#00aa00',
|
|
152
|
+
value: 'Green'
|
|
153
|
+
}]
|
|
154
|
+
}
|
|
155
|
+
})).toEqual({
|
|
156
|
+
kind: 'rect',
|
|
157
|
+
fill: '#00aa00'
|
|
158
|
+
});
|
|
159
|
+
expect(variationCanvasContent({
|
|
160
|
+
value: '12',
|
|
161
|
+
variationField: {
|
|
162
|
+
fieldType: FieldType.COLOUR_SELECT,
|
|
163
|
+
options: []
|
|
164
|
+
}
|
|
165
|
+
})).toEqual({
|
|
166
|
+
kind: 'rect',
|
|
167
|
+
fill: undefined
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
test('normaliseCssColour ignores option ids and keeps hex or names', function () {
|
|
171
|
+
expect(normaliseCssColour('12', '#0a0')).toBe('#00aa00');
|
|
172
|
+
expect(normaliseCssColour('Green')).toBe('Green');
|
|
173
|
+
expect(normaliseCssColour(undefined, '')).toBeUndefined();
|
|
174
|
+
});
|
|
175
|
+
test('fitTextBox shrinks to the text instead of the region', function () {
|
|
176
|
+
var fitted = fitTextBox({
|
|
177
|
+
x: 0,
|
|
178
|
+
y: 0,
|
|
179
|
+
width: 800,
|
|
180
|
+
height: 200,
|
|
181
|
+
text: 'Hi',
|
|
182
|
+
fontSize: 40
|
|
183
|
+
});
|
|
184
|
+
expect(fitted.width).toBeLessThan(200);
|
|
185
|
+
expect(fitted.height).toBeLessThan(80);
|
|
186
|
+
expect(fitted.x).toBeGreaterThan(200);
|
|
187
|
+
});
|
|
188
|
+
test('linkedVariationsForTemplate only returns editedBy fields', function () {
|
|
189
|
+
var template = {
|
|
190
|
+
editedByVariationFields: [{
|
|
191
|
+
id: 2
|
|
192
|
+
}]
|
|
193
|
+
};
|
|
194
|
+
var variations = [{
|
|
195
|
+
variationField: {
|
|
196
|
+
id: 1,
|
|
197
|
+
fieldType: FieldType.TEXT_INPUT
|
|
198
|
+
}
|
|
199
|
+
}, {
|
|
200
|
+
variationField: {
|
|
201
|
+
id: 2,
|
|
202
|
+
fieldType: FieldType.TEXT_INPUT
|
|
203
|
+
},
|
|
204
|
+
value: 'A'
|
|
205
|
+
}];
|
|
206
|
+
expect(linkedVariationsForTemplate(template, variations)).toHaveLength(1);
|
|
207
|
+
expect(linkedVariationsForTemplate({
|
|
208
|
+
editedByVariationFields: []
|
|
209
|
+
}, variations)).toHaveLength(0);
|
|
210
|
+
});
|
|
211
|
+
test('seedOrSyncCanvas places linked fields and updates content only', function () {
|
|
212
|
+
var template = {
|
|
213
|
+
id: 8,
|
|
214
|
+
width: 1000,
|
|
215
|
+
height: 1000,
|
|
216
|
+
editedByVariationFields: [{
|
|
217
|
+
id: 1
|
|
218
|
+
}, {
|
|
219
|
+
id: 2
|
|
220
|
+
}],
|
|
221
|
+
customisationMap: {
|
|
222
|
+
regions: [{
|
|
223
|
+
role: 'text_placeholder',
|
|
224
|
+
bbox: [0.1, 0.1, 0.4, 0.1]
|
|
225
|
+
}, {
|
|
226
|
+
role: 'print_area',
|
|
227
|
+
bbox: [0.2, 0.3, 0.5, 0.4]
|
|
228
|
+
}]
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
var first = seedOrSyncCanvas(null, template, [{
|
|
232
|
+
variationField: {
|
|
233
|
+
id: 1,
|
|
234
|
+
fieldType: FieldType.TEXT_INPUT
|
|
235
|
+
},
|
|
236
|
+
value: 'Acme'
|
|
237
|
+
}, {
|
|
238
|
+
variationField: {
|
|
239
|
+
id: 2,
|
|
240
|
+
fieldType: FieldType.FILE_UPLOAD
|
|
241
|
+
},
|
|
242
|
+
variationFiles: [{
|
|
243
|
+
viewUrl: 'https://cdn.example/a.png'
|
|
244
|
+
}]
|
|
245
|
+
}]);
|
|
246
|
+
expect(first.objects).toHaveLength(2);
|
|
247
|
+
var text = first.objects.find(function (o) {
|
|
248
|
+
return o.type === 'text';
|
|
249
|
+
});
|
|
250
|
+
expect(text.text).toBe('Acme');
|
|
251
|
+
expect(text.width).toBeLessThan(200);
|
|
252
|
+
expect(text.merchiFieldId).toBe(1);
|
|
253
|
+
var image = first.objects.find(function (o) {
|
|
254
|
+
return o.type === 'image';
|
|
255
|
+
});
|
|
256
|
+
expect(image.src).toBe('https://cdn.example/a.png');
|
|
257
|
+
expect(image.x).toBeCloseTo(200);
|
|
258
|
+
var movedCenter = 333 + text.width / 2;
|
|
259
|
+
text.x = 333;
|
|
260
|
+
var synced = seedOrSyncCanvas(first, template, [{
|
|
261
|
+
variationField: {
|
|
262
|
+
id: 1,
|
|
263
|
+
fieldType: FieldType.TEXT_INPUT
|
|
264
|
+
},
|
|
265
|
+
value: 'Beta'
|
|
266
|
+
}, {
|
|
267
|
+
variationField: {
|
|
268
|
+
id: 2,
|
|
269
|
+
fieldType: FieldType.FILE_UPLOAD
|
|
270
|
+
},
|
|
271
|
+
variationFiles: [{
|
|
272
|
+
viewUrl: 'https://cdn.example/a.png'
|
|
273
|
+
}]
|
|
274
|
+
}]);
|
|
275
|
+
var syncedText = synced.objects.find(function (o) {
|
|
276
|
+
return o.merchiFieldId === 1;
|
|
277
|
+
});
|
|
278
|
+
expect(syncedText.text).toBe('Beta');
|
|
279
|
+
expect(syncedText.x + syncedText.width / 2).toBeCloseTo(movedCenter);
|
|
280
|
+
});
|
|
281
|
+
test('detachField prevents re-seeding that field', function () {
|
|
282
|
+
var template = {
|
|
283
|
+
width: 500,
|
|
284
|
+
height: 500,
|
|
285
|
+
editedByVariationFields: [{
|
|
286
|
+
id: 1
|
|
287
|
+
}]
|
|
288
|
+
};
|
|
289
|
+
var seeded = seedOrSyncCanvas(null, template, [{
|
|
290
|
+
variationField: {
|
|
291
|
+
id: 1,
|
|
292
|
+
fieldType: FieldType.TEXT_INPUT
|
|
293
|
+
},
|
|
294
|
+
value: 'Keep'
|
|
295
|
+
}]);
|
|
296
|
+
var detached = detachField(seeded, seeded.objects[0].id);
|
|
297
|
+
expect(detached.objects).toHaveLength(0);
|
|
298
|
+
var again = seedOrSyncCanvas(detached, template, [{
|
|
299
|
+
variationField: {
|
|
300
|
+
id: 1,
|
|
301
|
+
fieldType: FieldType.TEXT_INPUT
|
|
302
|
+
},
|
|
303
|
+
value: 'Keep'
|
|
304
|
+
}]);
|
|
305
|
+
expect(again.objects).toHaveLength(0);
|
|
306
|
+
});
|
|
307
|
+
test('regionsForRole and bboxToPixels convert fractional boxes', function () {
|
|
308
|
+
expect(regionsForRole({
|
|
309
|
+
regions: [{
|
|
310
|
+
role: 'print_area',
|
|
311
|
+
bbox: [0.1, 0.2, 0.3, 0.4]
|
|
312
|
+
}, {
|
|
313
|
+
role: 'text_placeholder',
|
|
314
|
+
bbox: [0, 0, 1, 1]
|
|
315
|
+
}]
|
|
316
|
+
}, 'print_area')).toEqual([[0.1, 0.2, 0.3, 0.4]]);
|
|
317
|
+
expect(bboxToPixels([0.1, 0.2, 0.3, 0.4], 1000, 500)).toEqual({
|
|
318
|
+
x: 100,
|
|
319
|
+
y: 100,
|
|
320
|
+
width: 300,
|
|
321
|
+
height: 200
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
test('inferArtworkRole maps colour fields to text or base', function () {
|
|
325
|
+
expect(inferArtworkRole({
|
|
326
|
+
fieldType: FieldType.FILE_UPLOAD
|
|
327
|
+
})).toBe('image');
|
|
328
|
+
expect(inferArtworkRole({
|
|
329
|
+
fieldType: FieldType.TEXT_INPUT
|
|
330
|
+
})).toBe('text');
|
|
331
|
+
expect(inferArtworkRole({
|
|
332
|
+
fieldType: FieldType.COLOUR_PICKER,
|
|
333
|
+
name: 'Text Colour'
|
|
334
|
+
})).toBe('text_fill');
|
|
335
|
+
expect(inferArtworkRole({
|
|
336
|
+
fieldType: FieldType.COLOUR_SELECT,
|
|
337
|
+
name: 'Wristband Colour'
|
|
338
|
+
})).toBe('body_colour_fill');
|
|
339
|
+
});
|
|
340
|
+
test('resolveArtworkRole keeps named base-colour fields as body fills', function () {
|
|
341
|
+
expect(resolveArtworkRole({
|
|
342
|
+
id: 3,
|
|
343
|
+
fieldType: FieldType.COLOUR_PICKER,
|
|
344
|
+
name: 'Wristband Colour'
|
|
345
|
+
}, {
|
|
346
|
+
customisationMap: {
|
|
347
|
+
fieldBindings: [{
|
|
348
|
+
fieldId: 3,
|
|
349
|
+
role: 'text_fill',
|
|
350
|
+
targetFieldId: 1
|
|
351
|
+
}]
|
|
352
|
+
}
|
|
353
|
+
}, [{
|
|
354
|
+
id: 1,
|
|
355
|
+
fieldType: FieldType.TEXT_INPUT
|
|
356
|
+
}])).toBe('body_colour_fill');
|
|
357
|
+
});
|
|
358
|
+
test('fitInside preserves ratio inside a box', function () {
|
|
359
|
+
var fitted = fitInside({
|
|
360
|
+
x: 0,
|
|
361
|
+
y: 0,
|
|
362
|
+
width: 200,
|
|
363
|
+
height: 100
|
|
364
|
+
}, 100, 100, true);
|
|
365
|
+
expect(fitted.width).toBe(100);
|
|
366
|
+
expect(fitted.height).toBe(100);
|
|
367
|
+
expect(fitted.x).toBe(50);
|
|
368
|
+
expect(fitInside({
|
|
369
|
+
x: 0,
|
|
370
|
+
y: 0,
|
|
371
|
+
width: 200,
|
|
372
|
+
height: 100
|
|
373
|
+
}, 100, 100, false)).toEqual({
|
|
374
|
+
x: 0,
|
|
375
|
+
y: 0,
|
|
376
|
+
width: 200,
|
|
377
|
+
height: 100
|
|
378
|
+
});
|
|
379
|
+
});
|
|
380
|
+
test('seedOrSyncCanvas applies a linked colour to text instead of a rect', function () {
|
|
381
|
+
var template = {
|
|
382
|
+
width: 1000,
|
|
383
|
+
height: 1000,
|
|
384
|
+
editedByVariationFields: [{
|
|
385
|
+
id: 1
|
|
386
|
+
}, {
|
|
387
|
+
id: 2
|
|
388
|
+
}],
|
|
389
|
+
customisationMap: {
|
|
390
|
+
fieldBindings: [{
|
|
391
|
+
fieldId: 1,
|
|
392
|
+
role: 'text'
|
|
393
|
+
}, {
|
|
394
|
+
fieldId: 2,
|
|
395
|
+
role: 'text_fill',
|
|
396
|
+
targetFieldId: 1
|
|
397
|
+
}]
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
var seeded = seedOrSyncCanvas(null, template, [{
|
|
401
|
+
variationField: {
|
|
402
|
+
id: 1,
|
|
403
|
+
fieldType: FieldType.TEXT_INPUT
|
|
404
|
+
},
|
|
405
|
+
value: 'Hello'
|
|
406
|
+
}, {
|
|
407
|
+
variationField: {
|
|
408
|
+
id: 2,
|
|
409
|
+
fieldType: FieldType.COLOUR_PICKER
|
|
410
|
+
},
|
|
411
|
+
value: '#ff0000'
|
|
412
|
+
}]);
|
|
413
|
+
expect(seeded.objects).toHaveLength(1);
|
|
414
|
+
expect(seeded.objects[0].text).toBe('Hello');
|
|
415
|
+
expect(seeded.objects[0].fill).toBe('#ff0000');
|
|
416
|
+
});
|
|
417
|
+
test('seedOrSyncCanvas paints base colour even without a mapped region', function () {
|
|
418
|
+
var template = {
|
|
419
|
+
width: 1000,
|
|
420
|
+
height: 1000,
|
|
421
|
+
editedByVariationFields: [{
|
|
422
|
+
id: 3
|
|
423
|
+
}]
|
|
424
|
+
};
|
|
425
|
+
var variations = [{
|
|
426
|
+
variationField: {
|
|
427
|
+
id: 3,
|
|
428
|
+
fieldType: FieldType.COLOUR_PICKER,
|
|
429
|
+
name: 'Base colour'
|
|
430
|
+
},
|
|
431
|
+
value: '#00aa00'
|
|
432
|
+
}];
|
|
433
|
+
var fallback = seedOrSyncCanvas(null, template, variations);
|
|
434
|
+
expect(fallback.objects).toHaveLength(1);
|
|
435
|
+
expect(fallback.objects[0].type).toBe('rect');
|
|
436
|
+
expect(fallback.objects[0].fill).toBe('#00aa00');
|
|
437
|
+
expect(fallback.objects[0].width).toBe(1000);
|
|
438
|
+
expect(fallback.objects[0].locked).toBe(true);
|
|
439
|
+
var withRegion = seedOrSyncCanvas(null, _objectSpread(_objectSpread({}, template), {}, {
|
|
440
|
+
customisationMap: {
|
|
441
|
+
regions: [{
|
|
442
|
+
role: 'body_colour_fill',
|
|
443
|
+
bbox: [0, 0.8, 1, 0.2]
|
|
444
|
+
}]
|
|
445
|
+
}
|
|
446
|
+
}), variations);
|
|
447
|
+
expect(withRegion.objects[0].y).toBeCloseTo(800);
|
|
448
|
+
var fromPrintArea = seedOrSyncCanvas(null, _objectSpread(_objectSpread({}, template), {}, {
|
|
449
|
+
customisationMap: {
|
|
450
|
+
regions: [{
|
|
451
|
+
role: 'print_area',
|
|
452
|
+
bbox: [0.1, 0.4, 0.8, 0.15]
|
|
453
|
+
}]
|
|
454
|
+
}
|
|
455
|
+
}), variations);
|
|
456
|
+
expect(fromPrintArea.objects[0].x).toBeCloseTo(100);
|
|
457
|
+
expect(fromPrintArea.objects[0].width).toBeCloseTo(800);
|
|
458
|
+
});
|
|
459
|
+
test('defaultPlacement stacks text and centres images', function () {
|
|
460
|
+
var image = defaultPlacement('image', 0, 1000, 1000);
|
|
461
|
+
expect(image.width).toBe(600);
|
|
462
|
+
var text = defaultPlacement('text', 1, 1000, 1000);
|
|
463
|
+
expect(text.y).toBeGreaterThan(40);
|
|
464
|
+
});
|
|
465
|
+
test('blankTemplate uses fallback artboard size', function () {
|
|
466
|
+
expect(blankTemplate().id).toBe(0);
|
|
467
|
+
expect(blankTemplate().width).toBe(1000);
|
|
468
|
+
});
|
|
469
|
+
test('selectedOptionIdsFromVariations parses csv values', function () {
|
|
470
|
+
expect(Array.from(selectedOptionIdsFromVariations([{
|
|
471
|
+
value: '1, 2'
|
|
472
|
+
}, {
|
|
473
|
+
value: '2'
|
|
474
|
+
}])).sort()).toEqual([1, 2]);
|
|
475
|
+
});
|
|
476
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZFR5cGUiLCJibGFua1RlbXBsYXRlIiwiYmJveFRvUGl4ZWxzIiwiY2FudmFzS2luZEZvckZpZWxkVHlwZSIsImRlZmF1bHRQbGFjZW1lbnQiLCJkZXNpZ25Hcm91cENvdW50IiwiZGV0YWNoRmllbGQiLCJmaXRJbnNpZGUiLCJmaXRUZXh0Qm94IiwiaW5mZXJBcnR3b3JrUm9sZSIsImlzVGVtcGxhdGVWaXNpYmxlIiwibm9ybWFsaXNlQ3NzQ29sb3VyIiwicmVzb2x2ZUFydHdvcmtSb2xlIiwibGlua2VkVmFyaWF0aW9uc0ZvclRlbXBsYXRlIiwicHJvZHVjdEFsbG93c0NsaWVudERlc2lnbiIsInJlZ2lvbnNGb3JSb2xlIiwic2VlZE9yU3luY0NhbnZhcyIsInNlbGVjdGVkT3B0aW9uSWRzRnJvbVZhcmlhdGlvbnMiLCJ2YXJpYXRpb25DYW52YXNDb250ZW50IiwidmlzaWJsZVRlbXBsYXRlc0Zvckdyb3VwIiwidGVzdCIsImV4cGVjdCIsInRvQmUiLCJuZWVkc0RyYWZ0aW5nIiwiYWxsb3dDbGllbnREcmFmdENvbnRyaWJ1dGlvbiIsImRyYWZ0VGVtcGxhdGVzIiwiaWQiLCJ2YXJpYXRpb25zR3JvdXBzIiwiZ3JvdXBWYXJpYXRpb25GaWVsZHMiLCJzZWxlY3RlZCIsIlNldCIsInNlbGVjdGVkQnlWYXJpYXRpb25GaWVsZE9wdGlvbnMiLCJwcm9kdWN0IiwibWFwIiwidCIsInRvRXF1YWwiLCJ2YWx1ZSIsIlRFWFRfSU5QVVQiLCJGSUxFX1VQTE9BRCIsIkNPTE9VUl9QSUNLRVIiLCJGSUVMRF9JTlNUUlVDVElPTlMiLCJBUkVBIiwidmFyaWF0aW9uRmllbGQiLCJmaWVsZFR5cGUiLCJraW5kIiwidGV4dCIsInNlbGVjdGFibGVPcHRpb25zIiwib3B0aW9uSWQiLCJDSEVDS0JPWCIsInZhcmlhdGlvbkZpbGVzIiwidmlld1VybCIsInNyYyIsImZpbGwiLCJDT0xPVVJfU0VMRUNUIiwib3B0aW9ucyIsImNvbG91ciIsInVuZGVmaW5lZCIsInRvQmVVbmRlZmluZWQiLCJmaXR0ZWQiLCJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0IiwiZm9udFNpemUiLCJ0b0JlTGVzc1RoYW4iLCJ0b0JlR3JlYXRlclRoYW4iLCJ0ZW1wbGF0ZSIsImVkaXRlZEJ5VmFyaWF0aW9uRmllbGRzIiwidmFyaWF0aW9ucyIsInRvSGF2ZUxlbmd0aCIsImN1c3RvbWlzYXRpb25NYXAiLCJyZWdpb25zIiwicm9sZSIsImJib3giLCJmaXJzdCIsIm9iamVjdHMiLCJmaW5kIiwibyIsInR5cGUiLCJtZXJjaGlGaWVsZElkIiwiaW1hZ2UiLCJ0b0JlQ2xvc2VUbyIsIm1vdmVkQ2VudGVyIiwic3luY2VkIiwic3luY2VkVGV4dCIsInNlZWRlZCIsImRldGFjaGVkIiwiYWdhaW4iLCJuYW1lIiwiZmllbGRCaW5kaW5ncyIsImZpZWxkSWQiLCJ0YXJnZXRGaWVsZElkIiwiZmFsbGJhY2siLCJsb2NrZWQiLCJ3aXRoUmVnaW9uIiwiX29iamVjdFNwcmVhZCIsImZyb21QcmludEFyZWEiLCJBcnJheSIsImZyb20iLCJzb3J0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2RyYWZ0VGVtcGxhdGVzLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBibGFua1RlbXBsYXRlLFxuICBiYm94VG9QaXhlbHMsXG4gIGNhbnZhc0tpbmRGb3JGaWVsZFR5cGUsXG4gIGRlZmF1bHRQbGFjZW1lbnQsXG4gIGRlc2lnbkdyb3VwQ291bnQsXG4gIGRldGFjaEZpZWxkLFxuICBmaXRJbnNpZGUsXG4gIGZpdFRleHRCb3gsXG4gIGluZmVyQXJ0d29ya1JvbGUsXG4gIGlzVGVtcGxhdGVWaXNpYmxlLFxuICBub3JtYWxpc2VDc3NDb2xvdXIsXG4gIHJlc29sdmVBcnR3b3JrUm9sZSxcbiAgbGlua2VkVmFyaWF0aW9uc0ZvclRlbXBsYXRlLFxuICBwcm9kdWN0QWxsb3dzQ2xpZW50RGVzaWduLFxuICByZWdpb25zRm9yUm9sZSxcbiAgc2VlZE9yU3luY0NhbnZhcyxcbiAgc2VsZWN0ZWRPcHRpb25JZHNGcm9tVmFyaWF0aW9ucyxcbiAgdmFyaWF0aW9uQ2FudmFzQ29udGVudCxcbiAgdmlzaWJsZVRlbXBsYXRlc0Zvckdyb3VwLFxufSBmcm9tICcuL2RyYWZ0VGVtcGxhdGVzJztcblxudGVzdCgncHJvZHVjdEFsbG93c0NsaWVudERlc2lnbiByZXF1aXJlcyBib3RoIGZsYWdzIGFuZCBhIHRlbXBsYXRlJywgKCkgPT4ge1xuICBleHBlY3QocHJvZHVjdEFsbG93c0NsaWVudERlc2lnbih7fSkpLnRvQmUoZmFsc2UpO1xuICBleHBlY3QocHJvZHVjdEFsbG93c0NsaWVudERlc2lnbih7IG5lZWRzRHJhZnRpbmc6IHRydWUgfSkpLnRvQmUoZmFsc2UpO1xuICBleHBlY3QocHJvZHVjdEFsbG93c0NsaWVudERlc2lnbih7IGFsbG93Q2xpZW50RHJhZnRDb250cmlidXRpb246IHRydWUgfSkpLnRvQmUoZmFsc2UpO1xuICBleHBlY3QocHJvZHVjdEFsbG93c0NsaWVudERlc2lnbih7XG4gICAgbmVlZHNEcmFmdGluZzogdHJ1ZSxcbiAgICBhbGxvd0NsaWVudERyYWZ0Q29udHJpYnV0aW9uOiB0cnVlLFxuICB9KSkudG9CZShmYWxzZSk7XG4gIGV4cGVjdChwcm9kdWN0QWxsb3dzQ2xpZW50RGVzaWduKHtcbiAgICBuZWVkc0RyYWZ0aW5nOiB0cnVlLFxuICAgIGFsbG93Q2xpZW50RHJhZnRDb250cmlidXRpb246IHRydWUsXG4gICAgZHJhZnRUZW1wbGF0ZXM6IFtdLFxuICB9KSkudG9CZShmYWxzZSk7XG4gIGV4cGVjdChwcm9kdWN0QWxsb3dzQ2xpZW50RGVzaWduKHtcbiAgICBuZWVkc0RyYWZ0aW5nOiB0cnVlLFxuICAgIGFsbG93Q2xpZW50RHJhZnRDb250cmlidXRpb246IHRydWUsXG4gICAgZHJhZnRUZW1wbGF0ZXM6IFt7IGlkOiAxIH1dLFxuICB9KSkudG9CZSh0cnVlKTtcbn0pO1xuXG50ZXN0KCdkZXNpZ25Hcm91cENvdW50IGlzIDEgd2l0aG91dCBncm91cCBmaWVsZHMnLCAoKSA9PiB7XG4gIGV4cGVjdChkZXNpZ25Hcm91cENvdW50KHt9LCB7IHZhcmlhdGlvbnNHcm91cHM6IFt7fSwge31dIH0pKS50b0JlKDEpO1xuICBleHBlY3QoZGVzaWduR3JvdXBDb3VudChcbiAgICB7IGdyb3VwVmFyaWF0aW9uRmllbGRzOiBbeyBpZDogMSB9XSB9LFxuICAgIHsgdmFyaWF0aW9uc0dyb3VwczogW3t9LCB7fSwge31dIH1cbiAgKSkudG9CZSgzKTtcbn0pO1xuXG50ZXN0KCdpc1RlbXBsYXRlVmlzaWJsZSByZXF1aXJlcyBldmVyeSBzZWxlY3RlZEJ5IG9wdGlvbicsICgpID0+IHtcbiAgY29uc3Qgc2VsZWN0ZWQgPSBuZXcgU2V0KFsxMCwgMjBdKTtcbiAgZXhwZWN0KGlzVGVtcGxhdGVWaXNpYmxlKHsgc2VsZWN0ZWRCeVZhcmlhdGlvbkZpZWxkT3B0aW9uczogW10gfSwgc2VsZWN0ZWQpKS50b0JlKHRydWUpO1xuICBleHBlY3QoaXNUZW1wbGF0ZVZpc2libGUoXG4gICAgeyBzZWxlY3RlZEJ5VmFyaWF0aW9uRmllbGRPcHRpb25zOiBbeyBpZDogMTAgfV0gfSxcbiAgICBzZWxlY3RlZFxuICApKS50b0JlKHRydWUpO1xuICBleHBlY3QoaXNUZW1wbGF0ZVZpc2libGUoXG4gICAgeyBzZWxlY3RlZEJ5VmFyaWF0aW9uRmllbGRPcHRpb25zOiBbeyBpZDogMTAgfSwgeyBpZDogMjAgfV0gfSxcbiAgICBzZWxlY3RlZFxuICApKS50b0JlKHRydWUpO1xuICBleHBlY3QoaXNUZW1wbGF0ZVZpc2libGUoXG4gICAgeyBzZWxlY3RlZEJ5VmFyaWF0aW9uRmllbGRPcHRpb25zOiBbeyBpZDogMTAgfSwgeyBpZDogMzAgfV0gfSxcbiAgICBzZWxlY3RlZFxuICApKS50b0JlKGZhbHNlKTtcbn0pO1xuXG50ZXN0KCd2aXNpYmxlVGVtcGxhdGVzRm9yR3JvdXAgdXNlcyBpbmRlcGVuZGVudCBhbmQgZ3JvdXAgc2VsZWN0aW9ucycsICgpID0+IHtcbiAgY29uc3QgcHJvZHVjdCA9IHtcbiAgICBkcmFmdFRlbXBsYXRlczogW1xuICAgICAgeyBpZDogMSwgc2VsZWN0ZWRCeVZhcmlhdGlvbkZpZWxkT3B0aW9uczogW10gfSxcbiAgICAgIHsgaWQ6IDIsIHNlbGVjdGVkQnlWYXJpYXRpb25GaWVsZE9wdGlvbnM6IFt7IGlkOiA5OSB9XSB9LFxuICAgIF0sXG4gIH07XG4gIGV4cGVjdCh2aXNpYmxlVGVtcGxhdGVzRm9yR3JvdXAocHJvZHVjdCwgW10sIFtdKS5tYXAoKHQ6IGFueSkgPT4gdC5pZCkpLnRvRXF1YWwoWzFdKTtcbiAgZXhwZWN0KHZpc2libGVUZW1wbGF0ZXNGb3JHcm91cChcbiAgICBwcm9kdWN0LFxuICAgIFt7IHZhbHVlOiAnOTknIH1dLFxuICAgIFtdXG4gICkubWFwKCh0OiBhbnkpID0+IHQuaWQpKS50b0VxdWFsKFsxLCAyXSk7XG59KTtcblxudGVzdCgnY2FudmFzS2luZEZvckZpZWxkVHlwZSBtYXBzIGluamVjdGFibGUgdHlwZXMgYW5kIHNraXBzIHRoZSByZXN0JywgKCkgPT4ge1xuICBleHBlY3QoY2FudmFzS2luZEZvckZpZWxkVHlwZShGaWVsZFR5cGUuVEVYVF9JTlBVVCkpLnRvQmUoJ3RleHQnKTtcbiAgZXhwZWN0KGNhbnZhc0tpbmRGb3JGaWVsZFR5cGUoRmllbGRUeXBlLkZJTEVfVVBMT0FEKSkudG9CZSgnaW1hZ2UnKTtcbiAgZXhwZWN0KGNhbnZhc0tpbmRGb3JGaWVsZFR5cGUoRmllbGRUeXBlLkNPTE9VUl9QSUNLRVIpKS50b0JlKCdyZWN0Jyk7XG4gIGV4cGVjdChjYW52YXNLaW5kRm9yRmllbGRUeXBlKEZpZWxkVHlwZS5GSUVMRF9JTlNUUlVDVElPTlMpKS50b0JlKG51bGwpO1xuICBleHBlY3QoY2FudmFzS2luZEZvckZpZWxkVHlwZShGaWVsZFR5cGUuQVJFQSkpLnRvQmUobnVsbCk7XG59KTtcblxudGVzdCgndmFyaWF0aW9uQ2FudmFzQ29udGVudCByZWFkcyB0ZXh0LCBvcHRpb24gbGFiZWxzLCBmaWxlcyBhbmQgY29sb3VycycsICgpID0+IHtcbiAgZXhwZWN0KHZhcmlhdGlvbkNhbnZhc0NvbnRlbnQoe1xuICAgIHZhbHVlOiAnSGVsbG8nLFxuICAgIHZhcmlhdGlvbkZpZWxkOiB7IGZpZWxkVHlwZTogRmllbGRUeXBlLlRFWFRfSU5QVVQgfSxcbiAgfSkpLnRvRXF1YWwoeyBraW5kOiAndGV4dCcsIHRleHQ6ICdIZWxsbycgfSk7XG5cbiAgZXhwZWN0KHZhcmlhdGlvbkNhbnZhc0NvbnRlbnQoe1xuICAgIHZhbHVlOiAnNSw2JyxcbiAgICBzZWxlY3RhYmxlT3B0aW9uczogW1xuICAgICAgeyBvcHRpb25JZDogNSwgdmFsdWU6ICdSZWQnIH0sXG4gICAgICB7IG9wdGlvbklkOiA2LCB2YWx1ZTogJ0xhcmdlJyB9LFxuICAgIF0sXG4gICAgdmFyaWF0aW9uRmllbGQ6IHsgZmllbGRUeXBlOiBGaWVsZFR5cGUuQ0hFQ0tCT1ggfSxcbiAgfSkpLnRvRXF1YWwoeyBraW5kOiAndGV4dCcsIHRleHQ6ICdSZWQsIExhcmdlJyB9KTtcblxuICBleHBlY3QodmFyaWF0aW9uQ2FudmFzQ29udGVudCh7XG4gICAgdmFyaWF0aW9uRmlsZXM6IFt7IHZpZXdVcmw6ICdodHRwczovL2Nkbi5leGFtcGxlL2xvZ28ucG5nJyB9XSxcbiAgICB2YXJpYXRpb25GaWVsZDogeyBmaWVsZFR5cGU6IEZpZWxkVHlwZS5GSUxFX1VQTE9BRCB9LFxuICB9KSkudG9FcXVhbCh7IGtpbmQ6ICdpbWFnZScsIHNyYzogJ2h0dHBzOi8vY2RuLmV4YW1wbGUvbG9nby5wbmcnIH0pO1xuXG4gIGV4cGVjdCh2YXJpYXRpb25DYW52YXNDb250ZW50KHtcbiAgICB2YWx1ZTogJyNmZjAwYWEnLFxuICAgIHZhcmlhdGlvbkZpZWxkOiB7IGZpZWxkVHlwZTogRmllbGRUeXBlLkNPTE9VUl9QSUNLRVIgfSxcbiAgfSkpLnRvRXF1YWwoeyBraW5kOiAncmVjdCcsIGZpbGw6ICcjZmYwMGFhJyB9KTtcblxuICBleHBlY3QodmFyaWF0aW9uQ2FudmFzQ29udGVudCh7XG4gICAgdmFsdWU6ICcxMicsXG4gICAgdmFyaWF0aW9uRmllbGQ6IHtcbiAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlLkNPTE9VUl9TRUxFQ1QsXG4gICAgICBvcHRpb25zOiBbeyBpZDogMTIsIGNvbG91cjogJyMwMGFhMDAnLCB2YWx1ZTogJ0dyZWVuJyB9XSxcbiAgICB9LFxuICB9KSkudG9FcXVhbCh7IGtpbmQ6ICdyZWN0JywgZmlsbDogJyMwMGFhMDAnIH0pO1xuXG4gIGV4cGVjdCh2YXJpYXRpb25DYW52YXNDb250ZW50KHtcbiAgICB2YWx1ZTogJzEyJyxcbiAgICB2YXJpYXRpb25GaWVsZDogeyBmaWVsZFR5cGU6IEZpZWxkVHlwZS5DT0xPVVJfU0VMRUNULCBvcHRpb25zOiBbXSB9LFxuICB9KSkudG9FcXVhbCh7IGtpbmQ6ICdyZWN0JywgZmlsbDogdW5kZWZpbmVkIH0pO1xufSk7XG5cbnRlc3QoJ25vcm1hbGlzZUNzc0NvbG91ciBpZ25vcmVzIG9wdGlvbiBpZHMgYW5kIGtlZXBzIGhleCBvciBuYW1lcycsICgpID0+IHtcbiAgZXhwZWN0KG5vcm1hbGlzZUNzc0NvbG91cignMTInLCAnIzBhMCcpKS50b0JlKCcjMDBhYTAwJyk7XG4gIGV4cGVjdChub3JtYWxpc2VDc3NDb2xvdXIoJ0dyZWVuJykpLnRvQmUoJ0dyZWVuJyk7XG4gIGV4cGVjdChub3JtYWxpc2VDc3NDb2xvdXIodW5kZWZpbmVkLCAnJykpLnRvQmVVbmRlZmluZWQoKTtcbn0pO1xuXG50ZXN0KCdmaXRUZXh0Qm94IHNocmlua3MgdG8gdGhlIHRleHQgaW5zdGVhZCBvZiB0aGUgcmVnaW9uJywgKCkgPT4ge1xuICBjb25zdCBmaXR0ZWQgPSBmaXRUZXh0Qm94KHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IDgwMCxcbiAgICBoZWlnaHQ6IDIwMCxcbiAgICB0ZXh0OiAnSGknLFxuICAgIGZvbnRTaXplOiA0MCxcbiAgfSk7XG4gIGV4cGVjdChmaXR0ZWQud2lkdGgpLnRvQmVMZXNzVGhhbigyMDApO1xuICBleHBlY3QoZml0dGVkLmhlaWdodCkudG9CZUxlc3NUaGFuKDgwKTtcbiAgZXhwZWN0KGZpdHRlZC54KS50b0JlR3JlYXRlclRoYW4oMjAwKTtcbn0pO1xuXG50ZXN0KCdsaW5rZWRWYXJpYXRpb25zRm9yVGVtcGxhdGUgb25seSByZXR1cm5zIGVkaXRlZEJ5IGZpZWxkcycsICgpID0+IHtcbiAgY29uc3QgdGVtcGxhdGUgPSB7IGVkaXRlZEJ5VmFyaWF0aW9uRmllbGRzOiBbeyBpZDogMiB9XSB9O1xuICBjb25zdCB2YXJpYXRpb25zID0gW1xuICAgIHsgdmFyaWF0aW9uRmllbGQ6IHsgaWQ6IDEsIGZpZWxkVHlwZTogRmllbGRUeXBlLlRFWFRfSU5QVVQgfSB9LFxuICAgIHsgdmFyaWF0aW9uRmllbGQ6IHsgaWQ6IDIsIGZpZWxkVHlwZTogRmllbGRUeXBlLlRFWFRfSU5QVVQgfSwgdmFsdWU6ICdBJyB9LFxuICBdO1xuICBleHBlY3QobGlua2VkVmFyaWF0aW9uc0ZvclRlbXBsYXRlKHRlbXBsYXRlLCB2YXJpYXRpb25zKSkudG9IYXZlTGVuZ3RoKDEpO1xuICBleHBlY3QobGlua2VkVmFyaWF0aW9uc0ZvclRlbXBsYXRlKHsgZWRpdGVkQnlWYXJpYXRpb25GaWVsZHM6IFtdIH0sIHZhcmlhdGlvbnMpKS50b0hhdmVMZW5ndGgoMCk7XG59KTtcblxudGVzdCgnc2VlZE9yU3luY0NhbnZhcyBwbGFjZXMgbGlua2VkIGZpZWxkcyBhbmQgdXBkYXRlcyBjb250ZW50IG9ubHknLCAoKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0ge1xuICAgIGlkOiA4LFxuICAgIHdpZHRoOiAxMDAwLFxuICAgIGhlaWdodDogMTAwMCxcbiAgICBlZGl0ZWRCeVZhcmlhdGlvbkZpZWxkczogW3sgaWQ6IDEgfSwgeyBpZDogMiB9XSxcbiAgICBjdXN0b21pc2F0aW9uTWFwOiB7XG4gICAgICByZWdpb25zOiBbXG4gICAgICAgIHsgcm9sZTogJ3RleHRfcGxhY2Vob2xkZXInLCBiYm94OiBbMC4xLCAwLjEsIDAuNCwgMC4xXSB9LFxuICAgICAgICB7IHJvbGU6ICdwcmludF9hcmVhJywgYmJveDogWzAuMiwgMC4zLCAwLjUsIDAuNF0gfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbiAgY29uc3QgZmlyc3QgPSBzZWVkT3JTeW5jQ2FudmFzKG51bGwsIHRlbXBsYXRlLCBbXG4gICAgeyB2YXJpYXRpb25GaWVsZDogeyBpZDogMSwgZmllbGRUeXBlOiBGaWVsZFR5cGUuVEVYVF9JTlBVVCB9LCB2YWx1ZTogJ0FjbWUnIH0sXG4gICAge1xuICAgICAgdmFyaWF0aW9uRmllbGQ6IHsgaWQ6IDIsIGZpZWxkVHlwZTogRmllbGRUeXBlLkZJTEVfVVBMT0FEIH0sXG4gICAgICB2YXJpYXRpb25GaWxlczogW3sgdmlld1VybDogJ2h0dHBzOi8vY2RuLmV4YW1wbGUvYS5wbmcnIH1dLFxuICAgIH0sXG4gIF0pO1xuICBleHBlY3QoZmlyc3Qub2JqZWN0cykudG9IYXZlTGVuZ3RoKDIpO1xuICBjb25zdCB0ZXh0ID0gZmlyc3Qub2JqZWN0cy5maW5kKChvKSA9PiBvLnR5cGUgPT09ICd0ZXh0JykhO1xuICBleHBlY3QodGV4dC50ZXh0KS50b0JlKCdBY21lJyk7XG4gIGV4cGVjdCh0ZXh0LndpZHRoKS50b0JlTGVzc1RoYW4oMjAwKTtcbiAgZXhwZWN0KHRleHQubWVyY2hpRmllbGRJZCkudG9CZSgxKTtcbiAgY29uc3QgaW1hZ2UgPSBmaXJzdC5vYmplY3RzLmZpbmQoKG8pID0+IG8udHlwZSA9PT0gJ2ltYWdlJykhO1xuICBleHBlY3QoaW1hZ2Uuc3JjKS50b0JlKCdodHRwczovL2Nkbi5leGFtcGxlL2EucG5nJyk7XG4gIGV4cGVjdChpbWFnZS54KS50b0JlQ2xvc2VUbygyMDApO1xuXG4gIGNvbnN0IG1vdmVkQ2VudGVyID0gMzMzICsgdGV4dC53aWR0aCAvIDI7XG4gIHRleHQueCA9IDMzMztcbiAgY29uc3Qgc3luY2VkID0gc2VlZE9yU3luY0NhbnZhcyhmaXJzdCwgdGVtcGxhdGUsIFtcbiAgICB7IHZhcmlhdGlvbkZpZWxkOiB7IGlkOiAxLCBmaWVsZFR5cGU6IEZpZWxkVHlwZS5URVhUX0lOUFVUIH0sIHZhbHVlOiAnQmV0YScgfSxcbiAgICB7XG4gICAgICB2YXJpYXRpb25GaWVsZDogeyBpZDogMiwgZmllbGRUeXBlOiBGaWVsZFR5cGUuRklMRV9VUExPQUQgfSxcbiAgICAgIHZhcmlhdGlvbkZpbGVzOiBbeyB2aWV3VXJsOiAnaHR0cHM6Ly9jZG4uZXhhbXBsZS9hLnBuZycgfV0sXG4gICAgfSxcbiAgXSk7XG4gIGNvbnN0IHN5bmNlZFRleHQgPSBzeW5jZWQub2JqZWN0cy5maW5kKChvKSA9PiBvLm1lcmNoaUZpZWxkSWQgPT09IDEpITtcbiAgZXhwZWN0KHN5bmNlZFRleHQudGV4dCkudG9CZSgnQmV0YScpO1xuICBleHBlY3Qoc3luY2VkVGV4dC54ICsgc3luY2VkVGV4dC53aWR0aCAvIDIpLnRvQmVDbG9zZVRvKG1vdmVkQ2VudGVyKTtcbn0pO1xuXG50ZXN0KCdkZXRhY2hGaWVsZCBwcmV2ZW50cyByZS1zZWVkaW5nIHRoYXQgZmllbGQnLCAoKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0ge1xuICAgIHdpZHRoOiA1MDAsXG4gICAgaGVpZ2h0OiA1MDAsXG4gICAgZWRpdGVkQnlWYXJpYXRpb25GaWVsZHM6IFt7IGlkOiAxIH1dLFxuICB9O1xuICBjb25zdCBzZWVkZWQgPSBzZWVkT3JTeW5jQ2FudmFzKG51bGwsIHRlbXBsYXRlLCBbXG4gICAgeyB2YXJpYXRpb25GaWVsZDogeyBpZDogMSwgZmllbGRUeXBlOiBGaWVsZFR5cGUuVEVYVF9JTlBVVCB9LCB2YWx1ZTogJ0tlZXAnIH0sXG4gIF0pO1xuICBjb25zdCBkZXRhY2hlZCA9IGRldGFjaEZpZWxkKHNlZWRlZCwgc2VlZGVkLm9iamVjdHNbMF0uaWQpO1xuICBleHBlY3QoZGV0YWNoZWQub2JqZWN0cykudG9IYXZlTGVuZ3RoKDApO1xuICBjb25zdCBhZ2FpbiA9IHNlZWRPclN5bmNDYW52YXMoZGV0YWNoZWQsIHRlbXBsYXRlLCBbXG4gICAgeyB2YXJpYXRpb25GaWVsZDogeyBpZDogMSwgZmllbGRUeXBlOiBGaWVsZFR5cGUuVEVYVF9JTlBVVCB9LCB2YWx1ZTogJ0tlZXAnIH0sXG4gIF0pO1xuICBleHBlY3QoYWdhaW4ub2JqZWN0cykudG9IYXZlTGVuZ3RoKDApO1xufSk7XG5cbnRlc3QoJ3JlZ2lvbnNGb3JSb2xlIGFuZCBiYm94VG9QaXhlbHMgY29udmVydCBmcmFjdGlvbmFsIGJveGVzJywgKCkgPT4ge1xuICBleHBlY3QocmVnaW9uc0ZvclJvbGUoe1xuICAgIHJlZ2lvbnM6IFtcbiAgICAgIHsgcm9sZTogJ3ByaW50X2FyZWEnLCBiYm94OiBbMC4xLCAwLjIsIDAuMywgMC40XSB9LFxuICAgICAgeyByb2xlOiAndGV4dF9wbGFjZWhvbGRlcicsIGJib3g6IFswLCAwLCAxLCAxXSB9LFxuICAgIF0sXG4gIH0sICdwcmludF9hcmVhJykpLnRvRXF1YWwoW1swLjEsIDAuMiwgMC4zLCAwLjRdXSk7XG4gIGV4cGVjdChiYm94VG9QaXhlbHMoWzAuMSwgMC4yLCAwLjMsIDAuNF0sIDEwMDAsIDUwMCkpLnRvRXF1YWwoe1xuICAgIHg6IDEwMCxcbiAgICB5OiAxMDAsXG4gICAgd2lkdGg6IDMwMCxcbiAgICBoZWlnaHQ6IDIwMCxcbiAgfSk7XG59KTtcblxudGVzdCgnaW5mZXJBcnR3b3JrUm9sZSBtYXBzIGNvbG91ciBmaWVsZHMgdG8gdGV4dCBvciBiYXNlJywgKCkgPT4ge1xuICBleHBlY3QoaW5mZXJBcnR3b3JrUm9sZSh7IGZpZWxkVHlwZTogRmllbGRUeXBlLkZJTEVfVVBMT0FEIH0pKS50b0JlKCdpbWFnZScpO1xuICBleHBlY3QoaW5mZXJBcnR3b3JrUm9sZSh7IGZpZWxkVHlwZTogRmllbGRUeXBlLlRFWFRfSU5QVVQgfSkpLnRvQmUoJ3RleHQnKTtcbiAgZXhwZWN0KGluZmVyQXJ0d29ya1JvbGUoe1xuICAgIGZpZWxkVHlwZTogRmllbGRUeXBlLkNPTE9VUl9QSUNLRVIsXG4gICAgbmFtZTogJ1RleHQgQ29sb3VyJyxcbiAgfSkpLnRvQmUoJ3RleHRfZmlsbCcpO1xuICBleHBlY3QoaW5mZXJBcnR3b3JrUm9sZSh7XG4gICAgZmllbGRUeXBlOiBGaWVsZFR5cGUuQ09MT1VSX1NFTEVDVCxcbiAgICBuYW1lOiAnV3Jpc3RiYW5kIENvbG91cicsXG4gIH0pKS50b0JlKCdib2R5X2NvbG91cl9maWxsJyk7XG59KTtcblxudGVzdCgncmVzb2x2ZUFydHdvcmtSb2xlIGtlZXBzIG5hbWVkIGJhc2UtY29sb3VyIGZpZWxkcyBhcyBib2R5IGZpbGxzJywgKCkgPT4ge1xuICBleHBlY3QocmVzb2x2ZUFydHdvcmtSb2xlKHtcbiAgICBpZDogMyxcbiAgICBmaWVsZFR5cGU6IEZpZWxkVHlwZS5DT0xPVVJfUElDS0VSLFxuICAgIG5hbWU6ICdXcmlzdGJhbmQgQ29sb3VyJyxcbiAgfSwge1xuICAgIGN1c3RvbWlzYXRpb25NYXA6IHtcbiAgICAgIGZpZWxkQmluZGluZ3M6IFt7IGZpZWxkSWQ6IDMsIHJvbGU6ICd0ZXh0X2ZpbGwnLCB0YXJnZXRGaWVsZElkOiAxIH1dLFxuICAgIH0sXG4gIH0sIFt7IGlkOiAxLCBmaWVsZFR5cGU6IEZpZWxkVHlwZS5URVhUX0lOUFVUIH1dKSkudG9CZSgnYm9keV9jb2xvdXJfZmlsbCcpO1xufSk7XG5cbnRlc3QoJ2ZpdEluc2lkZSBwcmVzZXJ2ZXMgcmF0aW8gaW5zaWRlIGEgYm94JywgKCkgPT4ge1xuICBjb25zdCBmaXR0ZWQgPSBmaXRJbnNpZGUoeyB4OiAwLCB5OiAwLCB3aWR0aDogMjAwLCBoZWlnaHQ6IDEwMCB9LCAxMDAsIDEwMCwgdHJ1ZSk7XG4gIGV4cGVjdChmaXR0ZWQud2lkdGgpLnRvQmUoMTAwKTtcbiAgZXhwZWN0KGZpdHRlZC5oZWlnaHQpLnRvQmUoMTAwKTtcbiAgZXhwZWN0KGZpdHRlZC54KS50b0JlKDUwKTtcbiAgZXhwZWN0KGZpdEluc2lkZSh7IHg6IDAsIHk6IDAsIHdpZHRoOiAyMDAsIGhlaWdodDogMTAwIH0sIDEwMCwgMTAwLCBmYWxzZSkpLnRvRXF1YWwoe1xuICAgIHg6IDAsIHk6IDAsIHdpZHRoOiAyMDAsIGhlaWdodDogMTAwLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdzZWVkT3JTeW5jQ2FudmFzIGFwcGxpZXMgYSBsaW5rZWQgY29sb3VyIHRvIHRleHQgaW5zdGVhZCBvZiBhIHJlY3QnLCAoKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0ge1xuICAgIHdpZHRoOiAxMDAwLFxuICAgIGhlaWdodDogMTAwMCxcbiAgICBlZGl0ZWRCeVZhcmlhdGlvbkZpZWxkczogW3sgaWQ6IDEgfSwgeyBpZDogMiB9XSxcbiAgICBjdXN0b21pc2F0aW9uTWFwOiB7XG4gICAgICBmaWVsZEJpbmRpbmdzOiBbXG4gICAgICAgIHsgZmllbGRJZDogMSwgcm9sZTogJ3RleHQnIH0sXG4gICAgICAgIHsgZmllbGRJZDogMiwgcm9sZTogJ3RleHRfZmlsbCcsIHRhcmdldEZpZWxkSWQ6IDEgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbiAgY29uc3Qgc2VlZGVkID0gc2VlZE9yU3luY0NhbnZhcyhudWxsLCB0ZW1wbGF0ZSwgW1xuICAgIHsgdmFyaWF0aW9uRmllbGQ6IHsgaWQ6IDEsIGZpZWxkVHlwZTogRmllbGRUeXBlLlRFWFRfSU5QVVQgfSwgdmFsdWU6ICdIZWxsbycgfSxcbiAgICB7IHZhcmlhdGlvbkZpZWxkOiB7IGlkOiAyLCBmaWVsZFR5cGU6IEZpZWxkVHlwZS5DT0xPVVJfUElDS0VSIH0sIHZhbHVlOiAnI2ZmMDAwMCcgfSxcbiAgXSk7XG4gIGV4cGVjdChzZWVkZWQub2JqZWN0cykudG9IYXZlTGVuZ3RoKDEpO1xuICBleHBlY3Qoc2VlZGVkLm9iamVjdHNbMF0udGV4dCkudG9CZSgnSGVsbG8nKTtcbiAgZXhwZWN0KHNlZWRlZC5vYmplY3RzWzBdLmZpbGwpLnRvQmUoJyNmZjAwMDAnKTtcbn0pO1xuXG50ZXN0KCdzZWVkT3JTeW5jQ2FudmFzIHBhaW50cyBiYXNlIGNvbG91ciBldmVuIHdpdGhvdXQgYSBtYXBwZWQgcmVnaW9uJywgKCkgPT4ge1xuICBjb25zdCB0ZW1wbGF0ZSA9IHtcbiAgICB3aWR0aDogMTAwMCxcbiAgICBoZWlnaHQ6IDEwMDAsXG4gICAgZWRpdGVkQnlWYXJpYXRpb25GaWVsZHM6IFt7IGlkOiAzIH1dLFxuICB9O1xuICBjb25zdCB2YXJpYXRpb25zID0gW1xuICAgIHtcbiAgICAgIHZhcmlhdGlvbkZpZWxkOiB7IGlkOiAzLCBmaWVsZFR5cGU6IEZpZWxkVHlwZS5DT0xPVVJfUElDS0VSLCBuYW1lOiAnQmFzZSBjb2xvdXInIH0sXG4gICAgICB2YWx1ZTogJyMwMGFhMDAnLFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IGZhbGxiYWNrID0gc2VlZE9yU3luY0NhbnZhcyhudWxsLCB0ZW1wbGF0ZSwgdmFyaWF0aW9ucyk7XG4gIGV4cGVjdChmYWxsYmFjay5vYmplY3RzKS50b0hhdmVMZW5ndGgoMSk7XG4gIGV4cGVjdChmYWxsYmFjay5vYmplY3RzWzBdLnR5cGUpLnRvQmUoJ3JlY3QnKTtcbiAgZXhwZWN0KGZhbGxiYWNrLm9iamVjdHNbMF0uZmlsbCkudG9CZSgnIzAwYWEwMCcpO1xuICBleHBlY3QoZmFsbGJhY2sub2JqZWN0c1swXS53aWR0aCkudG9CZSgxMDAwKTtcbiAgZXhwZWN0KGZhbGxiYWNrLm9iamVjdHNbMF0ubG9ja2VkKS50b0JlKHRydWUpO1xuICBjb25zdCB3aXRoUmVnaW9uID0gc2VlZE9yU3luY0NhbnZhcyhudWxsLCB7XG4gICAgLi4udGVtcGxhdGUsXG4gICAgY3VzdG9taXNhdGlvbk1hcDoge1xuICAgICAgcmVnaW9uczogW3sgcm9sZTogJ2JvZHlfY29sb3VyX2ZpbGwnLCBiYm94OiBbMCwgMC44LCAxLCAwLjJdIH1dLFxuICAgIH0sXG4gIH0sIHZhcmlhdGlvbnMpO1xuICBleHBlY3Qod2l0aFJlZ2lvbi5vYmplY3RzWzBdLnkpLnRvQmVDbG9zZVRvKDgwMCk7XG4gIGNvbnN0IGZyb21QcmludEFyZWEgPSBzZWVkT3JTeW5jQ2FudmFzKG51bGwsIHtcbiAgICAuLi50ZW1wbGF0ZSxcbiAgICBjdXN0b21pc2F0aW9uTWFwOiB7XG4gICAgICByZWdpb25zOiBbeyByb2xlOiAncHJpbnRfYXJlYScsIGJib3g6IFswLjEsIDAuNCwgMC44LCAwLjE1XSB9XSxcbiAgICB9LFxuICB9LCB2YXJpYXRpb25zKTtcbiAgZXhwZWN0KGZyb21QcmludEFyZWEub2JqZWN0c1swXS54KS50b0JlQ2xvc2VUbygxMDApO1xuICBleHBlY3QoZnJvbVByaW50QXJlYS5vYmplY3RzWzBdLndpZHRoKS50b0JlQ2xvc2VUbyg4MDApO1xufSk7XG5cbnRlc3QoJ2RlZmF1bHRQbGFjZW1lbnQgc3RhY2tzIHRleHQgYW5kIGNlbnRyZXMgaW1hZ2VzJywgKCkgPT4ge1xuICBjb25zdCBpbWFnZSA9IGRlZmF1bHRQbGFjZW1lbnQoJ2ltYWdlJywgMCwgMTAwMCwgMTAwMCk7XG4gIGV4cGVjdChpbWFnZS53aWR0aCkudG9CZSg2MDApO1xuICBjb25zdCB0ZXh0ID0gZGVmYXVsdFBsYWNlbWVudCgndGV4dCcsIDEsIDEwMDAsIDEwMDApO1xuICBleHBlY3QodGV4dC55KS50b0JlR3JlYXRlclRoYW4oNDApO1xufSk7XG5cbnRlc3QoJ2JsYW5rVGVtcGxhdGUgdXNlcyBmYWxsYmFjayBhcnRib2FyZCBzaXplJywgKCkgPT4ge1xuICBleHBlY3QoYmxhbmtUZW1wbGF0ZSgpLmlkKS50b0JlKDApO1xuICBleHBlY3QoYmxhbmtUZW1wbGF0ZSgpLndpZHRoKS50b0JlKDEwMDApO1xufSk7XG5cbnRlc3QoJ3NlbGVjdGVkT3B0aW9uSWRzRnJvbVZhcmlhdGlvbnMgcGFyc2VzIGNzdiB2YWx1ZXMnLCAoKSA9PiB7XG4gIGV4cGVjdChBcnJheS5mcm9tKHNlbGVjdGVkT3B0aW9uSWRzRnJvbVZhcmlhdGlvbnMoW1xuICAgIHsgdmFsdWU6ICcxLCAyJyB9LFxuICAgIHsgdmFsdWU6ICcyJyB9LFxuICBdKSkuc29ydCgpKS50b0VxdWFsKFsxLCAyXSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEs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
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Scroll the first visible form error into view and focus its input. */
|
|
2
|
+
export function scrollToFirstFormError() {
|
|
3
|
+
if (typeof document === 'undefined') return;
|
|
4
|
+
var reveal = function reveal() {
|
|
5
|
+
var alert = document.querySelector('.merchi-embed-form .input-alert-container, .input-alert-container');
|
|
6
|
+
if (!alert) return;
|
|
7
|
+
var container = alert.closest('.merchi-embed-form_product-group-input-qty-container, .merchi-embed-form_checkbox_radio-item, fieldset, .merchi-embed-form_variantion-container > div') || alert;
|
|
8
|
+
container.scrollIntoView({
|
|
9
|
+
behavior: 'smooth',
|
|
10
|
+
block: 'center'
|
|
11
|
+
});
|
|
12
|
+
var input = container.querySelector('input:not([type="hidden"]), select, textarea');
|
|
13
|
+
if (input && typeof input.focus === 'function') {
|
|
14
|
+
try {
|
|
15
|
+
input.focus({
|
|
16
|
+
preventScroll: true
|
|
17
|
+
});
|
|
18
|
+
} catch (_unused) {
|
|
19
|
+
input.focus();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// Wait for React / RHF to paint error messages after trigger().
|
|
25
|
+
requestAnimationFrame(function () {
|
|
26
|
+
requestAnimationFrame(reveal);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzY3JvbGxUb0ZpcnN0Rm9ybUVycm9yIiwiZG9jdW1lbnQiLCJyZXZlYWwiLCJhbGVydCIsInF1ZXJ5U2VsZWN0b3IiLCJjb250YWluZXIiLCJjbG9zZXN0Iiwic2Nyb2xsSW50b1ZpZXciLCJiZWhhdmlvciIsImJsb2NrIiwiaW5wdXQiLCJmb2N1cyIsInByZXZlbnRTY3JvbGwiLCJfdW51c2VkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Zvcm1FcnJvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIFNjcm9sbCB0aGUgZmlyc3QgdmlzaWJsZSBmb3JtIGVycm9yIGludG8gdmlldyBhbmQgZm9jdXMgaXRzIGlucHV0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRmlyc3RGb3JtRXJyb3IoKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgY29uc3QgcmV2ZWFsID0gKCkgPT4ge1xuICAgIGNvbnN0IGFsZXJ0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcubWVyY2hpLWVtYmVkLWZvcm0gLmlucHV0LWFsZXJ0LWNvbnRhaW5lciwgLmlucHV0LWFsZXJ0LWNvbnRhaW5lcidcbiAgICApIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIWFsZXJ0KSByZXR1cm47XG5cbiAgICBjb25zdCBjb250YWluZXIgPVxuICAgICAgKGFsZXJ0LmNsb3Nlc3QoXG4gICAgICAgICcubWVyY2hpLWVtYmVkLWZvcm1fcHJvZHVjdC1ncm91cC1pbnB1dC1xdHktY29udGFpbmVyLCAubWVyY2hpLWVtYmVkLWZvcm1fY2hlY2tib3hfcmFkaW8taXRlbSwgZmllbGRzZXQsIC5tZXJjaGktZW1iZWQtZm9ybV92YXJpYW50aW9uLWNvbnRhaW5lciA+IGRpdidcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsKSB8fCBhbGVydDtcblxuICAgIGNvbnRhaW5lci5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xuXG4gICAgY29uc3QgaW5wdXQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihcbiAgICAgICdpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLCBzZWxlY3QsIHRleHRhcmVhJ1xuICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmIChpbnB1dCAmJiB0eXBlb2YgaW5wdXQuZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlucHV0LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBXYWl0IGZvciBSZWFjdCAvIFJIRiB0byBwYWludCBlcnJvciBtZXNzYWdlcyBhZnRlciB0cmlnZ2VyKCkuXG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJldmVhbCk7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLE9BQU8sU0FBU0Esc0JBQXNCQSxDQUFBLEVBQUc7RUFDdkMsSUFBSSxPQUFPQyxRQUFRLEtBQUssV0FBVyxFQUFFO0VBRXJDLElBQU1DLE1BQU0sR0FBRyxTQUFUQSxNQUFNQSxDQUFBLEVBQVM7SUFDbkIsSUFBTUMsS0FBSyxHQUFHRixRQUFRLENBQUNHLGFBQWEsQ0FDbEMsbUVBQ0YsQ0FBdUI7SUFDdkIsSUFBSSxDQUFDRCxLQUFLLEVBQUU7SUFFWixJQUFNRSxTQUFTLEdBQ1pGLEtBQUssQ0FBQ0csT0FBTyxDQUNaLHVKQUNGLENBQUMsSUFBMkJILEtBQUs7SUFFbkNFLFNBQVMsQ0FBQ0UsY0FBYyxDQUFDO01BQUVDLFFBQVEsRUFBRSxRQUFRO01BQUVDLEtBQUssRUFBRTtJQUFTLENBQUMsQ0FBQztJQUVqRSxJQUFNQyxLQUFLLEdBQUdMLFNBQVMsQ0FBQ0QsYUFBYSxDQUNuQyw4Q0FDRixDQUF1QjtJQUN2QixJQUFJTSxLQUFLLElBQUksT0FBT0EsS0FBSyxDQUFDQyxLQUFLLEtBQUssVUFBVSxFQUFFO01BQzlDLElBQUk7UUFDRkQsS0FBSyxDQUFDQyxLQUFLLENBQUM7VUFBRUMsYUFBYSxFQUFFO1FBQUssQ0FBQyxDQUFDO01BQ3RDLENBQUMsQ0FBQyxPQUFBQyxPQUFBLEVBQU07UUFDTkgsS0FBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztNQUNmO0lBQ0Y7RUFDRixDQUFDOztFQUVEO0VBQ0FHLHFCQUFxQixDQUFDLFlBQU07SUFDMUJBLHFCQUFxQixDQUFDWixNQUFNLENBQUM7RUFDL0IsQ0FBQyxDQUFDO0FBQ0oiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { supportedNumbers } from './supportedNumbers';
|
|
2
|
+
import { isoCountries } from './countries';
|
|
3
|
+
export { isoCountries, supportedNumbers };
|
|
4
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdXBwb3J0ZWROdW1iZXJzIiwiaXNvQ291bnRyaWVzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN1cHBvcnRlZE51bWJlcnMgfSBmcm9tICcuL3N1cHBvcnRlZE51bWJlcnMnO1xuaW1wb3J0IHsgaXNvQ291bnRyaWVzIH0gZnJvbSAnLi9jb3VudHJpZXMnO1xuXG5cbmV4cG9ydCB7IGlzb0NvdW50cmllcywgc3VwcG9ydGVkTnVtYmVycyB9O1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxnQkFBZ0IsUUFBUSxvQkFBb0I7QUFDckQsU0FBU0MsWUFBWSxRQUFRLGFBQWE7QUFHMUMsU0FBU0EsWUFBWSxFQUFFRCxnQkFBZ0IiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export interface PriceMatrixBand {
|
|
2
|
+
quantity: number;
|
|
3
|
+
upperLimit: number | null;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
export interface PriceMatrixCell {
|
|
7
|
+
quantity: number;
|
|
8
|
+
costPerUnit: number;
|
|
9
|
+
unitPrice: number;
|
|
10
|
+
cost: number;
|
|
11
|
+
taxAmount: number;
|
|
12
|
+
totalCost: number;
|
|
13
|
+
}
|
|
14
|
+
export interface PriceMatrixData {
|
|
15
|
+
currency: string;
|
|
16
|
+
taxPercent: number;
|
|
17
|
+
bands: PriceMatrixBand[];
|
|
18
|
+
cells: PriceMatrixCell[];
|
|
19
|
+
}
|
|
20
|
+
interface PricingRulesLike {
|
|
21
|
+
unsupported?: string;
|
|
22
|
+
currency?: string;
|
|
23
|
+
taxPercent?: number;
|
|
24
|
+
product?: {
|
|
25
|
+
unitPrice?: number;
|
|
26
|
+
minimumPrice?: number | null;
|
|
27
|
+
setupPrice?: number;
|
|
28
|
+
setupPerGroup?: boolean;
|
|
29
|
+
discountGroup?: {
|
|
30
|
+
groupRestricted?: boolean;
|
|
31
|
+
discounts?: any[];
|
|
32
|
+
} | null;
|
|
33
|
+
};
|
|
34
|
+
fields?: any[];
|
|
35
|
+
groupFields?: any[];
|
|
36
|
+
hasGroups?: boolean;
|
|
37
|
+
}
|
|
38
|
+
/** Compact pricing-rules bundle from product JSON when the live bundle is absent. */
|
|
39
|
+
export declare function pricingRulesFromProduct(product: any): PricingRulesLike | null;
|
|
40
|
+
export declare function resolvePricingRules(pricingRules: PricingRulesLike | null | undefined, product: any): PricingRulesLike | null;
|
|
41
|
+
export declare function currentOrderQuantity(job: any, product: any): number;
|
|
42
|
+
export declare function activeBandIndex(matrix: PriceMatrixData, quantity: number): number;
|
|
43
|
+
export interface ResolvePriceMatrixOptions {
|
|
44
|
+
matrix?: PriceMatrixData | null;
|
|
45
|
+
rules?: PricingRulesLike | null;
|
|
46
|
+
product?: any;
|
|
47
|
+
selections?: {
|
|
48
|
+
quantity?: number;
|
|
49
|
+
fieldValues?: Record<number, any>;
|
|
50
|
+
groups?: any[];
|
|
51
|
+
};
|
|
52
|
+
minQuantity?: number;
|
|
53
|
+
buildPriceMatrix?: (rules: any, selections?: any, options?: any) => PriceMatrixData | null;
|
|
54
|
+
}
|
|
55
|
+
/** Build or pass through a price table. No form context required. */
|
|
56
|
+
export declare function resolvePriceMatrix(options?: ResolvePriceMatrixOptions): PriceMatrixData | null;
|
|
57
|
+
export {};
|