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
@@ -1,125 +1,128 @@
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 { useCssAndCx } from "../tools/useCssAndCx";
6
7
  import type { I18n } from "../i18n";
7
8
 
8
- const LoginUpdatePassword = memo(
9
- ({
10
- kcContext,
11
- i18n,
12
- doFetchDefaultThemeResources = true,
13
- ...props
14
- }: { kcContext: KcContextBase.LoginUpdatePassword; i18n: I18n; doFetchDefaultThemeResources?: boolean } & KcProps) => {
15
- const { cx } = useCssAndCx();
9
+ export type LoginUpdatePasswordProps = KcProps & {
10
+ kcContext: KcContextBase.LoginUpdatePassword;
11
+ i18n: I18n;
12
+ doFetchDefaultThemeResources?: boolean;
13
+ Template?: (props: TemplateProps) => JSX.Element | null;
14
+ };
16
15
 
17
- const { msg, msgStr } = i18n;
16
+ const LoginUpdatePassword = memo((props: LoginUpdatePasswordProps) => {
17
+ const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
18
18
 
19
- const { url, messagesPerField, isAppInitiatedAction, username } = kcContext;
19
+ const { cx } = useCssAndCx();
20
20
 
21
- return (
22
- <Template
23
- {...{ kcContext, i18n, doFetchDefaultThemeResources, ...props }}
24
- headerNode={msg("updatePasswordTitle")}
25
- formNode={
26
- <form id="kc-passwd-update-form" className={cx(props.kcFormClass)} action={url.loginAction} method="post">
27
- <input
28
- type="text"
29
- id="username"
30
- name="username"
31
- value={username}
32
- readOnly={true}
33
- autoComplete="username"
34
- style={{ display: "none" }}
35
- />
36
- <input type="password" id="password" name="password" autoComplete="current-password" style={{ display: "none" }} />
21
+ const { msg, msgStr } = i18n;
37
22
 
38
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("password", props.kcFormGroupErrorClass))}>
39
- <div className={cx(props.kcLabelWrapperClass)}>
40
- <label htmlFor="password-new" className={cx(props.kcLabelClass)}>
41
- {msg("passwordNew")}
42
- </label>
43
- </div>
44
- <div className={cx(props.kcInputWrapperClass)}>
45
- <input
46
- type="password"
47
- id="password-new"
48
- name="password-new"
49
- autoFocus
50
- autoComplete="new-password"
51
- className={cx(props.kcInputClass)}
52
- />
53
- </div>
23
+ const { url, messagesPerField, isAppInitiatedAction, username } = kcContext;
24
+
25
+ return (
26
+ <Template
27
+ {...{ kcContext, i18n, doFetchDefaultThemeResources, ...kcProps }}
28
+ headerNode={msg("updatePasswordTitle")}
29
+ formNode={
30
+ <form id="kc-passwd-update-form" className={cx(kcProps.kcFormClass)} action={url.loginAction} method="post">
31
+ <input
32
+ type="text"
33
+ id="username"
34
+ name="username"
35
+ value={username}
36
+ readOnly={true}
37
+ autoComplete="username"
38
+ style={{ display: "none" }}
39
+ />
40
+ <input type="password" id="password" name="password" autoComplete="current-password" style={{ display: "none" }} />
41
+
42
+ <div className={cx(kcProps.kcFormGroupClass, messagesPerField.printIfExists("password", kcProps.kcFormGroupErrorClass))}>
43
+ <div className={cx(kcProps.kcLabelWrapperClass)}>
44
+ <label htmlFor="password-new" className={cx(kcProps.kcLabelClass)}>
45
+ {msg("passwordNew")}
46
+ </label>
54
47
  </div>
48
+ <div className={cx(kcProps.kcInputWrapperClass)}>
49
+ <input
50
+ type="password"
51
+ id="password-new"
52
+ name="password-new"
53
+ autoFocus
54
+ autoComplete="new-password"
55
+ className={cx(kcProps.kcInputClass)}
56
+ />
57
+ </div>
58
+ </div>
55
59
 
56
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("password-confirm", props.kcFormGroupErrorClass))}>
57
- <div className={cx(props.kcLabelWrapperClass)}>
58
- <label htmlFor="password-confirm" className={cx(props.kcLabelClass)}>
59
- {msg("passwordConfirm")}
60
- </label>
61
- </div>
62
- <div className={cx(props.kcInputWrapperClass)}>
63
- <input
64
- type="password"
65
- id="password-confirm"
66
- name="password-confirm"
67
- autoComplete="new-password"
68
- className={cx(props.kcInputClass)}
69
- />
70
- </div>
60
+ <div className={cx(kcProps.kcFormGroupClass, messagesPerField.printIfExists("password-confirm", kcProps.kcFormGroupErrorClass))}>
61
+ <div className={cx(kcProps.kcLabelWrapperClass)}>
62
+ <label htmlFor="password-confirm" className={cx(kcProps.kcLabelClass)}>
63
+ {msg("passwordConfirm")}
64
+ </label>
71
65
  </div>
66
+ <div className={cx(kcProps.kcInputWrapperClass)}>
67
+ <input
68
+ type="password"
69
+ id="password-confirm"
70
+ name="password-confirm"
71
+ autoComplete="new-password"
72
+ className={cx(kcProps.kcInputClass)}
73
+ />
74
+ </div>
75
+ </div>
72
76
 
73
- <div className={cx(props.kcFormGroupClass)}>
74
- <div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
75
- <div className={cx(props.kcFormOptionsWrapperClass)}>
76
- {isAppInitiatedAction && (
77
- <div className="checkbox">
78
- <label>
79
- <input type="checkbox" id="logout-sessions" name="logout-sessions" value="on" checked />
80
- {msgStr("logoutOtherSessions")}
81
- </label>
82
- </div>
83
- )}
84
- </div>
77
+ <div className={cx(kcProps.kcFormGroupClass)}>
78
+ <div id="kc-form-options" className={cx(kcProps.kcFormOptionsClass)}>
79
+ <div className={cx(kcProps.kcFormOptionsWrapperClass)}>
80
+ {isAppInitiatedAction && (
81
+ <div className="checkbox">
82
+ <label>
83
+ <input type="checkbox" id="logout-sessions" name="logout-sessions" value="on" checked />
84
+ {msgStr("logoutOtherSessions")}
85
+ </label>
86
+ </div>
87
+ )}
85
88
  </div>
89
+ </div>
86
90
 
87
- <div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
88
- {isAppInitiatedAction ? (
89
- <>
90
- <input
91
- className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonLargeClass)}
92
- type="submit"
93
- defaultValue={msgStr("doSubmit")}
94
- />
95
- <button
96
- className={cx(props.kcButtonClass, props.kcButtonDefaultClass, props.kcButtonLargeClass)}
97
- type="submit"
98
- name="cancel-aia"
99
- value="true"
100
- >
101
- {msg("doCancel")}
102
- </button>
103
- </>
104
- ) : (
91
+ <div id="kc-form-buttons" className={cx(kcProps.kcFormButtonsClass)}>
92
+ {isAppInitiatedAction ? (
93
+ <>
105
94
  <input
106
- className={cx(
107
- props.kcButtonClass,
108
- props.kcButtonPrimaryClass,
109
- props.kcButtonBlockClass,
110
- props.kcButtonLargeClass
111
- )}
95
+ className={cx(kcProps.kcButtonClass, kcProps.kcButtonPrimaryClass, kcProps.kcButtonLargeClass)}
112
96
  type="submit"
113
97
  defaultValue={msgStr("doSubmit")}
114
98
  />
115
- )}
116
- </div>
99
+ <button
100
+ className={cx(kcProps.kcButtonClass, kcProps.kcButtonDefaultClass, kcProps.kcButtonLargeClass)}
101
+ type="submit"
102
+ name="cancel-aia"
103
+ value="true"
104
+ >
105
+ {msg("doCancel")}
106
+ </button>
107
+ </>
108
+ ) : (
109
+ <input
110
+ className={cx(
111
+ kcProps.kcButtonClass,
112
+ kcProps.kcButtonPrimaryClass,
113
+ kcProps.kcButtonBlockClass,
114
+ kcProps.kcButtonLargeClass
115
+ )}
116
+ type="submit"
117
+ defaultValue={msgStr("doSubmit")}
118
+ />
119
+ )}
117
120
  </div>
118
- </form>
119
- }
120
- />
121
- );
122
- }
123
- );
121
+ </div>
122
+ </form>
123
+ }
124
+ />
125
+ );
126
+ });
124
127
 
