keycloakify 2.2.0 → 2.5.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 (177) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +156 -127
  3. package/bin/KeycloakVersion.js.map +1 -1
  4. package/bin/build-keycloak-theme/build-keycloak-theme.js +57 -54
  5. package/bin/build-keycloak-theme/build-keycloak-theme.js.map +1 -1
  6. package/bin/build-keycloak-theme/ftlValuesGlobalName.js.map +1 -1
  7. package/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.js +4 -11
  8. package/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.js.map +1 -1
  9. package/bin/build-keycloak-theme/generateFtl/common.ftl +72 -56
  10. package/bin/build-keycloak-theme/generateFtl/generateFtl.d.ts +1 -1
  11. package/bin/build-keycloak-theme/generateFtl/generateFtl.js +47 -44
  12. package/bin/build-keycloak-theme/generateFtl/generateFtl.js.map +1 -1
  13. package/bin/build-keycloak-theme/generateJavaStackFiles.js +12 -8
  14. package/bin/build-keycloak-theme/generateJavaStackFiles.js.map +1 -1
  15. package/bin/build-keycloak-theme/generateKeycloakThemeResources.js +20 -21
  16. package/bin/build-keycloak-theme/generateKeycloakThemeResources.js.map +1 -1
  17. package/bin/build-keycloak-theme/index.js.map +1 -1
  18. package/bin/build-keycloak-theme/replaceImportFromStatic.js +18 -30
  19. package/bin/build-keycloak-theme/replaceImportFromStatic.js.map +1 -1
  20. package/bin/download-builtin-keycloak-theme.js +2 -2
  21. package/bin/download-builtin-keycloak-theme.js.map +1 -1
  22. package/bin/generate-i18n-messages.js +9 -11
  23. package/bin/generate-i18n-messages.js.map +1 -1
  24. package/bin/link_in_test_app.js +6 -22
  25. package/bin/link_in_test_app.js.map +1 -1
  26. package/bin/tools/crawl.js.map +1 -1
  27. package/bin/tools/downloadAndUnzip.js +4 -5
  28. package/bin/tools/downloadAndUnzip.js.map +1 -1
  29. package/bin/tools/grant-exec-perms.js +4 -3
  30. package/bin/tools/grant-exec-perms.js.map +1 -1
  31. package/bin/tools/isInside.js.map +1 -1
  32. package/bin/tools/rm.js +1 -1
  33. package/bin/tools/rm.js.map +1 -1
  34. package/bin/tools/transformCodebase.js +7 -3
  35. package/bin/tools/transformCodebase.js.map +1 -1
  36. package/lib/components/Error.js +1 -2
  37. package/lib/components/Error.js.map +1 -1
  38. package/lib/components/Info.js +1 -15
  39. package/lib/components/Info.js.map +1 -1
  40. package/lib/components/KcApp.js +23 -10
  41. package/lib/components/KcApp.js.map +1 -1
  42. package/lib/components/KcProps.d.ts +4 -2
  43. package/lib/components/KcProps.js +10 -8
  44. package/lib/components/KcProps.js.map +1 -1
  45. package/lib/components/Login.js +20 -18
  46. package/lib/components/Login.js.map +1 -1
  47. package/lib/components/LoginIdpLinkConfirm.js.map +1 -1
  48. package/lib/components/LoginOtp.js +14 -15
  49. package/lib/components/LoginOtp.js.map +1 -1
  50. package/lib/components/LoginResetPassword.js +5 -7
  51. package/lib/components/LoginResetPassword.js.map +1 -1
  52. package/lib/components/LoginUpdateProfile.js +1 -5
  53. package/lib/components/LoginUpdateProfile.js.map +1 -1
  54. package/lib/components/LoginVerifyEmail.js.map +1 -1
  55. package/lib/components/Register.js +1 -4
  56. package/lib/components/Register.js.map +1 -1
  57. package/lib/components/RegisterUserProfile.d.ts +6 -0
  58. package/lib/components/RegisterUserProfile.js +78 -0
  59. package/lib/components/RegisterUserProfile.js.map +1 -0
  60. package/lib/components/Template.js +28 -43
  61. package/lib/components/Template.js.map +1 -1
  62. package/lib/components/Terms.js.map +1 -1
  63. package/lib/getKcContext/KcContextBase.d.ts +78 -18
  64. package/lib/getKcContext/KcContextBase.js +2 -3
  65. package/lib/getKcContext/KcContextBase.js.map +1 -1
  66. package/lib/getKcContext/getKcContext.d.ts +1 -3
  67. package/lib/getKcContext/getKcContext.js +5 -9
  68. package/lib/getKcContext/getKcContext.js.map +1 -1
  69. package/lib/getKcContext/kcContextMocks/kcContextMocks.d.ts +1 -0
  70. package/lib/getKcContext/kcContextMocks/kcContextMocks.js +187 -55
  71. package/lib/getKcContext/kcContextMocks/kcContextMocks.js.map +1 -1
  72. package/lib/getKcContext/kcContextMocks/urlResourcesPath.js.map +1 -1
  73. package/lib/i18n/KcLanguageTag.d.ts +25 -2
  74. package/lib/i18n/KcLanguageTag.js +27 -27
  75. package/lib/i18n/KcLanguageTag.js.map +1 -1
  76. package/lib/i18n/generated_kcMessages/11.0.3/account.js +27 -27
  77. package/lib/i18n/generated_kcMessages/11.0.3/account.js.map +1 -1
  78. package/lib/i18n/generated_kcMessages/11.0.3/admin.js +23 -23
  79. package/lib/i18n/generated_kcMessages/11.0.3/admin.js.map +1 -1
  80. package/lib/i18n/generated_kcMessages/11.0.3/email.js +97 -97
  81. package/lib/i18n/generated_kcMessages/11.0.3/email.js.map +1 -1
  82. package/lib/i18n/generated_kcMessages/11.0.3/login.js +30 -30
  83. package/lib/i18n/generated_kcMessages/11.0.3/login.js.map +1 -1
  84. package/lib/i18n/generated_kcMessages/15.0.2/account.js +29 -29
  85. package/lib/i18n/generated_kcMessages/15.0.2/account.js.map +1 -1
  86. package/lib/i18n/generated_kcMessages/15.0.2/admin.js +23 -23
  87. package/lib/i18n/generated_kcMessages/15.0.2/admin.js.map +1 -1
  88. package/lib/i18n/generated_kcMessages/15.0.2/email.js +111 -111
  89. package/lib/i18n/generated_kcMessages/15.0.2/email.js.map +1 -1
  90. package/lib/i18n/generated_kcMessages/15.0.2/login.js +32 -32
  91. package/lib/i18n/generated_kcMessages/15.0.2/login.js.map +1 -1
  92. package/lib/i18n/kcMessages/login.js +1 -1
  93. package/lib/i18n/kcMessages/login.js.map +1 -1
  94. package/lib/i18n/useKcLanguageTag.js +1 -3
  95. package/lib/i18n/useKcLanguageTag.js.map +1 -1
  96. package/lib/i18n/useKcMessage.d.ts +4 -2
  97. package/lib/i18n/useKcMessage.js +12 -3
  98. package/lib/i18n/useKcMessage.js.map +1 -1
  99. package/lib/keycloakJsAdapter.d.ts +6 -6
  100. package/lib/keycloakJsAdapter.js +10 -12
  101. package/lib/keycloakJsAdapter.js.map +1 -1
  102. package/lib/tools/ReactComponent.d.ts +2 -0
  103. package/lib/tools/ReactComponent.js +3 -0
  104. package/lib/tools/ReactComponent.js.map +1 -0
  105. package/lib/tools/allPropertiesValuesToUndefined.js +1 -2
  106. package/lib/tools/allPropertiesValuesToUndefined.js.map +1 -1
  107. package/lib/tools/appendHead.js +16 -12
  108. package/lib/tools/appendHead.js.map +1 -1
  109. package/lib/tools/assert.js.map +1 -1
  110. package/lib/tools/deepAssign.js +3 -4
  111. package/lib/tools/deepAssign.js.map +1 -1
  112. package/lib/tools/deepClone.js.map +1 -1
  113. package/package.json +25 -5
  114. package/src/bin/KeycloakVersion.ts +0 -2
  115. package/src/bin/build-keycloak-theme/build-keycloak-theme.ts +70 -77
  116. package/src/bin/build-keycloak-theme/ftlValuesGlobalName.ts +1 -2
  117. package/src/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.ts +26 -37
  118. package/src/bin/build-keycloak-theme/generateDebugFiles/index.ts +1 -1
  119. package/src/bin/build-keycloak-theme/generateFtl/common.ftl +72 -56
  120. package/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts +75 -95
  121. package/src/bin/build-keycloak-theme/generateFtl/index.ts +1 -1
  122. package/src/bin/build-keycloak-theme/generateJavaStackFiles.ts +38 -56
  123. package/src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts +47 -85
  124. package/src/bin/build-keycloak-theme/index.ts +2 -4
  125. package/src/bin/build-keycloak-theme/replaceImportFromStatic.ts +34 -78
  126. package/src/bin/download-builtin-keycloak-theme.ts +5 -19
  127. package/src/bin/generate-i18n-messages.ts +13 -25
  128. package/src/bin/link_in_test_app.ts +9 -38
  129. package/src/bin/tools/crawl.ts +2 -12
  130. package/src/bin/tools/downloadAndUnzip.ts +6 -22
  131. package/src/bin/tools/getProjectRoot.ts +1 -1
  132. package/src/bin/tools/grant-exec-perms.ts +8 -7
  133. package/src/bin/tools/isInside.ts +2 -9
  134. package/src/bin/tools/rm.ts +21 -32
  135. package/src/bin/tools/transformCodebase.ts +20 -43
  136. package/src/lib/components/Error.tsx +3 -7
  137. package/src/lib/components/Info.tsx +23 -47
  138. package/src/lib/components/KcApp.tsx +25 -13
  139. package/src/lib/components/KcProps.ts +94 -92
  140. package/src/lib/components/Login.tsx +126 -116
  141. package/src/lib/components/LoginIdpLinkConfirm.tsx +38 -53
  142. package/src/lib/components/LoginOtp.tsx +39 -76
  143. package/src/lib/components/LoginResetPassword.tsx +9 -26
  144. package/src/lib/components/LoginUpdateProfile.tsx +104 -117
  145. package/src/lib/components/LoginVerifyEmail.tsx +3 -12
  146. package/src/lib/components/Register.tsx +76 -46
  147. package/src/lib/components/RegisterUserProfile.tsx +201 -0
  148. package/src/lib/components/Template.tsx +109 -161
  149. package/src/lib/components/Terms.tsx +4 -13
  150. package/src/lib/getKcContext/KcContextBase.ts +104 -53
  151. package/src/lib/getKcContext/getKcContext.ts +47 -78
  152. package/src/lib/getKcContext/index.ts +2 -2
  153. package/src/lib/getKcContext/kcContextMocks/index.ts +1 -1
  154. package/src/lib/getKcContext/kcContextMocks/kcContextMocks.ts +362 -241
  155. package/src/lib/getKcContext/kcContextMocks/urlResourcesPath.ts +1 -2
  156. package/src/lib/i18n/KcLanguageTag.ts +34 -45
  157. package/src/lib/i18n/generated_kcMessages/11.0.3/account.ts +3086 -3059
  158. package/src/lib/i18n/generated_kcMessages/11.0.3/admin.ts +248 -239
  159. package/src/lib/i18n/generated_kcMessages/11.0.3/email.ts +848 -633
  160. package/src/lib/i18n/generated_kcMessages/11.0.3/login.ts +4466 -4359
  161. package/src/lib/i18n/generated_kcMessages/15.0.2/account.ts +4247 -4202
  162. package/src/lib/i18n/generated_kcMessages/15.0.2/admin.ts +273 -264
  163. package/src/lib/i18n/generated_kcMessages/15.0.2/email.ts +997 -749
  164. package/src/lib/i18n/generated_kcMessages/15.0.2/login.ts +5352 -5212
  165. package/src/lib/i18n/kcMessages/login.ts +4 -9
  166. package/src/lib/i18n/useKcLanguageTag.ts +2 -16
  167. package/src/lib/i18n/useKcMessage.tsx +26 -15
  168. package/src/lib/index.ts +0 -1
  169. package/src/lib/keycloakJsAdapter.ts +23 -53
  170. package/src/lib/tools/AndByDiscriminatingKey.ts +16 -30
  171. package/src/lib/tools/DeepPartial.ts +1 -2
  172. package/src/lib/tools/ReactComponent.ts +4 -0
  173. package/src/lib/tools/allPropertiesValuesToUndefined.ts +1 -6
  174. package/src/lib/tools/appendHead.ts +28 -25
  175. package/src/lib/tools/assert.ts +1 -2
  176. package/src/lib/tools/deepAssign.ts +28 -46
  177. package/src/lib/tools/deepClone.ts +2 -3
