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,27 +1,29 @@
|
|
1
1
|
import { useState } from "react";
|
2
2
|
import { clsx } from "keycloakify/tools/clsx";
|
3
|
-
import {
|
3
|
+
import { getKcClsx } from "keycloakify/login/lib/kcClsx";
|
4
4
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
5
5
|
import type { KcContext } from "../KcContext";
|
6
|
-
import
|
6
|
+
import { useI18n } from "../i18n";
|
7
7
|
|
8
|
-
export default function LoginUsername(props: PageProps<Extract<KcContext, { pageId: "login-username.ftl" }
|
9
|
-
const { kcContext,
|
8
|
+
export default function LoginUsername(props: PageProps<Extract<KcContext, { pageId: "login-username.ftl" }>>) {
|
9
|
+
const { kcContext, doUseDefaultCss, Template, classes } = props;
|
10
10
|
|
11
|
-
const {
|
11
|
+
const { kcClsx } = getKcClsx({
|
12
12
|
doUseDefaultCss,
|
13
13
|
classes
|
14
14
|
});
|
15
15
|
|
16
16
|
const { social, realm, url, usernameHidden, login, registrationDisabled, messagesPerField } = kcContext;
|
17
17
|
|
18
|
-
const { msg, msgStr } =
|
18
|
+
const { msg, msgStr } = useI18n({ kcContext });
|
19
19
|
|
20
20
|
const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
|
21
21
|
|
22
22
|
return (
|
23
23
|
<Template
|
24
|
-
{
|
24
|
+
kcContext={kcContext}
|
25
|
+
doUseDefaultCss={doUseDefaultCss}
|
26
|
+
classes={classes}
|
25
27
|
displayMessage={!messagesPerField.existsError("username")}
|
26
28
|
displayInfo={realm.password && realm.registrationAllowed && !registrationDisabled}
|
27
29
|
infoNode={
|
@@ -38,32 +40,23 @@ export default function LoginUsername(props: PageProps<Extract<KcContext, { page
|
|
38
40
|
socialProvidersNode={
|
39
41
|
<>
|
40
42
|
{realm.password && social.providers?.length && (
|
41
|
-
<div id="kc-social-providers" className={
|
43
|
+
<div id="kc-social-providers" className={kcClsx("kcFormSocialAccountSectionClass")}>
|
42
44
|
<hr />
|
43
45
|
<h2>{msg("identity-provider-login-label")}</h2>
|
44
|
-
<ul
|
45
|
-
className={clsx(
|
46
|
-
getClassName("kcFormSocialAccountListClass"),
|
47
|
-
social.providers.length > 3 && getClassName("kcFormSocialAccountListGridClass")
|
48
|
-
)}
|
49
|
-
>
|
46
|
+
<ul className={kcClsx("kcFormSocialAccountListClass", social.providers.length > 3 && "kcFormSocialAccountListGridClass")}>
|
50
47
|
{social.providers.map((...[p, , providers]) => (
|
51
48
|
<li key={p.alias}>
|
52
49
|
<a
|
53
50
|
id={`social-${p.alias}`}
|
54
|
-
className={
|
55
|
-
|
56
|
-
providers.length > 3 &&
|
51
|
+
className={kcClsx(
|
52
|
+
"kcFormSocialAccountListButtonClass",
|
53
|
+
providers.length > 3 && "kcFormSocialAccountGridItem"
|
57
54
|
)}
|
58
55
|
type="button"
|
59
56
|
href={p.loginUrl}
|
60
57
|
>
|
61
|
-
{p.iconClasses && (
|
62
|
-
|
63
|
-
)}
|
64
|
-
<span
|
65
|
-
className={clsx(getClassName("kcFormSocialAccountNameClass"), p.iconClasses && "kc-social-icon-text")}
|
66
|
-
>
|
58
|
+
{p.iconClasses && <i className={clsx(kcClsx("kcCommonLogoIdP"), p.iconClasses)} aria-hidden="true"></i>}
|
59
|
+
<span className={clsx(kcClsx("kcFormSocialAccountNameClass"), p.iconClasses && "kc-social-icon-text")}>
|
67
60
|
{p.displayName}
|
68
61
|
</span>
|
69
62
|
</a>
|
@@ -88,8 +81,8 @@ export default function LoginUsername(props: PageProps<Extract<KcContext, { page
|
|
88
81
|
method="post"
|
89
82
|
>
|
90
83
|
{!usernameHidden && (
|
91
|
-
<div className={
|
92
|
-
<label htmlFor="username" className={
|
84
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
85
|
+
<label htmlFor="username" className={kcClsx("kcLabelClass")}>
|
93
86
|
{!realm.loginWithEmailAllowed
|
94
87
|
? msg("username")
|
95
88
|
: !realm.registrationEmailAsUsername
|
@@ -99,7 +92,7 @@ export default function LoginUsername(props: PageProps<Extract<KcContext, { page
|
|
99
92
|
<input
|
100
93
|
tabIndex={2}
|
101
94
|
id="username"
|
102
|
-
className={
|
95
|
+
className={kcClsx("kcInputClass")}
|
103
96
|
name="username"
|
104
97
|
defaultValue={login.username ?? ""}
|
105
98
|
type="text"
|
@@ -108,14 +101,14 @@ export default function LoginUsername(props: PageProps<Extract<KcContext, { page
|
|
108
101
|
aria-invalid={messagesPerField.existsError("username")}
|
109
102
|
/>
|
110
103
|
{messagesPerField.existsError("username") && (
|
111
|
-
<span id="input-error" className={
|
104
|
+
<span id="input-error" className={kcClsx("kcInputErrorMessageClass")} aria-live="polite">
|
112
105
|
{messagesPerField.getFirstError("username")}
|
113
106
|
</span>
|
114
107
|
)}
|
115
108
|
</div>
|
116
109
|
)}
|
117
110
|
|
118
|
-
<div className={
|
111
|
+
<div className={kcClsx("kcFormGroupClass", "kcFormSettingClass")}>
|
119
112
|
<div id="kc-form-options">
|
120
113
|
{realm.rememberMe && !usernameHidden && (
|
121
114
|
<div className="checkbox">
|
@@ -134,16 +127,11 @@ export default function LoginUsername(props: PageProps<Extract<KcContext, { page
|
|
134
127
|
</div>
|
135
128
|
</div>
|
136
129
|
|
137
|
-
<div id="kc-form-buttons" className={
|
130
|
+
<div id="kc-form-buttons" className={kcClsx("kcFormGroupClass")}>
|
138
131
|
<input
|
139
132
|
tabIndex={4}
|
140
133
|
disabled={isLoginButtonDisabled}
|
141
|
-
className={
|
142
|
-
getClassName("kcButtonClass"),
|
143
|
-
getClassName("kcButtonPrimaryClass"),
|
144
|
-
getClassName("kcButtonBlockClass"),
|
145
|
-
getClassName("kcButtonLargeClass")
|
146
|
-
)}
|
134
|
+
className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass")}
|
147
135
|
name="login"
|
148
136
|
id="kc-login"
|
149
137
|
type="submit"
|
@@ -1,17 +1,19 @@
|
|
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 LoginVerifyEmail(props: PageProps<Extract<KcContext, { pageId: "login-verify-email.ftl" }
|
6
|
-
const { kcContext,
|
5
|
+
export default function LoginVerifyEmail(props: PageProps<Extract<KcContext, { pageId: "login-verify-email.ftl" }>>) {
|
6
|
+
const { kcContext, doUseDefaultCss, Template, classes } = props;
|
7
7
|
|
8
|
-
const { msg } =
|
8
|
+
const { msg } = useI18n({ kcContext });
|
9
9
|
|
10
10
|
const { url, user } = kcContext;
|
11
11
|
|
12
12
|
return (
|
13
13
|
<Template
|
14
|
-
{
|
14
|
+
kcContext={kcContext}
|
15
|
+
doUseDefaultCss={doUseDefaultCss}
|
16
|
+
classes={classes}
|
15
17
|
displayInfo
|
16
18
|
headerNode={msg("emailVerifyTitle")}
|
17
19
|
infoNode={
|
@@ -1,72 +1,67 @@
|
|
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 LoginX509Info(props: PageProps<Extract<KcContext, { pageId: "login-x509-info.ftl" }
|
8
|
-
const { kcContext,
|
6
|
+
export default function LoginX509Info(props: PageProps<Extract<KcContext, { pageId: "login-x509-info.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, x509 } = kcContext;
|
16
15
|
|
17
|
-
const { msg, msgStr } =
|
16
|
+
const { msg, msgStr } = useI18n({ kcContext });
|
18
17
|
|
19
18
|
return (
|
20
|
-
<Template {
|
21
|
-
<form id="kc-x509-login-info" className={
|
22
|
-
<div className={
|
23
|
-
<div className={
|
24
|
-
<label htmlFor="certificate_subjectDN" className={
|
19
|
+
<Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("doLogIn")}>
|
20
|
+
<form id="kc-x509-login-info" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
|
21
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
22
|
+
<div className={kcClsx("kcLabelWrapperClass")}>
|
23
|
+
<label htmlFor="certificate_subjectDN" className={kcClsx("kcLabelClass")}>
|
25
24
|
{msg("clientCertificate")}
|
26
25
|
</label>
|
27
26
|
</div>
|
28
27
|
{x509.formData.subjectDN ? (
|
29
|
-
<div className={
|
30
|
-
<label id="certificate_subjectDN" className={
|
28
|
+
<div className={kcClsx("kcLabelWrapperClass")}>
|
29
|
+
<label id="certificate_subjectDN" className={kcClsx("kcLabelClass")}>
|
31
30
|
{x509.formData.subjectDN}
|
32
31
|
</label>
|
33
32
|
</div>
|
34
33
|
) : (
|
35
|
-
<div className={
|
36
|
-
<label id="certificate_subjectDN" className={
|
34
|
+
<div className={kcClsx("kcLabelWrapperClass")}>
|
35
|
+
<label id="certificate_subjectDN" className={kcClsx("kcLabelClass")}>
|
37
36
|
{msg("noCertificate")}
|
38
37
|
</label>
|
39
38
|
</div>
|
40
39
|
)}
|
41
40
|
</div>
|
42
|
-
<div className={
|
41
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
43
42
|
{x509.formData.isUserEnabled && (
|
44
43
|
<>
|
45
|
-
<div className={
|
46
|
-
<label htmlFor="username" className={
|
44
|
+
<div className={kcClsx("kcLabelWrapperClass")}>
|
45
|
+
<label htmlFor="username" className={kcClsx("kcLabelClass")}>
|
47
46
|
{msg("doX509Login")}
|
48
47
|
</label>
|
49
48
|
</div>
|
50
|
-
<div className={
|
51
|
-
<label id="username" className={
|
49
|
+
<div className={kcClsx("kcLabelWrapperClass")}>
|
50
|
+
<label id="username" className={kcClsx("kcLabelClass")}>
|
52
51
|
{x509.formData.username}
|
53
52
|
</label>
|
54
53
|
</div>
|
55
54
|
</>
|
56
55
|
)}
|
57
56
|
</div>
|
58
|
-
<div className={
|
59
|
-
<div id="kc-form-options" className={
|
60
|
-
<div className={
|
57
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
58
|
+
<div id="kc-form-options" className={kcClsx("kcFormOptionsClass")}>
|
59
|
+
<div className={kcClsx("kcFormOptionsWrapperClass")} />
|
61
60
|
</div>
|
62
|
-
<div id="kc-form-buttons" className={
|
63
|
-
<div className={
|
61
|
+
<div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
|
62
|
+
<div className={kcClsx("kcFormButtonsWrapperClass")}>
|
64
63
|
<input
|
65
|
-
className={
|
66
|
-
getClassName("kcButtonClass"),
|
67
|
-
getClassName("kcButtonPrimaryClass"),
|
68
|
-
getClassName("kcButtonLargeClass")
|
69
|
-
)}
|
64
|
+
className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonLargeClass")}
|
70
65
|
name="login"
|
71
66
|
id="kc-login"
|
72
67
|
type="submit"
|
@@ -74,11 +69,7 @@ export default function LoginX509Info(props: PageProps<Extract<KcContext, { page
|
|
74
69
|
/>
|
75
70
|
{x509.formData.isUserEnabled && (
|
76
71
|
<input
|
77
|
-
className={
|
78
|
-
getClassName("kcButtonClass"),
|
79
|
-
getClassName("kcButtonDefaultClass"),
|
80
|
-
getClassName("kcButtonLargeClass")
|
81
|
-
)}
|
72
|
+
className={kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonLargeClass")}
|
82
73
|
name="cancel"
|
83
74
|
id="kc-cancel"
|
84
75
|
type="submit"
|
@@ -1,40 +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 LogoutConfirm(props: PageProps<Extract<KcContext, { pageId: "logout-confirm.ftl" }
|
8
|
-
const { kcContext,
|
6
|
+
export default function LogoutConfirm(props: PageProps<Extract<KcContext, { pageId: "logout-confirm.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, client, logoutConfirm } = kcContext;
|
16
15
|
|
17
|
-
const { msg, msgStr } =
|
16
|
+
const { msg, msgStr } = useI18n({ kcContext });
|
18
17
|
|
19
18
|
return (
|
20
|
-
<Template {
|
19
|
+
<Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("logoutConfirmTitle")}>
|
21
20
|
<div id="kc-logout-confirm" className="content-area">
|
22
21
|
<p className="instruction">{msg("logoutConfirmHeader")}</p>
|
23
22
|
<form className="form-actions" action={url.logoutConfirmAction} method="POST">
|
24
23
|
<input type="hidden" name="session_code" value={logoutConfirm.code} />
|
25
|
-
<div className={
|
24
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
26
25
|
<div id="kc-form-options">
|
27
|
-
<div className={
|
26
|
+
<div className={kcClsx("kcFormOptionsWrapperClass")}></div>
|
28
27
|
</div>
|
29
|
-
<div id="kc-form-buttons" className={
|
28
|
+
<div id="kc-form-buttons" className={kcClsx("kcFormGroupClass")}>
|
30
29
|
<input
|
31
30
|
tabIndex={4}
|
32
|
-
className={
|
33
|
-
getClassName("kcButtonClass"),
|
34
|
-
getClassName("kcButtonPrimaryClass"),
|
35
|
-
getClassName("kcButtonBlockClass"),
|
36
|
-
getClassName("kcButtonLargeClass")
|
37
|
-
)}
|
31
|
+
className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass")}
|
38
32
|
name="confirmLogout"
|
39
33
|
id="kc-logout"
|
40
34
|
type="submit"
|
@@ -1,12 +1,10 @@
|
|
1
|
-
import type { I18n } from "keycloakify/login/i18n";
|
2
1
|
import { type TemplateProps, type ClassKey } from "keycloakify/login/TemplateProps";
|
3
2
|
import type { LazyOrNot } from "keycloakify/tools/LazyOrNot";
|
4
3
|
import type { KcContext } from "keycloakify/account/KcContext";
|
5
4
|
|
6
|
-
export type PageProps<NarowedKcContext = KcContext
|
7
|
-
Template: LazyOrNot<(props: TemplateProps<any
|
5
|
+
export type PageProps<NarowedKcContext = KcContext> = {
|
6
|
+
Template: LazyOrNot<(props: TemplateProps<any>) => JSX.Element | null>;
|
8
7
|
kcContext: NarowedKcContext;
|
9
|
-
i18n: I18nExtended;
|
10
8
|
doUseDefaultCss: boolean;
|
11
9
|
classes?: Partial<Record<ClassKey, string>>;
|
12
10
|
};
|
@@ -1,77 +1,56 @@
|
|
1
1
|
import { useState } from "react";
|
2
|
-
import { clsx } from "keycloakify/tools/clsx";
|
3
2
|
import { Markdown } from "keycloakify/tools/Markdown";
|
4
3
|
import type { LazyOrNot } from "keycloakify/tools/LazyOrNot";
|
5
4
|
import { useTermsMarkdown } from "keycloakify/login/lib/useDownloadTerms";
|
6
|
-
import {
|
5
|
+
import { getKcClsx, type KcClsx } from "keycloakify/login/lib/kcClsx";
|
7
6
|
import type { UserProfileFormFieldsProps } from "keycloakify/login/UserProfileFormFields";
|
8
7
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
9
8
|
import type { KcContext } from "../KcContext";
|
10
|
-
import type
|
9
|
+
import { useI18n, type I18n } from "../i18n";
|
11
10
|
|
12
|
-
type RegisterProps = PageProps<Extract<KcContext, { pageId: "register.ftl" }
|
11
|
+
type RegisterProps = PageProps<Extract<KcContext, { pageId: "register.ftl" }>> & {
|
13
12
|
UserProfileFormFields: LazyOrNot<(props: UserProfileFormFieldsProps) => JSX.Element>;
|
14
13
|
};
|
15
14
|
|
16
15
|
export default function Register(props: RegisterProps) {
|
17
|
-
const { kcContext,
|
16
|
+
const { kcContext, doUseDefaultCss, Template, classes, UserProfileFormFields } = props;
|
18
17
|
|
19
|
-
const {
|
18
|
+
const { kcClsx } = getKcClsx({
|
20
19
|
doUseDefaultCss,
|
21
20
|
classes
|
22
21
|
});
|
23
22
|
|
24
23
|
const { url, messagesPerField, recaptchaRequired, recaptchaSiteKey, termsAcceptanceRequired } = kcContext;
|
25
24
|
|
25
|
+
const i18n = useI18n({ kcContext });
|
26
26
|
const { msg, msgStr } = i18n;
|
27
27
|
|
28
28
|
const [isFormSubmittable, setIsFormSubmittable] = useState(false);
|
29
29
|
|
30
30
|
return (
|
31
|
-
<Template {
|
32
|
-
<form id="kc-register-form" className={
|
33
|
-
<UserProfileFormFields
|
34
|
-
|
35
|
-
kcContext,
|
36
|
-
i18n,
|
37
|
-
getClassName,
|
38
|
-
messagesPerField
|
39
|
-
}}
|
40
|
-
onIsFormSubmittableValueChange={setIsFormSubmittable}
|
41
|
-
/>
|
42
|
-
{termsAcceptanceRequired && (
|
43
|
-
<TermsAcceptance
|
44
|
-
{...{
|
45
|
-
i18n,
|
46
|
-
getClassName,
|
47
|
-
messagesPerField
|
48
|
-
}}
|
49
|
-
/>
|
50
|
-
)}
|
31
|
+
<Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("registerTitle")} displayRequiredFields>
|
32
|
+
<form id="kc-register-form" className={kcClsx("kcFormClass")} action={url.registrationAction} method="post">
|
33
|
+
<UserProfileFormFields kcContext={kcContext} kcClsx={kcClsx} onIsFormSubmittableValueChange={setIsFormSubmittable} />
|
34
|
+
{termsAcceptanceRequired && <TermsAcceptance i18n={i18n} kcClsx={kcClsx} messagesPerField={messagesPerField} />}
|
51
35
|
{recaptchaRequired && (
|
52
36
|
<div className="form-group">
|
53
|
-
<div className={
|
37
|
+
<div className={kcClsx("kcInputWrapperClass")}>
|
54
38
|
<div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey}></div>
|
55
39
|
</div>
|
56
40
|
</div>
|
57
41
|
)}
|
58
|
-
<div className={
|
59
|
-
<div id="kc-form-options" className={
|
60
|
-
<div className={
|
42
|
+
<div className={kcClsx("kcFormGroupClass")}>
|
43
|
+
<div id="kc-form-options" className={kcClsx("kcFormOptionsClass")}>
|
44
|
+
<div className={kcClsx("kcFormOptionsWrapperClass")}>
|
61
45
|
<span>
|
62
46
|
<a href={url.loginUrl}>{msg("backToLogin")}</a>
|
63
47
|
</span>
|
64
48
|
</div>
|
65
49
|
</div>
|
66
|
-
<div id="kc-form-buttons" className={
|
50
|
+
<div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
|
67
51
|
<input
|
68
52
|
disabled={!isFormSubmittable}
|
69
|
-
className={
|
70
|
-
getClassName("kcButtonClass"),
|
71
|
-
getClassName("kcButtonPrimaryClass"),
|
72
|
-
getClassName("kcButtonBlockClass"),
|
73
|
-
getClassName("kcButtonLargeClass")
|
74
|
-
)}
|
53
|
+
className={kcClsx("kcButtonClass", "kcButtonPrimaryClass", "kcButtonBlockClass", "kcButtonLargeClass")}
|
75
54
|
type="submit"
|
76
55
|
value={msgStr("doRegister")}
|
77
56
|
/>
|
@@ -82,12 +61,8 @@ export default function Register(props: RegisterProps) {
|
|
82
61
|
);
|
83
62
|
}
|
84
63
|
|
85
|
-
function TermsAcceptance(props: {
|
86
|
-
i18n
|
87
|
-
getClassName: ReturnType<typeof useGetClassName>["getClassName"];
|
88
|
-
messagesPerField: Pick<KcContext["messagesPerField"], "existsError" | "get">;
|
89
|
-
}) {
|
90
|
-
const { i18n, getClassName, messagesPerField } = props;
|
64
|
+
function TermsAcceptance(props: { i18n: I18n; kcClsx: KcClsx; messagesPerField: Pick<KcContext["messagesPerField"], "existsError" | "get"> }) {
|
65
|
+
const { i18n, kcClsx, messagesPerField } = props;
|
91
66
|
|
92
67
|
const { msg } = i18n;
|
93
68
|
|
@@ -101,7 +76,7 @@ function TermsAcceptance(props: {
|
|
101
76
|
return (
|
102
77
|
<>
|
103
78
|
<div className="form-group">
|
104
|
-
<div className={
|
79
|
+
<div className={kcClsx("kcInputWrapperClass")}>
|
105
80
|
{msg("termsTitle")}
|
106
81
|
<div id="kc-registration-terms-text">
|
107
82
|
<Markdown>{termsMarkdown}</Markdown>
|
@@ -109,21 +84,21 @@ function TermsAcceptance(props: {
|
|
109
84
|
</div>
|
110
85
|
</div>
|
111
86
|
<div className="form-group">
|
112
|
-
<div className={
|
87
|
+
<div className={kcClsx("kcLabelWrapperClass")}>
|
113
88
|
<input
|
114
89
|
type="checkbox"
|
115
90
|
id="termsAccepted"
|
116
91
|
name="termsAccepted"
|
117
|
-
className={
|
92
|
+
className={kcClsx("kcCheckboxInputClass")}
|
118
93
|
aria-invalid={messagesPerField.existsError("termsAccepted")}
|
119
94
|
/>
|
120
|
-
<label htmlFor="termsAccepted" className={
|
95
|
+
<label htmlFor="termsAccepted" className={kcClsx("kcLabelClass")}>
|
121
96
|
{msg("acceptTerms")}
|
122
97
|
</label>
|
123
98
|
</div>
|
124
99
|
{messagesPerField.existsError("termsAccepted") && (
|
125
|
-
<div className={
|
126
|
-
<span id="input-error-terms-accepted" className={
|
100
|
+
<div className={kcClsx("kcLabelWrapperClass")}>
|
101
|
+
<span id="input-error-terms-accepted" className={kcClsx("kcInputErrorMessageClass")} aria-live="polite">
|
127
102
|
{messagesPerField.get("termsAccepted")}
|
128
103
|
</span>
|
129
104
|
</div>
|
@@ -1,12 +1,12 @@
|
|
1
1
|
import { useEffect, useState } from "react";
|
2
2
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
3
3
|
import type { KcContext } from "../KcContext";
|
4
|
-
import
|
4
|
+
import { useI18n } from "../i18n";
|
5
5
|
|
6
|
-
export default function SamlPostForm(props: PageProps<Extract<KcContext, { pageId: "saml-post-form.ftl" }
|
7
|
-
const { kcContext,
|
6
|
+
export default function SamlPostForm(props: PageProps<Extract<KcContext, { pageId: "saml-post-form.ftl" }>>) {
|
7
|
+
const { kcContext, doUseDefaultCss, Template, classes } = props;
|
8
8
|
|
9
|
-
const { msgStr, msg } =
|
9
|
+
const { msgStr, msg } = useI18n({ kcContext });
|
10
10
|
|
11
11
|
const { samlPost } = kcContext;
|
12
12
|
|
@@ -26,7 +26,7 @@ export default function SamlPostForm(props: PageProps<Extract<KcContext, { pageI
|
|
26
26
|
htmlFormElement.submit();
|
27
27
|
}, [htmlFormElement]);
|
28
28
|
return (
|
29
|
-
<Template {
|
29
|
+
<Template kcContext={kcContext} doUseDefaultCss={doUseDefaultCss} classes={classes} headerNode={msg("saml.post-form.title")}>
|
30
30
|
<p>{msg("saml.post-form.message")}</p>
|
31
31
|
<form name="saml-post-binding" method="post" action={samlPost.url} ref={setHtmlFormElement}>
|
32
32
|
{samlPost.SAMLRequest && <input type="hidden" name="SAMLRequest" value={samlPost.SAMLRequest} />}
|
@@ -1,45 +1,43 @@
|
|
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 SelectAuthenticator(props: PageProps<Extract<KcContext, { pageId: "select-authenticator.ftl" }
|
8
|
-
const { kcContext,
|
6
|
+
export default function SelectAuthenticator(props: PageProps<Extract<KcContext, { pageId: "select-authenticator.ftl" }>>) {
|
7
|
+
const { kcContext, doUseDefaultCss, Template, classes } = props;
|
9
8
|
const { url, auth } = kcContext;
|
10
9
|
|
11
|
-
const {
|
12
|
-
const { msg } =
|
10
|
+
const { kcClsx } = getKcClsx({ doUseDefaultCss, classes });
|
11
|
+
const { msg } = useI18n({ kcContext });
|
13
12
|
|
14
13
|
return (
|
15
|
-
<Template
|
16
|
-
|
17
|
-
|
14
|
+
<Template
|
15
|
+
kcContext={kcContext}
|
16
|
+
doUseDefaultCss={doUseDefaultCss}
|
17
|
+
classes={classes}
|
18
|
+
displayInfo={false}
|
19
|
+
headerNode={msg("loginChooseAuthenticator")}
|
20
|
+
>
|
21
|
+
<form id="kc-select-credential-form" className={kcClsx("kcFormClass")} action={url.loginAction} method="post">
|
22
|
+
<div className={kcClsx("kcSelectAuthListClass")}>
|
18
23
|
{auth.authenticationSelections.map((authenticationSelection, i) => (
|
19
24
|
<button
|
20
25
|
key={i}
|
21
|
-
className={
|
26
|
+
className={kcClsx("kcSelectAuthListItemClass")}
|
22
27
|
type="submit"
|
23
28
|
name="authenticationExecution"
|
24
29
|
value={authenticationSelection.authExecId}
|
25
30
|
>
|
26
|
-
<div className={
|
27
|
-
<i
|
28
|
-
className={clsx(
|
29
|
-
// @ts-expect-error: iconCssClass is a string and not a class key
|
30
|
-
// however getClassName gracefully handles this case at runtime
|
31
|
-
getClassName(authenticationSelection.iconCssClass),
|
32
|
-
getClassName("kcSelectAuthListItemIconPropertyClass")
|
33
|
-
)}
|
34
|
-
/>
|
31
|
+
<div className={kcClsx("kcSelectAuthListItemIconClass")}>
|
32
|
+
<i className={kcClsx(authenticationSelection.iconCssClass, "kcSelectAuthListItemIconPropertyClass")} />
|
35
33
|
</div>
|
36
|
-
<div className={
|
37
|
-
<div className={
|
38
|
-
<div className={
|
34
|
+
<div className={kcClsx("kcSelectAuthListItemBodyClass")}>
|
35
|
+
<div className={kcClsx("kcSelectAuthListItemHeadingClass")}>{msg(authenticationSelection.displayName)}</div>
|
36
|
+
<div className={kcClsx("kcSelectAuthListItemDescriptionClass")}>{msg(authenticationSelection.helpText)}</div>
|
39
37
|
</div>
|
40
|
-
<div className={
|
41
|
-
<div className={
|
42
|
-
<i className={
|
38
|
+
<div className={kcClsx("kcSelectAuthListItemFillClass")} />
|
39
|
+
<div className={kcClsx("kcSelectAuthListItemArrowClass")}>
|
40
|
+
<i className={kcClsx("kcSelectAuthListItemArrowIconClass")} />
|
43
41
|
</div>
|
44
42
|
</button>
|
45
43
|
))}
|