@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,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the bQuery accessibility (a11y) module.
|
|
3
|
+
*
|
|
4
|
+
* @module bquery/a11y
|
|
5
|
+
*/
|
|
6
|
+
import type { ReadonlySignal } from '../reactive/index';
|
|
7
|
+
/**
|
|
8
|
+
* Options for configuring focus trapping behavior.
|
|
9
|
+
*/
|
|
10
|
+
export interface TrapFocusOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Element to receive initial focus when the trap activates.
|
|
13
|
+
* If not provided, the first focusable element is focused.
|
|
14
|
+
*/
|
|
15
|
+
initialFocus?: HTMLElement | string;
|
|
16
|
+
/**
|
|
17
|
+
* Element to receive focus when the trap is released.
|
|
18
|
+
* If not provided, focus returns to the element that was focused
|
|
19
|
+
* before the trap was activated.
|
|
20
|
+
*/
|
|
21
|
+
returnFocus?: HTMLElement | string;
|
|
22
|
+
/**
|
|
23
|
+
* Whether pressing Escape releases the focus trap.
|
|
24
|
+
* @default true
|
|
25
|
+
*/
|
|
26
|
+
escapeDeactivates?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Callback invoked when the trap is deactivated via Escape.
|
|
29
|
+
*/
|
|
30
|
+
onEscape?: () => void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Handle returned by `trapFocus()` for managing the focus trap lifecycle.
|
|
34
|
+
*/
|
|
35
|
+
export interface FocusTrapHandle {
|
|
36
|
+
/** Release the focus trap, restoring focus to the previous element. */
|
|
37
|
+
release: () => void;
|
|
38
|
+
/** Whether the trap is currently active. */
|
|
39
|
+
active: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Priority level for screen reader announcements.
|
|
43
|
+
* - `'polite'` — announced when the user is idle (default)
|
|
44
|
+
* - `'assertive'` — announced immediately, interrupting current speech
|
|
45
|
+
*/
|
|
46
|
+
export type AnnouncePriority = 'polite' | 'assertive';
|
|
47
|
+
/**
|
|
48
|
+
* Options for configuring roving tab index behavior.
|
|
49
|
+
*/
|
|
50
|
+
export interface RovingTabIndexOptions {
|
|
51
|
+
/**
|
|
52
|
+
* Whether navigation wraps around from last to first (and vice versa).
|
|
53
|
+
* @default true
|
|
54
|
+
*/
|
|
55
|
+
wrap?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Orientation of the group — determines which arrow keys are used.
|
|
58
|
+
* - `'horizontal'` — Left/Right arrows
|
|
59
|
+
* - `'vertical'` — Up/Down arrows
|
|
60
|
+
* - `'both'` — All arrow keys
|
|
61
|
+
* @default 'vertical'
|
|
62
|
+
*/
|
|
63
|
+
orientation?: 'horizontal' | 'vertical' | 'both';
|
|
64
|
+
/**
|
|
65
|
+
* Callback fired when the active item changes.
|
|
66
|
+
*/
|
|
67
|
+
onActivate?: (element: Element, index: number) => void;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Handle returned by `rovingTabIndex()` for cleanup.
|
|
71
|
+
*/
|
|
72
|
+
export interface RovingTabIndexHandle {
|
|
73
|
+
/** Remove event listeners and restore original tabindex values. */
|
|
74
|
+
destroy: () => void;
|
|
75
|
+
/** Programmatically focus a specific item by index. */
|
|
76
|
+
focusItem: (index: number) => void;
|
|
77
|
+
/** Get the currently active index. */
|
|
78
|
+
activeIndex: () => number;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Options for configuring auto-generated skip navigation.
|
|
82
|
+
*/
|
|
83
|
+
export interface SkipLinkOptions {
|
|
84
|
+
/**
|
|
85
|
+
* Text content of the skip link.
|
|
86
|
+
* @default 'Skip to main content'
|
|
87
|
+
*/
|
|
88
|
+
text?: string;
|
|
89
|
+
/**
|
|
90
|
+
* CSS class applied to the skip link element.
|
|
91
|
+
* @default 'bq-skip-link'
|
|
92
|
+
*/
|
|
93
|
+
className?: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Handle returned by `skipLink()` for cleanup.
|
|
97
|
+
*/
|
|
98
|
+
export interface SkipLinkHandle {
|
|
99
|
+
/** Remove the skip link from the DOM. */
|
|
100
|
+
destroy: () => void;
|
|
101
|
+
/**
|
|
102
|
+
* The created skip link element, or `null` when `skipLink()` is called in a
|
|
103
|
+
* non-DOM environment and returns a no-op handle.
|
|
104
|
+
*/
|
|
105
|
+
element: HTMLAnchorElement | null;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Color scheme preference value.
|
|
109
|
+
*/
|
|
110
|
+
export type ColorScheme = 'light' | 'dark';
|
|
111
|
+
/**
|
|
112
|
+
* Contrast preference value.
|
|
113
|
+
*/
|
|
114
|
+
export type ContrastPreference = 'no-preference' | 'more' | 'less' | 'custom';
|
|
115
|
+
/**
|
|
116
|
+
* Readonly media preference signal with an explicit cleanup hook.
|
|
117
|
+
*/
|
|
118
|
+
export interface MediaPreferenceSignal<T> extends ReadonlySignal<T> {
|
|
119
|
+
/** Releases underlying media-query listeners. Safe to call multiple times. */
|
|
120
|
+
destroy(): void;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Severity level for audit findings.
|
|
124
|
+
*/
|
|
125
|
+
export type AuditSeverity = 'error' | 'warning' | 'info';
|
|
126
|
+
/**
|
|
127
|
+
* A single accessibility audit finding.
|
|
128
|
+
*/
|
|
129
|
+
export interface AuditFinding {
|
|
130
|
+
/** Severity level of the finding. */
|
|
131
|
+
severity: AuditSeverity;
|
|
132
|
+
/** Human-readable description of the issue. */
|
|
133
|
+
message: string;
|
|
134
|
+
/** The DOM element with the issue. */
|
|
135
|
+
element: Element;
|
|
136
|
+
/** The audit rule that triggered this finding. */
|
|
137
|
+
rule: string;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Result of an accessibility audit.
|
|
141
|
+
*/
|
|
142
|
+
export interface AuditResult {
|
|
143
|
+
/** All findings from the audit. */
|
|
144
|
+
findings: AuditFinding[];
|
|
145
|
+
/** Number of errors found. */
|
|
146
|
+
errors: number;
|
|
147
|
+
/** Number of warnings found. */
|
|
148
|
+
warnings: number;
|
|
149
|
+
/** Whether the audit passed (no errors). */
|
|
150
|
+
passed: boolean;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/a11y/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAEpC;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAEnC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAC;CACjB;AAID;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,WAAW,CAAC;AAItD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;IAEjD;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,uDAAuD;IACvD,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,sCAAsC;IACtC,WAAW,EAAE,MAAM,MAAM,CAAC;CAC3B;AAID;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACnC;AAID;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACjE,8EAA8E;IAC9E,OAAO,IAAI,IAAI,CAAC;CACjB;AAID;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,QAAQ,EAAE,aAAa,CAAC;IACxB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mCAAmC;IACnC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAC;CACjB"}
|
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
import { n as E } from "./core-DdtZHzsS.js";
|
|
2
|
+
import { m as I } from "./reactive-DwkhUJfP.js";
|
|
3
|
+
var w = /* @__PURE__ */ new Map(), A = /* @__PURE__ */ new Map(), q = 50, M = (e) => {
|
|
4
|
+
const t = w.get(e);
|
|
5
|
+
if (t && t.isConnected) return t;
|
|
6
|
+
const i = document.createElement("div");
|
|
7
|
+
return i.setAttribute("aria-live", e), i.setAttribute("aria-atomic", "true"), i.setAttribute("role", e === "assertive" ? "alert" : "status"), Object.assign(i.style, {
|
|
8
|
+
position: "absolute",
|
|
9
|
+
width: "1px",
|
|
10
|
+
height: "1px",
|
|
11
|
+
padding: "0",
|
|
12
|
+
margin: "-1px",
|
|
13
|
+
overflow: "hidden",
|
|
14
|
+
clip: "rect(0, 0, 0, 0)",
|
|
15
|
+
whiteSpace: "nowrap",
|
|
16
|
+
border: "0"
|
|
17
|
+
}), document.body.appendChild(i), w.set(e, i), i;
|
|
18
|
+
}, G = (e, t = "polite") => {
|
|
19
|
+
if (!e || typeof document > "u" || !document.body) return;
|
|
20
|
+
const i = M(t), o = A.get(t);
|
|
21
|
+
o !== void 0 && clearTimeout(o), i.textContent = "";
|
|
22
|
+
const n = setTimeout(() => {
|
|
23
|
+
A.delete(t), i.isConnected && (i.textContent = e);
|
|
24
|
+
}, q);
|
|
25
|
+
A.set(t, n);
|
|
26
|
+
}, W = () => {
|
|
27
|
+
for (const e of A.values()) clearTimeout(e);
|
|
28
|
+
A.clear();
|
|
29
|
+
for (const [, e] of w) e.remove();
|
|
30
|
+
w.clear();
|
|
31
|
+
}, p = (e, t, i, o) => ({
|
|
32
|
+
severity: e,
|
|
33
|
+
message: t,
|
|
34
|
+
element: i,
|
|
35
|
+
rule: o
|
|
36
|
+
}), D = (e) => {
|
|
37
|
+
const t = [], i = e.querySelectorAll("img");
|
|
38
|
+
for (const o of i) o.hasAttribute("alt") ? o.getAttribute("alt") === "" && !o.hasAttribute("role") && t.push(p("info", 'Image has empty alt text. Consider adding role="presentation" if decorative.', o, "img-decorative")) : t.push(p("error", 'Image is missing an alt attribute. Add alt="" for decorative images or a descriptive alt text.', o, "img-alt"));
|
|
39
|
+
return t;
|
|
40
|
+
}, F = (e) => {
|
|
41
|
+
const t = [], i = e.querySelectorAll("input, select, textarea");
|
|
42
|
+
for (const o of i) {
|
|
43
|
+
const n = o.getAttribute("type");
|
|
44
|
+
if (n === "hidden" || n === "submit" || n === "button" || n === "reset") continue;
|
|
45
|
+
const d = o.getAttribute("id"), l = d ? !!e.querySelector(`label[for="${d}"]`) : !1, c = o.hasAttribute("aria-label") || o.hasAttribute("aria-labelledby"), m = o.hasAttribute("title"), g = o.closest("label") !== null;
|
|
46
|
+
!l && !c && !m && !g && t.push(p("error", 'Form input is missing a label. Add a <label for="id">, aria-label, or aria-labelledby attribute.', o, "input-label"));
|
|
47
|
+
}
|
|
48
|
+
return t;
|
|
49
|
+
}, R = (e) => {
|
|
50
|
+
const t = [], i = e.querySelectorAll("button");
|
|
51
|
+
for (const n of i) {
|
|
52
|
+
const d = (n.textContent ?? "").trim().length > 0, l = n.hasAttribute("aria-label") || n.hasAttribute("aria-labelledby"), c = n.hasAttribute("title");
|
|
53
|
+
!d && !l && !c && t.push(p("error", "Button has no accessible name. Add text content, aria-label, or title.", n, "button-name"));
|
|
54
|
+
}
|
|
55
|
+
const o = e.querySelectorAll("a[href]");
|
|
56
|
+
for (const n of o) {
|
|
57
|
+
const d = (n.textContent ?? "").trim().length > 0, l = n.hasAttribute("aria-label") || n.hasAttribute("aria-labelledby"), c = n.hasAttribute("title"), m = n.querySelector("img[alt]") !== null;
|
|
58
|
+
!d && !l && !c && !m && t.push(p("error", "Link has no accessible name. Add text content, aria-label, or title.", n, "link-name"));
|
|
59
|
+
}
|
|
60
|
+
return t;
|
|
61
|
+
}, B = (e) => {
|
|
62
|
+
const t = [], i = e.querySelectorAll("h1, h2, h3, h4, h5, h6");
|
|
63
|
+
let o = 0;
|
|
64
|
+
for (const n of i) {
|
|
65
|
+
const d = parseInt(n.tagName.charAt(1), 10);
|
|
66
|
+
o > 0 && d > o + 1 && t.push(p("warning", `Heading level skipped: <${n.tagName.toLowerCase()}> follows <h${o}>. Don't skip heading levels.`, n, "heading-order")), (n.textContent ?? "").trim().length === 0 && t.push(p("warning", "Heading element is empty.", n, "heading-empty")), o = d;
|
|
67
|
+
}
|
|
68
|
+
return t;
|
|
69
|
+
}, N = (e) => {
|
|
70
|
+
const t = [], i = e.querySelectorAll("[aria-labelledby]");
|
|
71
|
+
for (const n of i) {
|
|
72
|
+
const d = (n.getAttribute("aria-labelledby") ?? "").split(/\s+/);
|
|
73
|
+
for (const l of d) l && !document.getElementById(l) && t.push(p("error", `aria-labelledby references "${l}" which does not exist in the document.`, n, "aria-labelledby-ref"));
|
|
74
|
+
}
|
|
75
|
+
const o = e.querySelectorAll("[aria-describedby]");
|
|
76
|
+
for (const n of o) {
|
|
77
|
+
const d = (n.getAttribute("aria-describedby") ?? "").split(/\s+/);
|
|
78
|
+
for (const l of d) l && !document.getElementById(l) && t.push(p("error", `aria-describedby references "${l}" which does not exist in the document.`, n, "aria-describedby-ref"));
|
|
79
|
+
}
|
|
80
|
+
return t;
|
|
81
|
+
}, $ = (e) => {
|
|
82
|
+
const t = [];
|
|
83
|
+
return (e === document.body || e === document.documentElement) && (e.querySelector("main") || e.querySelector('[role="main"]') || t.push(p("warning", 'Page is missing a <main> landmark. Add <main> or role="main" to the primary content area.', e, "landmark-main"))), t;
|
|
84
|
+
}, Y = (e) => {
|
|
85
|
+
if (typeof document > "u" || !document.body) return {
|
|
86
|
+
findings: [],
|
|
87
|
+
errors: 0,
|
|
88
|
+
warnings: 0,
|
|
89
|
+
passed: !0
|
|
90
|
+
};
|
|
91
|
+
const t = e ?? document.body, i = [
|
|
92
|
+
...D(t),
|
|
93
|
+
...F(t),
|
|
94
|
+
...R(t),
|
|
95
|
+
...B(t),
|
|
96
|
+
...N(t),
|
|
97
|
+
...$(t)
|
|
98
|
+
], o = i.filter((n) => n.severity === "error").length;
|
|
99
|
+
return {
|
|
100
|
+
findings: i,
|
|
101
|
+
errors: o,
|
|
102
|
+
warnings: i.filter((n) => n.severity === "warning").length,
|
|
103
|
+
passed: o === 0
|
|
104
|
+
};
|
|
105
|
+
}, L = (e, t) => {
|
|
106
|
+
if (typeof e.addEventListener == "function")
|
|
107
|
+
return e.addEventListener("change", t), () => {
|
|
108
|
+
e.removeEventListener("change", t);
|
|
109
|
+
};
|
|
110
|
+
const i = e;
|
|
111
|
+
if (typeof i.addListener == "function")
|
|
112
|
+
return i.addListener(t), () => {
|
|
113
|
+
i.removeListener?.(t);
|
|
114
|
+
};
|
|
115
|
+
}, T = (e, t) => {
|
|
116
|
+
let i = t;
|
|
117
|
+
const o = e;
|
|
118
|
+
return Object.defineProperty(o, "destroy", {
|
|
119
|
+
configurable: !0,
|
|
120
|
+
enumerable: !1,
|
|
121
|
+
value: () => {
|
|
122
|
+
const n = i;
|
|
123
|
+
i = () => {
|
|
124
|
+
}, n();
|
|
125
|
+
}
|
|
126
|
+
}), o;
|
|
127
|
+
}, O = (e, t) => {
|
|
128
|
+
const i = E(t);
|
|
129
|
+
let o = () => {
|
|
130
|
+
i.dispose();
|
|
131
|
+
};
|
|
132
|
+
if (typeof window < "u" && typeof window.matchMedia == "function") try {
|
|
133
|
+
const n = window.matchMedia(e);
|
|
134
|
+
i.value = n.matches;
|
|
135
|
+
const l = L(n, (c) => {
|
|
136
|
+
i.value = c.matches;
|
|
137
|
+
});
|
|
138
|
+
l && (o = () => {
|
|
139
|
+
l(), i.dispose();
|
|
140
|
+
});
|
|
141
|
+
} catch {
|
|
142
|
+
}
|
|
143
|
+
return T(I(i), o);
|
|
144
|
+
}, P = () => O("(prefers-reduced-motion: reduce)", !1), Q = () => {
|
|
145
|
+
const e = E("light");
|
|
146
|
+
let t = () => {
|
|
147
|
+
e.dispose();
|
|
148
|
+
};
|
|
149
|
+
if (typeof window < "u" && typeof window.matchMedia == "function") try {
|
|
150
|
+
const i = window.matchMedia("(prefers-color-scheme: dark)");
|
|
151
|
+
e.value = i.matches ? "dark" : "light";
|
|
152
|
+
const n = L(i, (d) => {
|
|
153
|
+
e.value = d.matches ? "dark" : "light";
|
|
154
|
+
});
|
|
155
|
+
n && (t = () => {
|
|
156
|
+
n(), e.dispose();
|
|
157
|
+
});
|
|
158
|
+
} catch {
|
|
159
|
+
}
|
|
160
|
+
return T(I(e), t);
|
|
161
|
+
}, J = () => {
|
|
162
|
+
const e = E("no-preference");
|
|
163
|
+
let t = () => {
|
|
164
|
+
e.dispose();
|
|
165
|
+
};
|
|
166
|
+
if (typeof window < "u" && typeof window.matchMedia == "function") {
|
|
167
|
+
let i, o, n;
|
|
168
|
+
const d = () => {
|
|
169
|
+
!i || !o || !n || (i.matches ? e.value = "more" : o.matches ? e.value = "less" : n.matches ? e.value = "custom" : e.value = "no-preference");
|
|
170
|
+
};
|
|
171
|
+
try {
|
|
172
|
+
i = window.matchMedia("(prefers-contrast: more)"), o = window.matchMedia("(prefers-contrast: less)"), n = window.matchMedia("(prefers-contrast: custom)"), d();
|
|
173
|
+
const l = [
|
|
174
|
+
i,
|
|
175
|
+
o,
|
|
176
|
+
n
|
|
177
|
+
].map((c) => L(c, () => {
|
|
178
|
+
d();
|
|
179
|
+
})).filter((c) => c !== void 0);
|
|
180
|
+
l.length > 0 && (t = () => {
|
|
181
|
+
for (const c of l) c();
|
|
182
|
+
e.dispose();
|
|
183
|
+
});
|
|
184
|
+
} catch {
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return T(I(e), t);
|
|
188
|
+
}, V = (e, t, i = {}) => {
|
|
189
|
+
const { wrap: o = !0, orientation: n = "vertical", onActivate: d } = i;
|
|
190
|
+
let l = 0;
|
|
191
|
+
const c = /* @__PURE__ */ new Map(), m = () => Array.from(e.querySelectorAll(t)), g = (a) => {
|
|
192
|
+
for (const r of a) c.has(r) || c.set(r, r.getAttribute("tabindex"));
|
|
193
|
+
}, v = (a) => {
|
|
194
|
+
const r = m();
|
|
195
|
+
if (r.length === 0) return;
|
|
196
|
+
g(r);
|
|
197
|
+
const s = Math.max(0, Math.min(a, r.length - 1));
|
|
198
|
+
for (let b = 0; b < r.length; b++) r[b].setAttribute("tabindex", b === s ? "0" : "-1");
|
|
199
|
+
l = s, r[s].focus(), d?.(r[s], s);
|
|
200
|
+
}, u = (a) => {
|
|
201
|
+
if (a === "Home" || a === "End") return !0;
|
|
202
|
+
switch (n) {
|
|
203
|
+
case "horizontal":
|
|
204
|
+
return a === "ArrowLeft" || a === "ArrowRight";
|
|
205
|
+
case "vertical":
|
|
206
|
+
return a === "ArrowUp" || a === "ArrowDown";
|
|
207
|
+
case "both":
|
|
208
|
+
return a === "ArrowLeft" || a === "ArrowRight" || a === "ArrowUp" || a === "ArrowDown";
|
|
209
|
+
default:
|
|
210
|
+
return !1;
|
|
211
|
+
}
|
|
212
|
+
}, h = (a) => {
|
|
213
|
+
if (!u(a.key)) return;
|
|
214
|
+
const r = m();
|
|
215
|
+
if (r.length === 0) return;
|
|
216
|
+
a.preventDefault();
|
|
217
|
+
let s = l;
|
|
218
|
+
switch (a.key) {
|
|
219
|
+
case "ArrowDown":
|
|
220
|
+
case "ArrowRight":
|
|
221
|
+
s = l + 1, s >= r.length && (s = o ? 0 : r.length - 1);
|
|
222
|
+
break;
|
|
223
|
+
case "ArrowUp":
|
|
224
|
+
case "ArrowLeft":
|
|
225
|
+
s = l - 1, s < 0 && (s = o ? r.length - 1 : 0);
|
|
226
|
+
break;
|
|
227
|
+
case "Home":
|
|
228
|
+
s = 0;
|
|
229
|
+
break;
|
|
230
|
+
case "End":
|
|
231
|
+
s = r.length - 1;
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
v(s);
|
|
235
|
+
}, f = m();
|
|
236
|
+
g(f);
|
|
237
|
+
for (let a = 0; a < f.length; a++) f[a].setAttribute("tabindex", a === 0 ? "0" : "-1");
|
|
238
|
+
return e.addEventListener("keydown", h), {
|
|
239
|
+
destroy: () => {
|
|
240
|
+
e.removeEventListener("keydown", h);
|
|
241
|
+
for (const [a, r] of c) r === null ? a.removeAttribute("tabindex") : a.setAttribute("tabindex", r);
|
|
242
|
+
c.clear();
|
|
243
|
+
},
|
|
244
|
+
focusItem: (a) => {
|
|
245
|
+
v(a);
|
|
246
|
+
},
|
|
247
|
+
activeIndex: () => l
|
|
248
|
+
};
|
|
249
|
+
}, x = `
|
|
250
|
+
position: absolute;
|
|
251
|
+
top: -9999px;
|
|
252
|
+
left: -9999px;
|
|
253
|
+
z-index: 999999;
|
|
254
|
+
padding: 0.5em 1em;
|
|
255
|
+
background: #000;
|
|
256
|
+
color: #fff;
|
|
257
|
+
font-size: 1rem;
|
|
258
|
+
text-decoration: none;
|
|
259
|
+
border-radius: 0 0 4px 0;
|
|
260
|
+
outline: 2px solid #4A90D9;
|
|
261
|
+
outline-offset: 2px;
|
|
262
|
+
`, U = `
|
|
263
|
+
top: 0;
|
|
264
|
+
left: 0;
|
|
265
|
+
`, k = 0, y = /* @__PURE__ */ new Map(), H = () => typeof document > "u" ? !1 : typeof document.createElement == "function" && typeof document.querySelector == "function" && typeof document.getElementById == "function" && document.body !== null && document.body !== void 0, _ = () => ({
|
|
266
|
+
destroy: () => {
|
|
267
|
+
},
|
|
268
|
+
element: null
|
|
269
|
+
}), X = (e, t = {}) => {
|
|
270
|
+
if (!H()) return _();
|
|
271
|
+
const { text: i = "Skip to main content", className: o = "bq-skip-link" } = t;
|
|
272
|
+
let n, d;
|
|
273
|
+
const l = (r) => {
|
|
274
|
+
try {
|
|
275
|
+
return document.querySelector(r);
|
|
276
|
+
} catch {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}, c = () => {
|
|
280
|
+
if (!n) return;
|
|
281
|
+
const r = y.get(n), s = (r?.count ?? 0) - 1;
|
|
282
|
+
s <= 0 ? (y.delete(n), r?.target.isConnected && r.target.id === n && r.target.removeAttribute("id")) : y.set(n, {
|
|
283
|
+
count: s,
|
|
284
|
+
target: r.target
|
|
285
|
+
}), n = void 0;
|
|
286
|
+
}, m = () => {
|
|
287
|
+
if (!d) return;
|
|
288
|
+
const { target: r, hadTabIndex: s, previousTabIndex: b } = d;
|
|
289
|
+
r.isConnected && (s ? r.setAttribute("tabindex", b ?? "") : r.removeAttribute("tabindex")), d = void 0;
|
|
290
|
+
}, g = (r) => {
|
|
291
|
+
if (d?.target !== r) {
|
|
292
|
+
if (m(), r.hasAttribute("tabindex")) {
|
|
293
|
+
d = {
|
|
294
|
+
target: r,
|
|
295
|
+
hadTabIndex: !0,
|
|
296
|
+
previousTabIndex: r.getAttribute("tabindex")
|
|
297
|
+
};
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
r.tabIndex === -1 && (d = {
|
|
301
|
+
target: r,
|
|
302
|
+
hadTabIndex: !1,
|
|
303
|
+
previousTabIndex: null
|
|
304
|
+
}, r.setAttribute("tabindex", "-1"));
|
|
305
|
+
}
|
|
306
|
+
}, v = (r, s) => {
|
|
307
|
+
if (n === s) return;
|
|
308
|
+
c();
|
|
309
|
+
const b = y.get(s);
|
|
310
|
+
y.set(s, {
|
|
311
|
+
count: (b?.count ?? 0) + 1,
|
|
312
|
+
target: r
|
|
313
|
+
}), n = s;
|
|
314
|
+
}, u = () => {
|
|
315
|
+
if (e.startsWith("#")) {
|
|
316
|
+
const s = e.slice(1), b = s ? document.getElementById(s) : null;
|
|
317
|
+
return b || l(e);
|
|
318
|
+
}
|
|
319
|
+
const r = document.getElementById(e);
|
|
320
|
+
return r || l(e);
|
|
321
|
+
}, h = (r) => {
|
|
322
|
+
if (r.id)
|
|
323
|
+
return y.get(r.id)?.target === r && v(r, r.id), r.id;
|
|
324
|
+
let s;
|
|
325
|
+
do
|
|
326
|
+
k += 1, s = `bq-skip-target-${k}`;
|
|
327
|
+
while (document.getElementById(s) !== null);
|
|
328
|
+
return r.id = s, v(r, s), s;
|
|
329
|
+
}, f = document.createElement("a"), a = u();
|
|
330
|
+
return f.href = e.startsWith("#") ? e : a ? `#${h(a)}` : `#${e}`, f.textContent = i, f.className = o, f.setAttribute("style", x), f.addEventListener("focus", () => {
|
|
331
|
+
f.setAttribute("style", x + U);
|
|
332
|
+
}), f.addEventListener("blur", () => {
|
|
333
|
+
f.setAttribute("style", x);
|
|
334
|
+
}), f.addEventListener("click", (r) => {
|
|
335
|
+
r.preventDefault();
|
|
336
|
+
const s = u();
|
|
337
|
+
s && (f.href = `#${h(s)}`, g(s), s.focus());
|
|
338
|
+
}), document.body.firstChild ? document.body.insertBefore(f, document.body.firstChild) : document.body.appendChild(f), {
|
|
339
|
+
destroy: () => {
|
|
340
|
+
m(), c(), f.remove();
|
|
341
|
+
},
|
|
342
|
+
element: f
|
|
343
|
+
};
|
|
344
|
+
}, K = [
|
|
345
|
+
"a[href]",
|
|
346
|
+
"button:not([disabled])",
|
|
347
|
+
"input:not([disabled])",
|
|
348
|
+
"select:not([disabled])",
|
|
349
|
+
"textarea:not([disabled])",
|
|
350
|
+
'[tabindex]:not([tabindex="-1"])',
|
|
351
|
+
'[contenteditable="true"]',
|
|
352
|
+
"details > summary",
|
|
353
|
+
"audio[controls]",
|
|
354
|
+
"video[controls]"
|
|
355
|
+
].join(", "), C = (e) => Array.from(e.querySelectorAll(K)).filter((t) => !t.hasAttribute("disabled") && t.tabIndex !== -1 && t.getClientRects().length > 0), S = (e, t) => e ? typeof e == "string" ? t.querySelector(e) : e : null, Z = (e, t = {}) => {
|
|
356
|
+
const { escapeDeactivates: i = !0, onEscape: o, initialFocus: n, returnFocus: d } = t;
|
|
357
|
+
if (typeof document > "u" || typeof document.addEventListener != "function" || typeof document.removeEventListener != "function") {
|
|
358
|
+
let u = !1;
|
|
359
|
+
return {
|
|
360
|
+
get active() {
|
|
361
|
+
return u;
|
|
362
|
+
},
|
|
363
|
+
release: () => {
|
|
364
|
+
u = !1;
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
const l = document.activeElement;
|
|
369
|
+
let c = !0;
|
|
370
|
+
const m = (u) => {
|
|
371
|
+
if (!c) return;
|
|
372
|
+
if (u.key === "Escape" && i) {
|
|
373
|
+
u.preventDefault(), v.release(), o?.();
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
if (u.key !== "Tab") return;
|
|
377
|
+
const h = C(e);
|
|
378
|
+
if (h.length === 0) {
|
|
379
|
+
u.preventDefault();
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
const f = h[0], a = h[h.length - 1];
|
|
383
|
+
u.shiftKey ? (document.activeElement === f || !e.contains(document.activeElement)) && (u.preventDefault(), a.focus()) : (document.activeElement === a || !e.contains(document.activeElement)) && (u.preventDefault(), f.focus());
|
|
384
|
+
};
|
|
385
|
+
document.addEventListener("keydown", m, !0);
|
|
386
|
+
const g = S(n, e);
|
|
387
|
+
if (g) g.focus();
|
|
388
|
+
else {
|
|
389
|
+
const u = C(e);
|
|
390
|
+
u.length > 0 && u[0].focus();
|
|
391
|
+
}
|
|
392
|
+
const v = {
|
|
393
|
+
get active() {
|
|
394
|
+
return c;
|
|
395
|
+
},
|
|
396
|
+
release: () => {
|
|
397
|
+
if (!c) return;
|
|
398
|
+
c = !1, document.removeEventListener("keydown", m, !0);
|
|
399
|
+
const u = S(d, document.body);
|
|
400
|
+
u ? u.focus() : l && l.focus && l.focus();
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
return v;
|
|
404
|
+
}, ee = (e) => {
|
|
405
|
+
e.release();
|
|
406
|
+
};
|
|
407
|
+
export {
|
|
408
|
+
V as a,
|
|
409
|
+
P as c,
|
|
410
|
+
W as d,
|
|
411
|
+
X as i,
|
|
412
|
+
Y as l,
|
|
413
|
+
ee as n,
|
|
414
|
+
Q as o,
|
|
415
|
+
Z as r,
|
|
416
|
+
J as s,
|
|
417
|
+
C as t,
|
|
418
|
+
G as u
|
|
419
|
+
};
|
|
420
|
+
|
|
421
|
+
//# sourceMappingURL=a11y-DVBCy09c.js.map
|