constructor(x, y, w, h) {
		super(x, y, w, h);
		/**
		 * object can be clicked or not
		 * @type {boolean}
		 * @default true
		 */
		this.isClickable = true;

		/**
		 * object can be clicked or not
		 * @type {boolean}
		 * @default false
		 */
		this.isDraggable = false;

		/**
		 * Tap and hold threshold timeout in ms
		 * @type {number}
		 * @default 250
		 */
		this.holdThreshold = 250;

		/**
		 * object can be tap and hold
		 * @type {boolean}
		 * @default false
		 */
		this.isHoldable = false;

		/**
		 * true if the pointer is over the object
		 * @type {boolean}
		 * @default false
		 */
		this.hover = false;

		/**
		 * false if the pointer is down, or true when the pointer status is up
		 * @type {boolean}
		 * @default false
		 */
		this.released = true;

		/**
		 * UI base elements use screen coordinates by default
		 * (Note: any child elements added to a UIBaseElement should have their floating property to false)
		 * @see Renderable.floating
		 * @type {boolean}
		 * @default true
		 */
		this.floating = true;

		// object has been updated (clicked,etc..)
		this.holdTimeout = -1;

		// enable event detection
		this.isKinematic = false;

		// update container and children bounds automatically
		this.enableChildBoundsUpdate = true;

		this.#boundPointerMoveHandler = this.pointerMove.bind(this);
	}
@param {number} x - The x position of the container
@param {number} y - The y position of the container
@param {number} w - width of the container
@param {number} h - height of the container