keycloakify 6.3.6 → 6.4.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 (78) hide show
  1. package/README.md +6 -0
  2. package/lib/components/Error.d.ts +2 -1
  3. package/lib/components/Error.js +2 -2
  4. package/lib/components/Error.js.map +1 -1
  5. package/lib/components/IdpReviewUserProfile.d.ts +2 -1
  6. package/lib/components/IdpReviewUserProfile.js +2 -2
  7. package/lib/components/IdpReviewUserProfile.js.map +1 -1
  8. package/lib/components/Info.d.ts +2 -1
  9. package/lib/components/Info.js +2 -2
  10. package/lib/components/Info.js.map +1 -1
  11. package/lib/components/KcApp.d.ts +1 -0
  12. package/lib/components/KcApp.js.map +1 -1
  13. package/lib/components/Login.d.ts +2 -1
  14. package/lib/components/Login.js +2 -2
  15. package/lib/components/Login.js.map +1 -1
  16. package/lib/components/LoginConfigTotp.d.ts +2 -1
  17. package/lib/components/LoginConfigTotp.js +2 -2
  18. package/lib/components/LoginConfigTotp.js.map +1 -1
  19. package/lib/components/LoginIdpLinkConfirm.d.ts +2 -1
  20. package/lib/components/LoginIdpLinkConfirm.js +2 -2
  21. package/lib/components/LoginIdpLinkConfirm.js.map +1 -1
  22. package/lib/components/LoginIdpLinkEmail.d.ts +2 -1
  23. package/lib/components/LoginIdpLinkEmail.js +2 -2
  24. package/lib/components/LoginIdpLinkEmail.js.map +1 -1
  25. package/lib/components/LoginOtp.d.ts +2 -1
  26. package/lib/components/LoginOtp.js +2 -2
  27. package/lib/components/LoginOtp.js.map +1 -1
  28. package/lib/components/LoginPageExpired.d.ts +2 -1
  29. package/lib/components/LoginPageExpired.js +2 -2
  30. package/lib/components/LoginPageExpired.js.map +1 -1
  31. package/lib/components/LoginResetPassword.d.ts +2 -1
  32. package/lib/components/LoginResetPassword.js +2 -2
  33. package/lib/components/LoginResetPassword.js.map +1 -1
  34. package/lib/components/LoginUpdatePassword.d.ts +2 -1
  35. package/lib/components/LoginUpdatePassword.js +2 -2
  36. package/lib/components/LoginUpdatePassword.js.map +1 -1
  37. package/lib/components/LoginUpdateProfile.d.ts +2 -1
  38. package/lib/components/LoginUpdateProfile.js +2 -2
  39. package/lib/components/LoginUpdateProfile.js.map +1 -1
  40. package/lib/components/LoginVerifyEmail.d.ts +2 -1
  41. package/lib/components/LoginVerifyEmail.js +2 -2
  42. package/lib/components/LoginVerifyEmail.js.map +1 -1
  43. package/lib/components/LogoutConfirm.d.ts +2 -1
  44. package/lib/components/LogoutConfirm.js +2 -2
  45. package/lib/components/LogoutConfirm.js.map +1 -1
  46. package/lib/components/Register.d.ts +2 -1
  47. package/lib/components/Register.js +2 -2
  48. package/lib/components/Register.js.map +1 -1
  49. package/lib/components/RegisterUserProfile.d.ts +2 -1
  50. package/lib/components/RegisterUserProfile.js +2 -2
  51. package/lib/components/RegisterUserProfile.js.map +1 -1
  52. package/lib/components/Terms.d.ts +2 -1
  53. package/lib/components/Terms.js +2 -2
  54. package/lib/components/Terms.js.map +1 -1
  55. package/lib/components/UpdateUserProfile.d.ts +2 -1
  56. package/lib/components/UpdateUserProfile.js +2 -2
  57. package/lib/components/UpdateUserProfile.js.map +1 -1
  58. package/lib/tsconfig.tsbuildinfo +1 -1
  59. package/package.json +5 -5
  60. package/src/lib/components/Error.tsx +30 -24
  61. package/src/lib/components/IdpReviewUserProfile.tsx +41 -30
  62. package/src/lib/components/Info.tsx +41 -35
  63. package/src/lib/components/KcApp.tsx +64 -58
  64. package/src/lib/components/Login.tsx +174 -166
  65. package/src/lib/components/LoginConfigTotp.tsx +158 -152
  66. package/src/lib/components/LoginIdpLinkConfirm.tsx +42 -36
  67. package/src/lib/components/LoginIdpLinkEmail.tsx +30 -24
  68. package/src/lib/components/LoginOtp.tsx +75 -64
  69. package/src/lib/components/LoginPageExpired.tsx +34 -28
  70. package/src/lib/components/LoginResetPassword.tsx +63 -52
  71. package/src/lib/components/LoginUpdatePassword.tsx +101 -95
  72. package/src/lib/components/LoginUpdateProfile.tsx +103 -91
  73. package/src/lib/components/LoginVerifyEmail.tsx +30 -24
  74. package/src/lib/components/LogoutConfirm.tsx +53 -47
  75. package/src/lib/components/Register.tsx +126 -115
  76. package/src/lib/components/RegisterUserProfile.tsx +59 -48
  77. package/src/lib/components/Terms.tsx +51 -45
  78. package/src/lib/components/UpdateUserProfile.tsx +57 -51
