@keycloakify/angular 21.1.5 → 22.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/README.md +2 -0
  2. package/bin/index.js +72 -1113
  3. package/fesm2022/keycloakify-angular-account-directives-kc-class.mjs +3 -3
  4. package/fesm2022/keycloakify-angular-account-directives-kc-class.mjs.map +1 -1
  5. package/fesm2022/keycloakify-angular-account-pages-account.mjs +3 -3
  6. package/fesm2022/keycloakify-angular-account-pages-account.mjs.map +1 -1
  7. package/fesm2022/keycloakify-angular-account-pages-applications.mjs +3 -3
  8. package/fesm2022/keycloakify-angular-account-pages-applications.mjs.map +1 -1
  9. package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs +3 -3
  10. package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs.map +1 -1
  11. package/fesm2022/keycloakify-angular-account-pages-log.mjs +3 -3
  12. package/fesm2022/keycloakify-angular-account-pages-log.mjs.map +1 -1
  13. package/fesm2022/keycloakify-angular-account-pages-password.mjs +17 -10
  14. package/fesm2022/keycloakify-angular-account-pages-password.mjs.map +1 -1
  15. package/fesm2022/keycloakify-angular-account-pages-sessions.mjs +3 -3
  16. package/fesm2022/keycloakify-angular-account-pages-sessions.mjs.map +1 -1
  17. package/fesm2022/keycloakify-angular-account-pages-totp.mjs +3 -3
  18. package/fesm2022/keycloakify-angular-account-pages-totp.mjs.map +1 -1
  19. package/fesm2022/keycloakify-angular-account-services-account-resource-injector.mjs +3 -3
  20. package/fesm2022/keycloakify-angular-account-services-account-resource-injector.mjs.map +1 -1
  21. package/fesm2022/keycloakify-angular-account-services-i18n.mjs +3 -3
  22. package/fesm2022/keycloakify-angular-account-services-i18n.mjs.map +1 -1
  23. package/fesm2022/keycloakify-angular-account-template.mjs +5 -4
  24. package/fesm2022/keycloakify-angular-account-template.mjs.map +1 -1
  25. package/fesm2022/keycloakify-angular-lib-directives-attributes.mjs +5 -4
  26. package/fesm2022/keycloakify-angular-lib-directives-attributes.mjs.map +1 -1
  27. package/fesm2022/keycloakify-angular-lib-pipes-input-type.mjs +3 -3
  28. package/fesm2022/keycloakify-angular-lib-pipes-input-type.mjs.map +1 -1
  29. package/fesm2022/keycloakify-angular-lib-pipes-is-array-with-empty-object.mjs +3 -3
  30. package/fesm2022/keycloakify-angular-lib-pipes-is-array-with-empty-object.mjs.map +1 -1
  31. package/fesm2022/keycloakify-angular-lib-pipes-kc-sanitize.mjs +3 -3
  32. package/fesm2022/keycloakify-angular-lib-pipes-kc-sanitize.mjs.map +1 -1
  33. package/fesm2022/keycloakify-angular-lib-pipes-to-array.mjs +3 -3
  34. package/fesm2022/keycloakify-angular-lib-pipes-to-array.mjs.map +1 -1
  35. package/fesm2022/keycloakify-angular-lib-pipes-to-number.mjs +3 -3
  36. package/fesm2022/keycloakify-angular-lib-pipes-to-number.mjs.map +1 -1
  37. package/fesm2022/keycloakify-angular-lib-services-resource-injector.mjs +3 -3
  38. package/fesm2022/keycloakify-angular-lib-services-resource-injector.mjs.map +1 -1
  39. package/fesm2022/keycloakify-angular-login-components-add-remove-buttons-multi-valued-attribute.mjs +13 -8
  40. package/fesm2022/keycloakify-angular-login-components-add-remove-buttons-multi-valued-attribute.mjs.map +1 -1
  41. package/fesm2022/keycloakify-angular-login-components-field-errors.mjs +9 -6
  42. package/fesm2022/keycloakify-angular-login-components-field-errors.mjs.map +1 -1
  43. package/fesm2022/keycloakify-angular-login-components-group-label.mjs +9 -6
  44. package/fesm2022/keycloakify-angular-login-components-group-label.mjs.map +1 -1
  45. package/fesm2022/keycloakify-angular-login-components-input-field-by-type.mjs +11 -7
  46. package/fesm2022/keycloakify-angular-login-components-input-field-by-type.mjs.map +1 -1
  47. package/fesm2022/keycloakify-angular-login-components-input-tag-selects.mjs +13 -8
  48. package/fesm2022/keycloakify-angular-login-components-input-tag-selects.mjs.map +1 -1
  49. package/fesm2022/keycloakify-angular-login-components-input-tag.mjs +15 -9
  50. package/fesm2022/keycloakify-angular-login-components-input-tag.mjs.map +1 -1
  51. package/fesm2022/keycloakify-angular-login-components-logout-other-sessions.mjs +3 -3
  52. package/fesm2022/keycloakify-angular-login-components-logout-other-sessions.mjs.map +1 -1
  53. package/fesm2022/keycloakify-angular-login-components-password-wrapper.mjs +7 -5
  54. package/fesm2022/keycloakify-angular-login-components-password-wrapper.mjs.map +1 -1
  55. package/fesm2022/keycloakify-angular-login-components-select-tag.mjs +13 -8
  56. package/fesm2022/keycloakify-angular-login-components-select-tag.mjs.map +1 -1
  57. package/fesm2022/keycloakify-angular-login-components-textarea-tag.mjs +9 -6
  58. package/fesm2022/keycloakify-angular-login-components-textarea-tag.mjs.map +1 -1
  59. package/fesm2022/keycloakify-angular-login-components-user-profile-form-fields.mjs +3 -3
  60. package/fesm2022/keycloakify-angular-login-components-user-profile-form-fields.mjs.map +1 -1
  61. package/fesm2022/keycloakify-angular-login-directives-kc-class.mjs +3 -3
  62. package/fesm2022/keycloakify-angular-login-directives-kc-class.mjs.map +1 -1
  63. package/fesm2022/keycloakify-angular-login-pages-code.mjs +9 -6
  64. package/fesm2022/keycloakify-angular-login-pages-code.mjs.map +1 -1
  65. package/fesm2022/keycloakify-angular-login-pages-delete-account-confirm.mjs +9 -6
  66. package/fesm2022/keycloakify-angular-login-pages-delete-account-confirm.mjs.map +1 -1
  67. package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs +9 -6
  68. package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs.map +1 -1
  69. package/fesm2022/keycloakify-angular-login-pages-error.mjs +9 -6
  70. package/fesm2022/keycloakify-angular-login-pages-error.mjs.map +1 -1
  71. package/fesm2022/keycloakify-angular-login-pages-frontchannel-logout.mjs +11 -7
  72. package/fesm2022/keycloakify-angular-login-pages-frontchannel-logout.mjs.map +1 -1
  73. package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs +11 -7
  74. package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs.map +1 -1
  75. package/fesm2022/keycloakify-angular-login-pages-info.mjs +9 -6
  76. package/fesm2022/keycloakify-angular-login-pages-info.mjs.map +1 -1
  77. package/fesm2022/keycloakify-angular-login-pages-link-idp-action.mjs +9 -6
  78. package/fesm2022/keycloakify-angular-login-pages-link-idp-action.mjs.map +1 -1
  79. package/fesm2022/keycloakify-angular-login-pages-login-config-totp.mjs +9 -6
  80. package/fesm2022/keycloakify-angular-login-pages-login-config-totp.mjs.map +1 -1
  81. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm-override.mjs +9 -6
  82. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm-override.mjs.map +1 -1
  83. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm.mjs +9 -6
  84. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm.mjs.map +1 -1
  85. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs +9 -6
  86. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs.map +1 -1
  87. package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs +9 -6
  88. package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs.map +1 -1
  89. package/fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs +9 -6
  90. package/fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs.map +1 -1
  91. package/fesm2022/keycloakify-angular-login-pages-login-otp.mjs +9 -6
  92. package/fesm2022/keycloakify-angular-login-pages-login-otp.mjs.map +1 -1
  93. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs +9 -6
  94. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs.map +1 -1
  95. package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs +9 -6
  96. package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs.map +1 -1
  97. package/fesm2022/keycloakify-angular-login-pages-login-password.mjs +11 -7
  98. package/fesm2022/keycloakify-angular-login-pages-login-password.mjs.map +1 -1
  99. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-config.mjs +11 -7
  100. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-config.mjs.map +1 -1
  101. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs +9 -6
  102. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs.map +1 -1
  103. package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs +9 -6
  104. package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs.map +1 -1
  105. package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs +9 -6
  106. package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs.map +1 -1
  107. package/fesm2022/keycloakify-angular-login-pages-login-update-password.mjs +9 -6
  108. package/fesm2022/keycloakify-angular-login-pages-login-update-password.mjs.map +1 -1
  109. package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs +11 -7
  110. package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs.map +1 -1
  111. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs +11 -7
  112. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs.map +1 -1
  113. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs +9 -6
  114. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs.map +1 -1
  115. package/fesm2022/keycloakify-angular-login-pages-login-x509-info.mjs +9 -6
  116. package/fesm2022/keycloakify-angular-login-pages-login-x509-info.mjs.map +1 -1
  117. package/fesm2022/keycloakify-angular-login-pages-login.mjs +11 -7
  118. package/fesm2022/keycloakify-angular-login-pages-login.mjs.map +1 -1
  119. package/fesm2022/keycloakify-angular-login-pages-logout-confirm.mjs +9 -6
  120. package/fesm2022/keycloakify-angular-login-pages-logout-confirm.mjs.map +1 -1
  121. package/fesm2022/keycloakify-angular-login-pages-register.mjs +13 -8
  122. package/fesm2022/keycloakify-angular-login-pages-register.mjs.map +1 -1
  123. package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs +11 -7
  124. package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs.map +1 -1
  125. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs +9 -6
  126. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs.map +1 -1
  127. package/fesm2022/keycloakify-angular-login-pages-terms.mjs +9 -6
  128. package/fesm2022/keycloakify-angular-login-pages-terms.mjs.map +1 -1
  129. package/fesm2022/keycloakify-angular-login-pages-update-email.mjs +11 -7
  130. package/fesm2022/keycloakify-angular-login-pages-update-email.mjs.map +1 -1
  131. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs +9 -6
  132. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs.map +1 -1
  133. package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs +9 -6
  134. package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs.map +1 -1
  135. package/fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs +9 -6
  136. package/fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs.map +1 -1
  137. package/fesm2022/keycloakify-angular-login-services-i18n.mjs +3 -3
  138. package/fesm2022/keycloakify-angular-login-services-i18n.mjs.map +1 -1
  139. package/fesm2022/keycloakify-angular-login-services-login-resource-injector.mjs +3 -3
  140. package/fesm2022/keycloakify-angular-login-services-login-resource-injector.mjs.map +1 -1
  141. package/fesm2022/keycloakify-angular-login-services-user-profile-form.mjs +3 -3
  142. package/fesm2022/keycloakify-angular-login-services-user-profile-form.mjs.map +1 -1
  143. package/fesm2022/keycloakify-angular-login-template.mjs +13 -8
  144. package/fesm2022/keycloakify-angular-login-template.mjs.map +1 -1
  145. package/package.json +1 -1
  146. package/src/bin/initialize-account-theme/boilerplate/KcPageStory.ts +2 -0
  147. package/src/bin/tsconfig.json +4 -5
  148. package/bin/187.index.js +0 -514
  149. package/bin/202.index.js +0 -7778
  150. package/bin/476.index.js +0 -400
  151. package/bin/671.index.js +0 -1354
  152. package/bin/942.index.js +0 -911
