@c8y/ngx-components 1006.6.36 → 1006.6.40
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/bundles/c8y-ngx-components-connectivity.umd.js +1 -1
- package/bundles/c8y-ngx-components-connectivity.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-connectivity.umd.min.js +1 -1
- package/bundles/c8y-ngx-components-connectivity.umd.min.js.map +1 -1
- package/bundles/c8y-ngx-components-context-dashboard.umd.js +1 -1
- package/bundles/c8y-ngx-components-context-dashboard.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-context-dashboard.umd.min.js +1 -1
- package/bundles/c8y-ngx-components-context-dashboard.umd.min.js.map +1 -1
- package/bundles/c8y-ngx-components-repository.umd.js +1 -1
- package/bundles/c8y-ngx-components-repository.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-repository.umd.min.js +1 -1
- package/bundles/c8y-ngx-components-repository.umd.min.js.map +1 -1
- package/bundles/c8y-ngx-components-sensor-phone.umd.js +1 -1
- package/bundles/c8y-ngx-components-sensor-phone.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-sensor-phone.umd.min.js +1 -1
- package/bundles/c8y-ngx-components-sensor-phone.umd.min.js.map +1 -1
- package/bundles/c8y-ngx-components.umd.js +400 -131
- package/bundles/c8y-ngx-components.umd.js.map +1 -1
- package/bundles/c8y-ngx-components.umd.min.js +2 -2
- package/bundles/c8y-ngx-components.umd.min.js.map +1 -1
- package/c8y-ngx-components.d.ts +90 -87
- package/c8y-ngx-components.metadata.json +1 -1
- package/connectivity/c8y-ngx-components-connectivity.metadata.json +1 -1
- package/context-dashboard/c8y-ngx-components-context-dashboard.metadata.json +1 -1
- package/core/authentication/new-password.component.d.ts +8 -6
- package/core/docs/guide-docs.component.d.ts +25 -3
- package/core/forms/validation-pattern.d.ts +1 -0
- package/core/i18n/force-html-translate.directive.d.ts +32 -0
- package/core/login/change-password.component.d.ts +1 -1
- package/core/login/login.service.d.ts +15 -2
- package/core/login/password-strength-validator.directive.d.ts +9 -0
- package/core/login/strength-validator-service.d.ts +7 -0
- package/core/user/user-edit.component.d.ts +4 -2
- package/esm2015/c8y-ngx-components.js +90 -87
- package/esm2015/connectivity/impact/impact-provider-settings.component.js +2 -2
- package/esm2015/context-dashboard/legacy-welcome/legacy-welcome.component.js +2 -2
- package/esm2015/core/authentication/new-password.component.js +15 -20
- package/esm2015/core/dashboard/widgets-dashboard.component.js +2 -2
- package/esm2015/core/docs/guide-docs.component.js +69 -4
- package/esm2015/core/forms/validation-pattern.js +2 -1
- package/esm2015/core/i18n/force-html-translate.directive.js +99 -0
- package/esm2015/core/i18n/i18n.module.js +5 -3
- package/esm2015/core/i18n/pattern-messages.data.js +2 -2
- package/esm2015/core/login/change-password.component.js +5 -5
- package/esm2015/core/login/credentials.component.js +2 -2
- package/esm2015/core/login/login.module.js +4 -2
- package/esm2015/core/login/login.service.js +40 -6
- package/esm2015/core/login/password-strength-validator.directive.js +32 -0
- package/esm2015/core/login/strength-validator-service.js +28 -0
- package/esm2015/core/user/user-edit.component.js +10 -5
- package/esm2015/repository/configuration/configuration-list.component.js +2 -2
- package/esm2015/sensor-phone/sensor-phone-modal.component.js +2 -2
- package/esm5/c8y-ngx-components.js +90 -87
- package/esm5/connectivity/impact/impact-provider-settings.component.js +2 -2
- package/esm5/context-dashboard/legacy-welcome/legacy-welcome.component.js +2 -2
- package/esm5/core/authentication/new-password.component.js +21 -25
- package/esm5/core/dashboard/widgets-dashboard.component.js +2 -2
- package/esm5/core/docs/guide-docs.component.js +72 -4
- package/esm5/core/forms/validation-pattern.js +2 -1
- package/esm5/core/i18n/force-html-translate.directive.js +105 -0
- package/esm5/core/i18n/i18n.module.js +5 -3
- package/esm5/core/i18n/pattern-messages.data.js +2 -2
- package/esm5/core/login/change-password.component.js +5 -5
- package/esm5/core/login/credentials.component.js +2 -2
- package/esm5/core/login/login.module.js +4 -2
- package/esm5/core/login/login.service.js +43 -6
- package/esm5/core/login/password-strength-validator.directive.js +38 -0
- package/esm5/core/login/strength-validator-service.js +29 -0
- package/esm5/core/user/user-edit.component.js +19 -9
- package/esm5/repository/configuration/configuration-list.component.js +2 -2
- package/esm5/sensor-phone/sensor-phone-modal.component.js +2 -2
- package/fesm2015/c8y-ngx-components-connectivity.js +1 -1
- package/fesm2015/c8y-ngx-components-connectivity.js.map +1 -1
- package/fesm2015/c8y-ngx-components-context-dashboard.js +1 -1
- package/fesm2015/c8y-ngx-components-context-dashboard.js.map +1 -1
- package/fesm2015/c8y-ngx-components-repository.js +1 -1
- package/fesm2015/c8y-ngx-components-repository.js.map +1 -1
- package/fesm2015/c8y-ngx-components-sensor-phone.js +1 -1
- package/fesm2015/c8y-ngx-components-sensor-phone.js.map +1 -1
- package/fesm2015/c8y-ngx-components.js +281 -40
- package/fesm2015/c8y-ngx-components.js.map +1 -1
- package/fesm5/c8y-ngx-components-connectivity.js +1 -1
- package/fesm5/c8y-ngx-components-connectivity.js.map +1 -1
- package/fesm5/c8y-ngx-components-context-dashboard.js +1 -1
- package/fesm5/c8y-ngx-components-context-dashboard.js.map +1 -1
- package/fesm5/c8y-ngx-components-repository.js +1 -1
- package/fesm5/c8y-ngx-components-repository.js.map +1 -1
- package/fesm5/c8y-ngx-components-sensor-phone.js +1 -1
- package/fesm5/c8y-ngx-components-sensor-phone.js.map +1 -1
- package/fesm5/c8y-ngx-components.js +315 -49
- package/fesm5/c8y-ngx-components.js.map +1 -1
- package/locales/de.po +71 -60
- package/locales/es.po +120 -85
- package/locales/fr.po +107 -72
- package/locales/ja_JP.po +89 -78
- package/locales/ko.po +92 -57
- package/locales/locales.pot +9 -9
- package/locales/nl.po +95 -60
- package/locales/pl.po +88 -53
- package/locales/pt_BR.po +174 -138
- package/locales/ru.po +120 -85
- package/locales/zh_CN.po +87 -52
- package/package.json +2 -2
- package/repository/c8y-ngx-components-repository.metadata.json +1 -1
- package/sensor-phone/c8y-ngx-components-sensor-phone.metadata.json +1 -1
|
@@ -3553,7 +3553,7 @@
|
|
|
3553
3553
|
}
|
|
3554
3554
|
},
|
|
3555
3555
|
'^Error updating tenant! Cannot insert second configuration for Password code grant internal/Bad Request$': {
|
|
3556
|
-
gettext: gettext('This login mode was already set by
|
|
3556
|
+
gettext: gettext('This login mode was already set by another administrator. Refresh the page to update the data.')
|
|
3557
3557
|
},
|
|
3558
3558
|
};
|
|
3559
3559
|
|
|
@@ -3651,6 +3651,106 @@
|
|
|
3651
3651
|
return TranslateParserCustom;
|
|
3652
3652
|
}(core$1.TranslateDefaultParser));
|
|
3653
3653
|
|
|
3654
|
+
/**
|
|
3655
|
+
* This is temporary fallback directive that is used to handle HTML blocks translation on maintenance versions
|
|
3656
|
+
* in version 10.9.4 and later, this is replaced by default translate directive.
|
|
3657
|
+
*/
|
|
3658
|
+
var ForceHtmlTranslateDirective = /** @class */ (function () {
|
|
3659
|
+
function ForceHtmlTranslateDirective(translateService, element, _ref) {
|
|
3660
|
+
var _this = this;
|
|
3661
|
+
this.translateService = translateService;
|
|
3662
|
+
this.element = element;
|
|
3663
|
+
this._ref = _ref;
|
|
3664
|
+
/**
|
|
3665
|
+
* Used to trigger events when html is replaced by directive.
|
|
3666
|
+
*/
|
|
3667
|
+
this.htmlUpdateEvent = new core.EventEmitter();
|
|
3668
|
+
// subscribe to onTranslationChange event, in case the translations of the current lang change
|
|
3669
|
+
if (!this.onTranslationChangeSub) {
|
|
3670
|
+
this.onTranslationChangeSub = this.translateService.onTranslationChange.subscribe(function (event) {
|
|
3671
|
+
if (event.lang === _this.translateService.currentLang) {
|
|
3672
|
+
_this.checkNodes();
|
|
3673
|
+
}
|
|
3674
|
+
});
|
|
3675
|
+
}
|
|
3676
|
+
// subscribe to onLangChange event, in case the language changes
|
|
3677
|
+
if (!this.onLangChangeSub) {
|
|
3678
|
+
this.onLangChangeSub = this.translateService.onLangChange.subscribe(function (event) {
|
|
3679
|
+
_this.checkNodes();
|
|
3680
|
+
});
|
|
3681
|
+
}
|
|
3682
|
+
// subscribe to onDefaultLangChange event, in case the default language changes
|
|
3683
|
+
if (!this.onDefaultLangChangeSub) {
|
|
3684
|
+
this.onDefaultLangChangeSub = this.translateService.onDefaultLangChange.subscribe(function (event) {
|
|
3685
|
+
_this.checkNodes();
|
|
3686
|
+
});
|
|
3687
|
+
}
|
|
3688
|
+
}
|
|
3689
|
+
Object.defineProperty(ForceHtmlTranslateDirective.prototype, "translateParams", {
|
|
3690
|
+
set: function (params) {
|
|
3691
|
+
if (!lodashEs.isEqual(this.currentParams, params)) {
|
|
3692
|
+
this.currentParams = params;
|
|
3693
|
+
this.checkNodes();
|
|
3694
|
+
}
|
|
3695
|
+
},
|
|
3696
|
+
enumerable: true,
|
|
3697
|
+
configurable: true
|
|
3698
|
+
});
|
|
3699
|
+
ForceHtmlTranslateDirective.prototype.ngAfterViewChecked = function () {
|
|
3700
|
+
this.checkNodes();
|
|
3701
|
+
};
|
|
3702
|
+
ForceHtmlTranslateDirective.prototype.checkNodes = function () {
|
|
3703
|
+
if (this.isLookupKeyMissing()) {
|
|
3704
|
+
this.element.nativeElement.lookupKey = this.getLookupKey();
|
|
3705
|
+
}
|
|
3706
|
+
this.translateAndUpdateHtmlContent();
|
|
3707
|
+
this.htmlUpdateEvent.emit();
|
|
3708
|
+
};
|
|
3709
|
+
ForceHtmlTranslateDirective.prototype.ngOnDestroy = function () {
|
|
3710
|
+
if (this.onLangChangeSub) {
|
|
3711
|
+
this.onLangChangeSub.unsubscribe();
|
|
3712
|
+
}
|
|
3713
|
+
if (this.onDefaultLangChangeSub) {
|
|
3714
|
+
this.onDefaultLangChangeSub.unsubscribe();
|
|
3715
|
+
}
|
|
3716
|
+
if (this.onTranslationChangeSub) {
|
|
3717
|
+
this.onTranslationChangeSub.unsubscribe();
|
|
3718
|
+
}
|
|
3719
|
+
this.htmlUpdateEvent.complete();
|
|
3720
|
+
};
|
|
3721
|
+
/**
|
|
3722
|
+
* Builds lookup key from innerHTML, removes comments (that might be added by Angular) and trims it.
|
|
3723
|
+
*/
|
|
3724
|
+
ForceHtmlTranslateDirective.prototype.getLookupKey = function () {
|
|
3725
|
+
return this.element.nativeElement.innerHTML.replace(/<!--.*?-->/gs, '').trim();
|
|
3726
|
+
};
|
|
3727
|
+
ForceHtmlTranslateDirective.prototype.isLookupKeyMissing = function () {
|
|
3728
|
+
return !this.element.nativeElement.lookupKey;
|
|
3729
|
+
};
|
|
3730
|
+
ForceHtmlTranslateDirective.prototype.lookupKeyExist = function () {
|
|
3731
|
+
return this.element.nativeElement.lookupKey;
|
|
3732
|
+
};
|
|
3733
|
+
ForceHtmlTranslateDirective.prototype.translateAndUpdateHtmlContent = function () {
|
|
3734
|
+
if (this.lookupKeyExist()) {
|
|
3735
|
+
this.element.nativeElement.innerHTML = this.translateService.instant(this.element.nativeElement.lookupKey, this.currentParams || {});
|
|
3736
|
+
}
|
|
3737
|
+
};
|
|
3738
|
+
ForceHtmlTranslateDirective.ctorParameters = function () { return [
|
|
3739
|
+
{ type: core$1.TranslateService },
|
|
3740
|
+
{ type: core.ElementRef },
|
|
3741
|
+
{ type: core.ChangeDetectorRef }
|
|
3742
|
+
]; };
|
|
3743
|
+
__decorate([
|
|
3744
|
+
core.Input()
|
|
3745
|
+
], ForceHtmlTranslateDirective.prototype, "translateParams", null);
|
|
3746
|
+
ForceHtmlTranslateDirective = __decorate([
|
|
3747
|
+
core.Directive({
|
|
3748
|
+
selector: '[forceHtmlTranslate]'
|
|
3749
|
+
})
|
|
3750
|
+
], ForceHtmlTranslateDirective);
|
|
3751
|
+
return ForceHtmlTranslateDirective;
|
|
3752
|
+
}());
|
|
3753
|
+
|
|
3654
3754
|
// Load these as a side effect
|
|
3655
3755
|
try {
|
|
3656
3756
|
// tslint:disable:no-var-requires
|
|
@@ -3727,8 +3827,9 @@
|
|
|
3727
3827
|
var I18nModule_1;
|
|
3728
3828
|
I18nModule = I18nModule_1 = __decorate([
|
|
3729
3829
|
core.NgModule({
|
|
3730
|
-
exports: [core$1.TranslateModule],
|
|
3731
|
-
imports: [http.HttpClientModule]
|
|
3830
|
+
exports: [core$1.TranslateModule, ForceHtmlTranslateDirective],
|
|
3831
|
+
imports: [http.HttpClientModule],
|
|
3832
|
+
declarations: [ForceHtmlTranslateDirective]
|
|
3732
3833
|
})
|
|
3733
3834
|
], I18nModule);
|
|
3734
3835
|
return I18nModule;
|
|
@@ -6938,6 +7039,7 @@
|
|
|
6938
7039
|
};
|
|
6939
7040
|
this.passwordStrengthSetting = {
|
|
6940
7041
|
enforcePasswordStrength: false,
|
|
7042
|
+
passwordStrengthValidity: false,
|
|
6941
7043
|
greenMinLength: this.GREEN_MIN_LENGTH_DEFAULT
|
|
6942
7044
|
};
|
|
6943
7045
|
this.localhostRegExp = new RegExp('localhost');
|
|
@@ -7032,14 +7134,50 @@
|
|
|
7032
7134
|
return this.passwordStrengthSetting.greenMinLength;
|
|
7033
7135
|
};
|
|
7034
7136
|
/**
|
|
7035
|
-
* Checks if password strength is enforced
|
|
7036
|
-
*
|
|
7137
|
+
* Checks if password strength is enforced for system
|
|
7138
|
+
* by retrieving value of `enforceStrength` property from loginOptions response
|
|
7139
|
+
* @return boolean value, true if enforced, false otherwise.
|
|
7037
7140
|
*/
|
|
7038
7141
|
LoginService.prototype.getEnforcePasswordStrength = function () {
|
|
7039
7142
|
var loginOption = this.getLoginOption();
|
|
7040
|
-
|
|
7143
|
+
var enforcePasswordStrength = lodashEs.get(loginOption, 'enforceStrength');
|
|
7144
|
+
if (lodashEs.isString(enforcePasswordStrength)) {
|
|
7145
|
+
this.passwordStrengthSetting.enforcePasswordStrength = enforcePasswordStrength === 'true' ? true : false;
|
|
7146
|
+
}
|
|
7147
|
+
else {
|
|
7148
|
+
this.passwordStrengthSetting.enforcePasswordStrength = !!enforcePasswordStrength;
|
|
7149
|
+
}
|
|
7041
7150
|
return this.passwordStrengthSetting.enforcePasswordStrength;
|
|
7042
7151
|
};
|
|
7152
|
+
/**
|
|
7153
|
+
* Checks if password strength is enforced for particular tenant
|
|
7154
|
+
* by retrieving value of `strengthValidity` property from loginOptions response
|
|
7155
|
+
* @return boolean value, true if enforced, false otherwise.
|
|
7156
|
+
*/
|
|
7157
|
+
LoginService.prototype.getPasswordStrengthValidity = function () {
|
|
7158
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
7159
|
+
var loginOption, strengthValidity;
|
|
7160
|
+
return __generator(this, function (_a) {
|
|
7161
|
+
loginOption = this.getLoginOption();
|
|
7162
|
+
strengthValidity = lodashEs.get(loginOption, 'strengthValidity');
|
|
7163
|
+
if (lodashEs.isString(strengthValidity)) {
|
|
7164
|
+
this.passwordStrengthSetting.passwordStrengthValidity = strengthValidity === 'true' ? true : false;
|
|
7165
|
+
}
|
|
7166
|
+
else {
|
|
7167
|
+
this.passwordStrengthSetting.passwordStrengthValidity = !!strengthValidity;
|
|
7168
|
+
}
|
|
7169
|
+
return [2 /*return*/, this.passwordStrengthSetting.passwordStrengthValidity];
|
|
7170
|
+
});
|
|
7171
|
+
});
|
|
7172
|
+
};
|
|
7173
|
+
/**
|
|
7174
|
+
* Function determines if enforced strength checks should be enabled for current tenant
|
|
7175
|
+
* based on properties retrieved from loginOptions
|
|
7176
|
+
* @return boolean value, true if strength is enforced for tenant, false otherwise.
|
|
7177
|
+
*/
|
|
7178
|
+
LoginService.prototype.getPasswordStrengthEnforced = function () {
|
|
7179
|
+
return this.getEnforcePasswordStrength() || this.getPasswordStrengthValidity();
|
|
7180
|
+
};
|
|
7043
7181
|
/**
|
|
7044
7182
|
* Clears all backend errors.
|
|
7045
7183
|
*/
|
|
@@ -7651,7 +7789,7 @@
|
|
|
7651
7789
|
}());
|
|
7652
7790
|
|
|
7653
7791
|
var UserEditComponent = /** @class */ (function () {
|
|
7654
|
-
function UserEditComponent(state, translate, passwordService, modalConfirmService, bsModalService, alert, userService, tenantLoginOptionsService) {
|
|
7792
|
+
function UserEditComponent(state, translate, passwordService, modalConfirmService, bsModalService, alert, userService, tenantLoginOptionsService, tenantService) {
|
|
7655
7793
|
this.state = state;
|
|
7656
7794
|
this.translate = translate;
|
|
7657
7795
|
this.passwordService = passwordService;
|
|
@@ -7660,6 +7798,7 @@
|
|
|
7660
7798
|
this.alert = alert;
|
|
7661
7799
|
this.userService = userService;
|
|
7662
7800
|
this.tenantLoginOptionsService = tenantLoginOptionsService;
|
|
7801
|
+
this.tenantService = tenantService;
|
|
7663
7802
|
this.loading = false;
|
|
7664
7803
|
this.onUser = new core.EventEmitter();
|
|
7665
7804
|
this.onLanguage = new core.EventEmitter();
|
|
@@ -7678,11 +7817,19 @@
|
|
|
7678
7817
|
});
|
|
7679
7818
|
UserEditComponent.prototype.ngOnInit = function () {
|
|
7680
7819
|
return __awaiter(this, void 0, void 0, function () {
|
|
7681
|
-
|
|
7682
|
-
|
|
7683
|
-
|
|
7820
|
+
var currentTenant, _a, enabledOnSystemLevel, enabledOnTenantLevel;
|
|
7821
|
+
return __generator(this, function (_b) {
|
|
7822
|
+
switch (_b.label) {
|
|
7823
|
+
case 0: return [4 /*yield*/, this.tenantService.current()];
|
|
7684
7824
|
case 1:
|
|
7685
|
-
|
|
7825
|
+
currentTenant = (_b.sent()).data;
|
|
7826
|
+
return [4 /*yield*/, this.tenantService.getTfaSettings(currentTenant)];
|
|
7827
|
+
case 2:
|
|
7828
|
+
_a = _b.sent(), enabledOnSystemLevel = _a.enabledOnSystemLevel, enabledOnTenantLevel = _a.enabledOnTenantLevel;
|
|
7829
|
+
this.isTfaEnabled = enabledOnSystemLevel || enabledOnTenantLevel;
|
|
7830
|
+
return [4 /*yield*/, this.initializeTotpSettings()];
|
|
7831
|
+
case 3:
|
|
7832
|
+
_b.sent();
|
|
7686
7833
|
return [2 /*return*/];
|
|
7687
7834
|
}
|
|
7688
7835
|
});
|
|
@@ -7769,7 +7916,8 @@
|
|
|
7769
7916
|
{ type: modal.BsModalService },
|
|
7770
7917
|
{ type: AlertService },
|
|
7771
7918
|
{ type: client.UserService },
|
|
7772
|
-
{ type: client.TenantLoginOptionsService }
|
|
7919
|
+
{ type: client.TenantLoginOptionsService },
|
|
7920
|
+
{ type: client.TenantService }
|
|
7773
7921
|
]; };
|
|
7774
7922
|
__decorate([
|
|
7775
7923
|
core.Input()
|
|
@@ -7792,7 +7940,7 @@
|
|
|
7792
7940
|
UserEditComponent = __decorate([
|
|
7793
7941
|
core.Component({
|
|
7794
7942
|
selector: 'c8y-user-edit',
|
|
7795
|
-
template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n You cannot edit the user since it is managed via your authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username (e.g. email)</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"user.newsletter\"\n [disabled]=\"userIsExternal\"\n />\n <c8y-messages>\n <c8y-message *ngIf=\"!user.email\" translate\n >Note that email is required to reset password.</c8y-message\n >\n </c8y-messages>\n </c8y-form-group>\n\n <div class=\"row\" style=\"margin-left:-15px; margin-right:-15px\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n c8yDefaultValidation=\"phoneNumber\"\n [required]=\"user.twoFactorAuthenticationEnabled\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"userLang\">Language</label>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"userLang\"\n class=\"form-control\"\n #selectLang\n name=\"lang\"\n [(ngModel)]=\"lang\"\n (change)=\"onLanguage.emit(selectLang.value)\"\n [disabled]=\"userIsExternal\"\n >\n <option *ngFor=\"let lang of langs\" [value]=\"lang\">{{\n translate.getNativeLanguage(lang)\n }}</option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n\n <div class=\"form-group\" *ngIf=\"!userIsExternal\">\n <label class=\"control-label\">{{ 'Login options' | translate }}</label>\n <c8y-new-password (password)=\"onNewPasswordChanged($event)\"></c8y-new-password>\n <button\n title=\"{{ 'Set up two-factor authentication' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"setupTotp()\"\n translate\n *ngIf=\"userCanSetupTotp && !userHasActiveTotp\"\n >\n Set up two-factor authentication\n </button>\n </div>\n\n <c8y-form-group *ngIf=\"!!(state.state$ | async).newsletter\">\n <label translate>Newsletter</label>\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"newsletter\"\n [(ngModel)]=\"user.newsletter\"\n [disabled]=\"userIsExternal\"\n />\n <span></span>\n {{ 'Send me information about outages, maintenance or updates.' | translate }}\n </label>\n </c8y-form-group>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n translate\n >\n Cancel\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!userForm.form.valid || userForm.form.pristine || loading || userIsExternal\"\n translate\n >\n Save\n </button>\n </div>\n</form>\n"
|
|
7943
|
+
template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n You cannot edit the user since it is managed via your authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username (e.g. email)</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"user.newsletter\"\n [disabled]=\"userIsExternal\"\n />\n <c8y-messages>\n <c8y-message *ngIf=\"!user.email\" translate\n >Note that email is required to reset password.</c8y-message\n >\n </c8y-messages>\n </c8y-form-group>\n\n <div class=\"row\" style=\"margin-left:-15px; margin-right:-15px\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n c8yDefaultValidation=\"phoneNumber\"\n [required]=\"user.twoFactorAuthenticationEnabled\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"userLang\">Language</label>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"userLang\"\n class=\"form-control\"\n #selectLang\n name=\"lang\"\n [(ngModel)]=\"lang\"\n (change)=\"onLanguage.emit(selectLang.value)\"\n [disabled]=\"userIsExternal\"\n >\n <option *ngFor=\"let lang of langs\" [value]=\"lang\">{{\n translate.getNativeLanguage(lang)\n }}</option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n\n <div class=\"form-group\" *ngIf=\"!userIsExternal\">\n <label class=\"control-label\">{{ 'Login options' | translate }}</label>\n <c8y-new-password (password)=\"onNewPasswordChanged($event)\"></c8y-new-password>\n <button\n title=\"{{ 'Set up two-factor authentication' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"setupTotp()\"\n translate\n *ngIf=\"userCanSetupTotp && !userHasActiveTotp && isTfaEnabled\"\n >\n Set up two-factor authentication\n </button>\n </div>\n\n <c8y-form-group *ngIf=\"!!(state.state$ | async).newsletter\">\n <label translate>Newsletter</label>\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"newsletter\"\n [(ngModel)]=\"user.newsletter\"\n [disabled]=\"userIsExternal\"\n />\n <span></span>\n {{ 'Send me information about outages, maintenance or updates.' | translate }}\n </label>\n </c8y-form-group>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n translate\n >\n Cancel\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!userForm.form.valid || userForm.form.pristine || loading || userIsExternal\"\n translate\n >\n Save\n </button>\n </div>\n</form>\n"
|
|
7796
7944
|
})
|
|
7797
7945
|
], UserEditComponent);
|
|
7798
7946
|
return UserEditComponent;
|
|
@@ -8214,15 +8362,16 @@
|
|
|
8214
8362
|
}());
|
|
8215
8363
|
|
|
8216
8364
|
var NewPasswordComponent = /** @class */ (function () {
|
|
8217
|
-
function NewPasswordComponent(
|
|
8218
|
-
this.
|
|
8365
|
+
function NewPasswordComponent(loginService) {
|
|
8366
|
+
this.loginService = loginService;
|
|
8219
8367
|
this.password = new core.EventEmitter();
|
|
8220
8368
|
this.model = {};
|
|
8221
|
-
this.enforcePasswordStrength = false;
|
|
8222
8369
|
this.changePassword = false;
|
|
8370
|
+
this.passwordEnforced = false;
|
|
8223
8371
|
}
|
|
8224
8372
|
NewPasswordComponent.prototype.ngOnInit = function () {
|
|
8225
|
-
this.
|
|
8373
|
+
this.loadPasswordStrengthSettings();
|
|
8374
|
+
this.minlength = this.loginService.getGreenMinLength();
|
|
8226
8375
|
};
|
|
8227
8376
|
NewPasswordComponent.prototype.newPasswordChanged = function () {
|
|
8228
8377
|
this.password.emit({
|
|
@@ -8230,29 +8379,24 @@
|
|
|
8230
8379
|
passwordStrength: this.model.strength
|
|
8231
8380
|
});
|
|
8232
8381
|
};
|
|
8233
|
-
NewPasswordComponent.prototype.
|
|
8382
|
+
NewPasswordComponent.prototype.loadPasswordStrengthSettings = function () {
|
|
8234
8383
|
return __awaiter(this, void 0, void 0, function () {
|
|
8235
|
-
var
|
|
8236
|
-
return __generator(this, function (
|
|
8237
|
-
switch (
|
|
8384
|
+
var _a;
|
|
8385
|
+
return __generator(this, function (_b) {
|
|
8386
|
+
switch (_b.label) {
|
|
8238
8387
|
case 0:
|
|
8239
|
-
_a
|
|
8240
|
-
return [4 /*yield*/, this.
|
|
8241
|
-
category: 'password',
|
|
8242
|
-
key: 'enforce.strength'
|
|
8243
|
-
})];
|
|
8388
|
+
_a = this;
|
|
8389
|
+
return [4 /*yield*/, this.loginService.getEnforcePasswordStrength()];
|
|
8244
8390
|
case 1:
|
|
8245
|
-
|
|
8246
|
-
|
|
8247
|
-
return [3 /*break*/, 3];
|
|
8248
|
-
case 2:
|
|
8249
|
-
e_1 = _a.sent();
|
|
8250
|
-
return [3 /*break*/, 3];
|
|
8251
|
-
case 3: return [2 /*return*/];
|
|
8391
|
+
_a.passwordEnforced = _b.sent();
|
|
8392
|
+
return [2 /*return*/];
|
|
8252
8393
|
}
|
|
8253
8394
|
});
|
|
8254
8395
|
});
|
|
8255
8396
|
};
|
|
8397
|
+
NewPasswordComponent.prototype.showPasswordStrength = function () {
|
|
8398
|
+
return this.model.newPassword && this.model.newPassword.length >= this.minlength;
|
|
8399
|
+
};
|
|
8256
8400
|
NewPasswordComponent.prototype.toggleChangePassword = function () {
|
|
8257
8401
|
this.changePassword = !this.changePassword;
|
|
8258
8402
|
if (!this.changePassword) {
|
|
@@ -8261,7 +8405,7 @@
|
|
|
8261
8405
|
}
|
|
8262
8406
|
};
|
|
8263
8407
|
NewPasswordComponent.ctorParameters = function () { return [
|
|
8264
|
-
{ type:
|
|
8408
|
+
{ type: LoginService }
|
|
8265
8409
|
]; };
|
|
8266
8410
|
__decorate([
|
|
8267
8411
|
core.Output()
|
|
@@ -8269,7 +8413,7 @@
|
|
|
8269
8413
|
NewPasswordComponent = __decorate([
|
|
8270
8414
|
core.Component({
|
|
8271
8415
|
selector: 'c8y-new-password',
|
|
8272
|
-
template: "<div class=\"form-group\">\n <button type=\"button\" class=\"btn btn-default\" (click)=\"toggleChangePassword()\">\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n</div>\n\n<div *ngIf=\"changePassword\">\n <c8y-form-group>\n <label for=\"newPassword\" translate>Password</label>\n <input\n id=\"newPassword\"\n [(ngModel)]=\"model.newPassword\"\n #newPassword=\"ngModel\"\n (change)=\"newPasswordChanged()\"\n type=\"password\"\n name=\"newPassword\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. my_new_password' | translate }}\"\n required\n c8yDefaultValidation=\"password\"\n autocomplete=\"new-password\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"newConfirmPassword\" translate>Confirm password</label>\n <input\n id=\"newConfirmPassword\"\n [(ngModel)]=\"model.newPasswordConfirm\"\n #newPasswordConfirm=\"ngModel\"\n type=\"password\"\n name=\"newPasswordConfirm\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. my_new_password' | translate }}\"\n required\n passwordConfirm=\"newPassword\"\n autocomplete=\"new-password\"\n />\n </c8y-form-group>\n\n <c8y-password-strength\n [password]=\"model.newPassword\"\n [hidden]=\"!
|
|
8416
|
+
template: "<div class=\"form-group\">\n <button type=\"button\" class=\"btn btn-default\" (click)=\"toggleChangePassword()\">\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n</div>\n\n<div *ngIf=\"changePassword\">\n <c8y-form-group>\n <label for=\"newPassword\" translate>Password</label>\n <input\n id=\"newPassword\"\n [(ngModel)]=\"model.newPassword\"\n #newPassword=\"ngModel\"\n (change)=\"newPasswordChanged()\"\n type=\"password\"\n name=\"newPassword\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. my_new_password' | translate }}\"\n required\n c8yDefaultValidation=\"password\"\n autocomplete=\"new-password\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"newConfirmPassword\" translate>Confirm password</label>\n <input\n id=\"newConfirmPassword\"\n [(ngModel)]=\"model.newPasswordConfirm\"\n #newPasswordConfirm=\"ngModel\"\n type=\"password\"\n name=\"newPasswordConfirm\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. my_new_password' | translate }}\"\n required\n passwordConfirm=\"newPassword\"\n autocomplete=\"new-password\"\n />\n </c8y-form-group>\n\n <c8y-password-strength\n [password]=\"model.newPassword\"\n [hidden]=\"!showPasswordStrength()\"\n (strength)=\"model.strength = $event\"\n ></c8y-password-strength>\n\n <c8y-password-check-list\n [password]=\"model.newPassword\"\n [hidden]=\"!passwordEnforced\"\n ></c8y-password-check-list>\n</div>\n",
|
|
8273
8417
|
viewProviders: [{ provide: forms.ControlContainer, useExisting: forms.NgForm }]
|
|
8274
8418
|
})
|
|
8275
8419
|
], NewPasswordComponent);
|
|
@@ -8331,6 +8475,7 @@
|
|
|
8331
8475
|
opcuaBrowsePath: gettext('Invalid OPC UA URI.'),
|
|
8332
8476
|
password: gettext('Password must have at least 8 characters and no more than 32 and can only contain letters, numbers and following symbols: `~!@#$%^&*()_|+-=?;:\'",.<>{}[]\\/'),
|
|
8333
8477
|
passwordConfirm: gettext('Passwords do not match.'),
|
|
8478
|
+
passwordStrength: gettext('Password not good enough, password must be stronger (green).'),
|
|
8334
8479
|
phoneNumber: gettext('Invalid phone number format. Only digits, spaces, slashes ("/") and dashes ("-") allowed.'),
|
|
8335
8480
|
required: gettext('This field is required.'),
|
|
8336
8481
|
tenantId: gettext('May contain lowercase letters, digits, hyphens and underscores. ' +
|
|
@@ -10420,9 +10565,9 @@
|
|
|
10420
10565
|
tenantId: '',
|
|
10421
10566
|
email: '',
|
|
10422
10567
|
newPassword: '',
|
|
10423
|
-
newPasswordConfirm: ''
|
|
10568
|
+
newPasswordConfirm: '',
|
|
10569
|
+
passwordStrengthEnforced: false
|
|
10424
10570
|
};
|
|
10425
|
-
this.enforcePasswordStrength = false;
|
|
10426
10571
|
this.emailReadOnly = false;
|
|
10427
10572
|
this.TOKEN_PARAM = 'token';
|
|
10428
10573
|
this.EMAIL_PARAM = 'email';
|
|
@@ -10433,7 +10578,7 @@
|
|
|
10433
10578
|
this.model.tenantId = this.loginService.getTenant();
|
|
10434
10579
|
this.model.email = this.options.get(this.EMAIL_PARAM, '');
|
|
10435
10580
|
this.emailReadOnly = !!this.model.email;
|
|
10436
|
-
this.
|
|
10581
|
+
this.model.passwordStrengthEnforced = this.loginService.getEnforcePasswordStrength();
|
|
10437
10582
|
return [2 /*return*/];
|
|
10438
10583
|
});
|
|
10439
10584
|
});
|
|
@@ -10494,7 +10639,7 @@
|
|
|
10494
10639
|
ChangePasswordComponent = __decorate([
|
|
10495
10640
|
core.Component({
|
|
10496
10641
|
selector: 'c8y-change-password',
|
|
10497
|
-
template: "<form\n role=\"form\"\n class=\"loginForm\"\n (ngSubmit)=\"changePassword()\"\n #changePasswordForm=\"ngForm\"\n novalidate\n>\n <c8y-form-group class=\"tenantField\" id=\"tenantField\" *ngIf=\"loginService.showTenant()\">\n <label translate>Tenant ID</label>\n <input\n [(ngModel)]=\"model.tenantId\"\n #tenantId=\"ngModel\"\n type=\"text\"\n name=\"tenantId\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'Tenant ID' | translate }}\"\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Email address</label>\n <input\n [(ngModel)]=\"model.email\"\n #email=\"ngModel\"\n type=\"text\"\n name=\"email\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'Email address' | translate }}\"\n email\n required\n [readonly]=\"emailReadOnly\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n
|
|
10642
|
+
template: "<form\n role=\"form\"\n class=\"loginForm\"\n (ngSubmit)=\"changePassword()\"\n #changePasswordForm=\"ngForm\"\n novalidate\n>\n\n <div\n class=\"legend form-block center\"\n translate\n >\n Change password\n </div>\n\n <c8y-form-group class=\"tenantField\" id=\"tenantField\" *ngIf=\"loginService.showTenant()\">\n <label translate>Tenant ID</label>\n <input\n [(ngModel)]=\"model.tenantId\"\n #tenantId=\"ngModel\"\n type=\"text\"\n name=\"tenantId\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'Tenant ID' | translate }}\"\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Email address</label>\n <input\n [(ngModel)]=\"model.email\"\n #email=\"ngModel\"\n type=\"text\"\n name=\"email\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'Email address' | translate }}\"\n email\n required\n [readonly]=\"emailReadOnly\"\n />\n </c8y-form-group>\n\n <div class=\"row content-flex-50\">\n <div class=\"col-7\">\n <c8y-form-group>\n <label translate>New password</label>\n <input\n [(ngModel)]=\"model.newPassword\"\n #newPassword=\"ngModel\"\n type=\"password\"\n name=\"newPassword\"\n class=\"form-control\"\n placeholder=\"{{ 'New password' | translate }}\"\n [pattern]=\"passwordPattern\"\n autocomplete=\"new-password\"\n [passwordStrengthEnforced]=\"model.passwordStrengthEnforced\"\n required\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n [text]=\"loginService.ERROR_MESSAGES.pattern_newPassword\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Confirm password</label>\n <input\n [(ngModel)]=\"model.newPasswordConfirm\"\n #newPasswordConfirm=\"ngModel\"\n type=\"password\"\n name=\"newPasswordConfirm\"\n class=\"form-control\"\n placeholder=\"{{ 'Confirm password' | translate }}\"\n passwordConfirm=\"newPassword\"\n autocomplete=\"new-password\"\n required\n />\n <c8y-messages>\n <c8y-message\n name=\"passwordConfirm\"\n [text]=\"loginService.ERROR_MESSAGES.passwordConfirm\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-5\">\n <c8y-password-strength\n [password]=\"model.newPassword\"\n [hidden]=\"!model.newPassword\"\n ></c8y-password-strength>\n <c8y-password-check-list\n class=\"m-t-32\"\n [password]=\"model.newPassword\"\n [hidden]=\"!model.newPassword || !model.passwordStrengthEnforced\"\n ></c8y-password-check-list>\n </div>\n </div>\n\n <button\n title=\"{{ 'Set password' | translate }}\"\n [disabled]=\"!changePasswordForm.form.valid || isLoading\"\n type=\"submit\"\n class=\"btn btn-primary btn-lg btn-block form-group\"\n translate\n >\n Set password\n </button>\n</form>\n"
|
|
10498
10643
|
})
|
|
10499
10644
|
], ChangePasswordComponent);
|
|
10500
10645
|
return ChangePasswordComponent;
|
|
@@ -10595,7 +10740,7 @@
|
|
|
10595
10740
|
};
|
|
10596
10741
|
CredentialsComponent.prototype.handleNoPhoneNumberProvided = function () {
|
|
10597
10742
|
this.onChangeView.emit({ view: exports.LoginViews.ProvidePhoneNumber, credentials: this.model });
|
|
10598
|
-
this.alert.warning(gettext('Two-factor authentication has been turned on for this account.
|
|
10743
|
+
this.alert.warning(gettext('Two-factor authentication has been turned on for this account. Provide your phone number above to save it in your user profile and start receiving verification codes via SMS.'));
|
|
10599
10744
|
};
|
|
10600
10745
|
CredentialsComponent.ctorParameters = function () { return [
|
|
10601
10746
|
{ type: LoginService },
|
|
@@ -10880,6 +11025,61 @@
|
|
|
10880
11025
|
return TotpAuthComponent;
|
|
10881
11026
|
}());
|
|
10882
11027
|
|
|
11028
|
+
var StrengthValidatorService = /** @class */ (function () {
|
|
11029
|
+
function StrengthValidatorService(passwordService) {
|
|
11030
|
+
this.passwordService = passwordService;
|
|
11031
|
+
}
|
|
11032
|
+
StrengthValidatorService.prototype.isStrong = function (password) {
|
|
11033
|
+
return this.isPasswordGreen(this.passwordService.getStrengthColor(password).passwordStrength);
|
|
11034
|
+
};
|
|
11035
|
+
StrengthValidatorService.prototype.isPasswordGreen = function (strength) {
|
|
11036
|
+
return strength === client.PasswordStrength.GREEN;
|
|
11037
|
+
};
|
|
11038
|
+
StrengthValidatorService.ctorParameters = function () { return [
|
|
11039
|
+
{ type: PasswordService }
|
|
11040
|
+
]; };
|
|
11041
|
+
StrengthValidatorService.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function StrengthValidatorService_Factory() { return new StrengthValidatorService(core.ɵɵinject(PasswordService)); }, token: StrengthValidatorService, providedIn: "root" });
|
|
11042
|
+
StrengthValidatorService = __decorate([
|
|
11043
|
+
core.Injectable({
|
|
11044
|
+
providedIn: 'root'
|
|
11045
|
+
})
|
|
11046
|
+
], StrengthValidatorService);
|
|
11047
|
+
return StrengthValidatorService;
|
|
11048
|
+
}());
|
|
11049
|
+
|
|
11050
|
+
var PasswordStrengthValidatorDirective = /** @class */ (function () {
|
|
11051
|
+
function PasswordStrengthValidatorDirective(passwordService) {
|
|
11052
|
+
this.passwordService = passwordService;
|
|
11053
|
+
}
|
|
11054
|
+
PasswordStrengthValidatorDirective_1 = PasswordStrengthValidatorDirective;
|
|
11055
|
+
Object.defineProperty(PasswordStrengthValidatorDirective.prototype, "passwordStrengthEnforced", {
|
|
11056
|
+
set: function (value) {
|
|
11057
|
+
this.forced = value;
|
|
11058
|
+
},
|
|
11059
|
+
enumerable: true,
|
|
11060
|
+
configurable: true
|
|
11061
|
+
});
|
|
11062
|
+
PasswordStrengthValidatorDirective.prototype.validate = function (control) {
|
|
11063
|
+
var strengthFulfilled = this.passwordService.isStrong(control.value || '');
|
|
11064
|
+
var enforcementForcedAndNotFulfilled = this.forced && !strengthFulfilled;
|
|
11065
|
+
return enforcementForcedAndNotFulfilled ? { passwordStrength: true } : null;
|
|
11066
|
+
};
|
|
11067
|
+
var PasswordStrengthValidatorDirective_1;
|
|
11068
|
+
PasswordStrengthValidatorDirective.ctorParameters = function () { return [
|
|
11069
|
+
{ type: StrengthValidatorService }
|
|
11070
|
+
]; };
|
|
11071
|
+
__decorate([
|
|
11072
|
+
core.Input()
|
|
11073
|
+
], PasswordStrengthValidatorDirective.prototype, "passwordStrengthEnforced", null);
|
|
11074
|
+
PasswordStrengthValidatorDirective = PasswordStrengthValidatorDirective_1 = __decorate([
|
|
11075
|
+
core.Directive({
|
|
11076
|
+
selector: '[passwordStrengthEnforced]',
|
|
11077
|
+
providers: [{ provide: forms.NG_VALIDATORS, useExisting: PasswordStrengthValidatorDirective_1, multi: true }]
|
|
11078
|
+
})
|
|
11079
|
+
], PasswordStrengthValidatorDirective);
|
|
11080
|
+
return PasswordStrengthValidatorDirective;
|
|
11081
|
+
}());
|
|
11082
|
+
|
|
10883
11083
|
/**
|
|
10884
11084
|
* The angular module definition for the login.
|
|
10885
11085
|
* @exports LoginComponent
|
|
@@ -10905,7 +11105,8 @@
|
|
|
10905
11105
|
RecoverPasswordComponent,
|
|
10906
11106
|
ChangePasswordComponent,
|
|
10907
11107
|
CredentialsComponent,
|
|
10908
|
-
TotpAuthComponent
|
|
11108
|
+
TotpAuthComponent,
|
|
11109
|
+
PasswordStrengthValidatorDirective
|
|
10909
11110
|
],
|
|
10910
11111
|
imports: [
|
|
10911
11112
|
forms.FormsModule,
|
|
@@ -14237,24 +14438,89 @@
|
|
|
14237
14438
|
}());
|
|
14238
14439
|
|
|
14239
14440
|
var GuideDocsComponent = /** @class */ (function () {
|
|
14240
|
-
function GuideDocsComponent(docs) {
|
|
14441
|
+
function GuideDocsComponent(docs, el, renderer) {
|
|
14241
14442
|
this.docs = docs;
|
|
14443
|
+
this.el = el;
|
|
14444
|
+
this.renderer = renderer;
|
|
14445
|
+
this.destroyed$ = new rxjs.ReplaySubject(1);
|
|
14242
14446
|
}
|
|
14243
14447
|
GuideDocsComponent.prototype.ngOnInit = function () {
|
|
14244
14448
|
this.baseUrl = this.docs.getBaseUrl();
|
|
14245
14449
|
};
|
|
14450
|
+
/**
|
|
14451
|
+
* After content is initialized we subscribe for translation events, then we are able to modify
|
|
14452
|
+
* anchor just as C8yGuideHrefDirective does.
|
|
14453
|
+
*/
|
|
14454
|
+
GuideDocsComponent.prototype.ngAfterContentInit = function () {
|
|
14455
|
+
var _this = this;
|
|
14456
|
+
if (this.translateDirective) {
|
|
14457
|
+
this.translateDirective.htmlUpdateEvent
|
|
14458
|
+
.pipe(operators.takeUntil(this.destroyed$))
|
|
14459
|
+
.subscribe(function () {
|
|
14460
|
+
_this.replaceAnchorAttributes();
|
|
14461
|
+
});
|
|
14462
|
+
}
|
|
14463
|
+
else {
|
|
14464
|
+
this.replaceAnchorAttributes();
|
|
14465
|
+
}
|
|
14466
|
+
};
|
|
14467
|
+
/**
|
|
14468
|
+
* Find and modify anchor elements
|
|
14469
|
+
*/
|
|
14470
|
+
GuideDocsComponent.prototype.replaceAnchorAttributes = function () {
|
|
14471
|
+
var _this = this;
|
|
14472
|
+
var anchors = this.findGuideAnchors(this.el.nativeElement);
|
|
14473
|
+
anchors.forEach(function (a) {
|
|
14474
|
+
var guideHref = _this.baseUrl + "/" + a.getAttribute('c8y-guide-href');
|
|
14475
|
+
_this.renderer.setAttribute(a, 'href', guideHref);
|
|
14476
|
+
if (!a.hasAttribute('target')) {
|
|
14477
|
+
_this.renderer.setAttribute(a, 'target', '_blank');
|
|
14478
|
+
}
|
|
14479
|
+
});
|
|
14480
|
+
};
|
|
14481
|
+
/**
|
|
14482
|
+
* Recursive function, returns array of Anchor elements inside HTMLElement.
|
|
14483
|
+
*/
|
|
14484
|
+
GuideDocsComponent.prototype.findGuideAnchors = function (el) {
|
|
14485
|
+
var _this = this;
|
|
14486
|
+
var isAnchor = function () { return el.nodeName === 'A'; };
|
|
14487
|
+
var hasGuideHrefAttr = function () { return !!el.attributes.getNamedItem('c8y-guide-href'); };
|
|
14488
|
+
var hasChildren = function () { return el.childNodes && el.childNodes.length > 0; };
|
|
14489
|
+
var result = [];
|
|
14490
|
+
if (isAnchor() && hasGuideHrefAttr()) {
|
|
14491
|
+
result.push(el);
|
|
14492
|
+
}
|
|
14493
|
+
else if (hasChildren()) {
|
|
14494
|
+
el.childNodes.forEach(function (node) {
|
|
14495
|
+
var searchResult = _this.findGuideAnchors(node);
|
|
14496
|
+
if (searchResult) {
|
|
14497
|
+
result = __spread(result, searchResult);
|
|
14498
|
+
}
|
|
14499
|
+
});
|
|
14500
|
+
}
|
|
14501
|
+
return result;
|
|
14502
|
+
};
|
|
14246
14503
|
GuideDocsComponent.prototype.ngAfterViewInit = function () {
|
|
14247
14504
|
var _this = this;
|
|
14248
14505
|
this.links.forEach(function (guide) {
|
|
14249
14506
|
guide.baseHref = _this.baseUrl;
|
|
14250
14507
|
});
|
|
14251
14508
|
};
|
|
14509
|
+
GuideDocsComponent.prototype.ngOnDestroy = function () {
|
|
14510
|
+
this.destroyed$.next(true);
|
|
14511
|
+
this.destroyed$.complete();
|
|
14512
|
+
};
|
|
14252
14513
|
GuideDocsComponent.ctorParameters = function () { return [
|
|
14253
|
-
{ type: DocsService }
|
|
14514
|
+
{ type: DocsService },
|
|
14515
|
+
{ type: core.ElementRef },
|
|
14516
|
+
{ type: core.Renderer2 }
|
|
14254
14517
|
]; };
|
|
14255
14518
|
__decorate([
|
|
14256
14519
|
core.ContentChildren(GuideHrefDirective, { descendants: true })
|
|
14257
14520
|
], GuideDocsComponent.prototype, "links", void 0);
|
|
14521
|
+
__decorate([
|
|
14522
|
+
core.ContentChild(ForceHtmlTranslateDirective, { static: false })
|
|
14523
|
+
], GuideDocsComponent.prototype, "translateDirective", void 0);
|
|
14258
14524
|
GuideDocsComponent = __decorate([
|
|
14259
14525
|
core.Component({
|
|
14260
14526
|
selector: '[c8y-guide-docs]',
|
|
@@ -15252,7 +15518,7 @@
|
|
|
15252
15518
|
WidgetsDashboardComponent = __decorate([
|
|
15253
15519
|
core.Component({
|
|
15254
15520
|
selector: 'c8y-widgets-dashboard',
|
|
15255
|
-
template: "<c8y-title *ngIf=\"!!settings.title\">\n {{ settings.title | translate }}\n</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"onAddWidget.observers.length\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onAddWidget.emit()\"\n >\n <i c8yIcon=\"plus-circle\"></i> {{ 'Add widget' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"onEditDashboard.observers.length\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onEditDashboard.emit()\"\n >\n <i c8yIcon=\"pencil\"></i> {{ 'Edit' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"settings.allowFullscreen\">\n <button class=\"btn btn-link\" (click)=\"toggleFullscreen()\">\n <i [c8yIcon]=\"fullScreen() ? 'compress' : 'expand'\"></i> {{ 'Full screen' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n itemClass=\"navbar-form\"\n *ngIf=\"onFreeze.observers.length\"\n>\n <button\n title=\"{{ 'Lock/unlock this dashboard' | translate }}\"\n class=\"btn btn-default\"\n [ngClass]=\"{ active: settings.isFrozen }\"\n (click)=\"onFreeze.emit(settings)\"\n [disabled]=\"settings.isDisabled\"\n uib-btn-checkbox\n >\n <i [c8yIcon]=\"settings.isFrozen ? 'lock' : 'unlock'\"></i>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-3000\"\n *ngIf=\"settings.canDelete && onDeleteDashboard.observers.length\"\n>\n <button (click)=\"onDeleteDashboard.emit()\" [disabled]=\"settings.isFrozen || settings.isDisabled\">\n <i c8yIcon=\"trash\"></i> <span translate>Delete dashboard</span>\n </button>\n</c8y-action-bar-item>\n\n<!-- empty state -->\n<div class=\"c8y-empty-state text-center\" *ngIf=\"!settings.isLoading && widgets.length === 0\">\n <h1 class=\"c8y-icon c8y-icon-device c8y-icon-duocolor\"></h1>\n <h3 translate>No widgets to display.</h3>\n <div *ngIf=\"!settings.isFrozen && onAddWidget.observers.length\">\n <p translate>Add widgets to this dashboard.</p>\n <div>\n <button\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onAddWidget.emit()\"\n class=\"btn btn-primary\"\n translate\n >\n Add widget\n </button>\n </div>\n <p c8y-guide-docs>\n <small
|
|
15521
|
+
template: "<c8y-title *ngIf=\"!!settings.title\">\n {{ settings.title | translate }}\n</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"onAddWidget.observers.length\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onAddWidget.emit()\"\n >\n <i c8yIcon=\"plus-circle\"></i> {{ 'Add widget' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"onEditDashboard.observers.length\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onEditDashboard.emit()\"\n >\n <i c8yIcon=\"pencil\"></i> {{ 'Edit' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"settings.allowFullscreen\">\n <button class=\"btn btn-link\" (click)=\"toggleFullscreen()\">\n <i [c8yIcon]=\"fullScreen() ? 'compress' : 'expand'\"></i> {{ 'Full screen' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n itemClass=\"navbar-form\"\n *ngIf=\"onFreeze.observers.length\"\n>\n <button\n title=\"{{ 'Lock/unlock this dashboard' | translate }}\"\n class=\"btn btn-default\"\n [ngClass]=\"{ active: settings.isFrozen }\"\n (click)=\"onFreeze.emit(settings)\"\n [disabled]=\"settings.isDisabled\"\n uib-btn-checkbox\n >\n <i [c8yIcon]=\"settings.isFrozen ? 'lock' : 'unlock'\"></i>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-3000\"\n *ngIf=\"settings.canDelete && onDeleteDashboard.observers.length\"\n>\n <button (click)=\"onDeleteDashboard.emit()\" [disabled]=\"settings.isFrozen || settings.isDisabled\">\n <i c8yIcon=\"trash\"></i> <span translate>Delete dashboard</span>\n </button>\n</c8y-action-bar-item>\n\n<!-- empty state -->\n<div class=\"c8y-empty-state text-center\" *ngIf=\"!settings.isLoading && widgets.length === 0\">\n <h1 class=\"c8y-icon c8y-icon-device c8y-icon-duocolor\"></h1>\n <h3 translate>No widgets to display.</h3>\n <div *ngIf=\"!settings.isFrozen && onAddWidget.observers.length\">\n <p translate>Add widgets to this dashboard.</p>\n <div>\n <button\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onAddWidget.emit()\"\n class=\"btn btn-primary\"\n translate\n >\n Add widget\n </button>\n </div>\n <p c8y-guide-docs>\n <small forceHtmlTranslate ngNonBindable\n >Find out more in the\n <a c8y-guide-href=\"users-guide/cockpit/#dashboards\">User guide`KEEP_ORIGINAL`</a>.</small\n >\n </p>\n </div>\n</div>\n<!-- /.empty settings -->\n\n<div class=\"col-xs-12 text-center\" *ngIf=\"settings.isLoading\">\n <div class=\"spinner\" style=\"position: relative;\">\n <div class=\"rect1\"></div>\n <div class=\"rect2\"></div>\n <div class=\"rect3\"></div>\n <div class=\"rect4\"></div>\n <div class=\"rect5\"></div>\n </div>\n</div>\n\n<c8y-dashboard\n (dashboardChange)=\"onChangeDashboard.emit($event)\"\n #dashboard\n *ngIf=\"!settings.isLoading\"\n>\n <c8y-dashboard-child\n *ngFor=\"let widget of widgets\"\n [x]=\"widget._x\"\n [y]=\"widget._y\"\n [width]=\"widget._width || settings.defaultWidth\"\n [height]=\"widget._height || settings.defaultHeight\"\n [margin]=\"settings.widgetMargin\"\n [isFrozen]=\"settings.isFrozen || settings.isDisabled\"\n [class]=\"widget.classes\"\n [data]=\"widget\"\n [useIntersection]=\"true\"\n (changeStart)=\"onChangeStart.emit({ widget: widget, source: child, dashboard: dashboard })\"\n (changeEnd)=\"onChangeEnd.emit({ widget: widget, source: child, dashboard: dashboard })\"\n #child\n >\n <c8y-dashboard-child-title>\n <span *ngIf=\"settings.translateWidgetTitle\"> {{ widget.title | translate }}</span>\n <span *ngIf=\"!settings.translateWidgetTitle\">\n {{ widget.title }}\n </span>\n </c8y-dashboard-child-title>\n <c8y-dashboard-child-action *ngIf=\"onEditWidget.observers.length\">\n <button (click)=\"onEditWidget.emit({ widget: widget, source: child, dashboard: dashboard })\">\n <i c8yIcon=\"pencil\"></i> <span translate>Edit</span>\n </button>\n </c8y-dashboard-child-action>\n <c8y-dashboard-child-action *ngIf=\"onDeleteWidget.observers.length\">\n <button\n (click)=\"onDeleteWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n >\n <i c8yIcon=\"trash\"></i> <span translate>Remove</span>\n </button>\n </c8y-dashboard-child-action>\n <c8y-dynamic-component\n [componentId]=\"widget.componentId || widget.name\"\n [config]=\"\n widget.templateUrl || widget.widgetComponent\n ? { child: widget, dashboard: contextDashboard, context: context }\n : widget.config\n \"\n *ngIf=\"child.intersected\"\n ></c8y-dynamic-component>\n </c8y-dashboard-child>\n</c8y-dashboard>\n",
|
|
15256
15522
|
host: {
|
|
15257
15523
|
style: "\n display: block;\n ",
|
|
15258
15524
|
class: 'dashboard c8y-grid-dashboard'
|
|
@@ -16364,97 +16630,100 @@
|
|
|
16364
16630
|
exports.ɵ0 = ɵ0;
|
|
16365
16631
|
exports.ɵa = ApplicationOptions;
|
|
16366
16632
|
exports.ɵb = translateLoaderFactory;
|
|
16367
|
-
exports.ɵba =
|
|
16368
|
-
exports.ɵbb =
|
|
16369
|
-
exports.ɵbc =
|
|
16370
|
-
exports.ɵbd =
|
|
16371
|
-
exports.ɵbe =
|
|
16372
|
-
exports.ɵbf =
|
|
16373
|
-
exports.ɵbg =
|
|
16374
|
-
exports.ɵbh =
|
|
16375
|
-
exports.ɵbi =
|
|
16376
|
-
exports.ɵbj =
|
|
16377
|
-
exports.ɵbk =
|
|
16378
|
-
exports.ɵbl =
|
|
16379
|
-
exports.ɵbm =
|
|
16380
|
-
exports.ɵbn =
|
|
16381
|
-
exports.ɵbo =
|
|
16382
|
-
exports.ɵbp =
|
|
16383
|
-
exports.ɵbq =
|
|
16384
|
-
exports.ɵbr =
|
|
16385
|
-
exports.ɵbs =
|
|
16386
|
-
exports.ɵbt =
|
|
16387
|
-
exports.ɵbu =
|
|
16388
|
-
exports.ɵbv =
|
|
16389
|
-
exports.ɵbw =
|
|
16390
|
-
exports.ɵbx =
|
|
16391
|
-
exports.ɵby =
|
|
16392
|
-
exports.ɵbz =
|
|
16633
|
+
exports.ɵba = ActionModule;
|
|
16634
|
+
exports.ɵbb = ActionOutletComponent;
|
|
16635
|
+
exports.ɵbc = ActionComponent;
|
|
16636
|
+
exports.ɵbd = AlertModule;
|
|
16637
|
+
exports.ɵbe = AlertOutletComponent;
|
|
16638
|
+
exports.ɵbf = AlertComponent;
|
|
16639
|
+
exports.ɵbg = AlertDetailsComponent;
|
|
16640
|
+
exports.ɵbh = AlertTextComponent;
|
|
16641
|
+
exports.ɵbi = BootstrapModule;
|
|
16642
|
+
exports.ɵbj = CookieBannerComponent;
|
|
16643
|
+
exports.ɵbk = TitleOutletComponent;
|
|
16644
|
+
exports.ɵbl = AppIconComponent;
|
|
16645
|
+
exports.ɵbm = AppSwitcherComponent;
|
|
16646
|
+
exports.ɵbn = RightDrawerComponent;
|
|
16647
|
+
exports.ɵbo = UserModule;
|
|
16648
|
+
exports.ɵbp = UserMenuOutletComponent;
|
|
16649
|
+
exports.ɵbq = UserEditComponent;
|
|
16650
|
+
exports.ɵbr = UserEditModalComponent;
|
|
16651
|
+
exports.ɵbs = UserMenuItemComponent;
|
|
16652
|
+
exports.ɵbt = UserTotpSetupComponent;
|
|
16653
|
+
exports.ɵbu = InputGroupListContainerDirective;
|
|
16654
|
+
exports.ɵbv = RequiredInputPlaceholderDirective;
|
|
16655
|
+
exports.ɵbw = IpRangeInputListComponent;
|
|
16656
|
+
exports.ɵbx = FilterInputComponent;
|
|
16657
|
+
exports.ɵby = ModalComponent;
|
|
16658
|
+
exports.ɵbz = SearchOutletComponent;
|
|
16393
16659
|
exports.ɵc = localePathFactory;
|
|
16394
|
-
exports.ɵca =
|
|
16395
|
-
exports.ɵcb =
|
|
16396
|
-
exports.ɵcc =
|
|
16397
|
-
exports.ɵcd =
|
|
16398
|
-
exports.ɵce =
|
|
16399
|
-
exports.ɵcf =
|
|
16400
|
-
exports.ɵcg =
|
|
16401
|
-
exports.ɵch =
|
|
16402
|
-
exports.ɵci =
|
|
16403
|
-
exports.ɵcj =
|
|
16404
|
-
exports.ɵck =
|
|
16405
|
-
exports.ɵcl =
|
|
16406
|
-
exports.ɵcm =
|
|
16407
|
-
exports.ɵcn =
|
|
16408
|
-
exports.ɵco =
|
|
16409
|
-
exports.ɵcp =
|
|
16410
|
-
exports.ɵcq =
|
|
16411
|
-
exports.ɵcr =
|
|
16412
|
-
exports.ɵcs =
|
|
16413
|
-
exports.ɵct =
|
|
16414
|
-
exports.ɵcu =
|
|
16415
|
-
exports.ɵcv =
|
|
16416
|
-
exports.ɵcw =
|
|
16417
|
-
exports.ɵcx =
|
|
16418
|
-
exports.ɵcy =
|
|
16419
|
-
exports.ɵcz =
|
|
16660
|
+
exports.ɵca = SearchComponent;
|
|
16661
|
+
exports.ɵcb = BreadcrumbModule;
|
|
16662
|
+
exports.ɵcc = BreadcrumbComponent;
|
|
16663
|
+
exports.ɵcd = BreadcrumbItemComponent;
|
|
16664
|
+
exports.ɵce = BreadcrumbOutletComponent;
|
|
16665
|
+
exports.ɵcf = NavigatorModule;
|
|
16666
|
+
exports.ɵcg = NavigatorOutletComponent;
|
|
16667
|
+
exports.ɵch = NavigatorNodeComponent;
|
|
16668
|
+
exports.ɵci = LoginModule;
|
|
16669
|
+
exports.ɵcj = LoginComponent;
|
|
16670
|
+
exports.ɵck = RecoverPasswordComponent;
|
|
16671
|
+
exports.ɵcl = ChangePasswordComponent;
|
|
16672
|
+
exports.ɵcm = CredentialsComponent;
|
|
16673
|
+
exports.ɵcn = TotpAuthComponent;
|
|
16674
|
+
exports.ɵco = PasswordStrengthValidatorDirective;
|
|
16675
|
+
exports.ɵcp = StrengthValidatorService;
|
|
16676
|
+
exports.ɵcq = TabsModule;
|
|
16677
|
+
exports.ɵcr = TabsOutletComponent;
|
|
16678
|
+
exports.ɵcs = TabComponent;
|
|
16679
|
+
exports.ɵct = CellRendererComponent;
|
|
16680
|
+
exports.ɵcu = FilteringFormRendererDefDirective;
|
|
16681
|
+
exports.ɵcv = FilteringFormRendererComponent;
|
|
16682
|
+
exports.ɵcw = ColumnDirective;
|
|
16683
|
+
exports.ɵcx = FilteringFormComponent;
|
|
16684
|
+
exports.ɵcy = StatusCellRendererComponent;
|
|
16685
|
+
exports.ɵcz = NameCellRendererComponent;
|
|
16420
16686
|
exports.ɵd = languagesFactory;
|
|
16421
|
-
exports.ɵda =
|
|
16422
|
-
exports.ɵdb =
|
|
16423
|
-
exports.ɵdc =
|
|
16424
|
-
exports.ɵdd =
|
|
16425
|
-
exports.ɵde =
|
|
16426
|
-
exports.ɵdf =
|
|
16427
|
-
exports.ɵdg =
|
|
16428
|
-
exports.ɵdh =
|
|
16429
|
-
exports.ɵdi =
|
|
16430
|
-
exports.ɵdj =
|
|
16431
|
-
exports.ɵdk =
|
|
16432
|
-
exports.ɵdl =
|
|
16433
|
-
exports.ɵ
|
|
16434
|
-
exports.ɵ
|
|
16435
|
-
exports.ɵ
|
|
16687
|
+
exports.ɵda = ModelCellRendererComponent;
|
|
16688
|
+
exports.ɵdb = SerialNumberCellRendererComponent;
|
|
16689
|
+
exports.ɵdc = GroupCellRendererComponent;
|
|
16690
|
+
exports.ɵdd = RegistrationDateCellRendererComponent;
|
|
16691
|
+
exports.ɵde = AlarmsCellRendererComponent;
|
|
16692
|
+
exports.ɵdf = ListItemComponent;
|
|
16693
|
+
exports.ɵdg = ListItemFooterComponent;
|
|
16694
|
+
exports.ɵdh = ListItemActionComponent;
|
|
16695
|
+
exports.ɵdi = ListItemCollapseComponent;
|
|
16696
|
+
exports.ɵdj = ListItemIconComponent;
|
|
16697
|
+
exports.ɵdk = ListItemBodyComponent;
|
|
16698
|
+
exports.ɵdl = ListItemCheckboxComponent;
|
|
16699
|
+
exports.ɵdm = ListItemRadioComponent;
|
|
16700
|
+
exports.ɵdn = C8yStepperIcon;
|
|
16701
|
+
exports.ɵdo = C8yStepperProgress;
|
|
16702
|
+
exports.ɵdq = RouterTabsResolver;
|
|
16703
|
+
exports.ɵdr = ContextRouteGuard;
|
|
16704
|
+
exports.ɵds = QuickLinkComponent;
|
|
16436
16705
|
exports.ɵe = localeId;
|
|
16437
16706
|
exports.ɵf = I18nModule;
|
|
16438
|
-
exports.ɵg =
|
|
16439
|
-
exports.ɵh =
|
|
16440
|
-
exports.ɵi =
|
|
16441
|
-
exports.ɵj =
|
|
16442
|
-
exports.ɵk =
|
|
16443
|
-
exports.ɵl =
|
|
16444
|
-
exports.ɵm =
|
|
16445
|
-
exports.ɵn =
|
|
16446
|
-
exports.ɵo =
|
|
16447
|
-
exports.ɵp =
|
|
16448
|
-
exports.ɵq =
|
|
16449
|
-
exports.ɵr =
|
|
16450
|
-
exports.ɵs =
|
|
16451
|
-
exports.ɵt =
|
|
16452
|
-
exports.ɵu =
|
|
16453
|
-
exports.ɵv =
|
|
16454
|
-
exports.ɵw =
|
|
16455
|
-
exports.ɵx =
|
|
16456
|
-
exports.ɵy =
|
|
16457
|
-
exports.ɵz =
|
|
16707
|
+
exports.ɵg = ForceHtmlTranslateDirective;
|
|
16708
|
+
exports.ɵh = MESSAGES;
|
|
16709
|
+
exports.ɵi = LOCALE_PATH;
|
|
16710
|
+
exports.ɵj = LANGUAGES;
|
|
16711
|
+
exports.ɵk = TranslateCustomLoader;
|
|
16712
|
+
exports.ɵl = TranslateParserCustom;
|
|
16713
|
+
exports.ɵm = MissingTranslationCustomHandler;
|
|
16714
|
+
exports.ɵn = PatternMessagesService;
|
|
16715
|
+
exports.ɵo = IconDirective;
|
|
16716
|
+
exports.ɵp = ICONS;
|
|
16717
|
+
exports.ɵq = OutletDirective;
|
|
16718
|
+
exports.ɵr = ShortenUserNamePipe;
|
|
16719
|
+
exports.ɵs = ForOfDirective;
|
|
16720
|
+
exports.ɵt = LoadMoreComponent;
|
|
16721
|
+
exports.ɵu = MapFunctionPipe;
|
|
16722
|
+
exports.ɵv = ProgressBarComponent;
|
|
16723
|
+
exports.ɵw = UserPreferencesService;
|
|
16724
|
+
exports.ɵx = ActionBarModule;
|
|
16725
|
+
exports.ɵy = ActionBarComponent;
|
|
16726
|
+
exports.ɵz = ActionBarItemComponent;
|
|
16458
16727
|
|
|
16459
16728
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
16460
16729
|
|