@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,77 @@
|
|
|
1
|
+
/** Shared helpers for Area (height × width) variation fields. Stored value is always millimetres. */
|
|
2
|
+
export type AreaUnit = 'mm' | 'cm' | 'm' | 'in' | 'ft';
|
|
3
|
+
export type AreaInputType = 'input' | 'slider';
|
|
4
|
+
export type DisplayModality = 'metric' | 'imperial';
|
|
5
|
+
export declare function parseAreaValue(value: string | null | undefined): {
|
|
6
|
+
heightMm: number;
|
|
7
|
+
widthMm: number;
|
|
8
|
+
} | null;
|
|
9
|
+
export declare function formatAreaValue(heightMm: number, widthMm: number): string;
|
|
10
|
+
export declare function isImperialUnit(unit: AreaUnit | string | null | undefined): boolean;
|
|
11
|
+
export declare function normaliseAreaUnit(unit?: string | null): AreaUnit;
|
|
12
|
+
/** Imperial for en-US / en-LR / en-MM; otherwise metric (incl. en-GB). */
|
|
13
|
+
export declare function localePrefersImperial(locale?: string): boolean;
|
|
14
|
+
/** Millimetres per one unit of the given area unit. */
|
|
15
|
+
export declare function unitFactorMm(unit?: AreaUnit | string): number;
|
|
16
|
+
/** @deprecated use unitFactorMm */
|
|
17
|
+
export declare function metricUnitFactor(unit?: AreaUnit): number;
|
|
18
|
+
export declare function mmToUnit(mm: number, unit?: AreaUnit | string): number;
|
|
19
|
+
export declare function unitToMm(value: number, unit?: AreaUnit | string): number;
|
|
20
|
+
/** @deprecated use mmToUnit */
|
|
21
|
+
export declare function mmToMetricDisplay(mm: number, unit?: AreaUnit): number;
|
|
22
|
+
/** @deprecated use unitToMm */
|
|
23
|
+
export declare function metricDisplayToMm(value: number, unit?: AreaUnit): number;
|
|
24
|
+
export declare function mmToInches(mm: number): number;
|
|
25
|
+
export declare function inchesToMm(inches: number): number;
|
|
26
|
+
/**
|
|
27
|
+
* Unit shown for the current buyer modality.
|
|
28
|
+
* Metric → field unit if metric, else mm.
|
|
29
|
+
* Imperial → field unit if imperial, else inches.
|
|
30
|
+
*/
|
|
31
|
+
export declare function activeDisplayUnit(modality: DisplayModality, areaUnit?: AreaUnit | string): AreaUnit;
|
|
32
|
+
export declare function defaultModalityForAreaUnit(areaUnit?: AreaUnit | string): DisplayModality;
|
|
33
|
+
export declare function mmToDisplay(mm: number, modality: DisplayModality, areaUnit?: AreaUnit | string): number;
|
|
34
|
+
export declare function displayToMm(value: number, modality: DisplayModality, areaUnit?: AreaUnit | string): number;
|
|
35
|
+
export declare function unitLabel(modality: DisplayModality, areaUnit?: AreaUnit | string): string;
|
|
36
|
+
export declare function defaultAreaStep(unit?: AreaUnit | string): number;
|
|
37
|
+
/**
|
|
38
|
+
* Step for inputs/sliders in the current display unit.
|
|
39
|
+
* `stepMm` is the admin-configured step stored in millimetres.
|
|
40
|
+
*/
|
|
41
|
+
export declare function stepInDisplayUnit(stepMm: number | null | undefined, modality: DisplayModality, areaUnit?: AreaUnit | string): number;
|
|
42
|
+
/** Format a length in mm for buyer-facing summary. */
|
|
43
|
+
export declare function formatLengthFromMm(mm: number, modality: DisplayModality, areaUnit?: AreaUnit | string): string;
|
|
44
|
+
export declare function formatAreaParts(value: string | null | undefined, modality?: DisplayModality, areaUnit?: AreaUnit | string): {
|
|
45
|
+
width: string;
|
|
46
|
+
height: string;
|
|
47
|
+
areaLabel: string;
|
|
48
|
+
} | null;
|
|
49
|
+
export declare function formatAreaSummary(value: string | null | undefined, modality?: DisplayModality, areaUnit?: AreaUnit | string): string | null;
|
|
50
|
+
export declare function clamp(n: number, min?: number | null, max?: number | null): number;
|
|
51
|
+
/**
|
|
52
|
+
* Client-side Area cost estimate (pre-discount), matching API formula:
|
|
53
|
+
* onceOff = heightCost × widthCost × height_u × width_u
|
|
54
|
+
* unitCost = heightUnit × widthUnit × height_u × width_u
|
|
55
|
+
* (dimensions expressed in the field's areaUnit)
|
|
56
|
+
*/
|
|
57
|
+
export declare function estimateAreaCosts(variationField: any, value: string | null | undefined): {
|
|
58
|
+
onceOffCost: number;
|
|
59
|
+
unitCost: number;
|
|
60
|
+
} | null;
|
|
61
|
+
/**
|
|
62
|
+
* Keep width/height linked by aspectRatio (width/height).
|
|
63
|
+
* `changed` indicates which dimension the user edited.
|
|
64
|
+
*/
|
|
65
|
+
export declare function clampWithAspectRatio(args: {
|
|
66
|
+
heightMm: number;
|
|
67
|
+
widthMm: number;
|
|
68
|
+
changed: 'height' | 'width';
|
|
69
|
+
aspectRatio: number;
|
|
70
|
+
heightMin?: number | null;
|
|
71
|
+
heightMax?: number | null;
|
|
72
|
+
widthMin?: number | null;
|
|
73
|
+
widthMax?: number | null;
|
|
74
|
+
}): {
|
|
75
|
+
heightMm: number;
|
|
76
|
+
widthMm: number;
|
|
77
|
+
};
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
/** Shared helpers for Area (height × width) variation fields. Stored value is always millimetres. */
|
|
2
|
+
|
|
3
|
+
var MM_PER_INCH = 25.4;
|
|
4
|
+
var MM_PER_FOOT = 304.8;
|
|
5
|
+
var MM_PER_CM = 10;
|
|
6
|
+
var MM_PER_M = 1000;
|
|
7
|
+
export function parseAreaValue(value) {
|
|
8
|
+
if (value == null) return null;
|
|
9
|
+
var text = String(value).trim();
|
|
10
|
+
if (!text) return null;
|
|
11
|
+
var parts = text.split(',').map(function (p) {
|
|
12
|
+
return p.trim();
|
|
13
|
+
});
|
|
14
|
+
if (parts.length !== 2) return null;
|
|
15
|
+
var heightMm = Number(parts[0]);
|
|
16
|
+
var widthMm = Number(parts[1]);
|
|
17
|
+
if (!Number.isFinite(heightMm) || !Number.isFinite(widthMm)) return null;
|
|
18
|
+
if (heightMm <= 0 || widthMm <= 0) return null;
|
|
19
|
+
return {
|
|
20
|
+
heightMm: heightMm,
|
|
21
|
+
widthMm: widthMm
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function formatAreaValue(heightMm, widthMm) {
|
|
25
|
+
var h = Number(heightMm);
|
|
26
|
+
var w = Number(widthMm);
|
|
27
|
+
if (!Number.isFinite(h) || !Number.isFinite(w) || h <= 0 || w <= 0) return '';
|
|
28
|
+
return "".concat(trimNum(h), ",").concat(trimNum(w));
|
|
29
|
+
}
|
|
30
|
+
function trimNum(n) {
|
|
31
|
+
return String(Number(n.toFixed(6)));
|
|
32
|
+
}
|
|
33
|
+
export function isImperialUnit(unit) {
|
|
34
|
+
var u = String(unit || 'mm').toLowerCase();
|
|
35
|
+
return u === 'in' || u === 'ft';
|
|
36
|
+
}
|
|
37
|
+
export function normaliseAreaUnit(unit) {
|
|
38
|
+
var u = String(unit || 'mm').toLowerCase();
|
|
39
|
+
if (u === 'cm' || u === 'm' || u === 'in' || u === 'ft' || u === 'mm') {
|
|
40
|
+
return u;
|
|
41
|
+
}
|
|
42
|
+
return 'mm';
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Imperial for en-US / en-LR / en-MM; otherwise metric (incl. en-GB). */
|
|
46
|
+
export function localePrefersImperial(locale) {
|
|
47
|
+
var lang = locale || (typeof navigator !== 'undefined' ? navigator.language : undefined) || '';
|
|
48
|
+
var normalized = lang.toLowerCase().replace('_', '-');
|
|
49
|
+
return normalized === 'en-us' || normalized === 'en-lr' || normalized === 'en-mm' || normalized.endsWith('-us') || normalized.endsWith('-lr') || normalized.endsWith('-mm');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Millimetres per one unit of the given area unit. */
|
|
53
|
+
export function unitFactorMm() {
|
|
54
|
+
var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'mm';
|
|
55
|
+
switch (normaliseAreaUnit(unit)) {
|
|
56
|
+
case 'cm':
|
|
57
|
+
return MM_PER_CM;
|
|
58
|
+
case 'm':
|
|
59
|
+
return MM_PER_M;
|
|
60
|
+
case 'in':
|
|
61
|
+
return MM_PER_INCH;
|
|
62
|
+
case 'ft':
|
|
63
|
+
return MM_PER_FOOT;
|
|
64
|
+
default:
|
|
65
|
+
return 1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** @deprecated use unitFactorMm */
|
|
70
|
+
export function metricUnitFactor() {
|
|
71
|
+
var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'mm';
|
|
72
|
+
return unitFactorMm(unit);
|
|
73
|
+
}
|
|
74
|
+
export function mmToUnit(mm) {
|
|
75
|
+
var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'mm';
|
|
76
|
+
return mm / unitFactorMm(unit);
|
|
77
|
+
}
|
|
78
|
+
export function unitToMm(value) {
|
|
79
|
+
var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'mm';
|
|
80
|
+
return value * unitFactorMm(unit);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** @deprecated use mmToUnit */
|
|
84
|
+
export function mmToMetricDisplay(mm) {
|
|
85
|
+
var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'mm';
|
|
86
|
+
return mmToUnit(mm, unit);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** @deprecated use unitToMm */
|
|
90
|
+
export function metricDisplayToMm(value) {
|
|
91
|
+
var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'mm';
|
|
92
|
+
return unitToMm(value, unit);
|
|
93
|
+
}
|
|
94
|
+
export function mmToInches(mm) {
|
|
95
|
+
return mm / MM_PER_INCH;
|
|
96
|
+
}
|
|
97
|
+
export function inchesToMm(inches) {
|
|
98
|
+
return inches * MM_PER_INCH;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Unit shown for the current buyer modality.
|
|
103
|
+
* Metric → field unit if metric, else mm.
|
|
104
|
+
* Imperial → field unit if imperial, else inches.
|
|
105
|
+
*/
|
|
106
|
+
export function activeDisplayUnit(modality) {
|
|
107
|
+
var areaUnit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'mm';
|
|
108
|
+
var unit = normaliseAreaUnit(areaUnit);
|
|
109
|
+
if (modality === 'imperial') {
|
|
110
|
+
return isImperialUnit(unit) ? unit : 'in';
|
|
111
|
+
}
|
|
112
|
+
return isImperialUnit(unit) ? 'mm' : unit;
|
|
113
|
+
}
|
|
114
|
+
export function defaultModalityForAreaUnit() {
|
|
115
|
+
var areaUnit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'mm';
|
|
116
|
+
if (isImperialUnit(areaUnit)) return 'imperial';
|
|
117
|
+
return localePrefersImperial() ? 'imperial' : 'metric';
|
|
118
|
+
}
|
|
119
|
+
export function mmToDisplay(mm, modality) {
|
|
120
|
+
var areaUnit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'mm';
|
|
121
|
+
return mmToUnit(mm, activeDisplayUnit(modality, areaUnit));
|
|
122
|
+
}
|
|
123
|
+
export function displayToMm(value, modality) {
|
|
124
|
+
var areaUnit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'mm';
|
|
125
|
+
return unitToMm(value, activeDisplayUnit(modality, areaUnit));
|
|
126
|
+
}
|
|
127
|
+
export function unitLabel(modality) {
|
|
128
|
+
var areaUnit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'mm';
|
|
129
|
+
return activeDisplayUnit(modality, areaUnit);
|
|
130
|
+
}
|
|
131
|
+
export function defaultAreaStep() {
|
|
132
|
+
var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'mm';
|
|
133
|
+
switch (normaliseAreaUnit(unit)) {
|
|
134
|
+
case 'm':
|
|
135
|
+
return 0.001;
|
|
136
|
+
case 'cm':
|
|
137
|
+
return 0.1;
|
|
138
|
+
case 'in':
|
|
139
|
+
return 0.125;
|
|
140
|
+
case 'ft':
|
|
141
|
+
return 0.01;
|
|
142
|
+
default:
|
|
143
|
+
return 1;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Step for inputs/sliders in the current display unit.
|
|
149
|
+
* `stepMm` is the admin-configured step stored in millimetres.
|
|
150
|
+
*/
|
|
151
|
+
export function stepInDisplayUnit(stepMm, modality) {
|
|
152
|
+
var areaUnit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'mm';
|
|
153
|
+
var unit = activeDisplayUnit(modality, areaUnit);
|
|
154
|
+
var raw = Number(stepMm);
|
|
155
|
+
if (Number.isFinite(raw) && raw > 0) {
|
|
156
|
+
return raw / unitFactorMm(unit);
|
|
157
|
+
}
|
|
158
|
+
return defaultAreaStep(unit);
|
|
159
|
+
}
|
|
160
|
+
function decimalsForUnit(unit) {
|
|
161
|
+
if (unit === 'm') return 4;
|
|
162
|
+
if (unit === 'ft') return 3;
|
|
163
|
+
if (unit === 'in' || unit === 'cm') return 2;
|
|
164
|
+
return 2;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/** Format a length in mm for buyer-facing summary. */
|
|
168
|
+
export function formatLengthFromMm(mm, modality) {
|
|
169
|
+
var areaUnit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'mm';
|
|
170
|
+
var unit = activeDisplayUnit(modality, areaUnit);
|
|
171
|
+
if (unit === 'ft') {
|
|
172
|
+
var feet = mmToUnit(mm, 'ft');
|
|
173
|
+
return "".concat(trimNum(Number(feet.toFixed(3))), " ft");
|
|
174
|
+
}
|
|
175
|
+
if (unit === 'in') {
|
|
176
|
+
var inches = mmToInches(mm);
|
|
177
|
+
if (inches >= 12) {
|
|
178
|
+
var _feet = Math.floor(inches / 12);
|
|
179
|
+
var rem = inches - _feet * 12;
|
|
180
|
+
if (rem < 0.05) return "".concat(_feet, " ft");
|
|
181
|
+
return "".concat(_feet, " ft ").concat(trimNum(Number(rem.toFixed(2))), " in");
|
|
182
|
+
}
|
|
183
|
+
return "".concat(trimNum(Number(inches.toFixed(2))), " in");
|
|
184
|
+
}
|
|
185
|
+
var display = mmToUnit(mm, unit);
|
|
186
|
+
return "".concat(trimNum(Number(display.toFixed(decimalsForUnit(unit)))), " ").concat(unit);
|
|
187
|
+
}
|
|
188
|
+
export function formatAreaParts(value) {
|
|
189
|
+
var modality = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'metric';
|
|
190
|
+
var areaUnit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'mm';
|
|
191
|
+
var parsed = parseAreaValue(value);
|
|
192
|
+
if (!parsed) return null;
|
|
193
|
+
var heightMm = parsed.heightMm,
|
|
194
|
+
widthMm = parsed.widthMm;
|
|
195
|
+
var height = formatLengthFromMm(heightMm, modality, areaUnit);
|
|
196
|
+
var width = formatLengthFromMm(widthMm, modality, areaUnit);
|
|
197
|
+
var areaMm2 = heightMm * widthMm;
|
|
198
|
+
var unit = activeDisplayUnit(modality, areaUnit);
|
|
199
|
+
var areaLabel;
|
|
200
|
+
if (unit === 'ft') {
|
|
201
|
+
var sqFt = areaMm2 / (MM_PER_FOOT * MM_PER_FOOT);
|
|
202
|
+
areaLabel = "".concat(trimNum(Number(sqFt.toFixed(3))), " sq ft");
|
|
203
|
+
} else if (unit === 'in') {
|
|
204
|
+
var sqIn = areaMm2 / (MM_PER_INCH * MM_PER_INCH);
|
|
205
|
+
if (sqIn >= 144) {
|
|
206
|
+
areaLabel = "".concat(trimNum(Number((sqIn / 144).toFixed(3))), " sq ft");
|
|
207
|
+
} else {
|
|
208
|
+
areaLabel = "".concat(trimNum(Number(sqIn.toFixed(2))), " sq in");
|
|
209
|
+
}
|
|
210
|
+
} else if (unit === 'm') {
|
|
211
|
+
areaLabel = "".concat(trimNum(Number((areaMm2 / 1000000).toFixed(4))), " m\xB2");
|
|
212
|
+
} else if (unit === 'cm') {
|
|
213
|
+
areaLabel = "".concat(trimNum(Number((areaMm2 / 100).toFixed(2))), " cm\xB2");
|
|
214
|
+
} else {
|
|
215
|
+
areaLabel = "".concat(trimNum(Number(areaMm2.toFixed(2))), " mm\xB2");
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
width: width,
|
|
219
|
+
height: height,
|
|
220
|
+
areaLabel: areaLabel
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
export function formatAreaSummary(value) {
|
|
224
|
+
var modality = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'metric';
|
|
225
|
+
var areaUnit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'mm';
|
|
226
|
+
var parts = formatAreaParts(value, modality, areaUnit);
|
|
227
|
+
if (!parts) return null;
|
|
228
|
+
// Width × height (landscape-first) to match the buyer control order.
|
|
229
|
+
return "Width ".concat(parts.width, " \xD7 Height ").concat(parts.height, " (").concat(parts.areaLabel, ")");
|
|
230
|
+
}
|
|
231
|
+
export function clamp(n, min, max) {
|
|
232
|
+
var v = n;
|
|
233
|
+
if (min != null && Number.isFinite(min)) v = Math.max(v, min);
|
|
234
|
+
if (max != null && Number.isFinite(max)) v = Math.min(v, max);
|
|
235
|
+
return v;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Client-side Area cost estimate (pre-discount), matching API formula:
|
|
240
|
+
* onceOff = heightCost × widthCost × height_u × width_u
|
|
241
|
+
* unitCost = heightUnit × widthUnit × height_u × width_u
|
|
242
|
+
* (dimensions expressed in the field's areaUnit)
|
|
243
|
+
*/
|
|
244
|
+
export function estimateAreaCosts(variationField, value) {
|
|
245
|
+
var _ref, _variationField$areaU, _variationField$heigh, _variationField$width, _variationField$heigh2, _variationField$width2;
|
|
246
|
+
var parsed = parseAreaValue(value);
|
|
247
|
+
if (!parsed) return null;
|
|
248
|
+
var areaUnit = normaliseAreaUnit((_ref = (_variationField$areaU = variationField === null || variationField === void 0 ? void 0 : variationField.areaUnit) !== null && _variationField$areaU !== void 0 ? _variationField$areaU : variationField === null || variationField === void 0 ? void 0 : variationField.area_unit) !== null && _ref !== void 0 ? _ref : 'mm');
|
|
249
|
+
var heightU = mmToUnit(parsed.heightMm, areaUnit);
|
|
250
|
+
var widthU = mmToUnit(parsed.widthMm, areaUnit);
|
|
251
|
+
var area = heightU * widthU;
|
|
252
|
+
var heightCost = Number((_variationField$heigh = variationField === null || variationField === void 0 ? void 0 : variationField.heightVariationCost) !== null && _variationField$heigh !== void 0 ? _variationField$heigh : variationField === null || variationField === void 0 ? void 0 : variationField.height_variation_cost) || 0;
|
|
253
|
+
var widthCost = Number((_variationField$width = variationField === null || variationField === void 0 ? void 0 : variationField.widthVariationCost) !== null && _variationField$width !== void 0 ? _variationField$width : variationField === null || variationField === void 0 ? void 0 : variationField.width_variation_cost) || 0;
|
|
254
|
+
var heightUnit = Number((_variationField$heigh2 = variationField === null || variationField === void 0 ? void 0 : variationField.heightVariationUnitCost) !== null && _variationField$heigh2 !== void 0 ? _variationField$heigh2 : variationField === null || variationField === void 0 ? void 0 : variationField.height_variation_unit_cost) || 0;
|
|
255
|
+
var widthUnit = Number((_variationField$width2 = variationField === null || variationField === void 0 ? void 0 : variationField.widthVariationUnitCost) !== null && _variationField$width2 !== void 0 ? _variationField$width2 : variationField === null || variationField === void 0 ? void 0 : variationField.width_variation_unit_cost) || 0;
|
|
256
|
+
var onceOffCost = heightCost * widthCost * area;
|
|
257
|
+
var unitCost = heightUnit * widthUnit * area;
|
|
258
|
+
if (!(onceOffCost > 0) && !(unitCost > 0)) return null;
|
|
259
|
+
return {
|
|
260
|
+
onceOffCost: Number(onceOffCost.toFixed(3)),
|
|
261
|
+
unitCost: Number(unitCost.toFixed(3))
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Keep width/height linked by aspectRatio (width/height).
|
|
267
|
+
* `changed` indicates which dimension the user edited.
|
|
268
|
+
*/
|
|
269
|
+
export function clampWithAspectRatio(args) {
|
|
270
|
+
var ratio = args.aspectRatio;
|
|
271
|
+
if (!Number.isFinite(ratio) || ratio <= 0) {
|
|
272
|
+
return {
|
|
273
|
+
heightMm: clamp(args.heightMm, args.heightMin, args.heightMax),
|
|
274
|
+
widthMm: clamp(args.widthMm, args.widthMin, args.widthMax)
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
var heightMm = args.heightMm;
|
|
278
|
+
var widthMm = args.widthMm;
|
|
279
|
+
if (args.changed === 'height') {
|
|
280
|
+
heightMm = clamp(heightMm, args.heightMin, args.heightMax);
|
|
281
|
+
widthMm = heightMm * ratio;
|
|
282
|
+
widthMm = clamp(widthMm, args.widthMin, args.widthMax);
|
|
283
|
+
heightMm = widthMm / ratio;
|
|
284
|
+
heightMm = clamp(heightMm, args.heightMin, args.heightMax);
|
|
285
|
+
widthMm = heightMm * ratio;
|
|
286
|
+
} else {
|
|
287
|
+
widthMm = clamp(widthMm, args.widthMin, args.widthMax);
|
|
288
|
+
heightMm = widthMm / ratio;
|
|
289
|
+
heightMm = clamp(heightMm, args.heightMin, args.heightMax);
|
|
290
|
+
widthMm = heightMm * ratio;
|
|
291
|
+
widthMm = clamp(widthMm, args.widthMin, args.widthMax);
|
|
292
|
+
}
|
|
293
|
+
return {
|
|
294
|
+
heightMm: heightMm,
|
|
295
|
+
widthMm: widthMm
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNTV9QRVJfSU5DSCIsIk1NX1BFUl9GT09UIiwiTU1fUEVSX0NNIiwiTU1fUEVSX00iLCJwYXJzZUFyZWFWYWx1ZSIsInZhbHVlIiwidGV4dCIsIlN0cmluZyIsInRyaW0iLCJwYXJ0cyIsInNwbGl0IiwibWFwIiwicCIsImxlbmd0aCIsImhlaWdodE1tIiwiTnVtYmVyIiwid2lkdGhNbSIsImlzRmluaXRlIiwiZm9ybWF0QXJlYVZhbHVlIiwiaCIsInciLCJjb25jYXQiLCJ0cmltTnVtIiwibiIsInRvRml4ZWQiLCJpc0ltcGVyaWFsVW5pdCIsInVuaXQiLCJ1IiwidG9Mb3dlckNhc2UiLCJub3JtYWxpc2VBcmVhVW5pdCIsImxvY2FsZVByZWZlcnNJbXBlcmlhbCIsImxvY2FsZSIsImxhbmciLCJuYXZpZ2F0b3IiLCJsYW5ndWFnZSIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZWQiLCJyZXBsYWNlIiwiZW5kc1dpdGgiLCJ1bml0RmFjdG9yTW0iLCJhcmd1bWVudHMiLCJtZXRyaWNVbml0RmFjdG9yIiwibW1Ub1VuaXQiLCJtbSIsInVuaXRUb01tIiwibW1Ub01ldHJpY0Rpc3BsYXkiLCJtZXRyaWNEaXNwbGF5VG9NbSIsIm1tVG9JbmNoZXMiLCJpbmNoZXNUb01tIiwiaW5jaGVzIiwiYWN0aXZlRGlzcGxheVVuaXQiLCJtb2RhbGl0eSIsImFyZWFVbml0IiwiZGVmYXVsdE1vZGFsaXR5Rm9yQXJlYVVuaXQiLCJtbVRvRGlzcGxheSIsImRpc3BsYXlUb01tIiwidW5pdExhYmVsIiwiZGVmYXVsdEFyZWFTdGVwIiwic3RlcEluRGlzcGxheVVuaXQiLCJzdGVwTW0iLCJyYXciLCJkZWNpbWFsc0ZvclVuaXQiLCJmb3JtYXRMZW5ndGhGcm9tTW0iLCJmZWV0IiwiTWF0aCIsImZsb29yIiwicmVtIiwiZGlzcGxheSIsImZvcm1hdEFyZWFQYXJ0cyIsInBhcnNlZCIsImhlaWdodCIsIndpZHRoIiwiYXJlYU1tMiIsImFyZWFMYWJlbCIsInNxRnQiLCJzcUluIiwiZm9ybWF0QXJlYVN1bW1hcnkiLCJjbGFtcCIsIm1pbiIsIm1heCIsInYiLCJlc3RpbWF0ZUFyZWFDb3N0cyIsInZhcmlhdGlvbkZpZWxkIiwiX3JlZiIsIl92YXJpYXRpb25GaWVsZCRhcmVhVSIsIl92YXJpYXRpb25GaWVsZCRoZWlnaCIsIl92YXJpYXRpb25GaWVsZCR3aWR0aCIsIl92YXJpYXRpb25GaWVsZCRoZWlnaDIiLCJfdmFyaWF0aW9uRmllbGQkd2lkdGgyIiwiYXJlYV91bml0IiwiaGVpZ2h0VSIsIndpZHRoVSIsImFyZWEiLCJoZWlnaHRDb3N0IiwiaGVpZ2h0VmFyaWF0aW9uQ29zdCIsImhlaWdodF92YXJpYXRpb25fY29zdCIsIndpZHRoQ29zdCIsIndpZHRoVmFyaWF0aW9uQ29zdCIsIndpZHRoX3ZhcmlhdGlvbl9jb3N0IiwiaGVpZ2h0VW5pdCIsImhlaWdodFZhcmlhdGlvblVuaXRDb3N0IiwiaGVpZ2h0X3ZhcmlhdGlvbl91bml0X2Nvc3QiLCJ3aWR0aFVuaXQiLCJ3aWR0aFZhcmlhdGlvblVuaXRDb3N0Iiwid2lkdGhfdmFyaWF0aW9uX3VuaXRfY29zdCIsIm9uY2VPZmZDb3N0IiwidW5pdENvc3QiLCJjbGFtcFdpdGhBc3BlY3RSYXRpbyIsImFyZ3MiLCJyYXRpbyIsImFzcGVjdFJhdGlvIiwiaGVpZ2h0TWluIiwiaGVpZ2h0TWF4Iiwid2lkdGhNaW4iLCJ3aWR0aE1heCIsImNoYW5nZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYXJlYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogU2hhcmVkIGhlbHBlcnMgZm9yIEFyZWEgKGhlaWdodCDDlyB3aWR0aCkgdmFyaWF0aW9uIGZpZWxkcy4gU3RvcmVkIHZhbHVlIGlzIGFsd2F5cyBtaWxsaW1ldHJlcy4gKi9cblxuZXhwb3J0IHR5cGUgQXJlYVVuaXQgPSAnbW0nIHwgJ2NtJyB8ICdtJyB8ICdpbicgfCAnZnQnO1xuZXhwb3J0IHR5cGUgQXJlYUlucHV0VHlwZSA9ICdpbnB1dCcgfCAnc2xpZGVyJztcbmV4cG9ydCB0eXBlIERpc3BsYXlNb2RhbGl0eSA9ICdtZXRyaWMnIHwgJ2ltcGVyaWFsJztcblxuY29uc3QgTU1fUEVSX0lOQ0ggPSAyNS40O1xuY29uc3QgTU1fUEVSX0ZPT1QgPSAzMDQuODtcbmNvbnN0IE1NX1BFUl9DTSA9IDEwO1xuY29uc3QgTU1fUEVSX00gPSAxMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcmVhVmFsdWUoXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiB7IGhlaWdodE1tOiBudW1iZXI7IHdpZHRoTW06IG51bWJlciB9IHwgbnVsbCB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgdGV4dCA9IFN0cmluZyh2YWx1ZSkudHJpbSgpO1xuICBpZiAoIXRleHQpIHJldHVybiBudWxsO1xuICBjb25zdCBwYXJ0cyA9IHRleHQuc3BsaXQoJywnKS5tYXAoKHApID0+IHAudHJpbSgpKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGhlaWdodE1tID0gTnVtYmVyKHBhcnRzWzBdKTtcbiAgY29uc3Qgd2lkdGhNbSA9IE51bWJlcihwYXJ0c1sxXSk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGhlaWdodE1tKSB8fCAhTnVtYmVyLmlzRmluaXRlKHdpZHRoTW0pKSByZXR1cm4gbnVsbDtcbiAgaWYgKGhlaWdodE1tIDw9IDAgfHwgd2lkdGhNbSA8PSAwKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsgaGVpZ2h0TW0sIHdpZHRoTW0gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFyZWFWYWx1ZShoZWlnaHRNbTogbnVtYmVyLCB3aWR0aE1tOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBoID0gTnVtYmVyKGhlaWdodE1tKTtcbiAgY29uc3QgdyA9IE51bWJlcih3aWR0aE1tKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaCkgfHwgIU51bWJlci5pc0Zpbml0ZSh3KSB8fCBoIDw9IDAgfHwgdyA8PSAwKSByZXR1cm4gJyc7XG4gIHJldHVybiBgJHt0cmltTnVtKGgpfSwke3RyaW1OdW0odyl9YDtcbn1cblxuZnVuY3Rpb24gdHJpbU51bShuOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gU3RyaW5nKE51bWJlcihuLnRvRml4ZWQoNikpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW1wZXJpYWxVbml0KHVuaXQ6IEFyZWFVbml0IHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICBjb25zdCB1ID0gU3RyaW5nKHVuaXQgfHwgJ21tJykudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHUgPT09ICdpbicgfHwgdSA9PT0gJ2Z0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGlzZUFyZWFVbml0KHVuaXQ/OiBzdHJpbmcgfCBudWxsKTogQXJlYVVuaXQge1xuICBjb25zdCB1ID0gU3RyaW5nKHVuaXQgfHwgJ21tJykudG9Mb3dlckNhc2UoKTtcbiAgaWYgKHUgPT09ICdjbScgfHwgdSA9PT0gJ20nIHx8IHUgPT09ICdpbicgfHwgdSA9PT0gJ2Z0JyB8fCB1ID09PSAnbW0nKSB7XG4gICAgcmV0dXJuIHU7XG4gIH1cbiAgcmV0dXJuICdtbSc7XG59XG5cbi8qKiBJbXBlcmlhbCBmb3IgZW4tVVMgLyBlbi1MUiAvIGVuLU1NOyBvdGhlcndpc2UgbWV0cmljIChpbmNsLiBlbi1HQikuICovXG5leHBvcnQgZnVuY3Rpb24gbG9jYWxlUHJlZmVyc0ltcGVyaWFsKGxvY2FsZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsYW5nID1cbiAgICBsb2NhbGUgfHxcbiAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IubGFuZ3VhZ2UgOiB1bmRlZmluZWQpIHx8XG4gICAgJyc7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5nLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnXycsICctJyk7XG4gIHJldHVybiAoXG4gICAgbm9ybWFsaXplZCA9PT0gJ2VuLXVzJyB8fFxuICAgIG5vcm1hbGl6ZWQgPT09ICdlbi1scicgfHxcbiAgICBub3JtYWxpemVkID09PSAnZW4tbW0nIHx8XG4gICAgbm9ybWFsaXplZC5lbmRzV2l0aCgnLXVzJykgfHxcbiAgICBub3JtYWxpemVkLmVuZHNXaXRoKCctbHInKSB8fFxuICAgIG5vcm1hbGl6ZWQuZW5kc1dpdGgoJy1tbScpXG4gICk7XG59XG5cbi8qKiBNaWxsaW1ldHJlcyBwZXIgb25lIHVuaXQgb2YgdGhlIGdpdmVuIGFyZWEgdW5pdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bml0RmFjdG9yTW0odW5pdDogQXJlYVVuaXQgfCBzdHJpbmcgPSAnbW0nKTogbnVtYmVyIHtcbiAgc3dpdGNoIChub3JtYWxpc2VBcmVhVW5pdCh1bml0KSkge1xuICAgIGNhc2UgJ2NtJzpcbiAgICAgIHJldHVybiBNTV9QRVJfQ007XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gTU1fUEVSX007XG4gICAgY2FzZSAnaW4nOlxuICAgICAgcmV0dXJuIE1NX1BFUl9JTkNIO1xuICAgIGNhc2UgJ2Z0JzpcbiAgICAgIHJldHVybiBNTV9QRVJfRk9PVDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuLyoqIEBkZXByZWNhdGVkIHVzZSB1bml0RmFjdG9yTW0gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXRyaWNVbml0RmFjdG9yKHVuaXQ6IEFyZWFVbml0ID0gJ21tJyk6IG51bWJlciB7XG4gIHJldHVybiB1bml0RmFjdG9yTW0odW5pdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtbVRvVW5pdChtbTogbnVtYmVyLCB1bml0OiBBcmVhVW5pdCB8IHN0cmluZyA9ICdtbScpOiBudW1iZXIge1xuICByZXR1cm4gbW0gLyB1bml0RmFjdG9yTW0odW5pdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bml0VG9NbSh2YWx1ZTogbnVtYmVyLCB1bml0OiBBcmVhVW5pdCB8IHN0cmluZyA9ICdtbScpOiBudW1iZXIge1xuICByZXR1cm4gdmFsdWUgKiB1bml0RmFjdG9yTW0odW5pdCk7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCB1c2UgbW1Ub1VuaXQgKi9cbmV4cG9ydCBmdW5jdGlvbiBtbVRvTWV0cmljRGlzcGxheShtbTogbnVtYmVyLCB1bml0OiBBcmVhVW5pdCA9ICdtbScpOiBudW1iZXIge1xuICByZXR1cm4gbW1Ub1VuaXQobW0sIHVuaXQpO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgdXNlIHVuaXRUb01tICovXG5leHBvcnQgZnVuY3Rpb24gbWV0cmljRGlzcGxheVRvTW0odmFsdWU6IG51bWJlciwgdW5pdDogQXJlYVVuaXQgPSAnbW0nKTogbnVtYmVyIHtcbiAgcmV0dXJuIHVuaXRUb01tKHZhbHVlLCB1bml0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1tVG9JbmNoZXMobW06IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBtbSAvIE1NX1BFUl9JTkNIO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jaGVzVG9NbShpbmNoZXM6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBpbmNoZXMgKiBNTV9QRVJfSU5DSDtcbn1cblxuLyoqXG4gKiBVbml0IHNob3duIGZvciB0aGUgY3VycmVudCBidXllciBtb2RhbGl0eS5cbiAqIE1ldHJpYyDihpIgZmllbGQgdW5pdCBpZiBtZXRyaWMsIGVsc2UgbW0uXG4gKiBJbXBlcmlhbCDihpIgZmllbGQgdW5pdCBpZiBpbXBlcmlhbCwgZWxzZSBpbmNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY3RpdmVEaXNwbGF5VW5pdChcbiAgbW9kYWxpdHk6IERpc3BsYXlNb2RhbGl0eSxcbiAgYXJlYVVuaXQ6IEFyZWFVbml0IHwgc3RyaW5nID0gJ21tJ1xuKTogQXJlYVVuaXQge1xuICBjb25zdCB1bml0ID0gbm9ybWFsaXNlQXJlYVVuaXQoYXJlYVVuaXQpO1xuICBpZiAobW9kYWxpdHkgPT09ICdpbXBlcmlhbCcpIHtcbiAgICByZXR1cm4gaXNJbXBlcmlhbFVuaXQodW5pdCkgPyB1bml0IDogJ2luJztcbiAgfVxuICByZXR1cm4gaXNJbXBlcmlhbFVuaXQodW5pdCkgPyAnbW0nIDogdW5pdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRNb2RhbGl0eUZvckFyZWFVbml0KFxuICBhcmVhVW5pdDogQXJlYVVuaXQgfCBzdHJpbmcgPSAnbW0nXG4pOiBEaXNwbGF5TW9kYWxpdHkge1xuICBpZiAoaXNJbXBlcmlhbFVuaXQoYXJlYVVuaXQpKSByZXR1cm4gJ2ltcGVyaWFsJztcbiAgcmV0dXJuIGxvY2FsZVByZWZlcnNJbXBlcmlhbCgpID8gJ2ltcGVyaWFsJyA6ICdtZXRyaWMnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW1Ub0Rpc3BsYXkoXG4gIG1tOiBudW1iZXIsXG4gIG1vZGFsaXR5OiBEaXNwbGF5TW9kYWxpdHksXG4gIGFyZWFVbml0OiBBcmVhVW5pdCB8IHN0cmluZyA9ICdtbSdcbik6IG51bWJlciB7XG4gIHJldHVybiBtbVRvVW5pdChtbSwgYWN0aXZlRGlzcGxheVVuaXQobW9kYWxpdHksIGFyZWFVbml0KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5VG9NbShcbiAgdmFsdWU6IG51bWJlcixcbiAgbW9kYWxpdHk6IERpc3BsYXlNb2RhbGl0eSxcbiAgYXJlYVVuaXQ6IEFyZWFVbml0IHwgc3RyaW5nID0gJ21tJ1xuKTogbnVtYmVyIHtcbiAgcmV0dXJuIHVuaXRUb01tKHZhbHVlLCBhY3RpdmVEaXNwbGF5VW5pdChtb2RhbGl0eSwgYXJlYVVuaXQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaXRMYWJlbChcbiAgbW9kYWxpdHk6IERpc3BsYXlNb2RhbGl0eSxcbiAgYXJlYVVuaXQ6IEFyZWFVbml0IHwgc3RyaW5nID0gJ21tJ1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGFjdGl2ZURpc3BsYXlVbml0KG1vZGFsaXR5LCBhcmVhVW5pdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0QXJlYVN0ZXAodW5pdDogQXJlYVVuaXQgfCBzdHJpbmcgPSAnbW0nKTogbnVtYmVyIHtcbiAgc3dpdGNoIChub3JtYWxpc2VBcmVhVW5pdCh1bml0KSkge1xuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIDAuMDAxO1xuICAgIGNhc2UgJ2NtJzpcbiAgICAgIHJldHVybiAwLjE7XG4gICAgY2FzZSAnaW4nOlxuICAgICAgcmV0dXJuIDAuMTI1O1xuICAgIGNhc2UgJ2Z0JzpcbiAgICAgIHJldHVybiAwLjAxO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMTtcbiAgfVxufVxuXG4vKipcbiAqIFN0ZXAgZm9yIGlucHV0cy9zbGlkZXJzIGluIHRoZSBjdXJyZW50IGRpc3BsYXkgdW5pdC5cbiAqIGBzdGVwTW1gIGlzIHRoZSBhZG1pbi1jb25maWd1cmVkIHN0ZXAgc3RvcmVkIGluIG1pbGxpbWV0cmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RlcEluRGlzcGxheVVuaXQoXG4gIHN0ZXBNbTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgbW9kYWxpdHk6IERpc3BsYXlNb2RhbGl0eSxcbiAgYXJlYVVuaXQ6IEFyZWFVbml0IHwgc3RyaW5nID0gJ21tJ1xuKTogbnVtYmVyIHtcbiAgY29uc3QgdW5pdCA9IGFjdGl2ZURpc3BsYXlVbml0KG1vZGFsaXR5LCBhcmVhVW5pdCk7XG4gIGNvbnN0IHJhdyA9IE51bWJlcihzdGVwTW0pO1xuICBpZiAoTnVtYmVyLmlzRmluaXRlKHJhdykgJiYgcmF3ID4gMCkge1xuICAgIHJldHVybiByYXcgLyB1bml0RmFjdG9yTW0odW5pdCk7XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRBcmVhU3RlcCh1bml0KTtcbn1cblxuZnVuY3Rpb24gZGVjaW1hbHNGb3JVbml0KHVuaXQ6IEFyZWFVbml0KTogbnVtYmVyIHtcbiAgaWYgKHVuaXQgPT09ICdtJykgcmV0dXJuIDQ7XG4gIGlmICh1bml0ID09PSAnZnQnKSByZXR1cm4gMztcbiAgaWYgKHVuaXQgPT09ICdpbicgfHwgdW5pdCA9PT0gJ2NtJykgcmV0dXJuIDI7XG4gIHJldHVybiAyO1xufVxuXG4vKiogRm9ybWF0IGEgbGVuZ3RoIGluIG1tIGZvciBidXllci1mYWNpbmcgc3VtbWFyeS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRMZW5ndGhGcm9tTW0oXG4gIG1tOiBudW1iZXIsXG4gIG1vZGFsaXR5OiBEaXNwbGF5TW9kYWxpdHksXG4gIGFyZWFVbml0OiBBcmVhVW5pdCB8IHN0cmluZyA9ICdtbSdcbik6IHN0cmluZyB7XG4gIGNvbnN0IHVuaXQgPSBhY3RpdmVEaXNwbGF5VW5pdChtb2RhbGl0eSwgYXJlYVVuaXQpO1xuICBpZiAodW5pdCA9PT0gJ2Z0Jykge1xuICAgIGNvbnN0IGZlZXQgPSBtbVRvVW5pdChtbSwgJ2Z0Jyk7XG4gICAgcmV0dXJuIGAke3RyaW1OdW0oTnVtYmVyKGZlZXQudG9GaXhlZCgzKSkpfSBmdGA7XG4gIH1cbiAgaWYgKHVuaXQgPT09ICdpbicpIHtcbiAgICBjb25zdCBpbmNoZXMgPSBtbVRvSW5jaGVzKG1tKTtcbiAgICBpZiAoaW5jaGVzID49IDEyKSB7XG4gICAgICBjb25zdCBmZWV0ID0gTWF0aC5mbG9vcihpbmNoZXMgLyAxMik7XG4gICAgICBjb25zdCByZW0gPSBpbmNoZXMgLSBmZWV0ICogMTI7XG4gICAgICBpZiAocmVtIDwgMC4wNSkgcmV0dXJuIGAke2ZlZXR9IGZ0YDtcbiAgICAgIHJldHVybiBgJHtmZWV0fSBmdCAke3RyaW1OdW0oTnVtYmVyKHJlbS50b0ZpeGVkKDIpKSl9IGluYDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RyaW1OdW0oTnVtYmVyKGluY2hlcy50b0ZpeGVkKDIpKSl9IGluYDtcbiAgfVxuICBjb25zdCBkaXNwbGF5ID0gbW1Ub1VuaXQobW0sIHVuaXQpO1xuICByZXR1cm4gYCR7dHJpbU51bShOdW1iZXIoZGlzcGxheS50b0ZpeGVkKGRlY2ltYWxzRm9yVW5pdCh1bml0KSkpKX0gJHt1bml0fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRBcmVhUGFydHMoXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBtb2RhbGl0eTogRGlzcGxheU1vZGFsaXR5ID0gJ21ldHJpYycsXG4gIGFyZWFVbml0OiBBcmVhVW5pdCB8IHN0cmluZyA9ICdtbSdcbik6IHsgd2lkdGg6IHN0cmluZzsgaGVpZ2h0OiBzdHJpbmc7IGFyZWFMYWJlbDogc3RyaW5nIH0gfCBudWxsIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VBcmVhVmFsdWUodmFsdWUpO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHsgaGVpZ2h0TW0sIHdpZHRoTW0gfSA9IHBhcnNlZDtcbiAgY29uc3QgaGVpZ2h0ID0gZm9ybWF0TGVuZ3RoRnJvbU1tKGhlaWdodE1tLCBtb2RhbGl0eSwgYXJlYVVuaXQpO1xuICBjb25zdCB3aWR0aCA9IGZvcm1hdExlbmd0aEZyb21NbSh3aWR0aE1tLCBtb2RhbGl0eSwgYXJlYVVuaXQpO1xuICBjb25zdCBhcmVhTW0yID0gaGVpZ2h0TW0gKiB3aWR0aE1tO1xuICBjb25zdCB1bml0ID0gYWN0aXZlRGlzcGxheVVuaXQobW9kYWxpdHksIGFyZWFVbml0KTtcbiAgbGV0IGFyZWFMYWJlbDogc3RyaW5nO1xuICBpZiAodW5pdCA9PT0gJ2Z0Jykge1xuICAgIGNvbnN0IHNxRnQgPSBhcmVhTW0yIC8gKE1NX1BFUl9GT09UICogTU1fUEVSX0ZPT1QpO1xuICAgIGFyZWFMYWJlbCA9IGAke3RyaW1OdW0oTnVtYmVyKHNxRnQudG9GaXhlZCgzKSkpfSBzcSBmdGA7XG4gIH0gZWxzZSBpZiAodW5pdCA9PT0gJ2luJykge1xuICAgIGNvbnN0IHNxSW4gPSBhcmVhTW0yIC8gKE1NX1BFUl9JTkNIICogTU1fUEVSX0lOQ0gpO1xuICAgIGlmIChzcUluID49IDE0NCkge1xuICAgICAgYXJlYUxhYmVsID0gYCR7dHJpbU51bShOdW1iZXIoKHNxSW4gLyAxNDQpLnRvRml4ZWQoMykpKX0gc3EgZnRgO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmVhTGFiZWwgPSBgJHt0cmltTnVtKE51bWJlcihzcUluLnRvRml4ZWQoMikpKX0gc3EgaW5gO1xuICAgIH1cbiAgfSBlbHNlIGlmICh1bml0ID09PSAnbScpIHtcbiAgICBhcmVhTGFiZWwgPSBgJHt0cmltTnVtKE51bWJlcigoYXJlYU1tMiAvIDFfMDAwXzAwMCkudG9GaXhlZCg0KSkpfSBtwrJgO1xuICB9IGVsc2UgaWYgKHVuaXQgPT09ICdjbScpIHtcbiAgICBhcmVhTGFiZWwgPSBgJHt0cmltTnVtKE51bWJlcigoYXJlYU1tMiAvIDEwMCkudG9GaXhlZCgyKSkpfSBjbcKyYDtcbiAgfSBlbHNlIHtcbiAgICBhcmVhTGFiZWwgPSBgJHt0cmltTnVtKE51bWJlcihhcmVhTW0yLnRvRml4ZWQoMikpKX0gbW3CsmA7XG4gIH1cbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgYXJlYUxhYmVsIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRBcmVhU3VtbWFyeShcbiAgdmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG1vZGFsaXR5OiBEaXNwbGF5TW9kYWxpdHkgPSAnbWV0cmljJyxcbiAgYXJlYVVuaXQ6IEFyZWFVbml0IHwgc3RyaW5nID0gJ21tJ1xuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHBhcnRzID0gZm9ybWF0QXJlYVBhcnRzKHZhbHVlLCBtb2RhbGl0eSwgYXJlYVVuaXQpO1xuICBpZiAoIXBhcnRzKSByZXR1cm4gbnVsbDtcbiAgLy8gV2lkdGggw5cgaGVpZ2h0IChsYW5kc2NhcGUtZmlyc3QpIHRvIG1hdGNoIHRoZSBidXllciBjb250cm9sIG9yZGVyLlxuICByZXR1cm4gYFdpZHRoICR7cGFydHMud2lkdGh9IMOXIEhlaWdodCAke3BhcnRzLmhlaWdodH0gKCR7cGFydHMuYXJlYUxhYmVsfSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAobjogbnVtYmVyLCBtaW4/OiBudW1iZXIgfCBudWxsLCBtYXg/OiBudW1iZXIgfCBudWxsKTogbnVtYmVyIHtcbiAgbGV0IHYgPSBuO1xuICBpZiAobWluICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKG1pbikpIHYgPSBNYXRoLm1heCh2LCBtaW4pO1xuICBpZiAobWF4ICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKG1heCkpIHYgPSBNYXRoLm1pbih2LCBtYXgpO1xuICByZXR1cm4gdjtcbn1cblxuLyoqXG4gKiBDbGllbnQtc2lkZSBBcmVhIGNvc3QgZXN0aW1hdGUgKHByZS1kaXNjb3VudCksIG1hdGNoaW5nIEFQSSBmb3JtdWxhOlxuICogb25jZU9mZiA9IGhlaWdodENvc3Qgw5cgd2lkdGhDb3N0IMOXIGhlaWdodF91IMOXIHdpZHRoX3VcbiAqIHVuaXRDb3N0ID0gaGVpZ2h0VW5pdCDDlyB3aWR0aFVuaXQgw5cgaGVpZ2h0X3Ugw5cgd2lkdGhfdVxuICogKGRpbWVuc2lvbnMgZXhwcmVzc2VkIGluIHRoZSBmaWVsZCdzIGFyZWFVbml0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXN0aW1hdGVBcmVhQ29zdHMoXG4gIHZhcmlhdGlvbkZpZWxkOiBhbnksXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiB7IG9uY2VPZmZDb3N0OiBudW1iZXI7IHVuaXRDb3N0OiBudW1iZXIgfSB8IG51bGwge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUFyZWFWYWx1ZSh2YWx1ZSk7XG4gIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJlYVVuaXQgPSBub3JtYWxpc2VBcmVhVW5pdChcbiAgICB2YXJpYXRpb25GaWVsZD8uYXJlYVVuaXQgPz8gdmFyaWF0aW9uRmllbGQ/LmFyZWFfdW5pdCA/PyAnbW0nXG4gICk7XG4gIGNvbnN0IGhlaWdodFUgPSBtbVRvVW5pdChwYXJzZWQuaGVpZ2h0TW0sIGFyZWFVbml0KTtcbiAgY29uc3Qgd2lkdGhVID0gbW1Ub1VuaXQocGFyc2VkLndpZHRoTW0sIGFyZWFVbml0KTtcbiAgY29uc3QgYXJlYSA9IGhlaWdodFUgKiB3aWR0aFU7XG4gIGNvbnN0IGhlaWdodENvc3QgPSBOdW1iZXIoXG4gICAgdmFyaWF0aW9uRmllbGQ/LmhlaWdodFZhcmlhdGlvbkNvc3QgPz9cbiAgICAgIHZhcmlhdGlvbkZpZWxkPy5oZWlnaHRfdmFyaWF0aW9uX2Nvc3RcbiAgKSB8fCAwO1xuICBjb25zdCB3aWR0aENvc3QgPSBOdW1iZXIoXG4gICAgdmFyaWF0aW9uRmllbGQ/LndpZHRoVmFyaWF0aW9uQ29zdCA/PyB2YXJpYXRpb25GaWVsZD8ud2lkdGhfdmFyaWF0aW9uX2Nvc3RcbiAgKSB8fCAwO1xuICBjb25zdCBoZWlnaHRVbml0ID0gTnVtYmVyKFxuICAgIHZhcmlhdGlvbkZpZWxkPy5oZWlnaHRWYXJpYXRpb25Vbml0Q29zdCA/P1xuICAgICAgdmFyaWF0aW9uRmllbGQ/LmhlaWdodF92YXJpYXRpb25fdW5pdF9jb3N0XG4gICkgfHwgMDtcbiAgY29uc3Qgd2lkdGhVbml0ID0gTnVtYmVyKFxuICAgIHZhcmlhdGlvbkZpZWxkPy53aWR0aFZhcmlhdGlvblVuaXRDb3N0ID8/XG4gICAgICB2YXJpYXRpb25GaWVsZD8ud2lkdGhfdmFyaWF0aW9uX3VuaXRfY29zdFxuICApIHx8IDA7XG4gIGNvbnN0IG9uY2VPZmZDb3N0ID0gaGVpZ2h0Q29zdCAqIHdpZHRoQ29zdCAqIGFyZWE7XG4gIGNvbnN0IHVuaXRDb3N0ID0gaGVpZ2h0VW5pdCAqIHdpZHRoVW5pdCAqIGFyZWE7XG4gIGlmICghKG9uY2VPZmZDb3N0ID4gMCkgJiYgISh1bml0Q29zdCA+IDApKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBvbmNlT2ZmQ29zdDogTnVtYmVyKG9uY2VPZmZDb3N0LnRvRml4ZWQoMykpLFxuICAgIHVuaXRDb3N0OiBOdW1iZXIodW5pdENvc3QudG9GaXhlZCgzKSksXG4gIH07XG59XG5cbi8qKlxuICogS2VlcCB3aWR0aC9oZWlnaHQgbGlua2VkIGJ5IGFzcGVjdFJhdGlvICh3aWR0aC9oZWlnaHQpLlxuICogYGNoYW5nZWRgIGluZGljYXRlcyB3aGljaCBkaW1lbnNpb24gdGhlIHVzZXIgZWRpdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhbXBXaXRoQXNwZWN0UmF0aW8oYXJnczoge1xuICBoZWlnaHRNbTogbnVtYmVyO1xuICB3aWR0aE1tOiBudW1iZXI7XG4gIGNoYW5nZWQ6ICdoZWlnaHQnIHwgJ3dpZHRoJztcbiAgYXNwZWN0UmF0aW86IG51bWJlcjtcbiAgaGVpZ2h0TWluPzogbnVtYmVyIHwgbnVsbDtcbiAgaGVpZ2h0TWF4PzogbnVtYmVyIHwgbnVsbDtcbiAgd2lkdGhNaW4/OiBudW1iZXIgfCBudWxsO1xuICB3aWR0aE1heD86IG51bWJlciB8IG51bGw7XG59KTogeyBoZWlnaHRNbTogbnVtYmVyOyB3aWR0aE1tOiBudW1iZXIgfSB7XG4gIGNvbnN0IHJhdGlvID0gYXJncy5hc3BlY3RSYXRpbztcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmF0aW8pIHx8IHJhdGlvIDw9IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0TW06IGNsYW1wKGFyZ3MuaGVpZ2h0TW0sIGFyZ3MuaGVpZ2h0TWluLCBhcmdzLmhlaWdodE1heCksXG4gICAgICB3aWR0aE1tOiBjbGFtcChhcmdzLndpZHRoTW0sIGFyZ3Mud2lkdGhNaW4sIGFyZ3Mud2lkdGhNYXgpLFxuICAgIH07XG4gIH1cblxuICBsZXQgaGVpZ2h0TW0gPSBhcmdzLmhlaWdodE1tO1xuICBsZXQgd2lkdGhNbSA9IGFyZ3Mud2lkdGhNbTtcblxuICBpZiAoYXJncy5jaGFuZ2VkID09PSAnaGVpZ2h0Jykge1xuICAgIGhlaWdodE1tID0gY2xhbXAoaGVpZ2h0TW0sIGFyZ3MuaGVpZ2h0TWluLCBhcmdzLmhlaWdodE1heCk7XG4gICAgd2lkdGhNbSA9IGhlaWdodE1tICogcmF0aW87XG4gICAgd2lkdGhNbSA9IGNsYW1wKHdpZHRoTW0sIGFyZ3Mud2lkdGhNaW4sIGFyZ3Mud2lkdGhNYXgpO1xuICAgIGhlaWdodE1tID0gd2lkdGhNbSAvIHJhdGlvO1xuICAgIGhlaWdodE1tID0gY2xhbXAoaGVpZ2h0TW0sIGFyZ3MuaGVpZ2h0TWluLCBhcmdzLmhlaWdodE1heCk7XG4gICAgd2lkdGhNbSA9IGhlaWdodE1tICogcmF0aW87XG4gIH0gZWxzZSB7XG4gICAgd2lkdGhNbSA9IGNsYW1wKHdpZHRoTW0sIGFyZ3Mud2lkdGhNaW4sIGFyZ3Mud2lkdGhNYXgpO1xuICAgIGhlaWdodE1tID0gd2lkdGhNbSAvIHJhdGlvO1xuICAgIGhlaWdodE1tID0gY2xhbXAoaGVpZ2h0TW0sIGFyZ3MuaGVpZ2h0TWluLCBhcmdzLmhlaWdodE1heCk7XG4gICAgd2lkdGhNbSA9IGhlaWdodE1tICogcmF0aW87XG4gICAgd2lkdGhNbSA9IGNsYW1wKHdpZHRoTW0sIGFyZ3Mud2lkdGhNaW4sIGFyZ3Mud2lkdGhNYXgpO1xuICB9XG5cbiAgcmV0dXJuIHsgaGVpZ2h0TW0sIHdpZHRoTW0gfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBTUEsSUFBTUEsV0FBVyxHQUFHLElBQUk7QUFDeEIsSUFBTUMsV0FBVyxHQUFHLEtBQUs7QUFDekIsSUFBTUMsU0FBUyxHQUFHLEVBQUU7QUFDcEIsSUFBTUMsUUFBUSxHQUFHLElBQUk7QUFFckIsT0FBTyxTQUFTQyxjQUFjQSxDQUM1QkMsS0FBZ0MsRUFDYztFQUM5QyxJQUFJQSxLQUFLLElBQUksSUFBSSxFQUFFLE9BQU8sSUFBSTtFQUM5QixJQUFNQyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0YsS0FBSyxDQUFDLENBQUNHLElBQUksQ0FBQyxDQUFDO0VBQ2pDLElBQUksQ0FBQ0YsSUFBSSxFQUFFLE9BQU8sSUFBSTtFQUN0QixJQUFNRyxLQUFLLEdBQUdILElBQUksQ0FBQ0ksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxHQUFHLENBQUMsVUFBQ0MsQ0FBQztJQUFBLE9BQUtBLENBQUMsQ0FBQ0osSUFBSSxDQUFDLENBQUM7RUFBQSxFQUFDO0VBQ2xELElBQUlDLEtBQUssQ0FBQ0ksTUFBTSxLQUFLLENBQUMsRUFB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
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
var _excluded = ["json"];
|
|
3
|
+
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; }
|
|
4
|
+
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; }
|
|
5
|
+
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; }
|
|
6
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
7
|
+
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); }
|
|
8
|
+
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
9
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
10
|
+
/**
|
|
11
|
+
* Keep this helper free of @merchi/sdk so Jest can import it directly.
|
|
12
|
+
* The implementation must stay in sync with cleanFormVariationJson in utils.ts.
|
|
13
|
+
*/
|
|
14
|
+
export function cleanFormVariationJson(variation) {
|
|
15
|
+
var _fromJson, _fromJson2, _fromJson3;
|
|
16
|
+
var _ref = variation || {},
|
|
17
|
+
json = _ref.json,
|
|
18
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
19
|
+
var fromJson = null;
|
|
20
|
+
if (typeof json === 'string' && json && json !== 'undefined') {
|
|
21
|
+
try {
|
|
22
|
+
fromJson = JSON.parse(json);
|
|
23
|
+
} catch (_unused) {
|
|
24
|
+
fromJson = null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
var cleanVariation = _objectSpread(_objectSpread(_objectSpread({}, fromJson || {}), rest), {}, {
|
|
28
|
+
value: variation === null || variation === void 0 ? void 0 : variation.value,
|
|
29
|
+
variationFiles: (variation === null || variation === void 0 ? void 0 : variation.variationFiles) || rest.variationFiles || ((_fromJson = fromJson) === null || _fromJson === void 0 ? void 0 : _fromJson.variationFiles) || [],
|
|
30
|
+
variationField: rest.variationField || ((_fromJson2 = fromJson) === null || _fromJson2 === void 0 ? void 0 : _fromJson2.variationField),
|
|
31
|
+
selectableOptions: rest.selectableOptions || ((_fromJson3 = fromJson) === null || _fromJson3 === void 0 ? void 0 : _fromJson3.selectableOptions)
|
|
32
|
+
});
|
|
33
|
+
delete cleanVariation.id;
|
|
34
|
+
delete cleanVariation.variationArrayFieldId;
|
|
35
|
+
delete cleanVariation.json;
|
|
36
|
+
delete cleanVariation.groupId;
|
|
37
|
+
return cleanVariation;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbGVhbkZvcm1WYXJpYXRpb25Kc29uIiwidmFyaWF0aW9uIiwiX2Zyb21Kc29uIiwiX2Zyb21Kc29uMiIsIl9mcm9tSnNvbjMiLCJfcmVmIiwianNvbiIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJmcm9tSnNvbiIsIkpTT04iLCJwYXJzZSIsIl91bnVzZWQiLCJjbGVhblZhcmlhdGlvbiIsIl9vYmplY3RTcHJlYWQiLCJ2YWx1ZSIsInZhcmlhdGlvbkZpbGVzIiwidmFyaWF0aW9uRmllbGQiLCJzZWxlY3RhYmxlT3B0aW9ucyIsImlkIiwidmFyaWF0aW9uQXJyYXlGaWVsZElkIiwiZ3JvdXBJZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jbGVhbkZvcm1WYXJpYXRpb25Kc29uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogS2VlcCB0aGlzIGhlbHBlciBmcmVlIG9mIEBtZXJjaGkvc2RrIHNvIEplc3QgY2FuIGltcG9ydCBpdCBkaXJlY3RseS5cbiAqIFRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IHN0YXkgaW4gc3luYyB3aXRoIGNsZWFuRm9ybVZhcmlhdGlvbkpzb24gaW4gdXRpbHMudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkZvcm1WYXJpYXRpb25Kc29uKHZhcmlhdGlvbjogYW55KSB7XG4gIGNvbnN0IHsganNvbiwgLi4ucmVzdCB9ID0gdmFyaWF0aW9uIHx8IHt9O1xuICBsZXQgZnJvbUpzb246IGFueSA9IG51bGw7XG4gIGlmICh0eXBlb2YganNvbiA9PT0gJ3N0cmluZycgJiYganNvbiAmJiBqc29uICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRyeSB7XG4gICAgICBmcm9tSnNvbiA9IEpTT04ucGFyc2UoanNvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICBmcm9tSnNvbiA9IG51bGw7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNsZWFuVmFyaWF0aW9uOiBhbnkgPSB7XG4gICAgLi4uKGZyb21Kc29uIHx8IHt9KSxcbiAgICAuLi5yZXN0LFxuICAgIHZhbHVlOiB2YXJpYXRpb24/LnZhbHVlLFxuICAgIHZhcmlhdGlvbkZpbGVzOlxuICAgICAgdmFyaWF0aW9uPy52YXJpYXRpb25GaWxlcyB8fFxuICAgICAgcmVzdC52YXJpYXRpb25GaWxlcyB8fFxuICAgICAgZnJvbUpzb24/LnZhcmlhdGlvbkZpbGVzIHx8XG4gICAgICBbXSxcbiAgICB2YXJpYXRpb25GaWVsZDogcmVzdC52YXJpYXRpb25GaWVsZCB8fCBmcm9tSnNvbj8udmFyaWF0aW9uRmllbGQsXG4gICAgc2VsZWN0YWJsZU9wdGlvbnM6IHJlc3Quc2VsZWN0YWJsZU9wdGlvbnMgfHwgZnJvbUpzb24/LnNlbGVjdGFibGVPcHRpb25zLFxuICB9O1xuICBkZWxldGUgY2xlYW5WYXJpYXRpb24uaWQ7XG4gIGRlbGV0ZSBjbGVhblZhcmlhdGlvbi52YXJpYXRpb25BcnJheUZpZWxkSWQ7XG4gIGRlbGV0ZSBjbGVhblZhcmlhdGlvbi5qc29uO1xuICBkZWxldGUgY2xlYW5WYXJpYXRpb24uZ3JvdXBJZDtcbiAgcmV0dXJuIGNsZWFuVmFyaWF0aW9uO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0Esc0JBQXNCQSxDQUFDQyxTQUFjLEVBQUU7RUFBQSxJQUFBQyxTQUFBLEVBQUFDLFVBQUEsRUFBQUMsVUFBQTtFQUNyRCxJQUFBQyxJQUFBLEdBQTBCSixTQUFTLElBQUksQ0FBQyxDQUFDO0lBQWpDSyxJQUFJLEdBQUFELElBQUEsQ0FBSkMsSUFBSTtJQUFLQyxJQUFJLEdBQUFDLHdCQUFBLENBQUFILElBQUEsRUFBQUksU0FBQTtFQUNyQixJQUFJQyxRQUFhLEdBQUcsSUFBSTtFQUN4QixJQUFJLE9BQU9KLElBQUksS0FBSyxRQUFRLElBQUlBLElBQUksSUFBSUEsSUFBSSxLQUFLLFdBQVcsRUFBRTtJQUM1RCxJQUFJO01BQ0ZJLFFBQVEsR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNOLElBQUksQ0FBQztJQUM3QixDQUFDLENBQUMsT0FBQU8sT0FBQSxFQUFNO01BQ05ILFFBQVEsR0FBRyxJQUFJO0lBQ2pCO0VBQ0Y7RUFDQSxJQUFNSSxjQUFtQixHQUFBQyxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNuQkwsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUNmSCxJQUFJO0lBQ1BTLEtBQUssRUFBRWYsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUVlLEtBQUs7SUFDdkJDLGNBQWMsRUFDWixDQUFBaEIsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUVnQixjQUFjLEtBQ3pCVixJQUFJLENBQUNVLGNBQWMsTUFBQWYsU0FBQSxHQUNuQlEsUUFBUSxjQUFBUixTQUFBLHVCQUFSQSxTQUFBLENBQVVlLGNBQWMsS0FDeEIsRUFBRTtJQUNKQyxjQUFjLEVBQUVYLElBQUksQ0FBQ1csY0FBYyxNQUFBZixVQUFBLEdBQUlPLFFBQVEsY0FBQVAsVUFBQSx1QkFBUkEsVUFBQSxDQUFVZSxjQUFjO0lBQy9EQyxpQkFBaUIsRUFBRVosSUFBSSxDQUFDWSxpQkFBaUIsTUFBQWYsVUFBQSxHQUFJTSxRQUFRLGNBQUFOLFVBQUEsdUJBQVJBLFVBQUEsQ0FBVWUsaUJBQWlCO0VBQUEsRUFDekU7RUFDRCxPQUFPTCxjQUFjLENBQUNNLEVBQUU7RUFDeEIsT0FBT04sY0FBYyxDQUFDTyxxQkFBcUI7RUFDM0MsT0FBT1AsY0FBYyxDQUFDUixJQUFJO0VBQzFCLE9BQU9RLGNBQWMsQ0FBQ1EsT0FBTztFQUM3QixPQUFPUixjQUFjO0FBQ3ZCIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { cleanFormVariationJson } from './cleanFormVariationJson';
|
|
2
|
+
test('keeps live variationField when hidden json snapshot is incomplete', function () {
|
|
3
|
+
var cleaned = cleanFormVariationJson({
|
|
4
|
+
value: '200',
|
|
5
|
+
json: JSON.stringify({
|
|
6
|
+
value: '100',
|
|
7
|
+
selectableOptions: []
|
|
8
|
+
}),
|
|
9
|
+
variationField: {
|
|
10
|
+
id: 9,
|
|
11
|
+
name: 'Lanyard clip',
|
|
12
|
+
fieldType: 6
|
|
13
|
+
},
|
|
14
|
+
selectableOptions: [{
|
|
15
|
+
optionId: 200,
|
|
16
|
+
value: 'Trigger Clip'
|
|
17
|
+
}]
|
|
18
|
+
});
|
|
19
|
+
expect(cleaned.variationField).toEqual({
|
|
20
|
+
id: 9,
|
|
21
|
+
name: 'Lanyard clip',
|
|
22
|
+
fieldType: 6
|
|
23
|
+
});
|
|
24
|
+
expect(cleaned.selectableOptions).toEqual([{
|
|
25
|
+
optionId: 200,
|
|
26
|
+
value: 'Trigger Clip'
|
|
27
|
+
}]);
|
|
28
|
+
expect(cleaned.value).toBe('200');
|
|
29
|
+
expect(cleaned.json).toBeUndefined();
|
|
30
|
+
});
|
|
31
|
+
test('falls back to json snapshot when live metadata is missing', function () {
|
|
32
|
+
var cleaned = cleanFormVariationJson({
|
|
33
|
+
value: '200',
|
|
34
|
+
json: JSON.stringify({
|
|
35
|
+
value: '100',
|
|
36
|
+
variationField: {
|
|
37
|
+
id: 9,
|
|
38
|
+
fieldType: 6
|
|
39
|
+
},
|
|
40
|
+
selectableOptions: [{
|
|
41
|
+
optionId: 200
|
|
42
|
+
}]
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
expect(cleaned.variationField).toEqual({
|
|
46
|
+
id: 9,
|
|
47
|
+
fieldType: 6
|
|
48
|
+
});
|
|
49
|
+
expect(cleaned.selectableOptions).toEqual([{
|
|
50
|
+
optionId: 200
|
|
51
|
+
}]);
|
|
52
|
+
expect(cleaned.value).toBe('200');
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbGVhbkZvcm1WYXJpYXRpb25Kc29uIiwidGVzdCIsImNsZWFuZWQiLCJ2YWx1ZSIsImpzb24iLCJKU09OIiwic3RyaW5naWZ5Iiwic2VsZWN0YWJsZU9wdGlvbnMiLCJ2YXJpYXRpb25GaWVsZCIsImlkIiwibmFtZSIsImZpZWxkVHlwZSIsIm9wdGlvbklkIiwiZXhwZWN0IiwidG9FcXVhbCIsInRvQmUiLCJ0b0JlVW5kZWZpbmVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NsZWFuRm9ybVZhcmlhdGlvbkpzb24udGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbGVhbkZvcm1WYXJpYXRpb25Kc29uIH0gZnJvbSAnLi9jbGVhbkZvcm1WYXJpYXRpb25Kc29uJztcblxudGVzdCgna2VlcHMgbGl2ZSB2YXJpYXRpb25GaWVsZCB3aGVuIGhpZGRlbiBqc29uIHNuYXBzaG90IGlzIGluY29tcGxldGUnLCAoKSA9PiB7XG4gIGNvbnN0IGNsZWFuZWQgPSBjbGVhbkZvcm1WYXJpYXRpb25Kc29uKHtcbiAgICB2YWx1ZTogJzIwMCcsXG4gICAganNvbjogSlNPTi5zdHJpbmdpZnkoeyB2YWx1ZTogJzEwMCcsIHNlbGVjdGFibGVPcHRpb25zOiBbXSB9KSxcbiAgICB2YXJpYXRpb25GaWVsZDogeyBpZDogOSwgbmFtZTogJ0xhbnlhcmQgY2xpcCcsIGZpZWxkVHlwZTogNiB9LFxuICAgIHNlbGVjdGFibGVPcHRpb25zOiBbeyBvcHRpb25JZDogMjAwLCB2YWx1ZTogJ1RyaWdnZXIgQ2xpcCcgfV0sXG4gIH0pO1xuXG4gIGV4cGVjdChjbGVhbmVkLnZhcmlhdGlvbkZpZWxkKS50b0VxdWFsKHtcbiAgICBpZDogOSxcbiAgICBuYW1lOiAnTGFueWFyZCBjbGlwJyxcbiAgICBmaWVsZFR5cGU6IDYsXG4gIH0pO1xuICBleHBlY3QoY2xlYW5lZC5zZWxlY3RhYmxlT3B0aW9ucykudG9FcXVhbChbXG4gICAgeyBvcHRpb25JZDogMjAwLCB2YWx1ZTogJ1RyaWdnZXIgQ2xpcCcgfSxcbiAgXSk7XG4gIGV4cGVjdChjbGVhbmVkLnZhbHVlKS50b0JlKCcyMDAnKTtcbiAgZXhwZWN0KGNsZWFuZWQuanNvbikudG9CZVVuZGVmaW5lZCgpO1xufSk7XG5cbnRlc3QoJ2ZhbGxzIGJhY2sgdG8ganNvbiBzbmFwc2hvdCB3aGVuIGxpdmUgbWV0YWRhdGEgaXMgbWlzc2luZycsICgpID0+IHtcbiAgY29uc3QgY2xlYW5lZCA9IGNsZWFuRm9ybVZhcmlhdGlvbkpzb24oe1xuICAgIHZhbHVlOiAnMjAwJyxcbiAgICBqc29uOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICB2YWx1ZTogJzEwMCcsXG4gICAgICB2YXJpYXRpb25GaWVsZDogeyBpZDogOSwgZmllbGRUeXBlOiA2IH0sXG4gICAgICBzZWxlY3RhYmxlT3B0aW9uczogW3sgb3B0aW9uSWQ6IDIwMCB9XSxcbiAgICB9KSxcbiAgfSk7XG5cbiAgZXhwZWN0KGNsZWFuZWQudmFyaWF0aW9uRmllbGQpLnRvRXF1YWwoeyBpZDogOSwgZmllbGRUeXBlOiA2IH0pO1xuICBleHBlY3QoY2xlYW5lZC5zZWxlY3RhYmxlT3B0aW9ucykudG9FcXVhbChbeyBvcHRpb25JZDogMjAwIH1dKTtcbiAgZXhwZWN0KGNsZWFuZWQudmFsdWUpLnRvQmUoJzIwMCcpO1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLHNCQUFzQixRQUFRLDBCQUEwQjtBQUVqRUMsSUFBSSxDQUFDLG1FQUFtRSxFQUFFLFlBQU07RUFDOUUsSUFBTUMsT0FBTyxHQUFHRixzQkFBc0IsQ0FBQztJQUNyQ0csS0FBSyxFQUFFLEtBQUs7SUFDWkMsSUFBSSxFQUFFQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztNQUFFSCxLQUFLLEVBQUUsS0FBSztNQUFFSSxpQkFBaUIsRUFBRTtJQUFHLENBQUMsQ0FBQztJQUM3REMsY0FBYyxFQUFFO01BQUVDLEVBQUUsRUFBRSxDQUFDO01BQUVDLElBQUksRUFBRSxjQUFjO01BQUVDLFNBQVMsRUFBRTtJQUFFLENBQUM7SUFDN0RKLGlCQUFpQixFQUFFLENBQUM7TUFBRUssUUFBUSxFQUFFLEdBQUc7TUFBRVQsS0FBSyxFQUFFO0lBQWUsQ0FBQztFQUM5RCxDQUFDLENBQUM7RUFFRlUsTUFBTSxDQUFDWCxPQUFPLENBQUNNLGNBQWMsQ0FBQyxDQUFDTSxPQUFPLENBQUM7SUFDckNMLEVBQUUsRUFBRSxDQUFDO0lBQ0xDLElBQUksRUFBRSxjQUFjO0lBQ3BCQyxTQUFTLEVBQUU7RUFDYixDQUFDLENBQUM7RUFDRkUsTUFBTSxDQUFDWCxPQUFPLENBQUNLLGlCQUFpQixDQUFDLENBQUNPLE9BQU8sQ0FBQyxDQUN4QztJQUFFRixRQUFRLEVBQUUsR0FBRztJQUFFVCxLQUFLLEVBQUU7RUFBZSxDQUFDLENBQ3pDLENBQUM7RUFDRlUsTUFBTSxDQUFDWCxPQUFPLENBQUNDLEtBQUssQ0FBQyxDQUFDWSxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2pDRixNQUFNLENBQUNYLE9BQU8sQ0FBQ0UsSUFBSSxDQUFDLENBQUNZLGFBQWEsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGZixJQUFJLENBQUMsMkRBQTJELEVBQUUsWUFBTTtFQUN0RSxJQUFNQyxPQUFPLEdBQUdGLHNCQUFzQixDQUFDO0lBQ3JDRyxLQUFLLEVBQUUsS0FBSztJQUNaQyxJQUFJLEVBQUVDLElBQUksQ0FBQ0MsU0FBUyxDQUFDO01BQ25CSCxLQUFLLEVBQUUsS0FBSztNQUNaSyxjQUFjLEVBQUU7UUFBRUMsRUFBRSxFQUFFLENBQUM7UUFBRUUsU0FBUyxFQUFFO01BQUUsQ0FBQztNQUN2Q0osaUJBQWlCLEVBQUUsQ0FBQztRQUFFSyxRQUFRLEVBQUU7TUFBSSxDQUFDO0lBQ3ZDLENBQUM7RUFDSCxDQUFDLENBQUM7RUFFRkMsTUFBTSxDQUFDWCxPQUFPLENBQUNNLGNBQWMsQ0FBQyxDQUFDTSxPQUFPLENBQUM7SUFBRUwsRUFBRSxFQUFFLENBQUM7SUFBRUUsU0FBUyxFQUFFO0VBQUUsQ0FBQyxDQUFDO0VBQy9ERSxNQUFNLENBQUNYLE9BQU8sQ0FBQ0ssaUJBQWlCLENBQUMsQ0FBQ08sT0FBTyxDQUFDLENBQUM7SUFBRUYsUUFBUSxFQUFFO0VBQUksQ0FBQyxDQUFDLENBQUM7RUFDOURDLE1BQU0sQ0FBQ1gsT0FBTyxDQUFDQyxLQUFLLENBQUMsQ0FBQ1ksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const isoCountries: any;
|
|
2
|
+
export declare function getCountryName(countryCode: any): any;
|
|
3
|
+
export declare const countryDefaultDict: (currency: string) => {
|
|
4
|
+
currency: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const supportedCountryDefaults: any;
|
|
7
|
+
export declare const supportedCountryDefaultsWithDefault: (countryCode: any) => any;
|