@mesob/auth-react 0.3.5 → 0.4.1

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 (372) 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-FBABIA5J.js +345 -0
  36. package/dist/chunk-FBABIA5J.js.map +1 -0
  37. package/dist/chunk-FFR5UHTS.js +99 -0
  38. package/dist/chunk-FFR5UHTS.js.map +1 -0
  39. package/dist/chunk-FHOLUOOZ.js +164 -0
  40. package/dist/chunk-FHOLUOOZ.js.map +1 -0
  41. package/dist/chunk-G2AW2H36.js +11 -0
  42. package/dist/chunk-G2AW2H36.js.map +1 -0
  43. package/dist/chunk-G7SCXCCM.js +89 -0
  44. package/dist/chunk-G7SCXCCM.js.map +1 -0
  45. package/dist/chunk-GP7GIUI3.js +64 -0
  46. package/dist/chunk-GP7GIUI3.js.map +1 -0
  47. package/dist/chunk-GRT6EBR6.js +93 -0
  48. package/dist/chunk-GRT6EBR6.js.map +1 -0
  49. package/dist/chunk-GXKBVCVS.js +102 -0
  50. package/dist/chunk-GXKBVCVS.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 -361
  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 -483
  133. package/dist/components/auth/reset-password-form.js.map +1 -1
  134. package/dist/components/auth/set-password.d.ts +6 -0
  135. package/dist/components/auth/set-password.js +13 -0
  136. package/dist/components/auth/set-password.js.map +1 -0
  137. package/dist/components/auth/sign-in.d.ts +2 -5
  138. package/dist/components/auth/sign-in.js +7 -540
  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 -509
  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 -523
  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 -528
  151. package/dist/components/auth/verify-phone.js.map +1 -1
  152. package/dist/components/authorization/deny.d.ts +8 -0
  153. package/dist/components/authorization/deny.js +9 -0
  154. package/dist/components/authorization/deny.js.map +1 -0
  155. package/dist/components/authorization/grant.d.ts +9 -0
  156. package/dist/components/authorization/grant.js +9 -0
  157. package/dist/components/authorization/grant.js.map +1 -0
  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 +16 -0
  162. package/dist/components/iam/permission-selector.js +9 -0
  163. package/dist/components/iam/permission-selector.js.map +1 -0
  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 -217
  169. package/dist/components/iam/permissions.js.map +1 -1
  170. package/dist/components/iam/role-detail-layout.d.ts +8 -0
  171. package/dist/components/iam/role-detail-layout.js +9 -0
  172. package/dist/components/iam/role-detail-layout.js.map +1 -0
  173. package/dist/components/iam/role-detail-page.d.ts +6 -0
  174. package/dist/components/iam/role-detail-page.js +9 -0
  175. package/dist/components/iam/role-detail-page.js.map +1 -0
  176. package/dist/components/iam/role-permissions-page.d.ts +5 -0
  177. package/dist/components/iam/role-permissions-page.js +10 -0
  178. package/dist/components/iam/role-permissions-page.js.map +1 -0
  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 -215
  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 -213
  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 +5 -61
  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 -6
  216. package/dist/components/profile/change-profile.js +2 -32
  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 -1474
  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 -84
  255. package/dist/index.js +160 -3861
  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 -0
  260. package/dist/pages/auth/forgot-password.js +22 -0
  261. package/dist/pages/auth/forgot-password.js.map +1 -0
  262. package/dist/pages/auth/layout.d.ts +4 -0
  263. package/dist/pages/auth/layout.js +39 -0
  264. package/dist/pages/auth/layout.js.map +1 -0
  265. package/dist/pages/auth/reset-password.d.ts +7 -0
  266. package/dist/pages/auth/reset-password.js +33 -0
  267. package/dist/pages/auth/reset-password.js.map +1 -0
  268. package/dist/pages/auth/set-password.d.ts +7 -0
  269. package/dist/pages/auth/set-password.js +28 -0
  270. package/dist/pages/auth/set-password.js.map +1 -0
  271. package/dist/pages/auth/sign-in.d.ts +7 -0
  272. package/dist/pages/auth/sign-in.js +26 -0
  273. package/dist/pages/auth/sign-in.js.map +1 -0
  274. package/dist/pages/auth/sign-up.d.ts +7 -0
  275. package/dist/pages/auth/sign-up.js +33 -0
  276. package/dist/pages/auth/sign-up.js.map +1 -0
  277. package/dist/pages/auth/verify-email.d.ts +7 -0
  278. package/dist/pages/auth/verify-email.js +38 -0
  279. package/dist/pages/auth/verify-email.js.map +1 -0
  280. package/dist/pages/auth/verify-phone.d.ts +7 -0
  281. package/dist/pages/auth/verify-phone.js +47 -0
  282. package/dist/pages/auth/verify-phone.js.map +1 -0
  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 -0
  287. package/dist/pages/iam/permissions.js +10 -0
  288. package/dist/pages/iam/permissions.js.map +1 -0
  289. package/dist/pages/iam/role-detail-layout.d.ts +9 -0
  290. package/dist/pages/iam/role-detail-layout.js +18 -0
  291. package/dist/pages/iam/role-detail-layout.js.map +1 -0
  292. package/dist/pages/iam/role-detail.d.ts +9 -0
  293. package/dist/pages/iam/role-detail.js +22 -0
  294. package/dist/pages/iam/role-detail.js.map +1 -0
  295. package/dist/pages/iam/role-permissions.d.ts +9 -0
  296. package/dist/pages/iam/role-permissions.js +23 -0
  297. package/dist/pages/iam/role-permissions.js.map +1 -0
  298. package/dist/pages/iam/role-users.d.ts +9 -0
  299. package/dist/pages/iam/role-users.js +26 -0
  300. package/dist/pages/iam/role-users.js.map +1 -0
  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 -0
  308. package/dist/pages/iam/roles.js +13 -0
  309. package/dist/pages/iam/roles.js.map +1 -0
  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 -0
  314. package/dist/pages/iam/sessions.js +12 -0
  315. package/dist/pages/iam/sessions.js.map +1 -0
  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 +7 -0
  319. package/dist/pages/iam/tenant-detail.js +18 -0
  320. package/dist/pages/iam/tenant-detail.js.map +1 -0
  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 -0
  328. package/dist/pages/iam/tenants.js +13 -0
  329. package/dist/pages/iam/tenants.js.map +1 -0
  330. package/dist/pages/iam/user-activity.d.ts +7 -0
  331. package/dist/pages/iam/user-activity.js +21 -0
  332. package/dist/pages/iam/user-activity.js.map +1 -0
  333. package/dist/pages/iam/user-detail-layout.d.ts +9 -0
  334. package/dist/pages/iam/user-detail-layout.js +18 -0
  335. package/dist/pages/iam/user-detail-layout.js.map +1 -0
  336. package/dist/pages/iam/user-detail.d.ts +7 -0
  337. package/dist/pages/iam/user-detail.js +15 -0
  338. package/dist/pages/iam/user-detail.js.map +1 -0
  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 -0
  352. package/dist/pages/iam/users.js +13 -0
  353. package/dist/pages/iam/users.js.map +1 -0
  354. package/dist/pages/profile/_components/profile-sidebar.d.ts +1 -0
  355. package/dist/pages/profile/account.d.ts +1 -0
  356. package/dist/pages/profile/account.js +33 -0
  357. package/dist/pages/profile/account.js.map +1 -0
  358. package/dist/pages/profile/layout.d.ts +1 -0
  359. package/dist/pages/profile/layout.js +10 -0
  360. package/dist/pages/profile/layout.js.map +1 -0
  361. package/dist/pages/profile/security.d.ts +1 -0
  362. package/dist/pages/profile/security.js +44 -0
  363. package/dist/pages/profile/security.js.map +1 -0
  364. package/dist/provider.d.ts +53 -0
  365. package/dist/types.d.ts +96 -0
  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 +103 -4
  371. package/dist/types-vcfvnAzQ.d.ts +0 -69
  372. package/dist/verification-form-ipSRTtQB.d.ts +0 -22
