UNPKG

merchi_product_form

Version:
156 lines (152 loc) 36.5 kB
'use client'; 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); } 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; } 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; } 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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 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); } import * as React from 'react'; import TooltipElement from './TooltipElement'; import { sortByPosition, variationFieldOptionCostDetail } from './utils'; import IconCheckedOrNoStock from './icons/IconCheckedOrNoStock'; import VariationError from './VariationError'; import VariationLabel from './VariationLabel'; import { useMerchiFormContext } from '../context/MerchiProductFormProvider'; /** * Formats a date for display */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; function formatDate(date) { var dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; var monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; return { dayName: dayNames[date.getDay()], dayNumber: String(date.getDate()), month: monthNames[date.getMonth()] }; } function TurnaroundOption(_ref) { var disabled = _ref.disabled, name = _ref.name, onChange = _ref.onChange, option = _ref.option, variation = _ref.variation, considerBusinessHours = _ref.considerBusinessHours, shippingTimeIncluded = _ref.shippingTimeIncluded; var _useMerchiFormContext = useMerchiFormContext(), hookForm = _useMerchiFormContext.hookForm, getQuote = _useMerchiFormContext.getQuote; var register = hookForm.register, watch = hookForm.watch; var _variation$selectedOp = variation.selectedOptions, selectedOptions = _variation$selectedOp === void 0 ? [] : _variation$selectedOp; var _option$available = option.available, available = _option$available === void 0 ? true : _option$available, _option$isVisible = option.isVisible, isVisible = _option$isVisible === void 0 ? true : _option$isVisible, userDeadline = option.userDeadline, value = option.value, optionId = option.optionId; var selectedValues = selectedOptions.map(function (o) { return o.optionId; }); var optionCost = variationFieldOptionCostDetail(option); var isSelected = selectedValues ? selectedValues.includes(optionId) : false; // Watch form value for real-time updates var watchedValue = watch("".concat(name, ".value")); var isActive = watchedValue ? String(watchedValue) === String(optionId) : isSelected; // Calculate the turnaround date based on days value var days = parseInt(value, 10) || 0; var formattedDate = userDeadline ? formatDate(new Date(userDeadline * 1000)) : null; var isDisabled = disabled || !available || !isVisible; var outOfStock = !isVisible ? ' - disabled' : !available ? ' - insufficient stock' : ''; var deliveryLabel = shippingTimeIncluded ? 'Delivery by' : 'Produced by'; var tooltipText = formattedDate ? "".concat(days, " day").concat(days !== 1 ? 's' : '', " - ").concat(deliveryLabel, " ").concat(formattedDate.dayName, ", ").concat(formattedDate.month, " ").concat(formattedDate.dayNumber).concat(outOfStock) : "".concat(days, " day").concat(days !== 1 ? 's' : '', " - ").concat(deliveryLabel).concat(outOfStock); var handleOnChange = function handleOnChange() { if (onChange) onChange(); getQuote(); }; return /*#__PURE__*/_jsx("div", { className: "turnaround-option ".concat(isActive ? 'turnaround-option-selected' : '', " ").concat(isDisabled ? 'turnaround-option-disabled' : ''), children: /*#__PURE__*/_jsxs("label", { className: "turnaround-option-label", children: [/*#__PURE__*/_jsx("input", _objectSpread({ type: "radio", className: "turnaround-option-input", defaultChecked: isSelected, disabled: isDisabled, value: optionId }, register("".concat(name, ".value"), { onChange: handleOnChange }))), /*#__PURE__*/_jsx(TooltipElement, { tooltip: tooltipText, children: /*#__PURE__*/_jsxs("div", { className: "turnaround-option-box", children: [/*#__PURE__*/_jsx(IconCheckedOrNoStock, { isChecked: isActive, noStock: !available }), formattedDate && /*#__PURE__*/_jsxs("div", { className: "turnaround-option-date", children: [/*#__PURE__*/_jsx("span", { className: "turnaround-option-month", children: formattedDate.month }), /*#__PURE__*/_jsx("span", { className: "turnaround-option-day", children: formattedDate.dayNumber }), /*#__PURE__*/_jsx("span", { className: "turnaround-option-dayname", children: formattedDate.dayName })] }), /*#__PURE__*/_jsxs("div", { className: "turnaround-option-days", children: [days, " day", days !== 1 ? 's' : ''] })] }) }), optionCost && /*#__PURE__*/_jsx("small", { className: "turnaround-option-cost", children: optionCost })] }) }); } function VariationTurnaroundTime(_ref2) { var disabled = _ref2.disabled, name = _ref2.name, onChange = _ref2.onChange, variation = _ref2.variation; var _variation$selectable = variation.selectableOptions, selectableOptions = _variation$selectable === void 0 ? [] : _variation$selectable, _variation$variationF = variation.variationField, variationField = _variation$variationF === void 0 ? {} : _variation$variationF; var _variationField$consi = variationField.considerBusinessHours, considerBusinessHours = _variationField$consi === void 0 ? false : _variationField$consi, _variationField$shipp = variationField.shippingTimeIncluded, shippingTimeIncluded = _variationField$shipp === void 0 ? false : _variationField$shipp; return /*#__PURE__*/_jsxs("div", { className: "merchi-turnaround-time-container", children: [/*#__PURE__*/_jsx(VariationLabel, { variationClassName: "merchi-turnaround-time", forceHideCost: true, variation: variation }), /*#__PURE__*/_jsx("div", { className: "turnaround-options-grid", children: sortByPosition(selectableOptions).map(function (option) { return /*#__PURE__*/_jsx(TurnaroundOption, { disabled: disabled, name: name, onChange: onChange, option: option, variation: variation, considerBusinessHours: considerBusinessHours, shippingTimeIncluded: shippingTimeIncluded }, "".concat(option.optionId, "-").concat(name, "-turnaround")); }) }), /*#__PURE__*/_jsx(VariationError, { name: name }), /*#__PURE__*/_jsx("style", { children: "\n .merchi-turnaround-time-container {\n margin-bottom: 1rem;\n }\n \n .turnaround-options-grid {\n display: flex;\n flex-wrap: wrap;\n gap: 0.75rem;\n padding-top: 0.5rem;\n }\n \n .turnaround-option {\n position: relative;\n }\n \n .turnaround-option-label {\n display: flex;\n flex-direction: column;\n align-items: center;\n cursor: pointer;\n margin: 0;\n }\n \n .turnaround-option-input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n \n .turnaround-option-box {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 90px;\n height: 100px;\n border: 2px solid #dee2e6;\n border-radius: 8px;\n background: #fff;\n transition: all 0.2s ease;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n }\n \n .turnaround-option-box:hover {\n border-color: #adb5bd;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n }\n \n .turnaround-option-selected .turnaround-option-box {\n border-color: #303dbf;\n background: linear-gradient(135deg, #f8f9ff 0%, #fff 100%);\n box-shadow: 0 4px 12px rgba(48, 61, 191, 0.2);\n }\n \n .turnaround-option-disabled .turnaround-option-box {\n background: #f8f9fa;\n border-color: #dee2e6;\n cursor: not-allowed;\n opacity: 0.6;\n }\n \n .turnaround-option-disabled .turnaround-option-label {\n cursor: not-allowed;\n }\n \n .turnaround-option-box i,\n .turnaround-option-box svg {\n position: absolute;\n top: -8px;\n right: -8px;\n border-radius: 50%;\n background: #fff;\n padding: 2px;\n color: #303dbf;\n font-size: 18px !important;\n animation: fadeInOpacity 0.2s ease;\n }\n \n .turnaround-option-date {\n display: flex;\n flex-direction: column;\n align-items: center;\n line-height: 1.2;\n }\n \n .turnaround-option-month {\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n color: #dc3545;\n letter-spacing: 0.5px;\n }\n \n .turnaround-option-day {\n font-size: 1.75rem;\n font-weight: 700;\n color: #212529;\n line-height: 1;\n }\n \n .turnaround-option-dayname {\n font-size: 0.7rem;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n \n .turnaround-option-days {\n font-size: 0.65rem;\n color: #6c757d;\n margin-top: 4px;\n padding: 2px 6px;\n background: #f8f9fa;\n border-radius: 4px;\n }\n \n .turnaround-option-selected .turnaround-option-days {\n background: rgba(48, 61, 191, 0.1);\n color: #303dbf;\n }\n \n .turnaround-option-cost {\n display: block;\n margin-top: 4px;\n font-size: 0.75rem;\n color: #6c757d;\n text-align: center;\n }\n \n @keyframes fadeInOpacity {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n " })] }); } export default VariationTurnaroundTime; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiUmVhY3QiLCJUb29sdGlwRWxlbWVudCIsInNvcnRCeVBvc2l0aW9uIiwidmFyaWF0aW9uRmllbGRPcHRpb25Db3N0RGV0YWlsIiwiSWNvbkNoZWNrZWRPck5vU3RvY2siLCJWYXJpYXRpb25FcnJvciIsIlZhcmlhdGlvbkxhYmVsIiwidXNlTWVyY2hpRm9ybUNvbnRleHQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiZm9ybWF0RGF0ZSIsImRhdGUiLCJkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJkYXlOYW1lIiwiZ2V0RGF5IiwiZGF5TnVtYmVyIiwiZ2V0RGF0ZSIsIm1vbnRoIiwiZ2V0TW9udGgiLCJUdXJuYXJvdW5kT3B0aW9uIiwiX3JlZiIsImRpc2FibGVkIiwibmFtZSIsIm9uQ2hhbmdlIiwib3B0aW9uIiwidmFyaWF0aW9uIiwiY29uc2lkZXJCdXNpbmVzc0hvdXJzIiwic2hpcHBpbmdUaW1lSW5jbHVkZWQiLCJfdXNlTWVyY2hpRm9ybUNvbnRleHQiLCJob29rRm9ybSIsImdldFF1b3RlIiwicmVnaXN0ZXIiLCJ3YXRjaCIsIl92YXJpYXRpb24kc2VsZWN0ZWRPcCIsInNlbGVjdGVkT3B0aW9ucyIsIl9vcHRpb24kYXZhaWxhYmxlIiwiYXZhaWxhYmxlIiwiX29wdGlvbiRpc1Zpc2libGUiLCJpc1Zpc2libGUiLCJ1c2VyRGVhZGxpbmUiLCJvcHRpb25JZCIsInNlbGVjdGVkVmFsdWVzIiwibWFwIiwib3B0aW9uQ29zdCIsImlzU2VsZWN0ZWQiLCJpbmNsdWRlcyIsIndhdGNoZWRWYWx1ZSIsImNvbmNhdCIsImlzQWN0aXZlIiwiZGF5cyIsInBhcnNlSW50IiwiZm9ybWF0dGVkRGF0ZSIsIkRhdGUiLCJpc0Rpc2FibGVkIiwib3V0T2ZTdG9jayIsImRlbGl2ZXJ5TGFiZWwiLCJ0b29sdGlwVGV4dCIsImhhbmRsZU9uQ2hhbmdlIiwiY2xhc3NOYW1lIiwiY2hpbGRyZW4iLCJ0eXBlIiwiZGVmYXVsdENoZWNrZWQiLCJ0b29sdGlwIiwiaXNDaGVja2VkIiwibm9TdG9jayIsIlZhcmlhdGlvblR1cm5hcm91bmRUaW1lIiwiX3JlZjIiLCJfdmFyaWF0aW9uJHNlbGVjdGFibGUiLCJzZWxlY3RhYmxlT3B0aW9ucyIsIl92YXJpYXRpb24kdmFyaWF0aW9uRiIsInZhcmlhdGlvbkZpZWxkIiwiX3ZhcmlhdGlvbkZpZWxkJGNvbnNpIiwiX3ZhcmlhdGlvbkZpZWxkJHNoaXBwIiwidmFyaWF0aW9uQ2xhc3NOYW1lIiwiZm9yY2VIaWRlQ29zdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1ZhcmlhdGlvblR1cm5hcm91bmRUaW1lLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XHJcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IFRvb2x0aXBFbGVtZW50IGZyb20gJy4vVG9vbHRpcEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBzb3J0QnlQb3NpdGlvbiwgdmFyaWF0aW9uRmllbGRPcHRpb25Db3N0RGV0YWlsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBJY29uQ2hlY2tlZE9yTm9TdG9jayBmcm9tICcuL2ljb25zL0ljb25DaGVja2VkT3JOb1N0b2NrJztcclxuaW1wb3J0IFZhcmlhdGlvbkVycm9yIGZyb20gJy4vVmFyaWF0aW9uRXJyb3InO1xyXG5pbXBvcnQgVmFyaWF0aW9uTGFiZWwgZnJvbSAnLi9WYXJpYXRpb25MYWJlbCc7XHJcbmltcG9ydCB7IHVzZU1lcmNoaUZvcm1Db250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9NZXJjaGlQcm9kdWN0Rm9ybVByb3ZpZGVyJztcclxuXHJcblxyXG4vKipcclxuICogRm9ybWF0cyBhIGRhdGUgZm9yIGRpc3BsYXlcclxuICovXHJcbmZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHsgZGF5TmFtZTogc3RyaW5nOyBkYXlOdW1iZXI6IHN0cmluZzsgbW9udGg6IHN0cmluZyB9IHtcclxuICBjb25zdCBkYXlOYW1lcyA9IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J107XHJcbiAgY29uc3QgbW9udGhOYW1lcyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCBcclxuICAgICAgICAgICAgICAgICAgICAgICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddO1xyXG4gIFxyXG4gIHJldHVybiB7XHJcbiAgICBkYXlOYW1lOiBkYXlOYW1lc1tkYXRlLmdldERheSgpXSxcclxuICAgIGRheU51bWJlcjogU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKSxcclxuICAgIG1vbnRoOiBtb250aE5hbWVzW2RhdGUuZ2V0TW9udGgoKV0sXHJcbiAgfTtcclxufVxyXG5cclxuaW50ZXJmYWNlIFR1cm5hcm91bmRPcHRpb25Qcm9wcyB7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBvbkNoYW5nZT86ICgpID0+IHZvaWQ7XHJcbiAgb3B0aW9uOiBhbnk7XHJcbiAgdmFyaWF0aW9uOiBhbnk7XHJcbiAgY29uc2lkZXJCdXNpbmVzc0hvdXJzOiBib29sZWFuO1xyXG4gIHNoaXBwaW5nVGltZUluY2x1ZGVkOiBib29sZWFuO1xyXG59XHJcblxyXG5mdW5jdGlvbiBUdXJuYXJvdW5kT3B0aW9uKHtcclxuICBkaXNhYmxlZCxcclxuICBuYW1lLFxyXG4gIG9uQ2hhbmdlLFxyXG4gIG9wdGlvbixcclxuICB2YXJpYXRpb24sXHJcbiAgY29uc2lkZXJCdXNpbmVzc0hvdXJzLFxyXG4gIHNoaXBwaW5nVGltZUluY2x1ZGVkLFxyXG59OiBUdXJuYXJvdW5kT3B0aW9uUHJvcHMpIHtcclxuICBjb25zdCB7IGhvb2tGb3JtLCBnZXRRdW90ZSB9ID0gdXNlTWVyY2hpRm9ybUNvbnRleHQoKTtcclxuICBjb25zdCB7IHJlZ2lzdGVyLCB3YXRjaCB9ID0gaG9va0Zvcm07XHJcbiAgY29uc3QgeyBzZWxlY3RlZE9wdGlvbnMgPSBbXSB9ID0gdmFyaWF0aW9uO1xyXG4gIGNvbnN0IHsgYXZhaWxhYmxlID0gdHJ1ZSwgaXNWaXNpYmxlID0gdHJ1ZSwgdXNlckRlYWRsaW5lLCB2YWx1ZSwgb3B0aW9uSWQgfSA9IG9wdGlvbjtcclxuXHJcbiAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSBzZWxlY3RlZE9wdGlvbnMubWFwKChvOiBhbnkpID0+IG8ub3B0aW9uSWQpO1xyXG4gIGNvbnN0IG9wdGlvbkNvc3QgPSB2YXJpYXRpb25GaWVsZE9wdGlvbkNvc3REZXRhaWwob3B0aW9uKTtcclxuICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZXMgPyBzZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyhvcHRpb25JZCkgOiBmYWxzZTtcclxuICBcclxuICAvLyBXYXRjaCBmb3JtIHZhbHVlIGZvciByZWFsLXRpbWUgdXBkYXRlc1xyXG4gIGNvbnN0IHdhdGNoZWRWYWx1ZSA9IHdhdGNoKGAke25hbWV9LnZhbHVlYCk7XHJcbiAgY29uc3QgaXNBY3RpdmUgPSB3YXRjaGVkVmFsdWUgPyBTdHJpbmcod2F0Y2hlZFZhbHVlKSA9PT0gU3RyaW5nKG9wdGlvbklkKSA6IGlzU2VsZWN0ZWQ7XHJcbiAgXHJcbiAgLy8gQ2FsY3VsYXRlIHRoZSB0dXJuYXJvdW5kIGRhdGUgYmFzZWQgb24gZGF5cyB2YWx1ZVxyXG4gIGNvbnN0IGRheXMgPSBwYXJzZUludCh2YWx1ZSwgMTApIHx8IDA7XHJcbiAgXHJcbiAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHVzZXJEZWFkbGluZSA/IGZvcm1hdERhdGUobmV3IERhdGUodXNlckRlYWRsaW5lICogMTAwMCkpIDogbnVsbDtcclxuICBjb25zdCBpc0Rpc2FibGVkID0gZGlzYWJsZWQgfHwgIWF2YWlsYWJsZSB8fCAhaXNWaXNpYmxlO1xyXG4gIGNvbnN0IG91dE9mU3RvY2sgPSAhaXNWaXNpYmxlID8gJyAtIGRpc2FibGVkJyA6ICFhdmFpbGFibGUgPyAnIC0gaW5zdWZmaWNpZW50IHN0b2NrJyA6ICcnO1xyXG4gIFxyXG4gIGNvbnN0IGRlbGl2ZXJ5TGFiZWwgPSBzaGlwcGluZ1RpbWVJbmNsdWRlZCA/ICdEZWxpdmVyeSBieScgOiAnUHJvZHVjZWQgYnknO1xyXG4gIGNvbnN0IHRvb2x0aXBUZXh0ID0gZm9ybWF0dGVkRGF0ZVxyXG4gICAgPyBgJHtkYXlzfSBkYXkke2RheXMgIT09IDEgPyAncycgOiAnJ30gLSAke2RlbGl2ZXJ5TGFiZWx9ICR7Zm9ybWF0dGVkRGF0ZS5kYXlOYW1lfSwgJHtmb3JtYXR0ZWREYXRlLm1vbnRofSAke2Zvcm1hdHRlZERhdGUuZGF5TnVtYmVyfSR7b3V0T2ZTdG9ja31gXHJcbiAgICA6IGAke2RheXN9IGRheSR7ZGF5cyAhPT0gMSA/ICdzJyA6ICcnfSAtICR7ZGVsaXZlcnlMYWJlbH0ke291dE9mU3RvY2t9YDtcclxuXHJcbiAgY29uc3QgaGFuZGxlT25DaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICBpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKCk7XHJcbiAgICBnZXRRdW90ZSgpO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzTmFtZT17YHR1cm5hcm91bmQtb3B0aW9uICR7aXNBY3RpdmUgPyAndHVybmFyb3VuZC1vcHRpb24tc2VsZWN0ZWQnIDogJyd9ICR7aXNEaXNhYmxlZCA/ICd0dXJuYXJvdW5kLW9wdGlvbi1kaXNhYmxlZCcgOiAnJ31gfVxyXG4gICAgPlxyXG4gICAgICA8bGFiZWwgY2xhc3NOYW1lPVwidHVybmFyb3VuZC1vcHRpb24tbGFiZWxcIj5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJ0dXJuYXJvdW5kLW9wdGlvbi1pbnB1dFwiXHJcbiAgICAgICAgICBkZWZhdWx0Q2hlY2tlZD17aXNTZWxlY3RlZH1cclxuICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxyXG4gICAgICAgICAgdmFsdWU9e29wdGlvbklkfVxyXG4gICAgICAgICAgey4uLnJlZ2lzdGVyKGAke25hbWV9LnZhbHVlYCwgeyBvbkNoYW5nZTogaGFuZGxlT25DaGFuZ2UgfSl9XHJcbiAgICAgICAgLz5cclxuICAgICAgICA8VG9vbHRpcEVsZW1lbnQgdG9vbHRpcD17dG9vbHRpcFRleHR9PlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0dXJuYXJvdW5kLW9wdGlvbi1ib3hcIj5cclxuICAgICAgICAgICAgPEljb25DaGVja2VkT3JOb1N0b2NrXHJcbiAgICAgICAgICAgICAgaXNDaGVja2VkPXtpc0FjdGl2ZX1cclxuICAgICAgICAgICAgICBub1N0b2NrPXshYXZhaWxhYmxlfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB7Zm9ybWF0dGVkRGF0ZSAmJiAoXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0dXJuYXJvdW5kLW9wdGlvbi1kYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0dXJuYXJvdW5kLW9wdGlvbi1tb250aFwiPntmb3JtYXR0ZWREYXRlLm1vbnRofTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInR1cm5hcm91bmQtb3B0aW9uLWRheVwiPntmb3JtYXR0ZWREYXRlLmRheU51bWJlcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0dXJuYXJvdW5kLW9wdGlvbi1kYXluYW1lXCI+e2Zvcm1hdHRlZERhdGUuZGF5TmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidHVybmFyb3VuZC1vcHRpb24tZGF5c1wiPlxyXG4gICAgICAgICAgICAgIHtkYXlzfSBkYXl7ZGF5cyAhPT0gMSA/ICdzJyA6ICcnfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvVG9vbHRpcEVsZW1lbnQ+XHJcbiAgICAgICAge29wdGlvbkNvc3QgJiYgKFxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzTmFtZT1cInR1cm5hcm91bmQtb3B0aW9uLWNvc3RcIj5cclxuICAgICAgICAgICAge29wdGlvbkNvc3R9XHJcbiAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUHJvcHMge1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgb25DaGFuZ2U/OiAoKSA9PiB2b2lkO1xyXG4gIHZhcmlhdGlvbjogYW55O1xyXG59XHJcblxyXG5mdW5jdGlvbiBWYXJpYXRpb25UdXJuYXJvdW5kVGltZSh7XHJcbiAgZGlzYWJsZWQsXHJcbiAgbmFtZSxcclxuICBvbkNoYW5nZSxcclxuICB2YXJpYXRpb24sXHJcbn06IFByb3BzKSB7XHJcbiAgY29uc3QgeyBzZWxlY3RhYmxlT3B0aW9ucyA9IFtdLCB2YXJpYXRpb25GaWVsZCA9IHt9IH0gPSB2YXJpYXRpb247XHJcbiAgY29uc3QgeyBjb25zaWRlckJ1c2luZXNzSG91cnMgPSBmYWxzZSwgc2hpcHBpbmdUaW1lSW5jbHVkZWQgPSBmYWxzZSB9ID0gdmFyaWF0aW9uRmllbGQ7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lcmNoaS10dXJuYXJvdW5kLXRpbWUtY29udGFpbmVyXCI+XHJcbiAgICAgIDxWYXJpYXRpb25MYWJlbFxyXG4gICAgICAgIHZhcmlhdGlvbkNsYXNzTmFtZT1cIm1lcmNoaS10dXJuYXJvdW5kLXRpbWVcIlxyXG4gICAgICAgIGZvcmNlSGlkZUNvc3Q9e3RydWV9XHJcbiAgICAgICAgdmFyaWF0aW9uPXt2YXJpYXRpb259XHJcbiAgICAgIC8+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidHVybmFyb3VuZC1vcHRpb25zLWdyaWRcIj5cclxuICAgICAgICB7c29ydEJ5UG9zaXRpb24oc2VsZWN0YWJsZU9wdGlvbnMpLm1hcCgob3B0aW9uOiBhbnkpID0+IChcclxuICAgICAgICAgIDxUdXJuYXJvdW5kT3B0aW9uXHJcbiAgICAgICAgICAgIGtleT17YCR7b3B0aW9uLm9wdGlvbklkfS0ke25hbWV9LXR1cm5hcm91bmRgfVxyXG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgICAgIG5hbWU9e25hbWV9XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cclxuICAgICAgICAgICAgb3B0aW9uPXtvcHRpb259XHJcbiAgICAgICAgICAgIHZhcmlhdGlvbj17dmFyaWF0aW9ufVxyXG4gICAgICAgICAgICBjb25zaWRlckJ1c2luZXNzSG91cnM9e2NvbnNpZGVyQnVzaW5lc3NIb3Vyc31cclxuICAgICAgICAgICAgc2hpcHBpbmdUaW1lSW5jbHVkZWQ9e3NoaXBwaW5nVGltZUluY2x1ZGVkfVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICApKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxWYXJpYXRpb25FcnJvciBuYW1lPXtuYW1lfSAvPlxyXG4gICAgICBcclxuICAgICAgPHN0eWxlPntgXHJcbiAgICAgICAgLm1lcmNoaS10dXJuYXJvdW5kLXRpbWUtY29udGFpbmVyIHtcclxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC50dXJuYXJvdW5kLW9wdGlvbnMtZ3JpZCB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xyXG4gICAgICAgICAgZ2FwOiAwLjc1cmVtO1xyXG4gICAgICAgICAgcGFkZGluZy10b3A6IDAuNXJlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLnR1cm5hcm91bmQtb3B0aW9uIHtcclxuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLnR1cm5hcm91bmQtb3B0aW9uLWxhYmVsIHtcclxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLnR1cm5hcm91bmQtb3B0aW9uLWlucHV0IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgICAgICB3aWR0aDogMDtcclxuICAgICAgICAgIGhlaWdodDogMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLnR1cm5hcm91bmQtb3B0aW9uLWJveCB7XHJcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICAgIHdpZHRoOiA5MHB4O1xyXG4gICAgICAgICAgaGVpZ2h0OiAxMDBweDtcclxuICAgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICNkZWUyZTY7XHJcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcclxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAudHVybmFyb3VuZC1vcHRpb24tYm94OmhvdmVyIHtcclxuICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FkYjViZDtcclxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC50dXJuYXJvdW5kLW9wdGlvbi1zZWxlY3RlZCAudHVybmFyb3VuZC1vcHRpb24tYm94IHtcclxuICAgICAgICAgIGJvcmRlci1jb2xvcjogIzMwM2RiZjtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmOGY5ZmYgMCUsICNmZmYgMTAwJSk7XHJcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoNDgsIDYxLCAxOTEsIDAuMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC50dXJuYXJvdW5kLW9wdGlvbi1kaXNhYmxlZCAudHVybmFyb3VuZC1vcHRpb24tYm94IHtcclxuICAgICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7XHJcbiAgICAgICAgICBib3JkZXItY29sb3I6ICNkZWUyZTY7XHJcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xyXG4gICAgICAgICAgb3BhY2l0eTogMC42O1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAudHVybmFyb3VuZC1vcHRpb24tZGlzYWJsZWQgLnR1cm5hcm91bmQtb3B0aW9uLWxhYmVsIHtcclxuICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC50dXJuYXJvdW5kLW9wdGlvbi1ib3ggaSxcclxuICAgICAgICAudHVybmFyb3VuZC1vcHRpb24tYm94IHN2ZyB7XHJcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICB0b3A6IC04cHg7XHJcbiAgICAgICAgICByaWdodDogLThweDtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICAgICAgICBwYWRkaW5nOiAycHg7XHJcbiAgICAgICAgICBjb2xvcjogIzMwM2RiZjtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW5PcGFjaXR5IDAuMnMgZWFzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLnR1cm5hcm91bmQtb3B0aW9uLWRhdGUge1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLnR1cm5hcm91bmQtb3B0aW9uLW1vbnRoIHtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMC43cmVtO1xyXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XHJcbiAgICAgICAgICBjb2xvcjogI2RjMzU0NTtcclxuICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLnR1cm5hcm91bmQtb3B0aW9uLWRheSB7XHJcbiAgICAgICAgICBmb250LXNpemU6IDEuNzVyZW07XHJcbiAgICAgICAgICBmb250LXdlaWdodDogNzAwO1xyXG4gICAgICAgICAgY29sb3I6ICMyMTI1Mjk7XHJcbiAgICAgICAgICBsaW5lLWhlaWdodDogMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLnR1cm5hcm91bmQtb3B0aW9uLWRheW5hbWUge1xyXG4gICAgICAgICAgZm9udC1zaXplOiAwLjdyZW07XHJcbiAgICAgICAgICBjb2xvcjogIzZjNzU3ZDtcclxuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XHJcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC50dXJuYXJvdW5kLW9wdGlvbi1kYXlzIHtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMC42NXJlbTtcclxuICAgICAgICAgIGNvbG9yOiAjNmM3NTdkO1xyXG4gICAgICAgICAgbWFyZ2luLXRvcDogNHB4O1xyXG4gICAgICAgICAgcGFkZGluZzogMnB4IDZweDtcclxuICAgICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7XHJcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC50dXJuYXJvdW5kLW9wdGlvbi1zZWxlY3RlZCAudHVybmFyb3VuZC1vcHRpb24tZGF5cyB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDQ4LCA2MSwgMTkxLCAwLjEpO1xyXG4gICAgICAgICAgY29sb3I6ICMzMDNkYmY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC50dXJuYXJvdW5kLW9wdGlvbi1jb3N0IHtcclxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgbWFyZ2luLXRvcDogNHB4O1xyXG4gICAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xyXG4gICAgICAgICAgY29sb3I6ICM2Yzc1N2Q7XHJcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIEBrZXlmcmFtZXMgZmFkZUluT3BhY2l0eSB7XHJcbiAgICAgICAgICBmcm9tIHsgb3BhY2l0eTogMDsgfVxyXG4gICAgICAgICAgdG8geyBvcGFjaXR5OiAxOyB9XHJcbiAgICAgICAgfVxyXG4gICAgICBgfTwvc3R5bGU+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWYXJpYXRpb25UdXJuYXJvdW5kVGltZTtcclxuXHJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTs7QUFBQyxTQUFBQSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFB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