@merchi/checkout 1.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +196 -0
  2. package/lib/actions/confirm.d.ts +2 -0
  3. package/lib/actions/confirm.js +85 -0
  4. package/lib/actions/customer.d.ts +2 -0
  5. package/lib/actions/customer.js +53 -0
  6. package/lib/actions/domain.d.ts +2 -0
  7. package/lib/actions/domain.js +65 -0
  8. package/lib/actions/files.d.ts +1 -0
  9. package/lib/actions/files.js +35 -0
  10. package/lib/actions/helpers.d.ts +19 -0
  11. package/lib/actions/helpers.js +125 -0
  12. package/lib/actions/invoice.d.ts +3 -0
  13. package/lib/actions/invoice.js +113 -0
  14. package/lib/area.d.ts +77 -0
  15. package/lib/area.js +298 -0
  16. package/lib/assets/merchi-monster-loader.gif +0 -0
  17. package/lib/checkoutSession.d.ts +32 -0
  18. package/lib/checkoutSession.js +151 -0
  19. package/lib/components/Alerts.d.ts +3 -0
  20. package/lib/components/Alerts.js +88 -0
  21. package/lib/components/CancelOrderConfirmModal.d.ts +10 -0
  22. package/lib/components/CancelOrderConfirmModal.js +50 -0
  23. package/lib/components/CheckoutSummaryFields.d.ts +11 -0
  24. package/lib/components/CheckoutSummaryFields.js +38 -0
  25. package/lib/components/Collapse.d.ts +3 -0
  26. package/lib/components/Collapse.js +34 -0
  27. package/lib/components/CustomerCheckoutMethodTabs.d.ts +6 -0
  28. package/lib/components/CustomerCheckoutMethodTabs.js +90 -0
  29. package/lib/components/DiscountInputGroup.d.ts +2 -0
  30. package/lib/components/DiscountInputGroup.js +256 -0
  31. package/lib/components/DraftImageUploaded.d.ts +8 -0
  32. package/lib/components/DraftImageUploaded.js +53 -0
  33. package/lib/components/FooterButtons.d.ts +11 -0
  34. package/lib/components/FooterButtons.js +28 -0
  35. package/lib/components/InvoiceInfo.d.ts +6 -0
  36. package/lib/components/InvoiceInfo.js +37 -0
  37. package/lib/components/JobInfoContent.d.ts +2 -0
  38. package/lib/components/JobInfoContent.js +728 -0
  39. package/lib/components/MerchiCheckout.d.ts +46 -0
  40. package/lib/components/MerchiCheckout.js +49 -0
  41. package/lib/components/MerchiCheckoutProvider.d.ts +167 -0
  42. package/lib/components/MerchiCheckoutProvider.js +569 -0
  43. package/lib/components/MerchiCheckoutTabs.d.ts +2 -0
  44. package/lib/components/MerchiCheckoutTabs.js +50 -0
  45. package/lib/components/TabPane.d.ts +7 -0
  46. package/lib/components/TabPane.js +21 -0
  47. package/lib/components/TabPaneAddress.d.ts +3 -0
  48. package/lib/components/TabPaneAddress.js +28 -0
  49. package/lib/components/TabPaneConfirm.d.ts +11 -0
  50. package/lib/components/TabPaneConfirm.js +288 -0
  51. package/lib/components/TabPaneContainer.d.ts +6 -0
  52. package/lib/components/TabPaneContainer.js +13 -0
  53. package/lib/components/TabPaneCustomer.d.ts +5 -0
  54. package/lib/components/TabPaneCustomer.js +93 -0
  55. package/lib/components/TabPaneNewDomain.d.ts +3 -0
  56. package/lib/components/TabPaneNewDomain.js +39 -0
  57. package/lib/components/TabPanePayment.d.ts +3 -0
  58. package/lib/components/TabPanePayment.js +99 -0
  59. package/lib/components/TabPaneSubmitted.d.ts +3 -0
  60. package/lib/components/TabPaneSubmitted.js +90 -0
  61. package/lib/components/TitleStep.d.ts +6 -0
  62. package/lib/components/TitleStep.js +24 -0
  63. package/lib/components/buttons/ButtonInvoiceDownload.d.ts +3 -0
  64. package/lib/components/buttons/ButtonInvoiceDownload.js +91 -0
  65. package/lib/components/buttons/ButtonNext.d.ts +10 -0
  66. package/lib/components/buttons/ButtonNext.js +48 -0
  67. package/lib/components/buttons/ButtonPrevious.d.ts +7 -0
  68. package/lib/components/buttons/ButtonPrevious.js +36 -0
  69. package/lib/components/buttons/index.d.ts +3 -0
  70. package/lib/components/buttons/index.js +4 -0
  71. package/lib/components/currency.d.ts +5 -0
  72. package/lib/components/currency.js +223 -0
  73. package/lib/components/forms/CheckboxBillingAddressSameAsShippingAddress.d.ts +7 -0
  74. package/lib/components/forms/CheckboxBillingAddressSameAsShippingAddress.js +22 -0
  75. package/lib/components/forms/FormAddresses.d.ts +6 -0
  76. package/lib/components/forms/FormAddresses.js +251 -0
  77. package/lib/components/forms/FormCustomerNew.d.ts +4 -0
  78. package/lib/components/forms/FormCustomerNew.js +197 -0
  79. package/lib/components/forms/FormCustomerReturning.d.ts +3 -0
  80. package/lib/components/forms/FormCustomerReturning.js +147 -0
  81. package/lib/components/forms/FormDomainNew.d.ts +2 -0
  82. package/lib/components/forms/FormDomainNew.js +152 -0
  83. package/lib/components/forms/FormWhatsappCustomer.d.ts +4 -0
  84. package/lib/components/forms/FormWhatsappCustomer.js +217 -0
  85. package/lib/components/forms/InputAcceptUserTermsAndConditions.d.ts +7 -0
  86. package/lib/components/forms/InputAcceptUserTermsAndConditions.js +38 -0
  87. package/lib/components/forms/InputCheckStoreName.d.ts +7 -0
  88. package/lib/components/forms/InputCheckStoreName.js +168 -0
  89. package/lib/components/forms/InputError.d.ts +8 -0
  90. package/lib/components/forms/InputError.js +19 -0
  91. package/lib/components/forms/InputFileUpload.d.ts +12 -0
  92. package/lib/components/forms/InputFileUpload.js +191 -0
  93. package/lib/components/forms/InputSelect.d.ts +14 -0
  94. package/lib/components/forms/InputSelect.js +52 -0
  95. package/lib/components/forms/InputText.d.ts +12 -0
  96. package/lib/components/forms/InputText.js +59 -0
  97. package/lib/components/forms/InputsAddress.d.ts +12 -0
  98. package/lib/components/forms/InputsAddress.js +533 -0
  99. package/lib/components/forms/index.d.ts +5 -0
  100. package/lib/components/forms/index.js +6 -0
  101. package/lib/components/lists/ListShipmentQuoteOptions.d.ts +9 -0
  102. package/lib/components/lists/ListShipmentQuoteOptions.js +145 -0
  103. package/lib/components/lists/index.d.ts +2 -0
  104. package/lib/components/lists/index.js +3 -0
  105. package/lib/fonts/nunito-bold-webfont.woff +0 -0
  106. package/lib/fonts/nunito-bold-webfont.woff2 +0 -0
  107. package/lib/fonts/nunito-regular-webfont.woff +0 -0
  108. package/lib/fonts/nunito-regular-webfont.woff2 +0 -0
  109. package/lib/index.d.ts +3 -0
  110. package/lib/index.js +4 -0
  111. package/lib/merchi_source.d.ts +2 -0
  112. package/lib/merchi_source.js +31 -0
  113. package/lib/styles/globals.css +2546 -0
  114. package/lib/styles/globals.css.map +1 -0
  115. package/lib/styles/globals.scss +2763 -0
  116. package/lib/tabs_utils.d.ts +31 -0
  117. package/lib/tabs_utils.js +104 -0
  118. package/lib/types.d.ts +43 -0
  119. package/lib/types.js +40 -0
  120. package/lib/utils.d.ts +68 -0
  121. package/lib/utils.js +560 -0
  122. package/package.json +96 -0
