keycloakify 6.7.2 → 6.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/README.md +6 -0
  2. package/lib/components/Error.d.ts +6 -3
  3. package/lib/components/Error.js +4 -4
  4. package/lib/components/Error.js.map +1 -1
  5. package/lib/components/IdpReviewUserProfile.d.ts +6 -3
  6. package/lib/components/IdpReviewUserProfile.js +10 -10
  7. package/lib/components/IdpReviewUserProfile.js.map +1 -1
  8. package/lib/components/Info.d.ts +6 -3
  9. package/lib/components/Info.js +4 -4
  10. package/lib/components/Info.js.map +1 -1
  11. package/lib/components/KcApp.d.ts +7 -4
  12. package/lib/components/KcApp.js +25 -24
  13. package/lib/components/KcApp.js.map +1 -1
  14. package/lib/components/Login.d.ts +6 -3
  15. package/lib/components/Login.js +17 -17
  16. package/lib/components/Login.js.map +1 -1
  17. package/lib/components/LoginConfigTotp.d.ts +6 -3
  18. package/lib/components/LoginConfigTotp.js +25 -25
  19. package/lib/components/LoginConfigTotp.js.map +1 -1
  20. package/lib/components/LoginIdpLinkConfirm.d.ts +6 -3
  21. package/lib/components/LoginIdpLinkConfirm.js +7 -7
  22. package/lib/components/LoginIdpLinkConfirm.js.map +1 -1
  23. package/lib/components/LoginIdpLinkEmail.d.ts +6 -3
  24. package/lib/components/LoginIdpLinkEmail.js +4 -4
  25. package/lib/components/LoginIdpLinkEmail.js.map +1 -1
  26. package/lib/components/LoginOtp.d.ts +6 -3
  27. package/lib/components/LoginOtp.js +19 -19
  28. package/lib/components/LoginOtp.js.map +1 -1
  29. package/lib/components/LoginPageExpired.d.ts +6 -3
  30. package/lib/components/LoginPageExpired.js +4 -4
  31. package/lib/components/LoginPageExpired.js.map +1 -1
  32. package/lib/components/LoginPassword.d.ts +6 -3
  33. package/lib/components/LoginPassword.js +12 -12
  34. package/lib/components/LoginPassword.js.map +1 -1
  35. package/lib/components/LoginResetPassword.d.ts +6 -3
  36. package/lib/components/LoginResetPassword.js +14 -14
  37. package/lib/components/LoginResetPassword.js.map +1 -1
  38. package/lib/components/LoginUpdatePassword.d.ts +6 -3
  39. package/lib/components/LoginUpdatePassword.js +20 -20
  40. package/lib/components/LoginUpdatePassword.js.map +1 -1
  41. package/lib/components/LoginUpdateProfile.d.ts +6 -3
  42. package/lib/components/LoginUpdateProfile.js +31 -31
  43. package/lib/components/LoginUpdateProfile.js.map +1 -1
  44. package/lib/components/LoginUsername.d.ts +6 -3
  45. package/lib/components/LoginUsername.js +13 -13
  46. package/lib/components/LoginUsername.js.map +1 -1
  47. package/lib/components/LoginVerifyEmail.d.ts +6 -3
  48. package/lib/components/LoginVerifyEmail.js +4 -4
  49. package/lib/components/LoginVerifyEmail.js.map +1 -1
  50. package/lib/components/LogoutConfirm.d.ts +6 -3
  51. package/lib/components/LogoutConfirm.js +8 -8
  52. package/lib/components/LogoutConfirm.js.map +1 -1
  53. package/lib/components/Register.d.ts +6 -3
  54. package/lib/components/Register.js +41 -41
  55. package/lib/components/Register.js.map +1 -1
  56. package/lib/components/RegisterUserProfile.d.ts +6 -3
  57. package/lib/components/RegisterUserProfile.js +12 -12
  58. package/lib/components/RegisterUserProfile.js.map +1 -1
  59. package/lib/components/Terms.d.ts +6 -3
  60. package/lib/components/Terms.js +6 -6
  61. package/lib/components/Terms.js.map +1 -1
  62. package/lib/components/UpdateUserProfile.d.ts +6 -3
  63. package/lib/components/UpdateUserProfile.js +11 -11
  64. package/lib/components/UpdateUserProfile.js.map +1 -1
  65. package/lib/components/WebauthnAuthenticate.d.ts +6 -3
  66. package/lib/components/WebauthnAuthenticate.js +18 -18
  67. package/lib/components/WebauthnAuthenticate.js.map +1 -1
  68. package/lib/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +3 -3
  70. package/src/lib/components/Error.tsx +34 -31
  71. package/src/lib/components/IdpReviewUserProfile.tsx +50 -47
  72. package/src/lib/components/Info.tsx +49 -46
  73. package/src/lib/components/KcApp.tsx +74 -69
  74. package/src/lib/components/Login.tsx +178 -175
  75. package/src/lib/components/LoginConfigTotp.tsx +163 -160
  76. package/src/lib/components/LoginIdpLinkConfirm.tsx +56 -43
  77. package/src/lib/components/LoginIdpLinkEmail.tsx +34 -31
  78. package/src/lib/components/LoginOtp.tsx +86 -83
  79. package/src/lib/components/LoginPageExpired.tsx +38 -35
  80. package/src/lib/components/LoginPassword.tsx +79 -76
  81. package/src/lib/components/LoginResetPassword.tsx +67 -64
  82. package/src/lib/components/LoginUpdatePassword.tsx +105 -102
  83. package/src/lib/components/LoginUpdateProfile.tsx +108 -105
  84. package/src/lib/components/LoginUsername.tsx +145 -142
  85. package/src/lib/components/LoginVerifyEmail.tsx +34 -31
  86. package/src/lib/components/LogoutConfirm.tsx +57 -54
  87. package/src/lib/components/Register.tsx +137 -134
  88. package/src/lib/components/RegisterUserProfile.tsx +63 -60
  89. package/src/lib/components/Terms.tsx +56 -52
  90. package/src/lib/components/UpdateUserProfile.tsx +61 -58
  91. package/src/lib/components/WebauthnAuthenticate.tsx +179 -178
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keycloakify",
3
- "version": "6.7.2",
3
+ "version": "6.8.1",
4
4
  "description": "Keycloak theme generator for Reacts app",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1290,12 +1290,12 @@
