@keycloakify/angular 0.2.18 → 0.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/account/pages/federatedIdentity/federatedIdentity.component.d.ts +1 -1
  2. package/fesm2022/keycloakify-angular-account-directives-kc-class.mjs +3 -7
  3. package/fesm2022/keycloakify-angular-account-directives-kc-class.mjs.map +1 -1
  4. package/fesm2022/keycloakify-angular-account-pages-account.mjs +3 -3
  5. package/fesm2022/keycloakify-angular-account-pages-applications.mjs +3 -3
  6. package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs +4 -4
  7. package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs.map +1 -1
  8. package/fesm2022/keycloakify-angular-account-pages-log.mjs +3 -3
  9. package/fesm2022/keycloakify-angular-account-pages-password.mjs +3 -3
  10. package/fesm2022/keycloakify-angular-account-pages-sessions.mjs +3 -3
  11. package/fesm2022/keycloakify-angular-account-pages-totp.mjs +3 -3
  12. package/fesm2022/keycloakify-angular-account-services-account-resource-injector.mjs +3 -3
  13. package/fesm2022/keycloakify-angular-account-services-i18n.mjs +3 -3
  14. package/fesm2022/keycloakify-angular-account-template.mjs +3 -3
  15. package/fesm2022/keycloakify-angular-account-template.mjs.map +1 -1
  16. package/fesm2022/keycloakify-angular-lib-directives-attributes.mjs +3 -3
  17. package/fesm2022/keycloakify-angular-lib-pipes-input-type.mjs +3 -3
  18. package/fesm2022/keycloakify-angular-lib-pipes-is-array-with-empty-object.mjs +3 -3
  19. package/fesm2022/keycloakify-angular-lib-pipes-kc-sanitize.mjs +3 -3
  20. package/fesm2022/keycloakify-angular-lib-pipes-to-array.mjs +3 -3
  21. package/fesm2022/keycloakify-angular-lib-pipes-to-number.mjs +3 -3
  22. package/fesm2022/keycloakify-angular-lib-services-resource-injector.mjs +3 -3
  23. package/fesm2022/keycloakify-angular-login-components-add-remove-buttons-multi-valued-attribute.mjs +3 -3
  24. package/fesm2022/keycloakify-angular-login-components-field-errors.mjs +3 -3
  25. package/fesm2022/keycloakify-angular-login-components-group-label.mjs +3 -3
  26. package/fesm2022/keycloakify-angular-login-components-input-field-by-type.mjs +3 -3
  27. package/fesm2022/keycloakify-angular-login-components-input-tag-selects.mjs +3 -3
  28. package/fesm2022/keycloakify-angular-login-components-input-tag.mjs +3 -3
  29. package/fesm2022/keycloakify-angular-login-components-logout-other-sessions.mjs +3 -3
  30. package/fesm2022/keycloakify-angular-login-components-password-wrapper.mjs +3 -3
  31. package/fesm2022/keycloakify-angular-login-components-select-tag.mjs +3 -3
  32. package/fesm2022/keycloakify-angular-login-components-textarea-tag.mjs +3 -3
  33. package/fesm2022/keycloakify-angular-login-components-user-profile-form-fields.mjs +7 -5
  34. package/fesm2022/keycloakify-angular-login-components-user-profile-form-fields.mjs.map +1 -1
  35. package/fesm2022/keycloakify-angular-login-directives-kc-class.mjs +3 -7
  36. package/fesm2022/keycloakify-angular-login-directives-kc-class.mjs.map +1 -1
  37. package/fesm2022/keycloakify-angular-login-pages-code.mjs +3 -3
  38. package/fesm2022/keycloakify-angular-login-pages-delete-account-confirm.mjs +3 -3
  39. package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs +3 -3
  40. package/fesm2022/keycloakify-angular-login-pages-error.mjs +3 -3
  41. package/fesm2022/keycloakify-angular-login-pages-frontchannel-logout.mjs +3 -3
  42. package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs +3 -3
  43. package/fesm2022/keycloakify-angular-login-pages-info.mjs +3 -3
  44. package/fesm2022/keycloakify-angular-login-pages-login-config-totp.mjs +3 -3
  45. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm-override.mjs +3 -3
  46. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm.mjs +3 -3
  47. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs +3 -3
  48. package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs +3 -3
  49. package/fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs +3 -3
  50. package/fesm2022/keycloakify-angular-login-pages-login-otp.mjs +3 -3
  51. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs +3 -3
  52. package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs +3 -3
  53. package/fesm2022/keycloakify-angular-login-pages-login-password.mjs +3 -3
  54. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-config.mjs +3 -3
  55. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs +3 -3
  56. package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs +3 -3
  57. package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs +3 -3
  58. package/fesm2022/keycloakify-angular-login-pages-login-update-password.mjs +3 -3
  59. package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs +3 -3
  60. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs +3 -3
  61. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs +3 -3
  62. package/fesm2022/keycloakify-angular-login-pages-login-x509-info.mjs +3 -3
  63. package/fesm2022/keycloakify-angular-login-pages-login.mjs +3 -3
  64. package/fesm2022/keycloakify-angular-login-pages-logout-confirm.mjs +3 -3
  65. package/fesm2022/keycloakify-angular-login-pages-register.mjs +3 -3
  66. package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs +3 -3
  67. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs +3 -3
  68. package/fesm2022/keycloakify-angular-login-pages-terms.mjs +3 -3
  69. package/fesm2022/keycloakify-angular-login-pages-update-email.mjs +3 -3
  70. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs +3 -3
  71. package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs +3 -3
  72. package/fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs +3 -3
  73. package/fesm2022/keycloakify-angular-login-services-i18n.mjs +3 -3
  74. package/fesm2022/keycloakify-angular-login-services-login-resource-injector.mjs +3 -3
  75. package/fesm2022/keycloakify-angular-login-services-user-profile-form.mjs +4 -4
  76. package/fesm2022/keycloakify-angular-login-services-user-profile-form.mjs.map +1 -1
  77. package/fesm2022/keycloakify-angular-login-template.mjs +3 -3
  78. package/login/components/user-profile-form-fields/user-profile-form-fields.component.d.ts +1 -0
  79. package/package.json +1 -1
  80. package/src/account/directives/kc-class/kc-class.directive.ts +2 -4
  81. package/src/account/pages/federatedIdentity/federatedIdentity.component.ts +1 -1
  82. package/src/account/template/template.component.ts +1 -3
  83. package/src/eslint.config.js +5 -0
  84. package/src/login/components/user-profile-form-fields/user-profile-form-fields.component.html +9 -0
  85. package/src/login/components/user-profile-form-fields/user-profile-form-fields.component.ts +2 -0
  86. package/src/login/directives/kc-class/kc-class.directive.ts +2 -4
  87. package/src/login/services/user-profile-form/user-profile-form.service.ts +1 -1
@@ -24,15 +24,15 @@ class LoginUpdatePasswordComponent extends ComponentReference {
24
24
  this.infoNode = viewChild('infoNode');
25
25
  this.socialProvidersNode = viewChild('socialProvidersNode');
26
26
  }
