@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,78 @@
|
|
|
1
|
+
import { applyKonvaObjectTransform, captureStageArtboard, templateImageSources, wrapLines } from './draftExport';
|
|
2
|
+
test('templateImageSources prefers the public file view and resolves relative URLs', function () {
|
|
3
|
+
expect(templateImageSources({
|
|
4
|
+
file: {
|
|
5
|
+
id: 44,
|
|
6
|
+
viewUrl: '/testfiles/abc/',
|
|
7
|
+
cachedViewUrl: 'https://cdn.example/template.png'
|
|
8
|
+
}
|
|
9
|
+
}, 'http://127.0.0.1:5000/v6/')).toEqual(['http://127.0.0.1:5000/v6/public-files/44/view/', 'http://127.0.0.1:5000/testfiles/abc/', 'https://cdn.example/template.png']);
|
|
10
|
+
});
|
|
11
|
+
test('wrapLines keeps a short phrase on one line', function () {
|
|
12
|
+
expect(wrapLines('James was here', 400, function (value) {
|
|
13
|
+
return value.length * 10;
|
|
14
|
+
})).toEqual(['James was here']);
|
|
15
|
+
});
|
|
16
|
+
test('wrapLines breaks on word boundaries like the designer canvas', function () {
|
|
17
|
+
expect(wrapLines('James was here', 80, function (value) {
|
|
18
|
+
return value.length * 10;
|
|
19
|
+
})).toEqual(['James', 'was here']);
|
|
20
|
+
});
|
|
21
|
+
test('applyKonvaObjectTransform uses the top-left origin like Konva', function () {
|
|
22
|
+
var calls = [];
|
|
23
|
+
var ctx = {
|
|
24
|
+
translate: function translate() {
|
|
25
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
26
|
+
args[_key] = arguments[_key];
|
|
27
|
+
}
|
|
28
|
+
return calls.push(['translate', args]);
|
|
29
|
+
},
|
|
30
|
+
rotate: function rotate() {
|
|
31
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
32
|
+
args[_key2] = arguments[_key2];
|
|
33
|
+
}
|
|
34
|
+
return calls.push(['rotate', args]);
|
|
35
|
+
},
|
|
36
|
+
scale: function scale() {
|
|
37
|
+
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
38
|
+
args[_key3] = arguments[_key3];
|
|
39
|
+
}
|
|
40
|
+
return calls.push(['scale', args]);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
applyKonvaObjectTransform(ctx, {
|
|
44
|
+
x: 40,
|
|
45
|
+
y: 80,
|
|
46
|
+
rotation: 90,
|
|
47
|
+
scaleX: 2,
|
|
48
|
+
scaleY: 1
|
|
49
|
+
});
|
|
50
|
+
expect(calls[0]).toEqual(['translate', [40, 80]]);
|
|
51
|
+
expect(calls[1][0]).toBe('rotate');
|
|
52
|
+
expect(calls[1][1][0]).toBeCloseTo(Math.PI / 2);
|
|
53
|
+
expect(calls[2]).toEqual(['scale', [2, 1]]);
|
|
54
|
+
});
|
|
55
|
+
test('captureStageArtboard crops the fitted artboard at native resolution', function () {
|
|
56
|
+
var stage = {
|
|
57
|
+
toDataURL: jest.fn(function () {
|
|
58
|
+
return 'data:image/png;artboard';
|
|
59
|
+
})
|
|
60
|
+
};
|
|
61
|
+
expect(captureStageArtboard(stage, {
|
|
62
|
+
x: 12,
|
|
63
|
+
y: 24,
|
|
64
|
+
scale: 0.5
|
|
65
|
+
}, {
|
|
66
|
+
width: 2000,
|
|
67
|
+
height: 800
|
|
68
|
+
})).toBe('data:image/png;artboard');
|
|
69
|
+
expect(stage.toDataURL).toHaveBeenCalledWith({
|
|
70
|
+
mimeType: 'image/png',
|
|
71
|
+
pixelRatio: 2,
|
|
72
|
+
x: 12,
|
|
73
|
+
y: 24,
|
|
74
|
+
width: 1000,
|
|
75
|
+
height: 400
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBseUtvbnZhT2JqZWN0VHJhbnNmb3JtIiwiY2FwdHVyZVN0YWdlQXJ0Ym9hcmQiLCJ0ZW1wbGF0ZUltYWdlU291cmNlcyIsIndyYXBMaW5lcyIsInRlc3QiLCJleHBlY3QiLCJmaWxlIiwiaWQiLCJ2aWV3VXJsIiwiY2FjaGVkVmlld1VybCIsInRvRXF1YWwiLCJ2YWx1ZSIsImxlbmd0aCIsImNhbGxzIiwiY3R4IiwidHJhbnNsYXRlIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJwdXNoIiwicm90YXRlIiwiX2xlbjIiLCJfa2V5MiIsInNjYWxlIiwiX2xlbjMiLCJfa2V5MyIsIngiLCJ5Iiwicm90YXRpb24iLCJzY2FsZVgiLCJzY2FsZVkiLCJ0b0JlIiwidG9CZUNsb3NlVG8iLCJNYXRoIiwiUEkiLCJzdGFnZSIsInRvRGF0YVVSTCIsImplc3QiLCJmbiIsIndpZHRoIiwiaGVpZ2h0IiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJtaW1lVHlwZSIsInBpeGVsUmF0aW8iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZHJhZnRFeHBvcnQudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhcHBseUtvbnZhT2JqZWN0VHJhbnNmb3JtLFxuICBjYXB0dXJlU3RhZ2VBcnRib2FyZCxcbiAgdGVtcGxhdGVJbWFnZVNvdXJjZXMsXG4gIHdyYXBMaW5lcyxcbn0gZnJvbSAnLi9kcmFmdEV4cG9ydCc7XG5cbnRlc3QoJ3RlbXBsYXRlSW1hZ2VTb3VyY2VzIHByZWZlcnMgdGhlIHB1YmxpYyBmaWxlIHZpZXcgYW5kIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMnLCAoKSA9PiB7XG4gIGV4cGVjdCh0ZW1wbGF0ZUltYWdlU291cmNlcyh7XG4gICAgZmlsZToge1xuICAgICAgaWQ6IDQ0LFxuICAgICAgdmlld1VybDogJy90ZXN0ZmlsZXMvYWJjLycsXG4gICAgICBjYWNoZWRWaWV3VXJsOiAnaHR0cHM6Ly9jZG4uZXhhbXBsZS90ZW1wbGF0ZS5wbmcnLFxuICAgIH0sXG4gIH0sICdodHRwOi8vMTI3LjAuMC4xOjUwMDAvdjYvJykpLnRvRXF1YWwoW1xuICAgICdodHRwOi8vMTI3LjAuMC4xOjUwMDAvdjYvcHVibGljLWZpbGVzLzQ0L3ZpZXcvJyxcbiAgICAnaHR0cDovLzEyNy4wLjAuMTo1MDAwL3Rlc3RmaWxlcy9hYmMvJyxcbiAgICAnaHR0cHM6Ly9jZG4uZXhhbXBsZS90ZW1wbGF0ZS5wbmcnLFxuICBdKTtcbn0pO1xuXG50ZXN0KCd3cmFwTGluZXMga2VlcHMgYSBzaG9ydCBwaHJhc2Ugb24gb25lIGxpbmUnLCAoKSA9PiB7XG4gIGV4cGVjdCh3cmFwTGluZXMoJ0phbWVzIHdhcyBoZXJlJywgNDAwLCAodmFsdWUpID0+IHZhbHVlLmxlbmd0aCAqIDEwKSkudG9FcXVhbChbXG4gICAgJ0phbWVzIHdhcyBoZXJlJyxcbiAgXSk7XG59KTtcblxudGVzdCgnd3JhcExpbmVzIGJyZWFrcyBvbiB3b3JkIGJvdW5kYXJpZXMgbGlrZSB0aGUgZGVzaWduZXIgY2FudmFzJywgKCkgPT4ge1xuICBleHBlY3Qod3JhcExpbmVzKCdKYW1lcyB3YXMgaGVyZScsIDgwLCAodmFsdWUpID0+IHZhbHVlLmxlbmd0aCAqIDEwKSkudG9FcXVhbChbXG4gICAgJ0phbWVzJyxcbiAgICAnd2FzIGhlcmUnLFxuICBdKTtcbn0pO1xuXG50ZXN0KCdhcHBseUtvbnZhT2JqZWN0VHJhbnNmb3JtIHVzZXMgdGhlIHRvcC1sZWZ0IG9yaWdpbiBsaWtlIEtvbnZhJywgKCkgPT4ge1xuICBjb25zdCBjYWxsczogQXJyYXk8W3N0cmluZywgbnVtYmVyW11dPiA9IFtdO1xuICBjb25zdCBjdHggPSB7XG4gICAgdHJhbnNsYXRlOiAoLi4uYXJnczogbnVtYmVyW10pID0+IGNhbGxzLnB1c2goWyd0cmFuc2xhdGUnLCBhcmdzXSksXG4gICAgcm90YXRlOiAoLi4uYXJnczogbnVtYmVyW10pID0+IGNhbGxzLnB1c2goWydyb3RhdGUnLCBhcmdzXSksXG4gICAgc2NhbGU6ICguLi5hcmdzOiBudW1iZXJbXSkgPT4gY2FsbHMucHVzaChbJ3NjYWxlJywgYXJnc10pLFxuICB9O1xuICBhcHBseUtvbnZhT2JqZWN0VHJhbnNmb3JtKGN0eCwge1xuICAgIHg6IDQwLFxuICAgIHk6IDgwLFxuICAgIHJvdGF0aW9uOiA5MCxcbiAgICBzY2FsZVg6IDIsXG4gICAgc2NhbGVZOiAxLFxuICB9KTtcbiAgZXhwZWN0KGNhbGxzWzBdKS50b0VxdWFsKFsndHJhbnNsYXRlJywgWzQwLCA4MF1dKTtcbiAgZXhwZWN0KGNhbGxzWzFdWzBdKS50b0JlKCdyb3RhdGUnKTtcbiAgZXhwZWN0KGNhbGxzWzFdWzFdWzBdKS50b0JlQ2xvc2VUbyhNYXRoLlBJIC8gMik7XG4gIGV4cGVjdChjYWxsc1syXSkudG9FcXVhbChbJ3NjYWxlJywgWzIsIDFdXSk7XG59KTtcblxudGVzdCgnY2FwdHVyZVN0YWdlQXJ0Ym9hcmQgY3JvcHMgdGhlIGZpdHRlZCBhcnRib2FyZCBhdCBuYXRpdmUgcmVzb2x1dGlvbicsICgpID0+IHtcbiAgY29uc3Qgc3RhZ2UgPSB7XG4gICAgdG9EYXRhVVJMOiBqZXN0LmZuKCgpID0+ICdkYXRhOmltYWdlL3BuZzthcnRib2FyZCcpLFxuICB9O1xuICBleHBlY3QoY2FwdHVyZVN0YWdlQXJ0Ym9hcmQoXG4gICAgc3RhZ2UsXG4gICAgeyB4OiAxMiwgeTogMjQsIHNjYWxlOiAwLjUgfSxcbiAgICB7IHdpZHRoOiAyMDAwLCBoZWlnaHQ6IDgwMCB9LFxuICApKS50b0JlKCdkYXRhOmltYWdlL3BuZzthcnRib2FyZCcpO1xuICBleHBlY3Qoc3RhZ2UudG9EYXRhVVJMKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgbWltZVR5cGU6ICdpbWFnZS9wbmcnLFxuICAgIHBpeGVsUmF0aW86IDIsXG4gICAgeDogMTIsXG4gICAgeTogMjQsXG4gICAgd2lkdGg6IDEwMDAsXG4gICAgaGVpZ2h0OiA0MDAsXG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQ0VBLHlCQUF5QixFQUN6QkMsb0JBQW9CLEVBQ3BCQyxvQkFBb0IsRUFDcEJDLFNBQVMsUUFDSixlQUFlO0FBRXRCQyxJQUFJLENBQUMsOEVBQThFLEVBQUUsWUFBTTtFQUN6RkMsTUFBTSxDQUFDSCxvQkFBb0IsQ0FBQztJQUMxQkksSUFBSSxFQUFFO01BQ0pDLEVBQUUsRUFBRSxFQUFFO01BQ05DLE9BQU8sRUFBRSxpQkFBaUI7TUFDMUJDLGFBQWEsRUFBRTtJQUNqQjtFQUNGLENBQUMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUN2QyxnREFBZ0QsRUFDaEQsc0NBQXNDLEVBQ3RDLGtDQUFrQyxDQUNuQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUZOLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxZQUFNO0VBQ3ZEQyxNQUFNLENBQUNGLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsVUFBQ1EsS0FBSztJQUFBLE9BQUtBLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLEVBQUU7RUFBQSxFQUFDLENBQUMsQ0FBQ0YsT0FBTyxDQUFDLENBQzdFLGdCQUFnQixDQUNqQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUZOLElBQUksQ0FBQyw4REFBOEQsRUFBRSxZQUFNO0VBQ3pFQyxNQUFNLENBQUNGLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsVUFBQ1EsS0FBSztJQUFBLE9BQUtBLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLEVBQUU7RUFBQSxFQUFDLENBQUMsQ0FBQ0YsT0FBTyxDQUFDLENBQzVFLE9BQU8sRUFDUCxVQUFVLENBQ1gsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGTixJQUFJLENBQUMsK0RBQStELEVBQUUsWUFBTTtFQUMxRSxJQUFNUyxLQUFnQyxHQUFHLEVBQUU7RUFDM0MsSUFBTUMsR0FBRyxHQUFHO0lBQ1ZDLFNBQVMsRUFBRSxTQUFYQSxTQUFTQSxDQUFBO01BQUEsU0FBQUMsSUFBQSxHQUFBQyxTQUFBLENBQUFMLE1BQUEsRUFBTU0sSUFBSSxPQUFBQyxLQUFBLENBQUFILElBQUEsR0FBQUksSUFBQSxNQUFBQSxJQUFBLEdBQUFKLElBQUEsRUFBQUksSUFBQTtRQUFKRixJQUFJLENBQUFFLElBQUEsSUFBQUgsU0FBQSxDQUFBRyxJQUFBO01BQUE7TUFBQSxPQUFlUCxLQUFLLENBQUNRLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRUgsSUFBSSxDQUFDLENBQUM7SUFBQTtJQUNqRUksTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUE7TUFBQSxTQUFBQyxLQUFBLEdBQUFOLFNBQUEsQ0FBQUwsTUFBQSxFQUFNTSxJQUFJLE9BQUFDLEtBQUEsQ0FBQUksS0FBQSxHQUFBQyxLQUFBLE1BQUFBLEtBQUEsR0FBQUQsS0FBQSxFQUFBQyxLQUFBO1FBQUpOLElBQUksQ0FBQU0sS0FBQSxJQUFBUCxTQUFBLENBQUFPLEtBQUE7TUFBQTtNQUFBLE9BQWVYLEtBQUssQ0FBQ1EsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFSCxJQUFJLENBQUMsQ0FBQztJQUFBO0lBQzNETyxLQUFLLEVBQUUsU0FBUEEsS0FBS0EsQ0FBQTtNQUFBLFNBQUFDLEtBQUEsR0FBQVQsU0FBQSxDQUFBTCxNQUFBLEVBQU1NLElBQUksT0FBQUMsS0FBQSxDQUFBTyxLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7UUFBSlQsSUFBSSxDQUFBUyxLQUFBLElBQUFWLFNBQUEsQ0FBQVUsS0FBQTtNQUFBO01BQUEsT0FBZWQsS0FBSyxDQUFDUSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUVILElBQUksQ0FBQyxDQUFDO0lBQUE7RUFDM0QsQ0FBQztFQUNEbEIseUJBQXlCLENBQUNjLEdBQUcsRUFBRTtJQUM3QmMsQ0FBQyxFQUFFLEVBQUU7SUFDTEMsQ0FBQyxFQUFFLEVBQUU7SUFDTEMsUUFBUSxFQUFFLEVBQUU7SUFDWkMsTUFBTSxFQUFFLENBQUM7SUFDVEMsTUFBTSxFQUFFO0VBQ1YsQ0FBQyxDQUFDO0VBQ0YzQixNQUFNLENBQUNRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDSCxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNqREwsTUFBTSxDQUFDUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ29CLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDbEM1QixNQUFNLENBQUNRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcUIsV0FBVyxDQUFDQyxJQUFJLENBQUNDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDL0MvQixNQUFNLENBQUNRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDSCxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRk4sSUFBSSxDQUFDLHFFQUFxRSxFQUFFLFlBQU07RUFDaEYsSUFBTWlDLEtBQUssR0FBRztJQUNaQyxTQUFTLEVBQUVDLElBQUksQ0FBQ0MsRUFBRSxDQUFDO01BQUEsT0FBTSx5QkFBeUI7SUFBQTtFQUNwRCxDQUFDO0VBQ0RuQyxNQUFNLENBQUNKLG9CQUFvQixDQUN6Qm9DLEtBQUssRUFDTDtJQUFFVCxDQUFDLEVBQUUsRUFBRTtJQUFFQyxDQUFDLEVBQUUsRUFBRTtJQUFFSixLQUFLLEVBQUU7RUFBSSxDQUFDLEVBQzVCO0lBQUVnQixLQUFLLEVBQUUsSUFBSTtJQUFFQyxNQUFNLEVBQUU7RUFBSSxDQUM3QixDQUFDLENBQUMsQ0FBQ1QsSUFBSSxDQUFDLHlCQUF5QixDQUFDO0VBQ2xDNUIsTUFBTSxDQUFDZ0MsS0FBSyxDQUFDQyxTQUFTLENBQUMsQ0FBQ0ssb0JBQW9CLENBQUM7SUFDM0NDLFFBQVEsRUFBRSxXQUFXO0lBQ3JCQyxVQUFVLEVBQUUsQ0FBQztJQUNiakIsQ0FBQyxFQUFFLEVBQUU7SUFDTEMsQ0FBQyxFQUFFLEVBQUU7SUFDTFksS0FBSyxFQUFFLElBQUk7SUFDWEMsTUFBTSxFQUFFO0VBQ1YsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export declare const DEFAULT_DRAFT_FONT = "Inter";
|
|
2
|
+
export declare const DRAFT_TEXT_FONTS: readonly [{
|
|
3
|
+
readonly value: "Inter";
|
|
4
|
+
readonly label: "Inter";
|
|
5
|
+
}, {
|
|
6
|
+
readonly value: "Roboto";
|
|
7
|
+
readonly label: "Roboto";
|
|
8
|
+
}, {
|
|
9
|
+
readonly value: "Montserrat";
|
|
10
|
+
readonly label: "Montserrat";
|
|
11
|
+
}, {
|
|
12
|
+
readonly value: "Poppins";
|
|
13
|
+
readonly label: "Poppins";
|
|
14
|
+
}, {
|
|
15
|
+
readonly value: "Oswald";
|
|
16
|
+
readonly label: "Oswald";
|
|
17
|
+
}, {
|
|
18
|
+
readonly value: "Bebas Neue";
|
|
19
|
+
readonly label: "Bebas Neue";
|
|
20
|
+
}, {
|
|
21
|
+
readonly value: "Anton";
|
|
22
|
+
readonly label: "Anton";
|
|
23
|
+
}, {
|
|
24
|
+
readonly value: "Arial";
|
|
25
|
+
readonly label: "Arial";
|
|
26
|
+
}, {
|
|
27
|
+
readonly value: "Impact";
|
|
28
|
+
readonly label: "Impact";
|
|
29
|
+
}, {
|
|
30
|
+
readonly value: "Georgia";
|
|
31
|
+
readonly label: "Georgia";
|
|
32
|
+
}, {
|
|
33
|
+
readonly value: "Times New Roman";
|
|
34
|
+
readonly label: "Times New Roman";
|
|
35
|
+
}, {
|
|
36
|
+
readonly value: "Playfair Display";
|
|
37
|
+
readonly label: "Playfair Display";
|
|
38
|
+
}, {
|
|
39
|
+
readonly value: "Merriweather";
|
|
40
|
+
readonly label: "Merriweather";
|
|
41
|
+
}, {
|
|
42
|
+
readonly value: "Pacifico";
|
|
43
|
+
readonly label: "Pacifico";
|
|
44
|
+
}, {
|
|
45
|
+
readonly value: "Dancing Script";
|
|
46
|
+
readonly label: "Dancing Script";
|
|
47
|
+
}, {
|
|
48
|
+
readonly value: "Permanent Marker";
|
|
49
|
+
readonly label: "Permanent Marker";
|
|
50
|
+
}, {
|
|
51
|
+
readonly value: "Courier New";
|
|
52
|
+
readonly label: "Courier New";
|
|
53
|
+
}];
|
|
54
|
+
export declare function cssFontFamily(family?: string): string;
|
|
55
|
+
export declare function ensureDraftFonts(): void;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export var DEFAULT_DRAFT_FONT = 'Inter';
|
|
2
|
+
export var DRAFT_TEXT_FONTS = [{
|
|
3
|
+
value: 'Inter',
|
|
4
|
+
label: 'Inter'
|
|
5
|
+
}, {
|
|
6
|
+
value: 'Roboto',
|
|
7
|
+
label: 'Roboto'
|
|
8
|
+
}, {
|
|
9
|
+
value: 'Montserrat',
|
|
10
|
+
label: 'Montserrat'
|
|
11
|
+
}, {
|
|
12
|
+
value: 'Poppins',
|
|
13
|
+
label: 'Poppins'
|
|
14
|
+
}, {
|
|
15
|
+
value: 'Oswald',
|
|
16
|
+
label: 'Oswald'
|
|
17
|
+
}, {
|
|
18
|
+
value: 'Bebas Neue',
|
|
19
|
+
label: 'Bebas Neue'
|
|
20
|
+
}, {
|
|
21
|
+
value: 'Anton',
|
|
22
|
+
label: 'Anton'
|
|
23
|
+
}, {
|
|
24
|
+
value: 'Arial',
|
|
25
|
+
label: 'Arial'
|
|
26
|
+
}, {
|
|
27
|
+
value: 'Impact',
|
|
28
|
+
label: 'Impact'
|
|
29
|
+
}, {
|
|
30
|
+
value: 'Georgia',
|
|
31
|
+
label: 'Georgia'
|
|
32
|
+
}, {
|
|
33
|
+
value: 'Times New Roman',
|
|
34
|
+
label: 'Times New Roman'
|
|
35
|
+
}, {
|
|
36
|
+
value: 'Playfair Display',
|
|
37
|
+
label: 'Playfair Display'
|
|
38
|
+
}, {
|
|
39
|
+
value: 'Merriweather',
|
|
40
|
+
label: 'Merriweather'
|
|
41
|
+
}, {
|
|
42
|
+
value: 'Pacifico',
|
|
43
|
+
label: 'Pacifico'
|
|
44
|
+
}, {
|
|
45
|
+
value: 'Dancing Script',
|
|
46
|
+
label: 'Dancing Script'
|
|
47
|
+
}, {
|
|
48
|
+
value: 'Permanent Marker',
|
|
49
|
+
label: 'Permanent Marker'
|
|
50
|
+
}, {
|
|
51
|
+
value: 'Courier New',
|
|
52
|
+
label: 'Courier New'
|
|
53
|
+
}];
|
|
54
|
+
var GOOGLE_FONTS_HREF = ['https://fonts.googleapis.com/css2', '?family=Anton', '&family=Bebas+Neue', '&family=Dancing+Script:wght@500;700', '&family=Inter:wght@400;700', '&family=Merriweather:wght@400;700', '&family=Montserrat:wght@400;700', '&family=Oswald:wght@400;600', '&family=Pacifico', '&family=Permanent+Marker', '&family=Playfair+Display:wght@400;700', '&family=Poppins:wght@400;700', '&family=Roboto:wght@400;700', '&display=swap'].join('');
|
|
55
|
+
export function cssFontFamily(family) {
|
|
56
|
+
var name = family || DEFAULT_DRAFT_FONT;
|
|
57
|
+
return /\s/.test(name) ? "\"".concat(name, "\"") : name;
|
|
58
|
+
}
|
|
59
|
+
export function ensureDraftFonts() {
|
|
60
|
+
if (typeof document === 'undefined') return;
|
|
61
|
+
if (document.getElementById('merchi-draft-fonts')) return;
|
|
62
|
+
var link = document.createElement('link');
|
|
63
|
+
link.id = 'merchi-draft-fonts';
|
|
64
|
+
link.rel = 'stylesheet';
|
|
65
|
+
link.href = GOOGLE_FONTS_HREF;
|
|
66
|
+
document.head.appendChild(link);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX0RSQUZUX0ZPTlQiLCJEUkFGVF9URVhUX0ZPTlRTIiwidmFsdWUiLCJsYWJlbCIsIkdPT0dMRV9GT05UU19IUkVGIiwiam9pbiIsImNzc0ZvbnRGYW1pbHkiLCJmYW1pbHkiLCJuYW1lIiwidGVzdCIsImNvbmNhdCIsImVuc3VyZURyYWZ0Rm9udHMiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwibGluayIsImNyZWF0ZUVsZW1lbnQiLCJpZCIsInJlbCIsImhyZWYiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZHJhZnRGb250cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgREVGQVVMVF9EUkFGVF9GT05UID0gJ0ludGVyJztcblxuZXhwb3J0IGNvbnN0IERSQUZUX1RFWFRfRk9OVFMgPSBbXG4gIHsgdmFsdWU6ICdJbnRlcicsIGxhYmVsOiAnSW50ZXInIH0sXG4gIHsgdmFsdWU6ICdSb2JvdG8nLCBsYWJlbDogJ1JvYm90bycgfSxcbiAgeyB2YWx1ZTogJ01vbnRzZXJyYXQnLCBsYWJlbDogJ01vbnRzZXJyYXQnIH0sXG4gIHsgdmFsdWU6ICdQb3BwaW5zJywgbGFiZWw6ICdQb3BwaW5zJyB9LFxuICB7IHZhbHVlOiAnT3N3YWxkJywgbGFiZWw6ICdPc3dhbGQnIH0sXG4gIHsgdmFsdWU6ICdCZWJhcyBOZXVlJywgbGFiZWw6ICdCZWJhcyBOZXVlJyB9LFxuICB7IHZhbHVlOiAnQW50b24nLCBsYWJlbDogJ0FudG9uJyB9LFxuICB7IHZhbHVlOiAnQXJpYWwnLCBsYWJlbDogJ0FyaWFsJyB9LFxuICB7IHZhbHVlOiAnSW1wYWN0JywgbGFiZWw6ICdJbXBhY3QnIH0sXG4gIHsgdmFsdWU6ICdHZW9yZ2lhJywgbGFiZWw6ICdHZW9yZ2lhJyB9LFxuICB7IHZhbHVlOiAnVGltZXMgTmV3IFJvbWFuJywgbGFiZWw6ICdUaW1lcyBOZXcgUm9tYW4nIH0sXG4gIHsgdmFsdWU6ICdQbGF5ZmFpciBEaXNwbGF5JywgbGFiZWw6ICdQbGF5ZmFpciBEaXNwbGF5JyB9LFxuICB7IHZhbHVlOiAnTWVycml3ZWF0aGVyJywgbGFiZWw6ICdNZXJyaXdlYXRoZXInIH0sXG4gIHsgdmFsdWU6ICdQYWNpZmljbycsIGxhYmVsOiAnUGFjaWZpY28nIH0sXG4gIHsgdmFsdWU6ICdEYW5jaW5nIFNjcmlwdCcsIGxhYmVsOiAnRGFuY2luZyBTY3JpcHQnIH0sXG4gIHsgdmFsdWU6ICdQZXJtYW5lbnQgTWFya2VyJywgbGFiZWw6ICdQZXJtYW5lbnQgTWFya2VyJyB9LFxuICB7IHZhbHVlOiAnQ291cmllciBOZXcnLCBsYWJlbDogJ0NvdXJpZXIgTmV3JyB9LFxuXSBhcyBjb25zdDtcblxuY29uc3QgR09PR0xFX0ZPTlRTX0hSRUYgPSBbXG4gICdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczInLFxuICAnP2ZhbWlseT1BbnRvbicsXG4gICcmZmFtaWx5PUJlYmFzK05ldWUnLFxuICAnJmZhbWlseT1EYW5jaW5nK1NjcmlwdDp3Z2h0QDUwMDs3MDAnLFxuICAnJmZhbWlseT1JbnRlcjp3Z2h0QDQwMDs3MDAnLFxuICAnJmZhbWlseT1NZXJyaXdlYXRoZXI6d2dodEA0MDA7NzAwJyxcbiAgJyZmYW1pbHk9TW9udHNlcnJhdDp3Z2h0QDQwMDs3MDAnLFxuICAnJmZhbWlseT1Pc3dhbGQ6d2dodEA0MDA7NjAwJyxcbiAgJyZmYW1pbHk9UGFjaWZpY28nLFxuICAnJmZhbWlseT1QZXJtYW5lbnQrTWFya2VyJyxcbiAgJyZmYW1pbHk9UGxheWZhaXIrRGlzcGxheTp3Z2h0QDQwMDs3MDAnLFxuICAnJmZhbWlseT1Qb3BwaW5zOndnaHRANDAwOzcwMCcsXG4gICcmZmFtaWx5PVJvYm90bzp3Z2h0QDQwMDs3MDAnLFxuICAnJmRpc3BsYXk9c3dhcCcsXG5dLmpvaW4oJycpO1xuXG5leHBvcnQgZnVuY3Rpb24gY3NzRm9udEZhbWlseShmYW1pbHk/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBuYW1lID0gZmFtaWx5IHx8IERFRkFVTFRfRFJBRlRfRk9OVDtcbiAgcmV0dXJuIC9cXHMvLnRlc3QobmFtZSkgPyBgXCIke25hbWV9XCJgIDogbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZURyYWZ0Rm9udHMoKTogdm9pZCB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVyY2hpLWRyYWZ0LWZvbnRzJykpIHJldHVybjtcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgbGluay5pZCA9ICdtZXJjaGktZHJhZnQtZm9udHMnO1xuICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgbGluay5ocmVmID0gR09PR0xFX0ZPTlRTX0hSRUY7XG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBTUEsa0JBQWtCLEdBQUcsT0FBTztBQUV6QyxPQUFPLElBQU1DLGdCQUFnQixHQUFHLENBQzlCO0VBQUVDLEtBQUssRUFBRSxPQUFPO0VBQUVDLEtBQUssRUFBRTtBQUFRLENBQUMsRUFDbEM7RUFBRUQsS0FBSyxFQUFFLFFBQVE7RUFBRUMsS0FBSyxFQUFFO0FBQVMsQ0FBQyxFQUNwQztFQUFFRCxLQUFLLEVBQUUsWUFBWTtFQUFFQyxLQUFLLEVBQUU7QUFBYSxDQUFDLEVBQzVDO0VBQUVELEtBQUssRUFBRSxTQUFTO0VBQUVDLEtBQUssRUFBRTtBQUFVLENBQUMsRUFDdEM7RUFBRUQsS0FBSyxFQUFFLFFBQVE7RUFBRUMsS0FBSyxFQUFFO0FBQVMsQ0FBQyxFQUNwQztFQUFFRCxLQUFLLEVBQUUsWUFBWTtFQUFFQyxLQUFLLEVBQUU7QUFBYSxDQUFDLEVBQzVDO0VBQUVELEtBQUssRUFBRSxPQUFPO0VBQUVDLEtBQUssRUFBRTtBQUFRLENBQUMsRUFDbEM7RUFBRUQsS0FBSyxFQUFFLE9BQU87RUFBRUMsS0FBSyxFQUFFO0FBQVEsQ0FBQyxFQUNsQztFQUFFRCxLQUFLLEVBQUUsUUFBUTtFQUFFQyxLQUFLLEVBQUU7QUFBUyxDQUFDLEVBQ3BDO0VBQUVELEtBQUssRUFBRSxTQUFTO0VBQUVDLEtBQUssRUFBRTtBQUFVLENBQUMsRUFDdEM7RUFBRUQsS0FBSyxFQUFFLGlCQUFpQjtFQUFFQyxLQUFLLEVBQUU7QUFBa0IsQ0FBQyxFQUN0RDtFQUFFRCxLQUFLLEVBQUUsa0JBQWtCO0VBQUVDLEtBQUssRUFBRTtBQUFtQixDQUFDLEVBQ3hEO0VBQUVELEtBQUssRUFBRSxjQUFjO0VBQUVDLEtBQUssRUFBRTtBQUFlLENBQUMsRUFDaEQ7RUFBRUQsS0FBSyxFQUFFLFVBQVU7RUFBRUMsS0FBSyxFQUFFO0FBQVcsQ0FBQyxFQUN4QztFQUFFRCxLQUFLLEVBQUUsZ0JBQWdCO0VBQUVDLEtBQUssRUFBRTtBQUFpQixDQUFDLEVBQ3BEO0VBQUVELEtBQUssRUFBRSxrQkFBa0I7RUFBRUMsS0FBSyxFQUFFO0FBQW1CLENBQUMsRUFDeEQ7RUFBRUQsS0FBSyxFQUFFLGFBQWE7RUFBRUMsS0FBSyxFQUFFO0FBQWMsQ0FBQyxDQUN0QztBQUVWLElBQU1DLGlCQUFpQixHQUFHLENBQ3hCLG1DQUFtQyxFQUNuQyxlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLHFDQUFxQyxFQUNyQyw0QkFBNEIsRUFDNUIsbUNBQW1DLEVBQ25DLGlDQUFpQyxFQUNqQyw2QkFBNkIsRUFDN0Isa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUMxQix1Q0FBdUMsRUFDdkMsOEJBQThCLEVBQzlCLDZCQUE2QixFQUM3QixlQUFlLENBQ2hCLENBQUNDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFFVixPQUFPLFNBQVNDLGFBQWFBLENBQUNDLE1BQWUsRUFBVTtFQUNyRCxJQUFNQyxJQUFJLEdBQUdELE1BQU0sSUFBSVAsa0JBQWtCO0VBQ3pDLE9BQU8sSUFBSSxDQUFDUyxJQUFJLENBQUNELElBQUksQ0FBQyxRQUFBRSxNQUFBLENBQU9GLElBQUksVUFBTUEsSUFBSTtBQUM3QztBQUVBLE9BQU8sU0FBU0csZ0JBQWdCQSxDQUFBLEVBQVM7RUFDdkMsSUFBSSxPQUFPQyxRQUFRLEtBQUssV0FBVyxFQUFFO0VBQ3JDLElBQUlBLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7RUFDbkQsSUFBTUMsSUFBSSxHQUFHRixRQUFRLENBQUNHLGFBQWEsQ0FBQyxNQUFNLENBQUM7RUFDM0NELElBQUksQ0FBQ0UsRUFBRSxHQUFHLG9CQUFvQjtFQUM5QkYsSUFBSSxDQUFDRyxHQUFHLEdBQUcsWUFBWTtFQUN2QkgsSUFBSSxDQUFDSSxJQUFJLEdBQUdkLGlCQUFpQjtFQUM3QlEsUUFBUSxDQUFDTyxJQUFJLENBQUNDLFdBQVcsQ0FBQ04sSUFBSSxDQUFDO0FBQ2pDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DraftTemplateData, RenderedDraftPreview } from './types';
|
|
2
|
+
export declare function draftStorageKey(productId: number | string): string;
|
|
3
|
+
export declare function loadDrafts(productId: number | string): DraftTemplateData[];
|
|
4
|
+
export declare function saveDrafts(productId: number | string, drafts: DraftTemplateData[]): void;
|
|
5
|
+
export declare function clearDrafts(productId: number | string): void;
|
|
6
|
+
export type ArtworkPath = 'self' | 'service';
|
|
7
|
+
export declare function artworkPathKey(productId: number | string): string;
|
|
8
|
+
export declare function loadArtworkPath(productId: number | string): ArtworkPath;
|
|
9
|
+
export declare function saveArtworkPath(productId: number | string, path: ArtworkPath): void;
|
|
10
|
+
export declare function pruneDrafts(drafts: DraftTemplateData[], groupCount: number): DraftTemplateData[];
|
|
11
|
+
export declare function savedPreview(drafts: DraftTemplateData[], groupIndex: number, templateId: number): RenderedDraftPreview | undefined;
|
|
12
|
+
export declare function isPreviewComplete(preview?: RenderedDraftPreview | null): boolean;
|
|
13
|
+
export declare function upsertGroupTemplateDraft(drafts: DraftTemplateData[], productId: number, groupIndex: number, preview: RenderedDraftPreview): DraftTemplateData[];
|
|
14
|
+
export declare function requiredDesignSlots(product: any, formValues: any): {
|
|
15
|
+
groupIndex: number;
|
|
16
|
+
template: any;
|
|
17
|
+
}[];
|
|
18
|
+
export declare function missingDesignSlots(product: any, formValues: any, drafts: DraftTemplateData[]): {
|
|
19
|
+
groupIndex: number;
|
|
20
|
+
template: any;
|
|
21
|
+
}[];
|
|
22
|
+
export declare function completeGroupCount(product: any, formValues: any, drafts: DraftTemplateData[]): {
|
|
23
|
+
complete: number;
|
|
24
|
+
total: number;
|
|
25
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
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 _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
3
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
4
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
5
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
6
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
7
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
8
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
9
|
+
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; }
|
|
10
|
+
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; }
|
|
11
|
+
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; }
|
|
12
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
13
|
+
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); }
|
|
14
|
+
import { designGroupCount, templatesForGroup } from './draftTemplates';
|
|
15
|
+
export function draftStorageKey(productId) {
|
|
16
|
+
return "productDraftTemplate-".concat(productId);
|
|
17
|
+
}
|
|
18
|
+
export function loadDrafts(productId) {
|
|
19
|
+
if (typeof window === 'undefined' || productId == null) return [];
|
|
20
|
+
try {
|
|
21
|
+
var raw = window.localStorage.getItem(draftStorageKey(productId));
|
|
22
|
+
if (!raw) return [];
|
|
23
|
+
var parsed = JSON.parse(raw);
|
|
24
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
25
|
+
} catch (_unused) {
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function saveDrafts(productId, drafts) {
|
|
30
|
+
if (typeof window === 'undefined' || productId == null) return;
|
|
31
|
+
window.localStorage.setItem(draftStorageKey(productId), JSON.stringify(drafts));
|
|
32
|
+
}
|
|
33
|
+
export function clearDrafts(productId) {
|
|
34
|
+
if (typeof window === 'undefined' || productId == null) return;
|
|
35
|
+
window.localStorage.removeItem(draftStorageKey(productId));
|
|
36
|
+
}
|
|
37
|
+
export function artworkPathKey(productId) {
|
|
38
|
+
return "productArtworkPath-".concat(productId);
|
|
39
|
+
}
|
|
40
|
+
export function loadArtworkPath(productId) {
|
|
41
|
+
if (typeof window === 'undefined' || productId == null) return 'self';
|
|
42
|
+
try {
|
|
43
|
+
return window.localStorage.getItem(artworkPathKey(productId)) === 'service' ? 'service' : 'self';
|
|
44
|
+
} catch (_unused2) {
|
|
45
|
+
return 'self';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export function saveArtworkPath(productId, path) {
|
|
49
|
+
if (typeof window === 'undefined' || productId == null) return;
|
|
50
|
+
window.localStorage.setItem(artworkPathKey(productId), path);
|
|
51
|
+
}
|
|
52
|
+
export function pruneDrafts(drafts, groupCount) {
|
|
53
|
+
return (drafts || []).filter(function (draft) {
|
|
54
|
+
return draft.groupIndex < groupCount;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export function savedPreview(drafts, groupIndex, templateId) {
|
|
58
|
+
var group = (drafts || []).find(function (draft) {
|
|
59
|
+
return draft.groupIndex === groupIndex;
|
|
60
|
+
});
|
|
61
|
+
return ((group === null || group === void 0 ? void 0 : group.templateData) || []).find(function (item) {
|
|
62
|
+
return item.templateId === templateId;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
export function isPreviewComplete(preview) {
|
|
66
|
+
return Boolean((preview === null || preview === void 0 ? void 0 : preview.draft) && (preview === null || preview === void 0 ? void 0 : preview.canvasPreview));
|
|
67
|
+
}
|
|
68
|
+
export function upsertGroupTemplateDraft(drafts, productId, groupIndex, preview) {
|
|
69
|
+
var next = (drafts || []).map(function (draft) {
|
|
70
|
+
return _objectSpread(_objectSpread({}, draft), {}, {
|
|
71
|
+
templateData: _toConsumableArray(draft.templateData || []),
|
|
72
|
+
previews: _toConsumableArray(draft.previews || [])
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
var group = next.find(function (draft) {
|
|
76
|
+
return draft.groupIndex === groupIndex;
|
|
77
|
+
});
|
|
78
|
+
if (!group) {
|
|
79
|
+
group = {
|
|
80
|
+
groupIndex: groupIndex,
|
|
81
|
+
productId: productId,
|
|
82
|
+
templateData: [],
|
|
83
|
+
previews: []
|
|
84
|
+
};
|
|
85
|
+
next.push(group);
|
|
86
|
+
}
|
|
87
|
+
var index = group.templateData.findIndex(function (item) {
|
|
88
|
+
return item.templateId === preview.templateId;
|
|
89
|
+
});
|
|
90
|
+
if (index >= 0) group.templateData[index] = preview;else group.templateData.push(preview);
|
|
91
|
+
return next;
|
|
92
|
+
}
|
|
93
|
+
export function requiredDesignSlots(product, formValues) {
|
|
94
|
+
var count = designGroupCount(product, formValues);
|
|
95
|
+
var independent = (formValues === null || formValues === void 0 ? void 0 : formValues.variations) || [];
|
|
96
|
+
var groups = (formValues === null || formValues === void 0 ? void 0 : formValues.variationsGroups) || [];
|
|
97
|
+
var slots = [];
|
|
98
|
+
for (var groupIndex = 0; groupIndex < count; groupIndex += 1) {
|
|
99
|
+
var _groups$groupIndex;
|
|
100
|
+
var groupVars = ((_groups$groupIndex = groups[groupIndex]) === null || _groups$groupIndex === void 0 ? void 0 : _groups$groupIndex.variations) || [];
|
|
101
|
+
var _iterator = _createForOfIteratorHelper(templatesForGroup(product, independent, groupVars)),
|
|
102
|
+
_step;
|
|
103
|
+
try {
|
|
104
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
105
|
+
var template = _step.value;
|
|
106
|
+
slots.push({
|
|
107
|
+
groupIndex: groupIndex,
|
|
108
|
+
template: template
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
} catch (err) {
|
|
112
|
+
_iterator.e(err);
|
|
113
|
+
} finally {
|
|
114
|
+
_iterator.f();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return slots;
|
|
118
|
+
}
|
|
119
|
+
export function missingDesignSlots(product, formValues, drafts) {
|
|
120
|
+
var pruned = pruneDrafts(drafts, designGroupCount(product, formValues));
|
|
121
|
+
return requiredDesignSlots(product, formValues).filter(function (_ref) {
|
|
122
|
+
var groupIndex = _ref.groupIndex,
|
|
123
|
+
template = _ref.template;
|
|
124
|
+
return !isPreviewComplete(savedPreview(pruned, groupIndex, template.id));
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
export function completeGroupCount(product, formValues, drafts) {
|
|
128
|
+
var count = designGroupCount(product, formValues);
|
|
129
|
+
var independent = (formValues === null || formValues === void 0 ? void 0 : formValues.variations) || [];
|
|
130
|
+
var groups = (formValues === null || formValues === void 0 ? void 0 : formValues.variationsGroups) || [];
|
|
131
|
+
var complete = 0;
|
|
132
|
+
var _loop = function _loop(groupIndex) {
|
|
133
|
+
var _groups$groupIndex2;
|
|
134
|
+
var templates = templatesForGroup(product, independent, ((_groups$groupIndex2 = groups[groupIndex]) === null || _groups$groupIndex2 === void 0 ? void 0 : _groups$groupIndex2.variations) || []);
|
|
135
|
+
var allSaved = templates.every(function (template) {
|
|
136
|
+
return isPreviewComplete(savedPreview(drafts, groupIndex, template.id));
|
|
137
|
+
});
|
|
138
|
+
if (allSaved) complete += 1;
|
|
139
|
+
};
|
|
140
|
+
for (var groupIndex = 0; groupIndex < count; groupIndex += 1) {
|
|
141
|
+
_loop(groupIndex);
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
complete: complete,
|
|
145
|
+
total: count
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNpZ25Hcm91cENvdW50IiwidGVtcGxhdGVzRm9yR3JvdXAiLCJkcmFmdFN0b3JhZ2VLZXkiLCJwcm9kdWN0SWQiLCJjb25jYXQiLCJsb2FkRHJhZnRzIiwid2luZG93IiwicmF3IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInBhcnNlZCIsIkpTT04iLCJwYXJzZSIsIkFycmF5IiwiaXNBcnJheSIsIl91bnVzZWQiLCJzYXZlRHJhZnRzIiwiZHJhZnRzIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsImNsZWFyRHJhZnRzIiwicmVtb3ZlSXRlbSIsImFydHdvcmtQYXRoS2V5IiwibG9hZEFydHdvcmtQYXRoIiwiX3VudXNlZDIiLCJzYXZlQXJ0d29ya1BhdGgiLCJwYXRoIiwicHJ1bmVEcmFmdHMiLCJncm91cENvdW50IiwiZmlsdGVyIiwiZHJhZnQiLCJncm91cEluZGV4Iiwic2F2ZWRQcmV2aWV3IiwidGVtcGxhdGVJZCIsImdyb3VwIiwiZmluZCIsInRlbXBsYXRlRGF0YSIsIml0ZW0iLCJpc1ByZXZpZXdDb21wbGV0ZSIsInByZXZpZXciLCJCb29sZWFuIiwiY2FudmFzUHJldmlldyIsInVwc2VydEdyb3VwVGVtcGxhdGVEcmFmdCIsIm5leHQiLCJtYXAiLCJfb2JqZWN0U3ByZWFkIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwicHJldmlld3MiLCJwdXNoIiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJyZXF1aXJlZERlc2lnblNsb3RzIiwicHJvZHVjdCIsImZvcm1WYWx1ZXMiLCJjb3VudCIsImluZGVwZW5kZW50IiwidmFyaWF0aW9ucyIsImdyb3VwcyIsInZhcmlhdGlvbnNHcm91cHMiLCJzbG90cyIsIl9ncm91cHMkZ3JvdXBJbmRleCIsImdyb3VwVmFycyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJ0ZW1wbGF0ZSIsInZhbHVlIiwiZXJyIiwiZSIsImYiLCJtaXNzaW5nRGVzaWduU2xvdHMiLCJwcnVuZWQiLCJfcmVmIiwiaWQiLCJjb21wbGV0ZUdyb3VwQ291bnQiLCJjb21wbGV0ZSIsIl9sb29wIiwiX2dyb3VwcyRncm91cEluZGV4MiIsInRlbXBsYXRlcyIsImFsbFNhdmVkIiwiZXZlcnkiLCJ0b3RhbCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kcmFmdFN0b3JhZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRHJhZnRUZW1wbGF0ZURhdGEsXG4gIFJlbmRlcmVkRHJhZnRQcmV2aWV3LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIGRlc2lnbkdyb3VwQ291bnQsXG4gIHRlbXBsYXRlc0Zvckdyb3VwLFxufSBmcm9tICcuL2RyYWZ0VGVtcGxhdGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRyYWZ0U3RvcmFnZUtleShwcm9kdWN0SWQ6IG51bWJlciB8IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgcHJvZHVjdERyYWZ0VGVtcGxhdGUtJHtwcm9kdWN0SWR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWREcmFmdHMocHJvZHVjdElkOiBudW1iZXIgfCBzdHJpbmcpOiBEcmFmdFRlbXBsYXRlRGF0YVtdIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHByb2R1Y3RJZCA9PSBudWxsKSByZXR1cm4gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGRyYWZ0U3RvcmFnZUtleShwcm9kdWN0SWQpKTtcbiAgICBpZiAoIXJhdykgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXJzZWQpID8gcGFyc2VkIDogW107XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZURyYWZ0cyhcbiAgcHJvZHVjdElkOiBudW1iZXIgfCBzdHJpbmcsXG4gIGRyYWZ0czogRHJhZnRUZW1wbGF0ZURhdGFbXSxcbik6IHZvaWQge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvZHVjdElkID09IG51bGwpIHJldHVybjtcbiAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGRyYWZ0U3RvcmFnZUtleShwcm9kdWN0SWQpLCBKU09OLnN0cmluZ2lmeShkcmFmdHMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRHJhZnRzKHByb2R1Y3RJZDogbnVtYmVyIHwgc3RyaW5nKTogdm9pZCB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCBwcm9kdWN0SWQgPT0gbnVsbCkgcmV0dXJuO1xuICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZHJhZnRTdG9yYWdlS2V5KHByb2R1Y3RJZCkpO1xufVxuXG5leHBvcnQgdHlwZSBBcnR3b3JrUGF0aCA9ICdzZWxmJyB8ICdzZXJ2aWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFydHdvcmtQYXRoS2V5KHByb2R1Y3RJZDogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBwcm9kdWN0QXJ0d29ya1BhdGgtJHtwcm9kdWN0SWR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBcnR3b3JrUGF0aChwcm9kdWN0SWQ6IG51bWJlciB8IHN0cmluZyk6IEFydHdvcmtQYXRoIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHByb2R1Y3RJZCA9PSBudWxsKSByZXR1cm4gJ3NlbGYnO1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYXJ0d29ya1BhdGhLZXkocHJvZHVjdElkKSkgPT09ICdzZXJ2aWNlJ1xuICAgICAgPyAnc2VydmljZSdcbiAgICAgIDogJ3NlbGYnO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJ3NlbGYnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlQXJ0d29ya1BhdGgoXG4gIHByb2R1Y3RJZDogbnVtYmVyIHwgc3RyaW5nLFxuICBwYXRoOiBBcnR3b3JrUGF0aCxcbik6IHZvaWQge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvZHVjdElkID09IG51bGwpIHJldHVybjtcbiAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGFydHdvcmtQYXRoS2V5KHByb2R1Y3RJZCksIHBhdGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmVEcmFmdHMoXG4gIGRyYWZ0czogRHJhZnRUZW1wbGF0ZURhdGFbXSxcbiAgZ3JvdXBDb3VudDogbnVtYmVyLFxuKTogRHJhZnRUZW1wbGF0ZURhdGFbXSB7XG4gIHJldHVybiAoZHJhZnRzIHx8IFtdKS5maWx0ZXIoKGRyYWZ0KSA9PiBkcmFmdC5ncm91cEluZGV4IDwgZ3JvdXBDb3VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlZFByZXZpZXcoXG4gIGRyYWZ0czogRHJhZnRUZW1wbGF0ZURhdGFbXSxcbiAgZ3JvdXBJbmRleDogbnVtYmVyLFxuICB0ZW1wbGF0ZUlkOiBudW1iZXIsXG4pOiBSZW5kZXJlZERyYWZ0UHJldmlldyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGdyb3VwID0gKGRyYWZ0cyB8fCBbXSkuZmluZCgoZHJhZnQpID0+IGRyYWZ0Lmdyb3VwSW5kZXggPT09IGdyb3VwSW5kZXgpO1xuICByZXR1cm4gKGdyb3VwPy50ZW1wbGF0ZURhdGEgfHwgW10pLmZpbmQoXG4gICAgKGl0ZW0pID0+IGl0ZW0udGVtcGxhdGVJZCA9PT0gdGVtcGxhdGVJZFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcmV2aWV3Q29tcGxldGUocHJldmlldz86IFJlbmRlcmVkRHJhZnRQcmV2aWV3IHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihwcmV2aWV3Py5kcmFmdCAmJiBwcmV2aWV3Py5jYW52YXNQcmV2aWV3KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwc2VydEdyb3VwVGVtcGxhdGVEcmFmdChcbiAgZHJhZnRzOiBEcmFmdFRlbXBsYXRlRGF0YVtdLFxuICBwcm9kdWN0SWQ6IG51bWJlcixcbiAgZ3JvdXBJbmRleDogbnVtYmVyLFxuICBwcmV2aWV3OiBSZW5kZXJlZERyYWZ0UHJldmlldyxcbik6IERyYWZ0VGVtcGxhdGVEYXRhW10ge1xuICBjb25zdCBuZXh0ID0gKGRyYWZ0cyB8fCBbXSkubWFwKChkcmFmdCkgPT4gKHtcbiAgICAuLi5kcmFmdCxcbiAgICB0ZW1wbGF0ZURhdGE6IFsuLi4oZHJhZnQudGVtcGxhdGVEYXRhIHx8IFtdKV0sXG4gICAgcHJldmlld3M6IFsuLi4oZHJhZnQucHJldmlld3MgfHwgW10pXSxcbiAgfSkpO1xuICBsZXQgZ3JvdXAgPSBuZXh0LmZpbmQoKGRyYWZ0KSA9PiBkcmFmdC5ncm91cEluZGV4ID09PSBncm91cEluZGV4KTtcbiAgaWYgKCFncm91cCkge1xuICAgIGdyb3VwID0geyBncm91cEluZGV4LCBwcm9kdWN0SWQsIHRlbXBsYXRlRGF0YTogW10sIHByZXZpZXdzOiBbXSB9O1xuICAgIG5leHQucHVzaChncm91cCk7XG4gIH1cbiAgY29uc3QgaW5kZXggPSBncm91cC50ZW1wbGF0ZURhdGEuZmluZEluZGV4KFxuICAgIChpdGVtKSA9PiBpdGVtLnRlbXBsYXRlSWQgPT09IHByZXZpZXcudGVtcGxhdGVJZFxuICApO1xuICBpZiAoaW5kZXggPj0gMCkgZ3JvdXAudGVtcGxhdGVEYXRhW2luZGV4XSA9IHByZXZpZXc7XG4gIGVsc2UgZ3JvdXAudGVtcGxhdGVEYXRhLnB1c2gocHJldmlldyk7XG4gIHJldHVybiBuZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWREZXNpZ25TbG90cyhwcm9kdWN0OiBhbnksIGZvcm1WYWx1ZXM6IGFueSkge1xuICBjb25zdCBjb3VudCA9IGRlc2lnbkdyb3VwQ291bnQocHJvZHVjdCwgZm9ybVZhbHVlcyk7XG4gIGNvbnN0IGluZGVwZW5kZW50ID0gZm9ybVZhbHVlcz8udmFyaWF0aW9ucyB8fCBbXTtcbiAgY29uc3QgZ3JvdXBzID0gZm9ybVZhbHVlcz8udmFyaWF0aW9uc0dyb3VwcyB8fCBbXTtcbiAgY29uc3Qgc2xvdHM6IHsgZ3JvdXBJbmRleDogbnVtYmVyOyB0ZW1wbGF0ZTogYW55IH1bXSA9IFtdO1xuICBmb3IgKGxldCBncm91cEluZGV4ID0gMDsgZ3JvdXBJbmRleCA8IGNvdW50OyBncm91cEluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBncm91cFZhcnMgPSBncm91cHNbZ3JvdXBJbmRleF0/LnZhcmlhdGlvbnMgfHwgW107XG4gICAgZm9yIChjb25zdCB0ZW1wbGF0ZSBvZiB0ZW1wbGF0ZXNGb3JHcm91cChwcm9kdWN0LCBpbmRlcGVuZGVudCwgZ3JvdXBWYXJzKSkge1xuICAgICAgc2xvdHMucHVzaCh7IGdyb3VwSW5kZXgsIHRlbXBsYXRlIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2xvdHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaXNzaW5nRGVzaWduU2xvdHMoXG4gIHByb2R1Y3Q6IGFueSxcbiAgZm9ybVZhbHVlczogYW55LFxuICBkcmFmdHM6IERyYWZ0VGVtcGxhdGVEYXRhW10sXG4pIHtcbiAgY29uc3QgcHJ1bmVkID0gcHJ1bmVEcmFmdHMoZHJhZnRzLCBkZXNpZ25Hcm91cENvdW50KHByb2R1Y3QsIGZvcm1WYWx1ZXMpKTtcbiAgcmV0dXJuIHJlcXVpcmVkRGVzaWduU2xvdHMocHJvZHVjdCwgZm9ybVZhbHVlcykuZmlsdGVyKFxuICAgICh7IGdyb3VwSW5kZXgsIHRlbXBsYXRlIH0pID0+XG4gICAgICAhaXNQcmV2aWV3Q29tcGxldGUoc2F2ZWRQcmV2aWV3KHBydW5lZCwgZ3JvdXBJbmRleCwgdGVtcGxhdGUuaWQpKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGxldGVHcm91cENvdW50KHByb2R1Y3Q6IGFueSwgZm9ybVZhbHVlczogYW55LCBkcmFmdHM6IERyYWZ0VGVtcGxhdGVEYXRhW10pIHtcbiAgY29uc3QgY291bnQgPSBkZXNpZ25Hcm91cENvdW50KHByb2R1Y3QsIGZvcm1WYWx1ZXMpO1xuICBjb25zdCBpbmRlcGVuZGVudCA9IGZvcm1WYWx1ZXM/LnZhcmlhdGlvbnMgfHwgW107XG4gIGNvbnN0IGdyb3VwcyA9IGZvcm1WYWx1ZXM/LnZhcmlhdGlvbnNHcm91cHMgfHwgW107XG4gIGxldCBjb21wbGV0ZSA9IDA7XG4gIGZvciAobGV0IGdyb3VwSW5kZXggPSAwOyBncm91cEluZGV4IDwgY291bnQ7IGdyb3VwSW5kZXggKz0gMSkge1xuICAgIGNvbnN0IHRlbXBsYXRlcyA9IHRlbXBsYXRlc0Zvckdyb3VwKFxuICAgICAgcHJvZHVjdCxcbiAgICAgIGluZGVwZW5kZW50LFxuICAgICAgZ3JvdXBzW2dyb3VwSW5kZXhdPy52YXJpYXRpb25zIHx8IFtdLFxuICAgICk7XG4gICAgY29uc3QgYWxsU2F2ZWQgPSB0ZW1wbGF0ZXMuZXZlcnkoKHRlbXBsYXRlOiBhbnkpID0+XG4gICAgICBpc1ByZXZpZXdDb21wbGV0ZShzYXZlZFByZXZpZXcoZHJhZnRzLCBncm91cEluZGV4LCB0ZW1wbGF0ZS5pZCkpXG4gICAgKTtcbiAgICBpZiAoYWxsU2F2ZWQpIGNvbXBsZXRlICs9IDE7XG4gIH1cbiAgcmV0dXJuIHsgY29tcGxldGUsIHRvdGFsOiBjb3VudCB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBSUEsU0FDRUEsZ0JBQWdCLEVBQ2hCQyxpQkFBaUIsUUFDWixrQkFBa0I7QUFFekIsT0FBTyxTQUFTQyxlQUFlQSxDQUFDQyxTQUEwQixFQUFVO0VBQ2xFLCtCQUFBQyxNQUFBLENBQStCRCxTQUFTO0FBQzFDO0FBRUEsT0FBTyxTQUFTRSxVQUFVQSxDQUFDRixTQUEwQixFQUF1QjtFQUMxRSxJQUFJLE9BQU9HLE1BQU0sS0FBSyxXQUFXLElBQUlILFNBQVMsSUFBSSxJQUFJLEVBQUUsT0FBTyxFQUFFO0VBQ2pFLElBQUk7SUFDRixJQUFN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
|
|
@@ -0,0 +1,125 @@
|
|
|
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 { artworkPathKey, clearDrafts, completeGroupCount, draftStorageKey, isPreviewComplete, loadArtworkPath, loadDrafts, missingDesignSlots, pruneDrafts, requiredDesignSlots, savedPreview, saveArtworkPath, saveDrafts, upsertGroupTemplateDraft } from './draftStorage';
|
|
8
|
+
import { FieldType } from './types';
|
|
9
|
+
var product = {
|
|
10
|
+
needsDrafting: true,
|
|
11
|
+
allowClientDraftContribution: true,
|
|
12
|
+
groupVariationFields: [{
|
|
13
|
+
id: 9
|
|
14
|
+
}],
|
|
15
|
+
draftTemplates: [{
|
|
16
|
+
id: 1,
|
|
17
|
+
selectedByVariationFieldOptions: [],
|
|
18
|
+
editedByVariationFields: []
|
|
19
|
+
}]
|
|
20
|
+
};
|
|
21
|
+
test('draftStorageKey is per product', function () {
|
|
22
|
+
expect(draftStorageKey(44)).toBe('productDraftTemplate-44');
|
|
23
|
+
});
|
|
24
|
+
test('clearDrafts removes saved artwork for a product', function () {
|
|
25
|
+
if (typeof window === 'undefined' || !window.localStorage) return;
|
|
26
|
+
saveDrafts(44, [{
|
|
27
|
+
groupIndex: 0,
|
|
28
|
+
productId: 44,
|
|
29
|
+
templateData: [],
|
|
30
|
+
previews: []
|
|
31
|
+
}]);
|
|
32
|
+
expect(loadDrafts(44)).toHaveLength(1);
|
|
33
|
+
clearDrafts(44);
|
|
34
|
+
expect(loadDrafts(44)).toEqual([]);
|
|
35
|
+
});
|
|
36
|
+
test('artwork path defaults to self and can switch to the free design service', function () {
|
|
37
|
+
if (typeof window === 'undefined' || !window.localStorage) return;
|
|
38
|
+
window.localStorage.removeItem(artworkPathKey(44));
|
|
39
|
+
expect(loadArtworkPath(44)).toBe('self');
|
|
40
|
+
saveArtworkPath(44, 'service');
|
|
41
|
+
expect(loadArtworkPath(44)).toBe('service');
|
|
42
|
+
saveArtworkPath(44, 'self');
|
|
43
|
+
expect(loadArtworkPath(44)).toBe('self');
|
|
44
|
+
});
|
|
45
|
+
test('upsert and prune keep per-group template drafts', function () {
|
|
46
|
+
var _savedPreview;
|
|
47
|
+
var drafts = upsertGroupTemplateDraft([], 44, 0, {
|
|
48
|
+
templateId: 1,
|
|
49
|
+
draft: 'data:a',
|
|
50
|
+
canvasPreview: 'data:b'
|
|
51
|
+
});
|
|
52
|
+
drafts = upsertGroupTemplateDraft(drafts, 44, 1, {
|
|
53
|
+
templateId: 1,
|
|
54
|
+
draft: 'data:c',
|
|
55
|
+
canvasPreview: 'data:d'
|
|
56
|
+
});
|
|
57
|
+
expect(drafts).toHaveLength(2);
|
|
58
|
+
expect((_savedPreview = savedPreview(drafts, 1, 1)) === null || _savedPreview === void 0 ? void 0 : _savedPreview.draft).toBe('data:c');
|
|
59
|
+
expect(pruneDrafts(drafts, 1)).toHaveLength(1);
|
|
60
|
+
});
|
|
61
|
+
test('missingDesignSlots reports unsaved group templates', function () {
|
|
62
|
+
var formValues = {
|
|
63
|
+
variations: [],
|
|
64
|
+
variationsGroups: [{
|
|
65
|
+
variations: []
|
|
66
|
+
}, {
|
|
67
|
+
variations: []
|
|
68
|
+
}]
|
|
69
|
+
};
|
|
70
|
+
expect(requiredDesignSlots(product, formValues)).toHaveLength(2);
|
|
71
|
+
expect(missingDesignSlots(product, formValues, [])).toHaveLength(2);
|
|
72
|
+
var saved = upsertGroupTemplateDraft([], 1, 0, {
|
|
73
|
+
templateId: 1,
|
|
74
|
+
draft: 'x',
|
|
75
|
+
canvasPreview: 'y'
|
|
76
|
+
});
|
|
77
|
+
expect(missingDesignSlots(product, formValues, saved)).toHaveLength(1);
|
|
78
|
+
expect(completeGroupCount(product, formValues, saved)).toEqual({
|
|
79
|
+
complete: 1,
|
|
80
|
+
total: 2
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
test('isPreviewComplete requires both pngs', function () {
|
|
84
|
+
expect(isPreviewComplete({
|
|
85
|
+
templateId: 1,
|
|
86
|
+
draft: '',
|
|
87
|
+
canvasPreview: 'a'
|
|
88
|
+
})).toBe(false);
|
|
89
|
+
expect(isPreviewComplete({
|
|
90
|
+
templateId: 1,
|
|
91
|
+
draft: 'a',
|
|
92
|
+
canvasPreview: 'b'
|
|
93
|
+
})).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
test('gated templates drop out of required slots', function () {
|
|
96
|
+
var gated = _objectSpread(_objectSpread({}, product), {}, {
|
|
97
|
+
draftTemplates: [{
|
|
98
|
+
id: 2,
|
|
99
|
+
selectedByVariationFieldOptions: [{
|
|
100
|
+
id: 77
|
|
101
|
+
}],
|
|
102
|
+
editedByVariationFields: [{
|
|
103
|
+
id: 3,
|
|
104
|
+
fieldType: FieldType.TEXT_INPUT
|
|
105
|
+
}]
|
|
106
|
+
}]
|
|
107
|
+
});
|
|
108
|
+
var hidden = missingDesignSlots(gated, {
|
|
109
|
+
variations: [],
|
|
110
|
+
variationsGroups: [{
|
|
111
|
+
variations: []
|
|
112
|
+
}]
|
|
113
|
+
}, []);
|
|
114
|
+
expect(hidden[0].template.id).toBe(0);
|
|
115
|
+
var shown = missingDesignSlots(gated, {
|
|
116
|
+
variations: [{
|
|
117
|
+
value: '77'
|
|
118
|
+
}],
|
|
119
|
+
variationsGroups: [{
|
|
120
|
+
variations: []
|
|
121
|
+
}]
|
|
122
|
+
}, []);
|
|
123
|
+
expect(shown[0].template.id).toBe(2);
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnR3b3JrUGF0aEtleSIsImNsZWFyRHJhZnRzIiwiY29tcGxldGVHcm91cENvdW50IiwiZHJhZnRTdG9yYWdlS2V5IiwiaXNQcmV2aWV3Q29tcGxldGUiLCJsb2FkQXJ0d29ya1BhdGgiLCJsb2FkRHJhZnRzIiwibWlzc2luZ0Rlc2lnblNsb3RzIiwicHJ1bmVEcmFmdHMiLCJyZXF1aXJlZERlc2lnblNsb3RzIiwic2F2ZWRQcmV2aWV3Iiwic2F2ZUFydHdvcmtQYXRoIiwic2F2ZURyYWZ0cyIsInVwc2VydEdyb3VwVGVtcGxhdGVEcmFmdCIsIkZpZWxkVHlwZSIsInByb2R1Y3QiLCJuZWVkc0RyYWZ0aW5nIiwiYWxsb3dDbGllbnREcmFmdENvbnRyaWJ1dGlvbiIsImdyb3VwVmFyaWF0aW9uRmllbGRzIiwiaWQiLCJkcmFmdFRlbXBsYXRlcyIsInNlbGVjdGVkQnlWYXJpYXRpb25GaWVsZE9wdGlvbnMiLCJlZGl0ZWRCeVZhcmlhdGlvbkZpZWxkcyIsInRlc3QiLCJleHBlY3QiLCJ0b0JlIiwid2luZG93IiwibG9jYWxTdG9yYWdlIiwiZ3JvdXBJbmRleCIsInByb2R1Y3RJZCIsInRlbXBsYXRlRGF0YSIsInByZXZpZXdzIiwidG9IYXZlTGVuZ3RoIiwidG9FcXVhbCIsInJlbW92ZUl0ZW0iLCJfc2F2ZWRQcmV2aWV3IiwiZHJhZnRzIiwidGVtcGxhdGVJZCIsImRyYWZ0IiwiY2FudmFzUHJldmlldyIsImZvcm1WYWx1ZXMiLCJ2YXJpYXRpb25zIiwidmFyaWF0aW9uc0dyb3VwcyIsInNhdmVkIiwiY29tcGxldGUiLCJ0b3RhbCIsImdhdGVkIiwiX29iamVjdFNwcmVhZCIsImZpZWxkVHlwZSIsIlRFWFRfSU5QVVQiLCJoaWRkZW4iLCJ0ZW1wbGF0ZSIsInNob3duIiwidmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZHJhZnRTdG9yYWdlLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXJ0d29ya1BhdGhLZXksXG4gIGNsZWFyRHJhZnRzLFxuICBjb21wbGV0ZUdyb3VwQ291bnQsXG4gIGRyYWZ0U3RvcmFnZUtleSxcbiAgaXNQcmV2aWV3Q29tcGxldGUsXG4gIGxvYWRBcnR3b3JrUGF0aCxcbiAgbG9hZERyYWZ0cyxcbiAgbWlzc2luZ0Rlc2lnblNsb3RzLFxuICBwcnVuZURyYWZ0cyxcbiAgcmVxdWlyZWREZXNpZ25TbG90cyxcbiAgc2F2ZWRQcmV2aWV3LFxuICBzYXZlQXJ0d29ya1BhdGgsXG4gIHNhdmVEcmFmdHMsXG4gIHVwc2VydEdyb3VwVGVtcGxhdGVEcmFmdCxcbn0gZnJvbSAnLi9kcmFmdFN0b3JhZ2UnO1xuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IHByb2R1Y3QgPSB7XG4gIG5lZWRzRHJhZnRpbmc6IHRydWUsXG4gIGFsbG93Q2xpZW50RHJhZnRDb250cmlidXRpb246IHRydWUsXG4gIGdyb3VwVmFyaWF0aW9uRmllbGRzOiBbeyBpZDogOSB9XSxcbiAgZHJhZnRUZW1wbGF0ZXM6IFtcbiAgICB7IGlkOiAxLCBzZWxlY3RlZEJ5VmFyaWF0aW9uRmllbGRPcHRpb25zOiBbXSwgZWRpdGVkQnlWYXJpYXRpb25GaWVsZHM6IFtdIH0sXG4gIF0sXG59O1xuXG50ZXN0KCdkcmFmdFN0b3JhZ2VLZXkgaXMgcGVyIHByb2R1Y3QnLCAoKSA9PiB7XG4gIGV4cGVjdChkcmFmdFN0b3JhZ2VLZXkoNDQpKS50b0JlKCdwcm9kdWN0RHJhZnRUZW1wbGF0ZS00NCcpO1xufSk7XG5cbnRlc3QoJ2NsZWFyRHJhZnRzIHJlbW92ZXMgc2F2ZWQgYXJ0d29yayBmb3IgYSBwcm9kdWN0JywgKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHJldHVybjtcbiAgc2F2ZURyYWZ0cyg0NCwgW3sgZ3JvdXBJbmRleDogMCwgcHJvZHVjdElkOiA0NCwgdGVtcGxhdGVEYXRhOiBbXSwgcHJldmlld3M6IFtdIH1dKTtcbiAgZXhwZWN0KGxvYWREcmFmdHMoNDQpKS50b0hhdmVMZW5ndGgoMSk7XG4gIGNsZWFyRHJhZnRzKDQ0KTtcbiAgZXhwZWN0KGxvYWREcmFmdHMoNDQpKS50b0VxdWFsKFtdKTtcbn0pO1xuXG50ZXN0KCdhcnR3b3JrIHBhdGggZGVmYXVsdHMgdG8gc2VsZiBhbmQgY2FuIHN3aXRjaCB0byB0aGUgZnJlZSBkZXNpZ24gc2VydmljZScsICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICF3aW5kb3cubG9jYWxTdG9yYWdlKSByZXR1cm47XG4gIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShhcnR3b3JrUGF0aEtleSg0NCkpO1xuICBleHBlY3QobG9hZEFydHdvcmtQYXRoKDQ0KSkudG9CZSgnc2VsZicpO1xuICBzYXZlQXJ0d29ya1BhdGgoNDQsICdzZXJ2aWNlJyk7XG4gIGV4cGVjdChsb2FkQXJ0d29ya1BhdGgoNDQpKS50b0JlKCdzZXJ2aWNlJyk7XG4gIHNhdmVBcnR3b3JrUGF0aCg0NCwgJ3NlbGYnKTtcbiAgZXhwZWN0KGxvYWRBcnR3b3JrUGF0aCg0NCkpLnRvQmUoJ3NlbGYnKTtcbn0pO1xuXG50ZXN0KCd1cHNlcnQgYW5kIHBydW5lIGtlZXAgcGVyLWdyb3VwIHRlbXBsYXRlIGRyYWZ0cycsICgpID0+IHtcbiAgbGV0IGRyYWZ0cyA9IHVwc2VydEdyb3VwVGVtcGxhdGVEcmFmdChbXSwgNDQsIDAsIHtcbiAgICB0ZW1wbGF0ZUlkOiAxLFxuICAgIGRyYWZ0OiAnZGF0YTphJyxcbiAgICBjYW52YXNQcmV2aWV3OiAnZGF0YTpiJyxcbiAgfSk7XG4gIGRyYWZ0cyA9IHVwc2VydEdyb3VwVGVtcGxhdGVEcmFmdChkcmFmdHMsIDQ0LCAxLCB7XG4gICAgdGVtcGxhdGVJZDogMSxcbiAgICBkcmFmdDogJ2RhdGE6YycsXG4gICAgY2FudmFzUHJldmlldzogJ2RhdGE6ZCcsXG4gIH0pO1xuICBleHBlY3QoZHJhZnRzKS50b0hhdmVMZW5ndGgoMik7XG4gIGV4cGVjdChzYXZlZFByZXZpZXcoZHJhZnRzLCAxLCAxKT8uZHJhZnQpLnRvQmUoJ2RhdGE6YycpO1xuICBleHBlY3QocHJ1bmVEcmFmdHMoZHJhZnRzLCAxKSkudG9IYXZlTGVuZ3RoKDEpO1xufSk7XG5cbnRlc3QoJ21pc3NpbmdEZXNpZ25TbG90cyByZXBvcnRzIHVuc2F2ZWQgZ3JvdXAgdGVtcGxhdGVzJywgKCkgPT4ge1xuICBjb25zdCBmb3JtVmFsdWVzID0ge1xuICAgIHZhcmlhdGlvbnM6IFtdLFxuICAgIHZhcmlhdGlvbnNHcm91cHM6IFt7IHZhcmlhdGlvbnM6IFtdIH0sIHsgdmFyaWF0aW9uczogW10gfV0sXG4gIH07XG4gIGV4cGVjdChyZXF1aXJlZERlc2lnblNsb3RzKHByb2R1Y3QsIGZvcm1WYWx1ZXMpKS50b0hhdmVMZW5ndGgoMik7XG4gIGV4cGVjdChtaXNzaW5nRGVzaWduU2xvdHMocHJvZHVjdCwgZm9ybVZhbHVlcywgW10pKS50b0hhdmVMZW5ndGgoMik7XG4gIGNvbnN0IHNhdmVkID0gdXBzZXJ0R3JvdXBUZW1wbGF0ZURyYWZ0KFtdLCAxLCAwLCB7XG4gICAgdGVtcGxhdGVJZDogMSxcbiAgICBkcmFmdDogJ3gnLFxuICAgIGNhbnZhc1ByZXZpZXc6ICd5JyxcbiAgfSk7XG4gIGV4cGVjdChtaXNzaW5nRGVzaWduU2xvdHMocHJvZHVjdCwgZm9ybVZhbHVlcywgc2F2ZWQpKS50b0hhdmVMZW5ndGgoMSk7XG4gIGV4cGVjdChjb21wbGV0ZUdyb3VwQ291bnQocHJvZHVjdCwgZm9ybVZhbHVlcywgc2F2ZWQpKS50b0VxdWFsKHtcbiAgICBjb21wbGV0ZTogMSxcbiAgICB0b3RhbDogMixcbiAgfSk7XG59KTtcblxudGVzdCgnaXNQcmV2aWV3Q29tcGxldGUgcmVxdWlyZXMgYm90aCBwbmdzJywgKCkgPT4ge1xuICBleHBlY3QoaXNQcmV2aWV3Q29tcGxldGUoeyB0ZW1wbGF0ZUlkOiAxLCBkcmFmdDogJycsIGNhbnZhc1ByZXZpZXc6ICdhJyB9KSkudG9CZShmYWxzZSk7XG4gIGV4cGVjdChpc1ByZXZpZXdDb21wbGV0ZSh7IHRlbXBsYXRlSWQ6IDEsIGRyYWZ0OiAnYScsIGNhbnZhc1ByZXZpZXc6ICdiJyB9KSkudG9CZSh0cnVlKTtcbn0pO1xuXG50ZXN0KCdnYXRlZCB0ZW1wbGF0ZXMgZHJvcCBvdXQgb2YgcmVxdWlyZWQgc2xvdHMnLCAoKSA9PiB7XG4gIGNvbnN0IGdhdGVkID0ge1xuICAgIC4uLnByb2R1Y3QsXG4gICAgZHJhZnRUZW1wbGF0ZXM6IFt7XG4gICAgICBpZDogMixcbiAgICAgIHNlbGVjdGVkQnlWYXJpYXRpb25GaWVsZE9wdGlvbnM6IFt7IGlkOiA3NyB9XSxcbiAgICAgIGVkaXRlZEJ5VmFyaWF0aW9uRmllbGRzOiBbeyBpZDogMywgZmllbGRUeXBlOiBGaWVsZFR5cGUuVEVYVF9JTlBVVCB9XSxcbiAgICB9XSxcbiAgfTtcbiAgY29uc3QgaGlkZGVuID0gbWlzc2luZ0Rlc2lnblNsb3RzKGdhdGVkLCB7XG4gICAgdmFyaWF0aW9uczogW10sXG4gICAgdmFyaWF0aW9uc0dyb3VwczogW3sgdmFyaWF0aW9uczogW10gfV0sXG4gIH0sIFtdKTtcbiAgZXhwZWN0KGhpZGRlblswXS50ZW1wbGF0ZS5pZCkudG9CZSgwKTtcbiAgY29uc3Qgc2hvd24gPSBtaXNzaW5nRGVzaWduU2xvdHMoZ2F0ZWQsIHtcbiAgICB2YXJpYXRpb25zOiBbeyB2YWx1ZTogJzc3JyB9XSxcbiAgICB2YXJpYXRpb25zR3JvdXBzOiBbeyB2YXJpYXRpb25zOiBbXSB9XSxcbiAgfSwgW10pO1xuICBleHBlY3Qoc2hvd25bMF0udGVtcGxhdGUuaWQpLnRvQmUoMik7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsU0FDRUEsY0FBYyxFQUNkQyxXQUFXLEVBQ1hDLGtCQUFrQixFQUNsQkMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLGVBQWUsRUFDZkMsVUFBVSxFQUNWQyxrQkFBa0IsRUFDbEJDLFdBQVcsRUFDWEMsbUJBQW1CLEVBQ25CQyxZQUFZLEVBQ1pD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QUFNLENBQUNwQixpQkFBaUIsQ0FBQztJQUFFaUMsVUFBVSxFQUFFLENBQUM7SUFBRUMsS0FBSyxFQUFFLEVBQUU7SUFBRUMsYUFBYSxFQUFFO0VBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUN2RkQsTUFBTSxDQUFDcEIsaUJBQWlCLENBQUM7SUFBRWlDLFVBQVUsRUFBRSxDQUFDO0lBQUVDLEtBQUssRUFBRSxHQUFHO0lBQUVDLGFBQWEsRUFBRTtFQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNkLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekYsQ0FBQyxDQUFDO0FBRUZGLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxZQUFNO0VBQ3ZELElBQU11QixLQUFLLEdBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNOaEMsT0FBTztJQUNWSyxjQUFjLEVBQUUsQ0FBQztNQUNmRCxFQUFFLEVBQUUsQ0FBQztNQUNMRSwrQkFBK0IsRUFBRSxDQUFDO1FBQUVGLEVBQUUsRUFBRTtNQUFHLENBQUMsQ0FBQztNQUM3Q0csdUJBQXVCLEVBQUUsQ0FBQztRQUFFSCxFQUFFLEVBQUUsQ0FBQztRQUFFNkIsU0FBUyxFQUFFbEMsU0FBUyxDQUFDbUM7TUFBVyxDQUFDO0lBQ3RFLENBQUM7RUFBQyxFQUNIO0VBQ0QsSUFBTUMsTUFBTSxHQUFHM0Msa0JBQWtCLENBQUN1QyxLQUFLLEVBQUU7SUFDdkNMLFVBQVUsRUFBRSxFQUFFO0lBQ2RDLGdCQUFnQixFQUFFLENBQUM7TUFBRUQsVUFBVSxFQUFFO0lBQUcsQ0FBQztFQUN2QyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ05qQixNQUFNLENBQUMwQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNDLFFBQVEsQ0FBQ2hDLEVBQUUsQ0FBQyxDQUFDTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLElBQU0yQixLQUFLLEdBQUc3QyxrQkFBa0IsQ0FBQ3VDLEtBQUssRUFBRTtJQUN0Q0wsVUFBVSxFQUFFLENBQUM7TUFBRVksS0FBSyxFQUFFO0lBQUssQ0FBQyxDQUFDO0lBQzdCWCxnQkFBZ0IsRUFBRSxDQUFDO01BQUVELFVBQVUsRUFBRTtJQUFHLENBQUM7RUFDdkMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNOakIsTUFBTSxDQUFDNEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDRCxRQUFRLENBQUNoQyxFQUFFLENBQUMsQ0FBQ00sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|