@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,159 @@
1
+ /**
2
+ * Nova Engine — Subresource Integrity (SRI)
3
+ *
4
+ * Generate SRI hashes for scripts and stylesheets, inject integrity
5
+ * attributes, and verify resource integrity at runtime.
6
+ */
7
+ const ALGO_MAP = {
8
+ 'sha256': 'SHA-256',
9
+ 'sha384': 'SHA-384',
10
+ 'sha512': 'SHA-512',
11
+ };
12
+ function toBase64(buffer) {
13
+ return btoa(String.fromCharCode(...new Uint8Array(buffer)));
14
+ }
15
+ /** Generate SRI hash(es) for a string of content. */
16
+ export async function generateSRI(content, options) {
17
+ const algorithms = options?.algorithms ?? ['sha384'];
18
+ const encoded = new TextEncoder().encode(content);
19
+ const hashes = [];
20
+ for (const algo of algorithms) {
21
+ const digest = await crypto.subtle.digest(ALGO_MAP[algo], encoded);
22
+ const base64 = toBase64(digest);
23
+ hashes.push({ algorithm: algo, hash: base64 });
24
+ }
25
+ return {
26
+ integrity: hashes.map(h => `${h.algorithm}-${h.hash}`).join(' '),
27
+ hashes,
28
+ };
29
+ }
30
+ /** Generate SRI hash(es) for an ArrayBuffer. */
31
+ export async function generateSRIFromBuffer(buffer, options) {
32
+ const algorithms = options?.algorithms ?? ['sha384'];
33
+ const hashes = [];
34
+ for (const algo of algorithms) {
35
+ const digest = await crypto.subtle.digest(ALGO_MAP[algo], buffer);
36
+ const base64 = toBase64(digest);
37
+ hashes.push({ algorithm: algo, hash: base64 });
38
+ }
39
+ return {
40
+ integrity: hashes.map(h => `${h.algorithm}-${h.hash}`).join(' '),
41
+ hashes,
42
+ };
43
+ }
44
+ /** Fetch a resource and generate its SRI hash. */
45
+ export async function generateSRIFromURL(url, options) {
46
+ const response = await fetch(url);
47
+ const buffer = await response.arrayBuffer();
48
+ return generateSRIFromBuffer(buffer, options);
49
+ }
50
+ /**
51
+ * Create a <script> element with SRI integrity attribute.
52
+ * Optionally appends to a target element.
53
+ */
54
+ export async function createSecureScript(src, options) {
55
+ const sri = await generateSRIFromURL(src, options);
56
+ const script = document.createElement('script');
57
+ script.src = src;
58
+ script.integrity = sri.integrity;
59
+ const crossorigin = options?.crossorigin ?? 'anonymous';
60
+ if (crossorigin !== false) {
61
+ script.crossOrigin = crossorigin;
62
+ }
63
+ if (options?.async)
64
+ script.async = true;
65
+ if (options?.defer)
66
+ script.defer = true;
67
+ if (options?.type)
68
+ script.type = options.type;
69
+ if (options?.appendTo) {
70
+ options.appendTo.appendChild(script);
71
+ }
72
+ return script;
73
+ }
74
+ /**
75
+ * Create a <link rel="stylesheet"> element with SRI integrity attribute.
76
+ * Optionally appends to a target element.
77
+ */
78
+ export async function createSecureStylesheet(href, options) {
79
+ const sri = await generateSRIFromURL(href, options);
80
+ const link = document.createElement('link');
81
+ link.rel = 'stylesheet';
82
+ link.href = href;
83
+ link.integrity = sri.integrity;
84
+ const crossorigin = options?.crossorigin ?? 'anonymous';
85
+ if (crossorigin !== false) {
86
+ link.crossOrigin = crossorigin;
87
+ }
88
+ if (options?.media)
89
+ link.media = options.media;
90
+ if (options?.appendTo) {
91
+ options.appendTo.appendChild(link);
92
+ }
93
+ return link;
94
+ }
95
+ /**
96
+ * Verify that a resource's content matches an expected SRI hash.
97
+ * Useful for runtime integrity checks of dynamically loaded content.
98
+ */
99
+ export async function verifySRI(content, expectedIntegrity) {
100
+ const pairs = expectedIntegrity.trim().split(/\s+/);
101
+ for (const pair of pairs) {
102
+ const [algoHash] = pair.split('-', 1);
103
+ const expectedHash = pair.slice(algoHash.length + 1);
104
+ const algo = algoHash;
105
+ if (!ALGO_MAP[algo])
106
+ continue;
107
+ const data = typeof content === 'string'
108
+ ? new TextEncoder().encode(content)
109
+ : content;
110
+ const digest = await crypto.subtle.digest(ALGO_MAP[algo], data);
111
+ const actualHash = toBase64(digest);
112
+ // If any hash matches, the resource is valid
113
+ if (actualHash === expectedHash)
114
+ return true;
115
+ }
116
+ return false;
117
+ }
118
+ /**
119
+ * Scan existing <script> and <link> elements and add SRI
120
+ * integrity attributes where missing.
121
+ */
122
+ export async function enforceAllSRI(options) {
123
+ const selector = options?.selector ?? 'script[src], link[rel="stylesheet"][href]';
124
+ const elements = document.querySelectorAll(selector);
125
+ let count = 0;
126
+ for (const el of elements) {
127
+ // Skip if already has integrity
128
+ if (el.hasAttribute('integrity'))
129
+ continue;
130
+ const url = el.getAttribute('src') ?? el.getAttribute('href');
131
+ if (!url)
132
+ continue;
133
+ // Skip local resources if requested
134
+ if (options?.skipLocal) {
135
+ try {
136
+ const parsed = new URL(url, window.location.origin);
137
+ if (parsed.origin === window.location.origin)
138
+ continue;
139
+ }
140
+ catch {
141
+ continue;
142
+ }
143
+ }
144
+ try {
145
+ const sri = await generateSRIFromURL(url, options);
146
+ el.setAttribute('integrity', sri.integrity);
147
+ const crossorigin = options?.crossorigin ?? 'anonymous';
148
+ if (crossorigin !== false) {
149
+ el.setAttribute('crossorigin', crossorigin);
150
+ }
151
+ count++;
152
+ }
153
+ catch {
154
+ // Failed to fetch — skip silently
155
+ }
156
+ }
157
+ return count;
158
+ }
159
+ //# sourceMappingURL=sri.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sri.js","sourceRoot":"","sources":["../../src/security/sri.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { createShortcuts } from './shortcuts';
2
+ export type { ShortcutBinding, ShortcutsOptions, ShortcutsInstance } from './shortcuts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shortcuts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createShortcuts } from './shortcuts';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shortcuts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Nova Engine — Keyboard Shortcuts
3
+ *
4
+ * Centralized keyboard shortcut registry with scope support,
5
+ * modifier key normalization, and input field awareness.
6
+ */
7
+ export interface ShortcutBinding {
8
+ /** Key combo string, e.g. 'mod+k', 'shift+1', 'escape', '1' */
9
+ key: string;
10
+ /** Handler called when shortcut fires */
11
+ handler: (event: KeyboardEvent) => void;
12
+ /** Shortcut only fires when this scope is active. Omit for global. */
13
+ scope?: string;
14
+ /** Description for command palette or help overlay */
15
+ description?: string;
16
+ /** Prevent default browser behavior. Default: true */
17
+ preventDefault?: boolean;
18
+ }
19
+ export interface ShortcutsOptions {
20
+ /** Element to listen on. Default: document */
21
+ target?: EventTarget;
22
+ /** Ignore shortcuts when focus is in input/textarea/contenteditable. Default: true */
23
+ ignoreInputs?: boolean;
24
+ }
25
+ export interface ShortcutsInstance {
26
+ /** Register a keyboard shortcut. Returns unregister function. */
27
+ register(binding: ShortcutBinding): () => void;
28
+ /** Register multiple shortcuts at once. Returns single unregister-all function. */
29
+ registerAll(bindings: ShortcutBinding[]): () => void;
30
+ /** Unregister a shortcut by key combo (and optional scope) */
31
+ unregister(key: string, scope?: string): void;
32
+ /** Set the active scope (only matching scope + global shortcuts fire) */
33
+ setScope(scope: string | null): void;
34
+ /** Get current active scope */
35
+ readonly scope: string | null;
36
+ /** Get all registered shortcuts (useful for command palette) */
37
+ list(): ReadonlyArray<Readonly<ShortcutBinding>>;
38
+ /** Cleanup all listeners and bindings */
39
+ destroy(): void;
40
+ }
41
+ /** Create a keyboard shortcut manager instance. */
42
+ export declare function createShortcuts(options?: ShortcutsOptions): ShortcutsInstance;
43
+ //# sourceMappingURL=shortcuts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcuts.d.ts","sourceRoot":"","sources":["../../src/shortcuts/shortcuts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACxC,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,sFAAsF;IACtF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,IAAI,CAAC;IAC/C,mFAAmF;IACnF,WAAW,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,IAAI,CAAC;IACrD,8DAA8D;IAC9D,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACrC,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gEAAgE;IAChE,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IACjD,yCAAyC;IACzC,OAAO,IAAI,IAAI,CAAC;CACjB;AAuDD,mDAAmD;AACnD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,iBAAiB,CAiG7E"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Nova Engine — Keyboard Shortcuts
3
+ *
4
+ * Centralized keyboard shortcut registry with scope support,
5
+ * modifier key normalization, and input field awareness.
6
+ */
7
+ const isMac = typeof navigator !== 'undefined'
8
+ ? /Mac|iPhone|iPad/.test(navigator.userAgent)
9
+ : false;
10
+ function parseCombo(combo) {
11
+ const parts = combo.toLowerCase().split('+');
12
+ return {
13
+ key: parts[parts.length - 1],
14
+ mod: parts.includes('mod') || parts.includes('ctrl') || parts.includes('cmd') || parts.includes('meta'),
15
+ shift: parts.includes('shift'),
16
+ alt: parts.includes('alt'),
17
+ };
18
+ }
19
+ function normalizeKey(combo) {
20
+ const parts = [];
21
+ if (combo.mod)
22
+ parts.push('mod');
23
+ if (combo.shift)
24
+ parts.push('shift');
25
+ if (combo.alt)
26
+ parts.push('alt');
27
+ parts.push(combo.key);
28
+ return parts.join('+');
29
+ }
30
+ function matchesEvent(e, combo) {
31
+ const modKey = isMac ? e.metaKey : e.ctrlKey;
32
+ return (e.key.toLowerCase() === combo.key &&
33
+ (combo.mod ? modKey : !(isMac ? e.metaKey : e.ctrlKey)) &&
34
+ (combo.shift ? e.shiftKey : !e.shiftKey) &&
35
+ (combo.alt ? e.altKey : !e.altKey));
36
+ }
37
+ function isInputFocused() {
38
+ const el = document.activeElement;
39
+ if (!el)
40
+ return false;
41
+ const tag = el.tagName;
42
+ if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT')
43
+ return true;
44
+ if (el.isContentEditable)
45
+ return true;
46
+ return false;
47
+ }
48
+ /* ---- Factory ---- */
49
+ /** Create a keyboard shortcut manager instance. */
50
+ export function createShortcuts(options) {
51
+ const { target = document, ignoreInputs = true, } = options ?? {};
52
+ const registry = new Map();
53
+ let activeScope = null;
54
+ let destroyed = false;
55
+ function onKeyDown(e) {
56
+ if (destroyed)
57
+ return;
58
+ const event = e;
59
+ // Skip when focused in inputs
60
+ if (ignoreInputs && isInputFocused())
61
+ return;
62
+ // Check all registered combos
63
+ for (const entries of registry.values()) {
64
+ for (const { binding, parsed } of entries) {
65
+ if (!matchesEvent(event, parsed))
66
+ continue;
67
+ // Scope check: fire if global (no scope) or matches active scope
68
+ if (binding.scope && binding.scope !== activeScope)
69
+ continue;
70
+ if (binding.preventDefault !== false) {
71
+ event.preventDefault();
72
+ }
73
+ binding.handler(event);
74
+ return; // First match wins
75
+ }
76
+ }
77
+ }
78
+ target.addEventListener('keydown', onKeyDown);
79
+ return {
80
+ register(binding) {
81
+ const parsed = parseCombo(binding.key);
82
+ const key = normalizeKey(parsed);
83
+ const entry = { binding, parsed };
84
+ if (!registry.has(key))
85
+ registry.set(key, []);
86
+ registry.get(key).push(entry);
87
+ return () => {
88
+ const entries = registry.get(key);
89
+ if (!entries)
90
+ return;
91
+ const idx = entries.indexOf(entry);
92
+ if (idx !== -1)
93
+ entries.splice(idx, 1);
94
+ if (entries.length === 0)
95
+ registry.delete(key);
96
+ };
97
+ },
98
+ registerAll(bindings) {
99
+ const unsubs = bindings.map((b) => this.register(b));
100
+ return () => { for (const fn of unsubs)
101
+ fn(); };
102
+ },
103
+ unregister(key, scope) {
104
+ const parsed = parseCombo(key);
105
+ const normalized = normalizeKey(parsed);
106
+ const entries = registry.get(normalized);
107
+ if (!entries)
108
+ return;
109
+ if (scope) {
110
+ const filtered = entries.filter((e) => e.binding.scope !== scope);
111
+ if (filtered.length === 0)
112
+ registry.delete(normalized);
113
+ else
114
+ registry.set(normalized, filtered);
115
+ }
116
+ else {
117
+ registry.delete(normalized);
118
+ }
119
+ },
120
+ setScope(scope) {
121
+ activeScope = scope;
122
+ },
123
+ get scope() { return activeScope; },
124
+ list() {
125
+ const all = [];
126
+ for (const entries of registry.values()) {
127
+ for (const { binding } of entries)
128
+ all.push(binding);
129
+ }
130
+ return all;
131
+ },
132
+ destroy() {
133
+ if (destroyed)
134
+ return;
135
+ destroyed = true;
136
+ target.removeEventListener('keydown', onKeyDown);
137
+ registry.clear();
138
+ },
139
+ };
140
+ }
141
+ //# sourceMappingURL=shortcuts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcuts.js","sourceRoot":"","sources":["../../src/shortcuts/shortcuts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { renderToString, renderPage, hydrate, renderWithMarkers, supportsDeclarativeShadowDOM } from './ssr';
2
+ export type { SSROptions, SSRComponentDef } from './ssr';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ssr/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,OAAO,CAAC;AAC7G,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { renderToString, renderPage, hydrate, renderWithMarkers, supportsDeclarativeShadowDOM } from './ssr';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ssr/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,OAAO,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Nova Engine — Server-Side Rendering
3
+ *
4
+ * Declarative Shadow DOM utilities for SSR/SSG with Nova components.
5
+ * Renders Nova components to HTML strings with `<template shadowrootmode>`.
6
+ */
7
+ export interface SSROptions {
8
+ /** Render mode. Default: 'declarative' (Declarative Shadow DOM) */
9
+ mode?: 'declarative' | 'hydrate';
10
+ /** Include scoped styles in the shadow root. Default: true */
11
+ includeStyles?: boolean;
12
+ }
13
+ export interface SSRComponentDef {
14
+ /** Custom element tag name */
15
+ tag: string;
16
+ /** HTML content */
17
+ html: string;
18
+ /** Scoped CSS styles (Shadow DOM only) */
19
+ css?: string;
20
+ /** HTML attributes to set on the host element */
21
+ attributes?: Record<string, string>;
22
+ /** Slot content (light DOM, Shadow DOM only) */
23
+ slotContent?: string;
24
+ /** Use Shadow DOM. Default: true. Set false for Light DOM components. */
25
+ shadow?: boolean;
26
+ }
27
+ /**
28
+ * Render a component definition to an HTML string with Declarative Shadow DOM.
29
+ * Suitable for SSR/SSG pipelines.
30
+ */
31
+ export declare function renderToString(def: SSRComponentDef, options?: SSROptions): string;
32
+ /**
33
+ * Render multiple components to a full HTML document string.
34
+ */
35
+ export declare function renderPage(options: {
36
+ title?: string;
37
+ lang?: string;
38
+ meta?: Record<string, string>;
39
+ styles?: string[];
40
+ scripts?: string[];
41
+ body: string;
42
+ head?: string;
43
+ }): string;
44
+ /**
45
+ * Client-side hydration: find all SSR-rendered Nova components and
46
+ * trigger their custom element upgrade / connectedCallback.
47
+ *
48
+ * For template-aware hydration (attaching live Parts to existing DOM
49
+ * without re-rendering), use hydrateTemplate() from @nova/component.
50
+ */
51
+ export declare function hydrate(root?: Document | Element): void;
52
+ /**
53
+ * Render a TemplateResult's string representation with hydration markers.
54
+ * Inserts <!--nova-ph--> comment markers at Part positions so the client
55
+ * can find them during hydrate() and attach live bindings.
56
+ */
57
+ export declare function renderWithMarkers(strings: TemplateStringsArray, values: unknown[]): string;
58
+ /**
59
+ * Check if Declarative Shadow DOM is supported in the current environment.
60
+ */
61
+ export declare function supportsDeclarativeShadowDOM(): boolean;
62
+ //# sourceMappingURL=ssr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr.d.ts","sourceRoot":"","sources":["../../src/ssr/ssr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,8DAA8D;IAC9D,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,CAqBrF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAiCT;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,GAAE,QAAQ,GAAG,OAAkB,GAAG,IAAI,CASjE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAgC1F;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CAGtD"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Nova Engine — Server-Side Rendering
3
+ *
4
+ * Declarative Shadow DOM utilities for SSR/SSG with Nova components.
5
+ * Renders Nova components to HTML strings with `<template shadowrootmode>`.
6
+ */
7
+ import { SafeHTML } from '../component/html';
8
+ import { TemplateResult } from '../component/template';
9
+ /**
10
+ * Render a component definition to an HTML string with Declarative Shadow DOM.
11
+ * Suitable for SSR/SSG pipelines.
12
+ */
13
+ export function renderToString(def, options = {}) {
14
+ const { mode = 'declarative', includeStyles = true } = options;
15
+ const attrs = def.attributes
16
+ ? ' ' + Object.entries(def.attributes).map(([k, v]) => `${k}="${escapeAttr(v)}"`).join(' ')
17
+ : '';
18
+ // Light DOM: render content directly inside the element (no shadow template)
19
+ if (def.shadow === false) {
20
+ return `<${def.tag}${attrs}>${def.html}</${def.tag}>`;
21
+ }
22
+ const styleTag = includeStyles && def.css
23
+ ? `<style>${def.css}</style>`
24
+ : '';
25
+ if (mode === 'declarative') {
26
+ return `<${def.tag}${attrs}><template shadowrootmode="open">${styleTag}${def.html}</template>${def.slotContent ?? ''}</${def.tag}>`;
27
+ }
28
+ // Hydrate mode: render light DOM with hydration marker
29
+ return `<${def.tag}${attrs} data-nova-ssr="hydrate">${def.slotContent ?? ''}</${def.tag}>`;
30
+ }
31
+ /**
32
+ * Render multiple components to a full HTML document string.
33
+ */
34
+ export function renderPage(options) {
35
+ const { title = '', lang = 'en', meta = {}, styles = [], scripts = [], body, head = '', } = options;
36
+ const metaTags = Object.entries(meta)
37
+ .map(([name, content]) => `<meta name="${escapeAttr(name)}" content="${escapeAttr(content)}">`)
38
+ .join('\n ');
39
+ const styleTags = styles.map((href) => `<link rel="stylesheet" href="${escapeAttr(href)}">`).join('\n ');
40
+ const scriptTags = scripts.map((src) => `<script type="module" src="${escapeAttr(src)}"></script>`).join('\n ');
41
+ return `<!DOCTYPE html>
42
+ <html lang="${lang}">
43
+ <head>
44
+ <meta charset="utf-8">
45
+ <meta name="viewport" content="width=device-width, initial-scale=1">
46
+ ${title ? `<title>${escapeHtml(title)}</title>` : ''}
47
+ ${metaTags}
48
+ ${styleTags}
49
+ ${head}
50
+ </head>
51
+ <body>
52
+ ${body}
53
+ ${scriptTags}
54
+ </body>
55
+ </html>`;
56
+ }
57
+ /**
58
+ * Client-side hydration: find all SSR-rendered Nova components and
59
+ * trigger their custom element upgrade / connectedCallback.
60
+ *
61
+ * For template-aware hydration (attaching live Parts to existing DOM
62
+ * without re-rendering), use hydrateTemplate() from @nova/component.
63
+ */
64
+ export function hydrate(root = document) {
65
+ const elements = root.querySelectorAll('[data-nova-ssr="hydrate"]');
66
+ for (const el of elements) {
67
+ el.removeAttribute('data-nova-ssr');
68
+ // Force custom element upgrade if not yet defined
69
+ if (el.constructor === HTMLElement) {
70
+ customElements.upgrade(el);
71
+ }
72
+ }
73
+ }
74
+ /**
75
+ * Render a TemplateResult's string representation with hydration markers.
76
+ * Inserts <!--nova-ph--> comment markers at Part positions so the client
77
+ * can find them during hydrate() and attach live bindings.
78
+ */
79
+ export function renderWithMarkers(strings, values) {
80
+ const MARKER = '<!--nova-ph-->';
81
+ let result = '';
82
+ for (let i = 0; i < strings.length; i++) {
83
+ result += strings[i];
84
+ if (i < values.length) {
85
+ const val = values[i];
86
+ if (typeof val === 'function') {
87
+ // Event handlers: emit marker attribute, skip value
88
+ result += '';
89
+ }
90
+ else if (val instanceof SafeHTML) {
91
+ // Trusted HTML — render verbatim (already sanitized by caller)
92
+ result += val.content + MARKER;
93
+ }
94
+ else if (val instanceof TemplateResult) {
95
+ // Nested template — already escaped by its own renderToString
96
+ result += val.content + MARKER;
97
+ }
98
+ else if (Array.isArray(val)) {
99
+ result += val.map((item) => item instanceof SafeHTML ? item.content
100
+ : item instanceof TemplateResult ? item.content
101
+ : escapeHtml(String(item ?? ''))).join('') + MARKER;
102
+ }
103
+ else if (val == null || typeof val === 'boolean') {
104
+ result += MARKER;
105
+ }
106
+ else {
107
+ result += escapeHtml(String(val)) + MARKER;
108
+ }
109
+ }
110
+ }
111
+ return result;
112
+ }
113
+ /**
114
+ * Check if Declarative Shadow DOM is supported in the current environment.
115
+ */
116
+ export function supportsDeclarativeShadowDOM() {
117
+ if (typeof HTMLTemplateElement === 'undefined')
118
+ return false;
119
+ return 'shadowRootMode' in HTMLTemplateElement.prototype;
120
+ }
121
+ function escapeHtml(str) {
122
+ return str
123
+ .replace(/&/g, '&amp;')
124
+ .replace(/</g, '&lt;')
125
+ .replace(/>/g, '&gt;')
126
+ .replace(/"/g, '&quot;')
127
+ .replace(/'/g, '&#39;');
128
+ }
129
+ function escapeAttr(str) {
130
+ return str.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
131
+ }
132
+ //# sourceMappingURL=ssr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr.js","sourceRoot":"","sources":["../../src/ssr/ssr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { createStore } from './store';
2
+ export type { StoreOptions, Store } from './store';
3
+ export { createPersistentStore } from './persistent';
4
+ export type { PersistentStoreOptions, PersistentStore } from './persistent';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { createStore } from './store';
2
+ export { createPersistentStore } from './persistent';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}