keycloakify 10.0.0-rc.37 → 10.0.0-rc.38

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 (268) hide show
  1. package/account/Fallback.d.ts +1 -2
  2. package/account/Fallback.js.map +1 -1
  3. package/account/KcContext/KcContext.d.ts +6 -6
  4. package/account/KcContext/getKcContextMock.d.ts +9 -9
  5. package/account/KcContext/getKcContextMock.js +3 -3
  6. package/account/KcContext/getKcContextMock.js.map +1 -1
  7. package/account/Template.d.ts +1 -2
  8. package/account/Template.js +7 -6
  9. package/account/Template.js.map +1 -1
  10. package/account/TemplateProps.d.ts +1 -3
  11. package/account/i18n/i18n.d.ts +9 -4
  12. package/account/i18n/i18n.js +132 -87
  13. package/account/i18n/i18n.js.map +1 -1
  14. package/account/i18n/index.d.ts +9 -2
  15. package/account/i18n/index.js +5 -1
  16. package/account/i18n/index.js.map +1 -1
  17. package/account/lib/kcClsx.d.ts +9 -0
  18. package/account/lib/{useGetClassName.js → kcClsx.js} +3 -3
  19. package/account/lib/kcClsx.js.map +1 -0
  20. package/account/pages/Account.d.ts +1 -2
  21. package/account/pages/Account.js +9 -7
  22. package/account/pages/Account.js.map +1 -1
  23. package/account/pages/Applications.d.ts +1 -2
  24. package/account/pages/Applications.js +7 -7
  25. package/account/pages/Applications.js.map +1 -1
  26. package/account/pages/FederatedIdentity.d.ts +1 -2
  27. package/account/pages/FederatedIdentity.js +4 -3
  28. package/account/pages/FederatedIdentity.js.map +1 -1
  29. package/account/pages/Log.d.ts +1 -2
  30. package/account/pages/Log.js +6 -5
  31. package/account/pages/Log.js.map +1 -1
  32. package/account/pages/PageProps.d.ts +2 -4
  33. package/account/pages/Password.d.ts +1 -2
  34. package/account/pages/Password.js +10 -9
  35. package/account/pages/Password.js.map +1 -1
  36. package/account/pages/Sessions.d.ts +1 -2
  37. package/account/pages/Sessions.js +6 -6
  38. package/account/pages/Sessions.js.map +1 -1
  39. package/account/pages/Totp.d.ts +1 -2
  40. package/account/pages/Totp.js +6 -5
  41. package/account/pages/Totp.js.map +1 -1
  42. package/bin/{314.index.js → 21.index.js} +162 -4
  43. package/bin/{430.index.js → 214.index.js} +161 -2
  44. package/bin/3.index.js +81 -65
  45. package/bin/526.index.js +3 -2
  46. package/bin/538.index.js +552 -0
  47. package/bin/795.index.js +3 -2
  48. package/bin/{890.index.js → 941.index.js} +2 -159
  49. package/bin/main.js +19 -7
  50. package/lib/getKcClsx.d.ts +11 -0
  51. package/lib/getKcClsx.js +44 -0
  52. package/lib/getKcClsx.js.map +1 -0
  53. package/login/Fallback.d.ts +1 -2
  54. package/login/Fallback.js.map +1 -1
  55. package/login/KcContext/KcContext.d.ts +6 -6
  56. package/login/KcContext/getKcContextMock.d.ts +9 -9
  57. package/login/KcContext/getKcContextMock.js +3 -3
  58. package/login/KcContext/getKcContextMock.js.map +1 -1
  59. package/login/Template.d.ts +1 -2
  60. package/login/Template.js +10 -9
  61. package/login/Template.js.map +1 -1
  62. package/login/TemplateProps.d.ts +1 -3
  63. package/login/UserProfileFormFields.d.ts +5 -5
  64. package/login/UserProfileFormFields.js +35 -34
  65. package/login/UserProfileFormFields.js.map +1 -1
  66. package/login/i18n/i18n.d.ts +9 -4
  67. package/login/i18n/i18n.js +136 -91
  68. package/login/i18n/i18n.js.map +1 -1
  69. package/login/i18n/index.d.ts +9 -2
  70. package/login/i18n/index.js +5 -1
  71. package/login/i18n/index.js.map +1 -1
  72. package/login/lib/kcClsx.d.ts +9 -0
  73. package/login/lib/{useGetClassName.js → kcClsx.js} +3 -3
  74. package/login/lib/kcClsx.js.map +1 -0
  75. package/login/lib/useUserProfileForm.d.ts +9 -6
  76. package/login/lib/useUserProfileForm.js +7 -5
  77. package/login/lib/useUserProfileForm.js.map +1 -1
  78. package/login/pages/Code.d.ts +1 -2
  79. package/login/pages/Code.js +6 -5
  80. package/login/pages/Code.js.map +1 -1
  81. package/login/pages/DeleteAccountConfirm.d.ts +1 -2
  82. package/login/pages/DeleteAccountConfirm.js +7 -7
  83. package/login/pages/DeleteAccountConfirm.js.map +1 -1
  84. package/login/pages/DeleteCredential.d.ts +1 -2
  85. package/login/pages/DeleteCredential.js +6 -6
  86. package/login/pages/DeleteCredential.js.map +1 -1
  87. package/login/pages/Error.d.ts +1 -2
  88. package/login/pages/Error.js +4 -3
  89. package/login/pages/Error.js.map +1 -1
  90. package/login/pages/FrontchannelLogout.d.ts +1 -2
  91. package/login/pages/FrontchannelLogout.js +4 -3
  92. package/login/pages/FrontchannelLogout.js.map +1 -1
  93. package/login/pages/IdpReviewUserProfile.d.ts +1 -2
  94. package/login/pages/IdpReviewUserProfile.js +6 -6
  95. package/login/pages/IdpReviewUserProfile.js.map +1 -1
  96. package/login/pages/Info.d.ts +1 -2
  97. package/login/pages/Info.js +4 -3
  98. package/login/pages/Info.js.map +1 -1
  99. package/login/pages/Login.d.ts +1 -2
  100. package/login/pages/Login.js +10 -8
  101. package/login/pages/Login.js.map +1 -1
  102. package/login/pages/LoginConfigTotp.d.ts +1 -2
  103. package/login/pages/LoginConfigTotp.js +8 -7
  104. package/login/pages/LoginConfigTotp.js.map +1 -1
  105. package/login/pages/LoginIdpLinkConfirm.d.ts +1 -2
  106. package/login/pages/LoginIdpLinkConfirm.js +6 -6
  107. package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
  108. package/login/pages/LoginIdpLinkEmail.d.ts +1 -2
  109. package/login/pages/LoginIdpLinkEmail.js +4 -3
  110. package/login/pages/LoginIdpLinkEmail.js.map +1 -1
  111. package/login/pages/LoginOauth2DeviceVerifyUserCode.d.ts +1 -2
  112. package/login/pages/LoginOauth2DeviceVerifyUserCode.js +6 -6
  113. package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
  114. package/login/pages/LoginOauthGrant.d.ts +1 -2
  115. package/login/pages/LoginOauthGrant.js +7 -7
  116. package/login/pages/LoginOauthGrant.js.map +1 -1
  117. package/login/pages/LoginOtp.d.ts +1 -2
  118. package/login/pages/LoginOtp.js +6 -6
  119. package/login/pages/LoginOtp.js.map +1 -1
  120. package/login/pages/LoginPageExpired.d.ts +1 -2
  121. package/login/pages/LoginPageExpired.js +4 -3
  122. package/login/pages/LoginPageExpired.js.map +1 -1
  123. package/login/pages/LoginPassword.d.ts +1 -2
  124. package/login/pages/LoginPassword.js +9 -7
  125. package/login/pages/LoginPassword.js.map +1 -1
  126. package/login/pages/LoginRecoveryAuthnCodeConfig.d.ts +1 -2
  127. package/login/pages/LoginRecoveryAuthnCodeConfig.js +9 -7
  128. package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
  129. package/login/pages/LoginRecoveryAuthnCodeInput.d.ts +1 -2
  130. package/login/pages/LoginRecoveryAuthnCodeInput.js +6 -6
  131. package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
  132. package/login/pages/LoginResetOtp.d.ts +1 -2
  133. package/login/pages/LoginResetOtp.js +6 -6
  134. package/login/pages/LoginResetOtp.js.map +1 -1
  135. package/login/pages/LoginResetPassword.d.ts +1 -2
  136. package/login/pages/LoginResetPassword.js +7 -7
  137. package/login/pages/LoginResetPassword.js.map +1 -1
  138. package/login/pages/LoginUpdatePassword.d.ts +1 -2
  139. package/login/pages/LoginUpdatePassword.js +10 -9
  140. package/login/pages/LoginUpdatePassword.js.map +1 -1
  141. package/login/pages/LoginUpdateProfile.d.ts +1 -2
  142. package/login/pages/LoginUpdateProfile.js +7 -12
  143. package/login/pages/LoginUpdateProfile.js.map +1 -1
  144. package/login/pages/LoginUsername.d.ts +1 -2
  145. package/login/pages/LoginUsername.js +8 -7
  146. package/login/pages/LoginUsername.js.map +1 -1
  147. package/login/pages/LoginVerifyEmail.d.ts +1 -2
  148. package/login/pages/LoginVerifyEmail.js +4 -3
  149. package/login/pages/LoginVerifyEmail.js.map +1 -1
  150. package/login/pages/LoginX509Info.d.ts +1 -2
  151. package/login/pages/LoginX509Info.js +6 -6
  152. package/login/pages/LoginX509Info.js.map +1 -1
  153. package/login/pages/LogoutConfirm.d.ts +1 -2
  154. package/login/pages/LogoutConfirm.js +6 -6
  155. package/login/pages/LogoutConfirm.js.map +1 -1
  156. package/login/pages/PageProps.d.ts +2 -4
  157. package/login/pages/Register.d.ts +1 -2
  158. package/login/pages/Register.js +8 -16
  159. package/login/pages/Register.js.map +1 -1
  160. package/login/pages/SamlPostForm.d.ts +1 -2
  161. package/login/pages/SamlPostForm.js +4 -3
  162. package/login/pages/SamlPostForm.js.map +1 -1
  163. package/login/pages/SelectAuthenticator.d.ts +1 -2
  164. package/login/pages/SelectAuthenticator.js +6 -9
  165. package/login/pages/SelectAuthenticator.js.map +1 -1
  166. package/login/pages/Terms.d.ts +1 -2
  167. package/login/pages/Terms.js +6 -6
  168. package/login/pages/Terms.js.map +1 -1
  169. package/login/pages/UpdateEmail.d.ts +1 -2
  170. package/login/pages/UpdateEmail.js +8 -12
  171. package/login/pages/UpdateEmail.js.map +1 -1
  172. package/login/pages/WebauthnAuthenticate.d.ts +1 -2
  173. package/login/pages/WebauthnAuthenticate.js +13 -12
  174. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  175. package/login/pages/WebauthnError.d.ts +1 -2
  176. package/login/pages/WebauthnError.js +7 -7
  177. package/login/pages/WebauthnError.js.map +1 -1
  178. package/login/pages/WebauthnRegister.d.ts +1 -2
  179. package/login/pages/WebauthnRegister.js +9 -8
  180. package/login/pages/WebauthnRegister.js.map +1 -1
  181. package/package.json +24 -16
  182. package/src/account/Fallback.tsx +1 -2
  183. package/src/account/KcContext/KcContext.ts +7 -7
  184. package/src/account/KcContext/getKcContextMock.ts +13 -24
  185. package/src/account/Template.tsx +8 -8
  186. package/src/account/TemplateProps.ts +1 -6
  187. package/src/account/i18n/i18n.tsx +204 -125
  188. package/src/account/i18n/index.ts +10 -2
  189. package/src/account/lib/{useGetClassName.ts → kcClsx.ts} +6 -2
  190. package/src/account/pages/Account.tsx +15 -21
  191. package/src/account/pages/Applications.tsx +8 -9
  192. package/src/account/pages/FederatedIdentity.tsx +5 -5
  193. package/src/account/pages/Log.tsx +8 -8
  194. package/src/account/pages/PageProps.ts +2 -4
  195. package/src/account/pages/Password.tsx +13 -16
  196. package/src/account/pages/Sessions.tsx +9 -10
  197. package/src/account/pages/Totp.tsx +19 -28
  198. package/src/bin/keycloakify/generateSrcMainResources/generateMessageProperties.ts +2 -66
  199. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts +7 -1
  200. package/src/bin/main.ts +15 -0
  201. package/src/bin/shared/buildOptions.ts +5 -2
  202. package/src/bin/shared/generateKcGenTs.ts +61 -0
  203. package/src/bin/tools/escapeStringForPropertiesFile.ts +64 -0
  204. package/src/bin/update-kc-gen.ts +13 -0
  205. package/src/lib/getKcClsx.ts +75 -0
  206. package/src/login/Fallback.tsx +1 -2
  207. package/src/login/KcContext/KcContext.ts +7 -7
  208. package/src/login/KcContext/getKcContextMock.ts +13 -24
  209. package/src/login/Template.tsx +36 -37
  210. package/src/login/TemplateProps.ts +1 -6
  211. package/src/login/UserProfileFormFields.tsx +66 -81
  212. package/src/login/i18n/i18n.tsx +208 -129
  213. package/src/login/i18n/index.ts +10 -2
  214. package/src/login/lib/{useGetClassName.ts → kcClsx.ts} +6 -2
  215. package/src/login/lib/useUserProfileForm.tsx +29 -21
  216. package/src/login/pages/Code.tsx +10 -8
  217. package/src/login/pages/DeleteAccountConfirm.tsx +9 -10
  218. package/src/login/pages/DeleteCredential.tsx +11 -10
  219. package/src/login/pages/Error.tsx +5 -5
  220. package/src/login/pages/FrontchannelLogout.tsx +7 -5
  221. package/src/login/pages/IdpReviewUserProfile.tsx +16 -25
  222. package/src/login/pages/Info.tsx +7 -5
  223. package/src/login/pages/Login.tsx +34 -53
  224. package/src/login/pages/LoginConfigTotp.tsx +30 -38
  225. package/src/login/pages/LoginIdpLinkConfirm.tsx +10 -21
  226. package/src/login/pages/LoginIdpLinkEmail.tsx +5 -5
  227. package/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx +19 -24
  228. package/src/login/pages/LoginOauthGrant.tsx +14 -21
  229. package/src/login/pages/LoginOtp.tsx +29 -33
  230. package/src/login/pages/LoginPageExpired.tsx +5 -5
  231. package/src/login/pages/LoginPassword.tsx +23 -33
  232. package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +21 -25
  233. package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +21 -25
  234. package/src/login/pages/LoginResetOtp.tsx +21 -25
  235. package/src/login/pages/LoginResetPassword.tsx +21 -25
  236. package/src/login/pages/LoginUpdatePassword.tsx +42 -52
  237. package/src/login/pages/LoginUpdateProfile.tsx +26 -33
  238. package/src/login/pages/LoginUsername.tsx +23 -35
  239. package/src/login/pages/LoginVerifyEmail.tsx +7 -5
  240. package/src/login/pages/LoginX509Info.tsx +27 -36
  241. package/src/login/pages/LogoutConfirm.tsx +11 -17
  242. package/src/login/pages/PageProps.ts +2 -4
  243. package/src/login/pages/Register.tsx +24 -49
  244. package/src/login/pages/SamlPostForm.tsx +5 -5
  245. package/src/login/pages/SelectAuthenticator.tsx +24 -26
  246. package/src/login/pages/Terms.tsx +9 -16
  247. package/src/login/pages/UpdateEmail.tsx +26 -36
  248. package/src/login/pages/WebauthnAuthenticate.tsx +26 -32
  249. package/src/login/pages/WebauthnError.tsx +11 -22
  250. package/src/login/pages/WebauthnRegister.tsx +20 -28
  251. package/src/tools/clsx.ts +6 -48
  252. package/src/tools/clsx_withTransform.ts +55 -0
  253. package/src/vite-plugin/vite-plugin.ts +14 -6
  254. package/tools/clsx.d.ts +3 -2
  255. package/tools/clsx.js +5 -41
  256. package/tools/clsx.js.map +1 -1
  257. package/tools/clsx_withTransform.d.ts +5 -0
  258. package/tools/clsx_withTransform.js +43 -0
  259. package/tools/clsx_withTransform.js.map +1 -0
  260. package/vite-plugin/index.js +167 -37
  261. package/account/lib/useGetClassName.d.ts +0 -7
  262. package/account/lib/useGetClassName.js.map +0 -1
  263. package/lib/useGetClassName.d.ts +0 -10
  264. package/lib/useGetClassName.js +0 -14
  265. package/lib/useGetClassName.js.map +0 -1
  266. package/login/lib/useGetClassName.d.ts +0 -7
  267. package/login/lib/useGetClassName.js.map +0 -1
  268. package/src/lib/useGetClassName.ts +0 -27
