svelte-firekit 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. package/README.md +550 -354
  2. package/dist/components/AuthGuard.svelte +64 -0
  3. package/dist/components/AuthGuard.svelte.d.ts +15 -0
  4. package/dist/components/Collection.svelte +62 -0
  5. package/dist/components/Collection.svelte.d.ts +39 -0
  6. package/dist/components/CustomGuard.svelte +87 -0
  7. package/dist/components/CustomGuard.svelte.d.ts +13 -0
  8. package/dist/components/Doc.svelte +56 -0
  9. package/dist/components/Doc.svelte.d.ts +36 -0
  10. package/dist/components/DownloadURL.svelte +48 -0
  11. package/dist/components/DownloadURL.svelte.d.ts +14 -0
  12. package/dist/components/FirebaseApp.svelte +81 -0
  13. package/dist/components/FirebaseApp.svelte.d.ts +12 -0
  14. package/dist/components/Node.svelte +54 -0
  15. package/dist/components/Node.svelte.d.ts +36 -0
  16. package/dist/components/SignedIn.svelte +22 -0
  17. package/dist/components/{firekit/signed-in.svelte.d.ts → SignedIn.svelte.d.ts} +1 -4
  18. package/dist/components/SignedOut.svelte +32 -0
  19. package/dist/components/{firekit/signed-out.svelte.d.ts → SignedOut.svelte.d.ts} +3 -5
  20. package/dist/components/UploadTask.svelte +75 -0
  21. package/dist/components/UploadTask.svelte.d.ts +33 -0
  22. package/dist/config.d.ts +29 -6
  23. package/dist/config.js +37 -74
  24. package/dist/context.d.ts +46 -0
  25. package/dist/context.js +56 -0
  26. package/dist/firebase.d.ts +25 -84
  27. package/dist/firebase.js +75 -125
  28. package/dist/index.d.ts +32 -20
  29. package/dist/index.js +49 -30
  30. package/dist/services/ai.svelte.d.ts +152 -0
  31. package/dist/services/ai.svelte.js +302 -0
  32. package/dist/services/analytics.d.ts +39 -231
  33. package/dist/services/analytics.js +89 -421
  34. package/dist/services/app-check.svelte.d.ts +82 -0
  35. package/dist/services/app-check.svelte.js +159 -0
  36. package/dist/services/auth.d.ts +63 -352
  37. package/dist/services/auth.js +353 -718
  38. package/dist/services/bundles.d.ts +42 -0
  39. package/dist/services/bundles.js +57 -0
  40. package/dist/services/callable.d.ts +57 -0
  41. package/dist/services/callable.js +115 -0
  42. package/dist/services/collection.svelte.d.ts +154 -221
  43. package/dist/services/collection.svelte.js +357 -663
  44. package/dist/services/document.svelte.d.ts +73 -254
  45. package/dist/services/document.svelte.js +196 -497
  46. package/dist/services/in-app-messaging.d.ts +46 -0
  47. package/dist/services/in-app-messaging.js +88 -0
  48. package/dist/services/messaging.svelte.d.ts +75 -0
  49. package/dist/services/messaging.svelte.js +190 -0
  50. package/dist/services/mutations.d.ts +59 -282
  51. package/dist/services/mutations.js +202 -951
  52. package/dist/services/performance.d.ts +60 -0
  53. package/dist/services/performance.js +118 -0
  54. package/dist/services/presence.svelte.d.ts +21 -89
  55. package/dist/services/presence.svelte.js +232 -469
  56. package/dist/services/realtime.svelte.d.ts +54 -125
  57. package/dist/services/realtime.svelte.js +111 -175
  58. package/dist/services/remote-config.svelte.d.ts +73 -0
  59. package/dist/services/remote-config.svelte.js +204 -0
  60. package/dist/services/storage.svelte.d.ts +81 -208
  61. package/dist/services/storage.svelte.js +190 -305
  62. package/dist/services/user.svelte.d.ts +23 -244
  63. package/dist/services/user.svelte.js +129 -439
  64. package/dist/types/analytics.d.ts +2 -36
  65. package/dist/types/analytics.js +0 -5
  66. package/dist/types/auth.d.ts +15 -85
  67. package/dist/types/auth.js +0 -17
  68. package/dist/types/collection.d.ts +31 -225
  69. package/dist/types/collection.js +5 -51
  70. package/dist/types/document.d.ts +11 -236
  71. package/dist/types/document.js +2 -47
  72. package/dist/types/firebase.d.ts +10 -13
  73. package/dist/types/firebase.js +3 -9
  74. package/dist/types/index.d.ts +5 -5
  75. package/dist/types/index.js +5 -4
  76. package/dist/types/mutations.d.ts +11 -225
  77. package/dist/types/mutations.js +6 -51
  78. package/dist/types/presence.d.ts +5 -158
  79. package/dist/types/presence.js +0 -20
  80. package/dist/utils/errors.d.ts +10 -14
  81. package/dist/utils/errors.js +11 -16
  82. package/dist/utils/firestore.d.ts +3 -4
  83. package/dist/utils/firestore.js +7 -10
  84. package/dist/utils/index.d.ts +4 -4
  85. package/dist/utils/index.js +4 -8
  86. package/dist/utils/providers.d.ts +4 -13
  87. package/dist/utils/providers.js +14 -13
  88. package/dist/utils/user.d.ts +1 -3
  89. package/dist/utils/user.js +1 -3
  90. package/package.json +41 -55
  91. package/dist/components/docs/doc-content.svelte +0 -19
  92. package/dist/components/docs/doc-content.svelte.d.ts +0 -6
  93. package/dist/components/docs/doc-header.svelte +0 -24
  94. package/dist/components/docs/doc-header.svelte.d.ts +0 -13
  95. package/dist/components/docs/doc-renderer.svelte +0 -27
  96. package/dist/components/docs/doc-renderer.svelte.d.ts +0 -8
  97. package/dist/components/docs/mobile-table-of-contents.svelte +0 -42
  98. package/dist/components/docs/mobile-table-of-contents.svelte.d.ts +0 -3
  99. package/dist/components/docs/table-of-contents.svelte +0 -33
  100. package/dist/components/docs/table-of-contents.svelte.d.ts +0 -4
  101. package/dist/components/docs/toc.svelte.d.ts +0 -16
  102. package/dist/components/docs/toc.svelte.js +0 -59
  103. package/dist/components/firekit/Collection.svelte +0 -122
  104. package/dist/components/firekit/Collection.svelte.d.ts +0 -27
  105. package/dist/components/firekit/Doc.svelte +0 -140
  106. package/dist/components/firekit/Doc.svelte.d.ts +0 -28
  107. package/dist/components/firekit/Node.svelte +0 -97
  108. package/dist/components/firekit/Node.svelte.d.ts +0 -23
  109. package/dist/components/firekit/auth-guard.svelte +0 -120
  110. package/dist/components/firekit/auth-guard.svelte.d.ts +0 -26
  111. package/dist/components/firekit/custom-guard.svelte +0 -163
  112. package/dist/components/firekit/custom-guard.svelte.d.ts +0 -31
  113. package/dist/components/firekit/download-url.svelte +0 -92
  114. package/dist/components/firekit/download-url.svelte.d.ts +0 -19
  115. package/dist/components/firekit/firebase-app.svelte +0 -33
  116. package/dist/components/firekit/firebase-app.svelte.d.ts +0 -7
  117. package/dist/components/firekit/node-list.svelte +0 -102
  118. package/dist/components/firekit/node-list.svelte.d.ts +0 -27
  119. package/dist/components/firekit/signed-in.svelte +0 -42
  120. package/dist/components/firekit/signed-out.svelte +0 -42
  121. package/dist/components/firekit/storage-list.svelte +0 -97
  122. package/dist/components/firekit/storage-list.svelte.d.ts +0 -26
  123. package/dist/components/firekit/upload-task.svelte +0 -108
  124. package/dist/components/firekit/upload-task.svelte.d.ts +0 -24
  125. package/dist/components/nav/app-sidebar.svelte +0 -175
  126. package/dist/components/nav/app-sidebar.svelte.d.ts +0 -9
  127. package/dist/components/nav/auto-breadcrumb.svelte +0 -41
  128. package/dist/components/nav/auto-breadcrumb.svelte.d.ts +0 -3
  129. package/dist/components/nav/dark-mode-toggle.svelte +0 -17
  130. package/dist/components/nav/dark-mode-toggle.svelte.d.ts +0 -18
  131. package/dist/components/nav/nav-components.svelte +0 -24
  132. package/dist/components/nav/nav-components.svelte.d.ts +0 -11
  133. package/dist/components/nav/nav-main.svelte +0 -45
  134. package/dist/components/nav/nav-main.svelte.d.ts +0 -11
  135. package/dist/components/nav/nav-secondary.svelte +0 -32
  136. package/dist/components/nav/nav-secondary.svelte.d.ts +0 -14
  137. package/dist/components/nav/site-header.svelte +0 -32
  138. package/dist/components/nav/site-header.svelte.d.ts +0 -18
  139. package/dist/components/ui/avatar/avatar-fallback.svelte +0 -17
  140. package/dist/components/ui/avatar/avatar-fallback.svelte.d.ts +0 -4
  141. package/dist/components/ui/avatar/avatar-image.svelte +0 -17
  142. package/dist/components/ui/avatar/avatar-image.svelte.d.ts +0 -4
  143. package/dist/components/ui/avatar/avatar.svelte +0 -19
  144. package/dist/components/ui/avatar/avatar.svelte.d.ts +0 -4
  145. package/dist/components/ui/avatar/index.d.ts +0 -4
  146. package/dist/components/ui/avatar/index.js +0 -6
  147. package/dist/components/ui/badge/badge.svelte +0 -50
  148. package/dist/components/ui/badge/badge.svelte.d.ts +0 -32
  149. package/dist/components/ui/badge/index.d.ts +0 -2
  150. package/dist/components/ui/badge/index.js +0 -2
  151. package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +0 -23
  152. package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte.d.ts +0 -5
  153. package/dist/components/ui/breadcrumb/breadcrumb-item.svelte +0 -20
  154. package/dist/components/ui/breadcrumb/breadcrumb-item.svelte.d.ts +0 -5
  155. package/dist/components/ui/breadcrumb/breadcrumb-link.svelte +0 -31
  156. package/dist/components/ui/breadcrumb/breadcrumb-link.svelte.d.ts +0 -11
  157. package/dist/components/ui/breadcrumb/breadcrumb-list.svelte +0 -23
  158. package/dist/components/ui/breadcrumb/breadcrumb-list.svelte.d.ts +0 -5
  159. package/dist/components/ui/breadcrumb/breadcrumb-page.svelte +0 -23
  160. package/dist/components/ui/breadcrumb/breadcrumb-page.svelte.d.ts +0 -5
  161. package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +0 -27
  162. package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte.d.ts +0 -5
  163. package/dist/components/ui/breadcrumb/breadcrumb.svelte +0 -21
  164. package/dist/components/ui/breadcrumb/breadcrumb.svelte.d.ts +0 -5
  165. package/dist/components/ui/breadcrumb/index.d.ts +0 -8
  166. package/dist/components/ui/breadcrumb/index.js +0 -10
  167. package/dist/components/ui/button/button.svelte +0 -80
  168. package/dist/components/ui/button/button.svelte.d.ts +0 -58
  169. package/dist/components/ui/button/index.d.ts +0 -2
  170. package/dist/components/ui/button/index.js +0 -4
  171. package/dist/components/ui/card/card-action.svelte +0 -20
  172. package/dist/components/ui/card/card-action.svelte.d.ts +0 -5
  173. package/dist/components/ui/card/card-content.svelte +0 -15
  174. package/dist/components/ui/card/card-content.svelte.d.ts +0 -5
  175. package/dist/components/ui/card/card-description.svelte +0 -20
  176. package/dist/components/ui/card/card-description.svelte.d.ts +0 -5
  177. package/dist/components/ui/card/card-footer.svelte +0 -20
  178. package/dist/components/ui/card/card-footer.svelte.d.ts +0 -5
  179. package/dist/components/ui/card/card-header.svelte +0 -23
  180. package/dist/components/ui/card/card-header.svelte.d.ts +0 -5
  181. package/dist/components/ui/card/card-title.svelte +0 -20
  182. package/dist/components/ui/card/card-title.svelte.d.ts +0 -5
  183. package/dist/components/ui/card/card.svelte +0 -23
  184. package/dist/components/ui/card/card.svelte.d.ts +0 -5
  185. package/dist/components/ui/card/index.d.ts +0 -8
  186. package/dist/components/ui/card/index.js +0 -10
  187. package/dist/components/ui/chart/chart-container.svelte +0 -80
  188. package/dist/components/ui/chart/chart-container.svelte.d.ts +0 -9
  189. package/dist/components/ui/chart/chart-style.svelte +0 -36
  190. package/dist/components/ui/chart/chart-style.svelte.d.ts +0 -8
  191. package/dist/components/ui/chart/chart-tooltip.svelte +0 -159
  192. package/dist/components/ui/chart/chart-tooltip.svelte.d.ts +0 -27
  193. package/dist/components/ui/chart/chart-utils.d.ts +0 -36
  194. package/dist/components/ui/chart/chart-utils.js +0 -33
  195. package/dist/components/ui/chart/index.d.ts +0 -4
  196. package/dist/components/ui/chart/index.js +0 -4
  197. package/dist/components/ui/checkbox/checkbox.svelte +0 -36
  198. package/dist/components/ui/checkbox/checkbox.svelte.d.ts +0 -4
  199. package/dist/components/ui/checkbox/index.d.ts +0 -2
  200. package/dist/components/ui/checkbox/index.js +0 -4
  201. package/dist/components/ui/data-table/data-table.svelte.d.ts +0 -40
  202. package/dist/components/ui/data-table/data-table.svelte.js +0 -110
  203. package/dist/components/ui/data-table/flex-render.svelte +0 -36
  204. package/dist/components/ui/data-table/flex-render.svelte.d.ts +0 -30
  205. package/dist/components/ui/data-table/index.d.ts +0 -3
  206. package/dist/components/ui/data-table/index.js +0 -3
  207. package/dist/components/ui/data-table/render-helpers.d.ts +0 -90
  208. package/dist/components/ui/data-table/render-helpers.js +0 -99
  209. package/dist/components/ui/dialog/dialog-close.svelte +0 -7
  210. package/dist/components/ui/dialog/dialog-close.svelte.d.ts +0 -4
  211. package/dist/components/ui/dialog/dialog-content.svelte +0 -43
  212. package/dist/components/ui/dialog/dialog-content.svelte.d.ts +0 -11
  213. package/dist/components/ui/dialog/dialog-description.svelte +0 -17
  214. package/dist/components/ui/dialog/dialog-description.svelte.d.ts +0 -4
  215. package/dist/components/ui/dialog/dialog-footer.svelte +0 -20
  216. package/dist/components/ui/dialog/dialog-footer.svelte.d.ts +0 -5
  217. package/dist/components/ui/dialog/dialog-header.svelte +0 -20
  218. package/dist/components/ui/dialog/dialog-header.svelte.d.ts +0 -5
  219. package/dist/components/ui/dialog/dialog-overlay.svelte +0 -20
  220. package/dist/components/ui/dialog/dialog-overlay.svelte.d.ts +0 -4
  221. package/dist/components/ui/dialog/dialog-title.svelte +0 -17
  222. package/dist/components/ui/dialog/dialog-title.svelte.d.ts +0 -4
  223. package/dist/components/ui/dialog/dialog-trigger.svelte +0 -7
  224. package/dist/components/ui/dialog/dialog-trigger.svelte.d.ts +0 -4
  225. package/dist/components/ui/dialog/index.d.ts +0 -11
  226. package/dist/components/ui/dialog/index.js +0 -14
  227. package/dist/components/ui/drawer/drawer-close.svelte +0 -7
  228. package/dist/components/ui/drawer/drawer-close.svelte.d.ts +0 -4
  229. package/dist/components/ui/drawer/drawer-content.svelte +0 -37
  230. package/dist/components/ui/drawer/drawer-content.svelte.d.ts +0 -7
  231. package/dist/components/ui/drawer/drawer-description.svelte +0 -17
  232. package/dist/components/ui/drawer/drawer-description.svelte.d.ts +0 -4
  233. package/dist/components/ui/drawer/drawer-footer.svelte +0 -20
  234. package/dist/components/ui/drawer/drawer-footer.svelte.d.ts +0 -5
  235. package/dist/components/ui/drawer/drawer-header.svelte +0 -20
  236. package/dist/components/ui/drawer/drawer-header.svelte.d.ts +0 -5
  237. package/dist/components/ui/drawer/drawer-nested.svelte +0 -12
  238. package/dist/components/ui/drawer/drawer-nested.svelte.d.ts +0 -3
  239. package/dist/components/ui/drawer/drawer-overlay.svelte +0 -20
  240. package/dist/components/ui/drawer/drawer-overlay.svelte.d.ts +0 -4
  241. package/dist/components/ui/drawer/drawer-title.svelte +0 -17
  242. package/dist/components/ui/drawer/drawer-title.svelte.d.ts +0 -4
  243. package/dist/components/ui/drawer/drawer-trigger.svelte +0 -7
  244. package/dist/components/ui/drawer/drawer-trigger.svelte.d.ts +0 -4
  245. package/dist/components/ui/drawer/drawer.svelte +0 -12
  246. package/dist/components/ui/drawer/drawer.svelte.d.ts +0 -3
  247. package/dist/components/ui/drawer/index.d.ts +0 -13
  248. package/dist/components/ui/drawer/index.js +0 -15
  249. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +0 -41
  250. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +0 -9
  251. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +0 -27
  252. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +0 -7
  253. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +0 -22
  254. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +0 -8
  255. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte +0 -7
  256. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte.d.ts +0 -4
  257. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +0 -27
  258. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +0 -8
  259. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +0 -24
  260. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts +0 -8
  261. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +0 -16
  262. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +0 -4
  263. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +0 -31
  264. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +0 -4
  265. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +0 -17
  266. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +0 -4
  267. package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +0 -20
  268. package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +0 -5
  269. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +0 -20
  270. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +0 -4
  271. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +0 -29
  272. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +0 -7
  273. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -7
  274. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +0 -4
  275. package/dist/components/ui/dropdown-menu/index.d.ts +0 -25
  276. package/dist/components/ui/dropdown-menu/index.js +0 -17
  277. package/dist/components/ui/input/index.d.ts +0 -2
  278. package/dist/components/ui/input/index.js +0 -4
  279. package/dist/components/ui/input/input.svelte +0 -51
  280. package/dist/components/ui/input/input.svelte.d.ts +0 -13
  281. package/dist/components/ui/label/index.d.ts +0 -2
  282. package/dist/components/ui/label/index.js +0 -4
  283. package/dist/components/ui/label/label.svelte +0 -20
  284. package/dist/components/ui/label/label.svelte.d.ts +0 -4
  285. package/dist/components/ui/scroll-area/index.d.ts +0 -3
  286. package/dist/components/ui/scroll-area/index.js +0 -5
  287. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +0 -31
  288. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte.d.ts +0 -4
  289. package/dist/components/ui/scroll-area/scroll-area.svelte +0 -40
  290. package/dist/components/ui/scroll-area/scroll-area.svelte.d.ts +0 -10
  291. package/dist/components/ui/select/index.d.ts +0 -11
  292. package/dist/components/ui/select/index.js +0 -14
  293. package/dist/components/ui/select/select-content.svelte +0 -40
  294. package/dist/components/ui/select/select-content.svelte.d.ts +0 -8
  295. package/dist/components/ui/select/select-group-heading.svelte +0 -21
  296. package/dist/components/ui/select/select-group-heading.svelte.d.ts +0 -10
  297. package/dist/components/ui/select/select-group.svelte +0 -7
  298. package/dist/components/ui/select/select-group.svelte.d.ts +0 -4
  299. package/dist/components/ui/select/select-item.svelte +0 -38
  300. package/dist/components/ui/select/select-item.svelte.d.ts +0 -4
  301. package/dist/components/ui/select/select-label.svelte +0 -20
  302. package/dist/components/ui/select/select-label.svelte.d.ts +0 -6
  303. package/dist/components/ui/select/select-scroll-down-button.svelte +0 -20
  304. package/dist/components/ui/select/select-scroll-down-button.svelte.d.ts +0 -4
  305. package/dist/components/ui/select/select-scroll-up-button.svelte +0 -20
  306. package/dist/components/ui/select/select-scroll-up-button.svelte.d.ts +0 -4
  307. package/dist/components/ui/select/select-separator.svelte +0 -18
  308. package/dist/components/ui/select/select-separator.svelte.d.ts +0 -4
  309. package/dist/components/ui/select/select-trigger.svelte +0 -29
  310. package/dist/components/ui/select/select-trigger.svelte.d.ts +0 -8
  311. package/dist/components/ui/separator/index.d.ts +0 -2
  312. package/dist/components/ui/separator/index.js +0 -4
  313. package/dist/components/ui/separator/separator.svelte +0 -20
  314. package/dist/components/ui/separator/separator.svelte.d.ts +0 -4
  315. package/dist/components/ui/sheet/index.d.ts +0 -11
  316. package/dist/components/ui/sheet/index.js +0 -14
  317. package/dist/components/ui/sheet/sheet-close.svelte +0 -7
  318. package/dist/components/ui/sheet/sheet-close.svelte.d.ts +0 -4
  319. package/dist/components/ui/sheet/sheet-content.svelte +0 -58
  320. package/dist/components/ui/sheet/sheet-content.svelte.d.ts +0 -35
  321. package/dist/components/ui/sheet/sheet-description.svelte +0 -17
  322. package/dist/components/ui/sheet/sheet-description.svelte.d.ts +0 -4
  323. package/dist/components/ui/sheet/sheet-footer.svelte +0 -20
  324. package/dist/components/ui/sheet/sheet-footer.svelte.d.ts +0 -5
  325. package/dist/components/ui/sheet/sheet-header.svelte +0 -20
  326. package/dist/components/ui/sheet/sheet-header.svelte.d.ts +0 -5
  327. package/dist/components/ui/sheet/sheet-overlay.svelte +0 -20
  328. package/dist/components/ui/sheet/sheet-overlay.svelte.d.ts +0 -4
  329. package/dist/components/ui/sheet/sheet-title.svelte +0 -17
  330. package/dist/components/ui/sheet/sheet-title.svelte.d.ts +0 -4
  331. package/dist/components/ui/sheet/sheet-trigger.svelte +0 -7
  332. package/dist/components/ui/sheet/sheet-trigger.svelte.d.ts +0 -4
  333. package/dist/components/ui/sidebar/constants.d.ts +0 -6
  334. package/dist/components/ui/sidebar/constants.js +0 -6
  335. package/dist/components/ui/sidebar/context.svelte.d.ts +0 -42
  336. package/dist/components/ui/sidebar/context.svelte.js +0 -54
  337. package/dist/components/ui/sidebar/index.d.ts +0 -25
  338. package/dist/components/ui/sidebar/index.js +0 -27
  339. package/dist/components/ui/sidebar/sidebar-content.svelte +0 -24
  340. package/dist/components/ui/sidebar/sidebar-content.svelte.d.ts +0 -5
  341. package/dist/components/ui/sidebar/sidebar-footer.svelte +0 -21
  342. package/dist/components/ui/sidebar/sidebar-footer.svelte.d.ts +0 -5
  343. package/dist/components/ui/sidebar/sidebar-group-action.svelte +0 -36
  344. package/dist/components/ui/sidebar/sidebar-group-action.svelte.d.ts +0 -11
  345. package/dist/components/ui/sidebar/sidebar-group-content.svelte +0 -21
  346. package/dist/components/ui/sidebar/sidebar-group-content.svelte.d.ts +0 -5
  347. package/dist/components/ui/sidebar/sidebar-group-label.svelte +0 -34
  348. package/dist/components/ui/sidebar/sidebar-group-label.svelte.d.ts +0 -11
  349. package/dist/components/ui/sidebar/sidebar-group.svelte +0 -21
  350. package/dist/components/ui/sidebar/sidebar-group.svelte.d.ts +0 -5
  351. package/dist/components/ui/sidebar/sidebar-header.svelte +0 -21
  352. package/dist/components/ui/sidebar/sidebar-header.svelte.d.ts +0 -5
  353. package/dist/components/ui/sidebar/sidebar-input.svelte +0 -21
  354. package/dist/components/ui/sidebar/sidebar-input.svelte.d.ts +0 -11
  355. package/dist/components/ui/sidebar/sidebar-inset.svelte +0 -24
  356. package/dist/components/ui/sidebar/sidebar-inset.svelte.d.ts +0 -5
  357. package/dist/components/ui/sidebar/sidebar-menu-action.svelte +0 -43
  358. package/dist/components/ui/sidebar/sidebar-menu-action.svelte.d.ts +0 -12
  359. package/dist/components/ui/sidebar/sidebar-menu-badge.svelte +0 -29
  360. package/dist/components/ui/sidebar/sidebar-menu-badge.svelte.d.ts +0 -5
  361. package/dist/components/ui/sidebar/sidebar-menu-button.svelte +0 -103
  362. package/dist/components/ui/sidebar/sidebar-menu-button.svelte.d.ts +0 -51
  363. package/dist/components/ui/sidebar/sidebar-menu-item.svelte +0 -21
  364. package/dist/components/ui/sidebar/sidebar-menu-item.svelte.d.ts +0 -5
  365. package/dist/components/ui/sidebar/sidebar-menu-skeleton.svelte +0 -36
  366. package/dist/components/ui/sidebar/sidebar-menu-skeleton.svelte.d.ts +0 -8
  367. package/dist/components/ui/sidebar/sidebar-menu-sub-button.svelte +0 -43
  368. package/dist/components/ui/sidebar/sidebar-menu-sub-button.svelte.d.ts +0 -13
  369. package/dist/components/ui/sidebar/sidebar-menu-sub-item.svelte +0 -21
  370. package/dist/components/ui/sidebar/sidebar-menu-sub-item.svelte.d.ts +0 -5
  371. package/dist/components/ui/sidebar/sidebar-menu-sub.svelte +0 -25
  372. package/dist/components/ui/sidebar/sidebar-menu-sub.svelte.d.ts +0 -5
  373. package/dist/components/ui/sidebar/sidebar-menu.svelte +0 -21
  374. package/dist/components/ui/sidebar/sidebar-menu.svelte.d.ts +0 -5
  375. package/dist/components/ui/sidebar/sidebar-provider.svelte +0 -53
  376. package/dist/components/ui/sidebar/sidebar-provider.svelte.d.ts +0 -9
  377. package/dist/components/ui/sidebar/sidebar-rail.svelte +0 -36
  378. package/dist/components/ui/sidebar/sidebar-rail.svelte.d.ts +0 -5
  379. package/dist/components/ui/sidebar/sidebar-separator.svelte +0 -19
  380. package/dist/components/ui/sidebar/sidebar-separator.svelte.d.ts +0 -13
  381. package/dist/components/ui/sidebar/sidebar-trigger.svelte +0 -35
  382. package/dist/components/ui/sidebar/sidebar-trigger.svelte.d.ts +0 -8
  383. package/dist/components/ui/sidebar/sidebar.svelte +0 -104
  384. package/dist/components/ui/sidebar/sidebar.svelte.d.ts +0 -10
  385. package/dist/components/ui/skeleton/index.d.ts +0 -2
  386. package/dist/components/ui/skeleton/index.js +0 -4
  387. package/dist/components/ui/skeleton/skeleton.svelte +0 -17
  388. package/dist/components/ui/skeleton/skeleton.svelte.d.ts +0 -5
  389. package/dist/components/ui/table/index.d.ts +0 -9
  390. package/dist/components/ui/table/index.js +0 -11
  391. package/dist/components/ui/table/table-body.svelte +0 -20
  392. package/dist/components/ui/table/table-body.svelte.d.ts +0 -5
  393. package/dist/components/ui/table/table-caption.svelte +0 -20
  394. package/dist/components/ui/table/table-caption.svelte.d.ts +0 -5
  395. package/dist/components/ui/table/table-cell.svelte +0 -20
  396. package/dist/components/ui/table/table-cell.svelte.d.ts +0 -5
  397. package/dist/components/ui/table/table-footer.svelte +0 -20
  398. package/dist/components/ui/table/table-footer.svelte.d.ts +0 -5
  399. package/dist/components/ui/table/table-head.svelte +0 -23
  400. package/dist/components/ui/table/table-head.svelte.d.ts +0 -5
  401. package/dist/components/ui/table/table-header.svelte +0 -20
  402. package/dist/components/ui/table/table-header.svelte.d.ts +0 -5
  403. package/dist/components/ui/table/table-row.svelte +0 -23
  404. package/dist/components/ui/table/table-row.svelte.d.ts +0 -5
  405. package/dist/components/ui/table/table.svelte +0 -22
  406. package/dist/components/ui/table/table.svelte.d.ts +0 -5
  407. package/dist/components/ui/tabs/index.d.ts +0 -5
  408. package/dist/components/ui/tabs/index.js +0 -7
  409. package/dist/components/ui/tabs/tabs-content.svelte +0 -17
  410. package/dist/components/ui/tabs/tabs-content.svelte.d.ts +0 -4
  411. package/dist/components/ui/tabs/tabs-list.svelte +0 -20
  412. package/dist/components/ui/tabs/tabs-list.svelte.d.ts +0 -4
  413. package/dist/components/ui/tabs/tabs-trigger.svelte +0 -20
  414. package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +0 -4
  415. package/dist/components/ui/tabs/tabs.svelte +0 -19
  416. package/dist/components/ui/tabs/tabs.svelte.d.ts +0 -4
  417. package/dist/components/ui/toggle/index.d.ts +0 -3
  418. package/dist/components/ui/toggle/index.js +0 -5
  419. package/dist/components/ui/toggle/toggle.svelte +0 -52
  420. package/dist/components/ui/toggle/toggle.svelte.d.ts +0 -43
  421. package/dist/components/ui/toggle-group/index.d.ts +0 -3
  422. package/dist/components/ui/toggle-group/index.js +0 -5
  423. package/dist/components/ui/toggle-group/toggle-group-item.svelte +0 -34
  424. package/dist/components/ui/toggle-group/toggle-group-item.svelte.d.ts +0 -6
  425. package/dist/components/ui/toggle-group/toggle-group.svelte +0 -47
  426. package/dist/components/ui/toggle-group/toggle-group.svelte.d.ts +0 -8
  427. package/dist/components/ui/tooltip/index.d.ts +0 -7
  428. package/dist/components/ui/tooltip/index.js +0 -9
  429. package/dist/components/ui/tooltip/tooltip-content.svelte +0 -47
  430. package/dist/components/ui/tooltip/tooltip-content.svelte.d.ts +0 -7
  431. package/dist/components/ui/tooltip/tooltip-trigger.svelte +0 -7
  432. package/dist/components/ui/tooltip/tooltip-trigger.svelte.d.ts +0 -4
  433. package/dist/hooks/is-mobile.svelte.d.ts +0 -4
  434. package/dist/hooks/is-mobile.svelte.js +0 -7
  435. package/dist/services/index.d.ts +0 -9
  436. package/dist/services/index.js +0 -10
  437. package/dist/types/docs.d.ts +0 -67
  438. package/dist/types/docs.js +0 -1
  439. package/dist/utils.d.ts +0 -15
  440. package/dist/utils.js +0 -44
