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.
- package/account/Fallback.d.ts +1 -2
- package/account/Fallback.js.map +1 -1
- package/account/KcContext/KcContext.d.ts +6 -6
- package/account/KcContext/getKcContextMock.d.ts +9 -9
- package/account/KcContext/getKcContextMock.js +3 -3
- package/account/KcContext/getKcContextMock.js.map +1 -1
- package/account/Template.d.ts +1 -2
- package/account/Template.js +7 -6
- package/account/Template.js.map +1 -1
- package/account/TemplateProps.d.ts +1 -3
- package/account/i18n/i18n.d.ts +9 -4
- package/account/i18n/i18n.js +132 -87
- package/account/i18n/i18n.js.map +1 -1
- package/account/i18n/index.d.ts +9 -2
- package/account/i18n/index.js +5 -1
- package/account/i18n/index.js.map +1 -1
- package/account/lib/kcClsx.d.ts +9 -0
- package/account/lib/{useGetClassName.js → kcClsx.js} +3 -3
- package/account/lib/kcClsx.js.map +1 -0
- package/account/pages/Account.d.ts +1 -2
- package/account/pages/Account.js +9 -7
- package/account/pages/Account.js.map +1 -1
- package/account/pages/Applications.d.ts +1 -2
- package/account/pages/Applications.js +7 -7
- package/account/pages/Applications.js.map +1 -1
- package/account/pages/FederatedIdentity.d.ts +1 -2
- package/account/pages/FederatedIdentity.js +4 -3
- package/account/pages/FederatedIdentity.js.map +1 -1
- package/account/pages/Log.d.ts +1 -2
- package/account/pages/Log.js +6 -5
- package/account/pages/Log.js.map +1 -1
- package/account/pages/PageProps.d.ts +2 -4
- package/account/pages/Password.d.ts +1 -2
- package/account/pages/Password.js +10 -9
- package/account/pages/Password.js.map +1 -1
- package/account/pages/Sessions.d.ts +1 -2
- package/account/pages/Sessions.js +6 -6
- package/account/pages/Sessions.js.map +1 -1
- package/account/pages/Totp.d.ts +1 -2
- package/account/pages/Totp.js +6 -5
- package/account/pages/Totp.js.map +1 -1
- package/bin/{314.index.js → 21.index.js} +162 -4
- package/bin/{430.index.js → 214.index.js} +161 -2
- package/bin/3.index.js +81 -65
- package/bin/526.index.js +3 -2
- package/bin/538.index.js +552 -0
- package/bin/795.index.js +3 -2
- package/bin/{890.index.js → 941.index.js} +2 -159
- package/bin/main.js +19 -7
- package/lib/getKcClsx.d.ts +11 -0
- package/lib/getKcClsx.js +44 -0
- package/lib/getKcClsx.js.map +1 -0
- package/login/Fallback.d.ts +1 -2
- package/login/Fallback.js.map +1 -1
- package/login/KcContext/KcContext.d.ts +6 -6
- package/login/KcContext/getKcContextMock.d.ts +9 -9
- package/login/KcContext/getKcContextMock.js +3 -3
- package/login/KcContext/getKcContextMock.js.map +1 -1
- package/login/Template.d.ts +1 -2
- package/login/Template.js +10 -9
- package/login/Template.js.map +1 -1
- package/login/TemplateProps.d.ts +1 -3
- package/login/UserProfileFormFields.d.ts +5 -5
- package/login/UserProfileFormFields.js +35 -34
- package/login/UserProfileFormFields.js.map +1 -1
- package/login/i18n/i18n.d.ts +9 -4
- package/login/i18n/i18n.js +136 -91
- package/login/i18n/i18n.js.map +1 -1
- package/login/i18n/index.d.ts +9 -2
- package/login/i18n/index.js +5 -1
- package/login/i18n/index.js.map +1 -1
- package/login/lib/kcClsx.d.ts +9 -0
- package/login/lib/{useGetClassName.js → kcClsx.js} +3 -3
- package/login/lib/kcClsx.js.map +1 -0
- package/login/lib/useUserProfileForm.d.ts +9 -6
- package/login/lib/useUserProfileForm.js +7 -5
- package/login/lib/useUserProfileForm.js.map +1 -1
- package/login/pages/Code.d.ts +1 -2
- package/login/pages/Code.js +6 -5
- package/login/pages/Code.js.map +1 -1
- package/login/pages/DeleteAccountConfirm.d.ts +1 -2
- package/login/pages/DeleteAccountConfirm.js +7 -7
- package/login/pages/DeleteAccountConfirm.js.map +1 -1
- package/login/pages/DeleteCredential.d.ts +1 -2
- package/login/pages/DeleteCredential.js +6 -6
- package/login/pages/DeleteCredential.js.map +1 -1
- package/login/pages/Error.d.ts +1 -2
- package/login/pages/Error.js +4 -3
- package/login/pages/Error.js.map +1 -1
- package/login/pages/FrontchannelLogout.d.ts +1 -2
- package/login/pages/FrontchannelLogout.js +4 -3
- package/login/pages/FrontchannelLogout.js.map +1 -1
- package/login/pages/IdpReviewUserProfile.d.ts +1 -2
- package/login/pages/IdpReviewUserProfile.js +6 -6
- package/login/pages/IdpReviewUserProfile.js.map +1 -1
- package/login/pages/Info.d.ts +1 -2
- package/login/pages/Info.js +4 -3
- package/login/pages/Info.js.map +1 -1
- package/login/pages/Login.d.ts +1 -2
- package/login/pages/Login.js +10 -8
- package/login/pages/Login.js.map +1 -1
- package/login/pages/LoginConfigTotp.d.ts +1 -2
- package/login/pages/LoginConfigTotp.js +8 -7
- package/login/pages/LoginConfigTotp.js.map +1 -1
- package/login/pages/LoginIdpLinkConfirm.d.ts +1 -2
- package/login/pages/LoginIdpLinkConfirm.js +6 -6
- package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
- package/login/pages/LoginIdpLinkEmail.d.ts +1 -2
- package/login/pages/LoginIdpLinkEmail.js +4 -3
- package/login/pages/LoginIdpLinkEmail.js.map +1 -1
- package/login/pages/LoginOauth2DeviceVerifyUserCode.d.ts +1 -2
- package/login/pages/LoginOauth2DeviceVerifyUserCode.js +6 -6
- package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
- package/login/pages/LoginOauthGrant.d.ts +1 -2
- package/login/pages/LoginOauthGrant.js +7 -7
- package/login/pages/LoginOauthGrant.js.map +1 -1
- package/login/pages/LoginOtp.d.ts +1 -2
- package/login/pages/LoginOtp.js +6 -6
- package/login/pages/LoginOtp.js.map +1 -1
- package/login/pages/LoginPageExpired.d.ts +1 -2
- package/login/pages/LoginPageExpired.js +4 -3
- package/login/pages/LoginPageExpired.js.map +1 -1
- package/login/pages/LoginPassword.d.ts +1 -2
- package/login/pages/LoginPassword.js +9 -7
- package/login/pages/LoginPassword.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeConfig.d.ts +1 -2
- package/login/pages/LoginRecoveryAuthnCodeConfig.js +9 -7
- package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.d.ts +1 -2
- package/login/pages/LoginRecoveryAuthnCodeInput.js +6 -6
- package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
- package/login/pages/LoginResetOtp.d.ts +1 -2
- package/login/pages/LoginResetOtp.js +6 -6
- package/login/pages/LoginResetOtp.js.map +1 -1
- package/login/pages/LoginResetPassword.d.ts +1 -2
- package/login/pages/LoginResetPassword.js +7 -7
- package/login/pages/LoginResetPassword.js.map +1 -1
- package/login/pages/LoginUpdatePassword.d.ts +1 -2
- package/login/pages/LoginUpdatePassword.js +10 -9
- package/login/pages/LoginUpdatePassword.js.map +1 -1
- package/login/pages/LoginUpdateProfile.d.ts +1 -2
- package/login/pages/LoginUpdateProfile.js +7 -12
- package/login/pages/LoginUpdateProfile.js.map +1 -1
- package/login/pages/LoginUsername.d.ts +1 -2
- package/login/pages/LoginUsername.js +8 -7
- package/login/pages/LoginUsername.js.map +1 -1
- package/login/pages/LoginVerifyEmail.d.ts +1 -2
- package/login/pages/LoginVerifyEmail.js +4 -3
- package/login/pages/LoginVerifyEmail.js.map +1 -1
- package/login/pages/LoginX509Info.d.ts +1 -2
- package/login/pages/LoginX509Info.js +6 -6
- package/login/pages/LoginX509Info.js.map +1 -1
- package/login/pages/LogoutConfirm.d.ts +1 -2
- package/login/pages/LogoutConfirm.js +6 -6
- package/login/pages/LogoutConfirm.js.map +1 -1
- package/login/pages/PageProps.d.ts +2 -4
- package/login/pages/Register.d.ts +1 -2
- package/login/pages/Register.js +8 -16
- package/login/pages/Register.js.map +1 -1
- package/login/pages/SamlPostForm.d.ts +1 -2
- package/login/pages/SamlPostForm.js +4 -3
- package/login/pages/SamlPostForm.js.map +1 -1
- package/login/pages/SelectAuthenticator.d.ts +1 -2
- package/login/pages/SelectAuthenticator.js +6 -9
- package/login/pages/SelectAuthenticator.js.map +1 -1
- package/login/pages/Terms.d.ts +1 -2
- package/login/pages/Terms.js +6 -6
- package/login/pages/Terms.js.map +1 -1
- package/login/pages/UpdateEmail.d.ts +1 -2
- package/login/pages/UpdateEmail.js +8 -12
- package/login/pages/UpdateEmail.js.map +1 -1
- package/login/pages/WebauthnAuthenticate.d.ts +1 -2
- package/login/pages/WebauthnAuthenticate.js +13 -12
- package/login/pages/WebauthnAuthenticate.js.map +1 -1
- package/login/pages/WebauthnError.d.ts +1 -2
- package/login/pages/WebauthnError.js +7 -7
- package/login/pages/WebauthnError.js.map +1 -1
- package/login/pages/WebauthnRegister.d.ts +1 -2
- package/login/pages/WebauthnRegister.js +9 -8
- package/login/pages/WebauthnRegister.js.map +1 -1
- package/package.json +24 -16
- package/src/account/Fallback.tsx +1 -2
- package/src/account/KcContext/KcContext.ts +7 -7
- package/src/account/KcContext/getKcContextMock.ts +13 -24
- package/src/account/Template.tsx +8 -8
- package/src/account/TemplateProps.ts +1 -6
- package/src/account/i18n/i18n.tsx +204 -125
- package/src/account/i18n/index.ts +10 -2
- package/src/account/lib/{useGetClassName.ts → kcClsx.ts} +6 -2
- package/src/account/pages/Account.tsx +15 -21
- package/src/account/pages/Applications.tsx +8 -9
- package/src/account/pages/FederatedIdentity.tsx +5 -5
- package/src/account/pages/Log.tsx +8 -8
- package/src/account/pages/PageProps.ts +2 -4
- package/src/account/pages/Password.tsx +13 -16
- package/src/account/pages/Sessions.tsx +9 -10
- package/src/account/pages/Totp.tsx +19 -28
- package/src/bin/keycloakify/generateSrcMainResources/generateMessageProperties.ts +2 -66
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts +7 -1
- package/src/bin/main.ts +15 -0
- package/src/bin/shared/buildOptions.ts +5 -2
- package/src/bin/shared/generateKcGenTs.ts +61 -0
- package/src/bin/tools/escapeStringForPropertiesFile.ts +64 -0
- package/src/bin/update-kc-gen.ts +13 -0
- package/src/lib/getKcClsx.ts +75 -0
- package/src/login/Fallback.tsx +1 -2
- package/src/login/KcContext/KcContext.ts +7 -7
- package/src/login/KcContext/getKcContextMock.ts +13 -24
- package/src/login/Template.tsx +36 -37
- package/src/login/TemplateProps.ts +1 -6
- package/src/login/UserProfileFormFields.tsx +66 -81
- package/src/login/i18n/i18n.tsx +208 -129
- package/src/login/i18n/index.ts +10 -2
- package/src/login/lib/{useGetClassName.ts → kcClsx.ts} +6 -2
- package/src/login/lib/useUserProfileForm.tsx +29 -21
- package/src/login/pages/Code.tsx +10 -8
- package/src/login/pages/DeleteAccountConfirm.tsx +9 -10
- package/src/login/pages/DeleteCredential.tsx +11 -10
- package/src/login/pages/Error.tsx +5 -5
- package/src/login/pages/FrontchannelLogout.tsx +7 -5
- package/src/login/pages/IdpReviewUserProfile.tsx +16 -25
- package/src/login/pages/Info.tsx +7 -5
- package/src/login/pages/Login.tsx +34 -53
- package/src/login/pages/LoginConfigTotp.tsx +30 -38
- package/src/login/pages/LoginIdpLinkConfirm.tsx +10 -21
- package/src/login/pages/LoginIdpLinkEmail.tsx +5 -5
- package/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx +19 -24
- package/src/login/pages/LoginOauthGrant.tsx +14 -21
- package/src/login/pages/LoginOtp.tsx +29 -33
- package/src/login/pages/LoginPageExpired.tsx +5 -5
- package/src/login/pages/LoginPassword.tsx +23 -33
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +21 -25
- package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +21 -25
- package/src/login/pages/LoginResetOtp.tsx +21 -25
- package/src/login/pages/LoginResetPassword.tsx +21 -25
- package/src/login/pages/LoginUpdatePassword.tsx +42 -52
- package/src/login/pages/LoginUpdateProfile.tsx +26 -33
- package/src/login/pages/LoginUsername.tsx +23 -35
- package/src/login/pages/LoginVerifyEmail.tsx +7 -5
- package/src/login/pages/LoginX509Info.tsx +27 -36
- package/src/login/pages/LogoutConfirm.tsx +11 -17
- package/src/login/pages/PageProps.ts +2 -4
- package/src/login/pages/Register.tsx +24 -49
- package/src/login/pages/SamlPostForm.tsx +5 -5
- package/src/login/pages/SelectAuthenticator.tsx +24 -26
- package/src/login/pages/Terms.tsx +9 -16
- package/src/login/pages/UpdateEmail.tsx +26 -36
- package/src/login/pages/WebauthnAuthenticate.tsx +26 -32
- package/src/login/pages/WebauthnError.tsx +11 -22
- package/src/login/pages/WebauthnRegister.tsx +20 -28
- package/src/tools/clsx.ts +6 -48
- package/src/tools/clsx_withTransform.ts +55 -0
- package/src/vite-plugin/vite-plugin.ts +14 -6
- package/tools/clsx.d.ts +3 -2
- package/tools/clsx.js +5 -41
- package/tools/clsx.js.map +1 -1
- package/tools/clsx_withTransform.d.ts +5 -0
- package/tools/clsx_withTransform.js +43 -0
- package/tools/clsx_withTransform.js.map +1 -0
- package/vite-plugin/index.js +167 -37
- package/account/lib/useGetClassName.d.ts +0 -7
- package/account/lib/useGetClassName.js.map +0 -1
- package/lib/useGetClassName.d.ts +0 -10
- package/lib/useGetClassName.js +0 -14
- package/lib/useGetClassName.js.map +0 -1
- package/login/lib/useGetClassName.d.ts +0 -7
- package/login/lib/useGetClassName.js.map +0 -1
- package/src/lib/useGetClassName.ts +0 -27
@@ -1,35 +1,36 @@
|
|
1
|
-
import {
|
2
|
-
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
1
|
+
import { getKcClsx } from "keycloakify/login/lib/kcClsx";
|
3
2
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
4
3
|
import type { KcContext } from "../KcContext";
|
5
|
-
import
|
4
|
+
import { useI18n } from "../i18n";
|
6
5
|
|
7
|
-
export default function LoginRecoveryAuthnCodeInput(props: PageProps<Extract<KcContext, { pageId: "login-recovery-authn-code-input.ftl" }
|
8
|
-
const { kcContext,
|
6
|
+
export default function LoginRecoveryAuthnCodeInput(props: PageProps<Extract<KcContext, { pageId: "login-recovery-authn-code-input.ftl" }>>) {
|
7
|
+
const { kcContext, doUseDefaultCss, Template, classes } = props;
|
9
8
|
|
10
|
-
const {
|
9
|
+
const { kcClsx } = getKcClsx({
|
11
10
|
doUseDefaultCss,
|
12
11
|
classes
|
13
12
|
});
|
14
13
|
|
15
14
|
const { url, messagesPerField, recoveryAuthnCodesInputBean } = kcContext;
|
16
15
|
|
17
|
-
const { msg, msgStr } =
|
16
|
+
const { msg, msgStr } = useI18n({ kcContext });
|
18
17
|
|
19
18
|
return (
|
20
19
|
<Template
|
21
|
-
{
|
20
|
+
kcContext={kcContext}
|
21
|
+
doUseDefaultCss={doUseDefaultCss}
|
22
|
+
classes={classes}
|
22
23
|
headerNode={msg("auth-recovery-code-header")}
|
23
24
|
displayMessage={!messagesPerField.existsError("recoveryCodeInput")}
|
24
25
|
>
|
25
|
-
<form id="kc-recovery-code-login-form" className={
|
26
|
-
<div className={
|
27
|
-
<div className={
|
28
|
-
<label htmlFor="recoveryCodeInput" className={
|
26
|
+
<form id="kc-recovery-code-login-form" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
|
27
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
28
|
+
<div className={kcClsx("kcLabelWrapperClass")}>
|
29
|
+
<label htmlFor="recoveryCodeInput" className={kcClsx("kcLabelClass")}>
|
29
30
|
{msg("auth-recovery-code-prompt", `${recoveryAuthnCodesInputBean.codeNumber}`)}
|
30
31
|
</label>
|
31
32
|
</div>
|
32
|
-
<div className={
|
33
|
+
<div className={kcClsx("kcInputWrapperClass")}>
|
33
34
|
<input
|
34
35
|
tabIndex={1}
|
35
36
|
id="recoveryCodeInput"
|
@@ -37,29 +38,24 @@ export default function LoginRecoveryAuthnCodeInput(props: PageProps<Extract<KcC
|
|
37
38
|
aria-invalid={messagesPerField.existsError("recoveryCodeInput")}
|
38
39
|
autoComplete="off"
|
39
40
|
type="text"
|
40
|
-
className={
|
41
|
+
className={kcClsx("kcInputClass")}
|
41
42
|
autoFocus
|
42
43
|
/>
|
43
44
|
{messagesPerField.existsError("recoveryCodeInput") && (
|
44
|
-
<span id="input-error" className={
|
45
|
+
<span id="input-error" className={kcClsx("kcInputErrorMessageClass")} aria-live="polite">
|
45
46
|
{messagesPerField.get("recoveryCodeInput")}
|
46
47
|
</span>
|
47
48
|
)}
|
48
49
|
</div>
|
49
50
|
</div>
|
50
51
|
|
51
|
-
<div className={
|
52
|
-
<div id="kc-form-options" className={
|
53
|
-
<div className={
|
52
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
53
|
+
<div id="kc-form-options" className={kcClsx("kcFormOptionsWrapperClass")}>
|
54
|
+
<div className={kcClsx("kcFormOptionsWrapperClass")} />
|
54
55
|
</div>
|
55
|
-
<div id="kc-form-buttons" className={
|
56
|
+
<div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
|
56
57
|
<input
|
57
|
-
className={
|
58
|
-
getClassName("kcButtonClass"),
|
59
|
-
getClassName("kcButtonPrimaryClass"),
|
60
|
-
getClassName("kcButtonBlockClass"),
|
61
|
-
getClassName("kcButtonLargeClass")
|
62
|
-
)}
|
58
|
+
className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass")}
|
63
59
|
name="login"
|
64
60
|
id="kc-login"
|
65
61
|
type="submit"
|
@@ -1,62 +1,58 @@
|
|
1
1
|
import { Fragment } from "react";
|
2
|
-
import {
|
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
|
5
|
+
import { useI18n } from "../i18n";
|
7
6
|
|
8
|
-
export default function LoginResetOtp(props: PageProps<Extract<KcContext, { pageId: "login-reset-otp.ftl" }
|
9
|
-
const { kcContext,
|
7
|
+
export default function LoginResetOtp(props: PageProps<Extract<KcContext, { pageId: "login-reset-otp.ftl" }>>) {
|
8
|
+
const { kcContext, doUseDefaultCss, Template, classes } = props;
|
10
9
|
|
11
|
-
const {
|
10
|
+
const { kcClsx } = getKcClsx({
|
12
11
|
doUseDefaultCss,
|
13
12
|
classes
|
14
13
|
});
|
15
14
|
|
16
15
|
const { url, messagesPerField, configuredOtpCredentials } = kcContext;
|
17
16
|
|
18
|
-
const { msg, msgStr } =
|
17
|
+
const { msg, msgStr } = useI18n({ kcContext });
|
19
18
|
|
20
19
|
return (
|
21
20
|
<Template
|
22
|
-
{
|
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-reset-form" className={
|
27
|
-
<div className={
|
28
|
-
<div className={
|
27
|
+
<form id="kc-otp-reset-form" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
|
28
|
+
<div className={kcClsx("kcInputWrapperClass")}>
|
29
|
+
<div className={kcClsx("kcInfoAreaWrapperClass")}>
|
29
30
|
<p id="kc-otp-reset-form-description">{msg("otp-reset-description")}</p>
|
30
31
|
{configuredOtpCredentials.userOtpCredentials.map((otpCredential, index) => (
|
31
32
|
<Fragment key={otpCredential.id}>
|
32
33
|
<input
|
33
34
|
id={`kc-otp-credential-${index}`}
|
34
|
-
className={
|
35
|
+
className={kcClsx("kcLoginOTPListInputClass")}
|
35
36
|
type="radio"
|
36
37
|
name="selectedCredentialId"
|
37
38
|
value={otpCredential.id}
|
38
39
|
defaultChecked={otpCredential.id === configuredOtpCredentials.selectedCredentialId}
|
39
40
|
/>
|
40
|
-
<label htmlFor={`kc-otp-credential-${index}`} className={
|
41
|
-
<span className={
|
42
|
-
<span className={
|
43
|
-
<i className={
|
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={
|
46
|
+
<span className={kcClsx("kcLoginOTPListItemTitleClass")}>{otpCredential.userLabel}</span>
|
46
47
|
</span>
|
47
48
|
</label>
|
48
49
|
</Fragment>
|
49
50
|
))}
|
50
|
-
<div className={
|
51
|
-
<div id="kc-form-buttons" className={
|
51
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
52
|
+
<div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
|
52
53
|
<input
|
53
54
|
id="kc-otp-reset-form-submit"
|
54
|
-
className={
|
55
|
-
getClassName("kcButtonClass"),
|
56
|
-
getClassName("kcButtonPrimaryClass"),
|
57
|
-
getClassName("kcButtonBlockClass"),
|
58
|
-
getClassName("kcButtonLargeClass")
|
59
|
-
)}
|
55
|
+
className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass")}
|
60
56
|
type="submit"
|
61
57
|
value={msgStr("doSubmit")}
|
62
58
|
/>
|
@@ -1,33 +1,34 @@
|
|
1
|
-
import {
|
2
|
-
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
1
|
+
import { getKcClsx } from "keycloakify/login/lib/kcClsx";
|
3
2
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
4
3
|
import type { KcContext } from "../KcContext";
|
5
|
-
import
|
4
|
+
import { useI18n } from "../i18n";
|
6
5
|
|
7
|
-
export default function LoginResetPassword(props: PageProps<Extract<KcContext, { pageId: "login-reset-password.ftl" }
|
8
|
-
const { kcContext,
|
6
|
+
export default function LoginResetPassword(props: PageProps<Extract<KcContext, { pageId: "login-reset-password.ftl" }>>) {
|
7
|
+
const { kcContext, doUseDefaultCss, Template, classes } = props;
|
9
8
|
|
10
|
-
const {
|
9
|
+
const { kcClsx } = getKcClsx({
|
11
10
|
doUseDefaultCss,
|
12
11
|
classes
|
13
12
|
});
|
14
13
|
|
15
14
|
const { url, realm, auth, messagesPerField } = kcContext;
|
16
15
|
|
17
|
-
const { msg, msgStr } =
|
16
|
+
const { msg, msgStr } = useI18n({ kcContext });
|
18
17
|
|
19
18
|
return (
|
20
19
|
<Template
|
21
|
-
{
|
20
|
+
kcContext={kcContext}
|
21
|
+
doUseDefaultCss={doUseDefaultCss}
|
22
|
+
classes={classes}
|
22
23
|
displayInfo
|
23
24
|
displayMessage={!messagesPerField.existsError("username")}
|
24
25
|
infoNode={realm.duplicateEmailsAllowed ? msg("emailInstructionUsername") : msg("emailInstruction")}
|
25
26
|
headerNode={msg("emailForgotTitle")}
|
26
27
|
>
|
27
|
-
<form id="kc-reset-password-form" className={
|
28
|
-
<div className={
|
29
|
-
<div className={
|
30
|
-
<label htmlFor="username" className={
|
28
|
+
<form id="kc-reset-password-form" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
|
29
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
30
|
+
<div className={kcClsx("kcLabelWrapperClass")}>
|
31
|
+
<label htmlFor="username" className={kcClsx("kcLabelClass")}>
|
31
32
|
{!realm.loginWithEmailAllowed
|
32
33
|
? msg("username")
|
33
34
|
: !realm.registrationEmailAsUsername
|
@@ -35,40 +36,35 @@ export default function LoginResetPassword(props: PageProps<Extract<KcContext, {
|
|
35
36
|
: msg("email")}
|
36
37
|
</label>
|
37
38
|
</div>
|
38
|
-
<div className={
|
39
|
+
<div className={kcClsx("kcInputWrapperClass")}>
|
39
40
|
<input
|
40
41
|
type="text"
|
41
42
|
id="username"
|
42
43
|
name="username"
|
43
|
-
className={
|
44
|
+
className={kcClsx("kcInputClass")}
|
44
45
|
autoFocus
|
45
46
|
defaultValue={auth.attemptedUsername ?? ""}
|
46
47
|
aria-invalid={messagesPerField.existsError("username")}
|
47
48
|
/>
|
48
49
|
{messagesPerField.existsError("username") && (
|
49
|
-
<span id="input-error-username" className={
|
50
|
+
<span id="input-error-username" className={kcClsx("kcInputErrorMessageClass")} aria-live="polite">
|
50
51
|
{messagesPerField.get("username")}
|
51
52
|
</span>
|
52
53
|
)}
|
53
54
|
</div>
|
54
55
|
</div>
|
55
|
-
<div className={
|
56
|
-
<div id="kc-form-options" className={
|
57
|
-
<div className={
|
56
|
+
<div className={kcClsx("kcFormGroupClass", "kcFormSettingClass")}>
|
57
|
+
<div id="kc-form-options" className={kcClsx("kcFormOptionsClass")}>
|
58
|
+
<div className={kcClsx("kcFormOptionsWrapperClass")}>
|
58
59
|
<span>
|
59
60
|
<a href={url.loginUrl}>{msg("backToLogin")}</a>
|
60
61
|
</span>
|
61
62
|
</div>
|
62
63
|
</div>
|
63
64
|
|
64
|
-
<div id="kc-form-buttons" className={
|
65
|
+
<div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
|
65
66
|
<input
|
66
|
-
className={
|
67
|
-
getClassName("kcButtonClass"),
|
68
|
-
getClassName("kcButtonPrimaryClass"),
|
69
|
-
getClassName("kcButtonBlockClass"),
|
70
|
-
getClassName("kcButtonLargeClass")
|
71
|
-
)}
|
67
|
+
className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass")}
|
72
68
|
type="submit"
|
73
69
|
value={msgStr("doSubmit")}
|
74
70
|
/>
|
@@ -1,42 +1,44 @@
|
|
1
1
|
import { useEffect, useReducer } from "react";
|
2
|
-
import { clsx } from "keycloakify/tools/clsx";
|
3
2
|
import { assert } from "tsafe/assert";
|
4
|
-
import {
|
3
|
+
import { getKcClsx, type KcClsx } from "keycloakify/login/lib/kcClsx";
|
5
4
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
6
5
|
import type { KcContext } from "../KcContext";
|
7
|
-
import type
|
6
|
+
import { useI18n, type I18n } from "../i18n";
|
8
7
|
|
9
|
-
export default function LoginUpdatePassword(props: PageProps<Extract<KcContext, { pageId: "login-update-password.ftl" }
|
10
|
-
const { kcContext,
|
8
|
+
export default function LoginUpdatePassword(props: PageProps<Extract<KcContext, { pageId: "login-update-password.ftl" }>>) {
|
9
|
+
const { kcContext, doUseDefaultCss, Template, classes } = props;
|
11
10
|
|
12
|
-
const {
|
11
|
+
const { kcClsx } = getKcClsx({
|
13
12
|
doUseDefaultCss,
|
14
13
|
classes
|
15
14
|
});
|
16
15
|
|
16
|
+
const i18n = useI18n({ kcContext });
|
17
17
|
const { msg, msgStr } = i18n;
|
18
18
|
|
19
19
|
const { url, messagesPerField, isAppInitiatedAction } = kcContext;
|
20
20
|
|
21
21
|
return (
|
22
22
|
<Template
|
23
|
-
{
|
23
|
+
kcContext={kcContext}
|
24
|
+
doUseDefaultCss={doUseDefaultCss}
|
25
|
+
classes={classes}
|
24
26
|
displayMessage={!messagesPerField.existsError("password", "password-confirm")}
|
25
27
|
headerNode={msg("updatePasswordTitle")}
|
26
28
|
>
|
27
|
-
<form id="kc-passwd-update-form" className={
|
28
|
-
<div className={
|
29
|
-
<div className={
|
30
|
-
<label htmlFor="password-new" className={
|
29
|
+
<form id="kc-passwd-update-form" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
|
30
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
31
|
+
<div className={kcClsx("kcLabelWrapperClass")}>
|
32
|
+
<label htmlFor="password-new" className={kcClsx("kcLabelClass")}>
|
31
33
|
{msg("passwordNew")}
|
32
34
|
</label>
|
33
|
-
<div className={
|
34
|
-
<PasswordWrapper {
|
35
|
+
<div className={kcClsx("kcInputWrapperClass")}>
|
36
|
+
<PasswordWrapper kcClsx={kcClsx} i18n={i18n} passwordInputId="password-new">
|
35
37
|
<input
|
36
38
|
type="password"
|
37
39
|
id="password-new"
|
38
40
|
name="password-new"
|
39
|
-
className={
|
41
|
+
className={kcClsx("kcInputClass")}
|
40
42
|
autoFocus
|
41
43
|
autoComplete="new-password"
|
42
44
|
aria-invalid={messagesPerField.existsError("password", "password-confirm")}
|
@@ -44,7 +46,7 @@ export default function LoginUpdatePassword(props: PageProps<Extract<KcContext,
|
|
44
46
|
</PasswordWrapper>
|
45
47
|
|
46
48
|
{messagesPerField.existsError("password") && (
|
47
|
-
<span id="input-error-password" className={
|
49
|
+
<span id="input-error-password" className={kcClsx("kcInputErrorMessageClass")} aria-live="polite">
|
48
50
|
{messagesPerField.get("password")}
|
49
51
|
</span>
|
50
52
|
)}
|
@@ -52,19 +54,19 @@ export default function LoginUpdatePassword(props: PageProps<Extract<KcContext,
|
|
52
54
|
</div>
|
53
55
|
</div>
|
54
56
|
|
55
|
-
<div className={
|
56
|
-
<div className={
|
57
|
-
<label htmlFor="password-confirm" className={
|
57
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
58
|
+
<div className={kcClsx("kcLabelWrapperClass")}>
|
59
|
+
<label htmlFor="password-confirm" className={kcClsx("kcLabelClass")}>
|
58
60
|
{msg("passwordConfirm")}
|
59
61
|
</label>
|
60
62
|
</div>
|
61
|
-
<div className={
|
62
|
-
<PasswordWrapper {
|
63
|
+
<div className={kcClsx("kcInputWrapperClass")}>
|
64
|
+
<PasswordWrapper kcClsx={kcClsx} i18n={i18n} passwordInputId="password-confirm">
|
63
65
|
<input
|
64
66
|
type="password"
|
65
67
|
id="password-confirm"
|
66
68
|
name="password-confirm"
|
67
|
-
className={
|
69
|
+
className={kcClsx("kcInputClass")}
|
68
70
|
autoFocus
|
69
71
|
autoComplete="new-password"
|
70
72
|
aria-invalid={messagesPerField.existsError("password", "password-confirm")}
|
@@ -72,33 +74,29 @@ export default function LoginUpdatePassword(props: PageProps<Extract<KcContext,
|
|
72
74
|
</PasswordWrapper>
|
73
75
|
|
74
76
|
{messagesPerField.existsError("password-confirm") && (
|
75
|
-
<span id="input-error-password-confirm" className={
|
77
|
+
<span id="input-error-password-confirm" className={kcClsx("kcInputErrorMessageClass")} aria-live="polite">
|
76
78
|
{messagesPerField.get("password-confirm")}
|
77
79
|
</span>
|
78
80
|
)}
|
79
81
|
</div>
|
80
82
|
|
81
|
-
<div className={
|
82
|
-
<LogoutOtherSessions {
|
83
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
84
|
+
<LogoutOtherSessions kcClsx={kcClsx} i18n={i18n} />
|
83
85
|
|
84
|
-
<div id="kc-form-buttons" className={
|
86
|
+
<div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
|
85
87
|
<input
|
86
|
-
className={
|
87
|
-
|
88
|
-
|
89
|
-
isAppInitiatedAction &&
|
90
|
-
|
88
|
+
className={kcClsx(
|
89
|
+
"kcButtonClass",
|
90
|
+
"kcButtonPrimaryClass",
|
91
|
+
isAppInitiatedAction && "kcButtonBlockClass",
|
92
|
+
"kcButtonLargeClass"
|
91
93
|
)}
|
92
94
|
type="submit"
|
93
95
|
value={msgStr("doSubmit")}
|
94
96
|
/>
|
95
97
|
{isAppInitiatedAction && (
|
96
98
|
<button
|
97
|
-
className={
|
98
|
-
getClassName("kcButtonClass"),
|
99
|
-
getClassName("kcButtonDefaultClass"),
|
100
|
-
getClassName("kcButtonLargeClass")
|
101
|
-
)}
|
99
|
+
className={kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonLargeClass")}
|
102
100
|
type="submit"
|
103
101
|
name="cancel-aia"
|
104
102
|
value="true"
|
@@ -114,14 +112,14 @@ export default function LoginUpdatePassword(props: PageProps<Extract<KcContext,
|
|
114
112
|
);
|
115
113
|
}
|
116
114
|
|
117
|
-
function LogoutOtherSessions(props: {
|
118
|
-
const {
|
115
|
+
function LogoutOtherSessions(props: { kcClsx: KcClsx; i18n: I18n }) {
|
116
|
+
const { kcClsx, i18n } = props;
|
119
117
|
|
120
118
|
const { msg } = i18n;
|
121
119
|
|
122
120
|
return (
|
123
|
-
<div id="kc-form-options" className={
|
124
|
-
<div className={
|
121
|
+
<div id="kc-form-options" className={kcClsx("kcFormOptionsClass")}>
|
122
|
+
<div className={kcClsx("kcFormOptionsWrapperClass")}>
|
125
123
|
<div className="checkbox">
|
126
124
|
<label>
|
127
125
|
<input type="checkbox" id="logout-sessions" name="logout-sessions" value="on" defaultChecked={true} />
|
@@ -133,13 +131,8 @@ function LogoutOtherSessions(props: { getClassName: ReturnType<typeof useGetClas
|
|
133
131
|
);
|
134
132
|
}
|
135
133
|
|
136
|
-
function PasswordWrapper(props: {
|
137
|
-
|
138
|
-
i18n: I18n;
|
139
|
-
passwordInputId: string;
|
140
|
-
children: JSX.Element;
|
141
|
-
}) {
|
142
|
-
const { getClassName, i18n, passwordInputId, children } = props;
|
134
|
+
function PasswordWrapper(props: { kcClsx: KcClsx; i18n: I18n; passwordInputId: string; children: JSX.Element }) {
|
135
|
+
const { kcClsx, i18n, passwordInputId, children } = props;
|
143
136
|
|
144
137
|
const { msgStr } = i18n;
|
145
138
|
|
@@ -154,19 +147,16 @@ function PasswordWrapper(props: {
|
|
154
147
|
}, [isPasswordRevealed]);
|
155
148
|
|
156
149
|
return (
|
157
|
-
<div className={
|
150
|
+
<div className={kcClsx("kcInputGroup")}>
|
158
151
|
{children}
|
159
152
|
<button
|
160
153
|
type="button"
|
161
|
-
className={
|
154
|
+
className={kcClsx("kcFormPasswordVisibilityButtonClass")}
|
162
155
|
aria-label={msgStr(isPasswordRevealed ? "hidePassword" : "showPassword")}
|
163
156
|
aria-controls={passwordInputId}
|
164
157
|
onClick={toggleIsPasswordRevealed}
|
165
158
|
>
|
166
|
-
<i
|
167
|
-
className={getClassName(isPasswordRevealed ? "kcFormPasswordVisibilityIconHide" : "kcFormPasswordVisibilityIconShow")}
|
168
|
-
aria-hidden
|
169
|
-
/>
|
159
|
+
<i className={kcClsx(isPasswordRevealed ? "kcFormPasswordVisibilityIconHide" : "kcFormPasswordVisibilityIconShow")} aria-hidden />
|
170
160
|
</button>
|
171
161
|
</div>
|
172
162
|
);
|
@@ -1,65 +1,58 @@
|
|
1
1
|
import { useState } from "react";
|
2
|
-
import { clsx } from "keycloakify/tools/clsx";
|
3
2
|
import type { LazyOrNot } from "keycloakify/tools/LazyOrNot";
|
4
|
-
import {
|
3
|
+
import { getKcClsx } from "keycloakify/login/lib/kcClsx";
|
5
4
|
import type { UserProfileFormFieldsProps } from "keycloakify/login/UserProfileFormFields";
|
6
5
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
7
6
|
import type { KcContext } from "../KcContext";
|
8
|
-
import
|
7
|
+
import { useI18n } from "../i18n";
|
9
8
|
|
10
|
-
type LoginUpdateProfileProps = PageProps<Extract<KcContext, { pageId: "login-update-profile.ftl" }
|
9
|
+
type LoginUpdateProfileProps = PageProps<Extract<KcContext, { pageId: "login-update-profile.ftl" }>> & {
|
11
10
|
UserProfileFormFields: LazyOrNot<(props: UserProfileFormFieldsProps) => JSX.Element>;
|
12
11
|
};
|
13
12
|
|
14
13
|
export default function LoginUpdateProfile(props: LoginUpdateProfileProps) {
|
15
|
-
const { kcContext,
|
14
|
+
const { kcContext, doUseDefaultCss, Template, classes, UserProfileFormFields } = props;
|
16
15
|
|
17
|
-
const {
|
16
|
+
const { kcClsx } = getKcClsx({
|
18
17
|
doUseDefaultCss,
|
19
18
|
classes
|
20
19
|
});
|
21
20
|
|
22
|
-
const { url,
|
21
|
+
const { url, isAppInitiatedAction } = kcContext;
|
23
22
|
|
24
|
-
const { msg, msgStr } =
|
23
|
+
const { msg, msgStr } = useI18n({ kcContext });
|
25
24
|
|
26
25
|
const [isFormSubmittable, setIsFormSubmittable] = useState(false);
|
27
26
|
|
28
27
|
return (
|
29
|
-
<Template
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
<div id="kc-form-options" className={getClassName("kcFormOptionsClass")}>
|
42
|
-
<div className={getClassName("kcFormOptionsWrapperClass")} />
|
28
|
+
<Template
|
29
|
+
kcContext={kcContext}
|
30
|
+
doUseDefaultCss={doUseDefaultCss}
|
31
|
+
classes={classes}
|
32
|
+
displayRequiredFields
|
33
|
+
headerNode={msg("loginProfileTitle")}
|
34
|
+
>
|
35
|
+
<form id="kc-update-profile-form" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
|
36
|
+
<UserProfileFormFields kcContext={kcContext} kcClsx={kcClsx} onIsFormSubmittableValueChange={setIsFormSubmittable} />
|
37
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
38
|
+
<div id="kc-form-options" className={kcClsx("kcFormOptionsClass")}>
|
39
|
+
<div className={kcClsx("kcFormOptionsWrapperClass")} />
|
43
40
|
</div>
|
44
|
-
<div id="kc-form-buttons" className={
|
41
|
+
<div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
|
45
42
|
<input
|
46
43
|
disabled={!isFormSubmittable}
|
47
|
-
className={
|
48
|
-
|
49
|
-
|
50
|
-
!isAppInitiatedAction &&
|
51
|
-
|
44
|
+
className={kcClsx(
|
45
|
+
"kcButtonClass",
|
46
|
+
"kcButtonPrimaryClass",
|
47
|
+
!isAppInitiatedAction && "kcButtonBlockClass",
|
48
|
+
"kcButtonLargeClass"
|
52
49
|
)}
|
53
50
|
type="submit"
|
54
51
|
value={msgStr("doSubmit")}
|
55
52
|
/>
|
56
53
|
{isAppInitiatedAction && (
|
57
54
|
<button
|
58
|
-
className={
|
59
|
-
getClassName("kcButtonClass"),
|
60
|
-
getClassName("kcButtonDefaultClass"),
|
61
|
-
getClassName("kcButtonLargeClass")
|
62
|
-
)}
|
55
|
+
className={kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonLargeClass")}
|
63
56
|
type="submit"
|
64
57
|
name="cancel-aia"
|
65
58
|
value="true"
|