keycloakify 10.0.0-rc.40 → 10.0.0-rc.41

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 (219) 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/538.index.js +37 -2
  37. package/login/{Fallback.d.ts → DefaultPage.d.ts} +4 -3
  38. package/login/{Fallback.js → DefaultPage.js} +2 -2
  39. package/login/DefaultPage.js.map +1 -0
  40. package/login/Template.d.ts +2 -1
  41. package/login/Template.js +2 -3
  42. package/login/Template.js.map +1 -1
  43. package/login/TemplateProps.d.ts +3 -3
  44. package/login/UserProfileFormFields.d.ts +2 -1
  45. package/login/UserProfileFormFields.js +3 -4
  46. package/login/UserProfileFormFields.js.map +1 -1
  47. package/login/i18n/i18n.d.ts +3 -1
  48. package/login/i18n/i18n.js +1 -1
  49. package/login/i18n/i18n.js.map +1 -1
  50. package/login/i18n/index.d.ts +4 -8
  51. package/login/i18n/index.js +1 -4
  52. package/login/i18n/index.js.map +1 -1
  53. package/login/lib/useUserProfileForm.d.ts +2 -0
  54. package/login/lib/useUserProfileForm.js +5 -5
  55. package/login/lib/useUserProfileForm.js.map +1 -1
  56. package/login/pages/Code.d.ts +2 -1
  57. package/login/pages/Code.js +3 -4
  58. package/login/pages/Code.js.map +1 -1
  59. package/login/pages/DeleteAccountConfirm.d.ts +2 -1
  60. package/login/pages/DeleteAccountConfirm.js +3 -4
  61. package/login/pages/DeleteAccountConfirm.js.map +1 -1
  62. package/login/pages/DeleteCredential.d.ts +2 -1
  63. package/login/pages/DeleteCredential.js +3 -4
  64. package/login/pages/DeleteCredential.js.map +1 -1
  65. package/login/pages/Error.d.ts +2 -1
  66. package/login/pages/Error.js +3 -4
  67. package/login/pages/Error.js.map +1 -1
  68. package/login/pages/FrontchannelLogout.d.ts +2 -1
  69. package/login/pages/FrontchannelLogout.js +3 -4
  70. package/login/pages/FrontchannelLogout.js.map +1 -1
  71. package/login/pages/IdpReviewUserProfile.d.ts +2 -1
  72. package/login/pages/IdpReviewUserProfile.js +3 -4
  73. package/login/pages/IdpReviewUserProfile.js.map +1 -1
  74. package/login/pages/Info.d.ts +2 -1
  75. package/login/pages/Info.js +3 -4
  76. package/login/pages/Info.js.map +1 -1
  77. package/login/pages/Login.d.ts +2 -1
  78. package/login/pages/Login.js +2 -4
  79. package/login/pages/Login.js.map +1 -1
  80. package/login/pages/LoginConfigTotp.d.ts +2 -1
  81. package/login/pages/LoginConfigTotp.js +2 -4
  82. package/login/pages/LoginConfigTotp.js.map +1 -1
  83. package/login/pages/LoginIdpLinkConfirm.d.ts +2 -1
  84. package/login/pages/LoginIdpLinkConfirm.js +3 -4
  85. package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
  86. package/login/pages/LoginIdpLinkEmail.d.ts +2 -1
  87. package/login/pages/LoginIdpLinkEmail.js +3 -4
  88. package/login/pages/LoginIdpLinkEmail.js.map +1 -1
  89. package/login/pages/LoginOauth2DeviceVerifyUserCode.d.ts +2 -1
  90. package/login/pages/LoginOauth2DeviceVerifyUserCode.js +3 -4
  91. package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
  92. package/login/pages/LoginOauthGrant.d.ts +2 -1
  93. package/login/pages/LoginOauthGrant.js +3 -4
  94. package/login/pages/LoginOauthGrant.js.map +1 -1
  95. package/login/pages/LoginOtp.d.ts +2 -1
  96. package/login/pages/LoginOtp.js +3 -4
  97. package/login/pages/LoginOtp.js.map +1 -1
  98. package/login/pages/LoginPageExpired.d.ts +2 -1
  99. package/login/pages/LoginPageExpired.js +3 -4
  100. package/login/pages/LoginPageExpired.js.map +1 -1
  101. package/login/pages/LoginPassword.d.ts +2 -1
  102. package/login/pages/LoginPassword.js +2 -4
  103. package/login/pages/LoginPassword.js.map +1 -1
  104. package/login/pages/LoginRecoveryAuthnCodeConfig.d.ts +2 -1
  105. package/login/pages/LoginRecoveryAuthnCodeConfig.js +2 -4
  106. package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
  107. package/login/pages/LoginRecoveryAuthnCodeInput.d.ts +2 -1
  108. package/login/pages/LoginRecoveryAuthnCodeInput.js +3 -4
  109. package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
  110. package/login/pages/LoginResetOtp.d.ts +2 -1
  111. package/login/pages/LoginResetOtp.js +3 -4
  112. package/login/pages/LoginResetOtp.js.map +1 -1
  113. package/login/pages/LoginResetPassword.d.ts +2 -1
  114. package/login/pages/LoginResetPassword.js +3 -4
  115. package/login/pages/LoginResetPassword.js.map +1 -1
  116. package/login/pages/LoginUpdatePassword.d.ts +2 -1
  117. package/login/pages/LoginUpdatePassword.js +2 -4
  118. package/login/pages/LoginUpdatePassword.js.map +1 -1
  119. package/login/pages/LoginUpdateProfile.d.ts +2 -1
  120. package/login/pages/LoginUpdateProfile.js +3 -4
  121. package/login/pages/LoginUpdateProfile.js.map +1 -1
  122. package/login/pages/LoginUsername.d.ts +2 -1
  123. package/login/pages/LoginUsername.js +3 -4
  124. package/login/pages/LoginUsername.js.map +1 -1
  125. package/login/pages/LoginVerifyEmail.d.ts +2 -1
  126. package/login/pages/LoginVerifyEmail.js +3 -4
  127. package/login/pages/LoginVerifyEmail.js.map +1 -1
  128. package/login/pages/LoginX509Info.d.ts +2 -1
  129. package/login/pages/LoginX509Info.js +3 -4
  130. package/login/pages/LoginX509Info.js.map +1 -1
  131. package/login/pages/LogoutConfirm.d.ts +2 -1
  132. package/login/pages/LogoutConfirm.js +3 -4
  133. package/login/pages/LogoutConfirm.js.map +1 -1
  134. package/login/pages/PageProps.d.ts +4 -4
  135. package/login/pages/Register.d.ts +2 -1
  136. package/login/pages/Register.js +2 -4
  137. package/login/pages/Register.js.map +1 -1
  138. package/login/pages/SamlPostForm.d.ts +2 -1
  139. package/login/pages/SamlPostForm.js +3 -4
  140. package/login/pages/SamlPostForm.js.map +1 -1
  141. package/login/pages/SelectAuthenticator.d.ts +2 -1
  142. package/login/pages/SelectAuthenticator.js +3 -4
  143. package/login/pages/SelectAuthenticator.js.map +1 -1
  144. package/login/pages/Terms.d.ts +2 -1
  145. package/login/pages/Terms.js +3 -4
  146. package/login/pages/Terms.js.map +1 -1
  147. package/login/pages/UpdateEmail.d.ts +2 -1
  148. package/login/pages/UpdateEmail.js +2 -4
  149. package/login/pages/UpdateEmail.js.map +1 -1
  150. package/login/pages/WebauthnAuthenticate.d.ts +2 -1
  151. package/login/pages/WebauthnAuthenticate.js +3 -4
  152. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  153. package/login/pages/WebauthnError.d.ts +2 -1
  154. package/login/pages/WebauthnError.js +3 -4
  155. package/login/pages/WebauthnError.js.map +1 -1
  156. package/login/pages/WebauthnRegister.d.ts +2 -1
  157. package/login/pages/WebauthnRegister.js +2 -4
  158. package/login/pages/WebauthnRegister.js.map +1 -1
  159. package/package.json +9 -9
  160. package/src/account/{Fallback.tsx → DefaultPage.tsx} +3 -2
  161. package/src/account/Template.tsx +4 -4
  162. package/src/account/TemplateProps.ts +4 -3
  163. package/src/account/i18n/i18n.tsx +3 -3
  164. package/src/account/i18n/index.ts +4 -9
  165. package/src/account/pages/Account.tsx +5 -5
  166. package/src/account/pages/Applications.tsx +5 -5
  167. package/src/account/pages/FederatedIdentity.tsx +5 -5
  168. package/src/account/pages/Log.tsx +5 -5
  169. package/src/account/pages/PageProps.ts +4 -4
  170. package/src/account/pages/Password.tsx +5 -4
  171. package/src/account/pages/Sessions.tsx +5 -5
  172. package/src/account/pages/Totp.tsx +5 -5
  173. package/src/bin/shared/generateKcGenTs.ts +46 -36
  174. package/src/login/{Fallback.tsx → DefaultPage.tsx} +4 -3
  175. package/src/login/Template.tsx +4 -3
  176. package/src/login/TemplateProps.ts +3 -4
  177. package/src/login/UserProfileFormFields.tsx +5 -5
  178. package/src/login/i18n/i18n.tsx +2 -2
  179. package/src/login/i18n/index.ts +4 -9
  180. package/src/login/lib/useUserProfileForm.tsx +8 -6
  181. package/src/login/pages/Code.tsx +5 -4
  182. package/src/login/pages/DeleteAccountConfirm.tsx +5 -5
  183. package/src/login/pages/DeleteCredential.tsx +5 -4
  184. package/src/login/pages/Error.tsx +12 -5
  185. package/src/login/pages/FrontchannelLogout.tsx +5 -4
  186. package/src/login/pages/IdpReviewUserProfile.tsx +6 -4
  187. package/src/login/pages/Info.tsx +5 -4
  188. package/src/login/pages/Login.tsx +4 -4
  189. package/src/login/pages/LoginConfigTotp.tsx +4 -6
  190. package/src/login/pages/LoginIdpLinkConfirm.tsx +5 -5
  191. package/src/login/pages/LoginIdpLinkEmail.tsx +11 -5
  192. package/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx +11 -5
  193. package/src/login/pages/LoginOauthGrant.tsx +5 -4
  194. package/src/login/pages/LoginOtp.tsx +5 -4
  195. package/src/login/pages/LoginPageExpired.tsx +5 -5
  196. package/src/login/pages/LoginPassword.tsx +4 -4
  197. package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +10 -5
  198. package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +5 -4
  199. package/src/login/pages/LoginResetOtp.tsx +5 -4
  200. package/src/login/pages/LoginResetPassword.tsx +5 -4
  201. package/src/login/pages/LoginUpdatePassword.tsx +4 -4
  202. package/src/login/pages/LoginUpdateProfile.tsx +6 -4
  203. package/src/login/pages/LoginUsername.tsx +5 -4
  204. package/src/login/pages/LoginVerifyEmail.tsx +5 -4
  205. package/src/login/pages/LoginX509Info.tsx +5 -5
  206. package/src/login/pages/LogoutConfirm.tsx +5 -5
  207. package/src/login/pages/PageProps.ts +4 -4
  208. package/src/login/pages/Register.tsx +12 -5
  209. package/src/login/pages/SamlPostForm.tsx +5 -5
  210. package/src/login/pages/SelectAuthenticator.tsx +5 -4
  211. package/src/login/pages/Terms.tsx +12 -5
  212. package/src/login/pages/UpdateEmail.tsx +5 -4
  213. package/src/login/pages/WebauthnAuthenticate.tsx +5 -4
  214. package/src/login/pages/WebauthnError.tsx +12 -5
  215. package/src/login/pages/WebauthnRegister.tsx +4 -4
  216. package/vite-plugin/index.js +48 -24
  217. package/account/Fallback.d.ts +0 -4
  218. package/account/Fallback.js.map +0 -1
  219. package/login/Fallback.js.map +0 -1