@@ -1,287 +1,143 @@
1
- /**
2
- * @fileoverview FirekitUser Store - Reactive user state management using Svelte 5 runes
3
- * @module FirekitUserStore
4
- * @version 1.0.0
5
- */
6
1
  import { onAuthStateChanged, updateProfile, updateEmail, updatePassword, reload, sendEmailVerification, getIdToken } from 'firebase/auth';
7
2
  import { doc, setDoc, getDoc, serverTimestamp } from 'firebase/firestore';
8
3
  import { firebaseService } from '../firebase.js';
9
4
  import { FirekitAuthError, AuthErrorCode } from '../types/auth.js';
10
5
  import { mapFirebaseUserToProfile, updateUserInFirestore, createAuthError, validateCurrentUser } from '../utils/index.js';
11
6
  /**
12
- * Reactive user store using Svelte 5 runes for state management.
13
- * Provides real-time authentication state and user profile management.
7
+ * Reactive user store the single source of truth for auth state.
8
+ * Uses Svelte 5 `$state` / `$derived` runes so all getters are reactive
9
+ * and can be read directly in components without subscriptions.
14
10
  *
15
- * @class FirekitUserStore
16
11
  * @example
17
- * ```typescript
18
12
  * import { firekitUser } from 'svelte-firekit';
19
13
  *
20
- * // Access reactive state
21
- * $: if (firekitUser.isAuthenticated) {
22
- * console.log("User:", firekitUser.user);
23
- * }
24
- *
25
- * // Update profile
26
- * await firekitUser.updateDisplayName("John Doe");
27
- *
28
- * // Get extended user data
29
- * const userData = await firekitUser.getExtendedUserData();
30
- * ```
14
+ * // In a .svelte file — reactive, no subscription needed
15
+ * {#if firekitUser.isAuthenticated}
16
+ * <p>Hello {firekitUser.displayName}</p>
17
+ * {/if}
31
18
  */
