@keycloakify/angular 20.1.9 → 20.1.11

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 (167) hide show
  1. package/fesm2022/keycloakify-angular-account-directives-kc-class.mjs +3 -3
  2. package/fesm2022/keycloakify-angular-account-directives-kc-class.mjs.map +1 -1
  3. package/fesm2022/keycloakify-angular-account-pages-account.mjs +7 -8
  4. package/fesm2022/keycloakify-angular-account-pages-account.mjs.map +1 -1
  5. package/fesm2022/keycloakify-angular-account-pages-applications.mjs +7 -7
  6. package/fesm2022/keycloakify-angular-account-pages-applications.mjs.map +1 -1
  7. package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs +6 -8
  8. package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs.map +1 -1
  9. package/fesm2022/keycloakify-angular-account-pages-log.mjs +7 -7
  10. package/fesm2022/keycloakify-angular-account-pages-log.mjs.map +1 -1
  11. package/fesm2022/keycloakify-angular-account-pages-password.mjs +6 -7
  12. package/fesm2022/keycloakify-angular-account-pages-password.mjs.map +1 -1
  13. package/fesm2022/keycloakify-angular-account-pages-sessions.mjs +6 -7
  14. package/fesm2022/keycloakify-angular-account-pages-sessions.mjs.map +1 -1
  15. package/fesm2022/keycloakify-angular-account-pages-totp.mjs +6 -7
  16. package/fesm2022/keycloakify-angular-account-pages-totp.mjs.map +1 -1
  17. package/fesm2022/keycloakify-angular-account-providers-keycloakify-angular.mjs.map +1 -1
  18. package/fesm2022/keycloakify-angular-account-services-account-resource-injector.mjs +3 -3
  19. package/fesm2022/keycloakify-angular-account-services-i18n.mjs +3 -3
  20. package/fesm2022/keycloakify-angular-account-template.mjs +7 -8
  21. package/fesm2022/keycloakify-angular-account-template.mjs.map +1 -1
  22. package/fesm2022/keycloakify-angular-lib-directives-attributes.mjs +4 -4
  23. package/fesm2022/keycloakify-angular-lib-pipes-input-type.mjs +3 -3
  24. package/fesm2022/keycloakify-angular-lib-pipes-is-array-with-empty-object.mjs +3 -3
  25. package/fesm2022/keycloakify-angular-lib-pipes-kc-sanitize.mjs +3 -3
  26. package/fesm2022/keycloakify-angular-lib-pipes-to-array.mjs +3 -3
  27. package/fesm2022/keycloakify-angular-lib-pipes-to-number.mjs +3 -3
  28. package/fesm2022/keycloakify-angular-lib-services-resource-injector.mjs +3 -3
  29. package/fesm2022/keycloakify-angular-login-components-add-remove-buttons-multi-valued-attribute.mjs +5 -5
  30. package/fesm2022/keycloakify-angular-login-components-add-remove-buttons-multi-valued-attribute.mjs.map +1 -1
  31. package/fesm2022/keycloakify-angular-login-components-field-errors.mjs +4 -4
  32. package/fesm2022/keycloakify-angular-login-components-field-errors.mjs.map +1 -1
  33. package/fesm2022/keycloakify-angular-login-components-group-label.mjs +4 -4
  34. package/fesm2022/keycloakify-angular-login-components-group-label.mjs.map +1 -1
  35. package/fesm2022/keycloakify-angular-login-components-input-field-by-type.mjs +4 -4
  36. package/fesm2022/keycloakify-angular-login-components-input-field-by-type.mjs.map +1 -1
  37. package/fesm2022/keycloakify-angular-login-components-input-tag-selects.mjs +4 -4
  38. package/fesm2022/keycloakify-angular-login-components-input-tag-selects.mjs.map +1 -1
  39. package/fesm2022/keycloakify-angular-login-components-input-tag.mjs +4 -4
  40. package/fesm2022/keycloakify-angular-login-components-input-tag.mjs.map +1 -1
  41. package/fesm2022/keycloakify-angular-login-components-logout-other-sessions.mjs +3 -3
  42. package/fesm2022/keycloakify-angular-login-components-password-wrapper.mjs +5 -6
  43. package/fesm2022/keycloakify-angular-login-components-password-wrapper.mjs.map +1 -1
  44. package/fesm2022/keycloakify-angular-login-components-select-tag.mjs +4 -4
  45. package/fesm2022/keycloakify-angular-login-components-select-tag.mjs.map +1 -1
  46. package/fesm2022/keycloakify-angular-login-components-textarea-tag.mjs +4 -4
  47. package/fesm2022/keycloakify-angular-login-components-textarea-tag.mjs.map +1 -1
  48. package/fesm2022/keycloakify-angular-login-components-user-profile-form-fields.mjs +3 -3
  49. package/fesm2022/keycloakify-angular-login-components-user-profile-form-fields.mjs.map +1 -1
  50. package/fesm2022/keycloakify-angular-login-directives-kc-class.mjs +3 -3
  51. package/fesm2022/keycloakify-angular-login-directives-kc-class.mjs.map +1 -1
  52. package/fesm2022/keycloakify-angular-login-pages-code.mjs +4 -4
  53. package/fesm2022/keycloakify-angular-login-pages-code.mjs.map +1 -1
  54. package/fesm2022/keycloakify-angular-login-pages-delete-account-confirm.mjs +4 -4
  55. package/fesm2022/keycloakify-angular-login-pages-delete-account-confirm.mjs.map +1 -1
  56. package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs +4 -4
  57. package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs.map +1 -1
  58. package/fesm2022/keycloakify-angular-login-pages-error.mjs +4 -4
  59. package/fesm2022/keycloakify-angular-login-pages-error.mjs.map +1 -1
  60. package/fesm2022/keycloakify-angular-login-pages-frontchannel-logout.mjs +4 -4
  61. package/fesm2022/keycloakify-angular-login-pages-frontchannel-logout.mjs.map +1 -1
  62. package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs +4 -4
  63. package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs.map +1 -1
  64. package/fesm2022/keycloakify-angular-login-pages-info.mjs +4 -4
  65. package/fesm2022/keycloakify-angular-login-pages-info.mjs.map +1 -1
  66. package/fesm2022/keycloakify-angular-login-pages-login-config-totp.mjs +4 -4
  67. package/fesm2022/keycloakify-angular-login-pages-login-config-totp.mjs.map +1 -1
  68. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm-override.mjs +4 -4
  69. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm-override.mjs.map +1 -1
  70. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm.mjs +4 -4
  71. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm.mjs.map +1 -1
  72. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs +5 -6
  73. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs.map +1 -1
  74. package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs +4 -4
  75. package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs.map +1 -1
  76. package/fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs +4 -4
  77. package/fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs.map +1 -1
  78. package/fesm2022/keycloakify-angular-login-pages-login-otp.mjs +4 -4
  79. package/fesm2022/keycloakify-angular-login-pages-login-otp.mjs.map +1 -1
  80. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs +5 -5
  81. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs.map +1 -1
  82. package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs +4 -4
  83. package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs.map +1 -1
  84. package/fesm2022/keycloakify-angular-login-pages-login-password.mjs +4 -4
  85. package/fesm2022/keycloakify-angular-login-pages-login-password.mjs.map +1 -1
  86. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-config.mjs +4 -4
  87. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-config.mjs.map +1 -1
  88. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs +4 -4
  89. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs.map +1 -1
  90. package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs +4 -4
  91. package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs.map +1 -1
  92. package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs +4 -4
  93. package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs.map +1 -1
  94. package/fesm2022/keycloakify-angular-login-pages-login-update-password.mjs +4 -4
  95. package/fesm2022/keycloakify-angular-login-pages-login-update-password.mjs.map +1 -1
  96. package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs +4 -4
  97. package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs.map +1 -1
  98. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs +6 -7
  99. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs.map +1 -1
  100. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs +5 -6
  101. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs.map +1 -1
  102. package/fesm2022/keycloakify-angular-login-pages-login-x509-info.mjs +4 -4
  103. package/fesm2022/keycloakify-angular-login-pages-login-x509-info.mjs.map +1 -1
  104. package/fesm2022/keycloakify-angular-login-pages-login.mjs +8 -7
  105. package/fesm2022/keycloakify-angular-login-pages-login.mjs.map +1 -1
  106. package/fesm2022/keycloakify-angular-login-pages-logout-confirm.mjs +4 -4
  107. package/fesm2022/keycloakify-angular-login-pages-logout-confirm.mjs.map +1 -1
  108. package/fesm2022/keycloakify-angular-login-pages-register.mjs +4 -4
  109. package/fesm2022/keycloakify-angular-login-pages-register.mjs.map +1 -1
  110. package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs +5 -5
  111. package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs.map +1 -1
  112. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs +5 -6
  113. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs.map +1 -1
  114. package/fesm2022/keycloakify-angular-login-pages-terms.mjs +4 -4
  115. package/fesm2022/keycloakify-angular-login-pages-terms.mjs.map +1 -1
  116. package/fesm2022/keycloakify-angular-login-pages-update-email.mjs +4 -4
  117. package/fesm2022/keycloakify-angular-login-pages-update-email.mjs.map +1 -1
  118. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs +5 -6
  119. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs.map +1 -1
  120. package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs +5 -6
  121. package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs.map +1 -1
  122. package/fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs +4 -4
  123. package/fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs.map +1 -1
  124. package/fesm2022/keycloakify-angular-login-providers-keycloakify-angular.mjs.map +1 -1
  125. package/fesm2022/keycloakify-angular-login-services-i18n.mjs +3 -3
  126. package/fesm2022/keycloakify-angular-login-services-login-resource-injector.mjs +3 -3
  127. package/fesm2022/keycloakify-angular-login-services-login-resource-injector.mjs.map +1 -1
  128. package/fesm2022/keycloakify-angular-login-services-user-profile-form.mjs +3 -3
  129. package/fesm2022/keycloakify-angular-login-template.mjs +4 -4
  130. package/fesm2022/keycloakify-angular-login-template.mjs.map +1 -1
  131. package/package.json +1 -1
  132. package/src/account/i18n.ts +1 -1
  133. package/src/account/pages/account/account.component.html +4 -4
  134. package/src/account/pages/account/account.component.ts +3 -3
  135. package/src/account/pages/applications/applications.component.ts +4 -3
  136. package/src/account/pages/federatedIdentity/federatedIdentity.component.ts +2 -4
  137. package/src/account/pages/log/log.component.ts +4 -3
  138. package/src/account/pages/password/password.component.ts +3 -3
  139. package/src/account/pages/sessions/sessions.component.ts +3 -3
  140. package/src/account/pages/totp/totp.component.ts +3 -3
  141. package/src/account/providers/keycloakify-angular/keycloakify-angular.providers.ts +2 -2
  142. package/src/account/template/template.component.html +8 -8
  143. package/src/account/template/template.component.ts +1 -2
  144. package/src/bin/initialize-account-theme/boilerplate/KcPageStory.ts +2 -1
  145. package/src/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.ts +1 -2
  146. package/src/login/components/field-errors/field-errors.component.ts +2 -2
  147. package/src/login/components/group-label/group-label.component.ts +1 -1
  148. package/src/login/components/input-field-by-type/input-field-by-type.component.ts +1 -1
  149. package/src/login/components/input-tag/input-tag.component.ts +1 -1
  150. package/src/login/components/input-tag-selects/input-tag-selects.component.ts +2 -2
  151. package/src/login/components/password-wrapper/password-wrapper.component.ts +1 -2
  152. package/src/login/components/select-tag/select-tag.component.ts +2 -2
  153. package/src/login/components/textarea-tag/textarea-tag.component.ts +2 -2
  154. package/src/login/i18n.ts +1 -1
  155. package/src/login/pages/login/login.component.ts +2 -2
  156. package/src/login/pages/login-idp-link-email/login-idp-link-email.component.ts +0 -2
  157. package/src/login/pages/login-page-expired/login-page-expired.component.ts +0 -1
  158. package/src/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.ts +1 -1
  159. package/src/login/pages/login-username/login-username.component.ts +1 -2
  160. package/src/login/pages/login-verify-email/login-verify-email.component.ts +0 -2
  161. package/src/login/pages/saml-post-form/saml-post-form.component.ts +0 -1
  162. package/src/login/pages/select-authenticator/select-authenticator.component.ts +1 -2
  163. package/src/login/pages/webauthn-authenticate/webauthn-authenticate.component.ts +2 -3
  164. package/src/login/pages/webauthn-error/webauthn-error.component.ts +1 -2
  165. package/src/login/pages/webauthn-register/webauthn-register.component.ts +1 -1
  166. package/src/login/providers/keycloakify-angular/keycloakify-angular.providers.ts +1 -1
  167. package/src/login/services/login-resource-injector/login-resource-injector.service.ts +1 -1
