@bquery/bquery 1.6.0 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +192 -18
- package/dist/a11y/announce.d.ts +43 -0
- package/dist/a11y/announce.d.ts.map +1 -0
- package/dist/a11y/audit.d.ts +42 -0
- package/dist/a11y/audit.d.ts.map +1 -0
- package/dist/a11y/index.d.ts +53 -0
- package/dist/a11y/index.d.ts.map +1 -0
- package/dist/a11y/media-preferences.d.ts +77 -0
- package/dist/a11y/media-preferences.d.ts.map +1 -0
- package/dist/a11y/roving-tab-index.d.ts +38 -0
- package/dist/a11y/roving-tab-index.d.ts.map +1 -0
- package/dist/a11y/skip-link.d.ts +37 -0
- package/dist/a11y/skip-link.d.ts.map +1 -0
- package/dist/a11y/trap-focus.d.ts +49 -0
- package/dist/a11y/trap-focus.d.ts.map +1 -0
- package/dist/a11y/types.d.ts +152 -0
- package/dist/a11y/types.d.ts.map +1 -0
- package/dist/a11y-DVBCy09c.js +421 -0
- package/dist/a11y-DVBCy09c.js.map +1 -0
- package/dist/a11y.es.mjs +14 -0
- package/dist/component/component.d.ts.map +1 -1
- package/dist/component/html.d.ts.map +1 -1
- package/dist/component/index.d.ts +2 -1
- package/dist/component/index.d.ts.map +1 -1
- package/dist/component/library.d.ts.map +1 -1
- package/dist/component/scope.d.ts +138 -0
- package/dist/component/scope.d.ts.map +1 -0
- package/dist/component/types.d.ts +53 -1
- package/dist/component/types.d.ts.map +1 -1
- package/dist/component-L3-JfOFz.js +684 -0
- package/dist/component-L3-JfOFz.js.map +1 -0
- package/dist/component.es.mjs +9 -6
- package/dist/{config-DRmZZno3.js → config-DhT9auRm.js} +4 -4
- package/dist/{config-DRmZZno3.js.map → config-DhT9auRm.js.map} +1 -1
- package/dist/constraints-D5RHQLmP.js +100 -0
- package/dist/constraints-D5RHQLmP.js.map +1 -0
- package/dist/core/collection.d.ts +134 -0
- package/dist/core/collection.d.ts.map +1 -1
- package/dist/core/element.d.ts +120 -0
- package/dist/core/element.d.ts.map +1 -1
- package/dist/core/env.d.ts +18 -0
- package/dist/core/env.d.ts.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/shared.d.ts +14 -0
- package/dist/core/shared.d.ts.map +1 -1
- package/dist/core/utils/index.d.ts +52 -41
- package/dist/core/utils/index.d.ts.map +1 -1
- package/dist/core-DdtZHzsS.js +168 -0
- package/dist/core-DdtZHzsS.js.map +1 -0
- package/dist/{core-CCEabVHl.js → core-EMYSLzaT.js} +293 -194
- package/dist/core-EMYSLzaT.js.map +1 -0
- package/dist/core.es.mjs +48 -46
- package/dist/custom-directives-Dr4C5lVV.js +9 -0
- package/dist/custom-directives-Dr4C5lVV.js.map +1 -0
- package/dist/devtools/devtools.d.ts +212 -0
- package/dist/devtools/devtools.d.ts.map +1 -0
- package/dist/devtools/index.d.ts +20 -0
- package/dist/devtools/index.d.ts.map +1 -0
- package/dist/devtools/types.d.ts +69 -0
- package/dist/devtools/types.d.ts.map +1 -0
- package/dist/devtools-BhB2iDPT.js +122 -0
- package/dist/devtools-BhB2iDPT.js.map +1 -0
- package/dist/devtools.es.mjs +19 -0
- package/dist/dnd/draggable.d.ts +51 -0
- package/dist/dnd/draggable.d.ts.map +1 -0
- package/dist/dnd/droppable.d.ts +38 -0
- package/dist/dnd/droppable.d.ts.map +1 -0
- package/dist/dnd/index.d.ts +47 -0
- package/dist/dnd/index.d.ts.map +1 -0
- package/dist/dnd/sortable.d.ts +43 -0
- package/dist/dnd/sortable.d.ts.map +1 -0
- package/dist/dnd/types.d.ts +250 -0
- package/dist/dnd/types.d.ts.map +1 -0
- package/dist/dnd-NwZBYh4l.js +244 -0
- package/dist/dnd-NwZBYh4l.js.map +1 -0
- package/dist/dnd.es.mjs +6 -0
- package/dist/env-CTdvLaH2.js +19 -0
- package/dist/env-CTdvLaH2.js.map +1 -0
- package/dist/forms/create-form.d.ts +49 -0
- package/dist/forms/create-form.d.ts.map +1 -0
- package/dist/forms/index.d.ts +40 -0
- package/dist/forms/index.d.ts.map +1 -0
- package/dist/forms/types.d.ts +185 -0
- package/dist/forms/types.d.ts.map +1 -0
- package/dist/forms/use-field.d.ts +34 -0
- package/dist/forms/use-field.d.ts.map +1 -0
- package/dist/forms/validators.d.ts +204 -0
- package/dist/forms/validators.d.ts.map +1 -0
- package/dist/forms-UcRHsYxC.js +227 -0
- package/dist/forms-UcRHsYxC.js.map +1 -0
- package/dist/forms.es.mjs +16 -0
- package/dist/full.d.ts +30 -11
- package/dist/full.d.ts.map +1 -1
- package/dist/full.es.mjs +209 -93
- package/dist/full.iife.js +47 -31
- package/dist/full.iife.js.map +1 -1
- package/dist/full.umd.js +47 -31
- package/dist/full.umd.js.map +1 -1
- package/dist/function-Cybd57JV.js +33 -0
- package/dist/function-Cybd57JV.js.map +1 -0
- package/dist/i18n/formatting.d.ts +40 -0
- package/dist/i18n/formatting.d.ts.map +1 -0
- package/dist/i18n/i18n.d.ts +48 -0
- package/dist/i18n/i18n.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +57 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/translate.d.ts +83 -0
- package/dist/i18n/translate.d.ts.map +1 -0
- package/dist/i18n/types.d.ts +156 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n-kuF6Ekj6.js +89 -0
- package/dist/i18n-kuF6Ekj6.js.map +1 -0
- package/dist/i18n.es.mjs +6 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.mjs +257 -143
- package/dist/media/battery.d.ts +35 -0
- package/dist/media/battery.d.ts.map +1 -0
- package/dist/media/breakpoints.d.ts +51 -0
- package/dist/media/breakpoints.d.ts.map +1 -0
- package/dist/media/clipboard.d.ts +30 -0
- package/dist/media/clipboard.d.ts.map +1 -0
- package/dist/media/device-sensors.d.ts +54 -0
- package/dist/media/device-sensors.d.ts.map +1 -0
- package/dist/media/geolocation.d.ts +38 -0
- package/dist/media/geolocation.d.ts.map +1 -0
- package/dist/media/index.d.ts +42 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/media-query.d.ts +36 -0
- package/dist/media/media-query.d.ts.map +1 -0
- package/dist/media/network.d.ts +35 -0
- package/dist/media/network.d.ts.map +1 -0
- package/dist/media/types.d.ts +173 -0
- package/dist/media/types.d.ts.map +1 -0
- package/dist/media/viewport.d.ts +32 -0
- package/dist/media/viewport.d.ts.map +1 -0
- package/dist/media-i-fB5WxI.js +340 -0
- package/dist/media-i-fB5WxI.js.map +1 -0
- package/dist/media.es.mjs +12 -0
- package/dist/motion/index.d.ts +7 -3
- package/dist/motion/index.d.ts.map +1 -1
- package/dist/motion/morph.d.ts +27 -0
- package/dist/motion/morph.d.ts.map +1 -0
- package/dist/motion/parallax.d.ts +30 -0
- package/dist/motion/parallax.d.ts.map +1 -0
- package/dist/motion/reduced-motion.d.ts +36 -3
- package/dist/motion/reduced-motion.d.ts.map +1 -1
- package/dist/motion/types.d.ts +58 -0
- package/dist/motion/types.d.ts.map +1 -1
- package/dist/motion/typewriter.d.ts +31 -0
- package/dist/motion/typewriter.d.ts.map +1 -0
- package/dist/motion-BJsAuULb.js +530 -0
- package/dist/motion-BJsAuULb.js.map +1 -0
- package/dist/motion.es.mjs +27 -23
- package/dist/{view-C70lA3vf.js → mount-B4Y8bk8Z.js} +166 -160
- package/dist/mount-B4Y8bk8Z.js.map +1 -0
- package/dist/{object-qGpWr6-J.js → object-BCk-1c8T.js} +5 -4
- package/dist/{object-qGpWr6-J.js.map → object-BCk-1c8T.js.map} +1 -1
- package/dist/{platform-Dr9b6fsq.js → platform-Dw2gE3zI.js} +21 -22
- package/dist/{platform-Dr9b6fsq.js.map → platform-Dw2gE3zI.js.map} +1 -1
- package/dist/platform.es.mjs +2 -2
- package/dist/plugin/index.d.ts +22 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/registry.d.ts +108 -0
- package/dist/plugin/registry.d.ts.map +1 -0
- package/dist/plugin/types.d.ts +110 -0
- package/dist/plugin/types.d.ts.map +1 -0
- package/dist/plugin-C2WuC8SF.js +66 -0
- package/dist/plugin-C2WuC8SF.js.map +1 -0
- package/dist/plugin.es.mjs +9 -0
- package/dist/reactive/async-data.d.ts +28 -3
- package/dist/reactive/async-data.d.ts.map +1 -1
- package/dist/reactive/computed.d.ts +10 -0
- package/dist/reactive/computed.d.ts.map +1 -1
- package/dist/reactive/effect.d.ts +3 -0
- package/dist/reactive/effect.d.ts.map +1 -1
- package/dist/reactive/http.d.ts +194 -0
- package/dist/reactive/http.d.ts.map +1 -0
- package/dist/reactive/index.d.ts +2 -2
- package/dist/reactive/index.d.ts.map +1 -1
- package/dist/reactive/pagination.d.ts +126 -0
- package/dist/reactive/pagination.d.ts.map +1 -0
- package/dist/reactive/polling.d.ts +55 -0
- package/dist/reactive/polling.d.ts.map +1 -0
- package/dist/reactive/readonly.d.ts +20 -1
- package/dist/reactive/readonly.d.ts.map +1 -1
- package/dist/reactive/rest.d.ts +293 -0
- package/dist/reactive/rest.d.ts.map +1 -0
- package/dist/reactive/scope.d.ts +140 -0
- package/dist/reactive/scope.d.ts.map +1 -0
- package/dist/reactive/signal.d.ts +16 -2
- package/dist/reactive/signal.d.ts.map +1 -1
- package/dist/reactive/to-value.d.ts +57 -0
- package/dist/reactive/to-value.d.ts.map +1 -0
- package/dist/reactive/websocket.d.ts +285 -0
- package/dist/reactive/websocket.d.ts.map +1 -0
- package/dist/reactive-DwkhUJfP.js +1148 -0
- package/dist/reactive-DwkhUJfP.js.map +1 -0
- package/dist/reactive.es.mjs +38 -20
- package/dist/registry-B08iilIh.js +26 -0
- package/dist/registry-B08iilIh.js.map +1 -0
- package/dist/router/bq-link.d.ts +112 -0
- package/dist/router/bq-link.d.ts.map +1 -0
- package/dist/router/constraints.d.ts +9 -0
- package/dist/router/constraints.d.ts.map +1 -0
- package/dist/router/index.d.ts +15 -7
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/match.d.ts +0 -1
- package/dist/router/match.d.ts.map +1 -1
- package/dist/router/path-pattern.d.ts +14 -0
- package/dist/router/path-pattern.d.ts.map +1 -0
- package/dist/router/query.d.ts.map +1 -1
- package/dist/router/router.d.ts +3 -1
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/state.d.ts +25 -2
- package/dist/router/state.d.ts.map +1 -1
- package/dist/router/types.d.ts +48 -4
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/use-route.d.ts +50 -0
- package/dist/router/use-route.d.ts.map +1 -0
- package/dist/router/utils.d.ts +3 -0
- package/dist/router/utils.d.ts.map +1 -1
- package/dist/router-CQikC9Ed.js +492 -0
- package/dist/router-CQikC9Ed.js.map +1 -0
- package/dist/router.es.mjs +14 -10
- package/dist/{sanitize-Bs2dkMby.js → sanitize-B1V4JswB.js} +2 -1
- package/dist/{sanitize-Bs2dkMby.js.map → sanitize-B1V4JswB.js.map} +1 -1
- package/dist/security/index.d.ts +2 -2
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security.es.mjs +1 -1
- package/dist/ssr/hydrate.d.ts +65 -0
- package/dist/ssr/hydrate.d.ts.map +1 -0
- package/dist/ssr/index.d.ts +59 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/render.d.ts +62 -0
- package/dist/ssr/render.d.ts.map +1 -0
- package/dist/ssr/serialize.d.ts +118 -0
- package/dist/ssr/serialize.d.ts.map +1 -0
- package/dist/ssr/types.d.ts +70 -0
- package/dist/ssr/types.d.ts.map +1 -0
- package/dist/ssr-_dAcGdzu.js +248 -0
- package/dist/ssr-_dAcGdzu.js.map +1 -0
- package/dist/ssr.es.mjs +9 -0
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/persisted.d.ts +38 -4
- package/dist/store/persisted.d.ts.map +1 -1
- package/dist/store/types.d.ts +138 -1
- package/dist/store/types.d.ts.map +1 -1
- package/dist/store/utils.d.ts +2 -2
- package/dist/store/utils.d.ts.map +1 -1
- package/dist/store-Cb3gPRve.js +338 -0
- package/dist/store-Cb3gPRve.js.map +1 -0
- package/dist/store.es.mjs +11 -10
- package/dist/storybook/index.d.ts.map +1 -1
- package/dist/storybook.es.mjs +1 -1
- package/dist/storybook.es.mjs.map +1 -1
- package/dist/testing/index.d.ts +23 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/testing.d.ts +156 -0
- package/dist/testing/testing.d.ts.map +1 -0
- package/dist/testing/types.d.ts +134 -0
- package/dist/testing/types.d.ts.map +1 -0
- package/dist/testing-C5Sjfsna.js +224 -0
- package/dist/testing-C5Sjfsna.js.map +1 -0
- package/dist/testing.es.mjs +9 -0
- package/dist/type-guards-BMX2c0LP.js +44 -0
- package/dist/type-guards-BMX2c0LP.js.map +1 -0
- package/dist/untrack-D0fnO5k2.js +36 -0
- package/dist/untrack-D0fnO5k2.js.map +1 -0
- package/dist/view/custom-directives.d.ts +20 -0
- package/dist/view/custom-directives.d.ts.map +1 -0
- package/dist/view/evaluate.d.ts.map +1 -1
- package/dist/view/process.d.ts.map +1 -1
- package/dist/view.es.mjs +9 -9
- package/package.json +47 -11
- package/src/a11y/announce.ts +131 -0
- package/src/a11y/audit.ts +314 -0
- package/src/a11y/index.ts +68 -0
- package/src/a11y/media-preferences.ts +255 -0
- package/src/a11y/roving-tab-index.ts +164 -0
- package/src/a11y/skip-link.ts +255 -0
- package/src/a11y/trap-focus.ts +184 -0
- package/src/a11y/types.ts +183 -0
- package/src/component/component.ts +599 -524
- package/src/component/html.ts +153 -153
- package/src/component/index.ts +52 -50
- package/src/component/library.ts +540 -518
- package/src/component/scope.ts +212 -0
- package/src/component/types.ts +310 -256
- package/src/core/collection.ts +249 -1
- package/src/core/element.ts +252 -11
- package/src/core/env.ts +60 -0
- package/src/core/index.ts +1 -0
- package/src/core/shared.ts +64 -0
- package/src/core/utils/index.ts +66 -1
- package/src/devtools/devtools.ts +410 -0
- package/src/devtools/index.ts +48 -0
- package/src/devtools/types.ts +104 -0
- package/src/dnd/draggable.ts +296 -0
- package/src/dnd/droppable.ts +228 -0
- package/src/dnd/index.ts +62 -0
- package/src/dnd/sortable.ts +307 -0
- package/src/dnd/types.ts +293 -0
- package/src/forms/create-form.ts +320 -0
- package/src/forms/index.ts +70 -0
- package/src/forms/types.ts +203 -0
- package/src/forms/use-field.ts +231 -0
- package/src/forms/validators.ts +294 -0
- package/src/full.ts +554 -229
- package/src/i18n/formatting.ts +67 -0
- package/src/i18n/i18n.ts +200 -0
- package/src/i18n/index.ts +67 -0
- package/src/i18n/translate.ts +182 -0
- package/src/i18n/types.ts +171 -0
- package/src/index.ts +72 -0
- package/src/media/battery.ts +116 -0
- package/src/media/breakpoints.ts +129 -0
- package/src/media/clipboard.ts +80 -0
- package/src/media/device-sensors.ts +158 -0
- package/src/media/geolocation.ts +119 -0
- package/src/media/index.ts +76 -0
- package/src/media/media-query.ts +92 -0
- package/src/media/network.ts +115 -0
- package/src/media/types.ts +177 -0
- package/src/media/viewport.ts +84 -0
- package/src/motion/index.ts +11 -2
- package/src/motion/morph.ts +151 -0
- package/src/motion/parallax.ts +120 -0
- package/src/motion/reduced-motion.ts +52 -3
- package/src/motion/types.ts +63 -0
- package/src/motion/typewriter.ts +164 -0
- package/src/plugin/index.ts +37 -0
- package/src/plugin/registry.ts +284 -0
- package/src/plugin/types.ts +137 -0
- package/src/reactive/async-data.ts +250 -29
- package/src/reactive/computed.ts +53 -1
- package/src/reactive/effect.ts +29 -6
- package/src/reactive/http.ts +790 -0
- package/src/reactive/index.ts +60 -0
- package/src/reactive/pagination.ts +317 -0
- package/src/reactive/polling.ts +179 -0
- package/src/reactive/readonly.ts +52 -8
- package/src/reactive/rest.ts +859 -0
- package/src/reactive/scope.ts +276 -0
- package/src/reactive/signal.ts +61 -1
- package/src/reactive/to-value.ts +71 -0
- package/src/reactive/websocket.ts +849 -0
- package/src/router/bq-link.ts +279 -0
- package/src/router/constraints.ts +204 -0
- package/src/router/index.ts +15 -7
- package/src/router/match.ts +255 -49
- package/src/router/path-pattern.ts +52 -0
- package/src/router/query.ts +3 -0
- package/src/router/router.ts +258 -48
- package/src/router/state.ts +51 -3
- package/src/router/types.ts +50 -4
- package/src/router/use-route.ts +68 -0
- package/src/router/utils.ts +44 -3
- package/src/security/index.ts +12 -17
- package/src/security/sanitize.ts +70 -70
- package/src/security/trusted-html.ts +71 -71
- package/src/ssr/hydrate.ts +84 -0
- package/src/ssr/index.ts +70 -0
- package/src/ssr/render.ts +508 -0
- package/src/ssr/serialize.ts +296 -0
- package/src/ssr/types.ts +81 -0
- package/src/store/create-store.ts +146 -8
- package/src/store/define-store.ts +49 -49
- package/src/store/index.ts +5 -0
- package/src/store/mapping.ts +74 -74
- package/src/store/persisted.ts +245 -62
- package/src/store/types.ts +247 -92
- package/src/store/utils.ts +4 -10
- package/src/store/watch.ts +53 -53
- package/src/storybook/index.ts +480 -479
- package/src/testing/index.ts +42 -0
- package/src/testing/testing.ts +593 -0
- package/src/testing/types.ts +170 -0
- package/src/view/custom-directives.ts +28 -0
- package/src/view/evaluate.ts +2 -0
- package/src/view/process.ts +19 -3
- package/dist/component-BEQgt5hl.js +0 -600
- package/dist/component-BEQgt5hl.js.map +0 -1
- package/dist/core-BGQJVw0-.js +0 -35
- package/dist/core-BGQJVw0-.js.map +0 -1
- package/dist/core-CCEabVHl.js.map +0 -1
- package/dist/effect-AFRW_Plg.js +0 -84
- package/dist/effect-AFRW_Plg.js.map +0 -1
- package/dist/motion-D9TcHxOF.js +0 -415
- package/dist/motion-D9TcHxOF.js.map +0 -1
- package/dist/reactive-DSkct0dO.js +0 -254
- package/dist/reactive-DSkct0dO.js.map +0 -1
- package/dist/router-CbDhl8rS.js +0 -188
- package/dist/router-CbDhl8rS.js.map +0 -1
- package/dist/store-BwDvI45q.js +0 -263
- package/dist/store-BwDvI45q.js.map +0 -1
- package/dist/untrack-B0rVscTc.js +0 -7
- package/dist/untrack-B0rVscTc.js.map +0 -1
- package/dist/view-C70lA3vf.js.map +0 -1
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<bq-link>` custom element for declarative SPA navigation.
|
|
3
|
+
*
|
|
4
|
+
* Exposes an accessible custom element that behaves like a link for
|
|
5
|
+
* client-side routing. Automatically toggles an active class when the
|
|
6
|
+
* target path matches the current route.
|
|
7
|
+
*
|
|
8
|
+
* @module bquery/router
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```html
|
|
12
|
+
* <bq-link to="/">Home</bq-link>
|
|
13
|
+
* <bq-link to="/about" active-class="selected">About</bq-link>
|
|
14
|
+
* <bq-link to="/settings" replace exact>Settings</bq-link>
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
/** @internal SSR-safe base class for environments without HTMLElement. */
|
|
18
|
+
declare const BQ_LINK_BASE: {
|
|
19
|
+
new (): HTMLElement;
|
|
20
|
+
prototype: HTMLElement;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* `<bq-link>` — A navigation custom element for bQuery routers.
|
|
24
|
+
*
|
|
25
|
+
* Attributes:
|
|
26
|
+
* - `to` — Target path (required). Example: `to="/dashboard"`.
|
|
27
|
+
* - `replace` — If present, replaces the current history entry instead of pushing.
|
|
28
|
+
* - `exact` — If present, the active class is only applied on an exact path match.
|
|
29
|
+
* - `active-class` — CSS class added when the route is active (default: `'active'`).
|
|
30
|
+
*
|
|
31
|
+
* The custom element itself acts as the interactive link target using
|
|
32
|
+
* `role="link"` and keyboard handling. It does not render a native `<a>`,
|
|
33
|
+
* so browser-native link affordances like context-menu "open in new tab"
|
|
34
|
+
* are not provided automatically.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* import { registerBqLink } from '@bquery/bquery/router';
|
|
39
|
+
*
|
|
40
|
+
* // Register the <bq-link> element (idempotent)
|
|
41
|
+
* registerBqLink();
|
|
42
|
+
*
|
|
43
|
+
* // Then use in HTML:
|
|
44
|
+
* // <bq-link to="/about">About</bq-link>
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare class BqLinkElement extends BQ_LINK_BASE {
|
|
48
|
+
/** @internal */
|
|
49
|
+
private _cleanup;
|
|
50
|
+
/** @internal */
|
|
51
|
+
private _trackedActiveClasses;
|
|
52
|
+
static get observedAttributes(): string[];
|
|
53
|
+
/** The target path for navigation. */
|
|
54
|
+
get to(): string;
|
|
55
|
+
set to(value: string);
|
|
56
|
+
/** Whether to replace the current history entry. */
|
|
57
|
+
get replace(): boolean;
|
|
58
|
+
set replace(value: boolean);
|
|
59
|
+
/** Whether to match the path exactly for active class. */
|
|
60
|
+
get exact(): boolean;
|
|
61
|
+
set exact(value: boolean);
|
|
62
|
+
/** CSS class applied when the route is active. */
|
|
63
|
+
get activeClass(): string;
|
|
64
|
+
set activeClass(value: string);
|
|
65
|
+
/** @internal */
|
|
66
|
+
connectedCallback(): void;
|
|
67
|
+
/** @internal */
|
|
68
|
+
disconnectedCallback(): void;
|
|
69
|
+
/** @internal */
|
|
70
|
+
attributeChangedCallback(name: string, _oldValue: string | null, _newValue: string | null): void;
|
|
71
|
+
/**
|
|
72
|
+
* Sets up the reactive effect that toggles the active CSS class
|
|
73
|
+
* based on the current route.
|
|
74
|
+
* @internal
|
|
75
|
+
*/
|
|
76
|
+
private _setupActiveTracking;
|
|
77
|
+
/** @internal */
|
|
78
|
+
private _clearTrackedActiveClasses;
|
|
79
|
+
/**
|
|
80
|
+
* Handles click events for SPA navigation.
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
private _handleClick;
|
|
84
|
+
/**
|
|
85
|
+
* Handles keyboard activation (Enter).
|
|
86
|
+
* @internal
|
|
87
|
+
*/
|
|
88
|
+
private _handleKeydown;
|
|
89
|
+
/**
|
|
90
|
+
* Performs the actual navigation.
|
|
91
|
+
* @internal
|
|
92
|
+
*/
|
|
93
|
+
private _navigate;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Registers the `<bq-link>` custom element.
|
|
97
|
+
*
|
|
98
|
+
* This function is idempotent — calling it multiple times is safe.
|
|
99
|
+
* The element is registered under the tag name `bq-link`.
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```ts
|
|
103
|
+
* import { registerBqLink } from '@bquery/bquery/router';
|
|
104
|
+
*
|
|
105
|
+
* registerBqLink();
|
|
106
|
+
*
|
|
107
|
+
* // Now use <bq-link to="/about">About</bq-link> in HTML
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export declare const registerBqLink: () => void;
|
|
111
|
+
export {};
|
|
112
|
+
//# sourceMappingURL=bq-link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bq-link.d.ts","sourceRoot":"","sources":["../../src/router/bq-link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAoBH,0EAA0E;AAC1E,QAAA,MAAM,YAAY;;;CAC8E,CAAC;AAEjG;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAA0B;IAE1C,gBAAgB;IAChB,OAAO,CAAC,qBAAqB,CAA8B;IAE3D,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,sCAAsC;IACtC,IAAI,EAAE,IAAI,MAAM,CAGf;IAED,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAEnB;IAED,oDAAoD;IACpD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAMzB;IAED,0DAA0D;IAC1D,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAMvB;IAED,kDAAkD;IAClD,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,EAE5B;IAED,gBAAgB;IAChB,iBAAiB,IAAI,IAAI;IAmBzB,gBAAgB;IAChB,oBAAoB,IAAI,IAAI;IAY5B,gBAAgB;IAChB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAShG;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAuC5B,gBAAgB;IAChB,OAAO,CAAC,0BAA0B;IAOlC;;;OAGG;IACH,OAAO,CAAC,YAAY,CAQlB;IAEF;;;OAGG;IACH,OAAO,CAAC,cAAc,CAKpB;IAEF;;;OAGG;IACH,OAAO,CAAC,SAAS;CASlB;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc,QAAO,IAQjC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for validating and normalizing route param constraints.
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export declare const getNormalizedRouteConstraint: (constraint: string) => string;
|
|
6
|
+
export declare const getRouteConstraintRegex: (constraint: string) => RegExp;
|
|
7
|
+
export declare const routeConstraintMatches: (constraint: string, value: string) => boolean;
|
|
8
|
+
export declare const clearRouteConstraintCache: () => void;
|
|
9
|
+
//# sourceMappingURL=constraints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../src/router/constraints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2JH,eAAO,MAAM,4BAA4B,GAAI,YAAY,MAAM,KAAG,MASjE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,YAAY,MAAM,KAAG,MAyB5D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,YAAY,MAAM,EAAE,OAAO,MAAM,KAAG,OAE1E,CAAC;AAEF,eAAO,MAAM,yBAAyB,QAAO,IAG5C,CAAC"}
|
package/dist/router/index.d.ts
CHANGED
|
@@ -4,38 +4,46 @@
|
|
|
4
4
|
* This module provides a lightweight, signal-based router for single-page
|
|
5
5
|
* applications. Features include:
|
|
6
6
|
* - History API navigation
|
|
7
|
-
* - Route matching with params and
|
|
7
|
+
* - Route matching with params, wildcards, and regex constraints
|
|
8
8
|
* - Lazy route loading
|
|
9
|
-
* - Navigation guards (beforeEach, afterEach)
|
|
9
|
+
* - Navigation guards (beforeEach, afterEach, per-route beforeEnter)
|
|
10
10
|
* - Reactive current route via signals
|
|
11
|
+
* - `useRoute()` composable for fine-grained reactive access
|
|
12
|
+
* - Route redirects via `redirectTo`
|
|
13
|
+
* - Scroll position restoration on back/forward
|
|
11
14
|
* - Multi-value query params (e.g., `?tag=a&tag=b` → `{ tag: ['a', 'b'] }`)
|
|
12
15
|
*
|
|
13
16
|
* @module bquery/router
|
|
14
17
|
*
|
|
15
18
|
* @example
|
|
16
19
|
* ```ts
|
|
17
|
-
* import { createRouter, navigate, currentRoute } from 'bquery/router';
|
|
18
|
-
* import { effect } from 'bquery/reactive';
|
|
20
|
+
* import { createRouter, navigate, currentRoute, useRoute } from '@bquery/bquery/router';
|
|
21
|
+
* import { effect } from '@bquery/bquery/reactive';
|
|
19
22
|
*
|
|
20
23
|
* const router = createRouter({
|
|
21
24
|
* routes: [
|
|
22
25
|
* { path: '/', component: () => import('./Home') },
|
|
23
|
-
* { path: '/user/:id', component: () => import('./User') },
|
|
26
|
+
* { path: '/user/:id(\\d+)', component: () => import('./User') },
|
|
27
|
+
* { path: '/old', redirectTo: '/new' },
|
|
24
28
|
* { path: '*', component: () => import('./NotFound') },
|
|
25
29
|
* ],
|
|
30
|
+
* scrollRestoration: true,
|
|
26
31
|
* });
|
|
27
32
|
*
|
|
33
|
+
* const { path, params } = useRoute();
|
|
28
34
|
* effect(() => {
|
|
29
|
-
* console.log('Route changed:',
|
|
35
|
+
* console.log('Route changed:', path.value, params.value);
|
|
30
36
|
* });
|
|
31
37
|
*
|
|
32
38
|
* navigate('/user/42');
|
|
33
39
|
* ```
|
|
34
40
|
*/
|
|
41
|
+
export { BqLinkElement, registerBqLink } from './bq-link';
|
|
35
42
|
export { interceptLinks, link } from './links';
|
|
36
43
|
export { back, forward, navigate } from './navigation';
|
|
37
44
|
export { createRouter } from './router';
|
|
38
|
-
export { currentRoute } from './state';
|
|
45
|
+
export { currentRoute, isNavigating } from './state';
|
|
39
46
|
export type { NavigationGuard, Route, RouteDefinition, Router, RouterOptions } from './types';
|
|
47
|
+
export { useRoute, type UseRouteReturn } from './use-route';
|
|
40
48
|
export { isActive, isActiveSignal, resolve } from './utils';
|
|
41
49
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/router/match.d.ts
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
import type { Route, RouteDefinition } from './types';
|
|
6
6
|
/**
|
|
7
7
|
* Matches a path against route definitions and extracts params.
|
|
8
|
-
* Uses positional captures for maximum compatibility.
|
|
9
8
|
* @internal
|
|
10
9
|
*/
|
|
11
10
|
export declare const matchRoute: (path: string, routes: RouteDefinition[]) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"match.d.ts","sourceRoot":"","sources":["../../src/router/match.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"match.d.ts","sourceRoot":"","sources":["../../src/router/match.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAyQtD;;;GAGG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,MAAM,EACZ,QAAQ,eAAe,EAAE,KACxB;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAUjE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,MAAM,MAAM,EACZ,QAAQ,eAAe,EAAE,KACxB,KAUF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for parsing route path params and constraints.
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
/** Validates whether a character can start a route param name. @internal */
|
|
6
|
+
export declare const isParamStart: (char: string | undefined) => boolean;
|
|
7
|
+
/** Validates whether a character can appear after the start of a route param name. @internal */
|
|
8
|
+
export declare const isParamChar: (char: string | undefined) => boolean;
|
|
9
|
+
/** Reads a route param constraint while preserving escaped chars and nested groups. @internal */
|
|
10
|
+
export declare const readConstraint: (path: string, startIndex: number) => {
|
|
11
|
+
constraint: string;
|
|
12
|
+
endIndex: number;
|
|
13
|
+
} | null;
|
|
14
|
+
//# sourceMappingURL=path-pattern.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-pattern.d.ts","sourceRoot":"","sources":["../../src/router/path-pattern.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4EAA4E;AAC5E,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,GAAG,SAAS,KAAG,OAEwB,CAAC;AAEjF,gGAAgG;AAChG,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,GAAG,SAAS,KAAG,OACmB,CAAC;AAE3E,iGAAiG;AACjG,eAAO,MAAM,cAAc,GACzB,MAAM,MAAM,EACZ,YAAY,MAAM,KACjB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAiC7C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/router/query.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/router/query.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAoB3E,CAAC"}
|
package/dist/router/router.d.ts
CHANGED
|
@@ -17,10 +17,12 @@ import type { Router, RouterOptions } from './types';
|
|
|
17
17
|
* routes: [
|
|
18
18
|
* { path: '/', component: () => import('./pages/Home') },
|
|
19
19
|
* { path: '/about', component: () => import('./pages/About') },
|
|
20
|
-
* { path: '/user/:id', component: () => import('./pages/User') },
|
|
20
|
+
* { path: '/user/:id(\\d+)', component: () => import('./pages/User') },
|
|
21
|
+
* { path: '/old-page', redirectTo: '/new-page' },
|
|
21
22
|
* { path: '*', component: () => import('./pages/NotFound') },
|
|
22
23
|
* ],
|
|
23
24
|
* base: '/app',
|
|
25
|
+
* scrollRestoration: true,
|
|
24
26
|
* });
|
|
25
27
|
*
|
|
26
28
|
* router.beforeEach((to, from) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,KAAK,EAA0B,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAoB7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,aAAa,KAAG,MAmWrD,CAAC"}
|
package/dist/router/state.d.ts
CHANGED
|
@@ -11,8 +11,8 @@ export declare const routeSignal: Signal<Route>;
|
|
|
11
11
|
*
|
|
12
12
|
* @example
|
|
13
13
|
* ```ts
|
|
14
|
-
* import { currentRoute } from 'bquery/router';
|
|
15
|
-
* import { effect } from 'bquery/reactive';
|
|
14
|
+
* import { currentRoute } from '@bquery/bquery/router';
|
|
15
|
+
* import { effect } from '@bquery/bquery/reactive';
|
|
16
16
|
*
|
|
17
17
|
* effect(() => {
|
|
18
18
|
* document.title = `Page: ${currentRoute.value.path}`;
|
|
@@ -20,6 +20,29 @@ export declare const routeSignal: Signal<Route>;
|
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
22
|
export declare const currentRoute: ReadonlySignal<Route>;
|
|
23
|
+
/**
|
|
24
|
+
* Reactive signal indicating whether a navigation is currently in progress.
|
|
25
|
+
*
|
|
26
|
+
* This becomes `true` while async guards or redirect resolution are running,
|
|
27
|
+
* then flips back to `false` once navigation finishes or is canceled.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* import { isNavigating } from '@bquery/bquery/router';
|
|
32
|
+
* import { effect } from '@bquery/bquery/reactive';
|
|
33
|
+
*
|
|
34
|
+
* effect(() => {
|
|
35
|
+
* document.body.toggleAttribute('data-loading-route', isNavigating.value);
|
|
36
|
+
* });
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare const isNavigating: ReadonlySignal<boolean>;
|
|
40
|
+
/** @internal */
|
|
41
|
+
export declare const beginNavigation: () => void;
|
|
42
|
+
/** @internal */
|
|
43
|
+
export declare const endNavigation: () => void;
|
|
44
|
+
/** @internal */
|
|
45
|
+
export declare const resetNavigationState: () => void;
|
|
23
46
|
/** @internal */
|
|
24
47
|
export declare const getActiveRouter: () => Router | null;
|
|
25
48
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/router/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/router/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAA8B,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAS7C,gBAAgB;AAChB,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,KAAK,CAMpC,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,EAAE,cAAc,CAAC,KAAK,CAAqC,CAAC;AAQrF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,YAAY,EAAE,cAAc,CAAC,OAAO,CAAgC,CAAC;AAElF,gBAAgB;AAChB,eAAO,MAAM,eAAe,QAAO,IAKlC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,aAAa,QAAO,IAOhC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,oBAAoB,QAAO,IAGvC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,eAAe,QAAO,MAAM,GAAG,IAAoB,CAAC;AAEjE,gBAAgB;AAChB,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,GAAG,IAAI,KAAG,IAEvD,CAAC"}
|
package/dist/router/types.d.ts
CHANGED
|
@@ -29,18 +29,55 @@ export type Route = {
|
|
|
29
29
|
/**
|
|
30
30
|
* Route definition for configuration.
|
|
31
31
|
*/
|
|
32
|
-
|
|
33
|
-
/**
|
|
32
|
+
type BaseRouteDefinition = {
|
|
33
|
+
/**
|
|
34
|
+
* Path pattern (e.g., '/user/:id', '/posts/*').
|
|
35
|
+
* Supports regex constraints on params: `/user/:id(\\d+)`.
|
|
36
|
+
* Constraint backreferences are not supported.
|
|
37
|
+
*/
|
|
34
38
|
path: string;
|
|
35
|
-
/** Component loader (sync or async) */
|
|
36
|
-
component: () => unknown | Promise<unknown>;
|
|
37
39
|
/** Optional route name for programmatic navigation */
|
|
38
40
|
name?: string;
|
|
39
41
|
/** Optional metadata */
|
|
40
42
|
meta?: Record<string, unknown>;
|
|
41
43
|
/** Nested child routes */
|
|
42
44
|
children?: RouteDefinition[];
|
|
45
|
+
/**
|
|
46
|
+
* Per-route navigation guard. Called before entering this route.
|
|
47
|
+
* Return `false` to cancel navigation.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* {
|
|
52
|
+
* path: '/admin',
|
|
53
|
+
* component: () => import('./Admin'),
|
|
54
|
+
* beforeEnter: (to, from) => isAuthenticated() || false,
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
beforeEnter?: NavigationGuard;
|
|
59
|
+
};
|
|
60
|
+
type ComponentRouteDefinition = BaseRouteDefinition & {
|
|
61
|
+
/** Component loader (sync or async) */
|
|
62
|
+
component: () => unknown | Promise<unknown>;
|
|
63
|
+
redirectTo?: never;
|
|
64
|
+
};
|
|
65
|
+
type RedirectRouteDefinition = BaseRouteDefinition & {
|
|
66
|
+
/**
|
|
67
|
+
* Redirect target path. When the route is matched, the router
|
|
68
|
+
* automatically navigates to this path instead.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* { path: '/old-page', redirectTo: '/new-page' }
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
redirectTo: string;
|
|
76
|
+
component?: never;
|
|
77
|
+
children?: never;
|
|
78
|
+
beforeEnter?: never;
|
|
43
79
|
};
|
|
80
|
+
export type RouteDefinition = ComponentRouteDefinition | RedirectRouteDefinition;
|
|
44
81
|
/**
|
|
45
82
|
* Router configuration options.
|
|
46
83
|
*/
|
|
@@ -51,6 +88,12 @@ export type RouterOptions = {
|
|
|
51
88
|
base?: string;
|
|
52
89
|
/** Use hash-based routing instead of history (default: false) */
|
|
53
90
|
hash?: boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Restore scroll position on back/forward navigation (default: false).
|
|
93
|
+
* When enabled, the router saves scroll positions for each history entry
|
|
94
|
+
* and restores them on popstate events.
|
|
95
|
+
*/
|
|
96
|
+
scrollRestoration?: boolean;
|
|
54
97
|
};
|
|
55
98
|
/**
|
|
56
99
|
* Navigation guard function type.
|
|
@@ -85,4 +128,5 @@ export type Router = {
|
|
|
85
128
|
/** Destroy the router and cleanup listeners */
|
|
86
129
|
destroy: () => void;
|
|
87
130
|
};
|
|
131
|
+
export {};
|
|
88
132
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/router/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B;;;;;;;;OAQG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACzC,mCAAmC;IACnC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/router/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reactive route composable.
|
|
3
|
+
* @module bquery/router
|
|
4
|
+
*/
|
|
5
|
+
import { type ReadonlySignal } from '../reactive/index';
|
|
6
|
+
import type { Route, RouteDefinition } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Return type for {@link useRoute}.
|
|
9
|
+
* Provides reactive access to individual route properties.
|
|
10
|
+
*/
|
|
11
|
+
export type UseRouteReturn = {
|
|
12
|
+
/** Full reactive route object */
|
|
13
|
+
route: ReadonlySignal<Route>;
|
|
14
|
+
/** Reactive current path */
|
|
15
|
+
path: ReadonlySignal<string>;
|
|
16
|
+
/** Reactive route params */
|
|
17
|
+
params: ReadonlySignal<Record<string, string>>;
|
|
18
|
+
/** Reactive query params */
|
|
19
|
+
query: ReadonlySignal<Record<string, string | string[]>>;
|
|
20
|
+
/** Reactive hash fragment (without #) */
|
|
21
|
+
hash: ReadonlySignal<string>;
|
|
22
|
+
/** Reactive matched route definition */
|
|
23
|
+
matched: ReadonlySignal<RouteDefinition | null>;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Returns reactive access to the current route, params, query, and hash.
|
|
27
|
+
*
|
|
28
|
+
* Each property is a readonly computed signal that updates automatically
|
|
29
|
+
* when the route changes. This is useful for fine-grained reactivity
|
|
30
|
+
* where you only need to subscribe to specific route parts.
|
|
31
|
+
*
|
|
32
|
+
* @returns An object with reactive route properties
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* import { useRoute } from '@bquery/bquery/router';
|
|
37
|
+
* import { effect } from '@bquery/bquery/reactive';
|
|
38
|
+
*
|
|
39
|
+
* const { path, params, query, hash } = useRoute();
|
|
40
|
+
*
|
|
41
|
+
* effect(() => {
|
|
42
|
+
* console.log('Path:', path.value);
|
|
43
|
+
* console.log('Params:', params.value);
|
|
44
|
+
* console.log('Query:', query.value);
|
|
45
|
+
* console.log('Hash:', hash.value);
|
|
46
|
+
* });
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare const useRoute: () => UseRouteReturn;
|
|
50
|
+
//# sourceMappingURL=use-route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-route.d.ts","sourceRoot":"","sources":["../../src/router/use-route.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAMtD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,iCAAiC;IACjC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;IAC7B,4BAA4B;IAC5B,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7B,4BAA4B;IAC5B,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,4BAA4B;IAC5B,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IACzD,yCAAyC;IACzC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7B,wCAAwC;IACxC,OAAO,EAAE,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;CACjD,CAAC;AAWF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,QAAQ,QAAO,cAE3B,CAAC"}
|
package/dist/router/utils.d.ts
CHANGED
|
@@ -16,6 +16,9 @@ export declare const flattenRoutes: (routes: RouteDefinition[], parentPath?: str
|
|
|
16
16
|
* @param name - The route name
|
|
17
17
|
* @param params - Route params to interpolate
|
|
18
18
|
* @returns The resolved path
|
|
19
|
+
* @throws {Error} If no router is initialized, the route name is unknown,
|
|
20
|
+
* a required path param is missing from `params`, a param value does not satisfy
|
|
21
|
+
* its route regex constraint, or a route param constraint has invalid syntax
|
|
19
22
|
*
|
|
20
23
|
* @example
|
|
21
24
|
* ```ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/router/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/router/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIlE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAM/C;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,eAAe,EAAE,EAAE,mBAAe,KAAG,eAAe,EAiBzF,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,EAAE,SAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,KAAG,MAqD3E,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,eAAa,KAAG,OAGtD,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,eAAa,KAAG,cAAc,CAAC,OAAO,CAKlF,CAAC"}
|