1290
1290
  "@octokit/rest": "^18.12.0",
1291
1291
  "cheerio": "^1.0.0-rc.5",
1292
1292
  "cli-select": "^1.1.2",
1293
- "evt": "^2.4.5",
1293
+ "evt": "^2.4.6",
1294
1294
  "memoizee": "^0.4.15",
1295
1295
  "minimal-polyfills": "^2.2.2",
1296
1296
  "minimist": "^1.2.6",
1297
1297
  "path-browserify": "^1.0.1",
1298
- "powerhooks": "^0.20.22",
1298
+ "powerhooks": "^0.20.23",
1299
1299
  "react-markdown": "^5.0.3",
1300
1300
  "rfc4648": "^1.5.2",
1301
1301
  "scripting-tools": "^0.19.13",
@@ -1,40 +1,43 @@
1
1
  import React, { memo } from "react";
2
- import Template from "./Template";
2
+ import DefaultTemplate from "./Template";
3
+ import type { TemplateProps } from "./Template";
3
4
  import type { KcProps } from "./KcProps";
4
5
  import type { KcContextBase } from "../getKcContext/KcContextBase";
5
6
  import type { I18n } from "../i18n";
6
7
 
7
- const Error = memo(
8
- ({
9
- kcContext,
10
- i18n,
11
- doFetchDefaultThemeResources = true,
12
- ...props
13
- }: { kcContext: KcContextBase.Error; i18n: I18n; doFetchDefaultThemeResources?: boolean } & KcProps) => {
14
- const { message, client } = kcContext;
8
+ export type ErrorProps = KcProps & {
9
+ kcContext: KcContextBase.Error;
10
+ i18n: I18n;
11
+ doFetchDefaultThemeResources?: boolean;
12
+ Template?: (props: TemplateProps) => JSX.Element | null;
13
+ };
15
14
 
16
- const { msg } = i18n;
15
+ const Error = memo((props: ErrorProps) => {
16
+ const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
17
17
 
18
- return (
19
- <Template
20
- {...{ kcContext, i18n, doFetchDefaultThemeResources, ...props }}
21
- displayMessage={false}
22
- headerNode={msg("errorTitle")}
23
- formNode={
24
- <div id="kc-error-message">
25
- <p className="instruction">{message.summary}</p>
26
- {client !== undefined && client.baseUrl !== undefined && (
27
- <p>
28
- <a id="backToApplication" href={client.baseUrl}>
29
- {msg("backToApplication")}
30
- </a>
31
- </p>
32
- )}
33
- </div>
34
- }
35
- />
36
- );
37
- }
38
- );
18
+ const { message, client } = kcContext;
19
+
20
+ const { msg } = i18n;
21
+
22
+ return (
23
+ <Template
24
+ {...{ kcContext, i18n, doFetchDefaultThemeResources, ...kcProps }}
25
+ displayMessage={false}
26
+ headerNode={msg("errorTitle")}
27
+ formNode={
28
+ <div id="kc-error-message">
29
+ <p className="instruction">{message.summary}</p>
30
+ {client !== undefined && client.baseUrl !== undefined && (
31
+ <p>
32
+ <a id="backToApplication" href={client.baseUrl}>
33
+ {msg("backToApplication")}
34
+ </a>
35
+ </p>
36
+ )}
37
+ </div>
38
+ }
39
+ />
40
+ );
41
+ });
39
42
 
