{"_id":"chessiro-canvas","_rev":"48-b227f251cc4a108d1e655d6ba62299d8","name":"chessiro-canvas","dist-tags":{"latest":"0.1.49"},"versions":{"0.1.0":{"name":"chessiro-canvas","version":"0.1.0","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.0","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"9b32a100beb1fa1e323f2e9ebc234d07d12990b6","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.0.tgz","fileCount":27,"integrity":"sha512-tCNS6CgPR6EM8d3ZAa0oxe2hpECWBassmyrPC63lU4sbQpi5FaA4MzItD20CSIgN6XOde5UGfsj0cGrRuQZ1Ug==","signatures":[{"sig":"MEUCIQD31vhcFbNjb75V+NLQR62TtUIAhh8MHUKosHa2ubaY9gIgELpLQA0c12W59WHWYMoge3RTkuxLOA/6rif7SB5+pyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":326130},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles":"./dist/styles.css"},"gitHead":"17a8e61efbed1dfc31b9b0d36922fc766a6bb9db","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.8.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.5.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.0_1770942150264_0.24969025438256787","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"chessiro-canvas","version":"0.1.1","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.1","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"e036fc8c0c176495246522ff310f896c5a7e19c2","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.1.tgz","fileCount":27,"integrity":"sha512-N4v6Tl4MmVFHa/Fs+ql8F1K3kmhrAzTd1cK0J7cHtB+3eX+36qzl6s2tS02c23oHltCR3M29tfqF205jbFvelA==","signatures":[{"sig":"MEYCIQDhzSJ4VAZCP5kEZ+jTFiYyL0Bdxx3f9CYV5InxSBxZLQIhAINvAdBzorRAqzyJRWQkRo6G/0SNker99x81RL6aJc3C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":326148},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles":"./dist/styles.css"},"gitHead":"17a8e61efbed1dfc31b9b0d36922fc766a6bb9db","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.8.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.5.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.1_1770943042808_0.980882106106828","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"chessiro-canvas","version":"0.1.2","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.2","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"a357804e21a2c10cac0e4f303f4b0ae157d07074","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.2.tgz","fileCount":27,"integrity":"sha512-PG9s+liKNefEw7LoM1m/pJr4gEyIQx3IrcaPtmTt43bGEnLdgluIg/c0Q5fkSbym/l+yKTZk+CH+AVDE0Wvn/A==","signatures":[{"sig":"MEYCIQCsJqqGvdSBHT0Z/+vdfT2zA4ZC52wh3Rv+IeLs6YozYAIhAJXdb1XEAHg8lPUYlcoviH0TkWw5HQpkKT5FHE+wxEXs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":329890},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles":"./dist/styles.css"},"gitHead":"f128603a93374306b1fa23ac05f67587e0f7a229","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.8.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.5.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.2_1770943604659_0.1886562519019952","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"chessiro-canvas","version":"0.1.3","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.3","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"21e0e7bf86557fdd332b6a8c0c9b2155c0ab5984","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.3.tgz","fileCount":27,"integrity":"sha512-z/iYprCYoO4TClv0eFPJXVenKRvXvEhCs0LeAVMc4bdbvTLcPaSre/qnGkp6552aKVr2U0f2EZpQ/ktu8mVyoQ==","signatures":[{"sig":"MEYCIQCbZVxI2Ulz1IooL2MAtIbr4CX9PclayAZSAJEGPnPr3gIhAOa/YoGNsq/+rTFeI5zNzXQd6DWtqj0MHbEbkOpAx9ee","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":332432},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles":"./dist/styles.css"},"gitHead":"f24d83cf768243169be912d9d0f8ed4282eae17d","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.8.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.5.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.3_1770943960651_0.3457820023589002","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"chessiro-canvas","version":"0.1.4","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.4","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"036656295aec1a45891340a59114ef5f7e089f42","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.4.tgz","fileCount":27,"integrity":"sha512-+yesYBv/zVfj14ZHttGXspywNi02EXMAKpHCo6nOfIKE1+QBxqpDq6bKOt0KORK7lX3wGFUiorN+hQ9ScpsuAw==","signatures":[{"sig":"MEYCIQDTopYioR0UkYyXib63R6Oa237uBYi7taNfB1GMlB89bAIhAKUp59V7SQT8HfE7oUka8XpYcyP6UxWFdwhopH0xtNTZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":332518},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles":"./dist/styles.css"},"gitHead":"76170bc5b3a14667794794703a93af4ac0dbf91e","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.8.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.5.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.4_1770944686954_0.8328785383094965","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"chessiro-canvas","version":"0.1.5","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.5","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"2fc45934bcd1fb35d8023359687435f5fc34a488","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.5.tgz","fileCount":27,"integrity":"sha512-af4rwLmH/XIgRvhgh120Ehy67wg+AM9tNeWCVSvyEsdReshZYRFkSqLWNTur0PKDe6VypOA5YOLsePmhxm6djQ==","signatures":[{"sig":"MEYCIQDbo2Lg6di9ND+Bze7RXJNjcV6JQ1AOSiNwWc/uatug0QIhALPtXRsDrLVawncJtvDnlgUQVlHHGnoWliJnvLt2HoFw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":332670},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles":"./dist/styles.css"},"gitHead":"64cd0b016f4cc530e6ddb1f1978b987a660e1bfa","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.8.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.5.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.5_1770947467242_0.14811624622302566","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"chessiro-canvas","version":"0.1.6","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.6","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"6342e1cdb4df7860bedb6529d092d6871eeb9964","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.6.tgz","fileCount":27,"integrity":"sha512-NqpgX5CuxQRc3Xg9loi9Lks2T0UtNSquAsewRYN5OQ3janlDptimP1Mwe8eqfEsHKOhkHVEE33dvScp2OSyI0w==","signatures":[{"sig":"MEUCIG716bCg+rspFmU0M8No883GZNcMQRfrgDcPBMkQ9QmOAiEAq+zmmyZRuOJ6IJKT1ED08kSGBrypz8gRwksY3YFyeOA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":342349},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"006358575742dcc2653de08792ef255eaee779a6","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.6_1771861966727_0.33570573649282265","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"chessiro-canvas","version":"0.1.7","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.7","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"529e79c244f0d5d2f5c4090fe739406fb43182c8","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.7.tgz","fileCount":40,"integrity":"sha512-OJb1TLaWXZKKzRVqUh2UzgpQfjR1gsZezmsixQ3REHvlTiOKZy1vVbTddx6nfNYS9F4S6B4wXQye9PLJGDaN5A==","signatures":[{"sig":"MEQCIBvU3GKFoZoTJbZJCQXU1wmAYfoRa6XfS3zR/rAadOTJAiBnxwvb1pdwHTDd5sTCuujiXQmyyS1SN2h3sJ+Mu074pQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":411891},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"6669d59d345e5b8ac3ba5f252f9f19e37434e0e0","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.7_1771924328387_0.9769886852924303","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"chessiro-canvas","version":"0.1.8","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.8","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"14b23db49759b89393c86a2f5d7132907170a756","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.8.tgz","fileCount":41,"integrity":"sha512-wXgybVp1Rd4GbWYODCyLV+yqTvkv9KF1dtytf8hGiPA8x2AKvpADYACj2g4pok7kY0kGZjRP0e9ZCKhG43LaXw==","signatures":[{"sig":"MEUCIQCr9S2H2CQC7awqrVpQvvvCtVhyOfs3bcHdneeVARVH1QIgZMn5Eddoi4cFjn63cFhtz92o7lCbKTVwI+V38bP/0kM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":655153},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"6669d59d345e5b8ac3ba5f252f9f19e37434e0e0","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.8_1771931724944_0.38990738228576305","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"chessiro-canvas","version":"0.1.9","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.9","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"b16dfd9c1c2a54e715b6558e3e029f4f77b78e43","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.9.tgz","fileCount":41,"integrity":"sha512-W1ZWbKiB5OzGaeg6G+GSSm2ALg/H5uDePNJDrr1gg9DWBmE07T/1t7sIY1lZyKzeic/+vk9lGG90thpWW/n4VQ==","signatures":[{"sig":"MEYCIQDu8XUiIqc29Ot2MK0ghrRPHzxYayTJTd2beKiOqZ0aNwIhAOrxuX0MTVg8lhBkx0y7cAWY/d+P7z7lIhsxz6/HwbDM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":658894},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"16939c5f0d3b13bf67625a5e3a16c1e5d07ea071","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.9_1771933349938_0.14287170266102378","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"chessiro-canvas","version":"0.1.10","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.10","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"e8f7d973714463b1c1e882d27358a3567ddd11d6","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.10.tgz","fileCount":41,"integrity":"sha512-1eEdvOPgSg4Plkt3IjD4WVnSOpYaupVMzD8BvQqYNMD+q8JFpVkJdM2EVIrbJDv3dx+e5kuubs5I8/Ozrpv8jw==","signatures":[{"sig":"MEUCICS10fzEgnKIA7lMc7alkbTciEeX8FGN+2EIZJc9lGhXAiEAwhKUmnI3nSLpfEfL5Zvh8qlwGACGXpJguecVjDsd5sQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":662052},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"d85255905f8723b8b4a7f17b98566d9f0fdd7229","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.10_1771933615118_0.9057398933265106","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"chessiro-canvas","version":"0.1.11","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.11","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"0d783fb3e012180e256c37639ecf0a2840ef9560","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.11.tgz","fileCount":41,"integrity":"sha512-CtK36N3fZ/qIgm18+h4w0dQN3Xdrs+yjXN3bLyELm2d+S29zvMge7YlOsFxMgmStJQL4sFapaH6F4ZqgTcVR6w==","signatures":[{"sig":"MEUCIGe1Q4Rr4TRykkg4PmQIo7USyYqmrORMOEBfB195RNsaAiEAkdoGmhtT8XBncRvnlVaS3A46KQ7LN6bRUIAAWgMRVjY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":674508},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"3d43b6201622caf6fd1412bf49afc4952e7eb580","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.11_1771934031424_0.2539529630001123","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"chessiro-canvas","version":"0.1.12","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.12","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"f8cc67fb3a2ba9eb8160ae244d9b76cae0f9340f","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.12.tgz","fileCount":42,"integrity":"sha512-eu1UmqPFJ+BdK4AM1coHCYBd9DtRyjF3cjp9BY8ILVSmXdhJOPbyyWnm05hq3ErT5mbjyAWJP/q5XaxGEopGZg==","signatures":[{"sig":"MEUCIQCbY2/yVOTQimzpcHlS856OvBsKRKJ6OF9ZQc6JVUu5hwIgLDJo/X0P9OjjXxc+xB1NWiJhEKLJ5BSZaZWhiKENqh8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424183},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"9f25ea1d5911736daf7b54a119a75b9914e12281","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.12_1771950731606_0.7025312921594382","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"chessiro-canvas","version":"0.1.13","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.13","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"f0e8086bb05e5cefa24a75941b02ab83b0f2c3d1","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.13.tgz","fileCount":42,"integrity":"sha512-2Ex++lDiem3KD7v5JDJ5sylXG+G5sPPdZKJyPf58xe2ZruCEDoZyjpqBEEpEljvaYF0PNYZKqlDh3C4l2VdkMg==","signatures":[{"sig":"MEUCIQCRP9a1hfUH+T54z66P0PbhlwEFVAxHI/KhigOXL+JUXQIgVUVJfNzmuui3yS88PPyM11743ywhhcw2cmLCr09zUUY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424719},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"f9866ac51b3911638ea2bd2596deeca2bff372b7","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.13_1771953377016_0.08807882848476756","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"chessiro-canvas","version":"0.1.14","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.14","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"d9121486544034059839ccd5788fd925439ac959","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.14.tgz","fileCount":42,"integrity":"sha512-yjksT1nEPsRcEDWPxiOYEavdXBTuFQ3euxKFJFWVkJFDvV4p9oSvehmXQtHoOkQFV2j+CUVx8Gp7CbSHlzK6CA==","signatures":[{"sig":"MEQCIH1iVBCnJwuiRpYYzeJ2Qag7Ltf2IfrMoobJZ5KOpHDCAiBVZmmCSv3WN/t/PaMFBcfKjd/3S075DNB9oDy2G+9lHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":439648},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"0b7906ea8a6047f2c669a4f73d1ed53a127c733c","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.14_1771963415430_0.5590264187022493","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"chessiro-canvas","version":"0.1.15","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.15","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"eab4e2da85be9e87eb99c0c4a04d87b77eda46ce","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.15.tgz","fileCount":42,"integrity":"sha512-K04uOgcYOGF99wfOu9BCQGZSc8bLiZjaWnC/Xr5HOvlGWdcZoLi7PAz1cxsQc2kIX6k0QiZkBv2z+j6aXCBoxg==","signatures":[{"sig":"MEUCIQC6p+vrc9pfcwEo0Kde7ZNCVUp15eCZLHRV4kEZxZySdwIgDxFXVS+KVRBtxdppdJr4DOaByEWAQF2ykMzCGIH6pRQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":439946},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"727f552fb7fc573a9c8e41980fd18180973795c2","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.15_1772015502758_0.2283707208984298","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"chessiro-canvas","version":"0.1.16","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.16","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"18eb0d9e055897a6aff8ecc4128fd7b73873cc10","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.16.tgz","fileCount":42,"integrity":"sha512-dpVbQxGh0jlOAzujRsRANLNtA6+NW+q11E7jfKVUGtPu6ZN3VSXyLlNX/cXh9cDNSOlywQvK1XnPh6z4f7imKg==","signatures":[{"sig":"MEUCIQCtF/MGoI3syenasQukxaoo7S2hf3W5eGQetxqUNsFtygIgNIkQm7gdgbkjCAalnLqLafH7eJ1Hb2tFUB5TnzIIQ5c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":439546},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"f4e1817fbfff7338407d0efe4a73ad17819d5b97","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.16_1772065784657_0.7714261439414192","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"chessiro-canvas","version":"0.1.17","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.17","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"a7730d147e4abcf2df1e9183f46821e9101047bd","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.17.tgz","fileCount":42,"integrity":"sha512-+WCx+a5xdwxAOdNiwZsZQJCEJLJenrgcVNT4/I3bjfib84tujqdGmgtdIEKq2LuXP+3SGSbF6c8HPaN23829uA==","signatures":[{"sig":"MEUCIBH0MKwRS7YzohRWjWapLHGB+P1Lfrj+bhonqsp4PQfQAiEA9RoIW0taamNvUVERQoU1IXfVS53bCNt2RBSusFnOlBg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440923},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"87b869fb5338444959d442e6a8b6caaa3d4b575f","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.17_1772165600557_0.4066160225187754","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"chessiro-canvas","version":"0.1.18","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.18","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"ab0a350e0c2ef657761d5af03b1f597131ac7f7b","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.18.tgz","fileCount":42,"integrity":"sha512-rX19D0nUvWUqjAy/uDLU7+xHeo4USSSunqc7egmtvgiFKmGfwL4L3V4VC7+azk/03VXC0kh2YpphJxrgNy5lJA==","signatures":[{"sig":"MEYCIQDLOMzdSRJ7Wp9QBX6urAKKMGIt+1NGzjDwqY2y38dDUgIhANZBY6U4Aj3TkdR67mjL+yvBilCKkkm6r4r1bENTXjAF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":444980},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"b28b70fc47faf83fa38dae7b6412df233d75f2db","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.18_1772709822621_0.8202816457356303","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"chessiro-canvas","version":"0.1.19","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.19","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"0c081248299800292e0b438d9fe06eba729260c2","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.19.tgz","fileCount":42,"integrity":"sha512-6GWoaWf8WjSwtXI9fcooasR7ltUTy/7WoEFczxkIC1/nfN5gm5nbRNcUTyt5phqZjBSby/bbUUEIPWzmBCg42Q==","signatures":[{"sig":"MEYCIQCc88Q7/xn+GDzUR9BSoIsyY+oOS77LKXE+K2HAvuhavAIhAIZEeh+615TH380eDq5QTM1JKlvlxGajayMqdj7twAh2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":444980},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"7b763f5bcb4321d7d7cba5a2aa26b42f2fc64e03","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.19_1772710137380_0.009570363081708333","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"chessiro-canvas","version":"0.1.20","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.20","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"93c899e5c914dbbae8fe286e192c52e28cf43881","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.20.tgz","fileCount":42,"integrity":"sha512-YRd6Le1OsaS9Ayo3wS4ItlzxlNf5Gi+U0fPouuKVXTa6UDflI1yOHEf2+f5NRsH627i33OkZoyx5aTyTTOgYww==","signatures":[{"sig":"MEYCIQDHMBuFh02gioxKjHhFTUVQs7sJIwA4aDjlBHzYoy9XTQIhAJhRvedwimrIOGODFKJHTwhQv2fCgb325H/T4evJaJeY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":444980},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"7b763f5bcb4321d7d7cba5a2aa26b42f2fc64e03","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.20_1772710615792_0.7892952121972814","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"chessiro-canvas","version":"0.1.21","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.21","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"e5904c7749599c595e82db3dcb04c2ca27ce40dd","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.21.tgz","fileCount":42,"integrity":"sha512-fC+/wJ0eAocRURh3OhUJAVRaUruSyPs+12aqfgX9mUnlRdTFD7VDLisW4m1ubTZb8NodVS05Nj7XWAhpByyWHQ==","signatures":[{"sig":"MEQCIEcltIELfNoCL1rNftpVHlwG0zPDIVR6dl2f0BGN7/pJAiB1LTQOT6glCj5Rcgqj2xC7xxFjVxNt5+uXG/mjorZpUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":444980},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"7b763f5bcb4321d7d7cba5a2aa26b42f2fc64e03","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"10.9.5","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.21_1772710825588_0.0003020722114768226","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"chessiro-canvas","version":"0.1.22","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.22","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"ef52f46992df8dad3b0193de7ca793530dc933ec","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.22.tgz","fileCount":42,"integrity":"sha512-9wbO60AojA1TVu+xdVBbFmNpUyc4UDo5RHGiSRhI03zjqazwiAA36DR5cb7d4H+HJwv6bK18c/ZCHSEXCG0Mww==","signatures":[{"sig":"MEYCIQCIRQ1cxAqr4pND3UcehcghR2L5LbiEq4gbXBt5ewwo0wIhAI098oLAfdZz6uI4uODPP+1MqlZ7GSC2HlY73owXWOhc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":444980},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"7b763f5bcb4321d7d7cba5a2aa26b42f2fc64e03","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.22_1772711089490_0.9790527560455804","host":"s3://npm-registry-packages-npm-production"}},"0.1.23":{"name":"chessiro-canvas","version":"0.1.23","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.23","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"8a1932d08b96fece9ceb4c1196560b17da1539f3","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.23.tgz","fileCount":42,"integrity":"sha512-MV2h17PCesthKa0rWbi+yTnrDYXNTH6lfzcIABdIQ9UKInOtIOYSqDqVRWTigV5fMo6RSt/n+Vw763ocTDrEgQ==","signatures":[{"sig":"MEQCIB0Sd8Rk2WZYVTUrT7Q1E3k8y9A2IbZTG3c+KaskpDfAAiBHz4m5hyp8OnADEnETOISF0VtJ5v120loDMCVdVI2vmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":446183},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"d1f123962768c9172e0ba8bfadca21d11fd731fd","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.23_1772711560483_0.42717491147316133","host":"s3://npm-registry-packages-npm-production"}},"0.1.24":{"name":"chessiro-canvas","version":"0.1.24","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.24","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"1ff915837aa92ae3d67ecf36a406e9cf999d2e57","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.24.tgz","fileCount":42,"integrity":"sha512-/bPChNBRkuX5qNggie2ydpd5iZ1NSJuZLf86191T7Pg3BIo+k8gNzf+0Z6W+cKL1CcLGViqS0DiQ5VefvByqGQ==","signatures":[{"sig":"MEUCIQCpUyZNNGLnzPBHccssMBAnhgQCJj8im/ETlvYhS5fY0AIgOdDYw8uoGq6TkCe98mhTFoRHHIh1qrFBg9Hlc1JzFGw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":451933},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"7912c316d4cdb4f48661662f060491d9f49c7f2a","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.24_1772937749103_0.3864451578097321","host":"s3://npm-registry-packages-npm-production"}},"0.1.25":{"name":"chessiro-canvas","version":"0.1.25","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.25","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"2f22f8ee0c1041d9cfe5fcae141062a91f64d429","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.25.tgz","fileCount":42,"integrity":"sha512-b8Bsp827bMHjTwh4TljyJpAXHGcfyJgDmbuzi1tEJDV+pmuaoXX9MEdPSyYGGWloWuxS7lmxo5MGBpTFRuCXOQ==","signatures":[{"sig":"MEUCIGNWmXG1705lH8STrpDjjHmy/OKwuXbvaazXD8eTLbn3AiEAjyl6gGGjlEUrZJjI89pyPXnff4+A1Und9ZZXBxBrBjQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":458697},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"579d66e2bbeaf3cd1bb2032c92939cfda8c2aab5","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.25_1773056357816_0.36204642299617573","host":"s3://npm-registry-packages-npm-production"}},"0.1.26":{"name":"chessiro-canvas","version":"0.1.26","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.26","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"b721313d7541454bddae598ad13b4aa7c4ff0fcb","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.26.tgz","fileCount":42,"integrity":"sha512-WX+5PjXC9jjjuqYlbSzxoBFFgmYnaX5J8wMG/XZ0zTuoc0xEgXy2AMg51BXPX/Nudxvk6pw9nfqSILrxt0V9AQ==","signatures":[{"sig":"MEUCIQCGR97qE1ulshC0+5Qj1CcfoJ16eKrq3Sr054tDTfBL1gIgU0D0QaTkitmo4uXm8JS2ItRSoTT7rjiD2e3wQZ618HQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":458697},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"8f99a0a481bd970d13f302dcdefeb34d00eb5187","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.26_1773056590275_0.5255065250891049","host":"s3://npm-registry-packages-npm-production"}},"0.1.27":{"name":"chessiro-canvas","version":"0.1.27","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.27","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"482e369a083a451a4b965ff976ce8540fecce95c","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.27.tgz","fileCount":42,"integrity":"sha512-GIlO4gEHr4jzyzrs9hrUtzh3GRKPUlPb5G+XHOER+I/BgqmkNvej1A4L5gun7eIZ14fe71Bg1wCjRs/EGJd20w==","signatures":[{"sig":"MEYCIQD9xqt1D6RpixqKfqk7O8ekmB4kncF3clNI1S/aEBS1DgIhAOYHzDV7vD0fGmNcH7kmP6D34cK1C9Z9X22WAGE2vI+3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":462210},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"b3d2e3470494148165029d35dfbc3b55a7b0955c","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.27_1773056916875_0.45572172123119015","host":"s3://npm-registry-packages-npm-production"}},"0.1.28":{"name":"chessiro-canvas","version":"0.1.28","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.28","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"a0fb0293d71baee78677ba1db658d3578001cab1","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.28.tgz","fileCount":42,"integrity":"sha512-MRY02B7rBdrQoSnK3xNCsUra4t3l2aRe29zgF0jIDiaNRJOV6cWHxB8ulSOJpESZvu7IITp9enj0pryQ0P4S/g==","signatures":[{"sig":"MEYCIQCLlF6maGcrcSXZtTCDbRXNlF+NUIr1oZP95Q7O38Yl2gIhANQw5hgSTo6Ky2nEdC2YE7DZ92OnALQS00EfywP0NUZb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":462344},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"124dc88df98b873fc0b082430d2bd615a9b3b730","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.28_1773057199797_0.46694149167706533","host":"s3://npm-registry-packages-npm-production"}},"0.1.29":{"name":"chessiro-canvas","version":"0.1.29","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.29","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"d84a75f03b8835aa8a279f6aa0c4a41e02cb21b0","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.29.tgz","fileCount":42,"integrity":"sha512-y08lkFOin2ia3Djkk56DnQdGIANi5G37ixPjJdztoC8F2MEd0jVFPocFHsy8hodYJsmbSSBIHILTQI+/bXi5mQ==","signatures":[{"sig":"MEUCIG0xUMaVzKakfgKQ8xYhw5/17AaIGuxIT8w6tykMIbBDAiEA70f+2Da0RwxvvEgz+FVF4qZ81sH/b4DE7uIaITaaE6I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":464878},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"551f6b73ced9faedda1e8596f29e8205c9d64f9c","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.29_1773226465950_0.19327372932383025","host":"s3://npm-registry-packages-npm-production"}},"0.1.30":{"name":"chessiro-canvas","version":"0.1.30","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.30","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"76e8dbeeb09357eb34be133cb3bce87488c6f8fc","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.30.tgz","fileCount":42,"integrity":"sha512-n++x4ZvEkfmb7RPiXOgcnyO71QbW4TmG6nsHYBVvsLvXj2dgdbEQ4LkBrE5f6J4Z6yn7QkOD9vElbYFDdhB6dA==","signatures":[{"sig":"MEUCIQDAQlCTo1Xfq+KMRJrNSex3Aw1JPKG1RJ2WmZnmhNFyQwIgG7233xIUXplVQmfJp/i20cWJyAM/MKcRJt0yU4L999E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":465329},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"551f6b73ced9faedda1e8596f29e8205c9d64f9c","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.30_1773248997121_0.525548874610454","host":"s3://npm-registry-packages-npm-production"}},"0.1.31":{"name":"chessiro-canvas","version":"0.1.31","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.31","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"bb8a5a54647fe95a74bfbde1970c8d11076d20c0","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.31.tgz","fileCount":42,"integrity":"sha512-MbNbjHlDQOQkIdQov2ZxdJ5jubSnqQ4n+mW3vuNotQpiLQAbC91weEJ1E4ITL8iEzP6V22j8bzO1Qze0YUm0nw==","signatures":[{"sig":"MEYCIQCzy37kzZm1YtbWBWibtL0Vcui1f6o9w5rZO3BUEr5wAwIhAMnKp1BVbBsGPByTOzZG+s+n+W+imCFHPn5NjZtafrYP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":466242},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"18602d73a9c9ced62605eb83bccc9ac25b22f4fd","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.31_1773251523542_0.4199969144876652","host":"s3://npm-registry-packages-npm-production"}},"0.1.34":{"name":"chessiro-canvas","version":"0.1.34","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.34","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"0cd558128e59d695c8ee4ae002215dbc0cb5152b","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.34.tgz","fileCount":42,"integrity":"sha512-wNYt0c/VzAPNkmncL2Z+B7RdlkYaznZ7AW8RuDsdU4zU7XHu8SDizUW5V96h/dmrMFmovyrxw8IAj53QXf67XQ==","signatures":[{"sig":"MEYCIQDBbxTJNVu6M/FxI0lx9bDSExEgxFkpK0jk3PExU7tbyQIhAP+wVngGprIor7HKhcVwIsEPJvFJng/Rk3B3MGIhhOko","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":522449},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"fa5b252f9692f789e78e602c93da9bf62604519d","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.34_1776836773274_0.002010656137482858","host":"s3://npm-registry-packages-npm-production"}},"0.1.35":{"name":"chessiro-canvas","version":"0.1.35","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.35","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"80b32d99b076b4dde2a320ee7a4b075ddfe0be9c","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.35.tgz","fileCount":42,"integrity":"sha512-DWmYiN3+9YUXvKA185nc+eO2YACoEeHAtCZvrhoGpkCRs1Iyhtsr4FNzRidBrQvUQ4dG/s2SmXTvNi8QJWu3Yw==","signatures":[{"sig":"MEYCIQDxT6uyC/roVrc8Npp9uZ2LlCxMiLVbg3uJ9yyklN+zQAIhAOfEX4KtLB8jrCL2dMOpgQZ+w5uxZam8K9O4/6iaXf//","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":527016},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"a70bd50ced5e4f39035eafcf3177ebe6054309ba","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.35_1777965690048_0.14105422248193955","host":"s3://npm-registry-packages-npm-production"}},"0.1.36":{"name":"chessiro-canvas","version":"0.1.36","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.36","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"7374095412b1849fe92c89190bc71c4106cc35d0","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.36.tgz","fileCount":42,"integrity":"sha512-Ijh2roFe66q4sPc85309qyIbFIbEZOb2DhCz5rirxHOWmdXeT/vfqanFGsqoedWgwOEi8t4MCgculjKaRzF14Q==","signatures":[{"sig":"MEYCIQCwDbzEF2YVj+J6OZl9Gc5O2H7jhNga5/DKHxrGvZWkvAIhAIWpv/bJnoRDriig2AMzynKgrRNtN/7oQXOCa0+IQ9wi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":527927},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"19e413ab5a0d30483ff5bdbb7c488ccd39103e64","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.9.0","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.36_1778699226691_0.5851222499412787","host":"s3://npm-registry-packages-npm-production"}},"0.1.37":{"name":"chessiro-canvas","version":"0.1.37","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.37","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"122eed747164a58504cc06ec05b02425dfc0a801","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.37.tgz","fileCount":42,"integrity":"sha512-LLHRNQ7mIg5+ATPS8TKnkkD9JQM7a+zJYpT8fLblPsCAZZ0q8N31o9cU7+RrUmhzT2lGFHLiugRC0x46Ere3tQ==","signatures":[{"sig":"MEYCIQDr7yXkLg5Ts9HM72Trz8UKlYAmFFpc2yrjrpcwVJ08xAIhAJf94rBeKgAsyLOvQQc7Uo6RwfDOoWhwfTt86fBOadWF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":547917},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"6632d7acb6e3da3520c910922278474019bb9e74","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.12.1","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.37_1780810838811_0.4609446168691509","host":"s3://npm-registry-packages-npm-production"}},"0.1.38":{"name":"chessiro-canvas","version":"0.1.38","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.38","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"2016d2e6dd6d64b1c2961048b5df3b04b5bf2c7f","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.38.tgz","fileCount":42,"integrity":"sha512-WdlqCGhbd08wzkTefsZn3Ws8qZ8M4JoVOdziUm1Z1QQ+xaqplLZZCt+9AmCoy2xHlptZsHbbpu79ZKmDtHnQiA==","signatures":[{"sig":"MEQCIFKjoxmRmujDi2hj/lc0y+azYvqtctrX7xI6NIBGzrnDAiAuGraoBxwcj+qDG2cgb+Ag+2Fu6EjOKltziGK9qllpfg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":551904},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"9fc2915b2a394dcd96c08275b3f8fdedd70681d5","scripts":{"dev":"tsup --watch","lint":"eslint src/","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.12.1","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.38_1781527324573_0.6544829342335963","host":"s3://npm-registry-packages-npm-production"}},"0.1.39":{"name":"chessiro-canvas","version":"0.1.39","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.39","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"167b5c8427fd67321d540fc5c560679586d0cdd8","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.39.tgz","fileCount":42,"integrity":"sha512-CYR43Cn8q9jM0qYe9RwD1OlLHTK10LCzR23n5B3w3ic1JgLEC91fBKctQfpse7sUaFIuryoXg82uevSdHXtreg==","signatures":[{"sig":"MEQCIFtmBASjcVDOQLr/HkPjB1jAa1EjshwBpikVGxYgH7qXAiBsokFWR7OOB7Ksl0eWqUx9LGGCn+XwBQ32leXfowdblA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":551048},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"9fc2915b2a394dcd96c08275b3f8fdedd70681d5","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"npm run build && node scripts/test-premove.mjs","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.12.1","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.39_1781954071436_0.9009010596555349","host":"s3://npm-registry-packages-npm-production"}},"0.1.40":{"name":"chessiro-canvas","version":"0.1.40","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.40","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"44280dfc5076a64dc73bebced603b8c6e9656cfd","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.40.tgz","fileCount":46,"integrity":"sha512-BPv4/+Lq3IDFoT9B3V5dzduECIW8QBoeW9tm+0tovvpKOfed+AtpiZe6l1S3iixdZMZUjibNKe1F4uKw2+nURA==","signatures":[{"sig":"MEUCIQCRRSzOpR6NFG760cYL4sQ9IoM3P8o228hy8Z2FBbUe+AIgRewvHIcm4tCop9o9p39CQGw7DfqziQ5hU3HVQpdFE+4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":668701},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"b8a521d6735c301f202d6b7a7e016a0aba22c67b","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"npm run build && node scripts/test-premove.mjs","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.12.1","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.40_1784125491978_0.47361034324410567","host":"s3://npm-registry-packages-npm-production"}},"0.1.41":{"name":"chessiro-canvas","version":"0.1.41","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.41","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"2cf38a4bd4e5f1251d640a8b66c64fd081d2bde5","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.41.tgz","fileCount":50,"integrity":"sha512-cKElOWNGquHqzpcIQLqvl49uf3MlxYRwTYaTXrRAPx0QMvS/NEbqURDeNHPsim2kqRmv7mv0rghwIDvyyMgfbg==","signatures":[{"sig":"MEUCIQC7QVSfr9Z98ZPVFPfIDLfGT7LBPd1OyjJ7c9Hd3u5+FwIgVeBb7N0aM6uMql0rYqM/llWqC1hItSBkU73z93DXz9o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1089337},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"c92f0cb4062e0a057b929c039dc92275c22562cf","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"npm run build && node scripts/test-premove.mjs","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.12.1","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.41_1784257262680_0.6219492630763528","host":"s3://npm-registry-packages-npm-production"}},"0.1.42":{"name":"chessiro-canvas","version":"0.1.42","keywords":["chess","chessboard","react","lightweight","svg","typescript"],"license":"MIT","_id":"chessiro-canvas@0.1.42","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://github.com/Bot-Rakshit/chessiro-canvas#readme","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"7d407705df2b440a93a9c50d1e0acca51f3e41c5","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.42.tgz","fileCount":50,"integrity":"sha512-bX+WSrZG+SnSKPkx0m8JIsZxV8COvgkIHyQ5l57aEQwjA4zyBEbb3mAaVWUNoKr7VWpXPFIHryQ9OJQPSIIoKA==","signatures":[{"sig":"MEUCIAwa8KfMvVPPGe0WngUQwynjoSBUY6RqRsXaQ9rBIwt4AiEA+2NOOjidKrgalfGL3pSG9S3V/qwedwv75AzgY8thhWE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1121172},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"55ffd1859e4e4cb547b8c374670a606ead094b06","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"npm run build && node scripts/test-premove.mjs","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.12.1","description":"Lightweight, high-performance React chessboard component","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.42_1784286058612_0.06809363804609414","host":"s3://npm-registry-packages-npm-production"}},"0.1.43":{"name":"chessiro-canvas","version":"0.1.43","keywords":["chess","chessboard","chess-board","react","react-chessboard","react-component","chess-ui","chessground","chess.js","chessops","fen","pgn","drag-and-drop","premove","chess-analysis","chess-engine-ui","board","lightweight","zero-dependencies","svg","typescript","hooks"],"license":"MIT","_id":"chessiro-canvas@0.1.43","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://chessiro.dev","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"1a6297ceafed3db1b5e9517651b55a493cd9ee4b","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.43.tgz","fileCount":51,"integrity":"sha512-w7yNwK3+MrGNfbOnKDcHZZUO8yrOY1zcJHGcHxmQ32007vb4ETCAH/otOMuDQQXXZVK90uZ3wasubzKMk2WCpg==","signatures":[{"sig":"MEYCIQCmgjXPoE66Vud84n/aKoh32Ad4G0i0hf/jlk6rBz3vvwIhANfk8nXPnZm4f2L5bubuPPWXl0epphjIsA107HbkoTEQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1226018},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"e2d21f9bfbca60ade140faa6d3a54bbf7547e07d","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"npm run build && node scripts/test-premove.mjs && node scripts/test-cinematics.mjs","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","preview:generate":"node scripts/generate-readme-preview.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:visuals":"npm run build && node scripts/bench-visuals.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.12.1","description":"Fast, lightweight React chessboard component in TypeScript. Zero dependencies, controlled FEN API, drag & drop, arrows, premoves, promotion, theming — works with chess.js and chessops.","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.43_1785522416957_0.43856773967188567","host":"s3://npm-registry-packages-npm-production"}},"0.1.44":{"name":"chessiro-canvas","version":"0.1.44","keywords":["chess","chessboard","chess-board","react","react-chessboard","react-component","chess-ui","chessground","chess.js","chessops","fen","pgn","drag-and-drop","premove","chess-analysis","chess-engine-ui","board","lightweight","zero-dependencies","svg","typescript","hooks"],"license":"MIT","_id":"chessiro-canvas@0.1.44","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://chessiro.dev","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"0a1092354778ed110ea0c86f1f4e467520e5c1bc","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.44.tgz","fileCount":51,"integrity":"sha512-dcESm3fA0JsgBJUJ2ijoZZ1U8HQ+dlKmMpM5/TWjeDLYSj3j4daOUlvhSQj4Ib2P4KDivZF8a5TF21GZs6EiUQ==","signatures":[{"sig":"MEUCIC6Zy+MstNzkcYIr8adXpbssto46S7c6Wgj3zGz3WD99AiEA+RgdeZBMQ3KrXjl58fCKA+J+Q91RUaOK3cmLZgOhsiU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1238459},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"7d4ff183f90b8c78f5a6d865a8d1758db6234839","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"npm run build && node scripts/test-premove.mjs && node scripts/test-cinematics.mjs","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","test:frames":"npm run build && node scripts/test-cinematic-frames.mjs","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","preview:generate":"node scripts/generate-readme-preview.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:visuals":"npm run build && node scripts/bench-visuals.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.12.1","description":"Fast, lightweight React chessboard component in TypeScript. Zero dependencies, controlled FEN API, drag & drop, arrows, premoves, promotion, theming — works with chess.js and chessops.","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.44_1785524297073_0.7272794135430098","host":"s3://npm-registry-packages-npm-production"}},"0.1.45":{"name":"chessiro-canvas","version":"0.1.45","keywords":["chess","chessboard","chess-board","react","react-chessboard","react-component","chess-ui","chessground","chess.js","chessops","fen","pgn","drag-and-drop","premove","chess-analysis","chess-engine-ui","board","lightweight","zero-dependencies","svg","typescript","hooks"],"license":"MIT","_id":"chessiro-canvas@0.1.45","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://chessiro-canvas.vercel.app/","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"36ccf0e2ab47a9da42015d5caec7efc6ae4ebce2","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.45.tgz","fileCount":51,"integrity":"sha512-sE8Y88eLNIOvJ6/3+4cPWp20H5FzMsypraWSov7TTQpIo85jZ/UvuqTtLSMM8ukPUjUfN3ajk7GuqZDiN7P0uw==","signatures":[{"sig":"MEYCIQChPqDdtfI5KekM/EvhPI615xi6po7RDYl2NkHyQD/W+wIhAO2RIcD8smsR/H9NIKp/vEorcystTOJ1TVbGRWkWxtTS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1238518},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"7d4ff183f90b8c78f5a6d865a8d1758db6234839","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"npm run build && node scripts/test-premove.mjs && node scripts/test-cinematics.mjs","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","test:frames":"npm run build && node scripts/test-cinematic-frames.mjs","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","preview:generate":"node scripts/generate-readme-preview.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:visuals":"npm run build && node scripts/bench-visuals.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.12.1","description":"Fast, lightweight React chessboard component in TypeScript. Zero dependencies, controlled FEN API, drag & drop, arrows, premoves, promotion, theming — works with chess.js and chessops.","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.45_1785663875728_0.16985604797418885","host":"s3://npm-registry-packages-npm-production"}},"0.1.46":{"name":"chessiro-canvas","version":"0.1.46","keywords":["chess","chessboard","chess-board","react","react-chessboard","react-component","chess-ui","chessground","chess.js","chessops","fen","pgn","drag-and-drop","premove","chess-analysis","chess-engine-ui","board","lightweight","zero-dependencies","svg","typescript","hooks"],"license":"MIT","_id":"chessiro-canvas@0.1.46","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://chessiro-canvas.vercel.app/","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"8d411d62ca1a36cc9cd98abd1824cd20f4e8a691","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.46.tgz","fileCount":52,"integrity":"sha512-B8LCnu2NTq4LhxAaQxHsfqfWhX9O6wRMOrQQJnsCembQTMtjG3oX5pBSxXlZWrFq+qNYUeATnut1kUD9L6+1ZQ==","signatures":[{"sig":"MEUCIFWf2z0nw+nHuJdZmPYwgSzOaHpiNUXLCvsR40Jt17wfAiEAiM5yJ34reqQg6R8yJ411OV2Mo9z8WdDJp7y1R247Quo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1266756},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"a803bfd9cbe9e36d2ea20ee51d8260ef4e9cf755","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"npm run build && node scripts/test-premove.mjs && node scripts/test-cinematics.mjs","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","test:frames":"npm run build && node scripts/test-cinematic-frames.mjs","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","preview:generate":"node scripts/generate-readme-preview.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:visuals":"npm run build && node scripts/bench-visuals.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.12.1","description":"Fast, lightweight React chessboard component in TypeScript. Zero dependencies, controlled FEN API, drag & drop, arrows, premoves, promotion, theming — works with chess.js and chessops.","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.46_1786154372819_0.04994716087478612","host":"s3://npm-registry-packages-npm-production"}},"0.1.47":{"name":"chessiro-canvas","version":"0.1.47","keywords":["chess","chessboard","chess-board","react","react-chessboard","react-component","chess-ui","chessground","chess.js","chessops","fen","pgn","drag-and-drop","premove","chess-analysis","chess-engine-ui","board","lightweight","zero-dependencies","svg","typescript","hooks"],"license":"MIT","_id":"chessiro-canvas@0.1.47","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://chessiro-canvas.vercel.app/","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"bb6f50ea4cbfeef4a60103f0995263b036fdc48a","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.47.tgz","fileCount":52,"integrity":"sha512-1ADitRxVsIMBO/YSH39yZoxr//d3vObgzZPabWTSYtuv3u6GKN9fs9o2+iSEsSUbbcqJpZa2JJyWzcy0oGv46w==","signatures":[{"sig":"MEUCIQDzYefXw3AVQv2KJv4/rgyJRzgzKS+8RVZ6qcL0FcB0wwIgam3I1JDinebMmCjUHiKhGi4FxdqMLjEvUQrwCZjuXv8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1310939},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"014de94fe7693c638caa99f12a05829b6bf7c2a7","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"npm run build && node scripts/test-premove.mjs && node scripts/test-cinematics.mjs","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","test:frames":"npm run build && node scripts/test-cinematic-frames.mjs","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","preview:generate":"node scripts/generate-readme-preview.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:visuals":"npm run build && node scripts/bench-visuals.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.12.1","description":"Fast, lightweight React chessboard component in TypeScript. Zero dependencies, controlled FEN API, drag & drop, arrows, premoves, promotion, theming — works with chess.js and chessops.","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.47_1786385370485_0.24281162741791507","host":"s3://npm-registry-packages-npm-production"}},"0.1.48":{"name":"chessiro-canvas","version":"0.1.48","keywords":["chess","chessboard","chess-board","react","react-chessboard","react-component","chess-ui","chessground","chess.js","chessops","fen","pgn","drag-and-drop","premove","chess-analysis","chess-engine-ui","board","lightweight","zero-dependencies","svg","typescript","hooks"],"license":"MIT","_id":"chessiro-canvas@0.1.48","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"homepage":"https://chessiro-canvas.vercel.app/","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"dist":{"shasum":"70b074e20e92adedda797d5f97ab2f0a7879bb2f","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.48.tgz","fileCount":52,"integrity":"sha512-5avWRX1JgtYbICoOzeFkBt7bQbhprzo87YxpkHFXcC+lRC8TqrXZ9ayteyAYSUIcDRsLxd4n3xffiA/Jhncxog==","signatures":[{"sig":"MEYCIQDz0kLrq0pbdTk3UCA1AUWB150A0DLWyqB958jdg99DOgIhANRE2j+S9tEGdjrAXiGZs+lxHJoWmE6XT4j4fbsfx7FC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1317676},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"gitHead":"8dd4d878e84e4a76576765caad54976d5cb28920","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"npm run build && node scripts/test-premove.mjs && node scripts/test-cinematics.mjs","build":"tsup","clean":"rm -rf dist","docs:dev":"npm --prefix demo run dev","benchmark":"npm run build && node scripts/benchmark.mjs","typecheck":"tsc --noEmit","docs:build":"npm --prefix demo run build","test:frames":"npm run build && node scripts/test-cinematic-frames.mjs","docs:preview":"npm --prefix demo run preview","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","preview:generate":"node scripts/generate-readme-preview.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:visuals":"npm run build && node scripts/bench-visuals.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:browser:install":"playwright install chromium"},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"repository":{"url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git","type":"git"},"_npmVersion":"11.12.1","description":"Fast, lightweight React chessboard component in TypeScript. Zero dependencies, controlled FEN API, drag & drop, arrows, premoves, promotion, theming — works with chess.js and chessops.","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^28.1.0","react":"^19.0.0","react-dom":"^19.0.0","playwright":"^1.58.2","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react-chessboard":"^5.10.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chessiro-canvas_0.1.48_1787779954537_0.22197879482808802","host":"s3://npm-registry-packages-npm-production"}},"0.1.49":{"name":"chessiro-canvas","version":"0.1.49","description":"Fast, lightweight React chessboard component in TypeScript. Zero dependencies, controlled FEN API, drag & drop, arrows, premoves, promotion, theming — works with chess.js and chessops.","type":"module","sideEffects":false,"main":"dist/index.js","module":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./assets/*":"./assets/*"},"scripts":{"pieces:generate":"node scripts/generate-default-piece-svgs.mjs && node scripts/generate-default-piece-data.mjs","build":"tsup","dev":"tsup --watch","docs:dev":"npm --prefix demo run dev","docs:build":"npm --prefix demo run build","docs:preview":"npm --prefix demo run preview","test":"npm run build && node scripts/test-premove.mjs && node scripts/test-cinematics.mjs","typecheck":"tsc --noEmit","lint":"eslint src/","clean":"rm -rf dist","benchmark":"npm run build && node scripts/benchmark.mjs","benchmark:quick":"npm run build && BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark.mjs","benchmark:browser":"node scripts/benchmark-playwright.mjs","benchmark:browser:quick":"BENCH_ROUNDS=3 BENCH_WARMUP_ROUNDS=1 BENCH_UPDATES=120 node scripts/benchmark-playwright.mjs","benchmark:visuals":"npm run build && node scripts/bench-visuals.mjs","benchmark:browser:install":"playwright install chromium","preview:generate":"node scripts/generate-readme-preview.mjs","test:frames":"npm run build && node scripts/test-cinematic-frames.mjs"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"devDependencies":{"@types/react":"^19.0.0","@types/react-dom":"^19.0.0","jsdom":"^28.1.0","playwright":"^1.58.2","react":"^19.0.0","react-chessboard":"^5.10.0","react-dom":"^19.0.0","tsup":"^8.0.0","typescript":"^5.0.0"},"keywords":["chess","chessboard","chess-board","react","react-chessboard","react-component","chess-ui","chessground","chess.js","chessops","fen","pgn","drag-and-drop","premove","chess-analysis","chess-engine-ui","board","lightweight","zero-dependencies","svg","typescript","hooks"],"license":"MIT","homepage":"https://chessiro-canvas.vercel.app/","bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"repository":{"type":"git","url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git"},"gitHead":"74efb0dd13799861be2713ab95f8cc84da309eb7","_id":"chessiro-canvas@0.1.49","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-MWsZGTrv8ccsq7YngDlMQrFcuRuhM4yH+gg3yS8t2eeiHcZ9tbbrEUeRf9MExxvdtmoWNYOK2Cwg6gT45KzqKQ==","shasum":"c538181c6570e5720d1256e6950a1fb0c5e16564","tarball":"https://registry.npmjs.org/chessiro-canvas/-/chessiro-canvas-0.1.49.tgz","fileCount":52,"unpackedSize":1323073,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCsgpRSUfh7aqZ2lPFAdVm8dmGb50u0Jrj+j+6hsOfUOQIgX2dUdLFcY4QFba8HnlPd5cEYXbRZqSri1OV4VEnWRn8="}]},"_npmUser":{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"},"directories":{},"maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chessiro-canvas_0.1.49_1787785263917_0.601455614392145"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-13T00:22:30.263Z","modified":"2026-08-26T23:01:04.344Z","0.1.0":"2026-02-13T00:22:30.495Z","0.1.1":"2026-02-13T00:37:23.018Z","0.1.2":"2026-02-13T00:46:44.827Z","0.1.3":"2026-02-13T00:52:40.830Z","0.1.4":"2026-02-13T01:04:47.151Z","0.1.5":"2026-02-13T01:51:07.395Z","0.1.6":"2026-02-23T15:52:46.906Z","0.1.7":"2026-02-24T09:12:08.553Z","0.1.8":"2026-02-24T11:15:25.136Z","0.1.9":"2026-02-24T11:42:30.193Z","0.1.10":"2026-02-24T11:46:55.310Z","0.1.11":"2026-02-24T11:53:51.655Z","0.1.12":"2026-02-24T16:32:11.764Z","0.1.13":"2026-02-24T17:16:17.195Z","0.1.14":"2026-02-24T20:03:35.601Z","0.1.15":"2026-02-25T10:31:42.919Z","0.1.16":"2026-02-26T00:29:44.852Z","0.1.17":"2026-02-27T04:13:20.718Z","0.1.18":"2026-03-05T11:23:42.788Z","0.1.19":"2026-03-05T11:28:57.536Z","0.1.20":"2026-03-05T11:36:55.940Z","0.1.21":"2026-03-05T11:40:25.760Z","0.1.22":"2026-03-05T11:44:49.630Z","0.1.23":"2026-03-05T11:52:40.677Z","0.1.24":"2026-03-08T02:42:29.288Z","0.1.25":"2026-03-09T11:39:17.977Z","0.1.26":"2026-03-09T11:43:10.428Z","0.1.27":"2026-03-09T11:48:37.046Z","0.1.28":"2026-03-09T11:53:19.976Z","0.1.29":"2026-03-11T10:54:26.114Z","0.1.30":"2026-03-11T17:09:57.297Z","0.1.31":"2026-03-11T17:52:03.692Z","0.1.34":"2026-04-22T05:46:13.453Z","0.1.35":"2026-05-05T07:21:30.216Z","0.1.36":"2026-05-13T19:07:06.857Z","0.1.37":"2026-06-07T05:40:38.974Z","0.1.38":"2026-06-15T12:42:04.717Z","0.1.39":"2026-06-20T11:14:31.603Z","0.1.40":"2026-07-15T14:24:52.275Z","0.1.41":"2026-07-17T03:01:02.869Z","0.1.42":"2026-07-17T11:00:58.780Z","0.1.43":"2026-07-31T18:26:57.207Z","0.1.44":"2026-07-31T18:58:17.300Z","0.1.45":"2026-08-02T09:44:35.926Z","0.1.46":"2026-08-08T01:59:32.994Z","0.1.47":"2026-08-10T18:09:30.638Z","0.1.48":"2026-08-26T21:32:34.693Z","0.1.49":"2026-08-26T23:01:04.189Z"},"bugs":{"url":"https://github.com/Bot-Rakshit/chessiro-canvas/issues"},"license":"MIT","homepage":"https://chessiro-canvas.vercel.app/","keywords":["chess","chessboard","chess-board","react","react-chessboard","react-component","chess-ui","chessground","chess.js","chessops","fen","pgn","drag-and-drop","premove","chess-analysis","chess-engine-ui","board","lightweight","zero-dependencies","svg","typescript","hooks"],"repository":{"type":"git","url":"git+https://github.com/Bot-Rakshit/chessiro-canvas.git"},"description":"Fast, lightweight React chessboard component in TypeScript. Zero dependencies, controlled FEN API, drag & drop, arrows, premoves, promotion, theming — works with chess.js and chessops.","maintainers":[{"name":"bot-rakshit","email":"singhrakshit003@gmail.com"}],"readme":"# chessiro-canvas\n\n**A fast, lightweight React chessboard component for TypeScript apps — zero dependencies, fully controlled, and built for analysis, coaching, and replay UIs.**\n\n[![npm version](https://img.shields.io/npm/v/chessiro-canvas.svg?style=flat-square)](https://www.npmjs.com/package/chessiro-canvas)\n[![npm downloads](https://img.shields.io/npm/dm/chessiro-canvas.svg?style=flat-square)](https://www.npmjs.com/package/chessiro-canvas)\n[![bundle size](https://img.shields.io/bundlephobia/minzip/chessiro-canvas?style=flat-square&label=gzip)](https://bundlephobia.com/package/chessiro-canvas)\n[![types](https://img.shields.io/npm/types/chessiro-canvas?style=flat-square)](https://www.npmjs.com/package/chessiro-canvas)\n[![license](https://img.shields.io/npm/l/chessiro-canvas.svg?style=flat-square)](./LICENSE)\n\n<a href=\"https://chessiro-canvas.vercel.app/\">\n  <img src=\"https://raw.githubusercontent.com/Bot-Rakshit/chessiro-canvas/main/media/board-preview.png\" width=\"480\" alt=\"chessiro-canvas React chessboard component rendering the position after 1.e4 e5 2.Nf3, with a last-move highlight on f3, hollow legal-move indicators on a6 and c6, and an L-shaped knight arrow drawn from f3 to e5.\" />\n</a>\n\n`chessiro-canvas` is a React chess board UI library that gives you the interaction\nprimitives of [Lichess' chessground](https://github.com/lichess-org/chessground) —\ndrag and drop, click-to-move, legal move dots, right-click arrows and marks,\npremoves, promotion — with a modern, typed React API. It renders pieces as DOM/SVG\nlayers (no `<canvas>` painting, despite the name), so everything stays inspectable,\nthemable with CSS, and accessible to your own overlays.\n\nIt ships **no runtime dependencies** and no chess rules engine, so you stay in\ncontrol: pair it with [`chess.js`](https://github.com/jhlywa/chess.js) or\n[`chessops`](https://github.com/niklasf/chessops) for move legality and use this\npackage purely for the board.\n\n- 🚀 **Fast** — ~78% faster mount and ~81% faster updates than `react-chessboard` in [our benchmark](#performance)\n- 📦 **Small** — ~32 KB gzipped, zero runtime dependencies\n- 🧩 **Controlled** — position is a FEN prop; you own game state\n- 🎨 **Themable** — board colors, piece sets, arrows, notation, promotion dialog, overlays\n- 🎓 **Teaching-ready** — guided drills, ghost pieces, square labels, move demos\n- 🎬 **Cinematics** — choreographed piece flights, camera zoom/tilt/shake, confetti, spotlights\n- ⌨️ **Keyboard navigation** hooks for analysis boards\n- 📱 **Touch-friendly** — chessground-style finger lift and scroll blocking\n- 🟦 **TypeScript-first** — every prop, option, and imperative method typed\n\n**[Live demo and docs → chessiro-canvas.vercel.app](https://chessiro-canvas.vercel.app/)** ·\n[npm](https://www.npmjs.com/package/chessiro-canvas) ·\n[GitHub](https://github.com/Bot-Rakshit/chessiro-canvas)\n\n---\n\n## Table of contents\n\n- [Installation](#installation)\n- [Quick start](#quick-start)\n- [How it works: the controlled model](#how-it-works-the-controlled-model)\n- [Guides](#guides)\n  - [Using chess.js for legal moves](#using-chessjs-for-legal-moves)\n  - [Using chessops for legal moves](#using-chessops-for-legal-moves)\n  - [Piece sets and custom pieces](#piece-sets-and-custom-pieces)\n  - [Theming the board](#theming-the-board)\n  - [Legal move indicators and square visuals](#legal-move-indicators-and-square-visuals)\n  - [Arrows and marks](#arrows-and-marks)\n  - [Premoves](#premoves)\n  - [Promotion](#promotion)\n  - [Drag, touch, and animation tuning](#drag-touch-and-animation-tuning)\n  - [Keyboard navigation](#keyboard-navigation)\n  - [Overlays and badges](#overlays-and-badges)\n  - [Teaching mode: drills, ghosts, and demos](#teaching-mode-drills-ghosts-and-demos)\n  - [Cinematics: choreographed replays](#cinematics-choreographed-replays)\n- [API reference](#api-reference)\n  - [`<ChessiroCanvas />` props](#chessirocanvas-props)\n  - [Imperative API (`ref`)](#imperative-api-ref)\n  - [Exported helpers and constants](#exported-helpers-and-constants)\n  - [Exported types](#exported-types)\n- [Performance](#performance)\n- [FAQ](#faq)\n- [Requirements](#requirements)\n- [Development](#development)\n- [License](#license)\n\n---\n\n## Installation\n\n```bash\nnpm install chessiro-canvas\n```\n\n```bash\npnpm add chessiro-canvas\n```\n\n```bash\nyarn add chessiro-canvas\n```\n\n```bash\nbun add chessiro-canvas\n```\n\nReact 18 or 19 is required as a peer dependency. There is nothing else to install —\ndefault piece artwork is embedded in the package, so no asset hosting or CSS import\nis needed.\n\n## Quick start\n\nYour container must define a width. The board is always square, so its height\nfollows its width.\n\n```tsx\nimport { ChessiroCanvas, INITIAL_FEN } from 'chessiro-canvas';\n\nexport default function App() {\n  return (\n    <div style={{ width: 520 }}>\n      <ChessiroCanvas position={INITIAL_FEN} />\n    </div>\n  );\n}\n```\n\nThat renders a static board. To make it playable you need a rules engine — see\n[Using chess.js for legal moves](#using-chessjs-for-legal-moves).\n\n## How it works: the controlled model\n\n`ChessiroCanvas` is a **controlled component**. It draws the position you give it\nand reports intent; it never mutates game state on its own.\n\n1. You pass a FEN string as `position`.\n2. The user drags or clicks a piece.\n3. The board calls `onMove(from, to, promotion?)`.\n4. Your handler validates the move and returns `true` to accept or `false` to reject.\n5. If accepted, you update `position` — and the board animates to the new FEN.\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  onMove={(from, to, promotion) => {\n    const ok = myEngine.tryMove(from, to, promotion);\n    if (!ok) return false;  // board snaps the piece back\n    setFen(myEngine.fen()); // board animates to the new position\n    return true;\n  }}\n/>\n```\n\nReturning `true` without updating `position` will leave the board showing the old\nposition — the FEN prop is the single source of truth.\n\n## Guides\n\n### Using chess.js for legal moves\n\n```bash\nnpm install chess.js chessiro-canvas\n```\n\n```tsx\nimport { useMemo, useState } from 'react';\nimport { Chess } from 'chess.js';\nimport { ChessiroCanvas, type Dests, type Square } from 'chessiro-canvas';\n\nexport function ChessJsBoard() {\n  const [chess] = useState(() => new Chess());\n  const [fen, setFen] = useState(() => chess.fen());\n\n  const dests = useMemo<Dests>(() => {\n    const map = new Map<Square, Square[]>();\n    for (const move of chess.moves({ verbose: true })) {\n      const from = move.from as Square;\n      const list = map.get(from);\n      if (list) list.push(move.to as Square);\n      else map.set(from, [move.to as Square]);\n    }\n    return map;\n  }, [fen]); // ← keyed off fen, not chess\n\n  return (\n    <ChessiroCanvas\n      position={fen}\n      turnColor={chess.turn()}\n      movableColor={chess.turn()}\n      dests={dests}\n      onMove={(from, to, promotion) => {\n        const result = chess.move({ from, to, promotion });\n        if (!result) return false;\n        setFen(chess.fen());\n        return true;\n      }}\n    />\n  );\n}\n```\n\n> **Gotcha:** `chess.js` mutates the same `Chess` instance in place, so its object\n> reference never changes. Never key `useMemo`/`useEffect` off `[chess]` — derived\n> state would go stale. Key off `fen` (or move history) instead, since `fen` changes\n> on every accepted move.\n\n### Using chessops for legal moves\n\n```bash\nnpm install chessops chessiro-canvas\n```\n\n```tsx\nimport { useMemo, useState } from 'react';\nimport { Chess } from 'chessops/chess';\nimport { chessgroundDests } from 'chessops/compat';\nimport { parseFen, makeFen } from 'chessops/fen';\nimport { parseUci } from 'chessops/util';\nimport { ChessiroCanvas, INITIAL_GAME_FEN } from 'chessiro-canvas';\n\nexport function ChessopsBoard() {\n  const [pos, setPos] = useState(() =>\n    Chess.fromSetup(parseFen(INITIAL_GAME_FEN).unwrap()).unwrap(),\n  );\n\n  const fen = useMemo(() => makeFen(pos.toSetup()), [pos]);\n  const dests = useMemo(() => chessgroundDests(pos), [pos]);\n  const turn = pos.turn === 'white' ? 'w' : 'b';\n\n  return (\n    <ChessiroCanvas\n      position={fen}\n      turnColor={turn}\n      movableColor={turn}\n      dests={dests}\n      onMove={(from, to, promotion) => {\n        const move = parseUci(`${from}${to}${promotion ?? ''}`);\n        if (!move || !pos.isLegal(move)) return false;\n        const next = pos.clone();\n        next.play(move);\n        setPos(next);\n        return true;\n      }}\n    />\n  );\n}\n```\n\n`chessops`' `chessgroundDests()` returns exactly the `Map` shape `dests` expects, so\nit drops straight in.\n\n> Use `INITIAL_GAME_FEN` (full FEN, with castling rights) for engine integrations.\n> `INITIAL_FEN` is piece placement only, which is fine for display-only boards.\n\n### Piece sets and custom pieces\n\nDefault SVG piece artwork is embedded in the package and rendered automatically:\n\n```tsx\n<ChessiroCanvas position={fen} />\n```\n\nTo use your own hosted piece set, point `pieceSet.path` at a directory containing\n`wp.svg`, `wn.svg`, … `bk.svg`:\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  pieceSet={{ id: 'alpha', name: 'Alpha', path: '/pieces/alpha' }}\n/>\n```\n\nCall `preloadPieceSet('/pieces/alpha')` ahead of time to warm the image cache and\navoid a flash on first render.\n\nFor full control, pass React nodes per piece key (`wP`, `bQ`, …):\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  pieces={{\n    wP: () => <MyPawn color=\"white\" />,\n    bP: () => <MyPawn color=\"black\" />,\n  }}\n/>\n```\n\nFor pass-and-play on a shared device, `flipPieces` rotates all piece artwork 180°\nwithout touching board coordinates or move logic:\n\n```tsx\n<ChessiroCanvas position={fen} flipPieces />\n```\n\n**Piece artwork license:** the bundled default pieces are generated from\n`react-chessboard`'s defaults (MIT). Replace them any time via `pieceSet.path`.\n\n### Theming the board\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  theme={{\n    id: 'wood',\n    name: 'Wood',\n    darkSquare: '#8B5A2B',\n    lightSquare: '#F0D9B5',\n    margin: '#5C3B1F',\n    lastMoveHighlight: '#E7C15D',\n    selectedPiece: '#A86634',\n  }}\n/>\n```\n\nFrame and corner rounding are independent, so you can round the inner board, the\nouter margin, or both:\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  showMargin\n  marginThickness={24}\n  marginRadius={16}   // outer margin corners\n  boardRadius={14}    // inner board corners\n  notationVisuals={{\n    fontFamily: 'JetBrains Mono, monospace',\n    fontSize: 11,\n    onBoardFontSize: 11,\n    opacity: 0.95,\n  }}\n/>\n```\n\nWith `showMargin={false}`, coordinates render on the board itself — style those with\n`notationVisuals.onBoardFontSize`, `onLightSquareColor`, and `onDarkSquareColor`.\n\n### Legal move indicators and square visuals\n\n`squareVisuals` controls legal dots and rings, premove hints, marks, the selected\nsquare, drag hover, and the check gradient.\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  dests={dests}\n  check={inCheck ? kingSquare : null}\n  squareVisuals={{\n    legalMoveStyle: 'ring',          // 'dot' | 'ring'\n    legalDot: 'rgba(30, 144, 255, 0.55)',\n    legalDotOutline: 'rgba(255, 255, 255, 0.95)',\n    legalCaptureRing: 'rgba(30, 144, 255, 0.8)',\n    legalCaptureRingShape: 'square', // 'circle' | 'square'\n    selectedStyle: 'both',           // 'fill' | 'border' | 'both'\n    selectedOutline: 'rgba(255, 255, 255, 1)',\n    premoveDot: 'rgba(155, 89, 182, 0.55)',\n    premoveCurrentStyle: 'dashed',   // 'fill' | 'dashed' | 'both'\n    markOverlay: 'rgba(244, 67, 54, 0.6)',\n    dragOverHighlight: 'rgba(255, 255, 255, 0.25)',\n  }}\n/>\n```\n\nFor arbitrary square tinting (eval heatmaps, threat maps, lesson highlights) use\n`highlightedSquares`:\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  highlightedSquares={{ e4: 'rgba(0,255,0,0.35)', d5: 'rgba(255,0,0,0.35)' }}\n/>\n```\n\nSee [`SquareVisuals`](#exported-types) for the full option list, including ring radii,\nborder widths, and corner radius.\n\n### Arrows and marks\n\nRight-drag draws an arrow, right-click marks a square. Both can be left\nuncontrolled (the board keeps internal state) or controlled by you:\n\n```tsx\nimport { useState } from 'react';\nimport { ChessiroCanvas, type Arrow } from 'chessiro-canvas';\n\nfunction AnalysisBoard({ fen }: { fen: string }) {\n  const [arrows, setArrows] = useState<Arrow[]>([]);\n  const [marks, setMarks] = useState<string[]>([]);\n\n  return (\n    <div style={{ width: 560 }}>\n      <ChessiroCanvas\n        position={fen}\n        arrows={arrows}\n        onArrowsChange={setArrows}\n        markedSquares={marks}\n        onMarkedSquaresChange={setMarks}\n      />\n    </div>\n  );\n}\n```\n\nArrow appearance is deeply tunable — shaft width, dash pattern, arrowhead shape,\noutline, how knight moves bend, and enter/exit fades:\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  arrowBrushes={{ green: '#15781B', red: '#882020' }}\n  arrowVisuals={{\n    lineWidth: 0.1,             // board-units: 1 = one square\n    opacity: 0.9,\n    headShape: 'concave',       // 'classic' | 'open' | 'concave' | 'diamond'\n    headCornerRadius: 0.4,      // 0 = sharp, 1 = bullet\n    knightArrowShape: 'l-shaped',\n    dashArray: '0.22 0.16',\n    outlineWidth: 0.02,\n    fadeInMs: 400,              // 0 = instant (default)\n    fadeOutMs: 350,             // removed arrows stay mounted until fade ends\n  }}\n/>\n```\n\n**Fade-in / fade-out.** Defaults live on `arrowVisuals`; override per arrow with\n`fadeInMs` / `fadeOutMs`. Optional `id` gives a stable enter/exit key (defaults to\n`start-end-color`). Adding an arrow to the controlled list fades it in; removing\nit fades it out.\n\n```tsx\nconst arrows: Arrow[] = [\n  { startSquare: 'f3', endSquare: 'e5', color: '#15781B', id: 'ne5' },\n  { startSquare: 'c4', endSquare: 'f7', color: '#882020', id: 'bf7', fadeInMs: 600 },\n];\n```\n\n**Per-ply storage.** For analysis boards where each move in a game has its own\nannotations, pass `plyIndex` plus `plyArrows`/`plyMarks` maps and the board will\nswap annotations as you step through the game:\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  plyIndex={ply}\n  plyArrows={arrowsByPly}\n  onPlyArrowsChange={(ply, arrows) => setArrowsByPly(m => new Map(m).set(ply, arrows))}\n  plyMarks={marksByPly}\n  onPlyMarksChange={(ply, marks) => setMarksByPly(m => new Map(m).set(ply, marks))}\n/>\n```\n\n### Premoves\n\nEnable premoves so a user can queue a move during the opponent's turn. `turnColor`\nis required for the board to know when it is not the user's turn.\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  turnColor={turn}\n  movableColor=\"w\"\n  dests={dests}\n  premovable={{\n    enabled: true,\n    showDests: true,\n    current: premove,             // controlled: [from, to] | null\n    events: {\n      set: (from, to) => setPremove([from, to]),\n      unset: () => setPremove(null),\n    },\n  }}\n/>\n```\n\nWhen the opponent's move arrives and it becomes the user's turn, play the queued\npremove yourself (validating it against the new position) and clear it. Premove\ndestinations are geometric, not legal — a queued move must still be validated when\nit fires. Use the exported `premoveDests(square, pieces, color)` if you want to\ncompute those destinations outside the board.\n\n### Promotion\n\nBy default, reaching the last rank opens a chessground-style promotion chooser —\na vertical strip of pieces anchored on the promotion file, with the queen sitting\non the destination square (mirrored for the black orientation). Click a piece to\npromote, click elsewhere or press `Esc` to cancel. Style it with `promotionVisuals`:\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  promotionVisuals={{\n    backdropColor: 'rgba(15, 18, 25, 0.35)',\n    panelColor: 'rgba(255, 255, 255, 0.88)',\n    panelBorderColor: 'rgba(15, 23, 42, 0.1)',\n    optionHoverBackground: 'rgba(15, 23, 42, 0.07)',\n  }}\n/>\n```\n\nTo skip the dialog entirely (common in bullet or puzzle UIs), use `autoPromoteTo`:\n\n```tsx\n<ChessiroCanvas position={fen} autoPromoteTo=\"q\" />\n```\n\n### Drag, touch, and animation tuning\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  showAnimations\n  animationDurationMs={200}\n  allowDragging\n  selectedPieceScale={1.1}\n  dragScale={1}                  // mouse drag\n  dragLiftSquares={0}\n  touchDragScale={1.9}           // chessground-style finger lift\n  touchDragLiftSquares={0.6}\n  blockTouchScroll                // stop page scroll while touching the board\n/>\n```\n\nOn touch devices the piece is scaled up and offset above the finger so it isn't\nhidden. Set `blockTouchScroll` when the board fills the viewport, otherwise\ndragging can scroll the page instead.\n\n### Keyboard navigation\n\nThe board listens for navigation keys on the document and calls your hooks. It does\nnot navigate anything itself — you own the game history. Keys are ignored while an\n`<input>`, `<textarea>`, or `<select>` has focus, so typing in a form never triggers\nboard navigation.\n\n| Key | Callback |\n| --- | --- |\n| `ArrowLeft` | `onPrevious` |\n| `ArrowRight` | `onNext` |\n| `ArrowUp` / `Home` | `onFirst` |\n| `ArrowDown` / `End` | `onLast` |\n| `F` | `onFlipBoard` |\n| `X` | `onShowThreat` |\n| `Escape` | `onDeselect` |\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  onPrevious={() => goBack()}\n  onNext={() => goForward()}\n  onFirst={() => goToStart()}\n  onLast={() => goToEnd()}\n  onFlipBoard={() => setOrientation(o => (o === 'white' ? 'black' : 'white'))}\n/>\n```\n\n> Because the listener is document-level, every mounted board with these callbacks\n> responds to the same keypress. With multiple boards on one page, pass the callbacks\n> only to the active one.\n\n### Overlays and badges\n\n`overlays` renders positioned text bubbles (coach comments, eval callouts) anchored\nto a square or to board coordinates:\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  overlays={[{ id: 'tip', text: 'Fork!', square: 'e4' }]}\n  overlayVisuals={{\n    background: 'rgba(2, 6, 23, 0.85)',\n    color: '#f8fafc',\n    borderRadius: '6px',\n    fontSize: '11px',\n  }}\n  // or take over rendering entirely:\n  overlayRenderer={(overlay) => <MyBubble>{overlay.text}</MyBubble>}\n/>\n```\n\n`moveQualityBadge` pins a single icon badge (brilliant, blunder, …) to a square, and\n`squareLabels` puts short text badges on many squares at once:\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  moveQualityBadge={{ square: 'e4', icon: '/badges/brilliant.svg', label: 'Brilliant' }}\n  squareLabels={{\n    e4: '!!',\n    d5: { text: '3', corner: 'bottomLeft', background: '#882020', color: '#fff' },\n  }}\n/>\n```\n\n### Teaching mode: drills, ghosts, and demos\n\n**Guided drills.** Set `expectedMove` to accept only specific move(s). Anything else\nis rejected, shakes the piece, and fires `onWrongMove`:\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  expectedMove={{ from: 'g1', to: 'f3' }}\n  onWrongMove={(from, to) => setHint('Develop the knight toward the center.')}\n  wrongMoveFeedback=\"shake\"     // 'shake' | 'none'\n  onMove={commitMove}\n/>\n```\n\nPass an array to accept any of several moves. Set it to `null` to leave drill mode.\n\n**Ghost pieces** show where a piece belongs without changing the position:\n\n```tsx\n<ChessiroCanvas\n  position={fen}\n  ghostPieces={[{ square: 'f3', piece: 'wN', opacity: 0.45 }]}\n/>\n```\n\n**Move demonstrations** run through the imperative `ref`. These animate only — they\nnever call `onMove`, so commit the position yourself when the promise resolves (or\npass `ghost: true` to animate a fading copy and leave the position alone):\n\n```tsx\nimport { useRef } from 'react';\nimport { ChessiroCanvas, type ChessiroCanvasRef } from 'chessiro-canvas';\n\nfunction Lesson() {\n  const board = useRef<ChessiroCanvasRef>(null);\n\n  async function showIdea() {\n    await board.current?.pulseSquare('f3');\n    await board.current?.animateMove('g1', 'f3', { ghost: true, durationMs: 900 });\n  }\n\n  return <ChessiroCanvas ref={board} position={fen} onSquareClick={showIdea} />;\n}\n```\n\n`shakePiece(square)` gives \"wrong move\" feedback manually, and\n`clearTeachingEffects()` cancels every in-flight demo and pulse.\n\n**Tilting a piece over** is the plain-transform version of the resign gesture:\n`tiltPiece(square, options)` leans the piece by an angle you choose, at a speed you\nchoose, and holds it there. The rotation happens about the **centre of the piece**,\nso it leans in place rather than swinging off its bottom edge. Use it for checkmate\nwhen you want the king down without the full\n[`checkmate` cinematic](#cinematics-choreographed-replays) (no dust, no dim, no\nbanner):\n\n```tsx\n// King falls to the right and stays down\nawait board.current?.tiltPiece('e8', { angle: 84, durationMs: 600 });\n\n// Slower, shallower, leaning the other way\nawait board.current?.tiltPiece('e8', { angle: 45, durationMs: 1500, direction: 'left' });\n\n// Lean over, stay down for 2s, then stand back up on its own\nawait board.current?.tiltPiece('e8', { angle: 84, durationMs: 600, holdMs: 2000 });\n\n// Lean over and spring back upright (a \"nudge\")\nawait board.current?.tiltPiece('e8', { angle: 20, durationMs: 400, hold: false });\n\nawait board.current?.resetPieceTilt('e8');   // stand it back up (omit the square for all)\n```\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `angle` | `84` | Degrees to lean. `90` lays the piece on its side; negative leans the opposite way. |\n| `durationMs` | `600` | The speed knob — lower is faster, `0` snaps to the angle. |\n| `direction` | `'right'` | `'left'`, `'right'`, or `'auto'` (tips away from the board centre). |\n| `hold` | `true` | Keep the angle. `false` springs back upright within `durationMs`. |\n| `holdMs` | — | Stay at the angle this long, then stand up unaided. Overrides `hold`; the gesture takes `durationMs + holdMs + durationMs`. |\n| `easing` | `cubic-bezier(0.34, 0.02, 0.62, 1)` | CSS easing of the lean. |\n| `pivot` | `'50% 50%'` | CSS `transform-origin` — the centre of the piece. Pass `'50% 92%'` to tip it over on its base instead. |\n| `force` | `false` | Tilt with motion even under `prefers-reduced-motion` (the angle is applied either way). |\n\nTilts hold on the real piece element, so repeated calls lean further from wherever\nthe piece currently is. A tilt belongs to the piece rather than to the square: if\nthat piece is captured or moves on, the tilt is dropped, and whatever arrives on\nthe square next stands upright. Commit the mating move first, then tilt — the\neffect never changes the position.\n\n### Cinematics: choreographed replays\n\nCinematics are made for **non-interactive** boards — share-game screens, highlight\nreels, puzzle reveals. Camera transforms change the board's bounding box, so\npointer-to-square math is wrong while zoomed or tilted; render with\n`interactive={false}` and call `camera.reset()` when done.\n\nSingle effects:\n\n```tsx\nconst board = useRef<ChessiroCanvasRef>(null);\n\n// A queen sacrifice, with a '!!' badge and a shake on impact\nawait board.current?.cinematicMove('d1', 'h5', {\n  style: 'brilliant',            // 'brilliant' | 'great' | 'smooth' | 'slam' | 'meteor'\n  badge: '!!',\n  trail: 4,\n  impactShake: true,\n  onImpact: () => playSound('capture'),\n});\nsetFen(nextFen);                  // cinematics never commit the position\n```\n\nThe full effect set on the ref: `cinematicMove`, `squareBurst`, `popBadge`,\n`popBanner`, `celebrate`, `promotionBeam`, `implode`, `castleSwap`, `checkmate`,\n`annotate`, `spotlight`, `drawLaser`, `drawArrow`, plus\n`camera.zoomTo / zoomOut / tilt / shake / drift / reset`.\n\n**Ending the game.** `checkmate` tips the king over on its base — the gesture a\nplayer makes when they resign — then dims the board and announces:\n\n```tsx\nawait board.current?.checkmate('e8');                 // topple + CHECKMATE banner\nawait board.current?.checkmate('e8', {\n  direction: 'left',   // default 'auto' tips away from the board centre\n  banner: 'MATE IN 3', // or null to stay silent\n  dim: false,\n});\n```\n\nUnder `prefers-reduced-motion` the fall is skipped but the announcement still\nplays, because that part is information rather than decoration.\n\n**Text over a square.** `annotate` pins live text to a square — evaluations,\nattacker counts, lesson callouts. It persists until cleared, and `setText`\nupdates it in place without replaying the entry animation:\n\n```tsx\nconst evalTag = board.current!.annotate('e4', '+0.3', { corner: 'topRight' });\nevalTag.setText('+1.7');        // no re-animation, just new text\nawait evalTag.clear();          // fades out\n\n// Self-dismissing callout\nboard.current?.annotate('f7', 'Fork!', { durationMs: 1500, enter: 'rise' });\n```\n\nUse `annotate` for transient, scripted commentary; use the `squareLabels` prop\nfor labels that are part of your render state.\n\nScripted sequences via `playCinematic` — steps run in order, `parallel` runs\nchildren together, `call` hooks back into your app:\n\n```tsx\nconst playback = board.current!.playCinematic([\n  { type: 'camera', action: 'zoomTo', square: 'h5', options: { scale: 1.4 } },\n  { type: 'spotlight', squares: ['d1', 'h5'] },\n  { type: 'wait', ms: 400 },\n  { type: 'clearSpotlight' },\n  { type: 'move', from: 'd1', to: 'h5', options: { style: 'meteor' } },\n  { type: 'call', fn: () => setFen(nextFen) },\n  { type: 'parallel', steps: [\n    { type: 'banner', options: { text: 'BRILLIANT!!' } },\n    { type: 'celebrate', options: { kind: 'both' } },\n  ]},\n  { type: 'camera', action: 'reset' },\n]);\n\nawait playback.finished;   // or playback.cancel() to stop early\n```\n\nEvery cinematic respects `prefers-reduced-motion` and degrades to a plain move\nunless you pass `force: true`. `clearCinematics()` cancels the running script, restores\nhidden pieces, unmounts overlay nodes, and resets the camera.\n\n## API reference\n\n### `<ChessiroCanvas />` props\n\nAll props are optional. The component forwards a `ref` of type\n[`ChessiroCanvasRef`](#imperative-api-ref).\n\n#### Core\n\n| Prop | Type | Default | Description |\n| --- | --- | --- | --- |\n| `position` | `string` | `INITIAL_FEN` | FEN to render. Full FEN or piece placement only. |\n| `orientation` | `'white' \\| 'black'` | `'white'` | Which side is at the bottom. |\n| `interactive` | `boolean` | `true` | Disables all move interaction when `false`. |\n| `turnColor` | `'w' \\| 'b'` | — | Whose turn it is. Required for premoves. |\n| `movableColor` | `'w' \\| 'b' \\| 'both'` | `turnColor` | Which side(s) the user may move. |\n| `className` | `string` | — | Class on the wrapper element. |\n| `style` | `CSSProperties` | — | Inline style on the wrapper element. |\n\n#### Move handling\n\n| Prop | Type | Default | Description |\n| --- | --- | --- | --- |\n| `onMove` | `(from, to, promotion?) => boolean` | — | Return `true` to accept the move, `false` to snap back. |\n| `dests` | `Map<Square, Square[]>` | — | Legal destinations per origin square. When omitted, any move is allowed while interactive. |\n| `lastMove` | `{ from: string; to: string } \\| null` | — | Highlights the last move's squares. |\n| `check` | `string \\| null` | — | Square of the king in check; draws the check gradient. |\n| `autoPromoteTo` | `'q' \\| 'r' \\| 'b' \\| 'n'` | — | Skip the promotion dialog and always promote to this piece. |\n| `premovable` | `PremoveConfig` | — | Enables premoves. Pass `current` to control or clear the queued premove. |\n\n#### Guided mode\n\n| Prop | Type | Default | Description |\n| --- | --- | --- | --- |\n| `expectedMove` | `ExpectedMove \\| ExpectedMove[] \\| null` | — | Accept only these move(s); everything else is rejected. |\n| `onWrongMove` | `(from, to) => void` | — | Fired when a move outside `expectedMove` is attempted. |\n| `wrongMoveFeedback` | `'shake' \\| 'none'` | `'shake'` | Visual feedback for a rejected guided move. |\n\n#### Arrows and marks\n\n| Prop | Type | Default | Description |\n| --- | --- | --- | --- |\n| `arrows` | `Arrow[]` | internal | Controlled arrow list. |\n| `onArrowsChange` | `(arrows: Arrow[]) => void` | — | Called when the user draws or clears arrows. |\n| `markedSquares` | `string[]` | internal | Controlled marked squares. |\n| `onMarkedSquaresChange` | `(squares: string[]) => void` | — | Called when the user marks or clears squares. |\n| `arrowBrushes` | `Partial<ArrowBrushes>` | `DEFAULT_ARROW_BRUSHES` | Override the green/red/blue/yellow brush colors. |\n| `arrowVisuals` | `Partial<ArrowVisuals>` | — | Geometry, dashes, arrowhead shape, outline, knight bend, fade in/out. |\n| `snapArrowsToValidMoves` | `boolean` | `true` | Snap drawn arrows to queen/knight directions. |\n| `allowDrawingArrows` | `boolean` | `true` | Toggle right-click arrows and marks. |\n| `plyIndex` | `number` | — | Current ply, for per-ply annotation storage. |\n| `plyArrows` | `Map<number, Arrow[]>` | — | Arrows keyed by ply. |\n| `onPlyArrowsChange` | `(ply, arrows) => void` | — | Per-ply arrow updates. |\n| `plyMarks` | `Map<number, string[]>` | — | Marks keyed by ply. |\n| `onPlyMarksChange` | `(ply, marks) => void` | — | Per-ply mark updates. |\n\n#### Appearance\n\n| Prop | Type | Default | Description |\n| --- | --- | --- | --- |\n| `theme` | `BoardTheme` | built-in wood theme | Square, margin, highlight, and selection colors. |\n| `pieceSet` | `PieceSet` | bundled default pieces | Hosted piece set path (`${path}/wp.svg`, …). |\n| `pieces` | `Record<string, () => ReactNode>` | — | Custom renderer per piece key (`wP`, `bQ`, …). |\n| `flipPieces` | `boolean` | `false` | Rotate piece artwork 180° for pass-and-play. |\n| `showMargin` | `boolean` | `true` | Render the notation frame around the board. |\n| `marginThickness` | `number` | `24` | Margin thickness in px. |\n| `marginRadius` | `number \\| string` | `4` | Outer margin corner radius. |\n| `boardRadius` | `number \\| string` | `0` | Inner board corner radius. |\n| `showNotation` | `boolean` | `true` | Show file/rank coordinates. |\n| `notationVisuals` | `Partial<NotationVisuals>` | — | Font, size, weight, colors, offsets. |\n| `highlightedSquares` | `Record<string, string>` | `{}` | Arbitrary square background colors. |\n| `squareVisuals` | `Partial<SquareVisuals>` | — | Legal/premove indicators, marks, selection, check, drag hover. |\n| `promotionVisuals` | `Partial<PromotionVisuals>` | — | Promotion dialog backdrop, panel, options, text. |\n| `overlayVisuals` | `Partial<OverlayVisuals>` | — | Default overlay bubble style (ignored when `overlayRenderer` is set). |\n| `moveQualityBadge` | `MoveQualityBadge \\| null` | — | Icon badge pinned to a square. |\n| `ghostPieces` | `GhostPiece[]` | — | Translucent hint pieces under the real pieces. |\n| `squareLabels` | `Record<string, string \\| SquareLabel>` | — | Small text badges on squares. |\n\n#### Behavior\n\n| Prop | Type | Default | Description |\n| --- | --- | --- | --- |\n| `allowDragging` | `boolean` | `true` | Toggle drag-to-move (click-to-move still works). |\n| `showAnimations` | `boolean` | `true` | Toggle piece movement animation. |\n| `animationDurationMs` | `number` | `200` | Animation length in ms. |\n| `blockTouchScroll` | `boolean` | `false` | Prevent page scrolling while touching the board. |\n| `selectedPieceScale` | `number` | — | Scale of the selected piece (e.g. `1.1`). Unset means no scaling. |\n| `dragScale` | `number` | `1` | Piece scale while mouse-dragging. |\n| `dragLiftSquares` | `number` | `0` | Vertical offset (in squares) while mouse-dragging. |\n| `touchDragScale` | `number` | `1.9` | Piece scale while touch-dragging. |\n| `touchDragLiftSquares` | `number` | `0.6` | Vertical offset (in squares) while touch-dragging. |\n\n#### Events\n\n| Prop | Type | Description |\n| --- | --- | --- |\n| `onSquareClick` | `(square: string) => void` | Any square click. |\n| `onClearOverlays` | `() => void` | The board cleared the current ply's overlays. |\n| `onAnimationEvent` | `(event: AnimationEvent) => void` | Check, checkmate, capture, promotion, or castle detected during animation. |\n| `onPrevious` `onNext` `onFirst` `onLast` `onFlipBoard` `onShowThreat` `onDeselect` | `() => void` | [Keyboard navigation](#keyboard-navigation) hooks. |\n| `overlays` | `TextOverlay[]` | Positioned text overlays. |\n| `overlayRenderer` | `(overlay: TextOverlay) => ReactNode` | Replace the default overlay bubble. |\n\n### Imperative API (`ref`)\n\n```tsx\nconst board = useRef<ChessiroCanvasRef>(null);\n<ChessiroCanvas ref={board} position={fen} />\n```\n\n#### Geometry\n\n| Method | Returns | Description |\n| --- | --- | --- |\n| `getSquareRect(square)` | `DOMRect \\| null` | Viewport rect of a square. |\n| `getBoardRect()` | `DOMRect \\| null` | Viewport rect of the board. |\n| `getSquareAtPoint(clientX, clientY)` | `Square \\| null` | Square under a viewport point. Use it to build external piece palettes and spare-piece trays. |\n\n#### Teaching effects\n\n| Method | Returns | Description |\n| --- | --- | --- |\n| `animateMove(from, to, options?)` | `Promise<void>` | Slow demonstration move. Does not call `onMove`. |\n| `pulseSquare(square, options?)` | `Promise<void>` | Pulsing attention ring. |\n| `shakePiece(square)` | `Promise<void>` | Shake a piece (\"wrong move\"). |\n| `tiltPiece(square, options?)` | `Promise<void>` | Lean a piece by `angle` degrees over `durationMs`, holding the angle. Rotates about the centre of the piece. |\n| `resetPieceTilt(square?, durationMs?)` | `Promise<void>` | Stand tilted pieces back up. Omit the square to reset all of them. |\n| `clearTeachingEffects()` | `void` | Cancel all demos and pulses; held tilts snap upright. |\n\n#### Cinematic effects\n\n| Method | Returns | Description |\n| --- | --- | --- |\n| `cinematicMove(from, to, options?)` | `Promise<void>` | Choreographed piece flight with spins, arc, glow, and landing effects. |\n| `squareBurst(square, options?)` | `Promise<void>` | Sparkle burst and/or shockwave ring. |\n| `popBadge(square, options)` | `Promise<void>` | Pop an annotation badge (`'!!'`, `'?'`). |\n| `popBanner(options)` | `Promise<void>` | Large glowing text banner across the board. |\n| `celebrate(options?)` | `Promise<void>` | Confetti rain and/or fireworks. |\n| `promotionBeam(square, options?)` | `Promise<void>` | Pillar of light morphing one piece into another. |\n| `implode(square, options?)` | `Promise<void>` | Collapse a piece into a vortex. |\n| `castleSwap(kingFrom, kingTo, rookFrom, rookTo, options?)` | `Promise<void>` | 3D teleport-swap of king and rook. |\n| `checkmate(square, options?)` | `Promise<void>` | The king topples on its base, thuds down and kicks up dust, dimming the board and popping a banner. |\n| `annotate(square, text, options?)` | `AnnotationHandle` | Pin animated text over a square. Persists; the handle exposes `setText` and `clear`. |\n| `spotlight(squares, options?)` | `SpotlightHandle` | Dim the board except the given squares; `handle.clear()` removes it. |\n| `drawLaser(from, to, options?)` | `Promise<void>` | Animated glowing threat beam. |\n| `drawArrow(from, to, options?)` | `Promise<void>` | Arrow that draws itself, then pops its head in. |\n| `playCinematic(steps, options?)` | `CinematicPlayback` | Run a scripted sequence. Starting a new script cancels the previous one. |\n| `clearCinematics()` | `void` | Cancel everything cinematic and reset the camera. |\n| `camera` | `CameraController` | `zoomTo`, `zoomOut`, `tilt`, `shake`, `drift`, `reset`. |\n\n> None of these commit a position. They are pure visuals — update `position`\n> yourself when the returned promise resolves.\n\n### Exported helpers and constants\n\n| Export | Signature | Description |\n| --- | --- | --- |\n| `INITIAL_FEN` | `string` | Starting piece placement only (`rnbq…RNBQ`). |\n| `INITIAL_GAME_FEN` | `string` | Full starting FEN with castling rights and counters. |\n| `readFen` | `(fen: string) => Map<Square, Piece>` | Parse the placement part of a FEN into a piece map. |\n| `writeFen` | `(pieces: Map<Square, Piece>) => string` | Serialize a piece map back to placement FEN. |\n| `premoveDests` | `(square, pieces, color) => Square[]` | Geometrically reachable premove targets (ignores blockers by design). |\n| `preloadPieceSet` | `(path: string) => void` | Warm the image cache for a hosted piece set. |\n| `resolvePieceImageSrc` | `(pieceKey: string, piecePath?: string) => string` | Resolve `'wN'` to an image src; useful for external piece trays. |\n| `DEFAULT_ARROW_BRUSHES` | `ArrowBrushes` | The default green/red/blue/yellow arrow colors. |\n\n### Exported types\n\n```ts\nimport type {\n  ChessiroCanvasProps, ChessiroCanvasRef,\n  Square, Piece, PieceColor, PieceRole, Dests, Orientation,\n  Arrow, ArrowBrush, ArrowBrushes, ArrowVisuals, ArrowHeadShape,\n  BoardTheme, SquareVisuals, NotationVisuals, OverlayVisuals, PromotionVisuals,\n  PieceSet, PieceRenderer, PromotionPiece, PromotionContext, PremoveConfig,\n  MoveQualityBadge, TextOverlay, AnimationEvent, SquareLabel,\n  GhostPiece, ExpectedMove, AnimateMoveOptions, PulseSquareOptions,\n  CinematicStyle, CinematicMoveOptions, CinematicStep, CinematicPlayback,\n  PlayCinematicOptions, SquareBurstOptions, PopBadgeOptions, PopBannerOptions,\n  CelebrateOptions, PromotionBeamOptions, ImplodeOptions, CastleSwapOptions,\n  SpotlightOptions, SpotlightHandle, LaserOptions, DrawArrowOptions,\n  CameraController, CameraZoomOptions, CameraTiltOptions,\n  CameraShakeOptions, CameraDriftOptions,\n} from 'chessiro-canvas';\n```\n\n## Performance\n\nBenchmarked against [`react-chessboard`](https://github.com/Clariity/react-chessboard)\nv5 under an identical harness.\n\n| Metric | chessiro-canvas | react-chessboard | Delta |\n| --- | ---: | ---: | ---: |\n| Mount wall time (mean) | 2.44 ms | 24.36 ms | **90.0% faster** |\n| Update wall time (300 updates) | 97.90 ms | 711.35 ms | **86.2% faster** |\n| Update wall time per render | 0.33 ms | 2.37 ms | **86.2% faster** |\n| React Profiler update duration (mean) | 0.13 ms | 1.32 ms | **90.6% faster** |\n| Bundle ESM gzip | 43.8 KB | 37.4 KB | **17.1% larger** |\n\n<sub>Generated 2026-07-31 · Node v26.0.0, macOS arm64, Apple M4 (10 cores), 16 GB RAM ·\n8 measured rounds + 2 warmup across 5 move-playthrough scenarios (40 samples,\n69 positions) · 300 position updates per round · 640 px board · animations disabled\nfor both libraries.</sub>\n\n<sub>Treat the *ratios* as approximate: react-chessboard's own figures moved\nnoticeably between runs on this machine (13.3 → 24.4 ms mount) without its code\nchanging, which inflates the percentages. The dependable signal is this library's\nown absolute movement — 0.42 → 0.33 ms per update (−22%) release over release.</sub>\n\n**On bundle size:** the cinematics layer costs about 11 KB gzipped, which now puts\nthe package above `react-chessboard`. It is statically imported, so an app that\nnever plays a cinematic still pays for it. If size matters more to you than the\nreplay effects, that is the trade — a lazy-loaded cinematics entry point is the\nobvious fix and is not implemented yet.\n\n### Rendering with config props\n\n`scripts/benchmark.mjs` renders a bare display board — no `dests`, no visual\nconfig, `interactive: false`. Most apps pass config objects as inline literals,\nwhich changes their identity on every render:\n\n```tsx\n<ChessiroCanvas squareVisuals={{ legalMoveStyle: 'ring' }} dests={dests} />\n```\n\n`scripts/bench-visuals.mjs` measures that path, since it is where per-square\nmemoization either holds or collapses:\n\n```bash\nnpm run benchmark:visuals\n```\n\nIt runs two phases: plain position updates, and the same updates with a piece\nselected so the legal-dot and capture-ring paths are actually live.\n\nLatest pass (removing per-commit style rewrites on non-animating pieces, and\nkeeping idle imperative layers off position updates):\n\n| Phase | Metric | Before | After | Delta |\n| --- | --- | ---: | ---: | ---: |\n| Plain updates | Wall per update | 0.65 ms | 0.52 ms | **20.5% faster** |\n| Selected, indicators live | Wall per update | 0.68 ms | 0.55 ms | **18.8% faster** |\n| Plain updates | Profiler per commit | 0.33 ms | 0.32 ms | ~flat |\n| Selected, indicators live | Profiler per commit | 0.34 ms | 0.34 ms | ~flat |\n\n<sub>Medians over 12 rounds × 200 updates, both builds measured back to back on\nthe same machine. Medians rather than means because the mean is noise-sensitive\nhere (stdev ≈ 0.3 ms). Commit time is flat by design: the saving is in imperative\nDOM style writes, which sit outside React's measured commit.</sub>\n\nYou do not need to wrap config props in `useMemo` — the board compares their\ncontents internally.\n\nScenarios replay real games covering castling, capture sequences, pawn tension,\nking-and-pawn endgames, and promotion conversions.\n\nRaw data for the Node harness is committed at\n[`benchmarks/latest.json`](./benchmarks/latest.json). The browser harness writes to\n`benchmarks/browser/latest.json`, which is generated locally and not tracked in git.\n\n```bash\nnpm run benchmark                 # Node harness\nnpm run benchmark:browser         # Playwright + Chromium, local vs origin/main vs react-chessboard\nnpm run benchmark:browser:quick   # fewer rounds\n\n# Run a subset of scenarios\nBENCH_SCENARIOS=italian-castling,sicilian-captures npm run benchmark\n```\n\nHarnesses live in [`scripts/benchmark.mjs`](./scripts/benchmark.mjs) and\n[`scripts/benchmark-playwright.mjs`](./scripts/benchmark-playwright.mjs).\n\n> These are relative comparisons under one harness on one machine, not absolute\n> browser FPS claims. Numbers vary with machine, Node version, and config.\n\n## FAQ\n\n**Does chessiro-canvas validate chess moves?**\nNo, by design. It has no rules engine and no runtime dependencies. Pair it with\n`chess.js` or `chessops` and pass legal destinations via `dests`.\n\n**Is it actually canvas-based?**\nNo — despite the name, pieces and squares render as DOM/SVG layers. That keeps them\ninspectable, CSS-themable, and easy to overlay. The name comes from the\n[Chessiro](https://chessiro.com) project it was built for.\n\n**Can I use it with Next.js?**\nYes. It's an ESM package with a client-side component, so render it in a Client\nComponent (`'use client'`) or a dynamic import with `ssr: false`.\n\n**How do I make the board responsive?**\nGive the wrapper a fluid width (`width: 100%`, a `max-width`, or a grid cell). The\nboard measures its container and stays square, re-measuring when the container\nresizes.\n\n**How is this different from react-chessboard?**\n`chessiro-canvas` targets analysis and coaching UIs: premoves, per-ply arrows and\nmarks, guided drill mode, teaching demos, and a cinematics layer, with a strictly\ncontrolled FEN API and no runtime dependencies. See [Performance](#performance) for\nthe measured differences.\n\n**How is this different from chessground?**\n`chessground` is a mature vanilla-TS board with a React wrapper needed for\nintegration. `chessiro-canvas` is a native React component with a typed props API,\nso state flows the React way with no imperative config diffing.\n\n**Does it work on mobile and touch devices?**\nYes. Touch drags scale the piece and lift it above the finger; `blockTouchScroll`\nstops the page scrolling mid-drag.\n\n**Does it respect reduced motion?**\nYes. Cinematic effects degrade to plain moves under `prefers-reduced-motion` unless\nyou pass `force: true`.\n\n**Can I add spare pieces or a board editor palette?**\nYes. Track your own drag and resolve the drop target with\n`ref.getSquareAtPoint(clientX, clientY)`, then render the tray artwork with\n`resolvePieceImageSrc`.\n\n## Requirements\n\n- React `>=18` and React DOM `>=18` (peer dependencies)\n- An ESM-capable bundler (Vite, webpack 5, Next.js, Parcel, Rollup, esbuild)\n- Modern evergreen browsers; cinematics use the Web Animations API\n\n## Development\n\n```bash\nnpm install\nnpm run dev          # build the library in watch mode\nnpm run docs:dev     # run the demo/docs site against the local build\nnpm run build        # bundle with tsup\nnpm run typecheck\nnpm run lint\nnpm test\nnpm run benchmark\n```\n\nTo regenerate the README hero screenshot and the social card, start the demo on port\n5199 and run the generator (it drives the real board in Chromium):\n\n```bash\nnpx playwright install chromium          # once\nnpm run build\nnpm --prefix demo run dev -- --port 5199\nnpm run preview:generate                 # in a second shell\n```\n\nIssues and pull requests are welcome at\n[github.com/Bot-Rakshit/chessiro-canvas](https://github.com/Bot-Rakshit/chessiro-canvas).\n\n## License\n\n[MIT](./LICENSE) © Chessiro\n\nBundled default piece artwork is derived from `react-chessboard`'s default pieces\n(MIT). See [`assets/pieces/NOTICE.md`](./assets/pieces/NOTICE.md).\n\n---\n\n<sub>**Keywords:** React chessboard · React chess board component · TypeScript\nchessboard · chess UI library · chessground React alternative · react-chessboard\nalternative · FEN board renderer · chess.js React board · chessops React board ·\ndrag and drop chessboard · chess analysis board · premoves · lightweight chess\ncomponent</sub>\n","readmeFilename":"README.md"}