@praxisjs/composables 0.1.5 → 1.0.0
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/CHANGELOG.md +47 -0
- package/dist/__tests__/browser.test.js +151 -82
- package/dist/__tests__/browser.test.js.map +1 -1
- package/dist/__tests__/dom.test.js +168 -124
- package/dist/__tests__/dom.test.js.map +1 -1
- package/dist/__tests__/utilities.test.js +155 -193
- package/dist/__tests__/utilities.test.js.map +1 -1
- package/dist/browser.d.ts +55 -12
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +105 -49
- package/dist/browser.js.map +1 -1
- package/dist/dom.d.ts +60 -25
- package/dist/dom.d.ts.map +1 -1
- package/dist/dom.js +108 -74
- package/dist/dom.js.map +1 -1
- package/dist/index.d.ts +3 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/utilities.d.ts +68 -26
- package/dist/utilities.d.ts.map +1 -1
- package/dist/utilities.js +102 -94
- package/dist/utilities.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/browser.test.ts +172 -92
- package/src/__tests__/dom.test.ts +184 -135
- package/src/__tests__/utilities.test.ts +185 -213
- package/src/browser.ts +134 -53
- package/src/dom.ts +129 -82
- package/src/index.ts +11 -18
- package/src/utilities.ts +144 -111
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,52 @@
|
|
|
1
1
|
# @praxisjs/composables
|
|
2
2
|
|
|
3
|
+
## 1.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- 3372878: Migrate all packages from functional APIs to a decorator-first design.
|
|
8
|
+
|
|
9
|
+
**`@praxisjs/core`**
|
|
10
|
+
|
|
11
|
+
- Added `Composable` abstract base class for building class-based composables
|
|
12
|
+
- Removed `resource`, `createResource`, `Resource`, `ResourceStatus`, `ResourceOptions` from public exports — use `@Resource` from `@praxisjs/decorators` instead
|
|
13
|
+
|
|
14
|
+
**`@praxisjs/motion`**
|
|
15
|
+
|
|
16
|
+
- Replaced `useMotion`, `tween`, `spring`, `createTransition`, `Animate`, `easings`, `resolveEasing` with `@Tween` and `@Spring` decorators
|
|
17
|
+
|
|
18
|
+
**`@praxisjs/di`**
|
|
19
|
+
|
|
20
|
+
- Replaced `useService` and `createScope` with a `@Scope` decorator
|
|
21
|
+
- Renamed exported type `Scope` to `ScopeType` to free the name for the new decorator
|
|
22
|
+
|
|
23
|
+
**`@praxisjs/fsm`**
|
|
24
|
+
|
|
25
|
+
- Removed `createMachine` — use the `@StateMachine` and `@Transition` decorators directly
|
|
26
|
+
|
|
27
|
+
**`@praxisjs/router`**
|
|
28
|
+
|
|
29
|
+
- Removed `createRouter`, `lazy`, `useRouter`, `useParams`, `useQuery`, `useLocation`
|
|
30
|
+
- Added `@RouterConfig`, `@Lazy`, `@InjectRouter`, `@Params`, `@Query`, `@Location` decorators
|
|
31
|
+
|
|
32
|
+
**`@praxisjs/store`**
|
|
33
|
+
|
|
34
|
+
- Removed `createStore` — use the `@Store` and `@UseStore` decorators directly
|
|
35
|
+
|
|
36
|
+
**`@praxisjs/composables`**
|
|
37
|
+
|
|
38
|
+
- Replaced all `use*` composable functions with class-based composables extending `Composable`:
|
|
39
|
+
`WindowSize`, `ScrollPosition`, `ElementSize`, `Intersection`, `Focus`, `MediaQuery`, `ColorScheme`, `Mouse`, `KeyCombo`, `Idle`, `Clipboard`, `Geolocation`, `TimeAgo`, `Pagination`
|
|
40
|
+
|
|
41
|
+
**`@praxisjs/concurrent`**
|
|
42
|
+
|
|
43
|
+
- Removed `task`, `queue`, `pool` and their instance types — use `@Task`, `@Queue`, `@Pool` decorators instead
|
|
44
|
+
|
|
45
|
+
### Patch Changes
|
|
46
|
+
|
|
47
|
+
- Updated dependencies [3372878]
|
|
48
|
+
- @praxisjs/core@1.0.0
|
|
49
|
+
|
|
3
50
|
## 0.1.5
|
|
4
51
|
|
|
5
52
|
### Patch Changes
|
|
@@ -1,118 +1,187 @@
|
|
|
1
1
|
// @vitest-environment jsdom
|
|
2
|
-
import { describe, it, expect, vi } from "vitest";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
2
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
3
|
+
import { MediaQuery, ColorScheme, Mouse, KeyCombo, Idle } from "../browser";
|
|
4
|
+
function mockMatchMedia(matches, onAdd) {
|
|
5
|
+
const mql = {
|
|
6
|
+
matches,
|
|
7
|
+
addEventListener: onAdd ?? vi.fn(),
|
|
8
|
+
removeEventListener: vi.fn(),
|
|
9
|
+
};
|
|
10
|
+
vi.stubGlobal("matchMedia", () => mql);
|
|
11
|
+
return mql;
|
|
12
|
+
}
|
|
13
|
+
// ── MediaQuery ────────────────────────────────────────────────────────────────
|
|
14
|
+
describe("MediaQuery", () => {
|
|
15
|
+
beforeEach(() => { vi.restoreAllMocks(); });
|
|
16
|
+
it("reads initial match state", () => {
|
|
17
|
+
mockMatchMedia(true);
|
|
18
|
+
const mq = new MediaQuery("(min-width: 768px)");
|
|
19
|
+
const { matches } = mq.setup();
|
|
20
|
+
expect(matches()).toBe(true);
|
|
21
|
+
});
|
|
22
|
+
it("updates matches when change event fires", () => {
|
|
23
|
+
let changeHandler;
|
|
24
|
+
mockMatchMedia(false, (_, fn) => { changeHandler = fn; });
|
|
25
|
+
const mq = new MediaQuery("(min-width: 768px)");
|
|
26
|
+
const { matches } = mq.setup();
|
|
27
|
+
expect(matches()).toBe(false);
|
|
28
|
+
changeHandler({ matches: true });
|
|
29
|
+
expect(matches()).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
it("removes event listener on unmount", () => {
|
|
32
|
+
const mql = mockMatchMedia(false);
|
|
33
|
+
const mq = new MediaQuery("(min-width: 768px)");
|
|
34
|
+
mq.setup();
|
|
35
|
+
mq.onUnmount();
|
|
36
|
+
expect(mql.removeEventListener).toHaveBeenCalledWith("change", expect.any(Function));
|
|
37
|
+
});
|
|
38
|
+
it("onUnmount is safe to call without setup (covers false branch)", () => {
|
|
39
|
+
const mq = new MediaQuery("(min-width: 768px)");
|
|
40
|
+
expect(() => mq.onUnmount()).not.toThrow();
|
|
19
41
|
});
|
|
20
42
|
});
|
|
21
|
-
//
|
|
22
|
-
describe("
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
});
|
|
32
|
-
const { isDark, isLight } = useColorScheme();
|
|
43
|
+
// ── ColorScheme ───────────────────────────────────────────────────────────────
|
|
44
|
+
describe("ColorScheme", () => {
|
|
45
|
+
beforeEach(() => { vi.restoreAllMocks(); });
|
|
46
|
+
it("exposes isDark and isLight as computed inverses", () => {
|
|
47
|
+
let changeHandler;
|
|
48
|
+
mockMatchMedia(false, (_, fn) => { changeHandler = fn; });
|
|
49
|
+
const cs = new ColorScheme();
|
|
50
|
+
const { isDark, isLight } = cs.setup();
|
|
51
|
+
expect(isDark()).toBe(false);
|
|
52
|
+
expect(isLight()).toBe(true);
|
|
53
|
+
changeHandler({ matches: true });
|
|
33
54
|
expect(isDark()).toBe(true);
|
|
34
55
|
expect(isLight()).toBe(false);
|
|
35
56
|
});
|
|
57
|
+
it("removes event listener on unmount", () => {
|
|
58
|
+
const mql = mockMatchMedia(false);
|
|
59
|
+
const cs = new ColorScheme();
|
|
60
|
+
cs.setup();
|
|
61
|
+
cs.onUnmount();
|
|
62
|
+
expect(mql.removeEventListener).toHaveBeenCalledWith("change", expect.any(Function));
|
|
63
|
+
});
|
|
64
|
+
it("onUnmount is safe to call without setup (covers false branch)", () => {
|
|
65
|
+
const cs = new ColorScheme();
|
|
66
|
+
expect(() => cs.onUnmount()).not.toThrow();
|
|
67
|
+
});
|
|
36
68
|
});
|
|
37
|
-
//
|
|
38
|
-
describe("
|
|
69
|
+
// ── Mouse ─────────────────────────────────────────────────────────────────────
|
|
70
|
+
describe("Mouse", () => {
|
|
39
71
|
it("starts at (0, 0)", () => {
|
|
40
|
-
const
|
|
72
|
+
const mouse = new Mouse();
|
|
73
|
+
const { x, y } = mouse.setup();
|
|
41
74
|
expect(x()).toBe(0);
|
|
42
75
|
expect(y()).toBe(0);
|
|
43
76
|
});
|
|
44
|
-
it("updates on mousemove
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
expect(
|
|
77
|
+
it("updates x and y on mousemove", () => {
|
|
78
|
+
const mouse = new Mouse();
|
|
79
|
+
const { x, y } = mouse.setup();
|
|
80
|
+
window.dispatchEvent(new MouseEvent("mousemove", { clientX: 120, clientY: 80 }));
|
|
81
|
+
expect(x()).toBe(120);
|
|
82
|
+
expect(y()).toBe(80);
|
|
83
|
+
});
|
|
84
|
+
it("removes listener on unmount", () => {
|
|
85
|
+
const remove = vi.spyOn(window, "removeEventListener");
|
|
86
|
+
const mouse = new Mouse();
|
|
87
|
+
mouse.setup();
|
|
88
|
+
mouse.onUnmount();
|
|
89
|
+
expect(remove).toHaveBeenCalledWith("mousemove", expect.any(Function));
|
|
49
90
|
});
|
|
50
91
|
});
|
|
51
|
-
//
|
|
52
|
-
describe("
|
|
53
|
-
it("starts as
|
|
54
|
-
const
|
|
92
|
+
// ── KeyCombo ──────────────────────────────────────────────────────────────────
|
|
93
|
+
describe("KeyCombo", () => {
|
|
94
|
+
it("starts as not pressed", () => {
|
|
95
|
+
const kc = new KeyCombo("ctrl+s");
|
|
96
|
+
const { pressed } = kc.setup();
|
|
55
97
|
expect(pressed()).toBe(false);
|
|
56
98
|
});
|
|
57
|
-
it("
|
|
58
|
-
const
|
|
59
|
-
|
|
99
|
+
it("sets pressed=true when matching combo is pressed", () => {
|
|
100
|
+
const kc = new KeyCombo("ctrl+s");
|
|
101
|
+
const { pressed } = kc.setup();
|
|
102
|
+
window.dispatchEvent(new KeyboardEvent("keydown", { ctrlKey: true, key: "s" }));
|
|
60
103
|
expect(pressed()).toBe(true);
|
|
61
104
|
});
|
|
62
|
-
it("resets
|
|
63
|
-
const
|
|
64
|
-
|
|
105
|
+
it("resets pressed on keyup", () => {
|
|
106
|
+
const kc = new KeyCombo("ctrl+s");
|
|
107
|
+
const { pressed } = kc.setup();
|
|
108
|
+
window.dispatchEvent(new KeyboardEvent("keydown", { ctrlKey: true, key: "s" }));
|
|
65
109
|
window.dispatchEvent(new KeyboardEvent("keyup"));
|
|
66
110
|
expect(pressed()).toBe(false);
|
|
67
111
|
});
|
|
112
|
+
it("does not set pressed for wrong key", () => {
|
|
113
|
+
const kc = new KeyCombo("ctrl+s");
|
|
114
|
+
const { pressed } = kc.setup();
|
|
115
|
+
window.dispatchEvent(new KeyboardEvent("keydown", { ctrlKey: true, key: "z" }));
|
|
116
|
+
expect(pressed()).toBe(false);
|
|
117
|
+
});
|
|
118
|
+
it("removes listeners on unmount", () => {
|
|
119
|
+
const remove = vi.spyOn(window, "removeEventListener");
|
|
120
|
+
const kc = new KeyCombo("ctrl+s");
|
|
121
|
+
kc.setup();
|
|
122
|
+
kc.onUnmount();
|
|
123
|
+
expect(remove).toHaveBeenCalledWith("keydown", expect.any(Function));
|
|
124
|
+
expect(remove).toHaveBeenCalledWith("keyup", expect.any(Function));
|
|
125
|
+
});
|
|
126
|
+
it("matches combo without ctrl modifier (ctrl branch: `: true`)", () => {
|
|
127
|
+
const kc = new KeyCombo("s");
|
|
128
|
+
const { pressed } = kc.setup();
|
|
129
|
+
// No ctrlKey needed — parts doesn't include "ctrl" so ctrl = true always
|
|
130
|
+
window.dispatchEvent(new KeyboardEvent("keydown", { key: "s" }));
|
|
131
|
+
expect(pressed()).toBe(true);
|
|
132
|
+
});
|
|
133
|
+
it("matches combo with shift modifier (shift branch: `e.shiftKey`)", () => {
|
|
134
|
+
const kc = new KeyCombo("ctrl+shift+s");
|
|
135
|
+
const { pressed } = kc.setup();
|
|
136
|
+
window.dispatchEvent(new KeyboardEvent("keydown", { ctrlKey: true, shiftKey: true, key: "s" }));
|
|
137
|
+
expect(pressed()).toBe(true);
|
|
138
|
+
});
|
|
139
|
+
it("does not match when shift is required but not pressed", () => {
|
|
140
|
+
const kc = new KeyCombo("ctrl+shift+s");
|
|
141
|
+
const { pressed } = kc.setup();
|
|
142
|
+
window.dispatchEvent(new KeyboardEvent("keydown", { ctrlKey: true, shiftKey: false, key: "s" }));
|
|
143
|
+
expect(pressed()).toBe(false);
|
|
144
|
+
});
|
|
145
|
+
it("matches combo with alt modifier (alt branch: `e.altKey`)", () => {
|
|
146
|
+
const kc = new KeyCombo("ctrl+alt+s");
|
|
147
|
+
const { pressed } = kc.setup();
|
|
148
|
+
window.dispatchEvent(new KeyboardEvent("keydown", { ctrlKey: true, altKey: true, key: "s" }));
|
|
149
|
+
expect(pressed()).toBe(true);
|
|
150
|
+
});
|
|
68
151
|
});
|
|
69
|
-
//
|
|
70
|
-
describe("
|
|
152
|
+
// ── Idle ──────────────────────────────────────────────────────────────────────
|
|
153
|
+
describe("Idle", () => {
|
|
71
154
|
it("starts as not idle", () => {
|
|
72
155
|
vi.useFakeTimers();
|
|
73
|
-
const idle =
|
|
74
|
-
|
|
156
|
+
const idle = new Idle(500);
|
|
157
|
+
const { idle: isIdle } = idle.setup();
|
|
158
|
+
expect(isIdle()).toBe(false);
|
|
75
159
|
vi.useRealTimers();
|
|
76
160
|
});
|
|
77
|
-
it("becomes idle after
|
|
161
|
+
it("becomes idle after timeout", () => {
|
|
78
162
|
vi.useFakeTimers();
|
|
79
|
-
const
|
|
163
|
+
const composable = new Idle(500);
|
|
164
|
+
const { idle: isIdle } = composable.setup();
|
|
80
165
|
vi.advanceTimersByTime(500);
|
|
81
|
-
expect(
|
|
166
|
+
expect(isIdle()).toBe(true);
|
|
82
167
|
vi.useRealTimers();
|
|
83
168
|
});
|
|
84
|
-
it("resets idle on
|
|
169
|
+
it("resets idle timer on activity", () => {
|
|
85
170
|
vi.useFakeTimers();
|
|
86
|
-
const
|
|
87
|
-
|
|
171
|
+
const composable = new Idle(500);
|
|
172
|
+
const { idle: isIdle } = composable.setup();
|
|
173
|
+
vi.advanceTimersByTime(400);
|
|
88
174
|
window.dispatchEvent(new MouseEvent("mousemove"));
|
|
89
|
-
vi.advanceTimersByTime(
|
|
90
|
-
expect(
|
|
175
|
+
vi.advanceTimersByTime(400);
|
|
176
|
+
expect(isIdle()).toBe(false);
|
|
91
177
|
vi.useRealTimers();
|
|
92
178
|
});
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
writable: true,
|
|
100
|
-
value: vi.fn(() => ({
|
|
101
|
-
matches: false,
|
|
102
|
-
addEventListener: vi.fn((_event, handler) => {
|
|
103
|
-
changeHandler = handler;
|
|
104
|
-
}),
|
|
105
|
-
removeEventListener: vi.fn(),
|
|
106
|
-
})),
|
|
107
|
-
});
|
|
108
|
-
const matches = useMediaQuery("(min-width: 768px)");
|
|
109
|
-
expect(matches()).toBe(false);
|
|
110
|
-
// Simulate the media query becoming true
|
|
111
|
-
changeHandler({ matches: true });
|
|
112
|
-
expect(matches()).toBe(true);
|
|
113
|
-
// Simulate it reverting
|
|
114
|
-
changeHandler({ matches: false });
|
|
115
|
-
expect(matches()).toBe(false);
|
|
179
|
+
it("removes listeners on unmount", () => {
|
|
180
|
+
const remove = vi.spyOn(window, "removeEventListener");
|
|
181
|
+
const composable = new Idle(500);
|
|
182
|
+
composable.setup();
|
|
183
|
+
composable.onUnmount();
|
|
184
|
+
expect(remove).toHaveBeenCalled();
|
|
116
185
|
});
|
|
117
186
|
});
|
|
118
187
|
//# sourceMappingURL=browser.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.test.js","sourceRoot":"","sources":["../../src/__tests__/browser.test.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.test.js","sourceRoot":"","sources":["../../src/__tests__/browser.test.ts"],"names":[],"mappings":"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"}
|