@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.
Files changed (188) hide show
  1. package/README.md +272 -0
  2. package/lib/actions/jobs.d.ts +3 -0
  3. package/lib/actions/jobs.js +80 -0
  4. package/lib/actions/leads.d.ts +7 -0
  5. package/lib/actions/leads.js +67 -0
  6. package/lib/components/AlertVariationSellerEditable.d.ts +6 -0
  7. package/lib/components/AlertVariationSellerEditable.js +46 -0
  8. package/lib/components/Collapse.d.ts +3 -0
  9. package/lib/components/Collapse.js +34 -0
  10. package/lib/components/DateCountdown.d.ts +44 -0
  11. package/lib/components/DateCountdown.js +188 -0
  12. package/lib/components/DropzoneInput.d.ts +10 -0
  13. package/lib/components/DropzoneInput.js +169 -0
  14. package/lib/components/DynamicVariationInput.d.ts +9 -0
  15. package/lib/components/DynamicVariationInput.js +71 -0
  16. package/lib/components/FormLead.d.ts +10 -0
  17. package/lib/components/FormLead.js +215 -0
  18. package/lib/components/GroupInventory.d.ts +6 -0
  19. package/lib/components/GroupInventory.js +16 -0
  20. package/lib/components/InputGroupQuantity.d.ts +8 -0
  21. package/lib/components/InputGroupQuantity.js +117 -0
  22. package/lib/components/InputHiddenStatic.d.ts +8 -0
  23. package/lib/components/InputHiddenStatic.js +24 -0
  24. package/lib/components/InputProductQuantity.d.ts +7 -0
  25. package/lib/components/InputProductQuantity.js +102 -0
  26. package/lib/components/InventoryStatus.d.ts +7 -0
  27. package/lib/components/InventoryStatus.js +67 -0
  28. package/lib/components/MerchiProductForm.d.ts +62 -0
  29. package/lib/components/MerchiProductForm.js +51 -0
  30. package/lib/components/PriceMatrix.d.ts +27 -0
  31. package/lib/components/PriceMatrix.js +106 -0
  32. package/lib/components/ProductButtonsSubmit.d.ts +3 -0
  33. package/lib/components/ProductButtonsSubmit.js +52 -0
  34. package/lib/components/ProductFeatureDeadline.d.ts +3 -0
  35. package/lib/components/ProductFeatureDeadline.js +25 -0
  36. package/lib/components/ProductGroupBuyStatus.d.ts +3 -0
  37. package/lib/components/ProductGroupBuyStatus.js +47 -0
  38. package/lib/components/ProductPriceMatrix.d.ts +3 -0
  39. package/lib/components/ProductPriceMatrix.js +51 -0
  40. package/lib/components/ProductTitle.d.ts +3 -0
  41. package/lib/components/ProductTitle.js +36 -0
  42. package/lib/components/ProductTotalCost.d.ts +3 -0
  43. package/lib/components/ProductTotalCost.js +74 -0
  44. package/lib/components/ProductUnitPrice.d.ts +7 -0
  45. package/lib/components/ProductUnitPrice.js +51 -0
  46. package/lib/components/TooltipElement.d.ts +9 -0
  47. package/lib/components/TooltipElement.js +35 -0
  48. package/lib/components/VariationAreaInput.d.ts +8 -0
  49. package/lib/components/VariationAreaInput.js +219 -0
  50. package/lib/components/VariationCheckBoxOrRadioOption.d.ts +10 -0
  51. package/lib/components/VariationCheckBoxOrRadioOption.js +82 -0
  52. package/lib/components/VariationCheckboxRadio.d.ts +17 -0
  53. package/lib/components/VariationCheckboxRadio.js +57 -0
  54. package/lib/components/VariationColourExtractInput.d.ts +8 -0
  55. package/lib/components/VariationColourExtractInput.js +395 -0
  56. package/lib/components/VariationError.d.ts +7 -0
  57. package/lib/components/VariationError.js +52 -0
  58. package/lib/components/VariationFieldInputInstructions.d.ts +10 -0
  59. package/lib/components/VariationFieldInputInstructions.js +50 -0
  60. package/lib/components/VariationFieldInstructions.d.ts +3 -0
  61. package/lib/components/VariationFieldInstructions.js +22 -0
  62. package/lib/components/VariationFieldNameAndCostInputs.d.ts +7 -0
  63. package/lib/components/VariationFieldNameAndCostInputs.js +34 -0
  64. package/lib/components/VariationFieldOptionDefaultInputs.d.ts +7 -0
  65. package/lib/components/VariationFieldOptionDefaultInputs.js +48 -0
  66. package/lib/components/VariationFieldStaticValues.d.ts +8 -0
  67. package/lib/components/VariationFieldStaticValues.js +57 -0
  68. package/lib/components/VariationFileInput.d.ts +8 -0
  69. package/lib/components/VariationFileInput.js +229 -0
  70. package/lib/components/VariationInput.d.ts +11 -0
  71. package/lib/components/VariationInput.js +97 -0
  72. package/lib/components/VariationLabel.d.ts +11 -0
  73. package/lib/components/VariationLabel.js +85 -0
  74. package/lib/components/VariationOptionColour.d.ts +8 -0
  75. package/lib/components/VariationOptionColour.js +50 -0
  76. package/lib/components/VariationOptionImage.d.ts +8 -0
  77. package/lib/components/VariationOptionImage.js +52 -0
  78. package/lib/components/VariationSelect.d.ts +8 -0
  79. package/lib/components/VariationSelect.js +66 -0
  80. package/lib/components/VariationSelectElements.d.ts +16 -0
  81. package/lib/components/VariationSelectElements.js +141 -0
  82. package/lib/components/VariationTurnaroundTime.d.ts +9 -0
  83. package/lib/components/VariationTurnaroundTime.js +156 -0
  84. package/lib/components/Variations.d.ts +9 -0
  85. package/lib/components/Variations.js +109 -0
  86. package/lib/components/VariationsGroups.d.ts +8 -0
  87. package/lib/components/VariationsGroups.js +79 -0
  88. package/lib/components/buttons/ButtonAddGroup.d.ts +7 -0
  89. package/lib/components/buttons/ButtonAddGroup.js +38 -0
  90. package/lib/components/buttons/ButtonProductSubmit.d.ts +7 -0
  91. package/lib/components/buttons/ButtonProductSubmit.js +33 -0
  92. package/lib/components/buttons/ButtonRemoveGroup.d.ts +8 -0
  93. package/lib/components/buttons/ButtonRemoveGroup.js +25 -0
  94. package/lib/components/buttons/index.d.ts +4 -0
  95. package/lib/components/buttons/index.js +5 -0
  96. package/lib/components/cost.d.ts +11 -0
  97. package/lib/components/cost.js +44 -0
  98. package/lib/components/currency.d.ts +16 -0
  99. package/lib/components/currency.js +184 -0
  100. package/lib/components/drafts/DraftApprovePanel.d.ts +6 -0
  101. package/lib/components/drafts/DraftApprovePanel.js +315 -0
  102. package/lib/components/drafts/DraftCanvas.d.ts +13 -0
  103. package/lib/components/drafts/DraftCanvas.js +496 -0
  104. package/lib/components/drafts/DraftDesignerSheet.d.ts +9 -0
  105. package/lib/components/drafts/DraftDesignerSheet.js +685 -0
  106. package/lib/components/drafts/ProductDraftsHost.d.ts +3 -0
  107. package/lib/components/drafts/ProductDraftsHost.js +207 -0
  108. package/lib/components/drafts/useHtmlImage.d.ts +1 -0
  109. package/lib/components/drafts/useHtmlImage.js +45 -0
  110. package/lib/components/icons/IconChecked.d.ts +3 -0
  111. package/lib/components/icons/IconChecked.js +10 -0
  112. package/lib/components/icons/IconCheckedOrNoStock.d.ts +7 -0
  113. package/lib/components/icons/IconCheckedOrNoStock.js +13 -0
  114. package/lib/components/icons/IconCountryFlag.d.ts +8 -0
  115. package/lib/components/icons/IconCountryFlag.js +27 -0
  116. package/lib/components/icons/IconFile.d.ts +7 -0
  117. package/lib/components/icons/IconFile.js +41 -0
  118. package/lib/components/icons/IconNoStock.d.ts +3 -0
  119. package/lib/components/icons/IconNoStock.js +12 -0
  120. package/lib/components/icons/index.d.ts +5 -0
  121. package/lib/components/icons/index.js +6 -0
  122. package/lib/components/quoteAfterFieldChange.d.ts +7 -0
  123. package/lib/components/quoteAfterFieldChange.js +11 -0
  124. package/lib/components/quoteAfterFieldChange.test.js +58 -0
  125. package/lib/components/utils.d.ts +26 -0
  126. package/lib/components/utils.js +500 -0
  127. package/lib/context/MerchiProductFormProvider.d.ts +177 -0
  128. package/lib/context/MerchiProductFormProvider.js +1020 -0
  129. package/lib/images/product-not-found.png +0 -0
  130. package/lib/index.d.ts +42 -0
  131. package/lib/index.js +41 -0
  132. package/lib/styles/globals.css +1590 -0
  133. package/lib/styles/globals.css.map +1 -0
  134. package/lib/styles/globals.scss +1698 -0
  135. package/lib/utils/area.d.ts +77 -0
  136. package/lib/utils/area.js +298 -0
  137. package/lib/utils/cleanFormVariationJson.d.ts +5 -0
  138. package/lib/utils/cleanFormVariationJson.js +39 -0
  139. package/lib/utils/cleanFormVariationJson.test.js +54 -0
  140. package/lib/utils/countries.d.ts +7 -0
  141. package/lib/utils/countries.js +290 -0
  142. package/lib/utils/currency.d.ts +2 -0
  143. package/lib/utils/currency.js +188 -0
  144. package/lib/utils/draftExport.d.ts +21 -0
  145. package/lib/utils/draftExport.js +481 -0
  146. package/lib/utils/draftExport.test.js +78 -0
  147. package/lib/utils/draftFonts.d.ts +55 -0
  148. package/lib/utils/draftFonts.js +68 -0
  149. package/lib/utils/draftStorage.d.ts +25 -0
  150. package/lib/utils/draftStorage.js +148 -0
  151. package/lib/utils/draftStorage.test.js +125 -0
  152. package/lib/utils/draftTemplates.d.ts +87 -0
  153. package/lib/utils/draftTemplates.js +579 -0
  154. package/lib/utils/draftTemplates.test.js +476 -0
  155. package/lib/utils/formErrors.d.ts +2 -0
  156. package/lib/utils/formErrors.js +29 -0
  157. package/lib/utils/index.d.ts +3 -0
  158. package/lib/utils/index.js +4 -0
  159. package/lib/utils/priceMatrix.d.ts +57 -0
  160. package/lib/utils/priceMatrix.js +82 -0
  161. package/lib/utils/priceMatrix.test.js +200 -0
  162. package/lib/utils/products.d.ts +40 -0
  163. package/lib/utils/products.js +68 -0
  164. package/lib/utils/quantity.d.ts +7 -0
  165. package/lib/utils/quantity.js +19 -0
  166. package/lib/utils/quantity.test.js +42 -0
  167. package/lib/utils/reconcileVariations.d.ts +25 -0
  168. package/lib/utils/reconcileVariations.js +246 -0
  169. package/lib/utils/reconcileVariations.test.js +239 -0
  170. package/lib/utils/selectedVariationCosts.d.ts +6 -0
  171. package/lib/utils/selectedVariationCosts.js +59 -0
  172. package/lib/utils/selectedVariationCosts.test.js +66 -0
  173. package/lib/utils/selections.d.ts +23 -0
  174. package/lib/utils/selections.js +76 -0
  175. package/lib/utils/selections.test.js +159 -0
  176. package/lib/utils/singleOptionVariation.d.ts +2 -0
  177. package/lib/utils/singleOptionVariation.js +22 -0
  178. package/lib/utils/singleOptionVariation.test.js +59 -0
  179. package/lib/utils/supportedNumbers.d.ts +1 -0
  180. package/lib/utils/supportedNumbers.js +27 -0
  181. package/lib/utils/types.d.ts +114 -0
  182. package/lib/utils/types.js +50 -0
  183. package/lib/utils/url.d.ts +3 -0
  184. package/lib/utils/url.js +65 -0
  185. package/lib/utils/variationFields.d.ts +5 -0
  186. package/lib/utils/variationFields.js +116 -0
  187. package/lib/utils/variationFields.test.js +108 -0
  188. package/package.json +93 -0
