@keycloakify/angular 20.1.9 → 20.1.10

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 (87) hide show
  1. package/fesm2022/keycloakify-angular-account-pages-account.mjs +4 -5
  2. package/fesm2022/keycloakify-angular-account-pages-account.mjs.map +1 -1
  3. package/fesm2022/keycloakify-angular-account-pages-applications.mjs +4 -4
  4. package/fesm2022/keycloakify-angular-account-pages-applications.mjs.map +1 -1
  5. package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs +3 -5
  6. package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs.map +1 -1
  7. package/fesm2022/keycloakify-angular-account-pages-log.mjs +4 -4
  8. package/fesm2022/keycloakify-angular-account-pages-log.mjs.map +1 -1
  9. package/fesm2022/keycloakify-angular-account-pages-password.mjs +3 -4
  10. package/fesm2022/keycloakify-angular-account-pages-password.mjs.map +1 -1
  11. package/fesm2022/keycloakify-angular-account-pages-sessions.mjs +3 -4
  12. package/fesm2022/keycloakify-angular-account-pages-sessions.mjs.map +1 -1
  13. package/fesm2022/keycloakify-angular-account-pages-totp.mjs +3 -4
  14. package/fesm2022/keycloakify-angular-account-pages-totp.mjs.map +1 -1
  15. package/fesm2022/keycloakify-angular-account-providers-keycloakify-angular.mjs.map +1 -1
  16. package/fesm2022/keycloakify-angular-account-template.mjs +3 -4
  17. package/fesm2022/keycloakify-angular-account-template.mjs.map +1 -1
  18. package/fesm2022/keycloakify-angular-login-components-add-remove-buttons-multi-valued-attribute.mjs +1 -1
  19. package/fesm2022/keycloakify-angular-login-components-add-remove-buttons-multi-valued-attribute.mjs.map +1 -1
  20. package/fesm2022/keycloakify-angular-login-components-field-errors.mjs.map +1 -1
  21. package/fesm2022/keycloakify-angular-login-components-group-label.mjs.map +1 -1
  22. package/fesm2022/keycloakify-angular-login-components-input-field-by-type.mjs.map +1 -1
  23. package/fesm2022/keycloakify-angular-login-components-input-tag-selects.mjs.map +1 -1
  24. package/fesm2022/keycloakify-angular-login-components-input-tag.mjs.map +1 -1
  25. package/fesm2022/keycloakify-angular-login-components-password-wrapper.mjs +1 -2
  26. package/fesm2022/keycloakify-angular-login-components-password-wrapper.mjs.map +1 -1
  27. package/fesm2022/keycloakify-angular-login-components-select-tag.mjs.map +1 -1
  28. package/fesm2022/keycloakify-angular-login-components-textarea-tag.mjs.map +1 -1
  29. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs +1 -2
  30. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs.map +1 -1
  31. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs +1 -1
  32. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs.map +1 -1
  33. package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs.map +1 -1
  34. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs +2 -3
  35. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs.map +1 -1
  36. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs +1 -2
  37. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs.map +1 -1
  38. package/fesm2022/keycloakify-angular-login-pages-login.mjs +4 -3
  39. package/fesm2022/keycloakify-angular-login-pages-login.mjs.map +1 -1
  40. package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs +1 -1
  41. package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs.map +1 -1
  42. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs +1 -2
  43. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs.map +1 -1
  44. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs +1 -2
  45. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs.map +1 -1
  46. package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs +1 -2
  47. package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs.map +1 -1
  48. package/fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs.map +1 -1
  49. package/fesm2022/keycloakify-angular-login-providers-keycloakify-angular.mjs.map +1 -1
  50. package/fesm2022/keycloakify-angular-login-services-login-resource-injector.mjs.map +1 -1
  51. package/package.json +17 -17
  52. package/src/account/i18n.ts +1 -1
  53. package/src/account/pages/account/account.component.html +4 -4
  54. package/src/account/pages/account/account.component.ts +3 -3
  55. package/src/account/pages/applications/applications.component.ts +4 -3
  56. package/src/account/pages/federatedIdentity/federatedIdentity.component.ts +2 -4
  57. package/src/account/pages/log/log.component.ts +4 -3
  58. package/src/account/pages/password/password.component.ts +3 -3
  59. package/src/account/pages/sessions/sessions.component.ts +3 -3
  60. package/src/account/pages/totp/totp.component.ts +3 -3
  61. package/src/account/providers/keycloakify-angular/keycloakify-angular.providers.ts +2 -2
  62. package/src/account/template/template.component.html +8 -8
  63. package/src/account/template/template.component.ts +1 -2
  64. package/src/bin/initialize-account-theme/boilerplate/KcPageStory.ts +2 -1
  65. package/src/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.ts +1 -2
  66. package/src/login/components/field-errors/field-errors.component.ts +2 -2
  67. package/src/login/components/group-label/group-label.component.ts +1 -1
  68. package/src/login/components/input-field-by-type/input-field-by-type.component.ts +1 -1
  69. package/src/login/components/input-tag/input-tag.component.ts +1 -1
  70. package/src/login/components/input-tag-selects/input-tag-selects.component.ts +2 -2
  71. package/src/login/components/password-wrapper/password-wrapper.component.ts +1 -2
  72. package/src/login/components/select-tag/select-tag.component.ts +2 -2
  73. package/src/login/components/textarea-tag/textarea-tag.component.ts +2 -2
  74. package/src/login/i18n.ts +1 -1
  75. package/src/login/pages/login/login.component.ts +2 -2
  76. package/src/login/pages/login-idp-link-email/login-idp-link-email.component.ts +0 -2
  77. package/src/login/pages/login-page-expired/login-page-expired.component.ts +0 -1
  78. package/src/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.ts +1 -1
  79. package/src/login/pages/login-username/login-username.component.ts +1 -2
  80. package/src/login/pages/login-verify-email/login-verify-email.component.ts +0 -2
  81. package/src/login/pages/saml-post-form/saml-post-form.component.ts +0 -1
  82. package/src/login/pages/select-authenticator/select-authenticator.component.ts +1 -2
  83. package/src/login/pages/webauthn-authenticate/webauthn-authenticate.component.ts +2 -3
  84. package/src/login/pages/webauthn-error/webauthn-error.component.ts +1 -2
  85. package/src/login/pages/webauthn-register/webauthn-register.component.ts +1 -1
  86. package/src/login/providers/keycloakify-angular/keycloakify-angular.providers.ts +1 -1
  87. package/src/login/services/login-resource-injector/login-resource-injector.service.ts +1 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@keycloakify/angular",
