@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.
- package/README.md +2 -0
- package/bin/index.js +72 -1113
- package/fesm2022/keycloakify-angular-account-directives-kc-class.mjs +3 -3
- package/fesm2022/keycloakify-angular-account-directives-kc-class.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-account-pages-account.mjs +3 -3
- package/fesm2022/keycloakify-angular-account-pages-account.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-account-pages-applications.mjs +3 -3
- package/fesm2022/keycloakify-angular-account-pages-applications.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs +3 -3
- package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-account-pages-log.mjs +3 -3
- package/fesm2022/keycloakify-angular-account-pages-log.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-account-pages-password.mjs +17 -10
- package/fesm2022/keycloakify-angular-account-pages-password.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-account-pages-sessions.mjs +3 -3
- package/fesm2022/keycloakify-angular-account-pages-sessions.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-account-pages-totp.mjs +3 -3
- package/fesm2022/keycloakify-angular-account-pages-totp.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-account-services-account-resource-injector.mjs +3 -3
- package/fesm2022/keycloakify-angular-account-services-account-resource-injector.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-account-services-i18n.mjs +3 -3
- package/fesm2022/keycloakify-angular-account-services-i18n.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-account-template.mjs +5 -4
- package/fesm2022/keycloakify-angular-account-template.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-lib-directives-attributes.mjs +5 -4
- package/fesm2022/keycloakify-angular-lib-directives-attributes.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-lib-pipes-input-type.mjs +3 -3
- package/fesm2022/keycloakify-angular-lib-pipes-input-type.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-lib-pipes-is-array-with-empty-object.mjs +3 -3
- package/fesm2022/keycloakify-angular-lib-pipes-is-array-with-empty-object.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-lib-pipes-kc-sanitize.mjs +3 -3
- package/fesm2022/keycloakify-angular-lib-pipes-kc-sanitize.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-lib-pipes-to-array.mjs +3 -3
- package/fesm2022/keycloakify-angular-lib-pipes-to-array.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-lib-pipes-to-number.mjs +3 -3
- package/fesm2022/keycloakify-angular-lib-pipes-to-number.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-lib-services-resource-injector.mjs +3 -3
- package/fesm2022/keycloakify-angular-lib-services-resource-injector.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-components-add-remove-buttons-multi-valued-attribute.mjs +13 -8
- package/fesm2022/keycloakify-angular-login-components-add-remove-buttons-multi-valued-attribute.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-components-field-errors.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-components-field-errors.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-components-group-label.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-components-group-label.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-components-input-field-by-type.mjs +11 -7
- package/fesm2022/keycloakify-angular-login-components-input-field-by-type.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-components-input-tag-selects.mjs +13 -8
- package/fesm2022/keycloakify-angular-login-components-input-tag-selects.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-components-input-tag.mjs +15 -9
- package/fesm2022/keycloakify-angular-login-components-input-tag.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-components-logout-other-sessions.mjs +3 -3
- package/fesm2022/keycloakify-angular-login-components-logout-other-sessions.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-components-password-wrapper.mjs +7 -5
- package/fesm2022/keycloakify-angular-login-components-password-wrapper.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-components-select-tag.mjs +13 -8
- package/fesm2022/keycloakify-angular-login-components-select-tag.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-components-textarea-tag.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-components-textarea-tag.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-components-user-profile-form-fields.mjs +3 -3
- package/fesm2022/keycloakify-angular-login-components-user-profile-form-fields.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-directives-kc-class.mjs +3 -3
- package/fesm2022/keycloakify-angular-login-directives-kc-class.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-code.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-code.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-delete-account-confirm.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-delete-account-confirm.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-error.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-error.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-frontchannel-logout.mjs +11 -7
- package/fesm2022/keycloakify-angular-login-pages-frontchannel-logout.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs +11 -7
- package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-info.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-info.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-link-idp-action.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-link-idp-action.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-config-totp.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-config-totp.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm-override.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm-override.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-otp.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-otp.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-password.mjs +11 -7
- package/fesm2022/keycloakify-angular-login-pages-login-password.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-config.mjs +11 -7
- package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-config.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-update-password.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-update-password.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs +11 -7
- package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-username.mjs +11 -7
- package/fesm2022/keycloakify-angular-login-pages-login-username.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login-x509-info.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-login-x509-info.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-login.mjs +11 -7
- package/fesm2022/keycloakify-angular-login-pages-login.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-logout-confirm.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-logout-confirm.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-register.mjs +13 -8
- package/fesm2022/keycloakify-angular-login-pages-register.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs +11 -7
- package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-terms.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-terms.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-update-email.mjs +11 -7
- package/fesm2022/keycloakify-angular-login-pages-update-email.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs +9 -6
- package/fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-services-i18n.mjs +3 -3
- package/fesm2022/keycloakify-angular-login-services-i18n.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-services-login-resource-injector.mjs +3 -3
- package/fesm2022/keycloakify-angular-login-services-login-resource-injector.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-services-user-profile-form.mjs +3 -3
- package/fesm2022/keycloakify-angular-login-services-user-profile-form.mjs.map +1 -1
- package/fesm2022/keycloakify-angular-login-template.mjs +13 -8
- package/fesm2022/keycloakify-angular-login-template.mjs.map +1 -1
- package/package.json +1 -1
- package/src/bin/initialize-account-theme/boilerplate/KcPageStory.ts +2 -0
- package/src/bin/tsconfig.json +4 -5
- package/bin/187.index.js +0 -514
- package/bin/202.index.js +0 -7778
- package/bin/476.index.js +0 -400
- package/bin/671.index.js +0 -1354
- package/bin/942.index.js +0 -911
|
@@ -17,15 +17,15 @@ class TotpComponent extends ComponentReference {
|
|
|
17
17
|
this.classes = inject(ACCOUNT_CLASSES);
|
|
18
18
|
this.active = 'totp';
|
|
19
19
|
}
|
|
20
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
21
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
20
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: TotpComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
21
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: TotpComponent, isStandalone: true, selector: "kc-totp", providers: [
|
|
22
22
|
{
|
|
23
23
|
provide: ComponentReference,
|
|
24
24
|
useExisting: forwardRef(() => TotpComponent)
|
|
25
25
|
}
|
|
26
26
|
], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let mode = kcContext.mode;\n@let messagesPerField = kcContext.messagesPerField;\n@let stateChecker = kcContext.stateChecker;\n@let totp = kcContext.totp;\n\n<div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('authenticatorTitle') }}</h2>\n </div>\n @if (totp.otpCredentials.length) {\n <div class=\"subtitle col-md-2\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </div>\n }\n</div>\n@if (totp.enabled) {\n <table class=\"table table-bordered table-striped\">\n <thead>\n @if (totp.otpCredentials.length > 1) {\n <tr>\n <th [colSpan]=\"4\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n } @else {\n <tr>\n <th [colSpan]=\"3\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n }\n </thead>\n <tbody>\n @for (credential of totp.otpCredentials; track credential; let index = $index) {\n <tr>\n <td class=\"provider\">{{ i18n.msgStr('mobile') }}</td>\n @if (totp.otpCredentials.length > 1) {\n <td class=\"provider\">{{ credential.id }}</td>\n }\n <td class=\"provider\">{{ credential.userLabel || '' }}</td>\n <td class=\"action\">\n <form\n method=\"post\"\n class=\"form-inline\"\n [action]=\"url.totpUrl\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n id=\"submitAction\"\n name=\"submitAction\"\n value=\"Delete\"\n />\n <input\n type=\"hidden\"\n id=\"credentialId\"\n name=\"credentialId\"\n [value]=\"credential.id\"\n />\n <button\n class=\"btn btn-default\"\n [id]=\"'remove-mobile-' + index\"\n >\n <i class=\"pficon pficon-delete\"></i>\n </button>\n </form>\n </td>\n </tr>\n }\n </tbody>\n </table>\n} @else {\n <div>\n <hr />\n <ol id=\"kc-totp-settings\">\n <li>\n <p>{{ i18n.msgStr('totpStep1') }}</p>\n\n <ul id=\"kc-totp-supported-apps\">\n @for (app of totp.supportedApplications; track app) {\n <li>{{ i18n.advancedMsgStr(app) }}</li>\n }\n </ul>\n </li>\n @if (mode && mode === 'manual') {\n <li>\n <p>{{ i18n.msgStr('totpManualStep2') }}</p>\n <p>\n <span id=\"kc-totp-secret-key\">{{ totp.totpSecretEncoded }}</span>\n </p>\n <p>\n <a\n id=\"mode-barcode\"\n [href]=\"totp.qrUrl\"\n >\n {{ i18n.msgStr('totpScanBarcode') }}\n </a>\n </p>\n </li>\n <li>\n <p>{{ i18n.msgStr('totpManualStep3') }}</p>\n <ul>\n <li id=\"kc-totp-type\">{{ i18n.msgStr('totpType') }}: {{ i18n.msgStr($any('totp.' + totp.policy.type)) }}</li>\n <li id=\"kc-totp-algorithm\">{{ i18n.msgStr('totpAlgorithm') }}: {{ totp.policy.getAlgorithmKey() }}</li>\n <li id=\"kc-totp-digits\">{{ i18n.msgStr('totpDigits') }}: {{ totp.policy.digits }}</li>\n @if (totp.policy.type === 'totp') {\n <li id=\"kc-totp-period\">{{ i18n.msgStr('totpInterval') }}: {{ totp.policy.period }}</li>\n } @else {\n <li id=\"kc-totp-counter\">{{ i18n.msgStr('totpCounter') }}: {{ totp.policy.initialCounter }}</li>\n }\n </ul>\n </li>\n } @else {\n <li>\n <p>{{ i18n.msgStr('totpStep2') }}</p>\n <p>\n <img\n id=\"kc-totp-secret-qr-code\"\n alt=\"Figure: Barcode\"\n [src]=\"'data:image/png;base64, ' + totp.totpSecretQrCode\"\n />\n </p>\n <p>\n <a\n id=\"mode-manual\"\n [href]=\"totp.manualUrl\"\n >\n {{ i18n.msgStr('totpUnableToScan') }}\n </a>\n </p>\n </li>\n }\n <li>\n <p>{{ i18n.msgStr('totpStep3') }}</p>\n <p>{{ i18n.msgStr('totpStep3DeviceName') }}</p>\n </li>\n </ol>\n <hr />\n <form\n id=\"kc-totp-settings-form\"\n method=\"post\"\n [action]=\"url.totpUrl\"\n [kcClass]=\"'kcFormClass'\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"totp\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('authenticatorCode') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"totp\"\n name=\"totp\"\n autocomplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('totp')\"\n />\n @if (messagesPerField.existsError('totp')) {\n <span\n id=\"input-error-otp-code\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('totp') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n <input\n type=\"hidden\"\n id=\"totpSecret\"\n name=\"totpSecret\"\n [value]=\"totp.totpSecret\"\n />\n @if (mode) {\n <input\n type=\"hidden\"\n id=\"mode\"\n [value]=\"mode\"\n />\n }\n </div>\n\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"userLabel\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('totpDeviceName') }}\n </label>\n @if (totp.otpCredentials.length >= 1) {\n <span class=\"required\">*</span>\n }\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"userLabel\"\n name=\"userLabel\"\n autocomplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('userLabel')\"\n />\n @if (messagesPerField.existsError('userLabel')) {\n <span\n id=\"input-error-otp-label\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('userLabel') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n </div>\n\n <div\n id=\"kc-form-buttons\"\n class=\"text-right\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <div [kcClass]=\"'kcInputWrapperClass'\">\n <input\n type=\"submit\"\n id=\"saveTOTPBtn\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doSave')\"\n />\n <button\n type=\"submit\"\n id=\"cancelTOTPBtn\"\n name=\"submitAction\"\n value=\"Cancel\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n}\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27
27
|
}
|
|
28
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: TotpComponent, decorators: [{
|
|
29
29
|
type: Component,
|
|
30
30
|
args: [{ imports: [KcClassDirective, KcSanitizePipe], selector: 'kc-totp', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
31
31
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycloakify-angular-account-pages-totp.mjs","sources":["../../src/account/pages/totp/totp.component.ts","../../src/account/pages/totp/totp.component.html","../../src/account/pages/totp/keycloakify-angular-account-pages-totp.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, forwardRef, inject } from '@angular/core';\nimport { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';\nimport { KcClassDirective } from '@keycloakify/angular/account/directives/kc-class';\nimport type { I18n } from '@keycloakify/angular/account/i18n';\nimport type { KcContext } from '@keycloakify/angular/account/KcContext';\nimport { ACCOUNT_CLASSES } from '@keycloakify/angular/account/tokens/classes';\nimport { ACCOUNT_I18N } from '@keycloakify/angular/account/tokens/i18n';\nimport { KC_ACCOUNT_CONTEXT } from '@keycloakify/angular/account/tokens/kc-context';\nimport { KcSanitizePipe } from '@keycloakify/angular/lib/pipes/kc-sanitize';\nimport { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';\nimport type { ClassKey } from 'keycloakify/account/lib/kcClsx';\n\n@Component({\n imports: [KcClassDirective, KcSanitizePipe],\n selector: 'kc-totp',\n templateUrl: 'totp.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: ComponentReference,\n useExisting: forwardRef(() => TotpComponent)\n }\n ]\n})\nexport class TotpComponent extends ComponentReference {\n i18n = inject<I18n>(ACCOUNT_I18N);\n kcContext = inject<Extract<KcContext, { pageId: 'totp.ftl' }>>(KC_ACCOUNT_CONTEXT);\n override doUseDefaultCss = inject<boolean>(USE_DEFAULT_CSS);\n override classes = inject<Partial<Record<ClassKey, string>>>(ACCOUNT_CLASSES);\n active = 'totp';\n}\n","@let url = kcContext.url;\n@let mode = kcContext.mode;\n@let messagesPerField = kcContext.messagesPerField;\n@let stateChecker = kcContext.stateChecker;\n@let totp = kcContext.totp;\n\n<div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('authenticatorTitle') }}</h2>\n </div>\n @if (totp.otpCredentials.length) {\n <div class=\"subtitle col-md-2\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </div>\n }\n</div>\n@if (totp.enabled) {\n <table class=\"table table-bordered table-striped\">\n <thead>\n @if (totp.otpCredentials.length > 1) {\n <tr>\n <th [colSpan]=\"4\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n } @else {\n <tr>\n <th [colSpan]=\"3\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n }\n </thead>\n <tbody>\n @for (credential of totp.otpCredentials; track credential; let index = $index) {\n <tr>\n <td class=\"provider\">{{ i18n.msgStr('mobile') }}</td>\n @if (totp.otpCredentials.length > 1) {\n <td class=\"provider\">{{ credential.id }}</td>\n }\n <td class=\"provider\">{{ credential.userLabel || '' }}</td>\n <td class=\"action\">\n <form\n method=\"post\"\n class=\"form-inline\"\n [action]=\"url.totpUrl\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n id=\"submitAction\"\n name=\"submitAction\"\n value=\"Delete\"\n />\n <input\n type=\"hidden\"\n id=\"credentialId\"\n name=\"credentialId\"\n [value]=\"credential.id\"\n />\n <button\n class=\"btn btn-default\"\n [id]=\"'remove-mobile-' + index\"\n >\n <i class=\"pficon pficon-delete\"></i>\n </button>\n </form>\n </td>\n </tr>\n }\n </tbody>\n </table>\n} @else {\n <div>\n <hr />\n <ol id=\"kc-totp-settings\">\n <li>\n <p>{{ i18n.msgStr('totpStep1') }}</p>\n\n <ul id=\"kc-totp-supported-apps\">\n @for (app of totp.supportedApplications; track app) {\n <li>{{ i18n.advancedMsgStr(app) }}</li>\n }\n </ul>\n </li>\n @if (mode && mode === 'manual') {\n <li>\n <p>{{ i18n.msgStr('totpManualStep2') }}</p>\n <p>\n <span id=\"kc-totp-secret-key\">{{ totp.totpSecretEncoded }}</span>\n </p>\n <p>\n <a\n id=\"mode-barcode\"\n [href]=\"totp.qrUrl\"\n >\n {{ i18n.msgStr('totpScanBarcode') }}\n </a>\n </p>\n </li>\n <li>\n <p>{{ i18n.msgStr('totpManualStep3') }}</p>\n <ul>\n <li id=\"kc-totp-type\">{{ i18n.msgStr('totpType') }}: {{ i18n.msgStr($any('totp.' + totp.policy.type)) }}</li>\n <li id=\"kc-totp-algorithm\">{{ i18n.msgStr('totpAlgorithm') }}: {{ totp.policy.getAlgorithmKey() }}</li>\n <li id=\"kc-totp-digits\">{{ i18n.msgStr('totpDigits') }}: {{ totp.policy.digits }}</li>\n @if (totp.policy.type === 'totp') {\n <li id=\"kc-totp-period\">{{ i18n.msgStr('totpInterval') }}: {{ totp.policy.period }}</li>\n } @else {\n <li id=\"kc-totp-counter\">{{ i18n.msgStr('totpCounter') }}: {{ totp.policy.initialCounter }}</li>\n }\n </ul>\n </li>\n } @else {\n <li>\n <p>{{ i18n.msgStr('totpStep2') }}</p>\n <p>\n <img\n id=\"kc-totp-secret-qr-code\"\n alt=\"Figure: Barcode\"\n [src]=\"'data:image/png;base64, ' + totp.totpSecretQrCode\"\n />\n </p>\n <p>\n <a\n id=\"mode-manual\"\n [href]=\"totp.manualUrl\"\n >\n {{ i18n.msgStr('totpUnableToScan') }}\n </a>\n </p>\n </li>\n }\n <li>\n <p>{{ i18n.msgStr('totpStep3') }}</p>\n <p>{{ i18n.msgStr('totpStep3DeviceName') }}</p>\n </li>\n </ol>\n <hr />\n <form\n id=\"kc-totp-settings-form\"\n method=\"post\"\n [action]=\"url.totpUrl\"\n [kcClass]=\"'kcFormClass'\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"totp\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('authenticatorCode') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"totp\"\n name=\"totp\"\n autocomplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('totp')\"\n />\n @if (messagesPerField.existsError('totp')) {\n <span\n id=\"input-error-otp-code\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('totp') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n <input\n type=\"hidden\"\n id=\"totpSecret\"\n name=\"totpSecret\"\n [value]=\"totp.totpSecret\"\n />\n @if (mode) {\n <input\n type=\"hidden\"\n id=\"mode\"\n [value]=\"mode\"\n />\n }\n </div>\n\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"userLabel\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('totpDeviceName') }}\n </label>\n @if (totp.otpCredentials.length >= 1) {\n <span class=\"required\">*</span>\n }\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"userLabel\"\n name=\"userLabel\"\n autocomplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('userLabel')\"\n />\n @if (messagesPerField.existsError('userLabel')) {\n <span\n id=\"input-error-otp-label\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('userLabel') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n </div>\n\n <div\n id=\"kc-form-buttons\"\n class=\"text-right\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <div [kcClass]=\"'kcInputWrapperClass'\">\n <input\n type=\"submit\"\n id=\"saveTOTPBtn\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doSave')\"\n />\n <button\n type=\"submit\"\n id=\"cancelTOTPBtn\"\n name=\"submitAction\"\n value=\"Cancel\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAwBM,MAAO,aAAc,SAAQ,kBAAkB,CAAA;AAZrD,IAAA,WAAA,GAAA;;AAaI,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAO,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAA6C,kBAAkB,CAAC;AACzE,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAU,eAAe,CAAC;AAClD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAoC,eAAe,CAAC;QAC7E,IAAA,CAAA,MAAM,GAAG,MAAM;AAClB,IAAA;+GANY,aAAa,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAPX;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa;AAC9C;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBL,onUA8PA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjPc,gBAAgB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAWjC,aAAa,EAAA,UAAA,EAAA,CAAA;kBAZzB,SAAS;8BACG,CAAC,gBAAgB,EAAE,cAAc,CAAC,EAAA,QAAA,EACjC,SAAS,EAAA,eAAA,EAEF,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB;AAC9C;AACJ,qBAAA,EAAA,QAAA,EAAA,onUAAA,EAAA;;;AEtBL;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"keycloakify-angular-account-pages-totp.mjs","sources":["../../src/account/pages/totp/totp.component.ts","../../src/account/pages/totp/totp.component.html","../../src/account/pages/totp/keycloakify-angular-account-pages-totp.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, forwardRef, inject } from '@angular/core';\nimport { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';\nimport { KcClassDirective } from '@keycloakify/angular/account/directives/kc-class';\nimport type { I18n } from '@keycloakify/angular/account/i18n';\nimport type { KcContext } from '@keycloakify/angular/account/KcContext';\nimport { ACCOUNT_CLASSES } from '@keycloakify/angular/account/tokens/classes';\nimport { ACCOUNT_I18N } from '@keycloakify/angular/account/tokens/i18n';\nimport { KC_ACCOUNT_CONTEXT } from '@keycloakify/angular/account/tokens/kc-context';\nimport { KcSanitizePipe } from '@keycloakify/angular/lib/pipes/kc-sanitize';\nimport { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';\nimport type { ClassKey } from 'keycloakify/account/lib/kcClsx';\n\n@Component({\n imports: [KcClassDirective, KcSanitizePipe],\n selector: 'kc-totp',\n templateUrl: 'totp.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: ComponentReference,\n useExisting: forwardRef(() => TotpComponent)\n }\n ]\n})\nexport class TotpComponent extends ComponentReference {\n i18n = inject<I18n>(ACCOUNT_I18N);\n kcContext = inject<Extract<KcContext, { pageId: 'totp.ftl' }>>(KC_ACCOUNT_CONTEXT);\n override doUseDefaultCss = inject<boolean>(USE_DEFAULT_CSS);\n override classes = inject<Partial<Record<ClassKey, string>>>(ACCOUNT_CLASSES);\n active = 'totp';\n}\n","@let url = kcContext.url;\n@let mode = kcContext.mode;\n@let messagesPerField = kcContext.messagesPerField;\n@let stateChecker = kcContext.stateChecker;\n@let totp = kcContext.totp;\n\n<div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('authenticatorTitle') }}</h2>\n </div>\n @if (totp.otpCredentials.length) {\n <div class=\"subtitle col-md-2\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </div>\n }\n</div>\n@if (totp.enabled) {\n <table class=\"table table-bordered table-striped\">\n <thead>\n @if (totp.otpCredentials.length > 1) {\n <tr>\n <th [colSpan]=\"4\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n } @else {\n <tr>\n <th [colSpan]=\"3\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n }\n </thead>\n <tbody>\n @for (credential of totp.otpCredentials; track credential; let index = $index) {\n <tr>\n <td class=\"provider\">{{ i18n.msgStr('mobile') }}</td>\n @if (totp.otpCredentials.length > 1) {\n <td class=\"provider\">{{ credential.id }}</td>\n }\n <td class=\"provider\">{{ credential.userLabel || '' }}</td>\n <td class=\"action\">\n <form\n method=\"post\"\n class=\"form-inline\"\n [action]=\"url.totpUrl\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n id=\"submitAction\"\n name=\"submitAction\"\n value=\"Delete\"\n />\n <input\n type=\"hidden\"\n id=\"credentialId\"\n name=\"credentialId\"\n [value]=\"credential.id\"\n />\n <button\n class=\"btn btn-default\"\n [id]=\"'remove-mobile-' + index\"\n >\n <i class=\"pficon pficon-delete\"></i>\n </button>\n </form>\n </td>\n </tr>\n }\n </tbody>\n </table>\n} @else {\n <div>\n <hr />\n <ol id=\"kc-totp-settings\">\n <li>\n <p>{{ i18n.msgStr('totpStep1') }}</p>\n\n <ul id=\"kc-totp-supported-apps\">\n @for (app of totp.supportedApplications; track app) {\n <li>{{ i18n.advancedMsgStr(app) }}</li>\n }\n </ul>\n </li>\n @if (mode && mode === 'manual') {\n <li>\n <p>{{ i18n.msgStr('totpManualStep2') }}</p>\n <p>\n <span id=\"kc-totp-secret-key\">{{ totp.totpSecretEncoded }}</span>\n </p>\n <p>\n <a\n id=\"mode-barcode\"\n [href]=\"totp.qrUrl\"\n >\n {{ i18n.msgStr('totpScanBarcode') }}\n </a>\n </p>\n </li>\n <li>\n <p>{{ i18n.msgStr('totpManualStep3') }}</p>\n <ul>\n <li id=\"kc-totp-type\">{{ i18n.msgStr('totpType') }}: {{ i18n.msgStr($any('totp.' + totp.policy.type)) }}</li>\n <li id=\"kc-totp-algorithm\">{{ i18n.msgStr('totpAlgorithm') }}: {{ totp.policy.getAlgorithmKey() }}</li>\n <li id=\"kc-totp-digits\">{{ i18n.msgStr('totpDigits') }}: {{ totp.policy.digits }}</li>\n @if (totp.policy.type === 'totp') {\n <li id=\"kc-totp-period\">{{ i18n.msgStr('totpInterval') }}: {{ totp.policy.period }}</li>\n } @else {\n <li id=\"kc-totp-counter\">{{ i18n.msgStr('totpCounter') }}: {{ totp.policy.initialCounter }}</li>\n }\n </ul>\n </li>\n } @else {\n <li>\n <p>{{ i18n.msgStr('totpStep2') }}</p>\n <p>\n <img\n id=\"kc-totp-secret-qr-code\"\n alt=\"Figure: Barcode\"\n [src]=\"'data:image/png;base64, ' + totp.totpSecretQrCode\"\n />\n </p>\n <p>\n <a\n id=\"mode-manual\"\n [href]=\"totp.manualUrl\"\n >\n {{ i18n.msgStr('totpUnableToScan') }}\n </a>\n </p>\n </li>\n }\n <li>\n <p>{{ i18n.msgStr('totpStep3') }}</p>\n <p>{{ i18n.msgStr('totpStep3DeviceName') }}</p>\n </li>\n </ol>\n <hr />\n <form\n id=\"kc-totp-settings-form\"\n method=\"post\"\n [action]=\"url.totpUrl\"\n [kcClass]=\"'kcFormClass'\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"totp\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('authenticatorCode') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"totp\"\n name=\"totp\"\n autocomplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('totp')\"\n />\n @if (messagesPerField.existsError('totp')) {\n <span\n id=\"input-error-otp-code\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('totp') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n <input\n type=\"hidden\"\n id=\"totpSecret\"\n name=\"totpSecret\"\n [value]=\"totp.totpSecret\"\n />\n @if (mode) {\n <input\n type=\"hidden\"\n id=\"mode\"\n [value]=\"mode\"\n />\n }\n </div>\n\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"userLabel\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('totpDeviceName') }}\n </label>\n @if (totp.otpCredentials.length >= 1) {\n <span class=\"required\">*</span>\n }\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"userLabel\"\n name=\"userLabel\"\n autocomplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('userLabel')\"\n />\n @if (messagesPerField.existsError('userLabel')) {\n <span\n id=\"input-error-otp-label\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('userLabel') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n </div>\n\n <div\n id=\"kc-form-buttons\"\n class=\"text-right\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <div [kcClass]=\"'kcInputWrapperClass'\">\n <input\n type=\"submit\"\n id=\"saveTOTPBtn\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doSave')\"\n />\n <button\n type=\"submit\"\n id=\"cancelTOTPBtn\"\n name=\"submitAction\"\n value=\"Cancel\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAwBM,MAAO,aAAc,SAAQ,kBAAkB,CAAA;AAZrD,IAAA,WAAA,GAAA;;AAaI,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAO,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAA6C,kBAAkB,CAAC;AACzE,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAU,eAAe,CAAC;AAClD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAoC,eAAe,CAAC;QAC7E,IAAA,CAAA,MAAM,GAAG,MAAM;AAClB,IAAA;8GANY,aAAa,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAPX;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa;AAC9C;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBL,onUA8PA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjPc,gBAAgB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAWjC,aAAa,EAAA,UAAA,EAAA,CAAA;kBAZzB,SAAS;8BACG,CAAC,gBAAgB,EAAE,cAAc,CAAC,EAAA,QAAA,EACjC,SAAS,EAAA,eAAA,EAEF,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB;AAC9C;AACJ,qBAAA,EAAA,QAAA,EAAA,onUAAA,EAAA;;;AEtBL;;AAEG;;;;"}
|
|
@@ -27,10 +27,10 @@ class AccountResourceInjectorService {
|
|
|
27
27
|
insertAdditionalScripts(scripts) {
|
|
28
28
|
scripts.map(script => this.resourceInjectorService.createScript(script));
|
|
29
29
|
}
|
|
30
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
31
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
30
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: AccountResourceInjectorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
31
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: AccountResourceInjectorService, providedIn: 'root' }); }
|
|
32
32
|
}
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: AccountResourceInjectorService, decorators: [{
|
|
34
34
|
type: Injectable,
|
|
35
35
|
args: [{
|
|
36
36
|
providedIn: 'root'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycloakify-angular-account-services-account-resource-injector.mjs","sources":["../../src/account/services/account-resource-injector/account-resource-injector.service.ts","../../src/account/services/account-resource-injector/keycloakify-angular-account-services-account-resource-injector.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { KC_ACCOUNT_CONTEXT } from '@keycloakify/angular/account/tokens/kc-context';\nimport { type Script } from '@keycloakify/angular/lib/models/script';\nimport { ResourceInjectorService } from '@keycloakify/angular/lib/services/resource-injector';\nimport { catchError, forkJoin, of, switchMap } from 'rxjs';\nimport type { KcContext } from '@keycloakify/angular/account/KcContext';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AccountResourceInjectorService {\n private kcContext: KcContext = inject<KcContext>(KC_ACCOUNT_CONTEXT);\n private resourceInjectorService: ResourceInjectorService = inject(\n ResourceInjectorService\n );\n\n injectResource(doUseDefaultCss = true) {\n if (!doUseDefaultCss) {\n return of(true);\n }\n const stylesheets = [\n `${this.kcContext.url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly.min.css`,\n `${this.kcContext.url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly-additions.min.css`,\n `${this.kcContext.url.resourcesPath}/css/account.css`\n ];\n\n return forkJoin(\n stylesheets.map(url => this.resourceInjectorService.createLink(url))\n ).pipe(\n switchMap(() => of(true)),\n catchError(error => {\n console.error('Error loading styles:', error);\n return of(false);\n })\n );\n }\n\n insertAdditionalScripts(scripts: Script[]) {\n scripts.map(script => this.resourceInjectorService.createScript(script));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAUa,8BAA8B,CAAA;AAH3C,IAAA,WAAA,GAAA;AAIY,QAAA,IAAA,CAAA,SAAS,GAAc,MAAM,CAAY,kBAAkB,CAAC;AAC5D,QAAA,IAAA,CAAA,uBAAuB,GAA4B,MAAM,CAC7D,uBAAuB,CAC1B;AA0BJ,IAAA;IAxBG,cAAc,CAAC,eAAe,GAAG,IAAI,EAAA;QACjC,IAAI,CAAC,eAAe,EAAE;AAClB,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACnB;AACA,QAAA,MAAM,WAAW,GAAG;AAChB,YAAA,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAA,oDAAA,CAAsD;AAC/F,YAAA,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAA,8DAAA,CAAgE;AACzG,YAAA,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAA,gBAAA;SACtC;AAED,QAAA,OAAO,QAAQ,CACX,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CACvE,CAAC,IAAI,CACF,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,EACzB,UAAU,CAAC,KAAK,IAAG;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;AAC7C,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,CACL;IACL;AAEA,IAAA,uBAAuB,CAAC,OAAiB,EAAA;AACrC,QAAA,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5E
|
|
1
|
+
{"version":3,"file":"keycloakify-angular-account-services-account-resource-injector.mjs","sources":["../../src/account/services/account-resource-injector/account-resource-injector.service.ts","../../src/account/services/account-resource-injector/keycloakify-angular-account-services-account-resource-injector.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { KC_ACCOUNT_CONTEXT } from '@keycloakify/angular/account/tokens/kc-context';\nimport { type Script } from '@keycloakify/angular/lib/models/script';\nimport { ResourceInjectorService } from '@keycloakify/angular/lib/services/resource-injector';\nimport { catchError, forkJoin, of, switchMap } from 'rxjs';\nimport type { KcContext } from '@keycloakify/angular/account/KcContext';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AccountResourceInjectorService {\n private kcContext: KcContext = inject<KcContext>(KC_ACCOUNT_CONTEXT);\n private resourceInjectorService: ResourceInjectorService = inject(\n ResourceInjectorService\n );\n\n injectResource(doUseDefaultCss = true) {\n if (!doUseDefaultCss) {\n return of(true);\n }\n const stylesheets = [\n `${this.kcContext.url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly.min.css`,\n `${this.kcContext.url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly-additions.min.css`,\n `${this.kcContext.url.resourcesPath}/css/account.css`\n ];\n\n return forkJoin(\n stylesheets.map(url => this.resourceInjectorService.createLink(url))\n ).pipe(\n switchMap(() => of(true)),\n catchError(error => {\n console.error('Error loading styles:', error);\n return of(false);\n })\n );\n }\n\n insertAdditionalScripts(scripts: Script[]) {\n scripts.map(script => this.resourceInjectorService.createScript(script));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAUa,8BAA8B,CAAA;AAH3C,IAAA,WAAA,GAAA;AAIY,QAAA,IAAA,CAAA,SAAS,GAAc,MAAM,CAAY,kBAAkB,CAAC;AAC5D,QAAA,IAAA,CAAA,uBAAuB,GAA4B,MAAM,CAC7D,uBAAuB,CAC1B;AA0BJ,IAAA;IAxBG,cAAc,CAAC,eAAe,GAAG,IAAI,EAAA;QACjC,IAAI,CAAC,eAAe,EAAE;AAClB,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACnB;AACA,QAAA,MAAM,WAAW,GAAG;AAChB,YAAA,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAA,oDAAA,CAAsD;AAC/F,YAAA,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAA,8DAAA,CAAgE;AACzG,YAAA,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAA,gBAAA;SACtC;AAED,QAAA,OAAO,QAAQ,CACX,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CACvE,CAAC,IAAI,CACF,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,EACzB,UAAU,CAAC,KAAK,IAAG;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;AAC7C,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,CACL;IACL;AAEA,IAAA,uBAAuB,CAAC,OAAiB,EAAA;AACrC,QAAA,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5E;8GA7BS,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA9B,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,8BAA8B,cAF3B,MAAM,EAAA,CAAA,CAAA;;2FAET,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACTD;;AAEG;;;;"}
|
|
@@ -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: "
|
|
7
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: I18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
7
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: I18nService, providedIn: 'root' }); }
|
|
8
8
|
}
|
|
9
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: I18nService, decorators: [{
|
|
10
10
|
type: Injectable,
|
|
11
11
|
args: [{ providedIn: 'root' }]
|
|
12
12
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycloakify-angular-account-services-i18n.mjs","sources":["../../src/account/services/i18n/i18n.service.ts","../../src/account/services/i18n/keycloakify-angular-account-services-i18n.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\n/** INTERNAL: DO NOT IMPORT THIS */\nexport class I18nService {\n i18n!: unknown;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAGA;MACa,WAAW,CAAA
|
|
1
|
+
{"version":3,"file":"keycloakify-angular-account-services-i18n.mjs","sources":["../../src/account/services/i18n/i18n.service.ts","../../src/account/services/i18n/keycloakify-angular-account-services-i18n.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\n/** INTERNAL: DO NOT IMPORT THIS */\nexport class I18nService {\n i18n!: unknown;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAGA;MACa,WAAW,CAAA;8GAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,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,WAAW,cAFE,MAAM,EAAA,CAAA,CAAA;;2FAEnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBAFvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACFlC;;AAEG;;;;"}
|
|
@@ -26,7 +26,8 @@ class TemplateComponent extends ComponentReference {
|
|
|
26
26
|
this.doUseDefaultCss = inject(USE_DEFAULT_CSS);
|
|
27
27
|
this.classes = inject(ACCOUNT_CLASSES);
|
|
28
28
|
this.accountResourceInjectorService = inject(AccountResourceInjectorService);
|
|
29
|
-
this.page = input(
|
|
29
|
+
this.page = input(/* @ts-ignore */
|
|
30
|
+
...(ngDevMode ? [undefined, { debugName: "page" }] : /* istanbul ignore next */ []));
|
|
30
31
|
this.pageRef = viewChild('pageRef', { ...(ngDevMode ? { debugName: "pageRef" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
|
|
31
32
|
this.isReadyToRender$ = this.accountResourceInjectorService.injectResource(this.doUseDefaultCss);
|
|
32
33
|
this.#effectRef = effect(() => {
|
|
@@ -64,15 +65,15 @@ class TemplateComponent extends ComponentReference {
|
|
|
64
65
|
this.#cdr.markForCheck();
|
|
65
66
|
this.#effectRef.destroy();
|
|
66
67
|
}
|
|
67
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
68
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
68
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: TemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
69
|
+
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 } }, providers: [
|
|
69
70
|
{
|
|
70
71
|
provide: ComponentReference,
|
|
71
72
|
useExisting: forwardRef(() => TemplateComponent)
|
|
72
73
|
}
|
|
73
74
|
], viewQueries: [{ propertyName: "pageRef", first: true, predicate: ["pageRef"], descendants: true, read: ViewContainerRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let enabledLanguages = i18n.enabledLanguages;\n@let currentLanguage = i18n.currentLanguage;\n@let url = kcContext.url;\n@let features = kcContext.features;\n@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let referrer = kcContext.referrer;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <header class=\"navbar navbar-default navbar-pf navbar-main header\">\n <nav\n class=\"navbar\"\n role=\"navigation\"\n >\n <div class=\"navbar-header\">\n <div class=\"container\">\n <h1 class=\"navbar-title\">Keycloak</h1>\n </div>\n </div>\n <div class=\"navbar-collapse navbar-collapse-1\">\n <div class=\"container\">\n <ul class=\"nav navbar-nav navbar-utility\">\n @if (enabledLanguages.length > 1) {\n <li>\n <div\n class=\"kc-dropdown\"\n id=\"kc-locale-dropdown\"\n >\n <a\n href=\"#\"\n id=\"kc-current-locale-link\"\n >\n {{ currentLanguage.label }}\n </a>\n <ul>\n @for (enabledLanguage of enabledLanguages; track enabledLanguage.languageTag) {\n @let label = enabledLanguage.label;\n @let href = enabledLanguage.href;\n\n <li class=\"kc-dropdown-item\">\n <a [href]=\"href\">{{ label }}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n }\n @if (!!referrer?.url) {\n <a\n id=\"referrer\"\n [href]=\"referrer?.url\"\n >\n {{ i18n.msgStr('backTo', referrer?.name) }}\n </a>\n }\n <li>\n <a [href]=\"url.getLogoutUrl()\">{{ i18n.msgStr('doSignOut') }}</a>\n </li>\n </ul>\n </div>\n </div>\n </nav>\n </header>\n\n <div class=\"container\">\n <div class=\"bs-sidebar col-sm-3\">\n <ul>\n <li [class.active]=\"active === 'account'\">\n <a [href]=\"url.accountUrl\">{{ i18n.msgStr('account') }}</a>\n </li>\n @if (features.passwordUpdateSupported) {\n <li [class.active]=\"active === 'password'\">\n <a [href]=\"url.passwordUrl\">{{ i18n.msgStr('password') }}</a>\n </li>\n }\n <li [class.active]=\"active === 'totp'\">\n <a [href]=\"url.totpUrl\">{{ i18n.msgStr('authenticator') }}</a>\n </li>\n @if (features.identityFederation) {\n <li [class.active]=\"active === 'social'\">\n <a [href]=\"url.socialUrl\">{{ i18n.msgStr('federatedIdentity') }}</a>\n </li>\n }\n <li [class.active]=\"active === 'sessions'\">\n <a [href]=\"url.sessionsUrl\">{{ i18n.msgStr('sessions') }}</a>\n </li>\n <li [class.active]=\"active === 'applications'\">\n <a [href]=\"url.applicationsUrl\">{{ i18n.msgStr('applications') }}</a>\n </li>\n @if (features.log) {\n <li [class.active]=\"active === 'log'\">\n <a [href]=\"url.logUrl\">{{ i18n.msgStr('log') }}</a>\n </li>\n }\n @if (realm.userManagedAccessAllowed && features.authorization) {\n <li [class.active]=\"active === 'authorization'\">\n <a [href]=\"url.resourceUrl\">{{ i18n.msgStr('myResources') }}</a>\n </li>\n }\n </ul>\n </div>\n\n <div class=\"col-sm-9 content-area\">\n @if (message) {\n <div [ngClass]=\"['alert', 'alert-' + message.type]\">\n @switch (message.type) {\n @case ('success') {\n <span class=\"pficon pficon-ok\"></span>\n }\n @case ('error') {\n <span class=\"pficon pficon-error-circle-o\"></span>\n }\n }\n <span\n class=\"kc-feedback-text\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <!-- Content -->\n <ng-template #pageRef></ng-template>\n </div>\n </div>\n}\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
74
75
|
}
|
|
75
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: TemplateComponent, decorators: [{
|
|
76
77
|
type: Component,
|
|
77
78
|
args: [{ selector: 'kc-root', imports: [AsyncPipe, KcSanitizePipe, NgClass], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
78
79
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycloakify-angular-account-template.mjs","sources":["../../src/account/template/template.component.ts","../../src/account/template/template.component.html","../../src/account/template/keycloakify-angular-account-template.ts"],"sourcesContent":["import { AsyncPipe, NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n effect,\n type EffectRef,\n forwardRef,\n inject,\n input,\n Renderer2,\n type Type,\n viewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';\nimport type { I18n } from '@keycloakify/angular/account/i18n';\nimport type { KcContext } from '@keycloakify/angular/account/KcContext';\nimport { AccountResourceInjectorService } from '@keycloakify/angular/account/services/account-resource-injector';\nimport { ACCOUNT_CLASSES } from '@keycloakify/angular/account/tokens/classes';\nimport { ACCOUNT_I18N } from '@keycloakify/angular/account/tokens/i18n';\nimport { KC_ACCOUNT_CONTEXT } from '@keycloakify/angular/account/tokens/kc-context';\nimport { KcSanitizePipe } from '@keycloakify/angular/lib/pipes/kc-sanitize';\nimport { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';\nimport { type ClassKey, getKcClsx } from 'keycloakify/account/lib/kcClsx';\nimport { type Observable } from 'rxjs';\n\ntype ActiveType = 'account' | 'password' | 'totp' | 'social' | 'sessions' | 'applications' | 'log' | 'authorization' | undefined;\n\n@Component({\n selector: 'kc-root',\n templateUrl: 'template.component.html',\n imports: [AsyncPipe, KcSanitizePipe, NgClass],\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>(ACCOUNT_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_ACCOUNT_CONTEXT);\n override doUseDefaultCss = inject<boolean>(USE_DEFAULT_CSS);\n override classes = inject<Partial<Record<ClassKey, string>>>(ACCOUNT_CLASSES);\n accountResourceInjectorService = inject(AccountResourceInjectorService);\n\n isReadyToRender$: Observable<boolean>;\n\n page = input<Type<unknown>>();\n pageRef = viewChild('pageRef', { read: ViewContainerRef });\n\n active: ActiveType;\n\n constructor() {\n super();\n\n this.isReadyToRender$ = this.accountResourceInjectorService.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 compRef = pageRef.createComponent(page);\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 = kcClsx('kcBodyClass');\n const kcHtmlClass = kcClsx('kcHtmlClass');\n const kcBodyClasses = kcBodyClass.split(/\\s+/);\n const kcHtmlClasses = kcHtmlClass.split(/\\s+/);\n kcBodyClasses.push('admin-console', 'user');\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 onComponentCreated(compRef: object) {\n if ('active' in compRef && compRef.active) {\n this.active = compRef.active as ActiveType;\n }\n\n this.title.setTitle(this.i18n.msgStr('accountManagementTitle'));\n this.applyKcIndexClasses();\n this.#cdr.markForCheck();\n this.#effectRef.destroy();\n }\n}\n","@let enabledLanguages = i18n.enabledLanguages;\n@let currentLanguage = i18n.currentLanguage;\n@let url = kcContext.url;\n@let features = kcContext.features;\n@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let referrer = kcContext.referrer;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <header class=\"navbar navbar-default navbar-pf navbar-main header\">\n <nav\n class=\"navbar\"\n role=\"navigation\"\n >\n <div class=\"navbar-header\">\n <div class=\"container\">\n <h1 class=\"navbar-title\">Keycloak</h1>\n </div>\n </div>\n <div class=\"navbar-collapse navbar-collapse-1\">\n <div class=\"container\">\n <ul class=\"nav navbar-nav navbar-utility\">\n @if (enabledLanguages.length > 1) {\n <li>\n <div\n class=\"kc-dropdown\"\n id=\"kc-locale-dropdown\"\n >\n <a\n href=\"#\"\n id=\"kc-current-locale-link\"\n >\n {{ currentLanguage.label }}\n </a>\n <ul>\n @for (enabledLanguage of enabledLanguages; track enabledLanguage.languageTag) {\n @let label = enabledLanguage.label;\n @let href = enabledLanguage.href;\n\n <li class=\"kc-dropdown-item\">\n <a [href]=\"href\">{{ label }}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n }\n @if (!!referrer?.url) {\n <a\n id=\"referrer\"\n [href]=\"referrer?.url\"\n >\n {{ i18n.msgStr('backTo', referrer?.name) }}\n </a>\n }\n <li>\n <a [href]=\"url.getLogoutUrl()\">{{ i18n.msgStr('doSignOut') }}</a>\n </li>\n </ul>\n </div>\n </div>\n </nav>\n </header>\n\n <div class=\"container\">\n <div class=\"bs-sidebar col-sm-3\">\n <ul>\n <li [class.active]=\"active === 'account'\">\n <a [href]=\"url.accountUrl\">{{ i18n.msgStr('account') }}</a>\n </li>\n @if (features.passwordUpdateSupported) {\n <li [class.active]=\"active === 'password'\">\n <a [href]=\"url.passwordUrl\">{{ i18n.msgStr('password') }}</a>\n </li>\n }\n <li [class.active]=\"active === 'totp'\">\n <a [href]=\"url.totpUrl\">{{ i18n.msgStr('authenticator') }}</a>\n </li>\n @if (features.identityFederation) {\n <li [class.active]=\"active === 'social'\">\n <a [href]=\"url.socialUrl\">{{ i18n.msgStr('federatedIdentity') }}</a>\n </li>\n }\n <li [class.active]=\"active === 'sessions'\">\n <a [href]=\"url.sessionsUrl\">{{ i18n.msgStr('sessions') }}</a>\n </li>\n <li [class.active]=\"active === 'applications'\">\n <a [href]=\"url.applicationsUrl\">{{ i18n.msgStr('applications') }}</a>\n </li>\n @if (features.log) {\n <li [class.active]=\"active === 'log'\">\n <a [href]=\"url.logUrl\">{{ i18n.msgStr('log') }}</a>\n </li>\n }\n @if (realm.userManagedAccessAllowed && features.authorization) {\n <li [class.active]=\"active === 'authorization'\">\n <a [href]=\"url.resourceUrl\">{{ i18n.msgStr('myResources') }}</a>\n </li>\n }\n </ul>\n </div>\n\n <div class=\"col-sm-9 content-area\">\n @if (message) {\n <div [ngClass]=\"['alert', 'alert-' + message.type]\">\n @switch (message.type) {\n @case ('success') {\n <span class=\"pficon pficon-ok\"></span>\n }\n @case ('error') {\n <span class=\"pficon pficon-error-circle-o\"></span>\n }\n }\n <span\n class=\"kc-feedback-text\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <!-- Content -->\n <ng-template #pageRef></ng-template>\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-account-template.mjs","sources":["../../src/account/template/template.component.ts","../../src/account/template/template.component.html","../../src/account/template/keycloakify-angular-account-template.ts"],"sourcesContent":["import { AsyncPipe, NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n effect,\n type EffectRef,\n forwardRef,\n inject,\n input,\n Renderer2,\n type Type,\n viewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';\nimport type { I18n } from '@keycloakify/angular/account/i18n';\nimport type { KcContext } from '@keycloakify/angular/account/KcContext';\nimport { AccountResourceInjectorService } from '@keycloakify/angular/account/services/account-resource-injector';\nimport { ACCOUNT_CLASSES } from '@keycloakify/angular/account/tokens/classes';\nimport { ACCOUNT_I18N } from '@keycloakify/angular/account/tokens/i18n';\nimport { KC_ACCOUNT_CONTEXT } from '@keycloakify/angular/account/tokens/kc-context';\nimport { KcSanitizePipe } from '@keycloakify/angular/lib/pipes/kc-sanitize';\nimport { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';\nimport { type ClassKey, getKcClsx } from 'keycloakify/account/lib/kcClsx';\nimport { type Observable } from 'rxjs';\n\ntype ActiveType = 'account' | 'password' | 'totp' | 'social' | 'sessions' | 'applications' | 'log' | 'authorization' | undefined;\n\n@Component({\n selector: 'kc-root',\n templateUrl: 'template.component.html',\n imports: [AsyncPipe, KcSanitizePipe, NgClass],\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>(ACCOUNT_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_ACCOUNT_CONTEXT);\n override doUseDefaultCss = inject<boolean>(USE_DEFAULT_CSS);\n override classes = inject<Partial<Record<ClassKey, string>>>(ACCOUNT_CLASSES);\n accountResourceInjectorService = inject(AccountResourceInjectorService);\n\n isReadyToRender$: Observable<boolean>;\n\n page = input<Type<unknown>>();\n pageRef = viewChild('pageRef', { read: ViewContainerRef });\n\n active: ActiveType;\n\n constructor() {\n super();\n\n this.isReadyToRender$ = this.accountResourceInjectorService.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 compRef = pageRef.createComponent(page);\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 = kcClsx('kcBodyClass');\n const kcHtmlClass = kcClsx('kcHtmlClass');\n const kcBodyClasses = kcBodyClass.split(/\\s+/);\n const kcHtmlClasses = kcHtmlClass.split(/\\s+/);\n kcBodyClasses.push('admin-console', 'user');\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 onComponentCreated(compRef: object) {\n if ('active' in compRef && compRef.active) {\n this.active = compRef.active as ActiveType;\n }\n\n this.title.setTitle(this.i18n.msgStr('accountManagementTitle'));\n this.applyKcIndexClasses();\n this.#cdr.markForCheck();\n this.#effectRef.destroy();\n }\n}\n","@let enabledLanguages = i18n.enabledLanguages;\n@let currentLanguage = i18n.currentLanguage;\n@let url = kcContext.url;\n@let features = kcContext.features;\n@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let referrer = kcContext.referrer;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <header class=\"navbar navbar-default navbar-pf navbar-main header\">\n <nav\n class=\"navbar\"\n role=\"navigation\"\n >\n <div class=\"navbar-header\">\n <div class=\"container\">\n <h1 class=\"navbar-title\">Keycloak</h1>\n </div>\n </div>\n <div class=\"navbar-collapse navbar-collapse-1\">\n <div class=\"container\">\n <ul class=\"nav navbar-nav navbar-utility\">\n @if (enabledLanguages.length > 1) {\n <li>\n <div\n class=\"kc-dropdown\"\n id=\"kc-locale-dropdown\"\n >\n <a\n href=\"#\"\n id=\"kc-current-locale-link\"\n >\n {{ currentLanguage.label }}\n </a>\n <ul>\n @for (enabledLanguage of enabledLanguages; track enabledLanguage.languageTag) {\n @let label = enabledLanguage.label;\n @let href = enabledLanguage.href;\n\n <li class=\"kc-dropdown-item\">\n <a [href]=\"href\">{{ label }}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n }\n @if (!!referrer?.url) {\n <a\n id=\"referrer\"\n [href]=\"referrer?.url\"\n >\n {{ i18n.msgStr('backTo', referrer?.name) }}\n </a>\n }\n <li>\n <a [href]=\"url.getLogoutUrl()\">{{ i18n.msgStr('doSignOut') }}</a>\n </li>\n </ul>\n </div>\n </div>\n </nav>\n </header>\n\n <div class=\"container\">\n <div class=\"bs-sidebar col-sm-3\">\n <ul>\n <li [class.active]=\"active === 'account'\">\n <a [href]=\"url.accountUrl\">{{ i18n.msgStr('account') }}</a>\n </li>\n @if (features.passwordUpdateSupported) {\n <li [class.active]=\"active === 'password'\">\n <a [href]=\"url.passwordUrl\">{{ i18n.msgStr('password') }}</a>\n </li>\n }\n <li [class.active]=\"active === 'totp'\">\n <a [href]=\"url.totpUrl\">{{ i18n.msgStr('authenticator') }}</a>\n </li>\n @if (features.identityFederation) {\n <li [class.active]=\"active === 'social'\">\n <a [href]=\"url.socialUrl\">{{ i18n.msgStr('federatedIdentity') }}</a>\n </li>\n }\n <li [class.active]=\"active === 'sessions'\">\n <a [href]=\"url.sessionsUrl\">{{ i18n.msgStr('sessions') }}</a>\n </li>\n <li [class.active]=\"active === 'applications'\">\n <a [href]=\"url.applicationsUrl\">{{ i18n.msgStr('applications') }}</a>\n </li>\n @if (features.log) {\n <li [class.active]=\"active === 'log'\">\n <a [href]=\"url.logUrl\">{{ i18n.msgStr('log') }}</a>\n </li>\n }\n @if (realm.userManagedAccessAllowed && features.authorization) {\n <li [class.active]=\"active === 'authorization'\">\n <a [href]=\"url.resourceUrl\">{{ i18n.msgStr('myResources') }}</a>\n </li>\n }\n </ul>\n </div>\n\n <div class=\"col-sm-9 content-area\">\n @if (message) {\n <div [ngClass]=\"['alert', 'alert-' + message.type]\">\n @switch (message.type) {\n @case ('success') {\n <span class=\"pficon pficon-ok\"></span>\n }\n @case ('error') {\n <span class=\"pficon pficon-error-circle-o\"></span>\n }\n }\n <span\n class=\"kc-feedback-text\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <!-- Content -->\n <ng-template #pageRef></ng-template>\n </div>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AA0CM,MAAO,iBAAkB,SAAQ,kBAAkB,CAAA;AAGrD,IAAA,IAAI;AACJ,IAAA,UAAU;AAeV,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAnBX,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAO,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEhC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACnB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACrB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAY,kBAAkB,CAAC;AACxC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAU,eAAe,CAAC;AAClD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAoC,eAAe,CAAC;AAC7E,QAAA,IAAA,CAAA,8BAA8B,GAAG,MAAM,CAAC,8BAA8B,CAAC;AAIvE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAiB;QAC7B,IAAA,CAAA,OAAO,GAAG,SAAS,CAAC,SAAS,+EAAI,IAAI,EAAE,gBAAgB,EAAA,CAAG;AAOtD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,8BAA8B,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC;AAChG,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CACpB,MAAK;AACD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;gBAAE;YAEvB,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC;AAC7C,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAkB,CAAC;AACvD,QAAA,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,CAAA,EACC,aAAa,EAAE,IAAI,GACxB;IACL;IAEQ,mBAAmB,GAAA;QACvB,MAAM,MAAM,GAAG,SAAS,CAAC;YACrB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,OAAO,EAAE,IAAI,CAAC;SACjB,CAAC,CAAC,MAAM;AACT,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;AACzC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;QACzC,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9C,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;AAC9C,QAAA,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;AAC3C,QAAA,aAAa,CAAC,OAAO,CAAC,KAAK,IAAG;YAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;AAChD,QAAA,CAAC,CAAC;AACF,QAAA,aAAa,CAAC,OAAO,CAAC,KAAK,IAAG;YAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC;AAC3D,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,kBAAkB,CAAC,OAAe,EAAA;QAC9B,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;AACvC,YAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAoB;QAC9C;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC/D,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;IAC7B;8GA/DS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAPf;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB;AAClD;SACJ,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAiBsC,gBAAgB,oECzD3D,g5KA6HA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED5FyC,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAlC,SAAS,yCAAE,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAS1B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAZ7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,OAAA,EAEV,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,EAAA,eAAA,EAC5B,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB;AAClD;AACJ,qBAAA,EAAA,QAAA,EAAA,g5KAAA,EAAA;AAiBmB,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEzD7D;;AAEG;;;;"}
|
|
@@ -5,7 +5,8 @@ class AttributesDirective {
|
|
|
5
5
|
#el;
|
|
6
6
|
#renderer;
|
|
7
7
|
constructor() {
|
|
8
|
-
this.kcAttributes = input(
|
|
8
|
+
this.kcAttributes = input(/* @ts-ignore */
|
|
9
|
+
...(ngDevMode ? [undefined, { debugName: "kcAttributes" }] : /* istanbul ignore next */ []));
|
|
9
10
|
this.#el = inject(ElementRef);
|
|
10
11
|
this.#renderer = inject(Renderer2);
|
|
11
12
|
effect(() => {
|
|
@@ -17,10 +18,10 @@ class AttributesDirective {
|
|
|
17
18
|
}
|
|
18
19
|
});
|
|
19
20
|
}
|
|
20
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
21
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: AttributesDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
22
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.0", type: AttributesDirective, isStandalone: true, selector: "[kcAttributes]", inputs: { kcAttributes: { classPropertyName: "kcAttributes", publicName: "kcAttributes", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
|
|
22
23
|
}
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: AttributesDirective, decorators: [{
|
|
24
25
|
type: Directive,
|
|
25
26
|
args: [{ selector: '[kcAttributes]' }]
|
|
26
27
|
}], ctorParameters: () => [], propDecorators: { kcAttributes: [{ type: i0.Input, args: [{ isSignal: true, alias: "kcAttributes", required: false }] }] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycloakify-angular-lib-directives-attributes.mjs","sources":["../../src/lib/directives/attributes/attributes.directive.ts","../../src/lib/directives/attributes/keycloakify-angular-lib-directives-attributes.ts"],"sourcesContent":["import { Directive, effect, ElementRef, inject, input, Renderer2 } from '@angular/core';\n\n@Directive({ selector: '[kcAttributes]' })\nexport class AttributesDirective {\n kcAttributes = input<Record<string, string>>();\n readonly #el = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #renderer = inject(Renderer2);\n\n constructor() {\n effect(() => {\n const attributes = this.kcAttributes();\n if (attributes) {\n Object.entries(attributes).forEach(([key, value]) => {\n this.#renderer.setAttribute(\n this.#el.nativeElement,\n `data-${key}`,\n value\n );\n });\n }\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAGa,mBAAmB,CAAA;AAEnB,IAAA,GAAG;AACH,IAAA,SAAS;AAElB,IAAA,WAAA,GAAA;
|
|
1
|
+
{"version":3,"file":"keycloakify-angular-lib-directives-attributes.mjs","sources":["../../src/lib/directives/attributes/attributes.directive.ts","../../src/lib/directives/attributes/keycloakify-angular-lib-directives-attributes.ts"],"sourcesContent":["import { Directive, effect, ElementRef, inject, input, Renderer2 } from '@angular/core';\n\n@Directive({ selector: '[kcAttributes]' })\nexport class AttributesDirective {\n kcAttributes = input<Record<string, string>>();\n readonly #el = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #renderer = inject(Renderer2);\n\n constructor() {\n effect(() => {\n const attributes = this.kcAttributes();\n if (attributes) {\n Object.entries(attributes).forEach(([key, value]) => {\n this.#renderer.setAttribute(\n this.#el.nativeElement,\n `data-${key}`,\n value\n );\n });\n }\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAGa,mBAAmB,CAAA;AAEnB,IAAA,GAAG;AACH,IAAA,SAAS;AAElB,IAAA,WAAA,GAAA;AAJA,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK;oGAA0B;AACrC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAA0B,UAAU,CAAC;AACjD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAGlC,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE;YACtC,IAAI,UAAU,EAAE;AACZ,gBAAA,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAChD,oBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EACtB,CAAA,KAAA,EAAQ,GAAG,EAAE,EACb,KAAK,CACR;AACL,gBAAA,CAAC,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;IACN;8GAlBS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,SAAS;mBAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE;;;ACFzC;;AAEG;;;;"}
|
|
@@ -8,10 +8,10 @@ class InputTypePipe {
|
|
|
8
8
|
}
|
|
9
9
|
return inputType ?? 'text';
|
|
10
10
|
}
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
12
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: InputTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
12
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.0", ngImport: i0, type: InputTypePipe, isStandalone: true, name: "inputType" }); }
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: InputTypePipe, decorators: [{
|
|
15
15
|
type: Pipe,
|
|
16
16
|
args: [{
|
|
17
17
|
name: 'inputType'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycloakify-angular-lib-pipes-input-type.mjs","sources":["../../src/lib/pipes/input-type/input-type.pipe.ts","../../src/lib/pipes/input-type/keycloakify-angular-lib-pipes-input-type.ts"],"sourcesContent":["import { Pipe, type PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'inputType'\n})\nexport class InputTypePipe implements PipeTransform {\n transform(inputType?: string): string {\n if (inputType?.startsWith('html5-')) {\n return inputType.slice(6);\n }\n\n return inputType ?? 'text';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAKa,aAAa,CAAA;AACtB,IAAA,SAAS,CAAC,SAAkB,EAAA;AACxB,QAAA,IAAI,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE;AACjC,YAAA,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7B;QAEA,OAAO,SAAS,IAAI,MAAM;IAC9B
|
|
1
|
+
{"version":3,"file":"keycloakify-angular-lib-pipes-input-type.mjs","sources":["../../src/lib/pipes/input-type/input-type.pipe.ts","../../src/lib/pipes/input-type/keycloakify-angular-lib-pipes-input-type.ts"],"sourcesContent":["import { Pipe, type PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'inputType'\n})\nexport class InputTypePipe implements PipeTransform {\n transform(inputType?: string): string {\n if (inputType?.startsWith('html5-')) {\n return inputType.slice(6);\n }\n\n return inputType ?? 'text';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAKa,aAAa,CAAA;AACtB,IAAA,SAAS,CAAC,SAAkB,EAAA;AACxB,QAAA,IAAI,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE;AACjC,YAAA,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7B;QAEA,OAAO,SAAS,IAAI,MAAM;IAC9B;8GAPS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE;AACT,iBAAA;;;ACJD;;AAEG;;;;"}
|
|
@@ -8,10 +8,10 @@ class IsArrayWithEmptyObjectPipe {
|
|
|
8
8
|
typeof variable[0] === 'object' &&
|
|
9
9
|
Object.keys(variable[0]).length === 0);
|
|
10
10
|
}
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
12
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: IsArrayWithEmptyObjectPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
12
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.0", ngImport: i0, type: IsArrayWithEmptyObjectPipe, isStandalone: true, name: "isArrayWithEmptyObject" }); }
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: IsArrayWithEmptyObjectPipe, decorators: [{
|
|
15
15
|
type: Pipe,
|
|
16
16
|
args: [{
|
|
17
17
|
name: 'isArrayWithEmptyObject'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycloakify-angular-lib-pipes-is-array-with-empty-object.mjs","sources":["../../src/lib/pipes/is-array-with-empty-object/is-array-with-empty-object.pipe.ts","../../src/lib/pipes/is-array-with-empty-object/keycloakify-angular-lib-pipes-is-array-with-empty-object.ts"],"sourcesContent":["import { Pipe, type PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'isArrayWithEmptyObject'\n})\nexport class IsArrayWithEmptyObjectPipe implements PipeTransform {\n transform(variable: unknown): boolean {\n return (\n Array.isArray(variable) &&\n variable.length === 1 &&\n typeof variable[0] === 'object' &&\n Object.keys(variable[0]).length === 0\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAKa,0BAA0B,CAAA;AACnC,IAAA,SAAS,CAAC,QAAiB,EAAA;AACvB,QAAA,QACI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YACvB,QAAQ,CAAC,MAAM,KAAK,CAAC;AACrB,YAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ;AAC/B,YAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;IAE7C
|
|
1
|
+
{"version":3,"file":"keycloakify-angular-lib-pipes-is-array-with-empty-object.mjs","sources":["../../src/lib/pipes/is-array-with-empty-object/is-array-with-empty-object.pipe.ts","../../src/lib/pipes/is-array-with-empty-object/keycloakify-angular-lib-pipes-is-array-with-empty-object.ts"],"sourcesContent":["import { Pipe, type PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'isArrayWithEmptyObject'\n})\nexport class IsArrayWithEmptyObjectPipe implements PipeTransform {\n transform(variable: unknown): boolean {\n return (\n Array.isArray(variable) &&\n variable.length === 1 &&\n typeof variable[0] === 'object' &&\n Object.keys(variable[0]).length === 0\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAKa,0BAA0B,CAAA;AACnC,IAAA,SAAS,CAAC,QAAiB,EAAA;AACvB,QAAA,QACI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YACvB,QAAQ,CAAC,MAAM,KAAK,CAAC;AACrB,YAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ;AAC/B,YAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;IAE7C;8GARS,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,wBAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE;AACT,iBAAA;;;ACJD;;AAEG;;;;"}
|
|
@@ -20,10 +20,10 @@ class KcSanitizePipe {
|
|
|
20
20
|
throw new Error(`Invalid safe type specified: ${type}`);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
24
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
23
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: KcSanitizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
24
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.0", ngImport: i0, type: KcSanitizePipe, isStandalone: true, name: "kcSanitize" }); }
|
|
25
25
|
}
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: KcSanitizePipe, decorators: [{
|
|
27
27
|
type: Pipe,
|
|
28
28
|
args: [{ name: 'kcSanitize' }]
|
|
29
29
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycloakify-angular-lib-pipes-kc-sanitize.mjs","sources":["../../src/lib/pipes/kc-sanitize/kc-sanitize.pipe.ts","../../src/lib/pipes/kc-sanitize/keycloakify-angular-lib-pipes-kc-sanitize.ts"],"sourcesContent":["import { inject, Pipe, type PipeTransform } from '@angular/core';\nimport {\n DomSanitizer,\n type SafeHtml,\n type SafeResourceUrl,\n type SafeScript,\n type SafeStyle,\n type SafeUrl\n} from '@angular/platform-browser';\n\n@Pipe({ name: 'kcSanitize' })\nexport class KcSanitizePipe implements PipeTransform {\n #sanitizer = inject(DomSanitizer);\n\n transform(\n value: string,\n type: 'html' | 'style' | 'script' | 'url' | 'resourceUrl'\n ): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {\n switch (type) {\n case 'html':\n return this.#sanitizer.bypassSecurityTrustHtml(value);\n case 'style':\n return this.#sanitizer.bypassSecurityTrustStyle(value);\n case 'script':\n return this.#sanitizer.bypassSecurityTrustScript(value);\n case 'url':\n return this.#sanitizer.bypassSecurityTrustUrl(value);\n case 'resourceUrl':\n return this.#sanitizer.bypassSecurityTrustResourceUrl(value);\n default:\n throw new Error(`Invalid safe type specified: ${type}`);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAWa,cAAc,CAAA;AACvB,IAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;IAEjC,SAAS,CACL,KAAa,EACb,IAAyD,EAAA;QAEzD,QAAQ,IAAI;AACR,YAAA,KAAK,MAAM;gBACP,OAAO,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACzD,YAAA,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,KAAK,CAAC;AAC1D,YAAA,KAAK,QAAQ;gBACT,OAAO,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAC3D,YAAA,KAAK,KAAK;gBACN,OAAO,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC;AACxD,YAAA,KAAK,aAAa;gBACd,OAAO,IAAI,CAAC,UAAU,CAAC,8BAA8B,CAAC,KAAK,CAAC;AAChE,YAAA;AACI,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAA,CAAE,CAAC;;IAEnE
|
|
1
|
+
{"version":3,"file":"keycloakify-angular-lib-pipes-kc-sanitize.mjs","sources":["../../src/lib/pipes/kc-sanitize/kc-sanitize.pipe.ts","../../src/lib/pipes/kc-sanitize/keycloakify-angular-lib-pipes-kc-sanitize.ts"],"sourcesContent":["import { inject, Pipe, type PipeTransform } from '@angular/core';\nimport {\n DomSanitizer,\n type SafeHtml,\n type SafeResourceUrl,\n type SafeScript,\n type SafeStyle,\n type SafeUrl\n} from '@angular/platform-browser';\n\n@Pipe({ name: 'kcSanitize' })\nexport class KcSanitizePipe implements PipeTransform {\n #sanitizer = inject(DomSanitizer);\n\n transform(\n value: string,\n type: 'html' | 'style' | 'script' | 'url' | 'resourceUrl'\n ): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {\n switch (type) {\n case 'html':\n return this.#sanitizer.bypassSecurityTrustHtml(value);\n case 'style':\n return this.#sanitizer.bypassSecurityTrustStyle(value);\n case 'script':\n return this.#sanitizer.bypassSecurityTrustScript(value);\n case 'url':\n return this.#sanitizer.bypassSecurityTrustUrl(value);\n case 'resourceUrl':\n return this.#sanitizer.bypassSecurityTrustResourceUrl(value);\n default:\n throw new Error(`Invalid safe type specified: ${type}`);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAWa,cAAc,CAAA;AACvB,IAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;IAEjC,SAAS,CACL,KAAa,EACb,IAAyD,EAAA;QAEzD,QAAQ,IAAI;AACR,YAAA,KAAK,MAAM;gBACP,OAAO,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACzD,YAAA,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,KAAK,CAAC;AAC1D,YAAA,KAAK,QAAQ;gBACT,OAAO,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAC3D,YAAA,KAAK,KAAK;gBACN,OAAO,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC;AACxD,YAAA,KAAK,aAAa;gBACd,OAAO,IAAI,CAAC,UAAU,CAAC,8BAA8B,CAAC,KAAK,CAAC;AAChE,YAAA;AACI,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAA,CAAE,CAAC;;IAEnE;8GArBS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,IAAI;mBAAC,EAAE,IAAI,EAAE,YAAY,EAAE;;;ACV5B;;AAEG;;;;"}
|
|
@@ -9,10 +9,10 @@ class ToArrayPipe {
|
|
|
9
9
|
}
|
|
10
10
|
return emptyWhenString ? [] : [value];
|
|
11
11
|
}
|
|
12
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
13
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
12
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ToArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
13
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.0", ngImport: i0, type: ToArrayPipe, isStandalone: true, name: "toArray" }); }
|
|
14
14
|
}
|
|
15
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ToArrayPipe, decorators: [{
|
|
16
16
|
type: Pipe,
|
|
17
17
|
args: [{
|
|
18
18
|
name: 'toArray'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycloakify-angular-lib-pipes-to-array.mjs","sources":["../../src/lib/pipes/to-array/to-array.pipe.ts","../../src/lib/pipes/to-array/keycloakify-angular-lib-pipes-to-array.ts"],"sourcesContent":["import { Pipe, type PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'toArray'\n})\nexport class ToArrayPipe implements PipeTransform {\n transform(value: string | string[], emptyWhenString = false): string[] {\n // if (!value) throw new Error('must pass a value');\n if (value instanceof Array) {\n return value;\n }\n return emptyWhenString ? [] : [value];\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAKa,WAAW,CAAA;AACpB,IAAA,SAAS,CAAC,KAAwB,EAAE,eAAe,GAAG,KAAK,EAAA;;AAEvD,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AACxB,YAAA,OAAO,KAAK;QAChB;QACA,OAAO,eAAe,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;IACzC
|
|
1
|
+
{"version":3,"file":"keycloakify-angular-lib-pipes-to-array.mjs","sources":["../../src/lib/pipes/to-array/to-array.pipe.ts","../../src/lib/pipes/to-array/keycloakify-angular-lib-pipes-to-array.ts"],"sourcesContent":["import { Pipe, type PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'toArray'\n})\nexport class ToArrayPipe implements PipeTransform {\n transform(value: string | string[], emptyWhenString = false): string[] {\n // if (!value) throw new Error('must pass a value');\n if (value instanceof Array) {\n return value;\n }\n return emptyWhenString ? [] : [value];\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAKa,WAAW,CAAA;AACpB,IAAA,SAAS,CAAC,KAAwB,EAAE,eAAe,GAAG,KAAK,EAAA;;AAEvD,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AACxB,YAAA,OAAO,KAAK;QAChB;QACA,OAAO,eAAe,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;IACzC;8GAPS,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE;AACT,iBAAA;;;ACJD;;AAEG;;;;"}
|
|
@@ -8,10 +8,10 @@ class ToNumberPipe {
|
|
|
8
8
|
throw new Error('number is NaN');
|
|
9
9
|
return number;
|
|
10
10
|
}
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
12
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ToNumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
12
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.0", ngImport: i0, type: ToNumberPipe, isStandalone: true, name: "toNumber" }); }
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ToNumberPipe, decorators: [{
|
|
15
15
|
type: Pipe,
|
|
16
16
|
args: [{
|
|
17
17
|
name: 'toNumber'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycloakify-angular-lib-pipes-to-number.mjs","sources":["../../src/lib/pipes/to-number/to-number.pipe.ts","../../src/lib/pipes/to-number/keycloakify-angular-lib-pipes-to-number.ts"],"sourcesContent":["import { Pipe, type PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'toNumber'\n})\nexport class ToNumberPipe implements PipeTransform {\n transform(value: string | number): number {\n const number = parseInt(`${value}`);\n if (isNaN(number)) throw new Error('number is NaN');\n return number;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAKa,YAAY,CAAA;AACrB,IAAA,SAAS,CAAC,KAAsB,EAAA;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAA,CAAE,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;AACnD,QAAA,OAAO,MAAM;IACjB
|
|
1
|
+
{"version":3,"file":"keycloakify-angular-lib-pipes-to-number.mjs","sources":["../../src/lib/pipes/to-number/to-number.pipe.ts","../../src/lib/pipes/to-number/keycloakify-angular-lib-pipes-to-number.ts"],"sourcesContent":["import { Pipe, type PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'toNumber'\n})\nexport class ToNumberPipe implements PipeTransform {\n transform(value: string | number): number {\n const number = parseInt(`${value}`);\n if (isNaN(number)) throw new Error('number is NaN');\n return number;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAKa,YAAY,CAAA;AACrB,IAAA,SAAS,CAAC,KAAsB,EAAA;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAA,CAAE,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;AACnD,QAAA,OAAO,MAAM;IACjB;8GALS,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE;AACT,iBAAA;;;ACJD;;AAEG;;;;"}
|
|
@@ -45,10 +45,10 @@ class ResourceInjectorService {
|
|
|
45
45
|
script.id = id;
|
|
46
46
|
this.renderer.appendChild(document.head, script);
|
|
47
47
|
}
|
|
48
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
49
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
48
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ResourceInjectorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
49
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ResourceInjectorService, providedIn: 'root' }); }
|
|
50
50
|
}
|
|
51
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ResourceInjectorService, decorators: [{
|
|
52
52
|
type: Injectable,
|
|
53
53
|
args: [{
|
|
54
54
|
providedIn: 'root'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycloakify-angular-lib-services-resource-injector.mjs","sources":["../../src/lib/services/resource-injector/resource-injector.service.ts","../../src/lib/services/resource-injector/keycloakify-angular-lib-services-resource-injector.ts"],"sourcesContent":["import { inject, Injectable, type Renderer2, RendererFactory2 } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { type Script } from '@keycloakify/angular/lib/models/script';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ResourceInjectorService {\n private renderer: Renderer2 = inject(RendererFactory2).createRenderer(null, null);\n\n createLink(url: string): Observable<void> {\n return new Observable<void>(observer => {\n // check if the style is already injected\n if (Array.from(document.styleSheets).some(s => s.href?.includes(url))) {\n observer.next();\n observer.complete();\n console.debug(`stylesheet: ${url} already loaded`);\n return;\n }\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n\n link.onload = () => {\n observer.next();\n observer.complete();\n };\n\n link.onerror = () => {\n observer.error(new Error(`Failed to load stylesheet: ${url}`));\n };\n\n const head = document.head;\n head.insertBefore(link, head.firstChild);\n });\n }\n createScript({ type, id, src, textContent }: Script): void {\n // check if the script is already injected\n if (Array.from(document.scripts).some(s => s.id?.includes(id))) {\n console.debug(`script: ${src} already injected`);\n return;\n }\n const script = document.createElement('script');\n script.type = type;\n if (src) script.src = src;\n if (textContent) script.textContent = textContent;\n script.id = id;\n\n this.renderer.appendChild(document.head, script);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MAOa,uBAAuB,CAAA;AAHpC,IAAA,WAAA,GAAA;AAIY,QAAA,IAAA,CAAA,QAAQ,GAAc,MAAM,CAAC,gBAAgB,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;AA0CpF,IAAA;AAxCG,IAAA,UAAU,CAAC,GAAW,EAAA;AAClB,QAAA,OAAO,IAAI,UAAU,CAAO,QAAQ,IAAG;;YAEnC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;gBACnE,QAAQ,CAAC,IAAI,EAAE;gBACf,QAAQ,CAAC,QAAQ,EAAE;AACnB,gBAAA,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,CAAA,eAAA,CAAiB,CAAC;gBAClD;YACJ;YACA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,YAAA,IAAI,CAAC,GAAG,GAAG,YAAY;AACvB,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AAEf,YAAA,IAAI,CAAC,MAAM,GAAG,MAAK;gBACf,QAAQ,CAAC,IAAI,EAAE;gBACf,QAAQ,CAAC,QAAQ,EAAE;AACvB,YAAA,CAAC;AAED,YAAA,IAAI,CAAC,OAAO,GAAG,MAAK;gBAChB,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAE,CAAC,CAAC;AAClE,YAAA,CAAC;AAED,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;YAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AAC5C,QAAA,CAAC,CAAC;IACN;IACA,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAU,EAAA;;QAE/C,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE;AAC5D,YAAA,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,CAAA,iBAAA,CAAmB,CAAC;YAChD;QACJ;QACA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,CAAC,IAAI,GAAG,IAAI;AAClB,QAAA,IAAI,GAAG;AAAE,YAAA,MAAM,CAAC,GAAG,GAAG,GAAG;AACzB,QAAA,IAAI,WAAW;AAAE,YAAA,MAAM,CAAC,WAAW,GAAG,WAAW;AACjD,QAAA,MAAM,CAAC,EAAE,GAAG,EAAE;QAEd,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACpD
|
|
1
|
+
{"version":3,"file":"keycloakify-angular-lib-services-resource-injector.mjs","sources":["../../src/lib/services/resource-injector/resource-injector.service.ts","../../src/lib/services/resource-injector/keycloakify-angular-lib-services-resource-injector.ts"],"sourcesContent":["import { inject, Injectable, type Renderer2, RendererFactory2 } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { type Script } from '@keycloakify/angular/lib/models/script';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ResourceInjectorService {\n private renderer: Renderer2 = inject(RendererFactory2).createRenderer(null, null);\n\n createLink(url: string): Observable<void> {\n return new Observable<void>(observer => {\n // check if the style is already injected\n if (Array.from(document.styleSheets).some(s => s.href?.includes(url))) {\n observer.next();\n observer.complete();\n console.debug(`stylesheet: ${url} already loaded`);\n return;\n }\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n\n link.onload = () => {\n observer.next();\n observer.complete();\n };\n\n link.onerror = () => {\n observer.error(new Error(`Failed to load stylesheet: ${url}`));\n };\n\n const head = document.head;\n head.insertBefore(link, head.firstChild);\n });\n }\n createScript({ type, id, src, textContent }: Script): void {\n // check if the script is already injected\n if (Array.from(document.scripts).some(s => s.id?.includes(id))) {\n console.debug(`script: ${src} already injected`);\n return;\n }\n const script = document.createElement('script');\n script.type = type;\n if (src) script.src = src;\n if (textContent) script.textContent = textContent;\n script.id = id;\n\n this.renderer.appendChild(document.head, script);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MAOa,uBAAuB,CAAA;AAHpC,IAAA,WAAA,GAAA;AAIY,QAAA,IAAA,CAAA,QAAQ,GAAc,MAAM,CAAC,gBAAgB,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;AA0CpF,IAAA;AAxCG,IAAA,UAAU,CAAC,GAAW,EAAA;AAClB,QAAA,OAAO,IAAI,UAAU,CAAO,QAAQ,IAAG;;YAEnC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;gBACnE,QAAQ,CAAC,IAAI,EAAE;gBACf,QAAQ,CAAC,QAAQ,EAAE;AACnB,gBAAA,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,CAAA,eAAA,CAAiB,CAAC;gBAClD;YACJ;YACA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,YAAA,IAAI,CAAC,GAAG,GAAG,YAAY;AACvB,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AAEf,YAAA,IAAI,CAAC,MAAM,GAAG,MAAK;gBACf,QAAQ,CAAC,IAAI,EAAE;gBACf,QAAQ,CAAC,QAAQ,EAAE;AACvB,YAAA,CAAC;AAED,YAAA,IAAI,CAAC,OAAO,GAAG,MAAK;gBAChB,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAE,CAAC,CAAC;AAClE,YAAA,CAAC;AAED,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;YAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AAC5C,QAAA,CAAC,CAAC;IACN;IACA,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAU,EAAA;;QAE/C,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE;AAC5D,YAAA,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,CAAA,iBAAA,CAAmB,CAAC;YAChD;QACJ;QACA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,CAAC,IAAI,GAAG,IAAI;AAClB,QAAA,IAAI,GAAG;AAAE,YAAA,MAAM,CAAC,GAAG,GAAG,GAAG;AACzB,QAAA,IAAI,WAAW;AAAE,YAAA,MAAM,CAAC,WAAW,GAAG,WAAW;AACjD,QAAA,MAAM,CAAC,EAAE,GAAG,EAAE;QAEd,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACpD;8GA1CS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,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,uBAAuB,cAFpB,MAAM,EAAA,CAAA,CAAA;;2FAET,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACND;;AAEG;;;;"}
|