@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 @@
1
+ {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../../src/canvas/sequence.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsCH,MAAM,UAAU,cAAc,CAAC,OAAwB;IACrD,MAAM,EACJ,SAAS,EACT,MAAM,EACN,eAAe,GAAG,MAAM,EACxB,WAAW,GAAG,CAAC,EACf,SAAS,GAAG,CAAC,EACb,KAAK,GAAG,IAAI,EACZ,MAAM,GAAG,KAAK,EACd,GAAG,GAAG,OAAO,EACb,MAAM,EACN,OAAO,GACR,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;IACrC,MAAM,YAAY,GAAuB,EAAE,CAAC;IAC5C,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,eAAe;IACf,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC/B,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;IAC1B,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAC5B,CAAC;IACD,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE9B,kBAAkB;IAClB,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;IAClD,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC;IAET,iBAAiB;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;QAC9B,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACtB,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;YAChB,WAAW,EAAE,CAAC;YACd,IAAI,WAAW,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,MAAM,EAAE,EAAE,CAAC;gBACX,SAAS,CAAC,YAAY,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;QACF,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,wBAAwB;IACxB,SAAS,SAAS,CAAC,KAAa;QAC9B,IAAI,SAAS;YAAE,OAAO;QACtB,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,EAAE,QAAQ,IAAI,CAAC,GAAG,CAAC,YAAY;YAAE,OAAO;QAEhD,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;QACzD,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;QAC1D,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE5B,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC;YACtD,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,CAAC;YAC5B,IAAI,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,CAAC;YAEnD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;oBAC3B,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC;oBACvB,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC;oBACtB,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;oBACjC,EAAE,GAAG,CAAC,CAAC;gBACT,CAAC;qBAAM,CAAC;oBACN,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC;oBACtB,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC;oBACtB,EAAE,GAAG,CAAC,CAAC;oBACP,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,UAAU;gBACV,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,EAAE,CAAC;oBACjB,MAAM,KAAK,GAAG,EAAE,GAAG,QAAQ,CAAC;oBAC5B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBACtD,OAAO;gBACT,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,GAAG,EAAE,CAAC;oBACjB,MAAM,KAAK,GAAG,EAAE,GAAG,QAAQ,CAAC;oBAC5B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBACtD,OAAO;gBACT,CAAC;YACH,CAAC;YACD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,SAAS,iBAAiB;QACxB,MAAM,QAAQ,GAAG,eAAe,KAAK,MAAM;YACzC,CAAC,CAAC,QAAQ,CAAC,eAAe;YAC1B,CAAC,CAAC,eAA8B,CAAC;QACnC,MAAM,SAAS,GAAG,eAAe,KAAK,MAAM;YAC1C,CAAC,CAAC,MAAM,CAAC,OAAO;YAChB,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvB,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QACnE,IAAI,YAAY,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,SAAS,GAAG,YAAY,CAAC;QAC7C,MAAM,KAAK,GAAG,SAAS,GAAG,WAAW,CAAC;QACtC,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,SAAS,QAAQ;QACf,IAAI,SAAS;YAAE,OAAO;QACtB,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE;YACjC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EACpC,MAAM,CAAC,MAAM,GAAG,CAAC,CAClB,CAAC;YACF,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;gBAC3B,YAAY,GAAG,KAAK,CAAC;gBACrB,SAAS,CAAC,YAAY,CAAC,CAAC;gBACxB,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,gBAAgB;IAChB,QAAQ,EAAE,CAAC;IAEX,OAAO;QACL,IAAI,YAAY,KAAK,OAAO,YAAY,CAAC,CAAC,CAAC;QAC3C,IAAI,WAAW,KAAK,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,IAAI,QAAQ,KAAK,OAAO,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,QAAQ,CAAC,KAAa;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAChE,YAAY,GAAG,OAAO,CAAC;YACvB,SAAS,CAAC,YAAY,CAAC,CAAC;YACxB,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO;YACL,SAAS,GAAG,IAAI,CAAC;YACjB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,eAAe,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACxD,cAAc,CAAC,UAAU,EAAE,CAAC;YAC5B,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,MAAM,EAAE,CAAC;gBACX,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;gBAC9B,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Nova Engine — Signal-to-Part Binding
3
+ *
4
+ * Bridges the signal system (@nova/store) with the template parts engine.
5
+ * Usage: html`<span>${bind(count)}</span>` — signal changes update that
6
+ * DOM node directly without triggering render().
7
+ */
8
+ import type { Signal, Computed } from '../store/store';
9
+ /** Marker class recognized by NodePart and AttributePart in template.ts */
10
+ export declare class SignalBinding<T = unknown> {
11
+ readonly signal: Signal<T> | Computed<T>;
12
+ constructor(signal: Signal<T> | Computed<T>);
13
+ }
14
+ /**
15
+ * Bind a signal to a template Part.
16
+ *
17
+ * When the signal changes, the Part updates directly — no render() call,
18
+ * no _scheduleRender(), no diffing. One signal change = one DOM mutation.
19
+ *
20
+ * Works in both node and attribute positions:
21
+ * html`<span>${bind(count)}</span>` — updates text node
22
+ * html`<div class=${bind(activeClass)}></div>` — updates attribute
23
+ */
24
+ export declare function bind<T>(signal: Signal<T> | Computed<T>): SignalBinding<T>;
25
+ //# sourceMappingURL=bind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../../src/component/bind.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEvD,2EAA2E;AAC3E,qBAAa,aAAa,CAAC,CAAC,GAAG,OAAO;aACR,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;gBAA/B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;CAC5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAEzE"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Nova Engine — Signal-to-Part Binding
3
+ *
4
+ * Bridges the signal system (@nova/store) with the template parts engine.
5
+ * Usage: html`<span>${bind(count)}</span>` — signal changes update that
6
+ * DOM node directly without triggering render().
7
+ */
8
+ /** Marker class recognized by NodePart and AttributePart in template.ts */
9
+ export class SignalBinding {
10
+ signal;
11
+ constructor(signal) {
12
+ this.signal = signal;
13
+ }
14
+ }
15
+ /**
16
+ * Bind a signal to a template Part.
17
+ *
18
+ * When the signal changes, the Part updates directly — no render() call,
19
+ * no _scheduleRender(), no diffing. One signal change = one DOM mutation.
20
+ *
21
+ * Works in both node and attribute positions:
22
+ * html`<span>${bind(count)}</span>` — updates text node
23
+ * html`<div class=${bind(activeClass)}></div>` — updates attribute
24
+ */
25
+ export function bind(signal) {
26
+ return new SignalBinding(signal);
27
+ }
28
+ //# sourceMappingURL=bind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind.js","sourceRoot":"","sources":["../../src/component/bind.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,2EAA2E;AAC3E,MAAM,OAAO,aAAa;IACI;IAA5B,YAA4B,MAA+B;QAA/B,WAAM,GAAN,MAAM,CAAyB;IAAG,CAAC;CAChE;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,IAAI,CAAI,MAA+B;IACrD,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Nova Engine — Base Component
3
+ *
4
+ * Web Components foundation with reactive state, props, and lifecycle hooks.
5
+ * Every UI element extends this class.
6
+ *
7
+ * Rendering: Uses the template parts engine for surgical DOM updates.
8
+ * Same template → update only changed Parts. New template → dispose + recreate.
9
+ * Falls back to innerHTML for SafeHTML (backward compat).
10
+ */
11
+ import { SafeHTML } from './html';
12
+ import { TemplateResult } from './template';
13
+ export type PropType = typeof String | typeof Number | typeof Boolean;
14
+ export interface PropDefinition {
15
+ type: PropType;
16
+ default?: unknown;
17
+ }
18
+ export declare abstract class Component extends HTMLElement {
19
+ /** Override in subclass: e.g. static tag = 'hero-section' */
20
+ static tag: string;
21
+ /** Override in subclass: prop definitions with types */
22
+ static props: Record<string, PropType | PropDefinition>;
23
+ /** Override in subclass: CSS styles (scoped in Shadow DOM, ignored in Light DOM) */
24
+ static styles: string;
25
+ /** Override to disable Shadow DOM. Light DOM components use global styles. Default: true */
26
+ static shadow: boolean;
27
+ /** Internal reactive state */
28
+ protected _state: Record<string, unknown>;
29
+ /** Proxy-wrapped state that triggers re-renders on mutation */
30
+ protected state: Record<string, unknown>;
31
+ /** Resolved prop values */
32
+ protected props: Record<string, unknown>;
33
+ private _root;
34
+ private _mounted;
35
+ private _renderScheduled;
36
+ private _cleanups;
37
+ private _instance;
38
+ private _styleInjected;
39
+ constructor();
40
+ /** Web Components: observed attributes from prop definitions */
41
+ static get observedAttributes(): string[];
42
+ /** Parse attribute value based on prop type */
43
+ private _parseProp;
44
+ /** Sync all attributes to props */
45
+ private _syncProps;
46
+ /** Schedule a microtask re-render (batches multiple state changes) */
47
+ protected _scheduleRender(): void;
48
+ /** Inject scoped <style> once into shadow root */
49
+ private _ensureStyles;
50
+ /** Perform the actual DOM update */
51
+ private _performRender;
52
+ connectedCallback(): void;
53
+ disconnectedCallback(): void;
54
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
55
+ /** Return the component's HTML (TemplateResult for surgical updates, SafeHTML for innerHTML fallback) */
56
+ abstract render(): TemplateResult | SafeHTML;
57
+ /** Called after first render and DOM attachment */
58
+ onMount(): void;
59
+ /** Called after re-renders (state or prop changes) */
60
+ onUpdate(): void;
61
+ /** Called when component is removed from DOM */
62
+ onDestroy(): void;
63
+ /** Register a cleanup function to run on disconnect (used by useStore/useSignal/useEffect) */
64
+ _addCleanup(fn: () => void): void;
65
+ /** Query within shadow DOM */
66
+ protected $(selector: string): Element | null;
67
+ /** Query all within shadow DOM */
68
+ protected $$(selector: string): Element[];
69
+ /** Emit a custom event */
70
+ protected emit(name: string, detail?: unknown): void;
71
+ /** Register a component class as a custom element */
72
+ static define(): void;
73
+ }
74
+ export { html, raw } from './html';
75
+ export { TemplateResult } from './template';
76
+ //# sourceMappingURL=component.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Nova Engine — Base Component
3
+ *
4
+ * Web Components foundation with reactive state, props, and lifecycle hooks.
5
+ * Every UI element extends this class.
6
+ *
7
+ * Rendering: Uses the template parts engine for surgical DOM updates.
8
+ * Same template → update only changed Parts. New template → dispose + recreate.
9
+ * Falls back to innerHTML for SafeHTML (backward compat).
10
+ */
11
+ import { SafeHTML } from './html';
12
+ import { TemplateResult, createInstance } from './template';
13
+ /** Shadow DOM base reset — mirrors the document-level reset.css for encapsulated components.
14
+ * NOTE: `*` must NOT set margin/padding — it bleeds into child custom elements' :host
15
+ * styles via the encapsulation context cascade (outer styles beat :host). */
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
+ export class Component extends HTMLElement {
18
+ /** Override in subclass: e.g. static tag = 'hero-section' */
19
+ static tag;
20
+ /** Override in subclass: prop definitions with types */
21
+ static props = {};
22
+ /** Override in subclass: CSS styles (scoped in Shadow DOM, ignored in Light DOM) */
23
+ static styles = '';
24
+ /** Override to disable Shadow DOM. Light DOM components use global styles. Default: true */
25
+ static shadow = true;
26
+ /** Internal reactive state */
27
+ _state = {};
28
+ /** Proxy-wrapped state that triggers re-renders on mutation */
29
+ state;
30
+ /** Resolved prop values */
31
+ props = {};
32
+ _root;
33
+ _mounted = false;
34
+ _renderScheduled = false;
35
+ _cleanups = [];
36
+ _instance = null;
37
+ _styleInjected = false;
38
+ constructor() {
39
+ super();
40
+ const ctor = this.constructor;
41
+ this._root = ctor.shadow ? this.attachShadow({ mode: 'open' }) : this;
42
+ // Wrap state in Proxy for reactivity
43
+ this.state = new Proxy(this._state, {
44
+ set: (target, key, value) => {
45
+ const old = target[key];
46
+ if (old === value)
47
+ return true;
48
+ target[key] = value;
49
+ this._scheduleRender();
50
+ return true;
51
+ },
52
+ });
53
+ }
54
+ /** Web Components: observed attributes from prop definitions */
55
+ static get observedAttributes() {
56
+ return Object.keys(this.props);
57
+ }
58
+ /** Parse attribute value based on prop type */
59
+ _parseProp(name, value) {
60
+ const ctor = this.constructor;
61
+ const def = ctor.props[name];
62
+ const type = typeof def === 'function' ? def : def.type;
63
+ if (value === null) {
64
+ if (typeof def === 'object' && 'default' in def)
65
+ return def.default;
66
+ if (type === Boolean)
67
+ return false;
68
+ return undefined;
69
+ }
70
+ switch (type) {
71
+ case Boolean:
72
+ return value !== 'false' && value !== '0';
73
+ case Number:
74
+ return Number(value);
75
+ default:
76
+ return value;
77
+ }
78
+ }
79
+ /** Sync all attributes to props */
80
+ _syncProps() {
81
+ const ctor = this.constructor;
82
+ for (const name of Object.keys(ctor.props)) {
83
+ this.props[name] = this._parseProp(name, this.getAttribute(name));
84
+ }
85
+ }
86
+ /** Schedule a microtask re-render (batches multiple state changes) */
87
+ _scheduleRender() {
88
+ if (this._renderScheduled)
89
+ return;
90
+ this._renderScheduled = true;
91
+ queueMicrotask(() => {
92
+ this._renderScheduled = false;
93
+ this._performRender();
94
+ if (this._mounted)
95
+ this.onUpdate();
96
+ });
97
+ }
98
+ /** Inject scoped <style> once into shadow root */
99
+ _ensureStyles() {
100
+ if (this._styleInjected)
101
+ return;
102
+ this._styleInjected = true;
103
+ const ctor = this.constructor;
104
+ if (!ctor.shadow)
105
+ return;
106
+ const style = document.createElement('style');
107
+ style.textContent = SHADOW_RESET + ctor.styles;
108
+ this._root.insertBefore(style, this._root.firstChild);
109
+ }
110
+ /** Perform the actual DOM update */
111
+ _performRender() {
112
+ const content = this.render();
113
+ if (content instanceof TemplateResult) {
114
+ // Template parts engine — surgical DOM updates
115
+ if (this._instance &&
116
+ this._instance.nodes.length > 0 &&
117
+ this._instance.nodes[0].parentNode) {
118
+ // Same component, update Parts only
119
+ this._instance.update(content.values);
120
+ }
121
+ else {
122
+ // First render or template structure changed — create fresh instance
123
+ if (this._instance)
124
+ this._instance.dispose();
125
+ // Clear any previous innerHTML content (transition from SafeHTML or first render)
126
+ const ctor = this.constructor;
127
+ if (ctor.shadow) {
128
+ // Keep <style> if injected, clear everything else
129
+ while (this._root.childNodes.length > (this._styleInjected ? 1 : 0)) {
130
+ this._root.removeChild(this._root.lastChild);
131
+ }
132
+ }
133
+ else {
134
+ this._root.innerHTML = '';
135
+ }
136
+ this._ensureStyles();
137
+ const instance = createInstance(content);
138
+ this._root.appendChild(instance.fragment);
139
+ this._instance = instance;
140
+ }
141
+ }
142
+ else if (content instanceof SafeHTML) {
143
+ // Fallback: innerHTML for raw SafeHTML (backward compat with raw())
144
+ if (this._instance) {
145
+ this._instance.dispose();
146
+ this._instance = null;
147
+ }
148
+ this._styleInjected = false;
149
+ const ctor = this.constructor;
150
+ if (ctor.shadow) {
151
+ this._root.innerHTML = `<style>${SHADOW_RESET}${ctor.styles}</style>` + content.content;
152
+ }
153
+ else {
154
+ this._root.innerHTML = content.content;
155
+ }
156
+ }
157
+ }
158
+ // --- Web Component Lifecycle ---
159
+ connectedCallback() {
160
+ this._syncProps();
161
+ this._performRender();
162
+ this._mounted = true;
163
+ this.onMount();
164
+ }
165
+ disconnectedCallback() {
166
+ this._mounted = false;
167
+ // Dispose template instance (removes event listeners, child instances)
168
+ if (this._instance) {
169
+ this._instance.dispose();
170
+ this._instance = null;
171
+ }
172
+ this._styleInjected = false;
173
+ // Run auto-cleanups registered by useStore/useSignal/useEffect
174
+ for (const fn of this._cleanups)
175
+ fn();
176
+ this._cleanups.length = 0;
177
+ this.onDestroy();
178
+ }
179
+ attributeChangedCallback(name, oldValue, newValue) {
180
+ if (oldValue === newValue)
181
+ return;
182
+ this.props[name] = this._parseProp(name, newValue);
183
+ if (this._mounted)
184
+ this._scheduleRender();
185
+ }
186
+ /** Called after first render and DOM attachment */
187
+ onMount() { }
188
+ /** Called after re-renders (state or prop changes) */
189
+ onUpdate() { }
190
+ /** Called when component is removed from DOM */
191
+ onDestroy() { }
192
+ // --- Utility ---
193
+ /** Register a cleanup function to run on disconnect (used by useStore/useSignal/useEffect) */
194
+ _addCleanup(fn) {
195
+ this._cleanups.push(fn);
196
+ }
197
+ /** Query within shadow DOM */
198
+ $(selector) {
199
+ return this._root.querySelector(selector);
200
+ }
201
+ /** Query all within shadow DOM */
202
+ $$(selector) {
203
+ return Array.from(this._root.querySelectorAll(selector));
204
+ }
205
+ /** Emit a custom event */
206
+ emit(name, detail) {
207
+ this.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));
208
+ }
209
+ /** Register a component class as a custom element */
210
+ static define() {
211
+ if (!customElements.get(this.tag)) {
212
+ customElements.define(this.tag, this);
213
+ }
214
+ }
215
+ }
216
+ // Re-export html for convenience
217
+ export { html, raw } from './html';
218
+ export { TemplateResult } from './template';
219
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/component/component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Nova Engine — Component Connection Helpers
3
+ *
4
+ * Auto-subscribe components to stores and signals with automatic cleanup on destroy.
5
+ * Eliminates manual subscribe/unsubscribe boilerplate.
6
+ */
7
+ import type { Component } from './component';
8
+ /** Minimal signal interface — matches both Signal<T> and Computed<T> from @nova/store */
9
+ interface Subscribable<T> {
10
+ (): T;
11
+ subscribe(fn: (value: T) => void): () => void;
12
+ }
13
+ /** Minimal store interface — matches Store<T> from @nova/state */
14
+ interface SubscribableStore<T> {
15
+ subscribe<K extends keyof T>(key: K, fn: (newVal: T[K], oldVal: T[K]) => void): () => void;
16
+ }
17
+ /**
18
+ * Connect a signal or computed to a component.
19
+ * When the value changes, the component re-renders.
20
+ * Cleanup is automatic on disconnect.
21
+ *
22
+ * @returns The current value of the signal.
23
+ */
24
+ export declare function useSignal<T>(component: Component, signal: Subscribable<T>): T;
25
+ /**
26
+ * Connect a simple store to a component by key(s).
27
+ * When any of the specified keys change, the component re-renders.
28
+ * Cleanup is automatic on disconnect.
29
+ */
30
+ export declare function useStore<T extends Record<string, any>>(component: Component, store: SubscribableStore<T>, ...keys: (keyof T)[]): void;
31
+ /**
32
+ * Run a side effect tied to a component's lifecycle.
33
+ * If the function returns a cleanup, it runs on disconnect.
34
+ */
35
+ export declare function useEffect(component: Component, fn: () => void | (() => void)): void;
36
+ export interface TickHandle {
37
+ /** Pause the interval (callback stops firing) */
38
+ pause(): void;
39
+ /** Resume after pause */
40
+ resume(): void;
41
+ /** Change the interval duration (restarts the timer) */
42
+ setInterval(ms: number): void;
43
+ /** Whether the tick is currently running */
44
+ readonly active: boolean;
45
+ /** Stop and clean up (also called automatically on component disconnect) */
46
+ destroy(): void;
47
+ }
48
+ /**
49
+ * Create an auto-cleaned interval tied to a component's lifecycle.
50
+ * Automatically pauses when the document tab is hidden and resumes when visible.
51
+ * Cleanup is automatic on component disconnect.
52
+ *
53
+ * @param component The component to tie lifecycle to
54
+ * @param callback Function called on each tick. Receives elapsed ms since start.
55
+ * @param intervalMs Interval in milliseconds
56
+ * @returns TickHandle with pause/resume/destroy controls
57
+ */
58
+ export declare function useTick(component: Component, callback: (elapsed: number) => void, intervalMs: number): TickHandle;
59
+ export {};
60
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Nova Engine — Component Connection Helpers
3
+ *
4
+ * Auto-subscribe components to stores and signals with automatic cleanup on destroy.
5
+ * Eliminates manual subscribe/unsubscribe boilerplate.
6
+ */
7
+ /**
8
+ * Connect a signal or computed to a component.
9
+ * When the value changes, the component re-renders.
10
+ * Cleanup is automatic on disconnect.
11
+ *
12
+ * @returns The current value of the signal.
13
+ */
14
+ export function useSignal(component, signal) {
15
+ const unsub = signal.subscribe(() => {
16
+ component._scheduleRender();
17
+ });
18
+ component._addCleanup(unsub);
19
+ return signal();
20
+ }
21
+ /**
22
+ * Connect a simple store to a component by key(s).
23
+ * When any of the specified keys change, the component re-renders.
24
+ * Cleanup is automatic on disconnect.
25
+ */
26
+ export function useStore(component, store, ...keys) {
27
+ for (const key of keys) {
28
+ const unsub = store.subscribe(key, () => {
29
+ component._scheduleRender();
30
+ });
31
+ component._addCleanup(unsub);
32
+ }
33
+ }
34
+ /**
35
+ * Run a side effect tied to a component's lifecycle.
36
+ * If the function returns a cleanup, it runs on disconnect.
37
+ */
38
+ export function useEffect(component, fn) {
39
+ const cleanup = fn();
40
+ if (typeof cleanup === 'function') {
41
+ component._addCleanup(cleanup);
42
+ }
43
+ }
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) {
55
+ let id = null;
56
+ let running = false;
57
+ let ms = intervalMs;
58
+ const startTime = Date.now();
59
+ function tick() {
60
+ callback(Date.now() - startTime);
61
+ }
62
+ function start() {
63
+ if (running)
64
+ return;
65
+ running = true;
66
+ id = setInterval(tick, ms);
67
+ }
68
+ function stop() {
69
+ if (!running)
70
+ return;
71
+ running = false;
72
+ if (id !== null) {
73
+ clearInterval(id);
74
+ id = null;
75
+ }
76
+ }
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
+ }
87
+ }
88
+ let destroyed = false;
89
+ document.addEventListener('visibilitychange', onVisibility);
90
+ // Start immediately
91
+ start();
92
+ const handle = {
93
+ pause() { stop(); },
94
+ resume() { if (!destroyed)
95
+ start(); },
96
+ setInterval(newMs) {
97
+ ms = newMs;
98
+ if (running) {
99
+ stop();
100
+ start();
101
+ }
102
+ },
103
+ get active() { return running; },
104
+ destroy() {
105
+ if (destroyed)
106
+ return;
107
+ destroyed = true;
108
+ stop();
109
+ document.removeEventListener('visibilitychange', onVisibility);
110
+ },
111
+ };
112
+ component._addCleanup(handle.destroy);
113
+ return handle;
114
+ }
115
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/component/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
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 declare function escapeHtml(value: unknown): string;
10
+ /**
11
+ * Wrapper indicating pre-sanitized HTML content.
12
+ *
13
+ * WARNING: Content is rendered via innerHTML with NO escaping.
14
+ * Only use with trusted, pre-sanitized content. Never pass user
15
+ * input directly — use sanitize() from @nova/security first:
16
+ *
17
+ * import { sanitize } from '@nova/security';
18
+ * const safe = raw(sanitize(userInput));
19
+ */
20
+ export declare class SafeHTML {
21
+ readonly content: string;
22
+ constructor(content: string);
23
+ toString(): string;
24
+ }
25
+ /**
26
+ * Mark a string as already-safe HTML (skip escaping).
27
+ *
28
+ * SECURITY: The caller is responsible for ensuring content is safe.
29
+ * Passing unsanitized user input creates an XSS vulnerability.
30
+ * Use sanitize() from @nova/security to clean untrusted HTML first.
31
+ */
32
+ export declare function raw(value: string): SafeHTML;
33
+ /** Tagged template — returns TemplateResult for fine-grained rendering */
34
+ export declare function html(strings: TemplateStringsArray, ...values: unknown[]): TemplateResult;
35
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +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"}