3
3
  "type": "module",
4
- "version": "20.1.9",
4
+ "version": "20.1.10",
5
5
  "peerDependencies": {
6
6
  "keycloakify": "^11.9.3",
7
7
  "@angular/core": "^20.0.0",
@@ -174,14 +174,14 @@
174
174
  "types": "./login/components/field-errors/index.d.ts",
175
175
  "default": "./fesm2022/keycloakify-angular-login-components-field-errors.mjs"
176
176
  },
177
- "./login/components/group-label": {
178
- "types": "./login/components/group-label/index.d.ts",
179
- "default": "./fesm2022/keycloakify-angular-login-components-group-label.mjs"
180
- },
181
177
  "./login/components/input-field-by-type": {
182
178
  "types": "./login/components/input-field-by-type/index.d.ts",
183
179
  "default": "./fesm2022/keycloakify-angular-login-components-input-field-by-type.mjs"
184
180
  },
181
+ "./login/components/group-label": {
182
+ "types": "./login/components/group-label/index.d.ts",
183
+ "default": "./fesm2022/keycloakify-angular-login-components-group-label.mjs"
184
+ },
185
185
  "./login/components/input-tag": {
186
186
  "types": "./login/components/input-tag/index.d.ts",
187
187
  "default": "./fesm2022/keycloakify-angular-login-components-input-tag.mjs"
@@ -214,6 +214,10 @@
214
214
  "types": "./login/directives/kc-class/index.d.ts",
215
215
  "default": "./fesm2022/keycloakify-angular-login-directives-kc-class.mjs"
216
216
  },
217
+ "./login/providers/keycloakify-angular": {
218
+ "types": "./login/providers/keycloakify-angular/index.d.ts",
219
+ "default": "./fesm2022/keycloakify-angular-login-providers-keycloakify-angular.mjs"
220
+ },
217
221
  "./login/pages/code": {
218
222
  "types": "./login/pages/code/index.d.ts",
219
223
  "default": "./fesm2022/keycloakify-angular-login-pages-code.mjs"
@@ -266,14 +270,14 @@
266
270
  "types": "./login/pages/login-oauth-grant/index.d.ts",
267
271
  "default": "./fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs"
268
272
  },
269
- "./login/pages/login-oauth2-device-verify-user-code": {
270
- "types": "./login/pages/login-oauth2-device-verify-user-code/index.d.ts",
271
- "default": "./fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs"
272
- },
273
273
  "./login/pages/login-otp": {
274
274
  "types": "./login/pages/login-otp/index.d.ts",
275
275
  "default": "./fesm2022/keycloakify-angular-login-pages-login-otp.mjs"
276
276
  },
277
+ "./login/pages/login-oauth2-device-verify-user-code": {
278
+ "types": "./login/pages/login-oauth2-device-verify-user-code/index.d.ts",
279
+ "default": "./fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs"
280
+ },
277
281
  "./login/pages/login-page-expired": {
278
282
  "types": "./login/pages/login-page-expired/index.d.ts",
279
283
  "default": "./fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs"
@@ -326,14 +330,14 @@
326
330
  "types": "./login/pages/logout-confirm/index.d.ts",
327
331
  "default": "./fesm2022/keycloakify-angular-login-pages-logout-confirm.mjs"
328
332
  },
