{"_id":"@anth0nycodes/fabric-history","_rev":"13-1410c3e22a6e51d114e564739741f882","name":"@anth0nycodes/fabric-history","dist-tags":{"latest":"1.1.1"},"versions":{"0.1.0":{"name":"@anth0nycodes/fabric-history","version":"0.1.0","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","_id":"@anth0nycodes/fabric-history@0.1.0","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"homepage":"https://github.com/anth0nycodes/fabric-history#readme","bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"dist":{"shasum":"c34d8163306dd2d2e8c7ace8aa3eb1f6290eb118","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-0.1.0.tgz","fileCount":28,"integrity":"sha512-g1y8BCaCd6LRVFl3+3qt39ytsIBgmzrmI+640EeKEFAmKxYIFDGUpX6k9Kog3qwIVPrQBD7U4Fn9Rs/wC7EoWg==","signatures":[{"sig":"MEYCIQDbCURQetwmngDOLwlIDtsFIBS9ys8xwzQNVN9jOkj+WgIhAIrHv6DpWe9cAlTNOSx5P2jnLNGExspRfgeH5n2in/Iy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44910},"main":"dist/index.js","type":"module","_from":"file:anth0nycodes-fabric-history-0.1.0.tgz","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","check":"tsc --noEmit","start":"node dist/index.js","coverage":"vitest run --coverage","publish:npm":"pnpm publish --access public"},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/594c722a716832577dec24fca56afe65/anth0nycodes-fabric-history-0.1.0.tgz","_integrity":"sha512-g1y8BCaCd6LRVFl3+3qt39ytsIBgmzrmI+640EeKEFAmKxYIFDGUpX6k9Kog3qwIVPrQBD7U4Fn9Rs/wC7EoWg==","repository":{"url":"git+https://github.com/anth0nycodes/fabric-history.git","type":"git"},"_npmVersion":"11.9.0","description":"A library built on top of fabric.js that allows for easy access to canvas history.","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jsdom":"^28.0.0","canvas":"^3.2.1","vitest":"^4.0.18","typescript":"^5.9.3","@vitest/coverage-v8":"^4.0.18","prettier-plugin-tailwindcss":"^0.7.2","@ianvs/prettier-plugin-sort-imports":"^4.7.0"},"peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fabric-history_0.1.0_1771660274091_0.5195788098164364","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@anth0nycodes/fabric-history","version":"0.1.1","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","_id":"@anth0nycodes/fabric-history@0.1.1","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"homepage":"https://github.com/anth0nycodes/fabric-history#readme","bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"dist":{"shasum":"c1e3b7bc2b42ba65a448701b231994a9f07f010b","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-0.1.1.tgz","fileCount":29,"integrity":"sha512-Fr7nvOlDGLrCHI7Gl9cXGIIS2Sh3P3qV6hb33Nj6TOhGKxgv6fhe7ql+Gnb1UeluQWqjrCOAJhA2dGehVf78EQ==","signatures":[{"sig":"MEUCIQCKHeQ7ohPzEL+0Hlwv4Me46PvGqT9ShjZRCs6SuHGbvAIgFRhaBaKHOrNf2jksoURenY1R95NHDxClwIFbm2HWGRo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45465},"main":"dist/index.js","type":"module","_from":"file:anth0nycodes-fabric-history-0.1.1.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","check":"tsc --noEmit","start":"node dist/index.js","coverage":"vitest run --coverage","publish:npm":"pnpm publish --access public"},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/ffbfbc4aaeacdab08ea2661fd73b128c/anth0nycodes-fabric-history-0.1.1.tgz","_integrity":"sha512-Fr7nvOlDGLrCHI7Gl9cXGIIS2Sh3P3qV6hb33Nj6TOhGKxgv6fhe7ql+Gnb1UeluQWqjrCOAJhA2dGehVf78EQ==","repository":{"url":"git+https://github.com/anth0nycodes/fabric-history.git","type":"git"},"_npmVersion":"11.9.0","description":"A library built on top of fabric.js that allows for easy access to canvas history.","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jsdom":"^28.0.0","canvas":"^3.2.1","vitest":"^4.0.18","typescript":"^5.9.3","@vitest/coverage-v8":"^4.0.18","prettier-plugin-tailwindcss":"^0.7.2","@ianvs/prettier-plugin-sort-imports":"^4.7.0"},"peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fabric-history_0.1.1_1771662064680_0.6287824137805618","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@anth0nycodes/fabric-history","version":"0.1.2","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","_id":"@anth0nycodes/fabric-history@0.1.2","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"homepage":"https://github.com/anth0nycodes/fabric-history#readme","bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"dist":{"shasum":"9bdf31cb10f52fe629c2e0413ead11a4ceb9aa82","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-0.1.2.tgz","fileCount":29,"integrity":"sha512-iinN63Mjcv++4HUiY573TzrUkyUdHfd0SSWRe/0Yf8abAN5TNriAA4/vGj5zRgPHVAqac9mAzyUfD7Oc6kxc4w==","signatures":[{"sig":"MEUCIQD6vzTkTHkcTWh7Eloe2798FlrfSl5lDwelGaBqcfSk+wIgedICRq7slNRBeLczsmH1zkoVQV+mSar2kGKN8KZVFAI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45575},"main":"dist/index.js","type":"module","_from":"file:anth0nycodes-fabric-history-0.1.2.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","check":"tsc --noEmit","start":"node dist/index.js","coverage":"vitest run --coverage","publish:npm":"pnpm publish --access public"},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/81d78b80bcdf7baabc5457b049846db3/anth0nycodes-fabric-history-0.1.2.tgz","_integrity":"sha512-iinN63Mjcv++4HUiY573TzrUkyUdHfd0SSWRe/0Yf8abAN5TNriAA4/vGj5zRgPHVAqac9mAzyUfD7Oc6kxc4w==","repository":{"url":"git+https://github.com/anth0nycodes/fabric-history.git","type":"git"},"_npmVersion":"11.9.0","description":"A library built on top of fabric.js that allows for easy access to canvas history.","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jsdom":"^28.0.0","canvas":"^3.2.1","vitest":"^4.0.18","typescript":"^5.9.3","@vitest/coverage-v8":"^4.0.18","prettier-plugin-tailwindcss":"^0.7.2","@ianvs/prettier-plugin-sort-imports":"^4.7.0"},"peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fabric-history_0.1.2_1771663718423_0.6823282899731631","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@anth0nycodes/fabric-history","version":"0.1.3","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","_id":"@anth0nycodes/fabric-history@0.1.3","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"homepage":"https://github.com/anth0nycodes/fabric-history#readme","bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"dist":{"shasum":"82c38c1d01ee83f60ba0729fa747cc0cd8ec2f7c","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-0.1.3.tgz","fileCount":18,"integrity":"sha512-78IpRHmbjt0banzPnAU3KwfsutCwNFqO8/b8N9aRp1LnO6A41EP9aSlzlk5WwqQBbLrl3BmbvRpFMSRb+jl+FQ==","signatures":[{"sig":"MEQCIH9DpgkShk2h96+CvecrKsXFc7DAjjqkbmShnKxOdDFVAiAwhMQbWVwbHvvtn5Rz56J9aO1UqIE3lAjRwoiS9idE+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38669},"main":"dist/index.js","type":"module","_from":"file:anth0nycodes-fabric-history-0.1.3.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","check":"tsc --noEmit","start":"node dist/index.js","coverage":"vitest run --coverage","publish:npm":"pnpm publish --access public"},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/34ef39aeab85e024c19215351e58c453/anth0nycodes-fabric-history-0.1.3.tgz","_integrity":"sha512-78IpRHmbjt0banzPnAU3KwfsutCwNFqO8/b8N9aRp1LnO6A41EP9aSlzlk5WwqQBbLrl3BmbvRpFMSRb+jl+FQ==","repository":{"url":"git+https://github.com/anth0nycodes/fabric-history.git","type":"git"},"_npmVersion":"11.9.0","description":"A library built on top of fabric.js that allows for easy access to canvas history.","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jsdom":"^28.0.0","canvas":"^3.2.1","vitest":"^4.0.18","typescript":"^5.9.3","@vitest/coverage-v8":"^4.0.18","prettier-plugin-tailwindcss":"^0.7.2","@ianvs/prettier-plugin-sort-imports":"^4.7.0"},"peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fabric-history_0.1.3_1771695857565_0.24149496520274338","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@anth0nycodes/fabric-history","version":"0.1.4","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","_id":"@anth0nycodes/fabric-history@0.1.4","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"homepage":"https://github.com/anth0nycodes/fabric-history#readme","bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"dist":{"shasum":"f0828b87bf435f435024eef83e8e67dd88035e8e","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-0.1.4.tgz","fileCount":18,"integrity":"sha512-YeM7XQ0tPPNxAW3dQ44K9rPZUo6EmsKWYlY+VxLt82vVxtl1kOtHVW7IK2c50nQpBfHkeuTDeKq+SYvYgCeVOg==","signatures":[{"sig":"MEUCIQD/zEfLk2dGHWM++/pwkpR2FrShgjEjtpx/MDPfLi5FRAIgGASt5YsjmS0oGzbK5bHbLwEI2mMl3iY+9IUJyGA7LPg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38494},"main":"dist/index.js","type":"module","_from":"file:anth0nycodes-fabric-history-0.1.4.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","check":"tsc --noEmit","start":"node dist/index.js","coverage":"vitest run --coverage","publish:npm":"pnpm publish --access public"},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/83da9a526ef5c40168c8961d1d00f67d/anth0nycodes-fabric-history-0.1.4.tgz","_integrity":"sha512-YeM7XQ0tPPNxAW3dQ44K9rPZUo6EmsKWYlY+VxLt82vVxtl1kOtHVW7IK2c50nQpBfHkeuTDeKq+SYvYgCeVOg==","repository":{"url":"git+https://github.com/anth0nycodes/fabric-history.git","type":"git"},"_npmVersion":"11.9.0","description":"A library built on top of fabric.js that allows for easy access to canvas history.","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jsdom":"^28.0.0","canvas":"^3.2.1","vitest":"^4.0.18","typescript":"^5.9.3","@vitest/coverage-v8":"^4.0.18","prettier-plugin-tailwindcss":"^0.7.2","@ianvs/prettier-plugin-sort-imports":"^4.7.0"},"peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fabric-history_0.1.4_1771829705242_0.06907980028665017","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@anth0nycodes/fabric-history","version":"0.2.0","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","_id":"@anth0nycodes/fabric-history@0.2.0","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"homepage":"https://github.com/anth0nycodes/fabric-history#readme","bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"dist":{"shasum":"50cf061e4e3e4419ed2a1b8c0be2e4ddac69f2d3","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-0.2.0.tgz","fileCount":17,"integrity":"sha512-imKBGQLyjc66Q4LJ8OrErwAMQNPXX8hqoEb8niknKoYEUBRHR0pIi+A+xmFkBO5njSTpcUhHo3muO8/XZafysw==","signatures":[{"sig":"MEQCIDjU0ejfW5PFlgJGBJ2EmW/kh27iB0BkKVizcA9CD8U4AiAgwufODWeZeCMR/xHWTSzx4zJ41uJKPsohdh4DuMjiHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50846},"main":"dist/index.js","type":"module","_from":"file:anth0nycodes-fabric-history-0.2.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","check":"tsc --noEmit","start":"node dist/index.js","test:it":"vitest --project integration","coverage":"vitest run --coverage","test:e2e":"vitest --project e2e","publish:npm":"pnpm publish --access public"},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/67bf3103a865af18d306899043d51560/anth0nycodes-fabric-history-0.2.0.tgz","_integrity":"sha512-imKBGQLyjc66Q4LJ8OrErwAMQNPXX8hqoEb8niknKoYEUBRHR0pIi+A+xmFkBO5njSTpcUhHo3muO8/XZafysw==","repository":{"url":"git+https://github.com/anth0nycodes/fabric-history.git","type":"git"},"_npmVersion":"11.9.0","description":"A library built on top of fabric.js that allows for easy access to canvas history.","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jsdom":"^28.0.0","canvas":"^3.2.1","vitest":"^4.0.18","@vitest/ui":"^4.0.18","typescript":"^5.9.3","@vitest/coverage-v8":"^4.0.18","@vitest/browser-playwright":"^4.0.18","prettier-plugin-tailwindcss":"^0.7.2","@ianvs/prettier-plugin-sort-imports":"^4.7.0"},"peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fabric-history_0.2.0_1772351635642_0.4843368884550463","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@anth0nycodes/fabric-history","version":"0.3.0","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","_id":"@anth0nycodes/fabric-history@0.3.0","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"homepage":"https://github.com/anth0nycodes/fabric-history#readme","bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"dist":{"shasum":"b15422bb6fc49616af32e770a28f3e8289576c63","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-0.3.0.tgz","fileCount":13,"integrity":"sha512-mttjhd1178g/kBWYv5PRwkvMUchZbbZn7yy+GiiHwil8dh/Hkv3LOPfj3XXREakKVSoMXl5lpBvR0xhnZqrIYQ==","signatures":[{"sig":"MEUCIDY3F1BGj293P4to/VDmL/4riZw3JkHbPhN3XA6ES6tfAiEA7LNigkcglmEbR+FD4uN1oMcXNkbdUQAbDZWjfEY50q4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44454},"main":"dist/index.js","type":"module","_from":"file:anth0nycodes-fabric-history-0.3.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","check":"tsc --noEmit","start":"node dist/index.js","test:it":"vitest --project integration","coverage":"vitest run --coverage","test:e2e":"vitest --project e2e","publish:npm":"pnpm publish --access public"},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/59433a6aa44e0f79f36597ddc1f5bbfc/anth0nycodes-fabric-history-0.3.0.tgz","_integrity":"sha512-mttjhd1178g/kBWYv5PRwkvMUchZbbZn7yy+GiiHwil8dh/Hkv3LOPfj3XXREakKVSoMXl5lpBvR0xhnZqrIYQ==","repository":{"url":"git+https://github.com/anth0nycodes/fabric-history.git","type":"git"},"_npmVersion":"11.9.0","description":"A library built on top of fabric.js that allows for easy access to canvas history.","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jsdom":"^28.0.0","canvas":"^3.2.1","vitest":"^4.0.18","@vitest/ui":"^4.0.18","typescript":"^5.9.3","@erase2d/fabric":"^1.2.1","@vitest/coverage-v8":"^4.0.18","@vitest/browser-playwright":"^4.0.18","prettier-plugin-tailwindcss":"^0.7.2","@ianvs/prettier-plugin-sort-imports":"^4.7.0"},"peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fabric-history_0.3.0_1772439390121_0.32596205134357725","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@anth0nycodes/fabric-history","version":"0.3.1","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","_id":"@anth0nycodes/fabric-history@0.3.1","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"homepage":"https://github.com/anth0nycodes/fabric-history#readme","bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"dist":{"shasum":"135489255f793d80a100f069775ddacc6988eb8b","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-0.3.1.tgz","fileCount":13,"integrity":"sha512-CtuAuScHqcUEzGHWzcF3Vt2TyM314tsU8Yj8KKjmsVeibbVHKLV1ppGLpQl4kR6tMLYfWJU8jAs5qS/lnDttwA==","signatures":[{"sig":"MEQCIG5calNF7MU9JIkV/H0A0NOVxHM+kSBnURbXvSo4WbvWAiADTHV/PVHc/StocC4C7cc7C06eeCRve9SuJ6nwgAiMjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45244},"main":"dist/index.js","type":"module","_from":"file:anth0nycodes-fabric-history-0.3.1.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","check":"tsc --noEmit","start":"node dist/index.js","test:it":"vitest --project integration","coverage":"vitest run --coverage","test:e2e":"vitest --project e2e","publish:npm":"pnpm publish --access public"},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/339e6812024bfba73fb7f58ec94ce0fc/anth0nycodes-fabric-history-0.3.1.tgz","_integrity":"sha512-CtuAuScHqcUEzGHWzcF3Vt2TyM314tsU8Yj8KKjmsVeibbVHKLV1ppGLpQl4kR6tMLYfWJU8jAs5qS/lnDttwA==","repository":{"url":"git+https://github.com/anth0nycodes/fabric-history.git","type":"git"},"_npmVersion":"11.9.0","description":"A library built on top of fabric.js that allows for easy access to canvas history.","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jsdom":"^28.0.0","canvas":"^3.2.1","vitest":"^4.0.18","@vitest/ui":"^4.0.18","typescript":"^5.9.3","@erase2d/fabric":"^1.2.1","@vitest/coverage-v8":"^4.0.18","@vitest/browser-playwright":"^4.0.18","prettier-plugin-tailwindcss":"^0.7.2","@ianvs/prettier-plugin-sort-imports":"^4.7.0"},"peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fabric-history_0.3.1_1772443498418_0.26987034062487414","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@anth0nycodes/fabric-history","version":"1.0.0","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","_id":"@anth0nycodes/fabric-history@1.0.0","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"homepage":"https://github.com/anth0nycodes/fabric-history#readme","bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"dist":{"shasum":"17219be5e90a805e966c9f32bc625109e2a5e07b","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-1.0.0.tgz","fileCount":13,"integrity":"sha512-1YyxoM5NZ/6p+J1+tc79oeGMOtORn4ftglyidVykeMQ+DipzL/Tl5ipyHdtAd8oKlpKyxpEEhQpyfRkmGGqDpw==","signatures":[{"sig":"MEYCIQDMVxSjG9Z73dBz4BPUbqM+c8tP3TSwip2i6hstZQ4sAAIhAN4pVhNrwn+EwOuub71lTg6VJIH1cJKBuOKSs+nzQ8wL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45386},"main":"dist/index.js","type":"module","_from":"file:anth0nycodes-fabric-history-1.0.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","check":"tsc --noEmit","start":"node dist/index.js","test:it":"vitest --project integration","coverage":"vitest run --coverage","test:e2e":"vitest --project e2e","publish:npm":"pnpm publish --access public"},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/d011ca56d29821dc12815c012b325d52/anth0nycodes-fabric-history-1.0.0.tgz","_integrity":"sha512-1YyxoM5NZ/6p+J1+tc79oeGMOtORn4ftglyidVykeMQ+DipzL/Tl5ipyHdtAd8oKlpKyxpEEhQpyfRkmGGqDpw==","repository":{"url":"git+https://github.com/anth0nycodes/fabric-history.git","type":"git"},"_npmVersion":"11.9.0","description":"A library built on top of fabric.js that allows for easy access to canvas history.","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jsdom":"^28.0.0","canvas":"^3.2.1","vitest":"^4.0.18","@vitest/ui":"^4.0.18","typescript":"^5.9.3","@erase2d/fabric":"^1.2.1","@vitest/coverage-v8":"^4.0.18","@vitest/browser-playwright":"^4.0.18","prettier-plugin-tailwindcss":"^0.7.2","@ianvs/prettier-plugin-sort-imports":"^4.7.0"},"peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fabric-history_1.0.0_1772694819961_0.5398676466094072","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@anth0nycodes/fabric-history","version":"1.0.1","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","_id":"@anth0nycodes/fabric-history@1.0.1","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"homepage":"https://github.com/anth0nycodes/fabric-history#readme","bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"dist":{"shasum":"a25fa0f0a9d992b3eb1be52486c3067d42003753","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-1.0.1.tgz","fileCount":13,"integrity":"sha512-VGRjRdI7G7vwD1oWhi3b5xU4VmmEAgFGwbOZRIkl9rTwVh/isiDP6KiXo5rgwpedIBQVS6bfRA8DykdEmmHjog==","signatures":[{"sig":"MEQCIE+bqk5mQ1YDqtU3cE/J3OHzqSte3wbOFpKom0mYHQRkAiBU/KqL8XXyNqQI02BsWFpTiEL73pZRDWKTUxajrFbzwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45383},"main":"dist/index.js","type":"module","_from":"file:anth0nycodes-fabric-history-1.0.1.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","check":"tsc --noEmit","start":"node dist/index.js","test:it":"vitest --project integration","coverage":"vitest run --coverage","test:e2e":"vitest --project e2e","publish:npm":"pnpm publish --access public"},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/0dabaf1a32abc5b790979f68228c0cf2/anth0nycodes-fabric-history-1.0.1.tgz","_integrity":"sha512-VGRjRdI7G7vwD1oWhi3b5xU4VmmEAgFGwbOZRIkl9rTwVh/isiDP6KiXo5rgwpedIBQVS6bfRA8DykdEmmHjog==","repository":{"url":"git+https://github.com/anth0nycodes/fabric-history.git","type":"git"},"_npmVersion":"11.9.0","description":"A library built on top of fabric.js that allows for easy access to canvas history.","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jsdom":"^28.0.0","canvas":"^3.2.1","vitest":"^4.0.18","@vitest/ui":"^4.0.18","typescript":"^5.9.3","@erase2d/fabric":"^1.2.1","@vitest/coverage-v8":"^4.0.18","@vitest/browser-playwright":"^4.0.18","prettier-plugin-tailwindcss":"^0.7.2","@ianvs/prettier-plugin-sort-imports":"^4.7.0"},"peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fabric-history_1.0.1_1772694955387_0.49918231684417136","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@anth0nycodes/fabric-history","version":"1.0.2","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","_id":"@anth0nycodes/fabric-history@1.0.2","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"homepage":"https://github.com/anth0nycodes/fabric-history#readme","bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"dist":{"shasum":"d17143134130475dbee9dce83e6d936d9b15b5e5","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-1.0.2.tgz","fileCount":13,"integrity":"sha512-EvEXXVCHptTn8FPeB0yiNqAuG9g/0IkoLI1Hta+ahgA6ZxVOhEax46WY5VSyOM/F8m/IXxUU891GEsO97uUGTg==","signatures":[{"sig":"MEQCIDO25mwH8skR0f8E8HF7OnHe304NXRVyYv3YSrWMA4HwAiAGmFODBtpn/QcJVzElYZ0sFvuz3G1/JGBc+Vzt9Kf1rA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45380},"main":"dist/index.js","type":"module","_from":"file:anth0nycodes-fabric-history-1.0.2.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","check":"tsc --noEmit","start":"node dist/index.js","test:it":"vitest --project integration","coverage":"vitest run --coverage","test:e2e":"vitest --project e2e","publish:npm":"pnpm publish --access public"},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/ad7e77a9f00abb5c9262352c2c65a4b7/anth0nycodes-fabric-history-1.0.2.tgz","_integrity":"sha512-EvEXXVCHptTn8FPeB0yiNqAuG9g/0IkoLI1Hta+ahgA6ZxVOhEax46WY5VSyOM/F8m/IXxUU891GEsO97uUGTg==","repository":{"url":"git+https://github.com/anth0nycodes/fabric-history.git","type":"git"},"_npmVersion":"11.9.0","description":"A library built on top of fabric.js that allows for easy access to canvas history.","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jsdom":"^28.0.0","canvas":"^3.2.1","vitest":"^4.0.18","@vitest/ui":"^4.0.18","typescript":"^5.9.3","@erase2d/fabric":"^1.2.1","@vitest/coverage-v8":"^4.0.18","@vitest/browser-playwright":"^4.0.18","prettier-plugin-tailwindcss":"^0.7.2","@ianvs/prettier-plugin-sort-imports":"^4.7.0"},"peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fabric-history_1.0.2_1772695029018_0.6719460752943758","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@anth0nycodes/fabric-history","version":"1.1.0","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","_id":"@anth0nycodes/fabric-history@1.1.0","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"homepage":"https://github.com/anth0nycodes/fabric-history#readme","bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"dist":{"shasum":"942e520e40421517c8855a94050b97da4d5bfd49","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-1.1.0.tgz","fileCount":13,"integrity":"sha512-W1rKNKnA4lNQkK48q4FOVyy/V1geWkeWP9jZkpyhvb7EvO44/RDYCo1+58zNUrqG3PKfjYxU15hfbipi6aTBHw==","signatures":[{"sig":"MEUCIQDZhdYUutRuhW5o8HqAxeeRzlzCdhOHLffQgGJZX+Ck4QIgLCx4o65Rl8xN1dooTxLn7KoultYpvg0DHTr4juD71Tg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45656},"main":"dist/index.js","type":"module","_from":"file:anth0nycodes-fabric-history-1.1.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","check":"tsc --noEmit","start":"node dist/index.js","test:it":"vitest --project integration","coverage":"vitest run --coverage","test:e2e":"vitest --project e2e","publish:npm":"pnpm publish --access public"},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/f1edef283587a9ec78a44b0054dda05c/anth0nycodes-fabric-history-1.1.0.tgz","_integrity":"sha512-W1rKNKnA4lNQkK48q4FOVyy/V1geWkeWP9jZkpyhvb7EvO44/RDYCo1+58zNUrqG3PKfjYxU15hfbipi6aTBHw==","repository":{"url":"git+https://github.com/anth0nycodes/fabric-history.git","type":"git"},"_npmVersion":"10.9.4","description":"A library built on top of fabric.js that allows for easy access to canvas history.","directories":{},"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jsdom":"^28.0.0","canvas":"^3.2.1","vitest":"^4.0.18","@vitest/ui":"^4.0.18","typescript":"^5.9.3","@erase2d/fabric":"^1.2.1","@vitest/coverage-v8":"^4.0.18","@vitest/browser-playwright":"^4.0.18","prettier-plugin-tailwindcss":"^0.7.2","@ianvs/prettier-plugin-sort-imports":"^4.7.0"},"peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fabric-history_1.1.0_1773609122401_0.829419467070148","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@anth0nycodes/fabric-history","version":"1.1.1","description":"A library built on top of fabric.js that allows for easy access to canvas history.","type":"module","main":"dist/index.js","types":"dist/index.d.ts","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"author":{"name":"Anthony Hoang"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/anth0nycodes/fabric-history.git"},"bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"homepage":"https://github.com/anth0nycodes/fabric-history#readme","peerDependencies":{"fabric":">=6.0.0 <8.0.0"},"devDependencies":{"@erase2d/fabric":"^1.2.1","@ianvs/prettier-plugin-sort-imports":"^4.7.0","@vitest/browser-playwright":"^4.0.18","@vitest/coverage-v8":"^4.0.18","@vitest/ui":"^4.0.18","canvas":"^3.2.1","jsdom":"^29.1.1","prettier-plugin-tailwindcss":"^0.8.0","tsx":"^4.21.0","typescript":"^6.0.3","vitest":"^4.0.18"},"scripts":{"dev":"tsx src/index.ts","build":"tsc","test":"vitest","test:it":"vitest --project integration","test:e2e":"vitest --project e2e","coverage":"vitest run --coverage","start":"node dist/index.js","check":"tsc --noEmit","publish:npm":"pnpm publish --access public"},"_id":"@anth0nycodes/fabric-history@1.1.1","_integrity":"sha512-vrdAGiGA8aPd3gPSQ2Z4cXJBDau/UFhl6q8QEb97LxtHV34q9UUWrbArBB+nYmAiu12WCEbZb3/mEkLXR9wCtQ==","_resolved":"/private/var/folders/t_/fd2z6bpn1nq0vhz1dfty2f6c0000gn/T/d92b29bc0a1ef9b3696384a40732adce/anth0nycodes-fabric-history-1.1.1.tgz","_from":"file:anth0nycodes-fabric-history-1.1.1.tgz","_nodeVersion":"22.22.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-vrdAGiGA8aPd3gPSQ2Z4cXJBDau/UFhl6q8QEb97LxtHV34q9UUWrbArBB+nYmAiu12WCEbZb3/mEkLXR9wCtQ==","shasum":"ed16cdd5453d2f8aea56d39ac8ab8e29b5842957","tarball":"https://registry.npmjs.org/@anth0nycodes/fabric-history/-/fabric-history-1.1.1.tgz","fileCount":13,"unpackedSize":45997,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC/MWmAQOpULKlX+l05XM6I43135+cvebVZ/tWSOng4iQIgXtLLTdTY351sjafKDOoiUz264aZJurMj9HaRNe6OJ+U="}]},"_npmUser":{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"},"directories":{},"maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fabric-history_1.1.1_1785704908404_0.08589686312076705"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-21T07:51:13.970Z","modified":"2026-08-02T21:08:28.734Z","0.1.0":"2026-02-21T07:51:14.239Z","0.1.1":"2026-02-21T08:21:04.843Z","0.1.2":"2026-02-21T08:48:38.574Z","0.1.3":"2026-02-21T17:44:17.715Z","0.1.4":"2026-02-23T06:55:05.395Z","0.2.0":"2026-03-01T07:53:55.792Z","0.3.0":"2026-03-02T08:16:30.256Z","0.3.1":"2026-03-02T09:24:58.566Z","1.0.0":"2026-03-05T07:13:40.108Z","1.0.1":"2026-03-05T07:15:55.535Z","1.0.2":"2026-03-05T07:17:09.166Z","1.1.0":"2026-03-15T21:12:02.548Z","1.1.1":"2026-08-02T21:08:28.543Z"},"bugs":{"url":"https://github.com/anth0nycodes/fabric-history/issues"},"author":{"name":"Anthony Hoang"},"license":"MIT","homepage":"https://github.com/anth0nycodes/fabric-history#readme","keywords":["fabric","fabric.js","canvas history","canvas undo","canvas redo","canvas"],"repository":{"type":"git","url":"git+https://github.com/anth0nycodes/fabric-history.git"},"description":"A library built on top of fabric.js that allows for easy access to canvas history.","maintainers":[{"name":"anth0nycodes","email":"hoanganthony2207@gmail.com"}],"readme":"# fabric-history\n\nA library built on top of fabric.js that provides undo/redo history management for canvas operations.\n\n<p>\n  <img alt=\"GitHub Stars\" src=\"https://img.shields.io/github/stars/anth0nycodes/fabric-history?style=plastic\">\n  <img alt=\"NPM Downloads\" src=\"https://img.shields.io/npm/d18m/%40anth0nycodes%2Ffabric-history?style=plastic\">\n</p>\n\n## Features\n\n- Undo/Redo functionality for fabric.js canvases\n- Automatic history tracking for path creation, erasing events, object additions, removals, and modifications\n- Multi-selection batching: operations on multiple selected objects are recorded as a single history entry\n- Custom events for history state changes\n- Fully type-safe\n- Support for fabric.js v6 and v7\n\n## Installation\n\n```bash\nnpm install @anth0nycodes/fabric-history\n```\n\nor with pnpm:\n\n```bash\npnpm add @anth0nycodes/fabric-history\n```\n\nor with yarn:\n\n```bash\nyarn add @anth0nycodes/fabric-history\n```\n\n## Usage\n\n```typescript\nimport { CanvasWithHistory } from \"@anth0nycodes/fabric-history\";\nimport { Rect } from \"fabric\";\n\n// Create a canvas with history support (same constructor as fabric.Canvas)\nconst canvas = new CanvasWithHistory(\"my-canvas\", {\n  width: 800,\n  height: 600,\n});\n\n// Add objects - history is tracked automatically\nconst rect = new Rect({\n  left: 100,\n  top: 100,\n  width: 50,\n  height: 50,\n  fill: \"red\",\n});\ncanvas.add(rect);\n\n// Undo the last action\nawait canvas.undo();\n\n// Redo the undone action\nawait canvas.redo();\n```\n\n### Using with `@erase2d/fabric`\n\nTo enable history tracking for erasing operations, use the `setEraserBrush` method with an `EraserBrush` from [`@erase2d/fabric`](https://github.com/erase2d/fabric). This ensures that erasing actions trigger the `erasing:end` event required for history tracking.\n\n```typescript\nimport { CanvasWithHistory } from \"@anth0nycodes/fabric-history\";\nimport { EraserBrush } from \"@erase2d/fabric\";\n\nconst canvas = new CanvasWithHistory(\"my-canvas\", {\n  width: 800,\n  height: 600,\n});\n\n// Create and set the eraser brush\nconst eraser = new EraserBrush(canvas);\neraser.width = 20;\ncanvas.setEraserBrush(eraser);\n\n// Enable drawing mode to use the eraser\ncanvas.isDrawingMode = true;\n```\n\n### Excluding objects from history\n\nSet `excludeFromExport: true` on an object to prevent its changes from being saved to history.\n\n```typescript\nconst rect = new Rect({\n  left: 0,\n  top: 0,\n  width: 800,\n  height: 1,\n  fill: \"blue\",\n  excludeFromExport: true, // changes to this object won't be saved to history\n});\ncanvas.add(guide);\n```\n\n## API\n\n### `CanvasWithHistory`\n\nExtends fabric.js `Canvas` class with history management capabilities.\n\n#### Methods\n\n| Method                   | Returns         | Description                                                                                          |\n| ------------------------ | --------------- | ---------------------------------------------------------------------------------------------------- |\n| `undo()`                 | `Promise<void>` | Undo the most recent action                                                                          |\n| `redo()`                 | `Promise<void>` | Redo the most recently undone action                                                                 |\n| `canUndo()`              | `boolean`       | Check if an undo action is available                                                                 |\n| `canRedo()`              | `boolean`       | Check if a redo action is available                                                                  |\n| `setEraserBrush(eraser)` | `void`          | Set an `EraserBrush` from `@erase2d/fabric` to enable history tracking for erasing operations        |\n| `clearHistory()`         | `void`          | Clear the undo and redo history stacks                                                               |\n| `clearCanvas()`          | `void`          | Clear the canvas and save the cleared state to history (use this instead of the inherited `clear()`) |\n| `dispose()`              | `void`          | Clean up event listeners and dispose the canvas                                                      |\n\n#### Tracked Events\n\nHistory is automatically saved when these fabric.js events occur:\n\n- `path:created` - When a path is created (e.g., freehand drawing)\n- `erasing:end` - When an erasing operation completes\n- `object:added` - When an object is added to the canvas\n- `object:removed` - When an object is removed from the canvas\n- `object:modified` - When an object is modified (moved, scaled, rotated, etc.)\n\n#### Custom Events\n\n`CanvasWithHistory` fires custom events that you can listen to for history state changes:\n\n| Event             | Payload                              | Description                       |\n| ----------------- | ------------------------------------ | --------------------------------- |\n| `history:append`  | `{ json: string, initial: boolean }` | Fired when a state is saved       |\n| `history:undo`    | `{ lastUndoAction: string }`         | Fired when an undo is performed   |\n| `history:redo`    | `{ lastRedoAction: string }`         | Fired when a redo is performed    |\n| `history:cleared` | `{}`                                 | Fired when history stacks cleared |\n\n**Example:**\n\n```typescript\ncanvas.on(\"history:append\", ({ json, initial }) => {\n  console.log(\"State saved:\", initial ? \"initial\" : \"action\");\n});\n\ncanvas.on(\"history:undo\", ({ lastUndoAction }) => {\n  console.log(\"Undo performed\");\n});\n```\n\n## Requirements\n\n- fabric.js 6.x or 7.x\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Run development server\npnpm dev\n\n# Build the project\npnpm build\n\n# Type check\npnpm check\n\n# Run all tests\npnpm test\n\n# Run integration tests only\npnpm test:it\n\n# Run E2E tests only (uses Playwright)\npnpm test:e2e\n\n# Run tests with coverage\npnpm coverage\n```\n\n## Contributing\n\nContributions are welcome! Please read our [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to submit pull requests.\n\n## License\n\nMIT\n\n## Author\n\nAnthony Hoang\n","readmeFilename":"README.md"}