@@ -5,154 +5,165 @@ import type { KcContextBase } from "../getKcContext/KcContextBase";
5
5
  import { useCssAndCx } from "../tools/useCssAndCx";
6
6
  import type { I18n } from "../i18n";
7
7
 
8
- const Register = memo(({ kcContext, i18n, ...props }: { kcContext: KcContextBase.Register; i18n: I18n } & KcProps) => {
9
- const { url, messagesPerField, register, realm, passwordRequired, recaptchaRequired, recaptchaSiteKey } = kcContext;
8
+ const Register = memo(
9
+ ({
10
+ kcContext,
11
+ i18n,
12
+ doFetchDefaultThemeResources = true,
13
+ ...props
14
+ }: { kcContext: KcContextBase.Register; i18n: I18n; doFetchDefaultThemeResources?: boolean } & KcProps) => {
15
+ const { url, messagesPerField, register, realm, passwordRequired, recaptchaRequired, recaptchaSiteKey } = kcContext;
10
16
 
11
- const { msg, msgStr } = i18n;
17
+ const { msg, msgStr } = i18n;
12
18
 
13
- const { cx } = useCssAndCx();
19
+ const { cx } = useCssAndCx();
14
20
 
15
- return (
16
- <Template
17
- {...{ kcContext, i18n, ...props }}
18
- doFetchDefaultThemeResources={true}
19
- headerNode={msg("registerTitle")}
20
- formNode={
21
- <form id="kc-register-form" className={cx(props.kcFormClass)} action={url.registrationAction} method="post">
22
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("firstName", props.kcFormGroupErrorClass))}>
23
- <div className={cx(props.kcLabelWrapperClass)}>
24
- <label htmlFor="firstName" className={cx(props.kcLabelClass)}>
25
- {msg("firstName")}
26
- </label>
27
- </div>
28
- <div className={cx(props.kcInputWrapperClass)}>
29
- <input
30
- type="text"
31
- id="firstName"
32
- className={cx(props.kcInputClass)}
33
- name="firstName"
34
- defaultValue={register.formData.firstName ?? ""}
35
- />
21
+ return (
22
+ <Template
23
+ {...{ kcContext, i18n, doFetchDefaultThemeResources, ...props }}
24
+ headerNode={msg("registerTitle")}
25
+ formNode={
26
+ <form id="kc-register-form" className={cx(props.kcFormClass)} action={url.registrationAction} method="post">
27
+ <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("firstName", props.kcFormGroupErrorClass))}>
28
+ <div className={cx(props.kcLabelWrapperClass)}>
29
+ <label htmlFor="firstName" className={cx(props.kcLabelClass)}>
30
+ {msg("firstName")}
31
+ </label>
32
+ </div>
33
+ <div className={cx(props.kcInputWrapperClass)}>
34
+ <input
35
+ type="text"
36
+ id="firstName"
37
+ className={cx(props.kcInputClass)}
38
+ name="firstName"
39
+ defaultValue={register.formData.firstName ?? ""}
40
+ />
41
+ </div>
36
42
  </div>
37
- </div>
38
43
 
39
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("lastName", props.kcFormGroupErrorClass))}>
40
- <div className={cx(props.kcLabelWrapperClass)}>
41
- <label htmlFor="lastName" className={cx(props.kcLabelClass)}>
42
- {msg("lastName")}
43
- </label>
44
- </div>
45
- <div className={cx(props.kcInputWrapperClass)}>
46
- <input
47
- type="text"
48
- id="lastName"
49
- className={cx(props.kcInputClass)}
50
- name="lastName"
51
- defaultValue={register.formData.lastName ?? ""}
52
- />
44
+ <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("lastName", props.kcFormGroupErrorClass))}>
45
+ <div className={cx(props.kcLabelWrapperClass)}>
46
+ <label htmlFor="lastName" className={cx(props.kcLabelClass)}>
47
+ {msg("lastName")}
48
+ </label>
49
+ </div>
50
+ <div className={cx(props.kcInputWrapperClass)}>
51
+ <input
52
+ type="text"
53
+ id="lastName"
54
+ className={cx(props.kcInputClass)}
55
+ name="lastName"
56
+ defaultValue={register.formData.lastName ?? ""}
57
+ />
58
+ </div>
53
59
  </div>
