{
  "version": 3,
  "sources": ["../src/index.ts", "../package.json", "../src/utils.ts", "../node_modules/eventlistener-manager/src/utils.ts", "../node_modules/eventlistener-manager/src/polyfill.ts", "../node_modules/eventlistener-manager/package.json", "../node_modules/eventlistener-manager/src/interfacecs.ts", "../node_modules/eventlistener-manager/src/geometry.ts", "../node_modules/eventlistener-manager/src/event.ts", "../node_modules/eventlistener-manager/src/index.ts"],
  "sourcesContent": ["import packageJSON from '../package.json';\nimport {GlobalThis} from \"./utils\";\nimport {ExtendedMouseEvent, ExtendedTouchEvent} from 'eventlistener-manager';\n\nexport class CylinderPickerEvent extends Event {\n    value: number;\n    elementValue: HTMLLIElement;\n\n    constructor(liElements: NodeListOf<HTMLLIElement>, value: number) {\n        super('change');\n        this.value = value;\n        this.elementValue = liElements[this.value];\n    }\n}\n\nexport class HTMLCylinderPicker extends HTMLElement {\n    static TAG = 'cylinder-picker';\n    static version = packageJSON.version;\n\n    private observer: MutationObserver | undefined;\n    private cylinder: HTMLElement | undefined;\n    private loopSize = 0;\n    private isRendering = false;\n    private isPanning = false;\n\n    private inertiaPan: (() => Promise<void>) | undefined;\n    private animationEndCallback: (() => void) | undefined;\n    private onMouseAndTouchPanMove: ((event: Event) => void) | undefined;\n    private onMouseAndTouchPanEnd: ((event: Event) => void) | undefined;\n    private onMouseDownOrTouchStart: ((event: Event) => void) | undefined;\n    private onWheel: ((event: Event) => void) | undefined;\n\n    private $inertiaPanCallback: (() => any) | undefined;\n    private $isAnimating = false;\n    private $length = 0;\n    private $value: number = 0;\n    private $curvature: number = 20;\n    private $disabled: boolean = false;\n    private $infinite: boolean = false;\n\n    get elementValue(): HTMLLIElement {\n        return this.querySelectorAll('li')[this.value];\n    }\n\n    get length() {\n        return this.$length;\n    }\n\n    get isAnimating() {\n        return this.$isAnimating;\n    }\n\n    get value() {\n        return this.$value;\n    }\n\n    set value(value: number) {\n        this.$value = value;\n        this.render(value);\n    }\n\n    get curvature() {\n        return this.$curvature;\n    }\n\n    set curvature(value: number) {\n        this.$curvature = value;\n        this.render();\n    }\n\n    get disabled() {\n        return this.$disabled;\n    }\n\n    set disabled(value: boolean) {\n        this.$disabled = value;\n        this.render();\n    }\n\n    get infinite() {\n        return this.$infinite;\n    }\n\n    set infinite(value: boolean) {\n        this.$infinite = value;\n        this.render();\n    }\n\n    set list(values: string[]) {\n        this.innerHTML = ``;\n\n        let html = ``;\n        for (const value of values) {\n            html += `<li>${value}</li>`;\n        }\n\n        this.innerHTML += html;\n    }\n\n    set inertiaPanCallback(value: (() => Promise<void>)) {\n        this.$inertiaPanCallback = value;\n    }\n\n    getAttributeBoolean(qualifiedName: string) {\n        return this.hasAttribute(qualifiedName) && this.getAttribute(qualifiedName) !== 'false';\n    }\n\n    getAttributeNumber(qualifiedName: string, defaultValue: number) {\n        if (this.hasAttribute(qualifiedName)) {\n            const value = Number(this.getAttribute(qualifiedName)!);\n            if (isNaN(value)) {\n                return defaultValue;\n            } else {\n                return value;\n            }\n        }\n        return defaultValue;\n    }\n\n    connectedCallback() {\n        this.attachShadow({mode: 'open'});\n\n        this.observer = new MutationObserver((mutations) => this.handleMutations(mutations));\n        this.observer.observe(this, {\n            childList: true,\n            subtree: true,\n            attributes: true\n        });\n\n        this.value = this.getAttributeNumber('value', 0);\n        this.curvature = this.getAttributeNumber('curvature', 20);\n        this.disabled = this.getAttributeBoolean('disabled');\n        this.infinite = this.getAttributeBoolean('infinite');\n    }\n\n    disconnectedCallback() {\n        this.observer?.disconnect();\n    }\n\n    static get observedAttributes() {\n        return [];\n    }\n\n    private handleMutations(mutations: MutationRecord[]) {\n        mutations.forEach((record) => {\n            switch (record.type) {\n                case 'attributes':\n                    switch (record.attributeName) {\n                        case 'value':\n                            this.value = this.getAttributeNumber('value', 0);\n                            break;\n                        case 'curvature':\n                            this.curvature = this.getAttributeNumber('curvature', 20);\n                            break;\n                        case 'disabled':\n                            this.disabled = this.getAttributeBoolean('disabled');\n                            break;\n                        case 'infinite':\n                            this.infinite = this.getAttributeBoolean('infinite');\n                            break;\n                        default:\n                            break;\n                    }\n                    break;\n                case 'childList':\n                    this.render();\n            }\n        });\n    }\n\n    private getStyle() {\n        const calculateCurvature = (nth: number) => {\n            return Math.cos(nth * this.curvature * (Math.PI / 180));\n        }\n\n        const calculateOpacity = (nth: number) => {\n            const curvature = calculateCurvature(nth);\n            return Number((curvature / (Math.abs(nth) + 1) ** (1 / 2)).toFixed(2));\n        }\n\n        const calculateRotateX = (nth: number) => {\n            const curvature = calculateCurvature(nth);\n            return Number((Math.sign(nth) * (-100 + (50 * curvature * 2 ** curvature))).toFixed(2));\n        }\n\n        const calculatePaddingLeft = (nth: number) => {\n            const curvature = calculateCurvature(nth);\n            return Number((3 / 4 * (1 - curvature)).toFixed(2));\n        }\n\n        let visible = true;\n        let i = 0;\n        while (visible) {\n            i++;\n            visible = calculateOpacity(i) > 0 && Math.abs(calculateRotateX(i)) < 90;\n        }\n\n        const nextPadding = calculatePaddingLeft(1 + i);\n\n        return `:host [data-cylinder] {top: 0;position: relative;display: inline-block;list-style: none;margin: 0 ${nextPadding}em 0 0;padding: 0;transition: opacity 0.1s;}:host [data-cylinder] [data-cylinder-depth]{opacity:0;transform:perspective(12.5em) rotateX(-90deg) translateX(${nextPadding}em);transform-origin: bottom left;}:host [data-cylinder] [data-cylinder-depth^=\"-\"]{opacity:0;transform:perspective(12.5em) rotateX(90deg) translateX(${nextPadding}em);transform-origin: top right;}`\n            + Array.from({length: i * 2 - 1}, (_, j) => j - i + 1)\n                .map(e => `:host [data-cylinder] [data-cylinder-depth=\"${e}\"]{opacity: ${Math.max(0, calculateOpacity(e))};transform: perspective(12.5em) rotateX(${Math.max(-90, Math.min(90, calculateRotateX(e)))}deg) translateX(${calculatePaddingLeft(e)}em);transform-origin: ${e < 0 ? `bottom right` : e > 0 ? `top right` : `unset`};}`)\n                .join('');\n    }\n\n    static defineElement() {\n        customElements.define(this.TAG, this);\n    }\n\n    private render(value: number = this.value) {\n        this.didLoad()\n            .then(() => {\n                if (!this.shadowRoot) return;\n\n                this.isRendering = true;\n\n                const liElements = Array.from(this.querySelectorAll('li'));\n                this.$length = liElements.length;\n\n                this.shadowRoot.innerHTML = `\n<style>\n:host {\n-webkit-user-select:none;\n-moz-user-select:none;\n-ms-user-select:none;\nuser-select:none;\n}\n:host [data-cylinder-container] {\nmargin-top: 0.2em;\nposition: relative;\nheight: 10.325em;\noverflow: hidden;\nwidth: fit-content;\n}\n:host [data-cylinder] {\ntop: 0;\nposition: relative;\ndisplay: inline-block;\nlist-style: none;\nmargin: 0;\npadding: 0;\ntransition: opacity 0.1s;\n}\n:host [data-cylinder][data-cylinder-disabled] {\nuser-select: none;\nopacity: 0.5;\n}\n:host [data-cylinder] li {\ntop: 0;\nposition: relative;\npadding: 0.3125em 0.1875em;\nfont-size: 1em;\nheight: 1.1em;\ncursor: pointer;\nborder-radius: 4px;\n}\n:host [data-cylinder] li:hover {\nbackground-color: rgba(126,126,126,0.2);\n}\n:host [data-cylinder][data-cylinder-disabled] li:hover,\n:host [data-cylinder] li[data-cylinder-padding]:hover {\nbackground-color: unset !important;\ncursor: unset !important;\n}\n${this.getStyle()}\n</style>\n<div data-cylinder-container>\n<ul data-cylinder ${this.disabled ? 'data-cylinder-disabled' : ''}>\n${\n                    liElements\n                        .map(li => {\n                            const sheets = document.styleSheets;\n                            const before = li.getAttribute('style');\n                            let styles = '';\n\n                            for (let i = 0; i < sheets.length; i++) {\n                                try {\n                                    const rules = sheets[i].cssRules || sheets[i].rules;\n\n                                    for (let j = 0; j < rules.length; j++) {\n                                        const rule = rules[j];\n\n                                        if (rule instanceof CSSStyleRule && li.matches(rule.selectorText)) {\n                                            const content = rule.style as any;\n                                            styles += content.cssText;\n                                        }\n                                    }\n                                } catch {\n                                }\n                            }\n\n                            if (before) {\n                                styles = styles + before;\n                            }\n\n                            li.setAttribute(\n                                'style',\n                                Object.entries(\n                                    styles\n                                        .split(';')\n                                        .filter(string => string)\n                                        .map(string => {\n                                            const split = string.split(':');\n                                            const key = split.splice(0, 1).join('').trim();\n                                            const value = split.join('').trim();\n                                            const important = value.endsWith('!important');\n                                            return {key, value, important};\n                                        })\n                                        .reduce((current: any, previous) => {\n                                            if (previous.important || !current[previous.key]) {\n                                                current[previous.key] = previous.value;\n                                            }\n                                            return current;\n                                        }, {})\n                                )\n                                    .map(entry => entry[0] + ':' + entry[1] + ';')\n                                    .join('')\n                            );\n\n                            return li.outerHTML;\n                        })\n                        .join('')\n                }\n</ul>\n</div>\n`\n\n                this.cylinder = this.shadowRoot.querySelector('[data-cylinder]') as HTMLElement;\n\n                this.setupCylinder(value);\n\n                this.removeEvent();\n                if (!this.disabled) {\n                    this.addEvent();\n                }\n            }).then(() => this.isRendering = true);\n    }\n\n    private setupCylinder(value: number) {\n        if (!this.cylinder) return;\n\n        const onClickChild = async (element: Element) => {\n            if (!this.cylinder) return;\n\n            if (this.isPanning) {\n                this.isPanning = false;\n                return;\n            }\n\n            this.inertiaPan = undefined;\n\n            const currentTarget = this.cylinder.querySelector('[data-cylinder-depth=\"0\"]');\n\n            if (currentTarget) {\n                const children = Array.from(this.cylinder.children);\n                const selectedIndex = children.findIndex(child => !child.hasAttribute('data-cylinder-padding') && child === element);\n                const currentIndex = children.findIndex(child => child === currentTarget);\n\n                if (selectedIndex > -1 && currentIndex > -1) {\n                    await this.next(selectedIndex - currentIndex);\n                }\n            }\n        }\n\n        if (this.inertiaPan) {\n            this.animationEndCallback = () => this.updateCylinderChildren(0);\n        }\n\n        this.$isAnimating = false;\n\n        if (this.infinite) {\n            const children = [];\n\n            this.loopSize = 2 ** (3 - Math.min(Number(this.$length).toString(2).length, 3));\n\n            for (let i = 0; i < this.loopSize * 2; i++) {\n                const cloned = this.cylinder.cloneNode(true) as HTMLElement;\n                children.push(...Array.from(cloned.children));\n            }\n\n            children.forEach(child => this.cylinder?.append(child));\n            this.adjustInfiniteCylinder(value);\n\n            let i = 0;\n            for (let element of Array.from(this.cylinder.children)) {\n                if (element instanceof HTMLElement) {\n                    element.setAttribute('data-cylinder-depth', String(i - this.$length * this.loopSize));\n                    i++;\n\n                    if (!this.$disabled) {\n                        element.onclick = element.ontouchend = () => onClickChild(element);\n                    }\n                }\n            }\n            this.cylinder.style.transform = `translateY(calc(-${this.loopSize / (this.loopSize * 2 + 1) * 100}% + 4.425em))`;\n        } else {\n            for (let i = 0; i < 3; i++) {\n                const li = document.createElement('li');\n                li.setAttribute('data-cylinder-padding', 'true');\n                this.cylinder.insertBefore(li, this.cylinder.firstChild);\n            }\n\n            for (let i = 0; i < 3; i++) {\n                const li = document.createElement('li');\n                li.setAttribute('data-cylinder-padding', 'true');\n                this.cylinder.append(li);\n            }\n\n            let i = 0;\n            for (let element of Array.from(this.cylinder.children)) {\n                if (element instanceof HTMLElement) {\n                    element.setAttribute('data-cylinder-depth', String(i - 3 - value));\n                    i++;\n\n                    if (!this.$disabled) {\n                        element.onclick = element.ontouchend = () => onClickChild(element);\n                    }\n                }\n            }\n            this.cylinder.style.transform = `translateY(${-0.75 - this.$value * 1.724328}em)`;\n        }\n    }\n\n    stopInertia() {\n        return new Promise<void>(resolve => {\n            if (this.inertiaPan) {\n                this.$inertiaPanCallback = () => new Promise(() => {\n                    resolve();\n                });\n                this.inertiaPan = undefined;\n            } else {\n                resolve();\n            }\n        });\n    }\n\n    private didLoad() {\n        return Promise.all([\n            new Promise<void>(resolve => {\n                if (document.readyState === 'complete') {\n                    resolve();\n                } else {\n                    const onDocumentReadyStateComplete = () => {\n                        window.off('load', onDocumentReadyStateComplete);\n                        resolve();\n                    }\n                    window.on('load', onDocumentReadyStateComplete);\n                }\n            }),\n            customElements.whenDefined(HTMLCylinderPicker.TAG)\n        ])\n    }\n\n    private updateCylinderChildren(nth: number = 0) {\n        if (!this.cylinder) return;\n\n        Array.from(this.cylinder.children).forEach((element, i) => {\n            element.setAttribute('data-cylinder-depth', String(this.$infinite ? i - (this.$length * this.loopSize + nth) : i - (3 + this.$value)));\n        });\n    }\n\n    private updateCylinderPosition(nth: number = 0) {\n        if (!this.cylinder) return;\n\n        if (this.$infinite) {\n            this.cylinder.style.transform = `translateY(calc(-${this.loopSize / (this.loopSize * 2 + 1) * 100}% + ${4.425 -nth * 1.724328}em))`;\n        } else {\n            this.cylinder.style.transform = `translateY(${-0.75 - this.$value * 1.724328}em)`;\n        }\n    }\n\n    private up(nth: number) {\n        if (!this.cylinder) return;\n\n        for (let i = 0; i < Math.abs(nth); i++) {\n            const last = this.cylinder.lastElementChild;\n            if (last) this.cylinder.insertBefore(last, this.cylinder.firstElementChild);\n        }\n    }\n\n    private down(nth: number) {\n        if (!this.cylinder) return;\n\n        for (let i = 0; i < Math.abs(nth); i++) {\n            const first = this.cylinder.firstElementChild;\n            if (first) this.cylinder.append(first);\n        }\n    }\n\n    private updateAnimationSpeed(speed: number) {\n        if (!this.cylinder) return;\n\n        for (const element of [this.cylinder, ...Array.from(this.cylinder.children)]) {\n            if (element instanceof HTMLElement) {\n                element.style.transition = `all ${speed}ms linear`\n            }\n        }\n    }\n\n    private calculateDelta(delta: number): number {\n        const next = (this.$length + (this.value + delta % this.$length)) % this.$length;\n        const reverse = this.$value > next ? this.$value - next : this.$value + this.$length - next;\n        const right = this.$length - reverse;\n        return reverse < right ? -reverse : right;\n    }\n\n    private next(delta: number, speed: number = 150, force?: boolean) {\n        return new Promise<this>(resolve => {\n            if (!force && (!this.cylinder || this.$length === 0 || this.$isAnimating)) {\n                resolve(this);\n                return;\n            }\n\n            this.$isAnimating = true;\n\n            const sign = Math.sign(delta);\n            delta = Math.round(delta);\n\n            if (!this.$infinite) {\n                delta = Math.min(this.$length - this.$value - 1, Math.max(-this.$value, delta));\n            } else {\n                delta = this.calculateDelta(delta);\n            }\n\n            const modded = this.$length === 1 ? sign : delta % this.$length;\n            this.$value = (this.$value + modded + this.$length) % this.$length;\n            const speedByDelta = Math.abs(delta) * speed;\n\n            this.updateAnimationSpeed(speedByDelta);\n            this.updateCylinderChildren(modded);\n            this.updateCylinderPosition(modded);\n\n            setTimeout(() => {\n                if (this.infinite) this.adjustInfiniteCylinder(modded);\n                if (modded !== 0) {\n                    this.dispatchEvent(new CylinderPickerEvent(this.querySelectorAll('li'), this.value));\n                }\n                if (this.animationEndCallback) {\n                    this.animationEndCallback();\n                    this.animationEndCallback = undefined;\n                }\n                setTimeout(() => {\n                    this.$isAnimating = false;\n                    this.updateCylinderChildren(0);\n                    resolve(this);\n                })\n            }, speedByDelta);\n        });\n    }\n\n    private adjustInfiniteCylinder(nth: number) {\n        if (!this.cylinder) return;\n\n        if (nth > 0) {\n            this.down(nth);\n        } else if (nth < 0) {\n            this.up(nth);\n        }\n\n        this.updateAnimationSpeed(0);\n\n        if (this.$infinite) {\n            this.cylinder.style.transform = `translateY(calc(-${this.loopSize / (this.loopSize * 2 + 1) * 100}% + 4.425em))`;\n        } else {\n            this.cylinder.style.transform = `translateY(${-0.75 + -this.$value * 1.724328}em)`;\n        }\n    }\n\n    private addEvent() {\n        this.removeEvent();\n        let lastPanDy = 0;\n        let sumOfPanDy = 0;\n\n        this.onMouseAndTouchPanMove = (event: Event) => {\n            if (event instanceof ExtendedMouseEvent || event instanceof ExtendedTouchEvent) {\n                const last = event.paths.last;\n\n                if (last) {\n                    lastPanDy = last.dy;\n                    sumOfPanDy += lastPanDy;\n                    if (Math.abs(sumOfPanDy) >= 10) {\n\n                        if (event instanceof ExtendedTouchEvent) {\n                            this.isPanning = true;\n                        }\n\n                        sumOfPanDy = 0;\n                        nextByPanDy(lastPanDy, 100).then();\n                        return;\n                    }\n                }\n            }\n        }\n\n        this.onMouseAndTouchPanEnd = (event: Event) => {\n            this.inertiaPan = () => inertiaPan();\n        };\n\n        this.onMouseDownOrTouchStart = (event: Event) => {\n            this.inertiaPan = undefined;\n        }\n\n        this.onWheel = (event: Event) => {\n            event.preventDefault();\n\n            if (event instanceof WheelEvent) {\n                this.inertiaPan = undefined;\n                nextByWheelDy(event.deltaY).then();\n            }\n        }\n\n        this.on(['mousepanmove', 'touchpanmove'], this.onMouseAndTouchPanMove, {passive: true});\n        this.on(['mousepanend', 'mousepanleave', 'touchpancancel', 'touchpanend'], this.onMouseAndTouchPanEnd, {passive: true});\n        this.on(['mousedown', 'touchstart'], this.onMouseDownOrTouchStart, {passive: true});\n        this.on(['wheel'], this.onWheel, {passive: false});\n\n        const nextByPanDy = async (dy: number, speed?: number) => {\n            if (!speed) {\n                speed = 125 / Math.abs(dy);\n            }\n\n            await this.next(-Math.sign(dy), speed);\n            if (this.inertiaPan) {\n                await this.inertiaPan();\n            }\n        }\n\n        const nextByWheelDy = async (dy: number) => {\n            await this.next(Math.sign(dy), Math.min(100, 10000 / Math.abs(dy)));\n        }\n\n        const inertiaPan = async () => {\n            if (Math.abs(lastPanDy) === Infinity) {\n                lastPanDy = 10 * Math.sign(lastPanDy);\n            }\n\n            if (Math.abs(lastPanDy) > 0.5) {\n                lastPanDy = lastPanDy * 0.875;\n                await nextByPanDy(lastPanDy);\n            } else {\n                lastPanDy = 0;\n                this.inertiaPan = undefined;\n\n                if (this.$inertiaPanCallback) {\n                    await this.$inertiaPanCallback();\n                    this.$inertiaPanCallback = undefined;\n                }\n            }\n        }\n    }\n\n    private removeEvent() {\n        if (this.onMouseAndTouchPanMove) this.off(['mousepanmove', 'touchpanmove'], this.onMouseAndTouchPanMove, {passive: true});\n        if (this.onMouseAndTouchPanEnd) this.off(['mousepanend', 'mousepanleave', 'touchpancancel', 'touchpanend'], this.onMouseAndTouchPanEnd, {passive: true});\n        if (this.onMouseDownOrTouchStart) this.on(['mousedown', 'touchstart'], this.onMouseDownOrTouchStart, {passive: true});\n        if (this.onWheel) this.off(['wheel'], this.onWheel, {passive: true});\n    }\n}\n\nHTMLCylinderPicker.defineElement();\n\n// declare global {\n//     namespace JSX {\n//         interface IntrinsicElements {\n//             'cylinder-picker': React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;\n//         }\n//     }\n// }\n\nexport {};\n\n\n(() => {\n    GlobalThis.HTMLCylinderPicker = HTMLCylinderPicker;\n})();\n\ndeclare global {\n    interface Window {\n        HTMLCylinderPicker: HTMLCylinderPicker;\n    }\n}", "{\n  \"name\": \"cylinder-picker\",\n  \"version\": \"1.0.75\",\n  \"description\": \"The cylinder-picker library is a customizable, interactive cylindrical item picker for web applications, supporting features like infinite scroll, touch gestures, and dynamic updates.\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n    \"build\": \"node build.js\"\n  },\n  \"author\": \"\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"main\": \"dist/index.cjs\",\n  \"require\": \"./dist/index.cjs\",\n  \"module\": \"dist/index.mjs\",\n  \"umd\": \"./dist/index.umd.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\",\n      \"umd\": \"./dist/index.umd.js\",\n      \"types\": \"./dist/index.d.ts\"\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/pjy0509/cylinder-picker.git\"\n  },\n  \"homepage\": \"https://pjy0509.github.io/example/cylinder-picker/\",\n  \"keywords\": [\n    \"cylinder\",\n    \"ios\",\n    \"picker\",\n    \"ui\"\n  ],\n  \"dependencies\": {\n    \"eventlistener-manager\": \"^1.0.44\"\n  },\n  \"devDependencies\": {\n    \"esbuild\": \"^0.21.4\",\n    \"glob\": \"^10.4.1\",\n    \"html-webpack-plugin\": \"^5.6.0\",\n    \"ts-loader\": \"^9.5.1\",\n    \"typescript\": \"^5.4.5\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/pjy0509/cylinder-picker/issues\"\n  }\n}\n", "export const GlobalThis = (() => {\n    if (typeof window !== 'undefined') {\n        return window;\n    }\n\n    if (typeof global !== 'undefined') {\n        return global;\n    }\n\n    if (typeof globalThis !== 'undefined') {\n        return globalThis;\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof self !== 'undefined') {\n        // eslint-disable-next-line no-restricted-globals\n        return self;\n    }\n\n    return this;\n})() as any;\n", "import {AddEventListenerOptionsOrBoolean, EventHandlersEventMaps} from \"./interfacecs\";\n\ntype ViewportContentMap = { [K: string]: string };\n\nexport const GlobalThis = (() => {\n    if (typeof window !== 'undefined') {\n        return window;\n    }\n\n    if (typeof global !== 'undefined') {\n        return global;\n    }\n\n    if (typeof globalThis !== 'undefined') {\n        return globalThis;\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof self !== 'undefined') {\n        // eslint-disable-next-line no-restricted-globals\n        return self;\n    }\n\n    return this;\n})() as any;\n\nexport class EventType {\n    private static vendors = ['', 'webkit', 'moz', 'ms', 'MS', 'o', 'O'];\n\n    static polyfillEventTypeMap: { [K: string]: string[] } = {\n        'wheel': ['wheel', 'mousewheel', 'DOMMouseScroll'],\n        'pointerlockchange': EventType.withVendor('pointer', 'lock', 'change'),\n        'pointerlockerror': EventType.withVendor('pointer', 'lock', 'error'),\n        'pointercancel': EventType.withVendor('pointer', 'cancel'),\n        'pointerdown': EventType.withVendor('pointer', 'down'),\n        'pointerhover': EventType.withVendor('pointer', 'hover'),\n        'pointermove': EventType.withVendor('pointer', 'move'),\n        'pointerout': EventType.withVendor('pointer', 'out'),\n        'pointerover': EventType.withVendor('pointer', 'over'),\n        'pointerup': EventType.withVendor('pointer', 'up'),\n        'lostpointercapture': EventType.withVendor('lost', 'pointer', 'capture'),\n        'gotpointercapture': EventType.withVendor('got', 'pointer', 'capture'),\n        'fullscreenchange': EventType.withVendor('fullscreen', 'change'),\n        'fullscreenerror': EventType.withVendor('fullscreen', 'error'),\n        'transitionstart': EventType.withVendor('transition', 'start'),\n        'transitionrun': EventType.withVendor('transition', 'run'),\n        'transitionend': EventType.withVendor('transition', 'end'),\n        'transitioncancel': EventType.withVendor('transition', 'cancel'),\n        'animationstart': EventType.withVendor('animation', 'start'),\n        'animationiteration': EventType.withVendor('animation', 'iteration'),\n        'animationend': EventType.withVendor('animation', 'end'),\n        'animationcancel': EventType.withVendor('animation', 'cancel')\n    }\n\n    private static withVendor(...strings: string[]) {\n        return EventType.vendors.flatMap(vendor => [\n            vendor + strings.join(''),\n            vendor + strings.map(string => EventType.capitalize(string)).join('')\n        ]);\n    }\n\n    private static capitalize(string: string) {\n        return string.replace(/\\b[a-z]/, s => s.toUpperCase());\n    }\n\n    static get(target: EventTarget, type: string) {\n        const types = EventType.polyfillEventTypeMap[type];\n\n        if (types) {\n            for (let type of types) {\n                if (('on' + type) in target) {\n                    return type;\n                }\n            }\n        } else if (('on' + type) in target) {\n            return type;\n        }\n\n        return;\n    }\n}\n\nexport class TaskScheduler {\n    private lastExecutionTime: number = 0;\n    private readonly delayThreshold: number;\n    private scheduledTask: (() => void) | null = null;\n    private rafId: number | null = null;\n    private readonly requestAnimationFrame;\n    private readonly cancelAnimationFrame;\n    private readonly now;\n\n    constructor(delayThreshold: number) {\n        this.delayThreshold = delayThreshold;\n\n        const now = (\n            Date.now\n            || function () {\n                return new Date().getTime();\n            }\n        );\n\n        const start = now();\n\n        this.now = () => {\n            if (GlobalThis.performance && GlobalThis.performance.now) {\n                return GlobalThis.performance.now()\n            }\n            return now() - start;\n        }\n\n        let lastTime = 0;\n\n        this.requestAnimationFrame = (\n            GlobalThis.requestAnimationFrame\n            || GlobalThis.webkitRequestAnimationFrame\n            || GlobalThis.mozRequestAnimationFrame\n            || GlobalThis.oRequestAnimationFrame\n            || GlobalThis.msRequestAnimationFrame\n            || ((callback: FrameRequestCallback) => {\n                const currentTime = this.now();\n                const timeToCall = Math.max(0, 16 - (currentTime - lastTime));\n\n                const id = window.setTimeout(function () {\n                    callback(currentTime + timeToCall);\n                }, timeToCall);\n\n                lastTime = currentTime + timeToCall;\n\n                return id;\n            })\n        );\n\n        this.cancelAnimationFrame = (\n            GlobalThis.cancelAnimationFrame\n            || GlobalThis.webkitCancelAnimationFrame\n            || GlobalThis.webkitCancelRequestAnimationFrame\n            || GlobalThis.mozCancelAnimationFrame\n            || GlobalThis.mozCancelRequestAnimationFrame\n            || GlobalThis.oCancelAnimationFrame\n            || GlobalThis.oCancelRequestAnimationFrame\n            || GlobalThis.msCancelAnimationFrame\n            || GlobalThis.msCancelRequestAnimationFrame\n            || ((id: number) => {\n                clearTimeout(id);\n            })\n        );\n\n    }\n\n    scheduleTask(task: () => void): void {\n        const currentTime = this.now();\n\n        if (currentTime - this.lastExecutionTime >= this.delayThreshold) {\n            if (this.rafId !== null) {\n                this.cancelAnimationFrame(this.rafId);\n                this.rafId = null;\n            }\n            this.executeTask(task);\n        } else {\n            this.scheduledTask = task;\n            if (this.rafId === null) {\n                this.rafId = this.requestAnimationFrame(() => this.runScheduledTask());\n            }\n        }\n    }\n\n    private executeTask(task: () => void): void {\n        this.lastExecutionTime = this.now();\n        task();\n    }\n\n    private runScheduledTask(): void {\n        if (this.scheduledTask) {\n            this.executeTask(this.scheduledTask);\n            this.scheduledTask = null;\n            this.rafId = null;\n        }\n    }\n}\n\nexport class EventListenerRegister {\n    static passiveSupported: Map<Function, boolean> = new Map();\n    static onceSupported: Map<Function, boolean> = new Map();\n\n    private readonly target: any\n\n    addEventListener = (type: string, callback: any, options?: any) => {\n        if ('addEventListener' in this.target) {\n            this.target.addEventListener(type, callback, options);\n            return;\n        }\n        if ('attachEvent' in this.target) {\n            this.target.attachEvent('on' + type, callback);\n            return;\n        }\n        if ('addListener' in this.target) {\n            this.target.addListener(callback);\n            return;\n        }\n        return;\n    }\n\n    removeEventListener = (type: string, callback: any, options?: any) => {\n        if ('removeEventListener' in this.target) {\n            this.target.removeEventListener(type, callback, options);\n            return;\n        }\n        if ('detachEvent' in this.target) {\n            this.target.detachEvent('on' + type, callback);\n            return;\n        }\n        if ('removeListener' in this.target) {\n            this.target.removeListener(callback);\n            return;\n        }\n        return () => {\n        };\n    }\n\n    dispatchEvent = (event: Event) => {\n        if ('dispatchEvent' in this.target) {\n            this.target.dispatchEvent(event);\n            return;\n        }\n        if ('fireEvent' in this.target) {\n            this.target.fireEvent('on' + event.type);\n            return;\n        }\n        return;\n    }\n\n    constructor(target: EventTarget) {\n        this.target = target;\n        this.checkSupportedOptions(target);\n    }\n\n    private checkSupportedOptions(target: EventTarget) {\n        if (EventListenerRegister.onceSupported.get(target.constructor) === undefined || EventListenerRegister.passiveSupported.get(target.constructor) === undefined) {\n            EventListenerRegister.passiveSupported.set(target.constructor, false);\n            EventListenerRegister.onceSupported.set(target.constructor, false);\n\n            try {\n                const empty = () => {\n                };\n\n                const options = Object.create({}, {\n                    passive: {\n                        get() {\n                            EventListenerRegister.passiveSupported.set(target.constructor, true);\n                            return undefined;\n                        }\n                    },\n                    once: {\n                        get() {\n                            EventListenerRegister.onceSupported.set(target.constructor, true);\n                            return undefined;\n                        }\n                    },\n                });\n\n                this.addEventListener('test', empty, options);\n                this.removeEventListener('test', empty, options);\n            } catch (e) {\n            }\n        }\n    }\n}\n\nexport class DefaultGesturePreventer {\n    private static styleSheet: CSSStyleSheet;\n    private static meta: WeakMap<HTMLMetaElement, ViewportContentMap> = new WeakMap();\n    private static isActivePreventDefaultPinchGesture = false;\n    private static isActivePreventDefaultPanGesture = false;\n    private static isActivePreventDefaultSelectGesture = false;\n    private static preventDefault = (event: Event) => {\n        if (!('cancelable' in event) || event.cancelable) {\n            event.preventDefault();\n        }\n    }\n    private static emptyPromise = new Promise(() => {\n    });\n    static documentEventRegister = new EventListenerRegister(document);\n\n    static activePreventDefaultPinchGesture() {\n        if (DefaultGesturePreventer.isActivePreventDefaultPinchGesture) return DefaultGesturePreventer.emptyPromise;\n\n        DefaultGesturePreventer.isActivePreventDefaultPinchGesture = true;\n        DefaultGesturePreventer.documentEventRegister.addEventListener('touchmove', DefaultGesturePreventer.preventDefault, {passive: false});\n        DefaultGesturePreventer.documentEventRegister.addEventListener('touchstart', DefaultGesturePreventer.preventDefault, {passive: false});\n\n        return new Promise(async resolve => {\n            const metas: NodeListOf<HTMLMetaElement> = document.querySelectorAll<HTMLMetaElement>('meta[name=\"viewport\"]');\n\n            if (metas.length === 0) {\n                const meta: HTMLMetaElement = document.createElement('meta');\n                meta.setAttribute('name', 'viewport');\n                meta.setAttribute('content', 'user-scalable=no');\n\n                document.head.append(meta);\n                DefaultGesturePreventer.meta.set(meta, {});\n            }\n\n            metas\n                .forEach(meta => {\n                    const content = meta.getAttribute('content');\n                    if (content) {\n                        const contentMap = DefaultGesturePreventer.splitViewportContent(content);\n\n                        DefaultGesturePreventer.meta.set(meta, contentMap);\n                        contentMap['user-scalable'] = 'no';\n                        meta.setAttribute('content', DefaultGesturePreventer.joinViewportContent(contentMap));\n                    }\n                });\n\n            setTimeout(resolve);\n        });\n    }\n\n    static inactivePreventDefaultPinchGesture() {\n        if (!DefaultGesturePreventer.isActivePreventDefaultPinchGesture) return;\n\n        DefaultGesturePreventer.isActivePreventDefaultPinchGesture = false;\n        DefaultGesturePreventer.documentEventRegister.removeEventListener('touchmove', DefaultGesturePreventer.preventDefault);\n        DefaultGesturePreventer.documentEventRegister.removeEventListener('touchstart', DefaultGesturePreventer.preventDefault);\n\n        document.querySelectorAll<HTMLMetaElement>('meta[name=\"viewport\"]')\n            .forEach(meta => {\n                if (DefaultGesturePreventer.meta.has(meta)) {\n                    const content = DefaultGesturePreventer.meta.get(meta)!;\n\n                    if (Object.keys(content).length === 0) {\n                        meta.remove();\n                    } else {\n                        meta.setAttribute('content', DefaultGesturePreventer.joinViewportContent(content));\n                    }\n                }\n            });\n    }\n\n    static activePreventDefaultPanGesture() {\n        if (DefaultGesturePreventer.isActivePreventDefaultPanGesture) return DefaultGesturePreventer.emptyPromise;\n\n        DefaultGesturePreventer.isActivePreventDefaultPanGesture = true;\n\n        return new Promise(resolve => {\n            DefaultGesturePreventer.documentEventRegister.addEventListener('touchstart', DefaultGesturePreventer.preventDefault, {passive: false});\n            setTimeout(resolve);\n        });\n    }\n\n    static inactivePreventDefaultPanGesture() {\n        if (!DefaultGesturePreventer.isActivePreventDefaultPanGesture) return;\n\n        DefaultGesturePreventer.isActivePreventDefaultPanGesture = false;\n        DefaultGesturePreventer.documentEventRegister.removeEventListener('touchstart', DefaultGesturePreventer.preventDefault);\n    }\n\n    static activePreventDefaultSelectGesture() {\n        if (DefaultGesturePreventer.isActivePreventDefaultSelectGesture) return DefaultGesturePreventer.emptyPromise;\n\n        DefaultGesturePreventer.isActivePreventDefaultSelectGesture = true;\n        DefaultGesturePreventer.documentEventRegister.addEventListener('touchstart', DefaultGesturePreventer.preventDefault, {passive: false});\n\n        return new Promise(resolve => {\n            DefaultGesturePreventer.getStyleSheet().insertRule(\n                'html{' +\n                '-webkit-touch-callout: none;' +\n\n                '-webkit-tap-highlight-color: rgba(0, 0, 0, 0);' +\n\n                'outline-style: none;' +\n\n                '-webkit-user-select: none;' +\n                '-khtml-user-select: none;' +\n                '-moz-user-select: none;' +\n                '-ms-user-select: none;' +\n                '-o-user-select: none;' +\n                'user-select: none;' +\n\n                '-webkit-user-drag: none;' +\n                '-khtml-user-drag: none;' +\n                '-moz-user-drag: none;' +\n                '-ms-user-drag: none;' +\n                '-o-user-drag: none;' +\n                'user-drag: none;' +\n\n                '-webkit-app-region: none;' +\n                '-khtml-app-region: none;' +\n                '-moz-app-region: none;' +\n                '-ms-app-region: none;' +\n                '-o-app-region: none;' +\n                'app-region: none;' +\n                '}'\n            );\n            setTimeout(resolve);\n        });\n    }\n\n    static inactivePreventDefaultSelectGesture() {\n        if (!DefaultGesturePreventer.isActivePreventDefaultSelectGesture) return;\n\n        DefaultGesturePreventer.isActivePreventDefaultSelectGesture = false;\n        DefaultGesturePreventer.documentEventRegister.removeEventListener('touchstart', DefaultGesturePreventer.preventDefault);\n\n        try {\n            DefaultGesturePreventer.getStyleSheet().deleteRule(0);\n        } catch (e) {\n        }\n    }\n\n    private static getStyleSheet(): CSSStyleSheet {\n        if (!DefaultGesturePreventer.styleSheet) {\n            const style: HTMLStyleElement = document.createElement('style');\n            document.head.append(style);\n            DefaultGesturePreventer.styleSheet = style.sheet as CSSStyleSheet;\n        }\n\n        return DefaultGesturePreventer.styleSheet;\n    }\n\n    private static splitViewportContent(content: string): ViewportContentMap {\n        return content\n            .split(',')\n            .map(content => {\n                const kv = content.trim().split('=');\n                return {[kv[0]]: kv[1]};\n            })\n            .reduce((prev, curr) => Object.assign(prev, curr), {});\n    }\n\n    private static joinViewportContent(contentMap: ViewportContentMap): string {\n        return Object.keys(contentMap)\n            .map(key => key + '=' + contentMap[key])\n            .join(', ');\n    }\n}\n\nexport class EventListenerMap {\n    private map: Map<EventListenerOrEventListenerObject, { [K in 'capture' | 'release']: EventListener | undefined }> = new Map();\n\n    get(callback: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean) {\n        const optionsObject = this.parseOptions(options);\n        const callbackObject = this.map.get(callback);\n\n        if (optionsObject.capture) {\n            return callbackObject?.capture;\n        }\n\n        return callbackObject?.release;\n    }\n\n    set(target: EventTarget, type: EventHandlersEventMaps, callback: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean) {\n        let callbackFunction = this.parseCallback(callback);\n        const optionsObject = this.parseOptions(options);\n\n        const isPassiveSupported = EventListenerRegister.passiveSupported.get(target.constructor);\n        const isOnceSupported = EventListenerRegister.onceSupported.get(target.constructor);\n\n        let newCallbackFunction: EventListener = function (event: Event) {\n            if (!isPassiveSupported && optionsObject.passive) {\n                event.preventDefault = function () {\n                };\n            }\n            callbackFunction(event);\n            if (!isOnceSupported && optionsObject.once) {\n                target.removeEventListener(event.type, newCallbackFunction as EventListenerOrEventListenerObject);\n            }\n        };\n\n        if (isPassiveSupported && isOnceSupported) {\n            newCallbackFunction = callbackFunction;\n        }\n\n        if (optionsObject.capture) {\n            this.map.set(callback, {'capture': newCallbackFunction, release: this.map.get(callback)?.release});\n        } else {\n            this.map.set(callback, {capture: this.map.get(callback)?.capture, 'release': newCallbackFunction});\n        }\n\n        return callbackFunction;\n    }\n\n    delete(callback: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean) {\n        const optionsObject = this.parseOptions(options);\n        const callbackObject = this.map.get(callback);\n\n        if (optionsObject.capture) {\n            delete callbackObject?.capture;\n        } else {\n            delete callbackObject?.release;\n        }\n\n        if (callbackObject) {\n            if (Object.keys(callbackObject).length === 0) {\n                this.map.delete(callback);\n            } else {\n                this.map.set(callback, callbackObject);\n            }\n        }\n    }\n\n    keys() {\n        return this.map.keys();\n    }\n\n    size() {\n        return this.map.size;\n    }\n\n    private parseCallback(callback: EventListenerOrEventListenerObject) {\n        if (typeof callback === 'function') {\n            return callback;\n        }\n\n        return callback.handleEvent;\n    }\n\n    private parseOptions(options?: AddEventListenerOptionsOrBoolean) {\n        if (options === undefined) {\n            return {};\n        }\n\n        if (typeof options === 'boolean') {\n            return {capture: options};\n        }\n\n        return options;\n    }\n}", "import {GlobalThis} from \"./utils\";\n\nexport default (() => {\n    if (typeof GlobalThis.TouchEvent === 'undefined') {\n        class TouchEvent extends UIEvent {\n            constructor(type: string, init?: TouchEventInit) {\n                super(type, init);\n            }\n        }\n\n        GlobalThis.TouchEvent = TouchEvent;\n    }\n\n    if (!GlobalThis.WeakMap) {\n        const hasOwnProperty = Object.prototype.hasOwnProperty;\n        const hasDefine = (() => {\n            try {\n                return (Object.defineProperty({}, 'x', {value: 1}) as any).x === 1;\n            } catch (e) {\n                return false;\n            }\n        })();\n\n        const defineProperty = (object: any, name: string, value: any) => {\n            if (hasDefine) {\n                Object.defineProperty(object, name, {\n                    configurable: true,\n                    writable: true,\n                    value: value\n                });\n            } else {\n                object[name] = value;\n            }\n        };\n\n        GlobalThis.WeakMap = (function () {\n            class WeakMap<K extends object, V> {\n                private readonly _id: string;\n\n                constructor() {\n                    if (this === undefined) {\n                        throw new TypeError(\"Constructor WeakMap requires 'new'\");\n                    }\n\n                    this._id = genId('_WeakMap');\n\n                    if (arguments.length > 0) {\n                        throw new TypeError('WeakMap iterable is not supported');\n                    }\n                }\n\n                delete(key: K): boolean {\n                    checkInstance(this, 'delete');\n\n                    if (!isObject(key)) {\n                        return false;\n                    }\n\n                    const entry = (key as any)[this._id];\n                    if (entry && entry[0] === key) {\n                        delete (key as any)[this._id];\n                        return true;\n                    }\n\n                    return false;\n                }\n\n                get(key: K): V | undefined {\n                    checkInstance(this, 'get');\n\n                    if (!isObject(key)) {\n                        return undefined;\n                    }\n\n                    const entry = (key as any)[this._id];\n                    if (entry && entry[0] === key) {\n                        return entry[1];\n                    }\n\n                    return undefined;\n                }\n\n                has(key: K): boolean {\n                    checkInstance(this, 'has');\n\n                    if (!isObject(key)) {\n                        return false;\n                    }\n\n                    const entry = (key as any)[this._id];\n                    return !!(entry && entry[0] === key);\n                }\n\n                set(key: K, value: V): this {\n                    checkInstance(this, 'set');\n\n                    if (!isObject(key)) {\n                        throw new TypeError('Invalid value used as weak map key');\n                    }\n\n                    const entry = (key as any)[this._id];\n                    if (entry && entry[0] === key) {\n                        entry[1] = value;\n                        return this;\n                    }\n\n                    defineProperty(key, this._id, [key, value]);\n                    return this;\n                }\n            }\n\n            function checkInstance(x: any, methodName: string) {\n                if (!isObject(x) || !hasOwnProperty.call(x, '_id')) {\n                    throw new TypeError(\n                        `${methodName} method called on incompatible receiver ${typeof x}`\n                    );\n                }\n            }\n\n            function genId(prefix: string): string {\n                return `${prefix}_${rand()}.${rand()}`;\n            }\n\n            function rand(): string {\n                return Math.random().toString().substring(2);\n            }\n\n            defineProperty(WeakMap, '_polyfill', true);\n            return WeakMap;\n        })();\n\n        const isObject = (x: any): boolean => Object(x) === x;\n    }\n\n    if (!GlobalThis.matchMedia) {\n        GlobalThis.matchMedia = function (media: string) {\n            let styleMedia = (GlobalThis.styleMedia || GlobalThis.media);\n\n            if (!styleMedia) {\n                const style: any = document.createElement('style');\n                let info = null;\n\n                style.type = 'text/css';\n                style.setAttribute('data-match-media-query', 'true');\n\n                document.head.appendChild(style);\n\n                info = ('getComputedStyle' in window) && window.getComputedStyle(style) || style.currentStyle;\n\n                styleMedia = {\n                    matchMedium: function (media: string) {\n                        const text = '@media ' + media + '{ [data-match-media-query] { width: 1px; } }';\n\n                        if (style.styleSheet) {\n                            style.styleSheet.cssText = text;\n                        } else {\n                            style.textContent = text;\n                        }\n\n                        document.head.removeChild(style);\n                        return info.width === '1px';\n                    }\n                };\n            }\n\n            return {\n                matches: styleMedia.matchMedium(media),\n                media: media\n            };\n        }\n    }\n\n    return undefined;\n})();", "{\n  \"name\": \"eventlistener-manager\",\n  \"version\": \"1.0.44\",\n  \"description\": \"The EventManager is capable of handling both native and custom events seamlessly, providing a robust solution for event management in complex applications.\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n    \"build\": \"node build.js\"\n  },\n  \"author\": \"\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"main\": \"dist/index.cjs\",\n  \"require\": \"dist/index.cjs\",\n  \"module\": \"dist/index.mjs\",\n  \"umd\": \"dist/index.umd.js\",\n  \"types\": \"dist/src/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\",\n      \"umd\": \"./dist/index.umd.js\",\n      \"types\": \"./dist/src/index.d.ts\"\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/pjy0509/eventlistener-manager\"\n  },\n  \"homepage\": \"https://pjy0509.github.io/example/eventlistener-manager/\",\n  \"keywords\": [\n    \"event\",\n    \"eventlistener\",\n    \"listener\",\n    \"gesture\",\n    \"longpress\",\n    \"pan\",\n    \"pinch\",\n    \"javascript\",\n    \"typescript\"\n  ],\n  \"devDependencies\": {\n    \"esbuild\": \"^0.21.4\",\n    \"glob\": \"^10.4.1\",\n    \"html-webpack-plugin\": \"^5.6.0\",\n    \"ts-loader\": \"^9.5.1\",\n    \"typescript\": \"^5.4.5\"\n  }\n}\n", "import {EventListenerMap} from \"./utils\";\n\ninterface ExtendedMouseEventMap {\n    'mouselongpressstart': MouseEvent;\n    'mouselongpressmove': MouseEvent;\n    'mouselongpressend': MouseEvent;\n    'mouselongpressleave': MouseEvent;\n\n    'mousepanstart': MouseEvent;\n    'mousepanmove': MouseEvent;\n    'mousepanleft': MouseEvent;\n    'mousepanright': MouseEvent;\n    'mousepanup': MouseEvent;\n    'mousepandown': MouseEvent;\n    'mousepanend': MouseEvent;\n    'mousepanleave': MouseEvent;\n}\n\ninterface ExtendedTouchEventMap {\n    'touchlongpressstart': TouchEvent;\n    'touchlongpressmove': TouchEvent;\n    'touchlongpressend': TouchEvent;\n    'touchlongpresscancel': TouchEvent;\n\n    'touchpanstart': TouchEvent;\n    'touchpanmove': TouchEvent;\n    'touchpanleft': TouchEvent;\n    'touchpanright': TouchEvent;\n    'touchpanup': TouchEvent;\n    'touchpandown': TouchEvent;\n    'touchpanend': TouchEvent;\n    'touchpancancel': TouchEvent;\n\n    'touchpinchstart': TouchEvent;\n    'touchpinchmove': TouchEvent;\n    'touchpinchend': TouchEvent;\n    'touchpinchcancel': TouchEvent;\n}\n\ninterface ExtendedUIEventMap {\n    'appearancechange': MediaQueryListEvent;\n    'orientationchange': MediaQueryListEvent;\n    'resize': UIEvent;\n    'intersectionchange': UIEvent;\n}\n\nexport interface ExtendedEventMap extends ExtendedMouseEventMap, ExtendedTouchEventMap, ExtendedUIEventMap {\n}\n\nexport interface ExtendedHTMLElementEventMap extends HTMLElementEventMap, ExtendedEventMap {\n}\n\nexport type ExtendedEventType =\n    | 'mouselongpress'\n    | 'mousepan'\n    | 'multiclick'\n    | 'touchlongpress'\n    | 'touchpan'\n    | 'touchpinch'\n    | 'touchrotate'\n    | 'multitouch'\n    | 'appearancechange'\n    | 'orientationchange'\n    | 'resize'\n    | 'intersection';\ntype HTMLElementEventKey = keyof HTMLElementEventMap;\ntype ExtendedMouseEventKey = keyof ExtendedMouseEventMap;\ntype ExtendedTouchEventKey = keyof ExtendedTouchEventMap;\ntype ExtendedUIEventMapKey = keyof ExtendedUIEventMap;\ntype ExtendedEventKey = keyof ExtendedEventMap;\ntype ExtendedHTMLElementEventKey = keyof Partial<ExtendedHTMLElementEventMap>;\n\nexport type AddEventListenerOptionsOrBoolean = AddEventListenerOptions | boolean;\nexport type EventHandlersEventMaps = ExtendedHTMLElementEventKey | ExtendedHTMLElementEventKey[];\nexport type EventListenerEventMap = Map<EventHandlersEventMaps, EventListenerMap>;\n\nexport type ExtendedEventImplementation = Partial<{ [K in HTMLElementEventKey]: EventListenerOrEventListenerObject[] }> & { 'callback'?: () => void };\nexport type ExtendedEventInstance = { [K in ExtendedEventType]: ExtendedEventImplementation };\n\nexport interface EventManagerInstance {\n    generalEventInstance: WeakMap<EventTarget, EventListenerEventMap>;\n    extendedEventInstance: WeakMap<EventTarget, ExtendedEventInstance>;\n}\n\nconst extendedMouseEventMap: Record<ExtendedMouseEventKey, ExtendedEventType> = {\n    'mouselongpressstart': 'mouselongpress',\n    'mouselongpressmove': 'mouselongpress',\n    'mouselongpressend': 'mouselongpress',\n    'mouselongpressleave': 'mouselongpress',\n\n    'mousepanstart': 'mousepan',\n    'mousepanmove': 'mousepan',\n    'mousepanleft': 'mousepan',\n    'mousepanright': 'mousepan',\n    'mousepanup': 'mousepan',\n    'mousepandown': 'mousepan',\n    'mousepanend': 'mousepan',\n    'mousepanleave': 'mousepan',\n};\n\nconst extendedTouchEventMap: Record<ExtendedTouchEventKey, ExtendedEventType> = {\n    'touchlongpressstart': 'touchlongpress',\n    'touchlongpressmove': 'touchlongpress',\n    'touchlongpressend': 'touchlongpress',\n    'touchlongpresscancel': 'touchlongpress',\n\n    'touchpanstart': 'touchpan',\n    'touchpanmove': 'touchpan',\n    'touchpanleft': 'touchpan',\n    'touchpanright': 'touchpan',\n    'touchpanup': 'touchpan',\n    'touchpandown': 'touchpan',\n    'touchpanend': 'touchpan',\n    'touchpancancel': 'touchpan',\n\n    'touchpinchstart': 'touchpinch',\n    'touchpinchmove': 'touchpinch',\n    'touchpinchend': 'touchpinch',\n    'touchpinchcancel': 'touchpinch',\n};\n\nconst extendedUIEventMap: Record<ExtendedUIEventMapKey, ExtendedEventType> = {\n    'appearancechange': 'appearancechange',\n    'orientationchange': 'orientationchange',\n    'resize': 'resize',\n    'intersectionchange': 'intersection'\n};\n\nexport const extendedEventMap: Record<ExtendedEventKey, ExtendedEventType> = {\n    ...extendedMouseEventMap,\n    ...extendedTouchEventMap,\n    ...extendedUIEventMap,\n};\n\nexport interface ExtendedUIEventProperty {\n}", "import {ExtendedUIEventProperty} from \"./interfacecs\";\n\nexport class Direction {\n    static 'U' = 0\n    static 'UR' = 1\n    static 'R' = 2\n    static 'DR' = 3\n    static 'D' = 4\n    static 'DL' = 5\n    static 'L' = 6\n    static 'UL' = 7\n    static 'Unknown' = -1\n\n    static get4Direction(degree: number) {\n        if (degree >= 0 && degree <= 45) return Direction.R;\n        if (degree > 45 && degree <= 135) return Direction.D;\n        if (degree > 135 && degree <= 180) return Direction.L;\n        if (degree >= -180 && degree <= -135) return Direction.L;\n        if (degree > -135 && degree <= -45) return Direction.U;\n        if (degree > -45 && degree <= -0) return Direction.R;\n\n        return Direction.Unknown;\n    }\n\n    static get8Direction(degree: number) {\n        if (degree >= 0 && degree <= 22.5) return Direction.R;\n        if (degree > 22.5 && degree <= 67.5) return Direction.DR;\n        if (degree > 67.5 && degree <= 112.5) return Direction.D;\n        if (degree > 112.5 && degree <= 157.5) return Direction.DL;\n        if (degree > 157.5 && degree <= 180) return Direction.L;\n        if (degree >= -180 && degree <= -157.5) return Direction.L;\n        if (degree > -157.5 && degree <= -112.5) return Direction.UL;\n        if (degree > -112.5 && degree <= -67.5) return Direction.U;\n        if (degree > -67.5 && degree <= -22.5) return Direction.UR;\n        if (degree > -22.5 && degree <= -0) return Direction.R;\n\n        return Direction.Unknown;\n    }\n}\n\nexport class EventPosition {\n    readonly x: number;\n    readonly y: number;\n    readonly t: number;\n\n    constructor(...args: any) {\n        this.t = new Date().getTime();\n\n        const arg0 = args[0];\n        const arg1 = args[1];\n\n        if (arg0 instanceof MouseEvent) {\n            this.x = arg0.clientX;\n            this.y = arg0.clientY;\n        } else if (arg0 instanceof TouchEvent && typeof arg1 === 'number' && arg0.touches.length > arg1) {\n            this.x = arg0.touches[arg1].clientX;\n            this.y = arg0.touches[arg1].clientY;\n        } else if (typeof arg0 === 'number' && typeof arg1 === 'number') {\n            this.x = arg0;\n            this.y = arg1;\n        } else {\n            this.x = NaN;\n            this.y = NaN;\n        }\n    }\n\n    static fromMouseEvent(event: Event): EventPosition {\n        return new EventPosition(event);\n    }\n\n    static fromTouchEvent(event: Event, n: number = 0): EventPosition {\n        return new EventPosition(event, n);\n    }\n\n    static fromCoordinate(x: number, y: number): EventPosition {\n        return new EventPosition(x, y);\n    }\n\n    static center(p1: EventPosition, p2: EventPosition): EventPosition {\n        return new EventPosition((p1.x + p2.x) / 2, (p1.y + p2.y) / 2);\n    }\n\n    distance(to: EventPosition): number {\n        const dx = this.x - to.x;\n        const dy = this.y - to.y;\n        return Math.sqrt(dx * dx + dy * dy);\n    }\n\n    timeDiff(to: EventPosition): number {\n        return Math.abs(this.t - to.t);\n    }\n}\n\nexport class EventPath {\n    readonly start: EventPosition;\n    readonly end: EventPosition;\n    readonly center: EventPosition;\n    readonly dx: number;\n    readonly dy: number;\n    readonly distance: number;\n    readonly speed: number;\n    readonly time: number;\n    readonly radian: number;\n    readonly degree: number;\n    readonly direction: Direction;\n\n    constructor(p1: EventPosition, p2: EventPosition) {\n        this.start = p1;\n        this.end = p2;\n        this.center = EventPosition.center(p1, p2);\n        this.dx = p2.x - p1.x;\n        this.dy = p2.y - p1.y;\n        this.distance = p2.distance(p1);\n        this.time = p2.t - p1.t;\n        this.speed = this.distance / this.time;\n        this.radian = Math.atan2(this.dy, this.dx);\n        this.degree = this.radian * (180 / Math.PI);\n        this.direction = Direction.get8Direction(this.degree);\n    }\n\n    equals(other: EventPath) {\n        return this.start.x === other.start.x && this.end.x === other.end.x && this.start.y === other.start.y && this.end.y === other.end.y;\n    }\n}\n\nexport class EventPathList extends Array<EventPath> {\n    readonly first: EventPath | undefined;\n    readonly last: EventPath | undefined;\n\n    constructor(paths: EventPath[]) {\n        super();\n        if (paths.length > 0) {\n            this.push(...paths);\n            this.first = paths[0];\n            this.last = paths[this.length - 1];\n        }\n    }\n\n    item(n: number): EventPath | undefined {\n        if (this.length > n) {\n            return this[n];\n        }\n        return;\n    }\n\n    private dPath(index: number, property: keyof EventPath) {\n        if (index < 1) {\n            return;\n        }\n\n        const item1 = this.item(index);\n        const item2 = this.item(index - 1);\n\n        if (item1 && item2) {\n            const value1 = item1[property];\n            const value2 = item2[property];\n\n            if (value1 instanceof EventPosition && value2 instanceof EventPosition) {\n                return new EventPath(value1, value2);\n            }\n        }\n        return;\n    }\n\n    private dNumber(index: number, property: keyof EventPath) {\n        if (index < 1) {\n            return;\n        }\n\n        const item1 = this.item(index);\n        const item2 = this.item(index - 1);\n\n        if (item1 && item2) {\n            const value1 = item1[property];\n            const value2 = item2[property];\n\n            if (typeof value1 === 'number' && typeof value2 === 'number') {\n                return value2 - value1;\n            }\n        }\n        return;\n    }\n\n    dStart(index: number) {\n        return this.dPath(index, 'start');\n    }\n\n    dEnd(index: number) {\n        return this.dPath(index, 'end');\n    }\n\n    dCenter(index: number) {\n        return this.dPath(index, 'center');\n    }\n\n    dDistance(index: number) {\n        return this.dNumber(index, 'distance');\n    }\n\n    dRadian(index: number) {\n        return this.dNumber(index, 'radian');\n    }\n\n    dDegree(index: number) {\n        return this.dNumber(index, 'degree');\n    }\n}\n\nexport class Appearance implements ExtendedUIEventProperty {\n    static Dark = 0;\n    static Light = 1;\n}\n\nexport class Orientation implements ExtendedUIEventProperty {\n    static Portrait = 0;\n    static Landscape = 1;\n}\n\nexport class Size implements ExtendedUIEventProperty {\n    width: number;\n    height: number;\n\n    constructor(target: any) {\n        this.width = target.outerWidth || target.offsetWidth || target.width || NaN;\n        this.height = target.outerHeight || target.offsetHeight || target.height || NaN;\n    }\n}", "import {EventPath, EventPathList, Size} from \"./geometry\";\nimport {ExtendedUIEventProperty} from \"./interfacecs\";\n\nclass CloneEventInit {\n    static clone<T extends EventInit>(event: Event): T {\n        return Object.assign({}, event) as unknown as T;\n    }\n}\n\nexport class ExtendedMouseEvent extends MouseEvent {\n    paths: EventPathList;\n\n    constructor(type: string, event: Event, paths: EventPath[] = []) {\n        super(type, CloneEventInit.clone(event));\n        this.paths = new EventPathList(paths);\n    }\n}\n\nexport class ExtendedTouchEvent extends TouchEvent {\n    paths: EventPathList;\n\n    constructor(type: string, event: Event, paths: EventPath[] = []) {\n        super(type, CloneEventInit.clone(event));\n        this.paths = new EventPathList(paths);\n    }\n}\n\nexport class ExtendedUIEvent<T extends Extract<string, keyof UIEvent>, U extends ExtendedUIEventProperty> extends UIEvent {\n    property: { [K in T]: U };\n\n    constructor(type: string, event: Event, property: { [K in T]: U }) {\n        super(type, CloneEventInit.clone(event));\n        this.property = property;\n    }\n}", "import './polyfill';\nimport packageJSON from '../package.json';\nimport {DefaultGesturePreventer, EventListenerMap, EventListenerRegister, EventType, GlobalThis, TaskScheduler} from \"./utils\";\nimport {\n    AddEventListenerOptionsOrBoolean,\n    EventHandlersEventMaps,\n    EventListenerEventMap,\n    EventManagerInstance,\n    ExtendedEventImplementation,\n    ExtendedEventInstance,\n    ExtendedEventMap,\n    extendedEventMap,\n    ExtendedEventType,\n    ExtendedHTMLElementEventMap,\n    ExtendedUIEventProperty\n} from \"./interfacecs\";\nimport {ExtendedUIEvent, ExtendedMouseEvent, ExtendedTouchEvent} from \"./event\";\nimport {EventPath, EventPathList, EventPosition, Direction, Appearance, Orientation, Size} from \"./geometry\";\n\nexport {\n    EventPath, EventPathList, EventPosition,\n    Direction, Appearance, Orientation, Size,\n    ExtendedMouseEvent, ExtendedTouchEvent, ExtendedUIEvent\n};\n\nconst scheduler = new TaskScheduler(5);\n\nexport class EventManager {\n    static instance: EventManagerInstance = {\n        generalEventInstance: new WeakMap(),\n        extendedEventInstance: new WeakMap()\n    };\n\n    static options = {\n        strict: true,\n        mouseLongpressTimeRequired: 750,\n        mouseLongpressBelowDistance: 15,\n        touchLongpressTimeRequired: 750,\n        touchLongpressBelowDistance: 30,\n        callWhenAddedUIEvent: true,\n    };\n\n    static resizeObserver: ResizeObserver | undefined = undefined;\n    static intersectionObserver: IntersectionObserver | undefined = undefined;\n    static version = packageJSON.version;\n\n    static on(target: EventTarget, types: EventHandlersEventMaps, callback: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean): void {\n        for (const type of EventManager.toArray(types)) {\n            if (!!EventManager.extendedEventKey(type)) {\n                EventManager.addExtendedEventListener(target, types, callback, options);\n            } else {\n                const eventType = EventType.get(target, type);\n                if (!eventType) {\n                    continue;\n                }\n                EventManager.addEventListener(target, type, callback, options);\n            }\n        }\n    }\n\n    private static addEventListener(target: EventTarget, type: string, callback: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean): void {\n        new EventListenerRegister(target).addEventListener(type, EventManager.storeEventListener(target, type as EventHandlersEventMaps, callback, options), options)\n    }\n\n    private static removeEventListener(target: EventTarget, type: string, callback: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean): void {\n        EventManager.off(target, type as EventHandlersEventMaps, callback, options);\n    }\n\n    private static dispatchEvent(target: EventTarget, event: Event) {\n        new EventListenerRegister(target).dispatchEvent(event);\n    }\n\n    private static extendedEventKey(type: string): string | undefined {\n        return extendedEventMap[type as keyof ExtendedEventMap];\n    }\n\n    private static addExtendedEventListener(target: EventTarget, types: EventHandlersEventMaps, callback: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean): void {\n        for (const type of EventManager.toArray(types)) {\n            EventManager.addEventListener(target, type, callback, options);\n\n            switch (EventManager.extendedEventKey(type)) {\n                case 'mouselongpress':\n                    EventManager.addMouseLongpressEvent(target);\n                    break;\n                case 'mousepan':\n                    EventManager.addMousePanEvent(target);\n                    break;\n                case 'touchlongpress':\n                    EventManager.addTouchLongpressEvent(target);\n                    break;\n                case 'touchpan':\n                    EventManager.addTouchPanEvent(target);\n                    break;\n                case 'touchpinch':\n                    EventManager.addTouchPinchEvent(target);\n                    break;\n                case 'appearancechange':\n                    EventManager.addAppearanceChange(target);\n                    break;\n                case 'orientationchange':\n                    EventManager.addOrientationChange(target);\n                    break;\n                case 'resize':\n                    EventManager.addResize(target);\n                    break;\n                case 'intersection':\n                    EventManager.addIntersection(target);\n                    break;\n            }\n        }\n    }\n\n    static off(target: EventTarget, types?: EventHandlersEventMaps, callback?: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean): void {\n        const listenerEventMap = EventManager.instance.generalEventInstance.get(target);\n\n        if (!listenerEventMap) return;\n\n        if (types) {\n            EventManager.removeEventListenerFromType(target, types, callback, options);\n        } else {\n            const keys = listenerEventMap.keys();\n            let key = keys.next();\n\n            while (!key.done) {\n                const types = key.value;\n                EventManager.removeEventListenerFromType(target, types, callback, options);\n                key = keys.next();\n            }\n        }\n    }\n\n    private static removeEventListenerFromType(target: EventTarget, types: EventHandlersEventMaps, comparator?: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean): void {\n        const listenerEventMap = EventManager.instance.generalEventInstance.get(target);\n\n        if (!listenerEventMap) return;\n\n        for (const type of EventManager.toArray(types)) {\n            const fns = [];\n            const listeners = listenerEventMap.get(type);\n\n            if (listeners) {\n                const keys = listeners.keys();\n                let key = keys.next();\n\n                while (!key.done) {\n                    const value = listeners.get(key.value, options);\n                    if (value) {\n                        const fn = EventManager.matchAndRemoveListener(target, type, value, comparator, options);\n                        if (fn) {\n                            fns.push(fn);\n                        }\n                    }\n                    key = keys.next();\n                }\n\n                for (const fn of fns) {\n                    listeners.delete(fn, options);\n                }\n\n                if (listeners.size() === 0) {\n                    listenerEventMap.delete(types);\n                }\n            }\n\n            if (listenerEventMap.size === 0) {\n                EventManager.instance.generalEventInstance.delete(target);\n            }\n\n            const extendedEventKey = EventManager.extendedEventKey(type);\n            if (extendedEventKey) {\n                const keys = listenerEventMap.keys();\n                let key = keys.next();\n                let removeExtendedEvent = true;\n\n                loop: while (!key.done) {\n                    const types = key.value;\n                    for (const type of EventManager.toArray(types)) {\n                        if (extendedEventKey === EventManager.extendedEventKey(type)) {\n                            removeExtendedEvent = false;\n                            break loop;\n                        }\n                    }\n                    key = keys.next();\n                }\n\n                if (removeExtendedEvent) {\n                    EventManager.removeExtendedEvent(target, extendedEventKey as ExtendedEventType, options)\n                }\n            }\n        }\n    }\n\n    private static matchAndRemoveListener(target: EventTarget, types: keyof ExtendedHTMLElementEventMap, callback: EventListenerOrEventListenerObject, comparator?: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean): EventListenerOrEventListenerObject | undefined {\n        if (!comparator || comparator === callback) {\n            return EventManager.removeEventListenerOne(target, types, callback, options);\n        }\n        return;\n    }\n\n    private static removeEventListenerOne(target: EventTarget, types: keyof ExtendedHTMLElementEventMap, callback: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean): EventListenerOrEventListenerObject | undefined {\n        const newCallback = EventManager.instance.generalEventInstance.get(target)?.get(types)?.get(callback, options);\n        if (newCallback) {\n            new EventListenerRegister(target).removeEventListener(types, newCallback, options);\n            EventManager.instance.generalEventInstance.get(target)?.get(types)?.delete(callback, options);\n        }\n        return callback;\n    }\n\n    private static storeEventListener(target: EventTarget, types: EventHandlersEventMaps, callback: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean): EventListener {\n        const listeners = EventManager.getOrCreateListenerMap(target, types);\n\n        const newCallback = listeners.set(target, types, callback, options);\n\n        EventManager.getOrCreateEventListenerEventMap(target).set(types, listeners);\n\n        return newCallback;\n    }\n\n    private static getOrCreateListenerMap(target: EventTarget, types: EventHandlersEventMaps): EventListenerMap {\n        const listenerEventMap = EventManager.getOrCreateEventListenerEventMap(target);\n        const listeners = listenerEventMap.get(types);\n\n        if (listeners) {\n            return listeners;\n        } else {\n            const newMap: EventListenerMap = new EventListenerMap();\n            listenerEventMap.set(types, newMap);\n\n            return newMap;\n        }\n    }\n\n    private static getOrCreateEventListenerEventMap(target: EventTarget): EventListenerEventMap {\n        const listenerEventMap = EventManager.instance.generalEventInstance.get(target);\n\n        if (listenerEventMap) {\n            return listenerEventMap;\n        } else {\n            const newMap = new Map();\n            EventManager.instance.generalEventInstance.set(target, newMap);\n\n            return newMap;\n        }\n    }\n\n    private static getExtendedEvent(target: EventTarget): ExtendedEventInstance | undefined {\n        return EventManager.instance.extendedEventInstance.get(target);\n    }\n\n    private static addExtendedEvent(target: EventTarget, extendedEvent: ExtendedEventType, implementation: ExtendedEventImplementation): void {\n        const existingEvents = EventManager.getExtendedEvent(target) || {} as ExtendedEventInstance;\n        EventManager.instance.extendedEventInstance.set(target, {...existingEvents, [extendedEvent]: implementation});\n    }\n\n    private static hasExtendedEventImplementation(target: EventTarget, extendedEvent: ExtendedEventType): boolean {\n        return !!EventManager.getExtendedEvent(target)?.[extendedEvent];\n    }\n\n    private static removeExtendedEvent(target: EventTarget, extendedEvent: ExtendedEventType, options?: AddEventListenerOptionsOrBoolean): void {\n        const extendedInstance = EventManager.getExtendedEvent(target);\n\n        if (extendedInstance) {\n            const implementation = extendedInstance[extendedEvent];\n            if (implementation) {\n                for (const type in implementation) {\n                    const callbacks = implementation[type as keyof ExtendedEventImplementation | 'callback'];\n                    if (callbacks instanceof Array) {\n                        for (const callback of callbacks) {\n                            EventManager.removeEventListener(target, type, callback, options);\n                        }\n                    } else if (typeof callbacks === 'function') {\n                        callbacks();\n                    }\n                }\n            }\n            delete extendedInstance[extendedEvent];\n\n            if (Object.keys(extendedInstance).length === 0) {\n                EventManager.instance.extendedEventInstance.delete(target);\n            }\n        }\n    }\n\n    private static addMouseLongpressEvent(target: EventTarget): void {\n        if (!EventManager.hasExtendedEventImplementation(target, 'mouselongpress')) {\n            let mouseDownPosition: EventPosition | undefined;\n            let timeout: NodeJS.Timeout | string | number | undefined;\n            let isMouseDown = false;\n\n            const clear = () => {\n                EventManager.removeEventListener(target, 'mousemove', onMouseMove);\n                EventManager.removeEventListener(target, 'mouseup', onMouseUp);\n                EventManager.removeEventListener(target, 'mouseleave', onMouseLeave);\n                if (timeout) clearTimeout(timeout);\n            };\n\n            const onMouseDown = (event: Event) => {\n                isMouseDown = true;\n                mouseDownPosition = EventPosition.fromMouseEvent(event);\n                clear();\n                EventManager.addEventListener(target, 'mousemove', onMouseMove, {passive: false});\n\n                timeout = setTimeout(() => {\n                    EventManager.dispatchEvent(target, new ExtendedMouseEvent('mouselongpressstart', event));\n                    EventManager.removeEventListener(target, 'mouseup', clear);\n                    EventManager.removeEventListener(target, 'mouseleave', clear);\n                    EventManager.addEventListener(target, 'mouseup', onMouseUp, {passive: false});\n                    EventManager.addEventListener(target, 'mouseleave', onMouseLeave, {passive: false});\n                }, EventManager.options.mouseLongpressTimeRequired);\n            };\n\n            const onMouseUp = (event: Event) => {\n                if (mouseDownPosition) {\n                    EventManager.dispatchEvent(target, new ExtendedMouseEvent('mouselongpressend', event, [new EventPath(mouseDownPosition, EventPosition.fromMouseEvent(event))]));\n                }\n                clear();\n            };\n\n            const onMouseLeave = (event: Event) => {\n                if (mouseDownPosition) {\n                    EventManager.dispatchEvent(target, new ExtendedMouseEvent('mouselongpressleave', event, [new EventPath(mouseDownPosition, EventPosition.fromMouseEvent(event))]));\n                }\n                clear();\n            };\n\n            const setMouseDownState = () => {\n                isMouseDown = false;\n            };\n\n            const onMouseMove = (event: Event) => {\n                if (!isMouseDown) {\n                    clear();\n                    return;\n                }\n\n                if (mouseDownPosition) {\n                    const mouseMovePosition = EventPosition.fromMouseEvent(event);\n\n                    if (mouseDownPosition.timeDiff(mouseMovePosition) < EventManager.options.mouseLongpressTimeRequired && mouseDownPosition.distance(mouseMovePosition) > EventManager.options.mouseLongpressBelowDistance) {\n                        clear();\n                    } else if (mouseDownPosition.timeDiff(mouseMovePosition) >= EventManager.options.mouseLongpressTimeRequired) {\n                        if (EventManager.options.strict) {\n                            EventManager.dispatchEvent(target, new ExtendedMouseEvent('mouselongpressmove', event, [new EventPath(mouseDownPosition!, mouseMovePosition)]));\n                        } else {\n                            scheduler.scheduleTask(() => {\n                                if (isMouseDown) {\n                                    EventManager.dispatchEvent(target, new ExtendedMouseEvent('mouselongpressmove', event, [new EventPath(mouseDownPosition!, mouseMovePosition)]));\n                                }\n                            });\n                        }\n                    }\n                }\n            };\n\n            EventManager.addEventListener(target, 'mousedown', onMouseDown, {passive: false});\n            EventManager.addEventListener(target, 'mouseup', clear, {passive: false});\n            EventManager.addEventListener(target, 'mouseleave', clear, {passive: false});\n            EventManager.addEventListener(target, 'mouseup', setMouseDownState, {passive: false});\n            EventManager.addEventListener(target, 'mouseleave', setMouseDownState, {passive: false});\n\n            EventManager.addExtendedEvent(target, 'mouselongpress', {\n                'mousedown': [onMouseDown],\n                'mouseup': [onMouseUp, setMouseDownState, clear],\n                'mouseleave': [onMouseUp, setMouseDownState, clear],\n                'mousemove': [onMouseMove]\n            });\n        }\n    }\n\n    private static addMousePanEvent(target: EventTarget): void {\n        if (!EventManager.hasExtendedEventImplementation(target, 'mousepan')) {\n            let mouseDownPosition: EventPosition | undefined;\n            let previousPosition: EventPosition | undefined;\n            let mousepanPath: EventPath[] = [];\n            let isGestureActive = false;\n            let isMouseDown = false;\n\n            const clear = () => {\n                mousepanPath = [];\n                isGestureActive = false;\n                EventManager.removeEventListener(target, 'mousemove', onMouseMove);\n                EventManager.removeEventListener(target, 'mouseup', onMouseUp);\n                EventManager.removeEventListener(target, 'mouseleave', onMouseLeave);\n            };\n\n            const onMouseDown = (event: Event) => {\n                isMouseDown = true;\n                mouseDownPosition = EventPosition.fromMouseEvent(event);\n                previousPosition = mouseDownPosition;\n                clear();\n                EventManager.addEventListener(target, 'mousemove', onMouseMove, {passive: false});\n                EventManager.addEventListener(target, 'mouseup', onMouseUp, {passive: false});\n                EventManager.addEventListener(target, 'mouseleave', onMouseLeave, {passive: false});\n            };\n\n            const onMouseUp = (event: Event) => {\n                if (isGestureActive && mouseDownPosition) {\n                    parseDirection(event);\n                    EventManager.dispatchEvent(target, new ExtendedMouseEvent('mousepanend', event, [new EventPath(mouseDownPosition, EventPosition.fromMouseEvent(event))]));\n                }\n                clear();\n            };\n\n            const onMouseLeave = (event: Event) => {\n                if (isGestureActive && mouseDownPosition) {\n                    parseDirection(event);\n                    EventManager.dispatchEvent(target, new ExtendedMouseEvent('mousepanleave', event, [new EventPath(mouseDownPosition, EventPosition.fromMouseEvent(event))]));\n                }\n                clear();\n            };\n\n            const setMouseDownState = () => {\n                isMouseDown = false;\n            };\n\n            const parseDirection = (event: Event) => {\n                if (mouseDownPosition) {\n                    let newMousepanPath = [];\n                    let position;\n                    for (const path of mousepanPath) {\n                        if (!position) {\n                            position = path.start;\n                        }\n\n                        const newPath = new EventPath(position, path.end);\n                        if (newPath.distance >= 25) {\n                            newMousepanPath.push(newPath);\n                            position = null;\n                        }\n                    }\n\n                    const directions = new Set(newMousepanPath.map(path => Direction.get4Direction(path.degree)));\n\n                    if (directions.size === 1) {\n                        let type;\n\n                        if (directions.has(0)) {\n                            type = 'mousepanup';\n                        } else if (directions.has(2)) {\n                            type = 'mousepanright';\n                        } else if (directions.has(4)) {\n                            type = 'mousepandown';\n                        } else if (directions.has(6)) {\n                            type = 'mousepanleft';\n                        }\n\n                        if (type) {\n                            EventManager.dispatchEvent(target, new ExtendedMouseEvent(type, event, newMousepanPath));\n                        }\n                    }\n                }\n            };\n\n            const onMouseMove = (event: Event) => {\n                if (previousPosition && mouseDownPosition) {\n\n                    const mouseMovePosition = EventPosition.fromMouseEvent(event);\n                    const path = new EventPath(previousPosition, mouseMovePosition);\n                    const length = mousepanPath.length;\n\n                    previousPosition = mouseMovePosition;\n\n                    if (length === 0 && path.distance > 0) {\n                        EventManager.dispatchEvent(target, new ExtendedMouseEvent('mousepanstart', event, mousepanPath));\n                    }\n\n                    if (path.distance > 0) {\n                        isGestureActive = true;\n                        mousepanPath.push(path);\n\n                        if (EventManager.options.strict) {\n                            EventManager.dispatchEvent(target, new ExtendedMouseEvent('mousepanmove', event, mousepanPath));\n                        } else {\n                            scheduler.scheduleTask(() => {\n                                if (isMouseDown) {\n                                    EventManager.dispatchEvent(target, new ExtendedMouseEvent('mousepanmove', event, mousepanPath));\n                                }\n                            });\n                        }\n                    }\n                }\n            };\n\n            EventManager.addEventListener(target, 'mousedown', onMouseDown, {passive: false});\n            EventManager.addEventListener(target, 'mouseup', setMouseDownState, {passive: false});\n            EventManager.addEventListener(target, 'mouseleave', setMouseDownState, {passive: false});\n\n            EventManager.addExtendedEvent(target, 'mousepan', {\n                'mousedown': [onMouseDown],\n                'mouseup': [onMouseUp, setMouseDownState],\n                'mouseleave': [onMouseLeave, setMouseDownState],\n                'mousemove': [onMouseMove]\n            });\n        }\n    }\n\n    private static addTouchLongpressEvent(target: EventTarget): void {\n        if (!EventManager.hasExtendedEventImplementation(target, 'touchlongpress')) {\n            let touchStartPosition: EventPosition | undefined;\n            let previousPosition: EventPosition | undefined;\n            let timeout: NodeJS.Timeout | string | number | undefined;\n            let isGestureActive = false;\n            let isTouchDown = false;\n\n            const clear = () => {\n                isGestureActive = false;\n                EventManager.removeEventListener(target, 'touchmove', onTouchMove);\n                EventManager.removeEventListener(target, 'touchend', onTouchEnd);\n                EventManager.removeEventListener(target, 'touchcancel', onTouchCancel);\n                if (timeout) clearTimeout(timeout);\n            };\n\n            const onTouchStart = (event: Event) => {\n                if (event instanceof TouchEvent && event.touches.length === 1) {\n                    DefaultGesturePreventer.activePreventDefaultSelectGesture().then(() => {\n                        isTouchDown = true;\n                        touchStartPosition = EventPosition.fromTouchEvent(event, 0);\n                        previousPosition = touchStartPosition;\n                        clear();\n                        EventManager.addEventListener(target, 'touchmove', onTouchMove, {passive: false});\n\n                        timeout = setTimeout(() => {\n                            if (isTouchDown) {\n                                isGestureActive = true;\n                                EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchlongpressstart', event));\n                                EventManager.removeEventListener(target, 'touchend', clear);\n                                EventManager.removeEventListener(target, 'touchcancel', clear);\n                                EventManager.addEventListener(target, 'touchend', onTouchEnd, {passive: false});\n                                EventManager.addEventListener(target, 'touchcancel', onTouchCancel, {passive: false});\n                            }\n                        }, EventManager.options.touchLongpressTimeRequired);\n                    });\n                } else if (isGestureActive) {\n                    onTouchCancel(event);\n                } else {\n                    clear();\n                }\n            };\n\n            const onTouchEnd = (event: Event) => {\n                if (touchStartPosition && previousPosition) {\n                    EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchlongpressend', event, [new EventPath(touchStartPosition, previousPosition)]));\n                }\n                clear();\n            };\n\n            const onTouchCancel = (event: Event) => {\n                if (touchStartPosition && previousPosition) {\n                    EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchlongpresscancel', event, [new EventPath(touchStartPosition, previousPosition)]));\n                }\n                clear();\n            };\n\n            const setTouchDownState = () => {\n                isTouchDown = false;\n                DefaultGesturePreventer.inactivePreventDefaultSelectGesture();\n            };\n\n            const onTouchMove = (event: Event) => {\n                if (event instanceof TouchEvent && event.touches.length === 1) {\n                    if (!isTouchDown) {\n                        clear();\n                        return;\n                    }\n\n                    if (touchStartPosition) {\n                        const touchMovePosition = EventPosition.fromTouchEvent(event, 0);\n\n                        if (touchStartPosition.timeDiff(touchMovePosition) < EventManager.options.touchLongpressTimeRequired && touchStartPosition.distance(touchMovePosition) > EventManager.options.touchLongpressBelowDistance) {\n                            clear();\n                        } else if (touchStartPosition.timeDiff(touchMovePosition) >= EventManager.options.touchLongpressTimeRequired && previousPosition) {\n                            const touchMovePosition = EventPosition.fromTouchEvent(event, 0);\n                            const path = new EventPath(previousPosition, touchMovePosition);\n\n                            if (path.distance > 0) {\n                                if (EventManager.options.strict) {\n                                    EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchlongpressmove', event, [new EventPath(touchStartPosition!, touchMovePosition)]));\n                                } else {\n                                    scheduler.scheduleTask(() => {\n                                        if (isTouchDown) {\n                                            EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchlongpressmove', event, [new EventPath(touchStartPosition!, touchMovePosition)]));\n                                        }\n                                    });\n                                }\n                            }\n                        }\n\n                        previousPosition = touchMovePosition;\n                    }\n                }\n            };\n\n            const preventDefault = (event: Event) => {\n                if (!('cancelable' in event) || event.cancelable) {\n                    event.preventDefault();\n                }\n            }\n\n            EventManager.addEventListener(target, 'contextmenu', preventDefault, {passive: false});\n            EventManager.addEventListener(target, 'touchstart', onTouchStart, {passive: false});\n            EventManager.addEventListener(target, 'touchend', clear, {passive: false});\n            EventManager.addEventListener(target, 'touchcancel', clear, {passive: false});\n            EventManager.addEventListener(target, 'touchend', setTouchDownState, {passive: false});\n            EventManager.addEventListener(target, 'touchcancel', setTouchDownState, {passive: false});\n\n            EventManager.addExtendedEvent(target, 'touchlongpress', {\n                'contextmenu': [preventDefault],\n                'touchstart': [onTouchStart],\n                'touchend': [onTouchEnd, setTouchDownState, clear],\n                'touchcancel': [onTouchCancel, setTouchDownState, clear],\n                'touchmove': [onTouchMove]\n            });\n        }\n    }\n\n    private static addTouchPanEvent(target: EventTarget): void {\n        if (!EventManager.hasExtendedEventImplementation(target, 'touchpan')) {\n            let touchStartPosition: EventPosition | undefined;\n            let previousPosition: EventPosition | undefined;\n            let touchpanPath: EventPath[] = [];\n            let isGestureActive = false;\n            let isTouchDown = false;\n\n            const clear = () => {\n                touchpanPath = [];\n                isGestureActive = false;\n                EventManager.removeEventListener(target, 'touchmove', onTouchMove);\n                EventManager.removeEventListener(target, 'touchend', onTouchEnd);\n                EventManager.removeEventListener(target, 'touchcancel', onTouchCancel);\n            };\n\n            const onTouchStart = (event: Event) => {\n                if (event instanceof TouchEvent && event.touches.length === 1) {\n                    DefaultGesturePreventer.activePreventDefaultPanGesture().then();\n                    isTouchDown = true;\n                    touchStartPosition = EventPosition.fromTouchEvent(event, 0);\n                    previousPosition = touchStartPosition;\n                    clear();\n                    EventManager.addEventListener(target, 'touchmove', onTouchMove, {passive: false});\n                    EventManager.addEventListener(target, 'touchend', onTouchEnd, {passive: false});\n                    EventManager.addEventListener(target, 'touchcancel', onTouchCancel, {passive: false});\n                } else if (isGestureActive) {\n                    onTouchCancel(event);\n                }\n            };\n\n            const onTouchEnd = (event: Event) => {\n                if (isGestureActive && touchStartPosition && previousPosition) {\n                    parseDirection(event);\n                    EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchpanend', event, [new EventPath(touchStartPosition, previousPosition)]));\n                }\n                clear();\n            };\n\n            const onTouchCancel = (event: Event) => {\n                if (isGestureActive && touchStartPosition && previousPosition) {\n                    EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchpancancel', event, [new EventPath(touchStartPosition, previousPosition)]));\n                }\n                clear();\n            };\n\n            const setTouchDownState = () => {\n                isTouchDown = false;\n                DefaultGesturePreventer.inactivePreventDefaultPanGesture();\n            };\n\n            const parseDirection = (event: Event) => {\n                if (touchStartPosition) {\n                    let newTouchpanPath = [];\n                    let position;\n                    for (const path of touchpanPath) {\n                        if (!position) {\n                            position = path.start;\n                        }\n\n                        const newPath = new EventPath(position, path.end);\n                        if (newPath.distance >= 25) {\n                            newTouchpanPath.push(newPath);\n                            position = null;\n                        }\n                    }\n\n                    const directions = new Set(newTouchpanPath.map(path => Direction.get4Direction(path.degree)));\n\n                    if (directions.size === 1) {\n                        let type;\n\n                        if (directions.has(0)) {\n                            type = 'touchpanup';\n                        } else if (directions.has(2)) {\n                            type = 'touchpanright';\n                        } else if (directions.has(4)) {\n                            type = 'touchpandown';\n                        } else if (directions.has(6)) {\n                            type = 'touchpanleft';\n                        }\n\n                        if (type) {\n                            EventManager.dispatchEvent(target, new ExtendedMouseEvent(type, event, newTouchpanPath));\n                        }\n                    }\n                }\n            };\n\n            const onTouchMove = (event: Event) => {\n                if (event instanceof TouchEvent && event.touches.length === 1) {\n                    if (previousPosition && touchStartPosition) {\n                        const touchMovePosition = EventPosition.fromTouchEvent(event, 0);\n                        const path = new EventPath(previousPosition, touchMovePosition);\n                        const length = touchpanPath.length;\n\n                        previousPosition = touchMovePosition;\n\n                        if (length === 0 && path.distance > 0) {\n                            EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchpanstart', event, touchpanPath));\n                        }\n\n                        if (path.distance > 0) {\n                            isGestureActive = true;\n                            touchpanPath.push(path);\n\n                            if (EventManager.options.strict) {\n                                EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchpanmove', event, touchpanPath));\n                            } else {\n                                scheduler.scheduleTask(() => {\n                                    if (isTouchDown) {\n                                        EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchpanmove', event, touchpanPath));\n                                    }\n                                });\n                            }\n                        }\n                    }\n                }\n            };\n\n            const preventDefault = (event: Event) => {\n                if (!('cancelable' in event) || event.cancelable) {\n                    event.preventDefault();\n                }\n            }\n\n            EventManager.addEventListener(target, 'contextmenu', preventDefault, {passive: false});\n            EventManager.addEventListener(target, 'touchstart', onTouchStart, {passive: false});\n            EventManager.addEventListener(target, 'touchend', setTouchDownState, {passive: false});\n            EventManager.addEventListener(target, 'touchcancel', setTouchDownState, {passive: false});\n\n            EventManager.addExtendedEvent(target, 'touchpan', {\n                'contextmenu': [preventDefault],\n                'touchstart': [onTouchStart],\n                'touchend': [onTouchEnd, setTouchDownState],\n                'touchcancel': [onTouchCancel, setTouchDownState],\n                'touchmove': [onTouchMove]\n            });\n        }\n    }\n\n    private static addTouchPinchEvent(target: EventTarget): void {\n        if (!EventManager.hasExtendedEventImplementation(target, 'touchpinch')) {\n            let touchStartPosition: EventPosition[] = [];\n            let touchStartPath: EventPath | undefined;\n            let previousPosition: EventPosition[] = [];\n            let touchpinchPath: EventPath[] = [];\n            let isGestureActive = false;\n            let isTouchDown = false;\n\n            const clear = () => {\n                touchStartPosition = [];\n                previousPosition = [];\n                touchpinchPath = [];\n                isGestureActive = false;\n                EventManager.removeEventListener(target, 'touchmove', onTouchMove);\n                EventManager.removeEventListener(target, 'touchend', onTouchEnd);\n                EventManager.removeEventListener(target, 'touchcancel', onTouchCancel);\n                DefaultGesturePreventer.inactivePreventDefaultPinchGesture();\n            };\n\n            const onTouchStart = (event: Event) => {\n                if (event instanceof TouchEvent && event.touches.length > 1) {\n                    DefaultGesturePreventer.activePreventDefaultPinchGesture().then();\n\n                    const touchLength = event.touches.length;\n\n                    isTouchDown = true;\n                    clear();\n\n                    for (let i = 0; i < touchLength; i++) {\n                        touchStartPosition.push(EventPosition.fromTouchEvent(event, i));\n                    }\n                    previousPosition = touchStartPosition;\n                    touchStartPath = new EventPath(touchStartPosition[0], touchStartPosition[1]);\n                    EventManager.addEventListener(target, 'touchmove', onTouchMove, {passive: false});\n                    EventManager.addEventListener(target, 'touchend', onTouchEnd, {passive: false});\n                    EventManager.addEventListener(target, 'touchcancel', onTouchCancel, {passive: false});\n                }\n            };\n\n            const onTouchEnd = (event: Event) => {\n                if (isGestureActive && touchStartPosition && previousPosition) {\n                    EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchpinchend', event, [new EventPath(EventPosition.center(touchStartPosition[0], touchStartPosition[1]), EventPosition.center(previousPosition[0], previousPosition[1]))]));\n                }\n                clear();\n            };\n\n            const onTouchCancel = (event: Event) => {\n                if (isGestureActive && touchStartPosition && previousPosition) {\n                    EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchpinchcancel', event, [new EventPath(EventPosition.center(touchStartPosition[0], touchStartPosition[1]), EventPosition.center(previousPosition[0], previousPosition[1]))]));\n                }\n                clear();\n            };\n\n            const setTouchDownState = () => {\n                isTouchDown = false;\n                DefaultGesturePreventer.inactivePreventDefaultPinchGesture();\n            };\n\n            const onTouchMove = (event: Event) => {\n                if (previousPosition.length > 1 && touchStartPosition.length > 1 && touchStartPath && event instanceof TouchEvent && event.touches.length > 1) {\n                    const touchLength = event.touches.length;\n                    const touchMovePosition = [];\n                    const paths = [];\n                    const length = touchpinchPath.length;\n\n                    for (let i = 0; i < touchLength; i++) {\n                        const position = EventPosition.fromTouchEvent(event, i);\n                        touchMovePosition.push(position);\n                        paths.push(new EventPath(position, touchMovePosition[i]));\n                    }\n\n                    const path = new EventPath(touchMovePosition[0], touchMovePosition[1]);\n\n                    previousPosition = touchMovePosition;\n\n                    if (length === 0 && !touchStartPath.equals(path)) {\n                        EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchpinchstart', event, touchpinchPath));\n                    }\n\n                    if (!(length === 0 && touchStartPath.equals(path)) && !(length > 0 && touchpinchPath[length - 1].equals(path))) {\n                        isGestureActive = true;\n                        touchpinchPath.push(path);\n\n                        if (EventManager.options.strict) {\n                            EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchpinchmove', event, touchpinchPath));\n                        } else {\n                            scheduler.scheduleTask(() => {\n                                if (isTouchDown) {\n                                    EventManager.dispatchEvent(target, new ExtendedTouchEvent('touchpinchmove', event, touchpinchPath));\n                                }\n                            });\n                        }\n                    }\n                }\n            };\n\n            const preventDefault = (event: Event) => {\n                if (!('cancelable' in event) || event.cancelable) {\n                    event.preventDefault();\n                }\n            }\n\n            EventManager.addEventListener(target, 'contextmenu', preventDefault, {passive: false});\n            EventManager.addEventListener(target, 'touchstart', onTouchStart, {passive: false});\n            EventManager.addEventListener(target, 'touchend', setTouchDownState, {passive: false});\n            EventManager.addEventListener(target, 'touchcancel', setTouchDownState, {passive: false});\n\n            EventManager.addExtendedEvent(target, 'touchpinch', {\n                'contextmenu': [preventDefault],\n                'touchstart': [onTouchStart],\n                'touchend': [onTouchEnd, setTouchDownState],\n                'touchcancel': [onTouchCancel, setTouchDownState],\n                'touchmove': [onTouchMove]\n            });\n        }\n    }\n\n    private static addAppearanceChange(target: EventTarget): void {\n        const matchPrefersColorSchemeDark = matchMedia('(prefers-color-scheme: dark)');\n\n        const getAppearance = (event: any) => {\n            if (event.matches) {\n                return Appearance.Dark;\n            }\n\n            return Appearance.Light;\n        }\n\n        const onChange = (event: Event) => {\n            EventManager.dispatchEvent(target, new ExtendedUIEvent('appearancechange', event, {appearance: getAppearance(event)}));\n        }\n\n        matchPrefersColorSchemeDark.addEventListener('change', onChange, {passive: false});\n\n        if (EventManager.options.callWhenAddedUIEvent) {\n            EventManager.dispatchEvent(target, new ExtendedUIEvent('appearancechange', new MediaQueryListEvent('change'), {appearance: getAppearance(matchPrefersColorSchemeDark)}));\n        }\n\n        EventManager.addExtendedEvent(matchPrefersColorSchemeDark, 'appearancechange', {\n            'change': [onChange]\n        });\n    }\n\n    private static addOrientationChange(target: EventTarget): void {\n        const matchOrientationPortrait = matchMedia('(orientation: portrait)');\n\n        const getOrientation = (event: any) => {\n            if (event.matches) {\n                return Orientation.Portrait;\n            }\n\n            return Orientation.Landscape;\n        }\n\n        const onChange = (event: any) => {\n            EventManager.dispatchEvent(target, new ExtendedUIEvent('orientationchange', event, {orientation: getOrientation(event)}));\n        }\n\n        matchOrientationPortrait.addEventListener('change', onChange, {passive: false});\n\n        if (EventManager.options.callWhenAddedUIEvent) {\n            EventManager.dispatchEvent(target, new ExtendedUIEvent('appearancechange', new MediaQueryListEvent('change'), {appearance: getOrientation(matchOrientationPortrait)}));\n        }\n\n        EventManager.addExtendedEvent(matchOrientationPortrait, 'orientationchange', {\n            'change': [onChange]\n        });\n    }\n\n    private static addResize(target: EventTarget): void {\n        if (target === window || !('ResizeObserver' in window)) return;\n\n        const element = target as Element;\n        const onResize = (element: Element) => {\n            const dispatchEvent = () => EventManager.dispatchEvent(target, new ExtendedUIEvent('resize', new Event('resize'), {size: new Size(element)}));\n\n            if (EventManager.options.strict) {\n                dispatchEvent();\n            } else {\n                scheduler.scheduleTask(dispatchEvent);\n            }\n        }\n\n        let connect = false;\n        let observer: ResizeObserver;\n\n        if (EventManager.resizeObserver) {\n            observer = EventManager.resizeObserver;\n        } else {\n            observer = new ResizeObserver(() => {\n                if (connect || EventManager.options.callWhenAddedUIEvent) {\n                    onResize(element);\n                }\n                connect = true;\n            });\n\n            EventManager.resizeObserver = observer;\n        }\n\n        observer.observe(element);\n\n        EventManager.addExtendedEvent(target, 'resize', {\n            'callback': () => observer.unobserve(element)\n        });\n    }\n\n    private static addIntersection(target: EventTarget): void {\n        if (target === window || !('IntersectionObserver' in window)) return;\n\n        const element = target as Element;\n        const onIntersection = (entry: IntersectionObserverEntry) => {\n            const dispatchEvent = () => EventManager.dispatchEvent(target, new ExtendedUIEvent('intersectionchange', new Event('intersectionchange'), {size: new Size(entry.intersectionRect), ration: entry.intersectionRatio}));\n\n            if (EventManager.options.strict) {\n                dispatchEvent();\n            } else {\n                scheduler.scheduleTask(dispatchEvent);\n            }\n        }\n\n        let connect = false;\n        let observer: IntersectionObserver;\n\n        if (EventManager.intersectionObserver) {\n            observer = EventManager.intersectionObserver;\n        } else {\n            observer = new IntersectionObserver(entries => {\n                if (connect || EventManager.options.callWhenAddedUIEvent) {\n                    if (entries.length > 0) {\n                        const entry = entries[0];\n                        onIntersection(entry);\n                    }\n                }\n                connect = true;\n            }, {\n                threshold: Array.from({length: 1001}, (_, i) => i / 1000)\n            });\n\n            EventManager.intersectionObserver = observer;\n        }\n\n        observer.observe(element);\n\n        EventManager.addExtendedEvent(target, 'intersection', {\n            'callback': () => {\n                observer.unobserve(element);\n            }\n        });\n    }\n\n    private static toArray<T>(input: T | T[]): T[] {\n        return Array.isArray(input) ? input : [input];\n    }\n}\n\n(() => {\n    GlobalThis.ExtendedMouseEvent = ExtendedMouseEvent;\n    GlobalThis.ExtendedTouchEvent = ExtendedTouchEvent;\n    GlobalThis.ExtendedUIEvent = ExtendedUIEvent;\n    GlobalThis.EventManager = EventManager;\n    GlobalThis.EventPath = EventPath;\n    GlobalThis.EventPathList = EventPathList;\n    GlobalThis.EventPosition = EventPosition;\n    GlobalThis.Direction = Direction;\n    GlobalThis.Appearance = Appearance;\n    GlobalThis.Orientation = Orientation;\n    GlobalThis.Size = Size;\n\n    EventTarget.prototype.on = function (types: EventHandlersEventMaps, callback: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean) {\n        EventManager.on(this, types, callback, options);\n    };\n\n    EventTarget.prototype.off = function (types?: EventHandlersEventMaps, callback?: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean) {\n        EventManager.off(this, types, callback, options);\n    };\n})();\n\ndeclare global {\n    interface Window {\n        EventManager: EventManager;\n        ExtendedMouseEvent: ExtendedMouseEvent;\n        ExtendedTouchEvent: ExtendedTouchEvent;\n        ExtendedUIEvent: ExtendedUIEvent<Extract<string, keyof UIEvent>, ExtendedUIEventProperty>;\n        EventPosition: EventPosition;\n        EventPath: EventPath;\n        EventPathList: EventPathList;\n        Direction: Direction;\n        Appearance: Appearance;\n        Orientation: Orientation;\n        Size: Size;\n    }\n\n    interface EventTarget {\n        on: (types: EventHandlersEventMaps, callback: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean) => void;\n        off: (types?: EventHandlersEventMaps, callback?: EventListenerOrEventListenerObject, options?: AddEventListenerOptionsOrBoolean) => void;\n    }\n}"],
  "mappings": "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",
  "names": ["src_exports", "__export", "CylinderPickerEvent", "HTMLCylinderPicker", "__toCommonJS", "package_default", "GlobalThis", "GlobalThis", "EventType", "_EventType", "strings", "vendor", "string", "s", "target", "type", "types", "TaskScheduler", "delayThreshold", "now", "start", "lastTime", "callback", "currentTime", "timeToCall", "id", "task", "EventListenerRegister", "_EventListenerRegister", "options", "event", "empty", "DefaultGesturePreventer", "_DefaultGesturePreventer", "resolve", "metas", "meta", "content", "contentMap", "style", "kv", "prev", "curr", "key", "EventListenerMap", "optionsObject", "callbackObject", "callbackFunction", "isPassiveSupported", "isOnceSupported", "newCallbackFunction", "polyfill_default", "TouchEvent", "init", "hasOwnProperty", "hasDefine", "defineProperty", "object", "name", "value", "WeakMap", "genId", "checkInstance", "isObject", "entry", "x", "methodName", "prefix", "rand", "media", "styleMedia", "info", "text", "package_default", "extendedMouseEventMap", "extendedTouchEventMap", "extendedUIEventMap", "extendedEventMap", "Direction", "_Direction", "degree", "EventPosition", "_EventPosition", "args", "arg0", "arg1", "n", "y", "p1", "p2", "to", "dx", "dy", "EventPath", "other", "EventPathList", "paths", "index", "property", "item1", "item2", "value1", "value2", "Appearance", "Orientation", "Size", "CloneEventInit", "ExtendedMouseEvent", "ExtendedTouchEvent", "ExtendedUIEvent", "scheduler", "EventManager", "_EventManager", "listenerEventMap", "keys", "comparator", "fns", "listeners", "fn", "extendedEventKey", "removeExtendedEvent", "loop", "newCallback", "newMap", "extendedEvent", "implementation", "existingEvents", "extendedInstance", "callbacks", "mouseDownPosition", "timeout", "isMouseDown", "clear", "onMouseMove", "onMouseUp", "onMouseLeave", "onMouseDown", "setMouseDownState", "mouseMovePosition", "previousPosition", "mousepanPath", "isGestureActive", "parseDirection", "newMousepanPath", "position", "path", "newPath", "directions", "length", "touchStartPosition", "isTouchDown", "onTouchMove", "onTouchEnd", "onTouchCancel", "onTouchStart", "setTouchDownState", "touchMovePosition", "preventDefault", "touchpanPath", "newTouchpanPath", "touchStartPath", "touchpinchPath", "touchLength", "i", "matchPrefersColorSchemeDark", "getAppearance", "onChange", "matchOrientationPortrait", "getOrientation", "element", "onResize", "dispatchEvent", "connect", "observer", "onIntersection", "entries", "_", "input", "CylinderPickerEvent", "liElements", "value", "HTMLCylinderPicker", "_HTMLCylinderPicker", "package_default", "values", "html", "qualifiedName", "defaultValue", "mutations", "record", "calculateCurvature", "nth", "calculateOpacity", "curvature", "calculateRotateX", "calculatePaddingLeft", "visible", "i", "nextPadding", "_", "j", "e", "li", "sheets", "before", "styles", "rules", "rule", "content", "string", "split", "key", "important", "current", "previous", "entry", "onClickChild", "element", "currentTarget", "children", "selectedIndex", "child", "currentIndex", "cloned", "resolve", "onDocumentReadyStateComplete", "last", "first", "speed", "delta", "next", "reverse", "right", "force", "sign", "modded", "speedByDelta", "lastPanDy", "sumOfPanDy", "event", "g", "M", "nextByPanDy", "inertiaPan", "nextByWheelDy", "dy", "GlobalThis", "HTMLCylinderPicker"]
}