40
43
  export default Error;
@@ -1,57 +1,60 @@
1
1
  import React, { useState, memo } from "react";
2
- import Template from "./Template";
2
+ import DefaultTemplate from "./Template";
3
+ import type { TemplateProps } from "./Template";
3
4
  import type { KcProps } from "./KcProps";
4
5
  import type { KcContextBase } from "../getKcContext/KcContextBase";
5
6
  import { useCssAndCx } from "../tools/useCssAndCx";
6
7
  import type { I18n } from "../i18n";
7
8
  import { UserProfileFormFields } from "./shared/UserProfileCommons";
8
9
 
9
- const IdpReviewUserProfile = memo(
10
- ({
11
- kcContext,
12
- i18n,
13
- doFetchDefaultThemeResources = true,
14
- ...props
15
- }: { kcContext: KcContextBase.IdpReviewUserProfile; i18n: I18n; doFetchDefaultThemeResources?: boolean } & KcProps) => {
16
- const { cx } = useCssAndCx();
17
-
18
- const { msg, msgStr } = i18n;
19
-
20
- const { url } = kcContext;
21
-
22
- const [isFomSubmittable, setIsFomSubmittable] = useState(false);
23
-
24
- return (
25
- <Template
26
- {...{ kcContext, i18n, doFetchDefaultThemeResources, ...props }}
27
- headerNode={msg("loginIdpReviewProfileTitle")}
28
- formNode={
29
- <form id="kc-idp-review-profile-form" className={cx(props.kcFormClass)} action={url.loginAction} method="post">
30
- <UserProfileFormFields kcContext={kcContext} onIsFormSubmittableValueChange={setIsFomSubmittable} i18n={i18n} {...props} />
31
-
32
- <div className={cx(props.kcFormGroupClass)}>
33
- <div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
34
- <div className={cx(props.kcFormOptionsWrapperClass)} />
35
- </div>
36
- <div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
37
- <input
38
- className={cx(
39
- props.kcButtonClass,
40
- props.kcButtonPrimaryClass,
41
- props.kcButtonBlockClass,
42
- props.kcButtonLargeClass
43
- )}
44
- type="submit"
45
- value={msgStr("doSubmit")}
46
- disabled={!isFomSubmittable}
47
- />
48
- </div>
10
+ export type IdpReviewUserProfileProps = KcProps & {
11
+ kcContext: KcContextBase.IdpReviewUserProfile;
12
+ i18n: I18n;
13
+ doFetchDefaultThemeResources?: boolean;
14
+ Template?: (props: TemplateProps) => JSX.Element | null;
15
+ };
16
+
17
+ const IdpReviewUserProfile = memo((props: IdpReviewUserProfileProps) => {
18
+ const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
19
+
20
+ const { cx } = useCssAndCx();
21
+
22
+ const { msg, msgStr } = i18n;
23
+
24
+ const { url } = kcContext;
25
+
26
+ const [isFomSubmittable, setIsFomSubmittable] = useState(false);
27
+
28
+ return (
29
+ <Template
30
+ {...{ kcContext, i18n, doFetchDefaultThemeResources, ...kcProps }}
31
+ headerNode={msg("loginIdpReviewProfileTitle")}
32
+ formNode={
33
+ <form id="kc-idp-review-profile-form" className={cx(kcProps.kcFormClass)} action={url.loginAction} method="post">
34
+ <UserProfileFormFields kcContext={kcContext} onIsFormSubmittableValueChange={setIsFomSubmittable} i18n={i18n} {...kcProps} />
35
+
36
+ <div className={cx(kcProps.kcFormGroupClass)}>
37
+ <div id="kc-form-options" className={cx(kcProps.kcFormOptionsClass)}>
38
+ <div className={cx(kcProps.kcFormOptionsWrapperClass)} />
39
+ </div>
40
+ <div id="kc-form-buttons" className={cx(kcProps.kcFormButtonsClass)}>
41
+ <input
42
+ className={cx(
43
+ kcProps.kcButtonClass,
44
+ kcProps.kcButtonPrimaryClass,
45
+ kcProps.kcButtonBlockClass,
46
+ kcProps.kcButtonLargeClass
47
+ )}
48
+ type="submit"
49
+ value={msgStr("doSubmit")}
50
+ disabled={!isFomSubmittable}
51
+ />
49
52
  </div>
50
- </form>
51
- }
52
- />
53
- );
54
- }
55
- );
53
+ </div>
54
+ </form>
55
+ }
56
+ />
57
+ );
58
+ });
56
59
 
