@keycloakify/angular 0.0.1-rc.2 → 0.0.1-rc.3

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 (145) hide show
  1. package/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.mjs +3 -3
  2. package/login/components/field-errors/field-errors.component.mjs +3 -3
  3. package/login/components/group-label/group-label.component.mjs +3 -3
  4. package/login/components/input-field-by-type/input-field-by-type.component.mjs +4 -11
  5. package/login/components/input-tag/input-tag.component.mjs +3 -3
  6. package/login/components/input-tag-selects/input-tag-selects.component.mjs +3 -3
  7. package/login/components/logout-other-sessions/logout-other-sessions.component.mjs +3 -3
  8. package/login/components/password-wrapper/password-wrapper.component.mjs +3 -3
  9. package/login/components/select-tag/select-tag.component.mjs +3 -3
  10. package/login/components/textarea-tag/textarea-tag.component.mjs +3 -3
  11. package/login/components/user-profile-form-fields/user-profile-form-fields.component.mjs +4 -11
  12. package/login/containers/template.component.mjs +4 -5
  13. package/login/pages/code/code.component.mjs +3 -3
  14. package/login/pages/delete-account-confirm/delete-account-confirm.component.mjs +3 -3
  15. package/login/pages/delete-credential/delete-credential.component.mjs +3 -3
  16. package/login/pages/error/error.component.mjs +3 -3
  17. package/login/pages/frontchannel-logout/frontchannel-logout.component.mjs +3 -3
  18. package/login/pages/idp-review-user-profile/idp-review-user-profile.component.mjs +4 -9
  19. package/login/pages/info/info.component.mjs +3 -3
  20. package/login/pages/login/login.component.mjs +5 -15
  21. package/login/pages/login-config-totp/login-config-totp.component.mjs +4 -11
  22. package/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.mjs +3 -3
  23. package/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.mjs +3 -3
  24. package/login/pages/login-idp-link-email/login-idp-link-email.component.mjs +3 -3
  25. package/login/pages/login-oauth-grant/login-oauth-grant.component.mjs +3 -3
  26. package/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.mjs +3 -3
  27. package/login/pages/login-otp/login-otp.component.mjs +3 -3
  28. package/login/pages/login-page-expired/login-page-expired.component.mjs +3 -3
  29. package/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.mjs +3 -3
  30. package/login/pages/login-password/login-password.component.mjs +4 -10
  31. package/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.mjs +4 -9
  32. package/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.mjs +3 -3
  33. package/login/pages/login-reset-otp/login-reset-otp.component.mjs +3 -3
  34. package/login/pages/login-reset-password/login-reset-password.component.mjs +3 -3
  35. package/login/pages/login-update-password/login-update-password.component.mjs +4 -11
  36. package/login/pages/login-update-profile/login-update-profile.component.mjs +4 -9
  37. package/login/pages/login-username/login-username.component.mjs +5 -14
  38. package/login/pages/login-verify-email/login-verify-email.component.mjs +3 -3
  39. package/login/pages/login-x509-info/login-x509-info.component.mjs +3 -3
  40. package/login/pages/logout-confirm/logout-confirm.component.mjs +3 -3
  41. package/login/pages/register/register.component.mjs +3 -3
  42. package/login/pages/saml-post-form/saml-post-form.component.mjs +3 -3
  43. package/login/pages/select-authenticator/select-authenticator.component.mjs +4 -10
  44. package/login/pages/terms/terms.component.mjs +3 -3
  45. package/login/pages/update-email/update-email.component.mjs +4 -10
  46. package/login/pages/webauthn-authenticate/webauthn-authenticate.component.mjs +4 -10
  47. package/login/pages/webauthn-error/webauthn-error.component.mjs +4 -9
  48. package/login/pages/webauthn-register/webauthn-register.component.mjs +4 -9
  49. package/package.json +5 -5
  50. package/src/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.html +19 -19
  51. package/src/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.ts +2 -12
  52. package/src/login/components/field-errors/field-errors.component.html +10 -10
  53. package/src/login/components/field-errors/field-errors.component.ts +1 -7
  54. package/src/login/components/group-label/group-label.component.html +25 -25
  55. package/src/login/components/group-label/group-label.component.ts +1 -8
  56. package/src/login/components/input-field-by-type/input-field-by-type.component.html +57 -57
  57. package/src/login/components/input-field-by-type/input-field-by-type.component.ts +3 -21
  58. package/src/login/components/input-tag/input-tag.component.html +41 -45
  59. package/src/login/components/input-tag/input-tag.component.ts +2 -13
  60. package/src/login/components/input-tag-selects/input-tag-selects.component.html +22 -22
  61. package/src/login/components/input-tag-selects/input-tag-selects.component.ts +3 -17
  62. package/src/login/components/logout-other-sessions/logout-other-sessions.component.html +15 -15
  63. package/src/login/components/password-wrapper/password-wrapper.component.html +13 -13
  64. package/src/login/components/password-wrapper/password-wrapper.component.ts +2 -15
  65. package/src/login/components/select-tag/select-tag.component.html +26 -26
  66. package/src/login/components/select-tag/select-tag.component.ts +4 -19
  67. package/src/login/components/textarea-tag/textarea-tag.component.html +13 -15
  68. package/src/login/components/textarea-tag/textarea-tag.component.ts +2 -12
  69. package/src/login/components/user-profile-form-fields/user-profile-form-fields.component.html +71 -71
  70. package/src/login/components/user-profile-form-fields/user-profile-form-fields.component.ts +4 -28
  71. package/src/login/containers/template.component.html +183 -183
  72. package/src/login/containers/template.component.ts +4 -22
  73. package/src/login/pages/code/code.component.html +21 -21
  74. package/src/login/pages/code/code.component.ts +1 -5
  75. package/src/login/pages/delete-account-confirm/delete-account-confirm.component.html +44 -42
  76. package/src/login/pages/delete-account-confirm/delete-account-confirm.component.ts +2 -7
  77. package/src/login/pages/delete-credential/delete-credential.component.html +29 -29
  78. package/src/login/pages/delete-credential/delete-credential.component.ts +3 -14
  79. package/src/login/pages/error/error.component.html +20 -20
  80. package/src/login/pages/error/error.component.ts +1 -5
  81. package/src/login/pages/frontchannel-logout/frontchannel-logout.component.html +31 -31
  82. package/src/login/pages/frontchannel-logout/frontchannel-logout.component.ts +3 -15
  83. package/src/login/pages/idp-review-user-profile/idp-review-user-profile.component.html +36 -36
  84. package/src/login/pages/idp-review-user-profile/idp-review-user-profile.component.ts +4 -21
  85. package/src/login/pages/info/info.component.html +45 -45
  86. package/src/login/pages/info/info.component.ts +3 -15
  87. package/src/login/pages/login/login.component.html +194 -194
  88. package/src/login/pages/login/login.component.ts +5 -30
  89. package/src/login/pages/login-config-totp/login-config-totp.component.html +189 -179
  90. package/src/login/pages/login-config-totp/login-config-totp.component.ts +5 -26
  91. package/src/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.html +35 -35
  92. package/src/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.ts +3 -14
  93. package/src/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.html +34 -34
  94. package/src/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.ts +3 -16
  95. package/src/login/pages/login-idp-link-email/login-idp-link-email.component.html +32 -30
  96. package/src/login/pages/login-idp-link-email/login-idp-link-email.component.ts +3 -14
  97. package/src/login/pages/login-oauth-grant/login-oauth-grant.component.html +83 -81
  98. package/src/login/pages/login-oauth-grant/login-oauth-grant.component.ts +3 -14
  99. package/src/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.html +57 -57
  100. package/src/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.ts +3 -16
  101. package/src/login/pages/login-otp/login-otp.component.html +96 -96
  102. package/src/login/pages/login-otp/login-otp.component.ts +2 -12
  103. package/src/login/pages/login-page-expired/login-page-expired.component.html +31 -31
  104. package/src/login/pages/login-page-expired/login-page-expired.component.ts +3 -14
  105. package/src/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.html +183 -181
  106. package/src/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.ts +2 -9
  107. package/src/login/pages/login-password/login-password.component.html +82 -82
  108. package/src/login/pages/login-password/login-password.component.ts +3 -20
  109. package/src/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.html +142 -142
  110. package/src/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.ts +4 -23
  111. package/src/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.html +67 -67
  112. package/src/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.ts +4 -18
  113. package/src/login/pages/login-reset-otp/login-reset-otp.component.html +61 -59
  114. package/src/login/pages/login-reset-otp/login-reset-otp.component.ts +2 -12
  115. package/src/login/pages/login-reset-password/login-reset-password.component.html +84 -84
  116. package/src/login/pages/login-reset-password/login-reset-password.component.ts +3 -14
  117. package/src/login/pages/login-update-password/login-update-password.component.html +107 -107
  118. package/src/login/pages/login-update-password/login-update-password.component.ts +5 -26
  119. package/src/login/pages/login-update-profile/login-update-profile.component.html +53 -53
  120. package/src/login/pages/login-update-profile/login-update-profile.component.ts +4 -21
  121. package/src/login/pages/login-username/login-username.component.html +146 -146
  122. package/src/login/pages/login-username/login-username.component.ts +4 -25
  123. package/src/login/pages/login-verify-email/login-verify-email.component.html +22 -22
  124. package/src/login/pages/login-verify-email/login-verify-email.component.ts +3 -14
  125. package/src/login/pages/login-x509-info/login-x509-info.component.html +96 -96
  126. package/src/login/pages/login-x509-info/login-x509-info.component.ts +2 -12
  127. package/src/login/pages/logout-confirm/logout-confirm.component.html +51 -51
  128. package/src/login/pages/logout-confirm/logout-confirm.component.ts +2 -12
  129. package/src/login/pages/register/register.component.html +113 -113
  130. package/src/login/pages/register/register.component.ts +2 -13
  131. package/src/login/pages/saml-post-form/saml-post-form.component.html +47 -48
  132. package/src/login/pages/saml-post-form/saml-post-form.component.ts +2 -14
  133. package/src/login/pages/select-authenticator/select-authenticator.component.html +43 -44
  134. package/src/login/pages/select-authenticator/select-authenticator.component.ts +4 -21
  135. package/src/login/pages/terms/terms.component.html +32 -32
  136. package/src/login/pages/terms/terms.component.ts +2 -12
  137. package/src/login/pages/update-email/update-email.component.html +52 -52
  138. package/src/login/pages/update-email/update-email.component.ts +3 -20
  139. package/src/login/pages/webauthn-authenticate/webauthn-authenticate.component.html +146 -148
  140. package/src/login/pages/webauthn-authenticate/webauthn-authenticate.component.ts +5 -29
  141. package/src/login/pages/webauthn-error/webauthn-error.component.html +53 -53
  142. package/src/login/pages/webauthn-error/webauthn-error.component.ts +3 -18
  143. package/src/login/pages/webauthn-register/webauthn-register.component.html +73 -73
  144. package/src/login/pages/webauthn-register/webauthn-register.component.ts +4 -20
  145. package/src/tsconfig.json +0 -1
