merchi_product_form
Version:
A React component for Merchi product forms
156 lines (152 loc) • 36.5 kB
JavaScript
'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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