@mesob/auth-react 0.4.0 → 0.4.2

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 (371) hide show
  1. package/dist/chunk-35TCGAW3.js +98 -0
  2. package/dist/chunk-35TCGAW3.js.map +1 -0
  3. package/dist/chunk-3BZC4VVD.js +36 -0
  4. package/dist/chunk-3BZC4VVD.js.map +1 -0
  5. package/dist/chunk-45UCLKH2.js +188 -0
  6. package/dist/chunk-45UCLKH2.js.map +1 -0
  7. package/dist/chunk-55BMNC4S.js +115 -0
  8. package/dist/chunk-55BMNC4S.js.map +1 -0
  9. package/dist/chunk-5F5FZMHE.js +94 -0
  10. package/dist/chunk-5F5FZMHE.js.map +1 -0
  11. package/dist/chunk-5M7I7WNH.js +31 -0
  12. package/dist/chunk-5M7I7WNH.js.map +1 -0
  13. package/dist/chunk-72YRO3A7.js +288 -0
  14. package/dist/chunk-72YRO3A7.js.map +1 -0
  15. package/dist/chunk-7KXTL6NT.js +48 -0
  16. package/dist/chunk-7KXTL6NT.js.map +1 -0
  17. package/dist/chunk-AIMD6R6U.js +466 -0
  18. package/dist/chunk-AIMD6R6U.js.map +1 -0
  19. package/dist/chunk-BGSHXIHI.js +953 -0
  20. package/dist/chunk-BGSHXIHI.js.map +1 -0
  21. package/dist/chunk-BZ42QPXE.js +271 -0
  22. package/dist/chunk-BZ42QPXE.js.map +1 -0
  23. package/dist/chunk-C26NPUPI.js +272 -0
  24. package/dist/chunk-C26NPUPI.js.map +1 -0
  25. package/dist/chunk-C2KFZ57H.js +194 -0
  26. package/dist/chunk-C2KFZ57H.js.map +1 -0
  27. package/dist/chunk-C5ZW7FD2.js +46 -0
  28. package/dist/chunk-C5ZW7FD2.js.map +1 -0
  29. package/dist/chunk-DPH2PHK3.js +32 -0
  30. package/dist/chunk-DPH2PHK3.js.map +1 -0
  31. package/dist/chunk-EQ4346FE.js +139 -0
  32. package/dist/chunk-EQ4346FE.js.map +1 -0
  33. package/dist/chunk-FAHN63DA.js +535 -0
  34. package/dist/chunk-FAHN63DA.js.map +1 -0
  35. package/dist/chunk-FFR5UHTS.js +99 -0
  36. package/dist/chunk-FFR5UHTS.js.map +1 -0
  37. package/dist/chunk-FHOLUOOZ.js +164 -0
  38. package/dist/chunk-FHOLUOOZ.js.map +1 -0
  39. package/dist/chunk-G2AW2H36.js +11 -0
  40. package/dist/chunk-G2AW2H36.js.map +1 -0
  41. package/dist/chunk-G7SCXCCM.js +89 -0
  42. package/dist/chunk-G7SCXCCM.js.map +1 -0
  43. package/dist/chunk-GP7GIUI3.js +64 -0
  44. package/dist/chunk-GP7GIUI3.js.map +1 -0
  45. package/dist/chunk-GRT6EBR6.js +93 -0
  46. package/dist/chunk-GRT6EBR6.js.map +1 -0
  47. package/dist/chunk-GXKBVCVS.js +102 -0
  48. package/dist/chunk-GXKBVCVS.js.map +1 -0
  49. package/dist/chunk-HB2RZTHS.js +338 -0
  50. package/dist/chunk-HB2RZTHS.js.map +1 -0
  51. package/dist/chunk-HOO2VLNM.js +305 -0
  52. package/dist/chunk-HOO2VLNM.js.map +1 -0
  53. package/dist/chunk-II5MLBSB.js +183 -0
  54. package/dist/chunk-II5MLBSB.js.map +1 -0
  55. package/dist/chunk-ISNNPMF7.js +95 -0
  56. package/dist/chunk-ISNNPMF7.js.map +1 -0
  57. package/dist/chunk-JB6XVST4.js +141 -0
  58. package/dist/chunk-JB6XVST4.js.map +1 -0
  59. package/dist/chunk-JUHBVG5Q.js +303 -0
  60. package/dist/chunk-JUHBVG5Q.js.map +1 -0
  61. package/dist/chunk-JZZJCBAE.js +118 -0
  62. package/dist/chunk-JZZJCBAE.js.map +1 -0
  63. package/dist/chunk-KWG4DSB5.js +55 -0
  64. package/dist/chunk-KWG4DSB5.js.map +1 -0
  65. package/dist/chunk-L4CGIO2I.js +265 -0
  66. package/dist/chunk-L4CGIO2I.js.map +1 -0
  67. package/dist/chunk-LNG736CV.js +19 -0
  68. package/dist/chunk-LNG736CV.js.map +1 -0
  69. package/dist/chunk-LSYKVFJA.js +98 -0
  70. package/dist/chunk-LSYKVFJA.js.map +1 -0
  71. package/dist/chunk-LZR4YUDV.js +107 -0
  72. package/dist/chunk-LZR4YUDV.js.map +1 -0
  73. package/dist/chunk-MELNS4QH.js +255 -0
  74. package/dist/chunk-MELNS4QH.js.map +1 -0
  75. package/dist/chunk-MS2JUZ3N.js +94 -0
  76. package/dist/chunk-MS2JUZ3N.js.map +1 -0
  77. package/dist/chunk-NEO72TMH.js +32 -0
  78. package/dist/chunk-NEO72TMH.js.map +1 -0
  79. package/dist/chunk-NJPNTAAT.js +68 -0
  80. package/dist/chunk-NJPNTAAT.js.map +1 -0
  81. package/dist/chunk-NPW7D2HZ.js +16 -0
  82. package/dist/chunk-NPW7D2HZ.js.map +1 -0
  83. package/dist/chunk-OAN4EXU4.js +310 -0
  84. package/dist/chunk-OAN4EXU4.js.map +1 -0
  85. package/dist/chunk-OFLSINVU.js +138 -0
  86. package/dist/chunk-OFLSINVU.js.map +1 -0
  87. package/dist/chunk-OHIIMUQC.js +286 -0
  88. package/dist/chunk-OHIIMUQC.js.map +1 -0
  89. package/dist/chunk-OQGJX37L.js +239 -0
  90. package/dist/chunk-OQGJX37L.js.map +1 -0
  91. package/dist/chunk-OYHH7HQG.js +65 -0
  92. package/dist/chunk-OYHH7HQG.js.map +1 -0
  93. package/dist/chunk-PSRIZMWJ.js +486 -0
  94. package/dist/chunk-PSRIZMWJ.js.map +1 -0
  95. package/dist/chunk-QNCE2B5O.js +23 -0
  96. package/dist/chunk-QNCE2B5O.js.map +1 -0
  97. package/dist/chunk-RLPZFLAS.js +23 -0
  98. package/dist/chunk-RLPZFLAS.js.map +1 -0
  99. package/dist/chunk-RT5C7IAE.js +38 -0
  100. package/dist/chunk-RT5C7IAE.js.map +1 -0
  101. package/dist/chunk-S3CXCCKL.js +272 -0
  102. package/dist/chunk-S3CXCCKL.js.map +1 -0
  103. package/dist/chunk-SOCZK4CV.js +69 -0
  104. package/dist/chunk-SOCZK4CV.js.map +1 -0
  105. package/dist/chunk-T6P7UHVP.js +34 -0
  106. package/dist/chunk-T6P7UHVP.js.map +1 -0
  107. package/dist/chunk-TFVBER3Y.js +52 -0
  108. package/dist/chunk-TFVBER3Y.js.map +1 -0
  109. package/dist/chunk-UXOZ2TME.js +104 -0
  110. package/dist/chunk-UXOZ2TME.js.map +1 -0
  111. package/dist/chunk-V2W3WPCZ.js +22 -0
  112. package/dist/chunk-V2W3WPCZ.js.map +1 -0
  113. package/dist/chunk-YZ264S2L.js +286 -0
  114. package/dist/chunk-YZ264S2L.js.map +1 -0
  115. package/dist/chunk-ZESFGO3K.js +28 -0
  116. package/dist/chunk-ZESFGO3K.js.map +1 -0
  117. package/dist/chunk-ZG6WFZHX.js +143 -0
  118. package/dist/chunk-ZG6WFZHX.js.map +1 -0
  119. package/dist/components/auth/auth-card.d.ts +3 -6
  120. package/dist/components/auth/auth-card.js +3 -7
  121. package/dist/components/auth/auth-card.js.map +1 -1
  122. package/dist/components/auth/auth-layout.d.ts +3 -6
  123. package/dist/components/auth/auth-layout.js +3 -28
  124. package/dist/components/auth/auth-layout.js.map +1 -1
  125. package/dist/components/auth/countdown.d.ts +2 -5
  126. package/dist/components/auth/countdown.js +5 -130
  127. package/dist/components/auth/countdown.js.map +1 -1
  128. package/dist/components/auth/forgot-password.d.ts +1 -5
  129. package/dist/components/auth/forgot-password.js +6 -365
  130. package/dist/components/auth/forgot-password.js.map +1 -1
  131. package/dist/components/auth/reset-password-form.d.ts +2 -5
  132. package/dist/components/auth/reset-password-form.js +6 -487
  133. package/dist/components/auth/reset-password-form.js.map +1 -1
  134. package/dist/components/auth/set-password.d.ts +2 -5
  135. package/dist/components/auth/set-password.js +7 -521
  136. package/dist/components/auth/set-password.js.map +1 -1
  137. package/dist/components/auth/sign-in.d.ts +2 -5
  138. package/dist/components/auth/sign-in.js +7 -561
  139. package/dist/components/auth/sign-in.js.map +1 -1
  140. package/dist/components/auth/sign-up.d.ts +2 -5
  141. package/dist/components/auth/sign-up.js +6 -511
  142. package/dist/components/auth/sign-up.js.map +1 -1
  143. package/dist/components/auth/verification-form.d.ts +13 -2
  144. package/dist/components/auth/verification-form.js +5 -217
  145. package/dist/components/auth/verification-form.js.map +1 -1
  146. package/dist/components/auth/verify-email.d.ts +2 -5
  147. package/dist/components/auth/verify-email.js +8 -527
  148. package/dist/components/auth/verify-email.js.map +1 -1
  149. package/dist/components/auth/verify-phone.d.ts +2 -5
  150. package/dist/components/auth/verify-phone.js +8 -532
  151. package/dist/components/auth/verify-phone.js.map +1 -1
  152. package/dist/components/authorization/deny.d.ts +3 -6
  153. package/dist/components/authorization/deny.js +4 -47
  154. package/dist/components/authorization/deny.js.map +1 -1
  155. package/dist/components/authorization/grant.d.ts +3 -6
  156. package/dist/components/authorization/grant.js +4 -52
  157. package/dist/components/authorization/grant.js.map +1 -1
  158. package/dist/components/error-boundary.d.ts +6 -10
  159. package/dist/components/error-boundary.js +4 -43
  160. package/dist/components/error-boundary.js.map +1 -1
  161. package/dist/components/iam/permission-selector.d.ts +3 -6
  162. package/dist/components/iam/permission-selector.js +3 -116
  163. package/dist/components/iam/permission-selector.js.map +1 -1
  164. package/dist/components/iam/permissions-page.d.ts +1 -0
  165. package/dist/components/iam/permissions-page.js +10 -0
  166. package/dist/components/iam/permissions-page.js.map +1 -0
  167. package/dist/components/iam/permissions.d.ts +1 -5
  168. package/dist/components/iam/permissions.js +5 -198
  169. package/dist/components/iam/permissions.js.map +1 -1
  170. package/dist/components/iam/role-detail-layout.d.ts +3 -6
  171. package/dist/components/iam/role-detail-layout.js +3 -131
  172. package/dist/components/iam/role-detail-layout.js.map +1 -1
  173. package/dist/components/iam/role-detail-page.d.ts +2 -5
  174. package/dist/components/iam/role-detail-page.js +3 -223
  175. package/dist/components/iam/role-detail-page.js.map +1 -1
  176. package/dist/components/iam/role-permissions-page.d.ts +2 -5
  177. package/dist/components/iam/role-permissions-page.js +4 -391
  178. package/dist/components/iam/role-permissions-page.js.map +1 -1
  179. package/dist/components/iam/roles-page.d.ts +1 -0
  180. package/dist/components/iam/roles-page.js +13 -0
  181. package/dist/components/iam/roles-page.js.map +1 -0
  182. package/dist/components/iam/roles.d.ts +1 -5
  183. package/dist/components/iam/roles.js +5 -218
  184. package/dist/components/iam/roles.js.map +1 -1
  185. package/dist/components/iam/sessions-page.d.ts +1 -0
  186. package/dist/components/iam/sessions-page.js +12 -0
  187. package/dist/components/iam/sessions-page.js.map +1 -0
  188. package/dist/components/iam/sessions.d.ts +1 -5
  189. package/dist/components/iam/sessions.js +5 -198
  190. package/dist/components/iam/sessions.js.map +1 -1
  191. package/dist/components/iam/tenants-page.d.ts +1 -0
  192. package/dist/components/iam/tenants-page.js +13 -0
  193. package/dist/components/iam/tenants-page.js.map +1 -0
  194. package/dist/components/iam/tenants.d.ts +1 -5
  195. package/dist/components/iam/tenants.js +5 -204
  196. package/dist/components/iam/tenants.js.map +1 -1
  197. package/dist/components/iam/users-page.d.ts +1 -0
  198. package/dist/components/iam/users-page.js +13 -0
  199. package/dist/components/iam/users-page.js.map +1 -0
  200. package/dist/components/iam/users.d.ts +1 -5
  201. package/dist/components/iam/users.js +5 -207
  202. package/dist/components/iam/users.js.map +1 -1
  203. package/dist/components/profile/account.d.ts +1 -5
  204. package/dist/components/profile/account.js +4 -151
  205. package/dist/components/profile/account.js.map +1 -1
  206. package/dist/components/profile/change-email-form.d.ts +1 -5
  207. package/dist/components/profile/change-email-form.js +9 -735
  208. package/dist/components/profile/change-email-form.js.map +1 -1
  209. package/dist/components/profile/change-password-form.d.ts +1 -5
  210. package/dist/components/profile/change-password-form.js +3 -262
  211. package/dist/components/profile/change-password-form.js.map +1 -1
  212. package/dist/components/profile/change-phone-form.d.ts +1 -5
  213. package/dist/components/profile/change-phone-form.js +10 -772
  214. package/dist/components/profile/change-phone-form.js.map +1 -1
  215. package/dist/components/profile/change-profile.d.ts +3 -7
  216. package/dist/components/profile/change-profile.js +2 -40
  217. package/dist/components/profile/change-profile.js.map +1 -1
  218. package/dist/components/profile/otp-verification-modal.d.ts +2 -5
  219. package/dist/components/profile/otp-verification-modal.js +6 -266
  220. package/dist/components/profile/otp-verification-modal.js.map +1 -1
  221. package/dist/components/profile/profile-layout.d.ts +4 -0
  222. package/dist/components/profile/profile-layout.js +10 -0
  223. package/dist/components/profile/profile-layout.js.map +1 -0
  224. package/dist/components/profile/request-change-email-form.d.ts +2 -5
  225. package/dist/components/profile/request-change-email-form.js +4 -285
  226. package/dist/components/profile/request-change-email-form.js.map +1 -1
  227. package/dist/components/profile/request-change-phone-form.d.ts +2 -5
  228. package/dist/components/profile/request-change-phone-form.js +5 -323
  229. package/dist/components/profile/request-change-phone-form.js.map +1 -1
  230. package/dist/components/profile/security.d.ts +1 -5
  231. package/dist/components/profile/security.js +15 -1508
  232. package/dist/components/profile/security.js.map +1 -1
  233. package/dist/components/profile/verify-change-email-form.d.ts +2 -5
  234. package/dist/components/profile/verify-change-email-form.js +7 -407
  235. package/dist/components/profile/verify-change-email-form.js.map +1 -1
  236. package/dist/components/profile/verify-change-phone-form.d.ts +2 -5
  237. package/dist/components/profile/verify-change-phone-form.js +7 -411
  238. package/dist/components/profile/verify-change-phone-form.js.map +1 -1
  239. package/dist/components/shared/data-table.d.ts +5 -8
  240. package/dist/components/shared/data-table.js +3 -79
  241. package/dist/components/shared/data-table.js.map +1 -1
  242. package/dist/components/skeletons/auth-form-skeleton.d.ts +1 -5
  243. package/dist/components/skeletons/auth-form-skeleton.js +3 -27
  244. package/dist/components/skeletons/auth-form-skeleton.js.map +1 -1
  245. package/dist/components/skeletons/profile-skeleton.d.ts +1 -5
  246. package/dist/components/skeletons/profile-skeleton.js +3 -28
  247. package/dist/components/skeletons/profile-skeleton.js.map +1 -1
  248. package/dist/components/skeletons/table-skeleton.d.ts +2 -5
  249. package/dist/components/skeletons/table-skeleton.js +3 -34
  250. package/dist/components/skeletons/table-skeleton.js.map +1 -1
  251. package/dist/constants/auth.error.codes.d.ts +5 -0
  252. package/dist/hooks/use-session-cookie-name.d.ts +1 -0
  253. package/dist/hooks/use-translator.d.ts +1 -0
  254. package/dist/index.d.ts +50 -92
  255. package/dist/index.js +147 -4936
  256. package/dist/index.js.map +1 -1
  257. package/dist/lib/query-options.d.ts +10 -0
  258. package/dist/lib/translations.d.ts +3 -0
  259. package/dist/pages/auth/forgot-password.d.ts +3 -7
  260. package/dist/pages/auth/forgot-password.js +8 -770
  261. package/dist/pages/auth/forgot-password.js.map +1 -1
  262. package/dist/pages/auth/layout.d.ts +3 -7
  263. package/dist/pages/auth/layout.js +13 -536
  264. package/dist/pages/auth/layout.js.map +1 -1
  265. package/dist/pages/auth/reset-password.d.ts +4 -7
  266. package/dist/pages/auth/reset-password.js +8 -888
  267. package/dist/pages/auth/reset-password.js.map +1 -1
  268. package/dist/pages/auth/set-password.d.ts +4 -7
  269. package/dist/pages/auth/set-password.js +9 -927
  270. package/dist/pages/auth/set-password.js.map +1 -1
  271. package/dist/pages/auth/sign-in.d.ts +4 -7
  272. package/dist/pages/auth/sign-in.js +9 -967
  273. package/dist/pages/auth/sign-in.js.map +1 -1
  274. package/dist/pages/auth/sign-up.d.ts +4 -7
  275. package/dist/pages/auth/sign-up.js +8 -915
  276. package/dist/pages/auth/sign-up.js.map +1 -1
  277. package/dist/pages/auth/verify-email.d.ts +4 -7
  278. package/dist/pages/auth/verify-email.js +10 -922
  279. package/dist/pages/auth/verify-email.js.map +1 -1
  280. package/dist/pages/auth/verify-phone.d.ts +4 -7
  281. package/dist/pages/auth/verify-phone.js +10 -927
  282. package/dist/pages/auth/verify-phone.js.map +1 -1
  283. package/dist/pages/iam/permissions/_components/permission-card.d.ts +6 -0
  284. package/dist/pages/iam/permissions/_components/permissions-data.d.ts +7 -0
  285. package/dist/pages/iam/permissions/_components/permissions-list.d.ts +14 -0
  286. package/dist/pages/iam/permissions.d.ts +1 -5
  287. package/dist/pages/iam/permissions.js +4 -302
  288. package/dist/pages/iam/permissions.js.map +1 -1
  289. package/dist/pages/iam/role-detail-layout.d.ts +3 -6
  290. package/dist/pages/iam/role-detail-layout.js +5 -132
  291. package/dist/pages/iam/role-detail-layout.js.map +1 -1
  292. package/dist/pages/iam/role-detail.d.ts +4 -7
  293. package/dist/pages/iam/role-detail.js +5 -224
  294. package/dist/pages/iam/role-detail.js.map +1 -1
  295. package/dist/pages/iam/role-permissions.d.ts +4 -7
  296. package/dist/pages/iam/role-permissions.js +6 -392
  297. package/dist/pages/iam/role-permissions.js.map +1 -1
  298. package/dist/pages/iam/role-users.d.ts +4 -7
  299. package/dist/pages/iam/role-users.js +9 -808
  300. package/dist/pages/iam/role-users.js.map +1 -1
  301. package/dist/pages/iam/roles/_components/role-card.d.ts +7 -0
  302. package/dist/pages/iam/roles/_components/role-form.d.ts +9 -0
  303. package/dist/pages/iam/roles/_components/role-selector.d.ts +11 -0
  304. package/dist/pages/iam/roles/_components/roles-data.d.ts +16 -0
  305. package/dist/pages/iam/roles/_components/roles-list.d.ts +15 -0
  306. package/dist/pages/iam/roles/users/_components/role-users-page.d.ts +5 -0
  307. package/dist/pages/iam/roles.d.ts +1 -5
  308. package/dist/pages/iam/roles.js +7 -678
  309. package/dist/pages/iam/roles.js.map +1 -1
  310. package/dist/pages/iam/sessions/_components/session-card.d.ts +6 -0
  311. package/dist/pages/iam/sessions/_components/sessions-data.d.ts +7 -0
  312. package/dist/pages/iam/sessions/_components/sessions-list.d.ts +14 -0
  313. package/dist/pages/iam/sessions.d.ts +1 -5
  314. package/dist/pages/iam/sessions.js +6 -309
  315. package/dist/pages/iam/sessions.js.map +1 -1
  316. package/dist/pages/iam/shared/navigation.d.ts +8 -0
  317. package/dist/pages/iam/shared/page-helpers.d.ts +12 -0
  318. package/dist/pages/iam/tenant-detail.d.ts +2 -5
  319. package/dist/pages/iam/tenant-detail.js +6 -174
  320. package/dist/pages/iam/tenant-detail.js.map +1 -1
  321. package/dist/pages/iam/tenants/_components/tenant-card.d.ts +6 -0
  322. package/dist/pages/iam/tenants/_components/tenant-form.d.ts +9 -0
  323. package/dist/pages/iam/tenants/_components/tenant-selector.d.ts +13 -0
  324. package/dist/pages/iam/tenants/_components/tenants-data.d.ts +12 -0
  325. package/dist/pages/iam/tenants/_components/tenants-list.d.ts +15 -0
  326. package/dist/pages/iam/tenants/tenant-detail-page-content.d.ts +5 -0
  327. package/dist/pages/iam/tenants.d.ts +1 -5
  328. package/dist/pages/iam/tenants.js +7 -604
  329. package/dist/pages/iam/tenants.js.map +1 -1
  330. package/dist/pages/iam/user-activity.d.ts +2 -5
  331. package/dist/pages/iam/user-activity.js +9 -838
  332. package/dist/pages/iam/user-activity.js.map +1 -1
  333. package/dist/pages/iam/user-detail-layout.d.ts +3 -6
  334. package/dist/pages/iam/user-detail-layout.js +5 -93
  335. package/dist/pages/iam/user-detail-layout.js.map +1 -1
  336. package/dist/pages/iam/user-detail.d.ts +2 -5
  337. package/dist/pages/iam/user-detail.js +5 -92
  338. package/dist/pages/iam/user-detail.js.map +1 -1
  339. package/dist/pages/iam/users/_components/bulk-invite-user-form.d.ts +6 -0
  340. package/dist/pages/iam/users/_components/invite-user-form.d.ts +6 -0
  341. package/dist/pages/iam/users/_components/invite-user-shared.d.ts +25 -0
  342. package/dist/pages/iam/users/_components/user-card.d.ts +6 -0
  343. package/dist/pages/iam/users/_components/user-detail-layout-content.d.ts +6 -0
  344. package/dist/pages/iam/users/_components/user-detail-page-content.d.ts +5 -0
  345. package/dist/pages/iam/users/_components/user-form.d.ts +9 -0
  346. package/dist/pages/iam/users/_components/user-selector.d.ts +12 -0
  347. package/dist/pages/iam/users/_components/users-data.d.ts +22 -0
  348. package/dist/pages/iam/users/_components/users-list.d.ts +15 -0
  349. package/dist/pages/iam/users/activity/_components/role-section.d.ts +3 -0
  350. package/dist/pages/iam/users/activity/user-activity-page-content.d.ts +5 -0
  351. package/dist/pages/iam/users.d.ts +1 -5
  352. package/dist/pages/iam/users.js +7 -1269
  353. package/dist/pages/iam/users.js.map +1 -1
  354. package/dist/pages/profile/_components/profile-sidebar.d.ts +1 -0
  355. package/dist/pages/profile/account.d.ts +1 -5
  356. package/dist/pages/profile/account.js +9 -158
  357. package/dist/pages/profile/account.js.map +1 -1
  358. package/dist/pages/profile/layout.d.ts +1 -8
  359. package/dist/pages/profile/layout.js +5 -128
  360. package/dist/pages/profile/layout.js.map +1 -1
  361. package/dist/pages/profile/security.d.ts +1 -5
  362. package/dist/pages/profile/security.js +20 -1515
  363. package/dist/pages/profile/security.js.map +1 -1
  364. package/dist/provider.d.ts +53 -0
  365. package/dist/{types-g9QcNRxT.d.ts → types.d.ts} +33 -12
  366. package/dist/utils/cookie.d.ts +2 -0
  367. package/dist/utils/custom-fetch.d.ts +2 -0
  368. package/dist/utils/handle-error.d.ts +7 -0
  369. package/dist/utils/normalize-phone.d.ts +1 -0
  370. package/package.json +4 -4
  371. package/dist/verification-form-ipSRTtQB.d.ts +0 -22
