@merchi/product-form 1.19.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +272 -0
- package/lib/actions/jobs.d.ts +3 -0
- package/lib/actions/jobs.js +80 -0
- package/lib/actions/leads.d.ts +7 -0
- package/lib/actions/leads.js +67 -0
- package/lib/components/AlertVariationSellerEditable.d.ts +6 -0
- package/lib/components/AlertVariationSellerEditable.js +46 -0
- package/lib/components/Collapse.d.ts +3 -0
- package/lib/components/Collapse.js +34 -0
- package/lib/components/DateCountdown.d.ts +44 -0
- package/lib/components/DateCountdown.js +188 -0
- package/lib/components/DropzoneInput.d.ts +10 -0
- package/lib/components/DropzoneInput.js +169 -0
- package/lib/components/DynamicVariationInput.d.ts +9 -0
- package/lib/components/DynamicVariationInput.js +71 -0
- package/lib/components/FormLead.d.ts +10 -0
- package/lib/components/FormLead.js +215 -0
- package/lib/components/GroupInventory.d.ts +6 -0
- package/lib/components/GroupInventory.js +16 -0
- package/lib/components/InputGroupQuantity.d.ts +8 -0
- package/lib/components/InputGroupQuantity.js +117 -0
- package/lib/components/InputHiddenStatic.d.ts +8 -0
- package/lib/components/InputHiddenStatic.js +24 -0
- package/lib/components/InputProductQuantity.d.ts +7 -0
- package/lib/components/InputProductQuantity.js +102 -0
- package/lib/components/InventoryStatus.d.ts +7 -0
- package/lib/components/InventoryStatus.js +67 -0
- package/lib/components/MerchiProductForm.d.ts +62 -0
- package/lib/components/MerchiProductForm.js +51 -0
- package/lib/components/PriceMatrix.d.ts +27 -0
- package/lib/components/PriceMatrix.js +106 -0
- package/lib/components/ProductButtonsSubmit.d.ts +3 -0
- package/lib/components/ProductButtonsSubmit.js +52 -0
- package/lib/components/ProductFeatureDeadline.d.ts +3 -0
- package/lib/components/ProductFeatureDeadline.js +25 -0
- package/lib/components/ProductGroupBuyStatus.d.ts +3 -0
- package/lib/components/ProductGroupBuyStatus.js +47 -0
- package/lib/components/ProductPriceMatrix.d.ts +3 -0
- package/lib/components/ProductPriceMatrix.js +51 -0
- package/lib/components/ProductTitle.d.ts +3 -0
- package/lib/components/ProductTitle.js +36 -0
- package/lib/components/ProductTotalCost.d.ts +3 -0
- package/lib/components/ProductTotalCost.js +74 -0
- package/lib/components/ProductUnitPrice.d.ts +7 -0
- package/lib/components/ProductUnitPrice.js +51 -0
- package/lib/components/TooltipElement.d.ts +9 -0
- package/lib/components/TooltipElement.js +35 -0
- package/lib/components/VariationAreaInput.d.ts +8 -0
- package/lib/components/VariationAreaInput.js +219 -0
- package/lib/components/VariationCheckBoxOrRadioOption.d.ts +10 -0
- package/lib/components/VariationCheckBoxOrRadioOption.js +82 -0
- package/lib/components/VariationCheckboxRadio.d.ts +17 -0
- package/lib/components/VariationCheckboxRadio.js +57 -0
- package/lib/components/VariationColourExtractInput.d.ts +8 -0
- package/lib/components/VariationColourExtractInput.js +395 -0
- package/lib/components/VariationError.d.ts +7 -0
- package/lib/components/VariationError.js +52 -0
- package/lib/components/VariationFieldInputInstructions.d.ts +10 -0
- package/lib/components/VariationFieldInputInstructions.js +50 -0
- package/lib/components/VariationFieldInstructions.d.ts +3 -0
- package/lib/components/VariationFieldInstructions.js +22 -0
- package/lib/components/VariationFieldNameAndCostInputs.d.ts +7 -0
- package/lib/components/VariationFieldNameAndCostInputs.js +34 -0
- package/lib/components/VariationFieldOptionDefaultInputs.d.ts +7 -0
- package/lib/components/VariationFieldOptionDefaultInputs.js +48 -0
- package/lib/components/VariationFieldStaticValues.d.ts +8 -0
- package/lib/components/VariationFieldStaticValues.js +57 -0
- package/lib/components/VariationFileInput.d.ts +8 -0
- package/lib/components/VariationFileInput.js +229 -0
- package/lib/components/VariationInput.d.ts +11 -0
- package/lib/components/VariationInput.js +97 -0
- package/lib/components/VariationLabel.d.ts +11 -0
- package/lib/components/VariationLabel.js +85 -0
- package/lib/components/VariationOptionColour.d.ts +8 -0
- package/lib/components/VariationOptionColour.js +50 -0
- package/lib/components/VariationOptionImage.d.ts +8 -0
- package/lib/components/VariationOptionImage.js +52 -0
- package/lib/components/VariationSelect.d.ts +8 -0
- package/lib/components/VariationSelect.js +66 -0
- package/lib/components/VariationSelectElements.d.ts +16 -0
- package/lib/components/VariationSelectElements.js +141 -0
- package/lib/components/VariationTurnaroundTime.d.ts +9 -0
- package/lib/components/VariationTurnaroundTime.js +156 -0
- package/lib/components/Variations.d.ts +9 -0
- package/lib/components/Variations.js +109 -0
- package/lib/components/VariationsGroups.d.ts +8 -0
- package/lib/components/VariationsGroups.js +79 -0
- package/lib/components/buttons/ButtonAddGroup.d.ts +7 -0
- package/lib/components/buttons/ButtonAddGroup.js +38 -0
- package/lib/components/buttons/ButtonProductSubmit.d.ts +7 -0
- package/lib/components/buttons/ButtonProductSubmit.js +33 -0
- package/lib/components/buttons/ButtonRemoveGroup.d.ts +8 -0
- package/lib/components/buttons/ButtonRemoveGroup.js +25 -0
- package/lib/components/buttons/index.d.ts +4 -0
- package/lib/components/buttons/index.js +5 -0
- package/lib/components/cost.d.ts +11 -0
- package/lib/components/cost.js +44 -0
- package/lib/components/currency.d.ts +16 -0
- package/lib/components/currency.js +184 -0
- package/lib/components/drafts/DraftApprovePanel.d.ts +6 -0
- package/lib/components/drafts/DraftApprovePanel.js +315 -0
- package/lib/components/drafts/DraftCanvas.d.ts +13 -0
- package/lib/components/drafts/DraftCanvas.js +496 -0
- package/lib/components/drafts/DraftDesignerSheet.d.ts +9 -0
- package/lib/components/drafts/DraftDesignerSheet.js +685 -0
- package/lib/components/drafts/ProductDraftsHost.d.ts +3 -0
- package/lib/components/drafts/ProductDraftsHost.js +207 -0
- package/lib/components/drafts/useHtmlImage.d.ts +1 -0
- package/lib/components/drafts/useHtmlImage.js +45 -0
- package/lib/components/icons/IconChecked.d.ts +3 -0
- package/lib/components/icons/IconChecked.js +10 -0
- package/lib/components/icons/IconCheckedOrNoStock.d.ts +7 -0
- package/lib/components/icons/IconCheckedOrNoStock.js +13 -0
- package/lib/components/icons/IconCountryFlag.d.ts +8 -0
- package/lib/components/icons/IconCountryFlag.js +27 -0
- package/lib/components/icons/IconFile.d.ts +7 -0
- package/lib/components/icons/IconFile.js +41 -0
- package/lib/components/icons/IconNoStock.d.ts +3 -0
- package/lib/components/icons/IconNoStock.js +12 -0
- package/lib/components/icons/index.d.ts +5 -0
- package/lib/components/icons/index.js +6 -0
- package/lib/components/quoteAfterFieldChange.d.ts +7 -0
- package/lib/components/quoteAfterFieldChange.js +11 -0
- package/lib/components/quoteAfterFieldChange.test.js +58 -0
- package/lib/components/utils.d.ts +26 -0
- package/lib/components/utils.js +500 -0
- package/lib/context/MerchiProductFormProvider.d.ts +177 -0
- package/lib/context/MerchiProductFormProvider.js +1020 -0
- package/lib/images/product-not-found.png +0 -0
- package/lib/index.d.ts +42 -0
- package/lib/index.js +41 -0
- package/lib/styles/globals.css +1590 -0
- package/lib/styles/globals.css.map +1 -0
- package/lib/styles/globals.scss +1698 -0
- package/lib/utils/area.d.ts +77 -0
- package/lib/utils/area.js +298 -0
- package/lib/utils/cleanFormVariationJson.d.ts +5 -0
- package/lib/utils/cleanFormVariationJson.js +39 -0
- package/lib/utils/cleanFormVariationJson.test.js +54 -0
- package/lib/utils/countries.d.ts +7 -0
- package/lib/utils/countries.js +290 -0
- package/lib/utils/currency.d.ts +2 -0
- package/lib/utils/currency.js +188 -0
- package/lib/utils/draftExport.d.ts +21 -0
- package/lib/utils/draftExport.js +481 -0
- package/lib/utils/draftExport.test.js +78 -0
- package/lib/utils/draftFonts.d.ts +55 -0
- package/lib/utils/draftFonts.js +68 -0
- package/lib/utils/draftStorage.d.ts +25 -0
- package/lib/utils/draftStorage.js +148 -0
- package/lib/utils/draftStorage.test.js +125 -0
- package/lib/utils/draftTemplates.d.ts +87 -0
- package/lib/utils/draftTemplates.js +579 -0
- package/lib/utils/draftTemplates.test.js +476 -0
- package/lib/utils/formErrors.d.ts +2 -0
- package/lib/utils/formErrors.js +29 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +4 -0
- package/lib/utils/priceMatrix.d.ts +57 -0
- package/lib/utils/priceMatrix.js +82 -0
- package/lib/utils/priceMatrix.test.js +200 -0
- package/lib/utils/products.d.ts +40 -0
- package/lib/utils/products.js +68 -0
- package/lib/utils/quantity.d.ts +7 -0
- package/lib/utils/quantity.js +19 -0
- package/lib/utils/quantity.test.js +42 -0
- package/lib/utils/reconcileVariations.d.ts +25 -0
- package/lib/utils/reconcileVariations.js +246 -0
- package/lib/utils/reconcileVariations.test.js +239 -0
- package/lib/utils/selectedVariationCosts.d.ts +6 -0
- package/lib/utils/selectedVariationCosts.js +59 -0
- package/lib/utils/selectedVariationCosts.test.js +66 -0
- package/lib/utils/selections.d.ts +23 -0
- package/lib/utils/selections.js +76 -0
- package/lib/utils/selections.test.js +159 -0
- package/lib/utils/singleOptionVariation.d.ts +2 -0
- package/lib/utils/singleOptionVariation.js +22 -0
- package/lib/utils/singleOptionVariation.test.js +59 -0
- package/lib/utils/supportedNumbers.d.ts +1 -0
- package/lib/utils/supportedNumbers.js +27 -0
- package/lib/utils/types.d.ts +114 -0
- package/lib/utils/types.js +50 -0
- package/lib/utils/url.d.ts +3 -0
- package/lib/utils/url.js +65 -0
- package/lib/utils/variationFields.d.ts +5 -0
- package/lib/utils/variationFields.js +116 -0
- package/lib/utils/variationFields.test.js +108 -0
- package/package.json +93 -0
|
@@ -0,0 +1,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 {};
|