@@ -1,15 +1,5 @@
1
- import {
2
- ChangeDetectionStrategy,
3
- Component,
4
- forwardRef,
5
- inject,
6
- input
7
- } from '@angular/core';
8
- import {
9
- CLASSES,
10
- KC_CONTEXT,
11
- USE_DEFAULT_CSS
12
- } from '@keycloakify/angular/lib/public-api';
1
+ import { ChangeDetectionStrategy, Component, forwardRef, inject, input } from '@angular/core';
2
+ import { CLASSES, KC_CONTEXT, USE_DEFAULT_CSS } from '@keycloakify/angular/lib/public-api';
13
3
  import { ClassKey } from 'keycloakify/login/lib/kcClsx';
14
4
  import { KcContext } from 'keycloakify/login/KcContext';
15
5
  import { ComponentReference } from '@keycloakify/angular/login/classes/component-reference.class';
@@ -1,35 +1,35 @@
1
1
  @let url = kcContext.url;
2
2
  <kc-login-template
3
- [displayInfo]="displayInfo"
4
- [bodyClassName]="bodyClassName()"
5
- [displayMessage]="displayMessage"
6
- [displayRequiredFields]="displayRequiredFields()"
7
- [documentTitle]="documentTitle()"
3
+ [displayInfo]="displayInfo"
4
+ [bodyClassName]="bodyClassName()"
5
+ [displayMessage]="displayMessage"
6
+ [displayRequiredFields]="displayRequiredFields()"
7
+ [documentTitle]="documentTitle()"
8
8
  >
