fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 93 kB
Source Map (JSON)
{"version":3,"file":"Canvas.mjs","sources":["../../../src/canvas/Canvas.ts"],"sourcesContent":["import { classRegistry } from '../ClassRegistry';\nimport { NONE } from '../constants';\nimport type {\n CanvasEvents,\n DragEventData,\n ObjectEvents,\n TPointerEvent,\n TPointerEventNames,\n Transform,\n} from '../EventTypeDefs';\nimport { Point } from '../Point';\nimport type { ActiveSelection } from '../shapes/ActiveSelection';\nimport type { Group } from '../shapes/Group';\nimport type { IText } from '../shapes/IText/IText';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { isTouchEvent, stopEvent } from '../util/dom_event';\nimport { getDocumentFromElement, getWindowFromElement } from '../util/dom_misc';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { isActiveSelection } from '../util/typeAssertions';\nimport type { CanvasOptions, TCanvasOptions } from './CanvasOptions';\nimport { SelectableCanvas } from './SelectableCanvas';\nimport { TextEditingManager } from './TextEditingManager';\n\nconst addEventOptions = { passive: false } as EventListenerOptions;\n\nconst getEventPoints = (canvas: Canvas, e: TPointerEvent) => {\n const viewportPoint = canvas.getViewportPoint(e);\n const scenePoint = canvas.getScenePoint(e);\n return {\n viewportPoint,\n scenePoint,\n pointer: viewportPoint,\n absolutePointer: scenePoint,\n };\n};\n\n// just to be clear, the utils are now deprecated and those are here exactly as minifier helpers\n// because el.addEventListener can't me be minified while a const yes and we use it 47 times in this file.\n// few bytes but why give it away.\nconst addListener = (\n el: HTMLElement | Document,\n ...args: Parameters<HTMLElement['addEventListener']>\n) => el.addEventListener(...args);\nconst removeListener = (\n el: HTMLElement | Document,\n ...args: Parameters<HTMLElement['removeEventListener']>\n) => el.removeEventListener(...args);\n\nconst syntheticEventConfig = {\n mouse: {\n in: 'over',\n out: 'out',\n targetIn: 'mouseover',\n targetOut: 'mouseout',\n canvasIn: 'mouse:over',\n canvasOut: 'mouse:out',\n },\n drag: {\n in: 'enter',\n out: 'leave',\n targetIn: 'dragenter',\n targetOut: 'dragleave',\n canvasIn: 'drag:enter',\n canvasOut: 'drag:leave',\n },\n} as const;\n\ntype TSyntheticEventContext = {\n mouse: { e: TPointerEvent };\n drag: DragEventData;\n};\n\nexport class Canvas extends SelectableCanvas implements CanvasOptions {\n /**\n * Contains the id of the touch event that owns the fabric transform\n * @type Number\n * @private\n */\n declare mainTouchId?: number;\n\n declare enablePointerEvents: boolean;\n\n /**\n * Holds a reference to a setTimeout timer for event synchronization\n * @type number\n * @private\n */\n private declare _willAddMouseDown: number;\n\n /**\n * Holds a reference to an object on the canvas that is receiving the drag over event.\n * @type FabricObject\n * @private\n */\n private declare _draggedoverTarget?: FabricObject;\n\n /**\n * Holds a reference to an object on the canvas from where the drag operation started\n * @type FabricObject\n * @private\n */\n private declare _dragSource?: FabricObject;\n\n /**\n * Holds a reference to an object on the canvas that is the current drop target\n * May differ from {@link _draggedoverTarget}\n * @todo inspect whether {@link _draggedoverTarget} and {@link _dropTarget} should be merged somehow\n * @type FabricObject\n * @private\n */\n private declare _dropTarget: FabricObject<ObjectEvents> | undefined;\n\n private _isClick: boolean;\n\n textEditingManager = new TextEditingManager(this);\n\n constructor(el?: string | HTMLCanvasElement, options: TCanvasOptions = {}) {\n super(el, options);\n // bind event handlers\n (\n [\n '_onMouseDown',\n '_onTouchStart',\n '_onMouseMove',\n '_onMouseUp',\n '_onTouchEnd',\n '_onResize',\n // '_onGesture',\n // '_onDrag',\n // '_onShake',\n // '_onLongPress',\n // '_onOrientationChange',\n '_onMouseWheel',\n '_onMouseOut',\n '_onMouseEnter',\n '_onContextMenu',\n '_onDoubleClick',\n '_onDragStart',\n '_onDragEnd',\n '_onDragProgress',\n '_onDragOver',\n '_onDragEnter',\n '_onDragLeave',\n '_onDrop',\n ] as (keyof this)[]\n ).forEach((eventHandler) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n this[eventHandler] = (this[eventHandler] as Function).bind(this);\n });\n // register event handlers\n this.addOrRemove(addListener, 'add');\n }\n\n /**\n * return an event prefix pointer or mouse.\n * @private\n */\n private _getEventPrefix() {\n return this.enablePointerEvents ? 'pointer' : 'mouse';\n }\n\n addOrRemove(functor: any, _eventjsFunctor: 'add' | 'remove') {\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n functor(getWindowFromElement(canvasElement), 'resize', this._onResize);\n functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n functor(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove,\n addEventOptions,\n );\n functor(canvasElement, `${eventTypePrefix}out`, this._onMouseOut);\n functor(canvasElement, `${eventTypePrefix}enter`, this._onMouseEnter);\n functor(canvasElement, 'wheel', this._onMouseWheel);\n functor(canvasElement, 'contextmenu', this._onContextMenu);\n functor(canvasElement, 'dblclick', this._onDoubleClick);\n functor(canvasElement, 'dragstart', this._onDragStart);\n functor(canvasElement, 'dragend', this._onDragEnd);\n functor(canvasElement, 'dragover', this._onDragOver);\n functor(canvasElement, 'dragenter', this._onDragEnter);\n functor(canvasElement, 'dragleave', this._onDragLeave);\n functor(canvasElement, 'drop', this._onDrop);\n if (!this.enablePointerEvents) {\n functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);\n }\n // if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {\n // eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);\n // eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);\n // eventjs[eventjsFunctor](\n // canvasElement,\n // 'orientation',\n // this._onOrientationChange\n // );\n // eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);\n // eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);\n // }\n }\n\n /**\n * Removes all event listeners, used when disposing the instance\n */\n removeListeners() {\n this.addOrRemove(removeListener, 'remove');\n // if you dispose on a mouseDown, before mouse up, you need to clean document to...\n const eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n `${eventTypePrefix}up`,\n this._onMouseUp as EventListener,\n );\n removeListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n clearTimeout(this._willAddMouseDown);\n }\n\n /**\n * @private\n * @param {Event} [e] Event object fired on wheel event\n */\n private _onMouseWheel(e: MouseEvent) {\n this.__onMouseWheel(e);\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onMouseOut(e: TPointerEvent) {\n const target = this._hoveredTarget;\n const shared = {\n e,\n ...getEventPoints(this, e),\n };\n this.fire('mouse:out', { ...shared, target });\n this._hoveredTarget = undefined;\n target && target.fire('mouseout', { ...shared });\n this._hoveredTargets.forEach((nestedTarget) => {\n this.fire('mouse:out', { ...shared, target: nestedTarget });\n nestedTarget && nestedTarget.fire('mouseout', { ...shared });\n });\n this._hoveredTargets = [];\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseenter\n */\n private _onMouseEnter(e: TPointerEvent) {\n // This find target and consequent 'mouse:over' is used to\n // clear old instances on hovered target.\n // calling findTarget has the side effect of killing target.__corner.\n // as a short term fix we are not firing this if we are currently transforming.\n // as a long term fix we need to separate the action of finding a target with the\n // side effects we added to it.\n if (!this._currentTransform && !this.findTarget(e)) {\n this.fire('mouse:over', {\n e,\n ...getEventPoints(this, e),\n });\n this._hoveredTarget = undefined;\n this._hoveredTargets = [];\n }\n }\n\n /**\n * supports native like text dragging\n * @private\n * @param {DragEvent} e\n */\n private _onDragStart(e: DragEvent) {\n this._isClick = false;\n const activeObject = this.getActiveObject();\n if (activeObject && activeObject.onDragStart(e)) {\n this._dragSource = activeObject;\n const options = { e, target: activeObject };\n this.fire('dragstart', options);\n activeObject.fire('dragstart', options);\n addListener(\n this.upperCanvasEl,\n 'drag',\n this._onDragProgress as EventListener,\n );\n return;\n }\n stopEvent(e);\n }\n\n /**\n * First we clear top context where the effects are being rendered.\n * Then we render the effects.\n * Doing so will render the correct effect for all cases including an overlap between `source` and `target`.\n * @private\n */\n private _renderDragEffects(\n e: DragEvent,\n source?: FabricObject,\n target?: FabricObject,\n ) {\n let dirty = false;\n // clear top context\n const dropTarget = this._dropTarget;\n if (dropTarget && dropTarget !== source && dropTarget !== target) {\n dropTarget.clearContextTop();\n dirty = true;\n }\n source?.clearContextTop();\n target !== source && target?.clearContextTop();\n // render effects\n const ctx = this.contextTop;\n ctx.save();\n ctx.transform(...this.viewportTransform);\n if (source) {\n ctx.save();\n source.transform(ctx);\n source.renderDragSourceEffect(e);\n ctx.restore();\n dirty = true;\n }\n if (target) {\n ctx.save();\n target.transform(ctx);\n target.renderDropTargetEffect(e);\n ctx.restore();\n dirty = true;\n }\n ctx.restore();\n dirty && (this.contextTopDirty = true);\n }\n\n /**\n * supports native like text dragging\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#finishing_a_drag\n * @private\n * @param {DragEvent} e\n */\n private _onDragEnd(e: DragEvent) {\n const didDrop = !!e.dataTransfer && e.dataTransfer.dropEffect !== NONE,\n dropTarget = didDrop ? this._activeObject : undefined,\n options = {\n e,\n target: this._dragSource as FabricObject,\n subTargets: this.targets,\n dragSource: this._dragSource as FabricObject,\n didDrop,\n dropTarget: dropTarget as FabricObject,\n };\n removeListener(\n this.upperCanvasEl,\n 'drag',\n this._onDragProgress as EventListener,\n );\n this.fire('dragend', options);\n this._dragSource && this._dragSource.fire('dragend', options);\n delete this._dragSource;\n // we need to call mouse up synthetically because the browser won't\n this._onMouseUp(e);\n }\n\n /**\n * fire `drag` event on canvas and drag source\n * @private\n * @param {DragEvent} e\n */\n private _onDragProgress(e: DragEvent) {\n const options = {\n e,\n target: this._dragSource as FabricObject | undefined,\n dragSource: this._dragSource as FabricObject | undefined,\n dropTarget: this._draggedoverTarget as FabricObject,\n };\n this.fire('drag', options);\n this._dragSource && this._dragSource.fire('drag', options);\n }\n\n /**\n * As opposed to {@link findTarget} we want the top most object to be returned w/o the active object cutting in line.\n * Override at will\n */\n protected findDragTargets(e: DragEvent) {\n this.targets = [];\n const target = this._searchPossibleTargets(\n this._objects,\n this.getViewportPoint(e),\n );\n return {\n target,\n targets: [...this.targets],\n };\n }\n\n /**\n * prevent default to allow drop event to be fired\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#specifying_drop_targets\n * @private\n * @param {DragEvent} [e] Event object fired on Event.js shake\n */\n private _onDragOver(e: DragEvent) {\n const eventType = 'dragover';\n const { target, targets } = this.findDragTargets(e);\n const dragSource = this._dragSource as FabricObject;\n const options = {\n e,\n target,\n subTargets: targets,\n dragSource,\n canDrop: false,\n dropTarget: undefined,\n };\n let dropTarget;\n // fire on canvas\n this.fire(eventType, options);\n // make sure we fire dragenter events before dragover\n // if dragleave is needed, object will not fire dragover so we don't need to trouble ourselves with it\n this._fireEnterLeaveEvents(target, options);\n if (target) {\n if (target.canDrop(e)) {\n dropTarget = target;\n }\n target.fire(eventType, options);\n }\n // propagate the event to subtargets\n for (let i = 0; i < targets.length; i++) {\n const subTarget = targets[i];\n // accept event only if previous targets didn't (the accepting target calls `preventDefault` to inform that the event is taken)\n // TODO: verify if those should loop in inverse order then?\n // what is the order of subtargets?\n if (subTarget.canDrop(e)) {\n dropTarget = subTarget;\n }\n subTarget.fire(eventType, options);\n }\n // render drag effects now that relations between source and target is clear\n this._renderDragEffects(e, dragSource, dropTarget);\n this._dropTarget = dropTarget;\n }\n\n /**\n * fire `dragleave` on `dragover` targets\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n private _onDragEnter(e: DragEvent) {\n const { target, targets } = this.findDragTargets(e);\n const options = {\n e,\n target,\n subTargets: targets,\n dragSource: this._dragSource,\n };\n this.fire('dragenter', options);\n // fire dragenter on targets\n this._fireEnterLeaveEvents(target, options);\n }\n\n /**\n * fire `dragleave` on `dragover` targets\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n private _onDragLeave(e: DragEvent) {\n const options = {\n e,\n target: this._draggedoverTarget,\n subTargets: this.targets,\n dragSource: this._dragSource,\n };\n this.fire('dragleave', options);\n\n // fire dragleave on targets\n this._fireEnterLeaveEvents(undefined, options);\n this._renderDragEffects(e, this._dragSource);\n this._dropTarget = undefined;\n // clear targets\n this.targets = [];\n this._hoveredTargets = [];\n }\n\n /**\n * `drop:before` is a an event that allows you to schedule logic\n * before the `drop` event. Prefer `drop` event always, but if you need\n * to run some drop-disabling logic on an event, since there is no way\n * to handle event handlers ordering, use `drop:before`\n * @private\n * @param {Event} e\n */\n private _onDrop(e: DragEvent) {\n const { target, targets } = this.findDragTargets(e);\n const options = this._basicEventHandler('drop:before', {\n e,\n target,\n subTargets: targets,\n dragSource: this._dragSource,\n ...getEventPoints(this, e),\n });\n // will be set by the drop target\n options.didDrop = false;\n // will be set by the drop target, used in case options.target refuses the drop\n options.dropTarget = undefined;\n // fire `drop`\n this._basicEventHandler('drop', options);\n // inform canvas of the drop\n // we do this because canvas was unaware of what happened at the time the `drop` event was fired on it\n // use for side effects\n this.fire('drop:after', options);\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onContextMenu(e: TPointerEvent): false {\n const target = this.findTarget(e),\n subTargets = this.targets || [];\n const options = this._basicEventHandler('contextmenu:before', {\n e,\n target,\n subTargets,\n });\n // TODO: this line is silly because the dev can subscribe to the event and prevent it themselves\n this.stopContextMenu && stopEvent(e);\n this._basicEventHandler('contextmenu', options);\n return false;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onDoubleClick(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'dblclick');\n this._resetTransformEventData();\n }\n\n /**\n * Return a the id of an event.\n * returns either the pointerId or the identifier or 0 for the mouse event\n * @private\n * @param {Event} evt Event object\n */\n getPointerId(evt: TouchEvent | PointerEvent): number {\n const changedTouches = (evt as TouchEvent).changedTouches;\n\n if (changedTouches) {\n return changedTouches[0] && changedTouches[0].identifier;\n }\n\n if (this.enablePointerEvents) {\n return (evt as PointerEvent).pointerId;\n }\n\n return -1;\n }\n\n /**\n * Determines if an event has the id of the event that is considered main\n * @private\n * @param {evt} event Event object\n */\n _isMainEvent(evt: TPointerEvent): boolean {\n if ((evt as PointerEvent).isPrimary === true) {\n return true;\n }\n if ((evt as PointerEvent).isPrimary === false) {\n return false;\n }\n if (evt.type === 'touchend' && (evt as TouchEvent).touches.length === 0) {\n return true;\n }\n if ((evt as TouchEvent).changedTouches) {\n return (\n (evt as TouchEvent).changedTouches[0].identifier === this.mainTouchId\n );\n }\n return true;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchStart(e: TouchEvent) {\n // we will prevent scrolling if allowTouchScrolling is not enabled and\n let shouldPreventScrolling = !this.allowTouchScrolling;\n const currentActiveObject = this._activeObject;\n if (this.mainTouchId === undefined) {\n this.mainTouchId = this.getPointerId(e);\n }\n this.__onMouseDown(e);\n // after executing fabric logic for mouse down let's see\n // if we didn't change target or if we are drawing\n // we want to prevent scrolling anyway\n if (\n this.isDrawingMode ||\n (currentActiveObject && this._target === currentActiveObject)\n ) {\n shouldPreventScrolling = true;\n }\n // prevent default, will block scrolling from start\n shouldPreventScrolling && e.preventDefault();\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(canvasElement);\n addListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n // if we scroll don't register the touch move event\n shouldPreventScrolling &&\n addListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n // Unbind mousedown to prevent double triggers from touch devices\n removeListener(\n canvasElement,\n `${eventTypePrefix}down`,\n this._onMouseDown as EventListener,\n );\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDown(e: TPointerEvent) {\n this.__onMouseDown(e);\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n removeListener(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n const doc = getDocumentFromElement(canvasElement);\n addListener(doc, `${eventTypePrefix}up`, this._onMouseUp as EventListener);\n addListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchEnd(e: TouchEvent) {\n if (e.touches.length > 0) {\n // if there are still touches stop here\n return;\n }\n this.__onMouseUp(e);\n this._resetTransformEventData();\n delete this.mainTouchId;\n const eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n if (this._willAddMouseDown) {\n clearTimeout(this._willAddMouseDown);\n }\n this._willAddMouseDown = setTimeout(() => {\n // Wait 400ms before rebinding mousedown to prevent double triggers\n // from touch devices\n addListener(\n this.upperCanvasEl,\n `${eventTypePrefix}down`,\n this._onMouseDown as EventListener,\n );\n this._willAddMouseDown = 0;\n }, 400) as unknown as number;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUp(e: TPointerEvent) {\n this.__onMouseUp(e);\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n if (this._isMainEvent(e)) {\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n `${eventTypePrefix}up`,\n this._onMouseUp as EventListener,\n );\n removeListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n addListener(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMove(e: TPointerEvent) {\n const activeObject = this.getActiveObject();\n !this.allowTouchScrolling &&\n (!activeObject ||\n // a drag event sequence is started by the active object flagging itself on mousedown / mousedown:before\n // we must not prevent the event's default behavior in order for the window to start dragging\n !activeObject.shouldStartDragging(e)) &&\n e.preventDefault &&\n e.preventDefault();\n this.__onMouseMove(e);\n }\n\n /**\n * @private\n */\n _onResize() {\n this.calcOffset();\n this._resetTransformEventData();\n }\n\n /**\n * Decides whether the canvas should be redrawn in mouseup and mousedown events.\n * @private\n * @param {Object} target\n */\n _shouldRender(target: FabricObject | undefined) {\n const activeObject = this.getActiveObject();\n // if just one of them is available or if they are both but are different objects\n // this covers: switch of target, from target to no target, selection of target\n // multiSelection with key and mouse\n return (\n !!activeObject !== !!target ||\n (activeObject && target && activeObject !== target)\n );\n }\n\n /**\n * Method that defines the actions when mouse is released on canvas.\n * The method resets the currentTransform parameters, store the image corner\n * position in the image object and render the canvas on top.\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseUp(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'up:before');\n\n const transform = this._currentTransform;\n const isClick = this._isClick;\n const target = this._target;\n\n // if right/middle click just fire events and return\n // target undefined will make the _handleEvent search the target\n const { button } = e as MouseEvent;\n if (button) {\n ((this.fireMiddleClick && button === 1) ||\n (this.fireRightClick && button === 2)) &&\n this._handleEvent(e, 'up');\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this._onMouseUpInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n let shouldRender = false;\n if (transform) {\n this._finalizeCurrentTransform(e);\n shouldRender = transform.actionPerformed;\n }\n if (!isClick) {\n const targetWasActive = target === this._activeObject;\n this.handleSelection(e);\n if (!shouldRender) {\n shouldRender =\n this._shouldRender(target) ||\n (!targetWasActive && target === this._activeObject);\n }\n }\n let pointer, corner;\n if (target) {\n const found = target.findControl(\n this.getViewportPoint(e),\n isTouchEvent(e),\n );\n const { key, control } = found || {};\n corner = key;\n if (\n target.selectable &&\n target !== this._activeObject &&\n target.activeOn === 'up'\n ) {\n this.setActiveObject(target, e);\n shouldRender = true;\n } else if (control) {\n const mouseUpHandler = control.getMouseUpHandler(e, target, control);\n if (mouseUpHandler) {\n pointer = this.getScenePoint(e);\n mouseUpHandler.call(control, e, transform!, pointer.x, pointer.y);\n }\n }\n target.isMoving = false;\n }\n // if we are ending up a transform on a different control or a new object\n // fire the original mouse up from the corner that started the transform\n if (\n transform &&\n (transform.target !== target || transform.corner !== corner)\n ) {\n const originalControl =\n transform.target && transform.target.controls[transform.corner],\n originalMouseUpHandler =\n originalControl &&\n originalControl.getMouseUpHandler(\n e,\n transform.target,\n originalControl,\n );\n pointer = pointer || this.getScenePoint(e);\n originalMouseUpHandler &&\n originalMouseUpHandler.call(\n originalControl,\n e,\n transform,\n pointer.x,\n pointer.y,\n );\n }\n this._setCursorFromEvent(e, target);\n this._handleEvent(e, 'up');\n this._groupSelector = null;\n this._currentTransform = null;\n // reset the target information about which corner is selected\n target && (target.__corner = undefined);\n if (shouldRender) {\n this.requestRenderAll();\n } else if (!isClick && !(this._activeObject as IText)?.isEditing) {\n this.renderTop();\n }\n }\n\n _basicEventHandler<T extends keyof (CanvasEvents | ObjectEvents)>(\n eventType: T,\n options: (CanvasEvents & ObjectEvents)[T],\n ) {\n const { target, subTargets = [] } = options as {\n target?: FabricObject;\n subTargets: FabricObject[];\n };\n this.fire(eventType, options);\n target && target.fire(eventType, options);\n for (let i = 0; i < subTargets.length; i++) {\n subTargets[i] !== target && subTargets[i].fire(eventType, options);\n }\n return options;\n }\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {TPointerEvent} e event from mouse\n * @param {TPointerEventNames} eventType\n */\n _handleEvent<T extends TPointerEventNames>(e: TPointerEvent, eventType: T) {\n const target = this._target,\n targets = this.targets || [],\n options: CanvasEvents[`mouse:${T}`] = {\n e,\n target,\n subTargets: targets,\n ...getEventPoints(this, e),\n transform: this._currentTransform,\n ...(eventType === 'up:before' || eventType === 'up'\n ? {\n isClick: this._isClick,\n currentTarget: this.findTarget(e),\n // set by the preceding `findTarget` call\n currentSubTargets: this.targets,\n }\n : {}),\n } as CanvasEvents[`mouse:${T}`];\n this.fire(`mouse:${eventType}`, options);\n // this may be a little be more complicated of what we want to handle\n target && target.fire(`mouse${eventType}`, options);\n for (let i = 0; i < targets.length; i++) {\n targets[i] !== target && targets[i].fire(`mouse${eventType}`, options);\n }\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDownInDrawingMode(e: TPointerEvent) {\n this._isCurrentlyDrawing = true;\n if (this.getActiveObject()) {\n this.discardActiveObject(e);\n this.requestRenderAll();\n }\n // TODO: this is a scene point so it should be renamed\n const pointer = this.getScenePoint(e);\n this.freeDrawingBrush &&\n this.freeDrawingBrush.onMouseDown(pointer, { e, pointer });\n this._handleEvent(e, 'down');\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMoveInDrawingMode(e: TPointerEvent) {\n if (this._isCurrentlyDrawing) {\n const pointer = this.getScenePoint(e);\n this.freeDrawingBrush &&\n this.freeDrawingBrush.onMouseMove(pointer, {\n e,\n // this is an absolute pointer, the naming is wrong\n pointer,\n });\n }\n this.setCursor(this.freeDrawingCursor);\n this._handleEvent(e, 'move');\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUpInDrawingMode(e: TPointerEvent) {\n const pointer = this.getScenePoint(e);\n if (this.freeDrawingBrush) {\n this._isCurrentlyDrawing = !!this.freeDrawingBrush.onMouseUp({\n e: e,\n // this is an absolute pointer, the naming is wrong\n pointer,\n });\n } else {\n this._isCurrentlyDrawing = false;\n }\n this._handleEvent(e, 'up');\n }\n\n /**\n * Method that defines the actions when mouse is clicked on canvas.\n * The method inits the currentTransform parameters and renders all the\n * canvas so the current image can be placed on the top canvas and the rest\n * in on the container one.\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n __onMouseDown(e: TPointerEvent) {\n this._isClick = true;\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'down:before');\n\n let target: FabricObject | undefined = this._target;\n\n // if right/middle click just fire events\n const { button } = e as MouseEvent;\n if (button) {\n ((this.fireMiddleClick && button === 1) ||\n (this.fireRightClick && button === 2)) &&\n this._handleEvent(e, 'down');\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode) {\n this._onMouseDownInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n // ignore if some object is being transformed at this moment\n if (this._currentTransform) {\n return;\n }\n\n let shouldRender = this._shouldRender(target);\n let grouped = false;\n if (this.handleMultiSelection(e, target)) {\n // active object might have changed while grouping\n target = this._activeObject;\n grouped = true;\n shouldRender = true;\n } else if (this._shouldClearSelection(e, target)) {\n this.discardActiveObject(e);\n }\n // we start a group selector rectangle if\n // selection is enabled\n // and there is no target, or the following 3 conditions are satisfied:\n // target is not selectable ( otherwise we selected it )\n // target is not editing\n // target is not already selected ( otherwise we drag )\n if (\n this.selection &&\n (!target ||\n (!target.selectable &&\n !(target as IText).isEditing &&\n target !== this._activeObject))\n ) {\n const p = this.getScenePoint(e);\n this._groupSelector = {\n x: p.x,\n y: p.y,\n deltaY: 0,\n deltaX: 0,\n };\n }\n\n if (target) {\n const alreadySelected = target === this._activeObject;\n if (target.selectable && target.activeOn === 'down') {\n this.setActiveObject(target, e);\n }\n const handle = target.findControl(\n this.getViewportPoint(e),\n isTouchEvent(e),\n );\n if (target === this._activeObject && (handle || !grouped)) {\n this._setupCurrentTransform(e, target, alreadySelected);\n const control = handle ? handle.control : undefined,\n pointer = this.getScenePoint(e),\n mouseDownHandler =\n control && control.getMouseDownHandler(e, target, control);\n mouseDownHandler &&\n mouseDownHandler.call(\n control,\n e,\n this._currentTransform!,\n pointer.x,\n pointer.y,\n );\n }\n }\n // we clear `_objectsToRender` in case of a change in order to repopulate it at rendering\n // run before firing the `down` event to give the dev a chance to populate it themselves\n shouldRender && (this._objectsToRender = undefined);\n this._handleEvent(e, 'down');\n // we must renderAll so that we update the visuals\n shouldRender && this.requestRenderAll();\n }\n\n /**\n * reset cache form common information needed during event processing\n * @private\n */\n _resetTransformEventData() {\n this._target = this._pointer = this._absolutePointer = undefined;\n }\n\n /**\n * Cache common information needed during event processing\n * @private\n * @param {Event} e Event object fired on event\n */\n _cacheTransformEventData(e: TPointerEvent) {\n // reset in order to avoid stale caching\n this._resetTransformEventData();\n this._pointer = this.getViewportPoint(e);\n this._absolutePointer = sendPointToPlane(\n this._pointer,\n undefined,\n this.viewportTransform,\n );\n this._target = this._currentTransform\n ? this._currentTransform.target\n : this.findTarget(e);\n }\n\n /**\n * Method that defines the actions when mouse is hovering the canvas.\n * The currentTransform parameter will define whether the user is rotating/scaling/translating\n * an image or neither of them (only hovering). A group selection is also possible and would cancel\n * all any other type of action.\n * In case of an image transformation only the top canvas will be rendered.\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n __onMouseMove(e: TPointerEvent) {\n this._isClick = false;\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'move:before');\n\n if (this.isDrawingMode) {\n this._onMouseMoveInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n const groupSelector = this._groupSelector;\n\n // We initially clicked in an empty area, so we draw a box for multiple selection\n if (groupSelector) {\n const pointer = this.getScenePoint(e);\n\n groupSelector.deltaX = pointer.x - groupSelector.x;\n groupSelector.deltaY = pointer.y - groupSelector.y;\n\n this.renderTop();\n } else if (!this._currentTransform) {\n const target = this.findTarget(e);\n this._setCursorFromEvent(e, target);\n this._fireOverOutEvents(e, target);\n } else {\n this._transformObject(e);\n }\n this.textEditingManager.onMouseMove(e);\n this._handleEvent(e, 'move');\n this._resetTransformEventData();\n }\n\n /**\n * Manage the mouseout, mouseover events for the fabric object on the canvas\n * @param {Fabric.Object} target the target where the target from the mousemove event\n * @param {Event} e Event object fired on mousemove\n * @private\n */\n _fireOverOutEvents(e: TPointerEvent, target?: FabricObject) {\n const _hoveredTarget = this._hoveredTarget,\n _hoveredTargets = this._hoveredTargets,\n targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents('mouse', {\n e,\n target,\n oldTarget: _hoveredTarget,\n fireCanvas: true,\n });\n for (let i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents('mouse', {\n e,\n target: targets[i],\n oldTarget: _hoveredTargets[i],\n });\n }\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n }\n\n /**\n * Manage the dragEnter, dragLeave events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the onDrag event\n * @param {Object} data Event object fired on dragover\n * @private\n */\n _fireEnterLeaveEvents(target: FabricObject | undefined, data: DragEventData) {\n const draggedoverTarget = this._draggedoverTarget,\n _hoveredTargets = this._hoveredTargets,\n targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents('drag', {\n ...data,\n target,\n oldTarget: draggedoverTarget,\n fireCanvas: true,\n });\n for (let i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents('drag', {\n ...data,\n target: targets[i],\n oldTarget: _hoveredTargets[i],\n });\n }\n this._draggedoverTarget = target;\n }\n\n /**\n * Manage the synthetic in/out events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the supported events\n * @param {Object} data Event object fired\n * @param {Object} config configuration for the function to work\n * @param {String} config.targetName property on the canvas where the old target is stored\n * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out\n * @param {String} config.evtOut name of the event to fire for out\n * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in\n * @param {String} config.evtIn name of the event to fire for in\n * @private\n */\n fireSyntheticInOutEvents<T extends keyof TSyntheticEventContext>(\n type: T,\n {\n target,\n oldTarget,\n fireCanvas,\n e,\n ...data\n }: TSyntheticEventContext[T] & {\n target?: FabricObject;\n oldTarget?: FabricObject;\n fireCanvas?: boolean;\n },\n ) {\n const { targetIn, targetOut, canvasIn, canvasOut } =\n syntheticEventConfig[type];\n const targetChanged = oldTarget !== target;\n\n if (oldTarget && targetChanged) {\n const outOpt: CanvasEvents[typeof canvasOut] = {\n ...data,\n e,\n target: oldTarget,\n nextTarget: target,\n ...getEventPoints(this, e),\n };\n fireCanvas && this.fire(canvasOut, outOpt);\n oldTarget.fire(targetOut, outOpt);\n }\n if (target && targetChanged) {\n const inOpt: CanvasEvents[typeof canvasIn] = {\n ...data,\n e,\n target,\n previousTarget: oldTarget,\n ...getEventPoints(this, e),\n };\n fireCanvas && this.fire(canvasIn, inOpt);\n target.fire(targetIn, inOpt);\n }\n }\n\n /**\n * Method that defines actions when an Event Mouse Wheel\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseWheel(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'wheel');\n this._resetTransformEventData();\n }\n\n /**\n * @private\n * @param {Event} e Event fired on mousemove\n */\n _transformObject(e: TPointerEvent) {\n const scenePoint = this.getScenePoint(e),\n transform = this._currentTransform!,\n target = transform.target,\n // transform pointer to target's containing coordinate plane\n // both pointer and object should agree on every point\n localPointer = target.group\n ? sendPointToPlane(\n scenePoint,\n undefined,\n target.group.calcTransformMatrix(),\n )\n : scenePoint;\n transform.shiftKey = e.shiftKey;\n transform.altKey = !!this.centeredKey && e[this.centeredKey];\n\n this._performTransformAction(e, transform, localPointer);\n transform.actionPerformed && this.requestRenderAll();\n }\n\n /**\n * @private\n */\n _performTransformAction(\n e: TPointerEvent,\n transform: Transform,\n pointer: Point,\n ) {\n const { action, actionHandler, target } = transform;\n\n const actionPerformed =\n !!actionHandler && actionHandler(e, transform, pointer.x, pointer.y);\n actionPerformed && target.setCoords();\n\n // this object could be created from the function in the control handlers\n if (action === 'drag' && actionPerformed) {\n transform.target.isMoving = true;\n this.setCursor(transform.target.moveCursor || this.moveCursor);\n }\n transform.actionPerformed = transform.actionPerformed || actionPerformed;\n }\n\n /**\n * Sets the cursor depending on where the canvas is being hovered.\n * Note: very buggy in Opera\n * @param {Event} e Event object\n * @param {Object} target Object that the mouse is hovering, if so.\n */\n _setCursorFromEvent(e: TPointerEvent, target?: FabricObject) {\n if (!target) {\n this.setCursor(this.defaultCursor);\n return;\n }\n let hoverCursor = target.hoverCursor || this.hoverCursor;\n const activeSelection = isActiveSelection(this._activeObject)\n ? this._activeObject\n : null,\n // only show proper corner when group selection is not active\n corner =\n (!activeSelection || target.group !== activeSelection) &&\n // here we call findTargetCorner always with undefined for the touch parameter.\n // we assume that if you are using a cursor you do not need to interact with\n // the bigger touch area.\n target.findControl(this.getViewportPoint(e));\n\n if (!corner) {\n if ((target as Group).subTargetCheck) {\n // hoverCursor should come from top-most subTarget,\n // so we walk the array backwards\n this.targets\n .concat()\n .reverse()\n .map((_target) => {\n hoverCursor = _target.hoverCursor || hoverCursor;\n });\n }\n this.setCursor(hoverCursor);\n } else {\n const control = corner.control;\n this.setCursor(control.cursorStyleHandler(e, control, target));\n }\n }\n\n /**\n * ## Handles multiple selection\n * - toggles `target` selection (selects/deselects `target` if it isn't/is selected respectively)\n * - sets the active object in case it is not set or in case there is a single active object left under active selection.\n * ---\n * - If the active object is the active selection we add/remove `target` from it\n * - If not, add the active object and `target` to the active selection and make it the active object.\n * @private\n * @param {TPointerEvent} e Event object\n * @param {FabricObject} target target of event to select/deselect\n * @returns true if grouping occurred\n */\n protected handleMultiSelection(e: TPointerEvent, target?: FabricObject) {\n const activeObject = this._activeObject;\n const isAS = isActiveSelection(activeObject);\n if (\n // check if an active object exists on canvas and if the user is pressing the `selectionKey` while canvas supports multi selection.\n !!activeObject &&\n this._isSelectionKeyPressed(e) &&\n this.selection &&\n // on top of that the user also has to hit a target that is selectable.\n !!target &&\n target.selectable &&\n // group target and active object only if they are different objects\n // else we try to find a subtarget of `ActiveSelection`\n (activeObject !== target || isAS) &&\n // make sure `activeObject` and `target` aren't ancestors of each other in case `activeObject` is not `ActiveSelection`\n // if it is then we want to remove `target` from it\n (isAS ||\n (!target.isDescendantOf(activeObject) &&\n !activeObject.isDescendantOf(target))) &&\n // target accepts selection\n !target.onSelect({ e }) &&\n // make sure we are not on top of a control\n !activeObject.getActiveControl()\n ) {\n if (isAS) {\n const prevActiveObjects = activeObject.getObjects();\n if (target === activeObject) {\n const pointer = this.getViewportPoint(e);\n target =\n // first search active objects for a target to remove\n this.searchPossibleTargets(prevActiveObjects, pointer) ||\n // if not found, search under active selection for a target to add\n // `prevActiveObjects` will be searched but we already know they will not be found\n this.searchPossibleTargets(this._objects, pointer);\n // if nothing is found bail out\n if (!target || !target.selectable) {\n return false;\n }\n }\n if (target.group === activeObject) {\n // `target` is part of active selection => remove it\n activeObject.remove(target);\n this._hoveredTarget = target;\n this._hoveredTargets = [...this.targets];\n // if after removing an object we are left with one only...\n if (activeObject.size() === 1) {\n // activate last remaining object\n // deselecting the active selection will remove the remaining object from it\n this._setActiveObject(activeObject.item(0), e);\n }\n } else {\n // `target` isn't part of active selection => add it\n activeObject.multiSelectAdd(target);\n this._hoveredTarget = activeObject;\n this._hoveredTargets = [...this.targets];\n }\n this._fireSelectionEvents(prevActiveObjects, e);\n } else {\n (activeObject as IText).isEditing &&\n (activeObject as IText).exitEditing();\n // add the active object and the target to the active selection and set it as the active object\n const klass =\n classRegistry.getClass<typeof ActiveSelection>('ActiveSelection');\n const newActiveSelection = new klass([], {\n /**\n * it is crucial to pass the canvas ref before calling {@link ActiveSelection#multiSelectAdd}\n * since it uses {@link FabricObject#isInFrontOf} which relies on the canvas ref\n */\n canvas: this,\n });\n newActiveSelection.multiSelectAdd(activeObject, target);\n this._hoveredTarget = newActiveSelection;\n // ISSUE 4115: should we consider subTargets here?\n // this._hoveredTargets = [];\n // this._hoveredTargets = this.targets.concat();\n this._setActiveObject(newActiveSelection, e);\n this._fireSelectionEvents([activeObject], e);\n }\n return true;\n }\n return false;\n }\n\n /**\n * ## Handles selection\n * - selects objects that are contained in (and possibly intersecting) the selection bounding box\n * - sets the active object\n * ---\n * runs on mouse up after a mouse move\n */\n protected handleSelection(e: TPointerEvent) {\n if (!this.selection || !this._groupSelector) {\n return false;\n }\n const { x, y, deltaX, deltaY } = this._groupSelector,\n point1 = new Point(x, y),\n point2 = point1.add(new Point(deltaX, deltaY)),\n tl = point1.min(point2),\n br = point1.max(point2),\n size = br.subtract(tl);\n\n const collectedObjects = this.collectObjects(\n {\n left: tl.x,\n top: tl.y,\n width: size.x,\n height: size.y,\n },\n { includeIntersecting: !this.selectionFullyContained },\n ) as FabricObject[];\n\n const objects =\n // though this method runs only after mouse move the pointer could do a mouse up on the same position as mouse down\n // should it be handled as is?\n point1.eq(point2)\n ? collectedObjects[0]\n ? [collectedObjects[0]]\n : []\n : collectedObjects.length > 1\n ? collectedObjects\n .filter((object) => !object.onSelect({ e }))\n .reverse()\n : // `setActiveObject` will call `onSelect(collectedObjects[0])` in this case\n collectedObjects;\n\n // set active object\n if (objects.length === 1) {\n // set as active object\n this.setActiveObject(objects[0], e);\n } else if (objects.length > 1) {\n // add to active selection and make it the active object\n const klass =\n classRegistry.getClass<typeof ActiveSelection>('ActiveSelection');\n this.setActiveObject(new klass(objects, { canvas: this }), e);\n }\n\n // cleanup\n this._groupSelector = null;\n return true;\n }\n\n /**\n * @override clear {@link textEditingManager}\n */\n clear() {\n this.textEditingManager.clear();\n super.clear();\n }\n\n /**\n * @override clear {@link textEditingManager}\n */\n destroy() {\n this.removeListeners();\n this.textEditingManager.dispose();\n super.destroy();\n }\n}\n"],"names":["addEventOptions","passive","getEventPoints","canvas","e","viewportPoint","getViewportPoint","scenePoint","getScenePoint","pointer","absolutePointer","addListener","el","_len","arguments","length","args","Array","_key","addEventListener","removeListener","_len2","_key2","removeEventListener","syntheticEventConfig","mouse","in","out","targetIn","targetOut","canvasIn","canvasOut","drag","Canvas","SelectableCanvas","constructor","options","undefined","_defineProperty","TextEditingManager","forEach","eventHandler","bind","addOrRemove","_getEventPrefix","enablePointerEvents","functor","_eventjsFunctor","canvasElement","upperCanvasEl","eventTypePrefix","getWindowFromElement","_onResize","_onMouseDown","concat","_onMouseMove","_onMouseOut","_onMouseEnter","_onMouseWheel","_onContextMenu","_onDoubleClick","_onDragStart","_onDragEnd","_onDragOver","_onDragEnter","_onDragLeave","_onDrop","_onTouchStart","removeListeners","doc","getDocumentFromElement","_onMouseUp","_onTouchEnd","clearTimeout","_willAddMouseDown","__onMouseWheel","target","_hoveredTarget","shared","_objectSpread","fire","_hoveredTargets","nestedTarget","_currentTransform","findTarget","_isClick","activeObject","getActiveObject","onDragStart","_dragSource","_onDragProgress","stopEvent","_renderDragEffects","source","dirty","dropTarget","_dropTarget","clearContextTop","ctx","contextTop","save","transform","viewportTransform","renderDragSourceEffect","restore","renderDropTargetEffect","contextTopDirty","didDrop","dataTransfer","dropEffect","NONE","_activeObject","subTargets","targets","dragSource","_draggedoverTarget","findDragTargets","_searchPossibleTargets","_objects","eventType","canDrop","_fireEnterLeaveEvents","i","subTarget","_basicEventHandler","stopContextMenu","_cacheTransformEventData","_handleEvent","_resetTransformEventData","getPointerId","evt","changedTouches","identifier","pointerId","_isMainEvent","isPrimary","type","touches","mainTouchId","shouldPreventScrolling","allowTouchScrolling","currentActiveObject","__onMouseDown","isDrawingMode","_target","preventDefault","__onMouseUp","setTimeout","shouldStartDragging","__onMouseMove","calcOffset","_shouldRender","_this$_activeObject","isClick","button","fireMiddleClick","fireRightClick","_isCurrentlyDrawing","_onMouseUpInDrawingMode","shouldRender","_finalizeCurrentTransform","actionPerformed","targetWasActive","handleSelection","corner","found","findControl","isTouchEvent","key","control","selectable","activeOn","setActiveObject","mouseUpHandler","getMouseUpHandler","call","x","y","isMoving","originalControl","controls","originalMouseUpHandler","_setCursorFromEvent","_groupSelector","__corner","requestRenderAll","isEditing","renderTop","currentTarget","currentSubTargets","_onMouseDownInDrawingMode","discardActiveObject","freeDrawingBrush","onMouseDown","_onMouseMoveInDrawingMode","onMouseMove","setCursor","freeDrawingCursor","onMouseUp","grouped","handleMultiSelection","_shouldClearSelection","selection","p","deltaY","deltaX","alreadySelected","handle","_setupCurrentTransform","mouseDownHandler","getMouseDownHandler","_objectsToRender","_pointer","_absolutePointer","sendPointToPlane","groupSelector","_fireOverOutEvents","_transformObject","textEditingManager","Math","max","fireSyntheticInOutEvents","oldTarget","fireCanvas","data","draggedoverTarget","_ref","_objectWithoutProperties","_excluded","targetChanged","outOpt","nextTarget","inOpt","previousTarget","localPointer","group","calcTransformMatrix","shiftKey","altKey","centeredKey","_performTransformAction","action","actionHandler","setCoords","moveCursor","defaultCursor","hoverCursor","activeSelection","isActiveSelection","subTargetCheck","reverse","map","cursorStyleHandler","isAS","_isSelectionKeyPressed","isDescendantOf","onSelect","getActiveControl","prevActiveObjects","getObjects","searchPossibleTargets","remove","size","_setActiveObject","item","multiSelectAdd","_fireSelectionEvents","exitEditing","klass","classRegistry","getClass","newActiveSelection","point1","Point","point2","add","tl","min","br","subtract","collectedObjects","collectObjects","left","top","width","height","includeIntersecting","selectionFullyContained","objects","eq","filter","object","clear","destroy","dispose"],"mappings":"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"}