@@ -0,0 +1,496 @@
1
+ 'use client';
2
+
3
+ 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); }
4
+ 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; }
5
+ 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; }
6
+ 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; }
7
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
8
+ 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); }
9
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
10
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
11
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
12
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
13
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
14
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
15
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
16
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
17
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
18
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
19
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
20
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
21
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
22
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
23
+ import * as React from 'react';
24
+ import { useEffect, useMemo, useRef, useState } from 'react';
25
+ import { Group, Image as KonvaImage, Layer, Line, Rect, Stage, Text, Transformer } from 'react-konva';
26
+ import { cssFontFamily } from '../../utils/draftFonts';
27
+ import { captureStageArtboard, exportDraftPngs } from '../../utils/draftExport';
28
+ import { fitInside, fitTextBox, isBackgroundFill, isFullArtboardFill, printAreaGuides } from '../../utils/draftTemplates';
29
+ import { useHtmlImage } from './useHtmlImage';
30
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
31
+ function fitView(width, height, artW, artH) {
32
+ var pad = 20;
33
+ var scale = Math.min((width - pad * 2) / Math.max(artW, 1), (height - pad * 2) / Math.max(artH, 1), 1.5);
34
+ return {
35
+ x: (width - artW * scale) / 2,
36
+ y: (height - artH * scale) / 2,
37
+ scale: Math.max(0.1, scale)
38
+ };
39
+ }
40
+ var CanvasImage = /*#__PURE__*/React.forwardRef(function CanvasImage(_ref, ref) {
41
+ var obj = _ref.obj,
42
+ listening = _ref.listening,
43
+ onSelect = _ref.onSelect,
44
+ onChange = _ref.onChange;
45
+ var image = useHtmlImage(obj.src);
46
+ React.useEffect(function () {
47
+ if (!image || !obj.lockAspectRatio) return;
48
+ var next = fitInside({
49
+ x: obj.x,
50
+ y: obj.y,
51
+ width: obj.width,
52
+ height: obj.height
53
+ }, image.naturalWidth || image.width, image.naturalHeight || image.height, true);
54
+ var sameRatio = Math.abs(obj.width / Math.max(obj.height, 1) - next.width / Math.max(next.height, 1)) < 0.03;
55
+ if (sameRatio) return;
56
+ onChange(next);
57
+ }, [image, obj.lockAspectRatio, obj.src]);
58
+ if (!image) return null;
59
+ return /*#__PURE__*/_jsx(KonvaImage, {
60
+ ref: ref,
61
+ id: obj.id,
62
+ image: image,
63
+ x: obj.x,
64
+ y: obj.y,
65
+ width: obj.width,
66
+ height: obj.height,
67
+ rotation: obj.rotation,
68
+ scaleX: obj.scaleX,
69
+ scaleY: obj.scaleY,
70
+ draggable: listening,
71
+ listening: listening,
72
+ onClick: onSelect,
73
+ onTap: onSelect,
74
+ onDragEnd: function onDragEnd(e) {
75
+ return onChange({
76
+ x: e.target.x(),
77
+ y: e.target.y()
78
+ });
79
+ },
80
+ onTransformEnd: function onTransformEnd(e) {
81
+ var node = e.target;
82
+ var sx = node.scaleX();
83
+ var sy = node.scaleY();
84
+ if (obj.lockAspectRatio) {
85
+ node.scaleX(sx < 0 ? -1 : 1);
86
+ node.scaleY(1);
87
+ onChange({
88
+ x: node.x(),
89
+ y: node.y(),
90
+ rotation: node.rotation(),
91
+ width: Math.max(16, node.width() * Math.abs(sx)),
92
+ height: Math.max(16, node.height() * Math.abs(sy)),
93
+ scaleX: sx < 0 ? -1 : 1,
94
+ scaleY: 1
95
+ });
96
+ return;
97
+ }
98
+ onChange({
99
+ x: node.x(),
100
+ y: node.y(),
101
+ rotation: node.rotation(),
102
+ scaleX: sx,
103
+ scaleY: sy
104
+ });
105
+ }
106
+ });
107
+ });
108
+ var DraftCanvas = /*#__PURE__*/React.forwardRef(function DraftCanvas(_ref2, ref) {
109
+ var _state$objects$find, _state$objects$find2;
110
+ var state = _ref2.state,
111
+ templateSrc = _ref2.templateSrc,
112
+ template = _ref2.template,
113
+ selectedId = _ref2.selectedId,
114
+ _onSelect = _ref2.onSelect,
115
+ onChange = _ref2.onChange,
116
+ onEditText = _ref2.onEditText;
117
+ var containerRef = useRef(null);
118
+ var stageRef = useRef(null);
119
+ var trRef = useRef(null);
120
+ var whiteRectRef = useRef(null);
121
+ var templateNodeRef = useRef(null);
122
+ var guideRefs = useRef([]);
123
+ var nodeRefs = useRef({});
124
+ var _useState = useState({
125
+ width: 320,
126
+ height: 360
127
+ }),
128
+ _useState2 = _slicedToArray(_useState, 2),
129
+ size = _useState2[0],
130
+ setSize = _useState2[1];
131
+ var _useState3 = useState({
132
+ x: 0,
133
+ y: 0,
134
+ scale: 1
135
+ }),
136
+ _useState4 = _slicedToArray(_useState3, 2),
137
+ view = _useState4[0],
138
+ setView = _useState4[1];
139
+ var pinchRef = useRef({
140
+ dist: 0,
141
+ scale: 1,
142
+ x: 0,
143
+ y: 0
144
+ });
145
+ var _useState5 = useState(false),
146
+ _useState6 = _slicedToArray(_useState5, 2),
147
+ pinching = _useState6[0],
148
+ setPinching = _useState6[1];
149
+ var templateImage = useHtmlImage(templateSrc);
150
+ var guides = useMemo(function () {
151
+ return printAreaGuides(template);
152
+ }, [template]);
153
+ useEffect(function () {
154
+ var el = containerRef.current;
155
+ if (!el) return undefined;
156
+ var apply = function apply() {
157
+ var next = {
158
+ width: el.clientWidth,
159
+ height: el.clientHeight
160
+ };
161
+ setSize(next);
162
+ setView(fitView(next.width, next.height, state.width, state.height));
163
+ };
164
+ apply();
165
+ var observer = new ResizeObserver(apply);
166
+ observer.observe(el);
167
+ return function () {
168
+ return observer.disconnect();
169
+ };
170
+ }, [state.width, state.height]);
171
+ React.useImperativeHandle(ref, function () {
172
+ return {
173
+ exportPngs: function exportPngs() {
174
+ return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
175
+ var fallback, stage, hasTemplate, hide, show, chrome, artOnly, canvasPreview, draft, _t;
176
+ return _regenerator().w(function (_context) {
177
+ while (1) switch (_context.p = _context.n) {
178
+ case 0:
179
+ fallback = function fallback() {
180
+ return exportDraftPngs(state, templateSrc);
181
+ };
182
+ stage = stageRef.current;
183
+ hasTemplate = Array.isArray(templateSrc) ? templateSrc.length > 0 : Boolean(templateSrc);
184
+ if (!(!(stage !== null && stage !== void 0 && stage.toDataURL) || hasTemplate && !templateNodeRef.current)) {
185
+ _context.n = 1;
186
+ break;
187
+ }
188
+ return _context.a(2, fallback());
189
+ case 1:
190
+ hide = function hide(nodes) {
191
+ return nodes.forEach(function (node) {
192
+ try {
193
+ node.visible(false);
194
+ } catch (_unused) {/* ignore */}
195
+ });
196
+ };
197
+ show = function show(nodes) {
198
+ return nodes.forEach(function (node) {
199
+ try {
200
+ node.visible(true);
201
+ } catch (_unused2) {/* ignore */}
202
+ });
203
+ };
204
+ chrome = [trRef.current].concat(_toConsumableArray(guideRefs.current)).filter(Boolean);
205
+ artOnly = [whiteRectRef.current, templateNodeRef.current].filter(Boolean);
206
+ _context.p = 2;
207
+ hide(chrome);
208
+ stage.draw();
209
+ canvasPreview = captureStageArtboard(stage, view, state);
210
+ hide(artOnly);
211
+ stage.draw();
212
+ draft = captureStageArtboard(stage, view, state);
213
+ show([].concat(_toConsumableArray(artOnly), _toConsumableArray(chrome)));
214
+ stage.draw();
215
+ if (!(draft && canvasPreview)) {
216
+ _context.n = 3;
217
+ break;
218
+ }
219
+ return _context.a(2, {
220
+ draft: draft,
221
+ canvasPreview: canvasPreview
222
+ });
223
+ case 3:
224
+ _context.n = 5;
225
+ break;
226
+ case 4:
227
+ _context.p = 4;
228
+ _t = _context.v;
229
+ show([].concat(_toConsumableArray(artOnly), _toConsumableArray(chrome)));
230
+ try {
231
+ stage.draw();
232
+ } catch (_unused4) {/* ignore */}
233
+ case 5:
234
+ return _context.a(2, fallback());
235
+ }
236
+ }, _callee, null, [[2, 4]]);
237
+ }))();
238
+ }
239
+ };
240
+ }, [state, templateSrc, view]);
241
+ useEffect(function () {
242
+ var transformer = trRef.current;
243
+ if (!transformer) return undefined;
244
+ var attach = function attach() {
245
+ var node = selectedId ? nodeRefs.current[selectedId] : null;
246
+ try {
247
+ var _transformer$getLayer;
248
+ var onStage = Boolean(node && typeof node.getStage === 'function' && node.getStage());
249
+ transformer.nodes(onStage ? [node] : []);
250
+ (_transformer$getLayer = transformer.getLayer()) === null || _transformer$getLayer === void 0 || _transformer$getLayer.batchDraw();
251
+ } catch (_unused5) {
252
+ transformer.nodes([]);
253
+ }
254
+ };
255
+ attach();
256
+ var raf = requestAnimationFrame(attach);
257
+ return function () {
258
+ return cancelAnimationFrame(raf);
259
+ };
260
+ }, [selectedId, state.objects]);
261
+ function patchObject(id, patch) {
262
+ onChange(_objectSpread(_objectSpread({}, state), {}, {
263
+ objects: state.objects.map(function (obj) {
264
+ return obj.id === id ? _objectSpread(_objectSpread({}, obj), patch) : obj;
265
+ })
266
+ }));
267
+ }
268
+ function handleWheel(e) {
269
+ var _e$evt;
270
+ if ((_e$evt = e.evt) !== null && _e$evt !== void 0 && _e$evt.cancelable) e.evt.preventDefault();
271
+ var stage = stageRef.current;
272
+ if (!stage) return;
273
+ var pointer = stage.getPointerPosition();
274
+ if (!pointer) return;
275
+ var scaleBy = 1.06;
276
+ var oldScale = view.scale;
277
+ var newScale = e.evt.deltaY > 0 ? oldScale / scaleBy : oldScale * scaleBy;
278
+ var clamped = Math.min(4, Math.max(0.15, newScale));
279
+ var mousePointTo = {
280
+ x: (pointer.x - view.x) / oldScale,
281
+ y: (pointer.y - view.y) / oldScale
282
+ };
283
+ setView({
284
+ scale: clamped,
285
+ x: pointer.x - mousePointTo.x * clamped,
286
+ y: pointer.y - mousePointTo.y * clamped
287
+ });
288
+ }
289
+ function handleTouchMove(e) {
290
+ var _e$evt2;
291
+ var touches = e.evt.touches;
292
+ if (touches.length !== 2) return;
293
+ if ((_e$evt2 = e.evt) !== null && _e$evt2 !== void 0 && _e$evt2.cancelable) e.evt.preventDefault();
294
+ var dist = Math.hypot(touches[0].clientX - touches[1].clientX, touches[0].clientY - touches[1].clientY);
295
+ if (!pinchRef.current.dist) {
296
+ pinchRef.current = {
297
+ dist: dist,
298
+ scale: view.scale,
299
+ x: view.x,
300
+ y: view.y
301
+ };
302
+ setPinching(true);
303
+ return;
304
+ }
305
+ var ratio = dist / pinchRef.current.dist;
306
+ setView({
307
+ x: pinchRef.current.x,
308
+ y: pinchRef.current.y,
309
+ scale: Math.min(4, Math.max(0.15, pinchRef.current.scale * ratio))
310
+ });
311
+ }
312
+ function handleTouchEnd() {
313
+ pinchRef.current.dist = 0;
314
+ setPinching(false);
315
+ }
316
+ return /*#__PURE__*/_jsx("div", {
317
+ ref: containerRef,
318
+ className: "merchi-product-draft-canvas",
319
+ children: /*#__PURE__*/_jsx(Stage, {
320
+ ref: stageRef,
321
+ width: size.width,
322
+ height: size.height,
323
+ onWheel: handleWheel,
324
+ onTouchMove: handleTouchMove,
325
+ onTouchEnd: handleTouchEnd,
326
+ onMouseDown: function onMouseDown(e) {
327
+ if (e.target === e.target.getStage()) _onSelect(null);
328
+ },
329
+ onTap: function onTap(e) {
330
+ if (e.target === e.target.getStage()) _onSelect(null);
331
+ },
332
+ children: /*#__PURE__*/_jsx(Layer, {
333
+ children: /*#__PURE__*/_jsxs(Group, {
334
+ x: view.x,
335
+ y: view.y,
336
+ scaleX: view.scale,
337
+ scaleY: view.scale,
338
+ children: [/*#__PURE__*/_jsx(Rect, {
339
+ ref: whiteRectRef,
340
+ width: state.width,
341
+ height: state.height,
342
+ fill: "#ffffff",
343
+ shadowBlur: 8,
344
+ shadowOpacity: 0.12,
345
+ onClick: function onClick() {
346
+ return _onSelect(null);
347
+ },
348
+ onTap: function onTap() {
349
+ return _onSelect(null);
350
+ }
351
+ }), templateImage ? /*#__PURE__*/_jsx(KonvaImage, {
352
+ ref: templateNodeRef,
353
+ image: templateImage,
354
+ width: state.width,
355
+ height: state.height,
356
+ listening: false
357
+ }) : null, state.objects.filter(isBackgroundFill).map(function (obj) {
358
+ return /*#__PURE__*/_jsx(Rect, {
359
+ x: obj.x,
360
+ y: obj.y,
361
+ width: obj.width,
362
+ height: obj.height,
363
+ rotation: obj.rotation,
364
+ scaleX: obj.scaleX,
365
+ scaleY: obj.scaleY,
366
+ fill: obj.fill || '#cccccc',
367
+ globalCompositeOperation: isFullArtboardFill(obj, state.width, state.height) ? 'multiply' : 'source-over',
368
+ listening: false
369
+ }, obj.id);
370
+ }), guides.map(function (guide, index) {
371
+ return /*#__PURE__*/_jsx(Line, {
372
+ ref: function ref(node) {
373
+ if (node) guideRefs.current[index] = node;else delete guideRefs.current[index];
374
+ },
375
+ points: [guide.x, guide.y, guide.x + guide.width, guide.y, guide.x + guide.width, guide.y + guide.height, guide.x, guide.y + guide.height, guide.x, guide.y],
376
+ stroke: "#2563eb",
377
+ dash: [12, 8],
378
+ strokeWidth: 2,
379
+ listening: false
380
+ }, "guide-".concat(index));
381
+ }), state.objects.filter(function (obj) {
382
+ return !isBackgroundFill(obj);
383
+ }).sort(function (a, b) {
384
+ if (a.type === b.type) return 0;
385
+ return a.type === 'image' ? 1 : b.type === 'image' ? -1 : 0;
386
+ }).map(function (obj) {
387
+ var common = {
388
+ ref: function ref(node) {
389
+ if (node) nodeRefs.current[obj.id] = node;else delete nodeRefs.current[obj.id];
390
+ },
391
+ id: obj.id,
392
+ x: obj.x,
393
+ y: obj.y,
394
+ width: obj.width,
395
+ height: obj.height,
396
+ rotation: obj.rotation,
397
+ scaleX: obj.scaleX,
398
+ scaleY: obj.scaleY,
399
+ draggable: !pinching,
400
+ onClick: function onClick() {
401
+ return _onSelect(obj.id);
402
+ },
403
+ onTap: function onTap() {
404
+ return _onSelect(obj.id);
405
+ },
406
+ onDblClick: function onDblClick() {
407
+ return obj.type === 'text' && onEditText(obj.id);
408
+ },
409
+ onDblTap: function onDblTap() {
410
+ return obj.type === 'text' && onEditText(obj.id);
411
+ },
412
+ onDragEnd: function onDragEnd(e) {
413
+ return patchObject(obj.id, {
414
+ x: e.target.x(),
415
+ y: e.target.y()
416
+ });
417
+ },
418
+ onTransformEnd: function onTransformEnd(e) {
419
+ var node = e.target;
420
+ var sx = node.scaleX();
421
+ var sy = node.scaleY();
422
+ if (obj.type === 'text') {
423
+ var fontSize = Math.max(12, Math.round((obj.fontSize || 48) * Math.abs(sy)));
424
+ node.scaleX(sx < 0 ? -1 : 1);
425
+ node.scaleY(1);
426
+ var fitted = fitTextBox(_objectSpread(_objectSpread({}, obj), {}, {
427
+ x: node.x(),
428
+ y: node.y(),
429
+ fontSize: fontSize
430
+ }));
431
+ patchObject(obj.id, _objectSpread(_objectSpread({}, fitted), {}, {
432
+ rotation: node.rotation(),
433
+ fontSize: fontSize,
434
+ scaleX: sx < 0 ? -1 : 1,
435
+ scaleY: 1
436
+ }));
437
+ return;
438
+ }
439
+ patchObject(obj.id, {
440
+ x: node.x(),
441
+ y: node.y(),
442
+ rotation: node.rotation(),
443
+ scaleX: sx,
444
+ scaleY: sy
445
+ });
446
+ }
447
+ };
448
+ if (obj.type === 'text') {
449
+ return /*#__PURE__*/_jsx(Text, _objectSpread(_objectSpread({}, common), {}, {
450
+ text: obj.text || 'Text',
451
+ fontSize: obj.fontSize || 48,
452
+ fill: obj.fill || '#111111',
453
+ fontFamily: cssFontFamily(obj.fontFamily),
454
+ align: obj.align || 'left',
455
+ verticalAlign: "middle",
456
+ lineHeight: 1,
457
+ wrap: "none"
458
+ }), obj.id);
459
+ }
460
+ return /*#__PURE__*/_jsx(CanvasImage, {
461
+ ref: function ref(node) {
462
+ if (node) nodeRefs.current[obj.id] = node;else delete nodeRefs.current[obj.id];
463
+ },
464
+ obj: obj,
465
+ listening: !pinching,
466
+ onSelect: function onSelect() {
467
+ return _onSelect(obj.id);
468
+ },
469
+ onChange: function onChange(patch) {
470
+ return patchObject(obj.id, patch);
471
+ }
472
+ }, obj.id);
473
+ }), /*#__PURE__*/_jsx(Transformer, {
474
+ ref: trRef,
475
+ rotateEnabled: true,
476
+ keepRatio: ((_state$objects$find = state.objects.find(function (obj) {
477
+ return obj.id === selectedId;
478
+ })) === null || _state$objects$find === void 0 ? void 0 : _state$objects$find.type) === 'text' || Boolean((_state$objects$find2 = state.objects.find(function (obj) {
479
+ return obj.id === selectedId;
480
+ })) === null || _state$objects$find2 === void 0 ? void 0 : _state$objects$find2.lockAspectRatio),
481
+ enabledAnchors: ['top-left', 'top-right', 'bottom-left', 'bottom-right'],
482
+ boundBoxFunc: function boundBoxFunc(_oldBox, newBox) {
483
+ if (newBox.width < 16 || newBox.height < 16) return _oldBox;
484
+ return newBox;
485
+ },
486
+ anchorSize: 22,
487
+ borderStrokeWidth: 2,
488
+ padding: 4
489
+ })]
490
+ })
491
+ })
492
+ })
493
+ });
494
+ });
495
+ export default DraftCanvas;
496
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3JlZ2VuZXJhdG9yIiwibiIsInRvU3RyaW5nVGFnIiwiYyIsIkdlbmVyYXRvciIsInUiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsIiwiZG9uZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiQXJyYXkiLCJmcm9tIiwiaXNBcnJheSIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfbmV4dCIsIl90aHJvdyIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX25vbkl0ZXJhYmxlUmVzdCIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwidGVzdCIsIm5leHQiLCJSZWFjdCIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkdyb3VwIiwiSW1hZ2UiLCJLb252YUltYWdlIiwiTGF5ZXIiLCJMaW5lIiwiUmVjdCIsIlN0YWdlIiwiVGV4dCIsIlRyYW5zZm9ybWVyIiwiY3NzRm9udEZhbWlseSIsImNhcHR1cmVTdGFnZUFydGJvYXJkIiwiZXhwb3J0RHJhZnRQbmdzIiwiZml0SW5zaWRlIiwiZml0VGV4dEJveCIsImlzQmFja2dyb3VuZEZpbGwiLCJpc0Z1bGxBcnRib2FyZEZpbGwiLCJwcmludEFyZWFHdWlkZXMiLCJ1c2VIdG1sSW1hZ2UiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiZml0VmlldyIsIndpZHRoIiwiaGVpZ2h0IiwiYXJ0VyIsImFydEgiLCJwYWQiLCJzY2FsZSIsIk1hdGgiLCJtaW4iLCJtYXgiLCJ4IiwiQ2FudmFzSW1hZ2UiLCJmb3J3YXJkUmVmIiwiX3JlZiIsInJlZiIsIm9iaiIsImxpc3RlbmluZyIsIm9uU2VsZWN0Iiwib25DaGFuZ2UiLCJpbWFnZSIsInNyYyIsImxvY2tBc3BlY3RSYXRpbyIsIm5hdHVyYWxXaWR0aCIsIm5hdHVyYWxIZWlnaHQiLCJzYW1lUmF0aW8iLCJhYnMiLCJpZCIsInJvdGF0aW9uIiwic2NhbGVYIiwic2NhbGVZIiwiZHJhZ2dhYmxlIiwib25DbGljayIsIm9uVGFwIiwib25EcmFnRW5kIiwidGFyZ2V0Iiwib25UcmFuc2Zvcm1FbmQiLCJub2RlIiwic3giLCJzeSIsIkRyYWZ0Q2FudmFzIiwiX3JlZjIiLCJfc3RhdGUkb2JqZWN0cyRmaW5kIiwiX3N0YXRlJG9iamVjdHMkZmluZDIiLCJzdGF0ZSIsInRlbXBsYXRlU3JjIiwidGVtcGxhdGUiLCJzZWxlY3RlZElkIiwib25FZGl0VGV4dCIsImNvbnRhaW5lclJlZiIsInN0YWdlUmVmIiwidHJSZWYiLCJ3aGl0ZVJlY3RSZWYiLCJ0ZW1wbGF0ZU5vZGVSZWYiLCJndWlkZVJlZnMiLCJub2RlUmVmcyIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJzaXplIiwic2V0U2l6ZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwidmlldyIsInNldFZpZXciLCJwaW5jaFJlZiIsImRpc3QiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInBpbmNoaW5nIiwic2V0UGluY2hpbmciLCJ0ZW1wbGF0ZUltYWdlIiwiZ3VpZGVzIiwiZWwiLCJjdXJyZW50IiwidW5kZWZpbmVkIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvYnNlcnZlciIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiZXhwb3J0UG5ncyIsIl9jYWxsZWUiLCJmYWxsYmFjayIsInN0YWdlIiwiaGFzVGVtcGxhdGUiLCJoaWRlIiwic2hvdyIsImNocm9tZSIsImFydE9ubHkiLCJjYW52YXNQcmV2aWV3IiwiZHJhZnQiLCJfdCIsIl9jb250ZXh0IiwiQm9vbGVhbiIsInRvRGF0YVVSTCIsIm5vZGVzIiwidmlzaWJsZSIsIl91bnVzZWQiLCJfdW51c2VkMiIsImNvbmNhdCIsImRyYXciLCJfdW51c2VkNCIsInRyYW5zZm9ybWVyIiwiYXR0YWNoIiwiX3RyYW5zZm9ybWVyJGdldExheWVyIiwib25TdGFnZSIsImdldFN0YWdlIiwiZ2V0TGF5ZXIiLCJiYXRjaERyYXciLCJfdW51c2VkNSIsInJhZiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwib2JqZWN0cyIsInBhdGNoT2JqZWN0IiwicGF0Y2giLCJtYXAiLCJoYW5kbGVXaGVlbCIsIl9lJGV2dCIsImV2dCIsImNhbmNlbGFibGUiLCJwcmV2ZW50RGVmYXVsdCIsInBvaW50ZXIiLCJnZXRQb2ludGVyUG9zaXRpb24iLCJzY2FsZUJ5Iiwib2xkU2NhbGUiLCJuZXdTY2FsZSIsImRlbHRhWSIsImNsYW1wZWQiLCJtb3VzZVBvaW50VG8iLCJoYW5kbGVUb3VjaE1vdmUiLCJfZSRldnQyIiwidG91Y2hlcyIsImh5cG90IiwiY2xpZW50WCIsImNsaWVudFkiLCJyYXRpbyIsImhhbmRsZVRvdWNoRW5kIiwiY2xhc3NOYW1lIiwiY2hpbGRyZW4iLCJvbldoZWVsIiwib25Ub3VjaE1vdmUiLCJvblRvdWNoRW5kIiwib25Nb3VzZURvd24iLCJmaWxsIiwic2hhZG93Qmx1ciIsInNoYWRvd09wYWNpdHkiLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJndWlkZSIsImluZGV4IiwicG9pbnRzIiwic3Ryb2tlIiwiZGFzaCIsInN0cm9rZVdpZHRoIiwic29ydCIsImIiLCJ0eXBlIiwiY29tbW9uIiwib25EYmxDbGljayIsIm9uRGJsVGFwIiwiZm9udFNpemUiLCJyb3VuZCIsImZpdHRlZCIsInRleHQiLCJmb250RmFtaWx5IiwiYWxpZ24iLCJ2ZXJ0aWNhbEFsaWduIiwibGluZUhlaWdodCIsIndyYXAiLCJyb3RhdGVFbmFibGVkIiwia2VlcFJhdGlvIiwiZmluZCIsImVuYWJsZWRBbmNob3JzIiwiYm91bmRCb3hGdW5jIiwiX29sZEJveCIsIm5ld0JveCIsImFuY2hvclNpemUiLCJib3JkZXJTdHJva2VXaWR0aCIsInBhZGRpbmciXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9kcmFmdHMvRHJhZnRDYW52YXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEdyb3VwLCBJbWFnZSBhcyBLb252YUltYWdlLCBMYXllciwgTGluZSwgUmVjdCwgU3RhZ2UsIFRleHQsIFRyYW5zZm9ybWVyIH0gZnJvbSAncmVhY3Qta29udmEnO1xuaW1wb3J0IHR5cGUgeyBEcmFmdENhbnZhc0hhbmRsZSwgRHJhZnRDYW52YXNPYmplY3QsIERyYWZ0Q2FudmFzU3RhdGUgfSBmcm9tICcuLi8uLi91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBjc3NGb250RmFtaWx5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZHJhZnRGb250cyc7XG5pbXBvcnQgeyBjYXB0dXJlU3RhZ2VBcnRib2FyZCwgZXhwb3J0RHJhZnRQbmdzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZHJhZnRFeHBvcnQnO1xuaW1wb3J0IHsgZml0SW5zaWRlLCBmaXRUZXh0Qm94LCBpc0JhY2tncm91bmRGaWxsLCBpc0Z1bGxBcnRib2FyZEZpbGwsIHByaW50QXJlYUd1aWRlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2RyYWZ0VGVtcGxhdGVzJztcbmltcG9ydCB7IHVzZUh0bWxJbWFnZSB9IGZyb20gJy4vdXNlSHRtbEltYWdlJztcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgc3RhdGU6IERyYWZ0Q2FudmFzU3RhdGU7XG4gIHRlbXBsYXRlU3JjPzogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xuICB0ZW1wbGF0ZT86IGFueTtcbiAgc2VsZWN0ZWRJZDogc3RyaW5nIHwgbnVsbDtcbiAgb25TZWxlY3Q6IChpZDogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZDtcbiAgb25DaGFuZ2U6IChzdGF0ZTogRHJhZnRDYW52YXNTdGF0ZSkgPT4gdm9pZDtcbiAgb25FZGl0VGV4dDogKGlkOiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIGZpdFZpZXcod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGFydFc6IG51bWJlciwgYXJ0SDogbnVtYmVyKSB7XG4gIGNvbnN0IHBhZCA9IDIwO1xuICBjb25zdCBzY2FsZSA9IE1hdGgubWluKFxuICAgICh3aWR0aCAtIHBhZCAqIDIpIC8gTWF0aC5tYXgoYXJ0VywgMSksXG4gICAgKGhlaWdodCAtIHBhZCAqIDIpIC8gTWF0aC5tYXgoYXJ0SCwgMSksXG4gICAgMS41LFxuICApO1xuICByZXR1cm4ge1xuICAgIHg6ICh3aWR0aCAtIGFydFcgKiBzY2FsZSkgLyAyLFxuICAgIHk6IChoZWlnaHQgLSBhcnRIICogc2NhbGUpIC8gMixcbiAgICBzY2FsZTogTWF0aC5tYXgoMC4xLCBzY2FsZSksXG4gIH07XG59XG5cbmNvbnN0IENhbnZhc0ltYWdlID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBDYW52YXNJbWFnZShcbiAge1xuICAgIG9iaixcbiAgICBsaXN0ZW5pbmcsXG4gICAgb25TZWxlY3QsXG4gICAgb25DaGFuZ2UsXG4gIH06IHtcbiAgICBvYmo6IERyYWZ0Q2FudmFzT2JqZWN0O1xuICAgIGxpc3RlbmluZzogYm9vbGVhbjtcbiAgICBvblNlbGVjdDogKCkgPT4gdm9pZDtcbiAgICBvbkNoYW5nZTogKHBhdGNoOiBQYXJ0aWFsPERyYWZ0Q2FudmFzT2JqZWN0PikgPT4gdm9pZDtcbiAgfSxcbiAgcmVmOiBhbnksXG4pIHtcbiAgY29uc3QgaW1hZ2UgPSB1c2VIdG1sSW1hZ2Uob2JqLnNyYyk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpbWFnZSB8fCAhb2JqLmxvY2tBc3BlY3RSYXRpbykgcmV0dXJuO1xuICAgIGNvbnN0IG5leHQgPSBmaXRJbnNpZGUoXG4gICAgICB7IHg6IG9iai54LCB5OiBvYmoueSwgd2lkdGg6IG9iai53aWR0aCwgaGVpZ2h0OiBvYmouaGVpZ2h0IH0sXG4gICAgICBpbWFnZS5uYXR1cmFsV2lkdGggfHwgaW1hZ2Uud2lkdGgsXG4gICAgICBpbWFnZS5uYXR1cmFsSGVpZ2h0IHx8IGltYWdlLmhlaWdodCxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICBjb25zdCBzYW1lUmF0aW8gPSBNYXRoLmFicyhcbiAgICAgIChvYmoud2lkdGggLyBNYXRoLm1heChvYmouaGVpZ2h0LCAxKSlcbiAgICAgIC0gKG5leHQud2lkdGggLyBNYXRoLm1heChuZXh0LmhlaWdodCwgMSkpXG4gICAgKSA8IDAuMDM7XG4gICAgaWYgKHNhbWVSYXRpbykgcmV0dXJuO1xuICAgIG9uQ2hhbmdlKG5leHQpO1xuICB9LCBbaW1hZ2UsIG9iai5sb2NrQXNwZWN0UmF0aW8sIG9iai5zcmNdKTtcbiAgaWYgKCFpbWFnZSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiAoXG4gICAgPEtvbnZhSW1hZ2VcbiAgICAgIHJlZj17cmVmfVxuICAgICAgaWQ9e29iai5pZH1cbiAgICAgIGltYWdlPXtpbWFnZX1cbiAgICAgIHg9e29iai54fVxuICAgICAgeT17b2JqLnl9XG4gICAgICB3aWR0aD17b2JqLndpZHRofVxuICAgICAgaGVpZ2h0PXtvYmouaGVpZ2h0fVxuICAgICAgcm90YXRpb249e29iai5yb3RhdGlvbn1cbiAgICAgIHNjYWxlWD17b2JqLnNjYWxlWH1cbiAgICAgIHNjYWxlWT17b2JqLnNjYWxlWX1cbiAgICAgIGRyYWdnYWJsZT17bGlzdGVuaW5nfVxuICAgICAgbGlzdGVuaW5nPXtsaXN0ZW5pbmd9XG4gICAgICBvbkNsaWNrPXtvblNlbGVjdH1cbiAgICAgIG9uVGFwPXtvblNlbGVjdH1cbiAgICAgIG9uRHJhZ0VuZD17KGUpID0+IG9uQ2hhbmdlKHsgeDogZS50YXJnZXQueCgpLCB5OiBlLnRhcmdldC55KCkgfSl9XG4gICAgICBvblRyYW5zZm9ybUVuZD17KGUpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGUudGFyZ2V0O1xuICAgICAgICBjb25zdCBzeCA9IG5vZGUuc2NhbGVYKCk7XG4gICAgICAgIGNvbnN0IHN5ID0gbm9kZS5zY2FsZVkoKTtcbiAgICAgICAgaWYgKG9iai5sb2NrQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgICBub2RlLnNjYWxlWChzeCA8IDAgPyAtMSA6IDEpO1xuICAgICAgICAgIG5vZGUuc2NhbGVZKDEpO1xuICAgICAgICAgIG9uQ2hhbmdlKHtcbiAgICAgICAgICAgIHg6IG5vZGUueCgpLFxuICAgICAgICAgICAgeTogbm9kZS55KCksXG4gICAgICAgICAgICByb3RhdGlvbjogbm9kZS5yb3RhdGlvbigpLFxuICAgICAgICAgICAgd2lkdGg6IE1hdGgubWF4KDE2LCBub2RlLndpZHRoKCkgKiBNYXRoLmFicyhzeCkpLFxuICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLm1heCgxNiwgbm9kZS5oZWlnaHQoKSAqIE1hdGguYWJzKHN5KSksXG4gICAgICAgICAgICBzY2FsZVg6IHN4IDwgMCA/IC0xIDogMSxcbiAgICAgICAgICAgIHNjYWxlWTogMSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgb25DaGFuZ2Uoe1xuICAgICAgICAgIHg6IG5vZGUueCgpLFxuICAgICAgICAgIHk6IG5vZGUueSgpLFxuICAgICAgICAgIHJvdGF0aW9uOiBub2RlLnJvdGF0aW9uKCksXG4gICAgICAgICAgc2NhbGVYOiBzeCxcbiAgICAgICAgICBzY2FsZVk6IHN5LFxuICAgICAgICB9KTtcbiAgICAgIH19XG4gICAgLz5cbiAgKTtcbn0pO1xuXG5jb25zdCBEcmFmdENhbnZhcyA9IFJlYWN0LmZvcndhcmRSZWY8RHJhZnRDYW52YXNIYW5kbGUsIFByb3BzPihmdW5jdGlvbiBEcmFmdENhbnZhcyh7XG4gIHN0YXRlLFxuICB0ZW1wbGF0ZVNyYyxcbiAgdGVtcGxhdGUsXG4gIHNlbGVjdGVkSWQsXG4gIG9uU2VsZWN0LFxuICBvbkNoYW5nZSxcbiAgb25FZGl0VGV4dCxcbn0sIHJlZikge1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzdGFnZVJlZiA9IHVzZVJlZjxhbnk+KG51bGwpO1xuICBjb25zdCB0clJlZiA9IHVzZVJlZjxhbnk+KG51bGwpO1xuICBjb25zdCB3aGl0ZVJlY3RSZWYgPSB1c2VSZWY8YW55PihudWxsKTtcbiAgY29uc3QgdGVtcGxhdGVOb2RlUmVmID0gdXNlUmVmPGFueT4obnVsbCk7XG4gIGNvbnN0IGd1aWRlUmVmcyA9IHVzZVJlZjxhbnlbXT4oW10pO1xuICBjb25zdCBub2RlUmVmcyA9IHVzZVJlZjxSZWNvcmQ8c3RyaW5nLCBhbnk+Pih7fSk7XG4gIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IHVzZVN0YXRlKHsgd2lkdGg6IDMyMCwgaGVpZ2h0OiAzNjAgfSk7XG4gIGNvbnN0IFt2aWV3LCBzZXRWaWV3XSA9IHVzZVN0YXRlKHsgeDogMCwgeTogMCwgc2NhbGU6IDEgfSk7XG4gIGNvbnN0IHBpbmNoUmVmID0gdXNlUmVmKHsgZGlzdDogMCwgc2NhbGU6IDEsIHg6IDAsIHk6IDAgfSk7XG4gIGNvbnN0IFtwaW5jaGluZywgc2V0UGluY2hpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB0ZW1wbGF0ZUltYWdlID0gdXNlSHRtbEltYWdlKHRlbXBsYXRlU3JjKTtcbiAgY29uc3QgZ3VpZGVzID0gdXNlTWVtbygoKSA9PiBwcmludEFyZWFHdWlkZXModGVtcGxhdGUpLCBbdGVtcGxhdGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gY29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBhcHBseSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSB7IHdpZHRoOiBlbC5jbGllbnRXaWR0aCwgaGVpZ2h0OiBlbC5jbGllbnRIZWlnaHQgfTtcbiAgICAgIHNldFNpemUobmV4dCk7XG4gICAgICBzZXRWaWV3KGZpdFZpZXcobmV4dC53aWR0aCwgbmV4dC5oZWlnaHQsIHN0YXRlLndpZHRoLCBzdGF0ZS5oZWlnaHQpKTtcbiAgICB9O1xuICAgIGFwcGx5KCk7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoYXBwbHkpO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWwpO1xuICAgIHJldHVybiAoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gIH0sIFtzdGF0ZS53aWR0aCwgc3RhdGUuaGVpZ2h0XSk7XG5cbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgYXN5bmMgZXhwb3J0UG5ncygpIHtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gKCkgPT4gZXhwb3J0RHJhZnRQbmdzKHN0YXRlLCB0ZW1wbGF0ZVNyYyk7XG4gICAgICBjb25zdCBzdGFnZSA9IHN0YWdlUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBoYXNUZW1wbGF0ZSA9IEFycmF5LmlzQXJyYXkodGVtcGxhdGVTcmMpXG4gICAgICAgID8gdGVtcGxhdGVTcmMubGVuZ3RoID4gMFxuICAgICAgICA6IEJvb2xlYW4odGVtcGxhdGVTcmMpO1xuICAgICAgaWYgKCFzdGFnZT8udG9EYXRhVVJMIHx8IChoYXNUZW1wbGF0ZSAmJiAhdGVtcGxhdGVOb2RlUmVmLmN1cnJlbnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoaWRlID0gKG5vZGVzOiBhbnlbXSkgPT4gbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICB0cnkgeyBub2RlLnZpc2libGUoZmFsc2UpOyB9IGNhdGNoIHsgLyogaWdub3JlICovIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2hvdyA9IChub2RlczogYW55W10pID0+IG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgdHJ5IHsgbm9kZS52aXNpYmxlKHRydWUpOyB9IGNhdGNoIHsgLyogaWdub3JlICovIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2hyb21lID0gW3RyUmVmLmN1cnJlbnQsIC4uLmd1aWRlUmVmcy5jdXJyZW50XS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICBjb25zdCBhcnRPbmx5ID0gW3doaXRlUmVjdFJlZi5jdXJyZW50LCB0ZW1wbGF0ZU5vZGVSZWYuY3VycmVudF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBoaWRlKGNocm9tZSk7XG4gICAgICAgIHN0YWdlLmRyYXcoKTtcbiAgICAgICAgY29uc3QgY2FudmFzUHJldmlldyA9IGNhcHR1cmVTdGFnZUFydGJvYXJkKHN0YWdlLCB2aWV3LCBzdGF0ZSk7XG4gICAgICAgIGhpZGUoYXJ0T25seSk7XG4gICAgICAgIHN0YWdlLmRyYXcoKTtcbiAgICAgICAgY29uc3QgZHJhZnQgPSBjYXB0dXJlU3RhZ2VBcnRib2FyZChzdGFnZSwgdmlldywgc3RhdGUpO1xuICAgICAgICBzaG93KFsuLi5hcnRPbmx5LCAuLi5jaHJvbWVdKTtcbiAgICAgICAgc3RhZ2UuZHJhdygpO1xuICAgICAgICBpZiAoZHJhZnQgJiYgY2FudmFzUHJldmlldykgcmV0dXJuIHsgZHJhZnQsIGNhbnZhc1ByZXZpZXcgfTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBzaG93KFsuLi5hcnRPbmx5LCAuLi5jaHJvbWVdKTtcbiAgICAgICAgdHJ5IHsgc3RhZ2UuZHJhdygpOyB9IGNhdGNoIHsgLyogaWdub3JlICovIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxsYmFjaygpO1xuICAgIH0sXG4gIH0pLCBbc3RhdGUsIHRlbXBsYXRlU3JjLCB2aWV3XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IHRyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCF0cmFuc2Zvcm1lcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBhdHRhY2ggPSAoKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gc2VsZWN0ZWRJZCA/IG5vZGVSZWZzLmN1cnJlbnRbc2VsZWN0ZWRJZF0gOiBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb25TdGFnZSA9IEJvb2xlYW4oXG4gICAgICAgICAgbm9kZSAmJiB0eXBlb2Ygbm9kZS5nZXRTdGFnZSA9PT0gJ2Z1bmN0aW9uJyAmJiBub2RlLmdldFN0YWdlKClcbiAgICAgICAgKTtcbiAgICAgICAgdHJhbnNmb3JtZXIubm9kZXMob25TdGFnZSA/IFtub2RlXSA6IFtdKTtcbiAgICAgICAgdHJhbnNmb3JtZXIuZ2V0TGF5ZXIoKT8uYmF0Y2hEcmF3KCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdHJhbnNmb3JtZXIubm9kZXMoW10pO1xuICAgICAgfVxuICAgIH07XG4gICAgYXR0YWNoKCk7XG4gICAgY29uc3QgcmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGF0dGFjaCk7XG4gICAgcmV0dXJuICgpID0+IGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7XG4gIH0sIFtzZWxlY3RlZElkLCBzdGF0ZS5vYmplY3RzXSk7XG5cbiAgZnVuY3Rpb24gcGF0Y2hPYmplY3QoaWQ6IHN0cmluZywgcGF0Y2g6IFBhcnRpYWw8RHJhZnRDYW52YXNPYmplY3Q+KSB7XG4gICAgb25DaGFuZ2Uoe1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvYmplY3RzOiBzdGF0ZS5vYmplY3RzLm1hcCgob2JqKSA9PiAob2JqLmlkID09PSBpZCA/IHsgLi4ub2JqLCAuLi5wYXRjaCB9IDogb2JqKSksXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVXaGVlbChlOiBhbnkpIHtcbiAgICBpZiAoZS5ldnQ/LmNhbmNlbGFibGUpIGUuZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3Qgc3RhZ2UgPSBzdGFnZVJlZi5jdXJyZW50O1xuICAgIGlmICghc3RhZ2UpIHJldHVybjtcbiAgICBjb25zdCBwb2ludGVyID0gc3RhZ2UuZ2V0UG9pbnRlclBvc2l0aW9uKCk7XG4gICAgaWYgKCFwb2ludGVyKSByZXR1cm47XG4gICAgY29uc3Qgc2NhbGVCeSA9IDEuMDY7XG4gICAgY29uc3Qgb2xkU2NhbGUgPSB2aWV3LnNjYWxlO1xuICAgIGNvbnN0IG5ld1NjYWxlID0gZS5ldnQuZGVsdGFZID4gMCA/IG9sZFNjYWxlIC8gc2NhbGVCeSA6IG9sZFNjYWxlICogc2NhbGVCeTtcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5taW4oNCwgTWF0aC5tYXgoMC4xNSwgbmV3U2NhbGUpKTtcbiAgICBjb25zdCBtb3VzZVBvaW50VG8gPSB7XG4gICAgICB4OiAocG9pbnRlci54IC0gdmlldy54KSAvIG9sZFNjYWxlLFxuICAgICAgeTogKHBvaW50ZXIueSAtIHZpZXcueSkgLyBvbGRTY2FsZSxcbiAgICB9O1xuICAgIHNldFZpZXcoe1xuICAgICAgc2NhbGU6IGNsYW1wZWQsXG4gICAgICB4OiBwb2ludGVyLnggLSBtb3VzZVBvaW50VG8ueCAqIGNsYW1wZWQsXG4gICAgICB5OiBwb2ludGVyLnkgLSBtb3VzZVBvaW50VG8ueSAqIGNsYW1wZWQsXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVUb3VjaE1vdmUoZTogYW55KSB7XG4gICAgY29uc3QgdG91Y2hlcyA9IGUuZXZ0LnRvdWNoZXM7XG4gICAgaWYgKHRvdWNoZXMubGVuZ3RoICE9PSAyKSByZXR1cm47XG4gICAgaWYgKGUuZXZ0Py5jYW5jZWxhYmxlKSBlLmV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGRpc3QgPSBNYXRoLmh5cG90KFxuICAgICAgdG91Y2hlc1swXS5jbGllbnRYIC0gdG91Y2hlc1sxXS5jbGllbnRYLFxuICAgICAgdG91Y2hlc1swXS5jbGllbnRZIC0gdG91Y2hlc1sxXS5jbGllbnRZLFxuICAgICk7XG4gICAgaWYgKCFwaW5jaFJlZi5jdXJyZW50LmRpc3QpIHtcbiAgICAgIHBpbmNoUmVmLmN1cnJlbnQgPSB7IGRpc3QsIHNjYWxlOiB2aWV3LnNjYWxlLCB4OiB2aWV3LngsIHk6IHZpZXcueSB9O1xuICAgICAgc2V0UGluY2hpbmcodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJhdGlvID0gZGlzdCAvIHBpbmNoUmVmLmN1cnJlbnQuZGlzdDtcbiAgICBzZXRWaWV3KHtcbiAgICAgIHg6IHBpbmNoUmVmLmN1cnJlbnQueCxcbiAgICAgIHk6IHBpbmNoUmVmLmN1cnJlbnQueSxcbiAgICAgIHNjYWxlOiBNYXRoLm1pbig0LCBNYXRoLm1heCgwLjE1LCBwaW5jaFJlZi5jdXJyZW50LnNjYWxlICogcmF0aW8pKSxcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVRvdWNoRW5kKCkge1xuICAgIHBpbmNoUmVmLmN1cnJlbnQuZGlzdCA9IDA7XG4gICAgc2V0UGluY2hpbmcoZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfSBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LWNhbnZhcyc+XG4gICAgICA8U3RhZ2VcbiAgICAgICAgcmVmPXtzdGFnZVJlZn1cbiAgICAgICAgd2lkdGg9e3NpemUud2lkdGh9XG4gICAgICAgIGhlaWdodD17c2l6ZS5oZWlnaHR9XG4gICAgICAgIG9uV2hlZWw9e2hhbmRsZVdoZWVsfVxuICAgICAgICBvblRvdWNoTW92ZT17aGFuZGxlVG91Y2hNb3ZlfVxuICAgICAgICBvblRvdWNoRW5kPXtoYW5kbGVUb3VjaEVuZH1cbiAgICAgICAgb25Nb3VzZURvd249eyhlKSA9PiB7XG4gICAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBlLnRhcmdldC5nZXRTdGFnZSgpKSBvblNlbGVjdChudWxsKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25UYXA9eyhlKSA9PiB7XG4gICAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBlLnRhcmdldC5nZXRTdGFnZSgpKSBvblNlbGVjdChudWxsKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPExheWVyPlxuICAgICAgICAgIDxHcm91cCB4PXt2aWV3Lnh9IHk9e3ZpZXcueX0gc2NhbGVYPXt2aWV3LnNjYWxlfSBzY2FsZVk9e3ZpZXcuc2NhbGV9PlxuICAgICAgICAgICAgPFJlY3RcbiAgICAgICAgICAgICAgcmVmPXt3aGl0ZVJlY3RSZWZ9XG4gICAgICAgICAgICAgIHdpZHRoPXtzdGF0ZS53aWR0aH1cbiAgICAgICAgICAgICAgaGVpZ2h0PXtzdGF0ZS5oZWlnaHR9XG4gICAgICAgICAgICAgIGZpbGw9JyNmZmZmZmYnXG4gICAgICAgICAgICAgIHNoYWRvd0JsdXI9ezh9XG4gICAgICAgICAgICAgIHNoYWRvd09wYWNpdHk9ezAuMTJ9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2VsZWN0KG51bGwpfVxuICAgICAgICAgICAgICBvblRhcD17KCkgPT4gb25TZWxlY3QobnVsbCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3RlbXBsYXRlSW1hZ2UgPyAoXG4gICAgICAgICAgICAgIDxLb252YUltYWdlXG4gICAgICAgICAgICAgICAgcmVmPXt0ZW1wbGF0ZU5vZGVSZWZ9XG4gICAgICAgICAgICAgICAgaW1hZ2U9e3RlbXBsYXRlSW1hZ2V9XG4gICAgICAgICAgICAgICAgd2lkdGg9e3N0YXRlLndpZHRofVxuICAgICAgICAgICAgICAgIGhlaWdodD17c3RhdGUuaGVpZ2h0fVxuICAgICAgICAgICAgICAgIGxpc3RlbmluZz17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzdGF0ZS5vYmplY3RzLmZpbHRlcihpc0JhY2tncm91bmRGaWxsKS5tYXAoKG9iaikgPT4gKFxuICAgICAgICAgICAgICA8UmVjdFxuICAgICAgICAgICAgICAgIGtleT17b2JqLmlkfVxuICAgICAgICAgICAgICAgIHg9e29iai54fVxuICAgICAgICAgICAgICAgIHk9e29iai55fVxuICAgICAgICAgICAgICAgIHdpZHRoPXtvYmoud2lkdGh9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXtvYmouaGVpZ2h0fVxuICAgICAgICAgICAgICAgIHJvdGF0aW9uPXtvYmoucm90YXRpb259XG4gICAgICAgICAgICAgICAgc2NhbGVYPXtvYmouc2NhbGVYfVxuICAgICAgICAgICAgICAgIHNjYWxlWT17b2JqLnNjYWxlWX1cbiAgICAgICAgICAgICAgICBmaWxsPXtvYmouZmlsbCB8fCAnI2NjY2NjYyd9XG4gICAgICAgICAgICAgICAgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPXtcbiAgICAgICAgICAgICAgICAgIGlzRnVsbEFydGJvYXJkRmlsbChvYmosIHN0YXRlLndpZHRoLCBzdGF0ZS5oZWlnaHQpXG4gICAgICAgICAgICAgICAgICAgID8gJ211bHRpcGx5J1xuICAgICAgICAgICAgICAgICAgICA6ICdzb3VyY2Utb3ZlcidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGlzdGVuaW5nPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgICAge2d1aWRlcy5tYXAoKGd1aWRlLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8TGluZVxuICAgICAgICAgICAgICAgIGtleT17YGd1aWRlLSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICByZWY9eyhub2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAobm9kZSkgZ3VpZGVSZWZzLmN1cnJlbnRbaW5kZXhdID0gbm9kZTtcbiAgICAgICAgICAgICAgICAgIGVsc2UgZGVsZXRlIGd1aWRlUmVmcy5jdXJyZW50W2luZGV4XTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHBvaW50cz17W1xuICAgICAgICAgICAgICAgICAgZ3VpZGUueCxcbiAgICAgICAgICAgICAgICAgIGd1aWRlLnksXG4gICAgICAgICAgICAgICAgICBndWlkZS54ICsgZ3VpZGUud2lkdGgsXG4gICAgICAgICAgICAgICAgICBndWlkZS55LFxuICAgICAgICAgICAgICAgICAgZ3VpZGUueCArIGd1aWRlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgZ3VpZGUueSArIGd1aWRlLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgIGd1aWRlLngsXG4gICAgICAgICAgICAgICAgICBndWlkZS55ICsgZ3VpZGUuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgZ3VpZGUueCxcbiAgICAgICAgICAgICAgICAgIGd1aWRlLnksXG4gICAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgICAgICBzdHJva2U9JyMyNTYzZWInXG4gICAgICAgICAgICAgICAgZGFzaD17WzEyLCA4XX1cbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD17Mn1cbiAgICAgICAgICAgICAgICBsaXN0ZW5pbmc9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICB7c3RhdGUub2JqZWN0cy5maWx0ZXIoKG9iaikgPT4gIWlzQmFja2dyb3VuZEZpbGwob2JqKSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBpZiAoYS50eXBlID09PSBiLnR5cGUpIHJldHVybiAwO1xuICAgICAgICAgICAgICByZXR1cm4gYS50eXBlID09PSAnaW1hZ2UnID8gMSA6IGIudHlwZSA9PT0gJ2ltYWdlJyA/IC0xIDogMDtcbiAgICAgICAgICAgIH0pLm1hcCgob2JqKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbW1vbiA9IHtcbiAgICAgICAgICAgICAgICByZWY6IChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChub2RlKSBub2RlUmVmcy5jdXJyZW50W29iai5pZF0gPSBub2RlO1xuICAgICAgICAgICAgICAgICAgZWxzZSBkZWxldGUgbm9kZVJlZnMuY3VycmVudFtvYmouaWRdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaWQ6IG9iai5pZCxcbiAgICAgICAgICAgICAgICB4OiBvYmoueCxcbiAgICAgICAgICAgICAgICB5OiBvYmoueSxcbiAgICAgICAgICAgICAgICB3aWR0aDogb2JqLndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogb2JqLmhlaWdodCxcbiAgICAgICAgICAgICAgICByb3RhdGlvbjogb2JqLnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgIHNjYWxlWDogb2JqLnNjYWxlWCxcbiAgICAgICAgICAgICAgICBzY2FsZVk6IG9iai5zY2FsZVksXG4gICAgICAgICAgICAgICAgZHJhZ2dhYmxlOiAhcGluY2hpbmcsXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4gb25TZWxlY3Qob2JqLmlkKSxcbiAgICAgICAgICAgICAgICBvblRhcDogKCkgPT4gb25TZWxlY3Qob2JqLmlkKSxcbiAgICAgICAgICAgICAgICBvbkRibENsaWNrOiAoKSA9PiBvYmoudHlwZSA9PT0gJ3RleHQnICYmIG9uRWRpdFRleHQob2JqLmlkKSxcbiAgICAgICAgICAgICAgICBvbkRibFRhcDogKCkgPT4gb2JqLnR5cGUgPT09ICd0ZXh0JyAmJiBvbkVkaXRUZXh0KG9iai5pZCksXG4gICAgICAgICAgICAgICAgb25EcmFnRW5kOiAoZTogYW55KSA9PiBwYXRjaE9iamVjdChvYmouaWQsIHsgeDogZS50YXJnZXQueCgpLCB5OiBlLnRhcmdldC55KCkgfSksXG4gICAgICAgICAgICAgICAgb25UcmFuc2Zvcm1FbmQ6IChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBlLnRhcmdldDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN4ID0gbm9kZS5zY2FsZVgoKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN5ID0gbm9kZS5zY2FsZVkoKTtcbiAgICAgICAgICAgICAgICAgIGlmIChvYmoudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplID0gTWF0aC5tYXgoMTIsIE1hdGgucm91bmQoKG9iai5mb250U2l6ZSB8fCA0OCkgKiBNYXRoLmFicyhzeSkpKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zY2FsZVgoc3ggPCAwID8gLTEgOiAxKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zY2FsZVkoMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpdHRlZCA9IGZpdFRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgICAgIC4uLm9iaixcbiAgICAgICAgICAgICAgICAgICAgICB4OiBub2RlLngoKSxcbiAgICAgICAgICAgICAgICAgICAgICB5OiBub2RlLnkoKSxcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHBhdGNoT2JqZWN0KG9iai5pZCwge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLmZpdHRlZCxcbiAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvbjogbm9kZS5yb3RhdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWDogc3ggPCAwID8gLTEgOiAxLFxuICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWTogMSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHBhdGNoT2JqZWN0KG9iai5pZCwge1xuICAgICAgICAgICAgICAgICAgICB4OiBub2RlLngoKSxcbiAgICAgICAgICAgICAgICAgICAgeTogbm9kZS55KCksXG4gICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiBub2RlLnJvdGF0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlWDogc3gsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlWTogc3ksXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBpZiAob2JqLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICBrZXk9e29iai5pZH1cbiAgICAgICAgICAgICAgICAgICAgey4uLmNvbW1vbn1cbiAgICAgICAgICAgICAgICAgICAgdGV4dD17b2JqLnRleHQgfHwgJ1RleHQnfVxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZT17b2JqLmZvbnRTaXplIHx8IDQ4fVxuICAgICAgICAgICAgICAgICAgICBmaWxsPXtvYmouZmlsbCB8fCAnIzExMTExMSd9XG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk9e2Nzc0ZvbnRGYW1pbHkob2JqLmZvbnRGYW1pbHkpfVxuICAgICAgICAgICAgICAgICAgICBhbGlnbj17b2JqLmFsaWduIHx8ICdsZWZ0J31cbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbj0nbWlkZGxlJ1xuICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0PXsxfVxuICAgICAgICAgICAgICAgICAgICB3cmFwPSdub25lJ1xuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPENhbnZhc0ltYWdlXG4gICAgICAgICAgICAgICAgICBrZXk9e29iai5pZH1cbiAgICAgICAgICAgICAgICAgIHJlZj17KG5vZGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSkgbm9kZVJlZnMuY3VycmVudFtvYmouaWRdID0gbm9kZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBkZWxldGUgbm9kZVJlZnMuY3VycmVudFtvYmouaWRdO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIG9iaj17b2JqfVxuICAgICAgICAgICAgICAgICAgbGlzdGVuaW5nPXshcGluY2hpbmd9XG4gICAgICAgICAgICAgICAgICBvblNlbGVjdD17KCkgPT4gb25TZWxlY3Qob2JqLmlkKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsocGF0Y2gpID0+IHBhdGNoT2JqZWN0KG9iai5pZCwgcGF0Y2gpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDxUcmFuc2Zvcm1lclxuICAgICAgICAgICAgICByZWY9e3RyUmVmfVxuICAgICAgICAgICAgICByb3RhdGVFbmFibGVkXG4gICAgICAgICAgICAgIGtlZXBSYXRpbz17XG4gICAgICAgICAgICAgICAgKHN0YXRlLm9iamVjdHMuZmluZCgob2JqKSA9PiBvYmouaWQgPT09IHNlbGVjdGVkSWQpPy50eXBlID09PSAndGV4dCcpXG4gICAgICAgICAgICAgICAgfHwgQm9vbGVhbihzdGF0ZS5vYmplY3RzLmZpbmQoKG9iaikgPT4gb2JqLmlkID09PSBzZWxlY3RlZElkKT8ubG9ja0FzcGVjdFJhdGlvKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVuYWJsZWRBbmNob3JzPXtbXG4gICAgICAgICAgICAgICAgJ3RvcC1sZWZ0JyxcbiAgICAgICAgICAgICAgICAndG9wLXJpZ2h0JyxcbiAgICAgICAgICAgICAgICAnYm90dG9tLWxlZnQnLFxuICAgICAgICAgICAgICAgICdib3R0b20tcmlnaHQnLFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgICBib3VuZEJveEZ1bmM9eyhfb2xkQm94LCBuZXdCb3gpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmV3Qm94LndpZHRoIDwgMTYgfHwgbmV3Qm94LmhlaWdodCA8IDE2KSByZXR1cm4gX29sZEJveDtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3Qm94O1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBhbmNob3JTaXplPXsyMn1cbiAgICAgICAgICAgICAgYm9yZGVyU3Ryb2tlV2lkdGg9ezJ9XG4gICAgICAgICAgICAgIHBhZGRpbmc9ezR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgIDwvTGF5ZXI+XG4gICAgICA8L1N0YWdlPlxuICAgIDwvZGl2PlxuICApO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IERyYWZ0Q2FudmFzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZOztBQUFDLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBQUEsU0FBQUssUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBWCxDQUFBLEdBQUFTLE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFQLENBQUEsR0FBQUEsQ0FBQSxDQUFBWSxNQUFBLFdBQUFMLENBQUEsV0FBQUUsTUFBQSxDQUFBSSx3QkFBQSxDQUFBUCxDQUFBLEVBQUFDLENBQUEsRUFBQU8sVUFBQSxPQUFBTixDQUFBLENBQUFPLElBQUEsQ0FBQUMsS0FBQSxDQUFBUixDQUFBLEVBQUFSLENBQUEsWUFBQVEsQ0FBQTtBQUFBLFNBQUFTLGNBQUFYLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFXLFNBQUEsQ0FBQUMsTUFBQSxFQUFBWixDQUFBLFVBQUFDLENBQUEsV0FBQVUsU0FBQSxDQUFBWCxDQUFBLElBQUFXLFNBQUEsQ0FBQVgsQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFZLE9BQUEsV0FBQWIsQ0FBQSxJQUFBYyxlQUFBLENBQUFmLENBQUEsRUFBQUMsQ0FBQSxF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UUFBUztjQUNyQmxELFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFBO2dCQUFBLE9BQVFBLFNBQVEsQ0FBQ0YsR0FBRyxDQUFDVyxFQUFFLENBQUM7Y0FBQSxDQUFDO2NBQ2pDUixRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBR2tHLEtBQUs7Z0JBQUEsT0FBS0QsV0FBVyxDQUFDcEcsR0FBRyxDQUFDVyxFQUFFLEVBQUUwRixLQUFLLENBQUM7Y0FBQTtZQUFDLEdBUjNDckcsR0FBRyxDQUFDVyxFQVNWLENBQUM7VUFFTixDQUFDLENBQUMsZUFDRjdCLElBQUEsQ0FBQ1gsV0FBVztZQUNWNEIsR0FBRyxFQUFFb0MsS0FBTTtZQUNYd0gsYUFBYTtZQUNiQyxTQUFTLEVBQ04sRUFBQWxJLG1CQUFBLEdBQUFFLEtBQUssQ0FBQ3VFLE9BQU8sQ0FBQzBELElBQUksQ0FBQyxVQUFDN0osR0FBRztjQUFBLE9BQUtBLEdBQUcsQ0FBQ1csRUFBRSxLQUFLb0IsVUFBVTtZQUFBLEVBQUMsY0FBQUwsbUJBQUEsdUJBQWxEQSxtQkFBQSxDQUFvRG9ILElBQUksTUFBSyxNQUFNLElBQ2pFL0QsT0FBTyxFQUFBcEQsb0JBQUEsR0FBQ0MsS0FBSyxDQUFDdUUsT0FBTyxDQUFDMEQsSUFBSSxDQUFDLFVBQUM3SixHQUFHO2NBQUEsT0FBS0EsR0FBRyxDQUFDVyxFQUFFLEtBQUtvQixVQUFVO1lBQUEsRUFBQyxjQUFBSixvQkFBQSx1QkFBbERBLG9CQUFBLENBQW9EckIsZUFBZSxDQUMvRTtZQUNEd0osY0FBYyxFQUFFLENBQ2QsVUFBVSxFQUNWLFdBQVcsRUFDWCxhQUFhLEVBQ2IsY0FBYyxDQUNkO1lBQ0ZDLFlBQVksRUFBRSxTQUFkQSxZQUFZQSxDQUFHQyxPQUFPLEVBQUVDLE1BQU0sRUFBSztjQUNqQyxJQUFJQSxNQUFNLENBQUMvSyxLQUFLLEdBQUcsRUFBRSxJQUFJK0ssTUFBTSxDQUFDOUssTUFBTSxHQUFHLEVBQUUsRUFBRSxPQUFPNkssT0FBTztjQUMzRCxPQUFPQyxNQUFNO1lBQ2YsQ0FBRTtZQUNGQyxVQUFVLEVBQUUsRUFBRztZQUNmQyxpQkFBaUIsRUFBRSxDQUFFO1lBQ3JCQyxPQUFPLEVBQUU7VUFBRSxDQUNaLENBQUM7UUFBQSxDQUNHO01BQUMsQ0FDSDtJQUFDLENBQ0g7RUFBQyxDQUNMLENBQUM7QUFFVixDQUFDLENBQUM7QUFFRixlQUFlNUksV0FBVyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ interface Props {
3
+ open: boolean;
4
+ initialGroupIndex?: number;
5
+ onClose: () => void;
6
+ onSaved: () => void;
7
+ }
8
+ export default function DraftDesignerSheet({ open, initialGroupIndex, onClose, onSaved, }: Props): React.ReactPortal;
9
+ export {};