@dwelle/excalidraw 0.3.57 → 0.3.58
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.
|
@@ -1250,7 +1250,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1250
1250
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1251
1251
|
|
|
1252
1252
|
"use strict";
|
|
1253
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"actionChangeViewBackgroundColor\": () => (/* binding */ actionChangeViewBackgroundColor),\n/* harmony export */ \"actionClearCanvas\": () => (/* binding */ actionClearCanvas),\n/* harmony export */ \"actionZoomIn\": () => (/* binding */ actionZoomIn),\n/* harmony export */ \"actionZoomOut\": () => (/* binding */ actionZoomOut),\n/* harmony export */ \"actionResetZoom\": () => (/* binding */ actionResetZoom),\n/* harmony export */ \"actionZoomToSelected\": () => (/* binding */ actionZoomToSelected),\n/* harmony export */ \"actionZoomToFit\": () => (/* binding */ actionZoomToFit),\n/* harmony export */ \"actionToggleTheme\": () => (/* binding */ actionToggleTheme),\n/* harmony export */ \"actionErase\": () => (/* binding */ actionErase)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _components_ColorPicker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/ColorPicker */ \"../../components/ColorPicker.tsx\");\n/* harmony import */ var _components_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _components_ToolButton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _components_DarkModeToggle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/DarkModeToggle */ \"../../components/DarkModeToggle.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _scene_scroll__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../scene/scroll */ \"../../scene/scroll.ts\");\n/* harmony import */ var _scene_zoom__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../scene/zoom */ \"../../scene/zoom.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _register__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./register */ \"../../actions/register.ts\");\n/* harmony import */ var _components_Tooltip__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../components/Tooltip */ \"../../components/Tooltip.tsx\");\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../element/mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _components_ClearCanvas__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../components/ClearCanvas */ \"../../components/ClearCanvas.tsx\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst actionChangeViewBackgroundColor = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"changeViewBackgroundColor\",\r\n trackEvent: false,\r\n perform: (_, appState, value) => {\r\n return {\r\n appState: Object.assign(Object.assign({}, appState), value),\r\n commitToHistory: !!value.viewBackgroundColor,\r\n };\r\n },\r\n PanelComponent: ({ elements, appState, updateData }) => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: { position: \"relative\" } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ColorPicker__WEBPACK_IMPORTED_MODULE_1__.ColorPicker, { label: (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"labels.canvasBackground\"), type: \"canvasBackground\", color: appState.viewBackgroundColor, onChange: (color) => updateData({ viewBackgroundColor: color }), isActive: appState.openPopup === \"canvasColorPicker\", setActive: (active) => updateData({ openPopup: active ? \"canvasColorPicker\" : null }), \"data-testid\": \"canvas-background-picker\", elements: elements, appState: appState }, void 0) }), void 0));\r\n },\r\n});\r\nconst actionClearCanvas = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"clearCanvas\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (elements, appState, _, app) => {\r\n app.imageCache.clear();\r\n return {\r\n elements: elements.map((element) => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_15__.newElementWith)(element, { isDeleted: true })),\r\n appState: Object.assign(Object.assign({}, (0,_appState__WEBPACK_IMPORTED_MODULE_16__.getDefaultAppState)()), { files: {}, theme: appState.theme, penMode: appState.penMode, penDetected: appState.penDetected, exportBackground: appState.exportBackground, exportEmbedScene: appState.exportEmbedScene, gridSize: appState.gridSize, showStats: appState.showStats, pasteDialog: appState.pasteDialog, activeTool: appState.activeTool.type === \"image\"\r\n ? Object.assign(Object.assign({}, appState.activeTool), { type: \"selection\" }) : appState.activeTool }),\r\n commitToHistory: true,\r\n };\r\n },\r\n PanelComponent: ({ updateData }) => (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ClearCanvas__WEBPACK_IMPORTED_MODULE_17__[\"default\"], { onConfirm: updateData }, void 0),\r\n});\r\nconst actionZoomIn = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"zoomIn\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (_elements, appState, _, app) => {\r\n return {\r\n appState: Object.assign(Object.assign({}, appState), (0,_scene_zoom__WEBPACK_IMPORTED_MODULE_11__.getStateForZoom)({\r\n viewportX: appState.width / 2 + appState.offsetLeft,\r\n viewportY: appState.height / 2 + appState.offsetTop,\r\n nextZoom: (0,_scene__WEBPACK_IMPORTED_MODULE_9__.getNormalizedZoom)(appState.zoom.value + _constants__WEBPACK_IMPORTED_MODULE_5__.ZOOM_STEP),\r\n }, appState)),\r\n commitToHistory: false,\r\n };\r\n },\r\n PanelComponent: ({ updateData }) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_3__.ToolButton, { type: \"button\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_2__.zoomIn, title: `${(0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.zoomIn\")} — ${(0,_utils__WEBPACK_IMPORTED_MODULE_12__.getShortcutKey)(\"CtrlOrCmd++\")}`, \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.zoomIn\"), onClick: () => {\r\n updateData(null);\r\n }, size: \"small\" }, void 0)),\r\n keyTest: (event) => (event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.EQUAL || event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.NUM_ADD) &&\r\n (event[_keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.CTRL_OR_CMD] || event.shiftKey),\r\n});\r\nconst actionZoomOut = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"zoomOut\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (_elements, appState, _, app) => {\r\n return {\r\n appState: Object.assign(Object.assign({}, appState), (0,_scene_zoom__WEBPACK_IMPORTED_MODULE_11__.getStateForZoom)({\r\n viewportX: appState.width / 2 + appState.offsetLeft,\r\n viewportY: appState.height / 2 + appState.offsetTop,\r\n nextZoom: (0,_scene__WEBPACK_IMPORTED_MODULE_9__.getNormalizedZoom)(appState.zoom.value - _constants__WEBPACK_IMPORTED_MODULE_5__.ZOOM_STEP),\r\n }, appState)),\r\n commitToHistory: false,\r\n };\r\n },\r\n PanelComponent: ({ updateData }) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_3__.ToolButton, { type: \"button\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_2__.zoomOut, title: `${(0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.zoomOut\")} — ${(0,_utils__WEBPACK_IMPORTED_MODULE_12__.getShortcutKey)(\"CtrlOrCmd+-\")}`, \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.zoomOut\"), onClick: () => {\r\n updateData(null);\r\n }, size: \"small\" }, void 0)),\r\n keyTest: (event) => (event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.MINUS || event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.NUM_SUBTRACT) &&\r\n (event[_keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.CTRL_OR_CMD] || event.shiftKey),\r\n});\r\nconst actionResetZoom = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"resetZoom\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (_elements, appState, _, app) => {\r\n return {\r\n appState: Object.assign(Object.assign({}, appState), (0,_scene_zoom__WEBPACK_IMPORTED_MODULE_11__.getStateForZoom)({\r\n viewportX: appState.width / 2 + appState.offsetLeft,\r\n viewportY: appState.height / 2 + appState.offsetTop,\r\n nextZoom: (0,_scene__WEBPACK_IMPORTED_MODULE_9__.getNormalizedZoom)(1),\r\n }, appState)),\r\n commitToHistory: false,\r\n };\r\n },\r\n PanelComponent: ({ updateData, appState }) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_Tooltip__WEBPACK_IMPORTED_MODULE_14__.Tooltip, Object.assign({ label: (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.resetZoom\"), style: { height: \"100%\" } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_3__.ToolButton, Object.assign({ type: \"button\", className: \"reset-zoom-button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.resetZoom\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.resetZoom\"), onClick: () => {\r\n updateData(null);\r\n }, size: \"small\" }, { children: [(appState.zoom.value * 100).toFixed(0), \"%\"] }), void 0) }), void 0)),\r\n keyTest: (event) => (event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.ZERO || event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.NUM_ZERO) &&\r\n (event[_keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.CTRL_OR_CMD] || event.shiftKey),\r\n});\r\nconst zoomValueToFitBoundsOnViewport = (bounds, viewportDimensions) => {\r\n const [x1, y1, x2, y2] = bounds;\r\n const commonBoundsWidth = x2 - x1;\r\n const zoomValueForWidth = viewportDimensions.width / commonBoundsWidth;\r\n const commonBoundsHeight = y2 - y1;\r\n const zoomValueForHeight = viewportDimensions.height / commonBoundsHeight;\r\n const smallestZoomValue = Math.min(zoomValueForWidth, zoomValueForHeight);\r\n const zoomAdjustedToSteps = Math.floor(smallestZoomValue / _constants__WEBPACK_IMPORTED_MODULE_5__.ZOOM_STEP) * _constants__WEBPACK_IMPORTED_MODULE_5__.ZOOM_STEP;\r\n const clampedZoomValueToFitElements = Math.min(Math.max(zoomAdjustedToSteps, _constants__WEBPACK_IMPORTED_MODULE_5__.ZOOM_STEP), 1);\r\n return clampedZoomValueToFitElements;\r\n};\r\nconst zoomToFitElements = (elements, appState, zoomToSelection) => {\r\n const nonDeletedElements = (0,_element__WEBPACK_IMPORTED_MODULE_6__.getNonDeletedElements)(elements);\r\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_9__.getSelectedElements)(nonDeletedElements, appState);\r\n const commonBounds = zoomToSelection && selectedElements.length > 0\r\n ? (0,_element__WEBPACK_IMPORTED_MODULE_6__.getCommonBounds)(selectedElements)\r\n : (0,_element__WEBPACK_IMPORTED_MODULE_6__.getCommonBounds)(nonDeletedElements);\r\n const newZoom = {\r\n value: zoomValueToFitBoundsOnViewport(commonBounds, {\r\n width: appState.width,\r\n height: appState.height,\r\n }),\r\n };\r\n const [x1, y1, x2, y2] = commonBounds;\r\n const centerX = (x1 + x2) / 2;\r\n const centerY = (y1 + y2) / 2;\r\n return {\r\n appState: Object.assign(Object.assign(Object.assign({}, appState), (0,_scene_scroll__WEBPACK_IMPORTED_MODULE_10__.centerScrollOn)({\r\n scenePoint: { x: centerX, y: centerY },\r\n viewportDimensions: {\r\n width: appState.width,\r\n height: appState.height,\r\n },\r\n zoom: newZoom,\r\n })), { zoom: newZoom }),\r\n commitToHistory: false,\r\n };\r\n};\r\nconst actionZoomToSelected = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"zoomToSelection\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (elements, appState) => zoomToFitElements(elements, appState, true),\r\n keyTest: (event) => event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.TWO &&\r\n event.shiftKey &&\r\n !event.altKey &&\r\n !event[_keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.CTRL_OR_CMD],\r\n});\r\nconst actionZoomToFit = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"zoomToFit\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (elements, appState) => zoomToFitElements(elements, appState, false),\r\n keyTest: (event) => event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.ONE &&\r\n event.shiftKey &&\r\n !event.altKey &&\r\n !event[_keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.CTRL_OR_CMD],\r\n});\r\nconst actionToggleTheme = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"toggleTheme\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (_, appState, value) => {\r\n return {\r\n appState: Object.assign(Object.assign({}, appState), { theme: value || (appState.theme === _constants__WEBPACK_IMPORTED_MODULE_5__.THEME.LIGHT ? _constants__WEBPACK_IMPORTED_MODULE_5__.THEME.DARK : _constants__WEBPACK_IMPORTED_MODULE_5__.THEME.LIGHT) }),\r\n commitToHistory: false,\r\n };\r\n },\r\n PanelComponent: ({ appState, updateData }) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: { marginInlineStart: \"0.25rem\" } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_DarkModeToggle__WEBPACK_IMPORTED_MODULE_4__.DarkModeToggle, { value: appState.theme, onChange: (theme) => {\r\n updateData(theme);\r\n } }, void 0) }), void 0)),\r\n keyTest: (event) => event.altKey && event.shiftKey && event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.D,\r\n});\r\nconst actionErase = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"eraser\",\r\n trackEvent: { category: \"toolbar\" },\r\n perform: (elements, appState) => {\r\n var _a;\r\n return {\r\n appState: Object.assign(Object.assign({}, appState), { selectedElementIds: {}, selectedGroupIds: {}, activeTool: Object.assign(Object.assign({}, appState.activeTool), { type: (0,_appState__WEBPACK_IMPORTED_MODULE_16__.isEraserActive)(appState)\r\n ? (_a = appState.activeTool.lastActiveToolBeforeEraser) !== null && _a !== void 0 ? _a : \"selection\"\r\n : \"eraser\", lastActiveToolBeforeEraser: appState.activeTool.type === \"eraser\" //node throws incorrect type error when using isEraserActive()\r\n ? null\r\n : appState.activeTool.type }) }),\r\n commitToHistory: true,\r\n };\r\n },\r\n keyTest: (event, appState) => {\r\n return (event.key === _keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.E ||\r\n (event.key === _keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.ESCAPE && (0,_appState__WEBPACK_IMPORTED_MODULE_16__.isEraserActive)(appState)));\r\n },\r\n PanelComponent: ({ elements, appState, updateData, data }) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_3__.ToolButton, { type: \"button\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_2__.eraser, className: (0,clsx__WEBPACK_IMPORTED_MODULE_18__[\"default\"])(\"eraser\", { active: (0,_appState__WEBPACK_IMPORTED_MODULE_16__.isEraserActive)(appState) }), title: `${(0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"toolBar.eraser\")}-${(0,_utils__WEBPACK_IMPORTED_MODULE_12__.getShortcutKey)(\"E\")}`, \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"toolBar.eraser\"), onClick: () => {\r\n updateData(null);\r\n }, size: (data === null || data === void 0 ? void 0 : data.size) || \"medium\" }, void 0)),\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFHLEVBQUU7WUFDWixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsQ0FBQyxFQUNELElBQUksRUFBRSxLQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsSUFBSSxLQUFJLFFBQVEsV0FDaEIsQ0FDZjtDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9hY3Rpb25zL2FjdGlvbkNhbnZhcy50c3g/NWQ4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvclBpY2tlciB9IGZyb20gXCIuLi9jb21wb25lbnRzL0NvbG9yUGlja2VyXCI7XG5pbXBvcnQgeyBlcmFzZXIsIHpvb21Jbiwgem9vbU91dCB9IGZyb20gXCIuLi9jb21wb25lbnRzL2ljb25zXCI7XG5pbXBvcnQgeyBUb29sQnV0dG9uIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvVG9vbEJ1dHRvblwiO1xuaW1wb3J0IHsgRGFya01vZGVUb2dnbGUgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9EYXJrTW9kZVRvZ2dsZVwiO1xuaW1wb3J0IHsgVEhFTUUsIFpPT01fU1RFUCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldENvbW1vbkJvdW5kcywgZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzIH0gZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCB7IEV4Y2FsaWRyYXdFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHsgQ09ERVMsIEtFWVMgfSBmcm9tIFwiLi4va2V5c1wiO1xuaW1wb3J0IHsgZ2V0Tm9ybWFsaXplZFpvb20sIGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tIFwiLi4vc2NlbmVcIjtcbmltcG9ydCB7IGNlbnRlclNjcm9sbE9uIH0gZnJvbSBcIi4uL3NjZW5lL3Njcm9sbFwiO1xuaW1wb3J0IHsgZ2V0U3RhdGVGb3Jab29tIH0gZnJvbSBcIi4uL3NjZW5lL3pvb21cIjtcbmltcG9ydCB7IEFwcFN0YXRlLCBOb3JtYWxpemVkWm9vbVZhbHVlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRTaG9ydGN1dEtleSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tIFwiLi9yZWdpc3RlclwiO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gXCIuLi9jb21wb25lbnRzL1Rvb2x0aXBcIjtcbmltcG9ydCB7IG5ld0VsZW1lbnRXaXRoIH0gZnJvbSBcIi4uL2VsZW1lbnQvbXV0YXRlRWxlbWVudFwiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEFwcFN0YXRlLCBpc0VyYXNlckFjdGl2ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IENsZWFyQ2FudmFzIGZyb20gXCIuLi9jb21wb25lbnRzL0NsZWFyQ2FudmFzXCI7XG5pbXBvcnQgY2xzeCBmcm9tIFwiY2xzeFwiO1xuXG5leHBvcnQgY29uc3QgYWN0aW9uQ2hhbmdlVmlld0JhY2tncm91bmRDb2xvciA9IHJlZ2lzdGVyKHtcbiAgbmFtZTogXCJjaGFuZ2VWaWV3QmFja2dyb3VuZENvbG9yXCIsXG4gIHRyYWNrRXZlbnQ6IGZhbHNlLFxuICBwZXJmb3JtOiAoXywgYXBwU3RhdGUsIHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlOiB7IC4uLmFwcFN0YXRlLCAuLi52YWx1ZSB9LFxuICAgICAgY29tbWl0VG9IaXN0b3J5OiAhIXZhbHVlLnZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgfTtcbiAgfSxcbiAgUGFuZWxDb21wb25lbnQ6ICh7IGVsZW1lbnRzLCBhcHBTdGF0ZSwgdXBkYXRlRGF0YSB9KSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3sgcG9zaXRpb246IFwicmVsYXRpdmVcIiB9fT5cbiAgICAgICAgPENvbG9yUGlja2VyXG4gICAgICAgICAgbGFiZWw9e3QoXCJsYWJlbHMuY2FudmFzQmFja2dyb3VuZFwiKX1cbiAgICAgICAgICB0eXBlPVwiY2FudmFzQmFja2dyb3VuZFwiXG4gICAgICAgICAgY29sb3I9e2FwcFN0YXRlLnZpZXdCYWNrZ3JvdW5kQ29sb3J9XG4gICAgICAgICAgb25DaGFuZ2U9eyhjb2xvcikgPT4gdXBkYXRlRGF0YSh7IHZpZXdCYWNrZ3JvdW5kQ29sb3I6IGNvbG9yIH0pfVxuICAgICAgICAgIGlzQWN0aXZlPXthcHBTdGF0ZS5vcGVuUG9wdXAgPT09IFwiY2FudmFzQ29sb3JQaWNrZXJcIn1cbiAgICAgICAgICBzZXRBY3RpdmU9eyhhY3RpdmUpID0+XG4gICAgICAgICAgICB1cGRhdGVEYXRhKHsgb3BlblBvcHVwOiBhY3RpdmUgPyBcImNhbnZhc0NvbG9yUGlja2VyXCIgOiBudWxsIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY2FudmFzLWJhY2tncm91bmQtcGlja2VyXCJcbiAgICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgYWN0aW9uQ2xlYXJDYW52YXMgPSByZWdpc3Rlcih7XG4gIG5hbWU6IFwiY2xlYXJDYW52YXNcIixcbiAgdHJhY2tFdmVudDogeyBjYXRlZ29yeTogXCJjYW52YXNcIiB9LFxuICBwZXJmb3JtOiAoZWxlbWVudHMsIGFwcFN0YXRlLCBfLCBhcHApID0+IHtcbiAgICBhcHAuaW1hZ2VDYWNoZS5jbGVhcigpO1xuICAgIHJldHVybiB7XG4gICAgICBlbGVtZW50czogZWxlbWVudHMubWFwKChlbGVtZW50KSA9PlxuICAgICAgICBuZXdFbGVtZW50V2l0aChlbGVtZW50LCB7IGlzRGVsZXRlZDogdHJ1ZSB9KSxcbiAgICAgICksXG4gICAgICBhcHBTdGF0ZToge1xuICAgICAgICAuLi5nZXREZWZhdWx0QXBwU3RhdGUoKSxcbiAgICAgICAgZmlsZXM6IHt9LFxuICAgICAgICB0aGVtZTogYXBwU3RhdGUudGhlbWUsXG4gICAgICAgIHBlbk1vZGU6IGFwcFN0YXRlLnBlbk1vZGUsXG4gICAgICAgIHBlbkRldGVjdGVkOiBhcHBTdGF0ZS5wZW5EZXRlY3RlZCxcbiAgICAgICAgZXhwb3J0QmFja2dyb3VuZDogYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCxcbiAgICAgICAgZXhwb3J0RW1iZWRTY2VuZTogYXBwU3RhdGUuZXhwb3J0RW1iZWRTY2VuZSxcbiAgICAgICAgZ3JpZFNpemU6IGFwcFN0YXRlLmdyaWRTaXplLFxuICAgICAgICBzaG93U3RhdHM6IGFwcFN0YXRlLnNob3dTdGF0cyxcbiAgICAgICAgcGFzdGVEaWFsb2c6IGFwcFN0YXRlLnBhc3RlRGlhbG9nLFxuICAgICAgICBhY3RpdmVUb29sOlxuICAgICAgICAgIGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJpbWFnZVwiXG4gICAgICAgICAgICA/IHsgLi4uYXBwU3RhdGUuYWN0aXZlVG9vbCwgdHlwZTogXCJzZWxlY3Rpb25cIiB9XG4gICAgICAgICAgICA6IGFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgICB9LFxuICAgICAgY29tbWl0VG9IaXN0b3J5OiB0cnVlLFxuICAgIH07XG4gIH0sXG5cbiAgUGFuZWxDb21wb25lbnQ6ICh7IHVwZGF0ZURhdGEgfSkgPT4gPENsZWFyQ2FudmFzIG9uQ29uZmlybT17dXBkYXRlRGF0YX0gLz4sXG59KTtcblxuZXhwb3J0IGNvbnN0IGFjdGlvblpvb21JbiA9IHJlZ2lzdGVyKHtcbiAgbmFtZTogXCJ6b29tSW5cIixcbiAgdHJhY2tFdmVudDogeyBjYXRlZ29yeTogXCJjYW52YXNcIiB9LFxuICBwZXJmb3JtOiAoX2VsZW1lbnRzLCBhcHBTdGF0ZSwgXywgYXBwKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlOiB7XG4gICAgICAgIC4uLmFwcFN0YXRlLFxuICAgICAgICAuLi5nZXRTdGF0ZUZvclpvb20oXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmlld3BvcnRYOiBhcHBTdGF0ZS53aWR0aCAvIDIgKyBhcHBTdGF0ZS5vZmZzZXRMZWZ0LFxuICAgICAgICAgICAgdmlld3BvcnRZOiBhcHBTdGF0ZS5oZWlnaHQgLyAyICsgYXBwU3RhdGUub2Zmc2V0VG9wLFxuICAgICAgICAgICAgbmV4dFpvb206IGdldE5vcm1hbGl6ZWRab29tKGFwcFN0YXRlLnpvb20udmFsdWUgKyBaT09NX1NURVApLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXBwU3RhdGUsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgY29tbWl0VG9IaXN0b3J5OiBmYWxzZSxcbiAgICB9O1xuICB9LFxuICBQYW5lbENvbXBvbmVudDogKHsgdXBkYXRlRGF0YSB9KSA9PiAoXG4gICAgPFRvb2xCdXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgaWNvbj17em9vbUlufVxuICAgICAgdGl0bGU9e2Ake3QoXCJidXR0b25zLnpvb21JblwiKX0g4oCUICR7Z2V0U2hvcnRjdXRLZXkoXCJDdHJsT3JDbWQrK1wiKX1gfVxuICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMuem9vbUluXCIpfVxuICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICB1cGRhdGVEYXRhKG51bGwpO1xuICAgICAgfX1cbiAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgLz5cbiAgKSxcbiAga2V5VGVzdDogKGV2ZW50KSA9PlxuICAgIChldmVudC5jb2RlID09PSBDT0RFUy5FUVVBTCB8fCBldmVudC5jb2RlID09PSBDT0RFUy5OVU1fQUREKSAmJlxuICAgIChldmVudFtLRVlTLkNUUkxfT1JfQ01EXSB8fCBldmVudC5zaGlmdEtleSksXG59KTtcblxuZXhwb3J0IGNvbnN0IGFjdGlvblpvb21PdXQgPSByZWdpc3Rlcih7XG4gIG5hbWU6IFwiem9vbU91dFwiLFxuICB0cmFja0V2ZW50OiB7IGNhdGVnb3J5OiBcImNhbnZhc1wiIH0sXG4gIHBlcmZvcm06IChfZWxlbWVudHMsIGFwcFN0YXRlLCBfLCBhcHApID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGU6IHtcbiAgICAgICAgLi4uYXBwU3RhdGUsXG4gICAgICAgIC4uLmdldFN0YXRlRm9yWm9vbShcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2aWV3cG9ydFg6IGFwcFN0YXRlLndpZHRoIC8gMiArIGFwcFN0YXRlLm9mZnNldExlZnQsXG4gICAgICAgICAgICB2aWV3cG9ydFk6IGFwcFN0YXRlLmhlaWdodCAvIDIgKyBhcHBTdGF0ZS5vZmZzZXRUb3AsXG4gICAgICAgICAgICBuZXh0Wm9vbTogZ2V0Tm9ybWFsaXplZFpvb20oYXBwU3RhdGUuem9vbS52YWx1ZSAtIFpPT01fU1RFUCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhcHBTdGF0ZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICBjb21taXRUb0hpc3Rvcnk6IGZhbHNlLFxuICAgIH07XG4gIH0sXG4gIFBhbmVsQ29tcG9uZW50OiAoeyB1cGRhdGVEYXRhIH0pID0+IChcbiAgICA8VG9vbEJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBpY29uPXt6b29tT3V0fVxuICAgICAgdGl0bGU9e2Ake3QoXCJidXR0b25zLnpvb21PdXRcIil9IOKAlCAke2dldFNob3J0Y3V0S2V5KFwiQ3RybE9yQ21kKy1cIil9YH1cbiAgICAgIGFyaWEtbGFiZWw9e3QoXCJidXR0b25zLnpvb21PdXRcIil9XG4gICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgIHVwZGF0ZURhdGEobnVsbCk7XG4gICAgICB9fVxuICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAvPlxuICApLFxuICBrZXlUZXN0OiAoZXZlbnQpID0+XG4gICAgKGV2ZW50LmNvZGUgPT09IENPREVTLk1JTlVTIHx8IGV2ZW50LmNvZGUgPT09IENPREVTLk5VTV9TVUJUUkFDVCkgJiZcbiAgICAoZXZlbnRbS0VZUy5DVFJMX09SX0NNRF0gfHwgZXZlbnQuc2hpZnRLZXkpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25SZXNldFpvb20gPSByZWdpc3Rlcih7XG4gIG5hbWU6IFwicmVzZXRab29tXCIsXG4gIHRyYWNrRXZlbnQ6IHsgY2F0ZWdvcnk6IFwiY2FudmFzXCIgfSxcbiAgcGVyZm9ybTogKF9lbGVtZW50cywgYXBwU3RhdGUsIF8sIGFwcCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZToge1xuICAgICAgICAuLi5hcHBTdGF0ZSxcbiAgICAgICAgLi4uZ2V0U3RhdGVGb3Jab29tKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZpZXdwb3J0WDogYXBwU3RhdGUud2lkdGggLyAyICsgYXBwU3RhdGUub2Zmc2V0TGVmdCxcbiAgICAgICAgICAgIHZpZXdwb3J0WTogYXBwU3RhdGUuaGVpZ2h0IC8gMiArIGFwcFN0YXRlLm9mZnNldFRvcCxcbiAgICAgICAgICAgIG5leHRab29tOiBnZXROb3JtYWxpemVkWm9vbSgxKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFwcFN0YXRlLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGNvbW1pdFRvSGlzdG9yeTogZmFsc2UsXG4gICAgfTtcbiAgfSxcbiAgUGFuZWxDb21wb25lbnQ6ICh7IHVwZGF0ZURhdGEsIGFwcFN0YXRlIH0pID0+IChcbiAgICA8VG9vbHRpcCBsYWJlbD17dChcImJ1dHRvbnMucmVzZXRab29tXCIpfSBzdHlsZT17eyBoZWlnaHQ6IFwiMTAwJVwiIH19PlxuICAgICAgPFRvb2xCdXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT1cInJlc2V0LXpvb20tYnV0dG9uXCJcbiAgICAgICAgdGl0bGU9e3QoXCJidXR0b25zLnJlc2V0Wm9vbVwiKX1cbiAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMucmVzZXRab29tXCIpfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YShudWxsKTtcbiAgICAgICAgfX1cbiAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgID5cbiAgICAgICAgeyhhcHBTdGF0ZS56b29tLnZhbHVlICogMTAwKS50b0ZpeGVkKDApfSVcbiAgICAgIDwvVG9vbEJ1dHRvbj5cbiAgICA8L1Rvb2x0aXA+XG4gICksXG4gIGtleVRlc3Q6IChldmVudCkgPT5cbiAgICAoZXZlbnQuY29kZSA9PT0gQ09ERVMuWkVSTyB8fCBldmVudC5jb2RlID09PSBDT0RFUy5OVU1fWkVSTykgJiZcbiAgICAoZXZlbnRbS0VZUy5DVFJMX09SX0NNRF0gfHwgZXZlbnQuc2hpZnRLZXkpLFxufSk7XG5cbmNvbnN0IHpvb21WYWx1ZVRvRml0Qm91bmRzT25WaWV3cG9ydCA9IChcbiAgYm91bmRzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgdmlld3BvcnREaW1lbnNpb25zOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0sXG4pID0+IHtcbiAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IGJvdW5kcztcbiAgY29uc3QgY29tbW9uQm91bmRzV2lkdGggPSB4MiAtIHgxO1xuICBjb25zdCB6b29tVmFsdWVGb3JXaWR0aCA9IHZpZXdwb3J0RGltZW5zaW9ucy53aWR0aCAvIGNvbW1vbkJvdW5kc1dpZHRoO1xuICBjb25zdCBjb21tb25Cb3VuZHNIZWlnaHQgPSB5MiAtIHkxO1xuICBjb25zdCB6b29tVmFsdWVGb3JIZWlnaHQgPSB2aWV3cG9ydERpbWVuc2lvbnMuaGVpZ2h0IC8gY29tbW9uQm91bmRzSGVpZ2h0O1xuICBjb25zdCBzbWFsbGVzdFpvb21WYWx1ZSA9IE1hdGgubWluKHpvb21WYWx1ZUZvcldpZHRoLCB6b29tVmFsdWVGb3JIZWlnaHQpO1xuICBjb25zdCB6b29tQWRqdXN0ZWRUb1N0ZXBzID1cbiAgICBNYXRoLmZsb29yKHNtYWxsZXN0Wm9vbVZhbHVlIC8gWk9PTV9TVEVQKSAqIFpPT01fU1RFUDtcbiAgY29uc3QgY2xhbXBlZFpvb21WYWx1ZVRvRml0RWxlbWVudHMgPSBNYXRoLm1pbihcbiAgICBNYXRoLm1heCh6b29tQWRqdXN0ZWRUb1N0ZXBzLCBaT09NX1NURVApLFxuICAgIDEsXG4gICk7XG4gIHJldHVybiBjbGFtcGVkWm9vbVZhbHVlVG9GaXRFbGVtZW50cyBhcyBOb3JtYWxpemVkWm9vbVZhbHVlO1xufTtcblxuY29uc3Qgem9vbVRvRml0RWxlbWVudHMgPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBhcHBTdGF0ZTogUmVhZG9ubHk8QXBwU3RhdGU+LFxuICB6b29tVG9TZWxlY3Rpb246IGJvb2xlYW4sXG4pID0+IHtcbiAgY29uc3Qgbm9uRGVsZXRlZEVsZW1lbnRzID0gZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzKGVsZW1lbnRzKTtcbiAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMobm9uRGVsZXRlZEVsZW1lbnRzLCBhcHBTdGF0ZSk7XG5cbiAgY29uc3QgY29tbW9uQm91bmRzID1cbiAgICB6b29tVG9TZWxlY3Rpb24gJiYgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGdldENvbW1vbkJvdW5kcyhzZWxlY3RlZEVsZW1lbnRzKVxuICAgICAgOiBnZXRDb21tb25Cb3VuZHMobm9uRGVsZXRlZEVsZW1lbnRzKTtcblxuICBjb25zdCBuZXdab29tID0ge1xuICAgIHZhbHVlOiB6b29tVmFsdWVUb0ZpdEJvdW5kc09uVmlld3BvcnQoY29tbW9uQm91bmRzLCB7XG4gICAgICB3aWR0aDogYXBwU3RhdGUud2lkdGgsXG4gICAgICBoZWlnaHQ6IGFwcFN0YXRlLmhlaWdodCxcbiAgICB9KSxcbiAgfTtcblxuICBjb25zdCBbeDEsIHkxLCB4MiwgeTJdID0gY29tbW9uQm91bmRzO1xuICBjb25zdCBjZW50ZXJYID0gKHgxICsgeDIpIC8gMjtcbiAgY29uc3QgY2VudGVyWSA9ICh5MSArIHkyKSAvIDI7XG4gIHJldHVybiB7XG4gICAgYXBwU3RhdGU6IHtcbiAgICAgIC4uLmFwcFN0YXRlLFxuICAgICAgLi4uY2VudGVyU2Nyb2xsT24oe1xuICAgICAgICBzY2VuZVBvaW50OiB7IHg6IGNlbnRlclgsIHk6IGNlbnRlclkgfSxcbiAgICAgICAgdmlld3BvcnREaW1lbnNpb25zOiB7XG4gICAgICAgICAgd2lkdGg6IGFwcFN0YXRlLndpZHRoLFxuICAgICAgICAgIGhlaWdodDogYXBwU3RhdGUuaGVpZ2h0LFxuICAgICAgICB9LFxuICAgICAgICB6b29tOiBuZXdab29tLFxuICAgICAgfSksXG4gICAgICB6b29tOiBuZXdab29tLFxuICAgIH0sXG4gICAgY29tbWl0VG9IaXN0b3J5OiBmYWxzZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25ab29tVG9TZWxlY3RlZCA9IHJlZ2lzdGVyKHtcbiAgbmFtZTogXCJ6b29tVG9TZWxlY3Rpb25cIixcbiAgdHJhY2tFdmVudDogeyBjYXRlZ29yeTogXCJjYW52YXNcIiB9LFxuICBwZXJmb3JtOiAoZWxlbWVudHMsIGFwcFN0YXRlKSA9PiB6b29tVG9GaXRFbGVtZW50cyhlbGVtZW50cywgYXBwU3RhdGUsIHRydWUpLFxuICBrZXlUZXN0OiAoZXZlbnQpID0+XG4gICAgZXZlbnQuY29kZSA9PT0gQ09ERVMuVFdPICYmXG4gICAgZXZlbnQuc2hpZnRLZXkgJiZcbiAgICAhZXZlbnQuYWx0S2V5ICYmXG4gICAgIWV2ZW50W0tFWVMuQ1RSTF9PUl9DTURdLFxufSk7XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25ab29tVG9GaXQgPSByZWdpc3Rlcih7XG4gIG5hbWU6IFwiem9vbVRvRml0XCIsXG4gIHRyYWNrRXZlbnQ6IHsgY2F0ZWdvcnk6IFwiY2FudmFzXCIgfSxcbiAgcGVyZm9ybTogKGVsZW1lbnRzLCBhcHBTdGF0ZSkgPT4gem9vbVRvRml0RWxlbWVudHMoZWxlbWVudHMsIGFwcFN0YXRlLCBmYWxzZSksXG4gIGtleVRlc3Q6IChldmVudCkgPT5cbiAgICBldmVudC5jb2RlID09PSBDT0RFUy5PTkUgJiZcbiAgICBldmVudC5zaGlmdEtleSAmJlxuICAgICFldmVudC5hbHRLZXkgJiZcbiAgICAhZXZlbnRbS0VZUy5DVFJMX09SX0NNRF0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGFjdGlvblRvZ2dsZVRoZW1lID0gcmVnaXN0ZXIoe1xuICBuYW1lOiBcInRvZ2dsZVRoZW1lXCIsXG4gIHRyYWNrRXZlbnQ6IHsgY2F0ZWdvcnk6IFwiY2FudmFzXCIgfSxcbiAgcGVyZm9ybTogKF8sIGFwcFN0YXRlLCB2YWx1ZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZToge1xuICAgICAgICAuLi5hcHBTdGF0ZSxcbiAgICAgICAgdGhlbWU6XG4gICAgICAgICAgdmFsdWUgfHwgKGFwcFN0YXRlLnRoZW1lID09PSBUSEVNRS5MSUdIVCA/IFRIRU1FLkRBUksgOiBUSEVNRS5MSUdIVCksXG4gICAgICB9LFxuICAgICAgY29tbWl0VG9IaXN0b3J5OiBmYWxzZSxcbiAgICB9O1xuICB9LFxuICBQYW5lbENvbXBvbmVudDogKHsgYXBwU3RhdGUsIHVwZGF0ZURhdGEgfSkgPT4gKFxuICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luSW5saW5lU3RhcnQ6IFwiMC4yNXJlbVwiIH19PlxuICAgICAgPERhcmtNb2RlVG9nZ2xlXG4gICAgICAgIHZhbHVlPXthcHBTdGF0ZS50aGVtZX1cbiAgICAgICAgb25DaGFuZ2U9eyh0aGVtZSkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEodGhlbWUpO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKSxcbiAga2V5VGVzdDogKGV2ZW50KSA9PiBldmVudC5hbHRLZXkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQuY29kZSA9PT0gQ09ERVMuRCxcbn0pO1xuXG5leHBvcnQgY29uc3QgYWN0aW9uRXJhc2UgPSByZWdpc3Rlcih7XG4gIG5hbWU6IFwiZXJhc2VyXCIsXG4gIHRyYWNrRXZlbnQ6IHsgY2F0ZWdvcnk6IFwidG9vbGJhclwiIH0sXG4gIHBlcmZvcm06IChlbGVtZW50cywgYXBwU3RhdGUpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGU6IHtcbiAgICAgICAgLi4uYXBwU3RhdGUsXG4gICAgICAgIHNlbGVjdGVkRWxlbWVudElkczoge30sXG4gICAgICAgIHNlbGVjdGVkR3JvdXBJZHM6IHt9LFxuICAgICAgICBhY3RpdmVUb29sOiB7XG4gICAgICAgICAgLi4uYXBwU3RhdGUuYWN0aXZlVG9vbCxcbiAgICAgICAgICB0eXBlOiBpc0VyYXNlckFjdGl2ZShhcHBTdGF0ZSlcbiAgICAgICAgICAgID8gYXBwU3RhdGUuYWN0aXZlVG9vbC5sYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlciA/PyBcInNlbGVjdGlvblwiXG4gICAgICAgICAgICA6IFwiZXJhc2VyXCIsXG4gICAgICAgICAgbGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXI6XG4gICAgICAgICAgICBhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgPT09IFwiZXJhc2VyXCIgLy9ub2RlIHRocm93cyBpbmNvcnJlY3QgdHlwZSBlcnJvciB3aGVuIHVzaW5nIGlzRXJhc2VyQWN0aXZlKClcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNvbW1pdFRvSGlzdG9yeTogdHJ1ZSxcbiAgICB9O1xuICB9LFxuICBrZXlUZXN0OiAoZXZlbnQsIGFwcFN0YXRlKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGV2ZW50LmtleSA9PT0gS0VZUy5FIHx8XG4gICAgICAoZXZlbnQua2V5ID09PSBLRVlTLkVTQ0FQRSAmJiBpc0VyYXNlckFjdGl2ZShhcHBTdGF0ZSkpXG4gICAgKTtcbiAgfSxcbiAgUGFuZWxDb21wb25lbnQ6ICh7IGVsZW1lbnRzLCBhcHBTdGF0ZSwgdXBkYXRlRGF0YSwgZGF0YSB9KSA9PiAoXG4gICAgPFRvb2xCdXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgaWNvbj17ZXJhc2VyfVxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiZXJhc2VyXCIsIHsgYWN0aXZlOiBpc0VyYXNlckFjdGl2ZShhcHBTdGF0ZSkgfSl9XG4gICAgICB0aXRsZT17YCR7dChcInRvb2xCYXIuZXJhc2VyXCIpfS0ke2dldFNob3J0Y3V0S2V5KFwiRVwiKX1gfVxuICAgICAgYXJpYS1sYWJlbD17dChcInRvb2xCYXIuZXJhc2VyXCIpfVxuICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICB1cGRhdGVEYXRhKG51bGwpO1xuICAgICAgfX1cbiAgICAgIHNpemU9e2RhdGE/LnNpemUgfHwgXCJtZWRpdW1cIn1cbiAgICA+PC9Ub29sQnV0dG9uPlxuICApLFxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../actions/actionCanvas.tsx\n");
|
|
1253
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"actionChangeViewBackgroundColor\": () => (/* binding */ actionChangeViewBackgroundColor),\n/* harmony export */ \"actionClearCanvas\": () => (/* binding */ actionClearCanvas),\n/* harmony export */ \"actionZoomIn\": () => (/* binding */ actionZoomIn),\n/* harmony export */ \"actionZoomOut\": () => (/* binding */ actionZoomOut),\n/* harmony export */ \"actionResetZoom\": () => (/* binding */ actionResetZoom),\n/* harmony export */ \"actionZoomToSelected\": () => (/* binding */ actionZoomToSelected),\n/* harmony export */ \"actionZoomToFit\": () => (/* binding */ actionZoomToFit),\n/* harmony export */ \"actionToggleTheme\": () => (/* binding */ actionToggleTheme),\n/* harmony export */ \"actionErase\": () => (/* binding */ actionErase)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _components_ColorPicker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/ColorPicker */ \"../../components/ColorPicker.tsx\");\n/* harmony import */ var _components_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _components_ToolButton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _components_DarkModeToggle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/DarkModeToggle */ \"../../components/DarkModeToggle.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _scene_scroll__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../scene/scroll */ \"../../scene/scroll.ts\");\n/* harmony import */ var _scene_zoom__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../scene/zoom */ \"../../scene/zoom.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _register__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./register */ \"../../actions/register.ts\");\n/* harmony import */ var _components_Tooltip__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../components/Tooltip */ \"../../components/Tooltip.tsx\");\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../element/mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _components_ClearCanvas__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../components/ClearCanvas */ \"../../components/ClearCanvas.tsx\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst actionChangeViewBackgroundColor = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"changeViewBackgroundColor\",\r\n trackEvent: false,\r\n perform: (_, appState, value) => {\r\n return {\r\n appState: Object.assign(Object.assign({}, appState), value),\r\n commitToHistory: !!value.viewBackgroundColor,\r\n };\r\n },\r\n PanelComponent: ({ elements, appState, updateData }) => {\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: { position: \"relative\" } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ColorPicker__WEBPACK_IMPORTED_MODULE_1__.ColorPicker, { label: (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"labels.canvasBackground\"), type: \"canvasBackground\", color: appState.viewBackgroundColor, onChange: (color) => updateData({ viewBackgroundColor: color }), isActive: appState.openPopup === \"canvasColorPicker\", setActive: (active) => updateData({ openPopup: active ? \"canvasColorPicker\" : null }), \"data-testid\": \"canvas-background-picker\", elements: elements, appState: appState }, void 0) }), void 0));\r\n },\r\n});\r\nconst actionClearCanvas = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"clearCanvas\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (elements, appState, _, app) => {\r\n app.imageCache.clear();\r\n return {\r\n elements: elements.map((element) => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_15__.newElementWith)(element, { isDeleted: true })),\r\n appState: Object.assign(Object.assign({}, (0,_appState__WEBPACK_IMPORTED_MODULE_16__.getDefaultAppState)()), { files: {}, theme: appState.theme, penMode: appState.penMode, penDetected: appState.penDetected, exportBackground: appState.exportBackground, exportEmbedScene: appState.exportEmbedScene, gridSize: appState.gridSize, showStats: appState.showStats, pasteDialog: appState.pasteDialog, activeTool: appState.activeTool.type === \"image\"\r\n ? Object.assign(Object.assign({}, appState.activeTool), { type: \"selection\" }) : appState.activeTool }),\r\n commitToHistory: true,\r\n };\r\n },\r\n PanelComponent: ({ updateData }) => (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ClearCanvas__WEBPACK_IMPORTED_MODULE_17__[\"default\"], { onConfirm: updateData }, void 0),\r\n});\r\nconst actionZoomIn = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"zoomIn\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (_elements, appState, _, app) => {\r\n return {\r\n appState: Object.assign(Object.assign({}, appState), (0,_scene_zoom__WEBPACK_IMPORTED_MODULE_11__.getStateForZoom)({\r\n viewportX: appState.width / 2 + appState.offsetLeft,\r\n viewportY: appState.height / 2 + appState.offsetTop,\r\n nextZoom: (0,_scene__WEBPACK_IMPORTED_MODULE_9__.getNormalizedZoom)(appState.zoom.value + _constants__WEBPACK_IMPORTED_MODULE_5__.ZOOM_STEP),\r\n }, appState)),\r\n commitToHistory: false,\r\n };\r\n },\r\n PanelComponent: ({ updateData }) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_3__.ToolButton, { type: \"button\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_2__.zoomIn, title: `${(0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.zoomIn\")} — ${(0,_utils__WEBPACK_IMPORTED_MODULE_12__.getShortcutKey)(\"CtrlOrCmd++\")}`, \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.zoomIn\"), onClick: () => {\r\n updateData(null);\r\n }, size: \"small\" }, void 0)),\r\n keyTest: (event) => (event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.EQUAL || event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.NUM_ADD) &&\r\n (event[_keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.CTRL_OR_CMD] || event.shiftKey),\r\n});\r\nconst actionZoomOut = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"zoomOut\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (_elements, appState, _, app) => {\r\n return {\r\n appState: Object.assign(Object.assign({}, appState), (0,_scene_zoom__WEBPACK_IMPORTED_MODULE_11__.getStateForZoom)({\r\n viewportX: appState.width / 2 + appState.offsetLeft,\r\n viewportY: appState.height / 2 + appState.offsetTop,\r\n nextZoom: (0,_scene__WEBPACK_IMPORTED_MODULE_9__.getNormalizedZoom)(appState.zoom.value - _constants__WEBPACK_IMPORTED_MODULE_5__.ZOOM_STEP),\r\n }, appState)),\r\n commitToHistory: false,\r\n };\r\n },\r\n PanelComponent: ({ updateData }) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_3__.ToolButton, { type: \"button\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_2__.zoomOut, title: `${(0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.zoomOut\")} — ${(0,_utils__WEBPACK_IMPORTED_MODULE_12__.getShortcutKey)(\"CtrlOrCmd+-\")}`, \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.zoomOut\"), onClick: () => {\r\n updateData(null);\r\n }, size: \"small\" }, void 0)),\r\n keyTest: (event) => (event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.MINUS || event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.NUM_SUBTRACT) &&\r\n (event[_keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.CTRL_OR_CMD] || event.shiftKey),\r\n});\r\nconst actionResetZoom = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"resetZoom\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (_elements, appState, _, app) => {\r\n return {\r\n appState: Object.assign(Object.assign({}, appState), (0,_scene_zoom__WEBPACK_IMPORTED_MODULE_11__.getStateForZoom)({\r\n viewportX: appState.width / 2 + appState.offsetLeft,\r\n viewportY: appState.height / 2 + appState.offsetTop,\r\n nextZoom: (0,_scene__WEBPACK_IMPORTED_MODULE_9__.getNormalizedZoom)(1),\r\n }, appState)),\r\n commitToHistory: false,\r\n };\r\n },\r\n PanelComponent: ({ updateData, appState }) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_Tooltip__WEBPACK_IMPORTED_MODULE_14__.Tooltip, Object.assign({ label: (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.resetZoom\"), style: { height: \"100%\" } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_3__.ToolButton, Object.assign({ type: \"button\", className: \"reset-zoom-button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.resetZoom\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"buttons.resetZoom\"), onClick: () => {\r\n updateData(null);\r\n }, size: \"small\" }, { children: [(appState.zoom.value * 100).toFixed(0), \"%\"] }), void 0) }), void 0)),\r\n keyTest: (event) => (event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.ZERO || event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.NUM_ZERO) &&\r\n (event[_keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.CTRL_OR_CMD] || event.shiftKey),\r\n});\r\nconst zoomValueToFitBoundsOnViewport = (bounds, viewportDimensions) => {\r\n const [x1, y1, x2, y2] = bounds;\r\n const commonBoundsWidth = x2 - x1;\r\n const zoomValueForWidth = viewportDimensions.width / commonBoundsWidth;\r\n const commonBoundsHeight = y2 - y1;\r\n const zoomValueForHeight = viewportDimensions.height / commonBoundsHeight;\r\n const smallestZoomValue = Math.min(zoomValueForWidth, zoomValueForHeight);\r\n const zoomAdjustedToSteps = Math.floor(smallestZoomValue / _constants__WEBPACK_IMPORTED_MODULE_5__.ZOOM_STEP) * _constants__WEBPACK_IMPORTED_MODULE_5__.ZOOM_STEP;\r\n const clampedZoomValueToFitElements = Math.min(Math.max(zoomAdjustedToSteps, _constants__WEBPACK_IMPORTED_MODULE_5__.ZOOM_STEP), 1);\r\n return clampedZoomValueToFitElements;\r\n};\r\nconst zoomToFitElements = (elements, appState, zoomToSelection) => {\r\n const nonDeletedElements = (0,_element__WEBPACK_IMPORTED_MODULE_6__.getNonDeletedElements)(elements);\r\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_9__.getSelectedElements)(nonDeletedElements, appState);\r\n const commonBounds = zoomToSelection && selectedElements.length > 0\r\n ? (0,_element__WEBPACK_IMPORTED_MODULE_6__.getCommonBounds)(selectedElements)\r\n : (0,_element__WEBPACK_IMPORTED_MODULE_6__.getCommonBounds)(nonDeletedElements);\r\n const newZoom = {\r\n value: zoomValueToFitBoundsOnViewport(commonBounds, {\r\n width: appState.width,\r\n height: appState.height,\r\n }),\r\n };\r\n const [x1, y1, x2, y2] = commonBounds;\r\n const centerX = (x1 + x2) / 2;\r\n const centerY = (y1 + y2) / 2;\r\n return {\r\n appState: Object.assign(Object.assign(Object.assign({}, appState), (0,_scene_scroll__WEBPACK_IMPORTED_MODULE_10__.centerScrollOn)({\r\n scenePoint: { x: centerX, y: centerY },\r\n viewportDimensions: {\r\n width: appState.width,\r\n height: appState.height,\r\n },\r\n zoom: newZoom,\r\n })), { zoom: newZoom }),\r\n commitToHistory: false,\r\n };\r\n};\r\nconst actionZoomToSelected = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"zoomToSelection\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (elements, appState) => zoomToFitElements(elements, appState, true),\r\n keyTest: (event) => event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.TWO &&\r\n event.shiftKey &&\r\n !event.altKey &&\r\n !event[_keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.CTRL_OR_CMD],\r\n});\r\nconst actionZoomToFit = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"zoomToFit\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (elements, appState) => zoomToFitElements(elements, appState, false),\r\n keyTest: (event) => event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.ONE &&\r\n event.shiftKey &&\r\n !event.altKey &&\r\n !event[_keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.CTRL_OR_CMD],\r\n});\r\nconst actionToggleTheme = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"toggleTheme\",\r\n trackEvent: { category: \"canvas\" },\r\n perform: (_, appState, value) => {\r\n return {\r\n appState: Object.assign(Object.assign({}, appState), { theme: value || (appState.theme === _constants__WEBPACK_IMPORTED_MODULE_5__.THEME.LIGHT ? _constants__WEBPACK_IMPORTED_MODULE_5__.THEME.DARK : _constants__WEBPACK_IMPORTED_MODULE_5__.THEME.LIGHT) }),\r\n commitToHistory: false,\r\n };\r\n },\r\n PanelComponent: ({ appState, updateData }) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: { marginInlineStart: \"0.25rem\" } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_DarkModeToggle__WEBPACK_IMPORTED_MODULE_4__.DarkModeToggle, { value: appState.theme, onChange: (theme) => {\r\n updateData(theme);\r\n } }, void 0) }), void 0)),\r\n keyTest: (event) => event.altKey && event.shiftKey && event.code === _keys__WEBPACK_IMPORTED_MODULE_8__.CODES.D,\r\n});\r\nconst actionErase = (0,_register__WEBPACK_IMPORTED_MODULE_13__.register)({\r\n name: \"eraser\",\r\n trackEvent: { category: \"toolbar\" },\r\n perform: (elements, appState) => {\r\n var _a;\r\n return {\r\n appState: Object.assign(Object.assign({}, appState), { selectedElementIds: {}, selectedGroupIds: {}, activeTool: Object.assign(Object.assign({}, appState.activeTool), { type: (0,_appState__WEBPACK_IMPORTED_MODULE_16__.isEraserActive)(appState)\r\n ? (_a = appState.activeTool.lastActiveToolBeforeEraser) !== null && _a !== void 0 ? _a : \"selection\"\r\n : \"eraser\", lastActiveToolBeforeEraser: appState.activeTool.type === \"eraser\" //node throws incorrect type error when using isEraserActive()\r\n ? null\r\n : appState.activeTool.type }) }),\r\n commitToHistory: true,\r\n };\r\n },\r\n keyTest: (event) => event.key === _keys__WEBPACK_IMPORTED_MODULE_8__.KEYS.E,\r\n PanelComponent: ({ elements, appState, updateData, data }) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_3__.ToolButton, { type: \"button\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_2__.eraser, className: (0,clsx__WEBPACK_IMPORTED_MODULE_18__[\"default\"])(\"eraser\", { active: (0,_appState__WEBPACK_IMPORTED_MODULE_16__.isEraserActive)(appState) }), title: `${(0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"toolBar.eraser\")}-${(0,_utils__WEBPACK_IMPORTED_MODULE_12__.getShortcutKey)(\"E\")}`, \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_7__.t)(\"toolBar.eraser\"), onClick: () => {\r\n updateData(null);\r\n }, size: (data === null || data === void 0 ? void 0 : data.size) || \"medium\" }, void 0)),\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYWN0aW9ucy9hY3Rpb25DYW52YXMudHN4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXdEO0FBQ007QUFDUjtBQUNRO0FBQ2Q7QUFDb0I7QUFFeEM7QUFDVTtBQUM0QjtBQUNqQjtBQUNEO0FBRU47QUFDSjtBQUNVO0FBQ1U7QUFDTztBQUNiO0FBQzVCO0FBRWpCLE1BQU0sK0JBQStCLEdBQUcsb0RBQVEsQ0FBQztJQUN0RCxJQUFJLEVBQUUsMkJBQTJCO0lBQ2pDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDOUIsT0FBTztZQUNMLFFBQVEsa0NBQU8sUUFBUSxHQUFLLEtBQUssQ0FBRTtZQUNuQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxtQkFBbUI7U0FDN0MsQ0FBQztJQUNKLENBQUM7SUFDRCxjQUFjLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTtRQUNyRCxPQUFPLENBQ0wsOEVBQUssS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxnQkFDbEMsdURBQUMsZ0VBQVcsSUFDVixLQUFLLEVBQUUsd0NBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxFQUNuQyxJQUFJLEVBQUMsa0JBQWtCLEVBQ3ZCLEtBQUssRUFBRSxRQUFRLENBQUMsbUJBQW1CLEVBQ25DLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFDL0QsUUFBUSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEtBQUssbUJBQW1CLEVBQ3BELFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ3BCLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxpQkFFcEQsMEJBQTBCLEVBQ3RDLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFFBQVEsRUFBRSxRQUFRLFdBQ2xCLFlBQ0UsQ0FDUCxDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVJLE1BQU0saUJBQWlCLEdBQUcsb0RBQVEsQ0FBQztJQUN4QyxJQUFJLEVBQUUsYUFBYTtJQUNuQixVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0lBQ2xDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ3RDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsT0FBTztZQUNMLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDakMsdUVBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FDN0M7WUFDRCxRQUFRLGtDQUNILDhEQUFrQixFQUFFLEtBQ3ZCLEtBQUssRUFBRSxFQUFFLEVBQ1QsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQ3JCLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUN6QixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFDakMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixFQUMzQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsZ0JBQWdCLEVBQzNDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUMzQixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFDN0IsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQ2pDLFVBQVUsRUFDUixRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxPQUFPO29CQUNsQyxDQUFDLGlDQUFNLFFBQVEsQ0FBQyxVQUFVLEtBQUUsSUFBSSxFQUFFLFdBQVcsSUFDN0MsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQzFCO1lBQ0QsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyx1REFBQyxnRUFBVyxJQUFDLFNBQVMsRUFBRSxVQUFVLFdBQUk7Q0FDM0UsQ0FBQyxDQUFDO0FBRUksTUFBTSxZQUFZLEdBQUcsb0RBQVEsQ0FBQztJQUNuQyxJQUFJLEVBQUUsUUFBUTtJQUNkLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7SUFDbEMsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDdkMsT0FBTztZQUNMLFFBQVEsa0NBQ0gsUUFBUSxHQUNSLDZEQUFlLENBQ2hCO2dCQUNFLFNBQVMsRUFBRSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVTtnQkFDbkQsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTO2dCQUNuRCxRQUFRLEVBQUUseURBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsaURBQVMsQ0FBQzthQUM3RCxFQUNELFFBQVEsQ0FDVCxDQUNGO1lBQ0QsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQztJQUNKLENBQUM7SUFDRCxjQUFjLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUNsQyx1REFBQyw4REFBVSxJQUNULElBQUksRUFBQyxRQUFRLEVBQ2IsSUFBSSxFQUFFLHFEQUFNLEVBQ1osS0FBSyxFQUFFLEdBQUcsd0NBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLHVEQUFjLENBQUMsYUFBYSxDQUFDLEVBQUUsZ0JBQ3RELHdDQUFDLENBQUMsZ0JBQWdCLENBQUMsRUFDL0IsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNaLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDLEVBQ0QsSUFBSSxFQUFDLE9BQU8sV0FDWixDQUNIO0lBQ0QsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDakIsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLDhDQUFXLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxnREFBYSxDQUFDO1FBQzVELENBQUMsS0FBSyxDQUFDLG1EQUFnQixDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQztDQUM5QyxDQUFDLENBQUM7QUFFSSxNQUFNLGFBQWEsR0FBRyxvREFBUSxDQUFDO0lBQ3BDLElBQUksRUFBRSxTQUFTO0lBQ2YsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtJQUNsQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUN2QyxPQUFPO1lBQ0wsUUFBUSxrQ0FDSCxRQUFRLEdBQ1IsNkRBQWUsQ0FDaEI7Z0JBQ0UsU0FBUyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxVQUFVO2dCQUNuRCxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVM7Z0JBQ25ELFFBQVEsRUFBRSx5REFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxpREFBUyxDQUFDO2FBQzdELEVBQ0QsUUFBUSxDQUNULENBQ0Y7WUFDRCxlQUFlLEVBQUUsS0FBSztTQUN2QixDQUFDO0lBQ0osQ0FBQztJQUNELGNBQWMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQ2xDLHVEQUFDLDhEQUFVLElBQ1QsSUFBSSxFQUFDLFFBQVEsRUFDYixJQUFJLEVBQUUsc0RBQU8sRUFDYixLQUFLLEVBQUUsR0FBRyx3Q0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sdURBQWMsQ0FBQyxhQUFhLENBQUMsRUFBRSxnQkFDdkQsd0NBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUNoQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ1osVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLENBQUMsRUFDRCxJQUFJLEVBQUMsT0FBTyxXQUNaLENBQ0g7SUFDRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNqQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssOENBQVcsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLHFEQUFrQixDQUFDO1FBQ2pFLENBQUMsS0FBSyxDQUFDLG1EQUFnQixDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQztDQUM5QyxDQUFDLENBQUM7QUFFSSxNQUFNLGVBQWUsR0FBRyxvREFBUSxDQUFDO0lBQ3RDLElBQUksRUFBRSxXQUFXO0lBQ2pCLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7SUFDbEMsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDdkMsT0FBTztZQUNMLFFBQVEsa0NBQ0gsUUFBUSxHQUNSLDZEQUFlLENBQ2hCO2dCQUNFLFNBQVMsRUFBRSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVTtnQkFDbkQsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTO2dCQUNuRCxRQUFRLEVBQUUseURBQWlCLENBQUMsQ0FBQyxDQUFDO2FBQy9CLEVBQ0QsUUFBUSxDQUNULENBQ0Y7WUFDRCxlQUFlLEVBQUUsS0FBSztTQUN2QixDQUFDO0lBQ0osQ0FBQztJQUNELGNBQWMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUM1Qyx1REFBQyx5REFBTyxrQkFBQyxLQUFLLEVBQUUsd0NBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsZ0JBQy9ELHdEQUFDLDhEQUFVLGtCQUNULElBQUksRUFBQyxRQUFRLEVBQ2IsU0FBUyxFQUFDLG1CQUFtQixFQUM3QixLQUFLLEVBQUUsd0NBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFDakIsd0NBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUNsQyxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUNaLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixDQUFDLEVBQ0QsSUFBSSxFQUFDLE9BQU8saUJBRVgsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGtCQUM1QixZQUNMLENBQ1g7SUFDRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNqQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssNkNBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlEQUFjLENBQUM7UUFDNUQsQ0FBQyxLQUFLLENBQUMsbURBQWdCLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDO0NBQzlDLENBQUMsQ0FBQztBQUVILE1BQU0sOEJBQThCLEdBQUcsQ0FDckMsTUFBd0MsRUFDeEMsa0JBQXFELEVBQ3JELEVBQUU7SUFDRixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2hDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNsQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQztJQUN2RSxNQUFNLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDbkMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUM7SUFDMUUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDMUUsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxpREFBUyxDQUFDLEdBQUcsaURBQVMsQ0FBQztJQUN4RCxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsaURBQVMsQ0FBQyxFQUN4QyxDQUFDLENBQ0YsQ0FBQztJQUNGLE9BQU8sNkJBQW9ELENBQUM7QUFDOUQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUN4QixRQUFzQyxFQUN0QyxRQUE0QixFQUM1QixlQUF3QixFQUN4QixFQUFFO0lBQ0YsTUFBTSxrQkFBa0IsR0FBRywrREFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzRCxNQUFNLGdCQUFnQixHQUFHLDJEQUFtQixDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTNFLE1BQU0sWUFBWSxHQUNoQixlQUFlLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDNUMsQ0FBQyxDQUFDLHlEQUFlLENBQUMsZ0JBQWdCLENBQUM7UUFDbkMsQ0FBQyxDQUFDLHlEQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUUxQyxNQUFNLE9BQU8sR0FBRztRQUNkLEtBQUssRUFBRSw4QkFBOEIsQ0FBQyxZQUFZLEVBQUU7WUFDbEQsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3JCLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtTQUN4QixDQUFDO0tBQ0gsQ0FBQztJQUVGLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUM7SUFDdEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixPQUFPO1FBQ0wsUUFBUSxnREFDSCxRQUFRLEdBQ1IsOERBQWMsQ0FBQztZQUNoQixVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUU7WUFDdEMsa0JBQWtCLEVBQUU7Z0JBQ2xCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztnQkFDckIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO2FBQ3hCO1lBQ0QsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDLEtBQ0YsSUFBSSxFQUFFLE9BQU8sR0FDZDtRQUNELGVBQWUsRUFBRSxLQUFLO0tBQ3ZCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFSyxNQUFNLG9CQUFvQixHQUFHLG9EQUFRLENBQUM7SUFDM0MsSUFBSSxFQUFFLGlCQUFpQjtJQUN2QixVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0lBQ2xDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDO0lBQzVFLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2pCLEtBQUssQ0FBQyxJQUFJLEtBQUssNENBQVM7UUFDeEIsS0FBSyxDQUFDLFFBQVE7UUFDZCxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ2IsQ0FBQyxLQUFLLENBQUMsbURBQWdCLENBQUM7Q0FDM0IsQ0FBQyxDQUFDO0FBRUksTUFBTSxlQUFlLEdBQUcsb0RBQVEsQ0FBQztJQUN0QyxJQUFJLEVBQUUsV0FBVztJQUNqQixVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0lBQ2xDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQzdFLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2pCLEtBQUssQ0FBQyxJQUFJLEtBQUssNENBQVM7UUFDeEIsS0FBSyxDQUFDLFFBQVE7UUFDZCxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ2IsQ0FBQyxLQUFLLENBQUMsbURBQWdCLENBQUM7Q0FDM0IsQ0FBQyxDQUFDO0FBRUksTUFBTSxpQkFBaUIsR0FBRyxvREFBUSxDQUFDO0lBQ3hDLElBQUksRUFBRSxhQUFhO0lBQ25CLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7SUFDbEMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUM5QixPQUFPO1lBQ0wsUUFBUSxrQ0FDSCxRQUFRLEtBQ1gsS0FBSyxFQUNILEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssbURBQVcsQ0FBQyxDQUFDLENBQUMsa0RBQVUsQ0FBQyxDQUFDLENBQUMsbURBQVcsQ0FBQyxHQUN2RTtZQUNELGVBQWUsRUFBRSxLQUFLO1NBQ3ZCLENBQUM7SUFDSixDQUFDO0lBQ0QsY0FBYyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQzVDLDhFQUFLLEtBQUssRUFBRSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxnQkFDMUMsdURBQUMsc0VBQWMsSUFDYixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFDckIsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2xCLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQixDQUFDLFdBQ0QsWUFDRSxDQUNQO0lBQ0QsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksS0FBSywwQ0FBTztDQUM3RSxDQUFDLENBQUM7QUFFSSxNQUFNLFdBQVcsR0FBRyxvREFBUSxDQUFDO0lBQ2xDLElBQUksRUFBRSxRQUFRO0lBQ2QsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtJQUNuQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7O1FBQzlCLE9BQU87WUFDTCxRQUFRLGtDQUNILFFBQVEsS0FDWCxrQkFBa0IsRUFBRSxFQUFFLEVBQ3RCLGdCQUFnQixFQUFFLEVBQUUsRUFDcEIsVUFBVSxrQ0FDTCxRQUFRLENBQUMsVUFBVSxLQUN0QixJQUFJLEVBQUUsMERBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQzVCLENBQUMsQ0FBQyxjQUFRLENBQUMsVUFBVSxDQUFDLDBCQUEwQixtQ0FBSSxXQUFXO3dCQUMvRCxDQUFDLENBQUMsUUFBUSxFQUNaLDBCQUEwQixFQUN4QixRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsOERBQThEO3dCQUNsRyxDQUFDLENBQUMsSUFBSTt3QkFDTixDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BRWpDO1lBQ0QsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUsseUNBQU07SUFDeEMsY0FBYyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDNUQsdURBQUMsOERBQVUsSUFDVCxJQUFJLEVBQUMsUUFBUSxFQUNiLElBQUksRUFBRSxxREFBTSxFQUNaLFNBQVMsRUFBRSxpREFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSwwREFBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFDL0QsS0FBSyxFQUFFLEdBQUcsd0NBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLHVEQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsZ0JBQzFDLHdDQUFDLENBQUMsZ0JBQWdCLENBQUMsRUFDL0IsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNaLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDLEVBQ0QsSUFBSSxFQUFFLEtBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxJQUFJLEtBQUksUUFBUSxXQUNoQixDQUNmO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2FjdGlvbnMvYWN0aW9uQ2FudmFzLnRzeD81ZDg0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbG9yUGlja2VyIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcbmltcG9ydCB7IGVyYXNlciwgem9vbUluLCB6b29tT3V0IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvaWNvbnNcIjtcbmltcG9ydCB7IFRvb2xCdXR0b24gfSBmcm9tIFwiLi4vY29tcG9uZW50cy9Ub29sQnV0dG9uXCI7XG5pbXBvcnQgeyBEYXJrTW9kZVRvZ2dsZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL0RhcmtNb2RlVG9nZ2xlXCI7XG5pbXBvcnQgeyBUSEVNRSwgWk9PTV9TVEVQIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZ2V0Q29tbW9uQm91bmRzLCBnZXROb25EZWxldGVkRWxlbWVudHMgfSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgRXhjYWxpZHJhd0VsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQgeyBDT0RFUywgS0VZUyB9IGZyb20gXCIuLi9rZXlzXCI7XG5pbXBvcnQgeyBnZXROb3JtYWxpemVkWm9vbSwgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gXCIuLi9zY2VuZVwiO1xuaW1wb3J0IHsgY2VudGVyU2Nyb2xsT24gfSBmcm9tIFwiLi4vc2NlbmUvc2Nyb2xsXCI7XG5pbXBvcnQgeyBnZXRTdGF0ZUZvclpvb20gfSBmcm9tIFwiLi4vc2NlbmUvem9vbVwiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIE5vcm1hbGl6ZWRab29tVmFsdWUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IGdldFNob3J0Y3V0S2V5IH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gXCIuL3JlZ2lzdGVyXCI7XG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvVG9vbHRpcFwiO1xuaW1wb3J0IHsgbmV3RWxlbWVudFdpdGggfSBmcm9tIFwiLi4vZWxlbWVudC9tdXRhdGVFbGVtZW50XCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0QXBwU3RhdGUsIGlzRXJhc2VyQWN0aXZlIH0gZnJvbSBcIi4uL2FwcFN0YXRlXCI7XG5pbXBvcnQgQ2xlYXJDYW52YXMgZnJvbSBcIi4uL2NvbXBvbmVudHMvQ2xlYXJDYW52YXNcIjtcbmltcG9ydCBjbHN4IGZyb20gXCJjbHN4XCI7XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25DaGFuZ2VWaWV3QmFja2dyb3VuZENvbG9yID0gcmVnaXN0ZXIoe1xuICBuYW1lOiBcImNoYW5nZVZpZXdCYWNrZ3JvdW5kQ29sb3JcIixcbiAgdHJhY2tFdmVudDogZmFsc2UsXG4gIHBlcmZvcm06IChfLCBhcHBTdGF0ZSwgdmFsdWUpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGU6IHsgLi4uYXBwU3RhdGUsIC4uLnZhbHVlIH0sXG4gICAgICBjb21taXRUb0hpc3Rvcnk6ICEhdmFsdWUudmlld0JhY2tncm91bmRDb2xvcixcbiAgICB9O1xuICB9LFxuICBQYW5lbENvbXBvbmVudDogKHsgZWxlbWVudHMsIGFwcFN0YXRlLCB1cGRhdGVEYXRhIH0pID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17eyBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiIH19PlxuICAgICAgICA8Q29sb3JQaWNrZXJcbiAgICAgICAgICBsYWJlbD17dChcImxhYmVscy5jYW52YXNCYWNrZ3JvdW5kXCIpfVxuICAgICAgICAgIHR5cGU9XCJjYW52YXNCYWNrZ3JvdW5kXCJcbiAgICAgICAgICBjb2xvcj17YXBwU3RhdGUudmlld0JhY2tncm91bmRDb2xvcn1cbiAgICAgICAgICBvbkNoYW5nZT17KGNvbG9yKSA9PiB1cGRhdGVEYXRhKHsgdmlld0JhY2tncm91bmRDb2xvcjogY29sb3IgfSl9XG4gICAgICAgICAgaXNBY3RpdmU9e2FwcFN0YXRlLm9wZW5Qb3B1cCA9PT0gXCJjYW52YXNDb2xvclBpY2tlclwifVxuICAgICAgICAgIHNldEFjdGl2ZT17KGFjdGl2ZSkgPT5cbiAgICAgICAgICAgIHVwZGF0ZURhdGEoeyBvcGVuUG9wdXA6IGFjdGl2ZSA/IFwiY2FudmFzQ29sb3JQaWNrZXJcIiA6IG51bGwgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjYW52YXMtYmFja2dyb3VuZC1waWNrZXJcIlxuICAgICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25DbGVhckNhbnZhcyA9IHJlZ2lzdGVyKHtcbiAgbmFtZTogXCJjbGVhckNhbnZhc1wiLFxuICB0cmFja0V2ZW50OiB7IGNhdGVnb3J5OiBcImNhbnZhc1wiIH0sXG4gIHBlcmZvcm06IChlbGVtZW50cywgYXBwU3RhdGUsIF8sIGFwcCkgPT4ge1xuICAgIGFwcC5pbWFnZUNhY2hlLmNsZWFyKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZW1lbnRzOiBlbGVtZW50cy5tYXAoKGVsZW1lbnQpID0+XG4gICAgICAgIG5ld0VsZW1lbnRXaXRoKGVsZW1lbnQsIHsgaXNEZWxldGVkOiB0cnVlIH0pLFxuICAgICAgKSxcbiAgICAgIGFwcFN0YXRlOiB7XG4gICAgICAgIC4uLmdldERlZmF1bHRBcHBTdGF0ZSgpLFxuICAgICAgICBmaWxlczoge30sXG4gICAgICAgIHRoZW1lOiBhcHBTdGF0ZS50aGVtZSxcbiAgICAgICAgcGVuTW9kZTogYXBwU3RhdGUucGVuTW9kZSxcbiAgICAgICAgcGVuRGV0ZWN0ZWQ6IGFwcFN0YXRlLnBlbkRldGVjdGVkLFxuICAgICAgICBleHBvcnRCYWNrZ3JvdW5kOiBhcHBTdGF0ZS5leHBvcnRCYWNrZ3JvdW5kLFxuICAgICAgICBleHBvcnRFbWJlZFNjZW5lOiBhcHBTdGF0ZS5leHBvcnRFbWJlZFNjZW5lLFxuICAgICAgICBncmlkU2l6ZTogYXBwU3RhdGUuZ3JpZFNpemUsXG4gICAgICAgIHNob3dTdGF0czogYXBwU3RhdGUuc2hvd1N0YXRzLFxuICAgICAgICBwYXN0ZURpYWxvZzogYXBwU3RhdGUucGFzdGVEaWFsb2csXG4gICAgICAgIGFjdGl2ZVRvb2w6XG4gICAgICAgICAgYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlID09PSBcImltYWdlXCJcbiAgICAgICAgICAgID8geyAuLi5hcHBTdGF0ZS5hY3RpdmVUb29sLCB0eXBlOiBcInNlbGVjdGlvblwiIH1cbiAgICAgICAgICAgIDogYXBwU3RhdGUuYWN0aXZlVG9vbCxcbiAgICAgIH0sXG4gICAgICBjb21taXRUb0hpc3Rvcnk6IHRydWUsXG4gICAgfTtcbiAgfSxcblxuICBQYW5lbENvbXBvbmVudDogKHsgdXBkYXRlRGF0YSB9KSA9PiA8Q2xlYXJDYW52YXMgb25Db25maXJtPXt1cGRhdGVEYXRhfSAvPixcbn0pO1xuXG5leHBvcnQgY29uc3QgYWN0aW9uWm9vbUluID0gcmVnaXN0ZXIoe1xuICBuYW1lOiBcInpvb21JblwiLFxuICB0cmFja0V2ZW50OiB7IGNhdGVnb3J5OiBcImNhbnZhc1wiIH0sXG4gIHBlcmZvcm06IChfZWxlbWVudHMsIGFwcFN0YXRlLCBfLCBhcHApID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGU6IHtcbiAgICAgICAgLi4uYXBwU3RhdGUsXG4gICAgICAgIC4uLmdldFN0YXRlRm9yWm9vbShcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2aWV3cG9ydFg6IGFwcFN0YXRlLndpZHRoIC8gMiArIGFwcFN0YXRlLm9mZnNldExlZnQsXG4gICAgICAgICAgICB2aWV3cG9ydFk6IGFwcFN0YXRlLmhlaWdodCAvIDIgKyBhcHBTdGF0ZS5vZmZzZXRUb3AsXG4gICAgICAgICAgICBuZXh0Wm9vbTogZ2V0Tm9ybWFsaXplZFpvb20oYXBwU3RhdGUuem9vbS52YWx1ZSArIFpPT01fU1RFUCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhcHBTdGF0ZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICBjb21taXRUb0hpc3Rvcnk6IGZhbHNlLFxuICAgIH07XG4gIH0sXG4gIFBhbmVsQ29tcG9uZW50OiAoeyB1cGRhdGVEYXRhIH0pID0+IChcbiAgICA8VG9vbEJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBpY29uPXt6b29tSW59XG4gICAgICB0aXRsZT17YCR7dChcImJ1dHRvbnMuem9vbUluXCIpfSDigJQgJHtnZXRTaG9ydGN1dEtleShcIkN0cmxPckNtZCsrXCIpfWB9XG4gICAgICBhcmlhLWxhYmVsPXt0KFwiYnV0dG9ucy56b29tSW5cIil9XG4gICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgIHVwZGF0ZURhdGEobnVsbCk7XG4gICAgICB9fVxuICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAvPlxuICApLFxuICBrZXlUZXN0OiAoZXZlbnQpID0+XG4gICAgKGV2ZW50LmNvZGUgPT09IENPREVTLkVRVUFMIHx8IGV2ZW50LmNvZGUgPT09IENPREVTLk5VTV9BREQpICYmXG4gICAgKGV2ZW50W0tFWVMuQ1RSTF9PUl9DTURdIHx8IGV2ZW50LnNoaWZ0S2V5KSxcbn0pO1xuXG5leHBvcnQgY29uc3QgYWN0aW9uWm9vbU91dCA9IHJlZ2lzdGVyKHtcbiAgbmFtZTogXCJ6b29tT3V0XCIsXG4gIHRyYWNrRXZlbnQ6IHsgY2F0ZWdvcnk6IFwiY2FudmFzXCIgfSxcbiAgcGVyZm9ybTogKF9lbGVtZW50cywgYXBwU3RhdGUsIF8sIGFwcCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZToge1xuICAgICAgICAuLi5hcHBTdGF0ZSxcbiAgICAgICAgLi4uZ2V0U3RhdGVGb3Jab29tKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZpZXdwb3J0WDogYXBwU3RhdGUud2lkdGggLyAyICsgYXBwU3RhdGUub2Zmc2V0TGVmdCxcbiAgICAgICAgICAgIHZpZXdwb3J0WTogYXBwU3RhdGUuaGVpZ2h0IC8gMiArIGFwcFN0YXRlLm9mZnNldFRvcCxcbiAgICAgICAgICAgIG5leHRab29tOiBnZXROb3JtYWxpemVkWm9vbShhcHBTdGF0ZS56b29tLnZhbHVlIC0gWk9PTV9TVEVQKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFwcFN0YXRlLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGNvbW1pdFRvSGlzdG9yeTogZmFsc2UsXG4gICAgfTtcbiAgfSxcbiAgUGFuZWxDb21wb25lbnQ6ICh7IHVwZGF0ZURhdGEgfSkgPT4gKFxuICAgIDxUb29sQnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGljb249e3pvb21PdXR9XG4gICAgICB0aXRsZT17YCR7dChcImJ1dHRvbnMuem9vbU91dFwiKX0g4oCUICR7Z2V0U2hvcnRjdXRLZXkoXCJDdHJsT3JDbWQrLVwiKX1gfVxuICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMuem9vbU91dFwiKX1cbiAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgdXBkYXRlRGF0YShudWxsKTtcbiAgICAgIH19XG4gICAgICBzaXplPVwic21hbGxcIlxuICAgIC8+XG4gICksXG4gIGtleVRlc3Q6IChldmVudCkgPT5cbiAgICAoZXZlbnQuY29kZSA9PT0gQ09ERVMuTUlOVVMgfHwgZXZlbnQuY29kZSA9PT0gQ09ERVMuTlVNX1NVQlRSQUNUKSAmJlxuICAgIChldmVudFtLRVlTLkNUUkxfT1JfQ01EXSB8fCBldmVudC5zaGlmdEtleSksXG59KTtcblxuZXhwb3J0IGNvbnN0IGFjdGlvblJlc2V0Wm9vbSA9IHJlZ2lzdGVyKHtcbiAgbmFtZTogXCJyZXNldFpvb21cIixcbiAgdHJhY2tFdmVudDogeyBjYXRlZ29yeTogXCJjYW52YXNcIiB9LFxuICBwZXJmb3JtOiAoX2VsZW1lbnRzLCBhcHBTdGF0ZSwgXywgYXBwKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlOiB7XG4gICAgICAgIC4uLmFwcFN0YXRlLFxuICAgICAgICAuLi5nZXRTdGF0ZUZvclpvb20oXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmlld3BvcnRYOiBhcHBTdGF0ZS53aWR0aCAvIDIgKyBhcHBTdGF0ZS5vZmZzZXRMZWZ0LFxuICAgICAgICAgICAgdmlld3BvcnRZOiBhcHBTdGF0ZS5oZWlnaHQgLyAyICsgYXBwU3RhdGUub2Zmc2V0VG9wLFxuICAgICAgICAgICAgbmV4dFpvb206IGdldE5vcm1hbGl6ZWRab29tKDEpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXBwU3RhdGUsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgY29tbWl0VG9IaXN0b3J5OiBmYWxzZSxcbiAgICB9O1xuICB9LFxuICBQYW5lbENvbXBvbmVudDogKHsgdXBkYXRlRGF0YSwgYXBwU3RhdGUgfSkgPT4gKFxuICAgIDxUb29sdGlwIGxhYmVsPXt0KFwiYnV0dG9ucy5yZXNldFpvb21cIil9IHN0eWxlPXt7IGhlaWdodDogXCIxMDAlXCIgfX0+XG4gICAgICA8VG9vbEJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPVwicmVzZXQtem9vbS1idXR0b25cIlxuICAgICAgICB0aXRsZT17dChcImJ1dHRvbnMucmVzZXRab29tXCIpfVxuICAgICAgICBhcmlhLWxhYmVsPXt0KFwiYnV0dG9ucy5yZXNldFpvb21cIil9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICB1cGRhdGVEYXRhKG51bGwpO1xuICAgICAgICB9fVxuICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgPlxuICAgICAgICB7KGFwcFN0YXRlLnpvb20udmFsdWUgKiAxMDApLnRvRml4ZWQoMCl9JVxuICAgICAgPC9Ub29sQnV0dG9uPlxuICAgIDwvVG9vbHRpcD5cbiAgKSxcbiAga2V5VGVzdDogKGV2ZW50KSA9PlxuICAgIChldmVudC5jb2RlID09PSBDT0RFUy5aRVJPIHx8IGV2ZW50LmNvZGUgPT09IENPREVTLk5VTV9aRVJPKSAmJlxuICAgIChldmVudFtLRVlTLkNUUkxfT1JfQ01EXSB8fCBldmVudC5zaGlmdEtleSksXG59KTtcblxuY29uc3Qgem9vbVZhbHVlVG9GaXRCb3VuZHNPblZpZXdwb3J0ID0gKFxuICBib3VuZHM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICB2aWV3cG9ydERpbWVuc2lvbnM6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcbikgPT4ge1xuICBjb25zdCBbeDEsIHkxLCB4MiwgeTJdID0gYm91bmRzO1xuICBjb25zdCBjb21tb25Cb3VuZHNXaWR0aCA9IHgyIC0geDE7XG4gIGNvbnN0IHpvb21WYWx1ZUZvcldpZHRoID0gdmlld3BvcnREaW1lbnNpb25zLndpZHRoIC8gY29tbW9uQm91bmRzV2lkdGg7XG4gIGNvbnN0IGNvbW1vbkJvdW5kc0hlaWdodCA9IHkyIC0geTE7XG4gIGNvbnN0IHpvb21WYWx1ZUZvckhlaWdodCA9IHZpZXdwb3J0RGltZW5zaW9ucy5oZWlnaHQgLyBjb21tb25Cb3VuZHNIZWlnaHQ7XG4gIGNvbnN0IHNtYWxsZXN0Wm9vbVZhbHVlID0gTWF0aC5taW4oem9vbVZhbHVlRm9yV2lkdGgsIHpvb21WYWx1ZUZvckhlaWdodCk7XG4gIGNvbnN0IHpvb21BZGp1c3RlZFRvU3RlcHMgPVxuICAgIE1hdGguZmxvb3Ioc21hbGxlc3Rab29tVmFsdWUgLyBaT09NX1NURVApICogWk9PTV9TVEVQO1xuICBjb25zdCBjbGFtcGVkWm9vbVZhbHVlVG9GaXRFbGVtZW50cyA9IE1hdGgubWluKFxuICAgIE1hdGgubWF4KHpvb21BZGp1c3RlZFRvU3RlcHMsIFpPT01fU1RFUCksXG4gICAgMSxcbiAgKTtcbiAgcmV0dXJuIGNsYW1wZWRab29tVmFsdWVUb0ZpdEVsZW1lbnRzIGFzIE5vcm1hbGl6ZWRab29tVmFsdWU7XG59O1xuXG5jb25zdCB6b29tVG9GaXRFbGVtZW50cyA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiBSZWFkb25seTxBcHBTdGF0ZT4sXG4gIHpvb21Ub1NlbGVjdGlvbjogYm9vbGVhbixcbikgPT4ge1xuICBjb25zdCBub25EZWxldGVkRWxlbWVudHMgPSBnZXROb25EZWxldGVkRWxlbWVudHMoZWxlbWVudHMpO1xuICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhub25EZWxldGVkRWxlbWVudHMsIGFwcFN0YXRlKTtcblxuICBjb25zdCBjb21tb25Cb3VuZHMgPVxuICAgIHpvb21Ub1NlbGVjdGlvbiAmJiBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDBcbiAgICAgID8gZ2V0Q29tbW9uQm91bmRzKHNlbGVjdGVkRWxlbWVudHMpXG4gICAgICA6IGdldENvbW1vbkJvdW5kcyhub25EZWxldGVkRWxlbWVudHMpO1xuXG4gIGNvbnN0IG5ld1pvb20gPSB7XG4gICAgdmFsdWU6IHpvb21WYWx1ZVRvRml0Qm91bmRzT25WaWV3cG9ydChjb21tb25Cb3VuZHMsIHtcbiAgICAgIHdpZHRoOiBhcHBTdGF0ZS53aWR0aCxcbiAgICAgIGhlaWdodDogYXBwU3RhdGUuaGVpZ2h0LFxuICAgIH0pLFxuICB9O1xuXG4gIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBjb21tb25Cb3VuZHM7XG4gIGNvbnN0IGNlbnRlclggPSAoeDEgKyB4MikgLyAyO1xuICBjb25zdCBjZW50ZXJZID0gKHkxICsgeTIpIC8gMjtcbiAgcmV0dXJuIHtcbiAgICBhcHBTdGF0ZToge1xuICAgICAgLi4uYXBwU3RhdGUsXG4gICAgICAuLi5jZW50ZXJTY3JvbGxPbih7XG4gICAgICAgIHNjZW5lUG9pbnQ6IHsgeDogY2VudGVyWCwgeTogY2VudGVyWSB9LFxuICAgICAgICB2aWV3cG9ydERpbWVuc2lvbnM6IHtcbiAgICAgICAgICB3aWR0aDogYXBwU3RhdGUud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBhcHBTdGF0ZS5oZWlnaHQsXG4gICAgICAgIH0sXG4gICAgICAgIHpvb206IG5ld1pvb20sXG4gICAgICB9KSxcbiAgICAgIHpvb206IG5ld1pvb20sXG4gICAgfSxcbiAgICBjb21taXRUb0hpc3Rvcnk6IGZhbHNlLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGFjdGlvblpvb21Ub1NlbGVjdGVkID0gcmVnaXN0ZXIoe1xuICBuYW1lOiBcInpvb21Ub1NlbGVjdGlvblwiLFxuICB0cmFja0V2ZW50OiB7IGNhdGVnb3J5OiBcImNhbnZhc1wiIH0sXG4gIHBlcmZvcm06IChlbGVtZW50cywgYXBwU3RhdGUpID0+IHpvb21Ub0ZpdEVsZW1lbnRzKGVsZW1lbnRzLCBhcHBTdGF0ZSwgdHJ1ZSksXG4gIGtleVRlc3Q6IChldmVudCkgPT5cbiAgICBldmVudC5jb2RlID09PSBDT0RFUy5UV08gJiZcbiAgICBldmVudC5zaGlmdEtleSAmJlxuICAgICFldmVudC5hbHRLZXkgJiZcbiAgICAhZXZlbnRbS0VZUy5DVFJMX09SX0NNRF0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGFjdGlvblpvb21Ub0ZpdCA9IHJlZ2lzdGVyKHtcbiAgbmFtZTogXCJ6b29tVG9GaXRcIixcbiAgdHJhY2tFdmVudDogeyBjYXRlZ29yeTogXCJjYW52YXNcIiB9LFxuICBwZXJmb3JtOiAoZWxlbWVudHMsIGFwcFN0YXRlKSA9PiB6b29tVG9GaXRFbGVtZW50cyhlbGVtZW50cywgYXBwU3RhdGUsIGZhbHNlKSxcbiAga2V5VGVzdDogKGV2ZW50KSA9PlxuICAgIGV2ZW50LmNvZGUgPT09IENPREVTLk9ORSAmJlxuICAgIGV2ZW50LnNoaWZ0S2V5ICYmXG4gICAgIWV2ZW50LmFsdEtleSAmJlxuICAgICFldmVudFtLRVlTLkNUUkxfT1JfQ01EXSxcbn0pO1xuXG5leHBvcnQgY29uc3QgYWN0aW9uVG9nZ2xlVGhlbWUgPSByZWdpc3Rlcih7XG4gIG5hbWU6IFwidG9nZ2xlVGhlbWVcIixcbiAgdHJhY2tFdmVudDogeyBjYXRlZ29yeTogXCJjYW52YXNcIiB9LFxuICBwZXJmb3JtOiAoXywgYXBwU3RhdGUsIHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlOiB7XG4gICAgICAgIC4uLmFwcFN0YXRlLFxuICAgICAgICB0aGVtZTpcbiAgICAgICAgICB2YWx1ZSB8fCAoYXBwU3RhdGUudGhlbWUgPT09IFRIRU1FLkxJR0hUID8gVEhFTUUuREFSSyA6IFRIRU1FLkxJR0hUKSxcbiAgICAgIH0sXG4gICAgICBjb21taXRUb0hpc3Rvcnk6IGZhbHNlLFxuICAgIH07XG4gIH0sXG4gIFBhbmVsQ29tcG9uZW50OiAoeyBhcHBTdGF0ZSwgdXBkYXRlRGF0YSB9KSA9PiAoXG4gICAgPGRpdiBzdHlsZT17eyBtYXJnaW5JbmxpbmVTdGFydDogXCIwLjI1cmVtXCIgfX0+XG4gICAgICA8RGFya01vZGVUb2dnbGVcbiAgICAgICAgdmFsdWU9e2FwcFN0YXRlLnRoZW1lfVxuICAgICAgICBvbkNoYW5nZT17KHRoZW1lKSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSh0aGVtZSk7XG4gICAgICAgIH19XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApLFxuICBrZXlUZXN0OiAoZXZlbnQpID0+IGV2ZW50LmFsdEtleSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5jb2RlID09PSBDT0RFUy5ELFxufSk7XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25FcmFzZSA9IHJlZ2lzdGVyKHtcbiAgbmFtZTogXCJlcmFzZXJcIixcbiAgdHJhY2tFdmVudDogeyBjYXRlZ29yeTogXCJ0b29sYmFyXCIgfSxcbiAgcGVyZm9ybTogKGVsZW1lbnRzLCBhcHBTdGF0ZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZToge1xuICAgICAgICAuLi5hcHBTdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50SWRzOiB7fSxcbiAgICAgICAgc2VsZWN0ZWRHcm91cElkczoge30sXG4gICAgICAgIGFjdGl2ZVRvb2w6IHtcbiAgICAgICAgICAuLi5hcHBTdGF0ZS5hY3RpdmVUb29sLFxuICAgICAgICAgIHR5cGU6IGlzRXJhc2VyQWN0aXZlKGFwcFN0YXRlKVxuICAgICAgICAgICAgPyBhcHBTdGF0ZS5hY3RpdmVUb29sLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyID8/IFwic2VsZWN0aW9uXCJcbiAgICAgICAgICAgIDogXCJlcmFzZXJcIixcbiAgICAgICAgICBsYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcjpcbiAgICAgICAgICAgIGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJlcmFzZXJcIiAvL25vZGUgdGhyb3dzIGluY29ycmVjdCB0eXBlIGVycm9yIHdoZW4gdXNpbmcgaXNFcmFzZXJBY3RpdmUoKVxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiBhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29tbWl0VG9IaXN0b3J5OiB0cnVlLFxuICAgIH07XG4gIH0sXG4gIGtleVRlc3Q6IChldmVudCkgPT4gZXZlbnQua2V5ID09PSBLRVlTLkUsXG4gIFBhbmVsQ29tcG9uZW50OiAoeyBlbGVtZW50cywgYXBwU3RhdGUsIHVwZGF0ZURhdGEsIGRhdGEgfSkgPT4gKFxuICAgIDxUb29sQnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGljb249e2VyYXNlcn1cbiAgICAgIGNsYXNzTmFtZT17Y2xzeChcImVyYXNlclwiLCB7IGFjdGl2ZTogaXNFcmFzZXJBY3RpdmUoYXBwU3RhdGUpIH0pfVxuICAgICAgdGl0bGU9e2Ake3QoXCJ0b29sQmFyLmVyYXNlclwiKX0tJHtnZXRTaG9ydGN1dEtleShcIkVcIil9YH1cbiAgICAgIGFyaWEtbGFiZWw9e3QoXCJ0b29sQmFyLmVyYXNlclwiKX1cbiAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgdXBkYXRlRGF0YShudWxsKTtcbiAgICAgIH19XG4gICAgICBzaXplPXtkYXRhPy5zaXplIHx8IFwibWVkaXVtXCJ9XG4gICAgPjwvVG9vbEJ1dHRvbj5cbiAgKSxcbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../actions/actionCanvas.tsx\n");
|
|
1254
1254
|
|
|
1255
1255
|
/***/ }),
|
|
1256
1256
|
|
|
@@ -1316,7 +1316,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1316
1316
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1317
1317
|
|
|
1318
1318
|
"use strict";
|
|
1319
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"actionFinalize\": () => (/* binding */ actionFinalize)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _components_ToolButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _components_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _register__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./register */ \"../../actions/register.ts\");\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../element/mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../math */ \"../../math.ts\");\n/* harmony import */ var _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../element/linearElementEditor */ \"../../element/linearElementEditor.ts\");\n/* harmony import */ var _scene_Scene__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../scene/Scene */ \"../../scene/Scene.ts\");\n/* harmony import */ var _element_binding__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../element/binding */ \"../../element/binding.ts\");\n/* harmony import */ var _element_typeChecks__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../element/typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst actionFinalize = (0,_register__WEBPACK_IMPORTED_MODULE_7__.register)({\r\n name: \"finalize\",\r\n trackEvent: false,\r\n perform: (elements, appState, _, { canvas, focusContainer }) => {\r\n var _a;\r\n if (appState.editingLinearElement) {\r\n const { elementId, startBindingElement, endBindingElement } = appState.editingLinearElement;\r\n const element = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_10__.LinearElementEditor.getElement(elementId);\r\n if (element) {\r\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_13__.isBindingElement)(element)) {\r\n (0,_element_binding__WEBPACK_IMPORTED_MODULE_12__.bindOrUnbindLinearElement)(element, startBindingElement, endBindingElement);\r\n }\r\n return {\r\n elements: element.points.length < 2 || (0,_element__WEBPACK_IMPORTED_MODULE_2__.isInvisiblySmallElement)(element)\r\n ? elements.filter((el) => el.id !== element.id)\r\n : undefined,\r\n appState: Object.assign(Object.assign({}, appState), { editingLinearElement: null }),\r\n commitToHistory: true,\r\n };\r\n }\r\n }\r\n let newElements = elements;\r\n if (appState.pendingImageElement) {\r\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_8__.mutateElement)(appState.pendingImageElement, { isDeleted: true }, false);\r\n }\r\n if (window.document.activeElement instanceof HTMLElement) {\r\n focusContainer();\r\n }\r\n const multiPointElement = appState.multiElement\r\n ? appState.multiElement\r\n : ((_a = appState.editingElement) === null || _a === void 0 ? void 0 : _a.type) === \"freedraw\"\r\n ? appState.editingElement\r\n : null;\r\n if (multiPointElement) {\r\n // pen and mouse have hover\r\n if (multiPointElement.type !== \"freedraw\" &&\r\n appState.lastPointerDownWith !== \"touch\") {\r\n const { points, lastCommittedPoint } = multiPointElement;\r\n if (!lastCommittedPoint ||\r\n points[points.length - 1] !== lastCommittedPoint) {\r\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_8__.mutateElement)(multiPointElement, {\r\n points: multiPointElement.points.slice(0, -1),\r\n });\r\n }\r\n }\r\n if ((0,_element__WEBPACK_IMPORTED_MODULE_2__.isInvisiblySmallElement)(multiPointElement)) {\r\n newElements = newElements.slice(0, -1);\r\n }\r\n // If the multi point line closes the loop,\r\n // set the last point to first point.\r\n // This ensures that loop remains closed at different scales.\r\n const isLoop = (0,_math__WEBPACK_IMPORTED_MODULE_9__.isPathALoop)(multiPointElement.points, appState.zoom.value);\r\n if (multiPointElement.type === \"line\" ||\r\n multiPointElement.type === \"freedraw\") {\r\n if (isLoop) {\r\n const linePoints = multiPointElement.points;\r\n const firstPoint = linePoints[0];\r\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_8__.mutateElement)(multiPointElement, {\r\n points: linePoints.map((point, index) => index === linePoints.length - 1\r\n ? [firstPoint[0], firstPoint[1]]\r\n : point),\r\n });\r\n }\r\n }\r\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_13__.isBindingElement)(multiPointElement) &&\r\n !isLoop &&\r\n multiPointElement.points.length > 1) {\r\n const [x, y] = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_10__.LinearElementEditor.getPointAtIndexGlobalCoordinates(multiPointElement, -1);\r\n (0,_element_binding__WEBPACK_IMPORTED_MODULE_12__.maybeBindLinearElement)(multiPointElement, appState, _scene_Scene__WEBPACK_IMPORTED_MODULE_11__[\"default\"].getScene(multiPointElement), { x, y });\r\n }\r\n if (!appState.activeTool.locked &&\r\n appState.activeTool.type !== \"freedraw\") {\r\n appState.selectedElementIds[multiPointElement.id] = true;\r\n }\r\n }\r\n if ((!appState.activeTool.locked &&\r\n appState.activeTool.type !== \"freedraw\") ||\r\n !multiPointElement) {\r\n (0,_utils__WEBPACK_IMPORTED_MODULE_3__.resetCursor)(canvas);\r\n }\r\n return {\r\n elements: newElements,\r\n appState: Object.assign(Object.assign({}, appState), { activeTool: (appState.activeTool.locked ||\r\n appState.activeTool.type === \"freedraw\") &&\r\n multiPointElement\r\n ? appState.activeTool\r\n : Object.assign(Object.assign({}, appState.activeTool), { type: \"selection\" }), draggingElement: null, multiElement: null, editingElement: null, startBoundElement: null, suggestedBindings: [], selectedElementIds: multiPointElement &&\r\n !appState.activeTool.locked &&\r\n appState.activeTool.type !== \"freedraw\"\r\n ? Object.assign(Object.assign({}, appState.selectedElementIds), { [multiPointElement.id]: true }) : appState.selectedElementIds, pendingImageElement: null }),\r\n commitToHistory: appState.activeTool.type === \"freedraw\",\r\n };\r\n },\r\n keyTest: (event, appState) => !(0,_appState__WEBPACK_IMPORTED_MODULE_14__.isEraserActive)(appState) &&\r\n ((event.key === _keys__WEBPACK_IMPORTED_MODULE_1__.KEYS.ESCAPE &&\r\n (appState.editingLinearElement !== null ||\r\n (!appState.draggingElement && appState.multiElement === null))) ||\r\n ((event.key === _keys__WEBPACK_IMPORTED_MODULE_1__.KEYS.ESCAPE || event.key === _keys__WEBPACK_IMPORTED_MODULE_1__.KEYS.ENTER) &&\r\n appState.multiElement !== null)),\r\n PanelComponent: ({ appState, updateData, data }) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_4__.ToolButton, { type: \"button\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_5__.done, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.done\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.done\"), onClick: updateData, visible: appState.multiElement != null, size: (data === null || data === void 0 ? void 0 : data.size) || \"medium\" }, void 0)),\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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bUJBQW1CLEVBQUUsSUFBSSxHQUMxQjtZQUNELGVBQWUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxVQUFVO1NBQ3pELENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQzNCLENBQUMsMERBQWMsQ0FBQyxRQUFRLENBQUM7UUFDekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssOENBQVc7WUFDekIsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEtBQUssSUFBSTtnQkFDckMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLElBQUksUUFBUSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLDhDQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyw2Q0FBVSxDQUFDO2dCQUN0RCxRQUFRLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3RDLGNBQWMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDbEQsdURBQUMsOERBQVUsSUFDVCxJQUFJLEVBQUMsUUFBUSxFQUNiLElBQUksRUFBRSxtREFBSSxFQUNWLEtBQUssRUFBRSx3Q0FBQyxDQUFDLGNBQWMsQ0FBQyxnQkFDWix3Q0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUM3QixPQUFPLEVBQUUsVUFBVSxFQUNuQixPQUFPLEVBQUUsUUFBUSxDQUFDLFlBQVksSUFBSSxJQUFJLEVBQ3RDLElBQUksRUFBRSxLQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsSUFBSSxLQUFJLFFBQVEsV0FDNUIsQ0FDSDtDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9hY3Rpb25zL2FjdGlvbkZpbmFsaXplLnRzeD9mNDBiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtFWVMgfSBmcm9tIFwiLi4va2V5c1wiO1xuaW1wb3J0IHsgaXNJbnZpc2libHlTbWFsbEVsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgcmVzZXRDdXJzb3IgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFRvb2xCdXR0b24gfSBmcm9tIFwiLi4vY29tcG9uZW50cy9Ub29sQnV0dG9uXCI7XG5pbXBvcnQgeyBkb25lIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvaWNvbnNcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tIFwiLi9yZWdpc3RlclwiO1xuaW1wb3J0IHsgbXV0YXRlRWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L211dGF0ZUVsZW1lbnRcIjtcbmltcG9ydCB7IGlzUGF0aEFMb29wIH0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCB7IExpbmVhckVsZW1lbnRFZGl0b3IgfSBmcm9tIFwiLi4vZWxlbWVudC9saW5lYXJFbGVtZW50RWRpdG9yXCI7XG5pbXBvcnQgU2NlbmUgZnJvbSBcIi4uL3NjZW5lL1NjZW5lXCI7XG5pbXBvcnQge1xuICBtYXliZUJpbmRMaW5lYXJFbGVtZW50LFxuICBiaW5kT3JVbmJpbmRMaW5lYXJFbGVtZW50LFxufSBmcm9tIFwiLi4vZWxlbWVudC9iaW5kaW5nXCI7XG5pbXBvcnQgeyBpc0JpbmRpbmdFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZUNoZWNrc1wiO1xuaW1wb3J0IHsgaXNFcmFzZXJBY3RpdmUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcblxuZXhwb3J0IGNvbnN0IGFjdGlvbkZpbmFsaXplID0gcmVnaXN0ZXIoe1xuICBuYW1lOiBcImZpbmFsaXplXCIsXG4gIHRyYWNrRXZlbnQ6IGZhbHNlLFxuICBwZXJmb3JtOiAoZWxlbWVudHMsIGFwcFN0YXRlLCBfLCB7IGNhbnZhcywgZm9jdXNDb250YWluZXIgfSkgPT4ge1xuICAgIGlmIChhcHBTdGF0ZS5lZGl0aW5nTGluZWFyRWxlbWVudCkge1xuICAgICAgY29uc3QgeyBlbGVtZW50SWQsIHN0YXJ0QmluZGluZ0VsZW1lbnQsIGVuZEJpbmRpbmdFbGVtZW50IH0gPVxuICAgICAgICBhcHBTdGF0ZS5lZGl0aW5nTGluZWFyRWxlbWVudDtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBMaW5lYXJFbGVtZW50RWRpdG9yLmdldEVsZW1lbnQoZWxlbWVudElkKTtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGlzQmluZGluZ0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgICAgICBiaW5kT3JVbmJpbmRMaW5lYXJFbGVtZW50KFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIHN0YXJ0QmluZGluZ0VsZW1lbnQsXG4gICAgICAgICAgICBlbmRCaW5kaW5nRWxlbWVudCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZWxlbWVudHM6XG4gICAgICAgICAgICBlbGVtZW50LnBvaW50cy5sZW5ndGggPCAyIHx8IGlzSW52aXNpYmx5U21hbGxFbGVtZW50KGVsZW1lbnQpXG4gICAgICAgICAgICAgID8gZWxlbWVudHMuZmlsdGVyKChlbCkgPT4gZWwuaWQgIT09IGVsZW1lbnQuaWQpXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGFwcFN0YXRlOiB7XG4gICAgICAgICAgICAuLi5hcHBTdGF0ZSxcbiAgICAgICAgICAgIGVkaXRpbmdMaW5lYXJFbGVtZW50OiBudWxsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tbWl0VG9IaXN0b3J5OiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBuZXdFbGVtZW50cyA9IGVsZW1lbnRzO1xuXG4gICAgaWYgKGFwcFN0YXRlLnBlbmRpbmdJbWFnZUVsZW1lbnQpIHtcbiAgICAgIG11dGF0ZUVsZW1lbnQoYXBwU3RhdGUucGVuZGluZ0ltYWdlRWxlbWVudCwgeyBpc0RlbGV0ZWQ6IHRydWUgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmICh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICBmb2N1c0NvbnRhaW5lcigpO1xuICAgIH1cblxuICAgIGNvbnN0IG11bHRpUG9pbnRFbGVtZW50ID0gYXBwU3RhdGUubXVsdGlFbGVtZW50XG4gICAgICA/IGFwcFN0YXRlLm11bHRpRWxlbWVudFxuICAgICAgOiBhcHBTdGF0ZS5lZGl0aW5nRWxlbWVudD8udHlwZSA9PT0gXCJmcmVlZHJhd1wiXG4gICAgICA/IGFwcFN0YXRlLmVkaXRpbmdFbGVtZW50XG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAobXVsdGlQb2ludEVsZW1lbnQpIHtcbiAgICAgIC8vIHBlbiBhbmQgbW91c2UgaGF2ZSBob3ZlclxuICAgICAgaWYgKFxuICAgICAgICBtdWx0aVBvaW50RWxlbWVudC50eXBlICE9PSBcImZyZWVkcmF3XCIgJiZcbiAgICAgICAgYXBwU3RhdGUubGFzdFBvaW50ZXJEb3duV2l0aCAhPT0gXCJ0b3VjaFwiXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgeyBwb2ludHMsIGxhc3RDb21taXR0ZWRQb2ludCB9ID0gbXVsdGlQb2ludEVsZW1lbnQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbGFzdENvbW1pdHRlZFBvaW50IHx8XG4gICAgICAgICAgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSAhPT0gbGFzdENvbW1pdHRlZFBvaW50XG4gICAgICAgICkge1xuICAgICAgICAgIG11dGF0ZUVsZW1lbnQobXVsdGlQb2ludEVsZW1lbnQsIHtcbiAgICAgICAgICAgIHBvaW50czogbXVsdGlQb2ludEVsZW1lbnQucG9pbnRzLnNsaWNlKDAsIC0xKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzSW52aXNpYmx5U21hbGxFbGVtZW50KG11bHRpUG9pbnRFbGVtZW50KSkge1xuICAgICAgICBuZXdFbGVtZW50cyA9IG5ld0VsZW1lbnRzLnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIG11bHRpIHBvaW50IGxpbmUgY2xvc2VzIHRoZSBsb29wLFxuICAgICAgLy8gc2V0IHRoZSBsYXN0IHBvaW50IHRvIGZpcnN0IHBvaW50LlxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgbG9vcCByZW1haW5zIGNsb3NlZCBhdCBkaWZmZXJlbnQgc2NhbGVzLlxuICAgICAgY29uc3QgaXNMb29wID0gaXNQYXRoQUxvb3AobXVsdGlQb2ludEVsZW1lbnQucG9pbnRzLCBhcHBTdGF0ZS56b29tLnZhbHVlKTtcbiAgICAgIGlmIChcbiAgICAgICAgbXVsdGlQb2ludEVsZW1lbnQudHlwZSA9PT0gXCJsaW5lXCIgfHxcbiAgICAgICAgbXVsdGlQb2ludEVsZW1lbnQudHlwZSA9PT0gXCJmcmVlZHJhd1wiXG4gICAgICApIHtcbiAgICAgICAgaWYgKGlzTG9vcCkge1xuICAgICAgICAgIGNvbnN0IGxpbmVQb2ludHMgPSBtdWx0aVBvaW50RWxlbWVudC5wb2ludHM7XG4gICAgICAgICAgY29uc3QgZmlyc3RQb2ludCA9IGxpbmVQb2ludHNbMF07XG4gICAgICAgICAgbXV0YXRlRWxlbWVudChtdWx0aVBvaW50RWxlbWVudCwge1xuICAgICAgICAgICAgcG9pbnRzOiBsaW5lUG9pbnRzLm1hcCgocG9pbnQsIGluZGV4KSA9PlxuICAgICAgICAgICAgICBpbmRleCA9PT0gbGluZVBvaW50cy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgPyAoW2ZpcnN0UG9pbnRbMF0sIGZpcnN0UG9pbnRbMV1dIGFzIGNvbnN0KVxuICAgICAgICAgICAgICAgIDogcG9pbnQsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgaXNCaW5kaW5nRWxlbWVudChtdWx0aVBvaW50RWxlbWVudCkgJiZcbiAgICAgICAgIWlzTG9vcCAmJlxuICAgICAgICBtdWx0aVBvaW50RWxlbWVudC5wb2ludHMubGVuZ3RoID4gMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IFt4LCB5XSA9IExpbmVhckVsZW1lbnRFZGl0b3IuZ2V0UG9pbnRBdEluZGV4R2xvYmFsQ29vcmRpbmF0ZXMoXG4gICAgICAgICAgbXVsdGlQb2ludEVsZW1lbnQsXG4gICAgICAgICAgLTEsXG4gICAgICAgICk7XG4gICAgICAgIG1heWJlQmluZExpbmVhckVsZW1lbnQoXG4gICAgICAgICAgbXVsdGlQb2ludEVsZW1lbnQsXG4gICAgICAgICAgYXBwU3RhdGUsXG4gICAgICAgICAgU2NlbmUuZ2V0U2NlbmUobXVsdGlQb2ludEVsZW1lbnQpISxcbiAgICAgICAgICB7IHgsIHkgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAhYXBwU3RhdGUuYWN0aXZlVG9vbC5sb2NrZWQgJiZcbiAgICAgICAgYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlICE9PSBcImZyZWVkcmF3XCJcbiAgICAgICkge1xuICAgICAgICBhcHBTdGF0ZS5zZWxlY3RlZEVsZW1lbnRJZHNbbXVsdGlQb2ludEVsZW1lbnQuaWRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAoIWFwcFN0YXRlLmFjdGl2ZVRvb2wubG9ja2VkICYmXG4gICAgICAgIGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSAhPT0gXCJmcmVlZHJhd1wiKSB8fFxuICAgICAgIW11bHRpUG9pbnRFbGVtZW50XG4gICAgKSB7XG4gICAgICByZXNldEN1cnNvcihjYW52YXMpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbGVtZW50czogbmV3RWxlbWVudHMsXG4gICAgICBhcHBTdGF0ZToge1xuICAgICAgICAuLi5hcHBTdGF0ZSxcbiAgICAgICAgYWN0aXZlVG9vbDpcbiAgICAgICAgICAoYXBwU3RhdGUuYWN0aXZlVG9vbC5sb2NrZWQgfHxcbiAgICAgICAgICAgIGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJmcmVlZHJhd1wiKSAmJlxuICAgICAgICAgIG11bHRpUG9pbnRFbGVtZW50XG4gICAgICAgICAgICA/IGFwcFN0YXRlLmFjdGl2ZVRvb2xcbiAgICAgICAgICAgIDogeyAuLi5hcHBTdGF0ZS5hY3RpdmVUb29sLCB0eXBlOiBcInNlbGVjdGlvblwiIH0sXG4gICAgICAgIGRyYWdnaW5nRWxlbWVudDogbnVsbCxcbiAgICAgICAgbXVsdGlFbGVtZW50OiBudWxsLFxuICAgICAgICBlZGl0aW5nRWxlbWVudDogbnVsbCxcbiAgICAgICAgc3RhcnRCb3VuZEVsZW1lbnQ6IG51bGwsXG4gICAgICAgIHN1Z2dlc3RlZEJpbmRpbmdzOiBbXSxcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50SWRzOlxuICAgICAgICAgIG11bHRpUG9pbnRFbGVtZW50ICYmXG4gICAgICAgICAgIWFwcFN0YXRlLmFjdGl2ZVRvb2wubG9ja2VkICYmXG4gICAgICAgICAgYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlICE9PSBcImZyZWVkcmF3XCJcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLmFwcFN0YXRlLnNlbGVjdGVkRWxlbWVudElkcyxcbiAgICAgICAgICAgICAgICBbbXVsdGlQb2ludEVsZW1lbnQuaWRdOiB0cnVlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IGFwcFN0YXRlLnNlbGVjdGVkRWxlbWVudElkcyxcbiAgICAgICAgcGVuZGluZ0ltYWdlRWxlbWVudDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBjb21taXRUb0hpc3Rvcnk6IGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJmcmVlZHJhd1wiLFxuICAgIH07XG4gIH0sXG4gIGtleVRlc3Q6IChldmVudCwgYXBwU3RhdGUpID0+XG4gICAgIWlzRXJhc2VyQWN0aXZlKGFwcFN0YXRlKSAmJlxuICAgICgoZXZlbnQua2V5ID09PSBLRVlTLkVTQ0FQRSAmJlxuICAgICAgKGFwcFN0YXRlLmVkaXRpbmdMaW5lYXJFbGVtZW50ICE9PSBudWxsIHx8XG4gICAgICAgICghYXBwU3RhdGUuZHJhZ2dpbmdFbGVtZW50ICYmIGFwcFN0YXRlLm11bHRpRWxlbWVudCA9PT0gbnVsbCkpKSB8fFxuICAgICAgKChldmVudC5rZXkgPT09IEtFWVMuRVNDQVBFIHx8IGV2ZW50LmtleSA9PT0gS0VZUy5FTlRFUikgJiZcbiAgICAgICAgYXBwU3RhdGUubXVsdGlFbGVtZW50ICE9PSBudWxsKSksXG4gIFBhbmVsQ29tcG9uZW50OiAoeyBhcHBTdGF0ZSwgdXBkYXRlRGF0YSwgZGF0YSB9KSA9PiAoXG4gICAgPFRvb2xCdXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgaWNvbj17ZG9uZX1cbiAgICAgIHRpdGxlPXt0KFwiYnV0dG9ucy5kb25lXCIpfVxuICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMuZG9uZVwiKX1cbiAgICAgIG9uQ2xpY2s9e3VwZGF0ZURhdGF9XG4gICAgICB2aXNpYmxlPXthcHBTdGF0ZS5tdWx0aUVsZW1lbnQgIT0gbnVsbH1cbiAgICAgIHNpemU9e2RhdGE/LnNpemUgfHwgXCJtZWRpdW1cIn1cbiAgICAvPlxuICApLFxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../actions/actionFinalize.tsx\n");
|
|
1319
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"actionFinalize\": () => (/* binding */ actionFinalize)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _components_ToolButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _components_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _register__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./register */ \"../../actions/register.ts\");\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../element/mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../math */ \"../../math.ts\");\n/* harmony import */ var _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../element/linearElementEditor */ \"../../element/linearElementEditor.ts\");\n/* harmony import */ var _scene_Scene__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../scene/Scene */ \"../../scene/Scene.ts\");\n/* harmony import */ var _element_binding__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../element/binding */ \"../../element/binding.ts\");\n/* harmony import */ var _element_typeChecks__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../element/typeChecks */ \"../../element/typeChecks.ts\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst actionFinalize = (0,_register__WEBPACK_IMPORTED_MODULE_7__.register)({\r\n name: \"finalize\",\r\n trackEvent: false,\r\n perform: (elements, appState, _, { canvas, focusContainer }) => {\r\n var _a;\r\n if (appState.editingLinearElement) {\r\n const { elementId, startBindingElement, endBindingElement } = appState.editingLinearElement;\r\n const element = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_10__.LinearElementEditor.getElement(elementId);\r\n if (element) {\r\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_13__.isBindingElement)(element)) {\r\n (0,_element_binding__WEBPACK_IMPORTED_MODULE_12__.bindOrUnbindLinearElement)(element, startBindingElement, endBindingElement);\r\n }\r\n return {\r\n elements: element.points.length < 2 || (0,_element__WEBPACK_IMPORTED_MODULE_2__.isInvisiblySmallElement)(element)\r\n ? elements.filter((el) => el.id !== element.id)\r\n : undefined,\r\n appState: Object.assign(Object.assign({}, appState), { editingLinearElement: null }),\r\n commitToHistory: true,\r\n };\r\n }\r\n }\r\n let newElements = elements;\r\n if (appState.pendingImageElement) {\r\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_8__.mutateElement)(appState.pendingImageElement, { isDeleted: true }, false);\r\n }\r\n if (window.document.activeElement instanceof HTMLElement) {\r\n focusContainer();\r\n }\r\n const multiPointElement = appState.multiElement\r\n ? appState.multiElement\r\n : ((_a = appState.editingElement) === null || _a === void 0 ? void 0 : _a.type) === \"freedraw\"\r\n ? appState.editingElement\r\n : null;\r\n if (multiPointElement) {\r\n // pen and mouse have hover\r\n if (multiPointElement.type !== \"freedraw\" &&\r\n appState.lastPointerDownWith !== \"touch\") {\r\n const { points, lastCommittedPoint } = multiPointElement;\r\n if (!lastCommittedPoint ||\r\n points[points.length - 1] !== lastCommittedPoint) {\r\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_8__.mutateElement)(multiPointElement, {\r\n points: multiPointElement.points.slice(0, -1),\r\n });\r\n }\r\n }\r\n if ((0,_element__WEBPACK_IMPORTED_MODULE_2__.isInvisiblySmallElement)(multiPointElement)) {\r\n newElements = newElements.slice(0, -1);\r\n }\r\n // If the multi point line closes the loop,\r\n // set the last point to first point.\r\n // This ensures that loop remains closed at different scales.\r\n const isLoop = (0,_math__WEBPACK_IMPORTED_MODULE_9__.isPathALoop)(multiPointElement.points, appState.zoom.value);\r\n if (multiPointElement.type === \"line\" ||\r\n multiPointElement.type === \"freedraw\") {\r\n if (isLoop) {\r\n const linePoints = multiPointElement.points;\r\n const firstPoint = linePoints[0];\r\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_8__.mutateElement)(multiPointElement, {\r\n points: linePoints.map((point, index) => index === linePoints.length - 1\r\n ? [firstPoint[0], firstPoint[1]]\r\n : point),\r\n });\r\n }\r\n }\r\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_13__.isBindingElement)(multiPointElement) &&\r\n !isLoop &&\r\n multiPointElement.points.length > 1) {\r\n const [x, y] = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_10__.LinearElementEditor.getPointAtIndexGlobalCoordinates(multiPointElement, -1);\r\n (0,_element_binding__WEBPACK_IMPORTED_MODULE_12__.maybeBindLinearElement)(multiPointElement, appState, _scene_Scene__WEBPACK_IMPORTED_MODULE_11__[\"default\"].getScene(multiPointElement), { x, y });\r\n }\r\n if (!appState.activeTool.locked &&\r\n appState.activeTool.type !== \"freedraw\") {\r\n appState.selectedElementIds[multiPointElement.id] = true;\r\n }\r\n }\r\n if ((!appState.activeTool.locked &&\r\n appState.activeTool.type !== \"freedraw\") ||\r\n !multiPointElement) {\r\n (0,_utils__WEBPACK_IMPORTED_MODULE_3__.resetCursor)(canvas);\r\n }\r\n return {\r\n elements: newElements,\r\n appState: Object.assign(Object.assign({}, appState), { activeTool: (appState.activeTool.locked ||\r\n appState.activeTool.type === \"freedraw\") &&\r\n multiPointElement\r\n ? appState.activeTool\r\n : Object.assign(Object.assign({}, appState.activeTool), { type: appState.activeTool.type === \"eraser\" &&\r\n appState.activeTool.lastActiveToolBeforeEraser\r\n ? appState.activeTool.lastActiveToolBeforeEraser\r\n : \"selection\" }), draggingElement: null, multiElement: null, editingElement: null, startBoundElement: null, suggestedBindings: [], selectedElementIds: multiPointElement &&\r\n !appState.activeTool.locked &&\r\n appState.activeTool.type !== \"freedraw\"\r\n ? Object.assign(Object.assign({}, appState.selectedElementIds), { [multiPointElement.id]: true }) : appState.selectedElementIds, pendingImageElement: null }),\r\n commitToHistory: appState.activeTool.type === \"freedraw\",\r\n };\r\n },\r\n keyTest: (event, appState) => (event.key === _keys__WEBPACK_IMPORTED_MODULE_1__.KEYS.ESCAPE &&\r\n (appState.editingLinearElement !== null ||\r\n (!appState.draggingElement && appState.multiElement === null))) ||\r\n ((event.key === _keys__WEBPACK_IMPORTED_MODULE_1__.KEYS.ESCAPE || event.key === _keys__WEBPACK_IMPORTED_MODULE_1__.KEYS.ENTER) &&\r\n appState.multiElement !== null),\r\n PanelComponent: ({ appState, updateData, data }) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_4__.ToolButton, { type: \"button\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_5__.done, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.done\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.done\"), onClick: updateData, visible: appState.multiElement != null, size: (data === null || data === void 0 ? void 0 : data.size) || \"medium\" }, void 0)),\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Li9hY3Rpb25zL2FjdGlvbkZpbmFsaXplLnRzeD9mNDBiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtFWVMgfSBmcm9tIFwiLi4va2V5c1wiO1xuaW1wb3J0IHsgaXNJbnZpc2libHlTbWFsbEVsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgcmVzZXRDdXJzb3IgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFRvb2xCdXR0b24gfSBmcm9tIFwiLi4vY29tcG9uZW50cy9Ub29sQnV0dG9uXCI7XG5pbXBvcnQgeyBkb25lIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvaWNvbnNcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tIFwiLi9yZWdpc3RlclwiO1xuaW1wb3J0IHsgbXV0YXRlRWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L211dGF0ZUVsZW1lbnRcIjtcbmltcG9ydCB7IGlzUGF0aEFMb29wIH0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCB7IExpbmVhckVsZW1lbnRFZGl0b3IgfSBmcm9tIFwiLi4vZWxlbWVudC9saW5lYXJFbGVtZW50RWRpdG9yXCI7XG5pbXBvcnQgU2NlbmUgZnJvbSBcIi4uL3NjZW5lL1NjZW5lXCI7XG5pbXBvcnQge1xuICBtYXliZUJpbmRMaW5lYXJFbGVtZW50LFxuICBiaW5kT3JVbmJpbmRMaW5lYXJFbGVtZW50LFxufSBmcm9tIFwiLi4vZWxlbWVudC9iaW5kaW5nXCI7XG5pbXBvcnQgeyBpc0JpbmRpbmdFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZUNoZWNrc1wiO1xuXG5leHBvcnQgY29uc3QgYWN0aW9uRmluYWxpemUgPSByZWdpc3Rlcih7XG4gIG5hbWU6IFwiZmluYWxpemVcIixcbiAgdHJhY2tFdmVudDogZmFsc2UsXG4gIHBlcmZvcm06IChlbGVtZW50cywgYXBwU3RhdGUsIF8sIHsgY2FudmFzLCBmb2N1c0NvbnRhaW5lciB9KSA9PiB7XG4gICAgaWYgKGFwcFN0YXRlLmVkaXRpbmdMaW5lYXJFbGVtZW50KSB7XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZCwgc3RhcnRCaW5kaW5nRWxlbWVudCwgZW5kQmluZGluZ0VsZW1lbnQgfSA9XG4gICAgICAgIGFwcFN0YXRlLmVkaXRpbmdMaW5lYXJFbGVtZW50O1xuICAgICAgY29uc3QgZWxlbWVudCA9IExpbmVhckVsZW1lbnRFZGl0b3IuZ2V0RWxlbWVudChlbGVtZW50SWQpO1xuXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBpZiAoaXNCaW5kaW5nRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgIGJpbmRPclVuYmluZExpbmVhckVsZW1lbnQoXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgc3RhcnRCaW5kaW5nRWxlbWVudCxcbiAgICAgICAgICAgIGVuZEJpbmRpbmdFbGVtZW50LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50czpcbiAgICAgICAgICAgIGVsZW1lbnQucG9pbnRzLmxlbmd0aCA8IDIgfHwgaXNJbnZpc2libHlTbWFsbEVsZW1lbnQoZWxlbWVudClcbiAgICAgICAgICAgICAgPyBlbGVtZW50cy5maWx0ZXIoKGVsKSA9PiBlbC5pZCAhPT0gZWxlbWVudC5pZClcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgYXBwU3RhdGU6IHtcbiAgICAgICAgICAgIC4uLmFwcFN0YXRlLFxuICAgICAgICAgICAgZWRpdGluZ0xpbmVhckVsZW1lbnQ6IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21taXRUb0hpc3Rvcnk6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5ld0VsZW1lbnRzID0gZWxlbWVudHM7XG5cbiAgICBpZiAoYXBwU3RhdGUucGVuZGluZ0ltYWdlRWxlbWVudCkge1xuICAgICAgbXV0YXRlRWxlbWVudChhcHBTdGF0ZS5wZW5kaW5nSW1hZ2VFbGVtZW50LCB7IGlzRGVsZXRlZDogdHJ1ZSB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIGZvY3VzQ29udGFpbmVyKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbXVsdGlQb2ludEVsZW1lbnQgPSBhcHBTdGF0ZS5tdWx0aUVsZW1lbnRcbiAgICAgID8gYXBwU3RhdGUubXVsdGlFbGVtZW50XG4gICAgICA6IGFwcFN0YXRlLmVkaXRpbmdFbGVtZW50Py50eXBlID09PSBcImZyZWVkcmF3XCJcbiAgICAgID8gYXBwU3RhdGUuZWRpdGluZ0VsZW1lbnRcbiAgICAgIDogbnVsbDtcblxuICAgIGlmIChtdWx0aVBvaW50RWxlbWVudCkge1xuICAgICAgLy8gcGVuIGFuZCBtb3VzZSBoYXZlIGhvdmVyXG4gICAgICBpZiAoXG4gICAgICAgIG11bHRpUG9pbnRFbGVtZW50LnR5cGUgIT09IFwiZnJlZWRyYXdcIiAmJlxuICAgICAgICBhcHBTdGF0ZS5sYXN0UG9pbnRlckRvd25XaXRoICE9PSBcInRvdWNoXCJcbiAgICAgICkge1xuICAgICAgICBjb25zdCB7IHBvaW50cywgbGFzdENvbW1pdHRlZFBvaW50IH0gPSBtdWx0aVBvaW50RWxlbWVudDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFsYXN0Q29tbWl0dGVkUG9pbnQgfHxcbiAgICAgICAgICBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdICE9PSBsYXN0Q29tbWl0dGVkUG9pbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgbXV0YXRlRWxlbWVudChtdWx0aVBvaW50RWxlbWVudCwge1xuICAgICAgICAgICAgcG9pbnRzOiBtdWx0aVBvaW50RWxlbWVudC5wb2ludHMuc2xpY2UoMCwgLTEpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNJbnZpc2libHlTbWFsbEVsZW1lbnQobXVsdGlQb2ludEVsZW1lbnQpKSB7XG4gICAgICAgIG5ld0VsZW1lbnRzID0gbmV3RWxlbWVudHMuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgbXVsdGkgcG9pbnQgbGluZSBjbG9zZXMgdGhlIGxvb3AsXG4gICAgICAvLyBzZXQgdGhlIGxhc3QgcG9pbnQgdG8gZmlyc3QgcG9pbnQuXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBsb29wIHJlbWFpbnMgY2xvc2VkIGF0IGRpZmZlcmVudCBzY2FsZXMuXG4gICAgICBjb25zdCBpc0xvb3AgPSBpc1BhdGhBTG9vcChtdWx0aVBvaW50RWxlbWVudC5wb2ludHMsIGFwcFN0YXRlLnpvb20udmFsdWUpO1xuICAgICAgaWYgKFxuICAgICAgICBtdWx0aVBvaW50RWxlbWVudC50eXBlID09PSBcImxpbmVcIiB8fFxuICAgICAgICBtdWx0aVBvaW50RWxlbWVudC50eXBlID09PSBcImZyZWVkcmF3XCJcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNMb29wKSB7XG4gICAgICAgICAgY29uc3QgbGluZVBvaW50cyA9IG11bHRpUG9pbnRFbGVtZW50LnBvaW50cztcbiAgICAgICAgICBjb25zdCBmaXJzdFBvaW50ID0gbGluZVBvaW50c1swXTtcbiAgICAgICAgICBtdXRhdGVFbGVtZW50KG11bHRpUG9pbnRFbGVtZW50LCB7XG4gICAgICAgICAgICBwb2ludHM6IGxpbmVQb2ludHMubWFwKChwb2ludCwgaW5kZXgpID0+XG4gICAgICAgICAgICAgIGluZGV4ID09PSBsaW5lUG9pbnRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICA/IChbZmlyc3RQb2ludFswXSwgZmlyc3RQb2ludFsxXV0gYXMgY29uc3QpXG4gICAgICAgICAgICAgICAgOiBwb2ludCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBpc0JpbmRpbmdFbGVtZW50KG11bHRpUG9pbnRFbGVtZW50KSAmJlxuICAgICAgICAhaXNMb29wICYmXG4gICAgICAgIG11bHRpUG9pbnRFbGVtZW50LnBvaW50cy5sZW5ndGggPiAxXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgW3gsIHldID0gTGluZWFyRWxlbWVudEVkaXRvci5nZXRQb2ludEF0SW5kZXhHbG9iYWxDb29yZGluYXRlcyhcbiAgICAgICAgICBtdWx0aVBvaW50RWxlbWVudCxcbiAgICAgICAgICAtMSxcbiAgICAgICAgKTtcbiAgICAgICAgbWF5YmVCaW5kTGluZWFyRWxlbWVudChcbiAgICAgICAgICBtdWx0aVBvaW50RWxlbWVudCxcbiAgICAgICAgICBhcHBTdGF0ZSxcbiAgICAgICAgICBTY2VuZS5nZXRTY2VuZShtdWx0aVBvaW50RWxlbWVudCkhLFxuICAgICAgICAgIHsgeCwgeSB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgICFhcHBTdGF0ZS5hY3RpdmVUb29sLmxvY2tlZCAmJlxuICAgICAgICBhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgIT09IFwiZnJlZWRyYXdcIlxuICAgICAgKSB7XG4gICAgICAgIGFwcFN0YXRlLnNlbGVjdGVkRWxlbWVudElkc1ttdWx0aVBvaW50RWxlbWVudC5pZF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgICghYXBwU3RhdGUuYWN0aXZlVG9vbC5sb2NrZWQgJiZcbiAgICAgICAgYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlICE9PSBcImZyZWVkcmF3XCIpIHx8XG4gICAgICAhbXVsdGlQb2ludEVsZW1lbnRcbiAgICApIHtcbiAgICAgIHJlc2V0Q3Vyc29yKGNhbnZhcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZW1lbnRzOiBuZXdFbGVtZW50cyxcbiAgICAgIGFwcFN0YXRlOiB7XG4gICAgICAgIC4uLmFwcFN0YXRlLFxuICAgICAgICBhY3RpdmVUb29sOlxuICAgICAgICAgIChhcHBTdGF0ZS5hY3RpdmVUb29sLmxvY2tlZCB8fFxuICAgICAgICAgICAgYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlID09PSBcImZyZWVkcmF3XCIpICYmXG4gICAgICAgICAgbXVsdGlQb2ludEVsZW1lbnRcbiAgICAgICAgICAgID8gYXBwU3RhdGUuYWN0aXZlVG9vbFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uYXBwU3RhdGUuYWN0aXZlVG9vbCxcbiAgICAgICAgICAgICAgICB0eXBlOlxuICAgICAgICAgICAgICAgICAgYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlID09PSBcImVyYXNlclwiICYmXG4gICAgICAgICAgICAgICAgICBhcHBTdGF0ZS5hY3RpdmVUb29sLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyXG4gICAgICAgICAgICAgICAgICAgID8gYXBwU3RhdGUuYWN0aXZlVG9vbC5sYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlclxuICAgICAgICAgICAgICAgICAgICA6IFwic2VsZWN0aW9uXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgIGRyYWdnaW5nRWxlbWVudDogbnVsbCxcbiAgICAgICAgbXVsdGlFbGVtZW50OiBudWxsLFxuICAgICAgICBlZGl0aW5nRWxlbWVudDogbnVsbCxcbiAgICAgICAgc3RhcnRCb3VuZEVsZW1lbnQ6IG51bGwsXG4gICAgICAgIHN1Z2dlc3RlZEJpbmRpbmdzOiBbXSxcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50SWRzOlxuICAgICAgICAgIG11bHRpUG9pbnRFbGVtZW50ICYmXG4gICAgICAgICAgIWFwcFN0YXRlLmFjdGl2ZVRvb2wubG9ja2VkICYmXG4gICAgICAgICAgYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlICE9PSBcImZyZWVkcmF3XCJcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLmFwcFN0YXRlLnNlbGVjdGVkRWxlbWVudElkcyxcbiAgICAgICAgICAgICAgICBbbXVsdGlQb2ludEVsZW1lbnQuaWRdOiB0cnVlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IGFwcFN0YXRlLnNlbGVjdGVkRWxlbWVudElkcyxcbiAgICAgICAgcGVuZGluZ0ltYWdlRWxlbWVudDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBjb21taXRUb0hpc3Rvcnk6IGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJmcmVlZHJhd1wiLFxuICAgIH07XG4gIH0sXG4gIGtleVRlc3Q6IChldmVudCwgYXBwU3RhdGUpID0+XG4gICAgKGV2ZW50LmtleSA9PT0gS0VZUy5FU0NBUEUgJiZcbiAgICAgIChhcHBTdGF0ZS5lZGl0aW5nTGluZWFyRWxlbWVudCAhPT0gbnVsbCB8fFxuICAgICAgICAoIWFwcFN0YXRlLmRyYWdnaW5nRWxlbWVudCAmJiBhcHBTdGF0ZS5tdWx0aUVsZW1lbnQgPT09IG51bGwpKSkgfHxcbiAgICAoKGV2ZW50LmtleSA9PT0gS0VZUy5FU0NBUEUgfHwgZXZlbnQua2V5ID09PSBLRVlTLkVOVEVSKSAmJlxuICAgICAgYXBwU3RhdGUubXVsdGlFbGVtZW50ICE9PSBudWxsKSxcbiAgUGFuZWxDb21wb25lbnQ6ICh7IGFwcFN0YXRlLCB1cGRhdGVEYXRhLCBkYXRhIH0pID0+IChcbiAgICA8VG9vbEJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBpY29uPXtkb25lfVxuICAgICAgdGl0bGU9e3QoXCJidXR0b25zLmRvbmVcIil9XG4gICAgICBhcmlhLWxhYmVsPXt0KFwiYnV0dG9ucy5kb25lXCIpfVxuICAgICAgb25DbGljaz17dXBkYXRlRGF0YX1cbiAgICAgIHZpc2libGU9e2FwcFN0YXRlLm11bHRpRWxlbWVudCAhPSBudWxsfVxuICAgICAgc2l6ZT17ZGF0YT8uc2l6ZSB8fCBcIm1lZGl1bVwifVxuICAgIC8+XG4gICksXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../actions/actionFinalize.tsx\n");
|
|
1320
1320
|
|
|
1321
1321
|
/***/ }),
|
|
1322
1322
|
|
|
@@ -2207,7 +2207,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2207
2207
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2208
2208
|
|
|
2209
2209
|
"use strict";
|
|
2210
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AllowedExcalidrawActiveTools\": () => (/* binding */ AllowedExcalidrawActiveTools),\n/* harmony export */ \"restoreElements\": () => (/* binding */ restoreElements),\n/* harmony export */ \"restoreAppState\": () => (/* binding */ restoreAppState),\n/* harmony export */ \"restore\": () => (/* binding */ restore),\n/* harmony export */ \"restoreLibraryItems\": () => (/* binding */ restoreLibraryItems)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _element_typeChecks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element/typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../random */ \"../../random.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../element/linearElementEditor */ \"../../element/linearElementEditor.ts\");\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../element/mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst AllowedExcalidrawActiveTools = {\r\n selection: true,\r\n text: true,\r\n rectangle: true,\r\n diamond: true,\r\n ellipse: true,\r\n line: true,\r\n image: true,\r\n arrow: true,\r\n freedraw: true,\r\n eraser: false,\r\n};\r\nconst getFontFamilyByName = (fontFamilyName) => {\r\n if (Object.keys(_constants__WEBPACK_IMPORTED_MODULE_3__.FONT_FAMILY).includes(fontFamilyName)) {\r\n return _constants__WEBPACK_IMPORTED_MODULE_3__.FONT_FAMILY[fontFamilyName];\r\n }\r\n return _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_FONT_FAMILY;\r\n};\r\nconst restoreElementWithProperties = (element, extra) => {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\r\n const base = {\r\n type: extra.type || element.type,\r\n // all elements must have version > 0 so getSceneVersion() will pick up\r\n // newly added elements\r\n version: element.version || 1,\r\n versionNonce: (_a = element.versionNonce) !== null && _a !== void 0 ? _a : 0,\r\n isDeleted: (_b = element.isDeleted) !== null && _b !== void 0 ? _b : false,\r\n id: element.id || (0,_random__WEBPACK_IMPORTED_MODULE_2__.randomId)(),\r\n fillStyle: element.fillStyle || \"hachure\",\r\n strokeWidth: element.strokeWidth || 1,\r\n strokeStyle: (_c = element.strokeStyle) !== null && _c !== void 0 ? _c : \"solid\",\r\n roughness: (_d = element.roughness) !== null && _d !== void 0 ? _d : 1,\r\n opacity: element.opacity == null ? 100 : element.opacity,\r\n angle: element.angle || 0,\r\n x: (_f = (_e = extra.x) !== null && _e !== void 0 ? _e : element.x) !== null && _f !== void 0 ? _f : 0,\r\n y: (_h = (_g = extra.y) !== null && _g !== void 0 ? _g : element.y) !== null && _h !== void 0 ? _h : 0,\r\n strokeColor: element.strokeColor,\r\n backgroundColor: element.backgroundColor,\r\n width: element.width || 0,\r\n height: element.height || 0,\r\n seed: (_j = element.seed) !== null && _j !== void 0 ? _j : 1,\r\n groupIds: (_k = element.groupIds) !== null && _k !== void 0 ? _k : [],\r\n strokeSharpness: (_l = element.strokeSharpness) !== null && _l !== void 0 ? _l : ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_1__.isLinearElementType)(element.type) ? \"round\" : \"sharp\"),\r\n boundElements: element.boundElementIds\r\n ? element.boundElementIds.map((id) => ({ type: \"arrow\", id }))\r\n : (_m = element.boundElements) !== null && _m !== void 0 ? _m : [],\r\n updated: (_o = element.updated) !== null && _o !== void 0 ? _o : (0,_utils__WEBPACK_IMPORTED_MODULE_7__.getUpdatedTimestamp)(),\r\n link: (_p = element.link) !== null && _p !== void 0 ? _p : null,\r\n };\r\n return Object.assign(Object.assign(Object.assign({}, base), (0,_element__WEBPACK_IMPORTED_MODULE_0__.getNormalizedDimensions)(base)), extra);\r\n};\r\nconst restoreElement = (element) => {\r\n var _a, _b;\r\n switch (element.type) {\r\n case \"text\":\r\n let fontSize = element.fontSize;\r\n let fontFamily = element.fontFamily;\r\n if (\"font\" in element) {\r\n const [fontPx, _fontFamily] = element.font.split(\" \");\r\n fontSize = parseInt(fontPx, 10);\r\n fontFamily = getFontFamilyByName(_fontFamily);\r\n }\r\n return restoreElementWithProperties(element, {\r\n fontSize,\r\n fontFamily,\r\n text: (_a = element.text) !== null && _a !== void 0 ? _a : \"\",\r\n baseline: element.baseline,\r\n textAlign: element.textAlign || _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_TEXT_ALIGN,\r\n verticalAlign: element.verticalAlign || _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_VERTICAL_ALIGN,\r\n containerId: (_b = element.containerId) !== null && _b !== void 0 ? _b : null,\r\n originalText: element.originalText || element.text,\r\n });\r\n case \"freedraw\": {\r\n return restoreElementWithProperties(element, {\r\n points: element.points,\r\n lastCommittedPoint: null,\r\n simulatePressure: element.simulatePressure,\r\n pressures: element.pressures,\r\n });\r\n }\r\n case \"image\":\r\n return restoreElementWithProperties(element, {\r\n status: element.status || \"pending\",\r\n fileId: element.fileId,\r\n scale: element.scale || [1, 1],\r\n });\r\n case \"line\":\r\n // @ts-ignore LEGACY type\r\n // eslint-disable-next-line no-fallthrough\r\n case \"draw\":\r\n case \"arrow\": {\r\n const { startArrowhead = null, endArrowhead = element.type === \"arrow\" ? \"arrow\" : null, } = element;\r\n let x = element.x;\r\n let y = element.y;\r\n let points = // migrate old arrow model to new one\r\n !Array.isArray(element.points) || element.points.length < 2\r\n ? [\r\n [0, 0],\r\n [element.width, element.height],\r\n ]\r\n : element.points;\r\n if (points[0][0] !== 0 || points[0][1] !== 0) {\r\n ({ points, x, y } = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_5__.LinearElementEditor.getNormalizedPoints(element));\r\n }\r\n return restoreElementWithProperties(element, {\r\n type: element.type === \"draw\"\r\n ? \"line\"\r\n : element.type,\r\n startBinding: element.startBinding,\r\n endBinding: element.endBinding,\r\n lastCommittedPoint: null,\r\n startArrowhead,\r\n endArrowhead,\r\n points,\r\n x,\r\n y,\r\n });\r\n }\r\n // generic elements\r\n case \"ellipse\":\r\n return restoreElementWithProperties(element, {});\r\n case \"rectangle\":\r\n return restoreElementWithProperties(element, {});\r\n case \"diamond\":\r\n return restoreElementWithProperties(element, {});\r\n // Don't use default case so as to catch a missing an element type case.\r\n // We also don't want to throw, but instead return void so we filter\r\n // out these unsupported elements from the restored array.\r\n }\r\n};\r\nconst restoreElements = (elements, \r\n/** NOTE doesn't serve for reconciliation */\r\nlocalElements) => {\r\n const localElementsMap = localElements ? (0,_utils__WEBPACK_IMPORTED_MODULE_7__.arrayToMap)(localElements) : null;\r\n return (elements || []).reduce((elements, element) => {\r\n // filtering out selection, which is legacy, no longer kept in elements,\r\n // and causing issues if retained\r\n if (element.type !== \"selection\" && !(0,_element__WEBPACK_IMPORTED_MODULE_0__.isInvisiblySmallElement)(element)) {\r\n let migratedElement = restoreElement(element);\r\n if (migratedElement) {\r\n const localElement = localElementsMap === null || localElementsMap === void 0 ? void 0 : localElementsMap.get(element.id);\r\n if (localElement && localElement.version > migratedElement.version) {\r\n migratedElement = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_6__.bumpVersion)(migratedElement, localElement.version);\r\n }\r\n elements.push(migratedElement);\r\n }\r\n }\r\n return elements;\r\n }, []);\r\n};\r\nconst restoreAppState = (appState, localAppState) => {\r\n appState = appState || {};\r\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_4__.getDefaultAppState)();\r\n const nextAppState = {};\r\n for (const [key, defaultValue] of Object.entries(defaultAppState)) {\r\n const suppliedValue = appState[key];\r\n const localValue = localAppState ? localAppState[key] : undefined;\r\n nextAppState[key] =\r\n suppliedValue !== undefined\r\n ? suppliedValue\r\n : localValue !== undefined\r\n ? localValue\r\n : defaultValue;\r\n }\r\n return Object.assign(Object.assign({}, nextAppState), { activeTool: AllowedExcalidrawActiveTools[nextAppState.activeTool.type]\r\n ? nextAppState.activeTool\r\n : Object.assign(Object.assign({}, nextAppState.activeTool), { type: \"selection\" }), \r\n // Migrates from previous version where appState.zoom was a number\r\n zoom: typeof appState.zoom === \"number\"\r\n ? {\r\n value: appState.zoom,\r\n }\r\n : appState.zoom || defaultAppState.zoom });\r\n};\r\nconst restore = (data, \r\n/**\r\n * Local AppState (`this.state` or initial state from localStorage) so that we\r\n * don't overwrite local state with default values (when values not\r\n * explicitly specified).\r\n * Supply `null` if you can't get access to it.\r\n */\r\nlocalAppState, localElements) => {\r\n return {\r\n elements: restoreElements(data === null || data === void 0 ? void 0 : data.elements, localElements),\r\n appState: restoreAppState(data === null || data === void 0 ? void 0 : data.appState, localAppState || null),\r\n files: (data === null || data === void 0 ? void 0 : data.files) || {},\r\n };\r\n};\r\nconst restoreLibraryItems = (libraryItems, defaultStatus) => {\r\n const restoredItems = [];\r\n for (const item of libraryItems) {\r\n // migrate older libraries\r\n if (Array.isArray(item)) {\r\n restoredItems.push({\r\n status: defaultStatus,\r\n elements: item,\r\n id: (0,_random__WEBPACK_IMPORTED_MODULE_2__.randomId)(),\r\n created: Date.now(),\r\n });\r\n }\r\n else {\r\n const _item = item;\r\n restoredItems.push(Object.assign(Object.assign({}, _item), { id: _item.id || (0,_random__WEBPACK_IMPORTED_MODULE_2__.randomId)(), status: _item.status || defaultStatus, created: _item.created || Date.now() }));\r\n }\r\n }\r\n return restoredItems;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZGF0YS9yZXN0b3JlLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZOEU7QUFDbEI7QUFDdkI7QUFNZjtBQUMyQjtBQUNvQjtBQUNkO0FBQ1I7QUFDVDtBQU8vQixNQUFNLDRCQUE0QixHQUdyQztJQUNGLFNBQVMsRUFBRSxJQUFJO0lBQ2YsSUFBSSxFQUFFLElBQUk7SUFDVixTQUFTLEVBQUUsSUFBSTtJQUNmLE9BQU8sRUFBRSxJQUFJO0lBQ2IsT0FBTyxFQUFFLElBQUk7SUFDYixJQUFJLEVBQUUsSUFBSTtJQUNWLEtBQUssRUFBRSxJQUFJO0lBQ1gsS0FBSyxFQUFFLElBQUk7SUFDWCxRQUFRLEVBQUUsSUFBSTtJQUNkLE1BQU0sRUFBRSxLQUFLO0NBQ2QsQ0FBQztBQVFGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxjQUFzQixFQUFvQixFQUFFO0lBQ3ZFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxtREFBVyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQ3JELE9BQU8sbURBQVcsQ0FDaEIsY0FBMEMsQ0FDdkIsQ0FBQztLQUN2QjtJQUNELE9BQU8sMkRBQW1CLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSw0QkFBNEIsR0FBRyxDQUluQyxPQUdDLEVBQ0QsS0FNc0QsRUFDbkQsRUFBRTs7SUFDTCxNQUFNLElBQUksR0FBcUM7UUFDN0MsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUk7UUFDaEMsdUVBQXVFO1FBQ3ZFLHVCQUF1QjtRQUN2QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDO1FBQzdCLFlBQVksRUFBRSxhQUFPLENBQUMsWUFBWSxtQ0FBSSxDQUFDO1FBQ3ZDLFNBQVMsRUFBRSxhQUFPLENBQUMsU0FBUyxtQ0FBSSxLQUFLO1FBQ3JDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLGlEQUFRLEVBQUU7UUFDNUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUztRQUN6QyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDO1FBQ3JDLFdBQVcsRUFBRSxhQUFPLENBQUMsV0FBVyxtQ0FBSSxPQUFPO1FBQzNDLFNBQVMsRUFBRSxhQUFPLENBQUMsU0FBUyxtQ0FBSSxDQUFDO1FBQ2pDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTztRQUN4RCxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDO1FBQ3pCLENBQUMsRUFBRSxpQkFBSyxDQUFDLENBQUMsbUNBQUksT0FBTyxDQUFDLENBQUMsbUNBQUksQ0FBQztRQUM1QixDQUFDLEVBQUUsaUJBQUssQ0FBQyxDQUFDLG1DQUFJLE9BQU8sQ0FBQyxDQUFDLG1DQUFJLENBQUM7UUFDNUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTtRQUN4QyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDO1FBQ3pCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUM7UUFDM0IsSUFBSSxFQUFFLGFBQU8sQ0FBQyxJQUFJLG1DQUFJLENBQUM7UUFDdkIsUUFBUSxFQUFFLGFBQU8sQ0FBQyxRQUFRLG1DQUFJLEVBQUU7UUFDaEMsZUFBZSxFQUNiLGFBQU8sQ0FBQyxlQUFlLG1DQUN2QixDQUFDLHdFQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDekQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxlQUFlO1lBQ3BDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RCxDQUFDLENBQUMsYUFBTyxDQUFDLGFBQWEsbUNBQUksRUFBRTtRQUMvQixPQUFPLEVBQUUsYUFBTyxDQUFDLE9BQU8sbUNBQUksMkRBQW1CLEVBQUU7UUFDakQsSUFBSSxFQUFFLGFBQU8sQ0FBQyxJQUFJLG1DQUFJLElBQUk7S0FDM0IsQ0FBQztJQUVGLE9BQU8sOENBQ0YsSUFBSSxHQUNKLGlFQUF1QixDQUFDLElBQUksQ0FBQyxHQUM3QixLQUFLLENBQ08sQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxDQUNyQixPQUErRCxFQUN4QyxFQUFFOztJQUN6QixRQUFRLE9BQU8sQ0FBQyxJQUFJLEVBQUU7UUFDcEIsS0FBSyxNQUFNO1lBQ1QsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNoQyxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ3BDLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTtnQkFDckIsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsR0FDekIsT0FDRCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xCLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQyxVQUFVLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDL0M7WUFDRCxPQUFPLDRCQUE0QixDQUFDLE9BQU8sRUFBRTtnQkFDM0MsUUFBUTtnQkFDUixVQUFVO2dCQUNWLElBQUksRUFBRSxhQUFPLENBQUMsSUFBSSxtQ0FBSSxFQUFFO2dCQUN4QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7Z0JBQzFCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLDBEQUFrQjtnQkFDbEQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksOERBQXNCO2dCQUM5RCxXQUFXLEVBQUUsYUFBTyxDQUFDLFdBQVcsbUNBQUksSUFBSTtnQkFDeEMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLElBQUk7YUFDbkQsQ0FBQyxDQUFDO1FBQ0wsS0FBSyxVQUFVLENBQUMsQ0FBQztZQUNmLE9BQU8sNEJBQTRCLENBQUMsT0FBTyxFQUFFO2dCQUMzQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ3RCLGtCQUFrQixFQUFFLElBQUk7Z0JBQ3hCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7Z0JBQzFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUzthQUM3QixDQUFDLENBQUM7U0FDSjtRQUNELEtBQUssT0FBTztZQUNWLE9BQU8sNEJBQTRCLENBQUMsT0FBTyxFQUFFO2dCQUMzQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxTQUFTO2dCQUNuQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUMvQixDQUFDLENBQUM7UUFDTCxLQUFLLE1BQU0sQ0FBQztRQUNaLHlCQUF5QjtRQUN6QiwwQ0FBMEM7UUFDMUMsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQ1osTUFBTSxFQUNKLGNBQWMsR0FBRyxJQUFJLEVBQ3JCLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQ3pELEdBQUcsT0FBTyxDQUFDO1lBRVosSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLElBQUksTUFBTSxHQUFHLHFDQUFxQzthQUNoRCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3pELENBQUMsQ0FBQztvQkFDRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ04sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7aUJBQ2hDO2dCQUNILENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBRXJCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM1QyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxpR0FBdUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3ZFO1lBRUQsT0FBTyw0QkFBNEIsQ0FBQyxPQUFPLEVBQUU7Z0JBQzNDLElBQUksRUFDRCxPQUFPLENBQUMsSUFBMkMsS0FBSyxNQUFNO29CQUM3RCxDQUFDLENBQUMsTUFBTTtvQkFDUixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUk7Z0JBQ2xCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2dCQUM5QixrQkFBa0IsRUFBRSxJQUFJO2dCQUN4QixjQUFjO2dCQUNkLFlBQVk7Z0JBQ1osTUFBTTtnQkFDTixDQUFDO2dCQUNELENBQUM7YUFDRixDQUFDLENBQUM7U0FDSjtRQUNELG1CQUFtQjtRQUNuQixLQUFLLFNBQVM7WUFDWixPQUFPLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRCxLQUFLLFdBQVc7WUFDZCxPQUFPLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRCxLQUFLLFNBQVM7WUFDWixPQUFPLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVuRCx3RUFBd0U7UUFDeEUsb0VBQW9FO1FBQ3BFLDBEQUEwRDtLQUMzRDtBQUNILENBQUMsQ0FBQztBQUVLLE1BQU0sZUFBZSxHQUFHLENBQzdCLFFBQXVDO0FBQ3ZDLDRDQUE0QztBQUM1QyxhQUE4RCxFQUN6QyxFQUFFO0lBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxrREFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDbkQsd0VBQXdFO1FBQ3hFLGlDQUFpQztRQUNqQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsaUVBQXVCLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDckUsSUFBSSxlQUFlLEdBQTZCLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RSxJQUFJLGVBQWUsRUFBRTtnQkFDbkIsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLGFBQWhCLGdCQUFnQix1QkFBaEIsZ0JBQWdCLENBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFO29CQUNsRSxlQUFlLEdBQUcsbUVBQVcsQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN0RTtnQkFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ2hDO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLEVBQUUsRUFBeUIsQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQUVLLE1BQU0sZUFBZSxHQUFHLENBQzdCLFFBQXVDLEVBQ3ZDLGFBQW1ELEVBQ2pDLEVBQUU7SUFDcEIsUUFBUSxHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFDMUIsTUFBTSxlQUFlLEdBQUcsNkRBQWtCLEVBQUUsQ0FBQztJQUM3QyxNQUFNLFlBQVksR0FBRyxFQUE0QixDQUFDO0lBQ2xELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FHN0QsRUFBRTtRQUNILE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2pFLFlBQW9CLENBQUMsR0FBRyxDQUFDO1lBQ3hCLGFBQWEsS0FBSyxTQUFTO2dCQUN6QixDQUFDLENBQUMsYUFBYTtnQkFDZixDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVM7b0JBQzFCLENBQUMsQ0FBQyxVQUFVO29CQUNaLENBQUMsQ0FBQyxZQUFZLENBQUM7S0FDcEI7SUFDRCx1Q0FDSyxZQUFZLEtBQ2YsVUFBVSxFQUFFLDRCQUE0QixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVTtZQUN6QixDQUFDLGlDQUFNLFlBQVksQ0FBQyxVQUFVLEtBQUUsSUFBSSxFQUFFLFdBQVcsR0FBRTtRQUNyRCxrRUFBa0U7UUFDbEUsSUFBSSxFQUNGLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRO1lBQy9CLENBQUMsQ0FBQztnQkFDRSxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQTJCO2FBQzVDO1lBQ0gsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLElBQUksSUFDM0M7QUFDSixDQUFDLENBQUM7QUFFSyxNQUFNLE9BQU8sR0FBRyxDQUNyQixJQUE4QjtBQUM5Qjs7Ozs7R0FLRztBQUNILGFBQW1ELEVBQ25ELGFBQThELEVBQzNDLEVBQUU7SUFDckIsT0FBTztRQUNMLFFBQVEsRUFBRSxlQUFlLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsRUFBRSxhQUFhLENBQUM7UUFDeEQsUUFBUSxFQUFFLGVBQWUsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsUUFBUSxFQUFFLGFBQWEsSUFBSSxJQUFJLENBQUM7UUFDaEUsS0FBSyxFQUFFLEtBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxLQUFLLEtBQUksRUFBRTtLQUN6QixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUssTUFBTSxtQkFBbUIsR0FBRyxDQUNqQyxZQUE0RCxFQUM1RCxhQUFvQyxFQUNwQyxFQUFFO0lBQ0YsTUFBTSxhQUFhLEdBQWtCLEVBQUUsQ0FBQztJQUN4QyxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRTtRQUMvQiwwQkFBMEI7UUFDMUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLE1BQU0sRUFBRSxhQUFhO2dCQUNyQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxFQUFFLEVBQUUsaURBQVEsRUFBRTtnQkFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTthQUNwQixDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsTUFBTSxLQUFLLEdBQUcsSUFBa0QsQ0FBQztZQUNqRSxhQUFhLENBQUMsSUFBSSxpQ0FDYixLQUFLLEtBQ1IsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksaURBQVEsRUFBRSxFQUMxQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxhQUFhLEVBQ3JDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFDcEMsQ0FBQztTQUNKO0tBQ0Y7SUFDRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vZGF0YS9yZXN0b3JlLnRzPzg3MjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRXhjYWxpZHJhd0VsZW1lbnQsXG4gIEV4Y2FsaWRyYXdTZWxlY3Rpb25FbGVtZW50LFxuICBGb250RmFtaWx5VmFsdWVzLFxufSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHtcbiAgQXBwU3RhdGUsXG4gIEJpbmFyeUZpbGVzLFxuICBMaWJyYXJ5SXRlbSxcbiAgTm9ybWFsaXplZFpvb21WYWx1ZSxcbn0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBJbXBvcnRlZERhdGFTdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXROb3JtYWxpemVkRGltZW5zaW9ucywgaXNJbnZpc2libHlTbWFsbEVsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgaXNMaW5lYXJFbGVtZW50VHlwZSB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVDaGVja3NcIjtcbmltcG9ydCB7IHJhbmRvbUlkIH0gZnJvbSBcIi4uL3JhbmRvbVwiO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9GT05UX0ZBTUlMWSxcbiAgREVGQVVMVF9URVhUX0FMSUdOLFxuICBERUZBVUxUX1ZFUlRJQ0FMX0FMSUdOLFxuICBGT05UX0ZBTUlMWSxcbn0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEFwcFN0YXRlIH0gZnJvbSBcIi4uL2FwcFN0YXRlXCI7XG5pbXBvcnQgeyBMaW5lYXJFbGVtZW50RWRpdG9yIH0gZnJvbSBcIi4uL2VsZW1lbnQvbGluZWFyRWxlbWVudEVkaXRvclwiO1xuaW1wb3J0IHsgYnVtcFZlcnNpb24gfSBmcm9tIFwiLi4vZWxlbWVudC9tdXRhdGVFbGVtZW50XCI7XG5pbXBvcnQgeyBnZXRVcGRhdGVkVGltZXN0YW1wIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBhcnJheVRvTWFwIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbnR5cGUgUmVzdG9yZWRBcHBTdGF0ZSA9IE9taXQ8XG4gIEFwcFN0YXRlLFxuICBcIm9mZnNldFRvcFwiIHwgXCJvZmZzZXRMZWZ0XCIgfCBcIndpZHRoXCIgfCBcImhlaWdodFwiXG4+O1xuXG5leHBvcnQgY29uc3QgQWxsb3dlZEV4Y2FsaWRyYXdBY3RpdmVUb29sczogUmVjb3JkPFxuICBBcHBTdGF0ZVtcImFjdGl2ZVRvb2xcIl1bXCJ0eXBlXCJdLFxuICBib29sZWFuXG4+ID0ge1xuICBzZWxlY3Rpb246IHRydWUsXG4gIHRleHQ6IHRydWUsXG4gIHJlY3RhbmdsZTogdHJ1ZSxcbiAgZGlhbW9uZDogdHJ1ZSxcbiAgZWxsaXBzZTogdHJ1ZSxcbiAgbGluZTogdHJ1ZSxcbiAgaW1hZ2U6IHRydWUsXG4gIGFycm93OiB0cnVlLFxuICBmcmVlZHJhdzogdHJ1ZSxcbiAgZXJhc2VyOiBmYWxzZSxcbn07XG5cbmV4cG9ydCB0eXBlIFJlc3RvcmVkRGF0YVN0YXRlID0ge1xuICBlbGVtZW50czogRXhjYWxpZHJhd0VsZW1lbnRbXTtcbiAgYXBwU3RhdGU6IFJlc3RvcmVkQXBwU3RhdGU7XG4gIGZpbGVzOiBCaW5hcnlGaWxlcztcbn07XG5cbmNvbnN0IGdldEZvbnRGYW1pbHlCeU5hbWUgPSAoZm9udEZhbWlseU5hbWU6IHN0cmluZyk6IEZvbnRGYW1pbHlWYWx1ZXMgPT4ge1xuICBpZiAoT2JqZWN0LmtleXMoRk9OVF9GQU1JTFkpLmluY2x1ZGVzKGZvbnRGYW1pbHlOYW1lKSkge1xuICAgIHJldHVybiBGT05UX0ZBTUlMWVtcbiAgICAgIGZvbnRGYW1pbHlOYW1lIGFzIGtleW9mIHR5cGVvZiBGT05UX0ZBTUlMWVxuICAgIF0gYXMgRm9udEZhbWlseVZhbHVlcztcbiAgfVxuICByZXR1cm4gREVGQVVMVF9GT05UX0ZBTUlMWTtcbn07XG5cbmNvbnN0IHJlc3RvcmVFbGVtZW50V2l0aFByb3BlcnRpZXMgPSA8XG4gIFQgZXh0ZW5kcyBFeGNhbGlkcmF3RWxlbWVudCxcbiAgSyBleHRlbmRzIFBpY2s8VCwga2V5b2YgT21pdDxSZXF1aXJlZDxUPiwga2V5b2YgRXhjYWxpZHJhd0VsZW1lbnQ+Pixcbj4oXG4gIGVsZW1lbnQ6IFJlcXVpcmVkPFQ+ICYge1xuICAgIC8qKiBAZGVwcmVjYXRlZCAqL1xuICAgIGJvdW5kRWxlbWVudElkcz86IHJlYWRvbmx5IEV4Y2FsaWRyYXdFbGVtZW50W1wiaWRcIl1bXTtcbiAgfSxcbiAgZXh0cmE6IFBpY2s8XG4gICAgVCxcbiAgICAvLyBUaGlzIGV4dHJhIFBpY2s8VCwga2V5b2YgSz4gZW5zdXJlIG5vIGV4Y2VzcyBwcm9wZXJ0aWVzIGFyZSBwYXNzZWQuXG4gICAgLy8gQHRzLWlnbm9yZSBUUyBjb21wbGFpbnMgaGVyZSBidXQgdHlwZSBjaGVja3MgdGhlIGNhbGwgc2l0ZXMgZmluZS5cbiAgICBrZXlvZiBLXG4gID4gJlxuICAgIFBhcnRpYWw8UGljazxFeGNhbGlkcmF3RWxlbWVudCwgXCJ0eXBlXCIgfCBcInhcIiB8IFwieVwiPj4sXG4pOiBUID0+IHtcbiAgY29uc3QgYmFzZTogUGljazxULCBrZXlvZiBFeGNhbGlkcmF3RWxlbWVudD4gPSB7XG4gICAgdHlwZTogZXh0cmEudHlwZSB8fCBlbGVtZW50LnR5cGUsXG4gICAgLy8gYWxsIGVsZW1lbnRzIG11c3QgaGF2ZSB2ZXJzaW9uID4gMCBzbyBnZXRTY2VuZVZlcnNpb24oKSB3aWxsIHBpY2sgdXBcbiAgICAvLyBuZXdseSBhZGRlZCBlbGVtZW50c1xuICAgIHZlcnNpb246IGVsZW1lbnQudmVyc2lvbiB8fCAxLFxuICAgIHZlcnNpb25Ob25jZTogZWxlbWVudC52ZXJzaW9uTm9uY2UgPz8gMCxcbiAgICBpc0RlbGV0ZWQ6IGVsZW1lbnQuaXNEZWxldGVkID8/IGZhbHNlLFxuICAgIGlkOiBlbGVtZW50LmlkIHx8IHJhbmRvbUlkKCksXG4gICAgZmlsbFN0eWxlOiBlbGVtZW50LmZpbGxTdHlsZSB8fCBcImhhY2h1cmVcIixcbiAgICBzdHJva2VXaWR0aDogZWxlbWVudC5zdHJva2VXaWR0aCB8fCAxLFxuICAgIHN0cm9rZVN0eWxlOiBlbGVtZW50LnN0cm9rZVN0eWxlID8/IFwic29saWRcIixcbiAgICByb3VnaG5lc3M6IGVsZW1lbnQucm91Z2huZXNzID8/IDEsXG4gICAgb3BhY2l0eTogZWxlbWVudC5vcGFjaXR5ID09IG51bGwgPyAxMDAgOiBlbGVtZW50Lm9wYWNpdHksXG4gICAgYW5nbGU6IGVsZW1lbnQuYW5nbGUgfHwgMCxcbiAgICB4OiBleHRyYS54ID8/IGVsZW1lbnQueCA/PyAwLFxuICAgIHk6IGV4dHJhLnkgPz8gZWxlbWVudC55ID8/IDAsXG4gICAgc3Ryb2tlQ29sb3I6IGVsZW1lbnQuc3Ryb2tlQ29sb3IsXG4gICAgYmFja2dyb3VuZENvbG9yOiBlbGVtZW50LmJhY2tncm91bmRDb2xvcixcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCB8fCAwLFxuICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHQgfHwgMCxcbiAgICBzZWVkOiBlbGVtZW50LnNlZWQgPz8gMSxcbiAgICBncm91cElkczogZWxlbWVudC5ncm91cElkcyA/PyBbXSxcbiAgICBzdHJva2VTaGFycG5lc3M6XG4gICAgICBlbGVtZW50LnN0cm9rZVNoYXJwbmVzcyA/P1xuICAgICAgKGlzTGluZWFyRWxlbWVudFR5cGUoZWxlbWVudC50eXBlKSA/IFwicm91bmRcIiA6IFwic2hhcnBcIiksXG4gICAgYm91bmRFbGVtZW50czogZWxlbWVudC5ib3VuZEVsZW1lbnRJZHNcbiAgICAgID8gZWxlbWVudC5ib3VuZEVsZW1lbnRJZHMubWFwKChpZCkgPT4gKHsgdHlwZTogXCJhcnJvd1wiLCBpZCB9KSlcbiAgICAgIDogZWxlbWVudC5ib3VuZEVsZW1lbnRzID8/IFtdLFxuICAgIHVwZGF0ZWQ6IGVsZW1lbnQudXBkYXRlZCA/PyBnZXRVcGRhdGVkVGltZXN0YW1wKCksXG4gICAgbGluazogZWxlbWVudC5saW5rID8/IG51bGwsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlLFxuICAgIC4uLmdldE5vcm1hbGl6ZWREaW1lbnNpb25zKGJhc2UpLFxuICAgIC4uLmV4dHJhLFxuICB9IGFzIHVua25vd24gYXMgVDtcbn07XG5cbmNvbnN0IHJlc3RvcmVFbGVtZW50ID0gKFxuICBlbGVtZW50OiBFeGNsdWRlPEV4Y2FsaWRyYXdFbGVtZW50LCBFeGNhbGlkcmF3U2VsZWN0aW9uRWxlbWVudD4sXG4pOiB0eXBlb2YgZWxlbWVudCB8IG51bGwgPT4ge1xuICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICBsZXQgZm9udFNpemUgPSBlbGVtZW50LmZvbnRTaXplO1xuICAgICAgbGV0IGZvbnRGYW1pbHkgPSBlbGVtZW50LmZvbnRGYW1pbHk7XG4gICAgICBpZiAoXCJmb250XCIgaW4gZWxlbWVudCkge1xuICAgICAgICBjb25zdCBbZm9udFB4LCBfZm9udEZhbWlseV06IFtzdHJpbmcsIHN0cmluZ10gPSAoXG4gICAgICAgICAgZWxlbWVudCBhcyBhbnlcbiAgICAgICAgKS5mb250LnNwbGl0KFwiIFwiKTtcbiAgICAgICAgZm9udFNpemUgPSBwYXJzZUludChmb250UHgsIDEwKTtcbiAgICAgICAgZm9udEZhbWlseSA9IGdldEZvbnRGYW1pbHlCeU5hbWUoX2ZvbnRGYW1pbHkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3RvcmVFbGVtZW50V2l0aFByb3BlcnRpZXMoZWxlbWVudCwge1xuICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgdGV4dDogZWxlbWVudC50ZXh0ID8/IFwiXCIsXG4gICAgICAgIGJhc2VsaW5lOiBlbGVtZW50LmJhc2VsaW5lLFxuICAgICAgICB0ZXh0QWxpZ246IGVsZW1lbnQudGV4dEFsaWduIHx8IERFRkFVTFRfVEVYVF9BTElHTixcbiAgICAgICAgdmVydGljYWxBbGlnbjogZWxlbWVudC52ZXJ0aWNhbEFsaWduIHx8IERFRkFVTFRfVkVSVElDQUxfQUxJR04sXG4gICAgICAgIGNvbnRhaW5lcklkOiBlbGVtZW50LmNvbnRhaW5lcklkID8/IG51bGwsXG4gICAgICAgIG9yaWdpbmFsVGV4dDogZWxlbWVudC5vcmlnaW5hbFRleHQgfHwgZWxlbWVudC50ZXh0LFxuICAgICAgfSk7XG4gICAgY2FzZSBcImZyZWVkcmF3XCI6IHtcbiAgICAgIHJldHVybiByZXN0b3JlRWxlbWVudFdpdGhQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICAgcG9pbnRzOiBlbGVtZW50LnBvaW50cyxcbiAgICAgICAgbGFzdENvbW1pdHRlZFBvaW50OiBudWxsLFxuICAgICAgICBzaW11bGF0ZVByZXNzdXJlOiBlbGVtZW50LnNpbXVsYXRlUHJlc3N1cmUsXG4gICAgICAgIHByZXNzdXJlczogZWxlbWVudC5wcmVzc3VyZXMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY2FzZSBcImltYWdlXCI6XG4gICAgICByZXR1cm4gcmVzdG9yZUVsZW1lbnRXaXRoUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIHN0YXR1czogZWxlbWVudC5zdGF0dXMgfHwgXCJwZW5kaW5nXCIsXG4gICAgICAgIGZpbGVJZDogZWxlbWVudC5maWxlSWQsXG4gICAgICAgIHNjYWxlOiBlbGVtZW50LnNjYWxlIHx8IFsxLCAxXSxcbiAgICAgIH0pO1xuICAgIGNhc2UgXCJsaW5lXCI6XG4gICAgLy8gQHRzLWlnbm9yZSBMRUdBQ1kgdHlwZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgIGNhc2UgXCJkcmF3XCI6XG4gICAgY2FzZSBcImFycm93XCI6IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RhcnRBcnJvd2hlYWQgPSBudWxsLFxuICAgICAgICBlbmRBcnJvd2hlYWQgPSBlbGVtZW50LnR5cGUgPT09IFwiYXJyb3dcIiA/IFwiYXJyb3dcIiA6IG51bGwsXG4gICAgICB9ID0gZWxlbWVudDtcblxuICAgICAgbGV0IHggPSBlbGVtZW50Lng7XG4gICAgICBsZXQgeSA9IGVsZW1lbnQueTtcbiAgICAgIGxldCBwb2ludHMgPSAvLyBtaWdyYXRlIG9sZCBhcnJvdyBtb2RlbCB0byBuZXcgb25lXG4gICAgICAgICFBcnJheS5pc0FycmF5KGVsZW1lbnQucG9pbnRzKSB8fCBlbGVtZW50LnBvaW50cy5sZW5ndGggPCAyXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIFswLCAwXSxcbiAgICAgICAgICAgICAgW2VsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0XSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IGVsZW1lbnQucG9pbnRzO1xuXG4gICAgICBpZiAocG9pbnRzWzBdWzBdICE9PSAwIHx8IHBvaW50c1swXVsxXSAhPT0gMCkge1xuICAgICAgICAoeyBwb2ludHMsIHgsIHkgfSA9IExpbmVhckVsZW1lbnRFZGl0b3IuZ2V0Tm9ybWFsaXplZFBvaW50cyhlbGVtZW50KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0b3JlRWxlbWVudFdpdGhQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICAgdHlwZTpcbiAgICAgICAgICAoZWxlbWVudC50eXBlIGFzIEV4Y2FsaWRyYXdFbGVtZW50W1widHlwZVwiXSB8IFwiZHJhd1wiKSA9PT0gXCJkcmF3XCJcbiAgICAgICAgICAgID8gXCJsaW5lXCJcbiAgICAgICAgICAgIDogZWxlbWVudC50eXBlLFxuICAgICAgICBzdGFydEJpbmRpbmc6IGVsZW1lbnQuc3RhcnRCaW5kaW5nLFxuICAgICAgICBlbmRCaW5kaW5nOiBlbGVtZW50LmVuZEJpbmRpbmcsXG4gICAgICAgIGxhc3RDb21taXR0ZWRQb2ludDogbnVsbCxcbiAgICAgICAgc3RhcnRBcnJvd2hlYWQsXG4gICAgICAgIGVuZEFycm93aGVhZCxcbiAgICAgICAgcG9pbnRzLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGdlbmVyaWMgZWxlbWVudHNcbiAgICBjYXNlIFwiZWxsaXBzZVwiOlxuICAgICAgcmV0dXJuIHJlc3RvcmVFbGVtZW50V2l0aFByb3BlcnRpZXMoZWxlbWVudCwge30pO1xuICAgIGNhc2UgXCJyZWN0YW5nbGVcIjpcbiAgICAgIHJldHVybiByZXN0b3JlRWxlbWVudFdpdGhQcm9wZXJ0aWVzKGVsZW1lbnQsIHt9KTtcbiAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgICAgcmV0dXJuIHJlc3RvcmVFbGVtZW50V2l0aFByb3BlcnRpZXMoZWxlbWVudCwge30pO1xuXG4gICAgLy8gRG9uJ3QgdXNlIGRlZmF1bHQgY2FzZSBzbyBhcyB0byBjYXRjaCBhIG1pc3NpbmcgYW4gZWxlbWVudCB0eXBlIGNhc2UuXG4gICAgLy8gV2UgYWxzbyBkb24ndCB3YW50IHRvIHRocm93LCBidXQgaW5zdGVhZCByZXR1cm4gdm9pZCBzbyB3ZSBmaWx0ZXJcbiAgICAvLyBvdXQgdGhlc2UgdW5zdXBwb3J0ZWQgZWxlbWVudHMgZnJvbSB0aGUgcmVzdG9yZWQgYXJyYXkuXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZXN0b3JlRWxlbWVudHMgPSAoXG4gIGVsZW1lbnRzOiBJbXBvcnRlZERhdGFTdGF0ZVtcImVsZW1lbnRzXCJdLFxuICAvKiogTk9URSBkb2Vzbid0IHNlcnZlIGZvciByZWNvbmNpbGlhdGlvbiAqL1xuICBsb2NhbEVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdIHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IEV4Y2FsaWRyYXdFbGVtZW50W10gPT4ge1xuICBjb25zdCBsb2NhbEVsZW1lbnRzTWFwID0gbG9jYWxFbGVtZW50cyA/IGFycmF5VG9NYXAobG9jYWxFbGVtZW50cykgOiBudWxsO1xuICByZXR1cm4gKGVsZW1lbnRzIHx8IFtdKS5yZWR1Y2UoKGVsZW1lbnRzLCBlbGVtZW50KSA9PiB7XG4gICAgLy8gZmlsdGVyaW5nIG91dCBzZWxlY3Rpb24sIHdoaWNoIGlzIGxlZ2FjeSwgbm8gbG9uZ2VyIGtlcHQgaW4gZWxlbWVudHMsXG4gICAgLy8gYW5kIGNhdXNpbmcgaXNzdWVzIGlmIHJldGFpbmVkXG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gXCJzZWxlY3Rpb25cIiAmJiAhaXNJbnZpc2libHlTbWFsbEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgIGxldCBtaWdyYXRlZEVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50IHwgbnVsbCA9IHJlc3RvcmVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgaWYgKG1pZ3JhdGVkRWxlbWVudCkge1xuICAgICAgICBjb25zdCBsb2NhbEVsZW1lbnQgPSBsb2NhbEVsZW1lbnRzTWFwPy5nZXQoZWxlbWVudC5pZCk7XG4gICAgICAgIGlmIChsb2NhbEVsZW1lbnQgJiYgbG9jYWxFbGVtZW50LnZlcnNpb24gPiBtaWdyYXRlZEVsZW1lbnQudmVyc2lvbikge1xuICAgICAgICAgIG1pZ3JhdGVkRWxlbWVudCA9IGJ1bXBWZXJzaW9uKG1pZ3JhdGVkRWxlbWVudCwgbG9jYWxFbGVtZW50LnZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzLnB1c2gobWlncmF0ZWRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9LCBbXSBhcyBFeGNhbGlkcmF3RWxlbWVudFtdKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXN0b3JlQXBwU3RhdGUgPSAoXG4gIGFwcFN0YXRlOiBJbXBvcnRlZERhdGFTdGF0ZVtcImFwcFN0YXRlXCJdLFxuICBsb2NhbEFwcFN0YXRlOiBQYXJ0aWFsPEFwcFN0YXRlPiB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBSZXN0b3JlZEFwcFN0YXRlID0+IHtcbiAgYXBwU3RhdGUgPSBhcHBTdGF0ZSB8fCB7fTtcbiAgY29uc3QgZGVmYXVsdEFwcFN0YXRlID0gZ2V0RGVmYXVsdEFwcFN0YXRlKCk7XG4gIGNvbnN0IG5leHRBcHBTdGF0ZSA9IHt9IGFzIHR5cGVvZiBkZWZhdWx0QXBwU3RhdGU7XG4gIGZvciAoY29uc3QgW2tleSwgZGVmYXVsdFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0QXBwU3RhdGUpIGFzIFtcbiAgICBrZXlvZiB0eXBlb2YgZGVmYXVsdEFwcFN0YXRlLFxuICAgIGFueSxcbiAgXVtdKSB7XG4gICAgY29uc3Qgc3VwcGxpZWRWYWx1ZSA9IGFwcFN0YXRlW2tleV07XG4gICAgY29uc3QgbG9jYWxWYWx1ZSA9IGxvY2FsQXBwU3RhdGUgPyBsb2NhbEFwcFN0YXRlW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgKG5leHRBcHBTdGF0ZSBhcyBhbnkpW2tleV0gPVxuICAgICAgc3VwcGxpZWRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3VwcGxpZWRWYWx1ZVxuICAgICAgICA6IGxvY2FsVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGxvY2FsVmFsdWVcbiAgICAgICAgOiBkZWZhdWx0VmFsdWU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0QXBwU3RhdGUsXG4gICAgYWN0aXZlVG9vbDogQWxsb3dlZEV4Y2FsaWRyYXdBY3RpdmVUb29sc1tuZXh0QXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlXVxuICAgICAgPyBuZXh0QXBwU3RhdGUuYWN0aXZlVG9vbFxuICAgICAgOiB7IC4uLm5leHRBcHBTdGF0ZS5hY3RpdmVUb29sLCB0eXBlOiBcInNlbGVjdGlvblwiIH0sXG4gICAgLy8gTWlncmF0ZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9uIHdoZXJlIGFwcFN0YXRlLnpvb20gd2FzIGEgbnVtYmVyXG4gICAgem9vbTpcbiAgICAgIHR5cGVvZiBhcHBTdGF0ZS56b29tID09PSBcIm51bWJlclwiXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdmFsdWU6IGFwcFN0YXRlLnpvb20gYXMgTm9ybWFsaXplZFpvb21WYWx1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogYXBwU3RhdGUuem9vbSB8fCBkZWZhdWx0QXBwU3RhdGUuem9vbSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXN0b3JlID0gKFxuICBkYXRhOiBJbXBvcnRlZERhdGFTdGF0ZSB8IG51bGwsXG4gIC8qKlxuICAgKiBMb2NhbCBBcHBTdGF0ZSAoYHRoaXMuc3RhdGVgIG9yIGluaXRpYWwgc3RhdGUgZnJvbSBsb2NhbFN0b3JhZ2UpIHNvIHRoYXQgd2VcbiAgICogZG9uJ3Qgb3ZlcndyaXRlIGxvY2FsIHN0YXRlIHdpdGggZGVmYXVsdCB2YWx1ZXMgKHdoZW4gdmFsdWVzIG5vdFxuICAgKiBleHBsaWNpdGx5IHNwZWNpZmllZCkuXG4gICAqIFN1cHBseSBgbnVsbGAgaWYgeW91IGNhbid0IGdldCBhY2Nlc3MgdG8gaXQuXG4gICAqL1xuICBsb2NhbEFwcFN0YXRlOiBQYXJ0aWFsPEFwcFN0YXRlPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGxvY2FsRWxlbWVudHM6IHJlYWRvbmx5IEV4Y2FsaWRyYXdFbGVtZW50W10gfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogUmVzdG9yZWREYXRhU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiByZXN0b3JlRWxlbWVudHMoZGF0YT8uZWxlbWVudHMsIGxvY2FsRWxlbWVudHMpLFxuICAgIGFwcFN0YXRlOiByZXN0b3JlQXBwU3RhdGUoZGF0YT8uYXBwU3RhdGUsIGxvY2FsQXBwU3RhdGUgfHwgbnVsbCksXG4gICAgZmlsZXM6IGRhdGE/LmZpbGVzIHx8IHt9LFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc3RvcmVMaWJyYXJ5SXRlbXMgPSAoXG4gIGxpYnJhcnlJdGVtczogTm9uT3B0aW9uYWw8SW1wb3J0ZWREYXRhU3RhdGVbXCJsaWJyYXJ5SXRlbXNcIl0+LFxuICBkZWZhdWx0U3RhdHVzOiBMaWJyYXJ5SXRlbVtcInN0YXR1c1wiXSxcbikgPT4ge1xuICBjb25zdCByZXN0b3JlZEl0ZW1zOiBMaWJyYXJ5SXRlbVtdID0gW107XG4gIGZvciAoY29uc3QgaXRlbSBvZiBsaWJyYXJ5SXRlbXMpIHtcbiAgICAvLyBtaWdyYXRlIG9sZGVyIGxpYnJhcmllc1xuICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICByZXN0b3JlZEl0ZW1zLnB1c2goe1xuICAgICAgICBzdGF0dXM6IGRlZmF1bHRTdGF0dXMsXG4gICAgICAgIGVsZW1lbnRzOiBpdGVtLFxuICAgICAgICBpZDogcmFuZG9tSWQoKSxcbiAgICAgICAgY3JlYXRlZDogRGF0ZS5ub3coKSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBfaXRlbSA9IGl0ZW0gYXMgTWFya09wdGlvbmFsPExpYnJhcnlJdGVtLCBcImlkXCIgfCBcInN0YXR1c1wiPjtcbiAgICAgIHJlc3RvcmVkSXRlbXMucHVzaCh7XG4gICAgICAgIC4uLl9pdGVtLFxuICAgICAgICBpZDogX2l0ZW0uaWQgfHwgcmFuZG9tSWQoKSxcbiAgICAgICAgc3RhdHVzOiBfaXRlbS5zdGF0dXMgfHwgZGVmYXVsdFN0YXR1cyxcbiAgICAgICAgY3JlYXRlZDogX2l0ZW0uY3JlYXRlZCB8fCBEYXRlLm5vdygpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN0b3JlZEl0ZW1zO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../data/restore.ts\n");
|
|
2210
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AllowedExcalidrawActiveTools\": () => (/* binding */ AllowedExcalidrawActiveTools),\n/* harmony export */ \"restoreElements\": () => (/* binding */ restoreElements),\n/* harmony export */ \"restoreAppState\": () => (/* binding */ restoreAppState),\n/* harmony export */ \"restore\": () => (/* binding */ restore),\n/* harmony export */ \"restoreLibraryItems\": () => (/* binding */ restoreLibraryItems)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _element_typeChecks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element/typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../random */ \"../../random.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../element/linearElementEditor */ \"../../element/linearElementEditor.ts\");\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../element/mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst AllowedExcalidrawActiveTools = {\r\n selection: true,\r\n text: true,\r\n rectangle: true,\r\n diamond: true,\r\n ellipse: true,\r\n line: true,\r\n image: true,\r\n arrow: true,\r\n freedraw: true,\r\n eraser: false,\r\n};\r\nconst getFontFamilyByName = (fontFamilyName) => {\r\n if (Object.keys(_constants__WEBPACK_IMPORTED_MODULE_3__.FONT_FAMILY).includes(fontFamilyName)) {\r\n return _constants__WEBPACK_IMPORTED_MODULE_3__.FONT_FAMILY[fontFamilyName];\r\n }\r\n return _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_FONT_FAMILY;\r\n};\r\nconst restoreElementWithProperties = (element, extra) => {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\r\n const base = {\r\n type: extra.type || element.type,\r\n // all elements must have version > 0 so getSceneVersion() will pick up\r\n // newly added elements\r\n version: element.version || 1,\r\n versionNonce: (_a = element.versionNonce) !== null && _a !== void 0 ? _a : 0,\r\n isDeleted: (_b = element.isDeleted) !== null && _b !== void 0 ? _b : false,\r\n id: element.id || (0,_random__WEBPACK_IMPORTED_MODULE_2__.randomId)(),\r\n fillStyle: element.fillStyle || \"hachure\",\r\n strokeWidth: element.strokeWidth || 1,\r\n strokeStyle: (_c = element.strokeStyle) !== null && _c !== void 0 ? _c : \"solid\",\r\n roughness: (_d = element.roughness) !== null && _d !== void 0 ? _d : 1,\r\n opacity: element.opacity == null ? 100 : element.opacity,\r\n angle: element.angle || 0,\r\n x: (_f = (_e = extra.x) !== null && _e !== void 0 ? _e : element.x) !== null && _f !== void 0 ? _f : 0,\r\n y: (_h = (_g = extra.y) !== null && _g !== void 0 ? _g : element.y) !== null && _h !== void 0 ? _h : 0,\r\n strokeColor: element.strokeColor,\r\n backgroundColor: element.backgroundColor,\r\n width: element.width || 0,\r\n height: element.height || 0,\r\n seed: (_j = element.seed) !== null && _j !== void 0 ? _j : 1,\r\n groupIds: (_k = element.groupIds) !== null && _k !== void 0 ? _k : [],\r\n strokeSharpness: (_l = element.strokeSharpness) !== null && _l !== void 0 ? _l : ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_1__.isLinearElementType)(element.type) ? \"round\" : \"sharp\"),\r\n boundElements: element.boundElementIds\r\n ? element.boundElementIds.map((id) => ({ type: \"arrow\", id }))\r\n : (_m = element.boundElements) !== null && _m !== void 0 ? _m : [],\r\n updated: (_o = element.updated) !== null && _o !== void 0 ? _o : (0,_utils__WEBPACK_IMPORTED_MODULE_7__.getUpdatedTimestamp)(),\r\n link: (_p = element.link) !== null && _p !== void 0 ? _p : null,\r\n };\r\n return Object.assign(Object.assign(Object.assign({}, base), (0,_element__WEBPACK_IMPORTED_MODULE_0__.getNormalizedDimensions)(base)), extra);\r\n};\r\nconst restoreElement = (element) => {\r\n var _a, _b;\r\n switch (element.type) {\r\n case \"text\":\r\n let fontSize = element.fontSize;\r\n let fontFamily = element.fontFamily;\r\n if (\"font\" in element) {\r\n const [fontPx, _fontFamily] = element.font.split(\" \");\r\n fontSize = parseInt(fontPx, 10);\r\n fontFamily = getFontFamilyByName(_fontFamily);\r\n }\r\n return restoreElementWithProperties(element, {\r\n fontSize,\r\n fontFamily,\r\n text: (_a = element.text) !== null && _a !== void 0 ? _a : \"\",\r\n baseline: element.baseline,\r\n textAlign: element.textAlign || _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_TEXT_ALIGN,\r\n verticalAlign: element.verticalAlign || _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_VERTICAL_ALIGN,\r\n containerId: (_b = element.containerId) !== null && _b !== void 0 ? _b : null,\r\n originalText: element.originalText || element.text,\r\n });\r\n case \"freedraw\": {\r\n return restoreElementWithProperties(element, {\r\n points: element.points,\r\n lastCommittedPoint: null,\r\n simulatePressure: element.simulatePressure,\r\n pressures: element.pressures,\r\n });\r\n }\r\n case \"image\":\r\n return restoreElementWithProperties(element, {\r\n status: element.status || \"pending\",\r\n fileId: element.fileId,\r\n scale: element.scale || [1, 1],\r\n });\r\n case \"line\":\r\n // @ts-ignore LEGACY type\r\n // eslint-disable-next-line no-fallthrough\r\n case \"draw\":\r\n case \"arrow\": {\r\n const { startArrowhead = null, endArrowhead = element.type === \"arrow\" ? \"arrow\" : null, } = element;\r\n let x = element.x;\r\n let y = element.y;\r\n let points = // migrate old arrow model to new one\r\n !Array.isArray(element.points) || element.points.length < 2\r\n ? [\r\n [0, 0],\r\n [element.width, element.height],\r\n ]\r\n : element.points;\r\n if (points[0][0] !== 0 || points[0][1] !== 0) {\r\n ({ points, x, y } = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_5__.LinearElementEditor.getNormalizedPoints(element));\r\n }\r\n return restoreElementWithProperties(element, {\r\n type: element.type === \"draw\"\r\n ? \"line\"\r\n : element.type,\r\n startBinding: element.startBinding,\r\n endBinding: element.endBinding,\r\n lastCommittedPoint: null,\r\n startArrowhead,\r\n endArrowhead,\r\n points,\r\n x,\r\n y,\r\n });\r\n }\r\n // generic elements\r\n case \"ellipse\":\r\n return restoreElementWithProperties(element, {});\r\n case \"rectangle\":\r\n return restoreElementWithProperties(element, {});\r\n case \"diamond\":\r\n return restoreElementWithProperties(element, {});\r\n // Don't use default case so as to catch a missing an element type case.\r\n // We also don't want to throw, but instead return void so we filter\r\n // out these unsupported elements from the restored array.\r\n }\r\n};\r\nconst restoreElements = (elements, \r\n/** NOTE doesn't serve for reconciliation */\r\nlocalElements) => {\r\n const localElementsMap = localElements ? (0,_utils__WEBPACK_IMPORTED_MODULE_7__.arrayToMap)(localElements) : null;\r\n return (elements || []).reduce((elements, element) => {\r\n // filtering out selection, which is legacy, no longer kept in elements,\r\n // and causing issues if retained\r\n if (element.type !== \"selection\" && !(0,_element__WEBPACK_IMPORTED_MODULE_0__.isInvisiblySmallElement)(element)) {\r\n let migratedElement = restoreElement(element);\r\n if (migratedElement) {\r\n const localElement = localElementsMap === null || localElementsMap === void 0 ? void 0 : localElementsMap.get(element.id);\r\n if (localElement && localElement.version > migratedElement.version) {\r\n migratedElement = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_6__.bumpVersion)(migratedElement, localElement.version);\r\n }\r\n elements.push(migratedElement);\r\n }\r\n }\r\n return elements;\r\n }, []);\r\n};\r\nconst restoreAppState = (appState, localAppState) => {\r\n var _a, _b, _c, _d;\r\n appState = appState || {};\r\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_4__.getDefaultAppState)();\r\n const nextAppState = {};\r\n for (const [key, defaultValue] of Object.entries(defaultAppState)) {\r\n const suppliedValue = appState[key];\r\n const localValue = localAppState ? localAppState[key] : undefined;\r\n nextAppState[key] =\r\n suppliedValue !== undefined\r\n ? suppliedValue\r\n : localValue !== undefined\r\n ? localValue\r\n : defaultValue;\r\n }\r\n return Object.assign(Object.assign({}, nextAppState), { \r\n // reset on fresh restore so as to hide the UI button if penMode not active\r\n penDetected: (_a = localAppState === null || localAppState === void 0 ? void 0 : localAppState.penDetected) !== null && _a !== void 0 ? _a : (appState.penMode ? (_b = appState.penDetected) !== null && _b !== void 0 ? _b : false : false), activeTool: {\r\n lastActiveToolBeforeEraser: null,\r\n locked: (_c = nextAppState.activeTool.locked) !== null && _c !== void 0 ? _c : false,\r\n type: AllowedExcalidrawActiveTools[nextAppState.activeTool.type]\r\n ? (_d = nextAppState.activeTool.type) !== null && _d !== void 0 ? _d : \"selection\"\r\n : \"selection\",\r\n }, \r\n // Migrates from previous version where appState.zoom was a number\r\n zoom: typeof appState.zoom === \"number\"\r\n ? {\r\n value: appState.zoom,\r\n }\r\n : appState.zoom || defaultAppState.zoom });\r\n};\r\nconst restore = (data, \r\n/**\r\n * Local AppState (`this.state` or initial state from localStorage) so that we\r\n * don't overwrite local state with default values (when values not\r\n * explicitly specified).\r\n * Supply `null` if you can't get access to it.\r\n */\r\nlocalAppState, localElements) => {\r\n return {\r\n elements: restoreElements(data === null || data === void 0 ? void 0 : data.elements, localElements),\r\n appState: restoreAppState(data === null || data === void 0 ? void 0 : data.appState, localAppState || null),\r\n files: (data === null || data === void 0 ? void 0 : data.files) || {},\r\n };\r\n};\r\nconst restoreLibraryItems = (libraryItems, defaultStatus) => {\r\n const restoredItems = [];\r\n for (const item of libraryItems) {\r\n // migrate older libraries\r\n if (Array.isArray(item)) {\r\n restoredItems.push({\r\n status: defaultStatus,\r\n elements: item,\r\n id: (0,_random__WEBPACK_IMPORTED_MODULE_2__.randomId)(),\r\n created: Date.now(),\r\n });\r\n }\r\n else {\r\n const _item = item;\r\n restoredItems.push(Object.assign(Object.assign({}, _item), { id: _item.id || (0,_random__WEBPACK_IMPORTED_MODULE_2__.randomId)(), status: _item.status || defaultStatus, created: _item.created || Date.now() }));\r\n }\r\n }\r\n return restoredItems;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQ3BDLENBQUM7U0FDSjtLQUNGO0lBQ0QsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2RhdGEvcmVzdG9yZS50cz84NzIwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEV4Y2FsaWRyYXdFbGVtZW50LFxuICBFeGNhbGlkcmF3U2VsZWN0aW9uRWxlbWVudCxcbiAgRm9udEZhbWlseVZhbHVlcyxcbn0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7XG4gIEFwcFN0YXRlLFxuICBCaW5hcnlGaWxlcyxcbiAgTGlicmFyeUl0ZW0sXG4gIE5vcm1hbGl6ZWRab29tVmFsdWUsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgSW1wb3J0ZWREYXRhU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0Tm9ybWFsaXplZERpbWVuc2lvbnMsIGlzSW52aXNpYmx5U21hbGxFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCB7IGlzTGluZWFyRWxlbWVudFR5cGUgfSBmcm9tIFwiLi4vZWxlbWVudC90eXBlQ2hlY2tzXCI7XG5pbXBvcnQgeyByYW5kb21JZCB9IGZyb20gXCIuLi9yYW5kb21cIjtcbmltcG9ydCB7XG4gIERFRkFVTFRfRk9OVF9GQU1JTFksXG4gIERFRkFVTFRfVEVYVF9BTElHTixcbiAgREVGQVVMVF9WRVJUSUNBTF9BTElHTixcbiAgRk9OVF9GQU1JTFksXG59IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRBcHBTdGF0ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHsgTGluZWFyRWxlbWVudEVkaXRvciB9IGZyb20gXCIuLi9lbGVtZW50L2xpbmVhckVsZW1lbnRFZGl0b3JcIjtcbmltcG9ydCB7IGJ1bXBWZXJzaW9uIH0gZnJvbSBcIi4uL2VsZW1lbnQvbXV0YXRlRWxlbWVudFwiO1xuaW1wb3J0IHsgZ2V0VXBkYXRlZFRpbWVzdGFtcCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgYXJyYXlUb01hcCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG50eXBlIFJlc3RvcmVkQXBwU3RhdGUgPSBPbWl0PFxuICBBcHBTdGF0ZSxcbiAgXCJvZmZzZXRUb3BcIiB8IFwib2Zmc2V0TGVmdFwiIHwgXCJ3aWR0aFwiIHwgXCJoZWlnaHRcIlxuPjtcblxuZXhwb3J0IGNvbnN0IEFsbG93ZWRFeGNhbGlkcmF3QWN0aXZlVG9vbHM6IFJlY29yZDxcbiAgQXBwU3RhdGVbXCJhY3RpdmVUb29sXCJdW1widHlwZVwiXSxcbiAgYm9vbGVhblxuPiA9IHtcbiAgc2VsZWN0aW9uOiB0cnVlLFxuICB0ZXh0OiB0cnVlLFxuICByZWN0YW5nbGU6IHRydWUsXG4gIGRpYW1vbmQ6IHRydWUsXG4gIGVsbGlwc2U6IHRydWUsXG4gIGxpbmU6IHRydWUsXG4gIGltYWdlOiB0cnVlLFxuICBhcnJvdzogdHJ1ZSxcbiAgZnJlZWRyYXc6IHRydWUsXG4gIGVyYXNlcjogZmFsc2UsXG59O1xuXG5leHBvcnQgdHlwZSBSZXN0b3JlZERhdGFTdGF0ZSA9IHtcbiAgZWxlbWVudHM6IEV4Y2FsaWRyYXdFbGVtZW50W107XG4gIGFwcFN0YXRlOiBSZXN0b3JlZEFwcFN0YXRlO1xuICBmaWxlczogQmluYXJ5RmlsZXM7XG59O1xuXG5jb25zdCBnZXRGb250RmFtaWx5QnlOYW1lID0gKGZvbnRGYW1pbHlOYW1lOiBzdHJpbmcpOiBGb250RmFtaWx5VmFsdWVzID0+IHtcbiAgaWYgKE9iamVjdC5rZXlzKEZPTlRfRkFNSUxZKS5pbmNsdWRlcyhmb250RmFtaWx5TmFtZSkpIHtcbiAgICByZXR1cm4gRk9OVF9GQU1JTFlbXG4gICAgICBmb250RmFtaWx5TmFtZSBhcyBrZXlvZiB0eXBlb2YgRk9OVF9GQU1JTFlcbiAgICBdIGFzIEZvbnRGYW1pbHlWYWx1ZXM7XG4gIH1cbiAgcmV0dXJuIERFRkFVTFRfRk9OVF9GQU1JTFk7XG59O1xuXG5jb25zdCByZXN0b3JlRWxlbWVudFdpdGhQcm9wZXJ0aWVzID0gPFxuICBUIGV4dGVuZHMgRXhjYWxpZHJhd0VsZW1lbnQsXG4gIEsgZXh0ZW5kcyBQaWNrPFQsIGtleW9mIE9taXQ8UmVxdWlyZWQ8VD4sIGtleW9mIEV4Y2FsaWRyYXdFbGVtZW50Pj4sXG4+KFxuICBlbGVtZW50OiBSZXF1aXJlZDxUPiAmIHtcbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgICBib3VuZEVsZW1lbnRJZHM/OiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtcImlkXCJdW107XG4gIH0sXG4gIGV4dHJhOiBQaWNrPFxuICAgIFQsXG4gICAgLy8gVGhpcyBleHRyYSBQaWNrPFQsIGtleW9mIEs+IGVuc3VyZSBubyBleGNlc3MgcHJvcGVydGllcyBhcmUgcGFzc2VkLlxuICAgIC8vIEB0cy1pZ25vcmUgVFMgY29tcGxhaW5zIGhlcmUgYnV0IHR5cGUgY2hlY2tzIHRoZSBjYWxsIHNpdGVzIGZpbmUuXG4gICAga2V5b2YgS1xuICA+ICZcbiAgICBQYXJ0aWFsPFBpY2s8RXhjYWxpZHJhd0VsZW1lbnQsIFwidHlwZVwiIHwgXCJ4XCIgfCBcInlcIj4+LFxuKTogVCA9PiB7XG4gIGNvbnN0IGJhc2U6IFBpY2s8VCwga2V5b2YgRXhjYWxpZHJhd0VsZW1lbnQ+ID0ge1xuICAgIHR5cGU6IGV4dHJhLnR5cGUgfHwgZWxlbWVudC50eXBlLFxuICAgIC8vIGFsbCBlbGVtZW50cyBtdXN0IGhhdmUgdmVyc2lvbiA+IDAgc28gZ2V0U2NlbmVWZXJzaW9uKCkgd2lsbCBwaWNrIHVwXG4gICAgLy8gbmV3bHkgYWRkZWQgZWxlbWVudHNcbiAgICB2ZXJzaW9uOiBlbGVtZW50LnZlcnNpb24gfHwgMSxcbiAgICB2ZXJzaW9uTm9uY2U6IGVsZW1lbnQudmVyc2lvbk5vbmNlID8/IDAsXG4gICAgaXNEZWxldGVkOiBlbGVtZW50LmlzRGVsZXRlZCA/PyBmYWxzZSxcbiAgICBpZDogZWxlbWVudC5pZCB8fCByYW5kb21JZCgpLFxuICAgIGZpbGxTdHlsZTogZWxlbWVudC5maWxsU3R5bGUgfHwgXCJoYWNodXJlXCIsXG4gICAgc3Ryb2tlV2lkdGg6IGVsZW1lbnQuc3Ryb2tlV2lkdGggfHwgMSxcbiAgICBzdHJva2VTdHlsZTogZWxlbWVudC5zdHJva2VTdHlsZSA/PyBcInNvbGlkXCIsXG4gICAgcm91Z2huZXNzOiBlbGVtZW50LnJvdWdobmVzcyA/PyAxLFxuICAgIG9wYWNpdHk6IGVsZW1lbnQub3BhY2l0eSA9PSBudWxsID8gMTAwIDogZWxlbWVudC5vcGFjaXR5LFxuICAgIGFuZ2xlOiBlbGVtZW50LmFuZ2xlIHx8IDAsXG4gICAgeDogZXh0cmEueCA/PyBlbGVtZW50LnggPz8gMCxcbiAgICB5OiBleHRyYS55ID8/IGVsZW1lbnQueSA/PyAwLFxuICAgIHN0cm9rZUNvbG9yOiBlbGVtZW50LnN0cm9rZUNvbG9yLFxuICAgIGJhY2tncm91bmRDb2xvcjogZWxlbWVudC5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgd2lkdGg6IGVsZW1lbnQud2lkdGggfHwgMCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0IHx8IDAsXG4gICAgc2VlZDogZWxlbWVudC5zZWVkID8/IDEsXG4gICAgZ3JvdXBJZHM6IGVsZW1lbnQuZ3JvdXBJZHMgPz8gW10sXG4gICAgc3Ryb2tlU2hhcnBuZXNzOlxuICAgICAgZWxlbWVudC5zdHJva2VTaGFycG5lc3MgPz9cbiAgICAgIChpc0xpbmVhckVsZW1lbnRUeXBlKGVsZW1lbnQudHlwZSkgPyBcInJvdW5kXCIgOiBcInNoYXJwXCIpLFxuICAgIGJvdW5kRWxlbWVudHM6IGVsZW1lbnQuYm91bmRFbGVtZW50SWRzXG4gICAgICA/IGVsZW1lbnQuYm91bmRFbGVtZW50SWRzLm1hcCgoaWQpID0+ICh7IHR5cGU6IFwiYXJyb3dcIiwgaWQgfSkpXG4gICAgICA6IGVsZW1lbnQuYm91bmRFbGVtZW50cyA/PyBbXSxcbiAgICB1cGRhdGVkOiBlbGVtZW50LnVwZGF0ZWQgPz8gZ2V0VXBkYXRlZFRpbWVzdGFtcCgpLFxuICAgIGxpbms6IGVsZW1lbnQubGluayA/PyBudWxsLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uYmFzZSxcbiAgICAuLi5nZXROb3JtYWxpemVkRGltZW5zaW9ucyhiYXNlKSxcbiAgICAuLi5leHRyYSxcbiAgfSBhcyB1bmtub3duIGFzIFQ7XG59O1xuXG5jb25zdCByZXN0b3JlRWxlbWVudCA9IChcbiAgZWxlbWVudDogRXhjbHVkZTxFeGNhbGlkcmF3RWxlbWVudCwgRXhjYWxpZHJhd1NlbGVjdGlvbkVsZW1lbnQ+LFxuKTogdHlwZW9mIGVsZW1lbnQgfCBudWxsID0+IHtcbiAgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcbiAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgbGV0IGZvbnRTaXplID0gZWxlbWVudC5mb250U2l6ZTtcbiAgICAgIGxldCBmb250RmFtaWx5ID0gZWxlbWVudC5mb250RmFtaWx5O1xuICAgICAgaWYgKFwiZm9udFwiIGluIGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgW2ZvbnRQeCwgX2ZvbnRGYW1pbHldOiBbc3RyaW5nLCBzdHJpbmddID0gKFxuICAgICAgICAgIGVsZW1lbnQgYXMgYW55XG4gICAgICAgICkuZm9udC5zcGxpdChcIiBcIik7XG4gICAgICAgIGZvbnRTaXplID0gcGFyc2VJbnQoZm9udFB4LCAxMCk7XG4gICAgICAgIGZvbnRGYW1pbHkgPSBnZXRGb250RmFtaWx5QnlOYW1lKF9mb250RmFtaWx5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN0b3JlRWxlbWVudFdpdGhQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIHRleHQ6IGVsZW1lbnQudGV4dCA/PyBcIlwiLFxuICAgICAgICBiYXNlbGluZTogZWxlbWVudC5iYXNlbGluZSxcbiAgICAgICAgdGV4dEFsaWduOiBlbGVtZW50LnRleHRBbGlnbiB8fCBERUZBVUxUX1RFWFRfQUxJR04sXG4gICAgICAgIHZlcnRpY2FsQWxpZ246IGVsZW1lbnQudmVydGljYWxBbGlnbiB8fCBERUZBVUxUX1ZFUlRJQ0FMX0FMSUdOLFxuICAgICAgICBjb250YWluZXJJZDogZWxlbWVudC5jb250YWluZXJJZCA/PyBudWxsLFxuICAgICAgICBvcmlnaW5hbFRleHQ6IGVsZW1lbnQub3JpZ2luYWxUZXh0IHx8IGVsZW1lbnQudGV4dCxcbiAgICAgIH0pO1xuICAgIGNhc2UgXCJmcmVlZHJhd1wiOiB7XG4gICAgICByZXR1cm4gcmVzdG9yZUVsZW1lbnRXaXRoUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIHBvaW50czogZWxlbWVudC5wb2ludHMsXG4gICAgICAgIGxhc3RDb21taXR0ZWRQb2ludDogbnVsbCxcbiAgICAgICAgc2ltdWxhdGVQcmVzc3VyZTogZWxlbWVudC5zaW11bGF0ZVByZXNzdXJlLFxuICAgICAgICBwcmVzc3VyZXM6IGVsZW1lbnQucHJlc3N1cmVzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgcmV0dXJuIHJlc3RvcmVFbGVtZW50V2l0aFByb3BlcnRpZXMoZWxlbWVudCwge1xuICAgICAgICBzdGF0dXM6IGVsZW1lbnQuc3RhdHVzIHx8IFwicGVuZGluZ1wiLFxuICAgICAgICBmaWxlSWQ6IGVsZW1lbnQuZmlsZUlkLFxuICAgICAgICBzY2FsZTogZWxlbWVudC5zY2FsZSB8fCBbMSwgMV0sXG4gICAgICB9KTtcbiAgICBjYXNlIFwibGluZVwiOlxuICAgIC8vIEB0cy1pZ25vcmUgTEVHQUNZIHR5cGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICBjYXNlIFwiZHJhd1wiOlxuICAgIGNhc2UgXCJhcnJvd1wiOiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0YXJ0QXJyb3doZWFkID0gbnVsbCxcbiAgICAgICAgZW5kQXJyb3doZWFkID0gZWxlbWVudC50eXBlID09PSBcImFycm93XCIgPyBcImFycm93XCIgOiBudWxsLFxuICAgICAgfSA9IGVsZW1lbnQ7XG5cbiAgICAgIGxldCB4ID0gZWxlbWVudC54O1xuICAgICAgbGV0IHkgPSBlbGVtZW50Lnk7XG4gICAgICBsZXQgcG9pbnRzID0gLy8gbWlncmF0ZSBvbGQgYXJyb3cgbW9kZWwgdG8gbmV3IG9uZVxuICAgICAgICAhQXJyYXkuaXNBcnJheShlbGVtZW50LnBvaW50cykgfHwgZWxlbWVudC5wb2ludHMubGVuZ3RoIDwgMlxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBbMCwgMF0sXG4gICAgICAgICAgICAgIFtlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodF0sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBlbGVtZW50LnBvaW50cztcblxuICAgICAgaWYgKHBvaW50c1swXVswXSAhPT0gMCB8fCBwb2ludHNbMF1bMV0gIT09IDApIHtcbiAgICAgICAgKHsgcG9pbnRzLCB4LCB5IH0gPSBMaW5lYXJFbGVtZW50RWRpdG9yLmdldE5vcm1hbGl6ZWRQb2ludHMoZWxlbWVudCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdG9yZUVsZW1lbnRXaXRoUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIHR5cGU6XG4gICAgICAgICAgKGVsZW1lbnQudHlwZSBhcyBFeGNhbGlkcmF3RWxlbWVudFtcInR5cGVcIl0gfCBcImRyYXdcIikgPT09IFwiZHJhd1wiXG4gICAgICAgICAgICA/IFwibGluZVwiXG4gICAgICAgICAgICA6IGVsZW1lbnQudHlwZSxcbiAgICAgICAgc3RhcnRCaW5kaW5nOiBlbGVtZW50LnN0YXJ0QmluZGluZyxcbiAgICAgICAgZW5kQmluZGluZzogZWxlbWVudC5lbmRCaW5kaW5nLFxuICAgICAgICBsYXN0Q29tbWl0dGVkUG9pbnQ6IG51bGwsXG4gICAgICAgIHN0YXJ0QXJyb3doZWFkLFxuICAgICAgICBlbmRBcnJvd2hlYWQsXG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBnZW5lcmljIGVsZW1lbnRzXG4gICAgY2FzZSBcImVsbGlwc2VcIjpcbiAgICAgIHJldHVybiByZXN0b3JlRWxlbWVudFdpdGhQcm9wZXJ0aWVzKGVsZW1lbnQsIHt9KTtcbiAgICBjYXNlIFwicmVjdGFuZ2xlXCI6XG4gICAgICByZXR1cm4gcmVzdG9yZUVsZW1lbnRXaXRoUHJvcGVydGllcyhlbGVtZW50LCB7fSk7XG4gICAgY2FzZSBcImRpYW1vbmRcIjpcbiAgICAgIHJldHVybiByZXN0b3JlRWxlbWVudFdpdGhQcm9wZXJ0aWVzKGVsZW1lbnQsIHt9KTtcblxuICAgIC8vIERvbid0IHVzZSBkZWZhdWx0IGNhc2Ugc28gYXMgdG8gY2F0Y2ggYSBtaXNzaW5nIGFuIGVsZW1lbnQgdHlwZSBjYXNlLlxuICAgIC8vIFdlIGFsc28gZG9uJ3Qgd2FudCB0byB0aHJvdywgYnV0IGluc3RlYWQgcmV0dXJuIHZvaWQgc28gd2UgZmlsdGVyXG4gICAgLy8gb3V0IHRoZXNlIHVuc3VwcG9ydGVkIGVsZW1lbnRzIGZyb20gdGhlIHJlc3RvcmVkIGFycmF5LlxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzdG9yZUVsZW1lbnRzID0gKFxuICBlbGVtZW50czogSW1wb3J0ZWREYXRhU3RhdGVbXCJlbGVtZW50c1wiXSxcbiAgLyoqIE5PVEUgZG9lc24ndCBzZXJ2ZSBmb3IgcmVjb25jaWxpYXRpb24gKi9cbiAgbG9jYWxFbGVtZW50czogcmVhZG9ubHkgRXhjYWxpZHJhd0VsZW1lbnRbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBFeGNhbGlkcmF3RWxlbWVudFtdID0+IHtcbiAgY29uc3QgbG9jYWxFbGVtZW50c01hcCA9IGxvY2FsRWxlbWVudHMgPyBhcnJheVRvTWFwKGxvY2FsRWxlbWVudHMpIDogbnVsbDtcbiAgcmV0dXJuIChlbGVtZW50cyB8fCBbXSkucmVkdWNlKChlbGVtZW50cywgZWxlbWVudCkgPT4ge1xuICAgIC8vIGZpbHRlcmluZyBvdXQgc2VsZWN0aW9uLCB3aGljaCBpcyBsZWdhY3ksIG5vIGxvbmdlciBrZXB0IGluIGVsZW1lbnRzLFxuICAgIC8vIGFuZCBjYXVzaW5nIGlzc3VlcyBpZiByZXRhaW5lZFxuICAgIGlmIChlbGVtZW50LnR5cGUgIT09IFwic2VsZWN0aW9uXCIgJiYgIWlzSW52aXNpYmx5U21hbGxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICBsZXQgbWlncmF0ZWRFbGVtZW50OiBFeGNhbGlkcmF3RWxlbWVudCB8IG51bGwgPSByZXN0b3JlRWxlbWVudChlbGVtZW50KTtcbiAgICAgIGlmIChtaWdyYXRlZEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgbG9jYWxFbGVtZW50ID0gbG9jYWxFbGVtZW50c01hcD8uZ2V0KGVsZW1lbnQuaWQpO1xuICAgICAgICBpZiAobG9jYWxFbGVtZW50ICYmIGxvY2FsRWxlbWVudC52ZXJzaW9uID4gbWlncmF0ZWRFbGVtZW50LnZlcnNpb24pIHtcbiAgICAgICAgICBtaWdyYXRlZEVsZW1lbnQgPSBidW1wVmVyc2lvbihtaWdyYXRlZEVsZW1lbnQsIGxvY2FsRWxlbWVudC52ZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cy5wdXNoKG1pZ3JhdGVkRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50cztcbiAgfSwgW10gYXMgRXhjYWxpZHJhd0VsZW1lbnRbXSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzdG9yZUFwcFN0YXRlID0gKFxuICBhcHBTdGF0ZTogSW1wb3J0ZWREYXRhU3RhdGVbXCJhcHBTdGF0ZVwiXSxcbiAgbG9jYWxBcHBTdGF0ZTogUGFydGlhbDxBcHBTdGF0ZT4gfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogUmVzdG9yZWRBcHBTdGF0ZSA9PiB7XG4gIGFwcFN0YXRlID0gYXBwU3RhdGUgfHwge307XG4gIGNvbnN0IGRlZmF1bHRBcHBTdGF0ZSA9IGdldERlZmF1bHRBcHBTdGF0ZSgpO1xuICBjb25zdCBuZXh0QXBwU3RhdGUgPSB7fSBhcyB0eXBlb2YgZGVmYXVsdEFwcFN0YXRlO1xuICBmb3IgKGNvbnN0IFtrZXksIGRlZmF1bHRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdEFwcFN0YXRlKSBhcyBbXG4gICAga2V5b2YgdHlwZW9mIGRlZmF1bHRBcHBTdGF0ZSxcbiAgICBhbnksXG4gIF1bXSkge1xuICAgIGNvbnN0IHN1cHBsaWVkVmFsdWUgPSBhcHBTdGF0ZVtrZXldO1xuICAgIGNvbnN0IGxvY2FsVmFsdWUgPSBsb2NhbEFwcFN0YXRlID8gbG9jYWxBcHBTdGF0ZVtrZXldIDogdW5kZWZpbmVkO1xuICAgIChuZXh0QXBwU3RhdGUgYXMgYW55KVtrZXldID1cbiAgICAgIHN1cHBsaWVkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHN1cHBsaWVkVmFsdWVcbiAgICAgICAgOiBsb2NhbFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBsb2NhbFZhbHVlXG4gICAgICAgIDogZGVmYXVsdFZhbHVlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEFwcFN0YXRlLFxuICAgIC8vIHJlc2V0IG9uIGZyZXNoIHJlc3RvcmUgc28gYXMgdG8gaGlkZSB0aGUgVUkgYnV0dG9uIGlmIHBlbk1vZGUgbm90IGFjdGl2ZVxuICAgIHBlbkRldGVjdGVkOlxuICAgICAgbG9jYWxBcHBTdGF0ZT8ucGVuRGV0ZWN0ZWQgPz9cbiAgICAgIChhcHBTdGF0ZS5wZW5Nb2RlID8gYXBwU3RhdGUucGVuRGV0ZWN0ZWQgPz8gZmFsc2UgOiBmYWxzZSksXG4gICAgYWN0aXZlVG9vbDoge1xuICAgICAgbGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXI6IG51bGwsXG4gICAgICBsb2NrZWQ6IG5leHRBcHBTdGF0ZS5hY3RpdmVUb29sLmxvY2tlZCA/PyBmYWxzZSxcbiAgICAgIHR5cGU6IEFsbG93ZWRFeGNhbGlkcmF3QWN0aXZlVG9vbHNbbmV4dEFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZV1cbiAgICAgICAgPyBuZXh0QXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlID8/IFwic2VsZWN0aW9uXCJcbiAgICAgICAgOiBcInNlbGVjdGlvblwiLFxuICAgIH0sXG4gICAgLy8gTWlncmF0ZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9uIHdoZXJlIGFwcFN0YXRlLnpvb20gd2FzIGEgbnVtYmVyXG4gICAgem9vbTpcbiAgICAgIHR5cGVvZiBhcHBTdGF0ZS56b29tID09PSBcIm51bWJlclwiXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdmFsdWU6IGFwcFN0YXRlLnpvb20gYXMgTm9ybWFsaXplZFpvb21WYWx1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogYXBwU3RhdGUuem9vbSB8fCBkZWZhdWx0QXBwU3RhdGUuem9vbSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXN0b3JlID0gKFxuICBkYXRhOiBJbXBvcnRlZERhdGFTdGF0ZSB8IG51bGwsXG4gIC8qKlxuICAgKiBMb2NhbCBBcHBTdGF0ZSAoYHRoaXMuc3RhdGVgIG9yIGluaXRpYWwgc3RhdGUgZnJvbSBsb2NhbFN0b3JhZ2UpIHNvIHRoYXQgd2VcbiAgICogZG9uJ3Qgb3ZlcndyaXRlIGxvY2FsIHN0YXRlIHdpdGggZGVmYXVsdCB2YWx1ZXMgKHdoZW4gdmFsdWVzIG5vdFxuICAgKiBleHBsaWNpdGx5IHNwZWNpZmllZCkuXG4gICAqIFN1cHBseSBgbnVsbGAgaWYgeW91IGNhbid0IGdldCBhY2Nlc3MgdG8gaXQuXG4gICAqL1xuICBsb2NhbEFwcFN0YXRlOiBQYXJ0aWFsPEFwcFN0YXRlPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGxvY2FsRWxlbWVudHM6IHJlYWRvbmx5IEV4Y2FsaWRyYXdFbGVtZW50W10gfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogUmVzdG9yZWREYXRhU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiByZXN0b3JlRWxlbWVudHMoZGF0YT8uZWxlbWVudHMsIGxvY2FsRWxlbWVudHMpLFxuICAgIGFwcFN0YXRlOiByZXN0b3JlQXBwU3RhdGUoZGF0YT8uYXBwU3RhdGUsIGxvY2FsQXBwU3RhdGUgfHwgbnVsbCksXG4gICAgZmlsZXM6IGRhdGE/LmZpbGVzIHx8IHt9LFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc3RvcmVMaWJyYXJ5SXRlbXMgPSAoXG4gIGxpYnJhcnlJdGVtczogTm9uT3B0aW9uYWw8SW1wb3J0ZWREYXRhU3RhdGVbXCJsaWJyYXJ5SXRlbXNcIl0+LFxuICBkZWZhdWx0U3RhdHVzOiBMaWJyYXJ5SXRlbVtcInN0YXR1c1wiXSxcbikgPT4ge1xuICBjb25zdCByZXN0b3JlZEl0ZW1zOiBMaWJyYXJ5SXRlbVtdID0gW107XG4gIGZvciAoY29uc3QgaXRlbSBvZiBsaWJyYXJ5SXRlbXMpIHtcbiAgICAvLyBtaWdyYXRlIG9sZGVyIGxpYnJhcmllc1xuICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICByZXN0b3JlZEl0ZW1zLnB1c2goe1xuICAgICAgICBzdGF0dXM6IGRlZmF1bHRTdGF0dXMsXG4gICAgICAgIGVsZW1lbnRzOiBpdGVtLFxuICAgICAgICBpZDogcmFuZG9tSWQoKSxcbiAgICAgICAgY3JlYXRlZDogRGF0ZS5ub3coKSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBfaXRlbSA9IGl0ZW0gYXMgTWFya09wdGlvbmFsPExpYnJhcnlJdGVtLCBcImlkXCIgfCBcInN0YXR1c1wiPjtcbiAgICAgIHJlc3RvcmVkSXRlbXMucHVzaCh7XG4gICAgICAgIC4uLl9pdGVtLFxuICAgICAgICBpZDogX2l0ZW0uaWQgfHwgcmFuZG9tSWQoKSxcbiAgICAgICAgc3RhdHVzOiBfaXRlbS5zdGF0dXMgfHwgZGVmYXVsdFN0YXR1cyxcbiAgICAgICAgY3JlYXRlZDogX2l0ZW0uY3JlYXRlZCB8fCBEYXRlLm5vdygpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN0b3JlZEl0ZW1zO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../data/restore.ts\n");
|
|
2211
2211
|
|
|
2212
2212
|
/***/ }),
|
|
2213
2213
|
|
|
@@ -2955,7 +2955,7 @@ module.exports = JSON.parse('{"ar-SA":94,"bg-BG":61,"bn-BD":0,"ca-ES":99,"cs-CZ"
|
|
|
2955
2955
|
/***/ ((module) => {
|
|
2956
2956
|
|
|
2957
2957
|
"use strict";
|
|
2958
|
-
module.exports = JSON.parse('{"name":"@dwelle/excalidraw","version":"0.3.
|
|
2958
|
+
module.exports = JSON.parse('{"name":"@dwelle/excalidraw","version":"0.3.57","main":"main.js","types":"types/packages/excalidraw/index.d.ts","files":["dist/*","types/*"],"publishConfig":{"access":"public"},"description":"Excalidraw as a React component","license":"MIT","keywords":[],"browserslist":{"production":[">0.2%","not dead","not ie <= 11","not op_mini all","not safari < 12","not kaios <= 2.5","not edge < 79","not chrome < 70","not and_uc < 13","not samsung < 10"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"peerDependencies":{"react":"^17.0.2","react-dom":"^17.0.2"},"devDependencies":{"@babel/core":"7.17.0","@babel/plugin-transform-arrow-functions":"7.16.7","@babel/plugin-transform-async-to-generator":"7.16.0","@babel/plugin-transform-runtime":"7.16.8","@babel/plugin-transform-typescript":"7.16.1","@babel/preset-env":"7.16.7","@babel/preset-react":"7.16.7","@babel/preset-typescript":"7.16.7","autoprefixer":"10.4.2","babel-loader":"8.2.3","babel-plugin-transform-class-properties":"6.24.1","cross-env":"7.0.3","css-loader":"6.7.1","mini-css-extract-plugin":"2.6.0","postcss-loader":"6.2.1","sass-loader":"12.4.0","terser-webpack-plugin":"5.3.1","ts-loader":"9.2.8","typescript":"4.5.4","webpack":"5.65.0","webpack-bundle-analyzer":"4.5.0","webpack-cli":"4.9.2","webpack-dev-server":"4.7.4","webpack-merge":"5.8.0"},"repository":"https://github.com/dwelle/excalidraw","homepage":"https://github.com/excalidraw/excalidraw/tree/master/src/packages/excalidraw","scripts":{"gen:types":"tsc --project ../../../tsconfig-types.json","build:umd":"rm -rf dist && cross-env NODE_ENV=production webpack --config webpack.prod.config.js && cross-env NODE_ENV=development webpack --config webpack.dev.config.js && yarn gen:types","build:umd:withAnalyzer":"cross-env NODE_ENV=production ANALYZER=true webpack --config webpack.prod.config.js","pack":"yarn build:umd && yarn pack","start":"webpack serve --config webpack.dev-server.config.js","install:deps":"yarn install --frozen-lockfile && yarn --cwd ../../../","build:example":"EXAMPLE=true webpack --config webpack.dev-server.config.js"},"dependencies":{"dotenv":"10.0.0"}}');
|
|
2959
2959
|
|
|
2960
2960
|
/***/ })
|
|
2961
2961
|
|