@dwelle/excalidraw 0.3.65 → 0.3.66

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.
@@ -1793,7 +1793,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1793
1793
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1794
1794
 
1795
1795
  "use strict";
1796
- 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;\r\nconst trackEvent = typeof process !== \"undefined\" &&\r\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\\\"}\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.64\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.REACT_APP_GOOGLE_ANALYTICS_ID) &&\r\n typeof window !== \"undefined\" &&\r\n window.gtag\r\n ? (category, action, label, value) => {\r\n try {\r\n window.gtag(\"event\", action, {\r\n event_category: category,\r\n event_label: label,\r\n value,\r\n });\r\n }\r\n catch (error) {\r\n console.error(\"error logging to ga\", error);\r\n }\r\n }\r\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\\\"}\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.64\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _b === void 0 ? void 0 : _b.JEST_WORKER_ID)\r\n ? (category, action, label, value) => { }\r\n : (category, action, label, value) => {\r\n // Uncomment the next line to track locally\r\n // console.log(\"Track Event\", { category, action, label, value });\r\n };\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQ3JCLE9BQU8sT0FBTyxLQUFLLFdBQVc7S0FDOUIsaXpCQUFXLDBDQUFFLDZCQUE2QjtJQUMxQyxPQUFPLE1BQU0sS0FBSyxXQUFXO0lBQzdCLE1BQU0sQ0FBQyxJQUFJO0lBQ1QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQ25FLElBQUk7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQzNCLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsS0FBSzthQUNOLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLEtBQUksaXpCQUFXLDBDQUFFLGNBQWM7UUFDL0QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFLEdBQUUsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxLQUFjLEVBQUUsS0FBYyxFQUFFLEVBQUU7WUFDbkUsMkNBQTJDO1lBQzNDLGtFQUFrRTtRQUNwRSxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vYW5hbHl0aWNzLnRzPzVmMGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRyYWNrRXZlbnQgPVxuICB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBwcm9jZXNzLmVudj8uUkVBQ1RfQVBQX0dPT0dMRV9BTkFMWVRJQ1NfSUQgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICB3aW5kb3cuZ3RhZ1xuICAgID8gKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3aW5kb3cuZ3RhZyhcImV2ZW50XCIsIGFjdGlvbiwge1xuICAgICAgICAgICAgZXZlbnRfY2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgICAgICAgICAgZXZlbnRfbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIGxvZ2dpbmcgdG8gZ2FcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgOiB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudj8uSkVTVF9XT1JLRVJfSURcbiAgICA/IChjYXRlZ29yeTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHZhbHVlPzogbnVtYmVyKSA9PiB7fVxuICAgIDogKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gdHJhY2sgbG9jYWxseVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlRyYWNrIEV2ZW50XCIsIHsgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwsIHZhbHVlIH0pO1xuICAgICAgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
1796
+ 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;\r\nconst trackEvent = typeof process !== \"undefined\" &&\r\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\\\"}\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.65\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.REACT_APP_GOOGLE_ANALYTICS_ID) &&\r\n typeof window !== \"undefined\" &&\r\n window.gtag\r\n ? (category, action, label, value) => {\r\n try {\r\n window.gtag(\"event\", action, {\r\n event_category: category,\r\n event_label: label,\r\n value,\r\n });\r\n }\r\n catch (error) {\r\n console.error(\"error logging to ga\", error);\r\n }\r\n }\r\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\\\"}\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.65\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _b === void 0 ? void 0 : _b.JEST_WORKER_ID)\r\n ? (category, action, label, value) => { }\r\n : (category, action, label, value) => {\r\n // Uncomment the next line to track locally\r\n // console.log(\"Track Event\", { category, action, label, value });\r\n };\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQ3JCLE9BQU8sT0FBTyxLQUFLLFdBQVc7S0FDOUIsaXpCQUFXLDBDQUFFLDZCQUE2QjtJQUMxQyxPQUFPLE1BQU0sS0FBSyxXQUFXO0lBQzdCLE1BQU0sQ0FBQyxJQUFJO0lBQ1QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQ25FLElBQUk7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQzNCLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsS0FBSzthQUNOLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLEtBQUksaXpCQUFXLDBDQUFFLGNBQWM7UUFDL0QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFLEdBQUUsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxLQUFjLEVBQUUsS0FBYyxFQUFFLEVBQUU7WUFDbkUsMkNBQTJDO1lBQzNDLGtFQUFrRTtRQUNwRSxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vYW5hbHl0aWNzLnRzPzVmMGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRyYWNrRXZlbnQgPVxuICB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBwcm9jZXNzLmVudj8uUkVBQ1RfQVBQX0dPT0dMRV9BTkFMWVRJQ1NfSUQgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICB3aW5kb3cuZ3RhZ1xuICAgID8gKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3aW5kb3cuZ3RhZyhcImV2ZW50XCIsIGFjdGlvbiwge1xuICAgICAgICAgICAgZXZlbnRfY2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgICAgICAgICAgZXZlbnRfbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIGxvZ2dpbmcgdG8gZ2FcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgOiB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudj8uSkVTVF9XT1JLRVJfSURcbiAgICA/IChjYXRlZ29yeTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHZhbHVlPzogbnVtYmVyKSA9PiB7fVxuICAgIDogKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gdHJhY2sgbG9jYWxseVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlRyYWNrIEV2ZW50XCIsIHsgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwsIHZhbHVlIH0pO1xuICAgICAgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
1797
1797
 
1798
1798
  /***/ }),
1799
1799
 
@@ -2167,7 +2167,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2167
2167
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2168
2168
 
2169
2169
  "use strict";
