@c8y/ngx-components 1021.6.0 → 1021.7.0
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/branding/shared/lazy/add-branding-modal/add-branding-modal.component.d.ts +14 -1
- package/branding/shared/lazy/add-branding-modal/add-branding-modal.component.d.ts.map +1 -1
- package/esm2022/branding/shared/lazy/add-branding-modal/add-branding-modal.component.mjs +49 -5
- package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs +48 -4
- package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs.map +1 -1
- package/locales/de.po +18 -18
- package/locales/es.po +164 -170
- package/locales/fr.po +131 -128
- package/locales/ja_JP.po +168 -133
- package/locales/ko.po +543 -49
- package/locales/locales.pot +11 -2
- package/locales/nl.po +131 -128
- package/locales/pl.po +135 -135
- package/locales/pt_BR.po +141 -141
- package/locales/zh_CN.po +524 -30
- package/locales/zh_TW.po +524 -30
- package/package.json +1 -1
|
@@ -11,7 +11,19 @@ export declare class AddBrandingModalComponent {
|
|
|
11
11
|
result: Promise<Partial<{
|
|
12
12
|
brandingName: string;
|
|
13
13
|
}>>;
|
|
14
|
-
|
|
14
|
+
messages: readonly [{
|
|
15
|
+
readonly name: "nameAlreadyTaken";
|
|
16
|
+
readonly text: "The provided name is already taken.";
|
|
17
|
+
}, {
|
|
18
|
+
readonly name: "onlyLowerCaseCharacters";
|
|
19
|
+
readonly text: "Only lower case characters are allowed.";
|
|
20
|
+
}, {
|
|
21
|
+
readonly name: "shouldStartWithLowerCaseLetterOrNumber";
|
|
22
|
+
readonly text: "Should start with a lower case letter or a number.";
|
|
23
|
+
}, {
|
|
24
|
+
readonly name: "invalidCharacters";
|
|
25
|
+
readonly text: "Invalid character \"{{ invalidCharacter }}\". Only a-z, 0-9 and - are allowed.";
|
|
26
|
+
}];
|
|
15
27
|
private _resovle;
|
|
16
28
|
private _reject;
|
|
17
29
|
constructor(branding: StoreBrandingService, formBuilder: FormBuilder);
|
|
@@ -22,6 +34,7 @@ export declare class AddBrandingModalComponent {
|
|
|
22
34
|
cancel(): void;
|
|
23
35
|
save(): void;
|
|
24
36
|
private ensureNotExistingName;
|
|
37
|
+
private ensureProperVariantName;
|
|
25
38
|
static ɵfac: i0.ɵɵFactoryDeclaration<AddBrandingModalComponent, never>;
|
|
26
39
|
static ɵcmp: i0.ɵɵComponentDeclaration<AddBrandingModalComponent, "c8y-add-branding-modal", never, { "duplicateBranding": { "alias": "duplicateBranding"; "required": false; }; }, {}, never, never, true, never>;
|
|
27
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-branding-modal.component.d.ts","sourceRoot":"","sources":["../../../../../branding/shared/lazy/add-branding-modal/add-branding-modal.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAEL,WAAW,EAIZ,MAAM,gBAAgB,CAAC;;AAIxB,qBAMa,yBAAyB;
|
|
1
|
+
{"version":3,"file":"add-branding-modal.component.d.ts","sourceRoot":"","sources":["../../../../../branding/shared/lazy/add-branding-modal/add-branding-modal.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAEL,WAAW,EAIZ,MAAM,gBAAgB,CAAC;;AAIxB,qBAMa,yBAAyB;IAkClC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,WAAW;IAlCZ,iBAAiB,UAAS;IACnC,IAAI,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,OAAO,UAAQ;IAEf,MAAM;;QAGH;IAEH,QAAQ;;;;;;;;;;;;OAiBG;IAEX,OAAO,CAAC,QAAQ,CAA6D;IAC7E,OAAO,CAAC,OAAO,CAAyB;gBAG9B,QAAQ,EAAE,oBAAoB,EAC9B,WAAW,EAAE,WAAW;IAM5B,2BAA2B;IAUjC,QAAQ;;;IASR,MAAM;IAIN,IAAI;IAIJ,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,uBAAuB;yCAnFpB,yBAAyB;2CAAzB,yBAAyB;CA8GrC"}
|
|
@@ -7,6 +7,7 @@ import * as i0 from "@angular/core";
|
|
|
7
7
|
import * as i1 from "@c8y/ngx-components/branding/shared/data";
|
|
8
8
|
import * as i2 from "@angular/forms";
|
|
9
9
|
import * as i3 from "@c8y/ngx-components";
|
|
10
|
+
import * as i4 from "@angular/common";
|
|
10
11
|
export class AddBrandingModalComponent {
|
|
11
12
|
constructor(branding, formBuilder) {
|
|
12
13
|
this.branding = branding;
|
|
@@ -18,7 +19,24 @@ export class AddBrandingModalComponent {
|
|
|
18
19
|
this._resovle = resolve;
|
|
19
20
|
this._reject = reject;
|
|
20
21
|
});
|
|
21
|
-
this.
|
|
22
|
+
this.messages = [
|
|
23
|
+
{
|
|
24
|
+
name: 'nameAlreadyTaken',
|
|
25
|
+
text: gettext('The provided name is already taken.')
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'onlyLowerCaseCharacters',
|
|
29
|
+
text: gettext('Only lower case characters are allowed.')
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'shouldStartWithLowerCaseLetterOrNumber',
|
|
33
|
+
text: gettext('Should start with a lower case letter or a number.')
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'invalidCharacters',
|
|
37
|
+
text: gettext('Invalid character "{{ invalidCharacter }}". Only a-z, 0-9 and - are allowed.')
|
|
38
|
+
}
|
|
39
|
+
];
|
|
22
40
|
this.form = this.initForm();
|
|
23
41
|
this.getExistingBrandingVersions();
|
|
24
42
|
}
|
|
@@ -36,7 +54,7 @@ export class AddBrandingModalComponent {
|
|
|
36
54
|
return this.formBuilder.group({
|
|
37
55
|
brandingName: [
|
|
38
56
|
'',
|
|
39
|
-
[Validators.required,
|
|
57
|
+
[Validators.required, this.ensureProperVariantName(), this.ensureNotExistingName()]
|
|
40
58
|
]
|
|
41
59
|
});
|
|
42
60
|
}
|
|
@@ -58,13 +76,39 @@ export class AddBrandingModalComponent {
|
|
|
58
76
|
return null;
|
|
59
77
|
};
|
|
60
78
|
}
|
|
79
|
+
ensureProperVariantName() {
|
|
80
|
+
return (control) => {
|
|
81
|
+
if (typeof control.value === 'string') {
|
|
82
|
+
const value = control.value;
|
|
83
|
+
if (/[A-Z]/.test(value)) {
|
|
84
|
+
return {
|
|
85
|
+
onlyLowerCaseCharacters: {}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
if (!/^[a-z0-9]+/.test(value)) {
|
|
89
|
+
return {
|
|
90
|
+
shouldStartWithLowerCaseLetterOrNumber: {}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const matches = /[^a-z0-9-]/.exec(value);
|
|
94
|
+
if (matches) {
|
|
95
|
+
return {
|
|
96
|
+
invalidCharacters: {
|
|
97
|
+
invalidCharacter: matches[0]
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
};
|
|
104
|
+
}
|
|
61
105
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AddBrandingModalComponent, deps: [{ token: i1.StoreBrandingService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
62
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AddBrandingModalComponent, isStandalone: true, selector: "c8y-add-branding-modal", inputs: { duplicateBranding: "duplicateBranding" }, ngImport: i0, template: "<c8y-modal\n [title]=\"duplicateBranding ? 'Duplicate Branding' : 'Create Branding'\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'palette'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"brandingName\"\n translate\n >\n Branding name\n </label>\n <input\n class=\"form-control\"\n name=\"brandingName\"\n id=\"brandingName\"\n type=\"text\"\n formControlName=\"brandingName\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: '
|
|
106
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AddBrandingModalComponent, isStandalone: true, selector: "c8y-add-branding-modal", inputs: { duplicateBranding: "duplicateBranding" }, ngImport: i0, template: "<c8y-modal\n [title]=\"duplicateBranding ? 'Duplicate Branding' : 'Create Branding'\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'palette'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"brandingName\"\n translate\n >\n Branding name\n </label>\n <input\n class=\"form-control\"\n name=\"brandingName\"\n id=\"brandingName\"\n type=\"text\"\n formControlName=\"brandingName\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: 'main-branding' } }}\"\n />\n <c8y-messages [helpMessage]=\"'Upper case letters not allowed' | translate\">\n <c8y-message *ngFor=\"let message of messages\"\n [name]=\"message.name\"\n [text]=\"message.text | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n</c8y-modal>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i3.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
|
|
63
107
|
}
|
|
64
108
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AddBrandingModalComponent, decorators: [{
|
|
65
109
|
type: Component,
|
|
66
|
-
args: [{ selector: 'c8y-add-branding-modal', standalone: true, imports: [CoreModule, NgIf, ReactiveFormsModule], template: "<c8y-modal\n [title]=\"duplicateBranding ? 'Duplicate Branding' : 'Create Branding'\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'palette'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"brandingName\"\n translate\n >\n Branding name\n </label>\n <input\n class=\"form-control\"\n name=\"brandingName\"\n id=\"brandingName\"\n type=\"text\"\n formControlName=\"brandingName\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: '
|
|
110
|
+
args: [{ selector: 'c8y-add-branding-modal', standalone: true, imports: [CoreModule, NgIf, ReactiveFormsModule], template: "<c8y-modal\n [title]=\"duplicateBranding ? 'Duplicate Branding' : 'Create Branding'\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'palette'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"brandingName\"\n translate\n >\n Branding name\n </label>\n <input\n class=\"form-control\"\n name=\"brandingName\"\n id=\"brandingName\"\n type=\"text\"\n formControlName=\"brandingName\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: 'main-branding' } }}\"\n />\n <c8y-messages [helpMessage]=\"'Upper case letters not allowed' | translate\">\n <c8y-message *ngFor=\"let message of messages\"\n [name]=\"message.name\"\n [text]=\"message.text | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n</c8y-modal>\n" }]
|
|
67
111
|
}], ctorParameters: () => [{ type: i1.StoreBrandingService }, { type: i2.FormBuilder }], propDecorators: { duplicateBranding: [{
|
|
68
112
|
type: Input
|
|
69
113
|
}] } });
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWJyYW5kaW5nLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2JyYW5kaW5nL3NoYXJlZC9sYXp5L2FkZC1icmFuZGluZy1tb2RhbC9hZGQtYnJhbmRpbmctbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYWRkLWJyYW5kaW5nLW1vZGFsL2FkZC1icmFuZGluZy1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBRUwsV0FBVyxFQUNYLG1CQUFtQixFQUVuQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFRdkMsTUFBTSxPQUFPLHlCQUF5QjtJQWdCcEMsWUFDVSxRQUE4QixFQUM5QixXQUF3QjtRQUR4QixhQUFRLEdBQVIsUUFBUSxDQUFzQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWpCekIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLHNCQUFpQixHQUFhLEVBQUUsQ0FBQztRQUNqQyxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBRWYsV0FBTSxHQUFHLElBQUksT0FBTyxDQUE0QyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNsRixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUVILG9CQUFlLEdBQUcsT0FBTyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFTL0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssQ0FBQywyQkFBMkI7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzVCLFlBQVksRUFBRTtnQkFDWixFQUFFO2dCQUNGLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2FBQ3ZGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixPQUFPLENBQUMsT0FBd0IsRUFBRSxFQUFFO1lBQ2xDLElBQUksT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDMUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQ25ELENBQUM7Z0JBQ0YsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO29CQUNyQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ2xDLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDOzhHQWhFVSx5QkFBeUI7a0dBQXpCLHlCQUF5QixzSUNsQnRDLHdrQ0FvQ0EsMkNEcEJZLFVBQVUsaXlEQUFRLG1CQUFtQjs7MkZBRXBDLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDRSx3QkFBd0IsY0FFdEIsSUFBSSxXQUNQLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxtQkFBbUIsQ0FBQzttSEFHdkMsaUJBQWlCO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmVCcmFuZGluZ1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2JyYW5kaW5nL3NoYXJlZC9kYXRhJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUJ1aWxkZXIsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRvckZuLFxuICBWYWxpZGF0b3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvcmVNb2R1bGUsIGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWRkLWJyYW5kaW5nLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1icmFuZGluZy1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb3JlTW9kdWxlLCBOZ0lmLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBBZGRCcmFuZGluZ01vZGFsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZHVwbGljYXRlQnJhbmRpbmcgPSBmYWxzZTtcbiAgZm9ybTogUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5pbml0Rm9ybT47XG4gIG5hbWVzQWxyZWFkeVRha2VuOiBzdHJpbmdbXSA9IFtdO1xuICBsb2FkaW5nID0gdHJ1ZTtcblxuICByZXN1bHQgPSBuZXcgUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmluaXRGb3JtPlsndmFsdWUnXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMuX3Jlc292bGUgPSByZXNvbHZlO1xuICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcbiAgfSk7XG5cbiAgYWxyZWFkeVRha2VuTXNnID0gZ2V0dGV4dCgnVGhlIHByb3ZpZGVkIG5hbWUgaXMgYWxyZWFkeSB0YWtlbi4nKTtcblxuICBwcml2YXRlIF9yZXNvdmxlOiAodmFsdWU6IFJldHVyblR5cGU8dHlwZW9mIHRoaXMuaW5pdEZvcm0+Wyd2YWx1ZSddKSA9PiB2b2lkO1xuICBwcml2YXRlIF9yZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBicmFuZGluZzogU3RvcmVCcmFuZGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXJcbiAgKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5pbml0Rm9ybSgpO1xuICAgIHRoaXMuZ2V0RXhpc3RpbmdCcmFuZGluZ1ZlcnNpb25zKCk7XG4gIH1cblxuICBhc3luYyBnZXRFeGlzdGluZ0JyYW5kaW5nVmVyc2lvbnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgdmFyaWFudHMgfSA9IGF3YWl0IHRoaXMuYnJhbmRpbmcubG9hZEJyYW5kaW5nVmFyaWFudHMoKTtcbiAgICAgIHRoaXMubmFtZXNBbHJlYWR5VGFrZW4gPSB2YXJpYW50cy5tYXAodmFyaWFudCA9PiB2YXJpYW50LnZlcnNpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBpbml0Rm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBicmFuZGluZ05hbWU6IFtcbiAgICAgICAgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oL15bYS16MC05XSskLyksIHRoaXMuZW5zdXJlTm90RXhpc3RpbmdOYW1lKCldXG4gICAgICBdXG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5fcmVqZWN0KCk7XG4gIH1cblxuICBzYXZlKCkge1xuICAgIHRoaXMuX3Jlc292bGUodGhpcy5mb3JtLnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlTm90RXhpc3RpbmdOYW1lKCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjb250cm9sLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBsb3dlcmNhc2VOYW1lID0gY29udHJvbC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBuYW1lQWxyZWFkeVRha2VuID0gdGhpcy5uYW1lc0FscmVhZHlUYWtlbi5zb21lKG5hbWUgPT5cbiAgICAgICAgICBuYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChsb3dlcmNhc2VOYW1lICsgJy0nKVxuICAgICAgICApO1xuICAgICAgICBpZiAobmFtZUFscmVhZHlUYWtlbikge1xuICAgICAgICAgIHJldHVybiB7IG5hbWVBbHJlYWR5VGFrZW46IHt9IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cbn1cbiIsIjxjOHktbW9kYWxcbiAgW3RpdGxlXT1cImR1cGxpY2F0ZUJyYW5kaW5nID8gJ0R1cGxpY2F0ZSBCcmFuZGluZycgOiAnQ3JlYXRlIEJyYW5kaW5nJ1wiXG4gIFtoZWFkZXJDbGFzc2VzXT1cIidkaWFsb2ctaGVhZGVyJ1wiXG4gIChvbkRpc21pc3MpPVwiY2FuY2VsKClcIlxuICAob25DbG9zZSk9XCJzYXZlKClcIlxuICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgW2xhYmVsc109XCJ7IGNhbmNlbDogJ0NhbmNlbCcsIG9rOiAnU2F2ZScgfVwiXG4+XG48bmctY29udGFpbmVyIGM4eS1tb2RhbC10aXRsZT5cbiAgPHNwYW4gW2M4eUljb25dPVwiJ3BhbGV0dGUnXCI+PC9zcGFuPlxuPC9uZy1jb250YWluZXI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJwLTI0XCI+XG4gICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGZvcj1cImJyYW5kaW5nTmFtZVwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBCcmFuZGluZyBuYW1lXG4gICAgICA8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgbmFtZT1cImJyYW5kaW5nTmFtZVwiXG4gICAgICAgIGlkPVwiYnJhbmRpbmdOYW1lXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJicmFuZGluZ05hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7IGV4YW1wbGU6ICdtYWluX2JyYW5kaW5nJyB9IH19XCJcbiAgICAgIC8+XG4gICAgICA8Yzh5LW1lc3NhZ2VzIFtoZWxwTWVzc2FnZV09XCInVXBwZXIgY2FzZSBsZXR0ZXJzIG5vdCBhbGxvd2VkJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICBuYW1lPVwibmFtZUFscmVhZHlUYWtlblwiXG4gICAgICAgICAgW3RleHRdPVwiYWxyZWFkeVRha2VuTXNnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICA8L2M4eS1tZXNzYWdlcz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICA8L2Rpdj5cbjwvYzh5LW1vZGFsPlxuIl19
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWJyYW5kaW5nLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2JyYW5kaW5nL3NoYXJlZC9sYXp5L2FkZC1icmFuZGluZy1tb2RhbC9hZGQtYnJhbmRpbmctbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYWRkLWJyYW5kaW5nLW1vZGFsL2FkZC1icmFuZGluZy1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBRUwsV0FBVyxFQUNYLG1CQUFtQixFQUVuQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7O0FBUXZDLE1BQU0sT0FBTyx5QkFBeUI7SUFpQ3BDLFlBQ1UsUUFBOEIsRUFDOUIsV0FBd0I7UUFEeEIsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFsQ3pCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUVuQyxzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFDakMsWUFBTyxHQUFHLElBQUksQ0FBQztRQUVmLFdBQU0sR0FBRyxJQUFJLE9BQU8sQ0FBNEMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFF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LENBQUM7b0JBQzlCLE9BQU87d0JBQ0wsc0NBQXNDLEVBQUUsRUFBRTtxQkFDM0MsQ0FBQztnQkFDSixDQUFDO2dCQUVELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osT0FBTzt3QkFDTCxpQkFBaUIsRUFBRTs0QkFDakIsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQzt5QkFDN0I7cUJBQ0YsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0E3R1UseUJBQXlCO2tHQUF6Qix5QkFBeUIsc0lDbEJ0QyxzbUNBb0NBLDJDRHBCWSxVQUFVLDg1REFBUSxtQkFBbUI7OzJGQUVwQyx5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBRXRCLElBQUksV0FDUCxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLENBQUM7bUhBR3ZDLGlCQUFpQjtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlQnJhbmRpbmdTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9icmFuZGluZy9zaGFyZWQvZGF0YSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1CdWlsZGVyLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JGbixcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb3JlTW9kdWxlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFkZC1icmFuZGluZy1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtYnJhbmRpbmctbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgTmdJZiwgUmVhY3RpdmVGb3Jtc01vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQWRkQnJhbmRpbmdNb2RhbENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGR1cGxpY2F0ZUJyYW5kaW5nID0gZmFsc2U7XG4gIGZvcm06IFJldHVyblR5cGU8dHlwZW9mIHRoaXMuaW5pdEZvcm0+O1xuICBuYW1lc0FscmVhZHlUYWtlbjogc3RyaW5nW10gPSBbXTtcbiAgbG9hZGluZyA9IHRydWU7XG5cbiAgcmVzdWx0ID0gbmV3IFByb21pc2U8UmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5pbml0Rm9ybT5bJ3ZhbHVlJ10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0aGlzLl9yZXNvdmxlID0gcmVzb2x2ZTtcbiAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XG4gIH0pO1xuXG4gIG1lc3NhZ2VzID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICduYW1lQWxyZWFkeVRha2VuJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ1RoZSBwcm92aWRlZCBuYW1lIGlzIGFscmVhZHkgdGFrZW4uJylcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvbmx5TG93ZXJDYXNlQ2hhcmFjdGVycycsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdPbmx5IGxvd2VyIGNhc2UgY2hhcmFjdGVycyBhcmUgYWxsb3dlZC4nKVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Nob3VsZFN0YXJ0V2l0aExvd2VyQ2FzZUxldHRlck9yTnVtYmVyJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ1Nob3VsZCBzdGFydCB3aXRoIGEgbG93ZXIgY2FzZSBsZXR0ZXIgb3IgYSBudW1iZXIuJylcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpbnZhbGlkQ2hhcmFjdGVycycsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdJbnZhbGlkIGNoYXJhY3RlciBcInt7IGludmFsaWRDaGFyYWN0ZXIgfX1cIi4gT25seSBhLXosIDAtOSBhbmQgLSBhcmUgYWxsb3dlZC4nKVxuICAgIH1cbiAgXSBhcyBjb25zdDtcblxuICBwcml2YXRlIF9yZXNvdmxlOiAodmFsdWU6IFJldHVyblR5cGU8dHlwZW9mIHRoaXMuaW5pdEZvcm0+Wyd2YWx1ZSddKSA9PiB2b2lkO1xuICBwcml2YXRlIF9yZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBicmFuZGluZzogU3RvcmVCcmFuZGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXJcbiAgKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5pbml0Rm9ybSgpO1xuICAgIHRoaXMuZ2V0RXhpc3RpbmdCcmFuZGluZ1ZlcnNpb25zKCk7XG4gIH1cblxuICBhc3luYyBnZXRFeGlzdGluZ0JyYW5kaW5nVmVyc2lvbnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgdmFyaWFudHMgfSA9IGF3YWl0IHRoaXMuYnJhbmRpbmcubG9hZEJyYW5kaW5nVmFyaWFudHMoKTtcbiAgICAgIHRoaXMubmFtZXNBbHJlYWR5VGFrZW4gPSB2YXJpYW50cy5tYXAodmFyaWFudCA9PiB2YXJpYW50LnZlcnNpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBpbml0Rm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBicmFuZGluZ05hbWU6IFtcbiAgICAgICAgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLmVuc3VyZVByb3BlclZhcmlhbnROYW1lKCksIHRoaXMuZW5zdXJlTm90RXhpc3RpbmdOYW1lKCldXG4gICAgICBdXG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5fcmVqZWN0KCk7XG4gIH1cblxuICBzYXZlKCkge1xuICAgIHRoaXMuX3Jlc292bGUodGhpcy5mb3JtLnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlTm90RXhpc3RpbmdOYW1lKCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjb250cm9sLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBsb3dlcmNhc2VOYW1lID0gY29udHJvbC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBuYW1lQWxyZWFkeVRha2VuID0gdGhpcy5uYW1lc0FscmVhZHlUYWtlbi5zb21lKG5hbWUgPT5cbiAgICAgICAgICBuYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChsb3dlcmNhc2VOYW1lICsgJy0nKVxuICAgICAgICApO1xuICAgICAgICBpZiAobmFtZUFscmVhZHlUYWtlbikge1xuICAgICAgICAgIHJldHVybiB7IG5hbWVBbHJlYWR5VGFrZW46IHt9IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVByb3BlclZhcmlhbnROYW1lKCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjb250cm9sLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICAgIGlmICgvW0EtWl0vLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9ubHlMb3dlckNhc2VDaGFyYWN0ZXJzOiB7fVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEvXlthLXowLTldKy8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hvdWxkU3RhcnRXaXRoTG93ZXJDYXNlTGV0dGVyT3JOdW1iZXI6IHt9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSAvW15hLXowLTktXS8uZXhlYyh2YWx1ZSk7XG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGludmFsaWRDaGFyYWN0ZXJzOiB7XG4gICAgICAgICAgICAgIGludmFsaWRDaGFyYWN0ZXI6IG1hdGNoZXNbMF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG59XG4iLCI8Yzh5LW1vZGFsXG4gIFt0aXRsZV09XCJkdXBsaWNhdGVCcmFuZGluZyA/ICdEdXBsaWNhdGUgQnJhbmRpbmcnIDogJ0NyZWF0ZSBCcmFuZGluZydcIlxuICBbaGVhZGVyQ2xhc3Nlc109XCInZGlhbG9nLWhlYWRlcidcIlxuICAob25EaXNtaXNzKT1cImNhbmNlbCgpXCJcbiAgKG9uQ2xvc2UpPVwic2F2ZSgpXCJcbiAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiXG4gIFtsYWJlbHNdPVwieyBjYW5jZWw6ICdDYW5jZWwnLCBvazogJ1NhdmUnIH1cIlxuPlxuPG5nLWNvbnRhaW5lciBjOHktbW9kYWwtdGl0bGU+XG4gIDxzcGFuIFtjOHlJY29uXT1cIidwYWxldHRlJ1wiPjwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwicC0yNFwiPlxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbFxuICAgICAgICBmb3I9XCJicmFuZGluZ05hbWVcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgQnJhbmRpbmcgbmFtZVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIG5hbWU9XCJicmFuZGluZ05hbWVcIlxuICAgICAgICBpZD1cImJyYW5kaW5nTmFtZVwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYnJhbmRpbmdOYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlIDogeyBleGFtcGxlOiAnbWFpbi1icmFuZGluZycgfSB9fVwiXG4gICAgICAvPlxuICAgICAgPGM4eS1tZXNzYWdlcyBbaGVscE1lc3NhZ2VdPVwiJ1VwcGVyIGNhc2UgbGV0dGVycyBub3QgYWxsb3dlZCcgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgPGM4eS1tZXNzYWdlICpuZ0Zvcj1cImxldCBtZXNzYWdlIG9mIG1lc3NhZ2VzXCJcbiAgICAgICAgICBbbmFtZV09XCJtZXNzYWdlLm5hbWVcIlxuICAgICAgICAgIFt0ZXh0XT1cIm1lc3NhZ2UudGV4dCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID48L2M4eS1tZXNzYWdlPlxuICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgPC9jOHktZm9ybS1ncm91cD5cbiAgPC9kaXY+XG48L2M4eS1tb2RhbD5cbiJdfQ==
|
|
@@ -5,6 +5,7 @@ import * as i2 from '@angular/forms';
|
|
|
5
5
|
import { Validators, ReactiveFormsModule } from '@angular/forms';
|
|
6
6
|
import * as i3 from '@c8y/ngx-components';
|
|
7
7
|
import { gettext, CoreModule } from '@c8y/ngx-components';
|
|
8
|
+
import * as i4 from '@angular/common';
|
|
8
9
|
import { NgIf } from '@angular/common';
|
|
9
10
|
import * as i1$1 from 'ngx-bootstrap/modal';
|
|
10
11
|
|
|
@@ -19,7 +20,24 @@ class AddBrandingModalComponent {
|
|
|
19
20
|
this._resovle = resolve;
|
|
20
21
|
this._reject = reject;
|
|
21
22
|
});
|
|
22
|
-
this.
|
|
23
|
+
this.messages = [
|
|
24
|
+
{
|
|
25
|
+
name: 'nameAlreadyTaken',
|
|
26
|
+
text: gettext('The provided name is already taken.')
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'onlyLowerCaseCharacters',
|
|
30
|
+
text: gettext('Only lower case characters are allowed.')
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'shouldStartWithLowerCaseLetterOrNumber',
|
|
34
|
+
text: gettext('Should start with a lower case letter or a number.')
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'invalidCharacters',
|
|
38
|
+
text: gettext('Invalid character "{{ invalidCharacter }}". Only a-z, 0-9 and - are allowed.')
|
|
39
|
+
}
|
|
40
|
+
];
|
|
23
41
|
this.form = this.initForm();
|
|
24
42
|
this.getExistingBrandingVersions();
|
|
25
43
|
}
|
|
@@ -37,7 +55,7 @@ class AddBrandingModalComponent {
|
|
|
37
55
|
return this.formBuilder.group({
|
|
38
56
|
brandingName: [
|
|
39
57
|
'',
|
|
40
|
-
[Validators.required,
|
|
58
|
+
[Validators.required, this.ensureProperVariantName(), this.ensureNotExistingName()]
|
|
41
59
|
]
|
|
42
60
|
});
|
|
43
61
|
}
|
|
@@ -59,12 +77,38 @@ class AddBrandingModalComponent {
|
|
|
59
77
|
return null;
|
|
60
78
|
};
|
|
61
79
|
}
|
|
80
|
+
ensureProperVariantName() {
|
|
81
|
+
return (control) => {
|
|
82
|
+
if (typeof control.value === 'string') {
|
|
83
|
+
const value = control.value;
|
|
84
|
+
if (/[A-Z]/.test(value)) {
|
|
85
|
+
return {
|
|
86
|
+
onlyLowerCaseCharacters: {}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (!/^[a-z0-9]+/.test(value)) {
|
|
90
|
+
return {
|
|
91
|
+
shouldStartWithLowerCaseLetterOrNumber: {}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const matches = /[^a-z0-9-]/.exec(value);
|
|
95
|
+
if (matches) {
|
|
96
|
+
return {
|
|
97
|
+
invalidCharacters: {
|
|
98
|
+
invalidCharacter: matches[0]
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
};
|
|
105
|
+
}
|
|
62
106
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AddBrandingModalComponent, deps: [{ token: i1.StoreBrandingService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
63
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AddBrandingModalComponent, isStandalone: true, selector: "c8y-add-branding-modal", inputs: { duplicateBranding: "duplicateBranding" }, ngImport: i0, template: "<c8y-modal\n [title]=\"duplicateBranding ? 'Duplicate Branding' : 'Create Branding'\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'palette'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"brandingName\"\n translate\n >\n Branding name\n </label>\n <input\n class=\"form-control\"\n name=\"brandingName\"\n id=\"brandingName\"\n type=\"text\"\n formControlName=\"brandingName\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: '
|
|
107
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AddBrandingModalComponent, isStandalone: true, selector: "c8y-add-branding-modal", inputs: { duplicateBranding: "duplicateBranding" }, ngImport: i0, template: "<c8y-modal\n [title]=\"duplicateBranding ? 'Duplicate Branding' : 'Create Branding'\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'palette'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"brandingName\"\n translate\n >\n Branding name\n </label>\n <input\n class=\"form-control\"\n name=\"brandingName\"\n id=\"brandingName\"\n type=\"text\"\n formControlName=\"brandingName\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: 'main-branding' } }}\"\n />\n <c8y-messages [helpMessage]=\"'Upper case letters not allowed' | translate\">\n <c8y-message *ngFor=\"let message of messages\"\n [name]=\"message.name\"\n [text]=\"message.text | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n</c8y-modal>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i3.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
|
|
64
108
|
}
|
|
65
109
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AddBrandingModalComponent, decorators: [{
|
|
66
110
|
type: Component,
|
|
67
|
-
args: [{ selector: 'c8y-add-branding-modal', standalone: true, imports: [CoreModule, NgIf, ReactiveFormsModule], template: "<c8y-modal\n [title]=\"duplicateBranding ? 'Duplicate Branding' : 'Create Branding'\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'palette'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"brandingName\"\n translate\n >\n Branding name\n </label>\n <input\n class=\"form-control\"\n name=\"brandingName\"\n id=\"brandingName\"\n type=\"text\"\n formControlName=\"brandingName\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: '
|
|
111
|
+
args: [{ selector: 'c8y-add-branding-modal', standalone: true, imports: [CoreModule, NgIf, ReactiveFormsModule], template: "<c8y-modal\n [title]=\"duplicateBranding ? 'Duplicate Branding' : 'Create Branding'\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'palette'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"brandingName\"\n translate\n >\n Branding name\n </label>\n <input\n class=\"form-control\"\n name=\"brandingName\"\n id=\"brandingName\"\n type=\"text\"\n formControlName=\"brandingName\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: 'main-branding' } }}\"\n />\n <c8y-messages [helpMessage]=\"'Upper case letters not allowed' | translate\">\n <c8y-message *ngFor=\"let message of messages\"\n [name]=\"message.name\"\n [text]=\"message.text | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n</c8y-modal>\n" }]
|
|
68
112
|
}], ctorParameters: () => [{ type: i1.StoreBrandingService }, { type: i2.FormBuilder }], propDecorators: { duplicateBranding: [{
|
|
69
113
|
type: Input
|
|
70
114
|
}] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs","sources":["../../branding/shared/lazy/add-branding-modal/add-branding-modal.component.ts","../../branding/shared/lazy/add-branding-modal/add-branding-modal.component.html","../../branding/shared/lazy/add-branding-modal/add-branding-modal.service.ts","../../branding/shared/lazy/add-branding-modal/c8y-ngx-components-branding-shared-lazy-add-branding-modal.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\nimport { StoreBrandingService } from '@c8y/ngx-components/branding/shared/data';\nimport {\n AbstractControl,\n FormBuilder,\n ReactiveFormsModule,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { CoreModule, gettext } from '@c8y/ngx-components';\nimport { NgIf } from '@angular/common';\n\n@Component({\n selector: 'c8y-add-branding-modal',\n templateUrl: './add-branding-modal.component.html',\n standalone: true,\n imports: [CoreModule, NgIf, ReactiveFormsModule]\n})\nexport class AddBrandingModalComponent {\n @Input() duplicateBranding = false;\n form: ReturnType<typeof this.initForm>;\n namesAlreadyTaken: string[] = [];\n loading = true;\n\n result = new Promise<ReturnType<typeof this.initForm>['value']>((resolve, reject) => {\n this._resovle = resolve;\n this._reject = reject;\n });\n\n alreadyTakenMsg = gettext('The provided name is already taken.');\n\n private _resovle: (value: ReturnType<typeof this.initForm>['value']) => void;\n private _reject: (reason?: any) => void;\n\n constructor(\n private branding: StoreBrandingService,\n private formBuilder: FormBuilder\n ) {\n this.form = this.initForm();\n this.getExistingBrandingVersions();\n }\n\n async getExistingBrandingVersions() {\n try {\n const { variants } = await this.branding.loadBrandingVariants();\n this.namesAlreadyTaken = variants.map(variant => variant.version);\n } catch (e) {\n console.warn(e);\n }\n this.loading = false;\n }\n\n initForm() {\n return this.formBuilder.group({\n brandingName: [\n '',\n [Validators.required, Validators.pattern(/^[a-z0-9]+$/), this.ensureNotExistingName()]\n ]\n });\n }\n\n cancel() {\n this._reject();\n }\n\n save() {\n this._resovle(this.form.value);\n }\n\n private ensureNotExistingName(): ValidatorFn {\n return (control: AbstractControl) => {\n if (typeof control.value === 'string') {\n const lowercaseName = control.value.toLowerCase();\n const nameAlreadyTaken = this.namesAlreadyTaken.some(name =>\n name.toLowerCase().startsWith(lowercaseName + '-')\n );\n if (nameAlreadyTaken) {\n return { nameAlreadyTaken: {} };\n }\n }\n return null;\n };\n }\n}\n","<c8y-modal\n [title]=\"duplicateBranding ? 'Duplicate Branding' : 'Create Branding'\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'palette'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"brandingName\"\n translate\n >\n Branding name\n </label>\n <input\n class=\"form-control\"\n name=\"brandingName\"\n id=\"brandingName\"\n type=\"text\"\n formControlName=\"brandingName\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: 'main_branding' } }}\"\n />\n <c8y-messages [helpMessage]=\"'Upper case letters not allowed' | translate\">\n <c8y-message\n name=\"nameAlreadyTaken\"\n [text]=\"alreadyTakenMsg | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n</c8y-modal>\n","import { Injectable } from '@angular/core';\nimport { AddBrandingModalComponent } from './add-branding-modal.component';\nimport { BsModalService } from 'ngx-bootstrap/modal';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddBrandingModalService {\n constructor(private modal: BsModalService) {}\n\n async openAddBrandingModal() {\n let versionDetails: Awaited<AddBrandingModalComponent['result']>;\n try {\n const modalRef = this.modal.show(AddBrandingModalComponent, {\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true,\n keyboard: false\n });\n versionDetails = await modalRef.content.result;\n } catch (e) {\n // modal closed\n return;\n }\n\n return versionDetails;\n }\n\n async openDuplicateBrandingModal() {\n let versionDetails: Awaited<AddBrandingModalComponent['result']>;\n try {\n const modalRef = this.modal.show(AddBrandingModalComponent, {\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState: { duplicateBranding: true },\n ignoreBackdropClick: true,\n keyboard: false\n });\n versionDetails = await modalRef.content.result;\n } catch (e) {\n // modal closed\n return;\n }\n\n return versionDetails;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs","sources":["../../branding/shared/lazy/add-branding-modal/add-branding-modal.component.ts","../../branding/shared/lazy/add-branding-modal/add-branding-modal.component.html","../../branding/shared/lazy/add-branding-modal/add-branding-modal.service.ts","../../branding/shared/lazy/add-branding-modal/c8y-ngx-components-branding-shared-lazy-add-branding-modal.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\nimport { StoreBrandingService } from '@c8y/ngx-components/branding/shared/data';\nimport {\n AbstractControl,\n FormBuilder,\n ReactiveFormsModule,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { CoreModule, gettext } from '@c8y/ngx-components';\nimport { NgIf } from '@angular/common';\n\n@Component({\n selector: 'c8y-add-branding-modal',\n templateUrl: './add-branding-modal.component.html',\n standalone: true,\n imports: [CoreModule, NgIf, ReactiveFormsModule]\n})\nexport class AddBrandingModalComponent {\n @Input() duplicateBranding = false;\n form: ReturnType<typeof this.initForm>;\n namesAlreadyTaken: string[] = [];\n loading = true;\n\n result = new Promise<ReturnType<typeof this.initForm>['value']>((resolve, reject) => {\n this._resovle = resolve;\n this._reject = reject;\n });\n\n messages = [\n {\n name: 'nameAlreadyTaken',\n text: gettext('The provided name is already taken.')\n },\n {\n name: 'onlyLowerCaseCharacters',\n text: gettext('Only lower case characters are allowed.')\n },\n {\n name: 'shouldStartWithLowerCaseLetterOrNumber',\n text: gettext('Should start with a lower case letter or a number.')\n },\n {\n name: 'invalidCharacters',\n text: gettext('Invalid character \"{{ invalidCharacter }}\". Only a-z, 0-9 and - are allowed.')\n }\n ] as const;\n\n private _resovle: (value: ReturnType<typeof this.initForm>['value']) => void;\n private _reject: (reason?: any) => void;\n\n constructor(\n private branding: StoreBrandingService,\n private formBuilder: FormBuilder\n ) {\n this.form = this.initForm();\n this.getExistingBrandingVersions();\n }\n\n async getExistingBrandingVersions() {\n try {\n const { variants } = await this.branding.loadBrandingVariants();\n this.namesAlreadyTaken = variants.map(variant => variant.version);\n } catch (e) {\n console.warn(e);\n }\n this.loading = false;\n }\n\n initForm() {\n return this.formBuilder.group({\n brandingName: [\n '',\n [Validators.required, this.ensureProperVariantName(), this.ensureNotExistingName()]\n ]\n });\n }\n\n cancel() {\n this._reject();\n }\n\n save() {\n this._resovle(this.form.value);\n }\n\n private ensureNotExistingName(): ValidatorFn {\n return (control: AbstractControl) => {\n if (typeof control.value === 'string') {\n const lowercaseName = control.value.toLowerCase();\n const nameAlreadyTaken = this.namesAlreadyTaken.some(name =>\n name.toLowerCase().startsWith(lowercaseName + '-')\n );\n if (nameAlreadyTaken) {\n return { nameAlreadyTaken: {} };\n }\n }\n return null;\n };\n }\n\n private ensureProperVariantName(): ValidatorFn {\n return (control: AbstractControl) => {\n if (typeof control.value === 'string') {\n const value = control.value;\n if (/[A-Z]/.test(value)) {\n return {\n onlyLowerCaseCharacters: {}\n };\n }\n if (!/^[a-z0-9]+/.test(value)) {\n return {\n shouldStartWithLowerCaseLetterOrNumber: {}\n };\n }\n\n const matches = /[^a-z0-9-]/.exec(value);\n if (matches) {\n return {\n invalidCharacters: {\n invalidCharacter: matches[0]\n }\n };\n }\n }\n return null;\n };\n }\n}\n","<c8y-modal\n [title]=\"duplicateBranding ? 'Duplicate Branding' : 'Create Branding'\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'palette'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"brandingName\"\n translate\n >\n Branding name\n </label>\n <input\n class=\"form-control\"\n name=\"brandingName\"\n id=\"brandingName\"\n type=\"text\"\n formControlName=\"brandingName\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: 'main-branding' } }}\"\n />\n <c8y-messages [helpMessage]=\"'Upper case letters not allowed' | translate\">\n <c8y-message *ngFor=\"let message of messages\"\n [name]=\"message.name\"\n [text]=\"message.text | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n</c8y-modal>\n","import { Injectable } from '@angular/core';\nimport { AddBrandingModalComponent } from './add-branding-modal.component';\nimport { BsModalService } from 'ngx-bootstrap/modal';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddBrandingModalService {\n constructor(private modal: BsModalService) {}\n\n async openAddBrandingModal() {\n let versionDetails: Awaited<AddBrandingModalComponent['result']>;\n try {\n const modalRef = this.modal.show(AddBrandingModalComponent, {\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true,\n keyboard: false\n });\n versionDetails = await modalRef.content.result;\n } catch (e) {\n // modal closed\n return;\n }\n\n return versionDetails;\n }\n\n async openDuplicateBrandingModal() {\n let versionDetails: Awaited<AddBrandingModalComponent['result']>;\n try {\n const modalRef = this.modal.show(AddBrandingModalComponent, {\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState: { duplicateBranding: true },\n ignoreBackdropClick: true,\n keyboard: false\n });\n versionDetails = await modalRef.content.result;\n } catch (e) {\n // modal closed\n return;\n }\n\n return versionDetails;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
package/locales/de.po
CHANGED
|
@@ -2045,9 +2045,6 @@ msgstr "Autodiscovery wird ausgeführt."
|
|
|
2045
2045
|
msgid "Autodiscovery request"
|
|
2046
2046
|
msgstr "Autodiscovery-Anfrage"
|
|
2047
2047
|
|
|
2048
|
-
msgid "Set the required interval automatically"
|
|
2049
|
-
msgstr "Automatische Einstellung des erforderlichen Intervalls"
|
|
2050
|
-
|
|
2051
2048
|
msgid "Automatically scrolls to the latest value"
|
|
2052
2049
|
msgstr "Scrollt automatisch zum letzten Wert"
|
|
2053
2050
|
|
|
@@ -2910,29 +2907,29 @@ msgstr "Kinder"
|
|
|
2910
2907
|
msgid ""
|
|
2911
2908
|
"Choose how to select a date range, the available options are:\n"
|
|
2912
2909
|
" <ul class=\"m-l-0 p-l-8 m-t-8 m-b-0\">\n"
|
|
2910
|
+
" <li><b>Dashboard time range:</b> restricts date selection to the global dashboard configuration only</li>\n"
|
|
2913
2911
|
" <li><b>Widget configuration:</b> restricts the date selection only to the widget configuration</li>\n"
|
|
2914
2912
|
" <li><b>Widget and widget configuration:</b> restricts the date selection to the widget view and widget configuration only</li>\n"
|
|
2915
|
-
" <li><b>Dashboard time range:</b> restricts date selection to the global dashboard configuration only</li>\n"
|
|
2916
2913
|
" </ul>"
|
|
2917
2914
|
msgstr ""
|
|
2918
2915
|
"Wählen Sie die passende Möglichkeit für den Datumsbereich aus. Die verfügbaren Optionen sind:\n"
|
|
2919
2916
|
" <ul class=\"m-l-0 p-l-8 m-t-8 m-b-0\">\n"
|
|
2917
|
+
" <li><b>Dashboard-Zeitbereich:</b> Beschränkt auf die globale Dashboard-Konfiguration.</li>\n"
|
|
2920
2918
|
" <li><b>Widget-Konfiguration:</b> Beschränkt auf die Widget-Konfiguration.</li>\n"
|
|
2921
2919
|
" <li><b>Widget und Widget-Konfiguration:</b> Beschränkt auf die Widget-Ansicht und die Widget-Konfiguration.</li>\n"
|
|
2922
|
-
" <li><b>Dashboard-Zeitbereich:</b> Beschränkt auf die globale Dashboard-Konfiguration.</li>\n"
|
|
2923
2920
|
" </ul>"
|
|
2924
2921
|
|
|
2925
2922
|
msgid ""
|
|
2926
2923
|
"Choose how to select a date range, the available options are:\n"
|
|
2927
2924
|
" <ul class=\"m-l-0 p-l-8 m-t-8 m-b-0\">\n"
|
|
2928
|
-
" <li><b>Widget:</b> restricts the date selection to the widget view only</li>\n"
|
|
2929
2925
|
" <li><b>Dashboard time range:</b> restricts date selection to the global dashboard configuration only</li>\n"
|
|
2926
|
+
" <li><b>Widget:</b> restricts the date selection to the widget view only</li>\n"
|
|
2930
2927
|
" </ul>"
|
|
2931
2928
|
msgstr ""
|
|
2932
2929
|
"Wählen Sie die passende Möglichkeit für den Datumsbereich aus. Die verfügbaren Optionen sind:\n"
|
|
2933
2930
|
" <ul class=\"m-l-0 p-l-8 m-t-8 m-b-0\">\n"
|
|
2934
|
-
" <li><b>Widget:</b> Beschränkt auf die Widget-Ansicht.</li>\n"
|
|
2935
2931
|
" <li><b>Dashboard-Zeitbereich:</b> Beschränkt auf die globale Dashboard-Konfiguration.</li>\n"
|
|
2932
|
+
" <li><b>Widget:</b> Beschränkt auf die Widget-Ansicht.</li>\n"
|
|
2936
2933
|
" </ul>"
|
|
2937
2934
|
|
|
2938
2935
|
msgid "Circular $refs."
|
|
@@ -6534,9 +6531,6 @@ msgstr "Filter"
|
|
|
6534
6531
|
msgid "Filter by configuration type"
|
|
6535
6532
|
msgstr "Nach Konfigurationstypen filtern"
|
|
6536
6533
|
|
|
6537
|
-
msgid "Filter by configuration type"
|
|
6538
|
-
msgstr "Nach Konfigurationstypen filtern"
|
|
6539
|
-
|
|
6540
6534
|
msgid "Filter by creation time"
|
|
6541
6535
|
msgstr "Nach Erstellungszeitpunkt filtern"
|
|
6542
6536
|
|
|
@@ -8283,6 +8277,9 @@ msgstr "Ungültige SVG-Datei"
|
|
|
8283
8277
|
msgid "Invalid browse path."
|
|
8284
8278
|
msgstr "Ungültiger Suchpfad."
|
|
8285
8279
|
|
|
8280
|
+
msgid "Invalid character \"{{ invalidCharacter }}\". Only a-z, 0-9 and - are allowed."
|
|
8281
|
+
msgstr "Ungültiges Zeichen \"{{ invalidCharacter }}\". Nur a-z, 0-9 und - sind erlaubt."
|
|
8282
|
+
|
|
8286
8283
|
msgid "Invalid code"
|
|
8287
8284
|
msgstr "Ungültiger Code"
|
|
8288
8285
|
|
|
@@ -9845,9 +9842,6 @@ msgstr "Kein Alarm ausgewählt"
|
|
|
9845
9842
|
msgid "No alarms selected."
|
|
9846
9843
|
msgstr "Keine Alarme ausgewählt."
|
|
9847
9844
|
|
|
9848
|
-
msgid "No alarms selected."
|
|
9849
|
-
msgstr "Keine Alarme ausgewählt."
|
|
9850
|
-
|
|
9851
9845
|
msgid "No alarms to display."
|
|
9852
9846
|
msgstr "Keine Alarme anzuzeigen."
|
|
9853
9847
|
|
|
@@ -9996,9 +9990,6 @@ msgstr ""
|
|
|
9996
9990
|
msgid "No device profile selected"
|
|
9997
9991
|
msgstr "Kein Geräteprofil ausgewählt"
|
|
9998
9992
|
|
|
9999
|
-
msgid "No device profiles available."
|
|
10000
|
-
msgstr "Keine passenden Geräteprofile verfügbar."
|
|
10001
|
-
|
|
10002
9993
|
msgid "No device profiles found. Create a new device profile via the LoRa platform."
|
|
10003
9994
|
msgstr "Kein Geräteprofil gefunden. Erstellen Sie ein neues Geräteprofil über die LoRa-Plattform."
|
|
10004
9995
|
|
|
@@ -10832,6 +10823,9 @@ msgstr "Nur die letzte Plugin-Version"
|
|
|
10832
10823
|
msgid "Only letters, digits and underscore allowed."
|
|
10833
10824
|
msgstr "Nur Buchstaben, Zahlen und Unterstriche zulässig."
|
|
10834
10825
|
|
|
10826
|
+
msgid "Only lower case characters are allowed."
|
|
10827
|
+
msgstr "Es sind nur Kleinbuchstaben erlaubt."
|
|
10828
|
+
|
|
10835
10829
|
msgid "Only lowercase letters, digits and hyphens allowed in the first part of the URI. Must start with a letter; hyphens only allowed in the middle. Must be a valid URI."
|
|
10836
10830
|
msgstr "Im ersten Teil des URI sind nur Kleinbuchstaben, Ziffern und Bindestriche zulässig. Muss mit einem Buchstaben beginnen; Bindestriche nur in der Mitte erlaubt. Muss eine gültiger URI sein."
|
|
10837
10831
|
|
|
@@ -14022,6 +14016,9 @@ msgstr "Anfrageintervall für Systemressourcenmessungen konfigurieren (in Sekund
|
|
|
14022
14016
|
msgid "Set temperature threshold"
|
|
14023
14017
|
msgstr "Schwellenwert für Temperatur konfigurieren"
|
|
14024
14018
|
|
|
14019
|
+
msgid "Set the required interval automatically"
|
|
14020
|
+
msgstr "Automatische Einstellung des erforderlichen Intervalls"
|
|
14021
|
+
|
|
14025
14022
|
msgid "Set to \"{{ packageAvailability }}\""
|
|
14026
14023
|
msgstr "Auf \"{{ packageAvailability }}\" setzen"
|
|
14027
14024
|
|
|
@@ -14124,6 +14121,9 @@ msgstr "Darf maximal {{ maxLength }} Zeichen enthalten."
|
|
|
14124
14121
|
msgid "Should have at most {{ requiredLength }} characters."
|
|
14125
14122
|
msgstr "Darf maximal {{ requiredLength }} Zeichen enthalten."
|
|
14126
14123
|
|
|
14124
|
+
msgid "Should start with a lower case letter or a number."
|
|
14125
|
+
msgstr "Sollte mit einem Kleinbuchstaben oder einer Nummer beginnen."
|
|
14126
|
+
|
|
14127
14127
|
msgid "Show"
|
|
14128
14128
|
msgstr "Anzeigen"
|
|
14129
14129
|
|
|
@@ -14474,8 +14474,8 @@ msgstr "SmartREST-Template"
|
|
|
14474
14474
|
msgid "Smartbox Commands"
|
|
14475
14475
|
msgstr "Smartbox-Kommandos"
|
|
14476
14476
|
|
|
14477
|
-
msgid "Smartphone registered
|
|
14478
|
-
msgstr "Smartphone registriert
|
|
14477
|
+
msgid "Smartphone registered"
|
|
14478
|
+
msgstr "Smartphone registriert"
|
|
14479
14479
|
|
|
14480
14480
|
msgid "Smartphone sensors"
|
|
14481
14481
|
msgstr "Smartphone-Sensoren"
|