@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,16 +1,16 @@
1
- import { a as ui, i as ActionButton_default, t as AlephaUI } from "./core-D1MHij1j.js";
2
- import "./IconGoogle-Bfmuv9Rv.js";
3
- import { t as Login_default } from "./Login-JeXFsUf5.js";
4
- import { t as Register_default } from "./Register-CPQnvXCZ.js";
5
- import { t as ResetPassword_default } from "./ResetPassword-BzUjGG_-.js";
1
+ import "./IconGoogle-v_58os2T.js";
2
+ import { t as Login_default } from "./Login-OCrvjs9U.js";
3
+ import { t as Register_default } from "./Register-Ei34GSba.js";
4
+ import { t as ResetPassword_default } from "./ResetPassword-tO0oMzfo.js";
6
5
  import { AlephaReactAuth, useAuth } from "@alepha/react/auth";
7
6
  import { $dictionary, AlephaReactI18n } from "@alepha/react/i18n";
7
+ import { ActionButton, AlephaUI, ui } from "@alepha/ui";
8
8
  import { $module, t } from "alepha";
9
9
  import { $page } from "@alepha/react";
10
+ import { $client } from "alepha/server/links";
10
11
  import { Avatar } from "@mantine/core";
11
12
  import { IconLogout, IconUser } from "@tabler/icons-react";
12
13
  import { jsx } from "react/jsx-runtime";
13
- import { $client } from "alepha/server/links";
14
14
 
15
15
  //#region src/auth/AuthI18n.ts