@@ -0,0 +1,305 @@
1
+ import {
2
+ normalizePhone
3
+ } from "./chunk-V2W3WPCZ.js";
4
+ import {
5
+ handleError
6
+ } from "./chunk-55BMNC4S.js";
7
+ import {
8
+ AuthLayout
9
+ } from "./chunk-DPH2PHK3.js";
10
+ import {
11
+ useTranslator
12
+ } from "./chunk-QNCE2B5O.js";
13
+ import {
14
+ useApi,
15
+ useConfig
16
+ } from "./chunk-72YRO3A7.js";
17
+
18
+ // src/components/auth/set-password.tsx
19
+ import { zodResolver } from "@hookform/resolvers/zod";
20
+ import {
21
+ Alert,
22
+ AlertDescription,
23
+ AlertTitle,
24
+ Button,
25
+ Form,
26
+ FormControl,
27
+ FormField,
28
+ FormItem,
29
+ FormLabel,
30
+ FormMessage,
31
+ Input,
32
+ useFormField
33
+ } from "@mesob/ui/components";
34
+ import { useMesob } from "@mesob/ui/providers";
35
+ import { IconAlertCircle, IconEye, IconEyeOff } from "@tabler/icons-react";
36
+ import { useEffect, useEffectEvent, useState } from "react";
37
+ import { useForm } from "react-hook-form";
38
+ import { toast } from "sonner";
39
+ import { z } from "zod";
40
+ import { jsx, jsxs } from "react/jsx-runtime";
41
+ function PasswordInput({ field, show, onToggle }) {
42
+ const { formItemId, error } = useFormField();
43
+ return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
44
+ /* @__PURE__ */ jsx(
45
+ Input,
46
+ {
47
+ ...field,
48
+ id: formItemId,
49
+ type: show ? "text" : "password",
50
+ "aria-invalid": !!error,
51
+ className: "pr-10"
52
+ }
53
+ ),
54
+ /* @__PURE__ */ jsx(
55
+ Button,
56
+ {
57
+ type: "button",
58
+ variant: "ghost",
59
+ size: "icon",
60
+ className: "absolute right-0 top-0 h-full px-3 text-muted-foreground hover:text-foreground",
61
+ onClick: onToggle,
62
+ "aria-label": show ? "Hide password" : "Show password",
63
+ children: show ? /* @__PURE__ */ jsx(IconEyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx(IconEye, { className: "h-4 w-4" })
64
+ }
65
+ )
66
+ ] });
67
+ }
68
+ var setPasswordSchema = (t) => z.object({
69
+ password: z.string().min(8, t("errors.passwordLength")).max(128, t("errors.longPasswordError")),
70
+ confirmPassword: z.string()
71
+ }).refine((data) => data.password === data.confirmPassword, {
72
+ message: t("errors.passwordsMismatch"),
73
+ path: ["confirmPassword"]
74
+ });
75
+ var getPhoneRegex = (phoneRegex) => {
76
+ if (typeof phoneRegex === "string") {
77
+ return new RegExp(phoneRegex);
78
+ }
79
+ return phoneRegex || /^(\+2519|\+2517|2519|2517|09|07)\d{8}$/;
80
+ };
81
+ var normalizeIdentifier = (identifier, phoneRegex) => {
82
+ const resolvedPhoneRegex = getPhoneRegex(phoneRegex);
83
+ return resolvedPhoneRegex.test(identifier) ? normalizePhone(identifier) : identifier;
84
+ };
85
+ var SetPassword = function SetPassword2({
86
+ identifier,
87
+ redirectUrl
88
+ } = {}) {
89
+ const { hooks, setAuth } = useApi();
90
+ const { config } = useConfig();
91
+ const mesob = useMesob();
92
+ const t = useTranslator("Auth.setPassword");
93
+ const Link = mesob?.navigation?.Link;
94
+ const [error, setError] = useState(null);
95
+ const [isLoading, setIsLoading] = useState(false);
96
+ const [isChecking, setIsChecking] = useState(true);
97
+ const [showPassword, setShowPassword] = useState(false);
98
+ const [showConfirmPassword, setShowConfirmPassword] = useState(false);
99
+ const [account, setAccount] = useState(null);
100
+ const checkAccountMutation = hooks.useMutation("post", "/check-account");
101
+ const setPasswordMutation = hooks.useMutation("post", "/password/set");
102
+ const onNavigate = config.navigation?.onNavigate || ((path) => {
103
+ if (typeof window !== "undefined") {
104
+ window.location.href = path;
105
+ }
106
+ });
107
+ const signInLink = config.navigation?.links?.signIn || "/auth/sign-in";
108
+ const logoImage = config.ui.logoImage;
109
+ const defaultRedirect = redirectUrl || config.navigation?.defaultRedirectUrl || "/";
110
+ const form = useForm({
111
+ resolver: zodResolver(setPasswordSchema(t)),
112
+ defaultValues: {
113
+ password: "",
114
+ confirmPassword: ""
115
+ }
116
+ });
117
+ useEffect(() => {
118
+ if (error) {
119
+ toast.error(error.title || "Error", {
120
+ description: error.description
121
+ });
122
+ }
123
+ }, [error]);
124
+ const loadAccount = useEffectEvent(async () => {
125
+ if (!identifier) {
126
+ setError({
127
+ title: t("errors.fallback"),
128
+ description: t("errors.missingIdentifier")
129
+ });
130
+ setIsChecking(false);
131
+ return;
132
+ }
133
+ try {
134
+ const normalizedIdentifier = normalizeIdentifier(
135
+ identifier,
136
+ config.phoneRegex
137
+ );
138
+ const res = await checkAccountMutation.mutateAsync({
139
+ body: { username: normalizedIdentifier }
140
+ });
141
+ if (!(res.exists && res.account && res.requiresPasswordSetup)) {
142
+ setError({
143
+ title: t("errors.fallback"),
144
+ description: t("errors.accountNotEligible")
145
+ });
146
+ setIsChecking(false);
147
+ return;
148
+ }
149
+ setAccount({
150
+ fullName: res.account.fullName,
151
+ email: res.account.email,
152
+ phone: res.account.phone
153
+ });
154
+ } catch {
155
+ setError({
156
+ title: t("errors.fallback"),
157
+ description: t("errors.accountLookupFailed")
158
+ });
159
+ } finally {
160
+ setIsChecking(false);
161
+ }
162
+ });
163
+ useEffect(() => {
164
+ loadAccount().catch(() => {
165
+ setIsChecking(false);
166
+ });
167
+ }, [identifier]);
168
+ const handleSubmit = form.handleSubmit(async (values) => {
169
+ if (!identifier) {
170
+ return;
171
+ }
172
+ setIsLoading(true);
173
+ setError(null);
174
+ try {
175
+ const normalizedIdentifier = normalizeIdentifier(
176
+ identifier,
177
+ config.phoneRegex
178
+ );
179
+ const res = await setPasswordMutation.mutateAsync({
180
+ body: {
181
+ identifier: normalizedIdentifier,
182
+ password: values.password
183
+ }
184
+ });
185
+ if ("user" in res && "session" in res) {
186
+ setAuth(res);
187
+ }
188
+ onNavigate(defaultRedirect);
189
+ } catch (err) {
190
+ handleError(err, setError, t);
191
+ } finally {
192
+ setIsLoading(false);
193
+ }
194
+ });
195
+ const accountLabel = account?.email ? t("form.emailLabel") : t("form.phoneLabel");
196
+ const accountValue = account?.email || account?.phone || identifier || "";
197
+ let errorContent = null;
198
+ if (error) {
199
+ errorContent = typeof error === "string" ? { title: "Error", description: error } : error;
200
+ }
201
+ const showError = !isChecking && !!errorContent;
202
+ const errorAlert = showError && errorContent && /* @__PURE__ */ jsxs(Alert, { variant: "destructive", className: "mt-4", children: [
203
+ /* @__PURE__ */ jsx(IconAlertCircle, { className: "h-4 w-4" }),
204
+ /* @__PURE__ */ jsx(AlertTitle, { children: errorContent.title }),
205
+ /* @__PURE__ */ jsx(AlertDescription, { children: errorContent.description })
206
+ ] });
207
+ return /* @__PURE__ */ jsxs(
208
+ AuthLayout,
209
+ {
210
+ title: config.ui.name,
211
+ description: t("description"),
212
+ logoImage,
213
+ footer: /* @__PURE__ */ jsxs("p", { children: [
214
+ t("footer.hasPassword"),
215
+ " ",
216
+ Link ? /* @__PURE__ */ jsx(Link, { href: signInLink, className: "text-primary hover:underline", children: t("footer.signInCta") }) : /* @__PURE__ */ jsx(
217
+ "a",
218
+ {
219
+ href: signInLink,
220
+ onClick: (e) => {
221
+ e.preventDefault();
222
+ onNavigate(signInLink);
223
+ },
224
+ className: "text-primary hover:underline",
225
+ children: t("footer.signInCta")
226
+ }
227
+ )
228
+ ] }),
229
+ children: [
230
+ /* @__PURE__ */ jsx(Form, { ...form, children: /* @__PURE__ */ jsxs(
231
+ "form",
232
+ {
233
+ id: "set-password-form",
234
+ onSubmit: handleSubmit,
235
+ className: "space-y-4",
236
+ children: [
237
+ /* @__PURE__ */ jsxs(FormItem, { children: [
238
+ /* @__PURE__ */ jsx(FormLabel, { children: t("form.fullNameLabel") }),
239
+ /* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(Input, { value: account?.fullName || "", disabled: true }) })
240
+ ] }),
241
+ /* @__PURE__ */ jsxs(FormItem, { children: [
242
+ /* @__PURE__ */ jsx(FormLabel, { children: accountLabel }),
243
+ /* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(Input, { value: accountValue, disabled: true }) })
244
+ ] }),
245
+ /* @__PURE__ */ jsx(
246
+ FormField,
247
+ {
248
+ control: form.control,
249
+ name: "password",
250
+ render: ({ field }) => /* @__PURE__ */ jsxs(FormItem, { children: [
251
+ /* @__PURE__ */ jsx(FormLabel, { children: t("form.passwordLabel") }),
252
+ /* @__PURE__ */ jsx(
253
+ PasswordInput,
254
+ {
255
+ field,
256
+ show: showPassword,
257
+ onToggle: () => setShowPassword(!showPassword)
258
+ }
259
+ ),
260
+ /* @__PURE__ */ jsx(FormMessage, {})
261
+ ] })
262
+ }
263
+ ),
264
+ /* @__PURE__ */ jsx(
265
+ FormField,
266
+ {
267
+ control: form.control,
268
+ name: "confirmPassword",
269
+ render: ({ field }) => /* @__PURE__ */ jsxs(FormItem, { children: [
270
+ /* @__PURE__ */ jsx(FormLabel, { children: t("form.confirmPasswordLabel") }),
271
+ /* @__PURE__ */ jsx(
272
+ PasswordInput,
273
+ {
274
+ field,
275
+ show: showConfirmPassword,
276
+ onToggle: () => setShowConfirmPassword(!showConfirmPassword)
277
+ }
278
+ ),
279
+ /* @__PURE__ */ jsx(FormMessage, {})
280
+ ] })
281
+ }
282
+ ),
283
+ /* @__PURE__ */ jsx(
284
+ Button,
285
+ {
286
+ type: "submit",
287
+ form: "set-password-form",
288
+ className: "w-full",
289
+ disabled: isChecking || !account || isLoading || setPasswordMutation.isPending,
290
+ children: isLoading || setPasswordMutation.isPending ? t("form.submitting") : t("form.submit")
291
+ }
292
+ )
293
+ ]
294
+ }
295
+ ) }),
296
+ errorAlert
297
+ ]
298
+ }
299
+ );
300
+ };
301
+
302
+ export {
303
+ SetPassword
304
+ };
305
+ //# sourceMappingURL=chunk-HOO2VLNM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/auth/set-password.tsx"],"sourcesContent":["'use client';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n Button,\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Input,\n useFormField,\n} from '@mesob/ui/components';\nimport { useMesob } from '@mesob/ui/providers';\nimport { IconAlertCircle, IconEye, IconEyeOff } from '@tabler/icons-react';\nimport type { ChangeEvent, ComponentProps } from 'react';\nimport { useEffect, useEffectEvent, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\nimport { useTranslator } from '../../hooks/use-translator';\nimport { useApi, useConfig } from '../../provider';\nimport type { AuthErrorContent } from '../../utils/handle-error';\nimport { handleError } from '../../utils/handle-error';\nimport { normalizePhone } from '../../utils/normalize-phone';\nimport { AuthLayout } from './auth-layout';\n\ntype PasswordInputProps = {\n field: ComponentProps<'input'> & {\n value: string;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n onBlur: () => void;\n };\n show: boolean;\n onToggle: () => void;\n};\n\nfunction PasswordInput({ field, show, onToggle }: PasswordInputProps) {\n const { formItemId, error } = useFormField();\n return (\n <div className=\"relative\">\n <Input\n {...field}\n id={formItemId}\n type={show ? 'text' : 'password'}\n aria-invalid={!!error}\n className=\"pr-10\"\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute right-0 top-0 h-full px-3 text-muted-foreground hover:text-foreground\"\n onClick={onToggle}\n aria-label={show ? 'Hide password' : 'Show password'}\n >\n {show ? (\n <IconEyeOff className=\"h-4 w-4\" />\n ) : (\n <IconEye className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n );\n}\n\nconst setPasswordSchema = (t: (key: string) => string) =>\n z\n .object({\n password: z\n .string()\n .min(8, t('errors.passwordLength'))\n .max(128, t('errors.longPasswordError')),\n confirmPassword: z.string(),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: t('errors.passwordsMismatch'),\n path: ['confirmPassword'],\n });\n\ntype SetPasswordFormValues = z.infer<ReturnType<typeof setPasswordSchema>>;\n\ntype SetPasswordProps = {\n identifier?: string;\n redirectUrl?: string;\n};\n\ntype AccountState = {\n fullName: string;\n email: string | null;\n phone: string | null;\n};\n\nconst getPhoneRegex = (phoneRegex: RegExp | string | undefined) => {\n if (typeof phoneRegex === 'string') {\n return new RegExp(phoneRegex);\n }\n\n return phoneRegex || /^(\\+2519|\\+2517|2519|2517|09|07)\\d{8}$/;\n};\n\nconst normalizeIdentifier = (\n identifier: string,\n phoneRegex: RegExp | string | undefined,\n) => {\n const resolvedPhoneRegex = getPhoneRegex(phoneRegex);\n return resolvedPhoneRegex.test(identifier)\n ? normalizePhone(identifier)\n : identifier;\n};\n\nexport const SetPassword = function SetPassword({\n identifier,\n redirectUrl,\n}: SetPasswordProps = {}) {\n const { hooks, setAuth } = useApi();\n const { config } = useConfig();\n const mesob = useMesob();\n const t = useTranslator('Auth.setPassword');\n const Link = mesob?.navigation?.Link;\n const [error, setError] = useState<AuthErrorContent | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [isChecking, setIsChecking] = useState(true);\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [account, setAccount] = useState<AccountState | null>(null);\n\n const checkAccountMutation = hooks.useMutation('post', '/check-account');\n const setPasswordMutation = hooks.useMutation('post', '/password/set');\n\n const onNavigate =\n config.navigation?.onNavigate ||\n ((path: string) => {\n if (typeof window !== 'undefined') {\n window.location.href = path;\n }\n });\n const signInLink = config.navigation?.links?.signIn || '/auth/sign-in';\n const logoImage = config.ui.logoImage;\n const defaultRedirect =\n redirectUrl || config.navigation?.defaultRedirectUrl || '/';\n const form = useForm<SetPasswordFormValues>({\n resolver: zodResolver(setPasswordSchema(t)),\n defaultValues: {\n password: '',\n confirmPassword: '',\n },\n });\n\n useEffect(() => {\n if (error) {\n toast.error(error.title || 'Error', {\n description: error.description,\n });\n }\n }, [error]);\n\n const loadAccount = useEffectEvent(async () => {\n if (!identifier) {\n setError({\n title: t('errors.fallback'),\n description: t('errors.missingIdentifier'),\n });\n setIsChecking(false);\n return;\n }\n\n try {\n const normalizedIdentifier = normalizeIdentifier(\n identifier,\n config.phoneRegex,\n );\n const res = await checkAccountMutation.mutateAsync({\n body: { username: normalizedIdentifier },\n });\n\n if (!(res.exists && res.account && res.requiresPasswordSetup)) {\n setError({\n title: t('errors.fallback'),\n description: t('errors.accountNotEligible'),\n });\n setIsChecking(false);\n return;\n }\n\n setAccount({\n fullName: res.account.fullName,\n email: res.account.email,\n phone: res.account.phone,\n });\n } catch {\n setError({\n title: t('errors.fallback'),\n description: t('errors.accountLookupFailed'),\n });\n } finally {\n setIsChecking(false);\n }\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: rerun only when route identifier changes\n useEffect(() => {\n loadAccount().catch(() => {\n setIsChecking(false);\n });\n }, [identifier]);\n\n const handleSubmit = form.handleSubmit(async (values) => {\n if (!identifier) {\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const normalizedIdentifier = normalizeIdentifier(\n identifier,\n config.phoneRegex,\n );\n const res = await setPasswordMutation.mutateAsync({\n body: {\n identifier: normalizedIdentifier,\n password: values.password,\n },\n });\n\n if ('user' in res && 'session' in res) {\n setAuth(res);\n }\n onNavigate(defaultRedirect);\n } catch (err) {\n handleError(err, setError, t);\n } finally {\n setIsLoading(false);\n }\n });\n\n const accountLabel = account?.email\n ? t('form.emailLabel')\n : t('form.phoneLabel');\n const accountValue = account?.email || account?.phone || identifier || '';\n\n let errorContent: AuthErrorContent | null = null;\n if (error) {\n errorContent =\n typeof error === 'string'\n ? { title: 'Error', description: error }\n : error;\n }\n const showError = !isChecking && !!errorContent;\n const errorAlert = showError && errorContent && (\n <Alert variant=\"destructive\" className=\"mt-4\">\n <IconAlertCircle className=\"h-4 w-4\" />\n <AlertTitle>{errorContent.title}</AlertTitle>\n <AlertDescription>{errorContent.description}</AlertDescription>\n </Alert>\n );\n\n return (\n <AuthLayout\n title={config.ui.name}\n description={t('description')}\n logoImage={logoImage}\n footer={\n <p>\n {t('footer.hasPassword')}{' '}\n {Link ? (\n <Link href={signInLink} className=\"text-primary hover:underline\">\n {t('footer.signInCta')}\n </Link>\n ) : (\n <a\n href={signInLink}\n onClick={(e) => {\n e.preventDefault();\n onNavigate(signInLink);\n }}\n className=\"text-primary hover:underline\"\n >\n {t('footer.signInCta')}\n </a>\n )}\n </p>\n }\n >\n <Form {...form}>\n <form\n id=\"set-password-form\"\n onSubmit={handleSubmit}\n className=\"space-y-4\"\n >\n <FormItem>\n <FormLabel>{t('form.fullNameLabel')}</FormLabel>\n <FormControl>\n <Input value={account?.fullName || ''} disabled />\n </FormControl>\n </FormItem>\n <FormItem>\n <FormLabel>{accountLabel}</FormLabel>\n <FormControl>\n <Input value={accountValue} disabled />\n </FormControl>\n </FormItem>\n <FormField\n control={form.control}\n name=\"password\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>{t('form.passwordLabel')}</FormLabel>\n <PasswordInput\n field={field}\n show={showPassword}\n onToggle={() => setShowPassword(!showPassword)}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n <FormField\n control={form.control}\n name=\"confirmPassword\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>{t('form.confirmPasswordLabel')}</FormLabel>\n <PasswordInput\n field={field}\n show={showConfirmPassword}\n onToggle={() => setShowConfirmPassword(!showConfirmPassword)}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n <Button\n type=\"submit\"\n form=\"set-password-form\"\n className=\"w-full\"\n disabled={\n isChecking ||\n !account ||\n isLoading ||\n setPasswordMutation.isPending\n }\n >\n {isLoading || setPasswordMutation.isPending\n ? t('form.submitting')\n : t('form.submit')}\n </Button>\n </form>\n </Form>\n {errorAlert}\n </AuthLayout>\n );\n};\n"],"mappings":"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","names":["SetPassword"]}
@@ -0,0 +1,183 @@
1
+ import {
2
+ VerificationForm
3
+ } from "./chunk-FFR5UHTS.js";
4
+ import {
5
+ handleError
6
+ } from "./chunk-55BMNC4S.js";
7
+ import {
8
+ AuthLayout
9
+ } from "./chunk-DPH2PHK3.js";
10
+ import {
11
+ useTranslator
12
+ } from "./chunk-QNCE2B5O.js";
13
+ import {
14
+ useApi,
15
+ useConfig
16
+ } from "./chunk-72YRO3A7.js";
17
+
18
+ // src/components/auth/verify-email.tsx
19
+ import { Alert, AlertDescription, AlertTitle } from "@mesob/ui/components";
20
+ import { useMesob } from "@mesob/ui/providers";
21
+ import { IconAlertCircle } from "@tabler/icons-react";
22
+ import { useEffect, useState } from "react";
23
+ import { toast } from "sonner";
24
+ import { jsx, jsxs } from "react/jsx-runtime";
25
+ var VerifyEmail = ({
26
+ verificationId,
27
+ email,
28
+ redirectUrl
29
+ }) => {
30
+ const { hooks, setAuth } = useApi();
31
+ const { config } = useConfig();
32
+ const mesob = useMesob();
33
+ const t = useTranslator("Auth.verification");
34
+ const common = useTranslator("Common");
35
+ const footer = useTranslator("Auth.forgotPassword.footer");
36
+ const Link = mesob?.navigation?.Link;
37
+ const [isLoading, setIsLoading] = useState(false);
38
+ const [error, setError] = useState(null);
39
+ const verifyEmailMutation = hooks.useMutation(
40
+ "post",
41
+ "/email/verification/confirm"
42
+ );
43
+ const requestEmailMutation = hooks.useMutation(
44
+ "post",
45
+ "/email/verification/request"
46
+ );
47
+ const signInLink = config.navigation?.links?.signIn || "/auth/sign-in";
48
+ const onNavigate = config.navigation?.onNavigate || ((path) => {
49
+ if (typeof window !== "undefined") {
50
+ window.location.href = path;
51
+ }
52
+ });
53
+ const logoImage = config.ui.logoImage;
54
+ const defaultRedirect = redirectUrl || config.navigation?.defaultRedirectUrl || "/";
55
+ useEffect(() => {
56
+ if (error) {
57
+ toast.error(error.title || "Error", {
58
+ description: error.description
59
+ });
60
+ }
61
+ }, [error]);
62
+ const handleSubmit = async (values) => {
63
+ if (!verificationId) {
64
+ setError({
65
+ title: t("errors.fallback"),
66
+ description: t("errors.missingVerificationId")
67
+ });
68
+ return;
69
+ }
70
+ setIsLoading(true);
71
+ setError(null);
72
+ try {
73
+ const res = await verifyEmailMutation.mutateAsync({
74
+ body: {
75
+ verificationId,
76
+ code: values.code
77
+ }
78
+ });
79
+ if ("user" in res && "session" in res) {
80
+ setAuth(res);
81
+ }
82
+ onNavigate(defaultRedirect);
83
+ } catch (err) {
84
+ handleError(err, setError, t);
85
+ } finally {
86
+ setIsLoading(false);
87
+ }
88
+ };
89
+ const handleResend = async () => {
90
+ setError(null);
91
+ try {
92
+ const res = await requestEmailMutation.mutateAsync({
93
+ body: {
94
+ email
95
+ }
96
+ });
97
+ if (res.verificationId) {
98
+ onNavigate(
99
+ `/auth/verify-email?verificationId=${res.verificationId}&email=${encodeURIComponent(email)}`
100
+ );
101
+ } else {
102
+ setError({
103
+ title: t("errors.fallback"),
104
+ description: t("errors.resendFailed")
105
+ });
106
+ }
107
+ } catch (err) {
108
+ handleError(err, setError, t);
109
+ }
110
+ };
111
+ if (!verificationId) {
112
+ return /* @__PURE__ */ jsx(
113
+ AuthLayout,
114
+ {
115
+ title: common("invalidLinkTitle"),
116
+ description: common("invalidLinkDescription"),
117
+ footer: Link ? /* @__PURE__ */ jsx(Link, { href: signInLink, className: "text-primary hover:underline", children: footer("backToSignIn") }) : /* @__PURE__ */ jsx(
118
+ "a",
119
+ {
120
+ href: signInLink,
121
+ onClick: (e) => {
122
+ e.preventDefault();
123
+ onNavigate(signInLink);
124
+ },
125
+ className: "text-primary hover:underline",
126
+ children: footer("backToSignIn")
127
+ }
128
+ ),
129
+ children: /* @__PURE__ */ jsx("div", {})
130
+ }
131
+ );
132
+ }
133
+ let errorContent = null;
134
+ if (error) {
135
+ if (typeof error === "string") {
136
+ errorContent = { title: "Error", description: error };
137
+ } else {
138
+ errorContent = error;
139
+ }
140
+ }
141
+ return /* @__PURE__ */ jsxs(
142
+ AuthLayout,
143
+ {
144
+ title: config.ui.name,
145
+ description: t("email.description"),
146
+ logoImage,
147
+ footer: Link ? /* @__PURE__ */ jsx(Link, { href: signInLink, className: "text-primary hover:underline", children: footer("backToSignIn") }) : /* @__PURE__ */ jsx(
148
+ "a",
149
+ {
150
+ href: signInLink,
151
+ onClick: (e) => {
152
+ e.preventDefault();
153
+ onNavigate(signInLink);
154
+ },
155
+ className: "text-primary hover:underline",
156
+ children: footer("backToSignIn")
157
+ }
158
+ ),
159
+ children: [
160
+ /* @__PURE__ */ jsx(
161
+ VerificationForm,
162
+ {
163
+ verificationId,
164
+ onSubmit: handleSubmit,
165
+ onResend: handleResend,
166
+ isLoading: isLoading || verifyEmailMutation.isPending || requestEmailMutation.isPending,
167
+ error
168
+ }
169
+ ),
170
+ errorContent && /* @__PURE__ */ jsxs(Alert, { variant: "destructive", className: "mt-4", children: [
171
+ /* @__PURE__ */ jsx(IconAlertCircle, { className: "h-4 w-4" }),
172
+ /* @__PURE__ */ jsx(AlertTitle, { children: errorContent.title }),
173
+ /* @__PURE__ */ jsx(AlertDescription, { children: errorContent.description })
174
+ ] })
175
+ ]
176
+ }
177
+ );
178
+ };
179
+
180
+ export {
181
+ VerifyEmail
182
+ };
183
+ //# sourceMappingURL=chunk-II5MLBSB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/auth/verify-email.tsx"],"sourcesContent":["'use client';\n\nimport { Alert, AlertDescription, AlertTitle } from '@mesob/ui/components';\nimport { useMesob } from '@mesob/ui/providers';\nimport { IconAlertCircle } from '@tabler/icons-react';\nimport { useEffect, useState } from 'react';\nimport { toast } from 'sonner';\nimport { useTranslator } from '../../hooks/use-translator';\nimport { useApi, useConfig } from '../../provider';\nimport type { AuthErrorContent } from '../../utils/handle-error';\nimport { handleError } from '../../utils/handle-error';\nimport { AuthLayout } from './auth-layout';\nimport { VerificationForm } from './verification-form';\n\ntype VerifyEmailProps = {\n verificationId: string;\n email: string;\n redirectUrl?: string;\n};\n\nexport const VerifyEmail = ({\n verificationId,\n email,\n redirectUrl,\n}: VerifyEmailProps) => {\n const { hooks, setAuth } = useApi();\n const { config } = useConfig();\n const mesob = useMesob();\n const t = useTranslator('Auth.verification');\n const common = useTranslator('Common');\n const footer = useTranslator('Auth.forgotPassword.footer');\n const Link = mesob?.navigation?.Link;\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthErrorContent | null>(null);\n\n const verifyEmailMutation = hooks.useMutation(\n 'post',\n '/email/verification/confirm',\n );\n const requestEmailMutation = hooks.useMutation(\n 'post',\n '/email/verification/request',\n );\n\n const signInLink = config.navigation?.links?.signIn || '/auth/sign-in';\n const onNavigate =\n config.navigation?.onNavigate ||\n ((path: string) => {\n if (typeof window !== 'undefined') {\n window.location.href = path;\n }\n });\n const logoImage = config.ui.logoImage;\n const defaultRedirect =\n redirectUrl || config.navigation?.defaultRedirectUrl || '/';\n\n useEffect(() => {\n if (error) {\n toast.error(error.title || 'Error', {\n description: error.description,\n });\n }\n }, [error]);\n\n const handleSubmit = async (values: { code: string }) => {\n if (!verificationId) {\n setError({\n title: t('errors.fallback'),\n description: t('errors.missingVerificationId'),\n });\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const res = await verifyEmailMutation.mutateAsync({\n body: {\n verificationId,\n code: values.code,\n },\n });\n if ('user' in res && 'session' in res) {\n setAuth(res);\n }\n onNavigate(defaultRedirect);\n } catch (err) {\n handleError(err, setError, t);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleResend = async () => {\n setError(null);\n try {\n const res = await requestEmailMutation.mutateAsync({\n body: {\n email,\n },\n });\n if (res.verificationId) {\n onNavigate(\n `/auth/verify-email?verificationId=${res.verificationId}&email=${encodeURIComponent(email)}`,\n );\n } else {\n setError({\n title: t('errors.fallback'),\n description: t('errors.resendFailed'),\n });\n }\n } catch (err) {\n handleError(err, setError, t);\n }\n };\n\n if (!verificationId) {\n return (\n <AuthLayout\n title={common('invalidLinkTitle')}\n description={common('invalidLinkDescription')}\n footer={\n Link ? (\n <Link href={signInLink} className=\"text-primary hover:underline\">\n {footer('backToSignIn')}\n </Link>\n ) : (\n <a\n href={signInLink}\n onClick={(e) => {\n e.preventDefault();\n onNavigate(signInLink);\n }}\n className=\"text-primary hover:underline\"\n >\n {footer('backToSignIn')}\n </a>\n )\n }\n >\n <div />\n </AuthLayout>\n );\n }\n\n let errorContent: AuthErrorContent | null = null;\n if (error) {\n if (typeof error === 'string') {\n errorContent = { title: 'Error', description: error };\n } else {\n errorContent = error;\n }\n }\n\n return (\n <AuthLayout\n title={config.ui.name}\n description={t('email.description')}\n logoImage={logoImage}\n footer={\n Link ? (\n <Link href={signInLink} className=\"text-primary hover:underline\">\n {footer('backToSignIn')}\n </Link>\n ) : (\n <a\n href={signInLink}\n onClick={(e) => {\n e.preventDefault();\n onNavigate(signInLink);\n }}\n className=\"text-primary hover:underline\"\n >\n {footer('backToSignIn')}\n </a>\n )\n }\n >\n <VerificationForm\n verificationId={verificationId}\n onSubmit={handleSubmit}\n onResend={handleResend}\n isLoading={\n isLoading ||\n verifyEmailMutation.isPending ||\n requestEmailMutation.isPending\n }\n error={error}\n />\n {errorContent && (\n <Alert variant=\"destructive\" className=\"mt-4\">\n <IconAlertCircle className=\"h-4 w-4\" />\n <AlertTitle>{errorContent.title}</AlertTitle>\n <AlertDescription>{errorContent.description}</AlertDescription>\n </Alert>\n )}\n </AuthLayout>\n );\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,95 @@
1
+ import {
2
+ AppLink
3
+ } from "./chunk-T6P7UHVP.js";
4
+ import {
5
+ useSession
6
+ } from "./chunk-72YRO3A7.js";
7
+
8
+ // src/pages/profile/_components/profile-sidebar.tsx
9
+ import { Avatar, AvatarFallback, AvatarImage } from "@mesob/ui/components";
10
+ import { cn } from "@mesob/ui/lib/utils";
11
+ import { IconLock, IconUser } from "@tabler/icons-react";
12
+ import { useMemo } from "react";
13
+ import { jsx, jsxs } from "react/jsx-runtime";
14
+ var profileNavItems = [
15
+ {
16
+ title: "Account",
17
+ href: "/profile/account",
18
+ icon: IconUser,
19
+ caption: "Identity and contact"
20
+ },
21
+ {
22
+ title: "Security",
23
+ href: "/profile/security",
24
+ icon: IconLock,
25
+ caption: "Password and recovery"
26
+ }
27
+ ];
28
+ function ProfileSidebar() {
29
+ const { user } = useSession();
30
+ const pathname = useMemo(() => {
31
+ if (typeof window === "undefined") {
32
+ return "";
33
+ }
34
+ return window.location.pathname;
35
+ }, []);
36
+ const initials = user?.fullName?.split(" ").map((part) => part[0]).join("").toUpperCase().slice(0, 2) || "U";
37
+ return /* @__PURE__ */ jsx("aside", { className: "w-full border-b border-border/60 bg-gradient-to-b from-muted/30 via-background to-background lg:w-80 lg:border-b-0 lg:border-r", children: /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col gap-6 p-4 lg:p-5", children: [
38
+ /* @__PURE__ */ jsx("div", { className: "rounded-[1.75rem] border border-border/60 bg-background/85 p-5 shadow-sm backdrop-blur", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
39
+ /* @__PURE__ */ jsxs(Avatar, { className: "h-12 w-12 ring-4 ring-primary/10", children: [
40
+ /* @__PURE__ */ jsx(AvatarImage, { src: user?.image || "", alt: user?.fullName || "" }),
41
+ /* @__PURE__ */ jsx(AvatarFallback, { children: initials })
42
+ ] }),
43
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
44
+ /* @__PURE__ */ jsx("div", { className: "truncate text-sm font-medium text-muted-foreground", children: "Profile workspace" }),
45
+ /* @__PURE__ */ jsx("div", { className: "truncate text-base font-semibold", children: user?.fullName ?? "Account" })
46
+ ] })
47
+ ] }) }),
48
+ /* @__PURE__ */ jsx("nav", { className: "grid gap-2", children: profileNavItems.map((item) => {
49
+ const Icon = item.icon;
50
+ const isActive = pathname === item.href;
51
+ return /* @__PURE__ */ jsx(
52
+ AppLink,
53
+ {
54
+ href: item.href,
55
+ className: cn(
56
+ "group rounded-[1.5rem] border px-4 py-4 transition-all",
57
+ isActive ? "border-primary/30 bg-primary/[0.08] shadow-sm" : "border-border/60 bg-background/70 hover:border-primary/20 hover:bg-muted/30"
58
+ ),
59
+ children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
60
+ /* @__PURE__ */ jsx(
61
+ "div",
62
+ {
63
+ className: cn(
64
+ "rounded-2xl p-2 transition-colors",
65
+ isActive ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground group-hover:bg-primary/10 group-hover:text-foreground"
66
+ ),
67
+ children: /* @__PURE__ */ jsx(Icon, { className: "size-4" })
68
+ }
69
+ ),
70
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
71
+ /* @__PURE__ */ jsx("div", { className: "font-medium", children: item.title }),
72
+ /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: item.caption })
73
+ ] })
74
+ ] })
75
+ },
76
+ item.href
77
+ );
78
+ }) })
79
+ ] }) });
80
+ }
81
+
82
+ // src/components/profile/profile-layout.tsx
83
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
84
+ function ProfileLayout({ children }) {
85
+ return /* @__PURE__ */ jsxs2("div", { className: "flex flex-1 flex-col overflow-hidden lg:flex-row", children: [
86
+ /* @__PURE__ */ jsx2(ProfileSidebar, {}),
87
+ /* @__PURE__ */ jsx2("div", { className: "flex min-w-0 flex-1 flex-col overflow-hidden bg-[linear-gradient(180deg,hsl(var(--muted)/0.18),transparent_18rem)]", children })
88
+ ] });
89
+ }
90
+
91
+ export {
92
+ ProfileSidebar,
93
+ ProfileLayout
94
+ };
95
+ //# sourceMappingURL=chunk-ISNNPMF7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pages/profile/_components/profile-sidebar.tsx","../src/components/profile/profile-layout.tsx"],"sourcesContent":["'use client';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@mesob/ui/components';\nimport { cn } from '@mesob/ui/lib/utils';\nimport { IconLock, IconUser } from '@tabler/icons-react';\nimport { useMemo } from 'react';\nimport { useSession } from '../../../provider';\nimport { AppLink } from '../../iam/shared/navigation';\n\nconst profileNavItems = [\n {\n title: 'Account',\n href: '/profile/account',\n icon: IconUser,\n caption: 'Identity and contact',\n },\n {\n title: 'Security',\n href: '/profile/security',\n icon: IconLock,\n caption: 'Password and recovery',\n },\n];\n\nexport function ProfileSidebar() {\n const { user } = useSession();\n const pathname = useMemo(() => {\n if (typeof window === 'undefined') {\n return '';\n }\n return window.location.pathname;\n }, []);\n\n const initials =\n user?.fullName\n ?.split(' ')\n .map((part) => part[0])\n .join('')\n .toUpperCase()\n .slice(0, 2) || 'U';\n\n return (\n <aside className=\"w-full border-b border-border/60 bg-gradient-to-b from-muted/30 via-background to-background lg:w-80 lg:border-b-0 lg:border-r\">\n <div className=\"flex h-full flex-col gap-6 p-4 lg:p-5\">\n <div className=\"rounded-[1.75rem] border border-border/60 bg-background/85 p-5 shadow-sm backdrop-blur\">\n <div className=\"flex items-center gap-4\">\n <Avatar className=\"h-12 w-12 ring-4 ring-primary/10\">\n <AvatarImage src={user?.image || ''} alt={user?.fullName || ''} />\n <AvatarFallback>{initials}</AvatarFallback>\n </Avatar>\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-muted-foreground\">\n Profile workspace\n </div>\n <div className=\"truncate text-base font-semibold\">\n {user?.fullName ?? 'Account'}\n </div>\n </div>\n </div>\n </div>\n\n <nav className=\"grid gap-2\">\n {profileNavItems.map((item) => {\n const Icon = item.icon;\n const isActive = pathname === item.href;\n\n return (\n <AppLink\n key={item.href}\n href={item.href}\n className={cn(\n 'group rounded-[1.5rem] border px-4 py-4 transition-all',\n isActive\n ? 'border-primary/30 bg-primary/[0.08] shadow-sm'\n : 'border-border/60 bg-background/70 hover:border-primary/20 hover:bg-muted/30',\n )}\n >\n <div className=\"flex items-start gap-3\">\n <div\n className={cn(\n 'rounded-2xl p-2 transition-colors',\n isActive\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground group-hover:bg-primary/10 group-hover:text-foreground',\n )}\n >\n <Icon className=\"size-4\" />\n </div>\n <div className=\"min-w-0\">\n <div className=\"font-medium\">{item.title}</div>\n <div className=\"text-sm text-muted-foreground\">\n {item.caption}\n </div>\n </div>\n </div>\n </AppLink>\n );\n })}\n </nav>\n </div>\n </aside>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { ProfileSidebar } from '../../pages/profile/_components/profile-sidebar';\n\nexport function ProfileLayout({ children }: { children: ReactNode }) {\n return (\n <div className=\"flex flex-1 flex-col overflow-hidden lg:flex-row\">\n <ProfileSidebar />\n <div className=\"flex min-w-0 flex-1 flex-col overflow-hidden bg-[linear-gradient(180deg,hsl(var(--muted)/0.18),transparent_18rem)]\">\n {children}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAEA,SAAS,QAAQ,gBAAgB,mBAAmB;AACpD,SAAS,UAAU;AACnB,SAAS,UAAU,gBAAgB;AACnC,SAAS,eAAe;AAyCZ,SACE,KADF;AArCZ,IAAM,kBAAkB;AAAA,EACtB;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAEO,SAAS,iBAAiB;AAC/B,QAAM,EAAE,KAAK,IAAI,WAAW;AAC5B,QAAM,WAAW,QAAQ,MAAM;AAC7B,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO;AAAA,IACT;AACA,WAAO,OAAO,SAAS;AAAA,EACzB,GAAG,CAAC,CAAC;AAEL,QAAM,WACJ,MAAM,UACF,MAAM,GAAG,EACV,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,EACrB,KAAK,EAAE,EACP,YAAY,EACZ,MAAM,GAAG,CAAC,KAAK;AAEpB,SACE,oBAAC,WAAM,WAAU,kIACf,+BAAC,SAAI,WAAU,yCACb;AAAA,wBAAC,SAAI,WAAU,0FACb,+BAAC,SAAI,WAAU,2BACb;AAAA,2BAAC,UAAO,WAAU,oCAChB;AAAA,4BAAC,eAAY,KAAK,MAAM,SAAS,IAAI,KAAK,MAAM,YAAY,IAAI;AAAA,QAChE,oBAAC,kBAAgB,oBAAS;AAAA,SAC5B;AAAA,MACA,qBAAC,SAAI,WAAU,WACb;AAAA,4BAAC,SAAI,WAAU,sDAAqD,+BAEpE;AAAA,QACA,oBAAC,SAAI,WAAU,oCACZ,gBAAM,YAAY,WACrB;AAAA,SACF;AAAA,OACF,GACF;AAAA,IAEA,oBAAC,SAAI,WAAU,cACZ,0BAAgB,IAAI,CAAC,SAAS;AAC7B,YAAM,OAAO,KAAK;AAClB,YAAM,WAAW,aAAa,KAAK;AAEnC,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA,WACI,kDACA;AAAA,UACN;AAAA,UAEA,+BAAC,SAAI,WAAU,0BACb;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,WACI,uCACA;AAAA,gBACN;AAAA,gBAEA,8BAAC,QAAK,WAAU,UAAS;AAAA;AAAA,YAC3B;AAAA,YACA,qBAAC,SAAI,WAAU,WACb;AAAA,kCAAC,SAAI,WAAU,eAAe,eAAK,OAAM;AAAA,cACzC,oBAAC,SAAI,WAAU,iCACZ,eAAK,SACR;AAAA,eACF;AAAA,aACF;AAAA;AAAA,QA1BK,KAAK;AAAA,MA2BZ;AAAA,IAEJ,CAAC,GACH;AAAA,KACF,GACF;AAEJ;;;AC/FI,SACE,OAAAA,MADF,QAAAC,aAAA;AAFG,SAAS,cAAc,EAAE,SAAS,GAA4B;AACnE,SACE,gBAAAA,MAAC,SAAI,WAAU,oDACb;AAAA,oBAAAD,KAAC,kBAAe;AAAA,IAChB,gBAAAA,KAAC,SAAI,WAAU,sHACZ,UACH;AAAA,KACF;AAEJ;","names":["jsx","jsxs"]}