@keycloakify/angular 0.0.1-rc.23 → 0.0.1-rc.25

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 (118) hide show
  1. package/README.md +2 -0
  2. package/account/providers/keycloakify-angular/keycloakify-angular.providers.d.ts +2 -0
  3. package/bin/338.index.js +15 -1
  4. package/bin/758.index.js +15 -1
  5. package/bin/925.index.js +13 -2
  6. package/esm2022/account/providers/keycloakify-angular/keycloakify-angular.providers.mjs +2 -4
  7. package/esm2022/login/containers/template/template.component.mjs +11 -5
  8. package/esm2022/login/login.mjs +1 -1
  9. package/esm2022/login/pages/code/code.component.mjs +3 -3
  10. package/esm2022/login/pages/delete-credential/delete-credential.component.mjs +3 -3
  11. package/esm2022/login/pages/error/error.component.mjs +3 -3
  12. package/esm2022/login/pages/idp-review-user-profile/idp-review-user-profile.component.mjs +7 -7
  13. package/esm2022/login/pages/info/info.component.mjs +3 -3
  14. package/esm2022/login/pages/login/login.component.mjs +3 -3
  15. package/esm2022/login/pages/login-idp-link-email/login-idp-link-email.component.mjs +3 -3
  16. package/esm2022/login/pages/login-oauth-grant/login-oauth-grant.component.mjs +3 -3
  17. package/esm2022/login/pages/login-page-expired/login-page-expired.component.mjs +3 -3
  18. package/esm2022/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.mjs +3 -3
  19. package/esm2022/login/pages/login-password/login-password.component.mjs +3 -3
  20. package/esm2022/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.mjs +3 -3
  21. package/esm2022/login/pages/login-reset-otp/login-reset-otp.component.mjs +3 -3
  22. package/esm2022/login/pages/login-reset-password/login-reset-password.component.mjs +3 -3
  23. package/esm2022/login/pages/login-update-profile/login-update-profile.component.mjs +7 -7
  24. package/esm2022/login/pages/login-username/login-username.component.mjs +3 -3
  25. package/esm2022/login/pages/login-verify-email/login-verify-email.component.mjs +3 -3
  26. package/esm2022/login/pages/register/register.component.mjs +7 -7
  27. package/esm2022/login/pages/select-authenticator/select-authenticator.component.mjs +3 -3
  28. package/esm2022/login/pages/update-email/update-email.component.mjs +7 -7
  29. package/esm2022/login/pages/webauthn-authenticate/webauthn-authenticate.component.mjs +3 -3
  30. package/esm2022/login/providers/keycloakify-angular/keycloakify-angular.providers.mjs +2 -4
  31. package/fesm2022/keycloakify-angular-account-providers-keycloakify-angular.mjs +1 -3
  32. package/fesm2022/keycloakify-angular-account-providers-keycloakify-angular.mjs.map +1 -1
  33. package/fesm2022/keycloakify-angular-login-containers-template.mjs +10 -4
  34. package/fesm2022/keycloakify-angular-login-containers-template.mjs.map +1 -1
  35. package/fesm2022/keycloakify-angular-login-pages-code.mjs +2 -2
  36. package/fesm2022/keycloakify-angular-login-pages-code.mjs.map +1 -1
  37. package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs +2 -2
  38. package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs.map +1 -1
  39. package/fesm2022/keycloakify-angular-login-pages-error.mjs +2 -2
  40. package/fesm2022/keycloakify-angular-login-pages-error.mjs.map +1 -1
  41. package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs +6 -6
  42. package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs.map +1 -1
  43. package/fesm2022/keycloakify-angular-login-pages-info.mjs +2 -2
  44. package/fesm2022/keycloakify-angular-login-pages-info.mjs.map +1 -1
  45. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs +2 -2
  46. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs.map +1 -1
  47. package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs +2 -2
  48. package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs.map +1 -1
  49. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs +2 -2
  50. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs.map +1 -1
  51. package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs +2 -2
  52. package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs.map +1 -1
  53. package/fesm2022/keycloakify-angular-login-pages-login-password.mjs +2 -2
  54. package/fesm2022/keycloakify-angular-login-pages-login-password.mjs.map +1 -1
  55. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs +2 -2
  56. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs.map +1 -1
  57. package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs +2 -2
  58. package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs.map +1 -1
  59. package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs +2 -2
  60. package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs.map +1 -1
  61. package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs +6 -6
  62. package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs.map +1 -1
  63. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs +2 -2
  64. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs.map +1 -1
  65. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs +2 -2
  66. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs.map +1 -1
  67. package/fesm2022/keycloakify-angular-login-pages-login.mjs +2 -2
  68. package/fesm2022/keycloakify-angular-login-pages-login.mjs.map +1 -1
  69. package/fesm2022/keycloakify-angular-login-pages-register.mjs +7 -7
  70. package/fesm2022/keycloakify-angular-login-pages-register.mjs.map +1 -1
  71. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs +2 -2
  72. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs.map +1 -1
  73. package/fesm2022/keycloakify-angular-login-pages-update-email.mjs +6 -6
  74. package/fesm2022/keycloakify-angular-login-pages-update-email.mjs.map +1 -1
  75. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs +2 -2
  76. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs.map +1 -1
  77. package/fesm2022/keycloakify-angular-login-providers-keycloakify-angular.mjs +1 -3
  78. package/fesm2022/keycloakify-angular-login-providers-keycloakify-angular.mjs.map +1 -1
  79. package/login/containers/template/template.component.d.ts +4 -2
  80. package/login/login.d.ts +1 -0
  81. package/login/pages/idp-review-user-profile/idp-review-user-profile.component.d.ts +4 -2
  82. package/login/pages/login-update-profile/login-update-profile.component.d.ts +4 -2
  83. package/login/pages/register/register.component.d.ts +4 -2
  84. package/login/pages/update-email/update-email.component.d.ts +4 -2
  85. package/login/providers/keycloakify-angular/keycloakify-angular.providers.d.ts +2 -0
  86. package/package.json +1 -1
  87. package/src/account/providers/keycloakify-angular/keycloakify-angular.providers.ts +2 -3
  88. package/src/bin/eject-page.ts +21 -3
  89. package/src/bin/update-kc-gen.ts +15 -1
  90. package/src/login/containers/template/template.component.html +1 -0
  91. package/src/login/containers/template/template.component.ts +6 -0
  92. package/src/login/login.ts +1 -0
  93. package/src/login/pages/code/code.component.html +1 -0
  94. package/src/login/pages/delete-credential/delete-credential.component.html +26 -26
  95. package/src/login/pages/error/error.component.html +16 -17
  96. package/src/login/pages/idp-review-user-profile/idp-review-user-profile.component.html +1 -1
  97. package/src/login/pages/idp-review-user-profile/idp-review-user-profile.component.ts +4 -3
  98. package/src/login/pages/info/info.component.html +2 -2
  99. package/src/login/pages/login/login.component.html +3 -1
  100. package/src/login/pages/login-idp-link-email/login-idp-link-email.component.html +2 -0
  101. package/src/login/pages/login-oauth-grant/login-oauth-grant.component.html +1 -0
  102. package/src/login/pages/login-page-expired/login-page-expired.component.html +23 -24
  103. package/src/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.html +166 -165
  104. package/src/login/pages/login-password/login-password.component.html +68 -69
  105. package/src/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.html +55 -57
  106. package/src/login/pages/login-reset-otp/login-reset-otp.component.html +48 -49
  107. package/src/login/pages/login-reset-password/login-reset-password.component.html +1 -0
  108. package/src/login/pages/login-update-profile/login-update-profile.component.html +1 -1
  109. package/src/login/pages/login-update-profile/login-update-profile.component.ts +3 -2
  110. package/src/login/pages/login-username/login-username.component.html +5 -3
  111. package/src/login/pages/login-verify-email/login-verify-email.component.html +1 -1
  112. package/src/login/pages/register/register.component.html +2 -2
  113. package/src/login/pages/register/register.component.ts +3 -2
  114. package/src/login/pages/select-authenticator/select-authenticator.component.html +32 -32
  115. package/src/login/pages/update-email/update-email.component.html +1 -1
  116. package/src/login/pages/update-email/update-email.component.ts +3 -2
  117. package/src/login/pages/webauthn-authenticate/webauthn-authenticate.component.html +1 -0
  118. package/src/login/providers/keycloakify-angular/keycloakify-angular.providers.ts +2 -3