@@ -1,16 +1,16 @@
1
1
  import type { PageProps } from "keycloakify/login/pages/PageProps";
2
2
  import type { KcContext } from "../KcContext";
3
- import type { I18n } from "../i18n";
3
+ import { useI18n } from "../i18n";
4
4
 
5
- export default function LoginIdpLinkEmail(props: PageProps<Extract<KcContext, { pageId: "login-idp-link-email.ftl" }>, I18n>) {
6
- const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
5
+ export default function LoginIdpLinkEmail(props: PageProps<Extract<KcContext, { pageId: "login-idp-link-email.ftl" }>>) {
6
+ const { kcContext, doUseDefaultCss, Template, classes } = props;
7
7
 
8
8
  const { url, realm, brokerContext, idpAlias } = kcContext;
9
9
 
10
- const { msg } = i18n;
10
+ const { msg } = useI18n({ kcContext });
11
11
 
12
12
  return (
13
- <Template {...{ kcContext, i18n, doUseDefaultCss, classes }} headerNode={msg("emailLinkIdpTitle", idpAlias)}>
13
+ <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("emailLinkIdpTitle", idpAlias)}>
14
14
  <p id="instruction1" className="instruction">
15
15
  {msg("emailLinkIdp1", idpAlias, brokerContext.username, realm.displayName)}
16
16
  </p>
@@ -1,62 +1,57 @@
1
- import { clsx } from "keycloakify/tools/clsx";
2
- import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
1
+ import { getKcClsx } from "keycloakify/login/lib/kcClsx";
3
2
  import { PageProps } from "keycloakify/login/pages/PageProps";
4
- import { I18n } from "../i18n";
5
3
  import { KcContext } from "../KcContext";
4
+ import { useI18n } from "../i18n";
6
5
 
7
6
  export default function LoginOauth2DeviceVerifyUserCode(
8
- props: PageProps<Extract<KcContext, { pageId: "login-oauth2-device-verify-user-code.ftl" }>, I18n>
7
+ props: PageProps<Extract<KcContext, { pageId: "login-oauth2-device-verify-user-code.ftl" }>>
9
8
  ) {
10
- const { kcContext, i18n, doUseDefaultCss, classes, Template } = props;
9
+ const { kcContext, doUseDefaultCss, classes, Template } = props;
11
10
  const { url } = kcContext;
12
11
 
13
- const { msg, msgStr } = i18n;
12
+ const { msg, msgStr } = useI18n({ kcContext });
14
13
 
15
- const { getClassName } = useGetClassName({
14
+ const { kcClsx } = getKcClsx({
16
15
  doUseDefaultCss,
17
16
  classes
18
17
  });
19
18
 
20
19
  return (
21
- <Template {...{ kcContext, i18n, doUseDefaultCss, classes }} headerNode={msg("oauth2DeviceVerificationTitle")}>
20
+ <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("oauth2DeviceVerificationTitle")}>
22
21
  <form
23
22
  id="kc-user-verify-device-user-code-form"
24
- className={getClassName("kcFormClass")}
23
+ className={kcClsx("kcFormClass")}
25
24
  action={url.oauth2DeviceVerificationAction}
26
25
  method="post"
27
26
  >
28
- <div className={getClassName("kcFormGroupClass")}>
29
- <div className={getClassName("kcLabelWrapperClass")}>
30
- <label htmlFor="device-user-code" className={getClassName("kcLabelClass")}>
27
+ <div className={kcClsx("kcFormGroupClass")}>
28
+ <div className={kcClsx("kcLabelWrapperClass")}>
29
+ <label htmlFor="device-user-code" className={kcClsx("kcLabelClass")}>
31
30
  {msg("verifyOAuth2DeviceUserCode")}
32
31
  </label>
33
32
  </div>
34
33
 
35
- <div className={getClassName("kcInputWrapperClass")}>
34
+ <div className={kcClsx("kcInputWrapperClass")}>
36
35
  <input
37
36
  id="device-user-code"
38
37
  name="device_user_code"
39
38
  autoComplete="off"
40
39
  type="text"
41
- className={getClassName("kcInputClass")}
40
+ className={kcClsx("kcInputClass")}
42
41
  autoFocus
43
42
  />
44
43
  </div>
45
44
  </div>
46
45
 
47
- <div className={getClassName("kcFormGroupClass")}>
48
- <div id="kc-form-options" className={getClassName("kcFormOptionsClass")}>
49
- <div className={getClassName("kcFormOptionsWrapperClass")}></div>
46
+ <div className={kcClsx("kcFormGroupClass")}>
47
+ <div id="kc-form-options" className={kcClsx("kcFormOptionsClass")}>
48
+ <div className={kcClsx("kcFormOptionsWrapperClass")}></div>
50
49
  </div>
51
50
 
52
- <div id="kc-form-buttons" className={getClassName("kcFormButtonsClass")}>
53
- <div className={getClassName("kcFormButtonsWrapperClass")}>
51
+ <div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
52
+ <div className={kcClsx("kcFormButtonsWrapperClass")}>
54
53
  <input
55
- className={clsx(
56
- getClassName("kcButtonClass"),
57
- getClassName("kcButtonPrimaryClass"),
58
- getClassName("kcButtonLargeClass")
59
- )}
54
+ className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonLargeClass")}
60
55
  type="submit"
61
56
  value={msgStr("doSubmit")}
62
57
  />
@@ -1,23 +1,24 @@
1
- import { clsx } from "keycloakify/tools/clsx";
2
- import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
1
+ import { getKcClsx } from "keycloakify/login/lib/kcClsx";
3
2
  import { PageProps } from "keycloakify/login/pages/PageProps";
4
3
  import { KcContext } from "../KcContext";
5
- import { I18n } from "../i18n";
4
+ import { useI18n } from "../i18n";
6
5
 
7
- export default function LoginOauthGrant(props: PageProps<Extract<KcContext, { pageId: "login-oauth-grant.ftl" }>, I18n>) {
8
- const { kcContext, i18n, doUseDefaultCss, classes, Template } = props;
6
+ export default function LoginOauthGrant(props: PageProps<Extract<KcContext, { pageId: "login-oauth-grant.ftl" }>>) {
7
+ const { kcContext, doUseDefaultCss, classes, Template } = props;
9
8
  const { url, oauth, client } = kcContext;
10
9
 
11
- const { msg, msgStr, advancedMsg, advancedMsgStr } = i18n;
10
+ const { msg, msgStr, advancedMsg, advancedMsgStr } = useI18n({ kcContext });
12
11
 
13
- const { getClassName } = useGetClassName({
12
+ const { kcClsx } = getKcClsx({
14
13
  doUseDefaultCss,
15
14
  classes
16
15
  });
17
16
 
18
17
  return (
19
18
  <Template
20
- {...{ kcContext, i18n, doUseDefaultCss, classes }}
19
+ kcContext={kcContext}
20
+ doUseDefaultCss={doUseDefaultCss}
21
+ classes={classes}
21
22
  bodyClassName="oauth"
22
23
  headerNode={
23
24
  <>
@@ -68,30 +69,22 @@ export default function LoginOauthGrant(props: PageProps<Extract<KcContext, { pa
68
69
 
69
70
  <form className="form-actions" action={url.oauthAction} method="POST">
70
71
  <input type="hidden" name="code" value={oauth.code} />
71
- <div className={getClassName("kcFormGroupClass")}>
72
+ <div className={kcClsx("kcFormGroupClass")}>
72
73
  <div id="kc-form-options">
73
- <div className={getClassName("kcFormOptionsWrapperClass")}></div>
74
+ <div className={kcClsx("kcFormOptionsWrapperClass")}></div>
74
75
  </div>
75
76
 
76
77
  <div id="kc-form-buttons">
77
- <div className={getClassName("kcFormButtonsWrapperClass")}>
78
+ <div className={kcClsx("kcFormButtonsWrapperClass")}>
78
79
  <input
79
- className={clsx(
80
- getClassName("kcButtonClass"),
81
- getClassName("kcButtonPrimaryClass"),
82
- getClassName("kcButtonLargeClass")
83
- )}
80
+ className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonLargeClass")}
84
81
  name="accept"
85
82
  id="kc-login"
86
83
  type="submit"
87
84
  value={msgStr("doYes")}
88
85
  />
89
86
  <input
90
- className={clsx(
91
- getClassName("kcButtonClass"),
92
- getClassName("kcButtonDefaultClass"),
93
- getClassName("kcButtonLargeClass")
94
- )}
87
+ className={kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonLargeClass")}
95
88
  name="cancel"
96
89
  id="kc-cancel"
97
90
  type="submit"
@@ -1,48 +1,49 @@
1
1
  import { Fragment } from "react";
2
- import { clsx } from "keycloakify/tools/clsx";
3
- import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
2
+ import { getKcClsx } from "keycloakify/login/lib/kcClsx";
4
3
  import type { PageProps } from "keycloakify/login/pages/PageProps";
5
4
  import type { KcContext } from "../KcContext";
6
- import type { I18n } from "../i18n";
5
+ import { useI18n } from "../i18n";
7
6
 
8
- export default function LoginOtp(props: PageProps<Extract<KcContext, { pageId: "login-otp.ftl" }>, I18n>) {
9
- const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
7
+ export default function LoginOtp(props: PageProps<Extract<KcContext, { pageId: "login-otp.ftl" }>>) {
8
+ const { kcContext, doUseDefaultCss, Template, classes } = props;
10
9
 
11
- const { getClassName } = useGetClassName({
10
+ const { kcClsx } = getKcClsx({
12
11
  doUseDefaultCss,
13
12
  classes
14
13
  });
15
14
 
16
15
  const { otpLogin, url, messagesPerField } = kcContext;
17
16
 
18
- const { msg, msgStr } = i18n;
17
+ const { msg, msgStr } = useI18n({ kcContext });
19
18
 
20
19
  return (
21
20
  <Template
22
- {...{ kcContext, i18n, doUseDefaultCss, classes }}
21
+ kcContext={kcContext}
22
+ doUseDefaultCss={doUseDefaultCss}
23
+ classes={classes}
23
24
  displayMessage={!messagesPerField.existsError("totp")}
24
25
  headerNode={msg("doLogIn")}
25
26
  >
26
- <form id="kc-otp-login-form" className={clsx(getClassName("kcFormClass"))} action={url.loginAction} method="post">
27
+ <form id="kc-otp-login-form" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
27
28
  {otpLogin.userOtpCredentials.length > 1 && (
28
- <div className={getClassName("kcFormGroupClass")}>
29
- <div className={getClassName("kcInputWrapperClass")}>
29
+ <div className={kcClsx("kcFormGroupClass")}>
30
+ <div className={kcClsx("kcInputWrapperClass")}>
30
31
  {otpLogin.userOtpCredentials.map((otpCredential, index) => (
31
32
  <Fragment key={index}>
32
33
  <input
33
34
  id={`kc-otp-credential-${index}`}
34
- className={getClassName("kcLoginOTPListInputClass")}
35
+ className={kcClsx("kcLoginOTPListInputClass")}
35
36
  type="radio"
36
37
  name="selectedCredentialId"
37
38
  value={otpCredential.id}
38
39
  defaultChecked={otpCredential.id === otpLogin.selectedCredentialId}
39
40
  />
40
- <label htmlFor={`kc-otp-credential-${index}`} className={getClassName("kcLoginOTPListClass")} tabIndex={index}>
41
- <span className={getClassName("kcLoginOTPListItemHeaderClass")}>
42
- <span className={getClassName("kcLoginOTPListItemIconBodyClass")}>
43
- <i className={getClassName("kcLoginOTPListItemIconClass")} aria-hidden="true"></i>
41
+ <label htmlFor={`kc-otp-credential-${index}`} className={kcClsx("kcLoginOTPListClass")} tabIndex={index}>
42
+ <span className={kcClsx("kcLoginOTPListItemHeaderClass")}>
43
+ <span className={kcClsx("kcLoginOTPListItemIconBodyClass")}>
44
+ <i className={kcClsx("kcLoginOTPListItemIconClass")} aria-hidden="true"></i>
44
45
  </span>
45
- <span className={getClassName("kcLoginOTPListItemTitleClass")}>{otpCredential.userLabel}</span>
46
+ <span className={kcClsx("kcLoginOTPListItemTitleClass")}>{otpCredential.userLabel}</span>
46
47
  </span>
47
48
  </label>
48
49
  </Fragment>
@@ -51,42 +52,37 @@ export default function LoginOtp(props: PageProps<Extract<KcContext, { pageId: "
51
52
  </div>
52
53
  )}
53
54
 
54
- <div className={getClassName("kcFormGroupClass")}>
55
- <div className={getClassName("kcLabelWrapperClass")}>
56
- <label htmlFor="otp" className={getClassName("kcLabelClass")}>
55
+ <div className={kcClsx("kcFormGroupClass")}>
56
+ <div className={kcClsx("kcLabelWrapperClass")}>
57
+ <label htmlFor="otp" className={kcClsx("kcLabelClass")}>
57
58
  {msg("loginOtpOneTime")}
58
59
  </label>
59
60
  </div>
60
- <div className={getClassName("kcInputWrapperClass")}>
61
+ <div className={kcClsx("kcInputWrapperClass")}>
61
62
  <input
62
63
  id="otp"
63
64
  name="otp"
64
65
  autoComplete="off"
65
66
  type="text"
66
- className={getClassName("kcInputClass")}
67
+ className={kcClsx("kcInputClass")}
67
68
  autoFocus
68
69
  aria-invalid={messagesPerField.existsError("totp")}
69
70
  />
70
71
  {messagesPerField.existsError("totp") && (
71
- <span id="input-error-otp-code" className={getClassName("kcInputErrorMessageClass")} aria-live="polite">
72
+ <span id="input-error-otp-code" className={kcClsx("kcInputErrorMessageClass")} aria-live="polite">
72
73
  {messagesPerField.get("totp")}
73
74
  </span>
74
75
  )}
75
76
  </div>
76
77
  </div>
77
78
 
78
- <div className={getClassName("kcFormGroupClass")}>
79
- <div id="kc-form-options" className={getClassName("kcFormOptionsClass")}>
80
- <div className={getClassName("kcFormOptionsWrapperClass")}></div>
79
+ <div className={kcClsx("kcFormGroupClass")}>
80
+ <div id="kc-form-options" className={kcClsx("kcFormOptionsClass")}>
81
+ <div className={kcClsx("kcFormOptionsWrapperClass")}></div>
81
82
  </div>
82
- <div id="kc-form-buttons" className={getClassName("kcFormButtonsClass")}>
83
+ <div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
83
84
  <input
84
- className={clsx(
85
- getClassName("kcButtonClass"),
86
- getClassName("kcButtonPrimaryClass"),
87
- getClassName("kcButtonBlockClass"),
88
- getClassName("kcButtonLargeClass")
89
- )}
85
+ className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass")}
90
86
  name="login"
91
87
  id="kc-login"
92
88
  type="submit"
@@ -1,16 +1,16 @@
1
1
  import type { PageProps } from "keycloakify/login/pages/PageProps";
2
2
  import type { KcContext } from "../KcContext";
3
- import type { I18n } from "../i18n";
3
+ import { useI18n } from "../i18n";
4
4
 
5
- export default function LoginPageExpired(props: PageProps<Extract<KcContext, { pageId: "login-page-expired.ftl" }>, I18n>) {
6
- const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
5
+ export default function LoginPageExpired(props: PageProps<Extract<KcContext, { pageId: "login-page-expired.ftl" }>>) {
6
+ const { kcContext, doUseDefaultCss, Template, classes } = props;
7
7
 
8
8
  const { url } = kcContext;
9
9
 
10
- const { msg } = i18n;
10
+ const { msg } = useI18n({ kcContext });
11
11
 
12
12
  return (
13
- <Template {...{ kcContext, i18n, doUseDefaultCss, classes }} headerNode={msg("pageExpiredTitle")}>
13
+ <Template kcContext={kcContext} 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}>
@@ -1,28 +1,31 @@
1
1
  import { useState, useEffect, useReducer } from "react";
2
2
  import { clsx } from "keycloakify/tools/clsx";
3
3
  import { assert } from "tsafe/assert";
4
- import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
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 type { I18n } from "../i18n";
7
+ import { useI18n, type I18n } from "../i18n";
8
8
 
9
- export default function LoginPassword(props: PageProps<Extract<KcContext, { pageId: "login-password.ftl" }>, I18n>) {
10
- const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
9
+ export default function LoginPassword(props: PageProps<Extract<KcContext, { pageId: "login-password.ftl" }>>) {
10
+ const { kcContext, doUseDefaultCss, Template, classes } = props;
11
11
 
12
- const { getClassName } = useGetClassName({
12
+ const { kcClsx } = getKcClsx({
13
13
  doUseDefaultCss,
14
14
  classes
15
15
  });
16
16
 
17
17
  const { realm, url, messagesPerField } = kcContext;
18
18
 
19
+ const i18n = useI18n({ kcContext });
19
20
  const { msg, msgStr } = i18n;
20
21
 
21
22
  const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
22
23
 
23
24
  return (
24
25
  <Template
25
- {...{ kcContext, i18n, doUseDefaultCss, classes }}
26
+ kcContext={kcContext}
27
+ doUseDefaultCss={doUseDefaultCss}
28
+ classes={classes}
26
29
  headerNode={msg("doLogIn")}
27
30
  displayMessage={!messagesPerField.existsError("password")}
28
31
  >
@@ -37,17 +40,17 @@ export default function LoginPassword(props: PageProps<Extract<KcContext, { page
37
40
  action={url.loginAction}
38
41
  method="post"
39
42
  >
40
- <div className={clsx(getClassName("kcFormGroupClass"), "no-bottom-margin")}>
43
+ <div className={clsx(kcClsx("kcFormGroupClass"), "no-bottom-margin")}>
41
44
  <hr />
42
- <label htmlFor="password" className={getClassName("kcLabelClass")}>
45
+ <label htmlFor="password" className={kcClsx("kcLabelClass")}>
43
46
  {msg("password")}
44
47
  </label>
45
48
 
46
- <PasswordWrapper getClassName={getClassName} i18n={i18n} passwordInputId="password">
49
+ <PasswordWrapper kcClsx={kcClsx} i18n={i18n} passwordInputId="password">
47
50
  <input
48
51
  tabIndex={2}
49
52
  id="password"
50
- className={getClassName("kcInputClass")}
53
+ className={kcClsx("kcInputClass")}
51
54
  name="password"
52
55
  type="password"
53
56
  autoFocus
@@ -57,14 +60,14 @@ export default function LoginPassword(props: PageProps<Extract<KcContext, { page
57
60
  </PasswordWrapper>
58
61
 
59
62
  {messagesPerField.existsError("password") && (
60
- <span id="input-error-password" className={getClassName("kcInputErrorMessageClass")} aria-live="polite">
63
+ <span id="input-error-password" className={kcClsx("kcInputErrorMessageClass")} aria-live="polite">
61
64
  {messagesPerField.get("password")}
62
65
  </span>
63
66
  )}
64
67
  </div>
65
- <div className={clsx(getClassName("kcFormGroupClass"), getClassName("kcFormSettingClass"))}>
68
+ <div className={kcClsx("kcFormGroupClass", "kcFormSettingClass")}>
66
69
  <div id="kc-form-options" />
67
- <div className={getClassName("kcFormOptionsWrapperClass")}>
70
+ <div className={kcClsx("kcFormOptionsWrapperClass")}>
68
71
  {realm.resetPasswordAllowed && (
69
72
  <span>
70
73
  <a tabIndex={5} href={url.loginResetCredentialsUrl}>
@@ -74,15 +77,10 @@ export default function LoginPassword(props: PageProps<Extract<KcContext, { page
74
77
  )}
75
78
  </div>
76
79
  </div>
77
- <div id="kc-form-buttons" className={getClassName("kcFormGroupClass")}>
80
+ <div id="kc-form-buttons" className={kcClsx("kcFormGroupClass")}>
78
81
  <input
79
82
  tabIndex={4}
80
- className={clsx(
81
- getClassName("kcButtonClass"),
82
- getClassName("kcButtonPrimaryClass"),
83
- getClassName("kcButtonBlockClass"),
84
- getClassName("kcButtonLargeClass")
85
- )}
83
+ className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass")}
86
84
  name="login"
87
85
  id="kc-login"
88
86
  type="submit"
@@ -97,13 +95,8 @@ export default function LoginPassword(props: PageProps<Extract<KcContext, { page
97
95
  );
98
96
  }
99
97
 
100
- function PasswordWrapper(props: {
101
- getClassName: ReturnType<typeof useGetClassName>["getClassName"];
102
- i18n: I18n;
103
- passwordInputId: string;
104
- children: JSX.Element;
105
- }) {
106
- const { getClassName, i18n, passwordInputId, children } = props;
98
+ function PasswordWrapper(props: { kcClsx: KcClsx; i18n: I18n; passwordInputId: string; children: JSX.Element }) {
99
+ const { kcClsx, i18n, passwordInputId, children } = props;
107
100
 
108
101
  const { msgStr } = i18n;
109
102
 
@@ -118,19 +111,16 @@ function PasswordWrapper(props: {
118
111
  }, [isPasswordRevealed]);
119
112
 
120
113
  return (
121
- <div className={getClassName("kcInputGroup")}>
114
+ <div className={kcClsx("kcInputGroup")}>
122
115
  {children}
123
116
  <button
124
117
  type="button"
125
- className={getClassName("kcFormPasswordVisibilityButtonClass")}
118
+ className={kcClsx("kcFormPasswordVisibilityButtonClass")}
126
119
  aria-label={msgStr(isPasswordRevealed ? "hidePassword" : "showPassword")}
127
120
  aria-controls={passwordInputId}
128
121
  onClick={toggleIsPasswordRevealed}
129
122
  >
130
- <i
131
- className={getClassName(isPasswordRevealed ? "kcFormPasswordVisibilityIconHide" : "kcFormPasswordVisibilityIconShow")}
132
- aria-hidden
133
- />
123
+ <i className={kcClsx(isPasswordRevealed ? "kcFormPasswordVisibilityIconHide" : "kcFormPasswordVisibilityIconShow")} aria-hidden />
134
124
  </button>
135
125
  </div>
136
126
  );
@@ -1,21 +1,22 @@
1
1
  import { useEffect } from "react";
2
2
  import { clsx } from "keycloakify/tools/clsx";
3
- import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
3
+ 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 type { I18n } from "../i18n";
7
+ import { useI18n, type I18n } from "../i18n";
8
8
 
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;
9
+ export default function LoginRecoveryAuthnCodeConfig(props: PageProps<Extract<KcContext, { pageId: "login-recovery-authn-code-config.ftl" }>>) {
10
+ const { kcContext, doUseDefaultCss, Template, classes } = props;
11
11
 
12
- const { getClassName } = useGetClassName({
12
+ const { kcClsx } = getKcClsx({
13
13
  doUseDefaultCss,
14
14
  classes
15
15
  });
16
16
 
17
17
  const { recoveryAuthnCodesConfigBean, isAppInitiatedAction } = kcContext;
18
18
 
19
+ const i18n = useI18n({ kcContext });
19
20
  const { msg, msgStr } = i18n;
20
21
 
21
22
  const { insertScriptTags } = useInsertScriptTags({
@@ -144,8 +145,8 @@ export default function LoginRecoveryAuthnCodeConfig(props: PageProps<Extract<Kc
144
145
  }, []);
145
146
 
146
147
  return (
147
- <Template {...{ kcContext, i18n, doUseDefaultCss, classes }} headerNode={msg("recovery-code-config-header")}>
148
- <div className={clsx("pf-c-alert", "pf-m-warning", "pf-m-inline", getClassName("kcRecoveryCodesWarning"))} aria-label="Warning alert">
148
+ <Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("recovery-code-config-header")}>
149
+ <div className={clsx("pf-c-alert", "pf-m-warning", "pf-m-inline", kcClsx("kcRecoveryCodesWarning"))} aria-label="Warning alert">
149
150
  <div className="pf-c-alert__icon">
150
151
  <i className="pficon-warning-triangle-o" aria-hidden="true" />
151
152
  </div>
@@ -158,7 +159,7 @@ export default function LoginRecoveryAuthnCodeConfig(props: PageProps<Extract<Kc
158
159
  </div>
159
160
  </div>
160
161
 
161
- <ol id="kc-recovery-codes-list" className={getClassName("kcRecoveryCodesList")}>
162
+ <ol id="kc-recovery-codes-list" className={kcClsx("kcRecoveryCodesList")}>
162
163
  {recoveryAuthnCodesConfigBean.generatedRecoveryAuthnCodesList.map((code, index) => (
163
164
  <li key={index}>
164
165
  <span>{index + 1}:</span> {code.slice(0, 4)}-{code.slice(4, 8)}-{code.slice(8)}
@@ -167,7 +168,7 @@ export default function LoginRecoveryAuthnCodeConfig(props: PageProps<Extract<Kc
167
168
  </ol>
168
169
 
169
170
  {/* actions */}
170
- <div className={getClassName("kcRecoveryCodesActions")}>
171
+ <div className={kcClsx("kcRecoveryCodesActions")}>
171
172
  <button id="printRecoveryCodes" className={clsx("pf-c-button", "pf-m-link")} type="button">
172
173
  <i className="pficon-print" aria-hidden="true" /> {msg("recovery-codes-print")}
173
174
  </button>
@@ -180,9 +181,9 @@ export default function LoginRecoveryAuthnCodeConfig(props: PageProps<Extract<Kc
180
181
  </div>
181
182
 
182
183
  {/* confirmation checkbox */}
183
- <div className={getClassName("kcFormOptionsClass")}>
184
+ <div className={kcClsx("kcFormOptionsClass")}>
184
185
  <input
185
- className={getClassName("kcCheckInputClass")}
186
+ className={kcClsx("kcCheckInputClass")}
186
187
  type="checkbox"
187
188
  id="kcRecoveryCodesConfirmationCheck"
188
189
  name="kcRecoveryCodesConfirmationCheck"
@@ -194,25 +195,25 @@ export default function LoginRecoveryAuthnCodeConfig(props: PageProps<Extract<Kc
194
195
  <label htmlFor="kcRecoveryCodesConfirmationCheck">{msg("recovery-codes-confirmation-message")}</label>
195
196
  </div>
196
197
 
197
- <form action={kcContext.url.loginAction} className={getClassName("kcFormGroupClass")} id="kc-recovery-codes-settings-form" method="post">
198
+ <form action={kcContext.url.loginAction} className={kcClsx("kcFormGroupClass")} id="kc-recovery-codes-settings-form" method="post">
198
199
  <input type="hidden" name="generatedRecoveryAuthnCodes" value={recoveryAuthnCodesConfigBean.generatedRecoveryAuthnCodesAsString} />
199
200
  <input type="hidden" name="generatedAt" value={recoveryAuthnCodesConfigBean.generatedAt} />
200
201
  <input type="hidden" id="userLabel" name="userLabel" value={msgStr("recovery-codes-label-default")} />
201
202
 
202
- <LogoutOtherSessions {...{ getClassName, i18n }} />
203
+ <LogoutOtherSessions kcClsx={kcClsx} i18n={i18n} />
203
204
 
204
205
  {isAppInitiatedAction ? (
205
206
  <>
206
207
  <input
207
208
  type="submit"
208
- className={clsx(getClassName("kcButtonClass"), getClassName("kcButtonPrimaryClass"), getClassName("kcButtonLargeClass"))}
209
+ className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonLargeClass")}
209
210
  id="saveRecoveryAuthnCodesBtn"
210
211
  value={msgStr("recovery-codes-action-complete")}
211
212
  disabled
212
213
  />
213
214
  <button
214
215
  type="submit"
215
- className={clsx(getClassName("kcButtonClass"), getClassName("kcButtonDefaultClass"), getClassName("kcButtonLargeClass"))}
216
+ className={kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonLargeClass")}
216
217
  id="cancelRecoveryAuthnCodesBtn"
217
218
  name="cancel-aia"
218
219
  value="true"
@@ -223,12 +224,7 @@ export default function LoginRecoveryAuthnCodeConfig(props: PageProps<Extract<Kc
223
224
  ) : (
224
225
  <input
225
226
  type="submit"
226
- className={clsx(
227
- getClassName("kcButtonClass"),
228
- getClassName("kcButtonPrimaryClass"),
229
- getClassName("kcButtonBlockClass"),
230
- getClassName("kcButtonLargeClass")
231
- )}
227
+ className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass")}
232
228
  id="saveRecoveryAuthnCodesBtn"
233
229
  value={msgStr("recovery-codes-action-complete")}
234
230
  disabled
@@ -239,14 +235,14 @@ export default function LoginRecoveryAuthnCodeConfig(props: PageProps<Extract<Kc
239
235
  );
240
236
  }
241
237
 
242
- function LogoutOtherSessions(props: { getClassName: ReturnType<typeof useGetClassName>["getClassName"]; i18n: I18n }) {
243
- const { getClassName, i18n } = props;
238
+ function LogoutOtherSessions(props: { kcClsx: KcClsx; i18n: I18n }) {
239
+ const { kcClsx, i18n } = props;
244
240
 
245
241
  const { msg } = i18n;
246
242
 
247
243
  return (
248
- <div id="kc-form-options" className={getClassName("kcFormOptionsClass")}>
249
- <div className={getClassName("kcFormOptionsWrapperClass")}>
244
+ <div id="kc-form-options" className={kcClsx("kcFormOptionsClass")}>
245
+ <div className={kcClsx("kcFormOptionsWrapperClass")}>
250
246
  <div className="checkbox">
251
247
  <label>
252
248
  <input type="checkbox" id="logout-sessions" name="logout-sessions" value="on" defaultChecked={true} />