@cedx/base 0.36.1 → 0.36.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.
@@ -0,0 +1,18 @@
1
+ import { type EffectOptions } from "./Signal.js";
2
+ /**
3
+ * The base class for signal-based custom elements.
4
+ */
5
+ export declare abstract class Component extends HTMLElement {
6
+ #private;
7
+ /**
8
+ * Method invoked when this component is disconnected.
9
+ */
10
+ disconnectedCallback(): void;
11
+ /**
12
+ * Registers a new effect.
13
+ * @param callback The effect computation.
14
+ * @param options The effect options.
15
+ */
16
+ useEffect(callback: () => void, options?: EffectOptions): void;
17
+ }
18
+ //# sourceMappingURL=Component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Component.d.ts","sourceRoot":"","sources":["../../src/Client/UI/Component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,aAAa,EAAC,MAAM,aAAa,CAAC;AAEvD;;GAEG;AACH,8BAAsB,SAAU,SAAQ,WAAW;;IAOlD;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAK5B;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;CAG9D"}
@@ -0,0 +1,26 @@
1
+ import { effect } from "./Signal.js";
2
+ /**
3
+ * The base class for signal-based custom elements.
4
+ */
5
+ export class Component extends HTMLElement {
6
+ /**
7
+ * The list of effect disposers.
8
+ */
9
+ #effects = [];
10
+ /**
11
+ * Method invoked when this component is disconnected.
12
+ */
13
+ disconnectedCallback() {
14
+ for (const dispose of this.#effects)
15
+ dispose();
16
+ this.#effects = [];
17
+ }
18
+ /**
19
+ * Registers a new effect.
20
+ * @param callback The effect computation.
21
+ * @param options The effect options.
22
+ */
23
+ useEffect(callback, options) {
24
+ this.#effects.push(effect(callback, options));
25
+ }
26
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../src/Client/UI/Components/Toast.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAiB,MAAM,eAAe,CAAC;AAEtD;;GAEG;AACH,qBAAa,KAAM,SAAQ,WAAW;;IAErC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,kBAAkB,WAA0E;IAuC5G;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAE1B;IAED;;OAEG;IACH,IAAI,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAE/B;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAExB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAGrB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAGzB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAE7B;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAGlB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAEtB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,OAAO,CAElB;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAEtB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,GAAC,IAAI,CAGtB;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAC,IAAI,EAG1B;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,OAAO,CAElB;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAEtB;IAED;;;;;OAKG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAC,IAAI,GAAG,IAAI;IAa/F;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,iBAAiB,IAAI,IAAI;IASzB;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAM5B;;OAEG;IACH,IAAI,IAAI,IAAI;CAoGZ;AAED;;GAEG;AACH,OAAO,CAAC,MAAM,CAAC;IAEd;;OAEG;IACH,UAAU,qBAAqB;QAC9B,cAAc,EAAE,KAAK,CAAC;KACtB;CACD"}
1
+ {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../src/Client/UI/Components/Toast.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAiB,MAAM,eAAe,CAAC;AAEtD;;GAEG;AACH,qBAAa,KAAM,SAAQ,WAAW;;IAErC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,kBAAkB,WAA0E;IAuC5G;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAE1B;IAED;;OAEG;IACH,IAAI,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAE/B;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAExB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAGrB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAGzB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAE7B;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAGlB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAEtB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,OAAO,CAElB;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAEtB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,GAAC,IAAI,CAGtB;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAC,IAAI,EAG1B;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,OAAO,CAElB;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAEtB;IAED;;;;;OAKG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAC,IAAI,GAAG,IAAI;IAa/F;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,iBAAiB,IAAI,IAAI;IASzB;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAM5B;;OAEG;IACH,IAAI,IAAI,IAAI;CAsGZ;AAED;;GAEG;AACH,OAAO,CAAC,MAAM,CAAC;IAEd;;OAEG;IACH,UAAU,qBAAqB;QAC9B,cAAc,EAAE,KAAK,CAAC;KACtB;CACD"}
@@ -244,6 +244,8 @@ export class Toast extends HTMLElement {
244
244
  ({ classList } = this.querySelector(".toast-header .icon"));
245
245
  classList.remove(...contexts.map(context => `text-${cssClass(context)}`));
246
246
  classList.add(`text-${cssClass(value)}`);
247
+ if (!this.icon)
248
+ this.#updateIcon(icon(value));
247
249
  }
248
250
  /**
249
251
  * Updates the delay to hide the toast.
@@ -0,0 +1,16 @@
1
+ import { Computed, Signal as State } from "@preact/signals-core";
2
+ export { effect, type EffectOptions } from "@preact/signals-core";
3
+ /**
4
+ * Creates reactive primitives.
5
+ */
6
+ export declare class Signal {
7
+ /**
8
+ * Creates a new computed signal.
9
+ */
10
+ static readonly Computed: typeof Computed;
11
+ /**
12
+ * Creates a new plain signal.
13
+ */
14
+ static readonly State: typeof State;
15
+ }
16
+ //# sourceMappingURL=Signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Signal.d.ts","sourceRoot":"","sources":["../../src/Client/UI/Signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,EAAC,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAC,MAAM,EAAE,KAAK,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAEhE;;GAEG;AACH,qBAAa,MAAM;IAElB;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,QAAQ,kBAAY;IAEpC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,eAAS;CAC9B"}
@@ -0,0 +1,15 @@
1
+ import { Computed, Signal as State } from "@preact/signals-core";
2
+ export { effect } from "@preact/signals-core";
3
+ /**
4
+ * Creates reactive primitives.
5
+ */
6
+ export class Signal {
7
+ /**
8
+ * Creates a new computed signal.
9
+ */
10
+ static Computed = Computed;
11
+ /**
12
+ * Creates a new plain signal.
13
+ */
14
+ static State = State;
15
+ }
@@ -22,7 +22,7 @@ export class ViewportScroller {
22
22
  */
23
23
  get scrollOffset() {
24
24
  if (this.#scrollOffset < 0) {
25
- const fontSize = Number.parseInt(getComputedStyle(document.body).fontSize);
25
+ const fontSize = Number.parseInt(getComputedStyle(document.body).fontSize, 10);
26
26
  this.#scrollOffset = Number.isNaN(fontSize) ? 0 : fontSize * 2;
27
27
  const navbar = document.body.querySelector(".navbar");
28
28
  this.#scrollOffset += (navbar?.offsetHeight ?? 0);
package/package.json CHANGED
@@ -7,13 +7,18 @@
7
7
  "name": "@cedx/base",
8
8
  "repository": "cedx/base",
9
9
  "type": "module",
10
- "version": "0.36.1",
10
+ "version": "0.36.2",
11
+ "dependencies": {
12
+ "@preact/signals-core": "^1.13.0"
13
+ },
11
14
  "devDependencies": {
15
+ "@eslint/js": "^10.0.1",
12
16
  "@types/bootstrap": "^5.2.10",
13
17
  "@types/chai": "^5.2.3",
14
18
  "@types/mocha": "^10.0.10",
15
19
  "@types/node": "^25.2.3",
16
20
  "@types/serve-handler": "^6.1.4",
21
+ "bootstrap": "^5.3.8",
17
22
  "chai": "^6.2.2",
18
23
  "esbuild": "^0.27.3",
19
24
  "globals": "^17.3.0",
@@ -23,7 +28,7 @@
23
28
  "serve-handler": "^6.1.6",
24
29
  "typedoc": "^0.28.17",
25
30
  "typescript": "^5.9.3",
26
- "typescript-eslint": "^8.55.0"
31
+ "typescript-eslint": "^8.56.0"
27
32
  },
28
33
  "engines": {
29
34
  "node": ">=24.0.0"
@@ -0,0 +1,29 @@
1
+ import {effect, type EffectOptions} from "./Signal.js";
2
+
3
+ /**
4
+ * The base class for signal-based custom elements.
5
+ */
6
+ export abstract class Component extends HTMLElement {
7
+
8
+ /**
9
+ * The list of effect disposers.
10
+ */
11
+ #effects: Array<() => void> = [];
12
+
13
+ /**
14
+ * Method invoked when this component is disconnected.
15
+ */
16
+ disconnectedCallback(): void {
17
+ for (const dispose of this.#effects) dispose();
18
+ this.#effects = [];
19
+ }
20
+
21
+ /**
22
+ * Registers a new effect.
23
+ * @param callback The effect computation.
24
+ * @param options The effect options.
25
+ */
26
+ useEffect(callback: () => void, options?: EffectOptions): void {
27
+ this.#effects.push(effect(callback, options));
28
+ }
29
+ }
@@ -263,6 +263,8 @@ export class Toast extends HTMLElement {
263
263
  ({classList} = this.querySelector(".toast-header .icon")!);
264
264
  classList.remove(...contexts.map(context => `text-${cssClass(context)}`));
265
265
  classList.add(`text-${cssClass(value)}`);
266
+
267
+ if (!this.icon) this.#updateIcon(icon(value));
266
268
  }
267
269
 
268
270
  /**
@@ -0,0 +1,18 @@
1
+ import {Computed, Signal as State} from "@preact/signals-core";
2
+ export {effect, type EffectOptions} from "@preact/signals-core";
3
+
4
+ /**
5
+ * Creates reactive primitives.
6
+ */
7
+ export class Signal { // eslint-disable-line @typescript-eslint/no-extraneous-class
8
+
9
+ /**
10
+ * Creates a new computed signal.
11
+ */
12
+ static readonly Computed = Computed;
13
+
14
+ /**
15
+ * Creates a new plain signal.
16
+ */
17
+ static readonly State = State;
18
+ }
@@ -37,7 +37,7 @@ export class ViewportScroller {
37
37
  */
38
38
  get scrollOffset(): number {
39
39
  if (this.#scrollOffset < 0) {
40
- const fontSize = Number.parseInt(getComputedStyle(document.body).fontSize);
40
+ const fontSize = Number.parseInt(getComputedStyle(document.body).fontSize, 10);
41
41
  this.#scrollOffset = Number.isNaN(fontSize) ? 0 : fontSize * 2;
42
42
 
43
43
  const navbar = document.body.querySelector<HTMLElement>(".navbar");