125
128
  export default LoginUpdatePassword;
@@ -1,134 +1,137 @@
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 { useCssAndCx } from "../tools/useCssAndCx";
6
7
  import type { I18n } from "../i18n";
7
8
 
8
- const LoginUpdateProfile = memo(
9
- ({
10
- kcContext,
11
- i18n,
12
- doFetchDefaultThemeResources = true,
13
- ...props
14
- }: { kcContext: KcContextBase.LoginUpdateProfile; i18n: I18n; doFetchDefaultThemeResources?: boolean } & KcProps) => {
15
- const { cx } = useCssAndCx();
9
+ export type LoginUpdateProfile = KcProps & {
10
+ kcContext: KcContextBase.LoginUpdateProfile;
11
+ i18n: I18n;
12
+ doFetchDefaultThemeResources?: boolean;
13
+ Template?: (props: TemplateProps) => JSX.Element | null;
14
+ };
16
15
 
17
- const { msg, msgStr } = i18n;
16
+ const LoginUpdateProfile = memo((props: LoginUpdateProfile) => {
17
+ const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
18
18
 
19
- const { url, user, messagesPerField, isAppInitiatedAction } = kcContext;
19
+ const { cx } = useCssAndCx();
20
20
 
21
- return (
22
- <Template
23
- {...{ kcContext, i18n, doFetchDefaultThemeResources, ...props }}
24
- headerNode={msg("loginProfileTitle")}
25
- formNode={
26
- <form id="kc-update-profile-form" className={cx(props.kcFormClass)} action={url.loginAction} method="post">
27
- {user.editUsernameAllowed && (
28
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("username", props.kcFormGroupErrorClass))}>
29
- <div className={cx(props.kcLabelWrapperClass)}>
30
- <label htmlFor="username" className={cx(props.kcLabelClass)}>
31
- {msg("username")}
32
- </label>
33
- </div>
34
- <div className={cx(props.kcInputWrapperClass)}>
35
- <input
36
- type="text"
37
- id="username"
38
- name="username"
39
- defaultValue={user.username ?? ""}
40
- className={cx(props.kcInputClass)}
41
- />
42
- </div>
43
- </div>
44
- )}
21
+ const { msg, msgStr } = i18n;
45
22
 
46
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("email", props.kcFormGroupErrorClass))}>
47
- <div className={cx(props.kcLabelWrapperClass)}>
48
- <label htmlFor="email" className={cx(props.kcLabelClass)}>
49
- {msg("email")}
50
- </label>
51
- </div>
52
- <div className={cx(props.kcInputWrapperClass)}>
53
- <input type="text" id="email" name="email" defaultValue={user.email ?? ""} className={cx(props.kcInputClass)} />
54
- </div>
55
- </div>
23
+ const { url, user, messagesPerField, isAppInitiatedAction } = kcContext;
56
24
 
57
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("firstName", props.kcFormGroupErrorClass))}>
58
- <div className={cx(props.kcLabelWrapperClass)}>
59
- <label htmlFor="firstName" className={cx(props.kcLabelClass)}>
60
- {msg("firstName")}
25
+ return (
26
+ <Template
27
+ {...{ kcContext, i18n, doFetchDefaultThemeResources, ...kcProps }}
28
+ headerNode={msg("loginProfileTitle")}
29
+ formNode={
30
+ <form id="kc-update-profile-form" className={cx(kcProps.kcFormClass)} action={url.loginAction} method="post">
31
+ {user.editUsernameAllowed && (
32
+ <div className={cx(kcProps.kcFormGroupClass, messagesPerField.printIfExists("username", kcProps.kcFormGroupErrorClass))}>
33
+ <div className={cx(kcProps.kcLabelWrapperClass)}>
34
+ <label htmlFor="username" className={cx(kcProps.kcLabelClass)}>
35
+ {msg("username")}
61
36
  </label>
62
37
  </div>
63
- <div className={cx(props.kcInputWrapperClass)}>
38
+ <div className={cx(kcProps.kcInputWrapperClass)}>
64
39
  <input
65
40
  type="text"
66
- id="firstName"
67
- name="firstName"
68
- defaultValue={user.firstName ?? ""}
69
- className={cx(props.kcInputClass)}
41
+ id="username"
42
+ name="username"
43
+ defaultValue={user.username ?? ""}
44
+ className={cx(kcProps.kcInputClass)}
70
45
  />
71
46
  </div>
72
47
  </div>
48
+ )}
73
49
 
74
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("lastName", props.kcFormGroupErrorClass))}>
75
- <div className={cx(props.kcLabelWrapperClass)}>
76
- <label htmlFor="lastName" className={cx(props.kcLabelClass)}>
77
- {msg("lastName")}
78
- </label>
79
- </div>
80
- <div className={cx(props.kcInputWrapperClass)}>
81
- <input
82
- type="text"
83
- id="lastName"
84
- name="lastName"
85
- defaultValue={user.lastName ?? ""}
86
- className={cx(props.kcInputClass)}
87
- />
88
- </div>
50
+ <div className={cx(kcProps.kcFormGroupClass, messagesPerField.printIfExists("email", kcProps.kcFormGroupErrorClass))}>
51
+ <div className={cx(kcProps.kcLabelWrapperClass)}>
52
+ <label htmlFor="email" className={cx(kcProps.kcLabelClass)}>
53
+ {msg("email")}
54
+ </label>
89
55
  </div>
