@excalidraw/excalidraw 0.13.0-75458c3 → 0.13.0-c8f6e3f
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.
|
@@ -2034,7 +2034,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2034
2034
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2035
2035
|
|
|
2036
2036
|
"use strict";
|
|
2037
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"trackEvent\": () => (/* binding */ trackEvent)\n/* harmony export */ });\nvar _a, _b;\nconst trackEvent = typeof process !== \"undefined\" &&\n ((_a = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.13.0-
|
|
2037
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"trackEvent\": () => (/* binding */ trackEvent)\n/* harmony export */ });\nvar _a, _b;\nconst trackEvent = typeof process !== \"undefined\" &&\n ((_a = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.13.0-c8f6e3f\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.REACT_APP_GOOGLE_ANALYTICS_ID) &&\n typeof window !== \"undefined\" &&\n window.gtag\n ? (category, action, label, value) => {\n try {\n window.gtag(\"event\", action, {\n event_category: category,\n event_label: label,\n value,\n });\n }\n catch (error) {\n console.error(\"error logging to ga\", error);\n }\n }\n : typeof process !== \"undefined\" && ((_b = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.13.0-c8f6e3f\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _b === void 0 ? void 0 : _b.JEST_WORKER_ID)\n ? (category, action, label, value) => { }\n : (category, action, label, value) => {\n // Uncomment the next line to track locally\n // console.log(\"Track Event\", { category, action, label, value });\n };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQ3JCLE9BQU8sT0FBTyxLQUFLLFdBQVc7S0FDOUIsaTRCQUFXLDBDQUFFLDZCQUE2QjtJQUMxQyxPQUFPLE1BQU0sS0FBSyxXQUFXO0lBQzdCLE1BQU0sQ0FBQyxJQUFJO0lBQ1QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQ25FLElBQUk7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQzNCLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsS0FBSzthQUNOLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLEtBQUksaTRCQUFXLDBDQUFFLGNBQWM7UUFDL0QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFLEdBQUUsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxLQUFjLEVBQUUsS0FBYyxFQUFFLEVBQUU7WUFDbkUsMkNBQTJDO1lBQzNDLGtFQUFrRTtRQUNwRSxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vYW5hbHl0aWNzLnRzPzVmMGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRyYWNrRXZlbnQgPVxuICB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBwcm9jZXNzLmVudj8uUkVBQ1RfQVBQX0dPT0dMRV9BTkFMWVRJQ1NfSUQgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICB3aW5kb3cuZ3RhZ1xuICAgID8gKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3aW5kb3cuZ3RhZyhcImV2ZW50XCIsIGFjdGlvbiwge1xuICAgICAgICAgICAgZXZlbnRfY2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgICAgICAgICAgZXZlbnRfbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIGxvZ2dpbmcgdG8gZ2FcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgOiB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudj8uSkVTVF9XT1JLRVJfSURcbiAgICA/IChjYXRlZ29yeTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHZhbHVlPzogbnVtYmVyKSA9PiB7fVxuICAgIDogKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gdHJhY2sgbG9jYWxseVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlRyYWNrIEV2ZW50XCIsIHsgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwsIHZhbHVlIH0pO1xuICAgICAgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
|
|
2038
2038
|
|
|
2039
2039
|
/***/ }),
|
|
2040
2040
|
|
|
@@ -2815,7 +2815,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2815
2815
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2816
2816
|
|
|
2817
2817
|
"use strict";
|
|
2818
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AllowedExcalidrawActiveTools\": () => (/* binding */ AllowedExcalidrawActiveTools),\n/* harmony export */ \"restore\": () => (/* binding */ restore),\n/* harmony export */ \"restoreAppState\": () => (/* binding */ restoreAppState),\n/* harmony export */ \"restoreElements\": () => (/* binding */ restoreElements),\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\n\n\n\n\n\n\n\n\nconst AllowedExcalidrawActiveTools = {\n selection: true,\n text: true,\n rectangle: true,\n diamond: true,\n ellipse: true,\n line: true,\n image: true,\n arrow: true,\n freedraw: true,\n eraser: false,\n custom: true,\n};\nconst getFontFamilyByName = (fontFamilyName) => {\n if (Object.keys(_constants__WEBPACK_IMPORTED_MODULE_3__.FONT_FAMILY).includes(fontFamilyName)) {\n return _constants__WEBPACK_IMPORTED_MODULE_3__.FONT_FAMILY[fontFamilyName];\n }\n return _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_FONT_FAMILY;\n};\nconst restoreElementWithProperties = (element, extra) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n const base = {\n type: extra.type || element.type,\n // all elements must have version > 0 so getSceneVersion() will pick up\n // newly added elements\n version: element.version || 1,\n versionNonce: (_a = element.versionNonce) !== null && _a !== void 0 ? _a : 0,\n isDeleted: (_b = element.isDeleted) !== null && _b !== void 0 ? _b : false,\n id: element.id || (0,_random__WEBPACK_IMPORTED_MODULE_2__.randomId)(),\n fillStyle: element.fillStyle || \"hachure\",\n strokeWidth: element.strokeWidth || 1,\n strokeStyle: (_c = element.strokeStyle) !== null && _c !== void 0 ? _c : \"solid\",\n roughness: (_d = element.roughness) !== null && _d !== void 0 ? _d : 1,\n opacity: element.opacity == null ? 100 : element.opacity,\n angle: element.angle || 0,\n x: (_f = (_e = extra.x) !== null && _e !== void 0 ? _e : element.x) !== null && _f !== void 0 ? _f : 0,\n y: (_h = (_g = extra.y) !== null && _g !== void 0 ? _g : element.y) !== null && _h !== void 0 ? _h : 0,\n strokeColor: element.strokeColor,\n backgroundColor: element.backgroundColor,\n width: element.width || 0,\n height: element.height || 0,\n seed: (_j = element.seed) !== null && _j !== void 0 ? _j : 1,\n groupIds: (_k = element.groupIds) !== null && _k !== void 0 ? _k : [],\n strokeSharpness: (_l = element.strokeSharpness) !== null && _l !== void 0 ? _l : ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_1__.isLinearElementType)(element.type) ? \"round\" : \"sharp\"),\n boundElements: element.boundElementIds\n ? element.boundElementIds.map((id) => ({ type: \"arrow\", id }))\n : (_m = element.boundElements) !== null && _m !== void 0 ? _m : [],\n updated: (_o = element.updated) !== null && _o !== void 0 ? _o : (0,_utils__WEBPACK_IMPORTED_MODULE_7__.getUpdatedTimestamp)(),\n link: (_p = element.link) !== null && _p !== void 0 ? _p : null,\n locked: (_q = element.locked) !== null && _q !== void 0 ? _q : false,\n };\n if (\"customData\" in element) {\n base.customData = element.customData;\n }\n if (_constants__WEBPACK_IMPORTED_MODULE_3__.PRECEDING_ELEMENT_KEY in element) {\n base[_constants__WEBPACK_IMPORTED_MODULE_3__.PRECEDING_ELEMENT_KEY] = element[_constants__WEBPACK_IMPORTED_MODULE_3__.PRECEDING_ELEMENT_KEY];\n }\n return Object.assign(Object.assign(Object.assign({}, base), (0,_element__WEBPACK_IMPORTED_MODULE_0__.getNormalizedDimensions)(base)), extra);\n};\nconst restoreElement = (element) => {\n var _a, _b;\n switch (element.type) {\n case \"text\":\n let fontSize = element.fontSize;\n let fontFamily = element.fontFamily;\n if (\"font\" in element) {\n const [fontPx, _fontFamily] = element.font.split(\" \");\n fontSize = parseInt(fontPx, 10);\n fontFamily = getFontFamilyByName(_fontFamily);\n }\n return restoreElementWithProperties(element, {\n fontSize,\n fontFamily,\n text: (_a = element.text) !== null && _a !== void 0 ? _a : \"\",\n baseline: element.baseline,\n textAlign: element.textAlign || _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_TEXT_ALIGN,\n verticalAlign: element.verticalAlign || _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_VERTICAL_ALIGN,\n containerId: (_b = element.containerId) !== null && _b !== void 0 ? _b : null,\n originalText: element.originalText || element.text,\n });\n case \"freedraw\": {\n return restoreElementWithProperties(element, {\n points: element.points,\n lastCommittedPoint: null,\n simulatePressure: element.simulatePressure,\n pressures: element.pressures,\n });\n }\n case \"image\":\n return restoreElementWithProperties(element, {\n status: element.status || \"pending\",\n fileId: element.fileId,\n scale: element.scale || [1, 1],\n });\n case \"line\":\n // @ts-ignore LEGACY type\n // eslint-disable-next-line no-fallthrough\n case \"draw\":\n case \"arrow\": {\n const { startArrowhead = null, endArrowhead = element.type === \"arrow\" ? \"arrow\" : null, } = element;\n let x = element.x;\n let y = element.y;\n let points = // migrate old arrow model to new one\n !Array.isArray(element.points) || element.points.length < 2\n ? [\n [0, 0],\n [element.width, element.height],\n ]\n : element.points;\n if (points[0][0] !== 0 || points[0][1] !== 0) {\n ({ points, x, y } = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_5__.LinearElementEditor.getNormalizedPoints(element));\n }\n return restoreElementWithProperties(element, {\n type: element.type === \"draw\"\n ? \"line\"\n : element.type,\n startBinding: element.startBinding,\n endBinding: element.endBinding,\n lastCommittedPoint: null,\n startArrowhead,\n endArrowhead,\n points,\n x,\n y,\n });\n }\n // generic elements\n case \"ellipse\":\n return restoreElementWithProperties(element, {});\n case \"rectangle\":\n return restoreElementWithProperties(element, {});\n case \"diamond\":\n return restoreElementWithProperties(element, {});\n // Don't use default case so as to catch a missing an element type case.\n // We also don't want to throw, but instead return void so we filter\n // out these unsupported elements from the restored array.\n }\n};\nconst restoreElements = (elements, \n/** NOTE doesn't serve for reconciliation */\nlocalElements) => {\n const localElementsMap = localElements ? (0,_utils__WEBPACK_IMPORTED_MODULE_7__.arrayToMap)(localElements) : null;\n return (elements || []).reduce((elements, element) => {\n // filtering out selection, which is legacy, no longer kept in elements,\n // and causing issues if retained\n if (element.type !== \"selection\" && !(0,_element__WEBPACK_IMPORTED_MODULE_0__.isInvisiblySmallElement)(element)) {\n let migratedElement = restoreElement(element);\n if (migratedElement) {\n const localElement = localElementsMap === null || localElementsMap === void 0 ? void 0 : localElementsMap.get(element.id);\n if (localElement && localElement.version > migratedElement.version) {\n migratedElement = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_6__.bumpVersion)(migratedElement, localElement.version);\n }\n elements.push(migratedElement);\n }\n }\n return elements;\n }, []);\n};\nconst coalesceAppStateValue = (key, appState, defaultAppState) => {\n const value = appState[key];\n // NOTE the value! assertion is needed in TS 4.5.5 (fixed in newer versions)\n return value !== undefined ? value : defaultAppState[key];\n};\nconst LegacyAppStateMigrations = {\n isLibraryOpen: (appState, defaultAppState) => {\n return [\n \"openSidebar\",\n \"isLibraryOpen\" in appState\n ? appState.isLibraryOpen\n ? \"library\"\n : null\n : coalesceAppStateValue(\"openSidebar\", appState, defaultAppState),\n ];\n },\n isLibraryMenuDocked: (appState, defaultAppState) => {\n var _a;\n return [\n \"isSidebarDocked\",\n (_a = appState.isLibraryMenuDocked) !== null && _a !== void 0 ? _a : coalesceAppStateValue(\"isSidebarDocked\", appState, defaultAppState),\n ];\n },\n};\nconst restoreAppState = (appState, localAppState) => {\n var _a, _b, _c;\n appState = appState || {};\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_4__.getDefaultAppState)();\n const nextAppState = {};\n // first, migrate all legacy AppState properties to new ones. We do it\n // in one go before migrate the rest of the properties in case the new ones\n // depend on checking any other key (i.e. they are coupled)\n for (const legacyKey of Object.keys(LegacyAppStateMigrations)) {\n if (legacyKey in appState) {\n const [nextKey, nextValue] = LegacyAppStateMigrations[legacyKey](appState, defaultAppState);\n nextAppState[nextKey] = nextValue;\n }\n }\n for (const [key, defaultValue] of Object.entries(defaultAppState)) {\n // if AppState contains a legacy key, prefer that one and migrate its\n // value to the new one\n const suppliedValue = appState[key];\n const localValue = localAppState ? localAppState[key] : undefined;\n nextAppState[key] =\n suppliedValue !== undefined\n ? suppliedValue\n : localValue !== undefined\n ? localValue\n : defaultValue;\n }\n return Object.assign(Object.assign({}, nextAppState), { cursorButton: (localAppState === null || localAppState === void 0 ? void 0 : localAppState.cursorButton) || \"up\", \n // reset on fresh restore so as to hide the UI button if penMode not active\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: Object.assign(Object.assign({}, (0,_utils__WEBPACK_IMPORTED_MODULE_7__.updateActiveTool)(defaultAppState, nextAppState.activeTool.type &&\n AllowedExcalidrawActiveTools[nextAppState.activeTool.type]\n ? nextAppState.activeTool\n : { type: \"selection\" })), { lastActiveToolBeforeEraser: null, locked: (_c = nextAppState.activeTool.locked) !== null && _c !== void 0 ? _c : false }), \n // Migrates from previous version where appState.zoom was a number\n zoom: typeof appState.zoom === \"number\"\n ? {\n value: appState.zoom,\n }\n : appState.zoom || defaultAppState.zoom, \n // when sidebar docked and user left it open in last session,\n // keep it open. If not docked, keep it closed irrespective of last state.\n openSidebar: nextAppState.openSidebar === \"library\"\n ? nextAppState.isSidebarDocked\n ? \"library\"\n : null\n : nextAppState.openSidebar });\n};\nconst restore = (data, \n/**\n * Local AppState (`this.state` or initial state from localStorage) so that we\n * don't overwrite local state with default values (when values not\n * explicitly specified).\n * Supply `null` if you can't get access to it.\n */\nlocalAppState, localElements) => {\n return {\n elements: restoreElements(data === null || data === void 0 ? void 0 : data.elements, localElements),\n appState: restoreAppState(data === null || data === void 0 ? void 0 : data.appState, localAppState || null),\n files: (data === null || data === void 0 ? void 0 : data.files) || {},\n };\n};\nconst restoreLibraryItem = (libraryItem) => {\n const elements = restoreElements((0,_element__WEBPACK_IMPORTED_MODULE_0__.getNonDeletedElements)(libraryItem.elements), null);\n return elements.length ? Object.assign(Object.assign({}, libraryItem), { elements }) : null;\n};\nconst restoreLibraryItems = (libraryItems = [], defaultStatus) => {\n const restoredItems = [];\n for (const item of libraryItems) {\n // migrate older libraries\n if (Array.isArray(item)) {\n const restoredItem = restoreLibraryItem({\n status: defaultStatus,\n elements: item,\n id: (0,_random__WEBPACK_IMPORTED_MODULE_2__.randomId)(),\n created: Date.now(),\n });\n if (restoredItem) {\n restoredItems.push(restoredItem);\n }\n }\n else {\n const _item = item;\n const restoredItem = restoreLibraryItem(Object.assign(Object.assign({}, _item), { id: _item.id || (0,_random__WEBPACK_IMPORTED_MODULE_2__.randomId)(), status: _item.status || defaultStatus, created: _item.created || Date.now() }));\n if (restoredItem) {\n restoredItems.push(restoredItem);\n }\n }\n }\n return restoredItems;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUssQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUNwQyxDQUFDO1lBQ0gsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbEM7U0FDRjtLQUNGO0lBQ0QsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2RhdGEvcmVzdG9yZS50cz84NzIwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEV4Y2FsaWRyYXdFbGVtZW50LFxuICBFeGNhbGlkcmF3U2VsZWN0aW9uRWxlbWVudCxcbiAgRm9udEZhbWlseVZhbHVlcyxcbn0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7XG4gIEFwcFN0YXRlLFxuICBCaW5hcnlGaWxlcyxcbiAgTGlicmFyeUl0ZW0sXG4gIE5vcm1hbGl6ZWRab29tVmFsdWUsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgSW1wb3J0ZWREYXRhU3RhdGUsIExlZ2FjeUFwcFN0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIGdldE5vbkRlbGV0ZWRFbGVtZW50cyxcbiAgZ2V0Tm9ybWFsaXplZERpbWVuc2lvbnMsXG4gIGlzSW52aXNpYmx5U21hbGxFbGVtZW50LFxufSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgaXNMaW5lYXJFbGVtZW50VHlwZSB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVDaGVja3NcIjtcbmltcG9ydCB7IHJhbmRvbUlkIH0gZnJvbSBcIi4uL3JhbmRvbVwiO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9GT05UX0ZBTUlMWSxcbiAgREVGQVVMVF9URVhUX0FMSUdOLFxuICBERUZBVUxUX1ZFUlRJQ0FMX0FMSUdOLFxuICBQUkVDRURJTkdfRUxFTUVOVF9LRVksXG4gIEZPTlRfRkFNSUxZLFxufSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0QXBwU3RhdGUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcbmltcG9ydCB7IExpbmVhckVsZW1lbnRFZGl0b3IgfSBmcm9tIFwiLi4vZWxlbWVudC9saW5lYXJFbGVtZW50RWRpdG9yXCI7XG5pbXBvcnQgeyBidW1wVmVyc2lvbiB9IGZyb20gXCIuLi9lbGVtZW50L211dGF0ZUVsZW1lbnRcIjtcbmltcG9ydCB7IGdldFVwZGF0ZWRUaW1lc3RhbXAsIHVwZGF0ZUFjdGl2ZVRvb2wgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IGFycmF5VG9NYXAgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxudHlwZSBSZXN0b3JlZEFwcFN0YXRlID0gT21pdDxcbiAgQXBwU3RhdGUsXG4gIFwib2Zmc2V0VG9wXCIgfCBcIm9mZnNldExlZnRcIiB8IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCJcbj47XG5cbmV4cG9ydCBjb25zdCBBbGxvd2VkRXhjYWxpZHJhd0FjdGl2ZVRvb2xzOiBSZWNvcmQ8XG4gIEFwcFN0YXRlW1wiYWN0aXZlVG9vbFwiXVtcInR5cGVcIl0sXG4gIGJvb2xlYW5cbj4gPSB7XG4gIHNlbGVjdGlvbjogdHJ1ZSxcbiAgdGV4dDogdHJ1ZSxcbiAgcmVjdGFuZ2xlOiB0cnVlLFxuICBkaWFtb25kOiB0cnVlLFxuICBlbGxpcHNlOiB0cnVlLFxuICBsaW5lOiB0cnVlLFxuICBpbWFnZTogdHJ1ZSxcbiAgYXJyb3c6IHRydWUsXG4gIGZyZWVkcmF3OiB0cnVlLFxuICBlcmFzZXI6IGZhbHNlLFxuICBjdXN0b206IHRydWUsXG59O1xuXG5leHBvcnQgdHlwZSBSZXN0b3JlZERhdGFTdGF0ZSA9IHtcbiAgZWxlbWVudHM6IEV4Y2FsaWRyYXdFbGVtZW50W107XG4gIGFwcFN0YXRlOiBSZXN0b3JlZEFwcFN0YXRlO1xuICBmaWxlczogQmluYXJ5RmlsZXM7XG59O1xuXG5jb25zdCBnZXRGb250RmFtaWx5QnlOYW1lID0gKGZvbnRGYW1pbHlOYW1lOiBzdHJpbmcpOiBGb250RmFtaWx5VmFsdWVzID0+IHtcbiAgaWYgKE9iamVjdC5rZXlzKEZPTlRfRkFNSUxZKS5pbmNsdWRlcyhmb250RmFtaWx5TmFtZSkpIHtcbiAgICByZXR1cm4gRk9OVF9GQU1JTFlbXG4gICAgICBmb250RmFtaWx5TmFtZSBhcyBrZXlvZiB0eXBlb2YgRk9OVF9GQU1JTFlcbiAgICBdIGFzIEZvbnRGYW1pbHlWYWx1ZXM7XG4gIH1cbiAgcmV0dXJuIERFRkFVTFRfRk9OVF9GQU1JTFk7XG59O1xuXG5jb25zdCByZXN0b3JlRWxlbWVudFdpdGhQcm9wZXJ0aWVzID0gPFxuICBUIGV4dGVuZHMgUmVxdWlyZWQ8T21pdDxFeGNhbGlkcmF3RWxlbWVudCwgXCJjdXN0b21EYXRhXCI+PiAmIHtcbiAgICBjdXN0b21EYXRhPzogRXhjYWxpZHJhd0VsZW1lbnRbXCJjdXN0b21EYXRhXCJdO1xuICAgIC8qKiBAZGVwcmVjYXRlZCAqL1xuICAgIGJvdW5kRWxlbWVudElkcz86IHJlYWRvbmx5IEV4Y2FsaWRyYXdFbGVtZW50W1wiaWRcIl1bXTtcbiAgICAvKiogbWV0YWRhdGEgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiBlbGVtZW50cyBkdXJpbmcgY29sbGFib3JhdGlvbiAqL1xuICAgIFtQUkVDRURJTkdfRUxFTUVOVF9LRVldPzogc3RyaW5nO1xuICB9LFxuICBLIGV4dGVuZHMgUGljazxULCBrZXlvZiBPbWl0PFJlcXVpcmVkPFQ+LCBrZXlvZiBFeGNhbGlkcmF3RWxlbWVudD4+LFxuPihcbiAgZWxlbWVudDogVCxcbiAgZXh0cmE6IFBpY2s8XG4gICAgVCxcbiAgICAvLyBUaGlzIGV4dHJhIFBpY2s8VCwga2V5b2YgSz4gZW5zdXJlIG5vIGV4Y2VzcyBwcm9wZXJ0aWVzIGFyZSBwYXNzZWQuXG4gICAgLy8gQHRzLWlnbm9yZSBUUyBjb21wbGFpbnMgaGVyZSBidXQgdHlwZSBjaGVja3MgdGhlIGNhbGwgc2l0ZXMgZmluZS5cbiAgICBrZXlvZiBLXG4gID4gJlxuICAgIFBhcnRpYWw8UGljazxFeGNhbGlkcmF3RWxlbWVudCwgXCJ0eXBlXCIgfCBcInhcIiB8IFwieVwiPj4sXG4pOiBUID0+IHtcbiAgY29uc3QgYmFzZTogUGljazxULCBrZXlvZiBFeGNhbGlkcmF3RWxlbWVudD4gJiB7XG4gICAgW1BSRUNFRElOR19FTEVNRU5UX0tFWV0/OiBzdHJpbmc7XG4gIH0gPSB7XG4gICAgdHlwZTogZXh0cmEudHlwZSB8fCBlbGVtZW50LnR5cGUsXG4gICAgLy8gYWxsIGVsZW1lbnRzIG11c3QgaGF2ZSB2ZXJzaW9uID4gMCBzbyBnZXRTY2VuZVZlcnNpb24oKSB3aWxsIHBpY2sgdXBcbiAgICAvLyBuZXdseSBhZGRlZCBlbGVtZW50c1xuICAgIHZlcnNpb246IGVsZW1lbnQudmVyc2lvbiB8fCAxLFxuICAgIHZlcnNpb25Ob25jZTogZWxlbWVudC52ZXJzaW9uTm9uY2UgPz8gMCxcbiAgICBpc0RlbGV0ZWQ6IGVsZW1lbnQuaXNEZWxldGVkID8/IGZhbHNlLFxuICAgIGlkOiBlbGVtZW50LmlkIHx8IHJhbmRvbUlkKCksXG4gICAgZmlsbFN0eWxlOiBlbGVtZW50LmZpbGxTdHlsZSB8fCBcImhhY2h1cmVcIixcbiAgICBzdHJva2VXaWR0aDogZWxlbWVudC5zdHJva2VXaWR0aCB8fCAxLFxuICAgIHN0cm9rZVN0eWxlOiBlbGVtZW50LnN0cm9rZVN0eWxlID8/IFwic29saWRcIixcbiAgICByb3VnaG5lc3M6IGVsZW1lbnQucm91Z2huZXNzID8/IDEsXG4gICAgb3BhY2l0eTogZWxlbWVudC5vcGFjaXR5ID09IG51bGwgPyAxMDAgOiBlbGVtZW50Lm9wYWNpdHksXG4gICAgYW5nbGU6IGVsZW1lbnQuYW5nbGUgfHwgMCxcbiAgICB4OiBleHRyYS54ID8/IGVsZW1lbnQueCA/PyAwLFxuICAgIHk6IGV4dHJhLnkgPz8gZWxlbWVudC55ID8/IDAsXG4gICAgc3Ryb2tlQ29sb3I6IGVsZW1lbnQuc3Ryb2tlQ29sb3IsXG4gICAgYmFja2dyb3VuZENvbG9yOiBlbGVtZW50LmJhY2tncm91bmRDb2xvcixcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCB8fCAwLFxuICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHQgfHwgMCxcbiAgICBzZWVkOiBlbGVtZW50LnNlZWQgPz8gMSxcbiAgICBncm91cElkczogZWxlbWVudC5ncm91cElkcyA/PyBbXSxcbiAgICBzdHJva2VTaGFycG5lc3M6XG4gICAgICBlbGVtZW50LnN0cm9rZVNoYXJwbmVzcyA/P1xuICAgICAgKGlzTGluZWFyRWxlbWVudFR5cGUoZWxlbWVudC50eXBlKSA/IFwicm91bmRcIiA6IFwic2hhcnBcIiksXG4gICAgYm91bmRFbGVtZW50czogZWxlbWVudC5ib3VuZEVsZW1lbnRJZHNcbiAgICAgID8gZWxlbWVudC5ib3VuZEVsZW1lbnRJZHMubWFwKChpZCkgPT4gKHsgdHlwZTogXCJhcnJvd1wiLCBpZCB9KSlcbiAgICAgIDogZWxlbWVudC5ib3VuZEVsZW1lbnRzID8/IFtdLFxuICAgIHVwZGF0ZWQ6IGVsZW1lbnQudXBkYXRlZCA/PyBnZXRVcGRhdGVkVGltZXN0YW1wKCksXG4gICAgbGluazogZWxlbWVudC5saW5rID8/IG51bGwsXG4gICAgbG9ja2VkOiBlbGVtZW50LmxvY2tlZCA/PyBmYWxzZSxcbiAgfTtcblxuICBpZiAoXCJjdXN0b21EYXRhXCIgaW4gZWxlbWVudCkge1xuICAgIGJhc2UuY3VzdG9tRGF0YSA9IGVsZW1lbnQuY3VzdG9tRGF0YTtcbiAgfVxuXG4gIGlmIChQUkVDRURJTkdfRUxFTUVOVF9LRVkgaW4gZWxlbWVudCkge1xuICAgIGJhc2VbUFJFQ0VESU5HX0VMRU1FTlRfS0VZXSA9IGVsZW1lbnRbUFJFQ0VESU5HX0VMRU1FTlRfS0VZXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uYmFzZSxcbiAgICAuLi5nZXROb3JtYWxpemVkRGltZW5zaW9ucyhiYXNlKSxcbiAgICAuLi5leHRyYSxcbiAgfSBhcyB1bmtub3duIGFzIFQ7XG59O1xuXG5jb25zdCByZXN0b3JlRWxlbWVudCA9IChcbiAgZWxlbWVudDogRXhjbHVkZTxFeGNhbGlkcmF3RWxlbWVudCwgRXhjYWxpZHJhd1NlbGVjdGlvbkVsZW1lbnQ+LFxuKTogdHlwZW9mIGVsZW1lbnQgfCBudWxsID0+IHtcbiAgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcbiAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgbGV0IGZvbnRTaXplID0gZWxlbWVudC5mb250U2l6ZTtcbiAgICAgIGxldCBmb250RmFtaWx5ID0gZWxlbWVudC5mb250RmFtaWx5O1xuICAgICAgaWYgKFwiZm9udFwiIGluIGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgW2ZvbnRQeCwgX2ZvbnRGYW1pbHldOiBbc3RyaW5nLCBzdHJpbmddID0gKFxuICAgICAgICAgIGVsZW1lbnQgYXMgYW55XG4gICAgICAgICkuZm9udC5zcGxpdChcIiBcIik7XG4gICAgICAgIGZvbnRTaXplID0gcGFyc2VJbnQoZm9udFB4LCAxMCk7XG4gICAgICAgIGZvbnRGYW1pbHkgPSBnZXRGb250RmFtaWx5QnlOYW1lKF9mb250RmFtaWx5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN0b3JlRWxlbWVudFdpdGhQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIHRleHQ6IGVsZW1lbnQudGV4dCA/PyBcIlwiLFxuICAgICAgICBiYXNlbGluZTogZWxlbWVudC5iYXNlbGluZSxcbiAgICAgICAgdGV4dEFsaWduOiBlbGVtZW50LnRleHRBbGlnbiB8fCBERUZBVUxUX1RFWFRfQUxJR04sXG4gICAgICAgIHZlcnRpY2FsQWxpZ246IGVsZW1lbnQudmVydGljYWxBbGlnbiB8fCBERUZBVUxUX1ZFUlRJQ0FMX0FMSUdOLFxuICAgICAgICBjb250YWluZXJJZDogZWxlbWVudC5jb250YWluZXJJZCA/PyBudWxsLFxuICAgICAgICBvcmlnaW5hbFRleHQ6IGVsZW1lbnQub3JpZ2luYWxUZXh0IHx8IGVsZW1lbnQudGV4dCxcbiAgICAgIH0pO1xuICAgIGNhc2UgXCJmcmVlZHJhd1wiOiB7XG4gICAgICByZXR1cm4gcmVzdG9yZUVsZW1lbnRXaXRoUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIHBvaW50czogZWxlbWVudC5wb2ludHMsXG4gICAgICAgIGxhc3RDb21taXR0ZWRQb2ludDogbnVsbCxcbiAgICAgICAgc2ltdWxhdGVQcmVzc3VyZTogZWxlbWVudC5zaW11bGF0ZVByZXNzdXJlLFxuICAgICAgICBwcmVzc3VyZXM6IGVsZW1lbnQucHJlc3N1cmVzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgcmV0dXJuIHJlc3RvcmVFbGVtZW50V2l0aFByb3BlcnRpZXMoZWxlbWVudCwge1xuICAgICAgICBzdGF0dXM6IGVsZW1lbnQuc3RhdHVzIHx8IFwicGVuZGluZ1wiLFxuICAgICAgICBmaWxlSWQ6IGVsZW1lbnQuZmlsZUlkLFxuICAgICAgICBzY2FsZTogZWxlbWVudC5zY2FsZSB8fCBbMSwgMV0sXG4gICAgICB9KTtcbiAgICBjYXNlIFwibGluZVwiOlxuICAgIC8vIEB0cy1pZ25vcmUgTEVHQUNZIHR5cGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICBjYXNlIFwiZHJhd1wiOlxuICAgIGNhc2UgXCJhcnJvd1wiOiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0YXJ0QXJyb3doZWFkID0gbnVsbCxcbiAgICAgICAgZW5kQXJyb3doZWFkID0gZWxlbWVudC50eXBlID09PSBcImFycm93XCIgPyBcImFycm93XCIgOiBudWxsLFxuICAgICAgfSA9IGVsZW1lbnQ7XG5cbiAgICAgIGxldCB4ID0gZWxlbWVudC54O1xuICAgICAgbGV0IHkgPSBlbGVtZW50Lnk7XG4gICAgICBsZXQgcG9pbnRzID0gLy8gbWlncmF0ZSBvbGQgYXJyb3cgbW9kZWwgdG8gbmV3IG9uZVxuICAgICAgICAhQXJyYXkuaXNBcnJheShlbGVtZW50LnBvaW50cykgfHwgZWxlbWVudC5wb2ludHMubGVuZ3RoIDwgMlxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBbMCwgMF0sXG4gICAgICAgICAgICAgIFtlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodF0sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBlbGVtZW50LnBvaW50cztcblxuICAgICAgaWYgKHBvaW50c1swXVswXSAhPT0gMCB8fCBwb2ludHNbMF1bMV0gIT09IDApIHtcbiAgICAgICAgKHsgcG9pbnRzLCB4LCB5IH0gPSBMaW5lYXJFbGVtZW50RWRpdG9yLmdldE5vcm1hbGl6ZWRQb2ludHMoZWxlbWVudCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdG9yZUVsZW1lbnRXaXRoUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIHR5cGU6XG4gICAgICAgICAgKGVsZW1lbnQudHlwZSBhcyBFeGNhbGlkcmF3RWxlbWVudFtcInR5cGVcIl0gfCBcImRyYXdcIikgPT09IFwiZHJhd1wiXG4gICAgICAgICAgICA/IFwibGluZVwiXG4gICAgICAgICAgICA6IGVsZW1lbnQudHlwZSxcbiAgICAgICAgc3RhcnRCaW5kaW5nOiBlbGVtZW50LnN0YXJ0QmluZGluZyxcbiAgICAgICAgZW5kQmluZGluZzogZWxlbWVudC5lbmRCaW5kaW5nLFxuICAgICAgICBsYXN0Q29tbWl0dGVkUG9pbnQ6IG51bGwsXG4gICAgICAgIHN0YXJ0QXJyb3doZWFkLFxuICAgICAgICBlbmRBcnJvd2hlYWQsXG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGdlbmVyaWMgZWxlbWVudHNcbiAgICBjYXNlIFwiZWxsaXBzZVwiOlxuICAgICAgcmV0dXJuIHJlc3RvcmVFbGVtZW50V2l0aFByb3BlcnRpZXMoZWxlbWVudCwge30pO1xuICAgIGNhc2UgXCJyZWN0YW5nbGVcIjpcbiAgICAgIHJldHVybiByZXN0b3JlRWxlbWVudFdpdGhQcm9wZXJ0aWVzKGVsZW1lbnQsIHt9KTtcbiAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgICAgcmV0dXJuIHJlc3RvcmVFbGVtZW50V2l0aFByb3BlcnRpZXMoZWxlbWVudCwge30pO1xuXG4gICAgLy8gRG9uJ3QgdXNlIGRlZmF1bHQgY2FzZSBzbyBhcyB0byBjYXRjaCBhIG1pc3NpbmcgYW4gZWxlbWVudCB0eXBlIGNhc2UuXG4gICAgLy8gV2UgYWxzbyBkb24ndCB3YW50IHRvIHRocm93LCBidXQgaW5zdGVhZCByZXR1cm4gdm9pZCBzbyB3ZSBmaWx0ZXJcbiAgICAvLyBvdXQgdGhlc2UgdW5zdXBwb3J0ZWQgZWxlbWVudHMgZnJvbSB0aGUgcmVzdG9yZWQgYXJyYXkuXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZXN0b3JlRWxlbWVudHMgPSAoXG4gIGVsZW1lbnRzOiBJbXBvcnRlZERhdGFTdGF0ZVtcImVsZW1lbnRzXCJdLFxuICAvKiogTk9URSBkb2Vzbid0IHNlcnZlIGZvciByZWNvbmNpbGlhdGlvbiAqL1xuICBsb2NhbEVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdIHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IEV4Y2FsaWRyYXdFbGVtZW50W10gPT4ge1xuICBjb25zdCBsb2NhbEVsZW1lbnRzTWFwID0gbG9jYWxFbGVtZW50cyA/IGFycmF5VG9NYXAobG9jYWxFbGVtZW50cykgOiBudWxsO1xuICByZXR1cm4gKGVsZW1lbnRzIHx8IFtdKS5yZWR1Y2UoKGVsZW1lbnRzLCBlbGVtZW50KSA9PiB7XG4gICAgLy8gZmlsdGVyaW5nIG91dCBzZWxlY3Rpb24sIHdoaWNoIGlzIGxlZ2FjeSwgbm8gbG9uZ2VyIGtlcHQgaW4gZWxlbWVudHMsXG4gICAgLy8gYW5kIGNhdXNpbmcgaXNzdWVzIGlmIHJldGFpbmVkXG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gXCJzZWxlY3Rpb25cIiAmJiAhaXNJbnZpc2libHlTbWFsbEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgIGxldCBtaWdyYXRlZEVsZW1lbnQ6IEV4Y2FsaWRyYXdFbGVtZW50IHwgbnVsbCA9IHJlc3RvcmVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgaWYgKG1pZ3JhdGVkRWxlbWVudCkge1xuICAgICAgICBjb25zdCBsb2NhbEVsZW1lbnQgPSBsb2NhbEVsZW1lbnRzTWFwPy5nZXQoZWxlbWVudC5pZCk7XG4gICAgICAgIGlmIChsb2NhbEVsZW1lbnQgJiYgbG9jYWxFbGVtZW50LnZlcnNpb24gPiBtaWdyYXRlZEVsZW1lbnQudmVyc2lvbikge1xuICAgICAgICAgIG1pZ3JhdGVkRWxlbWVudCA9IGJ1bXBWZXJzaW9uKG1pZ3JhdGVkRWxlbWVudCwgbG9jYWxFbGVtZW50LnZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzLnB1c2gobWlncmF0ZWRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9LCBbXSBhcyBFeGNhbGlkcmF3RWxlbWVudFtdKTtcbn07XG5cbmNvbnN0IGNvYWxlc2NlQXBwU3RhdGVWYWx1ZSA9IDxcbiAgVCBleHRlbmRzIGtleW9mIFJldHVyblR5cGU8dHlwZW9mIGdldERlZmF1bHRBcHBTdGF0ZT4sXG4+KFxuICBrZXk6IFQsXG4gIGFwcFN0YXRlOiBFeGNsdWRlPEltcG9ydGVkRGF0YVN0YXRlW1wiYXBwU3RhdGVcIl0sIG51bGwgfCB1bmRlZmluZWQ+LFxuICBkZWZhdWx0QXBwU3RhdGU6IFJldHVyblR5cGU8dHlwZW9mIGdldERlZmF1bHRBcHBTdGF0ZT4sXG4pID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhcHBTdGF0ZVtrZXldO1xuICAvLyBOT1RFIHRoZSB2YWx1ZSEgYXNzZXJ0aW9uIGlzIG5lZWRlZCBpbiBUUyA0LjUuNSAoZml4ZWQgaW4gbmV3ZXIgdmVyc2lvbnMpXG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUhIDogZGVmYXVsdEFwcFN0YXRlW2tleV07XG59O1xuXG5jb25zdCBMZWdhY3lBcHBTdGF0ZU1pZ3JhdGlvbnM6IHtcbiAgW0sgaW4ga2V5b2YgTGVnYWN5QXBwU3RhdGVdOiAoXG4gICAgSW1wb3J0ZWREYXRhU3RhdGU6IEV4Y2x1ZGU8SW1wb3J0ZWREYXRhU3RhdGVbXCJhcHBTdGF0ZVwiXSwgbnVsbCB8IHVuZGVmaW5lZD4sXG4gICAgZGVmYXVsdEFwcFN0YXRlOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREZWZhdWx0QXBwU3RhdGU+LFxuICApID0+IFtMZWdhY3lBcHBTdGF0ZVtLXVsxXSwgQXBwU3RhdGVbTGVnYWN5QXBwU3RhdGVbS11bMV1dXTtcbn0gPSB7XG4gIGlzTGlicmFyeU9wZW46IChhcHBTdGF0ZSwgZGVmYXVsdEFwcFN0YXRlKSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFwib3BlblNpZGViYXJcIixcbiAgICAgIFwiaXNMaWJyYXJ5T3BlblwiIGluIGFwcFN0YXRlXG4gICAgICAgID8gYXBwU3RhdGUuaXNMaWJyYXJ5T3BlblxuICAgICAgICAgID8gXCJsaWJyYXJ5XCJcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgOiBjb2FsZXNjZUFwcFN0YXRlVmFsdWUoXCJvcGVuU2lkZWJhclwiLCBhcHBTdGF0ZSwgZGVmYXVsdEFwcFN0YXRlKSxcbiAgICBdO1xuICB9LFxuICBpc0xpYnJhcnlNZW51RG9ja2VkOiAoYXBwU3RhdGUsIGRlZmF1bHRBcHBTdGF0ZSkgPT4ge1xuICAgIHJldHVybiBbXG4gICAgICBcImlzU2lkZWJhckRvY2tlZFwiLFxuICAgICAgYXBwU3RhdGUuaXNMaWJyYXJ5TWVudURvY2tlZCA/P1xuICAgICAgICBjb2FsZXNjZUFwcFN0YXRlVmFsdWUoXCJpc1NpZGViYXJEb2NrZWRcIiwgYXBwU3RhdGUsIGRlZmF1bHRBcHBTdGF0ZSksXG4gICAgXTtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCByZXN0b3JlQXBwU3RhdGUgPSAoXG4gIGFwcFN0YXRlOiBJbXBvcnRlZERhdGFTdGF0ZVtcImFwcFN0YXRlXCJdLFxuICBsb2NhbEFwcFN0YXRlOiBQYXJ0aWFsPEFwcFN0YXRlPiB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBSZXN0b3JlZEFwcFN0YXRlID0+IHtcbiAgYXBwU3RhdGUgPSBhcHBTdGF0ZSB8fCB7fTtcbiAgY29uc3QgZGVmYXVsdEFwcFN0YXRlID0gZ2V0RGVmYXVsdEFwcFN0YXRlKCk7XG4gIGNvbnN0IG5leHRBcHBTdGF0ZSA9IHt9IGFzIHR5cGVvZiBkZWZhdWx0QXBwU3RhdGU7XG5cbiAgLy8gZmlyc3QsIG1pZ3JhdGUgYWxsIGxlZ2FjeSBBcHBTdGF0ZSBwcm9wZXJ0aWVzIHRvIG5ldyBvbmVzLiBXZSBkbyBpdFxuICAvLyBpbiBvbmUgZ28gYmVmb3JlIG1pZ3JhdGUgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnRpZXMgaW4gY2FzZSB0aGUgbmV3IG9uZXNcbiAgLy8gZGVwZW5kIG9uIGNoZWNraW5nIGFueSBvdGhlciBrZXkgKGkuZS4gdGhleSBhcmUgY291cGxlZClcbiAgZm9yIChjb25zdCBsZWdhY3lLZXkgb2YgT2JqZWN0LmtleXMoXG4gICAgTGVnYWN5QXBwU3RhdGVNaWdyYXRpb25zLFxuICApIGFzIChrZXlvZiB0eXBlb2YgTGVnYWN5QXBwU3RhdGVNaWdyYXRpb25zKVtdKSB7XG4gICAgaWYgKGxlZ2FjeUtleSBpbiBhcHBTdGF0ZSkge1xuICAgICAgY29uc3QgW25leHRLZXksIG5leHRWYWx1ZV0gPSBMZWdhY3lBcHBTdGF0ZU1pZ3JhdGlvbnNbbGVnYWN5S2V5XShcbiAgICAgICAgYXBwU3RhdGUsXG4gICAgICAgIGRlZmF1bHRBcHBTdGF0ZSxcbiAgICAgICk7XG4gICAgICAobmV4dEFwcFN0YXRlIGFzIGFueSlbbmV4dEtleV0gPSBuZXh0VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCBkZWZhdWx0VmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRlZmF1bHRBcHBTdGF0ZSkgYXMgW1xuICAgIGtleW9mIHR5cGVvZiBkZWZhdWx0QXBwU3RhdGUsXG4gICAgYW55LFxuICBdW10pIHtcbiAgICAvLyBpZiBBcHBTdGF0ZSBjb250YWlucyBhIGxlZ2FjeSBrZXksIHByZWZlciB0aGF0IG9uZSBhbmQgbWlncmF0ZSBpdHNcbiAgICAvLyB2YWx1ZSB0byB0aGUgbmV3IG9uZVxuICAgIGNvbnN0IHN1cHBsaWVkVmFsdWUgPSBhcHBTdGF0ZVtrZXldO1xuXG4gICAgY29uc3QgbG9jYWxWYWx1ZSA9IGxvY2FsQXBwU3RhdGUgPyBsb2NhbEFwcFN0YXRlW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgKG5leHRBcHBTdGF0ZSBhcyBhbnkpW2tleV0gPVxuICAgICAgc3VwcGxpZWRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3VwcGxpZWRWYWx1ZVxuICAgICAgICA6IGxvY2FsVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGxvY2FsVmFsdWVcbiAgICAgICAgOiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLm5leHRBcHBTdGF0ZSxcbiAgICBjdXJzb3JCdXR0b246IGxvY2FsQXBwU3RhdGU/LmN1cnNvckJ1dHRvbiB8fCBcInVwXCIsXG4gICAgLy8gcmVzZXQgb24gZnJlc2ggcmVzdG9yZSBzbyBhcyB0byBoaWRlIHRoZSBVSSBidXR0b24gaWYgcGVuTW9kZSBub3QgYWN0aXZlXG4gICAgcGVuRGV0ZWN0ZWQ6XG4gICAgICBsb2NhbEFwcFN0YXRlPy5wZW5EZXRlY3RlZCA/P1xuICAgICAgKGFwcFN0YXRlLnBlbk1vZGUgPyBhcHBTdGF0ZS5wZW5EZXRlY3RlZCA/PyBmYWxzZSA6IGZhbHNlKSxcbiAgICBhY3RpdmVUb29sOiB7XG4gICAgICAuLi51cGRhdGVBY3RpdmVUb29sKFxuICAgICAgICBkZWZhdWx0QXBwU3RhdGUsXG4gICAgICAgIG5leHRBcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgJiZcbiAgICAgICAgICBBbGxvd2VkRXhjYWxpZHJhd0FjdGl2ZVRvb2xzW25leHRBcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGVdXG4gICAgICAgICAgPyBuZXh0QXBwU3RhdGUuYWN0aXZlVG9vbFxuICAgICAgICAgIDogeyB0eXBlOiBcInNlbGVjdGlvblwiIH0sXG4gICAgICApLFxuICAgICAgbGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXI6IG51bGwsXG4gICAgICBsb2NrZWQ6IG5leHRBcHBTdGF0ZS5hY3RpdmVUb29sLmxvY2tlZCA/PyBmYWxzZSxcbiAgICB9LFxuICAgIC8vIE1pZ3JhdGVzIGZyb20gcHJldmlvdXMgdmVyc2lvbiB3aGVyZSBhcHBTdGF0ZS56b29tIHdhcyBhIG51bWJlclxuICAgIHpvb206XG4gICAgICB0eXBlb2YgYXBwU3RhdGUuem9vbSA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHZhbHVlOiBhcHBTdGF0ZS56b29tIGFzIE5vcm1hbGl6ZWRab29tVmFsdWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IGFwcFN0YXRlLnpvb20gfHwgZGVmYXVsdEFwcFN0YXRlLnpvb20sXG4gICAgLy8gd2hlbiBzaWRlYmFyIGRvY2tlZCBhbmQgdXNlciBsZWZ0IGl0IG9wZW4gaW4gbGFzdCBzZXNzaW9uLFxuICAgIC8vIGtlZXAgaXQgb3Blbi4gSWYgbm90IGRvY2tlZCwga2VlcCBpdCBjbG9zZWQgaXJyZXNwZWN0aXZlIG9mIGxhc3Qgc3RhdGUuXG4gICAgb3BlblNpZGViYXI6XG4gICAgICBuZXh0QXBwU3RhdGUub3BlblNpZGViYXIgPT09IFwibGlicmFyeVwiXG4gICAgICAgID8gbmV4dEFwcFN0YXRlLmlzU2lkZWJhckRvY2tlZFxuICAgICAgICAgID8gXCJsaWJyYXJ5XCJcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgOiBuZXh0QXBwU3RhdGUub3BlblNpZGViYXIsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcmVzdG9yZSA9IChcbiAgZGF0YTogUGljazxJbXBvcnRlZERhdGFTdGF0ZSwgXCJhcHBTdGF0ZVwiIHwgXCJlbGVtZW50c1wiIHwgXCJmaWxlc1wiPiB8IG51bGwsXG4gIC8qKlxuICAgKiBMb2NhbCBBcHBTdGF0ZSAoYHRoaXMuc3RhdGVgIG9yIGluaXRpYWwgc3RhdGUgZnJvbSBsb2NhbFN0b3JhZ2UpIHNvIHRoYXQgd2VcbiAgICogZG9uJ3Qgb3ZlcndyaXRlIGxvY2FsIHN0YXRlIHdpdGggZGVmYXVsdCB2YWx1ZXMgKHdoZW4gdmFsdWVzIG5vdFxuICAgKiBleHBsaWNpdGx5IHNwZWNpZmllZCkuXG4gICAqIFN1cHBseSBgbnVsbGAgaWYgeW91IGNhbid0IGdldCBhY2Nlc3MgdG8gaXQuXG4gICAqL1xuICBsb2NhbEFwcFN0YXRlOiBQYXJ0aWFsPEFwcFN0YXRlPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGxvY2FsRWxlbWVudHM6IHJlYWRvbmx5IEV4Y2FsaWRyYXdFbGVtZW50W10gfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogUmVzdG9yZWREYXRhU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiByZXN0b3JlRWxlbWVudHMoZGF0YT8uZWxlbWVudHMsIGxvY2FsRWxlbWVudHMpLFxuICAgIGFwcFN0YXRlOiByZXN0b3JlQXBwU3RhdGUoZGF0YT8uYXBwU3RhdGUsIGxvY2FsQXBwU3RhdGUgfHwgbnVsbCksXG4gICAgZmlsZXM6IGRhdGE/LmZpbGVzIHx8IHt9LFxuICB9O1xufTtcblxuY29uc3QgcmVzdG9yZUxpYnJhcnlJdGVtID0gKGxpYnJhcnlJdGVtOiBMaWJyYXJ5SXRlbSkgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IHJlc3RvcmVFbGVtZW50cyhcbiAgICBnZXROb25EZWxldGVkRWxlbWVudHMobGlicmFyeUl0ZW0uZWxlbWVudHMpLFxuICAgIG51bGwsXG4gICk7XG4gIHJldHVybiBlbGVtZW50cy5sZW5ndGggPyB7IC4uLmxpYnJhcnlJdGVtLCBlbGVtZW50cyB9IDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCByZXN0b3JlTGlicmFyeUl0ZW1zID0gKFxuICBsaWJyYXJ5SXRlbXM6IEltcG9ydGVkRGF0YVN0YXRlW1wibGlicmFyeUl0ZW1zXCJdID0gW10sXG4gIGRlZmF1bHRTdGF0dXM6IExpYnJhcnlJdGVtW1wic3RhdHVzXCJdLFxuKSA9PiB7XG4gIGNvbnN0IHJlc3RvcmVkSXRlbXM6IExpYnJhcnlJdGVtW10gPSBbXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGxpYnJhcnlJdGVtcykge1xuICAgIC8vIG1pZ3JhdGUgb2xkZXIgbGlicmFyaWVzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgIGNvbnN0IHJlc3RvcmVkSXRlbSA9IHJlc3RvcmVMaWJyYXJ5SXRlbSh7XG4gICAgICAgIHN0YXR1czogZGVmYXVsdFN0YXR1cyxcbiAgICAgICAgZWxlbWVudHM6IGl0ZW0sXG4gICAgICAgIGlkOiByYW5kb21JZCgpLFxuICAgICAgICBjcmVhdGVkOiBEYXRlLm5vdygpLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzdG9yZWRJdGVtKSB7XG4gICAgICAgIHJlc3RvcmVkSXRlbXMucHVzaChyZXN0b3JlZEl0ZW0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBfaXRlbSA9IGl0ZW0gYXMgTWFya09wdGlvbmFsPFxuICAgICAgICBMaWJyYXJ5SXRlbSxcbiAgICAgICAgXCJpZFwiIHwgXCJzdGF0dXNcIiB8IFwiY3JlYXRlZFwiXG4gICAgICA+O1xuICAgICAgY29uc3QgcmVzdG9yZWRJdGVtID0gcmVzdG9yZUxpYnJhcnlJdGVtKHtcbiAgICAgICAgLi4uX2l0ZW0sXG4gICAgICAgIGlkOiBfaXRlbS5pZCB8fCByYW5kb21JZCgpLFxuICAgICAgICBzdGF0dXM6IF9pdGVtLnN0YXR1cyB8fCBkZWZhdWx0U3RhdHVzLFxuICAgICAgICBjcmVhdGVkOiBfaXRlbS5jcmVhdGVkIHx8IERhdGUubm93KCksXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN0b3JlZEl0ZW0pIHtcbiAgICAgICAgcmVzdG9yZWRJdGVtcy5wdXNoKHJlc3RvcmVkSXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN0b3JlZEl0ZW1zO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../data/restore.ts\n");
|
|
2818
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AllowedExcalidrawActiveTools\": () => (/* binding */ AllowedExcalidrawActiveTools),\n/* harmony export */ \"restore\": () => (/* binding */ restore),\n/* harmony export */ \"restoreAppState\": () => (/* binding */ restoreAppState),\n/* harmony export */ \"restoreElements\": () => (/* binding */ restoreElements),\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\n\n\n\n\n\n\n\n\nconst AllowedExcalidrawActiveTools = {\n selection: true,\n text: true,\n rectangle: true,\n diamond: true,\n ellipse: true,\n line: true,\n image: true,\n arrow: true,\n freedraw: true,\n eraser: false,\n custom: true,\n};\nconst getFontFamilyByName = (fontFamilyName) => {\n if (Object.keys(_constants__WEBPACK_IMPORTED_MODULE_3__.FONT_FAMILY).includes(fontFamilyName)) {\n return _constants__WEBPACK_IMPORTED_MODULE_3__.FONT_FAMILY[fontFamilyName];\n }\n return _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_FONT_FAMILY;\n};\nconst restoreElementWithProperties = (element, extra) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n const base = {\n type: extra.type || element.type,\n // all elements must have version > 0 so getSceneVersion() will pick up\n // newly added elements\n version: element.version || 1,\n versionNonce: (_a = element.versionNonce) !== null && _a !== void 0 ? _a : 0,\n isDeleted: (_b = element.isDeleted) !== null && _b !== void 0 ? _b : false,\n id: element.id || (0,_random__WEBPACK_IMPORTED_MODULE_2__.randomId)(),\n fillStyle: element.fillStyle || \"hachure\",\n strokeWidth: element.strokeWidth || 1,\n strokeStyle: (_c = element.strokeStyle) !== null && _c !== void 0 ? _c : \"solid\",\n roughness: (_d = element.roughness) !== null && _d !== void 0 ? _d : 1,\n opacity: element.opacity == null ? 100 : element.opacity,\n angle: element.angle || 0,\n x: (_f = (_e = extra.x) !== null && _e !== void 0 ? _e : element.x) !== null && _f !== void 0 ? _f : 0,\n y: (_h = (_g = extra.y) !== null && _g !== void 0 ? _g : element.y) !== null && _h !== void 0 ? _h : 0,\n strokeColor: element.strokeColor,\n backgroundColor: element.backgroundColor,\n width: element.width || 0,\n height: element.height || 0,\n seed: (_j = element.seed) !== null && _j !== void 0 ? _j : 1,\n groupIds: (_k = element.groupIds) !== null && _k !== void 0 ? _k : [],\n strokeSharpness: (_l = element.strokeSharpness) !== null && _l !== void 0 ? _l : ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_1__.isLinearElementType)(element.type) ? \"round\" : \"sharp\"),\n boundElements: element.boundElementIds\n ? element.boundElementIds.map((id) => ({ type: \"arrow\", id }))\n : (_m = element.boundElements) !== null && _m !== void 0 ? _m : [],\n updated: (_o = element.updated) !== null && _o !== void 0 ? _o : (0,_utils__WEBPACK_IMPORTED_MODULE_7__.getUpdatedTimestamp)(),\n link: (_p = element.link) !== null && _p !== void 0 ? _p : null,\n locked: (_q = element.locked) !== null && _q !== void 0 ? _q : false,\n };\n if (\"customData\" in element) {\n base.customData = element.customData;\n }\n if (_constants__WEBPACK_IMPORTED_MODULE_3__.PRECEDING_ELEMENT_KEY in element) {\n base[_constants__WEBPACK_IMPORTED_MODULE_3__.PRECEDING_ELEMENT_KEY] = element[_constants__WEBPACK_IMPORTED_MODULE_3__.PRECEDING_ELEMENT_KEY];\n }\n return Object.assign(Object.assign(Object.assign({}, base), (0,_element__WEBPACK_IMPORTED_MODULE_0__.getNormalizedDimensions)(base)), extra);\n};\nconst restoreElement = (element, refreshDimensions = true) => {\n var _a, _b;\n switch (element.type) {\n case \"text\":\n let fontSize = element.fontSize;\n let fontFamily = element.fontFamily;\n if (\"font\" in element) {\n const [fontPx, _fontFamily] = element.font.split(\" \");\n fontSize = parseInt(fontPx, 10);\n fontFamily = getFontFamilyByName(_fontFamily);\n }\n element = restoreElementWithProperties(element, {\n fontSize,\n fontFamily,\n text: (_a = element.text) !== null && _a !== void 0 ? _a : \"\",\n baseline: element.baseline,\n textAlign: element.textAlign || _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_TEXT_ALIGN,\n verticalAlign: element.verticalAlign || _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_VERTICAL_ALIGN,\n containerId: (_b = element.containerId) !== null && _b !== void 0 ? _b : null,\n originalText: element.originalText || element.text,\n });\n if (refreshDimensions) {\n element = Object.assign(Object.assign({}, element), (0,_element__WEBPACK_IMPORTED_MODULE_0__.refreshTextDimensions)(element));\n }\n return element;\n case \"freedraw\": {\n return restoreElementWithProperties(element, {\n points: element.points,\n lastCommittedPoint: null,\n simulatePressure: element.simulatePressure,\n pressures: element.pressures,\n });\n }\n case \"image\":\n return restoreElementWithProperties(element, {\n status: element.status || \"pending\",\n fileId: element.fileId,\n scale: element.scale || [1, 1],\n });\n case \"line\":\n // @ts-ignore LEGACY type\n // eslint-disable-next-line no-fallthrough\n case \"draw\":\n case \"arrow\": {\n const { startArrowhead = null, endArrowhead = element.type === \"arrow\" ? \"arrow\" : null, } = element;\n let x = element.x;\n let y = element.y;\n let points = // migrate old arrow model to new one\n !Array.isArray(element.points) || element.points.length < 2\n ? [\n [0, 0],\n [element.width, element.height],\n ]\n : element.points;\n if (points[0][0] !== 0 || points[0][1] !== 0) {\n ({ points, x, y } = _element_linearElementEditor__WEBPACK_IMPORTED_MODULE_5__.LinearElementEditor.getNormalizedPoints(element));\n }\n return restoreElementWithProperties(element, {\n type: element.type === \"draw\"\n ? \"line\"\n : element.type,\n startBinding: element.startBinding,\n endBinding: element.endBinding,\n lastCommittedPoint: null,\n startArrowhead,\n endArrowhead,\n points,\n x,\n y,\n });\n }\n // generic elements\n case \"ellipse\":\n return restoreElementWithProperties(element, {});\n case \"rectangle\":\n return restoreElementWithProperties(element, {});\n case \"diamond\":\n return restoreElementWithProperties(element, {});\n // Don't use default case so as to catch a missing an element type case.\n // We also don't want to throw, but instead return void so we filter\n // out these unsupported elements from the restored array.\n }\n};\nconst restoreElements = (elements, \n/** NOTE doesn't serve for reconciliation */\nlocalElements, refreshDimensions = true) => {\n const localElementsMap = localElements ? (0,_utils__WEBPACK_IMPORTED_MODULE_7__.arrayToMap)(localElements) : null;\n return (elements || []).reduce((elements, element) => {\n // filtering out selection, which is legacy, no longer kept in elements,\n // and causing issues if retained\n if (element.type !== \"selection\" && !(0,_element__WEBPACK_IMPORTED_MODULE_0__.isInvisiblySmallElement)(element)) {\n let migratedElement = restoreElement(element, refreshDimensions);\n if (migratedElement) {\n const localElement = localElementsMap === null || localElementsMap === void 0 ? void 0 : localElementsMap.get(element.id);\n if (localElement && localElement.version > migratedElement.version) {\n migratedElement = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_6__.bumpVersion)(migratedElement, localElement.version);\n }\n elements.push(migratedElement);\n }\n }\n return elements;\n }, []);\n};\nconst coalesceAppStateValue = (key, appState, defaultAppState) => {\n const value = appState[key];\n // NOTE the value! assertion is needed in TS 4.5.5 (fixed in newer versions)\n return value !== undefined ? value : defaultAppState[key];\n};\nconst LegacyAppStateMigrations = {\n isLibraryOpen: (appState, defaultAppState) => {\n return [\n \"openSidebar\",\n \"isLibraryOpen\" in appState\n ? appState.isLibraryOpen\n ? \"library\"\n : null\n : coalesceAppStateValue(\"openSidebar\", appState, defaultAppState),\n ];\n },\n isLibraryMenuDocked: (appState, defaultAppState) => {\n var _a;\n return [\n \"isSidebarDocked\",\n (_a = appState.isLibraryMenuDocked) !== null && _a !== void 0 ? _a : coalesceAppStateValue(\"isSidebarDocked\", appState, defaultAppState),\n ];\n },\n};\nconst restoreAppState = (appState, localAppState) => {\n var _a, _b, _c;\n appState = appState || {};\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_4__.getDefaultAppState)();\n const nextAppState = {};\n // first, migrate all legacy AppState properties to new ones. We do it\n // in one go before migrate the rest of the properties in case the new ones\n // depend on checking any other key (i.e. they are coupled)\n for (const legacyKey of Object.keys(LegacyAppStateMigrations)) {\n if (legacyKey in appState) {\n const [nextKey, nextValue] = LegacyAppStateMigrations[legacyKey](appState, defaultAppState);\n nextAppState[nextKey] = nextValue;\n }\n }\n for (const [key, defaultValue] of Object.entries(defaultAppState)) {\n // if AppState contains a legacy key, prefer that one and migrate its\n // value to the new one\n const suppliedValue = appState[key];\n const localValue = localAppState ? localAppState[key] : undefined;\n nextAppState[key] =\n suppliedValue !== undefined\n ? suppliedValue\n : localValue !== undefined\n ? localValue\n : defaultValue;\n }\n return Object.assign(Object.assign({}, nextAppState), { cursorButton: (localAppState === null || localAppState === void 0 ? void 0 : localAppState.cursorButton) || \"up\", \n // reset on fresh restore so as to hide the UI button if penMode not active\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: Object.assign(Object.assign({}, (0,_utils__WEBPACK_IMPORTED_MODULE_7__.updateActiveTool)(defaultAppState, nextAppState.activeTool.type &&\n AllowedExcalidrawActiveTools[nextAppState.activeTool.type]\n ? nextAppState.activeTool\n : { type: \"selection\" })), { lastActiveToolBeforeEraser: null, locked: (_c = nextAppState.activeTool.locked) !== null && _c !== void 0 ? _c : false }), \n // Migrates from previous version where appState.zoom was a number\n zoom: typeof appState.zoom === \"number\"\n ? {\n value: appState.zoom,\n }\n : appState.zoom || defaultAppState.zoom, \n // when sidebar docked and user left it open in last session,\n // keep it open. If not docked, keep it closed irrespective of last state.\n openSidebar: nextAppState.openSidebar === \"library\"\n ? nextAppState.isSidebarDocked\n ? \"library\"\n : null\n : nextAppState.openSidebar });\n};\nconst restore = (data, \n/**\n * Local AppState (`this.state` or initial state from localStorage) so that we\n * don't overwrite local state with default values (when values not\n * explicitly specified).\n * Supply `null` if you can't get access to it.\n */\nlocalAppState, localElements) => {\n return {\n elements: restoreElements(data === null || data === void 0 ? void 0 : data.elements, localElements, true),\n appState: restoreAppState(data === null || data === void 0 ? void 0 : data.appState, localAppState || null),\n files: (data === null || data === void 0 ? void 0 : data.files) || {},\n };\n};\nconst restoreLibraryItem = (libraryItem) => {\n const elements = restoreElements((0,_element__WEBPACK_IMPORTED_MODULE_0__.getNonDeletedElements)(libraryItem.elements), null);\n return elements.length ? Object.assign(Object.assign({}, libraryItem), { elements }) : null;\n};\nconst restoreLibraryItems = (libraryItems = [], defaultStatus) => {\n const restoredItems = [];\n for (const item of libraryItems) {\n // migrate older libraries\n if (Array.isArray(item)) {\n const restoredItem = restoreLibraryItem({\n status: defaultStatus,\n elements: item,\n id: (0,_random__WEBPACK_IMPORTED_MODULE_2__.randomId)(),\n created: Date.now(),\n });\n if (restoredItem) {\n restoredItems.push(restoredItem);\n }\n }\n else {\n const _item = item;\n const restoredItem = restoreLibraryItem(Object.assign(Object.assign({}, _item), { id: _item.id || (0,_random__WEBPACK_IMPORTED_MODULE_2__.randomId)(), status: _item.status || defaultStatus, created: _item.created || Date.now() }));\n if (restoredItem) {\n restoredItems.push(restoredItem);\n }\n }\n }\n return restoredItems;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RjthQUFNO1lBQ0wsTUFBTSxLQUFLLEdBQUcsSUFHYixDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLGlDQUNsQyxLQUFLLEtBQ1IsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksaURBQVEsRUFBRSxFQUMxQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxhQUFhLEVBQ3JDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFDcEMsQ0FBQztZQUNILElBQUksWUFBWSxFQUFFO2dCQUNoQixhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2xDO1NBQ0Y7S0FDRjtJQUNELE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9kYXRhL3Jlc3RvcmUudHM/ODcyMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFeGNhbGlkcmF3RWxlbWVudCxcbiAgRXhjYWxpZHJhd1NlbGVjdGlvbkVsZW1lbnQsXG4gIEZvbnRGYW1pbHlWYWx1ZXMsXG59IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQge1xuICBBcHBTdGF0ZSxcbiAgQmluYXJ5RmlsZXMsXG4gIExpYnJhcnlJdGVtLFxuICBOb3JtYWxpemVkWm9vbVZhbHVlLFxufSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IEltcG9ydGVkRGF0YVN0YXRlLCBMZWdhY3lBcHBTdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQge1xuICBnZXROb25EZWxldGVkRWxlbWVudHMsXG4gIGdldE5vcm1hbGl6ZWREaW1lbnNpb25zLFxuICBpc0ludmlzaWJseVNtYWxsRWxlbWVudCxcbiAgcmVmcmVzaFRleHREaW1lbnNpb25zLFxufSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgaXNMaW5lYXJFbGVtZW50VHlwZSB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVDaGVja3NcIjtcbmltcG9ydCB7IHJhbmRvbUlkIH0gZnJvbSBcIi4uL3JhbmRvbVwiO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9GT05UX0ZBTUlMWSxcbiAgREVGQVVMVF9URVhUX0FMSUdOLFxuICBERUZBVUxUX1ZFUlRJQ0FMX0FMSUdOLFxuICBQUkVDRURJTkdfRUxFTUVOVF9LRVksXG4gIEZPTlRfRkFNSUxZLFxufSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0QXBwU3RhdGUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcbmltcG9ydCB7IExpbmVhckVsZW1lbnRFZGl0b3IgfSBmcm9tIFwiLi4vZWxlbWVudC9saW5lYXJFbGVtZW50RWRpdG9yXCI7XG5pbXBvcnQgeyBidW1wVmVyc2lvbiB9IGZyb20gXCIuLi9lbGVtZW50L211dGF0ZUVsZW1lbnRcIjtcbmltcG9ydCB7IGdldFVwZGF0ZWRUaW1lc3RhbXAsIHVwZGF0ZUFjdGl2ZVRvb2wgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IGFycmF5VG9NYXAgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxudHlwZSBSZXN0b3JlZEFwcFN0YXRlID0gT21pdDxcbiAgQXBwU3RhdGUsXG4gIFwib2Zmc2V0VG9wXCIgfCBcIm9mZnNldExlZnRcIiB8IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCJcbj47XG5cbmV4cG9ydCBjb25zdCBBbGxvd2VkRXhjYWxpZHJhd0FjdGl2ZVRvb2xzOiBSZWNvcmQ8XG4gIEFwcFN0YXRlW1wiYWN0aXZlVG9vbFwiXVtcInR5cGVcIl0sXG4gIGJvb2xlYW5cbj4gPSB7XG4gIHNlbGVjdGlvbjogdHJ1ZSxcbiAgdGV4dDogdHJ1ZSxcbiAgcmVjdGFuZ2xlOiB0cnVlLFxuICBkaWFtb25kOiB0cnVlLFxuICBlbGxpcHNlOiB0cnVlLFxuICBsaW5lOiB0cnVlLFxuICBpbWFnZTogdHJ1ZSxcbiAgYXJyb3c6IHRydWUsXG4gIGZyZWVkcmF3OiB0cnVlLFxuICBlcmFzZXI6IGZhbHNlLFxuICBjdXN0b206IHRydWUsXG59O1xuXG5leHBvcnQgdHlwZSBSZXN0b3JlZERhdGFTdGF0ZSA9IHtcbiAgZWxlbWVudHM6IEV4Y2FsaWRyYXdFbGVtZW50W107XG4gIGFwcFN0YXRlOiBSZXN0b3JlZEFwcFN0YXRlO1xuICBmaWxlczogQmluYXJ5RmlsZXM7XG59O1xuXG5jb25zdCBnZXRGb250RmFtaWx5QnlOYW1lID0gKGZvbnRGYW1pbHlOYW1lOiBzdHJpbmcpOiBGb250RmFtaWx5VmFsdWVzID0+IHtcbiAgaWYgKE9iamVjdC5rZXlzKEZPTlRfRkFNSUxZKS5pbmNsdWRlcyhmb250RmFtaWx5TmFtZSkpIHtcbiAgICByZXR1cm4gRk9OVF9GQU1JTFlbXG4gICAgICBmb250RmFtaWx5TmFtZSBhcyBrZXlvZiB0eXBlb2YgRk9OVF9GQU1JTFlcbiAgICBdIGFzIEZvbnRGYW1pbHlWYWx1ZXM7XG4gIH1cbiAgcmV0dXJuIERFRkFVTFRfRk9OVF9GQU1JTFk7XG59O1xuXG5jb25zdCByZXN0b3JlRWxlbWVudFdpdGhQcm9wZXJ0aWVzID0gPFxuICBUIGV4dGVuZHMgUmVxdWlyZWQ8T21pdDxFeGNhbGlkcmF3RWxlbWVudCwgXCJjdXN0b21EYXRhXCI+PiAmIHtcbiAgICBjdXN0b21EYXRhPzogRXhjYWxpZHJhd0VsZW1lbnRbXCJjdXN0b21EYXRhXCJdO1xuICAgIC8qKiBAZGVwcmVjYXRlZCAqL1xuICAgIGJvdW5kRWxlbWVudElkcz86IHJlYWRvbmx5IEV4Y2FsaWRyYXdFbGVtZW50W1wiaWRcIl1bXTtcbiAgICAvKiogbWV0YWRhdGEgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiBlbGVtZW50cyBkdXJpbmcgY29sbGFib3JhdGlvbiAqL1xuICAgIFtQUkVDRURJTkdfRUxFTUVOVF9LRVldPzogc3RyaW5nO1xuICB9LFxuICBLIGV4dGVuZHMgUGljazxULCBrZXlvZiBPbWl0PFJlcXVpcmVkPFQ+LCBrZXlvZiBFeGNhbGlkcmF3RWxlbWVudD4+LFxuPihcbiAgZWxlbWVudDogVCxcbiAgZXh0cmE6IFBpY2s8XG4gICAgVCxcbiAgICAvLyBUaGlzIGV4dHJhIFBpY2s8VCwga2V5b2YgSz4gZW5zdXJlIG5vIGV4Y2VzcyBwcm9wZXJ0aWVzIGFyZSBwYXNzZWQuXG4gICAgLy8gQHRzLWlnbm9yZSBUUyBjb21wbGFpbnMgaGVyZSBidXQgdHlwZSBjaGVja3MgdGhlIGNhbGwgc2l0ZXMgZmluZS5cbiAgICBrZXlvZiBLXG4gID4gJlxuICAgIFBhcnRpYWw8UGljazxFeGNhbGlkcmF3RWxlbWVudCwgXCJ0eXBlXCIgfCBcInhcIiB8IFwieVwiPj4sXG4pOiBUID0+IHtcbiAgY29uc3QgYmFzZTogUGljazxULCBrZXlvZiBFeGNhbGlkcmF3RWxlbWVudD4gJiB7XG4gICAgW1BSRUNFRElOR19FTEVNRU5UX0tFWV0/OiBzdHJpbmc7XG4gIH0gPSB7XG4gICAgdHlwZTogZXh0cmEudHlwZSB8fCBlbGVtZW50LnR5cGUsXG4gICAgLy8gYWxsIGVsZW1lbnRzIG11c3QgaGF2ZSB2ZXJzaW9uID4gMCBzbyBnZXRTY2VuZVZlcnNpb24oKSB3aWxsIHBpY2sgdXBcbiAgICAvLyBuZXdseSBhZGRlZCBlbGVtZW50c1xuICAgIHZlcnNpb246IGVsZW1lbnQudmVyc2lvbiB8fCAxLFxuICAgIHZlcnNpb25Ob25jZTogZWxlbWVudC52ZXJzaW9uTm9uY2UgPz8gMCxcbiAgICBpc0RlbGV0ZWQ6IGVsZW1lbnQuaXNEZWxldGVkID8/IGZhbHNlLFxuICAgIGlkOiBlbGVtZW50LmlkIHx8IHJhbmRvbUlkKCksXG4gICAgZmlsbFN0eWxlOiBlbGVtZW50LmZpbGxTdHlsZSB8fCBcImhhY2h1cmVcIixcbiAgICBzdHJva2VXaWR0aDogZWxlbWVudC5zdHJva2VXaWR0aCB8fCAxLFxuICAgIHN0cm9rZVN0eWxlOiBlbGVtZW50LnN0cm9rZVN0eWxlID8/IFwic29saWRcIixcbiAgICByb3VnaG5lc3M6IGVsZW1lbnQucm91Z2huZXNzID8/IDEsXG4gICAgb3BhY2l0eTogZWxlbWVudC5vcGFjaXR5ID09IG51bGwgPyAxMDAgOiBlbGVtZW50Lm9wYWNpdHksXG4gICAgYW5nbGU6IGVsZW1lbnQuYW5nbGUgfHwgMCxcbiAgICB4OiBleHRyYS54ID8/IGVsZW1lbnQueCA/PyAwLFxuICAgIHk6IGV4dHJhLnkgPz8gZWxlbWVudC55ID8/IDAsXG4gICAgc3Ryb2tlQ29sb3I6IGVsZW1lbnQuc3Ryb2tlQ29sb3IsXG4gICAgYmFja2dyb3VuZENvbG9yOiBlbGVtZW50LmJhY2tncm91bmRDb2xvcixcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCB8fCAwLFxuICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHQgfHwgMCxcbiAgICBzZWVkOiBlbGVtZW50LnNlZWQgPz8gMSxcbiAgICBncm91cElkczogZWxlbWVudC5ncm91cElkcyA/PyBbXSxcbiAgICBzdHJva2VTaGFycG5lc3M6XG4gICAgICBlbGVtZW50LnN0cm9rZVNoYXJwbmVzcyA/P1xuICAgICAgKGlzTGluZWFyRWxlbWVudFR5cGUoZWxlbWVudC50eXBlKSA/IFwicm91bmRcIiA6IFwic2hhcnBcIiksXG4gICAgYm91bmRFbGVtZW50czogZWxlbWVudC5ib3VuZEVsZW1lbnRJZHNcbiAgICAgID8gZWxlbWVudC5ib3VuZEVsZW1lbnRJZHMubWFwKChpZCkgPT4gKHsgdHlwZTogXCJhcnJvd1wiLCBpZCB9KSlcbiAgICAgIDogZWxlbWVudC5ib3VuZEVsZW1lbnRzID8/IFtdLFxuICAgIHVwZGF0ZWQ6IGVsZW1lbnQudXBkYXRlZCA/PyBnZXRVcGRhdGVkVGltZXN0YW1wKCksXG4gICAgbGluazogZWxlbWVudC5saW5rID8/IG51bGwsXG4gICAgbG9ja2VkOiBlbGVtZW50LmxvY2tlZCA/PyBmYWxzZSxcbiAgfTtcblxuICBpZiAoXCJjdXN0b21EYXRhXCIgaW4gZWxlbWVudCkge1xuICAgIGJhc2UuY3VzdG9tRGF0YSA9IGVsZW1lbnQuY3VzdG9tRGF0YTtcbiAgfVxuXG4gIGlmIChQUkVDRURJTkdfRUxFTUVOVF9LRVkgaW4gZWxlbWVudCkge1xuICAgIGJhc2VbUFJFQ0VESU5HX0VMRU1FTlRfS0VZXSA9IGVsZW1lbnRbUFJFQ0VESU5HX0VMRU1FTlRfS0VZXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uYmFzZSxcbiAgICAuLi5nZXROb3JtYWxpemVkRGltZW5zaW9ucyhiYXNlKSxcbiAgICAuLi5leHRyYSxcbiAgfSBhcyB1bmtub3duIGFzIFQ7XG59O1xuXG5jb25zdCByZXN0b3JlRWxlbWVudCA9IChcbiAgZWxlbWVudDogRXhjbHVkZTxFeGNhbGlkcmF3RWxlbWVudCwgRXhjYWxpZHJhd1NlbGVjdGlvbkVsZW1lbnQ+LFxuICByZWZyZXNoRGltZW5zaW9ucyA9IHRydWUsXG4pOiB0eXBlb2YgZWxlbWVudCB8IG51bGwgPT4ge1xuICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICBsZXQgZm9udFNpemUgPSBlbGVtZW50LmZvbnRTaXplO1xuICAgICAgbGV0IGZvbnRGYW1pbHkgPSBlbGVtZW50LmZvbnRGYW1pbHk7XG4gICAgICBpZiAoXCJmb250XCIgaW4gZWxlbWVudCkge1xuICAgICAgICBjb25zdCBbZm9udFB4LCBfZm9udEZhbWlseV06IFtzdHJpbmcsIHN0cmluZ10gPSAoXG4gICAgICAgICAgZWxlbWVudCBhcyBhbnlcbiAgICAgICAgKS5mb250LnNwbGl0KFwiIFwiKTtcbiAgICAgICAgZm9udFNpemUgPSBwYXJzZUludChmb250UHgsIDEwKTtcbiAgICAgICAgZm9udEZhbWlseSA9IGdldEZvbnRGYW1pbHlCeU5hbWUoX2ZvbnRGYW1pbHkpO1xuICAgICAgfVxuICAgICAgZWxlbWVudCA9IHJlc3RvcmVFbGVtZW50V2l0aFByb3BlcnRpZXMoZWxlbWVudCwge1xuICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgdGV4dDogZWxlbWVudC50ZXh0ID8/IFwiXCIsXG4gICAgICAgIGJhc2VsaW5lOiBlbGVtZW50LmJhc2VsaW5lLFxuICAgICAgICB0ZXh0QWxpZ246IGVsZW1lbnQudGV4dEFsaWduIHx8IERFRkFVTFRfVEVYVF9BTElHTixcbiAgICAgICAgdmVydGljYWxBbGlnbjogZWxlbWVudC52ZXJ0aWNhbEFsaWduIHx8IERFRkFVTFRfVkVSVElDQUxfQUxJR04sXG4gICAgICAgIGNvbnRhaW5lcklkOiBlbGVtZW50LmNvbnRhaW5lcklkID8/IG51bGwsXG4gICAgICAgIG9yaWdpbmFsVGV4dDogZWxlbWVudC5vcmlnaW5hbFRleHQgfHwgZWxlbWVudC50ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZWZyZXNoRGltZW5zaW9ucykge1xuICAgICAgICBlbGVtZW50ID0geyAuLi5lbGVtZW50LCAuLi5yZWZyZXNoVGV4dERpbWVuc2lvbnMoZWxlbWVudCkgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIGNhc2UgXCJmcmVlZHJhd1wiOiB7XG4gICAgICByZXR1cm4gcmVzdG9yZUVsZW1lbnRXaXRoUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIHBvaW50czogZWxlbWVudC5wb2ludHMsXG4gICAgICAgIGxhc3RDb21taXR0ZWRQb2ludDogbnVsbCxcbiAgICAgICAgc2ltdWxhdGVQcmVzc3VyZTogZWxlbWVudC5zaW11bGF0ZVByZXNzdXJlLFxuICAgICAgICBwcmVzc3VyZXM6IGVsZW1lbnQucHJlc3N1cmVzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgcmV0dXJuIHJlc3RvcmVFbGVtZW50V2l0aFByb3BlcnRpZXMoZWxlbWVudCwge1xuICAgICAgICBzdGF0dXM6IGVsZW1lbnQuc3RhdHVzIHx8IFwicGVuZGluZ1wiLFxuICAgICAgICBmaWxlSWQ6IGVsZW1lbnQuZmlsZUlkLFxuICAgICAgICBzY2FsZTogZWxlbWVudC5zY2FsZSB8fCBbMSwgMV0sXG4gICAgICB9KTtcbiAgICBjYXNlIFwibGluZVwiOlxuICAgIC8vIEB0cy1pZ25vcmUgTEVHQUNZIHR5cGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICBjYXNlIFwiZHJhd1wiOlxuICAgIGNhc2UgXCJhcnJvd1wiOiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0YXJ0QXJyb3doZWFkID0gbnVsbCxcbiAgICAgICAgZW5kQXJyb3doZWFkID0gZWxlbWVudC50eXBlID09PSBcImFycm93XCIgPyBcImFycm93XCIgOiBudWxsLFxuICAgICAgfSA9IGVsZW1lbnQ7XG5cbiAgICAgIGxldCB4ID0gZWxlbWVudC54O1xuICAgICAgbGV0IHkgPSBlbGVtZW50Lnk7XG4gICAgICBsZXQgcG9pbnRzID0gLy8gbWlncmF0ZSBvbGQgYXJyb3cgbW9kZWwgdG8gbmV3IG9uZVxuICAgICAgICAhQXJyYXkuaXNBcnJheShlbGVtZW50LnBvaW50cykgfHwgZWxlbWVudC5wb2ludHMubGVuZ3RoIDwgMlxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBbMCwgMF0sXG4gICAgICAgICAgICAgIFtlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodF0sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBlbGVtZW50LnBvaW50cztcblxuICAgICAgaWYgKHBvaW50c1swXVswXSAhPT0gMCB8fCBwb2ludHNbMF1bMV0gIT09IDApIHtcbiAgICAgICAgKHsgcG9pbnRzLCB4LCB5IH0gPSBMaW5lYXJFbGVtZW50RWRpdG9yLmdldE5vcm1hbGl6ZWRQb2ludHMoZWxlbWVudCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdG9yZUVsZW1lbnRXaXRoUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIHR5cGU6XG4gICAgICAgICAgKGVsZW1lbnQudHlwZSBhcyBFeGNhbGlkcmF3RWxlbWVudFtcInR5cGVcIl0gfCBcImRyYXdcIikgPT09IFwiZHJhd1wiXG4gICAgICAgICAgICA/IFwibGluZVwiXG4gICAgICAgICAgICA6IGVsZW1lbnQudHlwZSxcbiAgICAgICAgc3RhcnRCaW5kaW5nOiBlbGVtZW50LnN0YXJ0QmluZGluZyxcbiAgICAgICAgZW5kQmluZGluZzogZWxlbWVudC5lbmRCaW5kaW5nLFxuICAgICAgICBsYXN0Q29tbWl0dGVkUG9pbnQ6IG51bGwsXG4gICAgICAgIHN0YXJ0QXJyb3doZWFkLFxuICAgICAgICBlbmRBcnJvd2hlYWQsXG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGdlbmVyaWMgZWxlbWVudHNcbiAgICBjYXNlIFwiZWxsaXBzZVwiOlxuICAgICAgcmV0dXJuIHJlc3RvcmVFbGVtZW50V2l0aFByb3BlcnRpZXMoZWxlbWVudCwge30pO1xuICAgIGNhc2UgXCJyZWN0YW5nbGVcIjpcbiAgICAgIHJldHVybiByZXN0b3JlRWxlbWVudFdpdGhQcm9wZXJ0aWVzKGVsZW1lbnQsIHt9KTtcbiAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgICAgcmV0dXJuIHJlc3RvcmVFbGVtZW50V2l0aFByb3BlcnRpZXMoZWxlbWVudCwge30pO1xuXG4gICAgLy8gRG9uJ3QgdXNlIGRlZmF1bHQgY2FzZSBzbyBhcyB0byBjYXRjaCBhIG1pc3NpbmcgYW4gZWxlbWVudCB0eXBlIGNhc2UuXG4gICAgLy8gV2UgYWxzbyBkb24ndCB3YW50IHRvIHRocm93LCBidXQgaW5zdGVhZCByZXR1cm4gdm9pZCBzbyB3ZSBmaWx0ZXJcbiAgICAvLyBvdXQgdGhlc2UgdW5zdXBwb3J0ZWQgZWxlbWVudHMgZnJvbSB0aGUgcmVzdG9yZWQgYXJyYXkuXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZXN0b3JlRWxlbWVudHMgPSAoXG4gIGVsZW1lbnRzOiBJbXBvcnRlZERhdGFTdGF0ZVtcImVsZW1lbnRzXCJdLFxuICAvKiogTk9URSBkb2Vzbid0IHNlcnZlIGZvciByZWNvbmNpbGlhdGlvbiAqL1xuICBsb2NhbEVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgcmVmcmVzaERpbWVuc2lvbnMgPSB0cnVlLFxuKTogRXhjYWxpZHJhd0VsZW1lbnRbXSA9PiB7XG4gIGNvbnN0IGxvY2FsRWxlbWVudHNNYXAgPSBsb2NhbEVsZW1lbnRzID8gYXJyYXlUb01hcChsb2NhbEVsZW1lbnRzKSA6IG51bGw7XG4gIHJldHVybiAoZWxlbWVudHMgfHwgW10pLnJlZHVjZSgoZWxlbWVudHMsIGVsZW1lbnQpID0+IHtcbiAgICAvLyBmaWx0ZXJpbmcgb3V0IHNlbGVjdGlvbiwgd2hpY2ggaXMgbGVnYWN5LCBubyBsb25nZXIga2VwdCBpbiBlbGVtZW50cyxcbiAgICAvLyBhbmQgY2F1c2luZyBpc3N1ZXMgaWYgcmV0YWluZWRcbiAgICBpZiAoZWxlbWVudC50eXBlICE9PSBcInNlbGVjdGlvblwiICYmICFpc0ludmlzaWJseVNtYWxsRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgbGV0IG1pZ3JhdGVkRWxlbWVudDogRXhjYWxpZHJhd0VsZW1lbnQgfCBudWxsID0gcmVzdG9yZUVsZW1lbnQoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHJlZnJlc2hEaW1lbnNpb25zLFxuICAgICAgKTtcbiAgICAgIGlmIChtaWdyYXRlZEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgbG9jYWxFbGVtZW50ID0gbG9jYWxFbGVtZW50c01hcD8uZ2V0KGVsZW1lbnQuaWQpO1xuICAgICAgICBpZiAobG9jYWxFbGVtZW50ICYmIGxvY2FsRWxlbWVudC52ZXJzaW9uID4gbWlncmF0ZWRFbGVtZW50LnZlcnNpb24pIHtcbiAgICAgICAgICBtaWdyYXRlZEVsZW1lbnQgPSBidW1wVmVyc2lvbihtaWdyYXRlZEVsZW1lbnQsIGxvY2FsRWxlbWVudC52ZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cy5wdXNoKG1pZ3JhdGVkRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50cztcbiAgfSwgW10gYXMgRXhjYWxpZHJhd0VsZW1lbnRbXSk7XG59O1xuXG5jb25zdCBjb2FsZXNjZUFwcFN0YXRlVmFsdWUgPSA8XG4gIFQgZXh0ZW5kcyBrZXlvZiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREZWZhdWx0QXBwU3RhdGU+LFxuPihcbiAga2V5OiBULFxuICBhcHBTdGF0ZTogRXhjbHVkZTxJbXBvcnRlZERhdGFTdGF0ZVtcImFwcFN0YXRlXCJdLCBudWxsIHwgdW5kZWZpbmVkPixcbiAgZGVmYXVsdEFwcFN0YXRlOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREZWZhdWx0QXBwU3RhdGU+LFxuKSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gYXBwU3RhdGVba2V5XTtcbiAgLy8gTk9URSB0aGUgdmFsdWUhIGFzc2VydGlvbiBpcyBuZWVkZWQgaW4gVFMgNC41LjUgKGZpeGVkIGluIG5ld2VyIHZlcnNpb25zKVxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlISA6IGRlZmF1bHRBcHBTdGF0ZVtrZXldO1xufTtcblxuY29uc3QgTGVnYWN5QXBwU3RhdGVNaWdyYXRpb25zOiB7XG4gIFtLIGluIGtleW9mIExlZ2FjeUFwcFN0YXRlXTogKFxuICAgIEltcG9ydGVkRGF0YVN0YXRlOiBFeGNsdWRlPEltcG9ydGVkRGF0YVN0YXRlW1wiYXBwU3RhdGVcIl0sIG51bGwgfCB1bmRlZmluZWQ+LFxuICAgIGRlZmF1bHRBcHBTdGF0ZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGVmYXVsdEFwcFN0YXRlPixcbiAgKSA9PiBbTGVnYWN5QXBwU3RhdGVbS11bMV0sIEFwcFN0YXRlW0xlZ2FjeUFwcFN0YXRlW0tdWzFdXV07XG59ID0ge1xuICBpc0xpYnJhcnlPcGVuOiAoYXBwU3RhdGUsIGRlZmF1bHRBcHBTdGF0ZSkgPT4ge1xuICAgIHJldHVybiBbXG4gICAgICBcIm9wZW5TaWRlYmFyXCIsXG4gICAgICBcImlzTGlicmFyeU9wZW5cIiBpbiBhcHBTdGF0ZVxuICAgICAgICA/IGFwcFN0YXRlLmlzTGlicmFyeU9wZW5cbiAgICAgICAgICA/IFwibGlicmFyeVwiXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIDogY29hbGVzY2VBcHBTdGF0ZVZhbHVlKFwib3BlblNpZGViYXJcIiwgYXBwU3RhdGUsIGRlZmF1bHRBcHBTdGF0ZSksXG4gICAgXTtcbiAgfSxcbiAgaXNMaWJyYXJ5TWVudURvY2tlZDogKGFwcFN0YXRlLCBkZWZhdWx0QXBwU3RhdGUpID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAgXCJpc1NpZGViYXJEb2NrZWRcIixcbiAgICAgIGFwcFN0YXRlLmlzTGlicmFyeU1lbnVEb2NrZWQgPz9cbiAgICAgICAgY29hbGVzY2VBcHBTdGF0ZVZhbHVlKFwiaXNTaWRlYmFyRG9ja2VkXCIsIGFwcFN0YXRlLCBkZWZhdWx0QXBwU3RhdGUpLFxuICAgIF07XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgcmVzdG9yZUFwcFN0YXRlID0gKFxuICBhcHBTdGF0ZTogSW1wb3J0ZWREYXRhU3RhdGVbXCJhcHBTdGF0ZVwiXSxcbiAgbG9jYWxBcHBTdGF0ZTogUGFydGlhbDxBcHBTdGF0ZT4gfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogUmVzdG9yZWRBcHBTdGF0ZSA9PiB7XG4gIGFwcFN0YXRlID0gYXBwU3RhdGUgfHwge307XG4gIGNvbnN0IGRlZmF1bHRBcHBTdGF0ZSA9IGdldERlZmF1bHRBcHBTdGF0ZSgpO1xuICBjb25zdCBuZXh0QXBwU3RhdGUgPSB7fSBhcyB0eXBlb2YgZGVmYXVsdEFwcFN0YXRlO1xuXG4gIC8vIGZpcnN0LCBtaWdyYXRlIGFsbCBsZWdhY3kgQXBwU3RhdGUgcHJvcGVydGllcyB0byBuZXcgb25lcy4gV2UgZG8gaXRcbiAgLy8gaW4gb25lIGdvIGJlZm9yZSBtaWdyYXRlIHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0aWVzIGluIGNhc2UgdGhlIG5ldyBvbmVzXG4gIC8vIGRlcGVuZCBvbiBjaGVja2luZyBhbnkgb3RoZXIga2V5IChpLmUuIHRoZXkgYXJlIGNvdXBsZWQpXG4gIGZvciAoY29uc3QgbGVnYWN5S2V5IG9mIE9iamVjdC5rZXlzKFxuICAgIExlZ2FjeUFwcFN0YXRlTWlncmF0aW9ucyxcbiAgKSBhcyAoa2V5b2YgdHlwZW9mIExlZ2FjeUFwcFN0YXRlTWlncmF0aW9ucylbXSkge1xuICAgIGlmIChsZWdhY3lLZXkgaW4gYXBwU3RhdGUpIHtcbiAgICAgIGNvbnN0IFtuZXh0S2V5LCBuZXh0VmFsdWVdID0gTGVnYWN5QXBwU3RhdGVNaWdyYXRpb25zW2xlZ2FjeUtleV0oXG4gICAgICAgIGFwcFN0YXRlLFxuICAgICAgICBkZWZhdWx0QXBwU3RhdGUsXG4gICAgICApO1xuICAgICAgKG5leHRBcHBTdGF0ZSBhcyBhbnkpW25leHRLZXldID0gbmV4dFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgZGVmYXVsdFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0QXBwU3RhdGUpIGFzIFtcbiAgICBrZXlvZiB0eXBlb2YgZGVmYXVsdEFwcFN0YXRlLFxuICAgIGFueSxcbiAgXVtdKSB7XG4gICAgLy8gaWYgQXBwU3RhdGUgY29udGFpbnMgYSBsZWdhY3kga2V5LCBwcmVmZXIgdGhhdCBvbmUgYW5kIG1pZ3JhdGUgaXRzXG4gICAgLy8gdmFsdWUgdG8gdGhlIG5ldyBvbmVcbiAgICBjb25zdCBzdXBwbGllZFZhbHVlID0gYXBwU3RhdGVba2V5XTtcblxuICAgIGNvbnN0IGxvY2FsVmFsdWUgPSBsb2NhbEFwcFN0YXRlID8gbG9jYWxBcHBTdGF0ZVtrZXldIDogdW5kZWZpbmVkO1xuICAgIChuZXh0QXBwU3RhdGUgYXMgYW55KVtrZXldID1cbiAgICAgIHN1cHBsaWVkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHN1cHBsaWVkVmFsdWVcbiAgICAgICAgOiBsb2NhbFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBsb2NhbFZhbHVlXG4gICAgICAgIDogZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0QXBwU3RhdGUsXG4gICAgY3Vyc29yQnV0dG9uOiBsb2NhbEFwcFN0YXRlPy5jdXJzb3JCdXR0b24gfHwgXCJ1cFwiLFxuICAgIC8vIHJlc2V0IG9uIGZyZXNoIHJlc3RvcmUgc28gYXMgdG8gaGlkZSB0aGUgVUkgYnV0dG9uIGlmIHBlbk1vZGUgbm90IGFjdGl2ZVxuICAgIHBlbkRldGVjdGVkOlxuICAgICAgbG9jYWxBcHBTdGF0ZT8ucGVuRGV0ZWN0ZWQgPz9cbiAgICAgIChhcHBTdGF0ZS5wZW5Nb2RlID8gYXBwU3RhdGUucGVuRGV0ZWN0ZWQgPz8gZmFsc2UgOiBmYWxzZSksXG4gICAgYWN0aXZlVG9vbDoge1xuICAgICAgLi4udXBkYXRlQWN0aXZlVG9vbChcbiAgICAgICAgZGVmYXVsdEFwcFN0YXRlLFxuICAgICAgICBuZXh0QXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlICYmXG4gICAgICAgICAgQWxsb3dlZEV4Y2FsaWRyYXdBY3RpdmVUb29sc1tuZXh0QXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlXVxuICAgICAgICAgID8gbmV4dEFwcFN0YXRlLmFjdGl2ZVRvb2xcbiAgICAgICAgICA6IHsgdHlwZTogXCJzZWxlY3Rpb25cIiB9LFxuICAgICAgKSxcbiAgICAgIGxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyOiBudWxsLFxuICAgICAgbG9ja2VkOiBuZXh0QXBwU3RhdGUuYWN0aXZlVG9vbC5sb2NrZWQgPz8gZmFsc2UsXG4gICAgfSxcbiAgICAvLyBNaWdyYXRlcyBmcm9tIHByZXZpb3VzIHZlcnNpb24gd2hlcmUgYXBwU3RhdGUuem9vbSB3YXMgYSBudW1iZXJcbiAgICB6b29tOlxuICAgICAgdHlwZW9mIGFwcFN0YXRlLnpvb20gPT09IFwibnVtYmVyXCJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB2YWx1ZTogYXBwU3RhdGUuem9vbSBhcyBOb3JtYWxpemVkWm9vbVZhbHVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBhcHBTdGF0ZS56b29tIHx8IGRlZmF1bHRBcHBTdGF0ZS56b29tLFxuICAgIC8vIHdoZW4gc2lkZWJhciBkb2NrZWQgYW5kIHVzZXIgbGVmdCBpdCBvcGVuIGluIGxhc3Qgc2Vzc2lvbixcbiAgICAvLyBrZWVwIGl0IG9wZW4uIElmIG5vdCBkb2NrZWQsIGtlZXAgaXQgY2xvc2VkIGlycmVzcGVjdGl2ZSBvZiBsYXN0IHN0YXRlLlxuICAgIG9wZW5TaWRlYmFyOlxuICAgICAgbmV4dEFwcFN0YXRlLm9wZW5TaWRlYmFyID09PSBcImxpYnJhcnlcIlxuICAgICAgICA/IG5leHRBcHBTdGF0ZS5pc1NpZGViYXJEb2NrZWRcbiAgICAgICAgICA/IFwibGlicmFyeVwiXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIDogbmV4dEFwcFN0YXRlLm9wZW5TaWRlYmFyLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc3RvcmUgPSAoXG4gIGRhdGE6IFBpY2s8SW1wb3J0ZWREYXRhU3RhdGUsIFwiYXBwU3RhdGVcIiB8IFwiZWxlbWVudHNcIiB8IFwiZmlsZXNcIj4gfCBudWxsLFxuICAvKipcbiAgICogTG9jYWwgQXBwU3RhdGUgKGB0aGlzLnN0YXRlYCBvciBpbml0aWFsIHN0YXRlIGZyb20gbG9jYWxTdG9yYWdlKSBzbyB0aGF0IHdlXG4gICAqIGRvbid0IG92ZXJ3cml0ZSBsb2NhbCBzdGF0ZSB3aXRoIGRlZmF1bHQgdmFsdWVzICh3aGVuIHZhbHVlcyBub3RcbiAgICogZXhwbGljaXRseSBzcGVjaWZpZWQpLlxuICAgKiBTdXBwbHkgYG51bGxgIGlmIHlvdSBjYW4ndCBnZXQgYWNjZXNzIHRvIGl0LlxuICAgKi9cbiAgbG9jYWxBcHBTdGF0ZTogUGFydGlhbDxBcHBTdGF0ZT4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBsb2NhbEVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdIHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IFJlc3RvcmVkRGF0YVN0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogcmVzdG9yZUVsZW1lbnRzKGRhdGE/LmVsZW1lbnRzLCBsb2NhbEVsZW1lbnRzLCB0cnVlKSxcbiAgICBhcHBTdGF0ZTogcmVzdG9yZUFwcFN0YXRlKGRhdGE/LmFwcFN0YXRlLCBsb2NhbEFwcFN0YXRlIHx8IG51bGwpLFxuICAgIGZpbGVzOiBkYXRhPy5maWxlcyB8fCB7fSxcbiAgfTtcbn07XG5cbmNvbnN0IHJlc3RvcmVMaWJyYXJ5SXRlbSA9IChsaWJyYXJ5SXRlbTogTGlicmFyeUl0ZW0pID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSByZXN0b3JlRWxlbWVudHMoXG4gICAgZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzKGxpYnJhcnlJdGVtLmVsZW1lbnRzKSxcbiAgICBudWxsLFxuICApO1xuICByZXR1cm4gZWxlbWVudHMubGVuZ3RoID8geyAuLi5saWJyYXJ5SXRlbSwgZWxlbWVudHMgfSA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzdG9yZUxpYnJhcnlJdGVtcyA9IChcbiAgbGlicmFyeUl0ZW1zOiBJbXBvcnRlZERhdGFTdGF0ZVtcImxpYnJhcnlJdGVtc1wiXSA9IFtdLFxuICBkZWZhdWx0U3RhdHVzOiBMaWJyYXJ5SXRlbVtcInN0YXR1c1wiXSxcbikgPT4ge1xuICBjb25zdCByZXN0b3JlZEl0ZW1zOiBMaWJyYXJ5SXRlbVtdID0gW107XG4gIGZvciAoY29uc3QgaXRlbSBvZiBsaWJyYXJ5SXRlbXMpIHtcbiAgICAvLyBtaWdyYXRlIG9sZGVyIGxpYnJhcmllc1xuICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICBjb25zdCByZXN0b3JlZEl0ZW0gPSByZXN0b3JlTGlicmFyeUl0ZW0oe1xuICAgICAgICBzdGF0dXM6IGRlZmF1bHRTdGF0dXMsXG4gICAgICAgIGVsZW1lbnRzOiBpdGVtLFxuICAgICAgICBpZDogcmFuZG9tSWQoKSxcbiAgICAgICAgY3JlYXRlZDogRGF0ZS5ub3coKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3RvcmVkSXRlbSkge1xuICAgICAgICByZXN0b3JlZEl0ZW1zLnB1c2gocmVzdG9yZWRJdGVtKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgX2l0ZW0gPSBpdGVtIGFzIE1hcmtPcHRpb25hbDxcbiAgICAgICAgTGlicmFyeUl0ZW0sXG4gICAgICAgIFwiaWRcIiB8IFwic3RhdHVzXCIgfCBcImNyZWF0ZWRcIlxuICAgICAgPjtcbiAgICAgIGNvbnN0IHJlc3RvcmVkSXRlbSA9IHJlc3RvcmVMaWJyYXJ5SXRlbSh7XG4gICAgICAgIC4uLl9pdGVtLFxuICAgICAgICBpZDogX2l0ZW0uaWQgfHwgcmFuZG9tSWQoKSxcbiAgICAgICAgc3RhdHVzOiBfaXRlbS5zdGF0dXMgfHwgZGVmYXVsdFN0YXR1cyxcbiAgICAgICAgY3JlYXRlZDogX2l0ZW0uY3JlYXRlZCB8fCBEYXRlLm5vdygpLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzdG9yZWRJdGVtKSB7XG4gICAgICAgIHJlc3RvcmVkSXRlbXMucHVzaChyZXN0b3JlZEl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdG9yZWRJdGVtcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../data/restore.ts\n");
|
|
2819
2819
|
|
|
2820
2820
|
/***/ }),
|
|
2821
2821
|
|
|
@@ -2903,7 +2903,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2903
2903
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2904
2904
|
|
|
2905
2905
|
"use strict";
|
|
2906
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"OMIT_SIDES_FOR_MULTIPLE_ELEMENTS\": () => (/* reexport safe */ _transformHandles__WEBPACK_IMPORTED_MODULE_4__.OMIT_SIDES_FOR_MULTIPLE_ELEMENTS),\n/* harmony export */ \"clearElementsForDatabase\": () => (/* binding */ clearElementsForDatabase),\n/* harmony export */ \"clearElementsForExport\": () => (/* binding */ clearElementsForExport),\n/* harmony export */ \"clearElementsForLocalStorage\": () => (/* binding */ clearElementsForLocalStorage),\n/* harmony export */ \"dragNewElement\": () => (/* reexport safe */ _dragElements__WEBPACK_IMPORTED_MODULE_8__.dragNewElement),\n/* harmony export */ \"dragSelectedElements\": () => (/* reexport safe */ _dragElements__WEBPACK_IMPORTED_MODULE_8__.dragSelectedElements),\n/* harmony export */ \"duplicateElement\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.duplicateElement),\n/* harmony export */ \"getArrowheadPoints\": () => (/* reexport safe */ _bounds__WEBPACK_IMPORTED_MODULE_3__.getArrowheadPoints),\n/* harmony export */ \"getClosestElementBounds\": () => (/* reexport safe */ _bounds__WEBPACK_IMPORTED_MODULE_3__.getClosestElementBounds),\n/* harmony export */ \"getCommonBounds\": () => (/* reexport safe */ _bounds__WEBPACK_IMPORTED_MODULE_3__.getCommonBounds),\n/* harmony export */ \"getCursorForResizingElement\": () => (/* reexport safe */ _resizeTest__WEBPACK_IMPORTED_MODULE_6__.getCursorForResizingElement),\n/* harmony export */ \"getDiamondPoints\": () => (/* reexport safe */ _bounds__WEBPACK_IMPORTED_MODULE_3__.getDiamondPoints),\n/* harmony export */ \"getDragOffsetXY\": () => (/* reexport safe */ _dragElements__WEBPACK_IMPORTED_MODULE_8__.getDragOffsetXY),\n/* harmony export */ \"getElementAbsoluteCoords\": () => (/* reexport safe */ _bounds__WEBPACK_IMPORTED_MODULE_3__.getElementAbsoluteCoords),\n/* harmony export */ \"getElementBounds\": () => (/* reexport safe */ _bounds__WEBPACK_IMPORTED_MODULE_3__.getElementBounds),\n/* harmony export */ \"getElementWithTransformHandleType\": () => (/* reexport safe */ _resizeTest__WEBPACK_IMPORTED_MODULE_6__.getElementWithTransformHandleType),\n/* harmony export */ \"getLockedLinearCursorAlignSize\": () => (/* reexport safe */ _sizeHelpers__WEBPACK_IMPORTED_MODULE_0__.getLockedLinearCursorAlignSize),\n/* harmony export */ \"getNonDeletedElements\": () => (/* binding */ getNonDeletedElements),\n/* harmony export */ \"getNormalizedDimensions\": () => (/* reexport safe */ _sizeHelpers__WEBPACK_IMPORTED_MODULE_0__.getNormalizedDimensions),\n/* harmony export */ \"getPerfectElementSize\": () => (/* reexport safe */ _sizeHelpers__WEBPACK_IMPORTED_MODULE_0__.getPerfectElementSize),\n/* harmony export */ \"getResizeArrowDirection\": () => (/* reexport safe */ _resizeElements__WEBPACK_IMPORTED_MODULE_7__.getResizeArrowDirection),\n/* harmony export */ \"getResizeOffsetXY\": () => (/* reexport safe */ _resizeElements__WEBPACK_IMPORTED_MODULE_7__.getResizeOffsetXY),\n/* harmony export */ \"getSceneVersion\": () => (/* binding */ getSceneVersion),\n/* harmony export */ \"getTransformHandleTypeFromCoords\": () => (/* reexport safe */ _resizeTest__WEBPACK_IMPORTED_MODULE_6__.getTransformHandleTypeFromCoords),\n/* harmony export */ \"getTransformHandles\": () => (/* reexport safe */ _transformHandles__WEBPACK_IMPORTED_MODULE_4__.getTransformHandles),\n/* harmony export */ \"getTransformHandlesFromCoords\": () => (/* reexport safe */ _transformHandles__WEBPACK_IMPORTED_MODULE_4__.getTransformHandlesFromCoords),\n/* harmony export */ \"getVisibleElements\": () => (/* binding */ getVisibleElements),\n/* harmony export */ \"hitTest\": () => (/* reexport safe */ _collision__WEBPACK_IMPORTED_MODULE_5__.hitTest),\n/* harmony export */ \"isExcalidrawElement\": () => (/* reexport safe */ _typeChecks__WEBPACK_IMPORTED_MODULE_1__.isExcalidrawElement),\n/* harmony export */ \"isHittingElementBoundingBoxWithoutHittingElement\": () => (/* reexport safe */ _collision__WEBPACK_IMPORTED_MODULE_5__.isHittingElementBoundingBoxWithoutHittingElement),\n/* harmony export */ \"isInvisiblySmallElement\": () => (/* reexport safe */ _sizeHelpers__WEBPACK_IMPORTED_MODULE_0__.isInvisiblySmallElement),\n/* harmony export */ \"isNonDeletedElement\": () => (/* binding */ isNonDeletedElement),\n/* harmony export */ \"isTextElement\": () => (/* reexport safe */ _typeChecks__WEBPACK_IMPORTED_MODULE_1__.isTextElement),\n/* harmony export */ \"newElement\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.newElement),\n/* harmony export */ \"newImageElement\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.newImageElement),\n/* harmony export */ \"newLinearElement\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.newLinearElement),\n/* harmony export */ \"newTextElement\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.newTextElement),\n/* harmony export */ \"redrawTextBoundingBox\": () => (/* reexport safe */ _textElement__WEBPACK_IMPORTED_MODULE_10__.redrawTextBoundingBox),\n/* harmony export */ \"resizePerfectLineForNWHandler\": () => (/* reexport safe */ _sizeHelpers__WEBPACK_IMPORTED_MODULE_0__.resizePerfectLineForNWHandler),\n/* harmony export */ \"resizeTest\": () => (/* reexport safe */ _resizeTest__WEBPACK_IMPORTED_MODULE_6__.resizeTest),\n/* harmony export */ \"showSelectedShapeActions\": () => (/* reexport safe */ _showSelectedShapeActions__WEBPACK_IMPORTED_MODULE_11__.showSelectedShapeActions),\n/* harmony export */ \"textWysiwyg\": () => (/* reexport safe */ _textWysiwyg__WEBPACK_IMPORTED_MODULE_9__.textWysiwyg),\n/* harmony export */ \"transformElements\": () => (/* reexport safe */ _resizeElements__WEBPACK_IMPORTED_MODULE_7__.transformElements),\n/* harmony export */ \"updateTextElement\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.updateTextElement)\n/* harmony export */ });\n/* harmony import */ var _sizeHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sizeHelpers */ \"../../element/sizeHelpers.ts\");\n/* harmony import */ var _typeChecks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _newElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./newElement */ \"../../element/newElement.ts\");\n/* harmony import */ var _bounds__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _transformHandles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./transformHandles */ \"../../element/transformHandles.ts\");\n/* harmony import */ var _collision__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./collision */ \"../../element/collision.ts\");\n/* harmony import */ var _resizeTest__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./resizeTest */ \"../../element/resizeTest.ts\");\n/* harmony import */ var _resizeElements__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./resizeElements */ \"../../element/resizeElements.ts\");\n/* harmony import */ var _dragElements__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dragElements */ \"../../element/dragElements.ts\");\n/* harmony import */ var _textWysiwyg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./textWysiwyg */ \"../../element/textWysiwyg.tsx\");\n/* harmony import */ var _textElement__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./textElement */ \"../../element/textElement.ts\");\n/* harmony import */ var _showSelectedShapeActions__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./showSelectedShapeActions */ \"../../element/showSelectedShapeActions.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst getSceneVersion = (elements) => elements.reduce((acc, el) => acc + el.version, 0);\nconst getVisibleElements = (elements) => elements.filter((el) => !el.isDeleted && !(0,_sizeHelpers__WEBPACK_IMPORTED_MODULE_0__.isInvisiblySmallElement)(el));\nconst getNonDeletedElements = (elements) => elements.filter((element) => !element.isDeleted);\nconst isNonDeletedElement = (element) => !element.isDeleted;\nconst _clearElements = (elements) => getNonDeletedElements(elements).map((element) => (0,_typeChecks__WEBPACK_IMPORTED_MODULE_1__.isLinearElementType)(element.type)\n ? Object.assign(Object.assign({}, element), { lastCommittedPoint: null }) : element);\nconst clearElementsForDatabase = (elements) => _clearElements(elements);\nconst clearElementsForExport = (elements) => _clearElements(elements);\nconst clearElementsForLocalStorage = (elements) => _clearElements(elements);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZWxlbWVudC9pbmRleC50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUt3RDtBQUNMO0FBUzdCO0FBUUo7QUFNVTtBQUlQO0FBTUM7QUFLSTtBQUtGO0FBQzBDO0FBQ3RCO0FBQ1U7QUFPL0I7QUFDK0M7QUFFL0QsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUFzQyxFQUFFLEVBQUUsQ0FDeEUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRTdDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxRQUFzQyxFQUFFLEVBQUUsQ0FDM0UsUUFBUSxDQUFDLE1BQU0sQ0FDYixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxJQUFJLENBQUMscUVBQXVCLENBQUMsRUFBRSxDQUFDLENBQ1osQ0FBQztBQUV2QyxNQUFNLHFCQUFxQixHQUFHLENBQUMsUUFBc0MsRUFBRSxFQUFFLENBQzlFLFFBQVEsQ0FBQyxNQUFNLENBQ2IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDVSxDQUFDO0FBRXZDLE1BQU0sbUJBQW1CLEdBQUcsQ0FDakMsT0FBVSxFQUNnQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBRWxELE1BQU0sY0FBYyxHQUFHLENBQ3JCLFFBQXNDLEVBQ2pCLEVBQUUsQ0FDdkIscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDOUMsZ0VBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDLGlDQUFNLE9BQU8sS0FBRSxrQkFBa0IsRUFBRSxJQUFJLElBQ3hDLENBQUMsQ0FBQyxPQUFPLENBQ1osQ0FBQztBQUVHLE1BQU0sd0JBQXdCLEdBQUcsQ0FDdEMsUUFBc0MsRUFDdEMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUV2QixNQUFNLHNCQUFzQixHQUFHLENBQ3BDLFFBQXNDLEVBQ3RDLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFdkIsTUFBTSw0QkFBNEIsR0FBRyxDQUMxQyxRQUFzQyxFQUN0QyxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2VsZW1lbnQvaW5kZXgudHM/MTIxOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFeGNhbGlkcmF3RWxlbWVudCxcbiAgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50LFxuICBOb25EZWxldGVkLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgaXNJbnZpc2libHlTbWFsbEVsZW1lbnQgfSBmcm9tIFwiLi9zaXplSGVscGVyc1wiO1xuaW1wb3J0IHsgaXNMaW5lYXJFbGVtZW50VHlwZSB9IGZyb20gXCIuL3R5cGVDaGVja3NcIjtcblxuZXhwb3J0IHtcbiAgbmV3RWxlbWVudCxcbiAgbmV3VGV4dEVsZW1lbnQsXG4gIHVwZGF0ZVRleHRFbGVtZW50LFxuICBuZXdMaW5lYXJFbGVtZW50LFxuICBuZXdJbWFnZUVsZW1lbnQsXG4gIGR1cGxpY2F0ZUVsZW1lbnQsXG59IGZyb20gXCIuL25ld0VsZW1lbnRcIjtcbmV4cG9ydCB7XG4gIGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyxcbiAgZ2V0RWxlbWVudEJvdW5kcyxcbiAgZ2V0Q29tbW9uQm91bmRzLFxuICBnZXREaWFtb25kUG9pbnRzLFxuICBnZXRBcnJvd2hlYWRQb2ludHMsXG4gIGdldENsb3Nlc3RFbGVtZW50Qm91bmRzLFxufSBmcm9tIFwiLi9ib3VuZHNcIjtcblxuZXhwb3J0IHtcbiAgT01JVF9TSURFU19GT1JfTVVMVElQTEVfRUxFTUVOVFMsXG4gIGdldFRyYW5zZm9ybUhhbmRsZXNGcm9tQ29vcmRzLFxuICBnZXRUcmFuc2Zvcm1IYW5kbGVzLFxufSBmcm9tIFwiLi90cmFuc2Zvcm1IYW5kbGVzXCI7XG5leHBvcnQge1xuICBoaXRUZXN0LFxuICBpc0hpdHRpbmdFbGVtZW50Qm91bmRpbmdCb3hXaXRob3V0SGl0dGluZ0VsZW1lbnQsXG59IGZyb20gXCIuL2NvbGxpc2lvblwiO1xuZXhwb3J0IHtcbiAgcmVzaXplVGVzdCxcbiAgZ2V0Q3Vyc29yRm9yUmVzaXppbmdFbGVtZW50LFxuICBnZXRFbGVtZW50V2l0aFRyYW5zZm9ybUhhbmRsZVR5cGUsXG4gIGdldFRyYW5zZm9ybUhhbmRsZVR5cGVGcm9tQ29vcmRzLFxufSBmcm9tIFwiLi9yZXNpemVUZXN0XCI7XG5leHBvcnQge1xuICB0cmFuc2Zvcm1FbGVtZW50cyxcbiAgZ2V0UmVzaXplT2Zmc2V0WFksXG4gIGdldFJlc2l6ZUFycm93RGlyZWN0aW9uLFxufSBmcm9tIFwiLi9yZXNpemVFbGVtZW50c1wiO1xuZXhwb3J0IHtcbiAgZHJhZ1NlbGVjdGVkRWxlbWVudHMsXG4gIGdldERyYWdPZmZzZXRYWSxcbiAgZHJhZ05ld0VsZW1lbnQsXG59IGZyb20gXCIuL2RyYWdFbGVtZW50c1wiO1xuZXhwb3J0IHsgaXNUZXh0RWxlbWVudCwgaXNFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuL3R5cGVDaGVja3NcIjtcbmV4cG9ydCB7IHRleHRXeXNpd3lnIH0gZnJvbSBcIi4vdGV4dFd5c2l3eWdcIjtcbmV4cG9ydCB7IHJlZHJhd1RleHRCb3VuZGluZ0JveCB9IGZyb20gXCIuL3RleHRFbGVtZW50XCI7XG5leHBvcnQge1xuICBnZXRQZXJmZWN0RWxlbWVudFNpemUsXG4gIGdldExvY2tlZExpbmVhckN1cnNvckFsaWduU2l6ZSxcbiAgaXNJbnZpc2libHlTbWFsbEVsZW1lbnQsXG4gIHJlc2l6ZVBlcmZlY3RMaW5lRm9yTldIYW5kbGVyLFxuICBnZXROb3JtYWxpemVkRGltZW5zaW9ucyxcbn0gZnJvbSBcIi4vc2l6ZUhlbHBlcnNcIjtcbmV4cG9ydCB7IHNob3dTZWxlY3RlZFNoYXBlQWN0aW9ucyB9IGZyb20gXCIuL3Nob3dTZWxlY3RlZFNoYXBlQWN0aW9uc1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0U2NlbmVWZXJzaW9uID0gKGVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdKSA9PlxuICBlbGVtZW50cy5yZWR1Y2UoKGFjYywgZWwpID0+IGFjYyArIGVsLnZlcnNpb24sIDApO1xuXG5leHBvcnQgY29uc3QgZ2V0VmlzaWJsZUVsZW1lbnRzID0gKGVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdKSA9PlxuICBlbGVtZW50cy5maWx0ZXIoXG4gICAgKGVsKSA9PiAhZWwuaXNEZWxldGVkICYmICFpc0ludmlzaWJseVNtYWxsRWxlbWVudChlbCksXG4gICkgYXMgcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W107XG5cbmV4cG9ydCBjb25zdCBnZXROb25EZWxldGVkRWxlbWVudHMgPSAoZWxlbWVudHM6IHJlYWRvbmx5IEV4Y2FsaWRyYXdFbGVtZW50W10pID0+XG4gIGVsZW1lbnRzLmZpbHRlcihcbiAgICAoZWxlbWVudCkgPT4gIWVsZW1lbnQuaXNEZWxldGVkLFxuICApIGFzIHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdO1xuXG5leHBvcnQgY29uc3QgaXNOb25EZWxldGVkRWxlbWVudCA9IDxUIGV4dGVuZHMgRXhjYWxpZHJhd0VsZW1lbnQ+KFxuICBlbGVtZW50OiBULFxuKTogZWxlbWVudCBpcyBOb25EZWxldGVkPFQ+ID0+ICFlbGVtZW50LmlzRGVsZXRlZDtcblxuY29uc3QgX2NsZWFyRWxlbWVudHMgPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdLFxuKTogRXhjYWxpZHJhd0VsZW1lbnRbXSA9PlxuICBnZXROb25EZWxldGVkRWxlbWVudHMoZWxlbWVudHMpLm1hcCgoZWxlbWVudCkgPT5cbiAgICBpc0xpbmVhckVsZW1lbnRUeXBlKGVsZW1lbnQudHlwZSlcbiAgICAgID8geyAuLi5lbGVtZW50LCBsYXN0Q29tbWl0dGVkUG9pbnQ6IG51bGwgfVxuICAgICAgOiBlbGVtZW50LFxuICApO1xuXG5leHBvcnQgY29uc3QgY2xlYXJFbGVtZW50c0ZvckRhdGFiYXNlID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgRXhjYWxpZHJhd0VsZW1lbnRbXSxcbikgPT4gX2NsZWFyRWxlbWVudHMoZWxlbWVudHMpO1xuXG5leHBvcnQgY29uc3QgY2xlYXJFbGVtZW50c0ZvckV4cG9ydCA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IEV4Y2FsaWRyYXdFbGVtZW50W10sXG4pID0+IF9jbGVhckVsZW1lbnRzKGVsZW1lbnRzKTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyRWxlbWVudHNGb3JMb2NhbFN0b3JhZ2UgPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdLFxuKSA9PiBfY2xlYXJFbGVtZW50cyhlbGVtZW50cyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../element/index.ts\n");
|
|
2906
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"OMIT_SIDES_FOR_MULTIPLE_ELEMENTS\": () => (/* reexport safe */ _transformHandles__WEBPACK_IMPORTED_MODULE_4__.OMIT_SIDES_FOR_MULTIPLE_ELEMENTS),\n/* harmony export */ \"clearElementsForDatabase\": () => (/* binding */ clearElementsForDatabase),\n/* harmony export */ \"clearElementsForExport\": () => (/* binding */ clearElementsForExport),\n/* harmony export */ \"clearElementsForLocalStorage\": () => (/* binding */ clearElementsForLocalStorage),\n/* harmony export */ \"dragNewElement\": () => (/* reexport safe */ _dragElements__WEBPACK_IMPORTED_MODULE_8__.dragNewElement),\n/* harmony export */ \"dragSelectedElements\": () => (/* reexport safe */ _dragElements__WEBPACK_IMPORTED_MODULE_8__.dragSelectedElements),\n/* harmony export */ \"duplicateElement\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.duplicateElement),\n/* harmony export */ \"getArrowheadPoints\": () => (/* reexport safe */ _bounds__WEBPACK_IMPORTED_MODULE_3__.getArrowheadPoints),\n/* harmony export */ \"getClosestElementBounds\": () => (/* reexport safe */ _bounds__WEBPACK_IMPORTED_MODULE_3__.getClosestElementBounds),\n/* harmony export */ \"getCommonBounds\": () => (/* reexport safe */ _bounds__WEBPACK_IMPORTED_MODULE_3__.getCommonBounds),\n/* harmony export */ \"getCursorForResizingElement\": () => (/* reexport safe */ _resizeTest__WEBPACK_IMPORTED_MODULE_6__.getCursorForResizingElement),\n/* harmony export */ \"getDiamondPoints\": () => (/* reexport safe */ _bounds__WEBPACK_IMPORTED_MODULE_3__.getDiamondPoints),\n/* harmony export */ \"getDragOffsetXY\": () => (/* reexport safe */ _dragElements__WEBPACK_IMPORTED_MODULE_8__.getDragOffsetXY),\n/* harmony export */ \"getElementAbsoluteCoords\": () => (/* reexport safe */ _bounds__WEBPACK_IMPORTED_MODULE_3__.getElementAbsoluteCoords),\n/* harmony export */ \"getElementBounds\": () => (/* reexport safe */ _bounds__WEBPACK_IMPORTED_MODULE_3__.getElementBounds),\n/* harmony export */ \"getElementWithTransformHandleType\": () => (/* reexport safe */ _resizeTest__WEBPACK_IMPORTED_MODULE_6__.getElementWithTransformHandleType),\n/* harmony export */ \"getLockedLinearCursorAlignSize\": () => (/* reexport safe */ _sizeHelpers__WEBPACK_IMPORTED_MODULE_0__.getLockedLinearCursorAlignSize),\n/* harmony export */ \"getNonDeletedElements\": () => (/* binding */ getNonDeletedElements),\n/* harmony export */ \"getNormalizedDimensions\": () => (/* reexport safe */ _sizeHelpers__WEBPACK_IMPORTED_MODULE_0__.getNormalizedDimensions),\n/* harmony export */ \"getPerfectElementSize\": () => (/* reexport safe */ _sizeHelpers__WEBPACK_IMPORTED_MODULE_0__.getPerfectElementSize),\n/* harmony export */ \"getResizeArrowDirection\": () => (/* reexport safe */ _resizeElements__WEBPACK_IMPORTED_MODULE_7__.getResizeArrowDirection),\n/* harmony export */ \"getResizeOffsetXY\": () => (/* reexport safe */ _resizeElements__WEBPACK_IMPORTED_MODULE_7__.getResizeOffsetXY),\n/* harmony export */ \"getSceneVersion\": () => (/* binding */ getSceneVersion),\n/* harmony export */ \"getTransformHandleTypeFromCoords\": () => (/* reexport safe */ _resizeTest__WEBPACK_IMPORTED_MODULE_6__.getTransformHandleTypeFromCoords),\n/* harmony export */ \"getTransformHandles\": () => (/* reexport safe */ _transformHandles__WEBPACK_IMPORTED_MODULE_4__.getTransformHandles),\n/* harmony export */ \"getTransformHandlesFromCoords\": () => (/* reexport safe */ _transformHandles__WEBPACK_IMPORTED_MODULE_4__.getTransformHandlesFromCoords),\n/* harmony export */ \"getVisibleElements\": () => (/* binding */ getVisibleElements),\n/* harmony export */ \"hitTest\": () => (/* reexport safe */ _collision__WEBPACK_IMPORTED_MODULE_5__.hitTest),\n/* harmony export */ \"isExcalidrawElement\": () => (/* reexport safe */ _typeChecks__WEBPACK_IMPORTED_MODULE_1__.isExcalidrawElement),\n/* harmony export */ \"isHittingElementBoundingBoxWithoutHittingElement\": () => (/* reexport safe */ _collision__WEBPACK_IMPORTED_MODULE_5__.isHittingElementBoundingBoxWithoutHittingElement),\n/* harmony export */ \"isInvisiblySmallElement\": () => (/* reexport safe */ _sizeHelpers__WEBPACK_IMPORTED_MODULE_0__.isInvisiblySmallElement),\n/* harmony export */ \"isNonDeletedElement\": () => (/* binding */ isNonDeletedElement),\n/* harmony export */ \"isTextElement\": () => (/* reexport safe */ _typeChecks__WEBPACK_IMPORTED_MODULE_1__.isTextElement),\n/* harmony export */ \"newElement\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.newElement),\n/* harmony export */ \"newImageElement\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.newImageElement),\n/* harmony export */ \"newLinearElement\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.newLinearElement),\n/* harmony export */ \"newTextElement\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.newTextElement),\n/* harmony export */ \"redrawTextBoundingBox\": () => (/* reexport safe */ _textElement__WEBPACK_IMPORTED_MODULE_10__.redrawTextBoundingBox),\n/* harmony export */ \"refreshTextDimensions\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.refreshTextDimensions),\n/* harmony export */ \"resizePerfectLineForNWHandler\": () => (/* reexport safe */ _sizeHelpers__WEBPACK_IMPORTED_MODULE_0__.resizePerfectLineForNWHandler),\n/* harmony export */ \"resizeTest\": () => (/* reexport safe */ _resizeTest__WEBPACK_IMPORTED_MODULE_6__.resizeTest),\n/* harmony export */ \"showSelectedShapeActions\": () => (/* reexport safe */ _showSelectedShapeActions__WEBPACK_IMPORTED_MODULE_11__.showSelectedShapeActions),\n/* harmony export */ \"textWysiwyg\": () => (/* reexport safe */ _textWysiwyg__WEBPACK_IMPORTED_MODULE_9__.textWysiwyg),\n/* harmony export */ \"transformElements\": () => (/* reexport safe */ _resizeElements__WEBPACK_IMPORTED_MODULE_7__.transformElements),\n/* harmony export */ \"updateTextElement\": () => (/* reexport safe */ _newElement__WEBPACK_IMPORTED_MODULE_2__.updateTextElement)\n/* harmony export */ });\n/* harmony import */ var _sizeHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sizeHelpers */ \"../../element/sizeHelpers.ts\");\n/* harmony import */ var _typeChecks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _newElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./newElement */ \"../../element/newElement.ts\");\n/* harmony import */ var _bounds__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _transformHandles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./transformHandles */ \"../../element/transformHandles.ts\");\n/* harmony import */ var _collision__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./collision */ \"../../element/collision.ts\");\n/* harmony import */ var _resizeTest__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./resizeTest */ \"../../element/resizeTest.ts\");\n/* harmony import */ var _resizeElements__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./resizeElements */ \"../../element/resizeElements.ts\");\n/* harmony import */ var _dragElements__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dragElements */ \"../../element/dragElements.ts\");\n/* harmony import */ var _textWysiwyg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./textWysiwyg */ \"../../element/textWysiwyg.tsx\");\n/* harmony import */ var _textElement__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./textElement */ \"../../element/textElement.ts\");\n/* harmony import */ var _showSelectedShapeActions__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./showSelectedShapeActions */ \"../../element/showSelectedShapeActions.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst getSceneVersion = (elements) => elements.reduce((acc, el) => acc + el.version, 0);\nconst getVisibleElements = (elements) => elements.filter((el) => !el.isDeleted && !(0,_sizeHelpers__WEBPACK_IMPORTED_MODULE_0__.isInvisiblySmallElement)(el));\nconst getNonDeletedElements = (elements) => elements.filter((element) => !element.isDeleted);\nconst isNonDeletedElement = (element) => !element.isDeleted;\nconst _clearElements = (elements) => getNonDeletedElements(elements).map((element) => (0,_typeChecks__WEBPACK_IMPORTED_MODULE_1__.isLinearElementType)(element.type)\n ? Object.assign(Object.assign({}, element), { lastCommittedPoint: null }) : element);\nconst clearElementsForDatabase = (elements) => _clearElements(elements);\nconst clearElementsForExport = (elements) => _clearElements(elements);\nconst clearElementsForLocalStorage = (elements) => _clearElements(elements);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZWxlbWVudC9pbmRleC50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLd0Q7QUFDTDtBQVU3QjtBQVFKO0FBTVU7QUFJUDtBQU1DO0FBS0k7QUFLRjtBQUMwQztBQUN0QjtBQUNVO0FBTy9CO0FBQytDO0FBRS9ELE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBc0MsRUFBRSxFQUFFLENBQ3hFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUU3QyxNQUFNLGtCQUFrQixHQUFHLENBQUMsUUFBc0MsRUFBRSxFQUFFLENBQzNFLFFBQVEsQ0FBQyxNQUFNLENBQ2IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsSUFBSSxDQUFDLHFFQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUNaLENBQUM7QUFFdkMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFFBQXNDLEVBQUUsRUFBRSxDQUM5RSxRQUFRLENBQUMsTUFBTSxDQUNiLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ1UsQ0FBQztBQUV2QyxNQUFNLG1CQUFtQixHQUFHLENBQ2pDLE9BQVUsRUFDZ0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUVsRCxNQUFNLGNBQWMsR0FBRyxDQUNyQixRQUFzQyxFQUNqQixFQUFFLENBQ3ZCLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQzlDLGdFQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQyxpQ0FBTSxPQUFPLEtBQUUsa0JBQWtCLEVBQUUsSUFBSSxJQUN4QyxDQUFDLENBQUMsT0FBTyxDQUNaLENBQUM7QUFFRyxNQUFNLHdCQUF3QixHQUFHLENBQ3RDLFFBQXNDLEVBQ3RDLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFdkIsTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxRQUFzQyxFQUN0QyxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRXZCLE1BQU0sNEJBQTRCLEdBQUcsQ0FDMUMsUUFBc0MsRUFDdEMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9lbGVtZW50L2luZGV4LnRzPzEyMTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRXhjYWxpZHJhd0VsZW1lbnQsXG4gIE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCxcbiAgTm9uRGVsZXRlZCxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzSW52aXNpYmx5U21hbGxFbGVtZW50IH0gZnJvbSBcIi4vc2l6ZUhlbHBlcnNcIjtcbmltcG9ydCB7IGlzTGluZWFyRWxlbWVudFR5cGUgfSBmcm9tIFwiLi90eXBlQ2hlY2tzXCI7XG5cbmV4cG9ydCB7XG4gIG5ld0VsZW1lbnQsXG4gIG5ld1RleHRFbGVtZW50LFxuICB1cGRhdGVUZXh0RWxlbWVudCxcbiAgcmVmcmVzaFRleHREaW1lbnNpb25zLFxuICBuZXdMaW5lYXJFbGVtZW50LFxuICBuZXdJbWFnZUVsZW1lbnQsXG4gIGR1cGxpY2F0ZUVsZW1lbnQsXG59IGZyb20gXCIuL25ld0VsZW1lbnRcIjtcbmV4cG9ydCB7XG4gIGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyxcbiAgZ2V0RWxlbWVudEJvdW5kcyxcbiAgZ2V0Q29tbW9uQm91bmRzLFxuICBnZXREaWFtb25kUG9pbnRzLFxuICBnZXRBcnJvd2hlYWRQb2ludHMsXG4gIGdldENsb3Nlc3RFbGVtZW50Qm91bmRzLFxufSBmcm9tIFwiLi9ib3VuZHNcIjtcblxuZXhwb3J0IHtcbiAgT01JVF9TSURFU19GT1JfTVVMVElQTEVfRUxFTUVOVFMsXG4gIGdldFRyYW5zZm9ybUhhbmRsZXNGcm9tQ29vcmRzLFxuICBnZXRUcmFuc2Zvcm1IYW5kbGVzLFxufSBmcm9tIFwiLi90cmFuc2Zvcm1IYW5kbGVzXCI7XG5leHBvcnQge1xuICBoaXRUZXN0LFxuICBpc0hpdHRpbmdFbGVtZW50Qm91bmRpbmdCb3hXaXRob3V0SGl0dGluZ0VsZW1lbnQsXG59IGZyb20gXCIuL2NvbGxpc2lvblwiO1xuZXhwb3J0IHtcbiAgcmVzaXplVGVzdCxcbiAgZ2V0Q3Vyc29yRm9yUmVzaXppbmdFbGVtZW50LFxuICBnZXRFbGVtZW50V2l0aFRyYW5zZm9ybUhhbmRsZVR5cGUsXG4gIGdldFRyYW5zZm9ybUhhbmRsZVR5cGVGcm9tQ29vcmRzLFxufSBmcm9tIFwiLi9yZXNpemVUZXN0XCI7XG5leHBvcnQge1xuICB0cmFuc2Zvcm1FbGVtZW50cyxcbiAgZ2V0UmVzaXplT2Zmc2V0WFksXG4gIGdldFJlc2l6ZUFycm93RGlyZWN0aW9uLFxufSBmcm9tIFwiLi9yZXNpemVFbGVtZW50c1wiO1xuZXhwb3J0IHtcbiAgZHJhZ1NlbGVjdGVkRWxlbWVudHMsXG4gIGdldERyYWdPZmZzZXRYWSxcbiAgZHJhZ05ld0VsZW1lbnQsXG59IGZyb20gXCIuL2RyYWdFbGVtZW50c1wiO1xuZXhwb3J0IHsgaXNUZXh0RWxlbWVudCwgaXNFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuL3R5cGVDaGVja3NcIjtcbmV4cG9ydCB7IHRleHRXeXNpd3lnIH0gZnJvbSBcIi4vdGV4dFd5c2l3eWdcIjtcbmV4cG9ydCB7IHJlZHJhd1RleHRCb3VuZGluZ0JveCB9IGZyb20gXCIuL3RleHRFbGVtZW50XCI7XG5leHBvcnQge1xuICBnZXRQZXJmZWN0RWxlbWVudFNpemUsXG4gIGdldExvY2tlZExpbmVhckN1cnNvckFsaWduU2l6ZSxcbiAgaXNJbnZpc2libHlTbWFsbEVsZW1lbnQsXG4gIHJlc2l6ZVBlcmZlY3RMaW5lRm9yTldIYW5kbGVyLFxuICBnZXROb3JtYWxpemVkRGltZW5zaW9ucyxcbn0gZnJvbSBcIi4vc2l6ZUhlbHBlcnNcIjtcbmV4cG9ydCB7IHNob3dTZWxlY3RlZFNoYXBlQWN0aW9ucyB9IGZyb20gXCIuL3Nob3dTZWxlY3RlZFNoYXBlQWN0aW9uc1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0U2NlbmVWZXJzaW9uID0gKGVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdKSA9PlxuICBlbGVtZW50cy5yZWR1Y2UoKGFjYywgZWwpID0+IGFjYyArIGVsLnZlcnNpb24sIDApO1xuXG5leHBvcnQgY29uc3QgZ2V0VmlzaWJsZUVsZW1lbnRzID0gKGVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdKSA9PlxuICBlbGVtZW50cy5maWx0ZXIoXG4gICAgKGVsKSA9PiAhZWwuaXNEZWxldGVkICYmICFpc0ludmlzaWJseVNtYWxsRWxlbWVudChlbCksXG4gICkgYXMgcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W107XG5cbmV4cG9ydCBjb25zdCBnZXROb25EZWxldGVkRWxlbWVudHMgPSAoZWxlbWVudHM6IHJlYWRvbmx5IEV4Y2FsaWRyYXdFbGVtZW50W10pID0+XG4gIGVsZW1lbnRzLmZpbHRlcihcbiAgICAoZWxlbWVudCkgPT4gIWVsZW1lbnQuaXNEZWxldGVkLFxuICApIGFzIHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdO1xuXG5leHBvcnQgY29uc3QgaXNOb25EZWxldGVkRWxlbWVudCA9IDxUIGV4dGVuZHMgRXhjYWxpZHJhd0VsZW1lbnQ+KFxuICBlbGVtZW50OiBULFxuKTogZWxlbWVudCBpcyBOb25EZWxldGVkPFQ+ID0+ICFlbGVtZW50LmlzRGVsZXRlZDtcblxuY29uc3QgX2NsZWFyRWxlbWVudHMgPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdLFxuKTogRXhjYWxpZHJhd0VsZW1lbnRbXSA9PlxuICBnZXROb25EZWxldGVkRWxlbWVudHMoZWxlbWVudHMpLm1hcCgoZWxlbWVudCkgPT5cbiAgICBpc0xpbmVhckVsZW1lbnRUeXBlKGVsZW1lbnQudHlwZSlcbiAgICAgID8geyAuLi5lbGVtZW50LCBsYXN0Q29tbWl0dGVkUG9pbnQ6IG51bGwgfVxuICAgICAgOiBlbGVtZW50LFxuICApO1xuXG5leHBvcnQgY29uc3QgY2xlYXJFbGVtZW50c0ZvckRhdGFiYXNlID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgRXhjYWxpZHJhd0VsZW1lbnRbXSxcbikgPT4gX2NsZWFyRWxlbWVudHMoZWxlbWVudHMpO1xuXG5leHBvcnQgY29uc3QgY2xlYXJFbGVtZW50c0ZvckV4cG9ydCA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IEV4Y2FsaWRyYXdFbGVtZW50W10sXG4pID0+IF9jbGVhckVsZW1lbnRzKGVsZW1lbnRzKTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyRWxlbWVudHNGb3JMb2NhbFN0b3JhZ2UgPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBFeGNhbGlkcmF3RWxlbWVudFtdLFxuKSA9PiBfY2xlYXJFbGVtZW50cyhlbGVtZW50cyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../element/index.ts\n");
|
|
2907
2907
|
|
|
2908
2908
|
/***/ }),
|
|
2909
2909
|
|
|
@@ -2936,7 +2936,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2936
2936
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2937
2937
|
|
|
2938
2938
|
"use strict";
|
|
2939
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"deepCopyElement\": () => (/* binding */ deepCopyElement),\n/* harmony export */ \"duplicateElement\": () => (/* binding */ duplicateElement),\n/* harmony export */ \"getMaxContainerHeight\": () => (/* binding */ getMaxContainerHeight),\n/* harmony export */ \"getMaxContainerWidth\": () => (/* binding */ getMaxContainerWidth),\n/* harmony export */ \"newElement\": () => (/* binding */ newElement),\n/* harmony export */ \"newFreeDrawElement\": () => (/* binding */ newFreeDrawElement),\n/* harmony export */ \"newImageElement\": () => (/* binding */ newImageElement),\n/* harmony export */ \"newLinearElement\": () => (/* binding */ newLinearElement),\n/* harmony export */ \"newTextElement\": () => (/* binding */ newTextElement),\n/* harmony export */ \"updateTextElement\": () => (/* binding */ updateTextElement)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../random */ \"../../random.ts\");\n/* harmony import */ var _mutateElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _groups__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../groups */ \"../../groups.ts\");\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! . */ \"../../element/index.ts\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../math */ \"../../math.ts\");\n/* harmony import */ var _bounds__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _textElement__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./textElement */ \"../../element/textElement.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\nconst _newElementBase = (type, _a) => {\n var _b, _c;\n var { x, y, strokeColor, backgroundColor, fillStyle, strokeWidth, strokeStyle, roughness, opacity, width = 0, height = 0, angle = 0, groupIds = [], strokeSharpness, boundElements = null, link = null, locked } = _a, rest = __rest(_a, [\"x\", \"y\", \"strokeColor\", \"backgroundColor\", \"fillStyle\", \"strokeWidth\", \"strokeStyle\", \"roughness\", \"opacity\", \"width\", \"height\", \"angle\", \"groupIds\", \"strokeSharpness\", \"boundElements\", \"link\", \"locked\"]);\n const element = {\n id: rest.id || (0,_random__WEBPACK_IMPORTED_MODULE_1__.randomId)(),\n type,\n x,\n y,\n width,\n height,\n angle,\n strokeColor,\n backgroundColor,\n fillStyle,\n strokeWidth,\n strokeStyle,\n roughness,\n opacity,\n groupIds,\n strokeSharpness,\n seed: (_b = rest.seed) !== null && _b !== void 0 ? _b : (0,_random__WEBPACK_IMPORTED_MODULE_1__.randomInteger)(),\n version: rest.version || 1,\n versionNonce: (_c = rest.versionNonce) !== null && _c !== void 0 ? _c : 0,\n isDeleted: false,\n boundElements,\n updated: (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getUpdatedTimestamp)(),\n link,\n locked,\n };\n return element;\n};\nconst newElement = (opts) => _newElementBase(opts.type, opts);\n/** computes element x/y offset based on textAlign/verticalAlign */\nconst getTextElementPositionOffsets = (opts, metrics) => {\n return {\n x: opts.textAlign === \"center\"\n ? metrics.width / 2\n : opts.textAlign === \"right\"\n ? metrics.width\n : 0,\n y: opts.verticalAlign === \"middle\" ? metrics.height / 2 : 0,\n };\n};\nconst newTextElement = (opts) => {\n const metrics = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.measureText)(opts.text, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(opts));\n const offsets = getTextElementPositionOffsets(opts, metrics);\n const textElement = (0,_mutateElement__WEBPACK_IMPORTED_MODULE_2__.newElementWith)(Object.assign(Object.assign({}, _newElementBase(\"text\", opts)), { text: opts.text, fontSize: opts.fontSize, fontFamily: opts.fontFamily, textAlign: opts.textAlign, verticalAlign: opts.verticalAlign, x: opts.x - offsets.x, y: opts.y - offsets.y, width: metrics.width, height: metrics.height, baseline: metrics.baseline, containerId: opts.containerId || null, originalText: opts.text }), {});\n return textElement;\n};\nconst getAdjustedDimensions = (element, nextText) => {\n let maxWidth = null;\n const container = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.getContainerElement)(element);\n if (container) {\n const containerDims = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.getContainerDims)(container);\n maxWidth = containerDims.width - _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2;\n }\n const { width: nextWidth, height: nextHeight, baseline: nextBaseline, } = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.measureText)(nextText, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(element), maxWidth);\n const { textAlign, verticalAlign } = element;\n let x;\n let y;\n if (textAlign === \"center\" &&\n verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_8__.VERTICAL_ALIGN.MIDDLE &&\n !element.containerId) {\n const prevMetrics = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.measureText)(element.text, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(element), maxWidth);\n const offsets = getTextElementPositionOffsets(element, {\n width: nextWidth - prevMetrics.width,\n height: nextHeight - prevMetrics.height,\n });\n x = element.x - offsets.x;\n y = element.y - offsets.y;\n }\n else {\n const [x1, y1, x2, y2] = (0,___WEBPACK_IMPORTED_MODULE_4__.getElementAbsoluteCoords)(element);\n const [nextX1, nextY1, nextX2, nextY2] = (0,_bounds__WEBPACK_IMPORTED_MODULE_6__.getResizedElementAbsoluteCoords)(element, nextWidth, nextHeight, false);\n const deltaX1 = (x1 - nextX1) / 2;\n const deltaY1 = (y1 - nextY1) / 2;\n const deltaX2 = (x2 - nextX2) / 2;\n const deltaY2 = (y2 - nextY2) / 2;\n [x, y] = (0,_math__WEBPACK_IMPORTED_MODULE_5__.adjustXYWithRotation)({\n s: true,\n e: textAlign === \"center\" || textAlign === \"left\",\n w: textAlign === \"center\" || textAlign === \"right\",\n }, element.x, element.y, element.angle, deltaX1, deltaY1, deltaX2, deltaY2);\n }\n // make sure container dimensions are set properly when\n // text editor overflows beyond viewport dimensions\n if (container) {\n const containerDims = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.getContainerDims)(container);\n let height = containerDims.height;\n let width = containerDims.width;\n if (nextHeight > height - _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2) {\n height = nextHeight + _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2;\n }\n if (nextWidth > width - _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2) {\n width = nextWidth + _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2;\n }\n if (height !== containerDims.height || width !== containerDims.width) {\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_2__.mutateElement)(container, { height, width });\n }\n }\n return {\n width: nextWidth,\n height: nextHeight,\n x: Number.isFinite(x) ? x : element.x,\n y: Number.isFinite(y) ? y : element.y,\n baseline: nextBaseline,\n };\n};\nconst getMaxContainerWidth = (container) => {\n return (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.getContainerDims)(container).width - _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2;\n};\nconst getMaxContainerHeight = (container) => {\n return (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.getContainerDims)(container).height - _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2;\n};\nconst updateTextElement = (textElement, { text, isDeleted, originalText, }) => {\n const container = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.getContainerElement)(textElement);\n if (container) {\n text = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.wrapText)(originalText, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(textElement), getMaxContainerWidth(container));\n }\n const dimensions = getAdjustedDimensions(textElement, text);\n return (0,_mutateElement__WEBPACK_IMPORTED_MODULE_2__.newElementWith)(textElement, Object.assign({ text,\n originalText, isDeleted: isDeleted !== null && isDeleted !== void 0 ? isDeleted : textElement.isDeleted }, dimensions));\n};\nconst newFreeDrawElement = (opts) => {\n return Object.assign(Object.assign({}, _newElementBase(opts.type, opts)), { points: opts.points || [], pressures: [], simulatePressure: opts.simulatePressure, lastCommittedPoint: null });\n};\nconst newLinearElement = (opts) => {\n return Object.assign(Object.assign({}, _newElementBase(opts.type, opts)), { points: opts.points || [], lastCommittedPoint: null, startBinding: null, endBinding: null, startArrowhead: opts.startArrowhead, endArrowhead: opts.endArrowhead });\n};\nconst newImageElement = (opts) => {\n var _a, _b, _c;\n return Object.assign(Object.assign({}, _newElementBase(\"image\", opts)), { \n // in the future we'll support changing stroke color for some SVG elements,\n // and `transparent` will likely mean \"use original colors of the image\"\n strokeColor: \"transparent\", status: (_a = opts.status) !== null && _a !== void 0 ? _a : \"pending\", fileId: (_b = opts.fileId) !== null && _b !== void 0 ? _b : null, scale: (_c = opts.scale) !== null && _c !== void 0 ? _c : [1, 1] });\n};\n// Simplified deep clone for the purpose of cloning ExcalidrawElement only\n// (doesn't clone Date, RegExp, Map, Set, Typed arrays etc.)\n//\n// Adapted from https://github.com/lukeed/klona\nconst deepCopyElement = (val, depth = 0) => {\n if (val == null || typeof val !== \"object\") {\n return val;\n }\n if (Object.prototype.toString.call(val) === \"[object Object]\") {\n const tmp = typeof val.constructor === \"function\"\n ? Object.create(Object.getPrototypeOf(val))\n : {};\n for (const key in val) {\n if (val.hasOwnProperty(key)) {\n // don't copy top-level shape property, which we want to regenerate\n if (depth === 0 && (key === \"shape\" || key === \"canvas\")) {\n continue;\n }\n tmp[key] = deepCopyElement(val[key], depth + 1);\n }\n }\n return tmp;\n }\n if (Array.isArray(val)) {\n let k = val.length;\n const arr = new Array(k);\n while (k--) {\n arr[k] = deepCopyElement(val[k], depth + 1);\n }\n return arr;\n }\n return val;\n};\n/**\n * Duplicate an element, often used in the alt-drag operation.\n * Note that this method has gotten a bit complicated since the\n * introduction of gruoping/ungrouping elements.\n * @param editingGroupId The current group being edited. The new\n * element will inherit this group and its\n * parents.\n * @param groupIdMapForOperation A Map that maps old group IDs to\n * duplicated ones. If you are duplicating\n * multiple elements at once, share this map\n * amongst all of them\n * @param element Element to duplicate\n * @param overrides Any element properties to override\n */\nconst duplicateElement = (editingGroupId, groupIdMapForOperation, element, overrides) => {\n var _a, _b;\n let copy = deepCopyElement(element);\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isTestEnv)()) {\n copy.id = `${copy.id}_copy`;\n // `window.h` may not be defined in some unit tests\n if ((_b = (_a = window.h) === null || _a === void 0 ? void 0 : _a.app) === null || _b === void 0 ? void 0 : _b.getSceneElementsIncludingDeleted().find((el) => el.id === copy.id)) {\n copy.id += \"_copy\";\n }\n }\n else {\n copy.id = (0,_random__WEBPACK_IMPORTED_MODULE_1__.randomId)();\n }\n copy.updated = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getUpdatedTimestamp)();\n copy.seed = (0,_random__WEBPACK_IMPORTED_MODULE_1__.randomInteger)();\n copy.groupIds = (0,_groups__WEBPACK_IMPORTED_MODULE_3__.getNewGroupIdsForDuplication)(copy.groupIds, editingGroupId, (groupId) => {\n if (!groupIdMapForOperation.has(groupId)) {\n groupIdMapForOperation.set(groupId, (0,_random__WEBPACK_IMPORTED_MODULE_1__.randomId)());\n }\n return groupIdMapForOperation.get(groupId);\n });\n if (overrides) {\n copy = Object.assign(copy, overrides);\n }\n return copy;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q2IsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ3ZDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vZWxlbWVudC9uZXdFbGVtZW50LnRzPzEyNTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRXhjYWxpZHJhd0VsZW1lbnQsXG4gIEV4Y2FsaWRyYXdJbWFnZUVsZW1lbnQsXG4gIEV4Y2FsaWRyYXdUZXh0RWxlbWVudCxcbiAgRXhjYWxpZHJhd0xpbmVhckVsZW1lbnQsXG4gIEV4Y2FsaWRyYXdHZW5lcmljRWxlbWVudCxcbiAgTm9uRGVsZXRlZCxcbiAgVGV4dEFsaWduLFxuICBHcm91cElkLFxuICBWZXJ0aWNhbEFsaWduLFxuICBBcnJvd2hlYWQsXG4gIEV4Y2FsaWRyYXdGcmVlRHJhd0VsZW1lbnQsXG4gIEZvbnRGYW1pbHlWYWx1ZXMsXG4gIEV4Y2FsaWRyYXdSZWN0YW5nbGVFbGVtZW50LFxufSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0Rm9udFN0cmluZywgZ2V0VXBkYXRlZFRpbWVzdGFtcCwgaXNUZXN0RW52IH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyByYW5kb21JbnRlZ2VyLCByYW5kb21JZCB9IGZyb20gXCIuLi9yYW5kb21cIjtcbmltcG9ydCB7IG11dGF0ZUVsZW1lbnQsIG5ld0VsZW1lbnRXaXRoIH0gZnJvbSBcIi4vbXV0YXRlRWxlbWVudFwiO1xuaW1wb3J0IHsgZ2V0TmV3R3JvdXBJZHNGb3JEdXBsaWNhdGlvbiB9IGZyb20gXCIuLi9ncm91cHNcIjtcbmltcG9ydCB7IEFwcFN0YXRlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgYWRqdXN0WFlXaXRoUm90YXRpb24gfSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IHsgZ2V0UmVzaXplZEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyB9IGZyb20gXCIuL2JvdW5kc1wiO1xuaW1wb3J0IHtcbiAgZ2V0Q29udGFpbmVyRGltcyxcbiAgZ2V0Q29udGFpbmVyRWxlbWVudCxcbiAgbWVhc3VyZVRleHQsXG4gIHdyYXBUZXh0LFxufSBmcm9tIFwiLi90ZXh0RWxlbWVudFwiO1xuaW1wb3J0IHsgQk9VTkRfVEVYVF9QQURESU5HLCBWRVJUSUNBTF9BTElHTiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxudHlwZSBFbGVtZW50Q29uc3RydWN0b3JPcHRzID0gTWFya09wdGlvbmFsPFxuICBPbWl0PEV4Y2FsaWRyYXdHZW5lcmljRWxlbWVudCwgXCJpZFwiIHwgXCJ0eXBlXCIgfCBcImlzRGVsZXRlZFwiIHwgXCJ1cGRhdGVkXCI+LFxuICB8IFwid2lkdGhcIlxuICB8IFwiaGVpZ2h0XCJcbiAgfCBcImFuZ2xlXCJcbiAgfCBcImdyb3VwSWRzXCJcbiAgfCBcImJvdW5kRWxlbWVudHNcIlxuICB8IFwic2VlZFwiXG4gIHwgXCJ2ZXJzaW9uXCJcbiAgfCBcInZlcnNpb25Ob25jZVwiXG4gIHwgXCJsaW5rXCJcbj47XG5cbmNvbnN0IF9uZXdFbGVtZW50QmFzZSA9IDxUIGV4dGVuZHMgRXhjYWxpZHJhd0VsZW1lbnQ+KFxuICB0eXBlOiBUW1widHlwZVwiXSxcbiAge1xuICAgIHgsXG4gICAgeSxcbiAgICBzdHJva2VDb2xvcixcbiAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgZmlsbFN0eWxlLFxuICAgIHN0cm9rZVdpZHRoLFxuICAgIHN0cm9rZVN0eWxlLFxuICAgIHJvdWdobmVzcyxcbiAgICBvcGFjaXR5LFxuICAgIHdpZHRoID0gMCxcbiAgICBoZWlnaHQgPSAwLFxuICAgIGFuZ2xlID0gMCxcbiAgICBncm91cElkcyA9IFtdLFxuICAgIHN0cm9rZVNoYXJwbmVzcyxcbiAgICBib3VuZEVsZW1lbnRzID0gbnVsbCxcbiAgICBsaW5rID0gbnVsbCxcbiAgICBsb2NrZWQsXG4gICAgLi4ucmVzdFxuICB9OiBFbGVtZW50Q29uc3RydWN0b3JPcHRzICYgT21pdDxQYXJ0aWFsPEV4Y2FsaWRyYXdHZW5lcmljRWxlbWVudD4sIFwidHlwZVwiPixcbikgPT4ge1xuICBjb25zdCBlbGVtZW50ID0ge1xuICAgIGlkOiByZXN0LmlkIHx8IHJhbmRvbUlkKCksXG4gICAgdHlwZSxcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGFuZ2xlLFxuICAgIHN0cm9rZUNvbG9yLFxuICAgIGJhY2tncm91bmRDb2xvcixcbiAgICBmaWxsU3R5bGUsXG4gICAgc3Ryb2tlV2lkdGgsXG4gICAgc3Ryb2tlU3R5bGUsXG4gICAgcm91Z2huZXNzLFxuICAgIG9wYWNpdHksXG4gICAgZ3JvdXBJZHMsXG4gICAgc3Ryb2tlU2hhcnBuZXNzLFxuICAgIHNlZWQ6IHJlc3Quc2VlZCA/PyByYW5kb21JbnRlZ2VyKCksXG4gICAgdmVyc2lvbjogcmVzdC52ZXJzaW9uIHx8IDEsXG4gICAgdmVyc2lvbk5vbmNlOiByZXN0LnZlcnNpb25Ob25jZSA/PyAwLFxuICAgIGlzRGVsZXRlZDogZmFsc2UgYXMgZmFsc2UsXG4gICAgYm91bmRFbGVtZW50cyxcbiAgICB1cGRhdGVkOiBnZXRVcGRhdGVkVGltZXN0YW1wKCksXG4gICAgbGluayxcbiAgICBsb2NrZWQsXG4gIH07XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IG5ld0VsZW1lbnQgPSAoXG4gIG9wdHM6IHtcbiAgICB0eXBlOiBFeGNhbGlkcmF3R2VuZXJpY0VsZW1lbnRbXCJ0eXBlXCJdO1xuICB9ICYgRWxlbWVudENvbnN0cnVjdG9yT3B0cyxcbik6IE5vbkRlbGV0ZWQ8RXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50PiA9PlxuICBfbmV3RWxlbWVudEJhc2U8RXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50PihvcHRzLnR5cGUsIG9wdHMpO1xuXG4vKiogY29tcHV0ZXMgZWxlbWVudCB4L3kgb2Zmc2V0IGJhc2VkIG9uIHRleHRBbGlnbi92ZXJ0aWNhbEFsaWduICovXG5jb25zdCBnZXRUZXh0RWxlbWVudFBvc2l0aW9uT2Zmc2V0cyA9IChcbiAgb3B0czoge1xuICAgIHRleHRBbGlnbjogRXhjYWxpZHJhd1RleHRFbGVtZW50W1widGV4dEFsaWduXCJdO1xuICAgIHZlcnRpY2FsQWxpZ246IEV4Y2FsaWRyYXdUZXh0RWxlbWVudFtcInZlcnRpY2FsQWxpZ25cIl07XG4gIH0sXG4gIG1ldHJpY3M6IHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICB9LFxuKSA9PiB7XG4gIHJldHVybiB7XG4gICAgeDpcbiAgICAgIG9wdHMudGV4dEFsaWduID09PSBcImNlbnRlclwiXG4gICAgICAgID8gbWV0cmljcy53aWR0aCAvIDJcbiAgICAgICAgOiBvcHRzLnRleHRBbGlnbiA9PT0gXCJyaWdodFwiXG4gICAgICAgID8gbWV0cmljcy53aWR0aFxuICAgICAgICA6IDAsXG4gICAgeTogb3B0cy52ZXJ0aWNhbEFsaWduID09PSBcIm1pZGRsZVwiID8gbWV0cmljcy5oZWlnaHQgLyAyIDogMCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBuZXdUZXh0RWxlbWVudCA9IChcbiAgb3B0czoge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBmb250U2l6ZTogbnVtYmVyO1xuICAgIGZvbnRGYW1pbHk6IEZvbnRGYW1pbHlWYWx1ZXM7XG4gICAgdGV4dEFsaWduOiBUZXh0QWxpZ247XG4gICAgdmVydGljYWxBbGlnbjogVmVydGljYWxBbGlnbjtcbiAgICBjb250YWluZXJJZD86IEV4Y2FsaWRyYXdSZWN0YW5nbGVFbGVtZW50W1wiaWRcIl07XG4gIH0gJiBFbGVtZW50Q29uc3RydWN0b3JPcHRzLFxuKTogTm9uRGVsZXRlZDxFeGNhbGlkcmF3VGV4dEVsZW1lbnQ+ID0+IHtcbiAgY29uc3QgbWV0cmljcyA9IG1lYXN1cmVUZXh0KG9wdHMudGV4dCwgZ2V0Rm9udFN0cmluZyhvcHRzKSk7XG4gIGNvbnN0IG9mZnNldHMgPSBnZXRUZXh0RWxlbWVudFBvc2l0aW9uT2Zmc2V0cyhvcHRzLCBtZXRyaWNzKTtcbiAgY29uc3QgdGV4dEVsZW1lbnQgPSBuZXdFbGVtZW50V2l0aChcbiAgICB7XG4gICAgICAuLi5fbmV3RWxlbWVudEJhc2U8RXhjYWxpZHJhd1RleHRFbGVtZW50PihcInRleHRcIiwgb3B0cyksXG4gICAgICB0ZXh0OiBvcHRzLnRleHQsXG4gICAgICBmb250U2l6ZTogb3B0cy5mb250U2l6ZSxcbiAgICAgIGZvbnRGYW1pbHk6IG9wdHMuZm9udEZhbWlseSxcbiAgICAgIHRleHRBbGlnbjogb3B0cy50ZXh0QWxpZ24sXG4gICAgICB2ZXJ0aWNhbEFsaWduOiBvcHRzLnZlcnRpY2FsQWxpZ24sXG4gICAgICB4OiBvcHRzLnggLSBvZmZzZXRzLngsXG4gICAgICB5OiBvcHRzLnkgLSBvZmZzZXRzLnksXG4gICAgICB3aWR0aDogbWV0cmljcy53aWR0aCxcbiAgICAgIGhlaWdodDogbWV0cmljcy5oZWlnaHQsXG4gICAgICBiYXNlbGluZTogbWV0cmljcy5iYXNlbGluZSxcbiAgICAgIGNvbnRhaW5lcklkOiBvcHRzLmNvbnRhaW5lcklkIHx8IG51bGwsXG4gICAgICBvcmlnaW5hbFRleHQ6IG9wdHMudGV4dCxcbiAgICB9LFxuICAgIHt9LFxuICApO1xuICByZXR1cm4gdGV4dEVsZW1lbnQ7XG59O1xuXG5jb25zdCBnZXRBZGp1c3RlZERpbWVuc2lvbnMgPSAoXG4gIGVsZW1lbnQ6IEV4Y2FsaWRyYXdUZXh0RWxlbWVudCxcbiAgbmV4dFRleHQ6IHN0cmluZyxcbik6IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBiYXNlbGluZTogbnVtYmVyO1xufSA9PiB7XG4gIGxldCBtYXhXaWR0aCA9IG51bGw7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lckVsZW1lbnQoZWxlbWVudCk7XG4gIGlmIChjb250YWluZXIpIHtcbiAgICBjb25zdCBjb250YWluZXJEaW1zID0gZ2V0Q29udGFpbmVyRGltcyhjb250YWluZXIpO1xuICAgIG1heFdpZHRoID0gY29udGFpbmVyRGltcy53aWR0aCAtIEJPVU5EX1RFWFRfUEFERElORyAqIDI7XG4gIH1cbiAgY29uc3Qge1xuICAgIHdpZHRoOiBuZXh0V2lkdGgsXG4gICAgaGVpZ2h0OiBuZXh0SGVpZ2h0LFxuICAgIGJhc2VsaW5lOiBuZXh0QmFzZWxpbmUsXG4gIH0gPSBtZWFzdXJlVGV4dChuZXh0VGV4dCwgZ2V0Rm9udFN0cmluZyhlbGVtZW50KSwgbWF4V2lkdGgpO1xuICBjb25zdCB7IHRleHRBbGlnbiwgdmVydGljYWxBbGlnbiB9ID0gZWxlbWVudDtcbiAgbGV0IHg6IG51bWJlcjtcbiAgbGV0IHk6IG51bWJlcjtcbiAgaWYgKFxuICAgIHRleHRBbGlnbiA9PT0gXCJjZW50ZXJcIiAmJlxuICAgIHZlcnRpY2FsQWxpZ24gPT09IFZFUlRJQ0FMX0FMSUdOLk1JRERMRSAmJlxuICAgICFlbGVtZW50LmNvbnRhaW5lcklkXG4gICkge1xuICAgIGNvbnN0IHByZXZNZXRyaWNzID0gbWVhc3VyZVRleHQoXG4gICAgICBlbGVtZW50LnRleHQsXG4gICAgICBnZXRGb250U3RyaW5nKGVsZW1lbnQpLFxuICAgICAgbWF4V2lkdGgsXG4gICAgKTtcbiAgICBjb25zdCBvZmZzZXRzID0gZ2V0VGV4dEVsZW1lbnRQb3NpdGlvbk9mZnNldHMoZWxlbWVudCwge1xuICAgICAgd2lkdGg6IG5leHRXaWR0aCAtIHByZXZNZXRyaWNzLndpZHRoLFxuICAgICAgaGVpZ2h0OiBuZXh0SGVpZ2h0IC0gcHJldk1ldHJpY3MuaGVpZ2h0LFxuICAgIH0pO1xuXG4gICAgeCA9IGVsZW1lbnQueCAtIG9mZnNldHMueDtcbiAgICB5ID0gZWxlbWVudC55IC0gb2Zmc2V0cy55O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMoZWxlbWVudCk7XG5cbiAgICBjb25zdCBbbmV4dFgxLCBuZXh0WTEsIG5leHRYMiwgbmV4dFkyXSA9IGdldFJlc2l6ZWRFbGVtZW50QWJzb2x1dGVDb29yZHMoXG4gICAgICBlbGVtZW50LFxuICAgICAgbmV4dFdpZHRoLFxuICAgICAgbmV4dEhlaWdodCxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gICAgY29uc3QgZGVsdGFYMSA9ICh4MSAtIG5leHRYMSkgLyAyO1xuICAgIGNvbnN0IGRlbHRhWTEgPSAoeTEgLSBuZXh0WTEpIC8gMjtcbiAgICBjb25zdCBkZWx0YVgyID0gKHgyIC0gbmV4dFgyKSAvIDI7XG4gICAgY29uc3QgZGVsdGFZMiA9ICh5MiAtIG5leHRZMikgLyAyO1xuXG4gICAgW3gsIHldID0gYWRqdXN0WFlXaXRoUm90YXRpb24oXG4gICAgICB7XG4gICAgICAgIHM6IHRydWUsXG4gICAgICAgIGU6IHRleHRBbGlnbiA9PT0gXCJjZW50ZXJcIiB8fCB0ZXh0QWxpZ24gPT09IFwibGVmdFwiLFxuICAgICAgICB3OiB0ZXh0QWxpZ24gPT09IFwiY2VudGVyXCIgfHwgdGV4dEFsaWduID09PSBcInJpZ2h0XCIsXG4gICAgICB9LFxuICAgICAgZWxlbWVudC54LFxuICAgICAgZWxlbWVudC55LFxuICAgICAgZWxlbWVudC5hbmdsZSxcbiAgICAgIGRlbHRhWDEsXG4gICAgICBkZWx0YVkxLFxuICAgICAgZGVsdGFYMixcbiAgICAgIGRlbHRhWTIsXG4gICAgKTtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSBjb250YWluZXIgZGltZW5zaW9ucyBhcmUgc2V0IHByb3Blcmx5IHdoZW5cbiAgLy8gdGV4dCBlZGl0b3Igb3ZlcmZsb3dzIGJleW9uZCB2aWV3cG9ydCBkaW1lbnNpb25zXG4gIGlmIChjb250YWluZXIpIHtcbiAgICBjb25zdCBjb250YWluZXJEaW1zID0gZ2V0Q29udGFpbmVyRGltcyhjb250YWluZXIpO1xuICAgIGxldCBoZWlnaHQgPSBjb250YWluZXJEaW1zLmhlaWdodDtcbiAgICBsZXQgd2lkdGggPSBjb250YWluZXJEaW1zLndpZHRoO1xuICAgIGlmIChuZXh0SGVpZ2h0ID4gaGVpZ2h0IC0gQk9VTkRfVEVYVF9QQURESU5HICogMikge1xuICAgICAgaGVpZ2h0ID0gbmV4dEhlaWdodCArIEJPVU5EX1RFWFRfUEFERElORyAqIDI7XG4gICAgfVxuICAgIGlmIChuZXh0V2lkdGggPiB3aWR0aCAtIEJPVU5EX1RFWFRfUEFERElORyAqIDIpIHtcbiAgICAgIHdpZHRoID0gbmV4dFdpZHRoICsgQk9VTkRfVEVYVF9QQURESU5HICogMjtcbiAgICB9XG4gICAgaWYgKGhlaWdodCAhPT0gY29udGFpbmVyRGltcy5oZWlnaHQgfHwgd2lkdGggIT09IGNvbnRhaW5lckRpbXMud2lkdGgpIHtcbiAgICAgIG11dGF0ZUVsZW1lbnQoY29udGFpbmVyLCB7IGhlaWdodCwgd2lkdGggfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IG5leHRXaWR0aCxcbiAgICBoZWlnaHQ6IG5leHRIZWlnaHQsXG4gICAgeDogTnVtYmVyLmlzRmluaXRlKHgpID8geCA6IGVsZW1lbnQueCxcbiAgICB5OiBOdW1iZXIuaXNGaW5pdGUoeSkgPyB5IDogZWxlbWVudC55LFxuICAgIGJhc2VsaW5lOiBuZXh0QmFzZWxpbmUsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWF4Q29udGFpbmVyV2lkdGggPSAoY29udGFpbmVyOiBFeGNhbGlkcmF3RWxlbWVudCkgPT4ge1xuICByZXR1cm4gZ2V0Q29udGFpbmVyRGltcyhjb250YWluZXIpLndpZHRoIC0gQk9VTkRfVEVYVF9QQURESU5HICogMjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNYXhDb250YWluZXJIZWlnaHQgPSAoY29udGFpbmVyOiBFeGNhbGlkcmF3RWxlbWVudCkgPT4ge1xuICByZXR1cm4gZ2V0Q29udGFpbmVyRGltcyhjb250YWluZXIpLmhlaWdodCAtIEJPVU5EX1RFWFRfUEFERElORyAqIDI7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVGV4dEVsZW1lbnQgPSAoXG4gIHRleHRFbGVtZW50OiBFeGNhbGlkcmF3VGV4dEVsZW1lbnQsXG4gIHtcbiAgICB0ZXh0LFxuICAgIGlzRGVsZXRlZCxcbiAgICBvcmlnaW5hbFRleHQsXG4gIH06IHtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgaXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBvcmlnaW5hbFRleHQ6IHN0cmluZztcbiAgfSxcbik6IEV4Y2FsaWRyYXdUZXh0RWxlbWVudCA9PiB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lckVsZW1lbnQodGV4dEVsZW1lbnQpO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgdGV4dCA9IHdyYXBUZXh0KFxuICAgICAgb3JpZ2luYWxUZXh0LFxuICAgICAgZ2V0Rm9udFN0cmluZyh0ZXh0RWxlbWVudCksXG4gICAgICBnZXRNYXhDb250YWluZXJXaWR0aChjb250YWluZXIpLFxuICAgICk7XG4gIH1cbiAgY29uc3QgZGltZW5zaW9ucyA9IGdldEFkanVzdGVkRGltZW5zaW9ucyh0ZXh0RWxlbWVudCwgdGV4dCk7XG4gIHJldHVybiBuZXdFbGVtZW50V2l0aCh0ZXh0RWxlbWVudCwge1xuICAgIHRleHQsXG4gICAgb3JpZ2luYWxUZXh0LFxuICAgIGlzRGVsZXRlZDogaXNEZWxldGVkID8/IHRleHRFbGVtZW50LmlzRGVsZXRlZCxcbiAgICAuLi5kaW1lbnNpb25zLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBuZXdGcmVlRHJhd0VsZW1lbnQgPSAoXG4gIG9wdHM6IHtcbiAgICB0eXBlOiBcImZyZWVkcmF3XCI7XG4gICAgcG9pbnRzPzogRXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudFtcInBvaW50c1wiXTtcbiAgICBzaW11bGF0ZVByZXNzdXJlOiBib29sZWFuO1xuICB9ICYgRWxlbWVudENvbnN0cnVjdG9yT3B0cyxcbik6IE5vbkRlbGV0ZWQ8RXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudD4gPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLl9uZXdFbGVtZW50QmFzZTxFeGNhbGlkcmF3RnJlZURyYXdFbGVtZW50PihvcHRzLnR5cGUsIG9wdHMpLFxuICAgIHBvaW50czogb3B0cy5wb2ludHMgfHwgW10sXG4gICAgcHJlc3N1cmVzOiBbXSxcbiAgICBzaW11bGF0ZVByZXNzdXJlOiBvcHRzLnNpbXVsYXRlUHJlc3N1cmUsXG4gICAgbGFzdENvbW1pdHRlZFBvaW50OiBudWxsLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG5ld0xpbmVhckVsZW1lbnQgPSAoXG4gIG9wdHM6IHtcbiAgICB0eXBlOiBFeGNhbGlkcmF3TGluZWFyRWxlbWVudFtcInR5cGVcIl07XG4gICAgc3RhcnRBcnJvd2hlYWQ6IEFycm93aGVhZCB8IG51bGw7XG4gICAgZW5kQXJyb3doZWFkOiBBcnJvd2hlYWQgfCBudWxsO1xuICAgIHBvaW50cz86IEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50W1wicG9pbnRzXCJdO1xuICB9ICYgRWxlbWVudENvbnN0cnVjdG9yT3B0cyxcbik6IE5vbkRlbGV0ZWQ8RXhjYWxpZHJhd0xpbmVhckVsZW1lbnQ+ID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5fbmV3RWxlbWVudEJhc2U8RXhjYWxpZHJhd0xpbmVhckVsZW1lbnQ+KG9wdHMudHlwZSwgb3B0cyksXG4gICAgcG9pbnRzOiBvcHRzLnBvaW50cyB8fCBbXSxcbiAgICBsYXN0Q29tbWl0dGVkUG9pbnQ6IG51bGwsXG4gICAgc3RhcnRCaW5kaW5nOiBudWxsLFxuICAgIGVuZEJpbmRpbmc6IG51bGwsXG4gICAgc3RhcnRBcnJvd2hlYWQ6IG9wdHMuc3RhcnRBcnJvd2hlYWQsXG4gICAgZW5kQXJyb3doZWFkOiBvcHRzLmVuZEFycm93aGVhZCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBuZXdJbWFnZUVsZW1lbnQgPSAoXG4gIG9wdHM6IHtcbiAgICB0eXBlOiBFeGNhbGlkcmF3SW1hZ2VFbGVtZW50W1widHlwZVwiXTtcbiAgICBzdGF0dXM/OiBFeGNhbGlkcmF3SW1hZ2VFbGVtZW50W1wic3RhdHVzXCJdO1xuICAgIGZpbGVJZD86IEV4Y2FsaWRyYXdJbWFnZUVsZW1lbnRbXCJmaWxlSWRcIl07XG4gICAgc2NhbGU/OiBFeGNhbGlkcmF3SW1hZ2VFbGVtZW50W1wic2NhbGVcIl07XG4gIH0gJiBFbGVtZW50Q29uc3RydWN0b3JPcHRzLFxuKTogTm9uRGVsZXRlZDxFeGNhbGlkcmF3SW1hZ2VFbGVtZW50PiA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uX25ld0VsZW1lbnRCYXNlPEV4Y2FsaWRyYXdJbWFnZUVsZW1lbnQ+KFwiaW1hZ2VcIiwgb3B0cyksXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSB3ZSdsbCBzdXBwb3J0IGNoYW5naW5nIHN0cm9rZSBjb2xvciBmb3Igc29tZSBTVkcgZWxlbWVudHMsXG4gICAgLy8gYW5kIGB0cmFuc3BhcmVudGAgd2lsbCBsaWtlbHkgbWVhbiBcInVzZSBvcmlnaW5hbCBjb2xvcnMgb2YgdGhlIGltYWdlXCJcbiAgICBzdHJva2VDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgIHN0YXR1czogb3B0cy5zdGF0dXMgPz8gXCJwZW5kaW5nXCIsXG4gICAgZmlsZUlkOiBvcHRzLmZpbGVJZCA/PyBudWxsLFxuICAgIHNjYWxlOiBvcHRzLnNjYWxlID8/IFsxLCAxXSxcbiAgfTtcbn07XG5cbi8vIFNpbXBsaWZpZWQgZGVlcCBjbG9uZSBmb3IgdGhlIHB1cnBvc2Ugb2YgY2xvbmluZyBFeGNhbGlkcmF3RWxlbWVudCBvbmx5XG4vLyAoZG9lc24ndCBjbG9uZSBEYXRlLCBSZWdFeHAsIE1hcCwgU2V0LCBUeXBlZCBhcnJheXMgZXRjLilcbi8vXG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2x1a2VlZC9rbG9uYVxuZXhwb3J0IGNvbnN0IGRlZXBDb3B5RWxlbWVudCA9ICh2YWw6IGFueSwgZGVwdGg6IG51bWJlciA9IDApID0+IHtcbiAgaWYgKHZhbCA9PSBudWxsIHx8IHR5cGVvZiB2YWwgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSBcIltvYmplY3QgT2JqZWN0XVwiKSB7XG4gICAgY29uc3QgdG1wID1cbiAgICAgIHR5cGVvZiB2YWwuY29uc3RydWN0b3IgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCkpXG4gICAgICAgIDoge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdmFsKSB7XG4gICAgICBpZiAodmFsLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgLy8gZG9uJ3QgY29weSB0b3AtbGV2ZWwgc2hhcGUgcHJvcGVydHksIHdoaWNoIHdlIHdhbnQgdG8gcmVnZW5lcmF0ZVxuICAgICAgICBpZiAoZGVwdGggPT09IDAgJiYgKGtleSA9PT0gXCJzaGFwZVwiIHx8IGtleSA9PT0gXCJjYW52YXNcIikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0bXBba2V5XSA9IGRlZXBDb3B5RWxlbWVudCh2YWxba2V5XSwgZGVwdGggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRtcDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICBsZXQgayA9IHZhbC5sZW5ndGg7XG4gICAgY29uc3QgYXJyID0gbmV3IEFycmF5KGspO1xuICAgIHdoaWxlIChrLS0pIHtcbiAgICAgIGFycltrXSA9IGRlZXBDb3B5RWxlbWVudCh2YWxba10sIGRlcHRoICsgMSk7XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufTtcblxuLyoqXG4gKiBEdXBsaWNhdGUgYW4gZWxlbWVudCwgb2Z0ZW4gdXNlZCBpbiB0aGUgYWx0LWRyYWcgb3BlcmF0aW9uLlxuICogTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGhhcyBnb3R0ZW4gYSBiaXQgY29tcGxpY2F0ZWQgc2luY2UgdGhlXG4gKiBpbnRyb2R1Y3Rpb24gb2YgZ3J1b3BpbmcvdW5ncm91cGluZyBlbGVtZW50cy5cbiAqIEBwYXJhbSBlZGl0aW5nR3JvdXBJZCBUaGUgY3VycmVudCBncm91cCBiZWluZyBlZGl0ZWQuIFRoZSBuZXdcbiAqICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50IHdpbGwgaW5oZXJpdCB0aGlzIGdyb3VwIGFuZCBpdHNcbiAqICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLlxuICogQHBhcmFtIGdyb3VwSWRNYXBGb3JPcGVyYXRpb24gQSBNYXAgdGhhdCBtYXBzIG9sZCBncm91cCBJRHMgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZWQgb25lcy4gSWYgeW91IGFyZSBkdXBsaWNhdGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgZWxlbWVudHMgYXQgb25jZSwgc2hhcmUgdGhpcyBtYXBcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb25nc3QgYWxsIG9mIHRoZW1cbiAqIEBwYXJhbSBlbGVtZW50IEVsZW1lbnQgdG8gZHVwbGljYXRlXG4gKiBAcGFyYW0gb3ZlcnJpZGVzIEFueSBlbGVtZW50IHByb3BlcnRpZXMgdG8gb3ZlcnJpZGVcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUVsZW1lbnQgPSA8VEVsZW1lbnQgZXh0ZW5kcyBNdXRhYmxlPEV4Y2FsaWRyYXdFbGVtZW50Pj4oXG4gIGVkaXRpbmdHcm91cElkOiBBcHBTdGF0ZVtcImVkaXRpbmdHcm91cElkXCJdLFxuICBncm91cElkTWFwRm9yT3BlcmF0aW9uOiBNYXA8R3JvdXBJZCwgR3JvdXBJZD4sXG4gIGVsZW1lbnQ6IFRFbGVtZW50LFxuICBvdmVycmlkZXM/OiBQYXJ0aWFsPFRFbGVtZW50Pixcbik6IFRFbGVtZW50ID0+IHtcbiAgbGV0IGNvcHk6IFRFbGVtZW50ID0gZGVlcENvcHlFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoaXNUZXN0RW52KCkpIHtcbiAgICBjb3B5LmlkID0gYCR7Y29weS5pZH1fY29weWA7XG4gICAgLy8gYHdpbmRvdy5oYCBtYXkgbm90IGJlIGRlZmluZWQgaW4gc29tZSB1bml0IHRlc3RzXG4gICAgaWYgKFxuICAgICAgd2luZG93Lmg/LmFwcFxuICAgICAgICA/LmdldFNjZW5lRWxlbWVudHNJbmNsdWRpbmdEZWxldGVkKClcbiAgICAgICAgLmZpbmQoKGVsKSA9PiBlbC5pZCA9PT0gY29weS5pZClcbiAgICApIHtcbiAgICAgIGNvcHkuaWQgKz0gXCJfY29weVwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb3B5LmlkID0gcmFuZG9tSWQoKTtcbiAgfVxuICBjb3B5LnVwZGF0ZWQgPSBnZXRVcGRhdGVkVGltZXN0YW1wKCk7XG4gIGNvcHkuc2VlZCA9IHJhbmRvbUludGVnZXIoKTtcbiAgY29weS5ncm91cElkcyA9IGdldE5ld0dyb3VwSWRzRm9yRHVwbGljYXRpb24oXG4gICAgY29weS5ncm91cElkcyxcbiAgICBlZGl0aW5nR3JvdXBJZCxcbiAgICAoZ3JvdXBJZCkgPT4ge1xuICAgICAgaWYgKCFncm91cElkTWFwRm9yT3BlcmF0aW9uLmhhcyhncm91cElkKSkge1xuICAgICAgICBncm91cElkTWFwRm9yT3BlcmF0aW9uLnNldChncm91cElkLCByYW5kb21JZCgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBncm91cElkTWFwRm9yT3BlcmF0aW9uLmdldChncm91cElkKSE7XG4gICAgfSxcbiAgKTtcbiAgaWYgKG92ZXJyaWRlcykge1xuICAgIGNvcHkgPSBPYmplY3QuYXNzaWduKGNvcHksIG92ZXJyaWRlcyk7XG4gIH1cbiAgcmV0dXJuIGNvcHk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../element/newElement.ts\n");
|
|
2939
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"deepCopyElement\": () => (/* binding */ deepCopyElement),\n/* harmony export */ \"duplicateElement\": () => (/* binding */ duplicateElement),\n/* harmony export */ \"getMaxContainerHeight\": () => (/* binding */ getMaxContainerHeight),\n/* harmony export */ \"getMaxContainerWidth\": () => (/* binding */ getMaxContainerWidth),\n/* harmony export */ \"newElement\": () => (/* binding */ newElement),\n/* harmony export */ \"newFreeDrawElement\": () => (/* binding */ newFreeDrawElement),\n/* harmony export */ \"newImageElement\": () => (/* binding */ newImageElement),\n/* harmony export */ \"newLinearElement\": () => (/* binding */ newLinearElement),\n/* harmony export */ \"newTextElement\": () => (/* binding */ newTextElement),\n/* harmony export */ \"refreshTextDimensions\": () => (/* binding */ refreshTextDimensions),\n/* harmony export */ \"updateTextElement\": () => (/* binding */ updateTextElement)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../random */ \"../../random.ts\");\n/* harmony import */ var _mutateElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _groups__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../groups */ \"../../groups.ts\");\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! . */ \"../../element/index.ts\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../math */ \"../../math.ts\");\n/* harmony import */ var _bounds__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _textElement__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./textElement */ \"../../element/textElement.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\nconst _newElementBase = (type, _a) => {\n var _b, _c;\n var { x, y, strokeColor, backgroundColor, fillStyle, strokeWidth, strokeStyle, roughness, opacity, width = 0, height = 0, angle = 0, groupIds = [], strokeSharpness, boundElements = null, link = null, locked } = _a, rest = __rest(_a, [\"x\", \"y\", \"strokeColor\", \"backgroundColor\", \"fillStyle\", \"strokeWidth\", \"strokeStyle\", \"roughness\", \"opacity\", \"width\", \"height\", \"angle\", \"groupIds\", \"strokeSharpness\", \"boundElements\", \"link\", \"locked\"]);\n const element = {\n id: rest.id || (0,_random__WEBPACK_IMPORTED_MODULE_1__.randomId)(),\n type,\n x,\n y,\n width,\n height,\n angle,\n strokeColor,\n backgroundColor,\n fillStyle,\n strokeWidth,\n strokeStyle,\n roughness,\n opacity,\n groupIds,\n strokeSharpness,\n seed: (_b = rest.seed) !== null && _b !== void 0 ? _b : (0,_random__WEBPACK_IMPORTED_MODULE_1__.randomInteger)(),\n version: rest.version || 1,\n versionNonce: (_c = rest.versionNonce) !== null && _c !== void 0 ? _c : 0,\n isDeleted: false,\n boundElements,\n updated: (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getUpdatedTimestamp)(),\n link,\n locked,\n };\n return element;\n};\nconst newElement = (opts) => _newElementBase(opts.type, opts);\n/** computes element x/y offset based on textAlign/verticalAlign */\nconst getTextElementPositionOffsets = (opts, metrics) => {\n return {\n x: opts.textAlign === \"center\"\n ? metrics.width / 2\n : opts.textAlign === \"right\"\n ? metrics.width\n : 0,\n y: opts.verticalAlign === \"middle\" ? metrics.height / 2 : 0,\n };\n};\nconst newTextElement = (opts) => {\n const metrics = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.measureText)(opts.text, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(opts));\n const offsets = getTextElementPositionOffsets(opts, metrics);\n const textElement = (0,_mutateElement__WEBPACK_IMPORTED_MODULE_2__.newElementWith)(Object.assign(Object.assign({}, _newElementBase(\"text\", opts)), { text: opts.text, fontSize: opts.fontSize, fontFamily: opts.fontFamily, textAlign: opts.textAlign, verticalAlign: opts.verticalAlign, x: opts.x - offsets.x, y: opts.y - offsets.y, width: metrics.width, height: metrics.height, baseline: metrics.baseline, containerId: opts.containerId || null, originalText: opts.text }), {});\n return textElement;\n};\nconst getAdjustedDimensions = (element, nextText) => {\n let maxWidth = null;\n const container = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.getContainerElement)(element);\n if (container) {\n const containerDims = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.getContainerDims)(container);\n maxWidth = containerDims.width - _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2;\n }\n const { width: nextWidth, height: nextHeight, baseline: nextBaseline, } = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.measureText)(nextText, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(element), maxWidth);\n const { textAlign, verticalAlign } = element;\n let x;\n let y;\n if (textAlign === \"center\" &&\n verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_8__.VERTICAL_ALIGN.MIDDLE &&\n !element.containerId) {\n const prevMetrics = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.measureText)(element.text, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(element), maxWidth);\n const offsets = getTextElementPositionOffsets(element, {\n width: nextWidth - prevMetrics.width,\n height: nextHeight - prevMetrics.height,\n });\n x = element.x - offsets.x;\n y = element.y - offsets.y;\n }\n else {\n const [x1, y1, x2, y2] = (0,___WEBPACK_IMPORTED_MODULE_4__.getElementAbsoluteCoords)(element);\n const [nextX1, nextY1, nextX2, nextY2] = (0,_bounds__WEBPACK_IMPORTED_MODULE_6__.getResizedElementAbsoluteCoords)(element, nextWidth, nextHeight, false);\n const deltaX1 = (x1 - nextX1) / 2;\n const deltaY1 = (y1 - nextY1) / 2;\n const deltaX2 = (x2 - nextX2) / 2;\n const deltaY2 = (y2 - nextY2) / 2;\n [x, y] = (0,_math__WEBPACK_IMPORTED_MODULE_5__.adjustXYWithRotation)({\n s: true,\n e: textAlign === \"center\" || textAlign === \"left\",\n w: textAlign === \"center\" || textAlign === \"right\",\n }, element.x, element.y, element.angle, deltaX1, deltaY1, deltaX2, deltaY2);\n }\n // make sure container dimensions are set properly when\n // text editor overflows beyond viewport dimensions\n if (container) {\n const containerDims = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.getContainerDims)(container);\n let height = containerDims.height;\n let width = containerDims.width;\n if (nextHeight > height - _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2) {\n height = nextHeight + _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2;\n }\n if (nextWidth > width - _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2) {\n width = nextWidth + _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2;\n }\n if (height !== containerDims.height || width !== containerDims.width) {\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_2__.mutateElement)(container, { height, width });\n }\n }\n return {\n width: nextWidth,\n height: nextHeight,\n x: Number.isFinite(x) ? x : element.x,\n y: Number.isFinite(y) ? y : element.y,\n baseline: nextBaseline,\n };\n};\nconst refreshTextDimensions = (textElement, text = textElement.text) => {\n const container = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.getContainerElement)(textElement);\n if (container) {\n // text = wrapText(text, getFontString(textElement), container.width);\n text = (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.wrapText)(text, (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getFontString)(textElement), getMaxContainerWidth(container));\n }\n const dimensions = getAdjustedDimensions(textElement, text);\n return Object.assign({ text }, dimensions);\n};\nconst getMaxContainerWidth = (container) => {\n return (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.getContainerDims)(container).width - _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2;\n};\nconst getMaxContainerHeight = (container) => {\n return (0,_textElement__WEBPACK_IMPORTED_MODULE_7__.getContainerDims)(container).height - _constants__WEBPACK_IMPORTED_MODULE_8__.BOUND_TEXT_PADDING * 2;\n};\nconst updateTextElement = (textElement, { text, isDeleted, originalText, }) => {\n return (0,_mutateElement__WEBPACK_IMPORTED_MODULE_2__.newElementWith)(textElement, Object.assign({ originalText, isDeleted: isDeleted !== null && isDeleted !== void 0 ? isDeleted : textElement.isDeleted }, refreshTextDimensions(textElement, originalText)));\n};\nconst newFreeDrawElement = (opts) => {\n return Object.assign(Object.assign({}, _newElementBase(opts.type, opts)), { points: opts.points || [], pressures: [], simulatePressure: opts.simulatePressure, lastCommittedPoint: null });\n};\nconst newLinearElement = (opts) => {\n return Object.assign(Object.assign({}, _newElementBase(opts.type, opts)), { points: opts.points || [], lastCommittedPoint: null, startBinding: null, endBinding: null, startArrowhead: opts.startArrowhead, endArrowhead: opts.endArrowhead });\n};\nconst newImageElement = (opts) => {\n var _a, _b, _c;\n return Object.assign(Object.assign({}, _newElementBase(\"image\", opts)), { \n // in the future we'll support changing stroke color for some SVG elements,\n // and `transparent` will likely mean \"use original colors of the image\"\n strokeColor: \"transparent\", status: (_a = opts.status) !== null && _a !== void 0 ? _a : \"pending\", fileId: (_b = opts.fileId) !== null && _b !== void 0 ? _b : null, scale: (_c = opts.scale) !== null && _c !== void 0 ? _c : [1, 1] });\n};\n// Simplified deep clone for the purpose of cloning ExcalidrawElement only\n// (doesn't clone Date, RegExp, Map, Set, Typed arrays etc.)\n//\n// Adapted from https://github.com/lukeed/klona\nconst deepCopyElement = (val, depth = 0) => {\n if (val == null || typeof val !== \"object\") {\n return val;\n }\n if (Object.prototype.toString.call(val) === \"[object Object]\") {\n const tmp = typeof val.constructor === \"function\"\n ? Object.create(Object.getPrototypeOf(val))\n : {};\n for (const key in val) {\n if (val.hasOwnProperty(key)) {\n // don't copy top-level shape property, which we want to regenerate\n if (depth === 0 && (key === \"shape\" || key === \"canvas\")) {\n continue;\n }\n tmp[key] = deepCopyElement(val[key], depth + 1);\n }\n }\n return tmp;\n }\n if (Array.isArray(val)) {\n let k = val.length;\n const arr = new Array(k);\n while (k--) {\n arr[k] = deepCopyElement(val[k], depth + 1);\n }\n return arr;\n }\n return val;\n};\n/**\n * Duplicate an element, often used in the alt-drag operation.\n * Note that this method has gotten a bit complicated since the\n * introduction of gruoping/ungrouping elements.\n * @param editingGroupId The current group being edited. The new\n * element will inherit this group and its\n * parents.\n * @param groupIdMapForOperation A Map that maps old group IDs to\n * duplicated ones. If you are duplicating\n * multiple elements at once, share this map\n * amongst all of them\n * @param element Element to duplicate\n * @param overrides Any element properties to override\n */\nconst duplicateElement = (editingGroupId, groupIdMapForOperation, element, overrides) => {\n var _a, _b;\n let copy = deepCopyElement(element);\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isTestEnv)()) {\n copy.id = `${copy.id}_copy`;\n // `window.h` may not be defined in some unit tests\n if ((_b = (_a = window.h) === null || _a === void 0 ? void 0 : _a.app) === null || _b === void 0 ? void 0 : _b.getSceneElementsIncludingDeleted().find((el) => el.id === copy.id)) {\n copy.id += \"_copy\";\n }\n }\n else {\n copy.id = (0,_random__WEBPACK_IMPORTED_MODULE_1__.randomId)();\n }\n copy.updated = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getUpdatedTimestamp)();\n copy.seed = (0,_random__WEBPACK_IMPORTED_MODULE_1__.randomInteger)();\n copy.groupIds = (0,_groups__WEBPACK_IMPORTED_MODULE_3__.getNewGroupIdsForDuplication)(copy.groupIds, editingGroupId, (groupId) => {\n if (!groupIdMapForOperation.has(groupId)) {\n groupIdMapForOperation.set(groupId, (0,_random__WEBPACK_IMPORTED_MODULE_1__.randomId)());\n }\n return groupIdMapForOperation.get(groupId);\n });\n if (overrides) {\n copy = Object.assign(copy, overrides);\n }\n return copy;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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WUFDeEMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxpREFBUSxFQUFFLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sc0JBQXNCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBRSxDQUFDO0lBQzlDLENBQUMsQ0FDRixDQUFDO0lBQ0YsSUFBSSxTQUFTLEVBQUU7UUFDYixJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDdkM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9lbGVtZW50L25ld0VsZW1lbnQudHM/MTI1MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFeGNhbGlkcmF3RWxlbWVudCxcbiAgRXhjYWxpZHJhd0ltYWdlRWxlbWVudCxcbiAgRXhjYWxpZHJhd1RleHRFbGVtZW50LFxuICBFeGNhbGlkcmF3TGluZWFyRWxlbWVudCxcbiAgRXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50LFxuICBOb25EZWxldGVkLFxuICBUZXh0QWxpZ24sXG4gIEdyb3VwSWQsXG4gIFZlcnRpY2FsQWxpZ24sXG4gIEFycm93aGVhZCxcbiAgRXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudCxcbiAgRm9udEZhbWlseVZhbHVlcyxcbiAgRXhjYWxpZHJhd1JlY3RhbmdsZUVsZW1lbnQsXG59IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRGb250U3RyaW5nLCBnZXRVcGRhdGVkVGltZXN0YW1wLCBpc1Rlc3RFbnYgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IHJhbmRvbUludGVnZXIsIHJhbmRvbUlkIH0gZnJvbSBcIi4uL3JhbmRvbVwiO1xuaW1wb3J0IHsgbXV0YXRlRWxlbWVudCwgbmV3RWxlbWVudFdpdGggfSBmcm9tIFwiLi9tdXRhdGVFbGVtZW50XCI7XG5pbXBvcnQgeyBnZXROZXdHcm91cElkc0ZvckR1cGxpY2F0aW9uIH0gZnJvbSBcIi4uL2dyb3Vwc1wiO1xuaW1wb3J0IHsgQXBwU3RhdGUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyB9IGZyb20gXCIuXCI7XG5pbXBvcnQgeyBhZGp1c3RYWVdpdGhSb3RhdGlvbiB9IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQgeyBnZXRSZXNpemVkRWxlbWVudEFic29sdXRlQ29vcmRzIH0gZnJvbSBcIi4vYm91bmRzXCI7XG5pbXBvcnQge1xuICBnZXRDb250YWluZXJEaW1zLFxuICBnZXRDb250YWluZXJFbGVtZW50LFxuICBtZWFzdXJlVGV4dCxcbiAgd3JhcFRleHQsXG59IGZyb20gXCIuL3RleHRFbGVtZW50XCI7XG5pbXBvcnQgeyBCT1VORF9URVhUX1BBRERJTkcsIFZFUlRJQ0FMX0FMSUdOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG50eXBlIEVsZW1lbnRDb25zdHJ1Y3Rvck9wdHMgPSBNYXJrT3B0aW9uYWw8XG4gIE9taXQ8RXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50LCBcImlkXCIgfCBcInR5cGVcIiB8IFwiaXNEZWxldGVkXCIgfCBcInVwZGF0ZWRcIj4sXG4gIHwgXCJ3aWR0aFwiXG4gIHwgXCJoZWlnaHRcIlxuICB8IFwiYW5nbGVcIlxuICB8IFwiZ3JvdXBJZHNcIlxuICB8IFwiYm91bmRFbGVtZW50c1wiXG4gIHwgXCJzZWVkXCJcbiAgfCBcInZlcnNpb25cIlxuICB8IFwidmVyc2lvbk5vbmNlXCJcbiAgfCBcImxpbmtcIlxuPjtcblxuY29uc3QgX25ld0VsZW1lbnRCYXNlID0gPFQgZXh0ZW5kcyBFeGNhbGlkcmF3RWxlbWVudD4oXG4gIHR5cGU6IFRbXCJ0eXBlXCJdLFxuICB7XG4gICAgeCxcbiAgICB5LFxuICAgIHN0cm9rZUNvbG9yLFxuICAgIGJhY2tncm91bmRDb2xvcixcbiAgICBmaWxsU3R5bGUsXG4gICAgc3Ryb2tlV2lkdGgsXG4gICAgc3Ryb2tlU3R5bGUsXG4gICAgcm91Z2huZXNzLFxuICAgIG9wYWNpdHksXG4gICAgd2lkdGggPSAwLFxuICAgIGhlaWdodCA9IDAsXG4gICAgYW5nbGUgPSAwLFxuICAgIGdyb3VwSWRzID0gW10sXG4gICAgc3Ryb2tlU2hhcnBuZXNzLFxuICAgIGJvdW5kRWxlbWVudHMgPSBudWxsLFxuICAgIGxpbmsgPSBudWxsLFxuICAgIGxvY2tlZCxcbiAgICAuLi5yZXN0XG4gIH06IEVsZW1lbnRDb25zdHJ1Y3Rvck9wdHMgJiBPbWl0PFBhcnRpYWw8RXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50PiwgXCJ0eXBlXCI+LFxuKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgaWQ6IHJlc3QuaWQgfHwgcmFuZG9tSWQoKSxcbiAgICB0eXBlLFxuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgYW5nbGUsXG4gICAgc3Ryb2tlQ29sb3IsXG4gICAgYmFja2dyb3VuZENvbG9yLFxuICAgIGZpbGxTdHlsZSxcbiAgICBzdHJva2VXaWR0aCxcbiAgICBzdHJva2VTdHlsZSxcbiAgICByb3VnaG5lc3MsXG4gICAgb3BhY2l0eSxcbiAgICBncm91cElkcyxcbiAgICBzdHJva2VTaGFycG5lc3MsXG4gICAgc2VlZDogcmVzdC5zZWVkID8/IHJhbmRvbUludGVnZXIoKSxcbiAgICB2ZXJzaW9uOiByZXN0LnZlcnNpb24gfHwgMSxcbiAgICB2ZXJzaW9uTm9uY2U6IHJlc3QudmVyc2lvbk5vbmNlID8/IDAsXG4gICAgaXNEZWxldGVkOiBmYWxzZSBhcyBmYWxzZSxcbiAgICBib3VuZEVsZW1lbnRzLFxuICAgIHVwZGF0ZWQ6IGdldFVwZGF0ZWRUaW1lc3RhbXAoKSxcbiAgICBsaW5rLFxuICAgIGxvY2tlZCxcbiAgfTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgbmV3RWxlbWVudCA9IChcbiAgb3B0czoge1xuICAgIHR5cGU6IEV4Y2FsaWRyYXdHZW5lcmljRWxlbWVudFtcInR5cGVcIl07XG4gIH0gJiBFbGVtZW50Q29uc3RydWN0b3JPcHRzLFxuKTogTm9uRGVsZXRlZDxFeGNhbGlkcmF3R2VuZXJpY0VsZW1lbnQ+ID0+XG4gIF9uZXdFbGVtZW50QmFzZTxFeGNhbGlkcmF3R2VuZXJpY0VsZW1lbnQ+KG9wdHMudHlwZSwgb3B0cyk7XG5cbi8qKiBjb21wdXRlcyBlbGVtZW50IHgveSBvZmZzZXQgYmFzZWQgb24gdGV4dEFsaWduL3ZlcnRpY2FsQWxpZ24gKi9cbmNvbnN0IGdldFRleHRFbGVtZW50UG9zaXRpb25PZmZzZXRzID0gKFxuICBvcHRzOiB7XG4gICAgdGV4dEFsaWduOiBFeGNhbGlkcmF3VGV4dEVsZW1lbnRbXCJ0ZXh0QWxpZ25cIl07XG4gICAgdmVydGljYWxBbGlnbjogRXhjYWxpZHJhd1RleHRFbGVtZW50W1widmVydGljYWxBbGlnblwiXTtcbiAgfSxcbiAgbWV0cmljczoge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gIH0sXG4pID0+IHtcbiAgcmV0dXJuIHtcbiAgICB4OlxuICAgICAgb3B0cy50ZXh0QWxpZ24gPT09IFwiY2VudGVyXCJcbiAgICAgICAgPyBtZXRyaWNzLndpZHRoIC8gMlxuICAgICAgICA6IG9wdHMudGV4dEFsaWduID09PSBcInJpZ2h0XCJcbiAgICAgICAgPyBtZXRyaWNzLndpZHRoXG4gICAgICAgIDogMCxcbiAgICB5OiBvcHRzLnZlcnRpY2FsQWxpZ24gPT09IFwibWlkZGxlXCIgPyBtZXRyaWNzLmhlaWdodCAvIDIgOiAwLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG5ld1RleHRFbGVtZW50ID0gKFxuICBvcHRzOiB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIGZvbnRTaXplOiBudW1iZXI7XG4gICAgZm9udEZhbWlseTogRm9udEZhbWlseVZhbHVlcztcbiAgICB0ZXh0QWxpZ246IFRleHRBbGlnbjtcbiAgICB2ZXJ0aWNhbEFsaWduOiBWZXJ0aWNhbEFsaWduO1xuICAgIGNvbnRhaW5lcklkPzogRXhjYWxpZHJhd1JlY3RhbmdsZUVsZW1lbnRbXCJpZFwiXTtcbiAgfSAmIEVsZW1lbnRDb25zdHJ1Y3Rvck9wdHMsXG4pOiBOb25EZWxldGVkPEV4Y2FsaWRyYXdUZXh0RWxlbWVudD4gPT4ge1xuICBjb25zdCBtZXRyaWNzID0gbWVhc3VyZVRleHQob3B0cy50ZXh0LCBnZXRGb250U3RyaW5nKG9wdHMpKTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGdldFRleHRFbGVtZW50UG9zaXRpb25PZmZzZXRzKG9wdHMsIG1ldHJpY3MpO1xuICBjb25zdCB0ZXh0RWxlbWVudCA9IG5ld0VsZW1lbnRXaXRoKFxuICAgIHtcbiAgICAgIC4uLl9uZXdFbGVtZW50QmFzZTxFeGNhbGlkcmF3VGV4dEVsZW1lbnQ+KFwidGV4dFwiLCBvcHRzKSxcbiAgICAgIHRleHQ6IG9wdHMudGV4dCxcbiAgICAgIGZvbnRTaXplOiBvcHRzLmZvbnRTaXplLFxuICAgICAgZm9udEZhbWlseTogb3B0cy5mb250RmFtaWx5LFxuICAgICAgdGV4dEFsaWduOiBvcHRzLnRleHRBbGlnbixcbiAgICAgIHZlcnRpY2FsQWxpZ246IG9wdHMudmVydGljYWxBbGlnbixcbiAgICAgIHg6IG9wdHMueCAtIG9mZnNldHMueCxcbiAgICAgIHk6IG9wdHMueSAtIG9mZnNldHMueSxcbiAgICAgIHdpZHRoOiBtZXRyaWNzLndpZHRoLFxuICAgICAgaGVpZ2h0OiBtZXRyaWNzLmhlaWdodCxcbiAgICAgIGJhc2VsaW5lOiBtZXRyaWNzLmJhc2VsaW5lLFxuICAgICAgY29udGFpbmVySWQ6IG9wdHMuY29udGFpbmVySWQgfHwgbnVsbCxcbiAgICAgIG9yaWdpbmFsVGV4dDogb3B0cy50ZXh0LFxuICAgIH0sXG4gICAge30sXG4gICk7XG4gIHJldHVybiB0ZXh0RWxlbWVudDtcbn07XG5cbmNvbnN0IGdldEFkanVzdGVkRGltZW5zaW9ucyA9IChcbiAgZWxlbWVudDogRXhjYWxpZHJhd1RleHRFbGVtZW50LFxuICBuZXh0VGV4dDogc3RyaW5nLFxuKToge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGJhc2VsaW5lOiBudW1iZXI7XG59ID0+IHtcbiAgbGV0IG1heFdpZHRoID0gbnVsbDtcbiAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyRWxlbWVudChlbGVtZW50KTtcbiAgaWYgKGNvbnRhaW5lcikge1xuICAgIGNvbnN0IGNvbnRhaW5lckRpbXMgPSBnZXRDb250YWluZXJEaW1zKGNvbnRhaW5lcik7XG4gICAgbWF4V2lkdGggPSBjb250YWluZXJEaW1zLndpZHRoIC0gQk9VTkRfVEVYVF9QQURESU5HICogMjtcbiAgfVxuICBjb25zdCB7XG4gICAgd2lkdGg6IG5leHRXaWR0aCxcbiAgICBoZWlnaHQ6IG5leHRIZWlnaHQsXG4gICAgYmFzZWxpbmU6IG5leHRCYXNlbGluZSxcbiAgfSA9IG1lYXN1cmVUZXh0KG5leHRUZXh0LCBnZXRGb250U3RyaW5nKGVsZW1lbnQpLCBtYXhXaWR0aCk7XG4gIGNvbnN0IHsgdGV4dEFsaWduLCB2ZXJ0aWNhbEFsaWduIH0gPSBlbGVtZW50O1xuICBsZXQgeDogbnVtYmVyO1xuICBsZXQgeTogbnVtYmVyO1xuICBpZiAoXG4gICAgdGV4dEFsaWduID09PSBcImNlbnRlclwiICYmXG4gICAgdmVydGljYWxBbGlnbiA9PT0gVkVSVElDQUxfQUxJR04uTUlERExFICYmXG4gICAgIWVsZW1lbnQuY29udGFpbmVySWRcbiAgKSB7XG4gICAgY29uc3QgcHJldk1ldHJpY3MgPSBtZWFzdXJlVGV4dChcbiAgICAgIGVsZW1lbnQudGV4dCxcbiAgICAgIGdldEZvbnRTdHJpbmcoZWxlbWVudCksXG4gICAgICBtYXhXaWR0aCxcbiAgICApO1xuICAgIGNvbnN0IG9mZnNldHMgPSBnZXRUZXh0RWxlbWVudFBvc2l0aW9uT2Zmc2V0cyhlbGVtZW50LCB7XG4gICAgICB3aWR0aDogbmV4dFdpZHRoIC0gcHJldk1ldHJpY3Mud2lkdGgsXG4gICAgICBoZWlnaHQ6IG5leHRIZWlnaHQgLSBwcmV2TWV0cmljcy5oZWlnaHQsXG4gICAgfSk7XG5cbiAgICB4ID0gZWxlbWVudC54IC0gb2Zmc2V0cy54O1xuICAgIHkgPSBlbGVtZW50LnkgLSBvZmZzZXRzLnk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyhlbGVtZW50KTtcblxuICAgIGNvbnN0IFtuZXh0WDEsIG5leHRZMSwgbmV4dFgyLCBuZXh0WTJdID0gZ2V0UmVzaXplZEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyhcbiAgICAgIGVsZW1lbnQsXG4gICAgICBuZXh0V2lkdGgsXG4gICAgICBuZXh0SGVpZ2h0LFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgICBjb25zdCBkZWx0YVgxID0gKHgxIC0gbmV4dFgxKSAvIDI7XG4gICAgY29uc3QgZGVsdGFZMSA9ICh5MSAtIG5leHRZMSkgLyAyO1xuICAgIGNvbnN0IGRlbHRhWDIgPSAoeDIgLSBuZXh0WDIpIC8gMjtcbiAgICBjb25zdCBkZWx0YVkyID0gKHkyIC0gbmV4dFkyKSAvIDI7XG5cbiAgICBbeCwgeV0gPSBhZGp1c3RYWVdpdGhSb3RhdGlvbihcbiAgICAgIHtcbiAgICAgICAgczogdHJ1ZSxcbiAgICAgICAgZTogdGV4dEFsaWduID09PSBcImNlbnRlclwiIHx8IHRleHRBbGlnbiA9PT0gXCJsZWZ0XCIsXG4gICAgICAgIHc6IHRleHRBbGlnbiA9PT0gXCJjZW50ZXJcIiB8fCB0ZXh0QWxpZ24gPT09IFwicmlnaHRcIixcbiAgICAgIH0sXG4gICAgICBlbGVtZW50LngsXG4gICAgICBlbGVtZW50LnksXG4gICAgICBlbGVtZW50LmFuZ2xlLFxuICAgICAgZGVsdGFYMSxcbiAgICAgIGRlbHRhWTEsXG4gICAgICBkZWx0YVgyLFxuICAgICAgZGVsdGFZMixcbiAgICApO1xuICB9XG5cbiAgLy8gbWFrZSBzdXJlIGNvbnRhaW5lciBkaW1lbnNpb25zIGFyZSBzZXQgcHJvcGVybHkgd2hlblxuICAvLyB0ZXh0IGVkaXRvciBvdmVyZmxvd3MgYmV5b25kIHZpZXdwb3J0IGRpbWVuc2lvbnNcbiAgaWYgKGNvbnRhaW5lcikge1xuICAgIGNvbnN0IGNvbnRhaW5lckRpbXMgPSBnZXRDb250YWluZXJEaW1zKGNvbnRhaW5lcik7XG4gICAgbGV0IGhlaWdodCA9IGNvbnRhaW5lckRpbXMuaGVpZ2h0O1xuICAgIGxldCB3aWR0aCA9IGNvbnRhaW5lckRpbXMud2lkdGg7XG4gICAgaWYgKG5leHRIZWlnaHQgPiBoZWlnaHQgLSBCT1VORF9URVhUX1BBRERJTkcgKiAyKSB7XG4gICAgICBoZWlnaHQgPSBuZXh0SGVpZ2h0ICsgQk9VTkRfVEVYVF9QQURESU5HICogMjtcbiAgICB9XG4gICAgaWYgKG5leHRXaWR0aCA+IHdpZHRoIC0gQk9VTkRfVEVYVF9QQURESU5HICogMikge1xuICAgICAgd2lkdGggPSBuZXh0V2lkdGggKyBCT1VORF9URVhUX1BBRERJTkcgKiAyO1xuICAgIH1cbiAgICBpZiAoaGVpZ2h0ICE9PSBjb250YWluZXJEaW1zLmhlaWdodCB8fCB3aWR0aCAhPT0gY29udGFpbmVyRGltcy53aWR0aCkge1xuICAgICAgbXV0YXRlRWxlbWVudChjb250YWluZXIsIHsgaGVpZ2h0LCB3aWR0aCB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogbmV4dFdpZHRoLFxuICAgIGhlaWdodDogbmV4dEhlaWdodCxcbiAgICB4OiBOdW1iZXIuaXNGaW5pdGUoeCkgPyB4IDogZWxlbWVudC54LFxuICAgIHk6IE51bWJlci5pc0Zpbml0ZSh5KSA/IHkgOiBlbGVtZW50LnksXG4gICAgYmFzZWxpbmU6IG5leHRCYXNlbGluZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWZyZXNoVGV4dERpbWVuc2lvbnMgPSAoXG4gIHRleHRFbGVtZW50OiBFeGNhbGlkcmF3VGV4dEVsZW1lbnQsXG4gIHRleHQgPSB0ZXh0RWxlbWVudC50ZXh0LFxuKSA9PiB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lckVsZW1lbnQodGV4dEVsZW1lbnQpO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgLy8gdGV4dCA9IHdyYXBUZXh0KHRleHQsIGdldEZvbnRTdHJpbmcodGV4dEVsZW1lbnQpLCBjb250YWluZXIud2lkdGgpO1xuICAgIHRleHQgPSB3cmFwVGV4dChcbiAgICAgIHRleHQsXG4gICAgICBnZXRGb250U3RyaW5nKHRleHRFbGVtZW50KSxcbiAgICAgIGdldE1heENvbnRhaW5lcldpZHRoKGNvbnRhaW5lciksXG4gICAgKTtcbiAgfVxuICBjb25zdCBkaW1lbnNpb25zID0gZ2V0QWRqdXN0ZWREaW1lbnNpb25zKHRleHRFbGVtZW50LCB0ZXh0KTtcbiAgcmV0dXJuIHsgdGV4dCwgLi4uZGltZW5zaW9ucyB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1heENvbnRhaW5lcldpZHRoID0gKGNvbnRhaW5lcjogRXhjYWxpZHJhd0VsZW1lbnQpID0+IHtcbiAgcmV0dXJuIGdldENvbnRhaW5lckRpbXMoY29udGFpbmVyKS53aWR0aCAtIEJPVU5EX1RFWFRfUEFERElORyAqIDI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWF4Q29udGFpbmVySGVpZ2h0ID0gKGNvbnRhaW5lcjogRXhjYWxpZHJhd0VsZW1lbnQpID0+IHtcbiAgcmV0dXJuIGdldENvbnRhaW5lckRpbXMoY29udGFpbmVyKS5oZWlnaHQgLSBCT1VORF9URVhUX1BBRERJTkcgKiAyO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVRleHRFbGVtZW50ID0gKFxuICB0ZXh0RWxlbWVudDogRXhjYWxpZHJhd1RleHRFbGVtZW50LFxuICB7XG4gICAgdGV4dCxcbiAgICBpc0RlbGV0ZWQsXG4gICAgb3JpZ2luYWxUZXh0LFxuICB9OiB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIGlzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgb3JpZ2luYWxUZXh0OiBzdHJpbmc7XG4gIH0sXG4pOiBFeGNhbGlkcmF3VGV4dEVsZW1lbnQgPT4ge1xuICByZXR1cm4gbmV3RWxlbWVudFdpdGgodGV4dEVsZW1lbnQsIHtcbiAgICBvcmlnaW5hbFRleHQsXG4gICAgaXNEZWxldGVkOiBpc0RlbGV0ZWQgPz8gdGV4dEVsZW1lbnQuaXNEZWxldGVkLFxuICAgIC4uLnJlZnJlc2hUZXh0RGltZW5zaW9ucyh0ZXh0RWxlbWVudCwgb3JpZ2luYWxUZXh0KSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbmV3RnJlZURyYXdFbGVtZW50ID0gKFxuICBvcHRzOiB7XG4gICAgdHlwZTogXCJmcmVlZHJhd1wiO1xuICAgIHBvaW50cz86IEV4Y2FsaWRyYXdGcmVlRHJhd0VsZW1lbnRbXCJwb2ludHNcIl07XG4gICAgc2ltdWxhdGVQcmVzc3VyZTogYm9vbGVhbjtcbiAgfSAmIEVsZW1lbnRDb25zdHJ1Y3Rvck9wdHMsXG4pOiBOb25EZWxldGVkPEV4Y2FsaWRyYXdGcmVlRHJhd0VsZW1lbnQ+ID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5fbmV3RWxlbWVudEJhc2U8RXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudD4ob3B0cy50eXBlLCBvcHRzKSxcbiAgICBwb2ludHM6IG9wdHMucG9pbnRzIHx8IFtdLFxuICAgIHByZXNzdXJlczogW10sXG4gICAgc2ltdWxhdGVQcmVzc3VyZTogb3B0cy5zaW11bGF0ZVByZXNzdXJlLFxuICAgIGxhc3RDb21taXR0ZWRQb2ludDogbnVsbCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBuZXdMaW5lYXJFbGVtZW50ID0gKFxuICBvcHRzOiB7XG4gICAgdHlwZTogRXhjYWxpZHJhd0xpbmVhckVsZW1lbnRbXCJ0eXBlXCJdO1xuICAgIHN0YXJ0QXJyb3doZWFkOiBBcnJvd2hlYWQgfCBudWxsO1xuICAgIGVuZEFycm93aGVhZDogQXJyb3doZWFkIHwgbnVsbDtcbiAgICBwb2ludHM/OiBFeGNhbGlkcmF3TGluZWFyRWxlbWVudFtcInBvaW50c1wiXTtcbiAgfSAmIEVsZW1lbnRDb25zdHJ1Y3Rvck9wdHMsXG4pOiBOb25EZWxldGVkPEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50PiA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uX25ld0VsZW1lbnRCYXNlPEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50PihvcHRzLnR5cGUsIG9wdHMpLFxuICAgIHBvaW50czogb3B0cy5wb2ludHMgfHwgW10sXG4gICAgbGFzdENvbW1pdHRlZFBvaW50OiBudWxsLFxuICAgIHN0YXJ0QmluZGluZzogbnVsbCxcbiAgICBlbmRCaW5kaW5nOiBudWxsLFxuICAgIHN0YXJ0QXJyb3doZWFkOiBvcHRzLnN0YXJ0QXJyb3doZWFkLFxuICAgIGVuZEFycm93aGVhZDogb3B0cy5lbmRBcnJvd2hlYWQsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbmV3SW1hZ2VFbGVtZW50ID0gKFxuICBvcHRzOiB7XG4gICAgdHlwZTogRXhjYWxpZHJhd0ltYWdlRWxlbWVudFtcInR5cGVcIl07XG4gICAgc3RhdHVzPzogRXhjYWxpZHJhd0ltYWdlRWxlbWVudFtcInN0YXR1c1wiXTtcbiAgICBmaWxlSWQ/OiBFeGNhbGlkcmF3SW1hZ2VFbGVtZW50W1wiZmlsZUlkXCJdO1xuICAgIHNjYWxlPzogRXhjYWxpZHJhd0ltYWdlRWxlbWVudFtcInNjYWxlXCJdO1xuICB9ICYgRWxlbWVudENvbnN0cnVjdG9yT3B0cyxcbik6IE5vbkRlbGV0ZWQ8RXhjYWxpZHJhd0ltYWdlRWxlbWVudD4gPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLl9uZXdFbGVtZW50QmFzZTxFeGNhbGlkcmF3SW1hZ2VFbGVtZW50PihcImltYWdlXCIsIG9wdHMpLFxuICAgIC8vIGluIHRoZSBmdXR1cmUgd2UnbGwgc3VwcG9ydCBjaGFuZ2luZyBzdHJva2UgY29sb3IgZm9yIHNvbWUgU1ZHIGVsZW1lbnRzLFxuICAgIC8vIGFuZCBgdHJhbnNwYXJlbnRgIHdpbGwgbGlrZWx5IG1lYW4gXCJ1c2Ugb3JpZ2luYWwgY29sb3JzIG9mIHRoZSBpbWFnZVwiXG4gICAgc3Ryb2tlQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICBzdGF0dXM6IG9wdHMuc3RhdHVzID8/IFwicGVuZGluZ1wiLFxuICAgIGZpbGVJZDogb3B0cy5maWxlSWQgPz8gbnVsbCxcbiAgICBzY2FsZTogb3B0cy5zY2FsZSA/PyBbMSwgMV0sXG4gIH07XG59O1xuXG4vLyBTaW1wbGlmaWVkIGRlZXAgY2xvbmUgZm9yIHRoZSBwdXJwb3NlIG9mIGNsb25pbmcgRXhjYWxpZHJhd0VsZW1lbnQgb25seVxuLy8gKGRvZXNuJ3QgY2xvbmUgRGF0ZSwgUmVnRXhwLCBNYXAsIFNldCwgVHlwZWQgYXJyYXlzIGV0Yy4pXG4vL1xuLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sdWtlZWQva2xvbmFcbmV4cG9ydCBjb25zdCBkZWVwQ29weUVsZW1lbnQgPSAodmFsOiBhbnksIGRlcHRoOiBudW1iZXIgPSAwKSA9PiB7XG4gIGlmICh2YWwgPT0gbnVsbCB8fCB0eXBlb2YgdmFsICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIikge1xuICAgIGNvbnN0IHRtcCA9XG4gICAgICB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpKVxuICAgICAgICA6IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbCkge1xuICAgICAgaWYgKHZhbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIC8vIGRvbid0IGNvcHkgdG9wLWxldmVsIHNoYXBlIHByb3BlcnR5LCB3aGljaCB3ZSB3YW50IHRvIHJlZ2VuZXJhdGVcbiAgICAgICAgaWYgKGRlcHRoID09PSAwICYmIChrZXkgPT09IFwic2hhcGVcIiB8fCBrZXkgPT09IFwiY2FudmFzXCIpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdG1wW2tleV0gPSBkZWVwQ29weUVsZW1lbnQodmFsW2tleV0sIGRlcHRoICsgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0bXA7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgbGV0IGsgPSB2YWwubGVuZ3RoO1xuICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShrKTtcbiAgICB3aGlsZSAoay0tKSB7XG4gICAgICBhcnJba10gPSBkZWVwQ29weUVsZW1lbnQodmFsW2tdLCBkZXB0aCArIDEpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn07XG5cbi8qKlxuICogRHVwbGljYXRlIGFuIGVsZW1lbnQsIG9mdGVuIHVzZWQgaW4gdGhlIGFsdC1kcmFnIG9wZXJhdGlvbi5cbiAqIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBoYXMgZ290dGVuIGEgYml0IGNvbXBsaWNhdGVkIHNpbmNlIHRoZVxuICogaW50cm9kdWN0aW9uIG9mIGdydW9waW5nL3VuZ3JvdXBpbmcgZWxlbWVudHMuXG4gKiBAcGFyYW0gZWRpdGluZ0dyb3VwSWQgVGhlIGN1cnJlbnQgZ3JvdXAgYmVpbmcgZWRpdGVkLiBUaGUgbmV3XG4gKiAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCB3aWxsIGluaGVyaXQgdGhpcyBncm91cCBhbmQgaXRzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5cbiAqIEBwYXJhbSBncm91cElkTWFwRm9yT3BlcmF0aW9uIEEgTWFwIHRoYXQgbWFwcyBvbGQgZ3JvdXAgSURzIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGVkIG9uZXMuIElmIHlvdSBhcmUgZHVwbGljYXRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIGVsZW1lbnRzIGF0IG9uY2UsIHNoYXJlIHRoaXMgbWFwXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbW9uZ3N0IGFsbCBvZiB0aGVtXG4gKiBAcGFyYW0gZWxlbWVudCBFbGVtZW50IHRvIGR1cGxpY2F0ZVxuICogQHBhcmFtIG92ZXJyaWRlcyBBbnkgZWxlbWVudCBwcm9wZXJ0aWVzIHRvIG92ZXJyaWRlXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVFbGVtZW50ID0gPFRFbGVtZW50IGV4dGVuZHMgTXV0YWJsZTxFeGNhbGlkcmF3RWxlbWVudD4+KFxuICBlZGl0aW5nR3JvdXBJZDogQXBwU3RhdGVbXCJlZGl0aW5nR3JvdXBJZFwiXSxcbiAgZ3JvdXBJZE1hcEZvck9wZXJhdGlvbjogTWFwPEdyb3VwSWQsIEdyb3VwSWQ+LFxuICBlbGVtZW50OiBURWxlbWVudCxcbiAgb3ZlcnJpZGVzPzogUGFydGlhbDxURWxlbWVudD4sXG4pOiBURWxlbWVudCA9PiB7XG4gIGxldCBjb3B5OiBURWxlbWVudCA9IGRlZXBDb3B5RWxlbWVudChlbGVtZW50KTtcbiAgaWYgKGlzVGVzdEVudigpKSB7XG4gICAgY29weS5pZCA9IGAke2NvcHkuaWR9X2NvcHlgO1xuICAgIC8vIGB3aW5kb3cuaGAgbWF5IG5vdCBiZSBkZWZpbmVkIGluIHNvbWUgdW5pdCB0ZXN0c1xuICAgIGlmIChcbiAgICAgIHdpbmRvdy5oPy5hcHBcbiAgICAgICAgPy5nZXRTY2VuZUVsZW1lbnRzSW5jbHVkaW5nRGVsZXRlZCgpXG4gICAgICAgIC5maW5kKChlbCkgPT4gZWwuaWQgPT09IGNvcHkuaWQpXG4gICAgKSB7XG4gICAgICBjb3B5LmlkICs9IFwiX2NvcHlcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29weS5pZCA9IHJhbmRvbUlkKCk7XG4gIH1cbiAgY29weS51cGRhdGVkID0gZ2V0VXBkYXRlZFRpbWVzdGFtcCgpO1xuICBjb3B5LnNlZWQgPSByYW5kb21JbnRlZ2VyKCk7XG4gIGNvcHkuZ3JvdXBJZHMgPSBnZXROZXdHcm91cElkc0ZvckR1cGxpY2F0aW9uKFxuICAgIGNvcHkuZ3JvdXBJZHMsXG4gICAgZWRpdGluZ0dyb3VwSWQsXG4gICAgKGdyb3VwSWQpID0+IHtcbiAgICAgIGlmICghZ3JvdXBJZE1hcEZvck9wZXJhdGlvbi5oYXMoZ3JvdXBJZCkpIHtcbiAgICAgICAgZ3JvdXBJZE1hcEZvck9wZXJhdGlvbi5zZXQoZ3JvdXBJZCwgcmFuZG9tSWQoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ3JvdXBJZE1hcEZvck9wZXJhdGlvbi5nZXQoZ3JvdXBJZCkhO1xuICAgIH0sXG4gICk7XG4gIGlmIChvdmVycmlkZXMpIHtcbiAgICBjb3B5ID0gT2JqZWN0LmFzc2lnbihjb3B5LCBvdmVycmlkZXMpO1xuICB9XG4gIHJldHVybiBjb3B5O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../element/newElement.ts\n");
|
|
2940
2940
|
|
|
2941
2941
|
/***/ }),
|
|
2942
2942
|
|
|
@@ -3211,7 +3211,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
3211
3211
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
3212
3212
|
|
|
3213
3213
|
"use strict";
|
|
3214
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\n /* eslint-disable */\n /* global __webpack_public_path__:writable */\n __webpack_require__.p =\n window.EXCALIDRAW_ASSET_PATH ||\n `https://unpkg.com/${\"@excalidraw/excalidraw\"}@${\"0.13.0-
|
|
3214
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\n /* eslint-disable */\n /* global __webpack_public_path__:writable */\n __webpack_require__.p =\n window.EXCALIDRAW_ASSET_PATH ||\n `https://unpkg.com/${\"@excalidraw/excalidraw\"}@${\"0.13.0-c8f6e3f\"}/dist/`;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBQ3RDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUNwQiw2Q0FBNkM7SUFDN0MscUJBQXVCO1FBQ3JCLE1BQU0sQ0FBQyxxQkFBcUI7WUFDNUIscUJBQXFCLHdCQUFvQixJQUFJLGdCQUF1QixRQUFRLENBQUM7Q0FDaEYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9wdWJsaWNQYXRoLmpzP2E4N2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5WIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuVEVTVCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAvKiBnbG9iYWwgX193ZWJwYWNrX3B1YmxpY19wYXRoX186d3JpdGFibGUgKi9cbiAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPVxuICAgIHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHxcbiAgICBgaHR0cHM6Ly91bnBrZy5jb20vJHtwcm9jZXNzLmVudi5QS0dfTkFNRX1AJHtwcm9jZXNzLmVudi5QS0dfVkVSU0lPTn0vZGlzdC9gO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./publicPath.js\n");
|
|
3215
3215
|
|
|
3216
3216
|
/***/ }),
|
|
3217
3217
|
|
|
@@ -3321,7 +3321,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
3321
3321
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
3322
3322
|
|
|
3323
3323
|
"use strict";
|
|
3324
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SVG_EXPORT_TAG\": () => (/* binding */ SVG_EXPORT_TAG),\n/* harmony export */ \"exportToCanvas\": () => (/* binding */ exportToCanvas),\n/* harmony export */ \"exportToSvg\": () => (/* binding */ exportToSvg),\n/* harmony export */ \"getExportSize\": () => (/* binding */ getExportSize)\n/* harmony export */ });\n/* harmony import */ var roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! roughjs/bin/rough */ \"../../../node_modules/roughjs/bin/rough.js\");\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element/bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../renderer/renderScene */ \"../../renderer/renderScene.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _element_image__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../element/image */ \"../../element/image.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\nconst exportToCanvas = (elements, appState, files, { exportBackground, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, }, createCanvas = (width, height) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * appState.exportScale;\n canvas.height = height * appState.exportScale;\n return { canvas, scale: appState.exportScale };\n}) => __awaiter(void 0, void 0, void 0, function* () {\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\n const { canvas, scale = 1 } = createCanvas(width, height);\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\n const { imageCache } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.updateImageCache)({\n imageCache: new Map(),\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.getInitializedImageElements)(elements).map((element) => element.fileId),\n files,\n });\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderScene)({\n elements,\n appState,\n scale,\n rc: roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas),\n canvas,\n renderConfig: {\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\n scrollX: -minX + exportPadding,\n scrollY: -minY + exportPadding,\n zoom: defaultAppState.zoom,\n remotePointerViewportCoords: {},\n remoteSelectedElementIds: {},\n shouldCacheIgnoreZoom: false,\n remotePointerUsernames: {},\n remotePointerUserStates: {},\n theme: appState.exportWithDarkMode ? \"dark\" : \"light\",\n imageCache,\n renderScrollbars: false,\n renderSelection: false,\n renderGrid: false,\n isExporting: true,\n },\n });\n return canvas;\n});\nconst exportToSvg = (elements, appState, files) => __awaiter(void 0, void 0, void 0, function* () {\n const { exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, exportScale = 1, exportEmbedScene, } = appState;\n let metadata = \"\";\n if (exportEmbedScene) {\n try {\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \"../../data/image.ts\"))).encodeSvgMetadata({\n text: (0,_data_json__WEBPACK_IMPORTED_MODULE_6__.serializeAsJSON)(elements, appState, files || {}, \"local\"),\n });\n }\n catch (error) {\n console.error(error);\n }\n }\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\n // initialize SVG root\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"svg\");\n svgRoot.setAttribute(\"version\", \"1.1\");\n svgRoot.setAttribute(\"xmlns\", _constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS);\n svgRoot.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n svgRoot.setAttribute(\"width\", `${width * exportScale}`);\n svgRoot.setAttribute(\"height\", `${height * exportScale}`);\n if (appState.exportWithDarkMode) {\n svgRoot.setAttribute(\"filter\", _constants__WEBPACK_IMPORTED_MODULE_4__.THEME_FILTER);\n }\n let assetPath = \"https://excalidraw.com/\";\n // Asset path needs to be determined only when using package\n if (true) {\n assetPath =\n window.EXCALIDRAW_ASSET_PATH ||\n `https://unpkg.com/${\"@excalidraw/excalidraw\"}@${\"0.13.0-75458c3\"}`;\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\"/\")) {\n assetPath = assetPath.replace(\"/\", `${window.location.origin}/`);\n }\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\n }\n svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style>\n @font-face {\n font-family: \"Virgil\";\n src: url(\"${assetPath}Virgil.woff2\");\n }\n @font-face {\n font-family: \"Cascadia\";\n src: url(\"${assetPath}Cascadia.woff2\");\n }\n </style>\n </defs>\n `;\n // render background rect\n if (appState.exportBackground && viewBackgroundColor) {\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"rect\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n rect.setAttribute(\"width\", `${width}`);\n rect.setAttribute(\"height\", `${height}`);\n rect.setAttribute(\"fill\", viewBackgroundColor);\n svgRoot.appendChild(rect);\n }\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].svg(svgRoot);\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\n offsetX: -minX + exportPadding,\n offsetY: -minY + exportPadding,\n exportWithDarkMode: appState.exportWithDarkMode,\n });\n return svgRoot;\n});\n// calculate smallest area to fit the contents in\nconst getCanvasSize = (elements, exportPadding) => {\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(elements);\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minX, maxX) + exportPadding * 2;\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + exportPadding + exportPadding;\n return [minX, minY, width, height];\n};\nconst getExportSize = (elements, exportPadding, scale) => {\n const [, , width, height] = getCanvasSize(elements, exportPadding).map((dimension) => Math.trunc(dimension * scale));\n return [width, height];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Iiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NjZW5lL2V4cG9ydC50cz85YmY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb3VnaCBmcm9tIFwicm91Z2hqcy9iaW4vcm91Z2hcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRDb21tb25Cb3VuZHMgfSBmcm9tIFwiLi4vZWxlbWVudC9ib3VuZHNcIjtcbmltcG9ydCB7IHJlbmRlclNjZW5lLCByZW5kZXJTY2VuZVRvU3ZnIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlclNjZW5lXCI7XG5pbXBvcnQgeyBkaXN0YW5jZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIEJpbmFyeUZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VYUE9SVF9QQURESU5HLCBTVkdfTlMsIFRIRU1FX0ZJTFRFUiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRBcHBTdGF0ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHsgc2VyaWFsaXplQXNKU09OIH0gZnJvbSBcIi4uL2RhdGEvanNvblwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzLFxuICB1cGRhdGVJbWFnZUNhY2hlLFxufSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuXG5leHBvcnQgY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgZmlsZXM6IEJpbmFyeUZpbGVzLFxuICB7XG4gICAgZXhwb3J0QmFja2dyb3VuZCxcbiAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICB9OiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgfSxcbiAgY3JlYXRlQ2FudmFzOiAoXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgKSA9PiB7IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7IHNjYWxlOiBudW1iZXIgfSA9ICh3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGFwcFN0YXRlLmV4cG9ydFNjYWxlO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICByZXR1cm4geyBjYW52YXMsIHNjYWxlOiBhcHBTdGF0ZS5leHBvcnRTY2FsZSB9O1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpO1xuXG4gIGNvbnN0IHsgY2FudmFzLCBzY2FsZSA9IDEgfSA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcblxuICBjb25zdCBkZWZhdWx0QXBwU3RhdGUgPSBnZXREZWZhdWx0QXBwU3RhdGUoKTtcblxuICBjb25zdCB7IGltYWdlQ2FjaGUgfSA9IGF3YWl0IHVwZGF0ZUltYWdlQ2FjaGUoe1xuICAgIGltYWdlQ2FjaGU6IG5ldyBNYXAoKSxcbiAgICBmaWxlSWRzOiBnZXRJbml0aWFsaXplZEltYWdlRWxlbWVudHMoZWxlbWVudHMpLm1hcChcbiAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50LmZpbGVJZCxcbiAgICApLFxuICAgIGZpbGVzLFxuICB9KTtcblxuICByZW5kZXJTY2VuZSh7XG4gICAgZWxlbWVudHMsXG4gICAgYXBwU3RhdGUsXG4gICAgc2NhbGUsXG4gICAgcmM6IHJvdWdoLmNhbnZhcyhjYW52YXMpLFxuICAgIGNhbnZhcyxcbiAgICByZW5kZXJDb25maWc6IHtcbiAgICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IGV4cG9ydEJhY2tncm91bmQgPyB2aWV3QmFja2dyb3VuZENvbG9yIDogbnVsbCxcbiAgICAgIHNjcm9sbFg6IC1taW5YICsgZXhwb3J0UGFkZGluZyxcbiAgICAgIHNjcm9sbFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICAgIHpvb206IGRlZmF1bHRBcHBTdGF0ZS56b29tLFxuICAgICAgcmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzOiB7fSxcbiAgICAgIHJlbW90ZVNlbGVjdGVkRWxlbWVudElkczoge30sXG4gICAgICBzaG91bGRDYWNoZUlnbm9yZVpvb206IGZhbHNlLFxuICAgICAgcmVtb3RlUG9pbnRlclVzZXJuYW1lczoge30sXG4gICAgICByZW1vdGVQb2ludGVyVXNlclN0YXRlczoge30sXG4gICAgICB0aGVtZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIsXG4gICAgICBpbWFnZUNhY2hlLFxuICAgICAgcmVuZGVyU2Nyb2xsYmFyczogZmFsc2UsXG4gICAgICByZW5kZXJTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgcmVuZGVyR3JpZDogZmFsc2UsXG4gICAgICBpc0V4cG9ydGluZzogdHJ1ZSxcbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gY2FudmFzO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvU3ZnID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIGV4cG9ydFNjYWxlPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBleHBvcnRXaXRoRGFya01vZGU/OiBib29sZWFuO1xuICAgIGV4cG9ydEVtYmVkU2NlbmU/OiBib29sZWFuO1xuICB9LFxuICBmaWxlczogQmluYXJ5RmlsZXMgfCBudWxsLFxuKTogUHJvbWlzZTxTVkdTVkdFbGVtZW50PiA9PiB7XG4gIGNvbnN0IHtcbiAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICAgIGV4cG9ydFNjYWxlID0gMSxcbiAgICBleHBvcnRFbWJlZFNjZW5lLFxuICB9ID0gYXBwU3RhdGU7XG4gIGxldCBtZXRhZGF0YSA9IFwiXCI7XG4gIGlmIChleHBvcnRFbWJlZFNjZW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIG1ldGFkYXRhID0gYXdhaXQgKFxuICAgICAgICBhd2FpdCBpbXBvcnQoLyogd2VicGFja0NodW5rTmFtZTogXCJpbWFnZVwiICovIFwiLi4vLi4vc3JjL2RhdGEvaW1hZ2VcIilcbiAgICAgICkuZW5jb2RlU3ZnTWV0YWRhdGEoe1xuICAgICAgICB0ZXh0OiBzZXJpYWxpemVBc0pTT04oZWxlbWVudHMsIGFwcFN0YXRlLCBmaWxlcyB8fCB7fSwgXCJsb2NhbFwiKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuICBjb25zdCBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF0gPSBnZXRDYW52YXNTaXplKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKTtcblxuICAvLyBpbml0aWFsaXplIFNWRyByb290XG4gIGNvbnN0IHN2Z1Jvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcInN2Z1wiKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ2ZXJzaW9uXCIsIFwiMS4xXCIpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInhtbG5zXCIsIFNWR19OUyk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmlld0JveFwiLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRoICogZXhwb3J0U2NhbGV9YCk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodCAqIGV4cG9ydFNjYWxlfWApO1xuICBpZiAoYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlKSB7XG4gICAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJmaWx0ZXJcIiwgVEhFTUVfRklMVEVSKTtcbiAgfVxuXG4gIGxldCBhc3NldFBhdGggPSBcImh0dHBzOi8vZXhjYWxpZHJhdy5jb20vXCI7XG5cbiAgLy8gQXNzZXQgcGF0aCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIG9ubHkgd2hlbiB1c2luZyBwYWNrYWdlXG4gIGlmIChwcm9jZXNzLmVudi5JU19FWENBTElEUkFXX05QTV9QQUNLQUdFKSB7XG4gICAgYXNzZXRQYXRoID1cbiAgICAgIHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHxcbiAgICAgIGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlBLR19OQU1FfUAke3Byb2Nlc3MuZW52LlBLR19WRVJTSU9OfWA7XG5cbiAgICBpZiAoYXNzZXRQYXRoPy5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgYXNzZXRQYXRoID0gYXNzZXRQYXRoLnJlcGxhY2UoXCIvXCIsIGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2ApO1xuICAgIH1cbiAgICBhc3NldFBhdGggPSBgJHthc3NldFBhdGh9L2Rpc3QvZXhjYWxpZHJhdy1hc3NldHMvYDtcbiAgfVxuICBzdmdSb290LmlubmVySFRNTCA9IGBcbiAgJHtTVkdfRVhQT1JUX1RBR31cbiAgJHttZXRhZGF0YX1cbiAgPGRlZnM+XG4gICAgPHN0eWxlPlxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlZpcmdpbFwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofVZpcmdpbC53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCJDYXNjYWRpYVwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofUNhc2NhZGlhLndvZmYyXCIpO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvZGVmcz5cbiAgYDtcbiAgLy8gcmVuZGVyIGJhY2tncm91bmQgcmVjdFxuICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgY29uc3QgcmVjdCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WDogLW1pblggKyBleHBvcnRQYWRkaW5nLFxuICAgIG9mZnNldFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICBleHBvcnRXaXRoRGFya01vZGU6IGFwcFN0YXRlLmV4cG9ydFdpdGhEYXJrTW9kZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59O1xuXG4vLyBjYWxjdWxhdGUgc21hbGxlc3QgYXJlYSB0byBmaXQgdGhlIGNvbnRlbnRzIGluXG5jb25zdCBnZXRDYW52YXNTaXplID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGV4cG9ydFBhZGRpbmc6IG51bWJlcixcbik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgW21pblgsIG1pblksIG1heFgsIG1heFldID0gZ2V0Q29tbW9uQm91bmRzKGVsZW1lbnRzKTtcbiAgY29uc3Qgd2lkdGggPSBkaXN0YW5jZShtaW5YLCBtYXhYKSArIGV4cG9ydFBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBkaXN0YW5jZShtaW5ZLCBtYXhZKSArIGV4cG9ydFBhZGRpbmcgKyBleHBvcnRQYWRkaW5nO1xuXG4gIHJldHVybiBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwb3J0U2l6ZSA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBleHBvcnRQYWRkaW5nOiBudW1iZXIsXG4gIHNjYWxlOiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgWywgLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpLm1hcChcbiAgICAoZGltZW5zaW9uKSA9PiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKSxcbiAgKTtcblxuICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
|
|
3324
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SVG_EXPORT_TAG\": () => (/* binding */ SVG_EXPORT_TAG),\n/* harmony export */ \"exportToCanvas\": () => (/* binding */ exportToCanvas),\n/* harmony export */ \"exportToSvg\": () => (/* binding */ exportToSvg),\n/* harmony export */ \"getExportSize\": () => (/* binding */ getExportSize)\n/* harmony export */ });\n/* harmony import */ var roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! roughjs/bin/rough */ \"../../../node_modules/roughjs/bin/rough.js\");\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element/bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../renderer/renderScene */ \"../../renderer/renderScene.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _element_image__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../element/image */ \"../../element/image.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\nconst exportToCanvas = (elements, appState, files, { exportBackground, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, }, createCanvas = (width, height) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * appState.exportScale;\n canvas.height = height * appState.exportScale;\n return { canvas, scale: appState.exportScale };\n}) => __awaiter(void 0, void 0, void 0, function* () {\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\n const { canvas, scale = 1 } = createCanvas(width, height);\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\n const { imageCache } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.updateImageCache)({\n imageCache: new Map(),\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.getInitializedImageElements)(elements).map((element) => element.fileId),\n files,\n });\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderScene)({\n elements,\n appState,\n scale,\n rc: roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas),\n canvas,\n renderConfig: {\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\n scrollX: -minX + exportPadding,\n scrollY: -minY + exportPadding,\n zoom: defaultAppState.zoom,\n remotePointerViewportCoords: {},\n remoteSelectedElementIds: {},\n shouldCacheIgnoreZoom: false,\n remotePointerUsernames: {},\n remotePointerUserStates: {},\n theme: appState.exportWithDarkMode ? \"dark\" : \"light\",\n imageCache,\n renderScrollbars: false,\n renderSelection: false,\n renderGrid: false,\n isExporting: true,\n },\n });\n return canvas;\n});\nconst exportToSvg = (elements, appState, files) => __awaiter(void 0, void 0, void 0, function* () {\n const { exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, exportScale = 1, exportEmbedScene, } = appState;\n let metadata = \"\";\n if (exportEmbedScene) {\n try {\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \"../../data/image.ts\"))).encodeSvgMetadata({\n text: (0,_data_json__WEBPACK_IMPORTED_MODULE_6__.serializeAsJSON)(elements, appState, files || {}, \"local\"),\n });\n }\n catch (error) {\n console.error(error);\n }\n }\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\n // initialize SVG root\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"svg\");\n svgRoot.setAttribute(\"version\", \"1.1\");\n svgRoot.setAttribute(\"xmlns\", _constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS);\n svgRoot.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n svgRoot.setAttribute(\"width\", `${width * exportScale}`);\n svgRoot.setAttribute(\"height\", `${height * exportScale}`);\n if (appState.exportWithDarkMode) {\n svgRoot.setAttribute(\"filter\", _constants__WEBPACK_IMPORTED_MODULE_4__.THEME_FILTER);\n }\n let assetPath = \"https://excalidraw.com/\";\n // Asset path needs to be determined only when using package\n if (true) {\n assetPath =\n window.EXCALIDRAW_ASSET_PATH ||\n `https://unpkg.com/${\"@excalidraw/excalidraw\"}@${\"0.13.0-c8f6e3f\"}`;\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\"/\")) {\n assetPath = assetPath.replace(\"/\", `${window.location.origin}/`);\n }\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\n }\n svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style>\n @font-face {\n font-family: \"Virgil\";\n src: url(\"${assetPath}Virgil.woff2\");\n }\n @font-face {\n font-family: \"Cascadia\";\n src: url(\"${assetPath}Cascadia.woff2\");\n }\n </style>\n </defs>\n `;\n // render background rect\n if (appState.exportBackground && viewBackgroundColor) {\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"rect\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n rect.setAttribute(\"width\", `${width}`);\n rect.setAttribute(\"height\", `${height}`);\n rect.setAttribute(\"fill\", viewBackgroundColor);\n svgRoot.appendChild(rect);\n }\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].svg(svgRoot);\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\n offsetX: -minX + exportPadding,\n offsetY: -minY + exportPadding,\n exportWithDarkMode: appState.exportWithDarkMode,\n });\n return svgRoot;\n});\n// calculate smallest area to fit the contents in\nconst getCanvasSize = (elements, exportPadding) => {\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(elements);\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minX, maxX) + exportPadding * 2;\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + exportPadding + exportPadding;\n return [minX, minY, width, height];\n};\nconst getExportSize = (elements, exportPadding, scale) => {\n const [, , width, height] = getCanvasSize(elements, exportPadding).map((dimension) => Math.trunc(dimension * scale));\n return [width, height];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Iiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NjZW5lL2V4cG9ydC50cz85YmY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb3VnaCBmcm9tIFwicm91Z2hqcy9iaW4vcm91Z2hcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRDb21tb25Cb3VuZHMgfSBmcm9tIFwiLi4vZWxlbWVudC9ib3VuZHNcIjtcbmltcG9ydCB7IHJlbmRlclNjZW5lLCByZW5kZXJTY2VuZVRvU3ZnIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlclNjZW5lXCI7XG5pbXBvcnQgeyBkaXN0YW5jZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIEJpbmFyeUZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VYUE9SVF9QQURESU5HLCBTVkdfTlMsIFRIRU1FX0ZJTFRFUiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRBcHBTdGF0ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHsgc2VyaWFsaXplQXNKU09OIH0gZnJvbSBcIi4uL2RhdGEvanNvblwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzLFxuICB1cGRhdGVJbWFnZUNhY2hlLFxufSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuXG5leHBvcnQgY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgZmlsZXM6IEJpbmFyeUZpbGVzLFxuICB7XG4gICAgZXhwb3J0QmFja2dyb3VuZCxcbiAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICB9OiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgfSxcbiAgY3JlYXRlQ2FudmFzOiAoXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgKSA9PiB7IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7IHNjYWxlOiBudW1iZXIgfSA9ICh3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGFwcFN0YXRlLmV4cG9ydFNjYWxlO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICByZXR1cm4geyBjYW52YXMsIHNjYWxlOiBhcHBTdGF0ZS5leHBvcnRTY2FsZSB9O1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpO1xuXG4gIGNvbnN0IHsgY2FudmFzLCBzY2FsZSA9IDEgfSA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcblxuICBjb25zdCBkZWZhdWx0QXBwU3RhdGUgPSBnZXREZWZhdWx0QXBwU3RhdGUoKTtcblxuICBjb25zdCB7IGltYWdlQ2FjaGUgfSA9IGF3YWl0IHVwZGF0ZUltYWdlQ2FjaGUoe1xuICAgIGltYWdlQ2FjaGU6IG5ldyBNYXAoKSxcbiAgICBmaWxlSWRzOiBnZXRJbml0aWFsaXplZEltYWdlRWxlbWVudHMoZWxlbWVudHMpLm1hcChcbiAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50LmZpbGVJZCxcbiAgICApLFxuICAgIGZpbGVzLFxuICB9KTtcblxuICByZW5kZXJTY2VuZSh7XG4gICAgZWxlbWVudHMsXG4gICAgYXBwU3RhdGUsXG4gICAgc2NhbGUsXG4gICAgcmM6IHJvdWdoLmNhbnZhcyhjYW52YXMpLFxuICAgIGNhbnZhcyxcbiAgICByZW5kZXJDb25maWc6IHtcbiAgICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IGV4cG9ydEJhY2tncm91bmQgPyB2aWV3QmFja2dyb3VuZENvbG9yIDogbnVsbCxcbiAgICAgIHNjcm9sbFg6IC1taW5YICsgZXhwb3J0UGFkZGluZyxcbiAgICAgIHNjcm9sbFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICAgIHpvb206IGRlZmF1bHRBcHBTdGF0ZS56b29tLFxuICAgICAgcmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzOiB7fSxcbiAgICAgIHJlbW90ZVNlbGVjdGVkRWxlbWVudElkczoge30sXG4gICAgICBzaG91bGRDYWNoZUlnbm9yZVpvb206IGZhbHNlLFxuICAgICAgcmVtb3RlUG9pbnRlclVzZXJuYW1lczoge30sXG4gICAgICByZW1vdGVQb2ludGVyVXNlclN0YXRlczoge30sXG4gICAgICB0aGVtZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIsXG4gICAgICBpbWFnZUNhY2hlLFxuICAgICAgcmVuZGVyU2Nyb2xsYmFyczogZmFsc2UsXG4gICAgICByZW5kZXJTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgcmVuZGVyR3JpZDogZmFsc2UsXG4gICAgICBpc0V4cG9ydGluZzogdHJ1ZSxcbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gY2FudmFzO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvU3ZnID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIGV4cG9ydFNjYWxlPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBleHBvcnRXaXRoRGFya01vZGU/OiBib29sZWFuO1xuICAgIGV4cG9ydEVtYmVkU2NlbmU/OiBib29sZWFuO1xuICB9LFxuICBmaWxlczogQmluYXJ5RmlsZXMgfCBudWxsLFxuKTogUHJvbWlzZTxTVkdTVkdFbGVtZW50PiA9PiB7XG4gIGNvbnN0IHtcbiAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICAgIGV4cG9ydFNjYWxlID0gMSxcbiAgICBleHBvcnRFbWJlZFNjZW5lLFxuICB9ID0gYXBwU3RhdGU7XG4gIGxldCBtZXRhZGF0YSA9IFwiXCI7XG4gIGlmIChleHBvcnRFbWJlZFNjZW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIG1ldGFkYXRhID0gYXdhaXQgKFxuICAgICAgICBhd2FpdCBpbXBvcnQoLyogd2VicGFja0NodW5rTmFtZTogXCJpbWFnZVwiICovIFwiLi4vLi4vc3JjL2RhdGEvaW1hZ2VcIilcbiAgICAgICkuZW5jb2RlU3ZnTWV0YWRhdGEoe1xuICAgICAgICB0ZXh0OiBzZXJpYWxpemVBc0pTT04oZWxlbWVudHMsIGFwcFN0YXRlLCBmaWxlcyB8fCB7fSwgXCJsb2NhbFwiKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuICBjb25zdCBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF0gPSBnZXRDYW52YXNTaXplKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKTtcblxuICAvLyBpbml0aWFsaXplIFNWRyByb290XG4gIGNvbnN0IHN2Z1Jvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcInN2Z1wiKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ2ZXJzaW9uXCIsIFwiMS4xXCIpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInhtbG5zXCIsIFNWR19OUyk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmlld0JveFwiLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRoICogZXhwb3J0U2NhbGV9YCk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodCAqIGV4cG9ydFNjYWxlfWApO1xuICBpZiAoYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlKSB7XG4gICAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJmaWx0ZXJcIiwgVEhFTUVfRklMVEVSKTtcbiAgfVxuXG4gIGxldCBhc3NldFBhdGggPSBcImh0dHBzOi8vZXhjYWxpZHJhdy5jb20vXCI7XG5cbiAgLy8gQXNzZXQgcGF0aCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIG9ubHkgd2hlbiB1c2luZyBwYWNrYWdlXG4gIGlmIChwcm9jZXNzLmVudi5JU19FWENBTElEUkFXX05QTV9QQUNLQUdFKSB7XG4gICAgYXNzZXRQYXRoID1cbiAgICAgIHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHxcbiAgICAgIGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlBLR19OQU1FfUAke3Byb2Nlc3MuZW52LlBLR19WRVJTSU9OfWA7XG5cbiAgICBpZiAoYXNzZXRQYXRoPy5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgYXNzZXRQYXRoID0gYXNzZXRQYXRoLnJlcGxhY2UoXCIvXCIsIGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2ApO1xuICAgIH1cbiAgICBhc3NldFBhdGggPSBgJHthc3NldFBhdGh9L2Rpc3QvZXhjYWxpZHJhdy1hc3NldHMvYDtcbiAgfVxuICBzdmdSb290LmlubmVySFRNTCA9IGBcbiAgJHtTVkdfRVhQT1JUX1RBR31cbiAgJHttZXRhZGF0YX1cbiAgPGRlZnM+XG4gICAgPHN0eWxlPlxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlZpcmdpbFwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofVZpcmdpbC53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCJDYXNjYWRpYVwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofUNhc2NhZGlhLndvZmYyXCIpO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvZGVmcz5cbiAgYDtcbiAgLy8gcmVuZGVyIGJhY2tncm91bmQgcmVjdFxuICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgY29uc3QgcmVjdCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WDogLW1pblggKyBleHBvcnRQYWRkaW5nLFxuICAgIG9mZnNldFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICBleHBvcnRXaXRoRGFya01vZGU6IGFwcFN0YXRlLmV4cG9ydFdpdGhEYXJrTW9kZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59O1xuXG4vLyBjYWxjdWxhdGUgc21hbGxlc3QgYXJlYSB0byBmaXQgdGhlIGNvbnRlbnRzIGluXG5jb25zdCBnZXRDYW52YXNTaXplID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGV4cG9ydFBhZGRpbmc6IG51bWJlcixcbik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgW21pblgsIG1pblksIG1heFgsIG1heFldID0gZ2V0Q29tbW9uQm91bmRzKGVsZW1lbnRzKTtcbiAgY29uc3Qgd2lkdGggPSBkaXN0YW5jZShtaW5YLCBtYXhYKSArIGV4cG9ydFBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBkaXN0YW5jZShtaW5ZLCBtYXhZKSArIGV4cG9ydFBhZGRpbmcgKyBleHBvcnRQYWRkaW5nO1xuXG4gIHJldHVybiBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwb3J0U2l6ZSA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBleHBvcnRQYWRkaW5nOiBudW1iZXIsXG4gIHNjYWxlOiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgWywgLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpLm1hcChcbiAgICAoZGltZW5zaW9uKSA9PiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKSxcbiAgKTtcblxuICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
|
|
3325
3325
|
|
|
3326
3326
|
/***/ }),
|
|
3327
3327
|
|
|
@@ -3409,7 +3409,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
3409
3409
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
3410
3410
|
|
|
3411
3411
|
"use strict";
|
|
3412
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"allowFullScreen\": () => (/* binding */ allowFullScreen),\n/* harmony export */ \"arrayToMap\": () => (/* binding */ arrayToMap),\n/* harmony export */ \"bytesToHexString\": () => (/* binding */ bytesToHexString),\n/* harmony export */ \"capitalizeString\": () => (/* binding */ capitalizeString),\n/* harmony export */ \"chunk\": () => (/* binding */ chunk),\n/* harmony export */ \"debounce\": () => (/* binding */ debounce),\n/* harmony export */ \"distance\": () => (/* binding */ distance),\n/* harmony export */ \"exitFullScreen\": () => (/* binding */ exitFullScreen),\n/* harmony export */ \"findIndex\": () => (/* binding */ findIndex),\n/* harmony export */ \"findLastIndex\": () => (/* binding */ findLastIndex),\n/* harmony export */ \"focusNearestParent\": () => (/* binding */ focusNearestParent),\n/* harmony export */ \"getDateTime\": () => (/* binding */ getDateTime),\n/* harmony export */ \"getFontFamilyString\": () => (/* binding */ getFontFamilyString),\n/* harmony export */ \"getFontString\": () => (/* binding */ getFontString),\n/* harmony export */ \"getFrame\": () => (/* binding */ getFrame),\n/* harmony export */ \"getGlobalCSSVariable\": () => (/* binding */ getGlobalCSSVariable),\n/* harmony export */ \"getNearestScrollableContainer\": () => (/* binding */ getNearestScrollableContainer),\n/* harmony export */ \"getShortcutKey\": () => (/* binding */ getShortcutKey),\n/* harmony export */ \"getUpdatedTimestamp\": () => (/* binding */ getUpdatedTimestamp),\n/* harmony export */ \"getVersion\": () => (/* binding */ getVersion),\n/* harmony export */ \"isFullScreen\": () => (/* binding */ isFullScreen),\n/* harmony export */ \"isInputLike\": () => (/* binding */ isInputLike),\n/* harmony export */ \"isPrimitive\": () => (/* binding */ isPrimitive),\n/* harmony export */ \"isProdEnv\": () => (/* binding */ isProdEnv),\n/* harmony export */ \"isPromiseLike\": () => (/* binding */ isPromiseLike),\n/* harmony export */ \"isRTL\": () => (/* binding */ isRTL),\n/* harmony export */ \"isTestEnv\": () => (/* binding */ isTestEnv),\n/* harmony export */ \"isToolIcon\": () => (/* binding */ isToolIcon),\n/* harmony export */ \"isTransparent\": () => (/* binding */ isTransparent),\n/* harmony export */ \"isWritableElement\": () => (/* binding */ isWritableElement),\n/* harmony export */ \"muteFSAbortError\": () => (/* binding */ muteFSAbortError),\n/* harmony export */ \"nFormatter\": () => (/* binding */ nFormatter),\n/* harmony export */ \"preventUnload\": () => (/* binding */ preventUnload),\n/* harmony export */ \"queryFocusableElements\": () => (/* binding */ queryFocusableElements),\n/* harmony export */ \"removeSelection\": () => (/* binding */ removeSelection),\n/* harmony export */ \"resetCursor\": () => (/* binding */ resetCursor),\n/* harmony export */ \"resolvablePromise\": () => (/* binding */ resolvablePromise),\n/* harmony export */ \"sceneCoordsToViewportCoords\": () => (/* binding */ sceneCoordsToViewportCoords),\n/* harmony export */ \"selectNode\": () => (/* binding */ selectNode),\n/* harmony export */ \"setCursor\": () => (/* binding */ setCursor),\n/* harmony export */ \"setCursorForShape\": () => (/* binding */ setCursorForShape),\n/* harmony export */ \"setDateTimeForTests\": () => (/* binding */ setDateTimeForTests),\n/* harmony export */ \"setEraserCursor\": () => (/* binding */ setEraserCursor),\n/* harmony export */ \"supportsEmoji\": () => (/* binding */ supportsEmoji),\n/* harmony export */ \"throttleRAF\": () => (/* binding */ throttleRAF),\n/* harmony export */ \"tupleToCoors\": () => (/* binding */ tupleToCoors),\n/* harmony export */ \"updateActiveTool\": () => (/* binding */ updateActiveTool),\n/* harmony export */ \"updateObject\": () => (/* binding */ updateObject),\n/* harmony export */ \"viewportCoordsToSceneCoords\": () => (/* binding */ viewportCoordsToSceneCoords),\n/* harmony export */ \"withBatchedUpdates\": () => (/* binding */ withBatchedUpdates),\n/* harmony export */ \"withBatchedUpdatesThrottled\": () => (/* binding */ withBatchedUpdatesThrottled),\n/* harmony export */ \"wrapEvent\": () => (/* binding */ wrapEvent)\n/* harmony export */ });\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colors */ \"../../colors.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"../../constants.ts\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keys */ \"../../keys.ts\");\n\n\n\n\n\nlet mockDateTime = null;\nconst setDateTimeForTests = (dateTime) => {\n mockDateTime = dateTime;\n};\nconst getDateTime = () => {\n if (mockDateTime) {\n return mockDateTime;\n }\n const date = new Date();\n const year = date.getFullYear();\n const month = `${date.getMonth() + 1}`.padStart(2, \"0\");\n const day = `${date.getDate()}`.padStart(2, \"0\");\n const hr = `${date.getHours()}`.padStart(2, \"0\");\n const min = `${date.getMinutes()}`.padStart(2, \"0\");\n return `${year}-${month}-${day}-${hr}${min}`;\n};\nconst capitalizeString = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nconst isToolIcon = (target) => target instanceof HTMLElement && target.className.includes(\"ToolIcon\");\nconst isInputLike = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\n target instanceof HTMLBRElement || // newline in wysiwyg\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement;\nconst isWritableElement = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\n target instanceof HTMLBRElement || // newline in wysiwyg\n target instanceof HTMLTextAreaElement ||\n (target instanceof HTMLInputElement &&\n (target.type === \"text\" || target.type === \"number\"));\nconst getFontFamilyString = ({ fontFamily, }) => {\n for (const [fontFamilyString, id] of Object.entries(_constants__WEBPACK_IMPORTED_MODULE_2__.FONT_FAMILY)) {\n if (id === fontFamily) {\n return `${fontFamilyString}, ${_constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT}`;\n }\n }\n return _constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT;\n};\n/** returns fontSize+fontFamily string for assignment to DOM elements */\nconst getFontString = ({ fontSize, fontFamily, }) => {\n return `${fontSize}px ${getFontFamilyString({ fontFamily })}`;\n};\nconst debounce = (fn, timeout) => {\n let handle = 0;\n let lastArgs = null;\n const ret = (...args) => {\n lastArgs = args;\n clearTimeout(handle);\n handle = window.setTimeout(() => {\n lastArgs = null;\n fn(...args);\n }, timeout);\n };\n ret.flush = () => {\n clearTimeout(handle);\n if (lastArgs) {\n const _lastArgs = lastArgs;\n lastArgs = null;\n fn(..._lastArgs);\n }\n };\n ret.cancel = () => {\n lastArgs = null;\n clearTimeout(handle);\n };\n return ret;\n};\n// throttle callback to execute once per animation frame\nconst throttleRAF = (fn, opts) => {\n let timerId = null;\n let lastArgs = null;\n let lastArgsTrailing = null;\n const scheduleFunc = (args) => {\n timerId = window.requestAnimationFrame(() => {\n timerId = null;\n fn(...args);\n lastArgs = null;\n if (lastArgsTrailing) {\n lastArgs = lastArgsTrailing;\n lastArgsTrailing = null;\n scheduleFunc(lastArgs);\n }\n });\n };\n const ret = (...args) => {\n if (false) {}\n lastArgs = args;\n if (timerId === null) {\n scheduleFunc(lastArgs);\n }\n else if (opts === null || opts === void 0 ? void 0 : opts.trailing) {\n lastArgsTrailing = args;\n }\n };\n ret.flush = () => {\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n if (lastArgs) {\n fn(...(lastArgsTrailing || lastArgs));\n lastArgs = lastArgsTrailing = null;\n }\n };\n ret.cancel = () => {\n lastArgs = lastArgsTrailing = null;\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n };\n return ret;\n};\n// https://github.com/lodash/lodash/blob/es/chunk.js\nconst chunk = (array, size) => {\n if (!array.length || size < 1) {\n return [];\n }\n let index = 0;\n let resIndex = 0;\n const result = Array(Math.ceil(array.length / size));\n while (index < array.length) {\n result[resIndex++] = array.slice(index, (index += size));\n }\n return result;\n};\nconst selectNode = (node) => {\n const selection = window.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(node);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n};\nconst removeSelection = () => {\n const selection = window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n }\n};\nconst distance = (x, y) => Math.abs(x - y);\nconst updateActiveTool = (appState, data) => {\n if (data.type === \"custom\") {\n return Object.assign(Object.assign({}, appState.activeTool), { type: \"custom\", customType: data.customType });\n }\n return Object.assign(Object.assign({}, appState.activeTool), { lastActiveToolBeforeEraser: data.lastActiveToolBeforeEraser === undefined\n ? appState.activeTool.lastActiveToolBeforeEraser\n : data.lastActiveToolBeforeEraser, type: data.type, customType: null });\n};\nconst resetCursor = (canvas) => {\n if (canvas) {\n canvas.style.cursor = \"\";\n }\n};\nconst setCursor = (canvas, cursor) => {\n if (canvas) {\n canvas.style.cursor = cursor;\n }\n};\nlet eraserCanvasCache;\nlet previewDataURL;\nconst setEraserCursor = (canvas, theme) => {\n const cursorImageSizePx = 20;\n const drawCanvas = () => {\n const isDarkTheme = theme === _constants__WEBPACK_IMPORTED_MODULE_2__.THEME.DARK;\n eraserCanvasCache = document.createElement(\"canvas\");\n eraserCanvasCache.theme = theme;\n eraserCanvasCache.height = cursorImageSizePx;\n eraserCanvasCache.width = cursorImageSizePx;\n const context = eraserCanvasCache.getContext(\"2d\");\n context.lineWidth = 1;\n context.beginPath();\n context.arc(eraserCanvasCache.width / 2, eraserCanvasCache.height / 2, 5, 0, 2 * Math.PI);\n context.fillStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.black : open_color__WEBPACK_IMPORTED_MODULE_0__.white;\n context.fill();\n context.strokeStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.white : open_color__WEBPACK_IMPORTED_MODULE_0__.black;\n context.stroke();\n previewDataURL = eraserCanvasCache.toDataURL(_constants__WEBPACK_IMPORTED_MODULE_2__.MIME_TYPES.svg);\n };\n if (!eraserCanvasCache || eraserCanvasCache.theme !== theme) {\n drawCanvas();\n }\n setCursor(canvas, `url(${previewDataURL}) ${cursorImageSizePx / 2} ${cursorImageSizePx / 2}, auto`);\n};\nconst setCursorForShape = (canvas, appState) => {\n if (!canvas) {\n return;\n }\n if (appState.activeTool.type === \"selection\") {\n resetCursor(canvas);\n }\n else if (appState.activeTool.type === \"eraser\") {\n setEraserCursor(canvas, appState.theme);\n // do nothing if image tool is selected which suggests there's\n // a image-preview set as the cursor\n // Ignore custom type as well and let host decide\n }\n else if (![\"image\", \"custom\"].includes(appState.activeTool.type)) {\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_2__.CURSOR_TYPE.CROSSHAIR;\n }\n};\nconst isFullScreen = () => { var _a; return ((_a = document.fullscreenElement) === null || _a === void 0 ? void 0 : _a.nodeName) === \"HTML\"; };\nconst allowFullScreen = () => document.documentElement.requestFullscreen();\nconst exitFullScreen = () => document.exitFullscreen();\nconst getShortcutKey = (shortcut) => {\n shortcut = shortcut\n .replace(/\\bAlt\\b/i, \"Alt\")\n .replace(/\\bShift\\b/i, \"Shift\")\n .replace(/\\b(Enter|Return)\\b/i, \"Enter\")\n .replace(/\\bDel\\b/i, \"Delete\");\n if (_keys__WEBPACK_IMPORTED_MODULE_4__.isDarwin) {\n return shortcut\n .replace(/\\bCtrlOrCmd\\b/i, \"Cmd\")\n .replace(/\\bAlt\\b/i, \"Option\");\n }\n return shortcut.replace(/\\bCtrlOrCmd\\b/i, \"Ctrl\");\n};\nconst viewportCoordsToSceneCoords = ({ clientX, clientY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\n const invScale = 1 / zoom.value;\n const x = (clientX - offsetLeft) * invScale - scrollX;\n const y = (clientY - offsetTop) * invScale - scrollY;\n return { x, y };\n};\nconst sceneCoordsToViewportCoords = ({ sceneX, sceneY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\n const x = (sceneX + scrollX) * zoom.value + offsetLeft;\n const y = (sceneY + scrollY) * zoom.value + offsetTop;\n return { x, y };\n};\nconst getGlobalCSSVariable = (name) => getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);\nconst RS_LTR_CHARS = \"A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\" +\n \"\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF\";\nconst RS_RTL_CHARS = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\nconst RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);\n/**\n * Checks whether first directional character is RTL. Meaning whether it starts\n * with RTL characters, or indeterminate (numbers etc.) characters followed by\n * RTL.\n * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171\n */\nconst isRTL = (text) => RE_RTL_CHECK.test(text);\nconst tupleToCoors = (xyTuple) => {\n const [x, y] = xyTuple;\n return { x, y };\n};\n/** use as a rejectionHandler to mute filesystem Abort errors */\nconst muteFSAbortError = (error) => {\n if ((error === null || error === void 0 ? void 0 : error.name) === \"AbortError\") {\n console.warn(error);\n return;\n }\n throw error;\n};\nconst findIndex = (array, cb, fromIndex = 0) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\n let index = fromIndex - 1;\n while (++index < array.length) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\nconst findLastIndex = (array, cb, fromIndex = array.length - 1) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\n let index = fromIndex + 1;\n while (--index > -1) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\nconst isTransparent = (color) => {\n const isRGBTransparent = color.length === 5 && color.substr(4, 1) === \"0\";\n const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === \"00\";\n return (isRGBTransparent ||\n isRRGGBBTransparent ||\n color === _colors__WEBPACK_IMPORTED_MODULE_1__[\"default\"].elementBackground[0]);\n};\nconst resolvablePromise = () => {\n let resolve;\n let reject;\n const promise = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n promise.resolve = resolve;\n promise.reject = reject;\n return promise;\n};\n/**\n * @param func handler taking at most single parameter (event).\n */\nconst withBatchedUpdates = (func) => ((event) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\n});\n/**\n * barches React state updates and throttles the calls to a single call per\n * animation frame\n */\nconst withBatchedUpdatesThrottled = (func) => {\n // @ts-ignore\n return throttleRAF(((event) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\n }));\n};\n//https://stackoverflow.com/a/9462382/8418\nconst nFormatter = (num, digits) => {\n const si = [\n { value: 1, symbol: \"b\" },\n { value: 1e3, symbol: \"k\" },\n { value: 1e6, symbol: \"M\" },\n { value: 1e9, symbol: \"G\" },\n ];\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\n let index;\n for (index = si.length - 1; index > 0; index--) {\n if (num >= si[index].value) {\n break;\n }\n }\n return ((num / si[index].value).toFixed(digits).replace(rx, \"$1\") + si[index].symbol);\n};\nconst getVersion = () => {\n var _a;\n return (((_a = document.querySelector('meta[name=\"version\"]')) === null || _a === void 0 ? void 0 : _a.content) ||\n _constants__WEBPACK_IMPORTED_MODULE_2__.DEFAULT_VERSION);\n};\n// Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/emoji.js\nconst supportsEmoji = () => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return false;\n }\n const offset = 12;\n ctx.fillStyle = \"#f00\";\n ctx.textBaseline = \"top\";\n ctx.font = \"32px Arial\";\n // Modernizr used 🐨, but it is sort of supported on Windows 7.\n // Luckily 😀 isn't supported.\n ctx.fillText(\"😀\", 0, 0);\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\n};\nconst getNearestScrollableContainer = (element) => {\n let parent = element.parentElement;\n while (parent) {\n if (parent === document.body) {\n return document;\n }\n const { overflowY } = window.getComputedStyle(parent);\n const hasScrollableContent = parent.scrollHeight > parent.clientHeight;\n if (hasScrollableContent &&\n (overflowY === \"auto\" ||\n overflowY === \"scroll\" ||\n overflowY === \"overlay\")) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return document;\n};\nconst focusNearestParent = (element) => {\n let parent = element.parentElement;\n while (parent) {\n if (parent.tabIndex > -1) {\n parent.focus();\n return;\n }\n parent = parent.parentElement;\n }\n};\nconst preventUnload = (event) => {\n event.preventDefault();\n // NOTE: modern browsers no longer allow showing a custom message here\n event.returnValue = \"\";\n};\nconst bytesToHexString = (bytes) => {\n return Array.from(bytes)\n .map((byte) => `0${byte.toString(16)}`.slice(-2))\n .join(\"\");\n};\nconst getUpdatedTimestamp = () => (isTestEnv() ? 1 : Date.now());\n/**\n * Transforms array of objects containing `id` attribute,\n * or array of ids (strings), into a Map, keyd by `id`.\n */\nconst arrayToMap = (items) => {\n return items.reduce((acc, element) => {\n acc.set(typeof element === \"string\" ? element : element.id, element);\n return acc;\n }, new Map());\n};\nconst isTestEnv = () => { var _a; return typeof process !== \"undefined\" && ((_a = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.13.0-75458c3\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"test\"; };\nconst isProdEnv = () => { var _a; return typeof process !== \"undefined\" && ((_a = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.13.0-75458c3\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"production\"; };\nconst wrapEvent = (name, nativeEvent) => {\n return new CustomEvent(name, {\n detail: {\n nativeEvent,\n },\n cancelable: true,\n });\n};\nconst updateObject = (obj, updates) => {\n let didChange = false;\n for (const key in updates) {\n const value = updates[key];\n if (typeof value !== \"undefined\") {\n if (obj[key] === value &&\n // if object, always update because its attrs could have changed\n (typeof value !== \"object\" || value === null)) {\n continue;\n }\n didChange = true;\n }\n }\n if (!didChange) {\n return obj;\n }\n return Object.assign(Object.assign({}, obj), updates);\n};\nconst isPrimitive = (val) => {\n const type = typeof val;\n return val == null || (type !== \"object\" && type !== \"function\");\n};\nconst getFrame = () => {\n try {\n return window.self === window.top ? \"top\" : \"iframe\";\n }\n catch (error) {\n return \"iframe\";\n }\n};\nconst isPromiseLike = (value) => {\n return (!!value &&\n typeof value === \"object\" &&\n \"then\" in value &&\n \"catch\" in value &&\n \"finally\" in value);\n};\nconst queryFocusableElements = (container) => {\n const focusableElements = container === null || container === void 0 ? void 0 : container.querySelectorAll(\"button, a, input, select, textarea, div[tabindex], label[tabindex]\");\n return focusableElements\n ? Array.from(focusableElements).filter((element) => element.tabIndex > -1 && !element.disabled)\n : [];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDO0FBRUssTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO0lBQzNCLElBQUk7UUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7S0FDdEQ7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyxDQUFDO0FBRUssTUFBTSxhQUFhLEdBQUcsQ0FDM0IsS0FBVSxFQUNzQyxFQUFFO0lBQ2xELE9BQU8sQ0FDTCxDQUFDLENBQUMsS0FBSztRQUNQLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsTUFBTSxJQUFJLEtBQUs7UUFDZixPQUFPLElBQUksS0FBSztRQUNoQixTQUFTLElBQUksS0FBSyxDQUNuQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUssTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFNBQTZCLEVBQUUsRUFBRTtJQUN0RSxNQUFNLGlCQUFpQixHQUFHLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxnQkFBZ0IsQ0FDbkQsb0VBQW9FLENBQ3JFLENBQUM7SUFFRixPQUFPLGlCQUFpQjtRQUN0QixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBRSxPQUE0QixDQUFDLFFBQVEsQ0FDbkU7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ1QsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3V0aWxzLnRzPzc2M2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9jIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5cbmltcG9ydCBjb2xvcnMgZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQge1xuICBDVVJTT1JfVFlQRSxcbiAgREVGQVVMVF9WRVJTSU9OLFxuICBFVkVOVCxcbiAgRk9OVF9GQU1JTFksXG4gIE1JTUVfVFlQRVMsXG4gIFRIRU1FLFxuICBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRm9udEZhbWlseVZhbHVlcywgRm9udFN0cmluZyB9IGZyb20gXCIuL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IEFwcFN0YXRlLCBEYXRhVVJMLCBMYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlciwgWm9vbSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IGlzRGFyd2luIH0gZnJvbSBcIi4va2V5c1wiO1xuaW1wb3J0IHsgU0hBUEVTIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5cbmxldCBtb2NrRGF0ZVRpbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgY29uc3Qgc2V0RGF0ZVRpbWVGb3JUZXN0cyA9IChkYXRlVGltZTogc3RyaW5nKSA9PiB7XG4gIG1vY2tEYXRlVGltZSA9IGRhdGVUaW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGVUaW1lID0gKCkgPT4ge1xuICBpZiAobW9ja0RhdGVUaW1lKSB7XG4gICAgcmV0dXJuIG1vY2tEYXRlVGltZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aCA9IGAke2RhdGUuZ2V0TW9udGgoKSArIDF9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIGNvbnN0IGRheSA9IGAke2RhdGUuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICBjb25zdCBociA9IGAke2RhdGUuZ2V0SG91cnMoKX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgY29uc3QgbWluID0gYCR7ZGF0ZS5nZXRNaW51dGVzKCl9YC5wYWRTdGFydCgyLCBcIjBcIik7XG5cbiAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fS0ke2hyfSR7bWlufWA7XG59O1xuXG5leHBvcnQgY29uc3QgY2FwaXRhbGl6ZVN0cmluZyA9IChzdHI6IHN0cmluZykgPT5cbiAgc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuXG5leHBvcnQgY29uc3QgaXNUb29sSWNvbiA9IChcbiAgdGFyZ2V0OiBFbGVtZW50IHwgRXZlbnRUYXJnZXQgfCBudWxsLFxuKTogdGFyZ2V0IGlzIEhUTUxFbGVtZW50ID0+XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5jbGFzc05hbWUuaW5jbHVkZXMoXCJUb29sSWNvblwiKTtcblxuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKFxuICB0YXJnZXQ6IEVsZW1lbnQgfCBFdmVudFRhcmdldCB8IG51bGwsXG4pOiB0YXJnZXQgaXNcbiAgfCBIVE1MSW5wdXRFbGVtZW50XG4gIHwgSFRNTFRleHRBcmVhRWxlbWVudFxuICB8IEhUTUxTZWxlY3RFbGVtZW50XG4gIHwgSFRNTEJSRWxlbWVudFxuICB8IEhUTUxEaXZFbGVtZW50ID0+XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIikgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJSRWxlbWVudCB8fCAvLyBuZXdsaW5lIGluIHd5c2l3eWdcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50O1xuXG5leHBvcnQgY29uc3QgaXNXcml0YWJsZUVsZW1lbnQgPSAoXG4gIHRhcmdldDogRWxlbWVudCB8IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbik6IHRhcmdldCBpc1xuICB8IEhUTUxJbnB1dEVsZW1lbnRcbiAgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4gIHwgSFRNTEJSRWxlbWVudFxuICB8IEhUTUxEaXZFbGVtZW50ID0+XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIikgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJSRWxlbWVudCB8fCAvLyBuZXdsaW5lIGluIHd5c2l3eWdcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCB8fFxuICAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJlxuICAgICh0YXJnZXQudHlwZSA9PT0gXCJ0ZXh0XCIgfHwgdGFyZ2V0LnR5cGUgPT09IFwibnVtYmVyXCIpKTtcblxuZXhwb3J0IGNvbnN0IGdldEZvbnRGYW1pbHlTdHJpbmcgPSAoe1xuICBmb250RmFtaWx5LFxufToge1xuICBmb250RmFtaWx5OiBGb250RmFtaWx5VmFsdWVzO1xufSkgPT4ge1xuICBmb3IgKGNvbnN0IFtmb250RmFtaWx5U3RyaW5nLCBpZF0gb2YgT2JqZWN0LmVudHJpZXMoRk9OVF9GQU1JTFkpKSB7XG4gICAgaWYgKGlkID09PSBmb250RmFtaWx5KSB7XG4gICAgICByZXR1cm4gYCR7Zm9udEZhbWlseVN0cmluZ30sICR7V0lORE9XU19FTU9KSV9GQUxMQkFDS19GT05UfWA7XG4gICAgfVxuICB9XG4gIHJldHVybiBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQ7XG59O1xuXG4vKiogcmV0dXJucyBmb250U2l6ZStmb250RmFtaWx5IHN0cmluZyBmb3IgYXNzaWdubWVudCB0byBET00gZWxlbWVudHMgKi9cbmV4cG9ydCBjb25zdCBnZXRGb250U3RyaW5nID0gKHtcbiAgZm9udFNpemUsXG4gIGZvbnRGYW1pbHksXG59OiB7XG4gIGZvbnRTaXplOiBudW1iZXI7XG4gIGZvbnRGYW1pbHk6IEZvbnRGYW1pbHlWYWx1ZXM7XG59KSA9PiB7XG4gIHJldHVybiBgJHtmb250U2l6ZX1weCAke2dldEZvbnRGYW1pbHlTdHJpbmcoeyBmb250RmFtaWx5IH0pfWAgYXMgRm9udFN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBkZWJvdW5jZSA9IDxUIGV4dGVuZHMgYW55W10+KFxuICBmbjogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG4gIHRpbWVvdXQ6IG51bWJlcixcbikgPT4ge1xuICBsZXQgaGFuZGxlID0gMDtcbiAgbGV0IGxhc3RBcmdzOiBUIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IHJldCA9ICguLi5hcmdzOiBUKSA9PiB7XG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuICAgIGhhbmRsZSA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgIH0sIHRpbWVvdXQpO1xuICB9O1xuICByZXQuZmx1c2ggPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSk7XG4gICAgaWYgKGxhc3RBcmdzKSB7XG4gICAgICBjb25zdCBfbGFzdEFyZ3MgPSBsYXN0QXJncztcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLl9sYXN0QXJncyk7XG4gICAgfVxuICB9O1xuICByZXQuY2FuY2VsID0gKCkgPT4ge1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBjbGVhclRpbWVvdXQoaGFuZGxlKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIHRocm90dGxlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSBwZXIgYW5pbWF0aW9uIGZyYW1lXG5leHBvcnQgY29uc3QgdGhyb3R0bGVSQUYgPSA8VCBleHRlbmRzIGFueVtdPihcbiAgZm46ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuICBvcHRzPzogeyB0cmFpbGluZz86IGJvb2xlYW4gfSxcbikgPT4ge1xuICBsZXQgdGltZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGxldCBsYXN0QXJnczogVCB8IG51bGwgPSBudWxsO1xuICBsZXQgbGFzdEFyZ3NUcmFpbGluZzogVCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHNjaGVkdWxlRnVuYyA9IChhcmdzOiBUKSA9PiB7XG4gICAgdGltZXJJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGlmIChsYXN0QXJnc1RyYWlsaW5nKSB7XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdEFyZ3NUcmFpbGluZztcbiAgICAgICAgbGFzdEFyZ3NUcmFpbGluZyA9IG51bGw7XG4gICAgICAgIHNjaGVkdWxlRnVuYyhsYXN0QXJncyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcmV0ID0gKC4uLmFyZ3M6IFQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGlmICh0aW1lcklkID09PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZUZ1bmMobGFzdEFyZ3MpO1xuICAgIH0gZWxzZSBpZiAob3B0cz8udHJhaWxpbmcpIHtcbiAgICAgIGxhc3RBcmdzVHJhaWxpbmcgPSBhcmdzO1xuICAgIH1cbiAgfTtcbiAgcmV0LmZsdXNoID0gKCkgPT4ge1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobGFzdEFyZ3MpIHtcbiAgICAgIGZuKC4uLihsYXN0QXJnc1RyYWlsaW5nIHx8IGxhc3RBcmdzKSk7XG4gICAgICBsYXN0QXJncyA9IGxhc3RBcmdzVHJhaWxpbmcgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0LmNhbmNlbCA9ICgpID0+IHtcbiAgICBsYXN0QXJncyA9IGxhc3RBcmdzVHJhaWxpbmcgPSBudWxsO1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvZXMvY2h1bmsuanNcbmV4cG9ydCBjb25zdCBjaHVuayA9IDxUIGV4dGVuZHMgYW55PihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgc2l6ZTogbnVtYmVyLFxuKTogVFtdW10gPT4ge1xuICBpZiAoIWFycmF5Lmxlbmd0aCB8fCBzaXplIDwgMSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgcmVzSW5kZXggPSAwO1xuICBjb25zdCByZXN1bHQgPSBBcnJheShNYXRoLmNlaWwoYXJyYXkubGVuZ3RoIC8gc2l6ZSkpO1xuICB3aGlsZSAoaW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBhcnJheS5zbGljZShpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdE5vZGUgPSAobm9kZTogRWxlbWVudCkgPT4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlU2VsZWN0aW9uID0gKCkgPT4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkaXN0YW5jZSA9ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gTWF0aC5hYnMoeCAtIHkpO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQWN0aXZlVG9vbCA9IChcbiAgYXBwU3RhdGU6IFBpY2s8QXBwU3RhdGUsIFwiYWN0aXZlVG9vbFwiPixcbiAgZGF0YTogKFxuICAgIHwgeyB0eXBlOiB0eXBlb2YgU0hBUEVTW251bWJlcl1bXCJ2YWx1ZVwiXSB8IFwiZXJhc2VyXCIgfVxuICAgIHwgeyB0eXBlOiBcImN1c3RvbVwiOyBjdXN0b21UeXBlOiBzdHJpbmcgfVxuICApICYgeyBsYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcj86IExhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyIH0sXG4pOiBBcHBTdGF0ZVtcImFjdGl2ZVRvb2xcIl0gPT4ge1xuICBpZiAoZGF0YS50eXBlID09PSBcImN1c3RvbVwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgICAgY3VzdG9tVHlwZTogZGF0YS5jdXN0b21UeXBlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgbGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXI6XG4gICAgICBkYXRhLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBhcHBTdGF0ZS5hY3RpdmVUb29sLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyXG4gICAgICAgIDogZGF0YS5sYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcixcbiAgICB0eXBlOiBkYXRhLnR5cGUsXG4gICAgY3VzdG9tVHlwZTogbnVsbCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNldEN1cnNvciA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IFwiXCI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDdXJzb3IgPSAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsIGN1cnNvcjogc3RyaW5nKSA9PiB7XG4gIGlmIChjYW52YXMpIHtcbiAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xuICB9XG59O1xuXG5sZXQgZXJhc2VyQ2FudmFzQ2FjaGU6IGFueTtcbmxldCBwcmV2aWV3RGF0YVVSTDogc3RyaW5nO1xuZXhwb3J0IGNvbnN0IHNldEVyYXNlckN1cnNvciA9IChcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsXG4gIHRoZW1lOiBBcHBTdGF0ZVtcInRoZW1lXCJdLFxuKSA9PiB7XG4gIGNvbnN0IGN1cnNvckltYWdlU2l6ZVB4ID0gMjA7XG5cbiAgY29uc3QgZHJhd0NhbnZhcyA9ICgpID0+IHtcbiAgICBjb25zdCBpc0RhcmtUaGVtZSA9IHRoZW1lID09PSBUSEVNRS5EQVJLO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS50aGVtZSA9IHRoZW1lO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLmhlaWdodCA9IGN1cnNvckltYWdlU2l6ZVB4O1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLndpZHRoID0gY3Vyc29ySW1hZ2VTaXplUHg7XG4gICAgY29uc3QgY29udGV4dCA9IGVyYXNlckNhbnZhc0NhY2hlLmdldENvbnRleHQoXCIyZFwiKSE7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSAxO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgY29udGV4dC5hcmMoXG4gICAgICBlcmFzZXJDYW52YXNDYWNoZS53aWR0aCAvIDIsXG4gICAgICBlcmFzZXJDYW52YXNDYWNoZS5oZWlnaHQgLyAyLFxuICAgICAgNSxcbiAgICAgIDAsXG4gICAgICAyICogTWF0aC5QSSxcbiAgICApO1xuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gaXNEYXJrVGhlbWUgPyBvYy5ibGFjayA6IG9jLndoaXRlO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBpc0RhcmtUaGVtZSA/IG9jLndoaXRlIDogb2MuYmxhY2s7XG4gICAgY29udGV4dC5zdHJva2UoKTtcbiAgICBwcmV2aWV3RGF0YVVSTCA9IGVyYXNlckNhbnZhc0NhY2hlLnRvRGF0YVVSTChNSU1FX1RZUEVTLnN2ZykgYXMgRGF0YVVSTDtcbiAgfTtcbiAgaWYgKCFlcmFzZXJDYW52YXNDYWNoZSB8fCBlcmFzZXJDYW52YXNDYWNoZS50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICBkcmF3Q2FudmFzKCk7XG4gIH1cblxuICBzZXRDdXJzb3IoXG4gICAgY2FudmFzLFxuICAgIGB1cmwoJHtwcmV2aWV3RGF0YVVSTH0pICR7Y3Vyc29ySW1hZ2VTaXplUHggLyAyfSAke1xuICAgICAgY3Vyc29ySW1hZ2VTaXplUHggLyAyXG4gICAgfSwgYXV0b2AsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q3Vyc29yRm9yU2hhcGUgPSAoXG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsLFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4pID0+IHtcbiAgaWYgKCFjYW52YXMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJzZWxlY3Rpb25cIikge1xuICAgIHJlc2V0Q3Vyc29yKGNhbnZhcyk7XG4gIH0gZWxzZSBpZiAoYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlID09PSBcImVyYXNlclwiKSB7XG4gICAgc2V0RXJhc2VyQ3Vyc29yKGNhbnZhcywgYXBwU3RhdGUudGhlbWUpO1xuICAgIC8vIGRvIG5vdGhpbmcgaWYgaW1hZ2UgdG9vbCBpcyBzZWxlY3RlZCB3aGljaCBzdWdnZXN0cyB0aGVyZSdzXG4gICAgLy8gYSBpbWFnZS1wcmV2aWV3IHNldCBhcyB0aGUgY3Vyc29yXG4gICAgLy8gSWdub3JlIGN1c3RvbSB0eXBlIGFzIHdlbGwgYW5kIGxldCBob3N0IGRlY2lkZVxuICB9IGVsc2UgaWYgKCFbXCJpbWFnZVwiLCBcImN1c3RvbVwiXS5pbmNsdWRlcyhhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUpKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IENVUlNPUl9UWVBFLkNST1NTSEFJUjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRnVsbFNjcmVlbiA9ICgpID0+XG4gIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50Py5ub2RlTmFtZSA9PT0gXCJIVE1MXCI7XG5cbmV4cG9ydCBjb25zdCBhbGxvd0Z1bGxTY3JlZW4gPSAoKSA9PlxuICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGV4aXRGdWxsU2NyZWVuID0gKCkgPT4gZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGdldFNob3J0Y3V0S2V5ID0gKHNob3J0Y3V0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBzaG9ydGN1dCA9IHNob3J0Y3V0XG4gICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIkFsdFwiKVxuICAgIC5yZXBsYWNlKC9cXGJTaGlmdFxcYi9pLCBcIlNoaWZ0XCIpXG4gICAgLnJlcGxhY2UoL1xcYihFbnRlcnxSZXR1cm4pXFxiL2ksIFwiRW50ZXJcIilcbiAgICAucmVwbGFjZSgvXFxiRGVsXFxiL2ksIFwiRGVsZXRlXCIpO1xuXG4gIGlmIChpc0Rhcndpbikge1xuICAgIHJldHVybiBzaG9ydGN1dFxuICAgICAgLnJlcGxhY2UoL1xcYkN0cmxPckNtZFxcYi9pLCBcIkNtZFwiKVxuICAgICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIk9wdGlvblwiKTtcbiAgfVxuICByZXR1cm4gc2hvcnRjdXQucmVwbGFjZSgvXFxiQ3RybE9yQ21kXFxiL2ksIFwiQ3RybFwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMgPSAoXG4gIHsgY2xpZW50WCwgY2xpZW50WSB9OiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0sXG4gIHtcbiAgICB6b29tLFxuICAgIG9mZnNldExlZnQsXG4gICAgb2Zmc2V0VG9wLFxuICAgIHNjcm9sbFgsXG4gICAgc2Nyb2xsWSxcbiAgfToge1xuICAgIHpvb206IFpvb207XG4gICAgb2Zmc2V0TGVmdDogbnVtYmVyO1xuICAgIG9mZnNldFRvcDogbnVtYmVyO1xuICAgIHNjcm9sbFg6IG51bWJlcjtcbiAgICBzY3JvbGxZOiBudW1iZXI7XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgaW52U2NhbGUgPSAxIC8gem9vbS52YWx1ZTtcbiAgY29uc3QgeCA9IChjbGllbnRYIC0gb2Zmc2V0TGVmdCkgKiBpbnZTY2FsZSAtIHNjcm9sbFg7XG4gIGNvbnN0IHkgPSAoY2xpZW50WSAtIG9mZnNldFRvcCkgKiBpbnZTY2FsZSAtIHNjcm9sbFk7XG5cbiAgcmV0dXJuIHsgeCwgeSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNjZW5lQ29vcmRzVG9WaWV3cG9ydENvb3JkcyA9IChcbiAgeyBzY2VuZVgsIHNjZW5lWSB9OiB7IHNjZW5lWDogbnVtYmVyOyBzY2VuZVk6IG51bWJlciB9LFxuICB7XG4gICAgem9vbSxcbiAgICBvZmZzZXRMZWZ0LFxuICAgIG9mZnNldFRvcCxcbiAgICBzY3JvbGxYLFxuICAgIHNjcm9sbFksXG4gIH06IHtcbiAgICB6b29tOiBab29tO1xuICAgIG9mZnNldExlZnQ6IG51bWJlcjtcbiAgICBvZmZzZXRUb3A6IG51bWJlcjtcbiAgICBzY3JvbGxYOiBudW1iZXI7XG4gICAgc2Nyb2xsWTogbnVtYmVyO1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IHggPSAoc2NlbmVYICsgc2Nyb2xsWCkgKiB6b29tLnZhbHVlICsgb2Zmc2V0TGVmdDtcbiAgY29uc3QgeSA9IChzY2VuZVkgKyBzY3JvbGxZKSAqIHpvb20udmFsdWUgKyBvZmZzZXRUb3A7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHbG9iYWxDU1NWYXJpYWJsZSA9IChuYW1lOiBzdHJpbmcpID0+XG4gIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGAtLSR7bmFtZX1gKTtcblxuY29uc3QgUlNfTFRSX0NIQVJTID1cbiAgXCJBLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQjhcXHUwMzAwLVxcdTA1OTBcXHUwODAwLVxcdTFGRkZcIiArXG4gIFwiXFx1MkMwMC1cXHVGQjFDXFx1RkRGRS1cXHVGRTZGXFx1RkVGRC1cXHVGRkZGXCI7XG5jb25zdCBSU19SVExfQ0hBUlMgPSBcIlxcdTA1OTEtXFx1MDdGRlxcdUZCMUQtXFx1RkRGRFxcdUZFNzAtXFx1RkVGQ1wiO1xuY29uc3QgUkVfUlRMX0NIRUNLID0gbmV3IFJlZ0V4cChgXlteJHtSU19MVFJfQ0hBUlN9XSpbJHtSU19SVExfQ0hBUlN9XWApO1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBmaXJzdCBkaXJlY3Rpb25hbCBjaGFyYWN0ZXIgaXMgUlRMLiBNZWFuaW5nIHdoZXRoZXIgaXQgc3RhcnRzXG4gKiAgd2l0aCBSVEwgY2hhcmFjdGVycywgb3IgaW5kZXRlcm1pbmF0ZSAobnVtYmVycyBldGMuKSBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5XG4gKiAgUlRMLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC8xNzIyI2Rpc2N1c3Npb25fcjQzNjM0MDE3MVxuICovXG5leHBvcnQgY29uc3QgaXNSVEwgPSAodGV4dDogc3RyaW5nKSA9PiBSRV9SVExfQ0hFQ0sudGVzdCh0ZXh0KTtcblxuZXhwb3J0IGNvbnN0IHR1cGxlVG9Db29ycyA9IChcbiAgeHlUdXBsZTogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSxcbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9PiB7XG4gIGNvbnN0IFt4LCB5XSA9IHh5VHVwbGU7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbi8qKiB1c2UgYXMgYSByZWplY3Rpb25IYW5kbGVyIHRvIG11dGUgZmlsZXN5c3RlbSBBYm9ydCBlcnJvcnMgKi9cbmV4cG9ydCBjb25zdCBtdXRlRlNBYm9ydEVycm9yID0gKGVycm9yPzogRXJyb3IpID0+IHtcbiAgaWYgKGVycm9yPy5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgIGNvbnNvbGUud2FybihlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IGVycm9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRJbmRleCA9IDxUPihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgY2I6IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogcmVhZG9ubHkgVFtdKSA9PiBib29sZWFuLFxuICBmcm9tSW5kZXg6IG51bWJlciA9IDAsXG4pID0+IHtcbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBhcnJheS5sZW5ndGggKyBmcm9tSW5kZXg7XG4gIH1cbiAgZnJvbUluZGV4ID0gTWF0aC5taW4oYXJyYXkubGVuZ3RoLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICBpZiAoY2IoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdEluZGV4ID0gPFQ+KFxuICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICBjYjogKGVsZW1lbnQ6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiByZWFkb25seSBUW10pID0+IGJvb2xlYW4sXG4gIGZyb21JbmRleDogbnVtYmVyID0gYXJyYXkubGVuZ3RoIC0gMSxcbikgPT4ge1xuICBpZiAoZnJvbUluZGV4IDwgMCkge1xuICAgIGZyb21JbmRleCA9IGFycmF5Lmxlbmd0aCArIGZyb21JbmRleDtcbiAgfVxuICBmcm9tSW5kZXggPSBNYXRoLm1pbihhcnJheS5sZW5ndGggLSAxLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgd2hpbGUgKC0taW5kZXggPiAtMSkge1xuICAgIGlmIChjYihhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVHJhbnNwYXJlbnQgPSAoY29sb3I6IHN0cmluZykgPT4ge1xuICBjb25zdCBpc1JHQlRyYW5zcGFyZW50ID0gY29sb3IubGVuZ3RoID09PSA1ICYmIGNvbG9yLnN1YnN0cig0LCAxKSA9PT0gXCIwXCI7XG4gIGNvbnN0IGlzUlJHR0JCVHJhbnNwYXJlbnQgPSBjb2xvci5sZW5ndGggPT09IDkgJiYgY29sb3Iuc3Vic3RyKDcsIDIpID09PSBcIjAwXCI7XG4gIHJldHVybiAoXG4gICAgaXNSR0JUcmFuc3BhcmVudCB8fFxuICAgIGlzUlJHR0JCVHJhbnNwYXJlbnQgfHxcbiAgICBjb2xvciA9PT0gY29sb3JzLmVsZW1lbnRCYWNrZ3JvdW5kWzBdXG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZhYmxlUHJvbWlzZTxUPiA9IFByb21pc2U8VD4gJiB7XG4gIHJlc29sdmU6IFtUXSBleHRlbmRzIFt1bmRlZmluZWRdID8gKHZhbHVlPzogVCkgPT4gdm9pZCA6ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufTtcbmV4cG9ydCBjb25zdCByZXNvbHZhYmxlUHJvbWlzZSA9IDxUPigpID0+IHtcbiAgbGV0IHJlc29sdmUhOiBhbnk7XG4gIGxldCByZWplY3QhOiBhbnk7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgfSk7XG4gIChwcm9taXNlIGFzIGFueSkucmVzb2x2ZSA9IHJlc29sdmU7XG4gIChwcm9taXNlIGFzIGFueSkucmVqZWN0ID0gcmVqZWN0O1xuICByZXR1cm4gcHJvbWlzZSBhcyBSZXNvbHZhYmxlUHJvbWlzZTxUPjtcbn07XG5cbi8qKlxuICogQHBhcmFtIGZ1bmMgaGFuZGxlciB0YWtpbmcgYXQgbW9zdCBzaW5nbGUgcGFyYW1ldGVyIChldmVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXMgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PlxuICAoKGV2ZW50KSA9PiB7XG4gICAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuYyBhcyBURnVuY3Rpb24sIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uO1xuXG4vKipcbiAqIGJhcmNoZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBhbmQgdGhyb3R0bGVzIHRoZSBjYWxscyB0byBhIHNpbmdsZSBjYWxsIHBlclxuICogYW5pbWF0aW9uIGZyYW1lXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXNUaHJvdHRsZWQgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PiB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIHRocm90dGxlUkFGPFBhcmFtZXRlcnM8VEZ1bmN0aW9uPj4oKChldmVudCkgPT4ge1xuICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZ1bmMsIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uKTtcbn07XG5cbi8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk0NjIzODIvODQxOFxuZXhwb3J0IGNvbnN0IG5Gb3JtYXR0ZXIgPSAobnVtOiBudW1iZXIsIGRpZ2l0czogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc2kgPSBbXG4gICAgeyB2YWx1ZTogMSwgc3ltYm9sOiBcImJcIiB9LFxuICAgIHsgdmFsdWU6IDFlMywgc3ltYm9sOiBcImtcIiB9LFxuICAgIHsgdmFsdWU6IDFlNiwgc3ltYm9sOiBcIk1cIiB9LFxuICAgIHsgdmFsdWU6IDFlOSwgc3ltYm9sOiBcIkdcIiB9LFxuICBdO1xuICBjb25zdCByeCA9IC9cXC4wKyR8KFxcLlswLTldKlsxLTldKTArJC87XG4gIGxldCBpbmRleDtcbiAgZm9yIChpbmRleCA9IHNpLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuICAgIGlmIChudW0gPj0gc2lbaW5kZXhdLnZhbHVlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChcbiAgICAobnVtIC8gc2lbaW5kZXhdLnZhbHVlKS50b0ZpeGVkKGRpZ2l0cykucmVwbGFjZShyeCwgXCIkMVwiKSArIHNpW2luZGV4XS5zeW1ib2xcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWZXJzaW9uID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTE1ldGFFbGVtZW50PignbWV0YVtuYW1lPVwidmVyc2lvblwiXScpPy5jb250ZW50IHx8XG4gICAgREVGQVVMVF9WRVJTSU9OXG4gICk7XG59O1xuXG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2Vtb2ppLmpzXG5leHBvcnQgY29uc3Qgc3VwcG9ydHNFbW9qaSA9ICgpID0+IHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gIGN0eC5maWxsU3R5bGUgPSBcIiNmMDBcIjtcbiAgY3R4LnRleHRCYXNlbGluZSA9IFwidG9wXCI7XG4gIGN0eC5mb250ID0gXCIzMnB4IEFyaWFsXCI7XG4gIC8vIE1vZGVybml6ciB1c2VkIPCfkKgsIGJ1dCBpdCBpcyBzb3J0IG9mIHN1cHBvcnRlZCBvbiBXaW5kb3dzIDcuXG4gIC8vIEx1Y2tpbHkg8J+YgCBpc24ndCBzdXBwb3J0ZWQuXG4gIGN0eC5maWxsVGV4dChcIvCfmIBcIiwgMCwgMCk7XG4gIHJldHVybiBjdHguZ2V0SW1hZ2VEYXRhKG9mZnNldCwgb2Zmc2V0LCAxLCAxKS5kYXRhWzBdICE9PSAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5lYXJlc3RTY3JvbGxhYmxlQ29udGFpbmVyID0gKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbik6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgIH1cbiAgICBjb25zdCB7IG92ZXJmbG93WSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcbiAgICBjb25zdCBoYXNTY3JvbGxhYmxlQ29udGVudCA9IHBhcmVudC5zY3JvbGxIZWlnaHQgPiBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChcbiAgICAgIGhhc1Njcm9sbGFibGVDb250ZW50ICYmXG4gICAgICAob3ZlcmZsb3dZID09PSBcImF1dG9cIiB8fFxuICAgICAgICBvdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgICAgb3ZlcmZsb3dZID09PSBcIm92ZXJsYXlcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBmb2N1c05lYXJlc3RQYXJlbnQgPSAoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC50YWJJbmRleCA+IC0xKSB7XG4gICAgICBwYXJlbnQuZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2ZW50VW5sb2FkID0gKGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyBOT1RFOiBtb2Rlcm4gYnJvd3NlcnMgbm8gbG9uZ2VyIGFsbG93IHNob3dpbmcgYSBjdXN0b20gbWVzc2FnZSBoZXJlXG4gIGV2ZW50LnJldHVyblZhbHVlID0gXCJcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBieXRlc1RvSGV4U3RyaW5nID0gKGJ5dGVzOiBVaW50OEFycmF5KSA9PiB7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKVxuICAgIC5tYXAoKGJ5dGUpID0+IGAwJHtieXRlLnRvU3RyaW5nKDE2KX1gLnNsaWNlKC0yKSlcbiAgICAuam9pbihcIlwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkVGltZXN0YW1wID0gKCkgPT4gKGlzVGVzdEVudigpID8gMSA6IERhdGUubm93KCkpO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGBpZGAgYXR0cmlidXRlLFxuICogb3IgYXJyYXkgb2YgaWRzIChzdHJpbmdzKSwgaW50byBhIE1hcCwga2V5ZCBieSBgaWRgLlxuICovXG5leHBvcnQgY29uc3QgYXJyYXlUb01hcCA9IDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIH0gfCBzdHJpbmc+KFxuICBpdGVtczogcmVhZG9ubHkgVFtdLFxuKSA9PiB7XG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYzogTWFwPHN0cmluZywgVD4sIGVsZW1lbnQpID0+IHtcbiAgICBhY2Muc2V0KHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiID8gZWxlbWVudCA6IGVsZW1lbnQuaWQsIGVsZW1lbnQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIG5ldyBNYXAoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNUZXN0RW52ID0gKCkgPT5cbiAgdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSBcInRlc3RcIjtcblxuZXhwb3J0IGNvbnN0IGlzUHJvZEVudiA9ICgpID0+XG4gIHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XG5cbmV4cG9ydCBjb25zdCB3cmFwRXZlbnQgPSA8VCBleHRlbmRzIEV2ZW50PihuYW1lOiBFVkVOVCwgbmF0aXZlRXZlbnQ6IFQpID0+IHtcbiAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChuYW1lLCB7XG4gICAgZGV0YWlsOiB7XG4gICAgICBuYXRpdmVFdmVudCxcbiAgICB9LFxuICAgIGNhbmNlbGFibGU6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZU9iamVjdCA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIG9iajogVCxcbiAgdXBkYXRlczogUGFydGlhbDxUPixcbik6IFQgPT4ge1xuICBsZXQgZGlkQ2hhbmdlID0gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IGluIHVwZGF0ZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh1cGRhdGVzIGFzIGFueSlba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChvYmogYXMgYW55KVtrZXldID09PSB2YWx1ZSAmJlxuICAgICAgICAvLyBpZiBvYmplY3QsIGFsd2F5cyB1cGRhdGUgYmVjYXVzZSBpdHMgYXR0cnMgY291bGQgaGF2ZSBjaGFuZ2VkXG4gICAgICAgICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkaWRDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlkQ2hhbmdlKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ub2JqLFxuICAgIC4uLnVwZGF0ZXMsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsOiBhbnkpID0+IHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCAodHlwZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlICE9PSBcImZ1bmN0aW9uXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyYW1lID0gKCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCA/IFwidG9wXCIgOiBcImlmcmFtZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcImlmcmFtZVwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcm9taXNlTGlrZSA9IChcbiAgdmFsdWU6IGFueSxcbik6IHZhbHVlIGlzIFByb21pc2U8UmVzb2x1dGlvblR5cGU8dHlwZW9mIHZhbHVlPj4gPT4ge1xuICByZXR1cm4gKFxuICAgICEhdmFsdWUgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcInRoZW5cIiBpbiB2YWx1ZSAmJlxuICAgIFwiY2F0Y2hcIiBpbiB2YWx1ZSAmJlxuICAgIFwiZmluYWxseVwiIGluIHZhbHVlXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVlcnlGb2N1c2FibGVFbGVtZW50cyA9IChjb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXG4gICAgXCJidXR0b24sIGEsIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBkaXZbdGFiaW5kZXhdLCBsYWJlbFt0YWJpbmRleF1cIixcbiAgKTtcblxuICByZXR1cm4gZm9jdXNhYmxlRWxlbWVudHNcbiAgICA/IEFycmF5LmZyb20oZm9jdXNhYmxlRWxlbWVudHMpLmZpbHRlcihcbiAgICAgICAgKGVsZW1lbnQpID0+XG4gICAgICAgICAgZWxlbWVudC50YWJJbmRleCA+IC0xICYmICEoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5kaXNhYmxlZCxcbiAgICAgIClcbiAgICA6IFtdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../utils.ts\n");
|
|
3412
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"allowFullScreen\": () => (/* binding */ allowFullScreen),\n/* harmony export */ \"arrayToMap\": () => (/* binding */ arrayToMap),\n/* harmony export */ \"bytesToHexString\": () => (/* binding */ bytesToHexString),\n/* harmony export */ \"capitalizeString\": () => (/* binding */ capitalizeString),\n/* harmony export */ \"chunk\": () => (/* binding */ chunk),\n/* harmony export */ \"debounce\": () => (/* binding */ debounce),\n/* harmony export */ \"distance\": () => (/* binding */ distance),\n/* harmony export */ \"exitFullScreen\": () => (/* binding */ exitFullScreen),\n/* harmony export */ \"findIndex\": () => (/* binding */ findIndex),\n/* harmony export */ \"findLastIndex\": () => (/* binding */ findLastIndex),\n/* harmony export */ \"focusNearestParent\": () => (/* binding */ focusNearestParent),\n/* harmony export */ \"getDateTime\": () => (/* binding */ getDateTime),\n/* harmony export */ \"getFontFamilyString\": () => (/* binding */ getFontFamilyString),\n/* harmony export */ \"getFontString\": () => (/* binding */ getFontString),\n/* harmony export */ \"getFrame\": () => (/* binding */ getFrame),\n/* harmony export */ \"getGlobalCSSVariable\": () => (/* binding */ getGlobalCSSVariable),\n/* harmony export */ \"getNearestScrollableContainer\": () => (/* binding */ getNearestScrollableContainer),\n/* harmony export */ \"getShortcutKey\": () => (/* binding */ getShortcutKey),\n/* harmony export */ \"getUpdatedTimestamp\": () => (/* binding */ getUpdatedTimestamp),\n/* harmony export */ \"getVersion\": () => (/* binding */ getVersion),\n/* harmony export */ \"isFullScreen\": () => (/* binding */ isFullScreen),\n/* harmony export */ \"isInputLike\": () => (/* binding */ isInputLike),\n/* harmony export */ \"isPrimitive\": () => (/* binding */ isPrimitive),\n/* harmony export */ \"isProdEnv\": () => (/* binding */ isProdEnv),\n/* harmony export */ \"isPromiseLike\": () => (/* binding */ isPromiseLike),\n/* harmony export */ \"isRTL\": () => (/* binding */ isRTL),\n/* harmony export */ \"isTestEnv\": () => (/* binding */ isTestEnv),\n/* harmony export */ \"isToolIcon\": () => (/* binding */ isToolIcon),\n/* harmony export */ \"isTransparent\": () => (/* binding */ isTransparent),\n/* harmony export */ \"isWritableElement\": () => (/* binding */ isWritableElement),\n/* harmony export */ \"muteFSAbortError\": () => (/* binding */ muteFSAbortError),\n/* harmony export */ \"nFormatter\": () => (/* binding */ nFormatter),\n/* harmony export */ \"preventUnload\": () => (/* binding */ preventUnload),\n/* harmony export */ \"queryFocusableElements\": () => (/* binding */ queryFocusableElements),\n/* harmony export */ \"removeSelection\": () => (/* binding */ removeSelection),\n/* harmony export */ \"resetCursor\": () => (/* binding */ resetCursor),\n/* harmony export */ \"resolvablePromise\": () => (/* binding */ resolvablePromise),\n/* harmony export */ \"sceneCoordsToViewportCoords\": () => (/* binding */ sceneCoordsToViewportCoords),\n/* harmony export */ \"selectNode\": () => (/* binding */ selectNode),\n/* harmony export */ \"setCursor\": () => (/* binding */ setCursor),\n/* harmony export */ \"setCursorForShape\": () => (/* binding */ setCursorForShape),\n/* harmony export */ \"setDateTimeForTests\": () => (/* binding */ setDateTimeForTests),\n/* harmony export */ \"setEraserCursor\": () => (/* binding */ setEraserCursor),\n/* harmony export */ \"supportsEmoji\": () => (/* binding */ supportsEmoji),\n/* harmony export */ \"throttleRAF\": () => (/* binding */ throttleRAF),\n/* harmony export */ \"tupleToCoors\": () => (/* binding */ tupleToCoors),\n/* harmony export */ \"updateActiveTool\": () => (/* binding */ updateActiveTool),\n/* harmony export */ \"updateObject\": () => (/* binding */ updateObject),\n/* harmony export */ \"viewportCoordsToSceneCoords\": () => (/* binding */ viewportCoordsToSceneCoords),\n/* harmony export */ \"withBatchedUpdates\": () => (/* binding */ withBatchedUpdates),\n/* harmony export */ \"withBatchedUpdatesThrottled\": () => (/* binding */ withBatchedUpdatesThrottled),\n/* harmony export */ \"wrapEvent\": () => (/* binding */ wrapEvent)\n/* harmony export */ });\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colors */ \"../../colors.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"../../constants.ts\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keys */ \"../../keys.ts\");\n\n\n\n\n\nlet mockDateTime = null;\nconst setDateTimeForTests = (dateTime) => {\n mockDateTime = dateTime;\n};\nconst getDateTime = () => {\n if (mockDateTime) {\n return mockDateTime;\n }\n const date = new Date();\n const year = date.getFullYear();\n const month = `${date.getMonth() + 1}`.padStart(2, \"0\");\n const day = `${date.getDate()}`.padStart(2, \"0\");\n const hr = `${date.getHours()}`.padStart(2, \"0\");\n const min = `${date.getMinutes()}`.padStart(2, \"0\");\n return `${year}-${month}-${day}-${hr}${min}`;\n};\nconst capitalizeString = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nconst isToolIcon = (target) => target instanceof HTMLElement && target.className.includes(\"ToolIcon\");\nconst isInputLike = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\n target instanceof HTMLBRElement || // newline in wysiwyg\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement;\nconst isWritableElement = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\n target instanceof HTMLBRElement || // newline in wysiwyg\n target instanceof HTMLTextAreaElement ||\n (target instanceof HTMLInputElement &&\n (target.type === \"text\" || target.type === \"number\"));\nconst getFontFamilyString = ({ fontFamily, }) => {\n for (const [fontFamilyString, id] of Object.entries(_constants__WEBPACK_IMPORTED_MODULE_2__.FONT_FAMILY)) {\n if (id === fontFamily) {\n return `${fontFamilyString}, ${_constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT}`;\n }\n }\n return _constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT;\n};\n/** returns fontSize+fontFamily string for assignment to DOM elements */\nconst getFontString = ({ fontSize, fontFamily, }) => {\n return `${fontSize}px ${getFontFamilyString({ fontFamily })}`;\n};\nconst debounce = (fn, timeout) => {\n let handle = 0;\n let lastArgs = null;\n const ret = (...args) => {\n lastArgs = args;\n clearTimeout(handle);\n handle = window.setTimeout(() => {\n lastArgs = null;\n fn(...args);\n }, timeout);\n };\n ret.flush = () => {\n clearTimeout(handle);\n if (lastArgs) {\n const _lastArgs = lastArgs;\n lastArgs = null;\n fn(..._lastArgs);\n }\n };\n ret.cancel = () => {\n lastArgs = null;\n clearTimeout(handle);\n };\n return ret;\n};\n// throttle callback to execute once per animation frame\nconst throttleRAF = (fn, opts) => {\n let timerId = null;\n let lastArgs = null;\n let lastArgsTrailing = null;\n const scheduleFunc = (args) => {\n timerId = window.requestAnimationFrame(() => {\n timerId = null;\n fn(...args);\n lastArgs = null;\n if (lastArgsTrailing) {\n lastArgs = lastArgsTrailing;\n lastArgsTrailing = null;\n scheduleFunc(lastArgs);\n }\n });\n };\n const ret = (...args) => {\n if (false) {}\n lastArgs = args;\n if (timerId === null) {\n scheduleFunc(lastArgs);\n }\n else if (opts === null || opts === void 0 ? void 0 : opts.trailing) {\n lastArgsTrailing = args;\n }\n };\n ret.flush = () => {\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n if (lastArgs) {\n fn(...(lastArgsTrailing || lastArgs));\n lastArgs = lastArgsTrailing = null;\n }\n };\n ret.cancel = () => {\n lastArgs = lastArgsTrailing = null;\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n };\n return ret;\n};\n// https://github.com/lodash/lodash/blob/es/chunk.js\nconst chunk = (array, size) => {\n if (!array.length || size < 1) {\n return [];\n }\n let index = 0;\n let resIndex = 0;\n const result = Array(Math.ceil(array.length / size));\n while (index < array.length) {\n result[resIndex++] = array.slice(index, (index += size));\n }\n return result;\n};\nconst selectNode = (node) => {\n const selection = window.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(node);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n};\nconst removeSelection = () => {\n const selection = window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n }\n};\nconst distance = (x, y) => Math.abs(x - y);\nconst updateActiveTool = (appState, data) => {\n if (data.type === \"custom\") {\n return Object.assign(Object.assign({}, appState.activeTool), { type: \"custom\", customType: data.customType });\n }\n return Object.assign(Object.assign({}, appState.activeTool), { lastActiveToolBeforeEraser: data.lastActiveToolBeforeEraser === undefined\n ? appState.activeTool.lastActiveToolBeforeEraser\n : data.lastActiveToolBeforeEraser, type: data.type, customType: null });\n};\nconst resetCursor = (canvas) => {\n if (canvas) {\n canvas.style.cursor = \"\";\n }\n};\nconst setCursor = (canvas, cursor) => {\n if (canvas) {\n canvas.style.cursor = cursor;\n }\n};\nlet eraserCanvasCache;\nlet previewDataURL;\nconst setEraserCursor = (canvas, theme) => {\n const cursorImageSizePx = 20;\n const drawCanvas = () => {\n const isDarkTheme = theme === _constants__WEBPACK_IMPORTED_MODULE_2__.THEME.DARK;\n eraserCanvasCache = document.createElement(\"canvas\");\n eraserCanvasCache.theme = theme;\n eraserCanvasCache.height = cursorImageSizePx;\n eraserCanvasCache.width = cursorImageSizePx;\n const context = eraserCanvasCache.getContext(\"2d\");\n context.lineWidth = 1;\n context.beginPath();\n context.arc(eraserCanvasCache.width / 2, eraserCanvasCache.height / 2, 5, 0, 2 * Math.PI);\n context.fillStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.black : open_color__WEBPACK_IMPORTED_MODULE_0__.white;\n context.fill();\n context.strokeStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.white : open_color__WEBPACK_IMPORTED_MODULE_0__.black;\n context.stroke();\n previewDataURL = eraserCanvasCache.toDataURL(_constants__WEBPACK_IMPORTED_MODULE_2__.MIME_TYPES.svg);\n };\n if (!eraserCanvasCache || eraserCanvasCache.theme !== theme) {\n drawCanvas();\n }\n setCursor(canvas, `url(${previewDataURL}) ${cursorImageSizePx / 2} ${cursorImageSizePx / 2}, auto`);\n};\nconst setCursorForShape = (canvas, appState) => {\n if (!canvas) {\n return;\n }\n if (appState.activeTool.type === \"selection\") {\n resetCursor(canvas);\n }\n else if (appState.activeTool.type === \"eraser\") {\n setEraserCursor(canvas, appState.theme);\n // do nothing if image tool is selected which suggests there's\n // a image-preview set as the cursor\n // Ignore custom type as well and let host decide\n }\n else if (![\"image\", \"custom\"].includes(appState.activeTool.type)) {\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_2__.CURSOR_TYPE.CROSSHAIR;\n }\n};\nconst isFullScreen = () => { var _a; return ((_a = document.fullscreenElement) === null || _a === void 0 ? void 0 : _a.nodeName) === \"HTML\"; };\nconst allowFullScreen = () => document.documentElement.requestFullscreen();\nconst exitFullScreen = () => document.exitFullscreen();\nconst getShortcutKey = (shortcut) => {\n shortcut = shortcut\n .replace(/\\bAlt\\b/i, \"Alt\")\n .replace(/\\bShift\\b/i, \"Shift\")\n .replace(/\\b(Enter|Return)\\b/i, \"Enter\")\n .replace(/\\bDel\\b/i, \"Delete\");\n if (_keys__WEBPACK_IMPORTED_MODULE_4__.isDarwin) {\n return shortcut\n .replace(/\\bCtrlOrCmd\\b/i, \"Cmd\")\n .replace(/\\bAlt\\b/i, \"Option\");\n }\n return shortcut.replace(/\\bCtrlOrCmd\\b/i, \"Ctrl\");\n};\nconst viewportCoordsToSceneCoords = ({ clientX, clientY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\n const invScale = 1 / zoom.value;\n const x = (clientX - offsetLeft) * invScale - scrollX;\n const y = (clientY - offsetTop) * invScale - scrollY;\n return { x, y };\n};\nconst sceneCoordsToViewportCoords = ({ sceneX, sceneY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\n const x = (sceneX + scrollX) * zoom.value + offsetLeft;\n const y = (sceneY + scrollY) * zoom.value + offsetTop;\n return { x, y };\n};\nconst getGlobalCSSVariable = (name) => getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);\nconst RS_LTR_CHARS = \"A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\" +\n \"\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF\";\nconst RS_RTL_CHARS = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\nconst RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);\n/**\n * Checks whether first directional character is RTL. Meaning whether it starts\n * with RTL characters, or indeterminate (numbers etc.) characters followed by\n * RTL.\n * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171\n */\nconst isRTL = (text) => RE_RTL_CHECK.test(text);\nconst tupleToCoors = (xyTuple) => {\n const [x, y] = xyTuple;\n return { x, y };\n};\n/** use as a rejectionHandler to mute filesystem Abort errors */\nconst muteFSAbortError = (error) => {\n if ((error === null || error === void 0 ? void 0 : error.name) === \"AbortError\") {\n console.warn(error);\n return;\n }\n throw error;\n};\nconst findIndex = (array, cb, fromIndex = 0) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\n let index = fromIndex - 1;\n while (++index < array.length) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\nconst findLastIndex = (array, cb, fromIndex = array.length - 1) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\n let index = fromIndex + 1;\n while (--index > -1) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\nconst isTransparent = (color) => {\n const isRGBTransparent = color.length === 5 && color.substr(4, 1) === \"0\";\n const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === \"00\";\n return (isRGBTransparent ||\n isRRGGBBTransparent ||\n color === _colors__WEBPACK_IMPORTED_MODULE_1__[\"default\"].elementBackground[0]);\n};\nconst resolvablePromise = () => {\n let resolve;\n let reject;\n const promise = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n promise.resolve = resolve;\n promise.reject = reject;\n return promise;\n};\n/**\n * @param func handler taking at most single parameter (event).\n */\nconst withBatchedUpdates = (func) => ((event) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\n});\n/**\n * barches React state updates and throttles the calls to a single call per\n * animation frame\n */\nconst withBatchedUpdatesThrottled = (func) => {\n // @ts-ignore\n return throttleRAF(((event) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\n }));\n};\n//https://stackoverflow.com/a/9462382/8418\nconst nFormatter = (num, digits) => {\n const si = [\n { value: 1, symbol: \"b\" },\n { value: 1e3, symbol: \"k\" },\n { value: 1e6, symbol: \"M\" },\n { value: 1e9, symbol: \"G\" },\n ];\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\n let index;\n for (index = si.length - 1; index > 0; index--) {\n if (num >= si[index].value) {\n break;\n }\n }\n return ((num / si[index].value).toFixed(digits).replace(rx, \"$1\") + si[index].symbol);\n};\nconst getVersion = () => {\n var _a;\n return (((_a = document.querySelector('meta[name=\"version\"]')) === null || _a === void 0 ? void 0 : _a.content) ||\n _constants__WEBPACK_IMPORTED_MODULE_2__.DEFAULT_VERSION);\n};\n// Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/emoji.js\nconst supportsEmoji = () => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return false;\n }\n const offset = 12;\n ctx.fillStyle = \"#f00\";\n ctx.textBaseline = \"top\";\n ctx.font = \"32px Arial\";\n // Modernizr used 🐨, but it is sort of supported on Windows 7.\n // Luckily 😀 isn't supported.\n ctx.fillText(\"😀\", 0, 0);\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\n};\nconst getNearestScrollableContainer = (element) => {\n let parent = element.parentElement;\n while (parent) {\n if (parent === document.body) {\n return document;\n }\n const { overflowY } = window.getComputedStyle(parent);\n const hasScrollableContent = parent.scrollHeight > parent.clientHeight;\n if (hasScrollableContent &&\n (overflowY === \"auto\" ||\n overflowY === \"scroll\" ||\n overflowY === \"overlay\")) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return document;\n};\nconst focusNearestParent = (element) => {\n let parent = element.parentElement;\n while (parent) {\n if (parent.tabIndex > -1) {\n parent.focus();\n return;\n }\n parent = parent.parentElement;\n }\n};\nconst preventUnload = (event) => {\n event.preventDefault();\n // NOTE: modern browsers no longer allow showing a custom message here\n event.returnValue = \"\";\n};\nconst bytesToHexString = (bytes) => {\n return Array.from(bytes)\n .map((byte) => `0${byte.toString(16)}`.slice(-2))\n .join(\"\");\n};\nconst getUpdatedTimestamp = () => (isTestEnv() ? 1 : Date.now());\n/**\n * Transforms array of objects containing `id` attribute,\n * or array of ids (strings), into a Map, keyd by `id`.\n */\nconst arrayToMap = (items) => {\n return items.reduce((acc, element) => {\n acc.set(typeof element === \"string\" ? element : element.id, element);\n return acc;\n }, new Map());\n};\nconst isTestEnv = () => { var _a; return typeof process !== \"undefined\" && ((_a = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.13.0-c8f6e3f\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"test\"; };\nconst isProdEnv = () => { var _a; return typeof process !== \"undefined\" && ((_a = ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.13.0-c8f6e3f\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"production\"; };\nconst wrapEvent = (name, nativeEvent) => {\n return new CustomEvent(name, {\n detail: {\n nativeEvent,\n },\n cancelable: true,\n });\n};\nconst updateObject = (obj, updates) => {\n let didChange = false;\n for (const key in updates) {\n const value = updates[key];\n if (typeof value !== \"undefined\") {\n if (obj[key] === value &&\n // if object, always update because its attrs could have changed\n (typeof value !== \"object\" || value === null)) {\n continue;\n }\n didChange = true;\n }\n }\n if (!didChange) {\n return obj;\n }\n return Object.assign(Object.assign({}, obj), updates);\n};\nconst isPrimitive = (val) => {\n const type = typeof val;\n return val == null || (type !== \"object\" && type !== \"function\");\n};\nconst getFrame = () => {\n try {\n return window.self === window.top ? \"top\" : \"iframe\";\n }\n catch (error) {\n return \"iframe\";\n }\n};\nconst isPromiseLike = (value) => {\n return (!!value &&\n typeof value === \"object\" &&\n \"then\" in value &&\n \"catch\" in value &&\n \"finally\" in value);\n};\nconst queryFocusableElements = (container) => {\n const focusableElements = container === null || container === void 0 ? void 0 : container.querySelectorAll(\"button, a, input, select, textarea, div[tabindex], label[tabindex]\");\n return focusableElements\n ? Array.from(focusableElements).filter((element) => element.tabIndex > -1 && !element.disabled)\n : [];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDO0FBRUssTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO0lBQzNCLElBQUk7UUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7S0FDdEQ7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyxDQUFDO0FBRUssTUFBTSxhQUFhLEdBQUcsQ0FDM0IsS0FBVSxFQUNzQyxFQUFFO0lBQ2xELE9BQU8sQ0FDTCxDQUFDLENBQUMsS0FBSztRQUNQLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsTUFBTSxJQUFJLEtBQUs7UUFDZixPQUFPLElBQUksS0FBSztRQUNoQixTQUFTLElBQUksS0FBSyxDQUNuQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUssTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFNBQTZCLEVBQUUsRUFBRTtJQUN0RSxNQUFNLGlCQUFpQixHQUFHLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxnQkFBZ0IsQ0FDbkQsb0VBQW9FLENBQ3JFLENBQUM7SUFFRixPQUFPLGlCQUFpQjtRQUN0QixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBRSxPQUE0QixDQUFDLFFBQVEsQ0FDbkU7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ1QsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3V0aWxzLnRzPzc2M2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9jIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5cbmltcG9ydCBjb2xvcnMgZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQge1xuICBDVVJTT1JfVFlQRSxcbiAgREVGQVVMVF9WRVJTSU9OLFxuICBFVkVOVCxcbiAgRk9OVF9GQU1JTFksXG4gIE1JTUVfVFlQRVMsXG4gIFRIRU1FLFxuICBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRm9udEZhbWlseVZhbHVlcywgRm9udFN0cmluZyB9IGZyb20gXCIuL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IEFwcFN0YXRlLCBEYXRhVVJMLCBMYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlciwgWm9vbSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IGlzRGFyd2luIH0gZnJvbSBcIi4va2V5c1wiO1xuaW1wb3J0IHsgU0hBUEVTIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5cbmxldCBtb2NrRGF0ZVRpbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgY29uc3Qgc2V0RGF0ZVRpbWVGb3JUZXN0cyA9IChkYXRlVGltZTogc3RyaW5nKSA9PiB7XG4gIG1vY2tEYXRlVGltZSA9IGRhdGVUaW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGVUaW1lID0gKCkgPT4ge1xuICBpZiAobW9ja0RhdGVUaW1lKSB7XG4gICAgcmV0dXJuIG1vY2tEYXRlVGltZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aCA9IGAke2RhdGUuZ2V0TW9udGgoKSArIDF9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIGNvbnN0IGRheSA9IGAke2RhdGUuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICBjb25zdCBociA9IGAke2RhdGUuZ2V0SG91cnMoKX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgY29uc3QgbWluID0gYCR7ZGF0ZS5nZXRNaW51dGVzKCl9YC5wYWRTdGFydCgyLCBcIjBcIik7XG5cbiAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fS0ke2hyfSR7bWlufWA7XG59O1xuXG5leHBvcnQgY29uc3QgY2FwaXRhbGl6ZVN0cmluZyA9IChzdHI6IHN0cmluZykgPT5cbiAgc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuXG5leHBvcnQgY29uc3QgaXNUb29sSWNvbiA9IChcbiAgdGFyZ2V0OiBFbGVtZW50IHwgRXZlbnRUYXJnZXQgfCBudWxsLFxuKTogdGFyZ2V0IGlzIEhUTUxFbGVtZW50ID0+XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5jbGFzc05hbWUuaW5jbHVkZXMoXCJUb29sSWNvblwiKTtcblxuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKFxuICB0YXJnZXQ6IEVsZW1lbnQgfCBFdmVudFRhcmdldCB8IG51bGwsXG4pOiB0YXJnZXQgaXNcbiAgfCBIVE1MSW5wdXRFbGVtZW50XG4gIHwgSFRNTFRleHRBcmVhRWxlbWVudFxuICB8IEhUTUxTZWxlY3RFbGVtZW50XG4gIHwgSFRNTEJSRWxlbWVudFxuICB8IEhUTUxEaXZFbGVtZW50ID0+XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIikgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJSRWxlbWVudCB8fCAvLyBuZXdsaW5lIGluIHd5c2l3eWdcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50O1xuXG5leHBvcnQgY29uc3QgaXNXcml0YWJsZUVsZW1lbnQgPSAoXG4gIHRhcmdldDogRWxlbWVudCB8IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbik6IHRhcmdldCBpc1xuICB8IEhUTUxJbnB1dEVsZW1lbnRcbiAgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4gIHwgSFRNTEJSRWxlbWVudFxuICB8IEhUTUxEaXZFbGVtZW50ID0+XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIikgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJSRWxlbWVudCB8fCAvLyBuZXdsaW5lIGluIHd5c2l3eWdcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCB8fFxuICAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJlxuICAgICh0YXJnZXQudHlwZSA9PT0gXCJ0ZXh0XCIgfHwgdGFyZ2V0LnR5cGUgPT09IFwibnVtYmVyXCIpKTtcblxuZXhwb3J0IGNvbnN0IGdldEZvbnRGYW1pbHlTdHJpbmcgPSAoe1xuICBmb250RmFtaWx5LFxufToge1xuICBmb250RmFtaWx5OiBGb250RmFtaWx5VmFsdWVzO1xufSkgPT4ge1xuICBmb3IgKGNvbnN0IFtmb250RmFtaWx5U3RyaW5nLCBpZF0gb2YgT2JqZWN0LmVudHJpZXMoRk9OVF9GQU1JTFkpKSB7XG4gICAgaWYgKGlkID09PSBmb250RmFtaWx5KSB7XG4gICAgICByZXR1cm4gYCR7Zm9udEZhbWlseVN0cmluZ30sICR7V0lORE9XU19FTU9KSV9GQUxMQkFDS19GT05UfWA7XG4gICAgfVxuICB9XG4gIHJldHVybiBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQ7XG59O1xuXG4vKiogcmV0dXJucyBmb250U2l6ZStmb250RmFtaWx5IHN0cmluZyBmb3IgYXNzaWdubWVudCB0byBET00gZWxlbWVudHMgKi9cbmV4cG9ydCBjb25zdCBnZXRGb250U3RyaW5nID0gKHtcbiAgZm9udFNpemUsXG4gIGZvbnRGYW1pbHksXG59OiB7XG4gIGZvbnRTaXplOiBudW1iZXI7XG4gIGZvbnRGYW1pbHk6IEZvbnRGYW1pbHlWYWx1ZXM7XG59KSA9PiB7XG4gIHJldHVybiBgJHtmb250U2l6ZX1weCAke2dldEZvbnRGYW1pbHlTdHJpbmcoeyBmb250RmFtaWx5IH0pfWAgYXMgRm9udFN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBkZWJvdW5jZSA9IDxUIGV4dGVuZHMgYW55W10+KFxuICBmbjogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG4gIHRpbWVvdXQ6IG51bWJlcixcbikgPT4ge1xuICBsZXQgaGFuZGxlID0gMDtcbiAgbGV0IGxhc3RBcmdzOiBUIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IHJldCA9ICguLi5hcmdzOiBUKSA9PiB7XG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuICAgIGhhbmRsZSA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgIH0sIHRpbWVvdXQpO1xuICB9O1xuICByZXQuZmx1c2ggPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSk7XG4gICAgaWYgKGxhc3RBcmdzKSB7XG4gICAgICBjb25zdCBfbGFzdEFyZ3MgPSBsYXN0QXJncztcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLl9sYXN0QXJncyk7XG4gICAgfVxuICB9O1xuICByZXQuY2FuY2VsID0gKCkgPT4ge1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBjbGVhclRpbWVvdXQoaGFuZGxlKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIHRocm90dGxlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSBwZXIgYW5pbWF0aW9uIGZyYW1lXG5leHBvcnQgY29uc3QgdGhyb3R0bGVSQUYgPSA8VCBleHRlbmRzIGFueVtdPihcbiAgZm46ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuICBvcHRzPzogeyB0cmFpbGluZz86IGJvb2xlYW4gfSxcbikgPT4ge1xuICBsZXQgdGltZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGxldCBsYXN0QXJnczogVCB8IG51bGwgPSBudWxsO1xuICBsZXQgbGFzdEFyZ3NUcmFpbGluZzogVCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHNjaGVkdWxlRnVuYyA9IChhcmdzOiBUKSA9PiB7XG4gICAgdGltZXJJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGlmIChsYXN0QXJnc1RyYWlsaW5nKSB7XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdEFyZ3NUcmFpbGluZztcbiAgICAgICAgbGFzdEFyZ3NUcmFpbGluZyA9IG51bGw7XG4gICAgICAgIHNjaGVkdWxlRnVuYyhsYXN0QXJncyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcmV0ID0gKC4uLmFyZ3M6IFQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGlmICh0aW1lcklkID09PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZUZ1bmMobGFzdEFyZ3MpO1xuICAgIH0gZWxzZSBpZiAob3B0cz8udHJhaWxpbmcpIHtcbiAgICAgIGxhc3RBcmdzVHJhaWxpbmcgPSBhcmdzO1xuICAgIH1cbiAgfTtcbiAgcmV0LmZsdXNoID0gKCkgPT4ge1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobGFzdEFyZ3MpIHtcbiAgICAgIGZuKC4uLihsYXN0QXJnc1RyYWlsaW5nIHx8IGxhc3RBcmdzKSk7XG4gICAgICBsYXN0QXJncyA9IGxhc3RBcmdzVHJhaWxpbmcgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0LmNhbmNlbCA9ICgpID0+IHtcbiAgICBsYXN0QXJncyA9IGxhc3RBcmdzVHJhaWxpbmcgPSBudWxsO1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvZXMvY2h1bmsuanNcbmV4cG9ydCBjb25zdCBjaHVuayA9IDxUIGV4dGVuZHMgYW55PihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgc2l6ZTogbnVtYmVyLFxuKTogVFtdW10gPT4ge1xuICBpZiAoIWFycmF5Lmxlbmd0aCB8fCBzaXplIDwgMSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgcmVzSW5kZXggPSAwO1xuICBjb25zdCByZXN1bHQgPSBBcnJheShNYXRoLmNlaWwoYXJyYXkubGVuZ3RoIC8gc2l6ZSkpO1xuICB3aGlsZSAoaW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBhcnJheS5zbGljZShpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdE5vZGUgPSAobm9kZTogRWxlbWVudCkgPT4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlU2VsZWN0aW9uID0gKCkgPT4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkaXN0YW5jZSA9ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gTWF0aC5hYnMoeCAtIHkpO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQWN0aXZlVG9vbCA9IChcbiAgYXBwU3RhdGU6IFBpY2s8QXBwU3RhdGUsIFwiYWN0aXZlVG9vbFwiPixcbiAgZGF0YTogKFxuICAgIHwgeyB0eXBlOiB0eXBlb2YgU0hBUEVTW251bWJlcl1bXCJ2YWx1ZVwiXSB8IFwiZXJhc2VyXCIgfVxuICAgIHwgeyB0eXBlOiBcImN1c3RvbVwiOyBjdXN0b21UeXBlOiBzdHJpbmcgfVxuICApICYgeyBsYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcj86IExhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyIH0sXG4pOiBBcHBTdGF0ZVtcImFjdGl2ZVRvb2xcIl0gPT4ge1xuICBpZiAoZGF0YS50eXBlID09PSBcImN1c3RvbVwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgICAgY3VzdG9tVHlwZTogZGF0YS5jdXN0b21UeXBlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgbGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXI6XG4gICAgICBkYXRhLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBhcHBTdGF0ZS5hY3RpdmVUb29sLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyXG4gICAgICAgIDogZGF0YS5sYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcixcbiAgICB0eXBlOiBkYXRhLnR5cGUsXG4gICAgY3VzdG9tVHlwZTogbnVsbCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNldEN1cnNvciA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IFwiXCI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDdXJzb3IgPSAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsIGN1cnNvcjogc3RyaW5nKSA9PiB7XG4gIGlmIChjYW52YXMpIHtcbiAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xuICB9XG59O1xuXG5sZXQgZXJhc2VyQ2FudmFzQ2FjaGU6IGFueTtcbmxldCBwcmV2aWV3RGF0YVVSTDogc3RyaW5nO1xuZXhwb3J0IGNvbnN0IHNldEVyYXNlckN1cnNvciA9IChcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsXG4gIHRoZW1lOiBBcHBTdGF0ZVtcInRoZW1lXCJdLFxuKSA9PiB7XG4gIGNvbnN0IGN1cnNvckltYWdlU2l6ZVB4ID0gMjA7XG5cbiAgY29uc3QgZHJhd0NhbnZhcyA9ICgpID0+IHtcbiAgICBjb25zdCBpc0RhcmtUaGVtZSA9IHRoZW1lID09PSBUSEVNRS5EQVJLO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS50aGVtZSA9IHRoZW1lO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLmhlaWdodCA9IGN1cnNvckltYWdlU2l6ZVB4O1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLndpZHRoID0gY3Vyc29ySW1hZ2VTaXplUHg7XG4gICAgY29uc3QgY29udGV4dCA9IGVyYXNlckNhbnZhc0NhY2hlLmdldENvbnRleHQoXCIyZFwiKSE7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSAxO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgY29udGV4dC5hcmMoXG4gICAgICBlcmFzZXJDYW52YXNDYWNoZS53aWR0aCAvIDIsXG4gICAgICBlcmFzZXJDYW52YXNDYWNoZS5oZWlnaHQgLyAyLFxuICAgICAgNSxcbiAgICAgIDAsXG4gICAgICAyICogTWF0aC5QSSxcbiAgICApO1xuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gaXNEYXJrVGhlbWUgPyBvYy5ibGFjayA6IG9jLndoaXRlO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBpc0RhcmtUaGVtZSA/IG9jLndoaXRlIDogb2MuYmxhY2s7XG4gICAgY29udGV4dC5zdHJva2UoKTtcbiAgICBwcmV2aWV3RGF0YVVSTCA9IGVyYXNlckNhbnZhc0NhY2hlLnRvRGF0YVVSTChNSU1FX1RZUEVTLnN2ZykgYXMgRGF0YVVSTDtcbiAgfTtcbiAgaWYgKCFlcmFzZXJDYW52YXNDYWNoZSB8fCBlcmFzZXJDYW52YXNDYWNoZS50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICBkcmF3Q2FudmFzKCk7XG4gIH1cblxuICBzZXRDdXJzb3IoXG4gICAgY2FudmFzLFxuICAgIGB1cmwoJHtwcmV2aWV3RGF0YVVSTH0pICR7Y3Vyc29ySW1hZ2VTaXplUHggLyAyfSAke1xuICAgICAgY3Vyc29ySW1hZ2VTaXplUHggLyAyXG4gICAgfSwgYXV0b2AsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q3Vyc29yRm9yU2hhcGUgPSAoXG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsLFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4pID0+IHtcbiAgaWYgKCFjYW52YXMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJzZWxlY3Rpb25cIikge1xuICAgIHJlc2V0Q3Vyc29yKGNhbnZhcyk7XG4gIH0gZWxzZSBpZiAoYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlID09PSBcImVyYXNlclwiKSB7XG4gICAgc2V0RXJhc2VyQ3Vyc29yKGNhbnZhcywgYXBwU3RhdGUudGhlbWUpO1xuICAgIC8vIGRvIG5vdGhpbmcgaWYgaW1hZ2UgdG9vbCBpcyBzZWxlY3RlZCB3aGljaCBzdWdnZXN0cyB0aGVyZSdzXG4gICAgLy8gYSBpbWFnZS1wcmV2aWV3IHNldCBhcyB0aGUgY3Vyc29yXG4gICAgLy8gSWdub3JlIGN1c3RvbSB0eXBlIGFzIHdlbGwgYW5kIGxldCBob3N0IGRlY2lkZVxuICB9IGVsc2UgaWYgKCFbXCJpbWFnZVwiLCBcImN1c3RvbVwiXS5pbmNsdWRlcyhhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUpKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IENVUlNPUl9UWVBFLkNST1NTSEFJUjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRnVsbFNjcmVlbiA9ICgpID0+XG4gIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50Py5ub2RlTmFtZSA9PT0gXCJIVE1MXCI7XG5cbmV4cG9ydCBjb25zdCBhbGxvd0Z1bGxTY3JlZW4gPSAoKSA9PlxuICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGV4aXRGdWxsU2NyZWVuID0gKCkgPT4gZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGdldFNob3J0Y3V0S2V5ID0gKHNob3J0Y3V0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBzaG9ydGN1dCA9IHNob3J0Y3V0XG4gICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIkFsdFwiKVxuICAgIC5yZXBsYWNlKC9cXGJTaGlmdFxcYi9pLCBcIlNoaWZ0XCIpXG4gICAgLnJlcGxhY2UoL1xcYihFbnRlcnxSZXR1cm4pXFxiL2ksIFwiRW50ZXJcIilcbiAgICAucmVwbGFjZSgvXFxiRGVsXFxiL2ksIFwiRGVsZXRlXCIpO1xuXG4gIGlmIChpc0Rhcndpbikge1xuICAgIHJldHVybiBzaG9ydGN1dFxuICAgICAgLnJlcGxhY2UoL1xcYkN0cmxPckNtZFxcYi9pLCBcIkNtZFwiKVxuICAgICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIk9wdGlvblwiKTtcbiAgfVxuICByZXR1cm4gc2hvcnRjdXQucmVwbGFjZSgvXFxiQ3RybE9yQ21kXFxiL2ksIFwiQ3RybFwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMgPSAoXG4gIHsgY2xpZW50WCwgY2xpZW50WSB9OiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0sXG4gIHtcbiAgICB6b29tLFxuICAgIG9mZnNldExlZnQsXG4gICAgb2Zmc2V0VG9wLFxuICAgIHNjcm9sbFgsXG4gICAgc2Nyb2xsWSxcbiAgfToge1xuICAgIHpvb206IFpvb207XG4gICAgb2Zmc2V0TGVmdDogbnVtYmVyO1xuICAgIG9mZnNldFRvcDogbnVtYmVyO1xuICAgIHNjcm9sbFg6IG51bWJlcjtcbiAgICBzY3JvbGxZOiBudW1iZXI7XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgaW52U2NhbGUgPSAxIC8gem9vbS52YWx1ZTtcbiAgY29uc3QgeCA9IChjbGllbnRYIC0gb2Zmc2V0TGVmdCkgKiBpbnZTY2FsZSAtIHNjcm9sbFg7XG4gIGNvbnN0IHkgPSAoY2xpZW50WSAtIG9mZnNldFRvcCkgKiBpbnZTY2FsZSAtIHNjcm9sbFk7XG5cbiAgcmV0dXJuIHsgeCwgeSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNjZW5lQ29vcmRzVG9WaWV3cG9ydENvb3JkcyA9IChcbiAgeyBzY2VuZVgsIHNjZW5lWSB9OiB7IHNjZW5lWDogbnVtYmVyOyBzY2VuZVk6IG51bWJlciB9LFxuICB7XG4gICAgem9vbSxcbiAgICBvZmZzZXRMZWZ0LFxuICAgIG9mZnNldFRvcCxcbiAgICBzY3JvbGxYLFxuICAgIHNjcm9sbFksXG4gIH06IHtcbiAgICB6b29tOiBab29tO1xuICAgIG9mZnNldExlZnQ6IG51bWJlcjtcbiAgICBvZmZzZXRUb3A6IG51bWJlcjtcbiAgICBzY3JvbGxYOiBudW1iZXI7XG4gICAgc2Nyb2xsWTogbnVtYmVyO1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IHggPSAoc2NlbmVYICsgc2Nyb2xsWCkgKiB6b29tLnZhbHVlICsgb2Zmc2V0TGVmdDtcbiAgY29uc3QgeSA9IChzY2VuZVkgKyBzY3JvbGxZKSAqIHpvb20udmFsdWUgKyBvZmZzZXRUb3A7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHbG9iYWxDU1NWYXJpYWJsZSA9IChuYW1lOiBzdHJpbmcpID0+XG4gIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGAtLSR7bmFtZX1gKTtcblxuY29uc3QgUlNfTFRSX0NIQVJTID1cbiAgXCJBLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQjhcXHUwMzAwLVxcdTA1OTBcXHUwODAwLVxcdTFGRkZcIiArXG4gIFwiXFx1MkMwMC1cXHVGQjFDXFx1RkRGRS1cXHVGRTZGXFx1RkVGRC1cXHVGRkZGXCI7XG5jb25zdCBSU19SVExfQ0hBUlMgPSBcIlxcdTA1OTEtXFx1MDdGRlxcdUZCMUQtXFx1RkRGRFxcdUZFNzAtXFx1RkVGQ1wiO1xuY29uc3QgUkVfUlRMX0NIRUNLID0gbmV3IFJlZ0V4cChgXlteJHtSU19MVFJfQ0hBUlN9XSpbJHtSU19SVExfQ0hBUlN9XWApO1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBmaXJzdCBkaXJlY3Rpb25hbCBjaGFyYWN0ZXIgaXMgUlRMLiBNZWFuaW5nIHdoZXRoZXIgaXQgc3RhcnRzXG4gKiAgd2l0aCBSVEwgY2hhcmFjdGVycywgb3IgaW5kZXRlcm1pbmF0ZSAobnVtYmVycyBldGMuKSBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5XG4gKiAgUlRMLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC8xNzIyI2Rpc2N1c3Npb25fcjQzNjM0MDE3MVxuICovXG5leHBvcnQgY29uc3QgaXNSVEwgPSAodGV4dDogc3RyaW5nKSA9PiBSRV9SVExfQ0hFQ0sudGVzdCh0ZXh0KTtcblxuZXhwb3J0IGNvbnN0IHR1cGxlVG9Db29ycyA9IChcbiAgeHlUdXBsZTogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSxcbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9PiB7XG4gIGNvbnN0IFt4LCB5XSA9IHh5VHVwbGU7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbi8qKiB1c2UgYXMgYSByZWplY3Rpb25IYW5kbGVyIHRvIG11dGUgZmlsZXN5c3RlbSBBYm9ydCBlcnJvcnMgKi9cbmV4cG9ydCBjb25zdCBtdXRlRlNBYm9ydEVycm9yID0gKGVycm9yPzogRXJyb3IpID0+IHtcbiAgaWYgKGVycm9yPy5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgIGNvbnNvbGUud2FybihlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IGVycm9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRJbmRleCA9IDxUPihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgY2I6IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogcmVhZG9ubHkgVFtdKSA9PiBib29sZWFuLFxuICBmcm9tSW5kZXg6IG51bWJlciA9IDAsXG4pID0+IHtcbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBhcnJheS5sZW5ndGggKyBmcm9tSW5kZXg7XG4gIH1cbiAgZnJvbUluZGV4ID0gTWF0aC5taW4oYXJyYXkubGVuZ3RoLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICBpZiAoY2IoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdEluZGV4ID0gPFQ+KFxuICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICBjYjogKGVsZW1lbnQ6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiByZWFkb25seSBUW10pID0+IGJvb2xlYW4sXG4gIGZyb21JbmRleDogbnVtYmVyID0gYXJyYXkubGVuZ3RoIC0gMSxcbikgPT4ge1xuICBpZiAoZnJvbUluZGV4IDwgMCkge1xuICAgIGZyb21JbmRleCA9IGFycmF5Lmxlbmd0aCArIGZyb21JbmRleDtcbiAgfVxuICBmcm9tSW5kZXggPSBNYXRoLm1pbihhcnJheS5sZW5ndGggLSAxLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgd2hpbGUgKC0taW5kZXggPiAtMSkge1xuICAgIGlmIChjYihhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVHJhbnNwYXJlbnQgPSAoY29sb3I6IHN0cmluZykgPT4ge1xuICBjb25zdCBpc1JHQlRyYW5zcGFyZW50ID0gY29sb3IubGVuZ3RoID09PSA1ICYmIGNvbG9yLnN1YnN0cig0LCAxKSA9PT0gXCIwXCI7XG4gIGNvbnN0IGlzUlJHR0JCVHJhbnNwYXJlbnQgPSBjb2xvci5sZW5ndGggPT09IDkgJiYgY29sb3Iuc3Vic3RyKDcsIDIpID09PSBcIjAwXCI7XG4gIHJldHVybiAoXG4gICAgaXNSR0JUcmFuc3BhcmVudCB8fFxuICAgIGlzUlJHR0JCVHJhbnNwYXJlbnQgfHxcbiAgICBjb2xvciA9PT0gY29sb3JzLmVsZW1lbnRCYWNrZ3JvdW5kWzBdXG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZhYmxlUHJvbWlzZTxUPiA9IFByb21pc2U8VD4gJiB7XG4gIHJlc29sdmU6IFtUXSBleHRlbmRzIFt1bmRlZmluZWRdID8gKHZhbHVlPzogVCkgPT4gdm9pZCA6ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufTtcbmV4cG9ydCBjb25zdCByZXNvbHZhYmxlUHJvbWlzZSA9IDxUPigpID0+IHtcbiAgbGV0IHJlc29sdmUhOiBhbnk7XG4gIGxldCByZWplY3QhOiBhbnk7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgfSk7XG4gIChwcm9taXNlIGFzIGFueSkucmVzb2x2ZSA9IHJlc29sdmU7XG4gIChwcm9taXNlIGFzIGFueSkucmVqZWN0ID0gcmVqZWN0O1xuICByZXR1cm4gcHJvbWlzZSBhcyBSZXNvbHZhYmxlUHJvbWlzZTxUPjtcbn07XG5cbi8qKlxuICogQHBhcmFtIGZ1bmMgaGFuZGxlciB0YWtpbmcgYXQgbW9zdCBzaW5nbGUgcGFyYW1ldGVyIChldmVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXMgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PlxuICAoKGV2ZW50KSA9PiB7XG4gICAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuYyBhcyBURnVuY3Rpb24sIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uO1xuXG4vKipcbiAqIGJhcmNoZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBhbmQgdGhyb3R0bGVzIHRoZSBjYWxscyB0byBhIHNpbmdsZSBjYWxsIHBlclxuICogYW5pbWF0aW9uIGZyYW1lXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXNUaHJvdHRsZWQgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PiB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIHRocm90dGxlUkFGPFBhcmFtZXRlcnM8VEZ1bmN0aW9uPj4oKChldmVudCkgPT4ge1xuICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZ1bmMsIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uKTtcbn07XG5cbi8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk0NjIzODIvODQxOFxuZXhwb3J0IGNvbnN0IG5Gb3JtYXR0ZXIgPSAobnVtOiBudW1iZXIsIGRpZ2l0czogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc2kgPSBbXG4gICAgeyB2YWx1ZTogMSwgc3ltYm9sOiBcImJcIiB9LFxuICAgIHsgdmFsdWU6IDFlMywgc3ltYm9sOiBcImtcIiB9LFxuICAgIHsgdmFsdWU6IDFlNiwgc3ltYm9sOiBcIk1cIiB9LFxuICAgIHsgdmFsdWU6IDFlOSwgc3ltYm9sOiBcIkdcIiB9LFxuICBdO1xuICBjb25zdCByeCA9IC9cXC4wKyR8KFxcLlswLTldKlsxLTldKTArJC87XG4gIGxldCBpbmRleDtcbiAgZm9yIChpbmRleCA9IHNpLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuICAgIGlmIChudW0gPj0gc2lbaW5kZXhdLnZhbHVlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChcbiAgICAobnVtIC8gc2lbaW5kZXhdLnZhbHVlKS50b0ZpeGVkKGRpZ2l0cykucmVwbGFjZShyeCwgXCIkMVwiKSArIHNpW2luZGV4XS5zeW1ib2xcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWZXJzaW9uID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTE1ldGFFbGVtZW50PignbWV0YVtuYW1lPVwidmVyc2lvblwiXScpPy5jb250ZW50IHx8XG4gICAgREVGQVVMVF9WRVJTSU9OXG4gICk7XG59O1xuXG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2Vtb2ppLmpzXG5leHBvcnQgY29uc3Qgc3VwcG9ydHNFbW9qaSA9ICgpID0+IHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gIGN0eC5maWxsU3R5bGUgPSBcIiNmMDBcIjtcbiAgY3R4LnRleHRCYXNlbGluZSA9IFwidG9wXCI7XG4gIGN0eC5mb250ID0gXCIzMnB4IEFyaWFsXCI7XG4gIC8vIE1vZGVybml6ciB1c2VkIPCfkKgsIGJ1dCBpdCBpcyBzb3J0IG9mIHN1cHBvcnRlZCBvbiBXaW5kb3dzIDcuXG4gIC8vIEx1Y2tpbHkg8J+YgCBpc24ndCBzdXBwb3J0ZWQuXG4gIGN0eC5maWxsVGV4dChcIvCfmIBcIiwgMCwgMCk7XG4gIHJldHVybiBjdHguZ2V0SW1hZ2VEYXRhKG9mZnNldCwgb2Zmc2V0LCAxLCAxKS5kYXRhWzBdICE9PSAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5lYXJlc3RTY3JvbGxhYmxlQ29udGFpbmVyID0gKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbik6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgIH1cbiAgICBjb25zdCB7IG92ZXJmbG93WSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcbiAgICBjb25zdCBoYXNTY3JvbGxhYmxlQ29udGVudCA9IHBhcmVudC5zY3JvbGxIZWlnaHQgPiBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChcbiAgICAgIGhhc1Njcm9sbGFibGVDb250ZW50ICYmXG4gICAgICAob3ZlcmZsb3dZID09PSBcImF1dG9cIiB8fFxuICAgICAgICBvdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgICAgb3ZlcmZsb3dZID09PSBcIm92ZXJsYXlcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBmb2N1c05lYXJlc3RQYXJlbnQgPSAoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC50YWJJbmRleCA+IC0xKSB7XG4gICAgICBwYXJlbnQuZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2ZW50VW5sb2FkID0gKGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyBOT1RFOiBtb2Rlcm4gYnJvd3NlcnMgbm8gbG9uZ2VyIGFsbG93IHNob3dpbmcgYSBjdXN0b20gbWVzc2FnZSBoZXJlXG4gIGV2ZW50LnJldHVyblZhbHVlID0gXCJcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBieXRlc1RvSGV4U3RyaW5nID0gKGJ5dGVzOiBVaW50OEFycmF5KSA9PiB7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKVxuICAgIC5tYXAoKGJ5dGUpID0+IGAwJHtieXRlLnRvU3RyaW5nKDE2KX1gLnNsaWNlKC0yKSlcbiAgICAuam9pbihcIlwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkVGltZXN0YW1wID0gKCkgPT4gKGlzVGVzdEVudigpID8gMSA6IERhdGUubm93KCkpO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGBpZGAgYXR0cmlidXRlLFxuICogb3IgYXJyYXkgb2YgaWRzIChzdHJpbmdzKSwgaW50byBhIE1hcCwga2V5ZCBieSBgaWRgLlxuICovXG5leHBvcnQgY29uc3QgYXJyYXlUb01hcCA9IDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIH0gfCBzdHJpbmc+KFxuICBpdGVtczogcmVhZG9ubHkgVFtdLFxuKSA9PiB7XG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYzogTWFwPHN0cmluZywgVD4sIGVsZW1lbnQpID0+IHtcbiAgICBhY2Muc2V0KHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiID8gZWxlbWVudCA6IGVsZW1lbnQuaWQsIGVsZW1lbnQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIG5ldyBNYXAoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNUZXN0RW52ID0gKCkgPT5cbiAgdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSBcInRlc3RcIjtcblxuZXhwb3J0IGNvbnN0IGlzUHJvZEVudiA9ICgpID0+XG4gIHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XG5cbmV4cG9ydCBjb25zdCB3cmFwRXZlbnQgPSA8VCBleHRlbmRzIEV2ZW50PihuYW1lOiBFVkVOVCwgbmF0aXZlRXZlbnQ6IFQpID0+IHtcbiAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChuYW1lLCB7XG4gICAgZGV0YWlsOiB7XG4gICAgICBuYXRpdmVFdmVudCxcbiAgICB9LFxuICAgIGNhbmNlbGFibGU6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZU9iamVjdCA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIG9iajogVCxcbiAgdXBkYXRlczogUGFydGlhbDxUPixcbik6IFQgPT4ge1xuICBsZXQgZGlkQ2hhbmdlID0gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IGluIHVwZGF0ZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh1cGRhdGVzIGFzIGFueSlba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChvYmogYXMgYW55KVtrZXldID09PSB2YWx1ZSAmJlxuICAgICAgICAvLyBpZiBvYmplY3QsIGFsd2F5cyB1cGRhdGUgYmVjYXVzZSBpdHMgYXR0cnMgY291bGQgaGF2ZSBjaGFuZ2VkXG4gICAgICAgICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkaWRDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlkQ2hhbmdlKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ub2JqLFxuICAgIC4uLnVwZGF0ZXMsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsOiBhbnkpID0+IHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCAodHlwZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlICE9PSBcImZ1bmN0aW9uXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyYW1lID0gKCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCA/IFwidG9wXCIgOiBcImlmcmFtZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcImlmcmFtZVwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcm9taXNlTGlrZSA9IChcbiAgdmFsdWU6IGFueSxcbik6IHZhbHVlIGlzIFByb21pc2U8UmVzb2x1dGlvblR5cGU8dHlwZW9mIHZhbHVlPj4gPT4ge1xuICByZXR1cm4gKFxuICAgICEhdmFsdWUgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcInRoZW5cIiBpbiB2YWx1ZSAmJlxuICAgIFwiY2F0Y2hcIiBpbiB2YWx1ZSAmJlxuICAgIFwiZmluYWxseVwiIGluIHZhbHVlXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVlcnlGb2N1c2FibGVFbGVtZW50cyA9IChjb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXG4gICAgXCJidXR0b24sIGEsIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBkaXZbdGFiaW5kZXhdLCBsYWJlbFt0YWJpbmRleF1cIixcbiAgKTtcblxuICByZXR1cm4gZm9jdXNhYmxlRWxlbWVudHNcbiAgICA/IEFycmF5LmZyb20oZm9jdXNhYmxlRWxlbWVudHMpLmZpbHRlcihcbiAgICAgICAgKGVsZW1lbnQpID0+XG4gICAgICAgICAgZWxlbWVudC50YWJJbmRleCA+IC0xICYmICEoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5kaXNhYmxlZCxcbiAgICAgIClcbiAgICA6IFtdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../utils.ts\n");
|
|
3413
3413
|
|
|
3414
3414
|
/***/ }),
|
|
3415
3415
|
|