ng-configcat-publicapi-ui 3.0.8 → 4.0.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/esm2022/lib/_directives/input-display-normalizer.directive.mjs +38 -0
- package/esm2022/lib/_models/flag-state.mjs +2 -0
- package/esm2022/lib/_models/setting-value-formgroup.mjs +2 -0
- package/esm2022/lib/_models/user-comparator.mjs +100 -0
- package/esm2022/lib/_services/app-data-adapter.mjs +18 -0
- package/esm2022/lib/_services/comparison-value-list-helper.mjs +72 -0
- package/esm2022/lib/_services/date-helper.mjs +56 -0
- package/esm2022/lib/_services/form-generator.mjs +359 -0
- package/esm2022/lib/_services/form-helper.mjs +107 -0
- package/esm2022/lib/_services/messaging.service.mjs +26 -0
- package/esm2022/lib/_services/public-api.service.mjs +77 -0
- package/esm2022/lib/_services/setting-list-form-helper.mjs +171 -0
- package/esm2022/lib/_services/tracking.directive.mjs +16 -0
- package/esm2022/lib/ace-editor/ace-editor.component.mjs +137 -0
- package/esm2022/lib/authorization/authorization.component.mjs +62 -0
- package/{esm2020 → esm2022}/lib/base/base-select.component.mjs +4 -4
- package/esm2022/lib/base/base.component.mjs +48 -0
- package/esm2022/lib/bootstrap.mjs +10 -0
- package/{esm2020 → esm2022}/lib/configuration.mjs +4 -4
- package/esm2022/lib/dialogs/confirmation-dialog/confirmation-dialog.mjs +28 -0
- package/{esm2020 → esm2022}/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.mjs +6 -6
- package/esm2022/lib/dialogs/expand-dialog/expand-dialog.component.mjs +80 -0
- package/esm2022/lib/dialogs/info-dialog/info-dialog.mjs +29 -0
- package/esm2022/lib/dialogs/reason-dialog/reason-dialog.component.mjs +36 -0
- package/{esm2020 → esm2022}/lib/dialogs/save-snackbar/save-snackbar.component.mjs +5 -5
- package/esm2022/lib/ng-configcat-publicapi-ui.module.mjs +285 -0
- package/esm2022/lib/selects/config-select/config-select.component.mjs +60 -0
- package/esm2022/lib/selects/environment-select/environment-select.component.mjs +47 -0
- package/esm2022/lib/selects/product-select/product-select.component.mjs +40 -0
- package/esm2022/lib/selects/setting-select/setting-select.component.mjs +47 -0
- package/esm2022/lib/setting-item/setting-item.component.mjs +118 -0
- package/esm2022/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +81 -0
- package/esm2022/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +293 -0
- package/{esm2020 → esm2022}/lib/setting-list/setting/setting.component.mjs +5 -5
- package/esm2022/lib/setting-list/setting/value/value.component.mjs +37 -0
- package/esm2022/lib/setting-list/setting-list.component.mjs +194 -0
- package/esm2022/lib/v2/feature-flag/date-time-picker/date-time-picker.component.mjs +123 -0
- package/esm2022/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.mjs +30 -0
- package/esm2022/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.mjs +220 -0
- package/esm2022/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.mjs +61 -0
- package/esm2022/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.mjs +72 -0
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.mjs +25 -0
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.mjs +105 -0
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.mjs +75 -0
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.mjs +48 -0
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.mjs +113 -0
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.mjs +251 -0
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.mjs +444 -0
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.mjs +84 -0
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.mjs +129 -0
- package/esm2022/lib/v2/feature-flag/feature-flag.component.mjs +190 -0
- package/esm2022/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.mjs +65 -0
- package/esm2022/lib/v2/feature-flag-item.component.mjs +319 -0
- package/{esm2020 → esm2022}/public-api.mjs +2 -1
- package/fesm2022/ng-configcat-publicapi-ui.mjs +4790 -0
- package/fesm2022/ng-configcat-publicapi-ui.mjs.map +1 -0
- package/lib/_models/flag-state.d.ts +20 -0
- package/lib/_models/setting-value-formgroup.d.ts +69 -0
- package/lib/_models/user-comparator.d.ts +84 -0
- package/lib/_services/app-data-adapter.d.ts +7 -0
- package/lib/_services/comparison-value-list-helper.d.ts +17 -0
- package/lib/_services/date-helper.d.ts +6 -0
- package/lib/_services/form-generator.d.ts +59 -0
- package/lib/_services/form-helper.d.ts +4 -1
- package/lib/_services/messaging.service.d.ts +12 -0
- package/lib/_services/public-api.service.d.ts +2 -1
- package/lib/_services/setting-list-form-helper.d.ts +1 -1
- package/lib/_services/tracking.directive.d.ts +6 -0
- package/lib/ace-editor/ace-editor.component.d.ts +32 -0
- package/lib/authorization/authorization.component.d.ts +2 -2
- package/lib/base/base-select.component.d.ts +1 -1
- package/lib/base/base.component.d.ts +2 -1
- package/lib/bootstrap.d.ts +12 -0
- package/lib/dialogs/confirmation-dialog/confirmation-dialog.d.ts +19 -0
- package/lib/dialogs/info-dialog/info-dialog.d.ts +17 -0
- package/lib/ng-configcat-publicapi-ui.module.d.ts +47 -19
- package/lib/selects/config-select/config-select.component.d.ts +1 -1
- package/lib/selects/environment-select/environment-select.component.d.ts +1 -1
- package/lib/selects/product-select/product-select.component.d.ts +1 -1
- package/lib/selects/setting-select/setting-select.component.d.ts +1 -1
- package/lib/setting-item/setting-item.component.d.ts +4 -2
- package/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.d.ts +1 -1
- package/lib/setting-list/setting/rollout-rules/rollout-rules.component.d.ts +4 -4
- package/lib/setting-list/setting/setting.component.d.ts +1 -1
- package/lib/setting-list/setting/value/value.component.d.ts +1 -1
- package/lib/setting-list/setting-list.component.d.ts +1 -1
- package/lib/v2/feature-flag/date-time-picker/date-time-picker.component.d.ts +25 -0
- package/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.d.ts +27 -0
- package/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.d.ts +41 -0
- package/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.d.ts +18 -0
- package/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.d.ts +30 -0
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.d.ts +10 -0
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.d.ts +27 -0
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.d.ts +36 -0
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.d.ts +21 -0
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.d.ts +79 -0
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.d.ts +63 -0
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.d.ts +94 -0
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.d.ts +31 -0
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.d.ts +33 -0
- package/lib/v2/feature-flag/feature-flag.component.d.ts +49 -0
- package/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.d.ts +28 -0
- package/lib/v2/feature-flag-item.component.d.ts +66 -0
- package/package.json +12 -16
- package/public-api.d.ts +1 -0
- package/public-api.scss +205 -3
- package/esm2020/lib/_directives/input-display-normalizer.directive.mjs +0 -38
- package/esm2020/lib/_services/form-helper.mjs +0 -104
- package/esm2020/lib/_services/public-api.service.mjs +0 -71
- package/esm2020/lib/_services/setting-list-form-helper.mjs +0 -171
- package/esm2020/lib/authorization/authorization.component.mjs +0 -62
- package/esm2020/lib/base/base.component.mjs +0 -45
- package/esm2020/lib/dialogs/expand-dialog/expand-dialog.component.mjs +0 -80
- package/esm2020/lib/dialogs/reason-dialog/reason-dialog.component.mjs +0 -36
- package/esm2020/lib/ng-configcat-publicapi-ui.module.mjs +0 -179
- package/esm2020/lib/selects/config-select/config-select.component.mjs +0 -60
- package/esm2020/lib/selects/environment-select/environment-select.component.mjs +0 -47
- package/esm2020/lib/selects/product-select/product-select.component.mjs +0 -40
- package/esm2020/lib/selects/setting-select/setting-select.component.mjs +0 -47
- package/esm2020/lib/setting-item/setting-item.component.mjs +0 -116
- package/esm2020/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +0 -81
- package/esm2020/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +0 -293
- package/esm2020/lib/setting-list/setting/value/value.component.mjs +0 -37
- package/esm2020/lib/setting-list/setting-list.component.mjs +0 -194
- package/fesm2015/ng-configcat-publicapi-ui.mjs +0 -1786
- package/fesm2015/ng-configcat-publicapi-ui.mjs.map +0 -1
- package/fesm2020/ng-configcat-publicapi-ui.mjs +0 -1763
- package/fesm2020/ng-configcat-publicapi-ui.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/_directives/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/_models/deleteSettingModel.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/_models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/_models/settingValuesModel.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/_models/updateSettingValuesModel.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/_services/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/_services/platform-helper.mjs +0 -0
- /package/{esm2020 → esm2022}/ng-configcat-publicapi-ui.mjs +0 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { BaseComponent } from '../base/base.component';
|
|
3
|
+
import { throwError, of } from 'rxjs';
|
|
4
|
+
import { map, catchError } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../_services";
|
|
7
|
+
import * as i2 from "../setting-list/setting-list.component";
|
|
8
|
+
export class SettingItemComponent extends BaseComponent {
|
|
9
|
+
constructor(publicApiService) {
|
|
10
|
+
super(publicApiService);
|
|
11
|
+
this.canDeleteSetting = true;
|
|
12
|
+
this.deleteSettingText = 'Delete setting';
|
|
13
|
+
this.showEnvironmentName = true;
|
|
14
|
+
this.deleteSettingRequested = new EventEmitter();
|
|
15
|
+
this.loadSucceeded = new EventEmitter();
|
|
16
|
+
this.loadFailed = new EventEmitter();
|
|
17
|
+
this.saveSucceeded = new EventEmitter();
|
|
18
|
+
this.saveFailed = new EventEmitter();
|
|
19
|
+
this.formValuesChanged = new EventEmitter();
|
|
20
|
+
this.loadSettingValues = () => {
|
|
21
|
+
return this.createSettingValuesService().getSettingValue(this.environmentId, this.settingId)
|
|
22
|
+
.pipe(map(settingValue => {
|
|
23
|
+
this.settingValue = settingValue;
|
|
24
|
+
const settingValues = {
|
|
25
|
+
settingValues: [settingValue],
|
|
26
|
+
readOnly: settingValue.readOnly,
|
|
27
|
+
config: settingValue.config,
|
|
28
|
+
environment: settingValue.environment
|
|
29
|
+
};
|
|
30
|
+
return settingValues;
|
|
31
|
+
}), catchError(error => {
|
|
32
|
+
this.loadFailed.emit(error);
|
|
33
|
+
return throwError(error);
|
|
34
|
+
}));
|
|
35
|
+
};
|
|
36
|
+
this.loadSegments = () => {
|
|
37
|
+
return this.createSegmentsService().getSegments(this.productId)
|
|
38
|
+
.pipe(map(segments => {
|
|
39
|
+
this.segments = segments;
|
|
40
|
+
return segments;
|
|
41
|
+
}), catchError(error => {
|
|
42
|
+
return throwError(error);
|
|
43
|
+
}));
|
|
44
|
+
};
|
|
45
|
+
this.handleSave = (model) => {
|
|
46
|
+
if (model.settingValues.length === 0) {
|
|
47
|
+
return of();
|
|
48
|
+
}
|
|
49
|
+
const updateModel = model.settingValues[0];
|
|
50
|
+
return this.createSettingValuesService().replaceSettingValue(this.environmentId, this.settingId, updateModel, model.reason)
|
|
51
|
+
.pipe(map(settingValue => {
|
|
52
|
+
this.settingValue = settingValue;
|
|
53
|
+
const settingValues = {
|
|
54
|
+
settingValues: [settingValue],
|
|
55
|
+
readOnly: settingValue.readOnly,
|
|
56
|
+
config: settingValue.config,
|
|
57
|
+
environment: settingValue.environment
|
|
58
|
+
};
|
|
59
|
+
this.saveSucceeded.emit(settingValues);
|
|
60
|
+
return settingValues;
|
|
61
|
+
}), catchError(error => {
|
|
62
|
+
this.saveFailed.emit(error);
|
|
63
|
+
return throwError(error);
|
|
64
|
+
}));
|
|
65
|
+
};
|
|
66
|
+
this.dashboardBasePath = publicApiService.getDashboardBasePath();
|
|
67
|
+
}
|
|
68
|
+
ngOnInit() {
|
|
69
|
+
}
|
|
70
|
+
itemLoadSucceeded() {
|
|
71
|
+
this.loadSucceeded.emit(true);
|
|
72
|
+
}
|
|
73
|
+
onDeleteSettingRequested(setting) {
|
|
74
|
+
this.deleteSettingRequested.emit({
|
|
75
|
+
setting: setting.setting,
|
|
76
|
+
environment: this.settingValue.environment,
|
|
77
|
+
config: this.settingValue.config
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
onFormValuesChanged() {
|
|
81
|
+
this.formValuesChanged.emit();
|
|
82
|
+
}
|
|
83
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingItemComponent, deps: [{ token: i1.PublicApiService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
84
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: SettingItemComponent, selector: "configcat-setting-item", inputs: { productId: "productId", environmentId: "environmentId", configId: "configId", evaluationVersion: "evaluationVersion", settingId: "settingId", canDeleteSetting: "canDeleteSetting", deleteSettingText: "deleteSettingText", showEnvironmentName: "showEnvironmentName" }, outputs: { deleteSettingRequested: "deleteSettingRequested", loadSucceeded: "loadSucceeded", loadFailed: "loadFailed", saveSucceeded: "saveSucceeded", saveFailed: "saveFailed", formValuesChanged: "formValuesChanged" }, usesInheritance: true, ngImport: i0, template: "<configcat-setting-list [canDeleteSetting]=\"canDeleteSetting\" [onSave]=\"handleSave\"\n [loadSettingValues]=\"loadSettingValues\" [loadSegments]=\"loadSegments\" (loadSucceeded)=\"itemLoadSucceeded()\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" [deleteSettingText]=\"deleteSettingText\"\n [showEnvironmentName]=\"showEnvironmentName\" (formValuesChanged)=\"onFormValuesChanged()\" [productId]=\"productId\"\n [configId]=\"configId\" [environmentId]=\"environmentId\" [dashboardBasePath]=\"dashboardBasePath\">\n</configcat-setting-list>", styles: [".container{font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;background-color:#f3f3f3;border:1px solid rgba(0,0,0,.12);border-radius:4px;margin:1em 0}.container .setting-full{position:relative;display:flex;flex-wrap:nowrap}.container .setting-full .setting-details{display:flex;flex-direction:column;width:400px;padding:1em 0 1em 1em}.container .setting-full .setting-details>*{margin:.5em}.container .setting-full .setting-details .setting-name{flex-direction:row}.container .setting-full .setting-details .setting-name .name{font-weight:700;word-wrap:break-word;max-width:100%}.container .setting-full .setting-details .setting-key{word-wrap:break-word}.container .setting-full .setting-details .description{font-size:.8em}.container .setting-full .setting-details code{background-color:#d3d3d3;padding:3px 6px}.container .setting-full .rules-list{width:100%;padding:1em}.container .setting-full .targeting-button{margin-left:1rem;margin-bottom:1em}.all-other{min-height:40px;justify-content:flex-start;border:1px solid #d5d5d5;border-radius:4px;background-color:#fff;margin:.5em 1em;padding:4px 0 4px .5em}.all-other .chip{background-color:#67b1fc3d}.all-other .served-value{margin-left:auto;min-width:100px}.end{margin-left:auto}.flex{display:flex;flex-wrap:wrap;align-items:center}.show-hide-toggle{margin-left:1em;cursor:pointer}@media (max-width: 1200px){.setting-full .setting-details{width:300px}}@media (max-width: 700px){.setting-full{flex-wrap:wrap}.setting-full .setting-details{padding:.2em 0 .2em .2em}.setting-full .all-other{margin:.5em .3em}}\n"], dependencies: [{ kind: "component", type: i2.SettingListComponent, selector: "configcat-setting-list", inputs: ["productId", "environmentId", "configId", "dashboardBasePath", "canDeleteSetting", "onSave", "loadSettingValues", "loadSegments", "deleteSettingText", "showEnvironmentName"], outputs: ["loadSucceeded", "deleteSettingRequested", "formValuesChanged"] }] }); }
|
|
85
|
+
}
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SettingItemComponent, decorators: [{
|
|
87
|
+
type: Component,
|
|
88
|
+
args: [{ selector: 'configcat-setting-item', template: "<configcat-setting-list [canDeleteSetting]=\"canDeleteSetting\" [onSave]=\"handleSave\"\n [loadSettingValues]=\"loadSettingValues\" [loadSegments]=\"loadSegments\" (loadSucceeded)=\"itemLoadSucceeded()\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" [deleteSettingText]=\"deleteSettingText\"\n [showEnvironmentName]=\"showEnvironmentName\" (formValuesChanged)=\"onFormValuesChanged()\" [productId]=\"productId\"\n [configId]=\"configId\" [environmentId]=\"environmentId\" [dashboardBasePath]=\"dashboardBasePath\">\n</configcat-setting-list>", styles: [".container{font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;background-color:#f3f3f3;border:1px solid rgba(0,0,0,.12);border-radius:4px;margin:1em 0}.container .setting-full{position:relative;display:flex;flex-wrap:nowrap}.container .setting-full .setting-details{display:flex;flex-direction:column;width:400px;padding:1em 0 1em 1em}.container .setting-full .setting-details>*{margin:.5em}.container .setting-full .setting-details .setting-name{flex-direction:row}.container .setting-full .setting-details .setting-name .name{font-weight:700;word-wrap:break-word;max-width:100%}.container .setting-full .setting-details .setting-key{word-wrap:break-word}.container .setting-full .setting-details .description{font-size:.8em}.container .setting-full .setting-details code{background-color:#d3d3d3;padding:3px 6px}.container .setting-full .rules-list{width:100%;padding:1em}.container .setting-full .targeting-button{margin-left:1rem;margin-bottom:1em}.all-other{min-height:40px;justify-content:flex-start;border:1px solid #d5d5d5;border-radius:4px;background-color:#fff;margin:.5em 1em;padding:4px 0 4px .5em}.all-other .chip{background-color:#67b1fc3d}.all-other .served-value{margin-left:auto;min-width:100px}.end{margin-left:auto}.flex{display:flex;flex-wrap:wrap;align-items:center}.show-hide-toggle{margin-left:1em;cursor:pointer}@media (max-width: 1200px){.setting-full .setting-details{width:300px}}@media (max-width: 700px){.setting-full{flex-wrap:wrap}.setting-full .setting-details{padding:.2em 0 .2em .2em}.setting-full .all-other{margin:.5em .3em}}\n"] }]
|
|
89
|
+
}], ctorParameters: () => [{ type: i1.PublicApiService }], propDecorators: { productId: [{
|
|
90
|
+
type: Input
|
|
91
|
+
}], environmentId: [{
|
|
92
|
+
type: Input
|
|
93
|
+
}], configId: [{
|
|
94
|
+
type: Input
|
|
95
|
+
}], evaluationVersion: [{
|
|
96
|
+
type: Input
|
|
97
|
+
}], settingId: [{
|
|
98
|
+
type: Input
|
|
99
|
+
}], canDeleteSetting: [{
|
|
100
|
+
type: Input
|
|
101
|
+
}], deleteSettingText: [{
|
|
102
|
+
type: Input
|
|
103
|
+
}], showEnvironmentName: [{
|
|
104
|
+
type: Input
|
|
105
|
+
}], deleteSettingRequested: [{
|
|
106
|
+
type: Output
|
|
107
|
+
}], loadSucceeded: [{
|
|
108
|
+
type: Output
|
|
109
|
+
}], loadFailed: [{
|
|
110
|
+
type: Output
|
|
111
|
+
}], saveSucceeded: [{
|
|
112
|
+
type: Output
|
|
113
|
+
}], saveFailed: [{
|
|
114
|
+
type: Output
|
|
115
|
+
}], formValuesChanged: [{
|
|
116
|
+
type: Output
|
|
117
|
+
}] } });
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWl0ZW0vc2V0dGluZy1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWl0ZW0vc2V0dGluZy1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE9BQU8sRUFBYyxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFTakQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGFBQWE7SUEyQnJELFlBQ0UsZ0JBQWtDO1FBQ2xDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBckJqQixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEIsc0JBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDckMsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRTFCLDJCQUFzQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoQyxzQkFBaUIsR0FBRyxJQUFJLFlB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QUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBNENELHdCQUF3QixDQUFDLE9BQVk7UUFDbkMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQztZQUMvQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVztZQUMxQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7OEdBbEhVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLG9rQkNiakMsNmpCQUt5Qjs7MkZEUVosb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLHdCQUF3QjtxRkFNekIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUksc0JBQXNCO3NCQUEvQixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUcsaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXZhbHVhdGlvblZlcnNpb24sIFNlZ21lbnRMaXN0TW9kZWwsIFNldHRpbmdGb3JtdWxhTW9kZWwsIFNldHRpbmdWYWx1ZU1vZGVsLCBVcGRhdGVTZXR0aW5nVmFsdWVNb2RlbCB9IGZyb20gJ25nLWNvbmZpZ2NhdC1wdWJsaWNhcGknO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFB1YmxpY0FwaVNlcnZpY2UgfSBmcm9tICcuLi9fc2VydmljZXMnO1xuaW1wb3J0IHsgU2V0dGluZ1ZhbHVlc01vZGVsLCBVcGRhdGVTZXR0aW5nVmFsdWVzTW9kZWwgfSBmcm9tICcuLi9fbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY29uZmlnY2F0LXNldHRpbmctaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZXR0aW5nLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZXR0aW5nLWl0ZW0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTZXR0aW5nSXRlbUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHByb2R1Y3RJZCE6IHN0cmluZztcbiAgQElucHV0KCkgZW52aXJvbm1lbnRJZCE6IHN0cmluZztcbiAgQElucHV0KCkgY29uZmlnSWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGV2YWx1YXRpb25WZXJzaW9uITogRXZhbHVhdGlvblZlcnNpb247XG4gIEBJbnB1dCgpIHNldHRpbmdJZCE6IG51bWJlcjtcblxuICBASW5wdXQoKSBjYW5EZWxldGVTZXR0aW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgZGVsZXRlU2V0dGluZ1RleHQgPSAnRGVsZXRlIHNldHRpbmcnO1xuICBASW5wdXQoKSBzaG93RW52aXJvbm1lbnROYW1lID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgZGVsZXRlU2V0dGluZ1JlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgbG9hZFN1Y2NlZWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGxvYWRGYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzYXZlU3VjY2VlZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2F2ZUZhaWxlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgZm9ybVZhbHVlc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgc2V0dGluZ1ZhbHVlITogU2V0dGluZ1ZhbHVlTW9kZWw7XG4gIHNlZ21lbnRzITogU2VnbWVudExpc3RNb2RlbFtdO1xuICBkYXNoYm9hcmRCYXNlUGF0aDogc3RyaW5nO1xuXG4gIHNldHRpbmdGb3JtdWxhTW9kZWwhOiBTZXR0aW5nRm9ybXVsYU1vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpY0FwaVNlcnZpY2U6IFB1YmxpY0FwaVNlcnZpY2UpIHtcbiAgICBzdXBlcihwdWJsaWNBcGlTZXJ2aWNlKTtcbiAgICB0aGlzLmRhc2hib2FyZEJhc2VQYXRoID0gcHVibGljQXBpU2VydmljZS5nZXREYXNoYm9hcmRCYXNlUGF0aCgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuICBsb2FkU2V0dGluZ1ZhbHVlcyA9ICgpOiBPYnNlcnZhYmxlPFNldHRpbmdWYWx1ZXNNb2RlbD4gPT4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVNldHRpbmdWYWx1ZXNTZXJ2aWNlKCkuZ2V0U2V0dGluZ1ZhbHVlKHRoaXMuZW52aXJvbm1lbnRJZCwgdGhpcy5zZXR0aW5nSWQpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHNldHRpbmdWYWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nVmFsdWUgPSBzZXR0aW5nVmFsdWU7XG5cbiAgICAgICAgICBjb25zdCBzZXR0aW5nVmFsdWVzID0ge1xuICAgICAgICAgICAgc2V0dGluZ1ZhbHVlczogW3NldHRpbmdWYWx1ZV0sXG4gICAgICAgICAgICByZWFkT25seTogc2V0dGluZ1ZhbHVlLnJlYWRPbmx5LFxuICAgICAgICAgICAgY29uZmlnOiBzZXR0aW5nVmFsdWUuY29uZmlnLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHNldHRpbmdWYWx1ZS5lbnZpcm9ubWVudFxuICAgICAgICAgIH0gYXMgU2V0dGluZ1ZhbHVlc01vZGVsO1xuXG4gICAgICAgICAgcmV0dXJuIHNldHRpbmdWYWx1ZXM7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRGYWlsZWQuZW1pdChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGl0ZW1Mb2FkU3VjY2VlZGVkKCkge1xuICAgIHRoaXMubG9hZFN1Y2NlZWRlZC5lbWl0KHRydWUpO1xuICB9XG5cbiAgbG9hZFNlZ21lbnRzID0gKCk6IE9ic2VydmFibGU8U2VnbWVudExpc3RNb2RlbFtdPiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlU2VnbWVudHNTZXJ2aWNlKCkuZ2V0U2VnbWVudHModGhpcy5wcm9kdWN0SWQpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHNlZ21lbnRzID0+IHtcbiAgICAgICAgICB0aGlzLnNlZ21lbnRzID0gc2VnbWVudHM7XG4gICAgICAgICAgcmV0dXJuIHNlZ21lbnRzO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGhhbmRsZVNhdmUgPSAobW9kZWw6IFVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbCk6IE9ic2VydmFibGU8U2V0dGluZ1ZhbHVlc01vZGVsPiA9PiB7XG4gICAgaWYgKG1vZGVsLnNldHRpbmdWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlTW9kZWwgPSBtb2RlbC5zZXR0aW5nVmFsdWVzWzBdIGFzIFVwZGF0ZVNldHRpbmdWYWx1ZU1vZGVsO1xuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlU2V0dGluZ1ZhbHVlc1NlcnZpY2UoKS5yZXBsYWNlU2V0dGluZ1ZhbHVlKFxuICAgICAgdGhpcy5lbnZpcm9ubWVudElkLCB0aGlzLnNldHRpbmdJZCwgdXBkYXRlTW9kZWwsIG1vZGVsLnJlYXNvbilcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoc2V0dGluZ1ZhbHVlID0+IHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdWYWx1ZSA9IHNldHRpbmdWYWx1ZTtcblxuICAgICAgICAgIGNvbnN0IHNldHRpbmdWYWx1ZXMgPSB7XG4gICAgICAgICAgICBzZXR0aW5nVmFsdWVzOiBbc2V0dGluZ1ZhbHVlXSxcbiAgICAgICAgICAgIHJlYWRPbmx5OiBzZXR0aW5nVmFsdWUucmVhZE9ubHksXG4gICAgICAgICAgICBjb25maWc6IHNldHRpbmdWYWx1ZS5jb25maWcsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogc2V0dGluZ1ZhbHVlLmVudmlyb25tZW50XG4gICAgICAgICAgfSBhcyBTZXR0aW5nVmFsdWVzTW9kZWw7XG5cbiAgICAgICAgICB0aGlzLnNhdmVTdWNjZWVkZWQuZW1pdChzZXR0aW5nVmFsdWVzKTtcbiAgICAgICAgICByZXR1cm4gc2V0dGluZ1ZhbHVlcztcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuc2F2ZUZhaWxlZC5lbWl0KGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgb25EZWxldGVTZXR0aW5nUmVxdWVzdGVkKHNldHRpbmc6IGFueSkge1xuICAgIHRoaXMuZGVsZXRlU2V0dGluZ1JlcXVlc3RlZC5lbWl0KHtcbiAgICAgIHNldHRpbmc6IHNldHRpbmcuc2V0dGluZyxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLnNldHRpbmdWYWx1ZS5lbnZpcm9ubWVudCxcbiAgICAgIGNvbmZpZzogdGhpcy5zZXR0aW5nVmFsdWUuY29uZmlnXG4gICAgfSk7XG4gIH1cblxuICBvbkZvcm1WYWx1ZXNDaGFuZ2VkKCkge1xuICAgIHRoaXMuZm9ybVZhbHVlc0NoYW5nZWQuZW1pdCgpO1xuICB9XG59XG4iLCI8Y29uZmlnY2F0LXNldHRpbmctbGlzdCBbY2FuRGVsZXRlU2V0dGluZ109XCJjYW5EZWxldGVTZXR0aW5nXCIgW29uU2F2ZV09XCJoYW5kbGVTYXZlXCJcbiAgICBbbG9hZFNldHRpbmdWYWx1ZXNdPVwibG9hZFNldHRpbmdWYWx1ZXNcIiBbbG9hZFNlZ21lbnRzXT1cImxvYWRTZWdtZW50c1wiIChsb2FkU3VjY2VlZGVkKT1cIml0ZW1Mb2FkU3VjY2VlZGVkKClcIlxuICAgIChkZWxldGVTZXR0aW5nUmVxdWVzdGVkKT1cIm9uRGVsZXRlU2V0dGluZ1JlcXVlc3RlZCgkZXZlbnQpXCIgW2RlbGV0ZVNldHRpbmdUZXh0XT1cImRlbGV0ZVNldHRpbmdUZXh0XCJcbiAgICBbc2hvd0Vudmlyb25tZW50TmFtZV09XCJzaG93RW52aXJvbm1lbnROYW1lXCIgKGZvcm1WYWx1ZXNDaGFuZ2VkKT1cIm9uRm9ybVZhbHVlc0NoYW5nZWQoKVwiIFtwcm9kdWN0SWRdPVwicHJvZHVjdElkXCJcbiAgICBbY29uZmlnSWRdPVwiY29uZmlnSWRcIiBbZW52aXJvbm1lbnRJZF09XCJlbnZpcm9ubWVudElkXCIgW2Rhc2hib2FyZEJhc2VQYXRoXT1cImRhc2hib2FyZEJhc2VQYXRoXCI+XG48L2NvbmZpZ2NhdC1zZXR0aW5nLWxpc3Q+Il19
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { SettingType } from 'ng-configcat-publicapi';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@angular/forms";
|
|
6
|
+
import * as i3 from "@angular/material/icon";
|
|
7
|
+
import * as i4 from "@angular/material/tooltip";
|
|
8
|
+
import * as i5 from "@angular/material/chips";
|
|
9
|
+
import * as i6 from "../value/value.component";
|
|
10
|
+
export class RolloutPercentageItemsComponent {
|
|
11
|
+
setting() {
|
|
12
|
+
return this.formGroup.get('setting')?.value;
|
|
13
|
+
}
|
|
14
|
+
rolloutRules() {
|
|
15
|
+
return this.formGroup.get('rolloutRules');
|
|
16
|
+
}
|
|
17
|
+
rolloutPercentageItems() {
|
|
18
|
+
return this.formGroup.get('rolloutPercentageItems');
|
|
19
|
+
}
|
|
20
|
+
rolloutPercentageItemsSum() {
|
|
21
|
+
return this.formGroup.get('rolloutPercentageItemsSum');
|
|
22
|
+
}
|
|
23
|
+
value(rolloutPercentageItem) {
|
|
24
|
+
return this.setting().settingType === SettingType.Boolean ?
|
|
25
|
+
rolloutPercentageItem.get('valueDisabled') :
|
|
26
|
+
rolloutPercentageItem.get('value');
|
|
27
|
+
}
|
|
28
|
+
constructor() {
|
|
29
|
+
this.readOnly = false;
|
|
30
|
+
this.SettingType = SettingType;
|
|
31
|
+
}
|
|
32
|
+
percentageChanged(index) {
|
|
33
|
+
if (this.rolloutPercentageItems().controls[index].value.percentage < 0) {
|
|
34
|
+
this.rolloutPercentageItems().controls[index].controls.percentage.setValue(0);
|
|
35
|
+
}
|
|
36
|
+
if (this.rolloutPercentageItems().controls[index].value.percentage > 100) {
|
|
37
|
+
this.rolloutPercentageItems().controls[index].controls.percentage.setValue(100);
|
|
38
|
+
}
|
|
39
|
+
if (this.rolloutPercentageItems().controls.length === 2) {
|
|
40
|
+
this.rolloutPercentageItems().controls[1 - index].controls.percentage
|
|
41
|
+
.setValue(100 - this.rolloutPercentageItems().controls[index].value.percentage);
|
|
42
|
+
}
|
|
43
|
+
this.updateSum();
|
|
44
|
+
}
|
|
45
|
+
updateSum() {
|
|
46
|
+
if (this.rolloutPercentageItems().controls.length === 0) {
|
|
47
|
+
this.rolloutPercentageItemsSum().setValue(100);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.rolloutPercentageItemsSum().setValue(this.rolloutPercentageItems().controls.map(v => v.value.percentage)
|
|
51
|
+
.reduce((a, b) => a + b));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
removeRolloutPercentageItem(index) {
|
|
55
|
+
this.rolloutPercentageItems().removeAt(index);
|
|
56
|
+
this.rolloutPercentageItems().markAsDirty();
|
|
57
|
+
this.updateSum();
|
|
58
|
+
}
|
|
59
|
+
removeAll() {
|
|
60
|
+
this.rolloutPercentageItems().clear();
|
|
61
|
+
this.rolloutPercentageItems().markAsDirty();
|
|
62
|
+
this.updateSum();
|
|
63
|
+
}
|
|
64
|
+
getRolloutPercentageItemFormGroups() {
|
|
65
|
+
return this.rolloutPercentageItems()?.controls?.map(c => c);
|
|
66
|
+
}
|
|
67
|
+
getPercentageFormControl(rolloutPercentageItem) {
|
|
68
|
+
return rolloutPercentageItem.controls.percentage;
|
|
69
|
+
}
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: RolloutPercentageItemsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: RolloutPercentageItemsComponent, selector: "configcat-rollout-percentage-items", inputs: { formGroup: "formGroup", readOnly: "readOnly" }, ngImport: i0, template: "<div class=\"percentage-wrapper\" [formGroup]=\"formGroup\">\n\n <div class=\"if\" *ngIf=\"rolloutRules().controls.length > 0\">\n <mat-chip-set>\n <mat-chip class=\"chip\">ELSE IF</mat-chip>\n </mat-chip-set>\n </div>\n <div class=\"grow\">\n <div class=\"percentage-row flex\"\n *ngFor=\"let rolloutPercentageItem of getRolloutPercentageItemFormGroups(); let i = index\">\n <div class=\"flex\">\n <input type=\"number\" [formControl]=\"getPercentageFormControl(rolloutPercentageItem)\"\n (input)=\"percentageChanged(i)\">%\n <span class=\"users\">of <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </span>\n </div>\n\n <div class=\"delete-option\" matTooltip=\"Remove this % option\"\n *ngIf=\"!readOnly && rolloutPercentageItems().controls.length > 2\"\n (click)=\"removeRolloutPercentageItem(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n\n <span matTooltip=\"The sum of percentages must be equal to 100.\" matTooltipPosition=\"above\"\n *ngIf=\"(i === rolloutPercentageItems().controls.length -1) && (rolloutPercentageItemsSum().invalid)\">\n <mat-icon color=\"warn\">\n error_outline\n </mat-icon>\n </span>\n\n <div class=\"value flex\">\n <span class=\"value-name\" *ngIf=\"setting().settingType !== SettingType.Boolean\">Served value:</span>\n <configcat-value class=\"served-value\" [valueFormControl]=\"value(rolloutPercentageItem)\"\n [setting]=\"setting()\">\n </configcat-value>\n </div>\n <div class=\"delete\" matTooltip=\"Remove % options\" (click)=\"removeAll()\" *ngIf=\"!readOnly\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n </div>\n</div>", styles: [".percentage-wrapper{border:1px solid #d5d5d5;background-color:#fff;margin:.5em 1em;position:relative;padding:.5em 0;display:flex;flex-wrap:wrap}.percentage-wrapper .delete{position:absolute;cursor:pointer;top:-9px;right:-10px;z-index:999;border-radius:50%;background-color:#fff;height:20px;width:20px;color:#ed5251}.percentage-wrapper .delete mat-icon{font-size:20px;height:20px;width:20px;opacity:.5}.percentage-wrapper .delete:hover mat-icon{opacity:1}.percentage-wrapper .delete-option{color:#ed5251;cursor:pointer;margin-left:1rem;margin-top:4px}.percentage-wrapper .delete-option:hover mat-icon{opacity:1}.percentage-wrapper .delete-option mat-icon{opacity:.5;font-size:20px}.if{display:flex;align-items:center}.if>*{margin:0 .5em}.if .spacing{margin-right:44px}.if .chip{font-size:12px;background-color:#67b1fc3d}.grow{flex-grow:1}.percentage-row{min-height:40px;margin-left:.5em}.flex{display:flex;flex-wrap:wrap;align-items:center}.value{margin-left:auto}.value .value-name{display:none}input{background-color:#fff;border:1px solid #e5e5e5;min-height:28px;width:40px;margin-top:3px;margin-right:5px;padding:0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300}input:focus{outline-color:#e5e5e5;outline-offset:-1px}.users{margin-left:20px}@media (max-width: 920px){.value{min-width:0!important}.value .served-value{margin:3px 7px 3px 0}}@media (max-width: 650px){.users{margin-left:5px}}@media (max-width: 540px){.users{font-size:12px}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled", "tabIndex"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i5.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i6.ValueComponent, selector: "configcat-value", inputs: ["valueFormControl", "setting"] }] }); }
|
|
72
|
+
}
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: RolloutPercentageItemsComponent, decorators: [{
|
|
74
|
+
type: Component,
|
|
75
|
+
args: [{ selector: 'configcat-rollout-percentage-items', template: "<div class=\"percentage-wrapper\" [formGroup]=\"formGroup\">\n\n <div class=\"if\" *ngIf=\"rolloutRules().controls.length > 0\">\n <mat-chip-set>\n <mat-chip class=\"chip\">ELSE IF</mat-chip>\n </mat-chip-set>\n </div>\n <div class=\"grow\">\n <div class=\"percentage-row flex\"\n *ngFor=\"let rolloutPercentageItem of getRolloutPercentageItemFormGroups(); let i = index\">\n <div class=\"flex\">\n <input type=\"number\" [formControl]=\"getPercentageFormControl(rolloutPercentageItem)\"\n (input)=\"percentageChanged(i)\">%\n <span class=\"users\">of <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </span>\n </div>\n\n <div class=\"delete-option\" matTooltip=\"Remove this % option\"\n *ngIf=\"!readOnly && rolloutPercentageItems().controls.length > 2\"\n (click)=\"removeRolloutPercentageItem(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n\n <span matTooltip=\"The sum of percentages must be equal to 100.\" matTooltipPosition=\"above\"\n *ngIf=\"(i === rolloutPercentageItems().controls.length -1) && (rolloutPercentageItemsSum().invalid)\">\n <mat-icon color=\"warn\">\n error_outline\n </mat-icon>\n </span>\n\n <div class=\"value flex\">\n <span class=\"value-name\" *ngIf=\"setting().settingType !== SettingType.Boolean\">Served value:</span>\n <configcat-value class=\"served-value\" [valueFormControl]=\"value(rolloutPercentageItem)\"\n [setting]=\"setting()\">\n </configcat-value>\n </div>\n <div class=\"delete\" matTooltip=\"Remove % options\" (click)=\"removeAll()\" *ngIf=\"!readOnly\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n </div>\n</div>", styles: [".percentage-wrapper{border:1px solid #d5d5d5;background-color:#fff;margin:.5em 1em;position:relative;padding:.5em 0;display:flex;flex-wrap:wrap}.percentage-wrapper .delete{position:absolute;cursor:pointer;top:-9px;right:-10px;z-index:999;border-radius:50%;background-color:#fff;height:20px;width:20px;color:#ed5251}.percentage-wrapper .delete mat-icon{font-size:20px;height:20px;width:20px;opacity:.5}.percentage-wrapper .delete:hover mat-icon{opacity:1}.percentage-wrapper .delete-option{color:#ed5251;cursor:pointer;margin-left:1rem;margin-top:4px}.percentage-wrapper .delete-option:hover mat-icon{opacity:1}.percentage-wrapper .delete-option mat-icon{opacity:.5;font-size:20px}.if{display:flex;align-items:center}.if>*{margin:0 .5em}.if .spacing{margin-right:44px}.if .chip{font-size:12px;background-color:#67b1fc3d}.grow{flex-grow:1}.percentage-row{min-height:40px;margin-left:.5em}.flex{display:flex;flex-wrap:wrap;align-items:center}.value{margin-left:auto}.value .value-name{display:none}input{background-color:#fff;border:1px solid #e5e5e5;min-height:28px;width:40px;margin-top:3px;margin-right:5px;padding:0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300}input:focus{outline-color:#e5e5e5;outline-offset:-1px}.users{margin-left:20px}@media (max-width: 920px){.value{min-width:0!important}.value .served-value{margin:3px 7px 3px 0}}@media (max-width: 650px){.users{margin-left:5px}}@media (max-width: 540px){.users{font-size:12px}}\n"] }]
|
|
76
|
+
}], ctorParameters: () => [], propDecorators: { formGroup: [{
|
|
77
|
+
type: Input
|
|
78
|
+
}], readOnly: [{
|
|
79
|
+
type: Input
|
|
80
|
+
}] } });
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy9yb2xsb3V0LXBlcmNlbnRhZ2UtaXRlbXMvcm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy9yb2xsb3V0LXBlcmNlbnRhZ2UtaXRlbXMvcm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7QUFPckQsTUFBTSxPQUFPLCtCQUErQjtJQU8xQyxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDOUMsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBcUIsQ0FBQztJQUNoRSxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQXFCLENBQUM7SUFDMUUsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUF1QixDQUFDO0lBQy9FLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXVDO1FBQzNDLE9BQU8sSUFB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LENBQXFCLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsd0JBQXdCLENBQUMscUJBQTBCO1FBQ2pELE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLFVBQWdDLENBQUM7SUFDekUsQ0FBQzs4R0E1RVUsK0JBQStCO2tHQUEvQiwrQkFBK0Isb0lDVDVDLHdpRUEwQ007OzJGRGpDTywrQkFBK0I7a0JBTDNDLFNBQVM7K0JBQ0Usb0NBQW9DO3dEQU1yQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTZXR0aW5nVHlwZSB9IGZyb20gJ25nLWNvbmZpZ2NhdC1wdWJsaWNhcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb25maWdjYXQtcm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvbGxvdXQtcGVyY2VudGFnZS1pdGVtcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JvbGxvdXQtcGVyY2VudGFnZS1pdGVtcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJvbGxvdXRQZXJjZW50YWdlSXRlbXNDb21wb25lbnQge1xuXG4gIEBJbnB1dCgpIGZvcm1Hcm91cCE6IFVudHlwZWRGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XG4gIFNldHRpbmdUeXBlID0gU2V0dGluZ1R5cGU7XG5cblxuICBzZXR0aW5nKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3NldHRpbmcnKT8udmFsdWU7XG4gIH1cblxuICByb2xsb3V0UnVsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgncm9sbG91dFJ1bGVzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgfVxuXG4gIHJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgncm9sbG91dFBlcmNlbnRhZ2VJdGVtcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gIH1cblxuICByb2xsb3V0UGVyY2VudGFnZUl0ZW1zU3VtKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3JvbGxvdXRQZXJjZW50YWdlSXRlbXNTdW0nKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICB2YWx1ZShyb2xsb3V0UGVyY2VudGFnZUl0ZW06IFVudHlwZWRGb3JtR3JvdXApOiBVbnR5cGVkRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmcoKS5zZXR0aW5nVHlwZSA9PT0gU2V0dGluZ1R5cGUuQm9vbGVhbiA/XG4gICAgICByb2xsb3V0UGVyY2VudGFnZUl0ZW0uZ2V0KCd2YWx1ZURpc2FibGVkJykgYXMgVW50eXBlZEZvcm1Db250cm9sIDpcbiAgICAgIHJvbGxvdXRQZXJjZW50YWdlSXRlbS5nZXQoJ3ZhbHVlJykgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBwZXJjZW50YWdlQ2hhbmdlZChpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLmNvbnRyb2xzW2luZGV4XS52YWx1ZS5wZXJjZW50YWdlIDwgMCkge1xuICAgICAgKHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLmNvbnRyb2xzW2luZGV4XSBhcyBVbnR5cGVkRm9ybUdyb3VwKS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDApO1xuICAgIH1cbiAgICBpZiAodGhpcy5yb2xsb3V0UGVyY2VudGFnZUl0ZW1zKCkuY29udHJvbHNbaW5kZXhdLnZhbHVlLnBlcmNlbnRhZ2UgPiAxMDApIHtcbiAgICAgICh0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9sc1tpbmRleF0gYXMgVW50eXBlZEZvcm1Hcm91cCkuY29udHJvbHMucGVyY2VudGFnZS5zZXRWYWx1ZSgxMDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5sZW5ndGggPT09IDIpIHtcbiAgICAgICh0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9sc1sxIC0gaW5kZXhdIGFzIFVudHlwZWRGb3JtR3JvdXApLmNvbnRyb2xzLnBlcmNlbnRhZ2VcbiAgICAgICAgLnNldFZhbHVlKDEwMCAtIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLmNvbnRyb2xzW2luZGV4XS52YWx1ZS5wZXJjZW50YWdlKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN1bSgpO1xuICB9XG5cbiAgdXBkYXRlU3VtKCkge1xuICAgIGlmICh0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtc1N1bSgpLnNldFZhbHVlKDEwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtc1N1bSgpLnNldFZhbHVlKFxuICAgICAgICB0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5tYXAodiA9PiB2LnZhbHVlLnBlcmNlbnRhZ2UpXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVJvbGxvdXRQZXJjZW50YWdlSXRlbShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5yb2xsb3V0UGVyY2VudGFnZUl0ZW1zKCkucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy51cGRhdGVTdW0oKTtcbiAgfVxuXG4gIHJlbW92ZUFsbCgpIHtcbiAgICB0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jbGVhcigpO1xuICAgIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy51cGRhdGVTdW0oKTtcbiAgfVxuXG4gIGdldFJvbGxvdXRQZXJjZW50YWdlSXRlbUZvcm1Hcm91cHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpPy5jb250cm9scz8ubWFwKGMgPT4gYyBhcyBVbnR5cGVkRm9ybUdyb3VwKTtcbiAgfVxuXG4gIGdldFBlcmNlbnRhZ2VGb3JtQ29udHJvbChyb2xsb3V0UGVyY2VudGFnZUl0ZW06IGFueSkge1xuICAgIHJldHVybiByb2xsb3V0UGVyY2VudGFnZUl0ZW0uY29udHJvbHMucGVyY2VudGFnZSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwZXJjZW50YWdlLXdyYXBwZXJcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImlmXCIgKm5nSWY9XCJyb2xsb3V0UnVsZXMoKS5jb250cm9scy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxtYXQtY2hpcC1zZXQ+XG4gICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9XCJjaGlwXCI+RUxTRSBJRjwvbWF0LWNoaXA+XG4gICAgICAgIDwvbWF0LWNoaXAtc2V0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJncm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlLXJvdyBmbGV4XCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb2xsb3V0UGVyY2VudGFnZUl0ZW0gb2YgZ2V0Um9sbG91dFBlcmNlbnRhZ2VJdGVtRm9ybUdyb3VwcygpOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgW2Zvcm1Db250cm9sXT1cImdldFBlcmNlbnRhZ2VGb3JtQ29udHJvbChyb2xsb3V0UGVyY2VudGFnZUl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInBlcmNlbnRhZ2VDaGFuZ2VkKGkpXCI+JVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNlcnNcIj5vZiA8YSBocmVmPVwiaHR0cHM6Ly9jb25maWdjYXQuY29tL2RvY3MvYWR2YW5jZWQvdXNlci1vYmplY3RcIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPnVzZXJzPC9hPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlLW9wdGlvblwiIG1hdFRvb2x0aXA9XCJSZW1vdmUgdGhpcyAlIG9wdGlvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhcmVhZE9ubHkgJiYgcm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLmNvbnRyb2xzLmxlbmd0aCA+IDJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVSb2xsb3V0UGVyY2VudGFnZUl0ZW0oaSlcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8c3BhbiBtYXRUb29sdGlwPVwiVGhlIHN1bSBvZiBwZXJjZW50YWdlcyBtdXN0IGJlIGVxdWFsIHRvIDEwMC5cIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIoaSA9PT0gcm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLmNvbnRyb2xzLmxlbmd0aCAtMSkgJiYgKHJvbGxvdXRQZXJjZW50YWdlSXRlbXNTdW0oKS5pbnZhbGlkKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cIndhcm5cIj5cbiAgICAgICAgICAgICAgICAgICAgZXJyb3Jfb3V0bGluZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZSBmbGV4XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZS1uYW1lXCIgKm5nSWY9XCJzZXR0aW5nKCkuc2V0dGluZ1R5cGUgIT09IFNldHRpbmdUeXBlLkJvb2xlYW5cIj5TZXJ2ZWQgdmFsdWU6PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxjb25maWdjYXQtdmFsdWUgY2xhc3M9XCJzZXJ2ZWQtdmFsdWVcIiBbdmFsdWVGb3JtQ29udHJvbF09XCJ2YWx1ZShyb2xsb3V0UGVyY2VudGFnZUl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgW3NldHRpbmddPVwic2V0dGluZygpXCI+XG4gICAgICAgICAgICAgICAgPC9jb25maWdjYXQtdmFsdWU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGVcIiBtYXRUb29sdGlwPVwiUmVtb3ZlICUgb3B0aW9uc1wiIChjbGljayk9XCJyZW1vdmVBbGwoKVwiICpuZ0lmPVwiIXJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
|