9
- <ng-container headerNode>
10
- {{ 'pageExpiredTitle' | msgStr }}
11
- </ng-container>
12
- <ng-container content>
13
- <p
14
- id="instruction1"
15
- class="instruction"
16
- >
17
- {{ 'pageExpiredMsg1' | msgStr }}
18
- <a
19
- id="loginRestartLink"
20
- [href]="url.loginRestartFlowUrl"
21
- >
22
- {{ 'doClickHere' | msgStr }}
23
- </a>
24
- .<br />
25
- {{ 'pageExpiredMsg2' | msgStr }}
26
- <a
27
- id="loginContinueLink"
28
- [href]="url.loginAction"
29
- >
30
- {{ 'doClickHere' | msgStr }}
31
- </a>
32
- .
33
- </p>
34
- </ng-container>
9
+ <ng-container headerNode>
10
+ {{ 'pageExpiredTitle' | msgStr }}
11
+ </ng-container>
12
+ <ng-container content>
13
+ <p
14
+ id="instruction1"
15
+ class="instruction"
16
+ >
17
+ {{ 'pageExpiredMsg1' | msgStr }}
18
+ <a
19
+ id="loginRestartLink"
20
+ [href]="url.loginRestartFlowUrl"
21
+ >
22
+ {{ 'doClickHere' | msgStr }}
23
+ </a>
24
+ .<br />
25
+ {{ 'pageExpiredMsg2' | msgStr }}
26
+ <a
27
+ id="loginContinueLink"
28
+ [href]="url.loginAction"
29
+ >
30
+ {{ 'doClickHere' | msgStr }}
31
+ </a>
32
+ .
33
+ </p>
34
+ </ng-container>
35
35
  </kc-login-template>