54
- </div>
55
60
 
56
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("email", props.kcFormGroupErrorClass))}>
57
- <div className={cx(props.kcLabelWrapperClass)}>
58
- <label htmlFor="email" className={cx(props.kcLabelClass)}>
59
- {msg("email")}
60
- </label>
61
- </div>
62
- <div className={cx(props.kcInputWrapperClass)}>
63
- <input
64
- type="text"
65
- id="email"
66
- className={cx(props.kcInputClass)}
67
- name="email"
68
- defaultValue={register.formData.email ?? ""}
69
- autoComplete="email"
70
- />
71
- </div>
72
- </div>
73
- {!realm.registrationEmailAsUsername && (
74
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("username", props.kcFormGroupErrorClass))}>
61
+ <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("email", props.kcFormGroupErrorClass))}>
75
62
  <div className={cx(props.kcLabelWrapperClass)}>
76
- <label htmlFor="username" className={cx(props.kcLabelClass)}>
77
- {msg("username")}
63
+ <label htmlFor="email" className={cx(props.kcLabelClass)}>
64
+ {msg("email")}
78
65
  </label>
79
66
  </div>
80
67
  <div className={cx(props.kcInputWrapperClass)}>
81
68
  <input
82
69
  type="text"
83
- id="username"
70
+ id="email"
84
71
  className={cx(props.kcInputClass)}
85
- name="username"
86
- defaultValue={register.formData.username ?? ""}
87
- autoComplete="username"
72
+ name="email"
73
+ defaultValue={register.formData.email ?? ""}
74
+ autoComplete="email"
88
75
  />
89
76
  </div>
90
77
  </div>
91
- )}
92
- {passwordRequired && (
93
- <>
94
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("password", props.kcFormGroupErrorClass))}>
78
+ {!realm.registrationEmailAsUsername && (
79
+ <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("username", props.kcFormGroupErrorClass))}>
95
80
  <div className={cx(props.kcLabelWrapperClass)}>
96
- <label htmlFor="password" className={cx(props.kcLabelClass)}>
97
- {msg("password")}
81
+ <label htmlFor="username" className={cx(props.kcLabelClass)}>
82
+ {msg("username")}
98
83
  </label>
99
84
  </div>
100
85
  <div className={cx(props.kcInputWrapperClass)}>
101
86
  <input
102
- type="password"
103
- id="password"
87
+ type="text"
88
+ id="username"
104
89
  className={cx(props.kcInputClass)}
105
- name="password"
106
- autoComplete="new-password"
90
+ name="username"
91
+ defaultValue={register.formData.username ?? ""}
92
+ autoComplete="username"
107
93
  />
108
94
  </div>
109
95
  </div>
