@alepha/ui 0.13.0 → 0.13.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 (123) hide show
  1. package/dist/admin/{AdminFiles-CllAxb1B.js → AdminFiles-BjofP3OC.js} +11 -11
  2. package/dist/admin/AdminFiles-BjofP3OC.js.map +1 -0
  3. package/dist/admin/AdminFiles-DldZB7oo.js +3 -0
  4. package/dist/admin/AdminJobs-BOq6AZOW.js +3 -0
  5. package/dist/admin/{AdminJobs-BXkFtlVo.js → AdminJobs-CDnVxEv6.js} +11 -11
  6. package/dist/admin/AdminJobs-CDnVxEv6.js.map +1 -0
  7. package/dist/admin/AdminLayout-Bgx25J8m.js +3 -0
  8. package/dist/admin/{AdminLayout-CtkVYk-u.js → AdminLayout-CervL8LV.js} +6 -6
  9. package/dist/admin/AdminLayout-CervL8LV.js.map +1 -0
  10. package/dist/admin/AdminNotifications-BDQXt3-e.js +3 -0
  11. package/dist/admin/{AdminNotifications-DnnulNNV.js → AdminNotifications-DvI2989x.js} +6 -6
  12. package/dist/admin/AdminNotifications-DvI2989x.js.map +1 -0
  13. package/dist/admin/AdminParameters-D_v0GAvI.js +3 -0
  14. package/dist/admin/{AdminParameters-B3hvpLpu.js → AdminParameters-P1LB6ZI1.js} +7 -7
  15. package/dist/admin/AdminParameters-P1LB6ZI1.js.map +1 -0
  16. package/dist/admin/{AdminSessions-Pjdz-iZx.js → AdminSessions-CmDVneE2.js} +11 -11
  17. package/dist/admin/AdminSessions-CmDVneE2.js.map +1 -0
  18. package/dist/admin/AdminSessions-Dkk_fzWK.js +3 -0
  19. package/dist/admin/{AdminUsers-C1HsrRxn.js → AdminUsers-88De5pev.js} +9 -9
  20. package/dist/admin/AdminUsers-88De5pev.js.map +1 -0
  21. package/dist/admin/AdminUsers-oyAXqZ5l.js +3 -0
  22. package/dist/admin/AdminVerifications-D93TKymL.js +3 -0
  23. package/dist/admin/{AdminVerifications-VMpm30mS.js → AdminVerifications-DBVEoqJe.js} +6 -6
  24. package/dist/admin/AdminVerifications-DBVEoqJe.js.map +1 -0
  25. package/dist/admin/index.d.ts +320 -320
  26. package/dist/admin/index.js +17 -17
  27. package/dist/auth/{IconGoogle-Bfmuv9Rv.js → IconGoogle-v_58os2T.js} +1 -1
  28. package/dist/auth/{IconGoogle-Bfmuv9Rv.js.map → IconGoogle-v_58os2T.js.map} +1 -1
  29. package/dist/auth/Login-BC2jTczq.js +4 -0
  30. package/dist/auth/{Login-JeXFsUf5.js → Login-OCrvjs9U.js} +12 -12
  31. package/dist/auth/Login-OCrvjs9U.js.map +1 -0
  32. package/dist/auth/Register-Dh0lsQmI.js +4 -0
  33. package/dist/auth/{Register-CPQnvXCZ.js → Register-Ei34GSba.js} +16 -16
  34. package/dist/auth/Register-Ei34GSba.js.map +1 -0
  35. package/dist/auth/ResetPassword-BnlAQAOE.js +3 -0
  36. package/dist/auth/{ResetPassword-BzUjGG_-.js → ResetPassword-tO0oMzfo.js} +12 -12
  37. package/dist/auth/ResetPassword-tO0oMzfo.js.map +1 -0
  38. package/dist/auth/index.d.ts +1528 -1898
  39. package/dist/auth/index.js +10 -10
  40. package/dist/auth/index.js.map +1 -1
  41. package/dist/core/index.d.ts +152 -152
  42. package/dist/core/index.js +13 -6
  43. package/dist/core/index.js.map +1 -1
  44. package/package.json +6 -6
  45. package/src/admin/components/AdminParameters.tsx +1 -1
  46. package/src/core/components/buttons/OmnibarButton.tsx +10 -5
  47. package/src/core/components/layout/Omnibar.tsx +6 -1
  48. package/src/core/index.ts +1 -1
  49. package/dist/admin/AdminFiles-BM6_7_5A.cjs +0 -4
  50. package/dist/admin/AdminFiles-BaCIMeNt.js +0 -4
  51. package/dist/admin/AdminFiles-CllAxb1B.js.map +0 -1
  52. package/dist/admin/AdminFiles-DC3T8uWZ.cjs +0 -122
  53. package/dist/admin/AdminFiles-DC3T8uWZ.cjs.map +0 -1
  54. package/dist/admin/AdminJobs-BXkFtlVo.js.map +0 -1
  55. package/dist/admin/AdminJobs-C428qrNQ.cjs +0 -130
  56. package/dist/admin/AdminJobs-C428qrNQ.cjs.map +0 -1
  57. package/dist/admin/AdminJobs-DCPPaJ4i.cjs +0 -4
  58. package/dist/admin/AdminJobs-yC6DarGO.js +0 -4
  59. package/dist/admin/AdminLayout-Bqo4cd33.cjs +0 -4
  60. package/dist/admin/AdminLayout-CQpxfko6.js +0 -4
  61. package/dist/admin/AdminLayout-CiLlywAQ.cjs +0 -93
  62. package/dist/admin/AdminLayout-CiLlywAQ.cjs.map +0 -1
  63. package/dist/admin/AdminLayout-CtkVYk-u.js.map +0 -1
  64. package/dist/admin/AdminNotifications-DNUeJ-PW.cjs +0 -44
  65. package/dist/admin/AdminNotifications-DNUeJ-PW.cjs.map +0 -1
  66. package/dist/admin/AdminNotifications-DaMu1AQ4.js +0 -4
  67. package/dist/admin/AdminNotifications-DnnulNNV.js.map +0 -1
  68. package/dist/admin/AdminNotifications-ihgbKVCx.cjs +0 -4
  69. package/dist/admin/AdminParameters-B3hvpLpu.js.map +0 -1
  70. package/dist/admin/AdminParameters-U4lU1rUF.cjs +0 -4
  71. package/dist/admin/AdminParameters-gdf7036N.cjs +0 -44
  72. package/dist/admin/AdminParameters-gdf7036N.cjs.map +0 -1
  73. package/dist/admin/AdminParameters-prMcCgxf.js +0 -4
  74. package/dist/admin/AdminSessions-BF_P4lHs.cjs +0 -128
  75. package/dist/admin/AdminSessions-BF_P4lHs.cjs.map +0 -1
  76. package/dist/admin/AdminSessions-CATIU61I.cjs +0 -4
  77. package/dist/admin/AdminSessions-DqOXOpYR.js +0 -4
  78. package/dist/admin/AdminSessions-Pjdz-iZx.js.map +0 -1
  79. package/dist/admin/AdminUsers-BgTL-zSY.js +0 -4
  80. package/dist/admin/AdminUsers-C1HsrRxn.js.map +0 -1
  81. package/dist/admin/AdminUsers-HqvxwNGZ.cjs +0 -4
  82. package/dist/admin/AdminUsers-M2uEQbp5.cjs +0 -109
  83. package/dist/admin/AdminUsers-M2uEQbp5.cjs.map +0 -1
  84. package/dist/admin/AdminVerifications-BVssbtfU.cjs +0 -44
  85. package/dist/admin/AdminVerifications-BVssbtfU.cjs.map +0 -1
  86. package/dist/admin/AdminVerifications-Df6DRgNo.js +0 -4
  87. package/dist/admin/AdminVerifications-DxAtcYUR.cjs +0 -4
  88. package/dist/admin/AdminVerifications-VMpm30mS.js.map +0 -1
  89. package/dist/admin/core-CzO6aavT.js +0 -2507
  90. package/dist/admin/core-CzO6aavT.js.map +0 -1
  91. package/dist/admin/core-aFtK4l9I.cjs +0 -2530
  92. package/dist/admin/core-aFtK4l9I.cjs.map +0 -1
  93. package/dist/admin/index.cjs +0 -87
  94. package/dist/admin/index.cjs.map +0 -1
  95. package/dist/admin/index.d.cts +0 -1739
  96. package/dist/auth/IconGoogle-B17BTQyD.cjs +0 -69
  97. package/dist/auth/IconGoogle-B17BTQyD.cjs.map +0 -1
  98. package/dist/auth/Login-BTBmbnWl.cjs +0 -181
  99. package/dist/auth/Login-BTBmbnWl.cjs.map +0 -1
  100. package/dist/auth/Login-BcQOtG3v.js +0 -5
  101. package/dist/auth/Login-Btmd70Um.cjs +0 -5
  102. package/dist/auth/Login-JeXFsUf5.js.map +0 -1
  103. package/dist/auth/Register-CPQnvXCZ.js.map +0 -1
  104. package/dist/auth/Register-CbesZal3.cjs +0 -5
  105. package/dist/auth/Register-DpI_JdyO.js +0 -5
  106. package/dist/auth/Register-HP3rP71B.cjs +0 -323
  107. package/dist/auth/Register-HP3rP71B.cjs.map +0 -1
  108. package/dist/auth/ResetPassword-B-tkzV7g.cjs +0 -248
  109. package/dist/auth/ResetPassword-B-tkzV7g.cjs.map +0 -1
  110. package/dist/auth/ResetPassword-BlK3xEpU.js +0 -4
  111. package/dist/auth/ResetPassword-BzUjGG_-.js.map +0 -1
  112. package/dist/auth/ResetPassword-W3xjOnWy.cjs +0 -4
  113. package/dist/auth/chunk-DhGyd7sr.js +0 -28
  114. package/dist/auth/core-D1MHij1j.js +0 -1795
  115. package/dist/auth/core-D1MHij1j.js.map +0 -1
  116. package/dist/auth/core-rDZ9d92K.cjs +0 -1824
  117. package/dist/auth/core-rDZ9d92K.cjs.map +0 -1
  118. package/dist/auth/index.cjs +0 -211
  119. package/dist/auth/index.cjs.map +0 -1
  120. package/dist/auth/index.d.cts +0 -6265
  121. package/dist/core/index.cjs +0 -2620
  122. package/dist/core/index.cjs.map +0 -1
  123. package/dist/core/index.d.cts +0 -2737
