keycloakify 10.0.0-rc.40 → 10.0.0-rc.42

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 (262) hide show
  1. package/account/DefaultPage.d.ts +5 -0
  2. package/account/{Fallback.js → DefaultPage.js} +2 -2
  3. package/account/DefaultPage.js.map +1 -0
  4. package/account/Template.d.ts +2 -1
  5. package/account/Template.js +2 -3
  6. package/account/Template.js.map +1 -1
  7. package/account/TemplateProps.d.ts +3 -3
  8. package/account/i18n/i18n.d.ts +3 -1
  9. package/account/i18n/i18n.js +2 -2
  10. package/account/i18n/i18n.js.map +1 -1
  11. package/account/i18n/index.d.ts +4 -8
  12. package/account/i18n/index.js +1 -4
  13. package/account/i18n/index.js.map +1 -1
  14. package/account/pages/Account.d.ts +2 -1
  15. package/account/pages/Account.js +3 -4
  16. package/account/pages/Account.js.map +1 -1
  17. package/account/pages/Applications.d.ts +2 -1
  18. package/account/pages/Applications.js +3 -4
  19. package/account/pages/Applications.js.map +1 -1
  20. package/account/pages/FederatedIdentity.d.ts +2 -1
  21. package/account/pages/FederatedIdentity.js +3 -4
  22. package/account/pages/FederatedIdentity.js.map +1 -1
  23. package/account/pages/Log.d.ts +2 -1
  24. package/account/pages/Log.js +3 -4
  25. package/account/pages/Log.js.map +1 -1
  26. package/account/pages/PageProps.d.ts +4 -4
  27. package/account/pages/Password.d.ts +2 -1
  28. package/account/pages/Password.js +3 -3
  29. package/account/pages/Password.js.map +1 -1
  30. package/account/pages/Sessions.d.ts +2 -1
  31. package/account/pages/Sessions.js +3 -4
  32. package/account/pages/Sessions.js.map +1 -1
  33. package/account/pages/Totp.d.ts +2 -1
  34. package/account/pages/Totp.js +3 -4
  35. package/account/pages/Totp.js.map +1 -1
  36. package/bin/453.index.js +4 -4
  37. package/bin/538.index.js +37 -2
  38. package/login/{Fallback.d.ts → DefaultPage.d.ts} +4 -3
  39. package/login/{Fallback.js → DefaultPage.js} +2 -2
  40. package/login/DefaultPage.js.map +1 -0
  41. package/login/Template.d.ts +2 -1
  42. package/login/Template.js +2 -3
  43. package/login/Template.js.map +1 -1
  44. package/login/TemplateProps.d.ts +3 -3
  45. package/login/UserProfileFormFields.d.ts +2 -1
  46. package/login/UserProfileFormFields.js +3 -4
  47. package/login/UserProfileFormFields.js.map +1 -1
  48. package/login/i18n/i18n.d.ts +3 -1
  49. package/login/i18n/i18n.js +1 -1
  50. package/login/i18n/i18n.js.map +1 -1
  51. package/login/i18n/index.d.ts +4 -8
  52. package/login/i18n/index.js +1 -4
  53. package/login/i18n/index.js.map +1 -1
  54. package/login/lib/useUserProfileForm.d.ts +2 -0
  55. package/login/lib/useUserProfileForm.js +5 -5
  56. package/login/lib/useUserProfileForm.js.map +1 -1
  57. package/login/pages/Code.d.ts +2 -1
  58. package/login/pages/Code.js +3 -4
  59. package/login/pages/Code.js.map +1 -1
  60. package/login/pages/DeleteAccountConfirm.d.ts +2 -1
  61. package/login/pages/DeleteAccountConfirm.js +3 -4
  62. package/login/pages/DeleteAccountConfirm.js.map +1 -1
  63. package/login/pages/DeleteCredential.d.ts +2 -1
  64. package/login/pages/DeleteCredential.js +3 -4
  65. package/login/pages/DeleteCredential.js.map +1 -1
  66. package/login/pages/Error.d.ts +2 -1
  67. package/login/pages/Error.js +3 -4
  68. package/login/pages/Error.js.map +1 -1
  69. package/login/pages/FrontchannelLogout.d.ts +2 -1
  70. package/login/pages/FrontchannelLogout.js +3 -4
  71. package/login/pages/FrontchannelLogout.js.map +1 -1
  72. package/login/pages/IdpReviewUserProfile.d.ts +2 -1
  73. package/login/pages/IdpReviewUserProfile.js +3 -4
  74. package/login/pages/IdpReviewUserProfile.js.map +1 -1
  75. package/login/pages/Info.d.ts +2 -1
  76. package/login/pages/Info.js +3 -4
  77. package/login/pages/Info.js.map +1 -1
  78. package/login/pages/Login.d.ts +2 -1
  79. package/login/pages/Login.js +2 -4
  80. package/login/pages/Login.js.map +1 -1
  81. package/login/pages/LoginConfigTotp.d.ts +2 -1
  82. package/login/pages/LoginConfigTotp.js +2 -4
  83. package/login/pages/LoginConfigTotp.js.map +1 -1
  84. package/login/pages/LoginIdpLinkConfirm.d.ts +2 -1
  85. package/login/pages/LoginIdpLinkConfirm.js +3 -4
  86. package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
  87. package/login/pages/LoginIdpLinkEmail.d.ts +2 -1
  88. package/login/pages/LoginIdpLinkEmail.js +3 -4
  89. package/login/pages/LoginIdpLinkEmail.js.map +1 -1
  90. package/login/pages/LoginOauth2DeviceVerifyUserCode.d.ts +2 -1
  91. package/login/pages/LoginOauth2DeviceVerifyUserCode.js +3 -4
  92. package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
  93. package/login/pages/LoginOauthGrant.d.ts +2 -1
  94. package/login/pages/LoginOauthGrant.js +3 -4
  95. package/login/pages/LoginOauthGrant.js.map +1 -1
  96. package/login/pages/LoginOtp.d.ts +2 -1
  97. package/login/pages/LoginOtp.js +3 -4
  98. package/login/pages/LoginOtp.js.map +1 -1
  99. package/login/pages/LoginPageExpired.d.ts +2 -1
  100. package/login/pages/LoginPageExpired.js +3 -4
  101. package/login/pages/LoginPageExpired.js.map +1 -1
  102. package/login/pages/LoginPassword.d.ts +2 -1
  103. package/login/pages/LoginPassword.js +2 -4
  104. package/login/pages/LoginPassword.js.map +1 -1
  105. package/login/pages/LoginRecoveryAuthnCodeConfig.d.ts +2 -1
  106. package/login/pages/LoginRecoveryAuthnCodeConfig.js +2 -4
  107. package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
  108. package/login/pages/LoginRecoveryAuthnCodeInput.d.ts +2 -1
  109. package/login/pages/LoginRecoveryAuthnCodeInput.js +3 -4
  110. package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
  111. package/login/pages/LoginResetOtp.d.ts +2 -1
  112. package/login/pages/LoginResetOtp.js +3 -4
  113. package/login/pages/LoginResetOtp.js.map +1 -1
  114. package/login/pages/LoginResetPassword.d.ts +2 -1
  115. package/login/pages/LoginResetPassword.js +3 -4
  116. package/login/pages/LoginResetPassword.js.map +1 -1
  117. package/login/pages/LoginUpdatePassword.d.ts +2 -1
  118. package/login/pages/LoginUpdatePassword.js +2 -4
  119. package/login/pages/LoginUpdatePassword.js.map +1 -1
  120. package/login/pages/LoginUpdateProfile.d.ts +2 -1
  121. package/login/pages/LoginUpdateProfile.js +3 -4
  122. package/login/pages/LoginUpdateProfile.js.map +1 -1
  123. package/login/pages/LoginUsername.d.ts +2 -1
  124. package/login/pages/LoginUsername.js +3 -4
  125. package/login/pages/LoginUsername.js.map +1 -1
  126. package/login/pages/LoginVerifyEmail.d.ts +2 -1
  127. package/login/pages/LoginVerifyEmail.js +3 -4
  128. package/login/pages/LoginVerifyEmail.js.map +1 -1
  129. package/login/pages/LoginX509Info.d.ts +2 -1
  130. package/login/pages/LoginX509Info.js +3 -4
  131. package/login/pages/LoginX509Info.js.map +1 -1
  132. package/login/pages/LogoutConfirm.d.ts +2 -1
  133. package/login/pages/LogoutConfirm.js +3 -4
  134. package/login/pages/LogoutConfirm.js.map +1 -1
  135. package/login/pages/PageProps.d.ts +4 -4
  136. package/login/pages/Register.d.ts +2 -1
  137. package/login/pages/Register.js +2 -4
  138. package/login/pages/Register.js.map +1 -1
  139. package/login/pages/SamlPostForm.d.ts +2 -1
  140. package/login/pages/SamlPostForm.js +3 -4
  141. package/login/pages/SamlPostForm.js.map +1 -1
  142. package/login/pages/SelectAuthenticator.d.ts +2 -1
  143. package/login/pages/SelectAuthenticator.js +3 -4
  144. package/login/pages/SelectAuthenticator.js.map +1 -1
  145. package/login/pages/Terms.d.ts +2 -1
  146. package/login/pages/Terms.js +3 -4
  147. package/login/pages/Terms.js.map +1 -1
  148. package/login/pages/UpdateEmail.d.ts +2 -1
  149. package/login/pages/UpdateEmail.js +2 -4
  150. package/login/pages/UpdateEmail.js.map +1 -1
  151. package/login/pages/WebauthnAuthenticate.d.ts +2 -1
  152. package/login/pages/WebauthnAuthenticate.js +3 -4
  153. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  154. package/login/pages/WebauthnError.d.ts +2 -1
  155. package/login/pages/WebauthnError.js +3 -4
  156. package/login/pages/WebauthnError.js.map +1 -1
  157. package/login/pages/WebauthnRegister.d.ts +2 -1
  158. package/login/pages/WebauthnRegister.js +2 -4
  159. package/login/pages/WebauthnRegister.js.map +1 -1
  160. package/package.json +9 -9
  161. package/src/account/{Fallback.tsx → DefaultPage.tsx} +3 -2
  162. package/src/account/Template.tsx +4 -4
  163. package/src/account/TemplateProps.ts +4 -3
  164. package/src/account/i18n/i18n.tsx +3 -3
  165. package/src/account/i18n/index.ts +4 -9
  166. package/src/account/pages/Account.tsx +5 -5
  167. package/src/account/pages/Applications.tsx +5 -5
  168. package/src/account/pages/FederatedIdentity.tsx +5 -5
  169. package/src/account/pages/Log.tsx +5 -5
  170. package/src/account/pages/PageProps.ts +4 -4
  171. package/src/account/pages/Password.tsx +5 -4
  172. package/src/account/pages/Sessions.tsx +5 -5
  173. package/src/account/pages/Totp.tsx +5 -5
  174. package/src/bin/eject-page.ts +4 -4
  175. package/src/bin/shared/generateKcGenTs.ts +46 -36
  176. package/src/login/{Fallback.tsx → DefaultPage.tsx} +4 -3
  177. package/src/login/Template.tsx +4 -3
  178. package/src/login/TemplateProps.ts +3 -4
  179. package/src/login/UserProfileFormFields.tsx +5 -5
  180. package/src/login/i18n/i18n.tsx +2 -2
  181. package/src/login/i18n/index.ts +4 -9
  182. package/src/login/lib/useUserProfileForm.tsx +8 -6
  183. package/src/login/pages/Code.tsx +5 -4
  184. package/src/login/pages/DeleteAccountConfirm.tsx +5 -5
  185. package/src/login/pages/DeleteCredential.tsx +5 -4
  186. package/src/login/pages/Error.tsx +12 -5
  187. package/src/login/pages/FrontchannelLogout.tsx +5 -4
  188. package/src/login/pages/IdpReviewUserProfile.tsx +6 -4
  189. package/src/login/pages/Info.tsx +5 -4
  190. package/src/login/pages/Login.tsx +4 -4
  191. package/src/login/pages/LoginConfigTotp.tsx +4 -6
  192. package/src/login/pages/LoginIdpLinkConfirm.tsx +5 -5
  193. package/src/login/pages/LoginIdpLinkEmail.tsx +11 -5
  194. package/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx +11 -5
  195. package/src/login/pages/LoginOauthGrant.tsx +5 -4
  196. package/src/login/pages/LoginOtp.tsx +5 -4
  197. package/src/login/pages/LoginPageExpired.tsx +5 -5
  198. package/src/login/pages/LoginPassword.tsx +4 -4
  199. package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +10 -5
  200. package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +5 -4
  201. package/src/login/pages/LoginResetOtp.tsx +5 -4
  202. package/src/login/pages/LoginResetPassword.tsx +5 -4
  203. package/src/login/pages/LoginUpdatePassword.tsx +4 -4
  204. package/src/login/pages/LoginUpdateProfile.tsx +6 -4
  205. package/src/login/pages/LoginUsername.tsx +5 -4
  206. package/src/login/pages/LoginVerifyEmail.tsx +5 -4
  207. package/src/login/pages/LoginX509Info.tsx +5 -5
  208. package/src/login/pages/LogoutConfirm.tsx +5 -5
  209. package/src/login/pages/PageProps.ts +4 -4
  210. package/src/login/pages/Register.tsx +12 -5
  211. package/src/login/pages/SamlPostForm.tsx +5 -5
  212. package/src/login/pages/SelectAuthenticator.tsx +5 -4
  213. package/src/login/pages/Terms.tsx +12 -5
  214. package/src/login/pages/UpdateEmail.tsx +5 -4
  215. package/src/login/pages/WebauthnAuthenticate.tsx +5 -4
  216. package/src/login/pages/WebauthnError.tsx +12 -5
  217. package/src/login/pages/WebauthnRegister.tsx +4 -4
  218. package/stories/account/pages/Account.stories.tsx +5 -5
  219. package/stories/account/pages/FederatedIdentity.stories.tsx +6 -6
  220. package/stories/account/pages/Log.stories.tsx +5 -5
  221. package/stories/account/pages/Password.stories.tsx +6 -6
  222. package/stories/account/pages/Sessions.stories.tsx +6 -6
  223. package/stories/account/pages/Totp.stories.tsx +8 -8
  224. package/stories/login/pages/Code.stories.tsx +5 -5
  225. package/stories/login/pages/DeleteAccountConfirm.stories.tsx +5 -5
  226. package/stories/login/pages/DeleteCredential.stories.tsx +5 -5
  227. package/stories/login/pages/Error.stories.tsx +6 -6
  228. package/stories/login/pages/FrontchannelLogout.stories.tsx +5 -5
  229. package/stories/login/pages/IdpReviewUserProfile.stories.tsx +5 -5
  230. package/stories/login/pages/Info.stories.tsx +7 -7
  231. package/stories/login/pages/Login.stories.tsx +13 -13
  232. package/stories/login/pages/LoginConfigTotp.stories.tsx +7 -7
  233. package/stories/login/pages/LoginDeviceVerifyUserCode.stories.tsx +5 -5
  234. package/stories/login/pages/LoginIdpLinkConfirm.stories.tsx +5 -5
  235. package/stories/login/pages/LoginIdpLinkEmail.stories.tsx +5 -5
  236. package/stories/login/pages/LoginOauth2DeviceVerifyUserCode.stories.tsx +5 -5
  237. package/stories/login/pages/LoginOauthGrant.stories.tsx +5 -5
  238. package/stories/login/pages/LoginOtp.stories.tsx +5 -5
  239. package/stories/login/pages/LoginPageExpired.stories.tsx +5 -5
  240. package/stories/login/pages/LoginPassword.stories.tsx +5 -5
  241. package/stories/login/pages/LoginRecoveryAuthnCodeConfig.stories.tsx +5 -5
  242. package/stories/login/pages/LoginRecoveryAuthnCodeInput.stories.tsx +5 -5
  243. package/stories/login/pages/LoginResetOtp.stories.tsx +5 -5
  244. package/stories/login/pages/LoginResetPassword.stories.tsx +6 -6
  245. package/stories/login/pages/LoginUpdatePassword.stories.tsx +5 -5
  246. package/stories/login/pages/LoginUpdateProfile.stories.tsx +5 -5
  247. package/stories/login/pages/LoginUsername.stories.tsx +6 -6
  248. package/stories/login/pages/LoginVerifyEmail.stories.tsx +5 -5
  249. package/stories/login/pages/LoginX509Info.stories.tsx +5 -5
  250. package/stories/login/pages/LogoutConfirm.stories.tsx +5 -5
  251. package/stories/login/pages/Register.stories.tsx +11 -11
  252. package/stories/login/pages/SamlPostForm.stories.tsx +5 -5
  253. package/stories/login/pages/SelectAuthenticator.stories.tsx +6 -6
  254. package/stories/login/pages/Terms.stories.tsx +7 -7
  255. package/stories/login/pages/UpdateEmail.stories.tsx +5 -5
  256. package/stories/login/pages/WebauthnAuthenticate.stories.tsx +5 -5
  257. package/stories/login/pages/WebauthnError.stories.tsx +5 -5
  258. package/stories/login/pages/WebauthnRegister.stories.tsx +5 -5
  259. package/vite-plugin/index.js +48 -24
  260. package/account/Fallback.d.ts +0 -4
  261. package/account/Fallback.js.map +0 -1
  262. package/login/Fallback.js.map +0 -1
