@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
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { __spread, __extends, __decorate, __read, __awaiter, __generator, __param, __assign } from 'tslib';
|
|
2
|
-
import { InjectionToken, Injector, ɵɵdefineInjectable, ɵɵinject, INJECTOR, Injectable, Optional, Inject, isDevMode, ViewContainerRef, Component, Pipe,
|
|
2
|
+
import { InjectionToken, Injector, ɵɵdefineInjectable, ɵɵinject, INJECTOR, Injectable, Optional, Inject, isDevMode, ViewContainerRef, Component, Pipe, EventEmitter, ElementRef, ChangeDetectorRef, Input, Directive, LOCALE_ID, NgModule, Renderer2, TemplateRef, ComponentFactoryResolver, Output, HostBinding, APP_INITIALIZER, ViewChild, Attribute, ContentChild, ContentChildren, SecurityContext, HostListener, NgZone, ViewChildren, Type, ChangeDetectionStrategy, forwardRef, Host } from '@angular/core';
|
|
3
3
|
import { NavigationEnd, Router, RouterModule as RouterModule$1, RouterLinkActive, PRIMARY_OUTLET, ActivatedRoute } from '@angular/router';
|
|
4
|
-
import { of, defer, combineLatest, isObservable, from, race, Subject, BehaviorSubject, pipe, EMPTY, timer, merge as merge$1, fromEvent, fromEventPattern, NEVER } from 'rxjs';
|
|
4
|
+
import { of, defer, combineLatest, isObservable, from, race, Subject, BehaviorSubject, pipe, EMPTY, timer, merge as merge$1, fromEvent, fromEventPattern, ReplaySubject, NEVER } from 'rxjs';
|
|
5
5
|
import { filter, merge, startWith, switchMap, map, distinctUntilChanged, shareReplay, scan, combineLatest as combineLatest$1, debounceTime, first, tap, catchError, take, debounce, finalize, takeUntil, mergeMap, expand, every, toArray } from 'rxjs/operators';
|
|
6
|
-
import { flatten, isFunction, sortBy, camelCase, isUndefined, keys, matches, upperFirst, each, mapValues, mapKeys, get as get$1, assign, filter as filter$1, clone, map as map$1, isEmpty as isEmpty$1, find as find$1, includes, orderBy, flow, isNil, pick, omitBy, chunk, union, without, parseInt as parseInt$1, remove, transform, identity, forEach, cloneDeep, some, findIndex } from 'lodash-es';
|
|
6
|
+
import { flatten, isFunction, sortBy, camelCase, isUndefined, keys, matches, upperFirst, each, mapValues, mapKeys, get as get$1, isEqual, assign, filter as filter$1, isString, clone, map as map$1, isEmpty as isEmpty$1, find as find$1, includes, orderBy, flow, isNil, pick, omitBy, chunk, union, without, parseInt as parseInt$1, remove, transform, identity, forEach, cloneDeep, some, findIndex } from 'lodash-es';
|
|
7
7
|
import { SystemOptionsService, TenantOptionsService, ApiService, DataModule } from '@c8y/ngx-components/api';
|
|
8
|
-
import { ApplicationService, FetchClient, OperationStatus, UserService, InventoryService, BasicAuth, CookieAuth, TenantService, Realtime, TenantLoginOptionsService, Client, PasswordStrength,
|
|
8
|
+
import { ApplicationService, FetchClient, OperationStatus, UserService, InventoryService, BasicAuth, CookieAuth, TenantService, Realtime, TenantLoginOptionsService, Client, PasswordStrength, QueriesUtil } from '@c8y/client';
|
|
9
9
|
import { TranslateService as TranslateService$1, TranslateParser, TranslateDefaultParser, TranslateLoader, TranslateCompiler, TranslateFakeCompiler, MissingTranslationHandler, TranslateStore, USE_STORE, USE_DEFAULT_LANG, USE_EXTEND, DEFAULT_LANGUAGE, TranslateModule } from '@ngx-translate/core';
|
|
10
10
|
import { get, find, negate, isUndefined as isUndefined$1, sortBy as sortBy$1, isEmpty } from 'lodash';
|
|
11
11
|
import { formatDate, registerLocaleData, CommonModule as CommonModule$1, LocationStrategy } from '@angular/common';
|
|
@@ -3376,7 +3376,7 @@ var MESSAGES = {
|
|
|
3376
3376
|
}
|
|
3377
3377
|
},
|
|
3378
3378
|
'^Error updating tenant! Cannot insert second configuration for Password code grant internal/Bad Request$': {
|
|
3379
|
-
gettext: gettext('This login mode was already set by
|
|
3379
|
+
gettext: gettext('This login mode was already set by another administrator. Refresh the page to update the data.')
|
|
3380
3380
|
},
|
|
3381
3381
|
};
|
|
3382
3382
|
|
|
@@ -3474,6 +3474,106 @@ var TranslateParserCustom = /** @class */ (function (_super) {
|
|
|
3474
3474
|
return TranslateParserCustom;
|
|
3475
3475
|
}(TranslateDefaultParser));
|
|
3476
3476
|
|
|
3477
|
+
/**
|
|
3478
|
+
* This is temporary fallback directive that is used to handle HTML blocks translation on maintenance versions
|
|
3479
|
+
* in version 10.9.4 and later, this is replaced by default translate directive.
|
|
3480
|
+
*/
|
|
3481
|
+
var ForceHtmlTranslateDirective = /** @class */ (function () {
|
|
3482
|
+
function ForceHtmlTranslateDirective(translateService, element, _ref) {
|
|
3483
|
+
var _this = this;
|
|
3484
|
+
this.translateService = translateService;
|
|
3485
|
+
this.element = element;
|
|
3486
|
+
this._ref = _ref;
|
|
3487
|
+
/**
|
|
3488
|
+
* Used to trigger events when html is replaced by directive.
|
|
3489
|
+
*/
|
|
3490
|
+
this.htmlUpdateEvent = new EventEmitter();
|
|
3491
|
+
// subscribe to onTranslationChange event, in case the translations of the current lang change
|
|
3492
|
+
if (!this.onTranslationChangeSub) {
|
|
3493
|
+
this.onTranslationChangeSub = this.translateService.onTranslationChange.subscribe(function (event) {
|
|
3494
|
+
if (event.lang === _this.translateService.currentLang) {
|
|
3495
|
+
_this.checkNodes();
|
|
3496
|
+
}
|
|
3497
|
+
});
|
|
3498
|
+
}
|
|
3499
|
+
// subscribe to onLangChange event, in case the language changes
|
|
3500
|
+
if (!this.onLangChangeSub) {
|
|
3501
|
+
this.onLangChangeSub = this.translateService.onLangChange.subscribe(function (event) {
|
|
3502
|
+
_this.checkNodes();
|
|
3503
|
+
});
|
|
3504
|
+
}
|
|
3505
|
+
// subscribe to onDefaultLangChange event, in case the default language changes
|
|
3506
|
+
if (!this.onDefaultLangChangeSub) {
|
|
3507
|
+
this.onDefaultLangChangeSub = this.translateService.onDefaultLangChange.subscribe(function (event) {
|
|
3508
|
+
_this.checkNodes();
|
|
3509
|
+
});
|
|
3510
|
+
}
|
|
3511
|
+
}
|
|
3512
|
+
Object.defineProperty(ForceHtmlTranslateDirective.prototype, "translateParams", {
|
|
3513
|
+
set: function (params) {
|
|
3514
|
+
if (!isEqual(this.currentParams, params)) {
|
|
3515
|
+
this.currentParams = params;
|
|
3516
|
+
this.checkNodes();
|
|
3517
|
+
}
|
|
3518
|
+
},
|
|
3519
|
+
enumerable: true,
|
|
3520
|
+
configurable: true
|
|
3521
|
+
});
|
|
3522
|
+
ForceHtmlTranslateDirective.prototype.ngAfterViewChecked = function () {
|
|
3523
|
+
this.checkNodes();
|
|
3524
|
+
};
|
|
3525
|
+
ForceHtmlTranslateDirective.prototype.checkNodes = function () {
|
|
3526
|
+
if (this.isLookupKeyMissing()) {
|
|
3527
|
+
this.element.nativeElement.lookupKey = this.getLookupKey();
|
|
3528
|
+
}
|
|
3529
|
+
this.translateAndUpdateHtmlContent();
|
|
3530
|
+
this.htmlUpdateEvent.emit();
|
|
3531
|
+
};
|
|
3532
|
+
ForceHtmlTranslateDirective.prototype.ngOnDestroy = function () {
|
|
3533
|
+
if (this.onLangChangeSub) {
|
|
3534
|
+
this.onLangChangeSub.unsubscribe();
|
|
3535
|
+
}
|
|
3536
|
+
if (this.onDefaultLangChangeSub) {
|
|
3537
|
+
this.onDefaultLangChangeSub.unsubscribe();
|
|
3538
|
+
}
|
|
3539
|
+
if (this.onTranslationChangeSub) {
|
|
3540
|
+
this.onTranslationChangeSub.unsubscribe();
|
|
3541
|
+
}
|
|
3542
|
+
this.htmlUpdateEvent.complete();
|
|
3543
|
+
};
|
|
3544
|
+
/**
|
|
3545
|
+
* Builds lookup key from innerHTML, removes comments (that might be added by Angular) and trims it.
|
|
3546
|
+
*/
|
|
3547
|
+
ForceHtmlTranslateDirective.prototype.getLookupKey = function () {
|
|
3548
|
+
return this.element.nativeElement.innerHTML.replace(/<!--.*?-->/gs, '').trim();
|
|
3549
|
+
};
|
|
3550
|
+
ForceHtmlTranslateDirective.prototype.isLookupKeyMissing = function () {
|
|
3551
|
+
return !this.element.nativeElement.lookupKey;
|
|
3552
|
+
};
|
|
3553
|
+
ForceHtmlTranslateDirective.prototype.lookupKeyExist = function () {
|
|
3554
|
+
return this.element.nativeElement.lookupKey;
|
|
3555
|
+
};
|
|
3556
|
+
ForceHtmlTranslateDirective.prototype.translateAndUpdateHtmlContent = function () {
|
|
3557
|
+
if (this.lookupKeyExist()) {
|
|
3558
|
+
this.element.nativeElement.innerHTML = this.translateService.instant(this.element.nativeElement.lookupKey, this.currentParams || {});
|
|
3559
|
+
}
|
|
3560
|
+
};
|
|
3561
|
+
ForceHtmlTranslateDirective.ctorParameters = function () { return [
|
|
3562
|
+
{ type: TranslateService$1 },
|
|
3563
|
+
{ type: ElementRef },
|
|
3564
|
+
{ type: ChangeDetectorRef }
|
|
3565
|
+
]; };
|
|
3566
|
+
__decorate([
|
|
3567
|
+
Input()
|
|
3568
|
+
], ForceHtmlTranslateDirective.prototype, "translateParams", null);
|
|
3569
|
+
ForceHtmlTranslateDirective = __decorate([
|
|
3570
|
+
Directive({
|
|
3571
|
+
selector: '[forceHtmlTranslate]'
|
|
3572
|
+
})
|
|
3573
|
+
], ForceHtmlTranslateDirective);
|
|
3574
|
+
return ForceHtmlTranslateDirective;
|
|
3575
|
+
}());
|
|
3576
|
+
|
|
3477
3577
|
// Load these as a side effect
|
|
3478
3578
|
try {
|
|
3479
3579
|
// tslint:disable:no-var-requires
|
|
@@ -3550,8 +3650,9 @@ var I18nModule = /** @class */ (function () {
|
|
|
3550
3650
|
var I18nModule_1;
|
|
3551
3651
|
I18nModule = I18nModule_1 = __decorate([
|
|
3552
3652
|
NgModule({
|
|
3553
|
-
exports: [TranslateModule],
|
|
3554
|
-
imports: [HttpClientModule]
|
|
3653
|
+
exports: [TranslateModule, ForceHtmlTranslateDirective],
|
|
3654
|
+
imports: [HttpClientModule],
|
|
3655
|
+
declarations: [ForceHtmlTranslateDirective]
|
|
3555
3656
|
})
|
|
3556
3657
|
], I18nModule);
|
|
3557
3658
|
return I18nModule;
|
|
@@ -6761,6 +6862,7 @@ var LoginService = /** @class */ (function () {
|
|
|
6761
6862
|
};
|
|
6762
6863
|
this.passwordStrengthSetting = {
|
|
6763
6864
|
enforcePasswordStrength: false,
|
|
6865
|
+
passwordStrengthValidity: false,
|
|
6764
6866
|
greenMinLength: this.GREEN_MIN_LENGTH_DEFAULT
|
|
6765
6867
|
};
|
|
6766
6868
|
this.localhostRegExp = new RegExp('localhost');
|
|
@@ -6855,14 +6957,50 @@ var LoginService = /** @class */ (function () {
|
|
|
6855
6957
|
return this.passwordStrengthSetting.greenMinLength;
|
|
6856
6958
|
};
|
|
6857
6959
|
/**
|
|
6858
|
-
* Checks if password strength is enforced
|
|
6859
|
-
*
|
|
6960
|
+
* Checks if password strength is enforced for system
|
|
6961
|
+
* by retrieving value of `enforceStrength` property from loginOptions response
|
|
6962
|
+
* @return boolean value, true if enforced, false otherwise.
|
|
6860
6963
|
*/
|
|
6861
6964
|
LoginService.prototype.getEnforcePasswordStrength = function () {
|
|
6862
6965
|
var loginOption = this.getLoginOption();
|
|
6863
|
-
|
|
6966
|
+
var enforcePasswordStrength = get$1(loginOption, 'enforceStrength');
|
|
6967
|
+
if (isString(enforcePasswordStrength)) {
|
|
6968
|
+
this.passwordStrengthSetting.enforcePasswordStrength = enforcePasswordStrength === 'true' ? true : false;
|
|
6969
|
+
}
|
|
6970
|
+
else {
|
|
6971
|
+
this.passwordStrengthSetting.enforcePasswordStrength = !!enforcePasswordStrength;
|
|
6972
|
+
}
|
|
6864
6973
|
return this.passwordStrengthSetting.enforcePasswordStrength;
|
|
6865
6974
|
};
|
|
6975
|
+
/**
|
|
6976
|
+
* Checks if password strength is enforced for particular tenant
|
|
6977
|
+
* by retrieving value of `strengthValidity` property from loginOptions response
|
|
6978
|
+
* @return boolean value, true if enforced, false otherwise.
|
|
6979
|
+
*/
|
|
6980
|
+
LoginService.prototype.getPasswordStrengthValidity = function () {
|
|
6981
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
6982
|
+
var loginOption, strengthValidity;
|
|
6983
|
+
return __generator(this, function (_a) {
|
|
6984
|
+
loginOption = this.getLoginOption();
|
|
6985
|
+
strengthValidity = get$1(loginOption, 'strengthValidity');
|
|
6986
|
+
if (isString(strengthValidity)) {
|
|
6987
|
+
this.passwordStrengthSetting.passwordStrengthValidity = strengthValidity === 'true' ? true : false;
|
|
6988
|
+
}
|
|
6989
|
+
else {
|
|
6990
|
+
this.passwordStrengthSetting.passwordStrengthValidity = !!strengthValidity;
|
|
6991
|
+
}
|
|
6992
|
+
return [2 /*return*/, this.passwordStrengthSetting.passwordStrengthValidity];
|
|
6993
|
+
});
|
|
6994
|
+
});
|
|
6995
|
+
};
|
|
6996
|
+
/**
|
|
6997
|
+
* Function determines if enforced strength checks should be enabled for current tenant
|
|
6998
|
+
* based on properties retrieved from loginOptions
|
|
6999
|
+
* @return boolean value, true if strength is enforced for tenant, false otherwise.
|
|
7000
|
+
*/
|
|
7001
|
+
LoginService.prototype.getPasswordStrengthEnforced = function () {
|
|
7002
|
+
return this.getEnforcePasswordStrength() || this.getPasswordStrengthValidity();
|
|
7003
|
+
};
|
|
6866
7004
|
/**
|
|
6867
7005
|
* Clears all backend errors.
|
|
6868
7006
|
*/
|
|
@@ -7474,7 +7612,7 @@ var UserTotpSetupComponent = /** @class */ (function () {
|
|
|
7474
7612
|
}());
|
|
7475
7613
|
|
|
7476
7614
|
var UserEditComponent = /** @class */ (function () {
|
|
7477
|
-
function UserEditComponent(state, translate, passwordService, modalConfirmService, bsModalService, alert, userService, tenantLoginOptionsService) {
|
|
7615
|
+
function UserEditComponent(state, translate, passwordService, modalConfirmService, bsModalService, alert, userService, tenantLoginOptionsService, tenantService) {
|
|
7478
7616
|
this.state = state;
|
|
7479
7617
|
this.translate = translate;
|
|
7480
7618
|
this.passwordService = passwordService;
|
|
@@ -7483,6 +7621,7 @@ var UserEditComponent = /** @class */ (function () {
|
|
|
7483
7621
|
this.alert = alert;
|
|
7484
7622
|
this.userService = userService;
|
|
7485
7623
|
this.tenantLoginOptionsService = tenantLoginOptionsService;
|
|
7624
|
+
this.tenantService = tenantService;
|
|
7486
7625
|
this.loading = false;
|
|
7487
7626
|
this.onUser = new EventEmitter();
|
|
7488
7627
|
this.onLanguage = new EventEmitter();
|
|
@@ -7501,11 +7640,19 @@ var UserEditComponent = /** @class */ (function () {
|
|
|
7501
7640
|
});
|
|
7502
7641
|
UserEditComponent.prototype.ngOnInit = function () {
|
|
7503
7642
|
return __awaiter(this, void 0, void 0, function () {
|
|
7504
|
-
|
|
7505
|
-
|
|
7506
|
-
|
|
7643
|
+
var currentTenant, _a, enabledOnSystemLevel, enabledOnTenantLevel;
|
|
7644
|
+
return __generator(this, function (_b) {
|
|
7645
|
+
switch (_b.label) {
|
|
7646
|
+
case 0: return [4 /*yield*/, this.tenantService.current()];
|
|
7507
7647
|
case 1:
|
|
7508
|
-
|
|
7648
|
+
currentTenant = (_b.sent()).data;
|
|
7649
|
+
return [4 /*yield*/, this.tenantService.getTfaSettings(currentTenant)];
|
|
7650
|
+
case 2:
|
|
7651
|
+
_a = _b.sent(), enabledOnSystemLevel = _a.enabledOnSystemLevel, enabledOnTenantLevel = _a.enabledOnTenantLevel;
|
|
7652
|
+
this.isTfaEnabled = enabledOnSystemLevel || enabledOnTenantLevel;
|
|
7653
|
+
return [4 /*yield*/, this.initializeTotpSettings()];
|
|
7654
|
+
case 3:
|
|
7655
|
+
_b.sent();
|
|
7509
7656
|
return [2 /*return*/];
|
|
7510
7657
|
}
|
|
7511
7658
|
});
|
|
@@ -7592,7 +7739,8 @@ var UserEditComponent = /** @class */ (function () {
|
|
|
7592
7739
|
{ type: BsModalService },
|
|
7593
7740
|
{ type: AlertService },
|
|
7594
7741
|
{ type: UserService },
|
|
7595
|
-
{ type: TenantLoginOptionsService }
|
|
7742
|
+
{ type: TenantLoginOptionsService },
|
|
7743
|
+
{ type: TenantService }
|
|
7596
7744
|
]; };
|
|
7597
7745
|
__decorate([
|
|
7598
7746
|
Input()
|
|
@@ -7615,7 +7763,7 @@ var UserEditComponent = /** @class */ (function () {
|
|
|
7615
7763
|
UserEditComponent = __decorate([
|
|
7616
7764
|
Component({
|
|
7617
7765
|
selector: 'c8y-user-edit',
|
|
7618
|
-
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"
|
|
7766
|
+
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"
|
|
7619
7767
|
})
|
|
7620
7768
|
], UserEditComponent);
|
|
7621
7769
|
return UserEditComponent;
|
|
@@ -8037,15 +8185,16 @@ var PasswordStrengthComponent = /** @class */ (function () {
|
|
|
8037
8185
|
}());
|
|
8038
8186
|
|
|
8039
8187
|
var NewPasswordComponent = /** @class */ (function () {
|
|
8040
|
-
function NewPasswordComponent(
|
|
8041
|
-
this.
|
|
8188
|
+
function NewPasswordComponent(loginService) {
|
|
8189
|
+
this.loginService = loginService;
|
|
8042
8190
|
this.password = new EventEmitter();
|
|
8043
8191
|
this.model = {};
|
|
8044
|
-
this.enforcePasswordStrength = false;
|
|
8045
8192
|
this.changePassword = false;
|
|
8193
|
+
this.passwordEnforced = false;
|
|
8046
8194
|
}
|
|
8047
8195
|
NewPasswordComponent.prototype.ngOnInit = function () {
|
|
8048
|
-
this.
|
|
8196
|
+
this.loadPasswordStrengthSettings();
|
|
8197
|
+
this.minlength = this.loginService.getGreenMinLength();
|
|
8049
8198
|
};
|
|
8050
8199
|
NewPasswordComponent.prototype.newPasswordChanged = function () {
|
|
8051
8200
|
this.password.emit({
|
|
@@ -8053,29 +8202,24 @@ var NewPasswordComponent = /** @class */ (function () {
|
|
|
8053
8202
|
passwordStrength: this.model.strength
|
|
8054
8203
|
});
|
|
8055
8204
|
};
|
|
8056
|
-
NewPasswordComponent.prototype.
|
|
8205
|
+
NewPasswordComponent.prototype.loadPasswordStrengthSettings = function () {
|
|
8057
8206
|
return __awaiter(this, void 0, void 0, function () {
|
|
8058
|
-
var
|
|
8059
|
-
return __generator(this, function (
|
|
8060
|
-
switch (
|
|
8207
|
+
var _a;
|
|
8208
|
+
return __generator(this, function (_b) {
|
|
8209
|
+
switch (_b.label) {
|
|
8061
8210
|
case 0:
|
|
8062
|
-
_a
|
|
8063
|
-
return [4 /*yield*/, this.
|
|
8064
|
-
category: 'password',
|
|
8065
|
-
key: 'enforce.strength'
|
|
8066
|
-
})];
|
|
8211
|
+
_a = this;
|
|
8212
|
+
return [4 /*yield*/, this.loginService.getEnforcePasswordStrength()];
|
|
8067
8213
|
case 1:
|
|
8068
|
-
|
|
8069
|
-
|
|
8070
|
-
return [3 /*break*/, 3];
|
|
8071
|
-
case 2:
|
|
8072
|
-
e_1 = _a.sent();
|
|
8073
|
-
return [3 /*break*/, 3];
|
|
8074
|
-
case 3: return [2 /*return*/];
|
|
8214
|
+
_a.passwordEnforced = _b.sent();
|
|
8215
|
+
return [2 /*return*/];
|
|
8075
8216
|
}
|
|
8076
8217
|
});
|
|
8077
8218
|
});
|
|
8078
8219
|
};
|
|
8220
|
+
NewPasswordComponent.prototype.showPasswordStrength = function () {
|
|
8221
|
+
return this.model.newPassword && this.model.newPassword.length >= this.minlength;
|
|
8222
|
+
};
|
|
8079
8223
|
NewPasswordComponent.prototype.toggleChangePassword = function () {
|
|
8080
8224
|
this.changePassword = !this.changePassword;
|
|
8081
8225
|
if (!this.changePassword) {
|
|
@@ -8084,7 +8228,7 @@ var NewPasswordComponent = /** @class */ (function () {
|
|
|
8084
8228
|
}
|
|
8085
8229
|
};
|
|
8086
8230
|
NewPasswordComponent.ctorParameters = function () { return [
|
|
8087
|
-
{ type:
|
|
8231
|
+
{ type: LoginService }
|
|
8088
8232
|
]; };
|
|
8089
8233
|
__decorate([
|
|
8090
8234
|
Output()
|
|
@@ -8092,7 +8236,7 @@ var NewPasswordComponent = /** @class */ (function () {
|
|
|
8092
8236
|
NewPasswordComponent = __decorate([
|
|
8093
8237
|
Component({
|
|
8094
8238
|
selector: 'c8y-new-password',
|
|
8095
|
-
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]=\"!
|
|
8239
|
+
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",
|
|
8096
8240
|
viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]
|
|
8097
8241
|
})
|
|
8098
8242
|
], NewPasswordComponent);
|
|
@@ -8154,6 +8298,7 @@ var ValidationPattern = /** @class */ (function () {
|
|
|
8154
8298
|
opcuaBrowsePath: gettext('Invalid OPC UA URI.'),
|
|
8155
8299
|
password: gettext('Password must have at least 8 characters and no more than 32 and can only contain letters, numbers and following symbols: `~!@#$%^&*()_|+-=?;:\'",.<>{}[]\\/'),
|
|
8156
8300
|
passwordConfirm: gettext('Passwords do not match.'),
|
|
8301
|
+
passwordStrength: gettext('Password not good enough, password must be stronger (green).'),
|
|
8157
8302
|
phoneNumber: gettext('Invalid phone number format. Only digits, spaces, slashes ("/") and dashes ("-") allowed.'),
|
|
8158
8303
|
required: gettext('This field is required.'),
|
|
8159
8304
|
tenantId: gettext('May contain lowercase letters, digits, hyphens and underscores. ' +
|
|
@@ -10243,9 +10388,9 @@ var ChangePasswordComponent = /** @class */ (function () {
|
|
|
10243
10388
|
tenantId: '',
|
|
10244
10389
|
email: '',
|
|
10245
10390
|
newPassword: '',
|
|
10246
|
-
newPasswordConfirm: ''
|
|
10391
|
+
newPasswordConfirm: '',
|
|
10392
|
+
passwordStrengthEnforced: false
|
|
10247
10393
|
};
|
|
10248
|
-
this.enforcePasswordStrength = false;
|
|
10249
10394
|
this.emailReadOnly = false;
|
|
10250
10395
|
this.TOKEN_PARAM = 'token';
|
|
10251
10396
|
this.EMAIL_PARAM = 'email';
|
|
@@ -10256,7 +10401,7 @@ var ChangePasswordComponent = /** @class */ (function () {
|
|
|
10256
10401
|
this.model.tenantId = this.loginService.getTenant();
|
|
10257
10402
|
this.model.email = this.options.get(this.EMAIL_PARAM, '');
|
|
10258
10403
|
this.emailReadOnly = !!this.model.email;
|
|
10259
|
-
this.
|
|
10404
|
+
this.model.passwordStrengthEnforced = this.loginService.getEnforcePasswordStrength();
|
|
10260
10405
|
return [2 /*return*/];
|
|
10261
10406
|
});
|
|
10262
10407
|
});
|
|
@@ -10317,7 +10462,7 @@ var ChangePasswordComponent = /** @class */ (function () {
|
|
|
10317
10462
|
ChangePasswordComponent = __decorate([
|
|
10318
10463
|
Component({
|
|
10319
10464
|
selector: 'c8y-change-password',
|
|
10320
|
-
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
|
|
10465
|
+
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"
|
|
10321
10466
|
})
|
|
10322
10467
|
], ChangePasswordComponent);
|
|
10323
10468
|
return ChangePasswordComponent;
|
|
@@ -10418,7 +10563,7 @@ var CredentialsComponent = /** @class */ (function () {
|
|
|
10418
10563
|
};
|
|
10419
10564
|
CredentialsComponent.prototype.handleNoPhoneNumberProvided = function () {
|
|
10420
10565
|
this.onChangeView.emit({ view: LoginViews.ProvidePhoneNumber, credentials: this.model });
|
|
10421
|
-
this.alert.warning(gettext('Two-factor authentication has been turned on for this account.
|
|
10566
|
+
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.'));
|
|
10422
10567
|
};
|
|
10423
10568
|
CredentialsComponent.ctorParameters = function () { return [
|
|
10424
10569
|
{ type: LoginService },
|
|
@@ -10703,6 +10848,61 @@ var TotpAuthComponent = /** @class */ (function () {
|
|
|
10703
10848
|
return TotpAuthComponent;
|
|
10704
10849
|
}());
|
|
10705
10850
|
|
|
10851
|
+
var StrengthValidatorService = /** @class */ (function () {
|
|
10852
|
+
function StrengthValidatorService(passwordService) {
|
|
10853
|
+
this.passwordService = passwordService;
|
|
10854
|
+
}
|
|
10855
|
+
StrengthValidatorService.prototype.isStrong = function (password) {
|
|
10856
|
+
return this.isPasswordGreen(this.passwordService.getStrengthColor(password).passwordStrength);
|
|
10857
|
+
};
|
|
10858
|
+
StrengthValidatorService.prototype.isPasswordGreen = function (strength) {
|
|
10859
|
+
return strength === PasswordStrength.GREEN;
|
|
10860
|
+
};
|
|
10861
|
+
StrengthValidatorService.ctorParameters = function () { return [
|
|
10862
|
+
{ type: PasswordService }
|
|
10863
|
+
]; };
|
|
10864
|
+
StrengthValidatorService.ngInjectableDef = ɵɵdefineInjectable({ factory: function StrengthValidatorService_Factory() { return new StrengthValidatorService(ɵɵinject(PasswordService)); }, token: StrengthValidatorService, providedIn: "root" });
|
|
10865
|
+
StrengthValidatorService = __decorate([
|
|
10866
|
+
Injectable({
|
|
10867
|
+
providedIn: 'root'
|
|
10868
|
+
})
|
|
10869
|
+
], StrengthValidatorService);
|
|
10870
|
+
return StrengthValidatorService;
|
|
10871
|
+
}());
|
|
10872
|
+
|
|
10873
|
+
var PasswordStrengthValidatorDirective = /** @class */ (function () {
|
|
10874
|
+
function PasswordStrengthValidatorDirective(passwordService) {
|
|
10875
|
+
this.passwordService = passwordService;
|
|
10876
|
+
}
|
|
10877
|
+
PasswordStrengthValidatorDirective_1 = PasswordStrengthValidatorDirective;
|
|
10878
|
+
Object.defineProperty(PasswordStrengthValidatorDirective.prototype, "passwordStrengthEnforced", {
|
|
10879
|
+
set: function (value) {
|
|
10880
|
+
this.forced = value;
|
|
10881
|
+
},
|
|
10882
|
+
enumerable: true,
|
|
10883
|
+
configurable: true
|
|
10884
|
+
});
|
|
10885
|
+
PasswordStrengthValidatorDirective.prototype.validate = function (control) {
|
|
10886
|
+
var strengthFulfilled = this.passwordService.isStrong(control.value || '');
|
|
10887
|
+
var enforcementForcedAndNotFulfilled = this.forced && !strengthFulfilled;
|
|
10888
|
+
return enforcementForcedAndNotFulfilled ? { passwordStrength: true } : null;
|
|
10889
|
+
};
|
|
10890
|
+
var PasswordStrengthValidatorDirective_1;
|
|
10891
|
+
PasswordStrengthValidatorDirective.ctorParameters = function () { return [
|
|
10892
|
+
{ type: StrengthValidatorService }
|
|
10893
|
+
]; };
|
|
10894
|
+
__decorate([
|
|
10895
|
+
Input()
|
|
10896
|
+
], PasswordStrengthValidatorDirective.prototype, "passwordStrengthEnforced", null);
|
|
10897
|
+
PasswordStrengthValidatorDirective = PasswordStrengthValidatorDirective_1 = __decorate([
|
|
10898
|
+
Directive({
|
|
10899
|
+
selector: '[passwordStrengthEnforced]',
|
|
10900
|
+
providers: [{ provide: NG_VALIDATORS, useExisting: PasswordStrengthValidatorDirective_1, multi: true }]
|
|
10901
|
+
})
|
|
10902
|
+
], PasswordStrengthValidatorDirective);
|
|
10903
|
+
return PasswordStrengthValidatorDirective;
|
|
10904
|
+
}());
|
|
10905
|
+
|
|
10706
10906
|
/**
|
|
10707
10907
|
* The angular module definition for the login.
|
|
10708
10908
|
* @exports LoginComponent
|
|
@@ -10728,7 +10928,8 @@ var LoginModule = /** @class */ (function () {
|
|
|
10728
10928
|
RecoverPasswordComponent,
|
|
10729
10929
|
ChangePasswordComponent,
|
|
10730
10930
|
CredentialsComponent,
|
|
10731
|
-
TotpAuthComponent
|
|
10931
|
+
TotpAuthComponent,
|
|
10932
|
+
PasswordStrengthValidatorDirective
|
|
10732
10933
|
],
|
|
10733
10934
|
imports: [
|
|
10734
10935
|
FormsModule$1,
|
|
@@ -14060,24 +14261,89 @@ var GuideHrefDirective = /** @class */ (function () {
|
|
|
14060
14261
|
}());
|
|
14061
14262
|
|
|
14062
14263
|
var GuideDocsComponent = /** @class */ (function () {
|
|
14063
|
-
function GuideDocsComponent(docs) {
|
|
14264
|
+
function GuideDocsComponent(docs, el, renderer) {
|
|
14064
14265
|
this.docs = docs;
|
|
14266
|
+
this.el = el;
|
|
14267
|
+
this.renderer = renderer;
|
|
14268
|
+
this.destroyed$ = new ReplaySubject(1);
|
|
14065
14269
|
}
|
|
14066
14270
|
GuideDocsComponent.prototype.ngOnInit = function () {
|
|
14067
14271
|
this.baseUrl = this.docs.getBaseUrl();
|
|
14068
14272
|
};
|
|
14273
|
+
/**
|
|
14274
|
+
* After content is initialized we subscribe for translation events, then we are able to modify
|
|
14275
|
+
* anchor just as C8yGuideHrefDirective does.
|
|
14276
|
+
*/
|
|
14277
|
+
GuideDocsComponent.prototype.ngAfterContentInit = function () {
|
|
14278
|
+
var _this = this;
|
|
14279
|
+
if (this.translateDirective) {
|
|
14280
|
+
this.translateDirective.htmlUpdateEvent
|
|
14281
|
+
.pipe(takeUntil(this.destroyed$))
|
|
14282
|
+
.subscribe(function () {
|
|
14283
|
+
_this.replaceAnchorAttributes();
|
|
14284
|
+
});
|
|
14285
|
+
}
|
|
14286
|
+
else {
|
|
14287
|
+
this.replaceAnchorAttributes();
|
|
14288
|
+
}
|
|
14289
|
+
};
|
|
14290
|
+
/**
|
|
14291
|
+
* Find and modify anchor elements
|
|
14292
|
+
*/
|
|
14293
|
+
GuideDocsComponent.prototype.replaceAnchorAttributes = function () {
|
|
14294
|
+
var _this = this;
|
|
14295
|
+
var anchors = this.findGuideAnchors(this.el.nativeElement);
|
|
14296
|
+
anchors.forEach(function (a) {
|
|
14297
|
+
var guideHref = _this.baseUrl + "/" + a.getAttribute('c8y-guide-href');
|
|
14298
|
+
_this.renderer.setAttribute(a, 'href', guideHref);
|
|
14299
|
+
if (!a.hasAttribute('target')) {
|
|
14300
|
+
_this.renderer.setAttribute(a, 'target', '_blank');
|
|
14301
|
+
}
|
|
14302
|
+
});
|
|
14303
|
+
};
|
|
14304
|
+
/**
|
|
14305
|
+
* Recursive function, returns array of Anchor elements inside HTMLElement.
|
|
14306
|
+
*/
|
|
14307
|
+
GuideDocsComponent.prototype.findGuideAnchors = function (el) {
|
|
14308
|
+
var _this = this;
|
|
14309
|
+
var isAnchor = function () { return el.nodeName === 'A'; };
|
|
14310
|
+
var hasGuideHrefAttr = function () { return !!el.attributes.getNamedItem('c8y-guide-href'); };
|
|
14311
|
+
var hasChildren = function () { return el.childNodes && el.childNodes.length > 0; };
|
|
14312
|
+
var result = [];
|
|
14313
|
+
if (isAnchor() && hasGuideHrefAttr()) {
|
|
14314
|
+
result.push(el);
|
|
14315
|
+
}
|
|
14316
|
+
else if (hasChildren()) {
|
|
14317
|
+
el.childNodes.forEach(function (node) {
|
|
14318
|
+
var searchResult = _this.findGuideAnchors(node);
|
|
14319
|
+
if (searchResult) {
|
|
14320
|
+
result = __spread(result, searchResult);
|
|
14321
|
+
}
|
|
14322
|
+
});
|
|
14323
|
+
}
|
|
14324
|
+
return result;
|
|
14325
|
+
};
|
|
14069
14326
|
GuideDocsComponent.prototype.ngAfterViewInit = function () {
|
|
14070
14327
|
var _this = this;
|
|
14071
14328
|
this.links.forEach(function (guide) {
|
|
14072
14329
|
guide.baseHref = _this.baseUrl;
|
|
14073
14330
|
});
|
|
14074
14331
|
};
|
|
14332
|
+
GuideDocsComponent.prototype.ngOnDestroy = function () {
|
|
14333
|
+
this.destroyed$.next(true);
|
|
14334
|
+
this.destroyed$.complete();
|
|
14335
|
+
};
|
|
14075
14336
|
GuideDocsComponent.ctorParameters = function () { return [
|
|
14076
|
-
{ type: DocsService }
|
|
14337
|
+
{ type: DocsService },
|
|
14338
|
+
{ type: ElementRef },
|
|
14339
|
+
{ type: Renderer2 }
|
|
14077
14340
|
]; };
|
|
14078
14341
|
__decorate([
|
|
14079
14342
|
ContentChildren(GuideHrefDirective, { descendants: true })
|
|
14080
14343
|
], GuideDocsComponent.prototype, "links", void 0);
|
|
14344
|
+
__decorate([
|
|
14345
|
+
ContentChild(ForceHtmlTranslateDirective, { static: false })
|
|
14346
|
+
], GuideDocsComponent.prototype, "translateDirective", void 0);
|
|
14081
14347
|
GuideDocsComponent = __decorate([
|
|
14082
14348
|
Component({
|
|
14083
14349
|
selector: '[c8y-guide-docs]',
|
|
@@ -15075,7 +15341,7 @@ var WidgetsDashboardComponent = /** @class */ (function () {
|
|
|
15075
15341
|
WidgetsDashboardComponent = __decorate([
|
|
15076
15342
|
Component({
|
|
15077
15343
|
selector: 'c8y-widgets-dashboard',
|
|
15078
|
-
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
|
|
15344
|
+
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",
|
|
15079
15345
|
host: {
|
|
15080
15346
|
style: "\n display: block;\n ",
|
|
15081
15347
|
class: 'dashboard c8y-grid-dashboard'
|
|
@@ -16050,5 +16316,5 @@ var CustomDeviceGridColumn = /** @class */ (function (_super) {
|
|
|
16050
16316
|
* Generated bundle index. Do not edit.
|
|
16051
16317
|
*/
|
|
16052
16318
|
|
|
16053
|
-
export { ActionBarService, ActionService, AlarmsDeviceGridColumn, AlertService, AppStateService, AuthenticationModule, BaseDeviceGridColumn, BootstrapComponent, BreadcrumbService, C8yStepper, C8yStepperButtons, CachedLocaleDictionaryService, CellRendererContext, CellRendererDefDirective, CommonModule, ConfirmModalComponent, ContextRouteComponent, CoreModule, CustomDeviceGridColumn, DashboardChildActionComponent, DashboardChildChange, DashboardChildComponent, DashboardChildTitleComponent, DashboardComponent, DashboardModule, DataGridComponent, DataGridModule, DefaultValidationDirective, DeviceGridComponent, DeviceGridModule, DeviceGridService, DeviceStatusComponent, DeviceStatusModule, DocsModule, DocsService, DropAreaComponent, DropAreaModule, DynamicComponentComponent, DynamicComponentModule, DynamicComponentService, EmptyComponent, FilteringActionType, FormGroupComponent, FormsModule, GroupDeviceGridColumn, GuideDocsComponent, GuideHrefDirective, HOOK_ACTION, HOOK_ACTION_BAR, HOOK_BREADCRUMB, HOOK_COMPONENT, HOOK_COMPONENTS, HOOK_DOCS, HOOK_NAVIGATOR_NODES, HOOK_ONCE_ROUTE, HOOK_OPTIONS, HOOK_PATTERN_MESSAGES, HOOK_SEARCH, HOOK_TABS, HeaderBarComponent, HeaderCellRendererDefDirective, HeaderModule, HeaderService, HighlightComponent, HumanizeAppNamePipe, HumanizePipe, ICON_LIST, ImeiDeviceGridColumn, InputGroupListComponent, JsonValidationPrettifierDirective, ListGroupComponent, ListGroupModule, LoginService, LoginViews, MaxValidationDirective, MessageDirective, MessagesComponent, MinValidationDirective, ModalModule, ModalService, ModelDeviceGridColumn, NameDeviceGridColumn, NavigatorIconComponent, NavigatorItemComponent, NavigatorNode, NavigatorNodeRoot, NavigatorService, NewPasswordComponent, OptionsService, PasswordCheckListComponent, PasswordConfirm, PasswordConfirmModalComponent, PasswordService, PasswordStrengthCheckerService, PasswordStrengthComponent, Permissions, PhoneValidationDirective, PopoverConfirmComponent, ProvidePhoneNumberComponent, PushStatusLabels, QuickLinkModule, RegistrationDateDeviceGridColumn, RouterModule, RouterService, SchemaFormComponent, SearchModule, SearchService, SelectComponent, SelectModule, SendStatusLabels, SerialNumberDeviceGridColumn, SmsChallengeComponent, StateService, Status, StatusDeviceGridColumn, StepperModule, SystemIdDeviceGridColumn, TabsService, TextAreaRowHeightDirective, TitleComponent, TotpChallengeComponent, TotpSetupComponent, TranslateService, TypeaheadComponent, UserMenuService, UserTotpRevokeComponent, ValidationPattern, ViewContext, WidgetsDashboardComponent, _, deviceAvailabilityIconMap, fromFactories, fromTrigger, getActivatedRoute, gettext, initializeServices, minColumnGridTrackSize, operationStatusClasses, operationStatusIcons, ratiosByColumnTypes, resolveInjectedFactories, routes, sortByPriority, stateToFactory, statusAlert, statusClasses, statusIcons, tooltips, ɵ0, ApplicationOptions as ɵa, translateLoaderFactory as ɵb,
|
|
16319
|
+
export { ActionBarService, ActionService, AlarmsDeviceGridColumn, AlertService, AppStateService, AuthenticationModule, BaseDeviceGridColumn, BootstrapComponent, BreadcrumbService, C8yStepper, C8yStepperButtons, CachedLocaleDictionaryService, CellRendererContext, CellRendererDefDirective, CommonModule, ConfirmModalComponent, ContextRouteComponent, CoreModule, CustomDeviceGridColumn, DashboardChildActionComponent, DashboardChildChange, DashboardChildComponent, DashboardChildTitleComponent, DashboardComponent, DashboardModule, DataGridComponent, DataGridModule, DefaultValidationDirective, DeviceGridComponent, DeviceGridModule, DeviceGridService, DeviceStatusComponent, DeviceStatusModule, DocsModule, DocsService, DropAreaComponent, DropAreaModule, DynamicComponentComponent, DynamicComponentModule, DynamicComponentService, EmptyComponent, FilteringActionType, FormGroupComponent, FormsModule, GroupDeviceGridColumn, GuideDocsComponent, GuideHrefDirective, HOOK_ACTION, HOOK_ACTION_BAR, HOOK_BREADCRUMB, HOOK_COMPONENT, HOOK_COMPONENTS, HOOK_DOCS, HOOK_NAVIGATOR_NODES, HOOK_ONCE_ROUTE, HOOK_OPTIONS, HOOK_PATTERN_MESSAGES, HOOK_SEARCH, HOOK_TABS, HeaderBarComponent, HeaderCellRendererDefDirective, HeaderModule, HeaderService, HighlightComponent, HumanizeAppNamePipe, HumanizePipe, ICON_LIST, ImeiDeviceGridColumn, InputGroupListComponent, JsonValidationPrettifierDirective, ListGroupComponent, ListGroupModule, LoginService, LoginViews, MaxValidationDirective, MessageDirective, MessagesComponent, MinValidationDirective, ModalModule, ModalService, ModelDeviceGridColumn, NameDeviceGridColumn, NavigatorIconComponent, NavigatorItemComponent, NavigatorNode, NavigatorNodeRoot, NavigatorService, NewPasswordComponent, OptionsService, PasswordCheckListComponent, PasswordConfirm, PasswordConfirmModalComponent, PasswordService, PasswordStrengthCheckerService, PasswordStrengthComponent, Permissions, PhoneValidationDirective, PopoverConfirmComponent, ProvidePhoneNumberComponent, PushStatusLabels, QuickLinkModule, RegistrationDateDeviceGridColumn, RouterModule, RouterService, SchemaFormComponent, SearchModule, SearchService, SelectComponent, SelectModule, SendStatusLabels, SerialNumberDeviceGridColumn, SmsChallengeComponent, StateService, Status, StatusDeviceGridColumn, StepperModule, SystemIdDeviceGridColumn, TabsService, TextAreaRowHeightDirective, TitleComponent, TotpChallengeComponent, TotpSetupComponent, TranslateService, TypeaheadComponent, UserMenuService, UserTotpRevokeComponent, ValidationPattern, ViewContext, WidgetsDashboardComponent, _, deviceAvailabilityIconMap, fromFactories, fromTrigger, getActivatedRoute, gettext, initializeServices, minColumnGridTrackSize, operationStatusClasses, operationStatusIcons, ratiosByColumnTypes, resolveInjectedFactories, routes, sortByPriority, stateToFactory, statusAlert, statusClasses, statusIcons, tooltips, ɵ0, ApplicationOptions as ɵa, translateLoaderFactory as ɵb, ActionModule as ɵba, ActionOutletComponent as ɵbb, ActionComponent as ɵbc, AlertModule as ɵbd, AlertOutletComponent as ɵbe, AlertComponent as ɵbf, AlertDetailsComponent as ɵbg, AlertTextComponent as ɵbh, BootstrapModule as ɵbi, CookieBannerComponent as ɵbj, TitleOutletComponent as ɵbk, AppIconComponent as ɵbl, AppSwitcherComponent as ɵbm, RightDrawerComponent as ɵbn, UserModule as ɵbo, UserMenuOutletComponent as ɵbp, UserEditComponent as ɵbq, UserEditModalComponent as ɵbr, UserMenuItemComponent as ɵbs, UserTotpSetupComponent as ɵbt, InputGroupListContainerDirective as ɵbu, RequiredInputPlaceholderDirective as ɵbv, IpRangeInputListComponent as ɵbw, FilterInputComponent as ɵbx, ModalComponent as ɵby, SearchOutletComponent as ɵbz, localePathFactory as ɵc, SearchComponent as ɵca, BreadcrumbModule as ɵcb, BreadcrumbComponent as ɵcc, BreadcrumbItemComponent as ɵcd, BreadcrumbOutletComponent as ɵce, NavigatorModule as ɵcf, NavigatorOutletComponent as ɵcg, NavigatorNodeComponent as ɵch, LoginModule as ɵci, LoginComponent as ɵcj, RecoverPasswordComponent as ɵck, ChangePasswordComponent as ɵcl, CredentialsComponent as ɵcm, TotpAuthComponent as ɵcn, PasswordStrengthValidatorDirective as ɵco, StrengthValidatorService as ɵcp, TabsModule as ɵcq, TabsOutletComponent as ɵcr, TabComponent as ɵcs, CellRendererComponent as ɵct, FilteringFormRendererDefDirective as ɵcu, FilteringFormRendererComponent as ɵcv, ColumnDirective as ɵcw, FilteringFormComponent as ɵcx, StatusCellRendererComponent as ɵcy, NameCellRendererComponent as ɵcz, languagesFactory as ɵd, ModelCellRendererComponent as ɵda, SerialNumberCellRendererComponent as ɵdb, GroupCellRendererComponent as ɵdc, RegistrationDateCellRendererComponent as ɵdd, AlarmsCellRendererComponent as ɵde, ListItemComponent as ɵdf, ListItemFooterComponent as ɵdg, ListItemActionComponent as ɵdh, ListItemCollapseComponent as ɵdi, ListItemIconComponent as ɵdj, ListItemBodyComponent as ɵdk, ListItemCheckboxComponent as ɵdl, ListItemRadioComponent as ɵdm, C8yStepperIcon as ɵdn, C8yStepperProgress as ɵdo, RouterTabsResolver as ɵdq, ContextRouteGuard as ɵdr, QuickLinkComponent as ɵds, localeId as ɵe, I18nModule as ɵf, ForceHtmlTranslateDirective as ɵg, MESSAGES as ɵh, LOCALE_PATH as ɵi, LANGUAGES as ɵj, TranslateCustomLoader as ɵk, TranslateParserCustom as ɵl, MissingTranslationCustomHandler as ɵm, PatternMessagesService as ɵn, IconDirective as ɵo, ICONS as ɵp, OutletDirective as ɵq, ShortenUserNamePipe as ɵr, ForOfDirective as ɵs, LoadMoreComponent as ɵt, MapFunctionPipe as ɵu, ProgressBarComponent as ɵv, UserPreferencesService as ɵw, ActionBarModule as ɵx, ActionBarComponent as ɵy, ActionBarItemComponent as ɵz };
|
|
16054
16320
|
//# sourceMappingURL=c8y-ngx-components.js.map
|