@@ -5,129 +5,116 @@ import type { KcContextBase } from "../getKcContext/KcContextBase";
5
5
  import { useKcMessage } from "../i18n/useKcMessage";
6
6
  import { useCssAndCx } from "tss-react";
7
7
 
8
- export const LoginUpdateProfile = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginUpdateProfile; } & KcProps) => {
8
+ export const LoginUpdateProfile = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginUpdateProfile } & KcProps) => {
9
+ const { cx } = useCssAndCx();
9
10
 
10
- const { cx } = useCssAndCx();
11
+ const { msg, msgStr } = useKcMessage();
11
12
 
12
- const { msg, msgStr } = useKcMessage();
13
+ const { url, user, messagesPerField, isAppInitiatedAction } = kcContext;
13
14
 
14
- const { url, user, messagesPerField, isAppInitiatedAction } = kcContext;
15
+ return (
16
+ <Template
17
+ {...{ kcContext, ...props }}
18
+ doFetchDefaultThemeResources={true}
19
+ headerNode={msg("loginProfileTitle")}
20
+ formNode={
21
+ <form id="kc-update-profile-form" className={cx(props.kcFormClass)} action={url.loginAction} method="post">
22
+ {user.editUsernameAllowed && (
23
+ <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("username", props.kcFormGroupErrorClass))}>
24
+ <div className={cx(props.kcLabelWrapperClass)}>
25
+ <label htmlFor="username" className={cx(props.kcLabelClass)}>
26
+ {msg("username")}
27
+ </label>
28
+ </div>
29
+ <div className={cx(props.kcInputWrapperClass)}>
30
+ <input
31
+ type="text"
32
+ id="username"
33
+ name="username"
34
+ defaultValue={user.username ?? ""}
35
+ className={cx(props.kcInputClass)}
36
+ />
37
+ </div>
38
+ </div>
39
+ )}
15
40
 
16
- return (
17
- <Template
18
- {...{ kcContext, ...props }}
19
- doFetchDefaultThemeResources={true}
20
- headerNode={msg("loginProfileTitle")}
21
- formNode={
22
- <form id="kc-update-profile-form" className={cx(props.kcFormClass)} action={url.loginAction} method="post">
23
- {user.editUsernameAllowed &&
24
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("username", props.kcFormGroupErrorClass))}>
25
- <div className={cx(props.kcLabelWrapperClass)}>
26
- <label htmlFor="username" className={cx(props.kcLabelClass)}>
27
- {msg("username")}
28
- </label>
29
- </div>
30
- <div className={cx(props.kcInputWrapperClass)}>
31
- <input
32
- type="text"
33
- id="username"
34
- name="username"
35
- defaultValue={user.username ?? ""}
36
- className={cx(props.kcInputClass)}
37
- />
38
- </div>
39
- </div>
40
- }
41
+ <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("email", props.kcFormGroupErrorClass))}>
42
+ <div className={cx(props.kcLabelWrapperClass)}>
43
+ <label htmlFor="email" className={cx(props.kcLabelClass)}>
44
+ {msg("email")}
45
+ </label>
46
+ </div>
47
+ <div className={cx(props.kcInputWrapperClass)}>
48
+ <input type="text" id="email" name="email" defaultValue={user.email ?? ""} className={cx(props.kcInputClass)} />
49
+ </div>
50
+ </div>
41
51
 
