{"_id":"@bragamateus/gui","_rev":"9-3cbf0370c70774c0fe21f5d983914831","name":"@bragamateus/gui","dist-tags":{"latest":"1.2.5"},"versions":{"1.0.0":{"name":"@bragamateus/gui","version":"1.0.0","keywords":["gui","ui","framework","reactivity","signals","fine-grained","dom","frontend"],"author":{"name":"Mateus Braga"},"license":"MIT","_id":"@bragamateus/gui@1.0.0","maintainers":[{"name":"bragamateus","email":"gadevs2020@gmail.com"}],"dist":{"shasum":"fd2c59cbc65b01b402800009755d17b730f17fb9","tarball":"https://registry.npmjs.org/@bragamateus/gui/-/gui-1.0.0.tgz","fileCount":20,"integrity":"sha512-XKFqgmomUiP4zi40NVdDHZ38ukkbHOr2C9U6tovQpFxdg+gAtvYZlRJZ7fclCrgiojQ9gVsVJF+k/spGNK7i3g==","signatures":[{"sig":"MEYCIQCF47xQkSGHtMRUKM37f9K2dYwTClTK/2f5tQ80uiLhwwIhALa3OGw+yV91V5sRghYOQl/H7uUaWkQmZLITDKOT0CTa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34801},"main":"./gui/index.js","type":"module","types":"./gui/index.d.ts","module":"./gui/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./gui/index.d.ts","import":"./gui/index.js","default":"./gui/index.js"},"./package.json":"./package.json"},"gitHead":"ce17cd32932609827ebe272d1e1bf916c2873359","scripts":{"check":"node --check gui/index.js && node --check demo/main.js","pack:dry-run":"npm pack --dry-run","prepublishOnly":"npm run check"},"_npmUser":{"name":"bragamateus","email":"gadevs2020@gmail.com"},"_npmVersion":"11.6.2","description":"Minimal performance-first UI runtime with fine-grained reactivity and direct DOM bindings.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gui_1.0.0_1774665153012_0.11568841189104173","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bragamateus/gui","version":"1.0.1","keywords":["gui","ui","framework","reactivity","signals","fine-grained","dom","frontend"],"author":{"name":"Mateus Braga"},"license":"MIT","_id":"@bragamateus/gui@1.0.1","maintainers":[{"name":"bragamateus","email":"gadevs2020@gmail.com"}],"dist":{"shasum":"fb451e43c15947bd133ad37f10d644a766e17517","tarball":"https://registry.npmjs.org/@bragamateus/gui/-/gui-1.0.1.tgz","fileCount":20,"integrity":"sha512-YZOAIyDy8NbV9CIJZ77QXAf7KZfMKEXqrg9QtPpQijeHPnJaV9l8LRsljd/7DcRvjgQ7KuGRbEF8JWaFionqJw==","signatures":[{"sig":"MEUCIHJtLqNgLoQZ1Z+RmtGn7AUuMM/IasBIsz/cRRg2bxVNAiEA1GNvubV5HhxqPD45jN6E+OFKqJ/sYHf/u4hapOi2r7U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32525},"main":"./gui/index.js","type":"module","types":"./gui/index.d.ts","module":"./gui/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./gui/index.d.ts","import":"./gui/index.js","default":"./gui/index.js"},"./package.json":"./package.json"},"gitHead":"e78d47fa76f2bfa8a71ee76c7019efb9de9ef2e7","scripts":{"check":"node --check gui/index.js && node --check demo/main.js","prepack":"node scripts/swap-readme.mjs npm","postpack":"node scripts/swap-readme.mjs restore","pack:dry-run":"npm pack --dry-run","prepublishOnly":"npm run check"},"_npmUser":{"name":"bragamateus","email":"gadevs2020@gmail.com"},"_npmVersion":"11.6.2","description":"Minimal performance-first UI runtime with fine-grained reactivity and direct DOM bindings.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gui_1.0.1_1774666389097_0.6505390546740244","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@bragamateus/gui","version":"1.1.0","keywords":["gui","ui","framework","reactivity","signals","fine-grained","dom","frontend"],"author":{"name":"Mateus Braga"},"license":"MIT","_id":"@bragamateus/gui@1.1.0","maintainers":[{"name":"bragamateus","email":"gadevs2020@gmail.com"}],"dist":{"shasum":"847708b4f5b781e28dc79026cb39f34ebb5f77b6","tarball":"https://registry.npmjs.org/@bragamateus/gui/-/gui-1.1.0.tgz","fileCount":29,"integrity":"sha512-jildBOq9qv1X4OqlAU0LwRSnwsR5o8Ctm569fPvLuAY+rriFBJy8sv9lA9eYji5NAhmffXbvRvBF0Tj6difCHg==","signatures":[{"sig":"MEYCIQDpBiPjrLmXiBc4m3nR4yZgqjytEQM46t7O3JqHTYSlowIhAOTAr/ZZyJ3SCyc6tI7DnDs8Qb+O7jbD106Krdhtb72P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61937},"main":"./gui/index.js","type":"module","types":"./gui/index.d.ts","module":"./gui/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./gui/index.d.ts","import":"./gui/index.js","default":"./gui/index.js"},"./compiler":{"types":"./gui/compiler/index.d.ts","import":"./gui/compiler/index.js","default":"./gui/compiler/index.js"},"./package.json":"./package.json"},"gitHead":"c417e64149ffa73155e7ecd2133e8934a6c469ab","scripts":{"check":"node scripts/check-compiler.mjs && node scripts/check-syntax.mjs","prepack":"node scripts/swap-readme.mjs npm","postpack":"node scripts/swap-readme.mjs restore","pack:dry-run":"npm pack --dry-run","prepublishOnly":"npm run check"},"_npmUser":{"name":"bragamateus","email":"gadevs2020@gmail.com"},"_npmVersion":"11.6.2","description":"Minimal performance-first UI runtime with fine-grained reactivity and direct DOM bindings.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gui_1.1.0_1774808449831_0.6982536856907786","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bragamateus/gui","version":"1.2.0","keywords":["gui","ui","framework","reactivity","signals","fine-grained","dom","frontend"],"author":{"name":"Mateus Braga"},"license":"MIT","_id":"@bragamateus/gui@1.2.0","maintainers":[{"name":"bragamateus","email":"gadevs2020@gmail.com"}],"dist":{"shasum":"477f3f114177ef9e6f22d6df97469dd0b59c049b","tarball":"https://registry.npmjs.org/@bragamateus/gui/-/gui-1.2.0.tgz","fileCount":36,"integrity":"sha512-8DTvrtaJ5GLQClNTv6xkzKTRcGvy5aSXi4gVUDINnprh/W2FWFuRBr0CS98e6x/aOeFA+U2RI3RmHuS2HltZPw==","signatures":[{"sig":"MEYCIQD/7K41SvXqojzspcK3gZcoB2WGvoG1ACLCxhZ++nXJKQIhAPRYB1AXugFwo4ebA2SCwQ0QAaWbqk6/T9B8EfnKv29c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104347},"main":"./gui/index.js","type":"module","types":"./gui/index.d.ts","module":"./gui/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./gui/index.d.ts","import":"./gui/index.js","default":"./gui/index.js"},"./compiler":{"types":"./gui/compiler/index.d.ts","import":"./gui/compiler/index.js","default":"./gui/compiler/index.js"},"./devtools":{"types":"./gui/devtools/index.d.ts","import":"./gui/devtools/index.js","default":"./gui/devtools/index.js"},"./package.json":"./package.json"},"gitHead":"eec68e3edea3818384087cf30655ea47b1611267","scripts":{"test":"vitest run","check":"node scripts/check-devtools.mjs && node scripts/check-compiler.mjs && node scripts/check-syntax.mjs","prepack":"node scripts/swap-readme.mjs npm","postpack":"node scripts/swap-readme.mjs restore","test:watch":"vitest","pack:dry-run":"npm pack --dry-run","test:coverage":"vitest run --coverage","prepublishOnly":"npm run check && npm test"},"_npmUser":{"name":"bragamateus","email":"gadevs2020@gmail.com"},"_npmVersion":"11.6.2","description":"Minimal performance-first UI runtime with fine-grained reactivity and direct DOM bindings.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.3","happy-dom":"^20.8.9","@vitest/coverage-v8":"^4.1.3"},"_npmOperationalInternal":{"tmp":"tmp/gui_1.2.0_1775591877007_0.16513052897009328","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@bragamateus/gui","version":"1.2.1","keywords":["gui","ui","framework","reactivity","signals","fine-grained","dom","frontend"],"author":{"name":"Mateus Braga"},"license":"MIT","_id":"@bragamateus/gui@1.2.1","maintainers":[{"name":"bragamateus","email":"gadevs2020@gmail.com"}],"homepage":"https://github.com/gadevsbr/gUI#readme","bugs":{"url":"https://github.com/gadevsbr/gUI/issues"},"dist":{"shasum":"75854610b9a2d866b7ebc2bb3edec080e536060d","tarball":"https://registry.npmjs.org/@bragamateus/gui/-/gui-1.2.1.tgz","fileCount":36,"integrity":"sha512-GStjd7zWNZbStP/RI1BfAz0HXQl+Az6KNi3ElRtQFuFAUkEHftwJtOBHbA+IKaGJ1jLsKgA4WvAVt+uoWfyoYQ==","signatures":[{"sig":"MEUCIQDOl+58CpgxnWYFCKapkwcDSRWTxShW0a2dCYVGZrjX1wIgej5Jrq0XN47dw0v27ynW9vXmQziDYp1Ru7TkiglmZTc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105242},"main":"./gui/index.js","type":"module","types":"./gui/index.d.ts","module":"./gui/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./gui/index.d.ts","import":"./gui/index.js","default":"./gui/index.js"},"./compiler":{"types":"./gui/compiler/index.d.ts","import":"./gui/compiler/index.js","default":"./gui/compiler/index.js"},"./devtools":{"types":"./gui/devtools/index.d.ts","import":"./gui/devtools/index.js","default":"./gui/devtools/index.js"},"./package.json":"./package.json"},"gitHead":"5ea71f541ec8daddaf3910978ad1034f8ca30031","scripts":{"test":"vitest run","check":"node scripts/check-devtools.mjs && node scripts/check-compiler.mjs && node scripts/check-syntax.mjs","prepack":"node scripts/swap-readme.mjs npm","postpack":"node scripts/swap-readme.mjs restore","test:watch":"vitest","pack:dry-run":"npm pack --dry-run","test:coverage":"vitest run --coverage","prepublishOnly":"npm run check && npm test","publish:github":"npm publish --registry https://npm.pkg.github.com"},"_npmUser":{"name":"bragamateus","email":"gadevs2020@gmail.com"},"repository":{"url":"git+https://github.com/gadevsbr/gUI.git","type":"git"},"_npmVersion":"11.6.2","description":"Minimal performance-first UI runtime with fine-grained reactivity and direct DOM bindings.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.3","happy-dom":"^20.8.9","@vitest/coverage-v8":"^4.1.3"},"_npmOperationalInternal":{"tmp":"tmp/gui_1.2.1_1775593732934_0.3897356992317156","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@bragamateus/gui","version":"1.2.2","keywords":["gui","ui","framework","reactivity","signals","fine-grained","dom","frontend"],"author":{"name":"Mateus Braga"},"license":"MIT","_id":"@bragamateus/gui@1.2.2","maintainers":[{"name":"bragamateus","email":"gadevs2020@gmail.com"}],"homepage":"https://github.com/gadevsbr/gUI#readme","bugs":{"url":"https://github.com/gadevsbr/gUI/issues"},"dist":{"shasum":"cd932bc1d5fcdcc1790c9f7fa1decbb6e843b462","tarball":"https://registry.npmjs.org/@bragamateus/gui/-/gui-1.2.2.tgz","fileCount":39,"integrity":"sha512-5DY1YTZtmMASSnY4Z4064no7JUMWSCdcgtpOza28s4WW8MF0Qrq4JHhwogXmjhL4snXh3hRhjzdZP444uMSTGQ==","signatures":[{"sig":"MEUCIAaz/BbVzZhinloWe5q5B3dRI3F59qx2K8fRFfkQ7hNNAiEA3ne559Ot+4oVY5bSHd/rZt9nJCYnwwJs+QIMz1oUX38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112222},"main":"./gui/index.js","type":"module","types":"./gui/index.d.ts","module":"./gui/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./gui/index.d.ts","import":"./gui/index.js","default":"./gui/index.js"},"./compiler":{"types":"./gui/compiler/index.d.ts","import":"./gui/compiler/index.js","default":"./gui/compiler/index.js"},"./devtools":{"types":"./gui/devtools/index.d.ts","import":"./gui/devtools/index.js","default":"./gui/devtools/index.js"},"./package.json":"./package.json"},"gitHead":"15e3e18905a4515cf76c483745b57138e08b48bc","scripts":{"test":"vitest run","build":"vite build","check":"node scripts/check-devtools.mjs && node scripts/check-compiler.mjs && node scripts/check-syntax.mjs","prepack":"node scripts/swap-readme.mjs npm","postpack":"node scripts/swap-readme.mjs restore","test:watch":"vitest","pack:dry-run":"npm pack --dry-run","test:coverage":"vitest run --coverage","prepublishOnly":"npm run check && npm test","publish:github":"npm publish --registry https://npm.pkg.github.com"},"_npmUser":{"name":"bragamateus","email":"gadevs2020@gmail.com"},"repository":{"url":"git+https://github.com/gadevsbr/gUI.git","type":"git"},"_npmVersion":"11.6.2","description":"Minimal performance-first UI runtime with fine-grained reactivity and direct DOM bindings.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.2","vitest":"^4.1.3","happy-dom":"^20.8.9","@vitest/coverage-v8":"^4.1.3","@codecov/vite-plugin":"^1.9.1"},"_npmOperationalInternal":{"tmp":"tmp/gui_1.2.2_1775928023857_0.410193252186138","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@bragamateus/gui","version":"1.2.3","keywords":["gui","ui","framework","reactivity","signals","fine-grained","dom","frontend"],"author":{"name":"Mateus Braga"},"license":"MIT","_id":"@bragamateus/gui@1.2.3","maintainers":[{"name":"bragamateus","email":"gadevs2020@gmail.com"}],"homepage":"https://github.com/gadevsbr/gUI#readme","bugs":{"url":"https://github.com/gadevsbr/gUI/issues"},"dist":{"shasum":"19f49e27deca1440c16f79c16fc42e2c84e5e9a5","tarball":"https://registry.npmjs.org/@bragamateus/gui/-/gui-1.2.3.tgz","fileCount":39,"integrity":"sha512-/L2/M4PSNMJc8u2WZ24E1IR1dA+rRtcGbtsdoCsYGF9sMP617LByFnl++ELhXlKcpRU5RBkPLN8604tOgqsFtw==","signatures":[{"sig":"MEUCIGEWmqsiphgIBPh31+446dje5SI88bRGw8blyqHSs21HAiEAqjCR0QU3pYwPw5AFNJWhozmWHgNITcmn/P6GQZn5NJ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123284},"main":"./gui/index.js","type":"module","types":"./gui/index.d.ts","module":"./gui/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./gui/index.d.ts","import":"./gui/index.js","default":"./gui/index.js"},"./compiler":{"types":"./gui/compiler/index.d.ts","import":"./gui/compiler/index.js","default":"./gui/compiler/index.js"},"./devtools":{"types":"./gui/devtools/index.d.ts","import":"./gui/devtools/index.js","default":"./gui/devtools/index.js"},"./package.json":"./package.json"},"gitHead":"41df96ecbf42e837cf54f72c52103c4202f60ca5","scripts":{"test":"vitest run","build":"vite build","check":"node scripts/check-devtools.mjs && node scripts/check-compiler.mjs && node scripts/check-syntax.mjs","prepack":"node scripts/swap-readme.mjs npm","postpack":"node scripts/swap-readme.mjs restore","test:watch":"vitest","pack:dry-run":"npm pack --dry-run","test:coverage":"vitest run --coverage","prepublishOnly":"npm run check && npm test","publish:github":"npm publish --registry https://npm.pkg.github.com"},"_npmUser":{"name":"bragamateus","email":"gadevs2020@gmail.com"},"repository":{"url":"git+https://github.com/gadevsbr/gUI.git","type":"git"},"_npmVersion":"11.6.2","description":"Minimal performance-first UI runtime with fine-grained reactivity and direct DOM bindings.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.2","vitest":"^4.1.3","happy-dom":"^20.8.9","@vitest/coverage-v8":"^4.1.3","@codecov/vite-plugin":"^1.9.1"},"_npmOperationalInternal":{"tmp":"tmp/gui_1.2.3_1775928269350_0.7558756552430381","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@bragamateus/gui","version":"1.2.4","keywords":["gui","ui","framework","reactivity","signals","fine-grained","dom","frontend"],"author":{"name":"Mateus Braga"},"license":"MIT","_id":"@bragamateus/gui@1.2.4","maintainers":[{"name":"bragamateus","email":"gadevs2020@gmail.com"}],"homepage":"https://github.com/gadevsbr/gUI#readme","bugs":{"url":"https://github.com/gadevsbr/gUI/issues"},"dist":{"shasum":"0c3f963c337e155a28e324ea4dc6c0d1267686b0","tarball":"https://registry.npmjs.org/@bragamateus/gui/-/gui-1.2.4.tgz","fileCount":40,"integrity":"sha512-RISTlLS8Me8hEYDaUwLFxGbQ18KZdo1GxcylNz2/QPdEW1JTWVomoQBM/VM4ih4SUF7InaSRH+vHLZBPngnLTw==","signatures":[{"sig":"MEYCIQD8/6g/6g7/HWvNiizUB/rZdopM6sv11+sH3FLY8d4e5AIhALdw24iXB+iMIZT8U1dTxOG1jqHn9Y2Wp4sNKWvqMNDP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127166},"main":"./gui/index.js","type":"module","types":"./gui/index.d.ts","module":"./gui/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./gui/index.d.ts","import":"./gui/index.js","default":"./gui/index.js"},"./compiler":{"types":"./gui/compiler/index.d.ts","import":"./gui/compiler/index.js","default":"./gui/compiler/index.js"},"./devtools":{"types":"./gui/devtools/index.d.ts","import":"./gui/devtools/index.js","default":"./gui/devtools/index.js"},"./package.json":"./package.json"},"gitHead":"8ab7b0c5fcb46ae57cfa88fbe9305e70bfd26877","scripts":{"test":"vitest run","build":"vite build","check":"node scripts/check-devtools.mjs && node scripts/check-compiler.mjs && node scripts/check-syntax.mjs","prepack":"node scripts/swap-readme.mjs npm","postpack":"node scripts/swap-readme.mjs restore","test:watch":"vitest","pack:dry-run":"npm pack --dry-run","test:coverage":"vitest run --coverage","prepublishOnly":"npm run check && npm test","publish:github":"npm publish --registry https://npm.pkg.github.com"},"_npmUser":{"name":"bragamateus","email":"gadevs2020@gmail.com"},"repository":{"url":"git+https://github.com/gadevsbr/gUI.git","type":"git"},"_npmVersion":"11.6.2","description":"Minimal performance-first UI runtime with fine-grained reactivity and direct DOM bindings.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.2","vitest":"^4.1.3","happy-dom":"^20.8.9","@vitest/coverage-v8":"^4.1.3","@codecov/vite-plugin":"^1.9.1"},"_npmOperationalInternal":{"tmp":"tmp/gui_1.2.4_1775932415764_0.9924418059470734","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@bragamateus/gui","version":"1.2.5","description":"Minimal performance-first UI runtime with fine-grained reactivity and direct DOM bindings.","license":"MIT","author":{"name":"Mateus Braga"},"repository":{"type":"git","url":"git+https://github.com/gadevsbr/gUI.git"},"type":"module","keywords":["gui","ui","framework","reactivity","signals","fine-grained","dom","frontend"],"sideEffects":false,"main":"./gui/index.js","module":"./gui/index.js","types":"./gui/index.d.ts","exports":{".":{"types":"./gui/index.d.ts","import":"./gui/index.js","default":"./gui/index.js"},"./compiler":{"types":"./gui/compiler/index.d.ts","import":"./gui/compiler/index.js","default":"./gui/compiler/index.js"},"./devtools":{"types":"./gui/devtools/index.d.ts","import":"./gui/devtools/index.js","default":"./gui/devtools/index.js"},"./package.json":"./package.json"},"publishConfig":{"access":"public"},"engines":{"node":">=18"},"scripts":{"build":"vite build","check":"node scripts/check-devtools.mjs && node scripts/check-compiler.mjs && node scripts/check-syntax.mjs","pack:dry-run":"npm pack --dry-run","publish:github":"npm publish --registry https://npm.pkg.github.com","prepublishOnly":"npm run check && npm test","prepack":"node scripts/swap-readme.mjs npm","postpack":"node scripts/swap-readme.mjs restore","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage"},"devDependencies":{"@codecov/vite-plugin":"^1.9.1","@vitest/coverage-v8":"^4.1.3","happy-dom":"^20.8.9","vite":"^6.4.2","vitest":"^4.1.3"},"gitHead":"c61089369c84359159f25a10126ca7f313caa9a9","_id":"@bragamateus/gui@1.2.5","bugs":{"url":"https://github.com/gadevsbr/gUI/issues"},"homepage":"https://github.com/gadevsbr/gUI#readme","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-d1PRXiSQhB2b1R30ryegiJ3OAerpxzXmG6n56VPhOBHhnz4To2uipz86sXDDdPTQw/WVXxIxh3cpGJFP1YSMxA==","shasum":"987ff48ef10e8f5557d1356b9b06d4c87cb0602c","tarball":"https://registry.npmjs.org/@bragamateus/gui/-/gui-1.2.5.tgz","fileCount":41,"unpackedSize":126687,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCBM2KE9n1J1tleFMC9bhSSkidExN+BG1CovZPlx05PaQIgASGnvlTGGVGLqM6Yq6RIDlPe5bHkjrRT9rOwUMihK8A="}]},"_npmUser":{"name":"bragamateus","email":"gadevs2020@gmail.com"},"directories":{},"maintainers":[{"name":"bragamateus","email":"gadevs2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gui_1.2.5_1775937131784_0.008247342817205183"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-28T02:32:32.906Z","modified":"2026-04-11T19:52:12.026Z","1.0.0":"2026-03-28T02:32:33.171Z","1.0.1":"2026-03-28T02:53:09.309Z","1.1.0":"2026-03-29T18:20:49.966Z","1.2.0":"2026-04-07T19:57:57.150Z","1.2.1":"2026-04-07T20:28:53.083Z","1.2.2":"2026-04-11T17:20:23.989Z","1.2.3":"2026-04-11T17:24:29.480Z","1.2.4":"2026-04-11T18:33:35.926Z","1.2.5":"2026-04-11T19:52:11.924Z"},"bugs":{"url":"https://github.com/gadevsbr/gUI/issues"},"author":{"name":"Mateus Braga"},"license":"MIT","homepage":"https://github.com/gadevsbr/gUI#readme","keywords":["gui","ui","framework","reactivity","signals","fine-grained","dom","frontend"],"repository":{"type":"git","url":"git+https://github.com/gadevsbr/gUI.git"},"description":"Minimal performance-first UI runtime with fine-grained reactivity and direct DOM bindings.","maintainers":[{"name":"bragamateus","email":"gadevs2020@gmail.com"}],"readme":"# gUI\n\n[![npm version](https://img.shields.io/npm/v/%40bragamateus%2Fgui?label=npm)](https://www.npmjs.com/package/@bragamateus/gui)\n[![license](https://img.shields.io/github/license/gadevsbr/gUI)](./LICENSE)\n[![docs](https://img.shields.io/badge/docs-live-0d7c6b)](https://gadevsbr.github.io/gUI/)\n[![wiki](https://img.shields.io/badge/wiki-available-2359cc)](https://github.com/gadevsbr/gUI/wiki)\n[![codecov](https://codecov.io/github/gadevsbr/gUI/graph/badge.svg?token=6H7DILR5I3)](https://codecov.io/github/gadevsbr/gUI)\n\ngUI is a performance-first JavaScript UI runtime for teams that want exact DOM updates, stable ownership, and a smaller mental model than rerender-driven frameworks.\n\nIt is built around fine-grained reactivity, direct subscriptions, and real DOM bindings. No virtual DOM diffing. No hook scheduler. No full component rerender loop.\n\n## Why gUI\n\nMost UI stacks make broad work look cheap until the screen becomes dense, stateful, or constantly moving.\n\ngUI takes the opposite position:\n\n- state writes should update only the exact bindings that depend on them\n- components should behave like setup functions, not rerender boundaries\n- keyed structures should preserve ownership instead of rebuilding rows\n- cleanup should happen when a subtree actually leaves the DOM\n- zero-build delivery should stay a first-class workflow, not a degraded fallback\n\nThis makes gUI especially useful for:\n\n- dashboards and internal tools with fast-moving metrics\n- browser extensions, embedded widgets, and CMS integrations\n- interactive product surfaces where rerender churn is measurable\n- teams that want explicit reactive flow with less framework overhead\n\n## What ships in the root package\n\n- Fine-grained primitives: `signal()`, `computed()`, `effect()`, `batch()`\n- Deep object and array state: `createStore()` and `unwrapStore()`\n- Async state: `createResource()`\n- Tagged-template rendering: `html()` and `isTemplateResult()`\n- Keyed structural rendering: `list()`\n- Control flow: `Show()`, `Match()`, `Switch()`, `Portal()`\n- Context and props: `createContext()`, `provideContext()`, `useContext()`, `mergeProps()`, `splitProps()`\n- Form helpers: `on()`\n- Native router: `Router()`, `Route()`, `useRouter()`, `push()`, `replace()`\n- Mounting: `mount()` and `createApp()`\n- Runtime instrumentation: `setDomUpdateHook()` and `subscribeDomUpdates()`\n\nSubpath exports:\n\n- `@bragamateus/gui/compiler`\n- `@bragamateus/gui/devtools`\n\n## Install\n\n```bash\nnpm install @bragamateus/gui\n```\n\nGitHub Packages:\n\n```bash\nnpm install @gadevsbr/gui --registry=https://npm.pkg.github.com\n```\n\nThe npm package targets Node `>=18` for tooling and local development.\n\n## Zero-build quickstart\n\ngUI can run directly in the browser with no bundler, no JSX transform, and no build step:\n\n```html\n<script type=\"module\">\nimport { createApp, html, signal } from \"https://esm.sh/@bragamateus/gui\";\n\nconst count = signal(0);\n\nfunction App() {\n  return html`\n    <section>\n      <h1>${count.value}</h1>\n      <button on:click=${() => (count.value += 1)}>Increment</button>\n    </section>\n  `;\n}\n\ncreateApp(\"#app\", App);\n</script>\n```\n\nThis mode is a strong fit for browser extensions, embedded widgets, injected scripts, CMS pages, prototypes, and any environment where adding a build pipeline is friction instead of leverage.\n\n## Runtime example\n\n```js\nimport { createApp, computed, html, list, signal } from \"@bragamateus/gui\";\n\nconst count = signal(0);\nconst rows = signal([\n  { id: \"latency\", label: \"Latency budget\", value: 12 },\n  { id: \"flush\", label: \"Flush stability\", value: 3 },\n]);\n\nconst total = computed(() => rows.value.reduce((sum, row) => sum + row.value, 0));\n\nfunction renderRow(row, index) {\n  return html`\n    <li>\n      <span>${() => index.value + 1}</span>\n      <strong>${() => row.value.label}</strong>\n      <span>${() => row.value.value}</span>\n    </li>\n  `;\n}\n\nfunction App() {\n  return html`\n    <section>\n      <h1>${count.value}</h1>\n      <p>Total: ${() => total.value}</p>\n\n      <button on:click=${() => (count.value += 1)}>Increment</button>\n      <button\n        on:click=${() => {\n          rows.value = [...rows.value].reverse();\n        }}\n      >\n        Reverse rows\n      </button>\n\n      <ul>${list(rows, \"id\", renderRow)}</ul>\n    </section>\n  `;\n}\n\ncreateApp(\"#app\", App);\n```\n\n## Router example\n\nThe router is part of the root package and is designed for client-side navigation without pulling in a third-party SPA router.\n\nIt supports:\n\n- `hash` and `history` modes\n- route params such as `/users/:id`\n- wildcard matches with `*`\n- `push()` and `replace()` helpers\n- `useRouter()` for reactive access to the current path\n- same-origin anchor interception in `history` mode\n\n```js\nimport { Route, Router, html } from \"@bragamateus/gui\";\n\nfunction Home() {\n  return html`<h1>Home</h1>`;\n}\n\nfunction UserPage(id) {\n  return html`<h1>User ${id}</h1>`;\n}\n\nconst App = Router(\n  {\n    mode: \"hash\",\n    fallback: () => html`<h1>404</h1>`,\n  },\n  [\n    Route({ path: \"/\" }, Home),\n    Route({ path: \"/users/:id\" }, ({ id }) => UserPage(id)),\n    Route({ path: \"*\" }, () => html`<h1>Catch-all</h1>`),\n  ],\n);\n```\n\nUse it directly inside a template or pass it to `createApp()` just like any other render closure.\n\n## Store, async data, and forms\n\n`createStore()` gives you deep reactive proxies for objects and arrays. `createResource()` wraps async work in a reactive interface. `on()` turns DOM input events into a signal or setter write.\n\n```js\nimport { createApp, createResource, createStore, html, on, signal } from \"@bragamateus/gui\";\n\nconst profile = createStore({\n  user: {\n    name: \"Mateus\",\n    online: false,\n  },\n});\n\nconst query = signal(\"\");\n\nconst results = createResource(query, async (value) => {\n  if (!value) return [];\n  const response = await fetch(`/api/search?q=${encodeURIComponent(value)}`);\n  return response.json();\n});\n\nfunction App() {\n  return html`\n    <section>\n      <h1>${() => profile.user.name}</h1>\n      <p>Status: ${() => (profile.user.online ? \"online\" : \"offline\")}</p>\n\n      <input\n        value=${() => query.value}\n        placeholder=\"Search\"\n        on:input=${on(query)}\n      />\n\n      <p>${() => (results.loading ? \"Loading...\" : `Results: ${results.value?.length ?? 0}`)}</p>\n    </section>\n  `;\n}\n\ncreateApp(\"#app\", App);\n```\n\n## Optional compiler\n\nFor build-based projects, gUI includes an optional compiler that rewrites most non-event `html\\`...\\`` interpolations into runtime-safe getter functions automatically.\n\nWithout the compiler:\n\n```js\nhtml`<p>${() => count.value * 2}</p>`;\n```\n\nWith the compiler enabled, you can often write:\n\n```js\nhtml`<p>${count.value * 2}</p>`;\n```\n\nCompiler exports:\n\n- `guiVitePlugin()`\n- `guiEsbuildPlugin()`\n- `transformGuiTemplates()`\n\n### Vite\n\n```js\nimport { defineConfig } from \"vite\";\nimport { guiVitePlugin } from \"@bragamateus/gui/compiler\";\n\nexport default defineConfig({\n  plugins: [guiVitePlugin()],\n});\n```\n\n### esbuild\n\n```js\nimport { build } from \"esbuild\";\nimport { guiEsbuildPlugin } from \"@bragamateus/gui/compiler\";\n\nawait build({\n  entryPoints: [\"src/main.js\"],\n  bundle: true,\n  outfile: \"dist/main.js\",\n  plugins: [guiEsbuildPlugin()],\n});\n```\n\n## Devtools and instrumentation\n\ngUI ships with two runtime observation layers:\n\n1. Root-package DOM update hooks:\n   `setDomUpdateHook()` and `subscribeDomUpdates()`\n2. Visual inspector from `@bragamateus/gui/devtools`\n\nThe inspector is opt-in and is not mounted unless you explicitly import and start it:\n\n```js\nimport { createInspector } from \"@bragamateus/gui/devtools\";\n\ncreateInspector({\n  target: \"#app\",\n  title: \"Live DOM Lens\",\n});\n```\n\nThe inspector and hooks expose exact DOM writes, structure changes, source labels, and flush activity so you can verify that the runtime is doing direct binding updates instead of broad rerenders.\n\n## API overview\n\n### State and async\n\n- `signal(initialValue, { label? })`\n  Mutable reactive state with `.value`, `.set()`, `.update()`, `.peek()`, and `.inspect()`.\n- `computed(fn, { label? })`\n  Lazy cached derived state with `.value`, `.peek()`, `.inspect()`, and `.dispose()`.\n- `effect(fn, { label? })`\n  Tracked side effects with cleanup support. Returns a callable handle with `.inspect()`.\n- `batch(fn)`\n  Groups multiple writes into a single flush boundary.\n- `createStore(initialValue)`\n  Deep reactive proxy for objects and arrays.\n- `unwrapStore(store)`\n  Returns the underlying raw object or array from a store proxy.\n- `createResource(source?, fetcher, { initialValue? })`\n  Async state wrapper that exposes `{ value, loading, error, refetch() }`.\n\n### Composition and forms\n\n- `createContext(defaultValue, { label? })`\n- `provideContext(context, value, render)`\n- `useContext(context)`\n- `mergeProps(...sources)`\n- `splitProps(props, ...keysets)`\n- `on(signalOrSetter, transform?)`\n\n### Routing\n\n- `Route({ path }, children)`\n- `Router({ mode?, fallback? }, routes)`\n- `useRouter()`\n- `push(path)`\n- `replace(path)`\n\n### Rendering\n\n- `html(strings, ...values)`\n- `isTemplateResult(value)`\n- `list(source, key, render, { label? })`\n- `Show({ when, children, fallback })`\n- `Match({ when, children })`\n- `Switch(cases, fallback)`\n- `Portal(target, children, { label? })`\n- `mount(target, value)`\n- `createApp(target, component)`\n\n### `defineElement(tag, setup, options?)`\n\nCompiles a gUI layout into a standard, reusable HTML Web Component. Exposes a reactive `props` store that auto-syncs with node attributes and JS properties.\n\n```js\ndefineElement(\"gui-counter\", (props) => {\n  const count = signal(0);\n  return html`<button on:click=${() => count.value++}>\n    ${count.value} (${() => props.theme})\n  </button>`;\n}, { attributes: [\"theme\"], shadow: true });\n```\n*(Usage in native DOM: `<gui-counter theme=\"dark\"></gui-counter>`)*\n\n### Debugging\n\n- `setDomUpdateHook(listener | null)`\n- `subscribeDomUpdates(listener)`\n\n## Runtime rules\n\ngUI supports two usage modes:\n\n- runtime-only mode\n- compile-assisted mode\n\nIn runtime-only mode, JavaScript evaluates expressions before `html()` receives them. That means:\n\n- `${count.value}` is fine for direct primitive reads\n- `${() => count.value * 2}` is the safe reactive form for derived expressions\n- `${count.value * 2}` should usually become a getter or `computed()`\n- nested object reads such as `${() => row.value.label}` should usually stay inside a getter\n\nThe optional compiler removes most of that boilerplate for build-based apps while keeping the same runtime model.\n\n## Performance model\n\ngUI is optimized around a simple rule: state changes should trigger only the work that is truly necessary.\n\n- signals notify direct dependents only\n- computeds stay lazy and cached\n- effects are deduped and flushed in microtasks\n- text and attribute bindings patch real DOM nodes in place\n- keyed list changes move existing nodes instead of rebuilding rows\n- disposed dynamic branches release nested effects and listeners before removal\n\n## Why not SolidJS or Preact Signals?\n\nSolidJS is a complete application framework with JSX, a compiler, SSR, routing, and a large ecosystem. Preact Signals is a state primitive designed to live inside the broader Preact framework.\n\ngUI is narrower and more opinionated:\n\n- it is designed to work with no build step at all\n- it uses a tagged template API instead of JSX\n- it exposes direct DOM instrumentation and an official inspector\n- it keeps the one-time component setup model explicit\n\nIf you need SSR, a meta-framework, and a larger application stack, SolidJS may be the better choice. If you need a focused reactive runtime that can ship in zero-build environments, gUI is built for that job.\n\n## Documentation, demo, and benchmark\n\nThe project site is live at:\n\n- https://gadevsbr.github.io/gUI/\n- https://gadevsbr.github.io/gUI/demo/\n- https://gadevsbr.github.io/gUI/benchmark/\n\nRepository references:\n\n- [index.html](./index.html)\n- [benchmark/index.html](./benchmark/index.html)\n- [ROADMAP.md](./ROADMAP.md)\n- [CHANGELOG.md](./CHANGELOG.md)\n\n## Package structure\n\n```text\ngui/\n  compiler/\n  composition/\n  core/\n  devtools/\n  reactivity/\n  rendering/\n  utils/\ndemo/\nbenchmark/\nindex.html\n```\n\n## Development\n\nValidate the package:\n\n```bash\nnpm run check\n```\n\nRun tests:\n\n```bash\nnpm test\n```\n\nCoverage:\n\n```bash\nnpm run test:coverage\n```\n\nDry-run the published tarball:\n\n```bash\nnpm run pack:dry-run\n```\n\n## Package details\n\n- NPM: `@bragamateus/gui`\n- GitHub Packages: `@gadevsbr/gui`\n- ESM package\n- TypeScript declarations included\n- License: [MIT](./LICENSE)\n","readmeFilename":"README.md"}