@@ -1,15 +1,5 @@
1
- import {
2
- ChangeDetectionStrategy,
3
- Component,
4
- forwardRef,
5
- inject,
6
- input
7
- } from '@angular/core';
8
- import {
9
- CLASSES,
10
- KC_CONTEXT,
11
- USE_DEFAULT_CSS
12
- } from '@keycloakify/angular/lib/public-api';
1
+ import { ChangeDetectionStrategy, Component, forwardRef, inject, input } from '@angular/core';
2
+ import { CLASSES, KC_CONTEXT, USE_DEFAULT_CSS } from '@keycloakify/angular/lib/public-api';
13
3
  import { ClassKey } from 'keycloakify/login/lib/kcClsx';
14
4
  import { KcContext } from 'keycloakify/login/KcContext';
15
5
  import { ComponentReference } from '@keycloakify/angular/login/classes/component-reference.class';
@@ -30,8 +20,7 @@ import { MsgStrPipe } from '@keycloakify/angular/login/pipes/msg-str.pipe';
30
20
  ]
31
21
  })
32
22
  export class LoginPageExpiredComponent extends ComponentReference {
33
- kcContext =
34
- inject<Extract<KcContext, { pageId: 'login-page-expired.ftl' }>>(KC_CONTEXT);
23
+ kcContext = inject<Extract<KcContext, { pageId: 'login-page-expired.ftl' }>>(KC_CONTEXT);
35
24
  override doUseDefaultCss = inject<boolean>(USE_DEFAULT_CSS);
36
25
  override classes = inject<Partial<Record<ClassKey, string>>>(CLASSES);
37
26
  displayRequiredFields = input(false);
@@ -7,197 +7,199 @@
7
7
  @let usernameHidden = kcContext.usernameHidden;
8
8
  @let registrationDisabled = kcContext.registrationDisabled;
9
9
  <kc-login-template [displayInfo]="displayInfo">
10
- <ng-container headerNode>
11
- {{ 'passkey-login-title' | msgStr }}
12
- </ng-container>
13
- <ng-container infoNode>
14
- @if (realm.registrationAllowed && !registrationDisabled) {
15
- <div id="kc-registration">
16
- <span>
17
- {{ 'noAccount' | msgStr }}
18
- <a
19
- tabIndex="6"
20
- [href]="url.registrationUrl"
21
- >
22
- {{ 'doRegister' | msgStr }}
23
- </a>
24
- </span>
25
- </div>
26
- }
27
- </ng-container>
10
+ <ng-container headerNode>
11
+ {{ 'passkey-login-title' | msgStr }}
12
+ </ng-container>
13
+ <ng-container infoNode>
14
+ @if (realm.registrationAllowed && !registrationDisabled) {
15
+ <div id="kc-registration">
16
+ <span>
17
+ {{ 'noAccount' | msgStr }}
18
+ <a
19
+ tabIndex="6"
20
+ [href]="url.registrationUrl"
21
+ >
22
+ {{ 'doRegister' | msgStr }}
23
+ </a>
24
+ </span>
25
+ </div>
26
+ }
27
+ </ng-container>
28
28
 
29
- <ng-container content>
30
- <form
31
- id="webauth"
32
- [action]="url.loginAction"
33
- method="post"
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
- [kcClass]="'kcFormGroupClass'"
68
- no-bottom-margin="true"
69
- style="margin-bottom: 0"
70
- >
71
- @if (authenticators !== undefined && authenticators.authenticators.length !== 0) {
29
+ <ng-container content>
72
30
  <form
73
- id="authn_select"
74
- [kcClass]="'kcFormClass'"
31
+ id="webauth"
32
+ [action]="url.loginAction"
33
+ method="post"
75
34
  >
76
- @for (authenticator of authenticators.authenticators; track authenticator; let i = $index) {
77
35
  <input
78
- type="hidden"
79
- name="authn_use_chk"
80
- readOnly
81
- [value]="authenticator.credentialId"
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"
82
64
  />
83
- }
84
65
  </form>
66
+ <div
67
+ [kcClass]="'kcFormGroupClass'"
68
+ no-bottom-margin="true"
69
+ style="margin-bottom: 0"
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>
85
85
 
86
- @if (shouldDisplayAuthenticators) {
87
- @if (authenticators.authenticators.length > 1) {
88
- <p [kcClass]="'kcSelectAuthListItemTitle'">
89
- {{ 'passkey-available-authenticators' | msgStr }}
90
- </p>
91
- }
86
+ @if (shouldDisplayAuthenticators) {
87
+ @if (authenticators.authenticators.length > 1) {
88
+ <p [kcClass]="'kcSelectAuthListItemTitle'">
89
+ {{ 'passkey-available-authenticators' | msgStr }}
90
+ </p>
91
+ }
92
92
 
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
- [ngClass]="selectAuthListItemIconClass(authenticator.transports.iconClass)"
101
- [kcClass]="'kcCommonLogoIdP'"
102
- aria-hidden="true"
103
- ></i>
104
- <div [kcClass]="'kcSelectAuthListItemBodyClass'">
105
- <div
106
- [id]="'kc-webauthn-authenticator-label-' + i"
107
- [kcClass]="'kcSelectAuthListItemHeadingClass'"
108
- >
109
- {{ authenticator.label | advancedMsgStr }}
110
- </div>
111
- @if (
112
- authenticator.transports !== undefined &&
113
- authenticator.transports.displayNameProperties !== undefined &&
114
- authenticator.transports.displayNameProperties.length !== 0
115
- ) {
116
- <div
117
- [id]="'kc-webauthn-authenticator-transport-' + i"
118
- [kcClass]="'kcSelectAuthListItemDescriptionClass'"
119
- >
120
- @for (
121
- nameProperty of authenticator.transports.displayNameProperties;
122
- track nameProperty;
123
- let i = $index
124
- ) {
125
- <span> {{ nameProperty | advancedMsgStr }} </span>
126
- @if (i !== authenticator.transports.displayNameProperties.length - 1) {
127
- <span>, </span>
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
+ [ngClass]="selectAuthListItemIconClass(authenticator.transports.iconClass)"
101
+ [kcClass]="'kcCommonLogoIdP'"
102
+ aria-hidden="true"
103
+ ></i>
104
+ <div [kcClass]="'kcSelectAuthListItemBodyClass'">
105
+ <div
106
+ [id]="'kc-webauthn-authenticator-label-' + i"
107
+ [kcClass]="'kcSelectAuthListItemHeadingClass'"
108
+ >
109
+ {{ authenticator.label | advancedMsgStr }}
110
+ </div>
111
+ @if (
112
+ authenticator.transports !== undefined &&
113
+ authenticator.transports.displayNameProperties !== undefined &&
114
+ authenticator.transports.displayNameProperties.length !== 0
115
+ ) {
116
+ <div
117
+ [id]="'kc-webauthn-authenticator-transport-' + i"
118
+ [kcClass]="'kcSelectAuthListItemDescriptionClass'"
119
+ >
120
+ @for (
121
+ nameProperty of authenticator.transports.displayNameProperties;
122
+ track nameProperty;
123
+ let i = $index
124
+ ) {
125
+ <span>
126
+ {{ nameProperty | advancedMsgStr }}
127
+ </span>
128
+ @if (i !== authenticator.transports.displayNameProperties.length - 1) {
129
+ <span>, </span>
130
+ }
131
+ }
132
+ </div>
133
+ <div [kcClass]="'kcSelectAuthListItemDescriptionClass'">
134
+ <span [id]="'kc-webauthn-authenticator-createdlabel-' + i">
135
+ {{ 'passkey-createdAt-label' | msgStr }}
136
+ </span>
137
+ <span [id]="'kc-webauthn-authenticator-created-' + i">
138
+ {{ authenticator.createdAt }}
139
+ </span>
140
+ </div>
141
+ <div [kcClass]="'kcSelectAuthListItemFillClass'"></div>
142
+ }
143
+ </div>
144
+ </div>
128
145
  }
129
- }
130
- </div>
131
- <div [kcClass]="'kcSelectAuthListItemDescriptionClass'">
132
- <span [id]="'kc-webauthn-authenticator-createdlabel-' + i">
133
- {{ 'passkey-createdAt-label' | msgStr }}
134
- </span>
135
- <span [id]="'kc-webauthn-authenticator-created-' + i">
136
- {{ authenticator.createdAt }}
137
- </span>
138
146
  </div>
139
- <div [kcClass]="'kcSelectAuthListItemFillClass'"></div>
140
- }
141
- </div>
142
- </div>
143
- }
144
- </div>
145
- }
146
- }
147
- <div id="kc-form-wrapper">
148
- @if (realm.password) {
149
- <form
150
- id="kc-form-passkey"
151
- [action]="url.loginAction"
152
- method="post"
153
- style="display: none"
154
- >
155
- @if (!usernameHidden) {
156
- <div [kcClass]="'kcFormGroupClass'">
157
- <label
158
- for="username"
159
- [kcClass]="'kcLabelClass'"
160
- >
161
- {{ 'passkey-autofill-select' | msgStr }}
162
- </label>
163
- <input
164
- tabIndex="1"
165
- id="username"
166
- [attr.aria-invalid]="messagesPerField.existsError('username')"
167
- [kcClass]="'kcInputClass'"
168
- name="username"
169
- [value]="login.username ?? ''"
170
- type="text"
171
- autoFocus
172
- autoComplete="off"
173
- />
174
- @if (messagesPerField.existsError('username')) {
175
- <span
176
- id="input-error-username"
177
- [kcClass]="'kcInputErrorMessageClass'"
178
- aria-live="polite"
179
- >
180
- {{ messagesPerField.get('username') }}
181
- </span>
182
147
  }
183
- </div>
184
148
  }
185
- </form>
186
- <div
187
- id="kc-form-passkey-button"
188
- [kcClass]="'kcFormButtonsClass'"
189
- style="display: none"
190
- >
191
- <input
192
- id="authButtonId"
193
- type="button"
194
- autoFocus
195
- value="{{ 'passkey-doAuthenticate' | msgStr }}"
196
- [kcClass]="['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']"
197
- />
198
- </div>
199
- }
200
- </div>
201
- </div>
202
- </ng-container>
149
+ <div id="kc-form-wrapper">
150
+ @if (realm.password) {
151
+ <form
152
+ id="kc-form-passkey"
153
+ [action]="url.loginAction"
154
+ method="post"
155
+ style="display: none"
156
+ >
157
+ @if (!usernameHidden) {
158
+ <div [kcClass]="'kcFormGroupClass'">
159
+ <label
160
+ for="username"
161
+ [kcClass]="'kcLabelClass'"
162
+ >
163
+ {{ 'passkey-autofill-select' | msgStr }}
164
+ </label>
165
+ <input
166
+ tabIndex="1"
167
+ id="username"
168
+ [attr.aria-invalid]="messagesPerField.existsError('username')"
169
+ [kcClass]="'kcInputClass'"
170
+ name="username"
171
+ [value]="login.username ?? ''"
172
+ type="text"
173
+ autoFocus
174
+ autoComplete="off"
175
+ />
176
+ @if (messagesPerField.existsError('username')) {
177
+ <span
178
+ id="input-error-username"
179
+ [kcClass]="'kcInputErrorMessageClass'"
180
+ aria-live="polite"
181
+ >
182
+ {{ messagesPerField.get('username') }}
183
+ </span>
184
+ }
185
+ </div>
186
+ }
187
+ </form>
188
+ <div
189
+ id="kc-form-passkey-button"
190
+ [kcClass]="'kcFormButtonsClass'"
191
+ style="display: none"
192
+ >
193
+ <input
194
+ id="authButtonId"
195
+ type="button"
196
+ autoFocus
197
+ value="{{ 'passkey-doAuthenticate' | msgStr }}"
198
+ [kcClass]="['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']"
199
+ />
200
+ </div>
201
+ }
202
+ </div>
203
+ </div>
204
+ </ng-container>
203
205
  </kc-login-template>
@@ -1,9 +1,5 @@
1
1
  import { ChangeDetectionStrategy, Component, forwardRef, inject } from '@angular/core';
2
- import {
3
- CLASSES,
4
- KC_CONTEXT,
5
- USE_DEFAULT_CSS
6
- } from '@keycloakify/angular/lib/public-api';
2
+ import { CLASSES, KC_CONTEXT, USE_DEFAULT_CSS } from '@keycloakify/angular/lib/public-api';
7
3
  import { Script } from '@keycloakify/angular/lib/models';
8
4
  import { ClassKey } from 'keycloakify/login/lib/kcClsx';
9
5
  import { KcContext } from 'keycloakify/login/KcContext';
@@ -30,10 +26,7 @@ import { LoginResourceInjectorService } from '@keycloakify/angular/login/service
30
26
  ]
31
27
  })
32
28
  export class LoginPasskeysConditionalAuthenticateComponent extends ComponentReference {
33
- kcContext =
34
- inject<
35
- Extract<KcContext, { pageId: 'login-passkeys-conditional-authenticate.ftl' }>
36
- >(KC_CONTEXT);
29
+ kcContext = inject<Extract<KcContext, { pageId: 'login-passkeys-conditional-authenticate.ftl' }>>(KC_CONTEXT);
37
30
  loginResourceInjectorService = inject(LoginResourceInjectorService);
38
31
  msgStr = inject(MsgStrPipe);
39
32
  override doUseDefaultCss = inject<boolean>(USE_DEFAULT_CSS);