@@ -1,12 +1,12 @@
1
- import { t as AlephaUI } from "./core-CzO6aavT.js";
2
- import { t as AdminFiles_default } from "./AdminFiles-CllAxb1B.js";
3
- import { t as AdminJobs_default } from "./AdminJobs-BXkFtlVo.js";
4
- import { t as AdminLayout_default } from "./AdminLayout-CtkVYk-u.js";
5
- import { t as AdminNotifications_default } from "./AdminNotifications-DnnulNNV.js";
6
- import { t as AdminParameters_default } from "./AdminParameters-B3hvpLpu.js";
7
- import { t as AdminSessions_default } from "./AdminSessions-Pjdz-iZx.js";
8
- import { t as AdminUsers_default } from "./AdminUsers-C1HsrRxn.js";
9
- import { t as AdminVerifications_default } from "./AdminVerifications-VMpm30mS.js";
1
+ import { t as AdminFiles_default } from "./AdminFiles-BjofP3OC.js";
2
+ import { t as AdminJobs_default } from "./AdminJobs-CDnVxEv6.js";
3
+ import { t as AdminLayout_default } from "./AdminLayout-CervL8LV.js";
4
+ import { t as AdminNotifications_default } from "./AdminNotifications-DvI2989x.js";
5
+ import { t as AdminParameters_default } from "./AdminParameters-P1LB6ZI1.js";
6
+ import { t as AdminSessions_default } from "./AdminSessions-CmDVneE2.js";
7
+ import { t as AdminUsers_default } from "./AdminUsers-88De5pev.js";
8
+ import { t as AdminVerifications_default } from "./AdminVerifications-DBVEoqJe.js";
9
+ import { AlephaUI } from "@alepha/ui";
10
10
  import { $module } from "alepha";
11
11
  import { $page } from "@alepha/react";
12
12
 
@@ -15,49 +15,49 @@ var AdminRouter = class {
15
15
  admin = $page({
16
16
  path: "/admin",
17
17
  label: "Admin",
18
- lazy: () => import("./AdminLayout-CQpxfko6.js")
18
+ lazy: () => import("./AdminLayout-Bgx25J8m.js")
19
19
  });
20
20
  adminUsers = $page({
21
21
  parent: this.admin,
22
22
  path: "/users",
23
23
  label: "Users",
24
- lazy: () => import("./AdminUsers-BgTL-zSY.js")
24
+ lazy: () => import("./AdminUsers-oyAXqZ5l.js")
25
25
  });
26
26
  adminNotifications = $page({
27
27
  parent: this.admin,
28
28
  path: "/notifications",
29
29
  label: "Notifications",
30
- lazy: () => import("./AdminNotifications-DaMu1AQ4.js")
30
+ lazy: () => import("./AdminNotifications-BDQXt3-e.js")
31
31
  });
32
32
  adminSessions = $page({
33
33
  parent: this.admin,
34
34
  path: "/sessions",
35
35
  label: "Sessions",
36
- lazy: () => import("./AdminSessions-DqOXOpYR.js")
36
+ lazy: () => import("./AdminSessions-Dkk_fzWK.js")
37
37
  });
38
38
  adminVerifications = $page({
39
39
  parent: this.admin,
40
40
  path: "/verifications",
41
41
  label: "Verifications",
42
- lazy: () => import("./AdminVerifications-Df6DRgNo.js")
42
+ lazy: () => import("./AdminVerifications-D93TKymL.js")
43
43
  });
44
44
  adminJobs = $page({
45
45
  parent: this.admin,
46
46
  path: "/jobs",
47
47
  label: "Jobs",
48
- lazy: () => import("./AdminJobs-yC6DarGO.js")
48
+ lazy: () => import("./AdminJobs-BOq6AZOW.js")
49
49
  });
50
50
  adminParameters = $page({
51
51
  parent: this.admin,
52
52
  path: "/parameters",
53
53
  label: "Parameters",
54
- lazy: () => import("./AdminParameters-prMcCgxf.js")
54
+ lazy: () => import("./AdminParameters-D_v0GAvI.js")
55
55
  });
56
56
  adminFiles = $page({
57
57
  parent: this.admin,
58
58
  path: "/files",
59
59
  label: "Files",
60
- lazy: () => import("./AdminFiles-BaCIMeNt.js")
60
+ lazy: () => import("./AdminFiles-DldZB7oo.js")
61
61
  });
62
62
  };
63
63
 
@@ -55,4 +55,4 @@ var IconGoogle_default = IconGoogle;
55
55
 
56
56
  //#endregion
57
57
  export { IconGithub_default as n, IconGoogle_default as t };
