@mappoh/nova 0.1.16

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 (383) hide show
  1. package/dist/animation/parallax.d.ts +23 -0
  2. package/dist/animation/parallax.d.ts.map +1 -0
  3. package/dist/animation/parallax.js +96 -0
  4. package/dist/animation/parallax.js.map +1 -0
  5. package/dist/animation/scroll-animate.d.ts +30 -0
  6. package/dist/animation/scroll-animate.d.ts.map +1 -0
  7. package/dist/animation/scroll-animate.js +65 -0
  8. package/dist/animation/scroll-animate.js.map +1 -0
  9. package/dist/animation/scroll-observer.d.ts +32 -0
  10. package/dist/animation/scroll-observer.d.ts.map +1 -0
  11. package/dist/animation/scroll-observer.js +63 -0
  12. package/dist/animation/scroll-observer.js.map +1 -0
  13. package/dist/animation/smooth-scroll.d.ts +47 -0
  14. package/dist/animation/smooth-scroll.d.ts.map +1 -0
  15. package/dist/animation/smooth-scroll.js +169 -0
  16. package/dist/animation/smooth-scroll.js.map +1 -0
  17. package/dist/animation/text-reveal.d.ts +30 -0
  18. package/dist/animation/text-reveal.d.ts.map +1 -0
  19. package/dist/animation/text-reveal.js +164 -0
  20. package/dist/animation/text-reveal.js.map +1 -0
  21. package/dist/animation/ticker.d.ts +32 -0
  22. package/dist/animation/ticker.d.ts.map +1 -0
  23. package/dist/animation/ticker.js +62 -0
  24. package/dist/animation/ticker.js.map +1 -0
  25. package/dist/canvas/dot-grid.d.ts +50 -0
  26. package/dist/canvas/dot-grid.d.ts.map +1 -0
  27. package/dist/canvas/dot-grid.js +123 -0
  28. package/dist/canvas/dot-grid.js.map +1 -0
  29. package/dist/canvas/noise.d.ts +33 -0
  30. package/dist/canvas/noise.d.ts.map +1 -0
  31. package/dist/canvas/noise.js +241 -0
  32. package/dist/canvas/noise.js.map +1 -0
  33. package/dist/canvas/particles.d.ts +44 -0
  34. package/dist/canvas/particles.d.ts.map +1 -0
  35. package/dist/canvas/particles.js +138 -0
  36. package/dist/canvas/particles.js.map +1 -0
  37. package/dist/canvas/sequence.d.ts +43 -0
  38. package/dist/canvas/sequence.d.ts.map +1 -0
  39. package/dist/canvas/sequence.js +162 -0
  40. package/dist/canvas/sequence.js.map +1 -0
  41. package/dist/component/bind.d.ts +25 -0
  42. package/dist/component/bind.d.ts.map +1 -0
  43. package/dist/component/bind.js +28 -0
  44. package/dist/component/bind.js.map +1 -0
  45. package/dist/component/component.d.ts +76 -0
  46. package/dist/component/component.d.ts.map +1 -0
  47. package/dist/component/component.js +219 -0
  48. package/dist/component/component.js.map +1 -0
  49. package/dist/component/connect.d.ts +60 -0
  50. package/dist/component/connect.d.ts.map +1 -0
  51. package/dist/component/connect.js +115 -0
  52. package/dist/component/connect.js.map +1 -0
  53. package/dist/component/html.d.ts +35 -0
  54. package/dist/component/html.d.ts.map +1 -0
  55. package/dist/component/html.js +51 -0
  56. package/dist/component/html.js.map +1 -0
  57. package/dist/component/hydrate.d.ts +37 -0
  58. package/dist/component/hydrate.d.ts.map +1 -0
  59. package/dist/component/hydrate.js +242 -0
  60. package/dist/component/hydrate.js.map +1 -0
  61. package/dist/component/index.d.ts +9 -0
  62. package/dist/component/index.d.ts.map +1 -0
  63. package/dist/component/index.js +6 -0
  64. package/dist/component/index.js.map +1 -0
  65. package/dist/component/template.d.ts +30 -0
  66. package/dist/component/template.d.ts.map +1 -0
  67. package/dist/component/template.js +469 -0
  68. package/dist/component/template.js.map +1 -0
  69. package/dist/css/gradient-text.d.ts +40 -0
  70. package/dist/css/gradient-text.d.ts.map +1 -0
  71. package/dist/css/gradient-text.js +90 -0
  72. package/dist/css/gradient-text.js.map +1 -0
  73. package/dist/css/index.d.ts +3 -0
  74. package/dist/css/index.d.ts.map +1 -0
  75. package/dist/css/index.js +2 -0
  76. package/dist/css/index.js.map +1 -0
  77. package/dist/devtools/devtools.d.ts +27 -0
  78. package/dist/devtools/devtools.d.ts.map +1 -0
  79. package/dist/devtools/devtools.js +237 -0
  80. package/dist/devtools/devtools.js.map +1 -0
  81. package/dist/devtools/index.d.ts +3 -0
  82. package/dist/devtools/index.d.ts.map +1 -0
  83. package/dist/devtools/index.js +2 -0
  84. package/dist/devtools/index.js.map +1 -0
  85. package/dist/drag/drag.d.ts +38 -0
  86. package/dist/drag/drag.d.ts.map +1 -0
  87. package/dist/drag/drag.js +181 -0
  88. package/dist/drag/drag.js.map +1 -0
  89. package/dist/drag/index.d.ts +3 -0
  90. package/dist/drag/index.d.ts.map +1 -0
  91. package/dist/drag/index.js +2 -0
  92. package/dist/drag/index.js.map +1 -0
  93. package/dist/dropdown/dropdown.d.ts +55 -0
  94. package/dist/dropdown/dropdown.d.ts.map +1 -0
  95. package/dist/dropdown/dropdown.js +314 -0
  96. package/dist/dropdown/dropdown.js.map +1 -0
  97. package/dist/dropdown/group.d.ts +18 -0
  98. package/dist/dropdown/group.d.ts.map +1 -0
  99. package/dist/dropdown/group.js +119 -0
  100. package/dist/dropdown/group.js.map +1 -0
  101. package/dist/dropdown/index.d.ts +5 -0
  102. package/dist/dropdown/index.d.ts.map +1 -0
  103. package/dist/dropdown/index.js +3 -0
  104. package/dist/dropdown/index.js.map +1 -0
  105. package/dist/forms/form-engine.d.ts +91 -0
  106. package/dist/forms/form-engine.d.ts.map +1 -0
  107. package/dist/forms/form-engine.js +228 -0
  108. package/dist/forms/form-engine.js.map +1 -0
  109. package/dist/forms/index.d.ts +3 -0
  110. package/dist/forms/index.d.ts.map +1 -0
  111. package/dist/forms/index.js +2 -0
  112. package/dist/forms/index.js.map +1 -0
  113. package/dist/forms/validators.d.ts +20 -0
  114. package/dist/forms/validators.d.ts.map +1 -0
  115. package/dist/forms/validators.js +82 -0
  116. package/dist/forms/validators.js.map +1 -0
  117. package/dist/gallery/gallery.d.ts +66 -0
  118. package/dist/gallery/gallery.d.ts.map +1 -0
  119. package/dist/gallery/gallery.js +347 -0
  120. package/dist/gallery/gallery.js.map +1 -0
  121. package/dist/gallery/index.d.ts +3 -0
  122. package/dist/gallery/index.d.ts.map +1 -0
  123. package/dist/gallery/index.js +2 -0
  124. package/dist/gallery/index.js.map +1 -0
  125. package/dist/gesture/gesture.d.ts +44 -0
  126. package/dist/gesture/gesture.d.ts.map +1 -0
  127. package/dist/gesture/gesture.js +152 -0
  128. package/dist/gesture/gesture.js.map +1 -0
  129. package/dist/gesture/index.d.ts +3 -0
  130. package/dist/gesture/index.d.ts.map +1 -0
  131. package/dist/gesture/index.js +2 -0
  132. package/dist/gesture/index.js.map +1 -0
  133. package/dist/http/http.d.ts +44 -0
  134. package/dist/http/http.d.ts.map +1 -0
  135. package/dist/http/http.js +135 -0
  136. package/dist/http/http.js.map +1 -0
  137. package/dist/http/index.d.ts +3 -0
  138. package/dist/http/index.d.ts.map +1 -0
  139. package/dist/http/index.js +2 -0
  140. package/dist/http/index.js.map +1 -0
  141. package/dist/i18n/i18n.d.ts +28 -0
  142. package/dist/i18n/i18n.d.ts.map +1 -0
  143. package/dist/i18n/i18n.js +84 -0
  144. package/dist/i18n/i18n.js.map +1 -0
  145. package/dist/i18n/index.d.ts +3 -0
  146. package/dist/i18n/index.d.ts.map +1 -0
  147. package/dist/i18n/index.js +2 -0
  148. package/dist/i18n/index.js.map +1 -0
  149. package/dist/image/effects.d.ts +33 -0
  150. package/dist/image/effects.d.ts.map +1 -0
  151. package/dist/image/effects.js +236 -0
  152. package/dist/image/effects.js.map +1 -0
  153. package/dist/image/image.d.ts +83 -0
  154. package/dist/image/image.d.ts.map +1 -0
  155. package/dist/image/image.js +236 -0
  156. package/dist/image/image.js.map +1 -0
  157. package/dist/image/index.d.ts +5 -0
  158. package/dist/image/index.d.ts.map +1 -0
  159. package/dist/image/index.js +3 -0
  160. package/dist/image/index.js.map +1 -0
  161. package/dist/interaction/index.d.ts +3 -0
  162. package/dist/interaction/index.d.ts.map +1 -0
  163. package/dist/interaction/index.js +2 -0
  164. package/dist/interaction/index.js.map +1 -0
  165. package/dist/interaction/tilt.d.ts +30 -0
  166. package/dist/interaction/tilt.d.ts.map +1 -0
  167. package/dist/interaction/tilt.js +131 -0
  168. package/dist/interaction/tilt.js.map +1 -0
  169. package/dist/lazy/index.d.ts +3 -0
  170. package/dist/lazy/index.d.ts.map +1 -0
  171. package/dist/lazy/index.js +2 -0
  172. package/dist/lazy/index.js.map +1 -0
  173. package/dist/lazy/lazy.d.ts +42 -0
  174. package/dist/lazy/lazy.d.ts.map +1 -0
  175. package/dist/lazy/lazy.js +80 -0
  176. package/dist/lazy/lazy.js.map +1 -0
  177. package/dist/modal/index.d.ts +3 -0
  178. package/dist/modal/index.d.ts.map +1 -0
  179. package/dist/modal/index.js +2 -0
  180. package/dist/modal/index.js.map +1 -0
  181. package/dist/modal/modal.d.ts +39 -0
  182. package/dist/modal/modal.d.ts.map +1 -0
  183. package/dist/modal/modal.js +174 -0
  184. package/dist/modal/modal.js.map +1 -0
  185. package/dist/router/index.d.ts +3 -0
  186. package/dist/router/index.d.ts.map +1 -0
  187. package/dist/router/index.js +2 -0
  188. package/dist/router/index.js.map +1 -0
  189. package/dist/router/router.d.ts +80 -0
  190. package/dist/router/router.d.ts.map +1 -0
  191. package/dist/router/router.js +256 -0
  192. package/dist/router/router.js.map +1 -0
  193. package/dist/router/speculate.d.ts +28 -0
  194. package/dist/router/speculate.d.ts.map +1 -0
  195. package/dist/router/speculate.js +36 -0
  196. package/dist/router/speculate.js.map +1 -0
  197. package/dist/search/fuzzy.d.ts +16 -0
  198. package/dist/search/fuzzy.d.ts.map +1 -0
  199. package/dist/search/fuzzy.js +77 -0
  200. package/dist/search/fuzzy.js.map +1 -0
  201. package/dist/search/index.d.ts +5 -0
  202. package/dist/search/index.d.ts.map +1 -0
  203. package/dist/search/index.js +3 -0
  204. package/dist/search/index.js.map +1 -0
  205. package/dist/search/search.d.ts +56 -0
  206. package/dist/search/search.d.ts.map +1 -0
  207. package/dist/search/search.js +540 -0
  208. package/dist/search/search.js.map +1 -0
  209. package/dist/search/wasm.d.ts +35 -0
  210. package/dist/search/wasm.d.ts.map +1 -0
  211. package/dist/search/wasm.js +51 -0
  212. package/dist/search/wasm.js.map +1 -0
  213. package/dist/security/cors.d.ts +61 -0
  214. package/dist/security/cors.d.ts.map +1 -0
  215. package/dist/security/cors.js +174 -0
  216. package/dist/security/cors.js.map +1 -0
  217. package/dist/security/csp.d.ts +49 -0
  218. package/dist/security/csp.d.ts.map +1 -0
  219. package/dist/security/csp.js +143 -0
  220. package/dist/security/csp.js.map +1 -0
  221. package/dist/security/csrf.d.ts +47 -0
  222. package/dist/security/csrf.d.ts.map +1 -0
  223. package/dist/security/csrf.js +122 -0
  224. package/dist/security/csrf.js.map +1 -0
  225. package/dist/security/encrypt.d.ts +64 -0
  226. package/dist/security/encrypt.d.ts.map +1 -0
  227. package/dist/security/encrypt.js +129 -0
  228. package/dist/security/encrypt.js.map +1 -0
  229. package/dist/security/index.d.ts +21 -0
  230. package/dist/security/index.d.ts.map +1 -0
  231. package/dist/security/index.js +11 -0
  232. package/dist/security/index.js.map +1 -0
  233. package/dist/security/rate-limit.d.ts +57 -0
  234. package/dist/security/rate-limit.d.ts.map +1 -0
  235. package/dist/security/rate-limit.js +222 -0
  236. package/dist/security/rate-limit.js.map +1 -0
  237. package/dist/security/rbac.d.ts +84 -0
  238. package/dist/security/rbac.d.ts.map +1 -0
  239. package/dist/security/rbac.js +164 -0
  240. package/dist/security/rbac.js.map +1 -0
  241. package/dist/security/sanitize.d.ts +44 -0
  242. package/dist/security/sanitize.d.ts.map +1 -0
  243. package/dist/security/sanitize.js +230 -0
  244. package/dist/security/sanitize.js.map +1 -0
  245. package/dist/security/secure-store.d.ts +44 -0
  246. package/dist/security/secure-store.d.ts.map +1 -0
  247. package/dist/security/secure-store.js +164 -0
  248. package/dist/security/secure-store.js.map +1 -0
  249. package/dist/security/session.d.ts +76 -0
  250. package/dist/security/session.d.ts.map +1 -0
  251. package/dist/security/session.js +251 -0
  252. package/dist/security/session.js.map +1 -0
  253. package/dist/security/sri.d.ts +66 -0
  254. package/dist/security/sri.d.ts.map +1 -0
  255. package/dist/security/sri.js +159 -0
  256. package/dist/security/sri.js.map +1 -0
  257. package/dist/shortcuts/index.d.ts +3 -0
  258. package/dist/shortcuts/index.d.ts.map +1 -0
  259. package/dist/shortcuts/index.js +2 -0
  260. package/dist/shortcuts/index.js.map +1 -0
  261. package/dist/shortcuts/shortcuts.d.ts +43 -0
  262. package/dist/shortcuts/shortcuts.d.ts.map +1 -0
  263. package/dist/shortcuts/shortcuts.js +141 -0
  264. package/dist/shortcuts/shortcuts.js.map +1 -0
  265. package/dist/ssr/index.d.ts +3 -0
  266. package/dist/ssr/index.d.ts.map +1 -0
  267. package/dist/ssr/index.js +2 -0
  268. package/dist/ssr/index.js.map +1 -0
  269. package/dist/ssr/ssr.d.ts +62 -0
  270. package/dist/ssr/ssr.d.ts.map +1 -0
  271. package/dist/ssr/ssr.js +132 -0
  272. package/dist/ssr/ssr.js.map +1 -0
  273. package/dist/state/index.d.ts +5 -0
  274. package/dist/state/index.d.ts.map +1 -0
  275. package/dist/state/index.js +3 -0
  276. package/dist/state/index.js.map +1 -0
  277. package/dist/state/persistent.d.ts +31 -0
  278. package/dist/state/persistent.d.ts.map +1 -0
  279. package/dist/state/persistent.js +132 -0
  280. package/dist/state/persistent.js.map +1 -0
  281. package/dist/state/store.d.ts +31 -0
  282. package/dist/state/store.d.ts.map +1 -0
  283. package/dist/state/store.js +107 -0
  284. package/dist/state/store.js.map +1 -0
  285. package/dist/store/index.d.ts +3 -0
  286. package/dist/store/index.d.ts.map +1 -0
  287. package/dist/store/index.js +2 -0
  288. package/dist/store/index.js.map +1 -0
  289. package/dist/store/store.d.ts +36 -0
  290. package/dist/store/store.d.ts.map +1 -0
  291. package/dist/store/store.js +175 -0
  292. package/dist/store/store.js.map +1 -0
  293. package/dist/supabase/auth.d.ts +28 -0
  294. package/dist/supabase/auth.d.ts.map +1 -0
  295. package/dist/supabase/auth.js +47 -0
  296. package/dist/supabase/auth.js.map +1 -0
  297. package/dist/supabase/client.d.ts +18 -0
  298. package/dist/supabase/client.d.ts.map +1 -0
  299. package/dist/supabase/client.js +36 -0
  300. package/dist/supabase/client.js.map +1 -0
  301. package/dist/supabase/realtime.d.ts +22 -0
  302. package/dist/supabase/realtime.d.ts.map +1 -0
  303. package/dist/supabase/realtime.js +51 -0
  304. package/dist/supabase/realtime.js.map +1 -0
  305. package/dist/sw/index.d.ts +3 -0
  306. package/dist/sw/index.d.ts.map +1 -0
  307. package/dist/sw/index.js +2 -0
  308. package/dist/sw/index.js.map +1 -0
  309. package/dist/sw/sw.d.ts +49 -0
  310. package/dist/sw/sw.d.ts.map +1 -0
  311. package/dist/sw/sw.js +125 -0
  312. package/dist/sw/sw.js.map +1 -0
  313. package/dist/tabs/index.d.ts +3 -0
  314. package/dist/tabs/index.d.ts.map +1 -0
  315. package/dist/tabs/index.js +2 -0
  316. package/dist/tabs/index.js.map +1 -0
  317. package/dist/tabs/tabs.d.ts +34 -0
  318. package/dist/tabs/tabs.d.ts.map +1 -0
  319. package/dist/tabs/tabs.js +173 -0
  320. package/dist/tabs/tabs.js.map +1 -0
  321. package/dist/test/index.d.ts +3 -0
  322. package/dist/test/index.d.ts.map +1 -0
  323. package/dist/test/index.js +2 -0
  324. package/dist/test/index.js.map +1 -0
  325. package/dist/test/test.d.ts +37 -0
  326. package/dist/test/test.d.ts.map +1 -0
  327. package/dist/test/test.js +108 -0
  328. package/dist/test/test.js.map +1 -0
  329. package/dist/theme/index.d.ts +3 -0
  330. package/dist/theme/index.d.ts.map +1 -0
  331. package/dist/theme/index.js +2 -0
  332. package/dist/theme/index.js.map +1 -0
  333. package/dist/theme/theme.d.ts +40 -0
  334. package/dist/theme/theme.d.ts.map +1 -0
  335. package/dist/theme/theme.js +142 -0
  336. package/dist/theme/theme.js.map +1 -0
  337. package/dist/timeline/index.d.ts +3 -0
  338. package/dist/timeline/index.d.ts.map +1 -0
  339. package/dist/timeline/index.js +2 -0
  340. package/dist/timeline/index.js.map +1 -0
  341. package/dist/timeline/timeline.d.ts +44 -0
  342. package/dist/timeline/timeline.d.ts.map +1 -0
  343. package/dist/timeline/timeline.js +196 -0
  344. package/dist/timeline/timeline.js.map +1 -0
  345. package/dist/toast/index.d.ts +3 -0
  346. package/dist/toast/index.d.ts.map +1 -0
  347. package/dist/toast/index.js +2 -0
  348. package/dist/toast/index.js.map +1 -0
  349. package/dist/toast/toast.d.ts +31 -0
  350. package/dist/toast/toast.d.ts.map +1 -0
  351. package/dist/toast/toast.js +198 -0
  352. package/dist/toast/toast.js.map +1 -0
  353. package/dist/tooltip/index.d.ts +3 -0
  354. package/dist/tooltip/index.d.ts.map +1 -0
  355. package/dist/tooltip/index.js +2 -0
  356. package/dist/tooltip/index.js.map +1 -0
  357. package/dist/tooltip/tooltip.d.ts +27 -0
  358. package/dist/tooltip/tooltip.d.ts.map +1 -0
  359. package/dist/tooltip/tooltip.js +229 -0
  360. package/dist/tooltip/tooltip.js.map +1 -0
  361. package/dist/transition/index.d.ts +3 -0
  362. package/dist/transition/index.d.ts.map +1 -0
  363. package/dist/transition/index.js +2 -0
  364. package/dist/transition/index.js.map +1 -0
  365. package/dist/transition/transition.d.ts +31 -0
  366. package/dist/transition/transition.d.ts.map +1 -0
  367. package/dist/transition/transition.js +95 -0
  368. package/dist/transition/transition.js.map +1 -0
  369. package/dist/webgl/index.d.ts +3 -0
  370. package/dist/webgl/index.d.ts.map +1 -0
  371. package/dist/webgl/index.js +2 -0
  372. package/dist/webgl/index.js.map +1 -0
  373. package/dist/webgl/webgl.d.ts +49 -0
  374. package/dist/webgl/webgl.d.ts.map +1 -0
  375. package/dist/webgl/webgl.js +401 -0
  376. package/dist/webgl/webgl.js.map +1 -0
  377. package/package.json +269 -0
  378. package/styles/base/global.css +47 -0
  379. package/styles/base/reset.css +73 -0
  380. package/styles/tokens/colors.css +50 -0
  381. package/styles/tokens/spacing.css +46 -0
  382. package/styles/tokens/typography.css +37 -0
  383. package/styles/utilities/layout.css +46 -0
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Nova Engine — HTML Tagged Template Literal
3
+ *
4
+ * Returns a TemplateResult for fine-grained DOM updates (template parts engine).
5
+ * Falls back to string rendering for SSR and backward compat via .content getter.
6
+ * Usage: html`<div class="${className}">${userInput}</div>`
7
+ */
8
+ import { TemplateResult } from './template';
9
+ export function escapeHtml(value) {
10
+ const str = String(value ?? '');
11
+ return str
12
+ .replace(/&/g, '&amp;')
13
+ .replace(/</g, '&lt;')
14
+ .replace(/>/g, '&gt;')
15
+ .replace(/"/g, '&quot;')
16
+ .replace(/'/g, '&#39;');
17
+ }
18
+ /**
19
+ * Wrapper indicating pre-sanitized HTML content.
20
+ *
21
+ * WARNING: Content is rendered via innerHTML with NO escaping.
22
+ * Only use with trusted, pre-sanitized content. Never pass user
23
+ * input directly — use sanitize() from @nova/security first:
24
+ *
25
+ * import { sanitize } from '@nova/security';
26
+ * const safe = raw(sanitize(userInput));
27
+ */
28
+ export class SafeHTML {
29
+ content;
30
+ constructor(content) {
31
+ this.content = content;
32
+ }
33
+ toString() {
34
+ return this.content;
35
+ }
36
+ }
37
+ /**
38
+ * Mark a string as already-safe HTML (skip escaping).
39
+ *
40
+ * SECURITY: The caller is responsible for ensuring content is safe.
41
+ * Passing unsanitized user input creates an XSS vulnerability.
42
+ * Use sanitize() from @nova/security to clean untrusted HTML first.
43
+ */
44
+ export function raw(value) {
45
+ return new SafeHTML(value);
46
+ }
47
+ /** Tagged template — returns TemplateResult for fine-grained rendering */
48
+ export function html(strings, ...values) {
49
+ return new TemplateResult(strings, values);
50
+ }
51
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/component/html.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAChC,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,QAAQ;IACS;IAA5B,YAA4B,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAE/C,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,KAAa;IAC/B,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,IAAI,CAAC,OAA6B,EAAE,GAAG,MAAiB;IACtE,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Nova Engine — Template Hydration
3
+ *
4
+ * Walks existing server-rendered DOM and attaches live template Parts
5
+ * without destroying or recreating any nodes. Server HTML "wakes up"
6
+ * instantly with event listeners and reactive bindings.
7
+ *
8
+ * Usage:
9
+ * import { hydrate } from '@nova/component';
10
+ * const instance = hydrateTemplate(result, container);
11
+ * // instance is now live — future updates are surgical
12
+ */
13
+ import { TemplateResult } from './template';
14
+ interface HydrationPart {
15
+ update(value: unknown): void;
16
+ dispose(): void;
17
+ }
18
+ declare class HydrationInstance {
19
+ nodes: ChildNode[];
20
+ private _parts;
21
+ private _values;
22
+ constructor(nodes: ChildNode[], parts: HydrationPart[]);
23
+ update(values: unknown[]): void;
24
+ dispose(): void;
25
+ }
26
+ /**
27
+ * Hydrate server-rendered DOM with a TemplateResult.
28
+ *
29
+ * Walks the existing DOM inside `container`, finds comment markers
30
+ * and data attributes left by SSR, and attaches live Parts for
31
+ * reactive updates and event listeners — without recreating any nodes.
32
+ *
33
+ * Returns a HydrationInstance that can be updated or disposed.
34
+ */
35
+ export declare function hydrateTemplate(result: TemplateResult, container: Element | ShadowRoot): HydrationInstance;
36
+ export type { HydrationInstance };
37
+ //# sourceMappingURL=hydrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../../src/component/hydrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAM5C,UAAU,aAAa;IACrB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAqID,cAAM,iBAAiB;IACrB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAY;gBAEf,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IAMtD,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;IAS/B,OAAO,IAAI,IAAI;CAMhB;AAID;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,OAAO,GAAG,UAAU,GAC9B,iBAAiB,CA8DnB;AAED,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Nova Engine — Template Hydration
3
+ *
4
+ * Walks existing server-rendered DOM and attaches live template Parts
5
+ * without destroying or recreating any nodes. Server HTML "wakes up"
6
+ * instantly with event listeners and reactive bindings.
7
+ *
8
+ * Usage:
9
+ * import { hydrate } from '@nova/component';
10
+ * const instance = hydrateTemplate(result, container);
11
+ * // instance is now live — future updates are surgical
12
+ */
13
+ import { SafeHTML } from './html';
14
+ import { TemplateResult } from './template';
15
+ import { SignalBinding } from './bind';
16
+ const MARKER = 'nova-ph';
17
+ const URL_ATTRS = new Set(['href', 'src', 'action', 'formaction', 'data', 'poster', 'srcdoc']);
18
+ // --- Hydration Node Part ---
19
+ class HydrationNodePart {
20
+ _value = undefined;
21
+ _node;
22
+ _signalUnsub = null;
23
+ constructor(node, _marker) {
24
+ this._node = node;
25
+ }
26
+ update(value) {
27
+ if (value instanceof SignalBinding) {
28
+ if (this._signalUnsub) {
29
+ this._signalUnsub();
30
+ this._signalUnsub = null;
31
+ }
32
+ const sig = value.signal;
33
+ this._commitValue(sig());
34
+ this._signalUnsub = sig.subscribe((v) => this._commitValue(v));
35
+ return;
36
+ }
37
+ this._commitValue(value);
38
+ }
39
+ _commitValue(value) {
40
+ if (value === this._value && typeof value !== 'object')
41
+ return;
42
+ if (value == null || typeof value === 'boolean') {
43
+ if (this._node.nodeType === Node.TEXT_NODE) {
44
+ this._node.data = '';
45
+ }
46
+ }
47
+ else if (value instanceof TemplateResult || value instanceof SafeHTML) {
48
+ // For complex values during hydration, update existing text content
49
+ // Full re-render path will handle structural changes
50
+ if (this._node.nodeType === Node.TEXT_NODE) {
51
+ this._node.data = String(value);
52
+ }
53
+ }
54
+ else {
55
+ if (this._node.nodeType === Node.TEXT_NODE) {
56
+ this._node.data = String(value);
57
+ }
58
+ }
59
+ this._value = value;
60
+ }
61
+ dispose() {
62
+ if (this._signalUnsub) {
63
+ this._signalUnsub();
64
+ this._signalUnsub = null;
65
+ }
66
+ }
67
+ }
68
+ // --- Hydration Attribute Part ---
69
+ class HydrationAttributePart {
70
+ _value = undefined;
71
+ _element;
72
+ _name;
73
+ _signalUnsub = null;
74
+ constructor(element, name) {
75
+ this._element = element;
76
+ this._name = name;
77
+ }
78
+ update(value) {
79
+ if (value instanceof SignalBinding) {
80
+ if (this._signalUnsub) {
81
+ this._signalUnsub();
82
+ this._signalUnsub = null;
83
+ }
84
+ const sig = value.signal;
85
+ this._commitValue(sig());
86
+ this._signalUnsub = sig.subscribe((v) => this._commitValue(v));
87
+ return;
88
+ }
89
+ this._commitValue(value);
90
+ }
91
+ _commitValue(value) {
92
+ if (value === this._value)
93
+ return;
94
+ this._value = value;
95
+ if (value == null || value === false) {
96
+ this._element.removeAttribute(this._name);
97
+ }
98
+ else if (value === true) {
99
+ this._element.setAttribute(this._name, '');
100
+ }
101
+ else {
102
+ let str = String(value);
103
+ // Block javascript:/vbscript: on URL attributes
104
+ if (URL_ATTRS.has(this._name)) {
105
+ const normalized = str.replace(/[\s\u0000-\u001F]+/g, '').toLowerCase();
106
+ if (normalized.startsWith('javascript:') || normalized.startsWith('vbscript:')) {
107
+ this._element.removeAttribute(this._name);
108
+ return;
109
+ }
110
+ }
111
+ this._element.setAttribute(this._name, str);
112
+ }
113
+ }
114
+ dispose() {
115
+ if (this._signalUnsub) {
116
+ this._signalUnsub();
117
+ this._signalUnsub = null;
118
+ }
119
+ }
120
+ }
121
+ // --- Hydration Event Part ---
122
+ class HydrationEventPart {
123
+ _element;
124
+ _name;
125
+ _handler = null;
126
+ constructor(element, name) {
127
+ this._element = element;
128
+ this._name = name;
129
+ }
130
+ update(value) {
131
+ if (this._handler) {
132
+ this._element.removeEventListener(this._name, this._handler);
133
+ this._handler = null;
134
+ }
135
+ if (typeof value === 'function') {
136
+ this._handler = value;
137
+ this._element.addEventListener(this._name, this._handler);
138
+ }
139
+ }
140
+ dispose() {
141
+ if (this._handler) {
142
+ this._element.removeEventListener(this._name, this._handler);
143
+ this._handler = null;
144
+ }
145
+ }
146
+ }
147
+ // --- Hydration Instance ---
148
+ class HydrationInstance {
149
+ nodes;
150
+ _parts;
151
+ _values;
152
+ constructor(nodes, parts) {
153
+ this.nodes = nodes;
154
+ this._parts = parts;
155
+ this._values = [];
156
+ }
157
+ update(values) {
158
+ for (let i = 0; i < this._parts.length; i++) {
159
+ if (values[i] !== this._values[i]) {
160
+ this._parts[i].update(values[i]);
161
+ }
162
+ }
163
+ this._values = values.slice();
164
+ }
165
+ dispose() {
166
+ for (const part of this._parts)
167
+ part.dispose();
168
+ this._parts = [];
169
+ this._values = [];
170
+ this.nodes = [];
171
+ }
172
+ }
173
+ // --- Public API ---
174
+ /**
175
+ * Hydrate server-rendered DOM with a TemplateResult.
176
+ *
177
+ * Walks the existing DOM inside `container`, finds comment markers
178
+ * and data attributes left by SSR, and attaches live Parts for
179
+ * reactive updates and event listeners — without recreating any nodes.
180
+ *
181
+ * Returns a HydrationInstance that can be updated or disposed.
182
+ */
183
+ export function hydrateTemplate(result, container) {
184
+ const parts = [];
185
+ const values = result.values;
186
+ let valueIndex = 0;
187
+ // Walk the DOM looking for hydration markers
188
+ const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT);
189
+ let node;
190
+ while ((node = walker.nextNode())) {
191
+ if (node.nodeType === Node.COMMENT_NODE && node.data === MARKER) {
192
+ // Node part: the next sibling text node or the comment itself is the anchor
193
+ const textNode = node.previousSibling;
194
+ if (textNode && textNode.nodeType === Node.TEXT_NODE) {
195
+ parts.push(new HydrationNodePart(textNode, node));
196
+ }
197
+ else {
198
+ // Create a text node before the marker
199
+ const newText = document.createTextNode('');
200
+ node.parentNode.insertBefore(newText, node);
201
+ parts.push(new HydrationNodePart(newText, node));
202
+ }
203
+ valueIndex++;
204
+ }
205
+ else if (node.nodeType === Node.ELEMENT_NODE) {
206
+ const el = node;
207
+ // Check for hydration attribute markers: data-nova-h{index}="attrName"
208
+ // Only match exact numeric indices to prevent spoofing from user content
209
+ const hydrateAttrs = [];
210
+ for (const attr of Array.from(el.attributes)) {
211
+ const match = attr.name.match(/^data-nova-h(\d+)$/);
212
+ if (match) {
213
+ hydrateAttrs.push({ attr: attr.name, index: parseInt(match[1], 10) });
214
+ }
215
+ }
216
+ // Process in index order — reject out-of-range indices
217
+ hydrateAttrs.sort((a, b) => a.index - b.index);
218
+ for (const { attr: markerAttr, index } of hydrateAttrs) {
219
+ if (index >= values.length)
220
+ continue; // Out of range — skip (possibly spoofed)
221
+ const attrName = el.getAttribute(markerAttr);
222
+ if (attrName && valueIndex < values.length) {
223
+ if (attrName.startsWith('@')) {
224
+ // Event binding
225
+ parts.push(new HydrationEventPart(el, attrName.slice(1)));
226
+ }
227
+ else {
228
+ // Attribute binding
229
+ parts.push(new HydrationAttributePart(el, attrName));
230
+ }
231
+ el.removeAttribute(markerAttr);
232
+ valueIndex++;
233
+ }
234
+ }
235
+ }
236
+ }
237
+ const nodes = Array.from(container.childNodes);
238
+ const instance = new HydrationInstance(nodes, parts);
239
+ instance.update(values);
240
+ return instance;
241
+ }
242
+ //# sourceMappingURL=hydrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydrate.js","sourceRoot":"","sources":["../../src/component/hydrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export { Component, html, raw, TemplateResult } from './component';
2
+ export type { PropType, PropDefinition } from './component';
3
+ export { TemplateInstance, createInstance } from './template';
4
+ export { bind, SignalBinding } from './bind';
5
+ export { hydrateTemplate } from './hydrate';
6
+ export type { HydrationInstance } from './hydrate';
7
+ export { useSignal, useStore, useEffect, useTick } from './connect';
8
+ export type { TickHandle } from './connect';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/component/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { Component, html, raw, TemplateResult } from './component';
2
+ export { TemplateInstance, createInstance } from './template';
3
+ export { bind, SignalBinding } from './bind';
4
+ export { hydrateTemplate } from './hydrate';
5
+ export { useSignal, useStore, useEffect, useTick } from './connect';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/component/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Nova Engine — Reactive Template Engine
3
+ *
4
+ * Lit-html-style template system that eliminates full innerHTML re-renders.
5
+ * Parses templates once, then surgically updates only changed DOM nodes.
6
+ */
7
+ interface Part {
8
+ update(value: unknown): void;
9
+ dispose(): void;
10
+ }
11
+ export declare class TemplateResult {
12
+ readonly strings: TemplateStringsArray;
13
+ readonly values: unknown[];
14
+ constructor(strings: TemplateStringsArray, values: unknown[]);
15
+ /** Backward compat: renders to HTML string (same output as old SafeHTML) */
16
+ get content(): string;
17
+ toString(): string;
18
+ }
19
+ export declare class TemplateInstance {
20
+ nodes: ChildNode[];
21
+ fragment: DocumentFragment;
22
+ private _parts;
23
+ private _values;
24
+ constructor(fragment: DocumentFragment, parts: Part[], nodes: ChildNode[]);
25
+ update(values: unknown[]): void;
26
+ dispose(): void;
27
+ }
28
+ export declare function createInstance(result: TemplateResult): TemplateInstance;
29
+ export {};
30
+ //# sourceMappingURL=template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/component/template.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuCH,UAAU,IAAI;IACZ,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAID,qBAAa,cAAc;aAEP,OAAO,EAAE,oBAAoB;aAC7B,MAAM,EAAE,OAAO,EAAE;gBADjB,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,OAAO,EAAE;IAGnC,4EAA4E;IAC5E,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,QAAQ,IAAI,MAAM;CAGnB;AA6XD,qBAAa,gBAAgB;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAY;gBAEf,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAOzE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;IAS/B,OAAO,IAAI,IAAI;CAOhB;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAwCvE"}