42
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("email", props.kcFormGroupErrorClass))}>
43
- <div className={cx(props.kcLabelWrapperClass)}>
44
- <label htmlFor="email" className={cx(props.kcLabelClass)}>
45
- {msg("email")}
46
- </label>
47
- </div>
48
- <div className={cx(props.kcInputWrapperClass)}>
49
- <input
50
- type="text"
51
- id="email"
52
- name="email"
53
- defaultValue={user.email ?? ""}
54
- className={cx(props.kcInputClass)}
55
- />
56
- </div>
57
- </div>
52
+ <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("firstName", props.kcFormGroupErrorClass))}>
53
+ <div className={cx(props.kcLabelWrapperClass)}>
54
+ <label htmlFor="firstName" className={cx(props.kcLabelClass)}>
55
+ {msg("firstName")}
56
+ </label>
57
+ </div>
58
+ <div className={cx(props.kcInputWrapperClass)}>
59
+ <input
60
+ type="text"
61
+ id="firstName"
62
+ name="firstName"
63
+ defaultValue={user.firstName ?? ""}
64
+ className={cx(props.kcInputClass)}
65
+ />
66
+ </div>
67
+ </div>
58
68
 
59
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("firstName", props.kcFormGroupErrorClass))}>
60
- <div className={cx(props.kcLabelWrapperClass)}>
61
- <label htmlFor="firstName" className={cx(props.kcLabelClass)}>
62
- {msg("firstName")}
63
- </label>
64
- </div>
65
- <div className={cx(props.kcInputWrapperClass)}>
66
- <input
67
- type="text"
68
- id="firstName"
69
- name="firstName"
70
- defaultValue={user.firstName ?? ""}
71
- className={cx(props.kcInputClass)}
72
- />
73
- </div>
74
- </div>
69
+ <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("lastName", props.kcFormGroupErrorClass))}>
70
+ <div className={cx(props.kcLabelWrapperClass)}>
71
+ <label htmlFor="lastName" className={cx(props.kcLabelClass)}>
72
+ {msg("lastName")}
73
+ </label>
74
+ </div>
75
+ <div className={cx(props.kcInputWrapperClass)}>
76
+ <input type="text" id="lastName" name="lastName" defaultValue={user.lastName ?? ""} className={cx(props.kcInputClass)} />
77
+ </div>
78
+ </div>
75
79
 
