@mappoh/nova 0.2.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/README.md +180 -30
  2. package/dist/a11y/index.d.ts +40 -0
  3. package/dist/a11y/index.d.ts.map +1 -0
  4. package/dist/a11y/index.js +162 -0
  5. package/dist/a11y/index.js.map +1 -0
  6. package/dist/alert/alert.d.ts +32 -0
  7. package/dist/alert/alert.d.ts.map +1 -0
  8. package/dist/alert/alert.js +307 -0
  9. package/dist/alert/alert.js.map +1 -0
  10. package/dist/alert/index.d.ts +3 -0
  11. package/dist/alert/index.d.ts.map +1 -0
  12. package/dist/alert/index.js +2 -0
  13. package/dist/alert/index.js.map +1 -0
  14. package/dist/animation/flip.d.ts +28 -0
  15. package/dist/animation/flip.d.ts.map +1 -0
  16. package/dist/animation/flip.js +113 -0
  17. package/dist/animation/flip.js.map +1 -0
  18. package/dist/animation/spring.d.ts +34 -0
  19. package/dist/animation/spring.d.ts.map +1 -0
  20. package/dist/animation/spring.js +86 -0
  21. package/dist/animation/spring.js.map +1 -0
  22. package/dist/animation/stagger.d.ts +43 -0
  23. package/dist/animation/stagger.d.ts.map +1 -0
  24. package/dist/animation/stagger.js +150 -0
  25. package/dist/animation/stagger.js.map +1 -0
  26. package/dist/avatar/avatar.d.ts +27 -0
  27. package/dist/avatar/avatar.d.ts.map +1 -0
  28. package/dist/avatar/avatar.js +132 -0
  29. package/dist/avatar/avatar.js.map +1 -0
  30. package/dist/avatar/index.d.ts +3 -0
  31. package/dist/avatar/index.d.ts.map +1 -0
  32. package/dist/avatar/index.js +2 -0
  33. package/dist/avatar/index.js.map +1 -0
  34. package/dist/badge/badge.d.ts +27 -0
  35. package/dist/badge/badge.d.ts.map +1 -0
  36. package/dist/badge/badge.js +118 -0
  37. package/dist/badge/badge.js.map +1 -0
  38. package/dist/badge/index.d.ts +3 -0
  39. package/dist/badge/index.d.ts.map +1 -0
  40. package/dist/badge/index.js +2 -0
  41. package/dist/badge/index.js.map +1 -0
  42. package/dist/cache/cache.d.ts +28 -0
  43. package/dist/cache/cache.d.ts.map +1 -0
  44. package/dist/cache/cache.js +67 -0
  45. package/dist/cache/cache.js.map +1 -0
  46. package/dist/cache/index.d.ts +3 -0
  47. package/dist/cache/index.d.ts.map +1 -0
  48. package/dist/cache/index.js +2 -0
  49. package/dist/cache/index.js.map +1 -0
  50. package/dist/chart/chart.d.ts +31 -0
  51. package/dist/chart/chart.d.ts.map +1 -0
  52. package/dist/chart/chart.js +372 -0
  53. package/dist/chart/chart.js.map +1 -0
  54. package/dist/chart/index.d.ts +3 -0
  55. package/dist/chart/index.d.ts.map +1 -0
  56. package/dist/chart/index.js +2 -0
  57. package/dist/chart/index.js.map +1 -0
  58. package/dist/color-picker/color-picker.d.ts +18 -0
  59. package/dist/color-picker/color-picker.d.ts.map +1 -0
  60. package/dist/color-picker/color-picker.js +243 -0
  61. package/dist/color-picker/color-picker.js.map +1 -0
  62. package/dist/color-picker/index.d.ts +3 -0
  63. package/dist/color-picker/index.d.ts.map +1 -0
  64. package/dist/color-picker/index.js +2 -0
  65. package/dist/color-picker/index.js.map +1 -0
  66. package/dist/combobox/combobox.d.ts +26 -0
  67. package/dist/combobox/combobox.d.ts.map +1 -0
  68. package/dist/combobox/combobox.js +262 -0
  69. package/dist/combobox/combobox.js.map +1 -0
  70. package/dist/combobox/index.d.ts +3 -0
  71. package/dist/combobox/index.d.ts.map +1 -0
  72. package/dist/combobox/index.js +2 -0
  73. package/dist/combobox/index.js.map +1 -0
  74. package/dist/command-palette/command-palette.d.ts +31 -0
  75. package/dist/command-palette/command-palette.d.ts.map +1 -0
  76. package/dist/command-palette/command-palette.js +590 -0
  77. package/dist/command-palette/command-palette.js.map +1 -0
  78. package/dist/command-palette/index.d.ts +3 -0
  79. package/dist/command-palette/index.d.ts.map +1 -0
  80. package/dist/command-palette/index.js +2 -0
  81. package/dist/command-palette/index.js.map +1 -0
  82. package/dist/component/component.d.ts +20 -2
  83. package/dist/component/component.d.ts.map +1 -1
  84. package/dist/component/component.js +115 -5
  85. package/dist/component/component.js.map +1 -1
  86. package/dist/component/connect.d.ts +50 -0
  87. package/dist/component/connect.d.ts.map +1 -1
  88. package/dist/component/connect.js +135 -0
  89. package/dist/component/connect.js.map +1 -1
  90. package/dist/component/directives.d.ts +20 -0
  91. package/dist/component/directives.d.ts.map +1 -0
  92. package/dist/component/directives.js +42 -0
  93. package/dist/component/directives.js.map +1 -0
  94. package/dist/component/html.d.ts +8 -0
  95. package/dist/component/html.d.ts.map +1 -1
  96. package/dist/component/html.js +11 -0
  97. package/dist/component/html.js.map +1 -1
  98. package/dist/component/index.d.ts +9 -3
  99. package/dist/component/index.d.ts.map +1 -1
  100. package/dist/component/index.js +6 -2
  101. package/dist/component/index.js.map +1 -1
  102. package/dist/component/portal.d.ts +32 -0
  103. package/dist/component/portal.d.ts.map +1 -0
  104. package/dist/component/portal.js +59 -0
  105. package/dist/component/portal.js.map +1 -0
  106. package/dist/component/ref.d.ts +18 -0
  107. package/dist/component/ref.d.ts.map +1 -0
  108. package/dist/component/ref.js +17 -0
  109. package/dist/component/ref.js.map +1 -0
  110. package/dist/component/slot-styles.d.ts +18 -0
  111. package/dist/component/slot-styles.d.ts.map +1 -0
  112. package/dist/component/slot-styles.js +47 -0
  113. package/dist/component/slot-styles.js.map +1 -0
  114. package/dist/component/template.d.ts +2 -0
  115. package/dist/component/template.d.ts.map +1 -1
  116. package/dist/component/template.js +122 -4
  117. package/dist/component/template.js.map +1 -1
  118. package/dist/context/context.d.ts +39 -0
  119. package/dist/context/context.d.ts.map +1 -0
  120. package/dist/context/context.js +111 -0
  121. package/dist/context/context.js.map +1 -0
  122. package/dist/context/index.d.ts +3 -0
  123. package/dist/context/index.d.ts.map +1 -0
  124. package/dist/context/index.js +2 -0
  125. package/dist/context/index.js.map +1 -0
  126. package/dist/data-table/data-table.d.ts +34 -0
  127. package/dist/data-table/data-table.d.ts.map +1 -0
  128. package/dist/data-table/data-table.js +256 -0
  129. package/dist/data-table/data-table.js.map +1 -0
  130. package/dist/data-table/index.d.ts +3 -0
  131. package/dist/data-table/index.d.ts.map +1 -0
  132. package/dist/data-table/index.js +2 -0
  133. package/dist/data-table/index.js.map +1 -0
  134. package/dist/date-picker/date-picker.d.ts +22 -0
  135. package/dist/date-picker/date-picker.d.ts.map +1 -0
  136. package/dist/date-picker/date-picker.js +282 -0
  137. package/dist/date-picker/date-picker.js.map +1 -0
  138. package/dist/date-picker/index.d.ts +3 -0
  139. package/dist/date-picker/index.d.ts.map +1 -0
  140. package/dist/date-picker/index.js +2 -0
  141. package/dist/date-picker/index.js.map +1 -0
  142. package/dist/devtools/devtools.d.ts +54 -0
  143. package/dist/devtools/devtools.d.ts.map +1 -1
  144. package/dist/devtools/devtools.js +86 -0
  145. package/dist/devtools/devtools.js.map +1 -1
  146. package/dist/devtools/index.d.ts +2 -2
  147. package/dist/devtools/index.d.ts.map +1 -1
  148. package/dist/devtools/index.js +1 -1
  149. package/dist/devtools/index.js.map +1 -1
  150. package/dist/editor/editor.d.ts +40 -0
  151. package/dist/editor/editor.d.ts.map +1 -0
  152. package/dist/editor/editor.js +955 -0
  153. package/dist/editor/editor.js.map +1 -0
  154. package/dist/editor/index.d.ts +3 -0
  155. package/dist/editor/index.d.ts.map +1 -0
  156. package/dist/editor/index.js +2 -0
  157. package/dist/editor/index.js.map +1 -0
  158. package/dist/event-bus/event-bus.d.ts +20 -0
  159. package/dist/event-bus/event-bus.d.ts.map +1 -0
  160. package/dist/event-bus/event-bus.js +55 -0
  161. package/dist/event-bus/event-bus.js.map +1 -0
  162. package/dist/event-bus/index.d.ts +3 -0
  163. package/dist/event-bus/index.d.ts.map +1 -0
  164. package/dist/event-bus/index.js +2 -0
  165. package/dist/event-bus/index.js.map +1 -0
  166. package/dist/file-upload/file-upload.d.ts +24 -0
  167. package/dist/file-upload/file-upload.d.ts.map +1 -0
  168. package/dist/file-upload/file-upload.js +177 -0
  169. package/dist/file-upload/file-upload.js.map +1 -0
  170. package/dist/file-upload/index.d.ts +3 -0
  171. package/dist/file-upload/index.d.ts.map +1 -0
  172. package/dist/file-upload/index.js +2 -0
  173. package/dist/file-upload/index.js.map +1 -0
  174. package/dist/forms/form-engine.d.ts +19 -6
  175. package/dist/forms/form-engine.d.ts.map +1 -1
  176. package/dist/forms/form-engine.js +97 -11
  177. package/dist/forms/form-engine.js.map +1 -1
  178. package/dist/forms/validators.d.ts +4 -0
  179. package/dist/forms/validators.d.ts.map +1 -1
  180. package/dist/forms/validators.js +6 -0
  181. package/dist/forms/validators.js.map +1 -1
  182. package/dist/forms/wasm-validators.d.ts +19 -11
  183. package/dist/forms/wasm-validators.d.ts.map +1 -1
  184. package/dist/forms/wasm-validators.js +191 -31
  185. package/dist/forms/wasm-validators.js.map +1 -1
  186. package/dist/gesture/gesture.d.ts +2 -0
  187. package/dist/gesture/gesture.d.ts.map +1 -1
  188. package/dist/gesture/gesture.js +81 -0
  189. package/dist/gesture/gesture.js.map +1 -1
  190. package/dist/http/http.d.ts +8 -0
  191. package/dist/http/http.d.ts.map +1 -1
  192. package/dist/http/http.js +18 -4
  193. package/dist/http/http.js.map +1 -1
  194. package/dist/i18n/i18n.d.ts +6 -0
  195. package/dist/i18n/i18n.d.ts.map +1 -1
  196. package/dist/i18n/i18n.js +71 -9
  197. package/dist/i18n/i18n.js.map +1 -1
  198. package/dist/machine/index.d.ts +3 -0
  199. package/dist/machine/index.d.ts.map +1 -0
  200. package/dist/machine/index.js +2 -0
  201. package/dist/machine/index.js.map +1 -0
  202. package/dist/machine/machine.d.ts +26 -0
  203. package/dist/machine/machine.d.ts.map +1 -0
  204. package/dist/machine/machine.js +79 -0
  205. package/dist/machine/machine.js.map +1 -0
  206. package/dist/modal/modal.d.ts.map +1 -1
  207. package/dist/modal/modal.js +13 -29
  208. package/dist/modal/modal.js.map +1 -1
  209. package/dist/notification-center/index.d.ts +3 -0
  210. package/dist/notification-center/index.d.ts.map +1 -0
  211. package/dist/notification-center/index.js +2 -0
  212. package/dist/notification-center/index.js.map +1 -0
  213. package/dist/notification-center/notification-center.d.ts +55 -0
  214. package/dist/notification-center/notification-center.d.ts.map +1 -0
  215. package/dist/notification-center/notification-center.js +941 -0
  216. package/dist/notification-center/notification-center.js.map +1 -0
  217. package/dist/pagination/index.d.ts +3 -0
  218. package/dist/pagination/index.d.ts.map +1 -0
  219. package/dist/pagination/index.js +2 -0
  220. package/dist/pagination/index.js.map +1 -0
  221. package/dist/pagination/pagination.d.ts +31 -0
  222. package/dist/pagination/pagination.d.ts.map +1 -0
  223. package/dist/pagination/pagination.js +213 -0
  224. package/dist/pagination/pagination.js.map +1 -0
  225. package/dist/progress/progress.d.ts.map +1 -1
  226. package/dist/progress/progress.js +5 -7
  227. package/dist/progress/progress.js.map +1 -1
  228. package/dist/query/index.d.ts +3 -0
  229. package/dist/query/index.d.ts.map +1 -0
  230. package/dist/query/index.js +2 -0
  231. package/dist/query/index.js.map +1 -0
  232. package/dist/query/query.d.ts +31 -0
  233. package/dist/query/query.d.ts.map +1 -0
  234. package/dist/query/query.js +150 -0
  235. package/dist/query/query.js.map +1 -0
  236. package/dist/radio-group/index.d.ts +3 -0
  237. package/dist/radio-group/index.d.ts.map +1 -0
  238. package/dist/radio-group/index.js +2 -0
  239. package/dist/radio-group/index.js.map +1 -0
  240. package/dist/radio-group/radio-group.d.ts +37 -0
  241. package/dist/radio-group/radio-group.d.ts.map +1 -0
  242. package/dist/radio-group/radio-group.js +251 -0
  243. package/dist/radio-group/radio-group.js.map +1 -0
  244. package/dist/rating/index.d.ts +3 -0
  245. package/dist/rating/index.d.ts.map +1 -0
  246. package/dist/rating/index.js +2 -0
  247. package/dist/rating/index.js.map +1 -0
  248. package/dist/rating/rating.d.ts +31 -0
  249. package/dist/rating/rating.d.ts.map +1 -0
  250. package/dist/rating/rating.js +187 -0
  251. package/dist/rating/rating.js.map +1 -0
  252. package/dist/router/index.d.ts +1 -1
  253. package/dist/router/index.d.ts.map +1 -1
  254. package/dist/router/index.js +1 -1
  255. package/dist/router/index.js.map +1 -1
  256. package/dist/router/router.d.ts +30 -1
  257. package/dist/router/router.d.ts.map +1 -1
  258. package/dist/router/router.js +131 -16
  259. package/dist/router/router.js.map +1 -1
  260. package/dist/skeleton/index.d.ts +3 -0
  261. package/dist/skeleton/index.d.ts.map +1 -0
  262. package/dist/skeleton/index.js +2 -0
  263. package/dist/skeleton/index.js.map +1 -0
  264. package/dist/skeleton/skeleton.d.ts +24 -0
  265. package/dist/skeleton/skeleton.d.ts.map +1 -0
  266. package/dist/skeleton/skeleton.js +91 -0
  267. package/dist/skeleton/skeleton.js.map +1 -0
  268. package/dist/slider/index.d.ts +3 -0
  269. package/dist/slider/index.d.ts.map +1 -0
  270. package/dist/slider/index.js +2 -0
  271. package/dist/slider/index.js.map +1 -0
  272. package/dist/slider/slider.d.ts +33 -0
  273. package/dist/slider/slider.d.ts.map +1 -0
  274. package/dist/slider/slider.js +248 -0
  275. package/dist/slider/slider.js.map +1 -0
  276. package/dist/spinner/index.d.ts +3 -0
  277. package/dist/spinner/index.d.ts.map +1 -0
  278. package/dist/spinner/index.js +2 -0
  279. package/dist/spinner/index.js.map +1 -0
  280. package/dist/spinner/spinner.d.ts +23 -0
  281. package/dist/spinner/spinner.d.ts.map +1 -0
  282. package/dist/spinner/spinner.js +82 -0
  283. package/dist/spinner/spinner.js.map +1 -0
  284. package/dist/state/store.d.ts +4 -0
  285. package/dist/state/store.d.ts.map +1 -1
  286. package/dist/state/store.js +27 -7
  287. package/dist/state/store.js.map +1 -1
  288. package/dist/sw/sw.d.ts.map +1 -1
  289. package/dist/sw/sw.js +39 -7
  290. package/dist/sw/sw.js.map +1 -1
  291. package/dist/switch/index.d.ts +3 -0
  292. package/dist/switch/index.d.ts.map +1 -0
  293. package/dist/switch/index.js +2 -0
  294. package/dist/switch/index.js.map +1 -0
  295. package/dist/switch/switch.d.ts +27 -0
  296. package/dist/switch/switch.d.ts.map +1 -0
  297. package/dist/switch/switch.js +163 -0
  298. package/dist/switch/switch.js.map +1 -0
  299. package/dist/theme/index.d.ts +2 -0
  300. package/dist/theme/index.d.ts.map +1 -1
  301. package/dist/theme/index.js +1 -0
  302. package/dist/theme/index.js.map +1 -1
  303. package/dist/theme/scale.d.ts +40 -0
  304. package/dist/theme/scale.d.ts.map +1 -0
  305. package/dist/theme/scale.js +62 -0
  306. package/dist/theme/scale.js.map +1 -0
  307. package/dist/tree-view/index.d.ts +3 -0
  308. package/dist/tree-view/index.d.ts.map +1 -0
  309. package/dist/tree-view/index.js +2 -0
  310. package/dist/tree-view/index.js.map +1 -0
  311. package/dist/tree-view/tree-view.d.ts +29 -0
  312. package/dist/tree-view/tree-view.d.ts.map +1 -0
  313. package/dist/tree-view/tree-view.js +273 -0
  314. package/dist/tree-view/tree-view.js.map +1 -0
  315. package/dist/utils/index.d.ts +29 -0
  316. package/dist/utils/index.d.ts.map +1 -0
  317. package/dist/utils/index.js +114 -0
  318. package/dist/utils/index.js.map +1 -0
  319. package/dist/websocket/index.d.ts +3 -0
  320. package/dist/websocket/index.d.ts.map +1 -0
  321. package/dist/websocket/index.js +2 -0
  322. package/dist/websocket/index.js.map +1 -0
  323. package/dist/websocket/websocket.d.ts +31 -0
  324. package/dist/websocket/websocket.d.ts.map +1 -0
  325. package/dist/websocket/websocket.js +164 -0
  326. package/dist/websocket/websocket.js.map +1 -0
  327. package/package.json +135 -2