96
+ )}
97
+ {passwordRequired && (
98
+ <>
99
+ <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("password", props.kcFormGroupErrorClass))}>
100
+ <div className={cx(props.kcLabelWrapperClass)}>
101
+ <label htmlFor="password" className={cx(props.kcLabelClass)}>
102
+ {msg("password")}
103
+ </label>
104
+ </div>
105
+ <div className={cx(props.kcInputWrapperClass)}>
106
+ <input
107
+ type="password"
108
+ id="password"
109
+ className={cx(props.kcInputClass)}
110
+ name="password"
111
+ autoComplete="new-password"
112
+ />
113
+ </div>
114
+ </div>
110
115
 
111
- <div
112
- className={cx(
113
- props.kcFormGroupClass,
114
- messagesPerField.printIfExists("password-confirm", props.kcFormGroupErrorClass)
115
- )}
116
- >
117
- <div className={cx(props.kcLabelWrapperClass)}>
118
- <label htmlFor="password-confirm" className={cx(props.kcLabelClass)}>
119
- {msg("passwordConfirm")}
120
- </label>
116
+ <div
117
+ className={cx(
118
+ props.kcFormGroupClass,
119
+ messagesPerField.printIfExists("password-confirm", props.kcFormGroupErrorClass)
120
+ )}
121
+ >
122
+ <div className={cx(props.kcLabelWrapperClass)}>
123
+ <label htmlFor="password-confirm" className={cx(props.kcLabelClass)}>
124
+ {msg("passwordConfirm")}
125
+ </label>
126
+ </div>
127
+ <div className={cx(props.kcInputWrapperClass)}>
128
+ <input type="password" id="password-confirm" className={cx(props.kcInputClass)} name="password-confirm" />
129
+ </div>
121
130
  </div>
131
+ </>
132
+ )}
133
+ {recaptchaRequired && (
134
+ <div className="form-group">
122
135
  <div className={cx(props.kcInputWrapperClass)}>
123
- <input type="password" id="password-confirm" className={cx(props.kcInputClass)} name="password-confirm" />
136
+ <div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey}></div>
124
137
  </div>
125
138
  </div>
126
- </>
127
- )}
128
- {recaptchaRequired && (
129
- <div className="form-group">
130
- <div className={cx(props.kcInputWrapperClass)}>
131
- <div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey}></div>
132
- </div>
133
- </div>
134
- )}
135
- <div className={cx(props.kcFormGroupClass)}>
136
- <div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
137
- <div className={cx(props.kcFormOptionsWrapperClass)}>
138
- <span>
139
- <a href={url.loginUrl}>{msg("backToLogin")}</a>
140
- </span>
139
+ )}
140
+ <div className={cx(props.kcFormGroupClass)}>
141
+ <div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
142
+ <div className={cx(props.kcFormOptionsWrapperClass)}>
143
+ <span>
144
+ <a href={url.loginUrl}>{msg("backToLogin")}</a>
145
+ </span>
146
+ </div>
141
147
  </div>
142
- </div>
143
148
 
144
- <div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
145
- <input
146
- className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)}
147
- type="submit"
148
- value={msgStr("doRegister")}
149
- />
149
+ <div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
150
+ <input
151
+ className={cx(
152
+ props.kcButtonClass,
153
+ props.kcButtonPrimaryClass,
154
+ props.kcButtonBlockClass,
155
+ props.kcButtonLargeClass
156
+ )}
157
+ type="submit"
158
+ value={msgStr("doRegister")}
159
+ />
160
+ </div>
150
161
  </div>
151
- </div>
152
- </form>
153
- }
154
- />
155
- );
156
- });
162
+ </form>
163
+ }
164
+ />
165
+ );
166
+ }
167
+ );
157
168
 
158
169
  export default Register;
@@ -6,62 +6,73 @@ import { useCssAndCx } from "../tools/useCssAndCx";
6
6
  import type { I18n } from "../i18n";
7
7
  import { UserProfileFormFields } from "./shared/UserProfileCommons";
8
8
 
