{"_id":"kopular","_rev":"56-052dca3e8e34540a466c57092d3e242b","name":"kopular","dist-tags":{"latest":"1.3.2"},"versions":{"0.1.0":{"name":"kopular","version":"0.1.0","keywords":["kopscript","framework","components","ui"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.1.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"dist":{"shasum":"a9c4492bd73380dc76d3c8d63970c80de473b919","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.1.0.tgz","fileCount":8,"integrity":"sha512-F/AzImCbnKh/E3QxbdENeyDWJjE2Q7Tfbv3hTh+vFiqBs5RR5HXQSpAkObgN0egZD89xMA/HT9CGmeu/neB+Nw==","signatures":[{"sig":"MEUCIQCZfaNneLNfObQt44HSus7YG67wHwWKQc2ZURb85r7V4gIgWwLHlkY03FD1oOkoSFkwksm2znXE0izwfrxW6otXKGo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12376},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./router":"./src/router.js","./component":"./src/component.js"},"gitHead":"715eac489b385e4e6f13cf9d2e5a142872496b03","scripts":{"test":"vitest run","build":"ks build src/router.ks","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, and routing, with no template DSL and no DI container","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^2.0.0","kopscript":"^0.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.1.0_1787277654404_0.06970966960508118","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"kopular","version":"0.2.0","keywords":["kopscript","framework","components","ui"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.2.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"dist":{"shasum":"f5608ff4b1dc8b9e401acead5e7bc645d58c2f8c","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.2.0.tgz","fileCount":8,"integrity":"sha512-OnU5qyrILSmvZ/qNPT9FusKoo5IcR9QXjzRPEkqRy49+wPwuq0jn/F/ba1AXLdxYe0Zv/3bQozfAo2qtmjEmVQ==","signatures":[{"sig":"MEQCIC9jfUpFn3+3IRQX3CFrkVcXp2URJy1LgnPEqssUgKuxAiAOH4Ms8aj8mafW5BV8JyGAQ1RxFTr7fseeS2e7vIBT1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13180},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./router":"./src/router.js","./component":"./src/component.js"},"gitHead":"29c54d776cbfdf08cd0023708861f2996606671f","scripts":{"test":"vitest run","build":"ks build src/router.ks","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, and routing, with no template DSL and no DI container","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^2.0.0","kopscript":"^0.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.2.0_1787280478424_0.5273291552945676","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"kopular","version":"0.3.0","keywords":["kopscript","framework","components","ui"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.3.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"dist":{"shasum":"e9179dabfacef5dae3e021797e6202ab3d6cc221","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.3.0.tgz","fileCount":12,"integrity":"sha512-3KijU7LotVyro60AxJmE7/yQsdC7vHkfwqSmhOelpEwgB76RNUrOFTim0i2VhddABrvoLdr3ZJ3FVoah7mKNLg==","signatures":[{"sig":"MEUCIG0+WEt56cPymM9YJcYKsFg9OnCKCxEvCCnOOSsWZfzsAiEAyP9b2/bTqwF49xqlp5kLTpv/+/+TZuXIUHspiWfdNS8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42539},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./router":"./src/router.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"ba4a7f2325b20ee5a37025af72d48d5880583946","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, and routing, with no template DSL and no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^2.0.0","kopscript":"^0.2.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.3.0_1787368596618_0.8405119990151881","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"kopular","version":"0.4.0","keywords":["kopscript","framework","components","ui"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.4.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"dist":{"shasum":"7803c32e0c1e7f0de6ac9bcb2d5f2087a700a6d3","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.4.0.tgz","fileCount":15,"integrity":"sha512-/A3zzBLRVUKBq9bY7dVYqp3VpZKnlR+zjIHfqk5NzH1Ytz3ovrfCd1+BE18iCqJfF/CTR1Dybw/pNINHgVNspA==","signatures":[{"sig":"MEUCIQCB9MCq6dkKSB+i7oMzMCjf6FUKLnojtEq9V9sBbkmS5QIgCdhTH2y/Ht7MlQPBBC3QSf7P5vnG5cY3uk1LR2R1q2c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51161},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./router":"./src/router.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"4385b5c97bfa47fa2a2afceb6999c5ca65d60522","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, structural directives, and HTTP, with no template DSL and no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^2.0.0","kopscript":"^0.3.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.4.0_1787370191644_0.13502105596469494","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"kopular","version":"0.5.0","keywords":["kopscript","framework","components","ui"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.5.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"ad28811867a4f7e035b411f31cbee83942ded7c2","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.5.0.tgz","fileCount":16,"integrity":"sha512-vmNdoRLl7KT+b2pvoUv/NXZ0RSBiuONuE/M4+ZIN1VwtTzlgc7cDQqOT/NdQ9lnSc+osu+LN9WtSvTCnoUBxSw==","signatures":[{"sig":"MEUCIQCujj4nwWxI6Fv5TwAZK1pwWHpFqN2suCzs7Siw2PP4+wIgIjG1E26BWwiq4ALM1l9Cr25EL3OxnlwBj04MLyaHnUg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64422},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./router":"./src/router.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"a238701c4e833890f4ae21369fd910d81bc8e21b","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, structural directives, and HTTP, with no template DSL and no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^2.0.0","kopscript":"^0.4.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.5.0_1787402557228_0.6551411193637213","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"kopular","version":"0.6.1","keywords":["kopscript","framework","components","ui"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.6.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"c9b67660100aaf7955d0f2dc224e2324125036e9","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.6.1.tgz","fileCount":18,"integrity":"sha512-YfUxSzcnNBdhnvWBwWRLS0wKjuxYyAxMLC580HA3IQG5UumtJr3O7NJ7voVXXeWg+3vLwLI9QSytk4RljZK/jg==","signatures":[{"sig":"MEUCIAkypt/lFTm0Jt0Z2lqgBqnl6BAgP4W/vHKXWtP6bmmuAiEAvIrCxvSDCQlO+cm+DKqL6GDmEajnUS6YzJdiE2kNM/U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77469},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"bc607d173ee976fe595189fef3d90874abb0c5a1","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, structural directives, and HTTP, with no template DSL and no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^2.0.0","kopscript":"^0.4.1","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.6.1_1787410617854_0.10791810306211858","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"kopular","version":"0.8.0","keywords":["kopscript","framework","components","ui"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.8.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"6dd346ec79462501836d2faa4e4af4bc4e4438c9","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.8.0.tgz","fileCount":19,"integrity":"sha512-yA/swCV5feh7BPve1HTwKNZW80esONTdoymLMDUzh9fq2dk3cGNVgC0yDEVe9HRga6I7fzKzXiI/blDBX0kvJg==","signatures":[{"sig":"MEYCIQCyYfoTgiDL6QFG0YB49IkKnN7cLNPJFc9vR575cjAbfwIhAJxCwLoTqgUTYUf2u+BtniwLRXr25lnzaa5rvy4OGg+O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93092},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"4acd60ed49c3828620933605bc769fed1e2446a6","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, structural directives, and HTTP, with no template DSL and no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^2.0.0","kopscript":"^0.4.1","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.8.0_1787429205252_0.9488181717376782","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"kopular","version":"0.9.0","keywords":["kopscript","framework","components","ui"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.9.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"22d246c0e39d34f172c2885f9728c42318c58a5e","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.9.0.tgz","fileCount":19,"integrity":"sha512-FIQzq0G2H/v+aJ7ngd6veKs9xLDCC6rb6fG3VZOSsINgpKN7eB98NC3mT4Nhmu4UvQ0BqHAYlFEHwzpeaNLEFA==","signatures":[{"sig":"MEUCIDYSGdUv4N2f+ZkWSHLw/GMGdyn7amXmn3dnQhExnWubAiEA9KR/2VEctMrj1PxuKynIzPBPeMauw2vuYo38krdJbjY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96449},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"ce5fdd3e6ac526e0030de73f7fea60447395fedd","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, structural directives, and HTTP, with no template DSL and no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^2.0.0","kopscript":"^0.5.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.9.0_1787451367545_0.6594220364702812","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"kopular","version":"0.10.0","keywords":["kopscript","framework","components","ui"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.10.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"78618f80c8da5aaf73da75b01a2cbded84743607","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.10.0.tgz","fileCount":19,"integrity":"sha512-xMzIa6n9HWpndTU9s1baNhoGCMmBpDqJeRwqrgzfFweO0oksgl+pFrRH+Xp4dV2wA5apipA27EuxXPdODkOWfg==","signatures":[{"sig":"MEUCIGlwnESNXemMwMPPJ6SM92OD+U53TZigdmSUGSdhzjXFAiEAg+CRlnPsekQ9R2uIzcvUQEh4woHHhTzxld86ZUjDznU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98598},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"1f0f015c419c84fae19b91b0a6d1be5bc97fb32f","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, structural directives, and HTTP, with no template DSL and no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^2.0.0","kopscript":"^0.5.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.10.0_1787461956719_0.808131066068015","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"kopular","version":"0.11.0","keywords":["kopscript","framework","components","ui"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.11.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"3d33e9744fb7a343524315110a2e8472e3d58bab","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.11.0.tgz","fileCount":19,"integrity":"sha512-BF3JbFE3pnAzMo04ocQzE8YJqRTgfFAsK0tyo7II9qWEp86OnYa034m7/p/PwtlMK2XGlylWefcXkfyRVO2dyQ==","signatures":[{"sig":"MEQCICdwTmMoq1IwNgoBbiByw4ns7bPM8Gn0bU0betTbDTdtAiBHE7j6B06Vzeu7ajZEUZFPj/uJAm0LwB5jMxtxEOkSrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107704},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"43d8321d2a1f511ae8e953823086b0e3016878e6","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^2.0.0","kopscript":"^0.7.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.11.0_1787524142266_0.9243022110888135","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"kopular","version":"0.11.1","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.11.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"7f0b0f62352d1cd4b8f6aaa5f18adb842a9ffbc9","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.11.1.tgz","fileCount":20,"integrity":"sha512-Z4Z7m0z+XdTgubvXEwEFU1zRzK2qLE27y7y0Dod7Jj9eXlU3T2A2qOTo2eVpnKBGtQThZpeDHvtavOgPdnxp3A==","signatures":[{"sig":"MEQCIEeuJ4T91AKDJUhh4br0AQqTasxbyKIEPyFD8Yd5rTGUAiB/ubSrRUJV1USEjJ+0WJAX5Ds7/3v9s+NzyFhNUv3Peg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108858},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"848c7ce8193774b95f1f591c3c911ce93415447f","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.7.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.11.1_1787582650208_0.8894558667198926","host":"s3://npm-registry-packages-npm-production"}},"0.11.2":{"name":"kopular","version":"0.11.2","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.11.2","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"661bdb9809efa48b2a724d9ade3769cd774526e8","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.11.2.tgz","fileCount":20,"integrity":"sha512-iHHICcV4neP/Ekuull8HKscJiXUPAmQGQEM/IDRhyxkLb1Kw7bxFm8Ms0Kjfb/LWBCJ5usfYZ0vc5WrYDgBWNw==","signatures":[{"sig":"MEQCIE9w386MyAFGpswCmm5WEQxco8jbc5aIRYHsgKVf2CEVAiB7i1Iq9mSjcd7Y8MPEn5nd4UROkVDnGbofpS5gmUvIIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111189},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"49fa62775d80cf380c53cb2c5890b50a8c1aab74","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.7.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.11.2_1787583933598_0.7353146611971197","host":"s3://npm-registry-packages-npm-production"}},"0.11.3":{"name":"kopular","version":"0.11.3","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.11.3","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"6a43982b4ab43e1422ef9885029cc277cd60bb61","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.11.3.tgz","fileCount":20,"integrity":"sha512-OHwAS8x4GCuptFGpa4YbS8EpqsHmLxe1n1LvX/2dsYeZPxUBxl1fcGA7F+c1MjTNcpfN1qazHALaUqoz3yZRhA==","signatures":[{"sig":"MEUCIQCMq6ApQc2/Lg5LWKBQWXu83d5ieb9fkfNWE7u6Uq//ygIgefU9dji7ENU3z76SX3Cq9GAcHylfPBW8o1S1AKpvhaE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111189},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"3be40b3768b671f511ad14932087d5a21a1ce7b1","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.7.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.11.3_1787590237113_0.09133853123759006","host":"s3://npm-registry-packages-npm-production"}},"0.11.4":{"name":"kopular","version":"0.11.4","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.11.4","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"005767163f033c612b1bc1c80fd9ad734b4aafca","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.11.4.tgz","fileCount":20,"integrity":"sha512-7oPsoYmQR9xzSya77AvpSO+HB8YC4MrYa1IM3SQEdVxoxjpQQtfx831gsUE1du4b5TJm99lPY5dQ03JqPByQSA==","signatures":[{"sig":"MEYCIQDei9O0pBPb6uyVFYaW6ubJ2cmdMyOUiIiNGgohTf4pMgIhAMZ2fex5jJ7PZvrAxpZkkVdY9ROjTVJmnrATEAb0p09k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113414},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"97e304390c34693bf0718fc94c74dea11c609925","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.7.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.11.4_1787613717146_0.32638527667529216","host":"s3://npm-registry-packages-npm-production"}},"0.11.5":{"name":"kopular","version":"0.11.5","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.11.5","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"1cc6f7627755b0fc7e132a5d6d1b001a0839229b","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.11.5.tgz","fileCount":20,"integrity":"sha512-xnWIfthVC5DQ1rU6xe4gOBgumCaLQNQupHgdpNrzn+9C5NTabEYrI2d4n3yf3G/f3hvmIVJIJHnJF9RJ8Ru2rw==","signatures":[{"sig":"MEUCIQC/yQ8A1wMcceKTk/Wcl+Q4u6u+ycoeydfmxOhfym3fGQIgOZAA+dHBLu4z3SC6FwYfr0TzB5zuKcgn8Dwwm7jGG4o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113414},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"65df83fadc871e779160f6bbd1e6176a97b85ea3","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.7.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.11.5_1787615430080_0.3390406514951134","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"kopular","version":"0.12.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.12.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"a8b7f7ed2a6b3c2a4cf092a7503fd43d5bb15c0a","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.12.0.tgz","fileCount":26,"integrity":"sha512-C9yoHoS2iCWApFpitj+cXVfvZAlfjxIXcKZVcA6cIZFOd+5QbYZACWRZg/0ICzUCqcD0Hj6m5OJhY/9+16JIiw==","signatures":[{"sig":"MEUCIDQC1atxrbNeA4klEdS9Z2nKssvVJgnNN4YBkuJoX6JcAiEAi1izwewmN2onL9rkVAasPuRMgDqzhj0ZVECxEwaFpUI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147297},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"0d7d7f77480e9ec63edc8449ad6ed9de91f81a3b","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.16.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.12.0_1787660020725_0.8384142771486987","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"kopular","version":"0.13.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.13.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"1d11050ee64a9e210e2878b4377c6e3ff2ad2312","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.13.0.tgz","fileCount":26,"integrity":"sha512-QRROKXd32NvnNmbKG3LMMoLRQ7u9/yiNA5fVTdNN/+Iv0lGbZrJmJLdm8qIB0S88t38kJ9Py5carMSomo61AYw==","signatures":[{"sig":"MEUCICCXBgRJMOAkdL4WdcjdT6lfF4zbXhxvXvSBuw7cj4RDAiEAjllMGcdM+zk5MjjBBJW3aTrDI+JAN72PSNODiqRCsPI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151929},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"7f8dd85120eab7d08026129743c7c67d3aa822f2","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.16.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.13.0_1787662874666_0.049480885648698125","host":"s3://npm-registry-packages-npm-production"}},"0.14.1":{"name":"kopular","version":"0.14.1","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.14.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"71f182d3ec88c0b48628476513dc178f6ff28afa","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.14.1.tgz","fileCount":32,"integrity":"sha512-65y5r6O+/wh7GAeHEB7kx4zfAVyke9Hrn8im2j+bUv17gOd0kt7Xkg78hIzQ09zfY1qa30gRzbysdMMsE9IUtw==","signatures":[{"sig":"MEQCIF8V6m7Lj4QjNOObogWDM8l5DMN4Dl/1QjD37GkblufnAiAQDl+uNNdVGI2RlLwhWU01IkrKHjsUWtC8sAI/CVoqyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":198577},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"9749854438f0f4d708ae348f4eb1a9ae250dc9d9","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.16.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.14.1_1787692324421_0.7257296918482983","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"kopular","version":"0.15.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.15.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"c402eb142c39383ba8a5d2db7bcf4aee8dcfcbbf","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.15.0.tgz","fileCount":32,"integrity":"sha512-nJDmuNIPhT2qApkmFjK6Ieb7WKfwISnx1uKXUBkQYh8hiiCZmTWt9GLUxIsvN0w//sRKfqJ2tixlEl/rmOBLaw==","signatures":[{"sig":"MEUCIQDrJVAZlGiaqIfodghu1CCyh23DX3GGiP7GOTJTJTdHHgIgbCVVtc7+zb5I6GD122cuud+Zy3zZ7eOuyC1O1Q8CzBQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209191},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"1e95d970e89407bb1b3ad71f0c60c2ec10d5ffd9","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.16.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.15.0_1787703799576_0.19036015453725308","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"kopular","version":"0.15.1","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.15.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"565842b09d04e16cad04551dcbfdb9931fb17060","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.15.1.tgz","fileCount":32,"integrity":"sha512-jY39TEkGTFug2HKVnVum9qEMffV+9k50grVXir+7A6LIHNUxb6FNuSo9b7vGdG4JxvnDGP/kUpU6qmXB8g+OPA==","signatures":[{"sig":"MEUCIQD9G7UC7Cn7ac2yW8mVELjnBEMaWGwj4St5RTC4hOCvtgIgWmPx9UqkzXcLHAQahhD/7I1RF147cMRd+ypsaQY6vqs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":212480},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"a7aa15827609d8645c63cf2548cdf2c947b4c932","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.16.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.15.1_1788007658578_0.2658736824487704","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"kopular","version":"0.16.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.16.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"8707479ec1aebc4adddc8ed028bfcbff604ed3af","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.16.0.tgz","fileCount":32,"integrity":"sha512-LN2EsJBK9TEjgb7oZe0WKLcD5BGz09AcvLKsjuCW1V34x60jUVeTxRDIN6OY7z19OAbMVmtIdQB3+9ancvZRTg==","signatures":[{"sig":"MEUCIQCjmDOnsxnWYj1vka8gKmOQcfCfC0Of0pBU5k9wtD6PJgIgBr/hQJ79RaNSI4Ky97mF+GVEMk3TPHFFS79Hkui9B8k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":234848},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"ce168099a32cd477e9b7053febc9b72f2496807f","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.19.1","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.16.0_1788026213506_0.8595485923266446","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"kopular","version":"0.16.1","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.16.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"55c76c5206575e0ba0d6a2c71be9c5f093098914","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.16.1.tgz","fileCount":32,"integrity":"sha512-/otZJa5nbRiu/VHytvJykel9FzslDfIfC/y1HWVQeYHCv/UVRZ610x6CE6fWSQ3GdhmXd7huqV4zomCdxnEbIQ==","signatures":[{"sig":"MEUCICw6+RGscEdvnQ/6/iGXycAJGC4SGhgp3HJrB62SpHQNAiEAstKSGf8kvEsoev0tuCq6NfX9g34ApHa3d/TjCWvyXOI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":234848},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"7e756364bb104c5c3e3e4344dc36278f8708611b","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.21.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.16.1_1788031746091_0.9067673265752065","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"kopular","version":"0.17.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.17.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"3d965ad83f34c56d989d3f1a3a98164c6d82af8d","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.17.0.tgz","fileCount":32,"integrity":"sha512-iE2T2PO4k32GHt4hiYxPmpfw4AVa5xMS3FU8iJjXdvtbKXMm49Zsj6qjzfqsH9abyreXdTly5kdy02Txz+4UnQ==","signatures":[{"sig":"MEUCIQCSQ4Pls5TXIZLmVK67+JuZjquabqukif5q9KU1eXu/VQIgOC1U5Hf4psowr+9ZrqPlE0CBEVABwikyMTUui0zYuGk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":263181},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"02def19d10136757afc743cff8e030aa499af892","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.22.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.17.0_1788053731260_0.6233389647898835","host":"s3://npm-registry-packages-npm-production"}},"0.17.1":{"name":"kopular","version":"0.17.1","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.17.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"5bc5a91ac8ade3fd302cceefc5fac68cbb062a4f","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.17.1.tgz","fileCount":32,"integrity":"sha512-ss0rYwE9Bl2pOncrc14MorzDNr+j2F6t6fIHnwQs7tCHohzhuv3A5161j32r/6mOwxjmEgis4QzFe7RhIxlWtg==","signatures":[{"sig":"MEYCIQCzAsIGgJtI4NYW1t28GX3RPfFZ6YrFF3GhffqaIXdCegIhAOKCHj5qqSonCjmuYUta3r9c8ePcUYvVtlIIiwG6ER8D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":264038},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"257461e6bb742bd2ae70b7631ee06ea6520bf80a","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.22.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.17.1_1788084741205_0.9385646713744014","host":"s3://npm-registry-packages-npm-production"}},"0.17.2":{"name":"kopular","version":"0.17.2","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.17.2","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"91a7619c1691faad22810f530f818ab0ae4c39af","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.17.2.tgz","fileCount":32,"integrity":"sha512-rg+H8GluGAilKgH4G4c8Okq0vF5bcbUP72+ZyiBR2ksUAiWM1ZBhaYRZmCV/WhMMGpRxmrHy6KvhVuaYlYnyYw==","signatures":[{"sig":"MEQCIFnEI67kTy2BnUqdhWrTdxidP3qAnCWuvJ5JyF03uLi7AiAt/DWCPSplycTfrHTX0E8/7r20LlGgnlADQhR/LR/LEg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":264624},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"13d68f02bf12d4318369549e76e84f06fedda719","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.22.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.17.2_1788086676262_0.720829319745844","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"kopular","version":"0.18.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.18.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"2d90ef240f678c12cfff1b5b5b9ab37a67cae176","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.18.0.tgz","fileCount":32,"integrity":"sha512-pcVxqxCDC03G6KO5nC8EbRccrV7tGwBfWvm+8l59jEMfPHkCV+7VEHi7mx5g1cXvorSAyjZ4rAEJW1yGZWu/zw==","signatures":[{"sig":"MEQCIBXUahulh3y/+pKWyRjxPTG8X81DnlPNg0tMi81VGixDAiBZ+KeOS/pqn0QZvMx90siXejmmHBjk5wMMUZtwB4aqsw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":267854},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"a14f8c497af1b8f2e03728b5510e73ac0de9f8ff","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.22.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.18.0_1788090940171_0.3005070104936911","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"kopular","version":"0.19.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.19.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"93285becdb6c278c4a0705e1f447a157fd1ff51e","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.19.0.tgz","fileCount":35,"integrity":"sha512-hc3VOiRD93rUQewcA71upGXMhMtBSrvb2uAJdQe5Uxe0DnJXk7VvISo2s/Q4XWt5PaUMaR3ODJEal/pRMdfGUg==","signatures":[{"sig":"MEQCIB59ouaS/54uCxtyzjvCPdpjFYDBCOWutwQNCQYNXKE3AiBWxqvY9Lm7Y9UGuRRJzHbQ0qtNIzAqpd0053595zYaKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":277052},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"dc2fb3c0dbea0f08b9b10dfcacdfbe4e4c98d688","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.22.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.19.0_1788097110303_0.3862032568045064","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"kopular","version":"0.20.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.20.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"f01942b4d667d626259673e90961753cba2e887c","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.20.0.tgz","fileCount":38,"integrity":"sha512-qmssrEkjf0NbBzC54uJJB30T4GkS0GTfm2J4r7P9jMhCRJq87v3kE0G+FJuT72lWtUdS8auakYz7zfQMLSgOYg==","signatures":[{"sig":"MEYCIQCthLGRSC7udqjjgQRCEXi+wQzAHNRq21KCBvQydCrxTgIhAMR6LbmoHC2pBro746PpA05iAn9AsgYv4ze36x2fY/qD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282866},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"1aa022fb6772d3ec7043335329e965e419d7415b","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.22.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.20.0_1788101319228_0.193886296535704","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"kopular","version":"0.21.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.21.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"2d80b85bdbc3f8237c227037076c6378503a0da4","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.21.0.tgz","fileCount":38,"integrity":"sha512-enPECSM6lLJODZJ9KCGzBYLhvyYtuAdTIkqwnHzDUFXebCaBgG2x89tl2ISeivWV3VfIE6900bMWuw3q1pGN8w==","signatures":[{"sig":"MEUCIQDk/hJJqQNn/+HjqgxGZZa2QNTNdMvmgB80CyWipdxxpwIgFfbdrJPSdqFdXt+lqHiyv8KLRrAMAwEtR6eVtDCbCMk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299531},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"3ee2cee387159efb7241a5d403a68e9d0578ff11","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.23.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.21.0_1788116716990_0.12284010468767348","host":"s3://npm-registry-packages-npm-production"}},"0.21.1":{"name":"kopular","version":"0.21.1","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.21.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"3696f7a195d418cfd94fcb94bd8806e354552487","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.21.1.tgz","fileCount":38,"integrity":"sha512-0VNkZhLp+1SwH5ksjBEJA0ZZ8ym0D9SCKRYxSZooO8sUwMjMxy1VbFAh9BGeLJ7IujpAGcnUHnTUNHUf48vYRQ==","signatures":[{"sig":"MEQCIHOcVXxSezdwCeH5whI5UcK7BykvI+i/X5KIzqnkXx/WAiAXKZWxUcRzvofEy41HxE+6rh2i+g0Wwk+2tPPZGsw01A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":300769},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"563ad79d6992c6052a59df3ff84039163d8077fb","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.23.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.21.1_1788177393977_0.5088077113795333","host":"s3://npm-registry-packages-npm-production"}},"0.21.2":{"name":"kopular","version":"0.21.2","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.21.2","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"8133878b3425dd2ba86a3258a71c0c78741243db","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.21.2.tgz","fileCount":38,"integrity":"sha512-QmwBLXnOmqcGuCQ+Ve1vBLxiSL8oYFrofP3wcCwVrqoLBC8nmqpSco3QCPWHRLjcalmjGoItqLq55PtpTPLbJA==","signatures":[{"sig":"MEYCIQDzpay0xFxLu+WOnmkNK1fVwnRYpV6n8KoStFVJCZNB/AIhAJWNgMqegzxBB6dvmJPbozoiLUrX/wWRBc+VV6spBqTc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":301402},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"42d84396e8ca637fb043633b2c44ee248e49321e","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.24.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.21.2_1788178552689_0.7037939155405128","host":"s3://npm-registry-packages-npm-production"}},"0.21.3":{"name":"kopular","version":"0.21.3","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.21.3","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"768d20af869bce51c5dae85bfde280ce87cec5a4","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.21.3.tgz","fileCount":38,"integrity":"sha512-l8zEFTz7Odkc4sG2e/7olUixvmXxyJrCWxdZ+6n+1HS4cE9A63N9FWvZ/y1X36gvh1N5oJPkDxuZherf8Au7Rw==","signatures":[{"sig":"MEYCIQDWu6FYZfLk9btvSJQzE+KhnaV6JgQnLHh7r2lDcwX7dwIhAMzyfm1l7Co3s4KpIFWtKqfWGSEMhRRQTdJTy+a+3wLP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":301402},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"108e82965871d8b5ae7bd73efbb61de115056ea0","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.24.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.21.3_1788311908306_0.7608995239907037","host":"s3://npm-registry-packages-npm-production"}},"0.21.4":{"name":"kopular","version":"0.21.4","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.21.4","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"82c5ec2c2bb66aa66c3970bb7ff346908f7078df","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.21.4.tgz","fileCount":38,"integrity":"sha512-c2fI/Ge/TFfCJkVacPxveV5GWp4qTIXM993Wf0xf2dr4ytspOjuvQqEFcLo/Ar/PGePsqi1JlGjQExIm7q10ag==","signatures":[{"sig":"MEUCIF1qY1RXoYi+VOkyrFOUuVlRitnL4jbsL073HhNtOdKXAiEAiNWEm5raXksa9ELwOs0S7ir83+lykSu2b4DpqrEwWq8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":301904},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"86a162639abe4bc9c705a44a24432eda4870eb94","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.25.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.21.4_1788313362107_0.1017473947028198","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"kopular","version":"0.22.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.22.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"b8195e6e9413491cc80b555dbbfcef044ce6dc1d","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.22.0.tgz","fileCount":38,"integrity":"sha512-CiJemp1xwzktQeYkxiWtmB1IlyApQB9IHpzhY/f1cbDK7iMemJoA2WddnptT07aeIlVWIYKxn/NzNsoQql/reA==","signatures":[{"sig":"MEQCIFuZzXM8iJm0exARh8yZDYCZYO/7M/MUk+YO0ZA63OFwAiBubYvRZQTmi0R4TFDuVHFhrXvz1w7wXXyBrRyr8gJXOQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":309436},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"06f42bf14210642752c776fc5722ed749972d08d","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.26.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.22.0_1788356818221_0.14731209819859892","host":"s3://npm-registry-packages-npm-production"}},"0.22.1":{"name":"kopular","version":"0.22.1","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.22.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"9f53b6b995f9921a71b620c744dc2a32d1bf9d0a","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.22.1.tgz","fileCount":38,"integrity":"sha512-bvu6DUUt0OW9eNBk7ACYzwXzG/Hc6PfM9C2M+0ht19LfVg8JrWKXsMVpV93eRs8+l462EuJM640esmobYQhUJw==","signatures":[{"sig":"MEQCIGU6MnCUP2+LcR9iMykKkX4NMhHBwZH8qT2kEEtIm7d2AiBKx/3e8C+20DVh4XG3s6iCH6iVpEJtyPwE0l5h0Ue3oA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":309703},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"d0cc0867b642f7f511d45389842c1fad48d9cdd1","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.26.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.22.1_1788361867145_0.04128929927658653","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"kopular","version":"0.23.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.23.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"beef02c17279a8e045be3364475caa6d51d03640","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.23.0.tgz","fileCount":38,"integrity":"sha512-nXWhuAsei3zzCA8/oKoyvwSyiqSjtmGGvcdoDH609qmDAvqZuaZ+NrivBSxfZ+ScmV+H4tWp3uI6ggzRLRyZ8g==","signatures":[{"sig":"MEUCIQD7r8Ei1ryjppZU/ExJPE+yDe3n3Jg8IlaI0P/R9tQNqAIgeYXKBHccGQVGG5taUcCA0FkURxhIRyKqLNb7gWvze08=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":311346},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"89d5fb915e452de480a08afc456ed1e1646ffd60","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.26.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.23.0_1788371354811_0.4016808187178629","host":"s3://npm-registry-packages-npm-production"}},"0.23.1":{"name":"kopular","version":"0.23.1","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.23.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"c9be3f9e15bc94cd5e551e91a9ab13b02b6b018d","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.23.1.tgz","fileCount":38,"integrity":"sha512-gAHqXImmt6L7QtbqaDUkTxfxd202dghBc0EUjA956ZY4/zU9bheGW42BogxK9gK+GumaOHM8FLdhktuMpopCJQ==","signatures":[{"sig":"MEUCIQCx/WrRxXzX28ONknkqEgXrKA/w6E6mAYUQOKdUJfzrhwIgdP2fN41SSQxd0jtcIZn3Op5MuOjWTAm4RbVb846lTPY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":314344},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"9820ef3c74a7b7f9c1059221288f039b9cd13f67","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.26.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.23.1_1788379150904_0.5897142567917564","host":"s3://npm-registry-packages-npm-production"}},"0.23.2":{"name":"kopular","version":"0.23.2","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@0.23.2","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"1162fe569e11248c37447106c2a33b061d7d1ff4","tarball":"https://registry.npmjs.org/kopular/-/kopular-0.23.2.tgz","fileCount":38,"integrity":"sha512-m6v/znrDIcqFAl1nX2r0ItvqnipiZvWx/S0y0xRtSrzI5nGcpaxGs4l6cdlickTSL210v2UcrXWOfjCnAK+8Bg==","signatures":[{"sig":"MEYCIQCQch7UnbxGdPyCmZUHmbZjBGQyBrglfphbbNdxK4KruQIhAP4Jpky4/F7ED2pMZUIN6+LsO3OedYULALHfz1GvUSHb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":319288},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"031e1b441ee1161deab0fffd5203a0f946697739","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^0.26.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_0.23.2_1788529585259_0.2561368190235651","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"kopular","version":"1.0.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.0.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"65974cb3f6463f1d73aace6e1f8d6e26ae9ffc8a","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.0.0.tgz","fileCount":38,"integrity":"sha512-tFUASiDjgpSVTV9xRBnP0WrlheVqqx3A43ryNtSEl9alHKdKP2BkZcK/c7jNPT5c78rEY3QJYQGctR50YgFKRw==","signatures":[{"sig":"MEYCIQDVBx/wqF9Jmjjn2H+OjMD03s0zMWooTUeIJ5NvaiXOPQIhALnQMPcWQi9+AWREqZ4pUVVYZ8X6GIJehVmOZigrWvjm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":319286},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"050097c53d5b9b120bf5e5c605c19447d072bdb0","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.0.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.0.0_1788558814467_0.582417957863109","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"kopular","version":"1.0.1","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.0.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"772db7a832b72153a95f6652806d9a79297b936c","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.0.1.tgz","fileCount":38,"integrity":"sha512-Am7ysqWy9eb8d+xNEwXx2qw884LEICcRoKdOvIZ3GJ+kzzFJkgXQ72dPt3UFg7jUNM7T7Lq5uAhu6Tu+KVjMbA==","signatures":[{"sig":"MEUCIQCWg2mrl7GLNz5CoGIz6wG+7TZXkkCwxAUoB8AKIrSv4wIgCOcSpWv0yu3Zvkyx5MfZzC5xyvnS3cJd0Tc1vfm86dU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":325552},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"494d99211a1761b284187adddb2ee5e31072da07","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.0.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.0.1_1789048154334_0.07184807700971318","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"kopular","version":"1.1.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.1.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"ac5bd749227e9ba8e350c871d7c089eef941126c","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.1.0.tgz","fileCount":41,"integrity":"sha512-OcdRkepyZjtueQ5wPyEs5X1L1GJ9OVf9AJbUANAp8wM0vJ1zNIt/V5l/ur5+Dx6/KGRP4DFg+lRoV5dGPWVpvQ==","signatures":[{"sig":"MEUCIDkcgSdyFm/+zLjsuotOtFDuBE2H2V1/DqZ4RGa0irAhAiEAo5gIRt6wA/LxcgJ2G/ZJOUjgrZNaiziSh6+0Z0Ec57A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":338982},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"74b053769c1c710fb64e6ef01ec386ebe551a2c7","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.1.0_1789346836723_0.39540203040758337","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"kopular","version":"1.1.1","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.1.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"78f5a7e9ab2f3a9ff0bdde59f5972465d18fd149","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.1.1.tgz","fileCount":41,"integrity":"sha512-H59w1ghzceyiUjpiA1rsTeSFriqO+iGPu/WIwuUxmZrAqGnK778vHU07wXdvn41Fieka4wiVTU32Inh75OO1IA==","signatures":[{"sig":"MEYCIQDdJNNwqI2vJ00HYlKPqTMOk4swRRahf5hxbsdfsuH+kQIhAJ+CA4wA73lBQPheKTWAypceo3RizWidyN53PF4REAOL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":341764},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"ce975ad4e98cebf3c543afc64d8bb0b0efe0c7b4","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.1.1_1789347811872_0.478580662219136","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"kopular","version":"1.1.2","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.1.2","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"9173a0c8ad5aa2c9502afdd609abf2fe187b0ef9","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.1.2.tgz","fileCount":41,"integrity":"sha512-QGel8uQ+ONrsKeQTnojpOKSXUQxUrtDBfmEnKXtI9YEGIOmnhy/ReX4gSgFjXozSFkA9ueeFQV+z3bjuYF2KOQ==","signatures":[{"sig":"MEUCIQCZ6fWBTypM9Q4jN/37QP7lVO4Dr5O0xcWIEIKHYvlsoQIgCOl/y85J5wU5ok3KqGPHuH7iqmv0scpaTpM9iq1Lqbw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":343267},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"9f3e2d7edf8d48364bae7f0dda09a79eb65e8c1c","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.1.2_1789389933391_0.28714578085303155","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"kopular","version":"1.1.3","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.1.3","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"8d8f3130d1ee02c87e3f96704ae18f985940a81a","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.1.3.tgz","fileCount":41,"integrity":"sha512-tU1ypgNuOWTMsvHSEkZBwwH7mHf6SOfI5B+8RV7dHrp7IH5Uu41+PJ/TxFnprDgXGWyBAO+vFODp2oA7ZnFj1A==","signatures":[{"sig":"MEUCIQDTK7+MMjiOmDmpNIpZc6rxEn7XSOktFFoKd3PhepewFQIgbAU7n/7EL8Qpit8t1Js7qSoWjuB4QNJ6nLZVabU7rUo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":343614},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"d2c4cb021d3d1c70321a4c4d60a3c2e181daf6a1","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.1.3_1789390415709_0.6464353936529024","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"kopular","version":"1.1.4","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.1.4","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"292f88a155743a45c524c19c9cb51d0710ea4c2a","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.1.4.tgz","fileCount":41,"integrity":"sha512-YtqfY9HnxbKseaKdAjSxa189dOXDLljat0NUDsjK56Xj1pPH7yL5YiKrUTFWPtmeguju7GdLzUvNY5MguFLLOw==","signatures":[{"sig":"MEQCIAi95eogmCf1ivcQ9OFRXoSO7qkJn9tn2XDvn53om7hLAiAFPirCsQxOg9M/5LDK1k1txUMe4cFSLHhGTMw4hmFgCg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":346642},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"2fa137399fafd1f23dd04012168c060755ab2be9","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.1.4_1789402682923_0.30895294715516264","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"kopular","version":"1.1.5","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.1.5","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"160253bc541378e13998345d3e5f85256a66629b","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.1.5.tgz","fileCount":41,"integrity":"sha512-4BXps/eMsn+3RH/IyxPgo4RbII4RHXYU9r/TYj2VoDXRqbetKP9MixHOCxDNVDvLIVnZM6CdDAH4EdUHPH5g1A==","signatures":[{"sig":"MEQCIAikkHJpHRpKFKc7wH51UD8+YLwd3IwkH3CaT4VS/mHHAiBqBZflkLIHIC6vpXws3gvRwJfgy8QLuD0nug5twKvO7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDIAHpyKGr5cFUDD5B0HXw6FRQyQNG3I3wJjmTyu2GqIAiEAwksQ9e/XOXzaGADR37mrwRYw0OroJWs2eHM8udu5GTg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":347063},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"364f0d460fc05aeff301b0ae10714c67b728696f","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.1.5_1789407711971_0.5180027180321929","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"kopular","version":"1.2.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.2.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"2ce20237e12a900891b058e2c13d299e850fdf83","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.2.0.tgz","fileCount":41,"integrity":"sha512-0mgIQAifG/eny4x30RxlDeR9f8upyavlAXhaBOSEkFtgmC8NNByk4ZlL2rrxlZJ9E51L/sxgK7YveaQ3eDptuA==","signatures":[{"sig":"MEUCIQDOMjRuqRv93mUDhqioIXQOLin7l91zoPr3FWbmxuBYPgIgQqlslHSbSmllFPwe+SaUHy8HSCCMyM7I6gE0bCm43qM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAxar+sqojHUCwWeMcIvYbjzz3M733TOWsgu4Y1FcEwbAiBLxJRifewQ7X11ep+HZXi/1rxSvzhOealQ7vM5eMFBBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":347993},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"2d6fc70a3fb15470ffc89f3b23a7129a558e7ac8","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.2.0_1789413031675_0.27228683863544356","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"kopular","version":"1.2.1","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.2.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"77093ee434e56cf3165e38e2ad96dfd9ed0729cb","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.2.1.tgz","fileCount":41,"integrity":"sha512-MpU/FOIFOMoRlM4PxkauXsyrbBKu2qOPel7SSxNGAWqHehP8i/K1JzHTGDeSu3p46hElqhGX/deuRFmBdgVsyA==","signatures":[{"sig":"MEUCIFxg/6YLBVZyuHnVzteAYQZFcAaWfK5wcaKwY+PWlqgoAiEAoUoxbZdGDEK/GHubPb8rJ9vN99GdKq/7t+sA7c5XX+Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAjhJTKtuVhsnORLot68IZyiaLp4qHxmRnTRuVjh1iwIAiEA10gVWm1VfnyAl6cebMXzf3Y/aPrLq0j5aPrJGqjMNG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":347993},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"c53b087a55be84bd6722edc3b97b5a4bc8a5d8f3","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.2.1_1789413885192_0.1809249970419351","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"kopular","version":"1.2.2","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.2.2","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"f7a87c990376051c6478455ea82d6c144a39b81c","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.2.2.tgz","fileCount":41,"integrity":"sha512-Orwd9cHvidWwLOAHBuEHs4Sj5ulMOJy8nIhoau7L5333DQfSMHdkgnPwvuqEvMpaNBk6KoAWAdRLPl7h3TK0fw==","signatures":[{"sig":"MEUCIQC3GYCeiNqQnicKVkXhTVnvsupnex5X2XZ23DW3frvd7gIgIZ9O48W3zJ+SDOnl8E3AxhCG4UmYTyyTNrMAWYBOufY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFr8FeAC/L+/C1iGbuNuE+DsFCxiEPKpg9MIAQgrqHqxAiEA6f/lRBfVIdOTcI0WxjPfm2XhIM43E9IbI3IMsoJRHoU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348188},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"2cf2904e2a416bea433a6a091bd079da1e317a60","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.2.2_1789472053800_0.5472791443925815","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"kopular","version":"1.2.3","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.2.3","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"036cc22d8b3886c256e2f33b62221348530c3a0a","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.2.3.tgz","fileCount":41,"integrity":"sha512-5Rhz5aNNgMNeIC74IRprgoFHpI7LMSTiaj4ojEq1NQQQykJpNJXwiSYeLRqJWqC1A9NJoCCn7GhnkBTQxDMwiQ==","signatures":[{"sig":"MEQCIDHpwOoIwNrQ9PlRjUP8nv22k/pjkb5rcdHu+XgXfq/+AiBW+Z+GVKd8w4cvjle8koqKfN6G/G1z5zdLyAnlZCutjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCEqViYgxS+QdWHugAIK67jaSaG0gu3Hy7D99FS1lEYaAIgeDwWVUEPv5evwsC9EwSHfghAOTFVI99AIykn80xyPGM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":346096},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"af5916af296e6b61dff4878faf19940245d5f761","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.2.3_1789491209467_0.20087603876801485","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"kopular","version":"1.2.4","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.2.4","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"0f686099c59493ef11e3c0fc6155376e1d2d7d28","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.2.4.tgz","fileCount":41,"integrity":"sha512-nlZpSNEyD0Y1OrUoWzOxsGDvG6+LotUBOnPRjKx1iMCkHqGKJJjJOcd6oA10wpW9d7X17URnBQ6B/GshWGJ/dQ==","signatures":[{"sig":"MEUCIQDG8HtF46cJnI/50r9b5/Tg1yWhOQmol6NQ3DCedXomdQIgIdFeMDYqFnsLMmmI/+pZmOHzrK55xwjHiZ6bP+rTfTk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIADdDdHEiR5/VNyX5BVxIWTot6OY7hRvYm/9r41tUB1JAiAGQSQW9OnqB/il6xF72+WWLGecOYWIFyq5XuLVmhuZDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348188},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"3d00b4954b0a1ac90e3d1970e0d75bde7c395a4f","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.2.4_1789491850722_0.722849940760268","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"kopular","version":"1.2.5","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.2.5","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"40c5e6a94dabd89ecf3efe06b3712491f34ef124","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.2.5.tgz","fileCount":41,"integrity":"sha512-XIhtqd0no5OnllNZIa6J2VNqp7tF6VTBLHMnoBhhDwsB5xM1Xp4qsbXJN3uzi2JLROGR59vfxIc1/NzcFFkoDQ==","signatures":[{"sig":"MEUCIQC0hM9pLraGH14lK1kESjiEzsnEVTGl92oxvKaK9JSy/gIgQwJFcca6XFW2IykBHMgruJRvVYDI5Jc9ypFayxFOw/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDQfURrl7MKAm1QX+UFH50U40mzgupkvNbMkm1Su3dSngIhAMXp8CPtO1EQ0I4IDP3F3xMsXpwyDv2EJkJe9YmshdYs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348188},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"3fb57ab0dc642f13ce0f9cfadee506a0ba1eb065","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.2.5_1789570408680_0.42493425250751815","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"kopular","version":"1.2.6","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.2.6","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"4665e80edaa05e416c32646c9f023d3c5f1b4a2d","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.2.6.tgz","fileCount":41,"integrity":"sha512-kAMMYJ6iWiIvXG4IDZI0XL8p8JPWL5F0bNH3zMcjXjoP+wMPDHZNqkCw6k98s8M/wkXjYOHajkkRu8KUBK9ipA==","signatures":[{"sig":"MEQCIHKWslZc7X6Gv83ecvkOuo8dktXVVABhP3hJXGEJKFYQAiBtd7U89QjFNqUEtINY41bpbfzFjG1GeJsfg+DHAS8VUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC1BoD10g4DEO2kH20/M2llfrrsprrr2oH1/0Yr4aU8IAIgE+560fn53uyVriq0FMNAUGGWHGjcumVnthEXrdNFUNM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348477},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"10e52044776f9baafda16c9d4daf4ad30eab37e5","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.2.6_1790254195850_0.5407472782782874","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"kopular","version":"1.3.0","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.3.0","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"a8e43772b93278c7aebbe435bde3b0406a690008","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.3.0.tgz","fileCount":41,"integrity":"sha512-tos0QUx3n7y4zclroDvNKXa5CBrREF3P/vDfijpPJlk0teMX6w1IXUQoX0BPfv5/DTVDdg978Btmu4xLfMLhLQ==","signatures":[{"sig":"MEYCIQCr3xenO05wQVILT6XUwHVbKvXU9lSIPwSihOWyFDGjjQIhAKfFzFOXxPjXERdQuVe6ASnQWXt52eYnTkw2+7MFZdQS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBXHJSvxT4SvklvYYCbjeaD0YS+RsuBF6/YpPtJxVz/GAiAAjlmPati2wVAjh8v0CtpreyCjltegk/8MwHplbOgI6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":350018},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"32b1e36c92e54e664311e9920909dbac457e9144","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.3.0_1790254528385_0.7875930650394727","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"kopular","version":"1.3.1","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","_id":"kopular@1.3.1","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"homepage":"https://kopular.dev","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"2973afd090c4024b921f04969b9261f749f8d286","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.3.1.tgz","fileCount":41,"integrity":"sha512-7llHdqWYiupGNUvheNU/ftpmdfVBpylvvhqv6f2wrps7wRIYe7HzOeJMRw7Eqslj4cyOgmEbpDS+KEg0fuHvAg==","signatures":[{"sig":"MEYCIQCmSmnbtGcirOF2vllGovKp0VIH0A1ZkIjwNaX9RDBB7QIhAIJGarndU9iI3wNQLJQD/JjiGvluHTdIdavd39+Yed+X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDd3G/VoZIIqSs6Qca2x1lfHbVxiGYr7ETDxKMofDIoxAIgJ8wcoiCVXe5BYZL5PIOh9rcqIdqS0FXdBMgaa9kqHbc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":350395},"main":"./src/component.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"3e6f14ba5b39b5612976a4f598965054e8e557d8","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/kopular_1.3.1_1790254939660_0.9178366773227815","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"_id":"kopular@1.3.2","bin":{"kp":"bin/kp.mjs"},"dist":{"shasum":"f3f0322c79c7f453fe50ff679d5e385d980a461e","tarball":"https://registry.npmjs.org/kopular/-/kopular-1.3.2.tgz","fileCount":41,"integrity":"sha512-6lPC7OJWw6NTssdmAtm64MLEH0wQfnApTRnr3N3k17ofa4L3Vvk8zY+smfalmwG+TMNt1h8j4HrO14/HtPV8fw==","signatures":[{"sig":"MEUCIQDJcROC7Ikq4/ly2zCdA2qmuZtA4K9vQ9zQphdnXNL16gIgfVS5SAsrKVo/BpqsAKjDM1Rtc6a66Lfes1tGOPJHuc0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDItMC0eV30dLt5FRUKl2qVCvjzhQLgXZaIzDQZj5DsrAIhALF1WlTwUbXGqd5su2yHha37EYm6frl0h1ZV3Ru5KzqN"}],"unpackedSize":350601},"main":"./src/component.js","name":"kopular","type":"module","author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"engines":{"node":">=18"},"exports":{".":"./src/component.js","./dom":"./src/dom.js","./http":"./src/http.js","./vdom":"./src/vdom.js","./forms":"./src/forms.js","./router":"./src/router.js","./timers":"./src/timers.js","./testing":"./src/testing.js","./computed":"./src/computed.js","./resource":"./src/resource.js","./velement":"./src/velement.js","./component":"./src/component.js","./directives":"./src/directives.js"},"gitHead":"9894fec0d1ebd26f9061ec6f7807a79c3758d66e","license":"MIT","scripts":{"test":"vitest run","build":"ks build src/router.ks && ks build src/directives.ks && ks build src/http.ks && ks build src/forms.ks && ks build src/computed.ks && ks build src/resource.ks","pretest":"npm run build","test:watch":"vitest","prepublishOnly":"npm run build"},"version":"1.3.2","_npmUser":{"name":"koppinator","email":"koppinjo@gmail.com"},"homepage":"https://kopular.dev","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"kopscript":"./src/kopular.ks","repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"_npmVersion":"10.8.2","description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","directories":{},"maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","vitest":"^4.1.11","kopscript":"^1.2.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/jsdom":"^30.0.0"},"peerDependencies":{"jsdom":"^25.0.0"},"peerDependenciesMeta":{"jsdom":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/kopular_1.3.2_1790255984123_0.7368164162466821"}}},"time":{"created":"2026-08-21T02:00:54.368Z","modified":"2026-09-24T13:19:44.957Z","0.1.0":"2026-08-21T02:00:54.559Z","0.2.0":"2026-08-21T02:47:58.563Z","0.3.0":"2026-08-22T03:16:36.746Z","0.4.0":"2026-08-22T03:43:11.800Z","0.5.0":"2026-08-22T12:42:37.387Z","0.6.1":"2026-08-22T14:56:57.995Z","0.8.0":"2026-08-22T20:06:45.405Z","0.9.0":"2026-08-23T02:16:07.702Z","0.10.0":"2026-08-23T05:12:36.864Z","0.11.0":"2026-08-23T22:29:02.404Z","0.11.1":"2026-08-24T14:44:10.343Z","0.11.2":"2026-08-24T15:05:33.742Z","0.11.3":"2026-08-24T16:50:37.319Z","0.11.4":"2026-08-24T23:21:57.268Z","0.11.5":"2026-08-24T23:50:30.234Z","0.12.0":"2026-08-25T12:13:40.869Z","0.13.0":"2026-08-25T13:01:14.822Z","0.14.1":"2026-08-25T21:12:04.698Z","0.15.0":"2026-08-26T00:23:19.756Z","0.15.1":"2026-08-29T12:47:38.749Z","0.16.0":"2026-08-29T17:56:53.661Z","0.16.1":"2026-08-29T19:29:06.266Z","0.17.0":"2026-08-30T01:35:31.406Z","0.17.1":"2026-08-30T10:12:21.427Z","0.17.2":"2026-08-30T10:44:36.448Z","0.18.0":"2026-08-30T11:55:40.318Z","0.19.0":"2026-08-30T13:38:30.426Z","0.20.0":"2026-08-30T14:48:39.364Z","0.21.0":"2026-08-30T19:05:17.168Z","0.21.1":"2026-08-31T11:56:34.138Z","0.21.2":"2026-08-31T12:15:52.859Z","0.21.3":"2026-09-02T01:18:28.449Z","0.21.4":"2026-09-02T01:42:42.265Z","0.22.0":"2026-09-02T13:46:58.370Z","0.22.1":"2026-09-02T15:11:07.345Z","0.23.0":"2026-09-02T17:49:14.959Z","0.23.1":"2026-09-02T19:59:11.088Z","0.23.2":"2026-09-04T13:46:25.399Z","1.0.0":"2026-09-04T21:53:34.652Z","1.0.1":"2026-09-10T13:49:14.486Z","1.1.0":"2026-09-14T00:47:16.867Z","1.1.1":"2026-09-14T01:03:32.015Z","1.1.2":"2026-09-14T12:45:33.537Z","1.1.3":"2026-09-14T12:53:35.850Z","1.1.4":"2026-09-14T16:18:03.053Z","1.1.5":"2026-09-14T17:41:52.071Z","1.2.0":"2026-09-14T19:10:31.793Z","1.2.1":"2026-09-14T19:24:45.295Z","1.2.2":"2026-09-15T11:34:13.902Z","1.2.3":"2026-09-15T16:53:29.552Z","1.2.4":"2026-09-15T17:04:10.815Z","1.2.5":"2026-09-16T14:53:28.772Z","1.2.6":"2026-09-24T12:49:55.954Z","1.3.0":"2026-09-24T12:55:28.492Z","1.3.1":"2026-09-24T13:02:19.759Z","1.3.2":"2026-09-24T13:19:44.228Z"},"author":{"name":"Joe Koppin","email":"koppinjo@gmail.com"},"license":"MIT","homepage":"https://kopular.dev","keywords":["kopscript","framework","components","ui","ai","llm","codegen","agent"],"repository":{"url":"https://dev.azure.com/koppinator/Koppindependence/_git/Kopular","type":"git"},"description":"Kopular: a small component framework for KopScript — components, reactive state, constructor-injected services, routing, real compiled templates, and HTTP, with no DI container","maintainers":[{"name":"koppinator","email":"koppinjo@gmail.com"}],"readme":"<img src=\"https://cdn.jsdelivr.net/npm/kopular@latest/assets/logo.png\" width=\"96\" height=\"96\" alt=\"Kopular logo\">\n\n# Kopular\n\nKopular is a small component framework for [KopScript](https://dev.azure.com/koppinator/Koppindependence/_git/KopScript),\nbuilt to give Angular's separation of concerns — components own UI, services own logic,\na router owns navigation — without Angular's steepest learning-curve pieces: no RxJS, no\ndependency-injection container, and templates that are real, compiled, type-checked\nKopScript rather than a separate interpreted template language.\n\nGenerating Kopular code with an AI coding assistant? Point it at **[`LLM.md`](./LLM.md)**\n— a dense, complete reference designed to be loaded straight into an LLM's context.\n\n## Highlights\n\n- **`Component`, with real vdom diffing**: a base class with `virtual Render()` (describes\n  the current state as a `VElement` tree — a lightweight description of a DOM element, not\n  a real one) and `Update()` (diffs the new tree against the previous one and patches only\n  what changed, reusing a real DOM node wherever its tag stays the same — not a full\n  subtree rebuild). `Render()` is provided as a real, separate markup file compiled by\n  KopScript's `template from` (see \"Templates\" below), or written by hand building a\n  `VElement` tree against `kopular/velement`, the way you'd write careful vanilla-JS UI\n  code — your choice, and both compile to the exact same thing. An optional `virtual\n  RenderError(message)` renders a fallback instead of a hard crash if `Render()` throws —\n  purely additive; not overriding it keeps today's exact (uncaught) behavior. Every real DOM\n  event handler Kopular attaches (`OnClick`/`OnInput`/`OnBlur`/`OnChange`) batches the\n  `Update()` calls made while it runs into one render per component, applied once the\n  handler returns, fully synchronously — a click handler that mutates more than one field\n  only ever renders once, reading every field's final value, regardless of which statement\n  happens to trigger it. See `LLM.md`'s \"Component\" section for the full rationale and the\n  real bug this closes.\n- **Templates, compiled and type-checked, not interpreted**: markup lives in its own\n  `.html` file — interpolation (`{{ }}`), event/property bindings (`(click)=\"...\"`,\n  `[prop]=\"...\"`), and `*if`/`*for` structural directives — desugared by the KopScript\n  compiler into the exact same code a hand-written `Render()` would produce, with\n  automatic `Subscribe`/`Update()` wiring for the `state<T>` fields the markup reads,\n  directly or through the component's own methods. See \"Templates\" below.\n- **Reactive state, no RxJS**: components hold `state<number>`/`state<string>`/... (a\n  KopScript language feature — see the [KopScript](https://dev.azure.com/koppinator/Koppindependence/_git/KopScript)\n  repo) and subscribe once, in their constructor, to call `Update()` on change. No\n  Observables, no operators, no manual unsubscribe bookkeeping.\n- **Services, no DI container**: \"injecting\" a service is just passing it as a\n  constructor argument. No injector hierarchy, no provider tokens, no decorators — and a\n  service stays fully testable with zero `Component`/DOM involvement, since it's just a\n  class.\n- **`Router`**: real URLs (`/about`, not `#/about`) via the History API\n  (`pushState`/`popstate`), with route registration as plain method calls, not a config\n  DSL. See \"Router, and deploying it\" below — every deployment target needs its own\n  SPA-fallback config, not just local dev.\n- **Structural directives**: `*ngIf`/`*ngFor`/`*ngSwitch`'s job — build a subtree\n  conditionally, repeat one per item, pick one of several cases. In a template, that's\n  `*if`/`*for` (real `if`/`for` under the hood — see \"Templates\"); in a hand-written\n  `Render()`, the same job is a plain function call (`If(...)`) or existing KopScript\n  expression (`array.ForEach(...)`, `match`) — no special syntax needed there either way.\n  See \"Structural directives\" below.\n- **`Http`**: a thin, static wrapper over the real Fetch API (`Http.Get(url)`,\n  `Http.Post(url, jsonBody)`, ...) — no HttpClient injection tokens, no RxJS\n  observables/operators. See \"HTTP\" below.\n- **`FormField<T>`**: a single input's value/error/touched state, built on `state<T>` —\n  no two-way-binding magic, no `FormGroup` config object. See \"Forms\" below.\n\n## What's here\n\n- `src/dom.ks` — ambient DOM bindings (`document`, `Element`, `Event`, `window`,\n  `location`) that `component.ks`/`router.ks`/`directives.ks` are built on.\n- `src/velement.ks` — `VElement`, the lightweight description of a DOM element `Render()`\n  returns.\n- `src/vdom.ks` — the diff/patch engine (`Materialize`/`Patch`/`PatchChildren`) behind real\n  vdom diffing — see \"Component\" above.\n- `src/component.ks` — the `Component` base class.\n- `src/router.ks` — the `Router`.\n- `src/directives.ks` — `If()`, the structural-directive equivalents' one genuinely new\n  piece (see below).\n- `src/http.ks` — `Http`, a thin wrapper over `fetch` (see below). `src/http_runtime.js`\n  is its one companion file — the single hand-written (not compiled from `.ks`) file in\n  Kopular, and why is explained in its own header comment.\n- `src/forms.ks` — `FormField<T>` and `Validators` (see \"Forms\" below).\n- `src/testing.js` — `runKopularApp`/`runKopularFixture` (see \"Testing your own app\"\n  below); hand-written for the same reason as `http_runtime.js` — filesystem/process\n  orchestration isn't a Kopular `Component`.\n- `bin/kp.mjs` — the `kp new` scaffolding CLI (see \"Starting a new project\" below); also\n  hand-written, same reason.\n\nThat's the whole framework — ten files, plus the scaffolding CLI. Everything else (a\nreal app built on top of it)\nlives in a separate consumer repo, [KopularDemo](https://dev.azure.com/koppinator/Koppindependence/_git/KopularDemo).\n\n## Templates\n\nA component's `Render()` can be a real markup file instead of hand-written imperative DOM\ncode — `template from \"./x.html\";` in the class body, a KopScript language feature (see\n[KopScript](https://dev.azure.com/koppinator/Koppindependence/_git/KopScript)'s own README/LLM.md for\nthe full syntax reference). Kopular itself needed **zero framework code changes** for\nthis — the compiler desugars a template straight into calls against the same\n`VElement.Create`/`.AppendChild`/`.TextContent`/named event fields `velement.ks` already\ndeclares, so a template-generated `Render()` is indistinguishable from one you'd write by\nhand:\n\n```ks\n// counter.ks\nclass Counter : Component {\n  public state<number> Count;\n  constructor() : base() { this.Count = state(0); }\n  public void Increment() { this.Count.Value = this.Count.Value + 1; }\n  template from \"./counter.html\";\n}\n```\n\n```html\n<!-- counter.html -->\n<button (click)=\"Increment()\">Count: {{ Count.Value }}</button>\n```\n\nNote there's no `this.Count.Subscribe(...)` anywhere — a `state<T>` field referenced\ndirectly in the template (`Count.Value` above) gets it wired automatically. The exact\nsame component, hand-written, needs that `Subscribe` call itself:\n\n```ks\nclass Counter : Component {\n  private state<number> Count;\n\n  constructor() : base() {\n    this.Count = state(0);\n    this.Count.Subscribe((number v) => this.Update());\n  }\n\n  public override VElement Render() {\n    VElement button = VElement.Create(\"button\");\n    button.TextContent = \"Count: \" + this.Count.Value;\n    button.OnClick = (Event e) => {\n      this.Count.Value = this.Count.Value + 1;\n    };\n    return button;\n  }\n}\n```\n\nBoth produce the same `Render()`, and can be mixed freely across a codebase — nothing\nabout `Component`, `Update()`, or any other Kopular API differs between them. The manual\n`Subscribe` call is still exactly what you need the moment state lives on *another*\nobject — an injected service's own state (`this.Service.Count`, say) — which is why the real, production `Counter` on the\n[KopularDemo](https://dev.azure.com/koppinator/Koppindependence/_git/KopularDemo) site\n(it injects a `CounterService` rather than holding `Count` itself) uses a template but\nstill has one manual `Subscribe`. `*if`/`*for` in a template are covered under\n\"Structural directives\" below, alongside their hand-written-`Render()` equivalents.\n\n## Scoped component styles\n\nA class-body `styles from \"./x.css\";` — also a KopScript language feature (see\n[KopScript](https://dev.azure.com/koppinator/Koppindependence/_git/KopScript)'s own\nREADME/LLM.md for the full syntax/CSS-parsing reference) — scopes a real stylesheet so it\nonly matches elements *that class itself* renders, never a sibling's or a child's:\n\n```ks\nclass Widget : Component {\n  constructor() : base() { }\n  template from \"./widget.html\";\n  styles from \"./widget.css\";\n}\n```\n\n```css\n/* widget.css */\n.title { color: royalblue; }\n```\n\nUnlike `template from`, this **did** need real framework code — `ScopedStyles.Inject`\n(`vdom.ks`) is the runtime half, and `using \"kopular\";` brings it in along with everything\nelse — do **not** write your own `extern class ScopedStyles ... from \"kopular/vdom\";`, which\nis now a real `KS4002 Declaration 'ScopedStyles' conflicts with a name brought in by\n'using'`. (Before package `using` existed, every Kopular export did need a hand-written\n`extern` in your project; that is what `using \"kopular\";` replaced.) It's idempotent,\ninjecting one real `<style>` per component *type* into `document.head` the first time any\ninstance of that type is constructed\n(dedup is per-type, not per-instance — every instance's constructor calls `Inject` with\nthe same compile-time `id`/rewritten-`css`, so only the first actually creates a tag).\nNever removed once injected — a scoped stylesheet is global infrastructure for as long as\nthe page lives, not per-instance content `Teardown()` would ever clean up. `document.head`\n(`dom.ks`) is new too, added specifically for this.\n\nIndependent of `template from` — works with a hand-written `Render()` as well, which gets\na `protected string ScopeId;` field to apply manually (`template from` elements get their\n`data-kop-scope` attribute automatically, so this is only needed by hand-written code):\n\n```ks\npublic override VElement Render() {\n  VElement el = VElement.Create(\"div\");\n  el.ClassName = \"title\";\n  el.SetAttr(\"data-kop-scope\", this.ScopeId);\n  return el;\n}\n```\n\n## Dependency injection: the composition root pattern\n\nKopular has no injector because KopScript has nothing for one to hook into — no\ndecorators, no reflection, and no *generic functions* (KopScript's generics are\nclasses/interfaces only — see the KopScript repo) for a type-safe `Resolve<T>()`. Instead, the\nwhole app's service/page graph gets built exactly once, by hand, in one place: a plain\nclass with no `Component` base and no framework code in it at all, sometimes called an\n**app container** or (in the wider DI literature) a **composition root**. Everything\nelse just takes what it needs as constructor arguments and never constructs its own\ndependencies.\n\n```ks\n// app_container.ks — the one place that decides what's shared and builds\n// the graph, in dependency order.\nclass AppContainer {\n  public Router Nav;\n\n  constructor() {\n    // Built once, passed to every page that needs it below — that's the\n    // whole mechanism for a shared singleton. A page that constructed its\n    // own `new CounterService()` instead would get an independent one; the\n    // difference is which variable gets passed in, not a config flag.\n    CounterService counter = new CounterService();\n\n    this.Nav = new Router(new NotFoundPage());\n    this.Nav.AddRoute(\"/\", new HomePage(this.Nav, counter));\n    this.Nav.AddRoute(\"/about\", new AboutPage(this.Nav));\n  }\n}\n\n// routed_app.ks — the root Component. Takes the already-built graph; never\n// builds one of its own.\nclass RoutedApp : Component {\n  private Router Nav;\n\n  constructor(AppContainer services) : base() {\n    this.Nav = services.Nav;\n  }\n\n  public override VElement Render() {\n    return VElement.Create(\"div\");\n  }\n\n  // VElement.Mount(this.Nav) in Render() (see \"Nested component composition\"\n  // below) would work here too, but a single, always-present root slot has\n  // no reordering or removal to get right, so the older, simpler\n  // AfterRender is just as correct — it's called with the real DOM node\n  // Render()'s tree just became, once Mount()/Update() has actually\n  // materialized/patched it, here that's the container itself.\n  protected override void AfterRender(Element root) {\n    this.Nav.Mount(root);\n  }\n}\n\nRoutedApp app = new RoutedApp(new AppContainer());\napp.Mount(document.body);\n```\n\nThis is sometimes called \"Pure DI\" — the same benefits a container gives you (nothing\nhardcodes its own dependencies, everything is swappable in a test) with none of a\ncontainer's cost:\n\n- **Compile-time checked.** A missing or mistyped dependency is `expected N arguments,\n  got M` from the KopScript compiler, not a `NullInjectorError` your users hit at\n  runtime after a container fails to resolve something.\n- **Fully legible.** The entire dependency graph is ordinary, readable code in one file\n  — grep for `new` in the composition root and you've read the whole wiring diagram.\n  Nothing is constructed by a framework inspecting metadata behind the scenes.\n- **No new concepts.** If you already know how to call a constructor, you already know\n  Kopular's DI story — there's no separate injector API, provider syntax, or\n  injection-token vocabulary to learn.\n\nSee [KopularDemo](https://dev.azure.com/koppinator/Koppindependence/_git/KopularDemo)'s\n`src/app_container.ks` and `src/routed_app.ks` for the real, working version this\nexample is drawn from.\n\n## Router, and deploying it\n\n```ks\nRouter nav = new Router(new NotFoundPage());   // fallback page required up front — no null route\nnav.AddRoute(\"/\", new HomePage(nav));           // pages built once, kept alive for Router's lifetime\nnav.AddRoute(\"/about\", new AboutPage(nav));\nnav.Mount(document.body);\nnav.Navigate(\"/about\");                          // pushState + immediate re-render\n```\n\nReal URLs via the History API (`pushState`/`popstate`), not `#/about` hash routing.\n`AddRoute` takes an already-constructed `Component`, not a factory, so a page's own\n`state<T>` survives navigating away and back — see \"Dependency injection\" above for how\nthe whole page graph typically gets built once, in a composition root.\n\nA trailing slash matches the same route as without one (`/about/` == `/about`, `/` is left\nalone) — real-world links and directory-style static hosting (a build-time prerendered\nroute's own `/about/index.html`, most concretely — see KopularDemo's own\n`scripts/prerender.mjs`) routinely produce trailing-slash URLs, and every mainstream\nrouter normalizes this the same way.\n\n**Dynamic route segments**: a path segment written `:name` (e.g. `/dogs/:id`) matches any\nsingle non-empty segment. With just one per route, its value is captured into\n`Router.Param`:\n\n```ks\nnav.AddRoute(\"/dogs/:id\", new DogPage(nav));\n// inside DogPage.Render():\nel.TextContent = \"Dog #\" + this.Nav.Param;\n```\n\n`Param` is a plain `string`, deliberately not `state<T>` — `Router`'s own `Render()` already\nre-embeds the matched page into its outlet (via `VElement.Mount`) on every\n`Navigate()`/`popstate`, which re-runs that page's `Render()` (reading the fresh `Param`)\nwith no extra step. No `Subscribe()` needed on it.\n\n**More than one dynamic segment**, and a trailing **wildcard** segment, both work too —\nread each by name via `Router.Params(name)` instead (`Param` above still holds the\n*first* captured value either way, so existing single-segment code needs no change):\n\n```ks\nnav.AddRoute(\"/dogs/:id/toys/:toyId\", new ToyPage(nav));\n// inside ToyPage.Render():\nel.TextContent = \"Dog \" + this.Nav.Params(\"id\") + \" / Toy \" + this.Nav.Params(\"toyId\");\n\nnav.AddRoute(\"/files/*\", new FilesPage(nav));\n// \"/files/2026/reports/q1.pdf\" -> Params(\"*\") == \"2026/reports/q1.pdf\"\n```\n\n**Query strings** are always available via `Router.Query(key)`, independent of which\nroute matched (never part of route *matching* itself):\n\n```ks\n// \"/search?sort=name&order=asc\"\nthis.Nav.Query(\"sort\")   // \"name\"\nthis.Nav.Query(\"missing\") // \"\" — not present\n```\n\nQuery values are **not percent-decoded** — a deliberate v1 cut (no `decodeURIComponent`\nbinding exists yet); a value containing `%20` or `+` for a space arrives exactly as\nwritten in the URL.\n\n**Navigation guards**: protect a route (or any set of routes) behind a check —\n`SetGuard` takes a redirect path plus a single `(string) => bool` checked before every\nnavigation, including a direct load/refresh:\n\n```ks\nnav.SetGuard(\"/login\", (string path) => {\n  if (path == \"/admin\") { return authService.IsLoggedIn.Value; }\n  return true;\n});\n```\n\nOne guard for the whole `Router`, not per-route — the guard function itself decides which\npaths it cares about, the same \"a function, not a config object\" style `Http`/DI already\nuse. Defaults to always-allow when `SetGuard` is never called. Redirecting updates the URL\ntoo (via `pushState`), so refreshing a blocked path lands on the redirect again rather than\nback on the page the guard just rejected — pick a `redirectPath` the guard itself always\nallows, or it loops.\n\n**Lazy routes (real code-splitting)**: `AddRoute` takes an already-built page — its whole\nJS chunk loads eagerly, with everything else, at startup. `AddLazyRoute` takes a *loader*\ninstead, so that chunk is only ever fetched the first time its route actually matches:\n\n```ks\nnav.AddLazyRoute(\"/dogs\", LoadDogsPage);\n```\n\n`LoadDogsPage` is a `() => task<Component>` — a real dynamic `import()`, since KopScript's\nown syntax has no expression for one. Write a tiny hand-written loader (not compiled from\n`.ks`) and reach it via a relative `extern` (see KopScript's own `README.md`/`LLM.md`\n\"extern\" section for the full mechanics — this needed a real compiler fix,\n`kopscript@0.23.0`, to work reliably):\n\n```js\n// dogs_page_loader.js — hand-written\nexport async function LoadDogsPage() {\n  const { DogsPage } = await import(\"./dogs_page.js\");\n  return new DogsPage();\n}\n```\n```ks\nextern task<Component> LoadDogsPage() from \"./dogs_page_loader\";\n```\n\nThe outlet shows a plain loading placeholder (`<div class=\"router-loading\">Loading...</div>`\nby default; override `protected virtual VElement BuildLoadingPlaceholder()` on a class\nextending `Router` to customize it) while the fetch is in flight, then the real page once\nit resolves — and, like an eager page, it's only ever fetched once: navigating away and\nback reuses the same already-loaded instance, keeping whatever state it built up. A lazy\nand an eager route mix freely in the same `Router`; nothing about `AddRoute`'s own existing\nsignature changes.\n\n**Building and testing a lazy route**: `dogs_page.ks` is deliberately *not* `using`'d from\nyour app's own entry — that's what keeps it out of the eager bundle — which also means your\nnormal `ks build src/app.ks` never compiles it, since `ks build` only walks the `using`\ngraph reachable from the entry you give it. Build it as its own separate entry too:\n`ks build src/app.ks && ks build src/dogs_page.ks` (already-compiled shared dependencies\njust get written again with identical output, so this is safe to add). For tests,\n`kopular/testing`'s `runKopularApp` (0.24.0+) compiles any other real `.ks` file present in\nyour `srcDir` that the entry doesn't reach — a lazy-route target is exactly that — so\n`AddLazyRoute` needs no special test setup at all.\n\n**`AllPaths()`** returns every registered path (both `AddRoute` and `AddLazyRoute`), in\nregistration order — for a caller that needs to enumerate real routes (a build-time static\nprerender step, most likely) without hand-maintaining a second, driftable list next to the\ncomposition root's own `AddRoute` calls.\n\n**Deploying a Router-based app needs SPA/history-fallback configured on whatever you\ndeploy to — this is true of every client-side router in every framework, not a Kopular\ngap.** A direct load or a refresh at `/about` is a plain HTTP request that reaches your\nhost before any JS has run, so nothing client-side (Router included) can intercept it;\nthe host has to serve the app shell itself for any route it has no literal file for.\nKopularDemo hit exactly this in production (worked when navigated to via a link, 404'd on\nrefresh) before its Cloudflare Workers config had this set:\n\n```jsonc\n// wrangler.jsonc\n\"assets\": {\n  \"directory\": \"./public\",\n  \"not_found_handling\": \"single-page-application\"\n}\n```\n\nEvery static host has an equivalent option (Netlify, Vercel, nginx, ...) — search that\nhost's docs for \"SPA fallback\" or \"single-page application routing\", the terminology is\nstandard. For local dev, see KopularDemo's `scripts/serve.mjs`.\n\n## Structural directives\n\nAngular's `*ngIf`/`*ngFor`/`*ngSwitch` are template syntax that expands, at compile time,\ninto imperative view-container calls. In a Kopular **template**, `*if`/`*for` are exactly\nthat — real KopScript `if`/`for` statements underneath (see \"Templates\" above), compiled\nby KopScript itself, not interpreted by Kopular at runtime. In a **hand-written**\n`Render()`, there's no separate directive syntax to reach for: each job maps onto a plain\nexpression, and two of the three need nothing new at all.\n\n| Angular          | Kopular template | Kopular hand-written `Render()`             | New code? |\n| ----------------- | ---------------- | -------------------------------------------- | :-------: |\n| `*ngFor`          | `*for=\"Type v of expr\"` | `array.ForEach((item) => ...)`         | none — already a KopScript array method |\n| `*ngSwitch`       | *(not supported — use `*if`, or switch in the backing class)* | `match value { ... }` | none — already a KopScript expression, and exhaustiveness-checked (`*ngSwitch` isn't) |\n| `*ngIf` / `*ngIf-else` | `*if=\"expr\"` | `If(condition, () => ..., () => ...)`  | `directives.ks` (hand-written form only — a template's `*if` needs no helper, it's a real `if`) |\n\nThe rest of this section is about the **hand-written `Render()`** column above — a\ntemplate's `*if`/`*for` need no further explanation, they're covered under \"Templates\".\n`*ngIf` is the one case in hand-written `Render()` that needs something new: `if` is a\n*statement* in KopScript, so without a helper you'd need a throwaway mutable local just\nto get a conditional value out of it. `If()` is that helper — nothing more than:\n\n```ks\nVElement If(bool condition, () => VElement whenTrue, () => VElement whenFalse) {\n  if (condition) {\n    return whenTrue();\n  }\n  return whenFalse();\n}\n```\n\nBoth branches are required (same reasoning `Router` uses for requiring a `NotFoundPage`\nup front — see `router.ks`): v1 has no nullable types, so \"render nothing\" has no value\nto hand back. Only the branch actually taken runs — the other lambda is never called, so\nan explicit empty branch (`() => VElement.Create(\"span\")`) costs nothing when there's\ngenuinely nothing to show.\n\nAll three read the same way, right inside a hand-written `Render()` — no directive\nregistration, nothing to import beyond the function itself:\n\n```ks\npublic override VElement Render() {\n  VElement root = VElement.Create(\"div\");\n\n  // *ngIf\n  root.AppendChild(If(this.User.IsLoggedIn, () => this.BuildProfile(), () => this.BuildLoginButton()));\n\n  // *ngFor\n  VElement list = VElement.Create(\"ul\");\n  this.Items.ForEach((Item item) => { list.AppendChild(this.BuildItemRow(item)); });\n  root.AppendChild(list);\n\n  // *ngSwitch\n  root.AppendChild(match this.Status {\n    \"loading\" => this.BuildSpinner(),\n    \"error\" => this.BuildError(),\n    _ => this.BuildContent()\n  });\n\n  return root;\n}\n```\n\nGive each `Item`'s `VElement` a stable `.Id` (e.g. the item's own id) to make `*ngFor\ntrackBy`-style row reuse automatic — `Update()`'s diff engine matches children by `Id`\nacross a re-render, reusing a matched child's real DOM node (and anything stateful\nattached to it, like focus) rather than rebuilding it, the same way `*ngFor`'s own\n`trackBy` avoids rebuilding unchanged rows. Without a stable `Id`, a list still renders\ncorrectly on reorder, but a given item's real node isn't guaranteed to follow its data.\n\n## Nested component composition\n\nEverything above builds *content* into a `VElement` tree — a real, independent child\n`Component` (its own fields, its own `Render()`, its own reactive `state<T>`) is a\ndifferent thing to embed than a plain element. `VElement.Mount(component)` wraps one as a\nslot the diff engine treats like any other content: created on first render, patched in\nplace (not torn down and rebuilt) across a re-render as long as the *same* instance still\noccupies that slot, reordered by `.Id` exactly like any other keyed child, and torn down\n— calling `OnUnmount()` — the moment it's replaced or removed:\n\n```ks\nclass TodoItem : Component {\n  public string Id;\n  private string Text;\n  constructor(string id, string text) : base() {\n    this.Id = id;\n    this.Text = text;\n  }\n\n  public override VElement Render() {\n    VElement li = VElement.Create(\"li\");\n    li.TextContent = this.Text;\n    return li;\n  }\n}\n\nclass TodoList : Component {\n  private TodoItem[] Items;\n  constructor() : base() { this.Items = []; }\n\n  public override VElement Render() {\n    VElement ul = VElement.Create(\"ul\");\n    this.Items.ForEach((TodoItem item) => {\n      VElement slot = VElement.Mount(item);\n      slot.Id = item.Id; // stable key — the same convention as any other list, above\n      ul.AppendChild(slot);\n    });\n    return ul;\n  }\n\n  public void Add(string id, string text) {\n    this.Items = this.Items.Push(new TodoItem(id, text));\n    this.Update();\n  }\n\n  public void Remove(string id) {\n    this.Items = this.Items.Filter((TodoItem i) => i.Id != id);\n    this.Update(); // the removed TodoItem's OnUnmount() fires here\n  }\n}\n```\n\nEach `TodoItem` is a genuinely independent `Component` — it can hold its own local\n`state<T>`, subscribe to a shared service, or mount further children of its own (`Update()`\ncalled from inside one re-renders just that item's own subtree, without disturbing its\nsiblings, exactly like the plain-`VElement` keyed-list case above). Override `OnUnmount()`\nto release anything a removed instance was holding onto — most commonly, calling the\nunsubscribe handle `state<T>.Subscribe` now returns (see `kopscript`'s own `LLM.md`) for a\nsubscription made in the constructor:\n\n```ks\nclass TodoItem : Component {\n  private () => void UnsubscribeShared;\n  constructor(SharedService shared) : base() {\n    this.UnsubscribeShared = shared.Count.Subscribe((number v) => this.Update());\n  }\n  protected override void OnUnmount() {\n    this.UnsubscribeShared();\n  }\n}\n```\n\nA component built once at app startup and never removed (every page `Router` manages\ntoday, most real apps' top-level structure) never needs `OnUnmount()` at all — it's there\nfor the case a real dynamic list like `TodoList` above actually needs: a subscription that\nmust stop, not just outlive an app that was going to unload anyway. Removing a component\nthat itself mounted further children tears the *whole* subtree down, however many levels\ndeep — a middle component overriding its own `OnUnmount()` doesn't skip its children's.\n\n`Router`'s own outlet uses this mechanism too — its `Render()` embeds the matched page via\n`VElement.Mount`, not the older `AfterRender`-based pattern still shown in \"Router, and\ndeploying it\" below for mounting the `Router` itself into an app's root container (a\nsingle, always-present slot, where there's nothing this mechanism would add). Reach for\n`VElement.Mount` for anything with real add/remove/reorder: a list of components, a modal\nthat comes and goes, anything genuinely dynamic. A template gets the same capability via\n`*mount=\"expr\"` — see \"Templates\" in `kopscript`'s own README/LLM.md for the syntax; it\ndesugars to exactly this call.\n\n## Content projection — a parent giving a child what to render\n\nReact's `children` prop and Angular's `<ng-content>` both let a parent hand a child\narbitrary markup to render at a spot the child itself decides. Kopular needs no separate\nmechanism for this at all: pass a `() => VElement` into the child's constructor, the same\nas any other constructor argument, and have the child call it from inside its own\n`Render()`:\n\n```ks\nclass Card : Component {\n  private () => VElement ContentBuilder;\n  constructor(() => VElement contentBuilder) : base() {\n    this.ContentBuilder = contentBuilder;\n  }\n  public override VElement Render() {\n    VElement div = VElement.Create(\"div\");\n    div.ClassName = \"card\";\n    div.AppendChild(this.ContentBuilder());\n    return div;\n  }\n}\n\n// Usage, from inside the parent's own Render() — the parent decides what's inside the\n// card, Card decides the chrome around it. `this` only means anything in a method, so\n// that is where the callback is built:\nclass Page : Component {\n  constructor() : base() { }\n  public override VElement Render() {\n    Card card = new Card(() => this.BuildCardBody());\n    return VElement.Mount(card);\n  }\n  private VElement BuildCardBody() { return VElement.Create(\"p\"); }\n}\n```\n\nBecause the callback is invoked fresh on every one of `Card`'s own renders (not a value\ncaptured once and frozen), and it's a closure over the *parent's* own `this`, the projected\ncontent reflects the parent's current state every time — bump a field the parent's own\n`BuildCardBody()` reads, call the parent's `Update()`, and `Card`'s own next patch shows the\nnew value, patched in place like any other content. No new API: this is just\n`VElement.Mount` plus an ordinary function-typed constructor argument, the same \"no hidden\nmagic, explicit constructor args\" pattern dependency injection above already uses.\n\nMore than one projection point works the same way — one named callback per slot, the same\nfixed-named-slot convention `VElement`'s own `OnClick`/`OnInput`/`OnBlur`/`OnChange` already\nuse rather than a generic, unordered bag:\n\n```ks\nclass Panel : Component {\n  private () => VElement HeaderBuilder;\n  private () => VElement BodyBuilder;\n  constructor(() => VElement headerBuilder, () => VElement bodyBuilder) : base() {\n    this.HeaderBuilder = headerBuilder;\n    this.BodyBuilder = bodyBuilder;\n  }\n  public override VElement Render() {\n    VElement div = VElement.Create(\"div\");\n    VElement header = VElement.Create(\"header\");\n    header.AppendChild(this.HeaderBuilder());\n    div.AppendChild(header);\n    VElement body = VElement.Create(\"section\");\n    body.AppendChild(this.BodyBuilder());\n    div.AppendChild(body);\n    return div;\n  }\n}\n```\n\n## Raw HTML, and its real security boundary\n\n`VElement.RawHtml` sets a real, opaque `innerHTML` — an undiffed leaf, in place of\n`TextContent`/children, for a raw-markup-plus-one-delegated-listener pattern (this site's\nown `header.ks`/`nav.ks` use it exactly this way):\n\n```ks\nVElement header = VElement.Create(\"header\");\nheader.RawHtml = SiteHeaderHtml; // a raw string ... from \"./header.html\"; constant\nheader.OnClick = (Event e) => { };  // one delegated listener over the whole subtree\n```\n\n**It's unescaped, real `innerHTML` — never assign it anything reachable from user input.**\nEvery real use in this ecosystem is a `raw string ... from \"<path>.html\";` compile-time\nconstant (see KopScript's own docs) — genuinely static markup, baked in at build time,\nnever a runtime value. Nothing in the type system stops `el.RawHtml =\nsomeFetchedString;` or `el.RawHtml = formField.Value.Value;` from compiling — both are a\nreal XSS hole if that content is ever attacker-influenced. Use `TextContent` (always\nescaped) for any dynamic string; `RawHtml` is for static markup only.\n\n## HTTP\n\n```ks\nusing \"kopular\";\n\nResponse r = await Http.Get(\"/api/dogs\");\nif (r.ok) {\n  string body = await r.text();\n  print(body);\n}\n\nawait Http.Post(\"/api/dogs\", \"{\\\"name\\\":\\\"Rex\\\"}\");\nawait Http.Put(\"/api/dogs/1\", \"{\\\"name\\\":\\\"Rexy\\\"}\");\nawait Http.Patch(\"/api/dogs/1\", \"{\\\"name\\\":\\\"Max\\\"}\");\nawait Http.Delete(\"/api/dogs/1\");\n```\n\n`Http` is a thin, static wrapper over the real Fetch API — `Get`/`Post`/`Put`/`Patch`/\n`Delete`, each returning `task<Response>` (`.ok`, `.status`, `async text()`). No\n`HttpClient` to inject, no RxJS `Observable`/operators, no interceptors — call it from\nanywhere, including straight out of a service's own methods.\n\n**No typed JSON deserialization** — `Response.text()` gets you the raw body, nothing\nmore. This isn't a corner cut for v1; it's a direct consequence of two things KopScript\ndoesn't have: generic *functions/methods* (KopScript's generics are classes/interfaces\nonly, so there's no safe way to write a general `task<T> Get<T>(string url)`) and\nobject-literal syntax (`{ ... }` as a value — see below). If you want a\ntyped response, describe its shape as its own `extern class` and parse it yourself with\na per-shape `extern ... as \"JSON.parse\"` declaration — the same trust-based approach\n`extern` already uses for everything else, not a new mechanism:\n\n```ks\nextern class DogDto {\n  string name { get; }\n};\nextern DogDto ParseDog(string json) as \"JSON.parse\";\n\nstring body = await (await Http.Get(\"/api/dogs/1\")).text();\nDogDto dog = ParseDog(body);   // unchecked, like a TypeScript `as DogDto` cast\n```\n\n**Why `Post`/`Put`/`Patch`/`Delete` aren't just `extern` bindings straight to `fetch`,\nthe way `Get` is**: setting a request method/body/headers means passing `fetch` a second\nargument that's a plain JS object literal (`{ method, headers, body }`) — and KopScript\nhas no object-literal syntax at all, so it can't construct one. `src/http_runtime.js` is\none small hand-written function that does, and `Get`/`Delete`-with-no-body skip it\nentirely (`fetch(url)` alone needs no options object, so `Get` binds straight to the\nreal global). It's the one file in this package not compiled from `.ks` — everywhere\nelse avoids the problem by only wrapping JS APIs that take plain positional arguments\n(see `dom.ks`'s `addEventListener(string, handler)`, never an options-object-taking API).\n\n## Forms\n\n```ks\nusing \"kopular\";\n\nFormField<string> email = new FormField<string>(\"\", (string v) => {\n  string? required = Validators.Required(v);\n  if (required != null) { return required; }\n  return Validators.Email(v);\n});\n\nemail.Value.Value = \"not-an-email\";\nprint(email.Error.Value);   // \"Must be a valid email\"\nprint(email.Valid());       // false\n\n// inside a hand-written Render(), building emailInput as a VElement:\nVElement emailInput = VElement.Create(\"input\");\nemailInput.OnInput = (Event e) => {\n  email.Value.Value = e.target.value;   // revalidates automatically\n};\nemailInput.OnBlur = (Event e) => { email.Touch(); };\n```\n\n`FormField<T>` holds one input's value, error, and touched state as three ordinary\n`state<T>` boxes — `.Value` (the input's current value, revalidating on every\nassignment), `.Error` (`string?`, the current validator's message or `null`), and\n`.Touched` (`bool`, set by calling `.Touch()` — typically on blur, so a fresh field with\nan invalid initial value like an empty required field doesn't show an error before the\nuser has typed anything). Subscribe to any of the three from your `Component`'s\nconstructor exactly like `Counter`'s own `state<number>`, to re-render when they change.\n\nA validator is a plain `(T) => string?` — `null` means valid, the same convention\nKopScript's own nullable types use elsewhere. **There's no array-of-validators\nconstructor parameter** — KopScript has no syntax for an array of function values — so\ncombining more than one check (as `email` does above) is an `if`-chain in one lambda, or,\nfor the common case of just chaining a couple of already-built validators with no custom\nlogic of their own, the `CombineValidators2`/`CombineValidators3` free functions:\n\n```ks\nFormField<string> email = new FormField<string>(\"\",\n  CombineValidators2((string v) => Validators.Required(v), (string v) => Validators.Email(v)));\n```\n\nFree functions, not `Validators` methods, and fixed-arity (2 and 3) rather than a general\n`Validators.All(...)` — a class's own static method can't introduce a new type parameter\nbeyond the class's own (see \"Generics\" in `KopScript`'s own docs), so a *generic* combinator has\nto live as a free function instead. `Validators` ships the handful of checks almost every\nform needs (`Required`, `MinLength`, `MaxLength`, `Email`, `Min`, `Max`), each returning\nits own message; write your own validator function for anything more specific.\n\n**No two-way data binding in a hand-written `Render()`** — wiring `Value` to a real\n`<input>` is the `OnInput` assignment shown above, the same manual pattern `Counter`\nalready uses for its click handler (`VElement.Value` itself is one-way, host-to-DOM\nonly — reading the *current* DOM value back out is always the real event's\n`e.target.value`, not something Kopular mirrors into `Value` for you). This is\ndeliberate, not a missing feature: hand-written code already has direct field/handler\naccess, so there's nothing for a magic binding to save you from writing. A **template**\ngets real sugar for exactly this — `[(value)]=\"Field\"` desugars to `[value]=\"Field\"` +\n`(input)=\"Field = e.target.value\"` (see KopScript's own \"Templates\" docs) — since a\nmarkup file has no equivalent direct access to fall back on.\n\n## Computed values\n\nReact's `useMemo`/Angular signals' `computed()` equivalent — a read-only value derived\nfrom one or more `state<T>` sources, recomputed and re-notified whenever a source changes:\n\n```ks\nusing \"kopular\";\n\nstate<number> price = state(10);\nstate<number> qty = state(2);\nComputed2<number, number, number> total = new Computed2<number, number, number>(\n  price, qty, (number p, number q) => p * q);\n\nprint(total.Value.Value);              // 20\ntotal.Value.Subscribe((number v) => print(\"total: \" + v));\nprice.Value = 15;                      // prints \"total: 30\"\n```\n\n`Value` is `state<R>`, not a bare `R` — KopScript's property grammar has no custom-getter\nsyntax (only auto-implemented `{ get; }`/`{ get; set; }`), so a computed value can't expose\na property that recomputes itself on read. `state<R>` already **is** the right shape for\n\"read the current value, or subscribe to it changing\" — `total.Value.Value`/\n`total.Value.Subscribe(...)` are the exact same two members any other `state<T>` has, not a\nparallel API to learn.\n\nDependencies are explicit, not automatically tracked the way Angular signals infer their\nown by watching which signals get read during evaluation — that needs a live \"currently\nevaluating\" context threaded through every read, a different kind of feature from anything\nelse here. Naming each source directly is one honest step short of automatic, consistent\nwith explicit constructor arguments everywhere else in Kopular (dependency injection,\nrouting). `Computed1<A, R>` covers one source; `Computed2<A, B, R>` covers two — fixed\narity for the same reason `CombineValidators2`/`CombineValidators3` (above) are: KopScript\nhas no array-of-function-values type, and no way to express \"N sources of N different\ntypes\" without one type parameter per source. Add a `Computed3<A, B, C, R>` the same way if\na real derivation ever needs three.\n\n## Async data — `Resource<T>`\n\nThe loading/success/failure shape almost every real app needs around a `task<T>` — most\ncommonly wrapping an `Http` call — as reactive `state<T>` a `Component` can render and\n`Subscribe` to, instead of hand-rolling the same three fields and try/catch every time:\n\n```ks\nusing \"kopular\";\n\nclass DogsPage : Component {\n  private Resource<Response> dogs;\n  constructor() : base() {\n    this.dogs = new Resource<Response>(Http.Get(\"https://dog.ceo/api/breeds/list/all\"));\n    this.dogs.Status.Subscribe((AsyncStatus s) => this.Update());\n  }\n}\n```\n\n```ks\npublic override VElement Render() {\n  return match this.dogs.Status.Value {\n    AsyncStatus.Loading => this.BuildSpinner(),\n    AsyncStatus.Success => this.BuildList(this.dogs.Data.Value),\n    AsyncStatus.Failure => this.BuildError(this.dogs.Error.Value)\n  };\n}\n```\n\n`Status` starts at `AsyncStatus.Loading` the moment `Resource` is constructed — the\noperation is already in flight (`Http.Get(...)` above is called before `Resource` ever\nsees it; a `task<T>` value can only be produced by calling an `async` function, and\n`Resource`'s own constructor isn't one, so it always receives an already-started\noperation, never starts one itself). Its internal handling of that task is genuinely\nfire-and-forget from the constructor's point of view (there's no way to construct a\n`task` value outside an async function body to await it there instead — see KopScript's\nown \"Async\" docs) — `Status`/`Data`/`Error` transition together, exactly once, whichever\nbranch the `task` actually takes. `match` over `AsyncStatus` gets the same real\nexhaustiveness checking any other enum `match` does — leaving out a case is a compile\nerror, not a runtime blank screen.\n\n## Starting a new project: `kp new`\n\n`npx kp new my-app` scaffolds a real, working project: a `Counter` component\n(`src/counter.ks`), an `index.html` with every Kopular module already mapped, and the\nvendor/serve scripts needed to run in a browser (a browser can't resolve a bare specifier\nlike `\"kopular/component\"` the way Node's own module resolution does, so `vendor-kopular.mjs`\ncopies Kopular's runtime into `vendor/` and `index.html`'s import map points there).\n\n```bash\nnpx kp new my-app\ncd my-app\nnpm install\nnpm start   # builds, vendors kopular's browser files, and serves at :8080\n```\n\nIts `README.md` points an AI agent at this package's own `GUIDE.md` before it starts\ngenerating code. `kp` ships from this package (not from `kopscript`'s own `ks` CLI) since\nscaffolding a *Kopular* app is a framework concern, not a language one — `ks` stays a\npure-language tool with no framework knowledge baked in.\n\n## Using Kopular from another KopScript project\n\n`using \"kopular\";` (`kopscript@1.1.0`+) resolves this package's own KopScript declarations\nthrough `node_modules` — one line, every Kopular type in scope, with each file's own\ncompiled output importing only what it actually references:\n\n```ks\nusing \"kopular\";\n\nclass MyWidget : Component {\n  public override VElement Render() {\n    VElement el = VElement.Create(\"div\");\n    el.TextContent = \"Hello from MyWidget\";\n    return el;\n  }\n}\n```\n\nSee [KopularDemo](https://dev.azure.com/koppinator/Koppindependence/_git/KopularDemo) for\na full working example (components, a service, and routing).\n\nBefore `kopscript@1.1.0`, every project hand-declared its own copy of Kopular's `extern`\nbindings instead — `using` couldn't reach into a package yet. That still works (`kp new`\nabove can generate it), and is still the right call if you want a visibly trimmed subset —\nsee `LLM.md`'s \"Consuming Kopular from your own KopScript project\" for the complete,\ncopy-ready block, `Element`/`Document`/`Event` included.\n\n`extern class` can carry its own `<T>` (kopscript >= 0.5.0), so a generic export like\n`FormField<T>` describes the same way a real generic class does — see `LLM.md`'s\n`FormField<T>`/`Validators` section for the full example.\n\n## Testing your own app: `kopular/testing`\n\nA `Component`/`Router` graph can only be exercised end-to-end by actually compiling its\n`.ks` sources and running the result against a real DOM — there's no way to unit test one\notherwise. Doing that by hand is a real ~50-line dance (a fresh temp dir per test, since\nNode's ESM module cache means re-importing the same compiled path twice never re-runs an\nambient extern binding's top-level code — silently binding every later test to the first\ntest's jsdom instance — compiling via `kopscript`'s `compileGraph`, binding jsdom onto\n`globalThis` for `document`/`Element`/... to find, then restoring it). Both Kopular's own\ntest suite and KopularDemo's used to hand-roll this independently; `kopular/testing` is\nthat dance, written once:\n\n```ts\nimport { runKopularApp } from \"kopular/testing\";\n\nconst { window, cleanup } = await runKopularApp(join(__dirname, \"..\", \"src\"), \"app.ks\", {\n  includeKopularPackage: true, // your app consumes Kopular via `extern`, not relative `using`\n});\ntry {\n  expect(window.document.querySelector(\"h1\")?.textContent).toBe(\"Hello\");\n} finally {\n  cleanup(); // always — even on a thrown assertion — or the next test inherits these globals\n}\n```\n\n`jsdom` is an **optional peer dependency** — installing `kopular` alone doesn't pull it\nin; only a project that actually calls `runKopularApp` needs it added too. See\n`Kopular/test/kopular.test.ts` (`runKopularFixture`, the sibling export used for testing\nKopular's own source against inline fixtures) and KopularDemo's\n`test/routed_app.test.ts` for two real, different call sites.\n\n## Getting started (developing Kopular itself)\n\n```bash\nnpm install   # pulls in kopscript as a devDependency\nnpm run build # compiles src/*.ks -> src/*.js (compiled output is gitignored)\nnpm test      # runs test/kopular.test.ts against a real DOM via jsdom\n```\n\n`kopscript` is a real published dependency (see `package.json`'s own `devDependencies` for\nthe exact version this repo currently requires — not restated by hand here, since it\nchanges far more often than this paragraph does) — this repo doesn't need KopScript\nchecked out as a sibling directory or anything else local to build or test.\n\n## Status\n\nv1 / hobby-project scope, same as KopScript itself. `Update()` diffs and patches real DOM\n(see \"Component\" above) rather than replacing a whole subtree on every re-render, and a\nlive child Component can be embedded directly in a parent's own tree via\n`VElement.Mount(child)` — see \"Nested component composition\" above — so a parent's\nre-render really can create/patch/reorder/tear down nested children declaratively now,\nclosing what used to be documented here as the framework's biggest reconciliation gap. A\ntemplate (`.html`) embeds one too, via `*mount=\"expr\"` (`kopscript@0.25.0`+), the same way\n`*if`/`*for` embed structural logic — see \"Templates\" in `kopscript`'s own docs. A list\nchild (`Mounted` or plain) without a stable\n`VElement.Id` still renders correctly across a reorder, but isn't guaranteed to keep the\nsame real DOM node (see \"Structural directives\" above). `Update()` called before `Mount()`\nis a safe no-op — see `LLM.md`'s `Component` section for exactly when that happens\n(sibling pages sharing one injected service's `state<T>`).\n","readmeFilename":"README.md"}