27
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginUpdatePasswordComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
28
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: LoginUpdatePasswordComponent, isStandalone: true, selector: "kc-login-update-password", providers: [
27
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginUpdatePasswordComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
28
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: LoginUpdatePasswordComponent, isStandalone: true, selector: "kc-login-update-password", providers: [
29
29
  {
30
30
  provide: ComponentReference,
31
31
  useExisting: forwardRef(() => LoginUpdatePasswordComponent)
32
32
  }
33
33
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let messagesPerField = kcContext.messagesPerField;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('updatePasswordTitle') }}\n</ng-template>\n<form\n id=\"kc-passwd-update-form\"\n method=\"post\"\n [kcClass]=\"'kcFormClass'\"\n [action]=\"url.loginAction\"\n>\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <label\n for=\"password-new\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('passwordNew') }}\n </label>\n </div>\n <div [kcClass]=\"'kcInputWrapperClass'\">\n <kc-password-wrapper passwordInputId=\"password-new\">\n <input\n type=\"password\"\n id=\"password-new\"\n name=\"password-new\"\n autoFocus\n autoComplete=\"new-password\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('password', 'password-confirm')\"\n />\n </kc-password-wrapper>\n\n @if (messagesPerField.existsError('password')) {\n <span\n id=\"input-error-password\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHtml]=\"messagesPerField.get('password') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n </div>\n\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <label\n for=\"password-confirm\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('passwordConfirm') }}\n </label>\n </div>\n <div [kcClass]=\"'kcInputWrapperClass'\">\n <kc-password-wrapper passwordInputId=\"password-confirm\">\n <input\n type=\"password\"\n id=\"password-confirm\"\n name=\"password-confirm\"\n autoFocus\n autoComplete=\"new-password\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('password', 'password-confirm')\"\n />\n </kc-password-wrapper>\n @if (messagesPerField.existsError('password-confirm')) {\n <span\n id=\"input-error-password-confirm\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHtml]=\"messagesPerField.get('password-confirm') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n </div>\n <div [kcClass]=\"'kcFormGroupClass'\">\n <kc-logout-other-sessions />\n <div\n id=\"kc-form-buttons\"\n [kcClass]=\"'kcFormButtonsClass'\"\n >\n <input\n type=\"submit\"\n [kcClass]=\"{\n kcButtonClass: true,\n kcButtonPrimaryClass: true,\n kcButtonBlockClass: !isAppInitiatedAction,\n kcButtonLargeClass: true\n }\"\n [value]=\"i18n.msgStr('doSubmit')\"\n />\n @if (isAppInitiatedAction) {\n <button\n type=\"submit\"\n name=\"cancel-aia\"\n value=\"true\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n }\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "component", type: PasswordWrapperComponent, selector: "kc-password-wrapper", inputs: ["passwordInputId"] }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }, { kind: "component", type: LogoutOtherSessionsComponent, selector: "kc-logout-other-sessions" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34
34
  }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginUpdatePasswordComponent, decorators: [{
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginUpdatePasswordComponent, decorators: [{
36
36
  type: Component,
37
37
  args: [{ imports: [KcClassDirective, PasswordWrapperComponent, KcSanitizePipe, LogoutOtherSessionsComponent], selector: 'kc-login-update-password', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
38
38
  {
@@ -29,15 +29,15 @@ class LoginUpdateProfileComponent extends ComponentReference {
29
29
  this.userProfileFormFields = input();
30
30
  }
31
31
  #userProfileFormService;
32
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginUpdateProfileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
33
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: LoginUpdateProfileComponent, isStandalone: true, selector: "kc-login-update-profile", inputs: { userProfileFormFields: { classPropertyName: "userProfileFormFields", publicName: "userProfileFormFields", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
32
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginUpdateProfileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
33
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: LoginUpdateProfileComponent, isStandalone: true, selector: "kc-login-update-profile", inputs: { userProfileFormFields: { classPropertyName: "userProfileFormFields", publicName: "userProfileFormFields", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
34
34
  {
35
35
  provide: ComponentReference,
36
36
  useExisting: forwardRef(() => LoginUpdateProfileComponent)
37
37
  }
38
38
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('loginProfileTitle') }}\n</ng-template>\n<form\n id=\"kc-update-profile-form\"\n method=\"post\"\n [kcClass]=\"'kcFormClass'\"\n [action]=\"url.loginAction\"\n>\n <ng-container [ngComponentOutlet]=\"userProfileFormFields() ?? null\" />\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div\n id=\"kc-form-options\"\n [kcClass]=\"'kcFormOptionsClass'\"\n >\n <div [kcClass]=\"'kcFormOptionsWrapperClass'\"></div>\n </div>\n <div\n id=\"kc-form-buttons\"\n [kcClass]=\"'kcFormButtonsClass'\"\n >\n <input\n type=\"submit\"\n [disabled]=\"!isFormSubmittable()\"\n [kcClass]=\"{\n kcButtonClass: true,\n kcButtonPrimaryClass: true,\n kcButtonBlockClass: !isAppInitiatedAction,\n kcButtonLargeClass: true\n }\"\n [value]=\"i18n.msgStr('doSubmit')\"\n />\n @if (isAppInitiatedAction) {\n <button\n type=\"submit\"\n name=\"cancel-aia\"\n value=\"true\"\n formNoValidate\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n }\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39
39
  }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginUpdateProfileComponent, decorators: [{
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginUpdateProfileComponent, decorators: [{
41
41
  type: Component,
42
42
  args: [{ imports: [KcClassDirective, NgComponentOutlet], selector: 'kc-login-update-profile', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
43
43
  {
@@ -24,15 +24,15 @@ class LoginUsernameComponent extends ComponentReference {
24
24
  this.socialProvidersNode = viewChild('socialProvidersNode');
25
25
  this.isLoginButtonDisabled = signal(false);
26
26
  }
27
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginUsernameComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
28
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: LoginUsernameComponent, isStandalone: true, selector: "kc-login-username", providers: [
27
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginUsernameComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
28
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: LoginUsernameComponent, isStandalone: true, selector: "kc-login-username", providers: [
29
29
  {
30
30
  provide: ComponentReference,
31
31
  useExisting: forwardRef(() => LoginUsernameComponent)
32
32
  }
33
33
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let realm = kcContext.realm;\n@let usernameHidden = kcContext.usernameHidden;\n@let messagesPerField = kcContext.messagesPerField;\n@let url = kcContext.url;\n@let login = kcContext.login;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('doLogIn') }}\n</ng-template>\n<ng-template #infoNode>\n @let url = kcContext.url;\n <div id=\"kc-registration\">\n <span>\n {{ i18n.msgStr('noAccount') }}\n <a\n tabindex=\"6\"\n [href]=\"url?.registrationUrl\"\n >\n {{ i18n.msgStr('doRegister') }}\n </a>\n </span>\n </div>\n</ng-template>\n<ng-template #socialProvidersNode>\n @let realm = kcContext.realm;\n @let social = kcContext.social;\n @if (!!realm?.password && !!social?.providers?.length) {\n <div\n id=\"kc-social-providers\"\n [kcClass]=\"'kcFormSocialAccountSectionClass'\"\n >\n <hr />\n <h2>{{ i18n.msgStr('identity-provider-login-label') }}</h2>\n <ul\n [kcClass]=\"{\n kcFormSocialAccountListClass: true,\n kcFormSocialAccountListGridClass: (social?.providers?.length ?? 0) > 3\n }\"\n >\n @for (provider of social?.providers; track provider.alias; let idx = $index) {\n <li>\n <a\n type=\"button\"\n [id]=\"provider.alias\"\n [kcClass]=\"{\n kcFormSocialAccountListButtonClass: true,\n kcFormSocialAccountGridItem: (social?.providers?.length ?? 0) > 3\n }\"\n [href]=\"provider.loginUrl\"\n >\n @if (provider.iconClasses) {\n <i\n aria-hidden=\"true\"\n [ngClass]=\"provider.iconClasses\"\n [kcClass]=\"'kcCommonLogoIdP'\"\n ></i>\n }\n <span\n [ngClass]=\"{\n 'kc-social-icon-text': provider.iconClasses\n }\"\n [kcClass]=\"'kcFormSocialAccountNameClass'\"\n [innerHTML]=\"provider.displayName | kcSanitize: 'html'\"\n ></span>\n </a>\n </li>\n }\n </ul>\n </div>\n }\n</ng-template>\n<div id=\"kc-form\">\n <div id=\"kc-form-wrapper\">\n @if (realm.password) {\n <form\n id=\"kc-form-login\"\n method=\"post\"\n [action]=\"url?.loginAction\"\n (onSubmit)=\"isLoginButtonDisabled.set(true)\"\n >\n @if (!usernameHidden) {\n <div [kcClass]=\"'kcFormGroupClass'\">\n <label\n for=\"username\"\n [kcClass]=\"'kcLabelClass'\"\n >\n @if (!realm?.loginWithEmailAllowed) {\n {{ i18n.msgStr('username') }}\n } @else if (!realm?.registrationEmailAsUsername) {\n {{ i18n.msgStr('usernameOrEmail') }}\n } @else {\n {{ i18n.msgStr('email') }}\n }\n </label>\n <input\n tabindex=\"2\"\n id=\"username\"\n name=\"username\"\n type=\"text\"\n autofocus\n autoComplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [defaultValue]=\"login?.username || ''\"\n [attr.aria-invalid]=\"messagesPerField?.existsError('username')\"\n />\n @if (messagesPerField?.existsError('username')) {\n <span\n id=\"input-error\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.getFirstError('username') | kcSanitize: 'html'\"\n >\n </span>\n }\n </div>\n }\n\n <div [kcClass]=\"['kcFormGroupClass', 'kcFormSettingClass']\">\n <div id=\"kc-form-options\">\n @if (realm.rememberMe && !usernameHidden) {\n <div class=\"checkbox\">\n <label>\n <input\n tabindex=\"5\"\n id=\"rememberMe\"\n name=\"rememberMe\"\n type=\"checkbox\"\n [defaultChecked]=\"!!login?.rememberMe\"\n />\n {{ i18n.msgStr('rememberMe') }}\n </label>\n </div>\n }\n </div>\n </div>\n <div\n id=\"kc-form-buttons\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <input\n tabindex=\"4\"\n name=\"login\"\n id=\"kc-login\"\n type=\"submit\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doLogIn')\"\n />\n </div>\n </form>\n }\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34
34
  }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginUsernameComponent, decorators: [{
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginUsernameComponent, decorators: [{
36
36
  type: Component,
37
37
  args: [{ selector: 'kc-login-username', changeDetection: ChangeDetectionStrategy.OnPush, imports: [KcClassDirective, AsyncPipe, KcSanitizePipe, NgClass], providers: [
38
38
  {
@@ -21,15 +21,15 @@ class LoginVerifyEmailComponent extends ComponentReference {
21
21
  this.infoNode = viewChild('infoNode');
22
22
  this.socialProvidersNode = viewChild('socialProvidersNode');
23
23
  }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginVerifyEmailComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
25
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.1", type: LoginVerifyEmailComponent, isStandalone: true, selector: "kc-login-verify-email", providers: [
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginVerifyEmailComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
25
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.2", type: LoginVerifyEmailComponent, isStandalone: true, selector: "kc-login-verify-email", providers: [
26
26
  {
27
27
  provide: ComponentReference,
28
28
  useExisting: forwardRef(() => LoginVerifyEmailComponent)
29
29
  }
30
30
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let user = kcContext.user;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('emailVerifyTitle') }}\n</ng-template>\n<ng-template #infoNode>\n @let url = kcContext.url;\n <p class=\"instruction\">\n {{ i18n.msgStr('emailVerifyInstruction2') }}\n <br />\n <a [href]=\"url.loginAction\">{{ i18n.msgStr('doClickHere') }}</a>\n &nbsp;\n {{ i18n.msgStr('emailVerifyInstruction3') }}\n </p>\n</ng-template>\n\n<p class=\"instruction\">\n {{ i18n.msgStr('emailVerifyInstruction1', user?.email ?? '') }}\n</p>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31
31
  }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginVerifyEmailComponent, decorators: [{
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginVerifyEmailComponent, decorators: [{
33
33
  type: Component,
34
34
  args: [{ imports: [KcClassDirective], selector: 'kc-login-verify-email', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
35
35
  {
@@ -21,15 +21,15 @@ class LoginX509InfoComponent extends ComponentReference {
21
21
  this.infoNode = viewChild('infoNode');
22
22
  this.socialProvidersNode = viewChild('socialProvidersNode');
23
23
  }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginX509InfoComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
25
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: LoginX509InfoComponent, isStandalone: true, selector: "kc-login-x509-info", providers: [
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginX509InfoComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
25
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: LoginX509InfoComponent, isStandalone: true, selector: "kc-login-x509-info", providers: [
26
26
  {
27
27
  provide: ComponentReference,
28
28
  useExisting: forwardRef(() => LoginX509InfoComponent)
29
29
  }
30
30
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let x509 = kcContext.x509;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('doLogIn') }}\n</ng-template>\n<form\n id=\"kc-x509-login-info\"\n method=\"post\"\n [kcClass]=\"'kcFormClass'\"\n [action]=\"url.loginAction\"\n>\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <label\n for=\"certificate_subjectDN\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('clientCertificate') }}\n </label>\n </div>\n @if (x509.formData.subjectDN) {\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <label\n id=\"certificate_subjectDN\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ x509.formData.subjectDN }}\n </label>\n </div>\n } @else {\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <label\n id=\"certificate_subjectDN\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('noCertificate') }}\n </label>\n </div>\n }\n </div>\n <div [kcClass]=\"'kcFormGroupClass'\">\n @if (x509.formData.isUserEnabled) {\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <label\n for=\"username\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('doX509Login') }}\n </label>\n </div>\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <label\n id=\"username\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ x509.formData.username }}\n </label>\n </div>\n }\n </div>\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div\n id=\"kc-form-options\"\n [kcClass]=\"'kcFormOptionsClass'\"\n >\n <div [kcClass]=\"'kcFormOptionsWrapperClass'\"></div>\n </div>\n <div\n id=\"kc-form-buttons\"\n [kcClass]=\"'kcFormButtonsClass'\"\n >\n <div [kcClass]=\"'kcFormButtonsWrapperClass'\">\n <input\n name=\"login\"\n id=\"kc-login\"\n type=\"submit\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doContinue')\"\n />\n @if (x509.formData.isUserEnabled) {\n <input\n name=\"cancel\"\n id=\"kc-cancel\"\n type=\"submit\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doIgnore')\"\n />\n }\n </div>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31
31
  }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginX509InfoComponent, decorators: [{
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginX509InfoComponent, decorators: [{
33
33
  type: Component,
34
34
  args: [{ imports: [KcClassDirective], selector: 'kc-login-x509-info', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
35
35
  {
@@ -25,15 +25,15 @@ class LoginComponent extends ComponentReference {
25
25
  this.socialProvidersNode = viewChild('socialProvidersNode');
26
26
  this.isLoginButtonDisabled = signal(false);
27
27
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
29
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: LoginComponent, isStandalone: true, selector: "kc-login", providers: [
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
29
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: LoginComponent, isStandalone: true, selector: "kc-login", providers: [
30
30
  {
31
31
  provide: ComponentReference,
32
32
  useExisting: forwardRef(() => LoginComponent)
33
33
  }
34
34
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let realm = kcContext.realm;\n@let usernameHidden = kcContext.usernameHidden;\n@let auth = kcContext.auth;\n@let messagesPerField = kcContext.messagesPerField;\n@let url = kcContext.url;\n@let login = kcContext.login;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('loginAccountTitle') }}\n</ng-template>\n<ng-template #infoNode>\n @let url = kcContext.url;\n <div id=\"kc-registration-container\">\n <div id=\"kc-registration\">\n <span>\n {{ i18n.msgStr('noAccount') }}\n <a\n tabindex=\"8\"\n [href]=\"url?.registrationUrl\"\n >\n {{ i18n.msgStr('doRegister') }}\n </a>\n </span>\n </div>\n </div>\n</ng-template>\n<ng-template #socialProvidersNode>\n @let realm = kcContext.realm;\n @let social = kcContext.social;\n @if (!!realm?.password && !!social?.providers?.length) {\n <div\n id=\"kc-social-providers\"\n [kcClass]=\"'kcFormSocialAccountSectionClass'\"\n >\n <hr />\n <h2>{{ i18n.msgStr('identity-provider-login-label') }}</h2>\n <ul\n [kcClass]=\"{\n kcFormSocialAccountListClass: true,\n kcFormSocialAccountListGridClass: (social?.providers?.length ?? 0) > 3\n }\"\n >\n @for (provider of social?.providers; track provider.alias; let idx = $index) {\n <li>\n <a\n type=\"button\"\n [id]=\"provider.alias\"\n [kcClass]=\"{\n kcFormSocialAccountListButtonClass: true,\n kcFormSocialAccountGridItem: (social?.providers?.length ?? 0) > 3\n }\"\n [href]=\"provider.loginUrl\"\n >\n @if (provider.iconClasses) {\n <i\n aria-hidden=\"true\"\n [ngClass]=\"provider.iconClasses\"\n [kcClass]=\"'kcCommonLogoIdP'\"\n ></i>\n }\n <span\n [ngClass]=\"{\n 'kc-social-icon-text': provider.iconClasses\n }\"\n [kcClass]=\"'kcFormSocialAccountNameClass'\"\n [innerHTML]=\"provider.displayName | kcSanitize: 'html'\"\n ></span>\n </a>\n </li>\n }\n </ul>\n </div>\n }\n</ng-template>\n<div id=\"kc-form\">\n <div id=\"kc-form-wrapper\">\n <!-- login.component.html -->\n @if (realm?.password) {\n <form\n id=\"kc-form-login\"\n method=\"post\"\n [action]=\"url?.loginAction\"\n (onSubmit)=\"isLoginButtonDisabled.set(true)\"\n >\n @if (!usernameHidden) {\n <div [kcClass]=\"'kcFormGroupClass'\">\n <label\n for=\"username\"\n [kcClass]=\"'kcLabelClass'\"\n >\n @if (!realm?.loginWithEmailAllowed) {\n {{ i18n.msgStr('username') }}\n } @else if (!realm?.registrationEmailAsUsername) {\n {{ i18n.msgStr('usernameOrEmail') }}\n } @else {\n {{ i18n.msgStr('email') }}\n }\n </label>\n <input\n tabindex=\"2\"\n id=\"username\"\n name=\"username\"\n type=\"text\"\n autofocus\n [kcClass]=\"'kcInputClass'\"\n [defaultValue]=\"login?.username || ''\"\n [attr.aria-invalid]=\"messagesPerField?.existsError('username', 'password')\"\n />\n @if (messagesPerField?.existsError('username', 'password')) {\n <span\n id=\"input-error\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.getFirstError('username', 'password') | kcSanitize: 'html'\"\n >\n </span>\n }\n </div>\n }\n\n <div [kcClass]=\"'kcFormGroupClass'\">\n <label\n for=\"password\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('password') }}\n </label>\n\n <kc-password-wrapper passwordInputId=\"password\">\n <input\n tabindex=\"3\"\n id=\"password\"\n name=\"password\"\n type=\"password\"\n autocomplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('username', 'password')\"\n />\n </kc-password-wrapper>\n @if (usernameHidden && messagesPerField?.existsError('username', 'password')) {\n <span\n id=\"input-error\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.getFirstError('username', 'password') | kcSanitize: 'html'\"\n >\n </span>\n }\n </div>\n\n <div [kcClass]=\"['kcFormGroupClass', 'kcFormSettingClass']\">\n <div id=\"kc-form-options\">\n @if (realm?.rememberMe && !usernameHidden) {\n <div class=\"checkbox\">\n <label>\n <input\n tabindex=\"5\"\n id=\"rememberMe\"\n name=\"rememberMe\"\n type=\"checkbox\"\n [defaultChecked]=\"!!login?.rememberMe\"\n />\n {{ i18n.msgStr('rememberMe') }}\n </label>\n </div>\n }\n </div>\n\n <div [kcClass]=\"'kcFormOptionsWrapperClass'\">\n @if (realm?.resetPasswordAllowed) {\n <span>\n <a\n tabindex=\"6\"\n [href]=\"url?.loginResetCredentialsUrl\"\n >{{ i18n.msgStr('doForgotPassword') }}</a\n >\n </span>\n }\n </div>\n </div>\n <div\n id=\"kc-form-buttons\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <input\n type=\"hidden\"\n id=\"id-hidden-input\"\n name=\"credentialId\"\n [value]=\"auth?.selectedCredential\"\n />\n <input\n tabindex=\"7\"\n name=\"login\"\n id=\"kc-login\"\n type=\"submit\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doLogIn')\"\n [disabled]=\"isLoginButtonDisabled()\"\n />\n </div>\n </form>\n }\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }, { kind: "component", type: PasswordWrapperComponent, selector: "kc-password-wrapper", inputs: ["passwordInputId"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35
35
  }
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginComponent, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginComponent, decorators: [{
37
37
  type: Component,
38
38
  args: [{ selector: 'kc-login', changeDetection: ChangeDetectionStrategy.OnPush, imports: [KcClassDirective, AsyncPipe, KcSanitizePipe, PasswordWrapperComponent, NgClass, CommonModule], providers: [
39
39
  {
@@ -17,15 +17,15 @@ class LogoutConfirmComponent extends ComponentReference {
17
17
  this.infoNode = viewChild('infoNode');
18
18
  this.socialProvidersNode = viewChild('socialProvidersNode');
19
19
  }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LogoutConfirmComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
21
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: LogoutConfirmComponent, isStandalone: true, selector: "kc-logout-confirm", providers: [
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LogoutConfirmComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
21
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: LogoutConfirmComponent, isStandalone: true, selector: "kc-logout-confirm", providers: [
22
22
  {
23
23
  provide: ComponentReference,
24
24
  useExisting: forwardRef(() => LogoutConfirmComponent)
25
25
  }
26
26
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let logoutConfirm = kcContext.logoutConfirm;\n@let client = kcContext.client;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('logoutConfirmTitle') }}\n</ng-template>\n<div\n id=\"kc-logout-confirm\"\n class=\"content-area\"\n>\n <p class=\"instruction\">{{ i18n.msgStr('logoutConfirmHeader') }}</p>\n <form\n class=\"form-actions\"\n method=\"POST\"\n [action]=\"url.logoutConfirmAction\"\n >\n <input\n type=\"hidden\"\n name=\"session_code\"\n [value]=\"logoutConfirm.code\"\n />\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div id=\"kc-form-options\">\n <div [kcClass]=\"'kcFormOptionsWrapperClass'\"></div>\n </div>\n <div\n id=\"kc-form-buttons\"\n class=\"kcFormGroupClass\"\n >\n <input\n tabIndex=\"4\"\n name=\"confirmLogout\"\n id=\"kc-logout\"\n type=\"submit\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doLogout')\"\n />\n </div>\n </div>\n </form>\n <div id=\"kc-info-message\">\n @if (!logoutConfirm.skipLink && client.baseUrl) {\n <p>\n <a [href]=\"client.baseUrl\">{{ i18n.msgStr('backToApplication') }}</a>\n </p>\n }\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27
27
  }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LogoutConfirmComponent, decorators: [{
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LogoutConfirmComponent, decorators: [{
29
29
  type: Component,
30
30
  args: [{ imports: [KcClassDirective], selector: 'kc-logout-confirm', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
31
31
  {
@@ -34,15 +34,15 @@ class RegisterComponent extends ComponentReference {
34
34
  onCallback() {
35
35
  document.getElementById('kc-register-form').submit();
36
36
  }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RegisterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
38
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: RegisterComponent, isStandalone: true, selector: "kc-register", inputs: { userProfileFormFields: { classPropertyName: "userProfileFormFields", publicName: "userProfileFormFields", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: RegisterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
38
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: RegisterComponent, isStandalone: true, selector: "kc-register", inputs: { userProfileFormFields: { classPropertyName: "userProfileFormFields", publicName: "userProfileFormFields", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
39
39
  {
40
40
  provide: ComponentReference,
41
41
  useExisting: forwardRef(() => RegisterComponent)
42
42
  }
43
43
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let messagesPerField = kcContext.messagesPerField;\n@let recaptchaRequired = kcContext.recaptchaRequired;\n@let recaptchaVisible = kcContext.recaptchaVisible;\n@let recaptchaSiteKey = kcContext.recaptchaSiteKey;\n@let recaptchaAction = kcContext.recaptchaAction;\n@let termsAcceptanceRequired = kcContext.termsAcceptanceRequired;\n\n<ng-template #headerNode>\n @let messageHeader = kcContext.messageHeader;\n {{ messageHeader ?? i18n.advancedMsgStr('registerTitle') }}\n</ng-template>\n<form\n id=\"kc-register-form\"\n method=\"post\"\n [kcClass]=\"'kcFormClass'\"\n [action]=\"url.registrationAction\"\n>\n <ng-container [ngComponentOutlet]=\"userProfileFormFields() ?? null\" />\n @if (termsAcceptanceRequired) {\n <div class=\"form-group\">\n <div [kcClass]=\"'kcInputWrapperClass'\">\n {{ i18n.msgStr('termsTitle') }}\n <div id=\"kc-registration-terms-text\">\n {{ i18n.msgStr('termsText') }}\n </div>\n </div>\n </div>\n <div class=\"form-group\">\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <input\n type=\"checkbox\"\n id=\"termsAccepted\"\n name=\"termsAccepted\"\n [kcClass]=\"'kcCheckboxInputClass'\"\n [checked]=\"areTermsAccepted()\"\n [attr.aria-invalid]=\"messagesPerField.existsError('termsAccepted')\"\n (change)=\"areTermsAccepted.set($any($event.target).checked)\"\n />\n <label\n for=\"termsAccepted\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('acceptTerms') }}\n </label>\n </div>\n @if (messagesPerField.existsError('termsAccepted')) {\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <span\n id=\"input-error-terms-accepted\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHtml]=\"messagesPerField.get('termsAccepted') | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n </div>\n }\n @if (recaptchaRequired && (recaptchaVisible || recaptchaAction === undefined)) {\n <div class=\"form-group\">\n <div [kcClass]=\"'kcInputWrapperClass'\">\n <div\n class=\"g-recaptcha\"\n data-size=\"compact\"\n [attr.data-sitekey]=\"recaptchaSiteKey\"\n [attr.data-action]=\"recaptchaAction\"\n ></div>\n </div>\n </div>\n }\n\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div\n id=\"kc-form-options\"\n [kcClass]=\"'kcFormOptionsClass'\"\n >\n <div [kcClass]=\"'kcFormOptionsWrapperClass'\">\n <span>\n <a\n [href]=\"url.loginUrl\"\n [innerHTML]=\"i18n.msgStr('backToLogin') | kcSanitize: 'html'\"\n ></a>\n </span>\n </div>\n </div>\n @if (recaptchaRequired && !recaptchaVisible && recaptchaAction !== undefined) {\n <div\n id=\"kc-form-buttons\"\n [kcClass]=\"'kcFormButtonsClass'\"\n >\n <button\n class=\"g-recaptcha\"\n type=\"submit\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']\"\n [attr.data-sitekey]=\"recaptchaSiteKey\"\n [attr.data-callback]=\"onCallback\"\n [attr.data-action]=\"recaptchaAction\"\n >\n {{ i18n.msgStr('doRegister') }}\n </button>\n </div>\n } @else {\n <div\n id=\"kc-form-buttons\"\n [kcClass]=\"'kcFormButtonsClass'\"\n >\n <input\n type=\"submit\"\n [disabled]=\"!isFormSubmittable() || (termsAcceptanceRequired && !areTermsAccepted())\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doRegister')\"\n />\n </div>\n }\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
44
44
  }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RegisterComponent, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: RegisterComponent, decorators: [{
46
46
  type: Component,
47
47
  args: [{ selector: 'kc-register', changeDetection: ChangeDetectionStrategy.OnPush, imports: [KcClassDirective, AsyncPipe, KcSanitizePipe, NgClass, NgComponentOutlet], providers: [
48
48
  {
@@ -31,15 +31,15 @@ class SamlPostFormComponent extends ComponentReference {
31
31
  }
32
32
  this.htmlFormElement().submit();
33
33
  }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: SamlPostFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
35
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: SamlPostFormComponent, isStandalone: true, selector: "kc-saml-post-form", providers: [
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: SamlPostFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
35
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: SamlPostFormComponent, isStandalone: true, selector: "kc-saml-post-form", providers: [
36
36
  {
37
37
  provide: ComponentReference,
38
38
  useExisting: forwardRef(() => SamlPostFormComponent)
39
39
  }
40
40
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }, { propertyName: "htmlFormElement", first: true, predicate: ["setHtmlFormElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let samlPost = kcContext.samlPost;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('saml.post-form.title') }}\n</ng-template>\n<p>{{ i18n.msgStr('saml.post-form.message') }}</p>\n<form\n #setHtmlFormElement\n name=\"saml-post-binding\"\n method=\"post\"\n [action]=\"samlPost.url\"\n>\n @if (!!samlPost.SAMLRequest) {\n <input\n type=\"hidden\"\n name=\"SAMLRequest\"\n [value]=\"samlPost.SAMLRequest\"\n />\n }\n @if (!!samlPost.SAMLResponse) {\n <input\n type=\"hidden\"\n name=\"SAMLResponse\"\n [value]=\"samlPost.SAMLResponse\"\n />\n }\n @if (!!samlPost.relayState) {\n <input\n type=\"hidden\"\n name=\"RelayState\"\n [value]=\"samlPost.relayState\"\n />\n }\n <noscript>\n <p>{{ i18n.msgStr('saml.post-form.js-disabled') }}</p>\n <input\n type=\"submit\"\n [value]=\"i18n.msgStr('doContinue')\"\n />\n </noscript>\n</form>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
41
41
  }
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: SamlPostFormComponent, decorators: [{
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: SamlPostFormComponent, decorators: [{
43
43
  type: Component,
44
44
  args: [{ imports: [], selector: 'kc-saml-post-form', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
45
45
  {
@@ -22,15 +22,15 @@ class SelectAuthenticatorComponent extends ComponentReference {
22
22
  this.infoNode = viewChild('infoNode');
23
23
  this.socialProvidersNode = viewChild('socialProvidersNode');
24
24
  }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: SelectAuthenticatorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
26
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: SelectAuthenticatorComponent, isStandalone: true, selector: "kc-select-authenticator", providers: [
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: SelectAuthenticatorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
26
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: SelectAuthenticatorComponent, isStandalone: true, selector: "kc-select-authenticator", providers: [
27
27
  {
28
28
  provide: ComponentReference,
29
29
  useExisting: forwardRef(() => SelectAuthenticatorComponent)
30
30
  }
31
31
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let auth = kcContext.auth;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('loginChooseAuthenticator') }}\n</ng-template>\n\n<form\n id=\"kc-select-credential-form\"\n method=\"post\"\n [kcClass]=\"'kcFormClass'\"\n [action]=\"url.loginAction\"\n>\n <div [kcClass]=\"'kcSelectAuthListClass'\">\n @for (authenticationSelection of auth.authenticationSelections; track authenticationSelection; let i = $index) {\n <button\n type=\"submit\"\n name=\"authenticationExecution\"\n [kcClass]=\"'kcSelectAuthListItemClass'\"\n [value]=\"authenticationSelection.authExecId\"\n >\n <div [kcClass]=\"'kcSelectAuthListItemIconClass'\">\n <i [kcClass]=\"['kcSelectAuthListItemIconPropertyClass', $any(authenticationSelection.iconCssClass)]\"></i>\n </div>\n <div [kcClass]=\"'kcSelectAuthListItemBodyClass'\">\n <div [kcClass]=\"'kcSelectAuthListItemHeadingClass'\">\n {{ i18n.advancedMsgStr(authenticationSelection.displayName) }}\n </div>\n <div [kcClass]=\"'kcSelectAuthListItemDescriptionClass'\">\n {{ i18n.advancedMsgStr(authenticationSelection.helpText) }}\n </div>\n </div>\n <div [kcClass]=\"'kcSelectAuthListItemFillClass'\"></div>\n <div [kcClass]=\"'kcSelectAuthListItemArrowClass'\">\n <i [kcClass]=\"'kcSelectAuthListItemArrowIconClass'\"></i>\n </div>\n </button>\n }\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32
32
  }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: SelectAuthenticatorComponent, decorators: [{
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: SelectAuthenticatorComponent, decorators: [{
34
34
  type: Component,
35
35
  args: [{ imports: [KcClassDirective, NgClass], selector: 'kc-select-authenticator', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
36
36
  {
@@ -21,15 +21,15 @@ class TermsComponent extends ComponentReference {
21
21
  this.infoNode = viewChild('infoNode');
22
22
  this.socialProvidersNode = viewChild('socialProvidersNode');
23
23
  }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: TermsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
25
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.1", type: TermsComponent, isStandalone: true, selector: "kc-terms", providers: [
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: TermsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
25
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.2", type: TermsComponent, isStandalone: true, selector: "kc-terms", providers: [
26
26
  {
27
27
  provide: ComponentReference,
28
28
  useExisting: forwardRef(() => TermsComponent)
29
29
  }
30
30
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('termsTitle') }}\n</ng-template>\n<div id=\"kc-terms-text\">{{ i18n.msgStr('termsText') }}</div>\n<form\n class=\"form-actions\"\n method=\"POST\"\n [action]=\"url.loginAction\"\n>\n <input\n name=\"accept\"\n id=\"kc-accept\"\n type=\"submit\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doAccept')\"\n />\n <input\n name=\"cancel\"\n id=\"kc-decline\"\n type=\"submit\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doDecline')\"\n />\n</form>\n<div class=\"clearfix\"></div>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31
31
  }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: TermsComponent, decorators: [{
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: TermsComponent, decorators: [{
33
33
  type: Component,
34
34
  args: [{ imports: [KcClassDirective], selector: 'kc-terms', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
35
35
  {
@@ -26,15 +26,15 @@ class UpdateEmailComponent extends ComponentReference {
26
26
  this.isFormSubmittable = toSignal(this.#userProfileFormService.formState$.pipe(map(s => s.isFormSubmittable)), { initialValue: false });
27
27
  }
28
28
  #userProfileFormService;
29
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: UpdateEmailComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
30
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: UpdateEmailComponent, isStandalone: true, selector: "kc-update-email", inputs: { userProfileFormFields: { classPropertyName: "userProfileFormFields", publicName: "userProfileFormFields", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: UpdateEmailComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
30
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: UpdateEmailComponent, isStandalone: true, selector: "kc-update-email", inputs: { userProfileFormFields: { classPropertyName: "userProfileFormFields", publicName: "userProfileFormFields", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
31
31
  {
32
32
  provide: ComponentReference,
33
33
  useExisting: forwardRef(() => UpdateEmailComponent)
34
34
  }
35
35
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('updateEmailTitle') }}\n</ng-template>\n<form\n id=\"kc-update-email-form\"\n method=\"post\"\n [kcClass]=\"'kcFormClass'\"\n [action]=\"url.loginAction\"\n>\n <ng-container [ngComponentOutlet]=\"userProfileFormFields() ?? null\" />\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div\n id=\"kc-form-options\"\n [kcClass]=\"'kcFormOptionsClass'\"\n >\n <div [kcClass]=\"'kcFormOptionsWrapperClass'\"></div>\n </div>\n <kc-logout-other-sessions />\n <div\n id=\"kc-form-buttons\"\n [kcClass]=\"'kcFormButtonsClass'\"\n >\n <input\n type=\"submit\"\n [disabled]=\"!isFormSubmittable()\"\n [kcClass]=\"{\n kcButtonClass: true,\n kcButtonPrimaryClass: true,\n kcButtonBlockClass: isAppInitiatedAction,\n kcButtonLargeClass: true\n }\"\n [value]=\"i18n.msgStr('doSubmit')\"\n />\n @if (isAppInitiatedAction) {\n <button\n type=\"submit\"\n name=\"cancel-aia\"\n value=\"true\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n }\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: LogoutOtherSessionsComponent, selector: "kc-logout-other-sessions" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36
36
  }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: UpdateEmailComponent, decorators: [{
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: UpdateEmailComponent, decorators: [{
38
38
  type: Component,
39
39
  args: [{ imports: [KcClassDirective, NgComponentOutlet, LogoutOtherSessionsComponent], selector: 'kc-update-email', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
40
40
  {
@@ -61,15 +61,15 @@ class WebauthnAuthenticateComponent extends ComponentReference {
61
61
  }
62
62
  return className;
63
63
  }
64
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: WebauthnAuthenticateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: WebauthnAuthenticateComponent, isStandalone: true, selector: "kc-webauthn-authenticate", providers: [
64
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: WebauthnAuthenticateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: WebauthnAuthenticateComponent, isStandalone: true, selector: "kc-webauthn-authenticate", providers: [
66
66
  {
67
67
  provide: ComponentReference,
68
68
  useExisting: forwardRef(() => WebauthnAuthenticateComponent)
69
69
  }
70
70
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let authenticators = kcContext.authenticators;\n@let shouldDisplayAuthenticators = kcContext.shouldDisplayAuthenticators;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('webauthn-login-title') }}\n</ng-template>\n<ng-template #infoNode>\n @let url = kcContext.url;\n <div id=\"kc-registration\">\n <span>\n {{ i18n.msgStr('noAccount') }}\n <a\n tabIndex=\"6\"\n [href]=\"url.registrationUrl\"\n >\n {{ i18n.msgStr('doRegister') }}\n </a>\n </span>\n </div>\n</ng-template>\n<div\n id=\"kc-form-webauthn\"\n [kcClass]=\"'kcFormClass'\"\n>\n <form\n id=\"webauth\"\n method=\"post\"\n [action]=\"url.loginAction\"\n >\n <input\n type=\"hidden\"\n id=\"clientDataJSON\"\n name=\"clientDataJSON\"\n />\n <input\n type=\"hidden\"\n id=\"authenticatorData\"\n name=\"authenticatorData\"\n />\n <input\n type=\"hidden\"\n id=\"signature\"\n name=\"signature\"\n />\n <input\n type=\"hidden\"\n id=\"credentialId\"\n name=\"credentialId\"\n />\n <input\n type=\"hidden\"\n id=\"userHandle\"\n name=\"userHandle\"\n />\n <input\n type=\"hidden\"\n id=\"error\"\n name=\"error\"\n />\n </form>\n\n <div\n class=\"no-bottom-margin\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n @if (authenticators) {\n <form\n id=\"authn_select\"\n [kcClass]=\"'kcFormClass'\"\n >\n @for (authenticator of authenticators.authenticators; track authenticator.credentialId) {\n <input\n type=\"hidden\"\n name=\"authn_use_chk\"\n [value]=\"authenticator.credentialId\"\n />\n }\n @if (shouldDisplayAuthenticators) {\n @if (authenticators.authenticators.length > 1) {\n <p [kcClass]=\"'kcSelectAuthListItemTitle'\">\n {{ i18n.msgStr('webauthn-available-authenticators') }}\n </p>\n }\n <div [kcClass]=\"'kcFormOptionsClass'\">\n @for (authenticator of authenticators.authenticators; track authenticator.credentialId; let i = $index) {\n <div\n [id]=\"'kc-webauthn-authenticator-item-' + i\"\n [kcClass]=\"'kcSelectAuthListItemClass'\"\n >\n <div [kcClass]=\"'kcSelectAuthListItemIconClass'\">\n <i\n [ngClass]=\"selectAuthListItemIconClass(authenticator.transports.iconClass)\"\n [kcClass]=\"'kcSelectAuthListItemIconPropertyClass'\"\n ></i>\n <div [kcClass]=\"'kcSelectAuthListItemArrowIconClass'\">\n <div\n [id]=\"'kc-webauthn-authenticator-label-' + i\"\n [kcClass]=\"'kcSelectAuthListItemHeadingClass'\"\n >\n {{ i18n.advancedMsgStr(authenticator.label) }}\n </div>\n @if (authenticator.transports.displayNameProperties?.length) {\n <div\n [id]=\"'kc-webauthn-authenticator-transport-' + i\"\n [kcClass]=\"'kcSelectAuthListItemDescriptionClass'\"\n >\n @for (\n displayNameProperty of authenticator.transports.displayNameProperties;\n track displayNameProperty;\n let last = $last\n ) {\n {{ i18n.advancedMsgStr(displayNameProperty) }}\n @if (!last) {\n <span>, </span>\n }\n }\n </div>\n <div [kcClass]=\"'kcSelectAuthListItemDescriptionClass'\">\n <span [id]=\"'kc-webauthn-authenticator-createdlabel-' + i\">\n {{ i18n.msgStr('webauthn-createdAt-label') }}\n </span>\n <span [id]=\"'kc-webauthn-authenticator-created-' + i\">{{ authenticator.createdAt }}</span>\n </div>\n <div [kcClass]=\"'kcSelectAuthListItemFillClass'\"></div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </form>\n }\n\n <div\n id=\"kc-form-buttons\"\n [kcClass]=\"'kcFormButtonsClass'\"\n >\n <input\n type=\"button\"\n autofocus\n name=\"cancel-aia\"\n [id]=\"authButtonId\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonBlockClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('webauthn-doAuthenticate')\"\n />\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
71
71
  }
72
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: WebauthnAuthenticateComponent, decorators: [{
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: WebauthnAuthenticateComponent, decorators: [{
73
73
  type: Component,
74
74
  args: [{ imports: [KcClassDirective, LogoutOtherSessionsComponent], selector: 'kc-webauthn-authenticate', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
75
75
  {
@@ -30,15 +30,15 @@ class WebauthnErrorComponent extends ComponentReference {
30
30
  // @ts-expect-error: Trusted Keycloak's code
31
31
  document.getElementById('kc-error-credential-form').submit();
32
32
  }
33
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: WebauthnErrorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
34
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: WebauthnErrorComponent, isStandalone: true, selector: "kc-webauthn-error", providers: [
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: WebauthnErrorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: WebauthnErrorComponent, isStandalone: true, selector: "kc-webauthn-error", providers: [
35
35
  {
36
36
  provide: ComponentReference,
37
37
  useExisting: forwardRef(() => WebauthnErrorComponent)
38
38
  }
39
39
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n\n<ng-template #headerNode>\n {{ i18n.msgStr('webauthn-error-title') }}\n</ng-template>\n<form\n id=\"kc-error-credential-form\"\n method=\"post\"\n [kcClass]=\"'kcFormClass'\"\n [action]=\"url.loginAction\"\n>\n <input\n type=\"hidden\"\n id=\"executionValue\"\n name=\"authenticationExecution\"\n />\n <input\n type=\"hidden\"\n id=\"isSetRetry\"\n name=\"isSetRetry\"\n />\n</form>\n<input\n tabIndex=\"4\"\n type=\"button\"\n name=\"try-again\"\n id=\"kc-try-again\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doTryAgain')\"\n (click)=\"onClick()\"\n/>\n@if (isAppInitiatedAction) {\n <form\n id=\"kc-webauthn-settings-form\"\n method=\"post\"\n [action]=\"url.loginAction\"\n [kcClass]=\"'kcFormClass'\"\n >\n <button\n type=\"submit\"\n id=\"cancelWebAuthnAIA\"\n name=\"cancel-aia\"\n value=\"true\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonBlockClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </form>\n}\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40
40
  }
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: WebauthnErrorComponent, decorators: [{
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: WebauthnErrorComponent, decorators: [{
42
42
  type: Component,
43
43
  args: [{ imports: [KcClassDirective, LogoutOtherSessionsComponent], selector: 'kc-webauthn-error', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
44
44
  {
@@ -57,15 +57,15 @@ class WebauthnRegisterComponent extends ComponentReference {
57
57
  ];
58
58
  this.loginResourceInjectorService.insertAdditionalScripts(scripts);
59
59
  }
60
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: WebauthnRegisterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
61
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: WebauthnRegisterComponent, isStandalone: true, selector: "kc-webauthn-register", providers: [
60
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: WebauthnRegisterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
61
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: WebauthnRegisterComponent, isStandalone: true, selector: "kc-webauthn-register", providers: [
62
62
  {
63
63
  provide: ComponentReference,
64
64
  useExisting: forwardRef(() => WebauthnRegisterComponent)
65
65
  }
66
66
  ], viewQueries: [{ propertyName: "headerNode", first: true, predicate: ["headerNode"], descendants: true, isSignal: true }, { propertyName: "infoNode", first: true, predicate: ["infoNode"], descendants: true, isSignal: true }, { propertyName: "socialProvidersNode", first: true, predicate: ["socialProvidersNode"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let isSetRetry = kcContext.isSetRetry;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n\n<ng-template #headerNode>\n <span [kcClass]=\"'kcWebAuthnKeyIcon'\"></span>\n {{ i18n.msgStr('webauthn-registration-title') }}\n</ng-template>\n<form\n id=\"register\"\n method=\"post\"\n [kcClass]=\"'kcFormClass'\"\n [action]=\"url.loginAction\"\n>\n <div [kcClass]=\"'kcFormGroupClass'\">\n <input\n type=\"hidden\"\n id=\"clientDataJSON\"\n name=\"clientDataJSON\"\n />\n <input\n type=\"hidden\"\n id=\"attestationObject\"\n name=\"attestationObject\"\n />\n <input\n type=\"hidden\"\n id=\"publicKeyCredentialId\"\n name=\"publicKeyCredentialId\"\n />\n <input\n type=\"hidden\"\n id=\"authenticatorLabel\"\n name=\"authenticatorLabel\"\n />\n <input\n type=\"hidden\"\n id=\"transports\"\n name=\"transports\"\n />\n <input\n type=\"hidden\"\n id=\"error\"\n name=\"error\"\n />\n <kc-logout-other-sessions />\n </div>\n</form>\n<input\n type=\"submit\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass']\"\n [id]=\"authButtonId\"\n [value]=\"i18n.msgStr('doRegisterSecurityKey')\"\n/>\n@if (!isSetRetry && isAppInitiatedAction) {\n <form\n id=\"kc-webauthn-settings-form\"\n method=\"post\"\n [action]=\"url.loginAction\"\n [kcClass]=\"'kcFormClass'\"\n >\n <button\n type=\"submit\"\n id=\"cancelWebAuthnAIA\"\n name=\"cancel-aia\"\n value=\"true\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonBlockClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </form>\n}\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "component", type: LogoutOtherSessionsComponent, selector: "kc-logout-other-sessions" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
67
67
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: WebauthnRegisterComponent, decorators: [{
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: WebauthnRegisterComponent, decorators: [{
69
69
  type: Component,
70
70
  args: [{ imports: [KcClassDirective, LogoutOtherSessionsComponent], selector: 'kc-webauthn-register', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
71
71
  {
@@ -3,10 +3,10 @@ import { Injectable } from '@angular/core';
3
3
 
4
4
  /** INTERNAL: DO NOT IMPORT THIS */
5
5
  class I18nService {
6
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: I18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: I18nService, providedIn: 'root' }); }
6
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: I18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: I18nService, providedIn: 'root' }); }
8
8
  }
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: I18nService, decorators: [{
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: I18nService, decorators: [{
10
10
  type: Injectable,
11
11
  args: [{ providedIn: 'root' }]
12
12
  }] });
@@ -58,10 +58,10 @@ class LoginResourceInjectorService {
58
58
  ];
59
59
  this.insertAdditionalScripts(scripts);
60
60
  }
61
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginResourceInjectorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
62
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginResourceInjectorService, providedIn: 'root' }); }
61
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginResourceInjectorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
62
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginResourceInjectorService, providedIn: 'root' }); }
63
63
  }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: LoginResourceInjectorService, decorators: [{
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: LoginResourceInjectorService, decorators: [{
65
65
  type: Injectable,
66
66
  args: [{
67
67
  providedIn: 'root'
@@ -46,7 +46,7 @@ class UserProfileFormService {
46
46
  formFieldStates: formState_reactless.formFieldStates.map(formFieldState_reactless => ({
47
47
  attribute: formFieldState_reactless.attribute,
48
48
  valueOrValues: formFieldState_reactless.valueOrValues,
49
- displayableErrors: formFieldState_reactless.displayableErrors.map((formFieldError_reactless, i) => ({
49
+ displayableErrors: formFieldState_reactless.displayableErrors.map(formFieldError_reactless => ({
50
50
  errorMessage: this.#domSanitizer.bypassSecurityTrustHtml(this.#i18n.advancedMsgStr(...formFieldError_reactless.advancedMsgArgs)),
51
51
  errorMessageStr: this.#i18n.advancedMsgStr(...formFieldError_reactless.advancedMsgArgs),
52
52
  source: formFieldError_reactless.source,
@@ -62,10 +62,10 @@ class UserProfileFormService {
62
62
  if (this.#unsubscribe)
63
63
  this.#unsubscribe();
64
64
  }
65
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: UserProfileFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
66
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: UserProfileFormService, providedIn: 'root' }); }
65
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: UserProfileFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
66
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: UserProfileFormService, providedIn: 'root' }); }
67
67
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: UserProfileFormService, decorators: [{
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: UserProfileFormService, decorators: [{
69
69
  type: Injectable,
70
70
  args: [{ providedIn: 'root' }]
71
71
  }], ctorParameters: () => [] });
@@ -1 +1 @@
1
- {"version":3,"file":"keycloakify-angular-login-services-user-profile-form.mjs","sources":["../../src/login/services/user-profile-form/user-profile-form.service.ts","../../src/login/services/user-profile-form/keycloakify-angular-login-services-user-profile-form.ts"],"sourcesContent":["import { inject, Injectable, OnDestroy } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport type { I18n } from '@keycloakify/angular/login/i18n';\nimport { LOGIN_I18N } from '@keycloakify/angular/login/tokens/i18n';\nimport { KC_LOGIN_CONTEXT } from '@keycloakify/angular/login/tokens/kc-context';\nimport { DO_MAKE_USER_CONFIRM_PASSWORD } from '@keycloakify/angular/login/tokens/make-user-confirm-password';\nimport type {\n Attribute,\n PasswordPolicies,\n Validators\n} from 'keycloakify/login/KcContext';\nimport * as reactlessApi from 'keycloakify/login/lib/getUserProfileApi';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\nimport { assert, type Equals } from 'tsafe/assert';\n\nexport { getButtonToDisplayForMultivaluedAttributeField } from 'keycloakify/login/lib/getUserProfileApi';\n\nexport type FormFieldError = {\n errorMessage: SafeHtml;\n errorMessageStr: string;\n source: FormFieldError.Source;\n fieldIndex: number | undefined;\n};\n\n{\n type A = Omit<FormFieldError, 'errorMessage' | 'errorMessageStr'>;\n type B = Omit<reactlessApi.FormFieldError, 'advancedMsgArgs'>;\n\n assert<Equals<A, B>>();\n}\n\nexport namespace FormFieldError {\n export type Source =\n | Source.Validator\n | Source.PasswordPolicy\n | Source.Server\n | Source.Other;\n\n export namespace Source {\n export type Validator = {\n type: 'validator';\n name: keyof Validators;\n };\n export type PasswordPolicy = {\n type: 'passwordPolicy';\n name: keyof PasswordPolicies;\n };\n export type Server = {\n type: 'server';\n };\n\n export type Other = {\n type: 'other';\n rule: 'passwordConfirmMatchesPassword' | 'requiredField';\n };\n }\n}\n\n{\n type A = FormFieldError.Source;\n type B = reactlessApi.FormFieldError.Source;\n\n assert<Equals<A, B>>();\n}\n\nexport type FormFieldState = {\n attribute: Attribute;\n displayableErrors: FormFieldError[];\n valueOrValues: string | string[];\n};\n\n{\n type A = Omit<FormFieldState, 'displayableErrors'>;\n type B = Omit<reactlessApi.FormFieldState, 'displayableErrors'>;\n\n assert<Equals<A, B>>();\n}\n\nexport type FormState = {\n isFormSubmittable: boolean;\n formFieldStates: FormFieldState[];\n};\n\n{\n type A = Omit<FormState, 'formFieldStates'>;\n type B = Omit<FormState, 'formFieldStates'>;\n\n assert<Equals<A, B>>();\n}\n\nexport type FormAction =\n | {\n action: 'update';\n name: string;\n valueOrValues: string | string[];\n /** Default false */\n displayErrorsImmediately?: boolean;\n }\n | {\n action: 'focus lost';\n name: string;\n fieldIndex: number | undefined;\n };\n\n{\n type A = FormAction;\n type B = reactlessApi.FormAction;\n\n assert<Equals<A, B>>();\n}\n\nexport type KcContextLike = reactlessApi.KcContextLike;\n\nexport type I18nLike = Pick<I18n, 'advancedMsgStr'>;\n\n@Injectable({ providedIn: 'root' })\nexport class UserProfileFormService implements OnDestroy {\n #kcContext = inject<KcContextLike>(KC_LOGIN_CONTEXT);\n #i18n = inject<I18nLike>(LOGIN_I18N);\n #doMakeUserConfirmPassword = inject(DO_MAKE_USER_CONFIRM_PASSWORD);\n #domSanitizer = inject(DomSanitizer);\n #internal_formState$: BehaviorSubject<reactlessApi.FormState>;\n #unsubscribe: (() => void) | undefined;\n public formState$: Observable<FormState>;\n public dispatchFormAction: (action: FormAction) => void;\n constructor() {\n const api = reactlessApi.getUserProfileApi({\n kcContext: this.#kcContext,\n doMakeUserConfirmPassword: this.#doMakeUserConfirmPassword\n });\n this.#internal_formState$ = new BehaviorSubject<reactlessApi.FormState>(\n api.getFormState()\n );\n this.#unsubscribe = api.subscribeToFormState(() => {\n this.#internal_formState$.next(api.getFormState());\n }).unsubscribe;\n this.formState$ = this.#internal_formState$.asObservable().pipe(\n takeUntilDestroyed(),\n map(formState_reactless => ({\n isFormSubmittable: formState_reactless.isFormSubmittable,\n formFieldStates: formState_reactless.formFieldStates.map(\n formFieldState_reactless => ({\n attribute: formFieldState_reactless.attribute,\n valueOrValues: formFieldState_reactless.valueOrValues,\n displayableErrors: formFieldState_reactless.displayableErrors.map(\n (formFieldError_reactless, i) => ({\n errorMessage: this.#domSanitizer.bypassSecurityTrustHtml(\n this.#i18n.advancedMsgStr(\n ...formFieldError_reactless.advancedMsgArgs\n )\n ),\n errorMessageStr: this.#i18n.advancedMsgStr(\n ...formFieldError_reactless.advancedMsgArgs\n ),\n source: formFieldError_reactless.source,\n fieldIndex: formFieldError_reactless.fieldIndex\n })\n )\n })\n )\n }))\n );\n this.dispatchFormAction = api.dispatchFormAction;\n }\n\n ngOnDestroy(): void {\n this.#internal_formState$.complete();\n this.#internal_formState$.unsubscribe();\n if (this.#unsubscribe) this.#unsubscribe();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;AAyBA;AAII,IAAA,MAAM,EAAgB;AAC1B;AA6BA;AAII,IAAA,MAAM,EAAgB;AAC1B;AAQA;AAII,IAAA,MAAM,EAAgB;AAC1B;AAOA;AAII,IAAA,MAAM,EAAgB;AAC1B;AAgBA;AAII,IAAA,MAAM,EAAgB;AAC1B;MAOa,sBAAsB,CAAA;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAgB,gBAAgB,CAAC;AACpD,IAAA,KAAK,GAAG,MAAM,CAAW,UAAU,CAAC;AACpC,IAAA,0BAA0B,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAClE,IAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AACpC,IAAA,oBAAoB;AACpB,IAAA,YAAY;AAGZ,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,CAAC;YACvC,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,yBAAyB,EAAE,IAAI,CAAC;AACnC,SAAA,CAAC;QACF,IAAI,CAAC,oBAAoB,GAAG,IAAI,eAAe,CAC3C,GAAG,CAAC,YAAY,EAAE,CACrB;QACD,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,oBAAoB,CAAC,MAAK;YAC9C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SACrD,CAAC,CAAC,WAAW;QACd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC,IAAI,CAC3D,kBAAkB,EAAE,EACpB,GAAG,CAAC,mBAAmB,KAAK;YACxB,iBAAiB,EAAE,mBAAmB,CAAC,iBAAiB;YACxD,eAAe,EAAE,mBAAmB,CAAC,eAAe,CAAC,GAAG,CACpD,wBAAwB,KAAK;gBACzB,SAAS,EAAE,wBAAwB,CAAC,SAAS;gBAC7C,aAAa,EAAE,wBAAwB,CAAC,aAAa;AACrD,gBAAA,iBAAiB,EAAE,wBAAwB,CAAC,iBAAiB,CAAC,GAAG,CAC7D,CAAC,wBAAwB,EAAE,CAAC,MAAM;AAC9B,oBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,CACpD,IAAI,CAAC,KAAK,CAAC,cAAc,CACrB,GAAG,wBAAwB,CAAC,eAAe,CAC9C,CACJ;oBACD,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CACtC,GAAG,wBAAwB,CAAC,eAAe,CAC9C;oBACD,MAAM,EAAE,wBAAwB,CAAC,MAAM;oBACvC,UAAU,EAAE,wBAAwB,CAAC;AACxC,iBAAA,CAAC;AAET,aAAA,CAAC;SAET,CAAC,CAAC,CACN;AACD,QAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,kBAAkB;;IAGpD,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE;AACpC,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;QACvC,IAAI,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,EAAE;;8GApDrC,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;2FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACpHlC;;AAEG;;;;"}
1
+ {"version":3,"file":"keycloakify-angular-login-services-user-profile-form.mjs","sources":["../../src/login/services/user-profile-form/user-profile-form.service.ts","../../src/login/services/user-profile-form/keycloakify-angular-login-services-user-profile-form.ts"],"sourcesContent":["import { inject, Injectable, OnDestroy } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport type { I18n } from '@keycloakify/angular/login/i18n';\nimport { LOGIN_I18N } from '@keycloakify/angular/login/tokens/i18n';\nimport { KC_LOGIN_CONTEXT } from '@keycloakify/angular/login/tokens/kc-context';\nimport { DO_MAKE_USER_CONFIRM_PASSWORD } from '@keycloakify/angular/login/tokens/make-user-confirm-password';\nimport type {\n Attribute,\n PasswordPolicies,\n Validators\n} from 'keycloakify/login/KcContext';\nimport * as reactlessApi from 'keycloakify/login/lib/getUserProfileApi';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\nimport { assert, type Equals } from 'tsafe/assert';\n\nexport { getButtonToDisplayForMultivaluedAttributeField } from 'keycloakify/login/lib/getUserProfileApi';\n\nexport type FormFieldError = {\n errorMessage: SafeHtml;\n errorMessageStr: string;\n source: FormFieldError.Source;\n fieldIndex: number | undefined;\n};\n\n{\n type A = Omit<FormFieldError, 'errorMessage' | 'errorMessageStr'>;\n type B = Omit<reactlessApi.FormFieldError, 'advancedMsgArgs'>;\n\n assert<Equals<A, B>>();\n}\n\nexport namespace FormFieldError {\n export type Source =\n | Source.Validator\n | Source.PasswordPolicy\n | Source.Server\n | Source.Other;\n\n export namespace Source {\n export type Validator = {\n type: 'validator';\n name: keyof Validators;\n };\n export type PasswordPolicy = {\n type: 'passwordPolicy';\n name: keyof PasswordPolicies;\n };\n export type Server = {\n type: 'server';\n };\n\n export type Other = {\n type: 'other';\n rule: 'passwordConfirmMatchesPassword' | 'requiredField';\n };\n }\n}\n\n{\n type A = FormFieldError.Source;\n type B = reactlessApi.FormFieldError.Source;\n\n assert<Equals<A, B>>();\n}\n\nexport type FormFieldState = {\n attribute: Attribute;\n displayableErrors: FormFieldError[];\n valueOrValues: string | string[];\n};\n\n{\n type A = Omit<FormFieldState, 'displayableErrors'>;\n type B = Omit<reactlessApi.FormFieldState, 'displayableErrors'>;\n\n assert<Equals<A, B>>();\n}\n\nexport type FormState = {\n isFormSubmittable: boolean;\n formFieldStates: FormFieldState[];\n};\n\n{\n type A = Omit<FormState, 'formFieldStates'>;\n type B = Omit<FormState, 'formFieldStates'>;\n\n assert<Equals<A, B>>();\n}\n\nexport type FormAction =\n | {\n action: 'update';\n name: string;\n valueOrValues: string | string[];\n /** Default false */\n displayErrorsImmediately?: boolean;\n }\n | {\n action: 'focus lost';\n name: string;\n fieldIndex: number | undefined;\n };\n\n{\n type A = FormAction;\n type B = reactlessApi.FormAction;\n\n assert<Equals<A, B>>();\n}\n\nexport type KcContextLike = reactlessApi.KcContextLike;\n\nexport type I18nLike = Pick<I18n, 'advancedMsgStr'>;\n\n@Injectable({ providedIn: 'root' })\nexport class UserProfileFormService implements OnDestroy {\n #kcContext = inject<KcContextLike>(KC_LOGIN_CONTEXT);\n #i18n = inject<I18nLike>(LOGIN_I18N);\n #doMakeUserConfirmPassword = inject(DO_MAKE_USER_CONFIRM_PASSWORD);\n #domSanitizer = inject(DomSanitizer);\n #internal_formState$: BehaviorSubject<reactlessApi.FormState>;\n #unsubscribe: (() => void) | undefined;\n public formState$: Observable<FormState>;\n public dispatchFormAction: (action: FormAction) => void;\n constructor() {\n const api = reactlessApi.getUserProfileApi({\n kcContext: this.#kcContext,\n doMakeUserConfirmPassword: this.#doMakeUserConfirmPassword\n });\n this.#internal_formState$ = new BehaviorSubject<reactlessApi.FormState>(\n api.getFormState()\n );\n this.#unsubscribe = api.subscribeToFormState(() => {\n this.#internal_formState$.next(api.getFormState());\n }).unsubscribe;\n this.formState$ = this.#internal_formState$.asObservable().pipe(\n takeUntilDestroyed(),\n map(formState_reactless => ({\n isFormSubmittable: formState_reactless.isFormSubmittable,\n formFieldStates: formState_reactless.formFieldStates.map(\n formFieldState_reactless => ({\n attribute: formFieldState_reactless.attribute,\n valueOrValues: formFieldState_reactless.valueOrValues,\n displayableErrors: formFieldState_reactless.displayableErrors.map(\n formFieldError_reactless => ({\n errorMessage: this.#domSanitizer.bypassSecurityTrustHtml(\n this.#i18n.advancedMsgStr(\n ...formFieldError_reactless.advancedMsgArgs\n )\n ),\n errorMessageStr: this.#i18n.advancedMsgStr(\n ...formFieldError_reactless.advancedMsgArgs\n ),\n source: formFieldError_reactless.source,\n fieldIndex: formFieldError_reactless.fieldIndex\n })\n )\n })\n )\n }))\n );\n this.dispatchFormAction = api.dispatchFormAction;\n }\n\n ngOnDestroy(): void {\n this.#internal_formState$.complete();\n this.#internal_formState$.unsubscribe();\n if (this.#unsubscribe) this.#unsubscribe();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;AAyBA;AAII,IAAA,MAAM,EAAgB;AAC1B;AA6BA;AAII,IAAA,MAAM,EAAgB;AAC1B;AAQA;AAII,IAAA,MAAM,EAAgB;AAC1B;AAOA;AAII,IAAA,MAAM,EAAgB;AAC1B;AAgBA;AAII,IAAA,MAAM,EAAgB;AAC1B;MAOa,sBAAsB,CAAA;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAgB,gBAAgB,CAAC;AACpD,IAAA,KAAK,GAAG,MAAM,CAAW,UAAU,CAAC;AACpC,IAAA,0BAA0B,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAClE,IAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AACpC,IAAA,oBAAoB;AACpB,IAAA,YAAY;AAGZ,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,CAAC;YACvC,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,yBAAyB,EAAE,IAAI,CAAC;AACnC,SAAA,CAAC;QACF,IAAI,CAAC,oBAAoB,GAAG,IAAI,eAAe,CAC3C,GAAG,CAAC,YAAY,EAAE,CACrB;QACD,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,oBAAoB,CAAC,MAAK;YAC9C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SACrD,CAAC,CAAC,WAAW;QACd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC,IAAI,CAC3D,kBAAkB,EAAE,EACpB,GAAG,CAAC,mBAAmB,KAAK;YACxB,iBAAiB,EAAE,mBAAmB,CAAC,iBAAiB;YACxD,eAAe,EAAE,mBAAmB,CAAC,eAAe,CAAC,GAAG,CACpD,wBAAwB,KAAK;gBACzB,SAAS,EAAE,wBAAwB,CAAC,SAAS;gBAC7C,aAAa,EAAE,wBAAwB,CAAC,aAAa;gBACrD,iBAAiB,EAAE,wBAAwB,CAAC,iBAAiB,CAAC,GAAG,CAC7D,wBAAwB,KAAK;AACzB,oBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,CACpD,IAAI,CAAC,KAAK,CAAC,cAAc,CACrB,GAAG,wBAAwB,CAAC,eAAe,CAC9C,CACJ;oBACD,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CACtC,GAAG,wBAAwB,CAAC,eAAe,CAC9C;oBACD,MAAM,EAAE,wBAAwB,CAAC,MAAM;oBACvC,UAAU,EAAE,wBAAwB,CAAC;AACxC,iBAAA,CAAC;AAET,aAAA,CAAC;SAET,CAAC,CAAC,CACN;AACD,QAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,kBAAkB;;IAGpD,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE;AACpC,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;QACvC,IAAI,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,EAAE;;8GApDrC,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;2FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACpHlC;;AAEG;;;;"}