@@ -0,0 +1,98 @@
1
+ import {
2
+ DataTable
3
+ } from "./chunk-TFVBER3Y.js";
4
+ import {
5
+ useApi
6
+ } from "./chunk-72YRO3A7.js";
7
+
8
+ // src/components/iam/permissions.tsx
9
+ import { Badge, Button } from "@mesob/ui/components";
10
+ import { useState } from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ function Permissions() {
13
+ const { hooks } = useApi();
14
+ const [page, setPage] = useState(1);
15
+ const limit = 20;
16
+ const { data, isLoading, error } = hooks.useQuery("get", "/permissions", {
17
+ params: {
18
+ query: {
19
+ page: String(page),
20
+ limit: String(limit)
21
+ }
22
+ }
23
+ });
24
+ const columns = [
25
+ {
26
+ key: "activity",
27
+ header: "Permission",
28
+ cell: (permission) => /* @__PURE__ */ jsxs("div", { children: [
29
+ /* @__PURE__ */ jsx("p", { className: "font-medium", children: permission.activity }),
30
+ /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "mt-1 font-mono text-xs", children: permission.id })
31
+ ] })
32
+ },
33
+ {
34
+ key: "application",
35
+ header: "Application",
36
+ cell: (permission) => /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: permission.application })
37
+ },
38
+ {
39
+ key: "feature",
40
+ header: "Feature",
41
+ cell: (permission) => /* @__PURE__ */ jsx(Badge, { variant: "outline", children: permission.feature })
42
+ },
43
+ {
44
+ key: "description",
45
+ header: "Description",
46
+ cell: (permission) => /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground max-w-xs truncate", children: String(permission.description ?? "\u2014") })
47
+ }
48
+ ];
49
+ if (error) {
50
+ return /* @__PURE__ */ jsx("div", { className: "p-6 text-center", children: /* @__PURE__ */ jsx("p", { className: "text-destructive", children: "Error loading permissions" }) });
51
+ }
52
+ return /* @__PURE__ */ jsxs("div", { className: "w-full p-6 space-y-4", children: [
53
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center", children: [
54
+ /* @__PURE__ */ jsxs("div", { children: [
55
+ /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold", children: "Permissions" }),
56
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: "View the permission catalog for this tenant" })
57
+ ] }),
58
+ /* @__PURE__ */ jsx(Button, { variant: "outline", children: "Seed Permissions" })
59
+ ] }),
60
+ /* @__PURE__ */ jsx(
61
+ DataTable,
62
+ {
63
+ data: data?.permissions || [],
64
+ columns,
65
+ isLoading,
66
+ emptyMessage: "No permissions found"
67
+ }
68
+ ),
69
+ data && "permissions" in data && data.permissions && data.permissions.length >= limit && /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center", children: [
70
+ /* @__PURE__ */ jsx(
71
+ Button,
72
+ {
73
+ variant: "outline",
74
+ disabled: page === 1,
75
+ onClick: () => setPage((prev) => prev - 1),
76
+ children: "Previous"
77
+ }
78
+ ),
79
+ /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
80
+ "Page ",
81
+ page
82
+ ] }),
83
+ /* @__PURE__ */ jsx(
84
+ Button,
85
+ {
86
+ variant: "outline",
87
+ onClick: () => setPage((prev) => prev + 1),
88
+ children: "Next"
89
+ }
90
+ )
91
+ ] })
92
+ ] });
93
+ }
94
+
95
+ export {
96
+ Permissions
97
+ };
98
+ //# sourceMappingURL=chunk-35TCGAW3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/iam/permissions.tsx"],"sourcesContent":["'use client';\n\nimport { Badge, Button } from '@mesob/ui/components';\nimport { useState } from 'react';\nimport { useApi } from '../../provider';\nimport { DataTable, type DataTableColumn } from '../shared/data-table';\n\n// Permission type from OpenAPI schema\ntype Permission = {\n id: string;\n description?: unknown;\n activity: string;\n application: string;\n feature: string;\n};\n\nexport function Permissions() {\n const { hooks } = useApi();\n const [page, setPage] = useState(1);\n const limit = 20;\n\n // Use openapi-react-query hooks\n const { data, isLoading, error } = hooks.useQuery('get', '/permissions', {\n params: {\n query: {\n page: String(page),\n limit: String(limit),\n },\n },\n });\n\n const columns: DataTableColumn<Permission>[] = [\n {\n key: 'activity',\n header: 'Permission',\n cell: (permission) => (\n <div>\n <p className=\"font-medium\">{permission.activity}</p>\n <Badge variant=\"outline\" className=\"mt-1 font-mono text-xs\">\n {permission.id}\n </Badge>\n </div>\n ),\n },\n {\n key: 'application',\n header: 'Application',\n cell: (permission) => (\n <Badge variant=\"secondary\">{permission.application}</Badge>\n ),\n },\n {\n key: 'feature',\n header: 'Feature',\n cell: (permission) => (\n <Badge variant=\"outline\">{permission.feature}</Badge>\n ),\n },\n {\n key: 'description',\n header: 'Description',\n cell: (permission) => (\n <p className=\"text-sm text-muted-foreground max-w-xs truncate\">\n {String(permission.description ?? '—')}\n </p>\n ),\n },\n ];\n\n if (error) {\n return (\n <div className=\"p-6 text-center\">\n <p className=\"text-destructive\">Error loading permissions</p>\n </div>\n );\n }\n\n return (\n <div className=\"w-full p-6 space-y-4\">\n <div className=\"flex justify-between items-center\">\n <div>\n <h1 className=\"text-3xl font-bold\">Permissions</h1>\n <p className=\"text-muted-foreground\">\n View the permission catalog for this tenant\n </p>\n </div>\n <Button variant=\"outline\">Seed Permissions</Button>\n </div>\n\n <DataTable\n data={(data as { permissions: Permission[] })?.permissions || []}\n columns={columns}\n isLoading={isLoading}\n emptyMessage=\"No permissions found\"\n />\n\n {data &&\n 'permissions' in data &&\n data.permissions &&\n (data.permissions as Permission[]).length >= limit && (\n <div className=\"flex justify-between items-center\">\n <Button\n variant=\"outline\"\n disabled={page === 1}\n onClick={() => setPage((prev) => prev - 1)}\n >\n Previous\n </Button>\n <span className=\"text-sm text-muted-foreground\">Page {page}</span>\n <Button\n variant=\"outline\"\n onClick={() => setPage((prev) => prev + 1)}\n >\n Next\n </Button>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAEA,SAAS,OAAO,cAAc;AAC9B,SAAS,gBAAgB;AAiCjB,SACE,KADF;AApBD,SAAS,cAAc;AAC5B,QAAM,EAAE,MAAM,IAAI,OAAO;AACzB,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,CAAC;AAClC,QAAM,QAAQ;AAGd,QAAM,EAAE,MAAM,WAAW,MAAM,IAAI,MAAM,SAAS,OAAO,gBAAgB;AAAA,IACvE,QAAQ;AAAA,MACN,OAAO;AAAA,QACL,MAAM,OAAO,IAAI;AAAA,QACjB,OAAO,OAAO,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,UAAyC;AAAA,IAC7C;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM,CAAC,eACL,qBAAC,SACC;AAAA,4BAAC,OAAE,WAAU,eAAe,qBAAW,UAAS;AAAA,QAChD,oBAAC,SAAM,SAAQ,WAAU,WAAU,0BAChC,qBAAW,IACd;AAAA,SACF;AAAA,IAEJ;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM,CAAC,eACL,oBAAC,SAAM,SAAQ,aAAa,qBAAW,aAAY;AAAA,IAEvD;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM,CAAC,eACL,oBAAC,SAAM,SAAQ,WAAW,qBAAW,SAAQ;AAAA,IAEjD;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM,CAAC,eACL,oBAAC,OAAE,WAAU,mDACV,iBAAO,WAAW,eAAe,QAAG,GACvC;AAAA,IAEJ;AAAA,EACF;AAEA,MAAI,OAAO;AACT,WACE,oBAAC,SAAI,WAAU,mBACb,8BAAC,OAAE,WAAU,oBAAmB,uCAAyB,GAC3D;AAAA,EAEJ;AAEA,SACE,qBAAC,SAAI,WAAU,wBACb;AAAA,yBAAC,SAAI,WAAU,qCACb;AAAA,2BAAC,SACC;AAAA,4BAAC,QAAG,WAAU,sBAAqB,yBAAW;AAAA,QAC9C,oBAAC,OAAE,WAAU,yBAAwB,yDAErC;AAAA,SACF;AAAA,MACA,oBAAC,UAAO,SAAQ,WAAU,8BAAgB;AAAA,OAC5C;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,MAAO,MAAwC,eAAe,CAAC;AAAA,QAC/D;AAAA,QACA;AAAA,QACA,cAAa;AAAA;AAAA,IACf;AAAA,IAEC,QACC,iBAAiB,QACjB,KAAK,eACJ,KAAK,YAA6B,UAAU,SAC3C,qBAAC,SAAI,WAAU,qCACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,UAAU,SAAS;AAAA,UACnB,SAAS,MAAM,QAAQ,CAAC,SAAS,OAAO,CAAC;AAAA,UAC1C;AAAA;AAAA,MAED;AAAA,MACA,qBAAC,UAAK,WAAU,iCAAgC;AAAA;AAAA,QAAM;AAAA,SAAK;AAAA,MAC3D;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS,MAAM,QAAQ,CAAC,SAAS,OAAO,CAAC;AAAA,UAC1C;AAAA;AAAA,MAED;AAAA,OACF;AAAA,KAEN;AAEJ;","names":[]}
@@ -0,0 +1,36 @@
1
+ import {
2
+ AppLink,
3
+ useNavigate
4
+ } from "./chunk-T6P7UHVP.js";
5
+ import {
6
+ useApi
7
+ } from "./chunk-72YRO3A7.js";
8
+
9
+ // src/pages/iam/shared/page-helpers.tsx
10
+ import { jsx } from "react/jsx-runtime";
11
+ var authApi$ = {
12
+ useQuery(...args) {
13
+ const { hooks } = useApi();
14
+ return hooks.useQuery(...args);
15
+ },
16
+ useMutation(...args) {
17
+ const { hooks } = useApi();
18
+ return hooks.useMutation(...args);
19
+ }
20
+ };
21
+ function Link(props) {
22
+ return /* @__PURE__ */ jsx(AppLink, { ...props });
23
+ }
24
+ function useRouter() {
25
+ const navigate = useNavigate();
26
+ return {
27
+ push: navigate
28
+ };
29
+ }
30
+
31
+ export {
32
+ authApi$,
33
+ Link,
34
+ useRouter
35
+ };
36
+ //# sourceMappingURL=chunk-3BZC4VVD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pages/iam/shared/page-helpers.tsx"],"sourcesContent":["'use client';\n\nimport type { ComponentProps } from 'react';\nimport { useApi } from '../../../provider';\nimport { AppLink, useNavigate } from './navigation';\n\nexport { defaultEntityQueryOptions } from '../../../lib/query-options';\n\ntype HookArgs = [string, string, ...unknown[]];\n\nexport const authApi$ = {\n useQuery(...args: HookArgs) {\n const { hooks } = useApi();\n\n return hooks.useQuery(...args);\n },\n useMutation(...args: HookArgs) {\n const { hooks } = useApi();\n\n return hooks.useMutation(...args);\n },\n};\n\nexport function Link(props: ComponentProps<typeof AppLink>) {\n return <AppLink {...props} />;\n}\n\nexport function useRouter() {\n const navigate = useNavigate();\n\n return {\n push: navigate,\n };\n}\n"],"mappings":";;;;;;;;;AAwBS;AAdF,IAAM,WAAW;AAAA,EACtB,YAAY,MAAgB;AAC1B,UAAM,EAAE,MAAM,IAAI,OAAO;AAEzB,WAAO,MAAM,SAAS,GAAG,IAAI;AAAA,EAC/B;AAAA,EACA,eAAe,MAAgB;AAC7B,UAAM,EAAE,MAAM,IAAI,OAAO;AAEzB,WAAO,MAAM,YAAY,GAAG,IAAI;AAAA,EAClC;AACF;AAEO,SAAS,KAAK,OAAuC;AAC1D,SAAO,oBAAC,WAAS,GAAG,OAAO;AAC7B;AAEO,SAAS,YAAY;AAC1B,QAAM,WAAW,YAAY;AAE7B,SAAO;AAAA,IACL,MAAM;AAAA,EACR;AACF;","names":[]}
@@ -0,0 +1,188 @@
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-phone.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 VerifyPhone = ({
26
+ verificationId,
27
+ context,
28
+ phone = "",
29
+ redirectUrl
30
+ }) => {
31
+ const { hooks, refresh, setAuth } = useApi();
32
+ const { config } = useConfig();
33
+ const mesob = useMesob();
34
+ const Link = mesob?.navigation?.Link;
35
+ const t = useTranslator("Auth.verification");
36
+ const common = useTranslator("Common");
37
+ const footer = useTranslator("Auth.forgotPassword.footer");
38
+ const [isLoading, setIsLoading] = useState(false);
39
+ const [error, setError] = useState(null);
40
+ const verifyPhoneMutation = hooks.useMutation(
41
+ "post",
42
+ "/phone/verification/confirm"
43
+ );
44
+ const requestPhoneMutation = hooks.useMutation(
45
+ "post",
46
+ "/phone/verification/request"
47
+ );
48
+ const signInLink = config.navigation?.links?.signIn || "/auth/sign-in";
49
+ const onNavigate = config.navigation?.onNavigate || ((path) => {
50
+ if (typeof window !== "undefined") {
51
+ window.location.href = path;
52
+ }
53
+ });
54
+ const logoImage = config.ui.logoImage;
55
+ const defaultRedirect = redirectUrl || config.navigation?.defaultRedirectUrl || "/";
56
+ useEffect(() => {
57
+ if (error) {
58
+ toast.error(error.title || "Error", {
59
+ description: error.description
60
+ });
61
+ }
62
+ }, [error]);
63
+ const handleSubmit = async (values) => {
64
+ if (!verificationId) {
65
+ setError({
66
+ title: t("errors.fallback"),
67
+ description: t("errors.fallback")
68
+ });
69
+ return;
70
+ }
71
+ setIsLoading(true);
72
+ setError(null);
73
+ try {
74
+ const res = await verifyPhoneMutation.mutateAsync({
75
+ body: {
76
+ verificationId,
77
+ code: values.code,
78
+ context
79
+ }
80
+ });
81
+ if (res && "user" in res && "session" in res && res.session) {
82
+ setAuth(res);
83
+ onNavigate(defaultRedirect);
84
+ return;
85
+ }
86
+ await refresh();
87
+ onNavigate(defaultRedirect);
88
+ } catch (err) {
89
+ handleError(err, setError, t);
90
+ } finally {
91
+ setIsLoading(false);
92
+ }
93
+ };
94
+ const handleResend = async () => {
95
+ setError(null);
96
+ try {
97
+ const targetPhone = context === "sign-up" ? phone : null;
98
+ if (!targetPhone) {
99
+ setError({
100
+ title: t("errors.fallback"),
101
+ description: t("phone.missingPhone")
102
+ });
103
+ return;
104
+ }
105
+ const res = await requestPhoneMutation.mutateAsync({
106
+ body: {
107
+ phone: targetPhone,
108
+ context
109
+ }
110
+ });
111
+ if (res && "verificationId" in res && res.verificationId) {
112
+ onNavigate(
113
+ `/auth/verify-phone?context=${context}&verificationId=${res.verificationId}&phone=${targetPhone}`
114
+ );
115
+ return;
116
+ }
117
+ setError({
118
+ title: t("errors.fallback"),
119
+ description: t("phone.resendFailed")
120
+ });
121
+ } catch (err) {
122
+ handleError(err, setError, t);
123
+ }
124
+ };
125
+ if (!verificationId) {
126
+ return /* @__PURE__ */ jsx(
127
+ AuthLayout,
128
+ {
129
+ title: common("invalidLinkTitle"),
130
+ description: common("invalidLinkDescription"),
131
+ footer: /* @__PURE__ */ jsx(Link, { href: signInLink, className: "text-primary hover:underline", children: footer("backToSignIn") }),
132
+ children: /* @__PURE__ */ jsx("div", {})
133
+ }
134
+ );
135
+ }
136
+ let errorContent = null;
137
+ if (error) {
138
+ if (typeof error === "string") {
139
+ errorContent = { title: "Error", description: error };
140
+ } else {
141
+ errorContent = error;
142
+ }
143
+ }
144
+ return /* @__PURE__ */ jsxs(
145
+ AuthLayout,
146
+ {
147
+ title: config.ui.name,
148
+ description: t("phone.description", {
149
+ target: phone || t("phone.missingPhone")
150
+ }),
151
+ logoImage,
152
+ footer: Link ? /* @__PURE__ */ jsx(Link, { href: signInLink, className: "text-primary hover:underline", children: footer("backToSignIn") }) : /* @__PURE__ */ jsx(
153
+ "a",
154
+ {
155
+ href: signInLink,
156
+ onClick: (e) => {
157
+ e.preventDefault();
158
+ onNavigate(signInLink);
159
+ },
160
+ className: "text-primary hover:underline",
161
+ children: footer("backToSignIn")
162
+ }
163
+ ),
164
+ children: [
165
+ /* @__PURE__ */ jsx(
166
+ VerificationForm,
167
+ {
168
+ verificationId,
169
+ onSubmit: handleSubmit,
170
+ onResend: handleResend,
171
+ isLoading: isLoading || verifyPhoneMutation.isPending || requestPhoneMutation.isPending,
172
+ error
173
+ }
174
+ ),
175
+ errorContent && /* @__PURE__ */ jsxs(Alert, { variant: "destructive", className: "mt-4", children: [
176
+ /* @__PURE__ */ jsx(IconAlertCircle, { className: "h-4 w-4" }),
177
+ /* @__PURE__ */ jsx(AlertTitle, { children: errorContent.title }),
178
+ /* @__PURE__ */ jsx(AlertDescription, { children: errorContent.description })
179
+ ] })
180
+ ]
181
+ }
182
+ );
183
+ };
184
+
185
+ export {
186
+ VerifyPhone
187
+ };
188
+ //# sourceMappingURL=chunk-45UCLKH2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/auth/verify-phone.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 { AuthResponse } from '../../types';\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 VerifyPhoneProps = {\n verificationId: string;\n context: 'sign-in' | 'sign-up';\n phone?: string;\n redirectUrl?: string;\n};\n\nexport const VerifyPhone = ({\n verificationId,\n context,\n phone = '',\n redirectUrl,\n}: VerifyPhoneProps) => {\n const { hooks, refresh, setAuth } = useApi();\n const { config } = useConfig();\n const mesob = useMesob();\n const Link = mesob?.navigation?.Link;\n const t = useTranslator('Auth.verification');\n const common = useTranslator('Common');\n const footer = useTranslator('Auth.forgotPassword.footer');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<AuthErrorContent | null>(null);\n\n const verifyPhoneMutation = hooks.useMutation(\n 'post',\n '/phone/verification/confirm',\n );\n const requestPhoneMutation = hooks.useMutation(\n 'post',\n '/phone/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.fallback'),\n });\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const res = await verifyPhoneMutation.mutateAsync({\n body: {\n verificationId,\n code: values.code,\n context,\n },\n });\n if (res && 'user' in res && 'session' in res && res.session) {\n setAuth(res as AuthResponse);\n onNavigate(defaultRedirect);\n return;\n }\n await refresh();\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 targetPhone = context === 'sign-up' ? phone : null;\n if (!targetPhone) {\n setError({\n title: t('errors.fallback'),\n description: t('phone.missingPhone'),\n });\n return;\n }\n const res = await requestPhoneMutation.mutateAsync({\n body: {\n phone: targetPhone,\n context,\n },\n });\n if (res && 'verificationId' in res && res.verificationId) {\n onNavigate(\n `/auth/verify-phone?context=${context}&verificationId=${res.verificationId}&phone=${targetPhone}`,\n );\n return;\n }\n setError({\n title: t('errors.fallback'),\n description: t('phone.resendFailed'),\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 href={signInLink} className=\"text-primary hover:underline\">\n {footer('backToSignIn')}\n </Link>\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('phone.description', {\n target: phone || t('phone.missingPhone'),\n })}\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 verifyPhoneMutation.isPending ||\n requestPhoneMutation.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,115 @@
1
+ // src/constants/auth.error.codes.ts
2
+ var AUTH_ERROR_MAPPING = {
3
+ USER_NOT_FOUND: {
4
+ title: "Account Not Found",
5
+ description: "We could not find an account with that identifier. Please check your spelling or sign up."
6
+ },
7
+ INVALID_PASSWORD: {
8
+ title: "Invalid Password",
9
+ description: "The password you entered is incorrect. Please try again."
10
+ },
11
+ USER_EXISTS: {
12
+ title: "Account Already Exists",
13
+ description: "An account with this identifier already exists. Please sign in instead."
14
+ },
15
+ VERIFICATION_EXPIRED: {
16
+ title: "Verification Expired",
17
+ description: "The verification code or link has expired. Please request a new one."
18
+ },
19
+ VERIFICATION_MISMATCH: {
20
+ title: "Invalid Code",
21
+ description: "The verification code you entered is invalid. Please double-check and try again."
22
+ },
23
+ VERIFICATION_NOT_FOUND: {
24
+ title: "Verification Not Found",
25
+ description: "We could not find a pending verification request. Please restart the process."
26
+ },
27
+ TOO_MANY_ATTEMPTS: {
28
+ title: "Too Many Attempts",
29
+ description: "You have made too many requests recently. Please wait a moment before trying again."
30
+ },
31
+ REQUIRES_VERIFICATION: {
32
+ title: "Verification Required",
33
+ description: "You need to verify your account before you can continue. Please check your email or phone."
34
+ },
35
+ UNAUTHORIZED: {
36
+ title: "Unauthorized",
37
+ description: "You are not authorized to perform this action. Please sign in again."
38
+ },
39
+ ACCESS_DENIED: {
40
+ title: "Access Denied",
41
+ description: "You do not have permission to access this resource. Please contact support if you believe this is an error."
42
+ },
43
+ HAS_NO_PASSWORD: {
44
+ title: "No Password Set",
45
+ description: "Your account does not have a password yet. Continue to set a password before signing in."
46
+ },
47
+ PASSWORD_ALREADY_SET: {
48
+ title: "Password Already Set",
49
+ description: "This account already has a password. Use the normal sign-in form instead."
50
+ }
51
+ };
52
+ var validCodes = Object.keys(AUTH_ERROR_MAPPING);
53
+
54
+ // src/utils/handle-error.ts
55
+ function isAuthError(err) {
56
+ return typeof err === "object" && err !== null && "message" in err && typeof err.message === "string";
57
+ }
58
+ function extractErrorCode(err) {
59
+ if (err.code && validCodes.includes(err.code)) {
60
+ return err.code;
61
+ }
62
+ if (err.message) {
63
+ const messageUpper = err.message.toUpperCase().trim();
64
+ if (validCodes.includes(messageUpper)) {
65
+ return messageUpper;
66
+ }
67
+ }
68
+ return "";
69
+ }
70
+ function sanitizeErrorMessage(message) {
71
+ const lowerMessage = message.toLowerCase();
72
+ const isDatabaseError = lowerMessage.includes("failed query") || lowerMessage.includes("select") || lowerMessage.includes("insert") || lowerMessage.includes("update") || lowerMessage.includes("delete") || lowerMessage.includes("from") || lowerMessage.includes("where") || lowerMessage.includes("limit") || lowerMessage.includes("params:") || lowerMessage.includes("query") || message.includes('"iam".') || message.includes('"tenants"') || message.includes('"users"') || message.includes('"sessions"') || message.includes('"accounts"') || lowerMessage.includes("relation") || lowerMessage.includes("column") || lowerMessage.includes("syntax error") || lowerMessage.includes("database") || lowerMessage.includes("postgres") || lowerMessage.includes("sql");
73
+ if (isDatabaseError) {
74
+ return "An error occurred while processing your request";
75
+ }
76
+ return message;
77
+ }
78
+ function handleAuthError(err, setError, t) {
79
+ const errorCode = extractErrorCode(err);
80
+ if (errorCode && AUTH_ERROR_MAPPING[errorCode]) {
81
+ const mapping = AUTH_ERROR_MAPPING[errorCode];
82
+ setError({
83
+ title: mapping.title,
84
+ description: mapping.description
85
+ });
86
+ return;
87
+ }
88
+ const sanitizedMessage = sanitizeErrorMessage(
89
+ err.message || t("errors.fallback")
90
+ );
91
+ setError({
92
+ title: t("errors.fallback"),
93
+ description: sanitizedMessage
94
+ });
95
+ }
96
+ function handleGenericError(err, setError, t) {
97
+ const rawMessage = err instanceof Error ? err.message : t("errors.fallback");
98
+ const sanitizedMessage = sanitizeErrorMessage(rawMessage);
99
+ setError({
100
+ title: "Error",
101
+ description: sanitizedMessage
102
+ });
103
+ }
104
+ var handleError = (err, setError, t) => {
105
+ if (isAuthError(err)) {
106
+ handleAuthError(err, setError, t);
107
+ } else {
108
+ handleGenericError(err, setError, t);
109
+ }
110
+ };
111
+
112
+ export {
113
+ handleError
114
+ };
115
+ //# sourceMappingURL=chunk-55BMNC4S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/constants/auth.error.codes.ts","../src/utils/handle-error.ts"],"sourcesContent":["export const AUTH_ERROR_MAPPING: Record<\n string,\n { title: string; description: string }\n> = {\n USER_NOT_FOUND: {\n title: 'Account Not Found',\n description:\n 'We could not find an account with that identifier. Please check your spelling or sign up.',\n },\n INVALID_PASSWORD: {\n title: 'Invalid Password',\n description: 'The password you entered is incorrect. Please try again.',\n },\n USER_EXISTS: {\n title: 'Account Already Exists',\n description:\n 'An account with this identifier already exists. Please sign in instead.',\n },\n VERIFICATION_EXPIRED: {\n title: 'Verification Expired',\n description:\n 'The verification code or link has expired. Please request a new one.',\n },\n VERIFICATION_MISMATCH: {\n title: 'Invalid Code',\n description:\n 'The verification code you entered is invalid. Please double-check and try again.',\n },\n VERIFICATION_NOT_FOUND: {\n title: 'Verification Not Found',\n description:\n 'We could not find a pending verification request. Please restart the process.',\n },\n TOO_MANY_ATTEMPTS: {\n title: 'Too Many Attempts',\n description:\n 'You have made too many requests recently. Please wait a moment before trying again.',\n },\n REQUIRES_VERIFICATION: {\n title: 'Verification Required',\n description:\n 'You need to verify your account before you can continue. Please check your email or phone.',\n },\n UNAUTHORIZED: {\n title: 'Unauthorized',\n description:\n 'You are not authorized to perform this action. Please sign in again.',\n },\n ACCESS_DENIED: {\n title: 'Access Denied',\n description:\n 'You do not have permission to access this resource. Please contact support if you believe this is an error.',\n },\n HAS_NO_PASSWORD: {\n title: 'No Password Set',\n description:\n 'Your account does not have a password yet. Continue to set a password before signing in.',\n },\n PASSWORD_ALREADY_SET: {\n title: 'Password Already Set',\n description:\n 'This account already has a password. Use the normal sign-in form instead.',\n },\n};\n\nexport const validCodes = Object.keys(AUTH_ERROR_MAPPING);\n","import { AUTH_ERROR_MAPPING, validCodes } from '../constants/auth.error.codes';\nimport type { AuthError } from '../types';\n\nexport type AuthErrorContent = {\n title: string;\n description: string;\n};\n\ntype TranslatorFunction = (\n key: string,\n params?: Record<string, string | number>,\n) => string;\n\n// Type guard to check if error is an AuthError\nfunction isAuthError(err: unknown): err is AuthError {\n return (\n typeof err === 'object' &&\n err !== null &&\n 'message' in err &&\n typeof (err as { message: unknown }).message === 'string'\n );\n}\n\nfunction extractErrorCode(err: AuthError): string {\n if (err.code && validCodes.includes(err.code)) {\n return err.code;\n }\n if (err.message) {\n const messageUpper = err.message.toUpperCase().trim();\n if (validCodes.includes(messageUpper)) {\n return messageUpper;\n }\n }\n return '';\n}\n\nfunction sanitizeErrorMessage(message: string): string {\n const lowerMessage = message.toLowerCase();\n const isDatabaseError =\n lowerMessage.includes('failed query') ||\n lowerMessage.includes('select') ||\n lowerMessage.includes('insert') ||\n lowerMessage.includes('update') ||\n lowerMessage.includes('delete') ||\n lowerMessage.includes('from') ||\n lowerMessage.includes('where') ||\n lowerMessage.includes('limit') ||\n lowerMessage.includes('params:') ||\n lowerMessage.includes('query') ||\n message.includes('\"iam\".') ||\n message.includes('\"tenants\"') ||\n message.includes('\"users\"') ||\n message.includes('\"sessions\"') ||\n message.includes('\"accounts\"') ||\n lowerMessage.includes('relation') ||\n lowerMessage.includes('column') ||\n lowerMessage.includes('syntax error') ||\n lowerMessage.includes('database') ||\n lowerMessage.includes('postgres') ||\n lowerMessage.includes('sql');\n\n if (isDatabaseError) {\n return 'An error occurred while processing your request';\n }\n\n return message;\n}\n\nfunction handleAuthError(\n err: AuthError,\n setError: (error: AuthErrorContent | null) => void,\n t: TranslatorFunction,\n) {\n const errorCode = extractErrorCode(err);\n\n if (errorCode && AUTH_ERROR_MAPPING[errorCode]) {\n const mapping = AUTH_ERROR_MAPPING[errorCode];\n setError({\n title: mapping.title,\n description: mapping.description,\n });\n return;\n }\n\n const sanitizedMessage = sanitizeErrorMessage(\n err.message || t('errors.fallback'),\n );\n setError({\n title: t('errors.fallback'),\n description: sanitizedMessage,\n });\n}\n\nfunction handleGenericError(\n err: unknown,\n setError: (error: AuthErrorContent | null) => void,\n t: TranslatorFunction,\n) {\n const rawMessage = err instanceof Error ? err.message : t('errors.fallback');\n const sanitizedMessage = sanitizeErrorMessage(rawMessage);\n setError({\n title: 'Error',\n description: sanitizedMessage,\n });\n}\n\nexport const handleError = (\n err: unknown,\n setError: (error: AuthErrorContent | null) => void,\n t: TranslatorFunction,\n) => {\n if (isAuthError(err)) {\n handleAuthError(err, setError, t);\n } else {\n handleGenericError(err, setError, t);\n }\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,94 @@
1
+ import {
2
+ VerifyChangePhoneForm
3
+ } from "./chunk-ZG6WFZHX.js";
4
+ import {
5
+ RequestChangePhoneForm
6
+ } from "./chunk-C26NPUPI.js";
7
+ import {
8
+ useSession
9
+ } from "./chunk-72YRO3A7.js";
10
+
11
+ // src/components/profile/change-phone-form.tsx
12
+ import {
13
+ Button,
14
+ Collapsible,
15
+ CollapsibleContent,
16
+ CollapsibleTrigger
17
+ } from "@mesob/ui/components";
18
+ import { IconChevronDown } from "@tabler/icons-react";
19
+ import { useState } from "react";
20
+ import { jsx, jsxs } from "react/jsx-runtime";
21
+ function ChangePhoneForm() {
22
+ const { user } = useSession();
23
+ const [isOpen, setIsOpen] = useState(false);
24
+ const [showOtp, setShowOtp] = useState(false);
25
+ const [verificationId, setVerificationId] = useState(null);
26
+ const [newPhone, setNewPhone] = useState("");
27
+ const resetForms = () => {
28
+ setShowOtp(false);
29
+ setVerificationId(null);
30
+ setNewPhone("");
31
+ };
32
+ const handleRequestSuccess = (id, phone) => {
33
+ setVerificationId(id);
34
+ setNewPhone(phone);
35
+ setShowOtp(true);
36
+ };
37
+ const handleVerifySuccess = () => {
38
+ resetForms();
39
+ setIsOpen(false);
40
+ };
41
+ const handleCancel = () => {
42
+ resetForms();
43
+ setIsOpen(false);
44
+ };
45
+ const title = user?.phone ? "Change Phone" : "Add Phone";
46
+ const description = user?.phone ? "Update your phone number" : "Add a phone number to your account";
47
+ return /* @__PURE__ */ jsx(Collapsible, { open: isOpen, onOpenChange: setIsOpen, children: /* @__PURE__ */ jsxs("div", { className: "border rounded-lg", children: [
48
+ /* @__PURE__ */ jsxs(
49
+ CollapsibleTrigger,
50
+ {
51
+ render: /* @__PURE__ */ jsx(
52
+ Button,
53
+ {
54
+ variant: "ghost",
55
+ className: "w-full justify-between p-4 h-auto"
56
+ }
57
+ ),
58
+ children: [
59
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start", children: [
60
+ /* @__PURE__ */ jsx("span", { className: "font-medium", children: title }),
61
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: description })
62
+ ] }),
63
+ /* @__PURE__ */ jsx(
64
+ IconChevronDown,
65
+ {
66
+ className: `h-4 w-4 transition-transform ${isOpen ? "rotate-180" : ""}`
67
+ }
68
+ )
69
+ ]
70
+ }
71
+ ),
72
+ /* @__PURE__ */ jsx(CollapsibleContent, { children: showOtp ? /* @__PURE__ */ jsx(
73
+ VerifyChangePhoneForm,
74
+ {
75
+ phone: newPhone,
76
+ verificationId,
77
+ onSuccess: handleVerifySuccess,
78
+ onCancel: handleCancel
79
+ }
80
+ ) : /* @__PURE__ */ jsx(
81
+ RequestChangePhoneForm,
82
+ {
83
+ onSuccess: handleRequestSuccess,
84
+ onCancel: handleCancel,
85
+ buttonText: title
86
+ }
87
+ ) })
88
+ ] }) });
89
+ }
90
+
91
+ export {
92
+ ChangePhoneForm
93
+ };
94
+ //# sourceMappingURL=chunk-5F5FZMHE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/profile/change-phone-form.tsx"],"sourcesContent":["'use client';\n\nimport {\n Button,\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '@mesob/ui/components';\nimport { IconChevronDown } from '@tabler/icons-react';\nimport { useState } from 'react';\nimport { useSession } from '../../provider';\nimport { RequestChangePhoneForm } from './request-change-phone-form';\nimport { VerifyChangePhoneForm } from './verify-change-phone-form';\n\nexport function ChangePhoneForm() {\n const { user } = useSession();\n const [isOpen, setIsOpen] = useState(false);\n const [showOtp, setShowOtp] = useState(false);\n const [verificationId, setVerificationId] = useState<string | null>(null);\n const [newPhone, setNewPhone] = useState<string>('');\n\n const resetForms = () => {\n setShowOtp(false);\n setVerificationId(null);\n setNewPhone('');\n };\n\n const handleRequestSuccess = (id: string, phone: string) => {\n setVerificationId(id);\n setNewPhone(phone);\n setShowOtp(true);\n };\n\n const handleVerifySuccess = () => {\n resetForms();\n setIsOpen(false);\n };\n\n const handleCancel = () => {\n resetForms();\n setIsOpen(false);\n };\n\n const title = user?.phone ? 'Change Phone' : 'Add Phone';\n const description = user?.phone\n ? 'Update your phone number'\n : 'Add a phone number to your account';\n\n return (\n <Collapsible open={isOpen} onOpenChange={setIsOpen}>\n <div className=\"border rounded-lg\">\n <CollapsibleTrigger\n render={\n <Button\n variant=\"ghost\"\n className=\"w-full justify-between p-4 h-auto\"\n />\n }\n >\n <div className=\"flex flex-col items-start\">\n <span className=\"font-medium\">{title}</span>\n <span className=\"text-sm text-muted-foreground\">{description}</span>\n </div>\n <IconChevronDown\n className={`h-4 w-4 transition-transform ${\n isOpen ? 'rotate-180' : ''\n }`}\n />\n </CollapsibleTrigger>\n\n <CollapsibleContent>\n {showOtp ? (\n <VerifyChangePhoneForm\n phone={newPhone}\n verificationId={verificationId}\n onSuccess={handleVerifySuccess}\n onCancel={handleCancel}\n />\n ) : (\n <RequestChangePhoneForm\n onSuccess={handleRequestSuccess}\n onCancel={handleCancel}\n buttonText={title}\n />\n )}\n </CollapsibleContent>\n </div>\n </Collapsible>\n );\n}\n"],"mappings":";;;;;;;;;;;AAEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AA4Cb,cAMF,YANE;AAvCL,SAAS,kBAAkB;AAChC,QAAM,EAAE,KAAK,IAAI,WAAW;AAC5B,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAwB,IAAI;AACxE,QAAM,CAAC,UAAU,WAAW,IAAI,SAAiB,EAAE;AAEnD,QAAM,aAAa,MAAM;AACvB,eAAW,KAAK;AAChB,sBAAkB,IAAI;AACtB,gBAAY,EAAE;AAAA,EAChB;AAEA,QAAM,uBAAuB,CAAC,IAAY,UAAkB;AAC1D,sBAAkB,EAAE;AACpB,gBAAY,KAAK;AACjB,eAAW,IAAI;AAAA,EACjB;AAEA,QAAM,sBAAsB,MAAM;AAChC,eAAW;AACX,cAAU,KAAK;AAAA,EACjB;AAEA,QAAM,eAAe,MAAM;AACzB,eAAW;AACX,cAAU,KAAK;AAAA,EACjB;AAEA,QAAM,QAAQ,MAAM,QAAQ,iBAAiB;AAC7C,QAAM,cAAc,MAAM,QACtB,6BACA;AAEJ,SACE,oBAAC,eAAY,MAAM,QAAQ,cAAc,WACvC,+BAAC,SAAI,WAAU,qBACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,QACE;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAU;AAAA;AAAA,QACZ;AAAA,QAGF;AAAA,+BAAC,SAAI,WAAU,6BACb;AAAA,gCAAC,UAAK,WAAU,eAAe,iBAAM;AAAA,YACrC,oBAAC,UAAK,WAAU,iCAAiC,uBAAY;AAAA,aAC/D;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,gCACT,SAAS,eAAe,EAC1B;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IACF;AAAA,IAEA,oBAAC,sBACE,oBACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP;AAAA,QACA,WAAW;AAAA,QACX,UAAU;AAAA;AAAA,IACZ,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,QACX,UAAU;AAAA,QACV,YAAY;AAAA;AAAA,IACd,GAEJ;AAAA,KACF,GACF;AAEJ;","names":[]}
@@ -0,0 +1,31 @@
1
+ // src/components/skeletons/auth-form-skeleton.tsx
2
+ import { Skeleton } from "@mesob/ui/components";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ function AuthFormSkeleton() {
5
+ return /* @__PURE__ */ jsxs("div", { className: "w-full max-w-md space-y-6 p-6", children: [
6
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2 text-center", children: [
7
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-48 mx-auto" }),
8
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-64 mx-auto" })
9
+ ] }),
10
+ /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
11
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
12
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" }),
13
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-full" })
14
+ ] }),
15
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
16
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" }),
17
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-full" })
18
+ ] }),
19
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-full" })
20
+ ] }),
21
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
22
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-px w-full" }),
23
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-32 mx-auto" })
24
+ ] })
25
+ ] });
26
+ }
27
+
28
+ export {
29
+ AuthFormSkeleton
30
+ };
31
+ //# sourceMappingURL=chunk-5M7I7WNH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/skeletons/auth-form-skeleton.tsx"],"sourcesContent":["'use client';\n\nimport { Skeleton } from '@mesob/ui/components';\n\nexport function AuthFormSkeleton() {\n return (\n <div className=\"w-full max-w-md space-y-6 p-6\">\n <div className=\"space-y-2 text-center\">\n <Skeleton className=\"h-8 w-48 mx-auto\" />\n <Skeleton className=\"h-4 w-64 mx-auto\" />\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-10 w-full\" />\n </div>\n\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-10 w-full\" />\n </div>\n\n <Skeleton className=\"h-10 w-full\" />\n </div>\n\n <div className=\"space-y-2\">\n <Skeleton className=\"h-px w-full\" />\n <Skeleton className=\"h-4 w-32 mx-auto\" />\n </div>\n </div>\n );\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AAKnB,SACE,KADF;AAHC,SAAS,mBAAmB;AACjC,SACE,qBAAC,SAAI,WAAU,iCACb;AAAA,yBAAC,SAAI,WAAU,yBACb;AAAA,0BAAC,YAAS,WAAU,oBAAmB;AAAA,MACvC,oBAAC,YAAS,WAAU,oBAAmB;AAAA,OACzC;AAAA,IAEA,qBAAC,SAAI,WAAU,aACb;AAAA,2BAAC,SAAI,WAAU,aACb;AAAA,4BAAC,YAAS,WAAU,YAAW;AAAA,QAC/B,oBAAC,YAAS,WAAU,eAAc;AAAA,SACpC;AAAA,MAEA,qBAAC,SAAI,WAAU,aACb;AAAA,4BAAC,YAAS,WAAU,YAAW;AAAA,QAC/B,oBAAC,YAAS,WAAU,eAAc;AAAA,SACpC;AAAA,MAEA,oBAAC,YAAS,WAAU,eAAc;AAAA,OACpC;AAAA,IAEA,qBAAC,SAAI,WAAU,aACb;AAAA,0BAAC,YAAS,WAAU,eAAc;AAAA,MAClC,oBAAC,YAAS,WAAU,oBAAmB;AAAA,OACzC;AAAA,KACF;AAEJ;","names":[]}