@praxisjs/composables 1.0.0 → 1.0.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/dist/browser.js CHANGED
@@ -6,11 +6,14 @@ export class MediaQuery extends Composable {
6
6
  this.query = query;
7
7
  }
8
8
  setup() {
9
+ if (this._view)
10
+ return this._view;
9
11
  this._mql = window.matchMedia(this.query);
10
12
  const matches = signal(this._mql.matches);
11
13
  this._handler = (e) => { matches.set(e.matches); };
12
14
  this._mql.addEventListener("change", this._handler);
13
- return { matches };
15
+ this._view = { matches };
16
+ return this._view;
14
17
  }
15
18
  onUnmount() {
16
19
  if (this._mql && this._handler) {
@@ -20,12 +23,15 @@ export class MediaQuery extends Composable {
20
23
  }
21
24
  export class ColorScheme extends Composable {
22
25
  setup() {
26
+ if (this._view)
27
+ return this._view;
23
28
  this._mql = window.matchMedia("(prefers-color-scheme: dark)");
24
29
  const isDark = signal(this._mql.matches);
25
30
  const isLight = computed(() => !isDark());
26
31
  this._handler = (e) => { isDark.set(e.matches); };
27
32
  this._mql.addEventListener("change", this._handler);
28
- return { isDark, isLight };
33
+ this._view = { isDark, isLight };
34
+ return this._view;
29
35
  }
30
36
  onUnmount() {
31
37
  if (this._mql && this._handler) {
@@ -40,11 +46,14 @@ export class Mouse extends Composable {
40
46
  this._handler = (_e) => { };
41
47
  }
42
48
  setup() {
49
+ if (this._view)
50
+ return this._view;
43
51
  const x = signal(0);
44
52
  const y = signal(0);
45
53
  this._handler = (e) => { x.set(e.clientX); y.set(e.clientY); };
46
54
  window.addEventListener("mousemove", this._handler);
47
- return { x, y };
55
+ this._view = { x, y };
56
+ return this._view;
48
57
  }
49
58
  onUnmount() {
50
59
  window.removeEventListener("mousemove", this._handler);
@@ -60,21 +69,34 @@ export class KeyCombo extends Composable {
60
69
  this._keyupHandler = () => { };
61
70
  }
62
71
  setup() {
63
- const parts = this.combo.toLowerCase().split("+");
72
+ if (this._view)
73
+ return this._view;
74
+ const parts = this.combo.toLowerCase().split("+").map((p) => p.trim());
64
75
  const pressed = signal(false);
76
+ const modifiers = ["ctrl", "shift", "alt", "meta"];
77
+ const key = parts.find((p) => !modifiers.includes(p));
78
+ // A combo with no non-modifier key is invalid and should never fire
79
+ if (!key) {
80
+ this._keyupHandler = () => { pressed.set(false); };
81
+ window.addEventListener("keydown", this._keydownHandler);
82
+ window.addEventListener("keyup", this._keyupHandler);
83
+ this._view = { pressed };
84
+ return this._view;
85
+ }
65
86
  this._keydownHandler = (e) => {
66
87
  const ctrl = parts.includes("ctrl") ? e.ctrlKey : true;
67
88
  const shift = parts.includes("shift") ? e.shiftKey : true;
68
89
  const alt = parts.includes("alt") ? e.altKey : true;
69
- const key = parts.find((p) => !["ctrl", "shift", "alt", "meta"].includes(p));
70
- if (ctrl && shift && alt && (!key || e.key.toLowerCase() === key)) {
90
+ const meta = parts.includes("meta") ? e.metaKey : true;
91
+ if (ctrl && shift && alt && meta && e.key.toLowerCase() === key) {
71
92
  pressed.set(true);
72
93
  }
73
94
  };
74
95
  this._keyupHandler = () => { pressed.set(false); };
75
96
  window.addEventListener("keydown", this._keydownHandler);
76
97
  window.addEventListener("keyup", this._keyupHandler);
77
- return { pressed };
98
+ this._view = { pressed };
99
+ return this._view;
78
100
  }
79
101
  onUnmount() {
80
102
  window.removeEventListener("keydown", this._keydownHandler);
@@ -88,6 +110,8 @@ export class Idle extends Composable {
88
110
  this._listeners = [];
89
111
  }
90
112
  setup() {
113
+ if (this._view)
114
+ return this._view;
91
115
  const idle = signal(false);
92
116
  const reset = () => {
93
117
  idle.set(false);
@@ -99,7 +123,8 @@ export class Idle extends Composable {
99
123
  this._listeners.push([event, reset]);
100
124
  });
101
125
  reset();
102
- return { idle };
126
+ this._view = { idle };
127
+ return this._view;
103
128
  }
104
129
  onUnmount() {
105
130
  clearTimeout(this._timer);
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,OAAO,UAAW,SAAQ,UAAU;IAOxC,YAA6B,KAAa;QACxC,KAAK,EAAE,CAAC;QADmB,UAAK,GAAL,KAAK,CAAQ;IAE1C,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,SAAS;QACP,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,UAAU;IAQzC,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,SAAS;QACP,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,KAAM,SAAQ,UAAU;IAArC;;QAIE,gEAAgE;QACxD,aAAQ,GAAG,CAAC,EAAc,EAAE,EAAE,GAAE,CAAC,CAAC;IAgB5C,CAAC;IAbC,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAClC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,SAAS;QACP,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,UAAU;IAStC,YAA6B,KAAa;QACxC,KAAK,EAAE,CAAC;QADmB,UAAK,GAAL,KAAK,CAAQ;QAN1C,gEAAgE;QACxD,oBAAe,GAAG,CAAC,EAAiB,EAAE,EAAE,GAAE,CAAC,CAAC;QACpD,gEAAgE;QACxD,kBAAa,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAKjC,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE9B,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtD,oEAAoE;QACpE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACzD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE,EAAE;YAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YACvD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACpD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YACvD,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACzD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,SAAS;QACP,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5D,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,MAAM,OAAO,IAAK,SAAQ,UAAU;IAOlC,YAA6B,UAAU,MAAM;QAC3C,KAAK,EAAE,CAAC;QADmB,YAAO,GAAP,OAAO,CAAS;QAJrC,eAAU,GAAgC,EAAE,CAAC;IAMrD,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC,CAAC;QAEF,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1E,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,SAAS;QACP,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;YAC3C,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;CACF"}
package/dist/dom.d.ts CHANGED
@@ -3,10 +3,8 @@ export declare class WindowSize extends Composable {
3
3
  width: number;
4
4
  height: number;
5
5
  private _handler;
6
- setup(): {
7
- width: import("@praxisjs/shared").Signal<number>;
8
- height: import("@praxisjs/shared").Signal<number>;
9
- };
6
+ private _view?;
7
+ setup(): Record<string, unknown>;
10
8
  onUnmount(): void;
11
9
  }
12
10
  export declare class ScrollPosition extends Composable {
@@ -14,11 +12,9 @@ export declare class ScrollPosition extends Composable {
14
12
  y: number;
15
13
  private readonly _target;
16
14
  private _handler;
15
+ private _view?;
17
16
  constructor(target?: HTMLElement | Window);
18
- setup(): {
19
- x: import("@praxisjs/shared").Signal<number>;
20
- y: import("@praxisjs/shared").Signal<number>;
21
- };
17
+ setup(): Record<string, unknown>;
22
18
  onUnmount(): void;
23
19
  }
24
20
  export declare class ElementSize extends Composable {
@@ -26,13 +22,11 @@ export declare class ElementSize extends Composable {
26
22
  width: number;
27
23
  height: number;
28
24
  private _observer?;
25
+ private _view?;
29
26
  constructor(ref: {
30
27
  current: HTMLElement | null;
31
28
  });
32
- setup(): {
33
- width: import("@praxisjs/shared").Signal<number>;
34
- height: import("@praxisjs/shared").Signal<number>;
35
- };
29
+ setup(): Record<string, unknown>;
36
30
  onUnmount(): void;
37
31
  }
38
32
  export declare class Intersection extends Composable {
@@ -40,22 +34,20 @@ export declare class Intersection extends Composable {
40
34
  private readonly options?;
41
35
  visible: boolean;
42
36
  private _observer?;
37
+ private _view?;
43
38
  constructor(ref: {
44
39
  current: HTMLElement | null;
45
40
  }, options?: IntersectionObserverInit | undefined);
46
- setup(): {
47
- visible: import("@praxisjs/shared").Signal<boolean>;
48
- };
41
+ setup(): Record<string, unknown>;
49
42
  onUnmount(): void;
50
43
  }
51
44
  export declare class Focus extends Composable {
52
45
  private readonly ref;
53
46
  focused: boolean;
47
+ private _view?;
54
48
  constructor(ref: {
55
49
  current: HTMLElement | null;
56
50
  });
57
- setup(): {
58
- focused: import("@praxisjs/shared").Signal<boolean>;
59
- };
51
+ setup(): Record<string, unknown>;
60
52
  }
61
53
  //# sourceMappingURL=dom.d.ts.map
package/dist/dom.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,qBAAa,UAAW,SAAQ,UAAU;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAGvB,OAAO,CAAC,QAAQ,CAAY;IAE5B,KAAK;;;;IAWL,SAAS;CAGV;AAED,qBAAa,cAAe,SAAQ,UAAU;IACpC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAE/C,OAAO,CAAC,QAAQ,CAAY;gBAEhB,MAAM,GAAE,WAAW,GAAG,MAAe;IAKjD,KAAK;;;;IAYL,SAAS;CAGV;AAED,qBAAa,WAAY,SAAQ,UAAU;IAM7B,OAAO,CAAC,QAAQ,CAAC,GAAG;IALxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,SAAS,CAAC,CAAiB;gBAEN,GAAG,EAAE;QAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE;IAIjE,KAAK;;;;IAiBL,SAAS;CAGV;AAED,qBAAa,YAAa,SAAQ,UAAU;IAMxC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IANnB,OAAO,EAAE,OAAO,CAAC;IAEzB,OAAO,CAAC,SAAS,CAAC,CAAuB;gBAGtB,GAAG,EAAE;QAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE,EACpC,OAAO,CAAC,EAAE,wBAAwB,YAAA;IAKrD,KAAK;;;IAWL,SAAS;CAGV;AAED,qBAAa,KAAM,SAAQ,UAAU;IAGvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFxB,OAAO,EAAE,OAAO,CAAC;gBAEI,GAAG,EAAE;QAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE;IAIjE,KAAK;;;CAgBN"}
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,qBAAa,UAAW,SAAQ,UAAU;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAGvB,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,KAAK,CAAC,CAA0B;IAExC,KAAK;IAaL,SAAS;CAGV;AAED,qBAAa,cAAe,SAAQ,UAAU;IACpC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAE/C,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,KAAK,CAAC,CAA0B;gBAE5B,MAAM,GAAE,WAAW,GAAG,MAAe;IAKjD,KAAK;IAcL,SAAS;CAGV;AAED,qBAAa,WAAY,SAAQ,UAAU;IAO7B,OAAO,CAAC,QAAQ,CAAC,GAAG;IANxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,KAAK,CAAC,CAA0B;gBAEX,GAAG,EAAE;QAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE;IAIjE,KAAK;IAmBL,SAAS;CAGV;AAED,qBAAa,YAAa,SAAQ,UAAU;IAOxC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAPnB,OAAO,EAAE,OAAO,CAAC;IAEzB,OAAO,CAAC,SAAS,CAAC,CAAuB;IACzC,OAAO,CAAC,KAAK,CAAC,CAA0B;gBAGrB,GAAG,EAAE;QAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE,EACpC,OAAO,CAAC,EAAE,wBAAwB,YAAA;IAKrD,KAAK;IAaL,SAAS;CAGV;AAED,qBAAa,KAAM,SAAQ,UAAU;IAKvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJxB,OAAO,EAAE,OAAO,CAAC;IAEzB,OAAO,CAAC,KAAK,CAAC,CAA0B;gBAEX,GAAG,EAAE;QAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE;IAIjE,KAAK;CAkBN"}
package/dist/dom.js CHANGED
@@ -7,6 +7,8 @@ export class WindowSize extends Composable {
7
7
  this._handler = () => { };
8
8
  }
9
9
  setup() {
10
+ if (this._view)
11
+ return this._view;
10
12
  const width = signal(window.innerWidth);
11
13
  const height = signal(window.innerHeight);
12
14
  this._handler = () => {
@@ -14,7 +16,8 @@ export class WindowSize extends Composable {
14
16
  height.set(window.innerHeight);
15
17
  };
16
18
  window.addEventListener("resize", this._handler);
17
- return { width, height };
19
+ this._view = { width, height };
20
+ return this._view;
18
21
  }
19
22
  onUnmount() {
20
23
  window.removeEventListener("resize", this._handler);
@@ -28,6 +31,8 @@ export class ScrollPosition extends Composable {
28
31
  this._target = target;
29
32
  }
30
33
  setup() {
34
+ if (this._view)
35
+ return this._view;
31
36
  const x = signal(0);
32
37
  const y = signal(0);
33
38
  const t = this._target;
@@ -36,7 +41,8 @@ export class ScrollPosition extends Composable {
36
41
  y.set(t === window ? window.scrollY : t.scrollTop);
37
42
  };
38
43
  t.addEventListener("scroll", this._handler);
39
- return { x, y };
44
+ this._view = { x, y };
45
+ return this._view;
40
46
  }
41
47
  onUnmount() {
42
48
  this._target.removeEventListener("scroll", this._handler);
@@ -48,6 +54,8 @@ export class ElementSize extends Composable {
48
54
  this.ref = ref;
49
55
  }
50
56
  setup() {
57
+ if (this._view)
58
+ return this._view;
51
59
  const width = signal(0);
52
60
  const height = signal(0);
53
61
  this._observer = new ResizeObserver(([entry]) => {
@@ -61,7 +69,8 @@ export class ElementSize extends Composable {
61
69
  height.set(this.ref.current.offsetHeight);
62
70
  }
63
71
  });
64
- return { width, height };
72
+ this._view = { width, height };
73
+ return this._view;
65
74
  }
66
75
  onUnmount() {
67
76
  this._observer?.disconnect();
@@ -74,6 +83,8 @@ export class Intersection extends Composable {
74
83
  this.options = options;
75
84
  }
76
85
  setup() {
86
+ if (this._view)
87
+ return this._view;
77
88
  const visible = signal(false);
78
89
  this._observer = new IntersectionObserver(([entry]) => {
79
90
  visible.set(entry.isIntersecting);
@@ -82,7 +93,8 @@ export class Intersection extends Composable {
82
93
  if (this.ref.current)
83
94
  this._observer?.observe(this.ref.current);
84
95
  });
85
- return { visible };
96
+ this._view = { visible };
97
+ return this._view;
86
98
  }
87
99
  onUnmount() {
88
100
  this._observer?.disconnect();
@@ -94,6 +106,8 @@ export class Focus extends Composable {
94
106
  this.ref = ref;
95
107
  }
96
108
  setup() {
109
+ if (this._view)
110
+ return this._view;
97
111
  const focused = signal(false);
98
112
  effect(() => {
99
113
  const el = this.ref.current;
@@ -108,7 +122,8 @@ export class Focus extends Composable {
108
122
  el.removeEventListener("blur", onBlur);
109
123
  };
110
124
  });
111
- return { focused };
125
+ this._view = { focused };
126
+ return this._view;
112
127
  }
113
128
  }
114
129
  //# sourceMappingURL=dom.js.map
package/dist/dom.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
@@ -10,12 +10,14 @@ export declare class Clipboard extends Composable {
10
10
  copied: boolean;
11
11
  content: string;
12
12
  copy: (text: string) => Promise<void>;
13
+ private _resetTimer?;
13
14
  constructor(resetDelay?: number);
14
15
  setup(): {
15
16
  copied: Signal<boolean>;
16
17
  content: Signal<string>;
17
18
  copy: (text: string) => Promise<void>;
18
19
  };
20
+ onUnmount(): void;
19
21
  }
20
22
  export declare class Geolocation extends Composable {
21
23
  private readonly options?;
@@ -23,6 +25,7 @@ export declare class Geolocation extends Composable {
23
25
  lng: number | null;
24
26
  error: GeolocationPositionError | null;
25
27
  loading: boolean;
28
+ private _active;
26
29
  constructor(options?: PositionOptions | undefined);
27
30
  setup(): {
28
31
  lat: Signal<number | null>;
@@ -30,6 +33,7 @@ export declare class Geolocation extends Composable {
30
33
  error: Signal<GeolocationPositionError | null>;
31
34
  loading: Signal<boolean>;
32
35
  };
36
+ onUnmount(): void;
33
37
  }
34
38
  export declare class TimeAgo extends Composable {
35
39
  private readonly source;
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,SAAU,SAAQ,UAAU;IAK3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ/B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEjB,UAAU,SAAO;IAI9C,KAAK;;;qBAKuB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;;CAanD;AAED,qBAAa,WAAY,SAAQ,UAAU;IAM7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAL7B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;gBAEI,OAAO,CAAC,EAAE,eAAe,YAAA;IAItD,KAAK;;;;;;CAqBN;AAED,qBAAa,OAAQ,SAAQ,UAAU;IAMnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAIvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IATjB,KAAK,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,SAAS,CAAC,CAAiC;gBAGhC,MAAM,EACnB,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,GACrB,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,GACvB,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EACR,MAAM,SAAU;IAKnC,KAAK;;;IAqBL,SAAS;CAGV;AAED,qBAAa,UAAW,SAAQ,UAAU;IAc5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAb5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;gBAEI,OAAO,EAAE,iBAAiB;IAIvD,KAAK;;;;;;;;;;kBAmBS,MAAM;;;;CAKrB"}
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,SAAU,SAAQ,UAAU;IAO3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN/B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C,OAAO,CAAC,WAAW,CAAC,CAAgC;gBAEvB,UAAU,SAAO;IAI9C,KAAK;;;qBAKuB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;;IAelD,SAAS;CAGV;AAED,qBAAa,WAAY,SAAQ,UAAU;IAQ7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAP7B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IAEzB,OAAO,CAAC,OAAO,CAAQ;gBAEM,OAAO,CAAC,EAAE,eAAe,YAAA;IAItD,KAAK;;;;;;IAwBL,SAAS;CAGV;AAED,qBAAa,OAAQ,SAAQ,UAAU;IAMnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAIvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IATjB,KAAK,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,SAAS,CAAC,CAAiC;gBAGhC,MAAM,EACnB,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,GACrB,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,GACvB,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EACR,MAAM,SAAU;IAKnC,KAAK;;;IAqBL,SAAS;CAGV;AAED,qBAAa,UAAW,SAAQ,UAAU;IAc5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAb5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;gBAEI,OAAO,EAAE,iBAAiB;IAOvD,KAAK;;;;;;;;;;kBAmBS,MAAM;;;;CAKrB"}
package/dist/utilities.js CHANGED
@@ -14,7 +14,8 @@ export class Clipboard extends Composable {
14
14
  await navigator.clipboard.writeText(text);
15
15
  content.set(text);
16
16
  copied.set(true);
17
- setTimeout(() => { copied.set(false); }, resetDelay);
17
+ clearTimeout(this._resetTimer);
18
+ this._resetTimer = setTimeout(() => { copied.set(false); }, resetDelay);
18
19
  }
19
20
  catch {
20
21
  console.warn("[Clipboard] Falha ao copiar");
@@ -22,11 +23,15 @@ export class Clipboard extends Composable {
22
23
  };
23
24
  return { copied, content, copy };
24
25
  }
26
+ onUnmount() {
27
+ clearTimeout(this._resetTimer);
28
+ }
25
29
  }
26
30
  export class Geolocation extends Composable {
27
31
  constructor(options) {
28
32
  super();
29
33
  this.options = options;
34
+ this._active = true;
30
35
  }
31
36
  setup() {
32
37
  const lat = signal(null);
@@ -34,15 +39,22 @@ export class Geolocation extends Composable {
34
39
  const error = signal(null);
35
40
  const loading = signal(true);
36
41
  navigator.geolocation.getCurrentPosition((pos) => {
42
+ if (!this._active)
43
+ return;
37
44
  lat.set(pos.coords.latitude);
38
45
  lng.set(pos.coords.longitude);
39
46
  loading.set(false);
40
47
  }, (err) => {
48
+ if (!this._active)
49
+ return;
41
50
  error.set(err);
42
51
  loading.set(false);
43
52
  }, this.options);
44
53
  return { lat, lng, error, loading };
45
54
  }
55
+ onUnmount() {
56
+ this._active = false;
57
+ }
46
58
  }
47
59
  export class TimeAgo extends Composable {
48
60
  constructor(source, locale = "pt-BR") {
@@ -79,6 +91,9 @@ export class Pagination extends Composable {
79
91
  constructor(options) {
80
92
  super();
81
93
  this.options = options;
94
+ if (options.pageSize <= 0) {
95
+ throw new Error("pageSize must be greater than 0");
96
+ }
82
97
  }
83
98
  setup() {
84
99
  const opts = this.options;
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.js","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utilities.js","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisjs/composables",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -14,7 +14,7 @@
14
14
  "typescript": "^5.9.3"
15
15
  },
16
16
  "dependencies": {
17
- "@praxisjs/core": "1.0.0",
17
+ "@praxisjs/core": "1.1.0",
18
18
  "@praxisjs/shared": "0.2.0"
19
19
  },
20
20
  "scripts": {
@@ -224,4 +224,164 @@ describe("Idle", () => {
224
224
  composable.onUnmount();
225
225
  expect(remove).toHaveBeenCalled();
226
226
  });
227
+
228
+ it("fires on scroll event", () => {
229
+ vi.useFakeTimers();
230
+ const composable = new Idle(500);
231
+ const { idle: isIdle } = composable.setup() as { idle: () => boolean };
232
+ vi.advanceTimersByTime(500);
233
+ expect(isIdle()).toBe(true);
234
+ window.dispatchEvent(new Event("scroll"));
235
+ expect(isIdle()).toBe(false);
236
+ vi.useRealTimers();
237
+ });
238
+
239
+ it("fires on click event", () => {
240
+ vi.useFakeTimers();
241
+ const composable = new Idle(500);
242
+ const { idle: isIdle } = composable.setup() as { idle: () => boolean };
243
+ vi.advanceTimersByTime(500);
244
+ expect(isIdle()).toBe(true);
245
+ window.dispatchEvent(new MouseEvent("click"));
246
+ expect(isIdle()).toBe(false);
247
+ vi.useRealTimers();
248
+ });
249
+
250
+ it("fires on keydown event", () => {
251
+ vi.useFakeTimers();
252
+ const composable = new Idle(500);
253
+ const { idle: isIdle } = composable.setup() as { idle: () => boolean };
254
+ vi.advanceTimersByTime(500);
255
+ expect(isIdle()).toBe(true);
256
+ window.dispatchEvent(new KeyboardEvent("keydown"));
257
+ expect(isIdle()).toBe(false);
258
+ vi.useRealTimers();
259
+ });
260
+
261
+ it("activity after becoming idle resets the timer", () => {
262
+ vi.useFakeTimers();
263
+ const composable = new Idle(500);
264
+ const { idle: isIdle } = composable.setup() as { idle: () => boolean };
265
+ vi.advanceTimersByTime(500);
266
+ expect(isIdle()).toBe(true);
267
+ window.dispatchEvent(new MouseEvent("mousemove"));
268
+ expect(isIdle()).toBe(false);
269
+ // Should become idle again after full timeout elapses
270
+ vi.advanceTimersByTime(500);
271
+ expect(isIdle()).toBe(true);
272
+ vi.useRealTimers();
273
+ });
274
+ });
275
+
276
+ // ── KeyCombo (additional) ─────────────────────────────────────────────────────
277
+
278
+ describe("KeyCombo (additional)", () => {
279
+ it("fires on meta+s keydown", () => {
280
+ const kc = new KeyCombo("meta+s");
281
+ const { pressed } = kc.setup() as { pressed: () => boolean };
282
+ window.dispatchEvent(new KeyboardEvent("keydown", { metaKey: true, key: "s" }));
283
+ expect(pressed()).toBe(true);
284
+ });
285
+
286
+ it("modifier-only combo (ctrl+shift) never fires", () => {
287
+ const kc = new KeyCombo("ctrl+shift");
288
+ const { pressed } = kc.setup() as { pressed: () => boolean };
289
+ window.dispatchEvent(new KeyboardEvent("keydown", { ctrlKey: true, shiftKey: true, key: "Control" }));
290
+ window.dispatchEvent(new KeyboardEvent("keydown", { ctrlKey: true, shiftKey: true, key: "Shift" }));
291
+ window.dispatchEvent(new KeyboardEvent("keydown", { ctrlKey: true, shiftKey: true, key: "a" }));
292
+ expect(pressed()).toBe(false);
293
+ });
294
+
295
+ it("whitespace in combo string (ctrl + s) is handled gracefully — fires on ctrl+s", () => {
296
+ // Parts are trimmed, so "ctrl + s" becomes ["ctrl", "s"] after trim
297
+ const kc = new KeyCombo("ctrl + s");
298
+ const { pressed } = kc.setup() as { pressed: () => boolean };
299
+ window.dispatchEvent(new KeyboardEvent("keydown", { ctrlKey: true, key: "s" }));
300
+ expect(pressed()).toBe(true);
301
+ });
302
+
303
+ it("setup() called twice registers only one set of listeners", () => {
304
+ const add = vi.spyOn(window, "addEventListener");
305
+ const kc = new KeyCombo("ctrl+s");
306
+ kc.setup();
307
+ kc.setup();
308
+ const keydownCalls = add.mock.calls.filter((c) => c[0] === "keydown").length;
309
+ expect(keydownCalls).toBe(1);
310
+ });
311
+ });
312
+
313
+ // ── MediaQuery (additional) ───────────────────────────────────────────────────
314
+
315
+ describe("MediaQuery (additional)", () => {
316
+ beforeEach(() => { vi.restoreAllMocks(); });
317
+
318
+ it("setup() called twice registers only one listener", () => {
319
+ const mql = mockMatchMedia(false);
320
+ const mq = new MediaQuery("(min-width: 768px)");
321
+ mq.setup();
322
+ mq.setup();
323
+ expect((mql.addEventListener as ReturnType<typeof vi.fn>)).toHaveBeenCalledTimes(1);
324
+ });
325
+ });
326
+
327
+ // ── ColorScheme (additional) ──────────────────────────────────────────────────
328
+
329
+ describe("ColorScheme (additional)", () => {
330
+ beforeEach(() => { vi.restoreAllMocks(); });
331
+
332
+ it("setup() called twice registers only one listener", () => {
333
+ const mql = mockMatchMedia(false);
334
+ const cs = new ColorScheme();
335
+ cs.setup();
336
+ cs.setup();
337
+ expect((mql.addEventListener as ReturnType<typeof vi.fn>)).toHaveBeenCalledTimes(1);
338
+ });
339
+ });
340
+
341
+ // ── Mouse (additional) ────────────────────────────────────────────────────────
342
+
343
+ describe("Mouse (additional)", () => {
344
+ it("setup() called twice returns the same view object", () => {
345
+ const mouse = new Mouse();
346
+ const view1 = mouse.setup();
347
+ const view2 = mouse.setup();
348
+ expect(view1).toBe(view2);
349
+ });
350
+
351
+ it("setup() called twice registers only one mousemove listener", () => {
352
+ const add = vi.spyOn(window, "addEventListener");
353
+ const mouse = new Mouse();
354
+ mouse.setup();
355
+ mouse.setup();
356
+ const moveCalls = add.mock.calls.filter((c) => c[0] === "mousemove").length;
357
+ expect(moveCalls).toBe(1);
358
+ vi.restoreAllMocks();
359
+ });
360
+ });
361
+
362
+ // ── Idle (additional) ─────────────────────────────────────────────────────────
363
+
364
+ describe("Idle (additional)", () => {
365
+ it("setup() called twice returns the same view object", () => {
366
+ vi.useFakeTimers();
367
+ const idle = new Idle(500);
368
+ const view1 = idle.setup();
369
+ const view2 = idle.setup();
370
+ expect(view1).toBe(view2);
371
+ idle.onUnmount();
372
+ vi.useRealTimers();
373
+ });
374
+
375
+ it("setup() called twice registers activity listeners only once", () => {
376
+ vi.useFakeTimers();
377
+ const add = vi.spyOn(window, "addEventListener");
378
+ const idle = new Idle(500);
379
+ idle.setup();
380
+ idle.setup();
381
+ const moveCalls = add.mock.calls.filter((c) => c[0] === "mousemove").length;
382
+ expect(moveCalls).toBe(1);
383
+ idle.onUnmount();
384
+ vi.restoreAllMocks();
385
+ vi.useRealTimers();
386
+ });
227
387
  });