56
+ <div className={cx(kcProps.kcInputWrapperClass)}>
57
+ <input type="text" id="email" name="email" defaultValue={user.email ?? ""} className={cx(kcProps.kcInputClass)} />
58
+ </div>
59
+ </div>
90
60
 
91
- <div className={cx(props.kcFormGroupClass)}>
92
- <div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
93
- <div className={cx(props.kcFormOptionsWrapperClass)} />
94
- </div>
61
+ <div className={cx(kcProps.kcFormGroupClass, messagesPerField.printIfExists("firstName", kcProps.kcFormGroupErrorClass))}>
62
+ <div className={cx(kcProps.kcLabelWrapperClass)}>
63
+ <label htmlFor="firstName" className={cx(kcProps.kcLabelClass)}>
64
+ {msg("firstName")}
65
+ </label>
66
+ </div>
67
+ <div className={cx(kcProps.kcInputWrapperClass)}>
68
+ <input
69
+ type="text"
70
+ id="firstName"
71
+ name="firstName"
72
+ defaultValue={user.firstName ?? ""}
73
+ className={cx(kcProps.kcInputClass)}
74
+ />
75
+ </div>
76
+ </div>
77
+
78
+ <div className={cx(kcProps.kcFormGroupClass, messagesPerField.printIfExists("lastName", kcProps.kcFormGroupErrorClass))}>
79
+ <div className={cx(kcProps.kcLabelWrapperClass)}>
80
+ <label htmlFor="lastName" className={cx(kcProps.kcLabelClass)}>
81
+ {msg("lastName")}
82
+ </label>
83
+ </div>
84
+ <div className={cx(kcProps.kcInputWrapperClass)}>
85
+ <input
86
+ type="text"
87
+ id="lastName"
88
+ name="lastName"
89
+ defaultValue={user.lastName ?? ""}
90
+ className={cx(kcProps.kcInputClass)}
91
+ />
92
+ </div>
93
+ </div>
95
94
 
