@bquery/bquery 1.7.0 → 1.8.2
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 +760 -716
- package/dist/{a11y-C5QOVvRn.js → a11y-DVBCy09c.js} +3 -3
- package/dist/a11y-DVBCy09c.js.map +1 -0
- package/dist/a11y.es.mjs +1 -1
- package/dist/component/library.d.ts.map +1 -1
- package/dist/{component-CuuTijA6.js → component-L3-JfOFz.js} +5 -5
- package/dist/component-L3-JfOFz.js.map +1 -0
- package/dist/component.es.mjs +1 -1
- package/dist/{config-BW35FKuA.js → config-DhT9auRm.js} +1 -1
- package/dist/{config-BW35FKuA.js.map → config-DhT9auRm.js.map} +1 -1
- package/dist/{constraints-3lV9yyBw.js → constraints-D5RHQLmP.js} +1 -1
- package/dist/constraints-D5RHQLmP.js.map +1 -0
- package/dist/core/collection.d.ts +86 -0
- package/dist/core/collection.d.ts.map +1 -1
- package/dist/core/element.d.ts +28 -0
- package/dist/core/element.d.ts.map +1 -1
- package/dist/core/shared.d.ts +6 -0
- package/dist/core/shared.d.ts.map +1 -1
- package/dist/core-DdtZHzsS.js +168 -0
- package/dist/core-DdtZHzsS.js.map +1 -0
- package/dist/{core-Cjl7GUu8.js → core-EMYSLzaT.js} +289 -259
- package/dist/core-EMYSLzaT.js.map +1 -0
- package/dist/core.es.mjs +48 -47
- package/dist/{custom-directives-7wAShnnd.js → custom-directives-Dr4C5lVV.js} +1 -1
- package/dist/custom-directives-Dr4C5lVV.js.map +1 -0
- package/dist/{devtools-D2fQLhDN.js → devtools-BhB2iDPT.js} +2 -2
- package/dist/devtools-BhB2iDPT.js.map +1 -0
- package/dist/devtools.es.mjs +1 -1
- package/dist/{dnd-B8EgyzaI.js → dnd-NwZBYh4l.js} +1 -1
- package/dist/dnd-NwZBYh4l.js.map +1 -0
- package/dist/dnd.es.mjs +1 -1
- package/dist/{env-NeVmr4Gf.js → env-CTdvLaH2.js} +1 -1
- package/dist/env-CTdvLaH2.js.map +1 -0
- package/dist/forms/create-form.d.ts.map +1 -1
- package/dist/forms/index.d.ts +3 -2
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/types.d.ts +46 -0
- package/dist/forms/types.d.ts.map +1 -1
- 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 +25 -0
- package/dist/forms/validators.d.ts.map +1 -1
- package/dist/forms-UcRHsYxC.js +227 -0
- package/dist/forms-UcRHsYxC.js.map +1 -0
- package/dist/forms.es.mjs +14 -12
- package/dist/full.d.ts +17 -26
- package/dist/full.d.ts.map +1 -1
- package/dist/full.es.mjs +206 -181
- package/dist/full.iife.js +33 -33
- package/dist/full.iife.js.map +1 -1
- package/dist/full.umd.js +33 -33
- 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-BnnhTFOS.js → i18n-kuF6Ekj6.js} +3 -3
- package/dist/i18n-kuF6Ekj6.js.map +1 -0
- package/dist/i18n.es.mjs +1 -1
- package/dist/index.es.mjs +251 -228
- package/dist/media/breakpoints.d.ts.map +1 -1
- package/dist/media/types.d.ts +2 -2
- package/dist/media/types.d.ts.map +1 -1
- package/dist/{media-Di2Ta22s.js → media-i-fB5WxI.js} +3 -3
- package/dist/media-i-fB5WxI.js.map +1 -0
- package/dist/media.es.mjs +1 -1
- package/dist/{motion-qPj_TYGv.js → motion-BJsAuULb.js} +2 -2
- package/dist/motion-BJsAuULb.js.map +1 -0
- package/dist/motion.es.mjs +1 -1
- package/dist/{mount-SM07RUa6.js → mount-B4Y8bk8Z.js} +5 -5
- package/dist/mount-B4Y8bk8Z.js.map +1 -0
- package/dist/{platform-CPbCprb6.js → platform-Dw2gE3zI.js} +3 -3
- package/dist/{platform-CPbCprb6.js.map → platform-Dw2gE3zI.js.map} +1 -1
- package/dist/platform.es.mjs +2 -2
- package/dist/plugin/registry.d.ts.map +1 -1
- package/dist/{plugin-cPoOHFLY.js → plugin-C2WuC8SF.js} +20 -18
- package/dist/plugin-C2WuC8SF.js.map +1 -0
- package/dist/plugin.es.mjs +1 -1
- 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 +3 -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 -19
- package/dist/{registry-CWf368tT.js → registry-B08iilIh.js} +1 -1
- package/dist/{registry-CWf368tT.js.map → registry-B08iilIh.js.map} +1 -1
- package/dist/router/constraints.d.ts.map +1 -1
- package/dist/router/index.d.ts +1 -1
- package/dist/router/index.d.ts.map +1 -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-CQikC9Ed.js +492 -0
- package/dist/router-CQikC9Ed.js.map +1 -0
- package/dist/router.es.mjs +9 -8
- package/dist/ssr/hydrate.d.ts.map +1 -1
- package/dist/{ssr-B2qd_WBB.js → ssr-_dAcGdzu.js} +4 -4
- package/dist/ssr-_dAcGdzu.js.map +1 -0
- package/dist/ssr.es.mjs +1 -1
- package/dist/store/persisted.d.ts.map +1 -1
- package/dist/{store-DWpyH6p5.js → store-Cb3gPRve.js} +7 -7
- package/dist/store-Cb3gPRve.js.map +1 -0
- package/dist/store.es.mjs +2 -2
- package/dist/storybook.es.mjs.map +1 -1
- package/dist/{testing-CsqjNUyy.js → testing-C5Sjfsna.js} +8 -8
- package/dist/testing-C5Sjfsna.js.map +1 -0
- package/dist/testing.es.mjs +1 -1
- package/dist/{type-guards-Do9DWgNp.js → type-guards-BMX2c0LP.js} +1 -1
- package/dist/{type-guards-Do9DWgNp.js.map → type-guards-BMX2c0LP.js.map} +1 -1
- package/dist/untrack-D0fnO5k2.js +36 -0
- package/dist/untrack-D0fnO5k2.js.map +1 -0
- package/dist/view/custom-directives.d.ts.map +1 -1
- package/dist/view.es.mjs +4 -4
- package/package.json +178 -177
- package/src/a11y/announce.ts +131 -131
- package/src/a11y/audit.ts +314 -314
- package/src/a11y/index.ts +68 -68
- package/src/a11y/media-preferences.ts +255 -255
- package/src/a11y/roving-tab-index.ts +164 -164
- package/src/a11y/skip-link.ts +255 -255
- package/src/a11y/trap-focus.ts +184 -184
- package/src/a11y/types.ts +183 -183
- package/src/component/component.ts +599 -599
- package/src/component/html.ts +153 -153
- package/src/component/index.ts +52 -52
- package/src/component/library.ts +540 -542
- package/src/component/scope.ts +212 -212
- package/src/component/types.ts +310 -310
- package/src/core/collection.ts +876 -707
- package/src/core/element.ts +1015 -981
- package/src/core/env.ts +60 -60
- package/src/core/index.ts +49 -49
- package/src/core/shared.ts +77 -62
- package/src/core/utils/index.ts +148 -148
- package/src/devtools/devtools.ts +410 -410
- package/src/devtools/index.ts +48 -48
- package/src/devtools/types.ts +104 -104
- package/src/dnd/draggable.ts +296 -296
- package/src/dnd/droppable.ts +228 -228
- package/src/dnd/index.ts +62 -62
- package/src/dnd/sortable.ts +307 -307
- package/src/dnd/types.ts +293 -293
- package/src/forms/create-form.ts +320 -278
- package/src/forms/index.ts +70 -65
- package/src/forms/types.ts +203 -154
- package/src/forms/use-field.ts +231 -0
- package/src/forms/validators.ts +294 -265
- package/src/full.ts +554 -480
- package/src/i18n/formatting.ts +67 -67
- package/src/i18n/i18n.ts +200 -200
- package/src/i18n/index.ts +67 -67
- package/src/i18n/translate.ts +182 -182
- package/src/i18n/types.ts +171 -171
- package/src/index.ts +108 -108
- package/src/media/battery.ts +116 -116
- package/src/media/breakpoints.ts +129 -131
- package/src/media/clipboard.ts +80 -80
- package/src/media/device-sensors.ts +158 -158
- package/src/media/geolocation.ts +119 -119
- package/src/media/index.ts +76 -76
- package/src/media/media-query.ts +92 -92
- package/src/media/network.ts +115 -115
- package/src/media/types.ts +177 -177
- package/src/media/viewport.ts +84 -84
- package/src/motion/index.ts +57 -57
- package/src/motion/morph.ts +151 -151
- package/src/motion/parallax.ts +120 -120
- package/src/motion/reduced-motion.ts +66 -66
- package/src/motion/types.ts +271 -271
- package/src/motion/typewriter.ts +164 -164
- package/src/plugin/index.ts +37 -37
- package/src/plugin/registry.ts +284 -269
- package/src/plugin/types.ts +137 -137
- package/src/reactive/async-data.ts +250 -29
- package/src/reactive/computed.ts +144 -130
- 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 -279
- package/src/router/constraints.ts +204 -201
- package/src/router/index.ts +49 -49
- package/src/router/match.ts +312 -312
- package/src/router/path-pattern.ts +52 -52
- package/src/router/query.ts +38 -38
- package/src/router/router.ts +421 -402
- package/src/router/state.ts +51 -3
- package/src/router/types.ts +139 -139
- package/src/router/use-route.ts +68 -68
- package/src/router/utils.ts +157 -157
- package/src/security/index.ts +12 -12
- package/src/ssr/hydrate.ts +84 -82
- package/src/ssr/index.ts +70 -70
- package/src/ssr/render.ts +508 -508
- package/src/ssr/serialize.ts +296 -296
- package/src/ssr/types.ts +81 -81
- package/src/store/create-store.ts +467 -467
- package/src/store/index.ts +27 -27
- package/src/store/persisted.ts +245 -249
- package/src/store/types.ts +247 -247
- package/src/store/utils.ts +135 -135
- package/src/storybook/index.ts +480 -480
- package/src/testing/index.ts +42 -42
- package/src/testing/testing.ts +593 -593
- package/src/testing/types.ts +170 -170
- package/src/view/custom-directives.ts +28 -30
- package/src/view/evaluate.ts +292 -292
- package/src/view/process.ts +108 -108
- package/dist/a11y-C5QOVvRn.js.map +0 -1
- package/dist/component-CuuTijA6.js.map +0 -1
- package/dist/constraints-3lV9yyBw.js.map +0 -1
- package/dist/core-Cjl7GUu8.js.map +0 -1
- package/dist/core-DnlyjbF2.js +0 -112
- package/dist/core-DnlyjbF2.js.map +0 -1
- package/dist/custom-directives-7wAShnnd.js.map +0 -1
- package/dist/devtools-D2fQLhDN.js.map +0 -1
- package/dist/dnd-B8EgyzaI.js.map +0 -1
- package/dist/env-NeVmr4Gf.js.map +0 -1
- package/dist/forms-C3yovgH9.js +0 -141
- package/dist/forms-C3yovgH9.js.map +0 -1
- package/dist/i18n-BnnhTFOS.js.map +0 -1
- package/dist/media-Di2Ta22s.js.map +0 -1
- package/dist/motion-qPj_TYGv.js.map +0 -1
- package/dist/mount-SM07RUa6.js.map +0 -1
- package/dist/plugin-cPoOHFLY.js.map +0 -1
- package/dist/reactive-Cfv0RK6x.js +0 -233
- package/dist/reactive-Cfv0RK6x.js.map +0 -1
- package/dist/router-BrthaP_z.js +0 -473
- package/dist/router-BrthaP_z.js.map +0 -1
- package/dist/ssr-B2qd_WBB.js.map +0 -1
- package/dist/store-DWpyH6p5.js.map +0 -1
- package/dist/testing-CsqjNUyy.js.map +0 -1
- package/dist/untrack-DJVQQ2WM.js +0 -33
- package/dist/untrack-DJVQQ2WM.js.map +0 -1
package/dist/view.es.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { n as a, r as o } from "./core-
|
|
2
|
-
import {
|
|
3
|
-
import { r as s } from "./untrack-
|
|
4
|
-
import { n as c, r as f, t as i } from "./mount-
|
|
1
|
+
import { n as a, r as o } from "./core-DdtZHzsS.js";
|
|
2
|
+
import { D as e } from "./reactive-DwkhUJfP.js";
|
|
3
|
+
import { r as s } from "./untrack-D0fnO5k2.js";
|
|
4
|
+
import { n as c, r as f, t as i } from "./mount-B4Y8bk8Z.js";
|
|
5
5
|
export {
|
|
6
6
|
e as batch,
|
|
7
7
|
f as clearExpressionCache,
|
package/package.json
CHANGED
|
@@ -1,177 +1,178 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@bquery/bquery",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "The jQuery for the Modern Web Platform - Zero build, TypeScript-first library with reactivity, components, and motion",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/full.umd.js",
|
|
7
|
-
"module": "./dist/index.es.mjs",
|
|
8
|
-
"types": "./dist/index.d.ts",
|
|
9
|
-
"unpkg": "./dist/full.umd.js",
|
|
10
|
-
"jsdelivr": "./dist/full.umd.js",
|
|
11
|
-
"exports": {
|
|
12
|
-
".": {
|
|
13
|
-
"types": "./dist/index.d.ts",
|
|
14
|
-
"import": "./dist/index.es.mjs",
|
|
15
|
-
"require": "./dist/full.umd.js"
|
|
16
|
-
},
|
|
17
|
-
"./full": {
|
|
18
|
-
"types": "./dist/full.d.ts",
|
|
19
|
-
"import": "./dist/full.es.mjs",
|
|
20
|
-
"require": "./dist/full.umd.js"
|
|
21
|
-
},
|
|
22
|
-
"./core": {
|
|
23
|
-
"import": "./dist/core.es.mjs",
|
|
24
|
-
"types": "./dist/core/index.d.ts"
|
|
25
|
-
},
|
|
26
|
-
"./reactive": {
|
|
27
|
-
"import": "./dist/reactive.es.mjs",
|
|
28
|
-
"types": "./dist/reactive/index.d.ts"
|
|
29
|
-
},
|
|
30
|
-
"./component": {
|
|
31
|
-
"import": "./dist/component.es.mjs",
|
|
32
|
-
"types": "./dist/component/index.d.ts"
|
|
33
|
-
},
|
|
34
|
-
"./motion": {
|
|
35
|
-
"import": "./dist/motion.es.mjs",
|
|
36
|
-
"types": "./dist/motion/index.d.ts"
|
|
37
|
-
},
|
|
38
|
-
"./security": {
|
|
39
|
-
"import": "./dist/security.es.mjs",
|
|
40
|
-
"types": "./dist/security/index.d.ts"
|
|
41
|
-
},
|
|
42
|
-
"./platform": {
|
|
43
|
-
"import": "./dist/platform.es.mjs",
|
|
44
|
-
"types": "./dist/platform/index.d.ts"
|
|
45
|
-
},
|
|
46
|
-
"./router": {
|
|
47
|
-
"import": "./dist/router.es.mjs",
|
|
48
|
-
"types": "./dist/router/index.d.ts"
|
|
49
|
-
},
|
|
50
|
-
"./store": {
|
|
51
|
-
"import": "./dist/store.es.mjs",
|
|
52
|
-
"types": "./dist/store/index.d.ts"
|
|
53
|
-
},
|
|
54
|
-
"./view": {
|
|
55
|
-
"import": "./dist/view.es.mjs",
|
|
56
|
-
"types": "./dist/view/index.d.ts"
|
|
57
|
-
},
|
|
58
|
-
"./storybook": {
|
|
59
|
-
"import": "./dist/storybook.es.mjs",
|
|
60
|
-
"types": "./dist/storybook/index.d.ts"
|
|
61
|
-
},
|
|
62
|
-
"./forms": {
|
|
63
|
-
"import": "./dist/forms.es.mjs",
|
|
64
|
-
"types": "./dist/forms/index.d.ts"
|
|
65
|
-
},
|
|
66
|
-
"./i18n": {
|
|
67
|
-
"import": "./dist/i18n.es.mjs",
|
|
68
|
-
"types": "./dist/i18n/index.d.ts"
|
|
69
|
-
},
|
|
70
|
-
"./a11y": {
|
|
71
|
-
"import": "./dist/a11y.es.mjs",
|
|
72
|
-
"types": "./dist/a11y/index.d.ts"
|
|
73
|
-
},
|
|
74
|
-
"./dnd": {
|
|
75
|
-
"import": "./dist/dnd.es.mjs",
|
|
76
|
-
"types": "./dist/dnd/index.d.ts"
|
|
77
|
-
},
|
|
78
|
-
"./media": {
|
|
79
|
-
"import": "./dist/media.es.mjs",
|
|
80
|
-
"types": "./dist/media/index.d.ts"
|
|
81
|
-
},
|
|
82
|
-
"./plugin": {
|
|
83
|
-
"import": "./dist/plugin.es.mjs",
|
|
84
|
-
"types": "./dist/plugin/index.d.ts"
|
|
85
|
-
},
|
|
86
|
-
"./devtools": {
|
|
87
|
-
"import": "./dist/devtools.es.mjs",
|
|
88
|
-
"types": "./dist/devtools/index.d.ts"
|
|
89
|
-
},
|
|
90
|
-
"./testing": {
|
|
91
|
-
"import": "./dist/testing.es.mjs",
|
|
92
|
-
"types": "./dist/testing/index.d.ts"
|
|
93
|
-
},
|
|
94
|
-
"./ssr": {
|
|
95
|
-
"import": "./dist/ssr.es.mjs",
|
|
96
|
-
"types": "./dist/ssr/index.d.ts"
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
"files": [
|
|
100
|
-
"dist",
|
|
101
|
-
"src",
|
|
102
|
-
"README.md",
|
|
103
|
-
"LICENSE.md"
|
|
104
|
-
],
|
|
105
|
-
"sideEffects": false,
|
|
106
|
-
"scripts": {
|
|
107
|
-
"dev": "vitepress dev docs",
|
|
108
|
-
"build:docs": "vitepress build docs",
|
|
109
|
-
"preview": "vitepress preview docs",
|
|
110
|
-
"storybook": "storybook dev -p 6006",
|
|
111
|
-
"build:storybook": "storybook build",
|
|
112
|
-
"build": "bun run build:lib && bun run build:umd && bun run build:types",
|
|
113
|
-
"build:lib": "vite build",
|
|
114
|
-
"build:umd": "vite build --config vite.umd.config.ts",
|
|
115
|
-
"build:types": "tsc --emitDeclarationOnly --outDir dist",
|
|
116
|
-
"test": "bun test",
|
|
117
|
-
"test:types": "tsc -p tsconfig.component-test.json --noEmit",
|
|
118
|
-
"test:watch": "bun test --watch",
|
|
119
|
-
"lint": "eslint . --fix",
|
|
120
|
-
"lint:types": "tsc --noEmit",
|
|
121
|
-
"format": "prettier --write .",
|
|
122
|
-
"format:check": "prettier --check .",
|
|
123
|
-
"docs:api": "typedoc",
|
|
124
|
-
"clean": "rimraf dist",
|
|
125
|
-
"prepublishOnly": "bun run clean && bun run build && bun test"
|
|
126
|
-
},
|
|
127
|
-
"keywords": [
|
|
128
|
-
"dom",
|
|
129
|
-
"manipulation",
|
|
130
|
-
"jquery",
|
|
131
|
-
"modern",
|
|
132
|
-
"typescript",
|
|
133
|
-
"signals",
|
|
134
|
-
"reactive",
|
|
135
|
-
"components",
|
|
136
|
-
"web-components",
|
|
137
|
-
"animation",
|
|
138
|
-
"motion",
|
|
139
|
-
"zero-build",
|
|
140
|
-
"cdn"
|
|
141
|
-
],
|
|
142
|
-
"author": "Jonas Pfalzgraf <support@josunlp.de>",
|
|
143
|
-
"license": "MIT",
|
|
144
|
-
"repository": {
|
|
145
|
-
"type": "git",
|
|
146
|
-
"url": "https://github.com/bQuery/bQuery.git"
|
|
147
|
-
},
|
|
148
|
-
"homepage": "https://bQuery.flausch-code.de",
|
|
149
|
-
"bugs": {
|
|
150
|
-
"url": "https://github.com/bQuery/bQuery/issues"
|
|
151
|
-
},
|
|
152
|
-
"publishConfig": {
|
|
153
|
-
"access": "public",
|
|
154
|
-
"registry": "https://registry.npmjs.org/"
|
|
155
|
-
},
|
|
156
|
-
"engines": {
|
|
157
|
-
"node": ">=
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
"@storybook/
|
|
162
|
-
"@
|
|
163
|
-
"@typescript-eslint/
|
|
164
|
-
"
|
|
165
|
-
"
|
|
166
|
-
"eslint
|
|
167
|
-
"
|
|
168
|
-
"
|
|
169
|
-
"
|
|
170
|
-
"
|
|
171
|
-
"
|
|
172
|
-
"
|
|
173
|
-
"
|
|
174
|
-
"
|
|
175
|
-
"
|
|
176
|
-
|
|
177
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@bquery/bquery",
|
|
3
|
+
"version": "1.8.2",
|
|
4
|
+
"description": "The jQuery for the Modern Web Platform - Zero build, TypeScript-first library with reactivity, components, and motion",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/full.umd.js",
|
|
7
|
+
"module": "./dist/index.es.mjs",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"unpkg": "./dist/full.umd.js",
|
|
10
|
+
"jsdelivr": "./dist/full.umd.js",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.es.mjs",
|
|
15
|
+
"require": "./dist/full.umd.js"
|
|
16
|
+
},
|
|
17
|
+
"./full": {
|
|
18
|
+
"types": "./dist/full.d.ts",
|
|
19
|
+
"import": "./dist/full.es.mjs",
|
|
20
|
+
"require": "./dist/full.umd.js"
|
|
21
|
+
},
|
|
22
|
+
"./core": {
|
|
23
|
+
"import": "./dist/core.es.mjs",
|
|
24
|
+
"types": "./dist/core/index.d.ts"
|
|
25
|
+
},
|
|
26
|
+
"./reactive": {
|
|
27
|
+
"import": "./dist/reactive.es.mjs",
|
|
28
|
+
"types": "./dist/reactive/index.d.ts"
|
|
29
|
+
},
|
|
30
|
+
"./component": {
|
|
31
|
+
"import": "./dist/component.es.mjs",
|
|
32
|
+
"types": "./dist/component/index.d.ts"
|
|
33
|
+
},
|
|
34
|
+
"./motion": {
|
|
35
|
+
"import": "./dist/motion.es.mjs",
|
|
36
|
+
"types": "./dist/motion/index.d.ts"
|
|
37
|
+
},
|
|
38
|
+
"./security": {
|
|
39
|
+
"import": "./dist/security.es.mjs",
|
|
40
|
+
"types": "./dist/security/index.d.ts"
|
|
41
|
+
},
|
|
42
|
+
"./platform": {
|
|
43
|
+
"import": "./dist/platform.es.mjs",
|
|
44
|
+
"types": "./dist/platform/index.d.ts"
|
|
45
|
+
},
|
|
46
|
+
"./router": {
|
|
47
|
+
"import": "./dist/router.es.mjs",
|
|
48
|
+
"types": "./dist/router/index.d.ts"
|
|
49
|
+
},
|
|
50
|
+
"./store": {
|
|
51
|
+
"import": "./dist/store.es.mjs",
|
|
52
|
+
"types": "./dist/store/index.d.ts"
|
|
53
|
+
},
|
|
54
|
+
"./view": {
|
|
55
|
+
"import": "./dist/view.es.mjs",
|
|
56
|
+
"types": "./dist/view/index.d.ts"
|
|
57
|
+
},
|
|
58
|
+
"./storybook": {
|
|
59
|
+
"import": "./dist/storybook.es.mjs",
|
|
60
|
+
"types": "./dist/storybook/index.d.ts"
|
|
61
|
+
},
|
|
62
|
+
"./forms": {
|
|
63
|
+
"import": "./dist/forms.es.mjs",
|
|
64
|
+
"types": "./dist/forms/index.d.ts"
|
|
65
|
+
},
|
|
66
|
+
"./i18n": {
|
|
67
|
+
"import": "./dist/i18n.es.mjs",
|
|
68
|
+
"types": "./dist/i18n/index.d.ts"
|
|
69
|
+
},
|
|
70
|
+
"./a11y": {
|
|
71
|
+
"import": "./dist/a11y.es.mjs",
|
|
72
|
+
"types": "./dist/a11y/index.d.ts"
|
|
73
|
+
},
|
|
74
|
+
"./dnd": {
|
|
75
|
+
"import": "./dist/dnd.es.mjs",
|
|
76
|
+
"types": "./dist/dnd/index.d.ts"
|
|
77
|
+
},
|
|
78
|
+
"./media": {
|
|
79
|
+
"import": "./dist/media.es.mjs",
|
|
80
|
+
"types": "./dist/media/index.d.ts"
|
|
81
|
+
},
|
|
82
|
+
"./plugin": {
|
|
83
|
+
"import": "./dist/plugin.es.mjs",
|
|
84
|
+
"types": "./dist/plugin/index.d.ts"
|
|
85
|
+
},
|
|
86
|
+
"./devtools": {
|
|
87
|
+
"import": "./dist/devtools.es.mjs",
|
|
88
|
+
"types": "./dist/devtools/index.d.ts"
|
|
89
|
+
},
|
|
90
|
+
"./testing": {
|
|
91
|
+
"import": "./dist/testing.es.mjs",
|
|
92
|
+
"types": "./dist/testing/index.d.ts"
|
|
93
|
+
},
|
|
94
|
+
"./ssr": {
|
|
95
|
+
"import": "./dist/ssr.es.mjs",
|
|
96
|
+
"types": "./dist/ssr/index.d.ts"
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"files": [
|
|
100
|
+
"dist",
|
|
101
|
+
"src",
|
|
102
|
+
"README.md",
|
|
103
|
+
"LICENSE.md"
|
|
104
|
+
],
|
|
105
|
+
"sideEffects": false,
|
|
106
|
+
"scripts": {
|
|
107
|
+
"dev": "vitepress dev docs",
|
|
108
|
+
"build:docs": "vitepress build docs",
|
|
109
|
+
"preview": "vitepress preview docs",
|
|
110
|
+
"storybook": "storybook dev -p 6006",
|
|
111
|
+
"build:storybook": "storybook build",
|
|
112
|
+
"build": "bun run build:lib && bun run build:umd && bun run build:types",
|
|
113
|
+
"build:lib": "vite build",
|
|
114
|
+
"build:umd": "vite build --config vite.umd.config.ts",
|
|
115
|
+
"build:types": "tsc --emitDeclarationOnly --outDir dist",
|
|
116
|
+
"test": "bun test",
|
|
117
|
+
"test:types": "tsc -p tsconfig.component-test.json --noEmit",
|
|
118
|
+
"test:watch": "bun test --watch",
|
|
119
|
+
"lint": "eslint . --fix",
|
|
120
|
+
"lint:types": "tsc --noEmit",
|
|
121
|
+
"format": "prettier --write .",
|
|
122
|
+
"format:check": "prettier --check .",
|
|
123
|
+
"docs:api": "typedoc",
|
|
124
|
+
"clean": "rimraf dist",
|
|
125
|
+
"prepublishOnly": "bun run clean && bun run build && bun test"
|
|
126
|
+
},
|
|
127
|
+
"keywords": [
|
|
128
|
+
"dom",
|
|
129
|
+
"manipulation",
|
|
130
|
+
"jquery",
|
|
131
|
+
"modern",
|
|
132
|
+
"typescript",
|
|
133
|
+
"signals",
|
|
134
|
+
"reactive",
|
|
135
|
+
"components",
|
|
136
|
+
"web-components",
|
|
137
|
+
"animation",
|
|
138
|
+
"motion",
|
|
139
|
+
"zero-build",
|
|
140
|
+
"cdn"
|
|
141
|
+
],
|
|
142
|
+
"author": "Jonas Pfalzgraf <support@josunlp.de>",
|
|
143
|
+
"license": "MIT",
|
|
144
|
+
"repository": {
|
|
145
|
+
"type": "git",
|
|
146
|
+
"url": "https://github.com/bQuery/bQuery.git"
|
|
147
|
+
},
|
|
148
|
+
"homepage": "https://bQuery.flausch-code.de",
|
|
149
|
+
"bugs": {
|
|
150
|
+
"url": "https://github.com/bQuery/bQuery/issues"
|
|
151
|
+
},
|
|
152
|
+
"publishConfig": {
|
|
153
|
+
"access": "public",
|
|
154
|
+
"registry": "https://registry.npmjs.org/"
|
|
155
|
+
},
|
|
156
|
+
"engines": {
|
|
157
|
+
"node": ">=24.0.0",
|
|
158
|
+
"bun": ">=1.3.11"
|
|
159
|
+
},
|
|
160
|
+
"devDependencies": {
|
|
161
|
+
"@storybook/addon-docs": "^10.3.3",
|
|
162
|
+
"@storybook/web-components-vite": "^10.3.3",
|
|
163
|
+
"@typescript-eslint/eslint-plugin": "^8.58.0",
|
|
164
|
+
"@typescript-eslint/parser": "^8.58.0",
|
|
165
|
+
"bun-types": "^1.3.11",
|
|
166
|
+
"eslint": "^10.1.0",
|
|
167
|
+
"eslint-config-prettier": "^10.1.8",
|
|
168
|
+
"globals": "^17.4.0",
|
|
169
|
+
"happy-dom": "^20.8.9",
|
|
170
|
+
"prettier": "^3.8.1",
|
|
171
|
+
"rimraf": "^6.1.3",
|
|
172
|
+
"storybook": "^10.3.3",
|
|
173
|
+
"typedoc": "^0.28.18",
|
|
174
|
+
"typescript": "^5.9.3",
|
|
175
|
+
"vite": "^8.0.3",
|
|
176
|
+
"vitepress": "^1.6.4"
|
|
177
|
+
}
|
|
178
|
+
}
|
package/src/a11y/announce.ts
CHANGED
|
@@ -1,131 +1,131 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Screen reader announcement utility using ARIA live regions.
|
|
3
|
-
*
|
|
4
|
-
* Creates and manages off-screen live regions to announce dynamic
|
|
5
|
-
* content changes to assistive technologies.
|
|
6
|
-
*
|
|
7
|
-
* @module bquery/a11y
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import type { AnnouncePriority } from './types';
|
|
11
|
-
|
|
12
|
-
/** Cache for live region containers, keyed by priority. */
|
|
13
|
-
const liveRegions = new Map<AnnouncePriority, HTMLElement>();
|
|
14
|
-
const pendingAnnouncements = new Map<AnnouncePriority, ReturnType<typeof setTimeout>>();
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Delay in milliseconds before updating the live region text.
|
|
18
|
-
* This ensures screen readers detect the content change even when
|
|
19
|
-
* the same message is announced consecutively — clearing first and
|
|
20
|
-
* setting after a short timer delay forces a new live-region mutation event.
|
|
21
|
-
* @internal
|
|
22
|
-
*/
|
|
23
|
-
const ANNOUNCEMENT_DELAY_MS = 50;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Gets or creates a visually-hidden ARIA live region for the given priority.
|
|
27
|
-
*
|
|
28
|
-
* @param priority - The aria-live priority level
|
|
29
|
-
* @returns The live region element
|
|
30
|
-
* @internal
|
|
31
|
-
*/
|
|
32
|
-
const getOrCreateLiveRegion = (priority: AnnouncePriority): HTMLElement => {
|
|
33
|
-
const existing = liveRegions.get(priority);
|
|
34
|
-
if (existing && existing.isConnected) {
|
|
35
|
-
return existing;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
const el = document.createElement('div');
|
|
39
|
-
el.setAttribute('aria-live', priority);
|
|
40
|
-
el.setAttribute('aria-atomic', 'true');
|
|
41
|
-
el.setAttribute('role', priority === 'assertive' ? 'alert' : 'status');
|
|
42
|
-
|
|
43
|
-
// Visually hidden but accessible to screen readers
|
|
44
|
-
Object.assign(el.style, {
|
|
45
|
-
position: 'absolute',
|
|
46
|
-
width: '1px',
|
|
47
|
-
height: '1px',
|
|
48
|
-
padding: '0',
|
|
49
|
-
margin: '-1px',
|
|
50
|
-
overflow: 'hidden',
|
|
51
|
-
clip: 'rect(0, 0, 0, 0)',
|
|
52
|
-
whiteSpace: 'nowrap',
|
|
53
|
-
border: '0',
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
document.body.appendChild(el);
|
|
57
|
-
liveRegions.set(priority, el);
|
|
58
|
-
|
|
59
|
-
return el;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Announces a message to screen readers via an ARIA live region.
|
|
64
|
-
*
|
|
65
|
-
* The message is injected into a visually-hidden live region element.
|
|
66
|
-
* Screen readers will pick up the change and announce it to the user.
|
|
67
|
-
*
|
|
68
|
-
* @param message - The text message to announce
|
|
69
|
-
* @param priority - The urgency level: `'polite'` (default) or `'assertive'`
|
|
70
|
-
*
|
|
71
|
-
* @example
|
|
72
|
-
* ```ts
|
|
73
|
-
* import { announceToScreenReader } from '@bquery/bquery/a11y';
|
|
74
|
-
*
|
|
75
|
-
* // Polite announcement (waits for idle)
|
|
76
|
-
* announceToScreenReader('3 search results found');
|
|
77
|
-
*
|
|
78
|
-
* // Assertive announcement (interrupts current speech)
|
|
79
|
-
* announceToScreenReader('Error: Please fix the form', 'assertive');
|
|
80
|
-
* ```
|
|
81
|
-
*/
|
|
82
|
-
export const announceToScreenReader = (
|
|
83
|
-
message: string,
|
|
84
|
-
priority: AnnouncePriority = 'polite'
|
|
85
|
-
): void => {
|
|
86
|
-
if (!message) return;
|
|
87
|
-
if (typeof document === 'undefined' || !document.body) return;
|
|
88
|
-
|
|
89
|
-
const region = getOrCreateLiveRegion(priority);
|
|
90
|
-
const pendingTimeout = pendingAnnouncements.get(priority);
|
|
91
|
-
if (pendingTimeout !== undefined) {
|
|
92
|
-
clearTimeout(pendingTimeout);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Clear first, then set after a short timer delay to ensure screen readers
|
|
96
|
-
// detect the change even if the same message is announced twice.
|
|
97
|
-
region.textContent = '';
|
|
98
|
-
|
|
99
|
-
// Use setTimeout to ensure the DOM update triggers a live region change event
|
|
100
|
-
const timeout = setTimeout(() => {
|
|
101
|
-
pendingAnnouncements.delete(priority);
|
|
102
|
-
if (region.isConnected) {
|
|
103
|
-
region.textContent = message;
|
|
104
|
-
}
|
|
105
|
-
}, ANNOUNCEMENT_DELAY_MS);
|
|
106
|
-
|
|
107
|
-
pendingAnnouncements.set(priority, timeout);
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Removes all live region elements created by `announceToScreenReader`.
|
|
112
|
-
* Useful for cleanup in tests or when unmounting an application.
|
|
113
|
-
*
|
|
114
|
-
* @example
|
|
115
|
-
* ```ts
|
|
116
|
-
* import { clearAnnouncements } from '@bquery/bquery/a11y';
|
|
117
|
-
*
|
|
118
|
-
* clearAnnouncements();
|
|
119
|
-
* ```
|
|
120
|
-
*/
|
|
121
|
-
export const clearAnnouncements = (): void => {
|
|
122
|
-
for (const timeout of pendingAnnouncements.values()) {
|
|
123
|
-
clearTimeout(timeout);
|
|
124
|
-
}
|
|
125
|
-
pendingAnnouncements.clear();
|
|
126
|
-
|
|
127
|
-
for (const [, el] of liveRegions) {
|
|
128
|
-
el.remove();
|
|
129
|
-
}
|
|
130
|
-
liveRegions.clear();
|
|
131
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Screen reader announcement utility using ARIA live regions.
|
|
3
|
+
*
|
|
4
|
+
* Creates and manages off-screen live regions to announce dynamic
|
|
5
|
+
* content changes to assistive technologies.
|
|
6
|
+
*
|
|
7
|
+
* @module bquery/a11y
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { AnnouncePriority } from './types';
|
|
11
|
+
|
|
12
|
+
/** Cache for live region containers, keyed by priority. */
|
|
13
|
+
const liveRegions = new Map<AnnouncePriority, HTMLElement>();
|
|
14
|
+
const pendingAnnouncements = new Map<AnnouncePriority, ReturnType<typeof setTimeout>>();
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Delay in milliseconds before updating the live region text.
|
|
18
|
+
* This ensures screen readers detect the content change even when
|
|
19
|
+
* the same message is announced consecutively — clearing first and
|
|
20
|
+
* setting after a short timer delay forces a new live-region mutation event.
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
const ANNOUNCEMENT_DELAY_MS = 50;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Gets or creates a visually-hidden ARIA live region for the given priority.
|
|
27
|
+
*
|
|
28
|
+
* @param priority - The aria-live priority level
|
|
29
|
+
* @returns The live region element
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
const getOrCreateLiveRegion = (priority: AnnouncePriority): HTMLElement => {
|
|
33
|
+
const existing = liveRegions.get(priority);
|
|
34
|
+
if (existing && existing.isConnected) {
|
|
35
|
+
return existing;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const el = document.createElement('div');
|
|
39
|
+
el.setAttribute('aria-live', priority);
|
|
40
|
+
el.setAttribute('aria-atomic', 'true');
|
|
41
|
+
el.setAttribute('role', priority === 'assertive' ? 'alert' : 'status');
|
|
42
|
+
|
|
43
|
+
// Visually hidden but accessible to screen readers
|
|
44
|
+
Object.assign(el.style, {
|
|
45
|
+
position: 'absolute',
|
|
46
|
+
width: '1px',
|
|
47
|
+
height: '1px',
|
|
48
|
+
padding: '0',
|
|
49
|
+
margin: '-1px',
|
|
50
|
+
overflow: 'hidden',
|
|
51
|
+
clip: 'rect(0, 0, 0, 0)',
|
|
52
|
+
whiteSpace: 'nowrap',
|
|
53
|
+
border: '0',
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
document.body.appendChild(el);
|
|
57
|
+
liveRegions.set(priority, el);
|
|
58
|
+
|
|
59
|
+
return el;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Announces a message to screen readers via an ARIA live region.
|
|
64
|
+
*
|
|
65
|
+
* The message is injected into a visually-hidden live region element.
|
|
66
|
+
* Screen readers will pick up the change and announce it to the user.
|
|
67
|
+
*
|
|
68
|
+
* @param message - The text message to announce
|
|
69
|
+
* @param priority - The urgency level: `'polite'` (default) or `'assertive'`
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* import { announceToScreenReader } from '@bquery/bquery/a11y';
|
|
74
|
+
*
|
|
75
|
+
* // Polite announcement (waits for idle)
|
|
76
|
+
* announceToScreenReader('3 search results found');
|
|
77
|
+
*
|
|
78
|
+
* // Assertive announcement (interrupts current speech)
|
|
79
|
+
* announceToScreenReader('Error: Please fix the form', 'assertive');
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export const announceToScreenReader = (
|
|
83
|
+
message: string,
|
|
84
|
+
priority: AnnouncePriority = 'polite'
|
|
85
|
+
): void => {
|
|
86
|
+
if (!message) return;
|
|
87
|
+
if (typeof document === 'undefined' || !document.body) return;
|
|
88
|
+
|
|
89
|
+
const region = getOrCreateLiveRegion(priority);
|
|
90
|
+
const pendingTimeout = pendingAnnouncements.get(priority);
|
|
91
|
+
if (pendingTimeout !== undefined) {
|
|
92
|
+
clearTimeout(pendingTimeout);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Clear first, then set after a short timer delay to ensure screen readers
|
|
96
|
+
// detect the change even if the same message is announced twice.
|
|
97
|
+
region.textContent = '';
|
|
98
|
+
|
|
99
|
+
// Use setTimeout to ensure the DOM update triggers a live region change event
|
|
100
|
+
const timeout = setTimeout(() => {
|
|
101
|
+
pendingAnnouncements.delete(priority);
|
|
102
|
+
if (region.isConnected) {
|
|
103
|
+
region.textContent = message;
|
|
104
|
+
}
|
|
105
|
+
}, ANNOUNCEMENT_DELAY_MS);
|
|
106
|
+
|
|
107
|
+
pendingAnnouncements.set(priority, timeout);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Removes all live region elements created by `announceToScreenReader`.
|
|
112
|
+
* Useful for cleanup in tests or when unmounting an application.
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```ts
|
|
116
|
+
* import { clearAnnouncements } from '@bquery/bquery/a11y';
|
|
117
|
+
*
|
|
118
|
+
* clearAnnouncements();
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
export const clearAnnouncements = (): void => {
|
|
122
|
+
for (const timeout of pendingAnnouncements.values()) {
|
|
123
|
+
clearTimeout(timeout);
|
|
124
|
+
}
|
|
125
|
+
pendingAnnouncements.clear();
|
|
126
|
+
|
|
127
|
+
for (const [, el] of liveRegions) {
|
|
128
|
+
el.remove();
|
|
129
|
+
}
|
|
130
|
+
liveRegions.clear();
|
|
131
|
+
};
|