{"_id":"@beatzball/litro-router","_rev":"15-57e8621b3f1a4ebc42a07a0dfd2c2bbe","name":"@beatzball/litro-router","dist-tags":{"latest":"0.3.1"},"versions":{"0.1.0":{"name":"@beatzball/litro-router","version":"0.1.0","keywords":["router","web-components","url-pattern","lit","client-side-routing"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.1.0","maintainers":[{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"e94afa804b81945164d8a9eaf97f5a2351f0d102","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.1.0.tgz","fileCount":17,"integrity":"sha512-H52C7ggdLLf6AOxvq3qooZ5lAcNWidLH++6moHuGeas/uVx4leVQD+ke4P0qhJ72o7ycYo7FyipSkK7BgaDR+w==","signatures":[{"sig":"MEUCIBSMCWYnCmwFFAwh8MlJJ7IJzhLyDEMuBkJ2cE8xzyydAiEA6B3yh/bcXAEzFTvdWVVnSnvDnwF61aB0ReC1j4aIRLo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123259},"type":"module","_from":"file:beatzball-litro-router-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"},"_resolved":"/tmp/5f3a237ad39a58db3ec8131375905ffb/beatzball-litro-router-0.1.0.tgz","_integrity":"sha512-H52C7ggdLLf6AOxvq3qooZ5lAcNWidLH++6moHuGeas/uVx4leVQD+ke4P0qhJ72o7ycYo7FyipSkK7BgaDR+w==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"10.8.2","description":"Zero-dependency URLPattern client-side router for web components","directories":{},"_nodeVersion":"20.20.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.1.0_1773041900076_0.5144752595182169","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@beatzball/litro-router","version":"0.1.1","keywords":["router","web-components","url-pattern","lit","client-side-routing"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.1.1","maintainers":[{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"cb9bf96392c244506b8192b9c02977811524901c","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.1.1.tgz","fileCount":17,"integrity":"sha512-nxgbQSZcf/THG4EQuRNjQuIn1qB8Y2re1LSMR1KpVkKx04/H/yWv882t5/Dbn6T5+pAVkLcx/38LkVYvahYwUA==","signatures":[{"sig":"MEUCIC5sCBlw5nUM2ojWeAWod2kGNWPef+R/9nlmwOrWHSUHAiEAtBNvdCvVFRkRYzrfIF9GrCeNpN66tSDy/573nlHA5LM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123567},"type":"module","_from":"file:beatzball-litro-router-0.1.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"},"_resolved":"/tmp/19ee52ff535eaba1a7eb7a9522ea79b0/beatzball-litro-router-0.1.1.tgz","_integrity":"sha512-nxgbQSZcf/THG4EQuRNjQuIn1qB8Y2re1LSMR1KpVkKx04/H/yWv882t5/Dbn6T5+pAVkLcx/38LkVYvahYwUA==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"10.8.2","description":"Zero-dependency URLPattern client-side router for web components","directories":{},"_nodeVersion":"20.20.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.1.1_1773044406333_0.2687468100742403","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@beatzball/litro-router","version":"0.1.2","keywords":["router","web-components","url-pattern","lit","client-side-routing"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.1.2","maintainers":[{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"470c5c0e77233240fe4f4c37e7641f5bdcdc52d6","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.1.2.tgz","fileCount":17,"integrity":"sha512-tuVKwpL8gVQ82lnexNJxlhjqE9Vu98hx4J4Ke/dtnAnuLPprlG1xzbjutgvad9z/oLgcX9ks0ee61BDOUdJ66Q==","signatures":[{"sig":"MEYCIQD3OaWP4VZlr402Z41FPZkoqDDLCQuBCMeSRokeVdrVTgIhANVplbEm9/fCXdqDXe5vRzHNrOrtd/QPOwS+inWoRMsh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131071},"type":"module","_from":"file:beatzball-litro-router-0.1.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"},"_resolved":"/tmp/bf4c94f06519d0a1803e27419e82814b/beatzball-litro-router-0.1.2.tgz","_integrity":"sha512-tuVKwpL8gVQ82lnexNJxlhjqE9Vu98hx4J4Ke/dtnAnuLPprlG1xzbjutgvad9z/oLgcX9ks0ee61BDOUdJ66Q==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"10.8.2","description":"Zero-dependency URLPattern client-side router for web components","directories":{},"_nodeVersion":"20.20.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.1.2_1773096994082_0.39596874717383956","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@beatzball/litro-router","version":"0.1.3","keywords":["router","web-components","url-pattern","lit","client-side-routing"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.1.3","maintainers":[{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"fba05534afaac8db8877ac421e4c8117edb48c74","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.1.3.tgz","fileCount":17,"integrity":"sha512-SdRoK2/a2uvWD2W+SqrWeezBmqBPs993VddZLyY+lOyjkLW2LIwpJgbcRyTVFPmzh6LRsiFsewV4q2q50TgOHQ==","signatures":[{"sig":"MEUCIQDa1PDfFYsSiUvgL+3r7m7yiTgD1i7cI+0SQM34Q3SxmgIgbtI1yejY1LHniu+dklk+bFpWW6+CTjDuaBQwikRt0cw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137892},"type":"module","_from":"file:beatzball-litro-router-0.1.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"},"_resolved":"/tmp/7d61a2aabdb4f16273366cda1ee21586/beatzball-litro-router-0.1.3.tgz","_integrity":"sha512-SdRoK2/a2uvWD2W+SqrWeezBmqBPs993VddZLyY+lOyjkLW2LIwpJgbcRyTVFPmzh6LRsiFsewV4q2q50TgOHQ==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"10.8.2","description":"Zero-dependency URLPattern client-side router for web components","directories":{},"_nodeVersion":"20.20.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.1.3_1773184108117_0.3056345933361968","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@beatzball/litro-router","version":"0.1.4","keywords":["router","web-components","url-pattern","lit","client-side-routing"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.1.4","maintainers":[{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"0e3c71de638c8d16f21aaa89e8b1c9a56c0af032","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.1.4.tgz","fileCount":17,"integrity":"sha512-Ukpod+7BBDhloVROq0pDQSctyDAnZTbSPAdZfAmuih7UcFmEhShPkU/ETDGiW6zB1nXm6NGardACHrOfSfWKsg==","signatures":[{"sig":"MEUCIHY38+g6HbTieep/4KPCKEVqB2wBJKPNV/d+ttMS0wB7AiEA5+VzS3bPy1zokbhWZSbXSuU+pt3dBRpuJEfYvESWBCc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144742},"type":"module","_from":"file:beatzball-litro-router-0.1.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"},"_resolved":"/tmp/ec8ef173e66c7151a2b48162bfd6d4ee/beatzball-litro-router-0.1.4.tgz","_integrity":"sha512-Ukpod+7BBDhloVROq0pDQSctyDAnZTbSPAdZfAmuih7UcFmEhShPkU/ETDGiW6zB1nXm6NGardACHrOfSfWKsg==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"10.8.2","description":"Zero-dependency URLPattern client-side router for web components","directories":{},"_nodeVersion":"20.20.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.1.4_1773323615424_0.15025141209057047","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@beatzball/litro-router","version":"0.1.5","keywords":["router","client-side-routing","urlpattern","web-components","lit","lit-element","spa","history-api","custom-elements","zero-dependencies","typescript"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.1.5","maintainers":[{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"14bafb7c970f947e11b18ff5bcf1dbfe45e76f85","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.1.5.tgz","fileCount":17,"integrity":"sha512-DVZTrI8Zc8SpgHiU9XM2OO3SCqi7IMoVch8YWdBx4BAIldUw8FHp+twRTMVFEv+/+CcjxeQ9TUgHeesc7W8yyQ==","signatures":[{"sig":"MEYCIQD3s7VDfWmz2TQQ32CtesuXwb9C3jA5VCeasXuBUW0ZogIhAM3TbCFjISWixzjD+iKtN4UtoHfUkYEZhq5HjFuOyD5K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146528},"type":"module","_from":"file:beatzball-litro-router-0.1.5.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"},"_resolved":"/tmp/46e3776c7845a148e715bcce83094866/beatzball-litro-router-0.1.5.tgz","_integrity":"sha512-DVZTrI8Zc8SpgHiU9XM2OO3SCqi7IMoVch8YWdBx4BAIldUw8FHp+twRTMVFEv+/+CcjxeQ9TUgHeesc7W8yyQ==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"10.8.2","description":"Client-side router for Lit web components. Built on the native URLPattern API. Zero dependencies. Works standalone or as part of the Litro framework.","directories":{},"_nodeVersion":"20.20.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.1.5_1774028082237_0.28867279204598995","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@beatzball/litro-router","version":"0.1.6","keywords":["router","client-side-routing","urlpattern","web-components","lit","lit-element","spa","history-api","custom-elements","zero-dependencies","typescript"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.1.6","maintainers":[{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"a8776d9f2caf35c664b2e4fc633651adedbfdc26","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.1.6.tgz","fileCount":17,"integrity":"sha512-GooWfXjXOwMv4/NfEVUoWXJ7EnEwnYA9/Ixin3soyvCu0Ufkg0x//KS76COzMMydLFZBxxCGJMp+8nV0kcCYlQ==","signatures":[{"sig":"MEUCIQDUP9mHODFiyrw+jJzyoS/Qgi+UtFXjMltMCUfjeU118QIgU3o86lskPQHDf0UTUlia144gZQ0ih48xb/USnTmptt8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152888},"type":"module","_from":"file:beatzball-litro-router-0.1.6.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"},"_resolved":"/tmp/b982d9708fdb16ad68014a0c037dafdf/beatzball-litro-router-0.1.6.tgz","_integrity":"sha512-GooWfXjXOwMv4/NfEVUoWXJ7EnEwnYA9/Ixin3soyvCu0Ufkg0x//KS76COzMMydLFZBxxCGJMp+8nV0kcCYlQ==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"10.8.2","description":"Client-side router for Lit web components. Built on the native URLPattern API. Zero dependencies. Works standalone or as part of the Litro framework.","directories":{},"_nodeVersion":"20.20.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.1.6_1774932555363_0.45622111142689636","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@beatzball/litro-router","version":"0.1.7","keywords":["router","client-side-routing","urlpattern","web-components","lit","lit-element","spa","history-api","custom-elements","zero-dependencies","typescript"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.1.7","maintainers":[{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"0d381a3073b8f5f31d47eb32e144b70b9cc111e8","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.1.7.tgz","fileCount":17,"integrity":"sha512-gAdTEjvRivuvXUNTCR4XcQ4EFQ9f3cT59ofH5WJYFZwLmYF+qrVHUi5LpQiETKjiPPUDuf9xVte9eCH7F2F5lg==","signatures":[{"sig":"MEQCIAQMG4a4rePJBku+rnJUx4bdfo47Sc7FUnuAUGTxSszVAiAlfzICEDeX3bdPdEjmdAXXeGQZqJl6AQujC7b9jr441g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158822},"type":"module","_from":"file:beatzball-litro-router-0.1.7.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"},"_resolved":"/tmp/f798353b8dc27bde23c7829933a6eb78/beatzball-litro-router-0.1.7.tgz","_integrity":"sha512-gAdTEjvRivuvXUNTCR4XcQ4EFQ9f3cT59ofH5WJYFZwLmYF+qrVHUi5LpQiETKjiPPUDuf9xVte9eCH7F2F5lg==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"10.8.2","description":"Client-side router for Lit web components. Built on the native URLPattern API. Zero dependencies. Works standalone or as part of the Litro framework.","directories":{},"_nodeVersion":"20.20.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.1.7_1775110768441_0.401442005933504","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@beatzball/litro-router","version":"0.1.8","keywords":["router","client-side-routing","urlpattern","web-components","lit","lit-element","spa","history-api","custom-elements","zero-dependencies","typescript"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.1.8","maintainers":[{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"b3891b6308884e114244c44228330f7fe940fe0f","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.1.8.tgz","fileCount":17,"integrity":"sha512-ferSE6/VlKuCYqTifdz1nH+B3nUtqaav8cgTbmLmSmrRRx5Jzqmi5MuDtVYfa2aA5cPruNUFD7fYr5q30n90xg==","signatures":[{"sig":"MEUCIQD7TVqQDz5oeJo6d9xsh+dik0sSCojkdiGMAo4OiRp95wIgRe0Fiqo63yOyoLh0GQnUHJL3sKYZqQdkWNR3qW5oUvI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169509},"type":"module","_from":"file:beatzball-litro-router-0.1.8.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"},"_resolved":"/tmp/1c8f6c0277c51a5051685fbf09770776/beatzball-litro-router-0.1.8.tgz","_integrity":"sha512-ferSE6/VlKuCYqTifdz1nH+B3nUtqaav8cgTbmLmSmrRRx5Jzqmi5MuDtVYfa2aA5cPruNUFD7fYr5q30n90xg==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"10.8.2","description":"Client-side router for Lit web components. Built on the native URLPattern API. Zero dependencies. Works standalone or as part of the Litro framework.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.1.8_1776057777351_0.8622288950129711","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@beatzball/litro-router","version":"0.1.9","keywords":["router","client-side-routing","urlpattern","web-components","custom-elements","lit","lit-element","fast-element","elena","spa","history-api","zero-dependencies","typescript"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.1.9","maintainers":[{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"8b5adb5a74871fde34fa70951494696208ee1c44","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.1.9.tgz","fileCount":17,"integrity":"sha512-fJK3Fl+NR2WFipUBFAgQjXASNi7cMK/UeJ/O8IemylAn1LC8tdv+Y6DqDIH3gUvQQjQ7/Jq6VQbCojYIvmyzYA==","signatures":[{"sig":"MEQCICUzWGfThwkGK1zjypTm+9kHmaDmUfJQgbXdl55ApNrwAiBw6+7riFwgU33rgAVLP3O23J/zBka04DzGoshqmmyKEg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beatzball%2flitro-router@0.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":172126},"type":"module","_from":"file:beatzball-litro-router-0.1.9.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d81ef2aa-21f8-42fb-ab7e-242c46ec6f90"}},"_resolved":"/tmp/0639f0e743d324ecbde4100c79382dca/beatzball-litro-router-0.1.9.tgz","_integrity":"sha512-fJK3Fl+NR2WFipUBFAgQjXASNi7cMK/UeJ/O8IemylAn1LC8tdv+Y6DqDIH3gUvQQjQ7/Jq6VQbCojYIvmyzYA==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"11.18.0","description":"Framework-agnostic client-side router for web components — works with Lit, FAST, Elena, or plain custom elements. Built on the native URLPattern API. Zero dependencies. Works standalone or as part of the Litro framework.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.1.9_1783409930586_0.09714829752951815","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@beatzball/litro-router","version":"0.2.0","keywords":["router","client-side-routing","urlpattern","web-components","custom-elements","lit","lit-element","fast-element","elena","spa","history-api","zero-dependencies","typescript"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.2.0","maintainers":[{"name":"imzaid","email":"npm@imzaid.com"},{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"389c00fd05f6b51183aaae0c9f264d91291df378","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.2.0.tgz","fileCount":17,"integrity":"sha512-JlicsEFilmGh3Cu11TB5JzLmLpiRMY1N1EOBR0NbZCFwG+Xqp998smmxz29+1tP1WpApnHsiEmeY0HkwQsp1fQ==","signatures":[{"sig":"MEUCIQDxMQXVZkiR8IJIzX7lIoYbEKeqWFUyufhJJvxoxf2mBQIgesB22JgGeh/nZGHEc6J0oPWtVcb1iOZA54l0oi9X5/s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beatzball%2flitro-router@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":177661},"type":"module","_from":"file:beatzball-litro-router-0.2.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d81ef2aa-21f8-42fb-ab7e-242c46ec6f90"}},"_resolved":"/tmp/177d5921780f478622f44e126bbf9b5d/beatzball-litro-router-0.2.0.tgz","_integrity":"sha512-JlicsEFilmGh3Cu11TB5JzLmLpiRMY1N1EOBR0NbZCFwG+Xqp998smmxz29+1tP1WpApnHsiEmeY0HkwQsp1fQ==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"11.18.0","description":"Framework-agnostic client-side router for web components — works with Lit, FAST, Elena, or plain custom elements. Built on the native URLPattern API. Zero dependencies. Works standalone or as part of the Litro framework.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.2.0_1785102382137_0.7190819021991401","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@beatzball/litro-router","version":"0.2.1","keywords":["router","client-side-routing","urlpattern","web-components","custom-elements","lit","lit-element","fast-element","elena","spa","history-api","zero-dependencies","typescript"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.2.1","maintainers":[{"name":"imzaid","email":"npm@imzaid.com"},{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"3366a168811ba4286e4a5f378a90e94d82edb266","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.2.1.tgz","fileCount":17,"integrity":"sha512-wpOa+cZlM1XXAJZJYgNzFFIKGm0I7rOaWUhSslHn4i4V9lF8ozvySuHXy9I1jW5yC+KGpeukyEDypVdv5g9EAg==","signatures":[{"sig":"MEQCIEBj99CJu58nAy5qPiZjQceu3iIq7dThGH26J2my8cMrAiBrzOahLe3US5q7PAFMSBs4R7h2AA1EkORgDIAzCuqb2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDBIWYWBLlVqALbnvGX6MuTF+rPRNseVjHwQHuvSMES2QIhAOV+b0u160cpAxFgC9jJtSMyKhJPo16ZGcX3916lH46z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beatzball%2flitro-router@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":178022},"type":"module","_from":"file:beatzball-litro-router-0.2.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d81ef2aa-21f8-42fb-ab7e-242c46ec6f90"}},"_resolved":"/tmp/f5e5512ab7da556ef1e7a2505083bfe5/beatzball-litro-router-0.2.1.tgz","_integrity":"sha512-wpOa+cZlM1XXAJZJYgNzFFIKGm0I7rOaWUhSslHn4i4V9lF8ozvySuHXy9I1jW5yC+KGpeukyEDypVdv5g9EAg==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"11.19.0","description":"Framework-agnostic client-side router for web components — works with Lit, FAST, Elena, or plain custom elements. Built on the native URLPattern API. Zero dependencies. Works standalone or as part of the Litro framework.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.2.1_1787418640501_0.4014586178173727","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@beatzball/litro-router","version":"0.3.0","keywords":["router","client-side-routing","urlpattern","web-components","custom-elements","lit","lit-element","fast-element","elena","spa","history-api","zero-dependencies","typescript"],"license":"Apache-2.0","_id":"@beatzball/litro-router@0.3.0","maintainers":[{"name":"imzaid","email":"npm@imzaid.com"},{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"homepage":"https://github.com/beatzball/litro#readme","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"1cf30296e1b9e9f59afaec046bcbd1b8c0947dea","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.3.0.tgz","fileCount":22,"integrity":"sha512-r0fNQKwSZ61uM+aOmuqUXD78oYTTUAD3Hon8UVM8drSI9DhMV7kQJTyl9gAAmm+6S6rV/9N75thKluYaWGaz/w==","signatures":[{"sig":"MEYCIQDM3rz8MlWTGF8SUEFnaxtnK7Ff0W/XK51cJ7Ve5BMaJAIhAL48jLLdw0C2zTcJ511P2tSwRo51XvafVs10eIs2ew6f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCFLOGrifwRxWTOJO8kRfSFpVNWk9Rx14y3KXdw5eVcbQIgZxUXHyKnoocFaqWUSAUH6MudS8OiCoJThnzbx9K/o0w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beatzball%2flitro-router@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":203067},"type":"module","_from":"file:beatzball-litro-router-0.3.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./path":{"types":"./dist/path.d.ts","import":"./dist/path.js"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d81ef2aa-21f8-42fb-ab7e-242c46ec6f90"}},"_resolved":"/tmp/7bdcca7e5a8af626cc48aa8da9499e20/beatzball-litro-router-0.3.0.tgz","_integrity":"sha512-r0fNQKwSZ61uM+aOmuqUXD78oYTTUAD3Hon8UVM8drSI9DhMV7kQJTyl9gAAmm+6S6rV/9N75thKluYaWGaz/w==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"11.20.0","description":"Framework-agnostic client-side router for web components — works with Lit, FAST, Elena, or plain custom elements. Built on the native URLPattern API. Zero dependencies. Works standalone or as part of the Litro framework.","directories":{},"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/litro-router_0.3.0_1790407490881_0.5239979756765059","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"_id":"@beatzball/litro-router@0.3.1","bugs":{"url":"https://github.com/beatzball/litro/issues"},"dist":{"shasum":"75c23efb7f80201111a384604d570abc51f814a9","tarball":"https://registry.npmjs.org/@beatzball/litro-router/-/litro-router-0.3.1.tgz","fileCount":22,"integrity":"sha512-2UJIhVU+3oJxFCxO3lbJTlBzHSdS6IzvOnjnXvn5tLYe6vAaratpujBrNO0ZRMvhqXgA2RJHjw5ZrfbfZ9tpbA==","signatures":[{"sig":"MEQCIBoRozQlBVp3kHpGH80ZzW8cL3LlzA3Ww+cNN3YqrH91AiBKMGn+ACTMtx9LRbpBpDBSuL+bYNbtJ0b1/89FcQBDmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC1edIsmmaS8mUilr9LwwvXpCfV50FqFKahYqe+eT59XAIhAO+0aZs4CkXeaUblWzM1xJpqV0/A3iFCpOJEDuxgNzys"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beatzball%2flitro-router@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":243817},"name":"@beatzball/litro-router","type":"module","_from":"file:beatzball-litro-router-0.3.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./path":{"types":"./dist/path.d.ts","import":"./dist/path.js"}},"license":"Apache-2.0","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","test:watch":"vitest"},"version":"0.3.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d81ef2aa-21f8-42fb-ab7e-242c46ec6f90"}},"homepage":"https://github.com/beatzball/litro#readme","keywords":["router","client-side-routing","urlpattern","web-components","custom-elements","lit","lit-element","fast-element","elena","spa","history-api","zero-dependencies","typescript"],"_resolved":"/tmp/df67c7d66cd8cb1794b2af60c282fed4/beatzball-litro-router-0.3.1.tgz","_integrity":"sha512-2UJIhVU+3oJxFCxO3lbJTlBzHSdS6IzvOnjnXvn5tLYe6vAaratpujBrNO0ZRMvhqXgA2RJHjw5ZrfbfZ9tpbA==","repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"_npmVersion":"11.20.0","description":"Framework-agnostic client-side router for web components — works with Lit, FAST, Elena, or plain custom elements. Built on the native URLPattern API. Zero dependencies. Works standalone or as part of the Litro framework.","directories":{},"maintainers":[{"name":"imzaid","email":"npm@imzaid.com"},{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","vitest":"^2.1.8","typescript":"^5.7.3"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/litro-router_0.3.1_1790460831381_0.46090290876270545"}}},"time":{"created":"2026-03-09T07:38:19.975Z","modified":"2026-09-26T22:13:51.805Z","0.1.0":"2026-03-09T07:38:20.228Z","0.1.1":"2026-03-09T08:20:06.499Z","0.1.2":"2026-03-09T22:56:34.240Z","0.1.3":"2026-03-10T23:08:28.252Z","0.1.4":"2026-03-12T13:53:35.563Z","0.1.5":"2026-03-20T17:34:42.387Z","0.1.6":"2026-03-31T04:49:15.500Z","0.1.7":"2026-04-02T06:19:28.591Z","0.1.8":"2026-04-13T05:22:57.547Z","0.1.9":"2026-07-07T07:38:50.721Z","0.2.0":"2026-07-26T21:46:22.266Z","0.2.1":"2026-08-22T17:10:40.658Z","0.3.0":"2026-09-26T07:24:50.972Z","0.3.1":"2026-09-26T22:13:51.473Z"},"bugs":{"url":"https://github.com/beatzball/litro/issues"},"license":"Apache-2.0","homepage":"https://github.com/beatzball/litro#readme","keywords":["router","client-side-routing","urlpattern","web-components","custom-elements","lit","lit-element","fast-element","elena","spa","history-api","zero-dependencies","typescript"],"repository":{"url":"git+https://github.com/beatzball/litro.git","type":"git","directory":"packages/litro-router"},"description":"Framework-agnostic client-side router for web components — works with Lit, FAST, Elena, or plain custom elements. Built on the native URLPattern API. Zero dependencies. Works standalone or as part of the Litro framework.","maintainers":[{"name":"imzaid","email":"npm@imzaid.com"},{"name":"beatzballnpm","email":"beatzballnpm@imzaid.com"}],"readme":"# litro-router\n\nZero-dependency client-side router for web components, built on the native [URLPattern API](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern).\n\n- **Zero dependencies** — browser-native APIs only, nothing to bundle\n- **URLPattern matching** — `:slug`, `:slug?`, and `/:all*` catch-alls\n- **Explicit SPA navigation** — use `LitroRouter.go()` or `<litro-link>` for pushState navigation; plain `<a>` tags do full page reloads (browser default)\n- **SSR safe** — no module-eval side effects; can be dynamically imported, never crashes Node.js\n- **Framework agnostic** — works with any web component library (Lit, FAST, plain `HTMLElement`, etc.)\n\nThis package is also built into the [@beatzball/litro](https://github.com/beatzball/litro) fullstack framework — if you are using Litro you already have it and do not need to install it separately.\n\n---\n\n## Browser requirements\n\n`URLPattern` is [Baseline Newly Available](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern#browser_compatibility) as of September 2025 (Chrome 95+, Edge 95+, Firefox 119+, Safari 18.2+). A built-in fallback activates automatically for browsers that lack the native API (e.g. Safari 16.4–18.1 / iOS < 18.2), so no external polyfill is needed.\n\n---\n\n## Installation\n\n```bash\nnpm install @beatzball/litro-router\n# or\npnpm add @beatzball/litro-router\n```\n\n---\n\n## Quick start\n\n```typescript\nimport { LitroRouter } from '@beatzball/litro-router';\n\n// 1. Provide an outlet element — the router swaps its children on navigation\nconst outlet = document.querySelector('#outlet')!;\nconst router = new LitroRouter(outlet);\n\n// 2. Define routes — component must be a registered custom element tag name\nrouter.setRoutes([\n  {\n    path: '/',\n    component: 'page-home',\n    action: () => import('./pages/home.js'),   // lazy-load before mount\n  },\n  {\n    path: '/blog/:slug',\n    component: 'page-blog-post',\n    action: () => import('./pages/blog-post.js'),\n  },\n  {\n    path: '/:all(.*)*',                        // catch-all — must be last\n    component: 'page-not-found',\n    action: () => import('./pages/not-found.js'),\n  },\n]);\n\n// 3. Programmatic navigation\ndocument.querySelector('#go-home')!.addEventListener('click', () => {\n  LitroRouter.go('/');\n});\n```\n\nThe router immediately resolves the current `location.pathname` when `setRoutes()` is called. From then on it responds to `popstate` events (back/forward button). For in-app SPA navigation use `<litro-link>` (provided by the Litro framework) or call `LitroRouter.go()` directly — plain `<a>` tags perform full page reloads as usual.\n\n---\n\n## Route path syntax\n\nPaths follow h3/path-to-regexp conventions:\n\n| Pattern | Matches | Example match |\n|---|---|---|\n| `/` | Exactly `/` | `/` |\n| `/about` | Exactly `/about` | `/about` |\n| `/blog/:slug` | Named parameter | `/blog/hello-world` → `{ slug: 'hello-world' }` |\n| `/docs/:section?` | Optional parameter | `/docs/` or `/docs/api` |\n| `/:all(.*)*` | Catch-all (greedy) | `/any/depth/path` → `{ all: 'any/depth/path' }` |\n\n---\n\n## API\n\n### `new LitroRouter(outlet: HTMLElement)`\n\nCreates a router instance that renders matched page components into `outlet`.\n\nThe outlet element should be an empty container already in the document. After `setRoutes()` is called the router owns the outlet's children — do not manipulate them directly.\n\n### `router.setRoutes(routes: Route[])`\n\nConfigures the route table. Also attaches a `popstate` listener and triggers an initial resolution for the current URL. Call this once after the outlet is in the DOM.\n\nRoutes without a `component` are skipped during resolution (useful for redirect-only routes using `action`).\n\n**Note**: `LitroRouter` does **not** intercept plain `<a>` clicks. Plain anchors perform full page reloads (browser default). For SPA navigation use `<litro-link>` (provided by the Litro framework) or call `LitroRouter.go()` directly.\n\n### `LitroRouter.go(path: string)`\n\nStatic method. Pushes `path` onto the history stack and dispatches a `popstate` event, triggering the router to resolve the new URL.\n\n```typescript\nLitroRouter.go('/blog/hello-world');\nLitroRouter.go('/search?q=lit');    // search string preserved\n```\n\n### `Route`\n\n```typescript\ninterface Route {\n  /** Path pattern — see \"Route path syntax\" above. */\n  path: string;\n  /** Custom element tag name to render (must be registered via customElements.define). */\n  component?: string;\n  /** Optional async callback run before the component is mounted. */\n  action?: () => Promise<void> | void;\n}\n```\n\n### `LitroLocation`\n\nThe location object passed to `onBeforeEnter` on the page element (if the method exists):\n\n```typescript\ninterface LitroLocation {\n  pathname: string;                            // e.g. '/blog/hello-world'\n  params: Record<string, string | undefined>;  // e.g. { slug: 'hello-world' }\n  search: string;                              // e.g. '?page=2' or ''\n  hash: string;                                // e.g. '#section' or ''\n}\n```\n\n### `h3ToURLPattern(path: string): string`\n\nConverts h3/path-to-regexp catch-all syntax to URLPattern syntax. Called automatically by `setRoutes()` — you do not need to call this yourself unless you are building tooling on top of the router.\n\n```typescript\nh3ToURLPattern('/:all(.*)*')  // → '/:all*'\nh3ToURLPattern('/blog/:slug') // → '/blog/:slug' (unchanged)\n```\n\n---\n\n## Page lifecycle hook\n\nIf the element that the router mounts has an `onBeforeEnter` method, the router calls it with the current `LitroLocation` **before** appending the element to the outlet. This is the correct place to fetch data for the new route.\n\n```typescript\nimport { LitElement, html } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\nimport type { LitroLocation } from '@beatzball/litro-router';\n\n@customElement('page-blog-post')\nclass BlogPostPage extends LitElement {\n  @state() post?: { title: string; body: string };\n\n  async onBeforeEnter(location: LitroLocation) {\n    const res = await fetch(`/api/posts/${location.params.slug}`);\n    this.post = await res.json();\n  }\n\n  render() {\n    return html`<article>\n      <h1>${this.post?.title}</h1>\n      <p>${this.post?.body}</p>\n    </article>`;\n  }\n}\n```\n\n---\n\n## SPA navigation\n\n`LitroRouter` does **not** intercept plain `<a>` clicks. Plain anchors always perform full page reloads — this is the correct browser default and the right behavior for SSG sites, where each page load fetches a fresh pre-rendered HTML file with the correct `__litro_data__` script tag injected by the server.\n\nFor explicit SPA navigation use one of the following:\n\n- **`<litro-link href=\"...\">`** — a custom element provided by the `litro` framework package. It wraps a standard `<a>` and calls `LitroRouter.go()` on click, intercepting only same-origin, left-click, no-modifier clicks. Falls back to a normal full-page navigation if JavaScript is disabled.\n- **`LitroRouter.go(path)`** — call directly from event handlers or programmatic navigation.\n\n---\n\n## SSR usage\n\n`litro-router` accesses `window`, `history`, `document`, and `location` at **call time** (inside methods), not at module evaluation time. This means it is safe to import the module types in server code:\n\n```typescript\nimport type { Route, LitroLocation } from '@beatzball/litro-router'; // type-only: safe on server\n```\n\nThe `LitroRouter` class itself must only be instantiated in the browser. The recommended pattern is a dynamic import inside a client-only lifecycle hook:\n\n```typescript\noverride async firstUpdated() {\n  const { LitroRouter } = await import('@beatzball/litro-router');\n  const router = new LitroRouter(this);\n  router.setRoutes(this.routes);\n}\n```\n\n---\n\n## TypeScript\n\n`URLPattern` is not yet in TypeScript's `lib.dom.d.ts`. `litro-router` ships minimal inline ambient declarations so your project does not need `lib` changes or a separate `@types` package.\n\n---\n\n## License\n\nApache License 2.0 — Copyright 2026 beatzball. See [LICENSE](../../LICENSE) for the full text.\n","readmeFilename":"README.md"}