76
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("lastName", props.kcFormGroupErrorClass))}>
77
- <div className={cx(props.kcLabelWrapperClass)}>
78
- <label htmlFor="lastName" className={cx(props.kcLabelClass)}>
79
- {msg("lastName")}
80
- </label>
81
- </div>
82
- <div className={cx(props.kcInputWrapperClass)}>
83
- <input
84
- type="text"
85
- id="lastName"
86
- name="lastName"
87
- defaultValue={user.lastName ?? ""}
88
- className={cx(props.kcInputClass)}
89
- />
90
- </div>
91
- </div>
92
-
93
- <div className={cx(props.kcFormGroupClass)}>
94
- <div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
95
- <div className={cx(props.kcFormOptionsWrapperClass)} />
96
- </div>
97
-
98
- <div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
99
- {
100
- isAppInitiatedAction ?
101
- <>
102
- <input
103
- className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonLargeClass)}
104
- type="submit"
105
- defaultValue={msgStr("doSubmit")}
106
- />
107
- <button
108
- className={cx(props.kcButtonClass, props.kcButtonDefaultClass, props.kcButtonLargeClass)}
109
- type="submit"
110
- name="cancel-aia"
111
- value="true"
112
- >
113
- {msg("doCancel")}
114
- </button>
115
- </>
116
- :
117
- <input
118
- className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)}
119
- type="submit"
120
- defaultValue={msgStr("doSubmit")}
121
- />
122
- }
123
- </div>
124
- </div>
125
-
126
- </form>
127
- }
128
- />
129
- );
80
+ <div className={cx(props.kcFormGroupClass)}>
81
+ <div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
82
+ <div className={cx(props.kcFormOptionsWrapperClass)} />
83
+ </div>
130
84
 