9
- const RegisterUserProfile = memo(({ kcContext, i18n, ...props_ }: { kcContext: KcContextBase.RegisterUserProfile; i18n: I18n } & KcProps) => {
10
- const { url, messagesPerField, recaptchaRequired, recaptchaSiteKey } = kcContext;
9
+ const RegisterUserProfile = memo(
10
+ ({
11
+ kcContext,
12
+ i18n,
13
+ doFetchDefaultThemeResources = true,
14
+ ...props_
15
+ }: { kcContext: KcContextBase.RegisterUserProfile; i18n: I18n; doFetchDefaultThemeResources?: boolean } & KcProps) => {
16
+ const { url, messagesPerField, recaptchaRequired, recaptchaSiteKey } = kcContext;
11
17
 
12
- const { msg, msgStr } = i18n;
18
+ const { msg, msgStr } = i18n;
13
19
 
14
- const { cx, css } = useCssAndCx();
20
+ const { cx, css } = useCssAndCx();
15
21
 
16
- const props = useMemo(
17
- () => ({
18
- ...props_,
19
- "kcFormGroupClass": cx(props_.kcFormGroupClass, css({ "marginBottom": 20 }))
20
- }),
21
- [cx, css]
22
- );
22
+ const props = useMemo(
23
+ () => ({
24
+ ...props_,
25
+ "kcFormGroupClass": cx(props_.kcFormGroupClass, css({ "marginBottom": 20 }))
26
+ }),
27
+ [cx, css]
28
+ );
23
29
 
24
- const [isFomSubmittable, setIsFomSubmittable] = useState(false);
30
+ const [isFomSubmittable, setIsFomSubmittable] = useState(false);
25
31
 
26
- return (
27
- <Template
28
- {...{ kcContext, i18n, ...props }}
29
- displayMessage={messagesPerField.exists("global")}
30
- displayRequiredFields={true}
31
- doFetchDefaultThemeResources={true}
32
- headerNode={msg("registerTitle")}
33
- formNode={
34
- <form id="kc-register-form" className={cx(props.kcFormClass)} action={url.registrationAction} method="post">
35
- <UserProfileFormFields kcContext={kcContext} onIsFormSubmittableValueChange={setIsFomSubmittable} i18n={i18n} {...props} />
36
- {recaptchaRequired && (
37
- <div className="form-group">
38
- <div className={cx(props.kcInputWrapperClass)}>
39
- <div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey} />
32
+ return (
33
+ <Template
34
+ {...{ kcContext, i18n, doFetchDefaultThemeResources, ...props }}
35
+ displayMessage={messagesPerField.exists("global")}
36
+ displayRequiredFields={true}
37
+ headerNode={msg("registerTitle")}
38
+ formNode={
39
+ <form id="kc-register-form" className={cx(props.kcFormClass)} action={url.registrationAction} method="post">
40
+ <UserProfileFormFields kcContext={kcContext} onIsFormSubmittableValueChange={setIsFomSubmittable} i18n={i18n} {...props} />
41
+ {recaptchaRequired && (
42
+ <div className="form-group">
43
+ <div className={cx(props.kcInputWrapperClass)}>
44
+ <div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey} />
45
+ </div>
40
46
  </div>
41
- </div>
42
- )}
43
- <div className={cx(props.kcFormGroupClass)}>
44
- <div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
45
- <div className={cx(props.kcFormOptionsWrapperClass)}>
46
- <span>
47
- <a href={url.loginUrl}>{msg("backToLogin")}</a>
48
- </span>
47
+ )}
48
+ <div className={cx(props.kcFormGroupClass)}>
49
+ <div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
50
+ <div className={cx(props.kcFormOptionsWrapperClass)}>
51
+ <span>
52
+ <a href={url.loginUrl}>{msg("backToLogin")}</a>
53
+ </span>
54
+ </div>
49
55
  </div>
50
- </div>
51
56
 
52
- <div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
53
- <input
54
- className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)}
55
- type="submit"
56
- value={msgStr("doRegister")}
57
- disabled={!isFomSubmittable}
58
- />
57
+ <div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
58
+ <input
59
+ className={cx(
60
+ props.kcButtonClass,
61
+ props.kcButtonPrimaryClass,
62
+ props.kcButtonBlockClass,
63
+ props.kcButtonLargeClass
64
+ )}
65
+ type="submit"
66
+ value={msgStr("doRegister")}
67
+ disabled={!isFomSubmittable}
68
+ />
69
+ </div>
59
70
  </div>
60
- </div>
61
- </form>
62
- }
63
- />
64
- );
65
- });
71
+ </form>
72
+ }
73
+ />
74
+ );
75
+ }
76
+ );
66
77
 
