@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,31 @@
1
+ /**
2
+ * Nova Engine — Persistent Store
3
+ *
4
+ * Wraps createStore() with debounced localStorage persistence,
5
+ * cross-tab synchronization, and selective key filtering.
6
+ */
7
+ import type { Store } from './store';
8
+ export interface PersistentStoreOptions<T extends Record<string, any>> {
9
+ /** localStorage key */
10
+ key: string;
11
+ /** Initial state (used if nothing in localStorage) */
12
+ state: T;
13
+ /** Debounce write interval in ms. Default: 100 */
14
+ debounce?: number;
15
+ /** Keys to persist. Default: all keys */
16
+ include?: (keyof T)[];
17
+ }
18
+ export interface PersistentStore<T extends Record<string, any>> extends Store<T> {
19
+ /** Force immediate write to localStorage (bypass debounce) */
20
+ flush(): void;
21
+ /** Remove persisted data from localStorage */
22
+ clear(): void;
23
+ /** Cleanup cross-tab listener and debounce timer */
24
+ destroy(): void;
25
+ }
26
+ /**
27
+ * Create a persistent store backed by localStorage.
28
+ * Same API as createStore, plus flush/clear/destroy.
29
+ */
30
+ export declare function createPersistentStore<T extends Record<string, any>>(options: PersistentStoreOptions<T>): PersistentStore<T>;
31
+ //# sourceMappingURL=persistent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistent.d.ts","sourceRoot":"","sources":["../../src/state/persistent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACnE,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,KAAK,EAAE,CAAC,CAAC;IACT,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IAC9E,8DAA8D;IAC9D,KAAK,IAAI,IAAI,CAAC;IACd,8CAA8C;IAC9C,KAAK,IAAI,IAAI,CAAC;IACd,oDAAoD;IACpD,OAAO,IAAI,IAAI,CAAC;CACjB;AAcD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjE,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GACjC,eAAe,CAAC,CAAC,CAAC,CA8FpB"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Nova Engine — Persistent Store
3
+ *
4
+ * Wraps createStore() with debounced localStorage persistence,
5
+ * cross-tab synchronization, and selective key filtering.
6
+ */
7
+ import { createStore } from './store';
8
+ function readLS(key) {
9
+ try {
10
+ return localStorage.getItem(key);
11
+ }
12
+ catch {
13
+ return null;
14
+ }
15
+ }
16
+ function writeLS(key, value) {
17
+ try {
18
+ localStorage.setItem(key, value);
19
+ }
20
+ catch { /* quota exceeded, etc. */ }
21
+ }
22
+ function removeLS(key) {
23
+ try {
24
+ localStorage.removeItem(key);
25
+ }
26
+ catch { /* noop */ }
27
+ }
28
+ /**
29
+ * Create a persistent store backed by localStorage.
30
+ * Same API as createStore, plus flush/clear/destroy.
31
+ */
32
+ export function createPersistentStore(options) {
33
+ const { key, debounce: debounceMs = 100, include } = options;
34
+ const isBrowser = typeof window !== 'undefined';
35
+ // Restore from localStorage
36
+ let initial = structuredClone(options.state);
37
+ if (isBrowser) {
38
+ const saved = readLS(key);
39
+ if (saved) {
40
+ try {
41
+ const parsed = JSON.parse(saved);
42
+ initial = { ...initial, ...parsed };
43
+ }
44
+ catch { /* ignore parse errors */ }
45
+ }
46
+ }
47
+ // Create the underlying store (without its own persist — we handle it)
48
+ const store = createStore({ state: initial });
49
+ // Serialization helper — respects `include` filter
50
+ function serialize() {
51
+ const snap = store.snapshot();
52
+ if (include && include.length > 0) {
53
+ const filtered = {};
54
+ for (const k of include)
55
+ filtered[k] = snap[k];
56
+ return JSON.stringify(filtered);
57
+ }
58
+ return JSON.stringify(snap);
59
+ }
60
+ // Debounced write
61
+ let timer = null;
62
+ let destroyed = false;
63
+ function scheduleWrite() {
64
+ if (destroyed || !isBrowser)
65
+ return;
66
+ if (timer !== null)
67
+ clearTimeout(timer);
68
+ timer = setTimeout(() => {
69
+ timer = null;
70
+ writeLS(key, serialize());
71
+ }, debounceMs);
72
+ }
73
+ // Subscribe to all changes
74
+ const unsubAny = store.onAny(scheduleWrite);
75
+ // Cross-tab sync
76
+ function onStorage(e) {
77
+ if (destroyed || e.key !== key || e.newValue === null)
78
+ return;
79
+ try {
80
+ const incoming = JSON.parse(e.newValue);
81
+ store.batch((state) => {
82
+ for (const [k, v] of Object.entries(incoming)) {
83
+ state[k] = v;
84
+ }
85
+ });
86
+ }
87
+ catch { /* ignore parse errors */ }
88
+ }
89
+ if (isBrowser) {
90
+ window.addEventListener('storage', onStorage);
91
+ }
92
+ return {
93
+ // Proxy through all Store<T> methods
94
+ get state() { return store.state; },
95
+ subscribe: store.subscribe.bind(store),
96
+ onAny: store.onAny.bind(store),
97
+ snapshot: store.snapshot.bind(store),
98
+ reset() {
99
+ store.reset();
100
+ // Also reset persisted data
101
+ if (isBrowser)
102
+ writeLS(key, serialize());
103
+ },
104
+ batch: store.batch.bind(store),
105
+ flush() {
106
+ if (!isBrowser)
107
+ return;
108
+ if (timer !== null) {
109
+ clearTimeout(timer);
110
+ timer = null;
111
+ }
112
+ writeLS(key, serialize());
113
+ },
114
+ clear() {
115
+ if (isBrowser)
116
+ removeLS(key);
117
+ },
118
+ destroy() {
119
+ if (destroyed)
120
+ return;
121
+ destroyed = true;
122
+ unsubAny();
123
+ if (timer !== null) {
124
+ clearTimeout(timer);
125
+ timer = null;
126
+ }
127
+ if (isBrowser)
128
+ window.removeEventListener('storage', onStorage);
129
+ },
130
+ };
131
+ }
132
+ //# sourceMappingURL=persistent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistent.js","sourceRoot":"","sources":["../../src/state/persistent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Nova Engine — Reactive Store
3
+ *
4
+ * Proxy-based state management with selective subscriptions,
5
+ * computed values, and optional localStorage persistence.
6
+ */
7
+ type Listener<T = unknown> = (newValue: T, oldValue: T) => void;
8
+ type AnyListener = () => void;
9
+ export interface StoreOptions<T extends Record<string, any>> {
10
+ /** Initial state */
11
+ state: T;
12
+ /** localStorage key for persistence (optional) */
13
+ persist?: string;
14
+ }
15
+ export interface Store<T extends Record<string, any>> {
16
+ /** Reactive state — mutate directly, subscribers are notified */
17
+ state: T;
18
+ /** Subscribe to a specific key */
19
+ subscribe<K extends keyof T>(key: K, listener: Listener<T[K]>): () => void;
20
+ /** Subscribe to any change */
21
+ onAny(listener: AnyListener): () => void;
22
+ /** Get a snapshot of current state */
23
+ snapshot(): Readonly<T>;
24
+ /** Reset to initial state */
25
+ reset(): void;
26
+ /** Batch multiple updates — subscribers notified once at the end */
27
+ batch(fn: (state: T) => void): void;
28
+ }
29
+ export declare function createStore<T extends Record<string, any>>(options: StoreOptions<T>): Store<T>;
30
+ export {};
31
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,KAAK,QAAQ,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC;AAChE,KAAK,WAAW,GAAG,MAAM,IAAI,CAAC;AAE9B,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACzD,oBAAoB;IACpB,KAAK,EAAE,CAAC,CAAC;IACT,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAClD,iEAAiE;IACjE,KAAK,EAAE,CAAC,CAAC;IACT,kCAAkC;IAClC,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAC3E,8BAA8B;IAC9B,KAAK,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,IAAI,CAAC;IACzC,sCAAsC;IACtC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxB,6BAA6B;IAC7B,KAAK,IAAI,IAAI,CAAC;IACd,oEAAoE;IACpE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;CACrC;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAwG7F"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Nova Engine — Reactive Store
3
+ *
4
+ * Proxy-based state management with selective subscriptions,
5
+ * computed values, and optional localStorage persistence.
6
+ */
7
+ export function createStore(options) {
8
+ const initial = structuredClone(options.state);
9
+ let data = structuredClone(initial);
10
+ // Restore from localStorage if persisted
11
+ if (options.persist) {
12
+ try {
13
+ const saved = localStorage.getItem(options.persist);
14
+ if (saved) {
15
+ data = { ...data, ...JSON.parse(saved) };
16
+ }
17
+ }
18
+ catch {
19
+ // Ignore parse errors
20
+ }
21
+ }
22
+ const keyListeners = new Map();
23
+ const anyListeners = new Set();
24
+ let batching = false;
25
+ const batchedKeys = new Set();
26
+ function notify(key, newVal, oldVal) {
27
+ if (batching) {
28
+ batchedKeys.add(key);
29
+ return;
30
+ }
31
+ const listeners = keyListeners.get(key);
32
+ if (listeners) {
33
+ for (const fn of listeners)
34
+ fn(newVal, oldVal);
35
+ }
36
+ for (const fn of anyListeners)
37
+ fn();
38
+ persist();
39
+ }
40
+ function persist() {
41
+ if (!options.persist)
42
+ return;
43
+ try {
44
+ localStorage.setItem(options.persist, JSON.stringify(data));
45
+ }
46
+ catch {
47
+ // Quota exceeded, etc.
48
+ }
49
+ }
50
+ const state = new Proxy(data, {
51
+ set(target, prop, value) {
52
+ const key = prop;
53
+ const old = target[key];
54
+ if (old === value)
55
+ return true;
56
+ target[prop] = value;
57
+ notify(key, value, old);
58
+ return true;
59
+ },
60
+ get(target, prop) {
61
+ return target[prop];
62
+ },
63
+ });
64
+ return {
65
+ state,
66
+ subscribe(key, listener) {
67
+ if (!keyListeners.has(key))
68
+ keyListeners.set(key, new Set());
69
+ const set = keyListeners.get(key);
70
+ set.add(listener);
71
+ return () => set.delete(listener);
72
+ },
73
+ onAny(listener) {
74
+ anyListeners.add(listener);
75
+ return () => anyListeners.delete(listener);
76
+ },
77
+ snapshot() {
78
+ return structuredClone(data);
79
+ },
80
+ reset() {
81
+ const resetData = structuredClone(initial);
82
+ for (const key of Object.keys(resetData)) {
83
+ state[key] = resetData[key];
84
+ }
85
+ },
86
+ batch(fn) {
87
+ batching = true;
88
+ batchedKeys.clear();
89
+ fn(state);
90
+ batching = false;
91
+ // Notify once per changed key
92
+ for (const key of batchedKeys) {
93
+ const listeners = keyListeners.get(key);
94
+ if (listeners) {
95
+ for (const fn of listeners)
96
+ fn(data[key], undefined);
97
+ }
98
+ }
99
+ if (batchedKeys.size > 0) {
100
+ for (const fn of anyListeners)
101
+ fn();
102
+ persist();
103
+ }
104
+ },
105
+ };
106
+ }
107
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { createNovaStore } from './store';
2
+ export type { Signal, Computed, StoreOptions, NovaStore } from './store';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createNovaStore } from './store';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Nova Engine — Advanced Store
3
+ *
4
+ * Reactive state management with signals, computed derivations,
5
+ * effects with cleanup, batched updates, and persistence.
6
+ */
7
+ export interface Signal<T> {
8
+ /** Read the current value. Tracks dependency in computed/effect context. */
9
+ (): T;
10
+ /** Replace the value and notify subscribers. */
11
+ set(value: T): void;
12
+ /** Derive next value from previous. */
13
+ update(fn: (prev: T) => T): void;
14
+ /** Subscribe to changes. Returns unsubscribe function. */
15
+ subscribe(fn: (value: T) => void): () => void;
16
+ }
17
+ export interface Computed<T> {
18
+ /** Read the derived value. Recomputes if dependencies changed. */
19
+ (): T;
20
+ /** Subscribe to changes. Returns unsubscribe function. */
21
+ subscribe(fn: (value: T) => void): () => void;
22
+ }
23
+ export interface StoreOptions {
24
+ /** Name for devtools identification */
25
+ name?: string;
26
+ }
27
+ export interface NovaStore {
28
+ signal<T>(initial: T): Signal<T>;
29
+ computed<T>(fn: () => T): Computed<T>;
30
+ effect(fn: () => void | (() => void)): () => void;
31
+ batch(fn: () => void): void;
32
+ persist<T>(signal: Signal<T>, key: string, storage?: Storage): () => void;
33
+ }
34
+ /** Create an advanced reactive store. */
35
+ export declare function createNovaStore(options?: StoreOptions): NovaStore;
36
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,4EAA4E;IAC5E,IAAI,CAAC,CAAC;IACN,gDAAgD;IAChD,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACpB,uCAAuC;IACvC,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACjC,0DAA0D;IAC1D,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,kEAAkE;IAClE,IAAI,CAAC,CAAC;IACN,0DAA0D;IAC1D,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACjC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC;IAClD,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,IAAI,CAAC;CAC3E;AAgBD,yCAAyC;AACzC,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS,CAqIjE"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Nova Engine — Advanced Store
3
+ *
4
+ * Reactive state management with signals, computed derivations,
5
+ * effects with cleanup, batched updates, and persistence.
6
+ */
7
+ const trackStack = [];
8
+ function startTrack() {
9
+ const deps = new Set();
10
+ trackStack.push(deps);
11
+ return deps;
12
+ }
13
+ function stopTrack() { trackStack.pop(); }
14
+ function track(dep) {
15
+ if (trackStack.length > 0)
16
+ trackStack[trackStack.length - 1].add(dep);
17
+ }
18
+ /** Create an advanced reactive store. */
19
+ export function createNovaStore(options) {
20
+ const _name = options?.name ?? 'nova-store';
21
+ void _name;
22
+ let batchDepth = 0;
23
+ const batchedNotifiers = new Set();
24
+ function scheduleNotify(notifier) {
25
+ if (batchDepth > 0)
26
+ batchedNotifiers.add(notifier);
27
+ else
28
+ notifier();
29
+ }
30
+ function flushBatched() {
31
+ const pending = [...batchedNotifiers];
32
+ batchedNotifiers.clear();
33
+ for (const fn of pending)
34
+ fn();
35
+ }
36
+ // -- signal ---------------------------------------------------------------
37
+ function signal(initial) {
38
+ let value = initial;
39
+ const subs = new Set();
40
+ function notify() { for (const fn of [...subs])
41
+ fn(value); }
42
+ function _sub(collector) {
43
+ const wrapped = collector;
44
+ subs.add(wrapped);
45
+ return () => subs.delete(wrapped);
46
+ }
47
+ const obj = { _sub };
48
+ const read = (() => { track(obj); return value; });
49
+ read.set = (next) => { if (Object.is(value, next))
50
+ return; value = next; scheduleNotify(notify); };
51
+ read.update = (fn) => { const next = fn(value); if (Object.is(value, next))
52
+ return; value = next; scheduleNotify(notify); };
53
+ read.subscribe = (fn) => { subs.add(fn); return () => subs.delete(fn); };
54
+ return read;
55
+ }
56
+ // -- computed -------------------------------------------------------------
57
+ function computed(fn) {
58
+ let cached;
59
+ let dirty = true;
60
+ let depUnsubs = [];
61
+ const subs = new Set();
62
+ function notifySubs() { for (const s of [...subs])
63
+ s(cached); }
64
+ function invalidate() {
65
+ if (!dirty) {
66
+ dirty = true;
67
+ if (subs.size > 0) {
68
+ const prev = cached;
69
+ recompute();
70
+ if (!Object.is(prev, cached))
71
+ scheduleNotify(notifySubs);
72
+ }
73
+ }
74
+ }
75
+ function recompute() {
76
+ for (const u of depUnsubs)
77
+ u();
78
+ depUnsubs = [];
79
+ const deps = startTrack();
80
+ try {
81
+ cached = fn();
82
+ }
83
+ finally {
84
+ stopTrack();
85
+ }
86
+ dirty = false;
87
+ for (const dep of deps)
88
+ depUnsubs.push(dep._sub(invalidate));
89
+ }
90
+ function _sub(collector) {
91
+ const wrapped = collector;
92
+ subs.add(wrapped);
93
+ if (dirty)
94
+ recompute();
95
+ return () => subs.delete(wrapped);
96
+ }
97
+ const obj = { _sub };
98
+ const read = (() => { track(obj); if (dirty)
99
+ recompute(); return cached; });
100
+ read.subscribe = (fn) => { if (dirty)
101
+ recompute(); subs.add(fn); return () => subs.delete(fn); };
102
+ return read;
103
+ }
104
+ // -- effect ---------------------------------------------------------------
105
+ function effect(fn) {
106
+ let depUnsubs = [];
107
+ let cleanup;
108
+ let disposed = false;
109
+ function run() {
110
+ if (disposed)
111
+ return;
112
+ if (cleanup) {
113
+ cleanup();
114
+ cleanup = undefined;
115
+ }
116
+ for (const u of depUnsubs)
117
+ u();
118
+ depUnsubs = [];
119
+ const deps = startTrack();
120
+ try {
121
+ cleanup = fn() ?? undefined;
122
+ }
123
+ finally {
124
+ stopTrack();
125
+ }
126
+ for (const dep of deps)
127
+ depUnsubs.push(dep._sub(() => scheduleNotify(run)));
128
+ }
129
+ run();
130
+ return () => {
131
+ if (disposed)
132
+ return;
133
+ disposed = true;
134
+ if (cleanup) {
135
+ cleanup();
136
+ cleanup = undefined;
137
+ }
138
+ for (const u of depUnsubs)
139
+ u();
140
+ depUnsubs = [];
141
+ };
142
+ }
143
+ // -- batch ----------------------------------------------------------------
144
+ function batch(fn) {
145
+ batchDepth++;
146
+ try {
147
+ fn();
148
+ }
149
+ finally {
150
+ batchDepth--;
151
+ if (batchDepth === 0)
152
+ flushBatched();
153
+ }
154
+ }
155
+ // -- persist --------------------------------------------------------------
156
+ function persist(sig, key, storage) {
157
+ const s = storage ?? (typeof localStorage !== 'undefined' ? localStorage : undefined);
158
+ if (!s)
159
+ return () => { };
160
+ try {
161
+ const raw = s.getItem(key);
162
+ if (raw !== null)
163
+ sig.set(JSON.parse(raw));
164
+ }
165
+ catch { /* ignore malformed data */ }
166
+ return sig.subscribe((value) => {
167
+ try {
168
+ s.setItem(key, JSON.stringify(value));
169
+ }
170
+ catch { /* quota exceeded */ }
171
+ });
172
+ }
173
+ return { signal, computed, effect, batch, persist };
174
+ }
175
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Nova Engine — Auth Helpers
3
+ *
4
+ * Wraps Supabase auth for login, signup, logout, and session management.
5
+ */
6
+ import type { User, Session, AuthError } from '@supabase/supabase-js';
7
+ export type AuthResult = {
8
+ user: User | null;
9
+ error: AuthError | null;
10
+ };
11
+ export declare function signUp(email: string, password: string): Promise<AuthResult>;
12
+ export declare function signIn(email: string, password: string): Promise<AuthResult>;
13
+ export declare function signOut(): Promise<{
14
+ error: AuthError | null;
15
+ }>;
16
+ export declare function getSession(): Promise<Session | null>;
17
+ export declare function getUser(): Promise<User | null>;
18
+ export declare function resetPasswordForEmail(email: string, redirectTo?: string): Promise<{
19
+ error: AuthError | null;
20
+ }>;
21
+ export declare function updatePassword(newPassword: string): Promise<{
22
+ error: AuthError | null;
23
+ }>;
24
+ export declare function exchangeCodeForSession(code: string): Promise<{
25
+ error: AuthError | null;
26
+ }>;
27
+ export declare function onAuthChange(callback: (user: User | null) => void): () => void;
28
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/supabase/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,CAAC;AAExE,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAGjF;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAGjF;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,CAAC,CAGpE;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAG1D;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAGpD;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,CAAC,CAKpH;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,CAAC,CAG9F;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,CAAC,CAG/F;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,CAK9E"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Nova Engine — Auth Helpers
3
+ *
4
+ * Wraps Supabase auth for login, signup, logout, and session management.
5
+ */
6
+ import { getSupabase } from './client';
7
+ export async function signUp(email, password) {
8
+ const { data, error } = await getSupabase().auth.signUp({ email, password });
9
+ return { user: data.user, error };
10
+ }
11
+ export async function signIn(email, password) {
12
+ const { data, error } = await getSupabase().auth.signInWithPassword({ email, password });
13
+ return { user: data.user, error };
14
+ }
15
+ export async function signOut() {
16
+ const { error } = await getSupabase().auth.signOut();
17
+ return { error };
18
+ }
19
+ export async function getSession() {
20
+ const { data } = await getSupabase().auth.getSession();
21
+ return data.session;
22
+ }
23
+ export async function getUser() {
24
+ const { data } = await getSupabase().auth.getUser();
25
+ return data.user;
26
+ }
27
+ export async function resetPasswordForEmail(email, redirectTo) {
28
+ const { error } = await getSupabase().auth.resetPasswordForEmail(email, {
29
+ redirectTo,
30
+ });
31
+ return { error };
32
+ }
33
+ export async function updatePassword(newPassword) {
34
+ const { data: _data, error } = await getSupabase().auth.updateUser({ password: newPassword });
35
+ return { error };
36
+ }
37
+ export async function exchangeCodeForSession(code) {
38
+ const { error } = await getSupabase().auth.exchangeCodeForSession(code);
39
+ return { error };
40
+ }
41
+ export function onAuthChange(callback) {
42
+ const { data } = getSupabase().auth.onAuthStateChange((_event, session) => {
43
+ callback(session?.user ?? null);
44
+ });
45
+ return () => data.subscription.unsubscribe();
46
+ }
47
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/supabase/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAKvC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAa,EAAE,QAAgB;IAC1D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7E,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAa,EAAE,QAAgB;IAC1D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzF,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACrD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IACvD,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAa,EAAE,UAAmB;IAC5E,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE;QACtE,UAAU;KACX,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB;IACtD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;IAC9F,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAY;IACvD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACxE,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAqC;IAChE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACxE,QAAQ,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AAC/C,CAAC"}