remove dependency of i18n from getDefaultAppState and make it pure

This commit is contained in:
Aakansha Doshi 2020-12-27 18:18:07 +05:30
parent bc414ccaaf
commit eda35a25b3
15 changed files with 123 additions and 90 deletions

View File

@ -9,7 +9,7 @@ import { loadFromJSON, saveAsJSON } from "../data";
import { t } from "../i18n"; import { t } from "../i18n";
import useIsMobile from "../is-mobile"; import useIsMobile from "../is-mobile";
import { KEYS } from "../keys"; import { KEYS } from "../keys";
import { muteFSAbortError } from "../utils"; import { getDateTime, muteFSAbortError } from "../utils";
import { register } from "./register"; import { register } from "./register";
import "../components/ToolIcon.scss"; import "../components/ToolIcon.scss";
@ -22,7 +22,7 @@ export const actionChangeProjectName = register({
PanelComponent: ({ appState, updateData }) => ( PanelComponent: ({ appState, updateData }) => (
<ProjectName <ProjectName
label={t("labels.fileTitle")} label={t("labels.fileTitle")}
value={appState.name || "Unnamed"} value={appState.name || `${t("labels.untitled")}-${getDateTime()}`}
onChange={(name: string) => updateData(name)} onChange={(name: string) => updateData(name)}
/> />
), ),

View File

@ -1,7 +1,5 @@
import oc from "open-color"; import oc from "open-color";
import { AppState, FlooredNumber, NormalizedZoomValue } from "./types"; import { AppState, FlooredNumber, NormalizedZoomValue } from "./types";
import { getDateTime } from "./utils";
import { t } from "./i18n";
import { import {
DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE,
DEFAULT_FONT_FAMILY, DEFAULT_FONT_FAMILY,
@ -46,7 +44,7 @@ export const getDefaultAppState = (): Omit<
scrollY: 0 as FlooredNumber, scrollY: 0 as FlooredNumber,
cursorButton: "up", cursorButton: "up",
scrolledOutside: false, scrolledOutside: false,
name: `${t("labels.untitled")}-${getDateTime()}`, name: "",
isBindingEnabled: true, isBindingEnabled: true,
isResizing: false, isResizing: false,
isRotating: false, isRotating: false,

View File

@ -10,7 +10,6 @@ import {
duplicateElement, duplicateElement,
isInvisiblySmallElement, isInvisiblySmallElement,
isTextElement, isTextElement,
textWysiwyg,
getCommonBounds, getCommonBounds,
getCursorForResizingElement, getCursorForResizingElement,
getPerfectElementSize, getPerfectElementSize,
@ -177,6 +176,7 @@ import {
trackEvent, trackEvent,
} from "../analytics"; } from "../analytics";
import { Stats } from "./Stats"; import { Stats } from "./Stats";
import { textWysiwyg } from "../element/textWysiwyg";
const { history } = createHistory(); const { history } = createHistory();

View File

@ -100,6 +100,7 @@ const ExportModal = ({
exportPadding, exportPadding,
scale, scale,
shouldAddWatermark, shouldAddWatermark,
watermarkText: t("labels.madeWithExcalidraw"),
}); });
// if converting to blob fails, there's some problem that will // if converting to blob fails, there's some problem that will
@ -175,6 +176,7 @@ const ExportModal = ({
exportPadding, exportPadding,
shouldAddWatermark, shouldAddWatermark,
s, s,
t("labels.madeWithExcalidraw"),
); );
const scaleButtonTitle = `${t( const scaleButtonTitle = `${t(

View File

@ -41,7 +41,7 @@ import "./LayerUI.scss";
import { LibraryUnit } from "./LibraryUnit"; import { LibraryUnit } from "./LibraryUnit";
import { ToolButton } from "./ToolButton"; import { ToolButton } from "./ToolButton";
import { saveLibraryAsJSON, importLibraryFromJSON } from "../data/json"; import { saveLibraryAsJSON, importLibraryFromJSON } from "../data/json";
import { muteFSAbortError } from "../utils"; import { getDateTime, muteFSAbortError } from "../utils";
import { BackgroundPickerAndDarkModeToggle } from "./BackgroundPickerAndDarkModeToggle"; import { BackgroundPickerAndDarkModeToggle } from "./BackgroundPickerAndDarkModeToggle";
import clsx from "clsx"; import clsx from "clsx";
import { Library } from "../data/library"; import { Library } from "../data/library";
@ -352,7 +352,7 @@ const LayerUI = ({
if (canvas) { if (canvas) {
await exportCanvas(type, exportedElements, appState, canvas, { await exportCanvas(type, exportedElements, appState, canvas, {
exportBackground: appState.exportBackground, exportBackground: appState.exportBackground,
name: appState.name, name: appState.name || `${t("labels.untitled")}-${getDateTime()}`,
viewBackgroundColor: appState.viewBackgroundColor, viewBackgroundColor: appState.viewBackgroundColor,
scale, scale,
shouldAddWatermark: appState.shouldAddWatermark, shouldAddWatermark: appState.shouldAddWatermark,

View File

@ -75,6 +75,7 @@ export const exportCanvas = async (
exportPadding, exportPadding,
scale, scale,
shouldAddWatermark, shouldAddWatermark,
watermarkText: t("labels.madeWithExcalidraw"),
}); });
tempCanvas.style.display = "none"; tempCanvas.style.display = "none";
document.body.appendChild(tempCanvas); document.body.appendChild(tempCanvas);

View File

@ -8,6 +8,8 @@ import { Library } from "./library";
import { MIME_TYPES } from "../constants"; import { MIME_TYPES } from "../constants";
import { clearElementsForExport } from "../element"; import { clearElementsForExport } from "../element";
import { EVENT_LIBRARY, trackEvent } from "../analytics"; import { EVENT_LIBRARY, trackEvent } from "../analytics";
import { t } from "../i18n";
import { getDateTime } from "../utils";
export const serializeAsJSON = ( export const serializeAsJSON = (
elements: readonly ExcalidrawElement[], elements: readonly ExcalidrawElement[],
@ -33,11 +35,10 @@ export const saveAsJSON = async (
const blob = new Blob([serialized], { const blob = new Blob([serialized], {
type: "application/json", type: "application/json",
}); });
const fileHandle = await fileSave( const fileHandle = await fileSave(
blob, blob,
{ {
fileName: appState.name, fileName: appState.name || `${t("labels.untitled")}-${getDateTime()}`,
description: "Excalidraw file", description: "Excalidraw file",
extensions: [".excalidraw"], extensions: [".excalidraw"],
}, },

View File

@ -49,7 +49,6 @@ export {
dragNewElement, dragNewElement,
} from "./dragElements"; } from "./dragElements";
export { isTextElement, isExcalidrawElement } from "./typeChecks"; export { isTextElement, isExcalidrawElement } from "./typeChecks";
export { textWysiwyg } from "./textWysiwyg";
export { redrawTextBoundingBox } from "./textElement"; export { redrawTextBoundingBox } from "./textElement";
export { export {
getPerfectElementSize, getPerfectElementSize,

View File

@ -2,6 +2,8 @@ import { AppState } from "./types";
import { ExcalidrawElement } from "./element/types"; import { ExcalidrawElement } from "./element/types";
import { isLinearElement } from "./element/typeChecks"; import { isLinearElement } from "./element/typeChecks";
import { deepCopyElement } from "./element/newElement"; import { deepCopyElement } from "./element/newElement";
import { getDateTime } from "./utils";
import { t } from "./i18n";
export interface HistoryEntry { export interface HistoryEntry {
appState: ReturnType<typeof clearAppStatePropertiesForHistory>; appState: ReturnType<typeof clearAppStatePropertiesForHistory>;
@ -24,7 +26,7 @@ const clearAppStatePropertiesForHistory = (appState: AppState) => {
viewBackgroundColor: appState.viewBackgroundColor, viewBackgroundColor: appState.viewBackgroundColor,
editingLinearElement: appState.editingLinearElement, editingLinearElement: appState.editingLinearElement,
editingGroupId: appState.editingGroupId, editingGroupId: appState.editingGroupId,
name: appState.name, name: appState.name || `${t("labels.untitled")}-${getDateTime()}`,
}; };
}; };

View File

@ -1 +1 @@
export { exportToBlob, exportToSvg, exportToCanvas } from "../utils.ts"; export { exportToBlob, exportToSvg, exportToCanvas } from "./utils";

View File

@ -1,5 +1,6 @@
{ {
"name": "@excalidraw/utils", "name": "@excalidraw/utils",
"sideEffects": false,
"version": "0.1.0", "version": "0.1.0",
"main": "dist/excalidraw-utils.min.js", "main": "dist/excalidraw-utils.min.js",
"files": [ "files": [

View File

@ -1,11 +1,11 @@
import { import {
exportToCanvas as _exportToCanvas, exportToCanvas as _exportToCanvas,
exportToSvg as _exportToSvg, exportToSvg as _exportToSvg,
} from "../scene/export"; } from "../../scene/export";
import { getDefaultAppState } from "../appState"; import { getDefaultAppState } from "../../appState";
import { AppState } from "../types"; import { AppState } from "../../types";
import { ExcalidrawElement } from "../element/types"; import { ExcalidrawElement } from "../../element/types";
import { getNonDeletedElements } from "../element"; import { getNonDeletedElements } from "../../element";
type ExportOpts = { type ExportOpts = {
elements: readonly ExcalidrawElement[]; elements: readonly ExcalidrawElement[];

View File

@ -13,7 +13,7 @@ module.exports = {
libraryTarget: "umd", libraryTarget: "umd",
}, },
resolve: { resolve: {
extensions: [".tsx", ".ts", ".js"], extensions: [".ts", ".js"],
}, },
optimization: { optimization: {
runtimeChunk: false, runtimeChunk: false,
@ -40,4 +40,18 @@ module.exports = {
}), }),
...(process.env.ANALYZER === "true" ? [new BundleAnalyzerPlugin()] : []), ...(process.env.ANALYZER === "true" ? [new BundleAnalyzerPlugin()] : []),
], ],
externals: {
react: {
root: "React",
commonjs2: "react",
commonjs: "react",
amd: "react",
},
"react-dom": {
root: "ReactDOM",
commonjs2: "react-dom",
commonjs: "react-dom",
amd: "react-dom",
},
},
}; };

View File

@ -7,7 +7,6 @@ import { renderScene, renderSceneToSvg } from "../renderer/renderScene";
import { distance, SVG_NS } from "../utils"; import { distance, SVG_NS } from "../utils";
import { normalizeScroll } from "./scroll"; import { normalizeScroll } from "./scroll";
import { AppState } from "../types"; import { AppState } from "../types";
import { t } from "../i18n";
import { DEFAULT_FONT_FAMILY, DEFAULT_VERTICAL_ALIGN } from "../constants"; import { DEFAULT_FONT_FAMILY, DEFAULT_VERTICAL_ALIGN } from "../constants";
import { getDefaultAppState } from "../appState"; import { getDefaultAppState } from "../appState";
@ -23,12 +22,14 @@ export const exportToCanvas = (
viewBackgroundColor, viewBackgroundColor,
scale = 1, scale = 1,
shouldAddWatermark, shouldAddWatermark,
watermarkText,
}: { }: {
exportBackground: boolean; exportBackground: boolean;
exportPadding?: number; exportPadding?: number;
scale?: number; scale?: number;
viewBackgroundColor: string; viewBackgroundColor: string;
shouldAddWatermark: boolean; shouldAddWatermark: boolean;
watermarkText?: string;
}, },
createCanvas: (width: number, height: number) => HTMLCanvasElement = ( createCanvas: (width: number, height: number) => HTMLCanvasElement = (
width, width,
@ -40,7 +41,11 @@ export const exportToCanvas = (
return tempCanvas; return tempCanvas;
}, },
) => { ) => {
const sceneElements = getElementsAndWatermark(elements, shouldAddWatermark); const sceneElements = getElementsAndWatermark(
elements,
shouldAddWatermark,
watermarkText,
);
const [minX, minY, width, height] = getCanvasSize( const [minX, minY, width, height] = getCanvasSize(
sceneElements, sceneElements,
@ -152,20 +157,25 @@ export const exportToSvg = (
const getElementsAndWatermark = ( const getElementsAndWatermark = (
elements: readonly NonDeletedExcalidrawElement[], elements: readonly NonDeletedExcalidrawElement[],
shouldAddWatermark: boolean, shouldAddWatermark: boolean,
watermarkText?: string,
): readonly NonDeletedExcalidrawElement[] => { ): readonly NonDeletedExcalidrawElement[] => {
let _elements = [...elements]; let _elements = [...elements];
if (shouldAddWatermark) { if (shouldAddWatermark) {
const [, , maxX, maxY] = getCommonBounds(elements); const [, , maxX, maxY] = getCommonBounds(elements);
_elements = [..._elements, getWatermarkElement(maxX, maxY)]; _elements = [..._elements, getWatermarkElement(maxX, maxY, watermarkText)];
} }
return _elements; return _elements;
}; };
const getWatermarkElement = (maxX: number, maxY: number) => { const getWatermarkElement = (
maxX: number,
maxY: number,
watermarkText: string = "",
) => {
return newTextElement({ return newTextElement({
text: t("labels.madeWithExcalidraw"), text: watermarkText,
fontSize: WATERMARK_HEIGHT, fontSize: WATERMARK_HEIGHT,
fontFamily: DEFAULT_FONT_FAMILY, fontFamily: DEFAULT_FONT_FAMILY,
textAlign: "right", textAlign: "right",
@ -204,8 +214,13 @@ export const getExportSize = (
exportPadding: number, exportPadding: number,
shouldAddWatermark: boolean, shouldAddWatermark: boolean,
scale: number, scale: number,
watermarkText?: string,
): [number, number] => { ): [number, number] => {
const sceneElements = getElementsAndWatermark(elements, shouldAddWatermark); const sceneElements = getElementsAndWatermark(
elements,
shouldAddWatermark,
watermarkText,
);
const [, , width, height] = getCanvasSize( const [, , width, height] = getCanvasSize(
sceneElements, sceneElements,

View File

@ -38,7 +38,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -491,7 +491,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -950,7 +950,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -1718,7 +1718,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -1914,7 +1914,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -2364,7 +2364,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -2609,7 +2609,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -2765,7 +2765,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -3234,7 +3234,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -3534,7 +3534,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -3730,7 +3730,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -3966,7 +3966,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -4210,7 +4210,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -4585,7 +4585,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -4872,7 +4872,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -5171,7 +5171,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -5371,7 +5371,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -5527,7 +5527,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -5972,7 +5972,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -6282,7 +6282,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -8308,7 +8308,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -8662,7 +8662,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -8909,7 +8909,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -9154,7 +9154,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -9461,7 +9461,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -9617,7 +9617,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -9773,7 +9773,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -9929,7 +9929,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -10115,7 +10115,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -10301,7 +10301,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -10487,7 +10487,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -10673,7 +10673,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -10829,7 +10829,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -10985,7 +10985,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -11171,7 +11171,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -11327,7 +11327,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -11513,7 +11513,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -12466,7 +12466,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "touch", "lastPointerDownWith": "touch",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -12560,7 +12560,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -12652,7 +12652,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -12808,7 +12808,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -13108,7 +13108,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -13408,7 +13408,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -13564,7 +13564,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -13752,7 +13752,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -13993,7 +13993,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -14309,7 +14309,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -15140,7 +15140,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -15440,7 +15440,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -15740,7 +15740,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -16111,7 +16111,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -16270,7 +16270,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -16583,7 +16583,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -16814,7 +16814,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -17061,7 +17061,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -17380,7 +17380,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -17472,7 +17472,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -17628,7 +17628,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -18441,7 +18441,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -18533,7 +18533,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -19279,7 +19279,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -19676,7 +19676,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -19941,7 +19941,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "touch", "lastPointerDownWith": "touch",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -20525,7 +20525,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,
@ -20617,7 +20617,7 @@ Object {
"isRotating": false, "isRotating": false,
"lastPointerDownWith": "mouse", "lastPointerDownWith": "mouse",
"multiElement": null, "multiElement": null,
"name": "Untitled-201933152653", "name": "",
"offsetLeft": 0, "offsetLeft": 0,
"offsetTop": 0, "offsetTop": 0,
"openMenu": null, "openMenu": null,