@@ -4,15 +4,15 @@ import { getKcClsx } from "keycloakify/login/lib/kcClsx";
4
4
  import type { UserProfileFormFieldsProps } from "keycloakify/login/UserProfileFormFields";
5
5
  import type { PageProps } from "keycloakify/login/pages/PageProps";
6
6
  import type { KcContext } from "../KcContext";
7
- import { useI18n } from "../i18n";
7
+ import type { I18n } from "../i18n";
8
8
 
9
- type LoginUpdateProfileProps = PageProps<Extract<KcContext, { pageId: "login-update-profile.ftl" }>> & {
9
+ type LoginUpdateProfileProps = PageProps<Extract<KcContext, { pageId: "login-update-profile.ftl" }>, I18n> & {
10
10
  UserProfileFormFields: LazyOrNot<(props: UserProfileFormFieldsProps) => JSX.Element>;
11
11
  doMakeUserConfirmPassword: boolean;
12
12
  };
13
13
 
14
14
  export default function LoginUpdateProfile(props: LoginUpdateProfileProps) {
15
- const { kcContext, doUseDefaultCss, Template, classes, UserProfileFormFields, doMakeUserConfirmPassword } = props;
15
+ const { kcContext, i18n, doUseDefaultCss, Template, classes, UserProfileFormFields, doMakeUserConfirmPassword } = props;
16
16
 
17
17
  const { kcClsx } = getKcClsx({
18
18
  doUseDefaultCss,
@@ -21,13 +21,14 @@ export default function LoginUpdateProfile(props: LoginUpdateProfileProps) {
21
21
 
22
22
  const { url, isAppInitiatedAction } = kcContext;
23
23
 
24
- const { msg, msgStr } = useI18n({ kcContext });
24
+ const { msg, msgStr } = i18n;
25
25
 
26
26
  const [isFormSubmittable, setIsFormSubmittable] = useState(false);
27
27
 
28
28
  return (
29
29
  <Template
30
30
  kcContext={kcContext}
31
+ i18n={i18n}
31
32
  doUseDefaultCss={doUseDefaultCss}
32
33
  classes={classes}
33
34
  displayRequiredFields
@@ -36,6 +37,7 @@ export default function LoginUpdateProfile(props: LoginUpdateProfileProps) {
36
37
  <form id="kc-update-profile-form" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
37
38
  <UserProfileFormFields
38
39
  kcContext={kcContext}
40
+ i18n={i18n}
39
41
  kcClsx={kcClsx}
40
42
  onIsFormSubmittableValueChange={setIsFormSubmittable}
41
43
  doMakeUserConfirmPassword={doMakeUserConfirmPassword}
@@ -3,10 +3,10 @@ import { clsx } from "keycloakify/tools/clsx";
3
3
  import { getKcClsx } from "keycloakify/login/lib/kcClsx";
4
4
  import type { PageProps } from "keycloakify/login/pages/PageProps";
5
5
  import type { KcContext } from "../KcContext";
6
- import { useI18n } from "../i18n";
6
+ import type { I18n } from "../i18n";
7
7
 
8
- export default function LoginUsername(props: PageProps<Extract<KcContext, { pageId: "login-username.ftl" }>>) {
9
- const { kcContext, doUseDefaultCss, Template, classes } = props;
8
+ export default function LoginUsername(props: PageProps<Extract<KcContext, { pageId: "login-username.ftl" }>, I18n>) {
9
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
10
10
 
11
11
  const { kcClsx } = getKcClsx({
12
12
  doUseDefaultCss,
@@ -15,13 +15,14 @@ export default function LoginUsername(props: PageProps<Extract<KcContext, { page
15
15
 
16
16
  const { social, realm, url, usernameHidden, login, registrationDisabled, messagesPerField } = kcContext;
17
17
 
18
- const { msg, msgStr } = useI18n({ kcContext });
18
+ const { msg, msgStr } = i18n;
19
19
 
20
20
  const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
21
21
 
22
22
  return (
23
23
  <Template
24
24
  kcContext={kcContext}
25
+ i18n={i18n}
25
26
  doUseDefaultCss={doUseDefaultCss}
26
27
  classes={classes}
27
28
  displayMessage={!messagesPerField.existsError("username")}
@@ -1,17 +1,18 @@
1
1
  import type { PageProps } from "keycloakify/login/pages/PageProps";
2
2
  import type { KcContext } from "../KcContext";
3
- import { useI18n } from "../i18n";
3
+ import type { I18n } from "../i18n";
4
4
 
5
- export default function LoginVerifyEmail(props: PageProps<Extract<KcContext, { pageId: "login-verify-email.ftl" }>>) {
6
- const { kcContext, doUseDefaultCss, Template, classes } = props;
5
+ export default function LoginVerifyEmail(props: PageProps<Extract<KcContext, { pageId: "login-verify-email.ftl" }>, I18n>) {
6
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
7
7
 
8
- const { msg } = useI18n({ kcContext });
8
+ const { msg } = i18n;
9
9
 
10
10
  const { url, user } = kcContext;
11
11
 
12
12
  return (
13
13
  <Template
14
14
  kcContext={kcContext}
15
+ i18n={i18n}
15
16
  doUseDefaultCss={doUseDefaultCss}
16
17
  classes={classes}
17
18
  displayInfo
@@ -1,10 +1,10 @@
1
1
  import { getKcClsx } from "keycloakify/login/lib/kcClsx";
2
2
  import type { PageProps } from "keycloakify/login/pages/PageProps";
3
3
  import type { KcContext } from "../KcContext";
4
- import { useI18n } from "../i18n";
4
+ import type { I18n } from "../i18n";
5
5
 
6
- export default function LoginX509Info(props: PageProps<Extract<KcContext, { pageId: "login-x509-info.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function LoginX509Info(props: PageProps<Extract<KcContext, { pageId: "login-x509-info.ftl" }>, I18n>) {
7
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
8
8
 
9
9
  const { kcClsx } = getKcClsx({
10
10
  doUseDefaultCss,
@@ -13,10 +13,10 @@ export default function LoginX509Info(props: PageProps<Extract<KcContext, { page
13
13
 
14
14
  const { url, x509 } = kcContext;
15
15
 
16
- const { msg, msgStr } = useI18n({ kcContext });
16
+ const { msg, msgStr } = i18n;
17
17
 
18
18
  return (
19
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("doLogIn")}>
19
+ <Template kcContext={kcContext} i18n={i18n} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("doLogIn")}>
20
20
  <form id="kc-x509-login-info" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
21
21
  <div className={kcClsx("kcFormGroupClass")}>
22
22
  <div className={kcClsx("kcLabelWrapperClass")}>
@@ -1,10 +1,10 @@
1
1
  import { getKcClsx } from "keycloakify/login/lib/kcClsx";
2
2
  import type { PageProps } from "keycloakify/login/pages/PageProps";
3
3
  import type { KcContext } from "../KcContext";
4
- import { useI18n } from "../i18n";
4
+ import type { I18n } from "../i18n";
5
5
 
6
- export default function LogoutConfirm(props: PageProps<Extract<KcContext, { pageId: "logout-confirm.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function LogoutConfirm(props: PageProps<Extract<KcContext, { pageId: "logout-confirm.ftl" }>, I18n>) {
7
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
8
8
 
9
9
  const { kcClsx } = getKcClsx({
10
10
  doUseDefaultCss,
@@ -13,10 +13,10 @@ export default function LogoutConfirm(props: PageProps<Extract<KcContext, { page
13
13
 
14
14
  const { url, client, logoutConfirm } = kcContext;
15
15
 
16
- const { msg, msgStr } = useI18n({ kcContext });
16
+ const { msg, msgStr } = i18n;
17
17
 
18
18
  return (
19
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("logoutConfirmTitle")}>
19
+ <Template kcContext={kcContext} i18n={i18n} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("logoutConfirmTitle")}>
20
20
  <div id="kc-logout-confirm" className="content-area">
21
21
  <p className="instruction">{msg("logoutConfirmHeader")}</p>
22
22
  <form className="form-actions" action={url.logoutConfirmAction} method="POST">
@@ -1,10 +1,10 @@
1
1
  import { type TemplateProps, type ClassKey } from "keycloakify/login/TemplateProps";
2
2
  import type { LazyOrNot } from "keycloakify/tools/LazyOrNot";
3
- import type { KcContext } from "keycloakify/account/KcContext";
4
3
 
5
- export type PageProps<NarowedKcContext = KcContext> = {
6
- Template: LazyOrNot<(props: TemplateProps<any>) => JSX.Element | null>;
7
- kcContext: NarowedKcContext;
4
+ export type PageProps<NarrowedKcContext, I18n> = {
5
+ Template: LazyOrNot<(props: TemplateProps<any, any>) => JSX.Element | null>;
6
+ kcContext: NarrowedKcContext;
7
+ i18n: I18n;
8
8
  doUseDefaultCss: boolean;
9
9
  classes?: Partial<Record<ClassKey, string>>;
10
10
  };
@@ -6,15 +6,15 @@ import { getKcClsx, type KcClsx } from "keycloakify/login/lib/kcClsx";
6
6
  import type { UserProfileFormFieldsProps } from "keycloakify/login/UserProfileFormFields";
7
7
  import type { PageProps } from "keycloakify/login/pages/PageProps";
8
8
  import type { KcContext } from "../KcContext";
9
- import { useI18n, type I18n } from "../i18n";
9
+ import type { I18n } from "../i18n";
10
10
 
11
- type RegisterProps = PageProps<Extract<KcContext, { pageId: "register.ftl" }>> & {
11
+ type RegisterProps = PageProps<Extract<KcContext, { pageId: "register.ftl" }>, I18n> & {
12
12
  UserProfileFormFields: LazyOrNot<(props: UserProfileFormFieldsProps) => JSX.Element>;
13
13
  doMakeUserConfirmPassword: boolean;
14
14
  };
15
15
 
16
16
  export default function Register(props: RegisterProps) {
17
- const { kcContext, doUseDefaultCss, Template, classes, UserProfileFormFields, doMakeUserConfirmPassword } = props;
17
+ const { kcContext, i18n, doUseDefaultCss, Template, classes, UserProfileFormFields, doMakeUserConfirmPassword } = props;
18
18
 
19
19
  const { kcClsx } = getKcClsx({
20
20
  doUseDefaultCss,
@@ -23,16 +23,23 @@ export default function Register(props: RegisterProps) {
23
23
 
24
24
  const { url, messagesPerField, recaptchaRequired, recaptchaSiteKey, termsAcceptanceRequired } = kcContext;
25
25
 
26
- const i18n = useI18n({ kcContext });
27
26
  const { msg, msgStr } = i18n;
28
27
 
29
28
  const [isFormSubmittable, setIsFormSubmittable] = useState(false);
30
29
 
31
30
  return (
32
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("registerTitle")} displayRequiredFields>
31
+ <Template
32
+ kcContext={kcContext}
33
+ i18n={i18n}
34
+ doUseDefaultCss={doUseDefaultCss}
35
+ classes={classes}
36
+ headerNode={msg("registerTitle")}
37
+ displayRequiredFields
38
+ >
33
39
  <form id="kc-register-form" className={kcClsx("kcFormClass")} action={url.registrationAction} method="post">
34
40
  <UserProfileFormFields
35
41
  kcContext={kcContext}
42
+ i18n={i18n}
36
43
  kcClsx={kcClsx}
37
44
  onIsFormSubmittableValueChange={setIsFormSubmittable}
38
45
  doMakeUserConfirmPassword={doMakeUserConfirmPassword}
@@ -1,12 +1,12 @@
1
1
  import { useEffect, useState } from "react";
2
2
  import type { PageProps } from "keycloakify/login/pages/PageProps";
3
3
  import type { KcContext } from "../KcContext";
4
- import { useI18n } from "../i18n";
4
+ import type { I18n } from "../i18n";
5
5
 
6
- export default function SamlPostForm(props: PageProps<Extract<KcContext, { pageId: "saml-post-form.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function SamlPostForm(props: PageProps<Extract<KcContext, { pageId: "saml-post-form.ftl" }>, I18n>) {
7
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
8
8
 
9
- const { msgStr, msg } = useI18n({ kcContext });
9
+ const { msgStr, msg } = i18n;
10
10
 
11
11
  const { samlPost } = kcContext;
12
12
 
@@ -26,7 +26,7 @@ export default function SamlPostForm(props: PageProps<Extract<KcContext, { pageI
26
26
  htmlFormElement.submit();
27
27
  }, [htmlFormElement]);
28
28
  return (
29
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("saml.post-form.title")}>
29
+ <Template kcContext={kcContext} i18n={i18n} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("saml.post-form.title")}>
30
30
  <p>{msg("saml.post-form.message")}</p>
31
31
  <form name="saml-post-binding" method="post" action={samlPost.url} ref={setHtmlFormElement}>
32
32
  {samlPost.SAMLRequest && <input type="hidden" name="SAMLRequest" value={samlPost.SAMLRequest} />}
@@ -1,18 +1,19 @@
1
1
  import { getKcClsx } from "keycloakify/login/lib/kcClsx";
2
2
  import type { PageProps } from "keycloakify/login/pages/PageProps";
3
3
  import type { KcContext } from "../KcContext";
4
- import { useI18n } from "../i18n";
4
+ import type { I18n } from "../i18n";
5
5
 
6
- export default function SelectAuthenticator(props: PageProps<Extract<KcContext, { pageId: "select-authenticator.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function SelectAuthenticator(props: PageProps<Extract<KcContext, { pageId: "select-authenticator.ftl" }>, I18n>) {
7
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
8
8
  const { url, auth } = kcContext;
9
9
 
10
10
  const { kcClsx } = getKcClsx({ doUseDefaultCss, classes });
11
- const { msg } = useI18n({ kcContext });
11
+ const { msg } = i18n;
12
12
 
13
13
  return (
14
14
  <Template
15
15
  kcContext={kcContext}
16
+ i18n={i18n}
16
17
  doUseDefaultCss={doUseDefaultCss}
17
18
  classes={classes}
18
19
  displayInfo={false}
@@ -3,17 +3,17 @@ import { getKcClsx } from "keycloakify/login/lib/kcClsx";
3
3
  import { useTermsMarkdown } from "keycloakify/login/lib/useDownloadTerms";
4
4
  import type { PageProps } from "keycloakify/login/pages/PageProps";
5
5
  import type { KcContext } from "../KcContext";
6
- import { useI18n } from "../i18n";
6
+ import type { I18n } from "../i18n";
7
7
 
8
- export default function Terms(props: PageProps<Extract<KcContext, { pageId: "terms.ftl" }>>) {
9
- const { kcContext, doUseDefaultCss, Template, classes } = props;
8
+ export default function Terms(props: PageProps<Extract<KcContext, { pageId: "terms.ftl" }>, I18n>) {
9
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
10
10
 
11
11
  const { kcClsx } = getKcClsx({
12
12
  doUseDefaultCss,
13
13
  classes
14
14
  });
15
15
 
16
- const { msg, msgStr } = useI18n({ kcContext });
16
+ const { msg, msgStr } = i18n;
17
17
 
18
18
  const { locale, url } = kcContext;
19
19
 
@@ -24,7 +24,14 @@ export default function Terms(props: PageProps<Extract<KcContext, { pageId: "ter
24
24
  }
25
25
 
26
26
  return (
27
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} displayMessage={false} headerNode={msg("termsTitle")}>
27
+ <Template
28
+ kcContext={kcContext}
29
+ i18n={i18n}
30
+ doUseDefaultCss={doUseDefaultCss}
31
+ classes={classes}
32
+ displayMessage={false}
33
+ headerNode={msg("termsTitle")}
34
+ >
28
35
  <div id="kc-terms-text" lang={termsLanguageTag !== locale?.currentLanguageTag ? termsLanguageTag : undefined}>
29
36
  <Markdown>{termsMarkdown}</Markdown>
30
37
  </div>
@@ -4,22 +4,21 @@ import { getKcClsx, type KcClsx } from "keycloakify/login/lib/kcClsx";
4
4
  import type { UserProfileFormFieldsProps } from "keycloakify/login/UserProfileFormFields";
5
5
  import type { PageProps } from "keycloakify/login/pages/PageProps";
6
6
  import type { KcContext } from "../KcContext";
7
- import { useI18n, type I18n } from "../i18n";
7
+ import type { I18n } from "../i18n";
8
8
 
9
- type UpdateEmailProps = PageProps<Extract<KcContext, { pageId: "update-email.ftl" }>> & {
9
+ type UpdateEmailProps = PageProps<Extract<KcContext, { pageId: "update-email.ftl" }>, I18n> & {
10
10
  UserProfileFormFields: LazyOrNot<(props: UserProfileFormFieldsProps) => JSX.Element>;
11
11
  doMakeUserConfirmPassword: boolean;
12
12
  };
13
13
 
14
14
  export default function UpdateEmail(props: UpdateEmailProps) {
15
- const { kcContext, doUseDefaultCss, Template, classes, UserProfileFormFields, doMakeUserConfirmPassword } = props;
15
+ const { kcContext, i18n, doUseDefaultCss, Template, classes, UserProfileFormFields, doMakeUserConfirmPassword } = props;
16
16
 
17
17
  const { kcClsx } = getKcClsx({
18
18
  doUseDefaultCss,
19
19
  classes
20
20
  });
21
21
 
22
- const i18n = useI18n({ kcContext });
23
22
  const { msg, msgStr } = i18n;
24
23
 
25
24
  const [isFormSubmittable, setIsFormSubmittable] = useState(false);
@@ -29,6 +28,7 @@ export default function UpdateEmail(props: UpdateEmailProps) {
29
28
  return (
30
29
  <Template
31
30
  kcContext={kcContext}
31
+ i18n={i18n}
32
32
  doUseDefaultCss={doUseDefaultCss}
33
33
  classes={classes}
34
34
  displayMessage={messagesPerField.exists("global")}
@@ -38,6 +38,7 @@ export default function UpdateEmail(props: UpdateEmailProps) {
38
38
  <form id="kc-update-email-form" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
39
39
  <UserProfileFormFields
40
40
  kcContext={kcContext}
41
+ i18n={i18n}
41
42
  kcClsx={kcClsx}
42
43
  onIsFormSubmittableValueChange={setIsFormSubmittable}
43
44
  doMakeUserConfirmPassword={doMakeUserConfirmPassword}
@@ -5,10 +5,10 @@ import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags";
5
5
  import { getKcClsx } from "keycloakify/login/lib/kcClsx";
6
6
  import type { PageProps } from "keycloakify/login/pages/PageProps";
7
7
  import type { KcContext } from "../KcContext";
8
- import { useI18n } from "../i18n";
8
+ import type { I18n } from "../i18n";
9
9
 
10
- export default function WebauthnAuthenticate(props: PageProps<Extract<KcContext, { pageId: "webauthn-authenticate.ftl" }>>) {
11
- const { kcContext, doUseDefaultCss, Template, classes } = props;
10
+ export default function WebauthnAuthenticate(props: PageProps<Extract<KcContext, { pageId: "webauthn-authenticate.ftl" }>, I18n>) {
11
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
12
12
 
13
13
  const { kcClsx } = getKcClsx({ doUseDefaultCss, classes });
14
14
 
@@ -26,7 +26,7 @@ export default function WebauthnAuthenticate(props: PageProps<Extract<KcContext,
26
26
  shouldDisplayAuthenticators
27
27
  } = kcContext;
28
28
 
29
- const { msg, msgStr, advancedMsg } = useI18n({ kcContext });
29
+ const { msg, msgStr, advancedMsg } = i18n;
30
30
 
31
31
  const { insertScriptTags } = useInsertScriptTags({
32
32
  componentOrHookName: "WebauthnAuthenticate",
@@ -137,6 +137,7 @@ export default function WebauthnAuthenticate(props: PageProps<Extract<KcContext,
137
137
  return (
138
138
  <Template
139
139
  kcContext={kcContext}
140
+ i18n={i18n}
140
141
  doUseDefaultCss={doUseDefaultCss}
141
142
  classes={classes}
142
143
  displayMessage={!messagesPerField.existsError("username")}
@@ -1,14 +1,14 @@
1
1
  import { getKcClsx } from "keycloakify/login/lib/kcClsx";
2
2
  import type { PageProps } from "keycloakify/login/pages/PageProps";
3
3
  import type { KcContext } from "../KcContext";
4
- import { useI18n } from "../i18n";
4
+ import type { I18n } from "../i18n";
5
5
 
6
- export default function WebauthnError(props: PageProps<Extract<KcContext, { pageId: "webauthn-error.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function WebauthnError(props: PageProps<Extract<KcContext, { pageId: "webauthn-error.ftl" }>, I18n>) {
7
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
8
8
 
9
9
  const { url, isAppInitiatedAction } = kcContext;
10
10
 
11
- const { msg, msgStr } = useI18n({ kcContext });
11
+ const { msg, msgStr } = i18n;
12
12
 
13
13
  const { kcClsx } = getKcClsx({
14
14
  doUseDefaultCss,
@@ -16,7 +16,14 @@ export default function WebauthnError(props: PageProps<Extract<KcContext, { page
16
16
  });
17
17
 
18
18
  return (
19
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} displayMessage headerNode={msg("webauthn-error-title")}>
19
+ <Template
20
+ kcContext={kcContext}
21
+ i18n={i18n}
22
+ doUseDefaultCss={doUseDefaultCss}
23
+ classes={classes}
24
+ displayMessage
25
+ headerNode={msg("webauthn-error-title")}
26
+ >
20
27
  <form id="kc-error-credential-form" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
21
28
  <input type="hidden" id="executionValue" name="authenticationExecution" />
22
29
  <input type="hidden" id="isSetRetry" name="isSetRetry" />
@@ -4,10 +4,10 @@ import { getKcClsx, type KcClsx } from "keycloakify/login/lib/kcClsx";
4
4
  import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags";
5
5
  import type { PageProps } from "keycloakify/login/pages/PageProps";
6
6
  import type { KcContext } from "../KcContext";
7
- import { useI18n, type I18n } from "../i18n";
7
+ import type { I18n } from "../i18n";
8
8
 
9
- export default function WebauthnRegister(props: PageProps<Extract<KcContext, { pageId: "webauthn-register.ftl" }>>) {
10
- const { kcContext, doUseDefaultCss, Template, classes } = props;
9
+ export default function WebauthnRegister(props: PageProps<Extract<KcContext, { pageId: "webauthn-register.ftl" }>, I18n>) {
10
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
11
11
 
12
12
  const { kcClsx } = getKcClsx({ doUseDefaultCss, classes });
13
13
 
@@ -29,7 +29,6 @@ export default function WebauthnRegister(props: PageProps<Extract<KcContext, { p
29
29
  isAppInitiatedAction
30
30
  } = kcContext;
31
31
 
32
- const i18n = useI18n({ kcContext });
33
32
  const { msg, msgStr } = i18n;
34
33
 
35
34
  const { insertScriptTags } = useInsertScriptTags({
@@ -207,6 +206,7 @@ export default function WebauthnRegister(props: PageProps<Extract<KcContext, { p
207
206
  return (
208
207
  <Template
209
208
  kcContext={kcContext}
209
+ i18n={i18n}
210
210
  doUseDefaultCss={doUseDefaultCss}
211
211
  classes={classes}
212
212
  headerNode={
@@ -1,18 +1,18 @@
1
1
  import React from "react";
2
2
  import type { Meta, StoryObj } from "@storybook/react";
3
- import { createPageStory } from "../PageStory";
3
+ import { createKcPageStory } from "../KcPageStory";
4
4
 
5
- const { PageStory } = createPageStory({ pageId: "account.ftl" });
5
+ const { KcPageStory } = createKcPageStory({ pageId: "account.ftl" });
6
6
 
7
7
  const meta = {
8
8
  title: "account/account.ftl",
9
- component: PageStory
10
- } satisfies Meta<typeof PageStory>;
9
+ component: KcPageStory
10
+ } satisfies Meta<typeof KcPageStory>;
11
11
 
12
12
  export default meta;
13
13
 
14
14
  type Story = StoryObj<typeof meta>;
15
15
 
16
16
  export const Default: Story = {
17
- render: () => <PageStory />
17
+ render: () => <KcPageStory />
18
18
  };
@@ -1,25 +1,25 @@
1
1
  import React from "react";
2
2
  import type { Meta, StoryObj } from "@storybook/react";
3
- import { createPageStory } from "../PageStory";
3
+ import { createKcPageStory } from "../KcPageStory";
4
4
 
5
- const { PageStory } = createPageStory({ pageId: "federatedIdentity.ftl" });
5
+ const { KcPageStory } = createKcPageStory({ pageId: "federatedIdentity.ftl" });
6
6
 
7
7
  const meta = {
8
8
  title: "account/federatedIdentity.ftl",
9
- component: PageStory
10
- } satisfies Meta<typeof PageStory>;
9
+ component: KcPageStory
10
+ } satisfies Meta<typeof KcPageStory>;
11
11
 
12
12
  export default meta;
13
13
 
14
14
  type Story = StoryObj<typeof meta>;
15
15
 
16
16
  export const Default: Story = {
17
- render: () => <PageStory />
17
+ render: () => <KcPageStory />
18
18
  };
19
19
 
20
20
  export const NotConnected: Story = {
21
21
  render: () => (
22
- <PageStory
22
+ <KcPageStory
23
23
  kcContext={{
24
24
  pageId: "federatedIdentity.ftl",
25
25
  federatedIdentity: {
@@ -1,15 +1,15 @@
1
1
  import React from "react";
2
2
  import type { Meta, StoryObj } from "@storybook/react";
3
- import { createPageStory } from "../PageStory";
3
+ import { createKcPageStory } from "../KcPageStory";
4
4
 
5
- const { PageStory } = createPageStory({
5
+ const { KcPageStory } = createKcPageStory({
6
6
  pageId: "log.ftl"
7
7
  });
8
8
 
9
9
  const meta = {
10
10
  title: "account/log.ftl",
11
- component: PageStory
12
- } satisfies Meta<typeof PageStory>;
11
+ component: KcPageStory
12
+ } satisfies Meta<typeof KcPageStory>;
13
13
 
14
14
  export default meta;
15
15
 
@@ -17,7 +17,7 @@ type Story = StoryObj<typeof meta>;
17
17
 
18
18
  export const Default: Story = {
19
19
  render: () => (
20
- <PageStory
20
+ <KcPageStory
21
21
  kcContext={{
22
22
  log: {
23
23
  events: [
@@ -1,25 +1,25 @@
1
1
  import React from "react";
2
2
  import type { Meta, StoryObj } from "@storybook/react";
3
- import { createPageStory } from "../PageStory";
3
+ import { createKcPageStory } from "../KcPageStory";
4
4
 
5
- const { PageStory } = createPageStory({ pageId: "password.ftl" });
5
+ const { KcPageStory } = createKcPageStory({ pageId: "password.ftl" });
6
6
 
7
7
  const meta = {
8
8
  title: "account/password.ftl",
9
- component: PageStory
10
- } satisfies Meta<typeof PageStory>;
9
+ component: KcPageStory
10
+ } satisfies Meta<typeof KcPageStory>;
11
11
 
12
12
  export default meta;
13
13
 
14
14
  type Story = StoryObj<typeof meta>;
15
15
 
16
16
  export const Default: Story = {
17
- render: () => <PageStory />
17
+ render: () => <KcPageStory />
18
18
  };
19
19
 
20
20
  export const WithMessage: Story = {
21
21
  render: () => (
22
- <PageStory
22
+ <KcPageStory
23
23
  kcContext={{
24
24
  message: { type: "success", summary: "This is a test message" }
25
25
  }}
@@ -1,13 +1,13 @@
1
1
  import React from "react";
2
2
  import type { Meta, StoryObj } from "@storybook/react";
3
- import { createPageStory } from "../PageStory";
3
+ import { createKcPageStory } from "../KcPageStory";
4
4
 
5
- const { PageStory } = createPageStory({ pageId: "sessions.ftl" });
5
+ const { KcPageStory } = createKcPageStory({ pageId: "sessions.ftl" });
6
6
 
7
7
  const meta = {
8
8
  title: "account/sessions.ftl",
9
- component: PageStory
10
- } satisfies Meta<typeof PageStory>;
9
+ component: KcPageStory
10
+ } satisfies Meta<typeof KcPageStory>;
11
11
 
12
12
  export default meta;
13
13
 
@@ -15,7 +15,7 @@ type Story = StoryObj<typeof meta>;
15
15
 
16
16
  export const Default: Story = {
17
17
  render: () => (
18
- <PageStory
18
+ <KcPageStory
19
19
  kcContext={{
20
20
  sessions: {
21
21
  sessions: [
@@ -45,7 +45,7 @@ export const Default: Story = {
45
45
 
46
46
  export const WithError: Story = {
47
47
  render: () => (
48
- <PageStory
48
+ <KcPageStory
49
49
  kcContext={{
50
50
  url: { passwordUrl: "/auth/realms/keycloakify/account/password" },
51
51
  stateChecker: "xQ7EOgFrLi4EvnJ8dbXKhwFGWk_bkOp0X89mhilt1os",