{"_id":"shablon","_rev":"30-7985ee5d36d9587f4099c278e7690cf8","name":"shablon","dist-tags":{"exp":"0.0.1-rc.2","latest":"0.0.1-rc.24"},"versions":{"0.0.1-rc.1":{"name":"shablon","version":"0.0.1-rc.1","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.1","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"bba8dea9d9cfff13e15ee6a1a93aecf94587108f","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.1.tgz","fileCount":7,"integrity":"sha512-rT8BomBNlwURVjaZK7YMZ1L0mgox/JHyl1LZiHv9P6LQ/nhbRAtPUKFbZ1PDI6p+tbiLAuEDldFQMYCBCGTCkg==","signatures":[{"sig":"MEUCIDLkQNC3ydItqFwvbpsuJNupWQVZD+8I19RYaMh5tvKuAiEAv+xXKOJ7JEzSoxM/KvL9iI4rOpqTwkjFoS1pmKZ4C/w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39880},"type":"module","exports":"./index.js","gitHead":"1456e066ff1aceabea63135bc11b8782c8396563","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.1","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.44"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.1_1761680453748_0.5883502291856135","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.2":{"name":"shablon","version":"0.0.1-rc.2","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.2","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"d24c75f680b52e37743bd80a135b5444e58a51bd","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.2.tgz","fileCount":7,"integrity":"sha512-7HOR3A4OxZPqSn5xzjtlSDat/miROQqkD9IP2b6g64LA0eWCM19241HsVNjD7KlPqWdBO6XrpTwO8DXy2kFrnQ==","signatures":[{"sig":"MEUCIFqVhbX1qp53upyPpg0rvaBZK7N/3TdcS95XvDDgaCK7AiEAi2LFquFkw9/pBFgCII54EH94Mos59rQFVURTHSCO/rw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39696},"type":"module","exports":"./index.js","gitHead":"166f38ae26d344a6399f7d2bcad3280742c16231","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.1","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.44"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.2_1761727199765_0.574701393643434","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.3":{"name":"shablon","version":"0.0.1-rc.3","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.3","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"947b905abb42f61aaaf838aeb0a5e46faf23feb8","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.3.tgz","fileCount":7,"integrity":"sha512-LYGlGwxRwbcMpR77vBjAug2W7nzBbfG4l5xfnwh5S8gIt/l+YUJqnBcX7/JDYy/NOnNGn4hqa5zmr2ebyAMetQ==","signatures":[{"sig":"MEQCIBTWX4tGCSrBK1NpRELsVUrBQ+9GkiYNa5OHQ4FnaUD6AiAL8/aaaA/P5edSKahRqYY2OD9l80Oqr0r3vIIzi6up8Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43339},"type":"module","exports":"./index.js","gitHead":"ee10ec7139ccff5cf60395e5d0921ced9f4e03df","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.1","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.3_1764762223307_0.9095851924449667","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.4":{"name":"shablon","version":"0.0.1-rc.4","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.4","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"0ff929f63193d4be27e6fd8d66ef9b02cc82c8d9","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.4.tgz","fileCount":7,"integrity":"sha512-BznYsH1dPAnWtFVQHtBoc+sywTOmTVyqm5BdDSV2RyAhndij16X1vbJj8JbBemBmFfmdY25IYz7inVDSm5pPJw==","signatures":[{"sig":"MEQCIAi/Cq/dQI11sRXcHfgeRAxLnySadhbuBGxb28mp0lpsAiBzx8+oYXB4ql8sFdbQYCZOd+PaXtjJA/8C9o4l97RZuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44020},"type":"module","exports":"./index.js","gitHead":"6db4f942de826286f622b9e02e249f39f803f575","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.1","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.4_1764840669362_0.9870438985503864","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.5":{"name":"shablon","version":"0.0.1-rc.5","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.5","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"cdaaad391143dbeeda241fc55be7cd851d14194a","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.5.tgz","fileCount":7,"integrity":"sha512-6AmkBeWDBzjlxRe2KuTL3FQowVpkW2SATdvRV+atmHbHwpuZQPBtHejTd0g5QeaY6yyTZFB4eBuDuVhiS1By3Q==","signatures":[{"sig":"MEYCIQDKkEy8DoVRFfL5DFVKposVLQW9ZCr7w3Z8a5DMGjYH9QIhAOXdu5upuScoYfXqnHmRCNmxZciA9zcv2Cs5s1f5IVDD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47392},"type":"module","exports":"./index.js","gitHead":"9c73350f398803dd72c726484f9d777db5c853af","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.2","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.5_1766349960899_0.620680861868484","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.6":{"name":"shablon","version":"0.0.1-rc.6","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.6","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"09493666d0a3c201be8055b6805909d8e9898d50","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.6.tgz","fileCount":7,"integrity":"sha512-y/J64a1qUw1vZV38NmQy+Tvv2VomhjNV+4YehowcxFZzW4Y3Q52KHdSDswDXFrJqmzVXAXjOCrse8G8V5oy+Qg==","signatures":[{"sig":"MEUCIHIzbaz2e7acr4jh8RvhkJkjxvzd6wKN8wmpOj+iE7eTAiEAsPiu7C+RSKq773ExK8U3CnC1y3pseVfzSI4IwLhAUYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47599},"type":"module","exports":"./index.js","gitHead":"140ce0a335d192dd4a457461a65ad358c361329e","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.2","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.6_1766359241450_0.9637546881059693","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.7":{"name":"shablon","version":"0.0.1-rc.7","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.7","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"257969d5042517d1e081e9045ad8a5a3cf2d2520","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.7.tgz","fileCount":7,"integrity":"sha512-gkdP15x1aPeWZLlr79G2KEOS6dRigI4R/OB9iomFSLCmN+QSrlDhJyy6in4Yx1LVwfVfFs45b+60g1Dk5o0/Jg==","signatures":[{"sig":"MEQCIE/jLRe4AyywdQfv6fYFTAmitz4Q7dUV2W9mXkZZJc5QAiAPRl7SEDE9luQb1lrvzuvWwhQekvamY/Cqy5X6P7brDg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48001},"type":"module","exports":"./index.js","gitHead":"77c0873cd552f45d481262e4c1ed87631b83c10d","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.2","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.7_1766426832868_0.6936842385049586","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.8":{"name":"shablon","version":"0.0.1-rc.8","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.8","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"cff0b4391664d62ebeed81129981ad54b3141353","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.8.tgz","fileCount":7,"integrity":"sha512-Wv3QK6xKRnqxP6ObNvQJii+PP7qlmMJy+iSzYDHWwymeUH33NEKB3tPY9xMoS1ugJXGvospoTB0ouFoCaMfI4A==","signatures":[{"sig":"MEYCIQCqdPKphgvMkdXgZ7hIz7O91s4Aax6tbPlnnzuGDWkfgQIhAMgjlVPNvxx0Wq/aVsDei/v7HVjehUyvqJsecgbqxutJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48158},"type":"module","exports":"./index.js","gitHead":"a610513bb62159bfa49a70fca82c39ad10c8cfbd","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.2","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.8_1766445859093_0.7502229831124656","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.9":{"name":"shablon","version":"0.0.1-rc.9","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.9","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"a88a9e10b6a02a01d16ae175e3bb6d0dc0dd0db2","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.9.tgz","fileCount":7,"integrity":"sha512-ASPHapAoNDjuK9SmiVBfBw733i6UE7d6cNJOfteexkCMIpDx7KszWzNQVkqWNHYjBvFVlxc8MPuzI0Xg9l1HQw==","signatures":[{"sig":"MEUCIGu9DyyEaR0XHepxlvar3EKaK5pik2vysaPGawvSkeP7AiEAg2Jx9yGCAjRpfQ6q97OB9OGEk9xqW67jHB3bvFJ5ZZo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48602},"type":"module","exports":"./index.js","gitHead":"2ca5e54bdb5762e33e50d8a5c12a13be2bcee9b6","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.2","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.9_1766952191135_0.770708028405962","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.10":{"name":"shablon","version":"0.0.1-rc.10","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.10","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"1d73ba9a11c3ff8346f79c0acc73b838cc198815","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.10.tgz","fileCount":7,"integrity":"sha512-gOiyTZKb2+mXsuzFCom5Jr4X4ySIKmF1UMVn3+EFjx7lXWV2pi5RVil8nimOP/R9a+NSjfQbTDnEzRFzpmLjEg==","signatures":[{"sig":"MEUCIGAGTpHYDoe8k4EcW/tJF77rKZiwzcpebmk/PzKIErQYAiEAwYTXPhTo2urPfZusXKg03ZIEn4L8JY/Hl1aFZaHEZwo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49042},"type":"module","exports":"./index.js","gitHead":"e171fab5e2b5cc1ad07339126fbcbae4a368a77c","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.2","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.10_1767102816639_0.2833163028432861","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.11":{"name":"shablon","version":"0.0.1-rc.11","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.11","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"01763eedf1adcb0e9ef4491109f33a3d04d716f3","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.11.tgz","fileCount":7,"integrity":"sha512-6zHTcvLMgSDaUk9RfkOHOOlAfNxJ3GFmd5yPHNcMx9HsHlj1SpNCclAtaCTYA4bfQJhH58lSmoKvXgQCiHfOmA==","signatures":[{"sig":"MEUCIDPMbO67PwH29tdfXGo89drOaMLjdJmExAAWDPyxHD3tAiEA/ciFp7ueVqRB+19xDqXIAKAyitoea8gpNu0WgLzMuCk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49415},"type":"module","exports":"./index.js","gitHead":"2cf9579f361509a5bcbc9ebe843758a560c7d09e","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.2","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.11_1767350141593_0.37182363053946665","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.12":{"name":"shablon","version":"0.0.1-rc.12","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.12","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"cd23fc2f3c19e0868ec6d96be3c849ed81acff5e","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.12.tgz","fileCount":7,"integrity":"sha512-1XA/1MYbiJG/PVCRlA6X0hMh5C77VHWMHbo/16HKwcHuHEjUo7XNlXUckJmQJ55m7IAM+bHdzS5xBENGIDIQxA==","signatures":[{"sig":"MEUCIA9ajVdrjoJi3FyF+fq/1nqP6OE5puSWpVl58OpgRJysAiEAuUVqEFcPt138oU9HvfDanMN5ULPswNjbB+WljZrWTDE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50383},"type":"module","exports":"./index.js","gitHead":"b87ea85f79f29250611ba4e6c465933041547794","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.2","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.12_1767358263346_0.12884989799648805","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.13":{"name":"shablon","version":"0.0.1-rc.13","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.13","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"5ca7c8d15a263a651903825f8d9ecf4ef8b1495c","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.13.tgz","fileCount":7,"integrity":"sha512-Nfk3Qh98wX3qhQSk1NdjrRk8O5oyi/bSc8DMseUuQZzGJPAwfbn7emJr1LaT3RPWYF493IdiBMatZM3nuIbW2A==","signatures":[{"sig":"MEUCIDs1IcdTfSzzqKVpU563qH/kBqwc5vl9ltjNQzxvKP7fAiEA0iKWhNv8TV58OkybwCB+grBHQFEfFmSXhQ09HFBZXhs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50398},"type":"module","exports":"./index.js","gitHead":"7aa3cd9179a31003366007231319e6dcceca63e0","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.2","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.13_1767952518542_0.2910383330558757","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.14":{"name":"shablon","version":"0.0.1-rc.14","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.14","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"50aed8ed8d1f5815841c0ccb6199052446d261a4","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.14.tgz","fileCount":7,"integrity":"sha512-Usdj44e0Y4xHw0+rV8es7j04u7gTaKwBPuB8Fac07kJAhYfXDX0cqLlKhQeGSrRALqrtPKcqkGLvS3F3GX9ZAA==","signatures":[{"sig":"MEYCIQDVUafV2JTmDVUVJD8drBr9f713sT8Chdt1NoIwOJ/e8gIhAOITED/ho1p8Q4oViZco2vbPmdrgQf+VfwSWqRmSy3HG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50562},"type":"module","exports":"./index.js","gitHead":"ba27fd63447e0952b32d909c2dd6e9886765e0ec","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.2","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.14_1769178378901_0.9109311148012493","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.15":{"name":"shablon","version":"0.0.1-rc.15","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.15","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"89c1a1cae43642e820ca66d1532b227000f96e82","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.15.tgz","fileCount":7,"integrity":"sha512-NiM0Xn8QBZCpucL7Z35ipa7bTZkOz+pAG6wu5OMOB1zyqUGpTKnuvRRrcMs8a1fIpa7s+p+1eQnt3+ujKL/3nw==","signatures":[{"sig":"MEUCIQC4Mgy6TUHCIVH+z92osyPqUENFg444rfs8Q5YaFiNEQQIgclqcJjwD7g9UgmPl1ewPGiH81KH5t+RJ7dP9Hyx4ohg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49691},"type":"module","exports":"./index.js","gitHead":"acb47b76906e01e32971234f1e51418a8c4b727c","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.2","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.15_1772457680717_0.5721577622390348","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.16":{"name":"shablon","version":"0.0.1-rc.16","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.16","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"326a121956fe8c27389f35affe2c9755007991a2","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.16.tgz","fileCount":7,"integrity":"sha512-Sm/uQDQff7H4LiyJSJ8iuSfWHmoZGjOui6RfhhgJ6yi5fxAfpLrMZK8x1G50YamyuZ+fXjcSJNA3h8knYgn1GA==","signatures":[{"sig":"MEQCIBV31AhLZdRD5aKRchM20t4J0UwcEJEzu/mB4Dse8kGrAiAWklBlUB8dvgv8c1a29pZNwkKmkg+IcSSzBSLA8CcG6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49873},"type":"module","exports":"./index.js","gitHead":"5a6e37e963d95c75e56772b4e25d0c52f926aab8","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.6.2","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.16_1772828461199_0.033715329430813235","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.17":{"name":"shablon","version":"0.0.1-rc.17","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.17","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"861a7b08c19544d916d8781d139a453128a734a2","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.17.tgz","fileCount":7,"integrity":"sha512-7vqwn90Xgf4RjaznindJuJv1a6I+XQsoA4kbHtx1uyLI+Fi5ahj7vyfqsOQJX7StRrtSl8yWc5zGobIoJgbw/w==","signatures":[{"sig":"MEUCICx134MGB/bMBdO3nTsGyhnqfzl0K8FbXrh3veBe354yAiEA2xengqyztCuSeq0Y9FKjewsxIv0+Uo0NT5EceZ0pbls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50076},"type":"module","exports":"./index.js","gitHead":"44a4c4c2ff305431636af07c1f05aa4a688c2a4e","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.12.1","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.17_1779284060363_0.7466674696880737","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.18":{"name":"shablon","version":"0.0.1-rc.18","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.18","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"44978820c7d63ddeb6d72036c404ef838363a259","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.18.tgz","fileCount":7,"integrity":"sha512-EsO5qCDhfHchAUslzNV/rDJ5dCdltQuqPmyyWvUCHxEDTzUxtURORjS1yOMyLDF094HQWXQQD1qrP931AwAyZw==","signatures":[{"sig":"MEYCIQCGRTvKJEtlPhTyqvRRfKDXWLIkEe/hXoB45DdmT0/ubgIhAJZ7I1Ujr2P4tXVPifEBrsAwGudTw2rOjz9TIxtxI+JP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49402},"type":"module","exports":"./index.js","gitHead":"24077f578fd8c0426b8c6f64e1b1ae358e2bfd40","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run format && npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.12.1","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.18_1780577041484_0.042086630965437966","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.19":{"name":"shablon","version":"0.0.1-rc.19","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.19","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"c0fc10f4ceb2b064511167748b0578c674bb423f","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.19.tgz","fileCount":7,"integrity":"sha512-AkZ0yD0KcNF+RVDnpg4l2f8PEI3DcNz5k/4AbELgsYLufKmzXAg5XFguKvR+apd3yidvvXYnr4j/6L91qeF3jg==","signatures":[{"sig":"MEUCIGob7o6SADV6rUn0f6cv+Im4c96Pyg4uhkeFcTxGuAmeAiEAoHD2EEVDMQlrIBGaQDJwrSjMi0nvYEQaPBkVNClV0Ro=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49427},"type":"module","exports":"./index.js","gitHead":"15a7ae13660f08ca493bcbc39c5c278e61f93d10","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run format && node --test && npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.12.1","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.19_1780577528633_0.8148291984233056","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.20":{"name":"shablon","version":"0.0.1-rc.20","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.20","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"3977a38b16f9a454c78662ab36907d30c461291f","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.20.tgz","fileCount":7,"integrity":"sha512-E22pxrt5KmJ1WCWb7+HNDiIrakHD+CH0biaUlz1ZYnAvahnfN/lj2XWHymk6waqNT9DvwxPylx7KeJOvrNRh7A==","signatures":[{"sig":"MEYCIQCeYeq0ZcJN5wNRpWpm1+KULj5+XyyXJz3qKPcOBpqsJQIhALL+QJM5pzqx7EIn/HMXKTD2ARSSJl7a8GbUT9r6486g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49516},"type":"module","exports":"./index.js","gitHead":"8041140846ec074dcc999d234111093445736719","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run format && node --test && npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.12.1","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.20_1780579590524_0.39168258432863046","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.21":{"name":"shablon","version":"0.0.1-rc.21","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.21","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"4c84a55ac97d749c913a9b2e332d0a05226f70b0","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.21.tgz","fileCount":7,"integrity":"sha512-Dr7Nki38XaQcVNL289WzCC/8TY4GnMqfkE0yfhqK7hl+IGTEq3zoAMFRmewR032jdLgY0s7p/Z0YEr/Psb4HNw==","signatures":[{"sig":"MEYCIQDdbTa6t3rdhdk9RE5rcaciIjn5Vt9Uh/Q3lw+agZR2vQIhAOU0vaRa3XKvt2Z10NRbmMLDfSdUG1j3rMay4Al/bTmb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49724},"type":"module","exports":"./index.js","gitHead":"0acf6309756a685afc2649df4a9e27acb3a3c0fb","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run format && node --test && npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.12.1","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.21_1782066457382_0.5745611360596139","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.22":{"name":"shablon","version":"0.0.1-rc.22","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.22","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"d3423cf119206f8f67b76e14f62d1f366bc22647","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.22.tgz","fileCount":7,"integrity":"sha512-C/YhTz/RScmJdqtqZ+T84PU+cErDxq6eVasNGdPMuxfViDD9ykz1/82kiAN3x+KlWhfjRr2ciZGpH8oL26ZEAQ==","signatures":[{"sig":"MEYCIQDrDaTYK/e5BcbWjZPehtIDfdnTo/ZnFbM3bamCOx4J5QIhANCwfIsLXoAWnsG7bceTO1vGI4uUNKcga4JEzNfKDiFG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51769},"type":"module","exports":"./index.js","gitHead":"aa8f8f1525f639d201778672db8519b8c70c26cc","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run format && node --test && npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.12.1","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.22_1783144210656_0.9588920980606073","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.23":{"name":"shablon","version":"0.0.1-rc.23","keywords":["frontend","js-framework","no-build","spa"],"author":{"name":"Gani Georgiev"},"license":"MIT","_id":"shablon@0.0.1-rc.23","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"homepage":"https://github.com/ganigeorgiev/shablon#readme","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"dist":{"shasum":"0561b1b6f384d0209cd4613bfcf19a44cdbd5e97","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.23.tgz","fileCount":7,"integrity":"sha512-eqm+e8/SSU32m52Wid//DlC4POY4ZmHab/0T2RqtKOfn3IRbsLsXwczEzb0ws3JPC3WbUAzXfJqKznenLWyyuw==","signatures":[{"sig":"MEUCIQCDo97BCYZN+e9o+TYI375x01/KTaQSl6kg7yGodZO4/AIgEa2MYVf6o0LgaKlprMydfeispTnKI3e6iL626McUuSQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52503},"type":"module","exports":"./index.js","gitHead":"282294e436d5b3d82d5d65da3dbadc6d54d33e63","scripts":{"build":"rolldown -c","format":"npx prettier ./src --write","prepublishOnly":"npm run format && node --test && npm run build"},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"repository":{"url":"git://github.com/ganigeorgiev/shablon.git","type":"git"},"_npmVersion":"11.12.1","description":"No-build JavaScript framework for Single-page applications","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.0.0-beta.50"},"_npmOperationalInternal":{"tmp":"tmp/shablon_0.0.1-rc.23_1786169280714_0.6814948476207063","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-rc.24":{"version":"0.0.1-rc.24","name":"shablon","description":"No-build JavaScript framework for Single-page applications","author":{"name":"Gani Georgiev"},"license":"MIT","type":"module","exports":"./index.js","repository":{"type":"git","url":"git://github.com/ganigeorgiev/shablon.git"},"keywords":["frontend","js-framework","no-build","spa"],"scripts":{"format":"npx prettier ./src --write","build":"rolldown -c","prepublishOnly":"npm run format && node --test && npm run build"},"devDependencies":{"jsdom":"^26.0.0","prettier":"^3.6.2","rolldown":"^1.2.0"},"prettier":{"tabWidth":4,"printWidth":90,"bracketSameLine":true},"gitHead":"f41eefc7dd01b3064803b5d7cba4f69b850f4f1a","_id":"shablon@0.0.1-rc.24","bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"homepage":"https://github.com/ganigeorgiev/shablon#readme","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-c1SYbxTPUnqIyP+huRBGDBxK8KOmMlL4PC+W1fWdzelMtaf0Qp5oMndyft/Sid8/Bq3amdP49fjYj0URkosmLw==","shasum":"63c6dd234046c09110cb5187e86fe3536fac1efd","tarball":"https://registry.npmjs.org/shablon/-/shablon-0.0.1-rc.24.tgz","fileCount":8,"unpackedSize":123311,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIE1Rj26A/tGB5KNLTViQvofbKF0eEsnpynjk8Iuam9vYAiBsT7c7yngQcmLCj4mMVvxVU1F5NY5WeXCxYTsxgteTOQ=="}]},"_npmUser":{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"},"directories":{},"maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/shablon_0.0.1-rc.24_1786901245196_0.16420194661014276"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-28T19:40:53.747Z","modified":"2026-08-16T17:27:25.478Z","0.1.0":"2023-04-07T13:32:56.425Z","0.0.1":"2025-10-27T19:11:05.192Z","0.0.2":"2025-10-27T19:17:59.821Z","0.0.1-rc.1":"2025-10-28T19:40:53.957Z","0.0.1-rc.2":"2025-10-29T08:39:59.973Z","0.0.1-rc.3":"2025-12-03T11:43:43.483Z","0.0.1-rc.4":"2025-12-04T09:31:09.498Z","0.0.1-rc.5":"2025-12-21T20:46:01.035Z","0.0.1-rc.6":"2025-12-21T23:20:41.586Z","0.0.1-rc.7":"2025-12-22T18:07:13.014Z","0.0.1-rc.8":"2025-12-22T23:24:19.279Z","0.0.1-rc.9":"2025-12-28T20:03:11.290Z","0.0.1-rc.10":"2025-12-30T13:53:36.800Z","0.0.1-rc.11":"2026-01-02T10:35:41.747Z","0.0.1-rc.12":"2026-01-02T12:51:03.493Z","0.0.1-rc.13":"2026-01-09T09:55:18.694Z","0.0.1-rc.14":"2026-01-23T14:26:19.045Z","0.0.1-rc.15":"2026-03-02T13:21:20.907Z","0.0.1-rc.16":"2026-03-06T20:21:01.357Z","0.0.1-rc.17":"2026-05-20T13:34:20.524Z","0.0.1-rc.18":"2026-06-04T12:44:01.635Z","0.0.1-rc.19":"2026-06-04T12:52:08.757Z","0.0.1-rc.20":"2026-06-04T13:26:30.683Z","0.0.1-rc.21":"2026-06-21T18:27:37.512Z","0.0.1-rc.22":"2026-07-04T05:50:10.809Z","0.0.1-rc.23":"2026-08-08T06:08:00.868Z","0.0.1-rc.24":"2026-08-16T17:27:25.327Z"},"bugs":{"url":"https://github.com/ganigeorgiev/shablon/issues"},"author":{"name":"Gani Georgiev"},"license":"MIT","homepage":"https://github.com/ganigeorgiev/shablon#readme","keywords":["frontend","js-framework","no-build","spa"],"repository":{"type":"git","url":"git://github.com/ganigeorgiev/shablon.git"},"description":"No-build JavaScript framework for Single-page applications","maintainers":[{"name":"gani.georgiev","email":"gani.georgiev@gmail.com"}],"readme":"Shablon - No-build JavaScript frontend framework\n======================================================================\n\n> [!CAUTION]\n>  This is mostly an experiment created for the planned [PocketBase](https://github.com/pocketbase/pocketbase) UI rewrite to allow frontend plugins support.\n>\n> **Don't use it yet - it hasn't been actually tested in real applications and it may change without notice!**\n\n**Shablon** _(\"template\" in Bulgarian)_ is a ~8KB JS framework that comes with deeply reactive state management, plain JS extendable templates and a simple router.\n\nShablon has very small learning curve (**4 main exported functions**) and it is suitable for building Single-page applications (SPA):\n\n- State: `store(obj)` and `watch(trackedFunc, optUntrackedFunc)`\n- Template: `t.[tag](attrs, ...children)`\n- Router: `router(routes, options)`\n\nThere is no dedicated \"component\" structure. Everything is essentially plain DOM elements sprinkled with a little reactivity.\n\nBelow is an example _Todos list \"component\"_ to see how it looks:\n\n```js\nfunction todos() {\n    const data = store({\n        todos: [],\n        newTitle: \"\",\n    })\n\n    // external watcher\n    const w = watch(() => {\n        console.log(\"new title:\", data.newTitle)\n    })\n\n    return t.div({ className: \"todos-list\", onunmount: () => w.unwatch() },\n        t.h1({ textContent: \"Todos\" }),\n        t.ul({ style: \"margin: 20px 0\" },\n            () => {\n                if (!data.todos.length) {\n                    return t.li({ rid: \"notodos\", textContent: \"No todos.\" })\n                }\n\n                return data.todos.map((todo) => {\n                    return t.li({ rid: todo, textContent: () => todo.title })\n                })\n            }\n        ),\n        t.hr(),\n        t.input({ type: \"text\", value: () => data.newTitle, oninput: (e) => data.newTitle = e.target.value }),\n        t.button({ textContent: \"Add\", onclick: () => data.todos.push({ title: data.newTitle }) })\n    )\n}\n\ndocument.getElementById(\"app\").replaceChildren(todos());\n```\n\n<details>\n\n<summary>\nExample Svelte 5 equivalent code for comparison\n\n_Shablon is not as pretty as Svelte but it strives for similar developer experience._\n</summary>\n\n\n```svelte\n<script>\n    let todos = $state([])\n    let newTitle = $state(\"\")\n\n    // external watcher\n    // note: no need to manually call \"untrack\" because Svelte does it automatically on component unmount\n    $effect(() => {\n        console.log(\"new title:\", newTitle)\n    })\n</script>\n\n<div class=\"todos-list\">\n    <h1>Todos</h1>\n    <ul style=\"margin: 20px 0\">\n        {#each todos as todo}\n            <li>{todo.title}</li>\n        {:else}\n            <li>No todos.</li>\n        {/each}\n    </ul>\n    <hr>\n    <input type=\"text\" bind:value=\"{newTitle}\">\n    <button onclick=\"{() => todos.push({ title: newTitle })}\">Add</button>\n</div>\n```\n\n</details>\n\n\n\n## Installation\n\n> You can also check the [`example` folder](https://github.com/ganigeorgiev/shablon/tree/master/example) for a showcase of a minimal SPA with 2 pages.\n\n#### Global via script tag (browsers)\n\nThe default [IIFE](https://developer.mozilla.org/en-US/docs/Glossary/IIFE) bundle will load all exported Shablon functions in the global context.\nYou can find the bundle file at [`dist/shablon.iife.js`](https://github.com/ganigeorgiev/shablon/blob/master/dist/shablon.iife.js) (or use a CDN pointing to it):\n\n```html\n<!-- <script src=\"https://cdn.jsdelivr.net/gh/ganigeorgiev/shablon@master/dist/shablon.iife.js\"></script> -->\n<script src=\"/path/to/dist/shablon.iife.js\"></script>\n<script type=\"text/javascript\">\n    const data = store({ count: 0 })\n    ...\n</script>\n```\n\n#### ES module (browsers and npm)\n\nAlternatively, you can load the package as ES module either by using the [`dist/shablon.es.js`](https://github.com/ganigeorgiev/shablon/blob/master/dist/shablon.es.js) file or\nimporting it from [npm](https://www.npmjs.com/package/shablon).\n\n- browsers:\n    ```html\n    <!-- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules -->\n    <script type=\"module\">\n        import { t, store, watch, router } from \"/path/to/dist/shablon.es.js\"\n\n        const data = store({ count: 0 })\n        ...\n    </script>\n    ```\n\n- npm (`npm -i shablon`):\n    ```js\n    import { t, store, watch, router } from \"shablon\"\n\n    const data = store({ count: 0 })\n    ...\n    ```\n\n## API\n<details>\n<summary><strong id=\"api.store\">store(obj)</strong></summary>\n\n`store(obj)` returns a reactive `Proxy` of the specified plain object.\n\nThe keys of an `obj` must be \"stringifiable\" because they are used internally to construct a path to the reactive value.\n\nThe values can be any valid JS primitive value, including nested plain arrays and objects (aka. it is recursively reactive).\n\nGetters are also supported and can be used as reactive computed properties.\nThe value of a reactive getter is \"cached\", meaning that even if one of the getter dependency changes, as long as the resulting value is the same there will be no unnecessary watch events fired.\n\nMultiple changes from one or many stores are also automatically batched in a microtask. For example:\n\n```js\nconst data = store({ age: 49, activity: \"work\" })\n\nwatch(() => {\n    console.log(\"age\", data.age)\n    console.log(\"activity\", data.activity)\n})\n\n// changing both fields will trigger the watcher only once\ndata.age++\ndata.activity = \"rest\"\n```\n\n> Note that only plain objects and arrays are wrapped in a nested `Proxy`! `Date`, `Set`, `Map`, `WeakRef`, `WeakSet`, `WeakMap` or any custom object will be resolved as they are to avoid access errors.\n> You can access the original object without the Proxy trap using the special `__raw` key, e.g. `data.someObj.__raw.someKey`.\n\n</details>\n\n\n<details>\n<summary><strong id=\"api.watch\">watch(trackedFunc, optUntrackedFunc)</strong></summary>\n\nWatch registers a callback function that fires on initialization and\nevery time any of its evaluated `store` reactive properties change.\n\nIt returns a \"watcher\" object that could be used to `unwatch()` the registered listener.\n\n_Optionally also accepts a second callback function that is excluded from the evaluated\nstore props tracking and instead is invoked only when `trackedFunc` is called\n(could be used as a \"track-only\" watch pattern)._\n\nFor example:\n\n```js\nconst data = store({ count: 0 })\n\nconst w = watch(() => console.log(data.count))\n\ndata.count++ // triggers watch update\n\nw.unwatch()\n\ndata.count++ // doesn't trigger watch update\n```\n\n\"Track-only\" pattern example:\n\n```js\nconst data = store({\n    a: 0,\n    b: 0,\n    c: 0,\n})\n\n// watch only \"a\" and \"b\" props\nwatch(() => [\n   data.a,\n   data.b,\n], (_) => { // receive the return result of trackedFunc\n    console.log(data.a)\n    console.log(data.b)\n    console.log(data.c)\n})\n\ndata.a++ // trigger watch update\ndata.b++ // trigger watch update\ndata.c++ // doesn't trigger watch update\n```\n\n</details>\n\n\n<details>\n<summary><strong id=\"api.t\">t.[tag](attrs, ...children)</strong></summary>\n\n`t.[tag](attrs, ...children)` constructs and returns a new DOM element (aka. `document.createElement(tag)`).\n\n`tag` could be any valid HTML element name - `div`, `span`, `hr`, `img`, registered custom web component, etc.\n\n`attrs` is an object where the keys are:\n- valid element's [JS property](https://developer.mozilla.org/en-US/docs/Web/API/Element#instance_properties)\n    _(note that some HTML attribute names are different from their JS property equivalent, e.g. `class` vs `className`, `for` vs `htmlFor`, etc.)_\n- regular or custom HTML attribute if it has `html-` prefix _(it is stripped from the final attribute)_, e.g. `html-data-name`\n\nThe attributes value could be a plain JS value or reactive function that returns such value _(e.g. `() => data.count`)_.\n\n`children` is an optional list of child elements that could be:\n- plain text (inserted as `TextNode`)\n- single tag\n- array of tags\n- reactive function that returns any of the above\n\nWhen a reactive function is set as attribute value or child, it is invoked only when the element is mounted and automatically \"unwatched\" on element removal _(with slight debounce to minimize render blocking)_.\n\n**Lifecycle attributes**\n\nEach constructed tag has 3 additional optional lifecycle attributes:\n\n- `onmount: func(el)` - optional callback called when the element is inserted in the DOM\n- `onunmount: func(el)` - optional callback called when the element is removed from the DOM\n- `rid: any` - \"replacement id\" is an identifier based on which we can decide whether to reuse the element or not during rerendering (e.g. on list change); the value could be anything comparable with `==`\n\n</details>\n\n\n<details>\n<summary><strong id=\"api.router\">router(routes, options)</strong></summary>\n\n`router(routes, options = { fallbackPath: \"#/\", pretty: false, transition: false })` initializes a hash-based (default) or pretty URLs client-side router by loading the provided routes configuration and listens for navigation changes.\n\n`routes` is a key-value object where:\n- the key must be a string path such as `#/a/b/{someParam}`\n- value is a route handler function that executes every time the page hash matches with the route's path\n    _(the route handler can return a \"destroy\" function that is invoked when navigating away from that route)_\n\nNote that by default the router expects to have at least one route matching `fallbackPath` in case the user navigate to a missing page.\n\nFor example:\n\n```js\nrouter({\n    \"#/\": (route) => {\n        document.getElementById(app).replaceChildren(\n            t.div({ textContent: \"Homepage!\"})\n        )\n    },\n\n    // Route with simple parameter(s).\n    //\n    // Matches `#/users/john`, `#/users/jane`, etc.\n    \"#/users/{id}\": (route) => {\n        document.getElementById(app).replaceChildren(\n            t.div({ textContent: \"User \" + route.params.id })\n        )\n        return () => { console.log(\"cleanup...\") }\n    },\n\n    // Route with wildcard parameter (its value is optional and always must be at the end).\n    //\n    // Matches `#/files/`, `#/files/a`, `#/files/a/b`, `#/files/a/b/c`, etc.\n    // It will match also `#/files` (without trailing slash) in case there is no other more specific route already registered for it\n    // (this is similar to how the standard Go routes works with the exception that we don't redirect to a trailing slash path since the router operates on the client-side).\n    //\n    // Note that wildcard routes are always with lowest priority no matter of their registration position,\n    // aka. non-wildcard routes are prioritized over others with wildcard parameter.\n    \"#/files/{path...}\": (route) => {\n        document.getElementById(app).replaceChildren(\n            // if the url is `#/files/a/b/c` then params.path would be `a/b/c`\n            t.div({ textContent: \"Path \" + route.params.path })\n        )\n    },\n})\n```\n\nThe same example as above but with enabled \"pretty urls\" (relies on the [Navigation API](https://developer.mozilla.org/en-US/docs/Web/API/Navigation)):\n\n```js\nrouter({\n    \"/\": (route) => {\n        document.getElementById(app).replaceChildren(\n            t.div({ textContent: \"Homepage!\"})\n        )\n    },\n\n    // Route with simple parameter(s).\n    //\n    // Matches `/users/john`, `/users/jane`, etc.\n    \"/users/{id}\": (route) => {\n        document.getElementById(app).replaceChildren(\n            t.div({ textContent: \"User \" + route.params.id })\n        )\n        return () => { console.log(\"cleanup...\") }\n    },\n\n    // Route with wildcard parameter (its value is optional and always must be at the end).\n    //\n    // Matches `/files/`, `/files/a`, `/files/a/b`, `/files/a/b/c`, etc.\n    // It will match also `/files` (without trailing slash) in case there is no other more specific route already registered for it\n    // (this is similar to how the standard Go routes works with the exception that we don't redirect to a trailing slash path since the router operates on the client-side).\n    //\n    // Note that wildcard routes are always with lowest priority no matter of their registration position,\n    // aka. non-wildcard routes are prioritized over others with wildcard parameter.\n    \"/files/{path...}\": (route) => {\n        document.getElementById(app).replaceChildren(\n            // if the url is `/files/a/b/c` then params.path would be `a/b/c`\n            t.div({ textContent: \"Path \" + route.params.path })\n        )\n    },\n}, { pretty: true }) // if `fallbackPath` is not explicitly set and pretty:true, `fallbackPath` is set to \"/\"\n```\n\n`router` returns an optional destroy function that could be used to remove the already registered listeners, allowing you to initialize a new router.\n\n</details>\n\n\n## Performance and caveats\n\nNo extensive testing or benchmarks have been done yet but for the simple cases it should perform as fast as it could get because we update only the targeted DOM attribute when possible _(furthermore multiple store changes are auto batched per microtask to ensure that watchers are not invoked unnecessary)_.\n\nFor example, the expression `t.div({ textContent: () => data.title })` is roughly the same as the following pseudo-code:\n\n```js\nconst div = document.createElement(\"div\")\ndiv.textContent = data.title\n\nfunction onTitleChange() {\n    div.textContent = data.title\n}\n```\n\nConditional rendering tags as part of a reactive child function is a little bit more complicated though.\nBy default when such function runs due to a store dependency change, the old children will be removed and the new ones will be inserted on every call of that function which could be unnecessary if the tags hasn't really changed.\n\nTo avoid this you can specify the `rid` attribute which instructs Shablon to reuse the same element if the old and new `rid` are the same minimizing the DOM operations. For example:\n\n```js\nconst data = store({ count: 0, list: [\"a\", \"b\", \"c\"] })\n\n// ALWAYS replace the child tags on every data.count or data.list change\nt.div({ className: \"bad\"},\n    () => {\n        if (data.count < 2) {\n            return t.strong({}, \"Not enough elements\")\n        }\n        return data.list.map((item) => t.div({}, item))\n    }\n)\n\n// replace the child tags on data.count or data.list change\n// ONLY if the tags \"rid\" attribute has changed\nt.div({ className: \"good\"},\n    () => {\n        if (data.count < 2) {\n            return t.strong({ rid: \"noelems\" }, \"Not enough elements\")\n        }\n        return data.list.map((item) => t.div({ rid: item }, item))\n    }\n)\n```\n\nOther things that could be a performance bottleneck are the lifecycle attributes (`onmount`, `onunmount`) because currently they rely on a global `MutationObserver` which could be potentially slow for deeply nested elements due to the nature of the current recursive implementation _(this will be further evaluated during the actual integration in PocketBase)_.\n\n\n## Security\n\nShablon **DOES NOT** perform any explicit escaping on its own and it relies on:\n\n- modern browsers to perform TextNode _(when a child is a plain string)_ and attributes value escaping out of the box for us\n- developers to use the appropriate safe JS properties (e.g. `textContent` instead of `innerHTML`)\n\n**There could be some gaps and edge cases so I strongly recommend registering a [Content Security Policy (CSP)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP) either as `meta` tag or HTTP header to prevent XSS attacks.**\n\n\n## Why Shablon?\n\nIf you are not sure why would you use Shablon instead of Svelte, Lit, Vue, etc., then I'd suggest to simply pick one of the latter because they usually have a lot more features, can offer better ergonomics and have abundance of tutorials.\n\nShablon was created for my own projects, and more specifically for PocketBase in order to allow writing dynamically loaded dashboard UI plugins without requiring a Node.js build step.\nSince I didn't feel comfortable maintaining UI plugins system on top of another framework with dozens other dependencies that tend to change in a non-compatible way over time, I've decided to try building my own with minimal API surface and that can be safely \"frozen\".\n\nShablon exists because:\n\n- it can be quickly learned (4 main exported functions)\n- it has minimal \"magic\" and no unsafe-eval (aka. it is Content Security Policy friendly)\n- no IDE plugin or custom syntax highlighter is needed (it is plain JavaScript)\n- the templates return regular [JS `Element`](https://developer.mozilla.org/en-US/docs/Web/API/Element) allowing direct mutations\n- it doesn't require build step and can be imported in the browser with a regular script tag\n- it has no external dependencies and doesn't need to be updated frequently\n- it is easy to maintain on my own _(under 2000 LOC with tests)_\n\n\n## Contributing\n\nShablon is free and open source project licensed under the [Zero-Clause BSD License](https://github.com/ganigeorgiev/shablon/blob/master/LICENSE.md) _(no attribution required)_.\n\nFeel free to report bugs, but feature requests are not welcomed.\n\n**There are no plans to extend the project scope and once a stable PocketBase release is published it could be considered complete.**\n","readmeFilename":"README.md"}