85
+ <div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
86
+ {isAppInitiatedAction ? (
87
+ <>
88
+ <input
89
+ className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonLargeClass)}
90
+ type="submit"
91
+ defaultValue={msgStr("doSubmit")}
92
+ />
93
+ <button
94
+ className={cx(props.kcButtonClass, props.kcButtonDefaultClass, props.kcButtonLargeClass)}
95
+ type="submit"
96
+ name="cancel-aia"
97
+ value="true"
98
+ >
99
+ {msg("doCancel")}
100
+ </button>
101
+ </>
102
+ ) : (
103
+ <input
104
+ className={cx(
105
+ props.kcButtonClass,
106
+ props.kcButtonPrimaryClass,
107
+ props.kcButtonBlockClass,
108
+ props.kcButtonLargeClass,
109
+ )}
110
+ type="submit"
111
+ defaultValue={msgStr("doSubmit")}
112
+ />
113
+ )}
114
+ </div>
115
+ </div>
116
+ </form>
117
+ }
118
+ />
119
+ );
131
120
  });
132
-
133
-
@@ -1,17 +1,13 @@
1
-
2
1
  import { memo } from "react";
3
2
  import { Template } from "./Template";
4
3
  import type { KcProps } from "./KcProps";
5
4
  import type { KcContextBase } from "../getKcContext/KcContextBase";