16
16
  var AuthI18n = class {
@@ -120,7 +120,7 @@ var AuthRouter = class {
120
120
  login = $page({
121
121
  path: "/login",
122
122
  schema: { query: t.object({ redirect: t.optional(t.string()) }) },
123
- lazy: () => import("./Login-BcQOtG3v.js"),
123
+ lazy: () => import("./Login-BC2jTczq.js"),
124
124
  resolve: async () => {
125
125
  return { realmConfig: await this.userRealmClient.getRealmConfig() };
126
126
  }
@@ -128,7 +128,7 @@ var AuthRouter = class {
128
128
  register = $page({
129
129
  path: "/register",
130
130
  schema: { query: t.object({ redirect: t.optional(t.string()) }) },
131
- lazy: () => import("./Register-DpI_JdyO.js"),
131
+ lazy: () => import("./Register-Dh0lsQmI.js"),
132
132
  resolve: async () => {
133
133
  return { realmConfig: await this.userRealmClient.getRealmConfig() };
134
134
  }
@@ -136,7 +136,7 @@ var AuthRouter = class {
136
136
  resetPassword = $page({
137
137
  path: "/reset-password",
138
138
  schema: { query: t.object({ redirect: t.optional(t.string()) }) },
139
- lazy: () => import("./ResetPassword-BlK3xEpU.js"),
139
+ lazy: () => import("./ResetPassword-BnlAQAOE.js"),
140
140
  resolve: async () => {
141
141
  return { realmConfig: await this.userRealmClient.getRealmConfig() };
142
142
  }
@@ -164,7 +164,7 @@ const UserButton = (props) => {
164
164
  onClick: () => auth.logout()
165
165
  });
166
166
  const hasAvatar = !icon && auth.user.picture;
167
- return /* @__PURE__ */ jsx(ActionButton_default, {
167
+ return /* @__PURE__ */ jsx(ActionButton, {
168
168
  ...buttonProps,
169
169
  icon: hasAvatar ? void 0 : icon ?? IconUser,
170
170
  leftSection: hasAvatar ? /* @__PURE__ */ jsx(Avatar, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["items: ActionMenuItem[]","ActionButton"],"sources":["../../src/auth/AuthI18n.ts","../../src/auth/AuthRouter.ts","../../src/auth/components/buttons/UserButton.tsx","../../src/auth/index.ts"],"sourcesContent":["import { $dictionary } from \"@alepha/react/i18n\";\n\nexport class AuthI18n {\n en = $dictionary({\n name: \"alepha.ui.auth.en\",\n lazy: () => ({\n default: {\n loginSignIn: \"Sign in\",\n loginContinueWith: \"Continue with $1\",\n loginOr: \"OR\",\n loginCancel: \"Cancel\",\n loginForgotPassword: \"Forgot password?\",\n loginNoAccount: \"Don't have an account?\",\n loginSignUp: \"Sign up\",\n loginUsername: \"Username\",\n loginEmail: \"Email\",\n loginPhone: \"Phone number\",\n loginPassword: \"Password\",\n registerCreateAccount: \"Create account\",\n registerContinueWith: \"Continue with $1\",\n registerOr: \"OR\",\n registerCancel: \"Cancel\",\n registerHaveAccount: \"Already have an account?\",\n registerSignIn: \"Sign in\",\n registerUsername: \"Username\",\n registerEmail: \"Email\",\n registerPhone: \"Phone number\",\n registerPassword: \"Password\",\n registerConfirmPassword: \"Confirm password\",\n registerDisabled:\n \"Registration is not available. Please contact your administrator.\",\n registerBackToSignIn: \"Back to sign in\",\n registerVerifyTitle: \"Verify your account\",\n registerVerifyDescription:\n \"Please enter the verification code(s) sent to you.\",\n registerEmailCode: \"Email verification code\",\n registerPhoneCode: \"Phone verification code\",\n registerVerifySubmit: \"Complete Registration\",\n registerVerifyBack: \"Back to registration\",\n resetPasswordTitle: \"Reset password\",\n resetPasswordEmail: \"Email\",\n resetPasswordEnterEmail:\n \"Enter your email address to reset your password\",\n resetPasswordSendCode: \"Send verification code\",\n resetPasswordCodeSent: \"We've sent a verification code to your email.\",\n resetPasswordEnterCode: \"Enter the 6-digit code\",\n resetPasswordResendCode: \"Resend code\",\n resetPasswordEnterNewPassword: \"Create your new password\",\n resetPasswordNewPassword: \"New password\",\n resetPasswordConfirmPassword: \"Confirm password\",\n resetPasswordSetNewPassword: \"Set new password\",\n resetPasswordSuccess: \"Your password has been reset successfully.\",\n resetPasswordBackToSignIn: \"Back to sign in\",\n resetPasswordCancel: \"Cancel\",\n resetPasswordDisabled:\n \"Password reset is not available. Please contact your administrator.\",\n },\n }),\n });\n\n fr = $dictionary({\n lazy: () => ({\n default: {\n loginSignIn: \"Se connecter\",\n loginContinueWith: \"Continuer avec $1\",\n loginOr: \"OU\",\n loginCancel: \"Annuler\",\n loginForgotPassword: \"Mot de passe oublié ?\",\n loginNoAccount: \"Vous n'avez pas de compte ?\",\n loginSignUp: \"S'inscrire\",\n loginUsername: \"Nom d'utilisateur\",\n loginEmail: \"E-mail\",\n loginPhone: \"Numéro de téléphone\",\n loginPassword: \"Mot de passe\",\n registerCreateAccount: \"Créer un compte\",\n registerContinueWith: \"Continuer avec $1\",\n registerOr: \"OU\",\n registerCancel: \"Annuler\",\n registerHaveAccount: \"Vous avez déjà un compte ?\",\n registerSignIn: \"Se connecter\",\n registerUsername: \"Nom d'utilisateur\",\n registerEmail: \"E-mail\",\n registerPhone: \"Numéro de téléphone\",\n registerPassword: \"Mot de passe\",\n registerConfirmPassword: \"Confirmer le mot de passe\",\n registerDisabled:\n \"L'inscription n'est pas disponible. Veuillez contacter votre administrateur.\",\n registerBackToSignIn: \"Retour à la connexion\",\n registerVerifyTitle: \"Vérifiez votre compte\",\n registerVerifyDescription:\n \"Veuillez entrer le(s) code(s) de vérification qui vous ont été envoyés.\",\n registerEmailCode: \"Code de vérification par e-mail\",\n registerPhoneCode: \"Code de vérification par téléphone\",\n registerVerifySubmit: \"Terminer l'inscription\",\n registerVerifyBack: \"Retour à l'inscription\",\n resetPasswordTitle: \"Réinitialiser le mot de passe\",\n resetPasswordEmail: \"E-mail\",\n resetPasswordEnterEmail:\n \"Entrez votre adresse e-mail pour réinitialiser votre mot de passe\",\n resetPasswordSendCode: \"Envoyer le code de vérification\",\n resetPasswordCodeSent:\n \"Nous avons envoyé un code de vérification à votre e-mail.\",\n resetPasswordEnterCode: \"Entrez le code à 6 chiffres\",\n resetPasswordResendCode: \"Renvoyer le code\",\n resetPasswordEnterNewPassword: \"Créez votre nouveau mot de passe\",\n resetPasswordNewPassword: \"Nouveau mot de passe\",\n resetPasswordConfirmPassword: \"Confirmer le mot de passe\",\n resetPasswordSetNewPassword: \"Définir le nouveau mot de passe\",\n resetPasswordSuccess:\n \"Votre mot de passe a été réinitialisé avec succès.\",\n resetPasswordBackToSignIn: \"Retour à la connexion\",\n resetPasswordCancel: \"Annuler\",\n resetPasswordDisabled:\n \"La réinitialisation du mot de passe n'est pas disponible. Veuillez contacter votre administrateur.\",\n },\n }),\n });\n}\n","import { $page } from \"@alepha/react\";\nimport { t } from \"alepha\";\nimport type { UserRealmController } from \"alepha/api/users\";\nimport { $client } from \"alepha/server/links\";\n\nexport class AuthRouter {\n userRealmClient = $client<UserRealmController>();\n\n login = $page({\n path: \"/login\",\n schema: {\n query: t.object({\n redirect: t.optional(t.string()),\n }),\n },\n lazy: () => import(\"./components/Login.tsx\"),\n resolve: async () => {\n return {\n realmConfig: await this.userRealmClient.getRealmConfig(),\n };\n },\n });\n\n register = $page({\n path: \"/register\",\n schema: {\n query: t.object({\n redirect: t.optional(t.string()),\n }),\n },\n lazy: () => import(\"./components/Register.tsx\"),\n resolve: async () => {\n return {\n realmConfig: await this.userRealmClient.getRealmConfig(),\n };\n },\n });\n\n resetPassword = $page({\n path: \"/reset-password\",\n schema: {\n query: t.object({\n redirect: t.optional(t.string()),\n }),\n },\n lazy: () => import(\"./components/ResetPassword.tsx\"),\n resolve: async () => {\n return {\n realmConfig: await this.userRealmClient.getRealmConfig(),\n };\n },\n });\n}\n","import { useAuth } from \"@alepha/react/auth\";\nimport {\n ActionButton,\n type ActionMenuConfig,\n type ActionMenuItem,\n type ActionProps,\n ui,\n} from \"@alepha/ui\";\nimport { Avatar } from \"@mantine/core\";\nimport { IconLogout, IconUser } from \"@tabler/icons-react\";\nimport type { ReactNode } from \"react\";\n\nexport interface UserButtonProps\n extends Omit<ActionProps, \"menu\" | \"icon\" | \"onClick\"> {\n /**\n * Additional menu items to display before the logout option\n */\n menuItems?: ActionMenuItem[];\n\n /**\n * Custom logout label (default: \"Sign out\")\n */\n logoutLabel?: string;\n\n /**\n * Menu configuration overrides\n */\n menuConfig?: Partial<Omit<ActionMenuConfig, \"items\">>;\n\n /**\n * Whether to show a divider before logout (default: true when menuItems provided)\n */\n showLogoutDivider?: boolean;\n\n /**\n * Custom icon to use instead of user avatar (default: IconUser)\n */\n icon?: ReactNode;\n}\n\nconst UserButton = (props: UserButtonProps) => {\n const {\n menuItems = [],\n logoutLabel = \"Sign out\",\n menuConfig,\n showLogoutDivider = menuItems.length > 0,\n icon,\n children,\n ...buttonProps\n } = props;\n\n const auth = useAuth<{\n username?: string;\n email?: string;\n picture?: string;\n }>();\n\n if (!auth.user) {\n return null;\n }\n\n const userLabel = auth.user.username || auth.user.email;\n\n const items: ActionMenuItem[] = [];\n\n // Add user info label if available\n if (auth.user.email && auth.user.username) {\n items.push({\n type: \"label\",\n label: auth.user.email,\n });\n }\n\n // Add custom menu items\n items.push(...menuItems);\n\n // Add divider before logout if needed\n if (showLogoutDivider && items.length > 0) {\n items.push({ type: \"divider\" });\n }\n\n // Add logout item\n items.push({\n label: logoutLabel,\n icon: <IconLogout size={ui.sizes.icon.md} />,\n color: \"red\",\n onClick: () => auth.logout(),\n });\n\n // Use leftSection for Avatar (JSX element), icon prop for component types\n const hasAvatar = !icon && auth.user.picture;\n\n return (\n <ActionButton\n {...buttonProps}\n icon={hasAvatar ? undefined : (icon ?? IconUser)}\n leftSection={\n hasAvatar ? (\n <Avatar\n src={`/api/files/${auth.user.picture}`}\n size={24}\n radius=\"xl\"\n />\n ) : undefined\n }\n menu={{\n position: \"bottom-end\",\n width: 200,\n ...menuConfig,\n items,\n }}\n >\n {children ?? userLabel}\n </ActionButton>\n );\n};\n\nexport default UserButton;\n","import { AlephaReactAuth } from \"@alepha/react/auth\";\nimport { AlephaReactI18n } from \"@alepha/react/i18n\";\nimport { AlephaUI } from \"@alepha/ui\";\nimport { $module } from \"alepha\";\nimport { AuthI18n } from \"./AuthI18n.ts\";\nimport { AuthRouter } from \"./AuthRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./AuthRouter.ts\";\nexport type { UserButtonProps } from \"./components/buttons/UserButton.tsx\";\nexport { default as UserButton } from \"./components/buttons/UserButton.tsx\";\nexport { default as Login } from \"./components/Login.tsx\";\nexport { default as Register } from \"./components/Register.tsx\";\nexport { default as ResetPassword } from \"./components/ResetPassword.tsx\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Login UI Module\n *\n * @module alepha.ui.auth\n */\nexport const AlephaUIAuth = $module({\n name: \"alepha.ui.auth\",\n services: [AlephaUI, AlephaReactAuth, AlephaReactI18n, AuthRouter, AuthI18n],\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["items: ActionMenuItem[]"],"sources":["../../src/auth/AuthI18n.ts","../../src/auth/AuthRouter.ts","../../src/auth/components/buttons/UserButton.tsx","../../src/auth/index.ts"],"sourcesContent":["import { $dictionary } from \"@alepha/react/i18n\";\n\nexport class AuthI18n {\n en = $dictionary({\n name: \"alepha.ui.auth.en\",\n lazy: () => ({\n default: {\n loginSignIn: \"Sign in\",\n loginContinueWith: \"Continue with $1\",\n loginOr: \"OR\",\n loginCancel: \"Cancel\",\n loginForgotPassword: \"Forgot password?\",\n loginNoAccount: \"Don't have an account?\",\n loginSignUp: \"Sign up\",\n loginUsername: \"Username\",\n loginEmail: \"Email\",\n loginPhone: \"Phone number\",\n loginPassword: \"Password\",\n registerCreateAccount: \"Create account\",\n registerContinueWith: \"Continue with $1\",\n registerOr: \"OR\",\n registerCancel: \"Cancel\",\n registerHaveAccount: \"Already have an account?\",\n registerSignIn: \"Sign in\",\n registerUsername: \"Username\",\n registerEmail: \"Email\",\n registerPhone: \"Phone number\",\n registerPassword: \"Password\",\n registerConfirmPassword: \"Confirm password\",\n registerDisabled:\n \"Registration is not available. Please contact your administrator.\",\n registerBackToSignIn: \"Back to sign in\",\n registerVerifyTitle: \"Verify your account\",\n registerVerifyDescription:\n \"Please enter the verification code(s) sent to you.\",\n registerEmailCode: \"Email verification code\",\n registerPhoneCode: \"Phone verification code\",\n registerVerifySubmit: \"Complete Registration\",\n registerVerifyBack: \"Back to registration\",\n resetPasswordTitle: \"Reset password\",\n resetPasswordEmail: \"Email\",\n resetPasswordEnterEmail:\n \"Enter your email address to reset your password\",\n resetPasswordSendCode: \"Send verification code\",\n resetPasswordCodeSent: \"We've sent a verification code to your email.\",\n resetPasswordEnterCode: \"Enter the 6-digit code\",\n resetPasswordResendCode: \"Resend code\",\n resetPasswordEnterNewPassword: \"Create your new password\",\n resetPasswordNewPassword: \"New password\",\n resetPasswordConfirmPassword: \"Confirm password\",\n resetPasswordSetNewPassword: \"Set new password\",\n resetPasswordSuccess: \"Your password has been reset successfully.\",\n resetPasswordBackToSignIn: \"Back to sign in\",\n resetPasswordCancel: \"Cancel\",\n resetPasswordDisabled:\n \"Password reset is not available. Please contact your administrator.\",\n },\n }),\n });\n\n fr = $dictionary({\n lazy: () => ({\n default: {\n loginSignIn: \"Se connecter\",\n loginContinueWith: \"Continuer avec $1\",\n loginOr: \"OU\",\n loginCancel: \"Annuler\",\n loginForgotPassword: \"Mot de passe oublié ?\",\n loginNoAccount: \"Vous n'avez pas de compte ?\",\n loginSignUp: \"S'inscrire\",\n loginUsername: \"Nom d'utilisateur\",\n loginEmail: \"E-mail\",\n loginPhone: \"Numéro de téléphone\",\n loginPassword: \"Mot de passe\",\n registerCreateAccount: \"Créer un compte\",\n registerContinueWith: \"Continuer avec $1\",\n registerOr: \"OU\",\n registerCancel: \"Annuler\",\n registerHaveAccount: \"Vous avez déjà un compte ?\",\n registerSignIn: \"Se connecter\",\n registerUsername: \"Nom d'utilisateur\",\n registerEmail: \"E-mail\",\n registerPhone: \"Numéro de téléphone\",\n registerPassword: \"Mot de passe\",\n registerConfirmPassword: \"Confirmer le mot de passe\",\n registerDisabled:\n \"L'inscription n'est pas disponible. Veuillez contacter votre administrateur.\",\n registerBackToSignIn: \"Retour à la connexion\",\n registerVerifyTitle: \"Vérifiez votre compte\",\n registerVerifyDescription:\n \"Veuillez entrer le(s) code(s) de vérification qui vous ont été envoyés.\",\n registerEmailCode: \"Code de vérification par e-mail\",\n registerPhoneCode: \"Code de vérification par téléphone\",\n registerVerifySubmit: \"Terminer l'inscription\",\n registerVerifyBack: \"Retour à l'inscription\",\n resetPasswordTitle: \"Réinitialiser le mot de passe\",\n resetPasswordEmail: \"E-mail\",\n resetPasswordEnterEmail:\n \"Entrez votre adresse e-mail pour réinitialiser votre mot de passe\",\n resetPasswordSendCode: \"Envoyer le code de vérification\",\n resetPasswordCodeSent:\n \"Nous avons envoyé un code de vérification à votre e-mail.\",\n resetPasswordEnterCode: \"Entrez le code à 6 chiffres\",\n resetPasswordResendCode: \"Renvoyer le code\",\n resetPasswordEnterNewPassword: \"Créez votre nouveau mot de passe\",\n resetPasswordNewPassword: \"Nouveau mot de passe\",\n resetPasswordConfirmPassword: \"Confirmer le mot de passe\",\n resetPasswordSetNewPassword: \"Définir le nouveau mot de passe\",\n resetPasswordSuccess:\n \"Votre mot de passe a été réinitialisé avec succès.\",\n resetPasswordBackToSignIn: \"Retour à la connexion\",\n resetPasswordCancel: \"Annuler\",\n resetPasswordDisabled:\n \"La réinitialisation du mot de passe n'est pas disponible. Veuillez contacter votre administrateur.\",\n },\n }),\n });\n}\n","import { $page } from \"@alepha/react\";\nimport { t } from \"alepha\";\nimport type { UserRealmController } from \"alepha/api/users\";\nimport { $client } from \"alepha/server/links\";\n\nexport class AuthRouter {\n userRealmClient = $client<UserRealmController>();\n\n login = $page({\n path: \"/login\",\n schema: {\n query: t.object({\n redirect: t.optional(t.string()),\n }),\n },\n lazy: () => import(\"./components/Login.tsx\"),\n resolve: async () => {\n return {\n realmConfig: await this.userRealmClient.getRealmConfig(),\n };\n },\n });\n\n register = $page({\n path: \"/register\",\n schema: {\n query: t.object({\n redirect: t.optional(t.string()),\n }),\n },\n lazy: () => import(\"./components/Register.tsx\"),\n resolve: async () => {\n return {\n realmConfig: await this.userRealmClient.getRealmConfig(),\n };\n },\n });\n\n resetPassword = $page({\n path: \"/reset-password\",\n schema: {\n query: t.object({\n redirect: t.optional(t.string()),\n }),\n },\n lazy: () => import(\"./components/ResetPassword.tsx\"),\n resolve: async () => {\n return {\n realmConfig: await this.userRealmClient.getRealmConfig(),\n };\n },\n });\n}\n","import { useAuth } from \"@alepha/react/auth\";\nimport {\n ActionButton,\n type ActionMenuConfig,\n type ActionMenuItem,\n type ActionProps,\n ui,\n} from \"@alepha/ui\";\nimport { Avatar } from \"@mantine/core\";\nimport { IconLogout, IconUser } from \"@tabler/icons-react\";\nimport type { ReactNode } from \"react\";\n\nexport interface UserButtonProps\n extends Omit<ActionProps, \"menu\" | \"icon\" | \"onClick\"> {\n /**\n * Additional menu items to display before the logout option\n */\n menuItems?: ActionMenuItem[];\n\n /**\n * Custom logout label (default: \"Sign out\")\n */\n logoutLabel?: string;\n\n /**\n * Menu configuration overrides\n */\n menuConfig?: Partial<Omit<ActionMenuConfig, \"items\">>;\n\n /**\n * Whether to show a divider before logout (default: true when menuItems provided)\n */\n showLogoutDivider?: boolean;\n\n /**\n * Custom icon to use instead of user avatar (default: IconUser)\n */\n icon?: ReactNode;\n}\n\nconst UserButton = (props: UserButtonProps) => {\n const {\n menuItems = [],\n logoutLabel = \"Sign out\",\n menuConfig,\n showLogoutDivider = menuItems.length > 0,\n icon,\n children,\n ...buttonProps\n } = props;\n\n const auth = useAuth<{\n username?: string;\n email?: string;\n picture?: string;\n }>();\n\n if (!auth.user) {\n return null;\n }\n\n const userLabel = auth.user.username || auth.user.email;\n\n const items: ActionMenuItem[] = [];\n\n // Add user info label if available\n if (auth.user.email && auth.user.username) {\n items.push({\n type: \"label\",\n label: auth.user.email,\n });\n }\n\n // Add custom menu items\n items.push(...menuItems);\n\n // Add divider before logout if needed\n if (showLogoutDivider && items.length > 0) {\n items.push({ type: \"divider\" });\n }\n\n // Add logout item\n items.push({\n label: logoutLabel,\n icon: <IconLogout size={ui.sizes.icon.md} />,\n color: \"red\",\n onClick: () => auth.logout(),\n });\n\n // Use leftSection for Avatar (JSX element), icon prop for component types\n const hasAvatar = !icon && auth.user.picture;\n\n return (\n <ActionButton\n {...buttonProps}\n icon={hasAvatar ? undefined : (icon ?? IconUser)}\n leftSection={\n hasAvatar ? (\n <Avatar\n src={`/api/files/${auth.user.picture}`}\n size={24}\n radius=\"xl\"\n />\n ) : undefined\n }\n menu={{\n position: \"bottom-end\",\n width: 200,\n ...menuConfig,\n items,\n }}\n >\n {children ?? userLabel}\n </ActionButton>\n );\n};\n\nexport default UserButton;\n","import { AlephaReactAuth } from \"@alepha/react/auth\";\nimport { AlephaReactI18n } from \"@alepha/react/i18n\";\nimport { AlephaUI } from \"@alepha/ui\";\nimport { $module } from \"alepha\";\nimport { AuthI18n } from \"./AuthI18n.ts\";\nimport { AuthRouter } from \"./AuthRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./AuthRouter.ts\";\nexport type { UserButtonProps } from \"./components/buttons/UserButton.tsx\";\nexport { default as UserButton } from \"./components/buttons/UserButton.tsx\";\nexport { default as Login } from \"./components/Login.tsx\";\nexport { default as Register } from \"./components/Register.tsx\";\nexport { default as ResetPassword } from \"./components/ResetPassword.tsx\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Login UI Module\n *\n * @module alepha.ui.auth\n */\nexport const AlephaUIAuth = $module({\n name: \"alepha.ui.auth\",\n services: [AlephaUI, AlephaReactAuth, AlephaReactI18n, AuthRouter, AuthI18n],\n});\n"],"mappings":"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"}