96
- <div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
97
- {isAppInitiatedAction ? (
98
- <>
99
- <input
100
- className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonLargeClass)}
101
- type="submit"
102
- defaultValue={msgStr("doSubmit")}
103
- />
104
- <button
105
- className={cx(props.kcButtonClass, props.kcButtonDefaultClass, props.kcButtonLargeClass)}
106
- type="submit"
107
- name="cancel-aia"
108
- value="true"
109
- >
110
- {msg("doCancel")}
111
- </button>
112
- </>
113
- ) : (
95
+ <div className={cx(kcProps.kcFormGroupClass)}>
96
+ <div id="kc-form-options" className={cx(kcProps.kcFormOptionsClass)}>
97
+ <div className={cx(kcProps.kcFormOptionsWrapperClass)} />
98
+ </div>
99
+
100
+ <div id="kc-form-buttons" className={cx(kcProps.kcFormButtonsClass)}>
101
+ {isAppInitiatedAction ? (
102
+ <>
114
103
  <input
115
- className={cx(
116
- props.kcButtonClass,
117
- props.kcButtonPrimaryClass,
118
- props.kcButtonBlockClass,
119
- props.kcButtonLargeClass
120
- )}
104
+ className={cx(kcProps.kcButtonClass, kcProps.kcButtonPrimaryClass, kcProps.kcButtonLargeClass)}
121
105
  type="submit"
122
106
  defaultValue={msgStr("doSubmit")}
123
107
  />
124
- )}
125
- </div>
108
+ <button
109
+ className={cx(kcProps.kcButtonClass, kcProps.kcButtonDefaultClass, kcProps.kcButtonLargeClass)}
110
+ type="submit"
111
+ name="cancel-aia"
112
+ value="true"
113
+ >
114
+ {msg("doCancel")}
115
+ </button>
116
+ </>
117
+ ) : (
118
+ <input
119
+ className={cx(
120
+ kcProps.kcButtonClass,
121
+ kcProps.kcButtonPrimaryClass,
122
+ kcProps.kcButtonBlockClass,
123
+ kcProps.kcButtonLargeClass
124
+ )}
125
+ type="submit"
126
+ defaultValue={msgStr("doSubmit")}
127
+ />
128
+ )}
126
129
  </div>
127
- </form>
128
- }
129
- />
130
- );
131
- }
132
- );
130
+ </div>
131
+ </form>
132
+ }
133
+ />
134
+ );
135
+ });
133
136
 
134
137
  export default LoginUpdateProfile;