{"_id":"@kayelaa/canvas","_rev":"32-e2151767296bad086af20839f196fad8","name":"@kayelaa/canvas","dist-tags":{"latest":"0.3.2"},"versions":{"0.1.0":{"name":"@kayelaa/canvas","version":"0.1.0","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.0","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"4279ff8b1f934f6e4f88db6a56ec3133ccacba04","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.0.tgz","fileCount":10,"integrity":"sha512-RB21QEEwjaLdOgwg0n0yi/tHmEwXMvezi971HArOwkwTUv6NvehWPXp1X7buyeiei3Hv71rSvOhrn+dmQHgXBg==","signatures":[{"sig":"MEYCIQDbb50L3jzPEi3w/QH/gEfhO8GGdTEpvxtDvs68PXlE/gIhAM22IWQWuuMqe5bW/nZ8kfc/+rgBcyZhyjqBzCleCL3E","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":371057},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"}},"gitHead":"cc8606b74c7a1b0b6e67f12a96393e2978b66bff","scripts":{"build":"tsup","clean":"rm -rf dist"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/web":"^0.0.327","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.0_1770300022262_0.8026825421698989","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@kayelaa/canvas","version":"0.1.1","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.1","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"642c7d99e66a2df7bd7ac958639b73755af9e0d8","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.1.tgz","fileCount":10,"integrity":"sha512-ByYNLTOlwc9RXD/QjZPeKBdLcIdNZuWBFAobHHLzz2ANDkmUkq36HEaoTfmK4ACjkMEWvQ0caUiPt/fN7i1n1w==","signatures":[{"sig":"MEUCIEh6Wao3y4nEfa0ur/F3cx9L1vmC5XxnQv+TsD3Hbv01AiEA691az2KkNX19Dt6Vf6uMjkwmnIjxxqcduj5sEZsdP7c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":371083},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"}},"gitHead":"4d836321a09fd07a94d4ac74381d165bb0684bdc","scripts":{"build":"tsup","clean":"rm -rf dist"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/web":"^0.0.327","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.1_1770300341672_0.45453218265911643","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@kayelaa/canvas","version":"0.1.2","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.2","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"bcf8cfcab9034e4ea91a0b57f4c9d8b6da9a2695","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.2.tgz","fileCount":18,"integrity":"sha512-Rl5BSTu7eeR+4OhQuxkTETZvebH2h7MWHlTT0ww8H1i6hnuCUhwramt4hevDNB8dxbOLLck3GOXkYb/j2F7esA==","signatures":[{"sig":"MEQCIG9mAn54spmJ+MgbOBGH58yFF/NZRyhs2JM9PKffP9fdAiBWijWmYaOdoUF/aPDmJc3kdqfH+MetasSpyF976HM8YQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378231},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"}},"gitHead":"e28c26372bc857c33e9983dd15fbdfccfb30df54","scripts":{"build":"tsup","clean":"rm -rf dist"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/web":"^0.0.327","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.2_1770300718356_0.04404040141297649","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@kayelaa/canvas","version":"0.1.3","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.3","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"34f36c6254879590b6133a36f302b4b20b9bfabe","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.3.tgz","fileCount":18,"integrity":"sha512-PR5tGHg85vaPqOCSIgV+pUebs4JHl03x/mQhhvOf2YVsutfcuvT5842EN36TCBUwn1M/ioMIipOMpSdBZnoLew==","signatures":[{"sig":"MEUCIQCWbRr7siPtKYNLmzmtAEGUndf9YZwQcK1QV/uTLU1ajwIga7LcF3fZynqShnu0fV2b/FwrCNRMNWdSsmxKgB3I3KY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378222},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"}},"gitHead":"e28c26372bc857c33e9983dd15fbdfccfb30df54","scripts":{"build":"tsup","clean":"rm -rf dist"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/web":"^0.0.327","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.3_1770300871368_0.953852491919037","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@kayelaa/canvas","version":"0.1.4","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.4","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"5f8280258e29ecefc51e5797a329d30bc2ef49d2","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.4.tgz","fileCount":28,"integrity":"sha512-nvSOwQiofHAE4ADrMCCRzJ4HYHkL732p/A9j8PFSPdt7Q8UxlfZNq7EDnBVQGCcmhepPYQcj9uQCKqM+km+NWw==","signatures":[{"sig":"MEUCIQCEc/qr/E3G9n7D3q37QfJM7lx/GWgDp0vSfC2eAneHPAIgeMnhjH+N3/2d9EqPovELJrPNq7KVlEx4oLdLwRPEnpc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":514202},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"e28c26372bc857c33e9983dd15fbdfccfb30df54","scripts":{"build":"tsup","clean":"rm -rf dist"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/web":"^0.0.327","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.4_1770301397014_0.1692636931730369","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@kayelaa/canvas","version":"0.1.5","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.5","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"bf2605fd869e8168585863245f1a60f1d475ecca","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.5.tgz","fileCount":28,"integrity":"sha512-5LMx5gvBRk8anLJoIHIK5UN4swid5N/75WwVxyg42sHhC5+O83ZSKCaEvkZ1PWg9OexZML9i4ONO29+VfTlPtg==","signatures":[{"sig":"MEQCIAg3Dadq/lo5bPHYwYDcU4GAXp82NfRE+Ci+7RCsYK7PAiAvuwRvzHpMllk9EjjcsCvLLxJ3hKzpyOJ4vBzn6tF+Aw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":516889},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"93d55bdd2f6d27d72c14eedb4d9a67eb332a06b7","scripts":{"build":"tsup","clean":"rm -rf dist"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/web":"^0.0.327","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.5_1770301951621_0.1870408982429781","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@kayelaa/canvas","version":"0.1.6","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.6","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"3590b5c373527ae7786d59d1c1a2003178a16e28","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.6.tgz","fileCount":28,"integrity":"sha512-SH3cQh6eNjQXnXhIUgHT8NZ08ONBnseo/V/WSRsu6p9A51RvZYFyQFxFHSeMg1QaxUpCOuuvlVUEFHTJUFKB9A==","signatures":[{"sig":"MEYCIQCC8dIUH2V1mm1pdY0uq80ajsq03iF3EIYkGflWuSwMTwIhAIbU3K0b1eshEM2xKPj9Nz/5a6gAXB/I9GHDMX4EQyHR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":523726},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"b4b82bb5073e9ec310d3ab10fcb6adc100a4a8d4","scripts":{"build":"tsup","clean":"rm -rf dist"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/web":"^0.0.327","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.6_1770363921283_0.2548310389545063","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@kayelaa/canvas","version":"0.1.7","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.7","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"82dc12e2341cd0063aa18756bc8d69dc534d1dfa","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.7.tgz","fileCount":26,"integrity":"sha512-qzswxwq6krQUMcvtbdxOwF8GVZZPRTnbDY4unshamyqLJYLXMf9hFgiVsqFyjkw9iTrKoxhKr5mlVdH7Zh13Ag==","signatures":[{"sig":"MEUCIQDLomguewptWWGeJp0gYubNv+2Jo9M2WJg5n+YIAa9gKgIgY+RlzsZNkNwNQBWo7yuuJH5Hi24VzsM4cbwP9GwdhGs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":514472},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"63ce0885c57a5fbe86443c909c7e035d0cd14e95","scripts":{"build":"tsup","clean":"rm -rf dist"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/web":"^0.0.327","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.7_1770365073938_0.4568524029545322","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@kayelaa/canvas","version":"0.1.8","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.8","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"072ed3634a45af13fbbc61be35fd1b0d93883411","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.8.tgz","fileCount":26,"integrity":"sha512-GcZjpB1pOEetR8svUX9g3Kq4X2thxMDlfN7KdJOA30DQNSuoSPMFpl2xIx+AKOcOnpsPIoIsY7YhozHsZfr7zA==","signatures":[{"sig":"MEUCIBZZj7kzOPGLn35d4yhX8n62JFJHoP4CjWUcpRoaK5ZyAiEA5flgdy3Nme/uCiPKc4ASlxsYysyj6570mIXJ0tvGl+c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":577489},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"861294c84e66be0a72c7e57b3e3bebdcbb92cb98","scripts":{"build":"tsup","clean":"rm -rf dist"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/web":"^0.0.327","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.8_1770373033563_0.3351397560602989","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@kayelaa/canvas","version":"0.1.9","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.9","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"42e634d4afb559a0cb8004e465f9f63c9b426062","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.9.tgz","fileCount":26,"integrity":"sha512-7ER7sL9qqwfE6MMckZGNW1HkvxSdlTg1VRwf1U44nE8nDiFJHCywlrIs9CEWpjf6T1VMevhoU22989JJ7J3EiQ==","signatures":[{"sig":"MEUCIQCq934l6oQbL45bKx29OuHtuoR+MWbUhqwmhoG06qswwwIgB24amc7eTASFNiSWzfUfURpWiT97Pt+5BjyB/2wBy7I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":600261},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"861294c84e66be0a72c7e57b3e3bebdcbb92cb98","scripts":{"build":"tsup","clean":"rm -rf dist"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/web":"^0.0.327","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.9_1770374241303_0.6030959181432274","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@kayelaa/canvas","version":"0.1.10","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.10","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"6bb0ac78df7391f35b15568d76641f23ac477954","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.10.tgz","fileCount":26,"integrity":"sha512-CUPYIJDkbeaUXrWyh7tu1BMXLdzRevXAqXvl2OSdoRnywZcwgJbG1m0FFQ7+XkgAbsiXLM9niK2lrhsNj3m+5w==","signatures":[{"sig":"MEUCIQDl/RfkBJ5cPOAlr9Oa52lpmSIAa3o2No93xIjx3KfzDwIgd+OjBvzc5hPILq8ExfczflIPPtslW2Fg9MOoQZBImWY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":599874},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"5d1600a01897a2fa5bf524ae9bdeee12892fc992","scripts":{"build":"tsup","clean":"rm -rf dist"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/web":"^0.0.327","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.10_1770374993887_0.3245608519210097","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@kayelaa/canvas","version":"0.1.11","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.11","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"b3ba9cca2f07a9196bf763baeab6e7ce862e7c75","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.11.tgz","fileCount":26,"integrity":"sha512-jrEm+mISmKoaIjt/RtIyyJE2Z/dpkXQqFi1ARbJqs+YpNejlTRTaxPCSQSw+z8WJLhlh9yX53jZPndmb6vnoZQ==","signatures":[{"sig":"MEUCIQCMfgdWuJj5lLxa/J8OPuQEzmSmCBnehkTu8q50Llx8eAIgSmH15rCxCjjmXxPY5qIYWZJXEnCWShggFwZm1q3dt6s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":600140},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"4a28d0500ea6e343627b34fac908efa8113674cc","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.11_1770378504483_0.9052783697641815","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@kayelaa/canvas","version":"0.1.12","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.12","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"117062a9e1f85eee0b7e6c366934388da439a478","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.12.tgz","fileCount":160,"integrity":"sha512-v1ISjRjcBKW9ZmIE66qSbcZ+PGRxdtdUUAsww8KQgMz6jB3zrhG2J6nmduJGlalHctp9rAgAj38fB8NlnXxqOQ==","signatures":[{"sig":"MEUCIECMkxTIGJ+kDmLfYfH+n3Xpi+nAHtUkHv9lHOxi4A04AiEAxId/oNjnKMfG8ktGW4LkE3UHWBQHa9YBydUvC+mCYEI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":958098},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"3ea9bf087be825ca5d72a7742b1c42ae9ba91c30","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.12_1770378611023_0.29611321724877193","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@kayelaa/canvas","version":"0.1.13","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.13","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"8b30d43befda7c7907cdb5bf15f23afd8c3a9e51","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.13.tgz","fileCount":160,"integrity":"sha512-lxPPOcTn/+lYHNVd2eCSrj7K58ddw0JlIBgldjtjnojHFj69QNrUtC3o+EDH91ytTwegff8xy9wkj2+BOESsZA==","signatures":[{"sig":"MEUCIGZqLl2l4y4zBz/c1YdBgQMISbOxmDrak/V5ZOrPFRpaAiEA3eo6dzhRz3aGzGL9WVDUgcClj2LIFV2ztIedhKY5fM4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":958105},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"3ea9bf087be825ca5d72a7742b1c42ae9ba91c30","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.13_1770378694318_0.4244818752466488","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@kayelaa/canvas","version":"0.1.14","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.1.14","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"7c169b394daa567845160f78b0040876cae48ceb","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.1.14.tgz","fileCount":26,"integrity":"sha512-6SDtcdyKQuulpMK7ID6t1Xw1cQS0bmnK5ZTwOoRWTias55zGRGeOk9YQCmzHKR7GsDjp2fIXHuwcd8tpnSQNPQ==","signatures":[{"sig":"MEUCICzt6kAenqdNl7Nu1rVOpYTj+Fz7Bx9sVik9hH95bhyYAiEA3gfSqjNFw9EcIr6/k+dfuQbFXHGmff3PHm/bd5ZmlVU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":600174},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"7249970fa1fc38fd32e1893bcecd06cf89964783","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.1.14_1770379594095_0.006228184492839128","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@kayelaa/canvas","version":"0.2.0","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.0","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"41b464783a019086bc8ad76f9b9ead47aa716fbe","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.0.tgz","fileCount":26,"integrity":"sha512-1jTYXst0DZuauDNAeo924tRQ2Ahg26jFQmOuGoBFzgJe8vRRslPW7caqZq/6/eZBfQyLQBhbT4gKCgT+mCvfBQ==","signatures":[{"sig":"MEUCIQCM8vO0KRAuS05Zlt19WevlaZyfC1zgx5M/Qc4/oaSGVwIgb3NMRC8tR/wXvZYUnF+OMXHyyTD1H/QLcIeQhlXNz0U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":722438},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"cea72565c81f1d6ee706a59de5d2e6adc9e62cb2","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.0_1770543944340_0.6085490741989625","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@kayelaa/canvas","version":"0.2.1","author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.1","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"b9a047f3ab3ba0910b8aefebc0410dc658ffd9e7","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.1.tgz","fileCount":26,"integrity":"sha512-I3xh2m8BcU5+oc5DRYizEysTdd0nLt/mIy7mro9AJ4POqMXm2QkczuZMDUUrbt715biMm7DYoUM//PFHeG+agw==","signatures":[{"sig":"MEQCIHvuS19fd16fJXa+xKi8/XfEYpplN/ics71hczzVO+CeAiBre/DCur+JPBsHqa1WOc8D66RVHLiwZ9lrEGFByaxisg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":736147},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"cb06d99e537aee1d3caba7a76fb0d00c47573dc3","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Declarative entity composition hooks + canvas utilities for LEA-based 2D games","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.1_1770550354883_0.1471681679382506","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@kayelaa/canvas","version":"0.2.2","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.2","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"6f06e5312b38d4cd0a0551e4c7f773c0b2fb0ce3","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.2.tgz","fileCount":26,"integrity":"sha512-bXvs6M4qrlx8HWr3uGdtLA0TbVHFaW7Teg21IuhLMoYeeTz0SLEcgJWHd3PnuAYC7Dn5LfsVZpvMv1vxV9v8Zg==","signatures":[{"sig":"MEUCIQCtjnb+noMmQDgwmK62t0UFoyQDJ78D2rAHOyCFxZAYEAIgDmS8VZ6/gU9mBptTlbEYArgfg9Cq4UtKqNkBHEX1ejA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":737459},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"cb06d99e537aee1d3caba7a76fb0d00c47573dc3","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.2_1770558028281_0.43024883500539546","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@kayelaa/canvas","version":"0.2.3","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.3","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"63b68faa37df0151f560bbaa5e8a47108a3dfd70","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.3.tgz","fileCount":26,"integrity":"sha512-RB4CenbdAarg0YPQ3mSiSQUP8Y97KBJ0O7w2Ar3TfTIJKHI1yQKQZcjKMC5TD503FOhyCUJ0Uf/ZHFZf87GjXg==","signatures":[{"sig":"MEUCIQCtXCLR/Xj9JjLlhm8i8kZNrhCwQVLQhm1ws6Mo2pBw1QIgRQgeylEdVQOXDZ2+v/ukwBJf9tPpo+n9V+ZsTtAPnQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":737607},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"589e620f2dcdd6cb4c7f76b52cce6732b84ce565","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.3_1770558148070_0.10042556454931661","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@kayelaa/canvas","version":"0.2.4","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.4","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"dee9d8acb2b48341b602b64259a320848d5afc58","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.4.tgz","fileCount":26,"integrity":"sha512-kIs129+1QYCUb9PIGMLF70aA23MF5iPmsacKrbGfMv7fs7yU8SEVdvV5xgyUKHAVhS7s2ksQsB3ERcsMmbw+vg==","signatures":[{"sig":"MEYCIQCBhDHEDBLuSc9WkBZwI0pQrjT0vMZ+C7thIeUCozH8YgIhALmbn+rsXhqqgLtZ8aECUR4KT355JScdc4qoy1FhWNjm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":745808},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"c7a0d14252dd919f7645a7d58bd8343b4598d74e","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.4_1770615893647_0.39772238313745323","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@kayelaa/canvas","version":"0.2.5","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.5","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"de3153680c6e03d3350d74ab34b9e8201244a27e","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.5.tgz","fileCount":26,"integrity":"sha512-9JS2rJqtcYRwjAS+I2Okt39alHdERuMru0QWjwwpQ35aKwd9H0jnXdY7N2WpJJuGghLVBnFKgUC2tWYNUYPemQ==","signatures":[{"sig":"MEQCIFbegmD6VP5DMTDm0Zk4MufZ6WxYhmccpPEKumKfNsOtAiBAY3XyK5WVcIGBP9J3d3FtPDL+IYtE5mtt7BHz6/mnOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":745808},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"c7a0d14252dd919f7645a7d58bd8343b4598d74e","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.5_1770616574804_0.713071268526162","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@kayelaa/canvas","version":"0.2.6","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.6","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"ca19d8971b6a905aa76eb37f82ff516b5a073964","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.6.tgz","fileCount":26,"integrity":"sha512-og8eakHaRPCmZTL8/Z99WI8Xfp5tyaOuQ/Fj0NEQXae4oP64wpH5QB2FpA+9qkebpQ/wbrnSmf/gEnpfzldY2w==","signatures":[{"sig":"MEUCIEPf8IQyQXPH3IkEKNEDtqem1xFPJv/5P1vnLH3LO9qPAiEA2YmVYJUcCfMm5uUpmuQ5rYDUqp0Ywy9D9vP2pOvGL9w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":752204},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"8593bdb62afe89d7dd837a3b8669a7667e509fd8","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.6_1770617707264_0.9657886159705233","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@kayelaa/canvas","version":"0.2.7","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.7","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"1dc9e9abf7209fb2404f233bf018e2a2ca209568","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.7.tgz","fileCount":26,"integrity":"sha512-iaM3VdXEJTIl5I8BSg8BGxJnR8df103GvWh73hnfLPkVakiDUHcJ8IQCrx9q4PirOgk4HfoYU9cHZLW34SylkA==","signatures":[{"sig":"MEYCIQDwrqtUW7rMUbOfDDNNOkNbt+tHL6V6asIfK6roRwKsgAIhAI8IpL8apPoFumAAL6cV/UdTaF4oXIQrDcTg8+q2yWGY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":781014},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"3d193beca32b0177e41e9f793391ae8da0fd85aa","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.7_1770625429583_0.5223493319799986","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@kayelaa/canvas","version":"0.2.8","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.8","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"89613d771ef343b33a75bf19be0af2143c7fbd10","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.8.tgz","fileCount":26,"integrity":"sha512-UHg8ujFKfwc/7IndvgPpQsz7Vo7EHfPmZWRcqCOUkc7l4FXyqNAON4RSvwuMCvA/JkLGTCIHrkfwvY6s1Nh91g==","signatures":[{"sig":"MEQCIChn+rS1Am5dRDD18CTEiflt50J69Pr/w80CoXVLyMoPAiA1/9Or3MUhtQRQP3vallF+guNI2/+sQCqD3ulZJBx4+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":782134},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"f82c1b52510694faf42ad02097aa7c2faea975ee","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.8_1770711950957_0.7364929093849839","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@kayelaa/canvas","version":"0.2.9","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.9","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"7b77e71f9acc2e7efe871b52eb38637dc28eac3a","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.9.tgz","fileCount":26,"integrity":"sha512-GmLOgXvP0cOklEtfajlOG/Ahvz12iT6rcYnAew1jRCACgvlQa0st8bhrH5JgV68EKZt5pfk0VcjYku2zZQ2Xfw==","signatures":[{"sig":"MEYCIQCL1FmsT2tJRXk8X4Gzop6JU6kvXlsrdNnho/7LIHGqEwIhAIINwnG/T4lKllnIsCkSzUeMUejIxkz4q9eyi00z9sf6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":780246},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"d206a5f6e7f22c061313ae8296d8181a10f8dd0f","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.9_1770725076400_0.1930031209999301","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@kayelaa/canvas","version":"0.2.10","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.10","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"30056a5ed30d6ea975524dac1e2f4f6b74a2b87f","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.10.tgz","fileCount":26,"integrity":"sha512-DxXJ/ZvoU75UuX4KIpeduKvCIk6ZVIuaL72upNxicd0Y0V0rBmWnnl11/ajyXSoV5xP+oR12JKwwbiVz6oZFjA==","signatures":[{"sig":"MEUCIChoXXvj/2hT2NQs6hY4FD00r1wLB64UebyifUh0ExizAiEA8TevBI+PQX02mPY17JHp033M8YPOMPq6whqSEk5bZiE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":798522},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"7dc5df80e730d831e6663f9fa5f8e3a8534895a8","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.10_1770898345788_0.876549429077204","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"@kayelaa/canvas","version":"0.2.12","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.12","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"3cd9bc677925c91e86b0a88a11a26f53a9ac89ad","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.12.tgz","fileCount":26,"integrity":"sha512-fPtD1E4pCTydvGbQ56b/v6Aye3e6lTWJ+Oy/oB+3SORZYJIy0ev0tUzgcVn0976DU5ASJymTEiRAqxxFbljbBw==","signatures":[{"sig":"MEUCIBU0QbKl1rqFKgHBCg8XPdm55LkaOfandkpoRQ02hHW1AiEA1aUQR/gCQibIlV4juoZnI7rHUBUBmNcizJSnFbLL/cw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":829230},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"0da037077809c51eb32101a4299b62c3e4f60082","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.12_1771391856376_0.5613746906859216","host":"s3://npm-registry-packages-npm-production"}},"0.2.15":{"name":"@kayelaa/canvas","version":"0.2.15","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.15","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"919f4858c638a8ab315260a5b50ed50e7abae091","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.15.tgz","fileCount":26,"integrity":"sha512-f8c3X5rN3Hd0A0teM1CQH+9FCegTjWvufUYnHsIphUUoZh6159cwGTHlKj7C9B6hY3hDNWRXdOFq9lcZi8Vgjw==","signatures":[{"sig":"MEUCIQClzWT5u7sxymX93jB2R9rb/IkHmn60yhUBiSaqCBnOQwIgLQkM2piocF4hQGwmrD1rMQyhmva0S5VdH6TMPE/gHqM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":829230},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"8b64f9ddc937f5af54a778bed802bb119588d379","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.15_1772933249148_0.8240173288960642","host":"s3://npm-registry-packages-npm-production"}},"0.2.17":{"name":"@kayelaa/canvas","version":"0.2.17","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.17","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"e4150d6bc960702d544809380b7a9aa9ca190caf","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.17.tgz","fileCount":26,"integrity":"sha512-mXk+rE2hEeatnZawmMlVRz+uiPZwG5i5UPtpnT7LVlPpiVofAjomAyW6ma0352Lk38UJQ5SV7LN5F4xxb7hwMg==","signatures":[{"sig":"MEQCIFxjf9QKoWGHs69uVxJU+IG20TtSv/RRyefEdgZ+Qw4xAiAUzx8569C721uClF74nm/WpQvAuOlcDxUDDuNtL11xXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":829230},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"e7c703bade09fa512d9ce97da47fef8010c2179d","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.17_1773743511758_0.03848762950274587","host":"s3://npm-registry-packages-npm-production"}},"0.2.19":{"name":"@kayelaa/canvas","version":"0.2.19","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.2.19","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"1066e86e7188161a795eea3cd29cd5aab1963950","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.2.19.tgz","fileCount":26,"integrity":"sha512-R8FfG3inHNYES+kiXA/AwbN9yYHUHDrWHSjA7oLzkLzKJJ0bNJ7osnF6GJtEWK5osFBe6B8lI4rQDTiGkFr8AA==","signatures":[{"sig":"MEUCIQDxmWrvHEFANZkCyGAw74Opw9Z69oAfJsQkXeQWHRwiIgIgUuLt4s1zN1rcYvM+98D5VXEmP0260AWHTq1mQXvf+Eo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":829230},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"db132e68cbd65d2c5116c5da388449d538a5e82b","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.2.19_1775044328342_0.5856089543732412","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@kayelaa/canvas","version":"0.3.0","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"author":{"name":"Kayelaa Cagara"},"license":"MIT","_id":"@kayelaa/canvas@0.3.0","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"dist":{"shasum":"95c97545417c606b42a74ab79c29c9d10d5ad131","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.3.0.tgz","fileCount":26,"integrity":"sha512-aJjx0v4twwMm9ogbUXild7V17wTWhODO/styynDaeaBDiGH8SiSq67XlYYddRSaKOs5x0YYdh8F0YLQ2zgXKyw==","signatures":[{"sig":"MEUCIAIh4COqiJ4Gklb9vtZXy97Dx+dzj1OjgT+9whrVQd1kAiEAtDLH2oO3BcxVVu7jnxBDcN1WMFp1usS3X8yO06bSB5s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1014498},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"gitHead":"5723cf44900cc005f65973fa34062aadada518c9","scripts":{"docs":"typedoc","build":"tsup","clean":"rm -rf dist","docs:clean":"rm -rf docs"},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"_npmVersion":"11.3.0","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","directories":{},"_nodeVersion":"24.0.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typedoc":"^0.28.16","@types/web":"^0.0.327","typescript":"^5.9.3","typedoc-plugin-markdown":"^4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas_0.3.0_1776344780893_0.4623551003299653","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@kayelaa/canvas","version":"0.3.2","description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","license":"MIT","author":{"name":"Kayelaa Cagara"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./kayla":{"import":"./dist/kayla.js","require":"./dist/kayla.cjs"},"./lea":{"import":"./dist/lea.js","require":"./dist/lea.cjs"},"./jsx-runtime":{"import":"./dist/jsx-runtime.js","require":"./dist/jsx-runtime.cjs"},"./jsx-dev-runtime":{"import":"./dist/jsx-dev-runtime.js","require":"./dist/jsx-dev-runtime.cjs"}},"scripts":{"build":"tsup","clean":"rm -rf dist","docs":"typedoc","docs:clean":"rm -rf docs"},"devDependencies":{"@types/web":"^0.0.327","tsup":"^8.5.1","typedoc":"^0.28.16","typedoc-plugin-markdown":"^4.9.0","typescript":"^5.9.3"},"_id":"@kayelaa/canvas@0.3.2","gitHead":"d86ef8bb4265728ab2595432bcf85585f91ac2a7","_nodeVersion":"24.0.2","_npmVersion":"11.3.0","dist":{"integrity":"sha512-KWK+XXbll/oVpgIwZE54wUtOwpFR0gGtGnGzUR4FA8AGWPrFmNM8c0kZY6sFBASgZ92UwV0EHWTfvFW1fVQDoQ==","shasum":"3d18289d28b6317545a8814f822073026c649022","tarball":"https://registry.npmjs.org/@kayelaa/canvas/-/canvas-0.3.2.tgz","fileCount":26,"unpackedSize":1030113,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDX26QMYG8dQLA7AcldH5RCc+iUMo75qoC5CL07mGZcHQIgW9EPMXolQFvr420Hclq4GQOrIM6sG7DXgcgqe4Nf/Ao="}]},"_npmUser":{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"},"directories":{},"maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/canvas_0.3.2_1776491852411_0.5907107755495988"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-05T14:00:22.162Z","modified":"2026-04-18T05:57:32.715Z","0.1.0":"2026-02-05T14:00:22.410Z","0.1.1":"2026-02-05T14:05:41.876Z","0.1.2":"2026-02-05T14:11:58.664Z","0.1.3":"2026-02-05T14:14:31.573Z","0.1.4":"2026-02-05T14:23:17.248Z","0.1.5":"2026-02-05T14:32:31.787Z","0.1.6":"2026-02-06T07:45:21.430Z","0.1.7":"2026-02-06T08:04:34.110Z","0.1.8":"2026-02-06T10:17:13.711Z","0.1.9":"2026-02-06T10:37:21.458Z","0.1.10":"2026-02-06T10:49:54.051Z","0.1.11":"2026-02-06T11:48:24.699Z","0.1.12":"2026-02-06T11:50:11.175Z","0.1.13":"2026-02-06T11:51:34.500Z","0.1.14":"2026-02-06T12:06:34.253Z","0.2.0":"2026-02-08T09:45:44.530Z","0.2.1":"2026-02-08T11:32:35.033Z","0.2.2":"2026-02-08T13:40:28.455Z","0.2.3":"2026-02-08T13:42:28.292Z","0.2.4":"2026-02-09T05:44:53.835Z","0.2.5":"2026-02-09T05:56:14.970Z","0.2.6":"2026-02-09T06:15:07.455Z","0.2.7":"2026-02-09T08:23:49.781Z","0.2.8":"2026-02-10T08:25:51.142Z","0.2.9":"2026-02-10T12:04:36.589Z","0.2.10":"2026-02-12T12:12:26.022Z","0.2.12":"2026-02-18T05:17:36.547Z","0.2.15":"2026-03-08T01:27:29.326Z","0.2.17":"2026-03-17T10:31:51.923Z","0.2.19":"2026-04-01T11:52:08.557Z","0.3.0":"2026-04-16T13:06:21.059Z","0.3.2":"2026-04-18T05:57:32.603Z"},"author":{"name":"Kayelaa Cagara"},"license":"MIT","keywords":["canvas","2d canvas","html5 canvas","canvas game","html5 game","browser game","web game","javascript game","js game","game library","game engine","2d game engine","lightweight game engine","tiny game engine","declarative game","jsx","hooks","react-like","use-tick","use-paint","use-rect","use-self","entity component","entity component system","ecs","typescript","lea","requestanimationframe","game loop","fixed timestep","variable timestep","collision detection","aabb","z sorting","pointer events","canvas rendering","2d rendering","functional game","declarative canvas","nodejs game","node.js game","server-side game","headless game","headless canvas","node game logic","nodejs simulation","server game engine","browser agnostic","isomorphic game","game simulation","authoritative server","game logic library","ecs javascript","game development"],"description":"Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.","maintainers":[{"name":"nealianacagara","email":"nealiana.kaye.cagara@gmail.com"}],"readme":"# @kayelaa/canvas\r\n\r\n**Standalone 2D game logic & entity library with declarative JSX + hooks (useTick, useRect, useSelf). Zero VDOM. LEA-powered ticker & scenes. Runs safely in Node.js / headless (no renderer needed) for server-side simulation + browser html5 canvas games.**\r\n\r\nThis library gives you:\r\n- JSX-like syntax to spawn and organize game objects (players, enemies, bullets, UI, particles)\r\n- Hooks (`useTick`, `usePaint`, `useSelf`, `useEntity`, `useState`, `useRef`, `useEffect`, `useExports`) that feel familiar but are **game-optimized**\r\n- Direct access to LEA's fast imperative core (positions, drawing, mouse, z-order, collisions)\r\n- Built-in audio helpers (`LiaAudio`, `LiaOscSFX`) for UI/game sound effects\r\n- Math & utility tools (`Vector2`, easing functions, raycasting, serializers, etc.)\r\n\r\n**Important:** This is **not** React-for-canvas.  \r\nThere is **no virtual DOM**, **no per-frame re-renders**, **no prop diffing**.  \r\nIt's a **very thin declarative layer** on top of LEA — all performance-critical code stays **imperative** and **direct**.\r\n\r\nMade by **Kayelaa Cagara** (@LianeKayee39 on X / GitHub) in Calamba, Philippines.\r\n\r\n## API Reference for missing things in this docs (worth checking if you want a true API reference for every variables, properties, etc)\r\n[API Reference](https://lianecagara.github.io/kayelaa-canvas-docs/)\r\n\r\n**The Documentation below would get INACCURATE in the future. Always visit the .d.ts files or the API Reference for reliable documentation.**\r\n\r\n## Quick Start — Fully Typed Version (copy-paste this)\r\n\r\n```tsx\r\n// demo.ts v1.3\r\n/** @jsxImportSource @kayelaa/canvas */\r\nimport {\r\n  createGame,\r\n  createScene,\r\n  createRenderer,\r\n  useSelf,\r\n  useTick,\r\n  usePaint,\r\n  FCProps,\r\n  useRef,\r\n  Kayla,\r\n  FCExports,\r\n  useExports,\r\n  useRect,\r\n  useFiberControl,\r\n  useInitialization,\r\n  LEA,\r\n  useGlobalClick,\r\n  useClick,\r\n  useCurrentTicker,\r\n  createContext,\r\n  KaylaRect,\r\n  useContext,\r\n} from \"@kayelaa/canvas/kayla\";\r\n\r\ninterface MouseFollowerProps extends FCProps {\r\n  initialX?: number;\r\n  initialY?: number;\r\n  color: string;\r\n  initialSpeed?: number;\r\n  freeXY?: boolean;\r\n}\r\n\r\ninterface MouseFollowerExports extends FCExports {\r\n  jump(): void;\r\n  getHealth(): number;\r\n  rect: KaylaRect;\r\n  health: number;\r\n}\r\n\r\nconst MainContext = createContext<{\r\n  members: KaylaRect[];\r\n  player: MouseFollowerExports | null;\r\n}>(null);\r\n\r\nconst MouseFollower: Kayla.FC<MouseFollowerProps, MouseFollowerExports> = ({\r\n  initialX = 0,\r\n  initialY = 0,\r\n  color,\r\n  initialSpeed,\r\n  freeXY = true,\r\n}) => {\r\n  const rect = useRect();\r\n  interface CableVecInfo {\r\n    remainingMS: number;\r\n    vec: LEA.Vector2;\r\n    totalDist: number;\r\n  }\r\n  const cableVecs = useRef<CableVecInfo[]>([]);\r\n  const cableConfig = useSelf(() => ({\r\n    durationMS: 1000,\r\n  }));\r\n\r\n  useGlobalClick((pos, type) => {\r\n    if (rect.isHovered()) return;\r\n    if (type === \"left\") {\r\n      const start = rect.pos.clone();\r\n      cableVecs.current.push({\r\n        remainingMS: cableConfig.durationMS,\r\n        vec: pos.clone(),\r\n        totalDist: pos.subtract(start).length,\r\n      });\r\n    }\r\n  });\r\n\r\n  useTick((delta) => {\r\n    const remaining: typeof cableVecs.current = [];\r\n    let newestTotalDist = cableVecs.current.at(-1)?.totalDist ?? 0;\r\n    for (const ref of cableVecs.current) {\r\n      if (ref.remainingMS <= 0.01) continue;\r\n      const { vec: target } = ref;\r\n      const dir = target.subtract(rect.pos);\r\n      const moveLen = (newestTotalDist / cableConfig.durationMS) * delta * 1000;\r\n      const added = dir.normalized().scale(moveLen);\r\n      rect.x += added.x;\r\n      rect.y += added.y;\r\n      ref.remainingMS -= delta * 1000;\r\n      if (ref.remainingMS > 0.01) {\r\n        remaining.push(ref);\r\n      }\r\n    }\r\n    cableVecs.current = remaining;\r\n  });\r\n\r\n  const fiber = useFiberControl();\r\n  const ticker = useCurrentTicker();\r\n  const mainContext = useContext(MainContext);\r\n\r\n  useInitialization(() => {\r\n    if (freeXY) {\r\n      rect.x = initialX;\r\n      rect.y = initialY;\r\n      rect.width = 40;\r\n      rect.height = 40;\r\n      rect.z = 100;\r\n    }\r\n\r\n    console.log(`New Follower: ${fiber.key}`);\r\n    console.log({ mems: mainContext.members });\r\n    mainContext.player = me;\r\n    return () => {\r\n      console.log(`Removed Follower: ${fiber.key}`);\r\n      mainContext.player = null;\r\n    };\r\n  });\r\n\r\n  useClick(() => {\r\n    const a = 40;\r\n    rect.width += a;\r\n    rect.height += a;\r\n    ticker.createTween(\r\n      {\r\n        ms: 3000,\r\n        easing: LEA.LeaUtilsII.easeOutExpo,\r\n        delta: -a,\r\n      },\r\n      (da) => {\r\n        rect.width += da;\r\n        rect.height += da;\r\n      },\r\n    );\r\n  });\r\n\r\n  const me: MouseFollowerExports = useSelf(() => ({\r\n    speed: initialSpeed ?? LEA.LeaUtilsII.randomLerp(150, 300),\r\n    health: 100,\r\n    getHealth() {\r\n      return this.health;\r\n    },\r\n    get rect() {\r\n      return rect;\r\n    },\r\n    jump() {\r\n      rect.y -= 100;\r\n    },\r\n  }));\r\n\r\n  usePaint((ctx) => {\r\n    ctx.globalAlpha = 1;\r\n    ctx.strokeStyle = \"white\";\r\n    ctx.lineWidth = 10;\r\n    for (const { vec: cable } of cableVecs.current) {\r\n      ctx.beginPath();\r\n      ctx.moveTo(rect.x, rect.y);\r\n      ctx.lineTo(cable.x, cable.y);\r\n      ctx.stroke();\r\n    }\r\n    ctx.fillStyle = color ?? (me.health > 50 ? \"#00aaff\" : \"#ff4444\");\r\n    ctx.fillRect(rect.left, rect.top, rect.width, rect.height);\r\n  });\r\n\r\n  useExports(MouseFollower, () => me);\r\n};\r\n\r\n// Setup (run once)\r\nconst canvas = document.getElementById(\"game\") as HTMLCanvasElement;\r\nconst renderer = createRenderer(canvas);\r\nrenderer.listenPointerUpdates();\r\n\r\nconst game = createGame({ width: 800, height: 600, updateHz: 1000 / 60 });\r\nconst scene = createScene(\"main\");\r\n\r\nrenderer.attachTo(game);\r\nscene.attachTo(game);\r\n\r\nscene.spawn(\r\n  <MainContext.Provider value={{ members: [], player: null }}>\r\n    <MouseFollower initialX={400} initialY={300} color=\"red\" />\r\n  </MainContext.Provider>,\r\n);\r\n\r\ngame.start();\r\n```\r\n\r\n```html\r\n<!-- index.html -->\r\n<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n  <meta charset=\"UTF-8\" />\r\n  <title>My Game</title>\r\n  <style>\r\n    body { margin: 0; background: #000; }\r\n    canvas { display: block; }\r\n  </style>\r\n</head>\r\n<body>\r\n  <canvas id=\"game\" width=\"800\" height=\"600\"></canvas>\r\n  <script type=\"module\" src=\"/main.ts\"></script>\r\n</body>\r\n</html>\r\n```\r\n\r\nRun with Vite (recommended):\r\n\r\n```bash\r\nnpm create vite@latest my-game -- --template vanilla-ts\r\ncd my-game\r\nnpm install @kayelaa/canvas\r\nnpm run dev\r\n```\r\n\r\n## No Vite/Bundler? Try our ESM Build! Pure HTML + JS + Import maps\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html lang=\"en\">\r\n\r\n<head>\r\n  <meta charset=\"UTF-8\">\r\n  <title>Kayla Canvas Test - No JSX</title>\r\n  <style>\r\n    body {\r\n      margin: 0;\r\n      overflow: hidden;\r\n    }\r\n\r\n    canvas {\r\n      display: block;\r\n      background: #111;\r\n    }\r\n  </style>\r\n\r\n  <script type=\"importmap\">\r\n  {\r\n    \"imports\": {\r\n      \"@kayelaa/canvas/kayla\": \"https://cdn.jsdelivr.net/npm/@kayelaa/canvas@latest/dist/kayla.js\"\r\n    }\r\n  }\r\n  </script>\r\n</head>\r\n\r\n<body>\r\n  <canvas id=\"game\" width=\"800\" height=\"600\"></canvas>\r\n\r\n  <script type=\"module\">\r\n    // demo.ts v1.3\r\n    // @ts-nocheck\r\n    /** @jsxImportSource @kayelaa/canvas */\r\n    import {\r\n      createGame,\r\n      createScene,\r\n      createRenderer,\r\n      useSelf,\r\n      useTick,\r\n      usePaint,\r\n      useRef,\r\n      Kayla,\r\n      useExports,\r\n      useRect,\r\n      useFiberControl,\r\n      useInitialization,\r\n      LEA,\r\n      useGlobalClick,\r\n      useClick,\r\n      useCurrentTicker,\r\n      createContext,\r\n      KaylaRect,\r\n      useContext,\r\n      createElement,\r\n    } from \"@kayelaa/canvas/kayla\";\r\n\r\n    const MainContext = createContext(null);\r\n\r\n    const MouseFollower = ({\r\n      initialX = 0,\r\n      initialY = 0,\r\n      color,\r\n      initialSpeed,\r\n      freeXY = true,\r\n    }) => {\r\n      const rect = useRect();\r\n\r\n      const cableVecs = useRef([]);\r\n      const cableConfig = useSelf(() => ({\r\n        durationMS: 1000,\r\n      }));\r\n\r\n      useGlobalClick((pos, type) => {\r\n        if (rect.isHovered()) return;\r\n        if (type === \"left\") {\r\n          const start = rect.pos.clone();\r\n          cableVecs.current.push({\r\n            remainingMS: cableConfig.durationMS,\r\n            vec: pos.clone(),\r\n            totalDist: pos.subtract(start).length,\r\n          });\r\n        }\r\n      });\r\n\r\n      useTick((delta) => {\r\n        const remaining = [];\r\n        let newestTotalDist = cableVecs.current.at(-1)?.totalDist ?? 0;\r\n        for (const ref of cableVecs.current) {\r\n          if (ref.remainingMS <= 0.01) continue;\r\n          const { vec: target } = ref;\r\n          const dir = target.subtract(rect.pos);\r\n          const moveLen = (newestTotalDist / cableConfig.durationMS) * delta * 1000;\r\n          const added = dir.normalized().scale(moveLen);\r\n          rect.x += added.x;\r\n          rect.y += added.y;\r\n          ref.remainingMS -= delta * 1000;\r\n          if (ref.remainingMS > 0.01) {\r\n            remaining.push(ref);\r\n          }\r\n        }\r\n        cableVecs.current = remaining;\r\n      });\r\n\r\n      const fiber = useFiberControl();\r\n      const ticker = useCurrentTicker();\r\n      const mainContext = useContext(MainContext);\r\n\r\n      useInitialization(() => {\r\n        if (freeXY) {\r\n          rect.x = initialX;\r\n          rect.y = initialY;\r\n          rect.width = 40;\r\n          rect.height = 40;\r\n          rect.z = 100;\r\n        }\r\n\r\n        console.log(`New Follower: ${fiber.key}`);\r\n        console.log({ mems: mainContext.members });\r\n        mainContext.player = me;\r\n        return () => {\r\n          console.log(`Removed Follower: ${fiber.key}`);\r\n          mainContext.player = null;\r\n        };\r\n      });\r\n\r\n      useClick(() => {\r\n        const a = 40;\r\n        rect.width += a;\r\n        rect.height += a;\r\n        ticker.createTween(\r\n          {\r\n            ms: 3000,\r\n            easing: LEA.LeaUtilsII.easeOutExpo,\r\n            delta: -a,\r\n          },\r\n          (da) => {\r\n            rect.width += da;\r\n            rect.height += da;\r\n          },\r\n        );\r\n      });\r\n\r\n      const me = useSelf(() => ({\r\n        speed: initialSpeed ?? LEA.LeaUtilsII.randomLerp(150, 300),\r\n        health: 100,\r\n        getHealth() {\r\n          return this.health;\r\n        },\r\n        get rect() {\r\n          return rect;\r\n        },\r\n        jump() {\r\n          rect.y -= 100;\r\n        },\r\n      }));\r\n\r\n      usePaint((ctx) => {\r\n        ctx.globalAlpha = 1;\r\n        ctx.strokeStyle = \"white\";\r\n        ctx.lineWidth = 10;\r\n        for (const { vec: cable } of cableVecs.current) {\r\n          ctx.beginPath();\r\n          ctx.moveTo(rect.x, rect.y);\r\n          ctx.lineTo(cable.x, cable.y);\r\n          ctx.stroke();\r\n        }\r\n        ctx.fillStyle = color ?? (me.health > 50 ? \"#00aaff\" : \"#ff4444\");\r\n        ctx.fillRect(rect.left, rect.top, rect.width, rect.height);\r\n      });\r\n\r\n      useExports(MouseFollower, () => me);\r\n    };\r\n\r\n    // Setup (run once)\r\n    const canvas = document.getElementById(\"game\");\r\n    const renderer = createRenderer(canvas);\r\n    renderer.listenPointerUpdates();\r\n\r\n    const game = createGame({ width: 800, height: 600, updateHz: 1000 / 60 });\r\n    const scene = createScene(\"main\");\r\n\r\n    renderer.attachTo(game);\r\n    scene.attachTo(game);\r\n\r\n    scene.spawn(\r\n      createElement(MainContext.Provider, {\r\n        value: {\r\n          members: [],\r\n          player: null,\r\n        },\r\n        children: [\r\n          createElement(MouseFollower, {\r\n            initialX: 400,\r\n            initialY: 300,\r\n            color: \"red\",\r\n          }),\r\n        ],\r\n      }),\r\n    );\r\n\r\n    game.start();\r\n  </script>\r\n</body>\r\n\r\n</html>\r\n```\r\n\r\n## Core Rules — Read This First or Your Game Will Lag\r\n\r\nThese rules are **not suggestions**. Breaking them causes serious performance problems in real games.\r\n\r\n| Do this                                                                 | Don't do this                                                                 | Why it matters (seriously) |\r\n|-------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------|\r\n| Define typed props with `interface MyProps extends FCProps { ... }`     | Pass props without types — let TS infer everything                            | Better autocompletion, catches mistakes early |\r\n| Use `FC<Props, Exports>` for components that expose methods             | Forget to type exports — parent gets `any`                                    | Parent can safely call `jump()`, `takeDamage()` |\r\n| Mutate `entity.x`, `entity.y`, `entity.z` directly                      | Duplicate position in `self.pos` unless needed                                | LEA uses real position for sorting/collision — duplication = bugs + slowdown |\r\n| Put mutable game logic/state in `useSelf`                               | Put velocity/health/timers in `useState`                                      | `useState` refresh = full re-run + child re-spawn → lag + GC pressure |\r\n| Use `key=\"enemy-${id}\"` on dynamic lists                                | Spawn `<Enemy />` in loop without `key`                                       | No key = no pooling/reuse → memory leak + thrashing |\r\n| Check `exportsRef.current !== null` before use                          | Assume child always exists after spawn                                        | Child can die → ref becomes stale → crash |\r\n| Use `event.preventDefault()` when paused/dead                           | Run full AI/physics when game-over screen is visible                          | Wastes CPU for invisible work |\r\n| Return **clean, typed public API** from `useExports`                    | Return entire `self` or `entity` to parent                                    | Breaks encapsulation — parent can break internals |\r\n\r\n## The Main Hooks — Explained with Real, Typed Code Snippets\r\n\r\n### useSelf — Your main stable god-object (use this for almost everything)\r\n\r\n```typescript\r\nconst self = useSelf(() => ({\r\n  // This object never gets recreated — mutate it freely\r\n  health: 100,\r\n  pos: new Vector2(400, 300),\r\n  vel: new Vector2(0, -200),\r\n\r\n  tick(delta: number) {\r\n    this.pos.x += this.vel.x * delta;\r\n    this.pos.y += this.vel.y * delta;\r\n\r\n    if (this.pos.y < 0) this.vel.y *= -1; // bounce top\r\n    if (this.health <= 0) {\r\n      // death logic — no refresh needed here\r\n    }\r\n  }\r\n}));\r\n\r\nuseTick((delta: number) => self.tick(delta));\r\n```\r\n\r\n**Edge case — one-time initialization with ref guard**\r\n\r\n```ts\r\nconst self = useSelf(() => {\r\n  const audio = new Audio(\"bgm.mp3\");\r\n  audio.loop = true;\r\n  audio.volume = 0.3;\r\n  return { audio, initialized: true };\r\n});\r\n```\r\n\r\n### useEntity — Direct access to the real LEA entity\r\n\r\n```ts\r\nconst entity = useEntity();\r\n\r\nuseTick(() => {\r\n  entity.current.x += 5;           // move right\r\n  entity.current.z = entity.current.y;     // sort by Y position (higher = drawn later)\r\n  entity.current.width = 64;       // resize dynamically\r\n});\r\n```\r\n\r\n**Edge case — dynamic z-layer based on parent**\r\n\r\n```ts\r\nuseTick(() => {\r\n  entity.z = playerEntity.y > entity.y ? 10 : -10; // behind or in front of player\r\n});\r\n```\r\n\r\n### useTick — Where all game logic lives\r\n\r\n```ts\r\nuseTick((delta: number, event: KaylaEvent) => {\r\n  if (isPaused) {\r\n    event.preventDefault(); // skip rest of tick for this object\r\n    return;\r\n  }\r\n\r\n  entity.x += speed * delta;\r\n});\r\n```\r\n\r\n**Edge case — completely skip when dead**\r\n\r\n```ts\r\nuseTick((delta: number, event: KaylaEvent) => {\r\n  if (self.dead) {\r\n    event.preventDefault();\r\n    return;\r\n  }\r\n  // normal movement & AI\r\n});\r\n```\r\n\r\n### usePaint — All your drawing code goes here\r\n\r\n```ts\r\nusePaint((ctx: CanvasRenderingContext2D, event: KaylaEvent) => {\r\n  ctx.fillStyle = self.health > 50 ? \"#00ff00\" : \"#ff4444\";\r\n  ctx.fillRect(entity.x - 20, entity.y - 20, 40, 40);\r\n});\r\n```\r\n\r\n**Edge case — disable LEA's default rectangle fill**\r\n\r\n```ts\r\nusePaint((ctx: CanvasRenderingContext2D, event: KaylaEvent) => {\r\n  event.preventDefault(); // skip LEA auto-draw\r\n  // your custom sprite / circle / text\r\n  ctx.beginPath();\r\n  ctx.arc(entity.x, entity.y, 20, 0, Math.PI * 2);\r\n  ctx.fillStyle = \"red\";\r\n  ctx.fill();\r\n});\r\n```\r\n\r\n### useState — Only for rare structural changes\r\n\r\n```ts\r\nconst isGameOver = useState<boolean>(false);\r\n\r\nif (lives <= 0) {\r\n  isGameOver.set(true); // → full refresh → show game over UI, spawn particles\r\n}\r\n```\r\n\r\n**Dangerous example — never do this**\r\n\r\n```ts\r\nconst pos = useState<Vector2>(new Vector2(400, 300));\r\n// every frame pos.set(...) → game freezes in 2 seconds\r\n```\r\n\r\n**Safe & common use cases**\r\n- `isDead` → spawn death animation / particles\r\n- `currentLevel` → reload map / change music\r\n- `weaponType` → swap sprite / fire rate\r\n- `gameMode` → menu → playing → pause → game over\r\n\r\n### useRef — Cheap, persistent storage\r\n\r\n```ts\r\nconst timer = useRef<number>(0);\r\nuseTick((delta) => {\r\n  timer.current += delta;\r\n});\r\n```\r\n\r\n**Edge case — keep audio alive across refreshes**\r\n\r\n```ts\r\nconst sound = useRef<HTMLAudioElement | null>(null);\r\n\r\nuseEffect(() => {\r\n  sound.current = new Audio(\"hit.mp3\");\r\n  return () => {\r\n    sound.current?.pause();\r\n  };\r\n}, []);\r\n```\r\n\r\n### useExports — Let parents control you (with types)\r\n\r\n```ts\r\ninterface PlayerExports {\r\n  jump(): void;\r\n  takeDamage(amount: number): void;\r\n  getHealth(): number;\r\n}\r\n\r\nconst Player: FC<PlayerProps, PlayerExports> = () => {\r\n  // ...\r\n\r\n  useExports(Player, () => ({\r\n    jump() {\r\n      self.vel.y = -400;\r\n    },\r\n    takeDamage(amount: number) {\r\n      self.health -= amount;\r\n    },\r\n    getHealth() {\r\n      return self.health;\r\n    }\r\n  }));\r\n};\r\n```\r\n\r\nParent usage:\r\n\r\n```ts\r\nconst playerApi = useRef<PlayerExports | null>(null);\r\n<Player exportsRef={playerApi} />\r\n\r\nuseTick(() => {\r\n  if (playerApi.current) {\r\n    playerApi.current.jump();\r\n  }\r\n});\r\n```\r\n\r\n**Best practice** — always type exports and return clean API\r\n\r\n```ts\r\nuseExports(Player, () => ({\r\n  jump: self.jump,\r\n  takeDamage: (amt: number) => { self.health -= amt; },\r\n  // defensive copy to prevent parent mutation\r\n  getPosition: (): { x: number; y: number } => ({ x: entity.x, y: entity.y })\r\n}));\r\n```\r\n\r\n## Do / Don't Table — Semantic Best Practices\r\n\r\n| Do this                                                                 | Don't do this                                                                 | Why it matters (semantic & performance) |\r\n|-------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------|\r\n| Define `interface MyProps extends FCProps { ... }`                      | Pass props without types — let TS infer everything                            | Better autocompletion, catches mistakes early |\r\n| Use `FC<Props, Exports>` when component exposes methods                 | Forget to type exports — parent gets `any`                                    | Parent can safely call `jump()`, `takeDamage()` |\r\n| Mutate `entity.x`, `entity.y`, `entity.z` directly                      | Duplicate position in `self.pos` unless needed                                | LEA uses real position for sorting/collision — duplication = bugs + slowdown |\r\n| Put mutable game logic/state in `useSelf`                               | Put velocity/health/timers in `useState`                                      | `useState` refresh = full re-run + child re-spawn → lag + GC pressure |\r\n| Use `key=\"enemy-${id}\"` on dynamic lists                                | Spawn `<Enemy />` in loop without `key`                                       | No key = no pooling/reuse → memory leak + thrashing |\r\n| Check `exportsRef.current !== null` before use                          | Assume child always exists after spawn                                        | Child can die → ref becomes stale → crash |\r\n| Use `event.preventDefault()` when paused/dead                           | Run full AI/physics when game-over screen is visible                          | Wastes CPU for invisible work |\r\n| Return **clean, typed public API** from `useExports`                    | Return entire `self` or `entity` to parent                                    | Breaks encapsulation — parent can break internals |\r\n\r\n## Compatibility & Tooling Notes\r\n\r\n- **Primary target**: Browser + Vite (vanilla TS or JS)\r\n- **React coexistence**: Yes — works side-by-side without conflict.  \r\n  Just add to `tsconfig.json` or `vite.config.ts`:\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"jsx\": \"react-jsx\",\r\n    \"jsxImportSource\": \"@kayelaa/canvas\"\r\n  }\r\n}\r\n```\r\n\r\n- **No JSX?** Use `createElement` as fallback:\r\n\r\n```ts\r\nscene.spawn(createElement(Player, { speed: 300 }));\r\n```\r\n\r\n- **Node.js**: Non-canvas parts (`Vector2`, math utils, serializers, timeouts, tickers) work fine.  \r\n  Canvas/audio parts throw or do nothing (no DOM/Web Audio API).\r\n\r\n- **Typescript**: Make sure to use this with typescript tooling for enhanced descriptions/documentation in the IDE.\r\n\r\nHappy building!  \r\nIf you make something cool, tag me on X @LianeKayee39 — I’d love to see it.\r\n\r\nMade with love in Calamba, Philippines — 2026  \r\nKayelaa Cagara","readmeFilename":"README.md"}