{"_id":"@banksia/signals","_rev":"9-42dc75015db54f6bc592403517cee6a6","name":"@banksia/signals","dist-tags":{"latest":"0.2.0"},"versions":{"0.0.0":{"name":"@banksia/signals","version":"0.0.0","license":"MIT","_id":"@banksia/signals@0.0.0","maintainers":[{"name":"luism","email":"luizinho3@gmail.com"}],"homepage":"https://github.com/Banksia-Corp/signals#readme","bugs":{"url":"https://github.com/Banksia-Corp/signals/issues"},"dist":{"shasum":"1654698c2761f7e8d4c272413d09c2dcbb814d8f","tarball":"https://registry.npmjs.org/@banksia/signals/-/signals-0.0.0.tgz","fileCount":28,"integrity":"sha512-SO+rR97r/jn4bXKbrhcGD/Faz9XC81kCPVt22f/5REZJpE8JfNdw3ExoU6ggFkH2P9oLjH0UKmEojMnkUH5D+w==","signatures":[{"sig":"MEQCIH3D7pXXj+iZaEP1H8ZcvrjF6ZsiNEGcYOfJMvqbDSHGAiBtFz34KVEyNAmw2DIbDNklrVANkj2rFQel21G02edZCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135112},"type":"module","types":"./dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/index.js"},"./lit":{"types":"./dist/src/lit.d.ts","import":"./dist/lit.js"},"./react":{"types":"./dist/src/react.d.ts","import":"./dist/react.js"},"./solid":{"types":"./dist/src/solid.d.ts","import":"./dist/solid.js"},"./vanilla":{"types":"./dist/src/vanilla.d.ts","import":"./dist/vanilla.js"},"./devtools":{"types":"./dist/src/devtools.d.ts","import":"./dist/devtools.js"}},"gitHead":"ce7547bed64e3ad9b75ad7bac339128c8e7efb48","scripts":{"dev":"rslib build --watch","lint":"prettier --check \"src/**/*\" \"tests/**/*\" README.md","test":"vitest run","build":"rslib build","format":"prettier --write ."},"_npmUser":{"name":"luism","email":"luizinho3@gmail.com"},"repository":{"url":"git+https://github.com/Banksia-Corp/signals.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance, Proxy-based fine-grained reactive state framework with multi-framework adapters (React, Lit, SolidJS, Vanilla DOM) and Chrome DevTools MCP observability","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"lit":"^3.2.1","react":"^19.0.0","vitest":"^4.1.10","prettier":"^3.8.3","solid-js":"^1.9.5","typescript":"^5.9.3","@rslib/core":"^0.23.2","@types/node":"^26.2.0","@types/react":"^19.2.18","@changesets/cli":"^2.27.1"},"peerDependencies":{"lit":"^3.0.0","react":"^18.0.0 || ^19.0.0","solid-js":"^1.9.0"},"peerDependenciesMeta":{"lit":{"optional":true},"react":{"optional":true},"solid-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/signals_0.0.0_1787379467352_0.1463699058606205","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@banksia/signals","version":"0.1.0","license":"MIT","_id":"@banksia/signals@0.1.0","maintainers":[{"name":"luism","email":"luizinho3@gmail.com"}],"homepage":"https://github.com/Banksia-Corp/signals#readme","bugs":{"url":"https://github.com/Banksia-Corp/signals/issues"},"dist":{"shasum":"d813226075e6afe7c1bf4bf6877be1c8d4cf696d","tarball":"https://registry.npmjs.org/@banksia/signals/-/signals-0.1.0.tgz","fileCount":28,"integrity":"sha512-SbUwBHghAA1nSHYwj8b8Wz50pMIfiZTTv/pDHQOffobI5GYiH5Rkjt+wvhYMSSPwD5rhv4eW0F9aNmbd/QCCzg==","signatures":[{"sig":"MEUCIQDHRBFpc5WFlYjWNd8ZzgnJvQVn5arlJDmdxxkm/UcE3gIgGVb2YLgaiBHSpKYD3J/FUeAijn2g17Tc5+kI0oVlEtw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banksia%2fsignals@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":135283},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./lit":{"types":"./dist/lit.d.ts","import":"./dist/lit.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./solid":{"types":"./dist/solid.d.ts","import":"./dist/solid.js"},"./vanilla":{"types":"./dist/vanilla.d.ts","import":"./dist/vanilla.js"},"./devtools":{"types":"./dist/devtools.d.ts","import":"./dist/devtools.js"}},"gitHead":"cf600ef6611f5cd86c756733684df560b39fd1ed","scripts":{"dev":"rslib build --watch","lint":"prettier --check \"src/**/*\" \"tests/**/*\" README.md","test":"vitest run","build":"rslib build","format":"prettier --write .","release":"pnpm run build && changeset publish"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5a92915e-3798-4ce3-ae0a-f29d481df009"}},"repository":{"url":"git+https://github.com/Banksia-Corp/signals.git","type":"git"},"_npmVersion":"12.0.2","description":"High-performance, Proxy-based fine-grained reactive state framework with multi-framework adapters (React, Lit, SolidJS, Vanilla DOM) and Chrome DevTools MCP observability","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.0","devDependencies":{"lit":"^3.2.1","react":"^19.0.0","vitest":"^4.1.10","prettier":"^3.8.3","solid-js":"^1.9.5","typescript":"^5.9.3","@rslib/core":"^0.23.2","@types/node":"^26.2.0","@types/react":"^19.2.18","@changesets/cli":"^2.27.1","@changesets/changelog-git":"^1.0.0"},"peerDependencies":{"lit":"^3.0.0","react":"^18.0.0 || ^19.0.0","solid-js":"^1.9.0"},"peerDependenciesMeta":{"lit":{"optional":true},"react":{"optional":true},"solid-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/signals_0.1.0_1787381328977_0.9608484186343995","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@banksia/signals","version":"0.1.2","license":"MIT","_id":"@banksia/signals@0.1.2","maintainers":[{"name":"luism","email":"luizinho3@gmail.com"}],"homepage":"https://github.com/Banksia-Corp/signals#readme","bugs":{"url":"https://github.com/Banksia-Corp/signals/issues"},"dist":{"shasum":"c01c7d36f226ad8e710c5c3304f3a8faf4d08591","tarball":"https://registry.npmjs.org/@banksia/signals/-/signals-0.1.2.tgz","fileCount":28,"integrity":"sha512-bv5tjpdpeqvQdM9+DIaIJJ3vv6VT2r/g+q4Axe7NztFiBGkQ8hRwsSsqev356wnNiEfnckB8lNko3z8SIwUzKw==","signatures":[{"sig":"MEQCIDSzkkiWwvvPDJ0pj+Ny7RSXeC/fj+/FTuU0c3YxONrYAiAzxukn+dVV+w8bFefsbB38toEJUmuJX6+QuURhSmJ+Gg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banksia%2fsignals@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":134969},"type":"module","_from":"file:banksia-signals-0.1.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./lit":{"types":"./dist/lit.d.ts","import":"./dist/lit.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./solid":{"types":"./dist/solid.d.ts","import":"./dist/solid.js"},"./vanilla":{"types":"./dist/vanilla.d.ts","import":"./dist/vanilla.js"},"./devtools":{"types":"./dist/devtools.d.ts","import":"./dist/devtools.js"}},"scripts":{"dev":"rslib build --watch","docs":"typedoc","lint":"prettier --check \"src/**/*\" \"tests/**/*\" \"docs/**/*\" README.md AGENTS.md","size":"rslib build && node scripts/check-size-budgets.mjs","test":"vitest run","build":"rslib build","format":"prettier --write .","release":"pnpm run build && changeset publish","docs:watch":"typedoc --watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5a92915e-3798-4ce3-ae0a-f29d481df009"}},"_resolved":"/tmp/b143225b388d18fec66e71b63d9b400e/banksia-signals-0.1.2.tgz","_integrity":"sha512-bv5tjpdpeqvQdM9+DIaIJJ3vv6VT2r/g+q4Axe7NztFiBGkQ8hRwsSsqev356wnNiEfnckB8lNko3z8SIwUzKw==","repository":{"url":"git+https://github.com/Banksia-Corp/signals.git","type":"git"},"_npmVersion":"12.0.2","description":"High-performance, Proxy-based fine-grained reactive state framework with multi-framework adapters (React, Lit, SolidJS, Vanilla DOM) and Chrome DevTools MCP observability","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"lit":"^3.2.1","react":"^19.0.0","vitest":"^4.1.10","typedoc":"^0.28.20","prettier":"^3.8.3","solid-js":"^1.9.5","typescript":"^5.9.3","@rslib/core":"^0.23.2","@types/node":"^26.2.0","@types/react":"^19.2.18","@changesets/cli":"^2.27.1","@changesets/changelog-github":"^0.5.1"},"peerDependencies":{"lit":"^3.0.0","react":"^18.0.0 || ^19.0.0","solid-js":"^1.9.0"},"peerDependenciesMeta":{"lit":{"optional":true},"react":{"optional":true},"solid-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/signals_0.1.2_1787458119304_0.3291213188136579","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@banksia/signals","version":"0.1.3","license":"MIT","_id":"@banksia/signals@0.1.3","maintainers":[{"name":"luism","email":"luizinho3@gmail.com"}],"homepage":"https://github.com/Banksia-Corp/signals#readme","bugs":{"url":"https://github.com/Banksia-Corp/signals/issues"},"dist":{"shasum":"8ecb4ea6d7d82bcf24a2e3cc7a080b0536718b81","tarball":"https://registry.npmjs.org/@banksia/signals/-/signals-0.1.3.tgz","fileCount":28,"integrity":"sha512-xsi/bkgGU/X7wI1oerwmu2PWa7Cn6m0SEpKAp+MoJmqLwIGZYaoq1FF0oOjbXbsdGN72sF1a33kFixfyWOg0rw==","signatures":[{"sig":"MEYCIQDXBlzAOp9EDWe6q/I1CUscg4GBPycyUYsxrOwm/h9T+wIhAL0TveHBuwEoGgtePSdXKa4Ck5o2mh4FwKg4dpyLLaZx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banksia%2fsignals@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":135004},"type":"module","_from":"file:banksia-signals-0.1.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./lit":{"types":"./dist/lit.d.ts","import":"./dist/lit.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./solid":{"types":"./dist/solid.d.ts","import":"./dist/solid.js"},"./vanilla":{"types":"./dist/vanilla.d.ts","import":"./dist/vanilla.js"},"./devtools":{"types":"./dist/devtools.d.ts","import":"./dist/devtools.js"}},"scripts":{"dev":"rslib build --watch","docs":"typedoc","lint":"prettier --check \"src/**/*\" \"tests/**/*\" \"docs/**/*\" README.md AGENTS.md","size":"rslib build && node scripts/check-size-budgets.mjs","test":"vitest run","bench":"vitest bench --run","build":"rslib build","format":"prettier --write .","release":"pnpm run build && changeset publish","docs:watch":"typedoc --watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5a92915e-3798-4ce3-ae0a-f29d481df009"}},"_resolved":"/tmp/1e7066e2cfacb8fb5c8c94921fa6a6ad/banksia-signals-0.1.3.tgz","_integrity":"sha512-xsi/bkgGU/X7wI1oerwmu2PWa7Cn6m0SEpKAp+MoJmqLwIGZYaoq1FF0oOjbXbsdGN72sF1a33kFixfyWOg0rw==","repository":{"url":"git+https://github.com/Banksia-Corp/signals.git","type":"git"},"_npmVersion":"12.0.2","description":"High-performance, Proxy-based fine-grained reactive state framework with multi-framework adapters (React, Lit, SolidJS, Vanilla DOM) and Chrome DevTools MCP observability","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"lit":"^3.2.1","react":"^19.0.0","vitest":"^4.1.10","typedoc":"^0.28.20","prettier":"^3.8.3","solid-js":"^1.9.5","typescript":"^5.9.3","@rslib/core":"^0.23.2","@types/node":"^26.2.0","@types/react":"^19.2.18","@changesets/cli":"^2.27.1","@changesets/changelog-github":"^0.5.1"},"peerDependencies":{"lit":"^3.0.0","react":"^18.0.0 || ^19.0.0","solid-js":"^1.9.0"},"peerDependenciesMeta":{"lit":{"optional":true},"react":{"optional":true},"solid-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/signals_0.1.3_1787458875228_0.18349637898873672","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@banksia/signals","version":"0.1.4","license":"MIT","_id":"@banksia/signals@0.1.4","maintainers":[{"name":"luism","email":"luizinho3@gmail.com"}],"homepage":"https://github.com/Banksia-Corp/signals#readme","bugs":{"url":"https://github.com/Banksia-Corp/signals/issues"},"dist":{"shasum":"85fc4d100f0e8c1a16f099753ab930f18d8ba2ad","tarball":"https://registry.npmjs.org/@banksia/signals/-/signals-0.1.4.tgz","fileCount":28,"integrity":"sha512-buRlV41tMCpoFayePuNGfS2zj0yMF44xi5aewnSmZD7DN3OzABWgLlCMHKXWXlTqI/yJET2IIbzQjrVdaQm+XQ==","signatures":[{"sig":"MEYCIQDZkKw6esVULYFpmTPbLBbSlow1IxruPPagp3RS/Dh3eQIhAIrXU31nhqIvPZ3eXpO1CN+yf3RJoQqTyJQ1DPpIbg+e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banksia%2fsignals@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":135047},"type":"module","_from":"file:banksia-signals-0.1.4.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./lit":{"types":"./dist/lit.d.ts","import":"./dist/lit.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./solid":{"types":"./dist/solid.d.ts","import":"./dist/solid.js"},"./vanilla":{"types":"./dist/vanilla.d.ts","import":"./dist/vanilla.js"},"./devtools":{"types":"./dist/devtools.d.ts","import":"./dist/devtools.js"}},"scripts":{"dev":"rslib build --watch","docs":"typedoc","lint":"prettier --check \"src/**/*\" \"tests/**/*\" \"docs/**/*\" README.md AGENTS.md","size":"rslib build && node scripts/check-size-budgets.mjs","test":"vitest run","bench":"vitest bench --run","build":"rslib build","format":"prettier --write .","release":"pnpm run build && changeset publish","docs:watch":"typedoc --watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5a92915e-3798-4ce3-ae0a-f29d481df009"}},"_resolved":"/tmp/b764ded92baf96535d110289790029d0/banksia-signals-0.1.4.tgz","_integrity":"sha512-buRlV41tMCpoFayePuNGfS2zj0yMF44xi5aewnSmZD7DN3OzABWgLlCMHKXWXlTqI/yJET2IIbzQjrVdaQm+XQ==","repository":{"url":"git+https://github.com/Banksia-Corp/signals.git","type":"git"},"_npmVersion":"12.0.2","description":"High-performance, Proxy-based fine-grained reactive state framework with multi-framework adapters (React, Lit, SolidJS, Vanilla DOM) and Chrome DevTools MCP observability","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"lit":"^3.2.1","react":"^19.0.0","vitest":"^4.1.10","typedoc":"^0.28.20","prettier":"^3.8.3","solid-js":"^1.9.5","typescript":"^5.9.3","@rslib/core":"^0.23.2","@types/node":"^26.2.0","@types/react":"^19.2.18","@changesets/cli":"^2.27.1","@changesets/changelog-github":"^0.5.1"},"peerDependencies":{"lit":"^3.0.0","react":"^18.0.0 || ^19.0.0","solid-js":"^1.9.0"},"peerDependenciesMeta":{"lit":{"optional":true},"react":{"optional":true},"solid-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/signals_0.1.4_1787459470808_0.21739000735804903","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@banksia/signals","version":"0.1.5","license":"MIT","_id":"@banksia/signals@0.1.5","maintainers":[{"name":"luism","email":"luizinho3@gmail.com"}],"homepage":"https://github.com/Banksia-Corp/signals#readme","bugs":{"url":"https://github.com/Banksia-Corp/signals/issues"},"dist":{"shasum":"44aaa753a578d7184a5b8f37dcf4b1b7318a0826","tarball":"https://registry.npmjs.org/@banksia/signals/-/signals-0.1.5.tgz","fileCount":28,"integrity":"sha512-ICXNF4/NKwhiQnQjgqD9oZg/I5wm0UktwQ/7a1ATh1B2EfTz5zUsmUbKWJZMFHe+/sQGL5g9t9e6u42ar2AE+A==","signatures":[{"sig":"MEYCIQCj9hESApx1tidsvFbJ2j9iey30k4pgz6DHRPVcd8TJbwIhAOX8A0fQY85rCl4SD6f0zG8RCLglV16Bn6eT6pVJUCmI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banksia%2fsignals@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":135074},"type":"module","_from":"file:banksia-signals-0.1.5.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./lit":{"types":"./dist/lit.d.ts","import":"./dist/lit.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./solid":{"types":"./dist/solid.d.ts","import":"./dist/solid.js"},"./vanilla":{"types":"./dist/vanilla.d.ts","import":"./dist/vanilla.js"},"./devtools":{"types":"./dist/devtools.d.ts","import":"./dist/devtools.js"}},"scripts":{"dev":"rslib build --watch","docs":"typedoc","lint":"prettier --check \"src/**/*\" \"tests/**/*\" \"docs/**/*\" README.md AGENTS.md","size":"rslib build && node scripts/check-size-budgets.mjs","test":"vitest run","bench":"vitest bench --run","build":"rslib build","format":"prettier --write .","release":"pnpm run build && changeset publish","docs:watch":"typedoc --watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5a92915e-3798-4ce3-ae0a-f29d481df009"}},"_resolved":"/tmp/311197ea626d755d39ce9fd48fc16a0b/banksia-signals-0.1.5.tgz","_integrity":"sha512-ICXNF4/NKwhiQnQjgqD9oZg/I5wm0UktwQ/7a1ATh1B2EfTz5zUsmUbKWJZMFHe+/sQGL5g9t9e6u42ar2AE+A==","repository":{"url":"git+https://github.com/Banksia-Corp/signals.git","type":"git"},"_npmVersion":"12.0.2","description":"High-performance, Proxy-based fine-grained reactive state framework with multi-framework adapters (React, Lit, SolidJS, Vanilla DOM) and Chrome DevTools MCP observability","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"lit":"^3.2.1","react":"^19.0.0","vitest":"^4.1.10","typedoc":"^0.28.20","lefthook":"^2.1.10","prettier":"^3.8.3","solid-js":"^1.9.5","typescript":"^5.9.3","@rslib/core":"^0.23.2","@types/node":"^26.2.0","@types/react":"^19.2.18","@changesets/cli":"^2.27.1","@changesets/changelog-github":"^0.5.1"},"peerDependencies":{"lit":"^3.0.0","react":"^18.0.0 || ^19.0.0","solid-js":"^1.9.0"},"peerDependenciesMeta":{"lit":{"optional":true},"react":{"optional":true},"solid-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/signals_0.1.5_1787647862715_0.9619533682245818","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@banksia/signals","version":"0.1.6","license":"MIT","_id":"@banksia/signals@0.1.6","maintainers":[{"name":"luism","email":"luizinho3@gmail.com"}],"homepage":"https://github.com/Banksia-Corp/signals#readme","bugs":{"url":"https://github.com/Banksia-Corp/signals/issues"},"dist":{"shasum":"ba11ab9904405e2a037fafc4f098bfaf42a0f0bc","tarball":"https://registry.npmjs.org/@banksia/signals/-/signals-0.1.6.tgz","fileCount":28,"integrity":"sha512-GCMYAUXLUUNPqtYiaAQhjEZ/GR5qQYQhvpD9PoAH6oUkZBSHheV6W7iuutcxJu3x8sSX/h9OP4o/ahX4BuAu+A==","signatures":[{"sig":"MEUCIQCgcphoU1xPIM3cDmaSOzrLJk+xst4kYgI19qUxG3Kq8gIgFVqkCIItQsU4tskmgXl4R/fpKtw3dBI4Sxpl1FpRtrg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banksia%2fsignals@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":136447},"type":"module","_from":"file:banksia-signals-0.1.6.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./lit":{"types":"./dist/lit.d.ts","import":"./dist/lit.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./solid":{"types":"./dist/solid.d.ts","import":"./dist/solid.js"},"./vanilla":{"types":"./dist/vanilla.d.ts","import":"./dist/vanilla.js"},"./devtools":{"types":"./dist/devtools.d.ts","import":"./dist/devtools.js"}},"scripts":{"dev":"rslib build --watch","docs":"typedoc","lint":"prettier --check \"src/**/*\" \"tests/**/*\" \"docs/**/*\" README.md AGENTS.md","size":"rslib build && node scripts/check-size-budgets.mjs","test":"vitest run","bench":"vitest bench --run","build":"rslib build","format":"prettier --write .","release":"pnpm run build && changeset publish","docs:api":"typedoc","docs:dev":"rspress dev","docs:build":"typedoc && rspress build","docs:watch":"typedoc --watch","docs:preview":"rspress preview"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5a92915e-3798-4ce3-ae0a-f29d481df009"}},"_resolved":"/tmp/fe463189dd698af4a1a1c1977999331b/banksia-signals-0.1.6.tgz","_integrity":"sha512-GCMYAUXLUUNPqtYiaAQhjEZ/GR5qQYQhvpD9PoAH6oUkZBSHheV6W7iuutcxJu3x8sSX/h9OP4o/ahX4BuAu+A==","repository":{"url":"git+https://github.com/Banksia-Corp/signals.git","type":"git"},"_npmVersion":"12.0.2","description":"Ultra-fast reactivity engine for the modern web with pure domain models, multi-framework adapters (React, Lit, SolidJS, Vanilla DOM), and first-class observability","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"lit":"^3.2.1","react":"^19.0.0","vitest":"^4.1.10","rspress":"^1.47.2","typedoc":"^0.28.20","lefthook":"^2.1.10","prettier":"^3.8.3","solid-js":"^1.9.5","react-dom":"^19.2.8","typescript":"^5.9.3","@rslib/core":"^0.23.2","@types/node":"^26.2.0","@types/react":"^19.2.18","@changesets/cli":"^2.27.1","@types/react-dom":"^19.2.5","@changesets/changelog-github":"^0.5.1"},"peerDependencies":{"lit":"^3.0.0","react":"^18.0.0 || ^19.0.0","solid-js":"^1.9.0"},"peerDependenciesMeta":{"lit":{"optional":true},"react":{"optional":true},"solid-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/signals_0.1.6_1788428787090_0.28322477067250285","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@banksia/signals","version":"0.1.7","license":"MIT","_id":"@banksia/signals@0.1.7","maintainers":[{"name":"luism","email":"luizinho3@gmail.com"}],"homepage":"https://github.com/Banksia-Corp/signals#readme","bugs":{"url":"https://github.com/Banksia-Corp/signals/issues"},"dist":{"shasum":"0a9cf9e94cc614239f19b23080b151b85824003f","tarball":"https://registry.npmjs.org/@banksia/signals/-/signals-0.1.7.tgz","fileCount":28,"integrity":"sha512-6OB3H+UtNLL7+owvCOVyF912IayF7J/FIybzCBil6rBoeiGMhU2JIaDK+jHz+meAqxxHWRGPI7D7u6uuk0z8tQ==","signatures":[{"sig":"MEYCIQCv47MYYMXL3HUK7Ae+ifntS58YUjsXLPIvfN7YgeyXaQIhANVnSgerln4AsCuRoi+O7ff+QVcua2YXUbslU0MvDE9g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banksia%2fsignals@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":136522},"type":"module","_from":"file:banksia-signals-0.1.7.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./lit":{"types":"./dist/lit.d.ts","import":"./dist/lit.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./solid":{"types":"./dist/solid.d.ts","import":"./dist/solid.js"},"./vanilla":{"types":"./dist/vanilla.d.ts","import":"./dist/vanilla.js"},"./devtools":{"types":"./dist/devtools.d.ts","import":"./dist/devtools.js"}},"scripts":{"dev":"rslib build --watch","docs":"typedoc","lint":"prettier --check \"src/**/*\" \"tests/**/*\" \"docs/**/*\" README.md AGENTS.md","size":"rslib build && node scripts/check-size-budgets.mjs","test":"vitest run","bench":"vitest bench --run","build":"rslib build","format":"prettier --write .","release":"pnpm run build && changeset publish","docs:api":"typedoc","docs:dev":"rspress dev","docs:build":"typedoc && rspress build && node scripts/docs-postbuild.mjs","docs:watch":"typedoc --watch","docs:preview":"rspress preview"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5a92915e-3798-4ce3-ae0a-f29d481df009"}},"_resolved":"/tmp/1e827a3a5263f11784019056bb503651/banksia-signals-0.1.7.tgz","_integrity":"sha512-6OB3H+UtNLL7+owvCOVyF912IayF7J/FIybzCBil6rBoeiGMhU2JIaDK+jHz+meAqxxHWRGPI7D7u6uuk0z8tQ==","repository":{"url":"git+https://github.com/Banksia-Corp/signals.git","type":"git"},"_npmVersion":"12.0.2","description":"Ultra-fast reactivity engine for the modern web with pure domain models, multi-framework adapters (React, Lit, SolidJS, Vanilla DOM), and first-class observability","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"lit":"^3.2.1","react":"^19.0.0","vitest":"^4.1.10","rspress":"1.47.2","typedoc":"^0.28.20","lefthook":"^2.1.10","prettier":"^3.8.3","solid-js":"^1.9.5","react-dom":"^19.2.8","typescript":"^5.9.3","@rslib/core":"^0.23.2","@types/node":"^26.2.0","@types/react":"^19.2.18","@changesets/cli":"^2.27.1","@types/react-dom":"^19.2.5","@rspress/plugin-typedoc":"1.47.2","@changesets/changelog-github":"^0.5.1"},"peerDependencies":{"lit":"^3.0.0","react":"^18.0.0 || ^19.0.0","solid-js":"^1.9.0"},"peerDependenciesMeta":{"lit":{"optional":true},"react":{"optional":true},"solid-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/signals_0.1.7_1788570076294_0.24188960507250123","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@banksia/signals","version":"0.2.0","description":"Ultra-fast reactivity engine for the modern web with pure domain models, multi-framework adapters (React, Lit, SolidJS, Vanilla DOM), and first-class observability","type":"module","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./lit":{"types":"./dist/lit.d.ts","import":"./dist/lit.js"},"./solid":{"types":"./dist/solid.d.ts","import":"./dist/solid.js"},"./vanilla":{"types":"./dist/vanilla.d.ts","import":"./dist/vanilla.js"},"./devtools":{"types":"./dist/devtools.d.ts","import":"./dist/devtools.js"}},"types":"./dist/index.d.ts","sideEffects":["./dist/devtools.js","./src/devtools.ts"],"publishConfig":{"access":"public","provenance":true},"repository":{"type":"git","url":"git+https://github.com/Banksia-Corp/signals.git"},"bugs":{"url":"https://github.com/Banksia-Corp/signals/issues"},"homepage":"https://github.com/Banksia-Corp/signals#readme","license":"MIT","peerDependencies":{"lit":"^3.0.0","react":"^18.0.0 || ^19.0.0","solid-js":"^1.9.0"},"peerDependenciesMeta":{"lit":{"optional":true},"react":{"optional":true},"solid-js":{"optional":true}},"devDependencies":{"@changesets/changelog-github":"^0.5.1","@changesets/cli":"^2.27.1","@rslib/core":"^0.23.2","@rspress/plugin-typedoc":"1.47.2","@types/node":"^26.2.0","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","lefthook":"^2.1.10","lit":"^3.2.1","prettier":"^3.8.3","react":"^19.0.0","react-dom":"^19.2.8","rspress":"1.47.2","solid-js":"^1.9.5","typedoc":"^0.28.20","typescript":"^5.9.3","vitest":"^4.1.10"},"scripts":{"build":"rslib build","dev":"rslib build --watch","docs":"typedoc","docs:api":"typedoc","docs:dev":"rspress dev","docs:build":"typedoc && rspress build && node scripts/docs-postbuild.mjs","docs:preview":"rspress preview","docs:watch":"typedoc --watch","format":"prettier --write .","lint":"prettier --check \"src/**/*\" \"tests/**/*\" \"docs/**/*\" README.md AGENTS.md","size":"rslib build && node scripts/check-size-budgets.mjs","test":"vitest run","bench":"vitest bench --run","release":"pnpm run build && changeset publish"},"_id":"@banksia/signals@0.2.0","_integrity":"sha512-NBFTR0006DqQsv64xdpTLl976E3ztPRkxv+jIWUr1k8NNdwYsvqOziCPoPDQdBz5T/h4i6StnPrYugzLmbPUhA==","_resolved":"/tmp/12f8297e27019c1e5c4687e1f69f2f70/banksia-signals-0.2.0.tgz","_from":"file:banksia-signals-0.2.0.tgz","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-NBFTR0006DqQsv64xdpTLl976E3ztPRkxv+jIWUr1k8NNdwYsvqOziCPoPDQdBz5T/h4i6StnPrYugzLmbPUhA==","shasum":"419fa86dc8836d3b1864300481ff31a77fe98411","tarball":"https://registry.npmjs.org/@banksia/signals/-/signals-0.2.0.tgz","fileCount":30,"unpackedSize":137212,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banksia%2fsignals@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCKijjxO3/AQISHifQ21j20zqLQxle9KfNFtUy95xlbxQIhAJD34RtPYgjedQGOjG3g5741wVrWdqTIzWl+DDE0Gny5"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5a92915e-3798-4ce3-ae0a-f29d481df009"}},"directories":{},"maintainers":[{"name":"luism","email":"luizinho3@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/signals_0.2.0_1788591193254_0.7812084787679814"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-22T06:17:47.153Z","modified":"2026-09-05T06:53:13.704Z","0.0.0":"2026-08-22T06:17:47.490Z","0.1.0":"2026-08-22T06:48:49.125Z","0.1.2":"2026-08-23T04:08:39.447Z","0.1.3":"2026-08-23T04:21:15.367Z","0.1.4":"2026-08-23T04:31:10.952Z","0.1.5":"2026-08-25T08:51:02.851Z","0.1.6":"2026-09-03T09:46:27.271Z","0.1.7":"2026-09-05T01:01:16.434Z","0.2.0":"2026-09-05T06:53:13.394Z"},"bugs":{"url":"https://github.com/Banksia-Corp/signals/issues"},"license":"MIT","homepage":"https://github.com/Banksia-Corp/signals#readme","repository":{"type":"git","url":"git+https://github.com/Banksia-Corp/signals.git"},"description":"Ultra-fast reactivity engine for the modern web with pure domain models, multi-framework adapters (React, Lit, SolidJS, Vanilla DOM), and first-class observability","maintainers":[{"name":"luism","email":"luizinho3@gmail.com"}],"readme":"# `@banksia/signals`\n\n> An ultra-fast reactivity engine for the modern web.\n\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)\n[![Zero Dependencies](https://img.shields.io/badge/Dependencies-Zero-green.svg)](<>)\n[![Framework Agnostic](https://img.shields.io/badge/Framework-React%20%7C%20Lit%20%7C%20Solid%20%7C%20Vanilla-purple.svg)](<>)\n[![Documentation Portal](https://img.shields.io/badge/Documentation-Rspress%20%2B%20TypeDoc-0ea5e9.svg)](https://banksia-corp.github.io/signals/)\n\n📚 **Interactive Documentation & API Portal**: [https://banksia-corp.github.io/signals/](https://banksia-corp.github.io/signals/)\n\n---\n\n### Highlights\n\n- 🚀 **Ultra-Fast Signals**: Fine-grained dependency tracking and automatic microtask batching update only what changed with zero flicker.\n- 📦 **Pure Domain Models**: Standard classes and objects—no decorators, no base classes, no store boilerplate.\n- 🔍 **First-Class Observability**: Built-in hooks and telemetry hubs ready for dev tooling and agentic workflows.\n- 🔌 **Universal Framework Adapters**: One domain model runs across React, Lit, SolidJS, and Vanilla DOM.\n- 🪶 **Zero Dependencies**: Lightweight engine (~2.5 kB minified) with 0 external dependencies.\n\n---\n\n## Table of Contents\n\n- [Overview & Architectural Motivation](#overview--architectural-motivation)\n  - [Core Pillars](#core-pillars)\n  - [Architecture Topology](#architecture-topology)\n- [Installation & Subpath Exports](#installation--subpath-exports)\n- [Quickstart in 5 Minutes](#quickstart-in-5-minutes)\n- [Core Primitives Deep Dive](#core-primitives-deep-dive)\n  - [`makeReactive`, `isReactive`, & `toRaw`](#makereactive-isreactive--toraw)\n  - [Standalone Primitives: `signal`, `computed`, & `effect`](#standalone-primitives-signal-computed--effect)\n  - [Granular Collection Traps (`Array`, `Map`, `Set`)](#granular-collection-traps-array-map-set)\n  - [Transaction Batching (`batch` & `flushBatch`)](#transaction-batching-batch--flushbatch)\n- [Multi-Tier Domain Store Architecture](#multi-tier-domain-store-architecture)\n- [Framework Adapters](#framework-adapters)\n  - [React (`@banksia/signals/react`)](#react-banksiasignalsreact)\n  - [Lit (`@banksia/signals/lit`)](#lit-banksiasignalslit)\n  - [SolidJS (`@banksia/signals/solid`)](#solidjs-banksiasignalssolid)\n  - [Vanilla DOM (`@banksia/signals/vanilla`)](#vanilla-dom-banksiasignalsvanilla)\n- [Observability, Telemetry & DevTools Ecosystem](#observability-telemetry--devtools-ecosystem)\n  - [Primitive-First Lifecycle Hooks (`registerReactivityHooks`)](#primitive-first-lifecycle-hooks-registerreactivityhooks)\n  - [Target-Scoped Observation (`observe`)](#target-scoped-observation-observe)\n  - [Dedicated Telemetry Hubs (`createReactivityHub`)](#dedicated-telemetry-hubs-createreactivityhub)\n  - [Chrome DevTools MCP & AI Agent Bridge (`@banksia/signals/devtools`)](#chrome-devtools-mcp--ai-agent-bridge-banksiasignalsdevtools)\n  - [Chrome DevTools MCP Recipes (`evaluate_script`)](#chrome-devtools-mcp-recipes-evaluate_script)\n- [API Reference Matrix](#api-reference-matrix)\n\n---\n\n## Overview & Architectural Motivation\n\nBuild your domain model once and plug into your framework of choice.\n\nTraditional state management often ties your business logic directly to a specific UI framework, introducing common architectural bottlenecks:\n\n- **Framework Lock-In**: Tangling domain rules in UI-specific state hooks or stores makes code hard to reuse across micro-frontends or migrate to modern stacks.\n- **Boilerplate & Indirection**: Action creators, dispatchers, and reducer ceremony complicate straightforward property mutations.\n- **Coarse-Grained Re-rendering**: Updating a single nested property or collection item can trigger broad component re-renders and wasteful diffing cycles.\n- **State Glitches & Layout Thrashing**: Uncoordinated synchronous mutations cause transient intermediate states and repeated DOM layout churn.\n\n`@banksia/signals` delivers an **ultra-fast reactivity engine built on fine-grained signals** that solves these challenges with pure JavaScript syntax, automatic dependency tracking, and seamless multi-framework interoperability.\n\n### Core Pillars\n\n1. **Pure Domain Models**: Store classes and state models remain standard, idiomatic TypeScript classes with direct property reads and writes—no decorators, base classes, or store boilerplate.\n2. **Ultra-Fast Signals & Automatic Batching**: Dependency edges are dynamically recorded on property access so updates trigger surgical reactions strictly for changed properties and collection indices. Synchronous state mutations across multiple properties collapse into a single microtask turn with zero UI flicker.\n3. **First-Class Observability**: Primitive-first lifecycle hooks, target-scoped observers, and telemetry hubs let you inspect state, trace dependency graphs, and audit mutations across developer tooling and agentic workflows.\n4. **Universal Framework Portability**: Domain logic lives independently of UI libraries, seamlessly connecting to React, Lit, SolidJS, or Vanilla DOM via dedicated adapter subpaths.\n5. **Zero Dependencies & Lightweight Core**: Under ~2.5 kB minified with zero external runtime dependencies, built directly on modern web primitives for maximum runtime speed and minimal bundle footprint.\n\n### Architecture Topology\n\n```mermaid\nflowchart TD\n    subgraph Domain [\"Domain Layer (Framework-Agnostic)\"]\n        Store[\"Domain Store (makeReactive / signal)\"]\n        Computed[\"Derived Values (computed)\"]\n        Collections[\"Native Collections (Array, Map, Set)\"]\n    end\n\n    subgraph Core [\"Signals Engine\"]\n        ProxyTraps[\"Proxy Traps (get / set / delete)\"]\n        Scheduler[\"Microtask Scheduler & Batch Queue\"]\n        Telemetry[\"Observability Hooks & DevTools Bridge\"]\n    end\n\n    subgraph ViewAdapters [\"UI & Consumer Layer\"]\n        React[\"@banksia/signals/react\"]\n        Lit[\"@banksia/signals/lit\"]\n        Solid[\"@banksia/signals/solid\"]\n        Vanilla[\"@banksia/signals/vanilla\"]\n        MCP[\"Chrome DevTools MCP / AI Agents\"]\n    end\n\n    Store --> ProxyTraps\n    Collections --> ProxyTraps\n    ProxyTraps --> Scheduler\n    Scheduler --> Computed\n    Scheduler --> Telemetry\n    Computed --> ViewAdapters\n    Scheduler --> ViewAdapters\n    Telemetry --> MCP\n```\n\n## Installation & Subpath Exports\n\n```bash\n# pnpm\npnpm add @banksia/signals\n\n# npm\nnpm install @banksia/signals\n\n# yarn\nyarn add @banksia/signals\n\n# bun\nbun add @banksia/signals\n\n# JSR\nnpx jsr add @banksia/signals\n```\n\nOr in your application's `package.json`:\n\n```json\n{\n  \"dependencies\": {\n    \"@banksia/signals\": \"workspace:*\"\n  }\n}\n```\n\n### Export Subpaths\n\n| Subpath                         | Purpose                          | Key Exports                                                                                                                                               |\n| :------------------------------ | :------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`@banksia/signals`**          | Core reactive engine & telemetry | `makeReactive`, `isReactive`, `toRaw`, `signal`, `computed`, `effect`, `batch`, `flushBatch`, `registerReactivityHooks`, `observe`, `createReactivityHub` |\n| **`@banksia/signals/react`**    | React integration hooks & HOCs   | `useReactive`, `observer`, `useSignal`, `useComputed`                                                                                                     |\n| **`@banksia/signals/lit`**      | Lit element lifecycle controller | `SignalsController`                                                                                                                                       |\n| **`@banksia/signals/solid`**    | SolidJS reactive signal bridge   | `createSolidSignalBridge`                                                                                                                                 |\n| **`@banksia/signals/vanilla`**  | Zero-framework DOM bindings      | `bindDOM`, `bindText`                                                                                                                                     |\n| **`@banksia/signals/devtools`** | Chrome DevTools MCP & inspection | `initDevTools`, `connectDevTools`, `disconnectDevTools`, `getDevToolsBridge`, `DevToolsBridge`                                                            |\n\n---\n\n## Quickstart in 5 Minutes\n\nLet's build a realistic e-commerce shopping cart domain store, complete with nested collections, derived totals, atomic checkout batching, and a React component.\n\n### 1. Define the Reactive Domain Store\n\n```ts\nimport { makeReactive, computed } from \"@banksia/signals\";\n\nexport interface CartItem {\n  id: string;\n  name: string;\n  price: number;\n  quantity: number;\n}\n\nexport class CartStore {\n  public items: CartItem[] = [];\n  public coupons = new Map<string, number>(); // Coupon code -> discount percentage\n  public appliedTags = new Set<string>();\n  public isCheckingOut = false;\n\n  constructor() {\n    return makeReactive(this); // Auto-proxies instance properties and collection methods\n  }\n\n  // Derived state automatically recomputes when items or coupons mutate\n  public total = computed(() => {\n    const subtotal = this.items.reduce(\n      (sum, item) => sum + item.price * item.quantity,\n      0,\n    );\n    const discountPercent = Array.from(this.coupons.values()).reduce(\n      (acc, d) => acc + d,\n      0,\n    );\n    const discount = subtotal * (discountPercent / 100);\n    return Math.max(0, subtotal - discount);\n  });\n\n  public addItem(item: CartItem): void {\n    const existing = this.items.find((i) => i.id === item.id);\n    if (existing) {\n      existing.quantity += item.quantity;\n    } else {\n      this.items.push(item);\n    }\n  }\n\n  public applyCoupon(code: string, discountPercent: number): void {\n    this.coupons.set(code, discountPercent);\n  }\n\n  // Multi-property mutations inside methods automatically execute within an atomic batch\n  public checkout(): void {\n    this.isCheckingOut = true;\n    this.items = [];\n    this.coupons.clear();\n    this.appliedTags.clear();\n    this.isCheckingOut = false;\n  }\n}\n\nexport const cartStore = new CartStore();\n```\n\n### 2. Connect to a React Component\n\n```tsx\nimport React from \"react\";\nimport { useReactive } from \"@banksia/signals/react\";\nimport { cartStore } from \"./cart-store\";\n\nexport const ShoppingCartView: React.FC = () => {\n  const cart = useReactive(cartStore);\n\n  return (\n    <div className=\"cart-card\">\n      <h2>Shopping Cart ({cart.items.length} items)</h2>\n\n      <ul>\n        {cart.items.map((item) => (\n          <li key={item.id}>\n            <span>\n              {item.name} x {item.quantity}\n            </span>\n            <span>${(item.price * item.quantity).toFixed(2)}</span>\n            <button onClick={() => item.quantity++}>+</button>\n          </li>\n        ))}\n      </ul>\n\n      <div className=\"cart-summary\">\n        <p>\n          <strong>Total: ${cart.total.value.toFixed(2)}</strong>\n        </p>\n        <button\n          disabled={cart.items.length === 0 || cart.isCheckingOut}\n          onClick={() => cart.checkout()}\n        >\n          {cart.isCheckingOut ? \"Processing...\" : \"Checkout\"}\n        </button>\n      </div>\n    </div>\n  );\n};\n```\n\n---\n\n## Core Primitives Deep Dive\n\n### `makeReactive`, `isReactive`, & `toRaw`\n\n[`makeReactive`](./src/core/proxy.ts) is the foundational transformer. It wraps objects, class instances, arrays, Maps, and Sets into deeply reactive proxies:\n\n- **Nested Reactivity**: Nested objects and collections are wrapped into proxies on-demand upon property access.\n- **Method Batching**: Methods called on reactive objects automatically run inside an atomic [`batch`](./src/core/scheduler.ts).\n- **Identity Preserved**: Calling `makeReactive` multiple times on the same object returns the cached proxy instance.\n- **Non-Trappable Types**: Instances of `Date`, `RegExp`, `Promise`, `Error`, `WeakMap`, and `WeakSet` are preserved without proxy overhead.\n- **Raw Extraction**: `toRaw(proxy)` retrieves the underlying raw object for serialization, hashing, or third-party libraries.\n\n```ts\nimport { makeReactive, isReactive, toRaw } from \"@banksia/signals\";\n\nconst rawData = { user: \"Alice\", settings: { theme: \"dark\" } };\nconst reactiveData = makeReactive(rawData);\n\nconsole.log(isReactive(reactiveData)); // true\nconsole.log(isReactive(rawData)); // false\nconsole.log(toRaw(reactiveData) === rawData); // true\n```\n\n---\n\n### Standalone Primitives: `signal`, `computed`, & `effect`\n\nFor granular, standalone values, `@banksia/signals` provides lightweight signal primitives:\n\n```ts\nimport { signal, computed, effect } from \"@banksia/signals\";\n\n// 1. Primitive Signal\nconst count = signal(0);\nconsole.log(count.value); // Read: 0\ncount.value = 10; // Mutate: triggers dependent reactions\n\n// 2. Computed Derived Value (Lazy & Memoized)\nconst doubled = computed(() => count.value * 2);\nconsole.log(doubled.value); // Read: 20\n\n// 3. Side-Effect Listener\nconst dispose = effect(() => {\n  console.log(`Current Count: ${count.value}, Doubled: ${doubled.value}`);\n  return () => {\n    // Optional cleanup function called before re-execution or on disposal\n  };\n});\n\n// Mutating count automatically triggers the effect\ncount.value = 15;\n\n// Teardown effect subscription\ndispose();\n```\n\n---\n\n### Granular Collection Traps (`Array`, `Map`, `Set`)\n\nMutating native JavaScript collections triggers targeted, key-level or length-level reactive invalidations:\n\n| Collection  | Monitored Operations                                                                  | Mutating Triggers                                                                                   |\n| :---------- | :------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------- |\n| **`Array`** | Index access (`arr[0]`), `arr.length`, iteration (`for..of`, `map`, `filter`)         | `.push()`, `.pop()`, `.shift()`, `.unshift()`, `.splice()`, `.sort()`, `.reverse()`, `arr[i] = val` |\n| **`Map`**   | `.get(key)`, `.has(key)`, `.size`, iteration (`keys`, `values`, `entries`, `forEach`) | `.set(key, val)`, `.delete(key)`, `.clear()`                                                        |\n| **`Set`**   | `.has(value)`, `.size`, iteration (`values`, `forEach`, `Symbol.iterator`)            | `.add(val)`, `.delete(val)`, `.clear()`                                                             |\n\n```ts\nimport { makeReactive, effect } from \"@banksia/signals\";\n\nconst permissions = makeReactive(new Set<string>([\"read\"]));\nconst userRoles = makeReactive(new Map<string, string>([[\"alice\", \"admin\"]]));\n\neffect(() => {\n  console.log(\"Has write permission:\", permissions.has(\"write\"));\n});\n\neffect(() => {\n  console.log(\"Alice role:\", userRoles.get(\"alice\"));\n});\n\npermissions.add(\"write\"); // Triggers permissions effect\nuserRoles.set(\"alice\", \"superadmin\"); // Triggers userRoles effect\n```\n\n---\n\n### Transaction Batching (`batch` & `flushBatch`)\n\nCoalesce multiple synchronous property mutations into a single reaction turn:\n\n```ts\nimport { batch, flushBatch } from \"@banksia/signals\";\n\n// Explicit Batch: delays effect runs until the callback finishes\nbatch(() => {\n  user.firstName = \"Ada\";\n  user.lastName = \"Lovelace\";\n  user.role = \"Scientist\";\n}); // Single microtask reaction fired here\n\n// Synchronous Flush (useful in unit tests or when immediate DOM reads are required)\nflushBatch();\n```\n\n---\n\n## Multi-Tier Domain Store Architecture\n\n`@banksia/signals` excels in complex enterprise domain models requiring Root Stores, Child Stores, and cross-store computed graphs:\n\n```ts\nimport { makeReactive, computed, effect } from \"@banksia/signals\";\n\nexport class UserStore {\n  public name = \"Alice\";\n  public tier = \"premium\";\n  constructor() {\n    return makeReactive(this);\n  }\n}\n\nexport class OrderStore {\n  public items: { name: string; price: number }[] = [];\n  constructor() {\n    return makeReactive(this);\n  }\n  public addItem(name: string, price: number) {\n    this.items.push({ name, price });\n  }\n}\n\nexport class RootStore {\n  public user = new UserStore();\n  public orders = new OrderStore();\n\n  constructor() {\n    return makeReactive(this);\n  }\n}\n\nconst root = new RootStore();\n\n// Cross-Store Computed Property\nconst checkoutSummary = computed(() => {\n  const discountRate = root.user.tier === \"premium\" ? 0.1 : 0.0;\n  const rawTotal = root.orders.items.reduce((sum, item) => sum + item.price, 0);\n  const finalTotal = rawTotal * (1 - discountRate);\n  return `${root.user.name} owes $${finalTotal.toFixed(2)} (${root.user.tier} discount applied)`;\n});\n\neffect(() => {\n  console.log(checkoutSummary.value);\n});\n\n// Mutating individual child stores automatically recalculates the cross-store graph\nroot.orders.addItem(\"Mechanical Keyboard\", 150);\nroot.user.tier = \"standard\";\n```\n\n---\n\n## Framework Adapters\n\n### React (`@banksia/signals/react`)\n\nProvides hooks and Higher-Order Components tailored for React 18 & 19:\n\n```tsx\nimport React from \"react\";\nimport {\n  useReactive,\n  observer,\n  useSignal,\n  useComputed,\n} from \"@banksia/signals/react\";\nimport { rootStore } from \"./stores/root-store\";\n\n// 1. Hook: Subscribe component to reactive store\nexport const UserHeader: React.FC = () => {\n  const store = useReactive(rootStore);\n  return (\n    <h1>\n      Welcome, {store.user.name} ({store.user.tier})\n    </h1>\n  );\n};\n\n// 2. HOC: Fine-grained Observer component\nexport const OrderCountBadge = observer(() => {\n  return <span className=\"badge\">{rootStore.orders.items.length} items</span>;\n});\n\n// 3. Component-local Signals & Computeds\nexport const QuickCounter: React.FC = () => {\n  const count = useSignal(0);\n  const quadrupled = useComputed(() => count.value * 4);\n\n  return (\n    <button onClick={() => count.value++}>\n      Count: {count.value} (Quad: {quadrupled.value})\n    </button>\n  );\n};\n```\n\n---\n\n### Lit (`@banksia/signals/lit`)\n\nIntegrates with Lit elements through `SignalsController`, managing subscription lifecycles automatically:\n\n```ts\nimport { LitElement, html } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\nimport { SignalsController } from \"@banksia/signals/lit\";\nimport { rootStore } from \"./stores/root-store\";\n\n@customElement(\"order-summary-widget\")\nexport class OrderSummaryWidget extends LitElement {\n  // Automatically attaches hostConnected and hostDisconnected hooks\n  private controller = new SignalsController(this, rootStore);\n\n  render() {\n    return html`\n      <div class=\"summary-box\">\n        <h3>User: ${rootStore.user.name}</h3>\n        <p>Order Count: ${rootStore.orders.items.length}</p>\n      </div>\n    `;\n  }\n}\n```\n\n---\n\n### SolidJS (`@banksia/signals/solid`)\n\nBridges reactive proxy targets into SolidJS's fine-grained JSX accessor system:\n\n```tsx\nimport { createSolidSignalBridge } from \"@banksia/signals/solid\";\nimport { rootStore } from \"./stores/root-store\";\n\nexport function SolidDashboard() {\n  const store = createSolidSignalBridge(rootStore);\n\n  return (\n    <div>\n      <h2>User: {store().user.name}</h2>\n      <p>Orders: {store().orders.items.length}</p>\n    </div>\n  );\n}\n```\n\n---\n\n### Vanilla DOM (`@banksia/signals/vanilla`)\n\nLightweight, zero-dependency helpers for native DOM scripting and micro-frontends:\n\n```ts\nimport { bindText, bindDOM } from \"@banksia/signals/vanilla\";\nimport { rootStore } from \"./stores/root-store\";\n\n// Bind text content directly to reactive expressions\nconst userLabel = document.querySelector(\"#user-label\") as HTMLElement;\nconst unbindUser = bindText(\n  userLabel,\n  () => `Logged in: ${rootStore.user.name}`,\n);\n\n// Bind arbitrary DOM properties and styles with reactive updaters\nconst submitBtn = document.querySelector(\"#checkout-btn\") as HTMLButtonElement;\nconst unbindDOM = bindDOM(submitBtn, (btn) => {\n  btn.disabled = rootStore.orders.items.length === 0;\n  btn.textContent = `Checkout (${rootStore.orders.items.length} items)`;\n});\n```\n\n---\n\n## Observability, Telemetry & DevTools Ecosystem\n\n`@banksia/signals` treats observability as a first-class architectural primitive, providing low-level lifecycle hooks, targeted instance auditing, and a browser DevTools bridge.\n\n```mermaid\nflowchart LR\n    ReactiveMutations[\"Reactivity Engine (Mutations / Flushes)\"] --> ObservabilityPipeline[\"Observability Pipeline\"]\n    ObservabilityPipeline --> GlobalHooks[\"Global Hooks (registerReactivityHooks)\"]\n    ObservabilityPipeline --> ScopedAudit[\"Scoped Observers (observe)\"]\n    ObservabilityPipeline --> FilteredHubs[\"Telemetry Hubs (createReactivityHub)\"]\n    ObservabilityPipeline --> DevToolsBridge[\"DevTools Bridge (window.__BANKSIA_SIGNALS_DEVTOOLS__)\"]\n    DevToolsBridge --> ChromeMCP[\"Chrome DevTools MCP / AI Agents\"]\n```\n\n### Primitive-First Lifecycle Hooks (`registerReactivityHooks`)\n\nAttach global telemetry pipelines (OpenTelemetry APM, custom metrics, error trackers):\n\n```ts\nimport { registerReactivityHooks } from \"@banksia/signals\";\n\nconst unregister = registerReactivityHooks({\n  // Fired when a consumer (computed/effect) tracks a dependency\n  onTrack(source, consumer) {\n    console.debug(`[Track] ${consumer.name} -> ${source.meta.label}`);\n  },\n\n  // Fired on every property mutation\n  onNotify(source, { oldValue, newValue }) {\n    console.log(`[Mutation] ${source.meta.label}:`, oldValue, \"➜\", newValue);\n  },\n\n  // Fired during effect or computed execution\n  onExecute(consumer, context) {\n    if (context.phase === \"end\") {\n      console.debug(`[Executed] ${consumer.name} in ${context.durationMs}ms`);\n    }\n  },\n\n  // Fired during microtask batch scheduler flushes\n  onBatch(stats) {\n    if (stats.phase === \"flush\") {\n      console.debug(`[Batch] Flushed ${stats.flushedCount} reactive reactions`);\n    }\n  },\n\n  // Fired when an error occurs during reactive evaluation\n  onError(error, context) {\n    console.error(`[Reactivity Error in ${context.phase}]`, error);\n  },\n});\n\n// Teardown hooks\nunregister();\n```\n\n---\n\n### Target-Scoped Observation (`observe`)\n\nObserve mutations and reactivity on a specific store or object instance without global noise:\n\n```ts\nimport { observe } from \"@banksia/signals\";\nimport { cartStore } from \"./cart-store\";\n\nconst stopObserving = observe(cartStore, {\n  onNotify(source, change) {\n    auditLog.record({\n      target: \"CartStore\",\n      field: source.meta.property,\n      oldValue: change.oldValue,\n      newValue: change.newValue,\n      timestamp: Date.now(),\n    });\n  },\n});\n```\n\n---\n\n### Dedicated Telemetry Hubs (`createReactivityHub`)\n\nCreate isolated pipelines with custom filter predicates:\n\n```ts\nimport { createReactivityHub } from \"@banksia/signals\";\n\nconst analyticsHub = createReactivityHub({\n  filter: (source) => !source.meta.isPrivate,\n});\n\nanalyticsHub.use({\n  onNotify(source, change) {\n    analyticsClient.track(\"State Change\", {\n      property: source.meta.label,\n      value: change.newValue,\n    });\n  },\n});\n```\n\n---\n\n### Chrome DevTools MCP & AI Agent Bridge (`@banksia/signals/devtools`)\n\nThe DevTools bridge binds to `window.__BANKSIA_SIGNALS_DEVTOOLS__` (and `globalThis.__BANKSIA_SIGNALS_DEVTOOLS__`), allowing browser DevTools and autonomous AI agents interacting with the **[Chrome DevTools MCP](https://github.com/ChromeDevTools/chrome-devtools-mcp)** to inspect state, trace dependency graphs, and profile execution performance.\n\n#### Initializing in Your Application\n\n```ts\nimport { initDevTools } from \"@banksia/signals/devtools\";\nimport { rootStore } from \"./stores/root-store\";\n\n// Initialize runtime bridge\nconst devtools = initDevTools({\n  maxBufferSize: 500, // Bounded ring buffer for mutation events\n  sanitizePrivate: true, // Redact private fields (_apiKey -> '[REDACTED_PRIVATE]')\n  recordExecuteEvents: true, // Profile effect & computed runtimes\n  recordBatchEvents: true, // Track scheduler flushes\n});\n\n// Register domain stores with named keys for easy indexing\ndevtools.registerTarget(rootStore, \"RootStore\");\ndevtools.registerTarget(rootStore.user, \"UserStore\");\ndevtools.registerTarget(rootStore.orders, \"OrderStore\");\n```\n\n---\n\n### Chrome DevTools MCP Recipes (`evaluate_script`)\n\nAutonomous AI agents and browser automation tools can inspect live application state and performance in an untracked sandbox without registering phantom subscribers:\n\n#### 1. Query Sandboxed State Snapshot\n\n```js\nwindow.__BANKSIA_SIGNALS_DEVTOOLS__.inspectState(\"UserStore\");\n```\n\n_Output:_\n\n```json\n{\n  \"name\": \"Alice\",\n  \"tier\": \"premium\",\n  \"_sessionSecret\": \"[REDACTED_PRIVATE]\"\n}\n```\n\n#### 2. Introspect Dependency Graph Topology\n\n```js\nwindow.__BANKSIA_SIGNALS_DEVTOOLS__.inspectGraph();\n```\n\n_Output:_\n\n```json\n{\n  \"UserStore\": {\n    \"targetName\": \"UserStore\",\n    \"properties\": {\n      \"name\": { \"subscriberCount\": 2 },\n      \"tier\": { \"subscriberCount\": 1 }\n    }\n  },\n  \"OrderStore\": {\n    \"targetName\": \"OrderStore\",\n    \"properties\": {\n      \"items\": { \"subscriberCount\": 3 }\n    }\n  }\n}\n```\n\n#### 3. Query Recent Mutation Stream\n\n```js\nwindow.__BANKSIA_SIGNALS_DEVTOOLS__.getRecentMutations(5);\n```\n\n_Output:_\n\n```json\n[\n  {\n    \"type\": \"notify\",\n    \"label\": \"OrderStore.items\",\n    \"property\": \"items\",\n    \"oldValue\": [],\n    \"newValue\": [{ \"name\": \"Mechanical Keyboard\", \"price\": 150 }],\n    \"timestamp\": 1755834720123\n  }\n]\n```\n\n#### 4. Profile Scheduler & Execution Performance\n\n```js\nwindow.__BANKSIA_SIGNALS_DEVTOOLS__.getPerformanceMetrics();\n```\n\n_Output:_\n\n```json\n{\n  \"totalBatches\": 14,\n  \"totalMutations\": 42,\n  \"totalExecutions\": 88,\n  \"averageExecutionDurationMs\": 0.28,\n  \"maxExecutionDurationMs\": 1.45,\n  \"errorCount\": 0\n}\n```\n\n---\n\n## API Reference Matrix\n\n| Export                        | Module Subpath              | Type / Signature                                       | Description                                                     |\n| :---------------------------- | :-------------------------- | :----------------------------------------------------- | :-------------------------------------------------------------- |\n| **`makeReactive`**            | `@banksia/signals`          | `<T>(target: T): T`                                    | Wraps object, class, Array, Set, or Map in deep reactive proxy. |\n| **`isReactive`**              | `@banksia/signals`          | `(target: unknown): boolean`                           | Returns true if the target is an active reactive proxy.         |\n| **`toRaw`**                   | `@banksia/signals`          | `<T>(target: T): T`                                    | Unwraps a reactive proxy to its underlying raw object.          |\n| **`signal`**                  | `@banksia/signals`          | `<T>(initial: T): Signal<T>`                           | Creates a standalone reactive signal container.                 |\n| **`computed`**                | `@banksia/signals`          | `<T>(getter: () => T): ReadonlySignal<T>`              | Creates a lazy, memoized computed derived signal.               |\n| **`effect`**                  | `@banksia/signals`          | `(fn: EffectFn): DisposeFn`                            | Creates an auto-tracking reactive side-effect listener.         |\n| **`batch`**                   | `@banksia/signals`          | `<T>(fn: () => T): T`                                  | Groups state mutations into an atomic batch turn.               |\n| **`flushBatch`**              | `@banksia/signals`          | `(): void`                                             | Synchronously flushes pending microtask reactions.              |\n| **`registerReactivityHooks`** | `@banksia/signals`          | `(hooks: ReactivityHooks): () => void`                 | Attaches global reactivity telemetry lifecycle hooks.           |\n| **`observe`**                 | `@banksia/signals`          | `(target: object, hooks: ReactivityHooks): () => void` | Scopes reactivity lifecycle observation to a target.            |\n| **`createReactivityHub`**     | `@banksia/signals`          | `(options?: HubOptions): ReactivityHub`                | Creates an isolated, filterable telemetry hub.                  |\n| **`useReactive`**             | `@banksia/signals/react`    | `<T extends object>(target: T): T`                     | React hook subscribing host component to reactive store.        |\n| **`observer`**                | `@banksia/signals/react`    | `<P>(Component: ComponentType<P>): FC<P>`              | React HOC transforming component into reactive observer.        |\n| **`useSignal`**               | `@banksia/signals/react`    | `<T>(initial: T): Signal<T>`                           | React hook memoizing a component-local signal.                  |\n| **`useComputed`**             | `@banksia/signals/react`    | `<T>(getter: () => T): ReadonlySignal<T>`              | React hook memoizing a component-local computed signal.         |\n| **`SignalsController`**       | `@banksia/signals/lit`      | `class SignalsController`                              | Lit `ReactiveController` binding reactive stores to elements.   |\n| **`createSolidSignalBridge`** | `@banksia/signals/solid`    | `<T>(target: T): () => T`                              | Bridges reactive store into SolidJS signal accessor.            |\n| **`bindDOM`**                 | `@banksia/signals/vanilla`  | `(el: Element, updater: (el) => void): () => void`     | Synchronizes DOM element attributes with reactive state.        |\n| **`bindText`**                | `@banksia/signals/vanilla`  | `(el: HTMLElement, getter: () => string): () => void`  | Synchronizes element `textContent` with reactive expression.    |\n| **`initDevTools`**            | `@banksia/signals/devtools` | `(options?: DevToolsOptions): DevToolsBridge`          | Attaches DevTools inspection bridge to `window`.                |\n","readmeFilename":"README.md"}