@@ -30,9 +30,11 @@ class TemplateComponent extends ComponentReference {
30
30
  this.displayInfo = false;
31
31
  this.displayMessage = true;
32
32
  this.displayRequiredFields = false;
33
- this.page = input(...(ngDevMode ? [undefined, { debugName: "page" }] : /* istanbul ignore next */ []));
33
+ this.page = input(/* @ts-ignore */
34
+ ...(ngDevMode ? [undefined, { debugName: "page" }] : /* istanbul ignore next */ []));
34
35
  this.pageRef = viewChild('pageRef', { ...(ngDevMode ? { debugName: "pageRef" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
35
- this.userProfileFormFields = input(...(ngDevMode ? [undefined, { debugName: "userProfileFormFields" }] : /* istanbul ignore next */ []));
36
+ this.userProfileFormFields = input(/* @ts-ignore */
37
+ ...(ngDevMode ? [undefined, { debugName: "userProfileFormFields" }] : /* istanbul ignore next */ []));
36
38
  this.isReadyToRender$ = this.loginResourceInjectorService.injectResource(this.doUseDefaultCss);
37
39
  this.#effectRef = effect(() => {
38
40
  const page = this.page();
@@ -86,34 +88,37 @@ class TemplateComponent extends ComponentReference {
86
88
  this.headerNode = computed(() => {
87
89
  const headerNode = compRef.headerNode();
88
90
  return headerNode;
89
- }, ...(ngDevMode ? [{ debugName: "headerNode" }] : /* istanbul ignore next */ []));
91
+ }, /* @ts-ignore */
92
+ ...(ngDevMode ? [{ debugName: "headerNode" }] : /* istanbul ignore next */ []));
90
93
  }
91
94
  if ('infoNode' in compRef && compRef.infoNode) {
92
95
  this.infoNode = computed(() => {
93
96
  const infoNode = compRef.infoNode();
94
97
  return infoNode;
95
- }, ...(ngDevMode ? [{ debugName: "infoNode" }] : /* istanbul ignore next */ []));
98
+ }, /* @ts-ignore */
99
+ ...(ngDevMode ? [{ debugName: "infoNode" }] : /* istanbul ignore next */ []));
96
100
  }
97
101
  if ('socialProvidersNode' in compRef && compRef.socialProvidersNode) {
98
102
  this.socialProvidersNode = computed(() => {
99
103
  const socialProvidersNode = compRef.socialProvidersNode();
100
104
  return socialProvidersNode;
101
- }, ...(ngDevMode ? [{ debugName: "socialProvidersNode" }] : /* istanbul ignore next */ []));
105
+ }, /* @ts-ignore */
106
+ ...(ngDevMode ? [{ debugName: "socialProvidersNode" }] : /* istanbul ignore next */ []));
102
107
  }