6
5
  import { useKcMessage } from "../i18n/useKcMessage";
7
6
 
8
- export const LoginVerifyEmail = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginVerifyEmail; } & KcProps) => {
9
-
7
+ export const LoginVerifyEmail = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginVerifyEmail } & KcProps) => {
10
8
  const { msg } = useKcMessage();
11
9
 
12
- const {
13
- url
14
- } = kcContext;
10
+ const { url } = kcContext;
15
11
 
16
12
  return (
17
13
  <Template
@@ -21,9 +17,7 @@ export const LoginVerifyEmail = memo(({ kcContext, ...props }: { kcContext: KcCo
21
17
  headerNode={msg("emailVerifyTitle")}
22
18
  formNode={
23
19
  <>
24
- <p className="instruction">
25
- {msg("emailVerifyInstruction1")}
26
- </p>
20
+ <p className="instruction">{msg("emailVerifyInstruction1")}</p>
27
21
  <p className="instruction">
28
22
  {msg("emailVerifyInstruction2")}
29
23
  <a href={url.loginAction}>{msg("doClickHere")}</a>
@@ -33,7 +27,4 @@ export const LoginVerifyEmail = memo(({ kcContext, ...props }: { kcContext: KcCo
33
27
  }
34
28
  />
35
29
  );
36
-
37
30
  });
38
-
39
-
@@ -5,17 +5,8 @@ import type { KcContextBase } from "../getKcContext/KcContextBase";
5
5
  import { useKcMessage } from "../i18n/useKcMessage";
6
6
  import { useCssAndCx } from "tss-react";
7
7
 
8
- export const Register = memo(({ kcContext, ...props }: { kcContext: KcContextBase.Register; } & KcProps) => {
9
-
10
- const {
11
- url,
12
- messagesPerField,
13
- register,
14
- realm,
15
- passwordRequired,
16
- recaptchaRequired,
17
- recaptchaSiteKey
18
- } = kcContext;
8
+ export const Register = memo(({ kcContext, ...props }: { kcContext: KcContextBase.Register } & KcProps) => {
9
+ const { url, messagesPerField, register, realm, passwordRequired, recaptchaRequired, recaptchaSiteKey } = kcContext;
19
10
 
20
11
  const { msg, msgStr } = useKcMessage();
21
12
 
@@ -28,13 +19,18 @@ export const Register = memo(({ kcContext, ...props }: { kcContext: KcContextBas
28
19
  headerNode={msg("registerTitle")}
29
20
  formNode={
30
21
  <form id="kc-register-form" className={cx(props.kcFormClass)} action={url.registrationAction} method="post">
31
-
32
22
  <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("firstName", props.kcFormGroupErrorClass))}>
33
23
  <div className={cx(props.kcLabelWrapperClass)}>
34
- <label htmlFor="firstName" className={cx(props.kcLabelClass)}>{msg("firstName")}</label>
24
+ <label htmlFor="firstName" className={cx(props.kcLabelClass)}>
25
+ {msg("firstName")}
26
+ </label>
35
27
  </div>
36
28
  <div className={cx(props.kcInputWrapperClass)}>
37
- <input type="text" id="firstName" className={cx(props.kcInputClass)} name="firstName"
29
+ <input
30
+ type="text"
31
+ id="firstName"
32
+ className={cx(props.kcInputClass)}
33
+ name="firstName"
38
34
  defaultValue={register.formData.firstName ?? ""}
39
35
  />
40
36
  </div>
@@ -42,84 +38,118 @@ export const Register = memo(({ kcContext, ...props }: { kcContext: KcContextBas
42
38
 
43
39
  <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("lastName", props.kcFormGroupErrorClass))}>
44
40
  <div className={cx(props.kcLabelWrapperClass)}>
45
- <label htmlFor="lastName" className={cx(props.kcLabelClass)}>{msg("lastName")}</label>
41
+ <label htmlFor="lastName" className={cx(props.kcLabelClass)}>
42
+ {msg("lastName")}
43
+ </label>
46
44
  </div>
47
45
  <div className={cx(props.kcInputWrapperClass)}>
48
- <input type="text" id="lastName" className={cx(props.kcInputClass)} name="lastName"
46
+ <input
47
+ type="text"
48
+ id="lastName"
49
+ className={cx(props.kcInputClass)}
50
+ name="lastName"
49
51
  defaultValue={register.formData.lastName ?? ""}
50
52
  />
51
53
  </div>
52
54
  </div>
53
55
 
54
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists('email', props.kcFormGroupErrorClass))}>
56
+ <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("email", props.kcFormGroupErrorClass))}>
55
57
  <div className={cx(props.kcLabelWrapperClass)}>
56
- <label htmlFor="email" className={cx(props.kcLabelClass)}>{msg("email")}</label>
58
+ <label htmlFor="email" className={cx(props.kcLabelClass)}>
59
+ {msg("email")}
60
+ </label>
57
61
  </div>
58
62
  <div className={cx(props.kcInputWrapperClass)}>
59
- <input type="text" id="email" className={cx(props.kcInputClass)} name="email"
60
- defaultValue={register.formData.email ?? ""} autoComplete="email"
63
+ <input
64
+ type="text"
65
+ id="email"
66
+ className={cx(props.kcInputClass)}
67
+ name="email"
68
+ defaultValue={register.formData.email ?? ""}
69
+ autoComplete="email"
61
70
  />
62
71
  </div>
63
72
  </div>
64
- {
65
- !realm.registrationEmailAsUsername &&
66
-
67
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists('username', props.kcFormGroupErrorClass))}>
73
+ {!realm.registrationEmailAsUsername && (
74
+ <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("username", props.kcFormGroupErrorClass))}>
68
75
  <div className={cx(props.kcLabelWrapperClass)}>
69
- <label htmlFor="username" className={cx(props.kcLabelClass)}>{msg("username")}</label>
76
+ <label htmlFor="username" className={cx(props.kcLabelClass)}>
77
+ {msg("username")}
78
+ </label>
70
79
  </div>
71
80
  <div className={cx(props.kcInputWrapperClass)}>
72
- <input type="text" id="username" className={cx(props.kcInputClass)} name="username"
73
- defaultValue={register.formData.username ?? ""} autoComplete="username" />
81
+ <input
82
+ type="text"
83
+ id="username"
84
+ className={cx(props.kcInputClass)}
85
+ name="username"
86
+ defaultValue={register.formData.username ?? ""}
87
+ autoComplete="username"
88
+ />
74
89
  </div>
75
- </div >
76
-
77
- }
78
- {
79
- passwordRequired &&
90
+ </div>
91
+ )}
92
+ {passwordRequired && (
80
93
  <>
81
-
82
94
  <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("password", props.kcFormGroupErrorClass))}>
83
95
  <div className={cx(props.kcLabelWrapperClass)}>
84
- <label htmlFor="password" className={cx(props.kcLabelClass)}>{msg("password")}</label>
96
+ <label htmlFor="password" className={cx(props.kcLabelClass)}>
97
+ {msg("password")}
98
+ </label>
85
99
  </div>
86
100
  <div className={cx(props.kcInputWrapperClass)}>
87
- <input type="password" id="password" className={cx(props.kcInputClass)} name="password" autoComplete="new-password" />
101
+ <input
102
+ type="password"
103
+ id="password"
104
+ className={cx(props.kcInputClass)}
105
+ name="password"
106
+ autoComplete="new-password"
107
+ />
88
108
  </div>
89
109
  </div>
90
110
 
91
- <div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("password-confirm", props.kcFormGroupErrorClass))}>
111
+ <div
112
+ className={cx(
113
+ props.kcFormGroupClass,
114
+ messagesPerField.printIfExists("password-confirm", props.kcFormGroupErrorClass),
115
+ )}
116
+ >
92
117
  <div className={cx(props.kcLabelWrapperClass)}>
93
- <label htmlFor="password-confirm" className={cx(props.kcLabelClass)}>{msg("passwordConfirm")}</label>
118
+ <label htmlFor="password-confirm" className={cx(props.kcLabelClass)}>
119
+ {msg("passwordConfirm")}
120
+ </label>
94
121
  </div>
95
122
  <div className={cx(props.kcInputWrapperClass)}>
96
123
  <input type="password" id="password-confirm" className={cx(props.kcInputClass)} name="password-confirm" />
97
124
  </div>
98
125
  </div>
99
126
  </>
100
-
101
- }
102
- {
103
- recaptchaRequired &&
127
+ )}
128
+ {recaptchaRequired && (
104
129
  <div className="form-group">
105
130
  <div className={cx(props.kcInputWrapperClass)}>
106
131
  <div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey}></div>
107
132
  </div>
108
133
  </div>
109
- }
134
+ )}
110
135
  <div className={cx(props.kcFormGroupClass)}>
111
136
  <div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
112
137
  <div className={cx(props.kcFormOptionsWrapperClass)}>
113
- <span><a href={url.loginUrl}>{msg("backToLogin")}</a></span>
138
+ <span>
139
+ <a href={url.loginUrl}>{msg("backToLogin")}</a>
140
+ </span>
114
141
  </div>
115
142
  </div>
116
143
 
117
144
  <div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
118
- <input className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)} type="submit"
119
- value={msgStr("doRegister")} />
145
+ <input
146
+ className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)}
147
+ type="submit"
148
+ value={msgStr("doRegister")}
149
+ />
120
150
  </div>
121
151
  </div>
122
- </form >
152
+ </form>
123
153
  }
124
154
  />
125
155
  );