@@ -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 */
@@ -36,6 +40,8 @@ export declare abstract class Component extends HTMLElement {
36
40
  private _cleanups;
37
41
  private _instance;
38
42
  private _styleInjected;
43
+ private _usesAdoptedSheets;
44
+ private _afterRenderCallbacks;
39
45
  constructor();
40
46
  /** Web Components: observed attributes from prop definitions */
41
47
  static get observedAttributes(): string[];
@@ -45,7 +51,7 @@ export declare abstract class Component extends HTMLElement {
45
51
  private _syncProps;
46
52
  /** Schedule a microtask re-render (batches multiple state changes) */
47
53
  protected _scheduleRender(): void;
48
- /** Inject scoped <style> once into shadow root */
54
+ /** Inject scoped styles once into shadow root (shared via adoptedStyleSheets when supported) */
49
55
  private _ensureStyles;
50
56
  /** Perform the actual DOM update */
51
57
  private _performRender;
@@ -60,6 +66,18 @@ export declare abstract class Component extends HTMLElement {
60
66
  onUpdate(): void;
61
67
  /** Called when component is removed from DOM */
62
68
  onDestroy(): void;
69
+ /** Auto-forward wheel events to scrollable containers inside shadow DOM */
70
+ private _setupScrollForwarding;
71
+ /**
72
+ * Declarative event delegation within the component's root.
73
+ * Attaches a single listener and matches targets via CSS selector.
74
+ * Auto-cleanup on disconnect.
75
+ *
76
+ * Usage: this.on('click', '.delete-btn', (e, target) => { ... });
77
+ */
78
+ protected on(event: string, selector: string, handler: (e: Event, target: Element) => void): void;
79
+ /** Register a callback to run after each render paint (requestAnimationFrame). */
80
+ _addAfterRender(fn: () => void): void;
63
81
  /** Register a cleanup function to run on disconnect (used by useStore/useSignal/useEffect) */
64
82
  _addCleanup(fn: () => void): void;
65
83
  /** Query within shadow DOM */
@@ -71,6 +89,6 @@ export declare abstract class Component extends HTMLElement {
71
89
  /** Register a component class as a custom element */
72
90
  static define(): void;
73
91
  }
74
- export { html, raw } from './html';
92
+ export { html, raw, key } from './html';
75
93
  export { TemplateResult } from './template';
76
94
  //# 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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"}
@@ -14,6 +14,9 @@ import { TemplateResult, createInstance } from './template';
14
14
  * NOTE: `*` must NOT set margin/padding — it bleeds into child custom elements' :host
15
15
  * styles via the encapsulation context cascade (outer styles beat :host). */
16
16
  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%}`;
17
+ /** Shared CSSStyleSheet cache — one sheet per component class, shared across instances */
18
+ const sheetCache = new WeakMap();
19
+ let resetSheet = null;
17
20
  export class Component extends HTMLElement {
18
21
  /** Override in subclass: e.g. static tag = 'hero-section' */
19
22
  static tag;
@@ -23,6 +26,10 @@ export class Component extends HTMLElement {
23
26
  static styles = '';
24
27
  /** Override to disable Shadow DOM. Light DOM components use global styles. Default: true */
25
28
  static shadow = true;
29
+ /** Opt-in: auto-forward wheel events to scrollable containers inside Shadow DOM. Default: false */
30
+ static scrollFix = false;
31
+ /** Opt-in: log render triggers to console.debug. Default: false */
32
+ static debugRender = false;
26
33
  /** Internal reactive state */
27
34
  _state = {};
28
35
  /** Proxy-wrapped state that triggers re-renders on mutation */
@@ -35,6 +42,8 @@ export class Component extends HTMLElement {
35
42
  _cleanups = [];
36
43
  _instance = null;
37
44
  _styleInjected = false;
45
+ _usesAdoptedSheets = false;
46
+ _afterRenderCallbacks = [];
38
47
  constructor() {
39
48
  super();
40
49
  const ctor = this.constructor;
@@ -46,6 +55,9 @@ export class Component extends HTMLElement {
46
55
  if (old === value)
47
56
  return true;
48
57
  target[key] = value;
58
+ if (this.constructor.debugRender) {
59
+ console.debug(`[nova:render] <${this.constructor.tag}> state.${String(key)}`, { old, new: value });
60
+ }
49
61
  this._scheduleRender();
50
62
  return true;
51
63
  },
@@ -93,9 +105,15 @@ export class Component extends HTMLElement {
93
105
  this._performRender();
94
106
  if (this._mounted)
95
107
  this.onUpdate();
108
+ // Fire post-paint callbacks after DOM updates settle
109
+ if (this._afterRenderCallbacks.length > 0) {
110
+ const cbs = this._afterRenderCallbacks.slice();
111
+ requestAnimationFrame(() => { for (const cb of cbs)
112
+ cb(); });
113
+ }
96
114
  });
97
115
  }
98
- /** Inject scoped <style> once into shadow root */
116
+ /** Inject scoped styles once into shadow root (shared via adoptedStyleSheets when supported) */
99
117
  _ensureStyles() {
100
118
  if (this._styleInjected)
101
119
  return;
@@ -103,6 +121,24 @@ export class Component extends HTMLElement {
103
121
  const ctor = this.constructor;
104
122
  if (!ctor.shadow)
105
123
  return;
124
+ const root = this._root;
125
+ // Use adoptedStyleSheets for shared CSSStyleSheet (all modern browsers)
126
+ if ('adoptedStyleSheets' in root) {
127
+ if (!resetSheet) {
128
+ resetSheet = new CSSStyleSheet();
129
+ resetSheet.replaceSync(SHADOW_RESET);
130
+ }
131
+ let sheet = sheetCache.get(ctor);
132
+ if (!sheet) {
133
+ sheet = new CSSStyleSheet();
134
+ sheet.replaceSync(ctor.styles);
135
+ sheetCache.set(ctor, sheet);
136
+ }
137
+ root.adoptedStyleSheets = [resetSheet, sheet];
138
+ this._usesAdoptedSheets = true;
139
+ return;
140
+ }
141
+ // Fallback: inline <style> for older browsers
106
142
  const style = document.createElement('style');
107
143
  style.textContent = SHADOW_RESET + ctor.styles;
108
144
  this._root.insertBefore(style, this._root.firstChild);
@@ -125,8 +161,9 @@ export class Component extends HTMLElement {
125
161
  // Clear any previous innerHTML content (transition from SafeHTML or first render)
126
162
  const ctor = this.constructor;
127
163
  if (ctor.shadow) {
128
- // Keep <style> if injected, clear everything else
129
- while (this._root.childNodes.length > (this._styleInjected ? 1 : 0)) {
164
+ // Keep <style> if injected via inline (not adoptedStyleSheets), clear everything else
165
+ const preserveCount = (this._styleInjected && !this._usesAdoptedSheets) ? 1 : 0;
166
+ while (this._root.childNodes.length > preserveCount) {
130
167
  this._root.removeChild(this._root.lastChild);
131
168
  }
132
169
  }
@@ -160,6 +197,11 @@ export class Component extends HTMLElement {
160
197
  this._syncProps();
161
198
  this._performRender();
162
199
  this._mounted = true;
200
+ // Auto-forward wheel events to scrollable shadow DOM containers
201
+ const ctor = this.constructor;
202
+ if (ctor.scrollFix && ctor.shadow) {
203
+ this._setupScrollForwarding();
204
+ }
163
205
  this.onMount();
164
206
  }
165
207
  disconnectedCallback() {
@@ -174,14 +216,19 @@ export class Component extends HTMLElement {
174
216
  for (const fn of this._cleanups)
175
217
  fn();
176
218
  this._cleanups.length = 0;
219
+ this._afterRenderCallbacks.length = 0;
177
220
  this.onDestroy();
178
221
  }
179
222
  attributeChangedCallback(name, oldValue, newValue) {
180
223
  if (oldValue === newValue)
181
224
  return;
182
225
  this.props[name] = this._parseProp(name, newValue);
183
- if (this._mounted)
226
+ if (this._mounted) {
227
+ if (this.constructor.debugRender) {
228
+ console.debug(`[nova:render] <${this.constructor.tag}> prop "${name}"`, { old: oldValue, new: newValue });
229
+ }
184
230
  this._scheduleRender();
231
+ }
185
232
  }
186
233
  /** Called after first render and DOM attachment */
187
234
  onMount() { }
@@ -190,6 +237,69 @@ export class Component extends HTMLElement {
190
237
  /** Called when component is removed from DOM */
191
238
  onDestroy() { }
192
239
  // --- Utility ---
240
+ /** Auto-forward wheel events to scrollable containers inside shadow DOM */
241
+ _setupScrollForwarding() {
242
+ const root = this._root;
243
+ const handler = (e) => {
244
+ const els = root.elementsFromPoint(e.clientX, e.clientY);
245
+ for (const el of els) {
246
+ if (!(el instanceof HTMLElement))
247
+ continue;
248
+ const style = getComputedStyle(el);
249
+ const scrollableY = (style.overflowY === 'auto' || style.overflowY === 'scroll') && el.scrollHeight > el.clientHeight;
250
+ const scrollableX = (style.overflowX === 'auto' || style.overflowX === 'scroll') && el.scrollWidth > el.clientWidth;
251
+ if (scrollableY && e.deltaY !== 0) {
252
+ const max = el.scrollHeight - el.clientHeight;
253
+ const atTop = el.scrollTop <= 0 && e.deltaY < 0;
254
+ const atBottom = el.scrollTop >= max - 1 && e.deltaY > 0;
255
+ if (!atTop && !atBottom) {
256
+ el.scrollTop = Math.max(0, Math.min(max, el.scrollTop + e.deltaY));
257
+ e.preventDefault();
258
+ return;
259
+ }
260
+ }
261
+ if (scrollableX && e.deltaX !== 0) {
262
+ const max = el.scrollWidth - el.clientWidth;
263
+ const atLeft = el.scrollLeft <= 0 && e.deltaX < 0;
264
+ const atRight = el.scrollLeft >= max - 1 && e.deltaX > 0;
265
+ if (!atLeft && !atRight) {
266
+ el.scrollLeft = Math.max(0, Math.min(max, el.scrollLeft + e.deltaX));
267
+ e.preventDefault();
268
+ return;
269
+ }
270
+ }
271
+ }
272
+ };
273
+ this.addEventListener('wheel', handler, { passive: false });
274
+ this._addCleanup(() => this.removeEventListener('wheel', handler));
275
+ }
276
+ /**
277
+ * Declarative event delegation within the component's root.
278
+ * Attaches a single listener and matches targets via CSS selector.
279
+ * Auto-cleanup on disconnect.
280
+ *
281
+ * Usage: this.on('click', '.delete-btn', (e, target) => { ... });
282
+ */
283
+ on(event, selector, handler) {
284
+ const root = this._root;
285
+ const listener = (e) => {
286
+ const path = e.composedPath();
287
+ for (const node of path) {
288
+ if (node === root)
289
+ break;
290
+ if (node instanceof Element && node.matches(selector)) {
291
+ handler(e, node);
292
+ return;
293
+ }
294
+ }
295
+ };
296
+ root.addEventListener(event, listener);
297
+ this._addCleanup(() => root.removeEventListener(event, listener));
298
+ }
299
+ /** Register a callback to run after each render paint (requestAnimationFrame). */
300
+ _addAfterRender(fn) {
301
+ this._afterRenderCallbacks.push(fn);
302
+ }
193
303
  /** Register a cleanup function to run on disconnect (used by useStore/useSignal/useEffect) */
194
304
  _addCleanup(fn) {
195
305
  this._cleanups.push(fn);
@@ -214,6 +324,6 @@ export class Component extends HTMLElement {
214
324
  }
215
325
  }
216
326
  // Re-export html for convenience
217
- export { html, raw } from './html';
327
+ export { html, raw, key } from './html';
218
328
  export { TemplateResult } from './template';
219
329
  //# 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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"}
@@ -56,5 +56,55 @@ export interface TickHandle {
56
56
  * @returns TickHandle with pause/resume/destroy controls
57
57
  */
58
58
  export declare function useTick(component: Component, callback: (elapsed: number) => void, intervalMs: number): TickHandle;
59
+ /**
60
+ * Memoize an expensive computation inside a component's render().
61
+ * The function is only re-executed when dependencies change (shallow Object.is comparison).
62
+ * Cleanup is automatic on component disconnect.
63
+ *
64
+ * @param component The component to tie lifecycle to
65
+ * @param fn The computation function
66
+ * @param deps Dependency array — recompute when any dep changes
67
+ * @returns The cached (or freshly computed) result
68
+ */
69
+ export declare function useComputed<T>(component: Component, fn: () => T, deps: unknown[]): T;
70
+ export interface IntervalHandle {
71
+ /** Pause the interval */
72
+ pause(): void;
73
+ /** Resume after pause */
74
+ resume(): void;
75
+ /** Change the interval duration (restarts the timer) */
76
+ setInterval(ms: number): void;
77
+ /** Whether the interval is currently running */
78
+ readonly active: boolean;
79
+ /** Stop and clean up */
80
+ destroy(): void;
81
+ }
82
+ /**
83
+ * Create an auto-cleaned interval tied to a component's lifecycle.
84
+ * Unlike useTick, this does NOT pause when the tab is hidden — critical
85
+ * for countdowns and timers that must keep running.
86
+ *
87
+ * @param component The component to tie lifecycle to
88
+ * @param callback Function called on each tick. Receives elapsed ms since start.
89
+ * @param intervalMs Interval in milliseconds
90
+ */
91
+ export declare function useInterval(component: Component, callback: (elapsed: number) => void, intervalMs: number): IntervalHandle;
92
+ /**
93
+ * Fix wheel-event scrolling for a specific container inside Shadow DOM.
94
+ * Attaches a wheel handler on the component host that forwards scroll
95
+ * events to the targeted container.
96
+ *
97
+ * @param component The component containing the scroll container
98
+ * @param selector CSS selector for the scrollable element within shadow DOM
99
+ */
100
+ export declare function useScroll(component: Component, selector: string): void;
101
+ /**
102
+ * Register a callback to run after each render, in a requestAnimationFrame.
103
+ * Unlike onUpdate(), this guarantees the browser has painted before the callback fires.
104
+ *
105
+ * @param component The component to observe
106
+ * @param fn Callback to run after each render paint
107
+ */
108
+ export declare function afterRender(component: Component, fn: () => void): void;
59
109
  export {};
60
110
  //# 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;;;;;;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;AAMD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,CAAC,EACX,IAAI,EAAE,OAAO,EAAE,GACd,CAAC,CAkBH;AAID,MAAM,WAAW,cAAc;IAC7B,yBAAyB;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,yBAAyB;IACzB,MAAM,IAAI,IAAI,CAAC;IACf,wDAAwD;IACxD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,wBAAwB;IACxB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACnC,UAAU,EAAE,MAAM,GACjB,cAAc,CA0ChB;AAID;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAwBtE;AAID;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAOtE"}
@@ -112,4 +112,139 @@ export function useTick(component, callback, intervalMs) {
112
112
  component._addCleanup(handle.destroy);
113
113
  return handle;
114
114
  }
115
+ /* ---- Computed / Memoization Helper ---- */
116
+ const computedCache = new WeakMap();
117
+ /**
118
+ * Memoize an expensive computation inside a component's render().
119
+ * The function is only re-executed when dependencies change (shallow Object.is comparison).
120
+ * Cleanup is automatic on component disconnect.
121
+ *
122
+ * @param component The component to tie lifecycle to
123
+ * @param fn The computation function
124
+ * @param deps Dependency array — recompute when any dep changes
125
+ * @returns The cached (or freshly computed) result
126
+ */
127
+ export function useComputed(component, fn, deps) {
128
+ let cache = computedCache.get(component);
129
+ if (!cache) {
130
+ cache = new Map();
131
+ computedCache.set(component, cache);
132
+ component._addCleanup(() => computedCache.delete(component));
133
+ }
134
+ const entry = cache.get(fn);
135
+ if (entry) {
136
+ const changed = deps.length !== entry.deps.length ||
137
+ deps.some((d, i) => !Object.is(d, entry.deps[i]));
138
+ if (!changed)
139
+ return entry.result;
140
+ }
141
+ const result = fn();
142
+ cache.set(fn, { deps, result });
143
+ return result;
144
+ }
145
+ /**
146
+ * Create an auto-cleaned interval tied to a component's lifecycle.
147
+ * Unlike useTick, this does NOT pause when the tab is hidden — critical
148
+ * for countdowns and timers that must keep running.
149
+ *
150
+ * @param component The component to tie lifecycle to
151
+ * @param callback Function called on each tick. Receives elapsed ms since start.
152
+ * @param intervalMs Interval in milliseconds
153
+ */
154
+ export function useInterval(component, callback, intervalMs) {
155
+ let id = null;
156
+ let running = false;
157
+ let ms = intervalMs;
158
+ let destroyed = false;
159
+ const startTime = Date.now();
160
+ function tick() {
161
+ callback(Date.now() - startTime);
162
+ }
163
+ function start() {
164
+ if (running)
165
+ return;
166
+ running = true;
167
+ id = setInterval(tick, ms);
168
+ }
169
+ function stop() {
170
+ if (!running)
171
+ return;
172
+ running = false;
173
+ if (id !== null) {
174
+ clearInterval(id);
175
+ id = null;
176
+ }
177
+ }
178
+ start();
179
+ const handle = {
180
+ pause() { stop(); },
181
+ resume() { if (!destroyed)
182
+ start(); },
183
+ setInterval(newMs) {
184
+ ms = newMs;
185
+ if (running) {
186
+ stop();
187
+ start();
188
+ }
189
+ },
190
+ get active() { return running; },
191
+ destroy() {
192
+ if (destroyed)
193
+ return;
194
+ destroyed = true;
195
+ stop();
196
+ },
197
+ };
198
+ component._addCleanup(handle.destroy);
199
+ return handle;
200
+ }
201
+ /* ---- Scroll Helper ---- */
202
+ /**
203
+ * Fix wheel-event scrolling for a specific container inside Shadow DOM.
204
+ * Attaches a wheel handler on the component host that forwards scroll
205
+ * events to the targeted container.
206
+ *
207
+ * @param component The component containing the scroll container
208
+ * @param selector CSS selector for the scrollable element within shadow DOM
209
+ */
210
+ export function useScroll(component, selector) {
211
+ queueMicrotask(() => {
212
+ const root = component._root;
213
+ const el = root.querySelector(selector);
214
+ if (!el)
215
+ return;
216
+ function onWheel(e) {
217
+ const { scrollTop, scrollHeight, clientHeight } = el;
218
+ const max = scrollHeight - clientHeight;
219
+ if (max <= 0)
220
+ return;
221
+ const atTop = scrollTop <= 0 && e.deltaY < 0;
222
+ const atBottom = scrollTop >= max - 1 && e.deltaY > 0;
223
+ if (!atTop && !atBottom) {
224
+ e.stopPropagation();
225
+ el.scrollTop = Math.max(0, Math.min(max, el.scrollTop + e.deltaY));
226
+ e.preventDefault();
227
+ }
228
+ }
229
+ component.addEventListener('wheel', onWheel, { passive: false });
230
+ component._addCleanup(() => component.removeEventListener('wheel', onWheel));
231
+ });
232
+ }
233
+ /* ---- After-Render Hook ---- */
234
+ /**
235
+ * Register a callback to run after each render, in a requestAnimationFrame.
236
+ * Unlike onUpdate(), this guarantees the browser has painted before the callback fires.
237
+ *
238
+ * @param component The component to observe
239
+ * @param fn Callback to run after each render paint
240
+ */
241
+ export function afterRender(component, fn) {
242
+ component._addAfterRender(fn);
243
+ component._addCleanup(() => {
244
+ const cbs = component._afterRenderCallbacks;
245
+ const idx = cbs.indexOf(fn);
246
+ if (idx !== -1)
247
+ cbs.splice(idx, 1);
248
+ });
249
+ }
115
250
  //# sourceMappingURL=connect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Nova Engine — Template Directives
3
+ *
4
+ * Utility functions for dynamic class and style attribute bindings.
5
+ */
6
+ /**
7
+ * Build a class attribute string from an object of class names to booleans.
8
+ *
9
+ * Usage: html`<div class=${classMap({ btn: true, 'is-active': active })}>`
10
+ */
11
+ export declare function classMap(obj: Record<string, boolean | undefined | null>): string;
12
+ /**
13
+ * Build a style attribute string from an object of CSS properties to values.
14
+ * camelCase keys are converted to kebab-case. Number values auto-append 'px'.
15
+ * Null/undefined values are skipped.
16
+ *
17
+ * Usage: html`<div style=${styleMap({ fontSize: 16, color: 'red' })}>`
18
+ */
19
+ export declare function styleMap(obj: Record<string, string | number | undefined | null>): string;
20
+ //# sourceMappingURL=directives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directives.d.ts","sourceRoot":"","sources":["../../src/component/directives.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,MAAM,CAShF;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,MAAM,CAUxF"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Nova Engine — Template Directives
3
+ *
4
+ * Utility functions for dynamic class and style attribute bindings.
5
+ */
6
+ /**
7
+ * Build a class attribute string from an object of class names to booleans.
8
+ *
9
+ * Usage: html`<div class=${classMap({ btn: true, 'is-active': active })}>`
10
+ */
11
+ export function classMap(obj) {
12
+ let result = '';
13
+ for (const key in obj) {
14
+ if (obj[key]) {
15
+ if (result)
16
+ result += ' ';
17
+ result += key;
18
+ }
19
+ }
20
+ return result;
21
+ }
22
+ /**
23
+ * Build a style attribute string from an object of CSS properties to values.
24
+ * camelCase keys are converted to kebab-case. Number values auto-append 'px'.
25
+ * Null/undefined values are skipped.
26
+ *
27
+ * Usage: html`<div style=${styleMap({ fontSize: 16, color: 'red' })}>`
28
+ */
29
+ export function styleMap(obj) {
30
+ let result = '';
31
+ for (const key in obj) {
32
+ const val = obj[key];
33
+ if (val == null)
34
+ continue;
35
+ const prop = key.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());
36
+ if (result)
37
+ result += '; ';
38
+ result += `${prop}: ${typeof val === 'number' ? val + 'px' : val}`;
39
+ }
40
+ return result;
41
+ }
42
+ //# sourceMappingURL=directives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directives.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,GAA+C;IACtE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACb,IAAI,MAAM;gBAAE,MAAM,IAAI,GAAG,CAAC;YAC1B,MAAM,IAAI,GAAG,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAuD;IAC9E,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,GAAG,IAAI,IAAI;YAAE,SAAS;QAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACjE,IAAI,MAAM;YAAE,MAAM,IAAI,IAAI,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,KAAK,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -32,4 +32,12 @@ export declare class SafeHTML {
32
32
  export declare function raw(value: string): SafeHTML;
33
33
  /** Tagged template — returns TemplateResult for fine-grained rendering */
34
34
  export declare function html(strings: TemplateStringsArray, ...values: unknown[]): TemplateResult;
35
+ /**
36
+ * Assign a stable key to a TemplateResult for efficient keyed list diffing.
37
+ * When items in an array have keys, the template engine uses WASM-accelerated
38
+ * LIS diffing (if loaded) to compute minimal DOM operations.
39
+ *
40
+ * Usage: items.map(item => key(item.id, html`<li>${item.name}</li>`))
41
+ */
42
+ export declare function key(k: string, result: TemplateResult): TemplateResult;
35
43
  //# sourceMappingURL=html.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/component/html.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQjD;AAED;;;;;;;;;GASG;AACH,qBAAa,QAAQ;aACS,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;IAE3C,QAAQ,IAAI,MAAM;CAGnB;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAE3C;AAED,0EAA0E;AAC1E,wBAAgB,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAExF"}
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/component/html.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQjD;AAED;;;;;;;;;GASG;AACH,qBAAa,QAAQ;aACS,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;IAE3C,QAAQ,IAAI,MAAM;CAGnB;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAE3C;AAED,0EAA0E;AAC1E,wBAAgB,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAExF;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,cAAc,CAGrE"}
@@ -48,4 +48,15 @@ export function raw(value) {
48
48
  export function html(strings, ...values) {
49
49
  return new TemplateResult(strings, values);
50
50
  }
51
+ /**
52
+ * Assign a stable key to a TemplateResult for efficient keyed list diffing.
53
+ * When items in an array have keys, the template engine uses WASM-accelerated
54
+ * LIS diffing (if loaded) to compute minimal DOM operations.
55
+ *
56
+ * Usage: items.map(item => key(item.id, html`<li>${item.name}</li>`))
57
+ */
58
+ export function key(k, result) {
59
+ result._key = k;
60
+ return result;
61
+ }
51
62
  //# sourceMappingURL=html.js.map