{
  "version": 3,
  "sources": ["../../../plugins/pointer/shared-events.js", "../../../plugins/pointer/touch.js", "../../../plugins/pointer/press.js", "../../../plugins/pointer/mouse.js", "../../../plugins/pointer/index.js"],
  "sourcesContent": ["/**\n * Shared event helper utilities for the Pointer plugin.\n */\n\n\"use strict\";\n\nexport function createEventHelpers( pluginApi ) {\n\t\n\tconst utils = pluginApi.utils;\n\t\n\tfunction onevent(\n\t\tmode, fn, once, hitBox, modes, name, listenerArr, extraId, extraData, customData\n\t) {\n\t\tlet modeFound = false;\n\t\t\n\t\tfor( let i = 0; i < modes.length; i++ ) {\n\t\t\tif( mode === modes[ i ] ) {\n\t\t\t\tmodeFound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif( !modeFound ) {\n\t\t\tconst error = new Error(\n\t\t\t\t`${name}: mode needs to be one of the following: ${modes.join( \", \" )}.`\n\t\t\t);\n\t\t\terror.code = \"INVALID_MODE\";\n\t\t\tthrow error;\n\t\t}\n\t\t\n\t\tonce = !!( once );\n\t\t\n\t\tif( typeof fn !== \"function\" ) {\n\t\t\tconst error = new Error( `${name}: fn is not a valid function.` );\n\t\t\terror.code = \"INVALID_FUNCTION\";\n\t\t\tthrow error;\n\t\t}\n\t\t\n\t\tif( hitBox ) {\n\t\t\tif(\n\t\t\t\t!Number.isInteger( hitBox.x ) ||\n\t\t\t\t!Number.isInteger( hitBox.y ) ||\n\t\t\t\t!Number.isInteger( hitBox.width ) ||\n\t\t\t\t!Number.isInteger( hitBox.height )\n\t\t\t) {\n\t\t\t\tconst error = new Error(\n\t\t\t\t\t`${name}: hitBox must have properties x, y, width, and height whose values ` +\n\t\t\t\t\t\"are integers.\"\n\t\t\t\t);\n\t\t\t\terror.code = \"INVALID_HITBOX\";\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\t\n\t\tsetTimeout( () => {\n\t\t\tconst originalFn = fn;\n\t\t\tlet newMode = mode;\n\t\t\t\n\t\t\tif( typeof extraId === \"string\" ) {\n\t\t\t\tnewMode = mode + extraId;\n\t\t\t}\n\t\t\t\n\t\t\tlet wrappedFn = fn;\n\t\t\tif( once ) {\n\t\t\t\twrappedFn = ( data, customData ) => {\n\t\t\t\t\toffevent( mode, originalFn, modes, name, listenerArr, extraId );\n\t\t\t\t\toriginalFn( data, customData );\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tif( !listenerArr[ newMode ] ) {\n\t\t\t\tlistenerArr[ newMode ] = [];\n\t\t\t}\n\t\t\t\n\t\t\tlistenerArr[ newMode ].push( {\n\t\t\t\t\"fn\": wrappedFn,\n\t\t\t\t\"hitBox\": hitBox,\n\t\t\t\t\"extraData\": extraData,\n\t\t\t\t\"clickDown\": false,\n\t\t\t\t\"originalFn\": originalFn,\n\t\t\t\t\"customData\": customData\n\t\t\t} );\n\t\t}, 1 );\n\t\t\n\t\treturn true;\n\t}\n\t\n\tfunction offevent( mode, fn, modes, name, listenerArr, extraId ) {\n\t\tlet modeFound = false;\n\t\t\n\t\tfor( let i = 0; i < modes.length; i++ ) {\n\t\t\tif( mode === modes[ i ] ) {\n\t\t\t\tmodeFound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif( !modeFound ) {\n\t\t\tconst error = new Error(\n\t\t\t\t`${name}: mode needs to be one of the following: ${modes.join( \", \" )}.`\n\t\t\t);\n\t\t\terror.code = \"INVALID_MODE\";\n\t\t\tthrow error;\n\t\t}\n\t\t\n\t\tif( typeof extraId === \"string\" ) {\n\t\t\tmode += extraId;\n\t\t}\n\t\t\n\t\tconst isClear = fn == null;\n\t\t\n\t\tif( !isClear && typeof fn !== \"function\" ) {\n\t\t\tconst error = new Error( `${name}: fn is not a valid function.` );\n\t\t\terror.code = \"INVALID_FUNCTION\";\n\t\t\tthrow error;\n\t\t}\n\t\t\n\t\tif( listenerArr[ mode ] ) {\n\t\t\tif( isClear ) {\n\t\t\t\tdelete listenerArr[ mode ];\n\t\t\t} else {\n\t\t\t\tfor( let i = listenerArr[ mode ].length - 1; i >= 0; i-- ) {\n\t\t\t\t\tif( listenerArr[ mode ][ i ].originalFn === fn ) {\n\t\t\t\t\t\tlistenerArr[ mode ].splice( i, 1 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif( listenerArr[ mode ].length === 0 ) {\n\t\t\t\t\tdelete listenerArr[ mode ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\tfunction triggerEventListeners( mode, data, listenerArr, clickStatus ) {\n\t\tif( !listenerArr[ mode ] ) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tconst temp = listenerArr[ mode ].slice();\n\t\t\n\t\tfor( let i = 0; i < temp.length; i++ ) {\n\t\t\tconst listener = temp[ i ];\n\t\t\t\n\t\t\tif( clickStatus === \"up\" && !listener.clickDown ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tif( listener.hitBox ) {\n\t\t\t\tlet isHit = false;\n\t\t\t\tlet newData;\n\t\t\t\t\n\t\t\t\tif( Array.isArray( data ) ) {\n\t\t\t\t\tnewData = [];\n\t\t\t\t\tfor( let j = 0; j < data.length; j++ ) {\n\t\t\t\t\t\tconst pos = data[ j ];\n\t\t\t\t\t\tif( utils.inRange( pos, listener.hitBox ) ) {\n\t\t\t\t\t\t\tnewData.push( pos );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif( newData.length > 0 ) {\n\t\t\t\t\t\tisHit = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnewData = data;\n\t\t\t\t\tif( utils.inRange( data, listener.hitBox ) ) {\n\t\t\t\t\t\tisHit = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( isHit ) {\n\t\t\t\t\tif( clickStatus === \"down\" ) {\n\t\t\t\t\t\tlistener.clickDown = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlistener.clickDown = false;\n\t\t\t\t\t\tlistener.fn( newData, listener.customData );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlistener.fn( data, listener.customData );\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn {\n\t\t\"onevent\": onevent,\n\t\t\"offevent\": offevent,\n\t\t\"triggerEventListeners\": triggerEventListeners\n\t};\n}\n\n\n", "/**\n * Touch registration for Pointer plugin.\n */\n\n\"use strict\";\n\nimport { triggerPressListeners, triggerClickListeners, getTouchPress } from \"./press.js\";\n\n// Module-level reference to startTouchInternal function\nlet m_startTouchInternal = null;\n\nexport function startTouchInternal( screenData ) {\n\tif( m_startTouchInternal ) {\n\t\tm_startTouchInternal( screenData );\n\t}\n}\n\nexport function registerTouch( pluginApi, helpers ) {\n\t\n\tconst m_onevent = helpers.onevent;\n\tconst m_offevent = helpers.offevent;\n\tconst m_triggerEventListeners = helpers.triggerEventListeners;\n\t\n\tpluginApi.addScreenDataItem( \"touchStopped\", false );\n\tpluginApi.addScreenDataItem( \"touchStarted\", false );\n\tpluginApi.addScreenDataItem( \"touches\", {} );\n\tpluginApi.addScreenDataItem( \"lastTouches\", {} );\n\tpluginApi.addScreenDataItem( \"touchEventListenersActive\", 0 );\n\tpluginApi.addScreenDataItem( \"onTouchEventListeners\", {} );\n\t\n\tpluginApi.addScreenInitFunction( initTouchData );\n\twindow.addEventListener( \"blur\", onWindowBlurTouch );\n\t\n\tpluginApi.addCommand( \"startTouch\", startTouch, true, [] );\n\tpluginApi.addCommand( \"stopTouch\", stopTouch, true, [] );\n\tpluginApi.addCommand( \"intouch\", intouch, true, [] );\n\tpluginApi.addCommand(\n\t\t\"ontouch\", ontouch, true, [ \"mode\", \"fn\", \"once\", \"hitBox\", \"customData\" ]\n\t);\n\tpluginApi.addCommand( \"offtouch\", offtouch, true, [ \"mode\", \"fn\" ] );\n\tpluginApi.addCommand( \"setPinchZoom\", setPinchZoom, false, [ \"isEnabled\" ] );\n\t\n\tfunction initTouchData( screenData ) {\n\t\tscreenData.onTouchEventListeners = {\n\t\t\t\"start\": [],\n\t\t\t\"end\": [],\n\t\t\t\"move\": []\n\t\t};\n\t}\n\t\n\tfunction startTouchInternal( screenData ) {\n\t\tif( !screenData.touchStopped ) {\n\t\t\tstartTouch( screenData );\n\t\t}\n\t}\n\t\n\t// Store reference for module-level export\n\tm_startTouchInternal = startTouchInternal;\n\n\tfunction startTouch( screenData ) {\n\n\t\t// Clear explicit touch stopped\n\t\tscreenData.touchStopped = false;\n\n\t\tif( !screenData.touchStarted ) {\n\t\t\tconst options = { \"passive\": false };\n\t\t\tscreenData.canvas.addEventListener( \"touchstart\", touchStart, options );\n\t\t\tscreenData.canvas.addEventListener( \"touchmove\", touchMove, options );\n\t\t\tscreenData.canvas.addEventListener( \"touchend\", touchEnd, options );\n\t\t\tscreenData.canvas.addEventListener( \"touchcancel\", touchEnd, options );\n\t\t\tscreenData.touchStarted = true;\n\t\t}\n\t}\n\t\n\tfunction stopTouch( screenData ) {\n\t\t\n\t\t//Clear explicit touchStopped\n\t\tscreenData.touchStopped = true;\n\n\t\tif( screenData.touchStarted ) {\n\t\t\tscreenData.canvas.removeEventListener( \"touchstart\", touchStart );\n\t\t\tscreenData.canvas.removeEventListener( \"touchmove\", touchMove );\n\t\t\tscreenData.canvas.removeEventListener( \"touchend\", touchEnd );\n\t\t\tscreenData.canvas.removeEventListener( \"touchcancel\", touchEnd );\n\t\t\tscreenData.touchStarted = false;\n\t\t}\n\t}\n\t\n\tfunction intouch( screenData ) {\n\t\tstartTouchInternal( screenData );\n\t\treturn getTouch( screenData );\n\t}\n\t\n\tfunction ontouch( screenData, options ) {\n\t\tconst mode = options.mode;\n\t\tconst fn = options.fn;\n\t\tconst once = options.once;\n\t\tconst hitBox = options.hitBox;\n\t\tconst customData = options.customData;\n\t\t\n\t\tconst isValid = m_onevent(\n\t\t\tmode, fn, once, hitBox, [ \"start\", \"end\", \"move\" ], \"ontouch\",\n\t\t\tscreenData.onTouchEventListeners, null, null, customData\n\t\t);\n\t\t\n\t\tif( isValid ) {\n\t\t\tstartTouchInternal( screenData );\n\t\t\tscreenData.touchEventListenersActive += 1;\n\t\t}\n\t}\n\t\n\tfunction offtouch( screenData, options ) {\n\t\tconst mode = options.mode;\n\t\tconst fn = options.fn;\n\t\t\n\t\tconst isValid = m_offevent(\n\t\t\tmode, fn, [ \"start\", \"end\", \"move\" ], \"offtouch\",\n\t\t\tscreenData.onTouchEventListeners\n\t\t);\n\t\t\n\t\tif( isValid ) {\n\t\t\tif( fn == null ) {\n\t\t\t\tscreenData.touchEventListenersActive = 0;\n\t\t\t} else {\n\t\t\t\tscreenData.touchEventListenersActive -= 1;\n\t\t\t\tif( screenData.touchEventListenersActive < 0 ) {\n\t\t\t\t\tscreenData.touchEventListenersActive = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction setPinchZoom( options ) {\n\t\tconst isEnabled = !!( options.isEnabled );\n\t\tif( isEnabled ) {\n\t\t\tdocument.body.style.touchAction = \"\";\n\t\t} else {\n\t\t\tdocument.body.style.touchAction = \"none\";\n\t\t}\n\t}\n\t\n\tfunction touchStart( e ) {\n\t\tconst screenData = getScreenDataFromEvent( e );\n\t\tif( screenData == null ) {\n\t\t\treturn;\n\t\t}\n\t\tupdateTouch( screenData, e, \"start\" );\n\t\tconst touchData = getTouch( screenData );\n\t\tif( screenData.touchEventListenersActive > 0 ) {\n\t\t\tm_triggerEventListeners( \"start\", touchData, screenData.onTouchEventListeners );\n\t\t}\n\t\ttriggerPressListeners( screenData, \"down\", getTouchPress( screenData ) );\n\t\te.preventDefault();\n\t\ttriggerClickListeners( screenData, getTouchPress( screenData ), \"down\" );\n\t}\n\t\n\tfunction touchMove( e ) {\n\t\tconst screenData = getScreenDataFromEvent( e );\n\t\tif( screenData == null ) {\n\t\t\treturn;\n\t\t}\n\t\tupdateTouch( screenData, e, \"move\" );\n\t\tconst touchData = getTouch( screenData );\n\t\tif( screenData.touchEventListenersActive > 0 ) {\n\t\t\tm_triggerEventListeners( \"move\", touchData, screenData.onTouchEventListeners );\n\t\t}\n\t\ttriggerPressListeners( screenData, \"move\", getTouchPress( screenData ) );\n\t}\n\t\n\tfunction touchEnd( e ) {\n\t\tconst screenData = getScreenDataFromEvent( e );\n\t\tif( screenData == null ) {\n\t\t\treturn;\n\t\t}\n\t\tupdateTouch( screenData, e, \"end\" );\n\t\tconst touchData = getTouch( screenData );\n\t\tif( screenData.touchEventListenersActive > 0 ) {\n\t\t\tm_triggerEventListeners( \"end\", touchData, screenData.onTouchEventListeners );\n\t\t}\n\t\ttriggerPressListeners( screenData, \"up\", getTouchPress( screenData ) );\n\t\ttriggerClickListeners( screenData, getTouchPress( screenData ), \"up\" );\n\t}\n\t\n\tfunction updateTouch( screenData, e, action ) {\n\t\tif( !screenData.clientRect ) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tconst newTouches = {};\n\t\tconst rect = screenData.clientRect;\n\t\t\n\t\tfor( let j = 0; j < e.touches.length; j++ ) {\n\t\t\tconst touch = e.touches[ j ];\n\t\t\tconst touchData = {};\n\t\t\ttouchData.x = Math.floor(\n\t\t\t\t( touch.clientX - rect.left ) / rect.width * screenData.width\n\t\t\t);\n\t\t\ttouchData.y = Math.floor(\n\t\t\t\t( touch.clientY - rect.top ) / rect.height * screenData.height\n\t\t\t);\n\t\t\ttouchData.id = touch.identifier;\n\t\t\tif( screenData.touches[ touchData.id ] ) {\n\t\t\t\ttouchData.lastX = screenData.touches[ touchData.id ].x;\n\t\t\t\ttouchData.lastY = screenData.touches[ touchData.id ].y;\n\t\t\t} else {\n\t\t\t\ttouchData.lastX = null;\n\t\t\t\ttouchData.lastY = null;\n\t\t\t}\n\t\t\ttouchData.action = action;\n\t\t\tnewTouches[ touchData.id ] = touchData;\n\t\t}\n\t\t\n\t\tscreenData.lastTouches = screenData.touches;\n\t\tscreenData.touches = newTouches;\n\t\tscreenData.lastEvent = \"touch\";\n\t}\n\t\n\tfunction getTouch( screenData ) {\n\t\tconst touchArr = [];\n\t\tfor( const i in screenData.touches ) {\n\t\t\tconst touch = screenData.touches[ i ];\n\t\t\tconst touchData = {\n\t\t\t\t\"x\": touch.x,\n\t\t\t\t\"y\": touch.y,\n\t\t\t\t\"id\": touch.id,\n\t\t\t\t\"lastX\": touch.lastX,\n\t\t\t\t\"lastY\": touch.lastY,\n\t\t\t\t\"action\": touch.action,\n\t\t\t\t\"type\": \"touch\"\n\t\t\t};\n\t\t\ttouchArr.push( touchData );\n\t\t}\n\t\treturn touchArr;\n\t}\n\t\n\tfunction getScreenDataFromEvent( e ) {\n\t\tconst screenId = e.target.dataset?.screenId;\n\t\tif( screenId === undefined ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn pluginApi.getScreenData( \"touch-event\", screenId );\n\t}\n\t\n\tfunction onWindowBlurTouch() {\n\t\tconst allScreensData = pluginApi.getAllScreensData();\n\t\tfor( const screenData of allScreensData ) {\n\t\t\tscreenData.lastTouches = screenData.touches;\n\t\t\tscreenData.touches = {};\n\t\t}\n\t}\n\t\n\tfunction clearTouchEvents( screenData ) {\n\t\tscreenData.onTouchEventListeners = {};\n\t\tscreenData.touchEventListenersActive = 0;\n\t}\n\t\n\treturn {\n\t\t\"stopTouch\": stopTouch,\n\t\t\"clearTouchEvents\": clearTouchEvents\n\t};\n}\n\n\n", "/**\n * Press and Click registration for Pointer plugin.\n */\n\n\"use strict\";\n\nimport { startMouseInternal } from \"./mouse.js\";\nimport { startTouchInternal } from \"./touch.js\";\n\nexport function registerPress( pluginApi, helpers ) {\n\tconst onevent = helpers.onevent;\n\tconst offevent = helpers.offevent;\n\tconst triggerEventListenersLocal = helpers.triggerEventListeners;\n\t\n\t// Expose trigger for other modules via module-level binding\n\tm_triggerEventListeners = triggerEventListenersLocal;\n\t\n\tpluginApi.addScreenDataItem( \"pressEventListenersActive\", 0 );\n\tpluginApi.addScreenDataItem( \"onPressEventListeners\", {} );\n\tpluginApi.addScreenDataItem( \"clickEventListenersActive\", 0 );\n\tpluginApi.addScreenDataItem( \"onClickEventListeners\", {} );\n\t\n\tpluginApi.addScreenInitFunction( initPressData );\n\t\n\tpluginApi.addCommand( \"inpress\", inpress, true, [] );\n\tpluginApi.addCommand( \"onpress\", onpress, true, [ \"mode\", \"fn\", \"once\", \"hitBox\", \"customData\" ] );\n\tpluginApi.addCommand( \"offpress\", offpress, true, [ \"mode\", \"fn\" ] );\n\tpluginApi.addCommand( \"onclick\", onclick, true, [ \"fn\", \"once\", \"hitBox\", \"customData\" ] );\n\tpluginApi.addCommand( \"offclick\", offclick, true, [ \"fn\" ] );\n\t\n\tfunction initPressData( screenData ) {\n\t\tscreenData.onPressEventListeners = {\n\t\t\t\"down\": [],\n\t\t\t\"up\": [],\n\t\t\t\"move\": []\n\t\t};\n\t\tscreenData.onClickEventListeners = {\n\t\t\t\"click\": []\n\t\t};\n\t}\n\t\n\tfunction inpress( screenData ) {\n\t\tstartMouseInternal( screenData );\n\t\tstartTouchInternal( screenData );\n\t\tif( screenData.lastEvent === \"touch\" ) {\n\t\t\treturn getTouchPress( screenData );\n\t\t} else {\n\t\t\treturn screenData.api.inmouse();\n\t\t}\n\t}\n\t\n\tfunction onpress( screenData, options ) {\n\t\tconst mode = options.mode;\n\t\tconst fn = options.fn;\n\t\tconst once = options.once;\n\t\tconst hitBox = options.hitBox;\n\t\tconst customData = options.customData;\n\t\t\n\t\tconst isValid = onevent(\n\t\t\tmode, fn, once, hitBox, [ \"down\", \"up\", \"move\" ], \"onpress\",\n\t\t\tscreenData.onPressEventListeners, null, null, customData\n\t\t);\n\t\t\n\t\tif( isValid ) {\n\t\t\tstartMouseInternal( screenData );\n\t\t\tstartTouchInternal( screenData );\n\t\t\tscreenData.pressEventListenersActive += 1;\n\t\t}\n\t}\n\t\n\tfunction offpress( screenData, options ) {\n\t\tconst mode = options.mode;\n\t\tconst fn = options.fn;\n\t\t\n\t\tconst isValid = offevent(\n\t\t\tmode, fn, [ \"down\", \"up\", \"move\" ], \"offpress\",\n\t\t\tscreenData.onPressEventListeners\n\t\t);\n\t\t\n\t\tif( isValid ) {\n\t\t\tif( fn == null ) {\n\t\t\t\tscreenData.pressEventListenersActive = 0;\n\t\t\t} else {\n\t\t\t\tscreenData.pressEventListenersActive -= 1;\n\t\t\t\tif( screenData.pressEventListenersActive < 0 ) {\n\t\t\t\t\tscreenData.pressEventListenersActive = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction onclick( screenData, options ) {\n\t\tconst fn = options.fn;\n\t\tconst once = options.once;\n\t\tlet hitBox = options.hitBox;\n\t\tconst customData = options.customData;\n\t\t\n\t\tif( hitBox == null ) {\n\t\t\thitBox = {\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 0,\n\t\t\t\t\"width\": screenData.width,\n\t\t\t\t\"height\": screenData.height\n\t\t\t};\n\t\t}\n\t\t\n\t\tconst isValid = onevent(\n\t\t\t\"click\", fn, once, hitBox, [ \"click\" ], \"onclick\",\n\t\t\tscreenData.onClickEventListeners, null, null, customData\n\t\t);\n\t\t\n\t\tif( isValid ) {\n\t\t\tstartMouseInternal( screenData );\n\t\t\tstartTouchInternal( screenData );\n\t\t\tscreenData.clickEventListenersActive += 1;\n\t\t}\n\t}\n\t\n\tfunction offclick( screenData, options ) {\n\t\tconst fn = options.fn;\n\t\tconst isValid = offevent(\n\t\t\t\"click\", fn, [ \"click\" ], \"offclick\",\n\t\t\tscreenData.onClickEventListeners\n\t\t);\n\t\t\n\t\tif( isValid ) {\n\t\t\tif( fn == null ) {\n\t\t\t\tscreenData.clickEventListenersActive = 0;\n\t\t\t} else {\n\t\t\t\tscreenData.clickEventListenersActive -= 1;\n\t\t\t\tif( screenData.clickEventListenersActive < 0 ) {\n\t\t\t\t\tscreenData.clickEventListenersActive = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction clearPressEvents( screenData ) {\n\t\tscreenData.onPressEventListeners = {};\n\t\tscreenData.pressEventListenersActive = 0;\n\t}\n\t\n\tfunction clearClickEvents( screenData ) {\n\t\tscreenData.onClickEventListeners = {};\n\t\tscreenData.clickEventListenersActive = 0;\n\t}\n\t\n\treturn {\n\t\t\"clearPressEvents\": clearPressEvents,\n\t\t\"clearClickEvents\": clearClickEvents\n\t};\n}\n\n// Module-level reference to event trigger helper\nlet m_triggerEventListeners = null;\n\nexport function triggerPressListeners( screenData, mode, data ) {\n\tif( screenData.pressEventListenersActive > 0 && m_triggerEventListeners ) {\n\t\tm_triggerEventListeners( mode, data, screenData.onPressEventListeners );\n\t}\n}\n\nexport function triggerClickListeners( screenData, data, clickStatus ) {\n\tif( screenData.clickEventListenersActive > 0 && m_triggerEventListeners ) {\n\t\tm_triggerEventListeners( \"click\", data, screenData.onClickEventListeners, clickStatus );\n\t}\n}\n\nexport function getTouchPress( screenData ) {\n\tfunction copyTouches( touches, touchArr, action ) {\n\t\tfor( const i in touches ) {\n\t\t\tconst touch = touches[ i ];\n\t\t\tconst touchData = {\n\t\t\t\t\"x\": touch.x,\n\t\t\t\t\"y\": touch.y,\n\t\t\t\t\"id\": touch.id,\n\t\t\t\t\"lastX\": touch.lastX,\n\t\t\t\t\"lastY\": touch.lastY,\n\t\t\t\t\"action\": touch.action,\n\t\t\t\t\"type\": \"touch\"\n\t\t\t};\n\t\t\tif( action !== undefined ) {\n\t\t\t\ttouchData.action = action;\n\t\t\t}\n\t\t\ttouchArr.push( touchData );\n\t\t}\n\t}\n\t\n\tconst touchArr = [];\n\tcopyTouches( screenData.touches, touchArr );\n\tif( touchArr.length === 0 ) {\n\t\tcopyTouches( screenData.lastTouches, touchArr, \"up\" );\n\t}\n\tif( touchArr.length > 0 ) {\n\t\tconst touchData = touchArr[ 0 ];\n\t\tif( touchData.action === \"up\" ) {\n\t\t\ttouchData.buttons = 0;\n\t\t} else {\n\t\t\ttouchData.buttons = 1;\n\t\t}\n\t\ttouchData.touches = touchArr;\n\t\treturn touchData;\n\t} else {\n\t\treturn {\n\t\t\t\"x\": -1,\n\t\t\t\"y\": -1,\n\t\t\t\"id\": -1,\n\t\t\t\"lastX\": -1,\n\t\t\t\"lastY\": -1,\n\t\t\t\"action\": \"none\",\n\t\t\t\"buttons\": 0,\n\t\t\t\"type\": \"touch\"\n\t\t};\n\t}\n}\n\n\n", "/**\n * Mouse registration for Pointer plugin.\n */\n\n\"use strict\";\n\nimport { triggerPressListeners, triggerClickListeners, getTouchPress } from \"./press.js\";\n\n// Module-level reference to startMouseInternal function\nlet m_startMouseInternal = null;\n\nexport function startMouseInternal( screenData ) {\n\tif( m_startMouseInternal ) {\n\t\tm_startMouseInternal( screenData );\n\t}\n}\n\nexport function registerMouse( pluginApi, helpers ) {\n\tconst m_onevent = helpers.onevent;\n\tconst m_offevent = helpers.offevent;\n\tconst m_triggerEventListeners = helpers.triggerEventListeners;\n\n\tpluginApi.addScreenDataItem( \"mouseStopped\", false );\n\tpluginApi.addScreenDataItem( \"mouseStarted\", false );\n\tpluginApi.addScreenDataItem( \"mouse\", null );\n\tpluginApi.addScreenDataItem( \"lastEvent\", null );\n\tpluginApi.addScreenDataItem( \"isContextMenuEnabled\", false );\n\tpluginApi.addScreenDataItem( \"mouseEventListenersActive\", 0 );\n\tpluginApi.addScreenDataItem( \"onMouseEventListeners\", {\n\t\t\"down\": [],\n\t\t\"up\": [],\n\t\t\"move\": []\n\t} );\n\t\n\tpluginApi.addScreenInitFunction( initMouseData );\n\twindow.addEventListener( \"blur\", onWindowBlurMouse );\n\t\n\tpluginApi.addCommand( \"startMouse\", startMouse, true, [] );\n\tpluginApi.addCommand( \"stopMouse\", stopMouse, true, [] );\n\tpluginApi.addCommand( \"inmouse\", inmouse, true, [] );\n\tpluginApi.addCommand( \"setEnableContextMenu\", setEnableContextMenu, true, [ \"isEnabled\" ] );\n\tpluginApi.addCommand(\n\t\t\"onmouse\", onmouse, true, [ \"mode\", \"fn\", \"once\", \"hitBox\", \"customData\" ]\n\t);\n\tpluginApi.addCommand( \"offmouse\", offmouse, true, [ \"mode\", \"fn\" ] );\n\t\n\tfunction initMouseData( screenData ) {\n\t\tscreenData.mouse = {\n\t\t\t\"x\": Math.floor( screenData.width / 2 ),\n\t\t\t\"y\": Math.floor( screenData.height / 2 ),\n\t\t\t\"lastX\": Math.floor( screenData.width / 2 ),\n\t\t\t\"lastY\": Math.floor( screenData.height / 2 ),\n\t\t\t\"buttons\": 0,\n\t\t\t\"action\": \"none\"\n\t\t};\n\t}\n\t\n\tfunction startMouseInternal( screenData ) {\n\n\t\t// Do not start mouse if explicitly stopped\n\t\tif( screenData.mouseStopped === false ) {\n\t\t\tstartMouse( screenData );\n\t\t}\n\t}\n\t\n\t// Store reference for module-level export\n\tm_startMouseInternal = startMouseInternal;\n\n\tfunction startMouse( screenData ) {\n\n\t\t//Clear explicit mouseStopped\n\t\tscreenData.mouseStopped = false;\n\n\t\tif( !screenData.mouseStarted ) {\n\t\t\tscreenData.canvas.addEventListener( \"mousemove\", mouseMove );\n\t\t\tscreenData.canvas.addEventListener( \"mousedown\", mouseDown );\n\t\t\tscreenData.canvas.addEventListener( \"mouseup\", mouseUp );\n\t\t\tscreenData.canvas.addEventListener( \"contextmenu\", onContextMenu );\n\t\t\tscreenData.mouseStarted = true;\n\t\t}\n\t}\n\t\n\tfunction stopMouse( screenData ) {\n\n\t\t// Explicitly set mouse to stoppedto prevent mouse commands from starting mouse when\n\t\t// use explicitly sets it to true\n\t\tscreenData.mouseStopped = true;\n\n\t\tif( screenData.mouseStarted ) {\n\t\t\tscreenData.canvas.removeEventListener( \"mousemove\", mouseMove );\n\t\t\tscreenData.canvas.removeEventListener( \"mousedown\", mouseDown );\n\t\t\tscreenData.canvas.removeEventListener( \"mouseup\", mouseUp );\n\t\t\tscreenData.canvas.removeEventListener( \"contextmenu\", onContextMenu );\n\t\t\tscreenData.mouseStarted = false;\n\t\t}\n\t}\n\t\n\tfunction getMouse( screenData ) {\n\t\tconst mouse = {};\n\t\tmouse.x = screenData.mouse.x;\n\t\tmouse.y = screenData.mouse.y;\n\t\tmouse.lastX = screenData.mouse.lastX;\n\t\tmouse.lastY = screenData.mouse.lastY;\n\t\tmouse.buttons = screenData.mouse.buttons;\n\t\tmouse.action = screenData.mouse.action;\n\t\tmouse.type = \"mouse\";\n\t\treturn mouse;\n\t}\n\t\n\tfunction inmouse( screenData ) {\n\t\tstartMouseInternal( screenData );\n\t\treturn getMouse( screenData );\n\t}\n\t\n\tfunction setEnableContextMenu( screenData, options ) {\n\t\tscreenData.isContextMenuEnabled = !!( options.isEnabled );\n\t\tstartMouseInternal( screenData );\n\t}\n\t\n\tfunction onmouse( screenData, options ) {\n\t\tconst mode = options.mode;\n\t\tconst fn = options.fn;\n\t\tconst once = options.once;\n\t\tconst hitBox = options.hitBox;\n\t\tconst customData = options.customData;\n\t\t\n\t\tconst isValid = m_onevent(\n\t\t\tmode, fn, once, hitBox, [ \"down\", \"up\", \"move\" ], \"onmouse\",\n\t\t\tscreenData.onMouseEventListeners, null, null, customData\n\t\t);\n\t\t\n\t\tif( isValid ) {\n\t\t\tstartMouseInternal( screenData );\n\t\t\tscreenData.mouseEventListenersActive += 1;\n\t\t}\n\t}\n\t\n\tfunction offmouse( screenData, options ) {\n\t\tconst mode = options.mode;\n\t\tconst fn = options.fn;\n\t\t\n\t\tconst isValid = m_offevent(\n\t\t\tmode, fn, [ \"down\", \"up\", \"move\" ], \"offmouse\",\n\t\t\tscreenData.onMouseEventListeners\n\t\t);\n\t\t\n\t\tif( isValid ) {\n\t\t\tif( fn == null ) {\n\t\t\t\tscreenData.mouseEventListenersActive = 0;\n\t\t\t} else {\n\t\t\t\tscreenData.mouseEventListenersActive -= 1;\n\t\t\t\tif( screenData.mouseEventListenersActive < 0 ) {\n\t\t\t\t\tscreenData.mouseEventListenersActive = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction clearMouseEvents( screenData ) {\n\t\tscreenData.onMouseEventListeners = {\n\t\t\t\"down\": [],\n\t\t\t\"up\": [],\n\t\t\t\"move\": []\n\t\t};\n\t\tscreenData.mouseEventListenersActive = 0;\n\t}\n\t\n\tfunction mouseMove( e ) {\n\t\tconst screenData = getScreenDataFromEvent( e );\n\t\tif( !screenData ) {\n\t\t\treturn;\n\t\t}\n\t\tupdateMouse( screenData, e, \"move\" );\n\t\tconst mouseData = getMouse( screenData );\n\t\tif( screenData.mouseEventListenersActive > 0 ) {\n\t\t\tm_triggerEventListeners( \"move\", mouseData, screenData.onMouseEventListeners );\n\t\t}\n\t\ttriggerPressListeners( screenData, \"move\", mouseData );\n\t}\n\t\n\tfunction mouseDown( e ) {\n\t\tconst screenData = getScreenDataFromEvent( e );\n\t\tif( !screenData ) {\n\t\t\treturn;\n\t\t}\n\t\tupdateMouse( screenData, e, \"down\" );\n\t\tconst mouseData = getMouse( screenData );\n\t\tif( screenData.mouseEventListenersActive > 0 ) {\n\t\t\tm_triggerEventListeners( \"down\", mouseData, screenData.onMouseEventListeners );\n\t\t}\n\t\ttriggerPressListeners( screenData, \"down\", mouseData );\n\t\ttriggerClickListeners( screenData, mouseData, \"down\" );\n\t}\n\t\n\tfunction mouseUp( e ) {\n\t\tconst screenData = getScreenDataFromEvent( e );\n\t\tif( !screenData ) {\n\t\t\treturn;\n\t\t}\n\t\tupdateMouse( screenData, e, \"up\" );\n\t\tconst mouseData = getMouse( screenData );\n\t\tif( screenData.mouseEventListenersActive > 0 ) {\n\t\t\tm_triggerEventListeners( \"up\", mouseData, screenData.onMouseEventListeners );\n\t\t}\n\t\ttriggerPressListeners( screenData, \"up\", mouseData );\n\t\ttriggerClickListeners( screenData, mouseData, \"up\" );\n\t}\n\t\n\tfunction onContextMenu( e ) {\n\t\tconst screenData = getScreenDataFromEvent( e );\n\t\tif( !screenData ) {\n\t\t\treturn;\n\t\t}\n\t\tif( !screenData.isContextMenuEnabled ) {\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tfunction updateMouse( screenData, e, action ) {\n\t\tconst rect = screenData.clientRect;\n\t\tconst x = Math.floor(\n\t\t\te.offsetX / rect.width * screenData.width\n\t\t);\n\t\tconst y = Math.floor(\n\t\t\te.offsetY / rect.height * screenData.height\n\t\t);\n\t\t\n\t\tlet lastX = x;\n\t\tlet lastY = y;\n\t\t\n\t\tif( screenData.mouse ) {\n\t\t\tif( screenData.mouse.x !== undefined ) {\n\t\t\t\tlastX = screenData.mouse.x;\n\t\t\t}\n\t\t\tif( screenData.mouse.y !== undefined ) {\n\t\t\t\tlastY = screenData.mouse.y;\n\t\t\t}\n\t\t}\n\t\t\n\t\tscreenData.mouse = {\n\t\t\t\"x\": x,\n\t\t\t\"y\": y,\n\t\t\t\"lastX\": lastX,\n\t\t\t\"lastY\": lastY,\n\t\t\t\"buttons\": e.buttons,\n\t\t\t\"action\": action\n\t\t};\n\t\tscreenData.lastEvent = \"mouse\";\n\t}\n\t\n\tfunction getScreenDataFromEvent( e ) {\n\t\tconst screenId = e.target.dataset?.screenId;\n\t\tif( screenId === undefined ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn pluginApi.getScreenData( \"mouse-event\", screenId );\n\t}\n\t\n\tfunction onWindowBlurMouse() {\n\t\tconst allScreensData = pluginApi.getAllScreensData();\n\t\tfor( const screenData of allScreensData ) {\n\t\t\tscreenData.mouse.buttons = 0;\n\t\t\tscreenData.mouse.action = \"up\";\n\t\t}\n\t}\n\t\n\treturn {\n\t\t\"stopMouse\": stopMouse,\n\t\t\"clearMouseEvents\": clearMouseEvents\n\t};\n}\n\n\n", "/**\n * Pi.js - Pointer Plugin\n * \n * Mouse, touch, and press handling ported from alpha.1 as a plugin.\n * \n * @module plugins/pointer\n * @version 1.0.0\n */\n\n\"use strict\";\n\nimport { createEventHelpers } from \"./shared-events.js\";\nimport { registerMouse } from \"./mouse.js\";\nimport { registerTouch } from \"./touch.js\";\nimport { registerPress } from \"./press.js\";\n\n\n/***************************************************************************************************\n * Plugin Initialization\n **************************************************************************************************/\n\n\nexport default function pointerPlugin( pluginApi ) {\n\t\n\t// Create shared helpers (onevent/offevent/triggerEventListeners)\n\tconst helpers = createEventHelpers( pluginApi );\n\t\n\t// Register feature modules\n\tconst mouseApi = registerMouse( pluginApi, helpers );\n\tconst touchApi = registerTouch( pluginApi, helpers );\n\tconst pressApi = registerPress( pluginApi, helpers );\n\t\n\t// Register clearEvents handlers for mouse, touch, and press\n\tpluginApi.registerClearEvents( \"mouse\", ( screenData ) => {\n\t\tif( screenData !== null ) {\n\t\t\t\n\t\t\t// Clear mouse events for specific screen\n\t\t\tmouseApi.clearMouseEvents( screenData );\n\t\t} else {\n\t\t\t// Clear mouse events for all screens\n\t\t\tconst allScreensData = pluginApi.getAllScreensData();\n\t\t\tfor( const sd of allScreensData ) {\n\t\t\t\tmouseApi.clearMouseEvents( sd );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\tpluginApi.registerClearEvents( \"touch\", ( screenData ) => {\n\t\tif( screenData !== null ) {\n\t\t\t// Clear touch events for specific screen\n\t\t\ttouchApi.clearTouchEvents( screenData );\n\t\t} else {\n\t\t\t// Clear touch events for all screens\n\t\t\tconst allScreensData = pluginApi.getAllScreensData();\n\t\t\tfor( const sd of allScreensData ) {\n\t\t\t\ttouchApi.clearTouchEvents( sd );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\tpluginApi.registerClearEvents( \"press\", ( screenData ) => {\n\t\tif( screenData !== null ) {\n\t\t\t// Clear press and click events for specific screen\n\t\t\tpressApi.clearPressEvents( screenData );\n\t\t\tpressApi.clearClickEvents( screenData );\n\t\t} else {\n\t\t\t// Clear press and click events for all screens\n\t\t\tconst allScreensData = pluginApi.getAllScreensData();\n\t\t\tfor( const sd of allScreensData ) {\n\t\t\t\tpressApi.clearPressEvents( sd );\n\t\t\t\tpressApi.clearClickEvents( sd );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t// Screen cleanup\n\tpluginApi.addScreenCleanupFunction( ( screenData ) => {\n\t\tif( screenData.mouseStarted ) {\n\t\t\tmouseApi.stopMouse( screenData );\n\t\t}\n\t\tif( screenData.touchStarted ) {\n\t\t\ttouchApi.stopTouch( screenData );\n\t\t}\n\t\tmouseApi.clearMouseEvents( screenData );\n\t\ttouchApi.clearTouchEvents( screenData );\n\t\tpressApi.clearPressEvents( screenData );\n\t\tpressApi.clearClickEvents( screenData );\n\t} );\n}\n\n\n// Auto-register in IIFE mode (when loaded via <script> tag)\nif( typeof window !== \"undefined\" && window.pi ) {\n\twindow.pi.registerPlugin( {\n\t\t\"name\": \"pointer\",\n\t\t\"version\": \"1.0.0\",\n\t\t\"description\": \"Mouse and touch input handling for Pi.js\",\n\t\t\"init\": pointerPlugin\n\t} );\n}\n\n\n"],
  "mappings": "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",
  "names": ["customData", "m_triggerEventListeners", "startTouchInternal", "touchArr", "m_triggerEventListeners", "startMouseInternal"]
}