@@ -9,7 +9,9 @@
9
9
  <ng-template #headerNode>
10
10
  {{ i18n.msgStr('passkey-login-title') }}
11
11
  </ng-template>
12
- <ng-container infoNode>
12
+ <ng-template #infoNode>
13
+ @let realm = kcContext.realm;
14
+ @let url = kcContext.url;
13
15
  @if (realm.registrationAllowed && !registrationDisabled) {
14
16
  <div id="kc-registration">
15
17
  <span>
@@ -23,176 +25,175 @@
23
25
  </span>
24
26
  </div>
25
27
  }
26
- </ng-container>
28
+ </ng-template>
27
29
 
28
- <ng-container content>
29
- <form
30
- id="webauth"
31
- method="post"
32
- [action]="url.loginAction"
33
- >
34
- <input
35
- type="hidden"
36
- id="clientDataJSON"
37
- name="clientDataJSON"
38
- />
39
- <input
40
- type="hidden"
41
- id="authenticatorData"
42
- name="authenticatorData"
43
- />
44
- <input
45
- type="hidden"
46
- id="signature"
47
- name="signature"
48
- />
49
- <input
50
- type="hidden"
51
- id="credentialId"
52
- name="credentialId"
53
- />
54
- <input
55
- type="hidden"
56
- id="userHandle"
57
- name="userHandle"
58
- />
59
- <input
60
- type="hidden"
61
- id="error"
62
- name="error"
63
- />
64
- </form>
65
- <div
66
- no-bottom-margin="true"
67
- style="margin-bottom: 0"
68
- [kcClass]="'kcFormGroupClass'"
69
- >
70
- @if (authenticators !== undefined && authenticators.authenticators.length !== 0) {
71
- <form
72
- id="authn_select"
73
- [kcClass]="'kcFormClass'"
74
- >
75
- @for (authenticator of authenticators.authenticators; track authenticator; let i = $index) {
76
- <input
77
- type="hidden"
78
- name="authn_use_chk"
79
- readOnly
80
- [value]="authenticator.credentialId"
81
- />
82
- }
83
- </form>
30
+ <form
31
+ id="webauth"
32
+ method="post"
33
+ [action]="url.loginAction"
34
+ >
35
+ <input
36
+ type="hidden"
37
+ id="clientDataJSON"
38
+ name="clientDataJSON"
39
+ />
40
+ <input
41
+ type="hidden"
42
+ id="authenticatorData"
43
+ name="authenticatorData"
44
+ />
45
+ <input
46
+ type="hidden"
47
+ id="signature"
48
+ name="signature"
49
+ />
50
+ <input
51
+ type="hidden"
52
+ id="credentialId"
53
+ name="credentialId"
54
+ />
55
+ <input
56
+ type="hidden"
57
+ id="userHandle"
58
+ name="userHandle"
59
+ />
60
+ <input
61
+ type="hidden"
62
+ id="error"
63
+ name="error"
64
+ />
65
+ </form>
66
+ <div
67
+ no-bottom-margin="true"
68
+ style="margin-bottom: 0"
69
+ [kcClass]="'kcFormGroupClass'"
70
+ >
71
+ @if (authenticators !== undefined && authenticators.authenticators.length !== 0) {
72
+ <form
73
+ id="authn_select"
74
+ [kcClass]="'kcFormClass'"
75
+ >
76
+ @for (authenticator of authenticators.authenticators; track authenticator; let i = $index) {
77
+ <input
78
+ type="hidden"
79
+ name="authn_use_chk"
80
+ readOnly
81
+ [value]="authenticator.credentialId"
82
+ />
83
+ }
84
+ </form>
84
85
 
85
- @if (shouldDisplayAuthenticators) {
86
- @if (authenticators.authenticators.length > 1) {
87
- <p [kcClass]="'kcSelectAuthListItemTitle'">
88
- {{ i18n.msgStr('passkey-available-authenticators') }}
89
- </p>
90
- }
86
+ @if (shouldDisplayAuthenticators) {
87
+ @if (authenticators.authenticators.length > 1) {
88
+ <p [kcClass]="'kcSelectAuthListItemTitle'">
89
+ {{ i18n.msgStr('passkey-available-authenticators') }}
90
+ </p>
91
+ }
91
92
 
92
- <div [kcClass]="'kcFormClass'">
93
- @for (authenticator of authenticators.authenticators; track authenticator; let i = $index) {
94
- <div
95
- id="'kc-webauthn-authenticator-item-' + i"
96
- [kcClass]="'kcSelectAuthListItemClass'"
97
- >
98
- <i
99
- aria-hidden="true"
100
- [ngClass]="selectAuthListItemIconClass(authenticator.transports.iconClass)"
101
- [kcClass]="'kcCommonLogoIdP'"
102
- ></i>
103
- <div [kcClass]="'kcSelectAuthListItemBodyClass'">
93
+ <div [kcClass]="'kcFormClass'">
94
+ @for (authenticator of authenticators.authenticators; track authenticator; let i = $index) {
95
+ <div
96
+ id="'kc-webauthn-authenticator-item-' + i"
97
+ [kcClass]="'kcSelectAuthListItemClass'"
98
+ >
99
+ <i
100
+ aria-hidden="true"
101
+ [ngClass]="selectAuthListItemIconClass(authenticator.transports.iconClass)"
102
+ [kcClass]="'kcCommonLogoIdP'"
103
+ ></i>
104
+ <div [kcClass]="'kcSelectAuthListItemBodyClass'">
105
+ <div
106
+ [id]="'kc-webauthn-authenticator-label-' + i"
107
+ [kcClass]="'kcSelectAuthListItemHeadingClass'"
108
+ >
109
+ {{ i18n.advancedMsgStr(authenticator.label) }}
110
+ </div>
111
+ @if (
112
+ authenticator.transports !== undefined &&
113
+ authenticator.transports.displayNameProperties !== undefined &&
114
+ authenticator.transports.displayNameProperties.length !== 0
115
+ ) {
104
116
  <div
105
- [id]="'kc-webauthn-authenticator-label-' + i"
106
- [kcClass]="'kcSelectAuthListItemHeadingClass'"
117
+ [id]="'kc-webauthn-authenticator-transport-' + i"
118
+ [kcClass]="'kcSelectAuthListItemDescriptionClass'"
107
119
  >
108
- {{ i18n.advancedMsgStr(authenticator.label) }}
109
- </div>
110
- @if (
111
- authenticator.transports !== undefined &&
112
- authenticator.transports.displayNameProperties !== undefined &&
113
- authenticator.transports.displayNameProperties.length !== 0
114
- ) {
115
- <div
116
- [id]="'kc-webauthn-authenticator-transport-' + i"
117
- [kcClass]="'kcSelectAuthListItemDescriptionClass'"
118
- >
119
- @for (nameProperty of authenticator.transports.displayNameProperties; track nameProperty; let i = $index) {
120
- <span>
121
- {{ i18n.advancedMsgStr(nameProperty) }}
122
- </span>
123
- @if (i !== authenticator.transports.displayNameProperties.length - 1) {
124
- <span>, </span>
125
- }
126
- }
127
- </div>
128
- <div [kcClass]="'kcSelectAuthListItemDescriptionClass'">
129
- <span [id]="'kc-webauthn-authenticator-createdlabel-' + i">
130
- {{ i18n.msgStr('passkey-createdAt-label') }}
120
+ @for (nameProperty of authenticator.transports.displayNameProperties; track nameProperty; let i = $index) {
121
+ <span>
122
+ {{ i18n.advancedMsgStr(nameProperty) }}
131
123
  </span>
132
- <span [id]="'kc-webauthn-authenticator-created-' + i">
133
- {{ authenticator.createdAt }}
134
- </span>
135
- </div>
136
- <div [kcClass]="'kcSelectAuthListItemFillClass'"></div>
137
- }
138
- </div>
124
+ @if (i !== authenticator.transports.displayNameProperties.length - 1) {
125
+ <span>, </span>
126
+ }
127
+ }
128
+ </div>
129
+ <div [kcClass]="'kcSelectAuthListItemDescriptionClass'">
130
+ <span [id]="'kc-webauthn-authenticator-createdlabel-' + i">
131
+ {{ i18n.msgStr('passkey-createdAt-label') }}
132
+ </span>
133
+ <span [id]="'kc-webauthn-authenticator-created-' + i">
134
+ {{ authenticator.createdAt }}
135
+ </span>
136
+ </div>
137
+ <div [kcClass]="'kcSelectAuthListItemFillClass'"></div>
138
+ }
139
139
  </div>
140
- }
141
- </div>
142
- }
140
+ </div>
141
+ }
142
+ </div>
143
143
  }
144
- <div id="kc-form-wrapper">
145
- @if (realm.password) {
146
- <form
147
- id="kc-form-passkey"
148
- method="post"
149
- style="display: none"
150
- [action]="url.loginAction"
151
- >
152
- @if (!usernameHidden) {
153
- <div [kcClass]="'kcFormGroupClass'">
154
- <label
155
- for="username"
156
- [kcClass]="'kcLabelClass'"
144
+ }
145
+ <div id="kc-form-wrapper">
146
+ @if (realm.password) {
147
+ <form
148
+ id="kc-form-passkey"
149
+ method="post"
150
+ style="display: none"
151
+ [action]="url.loginAction"
152
+ >
153
+ @if (!usernameHidden) {
154
+ <div [kcClass]="'kcFormGroupClass'">
155
+ <label
156
+ for="username"
157
+ [kcClass]="'kcLabelClass'"
158
+ >
159
+ {{ i18n.msgStr('passkey-autofill-select') }}
160
+ </label>
161
+ <input
162
+ tabIndex="1"
163
+ id="username"
164
+ name="username"
165
+ type="text"
166
+ autoFocus
167
+ autoComplete="off"
168
+ [attr.aria-invalid]="messagesPerField.existsError('username')"
169
+ [kcClass]="'kcInputClass'"
170
+ [value]="login.username ?? ''"
171
+ />
172
+ @if (messagesPerField.existsError('username')) {
173
+ <span
174
+ id="input-error-username"
175
+ aria-live="polite"
176
+ [kcClass]="'kcInputErrorMessageClass'"
157
177
  >
158
- {{ i18n.msgStr('passkey-autofill-select') }}
159
- </label>
160
- <input
161
- tabIndex="1"
162
- id="username"
163
- name="username"
164
- type="text"
165
- autoFocus
166
- autoComplete="off"
167
- [attr.aria-invalid]="messagesPerField.existsError('username')"
168
- [kcClass]="'kcInputClass'"
169
- [value]="login.username ?? ''"
170
- />
171
- @if (messagesPerField.existsError('username')) {
172
- <span
173
- id="input-error-username"
174
- aria-live="polite"
175
- [kcClass]="'kcInputErrorMessageClass'"
176
- >
177
- {{ messagesPerField.get('username') }}
178
- </span>
179
- }
180
- </div>
181
- }
182
- </form>
183
- <div
184
- id="kc-form-passkey-button"
185
- style="display: none"
186
- [kcClass]="'kcFormButtonsClass'"
187
- >
188
- <input
189
- id="authButtonId"
190
- type="button"
191
- autoFocus
192
- [value]="i18n.msgStr('passkey-doAuthenticate')"
193
- [kcClass]="['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']"
194
- />
195
- </div>
196
- }
197
- </div></div
198
- ></ng-container>
178
+ {{ messagesPerField.get('username') }}
179
+ </span>
180
+ }
181
+ </div>
182
+ }
183
+ </form>
184
+ <div
185
+ id="kc-form-passkey-button"
186
+ style="display: none"
187
+ [kcClass]="'kcFormButtonsClass'"
188
+ >
189
+ <input
190
+ id="authButtonId"
191
+ type="button"
192
+ autoFocus
193
+ [value]="i18n.msgStr('passkey-doAuthenticate')"
194
+ [kcClass]="['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']"
195
+ />
196
+ </div>
197
+ }
198
+ </div>
199
+ </div>
@@ -5,79 +5,78 @@
5
5
  <ng-template #headerNode>
6
6
  {{ i18n.msgStr('doLogIn') }}
7
7
  </ng-template>
8
- <ng-container content>
9
- <div id="kc-form">
10
- <div id="kc-form-wrapper">
11
- <form
12
- id="kc-form-login"
13
- method="post"
14
- [action]="url?.loginAction"
15
- (onSubmit)="isLoginButtonDisabled.set(true)"
8
+
9
+ <div id="kc-form">
10
+ <div id="kc-form-wrapper">
11
+ <form
12
+ id="kc-form-login"
13
+ method="post"
14
+ [action]="url?.loginAction"
15
+ (onSubmit)="isLoginButtonDisabled.set(true)"
16
+ >
17
+ <div
18
+ class="no-bottom-margin"
19
+ [kcClass]="'kcFormGroupClass'"
16
20
  >
17
- <div
18
- class="no-bottom-margin"
19
- [kcClass]="'kcFormGroupClass'"
21
+ <hr />
22
+ <label
23
+ for="password"
24
+ [kcClass]="'kcLabelClass'"
20
25
  >
21
- <hr />
22
- <label
23
- for="password"
24
- [kcClass]="'kcLabelClass'"
25
- >
26
- {{ i18n.msgStr('password') }}
27
- </label>
28
- <kc-password-wrapper passwordInputId="password">
29
- <input
30
- type="password"
31
- id="password"
32
- name="password"
33
- aria-describedby="input-error-password"
34
- [kcClass]="'kcInputClass'"
35
- [required]="true"
36
- [autofocus]="true"
37
- [tabindex]="1"
38
- />
39
- </kc-password-wrapper>
26
+ {{ i18n.msgStr('password') }}
27
+ </label>
28
+ <kc-password-wrapper passwordInputId="password">
29
+ <input
30
+ type="password"
31
+ id="password"
32
+ name="password"
33
+ aria-describedby="input-error-password"
34
+ [kcClass]="'kcInputClass'"
35
+ [required]="true"
36
+ [autofocus]="true"
37
+ [tabindex]="1"
38
+ />
39
+ </kc-password-wrapper>
40
40
 
41
- @if (messagesPerField.existsError('password')) {
42
- <span
43
- id="input-error-password"
44
- aria-live="polite"
45
- [kcClass]="'kcInputErrorMessageClass'"
46
- [innerHTML]="messagesPerField.getFirstError('password') | kcSanitize: 'html'"
47
- >
41
+ @if (messagesPerField.existsError('password')) {
42
+ <span
43
+ id="input-error-password"
44
+ aria-live="polite"
45
+ [kcClass]="'kcInputErrorMessageClass'"
46
+ [innerHTML]="messagesPerField.getFirstError('password') | kcSanitize: 'html'"
47
+ >
48
+ </span>
49
+ }
50
+ </div>
51
+ <div [kcClass]="['kcFormGroupClass', 'kcFormSettingClass']">
52
+ <div id="kc-form-options"></div>
53
+ <div [kcClass]="'kcFormOptionsWrapperClass'">
54
+ @if (realm.resetPasswordAllowed) {
55
+ <span>
56
+ <a
57
+ tabindex="5"
58
+ [href]="url.loginResetCredentialsUrl"
59
+ >
60
+ {{ i18n.msgStr('doForgotPassword') }}
61
+ </a>
48
62
  </span>
49
63
  }
50
64
  </div>
51
- <div [kcClass]="['kcFormGroupClass', 'kcFormSettingClass']">
52
- <div id="kc-form-options"></div>
53
- <div [kcClass]="'kcFormOptionsWrapperClass'">
54
- @if (realm.resetPasswordAllowed) {
55
- <span>
56
- <a
57
- tabindex="5"
58
- [href]="url.loginResetCredentialsUrl"
59
- >
60
- {{ i18n.msgStr('doForgotPassword') }}
61
- </a>
62
- </span>
63
- }
64
- </div>
65
- </div>
66
- <div
67
- id="kc-form-buttons"
68
- [kcClass]="'kcFormGroupClass'"
69
- >
70
- <input
71
- type="submit"
72
- id="kc-login"
73
- name="login"
74
- [value]="i18n.msgStr('doLogIn')"
75
- [disabled]="isLoginButtonDisabled()"
76
- [kcClass]="['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']"
77
- [tabindex]="4"
78
- />
79
- </div>
80
- </form>
81
- </div>
65
+ </div>
66
+ <div
67
+ id="kc-form-buttons"
68
+ [kcClass]="'kcFormGroupClass'"
69
+ >
70
+ <input
71
+ type="submit"
72
+ id="kc-login"
73
+ name="login"
74
+ [value]="i18n.msgStr('doLogIn')"
75
+ [disabled]="isLoginButtonDisabled()"
76
+ [kcClass]="['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']"
77
+ [tabindex]="4"
78
+ />
79
+ </div>
80
+ </form>
82
81
  </div>
83
- </ng-container>
82
+ </div>
@@ -6,63 +6,61 @@
6
6
  {{ i18n.msgStr('auth-recovery-code-header') }}
7
7
  </ng-template>
8
8
 
9
- <ng-container content>
10
- <form
11
- id="kc-recovery-code-login-form"
12
- method="post"
13
- [kcClass]="'kcFormClass'"
14
- [action]="url.loginAction"
15
- >
16
- <div [kcClass]="'kcFormGroupClass'">
17
- <div [kcClass]="'kcLabelWrapperClass'">
18
- <label
19
- for="recoveryCodeInput"
20
- [kcClass]="'kcLabelClass'"
21
- >
22
- {{ i18n.msgStr('auth-recovery-code-prompt', recoveryAuthnCodesInputBean.codeNumber.toString()) }}
23
- </label>
24
- </div>
25
- <div [kcClass]="'kcInputWrapperClass'">
26
- <input
27
- tabIndex="1"
28
- id="recoveryCodeInput"
29
- name="recoveryCodeInput"
30
- autoComplete="off"
31
- type="text"
32
- autoFocus
33
- [attr.aria-invalid]="messagesPerField.existsError('recoveryCodeInput')"
34
- [kcClass]="'kcInputClass'"
35
- />
36
- @if (messagesPerField.existsError('recoveryCodeInput')) {
37
- <span
38
- id="input-error"
39
- aria-live="polite"
40
- [kcClass]="'kcInputErrorMessageClass'"
41
- [innerHTML]="messagesPerField.get('recoveryCodeInput') | kcSanitize: 'html'"
42
- ></span>
43
- }
44
- </div>
9
+ <form
10
+ id="kc-recovery-code-login-form"
11
+ method="post"
12
+ [kcClass]="'kcFormClass'"
13
+ [action]="url.loginAction"
14
+ >
15
+ <div [kcClass]="'kcFormGroupClass'">
16
+ <div [kcClass]="'kcLabelWrapperClass'">
17
+ <label
18
+ for="recoveryCodeInput"
19
+ [kcClass]="'kcLabelClass'"
20
+ >
21
+ {{ i18n.msgStr('auth-recovery-code-prompt', recoveryAuthnCodesInputBean.codeNumber.toString()) }}
22
+ </label>
23
+ </div>
24
+ <div [kcClass]="'kcInputWrapperClass'">
25
+ <input
26
+ tabIndex="1"
27
+ id="recoveryCodeInput"
28
+ name="recoveryCodeInput"
29
+ autoComplete="off"
30
+ type="text"
31
+ autoFocus
32
+ [attr.aria-invalid]="messagesPerField.existsError('recoveryCodeInput')"
33
+ [kcClass]="'kcInputClass'"
34
+ />
35
+ @if (messagesPerField.existsError('recoveryCodeInput')) {
36
+ <span
37
+ id="input-error"
38
+ aria-live="polite"
39
+ [kcClass]="'kcInputErrorMessageClass'"
40
+ [innerHTML]="messagesPerField.get('recoveryCodeInput') | kcSanitize: 'html'"
41
+ ></span>
42
+ }
45
43
  </div>
44
+ </div>
46
45
 
47
- <div [kcClass]="'kcFormGroupClass'">
48
- <div
49
- id="kc-form-options"
50
- [kcClass]="'kcFormOptionsWrapperClass'"
51
- >
52
- <div [kcClass]="'kcFormOptionsWrapperClass'"></div>
53
- </div>
54
- <div
55
- id="kc-form-buttons"
56
- [kcClass]="'kcFormButtonsClass'"
57
- >
58
- <input
59
- name="login"
60
- id="kc-login"
61
- type="submit"
62
- [kcClass]="['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']"
63
- [value]="i18n.msgStr('doLogIn')"
64
- />
65
- </div>
46
+ <div [kcClass]="'kcFormGroupClass'">
47
+ <div
48
+ id="kc-form-options"
49
+ [kcClass]="'kcFormOptionsWrapperClass'"
50
+ >
51
+ <div [kcClass]="'kcFormOptionsWrapperClass'"></div>
52
+ </div>
53
+ <div
54
+ id="kc-form-buttons"
55
+ [kcClass]="'kcFormButtonsClass'"
56
+ >
57
+ <input
58
+ name="login"
59
+ id="kc-login"
60
+ type="submit"
61
+ [kcClass]="['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']"
62
+ [value]="i18n.msgStr('doLogIn')"
63
+ />
66
64
  </div>
67
- </form>
68
- </ng-container>
65
+ </div>
66
+ </form>