32
19
  class FirekitUserStore {
33
20
  static instance;
34
21
  auth = null;
35
22
  firestore = null;
36
- _servicesInitialized = false;
37
- // ========================================
38
- // REACTIVE STATE (Svelte 5 Runes)
39
- // ========================================
40
- /** Current user profile state */
23
+ // ── Reactive state ───────────────────────────────────────────────────────────
41
24
  _user = $state(null);
42
- /** Loading state indicator */
43
25
  _loading = $state(true);
44
- /** Authentication initialization state */
45
26
  _initialized = $state(false);
46
- /** Current error state */
47
27
  _error = $state(null);
48
- // ========================================
49
- // DERIVED STATE
50
- // ========================================
51
- /** Derived: Whether user is authenticated (not anonymous) */
28
+ // ── Derived ──────────────────────────────────────────────────────────────────
52
29
  _isAuthenticated = $derived(this._user !== null && !this._user.isAnonymous);
53
- /** Derived: Whether user is anonymous */
54
30
  _isAnonymous = $derived(this._user?.isAnonymous ?? false);
55
- /** Derived: Whether user's email is verified */
56
31
  _isEmailVerified = $derived(this._user?.emailVerified ?? false);
57
- /** Derived: User's primary email address */
58
- _userEmail = $derived(this._user?.email ?? null);
59
- /** Derived: User's display name */
60
- _userDisplayName = $derived(this._user?.displayName ?? null);
61
- /** Derived: User's photo URL */
62
- _userPhotoURL = $derived(this._user?.photoURL ?? null);
63
- /** Derived: User's unique ID */
64
- _userId = $derived(this._user?.uid ?? null);
65
- /** Derived: User's phone number */
66
- _userPhoneNumber = $derived(this._user?.phoneNumber ?? null);
32
+ _email = $derived(this._user?.email ?? null);
33
+ _displayName = $derived(this._user?.displayName ?? null);
34
+ _photoURL = $derived(this._user?.photoURL ?? null);
35
+ _uid = $derived(this._user?.uid ?? null);
36
+ _phoneNumber = $derived(this._user?.phoneNumber ?? null);
67
37
  constructor() {
68
38
  if (typeof window !== 'undefined') {
69
- // Initialize Firebase services immediately like the old working code
70
- this.initializeServices();
39
+ this.bootstrap();
71
40
  }
72
41
  }
73
- /**
74
- * Gets singleton instance of FirekitUserStore
75
- * @returns {FirekitUserStore} The FirekitUserStore instance
76
- */
77
42
  static getInstance() {
78
43
  if (!FirekitUserStore.instance) {
79
44
  FirekitUserStore.instance = new FirekitUserStore();
80
45
  }
81
46
  return FirekitUserStore.instance;
82
47
  }
83
- /**
84
- * Initializes Firebase services and auth state listener
85
- * @private
86
- */
87
- initializeServices() {
88
- if (this._servicesInitialized)
89
- return;
48
+ bootstrap() {
90
49
  try {
91
50
  this.auth = firebaseService.getAuthInstance();
92
- this.firestore = firebaseService.getDbInstance();
93
- this._servicesInitialized = true;
94
- this.initializeAuthStateListener();
51
+ try {
52
+ this.firestore = firebaseService.getDbInstance();
53
+ }
54
+ catch {
55
+ this.firestore = null;
56
+ }
57
+ this.listenToAuthState();
95
58
  }
96
- catch (error) {
97
- console.error('Failed to initialize Firebase services:', error);
98
- this._error = error instanceof Error ? error : new Error(String(error));
59
+ catch (err) {
60
+ this._error = err instanceof Error ? err : new Error(String(err));
99
61
  this._loading = false;
100
62
  this._initialized = true;
101
63
  }
102
64
  }
103
- /**
104
- * Initializes the authentication state listener
105
- * @private
106
- */
107
- initializeAuthStateListener() {
108
- if (!this.auth) {
109
- console.error('Auth instance not available');
65
+ listenToAuthState() {
66
+ if (!this.auth)
110
67
  return;
111
- }
112
68
  onAuthStateChanged(this.auth, (firebaseUser) => {
113
- this._user = firebaseUser ? this.mapFirebaseUserToProfile(firebaseUser) : null;
69
+ this._user = firebaseUser ? mapFirebaseUserToProfile(firebaseUser) : null;
114
70
  this._loading = false;
115
71
  this._initialized = true;
116
72
  this._error = null;
117
- }, (error) => {
118
- console.error('Auth state change error:', error);
119
- this._error = error;
73
+ }, (err) => {
74
+ this._error = err;
120
75
  this._loading = false;
121
76
  this._initialized = true;
122
77
  });
123
78
  }
124
- /**
125
- * Maps Firebase User to UserProfile interface
126
- * @private
127
- */
128
- mapFirebaseUserToProfile(user) {
129
- return mapFirebaseUserToProfile(user);
130
- }
131
- /**
132
- * Updates user data in Firestore
133
- * @private
134
- */
135
- async updateUserInFirestore(user) {
136
- if (!this.firestore) {
137
- throw new Error('Firestore instance not available');
138
- }
79
+ async syncToFirestore(user) {
80
+ if (!this.firestore)
81
+ return;
139
82
  await updateUserInFirestore(this.firestore, user);
140
83
  }
141
- // ========================================
142
- // PUBLIC GETTERS (Reactive State)
143
- // ========================================
144
- /** Current user profile */
145
- get user() {
146
- return this._user;
147
- }
148
- /** Current loading state */
149
- get loading() {
150
- return this._loading;
151
- }
152
- /** Whether auth has been initialized */
153
- get initialized() {
154
- return this._initialized;
155
- }
156
- /** Current error state */
157
- get error() {
158
- return this._error;
159
- }
160
- /** Whether user is authenticated (not anonymous) */
161
- get isAuthenticated() {
162
- return this._isAuthenticated;
163
- }
164
- /** Whether user is anonymous */
165
- get isAnonymous() {
166
- return this._isAnonymous;
167
- }
168
- /** Whether user's email is verified */
169
- get isEmailVerified() {
170
- return this._isEmailVerified;
171
- }
172
- /** User's email address */
173
- get email() {
174
- return this._userEmail;
175
- }
176
- /** User's display name */
177
- get displayName() {
178
- return this._userDisplayName;
179
- }
180
- /** User's photo URL */
181
- get photoURL() {
182
- return this._userPhotoURL;
183
- }
184
- /** User's unique ID */
185
- get uid() {
186
- return this._userId;
187
- }
188
- /** User's phone number */
189
- get phoneNumber() {
190
- return this._userPhoneNumber;
191
- }
192
- // ========================================
193
- // PROFILE UPDATE METHODS
194
- // ========================================
195
- /**
196
- * Updates user's display name
197
- * @param {string} displayName New display name
198
- * @returns {Promise<void>} Promise that resolves when update completes
199
- * @throws {FirekitAuthError} If update fails
200
- *
201
- * @example
202
- * ```typescript
203
- * await firekitUser.updateDisplayName("John Doe");
204
- * ```
205
- */
84
+ currentFirebaseUser() {
85
+ return validateCurrentUser(this.auth);
86
+ }
87
+ // ── Public getters (reactive) ────────────────────────────────────────────────
88
+ get user() { return this._user; }
89
+ get loading() { return this._loading; }
90
+ get initialized() { return this._initialized; }
91
+ get error() { return this._error; }
92
+ get isAuthenticated() { return this._isAuthenticated; }
93
+ get isAnonymous() { return this._isAnonymous; }
94
+ get isEmailVerified() { return this._isEmailVerified; }
95
+ get email() { return this._email; }
96
+ get displayName() { return this._displayName; }
97
+ get photoURL() { return this._photoURL; }
98
+ get uid() { return this._uid; }
99
+ get phoneNumber() { return this._phoneNumber; }
100
+ // ── Profile updates ──────────────────────────────────────────────────────────
206
101
  async updateDisplayName(displayName) {
207
- if (!this.auth) {
208
- throw new Error('Auth instance not available');
209
- }
210
- const currentUser = validateCurrentUser(this.auth);
102
+ const user = this.currentFirebaseUser();
211
103
  try {
212
104
  this._loading = true;
213
- await updateProfile(currentUser, { displayName });
214
- await this.updateUserInFirestore(currentUser);
215
- // Update local state
216
- if (this._user) {
105
+ await updateProfile(user, { displayName });
106
+ await this.syncToFirestore(user);
107
+ if (this._user)
217
108
  this._user = { ...this._user, displayName };
218
- }
219
109
  }
220
- catch (error) {
221
- this._error = error;
222
- throw createAuthError(error, 'update display name');
110
+ catch (err) {
111
+ this._error = err instanceof Error ? err : new Error(String(err));
112
+ throw createAuthError(err, 'update display name');
223
113
  }
224
114
  finally {
225
115
  this._loading = false;
226
116
  }
227
117
  }
228
- /**
229
- * Updates user's photo URL
230
- * @param {string} photoURL New photo URL
231
- * @returns {Promise<void>} Promise that resolves when update completes
232
- * @throws {FirekitAuthError} If update fails
233
- *
234
- * @example
235
- * ```typescript
236
- * await firekitUser.updatePhotoURL("https://example.com/photo.jpg");
237
- * ```
238
- */
239
118
  async updatePhotoURL(photoURL) {
240
- if (!this.auth) {
241
- throw new Error('Auth instance not available');
242
- }
243
- const currentUser = validateCurrentUser(this.auth);
119
+ const user = this.currentFirebaseUser();
244
120
  try {
245
121
  this._loading = true;
246
- await updateProfile(currentUser, { photoURL });
247
- await this.updateUserInFirestore(currentUser);
248
- // Update local state
249
- if (this._user) {
122
+ await updateProfile(user, { photoURL });
123
+ await this.syncToFirestore(user);
124
+ if (this._user)
250
125
  this._user = { ...this._user, photoURL };
251
- }
252
126
  }
253
- catch (error) {
254
- this._error = error;
255
- throw createAuthError(error, 'update photo URL');
127
+ catch (err) {
128
+ this._error = err instanceof Error ? err : new Error(String(err));
129
+ throw createAuthError(err, 'update photo URL');
256
130
  }
257
131
  finally {
258
132
  this._loading = false;
259
133
  }
260
134
  }
261
- /**
262
- * Updates user's profile data
263
- * @param {UserProfileUpdateData} profileData Profile data to update
264
- * @returns {Promise<void>} Promise that resolves when update completes
265
- * @throws {FirekitAuthError} If update fails
266
- *
267
- * @example
268
- * ```typescript
269
- * await firekitUser.updateProfile({
270
- * displayName: "John Smith",
271
- * photoURL: "https://example.com/new-photo.jpg"
272
- * });
273
- * ```
274
- */
275
135
  async updateProfile(profileData) {
276
- if (!this.auth) {
277
- throw new Error('Auth instance not available');
278
- }
279
- const currentUser = validateCurrentUser(this.auth);
136
+ const user = this.currentFirebaseUser();
280
137
  try {
281
138
  this._loading = true;
282
- await updateProfile(currentUser, profileData);
283
- await this.updateUserInFirestore(currentUser);
284
- // Update local state
139
+ await updateProfile(user, profileData);
140
+ await this.syncToFirestore(user);
285
141
  if (this._user) {
286
142
  this._user = {
287
143
  ...this._user,
@@ -290,299 +146,133 @@ class FirekitUserStore {
290
146
  };
291
147
  }
292
148
  }
293
- catch (error) {
294
- this._error = error;
295
- throw createAuthError(error, 'update profile');
149
+ catch (err) {
150
+ this._error = err instanceof Error ? err : new Error(String(err));
151
+ throw createAuthError(err, 'update profile');
296
152
  }
297
153
  finally {
298
154
  this._loading = false;
299
155
  }
300
156
  }
301
- /**
302
- * Updates user's email address
303
- * @param {string} newEmail New email address
304
- * @returns {Promise<void>} Promise that resolves when update completes
305
- * @throws {FirekitAuthError} If update fails
306
- *
307
- * @example
308
- * ```typescript
309
- * await firekitUser.updateEmail("newemail@example.com");
310
- * ```
311
- */
312
157
  async updateEmail(newEmail) {
313
- if (!this.auth) {
314
- throw new Error('Auth instance not available');
315
- }
316
- const currentUser = validateCurrentUser(this.auth);
158
+ const user = this.currentFirebaseUser();
317
159
  try {
318
160
  this._loading = true;
319
- await updateEmail(currentUser, newEmail);
320
- await this.updateUserInFirestore(currentUser);
321
- // Update local state
322
- if (this._user) {
161
+ await updateEmail(user, newEmail);
162
+ await this.syncToFirestore(user);
163
+ if (this._user)
323
164
  this._user = { ...this._user, email: newEmail, emailVerified: false };
324
- }
325
165
  }
326
- catch (error) {
327
- this._error = error;
328
- throw createAuthError(error, 'update email');
166
+ catch (err) {
167
+ this._error = err instanceof Error ? err : new Error(String(err));
168
+ throw createAuthError(err, 'update email');
329
169
  }
330
170
  finally {
331
171
  this._loading = false;
332
172
  }
333
173
  }
334
- /**
335
- * Updates user's password
336
- * @param {string} newPassword New password
337
- * @returns {Promise<void>} Promise that resolves when update completes
338
- * @throws {FirekitAuthError} If update fails
339
- *
340
- * @example
341
- * ```typescript
342
- * await firekitUser.updatePassword("newSecurePassword123");
343
- * ```
344
- */
345
174
  async updatePassword(newPassword) {
346
- if (!this.auth) {
347
- throw new Error('Auth instance not available');
348
- }
349
- const currentUser = validateCurrentUser(this.auth);
175
+ const user = this.currentFirebaseUser();
350
176
  try {
351
177
  this._loading = true;
352
- await updatePassword(currentUser, newPassword);
178
+ await updatePassword(user, newPassword);
353
179
  }
354
- catch (error) {
355
- this._error = error;
356
- throw createAuthError(error, 'update password');
180
+ catch (err) {
181
+ this._error = err instanceof Error ? err : new Error(String(err));
182
+ throw createAuthError(err, 'update password');
357
183
  }
358
184
  finally {
359
185
  this._loading = false;
360
186
  }
361
187
  }
362
- // ========================================
363
- // EMAIL VERIFICATION METHODS
364
- // ========================================
365
- /**
366
- * Sends email verification to current user
367
- * @returns {Promise<void>} Promise that resolves when verification email is sent
368
- * @throws {FirekitAuthError} If sending fails
369
- *
370
- * @example
371
- * ```typescript
372
- * await firekitUser.sendEmailVerification();
373
- * ```
374
- */
188
+ // ── Email verification ───────────────────────────────────────────────────────
375
189
  async sendEmailVerification() {
376
- if (!this.auth) {
377
- throw new Error('Auth instance not available');
378
- }
379
- const currentUser = validateCurrentUser(this.auth);
190
+ const user = this.currentFirebaseUser();
380
191
  try {
381
- await sendEmailVerification(currentUser);
192
+ await sendEmailVerification(user);
382
193
  }
383
- catch (error) {
384
- this._error = error;
385
- throw createAuthError(error, 'send email verification');
194
+ catch (err) {
195
+ this._error = err instanceof Error ? err : new Error(String(err));
196
+ throw createAuthError(err, 'send email verification');
386
197
  }
387
198
  }
388
- /**
389
- * Reloads user to get updated email verification status
390
- * @returns {Promise<void>} Promise that resolves when user is reloaded
391
- * @throws {FirekitAuthError} If reload fails
392
- *
393
- * @example
394
- * ```typescript
395
- * await firekitUser.reloadUser();
396
- * ```
397
- */
398
199
  async reloadUser() {
399
- if (!this.auth) {
400
- throw new Error('Auth instance not available');
401
- }
402
- const currentUser = validateCurrentUser(this.auth);
200
+ const user = this.currentFirebaseUser();
403
201
  try {
404
202
  this._loading = true;
405
- await reload(currentUser);
406
- await this.updateUserInFirestore(currentUser);
407
- // Update local state with reloaded data
408
- this._user = this.mapFirebaseUserToProfile(currentUser);
203
+ await reload(user);
204
+ await this.syncToFirestore(user);
205
+ this._user = mapFirebaseUserToProfile(user);
409
206
  }
410
- catch (error) {
411
- this._error = error;
412
- throw createAuthError(error, 'reload user');
207
+ catch (err) {
208
+ this._error = err instanceof Error ? err : new Error(String(err));
209
+ throw createAuthError(err, 'reload user');
413
210
  }
414
211
  finally {
415
212
  this._loading = false;
416
213
  }
417
214
  }
418
- // ========================================
419
- // TOKEN METHODS
420
- // ========================================
421
- /**
422
- * Gets the current user's ID token
423
- * @param {boolean} [forceRefresh=false] Whether to force token refresh
424
- * @returns {Promise<string>} Promise resolving to ID token
425
- * @throws {FirekitAuthError} If getting token fails
426
- *
427
- * @example
428
- * ```typescript
429
- * const token = await firekitUser.getIdToken();
430
- * ```
431
- */
215
+ // ── Token ────────────────────────────────────────────────────────────────────
432
216
  async getIdToken(forceRefresh = false) {
433
- if (!this.auth) {
434
- throw new Error('Auth instance not available');
435
- }
436
- const currentUser = validateCurrentUser(this.auth);
217
+ const user = this.currentFirebaseUser();
437
218
  try {
438
- return await getIdToken(currentUser, forceRefresh);
219
+ return await getIdToken(user, forceRefresh);
439
220
  }
440
- catch (error) {
441
- this._error = error;
442
- throw createAuthError(error, 'get ID token');
221
+ catch (err) {
222
+ this._error = err instanceof Error ? err : new Error(String(err));
223
+ throw createAuthError(err, 'get ID token');
443
224
  }
444
225
  }
445
- // ========================================
446
- // FIRESTORE EXTENDED DATA METHODS
447
- // ========================================
448
- /**
449
- * Gets extended user data from Firestore
450
- * @returns {Promise<ExtendedUserData | null>} Promise resolving to extended user data
451
- *
452
- * @example
453
- * ```typescript
454
- * const userData = await firekitUser.getExtendedUserData();
455
- * console.log(userData?.preferences);
456
- * ```
457
- */
458
- async getExtendedUserData() {
459
- if (!this._user?.uid || !this.firestore) {
226
+ // ── Extended Firestore data ──────────────────────────────────────────────────
227
+ async getExtendedData() {
228
+ if (!this._user?.uid || !this.firestore)
460
229
  return null;
461
- }
462
230
  try {
463
- const userRef = doc(this.firestore, 'users', this._user.uid);
464
- const userDoc = await getDoc(userRef);
465
- if (userDoc.exists()) {
466
- return userDoc.data();
467
- }
468
- return null;
231
+ const snap = await getDoc(doc(this.firestore, 'users', this._user.uid));
232
+ return snap.exists() ? snap.data() : null;
469
233
  }
470
- catch (error) {
471
- console.error('Failed to get extended user data:', error);
472
- this._error = error;
234
+ catch {
473
235
  return null;
474
236
  }
475
237
  }
476
- /**
477
- * Updates extended user data in Firestore
478
- * @param {Partial<ExtendedUserData>} data Data to update
479
- * @returns {Promise<void>} Promise that resolves when update completes
480
- *
481
- * @example
482
- * ```typescript
483
- * await firekitUser.updateExtendedUserData({
484
- * preferences: { theme: 'dark', language: 'en' },
485
- * settings: { notifications: true }
486
- * });
487
- * ```
488
- */
489
- async updateExtendedUserData(data) {
238
+ async updateExtendedData(data) {
490
239
  if (!this._user?.uid) {
491
240
  throw new FirekitAuthError(AuthErrorCode.USER_NOT_FOUND, 'No authenticated user found.');
492
241
  }
493
242
  if (!this.firestore) {
494
- throw new Error('Firestore instance not available');
243
+ throw new Error('Firestore instance not available.');
495
244
  }
496
245
  try {
497
- const userRef = doc(this.firestore, 'users', this._user.uid);
498
- await setDoc(userRef, {
499
- ...data,
500
- updatedAt: serverTimestamp()
501
- }, { merge: true });
246
+ await setDoc(doc(this.firestore, 'users', this._user.uid), { ...data, updatedAt: serverTimestamp() }, { merge: true });
502
247
  }
503
- catch (error) {
504
- this._error = error;
505
- throw createAuthError(error, 'update user data');
248
+ catch (err) {
249
+ this._error = err instanceof Error ? err : new Error(String(err));
250
+ throw createAuthError(err, 'update user data');
506
251
  }
507
252
  }
508
- // ========================================
509
- // UTILITY METHODS
510
- // ========================================
253
+ // ── Utility ──────────────────────────────────────────────────────────────────
511
254
  /**
512
- * Waits for authentication to initialize
513
- * @returns {Promise<UserProfile | null>} Promise that resolves when auth is initialized
514
- *
515
- * @example
516
- * ```typescript
517
- * const user = await firekitUser.waitForAuth();
518
- * if (user) {
519
- * console.log("User is authenticated");
520
- * }
521
- * ```
255
+ * Resolves once Firebase Auth has initialized (first `onAuthStateChanged` callback).
256
+ * Safe to call server-side will resolve immediately with null.
522
257
  */
523
- async waitForAuth() {
258
+ waitForAuth() {
259
+ if (this._initialized)
260
+ return Promise.resolve(this._user);
261
+ // $effect.root creates a reactive scope outside of component initialization,
262
+ // so this works safely whether called inside or outside a Svelte component.
524
263
  return new Promise((resolve) => {
525
- if (this._initialized) {
526
- resolve(this._user);
527
- return;
528
- }
529
- // Create a one-time watcher
530
- const checkInitialized = () => {
531
- if (this._initialized) {
532
- resolve(this._user);
533
- }
534
- else {
535
- // Check again in next tick
536
- setTimeout(checkInitialized, 10);
537
- }
538
- };
539
- checkInitialized();
264
+ const stop = $effect.root(() => {
265
+ $effect(() => {
266
+ if (this._initialized) {
267
+ stop();
268
+ resolve(this._user);
269
+ }
270
+ });
271
+ });
540
272
  });
541
273
  }
542
- /**
543
- * Clears any error state
544
- */
545
274
  clearError() {
546
275
  this._error = null;
547
276
  }
548
- /**
549
- * Manually sets loading state (use with caution)
550
- * @param {boolean} loading Loading state
551
- */
552
- setLoading(loading) {
553
- this._loading = loading;
554
- }
555
- /**
556
- * Resets the store to initial state
557
- */
558
- reset() {
559
- this._user = null;
560
- this._loading = true;
561
- this._initialized = false;
562
- this._error = null;
563
- this._servicesInitialized = false;
564
- this.auth = null;
565
- this.firestore = null;
566
- }
567
277
  }
568
- /**
569
- * Pre-initialized singleton instance of FirekitUserStore.
570
- * Provides reactive user state management for Svelte applications.
571
- *
572
- * @example
573
- * ```typescript
574
- * import { firekitUser } from 'svelte-firekit';
575
- *
576
- * // In a Svelte component
577
- * $: if (firekitUser.isAuthenticated) {
578
- * console.log("Welcome:", firekitUser.displayName);
579
- * }
580
- *
581
- * // Update profile
582
- * await firekitUser.updateDisplayName("John Doe");
583
- *
584
- * // Get extended data
585
- * const userData = await firekitUser.getExtendedUserData();
586
- * ```
587
- */
588
278
  export const firekitUser = FirekitUserStore.getInstance();