@mappoh/nova 0.3.0 → 0.5.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 +180 -30
- package/dist/alert/alert.d.ts +32 -0
- package/dist/alert/alert.d.ts.map +1 -0
- package/dist/alert/alert.js +307 -0
- package/dist/alert/alert.js.map +1 -0
- package/dist/alert/index.d.ts +3 -0
- package/dist/alert/index.d.ts.map +1 -0
- package/dist/alert/index.js +2 -0
- package/dist/alert/index.js.map +1 -0
- package/dist/animation/flip.d.ts.map +1 -1
- package/dist/animation/flip.js +19 -12
- package/dist/animation/flip.js.map +1 -1
- package/dist/animation/stagger.d.ts +43 -0
- package/dist/animation/stagger.d.ts.map +1 -0
- package/dist/animation/stagger.js +150 -0
- package/dist/animation/stagger.js.map +1 -0
- package/dist/avatar/avatar.d.ts +27 -0
- package/dist/avatar/avatar.d.ts.map +1 -0
- package/dist/avatar/avatar.js +132 -0
- package/dist/avatar/avatar.js.map +1 -0
- package/dist/avatar/index.d.ts +3 -0
- package/dist/avatar/index.d.ts.map +1 -0
- package/dist/avatar/index.js +2 -0
- package/dist/avatar/index.js.map +1 -0
- package/dist/badge/badge.d.ts +27 -0
- package/dist/badge/badge.d.ts.map +1 -0
- package/dist/badge/badge.js +118 -0
- package/dist/badge/badge.js.map +1 -0
- package/dist/badge/index.d.ts +3 -0
- package/dist/badge/index.d.ts.map +1 -0
- package/dist/badge/index.js +2 -0
- package/dist/badge/index.js.map +1 -0
- package/dist/cache/cache.d.ts +28 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +67 -0
- package/dist/cache/cache.js.map +1 -0
- package/dist/cache/index.d.ts +3 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +2 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/chart/chart.d.ts +4 -0
- package/dist/chart/chart.d.ts.map +1 -1
- package/dist/chart/chart.js +89 -6
- package/dist/chart/chart.js.map +1 -1
- package/dist/command-palette/command-palette.d.ts +31 -0
- package/dist/command-palette/command-palette.d.ts.map +1 -0
- package/dist/command-palette/command-palette.js +590 -0
- package/dist/command-palette/command-palette.js.map +1 -0
- package/dist/command-palette/index.d.ts +3 -0
- package/dist/command-palette/index.d.ts.map +1 -0
- package/dist/command-palette/index.js +2 -0
- package/dist/command-palette/index.js.map +1 -0
- package/dist/component/component.d.ts +21 -2
- package/dist/component/component.d.ts.map +1 -1
- package/dist/component/component.js +127 -7
- package/dist/component/component.js.map +1 -1
- package/dist/component/connect.d.ts +52 -0
- package/dist/component/connect.d.ts.map +1 -1
- package/dist/component/connect.js +151 -25
- package/dist/component/connect.js.map +1 -1
- package/dist/component/directives.d.ts +20 -0
- package/dist/component/directives.d.ts.map +1 -0
- package/dist/component/directives.js +42 -0
- package/dist/component/directives.js.map +1 -0
- package/dist/component/html.d.ts +8 -0
- package/dist/component/html.d.ts.map +1 -1
- package/dist/component/html.js +11 -0
- package/dist/component/html.js.map +1 -1
- package/dist/component/index.d.ts +9 -3
- package/dist/component/index.d.ts.map +1 -1
- package/dist/component/index.js +6 -2
- package/dist/component/index.js.map +1 -1
- package/dist/component/portal.d.ts +32 -0
- package/dist/component/portal.d.ts.map +1 -0
- package/dist/component/portal.js +70 -0
- package/dist/component/portal.js.map +1 -0
- package/dist/component/ref.d.ts +18 -0
- package/dist/component/ref.d.ts.map +1 -0
- package/dist/component/ref.js +17 -0
- package/dist/component/ref.js.map +1 -0
- package/dist/component/slot-styles.d.ts +18 -0
- package/dist/component/slot-styles.d.ts.map +1 -0
- package/dist/component/slot-styles.js +94 -0
- package/dist/component/slot-styles.js.map +1 -0
- package/dist/component/template.d.ts +2 -0
- package/dist/component/template.d.ts.map +1 -1
- package/dist/component/template.js +122 -4
- package/dist/component/template.js.map +1 -1
- package/dist/context/context.d.ts +39 -0
- package/dist/context/context.d.ts.map +1 -0
- package/dist/context/context.js +111 -0
- package/dist/context/context.js.map +1 -0
- package/dist/context/index.d.ts +3 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +2 -0
- package/dist/context/index.js.map +1 -0
- package/dist/devtools/devtools.d.ts +54 -0
- package/dist/devtools/devtools.d.ts.map +1 -1
- package/dist/devtools/devtools.js +86 -0
- package/dist/devtools/devtools.js.map +1 -1
- package/dist/devtools/index.d.ts +2 -2
- package/dist/devtools/index.d.ts.map +1 -1
- package/dist/devtools/index.js +1 -1
- package/dist/devtools/index.js.map +1 -1
- package/dist/editor/editor.d.ts +40 -0
- package/dist/editor/editor.d.ts.map +1 -0
- package/dist/editor/editor.js +955 -0
- package/dist/editor/editor.js.map +1 -0
- package/dist/editor/index.d.ts +3 -0
- package/dist/editor/index.d.ts.map +1 -0
- package/dist/editor/index.js +2 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/event-bus/event-bus.d.ts +20 -0
- package/dist/event-bus/event-bus.d.ts.map +1 -0
- package/dist/event-bus/event-bus.js +55 -0
- package/dist/event-bus/event-bus.js.map +1 -0
- package/dist/event-bus/index.d.ts +3 -0
- package/dist/event-bus/index.d.ts.map +1 -0
- package/dist/event-bus/index.js +2 -0
- package/dist/event-bus/index.js.map +1 -0
- package/dist/forms/form-engine.d.ts +1 -1
- package/dist/forms/form-engine.d.ts.map +1 -1
- package/dist/forms/wasm-validators.d.ts +19 -11
- package/dist/forms/wasm-validators.d.ts.map +1 -1
- package/dist/forms/wasm-validators.js +191 -31
- package/dist/forms/wasm-validators.js.map +1 -1
- package/dist/gesture/gesture.d.ts +2 -0
- package/dist/gesture/gesture.d.ts.map +1 -1
- package/dist/gesture/gesture.js +81 -0
- package/dist/gesture/gesture.js.map +1 -1
- package/dist/http/http.d.ts +8 -0
- package/dist/http/http.d.ts.map +1 -1
- package/dist/http/http.js +18 -4
- package/dist/http/http.js.map +1 -1
- package/dist/i18n/i18n.d.ts +6 -0
- package/dist/i18n/i18n.d.ts.map +1 -1
- package/dist/i18n/i18n.js +71 -9
- package/dist/i18n/i18n.js.map +1 -1
- package/dist/machine/index.d.ts +3 -0
- package/dist/machine/index.d.ts.map +1 -0
- package/dist/machine/index.js +2 -0
- package/dist/machine/index.js.map +1 -0
- package/dist/machine/machine.d.ts +26 -0
- package/dist/machine/machine.d.ts.map +1 -0
- package/dist/machine/machine.js +79 -0
- package/dist/machine/machine.js.map +1 -0
- package/dist/modal/modal.d.ts.map +1 -1
- package/dist/modal/modal.js +13 -29
- package/dist/modal/modal.js.map +1 -1
- package/dist/notification-center/index.d.ts +3 -0
- package/dist/notification-center/index.d.ts.map +1 -0
- package/dist/notification-center/index.js +2 -0
- package/dist/notification-center/index.js.map +1 -0
- package/dist/notification-center/notification-center.d.ts +55 -0
- package/dist/notification-center/notification-center.d.ts.map +1 -0
- package/dist/notification-center/notification-center.js +941 -0
- package/dist/notification-center/notification-center.js.map +1 -0
- package/dist/pagination/index.d.ts +3 -0
- package/dist/pagination/index.d.ts.map +1 -0
- package/dist/pagination/index.js +2 -0
- package/dist/pagination/index.js.map +1 -0
- package/dist/pagination/pagination.d.ts +31 -0
- package/dist/pagination/pagination.d.ts.map +1 -0
- package/dist/pagination/pagination.js +213 -0
- package/dist/pagination/pagination.js.map +1 -0
- package/dist/progress/progress.d.ts.map +1 -1
- package/dist/progress/progress.js +5 -7
- package/dist/progress/progress.js.map +1 -1
- package/dist/query/index.d.ts +3 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +2 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/query.d.ts +31 -0
- package/dist/query/query.d.ts.map +1 -0
- package/dist/query/query.js +150 -0
- package/dist/query/query.js.map +1 -0
- package/dist/radio-group/index.d.ts +3 -0
- package/dist/radio-group/index.d.ts.map +1 -0
- package/dist/radio-group/index.js +2 -0
- package/dist/radio-group/index.js.map +1 -0
- package/dist/radio-group/radio-group.d.ts +37 -0
- package/dist/radio-group/radio-group.d.ts.map +1 -0
- package/dist/radio-group/radio-group.js +251 -0
- package/dist/radio-group/radio-group.js.map +1 -0
- package/dist/rating/index.d.ts +3 -0
- package/dist/rating/index.d.ts.map +1 -0
- package/dist/rating/index.js +2 -0
- package/dist/rating/index.js.map +1 -0
- package/dist/rating/rating.d.ts +31 -0
- package/dist/rating/rating.d.ts.map +1 -0
- package/dist/rating/rating.js +187 -0
- package/dist/rating/rating.js.map +1 -0
- package/dist/router/router.d.ts +16 -1
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +88 -11
- package/dist/router/router.js.map +1 -1
- package/dist/skeleton/index.d.ts +3 -0
- package/dist/skeleton/index.d.ts.map +1 -0
- package/dist/skeleton/index.js +2 -0
- package/dist/skeleton/index.js.map +1 -0
- package/dist/skeleton/skeleton.d.ts +24 -0
- package/dist/skeleton/skeleton.d.ts.map +1 -0
- package/dist/skeleton/skeleton.js +91 -0
- package/dist/skeleton/skeleton.js.map +1 -0
- package/dist/slider/index.d.ts +3 -0
- package/dist/slider/index.d.ts.map +1 -0
- package/dist/slider/index.js +2 -0
- package/dist/slider/index.js.map +1 -0
- package/dist/slider/slider.d.ts +33 -0
- package/dist/slider/slider.d.ts.map +1 -0
- package/dist/slider/slider.js +248 -0
- package/dist/slider/slider.js.map +1 -0
- package/dist/spinner/index.d.ts +3 -0
- package/dist/spinner/index.d.ts.map +1 -0
- package/dist/spinner/index.js +2 -0
- package/dist/spinner/index.js.map +1 -0
- package/dist/spinner/spinner.d.ts +23 -0
- package/dist/spinner/spinner.d.ts.map +1 -0
- package/dist/spinner/spinner.js +82 -0
- package/dist/spinner/spinner.js.map +1 -0
- package/dist/sw/sw.d.ts.map +1 -1
- package/dist/sw/sw.js +39 -7
- package/dist/sw/sw.js.map +1 -1
- package/dist/switch/index.d.ts +3 -0
- package/dist/switch/index.d.ts.map +1 -0
- package/dist/switch/index.js +2 -0
- package/dist/switch/index.js.map +1 -0
- package/dist/switch/switch.d.ts +27 -0
- package/dist/switch/switch.d.ts.map +1 -0
- package/dist/switch/switch.js +163 -0
- package/dist/switch/switch.js.map +1 -0
- package/dist/theme/index.d.ts +2 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -0
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/scale.d.ts +40 -0
- package/dist/theme/scale.d.ts.map +1 -0
- package/dist/theme/scale.js +62 -0
- package/dist/theme/scale.js.map +1 -0
- package/dist/utils/index.d.ts +29 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +114 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/websocket/index.d.ts +3 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +2 -0
- package/dist/websocket/index.js.map +1 -0
- package/dist/websocket/websocket.d.ts +31 -0
- package/dist/websocket/websocket.d.ts.map +1 -0
- package/dist/websocket/websocket.js +164 -0
- package/dist/websocket/websocket.js.map +1 -0
- package/package.json +85 -1
|
@@ -24,6 +24,10 @@ export declare abstract class Component extends HTMLElement {
|
|
|
24
24
|
static styles: string;
|
|
25
25
|
/** Override to disable Shadow DOM. Light DOM components use global styles. Default: true */
|
|
26
26
|
static shadow: boolean;
|
|
27
|
+
/** Opt-in: auto-forward wheel events to scrollable containers inside Shadow DOM. Default: false */
|
|
28
|
+
static scrollFix: boolean;
|
|
29
|
+
/** Opt-in: log render triggers to console.debug. Default: false */
|
|
30
|
+
static debugRender: boolean;
|
|
27
31
|
/** Internal reactive state */
|
|
28
32
|
protected _state: Record<string, unknown>;
|
|
29
33
|
/** Proxy-wrapped state that triggers re-renders on mutation */
|
|
@@ -35,7 +39,10 @@ export declare abstract class Component extends HTMLElement {
|
|
|
35
39
|
private _renderScheduled;
|
|
36
40
|
private _cleanups;
|
|
37
41
|
private _instance;
|
|
42
|
+
private _instanceStrings;
|
|
38
43
|
private _styleInjected;
|
|
44
|
+
private _usesAdoptedSheets;
|
|
45
|
+
private _afterRenderCallbacks;
|
|
39
46
|
constructor();
|
|
40
47
|
/** Web Components: observed attributes from prop definitions */
|
|
41
48
|
static get observedAttributes(): string[];
|
|
@@ -45,7 +52,7 @@ export declare abstract class Component extends HTMLElement {
|
|
|
45
52
|
private _syncProps;
|
|
46
53
|
/** Schedule a microtask re-render (batches multiple state changes) */
|
|
47
54
|
protected _scheduleRender(): void;
|
|
48
|
-
/** Inject scoped
|
|
55
|
+
/** Inject scoped styles once into shadow root (shared via adoptedStyleSheets when supported) */
|
|
49
56
|
private _ensureStyles;
|
|
50
57
|
/** Perform the actual DOM update */
|
|
51
58
|
private _performRender;
|
|
@@ -60,6 +67,18 @@ export declare abstract class Component extends HTMLElement {
|
|
|
60
67
|
onUpdate(): void;
|
|
61
68
|
/** Called when component is removed from DOM */
|
|
62
69
|
onDestroy(): void;
|
|
70
|
+
/** Auto-forward wheel events to scrollable containers inside shadow DOM */
|
|
71
|
+
private _setupScrollForwarding;
|
|
72
|
+
/**
|
|
73
|
+
* Declarative event delegation within the component's root.
|
|
74
|
+
* Attaches a single listener and matches targets via CSS selector.
|
|
75
|
+
* Auto-cleanup on disconnect.
|
|
76
|
+
*
|
|
77
|
+
* Usage: this.on('click', '.delete-btn', (e, target) => { ... });
|
|
78
|
+
*/
|
|
79
|
+
protected on(event: string, selector: string, handler: (e: Event, target: Element) => void): void;
|
|
80
|
+
/** Register a callback to run after each render paint (requestAnimationFrame). */
|
|
81
|
+
_addAfterRender(fn: () => void): void;
|
|
63
82
|
/** Register a cleanup function to run on disconnect (used by useStore/useSignal/useEffect) */
|
|
64
83
|
_addCleanup(fn: () => void): void;
|
|
65
84
|
/** Query within shadow DOM */
|
|
@@ -71,6 +90,6 @@ export declare abstract class Component extends HTMLElement {
|
|
|
71
90
|
/** Register a component class as a custom element */
|
|
72
91
|
static define(): void;
|
|
73
92
|
}
|
|
74
|
-
export { html, raw } from './html';
|
|
93
|
+
export { html, raw, key } from './html';
|
|
75
94
|
export { TemplateResult } from './template';
|
|
76
95
|
//# sourceMappingURL=component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/component/component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,cAAc,EAAoC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/component/component.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,14 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { SafeHTML } from './html';
|
|
12
12
|
import { TemplateResult, createInstance } from './template';
|
|
13
|
+
import { _resetHookIndex } from './connect';
|
|
13
14
|
/** Shadow DOM base reset — mirrors the document-level reset.css for encapsulated components.
|
|
14
15
|
* NOTE: `*` must NOT set margin/padding — it bleeds into child custom elements' :host
|
|
15
16
|
* styles via the encapsulation context cascade (outer styles beat :host). */
|
|
16
17
|
const SHADOW_RESET = `:host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}h1,h2,h3,h4,h5,h6,p,figure,blockquote,pre{margin:0}ul,ol{margin:0;padding:0;list-style:none}a{color:inherit;text-decoration:none}button{cursor:pointer;border:none;background:none;margin:0;padding:0}input,button,textarea,select{font:inherit;color:inherit}h1,h2,h3,h4,h5,h6{overflow-wrap:break-word;font-weight:inherit;font-size:inherit}p{overflow-wrap:break-word}img,picture,video,canvas,svg{display:block;max-width:100%}`;
|
|
18
|
+
/** Shared CSSStyleSheet cache — one sheet per component class, shared across instances */
|
|
19
|
+
const sheetCache = new WeakMap();
|
|
20
|
+
let resetSheet = null;
|
|
17
21
|
export class Component extends HTMLElement {
|
|
18
22
|
/** Override in subclass: e.g. static tag = 'hero-section' */
|
|
19
23
|
static tag;
|
|
@@ -23,6 +27,10 @@ export class Component extends HTMLElement {
|
|
|
23
27
|
static styles = '';
|
|
24
28
|
/** Override to disable Shadow DOM. Light DOM components use global styles. Default: true */
|
|
25
29
|
static shadow = true;
|
|
30
|
+
/** Opt-in: auto-forward wheel events to scrollable containers inside Shadow DOM. Default: false */
|
|
31
|
+
static scrollFix = false;
|
|
32
|
+
/** Opt-in: log render triggers to console.debug. Default: false */
|
|
33
|
+
static debugRender = false;
|
|
26
34
|
/** Internal reactive state */
|
|
27
35
|
_state = {};
|
|
28
36
|
/** Proxy-wrapped state that triggers re-renders on mutation */
|
|
@@ -34,7 +42,10 @@ export class Component extends HTMLElement {
|
|
|
34
42
|
_renderScheduled = false;
|
|
35
43
|
_cleanups = [];
|
|
36
44
|
_instance = null;
|
|
45
|
+
_instanceStrings = null;
|
|
37
46
|
_styleInjected = false;
|
|
47
|
+
_usesAdoptedSheets = false;
|
|
48
|
+
_afterRenderCallbacks = [];
|
|
38
49
|
constructor() {
|
|
39
50
|
super();
|
|
40
51
|
const ctor = this.constructor;
|
|
@@ -46,6 +57,9 @@ export class Component extends HTMLElement {
|
|
|
46
57
|
if (old === value)
|
|
47
58
|
return true;
|
|
48
59
|
target[key] = value;
|
|
60
|
+
if (this.constructor.debugRender) {
|
|
61
|
+
console.debug(`[nova:render] <${this.constructor.tag}> state.${String(key)}`, { old, new: value });
|
|
62
|
+
}
|
|
49
63
|
this._scheduleRender();
|
|
50
64
|
return true;
|
|
51
65
|
},
|
|
@@ -90,12 +104,20 @@ export class Component extends HTMLElement {
|
|
|
90
104
|
this._renderScheduled = true;
|
|
91
105
|
queueMicrotask(() => {
|
|
92
106
|
this._renderScheduled = false;
|
|
107
|
+
if (!this._mounted)
|
|
108
|
+
return; // Component disconnected before microtask fired
|
|
93
109
|
this._performRender();
|
|
94
110
|
if (this._mounted)
|
|
95
111
|
this.onUpdate();
|
|
112
|
+
// Fire post-paint callbacks after DOM updates settle
|
|
113
|
+
if (this._afterRenderCallbacks.length > 0) {
|
|
114
|
+
const cbs = this._afterRenderCallbacks.slice();
|
|
115
|
+
requestAnimationFrame(() => { for (const cb of cbs)
|
|
116
|
+
cb(); });
|
|
117
|
+
}
|
|
96
118
|
});
|
|
97
119
|
}
|
|
98
|
-
/** Inject scoped
|
|
120
|
+
/** Inject scoped styles once into shadow root (shared via adoptedStyleSheets when supported) */
|
|
99
121
|
_ensureStyles() {
|
|
100
122
|
if (this._styleInjected)
|
|
101
123
|
return;
|
|
@@ -103,19 +125,40 @@ export class Component extends HTMLElement {
|
|
|
103
125
|
const ctor = this.constructor;
|
|
104
126
|
if (!ctor.shadow)
|
|
105
127
|
return;
|
|
128
|
+
const root = this._root;
|
|
129
|
+
// Use adoptedStyleSheets for shared CSSStyleSheet (all modern browsers)
|
|
130
|
+
if ('adoptedStyleSheets' in root) {
|
|
131
|
+
if (!resetSheet) {
|
|
132
|
+
resetSheet = new CSSStyleSheet();
|
|
133
|
+
resetSheet.replaceSync(SHADOW_RESET);
|
|
134
|
+
}
|
|
135
|
+
let sheet = sheetCache.get(ctor);
|
|
136
|
+
if (!sheet) {
|
|
137
|
+
sheet = new CSSStyleSheet();
|
|
138
|
+
sheet.replaceSync(ctor.styles);
|
|
139
|
+
sheetCache.set(ctor, sheet);
|
|
140
|
+
}
|
|
141
|
+
root.adoptedStyleSheets = [resetSheet, sheet];
|
|
142
|
+
this._usesAdoptedSheets = true;
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Fallback: inline <style> for older browsers
|
|
106
146
|
const style = document.createElement('style');
|
|
107
147
|
style.textContent = SHADOW_RESET + ctor.styles;
|
|
108
148
|
this._root.insertBefore(style, this._root.firstChild);
|
|
109
149
|
}
|
|
110
150
|
/** Perform the actual DOM update */
|
|
111
151
|
_performRender() {
|
|
152
|
+
// Reset useComputed call-order index before each render pass
|
|
153
|
+
_resetHookIndex(this);
|
|
112
154
|
const content = this.render();
|
|
113
155
|
if (content instanceof TemplateResult) {
|
|
114
156
|
// Template parts engine — surgical DOM updates
|
|
115
157
|
if (this._instance &&
|
|
158
|
+
this._instanceStrings === content.strings &&
|
|
116
159
|
this._instance.nodes.length > 0 &&
|
|
117
160
|
this._instance.nodes[0].parentNode) {
|
|
118
|
-
// Same
|
|
161
|
+
// Same template structure — update Parts only
|
|
119
162
|
this._instance.update(content.values);
|
|
120
163
|
}
|
|
121
164
|
else {
|
|
@@ -125,18 +168,20 @@ export class Component extends HTMLElement {
|
|
|
125
168
|
// Clear any previous innerHTML content (transition from SafeHTML or first render)
|
|
126
169
|
const ctor = this.constructor;
|
|
127
170
|
if (ctor.shadow) {
|
|
128
|
-
// Keep <style> if injected, clear everything else
|
|
129
|
-
|
|
171
|
+
// Keep <style> if injected via inline (not adoptedStyleSheets), clear everything else
|
|
172
|
+
const preserveCount = (this._styleInjected && !this._usesAdoptedSheets) ? 1 : 0;
|
|
173
|
+
while (this._root.childNodes.length > preserveCount) {
|
|
130
174
|
this._root.removeChild(this._root.lastChild);
|
|
131
175
|
}
|
|
132
176
|
}
|
|
133
177
|
else {
|
|
134
|
-
this._root.
|
|
178
|
+
this._root.textContent = '';
|
|
135
179
|
}
|
|
136
180
|
this._ensureStyles();
|
|
137
181
|
const instance = createInstance(content);
|
|
138
182
|
this._root.appendChild(instance.fragment);
|
|
139
183
|
this._instance = instance;
|
|
184
|
+
this._instanceStrings = content.strings;
|
|
140
185
|
}
|
|
141
186
|
}
|
|
142
187
|
else if (content instanceof SafeHTML) {
|
|
@@ -145,6 +190,7 @@ export class Component extends HTMLElement {
|
|
|
145
190
|
this._instance.dispose();
|
|
146
191
|
this._instance = null;
|
|
147
192
|
}
|
|
193
|
+
this._instanceStrings = null;
|
|
148
194
|
this._styleInjected = false;
|
|
149
195
|
const ctor = this.constructor;
|
|
150
196
|
if (ctor.shadow) {
|
|
@@ -160,6 +206,11 @@ export class Component extends HTMLElement {
|
|
|
160
206
|
this._syncProps();
|
|
161
207
|
this._performRender();
|
|
162
208
|
this._mounted = true;
|
|
209
|
+
// Auto-forward wheel events to scrollable shadow DOM containers
|
|
210
|
+
const ctor = this.constructor;
|
|
211
|
+
if (ctor.scrollFix && ctor.shadow) {
|
|
212
|
+
this._setupScrollForwarding();
|
|
213
|
+
}
|
|
163
214
|
this.onMount();
|
|
164
215
|
}
|
|
165
216
|
disconnectedCallback() {
|
|
@@ -169,19 +220,25 @@ export class Component extends HTMLElement {
|
|
|
169
220
|
this._instance.dispose();
|
|
170
221
|
this._instance = null;
|
|
171
222
|
}
|
|
223
|
+
this._instanceStrings = null;
|
|
172
224
|
this._styleInjected = false;
|
|
173
225
|
// Run auto-cleanups registered by useStore/useSignal/useEffect
|
|
174
226
|
for (const fn of this._cleanups)
|
|
175
227
|
fn();
|
|
176
228
|
this._cleanups.length = 0;
|
|
229
|
+
this._afterRenderCallbacks.length = 0;
|
|
177
230
|
this.onDestroy();
|
|
178
231
|
}
|
|
179
232
|
attributeChangedCallback(name, oldValue, newValue) {
|
|
180
233
|
if (oldValue === newValue)
|
|
181
234
|
return;
|
|
182
235
|
this.props[name] = this._parseProp(name, newValue);
|
|
183
|
-
if (this._mounted)
|
|
236
|
+
if (this._mounted) {
|
|
237
|
+
if (this.constructor.debugRender) {
|
|
238
|
+
console.debug(`[nova:render] <${this.constructor.tag}> prop "${name}"`, { old: oldValue, new: newValue });
|
|
239
|
+
}
|
|
184
240
|
this._scheduleRender();
|
|
241
|
+
}
|
|
185
242
|
}
|
|
186
243
|
/** Called after first render and DOM attachment */
|
|
187
244
|
onMount() { }
|
|
@@ -190,6 +247,69 @@ export class Component extends HTMLElement {
|
|
|
190
247
|
/** Called when component is removed from DOM */
|
|
191
248
|
onDestroy() { }
|
|
192
249
|
// --- Utility ---
|
|
250
|
+
/** Auto-forward wheel events to scrollable containers inside shadow DOM */
|
|
251
|
+
_setupScrollForwarding() {
|
|
252
|
+
const root = this._root;
|
|
253
|
+
const handler = (e) => {
|
|
254
|
+
const els = root.elementsFromPoint(e.clientX, e.clientY);
|
|
255
|
+
for (const el of els) {
|
|
256
|
+
if (!(el instanceof HTMLElement))
|
|
257
|
+
continue;
|
|
258
|
+
const style = getComputedStyle(el);
|
|
259
|
+
const scrollableY = (style.overflowY === 'auto' || style.overflowY === 'scroll') && el.scrollHeight > el.clientHeight;
|
|
260
|
+
const scrollableX = (style.overflowX === 'auto' || style.overflowX === 'scroll') && el.scrollWidth > el.clientWidth;
|
|
261
|
+
if (scrollableY && e.deltaY !== 0) {
|
|
262
|
+
const max = el.scrollHeight - el.clientHeight;
|
|
263
|
+
const atTop = el.scrollTop <= 0 && e.deltaY < 0;
|
|
264
|
+
const atBottom = el.scrollTop >= max - 1 && e.deltaY > 0;
|
|
265
|
+
if (!atTop && !atBottom) {
|
|
266
|
+
el.scrollTop = Math.max(0, Math.min(max, el.scrollTop + e.deltaY));
|
|
267
|
+
e.preventDefault();
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (scrollableX && e.deltaX !== 0) {
|
|
272
|
+
const max = el.scrollWidth - el.clientWidth;
|
|
273
|
+
const atLeft = el.scrollLeft <= 0 && e.deltaX < 0;
|
|
274
|
+
const atRight = el.scrollLeft >= max - 1 && e.deltaX > 0;
|
|
275
|
+
if (!atLeft && !atRight) {
|
|
276
|
+
el.scrollLeft = Math.max(0, Math.min(max, el.scrollLeft + e.deltaX));
|
|
277
|
+
e.preventDefault();
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
this.addEventListener('wheel', handler, { passive: false });
|
|
284
|
+
this._addCleanup(() => this.removeEventListener('wheel', handler));
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Declarative event delegation within the component's root.
|
|
288
|
+
* Attaches a single listener and matches targets via CSS selector.
|
|
289
|
+
* Auto-cleanup on disconnect.
|
|
290
|
+
*
|
|
291
|
+
* Usage: this.on('click', '.delete-btn', (e, target) => { ... });
|
|
292
|
+
*/
|
|
293
|
+
on(event, selector, handler) {
|
|
294
|
+
const root = this._root;
|
|
295
|
+
const listener = (e) => {
|
|
296
|
+
const path = e.composedPath();
|
|
297
|
+
for (const node of path) {
|
|
298
|
+
if (node === root)
|
|
299
|
+
break;
|
|
300
|
+
if (node instanceof Element && node.matches(selector)) {
|
|
301
|
+
handler(e, node);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
root.addEventListener(event, listener);
|
|
307
|
+
this._addCleanup(() => root.removeEventListener(event, listener));
|
|
308
|
+
}
|
|
309
|
+
/** Register a callback to run after each render paint (requestAnimationFrame). */
|
|
310
|
+
_addAfterRender(fn) {
|
|
311
|
+
this._afterRenderCallbacks.push(fn);
|
|
312
|
+
}
|
|
193
313
|
/** Register a cleanup function to run on disconnect (used by useStore/useSignal/useEffect) */
|
|
194
314
|
_addCleanup(fn) {
|
|
195
315
|
this._cleanups.push(fn);
|
|
@@ -214,6 +334,6 @@ export class Component extends HTMLElement {
|
|
|
214
334
|
}
|
|
215
335
|
}
|
|
216
336
|
// Re-export html for convenience
|
|
217
|
-
export { html, raw } from './html';
|
|
337
|
+
export { html, raw, key } from './html';
|
|
218
338
|
export { TemplateResult } from './template';
|
|
219
339
|
//# sourceMappingURL=component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,9 @@ interface SubscribableStore<T> {
|
|
|
19
19
|
* When the value changes, the component re-renders.
|
|
20
20
|
* Cleanup is automatic on disconnect.
|
|
21
21
|
*
|
|
22
|
+
* IMPORTANT: Call from onMount(), NOT from render(). Each call creates a new
|
|
23
|
+
* subscription — calling from render() accumulates duplicate subscriptions.
|
|
24
|
+
*
|
|
22
25
|
* @returns The current value of the signal.
|
|
23
26
|
*/
|
|
24
27
|
export declare function useSignal<T>(component: Component, signal: Subscribable<T>): T;
|
|
@@ -26,6 +29,9 @@ export declare function useSignal<T>(component: Component, signal: Subscribable<
|
|
|
26
29
|
* Connect a simple store to a component by key(s).
|
|
27
30
|
* When any of the specified keys change, the component re-renders.
|
|
28
31
|
* Cleanup is automatic on disconnect.
|
|
32
|
+
*
|
|
33
|
+
* IMPORTANT: Call from onMount(), NOT from render(). Each call creates new
|
|
34
|
+
* subscriptions — calling from render() accumulates duplicate subscriptions.
|
|
29
35
|
*/
|
|
30
36
|
export declare function useStore<T extends Record<string, any>>(component: Component, store: SubscribableStore<T>, ...keys: (keyof T)[]): void;
|
|
31
37
|
/**
|
|
@@ -56,5 +62,51 @@ export interface TickHandle {
|
|
|
56
62
|
* @returns TickHandle with pause/resume/destroy controls
|
|
57
63
|
*/
|
|
58
64
|
export declare function useTick(component: Component, callback: (elapsed: number) => void, intervalMs: number): TickHandle;
|
|
65
|
+
/** Reset the useComputed call-order index. Called from _performRender before render(). */
|
|
66
|
+
export declare function _resetHookIndex(component: object): void;
|
|
67
|
+
/**
|
|
68
|
+
* Memoize an expensive computation inside a component's render().
|
|
69
|
+
* The function is only re-executed when dependencies change (shallow Object.is comparison).
|
|
70
|
+
* Uses call-order indexing (like React hooks) — safe with inline arrow functions.
|
|
71
|
+
* The call index is reset synchronously in _performRender before each render().
|
|
72
|
+
* Cleanup is automatic on component disconnect.
|
|
73
|
+
*
|
|
74
|
+
* Note: Like React hooks, useComputed calls must not be conditional or reordered between renders.
|
|
75
|
+
*
|
|
76
|
+
* @param component The component to tie lifecycle to
|
|
77
|
+
* @param fn The computation function
|
|
78
|
+
* @param deps Dependency array — recompute when any dep changes
|
|
79
|
+
* @returns The cached (or freshly computed) result
|
|
80
|
+
*/
|
|
81
|
+
export declare function useComputed<T>(component: Component, fn: () => T, deps: unknown[]): T;
|
|
82
|
+
/** Same shape as TickHandle — kept as a separate type for API clarity */
|
|
83
|
+
export type IntervalHandle = TickHandle;
|
|
84
|
+
/**
|
|
85
|
+
* Create an auto-cleaned interval tied to a component's lifecycle.
|
|
86
|
+
* Unlike useTick, this does NOT pause when the tab is hidden — critical
|
|
87
|
+
* for countdowns and timers that must keep running.
|
|
88
|
+
*
|
|
89
|
+
* @param component The component to tie lifecycle to
|
|
90
|
+
* @param callback Function called on each tick. Receives elapsed ms since start.
|
|
91
|
+
* @param intervalMs Interval in milliseconds
|
|
92
|
+
*/
|
|
93
|
+
export declare function useInterval(component: Component, callback: (elapsed: number) => void, intervalMs: number): IntervalHandle;
|
|
94
|
+
/**
|
|
95
|
+
* Fix wheel-event scrolling for a specific container inside Shadow DOM.
|
|
96
|
+
* Attaches a wheel handler on the component host that forwards scroll
|
|
97
|
+
* events to the targeted container.
|
|
98
|
+
*
|
|
99
|
+
* @param component The component containing the scroll container
|
|
100
|
+
* @param selector CSS selector for the scrollable element within shadow DOM
|
|
101
|
+
*/
|
|
102
|
+
export declare function useScroll(component: Component, selector: string): void;
|
|
103
|
+
/**
|
|
104
|
+
* Register a callback to run after each render, in a requestAnimationFrame.
|
|
105
|
+
* Unlike onUpdate(), this guarantees the browser has painted before the callback fires.
|
|
106
|
+
*
|
|
107
|
+
* @param component The component to observe
|
|
108
|
+
* @param fn Callback to run after each render paint
|
|
109
|
+
*/
|
|
110
|
+
export declare function afterRender(component: Component, fn: () => void): void;
|
|
59
111
|
export {};
|
|
60
112
|
//# sourceMappingURL=connect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/component/connect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,yFAAyF;AACzF,UAAU,YAAY,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC;IACN,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/C;AAED,kEAAkE;AAClE,UAAU,iBAAiB,CAAC,CAAC;IAC3B,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5F;AAED
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/component/connect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,yFAAyF;AACzF,UAAU,YAAY,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC;IACN,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/C;AAED,kEAAkE;AAClE,UAAU,iBAAiB,CAAC,CAAC;IAC3B,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5F;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAM7E;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpD,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC3B,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GACnB,IAAI,CAON;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAKnF;AAID,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,KAAK,IAAI,IAAI,CAAC;IACd,yBAAyB;IACzB,MAAM,IAAI,IAAI,CAAC;IACf,wDAAwD;IACxD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,4EAA4E;IAC5E,OAAO,IAAI,IAAI,CAAC;CACjB;AAmED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CACrB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACnC,UAAU,EAAE,MAAM,GACjB,UAAU,CAEZ;AAOD,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEvD;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,CAAC,EACX,IAAI,EAAE,OAAO,EAAE,GACd,CAAC,CAqBH;AAID,yEAAyE;AACzE,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC;AAExC;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACnC,UAAU,EAAE,MAAM,GACjB,cAAc,CAEhB;AAID;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAmCtE;AAID;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAOtE"}
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
* When the value changes, the component re-renders.
|
|
10
10
|
* Cleanup is automatic on disconnect.
|
|
11
11
|
*
|
|
12
|
+
* IMPORTANT: Call from onMount(), NOT from render(). Each call creates a new
|
|
13
|
+
* subscription — calling from render() accumulates duplicate subscriptions.
|
|
14
|
+
*
|
|
12
15
|
* @returns The current value of the signal.
|
|
13
16
|
*/
|
|
14
17
|
export function useSignal(component, signal) {
|
|
@@ -22,6 +25,9 @@ export function useSignal(component, signal) {
|
|
|
22
25
|
* Connect a simple store to a component by key(s).
|
|
23
26
|
* When any of the specified keys change, the component re-renders.
|
|
24
27
|
* Cleanup is automatic on disconnect.
|
|
28
|
+
*
|
|
29
|
+
* IMPORTANT: Call from onMount(), NOT from render(). Each call creates new
|
|
30
|
+
* subscriptions — calling from render() accumulates duplicate subscriptions.
|
|
25
31
|
*/
|
|
26
32
|
export function useStore(component, store, ...keys) {
|
|
27
33
|
for (const key of keys) {
|
|
@@ -41,20 +47,12 @@ export function useEffect(component, fn) {
|
|
|
41
47
|
component._addCleanup(cleanup);
|
|
42
48
|
}
|
|
43
49
|
}
|
|
44
|
-
/**
|
|
45
|
-
|
|
46
|
-
* Automatically pauses when the document tab is hidden and resumes when visible.
|
|
47
|
-
* Cleanup is automatic on component disconnect.
|
|
48
|
-
*
|
|
49
|
-
* @param component The component to tie lifecycle to
|
|
50
|
-
* @param callback Function called on each tick. Receives elapsed ms since start.
|
|
51
|
-
* @param intervalMs Interval in milliseconds
|
|
52
|
-
* @returns TickHandle with pause/resume/destroy controls
|
|
53
|
-
*/
|
|
54
|
-
export function useTick(component, callback, intervalMs) {
|
|
50
|
+
/** Shared factory for useTick and useInterval */
|
|
51
|
+
function createTimer(component, callback, intervalMs, pauseOnHidden) {
|
|
55
52
|
let id = null;
|
|
56
53
|
let running = false;
|
|
57
54
|
let ms = intervalMs;
|
|
55
|
+
let destroyed = false;
|
|
58
56
|
const startTime = Date.now();
|
|
59
57
|
function tick() {
|
|
60
58
|
callback(Date.now() - startTime);
|
|
@@ -74,20 +72,20 @@ export function useTick(component, callback, intervalMs) {
|
|
|
74
72
|
id = null;
|
|
75
73
|
}
|
|
76
74
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
if (
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
75
|
+
let onVisibility = null;
|
|
76
|
+
if (pauseOnHidden) {
|
|
77
|
+
onVisibility = () => {
|
|
78
|
+
if (document.hidden) {
|
|
79
|
+
if (running)
|
|
80
|
+
stop();
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
if (!destroyed)
|
|
84
|
+
start();
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
document.addEventListener('visibilitychange', onVisibility);
|
|
87
88
|
}
|
|
88
|
-
let destroyed = false;
|
|
89
|
-
document.addEventListener('visibilitychange', onVisibility);
|
|
90
|
-
// Start immediately
|
|
91
89
|
start();
|
|
92
90
|
const handle = {
|
|
93
91
|
pause() { stop(); },
|
|
@@ -106,10 +104,138 @@ export function useTick(component, callback, intervalMs) {
|
|
|
106
104
|
return;
|
|
107
105
|
destroyed = true;
|
|
108
106
|
stop();
|
|
109
|
-
|
|
107
|
+
if (onVisibility) {
|
|
108
|
+
document.removeEventListener('visibilitychange', onVisibility);
|
|
109
|
+
}
|
|
110
110
|
},
|
|
111
111
|
};
|
|
112
112
|
component._addCleanup(handle.destroy);
|
|
113
113
|
return handle;
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Create an auto-cleaned interval tied to a component's lifecycle.
|
|
117
|
+
* Automatically pauses when the document tab is hidden and resumes when visible.
|
|
118
|
+
* Cleanup is automatic on component disconnect.
|
|
119
|
+
*
|
|
120
|
+
* @param component The component to tie lifecycle to
|
|
121
|
+
* @param callback Function called on each tick. Receives elapsed ms since start.
|
|
122
|
+
* @param intervalMs Interval in milliseconds
|
|
123
|
+
* @returns TickHandle with pause/resume/destroy controls
|
|
124
|
+
*/
|
|
125
|
+
export function useTick(component, callback, intervalMs) {
|
|
126
|
+
return createTimer(component, callback, intervalMs, true);
|
|
127
|
+
}
|
|
128
|
+
/* ---- Computed / Memoization Helper ---- */
|
|
129
|
+
/** Call-order index for useComputed — reset by _resetHookIndex before each render */
|
|
130
|
+
const hookIdx = new WeakMap();
|
|
131
|
+
/** Reset the useComputed call-order index. Called from _performRender before render(). */
|
|
132
|
+
export function _resetHookIndex(component) {
|
|
133
|
+
hookIdx.set(component, 0);
|
|
134
|
+
}
|
|
135
|
+
const computedCache = new WeakMap();
|
|
136
|
+
/**
|
|
137
|
+
* Memoize an expensive computation inside a component's render().
|
|
138
|
+
* The function is only re-executed when dependencies change (shallow Object.is comparison).
|
|
139
|
+
* Uses call-order indexing (like React hooks) — safe with inline arrow functions.
|
|
140
|
+
* The call index is reset synchronously in _performRender before each render().
|
|
141
|
+
* Cleanup is automatic on component disconnect.
|
|
142
|
+
*
|
|
143
|
+
* Note: Like React hooks, useComputed calls must not be conditional or reordered between renders.
|
|
144
|
+
*
|
|
145
|
+
* @param component The component to tie lifecycle to
|
|
146
|
+
* @param fn The computation function
|
|
147
|
+
* @param deps Dependency array — recompute when any dep changes
|
|
148
|
+
* @returns The cached (or freshly computed) result
|
|
149
|
+
*/
|
|
150
|
+
export function useComputed(component, fn, deps) {
|
|
151
|
+
let cache = computedCache.get(component);
|
|
152
|
+
if (!cache) {
|
|
153
|
+
cache = new Map();
|
|
154
|
+
computedCache.set(component, cache);
|
|
155
|
+
component._addCleanup(() => computedCache.delete(component));
|
|
156
|
+
}
|
|
157
|
+
const key = hookIdx.get(component) ?? 0;
|
|
158
|
+
hookIdx.set(component, key + 1);
|
|
159
|
+
const entry = cache.get(key);
|
|
160
|
+
if (entry) {
|
|
161
|
+
const changed = deps.length !== entry.deps.length ||
|
|
162
|
+
deps.some((d, i) => !Object.is(d, entry.deps[i]));
|
|
163
|
+
if (!changed)
|
|
164
|
+
return entry.result;
|
|
165
|
+
}
|
|
166
|
+
const result = fn();
|
|
167
|
+
cache.set(key, { deps, result });
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Create an auto-cleaned interval tied to a component's lifecycle.
|
|
172
|
+
* Unlike useTick, this does NOT pause when the tab is hidden — critical
|
|
173
|
+
* for countdowns and timers that must keep running.
|
|
174
|
+
*
|
|
175
|
+
* @param component The component to tie lifecycle to
|
|
176
|
+
* @param callback Function called on each tick. Receives elapsed ms since start.
|
|
177
|
+
* @param intervalMs Interval in milliseconds
|
|
178
|
+
*/
|
|
179
|
+
export function useInterval(component, callback, intervalMs) {
|
|
180
|
+
return createTimer(component, callback, intervalMs, false);
|
|
181
|
+
}
|
|
182
|
+
/* ---- Scroll Helper ---- */
|
|
183
|
+
/**
|
|
184
|
+
* Fix wheel-event scrolling for a specific container inside Shadow DOM.
|
|
185
|
+
* Attaches a wheel handler on the component host that forwards scroll
|
|
186
|
+
* events to the targeted container.
|
|
187
|
+
*
|
|
188
|
+
* @param component The component containing the scroll container
|
|
189
|
+
* @param selector CSS selector for the scrollable element within shadow DOM
|
|
190
|
+
*/
|
|
191
|
+
export function useScroll(component, selector) {
|
|
192
|
+
let cleanup = null;
|
|
193
|
+
let disposed = false;
|
|
194
|
+
// Register cleanup immediately so fast unmount is safe
|
|
195
|
+
component._addCleanup(() => {
|
|
196
|
+
disposed = true;
|
|
197
|
+
if (cleanup)
|
|
198
|
+
cleanup();
|
|
199
|
+
});
|
|
200
|
+
queueMicrotask(() => {
|
|
201
|
+
if (disposed)
|
|
202
|
+
return; // Component already disconnected
|
|
203
|
+
const root = component._root;
|
|
204
|
+
const el = root.querySelector(selector);
|
|
205
|
+
if (!el)
|
|
206
|
+
return;
|
|
207
|
+
function onWheel(e) {
|
|
208
|
+
const { scrollTop, scrollHeight, clientHeight } = el;
|
|
209
|
+
const max = scrollHeight - clientHeight;
|
|
210
|
+
if (max <= 0)
|
|
211
|
+
return;
|
|
212
|
+
const atTop = scrollTop <= 0 && e.deltaY < 0;
|
|
213
|
+
const atBottom = scrollTop >= max - 1 && e.deltaY > 0;
|
|
214
|
+
if (!atTop && !atBottom) {
|
|
215
|
+
e.stopPropagation();
|
|
216
|
+
el.scrollTop = Math.max(0, Math.min(max, el.scrollTop + e.deltaY));
|
|
217
|
+
e.preventDefault();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
component.addEventListener('wheel', onWheel, { passive: false });
|
|
221
|
+
cleanup = () => component.removeEventListener('wheel', onWheel);
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
/* ---- After-Render Hook ---- */
|
|
225
|
+
/**
|
|
226
|
+
* Register a callback to run after each render, in a requestAnimationFrame.
|
|
227
|
+
* Unlike onUpdate(), this guarantees the browser has painted before the callback fires.
|
|
228
|
+
*
|
|
229
|
+
* @param component The component to observe
|
|
230
|
+
* @param fn Callback to run after each render paint
|
|
231
|
+
*/
|
|
232
|
+
export function afterRender(component, fn) {
|
|
233
|
+
component._addAfterRender(fn);
|
|
234
|
+
component._addCleanup(() => {
|
|
235
|
+
const cbs = component._afterRenderCallbacks;
|
|
236
|
+
const idx = cbs.indexOf(fn);
|
|
237
|
+
if (idx !== -1)
|
|
238
|
+
cbs.splice(idx, 1);
|
|
239
|
+
});
|
|
240
|
+
}
|
|
115
241
|
//# sourceMappingURL=connect.js.map
|