57
60
  export default IdpReviewUserProfile;
@@ -1,57 +1,60 @@
1
1
  import React, { memo } from "react";
2
- import Template from "./Template";
2
+ import DefaultTemplate from "./Template";
3
+ import type { TemplateProps } from "./Template";
3
4
  import type { KcProps } from "./KcProps";
4
5
  import { assert } from "../tools/assert";
5
6
  import type { KcContextBase } from "../getKcContext/KcContextBase";
6
7
  import type { I18n } from "../i18n";
7
8
 
8
- const Info = memo(
9
- ({
10
- kcContext,
11
- i18n,
12
- doFetchDefaultThemeResources = true,
13
- ...props
14
- }: { kcContext: KcContextBase.Info; i18n: I18n; doFetchDefaultThemeResources?: boolean } & KcProps) => {
15
- const { msgStr, msg } = i18n;
16
-
17
- assert(kcContext.message !== undefined);
18
-
19
- const { messageHeader, message, requiredActions, skipLink, pageRedirectUri, actionUri, client } = kcContext;
20
-
21
- return (
22
- <Template
23
- {...{ kcContext, i18n, doFetchDefaultThemeResources, ...props }}
24
- displayMessage={false}
25
- headerNode={messageHeader !== undefined ? <>{messageHeader}</> : <>{message.summary}</>}
26
- formNode={
27
- <div id="kc-info-message">
28
- <p className="instruction">
29
- {message.summary}
30
-
31
- {requiredActions !== undefined && (
32
- <b>{requiredActions.map(requiredAction => msgStr(`requiredAction.${requiredAction}` as const)).join(",")}</b>
33
- )}
9
+ export type InfoProps = KcProps & {
10
+ kcContext: KcContextBase.Info;
11
+ i18n: I18n;
12
+ doFetchDefaultThemeResources?: boolean;
13
+ Template?: (props: TemplateProps) => JSX.Element | null;
14
+ };
15
+
16
+ const Info = memo((props: InfoProps) => {
17
+ const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
18
+
19
+ const { msgStr, msg } = i18n;
20
+
21
+ assert(kcContext.message !== undefined);
22
+
23
+ const { messageHeader, message, requiredActions, skipLink, pageRedirectUri, actionUri, client } = kcContext;
24
+
25
+ return (
26
+ <Template
27
+ {...{ kcContext, i18n, doFetchDefaultThemeResources, ...kcProps }}
28
+ displayMessage={false}
29
+ headerNode={messageHeader !== undefined ? <>{messageHeader}</> : <>{message.summary}</>}
30
+ formNode={
31
+ <div id="kc-info-message">
32
+ <p className="instruction">
33
+ {message.summary}
34
+
35
+ {requiredActions !== undefined && (
36
+ <b>{requiredActions.map(requiredAction => msgStr(`requiredAction.${requiredAction}` as const)).join(",")}</b>
37
+ )}
38
+ </p>
39
+ {!skipLink && pageRedirectUri !== undefined ? (
40
+ <p>
41
+ <a href={pageRedirectUri}>{msg("backToApplication")}</a>
34
42
  </p>
35
- {!skipLink && pageRedirectUri !== undefined ? (
36
- <p>
37
- <a href={pageRedirectUri}>{msg("backToApplication")}</a>
38
- </p>
39
- ) : actionUri !== undefined ? (
43
+ ) : actionUri !== undefined ? (
44
+ <p>
45
+ <a href={actionUri}>{msg("proceedWithAction")}</a>
46
+ </p>
47
+ ) : (
48
+ client.baseUrl !== undefined && (
40
49
  <p>
41
- <a href={actionUri}>{msg("proceedWithAction")}</a>
50
+ <a href={client.baseUrl}>{msg("backToApplication")}</a>
42
51
  </p>
43
- ) : (
44
- client.baseUrl !== undefined && (
45
- <p>
46
- <a href={client.baseUrl}>{msg("backToApplication")}</a>
47
- </p>
48
- )
49
- )}
50
- </div>
51
- }
52
- />
53
- );
54
- }
55
- );
52
+ )
53
+ )}
54
+ </div>
55
+ }
56
+ />
57
+ );
58
+ });
56
59
 