@@ -104,15 +104,15 @@ class TemplateComponent extends ComponentReference {
104
104
  this.#cdr.markForCheck();
105
105
  this.#effectRef.destroy();
106
106
  }
107
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: TemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
108
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: TemplateComponent, isStandalone: true, selector: "kc-root", inputs: { page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, userProfileFormFields: { classPropertyName: "userProfileFormFields", publicName: "userProfileFormFields", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: TemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.6", type: TemplateComponent, isStandalone: true, selector: "kc-root", inputs: { page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, userProfileFormFields: { classPropertyName: "userProfileFormFields", publicName: "userProfileFormFields", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
109
109
  {
110
110
  provide: ComponentReference,
111
111
  useExisting: forwardRef(() => TemplateComponent)
112
112
  }
113
113
  ], viewQueries: [{ propertyName: "pageRef", first: true, predicate: ["pageRef"], descendants: true, read: ViewContainerRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let auth = kcContext.auth;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n@let url = kcContext.url;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <div [kcClass]=\"'kcLoginClass'\">\n <div\n id=\"kc-header\"\n [kcClass]=\"'kcHeaderClass'\"\n >\n <div\n id=\"kc-header-wrapper\"\n [kcClass]=\"'kcHeaderWrapperClass'\"\n >\n <div [innerHTML]=\"realm?.displayNameHtml ?? '' | kcSanitize: 'html'\"></div>\n </div>\n </div>\n\n <div [kcClass]=\"'kcFormCardClass'\">\n <header [kcClass]=\"'kcFormHeaderClass'\">\n <!-- Locale switcher -->\n @if (i18n.enabledLanguages.length > 1) {\n <div\n id=\"kc-locale\"\n [kcClass]=\"'kcLocaleMainClass'\"\n >\n <div\n id=\"kc-locale-wrapper\"\n [kcClass]=\"'kcLocaleWrapperClass'\"\n >\n <div\n id=\"kc-locale-dropdown\"\n class=\"menu-button-links\"\n [kcClass]=\"'kcLocaleDropDownClass'\"\n >\n <button\n tabindex=\"1\"\n id=\"kc-current-locale-link\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n aria-controls=\"language-switch1\"\n [attr.aria-label]=\"i18n.msgStr('languages')\"\n >\n {{ i18n.currentLanguage.label }}\n </button>\n <ul\n role=\"menu\"\n tabindex=\"-1\"\n aria-labelledby=\"kc-current-locale-link\"\n aria-activedescendant=\"\"\n id=\"language-switch1\"\n [kcClass]=\"'kcLocaleListClass'\"\n >\n @for (entry of i18n.enabledLanguages; track entry; let idx = $index) {\n <li\n role=\"none\"\n [kcClass]=\"'kcLocaleListItemClass'\"\n >\n <a\n role=\"menuitem\"\n tabindex=\"-1\"\n [href]=\"entry.href\"\n [kcClass]=\"'kcLocaleItemClass'\"\n [id]=\"'language-' + idx\"\n >\n {{ entry.label }}\n </a>\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n }\n\n <!-- Header content -->\n <ng-template #node>\n @if (auth && !auth.showUsername && !auth.showResetCredentials) {\n <h1 id=\"kc-page-title\">\n @let header = headerNode && headerNode();\n @if (header) {\n <ng-container [ngTemplateOutlet]=\"header\" />\n }\n </h1>\n } @else {\n <div\n id=\"kc-username\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <label id=\"kc-attempted-username\">{{ auth?.attemptedUsername }}</label>\n <a\n id=\"reset-login\"\n [href]=\"url?.loginRestartFlowUrl\"\n [attr.aria-label]=\"i18n.msgStr('restartLoginTooltip')\"\n >\n <div class=\"kc-login-tooltip\">\n <i [kcClass]=\"'kcResetFlowIcon'\"></i>\n <span class=\"kc-tooltip-text\">\n {{ i18n.msgStr('restartLoginTooltip') }}\n </span>\n </div>\n </a>\n </div>\n }\n </ng-template>\n\n @if (displayRequiredFields) {\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div\n class=\"subtitle\"\n [kcClass]=\"'kcLabelWrapperClass'\"\n >\n <span class=\"subtitle\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </span>\n </div>\n <div class=\"col-md-10\">\n <ng-container [ngTemplateOutlet]=\"node\" />\n </div>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"node\" />\n }\n </header>\n\n <div id=\"kc-content\">\n <div id=\"kc-content-wrapper\">\n <!-- Message display -->\n @if (displayMessage && message && (message.type !== 'warning' || !isAppInitiatedAction)) {\n <div\n [kcClass]=\"'kcAlertClass'\"\n [ngClass]=\"message.type === 'error' ? 'pf-m-danger' : 'pf-m-' + message.type\"\n [class]=\"'alert-' + message.type\"\n >\n <div class=\"pf-c-alert__icon\">\n @switch (message.type) {\n @case ('success') {\n <span [kcClass]=\"'kcFeedbackSuccessIcon'\"></span>\n }\n @case ('warning') {\n <span [kcClass]=\"'kcFeedbackWarningIcon'\"></span>\n }\n @case ('info') {\n <span [kcClass]=\"'kcFeedbackInfoIcon'\"></span>\n }\n @case ('error') {\n <span [kcClass]=\"'kcFeedbackErrorIcon'\"></span>\n }\n }\n </div>\n <span\n [kcClass]=\"'kcAlertTitleClass'\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <!-- Content -->\n <ng-template #pageRef></ng-template>\n\n @if (!!auth && auth?.showTryAnotherWayLink) {\n <form\n id=\"kc-select-try-another-way-form\"\n method=\"post\"\n [action]=\"url?.loginAction\"\n >\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div [kcClass]=\"'kcFormGroupClass'\">\n <input\n type=\"hidden\"\n name=\"tryAnotherWay\"\n value=\"on\"\n />\n <a\n id=\"try-another-way\"\n (click)=\"tryAnotherWay()\"\n >\n {{ i18n.msgStr('doTryAnotherWay') }}\n </a>\n </div>\n </div>\n </form>\n }\n @let socialProviders = socialProvidersNode && socialProvidersNode();\n @if (socialProviders) {\n <ng-container [ngTemplateOutlet]=\"socialProviders\" />\n }\n <!-- Info display -->\n @if (displayInfo) {\n <div\n id=\"kc-info\"\n [kcClass]=\"'kcSignUpClass'\"\n >\n <div\n id=\"kc-info-wrapper\"\n [kcClass]=\"'kcInfoAreaWrapperClass'\"\n >\n @let info = infoNode && infoNode();\n @if (info) {\n <ng-container [ngTemplateOutlet]=\"info\" />\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
114
114
  }
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: TemplateComponent, decorators: [{
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: TemplateComponent, decorators: [{
116
116
  type: Component,
117
117
  args: [{ selector: 'kc-root', imports: [AsyncPipe, KcSanitizePipe, NgTemplateOutlet, KcClassDirective], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
118
118
  {
@@ -120,7 +120,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
120
120
  useExisting: forwardRef(() => TemplateComponent)
121
121
  }
122
122
  ], template: "@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let auth = kcContext.auth;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n@let url = kcContext.url;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <div [kcClass]=\"'kcLoginClass'\">\n <div\n id=\"kc-header\"\n [kcClass]=\"'kcHeaderClass'\"\n >\n <div\n id=\"kc-header-wrapper\"\n [kcClass]=\"'kcHeaderWrapperClass'\"\n >\n <div [innerHTML]=\"realm?.displayNameHtml ?? '' | kcSanitize: 'html'\"></div>\n </div>\n </div>\n\n <div [kcClass]=\"'kcFormCardClass'\">\n <header [kcClass]=\"'kcFormHeaderClass'\">\n <!-- Locale switcher -->\n @if (i18n.enabledLanguages.length > 1) {\n <div\n id=\"kc-locale\"\n [kcClass]=\"'kcLocaleMainClass'\"\n >\n <div\n id=\"kc-locale-wrapper\"\n [kcClass]=\"'kcLocaleWrapperClass'\"\n >\n <div\n id=\"kc-locale-dropdown\"\n class=\"menu-button-links\"\n [kcClass]=\"'kcLocaleDropDownClass'\"\n >\n <button\n tabindex=\"1\"\n id=\"kc-current-locale-link\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n aria-controls=\"language-switch1\"\n [attr.aria-label]=\"i18n.msgStr('languages')\"\n >\n {{ i18n.currentLanguage.label }}\n </button>\n <ul\n role=\"menu\"\n tabindex=\"-1\"\n aria-labelledby=\"kc-current-locale-link\"\n aria-activedescendant=\"\"\n id=\"language-switch1\"\n [kcClass]=\"'kcLocaleListClass'\"\n >\n @for (entry of i18n.enabledLanguages; track entry; let idx = $index) {\n <li\n role=\"none\"\n [kcClass]=\"'kcLocaleListItemClass'\"\n >\n <a\n role=\"menuitem\"\n tabindex=\"-1\"\n [href]=\"entry.href\"\n [kcClass]=\"'kcLocaleItemClass'\"\n [id]=\"'language-' + idx\"\n >\n {{ entry.label }}\n </a>\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n }\n\n <!-- Header content -->\n <ng-template #node>\n @if (auth && !auth.showUsername && !auth.showResetCredentials) {\n <h1 id=\"kc-page-title\">\n @let header = headerNode && headerNode();\n @if (header) {\n <ng-container [ngTemplateOutlet]=\"header\" />\n }\n </h1>\n } @else {\n <div\n id=\"kc-username\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <label id=\"kc-attempted-username\">{{ auth?.attemptedUsername }}</label>\n <a\n id=\"reset-login\"\n [href]=\"url?.loginRestartFlowUrl\"\n [attr.aria-label]=\"i18n.msgStr('restartLoginTooltip')\"\n >\n <div class=\"kc-login-tooltip\">\n <i [kcClass]=\"'kcResetFlowIcon'\"></i>\n <span class=\"kc-tooltip-text\">\n {{ i18n.msgStr('restartLoginTooltip') }}\n </span>\n </div>\n </a>\n </div>\n }\n </ng-template>\n\n @if (displayRequiredFields) {\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div\n class=\"subtitle\"\n [kcClass]=\"'kcLabelWrapperClass'\"\n >\n <span class=\"subtitle\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </span>\n </div>\n <div class=\"col-md-10\">\n <ng-container [ngTemplateOutlet]=\"node\" />\n </div>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"node\" />\n }\n </header>\n\n <div id=\"kc-content\">\n <div id=\"kc-content-wrapper\">\n <!-- Message display -->\n @if (displayMessage && message && (message.type !== 'warning' || !isAppInitiatedAction)) {\n <div\n [kcClass]=\"'kcAlertClass'\"\n [ngClass]=\"message.type === 'error' ? 'pf-m-danger' : 'pf-m-' + message.type\"\n [class]=\"'alert-' + message.type\"\n >\n <div class=\"pf-c-alert__icon\">\n @switch (message.type) {\n @case ('success') {\n <span [kcClass]=\"'kcFeedbackSuccessIcon'\"></span>\n }\n @case ('warning') {\n <span [kcClass]=\"'kcFeedbackWarningIcon'\"></span>\n }\n @case ('info') {\n <span [kcClass]=\"'kcFeedbackInfoIcon'\"></span>\n }\n @case ('error') {\n <span [kcClass]=\"'kcFeedbackErrorIcon'\"></span>\n }\n }\n </div>\n <span\n [kcClass]=\"'kcAlertTitleClass'\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <!-- Content -->\n <ng-template #pageRef></ng-template>\n\n @if (!!auth && auth?.showTryAnotherWayLink) {\n <form\n id=\"kc-select-try-another-way-form\"\n method=\"post\"\n [action]=\"url?.loginAction\"\n >\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div [kcClass]=\"'kcFormGroupClass'\">\n <input\n type=\"hidden\"\n name=\"tryAnotherWay\"\n value=\"on\"\n />\n <a\n id=\"try-another-way\"\n (click)=\"tryAnotherWay()\"\n >\n {{ i18n.msgStr('doTryAnotherWay') }}\n </a>\n </div>\n </div>\n </form>\n }\n @let socialProviders = socialProvidersNode && socialProvidersNode();\n @if (socialProviders) {\n <ng-container [ngTemplateOutlet]=\"socialProviders\" />\n }\n <!-- Info display -->\n @if (displayInfo) {\n <div\n id=\"kc-info\"\n [kcClass]=\"'kcSignUpClass'\"\n >\n <div\n id=\"kc-info-wrapper\"\n [kcClass]=\"'kcInfoAreaWrapperClass'\"\n >\n @let info = infoNode && infoNode();\n @if (info) {\n <ng-container [ngTemplateOutlet]=\"info\" />\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n" }]
123
- }], ctorParameters: () => [] });
123
+ }], ctorParameters: () => [], propDecorators: { page: [{ type: i0.Input, args: [{ isSignal: true, alias: "page", required: false }] }], pageRef: [{ type: i0.ViewChild, args: ['pageRef', { ...{ read: ViewContainerRef }, isSignal: true }] }], userProfileFormFields: [{ type: i0.Input, args: [{ isSignal: true, alias: "userProfileFormFields", required: false }] }] } });
124
124
 
