{"version":3,"file":"index.cjs","sources":["../../src/binding/Binding.ts","../../src/cameras/OrthographicCameraAuto.ts","../../src/cameras/PerspectiveCameraAuto.ts","../../src/events/CursorManager.ts","../../src/events/Events.ts","../../src/events/DragAndDropManager.ts","../../src/events/InteractionEventsQueue.ts","../../src/events/RaycasterManager.ts","../../src/events/InteractionManager.ts","../../src/events/MiscEventsManager.ts","../../src/rendering/RenderView.ts","../../src/rendering/RenderManager.ts","../../src/tweening/RunningTween.ts","../../src/tweening/TweenManager.ts","../../src/utils/Stats.ts","../../src/patch/WebGLRenderer.ts","../../src/core/Main.ts","../../src/events/Default.ts","../../src/tweening/Easings.ts","../../src/tweening/Actions.ts","../../src/tweening/Tween.ts","../../src/utils/Query.ts","../../src/patch/Euler.ts","../../src/patch/Matrix4.ts","../../src/patch/Quaternion.ts","../../src/patch/Vector3.ts","../../src/patch/SmartRendering.ts","../../src/patch/Scene.ts","../../src/patch/Object3D.ts","../../src/events/EventsDispatcher.ts","../../src/events/Hitbox.ts","../../src/patch/Material.ts","../../src/utils/VectorUtils.ts","../../src/utils/IntersectionUtils.ts","../../src/utils/Utils.ts"],"sourcesContent":["import { Object3D, Scene } from 'three';\r\n\r\n/** @internal */\r\nexport interface BindingCallback<T = any> {\r\n  getValue: () => T;\r\n  setValue: (value: T) => void;\r\n  key: string;\r\n}\r\n\r\n/** @internal */\r\nexport class Binding {\r\n  public static detectChanges(target: Object3D, resursive: boolean): void {\r\n    this.executeAllCallbacks(target);\r\n    if (resursive) {\r\n      for (const child of target.children) {\r\n        this.detectChanges(child, true);\r\n      }\r\n    }\r\n  }\r\n\r\n  public static bindProperty<T>(key: string, target: Object3D, getValue: () => T, renderOnChange?: boolean): void {\r\n    if (this.getIndexByKey(target, key) > -1) {\r\n      console.error('Cannot override property already bound.');\r\n      return;\r\n    }\r\n\r\n    this.addToBoundCallbacks(key, target, getValue.bind(target), renderOnChange);\r\n    if (target.scene) {\r\n      this.bindToScene(target);\r\n    }\r\n  }\r\n\r\n  private static addToBoundCallbacks<T>(key: string, target: Object3D, getValue: () => T, renderOnChange: boolean): void {\r\n    const setValue = this.createSetValue(key, target, renderOnChange);\r\n    const bindingCallback: BindingCallback = { key, getValue, setValue };\r\n    target.__boundCallbacks.push(bindingCallback);\r\n    this.executeCallback(bindingCallback);\r\n  }\r\n\r\n  private static createSetValue<T>(key: string, target: Object3D, renderOnChange: boolean): (value: T) => void {\r\n    if (renderOnChange) {\r\n      return (value) => {\r\n        if (value !== target[key]) {\r\n          target[key] = value;\r\n          target.needsRender = true;\r\n        }\r\n      };\r\n    }\r\n    return (value) => {\r\n      if (value !== target[key]) {\r\n        target[key] = value;\r\n      }\r\n    };\r\n  }\r\n\r\n  private static getIndexByKey(target: Object3D, key: string): number {\r\n    const boundCallbacks = target.__boundCallbacks;\r\n    for (let i = 0; i < boundCallbacks.length; i++) {\r\n      if (boundCallbacks[i].key === key) return i;\r\n    }\r\n    return -1;\r\n  }\r\n\r\n  public static setManualDetectionMode(target: Object3D): void {\r\n    if (target.__manualDetection) return;\r\n    if (target.__boundCallbacks.length > 0) {\r\n      console.error('Cannot change detectChangesMode if a binding is already created.');\r\n    } else {\r\n      target.__manualDetection = true;\r\n    }\r\n  }\r\n\r\n  public static bindToScene(target: Object3D): void {\r\n    if (target.__boundCallbacks.length > 0) {\r\n      target.scene.__boundObjects.add(target);\r\n    }\r\n  }\r\n\r\n  public static unbindFromScene(target: Object3D): void {\r\n    target.scene.__boundObjects.delete(target);\r\n  }\r\n\r\n  public static unbindProperty(target: Object3D, key: string): void {\r\n    const index = this.getIndexByKey(target, key);\r\n    if (index > -1) {\r\n      target.__boundCallbacks.splice(index, 1);\r\n      if (target.scene) {\r\n        this.unbindFromScene(target);\r\n      }\r\n    }\r\n  }\r\n\r\n  private static executeCallback(bindingCallback: BindingCallback): void {\r\n    bindingCallback.setValue(bindingCallback.getValue());\r\n  }\r\n\r\n  private static executeAllCallbacks(target: Object3D): void {\r\n    const callbacks = target.__boundCallbacks;\r\n    for (const callback of callbacks) {\r\n      this.executeCallback(callback);\r\n    }\r\n  }\r\n\r\n  public static compute(scene: Scene): void {\r\n    const boundObjs = scene.__boundObjects;\r\n    for (const target of boundObjs) {\r\n      this.executeAllCallbacks(target);\r\n    }\r\n  }\r\n}\r\n","import { OrthographicCamera } from 'three';\r\n\r\n/**\r\n * Extends the OrthographicCamera to automatically resize based on a fixed width or height dimension.\r\n */\r\nexport class OrthographicCameraAuto extends OrthographicCamera {\r\n  private _size: number;\r\n  private _fixedWidth: boolean;\r\n  private _width = -1;\r\n  private _height = -1;\r\n\r\n  /**\r\n     * Gets or sets the fixed width or height dimension based on the 'fixedWidth' property.\r\n     */\r\n  public get size(): number { return this._size; }\r\n  public set size(value: number) {\r\n    this._size = value;\r\n    this.update();\r\n  }\r\n\r\n  /**\r\n     * Determines whether the 'size' property refers to the width (true) or height (false).\r\n     */\r\n  public get fixedWidth(): boolean { return this._fixedWidth; }\r\n  public set fixedWidth(value: boolean) {\r\n    this._fixedWidth = value;\r\n    this.update();\r\n  }\r\n\r\n  /**\r\n     * @param size Fixed width or height dimension based on the 'fixedWidth' property. Default `2`.\r\n     * @param fixedWidth If true, the 'size' property will refer to the width. If not, to the height. Default `true`.\r\n     * @param near Camera frustum near plane. Default `0.1`.\r\n     * @param far Camera frustum far plane. Default `2000`.\r\n     */\r\n  constructor(size = 2, fixedWidth = true, near?: number, far?: number) {\r\n    super(-1, 1, 1, -1, near, far);\r\n    this._size = size;\r\n    this._fixedWidth = fixedWidth;\r\n\r\n    this.on('viewportresize', (e) => {\r\n      this._width = e.width;\r\n      this._height = e.height;\r\n      this.update();\r\n    });\r\n  }\r\n\r\n  private update(): void {\r\n    const halfSize = 0.5 * this._size;\r\n\r\n    if (this._fixedWidth) {\r\n      const aspect = this._height / this._width;\r\n      this.left = -halfSize;\r\n      this.right = halfSize;\r\n      this.top = halfSize * aspect;\r\n      this.bottom = -halfSize * aspect;\r\n    } else {\r\n      const aspect = this._width / this._height;\r\n      this.left = -halfSize * aspect;\r\n      this.right = halfSize * aspect;\r\n      this.top = halfSize;\r\n      this.bottom = -halfSize;\r\n    }\r\n\r\n    this.updateProjectionMatrix();\r\n  }\r\n}\r\n","import { PerspectiveCamera } from 'three';\r\n\r\n/**\r\n * Extends the PerspectiveCamera to automatically adjust its aspect ratio on renderer resize.\r\n */\r\nexport class PerspectiveCameraAuto extends PerspectiveCamera {\r\n  /**\r\n     * @param fov Camera frustum vertical field of view in degrees. Default `50`.\r\n     * @param near Camera frustum near plane distance. Default `0.1`.\r\n     * @param far Camera frustum far plane distance. Default `2000`.\r\n     */\r\n  constructor(fov?: number, near?: number, far?: number) {\r\n    super(fov, undefined, near, far);\r\n\r\n    this.on('viewportresize', (e) => {\r\n      this.aspect = e.width / e.height;\r\n      this.updateProjectionMatrix();\r\n    });\r\n  }\r\n}\r\n","import { Object3D } from 'three';\r\n\r\n/** Valid cursor values based on the CSS cursor property. */\r\nexport type CursorsKeys = 'auto' | 'default' | 'none' | 'context-menu' | 'help' | 'pointer' | 'progress' | 'wait' |\r\n  'cell' | 'crosshair' | 'text' | 'vertical-text' | 'alias' | 'copy' | 'move' | 'no-drop' | 'not-allowed' | 'grab' | 'grabbing' |\r\n  'all-scroll' | 'col-resize' | 'row-resize' | 'n-resize' | 'e-resize' | 's-resize' | 'w-resize' |\r\n  'ne-resize' | 'nw-resize' | 'se-resize' | 'sw-resize' | 'ew-resize' | 'ns-resize' | 'nesw-resize' | 'nwse-resize' | 'zoom-in' | 'zoom-out';\r\n\r\nconst cursorSet = new Set([\r\n  'auto', 'default', 'none', 'context-menu', 'help', 'pointer', 'progress', 'wait',\r\n  'cell', 'crosshair', 'text', 'vertical-text', 'alias', 'copy', 'move', 'no-drop', 'not-allowed', 'grab', 'grabbing',\r\n  'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize',\r\n  'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out'\r\n]);\r\n\r\n/** Represents a cursor, either by a CSS cursor key or a URL. */\r\nexport type Cursor = CursorsKeys | String;\r\n\r\n/** @internal */\r\nexport class CursorHandler {\r\n  public enabled = true;\r\n  private _cursor: Cursor;\r\n  private _domElement: HTMLCanvasElement;\r\n\r\n  constructor(domElement: HTMLCanvasElement) {\r\n    this._domElement = domElement;\r\n  }\r\n\r\n  public update(objDragged: Object3D, objHovered: Object3D, objDropTarget: Object3D): void {\r\n    if (!this.enabled || !objHovered) return;\r\n    const cursor = this.getCursor(objDragged, objHovered, objDropTarget);\r\n    if (cursor !== this._cursor) {\r\n      this._cursor = cursor;\r\n      if (cursorSet.has(cursor as string)) {\r\n        this._domElement.style.cursor = cursor as string;\r\n      } else {\r\n        this._domElement.style.cursor = `url(${cursor}), default`;\r\n      }\r\n    }\r\n  }\r\n\r\n  private getCursor(objDragged: Object3D, objHovered: Object3D, objDropTarget: Object3D): Cursor {\r\n    if (objDropTarget) return objDropTarget.cursorDrop ?? 'alias';\r\n    if (objDragged) return objDragged.cursorDrag ?? 'grabbing';\r\n    if (objHovered.cursor) return objHovered.cursor;\r\n    if (!objHovered.enabledState) return 'default';\r\n    return objHovered.draggable ? 'grab' : 'pointer';\r\n  }\r\n}\r\n","import { Camera, Intersection, Object3D, Vector3, WebGLRenderer } from 'three';\r\nimport { Hitbox } from './Hitbox.js';\r\n\r\nexport type MiscUpdateEvents = MiscEvents & UpdateEvents;\r\nexport type Events = InteractionEvents & MiscUpdateEvents;\r\n\r\n/**\r\n * Represents events related to updates. These events do not propagate to parents.\r\n */\r\nexport interface UpdateEvents {\r\n  /** Event triggered when the position of the object changes. */\r\n  positionchange: never;\r\n  /** Event triggered when the scale of the object changes. */\r\n  scalechange: never;\r\n  /** Event triggered when the rotation of the object changes. */\r\n  rotationchange: never;\r\n  /** Event triggered when the enabledState of the object changes (either its own or the parent's `enabled` property). */\r\n  enabledchange: PropertyChangeEvent<boolean>;\r\n  /** Event triggered when the visibilityState of the object changes (either its own or the parent's `visible` property). */\r\n  visiblechange: PropertyChangeEvent<boolean>;\r\n}\r\n\r\n/**\r\n * Represents miscellaneous events. These events do not propagate to parents.\r\n */\r\nexport interface MiscEvents {\r\n  /** Event triggered on first render and every time an object is rendered with a different viewport size from the previous one. */\r\n  viewportresize: ViewportResizeEvent;\r\n  /** Event triggered every frame, before 'animate'. Usually used to prepare object animations. */\r\n  beforeanimate: AnimateEvent;\r\n  /** Event triggered every frame. Used to animate objects. */\r\n  animate: AnimateEvent;\r\n  /** Event triggered every frame, after 'animate'. Usually used if you want to operate after the animation is computed. */\r\n  afteranimate: AnimateEvent;\r\n}\r\n\r\n/**\r\n * Represents interaction events. These events propagate to parents.\r\n * @typeparam T - The primary target type.\r\n * @typeparam R - The related target type.\r\n * @typeparam RD - The related target type on drag events.\r\n */\r\nexport interface InteractionEvents<T = Object3D, R = Object3D, RD = Object3D> { // TODO remove generics\r\n  /** Event triggered when a pointer enters the target. */\r\n  pointerover: PointerEventExt<T, R>;\r\n  /** Event triggered when a pointer enters the target (no propagation). */\r\n  pointerenter: PointerEventExt<T, R>;\r\n  /** Event triggered when a pointer leaves the target. */\r\n  pointerout: PointerEventExt<T, R>;\r\n  /** Event triggered when a pointer leaves the target (no propagation). */\r\n  pointerleave: PointerEventExt<T, R>;\r\n  /** Event triggered when a pointer moves over the target. */\r\n  pointermove: PointerEventExt<T, R>;\r\n  /** Event triggered when a pointer button is pressed. */\r\n  pointerdown: PointerEventExt<T, R>;\r\n  /** Event triggered when a pointer button is released. */\r\n  pointerup: PointerEventExt<T, R>;\r\n  /** Event triggered if pointer is on target. Triggers every frame and only works if the scene has 'continuousRaycasting' equal to true. */\r\n  pointerintersection: PointerIntersectionEvent<T>;\r\n  /** Event triggered when a click event occurs. */\r\n  click: PointerEventExt<T, R>;\r\n  /** Event triggered when a double click event occurs. */\r\n  dblclick: PointerEventExt<T, R>;\r\n  /** Event triggered when scrolling the mouse wheel. */\r\n  wheel: WheelEventExt<T>;\r\n  /** Event triggered when target gains focus (no propagation). */\r\n  focusin: FocusEventExt<T, R>;\r\n  /** Event triggered when target loses focus (no propagation). */\r\n  focusout: FocusEventExt<T, R>;\r\n  /** Event triggered when target gains focus. */\r\n  focus: FocusEventExt<T, R>;\r\n  /** Event triggered when target loses focus. */\r\n  blur: FocusEventExt<T, R>;\r\n  /** Event triggered on the focused object when a key is pressed. */\r\n  keydown: KeyboardEventExt<T>;\r\n  /** Event triggered on the focused object when a key is released. */\r\n  keyup: KeyboardEventExt<T>;\r\n  /** Event triggered when the target is dragged. */\r\n  drag: DragEventExt<T, RD>;\r\n  /** Event triggered when dragging starts. */\r\n  dragstart: DragEventExt<T, RD>;\r\n  /** Event triggered when dragging ends. */\r\n  dragend: DragEventExt<T, RD>;\r\n  /** Event triggered when dragging is canceled (Can be canceled pressing 'ESC'). This is triggered on target and dropTarget. */\r\n  dragcancel: DragEventExt<T, RD>;\r\n  /** Event triggered when a draggable object enters a drop target. */\r\n  dragenter: DragEventExt<T, RD>;\r\n  /**\r\n   * Event triggered when a draggable object moves over the drop target.\r\n   * Triggers every frame if the scene has 'continuousRaycastingDropTarget' equal to true.\r\n   */\r\n  dragover: DragEventExt<T, RD>;\r\n  /** Event triggered when a draggable object leaves a drop target. */\r\n  dragleave: DragEventExt<T, RD>;\r\n  /** Event triggered when a draggable object is dropped onto a drop target. */\r\n  drop: DragEventExt<T, RD>;\r\n}\r\n\r\n/**\r\n * Represents an extended intersection between a ray and 3D objects in a scene.\r\n */\r\nexport interface IntersectionExt extends Intersection {\r\n  object: Object3D;\r\n  /** The hitbox hit by the raycaster. */\r\n  hitbox: Hitbox;\r\n}\r\n\r\n/**\r\n * Represents a custom extended event.\r\n */\r\nexport class EventExt<T = Object3D> {\r\n  /** A boolean value indicating whether or not the event bubbles up through the DOM. */\r\n  public get bubbles(): boolean { return this._bubbles; }\r\n  /** A boolean value indicating whether the event is cancelable. */\r\n  public readonly cancelable: boolean;\r\n  /** A reference to the currently registered target for the event. This is the object to which the event is currently slated to be sent. It's possible this has been changed along the way through retargeting. */\r\n  public currentTarget: T;\r\n  /** Indicates whether or not the call to event.preventDefault() canceled the event. */\r\n  public get defaultPrevented(): boolean { return this._defaultPrevented; }\r\n  /** A reference to the object to which the event was originally dispatched. */\r\n  public get target(): T { return this._target; }\r\n  /** The time at which the event was created (in milliseconds). By specification, this value is time since epoch—but in reality, browsers' definitions vary. In addition, work is underway to change this to be a DOMHighResTimeStamp instead. */\r\n  public readonly timeStamp = performance.now();\r\n  /** The case-insensitive name identifying the type of the event. */\r\n  public get type(): keyof Events { return this._type; }\r\n\r\n  /** @internal */ public _defaultPrevented: boolean;\r\n  /** @internal */ public _stoppedImmediatePropagation: boolean;\r\n  /** @internal */ public _bubbles: boolean;\r\n  /** @internal */ public _type: keyof Events;\r\n  /** @internal */ public _target: T;\r\n\r\n  /**\r\n   * @param cancelable A boolean value indicating whether the event is cancelable.\r\n   */\r\n  constructor(cancelable = false) {\r\n    this.cancelable = cancelable;\r\n  }\r\n\r\n  /** Cancels the event. */\r\n  public preventDefault(): void {\r\n    this._defaultPrevented = true;\r\n  }\r\n\r\n  /** For this particular event, prevent all other listeners from being called. This includes listeners attached to the same element as well as those attached to elements that will be traversed later (during the capture phase, for instance). */\r\n  public stopImmediatePropagation(): void {\r\n    this._stoppedImmediatePropagation = true;\r\n  }\r\n\r\n  /** Stops the propagation of events further along in the Object3D hierarchy. */\r\n  public stopPropagation(): void {\r\n    this._bubbles = false;\r\n  }\r\n}\r\n\r\n/**\r\n * Represents a custom extended mouse event.\r\n * @template T - The type of the primary target for the event (default is `Object3D`).\r\n * @template R - The type of the related target for the event (default is `Object3D`).\r\n */\r\nexport class MouseEventExt<T = Object3D, R = Object3D> extends EventExt<T> {\r\n  /** Original dom event. */\r\n  public readonly domEvent: MouseEvent;\r\n  /** Returns true if the alt key was down when the mouse event was fired. */\r\n  public get altKey(): boolean { return this.domEvent.altKey; }\r\n  /** The button number that was pressed (if applicable) when the mouse event was fired. */\r\n  public get button(): number { return this.domEvent.button; }\r\n  /** The buttons being pressed (if any) when the mouse event was fired. */\r\n  public get buttons(): number { return this.domEvent.buttons; }\r\n  /** The X coordinate of the mouse pointer in local (DOM content) coordinates. */\r\n  public get clientX(): number { return this.domEvent.clientX; }\r\n  /** The Y coordinate of the mouse pointer in local (DOM content) coordinates. */\r\n  public get clientY(): number { return this.domEvent.clientY; }\r\n  /** Returns true if the control key was down when the mouse event was fired. */\r\n  public get ctrlKey(): boolean { return this.domEvent.ctrlKey; }\r\n  /** Returns true if the meta key was down when the mouse event was fired. */\r\n  public get metaKey(): boolean { return this.domEvent.metaKey; }\r\n  /** The X coordinate of the pointer relative to the position of the last event. */\r\n  public get movementX(): number { return this.domEvent.movementX; }\r\n  /** The Y coordinate of the pointer relative to the position of the last event. */\r\n  public get movementY(): number { return this.domEvent.movementY; }\r\n  /** The X coordinate of the mouse pointer relative to the position of the padding edge of the target node. */\r\n  public get offsetX(): number { return this.domEvent.offsetX; }\r\n  /** The Y coordinate of the mouse pointer relative to the position of the padding edge of the target node. */\r\n  public get offsetY(): number { return this.domEvent.offsetY; }\r\n  /** The X coordinate of the mouse pointer relative to the whole document. */\r\n  public get pageX(): number { return this.domEvent.pageX; }\r\n  /** The Y coordinate of the mouse pointer relative to the whole document. */\r\n  public get pageY(): number { return this.domEvent.pageY; }\r\n  /** The secondary target for the event, if there is one. */\r\n  public readonly relatedTarget: R;\r\n  /** The X coordinate of the mouse pointer in global (screen) coordinates. */\r\n  public get screenX(): number { return this.domEvent.screenX; }\r\n  /** The Y coordinate of the mouse pointer in global (screen) coordinates. */\r\n  public get screenY(): number { return this.domEvent.screenY; }\r\n  /** Returns true if the shift key was down when the mouse event was fired. */\r\n  public get shiftKey(): boolean { return this.domEvent.shiftKey; }\r\n  /** Returns the intersection information between the mouse event and 3D objects in the scene. */\r\n  public readonly intersection: IntersectionExt;\r\n\r\n  /**\r\n   * @param event Original dom event.\r\n   * @param intersection The intersection information between the mouse event and 3D objects in the scene.\r\n   * @param relatedTarget The secondary target for the event.\r\n   * @param cancelable A boolean value indicating whether the event is cancelable.\r\n   */\r\n  constructor(event: MouseEvent, intersection: IntersectionExt, relatedTarget?: R, cancelable?: boolean) {\r\n    super(cancelable);\r\n    this.domEvent = event;\r\n    this.intersection = intersection;\r\n    this.relatedTarget = relatedTarget;\r\n  }\r\n\r\n  /** Returns the current state of the specified modifier key. See KeyboardEvent.getModifierState() for details. */\r\n  public getModifierState(keyArg: string): boolean {\r\n    return this.domEvent.getModifierState(keyArg);\r\n  }\r\n}\r\n\r\n/**\r\n * Represents a custom extended pointer event.\r\n * @template T - The type of the primary target for the event (default is `Object3D`).\r\n * @template R - The type of the related target for the event (default is `Object3D`).\r\n */\r\nexport class PointerEventExt<T = Object3D, R = Object3D> extends MouseEventExt<T, R> {\r\n  declare public readonly domEvent: PointerEvent;\r\n  /** A unique identifier for the pointer causing the event. */\r\n  public get pointerId(): number { return this.domEvent.pointerId; }\r\n  /** The width (magnitude on the X axis), in CSS pixels, of the contact geometry of the pointer. */\r\n  public get width(): number { return this.domEvent.width; }\r\n  /** The height (magnitude on the Y axis), in CSS pixels, of the contact geometry of the pointer. */\r\n  public get height(): number { return this.domEvent.height; }\r\n  /** The normalized pressure of the pointer input in the range 0 to 1, where 0 and 1 represent the minimum and maximum pressure the hardware is capable of detecting, respectively. */\r\n  public get pressure(): number { return this.domEvent.pressure; }\r\n  /** The normalized tangential pressure of the pointer input (also known as barrel pressure or cylinder stress) in the range -1 to 1, where 0 is the neutral position of the control. */\r\n  public get tangentialPressure(): number { return this.domEvent.tangentialPressure; }\r\n  /** The plane angle (in degrees, in the range of -90 to 90) between the Y–Z plane and the plane containing both the pointer (e.g. pen stylus) axis and the Y axis. */\r\n  public get tiltX(): number { return this.domEvent.tiltX; }\r\n  /** The plane angle (in degrees, in the range of -90 to 90) between the X–Z plane and the plane containing both the pointer (e.g. pen stylus) axis and the X axis. */\r\n  public get tiltY(): number { return this.domEvent.tiltY; }\r\n  /** The clockwise rotation of the pointer (e.g. pen stylus) around its major axis in degrees, with a value in the range 0 to 359. */\r\n  public get twist(): number { return this.domEvent.twist; }\r\n  /** Indicates the device type that caused the event (mouse, pen, touch, etc.). */\r\n  public get pointerType(): string { return this.domEvent.pointerType; }\r\n  /** Indicates if the pointer represents the primary pointer of this pointer type. */\r\n  public get isPrimary(): boolean { return this.domEvent.isPrimary; }\r\n}\r\n\r\n/**\r\n * Represents a custom extended drag event.\r\n * @template T - The type of the primary target for the event (default is `Object3D`).\r\n * @template R - The type of the related target for the event (default is `Object3D`).\r\n */\r\nexport class DragEventExt<T = Object3D, R = Object3D> extends PointerEventExt<T, R> { // TODO remove generic\r\n  /** The data that is transferred during a drag and drop interaction. */\r\n  public readonly dataTransfer: { [x: string]: any };\r\n  /** Returns the new position of the dragged object.' */\r\n  public readonly position: Vector3;\r\n\r\n  /**\r\n   * @param event Original dom event.\r\n   * @param cancelable A boolean value indicating whether the event is cancelable.\r\n   * @param dataTransfer The data that is transferred during a drag and drop interaction.\r\n   * @param position The new position of the dragged object.\r\n   * @param relatedTarget The secondary target for the event.\r\n   * @param intersection The intersection information between the mouse event and 3D objects in the scene.\r\n   */\r\n  constructor(event?: PointerEvent, cancelable?: boolean, dataTransfer: { [x: string]: any } = {}, position?: Vector3, relatedTarget?: R, intersection?: IntersectionExt) {\r\n    super(event, intersection, relatedTarget, cancelable);\r\n    this.position = position;\r\n    this.dataTransfer = dataTransfer;\r\n  }\r\n}\r\n\r\n/**\r\n * Represents a custom extended wheel event.\r\n * @template T - The type of the primary target for the event (default is `Object3D`).\r\n * @template R - The type of the related target for the event (default is `Object3D`).\r\n */\r\nexport class WheelEventExt<T = Object3D, R = Object3D> extends MouseEventExt<T, R> {\r\n  declare public readonly domEvent: WheelEvent;\r\n  /*  Returns an unsigned long representing the unit of the delta* values' scroll amount. Permitted values are: 0 = pixels, 1 = lines, 2 = pages. */\r\n  public get deltaMode(): number { return this.domEvent.deltaMode; }\r\n  /** Returns a double representing the horizontal scroll amount. */\r\n  public get deltaX(): number { return this.domEvent.deltaX; }\r\n  /** Returns a double representing the vertical scroll amount. */\r\n  public get deltaY(): number { return this.domEvent.deltaY; }\r\n  /** Returns a double representing the scroll amount for the z-axis. */\r\n  public get deltaZ(): number { return this.domEvent.deltaZ; }\r\n}\r\n\r\n/**\r\n * Represents a pointer intersection event.\r\n * @template T - The type of the primary target for the event (default is `Object3D`).\r\n */\r\nexport class PointerIntersectionEvent<T = Object3D> extends EventExt<T> {\r\n  /** Returns the intersection information between the mouse event and 3D objects in the scene. */\r\n  public readonly intersection: IntersectionExt;\r\n\r\n  /**\r\n   * @param intersection The intersection information between the mouse event and 3D objects in the scene.\r\n   */\r\n  constructor(intersection: IntersectionExt) {\r\n    super();\r\n    this.intersection = intersection;\r\n  }\r\n}\r\n\r\n/**\r\n * Represents a custom extended keyboard event.\r\n * @template T - The type of the primary target for the event (default is `Object3D`).\r\n */\r\nexport class KeyboardEventExt<T = Object3D> extends EventExt<T> {\r\n  /** Original dom event. */\r\n  public readonly domEvent: KeyboardEvent;\r\n  /** Returns a boolean value that is true if the Alt (Option or ⌥ on macOS) key was active when the key event was generated. */\r\n  public get altKey(): boolean { return this.domEvent.altKey; }\r\n  /** Returns a string with the code value of the physical key represented by the event. */\r\n  public get code(): string { return this.domEvent.code; }\r\n  /** Returns a boolean value that is true if the Ctrl key was active when the key event was generated. */\r\n  public get ctrlKey(): boolean { return this.domEvent.ctrlKey; }\r\n  /** Returns a string representing the key value of the key represented by the event. */\r\n  public get key(): string { return this.domEvent.key; }\r\n  /** Returns a number representing the location of the key on the keyboard or other input device. Visit https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/location for more info. */\r\n  public get location(): number { return this.domEvent.location; }\r\n  /** Returns a boolean value that is true if the Meta key (on Mac keyboards, the ⌘ Command key; on Windows keyboards, the Windows key (⊞)) was active when the key event was generated. */\r\n  public get metaKey(): boolean { return this.domEvent.metaKey; }\r\n  /** Returns a boolean value that is true if the key is being held down such that it is automatically repeating. */\r\n  public get repeat(): boolean { return this.domEvent.repeat; }\r\n  /** Returns a boolean value that is true if the Shift key was active when the key event was generated. */\r\n  public get shiftKey(): boolean { return this.domEvent.shiftKey; }\r\n\r\n  /**\r\n   * @param event Original dom event.\r\n   * @param cancelable A boolean value indicating whether the event is cancelable.\r\n   */\r\n  constructor(event: KeyboardEvent, cancelable: boolean) {\r\n    super(cancelable);\r\n    this.domEvent = event;\r\n  }\r\n\r\n  /** Returns a boolean value indicating if a modifier key such as Alt, Shift, Ctrl, or Meta, was pressed when the event was created. */\r\n  public getModifierState(keyArg: string): boolean {\r\n    return this.domEvent.getModifierState(keyArg);\r\n  }\r\n}\r\n\r\n/**\r\n * Represents a custom extended focus event.\r\n * @template T - The type of the primary target for the event (default is `Object3D`).\r\n * @template R - The type of the related target for the event (default is `Object3D`).\r\n */\r\nexport class FocusEventExt<T = Object3D, R = Object3D> extends EventExt<T> {\r\n  /** The secondary target for the event. */\r\n  public relatedTarget: R;\r\n\r\n  /**\r\n   * @param relatedTarget The secondary target for the event.\r\n   */\r\n  constructor(relatedTarget: R) {\r\n    super();\r\n    this.relatedTarget = relatedTarget;\r\n  }\r\n}\r\n\r\n/**\r\n * Represents an event related to resizing of a renderer.\r\n */\r\nexport interface ViewportResizeEvent {\r\n  /** Returns new render width. */\r\n  width: number;\r\n  /** Returns the render height. */\r\n  height: number;\r\n  /** Returns renderer. */\r\n  renderer: WebGLRenderer;\r\n  /** Returns rendering camera. */\r\n  camera: Camera;\r\n}\r\n\r\n/**\r\n * Represents an event related to animation.\r\n */\r\nexport interface AnimateEvent {\r\n  /** The difference in time between the current animation frame and the previous one (in milliseconds). */\r\n  delta: DOMHighResTimeStamp;\r\n  /** The total amount of time that has passed since the animation started (in milliseconds). */\r\n  total: DOMHighResTimeStamp;\r\n}\r\n\r\n/**\r\n * Represents a property change event.\r\n * @template V - The type of the new value associated with the property change.\r\n */\r\nexport interface PropertyChangeEvent<V> {\r\n  /** A reference to the object to which the event was originally dispatched. */\r\n  target: Object3D;\r\n  /** The new value associated with the property change. */\r\n  value: V;\r\n}\r\n","import { Plane, Matrix4, Vector3, Raycaster, Camera, Object3D } from 'three';\r\nimport { DragEventExt, InteractionEvents, IntersectionExt } from './Events.js';\r\n\r\n/** @internal */\r\nexport class DragAndDropManager {\r\n  public isDragging = false;\r\n  public dragButtons = [0];\r\n  private readonly _plane = new Plane();\r\n  private readonly _offset = new Vector3();\r\n  private readonly _intersection = new Vector3();\r\n  private readonly _worldPosition = new Vector3();\r\n  private readonly _inverseMatrix = new Matrix4();\r\n  private readonly _startPosition = new Vector3();\r\n  private readonly _originalIntersection = new Vector3();\r\n  private _target: Object3D;\r\n  private readonly _targetMatrixWorld = new Matrix4();\r\n  private _dataTransfer: { [x: string]: any };\r\n  private _lastDropTarget: Object3D;\r\n  private readonly _raycaster: Raycaster;\r\n  private _startIntersection: IntersectionExt;\r\n\r\n  public get target(): Object3D { return this._target; }\r\n  public get findDropTarget(): boolean { return this._target.findDropTarget; }\r\n\r\n  constructor(raycaster: Raycaster) {\r\n    this._raycaster = raycaster;\r\n  }\r\n\r\n  public needsDrag(event: PointerEvent, camera: Camera): boolean {\r\n    if (this.isDragging) return true;\r\n    if (this._target) {\r\n      this.startDragging(event, camera);\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  public performDrag(event: PointerEvent, camera: Camera, dropTargetIntersection: IntersectionExt): void {\r\n    if (!event.isPrimary) return;\r\n\r\n    this._plane.setFromNormalAndCoplanarPoint(camera.getWorldDirection(this._plane.normal), this._worldPosition.setFromMatrixPosition(this._targetMatrixWorld));\r\n    this._raycaster.ray.intersectPlane(this._plane, this._intersection);\r\n    this._intersection.sub(this._offset).applyMatrix4(this._inverseMatrix);\r\n    this._originalIntersection.copy(this._intersection);\r\n\r\n    const dragEvent = this.trigger('drag', event, this._target, true, this._intersection, dropTargetIntersection?.object, dropTargetIntersection);\r\n\r\n    if (!dragEvent._defaultPrevented && !this._target.position.equals(this._intersection)) {\r\n      this._target.position.copy(this._intersection);\r\n      this._offset.add(this._originalIntersection.sub(this._target.position));\r\n    }\r\n\r\n    this.dropTargetEvent(event, dropTargetIntersection);\r\n  }\r\n\r\n  public initDrag(event: PointerEvent, target: Object3D, intersection: IntersectionExt): void {\r\n    if (this.isDragButton(event) && target?.draggable) {\r\n      if (target.enabledState) {\r\n        this._target = target.dragTarget ?? target;\r\n        this._startIntersection = intersection;\r\n      }\r\n    }\r\n  }\r\n\r\n  public startDragging(event: PointerEvent, camera: Camera): void {\r\n    const currentTarget = this._target;\r\n    this._target.__dragging = true;\r\n    this.isDragging = true;\r\n    this._startPosition.copy(currentTarget.position);\r\n    this.trigger('dragstart', event, this._target, false, undefined, undefined, this._startIntersection);\r\n\r\n    const matrixWorld = currentTarget.matrixWorld;\r\n    this._plane.setFromNormalAndCoplanarPoint(camera.getWorldDirection(this._plane.normal), this._worldPosition.setFromMatrixPosition(matrixWorld));\r\n    this._raycaster.ray.intersectPlane(this._plane, this._intersection);\r\n    this._targetMatrixWorld.copy(matrixWorld);\r\n    this._inverseMatrix.copy(currentTarget.parent.matrixWorld).invert();\r\n    this._offset.copy(this._intersection).sub(this._worldPosition.setFromMatrixPosition(matrixWorld));\r\n\r\n    if (currentTarget.findDropTarget) {\r\n      this._dataTransfer = {};\r\n    }\r\n  }\r\n\r\n  public cancelDragging(event: PointerEvent): boolean {\r\n    if (this._target) {\r\n      const cancelEvent = this.trigger('dragcancel', event, this._target, true, undefined, this._lastDropTarget);\r\n      if (cancelEvent._defaultPrevented) return false;\r\n\r\n      if (!this._target.position.equals(this._startPosition)) {\r\n        this._target.position.copy(this._startPosition);\r\n      }\r\n\r\n      this.trigger('dragcancel', event, this._lastDropTarget, false, undefined, this._target);\r\n\r\n      this.dragEnd(event);\r\n      this.clear();\r\n    }\r\n    return true;\r\n  }\r\n\r\n  public stopDragging(event: PointerEvent): boolean {\r\n    if (!event.isPrimary) return false;\r\n    if (!this.isDragging) {\r\n      this._target = undefined;\r\n      return false;\r\n    }\r\n\r\n    this.trigger('drop', event, this._lastDropTarget, false, undefined, this._target);\r\n\r\n    this.dragEnd(event);\r\n    this.clear();\r\n    return true;\r\n  }\r\n\r\n  private dragEnd(event: PointerEvent): void {\r\n    this.trigger('dragend', event, this._target, false, undefined, this._lastDropTarget);\r\n  }\r\n\r\n  private clear(): void {\r\n    this.isDragging = false;\r\n    this._target.__dragging = false;\r\n    this._target = undefined;\r\n    this._dataTransfer = undefined;\r\n    this._lastDropTarget = undefined;\r\n  }\r\n\r\n  private trigger(type: keyof InteractionEvents, event: PointerEvent, target: Object3D, cancelable: boolean, position?: Vector3, relatedTarget?: Object3D, intersection?: IntersectionExt): DragEventExt {\r\n    if (target) {\r\n      const dragEvent = new DragEventExt(event, cancelable, this._dataTransfer, position, relatedTarget, intersection);\r\n      target.__eventsDispatcher.dispatchDOMAncestor(type, dragEvent);\r\n      return dragEvent;\r\n    }\r\n  }\r\n\r\n  public dropTargetEvent(event: PointerEvent, dropTargetIntersection: IntersectionExt): void {\r\n    if (this.findDropTarget) {\r\n      const dropTarget = dropTargetIntersection?.object;\r\n      const lastDropTarget = this._lastDropTarget;\r\n      const dropTargetPoint = dropTargetIntersection?.point;\r\n      this._lastDropTarget = dropTarget;\r\n\r\n      if (dropTarget !== lastDropTarget) {\r\n        this.trigger('dragleave', event, lastDropTarget, false, dropTargetPoint, this._target, dropTargetIntersection);\r\n        this.trigger('dragenter', event, dropTarget, false, dropTargetPoint, this._target, dropTargetIntersection);\r\n      }\r\n\r\n      this.trigger('dragover', event, dropTarget, false, dropTargetPoint, this._target, dropTargetIntersection);\r\n    }\r\n  }\r\n\r\n  private isDragButton(event: PointerEvent): boolean {\r\n    return event.isPrimary && ((event.pointerType === 'mouse' && this.dragButtons.some((x) => x === event.button)) || event.pointerType !== 'mouse');\r\n  }\r\n}\r\n","/**\r\n * @internal\r\n * Syncronize DOM events with the frame generation, discarding ripetitive pointermove event.\r\n */\r\nexport class InteractionEventsQueue {\r\n  public multitouch: boolean;\r\n  private _items: Event[] = [];\r\n\r\n  public enqueue(event: Event): void {\r\n    if (!this.multitouch && (event as PointerEvent).isPrimary === false) return;\r\n    if (this.isValidEvent(event)) {\r\n      this._items.push(event);\r\n    }\r\n  }\r\n\r\n  private isValidEvent(event: Event): boolean {\r\n    if (event.type === 'pointermove') {\r\n      for (let i = this._items.length - 1; i >= 0; i--) {\r\n        const item = this._items[i] as PointerEvent;\r\n        if (item.pointerId === (event as PointerEvent).pointerId) {\r\n          const type = item.type;\r\n          if (type === 'pointermove') {\r\n            this._items[i] = event;\r\n            return false;\r\n          }\r\n          if (type === 'pointerdown' || type === 'pointerout' || type === 'pointerover' || type === 'pointerup') break;\r\n        }\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  public dequeue(): Event[] {\r\n    const items = this._items;\r\n    this._items = [];\r\n    return items;\r\n  }\r\n}\r\n","import { Object3D, PerspectiveCamera, Raycaster, Vector2 } from 'three';\r\nimport { RenderManager } from '../rendering/RenderManager.js';\r\nimport { IntersectionExt } from './Events.js';\r\nimport { Hitbox } from './Hitbox.js';\r\n\r\n/**\r\n * A custom sorting comparison function used for ordering intersections during raycasting.\r\n * @param a - The first intersection to compare.\r\n * @param b - The second intersection to compare.\r\n * @returns A negative value if `a` should precede `b`, a positive value if `b` should precede `a`, or zero if their order is indeterminate.\r\n */\r\nexport type RaycasterSortComparer = (a: IntersectionExt, b: IntersectionExt) => number;\r\n\r\n/** @internal */\r\nexport class RaycasterManager {\r\n  public raycaster = new Raycaster();\r\n  public raycasterSortComparer: RaycasterSortComparer = (a: IntersectionExt, b: IntersectionExt) => a.distance - b.distance;\r\n  public pointer = new Vector2();\r\n  public pointerOnCanvas = true; // it's true because the pointerenter event is not fired if the pointer is already on canvas after refresh\r\n  private readonly _computedPointer = new Vector2();\r\n  private readonly _renderManager: RenderManager;\r\n\r\n  constructor(renderManager: RenderManager) {\r\n    this._renderManager = renderManager;\r\n  }\r\n\r\n  public getIntersections(event: PointerEvent, isDragging: boolean, excluded?: Object3D): IntersectionExt[] {\r\n    const intersections: IntersectionExt[] = [];\r\n    const canvasBounds = this._renderManager.renderer.domElement.getBoundingClientRect();\r\n    this.pointer.set(event.clientX - canvasBounds.left, event.clientY - canvasBounds.top);\r\n    if (this.getComputedMousePosition(this.pointer, this._computedPointer, isDragging, event.isPrimary)) {\r\n      const scene = this._renderManager.activeScene;\r\n      const camera = this._renderManager.activeView.camera;\r\n      this.raycaster.setFromCamera(this._computedPointer, camera);\r\n      this.raycaster.far = (camera as PerspectiveCamera).far ?? Infinity;\r\n      if (!isDragging || excluded) {\r\n        this.raycastObjects(scene, intersections, excluded);\r\n      }\r\n      intersections.sort(this.raycasterSortComparer);\r\n    }\r\n    return intersections;\r\n  }\r\n\r\n  private getComputedMousePosition(mouse: Vector2, target: Vector2, isDragging: boolean, isPrimary: boolean): boolean {\r\n    if (!isDragging && isPrimary) {\r\n      this._renderManager.updateActiveView(mouse, this.pointerOnCanvas);\r\n    }\r\n    const activeView = this._renderManager.activeView;\r\n    if (!activeView?.enabled || activeView !== this._renderManager.hoveredView) return false;\r\n    const viewport = activeView.computedViewport;\r\n    target.set((mouse.x - viewport.left) / viewport.width * 2 - 1, (mouse.y - viewport.top) / viewport.height * -2 + 1);\r\n    return true;\r\n  }\r\n\r\n  private raycastObjects(object: Object3D, target: IntersectionExt[], excluded?: Object3D): IntersectionExt[] {\r\n    if (object === excluded) return;\r\n\r\n    if (object.interceptByRaycaster && object.visible) {\r\n      for (const obj of object.children) {\r\n        this.raycastObjects(obj, target, excluded);\r\n      }\r\n\r\n      let previousCount = target.length;\r\n\r\n      if (object.hitboxes) {\r\n        for (const hitbox of object.hitboxes) {\r\n          hitbox.updateMatrix();\r\n          hitbox.matrixWorld.multiplyMatrices(object.matrixWorld, hitbox.matrix);\r\n          this.raycaster.intersectObject(hitbox, false, target);\r\n        }\r\n      } else {\r\n        this.raycaster.intersectObject(object, false, target);\r\n      }\r\n\r\n      while (target.length > previousCount) {\r\n        const intersection = target[previousCount];\r\n        intersection.hitbox = intersection.object as Hitbox;\r\n        intersection.object = object;\r\n        previousCount++;\r\n      }\r\n    }\r\n\r\n    return target;\r\n  }\r\n}\r\n","import { Object3D, WebGLRenderer } from 'three';\r\nimport { RenderManager } from '../rendering/RenderManager.js';\r\nimport { CursorHandler } from './CursorManager.js';\r\nimport { DragAndDropManager } from './DragAndDropManager.js';\r\nimport { InteractionEvents, IntersectionExt, KeyboardEventExt, PointerEventExt, PointerIntersectionEvent, WheelEventExt } from './Events.js';\r\nimport { InteractionEventsQueue } from './InteractionEventsQueue.js';\r\nimport { RaycasterManager } from './RaycasterManager.js';\r\n\r\n/** @internal */\r\nexport class InteractionManager {\r\n  public raycasterManager: RaycasterManager;\r\n  public cursorManager: CursorHandler;\r\n  public dragManager: DragAndDropManager;\r\n  public queue = new InteractionEventsQueue();\r\n  private _intersection: { [x: string]: IntersectionExt } = {};\r\n  private _intersectionDropTarget: IntersectionExt;\r\n  private readonly _renderManager: RenderManager;\r\n  private _primaryIdentifier: number;\r\n  private _pointerDownTarget: { [x: string]: Object3D } = {};\r\n  private _lastPointerDown: { [x: string]: PointerEvent } = {};\r\n  private _lastPointerMove: { [x: string]: PointerEvent } = {};\r\n  private _lastClickTarget: Object3D;\r\n  private _lastClickTimeStamp: DOMHighResTimeStamp;\r\n  private _lastHoveredTarget: { [x: string]: Object3D } = {};\r\n  private _primaryRaycasted: boolean;\r\n  private _mouseDetected = false;\r\n  private _isTapping = false;\r\n\r\n  constructor(renderManager: RenderManager) {\r\n    this._renderManager = renderManager;\r\n    const renderer = renderManager.renderer;\r\n    this.registerRenderer(renderer);\r\n    this.cursorManager = new CursorHandler(renderer.domElement);\r\n    this.raycasterManager = new RaycasterManager(renderManager);\r\n    this.dragManager = new DragAndDropManager(this.raycasterManager.raycaster);\r\n  }\r\n\r\n  public registerRenderer(renderer: WebGLRenderer): void {\r\n    renderer.domElement.addEventListener('pointermove', (e) => this._mouseDetected = e.pointerType === 'mouse');\r\n    renderer.domElement.addEventListener('pointerdown', (e) => this._isTapping = e.pointerType !== 'mouse' && e.isPrimary);\r\n    renderer.domElement.addEventListener('pointerup', (e) => this._isTapping &&= !e.isPrimary);\r\n    renderer.domElement.addEventListener('pointercancel', (e) => this._isTapping &&= !e.isPrimary);\r\n    this.bindEvents(renderer);\r\n  }\r\n\r\n  private bindEvents(renderer: WebGLRenderer): void {\r\n    const domElement = renderer.domElement;\r\n    domElement.addEventListener('pointerenter', this.enqueue.bind(this));\r\n    domElement.addEventListener('pointerleave', this.enqueue.bind(this));\r\n    domElement.addEventListener('pointerdown', this.enqueue.bind(this));\r\n    domElement.addEventListener('pointermove', this.enqueue.bind(this));\r\n    document.addEventListener('pointerup', this.enqueue.bind(this));\r\n    document.addEventListener('pointercancel', this.enqueue.bind(this));\r\n    domElement.addEventListener('wheel', this.enqueue.bind(this), { passive: true });\r\n    domElement.tabIndex = -1;\r\n    domElement.addEventListener('keydown', this.enqueue.bind(this));\r\n    domElement.addEventListener('keyup', this.enqueue.bind(this));\r\n  }\r\n\r\n  private enqueue(event: Event): void {\r\n    this.queue.enqueue(event);\r\n  }\r\n\r\n  public update(): void {\r\n    this._renderManager.update();\r\n    this._primaryRaycasted = false;\r\n    for (const event of this.queue.dequeue()) {\r\n      this.computeQueuedEvent(event);\r\n    }\r\n    this.pointerIntersection();\r\n    const hoveredObj = this._intersection[this._primaryIdentifier]?.object ?? this._renderManager.activeScene;\r\n    this.cursorManager.update(this.dragManager.target, hoveredObj, this._intersectionDropTarget?.object);\r\n  }\r\n\r\n  private raycastScene(event: PointerEvent): void {\r\n    this.handlePrimaryIdentifier(event);\r\n    if (this.dragManager.isDragging) {\r\n      if (!event.isPrimary) return;\r\n      const intersections = this.raycasterManager.getIntersections(event, true, this.dragManager.findDropTarget ? this.dragManager.target : undefined);\r\n      this.setDropTarget(intersections);\r\n    } else {\r\n      const intersections = this.raycasterManager.getIntersections(event, false);\r\n      this._intersection[event.pointerId] = intersections[0];\r\n      const scene = this._renderManager.activeScene;\r\n      if (scene && event.isPrimary) {\r\n        scene.intersections = intersections;\r\n      }\r\n    }\r\n  }\r\n\r\n  private handlePrimaryIdentifier(event: PointerEvent): void {\r\n    if (event.isPrimary) {\r\n      this._primaryRaycasted = true;\r\n      if (this._primaryIdentifier !== event.pointerId) {\r\n        this.clearPointerId(this._primaryIdentifier);\r\n        this._primaryIdentifier = event.pointerId;\r\n      }\r\n    }\r\n  }\r\n\r\n  private triggerPointer(type: keyof InteractionEvents, event: PointerEvent, target: Object3D, relatedTarget?: Object3D): void {\r\n    if (target?.enabledState) {\r\n      const pointerEvent = new PointerEventExt(event, this._intersection[event.pointerId], relatedTarget);\r\n      target.__eventsDispatcher.dispatchDOM(type, pointerEvent);\r\n    }\r\n  }\r\n\r\n  private triggerAncestorPointer(type: keyof InteractionEvents, event: PointerEvent, target: Object3D, relatedTarget?: Object3D, cancelable?: boolean): PointerEventExt {\r\n    if (target?.enabledState) {\r\n      const pointerEvent = new PointerEventExt(event, this._intersection[event.pointerId], relatedTarget, cancelable);\r\n      target.__eventsDispatcher.dispatchDOMAncestor(type, pointerEvent);\r\n      return pointerEvent;\r\n    }\r\n  }\r\n\r\n  private triggerAncestorWheel(event: WheelEvent, intersection: IntersectionExt): void {\r\n    const target = intersection?.object ?? this._renderManager.activeScene;\r\n    if (target?.enabledState) {\r\n      const wheelEvent = new WheelEventExt(event, intersection);\r\n      target.__eventsDispatcher.dispatchDOMAncestor('wheel', wheelEvent);\r\n    }\r\n  }\r\n\r\n  private triggerAncestorKeyboard(type: keyof InteractionEvents, event: KeyboardEvent, cancelable: boolean): KeyboardEventExt {\r\n    const scene = this._renderManager.activeScene;\r\n    const target = scene.focusedObject ?? scene;\r\n    if (target.enabledState) {\r\n      const keyboardEvent = new KeyboardEventExt(event, cancelable);\r\n      target.__eventsDispatcher.dispatchDOMAncestor(type, keyboardEvent);\r\n      return keyboardEvent;\r\n    }\r\n  }\r\n\r\n  private computeQueuedEvent(event: Event): void {\r\n    switch (event.type) {\r\n      case 'pointerenter': return this.pointerEnter(event as PointerEvent);\r\n      case 'pointerleave': return this.pointerLeave(event as PointerEvent);\r\n      case 'pointermove': return this.pointerMove(event as PointerEvent);\r\n      case 'pointerdown': return this.pointerDown(event as PointerEvent);\r\n      case 'pointerup':\r\n      case 'pointercancel': return this.pointerUp(event as PointerEvent);\r\n      case 'wheel': return this.wheel(event as WheelEvent);\r\n      case 'keydown': return this.keyDown(event as KeyboardEvent);\r\n      case 'keyup': return this.keyUp(event as KeyboardEvent);\r\n      default: console.error('Error: computeEvent failed.');\r\n    }\r\n  }\r\n\r\n  public isMainClick(event: PointerEvent): boolean {\r\n    return event.isPrimary && ((event.pointerType === 'mouse' && event.button === 0) || event.pointerType !== 'mouse');\r\n  }\r\n\r\n  private pointerDown(event: PointerEvent): void {\r\n    if (event.pointerType !== 'mouse') {\r\n      this.pointerMove(event);\r\n    }\r\n\r\n    const intersection = this._intersection[event.pointerId];\r\n    const target = intersection?.object ?? this._renderManager.activeScene;\r\n\r\n    if (target === undefined) return;\r\n\r\n    const pointerDownEvent = this.triggerAncestorPointer('pointerdown', event, target, undefined, true);\r\n    this._lastPointerDown[event.pointerId] = event;\r\n    this._pointerDownTarget[event.pointerId] = target;\r\n\r\n    if (this.isMainClick(event)) {\r\n      target.__clicking = true;\r\n    }\r\n\r\n    if (!pointerDownEvent?._defaultPrevented && event.isPrimary) {\r\n      const scene = this._renderManager.activeScene;\r\n      const firstFocusable = target?.firstFocusable;\r\n      if (firstFocusable || scene?.blurOnClickOut) {\r\n        scene.focus(firstFocusable);\r\n      }\r\n    }\r\n\r\n    this.dragManager.initDrag(event, target, intersection);\r\n  }\r\n\r\n  private pointerEnter(event: PointerEvent): void {\r\n    this.raycasterManager.pointerOnCanvas = true;\r\n  }\r\n\r\n  private pointerLeave(event: PointerEvent): void {\r\n    this.raycasterManager.pointerOnCanvas = false;\r\n    this._lastPointerMove[event.pointerId] = event;\r\n  }\r\n\r\n  private pointerMove(event: PointerEvent): void {\r\n    this._lastPointerMove[event.pointerId] = event;\r\n    this.raycastScene(event);\r\n    const camera = this._renderManager.activeView?.camera;\r\n    if (this.dragManager.needsDrag(event, camera)) {\r\n      this.dragManager.performDrag(event, camera, this._intersectionDropTarget);\r\n    } else {\r\n      this.pointerOutOver(event);\r\n      const target = this._intersection[event.pointerId]?.object ?? this._renderManager.activeScene;\r\n      this.triggerAncestorPointer('pointermove', event, target);\r\n    }\r\n  }\r\n\r\n  private pointerIntersection(): void {\r\n    if (this.dragManager.isDragging) {\r\n      if (!this._primaryRaycasted && this.dragManager.findDropTarget && this._renderManager.activeScene?.continuousRaycastingDropTarget) {\r\n        const event = this._lastPointerMove[this._primaryIdentifier] || this._lastPointerDown[this._primaryIdentifier];\r\n        this.raycastScene(event);\r\n        this.dragManager.dropTargetEvent(event, this._intersectionDropTarget);\r\n      }\r\n    } else if (this._renderManager.hoveredScene?.continuousRaycasting && (this._mouseDetected || this._isTapping)) {\r\n      if (!this._primaryRaycasted) {\r\n        const event = this._lastPointerMove[this._primaryIdentifier] || this._lastPointerDown[this._primaryIdentifier];\r\n        this.raycastScene(event);\r\n        this.pointerOutOver(event);\r\n      }\r\n      const intersection = this._intersection[this._primaryIdentifier];\r\n      const target = intersection?.object ?? this._renderManager.hoveredScene;\r\n      if (target?.enabledState) {\r\n        target.__eventsDispatcher.dispatchDOMAncestor('pointerintersection', new PointerIntersectionEvent(intersection));\r\n      }\r\n    }\r\n  }\r\n\r\n  private wheel(event: WheelEvent): void {\r\n    this.triggerAncestorWheel(event, this._intersection[this._primaryIdentifier]);\r\n  }\r\n\r\n  private pointerOutOver(event: PointerEvent): void {\r\n    const target = this._intersection[event.pointerId]?.object ?? this._renderManager.activeScene;\r\n    const lastHoveredTarget = this._lastHoveredTarget[event.pointerId];\r\n\r\n    if (target !== lastHoveredTarget) {\r\n      if (event.isPrimary) {\r\n        if (lastHoveredTarget) {\r\n          lastHoveredTarget.__hovered = false;\r\n        }\r\n        target.__hovered = true;\r\n      }\r\n      this._lastHoveredTarget[event.pointerId] = target;\r\n      this.triggerAncestorPointer('pointerout', event, lastHoveredTarget, target);\r\n      this.triggerPointer('pointerleave', event, lastHoveredTarget, target);\r\n      this.triggerAncestorPointer('pointerover', event, target, lastHoveredTarget);\r\n      this.triggerPointer('pointerenter', event, target, lastHoveredTarget);\r\n    }\r\n  }\r\n\r\n  private pointerUp(event: PointerEvent): void {\r\n    const startTarget = this._pointerDownTarget[event.pointerId];\r\n    if (!startTarget && !this.raycasterManager.pointerOnCanvas) return;\r\n\r\n    const target = this._intersection[event.pointerId]?.object ?? this._renderManager.activeScene;\r\n    if (!target) return;\r\n\r\n    if (event.pointerType !== 'mouse') {\r\n      target.__hovered = false;\r\n      this.triggerAncestorPointer('pointerout', event, target);\r\n      this.triggerPointer('pointerleave', event, target);\r\n    }\r\n\r\n    if (this.dragManager.stopDragging(event)) {\r\n      this.setDropTarget([]);\r\n    } else {\r\n      this.triggerAncestorPointer('pointerup', event, target, startTarget);\r\n      if (target === startTarget) {\r\n        this.triggerAncestorPointer('click', event, target);\r\n      }\r\n    }\r\n\r\n    if (event.type === 'pointerup') {\r\n      this.dblClick(event, target);\r\n    }\r\n\r\n    if (startTarget && this.isMainClick(event)) {\r\n      startTarget.__clicking = false;\r\n    }\r\n\r\n    if (event.pointerId !== this._primaryIdentifier) {\r\n      this.clearPointerId(event.pointerId);\r\n    }\r\n  }\r\n\r\n  private clearPointerId(pointerId: number): void {\r\n    delete this._intersection[pointerId];\r\n    delete this._pointerDownTarget[pointerId];\r\n    delete this._lastPointerDown[pointerId];\r\n    delete this._lastPointerMove[pointerId];\r\n    delete this._lastHoveredTarget[pointerId];\r\n  }\r\n\r\n  private dblClick(event: PointerEvent, target: Object3D): void {\r\n    if (this.isMainClick(event)) {\r\n      if (target === this._lastClickTarget && event.timeStamp - this._lastClickTimeStamp <= 300) {\r\n        this.triggerAncestorPointer('dblclick', event, target);\r\n        this._lastClickTimeStamp = undefined;\r\n      } else {\r\n        this._lastClickTarget = target;\r\n        this._lastClickTimeStamp = event.timeStamp;\r\n      }\r\n    }\r\n  }\r\n\r\n  private keyDown(event: KeyboardEvent): void {\r\n    const keyDownEvent = this.triggerAncestorKeyboard('keydown', event, true);\r\n    if (!keyDownEvent?._defaultPrevented) {\r\n      if (event.key === 'Escape' || event.key === 'Esc') {\r\n        if (this.dragManager.cancelDragging(this._lastPointerMove[this._primaryIdentifier])) {\r\n          this.setDropTarget([]);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private keyUp(event: KeyboardEvent): void {\r\n    this.triggerAncestorKeyboard('keyup', event, false);\r\n  }\r\n\r\n  private setDropTarget(intersections: IntersectionExt[]): void {\r\n    const int = intersections[0];\r\n    this._intersectionDropTarget = (int?.object.__isDropTarget && int.object.enabledState) ? int : undefined;\r\n    const scene = this._renderManager.activeScene;\r\n    if (scene) {\r\n      scene.intersectionsDropTarget = intersections;\r\n    }\r\n  }\r\n}\r\n","import { Camera, Object3D, Scene } from 'three';\r\nimport { Events, MiscEvents } from './Events.js';\r\n\r\ntype SceneEventsCache = { [x: string]: Set<Object3D> };\r\n\r\n/** @internal */\r\nexport class EventsCache {\r\n  private static readonly _allowedEventsSet = new Set<keyof Events>(['viewportresize', 'beforeanimate', 'animate', 'afteranimate'] as (keyof MiscEvents)[]);\r\n  private static _events: { [x: number]: SceneEventsCache } = {};\r\n\r\n  public static push(type: keyof Events, target: Object3D): void {\r\n    const scene = target.scene;\r\n    if (scene && this._allowedEventsSet.has(type)) {\r\n      this.pushScene(scene, type, target);\r\n    }\r\n  }\r\n\r\n  public static update(target: Object3D): void {\r\n    this.updateEvent(target, 'viewportresize');\r\n    this.updateEvent(target, 'beforeanimate');\r\n    this.updateEvent(target, 'animate');\r\n    this.updateEvent(target, 'afteranimate');\r\n  }\r\n\r\n  private static updateEvent(target: Object3D, name: keyof Events): void {\r\n    if (target.__eventsDispatcher.listeners[name]?.length > 0) {\r\n      this.pushScene(target.scene, name, target);\r\n    }\r\n  }\r\n\r\n  private static pushScene(scene: Scene, type: keyof Events, target: Object3D): void {\r\n    const sceneCache = this._events[scene.id] ?? (this._events[scene.id] = {});\r\n    const eventCache = sceneCache[type] ?? (sceneCache[type] = new Set());\r\n    eventCache.add(target);\r\n  }\r\n\r\n  public static removeAll(target: Object3D): void {\r\n    const sceneCache = this._events[target.scene?.id];\r\n    if (sceneCache) {\r\n      for (const key in sceneCache) {\r\n        const eventCache = sceneCache[key];\r\n        eventCache.delete(target);\r\n      }\r\n    }\r\n  }\r\n\r\n  public static remove(type: keyof Events, target: Object3D): void {\r\n    const sceneCache = this._events[target.scene?.id];\r\n    if (sceneCache) {\r\n      sceneCache[type]?.delete(target);\r\n    }\r\n  }\r\n\r\n  public static dispatchEvent<K extends keyof MiscEvents>(scene: Scene, type: K, event?: Events[K]): void {\r\n    const sceneCache = this._events[scene?.id];\r\n    if (sceneCache?.[type]) {\r\n      for (const target of sceneCache[type]) {\r\n        target.__eventsDispatcher.dispatch(type, event);\r\n      }\r\n    }\r\n  }\r\n\r\n  public static dispatchEventExcludeCameras<K extends keyof MiscEvents>(scene: Scene, type: K, event?: Events[K]): void {\r\n    const sceneCache = this._events[scene?.id];\r\n    if (sceneCache?.[type]) {\r\n      for (const target of sceneCache[type]) {\r\n        if (!(target as Camera).isCamera) {\r\n          target.__eventsDispatcher.dispatch(type, event);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { Camera, Color, ColorRepresentation, Scene, Vector2 } from 'three';\r\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\r\n\r\n/**\r\n * Represents an object defining the dimensions and position of a viewport.\r\n */\r\nexport interface Viewport {\r\n  /** Left coordinate of the viewport. */\r\n  left: number;\r\n  /** Bottom coordinate of the viewport. */\r\n  bottom: number;\r\n  /** Width of the viewport. */\r\n  width: number;\r\n  /** Height of the viewport. */\r\n  height: number;\r\n}\r\n\r\n/**\r\n * Represents a set of parameters for configuring a view.\r\n */\r\nexport interface ViewParameters {\r\n  /** Scene rendered in the view. */\r\n  scene: Scene;\r\n  /** Camera used to view the scene (avoid using the same camera for different scenes). */\r\n  camera: Camera;\r\n  /** Normalized viewport defining dimensions and position of the view (optional). Values range from 0 to 1. */\r\n  viewport?: Viewport;\r\n  /** Tags of the view (optional). */\r\n  tags?: string[];\r\n  /** Determines if the view is visible (optional, default: true). */\r\n  visible?: boolean;\r\n  /** Determines whether InteractionEvents will be triggered for the view (optional, default: true).  */\r\n  enabled?: boolean;\r\n  /** Background color of the view (optional, default: 'black'). */\r\n  backgroundColor?: ColorRepresentation;\r\n  /** Background alpha value of the view (optional, default: 1). */\r\n  backgroundAlpha?: number;\r\n  /** Effect composer used for post-processing (optional). */\r\n  composer?: EffectComposer;\r\n  /** Function called before rendering the view (optional). */\r\n  onBeforeRender?: () => void;\r\n  /** Function called after rendering the view (optional). */\r\n  onAfterRender?: () => void;\r\n}\r\n\r\n/**\r\n * Represents a render view with specific parameters.\r\n * Don't instantiate this manually.\r\n */\r\nexport class RenderView implements ViewParameters {\r\n  public scene: Scene;\r\n  public camera: Camera;\r\n  public viewport: Viewport;\r\n  /** The viewport defining the dimensions and position of the view. */\r\n  public computedViewport = { left: 0, bottom: 0, width: 0, height: 0, top: 0 };\r\n  public tags: string[];\r\n  public enabled: boolean;\r\n  public backgroundColor: Color;\r\n  public backgroundAlpha: number;\r\n  public composer: EffectComposer;\r\n  private readonly _rendererSize: Vector2;\r\n  private _visible: boolean;\r\n  private readonly _onBeforeRender: () => void;\r\n  private readonly _onAfterRender: () => void;\r\n\r\n  public get visible(): boolean { return this._visible; }\r\n  public set visible(value: boolean) {\r\n    if (this._visible === value) return;\r\n    this._visible = value;\r\n    this.scene.needsRender = true;\r\n  }\r\n\r\n  /**\r\n   * Don't instantiate this manually.\r\n   */\r\n  constructor(parameters: ViewParameters, rendererSize: Vector2) {\r\n    this._rendererSize = rendererSize;\r\n    this.scene = parameters.scene;\r\n    this.camera = parameters.camera;\r\n    this.viewport = parameters.viewport;\r\n    this.tags = parameters.tags;\r\n    this._visible = parameters.visible ?? true;\r\n    this.enabled = parameters.enabled ?? true;\r\n    this.backgroundAlpha = parameters.backgroundAlpha;\r\n    this.backgroundColor = parameters.backgroundColor !== undefined ? new Color(parameters.backgroundColor) : undefined;\r\n    this.composer = parameters.composer;\r\n    this._onBeforeRender = parameters.onBeforeRender;\r\n    this._onAfterRender = parameters.onAfterRender;\r\n\r\n    this.scene.add(this.camera); // Mandatory to trigger camera resize event\r\n    this.update();\r\n  }\r\n\r\n  /**\r\n   * Updates the dimensions of the viewport based on the renderer size.\r\n   */\r\n  public update(): void {\r\n    if (this.viewport) {\r\n      this.computedViewport.left = Math.floor(this._rendererSize.x * this.viewport.left);\r\n      this.computedViewport.bottom = Math.floor(this._rendererSize.y * this.viewport.bottom);\r\n      this.computedViewport.width = Math.floor(this._rendererSize.x * this.viewport.width);\r\n      this.computedViewport.height = Math.floor(this._rendererSize.y * this.viewport.height);\r\n      this.computedViewport.top = Math.floor(this._rendererSize.y - this.computedViewport.bottom - this.computedViewport.height);\r\n    } else {\r\n      this.computedViewport.width = this._rendererSize.x;\r\n      this.computedViewport.height = this._rendererSize.y;\r\n    }\r\n    this.composer?.setSize(this.computedViewport.width, this.computedViewport.height);\r\n    this.scene.needsRender = true;\r\n  }\r\n\r\n  public onBeforeRender(): void {\r\n    this._onBeforeRender?.apply(this); // todo use call or apply, check performance\r\n  }\r\n\r\n  public onAfterRender(): void {\r\n    this._onAfterRender?.apply(this);\r\n  }\r\n}\r\n","import { Camera, Color, ColorRepresentation, Scene, Vector2, WebGLRenderer } from 'three';\r\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\r\nimport { RenderView, ViewParameters } from './RenderView.js';\r\n\r\n/** @internal */\r\nexport class RenderManager {\r\n  public renderer: WebGLRenderer;\r\n  public views: RenderView[] = [];\r\n  public activeView: RenderView;\r\n  public hoveredView: RenderView;\r\n  private _visibleScenes = new Set<Scene>();\r\n  private _rendererSize = new Vector2();\r\n  private _fullscreen: boolean;\r\n  private _backgroundColor: Color;\r\n  private _backgroundAlpha: number;\r\n  private _resized = false;\r\n  private readonly _resizeObserver = new ResizeObserver(() => this._resized = true);\r\n\r\n  public get activeScene(): Scene { return this.activeView?.scene; }\r\n  public get hoveredScene(): Scene { return this.hoveredView?.scene; }\r\n\r\n  public get fullscreen(): boolean { return this._fullscreen; }\r\n  public set fullscreen(value: boolean) {\r\n    this._fullscreen = value;\r\n    this.updateRenderSize();\r\n  }\r\n\r\n  public get backgroundColor(): Color { return this._backgroundColor; }\r\n  public set backgroundColor(value: ColorRepresentation) {\r\n    this._backgroundColor = new Color(value);\r\n    this.renderer.setClearColor(this._backgroundColor, this._backgroundAlpha);\r\n  }\r\n\r\n  public get backgroundAlpha(): number { return this._backgroundAlpha; }\r\n  public set backgroundAlpha(value: number) {\r\n    this._backgroundAlpha = value;\r\n    this.renderer.setClearColor(this._backgroundColor, this._backgroundAlpha);\r\n  }\r\n\r\n  constructor(renderer: WebGLRenderer, appendCanvas: boolean, fullscreen = true, backgroundColor: ColorRepresentation = 0x000000, backgroundAlpha = 1) {\r\n    this.renderer = renderer;\r\n    renderer.info.autoReset = false;\r\n    renderer.setPixelRatio(Math.min(window.devicePixelRatio, 1.5));\r\n    this.appendCanvas(appendCanvas);\r\n    this._fullscreen = fullscreen;\r\n    this._backgroundAlpha = backgroundAlpha;\r\n    this._backgroundColor = new Color(backgroundColor);\r\n    window.addEventListener('resize', () => this._resized = true);\r\n    this._resizeObserver.observe(this.renderer.domElement);\r\n    this.updateRenderSize();\r\n    renderer.setClearColor(this._backgroundColor, this._backgroundAlpha);\r\n  }\r\n\r\n  private appendCanvas(appendCanvas: boolean): void {\r\n    if (appendCanvas) {\r\n      document.body.appendChild(this.renderer.domElement);\r\n    }\r\n  }\r\n\r\n  public create(view: ViewParameters): RenderView {\r\n    const renderView = new RenderView(view, this._rendererSize);\r\n    this.views.push(renderView);\r\n    return renderView;\r\n  }\r\n\r\n  public add(view: RenderView): void {\r\n    if (this.views.indexOf(view) > -1) return;\r\n    this.views.push(view);\r\n  }\r\n\r\n  public getByTag(tag: string): RenderView {\r\n    for (const view of this.views) {\r\n      if (view.tags.indexOf(tag) > -1) {\r\n        return view;\r\n      }\r\n    }\r\n  }\r\n\r\n  public remove(view: RenderView): void {\r\n    const index = this.views.indexOf(view);\r\n    if (index > -1) {\r\n      this.views.splice(index, 1);\r\n      if (this.views.length === 0) {\r\n        this.setDefaultRendererParameters();\r\n      }\r\n    }\r\n  }\r\n\r\n  public removeByTag(tag: string): void {\r\n    if (this.views.length === 0) return;\r\n    for (let i = this.views.length - 1; i >= 0; i--) {\r\n      if (this.views[i].tags.indexOf(tag) > -1) {\r\n        this.views.splice(i, 1);\r\n      }\r\n    }\r\n    if (this.views.length === 0) {\r\n      this.setDefaultRendererParameters();\r\n    }\r\n  }\r\n\r\n  public clear(): void {\r\n    this.views = [];\r\n    this.setDefaultRendererParameters();\r\n  }\r\n\r\n  private setDefaultRendererParameters(): void {\r\n    this.renderer.setScissorTest(false);\r\n    this.renderer.setViewport(0, 0, this._rendererSize.width, this._rendererSize.height);\r\n    this.renderer.setScissor(0, 0, this._rendererSize.width, this._rendererSize.height);\r\n    this.renderer.setClearColor(this._backgroundColor, this._backgroundAlpha);\r\n  }\r\n\r\n  public getVisibleScenes(): Set<Scene> {\r\n    if (this.views.length === 0) return;\r\n    this._visibleScenes.clear();\r\n    for (const view of this.views) {\r\n      if (view.visible) {\r\n        this._visibleScenes.add(view.scene);\r\n      }\r\n    }\r\n    return this._visibleScenes;\r\n  }\r\n\r\n  public updateActiveView(mouse: Vector2, pointerOnCanvas: boolean): void {\r\n    this.hoveredView = pointerOnCanvas ? this.getViewByMouse(mouse) : undefined;\r\n    if (this.hoveredView) {\r\n      this.activeView = this.hoveredView;\r\n    }\r\n  }\r\n\r\n  public getViewByMouse(mouse: Vector2): RenderView {\r\n    for (let i = this.views.length - 1; i >= 0; i--) {\r\n      const view = this.views[i];\r\n      const v = view.computedViewport;\r\n      if (view.visible && v.left <= mouse.x && v.left + v.width >= mouse.x && v.top <= mouse.y && v.top + v.height >= mouse.y) {\r\n        return view;\r\n      }\r\n    }\r\n  }\r\n\r\n  private isRenderNecessary(): boolean {\r\n    for (const view of this.views) {\r\n      if (view.visible && view.scene.needsRender) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  public render(): void {\r\n    if (!this.isRenderNecessary()) return;\r\n\r\n    for (const view of this.views) {\r\n      if (view.visible) {\r\n        const v = view.computedViewport;\r\n        this.renderer.setScissorTest(view.viewport !== undefined);\r\n        this.renderer.setViewport(v.left, v.bottom, v.width, v.height);\r\n        this.renderer.setScissor(v.left, v.bottom, v.width, v.height);\r\n        this.renderer.setClearColor(view.backgroundColor ?? this._backgroundColor, view.backgroundAlpha ?? this._backgroundAlpha);\r\n        view.onBeforeRender();\r\n        this.executeRender(view.scene, view.camera, view.composer);\r\n        view.onAfterRender();\r\n      }\r\n    }\r\n  }\r\n\r\n  private executeRender(scene?: Scene, camera?: Camera, composer?: EffectComposer): void {\r\n    this.renderer.info.reset();\r\n    if (composer) {\r\n      composer.render();\r\n    } else {\r\n      this.renderer.render(scene, camera);\r\n    }\r\n  }\r\n\r\n  public update(): void {\r\n    if (!this._resized) return;\r\n\r\n    this.updateRenderSize();\r\n    for (const view of this.views) {\r\n      view.update();\r\n    }\r\n    this._resized = false;\r\n  }\r\n\r\n  private updateRenderSize(): void {\r\n    if (this._fullscreen) { // TODO remove this flag\r\n      this.renderer.setSize(window.innerWidth, window.innerHeight);\r\n    } else {\r\n      const { width, height } = this.renderer.domElement.getBoundingClientRect();\r\n      this.renderer.setSize(width, height, false);\r\n    }\r\n    this.renderer.getSize(this._rendererSize);\r\n  }\r\n\r\n  public setActiveViewsByTag(tag: string): void {\r\n    for (const view of this.views) {\r\n      view.visible = view.tags.indexOf(tag) > -1;\r\n    }\r\n  }\r\n}\r\n","import { ActionTween, MotionConfig } from './Actions.js';\r\nimport { EasingFunction } from './Easings.js';\r\nimport { Tween } from './Tween.js';\r\nimport { TweenManager } from './TweenManager.js';\r\n\r\ntype UpdateCallback<T> = (start?: T, end?: T, alpha?: number) => void;\r\n\r\ninterface RunningBlock {\r\n  tweens?: Tween[];\r\n  runningTweens?: RunningTween[];\r\n  actions?: RunningAction[];\r\n  elapsedTime: number;\r\n  totalTime: number;\r\n  reversed?: boolean;\r\n  originallyReversed?: boolean;\r\n  tweensStarted?: boolean;\r\n  config?: MotionConfig;\r\n}\r\n\r\n/** @internal */\r\nexport interface RunningAction<T = any> {\r\n  time: number;\r\n  callback: UpdateCallback<T>;\r\n  easing?: EasingFunction;\r\n  start?: T;\r\n  end?: T;\r\n  key?: string;\r\n}\r\n\r\n/**\r\n * This class represents a running tween for a specific target object.\r\n * It manages the execution of actions and tweens associated with the tween.\r\n * Don't instantiate this manually.\r\n * @template T - The type of the target object.\r\n */\r\nexport class RunningTween<T = any> {\r\n  /** @internal */ public root: RunningTween<T>;\r\n  /** @internal */ public tween: Tween<T>;\r\n  /** @internal */ public target: T;\r\n  /** @internal */ public actionIndex = -1;\r\n  /** @internal */ public currentBlock?: RunningBlock;\r\n  /** @internal */ public history: RunningBlock[] = [];\r\n  /** @internal */ public reversed?: boolean;\r\n  /** @internal */ public originallyReversed?: boolean;\r\n  /** @internal */ public repeat?: boolean;\r\n  /** @internal */ public repetitions: { [x: number]: number } = {};\r\n  /** @internal */ public _finished = false;\r\n  /**\r\n    * Indicates whether the execution of the running tween is paused.\r\n    * If set to `true`, the tween will not progress until it is resumed.\r\n    */\r\n  public paused = false;\r\n  /**\r\n     * The time scale factor for the running tween.\r\n     * It determines the speed at which the tween progresses.\r\n     * A value of `1` represents normal speed, while `0.5` would be half-speed, and `2` would be double-speed.\r\n     */\r\n  public timeScale = 1;\r\n\r\n  /**\r\n     * Indicates whether the running tween has finished executing.\r\n     */\r\n  public get finished(): boolean { return this._finished; }\r\n\r\n  /**\r\n     * Don't instantiate this manually.\r\n     */\r\n  constructor(target: T, tween: Tween<T>) {\r\n    this.target = target;\r\n    this.tween = tween;\r\n  }\r\n\r\n  /**\r\n    * Set the time scale for the running tween.\r\n    * @param value - The time scale value to apply.\r\n    * @returns The updated RunningTween instance.\r\n    */\r\n  public setTimeScale(value: number): this {\r\n    this.timeScale = value;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Pause the execution of the running tween.\r\n     */\r\n  public pause(): void {\r\n    this.paused = true;\r\n  }\r\n\r\n  /**\r\n     * Resume the execution of the running tween if it was paused.\r\n     */\r\n  public resume(): void {\r\n    this.paused = false;\r\n  }\r\n\r\n  /**\r\n     * Stop the running tween, causing it to finish immediately.\r\n     */\r\n  public stop(): void {\r\n    TweenManager.stop(this);\r\n  }\r\n\r\n  /**\r\n    * Complete the running tween, causing it to finish immediately.\r\n    */\r\n  public complete(): void {\r\n    TweenManager.complete(this);\r\n  }\r\n\r\n  /**\r\n     * Revert the running tween to its initial state (Not implemented yet).\r\n     */\r\n  public revert(): void {\r\n    console.error('Revert method not implemented yet.'); // handle (!blockHistory)\r\n  }\r\n\r\n  /** @internal */\r\n  public getBlock(): RunningBlock {\r\n    this.currentBlock?.config?.onComplete?.call(this.target, this.target);\r\n    const block = this.getCurrentBlock();\r\n    block?.config?.onStart?.call(this.target, this.target);\r\n    if (!this.tween.blockHistory && !this.reversed && !this.repeat && block) {\r\n      this.history.push(block);\r\n    }\r\n    this.currentBlock = block;\r\n    return block;\r\n  }\r\n\r\n  /** @internal */\r\n  private getCurrentBlock(): RunningBlock {\r\n    if (this.reversed) return this.getPrevBlock();\r\n    return this.repeat ? this.getRepeatBlock() : this.getNextBlock();\r\n  }\r\n\r\n  /** @internal */\r\n  private getPrevBlock(): RunningBlock {\r\n    if (this.actionIndex > 0) {\r\n      const block = this.history[--this.actionIndex];\r\n      block.reversed = !block.originallyReversed;\r\n      block.elapsedTime = 0;\r\n      block.tweensStarted = false;\r\n      return block;\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  private getRepeatBlock(): RunningBlock {\r\n    if (this.actionIndex < this.history.length - 1) {\r\n      const block = this.history[++this.actionIndex];\r\n      block.reversed = block.originallyReversed;\r\n      block.elapsedTime = 0;\r\n      block.tweensStarted = false;\r\n      return block;\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  private getNextBlock(): RunningBlock {\r\n    while (++this.actionIndex < this.tween.actions.length) {\r\n      const action = this.tween.actions[this.actionIndex];\r\n      if (action.isRepeat) {\r\n        this.handleRepetition(action.times);\r\n      } else if (action.isYoyo) {\r\n        const block = this.handleYoyo(action.times);\r\n        if (block) return block;\r\n      } else if (action.isTween) {\r\n        return this.handleTween(action as ActionTween<T>);\r\n      } else {\r\n        return this.handleMotion();\r\n      }\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  private cloneBlock(block: RunningBlock): RunningBlock {\r\n    return {\r\n      elapsedTime: 0,\r\n      totalTime: block.totalTime,\r\n      reversed: !block.reversed,\r\n      originallyReversed: !block.reversed,\r\n      actions: block.actions,\r\n      tweens: block.tweens,\r\n      config: block.config,\r\n      runningTweens: this.cloneRunningTweens(block.runningTweens)\r\n    };\r\n  }\r\n\r\n  /** @internal */\r\n  private cloneRunningTweens(runningTweens: RunningTween<T>[]): RunningTween<T>[] {\r\n    if (!runningTweens) return;\r\n    const ret: RunningTween<T>[] = [];\r\n    for (const runningTween of runningTweens) {\r\n      const runningCloned = new RunningTween(runningTween.target, runningTween.tween);\r\n      runningCloned.timeScale = runningTween.timeScale;\r\n      runningCloned.root = runningTween.root;\r\n      runningCloned.history = runningTween.history;\r\n      runningCloned.actionIndex = !runningTween.reversed ? runningTween.history.length : -1;\r\n      runningCloned.originallyReversed = !runningTween.reversed;\r\n      runningCloned.repeat = runningTween.reversed;\r\n      ret.push(runningCloned);\r\n    }\r\n    return ret;\r\n  }\r\n\r\n  /** @internal */\r\n  private handleMotion(): RunningBlock {\r\n    const descriptor = this.tween.actions[this.actionIndex].init(this.target);\r\n    return {\r\n      config: descriptor.config,\r\n      actions: descriptor.actions,\r\n      elapsedTime: 0,\r\n      totalTime: Math.max(...descriptor.actions.map((x) => x.time))\r\n    };\r\n  }\r\n\r\n  /** @internal */\r\n  private handleTween(action: ActionTween<T>): RunningBlock {\r\n    return {\r\n      tweens: action.tweens,\r\n      elapsedTime: 0,\r\n      totalTime: 0\r\n    };\r\n  }\r\n\r\n  /** @internal */\r\n  private handleRepetition(times: number): void {\r\n    const repeat = this.repetitions;\r\n    repeat[this.actionIndex] ??= 0;\r\n    if (repeat[this.actionIndex] < times) {\r\n      repeat[this.actionIndex]++;\r\n      do {\r\n        this.actionIndex--;\r\n      } while (this.actionIndex > -1 && !this.tween.actions[this.actionIndex].hasActions);\r\n      this.actionIndex--;\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  private handleYoyo(times: number): RunningBlock {\r\n    const repeat = this.repetitions;\r\n    repeat[this.actionIndex] ??= 0;\r\n    if (repeat[this.actionIndex] < times) {\r\n      repeat[this.actionIndex]++;\r\n      if (repeat[this.actionIndex--] < 3) {\r\n        return this.cloneBlock(this.history[this.history.length - 1]);\r\n      }\r\n      const block = this.history[this.history.length - 2];\r\n      block.elapsedTime = 0;\r\n      block.tweensStarted = false;\r\n      return block;\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  public execute(delta: number): boolean {\r\n    if (this.paused) return true;\r\n    delta *= this.timeScale;\r\n    do {\r\n      delta = Math.min(this.executeBlock(delta), this.getTweensDelta(this.currentBlock));\r\n    } while (delta >= 0 && this.getBlock());\r\n    return delta < 0;\r\n  }\r\n\r\n  /** @internal */\r\n  private executeBlock(delta: number): number {\r\n    const block = this.currentBlock;\r\n    block.elapsedTime += delta;\r\n    this.executeActions(block);\r\n    this.executeTweens(block, delta);\r\n    return block.elapsedTime - block.totalTime;\r\n  }\r\n\r\n  /** @internal */\r\n  private executeActions(block: RunningBlock): void {\r\n    if (block.actions) {\r\n      for (const action of block.actions) {\r\n        const elapsedTime = Math.min(1, block.elapsedTime / (action.time + 10 ** -12));\r\n        const alpha = block.reversed ? 1 - elapsedTime : elapsedTime;\r\n        const easedAlpha = action.easing?.call(this, alpha) ?? alpha;\r\n        const applyValue = block.config?.onProgress?.call(this.target, this.target, action.key, action.start, action.end, easedAlpha);\r\n        if (applyValue !== false) {\r\n          action.callback(action.start, action.end, easedAlpha);\r\n        }\r\n      }\r\n      block.config?.onUpdate?.call(this.target, this.target);\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  private executeTweens(block: RunningBlock, delta: number): void {\r\n    if (block.tweens && !block.tweensStarted) {\r\n      if (!block.runningTweens) {\r\n        block.runningTweens = [];\r\n        for (const tween of block.tweens) {\r\n          this.executeTween(block, delta, tween);\r\n        }\r\n      } else {\r\n        for (const runningTween of block.runningTweens) {\r\n          runningTween.executeExistingTween(delta, this.reversed);\r\n        }\r\n      }\r\n      block.tweensStarted = true;\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  private executeTween(block: RunningBlock, delta: number, tween: Tween<T>): void {\r\n    const runningTween = TweenManager.createChildren(this.target, tween, this.root ?? this);\r\n    block.runningTweens.push(runningTween);\r\n    if (runningTween.execute(delta)) {\r\n      TweenManager.addChildren(runningTween);\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  private executeExistingTween(delta: number, reversed: boolean): void {\r\n    this.reversed = reversed ? !this.originallyReversed : this.originallyReversed;\r\n    this.repeat = !this.reversed;\r\n    this.actionIndex = this.reversed ? this.history.length : -1;\r\n    this.getBlock();\r\n    if (this.execute(delta)) {\r\n      TweenManager.addChildren(this);\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  public getTweensDelta(block: RunningBlock): number {\r\n    let delta = Number.MAX_SAFE_INTEGER;\r\n    if (block.runningTweens) {\r\n      for (const exTween of block.runningTweens) {\r\n        const indexLastBlock = (exTween.repeat || exTween.reversed) ? exTween.actionIndex : exTween.history.length - 1;\r\n        const lastBlock = exTween.history[indexLastBlock];\r\n        delta = Math.min(delta, lastBlock.elapsedTime - lastBlock.totalTime, exTween.getTweensDelta(lastBlock));\r\n      }\r\n    }\r\n    return delta;\r\n  }\r\n}\r\n\r\n// TODO write rever function and consider also to create set action\r\n","import { RunningTween } from './RunningTween.js';\r\nimport { Tween } from './Tween.js';\r\n\r\n/**\r\n * This class is responsible for managing and controlling running tweens.\r\n */\r\nexport class TweenManager {\r\n  private static _running: RunningTween[] = [];\r\n  private static _runningChildren: RunningTween[] = [];\r\n\r\n  /** @internal */\r\n  public static create<T>(target: T, tween: Tween<T>): RunningTween<T> {\r\n    const runningTween = new RunningTween(target, tween);\r\n    runningTween.getBlock();\r\n    this._running.push(runningTween);\r\n    return runningTween;\r\n  }\r\n\r\n  /** @internal */\r\n  public static createChildren<T>(target: T, tween: Tween<T>, root: RunningTween<T>): RunningTween<T> {\r\n    const runningTween = new RunningTween(target, tween);\r\n    runningTween.root = root;\r\n    runningTween.getBlock();\r\n    return runningTween;\r\n  }\r\n\r\n  /** @internal */\r\n  public static addChildren<T>(runningTween: RunningTween<T>): void {\r\n    this._runningChildren.push(runningTween);\r\n  }\r\n\r\n  /** @internal */\r\n  public static update(delta: number): void {\r\n    const runningChildren = this._runningChildren;\r\n    for (let i = runningChildren.length - 1; i >= 0; i--) {\r\n      const rc = runningChildren[i];\r\n      if (!rc.execute(delta * rc.root.timeScale)) {\r\n        runningChildren.splice(i, 1);\r\n      }\r\n    }\r\n\r\n    const running = this._running;\r\n    for (let i = running.length - 1; i >= 0; i--) {\r\n      if (!running[i].execute(delta)) {\r\n        running[i]._finished = true;\r\n        running.splice(i, 1);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  public static stop<T>(runningTween: RunningTween<T>): void {\r\n    const index = this._running.indexOf(runningTween);\r\n    if (index < 0) return;\r\n    this._running.splice(index, 1);\r\n    runningTween._finished = true;\r\n    runningTween.paused = false;\r\n\r\n    const runningChildren = this._runningChildren;\r\n    for (let i = runningChildren.length - 1; i >= 0; i--) {\r\n      if (runningChildren[i].root === runningTween) {\r\n        runningChildren.splice(i, 1);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  public static complete<T>(runningTween: RunningTween<T>): void {\r\n    const index = this._running.indexOf(runningTween);\r\n    if (index < 0) return;\r\n    runningTween.paused = false;\r\n\r\n    const runningChildren = this._runningChildren;\r\n    for (let i = runningChildren.length - 1; i >= 0; i--) {\r\n      if (runningChildren[i].root === runningTween && !runningChildren[i].execute(Infinity)) {\r\n        runningChildren.splice(i, 1);\r\n      }\r\n    }\r\n\r\n    if (runningTween.tween.infiniteLoop || !runningTween.execute(Infinity)) {\r\n      this._running.splice(index, 1);\r\n      runningTween._finished = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n     * Stop the running tween with a specific id.\r\n     * @param id Tween identifier.\r\n     */\r\n  public static stopById(id: string): void {\r\n    for (let i = this._running.length - 1; i >= 0; i--) {\r\n      if (this._running[i].tween.id === id) {\r\n        this._running[i].stop();\r\n        return;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n     * Stop all running tweens.\r\n     */\r\n  public static stopAll(): void {\r\n    for (let i = this._running.length - 1; i >= 0; i--) {\r\n      this._running[i].stop();\r\n    }\r\n  }\r\n\r\n  /**\r\n     * Stop all running tweens with a specific tag.\r\n     * @param tag - The tag to filter running tweens.\r\n     */\r\n  public static stopAllByTag(tag: string): void {\r\n    for (let i = this._running.length - 1; i >= 0; i--) {\r\n      if (this._running[i].tween.tags.indexOf(tag) > -1) {\r\n        this._running[i].stop();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n     * Complete all running tweens.\r\n     */\r\n  public static completeAll(): void {\r\n    for (let i = this._running.length - 1; i >= 0; i--) {\r\n      this._running[i].complete();\r\n    }\r\n  }\r\n\r\n  /**\r\n     * Complete all running tweens with a specific tag.\r\n     * @param tag - The tag to filter running tweens.\r\n     */\r\n  public static completeAllByTag(tag: string): void {\r\n    for (let i = this._running.length - 1; i >= 0; i--) {\r\n      if (this._running[i].tween.tags.indexOf(tag) > -1) {\r\n        this._running[i].complete();\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { WebGLRenderer } from 'three';\r\n\r\nexport class Stats {\r\n  public dom = document.createElement('div');\r\n  private _minimal: boolean;\r\n  private mode = 0;\r\n  private readonly renderer: WebGLRenderer;\r\n  private readonly gl: WebGL2RenderingContext;\r\n  private readonly ext: any;\r\n  private query: WebGLQuery;\r\n  private readonly queries: WebGLQuery[] = [];\r\n  private beginTime: number = null;\r\n  private endTime: number = null;\r\n  private readonly fpsPanel: GraphPanel;\r\n  private readonly cpuPanel: GraphPanel;\r\n  private readonly gpuPanel: GraphPanel;\r\n  private readonly infoPanel: TextPanel;\r\n\r\n  private readonly clickPanelCallback = (event): void => {\r\n    event.preventDefault();\r\n    this.showPanel(++this.mode % this.dom.children.length);\r\n  };\r\n\r\n  public get minimal(): boolean { return this._minimal; }\r\n  public set minimal(value: boolean) { this.switchMinimal(value); }\r\n\r\n  constructor(renderer: WebGLRenderer) {\r\n    this.renderer = renderer;\r\n\r\n    this.fpsPanel = this.addPanel(new GraphPanel('FPS', '#0ff', '#002', 1000, false));\r\n    this.cpuPanel = this.addPanel(new GraphPanel('ms CPU', '#0f0', '#020', 100, true));\r\n\r\n    if (renderer) {\r\n      this.gl = renderer.getContext() as WebGL2RenderingContext;\r\n      this.ext = this.gl?.getExtension('EXT_disjoint_timer_query_webgl2');\r\n      if (this.ext) {\r\n        this.gpuPanel = this.addPanel(new GraphPanel('ms GPU', '#ff0', '#220', 100, true));\r\n      }\r\n    }\r\n\r\n    this.infoPanel = this.addPanel(new TextPanel('INFO', ['Calls', 'Triangles'], '#fff', '#022', 100));\r\n\r\n    this.dom.addEventListener('contextmenu', (e) => {\r\n      e.preventDefault();\r\n      this.switchMinimal(!this._minimal);\r\n    }, false);\r\n\r\n    this.switchMinimal(false);\r\n  }\r\n\r\n  public switchMinimal(value: boolean): void {\r\n    this._minimal = value;\r\n\r\n    if (!value) {\r\n      this.dom.removeEventListener('click', this.clickPanelCallback);\r\n      this.showAllPanels();\r\n      this.dom.style.cssText = 'position:fixed; top:0; left:0; opacity:0.8; z-index:10000; display:flex;';\r\n      return;\r\n    }\r\n\r\n    this.dom.addEventListener('click', this.clickPanelCallback, false);\r\n    this.dom.style.cssText = 'position:fixed; top:0; left:0; opacity:0.8; z-index:10000; cursor:pointer;';\r\n\r\n    this.showPanel(0);\r\n  }\r\n\r\n  public addPanel<GenericPanel extends { dom }>(panel: GenericPanel): GenericPanel {\r\n    this.dom.appendChild(panel.dom);\r\n    return panel;\r\n  }\r\n\r\n  public showPanel(id: number): void {\r\n    this.mode = id;\r\n\r\n    for (let i = 0; i < this.dom.children.length; i++) {\r\n      (this.dom.children[i] as HTMLElement).style.display = i === id ? 'block' : 'none';\r\n    }\r\n  }\r\n\r\n  public showAllPanels(): void {\r\n    for (const element of this.dom.children) {\r\n      (element as HTMLElement).style.display = 'block';\r\n    }\r\n  }\r\n\r\n  public begin(): void {\r\n    this.beginTime = performance.now();\r\n  }\r\n\r\n  public beginQuery(): void {\r\n    if (!this.gpuPanel) return;\r\n\r\n    this.query = this.gl.createQuery();\r\n    this.gl.beginQuery(this.ext.TIME_ELAPSED_EXT, this.query);\r\n  }\r\n\r\n  public end(): void {\r\n    this.endTime = performance.now();\r\n  }\r\n\r\n  public endQuery(): void {\r\n    if (!this.gpuPanel) return;\r\n\r\n    this.gl.endQuery(this.ext.TIME_ELAPSED_EXT);\r\n    this.queries.push(this.query);\r\n    this.query = null;\r\n  }\r\n\r\n  public getQueriesTime(): number {\r\n    const gl = this.gl;\r\n    const ext = this.ext;\r\n    let time = 0;\r\n\r\n    for (let i = this.queries.length - 1; i >= 0; i--) {\r\n      const query = this.queries[i];\r\n      const available = gl.getQueryParameter(query, gl.QUERY_RESULT_AVAILABLE);\r\n      const disjoint = gl.getParameter(ext.GPU_DISJOINT_EXT);\r\n\r\n      if (available && !disjoint) {\r\n        const elapsed = gl.getQueryParameter(query, gl.QUERY_RESULT);\r\n        const duration = elapsed * 1e-6; // Convert nanoseconds to milliseconds\r\n        time += duration;\r\n        gl.deleteQuery(query);\r\n        this.queries.splice(i, 1);\r\n      }\r\n    }\r\n\r\n    return time;\r\n  }\r\n\r\n  public update(): void {\r\n    const time = this.endTime;\r\n    this.cpuPanel.update(time, time - this.beginTime, 33, 2); // we can pass these two params in the constructor\r\n    this.fpsPanel.update(time, 1, 144, 0);\r\n    this.gpuPanel?.update(time, this.getQueriesTime(), 33, 2);\r\n    this.infoPanel?.update(time, [this.renderer.info.render.calls, this.renderer.info.render.triangles, this.renderer.info.render.points, this.renderer.info.render.lines]);\r\n  }\r\n}\r\n\r\nexport class GraphPanel {\r\n  public dom: HTMLCanvasElement;\r\n  private readonly context: CanvasRenderingContext2D;\r\n  private prevTime: number = null;\r\n  private sum = 0;\r\n  private count = 0;\r\n  private readonly PR = Math.round(window.devicePixelRatio || 1);\r\n  private readonly WIDTH = 90 * this.PR;\r\n  private readonly HEIGHT = 48 * this.PR;\r\n  private readonly TEXT_X = 3 * this.PR;\r\n  private readonly TEXT_Y = 2 * this.PR;\r\n  private readonly GRAPH_X = 3 * this.PR;\r\n  private readonly GRAPH_Y = 15 * this.PR;\r\n  private readonly GRAPH_WIDTH = 84 * this.PR;\r\n  private readonly GRAPH_HEIGHT = 30 * this.PR;\r\n\r\n  constructor(private readonly name: string, private readonly fg: string, private readonly bg: string, private readonly updateTime: number, private readonly getAverage) {\r\n    this.dom = document.createElement('canvas');\r\n    this.dom.width = this.WIDTH;\r\n    this.dom.height = this.HEIGHT;\r\n    this.dom.style.cssText = 'width:90px;height:48px';\r\n\r\n    this.context = this.dom.getContext('2d');\r\n    this.context.font = 'bold ' + (10 * this.PR) + 'px monospace';\r\n    this.context.textBaseline = 'top';\r\n\r\n    this.context.fillStyle = bg;\r\n    this.context.fillRect(0, 0, this.WIDTH, this.HEIGHT);\r\n\r\n    this.context.fillStyle = fg;\r\n    this.context.fillText(name, this.TEXT_X, this.TEXT_Y + 1 * this.PR);\r\n    this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT);\r\n\r\n    this.context.fillStyle = bg;\r\n    this.context.globalAlpha = 0.9;\r\n    this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT);\r\n  }\r\n\r\n  public update(time: number, value: number, maxValue: number, decimals: number): void {\r\n    if (this.prevTime === null) {\r\n      // first update\r\n      this.prevTime = time;\r\n      return;\r\n    }\r\n\r\n    this.sum += value;\r\n    this.count++;\r\n\r\n    if (time < this.prevTime + this.updateTime) return;\r\n\r\n    value = this.getAverage ? this.sum / this.count : this.sum;\r\n    this.prevTime += this.updateTime * Math.floor((time - this.prevTime) / this.updateTime);\r\n    this.count = 0;\r\n    this.sum = 0;\r\n\r\n    this.context.fillStyle = this.bg;\r\n    this.context.globalAlpha = 1;\r\n    this.context.fillRect(0, 0, this.WIDTH, this.GRAPH_Y);\r\n    this.context.fillStyle = this.fg;\r\n    this.context.fillText(`${value.toFixed(decimals)} ${this.name}`, this.TEXT_X, this.TEXT_Y + 1 * this.PR);\r\n\r\n    this.context.drawImage(this.dom, this.GRAPH_X + this.PR, this.GRAPH_Y, this.GRAPH_WIDTH - this.PR, this.GRAPH_HEIGHT, this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH - this.PR, this.GRAPH_HEIGHT);\r\n    this.context.fillRect(this.GRAPH_X + this.GRAPH_WIDTH - this.PR, this.GRAPH_Y, this.PR, this.GRAPH_HEIGHT);\r\n\r\n    this.context.fillStyle = this.bg;\r\n    this.context.globalAlpha = 0.9;\r\n    this.context.fillRect(this.GRAPH_X + this.GRAPH_WIDTH - this.PR, this.GRAPH_Y, this.PR, Math.round((1 - (value / maxValue)) * this.GRAPH_HEIGHT));\r\n  }\r\n}\r\n\r\nexport class TextPanel {\r\n  public dom: HTMLCanvasElement;\r\n  private readonly context: CanvasRenderingContext2D;\r\n  private prevTime: number = null;\r\n  private sumTriangles = 0;\r\n  private sumCalls = 0;\r\n  private count = 0;\r\n  private readonly PR = Math.round(window.devicePixelRatio || 1);\r\n  private WIDTH = 126 * this.PR;\r\n  private readonly HEIGHT = 48 * this.PR;\r\n  private readonly TEXT_X = 3 * this.PR;\r\n  private readonly TEXT_Y = 2 * this.PR;\r\n  private readonly GRAPH_X = 3 * this.PR;\r\n  private readonly GRAPH_Y = 15 * this.PR;\r\n  private GRAPH_WIDTH = this.WIDTH - 6 * this.PR;\r\n  private readonly GRAPH_HEIGHT = 30 * this.PR;\r\n  private readonly PADDING_V = 4.3 * this.PR;\r\n  private readonly PADDING_H = 1 * this.PR;\r\n  private readonly TEXT_SPACE = 14 * this.PR;\r\n  private COLUMN_SPACE = this.GRAPH_WIDTH / 2;\r\n\r\n  // TODO: need to generalize call and triangles in props\r\n  constructor(private readonly name: string, private readonly properties: string[], private readonly fg: string, private readonly bg: string, private readonly updateTime: number) {\r\n    this.dom = document.createElement('canvas');\r\n    this.dom.width = this.WIDTH;\r\n    this.dom.height = this.HEIGHT;\r\n    this.dom.style.cssText = `width:${this.WIDTH / this.PR}px;height:${this.HEIGHT / this.PR}px`;\r\n\r\n    this.context = this.dom.getContext('2d');\r\n    this.context.font = 'bold ' + (10 * this.PR) + 'px monospace';\r\n    this.context.textBaseline = 'top';\r\n\r\n    this.context.fillStyle = bg;\r\n    this.context.fillRect(0, 0, this.WIDTH, this.HEIGHT);\r\n\r\n    this.context.fillStyle = fg;\r\n    this.context.fillText(this.name, this.TEXT_X, this.TEXT_Y + 1 * this.PR);\r\n    this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT);\r\n\r\n    this.context.fillStyle = bg;\r\n    this.context.globalAlpha = 0.9;\r\n    this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT);\r\n  }\r\n\r\n  public update(time: number, [calls, triangles, points, lines]): void {\r\n    if (this.prevTime === null) {\r\n      this.prevTime = time;\r\n      return;\r\n    }\r\n\r\n    this.sumTriangles += triangles;\r\n    this.sumCalls += calls;\r\n    this.count++;\r\n\r\n    if (time < this.prevTime + this.updateTime) return;\r\n\r\n    calls = Math.round(this.sumCalls / this.count);\r\n    triangles = Math.round(this.sumTriangles / this.count);\r\n\r\n    this.prevTime += this.updateTime * Math.floor((time - this.prevTime) / this.updateTime);\r\n    this.count = 0;\r\n    this.sumCalls = 0;\r\n    this.sumTriangles = 0;\r\n\r\n    const stringOut = [\r\n      `Calls ${this._formatNumber(calls)}`,\r\n      `Tris ${this._formatNumber(triangles)}`,\r\n      `Lines ${this._formatNumber(lines)}`,\r\n      `Points ${this._formatNumber(points)}`\r\n    ];\r\n\r\n    let maxRowLenght = 0;\r\n    for (let i = 0; i < stringOut.length / 2; i++) {\r\n      maxRowLenght = Math.max((stringOut[i].length + stringOut[i + 2].length) * 8, maxRowLenght);\r\n    }\r\n    this.context.clearRect(0, 0, this.WIDTH, this.HEIGHT);\r\n    this.WIDTH = maxRowLenght * this.PR;\r\n    this.GRAPH_WIDTH = this.WIDTH - 6 * this.PR;\r\n    this.COLUMN_SPACE = this.GRAPH_WIDTH / 2;\r\n\r\n    this.dom.width = this.WIDTH;\r\n    this.dom.height = this.HEIGHT;\r\n    this.dom.style.cssText = `width:${this.WIDTH / this.PR}px;height:${this.HEIGHT / this.PR\r\n    }px`;\r\n\r\n    this.context.font = 'bold ' + 10 * this.PR + 'px monospace';\r\n    this.context.textBaseline = 'top';\r\n\r\n    this.context.fillStyle = this.bg;\r\n    this.context.globalAlpha = 1;\r\n    this.context.fillRect(0, 0, this.WIDTH, this.HEIGHT);\r\n\r\n    this.context.fillStyle = this.fg;\r\n    this.context.fillText(this.name, this.TEXT_X, this.TEXT_Y + 1 * this.PR);\r\n    this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT);\r\n\r\n    this.context.fillStyle = this.bg;\r\n    this.context.globalAlpha = 0.9;\r\n    this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT);\r\n\r\n    this.context.fillStyle = this.fg;\r\n\r\n    const columns = 2;\r\n    const rows = Math.ceil(stringOut.length / columns);\r\n\r\n    for (let i = 0; i < stringOut.length; i++) {\r\n      const column = Math.floor(i / rows);\r\n      const row = i % rows;\r\n      this.context.fillText(stringOut[i], this.GRAPH_X + this.PADDING_H + this.COLUMN_SPACE * column, this.GRAPH_Y + this.TEXT_SPACE * row + this.PADDING_V);\r\n    }\r\n\r\n    this.context.fillStyle = this.bg;\r\n    this.context.globalAlpha = 0.9;\r\n    this.context.fillRect(this.GRAPH_X + this.GRAPH_WIDTH - this.PR, this.GRAPH_Y, this.PR, (0 * this.GRAPH_HEIGHT));\r\n  }\r\n\r\n  /**\r\n   * Adds a suffix (B for billion, M for million, K for thousand) to a large number.\r\n   * @param {number} input - The numeric value to foment.\r\n   * @return {string} The number formatted with an appropriate suffix.\r\n   */\r\n  private _formatNumber(input: number): string {\r\n    if (input >= 1e9) {\r\n      return (input / 1e9).toFixed(2) + 'ʙ';\r\n    } else if (input >= 1e6) {\r\n      return (input / 1e6).toFixed(2) + 'ᴍ';\r\n    } else if (input >= 1e3) {\r\n      return (input / 1e3).toFixed(2) + 'ᴋ';\r\n    } else {\r\n      return input.toString();\r\n    }\r\n  }\r\n}\r\n","import { Camera, Scene, Vector4, WebGLRenderer } from 'three';\r\nimport { Main } from '../core/Main.js';\r\nimport { ViewportResizeEvent } from '../events/Events.js';\r\nimport { EventsCache } from '../events/MiscEventsManager.js';\r\n\r\nconst viewportSize = new Vector4();\r\nconst lastViewportSizes: { [x: number]: Vector4 } = {};\r\n\r\n/** @internal */\r\nexport function applyWebGLRendererPatch(main: Main): void {\r\n  const renderer = main.renderer;\r\n  const baseRender = renderer.render.bind(renderer);\r\n\r\n  renderer.render = function (scene: Scene, camera: Camera) {\r\n    this.getViewport(viewportSize);\r\n    handleViewportResize(this, scene, camera);\r\n\r\n    if (main._showStats) main._stats.beginQuery();\r\n    baseRender(scene, camera);\r\n    if (main._showStats) main._stats.endQuery();\r\n  };\r\n}\r\n\r\nfunction handleViewportResize(renderer: WebGLRenderer, scene: Scene, camera: Camera): void {\r\n  let event: ViewportResizeEvent;\r\n\r\n  if (!lastViewportSizes[scene.id]) {\r\n    lastViewportSizes[scene.id] = new Vector4(-1);\r\n  }\r\n\r\n  const lastSceneSize = lastViewportSizes[scene.id];\r\n  if (lastSceneSize.z !== viewportSize.z || lastSceneSize.w !== viewportSize.w) {\r\n    lastSceneSize.copy(viewportSize);\r\n    event = { renderer, camera, width: viewportSize.z, height: viewportSize.w };\r\n    EventsCache.dispatchEventExcludeCameras(scene, 'viewportresize', event);\r\n  }\r\n\r\n  if (!lastViewportSizes[camera.id]) {\r\n    lastViewportSizes[camera.id] = new Vector4(-1);\r\n  }\r\n\r\n  const lastCameraSize = lastViewportSizes[camera.id];\r\n  if (lastCameraSize.z !== viewportSize.z || lastCameraSize.w !== viewportSize.w) {\r\n    lastCameraSize.copy(viewportSize);\r\n    camera.__eventsDispatcher?.dispatch('viewportresize', event ?? { renderer, camera, width: viewportSize.z, height: viewportSize.w });\r\n  }\r\n}\r\n","import { Camera, Clock, ColorRepresentation, Raycaster, Scene, Vector2, WebGLRenderer, WebGLRendererParameters } from 'three';\r\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\r\nimport { Binding } from '../binding/Binding.js';\r\nimport { InteractionManager } from '../events/InteractionManager.js';\r\nimport { EventsCache } from '../events/MiscEventsManager.js';\r\nimport { RenderManager } from '../rendering/RenderManager.js';\r\nimport { RenderView, ViewParameters } from '../rendering/RenderView.js';\r\nimport { TweenManager } from '../tweening/TweenManager.js';\r\nimport { Stats } from '../utils/Stats.js';\r\nimport { RaycasterSortComparer } from '../events/RaycasterManager.js';\r\nimport { applyWebGLRendererPatch } from '../patch/WebGLRenderer.js';\r\n\r\n/** @internal */\r\nexport function setup(): void {\r\n  // Script loaded for test. TODO remove this\r\n}\r\n\r\n/**\r\n * Configuration parameters for initializing the Main class.\r\n */\r\nexport interface MainParameters {\r\n  /** Enable full-screen mode and automatic canvas resizing (default: true). */\r\n  fullscreen?: boolean;\r\n  /** Display performance statistics (default: true). */\r\n  showStats?: boolean;\r\n  /** Disable the context menu on right-click (default: true). */\r\n  disableContextMenu?: boolean;\r\n  /** Default background color (default: 'black'). */\r\n  backgroundColor?: ColorRepresentation;\r\n  /** Default background alpha (transparency) value (default: 1). */\r\n  backgroundAlpha?: number;\r\n  /** Callback function executed for each frame. */\r\n  animate?: (delta: number, total: number) => void;\r\n  /** Configuration parameters for the WebGLRenderer. Ignored if renderer is specified. */\r\n  rendererParameters?: WebGLRendererParameters;\r\n  /** Enable cursor handling in the application (default: true). */\r\n  enableCursor?: boolean;\r\n  /** Enable multitouch interactions (default: false). */\r\n  multitouch?: boolean;\r\n  /** */\r\n  renderer?: WebGLRenderer;\r\n}\r\n\r\n/**\r\n * The `Main` class serves as the core component for managing a 3D application.\r\n * It provides configuration options and methods for setting up and controlling the application's behavior.\r\n */\r\nexport class Main {\r\n  /** A static counter representing the number of animation frames elapsed. */\r\n  public ticks = 0;\r\n  private _renderManager: RenderManager;\r\n  private _interactionManager: InteractionManager;\r\n  /** @internal **/ public _stats: Stats;\r\n  /** @internal **/ public _showStats: boolean;\r\n  private _animate: (delta: number, total: number) => void;\r\n  private _clock = new Clock();\r\n\r\n  /**\r\n     * The WebGLRenderer instance used for rendering the 3D scene.\r\n     */\r\n  public get renderer(): WebGLRenderer { return this._renderManager.renderer; }\r\n\r\n  /**\r\n     * An array of all RenderView instances managed by the application.\r\n     * Lists all views created and managed by the application, each representing a separate viewport or scene.\r\n     */\r\n  public get views(): RenderView[] { return this._renderManager.views; }\r\n\r\n  /**\r\n     * The currently active RenderView (activated by mouse position).\r\n     */\r\n  public get activeView(): RenderView { return this._renderManager.activeView; }\r\n\r\n  /**\r\n     * The Scene associated with the currently active RenderView.\r\n     */\r\n  public get activeScene(): Scene { return this._renderManager.activeView?.scene; }\r\n\r\n  /**\r\n     * The Camera associated with the currently active RenderView.\r\n     */\r\n  public get activeCamera(): Camera { return this._renderManager.activeView?.camera; }\r\n\r\n  /**\r\n     * The EffectComposer (used for post-processing) associated with the currently active RenderView.\r\n     */\r\n  public get activeComposer(): EffectComposer { return this._renderManager.activeView?.composer; }\r\n\r\n  /**\r\n     * Indicates whether to display performance statistics.\r\n     * If set to true, statistics will be shown; otherwise, they will be hidden.\r\n     */\r\n  public get showStats(): boolean { return this._showStats; }\r\n  public set showStats(value: boolean) {\r\n    if (value) {\r\n      if (!this._stats) this._stats = new Stats(this.renderer);\r\n      document.body.appendChild(this._stats.dom);\r\n    } else if (this._stats) {\r\n      document.body.removeChild(this._stats.dom);\r\n    }\r\n    this._showStats = value;\r\n  }\r\n\r\n  /**\r\n     * Indicates whether to enable multitouch interactions.\r\n     */\r\n  public get multitouch(): boolean { return this._interactionManager.queue.multitouch; }\r\n  public set multitouch(value: boolean) { this._interactionManager.queue.multitouch = value; }\r\n\r\n  /**\r\n     * Defines the mouse buttons that can be used for dragging objects.\r\n     * Specify the button values as an array of PointerEvent button values.\r\n     */\r\n  public get dragButtons(): number[] { return this._interactionManager.dragManager.dragButtons; }\r\n  public set dragButtons(value: number[]) { this._interactionManager.dragManager.dragButtons = value; }\r\n\r\n  /**\r\n     * Indicates whether to enable cursor handling in the application.\r\n     */\r\n  public get enableCursor(): boolean { return this._interactionManager.cursorManager.enabled; }\r\n  public set enableCursor(value: boolean) { this._interactionManager.cursorManager.enabled = value; }\r\n\r\n  /**\r\n     * A custom sorting comparer function used to order intersections when performing raycasting.\r\n     */\r\n  public get raycasterSortComparer(): RaycasterSortComparer { return this._interactionManager.raycasterManager.raycasterSortComparer; }\r\n  public set raycasterSortComparer(value: RaycasterSortComparer) { this._interactionManager.raycasterManager.raycasterSortComparer = value; }\r\n\r\n  /**\r\n     * A Raycaster instance responsible for handling raycasting operations in the application.\r\n     */\r\n  public get raycaster(): Raycaster { return this._interactionManager.raycasterManager.raycaster; }\r\n\r\n  /**\r\n     * The default background color used in the application.\r\n     */\r\n  public get backgroundColor(): ColorRepresentation { return this._renderManager.backgroundColor; }\r\n  public set backgroundColor(value: ColorRepresentation) { this._renderManager.backgroundColor = value; }\r\n\r\n  /**\r\n     * The default alpha (transparency) value for the background.\r\n     */\r\n  public get backgroundAlpha(): number { return this._renderManager.backgroundAlpha; }\r\n  public set backgroundAlpha(value: number) { this._renderManager.backgroundAlpha = value; }\r\n\r\n  /**\r\n     * The current mouse position represented as a Vector2.\r\n     * Provides the x and y coordinates of the mouse pointer within the application.\r\n     */\r\n  public get mousePosition(): Vector2 { return this._interactionManager.raycasterManager.pointer; }\r\n\r\n  /**\r\n     * Indicates if the pointer is over the canvas.\r\n     */\r\n  public get pointerOnCanvas(): boolean { return this._interactionManager.raycasterManager.pointerOnCanvas; }\r\n\r\n  /**\r\n     * @param params Configuration parameters for initializing the Main class.\r\n     */\r\n  constructor(params: MainParameters = {}) {\r\n    if (!params.renderer) this.setDefaultRendererParameters(params);\r\n    const renderer = params.renderer ?? new WebGLRenderer(params.rendererParameters);\r\n    const appendCanvas = !params.rendererParameters.canvas;\r\n\r\n    this._renderManager = new RenderManager(renderer, appendCanvas, params.fullscreen, params.backgroundColor, params.backgroundAlpha);\r\n    this._interactionManager = new InteractionManager(this._renderManager);\r\n    this.multitouch = params.multitouch ?? false;\r\n    this.handleContextMenu(params.disableContextMenu);\r\n    this.showStats = params.showStats ?? true;\r\n    this.enableCursor = params.enableCursor ?? true;\r\n    this._animate = params.animate || null;\r\n\r\n    applyWebGLRendererPatch(this);\r\n  }\r\n\r\n  private setDefaultRendererParameters(parameters: MainParameters): void {\r\n    if (!parameters.rendererParameters) parameters.rendererParameters = {};\r\n    parameters.rendererParameters.antialias ??= true;\r\n  }\r\n\r\n  private handleContextMenu(disableContextMenu = true): void {\r\n    if (disableContextMenu) {\r\n      this.renderer.domElement.addEventListener('contextmenu', (e) => e.preventDefault());\r\n    }\r\n  }\r\n\r\n  private setAnimationLoop(): void {\r\n    this.renderer.setAnimationLoop((time, frame) => {\r\n      if (this._showStats) this._stats.begin();\r\n\r\n      this.ticks++;\r\n      const currentDelta = this._clock.getDelta();\r\n\r\n      this._interactionManager.update();\r\n      TweenManager.update(currentDelta * 1000);\r\n\r\n      this.animate(currentDelta, this._clock.elapsedTime);\r\n\r\n      const visibleScenes = this._renderManager.getVisibleScenes();\r\n\r\n      if (visibleScenes) {\r\n        for (const scene of visibleScenes) {\r\n          const delta = currentDelta * scene.timeScale;\r\n          const total = scene.totalTime += delta;\r\n          EventsCache.dispatchEvent(scene, 'beforeanimate', { delta, total });\r\n          EventsCache.dispatchEvent(scene, 'animate', { delta, total });\r\n          EventsCache.dispatchEvent(scene, 'afteranimate', { delta, total });\r\n          Binding.compute(scene);\r\n        }\r\n\r\n        this._renderManager.render();\r\n\r\n        for (const scene of visibleScenes) {\r\n          scene.needsRender = !scene.__smartRendering;\r\n        }\r\n      }\r\n\r\n      if (this._showStats) {\r\n        this._stats.end();\r\n        this._stats.update();\r\n      }\r\n    });\r\n  }\r\n\r\n  private clearAnimationLoop(): void {\r\n    this.renderer.setAnimationLoop(null);\r\n  }\r\n\r\n  public animate(delta: number, total: number): void {\r\n    if (this._animate) {\r\n      this._animate(delta, total);\r\n    }\r\n  }\r\n\r\n  /**\r\n     * Creates a new RenderView and adds it to the RenderManager.\r\n     * @param view The parameters for the new RenderView.\r\n     * @returns The created RenderView instance.\r\n     */\r\n  public createView(view: ViewParameters): RenderView {\r\n    if (this._renderManager.views.length === 0) this.setAnimationLoop();\r\n    return this._renderManager.create(view);\r\n  }\r\n\r\n  /**\r\n     * Adds a RenderView to the RenderManager.\r\n     * @param view The RenderView instance to add.\r\n     */\r\n  public addView(view: RenderView): void {\r\n    if (this._renderManager.views.length === 0) this.setAnimationLoop();\r\n    this._renderManager.add(view);\r\n  }\r\n\r\n  /**\r\n     * Removes a RenderView from the RenderManager.\r\n     * @param view The RenderView instance to remove.\r\n     */\r\n  public removeView(view: RenderView): void {\r\n    this._renderManager.remove(view);\r\n    if (this._renderManager.views.length === 0) this.clearAnimationLoop(); // TODO consider if we want to move it to renderManager\r\n  }\r\n\r\n  /**\r\n     * Removes a RenderView from the RenderManager by its tag.\r\n     * @param tag The tag of the RenderView to remove.\r\n     */\r\n  public removeViewByTag(tag: string): void {\r\n    this._renderManager.removeByTag(tag);\r\n    if (this._renderManager.views.length === 0) this.clearAnimationLoop();\r\n  }\r\n\r\n  /**\r\n     * Clears all RenderViews from the RenderManager.\r\n     */\r\n  public clearViews(): void {\r\n    this._renderManager.clear();\r\n    this.clearAnimationLoop();\r\n  }\r\n\r\n  /**\r\n     * Retrieves a RenderView by its tag.\r\n     * @param tag The tag to search for.\r\n     * @returns The RenderView with the specified tag, if found, otherwise, undefined.\r\n     */\r\n  public getViewByTag(tag: string): RenderView {\r\n    return this._renderManager.getByTag(tag);\r\n  }\r\n\r\n  /**\r\n    * Retrieves a RenderView by mouse position.\r\n    * @param mouse The mouse position as a Vector2.\r\n    */\r\n  public getViewByMouse(mouse: Vector2): void {\r\n    this._renderManager.getViewByMouse(mouse);\r\n  }\r\n\r\n  /**\r\n     * Sets active RenderViews by tag.\r\n     * @param tag The tag of the RenderViews to set as active.\r\n     */\r\n  public setActiveViewsByTag(tag: string): void {\r\n    this._renderManager.setActiveViewsByTag(tag);\r\n  }\r\n}\r\n","/**\r\n * This class defines default settings for newly created Object3D instances.\r\n */\r\nexport class Default {\r\n  /** The default setting for 'focusable' for newly created Object3Ds. */\r\n  public static focusable = true;\r\n  /** The default setting for 'draggable' for newly created Object3Ds. */\r\n  public static draggable = false;\r\n  /** The default setting for 'interceptByRaycaster' for newly created Object3Ds. */\r\n  public static interceptByRaycaster = true;\r\n}\r\n","/** Type representing an easing function that takes a single numeric parameter and returns a numeric result. */\r\nexport type EasingFunction = (x: number) => number;\r\n/** Type representing an easing type, which can be either a predefined easing function or a custom easing function. */\r\nexport type Easing = keyof Easings | EasingFunction;\r\n\r\n/**\r\n * Class that provides various easing functions for tweening animations.\r\n * For more info on these easing functions, check https://easings.net.\r\n */\r\nexport class Easings {\r\n  /** The default easing function used when no easing is specified. */\r\n  public static DEFAULT_EASING: keyof Easings = 'easeInOutExpo';\r\n\r\n  public linear(x: number): number {\r\n    return x;\r\n  }\r\n\r\n  public easeInSine(x: number): number {\r\n    return 1 - Math.cos((x * Math.PI) / 2);\r\n  }\r\n\r\n  public easeOutSine(x: number): number {\r\n    return Math.sin((x * Math.PI) / 2);\r\n  }\r\n\r\n  public easeInOutSine(x: number): number {\r\n    return -(Math.cos(Math.PI * x) - 1) / 2;\r\n  }\r\n\r\n  public easeInQuad(x: number): number {\r\n    return x * x;\r\n  }\r\n\r\n  public easeOutQuad(x: number): number {\r\n    return 1 - (1 - x) * (1 - x);\r\n  }\r\n\r\n  public easeInOutQuad(x: number): number {\r\n    return x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2;\r\n  }\r\n\r\n  public easeInCubic(x: number): number {\r\n    return x * x * x;\r\n  }\r\n\r\n  public easeOutCubic(x: number): number {\r\n    return 1 - Math.pow(1 - x, 3);\r\n  }\r\n\r\n  public easeInOutCubic(x: number): number {\r\n    return x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2;\r\n  }\r\n\r\n  public easeInQuart(x: number): number {\r\n    return x * x * x * x;\r\n  }\r\n\r\n  public easeOutQuart(x: number): number {\r\n    return 1 - Math.pow(1 - x, 4);\r\n  }\r\n\r\n  public easeInOutQuart(x: number): number {\r\n    return x < 0.5 ? 8 * x * x * x * x : 1 - Math.pow(-2 * x + 2, 4) / 2;\r\n  }\r\n\r\n  public easeInQuint(x: number): number {\r\n    return x * x * x * x * x;\r\n  }\r\n\r\n  public easeOutQuint(x: number): number {\r\n    return 1 - Math.pow(1 - x, 5);\r\n  }\r\n\r\n  public easeInOutQuint(x: number): number {\r\n    return x < 0.5 ? 16 * x * x * x * x * x : 1 - Math.pow(-2 * x + 2, 5) / 2;\r\n  }\r\n\r\n  public easeInExpo(x: number): number {\r\n    return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\r\n  }\r\n\r\n  public easeOutExpo(x: number): number {\r\n    return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\r\n  }\r\n\r\n  public easeInOutExpo(x: number): number {\r\n    return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? Math.pow(2, 20 * x - 10) / 2 : (2 - Math.pow(2, -20 * x + 10)) / 2;\r\n  }\r\n\r\n  public easeInCirc(x: number): number {\r\n    return 1 - Math.sqrt(1 - Math.pow(x, 2));\r\n  }\r\n\r\n  public easeOutCirc(x: number): number {\r\n    return Math.sqrt(1 - Math.pow(x - 1, 2));\r\n  }\r\n\r\n  public easeInOutCirc(x: number): number {\r\n    return x < 0.5 ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2 : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2;\r\n  }\r\n\r\n  public easeInBack(x: number): number {\r\n    return 2.70158 * x * x * x - 1.70158 * x * x;\r\n  }\r\n\r\n  public easeOutBack(x: number): number {\r\n    return 1 + 2.70158 * Math.pow(x - 1, 3) + 1.70158 * Math.pow(x - 1, 2);\r\n  }\r\n\r\n  public easeInOutBack(x: number): number {\r\n    const c2 = 1.70158 * 1.525;\r\n    return x < 0.5 ? (Math.pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2)) / 2 : (Math.pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2;\r\n  }\r\n\r\n  public easeInElastic(x: number): number {\r\n    return x === 0 ? 0 : x === 1 ? 1 : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * (2 * Math.PI) / 3);\r\n  }\r\n\r\n  public easeOutElastic(x: number): number {\r\n    return x === 0 ? 0 : x === 1 ? 1 : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * (2 * Math.PI) / 3) + 1;\r\n  }\r\n\r\n  public easeInOutElastic(x: number): number {\r\n    const c5 = (2 * Math.PI) / 4.5;\r\n    return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * c5)) / 2 : (Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * c5)) / 2 + 1;\r\n  }\r\n\r\n  public easeInBounce(x: number): number {\r\n    return 1 - this.easeOutBounce(1 - x);\r\n  }\r\n\r\n  public easeOutBounce(x: number): number {\r\n    if (x < 1 / 2.75) {\r\n      return 7.5625 * x * x;\r\n    } else if (x < 2 / 2.75) {\r\n      return 7.5625 * (x -= 1.5 / 2.75) * x + 0.75;\r\n    } else if (x < 2.5 / 2.75) {\r\n      return 7.5625 * (x -= 2.25 / 2.75) * x + 0.9375;\r\n    } else {\r\n      return 7.5625 * (x -= 2.625 / 2.75) * x + 0.984375;\r\n    }\r\n  }\r\n\r\n  public easeInOutBounce(x: number): number {\r\n    return x < 0.5 ? (1 - this.easeOutBounce(1 - 2 * x)) / 2 : (1 + this.easeOutBounce(2 * x - 1)) / 2;\r\n  }\r\n}\r\n","import { Color, ColorRepresentation, Euler, MathUtils, Quaternion, Vector2, Vector3, Vector4 } from 'three';\r\nimport { Easing, EasingFunction, Easings } from './Easings.js';\r\nimport { RunningAction } from './RunningTween.js';\r\nimport { Tween } from './Tween.js';\r\n\r\nconst easings = new Easings();\r\nexport type Vector = Vector2 | Vector3 | Vector4;\r\nexport type AllowedTypes = number | Vector | Quaternion | Euler | ColorRepresentation;\r\nexport type Omitype<T, U> = { [P in keyof T as T[P] extends U ? never : P]: T[P] };\r\nexport type PickType<T, U> = { [P in keyof T as T[P] extends U ? P : never]: T[P] };\r\nexport type TransformType<T, U, V> = { [P in keyof T]: T[P] extends U ? T[P] | V : T[P] };\r\nexport type TransformedTypes<T> = TransformType<TransformType<T, Color, ColorRepresentation>, Vector, number>;\r\nexport type FilteredType<T> = PickType<Partial<TransformedTypes<T>>, AllowedTypes>;\r\nexport type Motion<T> = { [key in keyof FilteredType<T>]: FilteredType<T>[key] };\r\nexport type SetMotion<T> = { [key in keyof T]?: T[key] };\r\n\r\n/**\r\n * Interface for configuring motion animations in a Tween.\r\n * You can specify easing, callback functions, and progress tracking functions.\r\n * @template T - The type of the target object being tweened.\r\n */\r\nexport interface MotionConfig<T = any> {\r\n  /** The easing function to control the animation's progression. */\r\n  easing?: Easing;\r\n  /**\r\n     * A callback function to execute when the animation completes.\r\n     * @param target - The target object that was tweened.\r\n     */\r\n  onComplete?: (target: T) => void;\r\n  /**\r\n     * A callback function to execute when the animation starts.\r\n     * @param target - The target object that is being tweened.\r\n     */\r\n  onStart?: (target: T) => void;\r\n  /**\r\n     * A callback function to be executed after each property has been updated.\r\n     * @param target - The target object that is being tweened.\r\n     */\r\n  onUpdate?: (target: T) => void;\r\n  /**\r\n     * A callback function to be executed before each property is updated.\r\n     * @param target - The target object that is being tweened.\r\n     * @param key - The key or property being animated.\r\n     * @param start - The initial value of the animated property.\r\n     * @param end - The final value of the animated property.\r\n     * @param alpha - The current animation progress as a normalized value (0 to 1).\r\n     * @returns If `false`, will not assign a new value to the property.\r\n     */\r\n  onProgress?: (target: T, key: string, start: AllowedTypes, end: AllowedTypes, alpha: number) => boolean | void;\r\n}\r\n\r\n/** @internal */\r\nexport interface ActionDescriptor {\r\n  actions?: RunningAction[];\r\n  tweens?: Tween[];\r\n  config?: MotionConfig;\r\n}\r\n\r\n/** @internal */\r\nexport interface IAction<T> {\r\n  init?(target: T): ActionDescriptor;\r\n  hasActions: boolean;\r\n  isRepeat?: boolean;\r\n  isYoyo?: boolean;\r\n  isTween?: boolean;\r\n  times?: number;\r\n}\r\n\r\n/** @internal */\r\nexport class ActionRepeat<T> implements IAction<T> {\r\n  public hasActions = false;\r\n  public isRepeat = true;\r\n  constructor(public times: number) { }\r\n}\r\n\r\n/** @internal */\r\nexport class ActionYoyo<T> implements IAction<T> {\r\n  public hasActions = false;\r\n  public isYoyo = true;\r\n  constructor(public times: number) { }\r\n}\r\n\r\n/** @internal */\r\nexport class ActionTween<T> implements IAction<T> {\r\n  public hasActions = true;\r\n  public isTween = true;\r\n  public tweens: Tween<T>[] = [];\r\n\r\n  constructor(...tweens: Tween<T>[]) {\r\n    for (const tween of tweens) {\r\n      this.tweens.push(tween.clone());\r\n    }\r\n  }\r\n}\r\n\r\n/** @internal */\r\nexport class ActionCallback<T> implements IAction<T> {\r\n  public hasActions = true;\r\n  constructor(public callback: () => void) { }\r\n\r\n  public init(): ActionDescriptor {\r\n    return { actions: [{ callback: this.callback, time: 0 }] };\r\n  }\r\n}\r\n\r\n/** @internal */\r\nexport class ActionDelay<T> implements IAction<T> {\r\n  public hasActions = true;\r\n  constructor(public time: number) { }\r\n\r\n  public init(): ActionDescriptor {\r\n    return { actions: [{ callback: () => { }, time: this.time }] };\r\n  }\r\n}\r\n\r\n/** @internal */\r\nexport class ActionMotion<T> implements IAction<T> {\r\n  public hasActions = true;\r\n  constructor(public time: number, public motion: Motion<T> | SetMotion<T>, public config: MotionConfig<T>, public isBy: boolean) { }\r\n\r\n  public init(target: T): ActionDescriptor {\r\n    const actions: RunningAction[] = [];\r\n    for (const key in this.motion) {\r\n      if (key === 'easing') continue;\r\n      const actionValue = this.motion[key];\r\n      const targetValue = target[key];\r\n      const action = this.vector(key, actionValue as Vector, targetValue as Vector)\r\n        ?? this.quaternion(key, actionValue as Quaternion, targetValue as Quaternion)\r\n        ?? this.euler(key, actionValue as Euler, targetValue as Euler)\r\n        ?? this.color(key, actionValue as Color, targetValue as Color)\r\n        ?? this.number(target, key, actionValue as number);\r\n      if (action) {\r\n        actions.push(action);\r\n      }\r\n    }\r\n    return { actions, config: this.config };\r\n  }\r\n\r\n  private getEasing(): EasingFunction {\r\n    const easing = this.config?.easing ?? Easings.DEFAULT_EASING;\r\n    return typeof easing === 'string' ? (easings[easing].bind(easings) ?? easings.linear) : easing;\r\n  }\r\n\r\n  private vector(key: string, actionValue: Vector | number, targetValue: Vector): RunningAction<Vector> {\r\n    if (!targetValue) return;\r\n    if ((targetValue as Vector2).isVector2 || (targetValue as Vector3).isVector3 || (targetValue as Vector4).isVector4) {\r\n      const value = typeof actionValue === 'number' ? targetValue.clone().setScalar(actionValue) : actionValue;\r\n      return {\r\n        key,\r\n        time: this.time,\r\n        easing: this.getEasing(),\r\n        start: targetValue.clone(),\r\n        end: this.isBy ? value.clone().add(targetValue as Vector4) : value,\r\n        callback: (start, end, alpha) => { targetValue.lerpVectors(start as Vector4, end as Vector4, alpha); }\r\n      };\r\n    }\r\n  }\r\n\r\n  private quaternion(key: string, actionValue: Quaternion, targetValue: Quaternion): RunningAction<Quaternion> {\r\n    if (targetValue?.isQuaternion) {\r\n      return {\r\n        key,\r\n        time: this.time,\r\n        easing: this.getEasing(),\r\n        start: targetValue.clone(),\r\n        end: this.isBy ? actionValue.clone().premultiply(targetValue) : actionValue,\r\n        callback: (start, end, alpha) => { targetValue.slerpQuaternions(start, end, alpha); }\r\n      };\r\n    }\r\n  }\r\n\r\n  private euler(key: string, actionValue: Euler, targetValue: Euler): RunningAction<Euler> {\r\n    if (targetValue?.isEuler) {\r\n      return {\r\n        key,\r\n        time: this.time,\r\n        easing: this.getEasing(),\r\n        start: targetValue.clone(),\r\n        end: this.isBy ? new Euler(actionValue.x + targetValue.x, actionValue.y + targetValue.y, actionValue.z + targetValue.z) : actionValue,\r\n        callback: (start, end, alpha) => {\r\n          targetValue.set(MathUtils.lerp(start.x, end.x, alpha), MathUtils.lerp(start.y, end.y, alpha), MathUtils.lerp(start.z, end.z, alpha));\r\n        }\r\n      };\r\n    }\r\n  }\r\n\r\n  private color(key: string, actionValue: ColorRepresentation, targetValue: Color): RunningAction<Color> {\r\n    if (targetValue?.isColor) {\r\n      return {\r\n        key,\r\n        time: this.time,\r\n        easing: this.getEasing(),\r\n        start: targetValue.clone(),\r\n        end: this.isBy ? new Color(actionValue).add(targetValue) : new Color(actionValue),\r\n        callback: (start, end, alpha) => { targetValue.lerpColors(start, end, alpha); }\r\n      };\r\n    }\r\n  }\r\n\r\n  private number(target: T, key: string, actionValue: number): RunningAction<number> {\r\n    if (typeof actionValue === 'number')\r\n      return {\r\n        key,\r\n        time: this.time,\r\n        easing: this.getEasing(),\r\n        start: target[key],\r\n        end: this.isBy ? actionValue + target[key] : actionValue,\r\n        callback: (start, end, alpha) => { target[key] = MathUtils.lerp(start, end, alpha); }\r\n      };\r\n  }\r\n}\r\n","import { ActionCallback, ActionDelay, ActionMotion, ActionRepeat, ActionTween, ActionYoyo, IAction, Motion, MotionConfig, SetMotion } from './Actions.js';\r\nimport { RunningTween } from './RunningTween.js';\r\nimport { TweenManager } from './TweenManager.js';\r\n\r\n/**\r\n * A Tween represents a series of actions that can be applied to a target object to create animations or sequences of events.\r\n * @template T - The type of the target object.\r\n */\r\nexport class Tween<T = any> {\r\n  /** @internal */ public actions: IAction<T>[] = [];\r\n  /** @internal */ public blockHistory = false;\r\n  /** @internal */ public infiniteLoop = false;\r\n  /** The object to apply the tween to. */\r\n  public target: T;\r\n  /** Tags used for filtering and management. */\r\n  public tags: string[] = [];\r\n  /** Unique identifier. If specified, the old tween with the same id will be stopped. */\r\n  public id: string;\r\n\r\n  /**\r\n     * @param target - The object to apply the tween to.\r\n     */\r\n  constructor(target: T) {\r\n    this.target = target;\r\n  }\r\n\r\n  /**\r\n     * Set a unique identifier for the Tween. If specified, stops the old tween with the same id.\r\n     * @param id The identifier to assign to the Tween.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public setId(id: string): this {\r\n    this.id = id;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Set tags for the Tween, which can be used for filtering and management.\r\n     * @param tags - Tags to associate with the Tween.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public setTags(...tags: string[]): this {\r\n    this.tags = tags;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Set the target object for the Tween.\r\n     * @param target - The object to apply the tween to.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public setTarget(target: T): this {\r\n    this.target = target;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Define a motion from the current state to a new state over a specified time.\r\n     * @param time - The duration of the motion in milliseconds.\r\n     * @param action - The motion configuration.\r\n     * @param config - Additional motion configuration options.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public to(time: number, action: Motion<T>, config?: MotionConfig<T>): this {\r\n    this.actions.push(new ActionMotion(time, action, config, false));\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Define a relative motion from the current state.\r\n     * @param time - The duration of the motion in milliseconds.\r\n     * @param action - The motion configuration.\r\n     * @param config - Additional motion configuration options.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public by(time: number, action: Motion<T>, config?: MotionConfig<T>): this {\r\n    this.actions.push(new ActionMotion(time, action, config, true));\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Define a movement from the current state to a new state instantaneously.\r\n     * @param action - The motion configuration.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public set(action: SetMotion<T>): this {\r\n    this.actions.push(new ActionMotion(0, action, {}, false));\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Add a callback action to the Tween.\r\n     * @param callback - The callback function to execute.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public call(callback: () => void): this {\r\n    this.actions.push(new ActionCallback(callback));\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Add a delay before executing the next action.\r\n     * @param time - The duration of the delay in milliseconds.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public delay(time: number): this {\r\n    this.actions.push(new ActionDelay(time));\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Repeat the last action for a specific number of times.\r\n     * @param times - The number of times to repeat the action.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public repeat(times = 1): this {\r\n    if (times === Infinity) {\r\n      this.blockHistory = true;\r\n      this.infiniteLoop = true;\r\n    }\r\n    if (this.actions[this.actions.length - 1].isRepeat) {\r\n      this.actions[this.actions.length - 1].times += times;\r\n    } else {\r\n      this.actions.push(new ActionRepeat(times));\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Repeat the last action indefinitely.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public repeatForever(): this {\r\n    return this.repeat(Infinity);\r\n  }\r\n\r\n  /**\r\n     * Apply a yoyo effect to the last action, making it reverse its motion, for a specific number of times.\r\n     * @param times - The number of times to yoyo the last action.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public yoyo(times = 1): this {\r\n    if (times === Infinity) {\r\n      this.infiniteLoop = true;\r\n    }\r\n    if (this.actions[this.actions.length - 1].isYoyo) {\r\n      this.actions[this.actions.length - 1].times += times;\r\n    } else {\r\n      this.actions.push(new ActionYoyo(times));\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Apply a yoyo effect to the last action, making it reverse its motion, indefinitely.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public yoyoForever(): this {\r\n    return this.yoyo(Infinity);\r\n  }\r\n\r\n  /**\r\n     * Chain another Tween to execute after this Tween.\r\n     * @param tween - The Tween to chain.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public then(tween: Tween<T>): this {\r\n    this.actions.push(new ActionTween(tween));\r\n    this.infiniteLoop ||= tween.infiniteLoop;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Run multiple Tweens in parallel.\r\n     * @param tweens - The Tweens to run in parallel.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public parallel(...tweens: Tween<T>[]): this {\r\n    this.actions.push(new ActionTween(...tweens));\r\n    this.infiniteLoop ||= tweens.some((x) => x.infiniteLoop);\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Run multiple Tweens in sequence.\r\n     * @param tweens - The Tweens to run in sequence.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public sequence(...tweens: Tween<T>[]): this {\r\n    for (const tween of tweens) {\r\n      this.actions.push(new ActionTween(tween));\r\n      this.infiniteLoop ||= tween.infiniteLoop;\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Chain actions from another Tween to this Tween.\r\n     * @param tween - The Tween containing actions to chain.\r\n     * @returns The updated Tween instance.\r\n     */\r\n  public chain(tween: Tween<T>): this {\r\n    this.actions.push(...tween.actions);\r\n    this.infiniteLoop ||= tween.infiniteLoop;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n     * Clone the Tween instance.\r\n     * @returns A new Tween instance with the same configuration.\r\n     */\r\n  public clone(): Tween<T> {\r\n    const tween = new Tween(this.target);\r\n    tween.actions = [...this.actions];\r\n    tween.tags = [...this.tags];\r\n    tween.infiniteLoop = this.infiniteLoop;\r\n    return tween;\r\n  }\r\n\r\n  /**\r\n     * Start the Tween and create a RunningTween instance.\r\n     * @returns A RunningTween instance that controls the execution of the Tween.\r\n     */\r\n  public start(): RunningTween<T> {\r\n    if (this.id !== undefined) {\r\n      TweenManager.stopById(this.id);\r\n    }\r\n    return TweenManager.create(this.target, this);\r\n  }\r\n}\r\n","import { Object3D } from 'three';\r\n\r\ninterface Attribute {\r\n  key: string;\r\n  value: string;\r\n  operator?: string;\r\n}\r\n\r\ninterface QueryBlock {\r\n  tags: string[];\r\n  attributes: Attribute[];\r\n  type?: string;\r\n  recursive?: boolean;\r\n  prev?: QueryBlock;\r\n  next?: QueryBlock;\r\n}\r\n\r\ninterface NewBlockData {\r\n  char: string;\r\n  end?: number;\r\n}\r\n\r\n/** @internal */\r\nexport function querySelector(target: Object3D, query: string): Object3D {\r\n  const queryBlocks = parse(query);\r\n  const blocks: QueryBlock[][] = [];\r\n\r\n  for (let i = 0; i < queryBlocks.length; i++) {\r\n    blocks[i] = [queryBlocks[i]];\r\n  }\r\n\r\n  return search(target, blocks);\r\n}\r\n\r\n/** @internal */\r\nexport function querySelectorAll(target: Object3D, query: string): Object3D[] {\r\n  const result: Object3D[] = [];\r\n  const queryBlocks = parse(query);\r\n  const blocks: QueryBlock[][] = [];\r\n\r\n  for (let i = 0; i < queryBlocks.length; i++) {\r\n    blocks[i] = [queryBlocks[i]];\r\n  }\r\n\r\n  searchAll(target, blocks, result);\r\n  return result;\r\n}\r\n\r\nfunction search(target: Object3D, blocks: QueryBlock[][]): Object3D {\r\n  const newBlocks: QueryBlock[][] = [];\r\n\r\n  for (const blockList of blocks) {\r\n    const newBlock: QueryBlock[] = [];\r\n    newBlocks.push(newBlock);\r\n\r\n    for (const block of blockList) {\r\n      if (validateBlock(target, block, newBlock)) return target;\r\n    }\r\n\r\n    const lastNewBlock = newBlock[newBlock.length - 1];\r\n    if (lastNewBlock === undefined || lastNewBlock.prev !== lastNewBlock) newBlock.push(blockList[blockList.length - 1]);\r\n  }\r\n\r\n  for (const child of target.children) {\r\n    const obj = search(child, newBlocks);\r\n    if (obj) return obj;\r\n  }\r\n}\r\n\r\nfunction searchAll(target: Object3D, blocks: QueryBlock[][], result: Object3D[]): void {\r\n  const newBlocks: QueryBlock[][] = [];\r\n  let added = false;\r\n\r\n  for (const blockList of blocks) {\r\n    const newBlock: QueryBlock[] = [];\r\n    newBlocks.push(newBlock);\r\n\r\n    for (const block of blockList) {\r\n      if (validateBlock(target, block, newBlock) && !added) {\r\n        result.push(target);\r\n        if (target.children.length === 0) return;\r\n        added = true;\r\n      }\r\n    }\r\n\r\n    const lastNewBlock = newBlock[newBlock.length - 1];\r\n    if (lastNewBlock === undefined || lastNewBlock.prev !== lastNewBlock) newBlock.push(blockList[blockList.length - 1]);\r\n  }\r\n\r\n  for (const child of target.children) {\r\n    searchAll(child, newBlocks, result);\r\n  }\r\n}\r\n\r\nfunction validateBlock(target: Object3D, block: QueryBlock, newBlock: QueryBlock[]): boolean {\r\n  if (areValidConditions(target, block)) {\r\n    if (block.next) {\r\n      newBlock.push(block.next);\r\n    } else {\r\n      return true;\r\n    }\r\n  }\r\n  return false;\r\n}\r\n\r\nfunction areValidConditions(target: Object3D, block: QueryBlock): boolean {\r\n  return checkType(target, block.type) && checkTags(target, block.tags) && checkAttributes(target, block.attributes);\r\n}\r\n\r\nfunction checkType(target: Object3D, type: string): boolean {\r\n  return !type || target.type === type;\r\n}\r\n\r\nfunction checkTags(target: Object3D, tags: string[]): boolean {\r\n  for (const tag of tags) {\r\n    if (!target.tags.has(tag)) return false;\r\n  }\r\n  return true;\r\n}\r\n\r\nfunction checkAttributes(target: Object3D, attributes: Attribute[]): boolean {\r\n  for (const attribute of attributes) {\r\n    switch (attribute.operator) {\r\n      case undefined:\r\n        if (getValue(target, attribute.key) !== attribute.value) return false;\r\n        break;\r\n      case '*':\r\n        if (!getValue(target, attribute.key).includes(attribute.value)) return false;\r\n        break;\r\n      case '$':\r\n        if (!getValue(target, attribute.key).endsWith(attribute.value)) return false;\r\n        break;\r\n      case '^':\r\n        if (!getValue(target, attribute.key).startsWith(attribute.value)) return false;\r\n        break;\r\n    }\r\n  }\r\n  return true;\r\n}\r\n\r\nfunction getValue(target: Object3D, key: string): string {\r\n  const value = target[key];\r\n  return typeof value === 'string' ? value : value?.toString();\r\n}\r\n\r\nfunction parse(query: string): QueryBlock[] {\r\n  const blocks: QueryBlock[] = [];\r\n  let currentBlock: QueryBlock = { attributes: [], tags: [] };\r\n  let end = 0, i = 0;\r\n\r\n  blocks.push(currentBlock);\r\n  currentBlock.prev = currentBlock;\r\n  query = query.trim();\r\n\r\n  while ((i = end) < query.length) {\r\n    let char = query[i];\r\n\r\n    const result = getBlock(query, i);\r\n    if (result) {\r\n      if (result.char === ',') {\r\n        currentBlock = { attributes: [], tags: [] };\r\n        blocks.push(currentBlock);\r\n        currentBlock.prev = currentBlock;\r\n      } else {\r\n        const newBlock: QueryBlock = { attributes: [], tags: [], recursive: result.char === ' ' };\r\n        currentBlock.next = newBlock;\r\n        newBlock.prev = getPrev(newBlock, currentBlock);\r\n        currentBlock = newBlock;\r\n      }\r\n\r\n      i = result.end;\r\n      char = query[i];\r\n    }\r\n\r\n    end = getNextIndex(query, i + 1);\r\n\r\n    if (char === '.') addTag(query, i, end, currentBlock);\r\n    else if (char === '[') addAttribute(query, i, end, currentBlock);\r\n    else addType(query, i, end, currentBlock);\r\n  }\r\n\r\n  return blocks;\r\n}\r\n\r\nfunction getBlock(query: string, index: number): NewBlockData {\r\n  let ret: NewBlockData;\r\n\r\n  for (; index < query.length; index++) {\r\n    const char = query[index];\r\n    if (char !== ' ' && char !== '>' && char !== ',') break;\r\n    if (!ret) {\r\n      ret = { char };\r\n    } else if (char !== ' ') {\r\n      ret.char = char;\r\n    }\r\n  }\r\n\r\n  if (ret) ret.end = index;\r\n  return ret;\r\n}\r\n\r\nfunction getPrev(newBlock: QueryBlock, oldBlock: QueryBlock): QueryBlock {\r\n  if (newBlock.recursive) return newBlock;\r\n  while (oldBlock !== oldBlock.prev) {\r\n    oldBlock = oldBlock.prev;\r\n  }\r\n  return oldBlock;\r\n}\r\n\r\nfunction getNextIndex(query: string, index: number): number {\r\n  for (; index < query.length; index++) {\r\n    const char = query[index];\r\n    if (char === '.' || char === ' ' || char === '>' || char === '[' || char === ',') break;\r\n  }\r\n  return index;\r\n}\r\n\r\nfunction addTag(query: string, start: number, end: number, block: QueryBlock): void {\r\n  block.tags.push(query.substring(start + 1, end));\r\n}\r\n\r\nfunction addType(query: string, start: number, end: number, block: QueryBlock): void {\r\n  block.type = query.substring(start, end);\r\n}\r\n\r\nfunction addAttribute(query: string, start: number, end: number, block: QueryBlock): void {\r\n  const sub = query.substring(start + 1, end - 1);\r\n  const split = sub.split('=');\r\n  const lastChar = split[0][split[0].length - 1];\r\n  if (lastChar === '*' || lastChar === '$' || lastChar === '^') {\r\n    block.attributes.push({ key: split[0].slice(0, -1), value: split[1], operator: lastChar });\r\n  } else {\r\n    block.attributes.push({ key: split[0], value: split[1] });\r\n  }\r\n}\r\n","import { Object3D } from 'three';\r\n\r\n/** @internal */\r\nexport function applyEulerPatch(target: Object3D): void {\r\n  target.__onChangeBaseEuler = target.rotation._onChangeCallback;\r\n  if (target.scene?.__smartRendering) {\r\n    setEulerChangeCallbackSR(target);\r\n  } else {\r\n    setEulerChangeCallback(target);\r\n  }\r\n}\r\n\r\n/** @internal */\r\nexport function setEulerChangeCallbackSR(target: Object3D): void {\r\n  target.rotation._onChangeCallback = () => {\r\n    target.__onChangeBaseEuler();\r\n    target.needsRender = true;\r\n    target.__eventsDispatcher.dispatch('rotationchange');\r\n  };\r\n}\r\n\r\n/** @internal */\r\nexport function setEulerChangeCallback(target: Object3D): void {\r\n  target.rotation._onChangeCallback = () => {\r\n    target.__onChangeBaseEuler();\r\n    target.__eventsDispatcher.dispatch('rotationchange');\r\n  };\r\n}\r\n","import { Object3D } from 'three';\r\n\r\n/** @internal Override compose method because is called for every rendered object and can be performance critical after Vector3 patch. */\r\nexport function applyMatrix4Patch(parent: Object3D): void {\r\n  parent.matrix.compose = function (position: any, quaternion: any, scale: any) {\r\n    const te = this.elements;\r\n\r\n    const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\r\n    const x2 = x + x, y2 = y + y, z2 = z + z;\r\n    const xx = x * x2, xy = x * y2, xz = x * z2;\r\n    const yy = y * y2, yz = y * z2, zz = z * z2;\r\n    const wx = w * x2, wy = w * y2, wz = w * z2;\r\n\r\n    const sx = scale._x, sy = scale._y, sz = scale._z;\r\n\r\n    te[0] = (1 - (yy + zz)) * sx;\r\n    te[1] = (xy + wz) * sx;\r\n    te[2] = (xz - wy) * sx;\r\n    te[3] = 0;\r\n\r\n    te[4] = (xy - wz) * sy;\r\n    te[5] = (1 - (xx + zz)) * sy;\r\n    te[6] = (yz + wx) * sy;\r\n    te[7] = 0;\r\n\r\n    te[8] = (xz + wy) * sz;\r\n    te[9] = (yz - wx) * sz;\r\n    te[10] = (1 - (xx + yy)) * sz;\r\n    te[11] = 0;\r\n\r\n    te[12] = position._x;\r\n    te[13] = position._y;\r\n    te[14] = position._z;\r\n    te[15] = 1;\r\n\r\n    return this;\r\n  };\r\n}\r\n","import { Object3D } from 'three';\r\n\r\n/** @internal */\r\nexport function applyQuaternionPatch(target: Object3D): void {\r\n  target.__onChangeBaseQuat = target.quaternion._onChangeCallback;\r\n  if (target.scene?.__smartRendering) {\r\n    setQuatChangeCallbackSR(target);\r\n  } else {\r\n    setQuatChangeCallback(target);\r\n  }\r\n}\r\n\r\n/** @internal */\r\nexport function setQuatChangeCallback(target: Object3D): void {\r\n  target.quaternion._onChangeCallback = () => {\r\n    target.__onChangeBaseQuat();\r\n    target.__eventsDispatcher.dispatch('rotationchange');\r\n  };\r\n}\r\n\r\n/** @internal */\r\nexport function setQuatChangeCallbackSR(target: Object3D): void {\r\n  target.quaternion._onChangeCallback = () => {\r\n    target.__onChangeBaseQuat();\r\n    target.needsRender = true;\r\n    target.__eventsDispatcher.dispatch('rotationchange');\r\n  };\r\n}\r\n","import { BufferAttribute, Camera, Color, Cylindrical, Euler, MathUtils, Matrix3, Matrix4, Object3D, Quaternion, Spherical, Vector3, Vector3Tuple } from 'three';\r\n\r\n/** @internal */\r\nexport function applyVec3Patch(target: Object3D): void {\r\n  patchVector(target.position);\r\n  patchVector(target.scale);\r\n  if (target.scene?.__smartRendering) {\r\n    setVec3ChangeCallbackSR(target);\r\n  } else {\r\n    setVec3ChangeCallback(target);\r\n  }\r\n}\r\n\r\n/** @internal */\r\nexport function setVec3ChangeCallback(target: Object3D): void {\r\n  (target.position as Vector3Ext)._onChangeCallback = () => target.__eventsDispatcher.dispatch('positionchange');\r\n  (target.scale as Vector3Ext)._onChangeCallback = () => target.__eventsDispatcher.dispatch('scalechange');\r\n}\r\n\r\n/** @internal */\r\nexport function setVec3ChangeCallbackSR(target: Object3D): void {\r\n  (target.position as Vector3Ext)._onChangeCallback = () => {\r\n    target.needsRender = true;\r\n    target.__eventsDispatcher.dispatch('positionchange');\r\n  };\r\n  (target.scale as Vector3Ext)._onChangeCallback = () => {\r\n    target.needsRender = true;\r\n    target.__eventsDispatcher.dispatch('scalechange');\r\n  };\r\n}\r\n\r\nfunction patchVector(vec3: Vector3): void {\r\n  (vec3 as Vector3Ext)._x = vec3.x;\r\n  (vec3 as Vector3Ext)._y = vec3.y;\r\n  (vec3 as Vector3Ext)._z = vec3.z;\r\n  delete vec3.x;\r\n  delete vec3.y;\r\n  delete vec3.z;\r\n  Object.setPrototypeOf(vec3, Vector3Ext.prototype);\r\n}\r\n\r\n/** @LASTREV 162 Vector3 */\r\nclass Vector3Ext {\r\n  public _x: number;\r\n  public _y: number;\r\n  public _z: number;\r\n  public _onChangeCallback: () => void;\r\n  public isVector3: true;\r\n\r\n  public get x(): number { return this._x; }\r\n  public set x(value: number) {\r\n    this._x = value;\r\n    this._onChangeCallback();\r\n  }\r\n\r\n  public get y(): number { return this._y; }\r\n  public set y(value: number) {\r\n    this._y = value;\r\n    this._onChangeCallback();\r\n  }\r\n\r\n  public get z(): number { return this._z; }\r\n  public set z(value: number) {\r\n    this._z = value;\r\n    this._onChangeCallback();\r\n  }\r\n\r\n  public set(x: number, y: number, z: number): this {\r\n    if (z === undefined) z = this._z;\r\n    this._x = x;\r\n    this._y = y;\r\n    this._z = z;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public setScalar(scalar: number): this {\r\n    this._x = scalar;\r\n    this._y = scalar;\r\n    this._z = scalar;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public setX(x: number): this {\r\n    this._x = x;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public setY(y: number): this {\r\n    this._y = y;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public setZ(z: number): this {\r\n    this._z = z;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public setComponent(index: number, value: number): this {\r\n    switch (index) {\r\n      case 0:\r\n        this._x = value;\r\n        break;\r\n      case 1:\r\n        this._y = value;\r\n        break;\r\n      case 2:\r\n        this._z = value;\r\n        break;\r\n      default: throw new Error('index is out of range: ' + index);\r\n    }\r\n\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public getComponent(index: number): number {\r\n    switch (index) {\r\n      case 0: return this._x;\r\n      case 1: return this._y;\r\n      case 2: return this._z;\r\n      default: throw new Error('index is out of range: ' + index);\r\n    }\r\n  }\r\n\r\n  public clone(): Vector3 {\r\n    return new (Vector3.prototype as any).constructor(this._x, this._y, this._z);\r\n  }\r\n\r\n  public copy(v: Vector3, update?: boolean): this {\r\n    this._x = v.x;\r\n    this._y = v.y;\r\n    this._z = v.z;\r\n    if (update !== false) this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public add(v: Vector3): this {\r\n    this._x += v.x;\r\n    this._y += v.y;\r\n    this._z += v.z;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public addScalar(s: number): this {\r\n    this._x += s;\r\n    this._y += s;\r\n    this._z += s;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public addVectors(a: Vector3, b: Vector3): this {\r\n    this._x = a.x + b.x;\r\n    this._y = a.y + b.y;\r\n    this._z = a.z + b.z;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public addScaledVector(v: Vector3, s: number): this {\r\n    this._x += v.x * s;\r\n    this._y += v.y * s;\r\n    this._z += v.z * s;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public sub(v: Vector3): this {\r\n    this._x -= v.x;\r\n    this._y -= v.y;\r\n    this._z -= v.z;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public subScalar(s: number): this {\r\n    this._x -= s;\r\n    this._y -= s;\r\n    this._z -= s;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public subVectors(a: Vector3, b: Vector3): this {\r\n    this._x = a.x - b.x;\r\n    this._y = a.y - b.y;\r\n    this._z = a.z - b.z;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public multiply(v: Vector3): this {\r\n    this._x *= v.x;\r\n    this._y *= v.y;\r\n    this._z *= v.z;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public multiplyScalar(scalar: number, update?: boolean): this {\r\n    this._x *= scalar;\r\n    this._y *= scalar;\r\n    this._z *= scalar;\r\n    if (update !== false) this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public multiplyVectors(a: Vector3, b: Vector3): this {\r\n    this._x = a.x * b.x;\r\n    this._y = a.y * b.y;\r\n    this._z = a.z * b.z;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public applyEuler(euler: Euler): this {\r\n    return this.applyQuaternion(_quaternion.setFromEuler(euler));\r\n  }\r\n\r\n  public applyAxisAngle(axis: Vector3, angle: number): this {\r\n    return this.applyQuaternion(_quaternion.setFromAxisAngle(axis, angle));\r\n  }\r\n\r\n  public applyMatrix3(m: Matrix3, update?: boolean): this {\r\n    const x = this._x, y = this._y, z = this._z;\r\n    const e = m.elements;\r\n    this._x = e[0] * x + e[3] * y + e[6] * z;\r\n    this._y = e[1] * x + e[4] * y + e[7] * z;\r\n    this._z = e[2] * x + e[5] * y + e[8] * z;\r\n    if (update !== false) this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public applyNormalMatrix(m: Matrix3): this {\r\n    return this.applyMatrix3(m, false).normalize();\r\n  }\r\n\r\n  public applyMatrix4(m: Matrix4, update?: boolean): this {\r\n    const x = this._x, y = this._y, z = this._z;\r\n    const e = m.elements;\r\n    const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\r\n    this._x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;\r\n    this._y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;\r\n    this._z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;\r\n    if (update !== false) this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public applyQuaternion(q: Quaternion): this {\r\n    const vx = this._x, vy = this._y, vz = this._z;\r\n    const qx = q.x, qy = q.y, qz = q.z, qw = q.w;\r\n    const tx = 2 * (qy * vz - qz * vy);\r\n    const ty = 2 * (qz * vx - qx * vz);\r\n    const tz = 2 * (qx * vy - qy * vx);\r\n    this._x = vx + qw * tx + qy * tz - qz * ty;\r\n    this._y = vy + qw * ty + qz * tx - qx * tz;\r\n    this._z = vz + qw * tz + qx * ty - qy * tx;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public project(camera: Camera): this {\r\n    return this.applyMatrix4(camera.matrixWorldInverse, false).applyMatrix4(camera.projectionMatrix);\r\n  }\r\n\r\n  public unproject(camera: Camera): this {\r\n    return this.applyMatrix4(camera.projectionMatrixInverse, false).applyMatrix4(camera.matrixWorld);\r\n  }\r\n\r\n  public transformDirection(m: Matrix4): this {\r\n    const x = this._x, y = this._y, z = this._z;\r\n    const e = m.elements;\r\n    this._x = e[0] * x + e[4] * y + e[8] * z;\r\n    this._y = e[1] * x + e[5] * y + e[9] * z;\r\n    this._z = e[2] * x + e[6] * y + e[10] * z;\r\n    return this.normalize();\r\n  }\r\n\r\n  public divide(v: Vector3): this {\r\n    this._x /= v.x;\r\n    this._y /= v.y;\r\n    this._z /= v.z;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public divideScalar(scalar: number, update?: boolean): this {\r\n    return this.multiplyScalar(1 / scalar, update);\r\n  }\r\n\r\n  public min(v: Vector3): this {\r\n    this._x = Math.min(this._x, v.x);\r\n    this._y = Math.min(this._y, v.y);\r\n    this._z = Math.min(this._z, v.z);\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public max(v: Vector3): this {\r\n    this._x = Math.max(this._x, v.x);\r\n    this._y = Math.max(this._y, v.y);\r\n    this._z = Math.max(this._z, v.z);\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public clamp(min: Vector3, max: Vector3): this {\r\n    this._x = Math.max(min.x, Math.min(max.x, this._x));\r\n    this._y = Math.max(min.y, Math.min(max.y, this._y));\r\n    this._z = Math.max(min.z, Math.min(max.z, this._z));\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public clampScalar(minVal: number, maxVal: number): this {\r\n    this._x = Math.max(minVal, Math.min(maxVal, this._x));\r\n    this._y = Math.max(minVal, Math.min(maxVal, this._y));\r\n    this._z = Math.max(minVal, Math.min(maxVal, this._z));\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public clampLength(min: number, max: number): this {\r\n    const length = this.length();\r\n    return this.divideScalar(length || 1, false).multiplyScalar(Math.max(min, Math.min(max, length)));\r\n  }\r\n\r\n  public floor(): this {\r\n    this._x = Math.floor(this._x);\r\n    this._y = Math.floor(this._y);\r\n    this._z = Math.floor(this._z);\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public ceil(): this {\r\n    this._x = Math.ceil(this._x);\r\n    this._y = Math.ceil(this._y);\r\n    this._z = Math.ceil(this._z);\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public round(): this {\r\n    this._x = Math.round(this._x);\r\n    this._y = Math.round(this._y);\r\n    this._z = Math.round(this._z);\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public roundToZero(): this {\r\n    this._x = Math.trunc(this._x);\r\n    this._y = Math.trunc(this._y);\r\n    this._z = Math.trunc(this._z);\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public negate(): this {\r\n    this._x = -this._x;\r\n    this._y = -this._y;\r\n    this._z = -this._z;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public dot(v: Vector3): number {\r\n    return this._x * v.x + this._y * v.y + this._z * v.z;\r\n  }\r\n\r\n  public lengthSq(): number {\r\n    return this._x * this._x + this._y * this._y + this._z * this._z;\r\n  }\r\n\r\n  public length(): number {\r\n    return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z);\r\n  }\r\n\r\n  public manhattanLength(): number {\r\n    return Math.abs(this._x) + Math.abs(this._y) + Math.abs(this._z);\r\n  }\r\n\r\n  public normalize(update?: boolean): this {\r\n    return this.divideScalar(this.length() || 1, update);\r\n  }\r\n\r\n  public setLength(length: number): this {\r\n    return this.normalize(false).multiplyScalar(length);\r\n  }\r\n\r\n  public lerp(v: Vector3, alpha: number): this {\r\n    this._x += (v.x - this._x) * alpha;\r\n    this._y += (v.y - this._y) * alpha;\r\n    this._z += (v.z - this._z) * alpha;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public lerpVectors(v1: Vector3, v2: Vector3, alpha: number): this {\r\n    this._x = v1.x + (v2.x - v1.x) * alpha;\r\n    this._y = v1.y + (v2.y - v1.y) * alpha;\r\n    this._z = v1.z + (v2.z - v1.z) * alpha;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public cross(v: Vector3): this {\r\n    return this.crossVectors(this as Vector3, v);\r\n  }\r\n\r\n  public crossVectors(a: Vector3, b: Vector3): this {\r\n    const ax = a.x, ay = a.y, az = a.z;\r\n    const bx = b.x, by = b.y, bz = b.z;\r\n    this._x = ay * bz - az * by;\r\n    this._y = az * bx - ax * bz;\r\n    this._z = ax * by - ay * bx;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public projectOnVector(v: Vector3): this {\r\n    const denominator = v.lengthSq();\r\n    if (denominator === 0) return this.set(0, 0, 0);\r\n    const scalar = v.dot(this) / denominator;\r\n    return this.copy(v, false).multiplyScalar(scalar);\r\n  }\r\n\r\n  public projectOnPlane(planeNormal: Vector3): this {\r\n    _vector.copy(this).projectOnVector(planeNormal);\r\n    return this.sub(_vector);\r\n  }\r\n\r\n  public reflect(normal: Vector3): this {\r\n    return this.sub(_vector.copy(normal).multiplyScalar(2 * this.dot(normal)));\r\n  }\r\n\r\n  public angleTo(v: Vector3): number {\r\n    const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\r\n    if (denominator === 0) return Math.PI / 2;\r\n    const theta = this.dot(v) / denominator;\r\n    return Math.acos(MathUtils.clamp(theta, -1, 1));\r\n  }\r\n\r\n  public distanceTo(v: Vector3): number {\r\n    return Math.sqrt(this.distanceToSquared(v));\r\n  }\r\n\r\n  public distanceToSquared(v: Vector3): number {\r\n    const dx = this._x - v.x, dy = this._y - v.y, dz = this._z - v.z;\r\n    return dx * dx + dy * dy + dz * dz;\r\n  }\r\n\r\n  public manhattanDistanceTo(v: Vector3): number {\r\n    return Math.abs(this._x - v.x) + Math.abs(this._y - v.y) + Math.abs(this._z - v.z);\r\n  }\r\n\r\n  public setFromSpherical(s: Spherical): this {\r\n    return this.setFromSphericalCoords(s.radius, s.phi, s.theta);\r\n  }\r\n\r\n  public setFromSphericalCoords(radius: number, phi: number, theta: number): this {\r\n    const sinPhiRadius = Math.sin(phi) * radius;\r\n    this._x = sinPhiRadius * Math.sin(theta);\r\n    this._y = Math.cos(phi) * radius;\r\n    this._z = sinPhiRadius * Math.cos(theta);\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public setFromCylindrical(c: Cylindrical): this {\r\n    return this.setFromCylindricalCoords(c.radius, c.theta, c.y);\r\n  }\r\n\r\n  public setFromCylindricalCoords(radius: number, theta: number, y: number): this {\r\n    this._x = radius * Math.sin(theta);\r\n    this._y = y;\r\n    this._z = radius * Math.cos(theta);\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public setFromMatrixPosition(m: Matrix4): this {\r\n    const e = m.elements;\r\n    this._x = e[12];\r\n    this._y = e[13];\r\n    this._z = e[14];\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public setFromMatrixScale(m: Matrix4): this {\r\n    const sx = this.setFromMatrixColumn(m, 0).length();\r\n    const sy = this.setFromMatrixColumn(m, 1).length();\r\n    const sz = this.setFromMatrixColumn(m, 2).length();\r\n    this._x = sx;\r\n    this._y = sy;\r\n    this._z = sz;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public setFromMatrixColumn(m: Matrix4, index: number): this {\r\n    return this.fromArray(m.elements, index * 4);\r\n  }\r\n\r\n  public setFromMatrix3Column(m: Matrix3, index: number): this {\r\n    return this.fromArray(m.elements, index * 3);\r\n  }\r\n\r\n  public setFromEuler(e: any): this {\r\n    this._x = e._x;\r\n    this._y = e._y;\r\n    this._z = e._z;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public setFromColor(c: Color): this {\r\n    this._x = c.r;\r\n    this._y = c.g;\r\n    this._z = c.b;\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public equals(v: Vector3): boolean {\r\n    return ((v.x === this._x) && (v.y === this._y) && (v.z === this._z));\r\n  }\r\n\r\n  public fromArray(array: number[], offset = 0): this {\r\n    this._x = array[offset];\r\n    this._y = array[offset + 1];\r\n    this._z = array[offset + 2];\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public toArray(array?: Vector3Tuple, offset?: 0): Vector3Tuple;\r\n  public toArray(array: number[] = [], offset = 0): number[] {\r\n    array[offset] = this._x;\r\n    array[offset + 1] = this._y;\r\n    array[offset + 2] = this._z;\r\n    return array;\r\n  }\r\n\r\n  public fromBufferAttribute(attribute: BufferAttribute, index: number): this {\r\n    this._x = attribute.getX(index);\r\n    this._y = attribute.getY(index);\r\n    this._z = attribute.getZ(index);\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public random(): this {\r\n    this._x = Math.random();\r\n    this._y = Math.random();\r\n    this._z = Math.random();\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  public randomDirection(): this {\r\n    const theta = Math.random() * Math.PI * 2;\r\n    const u = Math.random() * 2 - 1;\r\n    const c = Math.sqrt(1 - u * u);\r\n    this.x = c * Math.cos(theta);\r\n    this.y = u;\r\n    this.z = c * Math.sin(theta);\r\n    this._onChangeCallback();\r\n    return this;\r\n  }\r\n\r\n  *[Symbol.iterator](): Generator<unknown, any, number> {\r\n    yield this._x;\r\n    yield this._y;\r\n    yield this._z;\r\n  }\r\n}\r\n\r\nVector3Ext.prototype.isVector3 = true;\r\n\r\nconst _vector = new Vector3();\r\nconst _quaternion = new Quaternion();\r\n","import { Object3D, Scene } from 'three';\r\nimport { applyObject3DRotationPatch, applyObject3DVector3Patch } from './Object3D.js';\r\nimport { setVec3ChangeCallback, setVec3ChangeCallbackSR } from './Vector3.js';\r\nimport { setQuatChangeCallback, setQuatChangeCallbackSR } from './Quaternion.js';\r\nimport { setEulerChangeCallback, setEulerChangeCallbackSR } from './Euler.js';\r\n\r\n/** @internal */\r\nexport function applySmartRenderingPatch(target: Object3D): void {\r\n  if (target.scene.__smartRendering && !target.__smartRenderingPatched) {\r\n    applyPatch(target);\r\n  }\r\n}\r\n\r\n/** @internal */\r\nexport function removeSmartRenderingPatch(target: Object3D): void {\r\n  if (target.__smartRenderingPatched) {\r\n    setVec3ChangeCallback(target);\r\n    setQuatChangeCallback(target);\r\n    setEulerChangeCallback(target);\r\n    restoreVisible(target);\r\n    target.__smartRenderingPatched = false;\r\n  }\r\n}\r\n\r\n/** @internal */\r\nexport function activeSmartRendering(scene: Scene): void {\r\n  scene.__smartRendering = true;\r\n  applySmartRenderingPatchRecursive(scene);\r\n}\r\n\r\nfunction overrideVisible(target: Object3D): void {\r\n  target.__baseVisibleDescriptor = Object.getOwnPropertyDescriptor(target, 'visible');\r\n  Object.defineProperty(target, 'visible', {\r\n    get: function (this: Object3D) { return this.__visible; },\r\n    set: function (this: Object3D, value: boolean) {\r\n      if (this.__visible !== value) {\r\n        if (!value) {\r\n          this.applyBlur();\r\n        }\r\n        this.__visible = value;\r\n        this.needsRender = true;\r\n        this.__eventsDispatcher.dispatchDescendant('visiblechange', { value, target: this });\r\n      }\r\n    },\r\n    configurable: true\r\n  });\r\n}\r\n\r\nfunction restoreVisible(target: Object3D): void {\r\n  const descriptor = target.__baseVisibleDescriptor;\r\n  if (descriptor) {\r\n    Object.defineProperty(target, 'visible', descriptor);\r\n  } else {\r\n    delete target.visible;\r\n  }\r\n}\r\n\r\nfunction applySmartRenderingPatchRecursive(target: Object3D): void {\r\n  if (!target.__smartRenderingPatched) {\r\n    applyPatch(target);\r\n  }\r\n  for (const child of target.children) {\r\n    applySmartRenderingPatchRecursive(child);\r\n  }\r\n}\r\n\r\nfunction applyPatch(target: Object3D): void {\r\n  applyObject3DVector3Patch(target);\r\n  applyObject3DRotationPatch(target);\r\n  setVec3ChangeCallbackSR(target);\r\n  setQuatChangeCallbackSR(target);\r\n  setEulerChangeCallbackSR(target);\r\n  overrideVisible(target);\r\n  target.__smartRenderingPatched = true;\r\n}\r\n","import { Object3D, Scene } from 'three';\r\nimport { EventsCache } from '../events/MiscEventsManager.js';\r\nimport { activeSmartRendering, applySmartRenderingPatch, removeSmartRenderingPatch } from './SmartRendering.js';\r\nimport { Binding } from '../binding/Binding.js';\r\nimport { FocusEventExt, IntersectionExt } from '../events/Events.js';\r\nimport { addBase, removeBase } from './Object3D.js';\r\nimport { EventsDispatcher } from '../events/EventsDispatcher.js';\r\nimport { Default } from '../events/Default.js';\r\n\r\n/**\r\n * Represents the prototype for extending Scene functionality.\r\n */\r\nexport interface SceneExtPrototype {\r\n  /** @internal */ __boundObjects: Set<Object3D>;\r\n  /** @internal */ __smartRendering: boolean;\r\n  /**\r\n     * A flag indicating whether continuous raycasting is enabled (default: false).\r\n     * When set to true, main raycasting occurs every frame, while false triggers raycasting only upon mouse movement.\r\n     * Additionally, if set to true, the 'pointerintersection' event will be fired every frame.\r\n     */\r\n  continuousRaycasting: boolean;\r\n  /**\r\n     * A flag indicating whether continuous raycasting is enabled when searching for drop targets (default: false).\r\n     * When set to true, main raycasting for drop targets occurs every frame, while false triggers it only upon mouse movement.\r\n     * Additionally, if set to true, the 'dragover' event will be fired every frame.\r\n     */\r\n  continuousRaycastingDropTarget: boolean;\r\n  /** An array of intersections computed from the pointer (primary pointer only). */\r\n  intersections: IntersectionExt[];\r\n  /** An array of intersections computed from the pointer if an object is dragged and has 'findDropTarget' set to true (primary pointer only). */\r\n  intersectionsDropTarget: IntersectionExt[];\r\n  /** A reference to the currently focused Object3D within the scene. */\r\n  focusedObject: Object3D;\r\n  /**\r\n     * A flag indicating whether to blur the focused Object3D when clicking outside of any object.\r\n     */\r\n  blurOnClickOut: boolean;\r\n  /** The time scale for scene animations. */\r\n  timeScale: number;\r\n  /** The total time elapsed in the scene. */\r\n  totalTime: number;\r\n  /**\r\n     * Activates smart rendering for the scene.\r\n     * @returns The updated instance of the scene.\r\n     */\r\n  activeSmartRendering(): this;\r\n  /**\r\n     * Sets the focus to the specified Object3D within the scene, or clears the focus if no target is provided.\r\n     * @param target Optional. The Object3D to focus on. If not provided, the focus is cleared.\r\n     */\r\n  focus(target?: Object3D): void;\r\n}\r\n\r\nScene.prototype.continuousRaycasting = false;\r\nScene.prototype.continuousRaycastingDropTarget = false;\r\nScene.prototype.needsRender = true;\r\nScene.prototype.blurOnClickOut = false;\r\nScene.prototype.timeScale = 1;\r\nScene.prototype.totalTime = 0;\r\nScene.prototype.__smartRendering = false;\r\nScene.prototype.cursor = 'default';\r\n\r\nScene.prototype.activeSmartRendering = function () {\r\n  activeSmartRendering(this);\r\n  return this;\r\n};\r\n\r\nScene.prototype.focus = function (target?: Object3D): void {\r\n  const focusableObj = target?.firstFocusable;\r\n  if ((!target || focusableObj?.enabledState) && this.focusedObject !== focusableObj) {\r\n    const oldFocusedObj = this.focusedObject;\r\n    this.focusedObject = focusableObj;\r\n\r\n    if (oldFocusedObj?.enabledState) {\r\n      oldFocusedObj.__focused = false;\r\n      oldFocusedObj.__eventsDispatcher.dispatchDOMAncestor('blur', new FocusEventExt(focusableObj));\r\n      oldFocusedObj.__eventsDispatcher.dispatchDOM('focusout', new FocusEventExt(focusableObj));\r\n    }\r\n\r\n    if (focusableObj) {\r\n      focusableObj.__focused = true;\r\n      focusableObj.__eventsDispatcher.dispatchDOMAncestor('focus', new FocusEventExt(oldFocusedObj));\r\n      focusableObj.__eventsDispatcher.dispatchDOM('focusin', new FocusEventExt(oldFocusedObj));\r\n    }\r\n\r\n    this.needsRender = true;\r\n  }\r\n};\r\n\r\nScene.prototype.add = function (object: Object3D) {\r\n  addBase.call(this, ...arguments);\r\n  if (arguments.length === 1 && object?.isObject3D && object !== this) {\r\n    setSceneReference(object, this);\r\n    this.needsRender = true;\r\n  }\r\n  return this;\r\n};\r\n\r\nScene.prototype.remove = function (object: Object3D) {\r\n  if (arguments.length === 1 && this.children.indexOf(object) > -1) {\r\n    removeSceneReference(object);\r\n    this.needsRender = true;\r\n  }\r\n  removeBase.call(this, ...arguments);\r\n  return this;\r\n};\r\n\r\nObject.defineProperty(Scene.prototype, 'userData', { // needed to inject code in constructor\r\n  set: function (this: Scene, value) {\r\n    this.focusable = false;\r\n    this.draggable = Default.draggable;\r\n    this.interceptByRaycaster = Default.interceptByRaycaster;\r\n    this.tags = new Set();\r\n    this.__boundCallbacks = [];\r\n    this.__eventsDispatcher = new EventsDispatcher(this);\r\n\r\n    this.intersections = [];\r\n    this.intersectionsDropTarget = [];\r\n    this.scene = this;\r\n    this.__boundObjects = new Set();\r\n\r\n    Object.defineProperty(this, 'userData', {\r\n      value, writable: true, configurable: true\r\n    });\r\n  },\r\n  configurable: true\r\n});\r\n\r\n/** @internal */\r\nexport function setSceneReference(target: Object3D, scene: Scene): void {\r\n  target.scene = scene;\r\n  EventsCache.update(target);\r\n  applySmartRenderingPatch(target);\r\n  Binding.bindToScene(target);\r\n\r\n  for (const object of target.children) {\r\n    setSceneReference(object, scene);\r\n  }\r\n}\r\n\r\n/** @internal */\r\nexport function removeSceneReference(target: Object3D): void {\r\n  EventsCache.removeAll(target);\r\n  removeSmartRenderingPatch(target);\r\n  Binding.unbindFromScene(target);\r\n  target.scene = undefined;\r\n\r\n  for (const object of target.children) {\r\n    removeSceneReference(object);\r\n  }\r\n}\r\n","import { Object3D, Scene } from 'three';\r\nimport { Binding, BindingCallback } from '../binding/Binding.js';\r\nimport { Cursor } from '../events/CursorManager.js';\r\nimport { Default } from '../events/Default.js';\r\nimport { Events, InteractionEvents } from '../events/Events.js';\r\nimport { EventsDispatcher } from '../events/EventsDispatcher.js';\r\nimport { Hitbox } from '../events/Hitbox.js';\r\nimport { Tween } from '../tweening/Tween.js';\r\nimport { querySelector, querySelectorAll } from '../utils/Query.js';\r\nimport { applyEulerPatch } from './Euler.js';\r\nimport { applyMatrix4Patch } from './Matrix4.js';\r\nimport { applyQuaternionPatch } from './Quaternion.js';\r\nimport { removeSceneReference, setSceneReference } from './Scene.js';\r\nimport { applyVec3Patch } from './Vector3.js';\r\n\r\n/**\r\n * Represents the prototype for extended Object3D functionality.\r\n */\r\nexport interface Object3DExtPrototype {\r\n  /** @internal */ __boundCallbacks: BindingCallback[];\r\n  /** @internal */ __manualDetection: boolean;\r\n  /** @internal */ __eventsDispatcher: EventsDispatcher;\r\n  /** @internal */ __vec3Patched: boolean;\r\n  /** @internal */ __rotationPatched: boolean;\r\n  /** @internal */ __smartRenderingPatched: boolean;\r\n  /** @internal */ __enabled: boolean;\r\n  /** @internal */ __visible: boolean;\r\n  /** @internal */ __hovered: boolean;\r\n  /** @internal */ __focused: boolean;\r\n  /** @internal */ __clicking: boolean;\r\n  /** @internal */ __dragging: boolean;\r\n  /** @internal */ __isDropTarget: boolean;\r\n  /** @internal */ __baseVisibleDescriptor: PropertyDescriptor;\r\n  /** @internal */ __onChangeBaseEuler: () => void;\r\n  /** @internal */ __onChangeBaseQuat: () => void;\r\n  /**\r\n   * Determines if the object is enabled. Default is `true`.\r\n   * If set to true, it allows triggering all InteractionEvents; otherwise, events are disabled.\r\n   */\r\n  enabled: boolean;\r\n  /**\r\n   * Determines if the **object** and **all of its children** can be intercepted by the main raycaster.\r\n   * @default DEFAULT_INTERCEPT_BY_RAYCASTER (true).\r\n   */\r\n  interceptByRaycaster: boolean;\r\n  /** Array of hitboxes for collision detection. */\r\n  hitboxes: Hitbox[];\r\n  /** Indicates which object will be dragged instead of this one. */\r\n  dragTarget: Object3D;\r\n  /** Indicates whether the object can receive focus. Default is DEFAULT_FOCUSABLE (`true`). */\r\n  focusable: boolean;\r\n  /** Indicates whether the object is draggable. Default is DEFAULT_DRAGGABLE (`false`). */\r\n  draggable: boolean;\r\n  /** Determines when the object is dragged, whether it will have to search for any drop targets. Default is `false`. */\r\n  findDropTarget: boolean;\r\n  /** Reference to the scene the object belongs to. */\r\n  scene: Scene;\r\n  /** Cursor style when interacting with the object. */\r\n  cursor: Cursor;\r\n  /** Cursor style when dragging the object. */\r\n  cursorDrag: Cursor;\r\n  /** Cursor style when dropping an object onto this one. */\r\n  cursorDrop: Cursor;\r\n  /** Indicates whether the scene needs rendering. */\r\n  needsRender: boolean;\r\n  /** Indicates the tags to be searched using the querySelector and `querySelectorAll` methods. */\r\n  tags: Set<string>;\r\n  /** Indicates if the primary pointer is over this object. */\r\n  get hovered(): boolean;\r\n  /** Indicates if the object is currently focused. */\r\n  get focused(): boolean;\r\n  /** Indicates if the object is currently being clicked. */\r\n  get clicking(): boolean;\r\n  /** Indicates if the object is currently being dragged. */\r\n  get isDragging(): boolean;\r\n  /** Retrieves the combined enabled state considering parent objects. */\r\n  get enabledState(): boolean;\r\n  /** Retrieves the combined visibility state considering parent objects. */\r\n  get visibilityState(): boolean;\r\n  /** Retrieves the first possible focusable object. */\r\n  get firstFocusable(): Object3D;\r\n  /**\r\n   * Applies focus to the object.\r\n   */\r\n  applyFocus(): void;\r\n  /**\r\n   * Applies blur (removes focus) from the object.\r\n   */\r\n  applyBlur(): void;\r\n  /**\r\n   * Attaches an event listener to the object.\r\n   * @param type - The type of event to listen for.\r\n   * @param listener - The callback function to execute when the event occurs.\r\n   * @returns A function to remove the event listener.\r\n   */\r\n  on<K extends keyof Events>(type: K | K[], listener: (this: this, event?: Events[K]) => void): (event?: Events[K]) => void;\r\n  /**\r\n   * Checks if the object has a specific event listener.\r\n   * @param type - The type of event to check for.\r\n   * @param listener - The callback function to check.\r\n   * @returns `true` if the event listener is attached; otherwise, `false`.\r\n   */\r\n  hasEvent<K extends keyof Events>(type: K, listener: (event?: Events[K]) => void): boolean;\r\n  /**\r\n   * Removes an event listener from the object.\r\n   * @param type - The type of event to remove the listener from.\r\n   * @param listener - The callback function to remove.\r\n   */\r\n  off<K extends keyof Events>(type: K, listener: (event?: Events[K]) => void): void;\r\n  /**\r\n   * Triggers a specific event on the object.\r\n   * @param type - The type of event to trigger.\r\n   * @param event - Optional event data to pass to the listeners.\r\n   */\r\n  trigger<K extends keyof Events>(type: K, event?: Events[K]): void;\r\n  /**\r\n   * Triggers a specific event on the object and all its ancestors.\r\n   * @param type - The type of event to trigger.\r\n   * @param event - Optional event data to pass to the listeners.\r\n   */\r\n  triggerAncestor<K extends keyof InteractionEvents>(type: K, event?: InteractionEvents[K]): void;\r\n  /**\r\n   * Activates manual detection mode for bindings.\r\n   * When this method is used, all bindings will no longer be calculated automatically.\r\n   * Instead, they must be manually computed using the 'detectChanges' function.\r\n   */\r\n  setManualDetectionMode(): void;\r\n  /**\r\n   * Calculates all bindings on the current object.\r\n   * If 'recursive' is set to true, it will also calculate bindings for all children.\r\n   * @param recursive If true, calculate bindings for children as well (optional, default: `false`).\r\n   */\r\n  detectChanges(recursive?: boolean): void;\r\n  /**\r\n   * Binds a property to a callback function for updates.\r\n   * @param property - The name of the property to bind.\r\n   * @param getCallback - A function that retrieves the property's value.\r\n   * @param renderOnChange - Indicates whether to render when the property changes (optional, default: `false`).\r\n   * @returns The instance of the object with the binding applied.\r\n   */\r\n  bindProperty<T extends keyof this>(property: T, getCallback: () => this[T], renderOnChange?: boolean): this;\r\n  /**\r\n   * Unbinds a previously bound property from the object.\r\n   * @param property - The name of the property to unbind.\r\n   * @returns The instance of the object with the binding removed.\r\n   */\r\n  unbindProperty<T extends keyof this>(property: T): this;\r\n  /**\r\n   * Initiates a Tween animation for the object.\r\n   * @param id - Unique identifier. If you start a new tween, the old one with the same id (if specified) will be stopped.\r\n   * @template T - The type of the target.\r\n   * @returns A Tween instance for further configuration.\r\n   */\r\n  tween<T extends Object3D = Object3D>(id?: string): Tween<T>;\r\n  /**\r\n   * Finds and returns the first Object3D element that matches the specified query string.\r\n   * This method follows a similar syntax to CSS selectors.\r\n   * @param query - The query string to match against the Object3D elements.\r\n   * @returns The first Object3D element that matches the query, or undefined if no match is found.\r\n   */\r\n  querySelector(query: string): Object3D;\r\n  /**\r\n   * Finds and returns a list of Object3D elements that match the specified query string.\r\n   * This method follows a similar syntax to CSS selectors.\r\n   * @param query - The query string to match against the Object3D elements.\r\n   * @returns An array of Object3D elements that match the query.\r\n   */\r\n  querySelectorAll(query: string): Object3D[];\r\n}\r\n\r\nObject3D.prototype.findDropTarget = false;\r\nObject3D.prototype.__manualDetection = false;\r\nObject3D.prototype.__focused = false;\r\nObject3D.prototype.__clicking = false;\r\nObject3D.prototype.__dragging = false;\r\nObject3D.prototype.__hovered = false;\r\n\r\nObject3D.prototype.__visible = true;\r\nObject.defineProperty(Object3D.prototype, 'visible', {\r\n  get: function (this: Object3D) { return this.__visible; },\r\n  set: function (this: Object3D, value: boolean) {\r\n    if (this.__visible !== value) {\r\n      this.__visible = value;\r\n      this.__eventsDispatcher.dispatchDescendant('visiblechange', { value, target: this });\r\n    }\r\n  },\r\n  configurable: true\r\n});\r\n\r\nObject3D.prototype.__enabled = true;\r\nObject.defineProperty(Object3D.prototype, 'enabled', {\r\n  get: function (this: Object3D) { return this.__enabled; },\r\n  set: function (this: Object3D, value: boolean) {\r\n    if (this.__enabled !== value) {\r\n      if (!value) {\r\n        this.applyBlur();\r\n      }\r\n      this.__enabled = value;\r\n      this.__eventsDispatcher.dispatchDescendant('enabledchange', { value, target: this });\r\n    }\r\n  },\r\n  configurable: true\r\n});\r\n\r\nObject.defineProperty(Object3D.prototype, 'firstFocusable', {\r\n  get: function (this: Object3D) {\r\n    let obj = this;\r\n    while (obj?.focusable === false) {\r\n      obj = obj.parent;\r\n    }\r\n    return obj;\r\n  }\r\n});\r\n\r\nObject.defineProperty(Object3D.prototype, 'enabledState', {\r\n  get: function (this: Object3D) {\r\n    let obj = this;\r\n    do {\r\n      if (!obj.enabled) return false;\r\n    } while (obj = obj.parent);\r\n    return true;\r\n  }\r\n});\r\n\r\nObject.defineProperty(Object3D.prototype, 'visibilityState', {\r\n  get: function (this: Object3D) {\r\n    let obj = this;\r\n    do {\r\n      if (!obj.visible) return false;\r\n    } while (obj = obj.parent);\r\n    return true;\r\n  }\r\n});\r\n\r\nObject.defineProperty(Object3D.prototype, 'needsRender', {\r\n  get: function (this: Object3D) {\r\n    return this.scene?.needsRender;\r\n  },\r\n  set: function (this: Object3D, value: boolean) {\r\n    if (!this.scene) return;\r\n    this.scene.needsRender = value;\r\n  }\r\n});\r\n\r\nObject.defineProperty(Object3D.prototype, 'hovered', {\r\n  get: function (this: Object3D) {\r\n    return this.__hovered;\r\n  }\r\n});\r\n\r\nObject.defineProperty(Object3D.prototype, 'focused', {\r\n  get: function (this: Object3D) {\r\n    return this.__focused;\r\n  }\r\n});\r\n\r\nObject.defineProperty(Object3D.prototype, 'clicking', {\r\n  get: function (this: Object3D) {\r\n    return this.__clicking;\r\n  }\r\n});\r\n\r\nObject.defineProperty(Object3D.prototype, 'isDragging', {\r\n  get: function (this: Object3D) {\r\n    return this.__dragging;\r\n  }\r\n});\r\n\r\nObject3D.prototype.on = function <K extends keyof Events>(this: Object3D, types: K | K[], listener: (event: Events[K]) => void): (event: Events[K]) => void {\r\n  if (typeof types === 'string') {\r\n    return this.__eventsDispatcher.add(types, listener);\r\n  }\r\n  for (const type of types) {\r\n    this.__eventsDispatcher.add(type, listener);\r\n  }\r\n  return listener;\r\n};\r\n\r\nObject3D.prototype.hasEvent = function <K extends keyof Events>(type: K, listener: (event: Events[K]) => void): boolean {\r\n  return this.__eventsDispatcher.has(type, listener);\r\n};\r\n\r\nObject3D.prototype.off = function <K extends keyof Events>(type: K, listener: (event: Events[K]) => void): void {\r\n  this.__eventsDispatcher.remove(type, listener);\r\n};\r\n\r\nObject3D.prototype.trigger = function <T extends keyof Events>(type: T, event?: Events[T]): void {\r\n  this.__eventsDispatcher.dispatchManual(type, event);\r\n};\r\n\r\nObject3D.prototype.triggerAncestor = function <T extends keyof Events>(type: T, event?: Events[T]): void {\r\n  this.__eventsDispatcher.dispatchAncestorManual(type, event);\r\n};\r\n\r\nObject.defineProperty(Object3D.prototype, 'userData', { // needed to inject code in constructor\r\n  set: function (this: Object3D, value) {\r\n    this.focusable = Default.focusable;\r\n    this.draggable = Default.draggable;\r\n    this.interceptByRaycaster = Default.interceptByRaycaster;\r\n    this.tags = new Set();\r\n    this.__boundCallbacks = [];\r\n    this.__eventsDispatcher = new EventsDispatcher(this);\r\n\r\n    Object.defineProperty(this, 'userData', {\r\n      value, writable: true, configurable: true\r\n    });\r\n  },\r\n  configurable: true\r\n});\r\n\r\nObject3D.prototype.applyFocus = function () {\r\n  this.scene?.focus(this);\r\n};\r\n\r\nObject3D.prototype.applyBlur = function () {\r\n  if (this === this.scene?.focusedObject) {\r\n    this.scene.focus();\r\n  }\r\n};\r\n\r\nObject3D.prototype.setManualDetectionMode = function () {\r\n  Binding.setManualDetectionMode(this);\r\n};\r\n\r\nObject3D.prototype.detectChanges = function (recursive = false) {\r\n  Binding.detectChanges(this, recursive);\r\n};\r\n\r\nObject3D.prototype.bindProperty = function (property, getValue, renderOnChange) {\r\n  Binding.bindProperty(property, this, getValue, renderOnChange);\r\n  return this;\r\n};\r\n\r\nObject3D.prototype.unbindProperty = function (property) {\r\n  Binding.unbindProperty(this, property);\r\n  return this;\r\n};\r\n\r\nObject3D.prototype.tween = function <T extends Object3D>(id?: string) {\r\n  return new Tween(this as T).setId(id);\r\n};\r\n\r\nObject3D.prototype.querySelector = function (query: string) {\r\n  return querySelector(this, query);\r\n};\r\n\r\nObject3D.prototype.querySelectorAll = function (query: string) {\r\n  return querySelectorAll(this, query);\r\n};\r\n\r\n/** @internal */\r\nexport const addBase = Object3D.prototype.add;\r\nObject3D.prototype.add = function (object: Object3D) {\r\n  addBase.call(this, ...arguments);\r\n  if (arguments.length === 1 && object?.isObject3D && object !== this && this.scene) {\r\n    setSceneReference(object, this.scene);\r\n    this.scene.needsRender = true;\r\n  }\r\n  return this;\r\n};\r\n\r\n/** @internal */\r\nexport const removeBase = Object3D.prototype.remove;\r\nObject3D.prototype.remove = function (object: Object3D) {\r\n  if (arguments.length === 1 && this.children.indexOf(object) > -1) {\r\n    if (this.scene) {\r\n      removeSceneReference(object);\r\n      this.scene.needsRender = true;\r\n    }\r\n  }\r\n  removeBase.call(this, ...arguments);\r\n  return this;\r\n};\r\n\r\n/** @internal */\r\nexport function applyObject3DVector3Patch(target: Object3D): void {\r\n  if (!target.__vec3Patched) {\r\n    applyVec3Patch(target);\r\n    applyMatrix4Patch(target);\r\n    target.__vec3Patched = true;\r\n  }\r\n}\r\n\r\n/** @internal */\r\nexport function applyObject3DRotationPatch(target: Object3D): void {\r\n  if (!target.__rotationPatched) {\r\n    applyQuaternionPatch(target);\r\n    applyEulerPatch(target);\r\n    target.__rotationPatched = true;\r\n  }\r\n}\r\n","import { InstancedMesh, Object3D } from 'three';\r\nimport { applyObject3DRotationPatch, applyObject3DVector3Patch } from '../patch/Object3D.js';\r\nimport { EventExt, Events, InteractionEvents, MiscUpdateEvents, UpdateEvents } from './Events.js';\r\nimport { EventsCache } from './MiscEventsManager.js';\r\n\r\n/** @internal */\r\nexport class EventsDispatcher {\r\n  public parent: Object3D;\r\n  public listeners: { [K in keyof Events]?: ((event?: Events[K]) => void)[] } = {};\r\n\r\n  constructor(parent: Object3D) {\r\n    this.parent = parent;\r\n  }\r\n\r\n  public add<K extends keyof Events>(type: K, listener: (event: Events[K]) => void): (event: Events[K]) => void {\r\n    if (!this.listeners[type]) {\r\n      this.listeners[type] = [];\r\n      if (type === 'positionchange' || type === 'scalechange') {\r\n        applyObject3DVector3Patch(this.parent);\r\n      } else if (type === 'rotationchange') {\r\n        applyObject3DRotationPatch(this.parent);\r\n      } else if (type === 'drop' || type === 'dragenter' || type === 'dragleave' || type === 'dragover') {\r\n        this.parent.__isDropTarget = true;\r\n      }\r\n    }\r\n    if (this.listeners[type].indexOf(listener) < 0) {\r\n      this.listeners[type].push(listener);\r\n    }\r\n    EventsCache.push(type, this.parent);\r\n    return listener;\r\n  }\r\n\r\n  public has<K extends keyof Events>(type: K, listener: (event: Events[K]) => void): boolean {\r\n    return this.listeners[type]?.indexOf(listener) > -1;\r\n  }\r\n\r\n  public remove<K extends keyof Events>(type: K, listener: (event: Events[K]) => void): void {\r\n    const index = this.listeners[type]?.indexOf(listener) ?? -1;\r\n    if (index > -1) {\r\n      this.listeners[type].splice(index, 1);\r\n      if (this.listeners[type].length === 0) {\r\n        EventsCache.remove(type, this.parent);\r\n        this.parent.__isDropTarget = this.isDropTarget();\r\n      }\r\n    }\r\n  }\r\n\r\n  private isDropTarget(): boolean {\r\n    const l = this.listeners;\r\n    return !(this.parent as InstancedMesh).isInstancedMesh\r\n      && (l['drop']?.length > 0 || l['dragenter']?.length > 0 || l['dragleave']?.length > 0 || l['dragover']?.length > 0);\r\n  }\r\n\r\n  public dispatchDOM<K extends keyof InteractionEvents>(type: K, event: InteractionEvents[K]): void {\r\n    event._bubbles = false;\r\n    event._stoppedImmediatePropagation = false;\r\n    event._defaultPrevented = false;\r\n    event._type = type;\r\n    event._target = this.parent;\r\n    this.executeDOM(type, event);\r\n  }\r\n\r\n  public dispatchDOMAncestor<K extends keyof InteractionEvents>(type: K, event: InteractionEvents[K]): void {\r\n    let target = this.parent;\r\n    event._bubbles = true;\r\n    event._stoppedImmediatePropagation = false;\r\n    event._defaultPrevented = false;\r\n    event._type = type;\r\n    event._target = target;\r\n    while (target && event._bubbles) {\r\n      target.__eventsDispatcher.executeDOM(type, event);\r\n      target = target.parent;\r\n    }\r\n  }\r\n\r\n  private executeDOM<K extends keyof InteractionEvents>(type: K, event: InteractionEvents[K]): void {\r\n    if (!this.listeners[type]) return;\r\n    const target = event.currentTarget = this.parent;\r\n    for (const callback of this.listeners[type]) {\r\n      if (event._stoppedImmediatePropagation) break;\r\n      callback.call(target, event as any);\r\n    }\r\n  }\r\n\r\n  public dispatch<T extends keyof MiscUpdateEvents>(type: T, event?: MiscUpdateEvents[T]): void {\r\n    if (!this.listeners[type]) return;\r\n    for (const callback of this.listeners[type]) {\r\n      callback.call(this.parent, event as any);\r\n    }\r\n  }\r\n\r\n  public dispatchDescendant<T extends keyof UpdateEvents>(type: T, event?: UpdateEvents[T]): void {\r\n    const target = this.parent;\r\n    target.__eventsDispatcher.dispatch(type, event as any);\r\n    if (!target.children) return;\r\n    for (const child of target.children) {\r\n      child.__eventsDispatcher.dispatchDescendant(type, event);\r\n    }\r\n  }\r\n\r\n  public dispatchManual<T extends keyof Events>(type: T, event?: Events[T]): void {\r\n    if ((event as EventExt)?.cancelable !== undefined) {\r\n      return this.dispatchDOM(type as keyof InteractionEvents, event as any);\r\n    }\r\n    this.dispatch(type as keyof MiscUpdateEvents, event as any);\r\n  }\r\n\r\n  public dispatchAncestorManual<T extends keyof Events>(type: T, event?: Events[T]): void {\r\n    if ((event as EventExt)?.cancelable !== undefined) {\r\n      this.dispatchDOMAncestor(type as keyof InteractionEvents, event as any);\r\n    }\r\n  }\r\n}\r\n","import { BufferGeometry, Mesh, MeshBasicMaterial } from 'three';\r\n\r\nconst sharedMaterial = new MeshBasicMaterial();\r\n\r\n/**\r\n * Hitbox for collision detection.\r\n */\r\nexport class Hitbox extends Mesh {\r\n  constructor(geometry: BufferGeometry) {\r\n    super(geometry, sharedMaterial);\r\n  }\r\n}\r\n","import { Material } from 'three';\r\nimport { Tween } from '../tweening/Tween.js';\r\n\r\n/**\r\n * Represents the prototype for extended Material functionality.\r\n */\r\nexport interface MaterialExtPrototype {\r\n  /**\r\n     * Initiates a Tween animation for the material.\r\n     * @param id - Unique identifier. If you start a new tween, the old one with the same id (if specified) will be stopped.\r\n     * @template T - The type of the target.\r\n     * @returns A Tween instance for further configuration.\r\n     */\r\n  tween<T extends this>(id?: string): Tween<T>;\r\n}\r\n\r\nMaterial.prototype.tween = function <T extends Material>(id?: string) {\r\n  return new Tween(this as T).setId(id);\r\n};\r\n","import { Object3D, Vector2, Vector3 } from 'three';\r\n\r\nexport type VectorObject3D = Vector2 | Vector3 | Object3D;\r\nexport type ObjVec3 = Vector3 | Object3D;\r\n/** @internal */ export const TEMP: Vector3[] = [...Array(4)].map(() => new Vector3());\r\nconst ORIGIN = new Vector3();\r\n\r\nexport class VectorUtils {\r\n  public static readonly DEFAULT_NORMAL = new Vector3(0, 0, 1);\r\n\r\n  public static getPositionFromObject3D(item: VectorObject3D): Vector3 {\r\n    return (item as Object3D).isObject3D ? (item as Object3D).position : (item as Vector3);\r\n  }\r\n\r\n  public static getPositionsFromObject3D(items: VectorObject3D[]): Vector3[] {\r\n    const ret: Vector3[] = [];\r\n    for (const item of items) {\r\n      ret.push(this.getPositionFromObject3D(item));\r\n    }\r\n    return ret;\r\n  }\r\n\r\n  public static computeSign(point: Vector3, origin: Vector3, normal: Vector3): number {\r\n    return Math.sign(TEMP[0].subVectors(point, origin).dot(normal));\r\n  }\r\n\r\n  public static haveSameDirection(v1: Vector3, v2: Vector3, tolerance = 10 ** -2): boolean {\r\n    return TEMP[0].copy(v1).normalize().dot(TEMP[1].copy(v2).normalize()) > 1 - tolerance;\r\n  }\r\n\r\n  public static haveOppositeDirection(v1: Vector3, v2: Vector3, tolerance = 10 ** -2): boolean {\r\n    return TEMP[0].copy(v1).normalize().dot(TEMP[1].copy(v2).normalize()) < tolerance - 1;\r\n  }\r\n\r\n  public static perpendicular(dir: Vector3, target = new Vector3(), normal = this.DEFAULT_NORMAL): Vector3 {\r\n    return target.crossVectors(dir, normal);\r\n  }\r\n\r\n  public static perpendicularSigned(dir: Vector3, referencePoint: Vector3, target = new Vector3(), normal = this.DEFAULT_NORMAL): Vector3 {\r\n    target.crossVectors(dir, normal);\r\n    return this.computeSign(referencePoint, ORIGIN, target) !== 1 ? target : target.multiplyScalar(-1);\r\n  }\r\n\r\n  public static perpendicularByPoints(p1: ObjVec3, p2: ObjVec3, target = new Vector3(), normal = this.DEFAULT_NORMAL): Vector3 {\r\n    const [p1c, p2c] = this.getPositionsFromObject3D([p1, p2]);\r\n    return target.crossVectors(TEMP[0].subVectors(p1c, p2c), normal);\r\n  }\r\n\r\n  public static perpendicularSignedByPoints(p1: ObjVec3, p2: ObjVec3, refPoint: ObjVec3, target = new Vector3(), normal = this.DEFAULT_NORMAL): Vector3 {\r\n    const [p1c, p2c, r] = this.getPositionsFromObject3D([p1, p2, refPoint]);\r\n    target.crossVectors(TEMP[0].subVectors(p1c, p2c), normal);\r\n    return this.computeSign(r, p1c, target) !== 1 ? target : target.multiplyScalar(-1);\r\n  }\r\n\r\n  public static bisector(v1: Vector3, v2: Vector3, target = new Vector3()): Vector3 {\r\n    TEMP[0].copy(v1).normalize();\r\n    TEMP[1].copy(v2).normalize();\r\n    return target.addVectors(TEMP[0], TEMP[1]).normalize();\r\n  }\r\n\r\n  public static bisectorByPoints(p1: ObjVec3, p2: ObjVec3, center: ObjVec3, target = new Vector3()): Vector3 {\r\n    const [p1c, p2c, c] = this.getPositionsFromObject3D([p1, p2, center]);\r\n    return this.bisector(TEMP[2].subVectors(p1c, c), TEMP[3].subVectors(p2c, c), target);\r\n  }\r\n\r\n  public static arePointsOnSameSide(origin: ObjVec3, dir: Vector3, points: ObjVec3[]): boolean {\r\n    const [o, ...p] = this.getPositionsFromObject3D([origin, ...points]);\r\n    const sign = this.computeSign(p[0], o, dir);\r\n    for (let i = 1; i < points.length; i++) {\r\n      if (sign !== this.computeSign(p[i], o, dir)) return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  public static arePointsOnSameSideByPoints(p1: ObjVec3, p2: ObjVec3, points: ObjVec3[], normal = this.DEFAULT_NORMAL): boolean {\r\n    const [p1c, p2c, ...p] = this.getPositionsFromObject3D([p1, p2, ...points]);\r\n    const dir = this.perpendicularByPoints(p1c, p2c, TEMP[0], normal);\r\n    const sign = this.computeSign(p[0], p1c, dir);\r\n    for (let i = 1; i < points.length; i++) {\r\n      if (sign !== this.computeSign(p[i], p1c, dir)) return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  // normal must be normalized\r\n  public static angleSignedFromOrigin(a: Vector3, b: Vector3, normal = this.DEFAULT_NORMAL): number {\r\n    return Math.atan2(TEMP[0].crossVectors(a, b).dot(normal), a.dot(b));\r\n  }\r\n\r\n  public static angleSignedByPoints(p1: ObjVec3, p2: ObjVec3, center: ObjVec3, normal = this.DEFAULT_NORMAL): number {\r\n    const [p1c, p2c, c] = this.getPositionsFromObject3D([p1, p2, center]);\r\n    const a = TEMP[0].subVectors(p1c, c);\r\n    const b = TEMP[1].subVectors(p2c, c);\r\n    return Math.atan2(TEMP[2].crossVectors(a, b).dot(normal), a.dot(b));\r\n  }\r\n\r\n  public static projectOnLine(point: ObjVec3, l1: ObjVec3, l2: ObjVec3, target = new Vector3()): Vector3 {\r\n    const [vc, p1c, p2c] = this.getPositionsFromObject3D([point, l1, l2]);\r\n    return target.subVectors(vc, p1c).projectOnVector(TEMP[0].subVectors(p1c, p2c)).add(p1c);\r\n  }\r\n}\r\n","import { Box3, Vector3 } from 'three';\r\nimport { ObjVec3, TEMP, VectorObject3D, VectorUtils } from './VectorUtils.js';\r\n\r\n/**\r\n * Class that provides a set of utilities for calculating intersections between 2D and 3D geometric objects.\r\n */\r\nexport class IntersectionUtils {\r\n  // https://paulbourke.net/geometry/pointlineplane/\r\n  /**\r\n     * Computes the intersection between two 2D lines defined by points `a1` and `a2`, and `b1` and `b2`.\r\n     *\r\n     * @param a1 - The first point of the first line.\r\n     * @param a2 - The second point of the first line.\r\n     * @param b1 - The first point of the second line.\r\n     * @param b2 - The second point of the second line.\r\n     * @param target - (Optional) The vector to store the intersection point. If omitted, a new vector will be created.\r\n     * @returns The intersection point of the two lines or `undefined` if the lines are parallel.\r\n     *\r\n     * @see {@link https://paulbourke.net/geometry/pointlineplane/}\r\n     */\r\n  public static line_line_2D(a1: VectorObject3D, a2: VectorObject3D, b1: VectorObject3D, b2: VectorObject3D, target = new Vector3()): Vector3 {\r\n    const [a1c, a2c, b1c, b2c] = VectorUtils.getPositionsFromObject3D([a1, a2, b1, b2]);\r\n    const denominator = (b2c.y - b1c.y) * (a2c.x - a1c.x) - (b2c.x - b1c.x) * (a2c.y - a1c.y);\r\n    if (denominator === 0) return; // parallel\r\n    const ua = ((b2c.x - b1c.x) * (a1c.y - b1c.y) - (b2c.y - b1c.y) * (a1c.x - b1c.x)) / denominator;\r\n    return target.set(a1c.x + ua * (a2c.x - a1c.x), a1c.y + ua * (a2c.y - a1c.y), 0);\r\n  }\r\n\r\n  /**\r\n     * Computes the intersection between two 2D line segments defined by points `a1` and `a2`, and `b1` and `b2`.\r\n     *\r\n     * @param a1 - The first point of the first segment.\r\n     * @param a2 - The second point of the first segment.\r\n     * @param b1 - The first point of the second segment.\r\n     * @param b2 - The second point of the second segment.\r\n     * @param target - (Optional) The vector to store the intersection point. If omitted, a new vector will be created.\r\n     * @returns The intersection point of the two segments or `undefined` if the segments do not intersect.\r\n     *\r\n     * @see {@link https://paulbourke.net/geometry/pointlineplane/}\r\n     */\r\n  public static segment_segment_2D(a1: VectorObject3D, a2: VectorObject3D, b1: VectorObject3D, b2: VectorObject3D, target = new Vector3()): Vector3 {\r\n    const [a1c, a2c, b1c, b2c] = VectorUtils.getPositionsFromObject3D([a1, a2, b1, b2]);\r\n    const denominator = (b2c.y - b1c.y) * (a2c.x - a1c.x) - (b2c.x - b1c.x) * (a2c.y - a1c.y);\r\n    if (denominator === 0) return; // parallel\r\n    const ua = ((b2c.x - b1c.x) * (a1c.y - b1c.y) - (b2c.y - b1c.y) * (a1c.x - b1c.x)) / denominator;\r\n    const ub = ((a2c.x - a1c.x) * (a1c.y - b1c.y) - (a2c.y - a1c.y) * (a1c.x - b1c.x)) / denominator;\r\n    if (ua < 0 || ua > 1 || ub < 0 || ub > 1) return;\r\n    return target.set(a1c.x + ua * (a2c.x - a1c.x), a1c.y + ua * (a2c.y - a1c.y), 0);\r\n  }\r\n\r\n  /**\r\n     * Computes the intersection between two 3D lines defined by points `a1` and `a2`, and `b1` and `b2`.\r\n     *\r\n     * @param a1 - The first point of the first line.\r\n     * @param a2 - The second point of the first line.\r\n     * @param b1 - The first point of the second line.\r\n     * @param b2 - The second point of the second line.\r\n     * @param target - (Optional) The vector to store the intersection point. If omitted, a new vector will be created.\r\n     * @param tolerance - (Optional) The tolerance for evaluating the intersection. The default value is 10^-6.\r\n     * @returns The intersection point of the two lines or `undefined` if the lines are parallel or do not intersect.\r\n     *\r\n     * @see {@link https://paulbourke.net/geometry/pointlineplane/}\r\n     */\r\n  public static line_line_3D(a1: ObjVec3, a2: ObjVec3, b1: ObjVec3, b2: ObjVec3, target = new Vector3(), tolerance = 10 ** -6): Vector3 {\r\n    const [p1c, p2c, p3c, p4c] = VectorUtils.getPositionsFromObject3D([a1, a2, b1, b2]);\r\n\r\n    const p13 = TEMP[0].subVectors(p1c, p3c);\r\n    const p43 = TEMP[1].subVectors(p4c, p3c);\r\n\r\n    if (p43.lengthSq() < tolerance) return;\r\n    const p21 = TEMP[2].subVectors(p2c, p1c);\r\n    if (p21.lengthSq() < tolerance) return;\r\n\r\n    const d1343 = p13.x * p43.x + p13.y * p43.y + p13.z * p43.z;\r\n    const d4321 = p43.x * p21.x + p43.y * p21.y + p43.z * p21.z;\r\n    const d1321 = p13.x * p21.x + p13.y * p21.y + p13.z * p21.z;\r\n    const d4343 = p43.x * p43.x + p43.y * p43.y + p43.z * p43.z;\r\n    const d2121 = p21.x * p21.x + p21.y * p21.y + p21.z * p21.z;\r\n\r\n    const denom = d2121 * d4343 - d4321 * d4321;\r\n    if (Math.abs(denom) < tolerance) return;\r\n\r\n    const numer = d1343 * d4321 - d1321 * d4343;\r\n\r\n    const mua = numer / denom;\r\n    const Pa = target.set(p1c.x + mua * p21.x, p1c.y + mua * p21.y, p1c.z + mua * p21.z);\r\n\r\n    // const mub = (d1343 + d4321 * mua) / d4343;\r\n    // const Pb = new Vector3(p3.x + mub * p43.x, p3.y + mub * p43.y, p3.z + mub * p43.z);\r\n\r\n    return Pa;\r\n  }\r\n\r\n  /**\r\n     * Checks if a 3D line intersects an Axis-Aligned Bounding Box (AABB) defined by `box`.\r\n     *\r\n     * @param rayOrigin - The origin of the line.\r\n     * @param rayDir - The direction of the line.\r\n     * @param box - The AABB to check for intersection with.\r\n     * @returns `true` if the line intersects the AABB, otherwise `false`.\r\n     */\r\n  public static line_boxAABB(rayOrigin: Vector3, rayDir: Vector3, box: Box3): boolean {\r\n    const invdirx = 1 / rayDir.x, invdiry = 1 / rayDir.y, invdirz = 1 / rayDir.z;\r\n    let tmin = 0, tmax = Infinity, bmin: number, bmax: number, dmin: number, dmax: number;\r\n\r\n    if (invdirx >= 0) {\r\n      bmin = box.min.x;\r\n      bmax = box.max.x;\r\n    } else {\r\n      bmin = box.max.x;\r\n      bmax = box.min.x;\r\n    }\r\n\r\n    dmin = (bmin - rayOrigin.x) * invdirx;\r\n    dmax = (bmax - rayOrigin.x) * invdirx;\r\n\r\n    tmin = dmin > tmin ? dmin : tmin; // in this order ignore NaN error\r\n    tmax = dmax < tmax ? dmax : tmax;\r\n\r\n    if (invdiry >= 0) {\r\n      bmin = box.min.y;\r\n      bmax = box.max.y;\r\n    } else {\r\n      bmin = box.max.y;\r\n      bmax = box.min.y;\r\n    }\r\n\r\n    dmin = (bmin - rayOrigin.y) * invdiry;\r\n    dmax = (bmax - rayOrigin.y) * invdiry;\r\n\r\n    tmin = dmin > tmin ? dmin : tmin;\r\n    tmax = dmax < tmax ? dmax : tmax;\r\n\r\n    if (invdirz >= 0) {\r\n      bmin = box.min.z;\r\n      bmax = box.max.z;\r\n    } else {\r\n      bmin = box.max.z;\r\n      bmax = box.min.z;\r\n    }\r\n\r\n    dmin = (bmin - rayOrigin.z) * invdirz;\r\n    dmax = (bmax - rayOrigin.z) * invdirz;\r\n\r\n    tmin = dmin > tmin ? dmin : tmin;\r\n    tmax = dmax < tmax ? dmax : tmax;\r\n\r\n    return tmin <= tmax;\r\n  }\r\n\r\n  /**\r\n     * Checks if a 3D line segment defined by points `p1` and `p2` intersects an Axis-Aligned Bounding Box (AABB) defined by `box`.\r\n     *\r\n     * @param p1 - The first point of the segment.\r\n     * @param p2 - The second point of the segment.\r\n     * @param box - The AABB to check for intersection with.\r\n     * @returns `true` if the segment intersects the AABB and is within the segment's length, otherwise `false`.\r\n     */\r\n  public static segment_boxAABB(p1: Vector3, p2: Vector3, box: Box3): boolean {\r\n    const rayDir = TEMP[0].subVectors(p2, p1).normalize();\r\n    const distance = p1.distanceTo(p2);\r\n    const invdirx = 1 / rayDir.x, invdiry = 1 / rayDir.y, invdirz = 1 / rayDir.z;\r\n    let tmin = 0, tmax = Infinity, bmin: number, bmax: number, dmin: number, dmax: number;\r\n\r\n    if (invdirx >= 0) {\r\n      bmin = box.min.x;\r\n      bmax = box.max.x;\r\n    } else {\r\n      bmin = box.max.x;\r\n      bmax = box.min.x;\r\n    }\r\n\r\n    dmin = (bmin - p1.x) * invdirx;\r\n    dmax = (bmax - p1.x) * invdirx;\r\n\r\n    tmin = dmin > tmin ? dmin : tmin; // in this order ignore NaN error\r\n    tmax = dmax < tmax ? dmax : tmax;\r\n\r\n    if (invdiry >= 0) {\r\n      bmin = box.min.y;\r\n      bmax = box.max.y;\r\n    } else {\r\n      bmin = box.max.y;\r\n      bmax = box.min.y;\r\n    }\r\n\r\n    dmin = (bmin - p1.y) * invdiry;\r\n    dmax = (bmax - p1.y) * invdiry;\r\n\r\n    tmin = dmin > tmin ? dmin : tmin;\r\n    tmax = dmax < tmax ? dmax : tmax;\r\n\r\n    if (invdirz >= 0) {\r\n      bmin = box.min.z;\r\n      bmax = box.max.z;\r\n    } else {\r\n      bmin = box.max.z;\r\n      bmax = box.min.z;\r\n    }\r\n\r\n    dmin = (bmin - p1.z) * invdirz;\r\n    dmax = (bmax - p1.z) * invdirz;\r\n\r\n    tmin = dmin > tmin ? dmin : tmin;\r\n    tmax = dmax < tmax ? dmax : tmax;\r\n\r\n    return tmin <= tmax && distance >= tmin;\r\n  }\r\n}\r\n","import { Camera, Object3D, Plane, Ray, SkinnedMesh, Vector3 } from 'three';\r\n\r\n/**\r\n * A type definition representing a collection of 3D nodes where each node is identified by a unique string key.\r\n */\r\nexport type Nodes = { [x: string]: Object3D };\r\n\r\n/**\r\n *\r\n * A utility class providing helper methods for various operations.\r\n */\r\nexport class Utils {\r\n  private static readonly _plane = new Plane();\r\n  private static readonly _temp = new Vector3();\r\n\r\n  /**\r\n   * Calculates the intersection point of a ray with a plane in world coordinates.\r\n   * @param ray - The ray to intersect with the plane.\r\n   * @param camera - The camera used as a reference for the plane's orientation.\r\n   * @param distance - The distance from the camera to the plane.\r\n   * @returns The intersection point as Vector3.\r\n   */\r\n  public static getSceneIntersection(ray: Ray, camera: Camera, distance: number): Vector3 {\r\n    this._plane.setFromNormalAndCoplanarPoint(camera.getWorldDirection(this._plane.normal), camera.getWorldPosition(this._temp));\r\n    this._plane.translate(this._temp.copy(this._plane.normal).setLength(distance));\r\n    return ray.intersectPlane(this._plane, this._temp);\r\n  }\r\n\r\n  /**\r\n   * Set for all children of the target, the draggable flag to true and a dragTarget.\r\n   * @param target - The Object3D whose children you want to enable as draggable elements.\r\n   * @param dragTarget - The Object3D that will act as the drag target for the children.\r\n   */\r\n  public static setChildrenDragTarget(target: Object3D, dragTarget: Object3D): void {\r\n    target.traverse((obj) => {\r\n      obj.draggable = true;\r\n      obj.dragTarget = dragTarget;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Computes bounding spheres for child objects within the specified Object3D hierarchy.\r\n   * @param target - The root Object3D from which to start computing bounding spheres for children.\r\n   */\r\n  public static computeBoundingSphereChildren(target: Object3D): void {\r\n    target.traverse((obj) => {\r\n      obj.updateMatrixWorld();\r\n      if ((obj as SkinnedMesh).computeBoundingSphere) {\r\n        (obj as SkinnedMesh).computeBoundingSphere();\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Retrieves a map of objects in the scene graph (Object3D) starting from a root object.\r\n   * Each object is mapped using its unique name as the key in the resulting object.\r\n   * @param target - The root object to begin generating the object map from.\r\n   * @returns An object containing objects mapped by their names.\r\n   */\r\n  public static getNodes(target: Object3D): Nodes {\r\n    return this.generateNodesFromObject(target, {}, {});\r\n  }\r\n\r\n  protected static generateNodesFromObject(object: Object3D, nodes: Nodes, nameCollision: { [x: string]: number }): Nodes {\r\n    const name = this.getNodeName(object, nameCollision);\r\n    nodes[name] = object;\r\n\r\n    for (const child of object.children) {\r\n      this.generateNodesFromObject(child, nodes, nameCollision);\r\n    }\r\n\r\n    return nodes;\r\n  }\r\n\r\n  protected static getNodeName(object: Object3D, nameCollision: { [x: string]: number }): string {\r\n    const key = object.name;\r\n    if (nameCollision[key] === undefined) {\r\n      nameCollision[key] = 0;\r\n      return key;\r\n    }\r\n    return `${key}_${++nameCollision[key]}`;\r\n  }\r\n}\r\n"],"names":["Binding","target","resursive","child","key","getValue","renderOnChange","setValue","bindingCallback","value","boundCallbacks","i","index","callbacks","callback","scene","boundObjs","OrthographicCameraAuto","OrthographicCamera","size","fixedWidth","near","far","e","halfSize","aspect","PerspectiveCameraAuto","PerspectiveCamera","fov","cursorSet","CursorHandler","domElement","objDragged","objHovered","objDropTarget","cursor","EventExt","cancelable","MouseEventExt","event","intersection","relatedTarget","keyArg","PointerEventExt","DragEventExt","dataTransfer","position","WheelEventExt","PointerIntersectionEvent","KeyboardEventExt","FocusEventExt","DragAndDropManager","raycaster","Plane","Vector3","Matrix4","camera","dropTargetIntersection","currentTarget","matrixWorld","type","dragEvent","dropTarget","lastDropTarget","dropTargetPoint","x","InteractionEventsQueue","item","items","RaycasterManager","renderManager","Raycaster","a","b","Vector2","isDragging","excluded","intersections","canvasBounds","mouse","isPrimary","activeView","viewport","object","obj","previousCount","hitbox","InteractionManager","renderer","hoveredObj","_a","_b","pointerEvent","wheelEvent","keyboardEvent","pointerDownEvent","firstFocusable","lastHoveredTarget","startTarget","pointerId","keyDownEvent","int","_EventsCache","name","sceneCache","EventsCache","RenderView","parameters","rendererSize","Color","RenderManager","appendCanvas","fullscreen","backgroundColor","backgroundAlpha","view","renderView","tag","pointerOnCanvas","v","composer","width","height","RunningTween","tween","TweenManager","_c","block","_e","_d","action","runningTweens","ret","runningTween","runningCloned","descriptor","times","repeat","delta","elapsedTime","alpha","easedAlpha","reversed","exTween","indexLastBlock","lastBlock","_TweenManager","root","runningChildren","rc","running","id","Stats","GraphPanel","TextPanel","panel","element","gl","ext","time","query","available","disjoint","duration","fg","bg","updateTime","getAverage","maxValue","decimals","properties","calls","triangles","points","lines","stringOut","maxRowLenght","rows","column","row","input","viewportSize","Vector4","lastViewportSizes","applyWebGLRendererPatch","main","baseRender","handleViewportResize","lastSceneSize","lastCameraSize","setup","Main","params","Clock","WebGLRenderer","disableContextMenu","frame","currentDelta","visibleScenes","total","_Default","Default","_Easings","c2","c5","Easings","easings","ActionRepeat","ActionYoyo","ActionTween","tweens","ActionCallback","ActionDelay","ActionMotion","motion","config","isBy","actions","actionValue","targetValue","easing","start","end","Euler","MathUtils","Tween","tags","querySelector","queryBlocks","parse","blocks","search","querySelectorAll","result","searchAll","newBlocks","blockList","newBlock","validateBlock","lastNewBlock","added","areValidConditions","checkType","checkTags","checkAttributes","attributes","attribute","currentBlock","char","getBlock","getPrev","getNextIndex","addTag","addAttribute","addType","oldBlock","split","lastChar","applyEulerPatch","setEulerChangeCallbackSR","setEulerChangeCallback","applyMatrix4Patch","parent","quaternion","scale","te","y","z","w","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","sx","sy","sz","applyQuaternionPatch","setQuatChangeCallbackSR","setQuatChangeCallback","applyVec3Patch","patchVector","setVec3ChangeCallbackSR","setVec3ChangeCallback","vec3","Vector3Ext","scalar","update","s","euler","_quaternion","axis","angle","m","q","vx","vy","vz","qx","qy","qz","qw","tx","ty","tz","min","max","minVal","maxVal","length","v1","v2","ax","ay","az","bx","by","bz","denominator","planeNormal","_vector","normal","theta","dx","dy","dz","radius","phi","sinPhiRadius","c","array","offset","u","Quaternion","applySmartRenderingPatch","applyPatch","removeSmartRenderingPatch","restoreVisible","activeSmartRendering","applySmartRenderingPatchRecursive","overrideVisible","applyObject3DVector3Patch","applyObject3DRotationPatch","Scene","focusableObj","oldFocusedObj","addBase","setSceneReference","removeSceneReference","removeBase","EventsDispatcher","Object3D","types","listener","recursive","property","l","sharedMaterial","MeshBasicMaterial","Hitbox","Mesh","geometry","Material","TEMP","ORIGIN","_VectorUtils","point","origin","tolerance","dir","referencePoint","p1","p2","p1c","p2c","refPoint","r","center","o","p","sign","l1","l2","vc","VectorUtils","IntersectionUtils","a1","a2","b1","b2","a1c","a2c","b1c","b2c","ua","ub","p3c","p4c","p13","p43","p21","d1343","d4321","d1321","d4343","denom","mua","rayOrigin","rayDir","box","invdirx","invdiry","invdirz","tmin","tmax","bmin","bmax","dmin","dmax","distance","_Utils","ray","dragTarget","nodes","nameCollision","Utils"],"mappings":"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"}