{
  "version": 3,
  "sources": ["../src/index.ts", "../src/utils.ts", "../src/polyfill.ts", "../package.json", "../src/interfacecs.ts", "../src/geometry.ts", "../src/event.ts"],
  "sourcesContent": ["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}", "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.45\",\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}"],
  "mappings": "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",
  "names": ["src_exports", "__export", "Appearance", "Direction", "EventManager", "EventPath", "EventPathList", "EventPosition", "ExtendedMouseEvent", "ExtendedTouchEvent", "ExtendedUIEvent", "Orientation", "Size", "__toCommonJS", "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", "GlobalThis", "TouchEvent", "type", "init", "hasOwnProperty", "hasDefine", "defineProperty", "object", "name", "value", "WeakMap", "genId", "key", "checkInstance", "isObject", "entry", "x", "methodName", "prefix", "rand", "media", "styleMedia", "style", "info", "text", "package_default", "extendedMouseEventMap", "extendedTouchEventMap", "extendedUIEventMap", "extendedEventMap", "Direction", "_Direction", "degree", "EventPosition", "_EventPosition", "args", "arg0", "arg1", "event", "x", "y", "p1", "p2", "to", "dx", "dy", "EventPath", "other", "EventPathList", "paths", "n", "index", "property", "item1", "item2", "value1", "value2", "Appearance", "Orientation", "Size", "target", "CloneEventInit", "event", "ExtendedMouseEvent", "type", "paths", "EventPathList", "ExtendedTouchEvent", "ExtendedUIEvent", "property", "scheduler", "TaskScheduler", "EventManager", "_EventManager", "package_default", "target", "types", "callback", "options", "type", "EventType", "EventListenerRegister", "event", "extendedEventMap", "listenerEventMap", "keys", "key", "comparator", "fns", "listeners", "value", "fn", "extendedEventKey", "removeExtendedEvent", "loop", "newCallback", "newMap", "EventListenerMap", "extendedEvent", "implementation", "existingEvents", "extendedInstance", "callbacks", "mouseDownPosition", "timeout", "isMouseDown", "clear", "onMouseMove", "onMouseUp", "onMouseLeave", "onMouseDown", "EventPosition", "ExtendedMouseEvent", "EventPath", "setMouseDownState", "mouseMovePosition", "previousPosition", "mousepanPath", "isGestureActive", "parseDirection", "newMousepanPath", "position", "path", "newPath", "directions", "Direction", "length", "touchStartPosition", "isTouchDown", "onTouchMove", "onTouchEnd", "onTouchCancel", "onTouchStart", "DefaultGesturePreventer", "ExtendedTouchEvent", "setTouchDownState", "touchMovePosition", "preventDefault", "touchpanPath", "newTouchpanPath", "touchStartPath", "touchpinchPath", "touchLength", "i", "paths", "matchPrefersColorSchemeDark", "getAppearance", "Appearance", "onChange", "ExtendedUIEvent", "matchOrientationPortrait", "getOrientation", "Orientation", "element", "onResize", "dispatchEvent", "Size", "connect", "observer", "onIntersection", "entry", "entries", "_", "input", "GlobalThis", "EventPathList"]
}