2170
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ \"../../../node_modules/lodash/lodash.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\n/* harmony import */ var _ConfirmDialog__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ConfirmDialog */ \"../../components/ConfirmDialog.tsx\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _LibraryUnit__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./LibraryUnit */ \"../../components/LibraryUnit.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _ToolButton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _Tooltip__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Tooltip */ \"../../components/Tooltip.tsx\");\n/* harmony import */ var _LibraryMenuItems_scss__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./LibraryMenuItems.scss */ \"../../components/LibraryMenuItems.scss\");\n/* harmony import */ var _LibraryMenuItems_scss__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_LibraryMenuItems_scss__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _Spinner__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./Spinner */ \"../../components/Spinner.tsx\");\n/* harmony import */ var _data_filesystem__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../data/filesystem */ \"../../data/filesystem.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst LibraryMenuItems = ({ isLoading, libraryItems, onRemoveFromLibrary, onAddToLibrary, onInsertLibraryItems, pendingElements, theme, setAppState, libraryReturnUrl, library, files, id, selectedItems, onSelectItems, onPublish, resetLibrary, }) => {\r\n const renderRemoveLibAlert = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {\r\n const content = selectedItems.length\r\n ? (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"alerts.removeItemsFromsLibrary\", { count: selectedItems.length })\r\n : (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"alerts.resetLibrary\");\r\n const title = selectedItems.length\r\n ? (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"confirmDialog.removeItemsFromLib\")\r\n : (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"confirmDialog.resetLibrary\");\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ConfirmDialog__WEBPACK_IMPORTED_MODULE_7__[\"default\"], Object.assign({ onConfirm: () => {\r\n if (selectedItems.length) {\r\n onRemoveFromLibrary();\r\n }\r\n else {\r\n resetLibrary();\r\n }\r\n setShowRemoveLibAlert(false);\r\n }, onCancel: () => {\r\n setShowRemoveLibAlert(false);\r\n }, title: title }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"p\", { children: content }, void 0) }), void 0));\r\n }, [selectedItems, onRemoveFromLibrary, resetLibrary]);\r\n const [showRemoveLibAlert, setShowRemoveLibAlert] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(false);\r\n const isMobile = (0,_App__WEBPACK_IMPORTED_MODULE_6__.useDeviceType)().isMobile;\r\n const renderLibraryActions = () => {\r\n const itemsSelected = !!selectedItems.length;\r\n const items = itemsSelected\r\n ? libraryItems.filter((item) => selectedItems.includes(item.id))\r\n : libraryItems;\r\n const resetLabel = itemsSelected\r\n ? (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.remove\")\r\n : (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.resetLibrary\");\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"library-actions\" }, { children: [(!itemsSelected || !isMobile) && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_11__.ToolButton, { type: \"button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.load\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.load\"), icon: _icons__WEBPACK_IMPORTED_MODULE_8__.load, onClick: () => __awaiter(void 0, void 0, void 0, function* () {\r\n try {\r\n yield (0,_data_filesystem__WEBPACK_IMPORTED_MODULE_16__.fileOpen)({\r\n description: \"Excalidraw library files\",\r\n // ToDo: Be over-permissive until https://bugs.webkit.org/show_bug.cgi?id=34442\r\n // gets resolved. Else, iOS users cannot open `.excalidraw` files.\r\n /*\r\n extensions: [\".json\", \".excalidrawlib\"],\r\n */\r\n });\r\n }\r\n catch (error) {\r\n if ((error === null || error === void 0 ? void 0 : error.name) === \"AbortError\") {\r\n console.warn(error);\r\n return;\r\n }\r\n setAppState({ errorMessage: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"errors.importLibraryError\") });\r\n }\r\n }), className: \"library-actions--load\" }, \"import\")), !!items.length && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_11__.ToolButton, Object.assign({ type: \"button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.export\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.export\"), icon: _icons__WEBPACK_IMPORTED_MODULE_8__.exportToFileIcon, onClick: () => __awaiter(void 0, void 0, void 0, function* () {\r\n const libraryItems = itemsSelected\r\n ? items\r\n : yield library.getLatestLibrary();\r\n (0,_data_json__WEBPACK_IMPORTED_MODULE_3__.saveLibraryAsJSON)(libraryItems)\r\n .catch(_utils__WEBPACK_IMPORTED_MODULE_5__.muteFSAbortError)\r\n .catch((error) => {\r\n setAppState({ errorMessage: error.message });\r\n });\r\n }), className: \"library-actions--export\" }, { children: selectedItems.length > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", Object.assign({ className: \"library-actions-counter\" }, { children: selectedItems.length }), void 0)) }), \"export\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_11__.ToolButton, Object.assign({ type: \"button\", title: resetLabel, \"aria-label\": resetLabel, icon: _icons__WEBPACK_IMPORTED_MODULE_8__.trash, onClick: () => setShowRemoveLibAlert(true), className: \"library-actions--remove\" }, { children: selectedItems.length > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", Object.assign({ className: \"library-actions-counter\" }, { children: selectedItems.length }), void 0)) }), \"reset\")] }, void 0)), itemsSelected && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Tooltip__WEBPACK_IMPORTED_MODULE_12__.Tooltip, Object.assign({ label: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"hints.publishLibrary\") }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_ToolButton__WEBPACK_IMPORTED_MODULE_11__.ToolButton, Object.assign({ type: \"button\", \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.publishLibrary\"), label: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.publishLibrary\"), icon: _icons__WEBPACK_IMPORTED_MODULE_8__.publishIcon, className: \"library-actions--publish\", onClick: onPublish }, { children: [!isMobile && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"label\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.publishLibrary\") }, void 0), selectedItems.length > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", Object.assign({ className: \"library-actions-counter\" }, { children: selectedItems.length }), void 0))] }), void 0) }), void 0))] }), void 0));\r\n };\r\n const CELLS_PER_ROW = isMobile ? 4 : 6;\r\n const referrer = libraryReturnUrl || window.location.origin + window.location.pathname;\r\n const [lastSelectedItem, setLastSelectedItem] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(null);\r\n const onItemSelectToggle = (id, event) => {\r\n const shouldSelect = !selectedItems.includes(id);\r\n const orderedItems = [...unpublishedItems, ...publishedItems];\r\n if (shouldSelect) {\r\n if (event.shiftKey && lastSelectedItem) {\r\n const rangeStart = orderedItems.findIndex((item) => item.id === lastSelectedItem);\r\n const rangeEnd = orderedItems.findIndex((item) => item.id === id);\r\n if (rangeStart === -1 || rangeEnd === -1) {\r\n onSelectItems([...selectedItems, id]);\r\n return;\r\n }\r\n const selectedItemsMap = (0,_utils__WEBPACK_IMPORTED_MODULE_5__.arrayToMap)(selectedItems);\r\n const nextSelectedIds = orderedItems.reduce((acc, item, idx) => {\r\n if ((idx >= rangeStart && idx <= rangeEnd) ||\r\n selectedItemsMap.has(item.id)) {\r\n acc.push(item.id);\r\n }\r\n return acc;\r\n }, []);\r\n onSelectItems(nextSelectedIds);\r\n }\r\n else {\r\n onSelectItems([...selectedItems, id]);\r\n }\r\n setLastSelectedItem(id);\r\n }\r\n else {\r\n setLastSelectedItem(null);\r\n onSelectItems(selectedItems.filter((_id) => _id !== id));\r\n }\r\n };\r\n const getInsertedElements = (id) => {\r\n let targetElements;\r\n if (selectedItems.includes(id)) {\r\n targetElements = libraryItems.filter((item) => selectedItems.includes(item.id));\r\n }\r\n else {\r\n targetElements = libraryItems.filter((item) => item.id === id);\r\n }\r\n return targetElements;\r\n };\r\n const createLibraryItemCompo = (params) => {\r\n var _a, _b, _c, _d, _e;\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_10__[\"default\"].Col, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryUnit__WEBPACK_IMPORTED_MODULE_9__.LibraryUnit, { elements: (_a = params.item) === null || _a === void 0 ? void 0 : _a.elements, files: files, isPending: !((_b = params.item) === null || _b === void 0 ? void 0 : _b.id) && !!((_c = params.item) === null || _c === void 0 ? void 0 : _c.elements), onClick: params.onClick || (() => { }), id: ((_d = params.item) === null || _d === void 0 ? void 0 : _d.id) || null, selected: !!((_e = params.item) === null || _e === void 0 ? void 0 : _e.id) && selectedItems.includes(params.item.id), onToggle: onItemSelectToggle, onDrag: (id, event) => {\r\n event.dataTransfer.setData(_constants__WEBPACK_IMPORTED_MODULE_14__.MIME_TYPES.excalidrawlib, (0,_data_json__WEBPACK_IMPORTED_MODULE_3__.serializeLibraryAsJSON)(getInsertedElements(id)));\r\n } }, void 0) }, params.key));\r\n };\r\n const renderLibrarySection = (items) => {\r\n const _items = items.map((item) => {\r\n if (item.id) {\r\n return createLibraryItemCompo({\r\n item,\r\n onClick: () => onInsertLibraryItems(getInsertedElements(item.id)),\r\n key: item.id,\r\n });\r\n }\r\n return createLibraryItemCompo({\r\n key: \"__pending__item__\",\r\n item,\r\n onClick: () => onAddToLibrary(pendingElements),\r\n });\r\n });\r\n // ensure we render all empty cells if no items are present\r\n let rows = (0,lodash__WEBPACK_IMPORTED_MODULE_1__.chunk)(_items, CELLS_PER_ROW);\r\n if (!rows.length) {\r\n rows = [[]];\r\n }\r\n return rows.map((rowItems, index, rows) => {\r\n if (index === rows.length - 1) {\r\n // pad row with empty cells\r\n rowItems = rowItems.concat(new Array(CELLS_PER_ROW - rowItems.length)\r\n .fill(null)\r\n .map((_, index) => {\r\n return createLibraryItemCompo({\r\n key: `empty_${index}`,\r\n item: null,\r\n });\r\n }));\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_10__[\"default\"].Row, Object.assign({ align: \"center\", gap: 1 }, { children: rowItems }), index));\r\n });\r\n };\r\n const unpublishedItems = libraryItems.filter((item) => item.status !== \"published\");\r\n const publishedItems = libraryItems.filter((item) => item.status === \"published\");\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"library-menu-items-container\" }, { children: [showRemoveLibAlert && renderRemoveLibAlert(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"layer-ui__library-header\" }, { children: [renderLibraryActions(), isLoading ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Spinner__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {}, void 0)) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"a\", Object.assign({ href: `${\"https://libraries.excalidraw.com\"}?target=${window.name || \"_blank\"}&referrer=${referrer}&useHash=true&token=${id}&theme=${theme}&version=${_constants__WEBPACK_IMPORTED_MODULE_14__.VERSIONS.excalidrawLibrary}`, target: \"_excalidraw_libraries\" }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"labels.libraries\") }), void 0))] }), \"library-header\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_10__[\"default\"].Col, Object.assign({ className: \"library-menu-items-container__items\", align: \"start\", gap: 1 }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"separator\" }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"labels.personalLib\") }), void 0), renderLibrarySection([\r\n // append pending library item\r\n ...(pendingElements.length\r\n ? [{ id: null, elements: pendingElements }]\r\n : []),\r\n ...unpublishedItems,\r\n ])] }, void 0), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"separator\" }, { children: [(0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"labels.excalidrawLib\"), \" \"] }), void 0), renderLibrarySection(publishedItems)] }, void 0)] }), void 0)] }), void 0));\r\n};\r\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LibraryMenuItems);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9MaWJyYXJ5TWVudUl0ZW1zLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQStCO0FBQ3NCO0FBQ29CO0FBRzdDO0FBUTRCO0FBQ2xCO0FBQ007QUFDeUI7QUFDekI7QUFDaEI7QUFDYztBQUNOO0FBRUg7QUFDbUI7QUFDcEI7QUFDYztBQUU5QyxNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFDeEIsU0FBUyxFQUNULFlBQVksRUFDWixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsS0FBSyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLEtBQUssRUFDTCxFQUFFLEVBQ0YsYUFBYSxFQUNiLGFBQWEsRUFDYixTQUFTLEVBQ1QsWUFBWSxHQWtCYixFQUFFLEVBQUU7SUFDSCxNQUFNLG9CQUFvQixHQUFHLGtEQUFXLENBQUMsR0FBRyxFQUFFO1FBQzVDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNO1lBQ2xDLENBQUMsQ0FBQyx3Q0FBQyxDQUFDLGdDQUFnQyxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0RSxDQUFDLENBQUMsd0NBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxNQUFNO1lBQ2hDLENBQUMsQ0FBQyx3Q0FBQyxDQUFDLGtDQUFrQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyx3Q0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDcEMsT0FBTyxDQUNMLHVEQUFDLHNEQUFhLGtCQUNaLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO29CQUN4QixtQkFBbUIsRUFBRSxDQUFDO2lCQUN2QjtxQkFBTTtvQkFDTCxZQUFZLEVBQUUsQ0FBQztpQkFDaEI7Z0JBQ0QscUJBQXFCLENB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QUFJLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDO29DQUMzQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUNQLEdBQUcsZ0JBQWdCOzZCQUNwQixDQUFDLFlBQ0QsRUFFSCw4SEFDRSwrRUFBSyxTQUFTLEVBQUMsV0FBVyxpQkFBRSx3Q0FBQyxDQUFDLHNCQUFzQixDQUFDLGtCQUFRLEVBRTVELG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxZQUNwQyxhQUNPLGFBQ1IsQ0FDUCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsaUVBQWUsZ0JBQWdCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9MaWJyYXJ5TWVudUl0ZW1zLnRzeD9mNzQyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNodW5rIH0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgc2F2ZUxpYnJhcnlBc0pTT04sIHNlcmlhbGl6ZUxpYnJhcnlBc0pTT04gfSBmcm9tIFwiLi4vZGF0YS9qc29uXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwiLi4vZGF0YS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBFeGNhbGlkcmF3RWxlbWVudCwgTm9uRGVsZXRlZCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyB0IH0gZnJvbSBcIi4uL2kxOG5cIjtcbmltcG9ydCB7XG4gIEFwcFN0YXRlLFxuICBCaW5hcnlGaWxlcyxcbiAgRXhjYWxpZHJhd1Byb3BzLFxuICBMaWJyYXJ5SXRlbSxcbiAgTGlicmFyeUl0ZW1zLFxufSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IGFycmF5VG9NYXAsIG11dGVGU0Fib3J0RXJyb3IgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IHVzZURldmljZVR5cGUgfSBmcm9tIFwiLi9BcHBcIjtcbmltcG9ydCBDb25maXJtRGlhbG9nIGZyb20gXCIuL0NvbmZpcm1EaWFsb2dcIjtcbmltcG9ydCB7IGV4cG9ydFRvRmlsZUljb24sIGxvYWQsIHB1Ymxpc2hJY29uLCB0cmFzaCB9IGZyb20gXCIuL2ljb25zXCI7XG5pbXBvcnQgeyBMaWJyYXJ5VW5pdCB9IGZyb20gXCIuL0xpYnJhcnlVbml0XCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIi4vU3RhY2tcIjtcbmltcG9ydCB7IFRvb2xCdXR0b24gfSBmcm9tIFwiLi9Ub29sQnV0dG9uXCI7XG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSBcIi4vVG9vbHRpcFwiO1xuXG5pbXBvcnQgXCIuL0xpYnJhcnlNZW51SXRlbXMuc2Nzc1wiO1xuaW1wb3J0IHsgTUlNRV9UWVBFUywgVkVSU0lPTlMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgU3Bpbm5lciBmcm9tIFwiLi9TcGlubmVyXCI7XG5pbXBvcnQgeyBmaWxlT3BlbiB9IGZyb20gXCIuLi9kYXRhL2ZpbGVzeXN0ZW1cIjtcblxuY29uc3QgTGlicmFyeU1lbnVJdGVtcyA9ICh7XG4gIGlzTG9hZGluZyxcbiAgbGlicmFyeUl0ZW1zLFxuICBvblJlbW92ZUZyb21MaWJyYXJ5LFxuICBvbkFkZFRvTGlicmFyeSxcbiAgb25JbnNlcnRMaWJyYXJ5SXRlbXMsXG4gIHBlbmRpbmdFbGVtZW50cyxcbiAgdGhlbWUsXG4gIHNldEFwcFN0YXRlLFxuICBsaWJyYXJ5UmV0dXJuVXJsLFxuICBsaWJyYXJ5LFxuICBmaWxlcyxcbiAgaWQsXG4gIHNlbGVjdGVkSXRlbXMsXG4gIG9uU2VsZWN0SXRlbXMsXG4gIG9uUHVibGlzaCxcbiAgcmVzZXRMaWJyYXJ5LFxufToge1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIGxpYnJhcnlJdGVtczogTGlicmFyeUl0ZW1zO1xuICBwZW5kaW5nRWxlbWVudHM6IExpYnJhcnlJdGVtW1wiZWxlbWVudHNcIl07XG4gIG9uUmVtb3ZlRnJvbUxpYnJhcnk6ICgpID0+IHZvaWQ7XG4gIG9uSW5zZXJ0TGlicmFyeUl0ZW1zOiAobGlicmFyeUl0ZW1zOiBMaWJyYXJ5SXRlbXMpID0+IHZvaWQ7XG4gIG9uQWRkVG9MaWJyYXJ5OiAoZWxlbWVudHM6IExpYnJhcnlJdGVtW1wiZWxlbWVudHNcIl0pID0+IHZvaWQ7XG4gIHRoZW1lOiBBcHBTdGF0ZVtcInRoZW1lXCJdO1xuICBmaWxlczogQmluYXJ5RmlsZXM7XG4gIHNldEFwcFN0YXRlOiBSZWFjdC5Db21wb25lbnQ8YW55LCBBcHBTdGF0ZT5bXCJzZXRTdGF0ZVwiXTtcbiAgbGlicmFyeVJldHVyblVybDogRXhjYWxpZHJhd1Byb3BzW1wibGlicmFyeVJldHVyblVybFwiXTtcbiAgbGlicmFyeTogTGlicmFyeTtcbiAgaWQ6IHN0cmluZztcbiAgc2VsZWN0ZWRJdGVtczogTGlicmFyeUl0ZW1bXCJpZFwiXVtdO1xuICBvblNlbGVjdEl0ZW1zOiAoaWQ6IExpYnJhcnlJdGVtW1wiaWRcIl1bXSkgPT4gdm9pZDtcbiAgb25QdWJsaXNoOiAoKSA9PiB2b2lkO1xuICByZXNldExpYnJhcnk6ICgpID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IHJlbmRlclJlbW92ZUxpYkFsZXJ0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aFxuICAgICAgPyB0KFwiYWxlcnRzLnJlbW92ZUl0ZW1zRnJvbXNMaWJyYXJ5XCIsIHsgY291bnQ6IHNlbGVjdGVkSXRlbXMubGVuZ3RoIH0pXG4gICAgICA6IHQoXCJhbGVydHMucmVzZXRMaWJyYXJ5XCIpO1xuICAgIGNvbnN0IHRpdGxlID0gc2VsZWN0ZWRJdGVtcy5sZW5ndGhcbiAgICAgID8gdChcImNvbmZpcm1EaWFsb2cucmVtb3ZlSXRlbXNGcm9tTGliXCIpXG4gICAgICA6IHQoXCJjb25maXJtRGlhbG9nLnJlc2V0TGlicmFyeVwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPENvbmZpcm1EaWFsb2dcbiAgICAgICAgb25Db25maXJtPXsoKSA9PiB7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBvblJlbW92ZUZyb21MaWJyYXJ5KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc2V0TGlicmFyeSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRTaG93UmVtb3ZlTGliQWxlcnQoZmFsc2UpO1xuICAgICAgICB9fVxuICAgICAgICBvbkNhbmNlbD17KCkgPT4ge1xuICAgICAgICAgIHNldFNob3dSZW1vdmVMaWJBbGVydChmYWxzZSk7XG4gICAgICAgIH19XG4gICAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgID5cbiAgICAgICAgPHA+e2NvbnRlbnR9PC9wPlxuICAgICAgPC9Db25maXJtRGlhbG9nPlxuICAgICk7XG4gIH0sIFtzZWxlY3RlZEl0ZW1zLCBvblJlbW92ZUZyb21MaWJyYXJ5LCByZXNldExpYnJhcnldKTtcblxuICBjb25zdCBbc2hvd1JlbW92ZUxpYkFsZXJ0LCBzZXRTaG93UmVtb3ZlTGliQWxlcnRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGlzTW9iaWxlID0gdXNlRGV2aWNlVHlwZSgpLmlzTW9iaWxlO1xuXG4gIGNvbnN0IHJlbmRlckxpYnJhcnlBY3Rpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW1zU2VsZWN0ZWQgPSAhIXNlbGVjdGVkSXRlbXMubGVuZ3RoO1xuICAgIGNvbnN0IGl0ZW1zID0gaXRlbXNTZWxlY3RlZFxuICAgICAgPyBsaWJyYXJ5SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGl0ZW0uaWQpKVxuICAgICAgOiBsaWJyYXJ5SXRlbXM7XG4gICAgY29uc3QgcmVzZXRMYWJlbCA9IGl0ZW1zU2VsZWN0ZWRcbiAgICAgID8gdChcImJ1dHRvbnMucmVtb3ZlXCIpXG4gICAgICA6IHQoXCJidXR0b25zLnJlc2V0TGlicmFyeVwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJsaWJyYXJ5LWFjdGlvbnNcIj5cbiAgICAgICAgeyghaXRlbXNTZWxlY3RlZCB8fCAhaXNNb2JpbGUpICYmIChcbiAgICAgICAgICA8VG9vbEJ1dHRvblxuICAgICAgICAgICAga2V5PVwiaW1wb3J0XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGl0bGU9e3QoXCJidXR0b25zLmxvYWRcIil9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0KFwiYnV0dG9ucy5sb2FkXCIpfVxuICAgICAgICAgICAgaWNvbj17bG9hZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmaWxlT3Blbih7XG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJFeGNhbGlkcmF3IGxpYnJhcnkgZmlsZXNcIixcbiAgICAgICAgICAgICAgICAgIC8vIFRvRG86IEJlIG92ZXItcGVybWlzc2l2ZSB1bnRpbCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0NDJcbiAgICAgICAgICAgICAgICAgIC8vIGdldHMgcmVzb2x2ZWQuIEVsc2UsIGlPUyB1c2VycyBjYW5ub3Qgb3BlbiBgLmV4Y2FsaWRyYXdgIGZpbGVzLlxuICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnM6IFtcIi5qc29uXCIsIFwiLmV4Y2FsaWRyYXdsaWJcIl0sXG4gICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yPy5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0QXBwU3RhdGUoeyBlcnJvck1lc3NhZ2U6IHQoXCJlcnJvcnMuaW1wb3J0TGlicmFyeUVycm9yXCIpIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibGlicmFyeS1hY3Rpb25zLS1sb2FkXCJcbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7ISFpdGVtcy5sZW5ndGggJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8VG9vbEJ1dHRvblxuICAgICAgICAgICAgICBrZXk9XCJleHBvcnRcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgdGl0bGU9e3QoXCJidXR0b25zLmV4cG9ydFwiKX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMuZXhwb3J0XCIpfVxuICAgICAgICAgICAgICBpY29uPXtleHBvcnRUb0ZpbGVJY29ufVxuICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlicmFyeUl0ZW1zID0gaXRlbXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgPyBpdGVtc1xuICAgICAgICAgICAgICAgICAgOiBhd2FpdCBsaWJyYXJ5LmdldExhdGVzdExpYnJhcnkoKTtcbiAgICAgICAgICAgICAgICBzYXZlTGlicmFyeUFzSlNPTihsaWJyYXJ5SXRlbXMpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2gobXV0ZUZTQWJvcnRFcnJvcilcbiAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXBwU3RhdGUoeyBlcnJvck1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibGlicmFyeS1hY3Rpb25zLS1leHBvcnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsaWJyYXJ5LWFjdGlvbnMtY291bnRlclwiPlxuICAgICAgICAgICAgICAgICAge3NlbGVjdGVkSXRlbXMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvVG9vbEJ1dHRvbj5cbiAgICAgICAgICAgIDxUb29sQnV0dG9uXG4gICAgICAgICAgICAgIGtleT1cInJlc2V0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHRpdGxlPXtyZXNldExhYmVsfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtyZXNldExhYmVsfVxuICAgICAgICAgICAgICBpY29uPXt0cmFzaH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd1JlbW92ZUxpYkFsZXJ0KHRydWUpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJsaWJyYXJ5LWFjdGlvbnMtLXJlbW92ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxpYnJhcnktYWN0aW9ucy1jb3VudGVyXCI+XG4gICAgICAgICAgICAgICAgICB7c2VsZWN0ZWRJdGVtcy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Ub29sQnV0dG9uPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7aXRlbXNTZWxlY3RlZCAmJiAoXG4gICAgICAgICAgPFRvb2x0aXAgbGFiZWw9e3QoXCJoaW50cy5wdWJsaXNoTGlicmFyeVwiKX0+XG4gICAgICAgICAgICA8VG9vbEJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMucHVibGlzaExpYnJhcnlcIil9XG4gICAgICAgICAgICAgIGxhYmVsPXt0KFwiYnV0dG9ucy5wdWJsaXNoTGlicmFyeVwiKX1cbiAgICAgICAgICAgICAgaWNvbj17cHVibGlzaEljb259XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImxpYnJhcnktYWN0aW9ucy0tcHVibGlzaFwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e29uUHVibGlzaH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyFpc01vYmlsZSAmJiA8bGFiZWw+e3QoXCJidXR0b25zLnB1Ymxpc2hMaWJyYXJ5XCIpfTwvbGFiZWw+fVxuICAgICAgICAgICAgICB7c2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsaWJyYXJ5LWFjdGlvbnMtY291bnRlclwiPlxuICAgICAgICAgICAgICAgICAge3NlbGVjdGVkSXRlbXMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvVG9vbEJ1dHRvbj5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IENFTExTX1BFUl9ST1cgPSBpc01vYmlsZSA/IDQgOiA2O1xuXG4gIGNvbnN0IHJlZmVycmVyID1cbiAgICBsaWJyYXJ5UmV0dXJuVXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG5cbiAgY29uc3QgW2xhc3RTZWxlY3RlZEl0ZW0sIHNldExhc3RTZWxlY3RlZEl0ZW1dID0gdXNlU3RhdGU8XG4gICAgTGlicmFyeUl0ZW1bXCJpZFwiXSB8IG51bGxcbiAgPihudWxsKTtcblxuICBjb25zdCBvbkl0ZW1TZWxlY3RUb2dnbGUgPSAoXG4gICAgaWQ6IExpYnJhcnlJdGVtW1wiaWRcIl0sXG4gICAgZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQsXG4gICkgPT4ge1xuICAgIGNvbnN0IHNob3VsZFNlbGVjdCA9ICFzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGlkKTtcblxuICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IFsuLi51bnB1Ymxpc2hlZEl0ZW1zLCAuLi5wdWJsaXNoZWRJdGVtc107XG5cbiAgICBpZiAoc2hvdWxkU2VsZWN0KSB7XG4gICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgbGFzdFNlbGVjdGVkSXRlbSkge1xuICAgICAgICBjb25zdCByYW5nZVN0YXJ0ID0gb3JkZXJlZEl0ZW1zLmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbGFzdFNlbGVjdGVkSXRlbSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmFuZ2VFbmQgPSBvcmRlcmVkSXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSBpZCk7XG5cbiAgICAgICAgaWYgKHJhbmdlU3RhcnQgPT09IC0xIHx8IHJhbmdlRW5kID09PSAtMSkge1xuICAgICAgICAgIG9uU2VsZWN0SXRlbXMoWy4uLnNlbGVjdGVkSXRlbXMsIGlkXSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtc01hcCA9IGFycmF5VG9NYXAoc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgIGNvbnN0IG5leHRTZWxlY3RlZElkcyA9IG9yZGVyZWRJdGVtcy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYzogTGlicmFyeUl0ZW1bXCJpZFwiXVtdLCBpdGVtLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKGlkeCA+PSByYW5nZVN0YXJ0ICYmIGlkeCA8PSByYW5nZUVuZCkgfHxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtc01hcC5oYXMoaXRlbS5pZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBhY2MucHVzaChpdGVtLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXSxcbiAgICAgICAgKTtcblxuICAgICAgICBvblNlbGVjdEl0ZW1zKG5leHRTZWxlY3RlZElkcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblNlbGVjdEl0ZW1zKFsuLi5zZWxlY3RlZEl0ZW1zLCBpZF0pO1xuICAgICAgfVxuICAgICAgc2V0TGFzdFNlbGVjdGVkSXRlbShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldExhc3RTZWxlY3RlZEl0ZW0obnVsbCk7XG4gICAgICBvblNlbGVjdEl0ZW1zKHNlbGVjdGVkSXRlbXMuZmlsdGVyKChfaWQpID0+IF9pZCAhPT0gaWQpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0SW5zZXJ0ZWRFbGVtZW50cyA9IChpZDogc3RyaW5nKSA9PiB7XG4gICAgbGV0IHRhcmdldEVsZW1lbnRzO1xuICAgIGlmIChzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGlkKSkge1xuICAgICAgdGFyZ2V0RWxlbWVudHMgPSBsaWJyYXJ5SXRlbXMuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICBzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGl0ZW0uaWQpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0RWxlbWVudHMgPSBsaWJyYXJ5SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlkID09PSBpZCk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRFbGVtZW50cztcbiAgfTtcblxuICBjb25zdCBjcmVhdGVMaWJyYXJ5SXRlbUNvbXBvID0gKHBhcmFtczoge1xuICAgIGl0ZW06XG4gICAgICB8IExpYnJhcnlJdGVtXG4gICAgICB8IC8qIHBlbmRpbmcgbGlicmFyeSBpdGVtICovIHtcbiAgICAgICAgICBpZDogbnVsbDtcbiAgICAgICAgICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZDxFeGNhbGlkcmF3RWxlbWVudD5bXTtcbiAgICAgICAgfVxuICAgICAgfCBudWxsO1xuICAgIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xuICAgIGtleTogc3RyaW5nO1xuICB9KSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdGFjay5Db2wga2V5PXtwYXJhbXMua2V5fT5cbiAgICAgICAgPExpYnJhcnlVbml0XG4gICAgICAgICAgZWxlbWVudHM9e3BhcmFtcy5pdGVtPy5lbGVtZW50c31cbiAgICAgICAgICBmaWxlcz17ZmlsZXN9XG4gICAgICAgICAgaXNQZW5kaW5nPXshcGFyYW1zLml0ZW0/LmlkICYmICEhcGFyYW1zLml0ZW0/LmVsZW1lbnRzfVxuICAgICAgICAgIG9uQ2xpY2s9e3BhcmFtcy5vbkNsaWNrIHx8ICgoKSA9PiB7fSl9XG4gICAgICAgICAgaWQ9e3BhcmFtcy5pdGVtPy5pZCB8fCBudWxsfVxuICAgICAgICAgIHNlbGVjdGVkPXshIXBhcmFtcy5pdGVtPy5pZCAmJiBzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKHBhcmFtcy5pdGVtLmlkKX1cbiAgICAgICAgICBvblRvZ2dsZT17b25JdGVtU2VsZWN0VG9nZ2xlfVxuICAgICAgICAgIG9uRHJhZz17KGlkLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoXG4gICAgICAgICAgICAgIE1JTUVfVFlQRVMuZXhjYWxpZHJhd2xpYixcbiAgICAgICAgICAgICAgc2VyaWFsaXplTGlicmFyeUFzSlNPTihnZXRJbnNlcnRlZEVsZW1lbnRzKGlkKSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L1N0YWNrLkNvbD5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckxpYnJhcnlTZWN0aW9uID0gKFxuICAgIGl0ZW1zOiAoXG4gICAgICB8IExpYnJhcnlJdGVtXG4gICAgICB8IC8qIHBlbmRpbmcgbGlicmFyeSBpdGVtICovIHtcbiAgICAgICAgICBpZDogbnVsbDtcbiAgICAgICAgICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZDxFeGNhbGlkcmF3RWxlbWVudD5bXTtcbiAgICAgICAgfVxuICAgIClbXSxcbiAgKSA9PiB7XG4gICAgY29uc3QgX2l0ZW1zID0gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTGlicmFyeUl0ZW1Db21wbyh7XG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBvbkluc2VydExpYnJhcnlJdGVtcyhnZXRJbnNlcnRlZEVsZW1lbnRzKGl0ZW0uaWQpKSxcbiAgICAgICAgICBrZXk6IGl0ZW0uaWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZUxpYnJhcnlJdGVtQ29tcG8oe1xuICAgICAgICBrZXk6IFwiX19wZW5kaW5nX19pdGVtX19cIixcbiAgICAgICAgaXRlbSxcbiAgICAgICAgb25DbGljazogKCkgPT4gb25BZGRUb0xpYnJhcnkocGVuZGluZ0VsZW1lbnRzKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gZW5zdXJlIHdlIHJlbmRlciBhbGwgZW1wdHkgY2VsbHMgaWYgbm8gaXRlbXMgYXJlIHByZXNlbnRcbiAgICBsZXQgcm93cyA9IGNodW5rKF9pdGVtcywgQ0VMTFNfUEVSX1JPVyk7XG4gICAgaWYgKCFyb3dzLmxlbmd0aCkge1xuICAgICAgcm93cyA9IFtbXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3MubWFwKChyb3dJdGVtcywgaW5kZXgsIHJvd3MpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gcm93cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIC8vIHBhZCByb3cgd2l0aCBlbXB0eSBjZWxsc1xuICAgICAgICByb3dJdGVtcyA9IHJvd0l0ZW1zLmNvbmNhdChcbiAgICAgICAgICBuZXcgQXJyYXkoQ0VMTFNfUEVSX1JPVyAtIHJvd0l0ZW1zLmxlbmd0aClcbiAgICAgICAgICAgIC5maWxsKG51bGwpXG4gICAgICAgICAgICAubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGlicmFyeUl0ZW1Db21wbyh7XG4gICAgICAgICAgICAgICAga2V5OiBgZW1wdHlfJHtpbmRleH1gLFxuICAgICAgICAgICAgICAgIGl0ZW06IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3RhY2suUm93IGFsaWduPVwiY2VudGVyXCIgZ2FwPXsxfSBrZXk9e2luZGV4fT5cbiAgICAgICAgICB7cm93SXRlbXN9XG4gICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCB1bnB1Ymxpc2hlZEl0ZW1zID0gbGlicmFyeUl0ZW1zLmZpbHRlcihcbiAgICAoaXRlbSkgPT4gaXRlbS5zdGF0dXMgIT09IFwicHVibGlzaGVkXCIsXG4gICk7XG4gIGNvbnN0IHB1Ymxpc2hlZEl0ZW1zID0gbGlicmFyeUl0ZW1zLmZpbHRlcihcbiAgICAoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09IFwicHVibGlzaGVkXCIsXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImxpYnJhcnktbWVudS1pdGVtcy1jb250YWluZXJcIj5cbiAgICAgIHtzaG93UmVtb3ZlTGliQWxlcnQgJiYgcmVuZGVyUmVtb3ZlTGliQWxlcnQoKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGF5ZXItdWlfX2xpYnJhcnktaGVhZGVyXCIga2V5PVwibGlicmFyeS1oZWFkZXJcIj5cbiAgICAgICAge3JlbmRlckxpYnJhcnlBY3Rpb25zKCl9XG4gICAgICAgIHtpc0xvYWRpbmcgPyAoXG4gICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj17YCR7cHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX0xJQlJBUllfVVJMfT90YXJnZXQ9JHtcbiAgICAgICAgICAgICAgd2luZG93Lm5hbWUgfHwgXCJfYmxhbmtcIlxuICAgICAgICAgICAgfSZyZWZlcnJlcj0ke3JlZmVycmVyfSZ1c2VIYXNoPXRydWUmdG9rZW49JHtpZH0mdGhlbWU9JHt0aGVtZX0mdmVyc2lvbj0ke1xuICAgICAgICAgICAgICBWRVJTSU9OUy5leGNhbGlkcmF3TGlicmFyeVxuICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICB0YXJnZXQ9XCJfZXhjYWxpZHJhd19saWJyYXJpZXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KFwibGFiZWxzLmxpYnJhcmllc1wiKX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTdGFjay5Db2xcbiAgICAgICAgY2xhc3NOYW1lPVwibGlicmFyeS1tZW51LWl0ZW1zLWNvbnRhaW5lcl9faXRlbXNcIlxuICAgICAgICBhbGlnbj1cInN0YXJ0XCJcbiAgICAgICAgZ2FwPXsxfVxuICAgICAgPlxuICAgICAgICA8PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VwYXJhdG9yXCI+e3QoXCJsYWJlbHMucGVyc29uYWxMaWJcIil9PC9kaXY+XG4gICAgICAgICAge3JlbmRlckxpYnJhcnlTZWN0aW9uKFtcbiAgICAgICAgICAgIC8vIGFwcGVuZCBwZW5kaW5nIGxpYnJhcnkgaXRlbVxuICAgICAgICAgICAgLi4uKHBlbmRpbmdFbGVtZW50cy5sZW5ndGhcbiAgICAgICAgICAgICAgPyBbeyBpZDogbnVsbCwgZWxlbWVudHM6IHBlbmRpbmdFbGVtZW50cyB9XVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgIC4uLnVucHVibGlzaGVkSXRlbXMsXG4gICAgICAgICAgXSl9XG4gICAgICAgIDwvPlxuXG4gICAgICAgIDw+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZXBhcmF0b3JcIj57dChcImxhYmVscy5leGNhbGlkcmF3TGliXCIpfSA8L2Rpdj5cblxuICAgICAgICAgIHtyZW5kZXJMaWJyYXJ5U2VjdGlvbihwdWJsaXNoZWRJdGVtcyl9XG4gICAgICAgIDwvPlxuICAgICAgPC9TdGFjay5Db2w+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBMaWJyYXJ5TWVudUl0ZW1zO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/LibraryMenuItems.tsx\n");
2170
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ \"../../../node_modules/lodash/lodash.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\n/* harmony import */ var _ConfirmDialog__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ConfirmDialog */ \"../../components/ConfirmDialog.tsx\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _LibraryUnit__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./LibraryUnit */ \"../../components/LibraryUnit.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _ToolButton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _Tooltip__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Tooltip */ \"../../components/Tooltip.tsx\");\n/* harmony import */ var _LibraryMenuItems_scss__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./LibraryMenuItems.scss */ \"../../components/LibraryMenuItems.scss\");\n/* harmony import */ var _LibraryMenuItems_scss__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_LibraryMenuItems_scss__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _Spinner__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./Spinner */ \"../../components/Spinner.tsx\");\n/* harmony import */ var _data_filesystem__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../data/filesystem */ \"../../data/filesystem.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst LibraryMenuItems = ({ isLoading, libraryItems, onRemoveFromLibrary, onAddToLibrary, onInsertLibraryItems, pendingElements, theme, setAppState, libraryReturnUrl, library, files, id, selectedItems, onSelectItems, onPublish, resetLibrary, }) => {\r\n const renderRemoveLibAlert = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {\r\n const content = selectedItems.length\r\n ? (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"alerts.removeItemsFromsLibrary\", { count: selectedItems.length })\r\n : (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"alerts.resetLibrary\");\r\n const title = selectedItems.length\r\n ? (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"confirmDialog.removeItemsFromLib\")\r\n : (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"confirmDialog.resetLibrary\");\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ConfirmDialog__WEBPACK_IMPORTED_MODULE_7__[\"default\"], Object.assign({ onConfirm: () => {\r\n if (selectedItems.length) {\r\n onRemoveFromLibrary();\r\n }\r\n else {\r\n resetLibrary();\r\n }\r\n setShowRemoveLibAlert(false);\r\n }, onCancel: () => {\r\n setShowRemoveLibAlert(false);\r\n }, title: title }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"p\", { children: content }, void 0) }), void 0));\r\n }, [selectedItems, onRemoveFromLibrary, resetLibrary]);\r\n const [showRemoveLibAlert, setShowRemoveLibAlert] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(false);\r\n const isMobile = (0,_App__WEBPACK_IMPORTED_MODULE_6__.useDeviceType)().isMobile;\r\n const renderLibraryActions = () => {\r\n const itemsSelected = !!selectedItems.length;\r\n const items = itemsSelected\r\n ? libraryItems.filter((item) => selectedItems.includes(item.id))\r\n : libraryItems;\r\n const resetLabel = itemsSelected\r\n ? (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.remove\")\r\n : (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.resetLibrary\");\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"library-actions\" }, { children: [(!itemsSelected || !isMobile) && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_11__.ToolButton, { type: \"button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.load\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.load\"), icon: _icons__WEBPACK_IMPORTED_MODULE_8__.load, onClick: () => __awaiter(void 0, void 0, void 0, function* () {\r\n try {\r\n yield library.updateLibrary({\r\n libraryItems: (0,_data_filesystem__WEBPACK_IMPORTED_MODULE_16__.fileOpen)({\r\n description: \"Excalidraw library files\",\r\n // ToDo: Be over-permissive until https://bugs.webkit.org/show_bug.cgi?id=34442\r\n // gets resolved. Else, iOS users cannot open `.excalidraw` files.\r\n /*\r\n extensions: [\".json\", \".excalidrawlib\"],\r\n */\r\n }),\r\n merge: true,\r\n openLibraryMenu: true,\r\n });\r\n }\r\n catch (error) {\r\n if ((error === null || error === void 0 ? void 0 : error.name) === \"AbortError\") {\r\n console.warn(error);\r\n return;\r\n }\r\n setAppState({ errorMessage: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"errors.importLibraryError\") });\r\n }\r\n }), className: \"library-actions--load\" }, \"import\")), !!items.length && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_11__.ToolButton, Object.assign({ type: \"button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.export\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.export\"), icon: _icons__WEBPACK_IMPORTED_MODULE_8__.exportToFileIcon, onClick: () => __awaiter(void 0, void 0, void 0, function* () {\r\n const libraryItems = itemsSelected\r\n ? items\r\n : yield library.getLatestLibrary();\r\n (0,_data_json__WEBPACK_IMPORTED_MODULE_3__.saveLibraryAsJSON)(libraryItems)\r\n .catch(_utils__WEBPACK_IMPORTED_MODULE_5__.muteFSAbortError)\r\n .catch((error) => {\r\n setAppState({ errorMessage: error.message });\r\n });\r\n }), className: \"library-actions--export\" }, { children: selectedItems.length > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", Object.assign({ className: \"library-actions-counter\" }, { children: selectedItems.length }), void 0)) }), \"export\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_11__.ToolButton, Object.assign({ type: \"button\", title: resetLabel, \"aria-label\": resetLabel, icon: _icons__WEBPACK_IMPORTED_MODULE_8__.trash, onClick: () => setShowRemoveLibAlert(true), className: \"library-actions--remove\" }, { children: selectedItems.length > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", Object.assign({ className: \"library-actions-counter\" }, { children: selectedItems.length }), void 0)) }), \"reset\")] }, void 0)), itemsSelected && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Tooltip__WEBPACK_IMPORTED_MODULE_12__.Tooltip, Object.assign({ label: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"hints.publishLibrary\") }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_ToolButton__WEBPACK_IMPORTED_MODULE_11__.ToolButton, Object.assign({ type: \"button\", \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.publishLibrary\"), label: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.publishLibrary\"), icon: _icons__WEBPACK_IMPORTED_MODULE_8__.publishIcon, className: \"library-actions--publish\", onClick: onPublish }, { children: [!isMobile && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"label\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"buttons.publishLibrary\") }, void 0), selectedItems.length > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", Object.assign({ className: \"library-actions-counter\" }, { children: selectedItems.length }), void 0))] }), void 0) }), void 0))] }), void 0));\r\n };\r\n const CELLS_PER_ROW = isMobile ? 4 : 6;\r\n const referrer = libraryReturnUrl || window.location.origin + window.location.pathname;\r\n const [lastSelectedItem, setLastSelectedItem] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(null);\r\n const onItemSelectToggle = (id, event) => {\r\n const shouldSelect = !selectedItems.includes(id);\r\n const orderedItems = [...unpublishedItems, ...publishedItems];\r\n if (shouldSelect) {\r\n if (event.shiftKey && lastSelectedItem) {\r\n const rangeStart = orderedItems.findIndex((item) => item.id === lastSelectedItem);\r\n const rangeEnd = orderedItems.findIndex((item) => item.id === id);\r\n if (rangeStart === -1 || rangeEnd === -1) {\r\n onSelectItems([...selectedItems, id]);\r\n return;\r\n }\r\n const selectedItemsMap = (0,_utils__WEBPACK_IMPORTED_MODULE_5__.arrayToMap)(selectedItems);\r\n const nextSelectedIds = orderedItems.reduce((acc, item, idx) => {\r\n if ((idx >= rangeStart && idx <= rangeEnd) ||\r\n selectedItemsMap.has(item.id)) {\r\n acc.push(item.id);\r\n }\r\n return acc;\r\n }, []);\r\n onSelectItems(nextSelectedIds);\r\n }\r\n else {\r\n onSelectItems([...selectedItems, id]);\r\n }\r\n setLastSelectedItem(id);\r\n }\r\n else {\r\n setLastSelectedItem(null);\r\n onSelectItems(selectedItems.filter((_id) => _id !== id));\r\n }\r\n };\r\n const getInsertedElements = (id) => {\r\n let targetElements;\r\n if (selectedItems.includes(id)) {\r\n targetElements = libraryItems.filter((item) => selectedItems.includes(item.id));\r\n }\r\n else {\r\n targetElements = libraryItems.filter((item) => item.id === id);\r\n }\r\n return targetElements;\r\n };\r\n const createLibraryItemCompo = (params) => {\r\n var _a, _b, _c, _d, _e;\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_10__[\"default\"].Col, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryUnit__WEBPACK_IMPORTED_MODULE_9__.LibraryUnit, { elements: (_a = params.item) === null || _a === void 0 ? void 0 : _a.elements, files: files, isPending: !((_b = params.item) === null || _b === void 0 ? void 0 : _b.id) && !!((_c = params.item) === null || _c === void 0 ? void 0 : _c.elements), onClick: params.onClick || (() => { }), id: ((_d = params.item) === null || _d === void 0 ? void 0 : _d.id) || null, selected: !!((_e = params.item) === null || _e === void 0 ? void 0 : _e.id) && selectedItems.includes(params.item.id), onToggle: onItemSelectToggle, onDrag: (id, event) => {\r\n event.dataTransfer.setData(_constants__WEBPACK_IMPORTED_MODULE_14__.MIME_TYPES.excalidrawlib, (0,_data_json__WEBPACK_IMPORTED_MODULE_3__.serializeLibraryAsJSON)(getInsertedElements(id)));\r\n } }, void 0) }, params.key));\r\n };\r\n const renderLibrarySection = (items) => {\r\n const _items = items.map((item) => {\r\n if (item.id) {\r\n return createLibraryItemCompo({\r\n item,\r\n onClick: () => onInsertLibraryItems(getInsertedElements(item.id)),\r\n key: item.id,\r\n });\r\n }\r\n return createLibraryItemCompo({\r\n key: \"__pending__item__\",\r\n item,\r\n onClick: () => onAddToLibrary(pendingElements),\r\n });\r\n });\r\n // ensure we render all empty cells if no items are present\r\n let rows = (0,lodash__WEBPACK_IMPORTED_MODULE_1__.chunk)(_items, CELLS_PER_ROW);\r\n if (!rows.length) {\r\n rows = [[]];\r\n }\r\n return rows.map((rowItems, index, rows) => {\r\n if (index === rows.length - 1) {\r\n // pad row with empty cells\r\n rowItems = rowItems.concat(new Array(CELLS_PER_ROW - rowItems.length)\r\n .fill(null)\r\n .map((_, index) => {\r\n return createLibraryItemCompo({\r\n key: `empty_${index}`,\r\n item: null,\r\n });\r\n }));\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_10__[\"default\"].Row, Object.assign({ align: \"center\", gap: 1 }, { children: rowItems }), index));\r\n });\r\n };\r\n const unpublishedItems = libraryItems.filter((item) => item.status !== \"published\");\r\n const publishedItems = libraryItems.filter((item) => item.status === \"published\");\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"library-menu-items-container\" }, { children: [showRemoveLibAlert && renderRemoveLibAlert(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"layer-ui__library-header\" }, { children: [renderLibraryActions(), isLoading ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Spinner__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {}, void 0)) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"a\", Object.assign({ href: `${\"https://libraries.excalidraw.com\"}?target=${window.name || \"_blank\"}&referrer=${referrer}&useHash=true&token=${id}&theme=${theme}&version=${_constants__WEBPACK_IMPORTED_MODULE_14__.VERSIONS.excalidrawLibrary}`, target: \"_excalidraw_libraries\" }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"labels.libraries\") }), void 0))] }), \"library-header\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_10__[\"default\"].Col, Object.assign({ className: \"library-menu-items-container__items\", align: \"start\", gap: 1 }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"separator\" }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"labels.personalLib\") }), void 0), renderLibrarySection([\r\n // append pending library item\r\n ...(pendingElements.length\r\n ? [{ id: null, elements: pendingElements }]\r\n : []),\r\n ...unpublishedItems,\r\n ])] }, void 0), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"separator\" }, { children: [(0,_i18n__WEBPACK_IMPORTED_MODULE_4__.t)(\"labels.excalidrawLib\"), \" \"] }), void 0), renderLibrarySection(publishedItems)] }, void 0)] }), void 0)] }), void 0));\r\n};\r\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LibraryMenuItems);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9MaWJyYXJ5TWVudUl0ZW1zLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQStCO0FBQ3NCO0FBQ29CO0FBRzdDO0FBUTRCO0FBQ2xCO0FBQ007QUFDeUI7QUFDekI7QUFDaEI7QUFDYztBQUNOO0FBRUg7QUFDbUI7QUFDcEI7QUFDYztBQUU5QyxNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFDeEIsU0FBUyxFQUNULFlBQVksRUFDWixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsS0FBSyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLEtBQUssRUFDTCxFQUFFLEVBQ0YsYUFBYSxFQUNiLGFBQWEsRUFDYixTQUFTLEVBQ1QsWUFBWSxHQWtCYixFQUFFLEVBQUU7SUFDSCxNQUFNLG9CQUFvQixHQUFHLGtEQUFXLENBQUMsR0FBRyxFQUFFO1FBQzVDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNO1lBQ2xDLENBQUMsQ0FBQyx3Q0FBQyxDQUFDLGdDQUFnQyxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0RSxDQUFDLENBQUMsd0NBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxNQUFNO1lBQ2hDLENBQUMsQ0FBQyx3Q0FBQyxDQUFDLGtDQUFrQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyx3Q0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDcEMsT0FBTyxDQUNMLHVEQUFDLHNEQUFhLGtCQUNaLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO29CQUN4QixtQkFBbUIsRUFBRSxDQUFDO2lCQUN2QjtxQkFBTTtvQkFDTCxZQUFZLEVBQUUsQ0FBQztpQkFDaEI7Z0JBQ0QscUJBQXFCLENB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b0IsQ0FBQztnQ0FDcEIsOEJBQThCO2dDQUM5QixHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU07b0NBQ3hCLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUM7b0NBQzNDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQ1AsR0FBRyxnQkFBZ0I7NkJBQ3BCLENBQUMsWUFDRCxFQUVILDhIQUNFLCtFQUFLLFNBQVMsRUFBQyxXQUFXLGlCQUFFLHdDQUFDLENBQUMsc0JBQXNCLENBQUMsa0JBQVEsRUFFNUQsb0JBQW9CLENBQUMsY0FBYyxDQUFDLFlBQ3BDLGFBQ08sYUFDUixDQUNQLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixpRUFBZSxnQkFBZ0IsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL0xpYnJhcnlNZW51SXRlbXMudHN4P2Y3NDIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2h1bmsgfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBzYXZlTGlicmFyeUFzSlNPTiwgc2VyaWFsaXplTGlicmFyeUFzSlNPTiB9IGZyb20gXCIuLi9kYXRhL2pzb25cIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCIuLi9kYXRhL2xpYnJhcnlcIjtcbmltcG9ydCB7IEV4Y2FsaWRyYXdFbGVtZW50LCBOb25EZWxldGVkIH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHtcbiAgQXBwU3RhdGUsXG4gIEJpbmFyeUZpbGVzLFxuICBFeGNhbGlkcmF3UHJvcHMsXG4gIExpYnJhcnlJdGVtLFxuICBMaWJyYXJ5SXRlbXMsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgYXJyYXlUb01hcCwgbXV0ZUZTQWJvcnRFcnJvciB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgdXNlRGV2aWNlVHlwZSB9IGZyb20gXCIuL0FwcFwiO1xuaW1wb3J0IENvbmZpcm1EaWFsb2cgZnJvbSBcIi4vQ29uZmlybURpYWxvZ1wiO1xuaW1wb3J0IHsgZXhwb3J0VG9GaWxlSWNvbiwgbG9hZCwgcHVibGlzaEljb24sIHRyYXNoIH0gZnJvbSBcIi4vaWNvbnNcIjtcbmltcG9ydCB7IExpYnJhcnlVbml0IH0gZnJvbSBcIi4vTGlicmFyeVVuaXRcIjtcbmltcG9ydCBTdGFjayBmcm9tIFwiLi9TdGFja1wiO1xuaW1wb3J0IHsgVG9vbEJ1dHRvbiB9IGZyb20gXCIuL1Rvb2xCdXR0b25cIjtcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tIFwiLi9Ub29sdGlwXCI7XG5cbmltcG9ydCBcIi4vTGlicmFyeU1lbnVJdGVtcy5zY3NzXCI7XG5pbXBvcnQgeyBNSU1FX1RZUEVTLCBWRVJTSU9OUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCBTcGlubmVyIGZyb20gXCIuL1NwaW5uZXJcIjtcbmltcG9ydCB7IGZpbGVPcGVuIH0gZnJvbSBcIi4uL2RhdGEvZmlsZXN5c3RlbVwiO1xuXG5jb25zdCBMaWJyYXJ5TWVudUl0ZW1zID0gKHtcbiAgaXNMb2FkaW5nLFxuICBsaWJyYXJ5SXRlbXMsXG4gIG9uUmVtb3ZlRnJvbUxpYnJhcnksXG4gIG9uQWRkVG9MaWJyYXJ5LFxuICBvbkluc2VydExpYnJhcnlJdGVtcyxcbiAgcGVuZGluZ0VsZW1lbnRzLFxuICB0aGVtZSxcbiAgc2V0QXBwU3RhdGUsXG4gIGxpYnJhcnlSZXR1cm5VcmwsXG4gIGxpYnJhcnksXG4gIGZpbGVzLFxuICBpZCxcbiAgc2VsZWN0ZWRJdGVtcyxcbiAgb25TZWxlY3RJdGVtcyxcbiAgb25QdWJsaXNoLFxuICByZXNldExpYnJhcnksXG59OiB7XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgbGlicmFyeUl0ZW1zOiBMaWJyYXJ5SXRlbXM7XG4gIHBlbmRpbmdFbGVtZW50czogTGlicmFyeUl0ZW1bXCJlbGVtZW50c1wiXTtcbiAgb25SZW1vdmVGcm9tTGlicmFyeTogKCkgPT4gdm9pZDtcbiAgb25JbnNlcnRMaWJyYXJ5SXRlbXM6IChsaWJyYXJ5SXRlbXM6IExpYnJhcnlJdGVtcykgPT4gdm9pZDtcbiAgb25BZGRUb0xpYnJhcnk6IChlbGVtZW50czogTGlicmFyeUl0ZW1bXCJlbGVtZW50c1wiXSkgPT4gdm9pZDtcbiAgdGhlbWU6IEFwcFN0YXRlW1widGhlbWVcIl07XG4gIGZpbGVzOiBCaW5hcnlGaWxlcztcbiAgc2V0QXBwU3RhdGU6IFJlYWN0LkNvbXBvbmVudDxhbnksIEFwcFN0YXRlPltcInNldFN0YXRlXCJdO1xuICBsaWJyYXJ5UmV0dXJuVXJsOiBFeGNhbGlkcmF3UHJvcHNbXCJsaWJyYXJ5UmV0dXJuVXJsXCJdO1xuICBsaWJyYXJ5OiBMaWJyYXJ5O1xuICBpZDogc3RyaW5nO1xuICBzZWxlY3RlZEl0ZW1zOiBMaWJyYXJ5SXRlbVtcImlkXCJdW107XG4gIG9uU2VsZWN0SXRlbXM6IChpZDogTGlicmFyeUl0ZW1bXCJpZFwiXVtdKSA9PiB2b2lkO1xuICBvblB1Ymxpc2g6ICgpID0+IHZvaWQ7XG4gIHJlc2V0TGlicmFyeTogKCkgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgcmVuZGVyUmVtb3ZlTGliQWxlcnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgY29udGVudCA9IHNlbGVjdGVkSXRlbXMubGVuZ3RoXG4gICAgICA/IHQoXCJhbGVydHMucmVtb3ZlSXRlbXNGcm9tc0xpYnJhcnlcIiwgeyBjb3VudDogc2VsZWN0ZWRJdGVtcy5sZW5ndGggfSlcbiAgICAgIDogdChcImFsZXJ0cy5yZXNldExpYnJhcnlcIik7XG4gICAgY29uc3QgdGl0bGUgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aFxuICAgICAgPyB0KFwiY29uZmlybURpYWxvZy5yZW1vdmVJdGVtc0Zyb21MaWJcIilcbiAgICAgIDogdChcImNvbmZpcm1EaWFsb2cucmVzZXRMaWJyYXJ5XCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8Q29uZmlybURpYWxvZ1xuICAgICAgICBvbkNvbmZpcm09eygpID0+IHtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG9uUmVtb3ZlRnJvbUxpYnJhcnkoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzZXRMaWJyYXJ5KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldFNob3dSZW1vdmVMaWJBbGVydChmYWxzZSk7XG4gICAgICAgIH19XG4gICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgc2V0U2hvd1JlbW92ZUxpYkFsZXJ0KGZhbHNlKTtcbiAgICAgICAgfX1cbiAgICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgPlxuICAgICAgICA8cD57Y29udGVudH08L3A+XG4gICAgICA8L0NvbmZpcm1EaWFsb2c+XG4gICAgKTtcbiAgfSwgW3NlbGVjdGVkSXRlbXMsIG9uUmVtb3ZlRnJvbUxpYnJhcnksIHJlc2V0TGlicmFyeV0pO1xuXG4gIGNvbnN0IFtzaG93UmVtb3ZlTGliQWxlcnQsIHNldFNob3dSZW1vdmVMaWJBbGVydF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgaXNNb2JpbGUgPSB1c2VEZXZpY2VUeXBlKCkuaXNNb2JpbGU7XG5cbiAgY29uc3QgcmVuZGVyTGlicmFyeUFjdGlvbnMgPSAoKSA9PiB7XG4gICAgY29uc3QgaXRlbXNTZWxlY3RlZCA9ICEhc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XG4gICAgY29uc3QgaXRlbXMgPSBpdGVtc1NlbGVjdGVkXG4gICAgICA/IGxpYnJhcnlJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHNlbGVjdGVkSXRlbXMuaW5jbHVkZXMoaXRlbS5pZCkpXG4gICAgICA6IGxpYnJhcnlJdGVtcztcbiAgICBjb25zdCByZXNldExhYmVsID0gaXRlbXNTZWxlY3RlZFxuICAgICAgPyB0KFwiYnV0dG9ucy5yZW1vdmVcIilcbiAgICAgIDogdChcImJ1dHRvbnMucmVzZXRMaWJyYXJ5XCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImxpYnJhcnktYWN0aW9uc1wiPlxuICAgICAgICB7KCFpdGVtc1NlbGVjdGVkIHx8ICFpc01vYmlsZSkgJiYgKFxuICAgICAgICAgIDxUb29sQnV0dG9uXG4gICAgICAgICAgICBrZXk9XCJpbXBvcnRcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICB0aXRsZT17dChcImJ1dHRvbnMubG9hZFwiKX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoXCJidXR0b25zLmxvYWRcIil9XG4gICAgICAgICAgICBpY29uPXtsb2FkfVxuICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxpYnJhcnkudXBkYXRlTGlicmFyeSh7XG4gICAgICAgICAgICAgICAgICBsaWJyYXJ5SXRlbXM6IGZpbGVPcGVuKHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRXhjYWxpZHJhdyBsaWJyYXJ5IGZpbGVzXCIsXG4gICAgICAgICAgICAgICAgICAgIC8vIFRvRG86IEJlIG92ZXItcGVybWlzc2l2ZSB1bnRpbCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0NDJcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0cyByZXNvbHZlZC4gRWxzZSwgaU9TIHVzZXJzIGNhbm5vdCBvcGVuIGAuZXhjYWxpZHJhd2AgZmlsZXMuXG4gICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnM6IFtcIi5qc29uXCIsIFwiLmV4Y2FsaWRyYXdsaWJcIl0sXG4gICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgb3BlbkxpYnJhcnlNZW51OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yPy5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0QXBwU3RhdGUoeyBlcnJvck1lc3NhZ2U6IHQoXCJlcnJvcnMuaW1wb3J0TGlicmFyeUVycm9yXCIpIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibGlicmFyeS1hY3Rpb25zLS1sb2FkXCJcbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7ISFpdGVtcy5sZW5ndGggJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8VG9vbEJ1dHRvblxuICAgICAgICAgICAgICBrZXk9XCJleHBvcnRcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgdGl0bGU9e3QoXCJidXR0b25zLmV4cG9ydFwiKX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMuZXhwb3J0XCIpfVxuICAgICAgICAgICAgICBpY29uPXtleHBvcnRUb0ZpbGVJY29ufVxuICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlicmFyeUl0ZW1zID0gaXRlbXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgPyBpdGVtc1xuICAgICAgICAgICAgICAgICAgOiBhd2FpdCBsaWJyYXJ5LmdldExhdGVzdExpYnJhcnkoKTtcbiAgICAgICAgICAgICAgICBzYXZlTGlicmFyeUFzSlNPTihsaWJyYXJ5SXRlbXMpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2gobXV0ZUZTQWJvcnRFcnJvcilcbiAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXBwU3RhdGUoeyBlcnJvck1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibGlicmFyeS1hY3Rpb25zLS1leHBvcnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsaWJyYXJ5LWFjdGlvbnMtY291bnRlclwiPlxuICAgICAgICAgICAgICAgICAge3NlbGVjdGVkSXRlbXMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvVG9vbEJ1dHRvbj5cbiAgICAgICAgICAgIDxUb29sQnV0dG9uXG4gICAgICAgICAgICAgIGtleT1cInJlc2V0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHRpdGxlPXtyZXNldExhYmVsfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtyZXNldExhYmVsfVxuICAgICAgICAgICAgICBpY29uPXt0cmFzaH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd1JlbW92ZUxpYkFsZXJ0KHRydWUpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJsaWJyYXJ5LWFjdGlvbnMtLXJlbW92ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxpYnJhcnktYWN0aW9ucy1jb3VudGVyXCI+XG4gICAgICAgICAgICAgICAgICB7c2VsZWN0ZWRJdGVtcy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Ub29sQnV0dG9uPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7aXRlbXNTZWxlY3RlZCAmJiAoXG4gICAgICAgICAgPFRvb2x0aXAgbGFiZWw9e3QoXCJoaW50cy5wdWJsaXNoTGlicmFyeVwiKX0+XG4gICAgICAgICAgICA8VG9vbEJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMucHVibGlzaExpYnJhcnlcIil9XG4gICAgICAgICAgICAgIGxhYmVsPXt0KFwiYnV0dG9ucy5wdWJsaXNoTGlicmFyeVwiKX1cbiAgICAgICAgICAgICAgaWNvbj17cHVibGlzaEljb259XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImxpYnJhcnktYWN0aW9ucy0tcHVibGlzaFwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e29uUHVibGlzaH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyFpc01vYmlsZSAmJiA8bGFiZWw+e3QoXCJidXR0b25zLnB1Ymxpc2hMaWJyYXJ5XCIpfTwvbGFiZWw+fVxuICAgICAgICAgICAgICB7c2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsaWJyYXJ5LWFjdGlvbnMtY291bnRlclwiPlxuICAgICAgICAgICAgICAgICAge3NlbGVjdGVkSXRlbXMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvVG9vbEJ1dHRvbj5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IENFTExTX1BFUl9ST1cgPSBpc01vYmlsZSA/IDQgOiA2O1xuXG4gIGNvbnN0IHJlZmVycmVyID1cbiAgICBsaWJyYXJ5UmV0dXJuVXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG5cbiAgY29uc3QgW2xhc3RTZWxlY3RlZEl0ZW0sIHNldExhc3RTZWxlY3RlZEl0ZW1dID0gdXNlU3RhdGU8XG4gICAgTGlicmFyeUl0ZW1bXCJpZFwiXSB8IG51bGxcbiAgPihudWxsKTtcblxuICBjb25zdCBvbkl0ZW1TZWxlY3RUb2dnbGUgPSAoXG4gICAgaWQ6IExpYnJhcnlJdGVtW1wiaWRcIl0sXG4gICAgZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQsXG4gICkgPT4ge1xuICAgIGNvbnN0IHNob3VsZFNlbGVjdCA9ICFzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGlkKTtcblxuICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IFsuLi51bnB1Ymxpc2hlZEl0ZW1zLCAuLi5wdWJsaXNoZWRJdGVtc107XG5cbiAgICBpZiAoc2hvdWxkU2VsZWN0KSB7XG4gICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgbGFzdFNlbGVjdGVkSXRlbSkge1xuICAgICAgICBjb25zdCByYW5nZVN0YXJ0ID0gb3JkZXJlZEl0ZW1zLmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbGFzdFNlbGVjdGVkSXRlbSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmFuZ2VFbmQgPSBvcmRlcmVkSXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSBpZCk7XG5cbiAgICAgICAgaWYgKHJhbmdlU3RhcnQgPT09IC0xIHx8IHJhbmdlRW5kID09PSAtMSkge1xuICAgICAgICAgIG9uU2VsZWN0SXRlbXMoWy4uLnNlbGVjdGVkSXRlbXMsIGlkXSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtc01hcCA9IGFycmF5VG9NYXAoc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgIGNvbnN0IG5leHRTZWxlY3RlZElkcyA9IG9yZGVyZWRJdGVtcy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYzogTGlicmFyeUl0ZW1bXCJpZFwiXVtdLCBpdGVtLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKGlkeCA+PSByYW5nZVN0YXJ0ICYmIGlkeCA8PSByYW5nZUVuZCkgfHxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtc01hcC5oYXMoaXRlbS5pZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBhY2MucHVzaChpdGVtLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXSxcbiAgICAgICAgKTtcblxuICAgICAgICBvblNlbGVjdEl0ZW1zKG5leHRTZWxlY3RlZElkcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblNlbGVjdEl0ZW1zKFsuLi5zZWxlY3RlZEl0ZW1zLCBpZF0pO1xuICAgICAgfVxuICAgICAgc2V0TGFzdFNlbGVjdGVkSXRlbShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldExhc3RTZWxlY3RlZEl0ZW0obnVsbCk7XG4gICAgICBvblNlbGVjdEl0ZW1zKHNlbGVjdGVkSXRlbXMuZmlsdGVyKChfaWQpID0+IF9pZCAhPT0gaWQpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0SW5zZXJ0ZWRFbGVtZW50cyA9IChpZDogc3RyaW5nKSA9PiB7XG4gICAgbGV0IHRhcmdldEVsZW1lbnRzO1xuICAgIGlmIChzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGlkKSkge1xuICAgICAgdGFyZ2V0RWxlbWVudHMgPSBsaWJyYXJ5SXRlbXMuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICBzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGl0ZW0uaWQpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0RWxlbWVudHMgPSBsaWJyYXJ5SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlkID09PSBpZCk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRFbGVtZW50cztcbiAgfTtcblxuICBjb25zdCBjcmVhdGVMaWJyYXJ5SXRlbUNvbXBvID0gKHBhcmFtczoge1xuICAgIGl0ZW06XG4gICAgICB8IExpYnJhcnlJdGVtXG4gICAgICB8IC8qIHBlbmRpbmcgbGlicmFyeSBpdGVtICovIHtcbiAgICAgICAgICBpZDogbnVsbDtcbiAgICAgICAgICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZDxFeGNhbGlkcmF3RWxlbWVudD5bXTtcbiAgICAgICAgfVxuICAgICAgfCBudWxsO1xuICAgIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xuICAgIGtleTogc3RyaW5nO1xuICB9KSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdGFjay5Db2wga2V5PXtwYXJhbXMua2V5fT5cbiAgICAgICAgPExpYnJhcnlVbml0XG4gICAgICAgICAgZWxlbWVudHM9e3BhcmFtcy5pdGVtPy5lbGVtZW50c31cbiAgICAgICAgICBmaWxlcz17ZmlsZXN9XG4gICAgICAgICAgaXNQZW5kaW5nPXshcGFyYW1zLml0ZW0/LmlkICYmICEhcGFyYW1zLml0ZW0/LmVsZW1lbnRzfVxuICAgICAgICAgIG9uQ2xpY2s9e3BhcmFtcy5vbkNsaWNrIHx8ICgoKSA9PiB7fSl9XG4gICAgICAgICAgaWQ9e3BhcmFtcy5pdGVtPy5pZCB8fCBudWxsfVxuICAgICAgICAgIHNlbGVjdGVkPXshIXBhcmFtcy5pdGVtPy5pZCAmJiBzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKHBhcmFtcy5pdGVtLmlkKX1cbiAgICAgICAgICBvblRvZ2dsZT17b25JdGVtU2VsZWN0VG9nZ2xlfVxuICAgICAgICAgIG9uRHJhZz17KGlkLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoXG4gICAgICAgICAgICAgIE1JTUVfVFlQRVMuZXhjYWxpZHJhd2xpYixcbiAgICAgICAgICAgICAgc2VyaWFsaXplTGlicmFyeUFzSlNPTihnZXRJbnNlcnRlZEVsZW1lbnRzKGlkKSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L1N0YWNrLkNvbD5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckxpYnJhcnlTZWN0aW9uID0gKFxuICAgIGl0ZW1zOiAoXG4gICAgICB8IExpYnJhcnlJdGVtXG4gICAgICB8IC8qIHBlbmRpbmcgbGlicmFyeSBpdGVtICovIHtcbiAgICAgICAgICBpZDogbnVsbDtcbiAgICAgICAgICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZDxFeGNhbGlkcmF3RWxlbWVudD5bXTtcbiAgICAgICAgfVxuICAgIClbXSxcbiAgKSA9PiB7XG4gICAgY29uc3QgX2l0ZW1zID0gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTGlicmFyeUl0ZW1Db21wbyh7XG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBvbkluc2VydExpYnJhcnlJdGVtcyhnZXRJbnNlcnRlZEVsZW1lbnRzKGl0ZW0uaWQpKSxcbiAgICAgICAgICBrZXk6IGl0ZW0uaWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZUxpYnJhcnlJdGVtQ29tcG8oe1xuICAgICAgICBrZXk6IFwiX19wZW5kaW5nX19pdGVtX19cIixcbiAgICAgICAgaXRlbSxcbiAgICAgICAgb25DbGljazogKCkgPT4gb25BZGRUb0xpYnJhcnkocGVuZGluZ0VsZW1lbnRzKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gZW5zdXJlIHdlIHJlbmRlciBhbGwgZW1wdHkgY2VsbHMgaWYgbm8gaXRlbXMgYXJlIHByZXNlbnRcbiAgICBsZXQgcm93cyA9IGNodW5rKF9pdGVtcywgQ0VMTFNfUEVSX1JPVyk7XG4gICAgaWYgKCFyb3dzLmxlbmd0aCkge1xuICAgICAgcm93cyA9IFtbXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3MubWFwKChyb3dJdGVtcywgaW5kZXgsIHJvd3MpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gcm93cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIC8vIHBhZCByb3cgd2l0aCBlbXB0eSBjZWxsc1xuICAgICAgICByb3dJdGVtcyA9IHJvd0l0ZW1zLmNvbmNhdChcbiAgICAgICAgICBuZXcgQXJyYXkoQ0VMTFNfUEVSX1JPVyAtIHJvd0l0ZW1zLmxlbmd0aClcbiAgICAgICAgICAgIC5maWxsKG51bGwpXG4gICAgICAgICAgICAubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGlicmFyeUl0ZW1Db21wbyh7XG4gICAgICAgICAgICAgICAga2V5OiBgZW1wdHlfJHtpbmRleH1gLFxuICAgICAgICAgICAgICAgIGl0ZW06IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3RhY2suUm93IGFsaWduPVwiY2VudGVyXCIgZ2FwPXsxfSBrZXk9e2luZGV4fT5cbiAgICAgICAgICB7cm93SXRlbXN9XG4gICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCB1bnB1Ymxpc2hlZEl0ZW1zID0gbGlicmFyeUl0ZW1zLmZpbHRlcihcbiAgICAoaXRlbSkgPT4gaXRlbS5zdGF0dXMgIT09IFwicHVibGlzaGVkXCIsXG4gICk7XG4gIGNvbnN0IHB1Ymxpc2hlZEl0ZW1zID0gbGlicmFyeUl0ZW1zLmZpbHRlcihcbiAgICAoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09IFwicHVibGlzaGVkXCIsXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImxpYnJhcnktbWVudS1pdGVtcy1jb250YWluZXJcIj5cbiAgICAgIHtzaG93UmVtb3ZlTGliQWxlcnQgJiYgcmVuZGVyUmVtb3ZlTGliQWxlcnQoKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGF5ZXItdWlfX2xpYnJhcnktaGVhZGVyXCIga2V5PVwibGlicmFyeS1oZWFkZXJcIj5cbiAgICAgICAge3JlbmRlckxpYnJhcnlBY3Rpb25zKCl9XG4gICAgICAgIHtpc0xvYWRpbmcgPyAoXG4gICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj17YCR7cHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX0xJQlJBUllfVVJMfT90YXJnZXQ9JHtcbiAgICAgICAgICAgICAgd2luZG93Lm5hbWUgfHwgXCJfYmxhbmtcIlxuICAgICAgICAgICAgfSZyZWZlcnJlcj0ke3JlZmVycmVyfSZ1c2VIYXNoPXRydWUmdG9rZW49JHtpZH0mdGhlbWU9JHt0aGVtZX0mdmVyc2lvbj0ke1xuICAgICAgICAgICAgICBWRVJTSU9OUy5leGNhbGlkcmF3TGlicmFyeVxuICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICB0YXJnZXQ9XCJfZXhjYWxpZHJhd19saWJyYXJpZXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KFwibGFiZWxzLmxpYnJhcmllc1wiKX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTdGFjay5Db2xcbiAgICAgICAgY2xhc3NOYW1lPVwibGlicmFyeS1tZW51LWl0ZW1zLWNvbnRhaW5lcl9faXRlbXNcIlxuICAgICAgICBhbGlnbj1cInN0YXJ0XCJcbiAgICAgICAgZ2FwPXsxfVxuICAgICAgPlxuICAgICAgICA8PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VwYXJhdG9yXCI+e3QoXCJsYWJlbHMucGVyc29uYWxMaWJcIil9PC9kaXY+XG4gICAgICAgICAge3JlbmRlckxpYnJhcnlTZWN0aW9uKFtcbiAgICAgICAgICAgIC8vIGFwcGVuZCBwZW5kaW5nIGxpYnJhcnkgaXRlbVxuICAgICAgICAgICAgLi4uKHBlbmRpbmdFbGVtZW50cy5sZW5ndGhcbiAgICAgICAgICAgICAgPyBbeyBpZDogbnVsbCwgZWxlbWVudHM6IHBlbmRpbmdFbGVtZW50cyB9XVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgIC4uLnVucHVibGlzaGVkSXRlbXMsXG4gICAgICAgICAgXSl9XG4gICAgICAgIDwvPlxuXG4gICAgICAgIDw+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZXBhcmF0b3JcIj57dChcImxhYmVscy5leGNhbGlkcmF3TGliXCIpfSA8L2Rpdj5cblxuICAgICAgICAgIHtyZW5kZXJMaWJyYXJ5U2VjdGlvbihwdWJsaXNoZWRJdGVtcyl9XG4gICAgICAgIDwvPlxuICAgICAgPC9TdGFjay5Db2w+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBMaWJyYXJ5TWVudUl0ZW1zO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/LibraryMenuItems.tsx\n");
2171
2171
 
2172
2172
  /***/ }),
2173
2173
 
@@ -2398,7 +2398,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2398
2398
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2399
2399
 
2400
2400
  "use strict";
2401
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"APP_NAME\": () => (/* binding */ APP_NAME),\n/* harmony export */ \"DRAGGING_THRESHOLD\": () => (/* binding */ DRAGGING_THRESHOLD),\n/* harmony export */ \"LINE_CONFIRM_THRESHOLD\": () => (/* binding */ LINE_CONFIRM_THRESHOLD),\n/* harmony export */ \"ELEMENT_SHIFT_TRANSLATE_AMOUNT\": () => (/* binding */ ELEMENT_SHIFT_TRANSLATE_AMOUNT),\n/* harmony export */ \"ELEMENT_TRANSLATE_AMOUNT\": () => (/* binding */ ELEMENT_TRANSLATE_AMOUNT),\n/* harmony export */ \"TEXT_TO_CENTER_SNAP_THRESHOLD\": () => (/* binding */ TEXT_TO_CENTER_SNAP_THRESHOLD),\n/* harmony export */ \"SHIFT_LOCKING_ANGLE\": () => (/* binding */ SHIFT_LOCKING_ANGLE),\n/* harmony export */ \"CURSOR_TYPE\": () => (/* binding */ CURSOR_TYPE),\n/* harmony export */ \"POINTER_BUTTON\": () => (/* binding */ POINTER_BUTTON),\n/* harmony export */ \"EVENT\": () => (/* binding */ EVENT),\n/* harmony export */ \"ENV\": () => (/* binding */ ENV),\n/* harmony export */ \"CLASSES\": () => (/* binding */ CLASSES),\n/* harmony export */ \"FONT_FAMILY\": () => (/* binding */ FONT_FAMILY),\n/* harmony export */ \"THEME\": () => (/* binding */ THEME),\n/* harmony export */ \"WINDOWS_EMOJI_FALLBACK_FONT\": () => (/* binding */ WINDOWS_EMOJI_FALLBACK_FONT),\n/* harmony export */ \"DEFAULT_FONT_SIZE\": () => (/* binding */ DEFAULT_FONT_SIZE),\n/* harmony export */ \"DEFAULT_FONT_FAMILY\": () => (/* binding */ DEFAULT_FONT_FAMILY),\n/* harmony export */ \"DEFAULT_TEXT_ALIGN\": () => (/* binding */ DEFAULT_TEXT_ALIGN),\n/* harmony export */ \"DEFAULT_VERTICAL_ALIGN\": () => (/* binding */ DEFAULT_VERTICAL_ALIGN),\n/* harmony export */ \"DEFAULT_VERSION\": () => (/* binding */ DEFAULT_VERSION),\n/* harmony export */ \"CANVAS_ONLY_ACTIONS\": () => (/* binding */ CANVAS_ONLY_ACTIONS),\n/* harmony export */ \"GRID_SIZE\": () => (/* binding */ GRID_SIZE),\n/* harmony export */ \"MIME_TYPES\": () => (/* binding */ MIME_TYPES),\n/* harmony export */ \"EXPORT_DATA_TYPES\": () => (/* binding */ EXPORT_DATA_TYPES),\n/* harmony export */ \"EXPORT_SOURCE\": () => (/* binding */ EXPORT_SOURCE),\n/* harmony export */ \"IMAGE_RENDER_TIMEOUT\": () => (/* binding */ IMAGE_RENDER_TIMEOUT),\n/* harmony export */ \"TAP_TWICE_TIMEOUT\": () => (/* binding */ TAP_TWICE_TIMEOUT),\n/* harmony export */ \"TOUCH_CTX_MENU_TIMEOUT\": () => (/* binding */ TOUCH_CTX_MENU_TIMEOUT),\n/* harmony export */ \"TITLE_TIMEOUT\": () => (/* binding */ TITLE_TIMEOUT),\n/* harmony export */ \"TOAST_TIMEOUT\": () => (/* binding */ TOAST_TIMEOUT),\n/* harmony export */ \"VERSION_TIMEOUT\": () => (/* binding */ VERSION_TIMEOUT),\n/* harmony export */ \"SCROLL_TIMEOUT\": () => (/* binding */ SCROLL_TIMEOUT),\n/* harmony export */ \"ZOOM_STEP\": () => (/* binding */ ZOOM_STEP),\n/* harmony export */ \"HYPERLINK_TOOLTIP_DELAY\": () => (/* binding */ HYPERLINK_TOOLTIP_DELAY),\n/* harmony export */ \"IDLE_THRESHOLD\": () => (/* binding */ IDLE_THRESHOLD),\n/* harmony export */ \"ACTIVE_THRESHOLD\": () => (/* binding */ ACTIVE_THRESHOLD),\n/* harmony export */ \"MODES\": () => (/* binding */ MODES),\n/* harmony export */ \"THEME_FILTER\": () => (/* binding */ THEME_FILTER),\n/* harmony export */ \"URL_QUERY_KEYS\": () => (/* binding */ URL_QUERY_KEYS),\n/* harmony export */ \"URL_HASH_KEYS\": () => (/* binding */ URL_HASH_KEYS),\n/* harmony export */ \"DEFAULT_UI_OPTIONS\": () => (/* binding */ DEFAULT_UI_OPTIONS),\n/* harmony export */ \"MQ_MAX_WIDTH_PORTRAIT\": () => (/* binding */ MQ_MAX_WIDTH_PORTRAIT),\n/* harmony export */ \"MQ_MAX_WIDTH_LANDSCAPE\": () => (/* binding */ MQ_MAX_WIDTH_LANDSCAPE),\n/* harmony export */ \"MQ_MAX_HEIGHT_LANDSCAPE\": () => (/* binding */ MQ_MAX_HEIGHT_LANDSCAPE),\n/* harmony export */ \"MAX_DECIMALS_FOR_SVG_EXPORT\": () => (/* binding */ MAX_DECIMALS_FOR_SVG_EXPORT),\n/* harmony export */ \"EXPORT_SCALES\": () => (/* binding */ EXPORT_SCALES),\n/* harmony export */ \"DEFAULT_EXPORT_PADDING\": () => (/* binding */ DEFAULT_EXPORT_PADDING),\n/* harmony export */ \"DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT\": () => (/* binding */ DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT),\n/* harmony export */ \"ALLOWED_IMAGE_MIME_TYPES\": () => (/* binding */ ALLOWED_IMAGE_MIME_TYPES),\n/* harmony export */ \"MAX_ALLOWED_FILE_BYTES\": () => (/* binding */ MAX_ALLOWED_FILE_BYTES),\n/* harmony export */ \"SVG_NS\": () => (/* binding */ SVG_NS),\n/* harmony export */ \"ENCRYPTION_KEY_BITS\": () => (/* binding */ ENCRYPTION_KEY_BITS),\n/* harmony export */ \"VERSIONS\": () => (/* binding */ VERSIONS),\n/* harmony export */ \"BOUND_TEXT_PADDING\": () => (/* binding */ BOUND_TEXT_PADDING),\n/* harmony export */ \"VERTICAL_ALIGN\": () => (/* binding */ VERTICAL_ALIGN),\n/* harmony export */ \"ELEMENT_READY_TO_ERASE_OPACITY\": () => (/* binding */ ELEMENT_READY_TO_ERASE_OPACITY)\n/* harmony export */ });\n/* harmony import */ var _css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./css/variables.module.scss */ \"../../css/variables.module.scss\");\n/* harmony import */ var _css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0__);\n\r\nconst APP_NAME = \"Excalidraw\";\r\nconst DRAGGING_THRESHOLD = 10; // px\r\nconst LINE_CONFIRM_THRESHOLD = 8; // px\r\nconst ELEMENT_SHIFT_TRANSLATE_AMOUNT = 5;\r\nconst ELEMENT_TRANSLATE_AMOUNT = 1;\r\nconst TEXT_TO_CENTER_SNAP_THRESHOLD = 30;\r\nconst SHIFT_LOCKING_ANGLE = Math.PI / 12;\r\nconst CURSOR_TYPE = {\r\n TEXT: \"text\",\r\n CROSSHAIR: \"crosshair\",\r\n GRABBING: \"grabbing\",\r\n GRAB: \"grab\",\r\n POINTER: \"pointer\",\r\n MOVE: \"move\",\r\n AUTO: \"\",\r\n};\r\nconst POINTER_BUTTON = {\r\n MAIN: 0,\r\n WHEEL: 1,\r\n SECONDARY: 2,\r\n TOUCH: -1,\r\n};\r\nvar EVENT;\r\n(function (EVENT) {\r\n EVENT[\"COPY\"] = \"copy\";\r\n EVENT[\"PASTE\"] = \"paste\";\r\n EVENT[\"CUT\"] = \"cut\";\r\n EVENT[\"KEYDOWN\"] = \"keydown\";\r\n EVENT[\"KEYUP\"] = \"keyup\";\r\n EVENT[\"MOUSE_MOVE\"] = \"mousemove\";\r\n EVENT[\"RESIZE\"] = \"resize\";\r\n EVENT[\"UNLOAD\"] = \"unload\";\r\n EVENT[\"FOCUS\"] = \"focus\";\r\n EVENT[\"BLUR\"] = \"blur\";\r\n EVENT[\"DRAG_OVER\"] = \"dragover\";\r\n EVENT[\"DROP\"] = \"drop\";\r\n EVENT[\"GESTURE_END\"] = \"gestureend\";\r\n EVENT[\"BEFORE_UNLOAD\"] = \"beforeunload\";\r\n EVENT[\"GESTURE_START\"] = \"gesturestart\";\r\n EVENT[\"GESTURE_CHANGE\"] = \"gesturechange\";\r\n EVENT[\"POINTER_MOVE\"] = \"pointermove\";\r\n EVENT[\"POINTER_UP\"] = \"pointerup\";\r\n EVENT[\"STATE_CHANGE\"] = \"statechange\";\r\n EVENT[\"WHEEL\"] = \"wheel\";\r\n EVENT[\"TOUCH_START\"] = \"touchstart\";\r\n EVENT[\"TOUCH_END\"] = \"touchend\";\r\n EVENT[\"HASHCHANGE\"] = \"hashchange\";\r\n EVENT[\"VISIBILITY_CHANGE\"] = \"visibilitychange\";\r\n EVENT[\"SCROLL\"] = \"scroll\";\r\n // custom events\r\n EVENT[\"EXCALIDRAW_LINK\"] = \"excalidraw-link\";\r\n})(EVENT || (EVENT = {}));\r\nconst ENV = {\r\n TEST: \"test\",\r\n DEVELOPMENT: \"development\",\r\n};\r\nconst CLASSES = {\r\n SHAPE_ACTIONS_MENU: \"App-menu__left\",\r\n};\r\n// 1-based in case we ever do `if(element.fontFamily)`\r\nconst FONT_FAMILY = {\r\n Virgil: 1,\r\n Helvetica: 2,\r\n Cascadia: 3,\r\n};\r\nconst THEME = {\r\n LIGHT: \"light\",\r\n DARK: \"dark\",\r\n};\r\nconst WINDOWS_EMOJI_FALLBACK_FONT = \"Segoe UI Emoji\";\r\nconst DEFAULT_FONT_SIZE = 20;\r\nconst DEFAULT_FONT_FAMILY = FONT_FAMILY.Virgil;\r\nconst DEFAULT_TEXT_ALIGN = \"left\";\r\nconst DEFAULT_VERTICAL_ALIGN = \"top\";\r\nconst DEFAULT_VERSION = \"{version}\";\r\nconst CANVAS_ONLY_ACTIONS = [\"selectAll\"];\r\nconst GRID_SIZE = 20; // TODO make it configurable?\r\nconst MIME_TYPES = {\r\n excalidraw: \"application/vnd.excalidraw+json\",\r\n excalidrawlib: \"application/vnd.excalidrawlib+json\",\r\n json: \"application/json\",\r\n svg: \"image/svg+xml\",\r\n \"excalidraw.svg\": \"image/svg+xml\",\r\n png: \"image/png\",\r\n \"excalidraw.png\": \"image/png\",\r\n jpg: \"image/jpeg\",\r\n gif: \"image/gif\",\r\n binary: \"application/octet-stream\",\r\n};\r\nconst EXPORT_DATA_TYPES = {\r\n excalidraw: \"excalidraw\",\r\n excalidrawClipboard: \"excalidraw/clipboard\",\r\n excalidrawLibrary: \"excalidrawlib\",\r\n};\r\nconst EXPORT_SOURCE = window.EXCALIDRAW_EXPORT_SOURCE || window.location.origin;\r\n// time in milliseconds\r\nconst IMAGE_RENDER_TIMEOUT = 500;\r\nconst TAP_TWICE_TIMEOUT = 300;\r\nconst TOUCH_CTX_MENU_TIMEOUT = 500;\r\nconst TITLE_TIMEOUT = 10000;\r\nconst TOAST_TIMEOUT = 5000;\r\nconst VERSION_TIMEOUT = 30000;\r\nconst SCROLL_TIMEOUT = 100;\r\nconst ZOOM_STEP = 0.1;\r\nconst HYPERLINK_TOOLTIP_DELAY = 300;\r\n// Report a user inactive after IDLE_THRESHOLD milliseconds\r\nconst IDLE_THRESHOLD = 60000;\r\n// Report a user active each ACTIVE_THRESHOLD milliseconds\r\nconst ACTIVE_THRESHOLD = 3000;\r\nconst MODES = {\r\n VIEW: \"viewMode\",\r\n ZEN: \"zenMode\",\r\n GRID: \"gridMode\",\r\n};\r\nconst THEME_FILTER = (_css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0___default().themeFilter);\r\nconst URL_QUERY_KEYS = {\r\n addLibrary: \"addLibrary\",\r\n};\r\nconst URL_HASH_KEYS = {\r\n addLibrary: \"addLibrary\",\r\n};\r\nconst DEFAULT_UI_OPTIONS = {\r\n canvasActions: {\r\n changeViewBackgroundColor: true,\r\n clearCanvas: true,\r\n export: { saveFileToDisk: true },\r\n loadScene: true,\r\n saveToActiveFile: true,\r\n theme: true,\r\n saveAsImage: true,\r\n },\r\n};\r\nconst MQ_MAX_WIDTH_PORTRAIT = 800;\r\nconst MQ_MAX_WIDTH_LANDSCAPE = 1000;\r\nconst MQ_MAX_HEIGHT_LANDSCAPE = 500;\r\nconst MAX_DECIMALS_FOR_SVG_EXPORT = 2;\r\nconst EXPORT_SCALES = [1, 2, 3];\r\nconst DEFAULT_EXPORT_PADDING = 10; // px\r\nconst DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT = 1440;\r\nconst ALLOWED_IMAGE_MIME_TYPES = [\r\n MIME_TYPES.png,\r\n MIME_TYPES.jpg,\r\n MIME_TYPES.svg,\r\n MIME_TYPES.gif,\r\n];\r\nconst MAX_ALLOWED_FILE_BYTES = 2 * 1024 * 1024;\r\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\r\nconst ENCRYPTION_KEY_BITS = 128;\r\nconst VERSIONS = {\r\n excalidraw: 2,\r\n excalidrawLibrary: 2,\r\n};\r\nconst BOUND_TEXT_PADDING = 5;\r\nconst VERTICAL_ALIGN = {\r\n TOP: \"top\",\r\n MIDDLE: \"middle\",\r\n BOTTOM: \"bottom\",\r\n};\r\nconst ELEMENT_READY_TO_ERASE_OPACITY = 20;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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S0FBSztJQUNWLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUM7QUFFSyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb25zdGFudHMudHM/NjI1NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3NzVmFyaWFibGVzIGZyb20gXCIuL2Nzcy92YXJpYWJsZXMubW9kdWxlLnNjc3NcIjtcbmltcG9ydCB7IEFwcFByb3BzLCBDYW52YXNBY3Rpb25zLCBFeHBvcnRPcHRzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IEZvbnRGYW1pbHlWYWx1ZXMgfSBmcm9tIFwiLi9lbGVtZW50L3R5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBBUFBfTkFNRSA9IFwiRXhjYWxpZHJhd1wiO1xuXG5leHBvcnQgY29uc3QgRFJBR0dJTkdfVEhSRVNIT0xEID0gMTA7IC8vIHB4XG5leHBvcnQgY29uc3QgTElORV9DT05GSVJNX1RIUkVTSE9MRCA9IDg7IC8vIHB4XG5leHBvcnQgY29uc3QgRUxFTUVOVF9TSElGVF9UUkFOU0xBVEVfQU1PVU5UID0gNTtcbmV4cG9ydCBjb25zdCBFTEVNRU5UX1RSQU5TTEFURV9BTU9VTlQgPSAxO1xuZXhwb3J0IGNvbnN0IFRFWFRfVE9fQ0VOVEVSX1NOQVBfVEhSRVNIT0xEID0gMzA7XG5leHBvcnQgY29uc3QgU0hJRlRfTE9DS0lOR19BTkdMRSA9IE1hdGguUEkgLyAxMjtcbmV4cG9ydCBjb25zdCBDVVJTT1JfVFlQRSA9IHtcbiAgVEVYVDogXCJ0ZXh0XCIsXG4gIENST1NTSEFJUjogXCJjcm9zc2hhaXJcIixcbiAgR1JBQkJJTkc6IFwiZ3JhYmJpbmdcIixcbiAgR1JBQjogXCJncmFiXCIsXG4gIFBPSU5URVI6IFwicG9pbnRlclwiLFxuICBNT1ZFOiBcIm1vdmVcIixcbiAgQVVUTzogXCJcIixcbn07XG5leHBvcnQgY29uc3QgUE9JTlRFUl9CVVRUT04gPSB7XG4gIE1BSU46IDAsXG4gIFdIRUVMOiAxLFxuICBTRUNPTkRBUlk6IDIsXG4gIFRPVUNIOiAtMSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBlbnVtIEVWRU5UIHtcbiAgQ09QWSA9IFwiY29weVwiLFxuICBQQVNURSA9IFwicGFzdGVcIixcbiAgQ1VUID0gXCJjdXRcIixcbiAgS0VZRE9XTiA9IFwia2V5ZG93blwiLFxuICBLRVlVUCA9IFwia2V5dXBcIixcbiAgTU9VU0VfTU9WRSA9IFwibW91c2Vtb3ZlXCIsXG4gIFJFU0laRSA9IFwicmVzaXplXCIsXG4gIFVOTE9BRCA9IFwidW5sb2FkXCIsXG4gIEZPQ1VTID0gXCJmb2N1c1wiLFxuICBCTFVSID0gXCJibHVyXCIsXG4gIERSQUdfT1ZFUiA9IFwiZHJhZ292ZXJcIixcbiAgRFJPUCA9IFwiZHJvcFwiLFxuICBHRVNUVVJFX0VORCA9IFwiZ2VzdHVyZWVuZFwiLFxuICBCRUZPUkVfVU5MT0FEID0gXCJiZWZvcmV1bmxvYWRcIixcbiAgR0VTVFVSRV9TVEFSVCA9IFwiZ2VzdHVyZXN0YXJ0XCIsXG4gIEdFU1RVUkVfQ0hBTkdFID0gXCJnZXN0dXJlY2hhbmdlXCIsXG4gIFBPSU5URVJfTU9WRSA9IFwicG9pbnRlcm1vdmVcIixcbiAgUE9JTlRFUl9VUCA9IFwicG9pbnRlcnVwXCIsXG4gIFNUQVRFX0NIQU5HRSA9IFwic3RhdGVjaGFuZ2VcIixcbiAgV0hFRUwgPSBcIndoZWVsXCIsXG4gIFRPVUNIX1NUQVJUID0gXCJ0b3VjaHN0YXJ0XCIsXG4gIFRPVUNIX0VORCA9IFwidG91Y2hlbmRcIixcbiAgSEFTSENIQU5HRSA9IFwiaGFzaGNoYW5nZVwiLFxuICBWSVNJQklMSVRZX0NIQU5HRSA9IFwidmlzaWJpbGl0eWNoYW5nZVwiLFxuICBTQ1JPTEwgPSBcInNjcm9sbFwiLFxuICAvLyBjdXN0b20gZXZlbnRzXG4gIEVYQ0FMSURSQVdfTElOSyA9IFwiZXhjYWxpZHJhdy1saW5rXCIsXG59XG5cbmV4cG9ydCBjb25zdCBFTlYgPSB7XG4gIFRFU1Q6IFwidGVzdFwiLFxuICBERVZFTE9QTUVOVDogXCJkZXZlbG9wbWVudFwiLFxufTtcblxuZXhwb3J0IGNvbnN0IENMQVNTRVMgPSB7XG4gIFNIQVBFX0FDVElPTlNfTUVOVTogXCJBcHAtbWVudV9fbGVmdFwiLFxufTtcblxuLy8gMS1iYXNlZCBpbiBjYXNlIHdlIGV2ZXIgZG8gYGlmKGVsZW1lbnQuZm9udEZhbWlseSlgXG5leHBvcnQgY29uc3QgRk9OVF9GQU1JTFkgPSB7XG4gIFZpcmdpbDogMSxcbiAgSGVsdmV0aWNhOiAyLFxuICBDYXNjYWRpYTogMyxcbn07XG5cbmV4cG9ydCBjb25zdCBUSEVNRSA9IHtcbiAgTElHSFQ6IFwibGlnaHRcIixcbiAgREFSSzogXCJkYXJrXCIsXG59O1xuXG5leHBvcnQgY29uc3QgV0lORE9XU19FTU9KSV9GQUxMQkFDS19GT05UID0gXCJTZWdvZSBVSSBFbW9qaVwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9GT05UX1NJWkUgPSAyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZPTlRfRkFNSUxZOiBGb250RmFtaWx5VmFsdWVzID0gRk9OVF9GQU1JTFkuVmlyZ2lsO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEVYVF9BTElHTiA9IFwibGVmdFwiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkVSVElDQUxfQUxJR04gPSBcInRvcFwiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkVSU0lPTiA9IFwie3ZlcnNpb259XCI7XG5cbmV4cG9ydCBjb25zdCBDQU5WQVNfT05MWV9BQ1RJT05TID0gW1wic2VsZWN0QWxsXCJdO1xuXG5leHBvcnQgY29uc3QgR1JJRF9TSVpFID0gMjA7IC8vIFRPRE8gbWFrZSBpdCBjb25maWd1cmFibGU/XG5cbmV4cG9ydCBjb25zdCBNSU1FX1RZUEVTID0ge1xuICBleGNhbGlkcmF3OiBcImFwcGxpY2F0aW9uL3ZuZC5leGNhbGlkcmF3K2pzb25cIixcbiAgZXhjYWxpZHJhd2xpYjogXCJhcHBsaWNhdGlvbi92bmQuZXhjYWxpZHJhd2xpYitqc29uXCIsXG4gIGpzb246IFwiYXBwbGljYXRpb24vanNvblwiLFxuICBzdmc6IFwiaW1hZ2Uvc3ZnK3htbFwiLFxuICBcImV4Y2FsaWRyYXcuc3ZnXCI6IFwiaW1hZ2Uvc3ZnK3htbFwiLFxuICBwbmc6IFwiaW1hZ2UvcG5nXCIsXG4gIFwiZXhjYWxpZHJhdy5wbmdcIjogXCJpbWFnZS9wbmdcIixcbiAganBnOiBcImltYWdlL2pwZWdcIixcbiAgZ2lmOiBcImltYWdlL2dpZlwiLFxuICBiaW5hcnk6IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgRVhQT1JUX0RBVEFfVFlQRVMgPSB7XG4gIGV4Y2FsaWRyYXc6IFwiZXhjYWxpZHJhd1wiLFxuICBleGNhbGlkcmF3Q2xpcGJvYXJkOiBcImV4Y2FsaWRyYXcvY2xpcGJvYXJkXCIsXG4gIGV4Y2FsaWRyYXdMaWJyYXJ5OiBcImV4Y2FsaWRyYXdsaWJcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBFWFBPUlRfU09VUkNFID1cbiAgd2luZG93LkVYQ0FMSURSQVdfRVhQT1JUX1NPVVJDRSB8fCB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuXG4vLyB0aW1lIGluIG1pbGxpc2Vjb25kc1xuZXhwb3J0IGNvbnN0IElNQUdFX1JFTkRFUl9USU1FT1VUID0gNTAwO1xuZXhwb3J0IGNvbnN0IFRBUF9UV0lDRV9USU1FT1VUID0gMzAwO1xuZXhwb3J0IGNvbnN0IFRPVUNIX0NUWF9NRU5VX1RJTUVPVVQgPSA1MDA7XG5leHBvcnQgY29uc3QgVElUTEVfVElNRU9VVCA9IDEwMDAwO1xuZXhwb3J0IGNvbnN0IFRPQVNUX1RJTUVPVVQgPSA1MDAwO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fVElNRU9VVCA9IDMwMDAwO1xuZXhwb3J0IGNvbnN0IFNDUk9MTF9USU1FT1VUID0gMTAwO1xuZXhwb3J0IGNvbnN0IFpPT01fU1RFUCA9IDAuMTtcbmV4cG9ydCBjb25zdCBIWVBFUkxJTktfVE9PTFRJUF9ERUxBWSA9IDMwMDtcblxuLy8gUmVwb3J0IGEgdXNlciBpbmFjdGl2ZSBhZnRlciBJRExFX1RIUkVTSE9MRCBtaWxsaXNlY29uZHNcbmV4cG9ydCBjb25zdCBJRExFX1RIUkVTSE9MRCA9IDYwXzAwMDtcbi8vIFJlcG9ydCBhIHVzZXIgYWN0aXZlIGVhY2ggQUNUSVZFX1RIUkVTSE9MRCBtaWxsaXNlY29uZHNcbmV4cG9ydCBjb25zdCBBQ1RJVkVfVEhSRVNIT0xEID0gM18wMDA7XG5cbmV4cG9ydCBjb25zdCBNT0RFUyA9IHtcbiAgVklFVzogXCJ2aWV3TW9kZVwiLFxuICBaRU46IFwiemVuTW9kZVwiLFxuICBHUklEOiBcImdyaWRNb2RlXCIsXG59O1xuXG5leHBvcnQgY29uc3QgVEhFTUVfRklMVEVSID0gY3NzVmFyaWFibGVzLnRoZW1lRmlsdGVyO1xuXG5leHBvcnQgY29uc3QgVVJMX1FVRVJZX0tFWVMgPSB7XG4gIGFkZExpYnJhcnk6IFwiYWRkTGlicmFyeVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFVSTF9IQVNIX0tFWVMgPSB7XG4gIGFkZExpYnJhcnk6IFwiYWRkTGlicmFyeVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVUlfT1BUSU9OUzogTWVyZ2U8XG4gIEFwcFByb3BzW1wiVUlPcHRpb25zXCJdLFxuICB7XG4gICAgY2FudmFzQWN0aW9uczogTWVyZ2U8UmVxdWlyZWQ8Q2FudmFzQWN0aW9ucz4sIHsgZXhwb3J0OiBFeHBvcnRPcHRzIH0+O1xuICB9XG4+ID0ge1xuICBjYW52YXNBY3Rpb25zOiB7XG4gICAgY2hhbmdlVmlld0JhY2tncm91bmRDb2xvcjogdHJ1ZSxcbiAgICBjbGVhckNhbnZhczogdHJ1ZSxcbiAgICBleHBvcnQ6IHsgc2F2ZUZpbGVUb0Rpc2s6IHRydWUgfSxcbiAgICBsb2FkU2NlbmU6IHRydWUsXG4gICAgc2F2ZVRvQWN0aXZlRmlsZTogdHJ1ZSxcbiAgICB0aGVtZTogdHJ1ZSxcbiAgICBzYXZlQXNJbWFnZTogdHJ1ZSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBNUV9NQVhfV0lEVEhfUE9SVFJBSVQgPSA4MDA7XG5leHBvcnQgY29uc3QgTVFfTUFYX1dJRFRIX0xBTkRTQ0FQRSA9IDEwMDA7XG5leHBvcnQgY29uc3QgTVFfTUFYX0hFSUdIVF9MQU5EU0NBUEUgPSA1MDA7XG5cbmV4cG9ydCBjb25zdCBNQVhfREVDSU1BTFNfRk9SX1NWR19FWFBPUlQgPSAyO1xuXG5leHBvcnQgY29uc3QgRVhQT1JUX1NDQUxFUyA9IFsxLCAyLCAzXTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9QQURESU5HID0gMTA7IC8vIHB4XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9JTUFHRV9XSURUSF9PUl9IRUlHSFQgPSAxNDQwO1xuXG5leHBvcnQgY29uc3QgQUxMT1dFRF9JTUFHRV9NSU1FX1RZUEVTID0gW1xuICBNSU1FX1RZUEVTLnBuZyxcbiAgTUlNRV9UWVBFUy5qcGcsXG4gIE1JTUVfVFlQRVMuc3ZnLFxuICBNSU1FX1RZUEVTLmdpZixcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBNQVhfQUxMT1dFRF9GSUxFX0JZVEVTID0gMiAqIDEwMjQgKiAxMDI0O1xuXG5leHBvcnQgY29uc3QgU1ZHX05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuXG5leHBvcnQgY29uc3QgRU5DUllQVElPTl9LRVlfQklUUyA9IDEyODtcblxuZXhwb3J0IGNvbnN0IFZFUlNJT05TID0ge1xuICBleGNhbGlkcmF3OiAyLFxuICBleGNhbGlkcmF3TGlicmFyeTogMixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBCT1VORF9URVhUX1BBRERJTkcgPSA1O1xuXG5leHBvcnQgY29uc3QgVkVSVElDQUxfQUxJR04gPSB7XG4gIFRPUDogXCJ0b3BcIixcbiAgTUlERExFOiBcIm1pZGRsZVwiLFxuICBCT1RUT006IFwiYm90dG9tXCIsXG59O1xuXG5leHBvcnQgY29uc3QgRUxFTUVOVF9SRUFEWV9UT19FUkFTRV9PUEFDSVRZID0gMjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../constants.ts\n");
2401
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"APP_NAME\": () => (/* binding */ APP_NAME),\n/* harmony export */ \"DRAGGING_THRESHOLD\": () => (/* binding */ DRAGGING_THRESHOLD),\n/* harmony export */ \"LINE_CONFIRM_THRESHOLD\": () => (/* binding */ LINE_CONFIRM_THRESHOLD),\n/* harmony export */ \"ELEMENT_SHIFT_TRANSLATE_AMOUNT\": () => (/* binding */ ELEMENT_SHIFT_TRANSLATE_AMOUNT),\n/* harmony export */ \"ELEMENT_TRANSLATE_AMOUNT\": () => (/* binding */ ELEMENT_TRANSLATE_AMOUNT),\n/* harmony export */ \"TEXT_TO_CENTER_SNAP_THRESHOLD\": () => (/* binding */ TEXT_TO_CENTER_SNAP_THRESHOLD),\n/* harmony export */ \"SHIFT_LOCKING_ANGLE\": () => (/* binding */ SHIFT_LOCKING_ANGLE),\n/* harmony export */ \"CURSOR_TYPE\": () => (/* binding */ CURSOR_TYPE),\n/* harmony export */ \"POINTER_BUTTON\": () => (/* binding */ POINTER_BUTTON),\n/* harmony export */ \"EVENT\": () => (/* binding */ EVENT),\n/* harmony export */ \"ENV\": () => (/* binding */ ENV),\n/* harmony export */ \"CLASSES\": () => (/* binding */ CLASSES),\n/* harmony export */ \"FONT_FAMILY\": () => (/* binding */ FONT_FAMILY),\n/* harmony export */ \"THEME\": () => (/* binding */ THEME),\n/* harmony export */ \"WINDOWS_EMOJI_FALLBACK_FONT\": () => (/* binding */ WINDOWS_EMOJI_FALLBACK_FONT),\n/* harmony export */ \"DEFAULT_FONT_SIZE\": () => (/* binding */ DEFAULT_FONT_SIZE),\n/* harmony export */ \"DEFAULT_FONT_FAMILY\": () => (/* binding */ DEFAULT_FONT_FAMILY),\n/* harmony export */ \"DEFAULT_TEXT_ALIGN\": () => (/* binding */ DEFAULT_TEXT_ALIGN),\n/* harmony export */ \"DEFAULT_VERTICAL_ALIGN\": () => (/* binding */ DEFAULT_VERTICAL_ALIGN),\n/* harmony export */ \"DEFAULT_VERSION\": () => (/* binding */ DEFAULT_VERSION),\n/* harmony export */ \"CANVAS_ONLY_ACTIONS\": () => (/* binding */ CANVAS_ONLY_ACTIONS),\n/* harmony export */ \"GRID_SIZE\": () => (/* binding */ GRID_SIZE),\n/* harmony export */ \"MIME_TYPES\": () => (/* binding */ MIME_TYPES),\n/* harmony export */ \"EXPORT_DATA_TYPES\": () => (/* binding */ EXPORT_DATA_TYPES),\n/* harmony export */ \"EXPORT_SOURCE\": () => (/* binding */ EXPORT_SOURCE),\n/* harmony export */ \"IMAGE_RENDER_TIMEOUT\": () => (/* binding */ IMAGE_RENDER_TIMEOUT),\n/* harmony export */ \"TAP_TWICE_TIMEOUT\": () => (/* binding */ TAP_TWICE_TIMEOUT),\n/* harmony export */ \"TOUCH_CTX_MENU_TIMEOUT\": () => (/* binding */ TOUCH_CTX_MENU_TIMEOUT),\n/* harmony export */ \"TITLE_TIMEOUT\": () => (/* binding */ TITLE_TIMEOUT),\n/* harmony export */ \"TOAST_TIMEOUT\": () => (/* binding */ TOAST_TIMEOUT),\n/* harmony export */ \"VERSION_TIMEOUT\": () => (/* binding */ VERSION_TIMEOUT),\n/* harmony export */ \"SCROLL_TIMEOUT\": () => (/* binding */ SCROLL_TIMEOUT),\n/* harmony export */ \"ZOOM_STEP\": () => (/* binding */ ZOOM_STEP),\n/* harmony export */ \"HYPERLINK_TOOLTIP_DELAY\": () => (/* binding */ HYPERLINK_TOOLTIP_DELAY),\n/* harmony export */ \"IDLE_THRESHOLD\": () => (/* binding */ IDLE_THRESHOLD),\n/* harmony export */ \"ACTIVE_THRESHOLD\": () => (/* binding */ ACTIVE_THRESHOLD),\n/* harmony export */ \"MODES\": () => (/* binding */ MODES),\n/* harmony export */ \"THEME_FILTER\": () => (/* binding */ THEME_FILTER),\n/* harmony export */ \"URL_QUERY_KEYS\": () => (/* binding */ URL_QUERY_KEYS),\n/* harmony export */ \"URL_HASH_KEYS\": () => (/* binding */ URL_HASH_KEYS),\n/* harmony export */ \"DEFAULT_UI_OPTIONS\": () => (/* binding */ DEFAULT_UI_OPTIONS),\n/* harmony export */ \"MQ_MAX_WIDTH_PORTRAIT\": () => (/* binding */ MQ_MAX_WIDTH_PORTRAIT),\n/* harmony export */ \"MQ_MAX_WIDTH_LANDSCAPE\": () => (/* binding */ MQ_MAX_WIDTH_LANDSCAPE),\n/* harmony export */ \"MQ_MAX_HEIGHT_LANDSCAPE\": () => (/* binding */ MQ_MAX_HEIGHT_LANDSCAPE),\n/* harmony export */ \"MAX_DECIMALS_FOR_SVG_EXPORT\": () => (/* binding */ MAX_DECIMALS_FOR_SVG_EXPORT),\n/* harmony export */ \"EXPORT_SCALES\": () => (/* binding */ EXPORT_SCALES),\n/* harmony export */ \"DEFAULT_EXPORT_PADDING\": () => (/* binding */ DEFAULT_EXPORT_PADDING),\n/* harmony export */ \"DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT\": () => (/* binding */ DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT),\n/* harmony export */ \"ALLOWED_IMAGE_MIME_TYPES\": () => (/* binding */ ALLOWED_IMAGE_MIME_TYPES),\n/* harmony export */ \"MAX_ALLOWED_FILE_BYTES\": () => (/* binding */ MAX_ALLOWED_FILE_BYTES),\n/* harmony export */ \"SVG_NS\": () => (/* binding */ SVG_NS),\n/* harmony export */ \"ENCRYPTION_KEY_BITS\": () => (/* binding */ ENCRYPTION_KEY_BITS),\n/* harmony export */ \"VERSIONS\": () => (/* binding */ VERSIONS),\n/* harmony export */ \"BOUND_TEXT_PADDING\": () => (/* binding */ BOUND_TEXT_PADDING),\n/* harmony export */ \"VERTICAL_ALIGN\": () => (/* binding */ VERTICAL_ALIGN),\n/* harmony export */ \"ELEMENT_READY_TO_ERASE_OPACITY\": () => (/* binding */ ELEMENT_READY_TO_ERASE_OPACITY),\n/* harmony export */ \"COOKIES\": () => (/* binding */ COOKIES)\n/* harmony export */ });\n/* harmony import */ var _css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./css/variables.module.scss */ \"../../css/variables.module.scss\");\n/* harmony import */ var _css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0__);\n\r\nconst APP_NAME = \"Excalidraw\";\r\nconst DRAGGING_THRESHOLD = 10; // px\r\nconst LINE_CONFIRM_THRESHOLD = 8; // px\r\nconst ELEMENT_SHIFT_TRANSLATE_AMOUNT = 5;\r\nconst ELEMENT_TRANSLATE_AMOUNT = 1;\r\nconst TEXT_TO_CENTER_SNAP_THRESHOLD = 30;\r\nconst SHIFT_LOCKING_ANGLE = Math.PI / 12;\r\nconst CURSOR_TYPE = {\r\n TEXT: \"text\",\r\n CROSSHAIR: \"crosshair\",\r\n GRABBING: \"grabbing\",\r\n GRAB: \"grab\",\r\n POINTER: \"pointer\",\r\n MOVE: \"move\",\r\n AUTO: \"\",\r\n};\r\nconst POINTER_BUTTON = {\r\n MAIN: 0,\r\n WHEEL: 1,\r\n SECONDARY: 2,\r\n TOUCH: -1,\r\n};\r\nvar EVENT;\r\n(function (EVENT) {\r\n EVENT[\"COPY\"] = \"copy\";\r\n EVENT[\"PASTE\"] = \"paste\";\r\n EVENT[\"CUT\"] = \"cut\";\r\n EVENT[\"KEYDOWN\"] = \"keydown\";\r\n EVENT[\"KEYUP\"] = \"keyup\";\r\n EVENT[\"MOUSE_MOVE\"] = \"mousemove\";\r\n EVENT[\"RESIZE\"] = \"resize\";\r\n EVENT[\"UNLOAD\"] = \"unload\";\r\n EVENT[\"FOCUS\"] = \"focus\";\r\n EVENT[\"BLUR\"] = \"blur\";\r\n EVENT[\"DRAG_OVER\"] = \"dragover\";\r\n EVENT[\"DROP\"] = \"drop\";\r\n EVENT[\"GESTURE_END\"] = \"gestureend\";\r\n EVENT[\"BEFORE_UNLOAD\"] = \"beforeunload\";\r\n EVENT[\"GESTURE_START\"] = \"gesturestart\";\r\n EVENT[\"GESTURE_CHANGE\"] = \"gesturechange\";\r\n EVENT[\"POINTER_MOVE\"] = \"pointermove\";\r\n EVENT[\"POINTER_UP\"] = \"pointerup\";\r\n EVENT[\"STATE_CHANGE\"] = \"statechange\";\r\n EVENT[\"WHEEL\"] = \"wheel\";\r\n EVENT[\"TOUCH_START\"] = \"touchstart\";\r\n EVENT[\"TOUCH_END\"] = \"touchend\";\r\n EVENT[\"HASHCHANGE\"] = \"hashchange\";\r\n EVENT[\"VISIBILITY_CHANGE\"] = \"visibilitychange\";\r\n EVENT[\"SCROLL\"] = \"scroll\";\r\n // custom events\r\n EVENT[\"EXCALIDRAW_LINK\"] = \"excalidraw-link\";\r\n})(EVENT || (EVENT = {}));\r\nconst ENV = {\r\n TEST: \"test\",\r\n DEVELOPMENT: \"development\",\r\n};\r\nconst CLASSES = {\r\n SHAPE_ACTIONS_MENU: \"App-menu__left\",\r\n};\r\n// 1-based in case we ever do `if(element.fontFamily)`\r\nconst FONT_FAMILY = {\r\n Virgil: 1,\r\n Helvetica: 2,\r\n Cascadia: 3,\r\n};\r\nconst THEME = {\r\n LIGHT: \"light\",\r\n DARK: \"dark\",\r\n};\r\nconst WINDOWS_EMOJI_FALLBACK_FONT = \"Segoe UI Emoji\";\r\nconst DEFAULT_FONT_SIZE = 20;\r\nconst DEFAULT_FONT_FAMILY = FONT_FAMILY.Virgil;\r\nconst DEFAULT_TEXT_ALIGN = \"left\";\r\nconst DEFAULT_VERTICAL_ALIGN = \"top\";\r\nconst DEFAULT_VERSION = \"{version}\";\r\nconst CANVAS_ONLY_ACTIONS = [\"selectAll\"];\r\nconst GRID_SIZE = 20; // TODO make it configurable?\r\nconst MIME_TYPES = {\r\n excalidraw: \"application/vnd.excalidraw+json\",\r\n excalidrawlib: \"application/vnd.excalidrawlib+json\",\r\n json: \"application/json\",\r\n svg: \"image/svg+xml\",\r\n \"excalidraw.svg\": \"image/svg+xml\",\r\n png: \"image/png\",\r\n \"excalidraw.png\": \"image/png\",\r\n jpg: \"image/jpeg\",\r\n gif: \"image/gif\",\r\n binary: \"application/octet-stream\",\r\n};\r\nconst EXPORT_DATA_TYPES = {\r\n excalidraw: \"excalidraw\",\r\n excalidrawClipboard: \"excalidraw/clipboard\",\r\n excalidrawLibrary: \"excalidrawlib\",\r\n};\r\nconst EXPORT_SOURCE = window.EXCALIDRAW_EXPORT_SOURCE || window.location.origin;\r\n// time in milliseconds\r\nconst IMAGE_RENDER_TIMEOUT = 500;\r\nconst TAP_TWICE_TIMEOUT = 300;\r\nconst TOUCH_CTX_MENU_TIMEOUT = 500;\r\nconst TITLE_TIMEOUT = 10000;\r\nconst TOAST_TIMEOUT = 5000;\r\nconst VERSION_TIMEOUT = 30000;\r\nconst SCROLL_TIMEOUT = 100;\r\nconst ZOOM_STEP = 0.1;\r\nconst HYPERLINK_TOOLTIP_DELAY = 300;\r\n// Report a user inactive after IDLE_THRESHOLD milliseconds\r\nconst IDLE_THRESHOLD = 60000;\r\n// Report a user active each ACTIVE_THRESHOLD milliseconds\r\nconst ACTIVE_THRESHOLD = 3000;\r\nconst MODES = {\r\n VIEW: \"viewMode\",\r\n ZEN: \"zenMode\",\r\n GRID: \"gridMode\",\r\n};\r\nconst THEME_FILTER = (_css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0___default().themeFilter);\r\nconst URL_QUERY_KEYS = {\r\n addLibrary: \"addLibrary\",\r\n};\r\nconst URL_HASH_KEYS = {\r\n addLibrary: \"addLibrary\",\r\n};\r\nconst DEFAULT_UI_OPTIONS = {\r\n canvasActions: {\r\n changeViewBackgroundColor: true,\r\n clearCanvas: true,\r\n export: { saveFileToDisk: true },\r\n loadScene: true,\r\n saveToActiveFile: true,\r\n theme: true,\r\n saveAsImage: true,\r\n },\r\n};\r\nconst MQ_MAX_WIDTH_PORTRAIT = 800;\r\nconst MQ_MAX_WIDTH_LANDSCAPE = 1000;\r\nconst MQ_MAX_HEIGHT_LANDSCAPE = 500;\r\nconst MAX_DECIMALS_FOR_SVG_EXPORT = 2;\r\nconst EXPORT_SCALES = [1, 2, 3];\r\nconst DEFAULT_EXPORT_PADDING = 10; // px\r\nconst DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT = 1440;\r\nconst ALLOWED_IMAGE_MIME_TYPES = [\r\n MIME_TYPES.png,\r\n MIME_TYPES.jpg,\r\n MIME_TYPES.svg,\r\n MIME_TYPES.gif,\r\n];\r\nconst MAX_ALLOWED_FILE_BYTES = 2 * 1024 * 1024;\r\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\r\nconst ENCRYPTION_KEY_BITS = 128;\r\nconst VERSIONS = {\r\n excalidraw: 2,\r\n excalidrawLibrary: 2,\r\n};\r\nconst BOUND_TEXT_PADDING = 5;\r\nconst VERTICAL_ALIGN = {\r\n TOP: \"top\",\r\n MIDDLE: \"middle\",\r\n BOTTOM: \"bottom\",\r\n};\r\nconst ELEMENT_READY_TO_ERASE_OPACITY = 20;\r\nconst COOKIES = {\r\n AUTH_STATE_COOKIE: \"excplus-auth\",\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEtBQUs7SUFDVixNQUFNLEVBQUUsUUFBUTtJQUNoQixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBRUssTUFBTSw4QkFBOEIsR0FBRyxFQUFFLENBQUM7QUFFMUMsTUFBTSxPQUFPLEdBQUc7SUFDckIsaUJBQWlCLEVBQUUsY0FBYztDQUN6QixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbnN0YW50cy50cz82MjU0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjc3NWYXJpYWJsZXMgZnJvbSBcIi4vY3NzL3ZhcmlhYmxlcy5tb2R1bGUuc2Nzc1wiO1xuaW1wb3J0IHsgQXBwUHJvcHMsIENhbnZhc0FjdGlvbnMsIEV4cG9ydE9wdHMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgRm9udEZhbWlseVZhbHVlcyB9IGZyb20gXCIuL2VsZW1lbnQvdHlwZXNcIjtcblxuZXhwb3J0IGNvbnN0IEFQUF9OQU1FID0gXCJFeGNhbGlkcmF3XCI7XG5cbmV4cG9ydCBjb25zdCBEUkFHR0lOR19USFJFU0hPTEQgPSAxMDsgLy8gcHhcbmV4cG9ydCBjb25zdCBMSU5FX0NPTkZJUk1fVEhSRVNIT0xEID0gODsgLy8gcHhcbmV4cG9ydCBjb25zdCBFTEVNRU5UX1NISUZUX1RSQU5TTEFURV9BTU9VTlQgPSA1O1xuZXhwb3J0IGNvbnN0IEVMRU1FTlRfVFJBTlNMQVRFX0FNT1VOVCA9IDE7XG5leHBvcnQgY29uc3QgVEVYVF9UT19DRU5URVJfU05BUF9USFJFU0hPTEQgPSAzMDtcbmV4cG9ydCBjb25zdCBTSElGVF9MT0NLSU5HX0FOR0xFID0gTWF0aC5QSSAvIDEyO1xuZXhwb3J0IGNvbnN0IENVUlNPUl9UWVBFID0ge1xuICBURVhUOiBcInRleHRcIixcbiAgQ1JPU1NIQUlSOiBcImNyb3NzaGFpclwiLFxuICBHUkFCQklORzogXCJncmFiYmluZ1wiLFxuICBHUkFCOiBcImdyYWJcIixcbiAgUE9JTlRFUjogXCJwb2ludGVyXCIsXG4gIE1PVkU6IFwibW92ZVwiLFxuICBBVVRPOiBcIlwiLFxufTtcbmV4cG9ydCBjb25zdCBQT0lOVEVSX0JVVFRPTiA9IHtcbiAgTUFJTjogMCxcbiAgV0hFRUw6IDEsXG4gIFNFQ09OREFSWTogMixcbiAgVE9VQ0g6IC0xLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGVudW0gRVZFTlQge1xuICBDT1BZID0gXCJjb3B5XCIsXG4gIFBBU1RFID0gXCJwYXN0ZVwiLFxuICBDVVQgPSBcImN1dFwiLFxuICBLRVlET1dOID0gXCJrZXlkb3duXCIsXG4gIEtFWVVQID0gXCJrZXl1cFwiLFxuICBNT1VTRV9NT1ZFID0gXCJtb3VzZW1vdmVcIixcbiAgUkVTSVpFID0gXCJyZXNpemVcIixcbiAgVU5MT0FEID0gXCJ1bmxvYWRcIixcbiAgRk9DVVMgPSBcImZvY3VzXCIsXG4gIEJMVVIgPSBcImJsdXJcIixcbiAgRFJBR19PVkVSID0gXCJkcmFnb3ZlclwiLFxuICBEUk9QID0gXCJkcm9wXCIsXG4gIEdFU1RVUkVfRU5EID0gXCJnZXN0dXJlZW5kXCIsXG4gIEJFRk9SRV9VTkxPQUQgPSBcImJlZm9yZXVubG9hZFwiLFxuICBHRVNUVVJFX1NUQVJUID0gXCJnZXN0dXJlc3RhcnRcIixcbiAgR0VTVFVSRV9DSEFOR0UgPSBcImdlc3R1cmVjaGFuZ2VcIixcbiAgUE9JTlRFUl9NT1ZFID0gXCJwb2ludGVybW92ZVwiLFxuICBQT0lOVEVSX1VQID0gXCJwb2ludGVydXBcIixcbiAgU1RBVEVfQ0hBTkdFID0gXCJzdGF0ZWNoYW5nZVwiLFxuICBXSEVFTCA9IFwid2hlZWxcIixcbiAgVE9VQ0hfU1RBUlQgPSBcInRvdWNoc3RhcnRcIixcbiAgVE9VQ0hfRU5EID0gXCJ0b3VjaGVuZFwiLFxuICBIQVNIQ0hBTkdFID0gXCJoYXNoY2hhbmdlXCIsXG4gIFZJU0lCSUxJVFlfQ0hBTkdFID0gXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsXG4gIFNDUk9MTCA9IFwic2Nyb2xsXCIsXG4gIC8vIGN1c3RvbSBldmVudHNcbiAgRVhDQUxJRFJBV19MSU5LID0gXCJleGNhbGlkcmF3LWxpbmtcIixcbn1cblxuZXhwb3J0IGNvbnN0IEVOViA9IHtcbiAgVEVTVDogXCJ0ZXN0XCIsXG4gIERFVkVMT1BNRU5UOiBcImRldmVsb3BtZW50XCIsXG59O1xuXG5leHBvcnQgY29uc3QgQ0xBU1NFUyA9IHtcbiAgU0hBUEVfQUNUSU9OU19NRU5VOiBcIkFwcC1tZW51X19sZWZ0XCIsXG59O1xuXG4vLyAxLWJhc2VkIGluIGNhc2Ugd2UgZXZlciBkbyBgaWYoZWxlbWVudC5mb250RmFtaWx5KWBcbmV4cG9ydCBjb25zdCBGT05UX0ZBTUlMWSA9IHtcbiAgVmlyZ2lsOiAxLFxuICBIZWx2ZXRpY2E6IDIsXG4gIENhc2NhZGlhOiAzLFxufTtcblxuZXhwb3J0IGNvbnN0IFRIRU1FID0ge1xuICBMSUdIVDogXCJsaWdodFwiLFxuICBEQVJLOiBcImRhcmtcIixcbn07XG5cbmV4cG9ydCBjb25zdCBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQgPSBcIlNlZ29lIFVJIEVtb2ppXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZPTlRfU0laRSA9IDIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRk9OVF9GQU1JTFk6IEZvbnRGYW1pbHlWYWx1ZXMgPSBGT05UX0ZBTUlMWS5WaXJnaWw7XG5leHBvcnQgY29uc3QgREVGQVVMVF9URVhUX0FMSUdOID0gXCJsZWZ0XCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9WRVJUSUNBTF9BTElHTiA9IFwidG9wXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9WRVJTSU9OID0gXCJ7dmVyc2lvbn1cIjtcblxuZXhwb3J0IGNvbnN0IENBTlZBU19PTkxZX0FDVElPTlMgPSBbXCJzZWxlY3RBbGxcIl07XG5cbmV4cG9ydCBjb25zdCBHUklEX1NJWkUgPSAyMDsgLy8gVE9ETyBtYWtlIGl0IGNvbmZpZ3VyYWJsZT9cblxuZXhwb3J0IGNvbnN0IE1JTUVfVFlQRVMgPSB7XG4gIGV4Y2FsaWRyYXc6IFwiYXBwbGljYXRpb24vdm5kLmV4Y2FsaWRyYXcranNvblwiLFxuICBleGNhbGlkcmF3bGliOiBcImFwcGxpY2F0aW9uL3ZuZC5leGNhbGlkcmF3bGliK2pzb25cIixcbiAganNvbjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gIHN2ZzogXCJpbWFnZS9zdmcreG1sXCIsXG4gIFwiZXhjYWxpZHJhdy5zdmdcIjogXCJpbWFnZS9zdmcreG1sXCIsXG4gIHBuZzogXCJpbWFnZS9wbmdcIixcbiAgXCJleGNhbGlkcmF3LnBuZ1wiOiBcImltYWdlL3BuZ1wiLFxuICBqcGc6IFwiaW1hZ2UvanBlZ1wiLFxuICBnaWY6IFwiaW1hZ2UvZ2lmXCIsXG4gIGJpbmFyeTogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBFWFBPUlRfREFUQV9UWVBFUyA9IHtcbiAgZXhjYWxpZHJhdzogXCJleGNhbGlkcmF3XCIsXG4gIGV4Y2FsaWRyYXdDbGlwYm9hcmQ6IFwiZXhjYWxpZHJhdy9jbGlwYm9hcmRcIixcbiAgZXhjYWxpZHJhd0xpYnJhcnk6IFwiZXhjYWxpZHJhd2xpYlwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9TT1VSQ0UgPVxuICB3aW5kb3cuRVhDQUxJRFJBV19FWFBPUlRfU09VUkNFIHx8IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG5cbi8vIHRpbWUgaW4gbWlsbGlzZWNvbmRzXG5leHBvcnQgY29uc3QgSU1BR0VfUkVOREVSX1RJTUVPVVQgPSA1MDA7XG5leHBvcnQgY29uc3QgVEFQX1RXSUNFX1RJTUVPVVQgPSAzMDA7XG5leHBvcnQgY29uc3QgVE9VQ0hfQ1RYX01FTlVfVElNRU9VVCA9IDUwMDtcbmV4cG9ydCBjb25zdCBUSVRMRV9USU1FT1VUID0gMTAwMDA7XG5leHBvcnQgY29uc3QgVE9BU1RfVElNRU9VVCA9IDUwMDA7XG5leHBvcnQgY29uc3QgVkVSU0lPTl9USU1FT1VUID0gMzAwMDA7XG5leHBvcnQgY29uc3QgU0NST0xMX1RJTUVPVVQgPSAxMDA7XG5leHBvcnQgY29uc3QgWk9PTV9TVEVQID0gMC4xO1xuZXhwb3J0IGNvbnN0IEhZUEVSTElOS19UT09MVElQX0RFTEFZID0gMzAwO1xuXG4vLyBSZXBvcnQgYSB1c2VyIGluYWN0aXZlIGFmdGVyIElETEVfVEhSRVNIT0xEIG1pbGxpc2Vjb25kc1xuZXhwb3J0IGNvbnN0IElETEVfVEhSRVNIT0xEID0gNjBfMDAwO1xuLy8gUmVwb3J0IGEgdXNlciBhY3RpdmUgZWFjaCBBQ1RJVkVfVEhSRVNIT0xEIG1pbGxpc2Vjb25kc1xuZXhwb3J0IGNvbnN0IEFDVElWRV9USFJFU0hPTEQgPSAzXzAwMDtcblxuZXhwb3J0IGNvbnN0IE1PREVTID0ge1xuICBWSUVXOiBcInZpZXdNb2RlXCIsXG4gIFpFTjogXCJ6ZW5Nb2RlXCIsXG4gIEdSSUQ6IFwiZ3JpZE1vZGVcIixcbn07XG5cbmV4cG9ydCBjb25zdCBUSEVNRV9GSUxURVIgPSBjc3NWYXJpYWJsZXMudGhlbWVGaWx0ZXI7XG5cbmV4cG9ydCBjb25zdCBVUkxfUVVFUllfS0VZUyA9IHtcbiAgYWRkTGlicmFyeTogXCJhZGRMaWJyYXJ5XCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgVVJMX0hBU0hfS0VZUyA9IHtcbiAgYWRkTGlicmFyeTogXCJhZGRMaWJyYXJ5XCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9VSV9PUFRJT05TOiBNZXJnZTxcbiAgQXBwUHJvcHNbXCJVSU9wdGlvbnNcIl0sXG4gIHtcbiAgICBjYW52YXNBY3Rpb25zOiBNZXJnZTxSZXF1aXJlZDxDYW52YXNBY3Rpb25zPiwgeyBleHBvcnQ6IEV4cG9ydE9wdHMgfT47XG4gIH1cbj4gPSB7XG4gIGNhbnZhc0FjdGlvbnM6IHtcbiAgICBjaGFuZ2VWaWV3QmFja2dyb3VuZENvbG9yOiB0cnVlLFxuICAgIGNsZWFyQ2FudmFzOiB0cnVlLFxuICAgIGV4cG9ydDogeyBzYXZlRmlsZVRvRGlzazogdHJ1ZSB9LFxuICAgIGxvYWRTY2VuZTogdHJ1ZSxcbiAgICBzYXZlVG9BY3RpdmVGaWxlOiB0cnVlLFxuICAgIHRoZW1lOiB0cnVlLFxuICAgIHNhdmVBc0ltYWdlOiB0cnVlLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IE1RX01BWF9XSURUSF9QT1JUUkFJVCA9IDgwMDtcbmV4cG9ydCBjb25zdCBNUV9NQVhfV0lEVEhfTEFORFNDQVBFID0gMTAwMDtcbmV4cG9ydCBjb25zdCBNUV9NQVhfSEVJR0hUX0xBTkRTQ0FQRSA9IDUwMDtcblxuZXhwb3J0IGNvbnN0IE1BWF9ERUNJTUFMU19GT1JfU1ZHX0VYUE9SVCA9IDI7XG5cbmV4cG9ydCBjb25zdCBFWFBPUlRfU0NBTEVTID0gWzEsIDIsIDNdO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX1BBRERJTkcgPSAxMDsgLy8gcHhcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0lNQUdFX1dJRFRIX09SX0hFSUdIVCA9IDE0NDA7XG5cbmV4cG9ydCBjb25zdCBBTExPV0VEX0lNQUdFX01JTUVfVFlQRVMgPSBbXG4gIE1JTUVfVFlQRVMucG5nLFxuICBNSU1FX1RZUEVTLmpwZyxcbiAgTUlNRV9UWVBFUy5zdmcsXG4gIE1JTUVfVFlQRVMuZ2lmLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IE1BWF9BTExPV0VEX0ZJTEVfQllURVMgPSAyICogMTAyNCAqIDEwMjQ7XG5cbmV4cG9ydCBjb25zdCBTVkdfTlMgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG5cbmV4cG9ydCBjb25zdCBFTkNSWVBUSU9OX0tFWV9CSVRTID0gMTI4O1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTlMgPSB7XG4gIGV4Y2FsaWRyYXc6IDIsXG4gIGV4Y2FsaWRyYXdMaWJyYXJ5OiAyLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEJPVU5EX1RFWFRfUEFERElORyA9IDU7XG5cbmV4cG9ydCBjb25zdCBWRVJUSUNBTF9BTElHTiA9IHtcbiAgVE9QOiBcInRvcFwiLFxuICBNSURETEU6IFwibWlkZGxlXCIsXG4gIEJPVFRPTTogXCJib3R0b21cIixcbn07XG5cbmV4cG9ydCBjb25zdCBFTEVNRU5UX1JFQURZX1RPX0VSQVNFX09QQUNJVFkgPSAyMDtcblxuZXhwb3J0IGNvbnN0IENPT0tJRVMgPSB7XG4gIEFVVEhfU1RBVEVfQ09PS0lFOiBcImV4Y3BsdXMtYXV0aFwiLFxufSBhcyBjb25zdDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../constants.ts\n");
2402
2402
 
2403
2403
  /***/ }),
2404
2404
 
@@ -2904,7 +2904,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2904
2904
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2905
2905
 
2906
2906
  "use strict";
2907
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\r\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\r\n /* eslint-disable */\r\n /* global __webpack_public_path__:writable */\r\n __webpack_require__.p =\r\n window.EXCALIDRAW_ASSET_PATH ||\r\n `https://unpkg.com/${\"@dwelle/excalidraw\"}@${\"0.3.64\"}/dist/`;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBQ3RDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUNwQiw2Q0FBNkM7SUFDN0MscUJBQXVCO1FBQ3JCLE1BQU0sQ0FBQyxxQkFBcUI7WUFDNUIscUJBQXFCLG9CQUFvQixJQUFJLFFBQXVCLFFBQVEsQ0FBQztDQUNoRiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3B1YmxpY1BhdGguanM/YTg3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTlYgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IEVOVi5URVNUKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlICovXG4gIC8qIGdsb2JhbCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXzp3cml0YWJsZSAqL1xuICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9XG4gICAgd2luZG93LkVYQ0FMSURSQVdfQVNTRVRfUEFUSCB8fFxuICAgIGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlBLR19OQU1FfUAke3Byb2Nlc3MuZW52LlBLR19WRVJTSU9OfS9kaXN0L2A7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./publicPath.js\n");
2907
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\r\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\r\n /* eslint-disable */\r\n /* global __webpack_public_path__:writable */\r\n __webpack_require__.p =\r\n window.EXCALIDRAW_ASSET_PATH ||\r\n `https://unpkg.com/${\"@dwelle/excalidraw\"}@${\"0.3.65\"}/dist/`;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBQ3RDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUNwQiw2Q0FBNkM7SUFDN0MscUJBQXVCO1FBQ3JCLE1BQU0sQ0FBQyxxQkFBcUI7WUFDNUIscUJBQXFCLG9CQUFvQixJQUFJLFFBQXVCLFFBQVEsQ0FBQztDQUNoRiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3B1YmxpY1BhdGguanM/YTg3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTlYgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IEVOVi5URVNUKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlICovXG4gIC8qIGdsb2JhbCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXzp3cml0YWJsZSAqL1xuICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9XG4gICAgd2luZG93LkVYQ0FMSURSQVdfQVNTRVRfUEFUSCB8fFxuICAgIGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlBLR19OQU1FfUAke3Byb2Nlc3MuZW52LlBLR19WRVJTSU9OfS9kaXN0L2A7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./publicPath.js\n");
2908
2908
 
2909
2909
  /***/ }),
2910
2910
 
@@ -3014,7 +3014,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3014
3014
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3015
3015
 
3016
3016
  "use strict";
3017
- 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) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\r\nconst exportToCanvas = (elements, appState, files, { exportBackground, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, }, createCanvas = (width, height) => {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = width * appState.exportScale;\r\n canvas.height = height * appState.exportScale;\r\n return { canvas, scale: appState.exportScale };\r\n}) => __awaiter(void 0, void 0, void 0, function* () {\r\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\r\n const { canvas, scale = 1 } = createCanvas(width, height);\r\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\r\n const { imageCache } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.updateImageCache)({\r\n imageCache: new Map(),\r\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.getInitializedImageElements)(elements).map((element) => element.fileId),\r\n files,\r\n });\r\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderScene)(elements, appState, null, scale, roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas), canvas, {\r\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\r\n scrollX: -minX + exportPadding,\r\n scrollY: -minY + exportPadding,\r\n zoom: defaultAppState.zoom,\r\n remotePointerViewportCoords: {},\r\n remoteSelectedElementIds: {},\r\n shouldCacheIgnoreZoom: false,\r\n remotePointerUsernames: {},\r\n remotePointerUserStates: {},\r\n theme: appState.exportWithDarkMode ? \"dark\" : \"light\",\r\n imageCache,\r\n renderScrollbars: false,\r\n renderSelection: false,\r\n renderGrid: false,\r\n isExporting: true,\r\n });\r\n return canvas;\r\n});\r\nconst exportToSvg = (elements, appState, files) => __awaiter(void 0, void 0, void 0, function* () {\r\n const { exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, exportScale = 1, exportEmbedScene, } = appState;\r\n let metadata = \"\";\r\n if (exportEmbedScene) {\r\n try {\r\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \"../../data/image.ts\"))).encodeSvgMetadata({\r\n text: (0,_data_json__WEBPACK_IMPORTED_MODULE_6__.serializeAsJSON)(elements, appState, files || {}, \"local\"),\r\n });\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\r\n // initialize SVG root\r\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"svg\");\r\n svgRoot.setAttribute(\"version\", \"1.1\");\r\n svgRoot.setAttribute(\"xmlns\", _constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS);\r\n svgRoot.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\r\n svgRoot.setAttribute(\"width\", `${width * exportScale}`);\r\n svgRoot.setAttribute(\"height\", `${height * exportScale}`);\r\n if (appState.exportWithDarkMode) {\r\n svgRoot.setAttribute(\"filter\", _constants__WEBPACK_IMPORTED_MODULE_4__.THEME_FILTER);\r\n }\r\n let assetPath = \"https://excalidraw.com/\";\r\n // Asset path needs to be determined only when using package\r\n if (true) {\r\n assetPath =\r\n window.EXCALIDRAW_ASSET_PATH ||\r\n `https://unpkg.com/${\"@dwelle/excalidraw\"}@${\"0.3.64\"}`;\r\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\"/\")) {\r\n assetPath = assetPath.replace(\"/\", `${window.location.origin}/`);\r\n }\r\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\r\n }\r\n svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style>\n @font-face {\n font-family: \"Virgil\";\n src: url(\"https://excalidraw.com/Virgil.woff2\");\n }\n @font-face {\n font-family: \"Cascadia\";\n src: url(\"https://excalidraw.com/Cascadia.woff2\");\n }\n </style>\n </defs>\n `;\r\n // render background rect\r\n if (appState.exportBackground && viewBackgroundColor) {\r\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"rect\");\r\n rect.setAttribute(\"x\", \"0\");\r\n rect.setAttribute(\"y\", \"0\");\r\n rect.setAttribute(\"width\", `${width}`);\r\n rect.setAttribute(\"height\", `${height}`);\r\n rect.setAttribute(\"fill\", viewBackgroundColor);\r\n svgRoot.appendChild(rect);\r\n }\r\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].svg(svgRoot);\r\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\r\n offsetX: -minX + exportPadding,\r\n offsetY: -minY + exportPadding,\r\n exportWithDarkMode: appState.exportWithDarkMode,\r\n });\r\n return svgRoot;\r\n});\r\n// calculate smallest area to fit the contents in\r\nconst getCanvasSize = (elements, exportPadding) => {\r\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(elements);\r\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minX, maxX) + exportPadding * 2;\r\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + exportPadding + exportPadding;\r\n return [minX, minY, width, height];\r\n};\r\nconst getExportSize = (elements, exportPadding, scale) => {\r\n const [, , width, height] = getCanvasSize(elements, exportPadding).map((dimension) => Math.trunc(dimension * scale));\r\n return [width, height];\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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dC50cz85YmY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb3VnaCBmcm9tIFwicm91Z2hqcy9iaW4vcm91Z2hcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRDb21tb25Cb3VuZHMgfSBmcm9tIFwiLi4vZWxlbWVudC9ib3VuZHNcIjtcbmltcG9ydCB7IHJlbmRlclNjZW5lLCByZW5kZXJTY2VuZVRvU3ZnIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlclNjZW5lXCI7XG5pbXBvcnQgeyBkaXN0YW5jZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIEJpbmFyeUZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VYUE9SVF9QQURESU5HLCBTVkdfTlMsIFRIRU1FX0ZJTFRFUiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRBcHBTdGF0ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHsgc2VyaWFsaXplQXNKU09OIH0gZnJvbSBcIi4uL2RhdGEvanNvblwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzLFxuICB1cGRhdGVJbWFnZUNhY2hlLFxufSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuXG5leHBvcnQgY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgZmlsZXM6IEJpbmFyeUZpbGVzLFxuICB7XG4gICAgZXhwb3J0QmFja2dyb3VuZCxcbiAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICB9OiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgfSxcbiAgY3JlYXRlQ2FudmFzOiAoXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgKSA9PiB7IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7IHNjYWxlOiBudW1iZXIgfSA9ICh3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGFwcFN0YXRlLmV4cG9ydFNjYWxlO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICByZXR1cm4geyBjYW52YXMsIHNjYWxlOiBhcHBTdGF0ZS5leHBvcnRTY2FsZSB9O1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpO1xuXG4gIGNvbnN0IHsgY2FudmFzLCBzY2FsZSA9IDEgfSA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcblxuICBjb25zdCBkZWZhdWx0QXBwU3RhdGUgPSBnZXREZWZhdWx0QXBwU3RhdGUoKTtcblxuICBjb25zdCB7IGltYWdlQ2FjaGUgfSA9IGF3YWl0IHVwZGF0ZUltYWdlQ2FjaGUoe1xuICAgIGltYWdlQ2FjaGU6IG5ldyBNYXAoKSxcbiAgICBmaWxlSWRzOiBnZXRJbml0aWFsaXplZEltYWdlRWxlbWVudHMoZWxlbWVudHMpLm1hcChcbiAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50LmZpbGVJZCxcbiAgICApLFxuICAgIGZpbGVzLFxuICB9KTtcblxuICByZW5kZXJTY2VuZShlbGVtZW50cywgYXBwU3RhdGUsIG51bGwsIHNjYWxlLCByb3VnaC5jYW52YXMoY2FudmFzKSwgY2FudmFzLCB7XG4gICAgdmlld0JhY2tncm91bmRDb2xvcjogZXhwb3J0QmFja2dyb3VuZCA/IHZpZXdCYWNrZ3JvdW5kQ29sb3IgOiBudWxsLFxuICAgIHNjcm9sbFg6IC1taW5YICsgZXhwb3J0UGFkZGluZyxcbiAgICBzY3JvbGxZOiAtbWluWSArIGV4cG9ydFBhZGRpbmcsXG4gICAgem9vbTogZGVmYXVsdEFwcFN0YXRlLnpvb20sXG4gICAgcmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzOiB7fSxcbiAgICByZW1vdGVTZWxlY3RlZEVsZW1lbnRJZHM6IHt9LFxuICAgIHNob3VsZENhY2hlSWdub3JlWm9vbTogZmFsc2UsXG4gICAgcmVtb3RlUG9pbnRlclVzZXJuYW1lczoge30sXG4gICAgcmVtb3RlUG9pbnRlclVzZXJTdGF0ZXM6IHt9LFxuICAgIHRoZW1lOiBhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUgPyBcImRhcmtcIiA6IFwibGlnaHRcIixcbiAgICBpbWFnZUNhY2hlLFxuICAgIHJlbmRlclNjcm9sbGJhcnM6IGZhbHNlLFxuICAgIHJlbmRlclNlbGVjdGlvbjogZmFsc2UsXG4gICAgcmVuZGVyR3JpZDogZmFsc2UsXG4gICAgaXNFeHBvcnRpbmc6IHRydWUsXG4gIH0pO1xuXG4gIHJldHVybiBjYW52YXM7XG59O1xuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9TdmcgPSBhc3luYyAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgYXBwU3RhdGU6IHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kOiBib29sZWFuO1xuICAgIGV4cG9ydFBhZGRpbmc/OiBudW1iZXI7XG4gICAgZXhwb3J0U2NhbGU/OiBudW1iZXI7XG4gICAgdmlld0JhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIGV4cG9ydFdpdGhEYXJrTW9kZT86IGJvb2xlYW47XG4gICAgZXhwb3J0RW1iZWRTY2VuZT86IGJvb2xlYW47XG4gIH0sXG4gIGZpbGVzOiBCaW5hcnlGaWxlcyB8IG51bGwsXG4pOiBQcm9taXNlPFNWR1NWR0VsZW1lbnQ+ID0+IHtcbiAgY29uc3Qge1xuICAgIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgZXhwb3J0U2NhbGUgPSAxLFxuICAgIGV4cG9ydEVtYmVkU2NlbmUsXG4gIH0gPSBhcHBTdGF0ZTtcbiAgbGV0IG1ldGFkYXRhID0gXCJcIjtcbiAgaWYgKGV4cG9ydEVtYmVkU2NlbmUpIHtcbiAgICB0cnkge1xuICAgICAgbWV0YWRhdGEgPSBhd2FpdCAoXG4gICAgICAgIGF3YWl0IGltcG9ydCgvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImltYWdlXCIgKi8gXCIuLi8uLi9zcmMvZGF0YS9pbWFnZVwiKVxuICAgICAgKS5lbmNvZGVTdmdNZXRhZGF0YSh7XG4gICAgICAgIHRleHQ6IHNlcmlhbGl6ZUFzSlNPTihlbGVtZW50cywgYXBwU3RhdGUsIGZpbGVzIHx8IHt9LCBcImxvY2FsXCIpLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpO1xuXG4gIC8vIGluaXRpYWxpemUgU1ZHIHJvb3RcbiAgY29uc3Qgc3ZnUm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwic3ZnXCIpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZlcnNpb25cIiwgXCIxLjFcIik7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwieG1sbnNcIiwgU1ZHX05TKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIGAwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YCk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYCR7d2lkdGggKiBleHBvcnRTY2FsZX1gKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgYCR7aGVpZ2h0ICogZXhwb3J0U2NhbGV9YCk7XG4gIGlmIChhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUpIHtcbiAgICBzdmdSb290LnNldEF0dHJpYnV0ZShcImZpbHRlclwiLCBUSEVNRV9GSUxURVIpO1xuICB9XG5cbiAgbGV0IGFzc2V0UGF0aCA9IFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9cIjtcblxuICAvLyBBc3NldCBwYXRoIG5lZWRzIHRvIGJlIGRldGVybWluZWQgb25seSB3aGVuIHVzaW5nIHBhY2thZ2VcbiAgaWYgKHByb2Nlc3MuZW52LklTX0VYQ0FMSURSQVdfTlBNX1BBQ0tBR0UpIHtcbiAgICBhc3NldFBhdGggPVxuICAgICAgd2luZG93LkVYQ0FMSURSQVdfQVNTRVRfUEFUSCB8fFxuICAgICAgYGh0dHBzOi8vdW5wa2cuY29tLyR7cHJvY2Vzcy5lbnYuUEtHX05BTUV9QCR7cHJvY2Vzcy5lbnYuUEtHX1ZFUlNJT059YDtcblxuICAgIGlmIChhc3NldFBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICBhc3NldFBhdGggPSBhc3NldFBhdGgucmVwbGFjZShcIi9cIiwgYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYCk7XG4gICAgfVxuICAgIGFzc2V0UGF0aCA9IGAke2Fzc2V0UGF0aH0vZGlzdC9leGNhbGlkcmF3LWFzc2V0cy9gO1xuICB9XG4gIHN2Z1Jvb3QuaW5uZXJIVE1MID0gYFxuICAke1NWR19FWFBPUlRfVEFHfVxuICAke21ldGFkYXRhfVxuICA8ZGVmcz5cbiAgICA8c3R5bGU+XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiVmlyZ2lsXCI7XG4gICAgICAgIHNyYzogdXJsKFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9WaXJnaWwud29mZjJcIik7XG4gICAgICB9XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiQ2FzY2FkaWFcIjtcbiAgICAgICAgc3JjOiB1cmwoXCJodHRwczovL2V4Y2FsaWRyYXcuY29tL0Nhc2NhZGlhLndvZmYyXCIpO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvZGVmcz5cbiAgYDtcbiAgLy8gcmVuZGVyIGJhY2tncm91bmQgcmVjdFxuICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgY29uc3QgcmVjdCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WDogLW1pblggKyBleHBvcnRQYWRkaW5nLFxuICAgIG9mZnNldFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICBleHBvcnRXaXRoRGFya01vZGU6IGFwcFN0YXRlLmV4cG9ydFdpdGhEYXJrTW9kZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59O1xuXG4vLyBjYWxjdWxhdGUgc21hbGxlc3QgYXJlYSB0byBmaXQgdGhlIGNvbnRlbnRzIGluXG5jb25zdCBnZXRDYW52YXNTaXplID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGV4cG9ydFBhZGRpbmc6IG51bWJlcixcbik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgW21pblgsIG1pblksIG1heFgsIG1heFldID0gZ2V0Q29tbW9uQm91bmRzKGVsZW1lbnRzKTtcbiAgY29uc3Qgd2lkdGggPSBkaXN0YW5jZShtaW5YLCBtYXhYKSArIGV4cG9ydFBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBkaXN0YW5jZShtaW5ZLCBtYXhZKSArIGV4cG9ydFBhZGRpbmcgKyBleHBvcnRQYWRkaW5nO1xuXG4gIHJldHVybiBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwb3J0U2l6ZSA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBleHBvcnRQYWRkaW5nOiBudW1iZXIsXG4gIHNjYWxlOiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgWywgLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpLm1hcChcbiAgICAoZGltZW5zaW9uKSA9PiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKSxcbiAgKTtcblxuICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
3017
+ 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) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\r\nconst exportToCanvas = (elements, appState, files, { exportBackground, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, }, createCanvas = (width, height) => {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = width * appState.exportScale;\r\n canvas.height = height * appState.exportScale;\r\n return { canvas, scale: appState.exportScale };\r\n}) => __awaiter(void 0, void 0, void 0, function* () {\r\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\r\n const { canvas, scale = 1 } = createCanvas(width, height);\r\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\r\n const { imageCache } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.updateImageCache)({\r\n imageCache: new Map(),\r\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.getInitializedImageElements)(elements).map((element) => element.fileId),\r\n files,\r\n });\r\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderScene)(elements, appState, null, scale, roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas), canvas, {\r\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\r\n scrollX: -minX + exportPadding,\r\n scrollY: -minY + exportPadding,\r\n zoom: defaultAppState.zoom,\r\n remotePointerViewportCoords: {},\r\n remoteSelectedElementIds: {},\r\n shouldCacheIgnoreZoom: false,\r\n remotePointerUsernames: {},\r\n remotePointerUserStates: {},\r\n theme: appState.exportWithDarkMode ? \"dark\" : \"light\",\r\n imageCache,\r\n renderScrollbars: false,\r\n renderSelection: false,\r\n renderGrid: false,\r\n isExporting: true,\r\n });\r\n return canvas;\r\n});\r\nconst exportToSvg = (elements, appState, files) => __awaiter(void 0, void 0, void 0, function* () {\r\n const { exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, exportScale = 1, exportEmbedScene, } = appState;\r\n let metadata = \"\";\r\n if (exportEmbedScene) {\r\n try {\r\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \"../../data/image.ts\"))).encodeSvgMetadata({\r\n text: (0,_data_json__WEBPACK_IMPORTED_MODULE_6__.serializeAsJSON)(elements, appState, files || {}, \"local\"),\r\n });\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\r\n // initialize SVG root\r\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"svg\");\r\n svgRoot.setAttribute(\"version\", \"1.1\");\r\n svgRoot.setAttribute(\"xmlns\", _constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS);\r\n svgRoot.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\r\n svgRoot.setAttribute(\"width\", `${width * exportScale}`);\r\n svgRoot.setAttribute(\"height\", `${height * exportScale}`);\r\n if (appState.exportWithDarkMode) {\r\n svgRoot.setAttribute(\"filter\", _constants__WEBPACK_IMPORTED_MODULE_4__.THEME_FILTER);\r\n }\r\n let assetPath = \"https://excalidraw.com/\";\r\n // Asset path needs to be determined only when using package\r\n if (true) {\r\n assetPath =\r\n window.EXCALIDRAW_ASSET_PATH ||\r\n `https://unpkg.com/${\"@dwelle/excalidraw\"}@${\"0.3.65\"}`;\r\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\"/\")) {\r\n assetPath = assetPath.replace(\"/\", `${window.location.origin}/`);\r\n }\r\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\r\n }\r\n svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style>\n @font-face {\n font-family: \"Virgil\";\n src: url(\"https://excalidraw.com/Virgil.woff2\");\n }\n @font-face {\n font-family: \"Cascadia\";\n src: url(\"https://excalidraw.com/Cascadia.woff2\");\n }\n </style>\n </defs>\n `;\r\n // render background rect\r\n if (appState.exportBackground && viewBackgroundColor) {\r\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"rect\");\r\n rect.setAttribute(\"x\", \"0\");\r\n rect.setAttribute(\"y\", \"0\");\r\n rect.setAttribute(\"width\", `${width}`);\r\n rect.setAttribute(\"height\", `${height}`);\r\n rect.setAttribute(\"fill\", viewBackgroundColor);\r\n svgRoot.appendChild(rect);\r\n }\r\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].svg(svgRoot);\r\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\r\n offsetX: -minX + exportPadding,\r\n offsetY: -minY + exportPadding,\r\n exportWithDarkMode: appState.exportWithDarkMode,\r\n });\r\n return svgRoot;\r\n});\r\n// calculate smallest area to fit the contents in\r\nconst getCanvasSize = (elements, exportPadding) => {\r\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(elements);\r\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minX, maxX) + exportPadding * 2;\r\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + exportPadding + exportPadding;\r\n return [minX, minY, width, height];\r\n};\r\nconst getExportSize = (elements, exportPadding, scale) => {\r\n const [, , width, height] = getCanvasSize(elements, exportPadding).map((dimension) => Math.trunc(dimension * scale));\r\n return [width, height];\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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dC50cz85YmY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb3VnaCBmcm9tIFwicm91Z2hqcy9iaW4vcm91Z2hcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRDb21tb25Cb3VuZHMgfSBmcm9tIFwiLi4vZWxlbWVudC9ib3VuZHNcIjtcbmltcG9ydCB7IHJlbmRlclNjZW5lLCByZW5kZXJTY2VuZVRvU3ZnIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlclNjZW5lXCI7XG5pbXBvcnQgeyBkaXN0YW5jZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIEJpbmFyeUZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VYUE9SVF9QQURESU5HLCBTVkdfTlMsIFRIRU1FX0ZJTFRFUiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRBcHBTdGF0ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHsgc2VyaWFsaXplQXNKU09OIH0gZnJvbSBcIi4uL2RhdGEvanNvblwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzLFxuICB1cGRhdGVJbWFnZUNhY2hlLFxufSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuXG5leHBvcnQgY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgZmlsZXM6IEJpbmFyeUZpbGVzLFxuICB7XG4gICAgZXhwb3J0QmFja2dyb3VuZCxcbiAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICB9OiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgfSxcbiAgY3JlYXRlQ2FudmFzOiAoXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgKSA9PiB7IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7IHNjYWxlOiBudW1iZXIgfSA9ICh3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGFwcFN0YXRlLmV4cG9ydFNjYWxlO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICByZXR1cm4geyBjYW52YXMsIHNjYWxlOiBhcHBTdGF0ZS5leHBvcnRTY2FsZSB9O1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpO1xuXG4gIGNvbnN0IHsgY2FudmFzLCBzY2FsZSA9IDEgfSA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcblxuICBjb25zdCBkZWZhdWx0QXBwU3RhdGUgPSBnZXREZWZhdWx0QXBwU3RhdGUoKTtcblxuICBjb25zdCB7IGltYWdlQ2FjaGUgfSA9IGF3YWl0IHVwZGF0ZUltYWdlQ2FjaGUoe1xuICAgIGltYWdlQ2FjaGU6IG5ldyBNYXAoKSxcbiAgICBmaWxlSWRzOiBnZXRJbml0aWFsaXplZEltYWdlRWxlbWVudHMoZWxlbWVudHMpLm1hcChcbiAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50LmZpbGVJZCxcbiAgICApLFxuICAgIGZpbGVzLFxuICB9KTtcblxuICByZW5kZXJTY2VuZShlbGVtZW50cywgYXBwU3RhdGUsIG51bGwsIHNjYWxlLCByb3VnaC5jYW52YXMoY2FudmFzKSwgY2FudmFzLCB7XG4gICAgdmlld0JhY2tncm91bmRDb2xvcjogZXhwb3J0QmFja2dyb3VuZCA/IHZpZXdCYWNrZ3JvdW5kQ29sb3IgOiBudWxsLFxuICAgIHNjcm9sbFg6IC1taW5YICsgZXhwb3J0UGFkZGluZyxcbiAgICBzY3JvbGxZOiAtbWluWSArIGV4cG9ydFBhZGRpbmcsXG4gICAgem9vbTogZGVmYXVsdEFwcFN0YXRlLnpvb20sXG4gICAgcmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzOiB7fSxcbiAgICByZW1vdGVTZWxlY3RlZEVsZW1lbnRJZHM6IHt9LFxuICAgIHNob3VsZENhY2hlSWdub3JlWm9vbTogZmFsc2UsXG4gICAgcmVtb3RlUG9pbnRlclVzZXJuYW1lczoge30sXG4gICAgcmVtb3RlUG9pbnRlclVzZXJTdGF0ZXM6IHt9LFxuICAgIHRoZW1lOiBhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUgPyBcImRhcmtcIiA6IFwibGlnaHRcIixcbiAgICBpbWFnZUNhY2hlLFxuICAgIHJlbmRlclNjcm9sbGJhcnM6IGZhbHNlLFxuICAgIHJlbmRlclNlbGVjdGlvbjogZmFsc2UsXG4gICAgcmVuZGVyR3JpZDogZmFsc2UsXG4gICAgaXNFeHBvcnRpbmc6IHRydWUsXG4gIH0pO1xuXG4gIHJldHVybiBjYW52YXM7XG59O1xuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9TdmcgPSBhc3luYyAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgYXBwU3RhdGU6IHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kOiBib29sZWFuO1xuICAgIGV4cG9ydFBhZGRpbmc/OiBudW1iZXI7XG4gICAgZXhwb3J0U2NhbGU/OiBudW1iZXI7XG4gICAgdmlld0JhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIGV4cG9ydFdpdGhEYXJrTW9kZT86IGJvb2xlYW47XG4gICAgZXhwb3J0RW1iZWRTY2VuZT86IGJvb2xlYW47XG4gIH0sXG4gIGZpbGVzOiBCaW5hcnlGaWxlcyB8IG51bGwsXG4pOiBQcm9taXNlPFNWR1NWR0VsZW1lbnQ+ID0+IHtcbiAgY29uc3Qge1xuICAgIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgZXhwb3J0U2NhbGUgPSAxLFxuICAgIGV4cG9ydEVtYmVkU2NlbmUsXG4gIH0gPSBhcHBTdGF0ZTtcbiAgbGV0IG1ldGFkYXRhID0gXCJcIjtcbiAgaWYgKGV4cG9ydEVtYmVkU2NlbmUpIHtcbiAgICB0cnkge1xuICAgICAgbWV0YWRhdGEgPSBhd2FpdCAoXG4gICAgICAgIGF3YWl0IGltcG9ydCgvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImltYWdlXCIgKi8gXCIuLi8uLi9zcmMvZGF0YS9pbWFnZVwiKVxuICAgICAgKS5lbmNvZGVTdmdNZXRhZGF0YSh7XG4gICAgICAgIHRleHQ6IHNlcmlhbGl6ZUFzSlNPTihlbGVtZW50cywgYXBwU3RhdGUsIGZpbGVzIHx8IHt9LCBcImxvY2FsXCIpLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpO1xuXG4gIC8vIGluaXRpYWxpemUgU1ZHIHJvb3RcbiAgY29uc3Qgc3ZnUm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwic3ZnXCIpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZlcnNpb25cIiwgXCIxLjFcIik7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwieG1sbnNcIiwgU1ZHX05TKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIGAwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YCk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYCR7d2lkdGggKiBleHBvcnRTY2FsZX1gKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgYCR7aGVpZ2h0ICogZXhwb3J0U2NhbGV9YCk7XG4gIGlmIChhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUpIHtcbiAgICBzdmdSb290LnNldEF0dHJpYnV0ZShcImZpbHRlclwiLCBUSEVNRV9GSUxURVIpO1xuICB9XG5cbiAgbGV0IGFzc2V0UGF0aCA9IFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9cIjtcblxuICAvLyBBc3NldCBwYXRoIG5lZWRzIHRvIGJlIGRldGVybWluZWQgb25seSB3aGVuIHVzaW5nIHBhY2thZ2VcbiAgaWYgKHByb2Nlc3MuZW52LklTX0VYQ0FMSURSQVdfTlBNX1BBQ0tBR0UpIHtcbiAgICBhc3NldFBhdGggPVxuICAgICAgd2luZG93LkVYQ0FMSURSQVdfQVNTRVRfUEFUSCB8fFxuICAgICAgYGh0dHBzOi8vdW5wa2cuY29tLyR7cHJvY2Vzcy5lbnYuUEtHX05BTUV9QCR7cHJvY2Vzcy5lbnYuUEtHX1ZFUlNJT059YDtcblxuICAgIGlmIChhc3NldFBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICBhc3NldFBhdGggPSBhc3NldFBhdGgucmVwbGFjZShcIi9cIiwgYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYCk7XG4gICAgfVxuICAgIGFzc2V0UGF0aCA9IGAke2Fzc2V0UGF0aH0vZGlzdC9leGNhbGlkcmF3LWFzc2V0cy9gO1xuICB9XG4gIHN2Z1Jvb3QuaW5uZXJIVE1MID0gYFxuICAke1NWR19FWFBPUlRfVEFHfVxuICAke21ldGFkYXRhfVxuICA8ZGVmcz5cbiAgICA8c3R5bGU+XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiVmlyZ2lsXCI7XG4gICAgICAgIHNyYzogdXJsKFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9WaXJnaWwud29mZjJcIik7XG4gICAgICB9XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiQ2FzY2FkaWFcIjtcbiAgICAgICAgc3JjOiB1cmwoXCJodHRwczovL2V4Y2FsaWRyYXcuY29tL0Nhc2NhZGlhLndvZmYyXCIpO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvZGVmcz5cbiAgYDtcbiAgLy8gcmVuZGVyIGJhY2tncm91bmQgcmVjdFxuICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgY29uc3QgcmVjdCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WDogLW1pblggKyBleHBvcnRQYWRkaW5nLFxuICAgIG9mZnNldFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICBleHBvcnRXaXRoRGFya01vZGU6IGFwcFN0YXRlLmV4cG9ydFdpdGhEYXJrTW9kZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59O1xuXG4vLyBjYWxjdWxhdGUgc21hbGxlc3QgYXJlYSB0byBmaXQgdGhlIGNvbnRlbnRzIGluXG5jb25zdCBnZXRDYW52YXNTaXplID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGV4cG9ydFBhZGRpbmc6IG51bWJlcixcbik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgW21pblgsIG1pblksIG1heFgsIG1heFldID0gZ2V0Q29tbW9uQm91bmRzKGVsZW1lbnRzKTtcbiAgY29uc3Qgd2lkdGggPSBkaXN0YW5jZShtaW5YLCBtYXhYKSArIGV4cG9ydFBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBkaXN0YW5jZShtaW5ZLCBtYXhZKSArIGV4cG9ydFBhZGRpbmcgKyBleHBvcnRQYWRkaW5nO1xuXG4gIHJldHVybiBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwb3J0U2l6ZSA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBleHBvcnRQYWRkaW5nOiBudW1iZXIsXG4gIHNjYWxlOiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgWywgLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpLm1hcChcbiAgICAoZGltZW5zaW9uKSA9PiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKSxcbiAgKTtcblxuICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
3018
3018
 
3019
3019
  /***/ }),