329
- "./login/pages/register": {
330
- "types": "./login/pages/register/index.d.ts",
331
- "default": "./fesm2022/keycloakify-angular-login-pages-register.mjs"
332
- },
333
333
  "./login/pages/saml-post-form": {
334
334
  "types": "./login/pages/saml-post-form/index.d.ts",
335
335
  "default": "./fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs"
336
336
  },
337
+ "./login/pages/register": {
338
+ "types": "./login/pages/register/index.d.ts",
339
+ "default": "./fesm2022/keycloakify-angular-login-pages-register.mjs"
340
+ },
337
341
  "./login/pages/select-authenticator": {
338
342
  "types": "./login/pages/select-authenticator/index.d.ts",
339
343
  "default": "./fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs"
@@ -358,10 +362,6 @@
358
362
  "types": "./login/pages/webauthn-register/index.d.ts",
359
363
  "default": "./fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs"
360
364
  },
361
- "./login/providers/keycloakify-angular": {
362
- "types": "./login/providers/keycloakify-angular/index.d.ts",
363
- "default": "./fesm2022/keycloakify-angular-login-providers-keycloakify-angular.mjs"
364
- },
365
365
  "./login/services/i18n": {
366
366
  "types": "./login/services/i18n/index.d.ts",
367
367
  "default": "./fesm2022/keycloakify-angular-login-services-i18n.mjs"
@@ -1,4 +1,4 @@
1
1
  import type { GenericI18n_noJsx } from 'keycloakify/account/i18n/noJsx/GenericI18n_noJsx';
2
- import { type MessageKey as MessageKey_defaultSet } from 'keycloakify/account/i18n/messages_defaultSet/types';
2
+ import type { MessageKey as MessageKey_defaultSet } from 'keycloakify/account/i18n/messages_defaultSet/types';
3
3
  /** INTERNAL: DO NOT IMPORT THIS */
4
4
  export type I18n = GenericI18n_noJsx<MessageKey_defaultSet, string>;
@@ -27,7 +27,7 @@
27
27
  @if (!realm.registrationEmailAsUsername) {
28
28
  <div
29
29
  class="form-group"
30
- [ngClass]="{ 'has-error': messagesPerField.existsError('username') }"
30
+ [class.has-error]="messagesPerField.existsError('username')"
31
31
  >
32
32
  <div class="col-sm-2 col-md-2">
33
33
  <label
@@ -56,7 +56,7 @@
56
56
 
57
57
  <div
58
58
  class="form-group"
59
- [ngClass]="{ 'has-error': messagesPerField.existsError('email') }"
59
+ [class.has-error]="messagesPerField.existsError('email')"
60
60
  >
61
61
  <div class="col-sm-2 col-md-2">
62
62
  <label
@@ -82,7 +82,7 @@
82
82
 
83
83
  <div
84
84
  class="form-group"
85
- [ngClass]="{ 'has-error': messagesPerField.existsError('firstName') }"
85
+ [class.has-error]="messagesPerField.existsError('firstName')"
86
86
  >
87
87
  <div class="col-sm-2 col-md-2">
88
88
  <label
@@ -107,7 +107,7 @@
107
107
 
108
108
  <div
109
109
  class="form-group"
110
- [ngClass]="{ 'has-error': messagesPerField.existsError('lastName') }"
110
+ [class.has-error]="messagesPerField.existsError('lastName')"
111
111
  >
112
112
  <div class="col-sm-2 col-md-2">
113
113
  <label
@@ -1,5 +1,4 @@
1
- import { NgClass } from '@angular/common';
2
- import { Component, forwardRef, inject } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, forwardRef, inject } from '@angular/core';
3
2
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
4
3
  import { KcClassDirective } from '@keycloakify/angular/account/directives/kc-class';
5
4
  import type { I18n } from '@keycloakify/angular/account/i18n';
@@ -12,9 +11,10 @@ import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css
12
11
  import type { ClassKey } from 'keycloakify/account';
13
12
 
14
13
  @Component({
15
- imports: [NgClass, KcClassDirective, KcSanitizePipe],
14
+ imports: [KcClassDirective, KcSanitizePipe],
16
15
  selector: 'kc-account',
17
16
  templateUrl: 'account.component.html',
17
+ changeDetection: ChangeDetectionStrategy.OnPush,
18
18
  providers: [
19
19
  {
20
20
  provide: ComponentReference,
@@ -1,5 +1,5 @@
1
- import { KeyValuePipe, NgClass } from '@angular/common';
2
- import { Component, forwardRef, inject } from '@angular/core';
1
+ import { KeyValuePipe } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, forwardRef, inject } from '@angular/core';
3
3
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
4
4
  import { KcClassDirective } from '@keycloakify/angular/account/directives/kc-class';
5
5
  import type { I18n } from '@keycloakify/angular/account/i18n';
@@ -12,9 +12,10 @@ import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css
12
12
  import type { ClassKey } from 'keycloakify/account';
13
13
 
14
14
  @Component({
15
- imports: [KcClassDirective, NgClass, KeyValuePipe, IsArrayWithEmptyObjectPipe],
15
+ imports: [KcClassDirective, KeyValuePipe, IsArrayWithEmptyObjectPipe],
16
16
  selector: 'kc-applications',
17
17
  templateUrl: 'applications.component.html',
18
+ changeDetection: ChangeDetectionStrategy.OnPush,
18
19
  providers: [
19
20
  {
20
21
  provide: ComponentReference,
@@ -1,7 +1,5 @@
1
- import { NgClass } from '@angular/common';
2
- import { Component, forwardRef, inject } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, forwardRef, inject } from '@angular/core';
3
2
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
4
- import { KcClassDirective } from '@keycloakify/angular/account/directives/kc-class';
5
3
  import type { I18n } from '@keycloakify/angular/account/i18n';
6
4
  import type { KcContext } from '@keycloakify/angular/account/KcContext';
7
5
  import { ACCOUNT_CLASSES } from '@keycloakify/angular/account/tokens/classes';
@@ -11,9 +9,9 @@ import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css
11
9
  import type { ClassKey } from 'keycloakify/account';
12
10
 
13
11
  @Component({
14
- imports: [KcClassDirective, NgClass],
15
12
  selector: 'kc-federated-identity',
16
13
  templateUrl: 'federatedIdentity.component.html',
14
+ changeDetection: ChangeDetectionStrategy.OnPush,
17
15
  providers: [
18
16
  {
19
17
  provide: ComponentReference,
@@ -1,5 +1,5 @@
1
- import { DatePipe, NgClass } from '@angular/common';
2
- import { Component, forwardRef, inject } from '@angular/core';
1
+ import { DatePipe } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, forwardRef, inject } from '@angular/core';
3
3
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
4
4
  import { KcClassDirective } from '@keycloakify/angular/account/directives/kc-class';
5
5
  import type { I18n } from '@keycloakify/angular/account/i18n';
@@ -11,9 +11,10 @@ import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css
11
11
  import type { ClassKey } from 'keycloakify/account';
12
12
 
13
13
  @Component({
14
- imports: [KcClassDirective, NgClass, DatePipe],
14
+ imports: [KcClassDirective, DatePipe],
15
15
  selector: 'kc-log',
16
16
  templateUrl: 'log.component.html',
17
+ changeDetection: ChangeDetectionStrategy.OnPush,
17
18
  providers: [
18
19
  {
19
20
  provide: ComponentReference,
@@ -1,5 +1,4 @@
1
- import { NgClass } from '@angular/common';
2
- import { Component, forwardRef, inject, signal } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, forwardRef, inject, signal } from '@angular/core';
3
2
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
4
3
  import { KcClassDirective } from '@keycloakify/angular/account/directives/kc-class';
5
4
  import type { I18n } from '@keycloakify/angular/account/i18n';
@@ -11,9 +10,10 @@ import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css
11
10
  import type { ClassKey } from 'keycloakify/account';
12
11
 
13
12
  @Component({
14
- imports: [KcClassDirective, NgClass],
13
+ imports: [KcClassDirective],
15
14
  selector: 'kc-password',
16
15
  templateUrl: 'password.component.html',
16
+ changeDetection: ChangeDetectionStrategy.OnPush,
17
17
  providers: [
18
18
  {
19
19
  provide: ComponentReference,
@@ -1,5 +1,4 @@
1
- import { NgClass } from '@angular/common';
2
- import { Component, forwardRef, inject } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, forwardRef, inject } from '@angular/core';
3
2
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
4
3
  import { KcClassDirective } from '@keycloakify/angular/account/directives/kc-class';
5
4
  import type { I18n } from '@keycloakify/angular/account/i18n';
@@ -11,9 +10,10 @@ import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css
11
10
  import type { ClassKey } from 'keycloakify/account';
12
11
 
13
12
  @Component({
14
- imports: [KcClassDirective, NgClass],
13
+ imports: [KcClassDirective],
15
14
  selector: 'kc-sessions',
16
15
  templateUrl: 'sessions.component.html',
16
+ changeDetection: ChangeDetectionStrategy.OnPush,
17
17
  providers: [
18
18
  {
19
19
  provide: ComponentReference,
@@ -1,5 +1,4 @@
1
- import { NgClass } from '@angular/common';
2
- import { Component, forwardRef, inject } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, forwardRef, inject } from '@angular/core';
3
2
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
4
3
  import { KcClassDirective } from '@keycloakify/angular/account/directives/kc-class';
5
4
  import type { I18n } from '@keycloakify/angular/account/i18n';
@@ -12,9 +11,10 @@ import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css
12
11
  import type { ClassKey } from 'keycloakify/account';
13
12
 
14
13
  @Component({
15
- imports: [KcClassDirective, KcSanitizePipe, NgClass],
14
+ imports: [KcClassDirective, KcSanitizePipe],
16
15
  selector: 'kc-totp',
17
16
  templateUrl: 'totp.component.html',
17
+ changeDetection: ChangeDetectionStrategy.OnPush,
18
18
  providers: [
19
19
  {
20
20
  provide: ComponentReference,
@@ -11,7 +11,7 @@ import { ACCOUNT_CLASSES } from '@keycloakify/angular/account/tokens/classes';
11
11
  import { ACCOUNT_I18N } from '@keycloakify/angular/account/tokens/i18n';
12
12
  import { KC_ACCOUNT_CONTEXT } from '@keycloakify/angular/account/tokens/kc-context';
13
13
  import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';
14
- import { type KcContextLike } from 'keycloakify/account/i18n/noJsx';
14
+ import type { KcContextLike } from 'keycloakify/account/i18n/noJsx';
15
15
  import type { ClassKey } from 'keycloakify/account/lib/kcClsx';
16
16
 
17
17
  export type KeycloakifyAngularAccountConfig = {
@@ -39,7 +39,7 @@ export const provideKeycloakifyAngular = (config: KeycloakifyAngularAccountConfi
39
39
  },
40
40
  provideAppInitializer(() => {
41
41
  const i18nService: I18nService = inject(I18nService);
42
- const kcContext: KcContext = inject(KC_ACCOUNT_CONTEXT);
42
+ const kcContext = inject<KcContext>(KC_ACCOUNT_CONTEXT);
43
43
  const getI18n = config.getI18n;
44
44
 
45
45
  const { i18n, prI18n_currentLanguage } = getI18n({
@@ -66,35 +66,35 @@
66
66
  <div class="container">
67
67
  <div class="bs-sidebar col-sm-3">
68
68
  <ul>
69
- <li [ngClass]="{ active: active === 'account' }">
69
+ <li [class.active]="active === 'account'">
70
70
  <a [href]="url.accountUrl">{{ i18n.msgStr('account') }}</a>
71
71
  </li>
72
72
  @if (features.passwordUpdateSupported) {
73
- <li [ngClass]="{ active: active === 'password' }">
73
+ <li [class.active]="active === 'password'">
74
74
  <a [href]="url.passwordUrl">{{ i18n.msgStr('password') }}</a>
75
75
  </li>
76
76
  }
77
- <li [ngClass]="{ active: active === 'totp' }">
77
+ <li [class.active]="active === 'totp'">
78
78
  <a [href]="url.totpUrl">{{ i18n.msgStr('authenticator') }}</a>
79
79
  </li>
80
80
  @if (features.identityFederation) {
81
- <li [ngClass]="{ active: active === 'social' }">
81
+ <li [class.active]="active === 'social'">
82
82
  <a [href]="url.socialUrl">{{ i18n.msgStr('federatedIdentity') }}</a>
83
83
  </li>
84
84
  }
85
- <li [ngClass]="{ active: active === 'sessions' }">
85
+ <li [class.active]="active === 'sessions'">
86
86
  <a [href]="url.sessionsUrl">{{ i18n.msgStr('sessions') }}</a>
87
87
  </li>
88
- <li [ngClass]="{ active: active === 'applications' }">
88
+ <li [class.active]="active === 'applications'">
89
89
  <a [href]="url.applicationsUrl">{{ i18n.msgStr('applications') }}</a>
90
90
  </li>
91
91
  @if (features.log) {
92
- <li [ngClass]="{ active: active === 'log' }">
92
+ <li [class.active]="active === 'log'">
93
93
  <a [href]="url.logUrl">{{ i18n.msgStr('log') }}</a>
94
94
  </li>
95
95
  }
96
96
  @if (realm.userManagedAccessAllowed && features.authorization) {
97
- <li [ngClass]="{ active: active === 'authorization' }">
97
+ <li [class.active]="active === 'authorization'">
98
98
  <a [href]="url.resourceUrl">{{ i18n.msgStr('myResources') }}</a>
99
99
  </li>
100
100
  }
@@ -15,7 +15,6 @@ import {
15
15
  } from '@angular/core';
16
16
  import { Meta, Title } from '@angular/platform-browser';
17
17
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
18
- import { KcClassDirective } from '@keycloakify/angular/account/directives/kc-class';
19
18
  import type { I18n } from '@keycloakify/angular/account/i18n';
20
19
  import type { KcContext } from '@keycloakify/angular/account/KcContext';
21
20
  import { AccountResourceInjectorService } from '@keycloakify/angular/account/services/account-resource-injector';
@@ -32,7 +31,7 @@ type ActiveType = 'account' | 'password' | 'totp' | 'social' | 'sessions' | 'app
32
31
  @Component({
33
32
  selector: 'kc-root',
34
33
  templateUrl: 'template.component.html',
35
- imports: [AsyncPipe, KcSanitizePipe, KcClassDirective, NgClass],
34
+ imports: [AsyncPipe, KcSanitizePipe, NgClass],
36
35
  changeDetection: ChangeDetectionStrategy.OnPush,
37
36
  providers: [
38
37
  {
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable @angular-eslint/component-class-suffix */
2
2
  import { Component, inject, OnInit, Type } from '@angular/core';
3
+ import type { KcContext } from '@keycloakify/angular/account/KcContext';
3
4
  import { provideKeycloakifyAngular } from '@keycloakify/angular/account/providers/keycloakify-angular';
4
5
  import { TemplateComponent } from '@keycloakify/angular/account/template';
5
6
  import { getKcPage } from './KcPage';
@@ -54,7 +55,7 @@ export const decorators = (_: unknown, context: StoryContextLike) => ({
54
55
  })
55
56
  export class KcPageStory implements OnInit {
56
57
  pageComponent: Type<unknown> | undefined;
57
- kcContext = inject(KC_ACCOUNT_CONTEXT);
58
+ kcContext = inject<KcContext>(KC_ACCOUNT_CONTEXT);
58
59
  ngOnInit() {
59
60
  getKcPage(this.kcContext.pageId).then(kcPage => {
60
61
  this.pageComponent = kcPage.PageComponent;
@@ -1,7 +1,7 @@
1
1
  import { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';
2
2
  import { getButtonToDisplayForMultivaluedAttributeField, type FormAction } from '@keycloakify/angular/login/services/user-profile-form';
3
3
  import { LOGIN_I18N } from '@keycloakify/angular/login/tokens/i18n';
4
- import { type Attribute } from 'keycloakify/login/KcContext';
4
+ import type { Attribute } from 'keycloakify/login/KcContext';
5
5
  import type { I18n } from '@keycloakify/angular/login/i18n';
6
6
 
7
7
  @Component({
@@ -12,7 +12,6 @@ import type { I18n } from '@keycloakify/angular/login/i18n';
12
12
  }
13
13
  `
14
14
  ],
15
- imports: [],
16
15
  selector: 'kc-add-remove-buttons-multi-valued-attribute',
17
16
  templateUrl: 'add-remove-buttons-multi-valued-attribute.component.html',
18
17
  changeDetection: ChangeDetectionStrategy.OnPush
@@ -2,9 +2,9 @@ import { ChangeDetectionStrategy, Component, forwardRef, inject, input } from '@
2
2
  import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';
3
3
  import { ComponentReference } from '@keycloakify/angular/login/classes/component-reference';
4
4
  import { KcClassDirective } from '@keycloakify/angular/login/directives/kc-class';
5
- import { type FormFieldError } from '@keycloakify/angular/login/services/user-profile-form';
5
+ import type { FormFieldError } from '@keycloakify/angular/login/services/user-profile-form';
6
6
  import { LOGIN_CLASSES } from '@keycloakify/angular/login/tokens/classes';
7
- import { type Attribute } from 'keycloakify/login/KcContext';
7
+ import type { Attribute } from 'keycloakify/login/KcContext';
8
8
  import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
9
9
 
10
10
  @Component({
@@ -5,7 +5,7 @@ import { AttributesDirective } from '@keycloakify/angular/lib/directives/attribu
5
5
  import { KcClassDirective } from '@keycloakify/angular/login/directives/kc-class';
6
6
  import { LOGIN_CLASSES } from '@keycloakify/angular/login/tokens/classes';
7
7
  import { LOGIN_I18N } from '@keycloakify/angular/login/tokens/i18n';
8
- import { type Attribute } from 'keycloakify/login/KcContext';
8
+ import type { Attribute } from 'keycloakify/login/KcContext';
9
9
  import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
10
10
  import type { I18n } from '@keycloakify/angular/login/i18n';
11
11
 
@@ -9,7 +9,7 @@ import { SelectTagComponent } from '@keycloakify/angular/login/components/select
9
9
  import { TextareaTagComponent } from '@keycloakify/angular/login/components/textarea-tag';
10
10
  import { FormAction, FormFieldError } from '@keycloakify/angular/login/services/user-profile-form';
11
11
  import { LOGIN_CLASSES } from '@keycloakify/angular/login/tokens/classes';
12
- import { type Attribute } from 'keycloakify/login/KcContext';
12
+ import type { Attribute } from 'keycloakify/login/KcContext';
13
13
  import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
14
14
 
15
15
  @Component({
@@ -12,7 +12,7 @@ import type { I18n } from '@keycloakify/angular/login/i18n';
12
12
  import { FormAction, FormFieldError } from '@keycloakify/angular/login/services/user-profile-form';
13
13
  import { LOGIN_CLASSES } from '@keycloakify/angular/login/tokens/classes';
14
14
  import { LOGIN_I18N } from '@keycloakify/angular/login/tokens/i18n';
15
- import { type Attribute } from 'keycloakify/login/KcContext';
15
+ import type { Attribute } from 'keycloakify/login/KcContext';
16
16
  import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
17
17
 
18
18
  @Component({
@@ -2,10 +2,10 @@ import { ChangeDetectionStrategy, Component, computed, forwardRef, inject, input
2
2
  import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';
3
3
  import { ComponentReference } from '@keycloakify/angular/login/classes/component-reference';
4
4
  import { KcClassDirective } from '@keycloakify/angular/login/directives/kc-class';
5
- import { type FormAction, type FormFieldError } from '@keycloakify/angular/login/services/user-profile-form';
5
+ import type { FormAction, FormFieldError } from '@keycloakify/angular/login/services/user-profile-form';
6
6
  import { LOGIN_CLASSES } from '@keycloakify/angular/login/tokens/classes';
7
7
  import { LOGIN_I18N } from '@keycloakify/angular/login/tokens/i18n';
8
- import { type Attribute } from 'keycloakify/login/KcContext';
8
+ import type { Attribute } from 'keycloakify/login/KcContext';
9
9
  import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
10
10
  import type { I18n } from '@keycloakify/angular/login/i18n';
11
11
 
@@ -1,4 +1,3 @@
1
- import { AsyncPipe } from '@angular/common';
2
1
  import { ChangeDetectionStrategy, Component, forwardRef, inject, input, Renderer2, signal, WritableSignal } from '@angular/core';
3
2
  import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';
4
3
  import { ComponentReference } from '@keycloakify/angular/login/classes/component-reference';
@@ -18,7 +17,7 @@ import type { I18n } from '@keycloakify/angular/login/i18n';
18
17
  `
19
18
  ],
20
19
  changeDetection: ChangeDetectionStrategy.OnPush,
21
- imports: [KcClassDirective, AsyncPipe],
20
+ imports: [KcClassDirective],
22
21
  templateUrl: 'password-wrapper.component.html',
23
22
  providers: [
24
23
  {
@@ -3,10 +3,10 @@ import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css
3
3
  import { ComponentReference } from '@keycloakify/angular/login/classes/component-reference';
4
4
  import { KcClassDirective } from '@keycloakify/angular/login/directives/kc-class';
5
5
  import { ToNumberPipe } from '@keycloakify/angular/lib/pipes/to-number';
6
- import { type FormAction, type FormFieldError } from '@keycloakify/angular/login/services/user-profile-form';
6
+ import type { FormAction, FormFieldError } from '@keycloakify/angular/login/services/user-profile-form';
7
7
  import { LOGIN_CLASSES } from '@keycloakify/angular/login/tokens/classes';
8
8
  import { LOGIN_I18N } from '@keycloakify/angular/login/tokens/i18n';
9
- import { type Attribute } from 'keycloakify/login/KcContext';
9
+ import type { Attribute } from 'keycloakify/login/KcContext';
10
10
  import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
11
11
  import type { I18n } from '@keycloakify/angular/login/i18n';
12
12
 
@@ -3,9 +3,9 @@ import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css
3
3
  import { ComponentReference } from '@keycloakify/angular/login/classes/component-reference';
4
4
  import { KcClassDirective } from '@keycloakify/angular/login/directives/kc-class';
5
5
  import { ToNumberPipe } from '@keycloakify/angular/lib/pipes/to-number';
6
- import { type FormAction, type FormFieldError } from '@keycloakify/angular/login/services/user-profile-form';
6
+ import type { FormAction, FormFieldError } from '@keycloakify/angular/login/services/user-profile-form';
7
7
  import { LOGIN_CLASSES } from '@keycloakify/angular/login/tokens/classes';
8
- import { type Attribute } from 'keycloakify/login/KcContext';
8
+ import type { Attribute } from 'keycloakify/login/KcContext';
9
9
  import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
10
10
 
11
11
  @Component({
package/src/login/i18n.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import type { GenericI18n_noJsx } from 'keycloakify/login/i18n/noJsx/GenericI18n_noJsx';
2
- import { type MessageKey as MessageKey_defaultSet } from 'keycloakify/login/i18n/messages_defaultSet/types';
2
+ import type { MessageKey as MessageKey_defaultSet } from 'keycloakify/login/i18n/messages_defaultSet/types';
3
3
  /** INTERNAL: DO NOT IMPORT THIS */
4
4
  export type I18n = GenericI18n_noJsx<MessageKey_defaultSet, string>;
@@ -1,4 +1,4 @@
1
- import { AsyncPipe, CommonModule, NgClass } from '@angular/common';
1
+ import { CommonModule } from '@angular/common';
2
2
  import { ChangeDetectionStrategy, Component, forwardRef, inject, signal, type TemplateRef, viewChild } from '@angular/core';
3
3
  import { KcSanitizePipe } from '@keycloakify/angular/lib/pipes/kc-sanitize';
4
4
  import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';
@@ -16,7 +16,7 @@ import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
16
16
  selector: 'kc-login',
17
17
  templateUrl: 'login.component.html',
18
18
  changeDetection: ChangeDetectionStrategy.OnPush,
19
- imports: [KcClassDirective, AsyncPipe, KcSanitizePipe, PasswordWrapperComponent, NgClass, CommonModule],
19
+ imports: [KcClassDirective, KcSanitizePipe, PasswordWrapperComponent, CommonModule],
20
20
  providers: [
21
21
  {
22
22
  provide: ComponentReference,
@@ -1,13 +1,11 @@
1
1
  import { ChangeDetectionStrategy, Component, forwardRef, inject, type TemplateRef, viewChild } from '@angular/core';
2
2
  import { ComponentReference } from '@keycloakify/angular/login/classes/component-reference';
3
- import { KcClassDirective } from '@keycloakify/angular/login/directives/kc-class';
4
3
  import type { I18n } from '@keycloakify/angular/login/i18n';
5
4
  import type { KcContext } from '@keycloakify/angular/login/KcContext';
6
5
  import { LOGIN_I18N } from '@keycloakify/angular/login/tokens/i18n';
7
6
  import { KC_LOGIN_CONTEXT } from '@keycloakify/angular/login/tokens/kc-context';
8
7
 
9
8
  @Component({
10
- imports: [KcClassDirective],
11
9
  selector: 'kc-login-idp-link-email',
12
10
  templateUrl: 'login-idp-link-email.component.html',
13
11
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -9,7 +9,6 @@ import { KC_LOGIN_CONTEXT } from '@keycloakify/angular/login/tokens/kc-context';
9
9
  import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
10
10
 
11
11
  @Component({
12
- imports: [],
13
12
  selector: 'kc-login-page-expired',
14
13
  templateUrl: 'login-page-expired.component.html',
15
14
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -1,5 +1,5 @@
1
1
  import { ChangeDetectionStrategy, Component, forwardRef, inject, type TemplateRef, viewChild } from '@angular/core';
2
- import { type Script } from '@keycloakify/angular/lib/models/script';
2
+ import type { Script } from '@keycloakify/angular/lib/models/script';
3
3
  import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';
4
4
  import { ComponentReference } from '@keycloakify/angular/login/classes/component-reference';
5
5
  import { KcClassDirective } from '@keycloakify/angular/login/directives/kc-class';
@@ -1,4 +1,3 @@
1
- import { AsyncPipe, NgClass } from '@angular/common';
2
1
  import { ChangeDetectionStrategy, Component, forwardRef, inject, signal, type TemplateRef, viewChild } from '@angular/core';
3
2
  import { KcSanitizePipe } from '@keycloakify/angular/lib/pipes/kc-sanitize';
4
3
  import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';
@@ -15,7 +14,7 @@ import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
15
14
  selector: 'kc-login-username',
16
15
  templateUrl: 'login-username.component.html',
17
16
  changeDetection: ChangeDetectionStrategy.OnPush,
18
- imports: [KcClassDirective, AsyncPipe, KcSanitizePipe, NgClass],
17
+ imports: [KcClassDirective, KcSanitizePipe],
19
18
  providers: [
20
19
  {
21
20
  provide: ComponentReference,
@@ -1,7 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component, forwardRef, inject, type TemplateRef, viewChild } from '@angular/core';
2
2
  import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';
3
3
  import { ComponentReference } from '@keycloakify/angular/login/classes/component-reference';
4
- import { KcClassDirective } from '@keycloakify/angular/login/directives/kc-class';
5
4
  import type { I18n } from '@keycloakify/angular/login/i18n';
6
5
  import type { KcContext } from '@keycloakify/angular/login/KcContext';
7
6
  import { LOGIN_CLASSES } from '@keycloakify/angular/login/tokens/classes';
@@ -10,7 +9,6 @@ import { KC_LOGIN_CONTEXT } from '@keycloakify/angular/login/tokens/kc-context';
10
9
  import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
11
10
 
12
11
  @Component({
13
- imports: [KcClassDirective],
14
12
  selector: 'kc-login-verify-email',
15
13
  templateUrl: 'login-verify-email.component.html',
16
14
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -9,7 +9,6 @@ import { KC_LOGIN_CONTEXT } from '@keycloakify/angular/login/tokens/kc-context';
9
9
  import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
10
10
 
11
11
  @Component({
12
- imports: [],
13
12
  selector: 'kc-saml-post-form',
14
13
  templateUrl: 'saml-post-form.component.html',
15
14
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -1,4 +1,3 @@
1
- import { NgClass } from '@angular/common';
2
1
  import { ChangeDetectionStrategy, Component, forwardRef, inject, type TemplateRef, viewChild } from '@angular/core';
3
2
  import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';
4
3
  import { ComponentReference } from '@keycloakify/angular/login/classes/component-reference';
@@ -11,7 +10,7 @@ import { KC_LOGIN_CONTEXT } from '@keycloakify/angular/login/tokens/kc-context';
11
10
  import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
12
11
 
13
12
  @Component({
14
- imports: [KcClassDirective, NgClass],
13
+ imports: [KcClassDirective],
15
14
  selector: 'kc-select-authenticator',
16
15
  templateUrl: 'select-authenticator.component.html',
17
16
  changeDetection: ChangeDetectionStrategy.OnPush,