58
- //# sourceMappingURL=IconGoogle-Bfmuv9Rv.js.map
58
+ //# sourceMappingURL=IconGoogle-v_58os2T.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IconGoogle-Bfmuv9Rv.js","names":[],"sources":["../../src/auth/components/icons/IconGithub.tsx","../../src/auth/components/icons/IconGoogle.tsx"],"sourcesContent":["const IconGithub = () => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 1024 1024\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z\"\n transform=\"scale(64)\"\n fill={\"var(--alepha-text)\"}\n />\n </svg>\n );\n};\n\nexport default IconGithub;\n","const IconGoogle = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n >\n <path\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n fill=\"#EA4335\"\n />\n <path d=\"M1 1h22v22H1z\" fill=\"none\" />\n </svg>\n );\n};\n\nexport default IconGoogle;\n"],"mappings":";;;AAAA,MAAM,mBAAmB;AACvB,QACE,oBAAC;EACC,OAAM;EACN,QAAO;EACP,SAAQ;EACR,MAAK;EACL,OAAM;YAEN,oBAAC;GACC,UAAS;GACT,UAAS;GACT,GAAE;GACF,WAAU;GACV,MAAM;IACN;GACE;;AAIV,yBAAe;;;;ACpBf,MAAM,mBAAmB;AACvB,QACE,qBAAC;EACC,OAAM;EACN,QAAO;EACP,SAAQ;EACR,OAAM;;GAEN,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IAAK,GAAE;IAAgB,MAAK;KAAS;;GAClC;;AAIV,yBAAe"}
1
+ {"version":3,"file":"IconGoogle-v_58os2T.js","names":[],"sources":["../../src/auth/components/icons/IconGithub.tsx","../../src/auth/components/icons/IconGoogle.tsx"],"sourcesContent":["const IconGithub = () => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 1024 1024\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z\"\n transform=\"scale(64)\"\n fill={\"var(--alepha-text)\"}\n />\n </svg>\n );\n};\n\nexport default IconGithub;\n","const IconGoogle = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n >\n <path\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n fill=\"#EA4335\"\n />\n <path d=\"M1 1h22v22H1z\" fill=\"none\" />\n </svg>\n );\n};\n\nexport default IconGoogle;\n"],"mappings":";;;AAAA,MAAM,mBAAmB;AACvB,QACE,oBAAC;EACC,OAAM;EACN,QAAO;EACP,SAAQ;EACR,MAAK;EACL,OAAM;YAEN,oBAAC;GACC,UAAS;GACT,UAAS;GACT,GAAE;GACF,WAAU;GACV,MAAM;IACN;GACE;;AAIV,yBAAe;;;;ACpBf,MAAM,mBAAmB;AACvB,QACE,qBAAC;EACC,OAAM;EACN,QAAO;EACP,SAAQ;EACR,OAAM;;GAEN,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IAAK,GAAE;IAAgB,MAAK;KAAS;;GAClC;;AAIV,yBAAe"}
@@ -0,0 +1,4 @@
1
+ import "./IconGoogle-v_58os2T.js";
2
+ import { t as Login_default } from "./Login-OCrvjs9U.js";
3
+
4
+ export { Login_default as default };
@@ -1,15 +1,15 @@
1
- import { i as ActionButton_default, n as Control_default, r as capitalize } from "./core-D1MHij1j.js";
2
- import { n as IconGithub_default, t as IconGoogle_default } from "./IconGoogle-Bfmuv9Rv.js";
1
+ import { n as IconGithub_default, t as IconGoogle_default } from "./IconGoogle-v_58os2T.js";
3
2
  import { useAuth } from "@alepha/react/auth";
4
3
  import { useI18n } from "@alepha/react/i18n";
5
- import { FormValidationError, useForm } from "@alepha/react/form";
4
+ import { ActionButton, Control, capitalize } from "@alepha/ui";
6
5
  import { t } from "alepha";
7
6
  import { useRouter } from "@alepha/react";
8
7
  import { Card, Flex, Group, Stack, Text } from "@mantine/core";
9
8
  import { IconLock, IconUser } from "@tabler/icons-react";
10
9
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
- import { useMemo } from "react";
10
+ import { FormValidationError, useForm } from "@alepha/react/form";
12
11
  import { HttpError } from "alepha/server";
12
+ import { useMemo } from "react";
13
13
 
14
14
  //#region src/auth/components/Login.tsx
