@zsviczian/excalidraw 0.16.1-obsidian-6 → 0.16.1-obsidian-7

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.
@@ -2061,7 +2061,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2061
2061
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2062
2062
 
2063
2063
  "use strict";
2064
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"actionChangeArrowhead\": () => (/* binding */ actionChangeArrowhead),\n/* harmony export */ \"actionChangeBackgroundColor\": () => (/* binding */ actionChangeBackgroundColor),\n/* harmony export */ \"actionChangeFillStyle\": () => (/* binding */ actionChangeFillStyle),\n/* harmony export */ \"actionChangeFontFamily\": () => (/* binding */ actionChangeFontFamily),\n/* harmony export */ \"actionChangeFontSize\": () => (/* binding */ actionChangeFontSize),\n/* harmony export */ \"actionChangeOpacity\": () => (/* binding */ actionChangeOpacity),\n/* harmony export */ \"actionChangeRoundness\": () => (/* binding */ actionChangeRoundness),\n/* harmony export */ \"actionChangeSloppiness\": () => (/* binding */ actionChangeSloppiness),\n/* harmony export */ \"actionChangeStrokeColor\": () => (/* binding */ actionChangeStrokeColor),\n/* harmony export */ \"actionChangeStrokeStyle\": () => (/* binding */ actionChangeStrokeStyle),\n/* harmony export */ \"actionChangeStrokeWidth\": () => (/* binding */ actionChangeStrokeWidth),\n/* harmony export */ \"actionChangeTextAlign\": () => (/* binding */ actionChangeTextAlign),\n/* harmony export */ \"actionChangeVerticalAlign\": () => (/* binding */ actionChangeVerticalAlign),\n/* harmony export */ \"actionDecreaseFontSize\": () => (/* binding */ actionDecreaseFontSize),\n/* harmony export */ \"actionIncreaseFontSize\": () => (/* binding */ actionIncreaseFontSize),\n/* harmony export */ \"changeProperty\": () => (/* binding */ changeProperty),\n/* harmony export */ \"getFormValue\": () => (/* binding */ getFormValue)\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 _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../colors */ \"../../colors.ts\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../analytics */ \"../../analytics.ts\");\n/* harmony import */ var _components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/ButtonIconSelect */ \"../../components/ButtonIconSelect.tsx\");\n/* harmony import */ var _components_ColorPicker_ColorPicker__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/ColorPicker/ColorPicker */ \"../../components/ColorPicker/ColorPicker.tsx\");\n/* harmony import */ var _components_IconPicker__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/IconPicker */ \"../../components/IconPicker.tsx\");\n/* harmony import */ var _components_App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/App */ \"../../components/App.tsx\");\n/* harmony import */ var _components_icons__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../element/mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _element_textElement__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../element/textElement */ \"../../element/textElement.ts\");\n/* harmony import */ var _element_typeChecks__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../element/typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../random */ \"../../random.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _scene_comparisons__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../scene/comparisons */ \"../../scene/comparisons.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _register__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./register */ \"../../actions/register.ts\");\n\n\n\n\n\n\n // TODO barnabasmolnar/editor-redesign\n// TextAlignTopIcon, TextAlignBottomIcon,TextAlignMiddleIcon,\n// ArrowHead icons\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst FONT_SIZE_RELATIVE_INCREASE_STEP = 0.1;\nconst changeProperty = (elements, appState, callback, includeBoundText = false) => {\n const selectedElementIds = (0,_utils__WEBPACK_IMPORTED_MODULE_18__.arrayToMap)((0,_scene__WEBPACK_IMPORTED_MODULE_16__.getSelectedElements)(elements, appState, {\n includeBoundTextElement: includeBoundText\n }));\n return elements.map(element => {\n var _a;\n\n if (selectedElementIds.get(element.id) || element.id === ((_a = appState.editingElement) === null || _a === void 0 ? void 0 : _a.id)) {\n return callback(element);\n }\n\n return element;\n });\n};\nconst getFormValue = function (elements, appState, getAttribute, isRelevantElement, defaultValue) {\n var _a;\n\n const editingElement = appState.editingElement;\n const nonDeletedElements = (0,_element__WEBPACK_IMPORTED_MODULE_9__.getNonDeletedElements)(elements);\n let ret = null;\n\n if (editingElement) {\n ret = getAttribute(editingElement);\n }\n\n if (!ret) {\n const hasSelection = (0,_scene__WEBPACK_IMPORTED_MODULE_16__.isSomeElementSelected)(nonDeletedElements, appState);\n\n if (hasSelection) {\n ret = (_a = (0,_scene__WEBPACK_IMPORTED_MODULE_16__.getCommonAttributeOfSelectedElements)(isRelevantElement === true ? nonDeletedElements : nonDeletedElements.filter(el => isRelevantElement(el)), appState, getAttribute)) !== null && _a !== void 0 ? _a : typeof defaultValue === \"function\" ? defaultValue(true) : defaultValue;\n } else {\n ret = typeof defaultValue === \"function\" ? defaultValue(false) : defaultValue;\n }\n }\n\n return ret;\n};\n\nconst offsetElementAfterFontResize = (prevElement, nextElement) => {\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_12__.isBoundToContainer)(nextElement)) {\n return nextElement;\n }\n\n return (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.mutateElement)(nextElement, {\n x: prevElement.textAlign === \"left\" ? prevElement.x : prevElement.x + (prevElement.width - nextElement.width) / (prevElement.textAlign === \"center\" ? 2 : 1),\n // centering vertically is non-standard, but for Excalidraw I think\n // it makes sense\n y: prevElement.y + (prevElement.height - nextElement.height) / 2\n }, false);\n};\n\nconst changeFontSize = (elements, appState, getNewFontSize, fallbackValue) => {\n const newFontSizes = new Set();\n return {\n elements: changeProperty(elements, appState, oldElement => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(oldElement)) {\n const newFontSize = getNewFontSize(oldElement);\n newFontSizes.add(newFontSize);\n let newElement = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(oldElement, {\n fontSize: newFontSize\n });\n (0,_element__WEBPACK_IMPORTED_MODULE_9__.redrawTextBoundingBox)(newElement, (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getContainerElement)(oldElement));\n newElement = offsetElementAfterFontResize(oldElement, newElement);\n return newElement;\n }\n\n return oldElement;\n }, true),\n appState: Object.assign(Object.assign({}, appState), {\n // update state only if we've set all select text elements to\n // the same font size\n currentItemFontSize: newFontSizes.size === 1 ? [...newFontSizes][0] : fallbackValue !== null && fallbackValue !== void 0 ? fallbackValue : appState.currentItemFontSize\n }),\n commitToHistory: true\n };\n}; // -----------------------------------------------------------------------------\n\n\nconst actionChangeStrokeColor = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeStrokeColor\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n //zsviczian added containers\n const containers = (0,_scene__WEBPACK_IMPORTED_MODULE_16__.getSelectedElements)(elements, appState, {\n includeBoundTextElement: false\n }).filter(el => el.boundElements).map(el => el.id);\n return Object.assign(Object.assign({}, value.currentItemStrokeColor && {\n elements: changeProperty(elements, appState, el => {\n var _a;\n\n if ( //zsviczian\n (0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(el) && el.containerId && containers.includes(el.containerId) && ((_a = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getContainerElement)(el)) === null || _a === void 0 ? void 0 : _a.strokeColor) !== el.strokeColor) {\n return el;\n }\n\n return (0,_scene_comparisons__WEBPACK_IMPORTED_MODULE_17__.hasStrokeColor)(el.type) ? (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n strokeColor: value.currentItemStrokeColor\n }) : el;\n }, true)\n }), {\n appState: Object.assign(Object.assign({}, appState), value),\n commitToHistory: !!value.currentItemStrokeColor\n });\n },\n PanelComponent: ({\n elements,\n appState,\n updateData,\n appProps\n }) => {\n var _a, _b, _c, _d, _e;\n\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h3\", Object.assign({\n \"aria-hidden\": \"true\"\n }, {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.stroke\")\n })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ColorPicker_ColorPicker__WEBPACK_IMPORTED_MODULE_4__.ColorPicker, {\n topPicks: //zsviczian\n (_c = (_b = (_a = appState.colorPalette) === null || _a === void 0 ? void 0 : _a.topPicks) === null || _b === void 0 ? void 0 : _b.elementStroke) !== null && _c !== void 0 ? _c : _colors__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_ELEMENT_STROKE_PICKS,\n palette: //zsviczian\n (_e = (_d = appState.colorPalette) === null || _d === void 0 ? void 0 : _d.elementStroke) !== null && _e !== void 0 ? _e : _colors__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_ELEMENT_STROKE_COLOR_PALETTE,\n type: \"elementStroke\",\n label: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.stroke\"),\n color: getFormValue(elements, appState, element => element.strokeColor, true, appState.currentItemStrokeColor),\n onChange: color => updateData({\n currentItemStrokeColor: color\n }),\n elements: elements,\n appState: appState,\n updateData: updateData\n })]\n });\n }\n});\nconst actionChangeBackgroundColor = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeBackgroundColor\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return Object.assign(Object.assign({}, value.currentItemBackgroundColor && {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n backgroundColor: value.currentItemBackgroundColor\n }))\n }), {\n appState: Object.assign(Object.assign({}, appState), value),\n commitToHistory: !!value.currentItemBackgroundColor\n });\n },\n PanelComponent: ({\n elements,\n appState,\n updateData,\n appProps\n }) => {\n var _a, _b, _c, _d, _e;\n\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h3\", Object.assign({\n \"aria-hidden\": \"true\"\n }, {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.background\")\n })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ColorPicker_ColorPicker__WEBPACK_IMPORTED_MODULE_4__.ColorPicker, {\n topPicks: //zsviczian\n (_c = (_b = (_a = appState.colorPalette) === null || _a === void 0 ? void 0 : _a.topPicks) === null || _b === void 0 ? void 0 : _b.elementBackground) !== null && _c !== void 0 ? _c : _colors__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_ELEMENT_BACKGROUND_PICKS,\n palette: //zsviczian\n (_e = (_d = appState.colorPalette) === null || _d === void 0 ? void 0 : _d.elementBackground) !== null && _e !== void 0 ? _e : _colors__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_ELEMENT_BACKGROUND_COLOR_PALETTE,\n type: \"elementBackground\",\n label: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.background\"),\n color: getFormValue(elements, appState, element => element.backgroundColor, true, appState.currentItemBackgroundColor),\n onChange: color => updateData({\n currentItemBackgroundColor: color\n }),\n elements: elements,\n appState: appState,\n updateData: updateData\n })]\n });\n }\n});\nconst actionChangeFillStyle = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeFillStyle\",\n trackEvent: false,\n perform: (elements, appState, value, app) => {\n (0,_analytics__WEBPACK_IMPORTED_MODULE_2__.trackEvent)(\"element\", \"changeFillStyle\", `${value} (${app.device.isMobile ? \"mobile\" : \"desktop\"})`);\n return {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n fillStyle: value\n })),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemFillStyle: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_16__.getSelectedElements)(elements, appState);\n const allElementsZigZag = selectedElements.length > 0 && selectedElements.every(el => el.fillStyle === \"zigzag\");\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.fill\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n type: \"button\",\n options: [{\n value: \"hachure\",\n text: `${allElementsZigZag ? (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.zigzag\") : (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.hachure\")} (${(0,_utils__WEBPACK_IMPORTED_MODULE_18__.getShortcutKey)(\"Alt-Click\")})`,\n icon: allElementsZigZag ? _components_icons__WEBPACK_IMPORTED_MODULE_7__.FillZigZagIcon : _components_icons__WEBPACK_IMPORTED_MODULE_7__.FillHachureIcon,\n active: allElementsZigZag ? true : undefined,\n testId: `fill-hachure`\n }, {\n value: \"cross-hatch\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.crossHatch\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FillCrossHatchIcon,\n testId: `fill-cross-hatch`\n }, {\n value: \"solid\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.solid\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FillSolidIcon,\n testId: `fill-solid`\n }],\n value: getFormValue(elements, appState, element => element.fillStyle, element => element.hasOwnProperty(\"fillStyle\"), hasSelection => hasSelection ? null : appState.currentItemFillStyle),\n onClick: (value, event) => {\n const nextValue = event.altKey && value === \"hachure\" && selectedElements.every(el => el.fillStyle === \"hachure\") ? \"zigzag\" : value;\n updateData(nextValue);\n }\n })]\n });\n }\n});\nconst actionChangeStrokeWidth = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeStrokeWidth\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n strokeWidth: value\n })),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemStrokeWidth: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.strokeWidth\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"stroke-width\",\n options: [{\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.STROKE_WIDTH.thin,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.thin\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeWidthBaseIcon,\n testId: \"strokeWidth-thin\"\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.STROKE_WIDTH.bold,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.bold\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeWidthBoldIcon,\n testId: \"strokeWidth-bold\"\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.STROKE_WIDTH.extraBold,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.extraBold\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeWidthExtraBoldIcon,\n testId: \"strokeWidth-extraBold\"\n }],\n value: getFormValue(elements, appState, element => element.strokeWidth, element => element.hasOwnProperty(\"strokeWidth\"), hasSelection => hasSelection ? null : appState.currentItemStrokeWidth),\n onChange: value => updateData(value)\n })]\n })\n});\nconst actionChangeSloppiness = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeSloppiness\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n seed: (0,_random__WEBPACK_IMPORTED_MODULE_15__.randomInteger)(),\n roughness: value\n })),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemRoughness: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.sloppiness\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"sloppiness\",\n options: [{\n value: 0,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.architect\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.SloppinessArchitectIcon\n }, {\n value: 1,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.artist\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.SloppinessArtistIcon\n }, {\n value: 2,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.cartoonist\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.SloppinessCartoonistIcon\n }],\n value: getFormValue(elements, appState, element => element.roughness, element => element.hasOwnProperty(\"roughness\"), hasSelection => hasSelection ? null : appState.currentItemRoughness),\n onChange: value => updateData(value)\n })]\n })\n});\nconst actionChangeStrokeStyle = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeStrokeStyle\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n strokeStyle: value\n })),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemStrokeStyle: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.strokeStyle\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"strokeStyle\",\n options: [{\n value: \"solid\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.strokeStyle_solid\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeWidthBaseIcon\n }, {\n value: \"dashed\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.strokeStyle_dashed\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeStyleDashedIcon\n }, {\n value: \"dotted\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.strokeStyle_dotted\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeStyleDottedIcon\n }],\n value: getFormValue(elements, appState, element => element.strokeStyle, element => element.hasOwnProperty(\"strokeStyle\"), hasSelection => hasSelection ? null : appState.currentItemStrokeStyle),\n onChange: value => updateData(value)\n })]\n })\n});\nconst actionChangeOpacity = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeOpacity\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n opacity: value\n }), true),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemOpacity: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n var _a;\n\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"label\", Object.assign({\n className: \"control-label\"\n }, {\n children: [(0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.opacity\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"input\", {\n type: \"range\",\n min: \"0\",\n max: \"100\",\n step: \"10\",\n onChange: event => updateData(+event.target.value),\n value: (_a = getFormValue(elements, appState, element => element.opacity, true, appState.currentItemOpacity)) !== null && _a !== void 0 ? _a : undefined\n })]\n }));\n }\n});\nconst actionChangeFontSize = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeFontSize\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return changeFontSize(elements, appState, () => value, value);\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.fontSize\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"font-size\",\n options: [{\n value: 16,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.small\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontSizeSmallIcon,\n testId: \"fontSize-small\"\n }, {\n value: 20,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.medium\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontSizeMediumIcon,\n testId: \"fontSize-medium\"\n }, {\n value: 28,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.large\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontSizeLargeIcon,\n testId: \"fontSize-large\"\n }, {\n value: 36,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.veryLarge\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontSizeExtraLargeIcon,\n testId: \"fontSize-veryLarge\"\n }],\n value: getFormValue(elements, appState, element => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element)) {\n return element.fontSize;\n }\n\n const boundTextElement = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element);\n\n if (boundTextElement) {\n return boundTextElement.fontSize;\n }\n\n return null;\n }, element => (0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element) || (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element) !== null, hasSelection => hasSelection ? null : appState.currentItemFontSize || _constants__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_FONT_SIZE),\n onChange: value => updateData(value)\n })]\n })\n});\nconst actionDecreaseFontSize = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"decreaseFontSize\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return changeFontSize(elements, appState, element => Math.round( // get previous value before relative increase (doesn't work fully\n // due to rounding and float precision issues)\n 1 / (1 + FONT_SIZE_RELATIVE_INCREASE_STEP) * element.fontSize));\n },\n keyTest: event => {\n return event[_keys__WEBPACK_IMPORTED_MODULE_14__.KEYS.CTRL_OR_CMD] && event.shiftKey && ( // KEYS.COMMA needed for MacOS\n event.key === _keys__WEBPACK_IMPORTED_MODULE_14__.KEYS.CHEVRON_LEFT || event.key === _keys__WEBPACK_IMPORTED_MODULE_14__.KEYS.COMMA);\n }\n});\nconst actionIncreaseFontSize = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"increaseFontSize\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return changeFontSize(elements, appState, element => Math.round(element.fontSize * (1 + FONT_SIZE_RELATIVE_INCREASE_STEP)));\n },\n keyTest: event => {\n return event[_keys__WEBPACK_IMPORTED_MODULE_14__.KEYS.CTRL_OR_CMD] && event.shiftKey && ( // KEYS.PERIOD needed for MacOS\n event.key === _keys__WEBPACK_IMPORTED_MODULE_14__.KEYS.CHEVRON_RIGHT || event.key === _keys__WEBPACK_IMPORTED_MODULE_14__.KEYS.PERIOD);\n }\n});\nconst actionChangeFontFamily = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeFontFamily\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, oldElement => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(oldElement)) {\n const newElement = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(oldElement, {\n fontFamily: value,\n lineHeight: (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getDefaultLineHeight)(value)\n });\n (0,_element__WEBPACK_IMPORTED_MODULE_9__.redrawTextBoundingBox)(newElement, (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getContainerElement)(oldElement));\n return newElement;\n }\n\n return oldElement;\n }, true),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemFontFamily: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n const options = [{\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.FONT_FAMILY.Virgil,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.handDrawn\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FreedrawIcon,\n testId: \"font-family-virgil\"\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.FONT_FAMILY.Helvetica,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.normal\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontFamilyNormalIcon,\n testId: \"font-family-normal\"\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.FONT_FAMILY.Cascadia,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.code\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontFamilyCodeIcon,\n testId: \"font-family-code\"\n }, ...(_components_App__WEBPACK_IMPORTED_MODULE_6__.showFourthFont ? [{\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.FONT_FAMILY.LocalFont,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.localFont\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontFamilyLocalFontIcon,\n testId: \"font-family-fourth\"\n }] : [])];\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.fontFamily\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"font-family\",\n options: options,\n value: getFormValue(elements, appState, element => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element)) {\n return element.fontFamily;\n }\n\n const boundTextElement = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element);\n\n if (boundTextElement) {\n return boundTextElement.fontFamily;\n }\n\n return null;\n }, element => (0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element) || (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element) !== null, hasSelection => hasSelection ? null : appState.currentItemFontFamily || _constants__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_FONT_FAMILY),\n onChange: value => updateData(value)\n })]\n });\n }\n});\nconst actionChangeTextAlign = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeTextAlign\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, oldElement => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(oldElement)) {\n const newElement = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(oldElement, {\n textAlign: value\n });\n (0,_element__WEBPACK_IMPORTED_MODULE_9__.redrawTextBoundingBox)(newElement, (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getContainerElement)(oldElement));\n return newElement;\n }\n\n return oldElement;\n }, true),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemTextAlign: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.textAlign\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"text-align\",\n options: [{\n value: \"left\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.left\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.TextAlignLeftIcon,\n testId: \"align-left\"\n }, {\n value: \"center\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.center\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.TextAlignCenterIcon,\n testId: \"align-horizontal-center\"\n }, {\n value: \"right\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.right\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.TextAlignRightIcon,\n testId: \"align-right\"\n }],\n value: getFormValue(elements, appState, element => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element)) {\n return element.textAlign;\n }\n\n const boundTextElement = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element);\n\n if (boundTextElement) {\n return boundTextElement.textAlign;\n }\n\n return null;\n }, element => (0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element) || (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element) !== null, hasSelection => hasSelection ? null : appState.currentItemTextAlign),\n onChange: value => updateData(value)\n })]\n });\n }\n});\nconst actionChangeVerticalAlign = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeVerticalAlign\",\n trackEvent: {\n category: \"element\"\n },\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, oldElement => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(oldElement)) {\n const newElement = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(oldElement, {\n verticalAlign: value\n });\n (0,_element__WEBPACK_IMPORTED_MODULE_9__.redrawTextBoundingBox)(newElement, (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getContainerElement)(oldElement));\n return newElement;\n }\n\n return oldElement;\n }, true),\n appState: Object.assign({}, appState),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"fieldset\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"text-align\",\n options: [{\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.VERTICAL_ALIGN.TOP,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.alignTop\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.TextAlignTopIcon, {\n theme: appState.theme\n }),\n testId: \"align-top\"\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.VERTICAL_ALIGN.MIDDLE,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.centerVertically\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.TextAlignMiddleIcon, {\n theme: appState.theme\n }),\n testId: \"align-middle\"\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.VERTICAL_ALIGN.BOTTOM,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.alignBottom\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.TextAlignBottomIcon, {\n theme: appState.theme\n }),\n testId: \"align-bottom\"\n }],\n value: getFormValue(elements, appState, element => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element) && element.containerId) {\n return element.verticalAlign;\n }\n\n const boundTextElement = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element);\n\n if (boundTextElement) {\n return boundTextElement.verticalAlign;\n }\n\n return null;\n }, element => (0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element) || (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element) !== null, hasSelection => hasSelection ? null : _constants__WEBPACK_IMPORTED_MODULE_8__.VERTICAL_ALIGN.MIDDLE),\n onChange: value => updateData(value)\n })\n });\n }\n});\nconst actionChangeRoundness = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeRoundness\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n roundness: value === \"round\" ? {\n type: (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_12__.isUsingAdaptiveRadius)(el.type) ? _constants__WEBPACK_IMPORTED_MODULE_8__.ROUNDNESS.ADAPTIVE_RADIUS : _constants__WEBPACK_IMPORTED_MODULE_8__.ROUNDNESS.PROPORTIONAL_RADIUS\n } : null\n })),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemRoundness: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n const targetElements = (0,_scene__WEBPACK_IMPORTED_MODULE_16__.getTargetElements)((0,_element__WEBPACK_IMPORTED_MODULE_9__.getNonDeletedElements)(elements), appState);\n const hasLegacyRoundness = targetElements.some(el => {\n var _a;\n\n return ((_a = el.roundness) === null || _a === void 0 ? void 0 : _a.type) === _constants__WEBPACK_IMPORTED_MODULE_8__.ROUNDNESS.LEGACY;\n });\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.edges\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"edges\",\n options: [{\n value: \"sharp\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.sharp\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.EdgeSharpIcon\n }, {\n value: \"round\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.round\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.EdgeRoundIcon\n }],\n value: getFormValue(elements, appState, element => hasLegacyRoundness ? null : element.roundness ? \"round\" : \"sharp\", element => element.hasOwnProperty(\"roundness\"), hasSelection => hasSelection ? null : appState.currentItemRoundness),\n onChange: value => updateData(value)\n })]\n });\n }\n});\nconst actionChangeArrowhead = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeArrowhead\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, el => {\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_12__.isLinearElement)(el)) {\n const {\n position,\n type\n } = value;\n\n if (position === \"start\") {\n const element = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n startArrowhead: type\n });\n return element;\n } else if (position === \"end\") {\n const element = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n endArrowhead: type\n });\n return element;\n }\n }\n\n return el;\n }),\n appState: Object.assign(Object.assign({}, appState), {\n [value.position === \"start\" ? \"currentItemStartArrowhead\" : \"currentItemEndArrowhead\"]: value.type\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n const isRTL = (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.getLanguage)().rtl;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowheads\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({\n className: \"iconSelectList buttonList\"\n }, {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_IconPicker__WEBPACK_IMPORTED_MODULE_5__.IconPicker, {\n label: \"arrowhead_start\",\n options: [{\n value: null,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_none\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadNoneIcon,\n keyBinding: \"q\"\n }, {\n value: \"arrow\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_arrow\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadArrowIcon, {\n flip: !isRTL\n }),\n keyBinding: \"w\"\n }, {\n value: \"bar\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_bar\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadBarIcon, {\n flip: !isRTL\n }),\n keyBinding: \"e\"\n }, {\n value: \"dot\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_dot\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadDotIcon, {\n flip: !isRTL\n }),\n keyBinding: \"r\"\n }, {\n value: \"triangle\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_triangle\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadTriangleIcon, {\n flip: !isRTL\n }),\n keyBinding: \"t\"\n }],\n value: getFormValue(elements, appState, element => (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_12__.isLinearElement)(element) && (0,_scene__WEBPACK_IMPORTED_MODULE_16__.canHaveArrowheads)(element.type) ? element.startArrowhead : appState.currentItemStartArrowhead, true, appState.currentItemStartArrowhead),\n onChange: value => updateData({\n position: \"start\",\n type: value\n })\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_IconPicker__WEBPACK_IMPORTED_MODULE_5__.IconPicker, {\n label: \"arrowhead_end\",\n group: \"arrowheads\",\n options: [{\n value: null,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_none\"),\n keyBinding: \"q\",\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadNoneIcon\n }, {\n value: \"arrow\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_arrow\"),\n keyBinding: \"w\",\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadArrowIcon, {\n flip: isRTL\n })\n }, {\n value: \"bar\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_bar\"),\n keyBinding: \"e\",\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadBarIcon, {\n flip: isRTL\n })\n }, {\n value: \"dot\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_dot\"),\n keyBinding: \"r\",\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadDotIcon, {\n flip: isRTL\n })\n }, {\n value: \"triangle\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_triangle\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadTriangleIcon, {\n flip: isRTL\n }),\n keyBinding: \"t\"\n }],\n value: getFormValue(elements, appState, element => (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_12__.isLinearElement)(element) && (0,_scene__WEBPACK_IMPORTED_MODULE_16__.canHaveArrowheads)(element.type) ? element.endArrowhead : appState.currentItemEndArrowhead, true, appState.currentItemEndArrowhead),\n onChange: value => updateData({\n position: \"end\",\n type: value\n })\n })]\n }))]\n });\n }\n});\n\n//# sourceURL=webpack://ExcalidrawLib/../../actions/actionProperties.tsx?");
2064
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"actionChangeArrowhead\": () => (/* binding */ actionChangeArrowhead),\n/* harmony export */ \"actionChangeBackgroundColor\": () => (/* binding */ actionChangeBackgroundColor),\n/* harmony export */ \"actionChangeFillStyle\": () => (/* binding */ actionChangeFillStyle),\n/* harmony export */ \"actionChangeFontFamily\": () => (/* binding */ actionChangeFontFamily),\n/* harmony export */ \"actionChangeFontSize\": () => (/* binding */ actionChangeFontSize),\n/* harmony export */ \"actionChangeOpacity\": () => (/* binding */ actionChangeOpacity),\n/* harmony export */ \"actionChangeRoundness\": () => (/* binding */ actionChangeRoundness),\n/* harmony export */ \"actionChangeSloppiness\": () => (/* binding */ actionChangeSloppiness),\n/* harmony export */ \"actionChangeStrokeColor\": () => (/* binding */ actionChangeStrokeColor),\n/* harmony export */ \"actionChangeStrokeStyle\": () => (/* binding */ actionChangeStrokeStyle),\n/* harmony export */ \"actionChangeStrokeWidth\": () => (/* binding */ actionChangeStrokeWidth),\n/* harmony export */ \"actionChangeTextAlign\": () => (/* binding */ actionChangeTextAlign),\n/* harmony export */ \"actionChangeVerticalAlign\": () => (/* binding */ actionChangeVerticalAlign),\n/* harmony export */ \"actionDecreaseFontSize\": () => (/* binding */ actionDecreaseFontSize),\n/* harmony export */ \"actionIncreaseFontSize\": () => (/* binding */ actionIncreaseFontSize),\n/* harmony export */ \"changeProperty\": () => (/* binding */ changeProperty),\n/* harmony export */ \"getFormValue\": () => (/* binding */ getFormValue)\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 _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../colors */ \"../../colors.ts\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../analytics */ \"../../analytics.ts\");\n/* harmony import */ var _components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/ButtonIconSelect */ \"../../components/ButtonIconSelect.tsx\");\n/* harmony import */ var _components_ColorPicker_ColorPicker__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/ColorPicker/ColorPicker */ \"../../components/ColorPicker/ColorPicker.tsx\");\n/* harmony import */ var _components_IconPicker__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/IconPicker */ \"../../components/IconPicker.tsx\");\n/* harmony import */ var _components_App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/App */ \"../../components/App.tsx\");\n/* harmony import */ var _components_icons__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../element/mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _element_textElement__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../element/textElement */ \"../../element/textElement.ts\");\n/* harmony import */ var _element_typeChecks__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../element/typeChecks */ \"../../element/typeChecks.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../random */ \"../../random.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _scene_comparisons__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../scene/comparisons */ \"../../scene/comparisons.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _register__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./register */ \"../../actions/register.ts\");\n\n\n\n\n\n\n // TODO barnabasmolnar/editor-redesign\n// TextAlignTopIcon, TextAlignBottomIcon,TextAlignMiddleIcon,\n// ArrowHead icons\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst FONT_SIZE_RELATIVE_INCREASE_STEP = 0.1;\nconst changeProperty = (elements, appState, callback, includeBoundText = false) => {\n const selectedElementIds = (0,_utils__WEBPACK_IMPORTED_MODULE_18__.arrayToMap)((0,_scene__WEBPACK_IMPORTED_MODULE_16__.getSelectedElements)(elements, appState, {\n includeBoundTextElement: includeBoundText\n }));\n return elements.map(element => {\n var _a;\n\n if (selectedElementIds.get(element.id) || element.id === ((_a = appState.editingElement) === null || _a === void 0 ? void 0 : _a.id)) {\n return callback(element);\n }\n\n return element;\n });\n};\nconst getFormValue = function (elements, appState, getAttribute, isRelevantElement, defaultValue) {\n var _a;\n\n const editingElement = appState.editingElement;\n const nonDeletedElements = (0,_element__WEBPACK_IMPORTED_MODULE_9__.getNonDeletedElements)(elements);\n let ret = null;\n\n if (editingElement) {\n ret = getAttribute(editingElement);\n }\n\n if (!ret) {\n const hasSelection = (0,_scene__WEBPACK_IMPORTED_MODULE_16__.isSomeElementSelected)(nonDeletedElements, appState);\n\n if (hasSelection) {\n ret = (_a = (0,_scene__WEBPACK_IMPORTED_MODULE_16__.getCommonAttributeOfSelectedElements)(isRelevantElement === true ? nonDeletedElements : nonDeletedElements.filter(el => isRelevantElement(el)), appState, getAttribute)) !== null && _a !== void 0 ? _a : typeof defaultValue === \"function\" ? defaultValue(true) : defaultValue;\n } else {\n ret = typeof defaultValue === \"function\" ? defaultValue(false) : defaultValue;\n }\n }\n\n return ret;\n};\n\nconst offsetElementAfterFontResize = (prevElement, nextElement) => {\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_12__.isBoundToContainer)(nextElement)) {\n return nextElement;\n }\n\n return (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.mutateElement)(nextElement, {\n x: prevElement.textAlign === \"left\" ? prevElement.x : prevElement.x + (prevElement.width - nextElement.width) / (prevElement.textAlign === \"center\" ? 2 : 1),\n // centering vertically is non-standard, but for Excalidraw I think\n // it makes sense\n y: prevElement.y + (prevElement.height - nextElement.height) / 2\n }, false);\n};\n\nconst changeFontSize = (elements, appState, getNewFontSize, fallbackValue) => {\n const newFontSizes = new Set();\n return {\n elements: changeProperty(elements, appState, oldElement => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(oldElement)) {\n const newFontSize = getNewFontSize(oldElement);\n newFontSizes.add(newFontSize);\n let newElement = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(oldElement, {\n fontSize: newFontSize\n });\n (0,_element__WEBPACK_IMPORTED_MODULE_9__.redrawTextBoundingBox)(newElement, (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getContainerElement)(oldElement));\n newElement = offsetElementAfterFontResize(oldElement, newElement);\n return newElement;\n }\n\n return oldElement;\n }, true),\n appState: Object.assign(Object.assign({}, appState), {\n // update state only if we've set all select text elements to\n // the same font size\n currentItemFontSize: newFontSizes.size === 1 ? [...newFontSizes][0] : fallbackValue !== null && fallbackValue !== void 0 ? fallbackValue : appState.currentItemFontSize\n }),\n commitToHistory: true\n };\n}; // -----------------------------------------------------------------------------\n\n\nconst actionChangeStrokeColor = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeStrokeColor\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n //zsviczian added containers\n const containers = (0,_scene__WEBPACK_IMPORTED_MODULE_16__.getSelectedElements)(elements, appState, {\n includeBoundTextElement: false\n }).filter(el => el.boundElements).map(el => el.id);\n return Object.assign(Object.assign({}, value.currentItemStrokeColor && {\n elements: changeProperty(elements, appState, el => {\n var _a;\n\n if ( //zsviczian\n (0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(el) && el.containerId && containers.includes(el.containerId) && ((_a = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getContainerElement)(el)) === null || _a === void 0 ? void 0 : _a.strokeColor) !== el.strokeColor) {\n return el;\n }\n\n return (0,_scene_comparisons__WEBPACK_IMPORTED_MODULE_17__.hasStrokeColor)(el.type) ? (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n strokeColor: value.currentItemStrokeColor\n }) : el;\n }, true)\n }), {\n appState: Object.assign(Object.assign({}, appState), value),\n commitToHistory: !!value.currentItemStrokeColor\n });\n },\n PanelComponent: ({\n elements,\n appState,\n updateData,\n appProps\n }) => {\n var _a, _b, _c, _d, _e;\n\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h3\", Object.assign({\n \"aria-hidden\": \"true\"\n }, {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.stroke\")\n })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ColorPicker_ColorPicker__WEBPACK_IMPORTED_MODULE_4__.ColorPicker, {\n topPicks: //zsviczian\n (_c = (_b = (_a = appState.colorPalette) === null || _a === void 0 ? void 0 : _a.topPicks) === null || _b === void 0 ? void 0 : _b.elementStroke) !== null && _c !== void 0 ? _c : _colors__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_ELEMENT_STROKE_PICKS,\n palette: //zsviczian\n (_e = (_d = appState.colorPalette) === null || _d === void 0 ? void 0 : _d.elementStroke) !== null && _e !== void 0 ? _e : _colors__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_ELEMENT_STROKE_COLOR_PALETTE,\n type: \"elementStroke\",\n label: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.stroke\"),\n color: getFormValue(elements, appState, element => element.strokeColor, true, appState.currentItemStrokeColor),\n onChange: color => updateData({\n currentItemStrokeColor: color\n }),\n elements: elements,\n appState: appState,\n updateData: updateData\n })]\n });\n }\n});\nconst actionChangeBackgroundColor = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeBackgroundColor\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return Object.assign(Object.assign({}, value.currentItemBackgroundColor && {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n backgroundColor: value.currentItemBackgroundColor\n }))\n }), {\n appState: Object.assign(Object.assign({}, appState), value),\n commitToHistory: !!value.currentItemBackgroundColor\n });\n },\n PanelComponent: ({\n elements,\n appState,\n updateData,\n appProps\n }) => {\n var _a, _b, _c, _d, _e;\n\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h3\", Object.assign({\n \"aria-hidden\": \"true\"\n }, {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.background\")\n })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ColorPicker_ColorPicker__WEBPACK_IMPORTED_MODULE_4__.ColorPicker, {\n topPicks: //zsviczian\n (_c = (_b = (_a = appState.colorPalette) === null || _a === void 0 ? void 0 : _a.topPicks) === null || _b === void 0 ? void 0 : _b.elementBackground) !== null && _c !== void 0 ? _c : _colors__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_ELEMENT_BACKGROUND_PICKS,\n palette: //zsviczian\n (_e = (_d = appState.colorPalette) === null || _d === void 0 ? void 0 : _d.elementBackground) !== null && _e !== void 0 ? _e : _colors__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_ELEMENT_BACKGROUND_COLOR_PALETTE,\n type: \"elementBackground\",\n label: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.background\"),\n color: getFormValue(elements, appState, element => element.backgroundColor, true, appState.currentItemBackgroundColor),\n onChange: color => updateData({\n currentItemBackgroundColor: color\n }),\n elements: elements,\n appState: appState,\n updateData: updateData\n })]\n });\n }\n});\nconst actionChangeFillStyle = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeFillStyle\",\n trackEvent: false,\n perform: (elements, appState, value, app) => {\n (0,_analytics__WEBPACK_IMPORTED_MODULE_2__.trackEvent)(\"element\", \"changeFillStyle\", `${value} (${app.device.isMobile ? \"mobile\" : \"desktop\"})`);\n return {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n fillStyle: value\n })),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemFillStyle: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_16__.getSelectedElements)(elements, appState);\n const allElementsZigZag = selectedElements.length > 0 && selectedElements.every(el => el.fillStyle === \"zigzag\");\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.fill\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n type: \"button\",\n options: [{\n value: \"hachure\",\n text: `${allElementsZigZag ? (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.zigzag\") : (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.hachure\")} (${(0,_utils__WEBPACK_IMPORTED_MODULE_18__.getShortcutKey)(\"Alt-Click\")})`,\n icon: allElementsZigZag ? _components_icons__WEBPACK_IMPORTED_MODULE_7__.FillZigZagIcon : _components_icons__WEBPACK_IMPORTED_MODULE_7__.FillHachureIcon,\n active: allElementsZigZag ? true : undefined,\n testId: `fill-hachure`\n }, {\n value: \"cross-hatch\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.crossHatch\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FillCrossHatchIcon,\n testId: `fill-cross-hatch`\n }, {\n value: \"solid\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.solid\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FillSolidIcon,\n testId: `fill-solid`\n }],\n value: getFormValue(elements, appState, element => element.fillStyle, element => element.hasOwnProperty(\"fillStyle\"), hasSelection => hasSelection ? null : appState.currentItemFillStyle),\n onClick: (value, event) => {\n const nextValue = event.altKey && value === \"hachure\" && selectedElements.every(el => el.fillStyle === \"hachure\") ? \"zigzag\" : value;\n updateData(nextValue);\n }\n })]\n });\n }\n});\nconst actionChangeStrokeWidth = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeStrokeWidth\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n strokeWidth: value\n })),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemStrokeWidth: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.strokeWidth\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"stroke-width\",\n options: [{\n value: 0.5,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.extraThin\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeWidthThinIcon\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.STROKE_WIDTH.thin,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.thin\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeWidthBaseIcon,\n testId: \"strokeWidth-thin\"\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.STROKE_WIDTH.bold,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.bold\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeWidthBoldIcon,\n testId: \"strokeWidth-bold\"\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.STROKE_WIDTH.extraBold,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.extraBold\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeWidthExtraBoldIcon,\n testId: \"strokeWidth-extraBold\"\n }],\n value: getFormValue(elements, appState, element => element.strokeWidth, element => element.hasOwnProperty(\"strokeWidth\"), hasSelection => hasSelection ? null : appState.currentItemStrokeWidth),\n onChange: value => updateData(value)\n })]\n })\n});\nconst actionChangeSloppiness = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeSloppiness\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n seed: (0,_random__WEBPACK_IMPORTED_MODULE_15__.randomInteger)(),\n roughness: value\n })),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemRoughness: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.sloppiness\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"sloppiness\",\n options: [{\n value: 0,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.architect\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.SloppinessArchitectIcon\n }, {\n value: 1,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.artist\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.SloppinessArtistIcon\n }, {\n value: 2,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.cartoonist\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.SloppinessCartoonistIcon\n }],\n value: getFormValue(elements, appState, element => element.roughness, element => element.hasOwnProperty(\"roughness\"), hasSelection => hasSelection ? null : appState.currentItemRoughness),\n onChange: value => updateData(value)\n })]\n })\n});\nconst actionChangeStrokeStyle = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeStrokeStyle\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n strokeStyle: value\n })),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemStrokeStyle: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.strokeStyle\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"strokeStyle\",\n options: [{\n value: \"solid\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.strokeStyle_solid\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeWidthBaseIcon\n }, {\n value: \"dashed\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.strokeStyle_dashed\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeStyleDashedIcon\n }, {\n value: \"dotted\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.strokeStyle_dotted\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.StrokeStyleDottedIcon\n }],\n value: getFormValue(elements, appState, element => element.strokeStyle, element => element.hasOwnProperty(\"strokeStyle\"), hasSelection => hasSelection ? null : appState.currentItemStrokeStyle),\n onChange: value => updateData(value)\n })]\n })\n});\nconst actionChangeOpacity = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeOpacity\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n opacity: value\n }), true),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemOpacity: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n var _a;\n\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"label\", Object.assign({\n className: \"control-label\"\n }, {\n children: [(0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.opacity\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"input\", {\n type: \"range\",\n min: \"0\",\n max: \"100\",\n step: \"10\",\n onChange: event => updateData(+event.target.value),\n value: (_a = getFormValue(elements, appState, element => element.opacity, true, appState.currentItemOpacity)) !== null && _a !== void 0 ? _a : undefined\n })]\n }));\n }\n});\nconst actionChangeFontSize = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeFontSize\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return changeFontSize(elements, appState, () => value, value);\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.fontSize\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"font-size\",\n options: [{\n value: 16,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.small\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontSizeSmallIcon,\n testId: \"fontSize-small\"\n }, {\n value: 20,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.medium\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontSizeMediumIcon,\n testId: \"fontSize-medium\"\n }, {\n value: 28,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.large\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontSizeLargeIcon,\n testId: \"fontSize-large\"\n }, {\n value: 36,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.veryLarge\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontSizeExtraLargeIcon,\n testId: \"fontSize-veryLarge\"\n }],\n value: getFormValue(elements, appState, element => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element)) {\n return element.fontSize;\n }\n\n const boundTextElement = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element);\n\n if (boundTextElement) {\n return boundTextElement.fontSize;\n }\n\n return null;\n }, element => (0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element) || (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element) !== null, hasSelection => hasSelection ? null : appState.currentItemFontSize || _constants__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_FONT_SIZE),\n onChange: value => updateData(value)\n })]\n })\n});\nconst actionDecreaseFontSize = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"decreaseFontSize\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return changeFontSize(elements, appState, element => Math.round( // get previous value before relative increase (doesn't work fully\n // due to rounding and float precision issues)\n 1 / (1 + FONT_SIZE_RELATIVE_INCREASE_STEP) * element.fontSize));\n },\n keyTest: event => {\n return event[_keys__WEBPACK_IMPORTED_MODULE_14__.KEYS.CTRL_OR_CMD] && event.shiftKey && ( // KEYS.COMMA needed for MacOS\n event.key === _keys__WEBPACK_IMPORTED_MODULE_14__.KEYS.CHEVRON_LEFT || event.key === _keys__WEBPACK_IMPORTED_MODULE_14__.KEYS.COMMA);\n }\n});\nconst actionIncreaseFontSize = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"increaseFontSize\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return changeFontSize(elements, appState, element => Math.round(element.fontSize * (1 + FONT_SIZE_RELATIVE_INCREASE_STEP)));\n },\n keyTest: event => {\n return event[_keys__WEBPACK_IMPORTED_MODULE_14__.KEYS.CTRL_OR_CMD] && event.shiftKey && ( // KEYS.PERIOD needed for MacOS\n event.key === _keys__WEBPACK_IMPORTED_MODULE_14__.KEYS.CHEVRON_RIGHT || event.key === _keys__WEBPACK_IMPORTED_MODULE_14__.KEYS.PERIOD);\n }\n});\nconst actionChangeFontFamily = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeFontFamily\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, oldElement => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(oldElement)) {\n const newElement = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(oldElement, {\n fontFamily: value,\n lineHeight: (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getDefaultLineHeight)(value)\n });\n (0,_element__WEBPACK_IMPORTED_MODULE_9__.redrawTextBoundingBox)(newElement, (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getContainerElement)(oldElement));\n return newElement;\n }\n\n return oldElement;\n }, true),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemFontFamily: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n const options = [{\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.FONT_FAMILY.Virgil,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.handDrawn\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FreedrawIcon,\n testId: \"font-family-virgil\"\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.FONT_FAMILY.Helvetica,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.normal\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontFamilyNormalIcon,\n testId: \"font-family-normal\"\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.FONT_FAMILY.Cascadia,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.code\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontFamilyCodeIcon,\n testId: \"font-family-code\"\n }, ...(_components_App__WEBPACK_IMPORTED_MODULE_6__.showFourthFont ? [{\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.FONT_FAMILY.LocalFont,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.localFont\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.FontFamilyLocalFontIcon,\n testId: \"font-family-fourth\"\n }] : [])];\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.fontFamily\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"font-family\",\n options: options,\n value: getFormValue(elements, appState, element => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element)) {\n return element.fontFamily;\n }\n\n const boundTextElement = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element);\n\n if (boundTextElement) {\n return boundTextElement.fontFamily;\n }\n\n return null;\n }, element => (0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element) || (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element) !== null, hasSelection => hasSelection ? null : appState.currentItemFontFamily || _constants__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_FONT_FAMILY),\n onChange: value => updateData(value)\n })]\n });\n }\n});\nconst actionChangeTextAlign = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeTextAlign\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, oldElement => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(oldElement)) {\n const newElement = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(oldElement, {\n textAlign: value\n });\n (0,_element__WEBPACK_IMPORTED_MODULE_9__.redrawTextBoundingBox)(newElement, (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getContainerElement)(oldElement));\n return newElement;\n }\n\n return oldElement;\n }, true),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemTextAlign: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.textAlign\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"text-align\",\n options: [{\n value: \"left\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.left\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.TextAlignLeftIcon,\n testId: \"align-left\"\n }, {\n value: \"center\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.center\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.TextAlignCenterIcon,\n testId: \"align-horizontal-center\"\n }, {\n value: \"right\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.right\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.TextAlignRightIcon,\n testId: \"align-right\"\n }],\n value: getFormValue(elements, appState, element => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element)) {\n return element.textAlign;\n }\n\n const boundTextElement = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element);\n\n if (boundTextElement) {\n return boundTextElement.textAlign;\n }\n\n return null;\n }, element => (0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element) || (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element) !== null, hasSelection => hasSelection ? null : appState.currentItemTextAlign),\n onChange: value => updateData(value)\n })]\n });\n }\n});\nconst actionChangeVerticalAlign = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeVerticalAlign\",\n trackEvent: {\n category: \"element\"\n },\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, oldElement => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(oldElement)) {\n const newElement = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(oldElement, {\n verticalAlign: value\n });\n (0,_element__WEBPACK_IMPORTED_MODULE_9__.redrawTextBoundingBox)(newElement, (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getContainerElement)(oldElement));\n return newElement;\n }\n\n return oldElement;\n }, true),\n appState: Object.assign({}, appState),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"fieldset\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"text-align\",\n options: [{\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.VERTICAL_ALIGN.TOP,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.alignTop\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.TextAlignTopIcon, {\n theme: appState.theme\n }),\n testId: \"align-top\"\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.VERTICAL_ALIGN.MIDDLE,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.centerVertically\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.TextAlignMiddleIcon, {\n theme: appState.theme\n }),\n testId: \"align-middle\"\n }, {\n value: _constants__WEBPACK_IMPORTED_MODULE_8__.VERTICAL_ALIGN.BOTTOM,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.alignBottom\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.TextAlignBottomIcon, {\n theme: appState.theme\n }),\n testId: \"align-bottom\"\n }],\n value: getFormValue(elements, appState, element => {\n if ((0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element) && element.containerId) {\n return element.verticalAlign;\n }\n\n const boundTextElement = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element);\n\n if (boundTextElement) {\n return boundTextElement.verticalAlign;\n }\n\n return null;\n }, element => (0,_element__WEBPACK_IMPORTED_MODULE_9__.isTextElement)(element) || (0,_element_textElement__WEBPACK_IMPORTED_MODULE_11__.getBoundTextElement)(element) !== null, hasSelection => hasSelection ? null : _constants__WEBPACK_IMPORTED_MODULE_8__.VERTICAL_ALIGN.MIDDLE),\n onChange: value => updateData(value)\n })\n });\n }\n});\nconst actionChangeRoundness = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeRoundness\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, el => (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n roundness: value === \"round\" ? {\n type: (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_12__.isUsingAdaptiveRadius)(el.type) ? _constants__WEBPACK_IMPORTED_MODULE_8__.ROUNDNESS.ADAPTIVE_RADIUS : _constants__WEBPACK_IMPORTED_MODULE_8__.ROUNDNESS.PROPORTIONAL_RADIUS\n } : null\n })),\n appState: Object.assign(Object.assign({}, appState), {\n currentItemRoundness: value\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n const targetElements = (0,_scene__WEBPACK_IMPORTED_MODULE_16__.getTargetElements)((0,_element__WEBPACK_IMPORTED_MODULE_9__.getNonDeletedElements)(elements), appState);\n const hasLegacyRoundness = targetElements.some(el => {\n var _a;\n\n return ((_a = el.roundness) === null || _a === void 0 ? void 0 : _a.type) === _constants__WEBPACK_IMPORTED_MODULE_8__.ROUNDNESS.LEGACY;\n });\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.edges\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ButtonIconSelect__WEBPACK_IMPORTED_MODULE_3__.ButtonIconSelect, {\n group: \"edges\",\n options: [{\n value: \"sharp\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.sharp\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.EdgeSharpIcon\n }, {\n value: \"round\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.round\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.EdgeRoundIcon\n }],\n value: getFormValue(elements, appState, element => hasLegacyRoundness ? null : element.roundness ? \"round\" : \"sharp\", element => element.hasOwnProperty(\"roundness\"), hasSelection => hasSelection ? null : appState.currentItemRoundness),\n onChange: value => updateData(value)\n })]\n });\n }\n});\nconst actionChangeArrowhead = (0,_register__WEBPACK_IMPORTED_MODULE_19__.register)({\n name: \"changeArrowhead\",\n trackEvent: false,\n perform: (elements, appState, value) => {\n return {\n elements: changeProperty(elements, appState, el => {\n if ((0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_12__.isLinearElement)(el)) {\n const {\n position,\n type\n } = value;\n\n if (position === \"start\") {\n const element = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n startArrowhead: type\n });\n return element;\n } else if (position === \"end\") {\n const element = (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_10__.newElementWith)(el, {\n endArrowhead: type\n });\n return element;\n }\n }\n\n return el;\n }),\n appState: Object.assign(Object.assign({}, appState), {\n [value.position === \"start\" ? \"currentItemStartArrowhead\" : \"currentItemEndArrowhead\"]: value.type\n }),\n commitToHistory: true\n };\n },\n PanelComponent: ({\n elements,\n appState,\n updateData\n }) => {\n const isRTL = (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.getLanguage)().rtl;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", {\n children: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowheads\")\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({\n className: \"iconSelectList buttonList\"\n }, {\n children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_IconPicker__WEBPACK_IMPORTED_MODULE_5__.IconPicker, {\n label: \"arrowhead_start\",\n options: [{\n value: null,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_none\"),\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadNoneIcon,\n keyBinding: \"q\"\n }, {\n value: \"arrow\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_arrow\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadArrowIcon, {\n flip: !isRTL\n }),\n keyBinding: \"w\"\n }, {\n value: \"bar\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_bar\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadBarIcon, {\n flip: !isRTL\n }),\n keyBinding: \"e\"\n }, {\n value: \"dot\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_dot\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadDotIcon, {\n flip: !isRTL\n }),\n keyBinding: \"r\"\n }, {\n value: \"triangle\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_triangle\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadTriangleIcon, {\n flip: !isRTL\n }),\n keyBinding: \"t\"\n }],\n value: getFormValue(elements, appState, element => (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_12__.isLinearElement)(element) && (0,_scene__WEBPACK_IMPORTED_MODULE_16__.canHaveArrowheads)(element.type) ? element.startArrowhead : appState.currentItemStartArrowhead, true, appState.currentItemStartArrowhead),\n onChange: value => updateData({\n position: \"start\",\n type: value\n })\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_IconPicker__WEBPACK_IMPORTED_MODULE_5__.IconPicker, {\n label: \"arrowhead_end\",\n group: \"arrowheads\",\n options: [{\n value: null,\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_none\"),\n keyBinding: \"q\",\n icon: _components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadNoneIcon\n }, {\n value: \"arrow\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_arrow\"),\n keyBinding: \"w\",\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadArrowIcon, {\n flip: isRTL\n })\n }, {\n value: \"bar\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_bar\"),\n keyBinding: \"e\",\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadBarIcon, {\n flip: isRTL\n })\n }, {\n value: \"dot\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_dot\"),\n keyBinding: \"r\",\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadDotIcon, {\n flip: isRTL\n })\n }, {\n value: \"triangle\",\n text: (0,_i18n__WEBPACK_IMPORTED_MODULE_13__.t)(\"labels.arrowhead_triangle\"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_icons__WEBPACK_IMPORTED_MODULE_7__.ArrowheadTriangleIcon, {\n flip: isRTL\n }),\n keyBinding: \"t\"\n }],\n value: getFormValue(elements, appState, element => (0,_element_typeChecks__WEBPACK_IMPORTED_MODULE_12__.isLinearElement)(element) && (0,_scene__WEBPACK_IMPORTED_MODULE_16__.canHaveArrowheads)(element.type) ? element.endArrowhead : appState.currentItemEndArrowhead, true, appState.currentItemEndArrowhead),\n onChange: value => updateData({\n position: \"end\",\n type: value\n })\n })]\n }))]\n });\n }\n});\n\n//# sourceURL=webpack://ExcalidrawLib/../../actions/actionProperties.tsx?");
2065
2065
 
2066
2066
  /***/ }),
2067
2067
 
@@ -2215,7 +2215,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2215
2215
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2216
2216
 
2217
2217
  "use strict";
2218
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"trackEvent\": () => (/* binding */ trackEvent)\n/* harmony export */ });\nconst trackEvent = (category, action, label, value) => {\n try {\n // place here categories that you want to track as events\n // KEEP IN MIND THE PRICING\n const ALLOWED_CATEGORIES_TO_TRACK = []; // Uncomment the next line to track locally\n // console.log(\"Track Event\", { category, action, label, value });\n\n if (typeof window === \"undefined\" || ({\"VITE_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"VITE_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"VITE_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"VITE_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"VITE_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"VITE_APP_PORTAL_URL\":\"\",\"VITE_APP_PLUS_LP\":\"https://plus.excalidraw.com\",\"VITE_APP_PLUS_APP\":\"https://app.excalidraw.com\",\"VITE_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\\\"}\",\"VITE_APP_DEV_ENABLE_SW\":\"\",\"VITE_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"VITE_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"VITE_APP_PORT\":\"3000\",\"VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"VITE_APP_COLLAPSE_OVERLAY\":\"true\",\"VITE_APP_ENABLE_ESLINT\":\"true\",\"VITE_PKG_NAME\":\"@zsviczian/excalidraw\",\"VITE_PKG_VERSION\":\"0.16.1-obsidian-5\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}).VITE_WORKER_ID) {\n return;\n }\n\n if (!ALLOWED_CATEGORIES_TO_TRACK.includes(category)) {\n return;\n }\n\n if (window.sa_event) {\n window.sa_event(action, {\n category,\n label,\n value\n });\n }\n } catch (error) {\n console.error(\"error during analytics\", error);\n }\n};\n\n//# sourceURL=webpack://ExcalidrawLib/../../analytics.ts?");
2218
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"trackEvent\": () => (/* binding */ trackEvent)\n/* harmony export */ });\nconst trackEvent = (category, action, label, value) => {\n try {\n // place here categories that you want to track as events\n // KEEP IN MIND THE PRICING\n const ALLOWED_CATEGORIES_TO_TRACK = []; // Uncomment the next line to track locally\n // console.log(\"Track Event\", { category, action, label, value });\n\n if (typeof window === \"undefined\" || ({\"VITE_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"VITE_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"VITE_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"VITE_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"VITE_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"VITE_APP_PORTAL_URL\":\"\",\"VITE_APP_PLUS_LP\":\"https://plus.excalidraw.com\",\"VITE_APP_PLUS_APP\":\"https://app.excalidraw.com\",\"VITE_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\\\"}\",\"VITE_APP_DEV_ENABLE_SW\":\"\",\"VITE_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"VITE_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"VITE_APP_PORT\":\"3000\",\"VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"VITE_APP_COLLAPSE_OVERLAY\":\"true\",\"VITE_APP_ENABLE_ESLINT\":\"true\",\"VITE_PKG_NAME\":\"@zsviczian/excalidraw\",\"VITE_PKG_VERSION\":\"0.16.1-obsidian-6\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}).VITE_WORKER_ID) {\n return;\n }\n\n if (!ALLOWED_CATEGORIES_TO_TRACK.includes(category)) {\n return;\n }\n\n if (window.sa_event) {\n window.sa_event(action, {\n category,\n label,\n value\n });\n }\n } catch (error) {\n console.error(\"error during analytics\", error);\n }\n};\n\n//# sourceURL=webpack://ExcalidrawLib/../../analytics.ts?");
2219
2219
 