package/lib/area.js ADDED
@@ -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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNTV9QRVJfSU5DSCIsIk1NX1BFUl9GT09UIiwiTU1fUEVSX0NNIiwiTU1fUEVSX00iLCJwYXJzZUFyZWFWYWx1ZSIsInZhbHVlIiwidGV4dCIsIlN0cmluZyIsInRyaW0iLCJwYXJ0cyIsInNwbGl0IiwibWFwIiwicCIsImxlbmd0aCIsImhlaWdodE1tIiwiTnVtYmVyIiwid2lkdGhNbSIsImlzRmluaXRlIiwiZm9ybWF0QXJlYVZhbHVlIiwiaCIsInciLCJjb25jYXQiLCJ0cmltTnVtIiwibiIsInRvRml4ZWQiLCJpc0ltcGVyaWFsVW5pdCIsInVuaXQiLCJ1IiwidG9Mb3dlckNhc2UiLCJub3JtYWxpc2VBcmVhVW5pdCIsImxvY2FsZVByZWZlcnNJbXBlcmlhbCIsImxvY2FsZSIsImxhbmciLCJuYXZpZ2F0b3IiLCJsYW5ndWFnZSIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZWQiLCJyZXBsYWNlIiwiZW5kc1dpdGgiLCJ1bml0RmFjdG9yTW0iLCJhcmd1bWVudHMiLCJtZXRyaWNVbml0RmFjdG9yIiwibW1Ub1VuaXQiLCJtbSIsInVuaXRUb01tIiwibW1Ub01ldHJpY0Rpc3BsYXkiLCJtZXRyaWNEaXNwbGF5VG9NbSIsIm1tVG9JbmNoZXMiLCJpbmNoZXNUb01tIiwiaW5jaGVzIiwiYWN0aXZlRGlzcGxheVVuaXQiLCJtb2RhbGl0eSIsImFyZWFVbml0IiwiZGVmYXVsdE1vZGFsaXR5Rm9yQXJlYVVuaXQiLCJtbVRvRGlzcGxheSIsImRpc3BsYXlUb01tIiwidW5pdExhYmVsIiwiZGVmYXVsdEFyZWFTdGVwIiwic3RlcEluRGlzcGxheVVuaXQiLCJzdGVwTW0iLCJyYXciLCJkZWNpbWFsc0ZvclVuaXQiLCJmb3JtYXRMZW5ndGhGcm9tTW0iLCJmZWV0IiwiTWF0aCIsImZsb29yIiwicmVtIiwiZGlzcGxheSIsImZvcm1hdEFyZWFQYXJ0cyIsInBhcnNlZCIsImhlaWdodCIsIndpZHRoIiwiYXJlYU1tMiIsImFyZWFMYWJlbCIsInNxRnQiLCJzcUluIiwiZm9ybWF0QXJlYVN1bW1hcnkiLCJjbGFtcCIsIm1pbiIsIm1heCIsInYiLCJlc3RpbWF0ZUFyZWFDb3N0cyIsInZhcmlhdGlvbkZpZWxkIiwiX3JlZiIsIl92YXJpYXRpb25GaWVsZCRhcmVhVSIsIl92YXJpYXRpb25GaWVsZCRoZWlnaCIsIl92YXJpYXRpb25GaWVsZCR3aWR0aCIsIl92YXJpYXRpb25GaWVsZCRoZWlnaDIiLCJfdmFyaWF0aW9uRmllbGQkd2lkdGgyIiwiYXJlYV91bml0IiwiaGVpZ2h0VSIsIndpZHRoVSIsImFyZWEiLCJoZWlnaHRDb3N0IiwiaGVpZ2h0VmFyaWF0aW9uQ29zdCIsImhlaWdodF92YXJpYXRpb25fY29zdCIsIndpZHRoQ29zdCIsIndpZHRoVmFyaWF0aW9uQ29zdCIsIndpZHRoX3ZhcmlhdGlvbl9jb3N0IiwiaGVpZ2h0VW5pdCIsImhlaWdodFZhcmlhdGlvblVuaXRDb3N0IiwiaGVpZ2h0X3ZhcmlhdGlvbl91bml0X2Nvc3QiLCJ3aWR0aFVuaXQiLCJ3aWR0aFZhcmlhdGlvblVuaXRDb3N0Iiwid2lkdGhfdmFyaWF0aW9uX3VuaXRfY29zdCIsIm9uY2VPZmZDb3N0IiwidW5pdENvc3QiLCJjbGFtcFdpdGhBc3BlY3RSYXRpbyIsImFyZ3MiLCJyYXRpbyIsImFzcGVjdFJhdGlvIiwiaGVpZ2h0TWluIiwiaGVpZ2h0TWF4Iiwid2lkdGhNaW4iLCJ3aWR0aE1heCIsImNoYW5nZWQiXSwic291cmNlcyI6WyIuLi9zcmMvYXJlYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogU2hhcmVkIGhlbHBlcnMgZm9yIEFyZWEgKGhlaWdodCDDlyB3aWR0aCkgdmFyaWF0aW9uIGZpZWxkcy4gU3RvcmVkIHZhbHVlIGlzIGFsd2F5cyBtaWxsaW1ldHJlcy4gKi9cblxuZXhwb3J0IHR5cGUgQXJlYVVuaXQgPSAnbW0nIHwgJ2NtJyB8ICdtJyB8ICdpbicgfCAnZnQnO1xuZXhwb3J0IHR5cGUgQXJlYUlucHV0VHlwZSA9ICdpbnB1dCcgfCAnc2xpZGVyJztcbmV4cG9ydCB0eXBlIERpc3BsYXlNb2RhbGl0eSA9ICdtZXRyaWMnIHwgJ2ltcGVyaWFsJztcblxuY29uc3QgTU1fUEVSX0lOQ0ggPSAyNS40O1xuY29uc3QgTU1fUEVSX0ZPT1QgPSAzMDQuODtcbmNvbnN0IE1NX1BFUl9DTSA9IDEwO1xuY29uc3QgTU1fUEVSX00gPSAxMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcmVhVmFsdWUoXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiB7IGhlaWdodE1tOiBudW1iZXI7IHdpZHRoTW06IG51bWJlciB9IHwgbnVsbCB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgdGV4dCA9IFN0cmluZyh2YWx1ZSkudHJpbSgpO1xuICBpZiAoIXRleHQpIHJldHVybiBudWxsO1xuICBjb25zdCBwYXJ0cyA9IHRleHQuc3BsaXQoJywnKS5tYXAoKHApID0+IHAudHJpbSgpKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGhlaWdodE1tID0gTnVtYmVyKHBhcnRzWzBdKTtcbiAgY29uc3Qgd2lkdGhNbSA9IE51bWJlcihwYXJ0c1sxXSk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGhlaWdodE1tKSB8fCAhTnVtYmVyLmlzRmluaXRlKHdpZHRoTW0pKSByZXR1cm4gbnVsbDtcbiAgaWYgKGhlaWdodE1tIDw9IDAgfHwgd2lkdGhNbSA8PSAwKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsgaGVpZ2h0TW0sIHdpZHRoTW0gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFyZWFWYWx1ZShoZWlnaHRNbTogbnVtYmVyLCB3aWR0aE1tOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBoID0gTnVtYmVyKGhlaWdodE1tKTtcbiAgY29uc3QgdyA9IE51bWJlcih3aWR0aE1tKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaCkgfHwgIU51bWJlci5pc0Zpbml0ZSh3KSB8fCBoIDw9IDAgfHwgdyA8PSAwKSByZXR1cm4gJyc7XG4gIHJldHVybiBgJHt0cmltTnVtKGgpfSwke3RyaW1OdW0odyl9YDtcbn1cblxuZnVuY3Rpb24gdHJpbU51bShuOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gU3RyaW5nKE51bWJlcihuLnRvRml4ZWQoNikpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW1wZXJpYWxVbml0KHVuaXQ6IEFyZWFVbml0IHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICBjb25zdCB1ID0gU3RyaW5nKHVuaXQgfHwgJ21tJykudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHUgPT09ICdpbicgfHwgdSA9PT0gJ2Z0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGlzZUFyZWFVbml0KHVuaXQ/OiBzdHJpbmcgfCBudWxsKTogQXJlYVVuaXQge1xuICBjb25zdCB1ID0gU3RyaW5nKHVuaXQgfHwgJ21tJykudG9Mb3dlckNhc2UoKTtcbiAgaWYgKHUgPT09ICdjbScgfHwgdSA9PT0gJ20nIHx8IHUgPT09ICdpbicgfHwgdSA9PT0gJ2Z0JyB8fCB1ID09PSAnbW0nKSB7XG4gICAgcmV0dXJuIHU7XG4gIH1cbiAgcmV0dXJuICdtbSc7XG59XG5cbi8qKiBJbXBlcmlhbCBmb3IgZW4tVVMgLyBlbi1MUiAvIGVuLU1NOyBvdGhlcndpc2UgbWV0cmljIChpbmNsLiBlbi1HQikuICovXG5leHBvcnQgZnVuY3Rpb24gbG9jYWxlUHJlZmVyc0ltcGVyaWFsKGxvY2FsZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsYW5nID1cbiAgICBsb2NhbGUgfHxcbiAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IubGFuZ3VhZ2UgOiB1bmRlZmluZWQpIHx8XG4gICAgJyc7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5nLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnXycsICctJyk7XG4gIHJldHVybiAoXG4gICAgbm9ybWFsaXplZCA9PT0gJ2VuLXVzJyB8fFxuICAgIG5vcm1hbGl6ZWQgPT09ICdlbi1scicgfHxcbiAgICBub3JtYWxpemVkID09PSAnZW4tbW0nIHx8XG4gICAgbm9ybWFsaXplZC5lbmRzV2l0aCgnLXVzJykgfHxcbiAgICBub3JtYWxpemVkLmVuZHNXaXRoKCctbHInKSB8fFxuICAgIG5vcm1hbGl6ZWQuZW5kc1dpdGgoJy1tbScpXG4gICk7XG59XG5cbi8qKiBNaWxsaW1ldHJlcyBwZXIgb25lIHVuaXQgb2YgdGhlIGdpdmVuIGFyZWEgdW5pdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bml0RmFjdG9yTW0odW5pdDogQXJlYVVuaXQgfCBzdHJpbmcgPSAnbW0nKTogbnVtYmVyIHtcbiAgc3dpdGNoIChub3JtYWxpc2VBcmVhVW5pdCh1bml0KSkge1xuICAgIGNhc2UgJ2NtJzpcbiAgICAgIHJldHVybiBNTV9QRVJfQ007XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gTU1fUEVSX007XG4gICAgY2FzZSAnaW4nOlxuICAgICAgcmV0dXJuIE1NX1BFUl9JTkNIO1xuICAgIGNhc2UgJ2Z0JzpcbiAgICAgIHJldHVybiBNTV9QRVJfRk9PVDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuLyoqIEBkZXByZWNhdGVkIHVzZSB1bml0RmFjdG9yTW0gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXRyaWNVbml0RmFjdG9yKHVuaXQ6IEFyZWFVbml0ID0gJ21tJyk6IG51bWJlciB7XG4gIHJldHVybiB1bml0RmFjdG9yTW0odW5pdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtbVRvVW5pdChtbTogbnVtYmVyLCB1bml0OiBBcmVhVW5pdCB8IHN0cmluZyA9ICdtbScpOiBudW1iZXIge1xuICByZXR1cm4gbW0gLyB1bml0RmFjdG9yTW0odW5pdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bml0VG9NbSh2YWx1ZTogbnVtYmVyLCB1bml0OiBBcmVhVW5pdCB8IHN0cmluZyA9ICdtbScpOiBudW1iZXIge1xuICByZXR1cm4gdmFsdWUgKiB1bml0RmFjdG9yTW0odW5pdCk7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCB1c2UgbW1Ub1VuaXQgKi9cbmV4cG9ydCBmdW5jdGlvbiBtbVRvTWV0cmljRGlzcGxheShtbTogbnVtYmVyLCB1bml0OiBBcmVhVW5pdCA9ICdtbScpOiBudW1iZXIge1xuICByZXR1cm4gbW1Ub1VuaXQobW0sIHVuaXQpO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgdXNlIHVuaXRUb01tICovXG5leHBvcnQgZnVuY3Rpb24gbWV0cmljRGlzcGxheVRvTW0odmFsdWU6IG51bWJlciwgdW5pdDogQXJlYVVuaXQgPSAnbW0nKTogbnVtYmVyIHtcbiAgcmV0dXJuIHVuaXRUb01tKHZhbHVlLCB1bml0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1tVG9JbmNoZXMobW06IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBtbSAvIE1NX1BFUl9JTkNIO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jaGVzVG9NbShpbmNoZXM6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBpbmNoZXMgKiBNTV9QRVJfSU5DSDtcbn1cblxuLyoqXG4gKiBVbml0IHNob3duIGZvciB0aGUgY3VycmVudCBidXllciBtb2RhbGl0eS5cbiAqIE1ldHJpYyDihpIgZmllbGQgdW5pdCBpZiBtZXRyaWMsIGVsc2UgbW0uXG4gKiBJbXBlcmlhbCDihpIgZmllbGQgdW5pdCBpZiBpbXBlcmlhbCwgZWxzZSBpbmNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY3RpdmVEaXNwbGF5VW5pdChcbiAgbW9kYWxpdHk6IERpc3BsYXlNb2RhbGl0eSxcbiAgYXJlYVVuaXQ6IEFyZWFVbml0IHwgc3RyaW5nID0gJ21tJ1xuKTogQXJlYVVuaXQge1xuICBjb25zdCB1bml0ID0gbm9ybWFsaXNlQXJlYVVuaXQoYXJlYVVuaXQpO1xuICBpZiAobW9kYWxpdHkgPT09ICdpbXBlcmlhbCcpIHtcbiAgICByZXR1cm4gaXNJbXBlcmlhbFVuaXQodW5pdCkgPyB1bml0IDogJ2luJztcbiAgfVxuICByZXR1cm4gaXNJbXBlcmlhbFVuaXQodW5pdCkgPyAnbW0nIDogdW5pdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRNb2RhbGl0eUZvckFyZWFVbml0KFxuICBhcmVhVW5pdDogQXJlYVVuaXQgfCBzdHJpbmcgPSAnbW0nXG4pOiBEaXNwbGF5TW9kYWxpdHkge1xuICBpZiAoaXNJbXBlcmlhbFVuaXQoYXJlYVVuaXQpKSByZXR1cm4gJ2ltcGVyaWFsJztcbiAgcmV0dXJuIGxvY2FsZVByZWZlcnNJbXBlcmlhbCgpID8gJ2ltcGVyaWFsJyA6ICdtZXRyaWMnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW1Ub0Rpc3BsYXkoXG4gIG1tOiBudW1iZXIsXG4gIG1vZGFsaXR5OiBEaXNwbGF5TW9kYWxpdHksXG4gIGFyZWFVbml0OiBBcmVhVW5pdCB8IHN0cmluZyA9ICdtbSdcbik6IG51bWJlciB7XG4gIHJldHVybiBtbVRvVW5pdChtbSwgYWN0aXZlRGlzcGxheVVuaXQobW9kYWxpdHksIGFyZWFVbml0KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5VG9NbShcbiAgdmFsdWU6IG51bWJlcixcbiAgbW9kYWxpdHk6IERpc3BsYXlNb2RhbGl0eSxcbiAgYXJlYVVuaXQ6IEFyZWFVbml0IHwgc3RyaW5nID0gJ21tJ1xuKTogbnVtYmVyIHtcbiAgcmV0dXJuIHVuaXRUb01tKHZhbHVlLCBhY3RpdmVEaXNwbGF5VW5pdChtb2RhbGl0eSwgYXJlYVVuaXQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaXRMYWJlbChcbiAgbW9kYWxpdHk6IERpc3BsYXlNb2RhbGl0eSxcbiAgYXJlYVVuaXQ6IEFyZWFVbml0IHwgc3RyaW5nID0gJ21tJ1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGFjdGl2ZURpc3BsYXlVbml0KG1vZGFsaXR5LCBhcmVhVW5pdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0QXJlYVN0ZXAodW5pdDogQXJlYVVuaXQgfCBzdHJpbmcgPSAnbW0nKTogbnVtYmVyIHtcbiAgc3dpdGNoIChub3JtYWxpc2VBcmVhVW5pdCh1bml0KSkge1xuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIDAuMDAxO1xuICAgIGNhc2UgJ2NtJzpcbiAgICAgIHJldHVybiAwLjE7XG4gICAgY2FzZSAnaW4nOlxuICAgICAgcmV0dXJuIDAuMTI1O1xuICAgIGNhc2UgJ2Z0JzpcbiAgICAgIHJldHVybiAwLjAxO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMTtcbiAgfVxufVxuXG4vKipcbiAqIFN0ZXAgZm9yIGlucHV0cy9zbGlkZXJzIGluIHRoZSBjdXJyZW50IGRpc3BsYXkgdW5pdC5cbiAqIGBzdGVwTW1gIGlzIHRoZSBhZG1pbi1jb25maWd1cmVkIHN0ZXAgc3RvcmVkIGluIG1pbGxpbWV0cmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RlcEluRGlzcGxheVVuaXQoXG4gIHN0ZXBNbTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgbW9kYWxpdHk6IERpc3BsYXlNb2RhbGl0eSxcbiAgYXJlYVVuaXQ6IEFyZWFVbml0IHwgc3RyaW5nID0gJ21tJ1xuKTogbnVtYmVyIHtcbiAgY29uc3QgdW5pdCA9IGFjdGl2ZURpc3BsYXlVbml0KG1vZGFsaXR5LCBhcmVhVW5pdCk7XG4gIGNvbnN0IHJhdyA9IE51bWJlcihzdGVwTW0pO1xuICBpZiAoTnVtYmVyLmlzRmluaXRlKHJhdykgJiYgcmF3ID4gMCkge1xuICAgIHJldHVybiByYXcgLyB1bml0RmFjdG9yTW0odW5pdCk7XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRBcmVhU3RlcCh1bml0KTtcbn1cblxuZnVuY3Rpb24gZGVjaW1hbHNGb3JVbml0KHVuaXQ6IEFyZWFVbml0KTogbnVtYmVyIHtcbiAgaWYgKHVuaXQgPT09ICdtJykgcmV0dXJuIDQ7XG4gIGlmICh1bml0ID09PSAnZnQnKSByZXR1cm4gMztcbiAgaWYgKHVuaXQgPT09ICdpbicgfHwgdW5pdCA9PT0gJ2NtJykgcmV0dXJuIDI7XG4gIHJldHVybiAyO1xufVxuXG4vKiogRm9ybWF0IGEgbGVuZ3RoIGluIG1tIGZvciBidXllci1mYWNpbmcgc3VtbWFyeS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRMZW5ndGhGcm9tTW0oXG4gIG1tOiBudW1iZXIsXG4gIG1vZGFsaXR5OiBEaXNwbGF5TW9kYWxpdHksXG4gIGFyZWFVbml0OiBBcmVhVW5pdCB8IHN0cmluZyA9ICdtbSdcbik6IHN0cmluZyB7XG4gIGNvbnN0IHVuaXQgPSBhY3RpdmVEaXNwbGF5VW5pdChtb2RhbGl0eSwgYXJlYVVuaXQpO1xuICBpZiAodW5pdCA9PT0gJ2Z0Jykge1xuICAgIGNvbnN0IGZlZXQgPSBtbVRvVW5pdChtbSwgJ2Z0Jyk7XG4gICAgcmV0dXJuIGAke3RyaW1OdW0oTnVtYmVyKGZlZXQudG9GaXhlZCgzKSkpfSBmdGA7XG4gIH1cbiAgaWYgKHVuaXQgPT09ICdpbicpIHtcbiAgICBjb25zdCBpbmNoZXMgPSBtbVRvSW5jaGVzKG1tKTtcbiAgICBpZiAoaW5jaGVzID49IDEyKSB7XG4gICAgICBjb25zdCBmZWV0ID0gTWF0aC5mbG9vcihpbmNoZXMgLyAxMik7XG4gICAgICBjb25zdCByZW0gPSBpbmNoZXMgLSBmZWV0ICogMTI7XG4gICAgICBpZiAocmVtIDwgMC4wNSkgcmV0dXJuIGAke2ZlZXR9IGZ0YDtcbiAgICAgIHJldHVybiBgJHtmZWV0fSBmdCAke3RyaW1OdW0oTnVtYmVyKHJlbS50b0ZpeGVkKDIpKSl9IGluYDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RyaW1OdW0oTnVtYmVyKGluY2hlcy50b0ZpeGVkKDIpKSl9IGluYDtcbiAgfVxuICBjb25zdCBkaXNwbGF5ID0gbW1Ub1VuaXQobW0sIHVuaXQpO1xuICByZXR1cm4gYCR7dHJpbU51bShOdW1iZXIoZGlzcGxheS50b0ZpeGVkKGRlY2ltYWxzRm9yVW5pdCh1bml0KSkpKX0gJHt1bml0fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRBcmVhUGFydHMoXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBtb2RhbGl0eTogRGlzcGxheU1vZGFsaXR5ID0gJ21ldHJpYycsXG4gIGFyZWFVbml0OiBBcmVhVW5pdCB8IHN0cmluZyA9ICdtbSdcbik6IHsgd2lkdGg6IHN0cmluZzsgaGVpZ2h0OiBzdHJpbmc7IGFyZWFMYWJlbDogc3RyaW5nIH0gfCBudWxsIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VBcmVhVmFsdWUodmFsdWUpO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHsgaGVpZ2h0TW0sIHdpZHRoTW0gfSA9IHBhcnNlZDtcbiAgY29uc3QgaGVpZ2h0ID0gZm9ybWF0TGVuZ3RoRnJvbU1tKGhlaWdodE1tLCBtb2RhbGl0eSwgYXJlYVVuaXQpO1xuICBjb25zdCB3aWR0aCA9IGZvcm1hdExlbmd0aEZyb21NbSh3aWR0aE1tLCBtb2RhbGl0eSwgYXJlYVVuaXQpO1xuICBjb25zdCBhcmVhTW0yID0gaGVpZ2h0TW0gKiB3aWR0aE1tO1xuICBjb25zdCB1bml0ID0gYWN0aXZlRGlzcGxheVVuaXQobW9kYWxpdHksIGFyZWFVbml0KTtcbiAgbGV0IGFyZWFMYWJlbDogc3RyaW5nO1xuICBpZiAodW5pdCA9PT0gJ2Z0Jykge1xuICAgIGNvbnN0IHNxRnQgPSBhcmVhTW0yIC8gKE1NX1BFUl9GT09UICogTU1fUEVSX0ZPT1QpO1xuICAgIGFyZWFMYWJlbCA9IGAke3RyaW1OdW0oTnVtYmVyKHNxRnQudG9GaXhlZCgzKSkpfSBzcSBmdGA7XG4gIH0gZWxzZSBpZiAodW5pdCA9PT0gJ2luJykge1xuICAgIGNvbnN0IHNxSW4gPSBhcmVhTW0yIC8gKE1NX1BFUl9JTkNIICogTU1fUEVSX0lOQ0gpO1xuICAgIGlmIChzcUluID49IDE0NCkge1xuICAgICAgYXJlYUxhYmVsID0gYCR7dHJpbU51bShOdW1iZXIoKHNxSW4gLyAxNDQpLnRvRml4ZWQoMykpKX0gc3EgZnRgO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmVhTGFiZWwgPSBgJHt0cmltTnVtKE51bWJlcihzcUluLnRvRml4ZWQoMikpKX0gc3EgaW5gO1xuICAgIH1cbiAgfSBlbHNlIGlmICh1bml0ID09PSAnbScpIHtcbiAgICBhcmVhTGFiZWwgPSBgJHt0cmltTnVtKE51bWJlcigoYXJlYU1tMiAvIDFfMDAwXzAwMCkudG9GaXhlZCg0KSkpfSBtwrJgO1xuICB9IGVsc2UgaWYgKHVuaXQgPT09ICdjbScpIHtcbiAgICBhcmVhTGFiZWwgPSBgJHt0cmltTnVtKE51bWJlcigoYXJlYU1tMiAvIDEwMCkudG9GaXhlZCgyKSkpfSBjbcKyYDtcbiAgfSBlbHNlIHtcbiAgICBhcmVhTGFiZWwgPSBgJHt0cmltTnVtKE51bWJlcihhcmVhTW0yLnRvRml4ZWQoMikpKX0gbW3CsmA7XG4gIH1cbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgYXJlYUxhYmVsIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRBcmVhU3VtbWFyeShcbiAgdmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG1vZGFsaXR5OiBEaXNwbGF5TW9kYWxpdHkgPSAnbWV0cmljJyxcbiAgYXJlYVVuaXQ6IEFyZWFVbml0IHwgc3RyaW5nID0gJ21tJ1xuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHBhcnRzID0gZm9ybWF0QXJlYVBhcnRzKHZhbHVlLCBtb2RhbGl0eSwgYXJlYVVuaXQpO1xuICBpZiAoIXBhcnRzKSByZXR1cm4gbnVsbDtcbiAgLy8gV2lkdGggw5cgaGVpZ2h0IChsYW5kc2NhcGUtZmlyc3QpIHRvIG1hdGNoIHRoZSBidXllciBjb250cm9sIG9yZGVyLlxuICByZXR1cm4gYFdpZHRoICR7cGFydHMud2lkdGh9IMOXIEhlaWdodCAke3BhcnRzLmhlaWdodH0gKCR7cGFydHMuYXJlYUxhYmVsfSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAobjogbnVtYmVyLCBtaW4/OiBudW1iZXIgfCBudWxsLCBtYXg/OiBudW1iZXIgfCBudWxsKTogbnVtYmVyIHtcbiAgbGV0IHYgPSBuO1xuICBpZiAobWluICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKG1pbikpIHYgPSBNYXRoLm1heCh2LCBtaW4pO1xuICBpZiAobWF4ICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKG1heCkpIHYgPSBNYXRoLm1pbih2LCBtYXgpO1xuICByZXR1cm4gdjtcbn1cblxuLyoqXG4gKiBDbGllbnQtc2lkZSBBcmVhIGNvc3QgZXN0aW1hdGUgKHByZS1kaXNjb3VudCksIG1hdGNoaW5nIEFQSSBmb3JtdWxhOlxuICogb25jZU9mZiA9IGhlaWdodENvc3Qgw5cgd2lkdGhDb3N0IMOXIGhlaWdodF91IMOXIHdpZHRoX3VcbiAqIHVuaXRDb3N0ID0gaGVpZ2h0VW5pdCDDlyB3aWR0aFVuaXQgw5cgaGVpZ2h0X3Ugw5cgd2lkdGhfdVxuICogKGRpbWVuc2lvbnMgZXhwcmVzc2VkIGluIHRoZSBmaWVsZCdzIGFyZWFVbml0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXN0aW1hdGVBcmVhQ29zdHMoXG4gIHZhcmlhdGlvbkZpZWxkOiBhbnksXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiB7IG9uY2VPZmZDb3N0OiBudW1iZXI7IHVuaXRDb3N0OiBudW1iZXIgfSB8IG51bGwge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUFyZWFWYWx1ZSh2YWx1ZSk7XG4gIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJlYVVuaXQgPSBub3JtYWxpc2VBcmVhVW5pdChcbiAgICB2YXJpYXRpb25GaWVsZD8uYXJlYVVuaXQgPz8gdmFyaWF0aW9uRmllbGQ/LmFyZWFfdW5pdCA/PyAnbW0nXG4gICk7XG4gIGNvbnN0IGhlaWdodFUgPSBtbVRvVW5pdChwYXJzZWQuaGVpZ2h0TW0sIGFyZWFVbml0KTtcbiAgY29uc3Qgd2lkdGhVID0gbW1Ub1VuaXQocGFyc2VkLndpZHRoTW0sIGFyZWFVbml0KTtcbiAgY29uc3QgYXJlYSA9IGhlaWdodFUgKiB3aWR0aFU7XG4gIGNvbnN0IGhlaWdodENvc3QgPSBOdW1iZXIoXG4gICAgdmFyaWF0aW9uRmllbGQ/LmhlaWdodFZhcmlhdGlvbkNvc3QgPz9cbiAgICAgIHZhcmlhdGlvbkZpZWxkPy5oZWlnaHRfdmFyaWF0aW9uX2Nvc3RcbiAgKSB8fCAwO1xuICBjb25zdCB3aWR0aENvc3QgPSBOdW1iZXIoXG4gICAgdmFyaWF0aW9uRmllbGQ/LndpZHRoVmFyaWF0aW9uQ29zdCA/PyB2YXJpYXRpb25GaWVsZD8ud2lkdGhfdmFyaWF0aW9uX2Nvc3RcbiAgKSB8fCAwO1xuICBjb25zdCBoZWlnaHRVbml0ID0gTnVtYmVyKFxuICAgIHZhcmlhdGlvbkZpZWxkPy5oZWlnaHRWYXJpYXRpb25Vbml0Q29zdCA/P1xuICAgICAgdmFyaWF0aW9uRmllbGQ/LmhlaWdodF92YXJpYXRpb25fdW5pdF9jb3N0XG4gICkgfHwgMDtcbiAgY29uc3Qgd2lkdGhVbml0ID0gTnVtYmVyKFxuICAgIHZhcmlhdGlvbkZpZWxkPy53aWR0aFZhcmlhdGlvblVuaXRDb3N0ID8/XG4gICAgICB2YXJpYXRpb25GaWVsZD8ud2lkdGhfdmFyaWF0aW9uX3VuaXRfY29zdFxuICApIHx8IDA7XG4gIGNvbnN0IG9uY2VPZmZDb3N0ID0gaGVpZ2h0Q29zdCAqIHdpZHRoQ29zdCAqIGFyZWE7XG4gIGNvbnN0IHVuaXRDb3N0ID0gaGVpZ2h0VW5pdCAqIHdpZHRoVW5pdCAqIGFyZWE7XG4gIGlmICghKG9uY2VPZmZDb3N0ID4gMCkgJiYgISh1bml0Q29zdCA+IDApKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBvbmNlT2ZmQ29zdDogTnVtYmVyKG9uY2VPZmZDb3N0LnRvRml4ZWQoMykpLFxuICAgIHVuaXRDb3N0OiBOdW1iZXIodW5pdENvc3QudG9GaXhlZCgzKSksXG4gIH07XG59XG5cbi8qKlxuICogS2VlcCB3aWR0aC9oZWlnaHQgbGlua2VkIGJ5IGFzcGVjdFJhdGlvICh3aWR0aC9oZWlnaHQpLlxuICogYGNoYW5nZWRgIGluZGljYXRlcyB3aGljaCBkaW1lbnNpb24gdGhlIHVzZXIgZWRpdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhbXBXaXRoQXNwZWN0UmF0aW8oYXJnczoge1xuICBoZWlnaHRNbTogbnVtYmVyO1xuICB3aWR0aE1tOiBudW1iZXI7XG4gIGNoYW5nZWQ6ICdoZWlnaHQnIHwgJ3dpZHRoJztcbiAgYXNwZWN0UmF0aW86IG51bWJlcjtcbiAgaGVpZ2h0TWluPzogbnVtYmVyIHwgbnVsbDtcbiAgaGVpZ2h0TWF4PzogbnVtYmVyIHwgbnVsbDtcbiAgd2lkdGhNaW4/OiBudW1iZXIgfCBudWxsO1xuICB3aWR0aE1heD86IG51bWJlciB8IG51bGw7XG59KTogeyBoZWlnaHRNbTogbnVtYmVyOyB3aWR0aE1tOiBudW1iZXIgfSB7XG4gIGNvbnN0IHJhdGlvID0gYXJncy5hc3BlY3RSYXRpbztcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmF0aW8pIHx8IHJhdGlvIDw9IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0TW06IGNsYW1wKGFyZ3MuaGVpZ2h0TW0sIGFyZ3MuaGVpZ2h0TWluLCBhcmdzLmhlaWdodE1heCksXG4gICAgICB3aWR0aE1tOiBjbGFtcChhcmdzLndpZHRoTW0sIGFyZ3Mud2lkdGhNaW4sIGFyZ3Mud2lkdGhNYXgpLFxuICAgIH07XG4gIH1cblxuICBsZXQgaGVpZ2h0TW0gPSBhcmdzLmhlaWdodE1tO1xuICBsZXQgd2lkdGhNbSA9IGFyZ3Mud2lkdGhNbTtcblxuICBpZiAoYXJncy5jaGFuZ2VkID09PSAnaGVpZ2h0Jykge1xuICAgIGhlaWdodE1tID0gY2xhbXAoaGVpZ2h0TW0sIGFyZ3MuaGVpZ2h0TWluLCBhcmdzLmhlaWdodE1heCk7XG4gICAgd2lkdGhNbSA9IGhlaWdodE1tICogcmF0aW87XG4gICAgd2lkdGhNbSA9IGNsYW1wKHdpZHRoTW0sIGFyZ3Mud2lkdGhNaW4sIGFyZ3Mud2lkdGhNYXgpO1xuICAgIGhlaWdodE1tID0gd2lkdGhNbSAvIHJhdGlvO1xuICAgIGhlaWdodE1tID0gY2xhbXAoaGVpZ2h0TW0sIGFyZ3MuaGVpZ2h0TWluLCBhcmdzLmhlaWdodE1heCk7XG4gICAgd2lkdGhNbSA9IGhlaWdodE1tICogcmF0aW87XG4gIH0gZWxzZSB7XG4gICAgd2lkdGhNbSA9IGNsYW1wKHdpZHRoTW0sIGFyZ3Mud2lkdGhNaW4sIGFyZ3Mud2lkdGhNYXgpO1xuICAgIGhlaWdodE1tID0gd2lkdGhNbSAvIHJhdGlvO1xuICAgIGhlaWdodE1tID0gY2xhbXAoaGVpZ2h0TW0sIGFyZ3MuaGVpZ2h0TWluLCBhcmdzLmhlaWdodE1heCk7XG4gICAgd2lkdGhNbSA9IGhlaWdodE1tICogcmF0aW87XG4gICAgd2lkdGhNbSA9IGNsYW1wKHdpZHRoTW0sIGFyZ3Mud2lkdGhNaW4sIGFyZ3Mud2lkdGhNYXgpO1xuICB9XG5cbiAgcmV0dXJuIHsgaGVpZ2h0TW0sIHdpZHRoTW0gfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBTUEsSUFBTUEsV0FBVyxHQUFHLElBQUk7QUFDeEIsSUFBTUMsV0FBVyxHQUFHLEtBQUs7QUFDekIsSUFBTUMsU0FBUyxHQUFHLEVBQUU7QUFDcEIsSUFBTUMsUUFBUSxHQUFHLElBQUk7QUFFckIsT0FBTyxTQUFTQyxjQUFjQSxDQUM1QkMsS0FBZ0MsRUFDYztFQUM5QyxJQUFJQSxLQUFLLElBQUksSUFBSSxFQUFFLE9BQU8sSUFBSTtFQUM5QixJQUFNQyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0YsS0FBSyxDQUFDLENBQUNHLElBQUksQ0FBQyxDQUFDO0VBQ2pDLElBQUksQ0FBQ0YsSUFBSSxFQUFFLE9BQU8sSUFBSTtFQUN0QixJQUFNRyxLQUFLLEdBQUdILElBQUksQ0FBQ0ksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxHQUFHLENBQUMsVUFBQ0MsQ0FBQztJQUFBLE9BQUtBLENBQUMsQ0FBQ0osSUFBSSxDQUFDLENBQUM7RUFBQSxFQUFDO0VBQ2xELElBQUlDLEtBQUssQ0FBQ0ksTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLElB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
@@ -0,0 +1,32 @@
1
+ export interface CheckoutSession {
2
+ activeTabIndex?: number;
3
+ client?: any;
4
+ shipping?: any;
5
+ billing?: any;
6
+ shipment?: any;
7
+ items?: any[];
8
+ invoice?: any;
9
+ checkoutOpen?: boolean;
10
+ isBuyRequest?: boolean;
11
+ savedShipping?: any;
12
+ savedBilling?: any;
13
+ }
14
+ export declare function checkoutSessionKey(product: any): string;
15
+ export declare function loadCheckoutSession(product: any): CheckoutSession | null;
16
+ export declare function saveCheckoutSession(product: any, session: CheckoutSession): void;
17
+ export declare function clearCheckoutSession(product: any): void;
18
+ export declare function isResumableCheckoutSession(session: CheckoutSession | null): boolean;
19
+ export declare function getSavedShippingAddress(session: CheckoutSession | null): any;
20
+ export declare function completeCheckoutSession(product: any): void;
21
+ export declare function mergeJobWithCheckoutSession(job: any, session: CheckoutSession | null): any;
22
+ export declare function buildCheckoutSession(job: any, activeTabIndex: number, extras?: {
23
+ invoice?: any;
24
+ checkoutOpen?: boolean;
25
+ isBuyRequest?: boolean;
26
+ }, existingSession?: CheckoutSession | null): CheckoutSession;
27
+ export declare function getSafeRestoredTabIndex(job: any, options: {
28
+ includeDomainSignup?: boolean;
29
+ isBuyRequest?: boolean;
30
+ }, requestedIndex: number, invoice?: any): number;
31
+ export declare function checkoutSessionChanged(job: any, merged: any): boolean;
32
+ export declare function getCheckoutQuoteSignature(job: any): string;
@@ -0,0 +1,151 @@
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 { isUserRegistered } from './utils';
8
+ import { tabsInit } from './tabs_utils';
9
+ import { tabIdPayment } from './tabs_utils';
10
+ var STORAGE_PREFIX = 'merchi_checkout_session';
11
+ function hasAddress(address) {
12
+ var _address$lineOne;
13
+ return Boolean(address === null || address === void 0 || (_address$lineOne = address.lineOne) === null || _address$lineOne === void 0 ? void 0 : _address$lineOne.trim());
14
+ }
15
+ export function checkoutSessionKey(product) {
16
+ var _product$id, _ref, _product$domain$id, _product$domain;
17
+ var productId = (_product$id = product === null || product === void 0 ? void 0 : product.id) !== null && _product$id !== void 0 ? _product$id : 'unknown';
18
+ var domainId = (_ref = (_product$domain$id = product === null || product === void 0 || (_product$domain = product.domain) === null || _product$domain === void 0 ? void 0 : _product$domain.id) !== null && _product$domain$id !== void 0 ? _product$domain$id : product === null || product === void 0 ? void 0 : product.domainId) !== null && _ref !== void 0 ? _ref : 'unknown';
19
+ return "".concat(STORAGE_PREFIX, "_").concat(domainId, "_").concat(productId);
20
+ }
21
+ export function loadCheckoutSession(product) {
22
+ if (typeof sessionStorage === 'undefined' || !(product !== null && product !== void 0 && product.id)) {
23
+ return null;
24
+ }
25
+ try {
26
+ var raw = sessionStorage.getItem(checkoutSessionKey(product));
27
+ return raw ? JSON.parse(raw) : null;
28
+ } catch (_unused) {
29
+ return null;
30
+ }
31
+ }
32
+ export function saveCheckoutSession(product, session) {
33
+ if (typeof sessionStorage === 'undefined' || !(product !== null && product !== void 0 && product.id)) {
34
+ return;
35
+ }
36
+ try {
37
+ sessionStorage.setItem(checkoutSessionKey(product), JSON.stringify(session));
38
+ } catch (_unused2) {
39
+ /* private browsing / quota */
40
+ }
41
+ }
42
+ export function clearCheckoutSession(product) {
43
+ if (typeof sessionStorage === 'undefined' || !(product !== null && product !== void 0 && product.id)) {
44
+ return;
45
+ }
46
+ try {
47
+ sessionStorage.removeItem(checkoutSessionKey(product));
48
+ } catch (_unused3) {
49
+ /* ignore */
50
+ }
51
+ }
52
+ export function isResumableCheckoutSession(session) {
53
+ var _session$invoice, _session$activeTabInd, _session$items;
54
+ if (!session) return false;
55
+ return Boolean(session.checkoutOpen || ((_session$invoice = session.invoice) === null || _session$invoice === void 0 ? void 0 : _session$invoice.id) || ((_session$activeTabInd = session.activeTabIndex) !== null && _session$activeTabInd !== void 0 ? _session$activeTabInd : 0) > 0 || hasAddress(session.shipping) || hasAddress(session.billing) || session.shipment || ((_session$items = session.items) === null || _session$items === void 0 ? void 0 : _session$items.length));
56
+ }
57
+ export function getSavedShippingAddress(session) {
58
+ var _session$savedShippin;
59
+ if (!(session !== null && session !== void 0 && (_session$savedShippin = session.savedShipping) !== null && _session$savedShippin !== void 0 && _session$savedShippin.lineOne)) return null;
60
+ return session.savedShipping;
61
+ }
62
+ export function completeCheckoutSession(product) {
63
+ var session = loadCheckoutSession(product);
64
+ var profile = {};
65
+ if (isUserRegistered(session === null || session === void 0 ? void 0 : session.client)) {
66
+ profile.client = session.client;
67
+ }
68
+ var shippingToSave = hasAddress(session === null || session === void 0 ? void 0 : session.shipping) ? session.shipping : session === null || session === void 0 ? void 0 : session.savedShipping;
69
+ var billingToSave = hasAddress(session === null || session === void 0 ? void 0 : session.billing) ? session.billing : session === null || session === void 0 ? void 0 : session.savedBilling;
70
+ if (hasAddress(shippingToSave)) {
71
+ profile.savedShipping = shippingToSave;
72
+ }
73
+ if (hasAddress(billingToSave)) {
74
+ profile.savedBilling = billingToSave;
75
+ }
76
+ if (Object.keys(profile).length === 0) {
77
+ clearCheckoutSession(product);
78
+ } else {
79
+ saveCheckoutSession(product, profile);
80
+ }
81
+ }
82
+ export function mergeJobWithCheckoutSession(job, session) {
83
+ var _merged$items, _session$items2;
84
+ if (!session) return job;
85
+ var merged = _objectSpread({}, job);
86
+ if (!isUserRegistered(merged.client) && isUserRegistered(session.client)) {
87
+ merged.client = session.client;
88
+ }
89
+ if (!isResumableCheckoutSession(session)) {
90
+ return merged;
91
+ }
92
+ if (!hasAddress(merged.shipping) && hasAddress(session.shipping)) {
93
+ merged.shipping = session.shipping;
94
+ }
95
+ if (!hasAddress(merged.billing) && hasAddress(session.billing)) {
96
+ merged.billing = session.billing;
97
+ }
98
+ if (!merged.shipment && session.shipment) {
99
+ merged.shipment = session.shipment;
100
+ }
101
+ if (!((_merged$items = merged.items) !== null && _merged$items !== void 0 && _merged$items.length) && (_session$items2 = session.items) !== null && _session$items2 !== void 0 && _session$items2.length) {
102
+ merged.items = session.items;
103
+ }
104
+ return merged;
105
+ }
106
+ export function buildCheckoutSession(job, activeTabIndex, extras, existingSession) {
107
+ var _extras$invoice;
108
+ var existing = existingSession !== null && existingSession !== void 0 ? existingSession : null;
109
+ return {
110
+ activeTabIndex: activeTabIndex,
111
+ client: job.client,
112
+ shipping: job.shipping,
113
+ billing: job.billing,
114
+ shipment: job.shipment,
115
+ items: job.items,
116
+ savedShipping: existing === null || existing === void 0 ? void 0 : existing.savedShipping,
117
+ savedBilling: existing === null || existing === void 0 ? void 0 : existing.savedBilling,
118
+ invoice: extras !== null && extras !== void 0 && (_extras$invoice = extras.invoice) !== null && _extras$invoice !== void 0 && _extras$invoice.id ? extras.invoice : undefined,
119
+ checkoutOpen: extras === null || extras === void 0 ? void 0 : extras.checkoutOpen,
120
+ isBuyRequest: extras === null || extras === void 0 ? void 0 : extras.isBuyRequest
121
+ };
122
+ }
123
+ export function getSafeRestoredTabIndex(job, options, requestedIndex, invoice) {
124
+ if (!(job !== null && job !== void 0 && job.product)) return 0;
125
+ var tabs = tabsInit(_objectSpread({
126
+ job: job
127
+ }, options));
128
+ if (!tabs.length) return 0;
129
+ var paymentIndex = tabs.findIndex(function (tab) {
130
+ return tab.id === tabIdPayment;
131
+ });
132
+ var safeIndex = Math.max(0, Math.min(requestedIndex, tabs.length - 1));
133
+ if (paymentIndex >= 0 && safeIndex >= paymentIndex && !(invoice !== null && invoice !== void 0 && invoice.id)) {
134
+ return Math.max(0, paymentIndex - 1);
135
+ }
136
+ return safeIndex;
137
+ }
138
+ export function checkoutSessionChanged(job, merged) {
139
+ return merged.client !== job.client || merged.shipping !== job.shipping || merged.billing !== job.billing || merged.shipment !== job.shipment || merged.items !== job.items;
140
+ }
141
+ export function getCheckoutQuoteSignature(job) {
142
+ var _job$product;
143
+ return JSON.stringify({
144
+ productId: (_job$product = job.product) === null || _job$product === void 0 ? void 0 : _job$product.id,
145
+ quantity: job.quantity,
146
+ totalCost: job.totalCost,
147
+ variations: job.variations,
148
+ variationsGroups: job.variationsGroups
149
+ });
150
+ }
151
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1VzZXJSZWdpc3RlcmVkIiwidGFic0luaXQiLCJ0YWJJZFBheW1lbnQiLCJTVE9SQUdFX1BSRUZJWCIsImhhc0FkZHJlc3MiLCJhZGRyZXNzIiwiX2FkZHJlc3MkbGluZU9uZSIsIkJvb2xlYW4iLCJsaW5lT25lIiwidHJpbSIsImNoZWNrb3V0U2Vzc2lvbktleSIsInByb2R1Y3QiLCJfcHJvZHVjdCRpZCIsIl9yZWYiLCJfcHJvZHVjdCRkb21haW4kaWQiLCJfcHJvZHVjdCRkb21haW4iLCJwcm9kdWN0SWQiLCJpZCIsImRvbWFpbklkIiwiZG9tYWluIiwiY29uY2F0IiwibG9hZENoZWNrb3V0U2Vzc2lvbiIsInNlc3Npb25TdG9yYWdlIiwicmF3IiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsIl91bnVzZWQiLCJzYXZlQ2hlY2tvdXRTZXNzaW9uIiwic2Vzc2lvbiIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJfdW51c2VkMiIsImNsZWFyQ2hlY2tvdXRTZXNzaW9uIiwicmVtb3ZlSXRlbSIsIl91bnVzZWQzIiwiaXNSZXN1bWFibGVDaGVja291dFNlc3Npb24iLCJfc2Vzc2lvbiRpbnZvaWNlIiwiX3Nlc3Npb24kYWN0aXZlVGFiSW5kIiwiX3Nlc3Npb24kaXRlbXMiLCJjaGVja291dE9wZW4iLCJpbnZvaWNlIiwiYWN0aXZlVGFiSW5kZXgiLCJzaGlwcGluZyIsImJpbGxpbmciLCJzaGlwbWVudCIsIml0ZW1zIiwibGVuZ3RoIiwiZ2V0U2F2ZWRTaGlwcGluZ0FkZHJlc3MiLCJfc2Vzc2lvbiRzYXZlZFNoaXBwaW4iLCJzYXZlZFNoaXBwaW5nIiwiY29tcGxldGVDaGVja291dFNlc3Npb24iLCJwcm9maWxlIiwiY2xpZW50Iiwic2hpcHBpbmdUb1NhdmUiLCJiaWxsaW5nVG9TYXZlIiwic2F2ZWRCaWxsaW5nIiwiT2JqZWN0Iiwia2V5cyIsIm1lcmdlSm9iV2l0aENoZWNrb3V0U2Vzc2lvbiIsImpvYiIsIl9tZXJnZWQkaXRlbXMiLCJfc2Vzc2lvbiRpdGVtczIiLCJtZXJnZWQiLCJfb2JqZWN0U3ByZWFkIiwiYnVpbGRDaGVja291dFNlc3Npb24iLCJleHRyYXMiLCJleGlzdGluZ1Nlc3Npb24iLCJfZXh0cmFzJGludm9pY2UiLCJleGlzdGluZyIsInVuZGVmaW5lZCIsImlzQnV5UmVxdWVzdCIsImdldFNhZmVSZXN0b3JlZFRhYkluZGV4Iiwib3B0aW9ucyIsInJlcXVlc3RlZEluZGV4IiwidGFicyIsInBheW1lbnRJbmRleCIsImZpbmRJbmRleCIsInRhYiIsInNhZmVJbmRleCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJjaGVja291dFNlc3Npb25DaGFuZ2VkIiwiZ2V0Q2hlY2tvdXRRdW90ZVNpZ25hdHVyZSIsIl9qb2IkcHJvZHVjdCIsInF1YW50aXR5IiwidG90YWxDb3N0IiwidmFyaWF0aW9ucyIsInZhcmlhdGlvbnNHcm91cHMiXSwic291cmNlcyI6WyIuLi9zcmMvY2hlY2tvdXRTZXNzaW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzVXNlclJlZ2lzdGVyZWQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHRhYnNJbml0IH0gZnJvbSAnLi90YWJzX3V0aWxzJztcbmltcG9ydCB7IHRhYklkUGF5bWVudCB9IGZyb20gJy4vdGFic191dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tvdXRTZXNzaW9uIHtcbiAgYWN0aXZlVGFiSW5kZXg/OiBudW1iZXI7XG4gIGNsaWVudD86IGFueTtcbiAgc2hpcHBpbmc/OiBhbnk7XG4gIGJpbGxpbmc/OiBhbnk7XG4gIHNoaXBtZW50PzogYW55O1xuICBpdGVtcz86IGFueVtdO1xuICBpbnZvaWNlPzogYW55O1xuICBjaGVja291dE9wZW4/OiBib29sZWFuO1xuICBpc0J1eVJlcXVlc3Q/OiBib29sZWFuO1xuICBzYXZlZFNoaXBwaW5nPzogYW55O1xuICBzYXZlZEJpbGxpbmc/OiBhbnk7XG59XG5cbmNvbnN0IFNUT1JBR0VfUFJFRklYID0gJ21lcmNoaV9jaGVja291dF9zZXNzaW9uJztcblxuZnVuY3Rpb24gaGFzQWRkcmVzcyhhZGRyZXNzOiBhbnkpIHtcbiAgcmV0dXJuIEJvb2xlYW4oYWRkcmVzcz8ubGluZU9uZT8udHJpbSgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrb3V0U2Vzc2lvbktleShwcm9kdWN0OiBhbnkpIHtcbiAgY29uc3QgcHJvZHVjdElkID0gcHJvZHVjdD8uaWQgPz8gJ3Vua25vd24nO1xuICBjb25zdCBkb21haW5JZCA9IHByb2R1Y3Q/LmRvbWFpbj8uaWQgPz8gcHJvZHVjdD8uZG9tYWluSWQgPz8gJ3Vua25vd24nO1xuICByZXR1cm4gYCR7U1RPUkFHRV9QUkVGSVh9XyR7ZG9tYWluSWR9XyR7cHJvZHVjdElkfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ2hlY2tvdXRTZXNzaW9uKHByb2R1Y3Q6IGFueSk6IENoZWNrb3V0U2Vzc2lvbiB8IG51bGwge1xuICBpZiAodHlwZW9mIHNlc3Npb25TdG9yYWdlID09PSAndW5kZWZpbmVkJyB8fCAhcHJvZHVjdD8uaWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oY2hlY2tvdXRTZXNzaW9uS2V5KHByb2R1Y3QpKTtcbiAgICByZXR1cm4gcmF3ID8gKEpTT04ucGFyc2UocmF3KSBhcyBDaGVja291dFNlc3Npb24pIDogbnVsbDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVDaGVja291dFNlc3Npb24ocHJvZHVjdDogYW55LCBzZXNzaW9uOiBDaGVja291dFNlc3Npb24pIHtcbiAgaWYgKHR5cGVvZiBzZXNzaW9uU3RvcmFnZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIXByb2R1Y3Q/LmlkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIGNoZWNrb3V0U2Vzc2lvbktleShwcm9kdWN0KSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHNlc3Npb24pXG4gICAgKTtcbiAgfSBjYXRjaCB7XG4gICAgLyogcHJpdmF0ZSBicm93c2luZyAvIHF1b3RhICovXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQ2hlY2tvdXRTZXNzaW9uKHByb2R1Y3Q6IGFueSkge1xuICBpZiAodHlwZW9mIHNlc3Npb25TdG9yYWdlID09PSAndW5kZWZpbmVkJyB8fCAhcHJvZHVjdD8uaWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5IHtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGNoZWNrb3V0U2Vzc2lvbktleShwcm9kdWN0KSk7XG4gIH0gY2F0Y2gge1xuICAgIC8qIGlnbm9yZSAqL1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Jlc3VtYWJsZUNoZWNrb3V0U2Vzc2lvbihzZXNzaW9uOiBDaGVja291dFNlc3Npb24gfCBudWxsKSB7XG4gIGlmICghc2Vzc2lvbikgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiBCb29sZWFuKFxuICAgIHNlc3Npb24uY2hlY2tvdXRPcGVuIHx8XG4gICAgc2Vzc2lvbi5pbnZvaWNlPy5pZCB8fFxuICAgIChzZXNzaW9uLmFjdGl2ZVRhYkluZGV4ID8/IDApID4gMCB8fFxuICAgIGhhc0FkZHJlc3Moc2Vzc2lvbi5zaGlwcGluZykgfHxcbiAgICBoYXNBZGRyZXNzKHNlc3Npb24uYmlsbGluZykgfHxcbiAgICBzZXNzaW9uLnNoaXBtZW50IHx8XG4gICAgc2Vzc2lvbi5pdGVtcz8ubGVuZ3RoXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTYXZlZFNoaXBwaW5nQWRkcmVzcyhzZXNzaW9uOiBDaGVja291dFNlc3Npb24gfCBudWxsKSB7XG4gIGlmICghc2Vzc2lvbj8uc2F2ZWRTaGlwcGluZz8ubGluZU9uZSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBzZXNzaW9uLnNhdmVkU2hpcHBpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV0ZUNoZWNrb3V0U2Vzc2lvbihwcm9kdWN0OiBhbnkpIHtcbiAgY29uc3Qgc2Vzc2lvbiA9IGxvYWRDaGVja291dFNlc3Npb24ocHJvZHVjdCk7XG4gIGNvbnN0IHByb2ZpbGU6IENoZWNrb3V0U2Vzc2lvbiA9IHt9O1xuXG4gIGlmIChpc1VzZXJSZWdpc3RlcmVkKHNlc3Npb24/LmNsaWVudCkpIHtcbiAgICBwcm9maWxlLmNsaWVudCA9IHNlc3Npb24uY2xpZW50O1xuICB9XG5cbiAgY29uc3Qgc2hpcHBpbmdUb1NhdmUgPSBoYXNBZGRyZXNzKHNlc3Npb24/LnNoaXBwaW5nKVxuICAgID8gc2Vzc2lvbi5zaGlwcGluZ1xuICAgIDogc2Vzc2lvbj8uc2F2ZWRTaGlwcGluZztcbiAgY29uc3QgYmlsbGluZ1RvU2F2ZSA9IGhhc0FkZHJlc3Moc2Vzc2lvbj8uYmlsbGluZylcbiAgICA/IHNlc3Npb24uYmlsbGluZ1xuICAgIDogc2Vzc2lvbj8uc2F2ZWRCaWxsaW5nO1xuXG4gIGlmIChoYXNBZGRyZXNzKHNoaXBwaW5nVG9TYXZlKSkge1xuICAgIHByb2ZpbGUuc2F2ZWRTaGlwcGluZyA9IHNoaXBwaW5nVG9TYXZlO1xuICB9XG4gIGlmIChoYXNBZGRyZXNzKGJpbGxpbmdUb1NhdmUpKSB7XG4gICAgcHJvZmlsZS5zYXZlZEJpbGxpbmcgPSBiaWxsaW5nVG9TYXZlO1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHByb2ZpbGUpLmxlbmd0aCA9PT0gMCkge1xuICAgIGNsZWFyQ2hlY2tvdXRTZXNzaW9uKHByb2R1Y3QpO1xuICB9IGVsc2Uge1xuICAgIHNhdmVDaGVja291dFNlc3Npb24ocHJvZHVjdCwgcHJvZmlsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSm9iV2l0aENoZWNrb3V0U2Vzc2lvbihcbiAgam9iOiBhbnksXG4gIHNlc3Npb246IENoZWNrb3V0U2Vzc2lvbiB8IG51bGxcbikge1xuICBpZiAoIXNlc3Npb24pIHJldHVybiBqb2I7XG5cbiAgY29uc3QgbWVyZ2VkID0geyAuLi5qb2IgfTtcblxuICBpZiAoIWlzVXNlclJlZ2lzdGVyZWQobWVyZ2VkLmNsaWVudCkgJiYgaXNVc2VyUmVnaXN0ZXJlZChzZXNzaW9uLmNsaWVudCkpIHtcbiAgICBtZXJnZWQuY2xpZW50ID0gc2Vzc2lvbi5jbGllbnQ7XG4gIH1cblxuICBpZiAoIWlzUmVzdW1hYmxlQ2hlY2tvdXRTZXNzaW9uKHNlc3Npb24pKSB7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIGlmICghaGFzQWRkcmVzcyhtZXJnZWQuc2hpcHBpbmcpICYmIGhhc0FkZHJlc3Moc2Vzc2lvbi5zaGlwcGluZykpIHtcbiAgICBtZXJnZWQuc2hpcHBpbmcgPSBzZXNzaW9uLnNoaXBwaW5nO1xuICB9XG4gIGlmICghaGFzQWRkcmVzcyhtZXJnZWQuYmlsbGluZykgJiYgaGFzQWRkcmVzcyhzZXNzaW9uLmJpbGxpbmcpKSB7XG4gICAgbWVyZ2VkLmJpbGxpbmcgPSBzZXNzaW9uLmJpbGxpbmc7XG4gIH1cbiAgaWYgKCFtZXJnZWQuc2hpcG1lbnQgJiYgc2Vzc2lvbi5zaGlwbWVudCkge1xuICAgIG1lcmdlZC5zaGlwbWVudCA9IHNlc3Npb24uc2hpcG1lbnQ7XG4gIH1cbiAgaWYgKCFtZXJnZWQuaXRlbXM/Lmxlbmd0aCAmJiBzZXNzaW9uLml0ZW1zPy5sZW5ndGgpIHtcbiAgICBtZXJnZWQuaXRlbXMgPSBzZXNzaW9uLml0ZW1zO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2hlY2tvdXRTZXNzaW9uKFxuICBqb2I6IGFueSxcbiAgYWN0aXZlVGFiSW5kZXg6IG51bWJlcixcbiAgZXh0cmFzPzoge1xuICAgIGludm9pY2U/OiBhbnk7XG4gICAgY2hlY2tvdXRPcGVuPzogYm9vbGVhbjtcbiAgICBpc0J1eVJlcXVlc3Q/OiBib29sZWFuO1xuICB9LFxuICBleGlzdGluZ1Nlc3Npb24/OiBDaGVja291dFNlc3Npb24gfCBudWxsXG4pOiBDaGVja291dFNlc3Npb24ge1xuICBjb25zdCBleGlzdGluZyA9IGV4aXN0aW5nU2Vzc2lvbiA/PyBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgYWN0aXZlVGFiSW5kZXgsXG4gICAgY2xpZW50OiBqb2IuY2xpZW50LFxuICAgIHNoaXBwaW5nOiBqb2Iuc2hpcHBpbmcsXG4gICAgYmlsbGluZzogam9iLmJpbGxpbmcsXG4gICAgc2hpcG1lbnQ6IGpvYi5zaGlwbWVudCxcbiAgICBpdGVtczogam9iLml0ZW1zLFxuICAgIHNhdmVkU2hpcHBpbmc6IGV4aXN0aW5nPy5zYXZlZFNoaXBwaW5nLFxuICAgIHNhdmVkQmlsbGluZzogZXhpc3Rpbmc/LnNhdmVkQmlsbGluZyxcbiAgICBpbnZvaWNlOiBleHRyYXM/Lmludm9pY2U/LmlkID8gZXh0cmFzLmludm9pY2UgOiB1bmRlZmluZWQsXG4gICAgY2hlY2tvdXRPcGVuOiBleHRyYXM/LmNoZWNrb3V0T3BlbixcbiAgICBpc0J1eVJlcXVlc3Q6IGV4dHJhcz8uaXNCdXlSZXF1ZXN0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FmZVJlc3RvcmVkVGFiSW5kZXgoXG4gIGpvYjogYW55LFxuICBvcHRpb25zOiB7IGluY2x1ZGVEb21haW5TaWdudXA/OiBib29sZWFuOyBpc0J1eVJlcXVlc3Q/OiBib29sZWFuIH0sXG4gIHJlcXVlc3RlZEluZGV4OiBudW1iZXIsXG4gIGludm9pY2U/OiBhbnlcbik6IG51bWJlciB7XG4gIGlmICgham9iPy5wcm9kdWN0KSByZXR1cm4gMDtcblxuICBjb25zdCB0YWJzID0gdGFic0luaXQoeyBqb2IsIC4uLm9wdGlvbnMgfSk7XG4gIGlmICghdGFicy5sZW5ndGgpIHJldHVybiAwO1xuXG4gIGNvbnN0IHBheW1lbnRJbmRleCA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5pZCA9PT0gdGFiSWRQYXltZW50KTtcbiAgY29uc3Qgc2FmZUluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocmVxdWVzdGVkSW5kZXgsIHRhYnMubGVuZ3RoIC0gMSkpO1xuXG4gIGlmIChwYXltZW50SW5kZXggPj0gMCAmJiBzYWZlSW5kZXggPj0gcGF5bWVudEluZGV4ICYmICFpbnZvaWNlPy5pZCkge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBwYXltZW50SW5kZXggLSAxKTtcbiAgfVxuXG4gIHJldHVybiBzYWZlSW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja291dFNlc3Npb25DaGFuZ2VkKGpvYjogYW55LCBtZXJnZWQ6IGFueSkge1xuICByZXR1cm4gKFxuICAgIG1lcmdlZC5jbGllbnQgIT09IGpvYi5jbGllbnQgfHxcbiAgICBtZXJnZWQuc2hpcHBpbmcgIT09IGpvYi5zaGlwcGluZyB8fFxuICAgIG1lcmdlZC5iaWxsaW5nICE9PSBqb2IuYmlsbGluZyB8fFxuICAgIG1lcmdlZC5zaGlwbWVudCAhPT0gam9iLnNoaXBtZW50IHx8XG4gICAgbWVyZ2VkLml0ZW1zICE9PSBqb2IuaXRlbXNcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrb3V0UXVvdGVTaWduYXR1cmUoam9iOiBhbnkpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICBwcm9kdWN0SWQ6IGpvYi5wcm9kdWN0Py5pZCxcbiAgICBxdWFudGl0eTogam9iLnF1YW50aXR5LFxuICAgIHRvdGFsQ29zdDogam9iLnRvdGFsQ29zdCxcbiAgICB2YXJpYXRpb25zOiBqb2IudmFyaWF0aW9ucyxcbiAgICB2YXJpYXRpb25zR3JvdXBzOiBqb2IudmFyaWF0aW9uc0dyb3VwcyxcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLFNBQVNBLGdCQUFnQixRQUFRLFNBQVM7QUFDMUMsU0FBU0MsUUFBUSxRQUFRLGNBQWM7QUFDdkMsU0FBU0MsWUFBWSxRQUFRLGNBQWM7QUFnQjNDLElBQU1DLGNBQWMsR0FBRyx5QkFBeUI7QUFFaEQsU0FBU0MsVUFBVUEsQ0FBQ0MsT0FBWSxFQUFFO0VBQUEsSUFBQUMsZ0JBQUE7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
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ declare function Alerts(): import("react").JSX.Element;
3
+ export default Alerts;