{"version":3,"sources":["jsdelivr-header.js","/npm/pure-canvas@0.7.0/lib/Stage.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aACA,OAAO,eAAe,QAAS,aAAc,CAAE,OAAO,IACtD,MAAM,gBAAkB,QAAQ,iBAC1B,OAAS,QAAQ,UACvB,MAAM,cAAc,gBAAgB,aAChC,WAAA,CAAY,GACR,QACA,KAAK,gBAAmB,IACpB,KAAK,aAAa,YAAa,EAAM,EAEzC,KAAK,gBAAmB,IACpB,KAAK,aAAa,YAAa,EAAM,EAEzC,KAAK,cAAiB,IAClB,KAAK,aAAa,UAAW,EAAM,EAEvC,KAAK,YAAe,IAChB,KAAK,aAAa,QAAS,EAAM,EAErC,KAAK,OAAS,EACd,KAAK,QAAU,OAAO,eAAe,GACrC,KAAK,OAAO,iBAAiB,YAAa,KAAK,iBAC/C,KAAK,OAAO,iBAAiB,YAAa,KAAK,iBAC/C,KAAK,OAAO,iBAAiB,UAAW,KAAK,eAC7C,KAAK,OAAO,iBAAiB,QAAS,KAAK,YAC/C,CACA,OAAA,GACI,KAAK,OAAO,oBAAoB,YAAa,KAAK,iBAClD,KAAK,OAAO,oBAAoB,YAAa,KAAK,iBAClD,KAAK,OAAO,oBAAoB,UAAW,KAAK,eAChD,KAAK,OAAO,oBAAoB,QAAS,KAAK,YAClD,CACA,wBAAA,EAAyB,QAAE,EAAO,QAAE,GAAW,EAAU,KAAK,QAC1D,MAAM,KAAE,EAAI,IAAE,GAAQ,EAAQ,wBAC9B,MAAO,CACH,EAAG,KAAK,MAAM,EAAU,GACxB,EAAG,KAAK,MAAM,EAAU,GAEhC,CACA,YAAA,CAAa,EAAM,GACf,IACI,EADA,GAAY,EAEhB,KAAK,KAAK,GAAM,KACZ,IAAK,GAAa,KAAK,aAAc,CACjC,MAAM,EAAQ,KAAK,yBAAyB,GAC5C,EAAS,KAAK,aAAa,aAAa,GACxC,GAAY,CAChB,CACA,OAAO,CAAM,GACd,EACP,CACA,MAAA,GACI,KAAK,QAAQ,UAAU,EAAG,EAAG,KAAK,OAAO,MAAO,KAAK,OAAO,QACxD,KAAK,cACL,KAAK,aAAa,KAAK,KAAK,QAEpC,CACA,kBAAA,CAAmB,EAAe,IAC9B,GAAI,KAAK,KAAM,CACX,MAAM,EAAO,KACP,EAAO,KAAK,KAAK,QACvB,IAAI,GAAO,GACX,SAAU,IACF,EAAK,sBACL,OAAO,aAAa,EAAK,sBAE7B,MAAM,EAAW,YAAY,MAAQ,EACrC,MAAQ,GAAQ,YAAY,MAAQ,GAChC,EAAO,IAEX,EAAK,QAAQ,UAAU,EAAG,EAAG,EAAK,OAAO,MAAO,EAAK,OAAO,QAC5D,EAAK,EAAK,SACL,IACD,EAAK,qBAAuB,OAAO,WAAW,EAAO,GAE5D,CAbD,EAcJ,CACJ,CACA,QAAI,GACA,OAAO,KAAK,YAChB,CACA,QAAI,CAAK,GACL,KAAK,aAAe,CACxB,CACA,EAAA,CAAG,EAAO,EAAI,GACV,OAAO,MAAM,GAAG,EAAO,EAAI,EAC/B,EAGJ,QAAQ,QAAU","file":"/npm/pure-canvas@0.7.0/lib/Stage.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/pure-canvas@0.7.0/lib/Stage.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst eventemitter3_1 = require(\"eventemitter3\");\r\nconst util_1 = require(\"./util\");\r\nclass Stage extends eventemitter3_1.EventEmitter {\r\n    constructor(canvas) {\r\n        super();\r\n        this.handleMouseDown = (event) => {\r\n            this.emitHitEvent('mousedown', event);\r\n        };\r\n        this.handleMouseMove = (event) => {\r\n            this.emitHitEvent('mousemove', event);\r\n        };\r\n        this.handleMouseUp = (event) => {\r\n            this.emitHitEvent('mouseup', event);\r\n        };\r\n        this.handleClick = (event) => {\r\n            this.emitHitEvent('click', event);\r\n        };\r\n        this.canvas = canvas;\r\n        this.context = util_1.getSafeContext(canvas);\r\n        this.canvas.addEventListener('mousedown', this.handleMouseDown);\r\n        this.canvas.addEventListener('mousemove', this.handleMouseMove);\r\n        this.canvas.addEventListener('mouseup', this.handleMouseUp);\r\n        this.canvas.addEventListener('click', this.handleClick);\r\n    }\r\n    destroy() {\r\n        this.canvas.removeEventListener('mousedown', this.handleMouseDown);\r\n        this.canvas.removeEventListener('mousemove', this.handleMouseMove);\r\n        this.canvas.removeEventListener('mouseup', this.handleMouseUp);\r\n        this.canvas.removeEventListener('click', this.handleClick);\r\n    }\r\n    eventToElementCoordinate({ clientX, clientY }, element = this.canvas) {\r\n        const { left, top } = element.getBoundingClientRect();\r\n        return {\r\n            x: Math.round(clientX - left),\r\n            y: Math.round(clientY - top)\r\n        };\r\n    }\r\n    emitHitEvent(name, event) {\r\n        let didSearch = false;\r\n        let result = undefined;\r\n        this.emit(name, () => {\r\n            if (!didSearch && this.internalNode) {\r\n                const point = this.eventToElementCoordinate(event);\r\n                result = this.internalNode.intersection(point);\r\n                didSearch = true;\r\n            }\r\n            return result;\r\n        }, event);\r\n    }\r\n    render() {\r\n        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n        if (this.internalNode) {\r\n            this.internalNode.draw(this.context);\r\n        }\r\n    }\r\n    renderAsynchronous(maxBatchTime = 10) {\r\n        if (this.node) {\r\n            const that = this;\r\n            const next = this.node.steps();\r\n            let done = false;\r\n            (function batch() {\r\n                if (that.nonBlockingTimeoutId) {\r\n                    window.clearTimeout(that.nonBlockingTimeoutId);\r\n                }\r\n                const deadline = performance.now() + maxBatchTime;\r\n                while (!done && performance.now() < deadline) {\r\n                    done = next();\r\n                }\r\n                that.context.clearRect(0, 0, that.canvas.width, that.canvas.height);\r\n                next(that.context);\r\n                if (!done) {\r\n                    that.nonBlockingTimeoutId = window.setTimeout(batch, 0);\r\n                }\r\n            })();\r\n        }\r\n    }\r\n    get node() {\r\n        return this.internalNode;\r\n    }\r\n    set node(value) {\r\n        this.internalNode = value;\r\n    }\r\n    on(event, fn, context) {\r\n        return super.on(event, fn, context);\r\n    }\r\n    ;\r\n}\r\nexports.default = Stage;\r\n;\r\n"]}