2220
2220
  /***/ }),
2221
2221
 
@@ -3458,7 +3458,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3458
3458
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3459
3459
 
3460
3460
  "use strict";
3461
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ACTIVE_THRESHOLD\": () => (/* binding */ ACTIVE_THRESHOLD),\n/* harmony export */ \"APP_NAME\": () => (/* binding */ APP_NAME),\n/* harmony export */ \"ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO\": () => (/* binding */ ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO),\n/* harmony export */ \"ARROW_LABEL_WIDTH_FRACTION\": () => (/* binding */ ARROW_LABEL_WIDTH_FRACTION),\n/* harmony export */ \"BOUND_TEXT_PADDING\": () => (/* binding */ BOUND_TEXT_PADDING),\n/* harmony export */ \"CANVAS_ONLY_ACTIONS\": () => (/* binding */ CANVAS_ONLY_ACTIONS),\n/* harmony export */ \"CLASSES\": () => (/* binding */ CLASSES),\n/* harmony export */ \"COLOR_NAMES\": () => (/* binding */ COLOR_NAMES),\n/* harmony export */ \"CURSOR_TYPE\": () => (/* binding */ CURSOR_TYPE),\n/* harmony export */ \"DEFAULT_ADAPTIVE_RADIUS\": () => (/* binding */ DEFAULT_ADAPTIVE_RADIUS),\n/* harmony export */ \"DEFAULT_ELEMENT_PROPS\": () => (/* binding */ DEFAULT_ELEMENT_PROPS),\n/* harmony export */ \"DEFAULT_EXPORT_PADDING\": () => (/* binding */ DEFAULT_EXPORT_PADDING),\n/* harmony export */ \"DEFAULT_FONT_FAMILY\": () => (/* binding */ DEFAULT_FONT_FAMILY),\n/* harmony export */ \"DEFAULT_FONT_SIZE\": () => (/* binding */ DEFAULT_FONT_SIZE),\n/* harmony export */ \"DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT\": () => (/* binding */ DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT),\n/* harmony export */ \"DEFAULT_PROPORTIONAL_RADIUS\": () => (/* binding */ DEFAULT_PROPORTIONAL_RADIUS),\n/* harmony export */ \"DEFAULT_SIDEBAR\": () => (/* binding */ DEFAULT_SIDEBAR),\n/* harmony export */ \"DEFAULT_TEXT_ALIGN\": () => (/* binding */ DEFAULT_TEXT_ALIGN),\n/* harmony export */ \"DEFAULT_UI_OPTIONS\": () => (/* binding */ DEFAULT_UI_OPTIONS),\n/* harmony export */ \"DEFAULT_VERSION\": () => (/* binding */ DEFAULT_VERSION),\n/* harmony export */ \"DEFAULT_VERTICAL_ALIGN\": () => (/* binding */ DEFAULT_VERTICAL_ALIGN),\n/* harmony export */ \"DRAGGING_THRESHOLD\": () => (/* binding */ DRAGGING_THRESHOLD),\n/* harmony export */ \"ELEMENT_READY_TO_ERASE_OPACITY\": () => (/* binding */ ELEMENT_READY_TO_ERASE_OPACITY),\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 */ \"ENCRYPTION_KEY_BITS\": () => (/* binding */ ENCRYPTION_KEY_BITS),\n/* harmony export */ \"ENV\": () => (/* binding */ ENV),\n/* harmony export */ \"EVENT\": () => (/* binding */ EVENT),\n/* harmony export */ \"EXPORT_DATA_TYPES\": () => (/* binding */ EXPORT_DATA_TYPES),\n/* harmony export */ \"EXPORT_IMAGE_TYPES\": () => (/* binding */ EXPORT_IMAGE_TYPES),\n/* harmony export */ \"EXPORT_SCALES\": () => (/* binding */ EXPORT_SCALES),\n/* harmony export */ \"EXPORT_SOURCE\": () => (/* binding */ EXPORT_SOURCE),\n/* harmony export */ \"FONT_FAMILY\": () => (/* binding */ FONT_FAMILY),\n/* harmony export */ \"FRAME_STYLE\": () => (/* binding */ FRAME_STYLE),\n/* harmony export */ \"GRID_SIZE\": () => (/* binding */ GRID_SIZE),\n/* harmony export */ \"HYPERLINK_TOOLTIP_DELAY\": () => (/* binding */ HYPERLINK_TOOLTIP_DELAY),\n/* harmony export */ \"IDLE_THRESHOLD\": () => (/* binding */ IDLE_THRESHOLD),\n/* harmony export */ \"IMAGE_MIME_TYPES\": () => (/* binding */ IMAGE_MIME_TYPES),\n/* harmony export */ \"IMAGE_RENDER_TIMEOUT\": () => (/* binding */ IMAGE_RENDER_TIMEOUT),\n/* harmony export */ \"LIBRARY_DISABLED_TYPES\": () => (/* binding */ LIBRARY_DISABLED_TYPES),\n/* harmony export */ \"LIBRARY_SIDEBAR_TAB\": () => (/* binding */ LIBRARY_SIDEBAR_TAB),\n/* harmony export */ \"LIBRARY_SIDEBAR_WIDTH\": () => (/* binding */ LIBRARY_SIDEBAR_WIDTH),\n/* harmony export */ \"LINE_CONFIRM_THRESHOLD\": () => (/* binding */ LINE_CONFIRM_THRESHOLD),\n/* harmony export */ \"MAX_ALLOWED_FILE_BYTES\": () => (/* binding */ MAX_ALLOWED_FILE_BYTES),\n/* harmony export */ \"MAX_DECIMALS_FOR_SVG_EXPORT\": () => (/* binding */ MAX_DECIMALS_FOR_SVG_EXPORT),\n/* harmony export */ \"MIME_TYPES\": () => (/* binding */ MIME_TYPES),\n/* harmony export */ \"MIN_FONT_SIZE\": () => (/* binding */ MIN_FONT_SIZE),\n/* harmony export */ \"MIN_ZOOM\": () => (/* binding */ MIN_ZOOM),\n/* harmony export */ \"MQ_MAX_HEIGHT_LANDSCAPE\": () => (/* binding */ MQ_MAX_HEIGHT_LANDSCAPE),\n/* harmony export */ \"MQ_MAX_WIDTH_LANDSCAPE\": () => (/* binding */ MQ_MAX_WIDTH_LANDSCAPE),\n/* harmony export */ \"MQ_MAX_WIDTH_PORTRAIT\": () => (/* binding */ MQ_MAX_WIDTH_PORTRAIT),\n/* harmony export */ \"MQ_RIGHT_SIDEBAR_MIN_WIDTH\": () => (/* binding */ MQ_RIGHT_SIDEBAR_MIN_WIDTH),\n/* harmony export */ \"MQ_SM_MAX_WIDTH\": () => (/* binding */ MQ_SM_MAX_WIDTH),\n/* harmony export */ \"POINTER_BUTTON\": () => (/* binding */ POINTER_BUTTON),\n/* harmony export */ \"POINTER_EVENTS\": () => (/* binding */ POINTER_EVENTS),\n/* harmony export */ \"PRECEDING_ELEMENT_KEY\": () => (/* binding */ PRECEDING_ELEMENT_KEY),\n/* harmony export */ \"ROUGHNESS\": () => (/* binding */ ROUGHNESS),\n/* harmony export */ \"ROUNDNESS\": () => (/* binding */ ROUNDNESS),\n/* harmony export */ \"SCROLL_TIMEOUT\": () => (/* binding */ SCROLL_TIMEOUT),\n/* harmony export */ \"SHIFT_LOCKING_ANGLE\": () => (/* binding */ SHIFT_LOCKING_ANGLE),\n/* harmony export */ \"STROKE_WIDTH\": () => (/* binding */ STROKE_WIDTH),\n/* harmony export */ \"SVG_NS\": () => (/* binding */ SVG_NS),\n/* harmony export */ \"TAP_TWICE_TIMEOUT\": () => (/* binding */ TAP_TWICE_TIMEOUT),\n/* harmony export */ \"TEXT_ALIGN\": () => (/* binding */ TEXT_ALIGN),\n/* harmony export */ \"TEXT_TO_CENTER_SNAP_THRESHOLD\": () => (/* binding */ TEXT_TO_CENTER_SNAP_THRESHOLD),\n/* harmony export */ \"THEME\": () => (/* binding */ THEME),\n/* harmony export */ \"THEME_FILTER\": () => (/* binding */ THEME_FILTER),\n/* harmony export */ \"TITLE_TIMEOUT\": () => (/* binding */ TITLE_TIMEOUT),\n/* harmony export */ \"TOUCH_CTX_MENU_TIMEOUT\": () => (/* binding */ TOUCH_CTX_MENU_TIMEOUT),\n/* harmony export */ \"URL_HASH_KEYS\": () => (/* binding */ URL_HASH_KEYS),\n/* harmony export */ \"URL_QUERY_KEYS\": () => (/* binding */ URL_QUERY_KEYS),\n/* harmony export */ \"VERSIONS\": () => (/* binding */ VERSIONS),\n/* harmony export */ \"VERSION_TIMEOUT\": () => (/* binding */ VERSION_TIMEOUT),\n/* harmony export */ \"VERTICAL_ALIGN\": () => (/* binding */ VERTICAL_ALIGN),\n/* harmony export */ \"WINDOWS_EMOJI_FALLBACK_FONT\": () => (/* binding */ WINDOWS_EMOJI_FALLBACK_FONT),\n/* harmony export */ \"YOUTUBE_STATES\": () => (/* binding */ YOUTUBE_STATES),\n/* harmony export */ \"ZOOM_STEP\": () => (/* binding */ ZOOM_STEP),\n/* harmony export */ \"isAndroid\": () => (/* binding */ isAndroid),\n/* harmony export */ \"isBrave\": () => (/* binding */ isBrave),\n/* harmony export */ \"isChrome\": () => (/* binding */ isChrome),\n/* harmony export */ \"isDarwin\": () => (/* binding */ isDarwin),\n/* harmony export */ \"isFirefox\": () => (/* binding */ isFirefox),\n/* harmony export */ \"isSafari\": () => (/* binding */ isSafari),\n/* harmony export */ \"isWindows\": () => (/* binding */ isWindows)\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 _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colors */ \"../../colors.ts\");\n\n\nconst isDarwin = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\nconst isWindows = /^Win/.test(navigator.platform);\nconst isAndroid = /\\b(android)\\b/i.test(navigator.userAgent);\nconst isFirefox = \"netscape\" in window && navigator.userAgent.indexOf(\"rv:\") > 1 && navigator.userAgent.indexOf(\"Gecko\") > 1;\nconst isChrome = navigator.userAgent.indexOf(\"Chrome\") !== -1;\nconst isSafari = !isChrome && navigator.userAgent.indexOf(\"Safari\") !== -1; // keeping function so it can be mocked in test\n\nconst isBrave = () => {\n var _a, _b;\n\n return ((_b = (_a = navigator.brave) === null || _a === void 0 ? void 0 : _a.isBrave) === null || _b === void 0 ? void 0 : _b.name) === \"isBrave\";\n};\nconst APP_NAME = \"Excalidraw\";\nconst DRAGGING_THRESHOLD = 10; // px\n\nconst LINE_CONFIRM_THRESHOLD = 8; // px\n\nconst ELEMENT_SHIFT_TRANSLATE_AMOUNT = 5;\nconst ELEMENT_TRANSLATE_AMOUNT = 1;\nconst TEXT_TO_CENTER_SNAP_THRESHOLD = 30;\nconst SHIFT_LOCKING_ANGLE = Math.PI / 12;\nconst CURSOR_TYPE = {\n TEXT: \"text\",\n CROSSHAIR: \"crosshair\",\n GRABBING: \"grabbing\",\n GRAB: \"grab\",\n POINTER: \"pointer\",\n MOVE: \"move\",\n AUTO: \"\"\n};\nconst POINTER_BUTTON = {\n MAIN: 0,\n WHEEL: 1,\n SECONDARY: 2,\n TOUCH: -1\n};\nconst POINTER_EVENTS = {\n enabled: \"all\",\n disabled: \"none\",\n // asserted as any so it can be freely assigned to React Element\n // \"pointerEnvets\" CSS prop\n inheritFromUI: \"var(--ui-pointerEvents)\"\n};\nvar EVENT;\n\n(function (EVENT) {\n EVENT[\"COPY\"] = \"copy\";\n EVENT[\"PASTE\"] = \"paste\";\n EVENT[\"CUT\"] = \"cut\";\n EVENT[\"KEYDOWN\"] = \"keydown\";\n EVENT[\"KEYUP\"] = \"keyup\";\n EVENT[\"MOUSE_MOVE\"] = \"mousemove\";\n EVENT[\"RESIZE\"] = \"resize\";\n EVENT[\"UNLOAD\"] = \"unload\";\n EVENT[\"FOCUS\"] = \"focus\";\n EVENT[\"BLUR\"] = \"blur\";\n EVENT[\"DRAG_OVER\"] = \"dragover\";\n EVENT[\"DROP\"] = \"drop\";\n EVENT[\"GESTURE_END\"] = \"gestureend\";\n EVENT[\"BEFORE_UNLOAD\"] = \"beforeunload\";\n EVENT[\"GESTURE_START\"] = \"gesturestart\";\n EVENT[\"GESTURE_CHANGE\"] = \"gesturechange\";\n EVENT[\"POINTER_MOVE\"] = \"pointermove\";\n EVENT[\"POINTER_DOWN\"] = \"pointerdown\";\n EVENT[\"POINTER_UP\"] = \"pointerup\";\n EVENT[\"STATE_CHANGE\"] = \"statechange\";\n EVENT[\"WHEEL\"] = \"wheel\";\n EVENT[\"TOUCH_START\"] = \"touchstart\";\n EVENT[\"TOUCH_END\"] = \"touchend\";\n EVENT[\"HASHCHANGE\"] = \"hashchange\";\n EVENT[\"VISIBILITY_CHANGE\"] = \"visibilitychange\";\n EVENT[\"SCROLL\"] = \"scroll\"; // custom events\n\n EVENT[\"EXCALIDRAW_LINK\"] = \"excalidraw-link\";\n EVENT[\"MENU_ITEM_SELECT\"] = \"menu.itemSelect\";\n EVENT[\"MESSAGE\"] = \"message\";\n})(EVENT || (EVENT = {}));\n\nconst YOUTUBE_STATES = {\n UNSTARTED: -1,\n ENDED: 0,\n PLAYING: 1,\n PAUSED: 2,\n BUFFERING: 3,\n CUED: 5\n};\nconst ENV = {\n TEST: \"test\",\n DEVELOPMENT: \"development\"\n};\nconst CLASSES = {\n SHAPE_ACTIONS_MENU: \"App-menu__left\",\n SHAPE_ACTIONS_MOBILE_MENU: \"App-mobile-menu\",\n MOBILE_TOOLBAR: \"App-toolbar-content\" //zsviczian\n\n}; // 1-based in case we ever do `if(element.fontFamily)`\n\nconst FONT_FAMILY = {\n Virgil: 1,\n Helvetica: 2,\n Cascadia: 3,\n LocalFont: 4\n};\nconst THEME = {\n LIGHT: \"light\",\n DARK: \"dark\"\n};\nconst FRAME_STYLE = {\n strokeColor: \"#bbb\",\n strokeWidth: 1,\n strokeStyle: \"solid\",\n fillStyle: \"solid\",\n roughness: 0,\n roundness: null,\n backgroundColor: \"transparent\",\n radius: 8\n};\nconst WINDOWS_EMOJI_FALLBACK_FONT = \"Segoe UI Emoji\";\nconst MIN_FONT_SIZE = 1;\nconst DEFAULT_FONT_SIZE = 20;\nconst DEFAULT_FONT_FAMILY = FONT_FAMILY.Virgil;\nconst DEFAULT_TEXT_ALIGN = \"left\";\nconst DEFAULT_VERTICAL_ALIGN = \"top\";\nconst DEFAULT_VERSION = \"{version}\";\nconst CANVAS_ONLY_ACTIONS = [\"selectAll\"];\nconst GRID_SIZE = 20; // TODO make it configurable?\n\nconst IMAGE_MIME_TYPES = {\n svg: \"image/svg+xml\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n bmp: \"image/bmp\",\n ico: \"image/x-icon\",\n avif: \"image/avif\",\n jfif: \"image/jfif\"\n};\nconst MIME_TYPES = Object.assign({\n json: \"application/json\",\n // excalidraw data\n excalidraw: \"application/vnd.excalidraw+json\",\n excalidrawlib: \"application/vnd.excalidrawlib+json\",\n // image-encoded excalidraw data\n \"excalidraw.svg\": \"image/svg+xml\",\n \"excalidraw.png\": \"image/png\",\n // binary\n binary: \"application/octet-stream\"\n}, IMAGE_MIME_TYPES);\nconst EXPORT_IMAGE_TYPES = {\n png: \"png\",\n svg: \"svg\",\n clipboard: \"clipboard\"\n};\nconst EXPORT_DATA_TYPES = {\n excalidraw: \"excalidraw\",\n excalidrawClipboard: \"excalidraw/clipboard\",\n excalidrawLibrary: \"excalidrawlib\",\n excalidrawClipboardWithAPI: \"excalidraw-api/clipboard\"\n};\nconst EXPORT_SOURCE = window.EXCALIDRAW_EXPORT_SOURCE || window.location.origin; // time in milliseconds\n\nconst IMAGE_RENDER_TIMEOUT = 500;\nconst TAP_TWICE_TIMEOUT = 300;\nconst TOUCH_CTX_MENU_TIMEOUT = 500;\nconst TITLE_TIMEOUT = 10000;\nconst VERSION_TIMEOUT = 30000;\nconst SCROLL_TIMEOUT = 100;\nconst ZOOM_STEP = 0.05; //zsviczian\n\nconst MIN_ZOOM = 0.1;\nconst HYPERLINK_TOOLTIP_DELAY = 300; // Report a user inactive after IDLE_THRESHOLD milliseconds\n\nconst IDLE_THRESHOLD = 60000; // Report a user active each ACTIVE_THRESHOLD milliseconds\n\nconst ACTIVE_THRESHOLD = 3000;\nconst THEME_FILTER = _css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0__[\"default\"].themeFilter;\nconst URL_QUERY_KEYS = {\n addLibrary: \"addLibrary\"\n};\nconst URL_HASH_KEYS = {\n addLibrary: \"addLibrary\"\n};\nconst DEFAULT_UI_OPTIONS = {\n canvasActions: {\n changeViewBackgroundColor: true,\n clearCanvas: true,\n export: {\n saveFileToDisk: true\n },\n loadScene: true,\n saveToActiveFile: true,\n toggleTheme: null,\n saveAsImage: true\n }\n}; // breakpoints\n// -----------------------------------------------------------------------------\n// sm screen\n\nconst MQ_SM_MAX_WIDTH = 640; // md screen\n\nconst MQ_MAX_WIDTH_PORTRAIT = 730;\nconst MQ_MAX_WIDTH_LANDSCAPE = 1000;\nconst MQ_MAX_HEIGHT_LANDSCAPE = 500; // sidebar\n\nconst MQ_RIGHT_SIDEBAR_MIN_WIDTH = 1229; // -----------------------------------------------------------------------------\n\nconst LIBRARY_SIDEBAR_WIDTH = parseInt(_css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0__[\"default\"].rightSidebarWidth);\nconst MAX_DECIMALS_FOR_SVG_EXPORT = 2;\nconst EXPORT_SCALES = [1, 2, 3];\nconst DEFAULT_EXPORT_PADDING = 10; // px\n\nconst DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT = 1440;\nconst MAX_ALLOWED_FILE_BYTES = 20 * 1024 * 1024;\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nconst ENCRYPTION_KEY_BITS = 128;\nconst VERSIONS = {\n excalidraw: 2,\n excalidrawLibrary: 2\n};\nconst BOUND_TEXT_PADDING = 5;\nconst ARROW_LABEL_WIDTH_FRACTION = 0.7;\nconst ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO = 11;\nconst VERTICAL_ALIGN = {\n TOP: \"top\",\n MIDDLE: \"middle\",\n BOTTOM: \"bottom\"\n};\nconst TEXT_ALIGN = {\n LEFT: \"left\",\n CENTER: \"center\",\n RIGHT: \"right\"\n};\nconst ELEMENT_READY_TO_ERASE_OPACITY = 20; // Radius represented as 25% of element's largest side (width/height).\n// Used for LEGACY and PROPORTIONAL_RADIUS algorithms, or when the element is\n// below the cutoff size.\n\nconst DEFAULT_PROPORTIONAL_RADIUS = 0.25; // Fixed radius for the ADAPTIVE_RADIUS algorithm. In pixels.\n\nconst DEFAULT_ADAPTIVE_RADIUS = 32; // roundness type (algorithm)\n\nconst ROUNDNESS = {\n // Used for legacy rounding (rectangles), which currently works the same\n // as PROPORTIONAL_RADIUS, but we need to differentiate for UI purposes and\n // forwards-compat.\n LEGACY: 1,\n // Used for linear elements & diamonds\n PROPORTIONAL_RADIUS: 2,\n // Current default algorithm for rectangles, using fixed pixel radius.\n // It's working similarly to a regular border-radius, but attemps to make\n // radius visually similar across differnt element sizes, especially\n // very large and very small elements.\n //\n // NOTE right now we don't allow configuration and use a constant radius\n // (see DEFAULT_ADAPTIVE_RADIUS constant)\n ADAPTIVE_RADIUS: 3\n};\n/** key containt id of precedeing elemnt id we use in reconciliation during\r\n * collaboration */\n\nconst PRECEDING_ELEMENT_KEY = \"__precedingElement__\"; //zsviczian\n\nconst COLOR_NAMES = {\n aliceblue: \"#f0f8ff\",\n antiquewhite: \"#faebd7\",\n aqua: \"#00ffff\",\n aquamarine: \"#7fffd4\",\n azure: \"#f0ffff\",\n beige: \"#f5f5dc\",\n bisque: \"#ffe4c4\",\n black: \"#000000\",\n blanchedalmond: \"#ffebcd\",\n blue: \"#0000ff\",\n blueviolet: \"#8a2be2\",\n brown: \"#a52a2a\",\n burlywood: \"#deb887\",\n cadetblue: \"#5f9ea0\",\n chartreuse: \"#7fff00\",\n chocolate: \"#d2691e\",\n coral: \"#ff7f50\",\n cornflowerblue: \"#6495ed\",\n cornsilk: \"#fff8dc\",\n crimson: \"#dc143c\",\n cyan: \"#00ffff\",\n darkblue: \"#00008b\",\n darkcyan: \"#008b8b\",\n darkgoldenrod: \"#b8860b\",\n darkgray: \"#a9a9a9\",\n darkgreen: \"#006400\",\n darkkhaki: \"#bdb76b\",\n darkmagenta: \"#8b008b\",\n darkolivegreen: \"#556b2f\",\n darkorange: \"#ff8c00\",\n darkorchid: \"#9932cc\",\n darkred: \"#8b0000\",\n darksalmon: \"#e9967a\",\n darkseagreen: \"#8fbc8f\",\n darkslateblue: \"#483d8b\",\n darkslategray: \"#2f4f4f\",\n darkturquoise: \"#00ced1\",\n darkviolet: \"#9400d3\",\n deeppink: \"#ff1493\",\n deepskyblue: \"#00bfff\",\n dimgray: \"#696969\",\n dodgerblue: \"#1e90ff\",\n firebrick: \"#b22222\",\n floralwhite: \"#fffaf0\",\n forestgreen: \"#228b22\",\n fuchsia: \"#ff00ff\",\n gainsboro: \"#dcdcdc\",\n ghostwhite: \"#f8f8ff\",\n gold: \"#ffd700\",\n goldenrod: \"#daa520\",\n gray: \"#808080\",\n green: \"#008000\",\n greenyellow: \"#adff2f\",\n honeydew: \"#f0fff0\",\n hotpink: \"#ff69b4\",\n indianred: \"#cd5c5c\",\n indigo: \"#4b0082\",\n ivory: \"#fffff0\",\n khaki: \"#f0e68c\",\n lavender: \"#e6e6fa\",\n lavenderblush: \"#fff0f5\",\n lawngreen: \"#7cfc00\",\n lemonchiffon: \"#fffacd\",\n lightblue: \"#add8e6\",\n lightcoral: \"#f08080\",\n lightcyan: \"#e0ffff\",\n lightgoldenrodyellow: \"#fafad2\",\n lightgrey: \"#d3d3d3\",\n lightgreen: \"#90ee90\",\n lightpink: \"#ffb6c1\",\n lightsalmon: \"#ffa07a\",\n lightseagreen: \"#20b2aa\",\n lightskyblue: \"#87cefa\",\n lightslategray: \"#778899\",\n lightsteelblue: \"#b0c4de\",\n lightyellow: \"#ffffe0\",\n lime: \"#00ff00\",\n limegreen: \"#32cd32\",\n linen: \"#faf0e6\",\n magenta: \"#ff00ff\",\n maroon: \"#800000\",\n mediumaquamarine: \"#66cdaa\",\n mediumblue: \"#0000cd\",\n mediumorchid: \"#ba55d3\",\n mediumpurple: \"#9370d8\",\n mediumseagreen: \"#3cb371\",\n mediumslateblue: \"#7b68ee\",\n mediumspringgreen: \"#00fa9a\",\n mediumturquoise: \"#48d1cc\",\n mediumvioletred: \"#c71585\",\n midnightblue: \"#191970\",\n mintcream: \"#f5fffa\",\n mistyrose: \"#ffe4e1\",\n moccasin: \"#ffe4b5\",\n navajowhite: \"#ffdead\",\n navy: \"#000080\",\n oldlace: \"#fdf5e6\",\n olive: \"#808000\",\n olivedrab: \"#6b8e23\",\n orange: \"#ffa500\",\n orangered: \"#ff4500\",\n orchid: \"#da70d6\",\n palegoldenrod: \"#eee8aa\",\n palegreen: \"#98fb98\",\n paleturquoise: \"#afeeee\",\n palevioletred: \"#d87093\",\n papayawhip: \"#ffefd5\",\n peachpuff: \"#ffdab9\",\n peru: \"#cd853f\",\n pink: \"#ffc0cb\",\n plum: \"#dda0dd\",\n powderblue: \"#b0e0e6\",\n purple: \"#800080\",\n rebeccapurple: \"#663399\",\n red: \"#ff0000\",\n rosybrown: \"#bc8f8f\",\n royalblue: \"#4169e1\",\n saddlebrown: \"#8b4513\",\n salmon: \"#fa8072\",\n sandybrown: \"#f4a460\",\n seagreen: \"#2e8b57\",\n seashell: \"#fff5ee\",\n sienna: \"#a0522d\",\n silver: \"#c0c0c0\",\n skyblue: \"#87ceeb\",\n slateblue: \"#6a5acd\",\n slategray: \"#708090\",\n snow: \"#fffafa\",\n springgreen: \"#00ff7f\",\n steelblue: \"#4682b4\",\n tan: \"#d2b48c\",\n teal: \"#008080\",\n thistle: \"#d8bfd8\",\n tomato: \"#ff6347\",\n turquoise: \"#40e0d0\",\n violet: \"#ee82ee\",\n wheat: \"#f5deb3\",\n white: \"#ffffff\",\n whitesmoke: \"#f5f5f5\",\n yellow: \"#ffff00\",\n yellowgreen: \"#9acd32\"\n};\nconst ROUGHNESS = {\n architect: 0,\n artist: 1,\n cartoonist: 2\n};\nconst STROKE_WIDTH = {\n thin: 1,\n bold: 2,\n extraBold: 4\n};\nconst DEFAULT_ELEMENT_PROPS = {\n strokeColor: _colors__WEBPACK_IMPORTED_MODULE_1__.COLOR_PALETTE.black,\n backgroundColor: _colors__WEBPACK_IMPORTED_MODULE_1__.COLOR_PALETTE.transparent,\n fillStyle: \"solid\",\n strokeWidth: 2,\n strokeStyle: \"solid\",\n roughness: ROUGHNESS.artist,\n opacity: 100,\n locked: false\n};\nconst LIBRARY_SIDEBAR_TAB = \"library\";\nconst DEFAULT_SIDEBAR = {\n name: \"default\",\n defaultTab: LIBRARY_SIDEBAR_TAB\n};\nconst LIBRARY_DISABLED_TYPES = new Set([\"embeddable\", \"image\"]);\n\n//# sourceURL=webpack://ExcalidrawLib/../../constants.ts?");
3461
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ACTIVE_THRESHOLD\": () => (/* binding */ ACTIVE_THRESHOLD),\n/* harmony export */ \"APP_NAME\": () => (/* binding */ APP_NAME),\n/* harmony export */ \"ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO\": () => (/* binding */ ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO),\n/* harmony export */ \"ARROW_LABEL_WIDTH_FRACTION\": () => (/* binding */ ARROW_LABEL_WIDTH_FRACTION),\n/* harmony export */ \"BOUND_TEXT_PADDING\": () => (/* binding */ BOUND_TEXT_PADDING),\n/* harmony export */ \"CANVAS_ONLY_ACTIONS\": () => (/* binding */ CANVAS_ONLY_ACTIONS),\n/* harmony export */ \"CLASSES\": () => (/* binding */ CLASSES),\n/* harmony export */ \"COLOR_NAMES\": () => (/* binding */ COLOR_NAMES),\n/* harmony export */ \"CURSOR_TYPE\": () => (/* binding */ CURSOR_TYPE),\n/* harmony export */ \"DEFAULT_ADAPTIVE_RADIUS\": () => (/* binding */ DEFAULT_ADAPTIVE_RADIUS),\n/* harmony export */ \"DEFAULT_ELEMENT_PROPS\": () => (/* binding */ DEFAULT_ELEMENT_PROPS),\n/* harmony export */ \"DEFAULT_EXPORT_PADDING\": () => (/* binding */ DEFAULT_EXPORT_PADDING),\n/* harmony export */ \"DEFAULT_FONT_FAMILY\": () => (/* binding */ DEFAULT_FONT_FAMILY),\n/* harmony export */ \"DEFAULT_FONT_SIZE\": () => (/* binding */ DEFAULT_FONT_SIZE),\n/* harmony export */ \"DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT\": () => (/* binding */ DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT),\n/* harmony export */ \"DEFAULT_PROPORTIONAL_RADIUS\": () => (/* binding */ DEFAULT_PROPORTIONAL_RADIUS),\n/* harmony export */ \"DEFAULT_SIDEBAR\": () => (/* binding */ DEFAULT_SIDEBAR),\n/* harmony export */ \"DEFAULT_TEXT_ALIGN\": () => (/* binding */ DEFAULT_TEXT_ALIGN),\n/* harmony export */ \"DEFAULT_UI_OPTIONS\": () => (/* binding */ DEFAULT_UI_OPTIONS),\n/* harmony export */ \"DEFAULT_VERSION\": () => (/* binding */ DEFAULT_VERSION),\n/* harmony export */ \"DEFAULT_VERTICAL_ALIGN\": () => (/* binding */ DEFAULT_VERTICAL_ALIGN),\n/* harmony export */ \"DRAGGING_THRESHOLD\": () => (/* binding */ DRAGGING_THRESHOLD),\n/* harmony export */ \"ELEMENT_READY_TO_ERASE_OPACITY\": () => (/* binding */ ELEMENT_READY_TO_ERASE_OPACITY),\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 */ \"ENCRYPTION_KEY_BITS\": () => (/* binding */ ENCRYPTION_KEY_BITS),\n/* harmony export */ \"ENV\": () => (/* binding */ ENV),\n/* harmony export */ \"EVENT\": () => (/* binding */ EVENT),\n/* harmony export */ \"EXPORT_DATA_TYPES\": () => (/* binding */ EXPORT_DATA_TYPES),\n/* harmony export */ \"EXPORT_IMAGE_TYPES\": () => (/* binding */ EXPORT_IMAGE_TYPES),\n/* harmony export */ \"EXPORT_SCALES\": () => (/* binding */ EXPORT_SCALES),\n/* harmony export */ \"EXPORT_SOURCE\": () => (/* binding */ EXPORT_SOURCE),\n/* harmony export */ \"FONT_FAMILY\": () => (/* binding */ FONT_FAMILY),\n/* harmony export */ \"FRAME_STYLE\": () => (/* binding */ FRAME_STYLE),\n/* harmony export */ \"GRID_SIZE\": () => (/* binding */ GRID_SIZE),\n/* harmony export */ \"HYPERLINK_TOOLTIP_DELAY\": () => (/* binding */ HYPERLINK_TOOLTIP_DELAY),\n/* harmony export */ \"IDLE_THRESHOLD\": () => (/* binding */ IDLE_THRESHOLD),\n/* harmony export */ \"IMAGE_MIME_TYPES\": () => (/* binding */ IMAGE_MIME_TYPES),\n/* harmony export */ \"IMAGE_RENDER_TIMEOUT\": () => (/* binding */ IMAGE_RENDER_TIMEOUT),\n/* harmony export */ \"LIBRARY_DISABLED_TYPES\": () => (/* binding */ LIBRARY_DISABLED_TYPES),\n/* harmony export */ \"LIBRARY_SIDEBAR_TAB\": () => (/* binding */ LIBRARY_SIDEBAR_TAB),\n/* harmony export */ \"LIBRARY_SIDEBAR_WIDTH\": () => (/* binding */ LIBRARY_SIDEBAR_WIDTH),\n/* harmony export */ \"LINE_CONFIRM_THRESHOLD\": () => (/* binding */ LINE_CONFIRM_THRESHOLD),\n/* harmony export */ \"MAX_ALLOWED_FILE_BYTES\": () => (/* binding */ MAX_ALLOWED_FILE_BYTES),\n/* harmony export */ \"MAX_DECIMALS_FOR_SVG_EXPORT\": () => (/* binding */ MAX_DECIMALS_FOR_SVG_EXPORT),\n/* harmony export */ \"MIME_TYPES\": () => (/* binding */ MIME_TYPES),\n/* harmony export */ \"MIN_FONT_SIZE\": () => (/* binding */ MIN_FONT_SIZE),\n/* harmony export */ \"MIN_ZOOM\": () => (/* binding */ MIN_ZOOM),\n/* harmony export */ \"MQ_MAX_HEIGHT_LANDSCAPE\": () => (/* binding */ MQ_MAX_HEIGHT_LANDSCAPE),\n/* harmony export */ \"MQ_MAX_WIDTH_LANDSCAPE\": () => (/* binding */ MQ_MAX_WIDTH_LANDSCAPE),\n/* harmony export */ \"MQ_MAX_WIDTH_PORTRAIT\": () => (/* binding */ MQ_MAX_WIDTH_PORTRAIT),\n/* harmony export */ \"MQ_RIGHT_SIDEBAR_MIN_WIDTH\": () => (/* binding */ MQ_RIGHT_SIDEBAR_MIN_WIDTH),\n/* harmony export */ \"MQ_SM_MAX_WIDTH\": () => (/* binding */ MQ_SM_MAX_WIDTH),\n/* harmony export */ \"POINTER_BUTTON\": () => (/* binding */ POINTER_BUTTON),\n/* harmony export */ \"POINTER_EVENTS\": () => (/* binding */ POINTER_EVENTS),\n/* harmony export */ \"PRECEDING_ELEMENT_KEY\": () => (/* binding */ PRECEDING_ELEMENT_KEY),\n/* harmony export */ \"ROUGHNESS\": () => (/* binding */ ROUGHNESS),\n/* harmony export */ \"ROUNDNESS\": () => (/* binding */ ROUNDNESS),\n/* harmony export */ \"SCROLL_TIMEOUT\": () => (/* binding */ SCROLL_TIMEOUT),\n/* harmony export */ \"SHIFT_LOCKING_ANGLE\": () => (/* binding */ SHIFT_LOCKING_ANGLE),\n/* harmony export */ \"STROKE_WIDTH\": () => (/* binding */ STROKE_WIDTH),\n/* harmony export */ \"SVG_NS\": () => (/* binding */ SVG_NS),\n/* harmony export */ \"TAP_TWICE_TIMEOUT\": () => (/* binding */ TAP_TWICE_TIMEOUT),\n/* harmony export */ \"TEXT_ALIGN\": () => (/* binding */ TEXT_ALIGN),\n/* harmony export */ \"TEXT_TO_CENTER_SNAP_THRESHOLD\": () => (/* binding */ TEXT_TO_CENTER_SNAP_THRESHOLD),\n/* harmony export */ \"THEME\": () => (/* binding */ THEME),\n/* harmony export */ \"THEME_FILTER\": () => (/* binding */ THEME_FILTER),\n/* harmony export */ \"TITLE_TIMEOUT\": () => (/* binding */ TITLE_TIMEOUT),\n/* harmony export */ \"TOUCH_CTX_MENU_TIMEOUT\": () => (/* binding */ TOUCH_CTX_MENU_TIMEOUT),\n/* harmony export */ \"URL_HASH_KEYS\": () => (/* binding */ URL_HASH_KEYS),\n/* harmony export */ \"URL_QUERY_KEYS\": () => (/* binding */ URL_QUERY_KEYS),\n/* harmony export */ \"VERSIONS\": () => (/* binding */ VERSIONS),\n/* harmony export */ \"VERSION_TIMEOUT\": () => (/* binding */ VERSION_TIMEOUT),\n/* harmony export */ \"VERTICAL_ALIGN\": () => (/* binding */ VERTICAL_ALIGN),\n/* harmony export */ \"WINDOWS_EMOJI_FALLBACK_FONT\": () => (/* binding */ WINDOWS_EMOJI_FALLBACK_FONT),\n/* harmony export */ \"YOUTUBE_STATES\": () => (/* binding */ YOUTUBE_STATES),\n/* harmony export */ \"ZOOM_STEP\": () => (/* binding */ ZOOM_STEP),\n/* harmony export */ \"isAndroid\": () => (/* binding */ isAndroid),\n/* harmony export */ \"isBrave\": () => (/* binding */ isBrave),\n/* harmony export */ \"isChrome\": () => (/* binding */ isChrome),\n/* harmony export */ \"isDarwin\": () => (/* binding */ isDarwin),\n/* harmony export */ \"isFirefox\": () => (/* binding */ isFirefox),\n/* harmony export */ \"isSafari\": () => (/* binding */ isSafari),\n/* harmony export */ \"isWindows\": () => (/* binding */ isWindows)\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 _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colors */ \"../../colors.ts\");\n\n\nconst isDarwin = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\nconst isWindows = /^Win/.test(navigator.platform);\nconst isAndroid = /\\b(android)\\b/i.test(navigator.userAgent);\nconst isFirefox = \"netscape\" in window && navigator.userAgent.indexOf(\"rv:\") > 1 && navigator.userAgent.indexOf(\"Gecko\") > 1;\nconst isChrome = navigator.userAgent.indexOf(\"Chrome\") !== -1;\nconst isSafari = !isChrome && navigator.userAgent.indexOf(\"Safari\") !== -1; // keeping function so it can be mocked in test\n\nconst isBrave = () => {\n var _a, _b;\n\n return ((_b = (_a = navigator.brave) === null || _a === void 0 ? void 0 : _a.isBrave) === null || _b === void 0 ? void 0 : _b.name) === \"isBrave\";\n};\nconst APP_NAME = \"Excalidraw\";\nconst DRAGGING_THRESHOLD = 10; // px\n\nconst LINE_CONFIRM_THRESHOLD = 8; // px\n\nconst ELEMENT_SHIFT_TRANSLATE_AMOUNT = 5;\nconst ELEMENT_TRANSLATE_AMOUNT = 1;\nconst TEXT_TO_CENTER_SNAP_THRESHOLD = 30;\nconst SHIFT_LOCKING_ANGLE = Math.PI / 12;\nconst CURSOR_TYPE = {\n TEXT: \"text\",\n CROSSHAIR: \"crosshair\",\n GRABBING: \"grabbing\",\n GRAB: \"grab\",\n POINTER: \"pointer\",\n MOVE: \"move\",\n AUTO: \"\"\n};\nconst POINTER_BUTTON = {\n MAIN: 0,\n WHEEL: 1,\n SECONDARY: 2,\n TOUCH: -1\n};\nconst POINTER_EVENTS = {\n enabled: \"all\",\n disabled: \"none\",\n // asserted as any so it can be freely assigned to React Element\n // \"pointerEnvets\" CSS prop\n inheritFromUI: \"var(--ui-pointerEvents)\"\n};\nvar EVENT;\n\n(function (EVENT) {\n EVENT[\"COPY\"] = \"copy\";\n EVENT[\"PASTE\"] = \"paste\";\n EVENT[\"CUT\"] = \"cut\";\n EVENT[\"KEYDOWN\"] = \"keydown\";\n EVENT[\"KEYUP\"] = \"keyup\";\n EVENT[\"MOUSE_MOVE\"] = \"mousemove\";\n EVENT[\"RESIZE\"] = \"resize\";\n EVENT[\"UNLOAD\"] = \"unload\";\n EVENT[\"FOCUS\"] = \"focus\";\n EVENT[\"BLUR\"] = \"blur\";\n EVENT[\"DRAG_OVER\"] = \"dragover\";\n EVENT[\"DROP\"] = \"drop\";\n EVENT[\"GESTURE_END\"] = \"gestureend\";\n EVENT[\"BEFORE_UNLOAD\"] = \"beforeunload\";\n EVENT[\"GESTURE_START\"] = \"gesturestart\";\n EVENT[\"GESTURE_CHANGE\"] = \"gesturechange\";\n EVENT[\"POINTER_MOVE\"] = \"pointermove\";\n EVENT[\"POINTER_DOWN\"] = \"pointerdown\";\n EVENT[\"POINTER_UP\"] = \"pointerup\";\n EVENT[\"STATE_CHANGE\"] = \"statechange\";\n EVENT[\"WHEEL\"] = \"wheel\";\n EVENT[\"TOUCH_START\"] = \"touchstart\";\n EVENT[\"TOUCH_END\"] = \"touchend\";\n EVENT[\"HASHCHANGE\"] = \"hashchange\";\n EVENT[\"VISIBILITY_CHANGE\"] = \"visibilitychange\";\n EVENT[\"SCROLL\"] = \"scroll\"; // custom events\n\n EVENT[\"EXCALIDRAW_LINK\"] = \"excalidraw-link\";\n EVENT[\"MENU_ITEM_SELECT\"] = \"menu.itemSelect\";\n EVENT[\"MESSAGE\"] = \"message\";\n})(EVENT || (EVENT = {}));\n\nconst YOUTUBE_STATES = {\n UNSTARTED: -1,\n ENDED: 0,\n PLAYING: 1,\n PAUSED: 2,\n BUFFERING: 3,\n CUED: 5\n};\nconst ENV = {\n TEST: \"test\",\n DEVELOPMENT: \"development\"\n};\nconst CLASSES = {\n SHAPE_ACTIONS_MENU: \"App-menu__left\",\n SHAPE_ACTIONS_MOBILE_MENU: \"App-mobile-menu\",\n MOBILE_TOOLBAR: \"App-toolbar-content\" //zsviczian\n\n}; // 1-based in case we ever do `if(element.fontFamily)`\n\nconst FONT_FAMILY = {\n Virgil: 1,\n Helvetica: 2,\n Cascadia: 3,\n LocalFont: 4\n};\nconst THEME = {\n LIGHT: \"light\",\n DARK: \"dark\"\n};\nconst FRAME_STYLE = {\n strokeColor: \"#bbb\",\n strokeWidth: 1,\n strokeStyle: \"solid\",\n fillStyle: \"solid\",\n roughness: 0,\n roundness: null,\n backgroundColor: \"transparent\",\n radius: 8\n};\nconst WINDOWS_EMOJI_FALLBACK_FONT = \"Segoe UI Emoji\";\nconst MIN_FONT_SIZE = 1;\nconst DEFAULT_FONT_SIZE = 20;\nconst DEFAULT_FONT_FAMILY = FONT_FAMILY.Virgil;\nconst DEFAULT_TEXT_ALIGN = \"left\";\nconst DEFAULT_VERTICAL_ALIGN = \"top\";\nconst DEFAULT_VERSION = \"{version}\";\nconst CANVAS_ONLY_ACTIONS = [\"selectAll\"];\nconst GRID_SIZE = 20; // TODO make it configurable?\n\nconst IMAGE_MIME_TYPES = {\n svg: \"image/svg+xml\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n bmp: \"image/bmp\",\n ico: \"image/x-icon\",\n avif: \"image/avif\",\n jfif: \"image/jfif\"\n};\nconst MIME_TYPES = Object.assign({\n json: \"application/json\",\n // excalidraw data\n excalidraw: \"application/vnd.excalidraw+json\",\n excalidrawlib: \"application/vnd.excalidrawlib+json\",\n // image-encoded excalidraw data\n \"excalidraw.svg\": \"image/svg+xml\",\n \"excalidraw.png\": \"image/png\",\n // binary\n binary: \"application/octet-stream\"\n}, IMAGE_MIME_TYPES);\nconst EXPORT_IMAGE_TYPES = {\n png: \"png\",\n svg: \"svg\",\n clipboard: \"clipboard\"\n};\nconst EXPORT_DATA_TYPES = {\n excalidraw: \"excalidraw\",\n excalidrawClipboard: \"excalidraw/clipboard\",\n excalidrawLibrary: \"excalidrawlib\",\n excalidrawClipboardWithAPI: \"excalidraw-api/clipboard\"\n};\nconst EXPORT_SOURCE = window.EXCALIDRAW_EXPORT_SOURCE || window.location.origin; // time in milliseconds\n\nconst IMAGE_RENDER_TIMEOUT = 500;\nconst TAP_TWICE_TIMEOUT = 300;\nconst TOUCH_CTX_MENU_TIMEOUT = 500;\nconst TITLE_TIMEOUT = 10000;\nconst VERSION_TIMEOUT = 30000;\nconst SCROLL_TIMEOUT = 100;\nconst ZOOM_STEP = 0.05; //zsviczian\n\nconst MIN_ZOOM = 0.1;\nconst HYPERLINK_TOOLTIP_DELAY = 300; // Report a user inactive after IDLE_THRESHOLD milliseconds\n\nconst IDLE_THRESHOLD = 60000; // Report a user active each ACTIVE_THRESHOLD milliseconds\n\nconst ACTIVE_THRESHOLD = 3000;\nconst THEME_FILTER = _css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0__[\"default\"].themeFilter;\nconst URL_QUERY_KEYS = {\n addLibrary: \"addLibrary\"\n};\nconst URL_HASH_KEYS = {\n addLibrary: \"addLibrary\"\n};\nconst DEFAULT_UI_OPTIONS = {\n canvasActions: {\n changeViewBackgroundColor: true,\n clearCanvas: true,\n export: {\n saveFileToDisk: true\n },\n loadScene: true,\n saveToActiveFile: true,\n toggleTheme: null,\n saveAsImage: true\n }\n}; // breakpoints\n// -----------------------------------------------------------------------------\n// sm screen\n\nconst MQ_SM_MAX_WIDTH = 640; // md screen\n\nconst MQ_MAX_WIDTH_PORTRAIT = 730;\nconst MQ_MAX_WIDTH_LANDSCAPE = 1000;\nconst MQ_MAX_HEIGHT_LANDSCAPE = 500; // sidebar\n\nconst MQ_RIGHT_SIDEBAR_MIN_WIDTH = 1229; // -----------------------------------------------------------------------------\n\nconst LIBRARY_SIDEBAR_WIDTH = parseInt(_css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0__[\"default\"].rightSidebarWidth);\nconst MAX_DECIMALS_FOR_SVG_EXPORT = 2;\nconst EXPORT_SCALES = [1, 2, 3];\nconst DEFAULT_EXPORT_PADDING = 10; // px\n\nconst DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT = 1440;\nconst MAX_ALLOWED_FILE_BYTES = 20 * 1024 * 1024;\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nconst ENCRYPTION_KEY_BITS = 128;\nconst VERSIONS = {\n excalidraw: 2,\n excalidrawLibrary: 2\n};\nconst BOUND_TEXT_PADDING = 5;\nconst ARROW_LABEL_WIDTH_FRACTION = 0.7;\nconst ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO = 11;\nconst VERTICAL_ALIGN = {\n TOP: \"top\",\n MIDDLE: \"middle\",\n BOTTOM: \"bottom\"\n};\nconst TEXT_ALIGN = {\n LEFT: \"left\",\n CENTER: \"center\",\n RIGHT: \"right\"\n};\nconst ELEMENT_READY_TO_ERASE_OPACITY = 20; // Radius represented as 25% of element's largest side (width/height).\n// Used for LEGACY and PROPORTIONAL_RADIUS algorithms, or when the element is\n// below the cutoff size.\n\nconst DEFAULT_PROPORTIONAL_RADIUS = 0.25; // Fixed radius for the ADAPTIVE_RADIUS algorithm. In pixels.\n\nconst DEFAULT_ADAPTIVE_RADIUS = 32; // roundness type (algorithm)\n\nconst ROUNDNESS = {\n // Used for legacy rounding (rectangles), which currently works the same\n // as PROPORTIONAL_RADIUS, but we need to differentiate for UI purposes and\n // forwards-compat.\n LEGACY: 1,\n // Used for linear elements & diamonds\n PROPORTIONAL_RADIUS: 2,\n // Current default algorithm for rectangles, using fixed pixel radius.\n // It's working similarly to a regular border-radius, but attemps to make\n // radius visually similar across differnt element sizes, especially\n // very large and very small elements.\n //\n // NOTE right now we don't allow configuration and use a constant radius\n // (see DEFAULT_ADAPTIVE_RADIUS constant)\n ADAPTIVE_RADIUS: 3\n};\n/** key containt id of precedeing elemnt id we use in reconciliation during\r\n * collaboration */\n\nconst PRECEDING_ELEMENT_KEY = \"__precedingElement__\"; //zsviczian\n\nconst COLOR_NAMES = {\n aliceblue: \"#f0f8ff\",\n antiquewhite: \"#faebd7\",\n aqua: \"#00ffff\",\n aquamarine: \"#7fffd4\",\n azure: \"#f0ffff\",\n beige: \"#f5f5dc\",\n bisque: \"#ffe4c4\",\n black: \"#000000\",\n blanchedalmond: \"#ffebcd\",\n blue: \"#0000ff\",\n blueviolet: \"#8a2be2\",\n brown: \"#a52a2a\",\n burlywood: \"#deb887\",\n cadetblue: \"#5f9ea0\",\n chartreuse: \"#7fff00\",\n chocolate: \"#d2691e\",\n coral: \"#ff7f50\",\n cornflowerblue: \"#6495ed\",\n cornsilk: \"#fff8dc\",\n crimson: \"#dc143c\",\n cyan: \"#00ffff\",\n darkblue: \"#00008b\",\n darkcyan: \"#008b8b\",\n darkgoldenrod: \"#b8860b\",\n darkgray: \"#a9a9a9\",\n darkgreen: \"#006400\",\n darkkhaki: \"#bdb76b\",\n darkmagenta: \"#8b008b\",\n darkolivegreen: \"#556b2f\",\n darkorange: \"#ff8c00\",\n darkorchid: \"#9932cc\",\n darkred: \"#8b0000\",\n darksalmon: \"#e9967a\",\n darkseagreen: \"#8fbc8f\",\n darkslateblue: \"#483d8b\",\n darkslategray: \"#2f4f4f\",\n darkturquoise: \"#00ced1\",\n darkviolet: \"#9400d3\",\n deeppink: \"#ff1493\",\n deepskyblue: \"#00bfff\",\n dimgray: \"#696969\",\n dodgerblue: \"#1e90ff\",\n firebrick: \"#b22222\",\n floralwhite: \"#fffaf0\",\n forestgreen: \"#228b22\",\n fuchsia: \"#ff00ff\",\n gainsboro: \"#dcdcdc\",\n ghostwhite: \"#f8f8ff\",\n gold: \"#ffd700\",\n goldenrod: \"#daa520\",\n gray: \"#808080\",\n green: \"#008000\",\n greenyellow: \"#adff2f\",\n honeydew: \"#f0fff0\",\n hotpink: \"#ff69b4\",\n indianred: \"#cd5c5c\",\n indigo: \"#4b0082\",\n ivory: \"#fffff0\",\n khaki: \"#f0e68c\",\n lavender: \"#e6e6fa\",\n lavenderblush: \"#fff0f5\",\n lawngreen: \"#7cfc00\",\n lemonchiffon: \"#fffacd\",\n lightblue: \"#add8e6\",\n lightcoral: \"#f08080\",\n lightcyan: \"#e0ffff\",\n lightgoldenrodyellow: \"#fafad2\",\n lightgrey: \"#d3d3d3\",\n lightgreen: \"#90ee90\",\n lightpink: \"#ffb6c1\",\n lightsalmon: \"#ffa07a\",\n lightseagreen: \"#20b2aa\",\n lightskyblue: \"#87cefa\",\n lightslategray: \"#778899\",\n lightsteelblue: \"#b0c4de\",\n lightyellow: \"#ffffe0\",\n lime: \"#00ff00\",\n limegreen: \"#32cd32\",\n linen: \"#faf0e6\",\n magenta: \"#ff00ff\",\n maroon: \"#800000\",\n mediumaquamarine: \"#66cdaa\",\n mediumblue: \"#0000cd\",\n mediumorchid: \"#ba55d3\",\n mediumpurple: \"#9370d8\",\n mediumseagreen: \"#3cb371\",\n mediumslateblue: \"#7b68ee\",\n mediumspringgreen: \"#00fa9a\",\n mediumturquoise: \"#48d1cc\",\n mediumvioletred: \"#c71585\",\n midnightblue: \"#191970\",\n mintcream: \"#f5fffa\",\n mistyrose: \"#ffe4e1\",\n moccasin: \"#ffe4b5\",\n navajowhite: \"#ffdead\",\n navy: \"#000080\",\n oldlace: \"#fdf5e6\",\n olive: \"#808000\",\n olivedrab: \"#6b8e23\",\n orange: \"#ffa500\",\n orangered: \"#ff4500\",\n orchid: \"#da70d6\",\n palegoldenrod: \"#eee8aa\",\n palegreen: \"#98fb98\",\n paleturquoise: \"#afeeee\",\n palevioletred: \"#d87093\",\n papayawhip: \"#ffefd5\",\n peachpuff: \"#ffdab9\",\n peru: \"#cd853f\",\n pink: \"#ffc0cb\",\n plum: \"#dda0dd\",\n powderblue: \"#b0e0e6\",\n purple: \"#800080\",\n rebeccapurple: \"#663399\",\n red: \"#ff0000\",\n rosybrown: \"#bc8f8f\",\n royalblue: \"#4169e1\",\n saddlebrown: \"#8b4513\",\n salmon: \"#fa8072\",\n sandybrown: \"#f4a460\",\n seagreen: \"#2e8b57\",\n seashell: \"#fff5ee\",\n sienna: \"#a0522d\",\n silver: \"#c0c0c0\",\n skyblue: \"#87ceeb\",\n slateblue: \"#6a5acd\",\n slategray: \"#708090\",\n snow: \"#fffafa\",\n springgreen: \"#00ff7f\",\n steelblue: \"#4682b4\",\n tan: \"#d2b48c\",\n teal: \"#008080\",\n thistle: \"#d8bfd8\",\n tomato: \"#ff6347\",\n turquoise: \"#40e0d0\",\n violet: \"#ee82ee\",\n wheat: \"#f5deb3\",\n white: \"#ffffff\",\n whitesmoke: \"#f5f5f5\",\n yellow: \"#ffff00\",\n yellowgreen: \"#9acd32\"\n};\nconst ROUGHNESS = {\n architect: 0,\n artist: 1,\n cartoonist: 2\n};\nconst STROKE_WIDTH = {\n extraThin: 0.5,\n thin: 1,\n bold: 2,\n extraBold: 4\n};\nconst DEFAULT_ELEMENT_PROPS = {\n strokeColor: _colors__WEBPACK_IMPORTED_MODULE_1__.COLOR_PALETTE.black,\n backgroundColor: _colors__WEBPACK_IMPORTED_MODULE_1__.COLOR_PALETTE.transparent,\n fillStyle: \"solid\",\n strokeWidth: 2,\n strokeStyle: \"solid\",\n roughness: ROUGHNESS.artist,\n opacity: 100,\n locked: false\n};\nconst LIBRARY_SIDEBAR_TAB = \"library\";\nconst DEFAULT_SIDEBAR = {\n name: \"default\",\n defaultTab: LIBRARY_SIDEBAR_TAB\n};\nconst LIBRARY_DISABLED_TYPES = new Set([\"embeddable\", \"image\"]);\n\n//# sourceURL=webpack://ExcalidrawLib/../../constants.ts?");
3462
3462
 
3463
3463
  /***/ }),
3464
3464
 
@@ -4129,7 +4129,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
4129
4129
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4130
4130
 
4131
4131
  "use strict";
4132
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\n\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\n /* eslint-disable */\n\n /* global __webpack_public_path__:writable */\n __webpack_require__.p = window.EXCALIDRAW_ASSET_PATH || `https://unpkg.com/${\"@zsviczian/excalidraw\"}@${\"0.16.1-obsidian-5\"}/dist/`;\n}\n\n//# sourceURL=webpack://ExcalidrawLib/./publicPath.js?");
4132
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\n\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\n /* eslint-disable */\n\n /* global __webpack_public_path__:writable */\n __webpack_require__.p = window.EXCALIDRAW_ASSET_PATH || `https://unpkg.com/${\"@zsviczian/excalidraw\"}@${\"0.16.1-obsidian-6\"}/dist/`;\n}\n\n//# sourceURL=webpack://ExcalidrawLib/./publicPath.js?");
4133
4133
 
4134
4134
  /***/ }),
4135
4135