@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.
Files changed (252) hide show
  1. package/README.md +180 -30
  2. package/dist/alert/alert.d.ts +32 -0
  3. package/dist/alert/alert.d.ts.map +1 -0
  4. package/dist/alert/alert.js +307 -0
  5. package/dist/alert/alert.js.map +1 -0
  6. package/dist/alert/index.d.ts +3 -0
  7. package/dist/alert/index.d.ts.map +1 -0
  8. package/dist/alert/index.js +2 -0
  9. package/dist/alert/index.js.map +1 -0
  10. package/dist/animation/flip.d.ts.map +1 -1
  11. package/dist/animation/flip.js +19 -12
  12. package/dist/animation/flip.js.map +1 -1
  13. package/dist/animation/stagger.d.ts +43 -0
  14. package/dist/animation/stagger.d.ts.map +1 -0
  15. package/dist/animation/stagger.js +150 -0
  16. package/dist/animation/stagger.js.map +1 -0
  17. package/dist/avatar/avatar.d.ts +27 -0
  18. package/dist/avatar/avatar.d.ts.map +1 -0
  19. package/dist/avatar/avatar.js +132 -0
  20. package/dist/avatar/avatar.js.map +1 -0
  21. package/dist/avatar/index.d.ts +3 -0
  22. package/dist/avatar/index.d.ts.map +1 -0
  23. package/dist/avatar/index.js +2 -0
  24. package/dist/avatar/index.js.map +1 -0
  25. package/dist/badge/badge.d.ts +27 -0
  26. package/dist/badge/badge.d.ts.map +1 -0
  27. package/dist/badge/badge.js +118 -0
  28. package/dist/badge/badge.js.map +1 -0
  29. package/dist/badge/index.d.ts +3 -0
  30. package/dist/badge/index.d.ts.map +1 -0
  31. package/dist/badge/index.js +2 -0
  32. package/dist/badge/index.js.map +1 -0
  33. package/dist/cache/cache.d.ts +28 -0
  34. package/dist/cache/cache.d.ts.map +1 -0
  35. package/dist/cache/cache.js +67 -0
  36. package/dist/cache/cache.js.map +1 -0
  37. package/dist/cache/index.d.ts +3 -0
  38. package/dist/cache/index.d.ts.map +1 -0
  39. package/dist/cache/index.js +2 -0
  40. package/dist/cache/index.js.map +1 -0
  41. package/dist/chart/chart.d.ts +4 -0
  42. package/dist/chart/chart.d.ts.map +1 -1
  43. package/dist/chart/chart.js +89 -6
  44. package/dist/chart/chart.js.map +1 -1
  45. package/dist/command-palette/command-palette.d.ts +31 -0
  46. package/dist/command-palette/command-palette.d.ts.map +1 -0
  47. package/dist/command-palette/command-palette.js +590 -0
  48. package/dist/command-palette/command-palette.js.map +1 -0
  49. package/dist/command-palette/index.d.ts +3 -0
  50. package/dist/command-palette/index.d.ts.map +1 -0
  51. package/dist/command-palette/index.js +2 -0
  52. package/dist/command-palette/index.js.map +1 -0
  53. package/dist/component/component.d.ts +21 -2
  54. package/dist/component/component.d.ts.map +1 -1
  55. package/dist/component/component.js +127 -7
  56. package/dist/component/component.js.map +1 -1
  57. package/dist/component/connect.d.ts +52 -0
  58. package/dist/component/connect.d.ts.map +1 -1
  59. package/dist/component/connect.js +151 -25
  60. package/dist/component/connect.js.map +1 -1
  61. package/dist/component/directives.d.ts +20 -0
  62. package/dist/component/directives.d.ts.map +1 -0
  63. package/dist/component/directives.js +42 -0
  64. package/dist/component/directives.js.map +1 -0
  65. package/dist/component/html.d.ts +8 -0
  66. package/dist/component/html.d.ts.map +1 -1
  67. package/dist/component/html.js +11 -0
  68. package/dist/component/html.js.map +1 -1
  69. package/dist/component/index.d.ts +9 -3
  70. package/dist/component/index.d.ts.map +1 -1
  71. package/dist/component/index.js +6 -2
  72. package/dist/component/index.js.map +1 -1
  73. package/dist/component/portal.d.ts +32 -0
  74. package/dist/component/portal.d.ts.map +1 -0
  75. package/dist/component/portal.js +70 -0
  76. package/dist/component/portal.js.map +1 -0
  77. package/dist/component/ref.d.ts +18 -0
  78. package/dist/component/ref.d.ts.map +1 -0
  79. package/dist/component/ref.js +17 -0
  80. package/dist/component/ref.js.map +1 -0
  81. package/dist/component/slot-styles.d.ts +18 -0
  82. package/dist/component/slot-styles.d.ts.map +1 -0
  83. package/dist/component/slot-styles.js +94 -0
  84. package/dist/component/slot-styles.js.map +1 -0
  85. package/dist/component/template.d.ts +2 -0
  86. package/dist/component/template.d.ts.map +1 -1
  87. package/dist/component/template.js +122 -4
  88. package/dist/component/template.js.map +1 -1
  89. package/dist/context/context.d.ts +39 -0
  90. package/dist/context/context.d.ts.map +1 -0
  91. package/dist/context/context.js +111 -0
  92. package/dist/context/context.js.map +1 -0
  93. package/dist/context/index.d.ts +3 -0
  94. package/dist/context/index.d.ts.map +1 -0
  95. package/dist/context/index.js +2 -0
  96. package/dist/context/index.js.map +1 -0
  97. package/dist/devtools/devtools.d.ts +54 -0
  98. package/dist/devtools/devtools.d.ts.map +1 -1
  99. package/dist/devtools/devtools.js +86 -0
  100. package/dist/devtools/devtools.js.map +1 -1
  101. package/dist/devtools/index.d.ts +2 -2
  102. package/dist/devtools/index.d.ts.map +1 -1
  103. package/dist/devtools/index.js +1 -1
  104. package/dist/devtools/index.js.map +1 -1
  105. package/dist/editor/editor.d.ts +40 -0
  106. package/dist/editor/editor.d.ts.map +1 -0
  107. package/dist/editor/editor.js +955 -0
  108. package/dist/editor/editor.js.map +1 -0
  109. package/dist/editor/index.d.ts +3 -0
  110. package/dist/editor/index.d.ts.map +1 -0
  111. package/dist/editor/index.js +2 -0
  112. package/dist/editor/index.js.map +1 -0
  113. package/dist/event-bus/event-bus.d.ts +20 -0
  114. package/dist/event-bus/event-bus.d.ts.map +1 -0
  115. package/dist/event-bus/event-bus.js +55 -0
  116. package/dist/event-bus/event-bus.js.map +1 -0
  117. package/dist/event-bus/index.d.ts +3 -0
  118. package/dist/event-bus/index.d.ts.map +1 -0
  119. package/dist/event-bus/index.js +2 -0
  120. package/dist/event-bus/index.js.map +1 -0
  121. package/dist/forms/form-engine.d.ts +1 -1
  122. package/dist/forms/form-engine.d.ts.map +1 -1
  123. package/dist/forms/wasm-validators.d.ts +19 -11
  124. package/dist/forms/wasm-validators.d.ts.map +1 -1
  125. package/dist/forms/wasm-validators.js +191 -31
  126. package/dist/forms/wasm-validators.js.map +1 -1
  127. package/dist/gesture/gesture.d.ts +2 -0
  128. package/dist/gesture/gesture.d.ts.map +1 -1
  129. package/dist/gesture/gesture.js +81 -0
  130. package/dist/gesture/gesture.js.map +1 -1
  131. package/dist/http/http.d.ts +8 -0
  132. package/dist/http/http.d.ts.map +1 -1
  133. package/dist/http/http.js +18 -4
  134. package/dist/http/http.js.map +1 -1
  135. package/dist/i18n/i18n.d.ts +6 -0
  136. package/dist/i18n/i18n.d.ts.map +1 -1
  137. package/dist/i18n/i18n.js +71 -9
  138. package/dist/i18n/i18n.js.map +1 -1
  139. package/dist/machine/index.d.ts +3 -0
  140. package/dist/machine/index.d.ts.map +1 -0
  141. package/dist/machine/index.js +2 -0
  142. package/dist/machine/index.js.map +1 -0
  143. package/dist/machine/machine.d.ts +26 -0
  144. package/dist/machine/machine.d.ts.map +1 -0
  145. package/dist/machine/machine.js +79 -0
  146. package/dist/machine/machine.js.map +1 -0
  147. package/dist/modal/modal.d.ts.map +1 -1
  148. package/dist/modal/modal.js +13 -29
  149. package/dist/modal/modal.js.map +1 -1
  150. package/dist/notification-center/index.d.ts +3 -0
  151. package/dist/notification-center/index.d.ts.map +1 -0
  152. package/dist/notification-center/index.js +2 -0
  153. package/dist/notification-center/index.js.map +1 -0
  154. package/dist/notification-center/notification-center.d.ts +55 -0
  155. package/dist/notification-center/notification-center.d.ts.map +1 -0
  156. package/dist/notification-center/notification-center.js +941 -0
  157. package/dist/notification-center/notification-center.js.map +1 -0
  158. package/dist/pagination/index.d.ts +3 -0
  159. package/dist/pagination/index.d.ts.map +1 -0
  160. package/dist/pagination/index.js +2 -0
  161. package/dist/pagination/index.js.map +1 -0
  162. package/dist/pagination/pagination.d.ts +31 -0
  163. package/dist/pagination/pagination.d.ts.map +1 -0
  164. package/dist/pagination/pagination.js +213 -0
  165. package/dist/pagination/pagination.js.map +1 -0
  166. package/dist/progress/progress.d.ts.map +1 -1
  167. package/dist/progress/progress.js +5 -7
  168. package/dist/progress/progress.js.map +1 -1
  169. package/dist/query/index.d.ts +3 -0
  170. package/dist/query/index.d.ts.map +1 -0
  171. package/dist/query/index.js +2 -0
  172. package/dist/query/index.js.map +1 -0
  173. package/dist/query/query.d.ts +31 -0
  174. package/dist/query/query.d.ts.map +1 -0
  175. package/dist/query/query.js +150 -0
  176. package/dist/query/query.js.map +1 -0
  177. package/dist/radio-group/index.d.ts +3 -0
  178. package/dist/radio-group/index.d.ts.map +1 -0
  179. package/dist/radio-group/index.js +2 -0
  180. package/dist/radio-group/index.js.map +1 -0
  181. package/dist/radio-group/radio-group.d.ts +37 -0
  182. package/dist/radio-group/radio-group.d.ts.map +1 -0
  183. package/dist/radio-group/radio-group.js +251 -0
  184. package/dist/radio-group/radio-group.js.map +1 -0
  185. package/dist/rating/index.d.ts +3 -0
  186. package/dist/rating/index.d.ts.map +1 -0
  187. package/dist/rating/index.js +2 -0
  188. package/dist/rating/index.js.map +1 -0
  189. package/dist/rating/rating.d.ts +31 -0
  190. package/dist/rating/rating.d.ts.map +1 -0
  191. package/dist/rating/rating.js +187 -0
  192. package/dist/rating/rating.js.map +1 -0
  193. package/dist/router/router.d.ts +16 -1
  194. package/dist/router/router.d.ts.map +1 -1
  195. package/dist/router/router.js +88 -11
  196. package/dist/router/router.js.map +1 -1
  197. package/dist/skeleton/index.d.ts +3 -0
  198. package/dist/skeleton/index.d.ts.map +1 -0
  199. package/dist/skeleton/index.js +2 -0
  200. package/dist/skeleton/index.js.map +1 -0
  201. package/dist/skeleton/skeleton.d.ts +24 -0
  202. package/dist/skeleton/skeleton.d.ts.map +1 -0
  203. package/dist/skeleton/skeleton.js +91 -0
  204. package/dist/skeleton/skeleton.js.map +1 -0
  205. package/dist/slider/index.d.ts +3 -0
  206. package/dist/slider/index.d.ts.map +1 -0
  207. package/dist/slider/index.js +2 -0
  208. package/dist/slider/index.js.map +1 -0
  209. package/dist/slider/slider.d.ts +33 -0
  210. package/dist/slider/slider.d.ts.map +1 -0
  211. package/dist/slider/slider.js +248 -0
  212. package/dist/slider/slider.js.map +1 -0
  213. package/dist/spinner/index.d.ts +3 -0
  214. package/dist/spinner/index.d.ts.map +1 -0
  215. package/dist/spinner/index.js +2 -0
  216. package/dist/spinner/index.js.map +1 -0
  217. package/dist/spinner/spinner.d.ts +23 -0
  218. package/dist/spinner/spinner.d.ts.map +1 -0
  219. package/dist/spinner/spinner.js +82 -0
  220. package/dist/spinner/spinner.js.map +1 -0
  221. package/dist/sw/sw.d.ts.map +1 -1
  222. package/dist/sw/sw.js +39 -7
  223. package/dist/sw/sw.js.map +1 -1
  224. package/dist/switch/index.d.ts +3 -0
  225. package/dist/switch/index.d.ts.map +1 -0
  226. package/dist/switch/index.js +2 -0
  227. package/dist/switch/index.js.map +1 -0
  228. package/dist/switch/switch.d.ts +27 -0
  229. package/dist/switch/switch.d.ts.map +1 -0
  230. package/dist/switch/switch.js +163 -0
  231. package/dist/switch/switch.js.map +1 -0
  232. package/dist/theme/index.d.ts +2 -0
  233. package/dist/theme/index.d.ts.map +1 -1
  234. package/dist/theme/index.js +1 -0
  235. package/dist/theme/index.js.map +1 -1
  236. package/dist/theme/scale.d.ts +40 -0
  237. package/dist/theme/scale.d.ts.map +1 -0
  238. package/dist/theme/scale.js +62 -0
  239. package/dist/theme/scale.js.map +1 -0
  240. package/dist/utils/index.d.ts +29 -0
  241. package/dist/utils/index.d.ts.map +1 -0
  242. package/dist/utils/index.js +114 -0
  243. package/dist/utils/index.js.map +1 -0
  244. package/dist/websocket/index.d.ts +3 -0
  245. package/dist/websocket/index.d.ts.map +1 -0
  246. package/dist/websocket/index.js +2 -0
  247. package/dist/websocket/index.js.map +1 -0
  248. package/dist/websocket/websocket.d.ts +31 -0
  249. package/dist/websocket/websocket.d.ts.map +1 -0
  250. package/dist/websocket/websocket.js +164 -0
  251. package/dist/websocket/websocket.js.map +1 -0
  252. 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 <style> once into shadow root */
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;AAE9E,MAAM,MAAM,QAAQ,GAAG,OAAO,MAAM,GAAG,OAAO,MAAM,GAAG,OAAO,OAAO,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAOD,8BAAsB,SAAU,SAAQ,WAAW;IACjD,6DAA6D;IAC7D,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;IAEnB,wDAAwD;IACxD,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,cAAc,CAAC,CAAM;IAE7D,oFAAoF;IACpF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAE3B,4FAA4F;IAC5F,MAAM,CAAC,MAAM,EAAE,OAAO,CAAQ;IAE9B,8BAA8B;IAC9B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAE/C,+DAA+D;IAC/D,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,2BAA2B;IAC3B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAE9C,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,cAAc,CAAS;;IAmB/B,gEAAgE;IAChE,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,+CAA+C;IAC/C,OAAO,CAAC,UAAU;IAqBlB,mCAAmC;IACnC,OAAO,CAAC,UAAU;IAOlB,sEAAsE;IACtE,SAAS,CAAC,eAAe,IAAI,IAAI;IAUjC,kDAAkD;IAClD,OAAO,CAAC,aAAa;IAYrB,oCAAoC;IACpC,OAAO,CAAC,cAAc;IAiDtB,iBAAiB,IAAI,IAAI;IAOzB,oBAAoB,IAAI,IAAI;IAW5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAQ9F,yGAAyG;IACzG,QAAQ,CAAC,MAAM,IAAI,cAAc,GAAG,QAAQ;IAE5C,mDAAmD;IACnD,OAAO,IAAI,IAAI;IAEf,sDAAsD;IACtD,QAAQ,IAAI,IAAI;IAEhB,gDAAgD;IAChD,SAAS,IAAI,IAAI;IAIjB,8FAA8F;IAC9F,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjC,8BAA8B;IAC9B,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAI7C,kCAAkC;IAClC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE;IAIzC,0BAA0B;IAC1B,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAIpD,qDAAqD;IACrD,MAAM,CAAC,MAAM,IAAI,IAAI;CAKtB;AAGD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,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 <style> once into shadow root */
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 component, update Parts only
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
- while (this._root.childNodes.length > (this._styleInjected ? 1 : 0)) {
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.innerHTML = '';
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;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAM7E;AAED;;;;GAIG;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;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CACrB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACnC,UAAU,EAAE,MAAM,GACjB,UAAU,CAuDZ"}
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
- * Create an auto-cleaned interval tied to a component's lifecycle.
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
- // Pause when tab is hidden, resume when visible
78
- function onVisibility() {
79
- if (document.hidden) {
80
- if (running)
81
- stop();
82
- }
83
- else {
84
- if (!destroyed)
85
- start();
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
- document.removeEventListener('visibilitychange', onVisibility);
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