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,16 +1,16 @@
|
|
1
1
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
2
2
|
import type { KcContext } from "../KcContext";
|
3
|
-
import
|
3
|
+
import { useI18n } from "../i18n";
|
4
4
|
|
5
|
-
export default function LoginIdpLinkEmail(props: PageProps<Extract<KcContext, { pageId: "login-idp-link-email.ftl" }
|
6
|
-
const { kcContext,
|
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 } =
|
10
|
+
const { msg } = useI18n({ kcContext });
|
11
11
|
|
12
12
|
return (
|
13
|
-
<Template {
|
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 {
|
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" }
|
7
|
+
props: PageProps<Extract<KcContext, { pageId: "login-oauth2-device-verify-user-code.ftl" }>>
|
9
8
|
) {
|
10
|
-
const { kcContext,
|
9
|
+
const { kcContext, doUseDefaultCss, classes, Template } = props;
|
11
10
|
const { url } = kcContext;
|
12
11
|
|
13
|
-
const { msg, msgStr } =
|
12
|
+
const { msg, msgStr } = useI18n({ kcContext });
|
14
13
|
|
15
|
-
const {
|
14
|
+
const { kcClsx } = getKcClsx({
|
16
15
|
doUseDefaultCss,
|
17
16
|
classes
|
18
17
|
});
|
19
18
|
|
20
19
|
return (
|
21
|
-
<Template {
|
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={
|
23
|
+
className={kcClsx("kcFormClass")}
|
25
24
|
action={url.oauth2DeviceVerificationAction}
|
26
25
|
method="post"
|
27
26
|
>
|
28
|
-
<div className={
|
29
|
-
<div className={
|
30
|
-
<label htmlFor="device-user-code" className={
|
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={
|
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={
|
40
|
+
className={kcClsx("kcInputClass")}
|
42
41
|
autoFocus
|
43
42
|
/>
|
44
43
|
</div>
|
45
44
|
</div>
|
46
45
|
|
47
|
-
<div className={
|
48
|
-
<div id="kc-form-options" className={
|
49
|
-
<div className={
|
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={
|
53
|
-
<div className={
|
51
|
+
<div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
|
52
|
+
<div className={kcClsx("kcFormButtonsWrapperClass")}>
|
54
53
|
<input
|
55
|
-
className={
|
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 {
|
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 {
|
4
|
+
import { useI18n } from "../i18n";
|
6
5
|
|
7
|
-
export default function LoginOauthGrant(props: PageProps<Extract<KcContext, { pageId: "login-oauth-grant.ftl" }
|
8
|
-
const { kcContext,
|
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 } =
|
10
|
+
const { msg, msgStr, advancedMsg, advancedMsgStr } = useI18n({ kcContext });
|
12
11
|
|
13
|
-
const {
|
12
|
+
const { kcClsx } = getKcClsx({
|
14
13
|
doUseDefaultCss,
|
15
14
|
classes
|
16
15
|
});
|
17
16
|
|
18
17
|
return (
|
19
18
|
<Template
|
20
|
-
{
|
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={
|
72
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
72
73
|
<div id="kc-form-options">
|
73
|
-
<div className={
|
74
|
+
<div className={kcClsx("kcFormOptionsWrapperClass")}></div>
|
74
75
|
</div>
|
75
76
|
|
76
77
|
<div id="kc-form-buttons">
|
77
|
-
<div className={
|
78
|
+
<div className={kcClsx("kcFormButtonsWrapperClass")}>
|
78
79
|
<input
|
79
|
-
className={
|
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={
|
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 {
|
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 LoginOtp(props: PageProps<Extract<KcContext, { pageId: "login-otp.ftl" }
|
9
|
-
const { kcContext,
|
7
|
+
export default function LoginOtp(props: PageProps<Extract<KcContext, { pageId: "login-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 { otpLogin, url, messagesPerField } = 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-login-form" className={
|
27
|
+
<form id="kc-otp-login-form" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
|
27
28
|
{otpLogin.userOtpCredentials.length > 1 && (
|
28
|
-
<div className={
|
29
|
-
<div className={
|
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={
|
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={
|
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>
|
@@ -51,42 +52,37 @@ export default function LoginOtp(props: PageProps<Extract<KcContext, { pageId: "
|
|
51
52
|
</div>
|
52
53
|
)}
|
53
54
|
|
54
|
-
<div className={
|
55
|
-
<div className={
|
56
|
-
<label htmlFor="otp" className={
|
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={
|
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={
|
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={
|
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={
|
79
|
-
<div id="kc-form-options" className={
|
80
|
-
<div className={
|
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={
|
83
|
+
<div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
|
83
84
|
<input
|
84
|
-
className={
|
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
|
3
|
+
import { useI18n } from "../i18n";
|
4
4
|
|
5
|
-
export default function LoginPageExpired(props: PageProps<Extract<KcContext, { pageId: "login-page-expired.ftl" }
|
6
|
-
const { kcContext,
|
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 } =
|
10
|
+
const { msg } = useI18n({ kcContext });
|
11
11
|
|
12
12
|
return (
|
13
|
-
<Template {
|
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 {
|
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
|
7
|
+
import { useI18n, type I18n } from "../i18n";
|
8
8
|
|
9
|
-
export default function LoginPassword(props: PageProps<Extract<KcContext, { pageId: "login-password.ftl" }
|
10
|
-
const { kcContext,
|
9
|
+
export default function LoginPassword(props: PageProps<Extract<KcContext, { pageId: "login-password.ftl" }>>) {
|
10
|
+
const { kcContext, doUseDefaultCss, Template, classes } = props;
|
11
11
|
|
12
|
-
const {
|
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
|
-
{
|
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(
|
43
|
+
<div className={clsx(kcClsx("kcFormGroupClass"), "no-bottom-margin")}>
|
41
44
|
<hr />
|
42
|
-
<label htmlFor="password" className={
|
45
|
+
<label htmlFor="password" className={kcClsx("kcLabelClass")}>
|
43
46
|
{msg("password")}
|
44
47
|
</label>
|
45
48
|
|
46
|
-
<PasswordWrapper
|
49
|
+
<PasswordWrapper kcClsx={kcClsx} i18n={i18n} passwordInputId="password">
|
47
50
|
<input
|
48
51
|
tabIndex={2}
|
49
52
|
id="password"
|
50
|
-
className={
|
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={
|
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={
|
68
|
+
<div className={kcClsx("kcFormGroupClass", "kcFormSettingClass")}>
|
66
69
|
<div id="kc-form-options" />
|
67
|
-
<div className={
|
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={
|
80
|
+
<div id="kc-form-buttons" className={kcClsx("kcFormGroupClass")}>
|
78
81
|
<input
|
79
82
|
tabIndex={4}
|
80
|
-
className={
|
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
|
-
|
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={
|
114
|
+
<div className={kcClsx("kcInputGroup")}>
|
122
115
|
{children}
|
123
116
|
<button
|
124
117
|
type="button"
|
125
|
-
className={
|
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 {
|
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
|
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" }
|
10
|
-
const { kcContext,
|
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 {
|
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 {
|
148
|
-
<div className={clsx("pf-c-alert", "pf-m-warning", "pf-m-inline",
|
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={
|
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={
|
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={
|
184
|
+
<div className={kcClsx("kcFormOptionsClass")}>
|
184
185
|
<input
|
185
|
-
className={
|
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={
|
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 {
|
203
|
+
<LogoutOtherSessions kcClsx={kcClsx} i18n={i18n} />
|
203
204
|
|
204
205
|
{isAppInitiatedAction ? (
|
205
206
|
<>
|
206
207
|
<input
|
207
208
|
type="submit"
|
208
|
-
className={
|
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={
|
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={
|
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: {
|
243
|
-
const {
|
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={
|
249
|
-
<div className={
|
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} />
|