@@ -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 DeleteAccountConfirm(props: PageProps<Extract<KcContext, { pageId: "delete-account-confirm.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function DeleteAccountConfirm(props: PageProps<Extract<KcContext, { pageId: "delete-account-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 DeleteAccountConfirm(props: PageProps<Extract<KcContext,
13
13
 
14
14
  const { url, triggered_from_aia } = 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("deleteAccountConfirm")}>
19
+ <Template kcContext={kcContext} i18n={i18n} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("deleteAccountConfirm")}>
20
20
  <form action={url.loginAction} className="form-vertical" method="post">
21
21
  <div className="alert alert-warning" style={{ marginTop: "0", marginBottom: "30px" }}>
22
22
  <span className="pficon pficon-warning-triangle-o"></span>
@@ -1,12 +1,12 @@
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 DeleteCredential(props: PageProps<Extract<KcContext, { pageId: "delete-credential.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function DeleteCredential(props: PageProps<Extract<KcContext, { pageId: "delete-credential.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 { kcClsx } = getKcClsx({
12
12
  doUseDefaultCss,
@@ -18,6 +18,7 @@ export default function DeleteCredential(props: PageProps<Extract<KcContext, { p
18
18
  return (
19
19
  <Template
20
20
  kcContext={kcContext}
21
+ i18n={i18n}
21
22
  doUseDefaultCss={doUseDefaultCss}
22
23
  classes={classes}
23
24
  displayMessage={false}
@@ -1,16 +1,23 @@
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 Error(props: PageProps<Extract<KcContext, { pageId: "error.ftl" }>>) {
6
- const { kcContext, doUseDefaultCss, Template, classes } = props;
5
+ export default function Error(props: PageProps<Extract<KcContext, { pageId: "error.ftl" }>, I18n>) {
6
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
7
7
 
8
8
  const { message, client, skipLink } = kcContext;
9
9
 
10
- const { msg } = useI18n({ kcContext });
10
+ const { msg } = i18n;
11
11
 
12
12
  return (
13
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} displayMessage={false} headerNode={msg("errorTitle")}>
13
+ <Template
14
+ kcContext={kcContext}
15
+ i18n={i18n}
16
+ doUseDefaultCss={doUseDefaultCss}
17
+ classes={classes}
18
+ displayMessage={false}
19
+ headerNode={msg("errorTitle")}
20
+ >
14
21
  <div id="kc-error-message">
15
22
  <p className="instruction">{message.summary}</p>
16
23
  {!skipLink && client !== undefined && client.baseUrl !== undefined && (
@@ -1,14 +1,14 @@
1
1
  import { useEffect } 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 FrontchannelLogout(props: PageProps<Extract<KcContext, { pageId: "frontchannel-logout.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function FrontchannelLogout(props: PageProps<Extract<KcContext, { pageId: "frontchannel-logout.ftl" }>, I18n>) {
7
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
8
8
 
9
9
  const { logout } = kcContext;
10
10
 
11
- const { msg, msgStr } = useI18n({ kcContext });
11
+ const { msg, msgStr } = i18n;
12
12
 
13
13
  useEffect(() => {
14
14
  if (logout.logoutRedirectUri) {
@@ -19,6 +19,7 @@ export default function FrontchannelLogout(props: PageProps<Extract<KcContext, {
19
19
  return (
20
20
  <Template
21
21
  kcContext={kcContext}
22
+ i18n={i18n}
22
23
  doUseDefaultCss={doUseDefaultCss}
23
24
  classes={classes}
24
25
  documentTitle={msgStr("frontchannel-logout.title")}
@@ -4,22 +4,22 @@ import { getKcClsx } from "keycloakify/login/lib/kcClsx";
4
4
  import type { PageProps } from "keycloakify/login/pages/PageProps";
5
5
  import type { UserProfileFormFieldsProps } from "keycloakify/login/UserProfileFormFields";
6
6
  import type { KcContext } from "../KcContext";
7
- import { useI18n } from "../i18n";
7
+ import type { I18n } from "../i18n";
8
8
 
9
- type IdpReviewUserProfileProps = PageProps<Extract<KcContext, { pageId: "idp-review-user-profile.ftl" }>> & {
9
+ type IdpReviewUserProfileProps = PageProps<Extract<KcContext, { pageId: "idp-review-user-profile.ftl" }>, I18n> & {
10
10
  UserProfileFormFields: LazyOrNot<(props: UserProfileFormFieldsProps) => JSX.Element>;
11
11
  doMakeUserConfirmPassword: boolean;
12
12
  };
13
13
 
14
14
  export default function IdpReviewUserProfile(props: IdpReviewUserProfileProps) {
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 { msg, msgStr } = useI18n({ kcContext });
22
+ const { msg, msgStr } = i18n;
23
23
 
24
24
  const { url, messagesPerField } = kcContext;
25
25
 
@@ -28,6 +28,7 @@ export default function IdpReviewUserProfile(props: IdpReviewUserProfileProps) {
28
28
  return (
29
29
  <Template
30
30
  kcContext={kcContext}
31
+ i18n={i18n}
31
32
  doUseDefaultCss={doUseDefaultCss}
32
33
  classes={classes}
33
34
  displayMessage={messagesPerField.exists("global")}
@@ -37,6 +38,7 @@ export default function IdpReviewUserProfile(props: IdpReviewUserProfileProps) {
37
38
  <form id="kc-idp-review-profile-form" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
38
39
  <UserProfileFormFields
39
40
  kcContext={kcContext}
41
+ i18n={i18n}
40
42
  onIsFormSubmittableValueChange={setIsFomSubmittable}
41
43
  kcClsx={kcClsx}
42
44
  doMakeUserConfirmPassword={doMakeUserConfirmPassword}
@@ -1,12 +1,12 @@
1
1
  import { assert } from "keycloakify/tools/assert";
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 Info(props: PageProps<Extract<KcContext, { pageId: "info.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function Info(props: PageProps<Extract<KcContext, { pageId: "info.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
  assert(
12
12
  kcContext.message !== undefined,
@@ -18,6 +18,7 @@ export default function Info(props: PageProps<Extract<KcContext, { pageId: "info
18
18
  return (
19
19
  <Template
20
20
  kcContext={kcContext}
21
+ i18n={i18n}
21
22
  doUseDefaultCss={doUseDefaultCss}
22
23
  classes={classes}
23
24
  displayMessage={false}
@@ -4,10 +4,10 @@ import { clsx } from "keycloakify/tools/clsx";
4
4
  import type { PageProps } from "keycloakify/login/pages/PageProps";
5
5
  import { getKcClsx, type KcClsx } from "keycloakify/login/lib/kcClsx";
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 Login(props: PageProps<Extract<KcContext, { pageId: "login.ftl" }>>) {
10
- const { kcContext, doUseDefaultCss, Template, classes } = props;
9
+ export default function Login(props: PageProps<Extract<KcContext, { pageId: "login.ftl" }>, I18n>) {
10
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
11
11
 
12
12
  const { kcClsx } = getKcClsx({
13
13
  doUseDefaultCss,
@@ -16,7 +16,6 @@ export default function Login(props: PageProps<Extract<KcContext, { pageId: "log
16
16
 
17
17
  const { social, realm, url, usernameHidden, login, auth, registrationDisabled, messagesPerField } = kcContext;
18
18
 
19
- const i18n = useI18n({ kcContext });
20
19
  const { msg, msgStr } = i18n;
21
20
 
22
21
  const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
@@ -24,6 +23,7 @@ export default function Login(props: PageProps<Extract<KcContext, { pageId: "log
24
23
  return (
25
24
  <Template
26
25
  kcContext={kcContext}
26
+ i18n={i18n}
27
27
  doUseDefaultCss={doUseDefaultCss}
28
28
  classes={classes}
29
29
  displayMessage={!messagesPerField.existsError("username", "password")}
@@ -1,10 +1,10 @@
1
1
  import { getKcClsx, KcClsx } 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, type I18n } from "../i18n";
4
+ import type { I18n } from "../i18n";
5
5
 
6
- export default function LoginConfigTotp(props: PageProps<Extract<KcContext, { pageId: "login-config-totp.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function LoginConfigTotp(props: PageProps<Extract<KcContext, { pageId: "login-config-totp.ftl" }>, I18n>) {
7
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
8
8
 
9
9
  const { kcClsx } = getKcClsx({
10
10
  doUseDefaultCss,
@@ -13,12 +13,10 @@ export default function LoginConfigTotp(props: PageProps<Extract<KcContext, { pa
13
13
 
14
14
  const { url, isAppInitiatedAction, totp, mode, messagesPerField } = kcContext;
15
15
 
16
- const i18n = useI18n({ kcContext });
17
-
18
16
  const { msg, msgStr, advancedMsg } = i18n;
19
17
 
20
18
  return (
21
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("loginTotpTitle")}>
19
+ <Template kcContext={kcContext} i18n={i18n} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("loginTotpTitle")}>
22
20
  <>
23
21
  <ol id="kc-totp-settings">
24
22
  <li>
@@ -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 LoginIdpLinkConfirm(props: PageProps<Extract<KcContext, { pageId: "login-idp-link-confirm.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function LoginIdpLinkConfirm(props: PageProps<Extract<KcContext, { pageId: "login-idp-link-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 LoginIdpLinkConfirm(props: PageProps<Extract<KcContext,
13
13
 
14
14
  const { url, idpAlias } = kcContext;
15
15
 
16
- const { msg } = useI18n({ kcContext });
16
+ const { msg } = i18n;
17
17
 
18
18
  return (
19
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("confirmLinkIdpTitle")}>
19
+ <Template kcContext={kcContext} i18n={i18n} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("confirmLinkIdpTitle")}>
20
20
  <form id="kc-register-form" action={url.loginAction} method="post">
21
21
  <div className={kcClsx("kcFormGroupClass")}>
22
22
  <button
@@ -1,16 +1,22 @@
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 LoginIdpLinkEmail(props: PageProps<Extract<KcContext, { pageId: "login-idp-link-email.ftl" }>>) {
6
- const { kcContext, doUseDefaultCss, Template, classes } = props;
5
+ export default function LoginIdpLinkEmail(props: PageProps<Extract<KcContext, { pageId: "login-idp-link-email.ftl" }>, I18n>) {
6
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
7
7
 
8
8
  const { url, realm, brokerContext, idpAlias } = kcContext;
9
9
 
10
- const { msg } = useI18n({ kcContext });
10
+ const { msg } = i18n;
11
11
 
12
12
  return (
13
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("emailLinkIdpTitle", idpAlias)}>
13
+ <Template
14
+ kcContext={kcContext}
15
+ i18n={i18n}
16
+ doUseDefaultCss={doUseDefaultCss}
17
+ classes={classes}
18
+ headerNode={msg("emailLinkIdpTitle", idpAlias)}
19
+ >
14
20
  <p id="instruction1" className="instruction">
15
21
  {msg("emailLinkIdp1", idpAlias, brokerContext.username, realm.displayName)}
16
22
  </p>
@@ -1,15 +1,15 @@
1
1
  import { getKcClsx } from "keycloakify/login/lib/kcClsx";
2
2
  import { PageProps } from "keycloakify/login/pages/PageProps";
3
3
  import { KcContext } from "../KcContext";
4
- import { useI18n } from "../i18n";
4
+ import type { I18n } from "../i18n";
5
5
 
6
6
  export default function LoginOauth2DeviceVerifyUserCode(
7
- props: PageProps<Extract<KcContext, { pageId: "login-oauth2-device-verify-user-code.ftl" }>>
7
+ props: PageProps<Extract<KcContext, { pageId: "login-oauth2-device-verify-user-code.ftl" }>, I18n>
8
8
  ) {
9
- const { kcContext, doUseDefaultCss, classes, Template } = props;
9
+ const { kcContext, i18n, doUseDefaultCss, classes, Template } = props;
10
10
  const { url } = kcContext;
11
11
 
12
- const { msg, msgStr } = useI18n({ kcContext });
12
+ const { msg, msgStr } = i18n;
13
13
 
14
14
  const { kcClsx } = getKcClsx({
15
15
  doUseDefaultCss,
@@ -17,7 +17,13 @@ export default function LoginOauth2DeviceVerifyUserCode(
17
17
  });
18
18
 
19
19
  return (
20
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("oauth2DeviceVerificationTitle")}>
20
+ <Template
21
+ kcContext={kcContext}
22
+ i18n={i18n}
23
+ doUseDefaultCss={doUseDefaultCss}
24
+ classes={classes}
25
+ headerNode={msg("oauth2DeviceVerificationTitle")}
26
+ >
21
27
  <form
22
28
  id="kc-user-verify-device-user-code-form"
23
29
  className={kcClsx("kcFormClass")}
@@ -1,13 +1,13 @@
1
1
  import { getKcClsx } from "keycloakify/login/lib/kcClsx";
2
2
  import { PageProps } from "keycloakify/login/pages/PageProps";
3
3
  import { KcContext } from "../KcContext";
4
- import { useI18n } from "../i18n";
4
+ import type { I18n } from "../i18n";
5
5
 
6
- export default function LoginOauthGrant(props: PageProps<Extract<KcContext, { pageId: "login-oauth-grant.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, classes, Template } = props;
6
+ export default function LoginOauthGrant(props: PageProps<Extract<KcContext, { pageId: "login-oauth-grant.ftl" }>, I18n>) {
7
+ const { kcContext, i18n, doUseDefaultCss, classes, Template } = props;
8
8
  const { url, oauth, client } = kcContext;
9
9
 
10
- const { msg, msgStr, advancedMsg, advancedMsgStr } = useI18n({ kcContext });
10
+ const { msg, msgStr, advancedMsg, advancedMsgStr } = i18n;
11
11
 
12
12
  const { kcClsx } = getKcClsx({
13
13
  doUseDefaultCss,
@@ -17,6 +17,7 @@ export default function LoginOauthGrant(props: PageProps<Extract<KcContext, { pa
17
17
  return (
18
18
  <Template
19
19
  kcContext={kcContext}
20
+ i18n={i18n}
20
21
  doUseDefaultCss={doUseDefaultCss}
21
22
  classes={classes}
22
23
  bodyClassName="oauth"
@@ -2,10 +2,10 @@ import { Fragment } from "react";
2
2
  import { getKcClsx } from "keycloakify/login/lib/kcClsx";
3
3
  import type { PageProps } from "keycloakify/login/pages/PageProps";
4
4
  import type { KcContext } from "../KcContext";
5
- import { useI18n } from "../i18n";
5
+ import type { I18n } from "../i18n";
6
6
 
7
- export default function LoginOtp(props: PageProps<Extract<KcContext, { pageId: "login-otp.ftl" }>>) {
8
- const { kcContext, doUseDefaultCss, Template, classes } = props;
7
+ export default function LoginOtp(props: PageProps<Extract<KcContext, { pageId: "login-otp.ftl" }>, I18n>) {
8
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
9
9
 
10
10
  const { kcClsx } = getKcClsx({
11
11
  doUseDefaultCss,
@@ -14,11 +14,12 @@ export default function LoginOtp(props: PageProps<Extract<KcContext, { pageId: "
14
14
 
15
15
  const { otpLogin, url, messagesPerField } = kcContext;
16
16
 
17
- const { msg, msgStr } = useI18n({ kcContext });
17
+ const { msg, msgStr } = i18n;
18
18
 
19
19
  return (
20
20
  <Template
21
21
  kcContext={kcContext}
22
+ i18n={i18n}
22
23
  doUseDefaultCss={doUseDefaultCss}
23
24
  classes={classes}
24
25
  displayMessage={!messagesPerField.existsError("totp")}
@@ -1,16 +1,16 @@
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 LoginPageExpired(props: PageProps<Extract<KcContext, { pageId: "login-page-expired.ftl" }>>) {
6
- const { kcContext, doUseDefaultCss, Template, classes } = props;
5
+ export default function LoginPageExpired(props: PageProps<Extract<KcContext, { pageId: "login-page-expired.ftl" }>, I18n>) {
6
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
7
7
 
8
8
  const { url } = kcContext;
9
9
 
10
- const { msg } = useI18n({ kcContext });
10
+ const { msg } = i18n;
11
11
 
12
12
  return (
13
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("pageExpiredTitle")}>
13
+ <Template kcContext={kcContext} i18n={i18n} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("pageExpiredTitle")}>
14
14
  <p id="instruction1" className="instruction">
15
15
  {msg("pageExpiredMsg1")}
16
16
  <a id="loginRestartLink" href={url.loginRestartFlowUrl}>
@@ -4,10 +4,10 @@ import { assert } from "tsafe/assert";
4
4
  import { getKcClsx, type KcClsx } from "keycloakify/login/lib/kcClsx";
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 LoginPassword(props: PageProps<Extract<KcContext, { pageId: "login-password.ftl" }>>) {
10
- const { kcContext, doUseDefaultCss, Template, classes } = props;
9
+ export default function LoginPassword(props: PageProps<Extract<KcContext, { pageId: "login-password.ftl" }>, I18n>) {
10
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
11
11
 
12
12
  const { kcClsx } = getKcClsx({
13
13
  doUseDefaultCss,
@@ -16,7 +16,6 @@ export default function LoginPassword(props: PageProps<Extract<KcContext, { page
16
16
 
17
17
  const { realm, url, messagesPerField } = kcContext;
18
18
 
19
- const i18n = useI18n({ kcContext });
20
19
  const { msg, msgStr } = i18n;
21
20
 
22
21
  const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
@@ -24,6 +23,7 @@ export default function LoginPassword(props: PageProps<Extract<KcContext, { page
24
23
  return (
25
24
  <Template
26
25
  kcContext={kcContext}
26
+ i18n={i18n}
27
27
  doUseDefaultCss={doUseDefaultCss}
28
28
  classes={classes}
29
29
  headerNode={msg("doLogIn")}
@@ -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 LoginRecoveryAuthnCodeConfig(props: PageProps<Extract<KcContext, { pageId: "login-recovery-authn-code-config.ftl" }>>) {
10
- const { kcContext, doUseDefaultCss, Template, classes } = props;
9
+ export default function LoginRecoveryAuthnCodeConfig(props: PageProps<Extract<KcContext, { pageId: "login-recovery-authn-code-config.ftl" }>, I18n>) {
10
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
11
11
 
12
12
  const { kcClsx } = getKcClsx({
13
13
  doUseDefaultCss,
@@ -16,7 +16,6 @@ export default function LoginRecoveryAuthnCodeConfig(props: PageProps<Extract<Kc
16
16
 
17
17
  const { recoveryAuthnCodesConfigBean, isAppInitiatedAction } = kcContext;
18
18
 
19
- const i18n = useI18n({ kcContext });
20
19
  const { msg, msgStr } = i18n;
21
20
 
22
21
  const { insertScriptTags } = useInsertScriptTags({
@@ -145,7 +144,13 @@ export default function LoginRecoveryAuthnCodeConfig(props: PageProps<Extract<Kc
145
144
  }, []);
146
145
 
147
146
  return (
148
- <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("recovery-code-config-header")}>
147
+ <Template
148
+ kcContext={kcContext}
149
+ i18n={i18n}
150
+ doUseDefaultCss={doUseDefaultCss}
151
+ classes={classes}
152
+ headerNode={msg("recovery-code-config-header")}
153
+ >
149
154
  <div className={clsx("pf-c-alert", "pf-m-warning", "pf-m-inline", kcClsx("kcRecoveryCodesWarning"))} aria-label="Warning alert">
150
155
  <div className="pf-c-alert__icon">
151
156
  <i className="pficon-warning-triangle-o" aria-hidden="true" />
@@ -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 LoginRecoveryAuthnCodeInput(props: PageProps<Extract<KcContext, { pageId: "login-recovery-authn-code-input.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function LoginRecoveryAuthnCodeInput(props: PageProps<Extract<KcContext, { pageId: "login-recovery-authn-code-input.ftl" }>, I18n>) {
7
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
8
8
 
9
9
  const { kcClsx } = getKcClsx({
10
10
  doUseDefaultCss,
@@ -13,11 +13,12 @@ export default function LoginRecoveryAuthnCodeInput(props: PageProps<Extract<KcC
13
13
 
14
14
  const { url, messagesPerField, recoveryAuthnCodesInputBean } = kcContext;
15
15
 
16
- const { msg, msgStr } = useI18n({ kcContext });
16
+ const { msg, msgStr } = i18n;
17
17
 
18
18
  return (
19
19
  <Template
20
20
  kcContext={kcContext}
21
+ i18n={i18n}
21
22
  doUseDefaultCss={doUseDefaultCss}
22
23
  classes={classes}
23
24
  headerNode={msg("auth-recovery-code-header")}
@@ -2,10 +2,10 @@ import { Fragment } from "react";
2
2
  import { getKcClsx } from "keycloakify/login/lib/kcClsx";
3
3
  import type { PageProps } from "keycloakify/login/pages/PageProps";
4
4
  import type { KcContext } from "../KcContext";
5
- import { useI18n } from "../i18n";
5
+ import type { I18n } from "../i18n";
6
6
 
7
- export default function LoginResetOtp(props: PageProps<Extract<KcContext, { pageId: "login-reset-otp.ftl" }>>) {
8
- const { kcContext, doUseDefaultCss, Template, classes } = props;
7
+ export default function LoginResetOtp(props: PageProps<Extract<KcContext, { pageId: "login-reset-otp.ftl" }>, I18n>) {
8
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
9
9
 
10
10
  const { kcClsx } = getKcClsx({
11
11
  doUseDefaultCss,
@@ -14,11 +14,12 @@ export default function LoginResetOtp(props: PageProps<Extract<KcContext, { page
14
14
 
15
15
  const { url, messagesPerField, configuredOtpCredentials } = kcContext;
16
16
 
17
- const { msg, msgStr } = useI18n({ kcContext });
17
+ const { msg, msgStr } = i18n;
18
18
 
19
19
  return (
20
20
  <Template
21
21
  kcContext={kcContext}
22
+ i18n={i18n}
22
23
  doUseDefaultCss={doUseDefaultCss}
23
24
  classes={classes}
24
25
  displayMessage={!messagesPerField.existsError("totp")}
@@ -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 LoginResetPassword(props: PageProps<Extract<KcContext, { pageId: "login-reset-password.ftl" }>>) {
7
- const { kcContext, doUseDefaultCss, Template, classes } = props;
6
+ export default function LoginResetPassword(props: PageProps<Extract<KcContext, { pageId: "login-reset-password.ftl" }>, I18n>) {
7
+ const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
8
8
 
9
9
  const { kcClsx } = getKcClsx({
10
10
  doUseDefaultCss,
@@ -13,11 +13,12 @@ export default function LoginResetPassword(props: PageProps<Extract<KcContext, {
13
13
 
14
14
  const { url, realm, auth, messagesPerField } = kcContext;
15
15
 
16
- const { msg, msgStr } = useI18n({ kcContext });
16
+ const { msg, msgStr } = i18n;
17
17
 
18
18
  return (
19
19
  <Template
20
20
  kcContext={kcContext}
21
+ i18n={i18n}
21
22
  doUseDefaultCss={doUseDefaultCss}
22
23
  classes={classes}
23
24
  displayInfo
@@ -3,17 +3,16 @@ import { assert } from "tsafe/assert";
3
3
  import { getKcClsx, type KcClsx } 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, type I18n } from "../i18n";
6
+ import type { I18n } from "../i18n";
7
7
 
8
- export default function LoginUpdatePassword(props: PageProps<Extract<KcContext, { pageId: "login-update-password.ftl" }>>) {
9
- const { kcContext, doUseDefaultCss, Template, classes } = props;
8
+ export default function LoginUpdatePassword(props: PageProps<Extract<KcContext, { pageId: "login-update-password.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 i18n = useI18n({ kcContext });
17
16
  const { msg, msgStr } = i18n;
18
17
 
19
18
  const { url, messagesPerField, isAppInitiatedAction } = kcContext;
@@ -21,6 +20,7 @@ export default function LoginUpdatePassword(props: PageProps<Extract<KcContext,
21
20
  return (
22
21
  <Template
23
22
  kcContext={kcContext}
23
+ i18n={i18n}
24
24
  doUseDefaultCss={doUseDefaultCss}
25
25
  classes={classes}
26
26
  displayMessage={!messagesPerField.existsError("password", "password-confirm")}
@@ -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}