kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
153 lines (152 loc) • 27.7 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.ChickletTag = exports.ChickletButton = void 0;
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _core = require("@dnd-kit/core");
var _sortable = require("@dnd-kit/sortable");
var _modifiers = require("@dnd-kit/modifiers");
var _delete = _interopRequireDefault(require("../icons/delete"));
var _localization = require("@kepler.gl/localization");
var _templateObject, _templateObject2, _templateObject3; // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
var ChickletButton = exports.ChickletButton = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n background: ", ";\n border-radius: 1px;\n color: ", ";\n font-size: 11px;\n line-height: 20px;\n margin: 4px 10px 4px 3px;\n padding: 2px 6px;\n display: flex;\n align-items: center;\n max-width: calc(100% - 8px);\n\n &:hover {\n color: ", ";\n }\n"])), function (props) {
return props.inputTheme === 'light' ? props.theme.chickletBgdLT : props.theme.chickletBgd;
}, function (props) {
return props.inputTheme === 'light' ? props.theme.textColorLT : props.theme.textColor;
}, function (props) {
return props.inputTheme === 'light' ? props.theme.textColorHlLT : props.theme.textColorHl;
});
var DND_MODIFIERS = [_modifiers.restrictToParentElement];
var ChickletTag = exports.ChickletTag = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-right: 10px;\n text-overflow: ellipsis;\n width: 100%;\n overflow: hidden;\n\n &:hover {\n overflow: visible;\n }\n"])));
var Chicklet = function Chicklet(_ref) {
var disabled = _ref.disabled,
name = _ref.name,
remove = _ref.remove,
inputTheme = _ref.inputTheme;
return /*#__PURE__*/_react["default"].createElement(ChickletButton, {
inputTheme: inputTheme
}, /*#__PURE__*/_react["default"].createElement(ChickletTag, null, name), /*#__PURE__*/_react["default"].createElement(_delete["default"], {
onClick: disabled ? undefined : remove
}));
};
var ChickletedInputContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n ", "\n\n color: ", ";\n overflow: hidden;\n"])), function (props) {
return props.inputTheme === 'secondary' ? props.theme.secondaryChickletedInput : props.inputTheme === 'light' ? props.theme.chickletedInputLT : props.theme.chickletedInput;
}, function (props) {
return props.hasPlaceholder ? props.theme.selectColorPlaceHolder : props.theme.selectColor;
});
var ChickletedItem = function ChickletedItem(_ref2) {
var item = _ref2.item,
removeItem = _ref2.removeItem,
displayOption = _ref2.displayOption,
CustomChickletComponent = _ref2.CustomChickletComponent,
inputTheme = _ref2.inputTheme,
disabled = _ref2.disabled,
itemId = _ref2.itemId;
var _useSortable = (0, _sortable.useSortable)({
id: itemId
}),
attributes = _useSortable.attributes,
listeners = _useSortable.listeners,
setNodeRef = _useSortable.setNodeRef,
transform = _useSortable.transform,
transition = _useSortable.transition,
isDragging = _useSortable.isDragging;
var chickletProps = (0, _react.useMemo)(function () {
return {
inputTheme: inputTheme,
disabled: disabled,
name: displayOption(item),
displayOption: displayOption,
item: item,
attributes: attributes,
listeners: listeners,
setNodeRef: setNodeRef,
transform: transform,
transition: transition,
isDragging: isDragging,
remove: function remove(e) {
return removeItem(item, e);
}
};
}, [item, removeItem, displayOption, inputTheme, disabled, attributes, listeners, setNodeRef, transform, transition, isDragging]);
return CustomChickletComponent ? /*#__PURE__*/_react["default"].createElement(CustomChickletComponent, chickletProps) : /*#__PURE__*/_react["default"].createElement(Chicklet, chickletProps);
};
var ChickletedInput = function ChickletedInput(_ref3) {
var disabled = _ref3.disabled,
onClick = _ref3.onClick,
className = _ref3.className,
_ref3$selectedItems = _ref3.selectedItems,
selectedItems = _ref3$selectedItems === void 0 ? [] : _ref3$selectedItems,
_ref3$placeholder = _ref3.placeholder,
placeholder = _ref3$placeholder === void 0 ? '' : _ref3$placeholder,
removeItem = _ref3.removeItem,
_ref3$reorderItems = _ref3.reorderItems,
reorderItems = _ref3$reorderItems === void 0 ? function (d) {
return d;
} : _ref3$reorderItems,
_ref3$displayOption = _ref3.displayOption,
displayOption = _ref3$displayOption === void 0 ? function (d) {
return String(d);
} : _ref3$displayOption,
inputTheme = _ref3.inputTheme,
CustomChickletComponent = _ref3.CustomChickletComponent;
var selectedItemIds = (0, _react.useMemo)(function () {
return selectedItems.map(function (item) {
return displayOption(item);
});
}, [displayOption, selectedItems]);
var handleDragEnd = (0, _react.useCallback)(function (_ref4) {
var active = _ref4.active,
over = _ref4.over;
if (!over) return;
if (active.id !== over.id) {
var oldIndex = selectedItemIds.findIndex(function (itemId) {
return itemId === active.id;
});
var newIndex = selectedItemIds.findIndex(function (itemId) {
return itemId === over.id;
});
reorderItems((0, _sortable.arrayMove)(selectedItems, oldIndex, newIndex));
}
}, [selectedItemIds, selectedItems, reorderItems]);
return /*#__PURE__*/_react["default"].createElement(ChickletedInputContainer, {
className: "".concat(className, " chickleted-input"),
onClick: onClick,
inputTheme: inputTheme,
hasPlaceholder: !selectedItems || !selectedItems.length
}, /*#__PURE__*/_react["default"].createElement(_core.DndContext, {
onDragEnd: handleDragEnd,
modifiers: DND_MODIFIERS,
collisionDetection: _core.pointerWithin,
autoScroll: false
}, /*#__PURE__*/_react["default"].createElement(_sortable.SortableContext, {
items: selectedItemIds
}, selectedItems.length > 0 ? selectedItems.map(function (item, index) {
return /*#__PURE__*/_react["default"].createElement(ChickletedItem, {
item: item,
itemId: displayOption(item),
removeItem: removeItem,
displayOption: displayOption,
CustomChickletComponent: CustomChickletComponent,
disabled: disabled,
inputTheme: inputTheme,
key: "".concat(displayOption(item), "_").concat(index)
});
}) : /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(className, " chickleted-input__placeholder")
}, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: placeholder || 'placeholder.enterValue'
}))), /*#__PURE__*/_react["default"].createElement(_core.DragOverlay, {
dropAnimation: null
})));
};
var _default = exports["default"] = ChickletedInput;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY29yZSIsIl9zb3J0YWJsZSIsIl9tb2RpZmllcnMiLCJfZGVsZXRlIiwiX2xvY2FsaXphdGlvbiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiQ2hpY2tsZXRCdXR0b24iLCJleHBvcnRzIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsImlucHV0VGhlbWUiLCJ0aGVtZSIsImNoaWNrbGV0QmdkTFQiLCJjaGlja2xldEJnZCIsInRleHRDb2xvckxUIiwidGV4dENvbG9yIiwidGV4dENvbG9ySGxMVCIsInRleHRDb2xvckhsIiwiRE5EX01PRElGSUVSUyIsInJlc3RyaWN0VG9QYXJlbnRFbGVtZW50IiwiQ2hpY2tsZXRUYWciLCJzcGFuIiwiQ2hpY2tsZXQiLCJfcmVmIiwiZGlzYWJsZWQiLCJuYW1lIiwicmVtb3ZlIiwiY3JlYXRlRWxlbWVudCIsIm9uQ2xpY2siLCJ1bmRlZmluZWQiLCJDaGlja2xldGVkSW5wdXRDb250YWluZXIiLCJzZWNvbmRhcnlDaGlja2xldGVkSW5wdXQiLCJjaGlja2xldGVkSW5wdXRMVCIsImNoaWNrbGV0ZWRJbnB1dCIsImhhc1BsYWNlaG9sZGVyIiwic2VsZWN0Q29sb3JQbGFjZUhvbGRlciIsInNlbGVjdENvbG9yIiwiQ2hpY2tsZXRlZEl0ZW0iLCJfcmVmMiIsIml0ZW0iLCJyZW1vdmVJdGVtIiwiZGlzcGxheU9wdGlvbiIsIkN1c3RvbUNoaWNrbGV0Q29tcG9uZW50IiwiaXRlbUlkIiwiX3VzZVNvcnRhYmxlIiwidXNlU29ydGFibGUiLCJpZCIsImF0dHJpYnV0ZXMiLCJsaXN0ZW5lcnMiLCJzZXROb2RlUmVmIiwidHJhbnNmb3JtIiwidHJhbnNpdGlvbiIsImlzRHJhZ2dpbmciLCJjaGlja2xldFByb3BzIiwidXNlTWVtbyIsIkNoaWNrbGV0ZWRJbnB1dCIsIl9yZWYzIiwiY2xhc3NOYW1lIiwiX3JlZjMkc2VsZWN0ZWRJdGVtcyIsInNlbGVjdGVkSXRlbXMiLCJfcmVmMyRwbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIiwiX3JlZjMkcmVvcmRlckl0ZW1zIiwicmVvcmRlckl0ZW1zIiwiZCIsIl9yZWYzJGRpc3BsYXlPcHRpb24iLCJTdHJpbmciLCJzZWxlY3RlZEl0ZW1JZHMiLCJtYXAiLCJoYW5kbGVEcmFnRW5kIiwidXNlQ2FsbGJhY2siLCJfcmVmNCIsImFjdGl2ZSIsIm92ZXIiLCJvbGRJbmRleCIsImZpbmRJbmRleCIsIm5ld0luZGV4IiwiYXJyYXlNb3ZlIiwiY29uY2F0IiwibGVuZ3RoIiwiRG5kQ29udGV4dCIsIm9uRHJhZ0VuZCIsIm1vZGlmaWVycyIsImNvbGxpc2lvbkRldGVjdGlvbiIsInBvaW50ZXJXaXRoaW4iLCJhdXRvU2Nyb2xsIiwiU29ydGFibGVDb250ZXh0IiwiaXRlbXMiLCJpbmRleCIsImtleSIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJEcmFnT3ZlcmxheSIsImRyb3BBbmltYXRpb24iLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vaXRlbS1zZWxlY3Rvci9jaGlja2xldGVkLWlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHtNb3VzZUV2ZW50SGFuZGxlciwgUmVhY3ROb2RlLCB1c2VNZW1vLCB1c2VDYWxsYmFja30gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgc3R5bGVkLCB7SVN0eWxlZENvbXBvbmVudH0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtEbmRDb250ZXh0LCBEcmFnT3ZlcmxheSwgcG9pbnRlcldpdGhpbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQge1NvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGUsIGFycmF5TW92ZX0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHtyZXN0cmljdFRvUGFyZW50RWxlbWVudH0gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJztcblxuaW1wb3J0IERlbGV0ZSBmcm9tICcuLi9pY29ucy9kZWxldGUnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge0Jhc2VDb21wb25lbnRQcm9wc30gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBDaGlja2xldEJ1dHRvblByb3BzID0gQmFzZUNvbXBvbmVudFByb3BzICYge1xuICBpbnB1dFRoZW1lPzogc3RyaW5nO1xuICByZWY/OiAobm9kZTogSFRNTEVsZW1lbnQgfCBudWxsKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IENoaWNrbGV0QnV0dG9uOiBJU3R5bGVkQ29tcG9uZW50PFxuICAnd2ViJyxcbiAgQ2hpY2tsZXRCdXR0b25Qcm9wc1xuPiA9IHN0eWxlZC5kaXY8Q2hpY2tsZXRCdXR0b25Qcm9wcz5gXG4gIGJhY2tncm91bmQ6ICR7cHJvcHMgPT5cbiAgICBwcm9wcy5pbnB1dFRoZW1lID09PSAnbGlnaHQnID8gcHJvcHMudGhlbWUuY2hpY2tsZXRCZ2RMVCA6IHByb3BzLnRoZW1lLmNoaWNrbGV0QmdkfTtcbiAgYm9yZGVyLXJhZGl1czogMXB4O1xuICBjb2xvcjogJHtwcm9wcyA9PlxuICAgIHByb3BzLmlucHV0VGhlbWUgPT09ICdsaWdodCcgPyBwcm9wcy50aGVtZS50ZXh0Q29sb3JMVCA6IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIG1hcmdpbjogNHB4IDEwcHggNHB4IDNweDtcbiAgcGFkZGluZzogMnB4IDZweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA4cHgpO1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAke3Byb3BzID0+XG4gICAgICBwcm9wcy5pbnB1dFRoZW1lID09PSAnbGlnaHQnID8gcHJvcHMudGhlbWUudGV4dENvbG9ySGxMVCA6IHByb3BzLnRoZW1lLnRleHRDb2xvckhsfTtcbiAgfVxuYDtcblxuY29uc3QgRE5EX01PRElGSUVSUyA9IFtyZXN0cmljdFRvUGFyZW50RWxlbWVudF07XG5leHBvcnQgY29uc3QgQ2hpY2tsZXRUYWc6IElTdHlsZWRDb21wb25lbnQ8J3dlYic+ID0gc3R5bGVkLnNwYW5gXG4gIG1hcmdpbi1yaWdodDogMTBweDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICY6aG92ZXIge1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICB9XG5gO1xuXG5pbnRlcmZhY2UgQ2hpY2tsZXRQcm9wcyB7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbmFtZTogUmVhY3ROb2RlO1xuICByZW1vdmU/OiBNb3VzZUV2ZW50SGFuZGxlcjxTVkdTVkdFbGVtZW50PjtcbiAgaW5wdXRUaGVtZT86IHN0cmluZztcbn1cblxuY29uc3QgQ2hpY2tsZXQgPSAoe2Rpc2FibGVkLCBuYW1lLCByZW1vdmUsIGlucHV0VGhlbWV9OiBDaGlja2xldFByb3BzKSA9PiAoXG4gIDxDaGlja2xldEJ1dHRvbiBpbnB1dFRoZW1lPXtpbnB1dFRoZW1lfT5cbiAgICA8Q2hpY2tsZXRUYWc+e25hbWV9PC9DaGlja2xldFRhZz5cbiAgICA8RGVsZXRlIG9uQ2xpY2s9e2Rpc2FibGVkID8gdW5kZWZpbmVkIDogcmVtb3ZlfSAvPlxuICA8L0NoaWNrbGV0QnV0dG9uPlxuKTtcblxuZXhwb3J0IHR5cGUgQ2hpY2tsZXRlZElucHV0Q29udGFpbmVyUHJvcHMgPSBCYXNlQ29tcG9uZW50UHJvcHMgJiB7XG4gIGlucHV0VGhlbWU/OiBzdHJpbmc7XG4gIGhhc1BsYWNlaG9sZGVyPzogYm9vbGVhbjtcbiAgZm9jdXM/OiBIVE1MSW5wdXRFbGVtZW50Wydmb2N1cyddO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IENoaWNrbGV0ZWRJbnB1dENvbnRhaW5lcjogSVN0eWxlZENvbXBvbmVudDxcbiAgJ3dlYicsXG4gIENoaWNrbGV0ZWRJbnB1dENvbnRhaW5lclByb3BzXG4+ID0gc3R5bGVkLmRpdjxDaGlja2xldGVkSW5wdXRDb250YWluZXJQcm9wcz5gXG4gICR7cHJvcHMgPT5cbiAgICBwcm9wcy5pbnB1dFRoZW1lID09PSAnc2Vjb25kYXJ5J1xuICAgICAgPyBwcm9wcy50aGVtZS5zZWNvbmRhcnlDaGlja2xldGVkSW5wdXRcbiAgICAgIDogcHJvcHMuaW5wdXRUaGVtZSA9PT0gJ2xpZ2h0J1xuICAgICAgPyBwcm9wcy50aGVtZS5jaGlja2xldGVkSW5wdXRMVFxuICAgICAgOiBwcm9wcy50aGVtZS5jaGlja2xldGVkSW5wdXR9XG5cbiAgY29sb3I6ICR7cHJvcHMgPT5cbiAgICBwcm9wcy5oYXNQbGFjZWhvbGRlciA/IHByb3BzLnRoZW1lLnNlbGVjdENvbG9yUGxhY2VIb2xkZXIgOiBwcm9wcy50aGVtZS5zZWxlY3RDb2xvcn07XG4gIG92ZXJmbG93OiBoaWRkZW47XG5gO1xuXG5jb25zdCBDaGlja2xldGVkSXRlbSA9ICh7XG4gIGl0ZW0sXG4gIHJlbW92ZUl0ZW0sXG4gIGRpc3BsYXlPcHRpb24sXG4gIEN1c3RvbUNoaWNrbGV0Q29tcG9uZW50LFxuICBpbnB1dFRoZW1lLFxuICBkaXNhYmxlZCxcbiAgaXRlbUlkXG59KSA9PiB7XG4gIGNvbnN0IHthdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiwgaXNEcmFnZ2luZ30gPSB1c2VTb3J0YWJsZSh7XG4gICAgaWQ6IGl0ZW1JZFxuICB9KTtcbiAgY29uc3QgY2hpY2tsZXRQcm9wcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGlucHV0VGhlbWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIG5hbWU6IGRpc3BsYXlPcHRpb24oaXRlbSksXG4gICAgICBkaXNwbGF5T3B0aW9uLFxuICAgICAgaXRlbSxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBsaXN0ZW5lcnMsXG4gICAgICBzZXROb2RlUmVmLFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdHJhbnNpdGlvbixcbiAgICAgIGlzRHJhZ2dpbmcsXG4gICAgICByZW1vdmU6IGUgPT4gcmVtb3ZlSXRlbShpdGVtLCBlKVxuICAgIH0pLFxuICAgIFtcbiAgICAgIGl0ZW0sXG4gICAgICByZW1vdmVJdGVtLFxuICAgICAgZGlzcGxheU9wdGlvbixcbiAgICAgIGlucHV0VGhlbWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBsaXN0ZW5lcnMsXG4gICAgICBzZXROb2RlUmVmLFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdHJhbnNpdGlvbixcbiAgICAgIGlzRHJhZ2dpbmdcbiAgICBdXG4gICk7XG4gIHJldHVybiBDdXN0b21DaGlja2xldENvbXBvbmVudCA/IChcbiAgICA8Q3VzdG9tQ2hpY2tsZXRDb21wb25lbnQgey4uLmNoaWNrbGV0UHJvcHN9IC8+XG4gICkgOiAoXG4gICAgPENoaWNrbGV0IHsuLi5jaGlja2xldFByb3BzfSAvPlxuICApO1xufTtcblxudHlwZSBJdGVtID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdCB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgQ2hpY2tsZXRlZElucHV0UHJvcHMgPSBDaGlja2xldGVkSW5wdXRDb250YWluZXJQcm9wcyAmIHtcbiAgc2VsZWN0ZWRJdGVtcz86IGFueVtdO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnQ/OiBSZWFjdC5Db21wb25lbnRUeXBlPGFueT4gfCBudWxsO1xuICByZW9yZGVySXRlbXM/OiAobmV3T3JkZXI6IGFueSkgPT4gdm9pZDtcbiAgZGlzcGxheU9wdGlvbj86IChpdGVtOiBJdGVtKSA9PiBzdHJpbmc7XG4gIHJlbW92ZUl0ZW06IChpdGVtOiBJdGVtLCBlOiBSZWFjdC5Nb3VzZUV2ZW50PFNWR1NWR0VsZW1lbnQsIE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xufTtcblxuY29uc3QgQ2hpY2tsZXRlZElucHV0OiBSZWFjdC5GQzxDaGlja2xldGVkSW5wdXRQcm9wcz4gPSAoe1xuICBkaXNhYmxlZCxcbiAgb25DbGljayxcbiAgY2xhc3NOYW1lLFxuICBzZWxlY3RlZEl0ZW1zID0gW10sXG4gIHBsYWNlaG9sZGVyID0gJycsXG4gIHJlbW92ZUl0ZW0sXG4gIHJlb3JkZXJJdGVtcyA9IGQgPT4gZCxcbiAgZGlzcGxheU9wdGlvbiA9IGQgPT4gU3RyaW5nKGQpLFxuICBpbnB1dFRoZW1lLFxuICBDdXN0b21DaGlja2xldENvbXBvbmVudFxufSkgPT4ge1xuICBjb25zdCBzZWxlY3RlZEl0ZW1JZHMgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkSXRlbXMubWFwKGl0ZW0gPT4gZGlzcGxheU9wdGlvbihpdGVtKSksXG4gICAgW2Rpc3BsYXlPcHRpb24sIHNlbGVjdGVkSXRlbXNdXG4gICk7XG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoe2FjdGl2ZSwgb3Zlcn0pID0+IHtcbiAgICAgIGlmICghb3ZlcikgcmV0dXJuO1xuICAgICAgaWYgKGFjdGl2ZS5pZCAhPT0gb3Zlci5pZCkge1xuICAgICAgICBjb25zdCBvbGRJbmRleCA9IHNlbGVjdGVkSXRlbUlkcy5maW5kSW5kZXgoaXRlbUlkID0+IGl0ZW1JZCA9PT0gYWN0aXZlLmlkKTtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBzZWxlY3RlZEl0ZW1JZHMuZmluZEluZGV4KGl0ZW1JZCA9PiBpdGVtSWQgPT09IG92ZXIuaWQpO1xuICAgICAgICByZW9yZGVySXRlbXMoYXJyYXlNb3ZlKHNlbGVjdGVkSXRlbXMsIG9sZEluZGV4LCBuZXdJbmRleCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3NlbGVjdGVkSXRlbUlkcywgc2VsZWN0ZWRJdGVtcywgcmVvcmRlckl0ZW1zXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPENoaWNrbGV0ZWRJbnB1dENvbnRhaW5lclxuICAgICAgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWV9IGNoaWNrbGV0ZWQtaW5wdXRgfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIGlucHV0VGhlbWU9e2lucHV0VGhlbWV9XG4gICAgICBoYXNQbGFjZWhvbGRlcj17IXNlbGVjdGVkSXRlbXMgfHwgIXNlbGVjdGVkSXRlbXMubGVuZ3RofVxuICAgID5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgbW9kaWZpZXJzPXtETkRfTU9ESUZJRVJTfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e3BvaW50ZXJXaXRoaW59XG4gICAgICAgIGF1dG9TY3JvbGw9e2ZhbHNlfVxuICAgICAgPlxuICAgICAgICA8U29ydGFibGVDb250ZXh0IGl0ZW1zPXtzZWxlY3RlZEl0ZW1JZHN9PlxuICAgICAgICAgIHtzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPENoaWNrbGV0ZWRJdGVtXG4gICAgICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgICAgICBpdGVtSWQ9e2Rpc3BsYXlPcHRpb24oaXRlbSl9XG4gICAgICAgICAgICAgICAgcmVtb3ZlSXRlbT17cmVtb3ZlSXRlbX1cbiAgICAgICAgICAgICAgICBkaXNwbGF5T3B0aW9uPXtkaXNwbGF5T3B0aW9ufVxuICAgICAgICAgICAgICAgIEN1c3RvbUNoaWNrbGV0Q29tcG9uZW50PXtDdXN0b21DaGlja2xldENvbXBvbmVudH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgaW5wdXRUaGVtZT17aW5wdXRUaGVtZX1cbiAgICAgICAgICAgICAgICBrZXk9e2Ake2Rpc3BsYXlPcHRpb24oaXRlbSl9XyR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpXG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lfSBjaGlja2xldGVkLWlucHV0X19wbGFjZWhvbGRlcmB9PlxuICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17cGxhY2Vob2xkZXIgfHwgJ3BsYWNlaG9sZGVyLmVudGVyVmFsdWUnfSAvPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU29ydGFibGVDb250ZXh0PlxuICAgICAgICA8RHJhZ092ZXJsYXkgZHJvcEFuaW1hdGlvbj17bnVsbH0gLz5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L0NoaWNrbGV0ZWRJbnB1dENvbnRhaW5lcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENoaWNrbGV0ZWRJbnB1dDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxH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
;