103
108
  this.title.setTitle(this.documentTitle ?? this.i18n.msgStr('loginTitle', this.kcContext.realm.displayName));
104
109
  this.applyKcIndexClasses();
105
110
  this.#cdr.markForCheck();
106
111
  this.#effectRef.destroy();
107
112
  }
108
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
109
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", 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: [
113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: TemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
114
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", 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: [
110
115
  {
111
116
  provide: ComponentReference,
112
117
  useExisting: forwardRef(() => TemplateComponent)
113
118
  }
114
119
  ], 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 }); }
115
120
  }
116
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TemplateComponent, decorators: [{
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: TemplateComponent, decorators: [{
117
122
  type: Component,
118
123
  args: [{ selector: 'kc-root', imports: [AsyncPipe, KcSanitizePipe, NgTemplateOutlet, KcClassDirective], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
119
124
  {
@@ -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 type 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 { type 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 type 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 { type 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": "21.1.5",
4
+ "version": "22.0.0-rc.1",
5
5
  "peerDependencies": {
6
6
  "keycloakify": "^11.13.0",
7
7
  "@angular/core": "^21.0.0",
@@ -1,4 +1,5 @@
1
1
  import {
2
+ ChangeDetectionStrategy,
2
3
  ChangeDetectorRef,
3
4
  Component,
4
5
  inject,
@@ -57,6 +58,7 @@ export const decorators = (_: unknown, context: StoryContextLike) => ({
57
58
  <kc-root [page]="pageComponent"></kc-root>
58
59
  }`,
59
60
  standalone: true,
61
+ changeDetection: ChangeDetectionStrategy.OnPush,
60
62
  imports: [TemplateComponent]
61
63
  })
62
64
  export class KcPageStory implements OnInit {
@@ -5,18 +5,17 @@
5
5
  "noUnusedLocals": true,
6
6
  "noUnusedParameters": true,
7
7
  "strict": true,
8
- "downlevelIteration": true,
9
8
  "noFallthroughCasesInSwitch": true,
10
9
  "composite": true,
11
- "rootDir": ".",
10
+ "rootDir": "./",
12
11
  "module": "ES2020",
13
12
  "target": "ES2017",
14
13
  "esModuleInterop": true,
15
14
  "lib": ["es2015", "ES2019.Object"],
16
- "moduleResolution": "node"
15
+ "moduleResolution": "bundler"
17
16
  },
18
- "include": ["**/*.ts"],
19
- "exclude": ["initialize-account-theme/boilerplate"],
17
+ "include": ["./**/*.ts"],
18
+ "exclude": ["./initialize-account-theme/boilerplate"],
20
19
  "ts-node": {
21
20
  "esm": true
22
21
  }