3020
3020
 
@@ -3102,7 +3102,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3102
3102
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3103
3103
 
3104
3104
  "use strict";
3105
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"setDateTimeForTests\": () => (/* binding */ setDateTimeForTests),\n/* harmony export */ \"getDateTime\": () => (/* binding */ getDateTime),\n/* harmony export */ \"capitalizeString\": () => (/* binding */ capitalizeString),\n/* harmony export */ \"isToolIcon\": () => (/* binding */ isToolIcon),\n/* harmony export */ \"isInputLike\": () => (/* binding */ isInputLike),\n/* harmony export */ \"isWritableElement\": () => (/* binding */ isWritableElement),\n/* harmony export */ \"getFontFamilyString\": () => (/* binding */ getFontFamilyString),\n/* harmony export */ \"getFontString\": () => (/* binding */ getFontString),\n/* harmony export */ \"debounce\": () => (/* binding */ debounce),\n/* harmony export */ \"throttleRAF\": () => (/* binding */ throttleRAF),\n/* harmony export */ \"chunk\": () => (/* binding */ chunk),\n/* harmony export */ \"selectNode\": () => (/* binding */ selectNode),\n/* harmony export */ \"removeSelection\": () => (/* binding */ removeSelection),\n/* harmony export */ \"distance\": () => (/* binding */ distance),\n/* harmony export */ \"updateActiveTool\": () => (/* binding */ updateActiveTool),\n/* harmony export */ \"resetCursor\": () => (/* binding */ resetCursor),\n/* harmony export */ \"setCursor\": () => (/* binding */ setCursor),\n/* harmony export */ \"setEraserCursor\": () => (/* binding */ setEraserCursor),\n/* harmony export */ \"setCursorForShape\": () => (/* binding */ setCursorForShape),\n/* harmony export */ \"isFullScreen\": () => (/* binding */ isFullScreen),\n/* harmony export */ \"allowFullScreen\": () => (/* binding */ allowFullScreen),\n/* harmony export */ \"exitFullScreen\": () => (/* binding */ exitFullScreen),\n/* harmony export */ \"getShortcutKey\": () => (/* binding */ getShortcutKey),\n/* harmony export */ \"viewportCoordsToSceneCoords\": () => (/* binding */ viewportCoordsToSceneCoords),\n/* harmony export */ \"sceneCoordsToViewportCoords\": () => (/* binding */ sceneCoordsToViewportCoords),\n/* harmony export */ \"getGlobalCSSVariable\": () => (/* binding */ getGlobalCSSVariable),\n/* harmony export */ \"isRTL\": () => (/* binding */ isRTL),\n/* harmony export */ \"tupleToCoors\": () => (/* binding */ tupleToCoors),\n/* harmony export */ \"muteFSAbortError\": () => (/* binding */ muteFSAbortError),\n/* harmony export */ \"findIndex\": () => (/* binding */ findIndex),\n/* harmony export */ \"findLastIndex\": () => (/* binding */ findLastIndex),\n/* harmony export */ \"isTransparent\": () => (/* binding */ isTransparent),\n/* harmony export */ \"resolvablePromise\": () => (/* binding */ resolvablePromise),\n/* harmony export */ \"withBatchedUpdates\": () => (/* binding */ withBatchedUpdates),\n/* harmony export */ \"withBatchedUpdatesThrottled\": () => (/* binding */ withBatchedUpdatesThrottled),\n/* harmony export */ \"nFormatter\": () => (/* binding */ nFormatter),\n/* harmony export */ \"getVersion\": () => (/* binding */ getVersion),\n/* harmony export */ \"supportsEmoji\": () => (/* binding */ supportsEmoji),\n/* harmony export */ \"getNearestScrollableContainer\": () => (/* binding */ getNearestScrollableContainer),\n/* harmony export */ \"focusNearestParent\": () => (/* binding */ focusNearestParent),\n/* harmony export */ \"preventUnload\": () => (/* binding */ preventUnload),\n/* harmony export */ \"bytesToHexString\": () => (/* binding */ bytesToHexString),\n/* harmony export */ \"getUpdatedTimestamp\": () => (/* binding */ getUpdatedTimestamp),\n/* harmony export */ \"arrayToMap\": () => (/* binding */ arrayToMap),\n/* harmony export */ \"isTestEnv\": () => (/* binding */ isTestEnv),\n/* harmony export */ \"isProdEnv\": () => (/* binding */ isProdEnv),\n/* harmony export */ \"wrapEvent\": () => (/* binding */ wrapEvent),\n/* harmony export */ \"updateObject\": () => (/* binding */ updateObject),\n/* harmony export */ \"isPrimitive\": () => (/* binding */ isPrimitive),\n/* harmony export */ \"getFrame\": () => (/* binding */ getFrame),\n/* harmony export */ \"isPromiseLike\": () => (/* binding */ isPromiseLike)\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\r\n\r\n\r\n\r\n\r\nlet mockDateTime = null;\r\nconst setDateTimeForTests = (dateTime) => {\r\n mockDateTime = dateTime;\r\n};\r\nconst getDateTime = () => {\r\n if (mockDateTime) {\r\n return mockDateTime;\r\n }\r\n const date = new Date();\r\n const year = date.getFullYear();\r\n const month = `${date.getMonth() + 1}`.padStart(2, \"0\");\r\n const day = `${date.getDate()}`.padStart(2, \"0\");\r\n const hr = `${date.getHours()}`.padStart(2, \"0\");\r\n const min = `${date.getMinutes()}`.padStart(2, \"0\");\r\n return `${year}-${month}-${day}-${hr}${min}`;\r\n};\r\nconst capitalizeString = (str) => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst isToolIcon = (target) => target instanceof HTMLElement && target.className.includes(\"ToolIcon\");\r\nconst isInputLike = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\r\n target instanceof HTMLBRElement || // newline in wysiwyg\r\n target instanceof HTMLInputElement ||\r\n target instanceof HTMLTextAreaElement ||\r\n target instanceof HTMLSelectElement;\r\nconst isWritableElement = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\r\n target instanceof HTMLBRElement || // newline in wysiwyg\r\n target instanceof HTMLTextAreaElement ||\r\n (target instanceof HTMLInputElement &&\r\n (target.type === \"text\" || target.type === \"number\"));\r\nconst getFontFamilyString = ({ fontFamily, }) => {\r\n for (const [fontFamilyString, id] of Object.entries(_constants__WEBPACK_IMPORTED_MODULE_2__.FONT_FAMILY)) {\r\n if (id === fontFamily) {\r\n return `${fontFamilyString}, ${_constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT}`;\r\n }\r\n }\r\n return _constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT;\r\n};\r\n/** returns fontSize+fontFamily string for assignment to DOM elements */\r\nconst getFontString = ({ fontSize, fontFamily, }) => {\r\n return `${fontSize}px ${getFontFamilyString({ fontFamily })}`;\r\n};\r\nconst debounce = (fn, timeout) => {\r\n let handle = 0;\r\n let lastArgs = null;\r\n const ret = (...args) => {\r\n lastArgs = args;\r\n clearTimeout(handle);\r\n handle = window.setTimeout(() => {\r\n lastArgs = null;\r\n fn(...args);\r\n }, timeout);\r\n };\r\n ret.flush = () => {\r\n clearTimeout(handle);\r\n if (lastArgs) {\r\n const _lastArgs = lastArgs;\r\n lastArgs = null;\r\n fn(..._lastArgs);\r\n }\r\n };\r\n ret.cancel = () => {\r\n lastArgs = null;\r\n clearTimeout(handle);\r\n };\r\n return ret;\r\n};\r\n// throttle callback to execute once per animation frame\r\nconst throttleRAF = (fn) => {\r\n let handle = null;\r\n let lastArgs = null;\r\n let callback = null;\r\n const ret = (...args) => {\r\n if (false) {}\r\n lastArgs = args;\r\n callback = fn;\r\n if (handle === null) {\r\n handle = window.requestAnimationFrame(() => {\r\n handle = null;\r\n lastArgs = null;\r\n callback = null;\r\n fn(...args);\r\n });\r\n }\r\n };\r\n ret.flush = () => {\r\n if (handle !== null) {\r\n cancelAnimationFrame(handle);\r\n handle = null;\r\n }\r\n if (lastArgs) {\r\n const _lastArgs = lastArgs;\r\n const _callback = callback;\r\n lastArgs = null;\r\n callback = null;\r\n if (_callback !== null) {\r\n _callback(..._lastArgs);\r\n }\r\n }\r\n };\r\n ret.cancel = () => {\r\n lastArgs = null;\r\n callback = null;\r\n if (handle !== null) {\r\n cancelAnimationFrame(handle);\r\n handle = null;\r\n }\r\n };\r\n return ret;\r\n};\r\n// https://github.com/lodash/lodash/blob/es/chunk.js\r\nconst chunk = (array, size) => {\r\n if (!array.length || size < 1) {\r\n return [];\r\n }\r\n let index = 0;\r\n let resIndex = 0;\r\n const result = Array(Math.ceil(array.length / size));\r\n while (index < array.length) {\r\n result[resIndex++] = array.slice(index, (index += size));\r\n }\r\n return result;\r\n};\r\nconst selectNode = (node) => {\r\n const selection = window.getSelection();\r\n if (selection) {\r\n const range = document.createRange();\r\n range.selectNodeContents(node);\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n};\r\nconst removeSelection = () => {\r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n }\r\n};\r\nconst distance = (x, y) => Math.abs(x - y);\r\nconst updateActiveTool = (appState, data) => {\r\n if (data.type === \"custom\") {\r\n return Object.assign(Object.assign({}, appState.activeTool), { type: \"custom\", customType: data.customType });\r\n }\r\n return Object.assign(Object.assign({}, appState.activeTool), { lastActiveToolBeforeEraser: data.lastActiveToolBeforeEraser === undefined\r\n ? appState.activeTool.lastActiveToolBeforeEraser\r\n : data.lastActiveToolBeforeEraser, type: data.type, customType: null });\r\n};\r\nconst resetCursor = (canvas) => {\r\n if (canvas) {\r\n canvas.style.cursor = \"\";\r\n }\r\n};\r\nconst setCursor = (canvas, cursor) => {\r\n if (canvas) {\r\n canvas.style.cursor = cursor;\r\n }\r\n};\r\nlet eraserCanvasCache;\r\nlet previewDataURL;\r\nconst setEraserCursor = (canvas, theme) => {\r\n const cursorImageSizePx = 20;\r\n const drawCanvas = () => {\r\n const isDarkTheme = theme === _constants__WEBPACK_IMPORTED_MODULE_2__.THEME.DARK;\r\n eraserCanvasCache = document.createElement(\"canvas\");\r\n eraserCanvasCache.theme = theme;\r\n eraserCanvasCache.height = cursorImageSizePx;\r\n eraserCanvasCache.width = cursorImageSizePx;\r\n const context = eraserCanvasCache.getContext(\"2d\");\r\n context.lineWidth = 1;\r\n context.beginPath();\r\n context.arc(eraserCanvasCache.width / 2, eraserCanvasCache.height / 2, 5, 0, 2 * Math.PI);\r\n context.fillStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.black : open_color__WEBPACK_IMPORTED_MODULE_0__.white;\r\n context.fill();\r\n context.strokeStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.white : open_color__WEBPACK_IMPORTED_MODULE_0__.black;\r\n context.stroke();\r\n previewDataURL = eraserCanvasCache.toDataURL(_constants__WEBPACK_IMPORTED_MODULE_2__.MIME_TYPES.svg);\r\n };\r\n if (!eraserCanvasCache || eraserCanvasCache.theme !== theme) {\r\n drawCanvas();\r\n }\r\n setCursor(canvas, `url(${previewDataURL}) ${cursorImageSizePx / 2} ${cursorImageSizePx / 2}, auto`);\r\n};\r\nconst setCursorForShape = (canvas, appState) => {\r\n if (!canvas) {\r\n return;\r\n }\r\n if (appState.activeTool.type === \"selection\") {\r\n resetCursor(canvas);\r\n }\r\n else if (appState.activeTool.type === \"eraser\") {\r\n setEraserCursor(canvas, appState.theme);\r\n // do nothing if image tool is selected which suggests there's\r\n // a image-preview set as the cursor\r\n }\r\n else if (appState.activeTool.type !== \"image\") {\r\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_2__.CURSOR_TYPE.CROSSHAIR;\r\n }\r\n};\r\nconst isFullScreen = () => { var _a; return ((_a = document.fullscreenElement) === null || _a === void 0 ? void 0 : _a.nodeName) === \"HTML\"; };\r\nconst allowFullScreen = () => document.documentElement.requestFullscreen();\r\nconst exitFullScreen = () => document.exitFullscreen();\r\nconst getShortcutKey = (shortcut) => {\r\n shortcut = shortcut\r\n .replace(/\\bAlt\\b/i, \"Alt\")\r\n .replace(/\\bShift\\b/i, \"Shift\")\r\n .replace(/\\b(Enter|Return)\\b/i, \"Enter\")\r\n .replace(/\\bDel\\b/i, \"Delete\");\r\n if (_keys__WEBPACK_IMPORTED_MODULE_4__.isDarwin) {\r\n return shortcut\r\n .replace(/\\bCtrlOrCmd\\b/i, \"Cmd\")\r\n .replace(/\\bAlt\\b/i, \"Option\");\r\n }\r\n return shortcut.replace(/\\bCtrlOrCmd\\b/i, \"Ctrl\");\r\n};\r\nconst viewportCoordsToSceneCoords = ({ clientX, clientY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\r\n const invScale = 1 / zoom.value;\r\n const x = (clientX - offsetLeft) * invScale - scrollX;\r\n const y = (clientY - offsetTop) * invScale - scrollY;\r\n return { x, y };\r\n};\r\nconst sceneCoordsToViewportCoords = ({ sceneX, sceneY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\r\n const x = (sceneX + scrollX) * zoom.value + offsetLeft;\r\n const y = (sceneY + scrollY) * zoom.value + offsetTop;\r\n return { x, y };\r\n};\r\nconst getGlobalCSSVariable = (name) => getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);\r\nconst RS_LTR_CHARS = \"A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\" +\r\n \"\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF\";\r\nconst RS_RTL_CHARS = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\r\nconst RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);\r\n/**\r\n * Checks whether first directional character is RTL. Meaning whether it starts\r\n * with RTL characters, or indeterminate (numbers etc.) characters followed by\r\n * RTL.\r\n * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171\r\n */\r\nconst isRTL = (text) => RE_RTL_CHECK.test(text);\r\nconst tupleToCoors = (xyTuple) => {\r\n const [x, y] = xyTuple;\r\n return { x, y };\r\n};\r\n/** use as a rejectionHandler to mute filesystem Abort errors */\r\nconst muteFSAbortError = (error) => {\r\n if ((error === null || error === void 0 ? void 0 : error.name) === \"AbortError\") {\r\n console.warn(error);\r\n return;\r\n }\r\n throw error;\r\n};\r\nconst findIndex = (array, cb, fromIndex = 0) => {\r\n if (fromIndex < 0) {\r\n fromIndex = array.length + fromIndex;\r\n }\r\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\r\n let index = fromIndex - 1;\r\n while (++index < array.length) {\r\n if (cb(array[index], index, array)) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n};\r\nconst findLastIndex = (array, cb, fromIndex = array.length - 1) => {\r\n if (fromIndex < 0) {\r\n fromIndex = array.length + fromIndex;\r\n }\r\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\r\n let index = fromIndex + 1;\r\n while (--index > -1) {\r\n if (cb(array[index], index, array)) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n};\r\nconst isTransparent = (color) => {\r\n const isRGBTransparent = color.length === 5 && color.substr(4, 1) === \"0\";\r\n const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === \"00\";\r\n return (isRGBTransparent ||\r\n isRRGGBBTransparent ||\r\n color === _colors__WEBPACK_IMPORTED_MODULE_1__[\"default\"].elementBackground[0]);\r\n};\r\nconst resolvablePromise = () => {\r\n let resolve;\r\n let reject;\r\n const promise = new Promise((_resolve, _reject) => {\r\n resolve = _resolve;\r\n reject = _reject;\r\n });\r\n promise.resolve = resolve;\r\n promise.reject = reject;\r\n return promise;\r\n};\r\n/**\r\n * @param func handler taking at most single parameter (event).\r\n */\r\nconst withBatchedUpdates = (func) => ((event) => {\r\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\r\n});\r\n/**\r\n * barches React state updates and throttles the calls to a single call per\r\n * animation frame\r\n */\r\nconst withBatchedUpdatesThrottled = (func) => {\r\n // @ts-ignore\r\n return throttleRAF(((event) => {\r\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\r\n }));\r\n};\r\n//https://stackoverflow.com/a/9462382/8418\r\nconst nFormatter = (num, digits) => {\r\n const si = [\r\n { value: 1, symbol: \"b\" },\r\n { value: 1e3, symbol: \"k\" },\r\n { value: 1e6, symbol: \"M\" },\r\n { value: 1e9, symbol: \"G\" },\r\n ];\r\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\r\n let index;\r\n for (index = si.length - 1; index > 0; index--) {\r\n if (num >= si[index].value) {\r\n break;\r\n }\r\n }\r\n return ((num / si[index].value).toFixed(digits).replace(rx, \"$1\") + si[index].symbol);\r\n};\r\nconst getVersion = () => {\r\n var _a;\r\n return (((_a = document.querySelector('meta[name=\"version\"]')) === null || _a === void 0 ? void 0 : _a.content) ||\r\n _constants__WEBPACK_IMPORTED_MODULE_2__.DEFAULT_VERSION);\r\n};\r\n// Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/emoji.js\r\nconst supportsEmoji = () => {\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) {\r\n return false;\r\n }\r\n const offset = 12;\r\n ctx.fillStyle = \"#f00\";\r\n ctx.textBaseline = \"top\";\r\n ctx.font = \"32px Arial\";\r\n // Modernizr used 🐨, but it is sort of supported on Windows 7.\r\n // Luckily 😀 isn't supported.\r\n ctx.fillText(\"😀\", 0, 0);\r\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\r\n};\r\nconst getNearestScrollableContainer = (element) => {\r\n let parent = element.parentElement;\r\n while (parent) {\r\n if (parent === document.body) {\r\n return document;\r\n }\r\n const { overflowY } = window.getComputedStyle(parent);\r\n const hasScrollableContent = parent.scrollHeight > parent.clientHeight;\r\n if (hasScrollableContent &&\r\n (overflowY === \"auto\" ||\r\n overflowY === \"scroll\" ||\r\n overflowY === \"overlay\")) {\r\n return parent;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n return document;\r\n};\r\nconst focusNearestParent = (element) => {\r\n let parent = element.parentElement;\r\n while (parent) {\r\n if (parent.tabIndex > -1) {\r\n parent.focus();\r\n return;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n};\r\nconst preventUnload = (event) => {\r\n event.preventDefault();\r\n // NOTE: modern browsers no longer allow showing a custom message here\r\n event.returnValue = \"\";\r\n};\r\nconst bytesToHexString = (bytes) => {\r\n return Array.from(bytes)\r\n .map((byte) => `0${byte.toString(16)}`.slice(-2))\r\n .join(\"\");\r\n};\r\nconst getUpdatedTimestamp = () => (isTestEnv() ? 1 : Date.now());\r\n/**\r\n * Transforms array of objects containing `id` attribute,\r\n * or array of ids (strings), into a Map, keyd by `id`.\r\n */\r\nconst arrayToMap = (items) => {\r\n return items.reduce((acc, element) => {\r\n acc.set(typeof element === \"string\" ? element : element.id, element);\r\n return acc;\r\n }, new Map());\r\n};\r\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\\\"}\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.64\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"test\"; };\r\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\\\"}\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.64\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"production\"; };\r\nconst wrapEvent = (name, nativeEvent) => {\r\n return new CustomEvent(name, {\r\n detail: {\r\n nativeEvent,\r\n },\r\n cancelable: true,\r\n });\r\n};\r\nconst updateObject = (obj, updates) => {\r\n let didChange = false;\r\n for (const key in updates) {\r\n const value = updates[key];\r\n if (typeof value !== \"undefined\") {\r\n if (obj[key] === value &&\r\n // if object, always update because its attrs could have changed\r\n (typeof value !== \"object\" || value === null)) {\r\n continue;\r\n }\r\n didChange = true;\r\n }\r\n }\r\n if (!didChange) {\r\n return obj;\r\n }\r\n return Object.assign(Object.assign({}, obj), updates);\r\n};\r\nconst isPrimitive = (val) => {\r\n const type = typeof val;\r\n return val == null || (type !== \"object\" && type !== \"function\");\r\n};\r\nconst getFrame = () => {\r\n try {\r\n return window.self === window.top ? \"top\" : \"iframe\";\r\n }\r\n catch (error) {\r\n return \"iframe\";\r\n }\r\n};\r\nconst isPromiseLike = (value) => {\r\n return (!!value &&\r\n typeof value === \"object\" &&\r\n \"then\" in value &&\r\n \"catch\" in value &&\r\n \"finally\" in value);\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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S0FBSyxFQUFFO1FBQ2QsT0FBTyxRQUFRLENBQUM7S0FDakI7QUFDSCxDQUFDLENBQUM7QUFFSyxNQUFNLGFBQWEsR0FBRyxDQUMzQixLQUFVLEVBQ3NDLEVBQUU7SUFDbEQsT0FBTyxDQUNMLENBQUMsQ0FBQyxLQUFLO1FBQ1AsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixNQUFNLElBQUksS0FBSztRQUNmLE9BQU8sSUFBSSxLQUFLO1FBQ2hCLFNBQVMsSUFBSSxLQUFLLENBQ25CLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vdXRpbHMudHM/NzYzYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb2MgZnJvbSBcIm9wZW4tY29sb3JcIjtcblxuaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi9jb2xvcnNcIjtcbmltcG9ydCB7XG4gIENVUlNPUl9UWVBFLFxuICBERUZBVUxUX1ZFUlNJT04sXG4gIEVWRU5ULFxuICBGT05UX0ZBTUlMWSxcbiAgTUlNRV9UWVBFUyxcbiAgVEhFTUUsXG4gIFdJTkRPV1NfRU1PSklfRkFMTEJBQ0tfRk9OVCxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBGb250RmFtaWx5VmFsdWVzLCBGb250U3RyaW5nIH0gZnJvbSBcIi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIERhdGFVUkwsIExhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyLCBab29tIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgaXNEYXJ3aW4gfSBmcm9tIFwiLi9rZXlzXCI7XG5pbXBvcnQgeyBTSEFQRVMgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxubGV0IG1vY2tEYXRlVGltZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBjb25zdCBzZXREYXRlVGltZUZvclRlc3RzID0gKGRhdGVUaW1lOiBzdHJpbmcpID0+IHtcbiAgbW9ja0RhdGVUaW1lID0gZGF0ZVRpbWU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0ZVRpbWUgPSAoKSA9PiB7XG4gIGlmIChtb2NrRGF0ZVRpbWUpIHtcbiAgICByZXR1cm4gbW9ja0RhdGVUaW1lO1xuICB9XG5cbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IG1vbnRoID0gYCR7ZGF0ZS5nZXRNb250aCgpICsgMX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgY29uc3QgZGF5ID0gYCR7ZGF0ZS5nZXREYXRlKCl9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIGNvbnN0IGhyID0gYCR7ZGF0ZS5nZXRIb3VycygpfWAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICBjb25zdCBtaW4gPSBgJHtkYXRlLmdldE1pbnV0ZXMoKX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcblxuICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9LSR7aHJ9JHttaW59YDtcbn07XG5cbmV4cG9ydCBjb25zdCBjYXBpdGFsaXplU3RyaW5nID0gKHN0cjogc3RyaW5nKSA9PlxuICBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG5cbmV4cG9ydCBjb25zdCBpc1Rvb2xJY29uID0gKFxuICB0YXJnZXQ6IEVsZW1lbnQgfCBFdmVudFRhcmdldCB8IG51bGwsXG4pOiB0YXJnZXQgaXMgSFRNTEVsZW1lbnQgPT5cbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdGFyZ2V0LmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRvb2xJY29uXCIpO1xuXG5leHBvcnQgY29uc3QgaXNJbnB1dExpa2UgPSAoXG4gIHRhcmdldDogRWxlbWVudCB8IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbik6IHRhcmdldCBpc1xuICB8IEhUTUxJbnB1dEVsZW1lbnRcbiAgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4gIHwgSFRNTFNlbGVjdEVsZW1lbnRcbiAgfCBIVE1MQlJFbGVtZW50XG4gIHwgSFRNTERpdkVsZW1lbnQgPT5cbiAgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5kYXRhc2V0LnR5cGUgPT09IFwid3lzaXd5Z1wiKSB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MQlJFbGVtZW50IHx8IC8vIG5ld2xpbmUgaW4gd3lzaXd5Z1xuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQ7XG5cbmV4cG9ydCBjb25zdCBpc1dyaXRhYmxlRWxlbWVudCA9IChcbiAgdGFyZ2V0OiBFbGVtZW50IHwgRXZlbnRUYXJnZXQgfCBudWxsLFxuKTogdGFyZ2V0IGlzXG4gIHwgSFRNTElucHV0RWxlbWVudFxuICB8IEhUTUxUZXh0QXJlYUVsZW1lbnRcbiAgfCBIVE1MQlJFbGVtZW50XG4gIHwgSFRNTERpdkVsZW1lbnQgPT5cbiAgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5kYXRhc2V0LnR5cGUgPT09IFwid3lzaXd5Z1wiKSB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MQlJFbGVtZW50IHx8IC8vIG5ld2xpbmUgaW4gd3lzaXd5Z1xuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmXG4gICAgKHRhcmdldC50eXBlID09PSBcInRleHRcIiB8fCB0YXJnZXQudHlwZSA9PT0gXCJudW1iZXJcIikpO1xuXG5leHBvcnQgY29uc3QgZ2V0Rm9udEZhbWlseVN0cmluZyA9ICh7XG4gIGZvbnRGYW1pbHksXG59OiB7XG4gIGZvbnRGYW1pbHk6IEZvbnRGYW1pbHlWYWx1ZXM7XG59KSA9PiB7XG4gIGZvciAoY29uc3QgW2ZvbnRGYW1pbHlTdHJpbmcsIGlkXSBvZiBPYmplY3QuZW50cmllcyhGT05UX0ZBTUlMWSkpIHtcbiAgICBpZiAoaWQgPT09IGZvbnRGYW1pbHkpIHtcbiAgICAgIHJldHVybiBgJHtmb250RmFtaWx5U3RyaW5nfSwgJHtXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlR9YDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFdJTkRPV1NfRU1PSklfRkFMTEJBQ0tfRk9OVDtcbn07XG5cbi8qKiByZXR1cm5zIGZvbnRTaXplK2ZvbnRGYW1pbHkgc3RyaW5nIGZvciBhc3NpZ25tZW50IHRvIERPTSBlbGVtZW50cyAqL1xuZXhwb3J0IGNvbnN0IGdldEZvbnRTdHJpbmcgPSAoe1xuICBmb250U2l6ZSxcbiAgZm9udEZhbWlseSxcbn06IHtcbiAgZm9udFNpemU6IG51bWJlcjtcbiAgZm9udEZhbWlseTogRm9udEZhbWlseVZhbHVlcztcbn0pID0+IHtcbiAgcmV0dXJuIGAke2ZvbnRTaXplfXB4ICR7Z2V0Rm9udEZhbWlseVN0cmluZyh7IGZvbnRGYW1pbHkgfSl9YCBhcyBGb250U3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlYm91bmNlID0gPFQgZXh0ZW5kcyBhbnlbXT4oXG4gIGZuOiAoLi4uYXJnczogVCkgPT4gdm9pZCxcbiAgdGltZW91dDogbnVtYmVyLFxuKSA9PiB7XG4gIGxldCBoYW5kbGUgPSAwO1xuICBsZXQgbGFzdEFyZ3M6IFQgfCBudWxsID0gbnVsbDtcbiAgY29uc3QgcmV0ID0gKC4uLmFyZ3M6IFQpID0+IHtcbiAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSk7XG4gICAgaGFuZGxlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgZm4oLi4uYXJncyk7XG4gICAgfSwgdGltZW91dCk7XG4gIH07XG4gIHJldC5mbHVzaCA9ICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQoaGFuZGxlKTtcbiAgICBpZiAobGFzdEFyZ3MpIHtcbiAgICAgIGNvbnN0IF9sYXN0QXJncyA9IGxhc3RBcmdzO1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgZm4oLi4uX2xhc3RBcmdzKTtcbiAgICB9XG4gIH07XG4gIHJldC5jYW5jZWwgPSAoKSA9PiB7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuICB9O1xuICByZXR1cm4gcmV0O1xufTtcblxuLy8gdGhyb3R0bGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSBvbmNlIHBlciBhbmltYXRpb24gZnJhbWVcbmV4cG9ydCBjb25zdCB0aHJvdHRsZVJBRiA9IDxUIGV4dGVuZHMgYW55W10+KGZuOiAoLi4uYXJnczogVCkgPT4gdm9pZCkgPT4ge1xuICBsZXQgaGFuZGxlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgbGV0IGxhc3RBcmdzOiBUIHwgbnVsbCA9IG51bGw7XG4gIGxldCBjYWxsYmFjazogKCguLi5hcmdzOiBUKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBjb25zdCByZXQgPSAoLi4uYXJnczogVCkgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgY2FsbGJhY2sgPSBmbjtcbiAgICBpZiAoaGFuZGxlID09PSBudWxsKSB7XG4gICAgICBoYW5kbGUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaGFuZGxlID0gbnVsbDtcbiAgICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICByZXQuZmx1c2ggPSAoKSA9PiB7XG4gICAgaWYgKGhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaGFuZGxlKTtcbiAgICAgIGhhbmRsZSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChsYXN0QXJncykge1xuICAgICAgY29uc3QgX2xhc3RBcmdzID0gbGFzdEFyZ3M7XG4gICAgICBjb25zdCBfY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGlmIChfY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgX2NhbGxiYWNrKC4uLl9sYXN0QXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXQuY2FuY2VsID0gKCkgPT4ge1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgaWYgKGhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaGFuZGxlKTtcbiAgICAgIGhhbmRsZSA9IG51bGw7XG4gICAgfVxuICB9O1xuICByZXR1cm4gcmV0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi9lcy9jaHVuay5qc1xuZXhwb3J0IGNvbnN0IGNodW5rID0gPFQgZXh0ZW5kcyBhbnk+KFxuICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICBzaXplOiBudW1iZXIsXG4pOiBUW11bXSA9PiB7XG4gIGlmICghYXJyYXkubGVuZ3RoIHx8IHNpemUgPCAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGxldCBpbmRleCA9IDA7XG4gIGxldCByZXNJbmRleCA9IDA7XG4gIGNvbnN0IHJlc3VsdCA9IEFycmF5KE1hdGguY2VpbChhcnJheS5sZW5ndGggLyBzaXplKSk7XG4gIHdoaWxlIChpbmRleCA8IGFycmF5Lmxlbmd0aCkge1xuICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IGFycmF5LnNsaWNlKGluZGV4LCAoaW5kZXggKz0gc2l6ZSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0Tm9kZSA9IChub2RlOiBFbGVtZW50KSA9PiB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKHNlbGVjdGlvbikge1xuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVTZWxlY3Rpb24gPSAoKSA9PiB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKHNlbGVjdGlvbikge1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRpc3RhbmNlID0gKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiBNYXRoLmFicyh4IC0geSk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY3RpdmVUb29sID0gKFxuICBhcHBTdGF0ZTogUGljazxBcHBTdGF0ZSwgXCJhY3RpdmVUb29sXCI+LFxuICBkYXRhOiAoXG4gICAgfCB7IHR5cGU6IHR5cGVvZiBTSEFQRVNbbnVtYmVyXVtcInZhbHVlXCJdIHwgXCJlcmFzZXJcIiB9XG4gICAgfCB7IHR5cGU6IFwiY3VzdG9tXCI7IGN1c3RvbVR5cGU6IHN0cmluZyB9XG4gICkgJiB7IGxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyPzogTGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXIgfSxcbik6IEFwcFN0YXRlW1wiYWN0aXZlVG9vbFwiXSA9PiB7XG4gIGlmIChkYXRhLnR5cGUgPT09IFwiY3VzdG9tXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXBwU3RhdGUuYWN0aXZlVG9vbCxcbiAgICAgIHR5cGU6IFwiY3VzdG9tXCIsXG4gICAgICBjdXN0b21UeXBlOiBkYXRhLmN1c3RvbVR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uYXBwU3RhdGUuYWN0aXZlVG9vbCxcbiAgICBsYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcjpcbiAgICAgIGRhdGEubGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXIgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IGFwcFN0YXRlLmFjdGl2ZVRvb2wubGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXJcbiAgICAgICAgOiBkYXRhLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyLFxuICAgIHR5cGU6IGRhdGEudHlwZSxcbiAgICBjdXN0b21UeXBlOiBudWxsLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0Q3Vyc29yID0gKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsKSA9PiB7XG4gIGlmIChjYW52YXMpIHtcbiAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gXCJcIjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldEN1cnNvciA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCwgY3Vyc29yOiBzdHJpbmcpID0+IHtcbiAgaWYgKGNhbnZhcykge1xuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XG4gIH1cbn07XG5cbmxldCBlcmFzZXJDYW52YXNDYWNoZTogYW55O1xubGV0IHByZXZpZXdEYXRhVVJMOiBzdHJpbmc7XG5leHBvcnQgY29uc3Qgc2V0RXJhc2VyQ3Vyc29yID0gKFxuICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCxcbiAgdGhlbWU6IEFwcFN0YXRlW1widGhlbWVcIl0sXG4pID0+IHtcbiAgY29uc3QgY3Vyc29ySW1hZ2VTaXplUHggPSAyMDtcblxuICBjb25zdCBkcmF3Q2FudmFzID0gKCkgPT4ge1xuICAgIGNvbnN0IGlzRGFya1RoZW1lID0gdGhlbWUgPT09IFRIRU1FLkRBUks7XG4gICAgZXJhc2VyQ2FudmFzQ2FjaGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLnRoZW1lID0gdGhlbWU7XG4gICAgZXJhc2VyQ2FudmFzQ2FjaGUuaGVpZ2h0ID0gY3Vyc29ySW1hZ2VTaXplUHg7XG4gICAgZXJhc2VyQ2FudmFzQ2FjaGUud2lkdGggPSBjdXJzb3JJbWFnZVNpemVQeDtcbiAgICBjb25zdCBjb250ZXh0ID0gZXJhc2VyQ2FudmFzQ2FjaGUuZ2V0Q29udGV4dChcIjJkXCIpITtcbiAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBjb250ZXh0LmFyYyhcbiAgICAgIGVyYXNlckNhbnZhc0NhY2hlLndpZHRoIC8gMixcbiAgICAgIGVyYXNlckNhbnZhc0NhY2hlLmhlaWdodCAvIDIsXG4gICAgICA1LFxuICAgICAgMCxcbiAgICAgIDIgKiBNYXRoLlBJLFxuICAgICk7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSBpc0RhcmtUaGVtZSA/IG9jLmJsYWNrIDogb2Mud2hpdGU7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGlzRGFya1RoZW1lID8gb2Mud2hpdGUgOiBvYy5ibGFjaztcbiAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgIHByZXZpZXdEYXRhVVJMID0gZXJhc2VyQ2FudmFzQ2FjaGUudG9EYXRhVVJMKE1JTUVfVFlQRVMuc3ZnKSBhcyBEYXRhVVJMO1xuICB9O1xuICBpZiAoIWVyYXNlckNhbnZhc0NhY2hlIHx8IGVyYXNlckNhbnZhc0NhY2hlLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIGRyYXdDYW52YXMoKTtcbiAgfVxuXG4gIHNldEN1cnNvcihcbiAgICBjYW52YXMsXG4gICAgYHVybCgke3ByZXZpZXdEYXRhVVJMfSkgJHtjdXJzb3JJbWFnZVNpemVQeCAvIDJ9ICR7XG4gICAgICBjdXJzb3JJbWFnZVNpemVQeCAvIDJcbiAgICB9LCBhdXRvYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDdXJzb3JGb3JTaGFwZSA9IChcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbikgPT4ge1xuICBpZiAoIWNhbnZhcykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlID09PSBcInNlbGVjdGlvblwiKSB7XG4gICAgcmVzZXRDdXJzb3IoY2FudmFzKTtcbiAgfSBlbHNlIGlmIChhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgPT09IFwiZXJhc2VyXCIpIHtcbiAgICBzZXRFcmFzZXJDdXJzb3IoY2FudmFzLCBhcHBTdGF0ZS50aGVtZSk7XG4gICAgLy8gZG8gbm90aGluZyBpZiBpbWFnZSB0b29sIGlzIHNlbGVjdGVkIHdoaWNoIHN1Z2dlc3RzIHRoZXJlJ3NcbiAgICAvLyBhIGltYWdlLXByZXZpZXcgc2V0IGFzIHRoZSBjdXJzb3JcbiAgfSBlbHNlIGlmIChhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgIT09IFwiaW1hZ2VcIikge1xuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSBDVVJTT1JfVFlQRS5DUk9TU0hBSVI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc0Z1bGxTY3JlZW4gPSAoKSA9PlxuICBkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudD8ubm9kZU5hbWUgPT09IFwiSFRNTFwiO1xuXG5leHBvcnQgY29uc3QgYWxsb3dGdWxsU2NyZWVuID0gKCkgPT5cbiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKCk7XG5cbmV4cG9ydCBjb25zdCBleGl0RnVsbFNjcmVlbiA9ICgpID0+IGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRTaG9ydGN1dEtleSA9IChzaG9ydGN1dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgc2hvcnRjdXQgPSBzaG9ydGN1dFxuICAgIC5yZXBsYWNlKC9cXGJBbHRcXGIvaSwgXCJBbHRcIilcbiAgICAucmVwbGFjZSgvXFxiU2hpZnRcXGIvaSwgXCJTaGlmdFwiKVxuICAgIC5yZXBsYWNlKC9cXGIoRW50ZXJ8UmV0dXJuKVxcYi9pLCBcIkVudGVyXCIpXG4gICAgLnJlcGxhY2UoL1xcYkRlbFxcYi9pLCBcIkRlbGV0ZVwiKTtcblxuICBpZiAoaXNEYXJ3aW4pIHtcbiAgICByZXR1cm4gc2hvcnRjdXRcbiAgICAgIC5yZXBsYWNlKC9cXGJDdHJsT3JDbWRcXGIvaSwgXCJDbWRcIilcbiAgICAgIC5yZXBsYWNlKC9cXGJBbHRcXGIvaSwgXCJPcHRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHNob3J0Y3V0LnJlcGxhY2UoL1xcYkN0cmxPckNtZFxcYi9pLCBcIkN0cmxcIik7XG59O1xuXG5leHBvcnQgY29uc3Qgdmlld3BvcnRDb29yZHNUb1NjZW5lQ29vcmRzID0gKFxuICB7IGNsaWVudFgsIGNsaWVudFkgfTogeyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9LFxuICB7XG4gICAgem9vbSxcbiAgICBvZmZzZXRMZWZ0LFxuICAgIG9mZnNldFRvcCxcbiAgICBzY3JvbGxYLFxuICAgIHNjcm9sbFksXG4gIH06IHtcbiAgICB6b29tOiBab29tO1xuICAgIG9mZnNldExlZnQ6IG51bWJlcjtcbiAgICBvZmZzZXRUb3A6IG51bWJlcjtcbiAgICBzY3JvbGxYOiBudW1iZXI7XG4gICAgc2Nyb2xsWTogbnVtYmVyO1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IGludlNjYWxlID0gMSAvIHpvb20udmFsdWU7XG4gIGNvbnN0IHggPSAoY2xpZW50WCAtIG9mZnNldExlZnQpICogaW52U2NhbGUgLSBzY3JvbGxYO1xuICBjb25zdCB5ID0gKGNsaWVudFkgLSBvZmZzZXRUb3ApICogaW52U2NhbGUgLSBzY3JvbGxZO1xuXG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzY2VuZUNvb3Jkc1RvVmlld3BvcnRDb29yZHMgPSAoXG4gIHsgc2NlbmVYLCBzY2VuZVkgfTogeyBzY2VuZVg6IG51bWJlcjsgc2NlbmVZOiBudW1iZXIgfSxcbiAge1xuICAgIHpvb20sXG4gICAgb2Zmc2V0TGVmdCxcbiAgICBvZmZzZXRUb3AsXG4gICAgc2Nyb2xsWCxcbiAgICBzY3JvbGxZLFxuICB9OiB7XG4gICAgem9vbTogWm9vbTtcbiAgICBvZmZzZXRMZWZ0OiBudW1iZXI7XG4gICAgb2Zmc2V0VG9wOiBudW1iZXI7XG4gICAgc2Nyb2xsWDogbnVtYmVyO1xuICAgIHNjcm9sbFk6IG51bWJlcjtcbiAgfSxcbikgPT4ge1xuICBjb25zdCB4ID0gKHNjZW5lWCArIHNjcm9sbFgpICogem9vbS52YWx1ZSArIG9mZnNldExlZnQ7XG4gIGNvbnN0IHkgPSAoc2NlbmVZICsgc2Nyb2xsWSkgKiB6b29tLnZhbHVlICsgb2Zmc2V0VG9wO1xuICByZXR1cm4geyB4LCB5IH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R2xvYmFsQ1NTVmFyaWFibGUgPSAobmFtZTogc3RyaW5nKSA9PlxuICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShgLS0ke25hbWV9YCk7XG5cbmNvbnN0IFJTX0xUUl9DSEFSUyA9XG4gIFwiQS1aYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkI4XFx1MDMwMC1cXHUwNTkwXFx1MDgwMC1cXHUxRkZGXCIgK1xuICBcIlxcdTJDMDAtXFx1RkIxQ1xcdUZERkUtXFx1RkU2RlxcdUZFRkQtXFx1RkZGRlwiO1xuY29uc3QgUlNfUlRMX0NIQVJTID0gXCJcXHUwNTkxLVxcdTA3RkZcXHVGQjFELVxcdUZERkRcXHVGRTcwLVxcdUZFRkNcIjtcbmNvbnN0IFJFX1JUTF9DSEVDSyA9IG5ldyBSZWdFeHAoYF5bXiR7UlNfTFRSX0NIQVJTfV0qWyR7UlNfUlRMX0NIQVJTfV1gKTtcbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZmlyc3QgZGlyZWN0aW9uYWwgY2hhcmFjdGVyIGlzIFJUTC4gTWVhbmluZyB3aGV0aGVyIGl0IHN0YXJ0c1xuICogIHdpdGggUlRMIGNoYXJhY3RlcnMsIG9yIGluZGV0ZXJtaW5hdGUgKG51bWJlcnMgZXRjLikgY2hhcmFjdGVycyBmb2xsb3dlZCBieVxuICogIFJUTC5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZXhjYWxpZHJhdy9leGNhbGlkcmF3L3B1bGwvMTcyMiNkaXNjdXNzaW9uX3I0MzYzNDAxNzFcbiAqL1xuZXhwb3J0IGNvbnN0IGlzUlRMID0gKHRleHQ6IHN0cmluZykgPT4gUkVfUlRMX0NIRUNLLnRlc3QodGV4dCk7XG5cbmV4cG9ydCBjb25zdCB0dXBsZVRvQ29vcnMgPSAoXG4gIHh5VHVwbGU6IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0sXG4pOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gPT4ge1xuICBjb25zdCBbeCwgeV0gPSB4eVR1cGxlO1xuICByZXR1cm4geyB4LCB5IH07XG59O1xuXG4vKiogdXNlIGFzIGEgcmVqZWN0aW9uSGFuZGxlciB0byBtdXRlIGZpbGVzeXN0ZW0gQWJvcnQgZXJyb3JzICovXG5leHBvcnQgY29uc3QgbXV0ZUZTQWJvcnRFcnJvciA9IChlcnJvcj86IEVycm9yKSA9PiB7XG4gIGlmIChlcnJvcj8ubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICBjb25zb2xlLndhcm4oZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuICB0aHJvdyBlcnJvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kSW5kZXggPSA8VD4oXG4gIGFycmF5OiByZWFkb25seSBUW10sXG4gIGNiOiAoZWxlbWVudDogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IHJlYWRvbmx5IFRbXSkgPT4gYm9vbGVhbixcbiAgZnJvbUluZGV4OiBudW1iZXIgPSAwLFxuKSA9PiB7XG4gIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgZnJvbUluZGV4ID0gYXJyYXkubGVuZ3RoICsgZnJvbUluZGV4O1xuICB9XG4gIGZyb21JbmRleCA9IE1hdGgubWluKGFycmF5Lmxlbmd0aCwgTWF0aC5tYXgoZnJvbUluZGV4LCAwKSk7XG4gIGxldCBpbmRleCA9IGZyb21JbmRleCAtIDE7XG4gIHdoaWxlICgrK2luZGV4IDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgaWYgKGNiKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59O1xuXG5leHBvcnQgY29uc3QgZmluZExhc3RJbmRleCA9IDxUPihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgY2I6IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogcmVhZG9ubHkgVFtdKSA9PiBib29sZWFuLFxuICBmcm9tSW5kZXg6IG51bWJlciA9IGFycmF5Lmxlbmd0aCAtIDEsXG4pID0+IHtcbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBhcnJheS5sZW5ndGggKyBmcm9tSW5kZXg7XG4gIH1cbiAgZnJvbUluZGV4ID0gTWF0aC5taW4oYXJyYXkubGVuZ3RoIC0gMSwgTWF0aC5tYXgoZnJvbUluZGV4LCAwKSk7XG4gIGxldCBpbmRleCA9IGZyb21JbmRleCArIDE7XG4gIHdoaWxlICgtLWluZGV4ID4gLTEpIHtcbiAgICBpZiAoY2IoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1RyYW5zcGFyZW50ID0gKGNvbG9yOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaXNSR0JUcmFuc3BhcmVudCA9IGNvbG9yLmxlbmd0aCA9PT0gNSAmJiBjb2xvci5zdWJzdHIoNCwgMSkgPT09IFwiMFwiO1xuICBjb25zdCBpc1JSR0dCQlRyYW5zcGFyZW50ID0gY29sb3IubGVuZ3RoID09PSA5ICYmIGNvbG9yLnN1YnN0cig3LCAyKSA9PT0gXCIwMFwiO1xuICByZXR1cm4gKFxuICAgIGlzUkdCVHJhbnNwYXJlbnQgfHxcbiAgICBpc1JSR0dCQlRyYW5zcGFyZW50IHx8XG4gICAgY29sb3IgPT09IGNvbG9ycy5lbGVtZW50QmFja2dyb3VuZFswXVxuICApO1xufTtcblxuZXhwb3J0IHR5cGUgUmVzb2x2YWJsZVByb21pc2U8VD4gPSBQcm9taXNlPFQ+ICYge1xuICByZXNvbHZlOiBbVF0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/ICh2YWx1ZT86IFQpID0+IHZvaWQgOiAodmFsdWU6IFQpID0+IHZvaWQ7XG4gIHJlamVjdDogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn07XG5leHBvcnQgY29uc3QgcmVzb2x2YWJsZVByb21pc2UgPSA8VD4oKSA9PiB7XG4gIGxldCByZXNvbHZlITogYW55O1xuICBsZXQgcmVqZWN0ITogYW55O1xuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgcmVzb2x2ZSA9IF9yZXNvbHZlO1xuICAgIHJlamVjdCA9IF9yZWplY3Q7XG4gIH0pO1xuICAocHJvbWlzZSBhcyBhbnkpLnJlc29sdmUgPSByZXNvbHZlO1xuICAocHJvbWlzZSBhcyBhbnkpLnJlamVjdCA9IHJlamVjdDtcbiAgcmV0dXJuIHByb21pc2UgYXMgUmVzb2x2YWJsZVByb21pc2U8VD47XG59O1xuXG4vKipcbiAqIEBwYXJhbSBmdW5jIGhhbmRsZXIgdGFraW5nIGF0IG1vc3Qgc2luZ2xlIHBhcmFtZXRlciAoZXZlbnQpLlxuICovXG5leHBvcnQgY29uc3Qgd2l0aEJhdGNoZWRVcGRhdGVzID0gPFxuICBURnVuY3Rpb24gZXh0ZW5kcyAoKGV2ZW50OiBhbnkpID0+IHZvaWQpIHwgKCgpID0+IHZvaWQpLFxuPihcbiAgZnVuYzogUGFyYW1ldGVyczxURnVuY3Rpb24+W1wibGVuZ3RoXCJdIGV4dGVuZHMgMCB8IDEgPyBURnVuY3Rpb24gOiBuZXZlcixcbikgPT5cbiAgKChldmVudCkgPT4ge1xuICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZ1bmMgYXMgVEZ1bmN0aW9uLCBldmVudCk7XG4gIH0pIGFzIFRGdW5jdGlvbjtcblxuLyoqXG4gKiBiYXJjaGVzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgYW5kIHRocm90dGxlcyB0aGUgY2FsbHMgdG8gYSBzaW5nbGUgY2FsbCBwZXJcbiAqIGFuaW1hdGlvbiBmcmFtZVxuICovXG5leHBvcnQgY29uc3Qgd2l0aEJhdGNoZWRVcGRhdGVzVGhyb3R0bGVkID0gPFxuICBURnVuY3Rpb24gZXh0ZW5kcyAoKGV2ZW50OiBhbnkpID0+IHZvaWQpIHwgKCgpID0+IHZvaWQpLFxuPihcbiAgZnVuYzogUGFyYW1ldGVyczxURnVuY3Rpb24+W1wibGVuZ3RoXCJdIGV4dGVuZHMgMCB8IDEgPyBURnVuY3Rpb24gOiBuZXZlcixcbikgPT4ge1xuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiB0aHJvdHRsZVJBRjxQYXJhbWV0ZXJzPFRGdW5jdGlvbj4+KCgoZXZlbnQpID0+IHtcbiAgICB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyhmdW5jLCBldmVudCk7XG4gIH0pIGFzIFRGdW5jdGlvbik7XG59O1xuXG4vL2h0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85NDYyMzgyLzg0MThcbmV4cG9ydCBjb25zdCBuRm9ybWF0dGVyID0gKG51bTogbnVtYmVyLCBkaWdpdHM6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHNpID0gW1xuICAgIHsgdmFsdWU6IDEsIHN5bWJvbDogXCJiXCIgfSxcbiAgICB7IHZhbHVlOiAxZTMsIHN5bWJvbDogXCJrXCIgfSxcbiAgICB7IHZhbHVlOiAxZTYsIHN5bWJvbDogXCJNXCIgfSxcbiAgICB7IHZhbHVlOiAxZTksIHN5bWJvbDogXCJHXCIgfSxcbiAgXTtcbiAgY29uc3QgcnggPSAvXFwuMCskfChcXC5bMC05XSpbMS05XSkwKyQvO1xuICBsZXQgaW5kZXg7XG4gIGZvciAoaW5kZXggPSBzaS5sZW5ndGggLSAxOyBpbmRleCA+IDA7IGluZGV4LS0pIHtcbiAgICBpZiAobnVtID49IHNpW2luZGV4XS52YWx1ZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiAoXG4gICAgKG51bSAvIHNpW2luZGV4XS52YWx1ZSkudG9GaXhlZChkaWdpdHMpLnJlcGxhY2UocngsIFwiJDFcIikgKyBzaVtpbmRleF0uc3ltYm9sXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmVyc2lvbiA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxNZXRhRWxlbWVudD4oJ21ldGFbbmFtZT1cInZlcnNpb25cIl0nKT8uY29udGVudCB8fFxuICAgIERFRkFVTFRfVkVSU0lPTlxuICApO1xufTtcblxuLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2Jsb2IvbWFzdGVyL2ZlYXR1cmUtZGV0ZWN0cy9lbW9qaS5qc1xuZXhwb3J0IGNvbnN0IHN1cHBvcnRzRW1vamkgPSAoKSA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gIGlmICghY3R4KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IG9mZnNldCA9IDEyO1xuICBjdHguZmlsbFN0eWxlID0gXCIjZjAwXCI7XG4gIGN0eC50ZXh0QmFzZWxpbmUgPSBcInRvcFwiO1xuICBjdHguZm9udCA9IFwiMzJweCBBcmlhbFwiO1xuICAvLyBNb2Rlcm5penIgdXNlZCDwn5CoLCBidXQgaXQgaXMgc29ydCBvZiBzdXBwb3J0ZWQgb24gV2luZG93cyA3LlxuICAvLyBMdWNraWx5IPCfmIAgaXNuJ3Qgc3VwcG9ydGVkLlxuICBjdHguZmlsbFRleHQoXCLwn5iAXCIsIDAsIDApO1xuICByZXR1cm4gY3R4LmdldEltYWdlRGF0YShvZmZzZXQsIG9mZnNldCwgMSwgMSkuZGF0YVswXSAhPT0gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZWFyZXN0U2Nyb2xsYWJsZUNvbnRhaW5lciA9IChcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4pOiBIVE1MRWxlbWVudCB8IERvY3VtZW50ID0+IHtcbiAgbGV0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgd2hpbGUgKHBhcmVudCkge1xuICAgIGlmIChwYXJlbnQgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICB9XG4gICAgY29uc3QgeyBvdmVyZmxvd1kgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCk7XG4gICAgY29uc3QgaGFzU2Nyb2xsYWJsZUNvbnRlbnQgPSBwYXJlbnQuc2Nyb2xsSGVpZ2h0ID4gcGFyZW50LmNsaWVudEhlaWdodDtcbiAgICBpZiAoXG4gICAgICBoYXNTY3JvbGxhYmxlQ29udGVudCAmJlxuICAgICAgKG92ZXJmbG93WSA9PT0gXCJhdXRvXCIgfHxcbiAgICAgICAgb3ZlcmZsb3dZID09PSBcInNjcm9sbFwiIHx8XG4gICAgICAgIG92ZXJmbG93WSA9PT0gXCJvdmVybGF5XCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudDtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZm9jdXNOZWFyZXN0UGFyZW50ID0gKGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpID0+IHtcbiAgbGV0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgd2hpbGUgKHBhcmVudCkge1xuICAgIGlmIChwYXJlbnQudGFiSW5kZXggPiAtMSkge1xuICAgICAgcGFyZW50LmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcHJldmVudFVubG9hZCA9IChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgLy8gTk9URTogbW9kZXJuIGJyb3dzZXJzIG5vIGxvbmdlciBhbGxvdyBzaG93aW5nIGEgY3VzdG9tIG1lc3NhZ2UgaGVyZVxuICBldmVudC5yZXR1cm5WYWx1ZSA9IFwiXCI7XG59O1xuXG5leHBvcnQgY29uc3QgYnl0ZXNUb0hleFN0cmluZyA9IChieXRlczogVWludDhBcnJheSkgPT4ge1xuICByZXR1cm4gQXJyYXkuZnJvbShieXRlcylcbiAgICAubWFwKChieXRlKSA9PiBgMCR7Ynl0ZS50b1N0cmluZygxNil9YC5zbGljZSgtMikpXG4gICAgLmpvaW4oXCJcIik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXBkYXRlZFRpbWVzdGFtcCA9ICgpID0+IChpc1Rlc3RFbnYoKSA/IDEgOiBEYXRlLm5vdygpKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBgaWRgIGF0dHJpYnV0ZSxcbiAqIG9yIGFycmF5IG9mIGlkcyAoc3RyaW5ncyksIGludG8gYSBNYXAsIGtleWQgYnkgYGlkYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFycmF5VG9NYXAgPSA8VCBleHRlbmRzIHsgaWQ6IHN0cmluZyB9IHwgc3RyaW5nPihcbiAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbikgPT4ge1xuICByZXR1cm4gaXRlbXMucmVkdWNlKChhY2M6IE1hcDxzdHJpbmcsIFQ+LCBlbGVtZW50KSA9PiB7XG4gICAgYWNjLnNldCh0eXBlb2YgZWxlbWVudCA9PT0gXCJzdHJpbmdcIiA/IGVsZW1lbnQgOiBlbGVtZW50LmlkLCBlbGVtZW50KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCBuZXcgTWFwKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVGVzdEVudiA9ICgpID0+XG4gIHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5OT0RFX0VOViA9PT0gXCJ0ZXN0XCI7XG5cbmV4cG9ydCBjb25zdCBpc1Byb2RFbnYgPSAoKSA9PlxuICB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudj8uTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiO1xuXG5leHBvcnQgY29uc3Qgd3JhcEV2ZW50ID0gPFQgZXh0ZW5kcyBFdmVudD4obmFtZTogRVZFTlQsIG5hdGl2ZUV2ZW50OiBUKSA9PiB7XG4gIHJldHVybiBuZXcgQ3VzdG9tRXZlbnQobmFtZSwge1xuICAgIGRldGFpbDoge1xuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgfSxcbiAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVPYmplY3QgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICBvYmo6IFQsXG4gIHVwZGF0ZXM6IFBhcnRpYWw8VD4sXG4pOiBUID0+IHtcbiAgbGV0IGRpZENoYW5nZSA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IGtleSBpbiB1cGRhdGVzKSB7XG4gICAgY29uc3QgdmFsdWUgPSAodXBkYXRlcyBhcyBhbnkpW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKFxuICAgICAgICAob2JqIGFzIGFueSlba2V5XSA9PT0gdmFsdWUgJiZcbiAgICAgICAgLy8gaWYgb2JqZWN0LCBhbHdheXMgdXBkYXRlIGJlY2F1c2UgaXRzIGF0dHJzIGNvdWxkIGhhdmUgY2hhbmdlZFxuICAgICAgICAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZGlkQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWRpZENoYW5nZSkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLm9iaixcbiAgICAuLi51cGRhdGVzLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUHJpbWl0aXZlID0gKHZhbDogYW55KSA9PiB7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsO1xuICByZXR1cm4gdmFsID09IG51bGwgfHwgKHR5cGUgIT09IFwib2JqZWN0XCIgJiYgdHlwZSAhPT0gXCJmdW5jdGlvblwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGcmFtZSA9ICgpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gd2luZG93LnNlbGYgPT09IHdpbmRvdy50b3AgPyBcInRvcFwiIDogXCJpZnJhbWVcIjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gXCJpZnJhbWVcIjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzUHJvbWlzZUxpa2UgPSAoXG4gIHZhbHVlOiBhbnksXG4pOiB2YWx1ZSBpcyBQcm9taXNlPFJlc29sdXRpb25UeXBlPHR5cGVvZiB2YWx1ZT4+ID0+IHtcbiAgcmV0dXJuIChcbiAgICAhIXZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgXCJ0aGVuXCIgaW4gdmFsdWUgJiZcbiAgICBcImNhdGNoXCIgaW4gdmFsdWUgJiZcbiAgICBcImZpbmFsbHlcIiBpbiB2YWx1ZVxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../utils.ts\n");
3105
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"setDateTimeForTests\": () => (/* binding */ setDateTimeForTests),\n/* harmony export */ \"getDateTime\": () => (/* binding */ getDateTime),\n/* harmony export */ \"capitalizeString\": () => (/* binding */ capitalizeString),\n/* harmony export */ \"isToolIcon\": () => (/* binding */ isToolIcon),\n/* harmony export */ \"isInputLike\": () => (/* binding */ isInputLike),\n/* harmony export */ \"isWritableElement\": () => (/* binding */ isWritableElement),\n/* harmony export */ \"getFontFamilyString\": () => (/* binding */ getFontFamilyString),\n/* harmony export */ \"getFontString\": () => (/* binding */ getFontString),\n/* harmony export */ \"debounce\": () => (/* binding */ debounce),\n/* harmony export */ \"throttleRAF\": () => (/* binding */ throttleRAF),\n/* harmony export */ \"chunk\": () => (/* binding */ chunk),\n/* harmony export */ \"selectNode\": () => (/* binding */ selectNode),\n/* harmony export */ \"removeSelection\": () => (/* binding */ removeSelection),\n/* harmony export */ \"distance\": () => (/* binding */ distance),\n/* harmony export */ \"updateActiveTool\": () => (/* binding */ updateActiveTool),\n/* harmony export */ \"resetCursor\": () => (/* binding */ resetCursor),\n/* harmony export */ \"setCursor\": () => (/* binding */ setCursor),\n/* harmony export */ \"setEraserCursor\": () => (/* binding */ setEraserCursor),\n/* harmony export */ \"setCursorForShape\": () => (/* binding */ setCursorForShape),\n/* harmony export */ \"isFullScreen\": () => (/* binding */ isFullScreen),\n/* harmony export */ \"allowFullScreen\": () => (/* binding */ allowFullScreen),\n/* harmony export */ \"exitFullScreen\": () => (/* binding */ exitFullScreen),\n/* harmony export */ \"getShortcutKey\": () => (/* binding */ getShortcutKey),\n/* harmony export */ \"viewportCoordsToSceneCoords\": () => (/* binding */ viewportCoordsToSceneCoords),\n/* harmony export */ \"sceneCoordsToViewportCoords\": () => (/* binding */ sceneCoordsToViewportCoords),\n/* harmony export */ \"getGlobalCSSVariable\": () => (/* binding */ getGlobalCSSVariable),\n/* harmony export */ \"isRTL\": () => (/* binding */ isRTL),\n/* harmony export */ \"tupleToCoors\": () => (/* binding */ tupleToCoors),\n/* harmony export */ \"muteFSAbortError\": () => (/* binding */ muteFSAbortError),\n/* harmony export */ \"findIndex\": () => (/* binding */ findIndex),\n/* harmony export */ \"findLastIndex\": () => (/* binding */ findLastIndex),\n/* harmony export */ \"isTransparent\": () => (/* binding */ isTransparent),\n/* harmony export */ \"resolvablePromise\": () => (/* binding */ resolvablePromise),\n/* harmony export */ \"withBatchedUpdates\": () => (/* binding */ withBatchedUpdates),\n/* harmony export */ \"withBatchedUpdatesThrottled\": () => (/* binding */ withBatchedUpdatesThrottled),\n/* harmony export */ \"nFormatter\": () => (/* binding */ nFormatter),\n/* harmony export */ \"getVersion\": () => (/* binding */ getVersion),\n/* harmony export */ \"supportsEmoji\": () => (/* binding */ supportsEmoji),\n/* harmony export */ \"getNearestScrollableContainer\": () => (/* binding */ getNearestScrollableContainer),\n/* harmony export */ \"focusNearestParent\": () => (/* binding */ focusNearestParent),\n/* harmony export */ \"preventUnload\": () => (/* binding */ preventUnload),\n/* harmony export */ \"bytesToHexString\": () => (/* binding */ bytesToHexString),\n/* harmony export */ \"getUpdatedTimestamp\": () => (/* binding */ getUpdatedTimestamp),\n/* harmony export */ \"arrayToMap\": () => (/* binding */ arrayToMap),\n/* harmony export */ \"isTestEnv\": () => (/* binding */ isTestEnv),\n/* harmony export */ \"isProdEnv\": () => (/* binding */ isProdEnv),\n/* harmony export */ \"wrapEvent\": () => (/* binding */ wrapEvent),\n/* harmony export */ \"updateObject\": () => (/* binding */ updateObject),\n/* harmony export */ \"isPrimitive\": () => (/* binding */ isPrimitive),\n/* harmony export */ \"getFrame\": () => (/* binding */ getFrame),\n/* harmony export */ \"isPromiseLike\": () => (/* binding */ isPromiseLike)\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\r\n\r\n\r\n\r\n\r\nlet mockDateTime = null;\r\nconst setDateTimeForTests = (dateTime) => {\r\n mockDateTime = dateTime;\r\n};\r\nconst getDateTime = () => {\r\n if (mockDateTime) {\r\n return mockDateTime;\r\n }\r\n const date = new Date();\r\n const year = date.getFullYear();\r\n const month = `${date.getMonth() + 1}`.padStart(2, \"0\");\r\n const day = `${date.getDate()}`.padStart(2, \"0\");\r\n const hr = `${date.getHours()}`.padStart(2, \"0\");\r\n const min = `${date.getMinutes()}`.padStart(2, \"0\");\r\n return `${year}-${month}-${day}-${hr}${min}`;\r\n};\r\nconst capitalizeString = (str) => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst isToolIcon = (target) => target instanceof HTMLElement && target.className.includes(\"ToolIcon\");\r\nconst isInputLike = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\r\n target instanceof HTMLBRElement || // newline in wysiwyg\r\n target instanceof HTMLInputElement ||\r\n target instanceof HTMLTextAreaElement ||\r\n target instanceof HTMLSelectElement;\r\nconst isWritableElement = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\r\n target instanceof HTMLBRElement || // newline in wysiwyg\r\n target instanceof HTMLTextAreaElement ||\r\n (target instanceof HTMLInputElement &&\r\n (target.type === \"text\" || target.type === \"number\"));\r\nconst getFontFamilyString = ({ fontFamily, }) => {\r\n for (const [fontFamilyString, id] of Object.entries(_constants__WEBPACK_IMPORTED_MODULE_2__.FONT_FAMILY)) {\r\n if (id === fontFamily) {\r\n return `${fontFamilyString}, ${_constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT}`;\r\n }\r\n }\r\n return _constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT;\r\n};\r\n/** returns fontSize+fontFamily string for assignment to DOM elements */\r\nconst getFontString = ({ fontSize, fontFamily, }) => {\r\n return `${fontSize}px ${getFontFamilyString({ fontFamily })}`;\r\n};\r\nconst debounce = (fn, timeout) => {\r\n let handle = 0;\r\n let lastArgs = null;\r\n const ret = (...args) => {\r\n lastArgs = args;\r\n clearTimeout(handle);\r\n handle = window.setTimeout(() => {\r\n lastArgs = null;\r\n fn(...args);\r\n }, timeout);\r\n };\r\n ret.flush = () => {\r\n clearTimeout(handle);\r\n if (lastArgs) {\r\n const _lastArgs = lastArgs;\r\n lastArgs = null;\r\n fn(..._lastArgs);\r\n }\r\n };\r\n ret.cancel = () => {\r\n lastArgs = null;\r\n clearTimeout(handle);\r\n };\r\n return ret;\r\n};\r\n// throttle callback to execute once per animation frame\r\nconst throttleRAF = (fn) => {\r\n let handle = null;\r\n let lastArgs = null;\r\n let callback = null;\r\n const ret = (...args) => {\r\n if (false) {}\r\n lastArgs = args;\r\n callback = fn;\r\n if (handle === null) {\r\n handle = window.requestAnimationFrame(() => {\r\n handle = null;\r\n lastArgs = null;\r\n callback = null;\r\n fn(...args);\r\n });\r\n }\r\n };\r\n ret.flush = () => {\r\n if (handle !== null) {\r\n cancelAnimationFrame(handle);\r\n handle = null;\r\n }\r\n if (lastArgs) {\r\n const _lastArgs = lastArgs;\r\n const _callback = callback;\r\n lastArgs = null;\r\n callback = null;\r\n if (_callback !== null) {\r\n _callback(..._lastArgs);\r\n }\r\n }\r\n };\r\n ret.cancel = () => {\r\n lastArgs = null;\r\n callback = null;\r\n if (handle !== null) {\r\n cancelAnimationFrame(handle);\r\n handle = null;\r\n }\r\n };\r\n return ret;\r\n};\r\n// https://github.com/lodash/lodash/blob/es/chunk.js\r\nconst chunk = (array, size) => {\r\n if (!array.length || size < 1) {\r\n return [];\r\n }\r\n let index = 0;\r\n let resIndex = 0;\r\n const result = Array(Math.ceil(array.length / size));\r\n while (index < array.length) {\r\n result[resIndex++] = array.slice(index, (index += size));\r\n }\r\n return result;\r\n};\r\nconst selectNode = (node) => {\r\n const selection = window.getSelection();\r\n if (selection) {\r\n const range = document.createRange();\r\n range.selectNodeContents(node);\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n};\r\nconst removeSelection = () => {\r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n }\r\n};\r\nconst distance = (x, y) => Math.abs(x - y);\r\nconst updateActiveTool = (appState, data) => {\r\n if (data.type === \"custom\") {\r\n return Object.assign(Object.assign({}, appState.activeTool), { type: \"custom\", customType: data.customType });\r\n }\r\n return Object.assign(Object.assign({}, appState.activeTool), { lastActiveToolBeforeEraser: data.lastActiveToolBeforeEraser === undefined\r\n ? appState.activeTool.lastActiveToolBeforeEraser\r\n : data.lastActiveToolBeforeEraser, type: data.type, customType: null });\r\n};\r\nconst resetCursor = (canvas) => {\r\n if (canvas) {\r\n canvas.style.cursor = \"\";\r\n }\r\n};\r\nconst setCursor = (canvas, cursor) => {\r\n if (canvas) {\r\n canvas.style.cursor = cursor;\r\n }\r\n};\r\nlet eraserCanvasCache;\r\nlet previewDataURL;\r\nconst setEraserCursor = (canvas, theme) => {\r\n const cursorImageSizePx = 20;\r\n const drawCanvas = () => {\r\n const isDarkTheme = theme === _constants__WEBPACK_IMPORTED_MODULE_2__.THEME.DARK;\r\n eraserCanvasCache = document.createElement(\"canvas\");\r\n eraserCanvasCache.theme = theme;\r\n eraserCanvasCache.height = cursorImageSizePx;\r\n eraserCanvasCache.width = cursorImageSizePx;\r\n const context = eraserCanvasCache.getContext(\"2d\");\r\n context.lineWidth = 1;\r\n context.beginPath();\r\n context.arc(eraserCanvasCache.width / 2, eraserCanvasCache.height / 2, 5, 0, 2 * Math.PI);\r\n context.fillStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.black : open_color__WEBPACK_IMPORTED_MODULE_0__.white;\r\n context.fill();\r\n context.strokeStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.white : open_color__WEBPACK_IMPORTED_MODULE_0__.black;\r\n context.stroke();\r\n previewDataURL = eraserCanvasCache.toDataURL(_constants__WEBPACK_IMPORTED_MODULE_2__.MIME_TYPES.svg);\r\n };\r\n if (!eraserCanvasCache || eraserCanvasCache.theme !== theme) {\r\n drawCanvas();\r\n }\r\n setCursor(canvas, `url(${previewDataURL}) ${cursorImageSizePx / 2} ${cursorImageSizePx / 2}, auto`);\r\n};\r\nconst setCursorForShape = (canvas, appState) => {\r\n if (!canvas) {\r\n return;\r\n }\r\n if (appState.activeTool.type === \"selection\") {\r\n resetCursor(canvas);\r\n }\r\n else if (appState.activeTool.type === \"eraser\") {\r\n setEraserCursor(canvas, appState.theme);\r\n // do nothing if image tool is selected which suggests there's\r\n // a image-preview set as the cursor\r\n }\r\n else if (appState.activeTool.type !== \"image\") {\r\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_2__.CURSOR_TYPE.CROSSHAIR;\r\n }\r\n};\r\nconst isFullScreen = () => { var _a; return ((_a = document.fullscreenElement) === null || _a === void 0 ? void 0 : _a.nodeName) === \"HTML\"; };\r\nconst allowFullScreen = () => document.documentElement.requestFullscreen();\r\nconst exitFullScreen = () => document.exitFullscreen();\r\nconst getShortcutKey = (shortcut) => {\r\n shortcut = shortcut\r\n .replace(/\\bAlt\\b/i, \"Alt\")\r\n .replace(/\\bShift\\b/i, \"Shift\")\r\n .replace(/\\b(Enter|Return)\\b/i, \"Enter\")\r\n .replace(/\\bDel\\b/i, \"Delete\");\r\n if (_keys__WEBPACK_IMPORTED_MODULE_4__.isDarwin) {\r\n return shortcut\r\n .replace(/\\bCtrlOrCmd\\b/i, \"Cmd\")\r\n .replace(/\\bAlt\\b/i, \"Option\");\r\n }\r\n return shortcut.replace(/\\bCtrlOrCmd\\b/i, \"Ctrl\");\r\n};\r\nconst viewportCoordsToSceneCoords = ({ clientX, clientY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\r\n const invScale = 1 / zoom.value;\r\n const x = (clientX - offsetLeft) * invScale - scrollX;\r\n const y = (clientY - offsetTop) * invScale - scrollY;\r\n return { x, y };\r\n};\r\nconst sceneCoordsToViewportCoords = ({ sceneX, sceneY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\r\n const x = (sceneX + scrollX) * zoom.value + offsetLeft;\r\n const y = (sceneY + scrollY) * zoom.value + offsetTop;\r\n return { x, y };\r\n};\r\nconst getGlobalCSSVariable = (name) => getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);\r\nconst RS_LTR_CHARS = \"A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\" +\r\n \"\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF\";\r\nconst RS_RTL_CHARS = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\r\nconst RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);\r\n/**\r\n * Checks whether first directional character is RTL. Meaning whether it starts\r\n * with RTL characters, or indeterminate (numbers etc.) characters followed by\r\n * RTL.\r\n * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171\r\n */\r\nconst isRTL = (text) => RE_RTL_CHECK.test(text);\r\nconst tupleToCoors = (xyTuple) => {\r\n const [x, y] = xyTuple;\r\n return { x, y };\r\n};\r\n/** use as a rejectionHandler to mute filesystem Abort errors */\r\nconst muteFSAbortError = (error) => {\r\n if ((error === null || error === void 0 ? void 0 : error.name) === \"AbortError\") {\r\n console.warn(error);\r\n return;\r\n }\r\n throw error;\r\n};\r\nconst findIndex = (array, cb, fromIndex = 0) => {\r\n if (fromIndex < 0) {\r\n fromIndex = array.length + fromIndex;\r\n }\r\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\r\n let index = fromIndex - 1;\r\n while (++index < array.length) {\r\n if (cb(array[index], index, array)) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n};\r\nconst findLastIndex = (array, cb, fromIndex = array.length - 1) => {\r\n if (fromIndex < 0) {\r\n fromIndex = array.length + fromIndex;\r\n }\r\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\r\n let index = fromIndex + 1;\r\n while (--index > -1) {\r\n if (cb(array[index], index, array)) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n};\r\nconst isTransparent = (color) => {\r\n const isRGBTransparent = color.length === 5 && color.substr(4, 1) === \"0\";\r\n const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === \"00\";\r\n return (isRGBTransparent ||\r\n isRRGGBBTransparent ||\r\n color === _colors__WEBPACK_IMPORTED_MODULE_1__[\"default\"].elementBackground[0]);\r\n};\r\nconst resolvablePromise = () => {\r\n let resolve;\r\n let reject;\r\n const promise = new Promise((_resolve, _reject) => {\r\n resolve = _resolve;\r\n reject = _reject;\r\n });\r\n promise.resolve = resolve;\r\n promise.reject = reject;\r\n return promise;\r\n};\r\n/**\r\n * @param func handler taking at most single parameter (event).\r\n */\r\nconst withBatchedUpdates = (func) => ((event) => {\r\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\r\n});\r\n/**\r\n * barches React state updates and throttles the calls to a single call per\r\n * animation frame\r\n */\r\nconst withBatchedUpdatesThrottled = (func) => {\r\n // @ts-ignore\r\n return throttleRAF(((event) => {\r\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\r\n }));\r\n};\r\n//https://stackoverflow.com/a/9462382/8418\r\nconst nFormatter = (num, digits) => {\r\n const si = [\r\n { value: 1, symbol: \"b\" },\r\n { value: 1e3, symbol: \"k\" },\r\n { value: 1e6, symbol: \"M\" },\r\n { value: 1e9, symbol: \"G\" },\r\n ];\r\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\r\n let index;\r\n for (index = si.length - 1; index > 0; index--) {\r\n if (num >= si[index].value) {\r\n break;\r\n }\r\n }\r\n return ((num / si[index].value).toFixed(digits).replace(rx, \"$1\") + si[index].symbol);\r\n};\r\nconst getVersion = () => {\r\n var _a;\r\n return (((_a = document.querySelector('meta[name=\"version\"]')) === null || _a === void 0 ? void 0 : _a.content) ||\r\n _constants__WEBPACK_IMPORTED_MODULE_2__.DEFAULT_VERSION);\r\n};\r\n// Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/emoji.js\r\nconst supportsEmoji = () => {\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) {\r\n return false;\r\n }\r\n const offset = 12;\r\n ctx.fillStyle = \"#f00\";\r\n ctx.textBaseline = \"top\";\r\n ctx.font = \"32px Arial\";\r\n // Modernizr used 🐨, but it is sort of supported on Windows 7.\r\n // Luckily 😀 isn't supported.\r\n ctx.fillText(\"😀\", 0, 0);\r\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\r\n};\r\nconst getNearestScrollableContainer = (element) => {\r\n let parent = element.parentElement;\r\n while (parent) {\r\n if (parent === document.body) {\r\n return document;\r\n }\r\n const { overflowY } = window.getComputedStyle(parent);\r\n const hasScrollableContent = parent.scrollHeight > parent.clientHeight;\r\n if (hasScrollableContent &&\r\n (overflowY === \"auto\" ||\r\n overflowY === \"scroll\" ||\r\n overflowY === \"overlay\")) {\r\n return parent;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n return document;\r\n};\r\nconst focusNearestParent = (element) => {\r\n let parent = element.parentElement;\r\n while (parent) {\r\n if (parent.tabIndex > -1) {\r\n parent.focus();\r\n return;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n};\r\nconst preventUnload = (event) => {\r\n event.preventDefault();\r\n // NOTE: modern browsers no longer allow showing a custom message here\r\n event.returnValue = \"\";\r\n};\r\nconst bytesToHexString = (bytes) => {\r\n return Array.from(bytes)\r\n .map((byte) => `0${byte.toString(16)}`.slice(-2))\r\n .join(\"\");\r\n};\r\nconst getUpdatedTimestamp = () => (isTestEnv() ? 1 : Date.now());\r\n/**\r\n * Transforms array of objects containing `id` attribute,\r\n * or array of ids (strings), into a Map, keyd by `id`.\r\n */\r\nconst arrayToMap = (items) => {\r\n return items.reduce((acc, element) => {\r\n acc.set(typeof element === \"string\" ? element : element.id, element);\r\n return acc;\r\n }, new Map());\r\n};\r\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\\\"}\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.65\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"test\"; };\r\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\\\"}\",\"PKG_NAME\":\"@dwelle/excalidraw\",\"PKG_VERSION\":\"0.3.65\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"production\"; };\r\nconst wrapEvent = (name, nativeEvent) => {\r\n return new CustomEvent(name, {\r\n detail: {\r\n nativeEvent,\r\n },\r\n cancelable: true,\r\n });\r\n};\r\nconst updateObject = (obj, updates) => {\r\n let didChange = false;\r\n for (const key in updates) {\r\n const value = updates[key];\r\n if (typeof value !== \"undefined\") {\r\n if (obj[key] === value &&\r\n // if object, always update because its attrs could have changed\r\n (typeof value !== \"object\" || value === null)) {\r\n continue;\r\n }\r\n didChange = true;\r\n }\r\n }\r\n if (!didChange) {\r\n return obj;\r\n }\r\n return Object.assign(Object.assign({}, obj), updates);\r\n};\r\nconst isPrimitive = (val) => {\r\n const type = typeof val;\r\n return val == null || (type !== \"object\" && type !== \"function\");\r\n};\r\nconst getFrame = () => {\r\n try {\r\n return window.self === window.top ? \"top\" : \"iframe\";\r\n }\r\n catch (error) {\r\n return \"iframe\";\r\n }\r\n};\r\nconst isPromiseLike = (value) => {\r\n return (!!value &&\r\n typeof value === \"object\" &&\r\n \"then\" in value &&\r\n \"catch\" in value &&\r\n \"finally\" in value);\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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S0FBSyxFQUFFO1FBQ2QsT0FBTyxRQUFRLENBQUM7S0FDakI7QUFDSCxDQUFDLENBQUM7QUFFSyxNQUFNLGFBQWEsR0FBRyxDQUMzQixLQUFVLEVBQ3NDLEVBQUU7SUFDbEQsT0FBTyxDQUNMLENBQUMsQ0FBQyxLQUFLO1FBQ1AsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixNQUFNLElBQUksS0FBSztRQUNmLE9BQU8sSUFBSSxLQUFLO1FBQ2hCLFNBQVMsSUFBSSxLQUFLLENBQ25CLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vdXRpbHMudHM/NzYzYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb2MgZnJvbSBcIm9wZW4tY29sb3JcIjtcblxuaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi9jb2xvcnNcIjtcbmltcG9ydCB7XG4gIENVUlNPUl9UWVBFLFxuICBERUZBVUxUX1ZFUlNJT04sXG4gIEVWRU5ULFxuICBGT05UX0ZBTUlMWSxcbiAgTUlNRV9UWVBFUyxcbiAgVEhFTUUsXG4gIFdJTkRPV1NfRU1PSklfRkFMTEJBQ0tfRk9OVCxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBGb250RmFtaWx5VmFsdWVzLCBGb250U3RyaW5nIH0gZnJvbSBcIi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIERhdGFVUkwsIExhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyLCBab29tIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgaXNEYXJ3aW4gfSBmcm9tIFwiLi9rZXlzXCI7XG5pbXBvcnQgeyBTSEFQRVMgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxubGV0IG1vY2tEYXRlVGltZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBjb25zdCBzZXREYXRlVGltZUZvclRlc3RzID0gKGRhdGVUaW1lOiBzdHJpbmcpID0+IHtcbiAgbW9ja0RhdGVUaW1lID0gZGF0ZVRpbWU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0ZVRpbWUgPSAoKSA9PiB7XG4gIGlmIChtb2NrRGF0ZVRpbWUpIHtcbiAgICByZXR1cm4gbW9ja0RhdGVUaW1lO1xuICB9XG5cbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IG1vbnRoID0gYCR7ZGF0ZS5nZXRNb250aCgpICsgMX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgY29uc3QgZGF5ID0gYCR7ZGF0ZS5nZXREYXRlKCl9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIGNvbnN0IGhyID0gYCR7ZGF0ZS5nZXRIb3VycygpfWAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICBjb25zdCBtaW4gPSBgJHtkYXRlLmdldE1pbnV0ZXMoKX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcblxuICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9LSR7aHJ9JHttaW59YDtcbn07XG5cbmV4cG9ydCBjb25zdCBjYXBpdGFsaXplU3RyaW5nID0gKHN0cjogc3RyaW5nKSA9PlxuICBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG5cbmV4cG9ydCBjb25zdCBpc1Rvb2xJY29uID0gKFxuICB0YXJnZXQ6IEVsZW1lbnQgfCBFdmVudFRhcmdldCB8IG51bGwsXG4pOiB0YXJnZXQgaXMgSFRNTEVsZW1lbnQgPT5cbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdGFyZ2V0LmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRvb2xJY29uXCIpO1xuXG5leHBvcnQgY29uc3QgaXNJbnB1dExpa2UgPSAoXG4gIHRhcmdldDogRWxlbWVudCB8IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbik6IHRhcmdldCBpc1xuICB8IEhUTUxJbnB1dEVsZW1lbnRcbiAgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4gIHwgSFRNTFNlbGVjdEVsZW1lbnRcbiAgfCBIVE1MQlJFbGVtZW50XG4gIHwgSFRNTERpdkVsZW1lbnQgPT5cbiAgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5kYXRhc2V0LnR5cGUgPT09IFwid3lzaXd5Z1wiKSB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MQlJFbGVtZW50IHx8IC8vIG5ld2xpbmUgaW4gd3lzaXd5Z1xuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQ7XG5cbmV4cG9ydCBjb25zdCBpc1dyaXRhYmxlRWxlbWVudCA9IChcbiAgdGFyZ2V0OiBFbGVtZW50IHwgRXZlbnRUYXJnZXQgfCBudWxsLFxuKTogdGFyZ2V0IGlzXG4gIHwgSFRNTElucHV0RWxlbWVudFxuICB8IEhUTUxUZXh0QXJlYUVsZW1lbnRcbiAgfCBIVE1MQlJFbGVtZW50XG4gIHwgSFRNTERpdkVsZW1lbnQgPT5cbiAgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5kYXRhc2V0LnR5cGUgPT09IFwid3lzaXd5Z1wiKSB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MQlJFbGVtZW50IHx8IC8vIG5ld2xpbmUgaW4gd3lzaXd5Z1xuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmXG4gICAgKHRhcmdldC50eXBlID09PSBcInRleHRcIiB8fCB0YXJnZXQudHlwZSA9PT0gXCJudW1iZXJcIikpO1xuXG5leHBvcnQgY29uc3QgZ2V0Rm9udEZhbWlseVN0cmluZyA9ICh7XG4gIGZvbnRGYW1pbHksXG59OiB7XG4gIGZvbnRGYW1pbHk6IEZvbnRGYW1pbHlWYWx1ZXM7XG59KSA9PiB7XG4gIGZvciAoY29uc3QgW2ZvbnRGYW1pbHlTdHJpbmcsIGlkXSBvZiBPYmplY3QuZW50cmllcyhGT05UX0ZBTUlMWSkpIHtcbiAgICBpZiAoaWQgPT09IGZvbnRGYW1pbHkpIHtcbiAgICAgIHJldHVybiBgJHtmb250RmFtaWx5U3RyaW5nfSwgJHtXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlR9YDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFdJTkRPV1NfRU1PSklfRkFMTEJBQ0tfRk9OVDtcbn07XG5cbi8qKiByZXR1cm5zIGZvbnRTaXplK2ZvbnRGYW1pbHkgc3RyaW5nIGZvciBhc3NpZ25tZW50IHRvIERPTSBlbGVtZW50cyAqL1xuZXhwb3J0IGNvbnN0IGdldEZvbnRTdHJpbmcgPSAoe1xuICBmb250U2l6ZSxcbiAgZm9udEZhbWlseSxcbn06IHtcbiAgZm9udFNpemU6IG51bWJlcjtcbiAgZm9udEZhbWlseTogRm9udEZhbWlseVZhbHVlcztcbn0pID0+IHtcbiAgcmV0dXJuIGAke2ZvbnRTaXplfXB4ICR7Z2V0Rm9udEZhbWlseVN0cmluZyh7IGZvbnRGYW1pbHkgfSl9YCBhcyBGb250U3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlYm91bmNlID0gPFQgZXh0ZW5kcyBhbnlbXT4oXG4gIGZuOiAoLi4uYXJnczogVCkgPT4gdm9pZCxcbiAgdGltZW91dDogbnVtYmVyLFxuKSA9PiB7XG4gIGxldCBoYW5kbGUgPSAwO1xuICBsZXQgbGFzdEFyZ3M6IFQgfCBudWxsID0gbnVsbDtcbiAgY29uc3QgcmV0ID0gKC4uLmFyZ3M6IFQpID0+IHtcbiAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSk7XG4gICAgaGFuZGxlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgZm4oLi4uYXJncyk7XG4gICAgfSwgdGltZW91dCk7XG4gIH07XG4gIHJldC5mbHVzaCA9ICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQoaGFuZGxlKTtcbiAgICBpZiAobGFzdEFyZ3MpIHtcbiAgICAgIGNvbnN0IF9sYXN0QXJncyA9IGxhc3RBcmdzO1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgZm4oLi4uX2xhc3RBcmdzKTtcbiAgICB9XG4gIH07XG4gIHJldC5jYW5jZWwgPSAoKSA9PiB7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuICB9O1xuICByZXR1cm4gcmV0O1xufTtcblxuLy8gdGhyb3R0bGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSBvbmNlIHBlciBhbmltYXRpb24gZnJhbWVcbmV4cG9ydCBjb25zdCB0aHJvdHRsZVJBRiA9IDxUIGV4dGVuZHMgYW55W10+KGZuOiAoLi4uYXJnczogVCkgPT4gdm9pZCkgPT4ge1xuICBsZXQgaGFuZGxlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgbGV0IGxhc3RBcmdzOiBUIHwgbnVsbCA9IG51bGw7XG4gIGxldCBjYWxsYmFjazogKCguLi5hcmdzOiBUKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBjb25zdCByZXQgPSAoLi4uYXJnczogVCkgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgY2FsbGJhY2sgPSBmbjtcbiAgICBpZiAoaGFuZGxlID09PSBudWxsKSB7XG4gICAgICBoYW5kbGUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaGFuZGxlID0gbnVsbDtcbiAgICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICByZXQuZmx1c2ggPSAoKSA9PiB7XG4gICAgaWYgKGhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaGFuZGxlKTtcbiAgICAgIGhhbmRsZSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChsYXN0QXJncykge1xuICAgICAgY29uc3QgX2xhc3RBcmdzID0gbGFzdEFyZ3M7XG4gICAgICBjb25zdCBfY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGlmIChfY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgX2NhbGxiYWNrKC4uLl9sYXN0QXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXQuY2FuY2VsID0gKCkgPT4ge1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgaWYgKGhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaGFuZGxlKTtcbiAgICAgIGhhbmRsZSA9IG51bGw7XG4gICAgfVxuICB9O1xuICByZXR1cm4gcmV0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi9lcy9jaHVuay5qc1xuZXhwb3J0IGNvbnN0IGNodW5rID0gPFQgZXh0ZW5kcyBhbnk+KFxuICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICBzaXplOiBudW1iZXIsXG4pOiBUW11bXSA9PiB7XG4gIGlmICghYXJyYXkubGVuZ3RoIHx8IHNpemUgPCAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGxldCBpbmRleCA9IDA7XG4gIGxldCByZXNJbmRleCA9IDA7XG4gIGNvbnN0IHJlc3VsdCA9IEFycmF5KE1hdGguY2VpbChhcnJheS5sZW5ndGggLyBzaXplKSk7XG4gIHdoaWxlIChpbmRleCA8IGFycmF5Lmxlbmd0aCkge1xuICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IGFycmF5LnNsaWNlKGluZGV4LCAoaW5kZXggKz0gc2l6ZSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0Tm9kZSA9IChub2RlOiBFbGVtZW50KSA9PiB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKHNlbGVjdGlvbikge1xuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVTZWxlY3Rpb24gPSAoKSA9PiB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKHNlbGVjdGlvbikge1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRpc3RhbmNlID0gKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiBNYXRoLmFicyh4IC0geSk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY3RpdmVUb29sID0gKFxuICBhcHBTdGF0ZTogUGljazxBcHBTdGF0ZSwgXCJhY3RpdmVUb29sXCI+LFxuICBkYXRhOiAoXG4gICAgfCB7IHR5cGU6IHR5cGVvZiBTSEFQRVNbbnVtYmVyXVtcInZhbHVlXCJdIHwgXCJlcmFzZXJcIiB9XG4gICAgfCB7IHR5cGU6IFwiY3VzdG9tXCI7IGN1c3RvbVR5cGU6IHN0cmluZyB9XG4gICkgJiB7IGxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyPzogTGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXIgfSxcbik6IEFwcFN0YXRlW1wiYWN0aXZlVG9vbFwiXSA9PiB7XG4gIGlmIChkYXRhLnR5cGUgPT09IFwiY3VzdG9tXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXBwU3RhdGUuYWN0aXZlVG9vbCxcbiAgICAgIHR5cGU6IFwiY3VzdG9tXCIsXG4gICAgICBjdXN0b21UeXBlOiBkYXRhLmN1c3RvbVR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uYXBwU3RhdGUuYWN0aXZlVG9vbCxcbiAgICBsYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcjpcbiAgICAgIGRhdGEubGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXIgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IGFwcFN0YXRlLmFjdGl2ZVRvb2wubGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXJcbiAgICAgICAgOiBkYXRhLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyLFxuICAgIHR5cGU6IGRhdGEudHlwZSxcbiAgICBjdXN0b21UeXBlOiBudWxsLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0Q3Vyc29yID0gKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsKSA9PiB7XG4gIGlmIChjYW52YXMpIHtcbiAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gXCJcIjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldEN1cnNvciA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCwgY3Vyc29yOiBzdHJpbmcpID0+IHtcbiAgaWYgKGNhbnZhcykge1xuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XG4gIH1cbn07XG5cbmxldCBlcmFzZXJDYW52YXNDYWNoZTogYW55O1xubGV0IHByZXZpZXdEYXRhVVJMOiBzdHJpbmc7XG5leHBvcnQgY29uc3Qgc2V0RXJhc2VyQ3Vyc29yID0gKFxuICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCxcbiAgdGhlbWU6IEFwcFN0YXRlW1widGhlbWVcIl0sXG4pID0+IHtcbiAgY29uc3QgY3Vyc29ySW1hZ2VTaXplUHggPSAyMDtcblxuICBjb25zdCBkcmF3Q2FudmFzID0gKCkgPT4ge1xuICAgIGNvbnN0IGlzRGFya1RoZW1lID0gdGhlbWUgPT09IFRIRU1FLkRBUks7XG4gICAgZXJhc2VyQ2FudmFzQ2FjaGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLnRoZW1lID0gdGhlbWU7XG4gICAgZXJhc2VyQ2FudmFzQ2FjaGUuaGVpZ2h0ID0gY3Vyc29ySW1hZ2VTaXplUHg7XG4gICAgZXJhc2VyQ2FudmFzQ2FjaGUud2lkdGggPSBjdXJzb3JJbWFnZVNpemVQeDtcbiAgICBjb25zdCBjb250ZXh0ID0gZXJhc2VyQ2FudmFzQ2FjaGUuZ2V0Q29udGV4dChcIjJkXCIpITtcbiAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBjb250ZXh0LmFyYyhcbiAgICAgIGVyYXNlckNhbnZhc0NhY2hlLndpZHRoIC8gMixcbiAgICAgIGVyYXNlckNhbnZhc0NhY2hlLmhlaWdodCAvIDIsXG4gICAgICA1LFxuICAgICAgMCxcbiAgICAgIDIgKiBNYXRoLlBJLFxuICAgICk7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSBpc0RhcmtUaGVtZSA/IG9jLmJsYWNrIDogb2Mud2hpdGU7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGlzRGFya1RoZW1lID8gb2Mud2hpdGUgOiBvYy5ibGFjaztcbiAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgIHByZXZpZXdEYXRhVVJMID0gZXJhc2VyQ2FudmFzQ2FjaGUudG9EYXRhVVJMKE1JTUVfVFlQRVMuc3ZnKSBhcyBEYXRhVVJMO1xuICB9O1xuICBpZiAoIWVyYXNlckNhbnZhc0NhY2hlIHx8IGVyYXNlckNhbnZhc0NhY2hlLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIGRyYXdDYW52YXMoKTtcbiAgfVxuXG4gIHNldEN1cnNvcihcbiAgICBjYW52YXMsXG4gICAgYHVybCgke3ByZXZpZXdEYXRhVVJMfSkgJHtjdXJzb3JJbWFnZVNpemVQeCAvIDJ9ICR7XG4gICAgICBjdXJzb3JJbWFnZVNpemVQeCAvIDJcbiAgICB9LCBhdXRvYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDdXJzb3JGb3JTaGFwZSA9IChcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbikgPT4ge1xuICBpZiAoIWNhbnZhcykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlID09PSBcInNlbGVjdGlvblwiKSB7XG4gICAgcmVzZXRDdXJzb3IoY2FudmFzKTtcbiAgfSBlbHNlIGlmIChhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgPT09IFwiZXJhc2VyXCIpIHtcbiAgICBzZXRFcmFzZXJDdXJzb3IoY2FudmFzLCBhcHBTdGF0ZS50aGVtZSk7XG4gICAgLy8gZG8gbm90aGluZyBpZiBpbWFnZSB0b29sIGlzIHNlbGVjdGVkIHdoaWNoIHN1Z2dlc3RzIHRoZXJlJ3NcbiAgICAvLyBhIGltYWdlLXByZXZpZXcgc2V0IGFzIHRoZSBjdXJzb3JcbiAgfSBlbHNlIGlmIChhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgIT09IFwiaW1hZ2VcIikge1xuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSBDVVJTT1JfVFlQRS5DUk9TU0hBSVI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc0Z1bGxTY3JlZW4gPSAoKSA9PlxuICBkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudD8ubm9kZU5hbWUgPT09IFwiSFRNTFwiO1xuXG5leHBvcnQgY29uc3QgYWxsb3dGdWxsU2NyZWVuID0gKCkgPT5cbiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKCk7XG5cbmV4cG9ydCBjb25zdCBleGl0RnVsbFNjcmVlbiA9ICgpID0+IGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRTaG9ydGN1dEtleSA9IChzaG9ydGN1dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgc2hvcnRjdXQgPSBzaG9ydGN1dFxuICAgIC5yZXBsYWNlKC9cXGJBbHRcXGIvaSwgXCJBbHRcIilcbiAgICAucmVwbGFjZSgvXFxiU2hpZnRcXGIvaSwgXCJTaGlmdFwiKVxuICAgIC5yZXBsYWNlKC9cXGIoRW50ZXJ8UmV0dXJuKVxcYi9pLCBcIkVudGVyXCIpXG4gICAgLnJlcGxhY2UoL1xcYkRlbFxcYi9pLCBcIkRlbGV0ZVwiKTtcblxuICBpZiAoaXNEYXJ3aW4pIHtcbiAgICByZXR1cm4gc2hvcnRjdXRcbiAgICAgIC5yZXBsYWNlKC9cXGJDdHJsT3JDbWRcXGIvaSwgXCJDbWRcIilcbiAgICAgIC5yZXBsYWNlKC9cXGJBbHRcXGIvaSwgXCJPcHRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHNob3J0Y3V0LnJlcGxhY2UoL1xcYkN0cmxPckNtZFxcYi9pLCBcIkN0cmxcIik7XG59O1xuXG5leHBvcnQgY29uc3Qgdmlld3BvcnRDb29yZHNUb1NjZW5lQ29vcmRzID0gKFxuICB7IGNsaWVudFgsIGNsaWVudFkgfTogeyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9LFxuICB7XG4gICAgem9vbSxcbiAgICBvZmZzZXRMZWZ0LFxuICAgIG9mZnNldFRvcCxcbiAgICBzY3JvbGxYLFxuICAgIHNjcm9sbFksXG4gIH06IHtcbiAgICB6b29tOiBab29tO1xuICAgIG9mZnNldExlZnQ6IG51bWJlcjtcbiAgICBvZmZzZXRUb3A6IG51bWJlcjtcbiAgICBzY3JvbGxYOiBudW1iZXI7XG4gICAgc2Nyb2xsWTogbnVtYmVyO1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IGludlNjYWxlID0gMSAvIHpvb20udmFsdWU7XG4gIGNvbnN0IHggPSAoY2xpZW50WCAtIG9mZnNldExlZnQpICogaW52U2NhbGUgLSBzY3JvbGxYO1xuICBjb25zdCB5ID0gKGNsaWVudFkgLSBvZmZzZXRUb3ApICogaW52U2NhbGUgLSBzY3JvbGxZO1xuXG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzY2VuZUNvb3Jkc1RvVmlld3BvcnRDb29yZHMgPSAoXG4gIHsgc2NlbmVYLCBzY2VuZVkgfTogeyBzY2VuZVg6IG51bWJlcjsgc2NlbmVZOiBudW1iZXIgfSxcbiAge1xuICAgIHpvb20sXG4gICAgb2Zmc2V0TGVmdCxcbiAgICBvZmZzZXRUb3AsXG4gICAgc2Nyb2xsWCxcbiAgICBzY3JvbGxZLFxuICB9OiB7XG4gICAgem9vbTogWm9vbTtcbiAgICBvZmZzZXRMZWZ0OiBudW1iZXI7XG4gICAgb2Zmc2V0VG9wOiBudW1iZXI7XG4gICAgc2Nyb2xsWDogbnVtYmVyO1xuICAgIHNjcm9sbFk6IG51bWJlcjtcbiAgfSxcbikgPT4ge1xuICBjb25zdCB4ID0gKHNjZW5lWCArIHNjcm9sbFgpICogem9vbS52YWx1ZSArIG9mZnNldExlZnQ7XG4gIGNvbnN0IHkgPSAoc2NlbmVZICsgc2Nyb2xsWSkgKiB6b29tLnZhbHVlICsgb2Zmc2V0VG9wO1xuICByZXR1cm4geyB4LCB5IH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R2xvYmFsQ1NTVmFyaWFibGUgPSAobmFtZTogc3RyaW5nKSA9PlxuICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShgLS0ke25hbWV9YCk7XG5cbmNvbnN0IFJTX0xUUl9DSEFSUyA9XG4gIFwiQS1aYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkI4XFx1MDMwMC1cXHUwNTkwXFx1MDgwMC1cXHUxRkZGXCIgK1xuICBcIlxcdTJDMDAtXFx1RkIxQ1xcdUZERkUtXFx1RkU2RlxcdUZFRkQtXFx1RkZGRlwiO1xuY29uc3QgUlNfUlRMX0NIQVJTID0gXCJcXHUwNTkxLVxcdTA3RkZcXHVGQjFELVxcdUZERkRcXHVGRTcwLVxcdUZFRkNcIjtcbmNvbnN0IFJFX1JUTF9DSEVDSyA9IG5ldyBSZWdFeHAoYF5bXiR7UlNfTFRSX0NIQVJTfV0qWyR7UlNfUlRMX0NIQVJTfV1gKTtcbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZmlyc3QgZGlyZWN0aW9uYWwgY2hhcmFjdGVyIGlzIFJUTC4gTWVhbmluZyB3aGV0aGVyIGl0IHN0YXJ0c1xuICogIHdpdGggUlRMIGNoYXJhY3RlcnMsIG9yIGluZGV0ZXJtaW5hdGUgKG51bWJlcnMgZXRjLikgY2hhcmFjdGVycyBmb2xsb3dlZCBieVxuICogIFJUTC5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZXhjYWxpZHJhdy9leGNhbGlkcmF3L3B1bGwvMTcyMiNkaXNjdXNzaW9uX3I0MzYzNDAxNzFcbiAqL1xuZXhwb3J0IGNvbnN0IGlzUlRMID0gKHRleHQ6IHN0cmluZykgPT4gUkVfUlRMX0NIRUNLLnRlc3QodGV4dCk7XG5cbmV4cG9ydCBjb25zdCB0dXBsZVRvQ29vcnMgPSAoXG4gIHh5VHVwbGU6IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0sXG4pOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gPT4ge1xuICBjb25zdCBbeCwgeV0gPSB4eVR1cGxlO1xuICByZXR1cm4geyB4LCB5IH07XG59O1xuXG4vKiogdXNlIGFzIGEgcmVqZWN0aW9uSGFuZGxlciB0byBtdXRlIGZpbGVzeXN0ZW0gQWJvcnQgZXJyb3JzICovXG5leHBvcnQgY29uc3QgbXV0ZUZTQWJvcnRFcnJvciA9IChlcnJvcj86IEVycm9yKSA9PiB7XG4gIGlmIChlcnJvcj8ubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICBjb25zb2xlLndhcm4oZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuICB0aHJvdyBlcnJvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kSW5kZXggPSA8VD4oXG4gIGFycmF5OiByZWFkb25seSBUW10sXG4gIGNiOiAoZWxlbWVudDogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IHJlYWRvbmx5IFRbXSkgPT4gYm9vbGVhbixcbiAgZnJvbUluZGV4OiBudW1iZXIgPSAwLFxuKSA9PiB7XG4gIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgZnJvbUluZGV4ID0gYXJyYXkubGVuZ3RoICsgZnJvbUluZGV4O1xuICB9XG4gIGZyb21JbmRleCA9IE1hdGgubWluKGFycmF5Lmxlbmd0aCwgTWF0aC5tYXgoZnJvbUluZGV4LCAwKSk7XG4gIGxldCBpbmRleCA9IGZyb21JbmRleCAtIDE7XG4gIHdoaWxlICgrK2luZGV4IDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgaWYgKGNiKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59O1xuXG5leHBvcnQgY29uc3QgZmluZExhc3RJbmRleCA9IDxUPihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgY2I6IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogcmVhZG9ubHkgVFtdKSA9PiBib29sZWFuLFxuICBmcm9tSW5kZXg6IG51bWJlciA9IGFycmF5Lmxlbmd0aCAtIDEsXG4pID0+IHtcbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBhcnJheS5sZW5ndGggKyBmcm9tSW5kZXg7XG4gIH1cbiAgZnJvbUluZGV4ID0gTWF0aC5taW4oYXJyYXkubGVuZ3RoIC0gMSwgTWF0aC5tYXgoZnJvbUluZGV4LCAwKSk7XG4gIGxldCBpbmRleCA9IGZyb21JbmRleCArIDE7XG4gIHdoaWxlICgtLWluZGV4ID4gLTEpIHtcbiAgICBpZiAoY2IoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1RyYW5zcGFyZW50ID0gKGNvbG9yOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaXNSR0JUcmFuc3BhcmVudCA9IGNvbG9yLmxlbmd0aCA9PT0gNSAmJiBjb2xvci5zdWJzdHIoNCwgMSkgPT09IFwiMFwiO1xuICBjb25zdCBpc1JSR0dCQlRyYW5zcGFyZW50ID0gY29sb3IubGVuZ3RoID09PSA5ICYmIGNvbG9yLnN1YnN0cig3LCAyKSA9PT0gXCIwMFwiO1xuICByZXR1cm4gKFxuICAgIGlzUkdCVHJhbnNwYXJlbnQgfHxcbiAgICBpc1JSR0dCQlRyYW5zcGFyZW50IHx8XG4gICAgY29sb3IgPT09IGNvbG9ycy5lbGVtZW50QmFja2dyb3VuZFswXVxuICApO1xufTtcblxuZXhwb3J0IHR5cGUgUmVzb2x2YWJsZVByb21pc2U8VD4gPSBQcm9taXNlPFQ+ICYge1xuICByZXNvbHZlOiBbVF0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/ICh2YWx1ZT86IFQpID0+IHZvaWQgOiAodmFsdWU6IFQpID0+IHZvaWQ7XG4gIHJlamVjdDogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn07XG5leHBvcnQgY29uc3QgcmVzb2x2YWJsZVByb21pc2UgPSA8VD4oKSA9PiB7XG4gIGxldCByZXNvbHZlITogYW55O1xuICBsZXQgcmVqZWN0ITogYW55O1xuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgcmVzb2x2ZSA9IF9yZXNvbHZlO1xuICAgIHJlamVjdCA9IF9yZWplY3Q7XG4gIH0pO1xuICAocHJvbWlzZSBhcyBhbnkpLnJlc29sdmUgPSByZXNvbHZlO1xuICAocHJvbWlzZSBhcyBhbnkpLnJlamVjdCA9IHJlamVjdDtcbiAgcmV0dXJuIHByb21pc2UgYXMgUmVzb2x2YWJsZVByb21pc2U8VD47XG59O1xuXG4vKipcbiAqIEBwYXJhbSBmdW5jIGhhbmRsZXIgdGFraW5nIGF0IG1vc3Qgc2luZ2xlIHBhcmFtZXRlciAoZXZlbnQpLlxuICovXG5leHBvcnQgY29uc3Qgd2l0aEJhdGNoZWRVcGRhdGVzID0gPFxuICBURnVuY3Rpb24gZXh0ZW5kcyAoKGV2ZW50OiBhbnkpID0+IHZvaWQpIHwgKCgpID0+IHZvaWQpLFxuPihcbiAgZnVuYzogUGFyYW1ldGVyczxURnVuY3Rpb24+W1wibGVuZ3RoXCJdIGV4dGVuZHMgMCB8IDEgPyBURnVuY3Rpb24gOiBuZXZlcixcbikgPT5cbiAgKChldmVudCkgPT4ge1xuICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZ1bmMgYXMgVEZ1bmN0aW9uLCBldmVudCk7XG4gIH0pIGFzIFRGdW5jdGlvbjtcblxuLyoqXG4gKiBiYXJjaGVzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgYW5kIHRocm90dGxlcyB0aGUgY2FsbHMgdG8gYSBzaW5nbGUgY2FsbCBwZXJcbiAqIGFuaW1hdGlvbiBmcmFtZVxuICovXG5leHBvcnQgY29uc3Qgd2l0aEJhdGNoZWRVcGRhdGVzVGhyb3R0bGVkID0gPFxuICBURnVuY3Rpb24gZXh0ZW5kcyAoKGV2ZW50OiBhbnkpID0+IHZvaWQpIHwgKCgpID0+IHZvaWQpLFxuPihcbiAgZnVuYzogUGFyYW1ldGVyczxURnVuY3Rpb24+W1wibGVuZ3RoXCJdIGV4dGVuZHMgMCB8IDEgPyBURnVuY3Rpb24gOiBuZXZlcixcbikgPT4ge1xuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiB0aHJvdHRsZVJBRjxQYXJhbWV0ZXJzPFRGdW5jdGlvbj4+KCgoZXZlbnQpID0+IHtcbiAgICB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyhmdW5jLCBldmVudCk7XG4gIH0pIGFzIFRGdW5jdGlvbik7XG59O1xuXG4vL2h0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85NDYyMzgyLzg0MThcbmV4cG9ydCBjb25zdCBuRm9ybWF0dGVyID0gKG51bTogbnVtYmVyLCBkaWdpdHM6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHNpID0gW1xuICAgIHsgdmFsdWU6IDEsIHN5bWJvbDogXCJiXCIgfSxcbiAgICB7IHZhbHVlOiAxZTMsIHN5bWJvbDogXCJrXCIgfSxcbiAgICB7IHZhbHVlOiAxZTYsIHN5bWJvbDogXCJNXCIgfSxcbiAgICB7IHZhbHVlOiAxZTksIHN5bWJvbDogXCJHXCIgfSxcbiAgXTtcbiAgY29uc3QgcnggPSAvXFwuMCskfChcXC5bMC05XSpbMS05XSkwKyQvO1xuICBsZXQgaW5kZXg7XG4gIGZvciAoaW5kZXggPSBzaS5sZW5ndGggLSAxOyBpbmRleCA+IDA7IGluZGV4LS0pIHtcbiAgICBpZiAobnVtID49IHNpW2luZGV4XS52YWx1ZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiAoXG4gICAgKG51bSAvIHNpW2luZGV4XS52YWx1ZSkudG9GaXhlZChkaWdpdHMpLnJlcGxhY2UocngsIFwiJDFcIikgKyBzaVtpbmRleF0uc3ltYm9sXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmVyc2lvbiA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxNZXRhRWxlbWVudD4oJ21ldGFbbmFtZT1cInZlcnNpb25cIl0nKT8uY29udGVudCB8fFxuICAgIERFRkFVTFRfVkVSU0lPTlxuICApO1xufTtcblxuLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2Jsb2IvbWFzdGVyL2ZlYXR1cmUtZGV0ZWN0cy9lbW9qaS5qc1xuZXhwb3J0IGNvbnN0IHN1cHBvcnRzRW1vamkgPSAoKSA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gIGlmICghY3R4KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IG9mZnNldCA9IDEyO1xuICBjdHguZmlsbFN0eWxlID0gXCIjZjAwXCI7XG4gIGN0eC50ZXh0QmFzZWxpbmUgPSBcInRvcFwiO1xuICBjdHguZm9udCA9IFwiMzJweCBBcmlhbFwiO1xuICAvLyBNb2Rlcm5penIgdXNlZCDwn5CoLCBidXQgaXQgaXMgc29ydCBvZiBzdXBwb3J0ZWQgb24gV2luZG93cyA3LlxuICAvLyBMdWNraWx5IPCfmIAgaXNuJ3Qgc3VwcG9ydGVkLlxuICBjdHguZmlsbFRleHQoXCLwn5iAXCIsIDAsIDApO1xuICByZXR1cm4gY3R4LmdldEltYWdlRGF0YShvZmZzZXQsIG9mZnNldCwgMSwgMSkuZGF0YVswXSAhPT0gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZWFyZXN0U2Nyb2xsYWJsZUNvbnRhaW5lciA9IChcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4pOiBIVE1MRWxlbWVudCB8IERvY3VtZW50ID0+IHtcbiAgbGV0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgd2hpbGUgKHBhcmVudCkge1xuICAgIGlmIChwYXJlbnQgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICB9XG4gICAgY29uc3QgeyBvdmVyZmxvd1kgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCk7XG4gICAgY29uc3QgaGFzU2Nyb2xsYWJsZUNvbnRlbnQgPSBwYXJlbnQuc2Nyb2xsSGVpZ2h0ID4gcGFyZW50LmNsaWVudEhlaWdodDtcbiAgICBpZiAoXG4gICAgICBoYXNTY3JvbGxhYmxlQ29udGVudCAmJlxuICAgICAgKG92ZXJmbG93WSA9PT0gXCJhdXRvXCIgfHxcbiAgICAgICAgb3ZlcmZsb3dZID09PSBcInNjcm9sbFwiIHx8XG4gICAgICAgIG92ZXJmbG93WSA9PT0gXCJvdmVybGF5XCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudDtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZm9jdXNOZWFyZXN0UGFyZW50ID0gKGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpID0+IHtcbiAgbGV0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgd2hpbGUgKHBhcmVudCkge1xuICAgIGlmIChwYXJlbnQudGFiSW5kZXggPiAtMSkge1xuICAgICAgcGFyZW50LmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcHJldmVudFVubG9hZCA9IChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgLy8gTk9URTogbW9kZXJuIGJyb3dzZXJzIG5vIGxvbmdlciBhbGxvdyBzaG93aW5nIGEgY3VzdG9tIG1lc3NhZ2UgaGVyZVxuICBldmVudC5yZXR1cm5WYWx1ZSA9IFwiXCI7XG59O1xuXG5leHBvcnQgY29uc3QgYnl0ZXNUb0hleFN0cmluZyA9IChieXRlczogVWludDhBcnJheSkgPT4ge1xuICByZXR1cm4gQXJyYXkuZnJvbShieXRlcylcbiAgICAubWFwKChieXRlKSA9PiBgMCR7Ynl0ZS50b1N0cmluZygxNil9YC5zbGljZSgtMikpXG4gICAgLmpvaW4oXCJcIik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXBkYXRlZFRpbWVzdGFtcCA9ICgpID0+IChpc1Rlc3RFbnYoKSA/IDEgOiBEYXRlLm5vdygpKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBgaWRgIGF0dHJpYnV0ZSxcbiAqIG9yIGFycmF5IG9mIGlkcyAoc3RyaW5ncyksIGludG8gYSBNYXAsIGtleWQgYnkgYGlkYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFycmF5VG9NYXAgPSA8VCBleHRlbmRzIHsgaWQ6IHN0cmluZyB9IHwgc3RyaW5nPihcbiAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbikgPT4ge1xuICByZXR1cm4gaXRlbXMucmVkdWNlKChhY2M6IE1hcDxzdHJpbmcsIFQ+LCBlbGVtZW50KSA9PiB7XG4gICAgYWNjLnNldCh0eXBlb2YgZWxlbWVudCA9PT0gXCJzdHJpbmdcIiA/IGVsZW1lbnQgOiBlbGVtZW50LmlkLCBlbGVtZW50KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCBuZXcgTWFwKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVGVzdEVudiA9ICgpID0+XG4gIHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5OT0RFX0VOViA9PT0gXCJ0ZXN0XCI7XG5cbmV4cG9ydCBjb25zdCBpc1Byb2RFbnYgPSAoKSA9PlxuICB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudj8uTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiO1xuXG5leHBvcnQgY29uc3Qgd3JhcEV2ZW50ID0gPFQgZXh0ZW5kcyBFdmVudD4obmFtZTogRVZFTlQsIG5hdGl2ZUV2ZW50OiBUKSA9PiB7XG4gIHJldHVybiBuZXcgQ3VzdG9tRXZlbnQobmFtZSwge1xuICAgIGRldGFpbDoge1xuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgfSxcbiAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVPYmplY3QgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICBvYmo6IFQsXG4gIHVwZGF0ZXM6IFBhcnRpYWw8VD4sXG4pOiBUID0+IHtcbiAgbGV0IGRpZENoYW5nZSA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IGtleSBpbiB1cGRhdGVzKSB7XG4gICAgY29uc3QgdmFsdWUgPSAodXBkYXRlcyBhcyBhbnkpW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKFxuICAgICAgICAob2JqIGFzIGFueSlba2V5XSA9PT0gdmFsdWUgJiZcbiAgICAgICAgLy8gaWYgb2JqZWN0LCBhbHdheXMgdXBkYXRlIGJlY2F1c2UgaXRzIGF0dHJzIGNvdWxkIGhhdmUgY2hhbmdlZFxuICAgICAgICAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZGlkQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWRpZENoYW5nZSkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLm9iaixcbiAgICAuLi51cGRhdGVzLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUHJpbWl0aXZlID0gKHZhbDogYW55KSA9PiB7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsO1xuICByZXR1cm4gdmFsID09IG51bGwgfHwgKHR5cGUgIT09IFwib2JqZWN0XCIgJiYgdHlwZSAhPT0gXCJmdW5jdGlvblwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGcmFtZSA9ICgpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gd2luZG93LnNlbGYgPT09IHdpbmRvdy50b3AgPyBcInRvcFwiIDogXCJpZnJhbWVcIjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gXCJpZnJhbWVcIjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzUHJvbWlzZUxpa2UgPSAoXG4gIHZhbHVlOiBhbnksXG4pOiB2YWx1ZSBpcyBQcm9taXNlPFJlc29sdXRpb25UeXBlPHR5cGVvZiB2YWx1ZT4+ID0+IHtcbiAgcmV0dXJuIChcbiAgICAhIXZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgXCJ0aGVuXCIgaW4gdmFsdWUgJiZcbiAgICBcImNhdGNoXCIgaW4gdmFsdWUgJiZcbiAgICBcImZpbmFsbHlcIiBpbiB2YWx1ZVxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../utils.ts\n");
3106
3106
 
3107
3107
  /***/ }),
3108
3108