67
78
  export default RegisterUserProfile;
@@ -54,55 +54,61 @@ export function useDownloadTerms(params: {
54
54
  }, []);
55
55
  }
56
56
 
57
- const Terms = memo(({ kcContext, i18n, ...props }: { kcContext: KcContextBase.Terms; i18n: I18n } & KcProps) => {
58
- const { msg, msgStr } = i18n;
57
+ const Terms = memo(
58
+ ({
59
+ kcContext,
60
+ i18n,
61
+ doFetchDefaultThemeResources = true,
62
+ ...props
63
+ }: { kcContext: KcContextBase.Terms; i18n: I18n; doFetchDefaultThemeResources?: boolean } & KcProps) => {
64
+ const { msg, msgStr } = i18n;
59
65
 
60
- useRerenderOnStateChange(evtTermMarkdown);
66
+ useRerenderOnStateChange(evtTermMarkdown);
61
67
 
62
- const { cx } = useCssAndCx();
68
+ const { cx } = useCssAndCx();
63
69
 
64
- const { url } = kcContext;
70
+ const { url } = kcContext;
65
71
 
66
- if (evtTermMarkdown.state === undefined) {
67
- return null;
68
- }
72
+ if (evtTermMarkdown.state === undefined) {
73
+ return null;
74
+ }
69
75
 
70
- return (
71
- <Template
72
- {...{ kcContext, i18n, ...props }}
73
- doFetchDefaultThemeResources={true}
74
- displayMessage={false}
75
- headerNode={msg("termsTitle")}
76
- formNode={
77
- <>
78
- <div id="kc-terms-text">{evtTermMarkdown.state && <Markdown>{evtTermMarkdown.state}</Markdown>}</div>
79
- <form className="form-actions" action={url.loginAction} method="POST">
80
- <input
81
- className={cx(
82
- props.kcButtonClass,
83
- props.kcButtonClass,
84
- props.kcButtonClass,
85
- props.kcButtonPrimaryClass,
86
- props.kcButtonLargeClass
87
- )}
88
- name="accept"
89
- id="kc-accept"
90
- type="submit"
91
- value={msgStr("doAccept")}
92
- />
93
- <input
94
- className={cx(props.kcButtonClass, props.kcButtonDefaultClass, props.kcButtonLargeClass)}
95
- name="cancel"
96
- id="kc-decline"
97
- type="submit"
98
- value={msgStr("doDecline")}
99
- />
100
- </form>
101
- <div className="clearfix" />
102
- </>
103
- }
104
- />
105
- );
106
- });
76
+ return (
77
+ <Template
78
+ {...{ kcContext, i18n, doFetchDefaultThemeResources, ...props }}
79
+ displayMessage={false}
80
+ headerNode={msg("termsTitle")}
81
+ formNode={
82
+ <>
83
+ <div id="kc-terms-text">{evtTermMarkdown.state && <Markdown>{evtTermMarkdown.state}</Markdown>}</div>
84
+ <form className="form-actions" action={url.loginAction} method="POST">
85
+ <input
86
+ className={cx(
87
+ props.kcButtonClass,
88
+ props.kcButtonClass,
89
+ props.kcButtonClass,
90
+ props.kcButtonPrimaryClass,
91
+ props.kcButtonLargeClass
92
+ )}
93
+ name="accept"
94
+ id="kc-accept"
95
+ type="submit"
96
+ value={msgStr("doAccept")}
97
+ />
98
+ <input
99
+ className={cx(props.kcButtonClass, props.kcButtonDefaultClass, props.kcButtonLargeClass)}
100
+ name="cancel"
101
+ id="kc-decline"
102
+ type="submit"
103
+ value={msgStr("doDecline")}
104
+ />
105
+ </form>
106
+ <div className="clearfix" />
107
+ </>
108
+ }
109
+ />
110
+ );
111
+ }
112
+ );
107
113
 
108
114
  export default Terms;