57
60
  export default Info;
@@ -3,6 +3,8 @@ import type { KcContextBase } from "../getKcContext/KcContextBase";
3
3
  import type { KcProps } from "./KcProps";
4
4
  import { __unsafe_useI18n as useI18n } from "../i18n";
5
5
  import type { I18n } from "../i18n";
6
+ import DefaultTemplate from "./Template";
7
+ import type { TemplateProps } from "./Template";
6
8
 
7
9
  const Login = lazy(() => import("./Login"));
8
10
  const Register = lazy(() => import("./Register"));
@@ -26,79 +28,82 @@ const LogoutConfirm = lazy(() => import("./LogoutConfirm"));
26
28
  const UpdateUserProfile = lazy(() => import("./UpdateUserProfile"));
27
29
  const IdpReviewUserProfile = lazy(() => import("./IdpReviewUserProfile"));
28
30
 
29
- const KcApp = memo(
30
- ({
31
- kcContext,
32
- i18n: userProvidedI18n,
33
- ...kcProps
34
- }: { kcContext: KcContextBase; i18n?: I18n; doFetchDefaultThemeResources?: boolean } & KcProps) => {
35
- const i18n = (function useClosure() {
36
- const i18n = useI18n({
37
- kcContext,
38
- "extraMessages": {},
39
- "doSkip": userProvidedI18n !== undefined
40
- });
31
+ export type KcAppProps = KcProps & {
32
+ kcContext: KcContextBase;
33
+ i18n?: I18n;
34
+ doFetchDefaultThemeResources?: boolean;
35
+ Template: (props: TemplateProps) => JSX.Element | null;
36
+ };
41
37
 
42
- return userProvidedI18n ?? i18n;
43
- })();
38
+ const KcApp = memo((props_: KcAppProps) => {
39
+ const { kcContext, i18n: userProvidedI18n, Template = DefaultTemplate, ...kcProps } = props_;
44
40
 
45
- if (i18n === null) {
46
- return null;
47
- }
41
+ const i18n = (function useClosure() {
42
+ const i18n = useI18n({
43
+ kcContext,
44
+ "extraMessages": {},
45
+ "doSkip": userProvidedI18n !== undefined
46
+ });
48
47
 
49
- const props = { i18n, ...kcProps };
48
+ return userProvidedI18n ?? i18n;
49
+ })();
50
50
 
51
- return (
52
- <Suspense>
53
- {(() => {
54
- switch (kcContext.pageId) {
55
- case "login.ftl":
56
- return <Login {...{ kcContext, ...props }} />;
57
- case "register.ftl":
58
- return <Register {...{ kcContext, ...props }} />;
59
- case "register-user-profile.ftl":
60
- return <RegisterUserProfile {...{ kcContext, ...props }} />;
61
- case "info.ftl":
62
- return <Info {...{ kcContext, ...props }} />;
63
- case "error.ftl":
64
- return <Error {...{ kcContext, ...props }} />;
65
- case "login-reset-password.ftl":
66
- return <LoginResetPassword {...{ kcContext, ...props }} />;
67
- case "login-verify-email.ftl":
68
- return <LoginVerifyEmail {...{ kcContext, ...props }} />;
69
- case "terms.ftl":
70
- return <Terms {...{ kcContext, ...props }} />;
71
- case "login-otp.ftl":
72
- return <LoginOtp {...{ kcContext, ...props }} />;
73
- case "login-username.ftl":
74
- return <LoginUsername {...{ kcContext, ...props }} />;
75
- case "login-password.ftl":
76
- return <LoginPassword {...{ kcContext, ...props }} />;
77
- case "webauthn-authenticate.ftl":
78
- return <WebauthnAuthenticate {...{ kcContext, ...props }} />;
79
- case "login-update-password.ftl":
80
- return <LoginUpdatePassword {...{ kcContext, ...props }} />;
81
- case "login-update-profile.ftl":
82
- return <LoginUpdateProfile {...{ kcContext, ...props }} />;
83
- case "login-idp-link-confirm.ftl":
84
- return <LoginIdpLinkConfirm {...{ kcContext, ...props }} />;
85
- case "login-idp-link-email.ftl":
86
- return <LoginIdpLinkEmail {...{ kcContext, ...props }} />;
87
- case "login-page-expired.ftl":
88
- return <LoginPageExpired {...{ kcContext, ...props }} />;
89
- case "login-config-totp.ftl":
90
- return <LoginConfigTotp {...{ kcContext, ...props }} />;
91
- case "logout-confirm.ftl":
92
- return <LogoutConfirm {...{ kcContext, ...props }} />;
93
- case "update-user-profile.ftl":
94
- return <UpdateUserProfile {...{ kcContext, ...props }} />;
95
- case "idp-review-user-profile.ftl":
96
- return <IdpReviewUserProfile {...{ kcContext, ...props }} />;
97
- }
98
- })()}
99
- </Suspense>
100
- );
51
+ if (i18n === null) {
52
+ return null;
101
53
  }
102
- );
54
+
55
+ const commonProps = { i18n, Template, ...kcProps };
56
+
57
+ return (
58
+ <Suspense>
59
+ {(() => {
60
+ switch (kcContext.pageId) {
61
+ case "login.ftl":
62
+ return <Login {...{ kcContext, ...commonProps }} />;
63
+ case "register.ftl":
64
+ return <Register {...{ kcContext, ...commonProps }} />;
65
+ case "register-user-profile.ftl":
66
+ return <RegisterUserProfile {...{ kcContext, ...commonProps }} />;
67
+ case "info.ftl":
68
+ return <Info {...{ kcContext, ...commonProps }} />;
69
+ case "error.ftl":
70
+ return <Error {...{ kcContext, ...commonProps }} />;
71
+ case "login-reset-password.ftl":
72
+ return <LoginResetPassword {...{ kcContext, ...commonProps }} />;
73
+ case "login-verify-email.ftl":
74
+ return <LoginVerifyEmail {...{ kcContext, ...commonProps }} />;
75
+ case "terms.ftl":
76
+ return <Terms {...{ kcContext, ...commonProps }} />;
77
+ case "login-otp.ftl":
78
+ return <LoginOtp {...{ kcContext, ...commonProps }} />;
79
+ case "login-username.ftl":
80
+ return <LoginUsername {...{ kcContext, ...commonProps }} />;
81
+ case "login-password.ftl":
82
+ return <LoginPassword {...{ kcContext, ...commonProps }} />;
83
+ case "webauthn-authenticate.ftl":
84
+ return <WebauthnAuthenticate {...{ kcContext, ...commonProps }} />;
85
+ case "login-update-password.ftl":
86
+ return <LoginUpdatePassword {...{ kcContext, ...commonProps }} />;
87
+ case "login-update-profile.ftl":
88
+ return <LoginUpdateProfile {...{ kcContext, ...commonProps }} />;
89
+ case "login-idp-link-confirm.ftl":
90
+ return <LoginIdpLinkConfirm {...{ kcContext, ...commonProps }} />;
91
+ case "login-idp-link-email.ftl":
92
+ return <LoginIdpLinkEmail {...{ kcContext, ...commonProps }} />;
93
+ case "login-page-expired.ftl":
94
+ return <LoginPageExpired {...{ kcContext, ...commonProps }} />;
95
+ case "login-config-totp.ftl":
96
+ return <LoginConfigTotp {...{ kcContext, ...commonProps }} />;
97
+ case "logout-confirm.ftl":
98
+ return <LogoutConfirm {...{ kcContext, ...commonProps }} />;
99
+ case "update-user-profile.ftl":
100
+ return <UpdateUserProfile {...{ kcContext, ...commonProps }} />;
101
+ case "idp-review-user-profile.ftl":
102
+ return <IdpReviewUserProfile {...{ kcContext, ...commonProps }} />;
103
+ }
104
+ })()}
105
+ </Suspense>
106
+ );
107
+ });
103
108
 
104
109
  export default KcApp;