15
15
  const Login = (props) => {
@@ -82,19 +82,19 @@ const Login = (props) => {
82
82
  flex: 1,
83
83
  gap: "md",
84
84
  children: [
85
- /* @__PURE__ */ jsx(Control_default, {
85
+ /* @__PURE__ */ jsx(Control, {
86
86
  title: identifierTitle,
87
87
  input: form.input.identifier,
88
88
  icon: IconUser,
89
89
  text: { autoComplete: loginMethods.includes("email") ? "email" : "username" }
90
90
  }),
91
- /* @__PURE__ */ jsx(Control_default, {
91
+ /* @__PURE__ */ jsx(Control, {
92
92
  title: tr("loginPassword"),
93
93
  input: form.input.password,
94
94
  icon: IconLock,
95
95
  password: { autoComplete: "current-password" }
96
96
  }),
97
- /* @__PURE__ */ jsx(ActionButton_default, {
97
+ /* @__PURE__ */ jsx(ActionButton, {
98
98
  variant: "filled",
99
99
  form,
100
100
  children: tr("loginSignIn")
@@ -106,7 +106,7 @@ const Login = (props) => {
106
106
  children: [settings.resetPasswordAllowed && /* @__PURE__ */ jsx(Text, {
107
107
  size: "sm",
108
108
  ta: "center",
109
- children: /* @__PURE__ */ jsx(ActionButton_default, {
109
+ children: /* @__PURE__ */ jsx(ActionButton, {
110
110
  href: router.path("resetPassword"),
111
111
  anchorProps: { inherit: true },
112
112
  children: tr("loginForgotPassword")
@@ -135,7 +135,7 @@ const Login = (props) => {
135
135
  })] }),
136
136
  /* @__PURE__ */ jsx(Stack, {
137
137
  gap: "sm",
138
- children: props.realmConfig.authenticationMethods.map((method) => method.type !== "CREDENTIALS" && /* @__PURE__ */ jsx(ActionButton_default, {
138
+ children: props.realmConfig.authenticationMethods.map((method) => method.type !== "CREDENTIALS" && /* @__PURE__ */ jsx(ActionButton, {
139
139
  variant: "default",
140
140
  leftSection: leftSection(method.name.toLowerCase()),
141
141
  onClick: () => auth.login(method.name, { redirect }),
@@ -148,7 +148,7 @@ const Login = (props) => {
148
148
  children: [
149
149
  tr("loginNoAccount"),
150
150
  " ",
151
- /* @__PURE__ */ jsx(ActionButton_default, {
151
+ /* @__PURE__ */ jsx(ActionButton, {
152
152
  href: router.path("register"),
153
153
  anchorProps: { inherit: true },
154
154
  children: tr("loginSignUp")
@@ -157,7 +157,7 @@ const Login = (props) => {
157
157
  })
158
158
  ]
159
159
  })
160
- }), /* @__PURE__ */ jsx(ActionButton_default, {
160
+ }), /* @__PURE__ */ jsx(ActionButton, {
161
161
  variant: "subtle",
162
162
  href: redirect,
163
163
  children: tr("loginCancel")
@@ -173,4 +173,4 @@ const leftSection = (name) => {
173
173
 
174
174
  //#endregion
175
175
  export { Login_default as t };
176
- //# sourceMappingURL=Login-JeXFsUf5.js.map
176
+ //# sourceMappingURL=Login-OCrvjs9U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Login-OCrvjs9U.js","names":["IconGoogle","IconGithub"],"sources":["../../src/auth/components/Login.tsx"],"sourcesContent":["import { useRouter } from \"@alepha/react\";\nimport { useAuth } from \"@alepha/react/auth\";\nimport { FormValidationError, useForm } from \"@alepha/react/form\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { ActionButton, Control, capitalize } from \"@alepha/ui\";\nimport { Card, Flex, Group, Stack, Text } from \"@mantine/core\";\nimport { IconLock, IconUser } from \"@tabler/icons-react\";\nimport { t } from \"alepha\";\nimport type { UserRealmConfig } from \"alepha/api/users\";\nimport { HttpError } from \"alepha/server\";\nimport { useMemo } from \"react\";\nimport type { AuthI18n } from \"../AuthI18n.ts\";\nimport type { AuthRouter } from \"../AuthRouter.ts\";\nimport IconGithub from \"./icons/IconGithub.tsx\";\nimport IconGoogle from \"./icons/IconGoogle.tsx\";\n\nexport interface LoginProps {\n realmConfig: UserRealmConfig;\n}\n\nconst Login = (props: LoginProps) => {\n const auth = useAuth();\n const router = useRouter<AuthRouter>();\n const { tr } = useI18n<AuthI18n, \"en\">();\n const redirect = router.query.redirect || \"/\";\n\n const hasUsernamePassword = props.realmConfig.authenticationMethods.find(\n (it) => it.type === \"CREDENTIALS\",\n );\n\n const settings = props.realmConfig.settings;\n\n // Determine what login methods are available\n const loginMethods = useMemo(() => {\n const methods = [];\n if (settings.usernameEnabled !== false) methods.push(\"username\");\n if (settings.emailEnabled !== false) methods.push(\"email\");\n if (settings.phoneEnabled === true) methods.push(\"phone\");\n return methods;\n }, [settings]);\n\n // Create identifier title based on enabled methods\n const identifierTitle = useMemo(() => {\n if (loginMethods.length === 0) return tr(\"loginUsername\");\n if (loginMethods.length === 1) {\n if (loginMethods[0] === \"username\") return tr(\"loginUsername\");\n if (loginMethods[0] === \"email\") return tr(\"loginEmail\");\n if (loginMethods[0] === \"phone\") return tr(\"loginPhone\");\n }\n const labels = loginMethods.map((m) => {\n if (m === \"username\") return tr(\"loginUsername\").toLowerCase();\n if (m === \"email\") return tr(\"loginEmail\").toLowerCase();\n if (m === \"phone\") return tr(\"loginPhone\").toLowerCase();\n return m;\n });\n return capitalize(\n `${labels.slice(0, -1).join(\", \")} or ${labels[labels.length - 1]}`,\n );\n }, [loginMethods, tr]);\n\n const form = useForm({\n schema: t.object({\n identifier: t.string({\n minLength: 1,\n }),\n password: t.string({\n minLength: settings.passwordPolicy?.minLength || 6,\n }),\n }),\n handler: async (data) => {\n try {\n await auth.login(\"credentials\", {\n username: data.identifier,\n password: data.password,\n });\n await router.go(router.query.r || \"/\");\n } catch (error) {\n if (\n error instanceof HttpError &&\n error.error === \"InvalidCredentialsError\"\n ) {\n throw new FormValidationError({\n message: \"Invalid identifier or password\",\n path: \"/password\",\n });\n }\n throw error;\n }\n },\n });\n\n return (\n <Flex flex={1} justify={\"center\"} align={\"center\"}>\n <Stack gap={\"sm\"} w={360}>\n <Card withBorder p={\"lg\"} bg={\"var(--alepha-elevated)\"}>\n <Stack gap={\"md\"}>\n {hasUsernamePassword && (\n <>\n <form {...form.props}>\n <Stack flex={1} gap={\"md\"}>\n <Control\n title={identifierTitle}\n input={form.input.identifier}\n icon={IconUser}\n text={{\n autoComplete: loginMethods.includes(\"email\")\n ? \"email\"\n : \"username\",\n }}\n />\n <Control\n title={tr(\"loginPassword\")}\n input={form.input.password}\n icon={IconLock}\n password={{\n autoComplete: \"current-password\",\n }}\n />\n <ActionButton variant={\"filled\"} form={form}>\n {tr(\"loginSignIn\")}\n </ActionButton>\n </Stack>\n </form>\n <Stack gap=\"xs\">\n {settings.resetPasswordAllowed && (\n <Text size=\"sm\" ta=\"center\">\n <ActionButton\n href={router.path(\"resetPassword\")}\n anchorProps={{ inherit: true }}\n >\n {tr(\"loginForgotPassword\")}\n </ActionButton>\n </Text>\n )}\n <Group align=\"center\" justify=\"center\" gap={\"md\"}>\n <Flex flex={1} h={\"1px\"} bg={\"var(--alepha-text-muted)\"} />\n <Text size=\"xs\">{tr(\"loginOr\")}</Text>\n <Flex flex={1} h={\"1px\"} bg={\"var(--alepha-text-muted)\"} />\n </Group>\n </Stack>\n </>\n )}\n <Stack gap={\"sm\"}>\n {props.realmConfig.authenticationMethods.map(\n (method) =>\n method.type !== \"CREDENTIALS\" && (\n <ActionButton\n variant={\"default\"}\n key={method.type}\n leftSection={leftSection(method.name.toLowerCase())}\n onClick={() =>\n auth.login(method.name, {\n redirect,\n })\n }\n >\n {tr(\"loginContinueWith\", {\n args: [capitalize(method.name)],\n })}\n </ActionButton>\n ),\n )}\n </Stack>\n <Text size=\"sm\" ta=\"center\">\n {tr(\"loginNoAccount\")}{\" \"}\n <ActionButton\n href={router.path(\"register\")}\n anchorProps={{ inherit: true }}\n >\n {tr(\"loginSignUp\")}\n </ActionButton>\n </Text>\n </Stack>\n </Card>\n <ActionButton variant={\"subtle\"} href={redirect}>\n {tr(\"loginCancel\")}\n </ActionButton>\n </Stack>\n </Flex>\n );\n};\n\nexport default Login;\n\nconst leftSection = (name: string) => {\n if (name === \"google\") {\n return <IconGoogle />;\n }\n\n if (name === \"github\") {\n return <IconGithub />;\n }\n};\n"],"mappings":";;;;;;;;;;;;;;AAoBA,MAAM,SAAS,UAAsB;CACnC,MAAM,OAAO,SAAS;CACtB,MAAM,SAAS,WAAuB;CACtC,MAAM,EAAE,OAAO,SAAyB;CACxC,MAAM,WAAW,OAAO,MAAM,YAAY;CAE1C,MAAM,sBAAsB,MAAM,YAAY,sBAAsB,MACjE,OAAO,GAAG,SAAS,cACrB;CAED,MAAM,WAAW,MAAM,YAAY;CAGnC,MAAM,eAAe,cAAc;EACjC,MAAM,UAAU,EAAE;AAClB,MAAI,SAAS,oBAAoB,MAAO,SAAQ,KAAK,WAAW;AAChE,MAAI,SAAS,iBAAiB,MAAO,SAAQ,KAAK,QAAQ;AAC1D,MAAI,SAAS,iBAAiB,KAAM,SAAQ,KAAK,QAAQ;AACzD,SAAO;IACN,CAAC,SAAS,CAAC;CAGd,MAAM,kBAAkB,cAAc;AACpC,MAAI,aAAa,WAAW,EAAG,QAAO,GAAG,gBAAgB;AACzD,MAAI,aAAa,WAAW,GAAG;AAC7B,OAAI,aAAa,OAAO,WAAY,QAAO,GAAG,gBAAgB;AAC9D,OAAI,aAAa,OAAO,QAAS,QAAO,GAAG,aAAa;AACxD,OAAI,aAAa,OAAO,QAAS,QAAO,GAAG,aAAa;;EAE1D,MAAM,SAAS,aAAa,KAAK,MAAM;AACrC,OAAI,MAAM,WAAY,QAAO,GAAG,gBAAgB,CAAC,aAAa;AAC9D,OAAI,MAAM,QAAS,QAAO,GAAG,aAAa,CAAC,aAAa;AACxD,OAAI,MAAM,QAAS,QAAO,GAAG,aAAa,CAAC,aAAa;AACxD,UAAO;IACP;AACF,SAAO,WACL,GAAG,OAAO,MAAM,GAAG,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,OAAO,OAAO,SAAS,KAChE;IACA,CAAC,cAAc,GAAG,CAAC;CAEtB,MAAM,OAAO,QAAQ;EACnB,QAAQ,EAAE,OAAO;GACf,YAAY,EAAE,OAAO,EACnB,WAAW,GACZ,CAAC;GACF,UAAU,EAAE,OAAO,EACjB,WAAW,SAAS,gBAAgB,aAAa,GAClD,CAAC;GACH,CAAC;EACF,SAAS,OAAO,SAAS;AACvB,OAAI;AACF,UAAM,KAAK,MAAM,eAAe;KAC9B,UAAU,KAAK;KACf,UAAU,KAAK;KAChB,CAAC;AACF,UAAM,OAAO,GAAG,OAAO,MAAM,KAAK,IAAI;YAC/B,OAAO;AACd,QACE,iBAAiB,aACjB,MAAM,UAAU,0BAEhB,OAAM,IAAI,oBAAoB;KAC5B,SAAS;KACT,MAAM;KACP,CAAC;AAEJ,UAAM;;;EAGX,CAAC;AAEF,QACE,oBAAC;EAAK,MAAM;EAAG,SAAS;EAAU,OAAO;YACvC,qBAAC;GAAM,KAAK;GAAM,GAAG;cACnB,oBAAC;IAAK;IAAW,GAAG;IAAM,IAAI;cAC5B,qBAAC;KAAM,KAAK;;MACT,uBACC,4CACE,oBAAC;OAAK,GAAI,KAAK;iBACb,qBAAC;QAAM,MAAM;QAAG,KAAK;;SACnB,oBAAC;UACC,OAAO;UACP,OAAO,KAAK,MAAM;UAClB,MAAM;UACN,MAAM,EACJ,cAAc,aAAa,SAAS,QAAQ,GACxC,UACA,YACL;WACD;SACF,oBAAC;UACC,OAAO,GAAG,gBAAgB;UAC1B,OAAO,KAAK,MAAM;UAClB,MAAM;UACN,UAAU,EACR,cAAc,oBACf;WACD;SACF,oBAAC;UAAa,SAAS;UAAgB;oBACpC,GAAG,cAAc;WACL;;SACT;QACH,EACP,qBAAC;OAAM,KAAI;kBACR,SAAS,wBACR,oBAAC;QAAK,MAAK;QAAK,IAAG;kBACjB,oBAAC;SACC,MAAM,OAAO,KAAK,gBAAgB;SAClC,aAAa,EAAE,SAAS,MAAM;mBAE7B,GAAG,sBAAsB;UACb;SACV,EAET,qBAAC;QAAM,OAAM;QAAS,SAAQ;QAAS,KAAK;;SAC1C,oBAAC;UAAK,MAAM;UAAG,GAAG;UAAO,IAAI;WAA8B;SAC3D,oBAAC;UAAK,MAAK;oBAAM,GAAG,UAAU;WAAQ;SACtC,oBAAC;UAAK,MAAM;UAAG,GAAG;UAAO,IAAI;WAA8B;;SACrD;QACF,IACP;MAEL,oBAAC;OAAM,KAAK;iBACT,MAAM,YAAY,sBAAsB,KACtC,WACC,OAAO,SAAS,iBACd,oBAAC;QACC,SAAS;QAET,aAAa,YAAY,OAAO,KAAK,aAAa,CAAC;QACnD,eACE,KAAK,MAAM,OAAO,MAAM,EACtB,UACD,CAAC;kBAGH,GAAG,qBAAqB,EACvB,MAAM,CAAC,WAAW,OAAO,KAAK,CAAC,EAChC,CAAC;UAVG,OAAO,KAWC,CAEpB;QACK;MACR,qBAAC;OAAK,MAAK;OAAK,IAAG;;QAChB,GAAG,iBAAiB;QAAE;QACvB,oBAAC;SACC,MAAM,OAAO,KAAK,WAAW;SAC7B,aAAa,EAAE,SAAS,MAAM;mBAE7B,GAAG,cAAc;UACL;;QACV;;MACD;KACH,EACP,oBAAC;IAAa,SAAS;IAAU,MAAM;cACpC,GAAG,cAAc;KACL;IACT;GACH;;AAIX,oBAAe;AAEf,MAAM,eAAe,SAAiB;AACpC,KAAI,SAAS,SACX,QAAO,oBAACA,uBAAa;AAGvB,KAAI,SAAS,SACX,QAAO,oBAACC,uBAAa"}
@@ -0,0 +1,4 @@
1
+ import "./IconGoogle-v_58os2T.js";
2
+ import { t as Register_default } from "./Register-Ei34GSba.js";
3
+
4
+ export { Register_default as default };
@@ -1,13 +1,13 @@
1
- import { i as ActionButton_default, n as Control_default, r as capitalize } from "./core-D1MHij1j.js";
2
- import { n as IconGithub_default, t as IconGoogle_default } from "./IconGoogle-Bfmuv9Rv.js";
1
+ import { n as IconGithub_default, t as IconGoogle_default } from "./IconGoogle-v_58os2T.js";
3
2
  import { useAuth } from "@alepha/react/auth";
4
3
  import { useI18n } from "@alepha/react/i18n";
5
- import { useForm } from "@alepha/react/form";
4
+ import { ActionButton, Control, capitalize } from "@alepha/ui";
6
5
  import { TypeBoxError, t } from "alepha";
7
6
  import { useClient, useRouter } from "@alepha/react";
8
7
  import { Alert, Card, Flex, Group, PinInput, Stack, Text } from "@mantine/core";
9
8
  import { IconAlertCircle, IconLock, IconMail, IconPhone, IconUser } from "@tabler/icons-react";
10
9
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
+ import { useForm } from "@alepha/react/form";
11
11
  import { useMemo, useState } from "react";
12
12
 
13
13
  //#region src/auth/components/Register.tsx
@@ -172,13 +172,13 @@ const Register = (props) => {
172
172
  })
173
173
  })]
174
174
  }),
175
- /* @__PURE__ */ jsx(ActionButton_default, {
175
+ /* @__PURE__ */ jsx(ActionButton, {
176
176
  onClick: handleVerificationSubmit,
177
177
  loading: isSubmitting,
178
178
  disabled: !canSubmitVerification(),
179
179
  children: tr("registerVerifySubmit") ?? "Complete Registration"
180
180
  }),
181
- /* @__PURE__ */ jsx(ActionButton_default, {
181
+ /* @__PURE__ */ jsx(ActionButton, {
182
182
  variant: "subtle",
183
183
  onClick: () => setRegistrationState({
184
184
  phase: "form",
@@ -212,7 +212,7 @@ const Register = (props) => {
212
212
  size: "sm",
213
213
  children: tr("registerDisabled")
214
214
  })
215
- }), /* @__PURE__ */ jsx(ActionButton_default, {
215
+ }), /* @__PURE__ */ jsx(ActionButton, {
216
216
  href: router.path("login"),
217
217
  children: tr("registerBackToSignIn")
218
218
  })] }) : hasUsernamePassword ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("form", {
@@ -221,37 +221,37 @@ const Register = (props) => {
221
221
  flex: 1,
222
222
  gap: "md",
223
223
  children: [
224
- settings.usernameEnabled !== false && form.input.username && /* @__PURE__ */ jsx(Control_default, {
224
+ settings.usernameEnabled !== false && form.input.username && /* @__PURE__ */ jsx(Control, {
225
225
  title: tr("registerUsername"),
226
226
  input: form.input.username,
227
227
  icon: /* @__PURE__ */ jsx(IconUser, {}),
228
228
  text: { autoComplete: "username" }
229
229
  }),
230
- settings.emailEnabled !== false && form.input.email && /* @__PURE__ */ jsx(Control_default, {
230
+ settings.emailEnabled !== false && form.input.email && /* @__PURE__ */ jsx(Control, {
231
231
  title: tr("registerEmail"),
232
232
  input: form.input.email,
233
233
  icon: /* @__PURE__ */ jsx(IconMail, {}),
234
234
  text: { autoComplete: "email" }
235
235
  }),
236
- settings.phoneEnabled === true && form.input.phoneNumber && /* @__PURE__ */ jsx(Control_default, {
236
+ settings.phoneEnabled === true && form.input.phoneNumber && /* @__PURE__ */ jsx(Control, {
237
237
  title: tr("registerPhone"),
238
238
  input: form.input.phoneNumber,
239
239
  icon: /* @__PURE__ */ jsx(IconPhone, {}),
240
240
  text: { autoComplete: "tel" }
241
241
  }),
242
- /* @__PURE__ */ jsx(Control_default, {
242
+ /* @__PURE__ */ jsx(Control, {
243
243
  title: tr("registerPassword"),
244
244
  input: form.input.password,
245
245
  icon: /* @__PURE__ */ jsx(IconLock, {}),
246
246
  password: { autoComplete: "new-password" }
247
247
  }),
248
- /* @__PURE__ */ jsx(Control_default, {
248
+ /* @__PURE__ */ jsx(Control, {
249
249
  title: tr("registerConfirmPassword"),
250
250
  input: form.input.confirmPassword,
251
251
  icon: /* @__PURE__ */ jsx(IconLock, {}),
252
252
  password: { autoComplete: "new-password" }
253
253
  }),
254
- /* @__PURE__ */ jsx(ActionButton_default, {
254
+ /* @__PURE__ */ jsx(ActionButton, {
255
255
  form,
256
256
  children: tr("registerCreateAccount")
257
257
  })
@@ -279,7 +279,7 @@ const Register = (props) => {
279
279
  ]
280
280
  })] }) : null, isRegistrationAllowed && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Stack, {
281
281
  gap: "sm",
282
- children: props.realmConfig.authenticationMethods.map((method) => method.type !== "CREDENTIALS" && /* @__PURE__ */ jsx(ActionButton_default, {
282
+ children: props.realmConfig.authenticationMethods.map((method) => method.type !== "CREDENTIALS" && /* @__PURE__ */ jsx(ActionButton, {
283
283
  variant: "default",
284
284
  leftSection: leftSection(method.name.toLowerCase()),
285
285
  onClick: () => auth.login(method.name, { redirect }),
@@ -291,7 +291,7 @@ const Register = (props) => {
291
291
  children: [
292
292
  tr("registerHaveAccount"),
293
293
  " ",
294
- /* @__PURE__ */ jsx(ActionButton_default, {
294
+ /* @__PURE__ */ jsx(ActionButton, {
295
295
  href: router.path("login"),
296
296
  anchorProps: { inherit: true },
297
297
  children: tr("registerSignIn")
@@ -299,7 +299,7 @@ const Register = (props) => {
299
299
  ]
300
300
  })] })]
301
301
  })
302
- }), /* @__PURE__ */ jsx(ActionButton_default, {
302
+ }), /* @__PURE__ */ jsx(ActionButton, {
303
303
  variant: "subtle",
304
304
  href: redirect,
305
305
  children: tr("registerCancel")
@@ -315,4 +315,4 @@ const leftSection = (name) => {
315
315
 
316
316
  //#endregion
317
317
  export { Register_default as t };
318
- //# sourceMappingURL=Register-CPQnvXCZ.js.map
318
+ //# sourceMappingURL=Register-Ei34GSba.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Register-Ei34GSba.js","names":["IconGoogle","IconGithub"],"sources":["../../src/auth/components/Register.tsx"],"sourcesContent":["import { useClient, useRouter } from \"@alepha/react\";\nimport { useAuth } from \"@alepha/react/auth\";\nimport { useForm } from \"@alepha/react/form\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { ActionButton, Control, capitalize } from \"@alepha/ui\";\nimport { Alert, Card, Flex, Group, PinInput, Stack, Text } from \"@mantine/core\";\nimport {\n IconAlertCircle,\n IconLock,\n IconMail,\n IconPhone,\n IconUser,\n} from \"@tabler/icons-react\";\nimport { TypeBoxError, t } from \"alepha\";\nimport type {\n RegistrationIntentResponse,\n UserController,\n UserRealmConfig,\n} from \"alepha/api/users\";\nimport { useMemo, useState } from \"react\";\nimport type { AuthI18n } from \"../AuthI18n.ts\";\nimport type { AuthRouter } from \"../AuthRouter.ts\";\nimport IconGithub from \"./icons/IconGithub.tsx\";\nimport IconGoogle from \"./icons/IconGoogle.tsx\";\n\nexport interface RegisterProps {\n realmConfig: UserRealmConfig;\n}\n\ntype RegistrationPhase = \"form\" | \"verification\";\n\ninterface RegistrationState {\n phase: RegistrationPhase;\n intent?: RegistrationIntentResponse;\n credentials?: {\n identifier: string;\n password: string;\n };\n}\n\nconst Register = (props: RegisterProps) => {\n const auth = useAuth();\n const userCtrl = useClient<UserController>();\n const router = useRouter<AuthRouter>();\n const { tr } = useI18n<AuthI18n, \"en\">();\n const redirect = router.query.redirect || \"/\";\n\n const [registrationState, setRegistrationState] = useState<RegistrationState>(\n {\n phase: \"form\",\n },\n );\n const [emailCode, setEmailCode] = useState(\"\");\n const [phoneCode, setPhoneCode] = useState(\"\");\n const [verificationError, setVerificationError] = useState<string | null>(\n null,\n );\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const hasUsernamePassword = props.realmConfig.authenticationMethods.find(\n (it) => it.type === \"CREDENTIALS\",\n );\n\n const settings = props.realmConfig.settings || {};\n const isRegistrationAllowed = settings.registrationAllowed !== false;\n\n const registerSchema = useMemo(() => {\n const registerSchema = t.object({\n username: t.optional(t.text()),\n email: t.optional(t.email()),\n phoneNumber: t.optional(t.e164()),\n password: t.string({ minLength: 8 }),\n confirmPassword: t.string({ minLength: 8 }),\n });\n\n const required = registerSchema.required as string[];\n\n if (settings.usernameRequired) required.push(\"username\");\n if (settings.emailRequired) required.push(\"email\");\n if (settings.phoneRequired) required.push(\"phoneNumber\");\n\n return registerSchema;\n }, []);\n\n const form = useForm({\n schema: registerSchema,\n handler: async (data) => {\n if (data.password !== data.confirmPassword) {\n throw new TypeBoxError({\n message: \"Passwords do not match\",\n instancePath: \"/confirmPassword\",\n keyword: \"not\",\n schemaPath: \"\",\n params: {},\n });\n }\n\n // Phase 1: Create registration intent\n const intent = await userCtrl.createRegistrationIntent({\n body: {\n username: data.username,\n email: data.email,\n phoneNumber: data.phoneNumber,\n password: data.password,\n },\n });\n\n const identifier = data.username ?? data.email ?? data.phoneNumber;\n\n // Check if verification is needed\n if (\n intent.expectEmailVerification ||\n intent.expectPhoneVerification ||\n intent.expectCaptcha\n ) {\n // Move to verification phase\n setRegistrationState({\n phase: \"verification\",\n intent,\n credentials: identifier\n ? { identifier, password: data.password }\n : undefined,\n });\n return;\n }\n\n // No verification needed - complete registration immediately\n await userCtrl.createUserFromIntent({\n body: { intentId: intent.intentId },\n });\n\n // Auto-login after registration\n if (identifier) {\n await auth.login(\"credentials\", {\n username: identifier,\n password: data.password,\n });\n }\n\n await router.go(router.query.r || \"/\");\n },\n });\n\n const handleVerificationSubmit = async () => {\n if (!registrationState.intent) return;\n\n setIsSubmitting(true);\n setVerificationError(null);\n\n try {\n // Phase 2: Complete registration with verification codes\n await userCtrl.createUserFromIntent({\n body: {\n intentId: registrationState.intent.intentId,\n emailCode: registrationState.intent.expectEmailVerification\n ? emailCode\n : undefined,\n phoneCode: registrationState.intent.expectPhoneVerification\n ? phoneCode\n : undefined,\n },\n });\n\n // Auto-login after registration\n if (registrationState.credentials) {\n await auth.login(\"credentials\", {\n username: registrationState.credentials.identifier,\n password: registrationState.credentials.password,\n });\n }\n\n await router.go(router.query.r || \"/\");\n } catch (error) {\n setVerificationError(\n error instanceof Error ? error.message : \"Verification failed\",\n );\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const canSubmitVerification = () => {\n if (!registrationState.intent) return false;\n\n if (\n registrationState.intent.expectEmailVerification &&\n emailCode.length !== 6\n ) {\n return false;\n }\n\n if (\n registrationState.intent.expectPhoneVerification &&\n phoneCode.length !== 6\n ) {\n return false;\n }\n\n return true;\n };\n\n // Verification phase UI\n if (registrationState.phase === \"verification\" && registrationState.intent) {\n return (\n <Flex flex={1} justify={\"center\"} align={\"center\"}>\n <Stack gap={\"sm\"} w={360}>\n <Card withBorder p={\"lg\"} bg={\"var(--alepha-elevated)\"}>\n <Stack gap={\"md\"}>\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"registerVerifyTitle\") ?? \"Verify your account\"}\n </Text>\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\">\n {tr(\"registerVerifyDescription\") ??\n \"Please enter the verification code(s) sent to you.\"}\n </Text>\n\n {verificationError && (\n <Alert variant=\"light\" color=\"red\" icon={<IconAlertCircle />}>\n <Text size=\"sm\">{verificationError}</Text>\n </Alert>\n )}\n\n {registrationState.intent.expectEmailVerification && (\n <Stack gap={\"xs\"}>\n <Text size=\"sm\" fw={500}>\n {tr(\"registerEmailCode\") ?? \"Email verification code\"}\n </Text>\n <Flex justify=\"center\">\n <PinInput\n length={6}\n value={emailCode}\n onChange={setEmailCode}\n type=\"number\"\n oneTimeCode\n aria-label=\"Email verification code\"\n />\n </Flex>\n </Stack>\n )}\n\n {registrationState.intent.expectPhoneVerification && (\n <Stack gap={\"xs\"}>\n <Text size=\"sm\" fw={500}>\n {tr(\"registerPhoneCode\") ?? \"Phone verification code\"}\n </Text>\n <Flex justify=\"center\">\n <PinInput\n length={6}\n value={phoneCode}\n onChange={setPhoneCode}\n type=\"number\"\n oneTimeCode\n aria-label=\"Phone verification code\"\n />\n </Flex>\n </Stack>\n )}\n\n <ActionButton\n onClick={handleVerificationSubmit}\n loading={isSubmitting}\n disabled={!canSubmitVerification()}\n >\n {tr(\"registerVerifySubmit\") ?? \"Complete Registration\"}\n </ActionButton>\n\n <ActionButton\n variant=\"subtle\"\n onClick={() =>\n setRegistrationState({ phase: \"form\", intent: undefined })\n }\n >\n {tr(\"registerVerifyBack\") ?? \"Back to registration\"}\n </ActionButton>\n </Stack>\n </Card>\n </Stack>\n </Flex>\n );\n }\n\n // Registration form phase UI\n return (\n <Flex flex={1} justify={\"center\"} align={\"center\"}>\n <Stack gap={\"sm\"} w={360}>\n <Card withBorder p={\"lg\"} bg={\"var(--alepha-elevated)\"}>\n <Stack gap={\"md\"}>\n {!isRegistrationAllowed ? (\n <>\n <Alert\n variant=\"light\"\n color=\"yellow\"\n icon={<IconAlertCircle />}\n >\n <Text size=\"sm\">{tr(\"registerDisabled\")}</Text>\n </Alert>\n <ActionButton href={router.path(\"login\")}>\n {tr(\"registerBackToSignIn\")}\n </ActionButton>\n </>\n ) : hasUsernamePassword ? (\n <>\n <form {...form.props}>\n <Stack flex={1} gap={\"md\"}>\n {settings.usernameEnabled !== false &&\n form.input.username && (\n <Control\n title={tr(\"registerUsername\")}\n input={form.input.username}\n icon={<IconUser />}\n text={{\n autoComplete: \"username\",\n }}\n />\n )}\n {settings.emailEnabled !== false && form.input.email && (\n <Control\n title={tr(\"registerEmail\")}\n input={form.input.email}\n icon={<IconMail />}\n text={{\n autoComplete: \"email\",\n }}\n />\n )}\n {settings.phoneEnabled === true &&\n form.input.phoneNumber && (\n <Control\n title={tr(\"registerPhone\")}\n input={form.input.phoneNumber}\n icon={<IconPhone />}\n text={{\n autoComplete: \"tel\",\n }}\n />\n )}\n <Control\n title={tr(\"registerPassword\")}\n input={form.input.password}\n icon={<IconLock />}\n password={{\n autoComplete: \"new-password\",\n }}\n />\n <Control\n title={tr(\"registerConfirmPassword\")}\n input={form.input.confirmPassword}\n icon={<IconLock />}\n password={{\n autoComplete: \"new-password\",\n }}\n />\n <ActionButton form={form}>\n {tr(\"registerCreateAccount\")}\n </ActionButton>\n </Stack>\n </form>\n <Group align=\"center\" justify=\"center\" gap={\"md\"}>\n <Flex flex={1} h={\"1px\"} bg={\"var(--alepha-text-muted)\"} />\n <Text size=\"xs\">{tr(\"registerOr\")}</Text>\n <Flex flex={1} h={\"1px\"} bg={\"var(--alepha-text-muted)\"} />\n </Group>\n </>\n ) : null}\n {isRegistrationAllowed && (\n <>\n <Stack gap={\"sm\"}>\n {props.realmConfig.authenticationMethods.map(\n (method) =>\n method.type !== \"CREDENTIALS\" && (\n <ActionButton\n variant={\"default\"}\n key={method.type}\n leftSection={leftSection(method.name.toLowerCase())}\n onClick={() =>\n auth.login(method.name, {\n redirect,\n })\n }\n >\n {tr(\"registerContinueWith\", {\n args: [capitalize(method.name)],\n })}\n </ActionButton>\n ),\n )}\n </Stack>\n {props.realmConfig.authenticationMethods.length > 0 && (\n <Text size=\"sm\" ta=\"center\">\n {tr(\"registerHaveAccount\")}{\" \"}\n <ActionButton\n href={router.path(\"login\")}\n anchorProps={{ inherit: true }}\n >\n {tr(\"registerSignIn\")}\n </ActionButton>\n </Text>\n )}\n </>\n )}\n </Stack>\n </Card>\n <ActionButton variant={\"subtle\"} href={redirect}>\n {tr(\"registerCancel\")}\n </ActionButton>\n </Stack>\n </Flex>\n );\n};\n\nexport default Register;\n\nconst leftSection = (name: string) => {\n if (name === \"google\") {\n return <IconGoogle />;\n }\n\n if (name === \"github\") {\n return <IconGithub />;\n }\n};\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { t as ResetPassword_default } from "./ResetPassword-tO0oMzfo.js";
2
+
3
+ export { ResetPassword_default as default };
@@ -1,11 +1,11 @@
1
- import { i as ActionButton_default, n as Control_default } from "./core-D1MHij1j.js";
2
1
  import { useI18n } from "@alepha/react/i18n";
3
- import { useForm } from "@alepha/react/form";
2
+ import { ActionButton, Control } from "@alepha/ui";
4
3
  import { AlephaError, t } from "alepha";
5
4
  import { useClient, useRouter } from "@alepha/react";
6
5
  import { Alert, Card, Flex, PinInput, Stack, Text } from "@mantine/core";
7
6
  import { IconAlertCircle, IconCheck, IconInfoCircle, IconLock, IconMail } from "@tabler/icons-react";
8
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ import { useForm } from "@alepha/react/form";
9
9
  import { useState } from "react";
10
10
  import { resetPasswordRequestSchema } from "alepha/api/users";
11
11
 
@@ -98,7 +98,7 @@ const ResetPassword = (props) => {
98
98
  size: "sm",
99
99
  children: tr("resetPasswordDisabled")
100
100
  })
101
- }), /* @__PURE__ */ jsx(ActionButton_default, {
101
+ }), /* @__PURE__ */ jsx(ActionButton, {
102
102
  href: router.path("login"),
103
103
  children: tr("resetPasswordBackToSignIn")
104
104
  })] }) : resetState.step === "email" ? /* @__PURE__ */ jsx("form", {
@@ -118,7 +118,7 @@ const ResetPassword = (props) => {
118
118
  c: "dimmed",
119
119
  children: tr("resetPasswordEnterEmail")
120
120
  }),
121
- /* @__PURE__ */ jsx(Control_default, {
121
+ /* @__PURE__ */ jsx(Control, {
122
122
  title: tr("resetPasswordEmail"),
123
123
  input: emailForm.input.email,
124
124
  icon: /* @__PURE__ */ jsx(IconMail, {}),
@@ -128,7 +128,7 @@ const ResetPassword = (props) => {
128
128
  disabled: !isResetPasswordAllowed
129
129
  }
130
130
  }),
131
- /* @__PURE__ */ jsx(ActionButton_default, {
131
+ /* @__PURE__ */ jsx(ActionButton, {
132
132
  form: emailForm,
133
133
  disabled: !isResetPasswordAllowed,
134
134
  children: tr("resetPasswordSendCode")
@@ -170,7 +170,7 @@ const ResetPassword = (props) => {
170
170
  "aria-label": "Password reset verification code"
171
171
  })
172
172
  }),
173
- /* @__PURE__ */ jsx(ActionButton_default, {
173
+ /* @__PURE__ */ jsx(ActionButton, {
174
174
  variant: "subtle",
175
175
  onClick: handleResendCode,
176
176
  loading: isSubmitting,
@@ -194,7 +194,7 @@ const ResetPassword = (props) => {
194
194
  c: "dimmed",
195
195
  children: tr("resetPasswordEnterNewPassword")
196
196
  }),
197
- /* @__PURE__ */ jsx(Control_default, {
197
+ /* @__PURE__ */ jsx(Control, {
198
198
  title: tr("resetPasswordNewPassword"),
199
199
  input: passwordForm.input.password,
200
200
  icon: /* @__PURE__ */ jsx(IconLock, {}),
@@ -203,13 +203,13 @@ const ResetPassword = (props) => {
203
203
  autoFocus: true
204
204
  }
205
205
  }),
206
- /* @__PURE__ */ jsx(Control_default, {
206
+ /* @__PURE__ */ jsx(Control, {
207
207
  title: tr("resetPasswordConfirmPassword"),
208
208
  input: passwordForm.input.confirmPassword,
209
209
  icon: /* @__PURE__ */ jsx(IconLock, {}),
210
210
  password: { autoComplete: "new-password" }
211
211
  }),
212
- /* @__PURE__ */ jsx(ActionButton_default, {
212
+ /* @__PURE__ */ jsx(ActionButton, {
213
213
  form: passwordForm,
214
214
  children: tr("resetPasswordSetNewPassword")
215
215
  })
@@ -223,12 +223,12 @@ const ResetPassword = (props) => {
223
223
  size: "sm",
224
224
  children: tr("resetPasswordSuccess")
225
225
  })
226
- }), /* @__PURE__ */ jsx(ActionButton_default, {
226
+ }), /* @__PURE__ */ jsx(ActionButton, {
227
227
  href: router.path("login"),
228
228
  children: tr("resetPasswordBackToSignIn")
229
229
  })] })]
230
230
  })
231
- }), /* @__PURE__ */ jsx(ActionButton_default, {
231
+ }), /* @__PURE__ */ jsx(ActionButton, {
232
232
  variant: "subtle",
233
233
  href: redirect,
234
234
  children: tr("resetPasswordCancel")
@@ -240,4 +240,4 @@ var ResetPassword_default = ResetPassword;
240
240
 
241
241
  //#endregion
242
242
  export { ResetPassword_default as t };
243
- //# sourceMappingURL=ResetPassword-BzUjGG_-.js.map
243
+ //# sourceMappingURL=ResetPassword-tO0oMzfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResetPassword-tO0oMzfo.js","names":[],"sources":["../../src/auth/components/ResetPassword.tsx"],"sourcesContent":["import { useClient, useRouter } from \"@alepha/react\";\nimport { useForm } from \"@alepha/react/form\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { ActionButton, Control } from \"@alepha/ui\";\nimport { Alert, Card, Flex, PinInput, Stack, Text } from \"@mantine/core\";\nimport {\n IconAlertCircle,\n IconCheck,\n IconInfoCircle,\n IconLock,\n IconMail,\n} from \"@tabler/icons-react\";\nimport { AlephaError, t } from \"alepha\";\nimport type {\n PasswordResetIntentResponse,\n UserController,\n UserRealmConfig,\n} from \"alepha/api/users\";\nimport { resetPasswordRequestSchema } from \"alepha/api/users\";\nimport { useState } from \"react\";\nimport type { AuthI18n } from \"../AuthI18n.ts\";\nimport type { AuthRouter } from \"../AuthRouter.ts\";\n\nexport interface ResetPasswordProps {\n realmConfig: UserRealmConfig;\n}\n\ntype Step = \"email\" | \"code\" | \"password\" | \"success\";\n\ninterface ResetState {\n step: Step;\n intent?: PasswordResetIntentResponse;\n email?: string;\n code?: string;\n}\n\nconst ResetPassword = (props: ResetPasswordProps) => {\n const router = useRouter<AuthRouter>();\n const userCtrl = useClient<UserController>();\n const { tr } = useI18n<AuthI18n, \"en\">();\n const [resetState, setResetState] = useState<ResetState>({ step: \"email\" });\n const [error, setError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const redirect = router.query.redirect || \"/\";\n\n const isResetPasswordAllowed =\n props.realmConfig.settings?.resetPasswordAllowed !== false;\n\n // Phase 1: Request password reset intent\n const emailForm = useForm({\n schema: resetPasswordRequestSchema,\n handler: async (data) => {\n setError(null);\n const intent = await userCtrl.createPasswordResetIntent({\n body: { email: data.email },\n });\n\n setResetState({\n step: \"code\",\n intent,\n email: data.email,\n });\n },\n });\n\n // Phase 2: Complete password reset\n const passwordForm = useForm(\n {\n schema: t.object({\n password: t.string({ minLength: 8 }),\n confirmPassword: t.string({ minLength: 8 }),\n }),\n handler: async (data) => {\n if (data.password !== data.confirmPassword) {\n throw new AlephaError(\"Passwords do not match\");\n }\n\n if (!resetState.intent || !resetState.code) {\n throw new AlephaError(\"Invalid reset state\");\n }\n\n await userCtrl.completePasswordReset({\n body: {\n intentId: resetState.intent.intentId,\n code: resetState.code,\n newPassword: data.password,\n },\n });\n\n setResetState({ step: \"success\" });\n },\n },\n [resetState.intent, resetState.code],\n );\n\n const handleCodeComplete = (value: string) => {\n if (value.length === 6) {\n setResetState((prev) => ({\n ...prev,\n step: \"password\",\n code: value,\n }));\n }\n };\n\n const handleResendCode = async () => {\n if (!resetState.email) return;\n\n setIsSubmitting(true);\n setError(null);\n\n try {\n const intent = await userCtrl.createPasswordResetIntent({\n body: { email: resetState.email },\n });\n\n setResetState((prev) => ({\n ...prev,\n intent,\n }));\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to resend code\");\n } finally {\n setIsSubmitting(false);\n }\n };\n\n return (\n <Flex flex={1} justify={\"center\"} align={\"center\"}>\n <Stack gap={\"sm\"} w={360}>\n <Card withBorder p={\"lg\"} bg={\"var(--alepha-elevated)\"}>\n <Stack gap={\"md\"}>\n {error && (\n <Alert variant=\"light\" color=\"red\" icon={<IconAlertCircle />}>\n <Text size=\"sm\">{error}</Text>\n </Alert>\n )}\n\n {!isResetPasswordAllowed ? (\n <>\n <Alert\n variant=\"light\"\n color=\"yellow\"\n icon={<IconAlertCircle />}\n >\n <Text size=\"sm\">{tr(\"resetPasswordDisabled\")}</Text>\n </Alert>\n <ActionButton href={router.path(\"login\")}>\n {tr(\"resetPasswordBackToSignIn\")}\n </ActionButton>\n </>\n ) : resetState.step === \"email\" ? (\n <form {...emailForm.props}>\n <Stack flex={1} gap={\"md\"}>\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"resetPasswordTitle\")}\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n {tr(\"resetPasswordEnterEmail\")}\n </Text>\n <Control\n title={tr(\"resetPasswordEmail\")}\n input={emailForm.input.email}\n icon={<IconMail />}\n text={{\n autoComplete: \"email\",\n autoFocus: true,\n disabled: !isResetPasswordAllowed,\n }}\n />\n <ActionButton\n form={emailForm}\n disabled={!isResetPasswordAllowed}\n >\n {tr(\"resetPasswordSendCode\")}\n </ActionButton>\n </Stack>\n </form>\n ) : resetState.step === \"code\" ? (\n <Stack gap={\"md\"}>\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"resetPasswordTitle\")}\n </Text>\n <Alert variant=\"light\" color=\"blue\" icon={<IconInfoCircle />}>\n <Text size=\"sm\">{tr(\"resetPasswordCodeSent\")}</Text>\n </Alert>\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\">\n {tr(\"resetPasswordEnterCode\")}\n </Text>\n <Flex justify=\"center\">\n <PinInput\n length={6}\n type=\"number\"\n autoFocus\n oneTimeCode\n onComplete={handleCodeComplete}\n aria-label=\"Password reset verification code\"\n />\n </Flex>\n <ActionButton\n variant=\"subtle\"\n onClick={handleResendCode}\n loading={isSubmitting}\n >\n {tr(\"resetPasswordResendCode\")}\n </ActionButton>\n </Stack>\n ) : resetState.step === \"password\" ? (\n <form {...passwordForm.props}>\n <Stack flex={1} gap={\"md\"}>\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"resetPasswordTitle\")}\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n {tr(\"resetPasswordEnterNewPassword\")}\n </Text>\n <Control\n title={tr(\"resetPasswordNewPassword\")}\n input={passwordForm.input.password}\n icon={<IconLock />}\n password={{\n autoComplete: \"new-password\",\n autoFocus: true,\n }}\n />\n <Control\n title={tr(\"resetPasswordConfirmPassword\")}\n input={passwordForm.input.confirmPassword}\n icon={<IconLock />}\n password={{\n autoComplete: \"new-password\",\n }}\n />\n <ActionButton form={passwordForm}>\n {tr(\"resetPasswordSetNewPassword\")}\n </ActionButton>\n </Stack>\n </form>\n ) : (\n <>\n <Alert variant=\"light\" color=\"green\" icon={<IconCheck />}>\n <Text size=\"sm\">{tr(\"resetPasswordSuccess\")}</Text>\n </Alert>\n <ActionButton href={router.path(\"login\")}>\n {tr(\"resetPasswordBackToSignIn\")}\n </ActionButton>\n </>\n )}\n </Stack>\n </Card>\n <ActionButton variant={\"subtle\"} href={redirect}>\n {tr(\"resetPasswordCancel\")}\n </ActionButton>\n </Stack>\n </Flex>\n );\n};\n\nexport default ResetPassword;\n"],"mappings":"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"}