125
125
  /**
126
126
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"keycloakify-angular-login-template.mjs","sources":["../../src/login/template/template.component.ts","../../src/login/template/template.component.html","../../src/login/template/keycloakify-angular-login-template.ts"],"sourcesContent":["import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n EffectRef,\n forwardRef,\n inject,\n input,\n Renderer2,\n type Signal,\n type TemplateRef,\n type Type,\n viewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { KcSanitizePipe } from '@keycloakify/angular/lib/pipes/kc-sanitize';\nimport { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';\nimport { ComponentReference } from '@keycloakify/angular/login/classes/component-reference';\nimport { KcClassDirective } from '@keycloakify/angular/login/directives/kc-class';\nimport type { I18n } from '@keycloakify/angular/login/i18n';\nimport { KcContext } from '@keycloakify/angular/login/KcContext';\nimport { LoginResourceInjectorService } from '@keycloakify/angular/login/services/login-resource-injector';\nimport { LOGIN_CLASSES } from '@keycloakify/angular/login/tokens/classes';\nimport { LOGIN_I18N } from '@keycloakify/angular/login/tokens/i18n';\nimport { KC_LOGIN_CONTEXT } from '@keycloakify/angular/login/tokens/kc-context';\nimport { type ClassKey, getKcClsx } from 'keycloakify/login/lib/kcClsx';\nimport type { Observable } from 'rxjs';\n\n@Component({\n selector: 'kc-root',\n templateUrl: 'template.component.html',\n imports: [AsyncPipe, KcSanitizePipe, NgTemplateOutlet, KcClassDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: ComponentReference,\n useExisting: forwardRef(() => TemplateComponent)\n }\n ]\n})\nexport class TemplateComponent extends ComponentReference {\n i18n = inject<I18n>(LOGIN_I18N);\n renderer = inject(Renderer2);\n #cdr = inject(ChangeDetectorRef);\n #effectRef: EffectRef;\n meta = inject(Meta);\n title = inject(Title);\n kcContext = inject<KcContext>(KC_LOGIN_CONTEXT);\n override doUseDefaultCss = inject<boolean>(USE_DEFAULT_CSS);\n override classes = inject<Partial<Record<ClassKey, string>>>(LOGIN_CLASSES);\n loginResourceInjectorService = inject(LoginResourceInjectorService);\n\n displayInfo = false;\n displayMessage = true;\n displayRequiredFields = false;\n documentTitle: string | undefined;\n bodyClassName: string | undefined;\n\n isReadyToRender$: Observable<boolean>;\n\n page = input<Type<unknown>>();\n pageRef = viewChild('pageRef', { read: ViewContainerRef });\n\n userProfileFormFields = input<Type<unknown>>();\n headerNode: Signal<TemplateRef<HTMLElement>> | undefined;\n infoNode: Signal<TemplateRef<HTMLElement>> | undefined;\n socialProvidersNode: Signal<TemplateRef<HTMLElement>> | undefined;\n\n constructor() {\n super();\n\n this.isReadyToRender$ = this.loginResourceInjectorService.injectResource(this.doUseDefaultCss);\n this.#effectRef = effect(\n () => {\n const page = this.page();\n const pageRef = this.pageRef();\n if (!page || !pageRef) return;\n\n const userProfileFormFields = this.userProfileFormFields();\n\n const compRef = pageRef.createComponent(page);\n if ('userProfileFormFields' in (compRef.instance as object) && userProfileFormFields) {\n compRef.setInput('userProfileFormFields', userProfileFormFields);\n }\n this.onComponentCreated(compRef.instance as object);\n },\n { manualCleanup: true }\n );\n }\n\n private applyKcIndexClasses() {\n const kcClsx = getKcClsx({\n doUseDefaultCss: this.doUseDefaultCss,\n classes: this.classes\n }).kcClsx;\n const kcBodyClass = this.bodyClassName ?? kcClsx('kcBodyClass');\n const kcHtmlClass = kcClsx('kcHtmlClass');\n const kcBodyClasses = kcBodyClass.split(/\\s+/);\n const kcHtmlClasses = kcHtmlClass.split(/\\s+/);\n kcBodyClasses.forEach(klass => {\n this.renderer.addClass(document.body, klass);\n });\n kcHtmlClasses.forEach(klass => {\n this.renderer.addClass(document.documentElement, klass);\n });\n }\n\n tryAnotherWay() {\n document.forms['kc-select-try-another-way-form' as never].requestSubmit();\n }\n\n onComponentCreated(compRef: object) {\n if ('displayInfo' in compRef) {\n this.displayInfo = !!compRef.displayInfo as boolean;\n }\n if ('displayMessage' in compRef) {\n this.displayMessage = !!compRef.displayMessage as boolean;\n }\n if ('displayRequiredFields' in compRef) {\n this.displayRequiredFields = !!compRef.displayRequiredFields as boolean;\n }\n if ('documentTitle' in compRef && compRef.documentTitle) {\n this.documentTitle = compRef.documentTitle as string;\n }\n if ('bodyClassName' in compRef && compRef.bodyClassName) {\n this.bodyClassName = compRef.bodyClassName as string;\n }\n if ('headerNode' in compRef && compRef.headerNode) {\n this.headerNode = computed(() => {\n const headerNode = (compRef.headerNode as Signal<TemplateRef<HTMLElement>>)();\n return headerNode;\n });\n }\n if ('infoNode' in compRef && compRef.infoNode) {\n this.infoNode = computed(() => {\n const infoNode = (compRef.infoNode as Signal<TemplateRef<HTMLElement>>)();\n return infoNode;\n });\n }\n if ('socialProvidersNode' in compRef && compRef.socialProvidersNode) {\n this.socialProvidersNode = computed(() => {\n const socialProvidersNode = (compRef.socialProvidersNode as Signal<TemplateRef<HTMLElement>>)();\n return socialProvidersNode;\n });\n }\n this.title.setTitle(this.documentTitle ?? this.i18n.msgStr('loginTitle', this.kcContext.realm.displayName));\n this.applyKcIndexClasses();\n this.#cdr.markForCheck();\n this.#effectRef.destroy();\n }\n}\n","@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let auth = kcContext.auth;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n@let url = kcContext.url;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <div [kcClass]=\"'kcLoginClass'\">\n <div\n id=\"kc-header\"\n [kcClass]=\"'kcHeaderClass'\"\n >\n <div\n id=\"kc-header-wrapper\"\n [kcClass]=\"'kcHeaderWrapperClass'\"\n >\n <div [innerHTML]=\"realm?.displayNameHtml ?? '' | kcSanitize: 'html'\"></div>\n </div>\n </div>\n\n <div [kcClass]=\"'kcFormCardClass'\">\n <header [kcClass]=\"'kcFormHeaderClass'\">\n <!-- Locale switcher -->\n @if (i18n.enabledLanguages.length > 1) {\n <div\n id=\"kc-locale\"\n [kcClass]=\"'kcLocaleMainClass'\"\n >\n <div\n id=\"kc-locale-wrapper\"\n [kcClass]=\"'kcLocaleWrapperClass'\"\n >\n <div\n id=\"kc-locale-dropdown\"\n class=\"menu-button-links\"\n [kcClass]=\"'kcLocaleDropDownClass'\"\n >\n <button\n tabindex=\"1\"\n id=\"kc-current-locale-link\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n aria-controls=\"language-switch1\"\n [attr.aria-label]=\"i18n.msgStr('languages')\"\n >\n {{ i18n.currentLanguage.label }}\n </button>\n <ul\n role=\"menu\"\n tabindex=\"-1\"\n aria-labelledby=\"kc-current-locale-link\"\n aria-activedescendant=\"\"\n id=\"language-switch1\"\n [kcClass]=\"'kcLocaleListClass'\"\n >\n @for (entry of i18n.enabledLanguages; track entry; let idx = $index) {\n <li\n role=\"none\"\n [kcClass]=\"'kcLocaleListItemClass'\"\n >\n <a\n role=\"menuitem\"\n tabindex=\"-1\"\n [href]=\"entry.href\"\n [kcClass]=\"'kcLocaleItemClass'\"\n [id]=\"'language-' + idx\"\n >\n {{ entry.label }}\n </a>\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n }\n\n <!-- Header content -->\n <ng-template #node>\n @if (auth && !auth.showUsername && !auth.showResetCredentials) {\n <h1 id=\"kc-page-title\">\n @let header = headerNode && headerNode();\n @if (header) {\n <ng-container [ngTemplateOutlet]=\"header\" />\n }\n </h1>\n } @else {\n <div\n id=\"kc-username\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <label id=\"kc-attempted-username\">{{ auth?.attemptedUsername }}</label>\n <a\n id=\"reset-login\"\n [href]=\"url?.loginRestartFlowUrl\"\n [attr.aria-label]=\"i18n.msgStr('restartLoginTooltip')\"\n >\n <div class=\"kc-login-tooltip\">\n <i [kcClass]=\"'kcResetFlowIcon'\"></i>\n <span class=\"kc-tooltip-text\">\n {{ i18n.msgStr('restartLoginTooltip') }}\n </span>\n </div>\n </a>\n </div>\n }\n </ng-template>\n\n @if (displayRequiredFields) {\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div\n class=\"subtitle\"\n [kcClass]=\"'kcLabelWrapperClass'\"\n >\n <span class=\"subtitle\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </span>\n </div>\n <div class=\"col-md-10\">\n <ng-container [ngTemplateOutlet]=\"node\" />\n </div>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"node\" />\n }\n </header>\n\n <div id=\"kc-content\">\n <div id=\"kc-content-wrapper\">\n <!-- Message display -->\n @if (displayMessage && message && (message.type !== 'warning' || !isAppInitiatedAction)) {\n <div\n [kcClass]=\"'kcAlertClass'\"\n [ngClass]=\"message.type === 'error' ? 'pf-m-danger' : 'pf-m-' + message.type\"\n [class]=\"'alert-' + message.type\"\n >\n <div class=\"pf-c-alert__icon\">\n @switch (message.type) {\n @case ('success') {\n <span [kcClass]=\"'kcFeedbackSuccessIcon'\"></span>\n }\n @case ('warning') {\n <span [kcClass]=\"'kcFeedbackWarningIcon'\"></span>\n }\n @case ('info') {\n <span [kcClass]=\"'kcFeedbackInfoIcon'\"></span>\n }\n @case ('error') {\n <span [kcClass]=\"'kcFeedbackErrorIcon'\"></span>\n }\n }\n </div>\n <span\n [kcClass]=\"'kcAlertTitleClass'\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <!-- Content -->\n <ng-template #pageRef></ng-template>\n\n @if (!!auth && auth?.showTryAnotherWayLink) {\n <form\n id=\"kc-select-try-another-way-form\"\n method=\"post\"\n [action]=\"url?.loginAction\"\n >\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div [kcClass]=\"'kcFormGroupClass'\">\n <input\n type=\"hidden\"\n name=\"tryAnotherWay\"\n value=\"on\"\n />\n <a\n id=\"try-another-way\"\n (click)=\"tryAnotherWay()\"\n >\n {{ i18n.msgStr('doTryAnotherWay') }}\n </a>\n </div>\n </div>\n </form>\n }\n @let socialProviders = socialProvidersNode && socialProvidersNode();\n @if (socialProviders) {\n <ng-container [ngTemplateOutlet]=\"socialProviders\" />\n }\n <!-- Info display -->\n @if (displayInfo) {\n <div\n id=\"kc-info\"\n [kcClass]=\"'kcSignUpClass'\"\n >\n <div\n id=\"kc-info-wrapper\"\n [kcClass]=\"'kcInfoAreaWrapperClass'\"\n >\n @let info = infoNode && infoNode();\n @if (info) {\n <ng-container [ngTemplateOutlet]=\"info\" />\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keycloakify-angular-login-template.mjs","sources":["../../src/login/template/template.component.ts","../../src/login/template/template.component.html","../../src/login/template/keycloakify-angular-login-template.ts"],"sourcesContent":["import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n EffectRef,\n forwardRef,\n inject,\n input,\n Renderer2,\n type Signal,\n type TemplateRef,\n type Type,\n viewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { KcSanitizePipe } from '@keycloakify/angular/lib/pipes/kc-sanitize';\nimport { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';\nimport { ComponentReference } from '@keycloakify/angular/login/classes/component-reference';\nimport { KcClassDirective } from '@keycloakify/angular/login/directives/kc-class';\nimport type { I18n } from '@keycloakify/angular/login/i18n';\nimport { KcContext } from '@keycloakify/angular/login/KcContext';\nimport { LoginResourceInjectorService } from '@keycloakify/angular/login/services/login-resource-injector';\nimport { LOGIN_CLASSES } from '@keycloakify/angular/login/tokens/classes';\nimport { LOGIN_I18N } from '@keycloakify/angular/login/tokens/i18n';\nimport { KC_LOGIN_CONTEXT } from '@keycloakify/angular/login/tokens/kc-context';\nimport { type ClassKey, getKcClsx } from 'keycloakify/login/lib/kcClsx';\nimport type { Observable } from 'rxjs';\n\n@Component({\n selector: 'kc-root',\n templateUrl: 'template.component.html',\n imports: [AsyncPipe, KcSanitizePipe, NgTemplateOutlet, KcClassDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: ComponentReference,\n useExisting: forwardRef(() => TemplateComponent)\n }\n ]\n})\nexport class TemplateComponent extends ComponentReference {\n i18n = inject<I18n>(LOGIN_I18N);\n renderer = inject(Renderer2);\n #cdr = inject(ChangeDetectorRef);\n #effectRef: EffectRef;\n meta = inject(Meta);\n title = inject(Title);\n kcContext = inject<KcContext>(KC_LOGIN_CONTEXT);\n override doUseDefaultCss = inject<boolean>(USE_DEFAULT_CSS);\n override classes = inject<Partial<Record<ClassKey, string>>>(LOGIN_CLASSES);\n loginResourceInjectorService = inject(LoginResourceInjectorService);\n\n displayInfo = false;\n displayMessage = true;\n displayRequiredFields = false;\n documentTitle: string | undefined;\n bodyClassName: string | undefined;\n\n isReadyToRender$: Observable<boolean>;\n\n page = input<Type<unknown>>();\n pageRef = viewChild('pageRef', { read: ViewContainerRef });\n\n userProfileFormFields = input<Type<unknown>>();\n headerNode: Signal<TemplateRef<HTMLElement>> | undefined;\n infoNode: Signal<TemplateRef<HTMLElement>> | undefined;\n socialProvidersNode: Signal<TemplateRef<HTMLElement>> | undefined;\n\n constructor() {\n super();\n\n this.isReadyToRender$ = this.loginResourceInjectorService.injectResource(this.doUseDefaultCss);\n this.#effectRef = effect(\n () => {\n const page = this.page();\n const pageRef = this.pageRef();\n if (!page || !pageRef) return;\n\n const userProfileFormFields = this.userProfileFormFields();\n\n const compRef = pageRef.createComponent(page);\n if ('userProfileFormFields' in (compRef.instance as object) && userProfileFormFields) {\n compRef.setInput('userProfileFormFields', userProfileFormFields);\n }\n this.onComponentCreated(compRef.instance as object);\n },\n { manualCleanup: true }\n );\n }\n\n private applyKcIndexClasses() {\n const kcClsx = getKcClsx({\n doUseDefaultCss: this.doUseDefaultCss,\n classes: this.classes\n }).kcClsx;\n const kcBodyClass = this.bodyClassName ?? kcClsx('kcBodyClass');\n const kcHtmlClass = kcClsx('kcHtmlClass');\n const kcBodyClasses = kcBodyClass.split(/\\s+/);\n const kcHtmlClasses = kcHtmlClass.split(/\\s+/);\n kcBodyClasses.forEach(klass => {\n this.renderer.addClass(document.body, klass);\n });\n kcHtmlClasses.forEach(klass => {\n this.renderer.addClass(document.documentElement, klass);\n });\n }\n\n tryAnotherWay() {\n document.forms['kc-select-try-another-way-form' as never].requestSubmit();\n }\n\n onComponentCreated(compRef: object) {\n if ('displayInfo' in compRef) {\n this.displayInfo = !!compRef.displayInfo as boolean;\n }\n if ('displayMessage' in compRef) {\n this.displayMessage = !!compRef.displayMessage as boolean;\n }\n if ('displayRequiredFields' in compRef) {\n this.displayRequiredFields = !!compRef.displayRequiredFields as boolean;\n }\n if ('documentTitle' in compRef && compRef.documentTitle) {\n this.documentTitle = compRef.documentTitle as string;\n }\n if ('bodyClassName' in compRef && compRef.bodyClassName) {\n this.bodyClassName = compRef.bodyClassName as string;\n }\n if ('headerNode' in compRef && compRef.headerNode) {\n this.headerNode = computed(() => {\n const headerNode = (compRef.headerNode as Signal<TemplateRef<HTMLElement>>)();\n return headerNode;\n });\n }\n if ('infoNode' in compRef && compRef.infoNode) {\n this.infoNode = computed(() => {\n const infoNode = (compRef.infoNode as Signal<TemplateRef<HTMLElement>>)();\n return infoNode;\n });\n }\n if ('socialProvidersNode' in compRef && compRef.socialProvidersNode) {\n this.socialProvidersNode = computed(() => {\n const socialProvidersNode = (compRef.socialProvidersNode as Signal<TemplateRef<HTMLElement>>)();\n return socialProvidersNode;\n });\n }\n this.title.setTitle(this.documentTitle ?? this.i18n.msgStr('loginTitle', this.kcContext.realm.displayName));\n this.applyKcIndexClasses();\n this.#cdr.markForCheck();\n this.#effectRef.destroy();\n }\n}\n","@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let auth = kcContext.auth;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n@let url = kcContext.url;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <div [kcClass]=\"'kcLoginClass'\">\n <div\n id=\"kc-header\"\n [kcClass]=\"'kcHeaderClass'\"\n >\n <div\n id=\"kc-header-wrapper\"\n [kcClass]=\"'kcHeaderWrapperClass'\"\n >\n <div [innerHTML]=\"realm?.displayNameHtml ?? '' | kcSanitize: 'html'\"></div>\n </div>\n </div>\n\n <div [kcClass]=\"'kcFormCardClass'\">\n <header [kcClass]=\"'kcFormHeaderClass'\">\n <!-- Locale switcher -->\n @if (i18n.enabledLanguages.length > 1) {\n <div\n id=\"kc-locale\"\n [kcClass]=\"'kcLocaleMainClass'\"\n >\n <div\n id=\"kc-locale-wrapper\"\n [kcClass]=\"'kcLocaleWrapperClass'\"\n >\n <div\n id=\"kc-locale-dropdown\"\n class=\"menu-button-links\"\n [kcClass]=\"'kcLocaleDropDownClass'\"\n >\n <button\n tabindex=\"1\"\n id=\"kc-current-locale-link\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n aria-controls=\"language-switch1\"\n [attr.aria-label]=\"i18n.msgStr('languages')\"\n >\n {{ i18n.currentLanguage.label }}\n </button>\n <ul\n role=\"menu\"\n tabindex=\"-1\"\n aria-labelledby=\"kc-current-locale-link\"\n aria-activedescendant=\"\"\n id=\"language-switch1\"\n [kcClass]=\"'kcLocaleListClass'\"\n >\n @for (entry of i18n.enabledLanguages; track entry; let idx = $index) {\n <li\n role=\"none\"\n [kcClass]=\"'kcLocaleListItemClass'\"\n >\n <a\n role=\"menuitem\"\n tabindex=\"-1\"\n [href]=\"entry.href\"\n [kcClass]=\"'kcLocaleItemClass'\"\n [id]=\"'language-' + idx\"\n >\n {{ entry.label }}\n </a>\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n }\n\n <!-- Header content -->\n <ng-template #node>\n @if (auth && !auth.showUsername && !auth.showResetCredentials) {\n <h1 id=\"kc-page-title\">\n @let header = headerNode && headerNode();\n @if (header) {\n <ng-container [ngTemplateOutlet]=\"header\" />\n }\n </h1>\n } @else {\n <div\n id=\"kc-username\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <label id=\"kc-attempted-username\">{{ auth?.attemptedUsername }}</label>\n <a\n id=\"reset-login\"\n [href]=\"url?.loginRestartFlowUrl\"\n [attr.aria-label]=\"i18n.msgStr('restartLoginTooltip')\"\n >\n <div class=\"kc-login-tooltip\">\n <i [kcClass]=\"'kcResetFlowIcon'\"></i>\n <span class=\"kc-tooltip-text\">\n {{ i18n.msgStr('restartLoginTooltip') }}\n </span>\n </div>\n </a>\n </div>\n }\n </ng-template>\n\n @if (displayRequiredFields) {\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div\n class=\"subtitle\"\n [kcClass]=\"'kcLabelWrapperClass'\"\n >\n <span class=\"subtitle\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </span>\n </div>\n <div class=\"col-md-10\">\n <ng-container [ngTemplateOutlet]=\"node\" />\n </div>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"node\" />\n }\n </header>\n\n <div id=\"kc-content\">\n <div id=\"kc-content-wrapper\">\n <!-- Message display -->\n @if (displayMessage && message && (message.type !== 'warning' || !isAppInitiatedAction)) {\n <div\n [kcClass]=\"'kcAlertClass'\"\n [ngClass]=\"message.type === 'error' ? 'pf-m-danger' : 'pf-m-' + message.type\"\n [class]=\"'alert-' + message.type\"\n >\n <div class=\"pf-c-alert__icon\">\n @switch (message.type) {\n @case ('success') {\n <span [kcClass]=\"'kcFeedbackSuccessIcon'\"></span>\n }\n @case ('warning') {\n <span [kcClass]=\"'kcFeedbackWarningIcon'\"></span>\n }\n @case ('info') {\n <span [kcClass]=\"'kcFeedbackInfoIcon'\"></span>\n }\n @case ('error') {\n <span [kcClass]=\"'kcFeedbackErrorIcon'\"></span>\n }\n }\n </div>\n <span\n [kcClass]=\"'kcAlertTitleClass'\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <!-- Content -->\n <ng-template #pageRef></ng-template>\n\n @if (!!auth && auth?.showTryAnotherWayLink) {\n <form\n id=\"kc-select-try-another-way-form\"\n method=\"post\"\n [action]=\"url?.loginAction\"\n >\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div [kcClass]=\"'kcFormGroupClass'\">\n <input\n type=\"hidden\"\n name=\"tryAnotherWay\"\n value=\"on\"\n />\n <a\n id=\"try-another-way\"\n (click)=\"tryAnotherWay()\"\n >\n {{ i18n.msgStr('doTryAnotherWay') }}\n </a>\n </div>\n </div>\n </form>\n }\n @let socialProviders = socialProvidersNode && socialProvidersNode();\n @if (socialProviders) {\n <ng-container [ngTemplateOutlet]=\"socialProviders\" />\n }\n <!-- Info display -->\n @if (displayInfo) {\n <div\n id=\"kc-info\"\n [kcClass]=\"'kcSignUpClass'\"\n >\n <div\n id=\"kc-info-wrapper\"\n [kcClass]=\"'kcInfoAreaWrapperClass'\"\n >\n @let info = infoNode && infoNode();\n @if (info) {\n <ng-container [ngTemplateOutlet]=\"info\" />\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
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.11",
5
5
  "peerDependencies": {
6
6
  "keycloakify": "^11.9.3",
7
7
  "@angular/core": "^20.0.0",
@@ -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