Requiers N:M mapping

This mapping has 10 multi-map groups: several pairings are equally correct there. The code view shows one arbitrary valid pairing, not the only one.

This mapping has 7 all-to-all groups: every node on one side corresponds to every node on the other, and none is deleted or inserted. Each member carries an all N:M badge; selecting one highlights all of its counterparts, in the tree and in the code view alike.

Before

…lines 1–241 unchanged (241 lines)
242 SidebarName,
243 SidebarTabName,
244 KeyboardModifiersObject,
245 CollaboratorPointer,
246 ToolType,
247 OnUserFollowedPayload,
248} from "../types";
249import {
250 debounce,
251 distance,
252 getFontString,
253 getNearestScrollableContainer,
254 isInputLike,
…lines 255–484 unchanged (230 lines)
485>();
486
487let IS_PLAIN_PASTE = false;
488let IS_PLAIN_PASTE_TIMER = 0;
489let PLAIN_PASTE_TOAST_SHOWN = false;
490
491let lastPointerUp: ((event: any) => void) | null = null;
492const gesture: Gesture = {
493 pointers: new Map(),
494 lastCenter: null,
495 initialDistance: null,
496 initialScale: null,
497};
…lines 498–524 unchanged (27 lines)
525 private iFrameRefs = new Map<ExcalidrawElement["id"], HTMLIFrameElement>();
526
527 hitLinkElement?: NonDeletedExcalidrawElement;
528 lastPointerDownEvent: React.PointerEvent<HTMLElement> | null = null;
529 lastPointerUpEvent: React.PointerEvent<HTMLElement> | PointerEvent | null =
530 null;
531 lastViewportPosition = { x: 0, y: 0 };
532
533 laserPathManager: LaserPathManager = new LaserPathManager(this);
534
535 onChangeEmitter = new Emitter<
536 [
537 elements: readonly ExcalidrawElement[],
…lines 538–555 unchanged (18 lines)
556 ]
557 >();
558 onUserFollowEmitter = new Emitter<[payload: OnUserFollowedPayload]>();
559 onScrollChangeEmitter = new Emitter<
560 [scrollX: number, scrollY: number, zoom: AppState["zoom"]]
561 >();
562
563 onRemoveEventListenersEmitter = new Emitter<[]>();
564
565 constructor(props: AppProps) {
566 super(props);
567 const defaultAppState = getDefaultAppState();
568 const {
…lines 569–2368 unchanged (1800 lines)
2369 this.resizeObserver?.disconnect();
2370 this.unmounted = true;
2371 this.removeEventListeners();
2372 this.scene.destroy();
2373 this.library.destroy();
2374 this.laserPathManager.destroy();
2375 this.onChangeEmitter.destroy();
2376 ShapeCache.destroy();
2377 SnapCache.destroy();
2378 clearTimeout(touchTimeout);
2379 isSomeElementSelected.clearCache();
2380 selectGroupsForSelectedElements.clearCache();
2381 touchTimeout = 0;
…lines 2382–2460 unchanged (79 lines)
2461 addEventListener(
2462 document,
2463 EVENT.GESTURE_END,
2464 this.onGestureEnd as any,
2465 false,
2466 ),
2467 );
2468
2469 if (this.state.viewModeEnabled) {
2470 return;
2471 }
2472
2473 // -------------------------------------------------------------------------
…lines 2474–4612 unchanged (2139 lines)
4613 };
4614
4615 private handleCanvasPointerMove = (
4616 event: React.PointerEvent<HTMLCanvasElement>,
4617 ) => {
4618 this.savePointer(event.clientX, event.clientY, this.state.cursorButton);
4619
4620 if (gesture.pointers.has(event.pointerId)) {
4621 gesture.pointers.set(event.pointerId, {
4622 x: event.clientX,
4623 y: event.clientY,
4624 });
4625 }
…lines 4626–5261 unchanged (636 lines)
5262 // would prevent our copy handling otherwise)
5263 const selection = document.getSelection();
5264 if (selection?.anchorNode) {
5265 selection.removeAllRanges();
5266 }
5267 this.maybeOpenContextMenuAfterPointerDownOnTouchDevices(event);
5268 this.maybeCleanupAfterMissingPointerUp(event);
5269
5270 //fires only once, if pen is detected, penMode is enabled
5271 //the user can disable this by toggling the penMode button
5272 if (!this.state.penDetected && event.pointerType === "pen") {
5273 this.setState((prevState) => {
5274 return {
…lines 5275–5299 unchanged (25 lines)
5300
5301 this.setState({
5302 lastPointerDownWith: event.pointerType,
5303 cursorButton: "down",
5304 });
5305 this.savePointer(event.clientX, event.clientY, "down");
5306
5307 // only handle left mouse button or touch
5308 if (
5309 event.button !== POINTER_BUTTON.MAIN &&
5310 event.button !== POINTER_BUTTON.TOUCH
5311 ) {
5312 return;
5313 }
5314
5315 // don't select while panning
5316 if (gesture.pointers.size > 1) {
5317 return;
…lines 5318–5430 unchanged (113 lines)
5431
5432 const onPointerUp =
5433 this.onPointerUpFromPointerDownHandler(pointerDownState);
5434
5435 const onKeyDown = this.onKeyDownFromPointerDownHandler(pointerDownState);
5436 const onKeyUp = this.onKeyUpFromPointerDownHandler(pointerDownState);
5437
5438 lastPointerUp = onPointerUp;
5439
5440 if (!this.state.viewModeEnabled || this.state.activeTool.type === "laser") {
5441 window.addEventListener(EVENT.POINTER_MOVE, onPointerMove);
5442 window.addEventListener(EVENT.POINTER_UP, onPointerUp);
5443 window.addEventListener(EVENT.KEYDOWN, onKeyDown);
5444 window.addEventListener(EVENT.KEYUP, onKeyUp);
…lines 5445–5541 unchanged (97 lines)
5542
5543 private resetContextMenuTimer = () => {
5544 clearTimeout(touchTimeout);
5545 touchTimeout = 0;
5546 invalidateContextMenu = false;
5547 };
5548
5549 private maybeCleanupAfterMissingPointerUp(
5550 event: React.PointerEvent<HTMLElement>,
5551 ): void {
5552 if (lastPointerUp !== null) {
5553 // Unfortunately, sometimes we don't get a pointerup after a pointerdown,
5554 // this can happen when a contextual menu or alert is triggered. In order to avoid
5555 // being in a weird state, we clean up on the next pointerdown
5556 lastPointerUp(event);
5557 }
5558 }
5559
5560 // Returns whether the event is a panning
5561 private handleCanvasPanUsingWheelOrSpaceDrag = (
5562 event: React.PointerEvent<HTMLElement>,
5563 ): boolean => {
5564 if (
5565 !(
…lines 5566–5758 unchanged (193 lines)
5759 this.handlePointerMoveOverScrollbars(event, pointerDownState);
5760 });
5761
5762 const onPointerUp = withBatchedUpdates(() => {
5763 isDraggingScrollBar = false;
5764 setCursorForShape(this.interactiveCanvas, this.state);
5765 lastPointerUp = null;
5766 this.setState({
5767 cursorButton: "up",
5768 });
5769 this.savePointer(event.clientX, event.clientY, "up");
5770 window.removeEventListener(EVENT.POINTER_MOVE, onPointerMove);
5771 window.removeEventListener(EVENT.POINTER_UP, onPointerUp);
…lines 5772–7204 unchanged (1433 lines)
7205 }
7206
7207 private onPointerUpFromPointerDownHandler(
7208 pointerDownState: PointerDownState,
7209 ): (event: PointerEvent) => void {
7210 return withBatchedUpdates((childEvent: PointerEvent) => {
7211 if (pointerDownState.eventListeners.onMove) {
7212 pointerDownState.eventListeners.onMove.flush();
7213 }
7214 const {
7215 draggingElement,
7216 resizingElement,
7217 multiElement,
…lines 7218–7305 unchanged (88 lines)
7306 },
7307 suggestedBindings: [],
7308 });
7309 }
7310 }
7311 }
7312
7313 lastPointerUp = null;
7314
7315 window.removeEventListener(
7316 EVENT.POINTER_MOVE,
7317 pointerDownState.eventListeners.onMove!,
7318 );
7319 window.removeEventListener(
…lines 7320–7689 unchanged (370 lines)
7690 hitElement,
7691 this.scene,
7692 ),
7693 });
7694 }
7695 }
7696 if (isEraserActive(this.state)) {
7697 const draggedDistance = distance2d(
7698 this.lastPointerDownEvent!.clientX,
7699 this.lastPointerDownEvent!.clientY,
7700 this.lastPointerUpEvent!.clientX,
7701 this.lastPointerUpEvent!.clientY,
7702 );
7703
7704 if (draggedDistance === 0) {
7705 const scenePointer = viewportCoordsToSceneCoords(
7706 {
7707 clientX: this.lastPointerUpEvent!.clientX,
7708 clientY: this.lastPointerUpEvent!.clientY,
7709 },
7710 this.state,
7711 );
7712 const hitElements = this.getElementsAtPosition(
7713 scenePointer.x,
7714 scenePointer.y,
…lines 7715–9327 unchanged (1613 lines)

After

…lines 1–241 unchanged (241 lines)
242 SidebarName,
243 SidebarTabName,
244 KeyboardModifiersObject,
245 CollaboratorPointer,
246 ToolType,
247 OnUserFollowedPayload,
248 UnsubscribeCallback,
249} from "../types";
250import {
251 debounce,
252 distance,
253 getFontString,
254 getNearestScrollableContainer,
…lines 255–485 unchanged (231 lines)
486>();
487
488let IS_PLAIN_PASTE = false;
489let IS_PLAIN_PASTE_TIMER = 0;
490let PLAIN_PASTE_TOAST_SHOWN = false;
491
492let lastPointerUp: (() => void) | null = null;
493const gesture: Gesture = {
494 pointers: new Map(),
495 lastCenter: null,
496 initialDistance: null,
497 initialScale: null,
498};
…lines 499–525 unchanged (27 lines)
526 private iFrameRefs = new Map<ExcalidrawElement["id"], HTMLIFrameElement>();
527
528 hitLinkElement?: NonDeletedExcalidrawElement;
529 lastPointerDownEvent: React.PointerEvent<HTMLElement> | null = null;
530 lastPointerUpEvent: React.PointerEvent<HTMLElement> | PointerEvent | null =
531 null;
532 lastPointerMoveEvent: PointerEvent | null = null;
533 lastViewportPosition = { x: 0, y: 0 };
534
535 laserPathManager: LaserPathManager = new LaserPathManager(this);
536
537 onChangeEmitter = new Emitter<
538 [
…lines 539–558 unchanged (20 lines)
559 >();
560 onUserFollowEmitter = new Emitter<[payload: OnUserFollowedPayload]>();
561 onScrollChangeEmitter = new Emitter<
562 [scrollX: number, scrollY: number, zoom: AppState["zoom"]]
563 >();
564
565 missingPointerEventCleanupEmitter = new Emitter<
566 [event: PointerEvent | null]
567 >();
568 onRemoveEventListenersEmitter = new Emitter<[]>();
569
570 constructor(props: AppProps) {
571 super(props);
572 const defaultAppState = getDefaultAppState();
573 const {
…lines 574–2373 unchanged (1800 lines)
2374 this.resizeObserver?.disconnect();
2375 this.unmounted = true;
2376 this.removeEventListeners();
2377 this.scene.destroy();
2378 this.library.destroy();
2379 this.laserPathManager.destroy();
2380 this.onChangeEmitter.clear();
2381 ShapeCache.destroy();
2382 SnapCache.destroy();
2383 clearTimeout(touchTimeout);
2384 isSomeElementSelected.clearCache();
2385 selectGroupsForSelectedElements.clearCache();
2386 touchTimeout = 0;
…lines 2387–2465 unchanged (79 lines)
2466 addEventListener(
2467 document,
2468 EVENT.GESTURE_END,
2469 this.onGestureEnd as any,
2470 false,
2471 ),
2472 addEventListener(window, EVENT.FOCUS, () => {
2473 this.maybeCleanupAfterMissingPointerUp(null);
2474 }),
2475 );
2476
2477 if (this.state.viewModeEnabled) {
2478 return;
2479 }
2480
…lines 2481–4620 unchanged (2140 lines)
4621 };
4622
4623 private handleCanvasPointerMove = (
4624 event: React.PointerEvent<HTMLCanvasElement>,
4625 ) => {
4626 this.savePointer(event.clientX, event.clientY, this.state.cursorButton);
4627 this.lastPointerMoveEvent = event.nativeEvent;
4628
4629 if (gesture.pointers.has(event.pointerId)) {
4630 gesture.pointers.set(event.pointerId, {
4631 x: event.clientX,
4632 y: event.clientY,
4633 });
…lines 4634–5208 unchanged (575 lines)
5209 }
5210 }
5211
5212 private handleCanvasPointerDown = (
5213 event: React.PointerEvent<HTMLElement>,
5214 ) => {
5215 this.maybeCleanupAfterMissingPointerUp(event.nativeEvent);
5216 this.maybeUnfollowRemoteUser();
5217
5218 // since contextMenu options are potentially evaluated on each render,
5219 // and an contextMenu action may depend on selection state, we must
5220 // close the contextMenu before we update the selection on pointerDown
5221 // (e.g. resetting selection)
…lines 5222–5309 unchanged (88 lines)
5310 this.setState({
5311 lastPointerDownWith: event.pointerType,
5312 cursorButton: "down",
5313 });
5314 this.savePointer(event.clientX, event.clientY, "down");
5315
5316 if (
5317 event.button === POINTER_BUTTON.ERASER &&
5318 this.state.activeTool.type !== TOOL_TYPE.eraser
5319 ) {
5320 this.setState(
5321 {
5322 activeTool: updateActiveTool(this.state, {
5323 type: TOOL_TYPE.eraser,
5324 lastActiveToolBeforeEraser: this.state.activeTool,
5325 }),
5326 },
5327 () => {
5328 this.handleCanvasPointerDown(event);
5329 const onPointerUp = () => {
5330 unsubPointerUp();
5331 unsubCleanup?.();
5332 if (isEraserActive(this.state)) {
5333 this.setState({
5334 activeTool: updateActiveTool(this.state, {
5335 ...(this.state.activeTool.lastActiveTool || {
5336 type: TOOL_TYPE.selection,
5337 }),
5338 lastActiveToolBeforeEraser: null,
5339 }),
5340 });
5341 }
5342 };
5343
5344 const unsubPointerUp = addEventListener(
5345 window,
5346 EVENT.POINTER_UP,
5347 onPointerUp,
5348 {
5349 once: true,
5350 },
5351 );
5352 let unsubCleanup: UnsubscribeCallback | undefined;
5353 // subscribe inside rAF lest it'd be triggered on the same pointerdown
5354 // if we start erasing while coming from blurred document since
5355 // we cleanup pointer events on focus
5356 requestAnimationFrame(() => {
5357 unsubCleanup =
5358 this.missingPointerEventCleanupEmitter.once(onPointerUp);
5359 });
5360 },
5361 );
5362 return;
5363 }
5364
5365 // only handle left mouse button or touch
5366 if (
5367 event.button !== POINTER_BUTTON.MAIN &&
5368 event.button !== POINTER_BUTTON.TOUCH &&
5369 event.button !== POINTER_BUTTON.ERASER
5370 ) {
5371 return;
5372 }
5373
5374 // don't select while panning
5375 if (gesture.pointers.size > 1) {
…lines 5376–5489 unchanged (114 lines)
5490
5491 const onPointerUp =
5492 this.onPointerUpFromPointerDownHandler(pointerDownState);
5493
5494 const onKeyDown = this.onKeyDownFromPointerDownHandler(pointerDownState);
5495 const onKeyUp = this.onKeyUpFromPointerDownHandler(pointerDownState);
5496
5497 this.missingPointerEventCleanupEmitter.once((_event) =>
5498 onPointerUp(_event || event.nativeEvent),
5499 );
5500
5501 if (!this.state.viewModeEnabled || this.state.activeTool.type === "laser") {
5502 window.addEventListener(EVENT.POINTER_MOVE, onPointerMove);
5503 window.addEventListener(EVENT.POINTER_UP, onPointerUp);
5504 window.addEventListener(EVENT.KEYDOWN, onKeyDown);
5505 window.addEventListener(EVENT.KEYUP, onKeyUp);
…lines 5506–5603 unchanged (98 lines)
5604 private resetContextMenuTimer = () => {
5605 clearTimeout(touchTimeout);
5606 touchTimeout = 0;
5607 invalidateContextMenu = false;
5608 };
5609
5610 /**
5611 * pointerup may not fire in certian cases (user tabs away...), so in order
5612 * to properly cleanup pointerdown state, we need to fire any hanging
5613 * pointerup handlers manually
5614 */
5615 private maybeCleanupAfterMissingPointerUp = (event: PointerEvent | null) => {
5616 lastPointerUp?.();
5617 this.missingPointerEventCleanupEmitter.trigger(event).clear();
5618 };
5619
5620 // Returns whether the event is a panning
5621 private handleCanvasPanUsingWheelOrSpaceDrag = (
5622 event: React.PointerEvent<HTMLElement>,
5623 ): boolean => {
5624 if (
…lines 5625–5815 unchanged (191 lines)
5816 return;
5817 }
5818
5819 this.handlePointerMoveOverScrollbars(event, pointerDownState);
5820 });
5821 const onPointerUp = withBatchedUpdates(() => {
5822 lastPointerUp = null;
5823 isDraggingScrollBar = false;
5824 setCursorForShape(this.interactiveCanvas, this.state);
5825 this.setState({
5826 cursorButton: "up",
5827 });
5828 this.savePointer(event.clientX, event.clientY, "up");
…lines 5829–7263 unchanged (1435 lines)
7264 }
7265
7266 private onPointerUpFromPointerDownHandler(
7267 pointerDownState: PointerDownState,
7268 ): (event: PointerEvent) => void {
7269 return withBatchedUpdates((childEvent: PointerEvent) => {
7270 this.removePointer(childEvent);
7271 if (pointerDownState.eventListeners.onMove) {
7272 pointerDownState.eventListeners.onMove.flush();
7273 }
7274 const {
7275 draggingElement,
7276 resizingElement,
…lines 7277–7365 unchanged (89 lines)
7366 },
7367 suggestedBindings: [],
7368 });
7369 }
7370 }
7371 }
7372
7373 this.missingPointerEventCleanupEmitter.clear();
7374
7375 window.removeEventListener(
7376 EVENT.POINTER_MOVE,
7377 pointerDownState.eventListeners.onMove!,
7378 );
7379 window.removeEventListener(
…lines 7380–7750 unchanged (371 lines)
7751 this.scene,
7752 ),
7753 });
7754 }
7755 }
7756
7757 const pointerStart = this.lastPointerDownEvent;
7758 const pointerEnd = this.lastPointerUpEvent || this.lastPointerMoveEvent;
7759
7760 if (isEraserActive(this.state) && pointerStart && pointerEnd) {
7761 const draggedDistance = distance2d(
7762 pointerStart.clientX,
7763 pointerStart.clientY,
7764 pointerEnd.clientX,
7765 pointerEnd.clientY,
7766 );
7767
7768 if (draggedDistance === 0) {
7769 const scenePointer = viewportCoordsToSceneCoords(
7770 {
7771 clientX: pointerEnd.clientX,
7772 clientY: pointerEnd.clientY,
7773 },
7774 this.state,
7775 );
7776 const hitElements = this.getElementsAtPosition(
7777 scenePointer.x,
7778 scenePointer.y,
…lines 7779–9391 unchanged (1613 lines)

Before

program
import_statement
import "import"
import_clause
identifier "React"
, ","
named_imports
{ "{"
import_specifier
identifier "useContext"
} "}"
from "from"
string
" "\""
string_fragment "react"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "flushSync"
} "}"
from "from"
string
" "\""
string_fragment "react-dom"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "RoughCanvas"
} "}"
from "from"
string
" "\""
string_fragment "roughjs/bin/canvas"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "rough"
from "from"
string
" "\""
string_fragment "roughjs/bin/rough"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "clsx"
from "from"
string
" "\""
string_fragment "clsx"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "nanoid"
} "}"
from "from"
string
" "\""
string_fragment "nanoid"
" "\""
; ";"
import_statement (+99 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "createRedoAction"
, ","
import_specifier
identifier "createUndoAction"
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionHistory"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ActionManager"
} "}"
from "from"
string
" "\""
string_fragment "../actions/manager"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actions"
} "}"
from "from"
string
" "\""
string_fragment "../actions/register"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "Action"
, ","
import_specifier
identifier "ActionResult"
} "}"
from "from"
string
" "\""
string_fragment "../actions/types"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "trackEvent"
} "}"
from "from"
string
" "\""
string_fragment "../analytics"
" "\""
; ";"
import_statement (+21 nodes collapsed)
import_statement (+21 nodes collapsed)
import_statement (+126 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ExportedElements"
, ","
import_specifier
identifier "exportCanvas"
, ","
import_specifier
identifier "loadFromBlob"
} "}"
from "from"
string
" "\""
string_fragment "../data"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "Library"
, ","
named_imports
{ "{"
import_specifier
identifier "distributeLibraryItemsOnSquareGrid"
} "}"
from "from"
string
" "\""
string_fragment "../data/library"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "restore"
, ","
import_specifier
identifier "restoreElements"
} "}"
from "from"
string
" "\""
string_fragment "../data/restore"
" "\""
; ";"
import_statement (+87 nodes collapsed)
import_statement (+48 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "LinearElementEditor"
} "}"
from "from"
string
" "\""
string_fragment "../element/linearElementEditor"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "mutateElement"
, ","
import_specifier
identifier "newElementWith"
} "}"
from "from"
string
" "\""
string_fragment "../element/mutateElement"
" "\""
; ";"
import_statement (+33 nodes collapsed)
import_statement (+60 nodes collapsed)
import_statement (+63 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "getCenter"
, ","
import_specifier
identifier "getDistance"
} "}"
from "from"
string
" "\""
string_fragment "../gesture"
" "\""
; ";"
import_statement (+33 nodes collapsed)
import_statement
import "import"
import_clause
identifier "History"
from "from"
string
" "\""
string_fragment "../history"
" "\""
; ";"
import_statement (+26 nodes collapsed)
import_statement (+30 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "isElementInViewport"
} "}"
from "from"
string
" "\""
string_fragment "../element/sizeHelpers"
" "\""
; ";"
import_statement (+24 nodes collapsed)
import_statement (+36 nodes collapsed)
import_statement
import "import"
import_clause
identifier "Scene"
from "from"
string
" "\""
string_fragment "../scene/Scene"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "RenderInteractiveSceneCallback"
, ","
import_specifier
identifier "ScrollBars"
} "}"
from "from"
string
" "\""
string_fragment "../scene/types"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "getStateForZoom"
} "}"
from "from"
string
" "\""
string_fragment "../scene/zoom"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "findShapeByKey"
} "}"
from "from"
string
" "\""
string_fragment "../shapes"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "AppClassProperties"
, ","
import_specifier
identifier "AppProps"
, ","
import_specifier
identifier "AppState"
, ","
import_specifier
identifier "BinaryFileData"
, ","
import_specifier
identifier "DataURL"
, ","
import_specifier
identifier "ExcalidrawImperativeAPI"
, ","
import_specifier
identifier "BinaryFiles"
, ","
import_specifier
identifier "Gesture"
, ","
import_specifier
identifier "GestureEvent"
, ","
import_specifier
identifier "LibraryItems"
, ","
import_specifier
identifier "PointerDownState"
, ","
import_specifier
identifier "SceneData"
, ","
import_specifier
identifier "Device"
, ","
import_specifier
identifier "FrameNameBoundsCache"
, ","
import_specifier
identifier "SidebarName"
, ","
import_specifier
identifier "SidebarTabName"
, ","
import_specifier
identifier "KeyboardModifiersObject"
, ","
import_specifier
identifier "CollaboratorPointer"
, ","
import_specifier
identifier "ToolType"
, ","
import_specifier
identifier "OnUserFollowedPayload"
, ","
} "}"
from "from"
string
" "\""
string_fragment "../types"
" "\""
; ";"
import_statement (+81 nodes collapsed)
import_statement (+24 nodes collapsed)
import_statement (+21 nodes collapsed)
import_statement
import "import"
import_clause
identifier "LayerUI"
from "from"
string
" "\""
string_fragment "./LayerUI"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "Toast"
} "}"
from "from"
string
" "\""
string_fragment "./Toast"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actionToggleViewMode"
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionToggleViewMode"
" "\""
; ";"
import_statement (+48 nodes collapsed)
import_statement (+26 nodes collapsed)
import_statement
import "import"
import_clause
identifier "throttle"
from "from"
string
" "\""
string_fragment "lodash.throttle"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "fileOpen"
, ","
import_specifier
identifier "FileSystemHandle"
} "}"
from "from"
string
" "\""
string_fragment "../data/filesystem"
" "\""
; ";"
import_statement (+45 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "isHittingElementNotConsideringBoundingBox"
} "}"
from "from"
string
" "\""
string_fragment "../element/collision"
" "\""
; ";"
import_statement (+27 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "isLocalLink"
, ","
import_specifier
identifier "normalizeLink"
, ","
import_specifier
identifier "toValidURL"
} "}"
from "from"
string
" "\""
string_fragment "../data/url"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "shouldShowBoundingBox"
} "}"
from "from"
string
" "\""
string_fragment "../element/transformHandles"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actionUnlockAllElements"
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionElementLock"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "Fonts"
} "}"
from "from"
string
" "\""
string_fragment "../scene/Fonts"
" "\""
; ";"
import_statement (+51 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "excludeElementsInFramesFromSelection"
, ","
import_specifier
identifier "makeNextSelectedElementIds"
, ","
} "}"
from "from"
string
" "\""
string_fragment "../scene/selection"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actionPaste"
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionClipboard"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actionRemoveAllElementsFromFrame"
, ","
import_specifier
identifier "actionSelectAllElementsInFrame"
, ","
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionFrame"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actionToggleHandTool"
, ","
import_specifier
identifier "zoomToFit"
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionCanvas"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "jotaiStore"
} "}"
from "from"
string
" "\""
string_fragment "../jotai"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "activeConfirmDialogAtom"
} "}"
from "from"
string
" "\""
string_fragment "./ActiveConfirmDialog"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ImageSceneDataError"
} "}"
from "from"
string
" "\""
string_fragment "../errors"
" "\""
; ";"
import_statement (+39 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actionWrapTextInContainer"
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionBoundText"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "BraveMeasureTextError"
from "from"
string
" "\""
string_fragment "./BraveMeasureTextError"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "activeEyeDropperAtom"
} "}"
from "from"
string
" "\""
string_fragment "./EyeDropper"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ExcalidrawElementSkeleton"
, ","
import_specifier
identifier "convertToExcalidrawElements"
, ","
} "}"
from "from"
string
" "\""
string_fragment "../data/transform"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ValueOf"
} "}"
from "from"
string
" "\""
string_fragment "../utility-types"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "isSidebarDockedAtom"
} "}"
from "from"
string
" "\""
string_fragment "./Sidebar/Sidebar"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "StaticCanvas"
, ","
import_specifier
identifier "InteractiveCanvas"
} "}"
from "from"
string
" "\""
string_fragment "./canvases"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "Renderer"
} "}"
from "from"
string
" "\""
string_fragment "../scene/Renderer"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ShapeCache"
} "}"
from "from"
string
" "\""
string_fragment "../scene/ShapeCache"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "LaserToolOverlay"
} "}"
from "from"
string
" "\""
string_fragment "./LaserTool/LaserTool"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "LaserPathManager"
} "}"
from "from"
string
" "\""
string_fragment "./LaserTool/LaserPathManager"
" "\""
; ";"
import_statement (+24 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "Emitter"
} "}"
from "from"
string
" "\""
string_fragment "../emitter"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ElementCanvasButtons"
} "}"
from "from"
string
" "\""
string_fragment "../element/ElementCanvasButtons"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "MagicCacheData"
, ","
import_specifier
identifier "diagramToHTML"
} "}"
from "from"
string
" "\""
string_fragment "../data/magic"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "elementsOverlappingBBox"
, ","
import_specifier
identifier "exportToBlob"
} "}"
from "from"
string
" "\""
string_fragment "../../utils/export"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "COLOR_PALETTE"
} "}"
from "from"
string
" "\""
string_fragment "../colors"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ElementCanvasButton"
} "}"
from "from"
string
" "\""
string_fragment "./MagicButton"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "MagicIcon"
, ","
import_specifier
identifier "copyIcon"
, ","
import_specifier
identifier "fullscreenIcon"
} "}"
from "from"
string
" "\""
string_fragment "./icons"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "EditorLocalStorage"
} "}"
from "from"
string
" "\""
string_fragment "../data/EditorLocalStorage"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "FollowMode"
from "from"
string
" "\""
string_fragment "./FollowMode/FollowMode"
" "\""
; ";"
lexical_declaration (+21 nodes collapsed)
lexical_declaration (+21 nodes collapsed)
lexical_declaration (+48 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "DeviceContext"
= "="
call_expression
member_expression
identifier "React"
. "."
property_identifier "createContext"
type_arguments
< "<"
type_identifier "Device"
> ">"
arguments
( "("
identifier "deviceContextInitialValue"
) ")"
; ";"
expression_statement
assignment_expression
member_expression
identifier "DeviceContext"
. "."
property_identifier "displayName"
= "="
string
" "\""
string_fragment "DeviceContext"
" "\""
; ";"
export_statement (+55 nodes collapsed)
expression_statement
assignment_expression
member_expression
identifier "ExcalidrawContainerContext"
. "."
property_identifier "displayName"
= "="
string
" "\""
string_fragment "ExcalidrawContainerContext"
" "\""
; ";"
lexical_declaration (+26 nodes collapsed)
expression_statement
assignment_expression
member_expression
identifier "ExcalidrawElementsContext"
. "."
property_identifier "displayName"
= "="
string
" "\""
string_fragment "ExcalidrawElementsContext"
" "\""
; ";"
lexical_declaration (+49 nodes collapsed)
expression_statement
assignment_expression
member_expression
identifier "ExcalidrawAppStateContext"
. "."
property_identifier "displayName"
= "="
string
" "\""
string_fragment "ExcalidrawAppStateContext"
" "\""
; ";"
lexical_declaration (+59 nodes collapsed)
expression_statement
assignment_expression
member_expression
identifier "ExcalidrawSetAppStateContext"
. "."
property_identifier "displayName"
= "="
string
" "\""
string_fragment "ExcalidrawSetAppStateContext"
" "\""
; ";"
lexical_declaration (+22 nodes collapsed)
expression_statement
assignment_expression
member_expression
identifier "ExcalidrawActionManagerContext"
. "."
property_identifier "displayName"
= "="
string
" "\""
string_fragment "ExcalidrawActionManagerContext"
" "\""
; ";"
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useApp"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "AppContext"
) ")"
; ";"
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useAppProps"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "AppPropsContext"
) ")"
; ";"
export_statement (+23 nodes collapsed)
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useExcalidrawContainer"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "ExcalidrawContainerContext"
) ")"
; ";"
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useExcalidrawElements"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "ExcalidrawElementsContext"
) ")"
; ";"
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useExcalidrawAppState"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "ExcalidrawAppStateContext"
) ")"
; ";"
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useExcalidrawSetAppState"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "ExcalidrawSetAppStateContext"
) ")"
; ";"
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useExcalidrawActionManager"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "ExcalidrawActionManagerContext"
) ")"
; ";"
lexical_declaration (+24 nodes collapsed)
lexical_declaration
let "let"
variable_declarator
identifier "didTapTwice"
type_annotation
: ":"
predefined_type
boolean "boolean"
= "="
false "false"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "tappedTwiceTimer"
= "="
number "0"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "isHoldingSpace"
type_annotation
: ":"
predefined_type
boolean "boolean"
= "="
false "false"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "isPanning"
type_annotation
: ":"
predefined_type
boolean "boolean"
= "="
false "false"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "isDraggingScrollBar"
type_annotation
: ":"
predefined_type
boolean "boolean"
= "="
false "false"
; ";"
lexical_declaration (+21 nodes collapsed)
lexical_declaration
let "let"
variable_declarator
identifier "touchTimeout"
= "="
number "0"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "invalidateContextMenu"
= "="
false "false"
; ";"
comment "/**\n * Map of youtube embed video states\n */"
lexical_declaration (+33 nodes collapsed)
lexical_declaration
let "let"
variable_declarator
identifier "IS_PLAIN_PASTE"
= "="
false "false"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "IS_PLAIN_PASTE_TIMER"
= "="
number "0"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "PLAIN_PASTE_TOAST_SHOWN"
= "="
false "false"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "lastPointerUp"
type_annotation
: ":"
union_type
parenthesized_type
( "("
function_type
formal_parameters
( "("
required_parameter
identifier "event"
type_annotation
: ":"
predefined_type
any "any"
) ")"
=> "=>"
predefined_type
void "void"
) ")"
| "|"
literal_type
null "null"
= "="
null "null"
; ";"
lexical_declaration (+37 nodes collapsed)
class_declaration
class "class"
type_identifier "App"
class_heritage
extends_clause
extends "extends"
member_expression
identifier "React"
. "."
property_identifier "Component"
type_arguments
< "<"
type_identifier "AppProps"
, ","
type_identifier "AppState"
> ">"
class_body
{ "{"
public_field_definition
property_identifier "canvas"
type_annotation
: ":"
lookup_type
type_identifier "AppClassProperties"
[ "["
literal_type
string
" "\""
string_fragment "canvas"
" "\""
] "]"
; ";"
public_field_definition
property_identifier "interactiveCanvas"
type_annotation
: ":"
lookup_type
type_identifier "AppClassProperties"
[ "["
literal_type
string
" "\""
string_fragment "interactiveCanvas"
" "\""
] "]"
= "="
null "null"
; ";"
public_field_definition
property_identifier "rc"
type_annotation
: ":"
type_identifier "RoughCanvas"
; ";"
public_field_definition
property_identifier "unmounted"
type_annotation
: ":"
predefined_type
boolean "boolean"
= "="
false "false"
; ";"
public_field_definition
property_identifier "actionManager"
type_annotation
: ":"
type_identifier "ActionManager"
; ";"
public_field_definition
property_identifier "device"
type_annotation
: ":"
type_identifier "Device"
= "="
identifier "deviceContextInitialValue"
; ";"
public_field_definition
accessibility_modifier
private "private"
property_identifier "excalidrawContainerRef"
= "="
call_expression
member_expression
identifier "React"
. "."
property_identifier "createRef"
type_arguments
< "<"
type_identifier "HTMLDivElement"
> ">"
arguments
( "("
) ")"
; ";"
public_field_definition
accessibility_modifier
public "public"
property_identifier "scene"
type_annotation
: ":"
type_identifier "Scene"
; ";"
public_field_definition
accessibility_modifier
public "public"
property_identifier "renderer"
type_annotation
: ":"
type_identifier "Renderer"
; ";"
public_field_definition
accessibility_modifier
private "private"
property_identifier "fonts"
type_annotation
: ":"
type_identifier "Fonts"
; ";"
public_field_definition
accessibility_modifier
private "private"
property_identifier "resizeObserver"
type_annotation
: ":"
union_type
type_identifier "ResizeObserver"
| "|"
literal_type
undefined "undefined"
; ";"
public_field_definition
accessibility_modifier
private "private"
property_identifier "nearestScrollableContainer"
type_annotation
: ":"
union_type
union_type
type_identifier "HTMLElement"
| "|"
type_identifier "Document"
| "|"
literal_type
undefined "undefined"
; ";"
public_field_definition
accessibility_modifier
public "public"
property_identifier "library"
type_annotation
: ":"
lookup_type
type_identifier "AppClassProperties"
[ "["
literal_type
string
" "\""
string_fragment "library"
" "\""
] "]"
; ";"
public_field_definition
accessibility_modifier
public "public"
property_identifier "libraryItemsFromStorage"
type_annotation
: ":"
union_type
type_identifier "LibraryItems"
| "|"
literal_type
undefined "undefined"
; ";"
public_field_definition
accessibility_modifier
public "public"
property_identifier "id"
type_annotation
: ":"
predefined_type
string "string"
; ";"
public_field_definition
accessibility_modifier
private "private"
property_identifier "history"
type_annotation
: ":"
type_identifier "History"
; ";"
public_field_definition (+26 nodes collapsed)
; ";"
public_field_definition
accessibility_modifier
public "public"
property_identifier "files"
type_annotation
: ":"
type_identifier "BinaryFiles"
= "="
object
{ "{"
} "}"
; ";"
public_field_definition (+22 nodes collapsed)
; ";"
public_field_definition (+25 nodes collapsed)
; ";"
public_field_definition
property_identifier "hitLinkElement"
? "?"
type_annotation
: ":"
type_identifier "NonDeletedExcalidrawElement"
; ";"
public_field_definition
property_identifier "lastPointerDownEvent"
type_annotation
: ":"
union_type
generic_type
nested_type_identifier
identifier "React"
. "."
type_identifier "PointerEvent"
type_arguments
< "<"
type_identifier "HTMLElement"
> ">"
| "|"
literal_type
null "null"
= "="
null "null"
; ";"
public_field_definition (+22 nodes collapsed)
; ";"
public_field_definition
property_identifier "lastViewportPosition"
= "="
object
{ "{"
pair
property_identifier "x"
: ":"
number "0"
, ","
pair
property_identifier "y"
: ":"
number "0"
} "}"
; ";"
public_field_definition
property_identifier "laserPathManager"
type_annotation
: ":"
type_identifier "LaserPathManager"
= "="
new_expression
new "new"
identifier "LaserPathManager"
arguments
( "("
this "this"
) ")"
; ";"
public_field_definition (+38 nodes collapsed)
; ";"
public_field_definition (+49 nodes collapsed)
; ";"
public_field_definition (+41 nodes collapsed)
; ";"
public_field_definition
property_identifier "onUserFollowEmitter"
= "="
new_expression
new "new"
identifier "Emitter"
type_arguments
< "<"
tuple_type
[ "["
required_parameter
identifier "payload"
type_annotation
: ":"
type_identifier "OnUserFollowedPayload"
] "]"
> ">"
arguments
( "("
) ")"
; ";"
public_field_definition (+42 nodes collapsed)
; ";"
public_field_definition
property_identifier "onRemoveEventListenersEmitter"
= "="
new_expression
new "new"
identifier "Emitter"
type_arguments
< "<"
tuple_type
[ "["
] "]"
> ">"
arguments
( "("
) ")"
; ";"
method_definition (+807 nodes collapsed)
method_definition (+431 nodes collapsed)
method_definition (+54 nodes collapsed)
method_definition (+41 nodes collapsed)
method_definition (+504 nodes collapsed)
method_definition (+223 nodes collapsed)
public_field_definition (+289 nodes collapsed)
; ";"
method_definition (+1317 nodes collapsed)
public_field_definition (+39 nodes collapsed)
; ";"
public_field_definition (+329 nodes collapsed)
; ";"
public_field_definition (+1122 nodes collapsed)
; ";"
method_definition (+2155 nodes collapsed)
public_field_definition (+41 nodes collapsed)
; ";"
public_field_definition (+27 nodes collapsed)
; ";"
public_field_definition (+27 nodes collapsed)
; ";"
public_field_definition (+51 nodes collapsed)
; ";"
public_field_definition (+233 nodes collapsed)
; ";"
public_field_definition (+25 nodes collapsed)
; ";"
public_field_definition (+144 nodes collapsed)
; ";"
method_definition (+106 nodes collapsed)
method_definition (+881 nodes collapsed)
method_definition (+89 nodes collapsed)
public_field_definition (+26 nodes collapsed)
; ";"
public_field_definition (+24 nodes collapsed)
; ";"
public_field_definition (+96 nodes collapsed)
; ";"
public_field_definition (+228 nodes collapsed)
; ";"
public_field_definition (+532 nodes collapsed)
; ";"
public_field_definition (+392 nodes collapsed)
; ";"
public_field_definition (+737 nodes collapsed)
; ";"
comment "// Lifecycle"
public_field_definition (+41 nodes collapsed)
; ";"
public_field_definition (+23 nodes collapsed)
; ";"
public_field_definition (+28 nodes collapsed)
; ";"
public_field_definition (+26 nodes collapsed)
; ";"
comment "/**\n * Resets scene & history.\n * ! Do not use to clear "...
public_field_definition (+118 nodes collapsed)
; ";"
public_field_definition (+711 nodes collapsed)
; ";"
public_field_definition (+51 nodes collapsed)
; ";"
public_field_definition (+155 nodes collapsed)
; ";"
public_field_definition (+192 nodes collapsed)
; ";"
method_definition (+531 nodes collapsed)
method_definition
accessibility_modifier
public "public"
property_identifier "componentWillUnmount"
formal_parameters
( "("
) ")"
statement_block
{ "{"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "renderer"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "scene"
= "="
new_expression
new "new"
identifier "Scene"
arguments
( "("
) ")"
; ";"
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "renderer"
= "="
new_expression
new "new"
identifier "Renderer"
arguments
( "("
member_expression
this "this"
. "."
property_identifier "scene"
) ")"
; ";"
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "files"
= "="
object
{ "{"
} "}"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "imageCache"
. "."
property_identifier "clear"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "resizeObserver"
optional_chain
?. "?."
property_identifier "disconnect"
arguments
( "("
) ")"
; ";"
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "unmounted"
= "="
true "true"
; ";"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "removeEventListeners"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "scene"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "library"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "laserPathManager"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "onChangeEmitter"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "ShapeCache"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "SnapCache"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
identifier "clearTimeout"
arguments
( "("
identifier "touchTimeout"
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "isSomeElementSelected"
. "."
property_identifier "clearCache"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "selectGroupsForSelectedElements"
. "."
property_identifier "clearCache"
arguments
( "("
) ")"
; ";"
expression_statement
assignment_expression
identifier "touchTimeout"
= "="
number "0"
; ";"
} "}"
public_field_definition (+108 nodes collapsed)
; ";"
comment "/** generally invoked only if fullscreen was invoked program"...
public_field_definition (+65 nodes collapsed)
; ";"
method_definition (+23 nodes collapsed)
method_definition
accessibility_modifier
private "private"
property_identifier "addEventListeners"
formal_parameters
( "("
) ")"
statement_block
{ "{"
comment "// remove first as we can add event listeners multiple times"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "removeEventListeners"
arguments
( "("
) ")"
; ";"
comment "// ---------------------------------------------------------"...
comment "// view+edit mode listeners"
comment "// ---------------------------------------------------------"...
if_statement (+47 nodes collapsed)
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "onRemoveEventListenersEmitter"
. "."
property_identifier "once"
arguments
( "("
call_expression (+31 nodes collapsed)
, ","
call_expression
identifier "addEventListener"
arguments
( "("
identifier "window"
, ","
member_expression
identifier "EVENT"
. "."
property_identifier "MESSAGE"
, ","
member_expression
this "this"
. "."
property_identifier "onWindowMessage"
, ","
false "false"
) ")"
, ","
call_expression
identifier "addEventListener"
arguments
( "("
identifier "document"
, ","
member_expression
identifier "EVENT"
. "."
property_identifier "POINTER_UP"
, ","
member_expression
this "this"
. "."
property_identifier "removePointer"
) ")"
, ","
comment "// #3553"
call_expression
identifier "addEventListener"
arguments
( "("
identifier "document"
, ","
member_expression
identifier "EVENT"
. "."
property_identifier "COPY"
, ","
member_expression
this "this"
. "."
property_identifier "onCopy"
) ")"
, ","
call_expression (+24 nodes collapsed)
, ","
call_expression
identifier "addEventListener"
arguments
( "("
identifier "document"
, ","
member_expression
identifier "EVENT"
. "."
property_identifier "MOUSE_MOVE"
, ","
member_expression
this "this"
. "."
property_identifier "updateCurrentCursorPosition"
, ","
) ")"
, ","
comment "// rerender text elements on font load to fix #637 && #1553"
call_expression (+55 nodes collapsed)
, ","
comment "// Safari-only desktop pinch zoom"
call_expression (+23 nodes collapsed)
, ","
call_expression (+23 nodes collapsed)
, ","
call_expression (+23 nodes collapsed)
, ","
) ")"
; ";"
if_statement
if "if"
parenthesized_expression
( "("
member_expression
member_expression
this "this"
. "."
property_identifier "state"
. "."
property_identifier "viewModeEnabled"
) ")"
statement_block
{ "{"
return_statement
return "return"
; ";"
} "}"
comment "// ---------------------------------------------------------"...
comment "// edit-mode listeners only"
comment "// ---------------------------------------------------------"...
expression_statement (+174 nodes collapsed)
if_statement (+59 nodes collapsed)
} "}"
method_definition (+1378 nodes collapsed)
public_field_definition (+118 nodes collapsed)
; ";"
public_field_definition (+96 nodes collapsed)
; ";"
comment "// Copy/paste"
public_field_definition (+115 nodes collapsed)
; ";"
public_field_definition (+115 nodes collapsed)
; ";"
method_definition
accessibility_modifier
private "private"
static "static"
property_identifier "resetTapTwice"
formal_parameters
( "("
) ")"
statement_block
{ "{"
expression_statement
assignment_expression
identifier "didTapTwice"
= "="
false "false"
; ";"
} "}"
public_field_definition (+220 nodes collapsed)
; ";"
public_field_definition (+106 nodes collapsed)
; ";"
public_field_definition (+1002 nodes collapsed)
; ";"
public_field_definition (+896 nodes collapsed)
; ";"
comment "// TODO rewrite this to paste both text & images at the same"...
comment "// pasted data contains both"
method_definition (+625 nodes collapsed)
method_definition (+755 nodes collapsed)
public_field_definition (+52 nodes collapsed)
; ";"
public_field_definition (+63 nodes collapsed)
; ";"
public_field_definition (+194 nodes collapsed)
; ";"
public_field_definition (+203 nodes collapsed)
; ";"
public_field_definition (+65 nodes collapsed)
; ";"
public_field_definition (+25 nodes collapsed)
; ";"
comment "/**\n * Zooms on canvas viewport center\n */"
public_field_definition (+105 nodes collapsed)
; ";"
public_field_definition (+22 nodes collapsed)
; ";"
public_field_definition (+730 nodes collapsed)
; ";"
public_field_definition (+45 nodes collapsed)
; ";"
comment "/** use when changing scrollX/scrollY/zoom based on user int"...
public_field_definition (+70 nodes collapsed)
; ";"
public_field_definition (+60 nodes collapsed)
; ";"
public_field_definition (+204 nodes collapsed)
; ";"
comment "/** adds supplied files to existing files in the appState */"
public_field_definition (+230 nodes collapsed)
; ";"
public_field_definition (+211 nodes collapsed)
; ";"
public_field_definition (+26 nodes collapsed)
; ";"
comment "/**\n * @returns whether the menu was toggled on or off\n "...
public_field_definition (+148 nodes collapsed)
; ";"
public_field_definition (+54 nodes collapsed)
; ";"
comment "// Input handling"
public_field_definition (+2297 nodes collapsed)
; ";"
public_field_definition (+60 nodes collapsed)
; ";"
public_field_definition (+312 nodes collapsed)
; ";"
comment "// We purposely widen the `tool` type so this helper can be "...
comment "// any tool without having to type check it"
public_field_definition (+86 nodes collapsed)
; ";"
public_field_definition (+523 nodes collapsed)
; ";"
public_field_definition (+41 nodes collapsed)
; ";"
public_field_definition (+32 nodes collapsed)
; ";"
public_field_definition (+24 nodes collapsed)
; ";"
comment "/**\n * returns whether user is making a gesture with >= 2 "...
public_field_definition (+29 nodes collapsed)
; ";"
comment "// fires only on Safari"
public_field_definition (+104 nodes collapsed)
; ";"
comment "// fires only on Safari"
public_field_definition (+155 nodes collapsed)
; ";"
comment "// fires only on Safari"
public_field_definition (+101 nodes collapsed)
; ";"
method_definition (+655 nodes collapsed)
method_definition (+57 nodes collapsed)
method_definition (+95 nodes collapsed)
method_definition (+277 nodes collapsed)
method_definition (+253 nodes collapsed)
public_field_definition (+1005 nodes collapsed)
; ";"
public_field_definition (+732 nodes collapsed)
; ";"
public_field_definition (+201 nodes collapsed)
; ";"
public_field_definition (+463 nodes collapsed)
; ";"
public_field_definition (+102 nodes collapsed)
; ";"
public_field_definition
accessibility_modifier
private "private"
property_identifier "handleCanvasPointerMove"
= "="
arrow_function
formal_parameters
( "("
required_parameter
identifier "event"
type_annotation
: ":"
generic_type
nested_type_identifier
identifier "React"
. "."
type_identifier "PointerEvent"
type_arguments
< "<"
type_identifier "HTMLCanvasElement"
> ">"
, ","
) ")"
=> "=>"
statement_block
{ "{"
expression_statement (+27 nodes collapsed)
if_statement (+60 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "initialScale"
= "="
member_expression
identifier "gesture"
. "."
property_identifier "initialScale"
; ";"
if_statement (+341 nodes collapsed)
if_statement (+29 nodes collapsed)
lexical_declaration (+41 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "isOverScrollBar"
= "="
member_expression
identifier "isPointerOverScrollBars"
. "."
property_identifier "isOverEither"
; ";"
if_statement (+69 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "scenePointer"
= "="
call_expression
identifier "viewportCoordsToSceneCoords"
arguments
( "("
identifier "event"
, ","
member_expression
this "this"
. "."
property_identifier "state"
) ")"
; ";"
lexical_declaration
const "const"
variable_declarator
object_pattern
{ "{"
pair_pattern
property_identifier "x"
: ":"
identifier "scenePointerX"
, ","
pair_pattern
property_identifier "y"
: ":"
identifier "scenePointerY"
} "}"
= "="
identifier "scenePointer"
; ";"
if_statement (+260 nodes collapsed)
if_statement (+175 nodes collapsed)
if_statement (+95 nodes collapsed)
if_statement (+541 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "hasDeselectedButton"
= "="
call_expression
identifier "Boolean"
arguments
( "("
member_expression
identifier "event"
. "."
property_identifier "buttons"
) ")"
; ";"
if_statement (+69 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "elements"
= "="
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "scene"
. "."
property_identifier "getNonDeletedElements"
arguments
( "("
) ")"
; ";"
lexical_declaration (+21 nodes collapsed)
if_statement (+195 nodes collapsed)
lexical_declaration (+24 nodes collapsed)
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "hitLinkElement"
= "="
call_expression
member_expression
this "this"
. "."
property_identifier "getElementLinkAtPosition"
arguments
( "("
identifier "scenePointer"
, ","
identifier "hitElement"
, ","
) ")"
; ";"
if_statement
if "if"
parenthesized_expression
( "("
call_expression
identifier "isEraserActive"
arguments
( "("
member_expression
this "this"
. "."
property_identifier "state"
) ")"
) ")"
statement_block
{ "{"
return_statement
return "return"
; ";"
} "}"
if_statement (+539 nodes collapsed)
} "}"
; ";"
public_field_definition (+727 nodes collapsed)
; ";"
comment "// set touch moving for mobile context menu"
public_field_definition (+32 nodes collapsed)
; ";"
method_definition (+498 nodes collapsed)
public_field_definition
accessibility_modifier
private "private"
property_identifier "handleCanvasPointerDown"
= "="
arrow_function
formal_parameters
( "("
required_parameter
identifier "event"
type_annotation
: ":"
generic_type
nested_type_identifier
identifier "React"
. "."
type_identifier "PointerEvent"
type_arguments
< "<"
type_identifier "HTMLElement"
> ">"
, ","
) ")"
=> "=>"
statement_block
{ "{"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "maybeUnfollowRemoteUser"
arguments
( "("
) ")"
; ";"
comment "// since contextMenu options are potentially evaluated on ea"...
comment "// and an contextMenu action may depend on selection state, "...
comment "// close the contextMenu before we update the selection on p"...
comment "// (e.g. resetting selection)"
if_statement (+32 nodes collapsed)
if_statement (+34 nodes collapsed)
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "updateGestureOnPointerDown"
arguments
( "("
identifier "event"
) ")"
; ";"
comment "// if dragging element is freedraw and another pointerdown e"...
comment "// a second finger is on the screen"
comment "// discard the freedraw element if it is very short because "...
comment "// just a spike, otherwise finalize the freedraw element whe"...
comment "// finger is lifted"
if_statement (+285 nodes collapsed)
comment "// remove any active selection when we start to interact wit"...
comment "// (mainly, we care about removing selection outside the com"...
comment "// would prevent our copy handling otherwise)"
lexical_declaration
const "const"
variable_declarator
identifier "selection"
= "="
call_expression
member_expression
identifier "document"
. "."
property_identifier "getSelection"
arguments
( "("
) ")"
; ";"
if_statement (+23 nodes collapsed)
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "maybeOpenContextMenuAfterPointerDownOnTouchDevices"
arguments
( "("
identifier "event"
) ")"
; ";"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "maybeCleanupAfterMissingPointerUp"
arguments
( "("
identifier "event"
) ")"
; ";"
comment "//fires only once, if pen is detected, penMode is enabled"
comment "//the user can disable this by toggling the penMode button"
if_statement (+65 nodes collapsed)
if_statement (+67 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
identifier "isPanning"
) ")"
statement_block
{ "{"
return_statement
return "return"
; ";"
} "}"
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "lastPointerDownEvent"
= "="
identifier "event"
; ";"
comment "// we must exit before we set `cursorButton` state and `save"...
comment "// else it will send pointer state & laser pointer events in"...
comment "// panning"
if_statement
if "if"
parenthesized_expression
( "("
call_expression
member_expression
this "this"
. "."
property_identifier "handleCanvasPanUsingWheelOrSpaceDrag"
arguments
( "("
identifier "event"
) ")"
) ")"
statement_block
{ "{"
return_statement
return "return"
; ";"
} "}"
expression_statement (+29 nodes collapsed)
expression_statement (+24 nodes collapsed)
comment "// only handle left mouse button or touch"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression any 2:3
binary_expression any 2:3
member_expression
identifier "event"
. "."
property_identifier "button"
!== "!=="
member_expression
identifier "POINTER_BUTTON"
. "."
property_identifier "MAIN"
&& "&&"
binary_expression
member_expression
identifier "event"
. "."
property_identifier "button"
!== "!=="
member_expression
identifier "POINTER_BUTTON"
. "."
property_identifier "TOUCH"
) ")"
statement_block
{ "{"
return_statement
return "return"
; ";"
} "}"
comment "// don't select while panning"
if_statement (+21 nodes collapsed)
comment "// State for the duration of a pointer interaction, which st"...
comment "// pointerDown event, ends with a pointerUp event (or anothe"...
lexical_declaration
const "const"
variable_declarator
identifier "pointerDownState"
= "="
call_expression
member_expression
this "this"
. "."
property_identifier "initialPointerDownState"
arguments
( "("
identifier "event"
) ")"
; ";"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "setState"
arguments
( "("
object
{ "{"
pair
property_identifier "selectedElementsAreBeingDragged"
: ":"
false "false"
, ","
} "}"
) ")"
; ";"
if_statement (+22 nodes collapsed)
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "clearSelectionIfNotUsingSelection"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "updateBindingEnabledOnPointerMove"
arguments
( "("
identifier "event"
) ")"
; ";"
if_statement (+22 nodes collapsed)
lexical_declaration (+81 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
unary_expression
! "!"
identifier "allowOnPointerDown"
) ")"
statement_block
{ "{"
return_statement
return "return"
; ";"
} "}"
if_statement (+586 nodes collapsed)
expression_statement (+24 nodes collapsed)
expression_statement (+25 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "onPointerMove"
= "="
call_expression
member_expression
this "this"
. "."
property_identifier "onPointerMoveFromPointerDownHandler"
arguments
( "("
identifier "pointerDownState"
) ")"
; ";"
lexical_declaration
const "const"
variable_declarator
identifier "onPointerUp"
= "="
call_expression
member_expression
this "this"
. "."
property_identifier "onPointerUpFromPointerDownHandler"
arguments
( "("
identifier "pointerDownState"
) ")"
; ";"
lexical_declaration
const "const"
variable_declarator
identifier "onKeyDown"
= "="
call_expression
member_expression
this "this"
. "."
property_identifier "onKeyDownFromPointerDownHandler"
arguments
( "("
identifier "pointerDownState"
) ")"
; ";"
lexical_declaration
const "const"
variable_declarator
identifier "onKeyUp"
= "="
call_expression
member_expression
this "this"
. "."
property_identifier "onKeyUpFromPointerDownHandler"
arguments
( "("
identifier "pointerDownState"
) ")"
; ";"
expression_statement
assignment_expression
identifier "lastPointerUp"
= "="
identifier "onPointerUp"
; ";"
if_statement (+147 nodes collapsed)
} "}"
; ";"
public_field_definition (+435 nodes collapsed)
; ";"
public_field_definition (+132 nodes collapsed)
; ";"
public_field_definition (+33 nodes collapsed)
; ";"
method_definition
accessibility_modifier
private "private"
property_identifier "maybeCleanupAfterMissingPointerUp"
formal_parameters
( "("
required_parameter
identifier "event"
type_annotation
: ":"
generic_type
nested_type_identifier
identifier "React"
. "."
type_identifier "PointerEvent"
type_arguments
< "<"
type_identifier "HTMLElement"
> ">"
, ","
) ")"
type_annotation
: ":"
predefined_type
void "void"
statement_block
{ "{"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
identifier "lastPointerUp" all 2:1
!== "!=="
null "null"
) ")"
statement_block
{ "{"
comment "// Unfortunately, sometimes we don't get a pointerup after a"...
comment "// this can happen when a contextual menu or alert is trigge"...
comment "// being in a weird state, we clean up on the next pointerdo"...
expression_statement any 1:2
call_expression any 1:3
identifier "lastPointerUp" all 2:1
arguments
( "("
identifier "event"
) ")"
; ";" any 1:2
} "}"
} "}"
comment "// Returns whether the event is a panning"
public_field_definition (+807 nodes collapsed)
; ";"
method_definition (+151 nodes collapsed)
method_definition (+462 nodes collapsed)
comment "// Returns whether the event is a dragging a scrollbar"
method_definition
accessibility_modifier
private "private"
property_identifier "handleDraggingScrollBar"
formal_parameters (+23 nodes collapsed)
type_annotation
: ":"
predefined_type
boolean "boolean"
statement_block
{ "{"
if_statement (+35 nodes collapsed)
expression_statement
assignment_expression
identifier "isDraggingScrollBar"
= "="
true "true"
; ";"
expression_statement
assignment_expression
member_expression
member_expression
identifier "pointerDownState"
. "."
property_identifier "lastCoords"
. "."
property_identifier "x"
= "="
member_expression
identifier "event"
. "."
property_identifier "clientX"
; ";"
expression_statement
assignment_expression
member_expression
member_expression
identifier "pointerDownState"
. "."
property_identifier "lastCoords"
. "."
property_identifier "y"
= "="
member_expression
identifier "event"
. "."
property_identifier "clientY"
; ";"
lexical_declaration (+67 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "onPointerUp"
= "="
call_expression
identifier "withBatchedUpdates"
arguments
( "("
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
statement_block
{ "{"
expression_statement
assignment_expression
identifier "isDraggingScrollBar"
= "="
false "false"
; ";"
expression_statement
call_expression
identifier "setCursorForShape"
arguments
( "("
member_expression
this "this"
. "."
property_identifier "interactiveCanvas"
, ","
member_expression
this "this"
. "."
property_identifier "state"
) ")"
; ";"
expression_statement
assignment_expression
identifier "lastPointerUp"
= "="
null "null"
; ";"
expression_statement (+21 nodes collapsed)
expression_statement (+24 nodes collapsed)
expression_statement
call_expression
member_expression
identifier "window"
. "."
property_identifier "removeEventListener"
arguments
( "("
member_expression
identifier "EVENT"
. "."
property_identifier "POINTER_MOVE"
, ","
identifier "onPointerMove"
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "window"
. "."
property_identifier "removeEventListener"
arguments
( "("
member_expression
identifier "EVENT"
. "."
property_identifier "POINTER_UP"
, ","
identifier "onPointerUp"
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "onPointerMove"
. "."
property_identifier "flush"
arguments
( "("
) ")"
; ";"
} "}"
) ")"
; ";"
expression_statement
assignment_expression
identifier "lastPointerUp"
= "="
identifier "onPointerUp"
; ";"
expression_statement
call_expression
member_expression
identifier "window"
. "."
property_identifier "addEventListener"
arguments
( "("
member_expression
identifier "EVENT"
. "."
property_identifier "POINTER_MOVE"
, ","
identifier "onPointerMove"
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "window"
. "."
property_identifier "addEventListener"
arguments
( "("
member_expression
identifier "EVENT"
. "."
property_identifier "POINTER_UP"
, ","
identifier "onPointerUp"
) ")"
; ";"
return_statement
return "return"
true "true"
; ";"
} "}"
public_field_definition (+88 nodes collapsed)
; ";"
comment "/**\n * @returns whether the pointer event has been complet"...
public_field_definition (+1803 nodes collapsed)
; ";"
method_definition (+46 nodes collapsed)
method_definition (+163 nodes collapsed)
public_field_definition (+304 nodes collapsed)
; ";"
public_field_definition (+444 nodes collapsed)
; ";"
public_field_definition (+267 nodes collapsed)
; ";"
comment "//create rectangle element with youtube top left on nearest "...
public_field_definition (+346 nodes collapsed)
; ";"
public_field_definition (+266 nodes collapsed)
; ";"
public_field_definition (+841 nodes collapsed)
; ";"
method_definition (+101 nodes collapsed)
public_field_definition (+423 nodes collapsed)
; ";"
public_field_definition (+234 nodes collapsed)
; ";"
method_definition (+115 nodes collapsed)
method_definition (+115 nodes collapsed)
method_definition (+86 nodes collapsed)
method_definition (+109 nodes collapsed)
method_definition (+3328 nodes collapsed)
comment "// Returns whether the pointer move happened over either scr"...
method_definition (+222 nodes collapsed)
method_definition
accessibility_modifier
private "private"
property_identifier "onPointerUpFromPointerDownHandler"
formal_parameters
( "("
required_parameter
identifier "pointerDownState"
type_annotation
: ":"
type_identifier "PointerDownState"
, ","
) ")"
type_annotation
: ":"
function_type
formal_parameters
( "("
required_parameter
identifier "event"
type_annotation
: ":"
type_identifier "PointerEvent"
) ")"
=> "=>"
predefined_type
void "void"
statement_block
{ "{"
return_statement
return "return"
call_expression
identifier "withBatchedUpdates"
arguments
( "("
arrow_function
formal_parameters
( "("
required_parameter
identifier "childEvent"
type_annotation
: ":"
type_identifier "PointerEvent"
) ")"
=> "=>"
statement_block
{ "{"
if_statement (+31 nodes collapsed)
lexical_declaration (+24 nodes collapsed)
expression_statement (+115 nodes collapsed)
expression_statement
call_expression
member_expression
identifier "SnapCache"
. "."
property_identifier "setReferenceSnapPoints"
arguments
( "("
null "null"
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "SnapCache"
. "."
property_identifier "setVisibleGaps"
arguments
( "("
null "null"
) ")"
; ";"
expression_statement (+24 nodes collapsed)
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "setState"
arguments
( "("
object
{ "{"
pair
property_identifier "selectedElementsAreBeingDragged"
: ":"
false "false"
, ","
} "}"
) ")"
; ";"
comment "// Handle end of dragging a point of a linear element, might"...
comment "// and sets binding element"
if_statement (+397 nodes collapsed)
expression_statement
assignment_expression
identifier "lastPointerUp"
= "="
null "null"
; ";"
expression_statement (+25 nodes collapsed)
expression_statement (+25 nodes collapsed)
expression_statement (+25 nodes collapsed)
expression_statement (+25 nodes collapsed)
if_statement (+32 nodes collapsed)
expression_statement (+25 nodes collapsed)
if_statement (+214 nodes collapsed)
if_statement (+191 nodes collapsed)
if_statement (+429 nodes collapsed)
if_statement (+100 nodes collapsed)
if_statement (+808 nodes collapsed)
if_statement (+22 nodes collapsed)
if_statement (+66 nodes collapsed)
comment "// handle frame membership for resizing frames and/or select"...
if_statement (+162 nodes collapsed)
comment "// Code below handles selection when element(s) weren't"
comment "// drag or added to selection on pointer down phase."
lexical_declaration
const "const"
variable_declarator
identifier "hitElement"
= "="
member_expression
member_expression
identifier "pointerDownState"
. "."
property_identifier "hit"
. "."
property_identifier "element"
; ";"
if_statement (+102 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
call_expression
identifier "isEraserActive"
arguments
( "("
member_expression
this "this"
. "."
property_identifier "state"
) ")"
) ")"
statement_block
{ "{"
lexical_declaration
const "const"
variable_declarator
identifier "draggedDistance"
= "="
call_expression
identifier "distance2d"
arguments
( "("
member_expression any 2:1
non_null_expression
member_expression any 2:1
this "this" all 2:1
. "." all 2:1
property_identifier "lastPointerDownEvent" all 2:1
! "!"
. "."
property_identifier "clientX"
, ","
member_expression any 2:1
non_null_expression
member_expression any 2:1
this "this" all 2:1
. "." all 2:1
property_identifier "lastPointerDownEvent" all 2:1
! "!"
. "."
property_identifier "clientY"
, ","
member_expression any 2:1
non_null_expression
member_expression any 2:1
this "this" all 4:1
. "." all 4:1
property_identifier "lastPointerUpEvent" all 4:1
! "!"
. "."
property_identifier "clientX"
, ","
member_expression any 2:1
non_null_expression
member_expression any 2:1
this "this" all 4:1
. "." all 4:1
property_identifier "lastPointerUpEvent" all 4:1
! "!"
. "."
property_identifier "clientY"
, ","
) ")"
; ";"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
identifier "draggedDistance"
=== "==="
number "0"
) ")"
statement_block
{ "{"
lexical_declaration
const "const"
variable_declarator
identifier "scenePointer"
= "="
call_expression
identifier "viewportCoordsToSceneCoords"
arguments
( "("
object
{ "{"
pair
property_identifier "clientX"
: ":"
member_expression any 2:1
non_null_expression
member_expression any 2:1
this "this" all 4:1
. "." all 4:1
property_identifier "lastPointerUpEvent" all 4:1
! "!"
. "."
property_identifier "clientX"
, ","
pair
property_identifier "clientY"
: ":"
member_expression any 2:1
non_null_expression
member_expression any 2:1
this "this" all 4:1
. "." all 4:1
property_identifier "lastPointerUpEvent" all 4:1
! "!"
. "."
property_identifier "clientY"
, ","
} "}"
, ","
member_expression
this "this"
. "."
property_identifier "state"
, ","
) ")"
; ";"
lexical_declaration (+24 nodes collapsed)
expression_statement (+50 nodes collapsed)
} "}"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "eraseElements"
arguments
( "("
identifier "pointerDownState"
) ")"
; ";"
return_statement
return "return"
; ";"
} "}"
else_clause (+36 nodes collapsed)
if_statement (+993 nodes collapsed)
if_statement (+177 nodes collapsed)
if_statement (+126 nodes collapsed)
if_statement (+54 nodes collapsed)
if_statement (+59 nodes collapsed)
if_statement (+34 nodes collapsed)
if_statement (+116 nodes collapsed)
if_statement (+106 nodes collapsed)
} "}"
) ")"
; ";"
} "}"
public_field_definition (+287 nodes collapsed)
; ";"
public_field_definition (+257 nodes collapsed)
; ";"
public_field_definition (+880 nodes collapsed)
; ";"
comment "/**\n * inserts image into elements array and rerenders\n "...
public_field_definition (+206 nodes collapsed)
; ";"
public_field_definition (+311 nodes collapsed)
; ";"
public_field_definition (+477 nodes collapsed)
; ";"
public_field_definition (+438 nodes collapsed)
; ";"
comment "/** updates image cache, refreshing updated elements and/or "...
public_field_definition (+263 nodes collapsed)
; ";"
comment "/** adds new images to imageCache and re-renders if needed *"...
public_field_definition (+159 nodes collapsed)
; ";"
comment "/** generally you should use `addNewImagesToImageCache()` di"...
public_field_definition (+30 nodes collapsed)
; ";"
public_field_definition (+74 nodes collapsed)
; ";"
public_field_definition (+87 nodes collapsed)
; ";"
public_field_definition (+205 nodes collapsed)
; ";"
method_definition (+72 nodes collapsed)
method_definition (+155 nodes collapsed)
public_field_definition (+193 nodes collapsed)
; ";"
public_field_definition (+737 nodes collapsed)
; ";"
public_field_definition (+393 nodes collapsed)
; ";"
public_field_definition (+536 nodes collapsed)
; ";"
public_field_definition (+699 nodes collapsed)
; ";"
public_field_definition (+856 nodes collapsed)
; ";"
public_field_definition (+255 nodes collapsed)
; ";"
public_field_definition (+448 nodes collapsed)
; ";"
method_definition (+222 nodes collapsed)
public_field_definition (+207 nodes collapsed)
; ";"
public_field_definition (+51 nodes collapsed)
; ";"
public_field_definition (+206 nodes collapsed)
; ";"
public_field_definition (+36 nodes collapsed)
; ";"
method_definition (+111 nodes collapsed)
method_definition (+71 nodes collapsed)
} "}"
comment "// ---------------------------------------------------------"...
comment "// TEST HOOKS"
comment "// ---------------------------------------------------------"...
ambient_declaration (+81 nodes collapsed)
if_statement (+160 nodes collapsed)
export_statement
export "export"
default "default"
identifier "App"
; ";"

After

program
import_statement
import "import"
import_clause
identifier "React"
, ","
named_imports
{ "{"
import_specifier
identifier "useContext"
} "}"
from "from"
string
" "\""
string_fragment "react"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "flushSync"
} "}"
from "from"
string
" "\""
string_fragment "react-dom"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "RoughCanvas"
} "}"
from "from"
string
" "\""
string_fragment "roughjs/bin/canvas"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "rough"
from "from"
string
" "\""
string_fragment "roughjs/bin/rough"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "clsx"
from "from"
string
" "\""
string_fragment "clsx"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "nanoid"
} "}"
from "from"
string
" "\""
string_fragment "nanoid"
" "\""
; ";"
import_statement (+99 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "createRedoAction"
, ","
import_specifier
identifier "createUndoAction"
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionHistory"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ActionManager"
} "}"
from "from"
string
" "\""
string_fragment "../actions/manager"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actions"
} "}"
from "from"
string
" "\""
string_fragment "../actions/register"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "Action"
, ","
import_specifier
identifier "ActionResult"
} "}"
from "from"
string
" "\""
string_fragment "../actions/types"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "trackEvent"
} "}"
from "from"
string
" "\""
string_fragment "../analytics"
" "\""
; ";"
import_statement (+21 nodes collapsed)
import_statement (+21 nodes collapsed)
import_statement (+126 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ExportedElements"
, ","
import_specifier
identifier "exportCanvas"
, ","
import_specifier
identifier "loadFromBlob"
} "}"
from "from"
string
" "\""
string_fragment "../data"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "Library"
, ","
named_imports
{ "{"
import_specifier
identifier "distributeLibraryItemsOnSquareGrid"
} "}"
from "from"
string
" "\""
string_fragment "../data/library"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "restore"
, ","
import_specifier
identifier "restoreElements"
} "}"
from "from"
string
" "\""
string_fragment "../data/restore"
" "\""
; ";"
import_statement (+87 nodes collapsed)
import_statement (+48 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "LinearElementEditor"
} "}"
from "from"
string
" "\""
string_fragment "../element/linearElementEditor"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "mutateElement"
, ","
import_specifier
identifier "newElementWith"
} "}"
from "from"
string
" "\""
string_fragment "../element/mutateElement"
" "\""
; ";"
import_statement (+33 nodes collapsed)
import_statement (+60 nodes collapsed)
import_statement (+63 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "getCenter"
, ","
import_specifier
identifier "getDistance"
} "}"
from "from"
string
" "\""
string_fragment "../gesture"
" "\""
; ";"
import_statement (+33 nodes collapsed)
import_statement
import "import"
import_clause
identifier "History"
from "from"
string
" "\""
string_fragment "../history"
" "\""
; ";"
import_statement (+26 nodes collapsed)
import_statement (+30 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "isElementInViewport"
} "}"
from "from"
string
" "\""
string_fragment "../element/sizeHelpers"
" "\""
; ";"
import_statement (+24 nodes collapsed)
import_statement (+36 nodes collapsed)
import_statement
import "import"
import_clause
identifier "Scene"
from "from"
string
" "\""
string_fragment "../scene/Scene"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "RenderInteractiveSceneCallback"
, ","
import_specifier
identifier "ScrollBars"
} "}"
from "from"
string
" "\""
string_fragment "../scene/types"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "getStateForZoom"
} "}"
from "from"
string
" "\""
string_fragment "../scene/zoom"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "findShapeByKey"
} "}"
from "from"
string
" "\""
string_fragment "../shapes"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "AppClassProperties"
, ","
import_specifier
identifier "AppProps"
, ","
import_specifier
identifier "AppState"
, ","
import_specifier
identifier "BinaryFileData"
, ","
import_specifier
identifier "DataURL"
, ","
import_specifier
identifier "ExcalidrawImperativeAPI"
, ","
import_specifier
identifier "BinaryFiles"
, ","
import_specifier
identifier "Gesture"
, ","
import_specifier
identifier "GestureEvent"
, ","
import_specifier
identifier "LibraryItems"
, ","
import_specifier
identifier "PointerDownState"
, ","
import_specifier
identifier "SceneData"
, ","
import_specifier
identifier "Device"
, ","
import_specifier
identifier "FrameNameBoundsCache"
, ","
import_specifier
identifier "SidebarName"
, ","
import_specifier
identifier "SidebarTabName"
, ","
import_specifier
identifier "KeyboardModifiersObject"
, ","
import_specifier
identifier "CollaboratorPointer"
, ","
import_specifier
identifier "ToolType"
, ","
import_specifier
identifier "OnUserFollowedPayload"
, ","
import_specifier
identifier "UnsubscribeCallback"
, ","
} "}"
from "from"
string
" "\""
string_fragment "../types"
" "\""
; ";"
import_statement (+81 nodes collapsed)
import_statement (+24 nodes collapsed)
import_statement (+21 nodes collapsed)
import_statement
import "import"
import_clause
identifier "LayerUI"
from "from"
string
" "\""
string_fragment "./LayerUI"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "Toast"
} "}"
from "from"
string
" "\""
string_fragment "./Toast"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actionToggleViewMode"
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionToggleViewMode"
" "\""
; ";"
import_statement (+48 nodes collapsed)
import_statement (+26 nodes collapsed)
import_statement
import "import"
import_clause
identifier "throttle"
from "from"
string
" "\""
string_fragment "lodash.throttle"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "fileOpen"
, ","
import_specifier
identifier "FileSystemHandle"
} "}"
from "from"
string
" "\""
string_fragment "../data/filesystem"
" "\""
; ";"
import_statement (+45 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "isHittingElementNotConsideringBoundingBox"
} "}"
from "from"
string
" "\""
string_fragment "../element/collision"
" "\""
; ";"
import_statement (+27 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "isLocalLink"
, ","
import_specifier
identifier "normalizeLink"
, ","
import_specifier
identifier "toValidURL"
} "}"
from "from"
string
" "\""
string_fragment "../data/url"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "shouldShowBoundingBox"
} "}"
from "from"
string
" "\""
string_fragment "../element/transformHandles"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actionUnlockAllElements"
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionElementLock"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "Fonts"
} "}"
from "from"
string
" "\""
string_fragment "../scene/Fonts"
" "\""
; ";"
import_statement (+51 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "excludeElementsInFramesFromSelection"
, ","
import_specifier
identifier "makeNextSelectedElementIds"
, ","
} "}"
from "from"
string
" "\""
string_fragment "../scene/selection"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actionPaste"
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionClipboard"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actionRemoveAllElementsFromFrame"
, ","
import_specifier
identifier "actionSelectAllElementsInFrame"
, ","
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionFrame"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actionToggleHandTool"
, ","
import_specifier
identifier "zoomToFit"
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionCanvas"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "jotaiStore"
} "}"
from "from"
string
" "\""
string_fragment "../jotai"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "activeConfirmDialogAtom"
} "}"
from "from"
string
" "\""
string_fragment "./ActiveConfirmDialog"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ImageSceneDataError"
} "}"
from "from"
string
" "\""
string_fragment "../errors"
" "\""
; ";"
import_statement (+39 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "actionWrapTextInContainer"
} "}"
from "from"
string
" "\""
string_fragment "../actions/actionBoundText"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "BraveMeasureTextError"
from "from"
string
" "\""
string_fragment "./BraveMeasureTextError"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "activeEyeDropperAtom"
} "}"
from "from"
string
" "\""
string_fragment "./EyeDropper"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ExcalidrawElementSkeleton"
, ","
import_specifier
identifier "convertToExcalidrawElements"
, ","
} "}"
from "from"
string
" "\""
string_fragment "../data/transform"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ValueOf"
} "}"
from "from"
string
" "\""
string_fragment "../utility-types"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "isSidebarDockedAtom"
} "}"
from "from"
string
" "\""
string_fragment "./Sidebar/Sidebar"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "StaticCanvas"
, ","
import_specifier
identifier "InteractiveCanvas"
} "}"
from "from"
string
" "\""
string_fragment "./canvases"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "Renderer"
} "}"
from "from"
string
" "\""
string_fragment "../scene/Renderer"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ShapeCache"
} "}"
from "from"
string
" "\""
string_fragment "../scene/ShapeCache"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "LaserToolOverlay"
} "}"
from "from"
string
" "\""
string_fragment "./LaserTool/LaserTool"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "LaserPathManager"
} "}"
from "from"
string
" "\""
string_fragment "./LaserTool/LaserPathManager"
" "\""
; ";"
import_statement (+24 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "Emitter"
} "}"
from "from"
string
" "\""
string_fragment "../emitter"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ElementCanvasButtons"
} "}"
from "from"
string
" "\""
string_fragment "../element/ElementCanvasButtons"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "MagicCacheData"
, ","
import_specifier
identifier "diagramToHTML"
} "}"
from "from"
string
" "\""
string_fragment "../data/magic"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "elementsOverlappingBBox"
, ","
import_specifier
identifier "exportToBlob"
} "}"
from "from"
string
" "\""
string_fragment "../../utils/export"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "COLOR_PALETTE"
} "}"
from "from"
string
" "\""
string_fragment "../colors"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ElementCanvasButton"
} "}"
from "from"
string
" "\""
string_fragment "./MagicButton"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "MagicIcon"
, ","
import_specifier
identifier "copyIcon"
, ","
import_specifier
identifier "fullscreenIcon"
} "}"
from "from"
string
" "\""
string_fragment "./icons"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "EditorLocalStorage"
} "}"
from "from"
string
" "\""
string_fragment "../data/EditorLocalStorage"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "FollowMode"
from "from"
string
" "\""
string_fragment "./FollowMode/FollowMode"
" "\""
; ";"
lexical_declaration (+21 nodes collapsed)
lexical_declaration (+21 nodes collapsed)
lexical_declaration (+48 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "DeviceContext"
= "="
call_expression
member_expression
identifier "React"
. "."
property_identifier "createContext"
type_arguments
< "<"
type_identifier "Device"
> ">"
arguments
( "("
identifier "deviceContextInitialValue"
) ")"
; ";"
expression_statement
assignment_expression
member_expression
identifier "DeviceContext"
. "."
property_identifier "displayName"
= "="
string
" "\""
string_fragment "DeviceContext"
" "\""
; ";"
export_statement (+55 nodes collapsed)
expression_statement
assignment_expression
member_expression
identifier "ExcalidrawContainerContext"
. "."
property_identifier "displayName"
= "="
string
" "\""
string_fragment "ExcalidrawContainerContext"
" "\""
; ";"
lexical_declaration (+26 nodes collapsed)
expression_statement
assignment_expression
member_expression
identifier "ExcalidrawElementsContext"
. "."
property_identifier "displayName"
= "="
string
" "\""
string_fragment "ExcalidrawElementsContext"
" "\""
; ";"
lexical_declaration (+49 nodes collapsed)
expression_statement
assignment_expression
member_expression
identifier "ExcalidrawAppStateContext"
. "."
property_identifier "displayName"
= "="
string
" "\""
string_fragment "ExcalidrawAppStateContext"
" "\""
; ";"
lexical_declaration (+59 nodes collapsed)
expression_statement
assignment_expression
member_expression
identifier "ExcalidrawSetAppStateContext"
. "."
property_identifier "displayName"
= "="
string
" "\""
string_fragment "ExcalidrawSetAppStateContext"
" "\""
; ";"
lexical_declaration (+22 nodes collapsed)
expression_statement
assignment_expression
member_expression
identifier "ExcalidrawActionManagerContext"
. "."
property_identifier "displayName"
= "="
string
" "\""
string_fragment "ExcalidrawActionManagerContext"
" "\""
; ";"
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useApp"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "AppContext"
) ")"
; ";"
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useAppProps"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "AppPropsContext"
) ")"
; ";"
export_statement (+23 nodes collapsed)
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useExcalidrawContainer"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "ExcalidrawContainerContext"
) ")"
; ";"
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useExcalidrawElements"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "ExcalidrawElementsContext"
) ")"
; ";"
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useExcalidrawAppState"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "ExcalidrawAppStateContext"
) ")"
; ";"
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useExcalidrawSetAppState"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "ExcalidrawSetAppStateContext"
) ")"
; ";"
export_statement
export "export"
lexical_declaration
const "const"
variable_declarator
identifier "useExcalidrawActionManager"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
call_expression
identifier "useContext"
arguments
( "("
identifier "ExcalidrawActionManagerContext"
) ")"
; ";"
lexical_declaration (+24 nodes collapsed)
lexical_declaration
let "let"
variable_declarator
identifier "didTapTwice"
type_annotation
: ":"
predefined_type
boolean "boolean"
= "="
false "false"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "tappedTwiceTimer"
= "="
number "0"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "isHoldingSpace"
type_annotation
: ":"
predefined_type
boolean "boolean"
= "="
false "false"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "isPanning"
type_annotation
: ":"
predefined_type
boolean "boolean"
= "="
false "false"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "isDraggingScrollBar"
type_annotation
: ":"
predefined_type
boolean "boolean"
= "="
false "false"
; ";"
lexical_declaration (+21 nodes collapsed)
lexical_declaration
let "let"
variable_declarator
identifier "touchTimeout"
= "="
number "0"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "invalidateContextMenu"
= "="
false "false"
; ";"
comment "/**\n * Map of youtube embed video states\n */"
lexical_declaration (+33 nodes collapsed)
lexical_declaration
let "let"
variable_declarator
identifier "IS_PLAIN_PASTE"
= "="
false "false"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "IS_PLAIN_PASTE_TIMER"
= "="
number "0"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "PLAIN_PASTE_TOAST_SHOWN"
= "="
false "false"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "lastPointerUp"
type_annotation
: ":"
union_type
parenthesized_type
( "("
function_type
formal_parameters
( "("
) ")"
=> "=>"
predefined_type
void "void"
) ")"
| "|"
literal_type
null "null"
= "="
null "null"
; ";"
lexical_declaration (+37 nodes collapsed)
class_declaration
class "class"
type_identifier "App"
class_heritage
extends_clause
extends "extends"
member_expression
identifier "React"
. "."
property_identifier "Component"
type_arguments
< "<"
type_identifier "AppProps"
, ","
type_identifier "AppState"
> ">"
class_body
{ "{"
public_field_definition
property_identifier "canvas"
type_annotation
: ":"
lookup_type
type_identifier "AppClassProperties"
[ "["
literal_type
string
" "\""
string_fragment "canvas"
" "\""
] "]"
; ";"
public_field_definition
property_identifier "interactiveCanvas"
type_annotation
: ":"
lookup_type
type_identifier "AppClassProperties"
[ "["
literal_type
string
" "\""
string_fragment "interactiveCanvas"
" "\""
] "]"
= "="
null "null"
; ";"
public_field_definition
property_identifier "rc"
type_annotation
: ":"
type_identifier "RoughCanvas"
; ";"
public_field_definition
property_identifier "unmounted"
type_annotation
: ":"
predefined_type
boolean "boolean"
= "="
false "false"
; ";"
public_field_definition
property_identifier "actionManager"
type_annotation
: ":"
type_identifier "ActionManager"
; ";"
public_field_definition
property_identifier "device"
type_annotation
: ":"
type_identifier "Device"
= "="
identifier "deviceContextInitialValue"
; ";"
public_field_definition
accessibility_modifier
private "private"
property_identifier "excalidrawContainerRef"
= "="
call_expression
member_expression
identifier "React"
. "."
property_identifier "createRef"
type_arguments
< "<"
type_identifier "HTMLDivElement"
> ">"
arguments
( "("
) ")"
; ";"
public_field_definition
accessibility_modifier
public "public"
property_identifier "scene"
type_annotation
: ":"
type_identifier "Scene"
; ";"
public_field_definition
accessibility_modifier
public "public"
property_identifier "renderer"
type_annotation
: ":"
type_identifier "Renderer"
; ";"
public_field_definition
accessibility_modifier
private "private"
property_identifier "fonts"
type_annotation
: ":"
type_identifier "Fonts"
; ";"
public_field_definition
accessibility_modifier
private "private"
property_identifier "resizeObserver"
type_annotation
: ":"
union_type
type_identifier "ResizeObserver"
| "|"
literal_type
undefined "undefined"
; ";"
public_field_definition
accessibility_modifier
private "private"
property_identifier "nearestScrollableContainer"
type_annotation
: ":"
union_type
union_type
type_identifier "HTMLElement"
| "|"
type_identifier "Document"
| "|"
literal_type
undefined "undefined"
; ";"
public_field_definition
accessibility_modifier
public "public"
property_identifier "library"
type_annotation
: ":"
lookup_type
type_identifier "AppClassProperties"
[ "["
literal_type
string
" "\""
string_fragment "library"
" "\""
] "]"
; ";"
public_field_definition
accessibility_modifier
public "public"
property_identifier "libraryItemsFromStorage"
type_annotation
: ":"
union_type
type_identifier "LibraryItems"
| "|"
literal_type
undefined "undefined"
; ";"
public_field_definition
accessibility_modifier
public "public"
property_identifier "id"
type_annotation
: ":"
predefined_type
string "string"
; ";"
public_field_definition
accessibility_modifier
private "private"
property_identifier "history"
type_annotation
: ":"
type_identifier "History"
; ";"
public_field_definition (+26 nodes collapsed)
; ";"
public_field_definition
accessibility_modifier
public "public"
property_identifier "files"
type_annotation
: ":"
type_identifier "BinaryFiles"
= "="
object
{ "{"
} "}"
; ";"
public_field_definition (+22 nodes collapsed)
; ";"
public_field_definition (+25 nodes collapsed)
; ";"
public_field_definition
property_identifier "hitLinkElement"
? "?"
type_annotation
: ":"
type_identifier "NonDeletedExcalidrawElement"
; ";"
public_field_definition
property_identifier "lastPointerDownEvent"
type_annotation
: ":"
union_type
generic_type
nested_type_identifier
identifier "React"
. "."
type_identifier "PointerEvent"
type_arguments
< "<"
type_identifier "HTMLElement"
> ">"
| "|"
literal_type
null "null"
= "="
null "null"
; ";"
public_field_definition (+22 nodes collapsed)
; ";"
public_field_definition
property_identifier "lastPointerMoveEvent"
type_annotation
: ":"
union_type
type_identifier "PointerEvent"
| "|"
literal_type
null "null"
= "="
null "null"
; ";"
public_field_definition
property_identifier "lastViewportPosition"
= "="
object
{ "{"
pair
property_identifier "x"
: ":"
number "0"
, ","
pair
property_identifier "y"
: ":"
number "0"
} "}"
; ";"
public_field_definition
property_identifier "laserPathManager"
type_annotation
: ":"
type_identifier "LaserPathManager"
= "="
new_expression
new "new"
identifier "LaserPathManager"
arguments
( "("
this "this"
) ")"
; ";"
public_field_definition (+38 nodes collapsed)
; ";"
public_field_definition (+49 nodes collapsed)
; ";"
public_field_definition (+41 nodes collapsed)
; ";"
public_field_definition
property_identifier "onUserFollowEmitter"
= "="
new_expression
new "new"
identifier "Emitter"
type_arguments
< "<"
tuple_type
[ "["
required_parameter
identifier "payload"
type_annotation
: ":"
type_identifier "OnUserFollowedPayload"
] "]"
> ">"
arguments
( "("
) ")"
; ";"
public_field_definition (+42 nodes collapsed)
; ";"
public_field_definition
property_identifier "missingPointerEventCleanupEmitter"
= "="
new_expression
new "new"
identifier "Emitter"
type_arguments
< "<"
tuple_type
[ "["
required_parameter
identifier "event"
type_annotation
: ":"
union_type
type_identifier "PointerEvent"
| "|"
literal_type
null "null"
] "]"
> ">"
arguments
( "("
) ")"
; ";"
public_field_definition
property_identifier "onRemoveEventListenersEmitter"
= "="
new_expression
new "new"
identifier "Emitter"
type_arguments
< "<"
tuple_type
[ "["
] "]"
> ">"
arguments
( "("
) ")"
; ";"
method_definition (+807 nodes collapsed)
method_definition (+431 nodes collapsed)
method_definition (+54 nodes collapsed)
method_definition (+41 nodes collapsed)
method_definition (+504 nodes collapsed)
method_definition (+223 nodes collapsed)
public_field_definition (+289 nodes collapsed)
; ";"
method_definition (+1317 nodes collapsed)
public_field_definition (+39 nodes collapsed)
; ";"
public_field_definition (+329 nodes collapsed)
; ";"
public_field_definition (+1122 nodes collapsed)
; ";"
method_definition (+2155 nodes collapsed)
public_field_definition (+41 nodes collapsed)
; ";"
public_field_definition (+27 nodes collapsed)
; ";"
public_field_definition (+27 nodes collapsed)
; ";"
public_field_definition (+51 nodes collapsed)
; ";"
public_field_definition (+233 nodes collapsed)
; ";"
public_field_definition (+25 nodes collapsed)
; ";"
public_field_definition (+144 nodes collapsed)
; ";"
method_definition (+106 nodes collapsed)
method_definition (+881 nodes collapsed)
method_definition (+89 nodes collapsed)
public_field_definition (+26 nodes collapsed)
; ";"
public_field_definition (+24 nodes collapsed)
; ";"
public_field_definition (+96 nodes collapsed)
; ";"
public_field_definition (+228 nodes collapsed)
; ";"
public_field_definition (+532 nodes collapsed)
; ";"
public_field_definition (+392 nodes collapsed)
; ";"
public_field_definition (+737 nodes collapsed)
; ";"
comment "// Lifecycle"
public_field_definition (+41 nodes collapsed)
; ";"
public_field_definition (+23 nodes collapsed)
; ";"
public_field_definition (+28 nodes collapsed)
; ";"
public_field_definition (+26 nodes collapsed)
; ";"
comment "/**\n * Resets scene & history.\n * ! Do not use to clear "...
public_field_definition (+118 nodes collapsed)
; ";"
public_field_definition (+711 nodes collapsed)
; ";"
public_field_definition (+51 nodes collapsed)
; ";"
public_field_definition (+155 nodes collapsed)
; ";"
public_field_definition (+192 nodes collapsed)
; ";"
method_definition (+531 nodes collapsed)
method_definition
accessibility_modifier
public "public"
property_identifier "componentWillUnmount"
formal_parameters
( "("
) ")"
statement_block
{ "{"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "renderer"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "scene"
= "="
new_expression
new "new"
identifier "Scene"
arguments
( "("
) ")"
; ";"
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "renderer"
= "="
new_expression
new "new"
identifier "Renderer"
arguments
( "("
member_expression
this "this"
. "."
property_identifier "scene"
) ")"
; ";"
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "files"
= "="
object
{ "{"
} "}"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "imageCache"
. "."
property_identifier "clear"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "resizeObserver"
optional_chain
?. "?."
property_identifier "disconnect"
arguments
( "("
) ")"
; ";"
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "unmounted"
= "="
true "true"
; ";"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "removeEventListeners"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "scene"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "library"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "laserPathManager"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "onChangeEmitter"
. "."
property_identifier "clear"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "ShapeCache"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "SnapCache"
. "."
property_identifier "destroy"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
identifier "clearTimeout"
arguments
( "("
identifier "touchTimeout"
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "isSomeElementSelected"
. "."
property_identifier "clearCache"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "selectGroupsForSelectedElements"
. "."
property_identifier "clearCache"
arguments
( "("
) ")"
; ";"
expression_statement
assignment_expression
identifier "touchTimeout"
= "="
number "0"
; ";"
} "}"
public_field_definition (+108 nodes collapsed)
; ";"
comment "/** generally invoked only if fullscreen was invoked program"...
public_field_definition (+65 nodes collapsed)
; ";"
method_definition (+23 nodes collapsed)
method_definition
accessibility_modifier
private "private"
property_identifier "addEventListeners"
formal_parameters
( "("
) ")"
statement_block
{ "{"
comment "// remove first as we can add event listeners multiple times"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "removeEventListeners"
arguments
( "("
) ")"
; ";"
comment "// ---------------------------------------------------------"...
comment "// view+edit mode listeners"
comment "// ---------------------------------------------------------"...
if_statement (+47 nodes collapsed)
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "onRemoveEventListenersEmitter"
. "."
property_identifier "once"
arguments
( "("
call_expression (+31 nodes collapsed)
, ","
call_expression
identifier "addEventListener"
arguments
( "("
identifier "window"
, ","
member_expression
identifier "EVENT"
. "."
property_identifier "MESSAGE"
, ","
member_expression
this "this"
. "."
property_identifier "onWindowMessage"
, ","
false "false"
) ")"
, ","
call_expression
identifier "addEventListener"
arguments
( "("
identifier "document"
, ","
member_expression
identifier "EVENT"
. "."
property_identifier "POINTER_UP"
, ","
member_expression
this "this"
. "."
property_identifier "removePointer"
) ")"
, ","
comment "// #3553"
call_expression
identifier "addEventListener"
arguments
( "("
identifier "document"
, ","
member_expression
identifier "EVENT"
. "."
property_identifier "COPY"
, ","
member_expression
this "this"
. "."
property_identifier "onCopy"
) ")"
, ","
call_expression (+24 nodes collapsed)
, ","
call_expression
identifier "addEventListener"
arguments
( "("
identifier "document"
, ","
member_expression
identifier "EVENT"
. "."
property_identifier "MOUSE_MOVE"
, ","
member_expression
this "this"
. "."
property_identifier "updateCurrentCursorPosition"
, ","
) ")"
, ","
comment "// rerender text elements on font load to fix #637 && #1553"
call_expression (+55 nodes collapsed)
, ","
comment "// Safari-only desktop pinch zoom"
call_expression (+23 nodes collapsed)
, ","
call_expression (+23 nodes collapsed)
, ","
call_expression (+23 nodes collapsed)
, ","
call_expression
identifier "addEventListener"
arguments
( "("
identifier "window"
, ","
member_expression
identifier "EVENT"
. "."
property_identifier "FOCUS"
, ","
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
statement_block
{ "{"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "maybeCleanupAfterMissingPointerUp"
arguments
( "("
null "null"
) ")"
; ";"
} "}"
) ")"
, ","
) ")"
; ";"
if_statement
if "if"
parenthesized_expression
( "("
member_expression
member_expression
this "this"
. "."
property_identifier "state"
. "."
property_identifier "viewModeEnabled"
) ")"
statement_block
{ "{"
return_statement
return "return"
; ";"
} "}"
comment "// ---------------------------------------------------------"...
comment "// edit-mode listeners only"
comment "// ---------------------------------------------------------"...
expression_statement (+174 nodes collapsed)
if_statement (+59 nodes collapsed)
} "}"
method_definition (+1378 nodes collapsed)
public_field_definition (+118 nodes collapsed)
; ";"
public_field_definition (+96 nodes collapsed)
; ";"
comment "// Copy/paste"
public_field_definition (+115 nodes collapsed)
; ";"
public_field_definition (+115 nodes collapsed)
; ";"
method_definition
accessibility_modifier
private "private"
static "static"
property_identifier "resetTapTwice"
formal_parameters
( "("
) ")"
statement_block
{ "{"
expression_statement
assignment_expression
identifier "didTapTwice"
= "="
false "false"
; ";"
} "}"
public_field_definition (+220 nodes collapsed)
; ";"
public_field_definition (+106 nodes collapsed)
; ";"
public_field_definition (+1002 nodes collapsed)
; ";"
public_field_definition (+896 nodes collapsed)
; ";"
comment "// TODO rewrite this to paste both text & images at the same"...
comment "// pasted data contains both"
method_definition (+625 nodes collapsed)
method_definition (+755 nodes collapsed)
public_field_definition (+52 nodes collapsed)
; ";"
public_field_definition (+63 nodes collapsed)
; ";"
public_field_definition (+194 nodes collapsed)
; ";"
public_field_definition (+203 nodes collapsed)
; ";"
public_field_definition (+65 nodes collapsed)
; ";"
public_field_definition (+25 nodes collapsed)
; ";"
comment "/**\n * Zooms on canvas viewport center\n */"
public_field_definition (+105 nodes collapsed)
; ";"
public_field_definition (+22 nodes collapsed)
; ";"
public_field_definition (+730 nodes collapsed)
; ";"
public_field_definition (+45 nodes collapsed)
; ";"
comment "/** use when changing scrollX/scrollY/zoom based on user int"...
public_field_definition (+70 nodes collapsed)
; ";"
public_field_definition (+60 nodes collapsed)
; ";"
public_field_definition (+204 nodes collapsed)
; ";"
comment "/** adds supplied files to existing files in the appState */"
public_field_definition (+230 nodes collapsed)
; ";"
public_field_definition (+211 nodes collapsed)
; ";"
public_field_definition (+26 nodes collapsed)
; ";"
comment "/**\n * @returns whether the menu was toggled on or off\n "...
public_field_definition (+148 nodes collapsed)
; ";"
public_field_definition (+54 nodes collapsed)
; ";"
comment "// Input handling"
public_field_definition (+2297 nodes collapsed)
; ";"
public_field_definition (+60 nodes collapsed)
; ";"
public_field_definition (+312 nodes collapsed)
; ";"
comment "// We purposely widen the `tool` type so this helper can be "...
comment "// any tool without having to type check it"
public_field_definition (+86 nodes collapsed)
; ";"
public_field_definition (+523 nodes collapsed)
; ";"
public_field_definition (+41 nodes collapsed)
; ";"
public_field_definition (+32 nodes collapsed)
; ";"
public_field_definition (+24 nodes collapsed)
; ";"
comment "/**\n * returns whether user is making a gesture with >= 2 "...
public_field_definition (+29 nodes collapsed)
; ";"
comment "// fires only on Safari"
public_field_definition (+104 nodes collapsed)
; ";"
comment "// fires only on Safari"
public_field_definition (+155 nodes collapsed)
; ";"
comment "// fires only on Safari"
public_field_definition (+101 nodes collapsed)
; ";"
method_definition (+655 nodes collapsed)
method_definition (+57 nodes collapsed)
method_definition (+95 nodes collapsed)
method_definition (+277 nodes collapsed)
method_definition (+253 nodes collapsed)
public_field_definition (+1005 nodes collapsed)
; ";"
public_field_definition (+732 nodes collapsed)
; ";"
public_field_definition (+201 nodes collapsed)
; ";"
public_field_definition (+463 nodes collapsed)
; ";"
public_field_definition (+102 nodes collapsed)
; ";"
public_field_definition
accessibility_modifier
private "private"
property_identifier "handleCanvasPointerMove"
= "="
arrow_function
formal_parameters
( "("
required_parameter
identifier "event"
type_annotation
: ":"
generic_type
nested_type_identifier
identifier "React"
. "."
type_identifier "PointerEvent"
type_arguments
< "<"
type_identifier "HTMLCanvasElement"
> ">"
, ","
) ")"
=> "=>"
statement_block
{ "{"
expression_statement (+27 nodes collapsed)
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "lastPointerMoveEvent"
= "="
member_expression
identifier "event"
. "."
property_identifier "nativeEvent"
; ";"
if_statement (+60 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "initialScale"
= "="
member_expression
identifier "gesture"
. "."
property_identifier "initialScale"
; ";"
if_statement (+341 nodes collapsed)
if_statement (+29 nodes collapsed)
lexical_declaration (+41 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "isOverScrollBar"
= "="
member_expression
identifier "isPointerOverScrollBars"
. "."
property_identifier "isOverEither"
; ";"
if_statement (+69 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "scenePointer"
= "="
call_expression
identifier "viewportCoordsToSceneCoords"
arguments
( "("
identifier "event"
, ","
member_expression
this "this"
. "."
property_identifier "state"
) ")"
; ";"
lexical_declaration
const "const"
variable_declarator
object_pattern
{ "{"
pair_pattern
property_identifier "x"
: ":"
identifier "scenePointerX"
, ","
pair_pattern
property_identifier "y"
: ":"
identifier "scenePointerY"
} "}"
= "="
identifier "scenePointer"
; ";"
if_statement (+260 nodes collapsed)
if_statement (+175 nodes collapsed)
if_statement (+95 nodes collapsed)
if_statement (+541 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "hasDeselectedButton"
= "="
call_expression
identifier "Boolean"
arguments
( "("
member_expression
identifier "event"
. "."
property_identifier "buttons"
) ")"
; ";"
if_statement (+69 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "elements"
= "="
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "scene"
. "."
property_identifier "getNonDeletedElements"
arguments
( "("
) ")"
; ";"
lexical_declaration (+21 nodes collapsed)
if_statement (+195 nodes collapsed)
lexical_declaration (+24 nodes collapsed)
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "hitLinkElement"
= "="
call_expression
member_expression
this "this"
. "."
property_identifier "getElementLinkAtPosition"
arguments
( "("
identifier "scenePointer"
, ","
identifier "hitElement"
, ","
) ")"
; ";"
if_statement
if "if"
parenthesized_expression
( "("
call_expression
identifier "isEraserActive"
arguments
( "("
member_expression
this "this"
. "."
property_identifier "state"
) ")"
) ")"
statement_block
{ "{"
return_statement
return "return"
; ";"
} "}"
if_statement (+539 nodes collapsed)
} "}"
; ";"
public_field_definition (+727 nodes collapsed)
; ";"
comment "// set touch moving for mobile context menu"
public_field_definition (+32 nodes collapsed)
; ";"
method_definition (+498 nodes collapsed)
public_field_definition
accessibility_modifier
private "private"
property_identifier "handleCanvasPointerDown"
= "="
arrow_function
formal_parameters
( "("
required_parameter
identifier "event"
type_annotation
: ":"
generic_type
nested_type_identifier
identifier "React"
. "."
type_identifier "PointerEvent"
type_arguments
< "<"
type_identifier "HTMLElement"
> ">"
, ","
) ")"
=> "=>"
statement_block
{ "{"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "maybeCleanupAfterMissingPointerUp"
arguments
( "("
member_expression
identifier "event"
. "."
property_identifier "nativeEvent"
) ")"
; ";"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "maybeUnfollowRemoteUser"
arguments
( "("
) ")"
; ";"
comment "// since contextMenu options are potentially evaluated on ea"...
comment "// and an contextMenu action may depend on selection state, "...
comment "// close the contextMenu before we update the selection on p"...
comment "// (e.g. resetting selection)"
if_statement (+32 nodes collapsed)
if_statement (+34 nodes collapsed)
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "updateGestureOnPointerDown"
arguments
( "("
identifier "event"
) ")"
; ";"
comment "// if dragging element is freedraw and another pointerdown e"...
comment "// a second finger is on the screen"
comment "// discard the freedraw element if it is very short because "...
comment "// just a spike, otherwise finalize the freedraw element whe"...
comment "// finger is lifted"
if_statement (+285 nodes collapsed)
comment "// remove any active selection when we start to interact wit"...
comment "// (mainly, we care about removing selection outside the com"...
comment "// would prevent our copy handling otherwise)"
lexical_declaration
const "const"
variable_declarator
identifier "selection"
= "="
call_expression
member_expression
identifier "document"
. "."
property_identifier "getSelection"
arguments
( "("
) ")"
; ";"
if_statement (+23 nodes collapsed)
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "maybeOpenContextMenuAfterPointerDownOnTouchDevices"
arguments
( "("
identifier "event"
) ")"
; ";"
comment "//fires only once, if pen is detected, penMode is enabled"
comment "//the user can disable this by toggling the penMode button"
if_statement (+65 nodes collapsed)
if_statement (+67 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
identifier "isPanning"
) ")"
statement_block
{ "{"
return_statement
return "return"
; ";"
} "}"
expression_statement
assignment_expression
member_expression
this "this"
. "."
property_identifier "lastPointerDownEvent"
= "="
identifier "event"
; ";"
comment "// we must exit before we set `cursorButton` state and `save"...
comment "// else it will send pointer state & laser pointer events in"...
comment "// panning"
if_statement
if "if"
parenthesized_expression
( "("
call_expression
member_expression
this "this"
. "."
property_identifier "handleCanvasPanUsingWheelOrSpaceDrag"
arguments
( "("
identifier "event"
) ")"
) ")"
statement_block
{ "{"
return_statement
return "return"
; ";"
} "}"
expression_statement (+29 nodes collapsed)
expression_statement (+24 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
binary_expression
member_expression
identifier "event"
. "."
property_identifier "button"
=== "==="
member_expression
identifier "POINTER_BUTTON"
. "."
property_identifier "ERASER"
&& "&&"
binary_expression
member_expression
member_expression
member_expression
this "this"
. "."
property_identifier "state"
. "."
property_identifier "activeTool"
. "."
property_identifier "type"
!== "!=="
member_expression
identifier "TOOL_TYPE"
. "."
property_identifier "eraser"
) ")"
statement_block
{ "{"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "setState"
arguments
( "("
object
{ "{"
pair
property_identifier "activeTool"
: ":"
call_expression
identifier "updateActiveTool"
arguments
( "("
member_expression
this "this"
. "."
property_identifier "state"
, ","
object
{ "{"
pair
property_identifier "type"
: ":"
member_expression
identifier "TOOL_TYPE"
. "."
property_identifier "eraser"
, ","
pair
property_identifier "lastActiveToolBeforeEraser"
: ":"
member_expression
member_expression
this "this"
. "."
property_identifier "state"
. "."
property_identifier "activeTool"
, ","
} "}"
) ")"
, ","
} "}"
, ","
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
statement_block
{ "{"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "handleCanvasPointerDown"
arguments
( "("
identifier "event"
) ")"
; ";"
lexical_declaration
const "const"
variable_declarator
identifier "onPointerUp"
= "="
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
statement_block
{ "{"
expression_statement
call_expression
identifier "unsubPointerUp"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
identifier "unsubCleanup"
?. "?."
arguments
( "("
) ")"
; ";"
if_statement
if "if"
parenthesized_expression
( "("
call_expression
identifier "isEraserActive"
arguments
( "("
member_expression
this "this"
. "."
property_identifier "state"
) ")"
) ")"
statement_block
{ "{"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "setState"
arguments
( "("
object
{ "{"
pair
property_identifier "activeTool"
: ":"
call_expression
identifier "updateActiveTool"
arguments
( "("
member_expression
this "this"
. "."
property_identifier "state"
, ","
object
{ "{"
spread_element
... "..."
parenthesized_expression
( "("
binary_expression
member_expression
member_expression
member_expression
this "this"
. "."
property_identifier "state"
. "."
property_identifier "activeTool"
. "."
property_identifier "lastActiveTool"
|| "||"
object
{ "{"
pair
property_identifier "type"
: ":"
member_expression
identifier "TOOL_TYPE"
. "."
property_identifier "selection"
, ","
} "}"
) ")"
, ","
pair
property_identifier "lastActiveToolBeforeEraser"
: ":"
null "null"
, ","
} "}"
) ")"
, ","
} "}"
) ")"
; ";"
} "}"
} "}"
; ";"
lexical_declaration
const "const"
variable_declarator
identifier "unsubPointerUp"
= "="
call_expression
identifier "addEventListener"
arguments
( "("
identifier "window"
, ","
member_expression
identifier "EVENT"
. "."
property_identifier "POINTER_UP"
, ","
identifier "onPointerUp"
, ","
object
{ "{"
pair
property_identifier "once"
: ":"
true "true"
, ","
} "}"
, ","
) ")"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "unsubCleanup"
type_annotation
: ":"
union_type
type_identifier "UnsubscribeCallback"
| "|"
literal_type
undefined "undefined"
; ";"
comment "// subscribe inside rAF lest it'd be triggered on the same p"...
comment "// if we start erasing while coming from blurred document si"...
comment "// we cleanup pointer events on focus"
expression_statement
call_expression
identifier "requestAnimationFrame"
arguments
( "("
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
statement_block
{ "{"
expression_statement
assignment_expression
identifier "unsubCleanup"
= "="
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "missingPointerEventCleanupEmitter"
. "."
property_identifier "once"
arguments
( "("
identifier "onPointerUp"
) ")"
; ";"
} "}"
) ")"
; ";"
} "}"
, ","
) ")"
; ";"
return_statement
return "return"
; ";"
} "}"
comment "// only handle left mouse button or touch"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression any 2:3
binary_expression any 2:3
binary_expression any 2:3
member_expression
identifier "event"
. "."
property_identifier "button"
!== "!=="
member_expression
identifier "POINTER_BUTTON"
. "."
property_identifier "MAIN"
&& "&&"
binary_expression
member_expression
identifier "event"
. "."
property_identifier "button"
!== "!=="
member_expression
identifier "POINTER_BUTTON"
. "."
property_identifier "TOUCH"
&& "&&"
binary_expression
member_expression
identifier "event"
. "."
property_identifier "button"
!== "!=="
member_expression
identifier "POINTER_BUTTON"
. "."
property_identifier "ERASER"
) ")"
statement_block
{ "{"
return_statement
return "return"
; ";"
} "}"
comment "// don't select while panning"
if_statement (+21 nodes collapsed)
comment "// State for the duration of a pointer interaction, which st"...
comment "// pointerDown event, ends with a pointerUp event (or anothe"...
lexical_declaration
const "const"
variable_declarator
identifier "pointerDownState"
= "="
call_expression
member_expression
this "this"
. "."
property_identifier "initialPointerDownState"
arguments
( "("
identifier "event"
) ")"
; ";"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "setState"
arguments
( "("
object
{ "{"
pair
property_identifier "selectedElementsAreBeingDragged"
: ":"
false "false"
, ","
} "}"
) ")"
; ";"
if_statement (+22 nodes collapsed)
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "clearSelectionIfNotUsingSelection"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "updateBindingEnabledOnPointerMove"
arguments
( "("
identifier "event"
) ")"
; ";"
if_statement (+22 nodes collapsed)
lexical_declaration (+81 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
unary_expression
! "!"
identifier "allowOnPointerDown"
) ")"
statement_block
{ "{"
return_statement
return "return"
; ";"
} "}"
if_statement (+586 nodes collapsed)
expression_statement (+24 nodes collapsed)
expression_statement (+25 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "onPointerMove"
= "="
call_expression
member_expression
this "this"
. "."
property_identifier "onPointerMoveFromPointerDownHandler"
arguments
( "("
identifier "pointerDownState"
) ")"
; ";"
lexical_declaration
const "const"
variable_declarator
identifier "onPointerUp"
= "="
call_expression
member_expression
this "this"
. "."
property_identifier "onPointerUpFromPointerDownHandler"
arguments
( "("
identifier "pointerDownState"
) ")"
; ";"
lexical_declaration
const "const"
variable_declarator
identifier "onKeyDown"
= "="
call_expression
member_expression
this "this"
. "."
property_identifier "onKeyDownFromPointerDownHandler"
arguments
( "("
identifier "pointerDownState"
) ")"
; ";"
lexical_declaration
const "const"
variable_declarator
identifier "onKeyUp"
= "="
call_expression
member_expression
this "this"
. "."
property_identifier "onKeyUpFromPointerDownHandler"
arguments
( "("
identifier "pointerDownState"
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "missingPointerEventCleanupEmitter"
. "."
property_identifier "once"
arguments
( "("
arrow_function
formal_parameters
( "("
required_parameter
identifier "_event"
) ")"
=> "=>"
call_expression
identifier "onPointerUp"
arguments
( "("
binary_expression
identifier "_event"
|| "||"
member_expression
identifier "event"
. "."
property_identifier "nativeEvent"
) ")"
, ","
) ")"
; ";"
if_statement (+147 nodes collapsed)
} "}"
; ";"
public_field_definition (+435 nodes collapsed)
; ";"
public_field_definition (+132 nodes collapsed)
; ";"
public_field_definition (+33 nodes collapsed)
; ";"
comment "/**\n * pointerup may not fire in certian cases (user tabs "...
public_field_definition
accessibility_modifier
private "private"
property_identifier "maybeCleanupAfterMissingPointerUp"
= "="
arrow_function
formal_parameters
( "("
required_parameter
identifier "event"
type_annotation
: ":"
union_type
type_identifier "PointerEvent"
| "|"
literal_type
null "null"
) ")"
=> "=>"
statement_block
{ "{"
expression_statement any 1:2
call_expression any 1:3
identifier "lastPointerUp" all 2:1
?. "?."
arguments
( "("
) ")"
; ";" any 1:2
expression_statement any 1:2
call_expression any 1:3
member_expression
call_expression any 1:3
member_expression
member_expression
this "this"
. "."
property_identifier "missingPointerEventCleanupEmitter"
. "."
property_identifier "trigger"
arguments
( "("
identifier "event"
) ")"
. "."
property_identifier "clear"
arguments
( "("
) ")"
; ";" any 1:2
} "}"
; ";"
comment "// Returns whether the event is a panning"
public_field_definition (+807 nodes collapsed)
; ";"
method_definition (+151 nodes collapsed)
method_definition (+462 nodes collapsed)
comment "// Returns whether the event is a dragging a scrollbar"
method_definition
accessibility_modifier
private "private"
property_identifier "handleDraggingScrollBar"
formal_parameters (+23 nodes collapsed)
type_annotation
: ":"
predefined_type
boolean "boolean"
statement_block
{ "{"
if_statement (+35 nodes collapsed)
expression_statement
assignment_expression
identifier "isDraggingScrollBar"
= "="
true "true"
; ";"
expression_statement
assignment_expression
member_expression
member_expression
identifier "pointerDownState"
. "."
property_identifier "lastCoords"
. "."
property_identifier "x"
= "="
member_expression
identifier "event"
. "."
property_identifier "clientX"
; ";"
expression_statement
assignment_expression
member_expression
member_expression
identifier "pointerDownState"
. "."
property_identifier "lastCoords"
. "."
property_identifier "y"
= "="
member_expression
identifier "event"
. "."
property_identifier "clientY"
; ";"
lexical_declaration (+67 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "onPointerUp"
= "="
call_expression
identifier "withBatchedUpdates"
arguments
( "("
arrow_function
formal_parameters
( "("
) ")"
=> "=>"
statement_block
{ "{"
expression_statement
assignment_expression
identifier "lastPointerUp"
= "="
null "null"
; ";"
expression_statement
assignment_expression
identifier "isDraggingScrollBar"
= "="
false "false"
; ";"
expression_statement
call_expression
identifier "setCursorForShape"
arguments
( "("
member_expression
this "this"
. "."
property_identifier "interactiveCanvas"
, ","
member_expression
this "this"
. "."
property_identifier "state"
) ")"
; ";"
expression_statement (+21 nodes collapsed)
expression_statement (+24 nodes collapsed)
expression_statement
call_expression
member_expression
identifier "window"
. "."
property_identifier "removeEventListener"
arguments
( "("
member_expression
identifier "EVENT"
. "."
property_identifier "POINTER_MOVE"
, ","
identifier "onPointerMove"
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "window"
. "."
property_identifier "removeEventListener"
arguments
( "("
member_expression
identifier "EVENT"
. "."
property_identifier "POINTER_UP"
, ","
identifier "onPointerUp"
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "onPointerMove"
. "."
property_identifier "flush"
arguments
( "("
) ")"
; ";"
} "}"
) ")"
; ";"
expression_statement
assignment_expression
identifier "lastPointerUp"
= "="
identifier "onPointerUp"
; ";"
expression_statement
call_expression
member_expression
identifier "window"
. "."
property_identifier "addEventListener"
arguments
( "("
member_expression
identifier "EVENT"
. "."
property_identifier "POINTER_MOVE"
, ","
identifier "onPointerMove"
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "window"
. "."
property_identifier "addEventListener"
arguments
( "("
member_expression
identifier "EVENT"
. "."
property_identifier "POINTER_UP"
, ","
identifier "onPointerUp"
) ")"
; ";"
return_statement
return "return"
true "true"
; ";"
} "}"
public_field_definition (+88 nodes collapsed)
; ";"
comment "/**\n * @returns whether the pointer event has been complet"...
public_field_definition (+1803 nodes collapsed)
; ";"
method_definition (+46 nodes collapsed)
method_definition (+163 nodes collapsed)
public_field_definition (+304 nodes collapsed)
; ";"
public_field_definition (+444 nodes collapsed)
; ";"
public_field_definition (+267 nodes collapsed)
; ";"
comment "//create rectangle element with youtube top left on nearest "...
public_field_definition (+346 nodes collapsed)
; ";"
public_field_definition (+266 nodes collapsed)
; ";"
public_field_definition (+841 nodes collapsed)
; ";"
method_definition (+101 nodes collapsed)
public_field_definition (+423 nodes collapsed)
; ";"
public_field_definition (+234 nodes collapsed)
; ";"
method_definition (+115 nodes collapsed)
method_definition (+115 nodes collapsed)
method_definition (+86 nodes collapsed)
method_definition (+109 nodes collapsed)
method_definition (+3328 nodes collapsed)
comment "// Returns whether the pointer move happened over either scr"...
method_definition (+222 nodes collapsed)
method_definition
accessibility_modifier
private "private"
property_identifier "onPointerUpFromPointerDownHandler"
formal_parameters
( "("
required_parameter
identifier "pointerDownState"
type_annotation
: ":"
type_identifier "PointerDownState"
, ","
) ")"
type_annotation
: ":"
function_type
formal_parameters
( "("
required_parameter
identifier "event"
type_annotation
: ":"
type_identifier "PointerEvent"
) ")"
=> "=>"
predefined_type
void "void"
statement_block
{ "{"
return_statement
return "return"
call_expression
identifier "withBatchedUpdates"
arguments
( "("
arrow_function
formal_parameters
( "("
required_parameter
identifier "childEvent"
type_annotation
: ":"
type_identifier "PointerEvent"
) ")"
=> "=>"
statement_block
{ "{"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "removePointer"
arguments
( "("
identifier "childEvent"
) ")"
; ";"
if_statement (+31 nodes collapsed)
lexical_declaration (+24 nodes collapsed)
expression_statement (+115 nodes collapsed)
expression_statement
call_expression
member_expression
identifier "SnapCache"
. "."
property_identifier "setReferenceSnapPoints"
arguments
( "("
null "null"
) ")"
; ";"
expression_statement
call_expression
member_expression
identifier "SnapCache"
. "."
property_identifier "setVisibleGaps"
arguments
( "("
null "null"
) ")"
; ";"
expression_statement (+24 nodes collapsed)
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "setState"
arguments
( "("
object
{ "{"
pair
property_identifier "selectedElementsAreBeingDragged"
: ":"
false "false"
, ","
} "}"
) ")"
; ";"
comment "// Handle end of dragging a point of a linear element, might"...
comment "// and sets binding element"
if_statement (+397 nodes collapsed)
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "missingPointerEventCleanupEmitter"
. "."
property_identifier "clear"
arguments
( "("
) ")"
; ";"
expression_statement (+25 nodes collapsed)
expression_statement (+25 nodes collapsed)
expression_statement (+25 nodes collapsed)
expression_statement (+25 nodes collapsed)
if_statement (+32 nodes collapsed)
expression_statement (+25 nodes collapsed)
if_statement (+214 nodes collapsed)
if_statement (+191 nodes collapsed)
if_statement (+429 nodes collapsed)
if_statement (+100 nodes collapsed)
if_statement (+808 nodes collapsed)
if_statement (+22 nodes collapsed)
if_statement (+66 nodes collapsed)
comment "// handle frame membership for resizing frames and/or select"...
if_statement (+162 nodes collapsed)
comment "// Code below handles selection when element(s) weren't"
comment "// drag or added to selection on pointer down phase."
lexical_declaration
const "const"
variable_declarator
identifier "hitElement"
= "="
member_expression
member_expression
identifier "pointerDownState"
. "."
property_identifier "hit"
. "."
property_identifier "element"
; ";"
if_statement (+102 nodes collapsed)
lexical_declaration
const "const"
variable_declarator
identifier "pointerStart"
= "="
member_expression
this "this" all 2:1
. "." all 2:1
property_identifier "lastPointerDownEvent" all 2:1
; ";"
lexical_declaration
const "const"
variable_declarator
identifier "pointerEnd"
= "="
binary_expression
member_expression
this "this" all 4:1
. "." all 4:1
property_identifier "lastPointerUpEvent" all 4:1
|| "||"
member_expression
this "this"
. "."
property_identifier "lastPointerMoveEvent"
; ";"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
binary_expression
call_expression
identifier "isEraserActive"
arguments
( "("
member_expression
this "this"
. "."
property_identifier "state"
) ")"
&& "&&"
identifier "pointerStart"
&& "&&"
identifier "pointerEnd"
) ")"
statement_block
{ "{"
lexical_declaration
const "const"
variable_declarator
identifier "draggedDistance"
= "="
call_expression
identifier "distance2d"
arguments
( "("
member_expression any 2:1
identifier "pointerStart"
. "."
property_identifier "clientX"
, ","
member_expression any 2:1
identifier "pointerStart"
. "."
property_identifier "clientY"
, ","
member_expression any 2:1
identifier "pointerEnd"
. "."
property_identifier "clientX"
, ","
member_expression any 2:1
identifier "pointerEnd"
. "."
property_identifier "clientY"
, ","
) ")"
; ";"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
identifier "draggedDistance"
=== "==="
number "0"
) ")"
statement_block
{ "{"
lexical_declaration
const "const"
variable_declarator
identifier "scenePointer"
= "="
call_expression
identifier "viewportCoordsToSceneCoords"
arguments
( "("
object
{ "{"
pair
property_identifier "clientX"
: ":"
member_expression any 2:1
identifier "pointerEnd"
. "."
property_identifier "clientX"
, ","
pair
property_identifier "clientY"
: ":"
member_expression any 2:1
identifier "pointerEnd"
. "."
property_identifier "clientY"
, ","
} "}"
, ","
member_expression
this "this"
. "."
property_identifier "state"
, ","
) ")"
; ";"
lexical_declaration (+24 nodes collapsed)
expression_statement (+50 nodes collapsed)
} "}"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "eraseElements"
arguments
( "("
identifier "pointerDownState"
) ")"
; ";"
return_statement
return "return"
; ";"
} "}"
else_clause (+36 nodes collapsed)
if_statement (+993 nodes collapsed)
if_statement (+177 nodes collapsed)
if_statement (+126 nodes collapsed)
if_statement (+54 nodes collapsed)
if_statement (+59 nodes collapsed)
if_statement (+34 nodes collapsed)
if_statement (+116 nodes collapsed)
if_statement (+106 nodes collapsed)
} "}"
) ")"
; ";"
} "}"
public_field_definition (+287 nodes collapsed)
; ";"
public_field_definition (+257 nodes collapsed)
; ";"
public_field_definition (+880 nodes collapsed)
; ";"
comment "/**\n * inserts image into elements array and rerenders\n "...
public_field_definition (+206 nodes collapsed)
; ";"
public_field_definition (+311 nodes collapsed)
; ";"
public_field_definition (+477 nodes collapsed)
; ";"
public_field_definition (+438 nodes collapsed)
; ";"
comment "/** updates image cache, refreshing updated elements and/or "...
public_field_definition (+263 nodes collapsed)
; ";"
comment "/** adds new images to imageCache and re-renders if needed *"...
public_field_definition (+159 nodes collapsed)
; ";"
comment "/** generally you should use `addNewImagesToImageCache()` di"...
public_field_definition (+30 nodes collapsed)
; ";"
public_field_definition (+74 nodes collapsed)
; ";"
public_field_definition (+87 nodes collapsed)
; ";"
public_field_definition (+205 nodes collapsed)
; ";"
method_definition (+72 nodes collapsed)
method_definition (+155 nodes collapsed)
public_field_definition (+193 nodes collapsed)
; ";"
public_field_definition (+737 nodes collapsed)
; ";"
public_field_definition (+393 nodes collapsed)
; ";"
public_field_definition (+536 nodes collapsed)
; ";"
public_field_definition (+699 nodes collapsed)
; ";"
public_field_definition (+856 nodes collapsed)
; ";"
public_field_definition (+255 nodes collapsed)
; ";"
public_field_definition (+448 nodes collapsed)
; ";"
method_definition (+222 nodes collapsed)
public_field_definition (+207 nodes collapsed)
; ";"
public_field_definition (+51 nodes collapsed)
; ";"
public_field_definition (+206 nodes collapsed)
; ";"
public_field_definition (+36 nodes collapsed)
; ";"
method_definition (+111 nodes collapsed)
method_definition (+71 nodes collapsed)
} "}"
comment "// ---------------------------------------------------------"...
comment "// TEST HOOKS"
comment "// ---------------------------------------------------------"...
ambient_declaration (+81 nodes collapsed)
if_statement (+160 nodes collapsed)
export_statement
export "export"
default "default"
identifier "App"
; ";"