ng-configcat-publicapi-ui 4.2.2 → 5.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.
Files changed (155) hide show
  1. package/README.md +2 -2
  2. package/fesm2022/ng-configcat-publicapi-ui.mjs +4240 -3534
  3. package/fesm2022/ng-configcat-publicapi-ui.mjs.map +1 -1
  4. package/index.d.ts +476 -3
  5. package/package.json +11 -10
  6. package/src/css/button.scss +83 -0
  7. package/src/css/controls.scss +390 -0
  8. package/src/css/dialog.scss +63 -0
  9. package/src/css/icon.scss +7 -0
  10. package/src/css/slider.scss +82 -0
  11. package/src/css/snackbar.scss +16 -0
  12. package/src/css/table.scss +142 -0
  13. package/src/css/theme.scss +47 -0
  14. package/src/css/tooltip.scss +12 -0
  15. package/src/css/variables.scss +324 -0
  16. package/src/css/vars/auth.scss +24 -0
  17. package/src/css/vars/banner.scss +116 -0
  18. package/src/css/vars/box.scss +48 -0
  19. package/src/css/vars/config-overview.scss +27 -0
  20. package/src/css/vars/flag.scss +146 -0
  21. package/src/css/vars/header.scss +24 -0
  22. package/src/css/vars/icon.scss +33 -0
  23. package/src/css/vars/logo.scss +19 -0
  24. package/src/css/vars/notification.scss +38 -0
  25. package/src/css/vars/overview.scss +51 -0
  26. package/src/css/vars/prism.scss +44 -0
  27. package/src/css/vars/sidenav.scss +42 -0
  28. package/src/css/vars/theme.scss +78 -0
  29. package/src/public-api.scss +208 -0
  30. package/esm2022/lib/_directives/index.mjs +0 -2
  31. package/esm2022/lib/_directives/input-display-normalizer.directive.mjs +0 -38
  32. package/esm2022/lib/_models/deleteSettingModel.mjs +0 -2
  33. package/esm2022/lib/_models/flag-state.mjs +0 -2
  34. package/esm2022/lib/_models/index.mjs +0 -4
  35. package/esm2022/lib/_models/setting-value-formgroup.mjs +0 -2
  36. package/esm2022/lib/_models/settingValuesModel.mjs +0 -2
  37. package/esm2022/lib/_models/updateSettingValuesModel.mjs +0 -2
  38. package/esm2022/lib/_models/user-comparator.mjs +0 -100
  39. package/esm2022/lib/_services/app-data-adapter.mjs +0 -18
  40. package/esm2022/lib/_services/comparison-value-list-helper.mjs +0 -72
  41. package/esm2022/lib/_services/date-helper.mjs +0 -56
  42. package/esm2022/lib/_services/form-generator.mjs +0 -359
  43. package/esm2022/lib/_services/form-helper.mjs +0 -163
  44. package/esm2022/lib/_services/index.mjs +0 -3
  45. package/esm2022/lib/_services/messaging.service.mjs +0 -26
  46. package/esm2022/lib/_services/platform-helper.mjs +0 -7
  47. package/esm2022/lib/_services/public-api.service.mjs +0 -77
  48. package/esm2022/lib/_services/setting-list-form-helper.mjs +0 -171
  49. package/esm2022/lib/_services/tracking.directive.mjs +0 -16
  50. package/esm2022/lib/ace-editor/ace-editor.component.mjs +0 -137
  51. package/esm2022/lib/authorization/authorization.component.mjs +0 -62
  52. package/esm2022/lib/base/base-select.component.mjs +0 -27
  53. package/esm2022/lib/base/base.component.mjs +0 -48
  54. package/esm2022/lib/bootstrap.mjs +0 -11
  55. package/esm2022/lib/configuration.mjs +0 -14
  56. package/esm2022/lib/dialogs/confirmation-dialog/confirmation-dialog.mjs +0 -28
  57. package/esm2022/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.mjs +0 -27
  58. package/esm2022/lib/dialogs/expand-dialog/expand-dialog.component.mjs +0 -80
  59. package/esm2022/lib/dialogs/info-dialog/info-dialog.mjs +0 -29
  60. package/esm2022/lib/dialogs/reason-dialog/reason-dialog.component.mjs +0 -36
  61. package/esm2022/lib/dialogs/reroute-dialog/reroute-dialog.mjs +0 -28
  62. package/esm2022/lib/dialogs/save-snackbar/save-snackbar.component.mjs +0 -14
  63. package/esm2022/lib/ng-configcat-publicapi-ui.module.mjs +0 -288
  64. package/esm2022/lib/selects/config-select/config-select.component.mjs +0 -60
  65. package/esm2022/lib/selects/environment-select/environment-select.component.mjs +0 -47
  66. package/esm2022/lib/selects/product-select/product-select.component.mjs +0 -40
  67. package/esm2022/lib/selects/setting-select/setting-select.component.mjs +0 -47
  68. package/esm2022/lib/setting-item/setting-item.component.mjs +0 -118
  69. package/esm2022/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +0 -81
  70. package/esm2022/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +0 -293
  71. package/esm2022/lib/setting-list/setting/setting.component.mjs +0 -136
  72. package/esm2022/lib/setting-list/setting/value/value.component.mjs +0 -37
  73. package/esm2022/lib/setting-list/setting-list.component.mjs +0 -194
  74. package/esm2022/lib/v2/feature-flag/date-time-picker/date-time-picker.component.mjs +0 -123
  75. package/esm2022/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.mjs +0 -30
  76. package/esm2022/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.mjs +0 -220
  77. package/esm2022/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.mjs +0 -61
  78. package/esm2022/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.mjs +0 -72
  79. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.mjs +0 -25
  80. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.mjs +0 -105
  81. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.mjs +0 -75
  82. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.mjs +0 -48
  83. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.mjs +0 -113
  84. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.mjs +0 -251
  85. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.mjs +0 -444
  86. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.mjs +0 -84
  87. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.mjs +0 -129
  88. package/esm2022/lib/v2/feature-flag/feature-flag.component.mjs +0 -190
  89. package/esm2022/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.mjs +0 -65
  90. package/esm2022/lib/v2/feature-flag-item.component.mjs +0 -330
  91. package/esm2022/ng-configcat-publicapi-ui.mjs +0 -5
  92. package/esm2022/public-api.mjs +0 -15
  93. package/lib/_directives/index.d.ts +0 -1
  94. package/lib/_directives/input-display-normalizer.directive.d.ts +0 -13
  95. package/lib/_models/deleteSettingModel.d.ts +0 -6
  96. package/lib/_models/flag-state.d.ts +0 -20
  97. package/lib/_models/index.d.ts +0 -3
  98. package/lib/_models/setting-value-formgroup.d.ts +0 -69
  99. package/lib/_models/settingValuesModel.d.ts +0 -11
  100. package/lib/_models/updateSettingValuesModel.d.ts +0 -7
  101. package/lib/_models/user-comparator.d.ts +0 -84
  102. package/lib/_services/app-data-adapter.d.ts +0 -7
  103. package/lib/_services/comparison-value-list-helper.d.ts +0 -17
  104. package/lib/_services/date-helper.d.ts +0 -6
  105. package/lib/_services/form-generator.d.ts +0 -59
  106. package/lib/_services/form-helper.d.ts +0 -21
  107. package/lib/_services/index.d.ts +0 -2
  108. package/lib/_services/messaging.service.d.ts +0 -12
  109. package/lib/_services/platform-helper.d.ts +0 -3
  110. package/lib/_services/public-api.service.d.ts +0 -21
  111. package/lib/_services/setting-list-form-helper.d.ts +0 -19
  112. package/lib/_services/tracking.directive.d.ts +0 -6
  113. package/lib/ace-editor/ace-editor.component.d.ts +0 -32
  114. package/lib/authorization/authorization.component.d.ts +0 -21
  115. package/lib/base/base-select.component.d.ts +0 -10
  116. package/lib/base/base.component.d.ts +0 -18
  117. package/lib/bootstrap.d.ts +0 -13
  118. package/lib/configuration.d.ts +0 -9
  119. package/lib/dialogs/confirmation-dialog/confirmation-dialog.d.ts +0 -19
  120. package/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.d.ts +0 -17
  121. package/lib/dialogs/expand-dialog/expand-dialog.component.d.ts +0 -25
  122. package/lib/dialogs/info-dialog/info-dialog.d.ts +0 -17
  123. package/lib/dialogs/reason-dialog/reason-dialog.component.d.ts +0 -15
  124. package/lib/dialogs/reroute-dialog/reroute-dialog.d.ts +0 -20
  125. package/lib/dialogs/save-snackbar/save-snackbar.component.d.ts +0 -8
  126. package/lib/ng-configcat-publicapi-ui.module.d.ts +0 -75
  127. package/lib/selects/config-select/config-select.component.d.ts +0 -17
  128. package/lib/selects/environment-select/environment-select.component.d.ts +0 -17
  129. package/lib/selects/product-select/product-select.component.d.ts +0 -14
  130. package/lib/selects/setting-select/setting-select.component.d.ts +0 -17
  131. package/lib/setting-item/setting-item.component.d.ts +0 -37
  132. package/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.d.ts +0 -27
  133. package/lib/setting-list/setting/rollout-rules/rollout-rules.component.d.ts +0 -61
  134. package/lib/setting-list/setting/setting.component.d.ts +0 -43
  135. package/lib/setting-list/setting/value/value.component.d.ts +0 -20
  136. package/lib/setting-list/setting-list.component.d.ts +0 -53
  137. package/lib/v2/feature-flag/date-time-picker/date-time-picker.component.d.ts +0 -25
  138. package/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.d.ts +0 -27
  139. package/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.d.ts +0 -41
  140. package/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.d.ts +0 -18
  141. package/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.d.ts +0 -30
  142. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.d.ts +0 -10
  143. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.d.ts +0 -27
  144. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.d.ts +0 -36
  145. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.d.ts +0 -21
  146. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.d.ts +0 -79
  147. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.d.ts +0 -63
  148. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.d.ts +0 -94
  149. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.d.ts +0 -31
  150. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.d.ts +0 -33
  151. package/lib/v2/feature-flag/feature-flag.component.d.ts +0 -49
  152. package/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.d.ts +0 -28
  153. package/lib/v2/feature-flag-item.component.d.ts +0 -66
  154. package/public-api.d.ts +0 -11
  155. package/public-api.scss +0 -350
@@ -1,84 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { FormHelper, SettingType } from '../../../../../bootstrap';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../../../../bootstrap";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/forms";
7
- import * as i4 from "@angular/material/form-field";
8
- import * as i5 from "@angular/material/button";
9
- import * as i6 from "@angular/material/input";
10
- import * as i7 from "@angular/material/icon";
11
- import * as i8 from "@angular/material/tooltip";
12
- import * as i9 from "../../../../../_directives/input-display-normalizer.directive";
13
- import * as i10 from "../../feature-flag-value/feature-flag-value.component";
14
- export class PercentageOptionsComponent {
15
- constructor(formGenerator) {
16
- this.formGenerator = formGenerator;
17
- this.lastPercentageOptionLeft = new EventEmitter();
18
- this.subscriptionLimitReached = new EventEmitter();
19
- this.changePercentageEvaluationAttributeRequested = new EventEmitter();
20
- this.SettingType = SettingType;
21
- this.FormHelper = FormHelper;
22
- }
23
- addOption() {
24
- if (this.formArray.length >= this.featureFlagLimitations.maxPercentageOptionCount) {
25
- this.subscriptionLimitReached.emit();
26
- return;
27
- }
28
- this.formArray.push(this.formGenerator.generatePercentageOptionFormGroup({
29
- percentage: 0,
30
- value: this.formGenerator.generateDefaultValue(this.flagState.settingValue.setting.settingType)
31
- }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations));
32
- this.formArray.markAsDirty();
33
- }
34
- remove(index) {
35
- this.formArray.removeAt(index);
36
- this.formArray.markAsDirty();
37
- if (this.formArray.length < 2) {
38
- this.lastPercentageOptionLeft.emit();
39
- }
40
- }
41
- percentageChanged(index) {
42
- if (this.formArray.controls[index].value.percentage < 0) {
43
- this.formArray.controls[index].controls.percentage.setValue(0);
44
- }
45
- if (this.formArray.controls[index].value.percentage > 100) {
46
- this.formArray.controls[index].controls.percentage.setValue(100);
47
- }
48
- if (this.formArray.controls.length === 2) {
49
- this.formArray.controls[1 - index].controls.percentage
50
- .setValue(100 - this.formArray.controls[index].value.percentage);
51
- }
52
- }
53
- changePercentageEvaluationAttribute() {
54
- this.changePercentageEvaluationAttributeRequested.emit();
55
- }
56
- getPercentageEvaluationAttribute() {
57
- return !this.percentageEvaluationAttribute ? 'Identifier' : this.percentageEvaluationAttribute;
58
- }
59
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PercentageOptionsComponent, deps: [{ token: i1.FormGenerator }], target: i0.ɵɵFactoryTarget.Component }); }
60
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PercentageOptionsComponent, selector: "app-percentage-options", inputs: { formArray: "formArray", flagState: "flagState", featureFlagLimitations: "featureFlagLimitations", showPercentageEvaluationAttribute: "showPercentageEvaluationAttribute", percentageEvaluationAttribute: "percentageEvaluationAttribute", isPercentageOnlyTargetingRule: "isPercentageOnlyTargetingRule" }, outputs: { lastPercentageOptionLeft: "lastPercentageOptionLeft", subscriptionLimitReached: "subscriptionLimitReached", changePercentageEvaluationAttributeRequested: "changePercentageEvaluationAttributeRequested" }, ngImport: i0, template: "<div *ngFor=\"let percentageOption of formArray.controls; let i = index\" class=\"targeting-rule-line smallest-form-field\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"perc-input\">\n <input matInput type=\"number\" [formControl]=\"percentageOption.controls.percentage\" min=\"0\" max=\"100\"\n (input)=\"percentageChanged(i)\" matTooltip=\"Percentage\"\n digitOnly inputDisplayNormalizer>\n <span matTextSuffix>%</span>\n <mat-error *ngIf=\"percentageOption.controls.percentage.invalid\">\n {{FormHelper.getErrorMessage(percentageOption.controls.percentage)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div *ngIf=\"!showPercentageEvaluationAttribute\" class=\"attribute-wrapper flex\"> of&nbsp;<a\n href=\"https://configcat.com/docs/targeting/percentage-options/\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </div>\n <div *ngIf=\"showPercentageEvaluationAttribute\" class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button mat-flat-button type=\"button\" [disabled]=\"flagState.readOnly\" class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n (click)=\"changePercentageEvaluationAttribute()\">{{getPercentageEvaluationAttribute()}}</button>\n </div>\n <div>attributes</div>\n </div>\n <div class=\"delete-button\" *ngIf=\"!flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n\n <app-feature-flag-value class=\"value\" [flagState]=\"flagState\" tooltip=\"Served value\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>\n<mat-error *ngIf=\"formArray.invalid && !!FormHelper.getErrorMessage(formArray)\" class=\"sumerror\">\n {{FormHelper.getErrorMessage(formArray)}}\n</mat-error>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the percentage options are skipped and the evaluation continues with the next rule.\n</div>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && !isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the current targeting rule is skipped and the evaluation continues with the next one.\n</div>\n\n<div class=\"add-perc\" *ngIf=\"flagState.settingValue.setting.settingType !== SettingType.Boolean && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"addOption()\" class=\"add-btn add-perc-btn\">+ % OPTION</div>\n</div>", styles: [".targeting-rule-line{display:flex;flex-wrap:wrap;margin:2px 0}.targeting-rule-line .wrapper-group{display:flex;flex-wrap:wrap}.targeting-rule-line .wrapper-group.grow{flex-grow:1}.targeting-rule-component{margin:2px 0;width:212px}.targeting-rule-component[hidden]{display:none}.targeting-rule-component.small{width:102px}.targeting-rule-component.grow{flex-grow:1}.targeting-rule-component.pad-right{margin-right:8px}.targeting-rule-component mat-form-field{width:100%;font-size:12px}.delete-button{margin-top:4px;color:#b1b1b1}.delete-button mat-icon{font-size:18px;height:18px;width:18px}.explanation-wrapper{display:flex;margin-top:2px}.explanation-wrapper .explanation{min-width:44px;margin-top:6px;margin-right:8px}@media (max-width: 500px){.targeting-rule-component{max-width:calc(100% - 4px);width:160px}.targeting-rule-component.small{width:78px}.targeting-rule-component.pad-right{margin-right:4px}}\n", ".targeting-rule-line{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;--mat-icon-button-touch-target-display: none;align-items:center}.targeting-rule-line .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 32px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:4px}.targeting-rule-line .flex{display:flex;align-items:center;margin-right:4px}.targeting-rule-line .targeting-rule-component{max-width:84px}.targeting-rule-line .value{flex-grow:1}.targeting-rule-line .perc-input{margin-right:5px}.add-perc{display:flex;width:100%;padding-top:5px}.add-perc .enter-sign{color:#ccc;margin:2px 3px 0 8px}.add-perc .enter-sign mat-icon{font-size:16px;width:16px;height:16px}.add-perc .add-perc-btn{min-width:63px;padding:3px 4px 2px 8px}.sumerror{margin-bottom:8px;font-size:12px}.small{font-size:.7rem}.attribute-wrapper{color:#585858}.attribute{border:1px solid #c9c9c9;background-color:#fcfcfc;text-transform:none;color:#585858;font-size:12px;padding:0 5px}.small-pad-right{margin-right:5px}.small-pad-bottom{margin-bottom:5px}.delete-button{margin-top:3px}\n", ".chip-container{display:flex;margin-top:2px;align-self:start}.chip-container.fixed-width{width:110px}.chip-container.fixed-width-wide{width:130px}.chip-container mat-chip-set{margin-top:2px;width:100%}.chip-container mat-chip-set mat-chip{width:100%;margin-top:0;margin-bottom:0;height:24px;font-size:12px;background-color:#d1e3fa;opacity:1}.chip-container .add-btn mat-chip{background-color:transparent;border:1px dashed #afaeae;color:#afaeae;cursor:pointer}.chip-container .enter-sign{color:#ccc;margin:6px 3px 0 8px}.chip-container .enter-sign mat-icon{font-size:16px;width:16px;height:16px}\n", ".add-btn{cursor:pointer;background-color:transparent;display:flex;font-size:10px;align-items:center;border:1px dashed rgb(168,168,168);color:#979797;border-radius:15px}.add-btn:hover{background-color:#ebebeb}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i9.InputDisplayNormalizerDirective, selector: "input[inputDisplayNormalizer]" }, { kind: "component", type: i10.FeatureFlagValueComponent, selector: "app-feature-flag-value", inputs: ["formGroup", "flagState", "featureFlagLimitations", "isPrerequisite", "tooltip"] }] }); }
61
- }
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PercentageOptionsComponent, decorators: [{
63
- type: Component,
64
- args: [{ selector: 'app-percentage-options', template: "<div *ngFor=\"let percentageOption of formArray.controls; let i = index\" class=\"targeting-rule-line smallest-form-field\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"perc-input\">\n <input matInput type=\"number\" [formControl]=\"percentageOption.controls.percentage\" min=\"0\" max=\"100\"\n (input)=\"percentageChanged(i)\" matTooltip=\"Percentage\"\n digitOnly inputDisplayNormalizer>\n <span matTextSuffix>%</span>\n <mat-error *ngIf=\"percentageOption.controls.percentage.invalid\">\n {{FormHelper.getErrorMessage(percentageOption.controls.percentage)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div *ngIf=\"!showPercentageEvaluationAttribute\" class=\"attribute-wrapper flex\"> of&nbsp;<a\n href=\"https://configcat.com/docs/targeting/percentage-options/\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </div>\n <div *ngIf=\"showPercentageEvaluationAttribute\" class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button mat-flat-button type=\"button\" [disabled]=\"flagState.readOnly\" class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n (click)=\"changePercentageEvaluationAttribute()\">{{getPercentageEvaluationAttribute()}}</button>\n </div>\n <div>attributes</div>\n </div>\n <div class=\"delete-button\" *ngIf=\"!flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n\n <app-feature-flag-value class=\"value\" [flagState]=\"flagState\" tooltip=\"Served value\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>\n<mat-error *ngIf=\"formArray.invalid && !!FormHelper.getErrorMessage(formArray)\" class=\"sumerror\">\n {{FormHelper.getErrorMessage(formArray)}}\n</mat-error>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the percentage options are skipped and the evaluation continues with the next rule.\n</div>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && !isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the current targeting rule is skipped and the evaluation continues with the next one.\n</div>\n\n<div class=\"add-perc\" *ngIf=\"flagState.settingValue.setting.settingType !== SettingType.Boolean && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"addOption()\" class=\"add-btn add-perc-btn\">+ % OPTION</div>\n</div>", styles: [".targeting-rule-line{display:flex;flex-wrap:wrap;margin:2px 0}.targeting-rule-line .wrapper-group{display:flex;flex-wrap:wrap}.targeting-rule-line .wrapper-group.grow{flex-grow:1}.targeting-rule-component{margin:2px 0;width:212px}.targeting-rule-component[hidden]{display:none}.targeting-rule-component.small{width:102px}.targeting-rule-component.grow{flex-grow:1}.targeting-rule-component.pad-right{margin-right:8px}.targeting-rule-component mat-form-field{width:100%;font-size:12px}.delete-button{margin-top:4px;color:#b1b1b1}.delete-button mat-icon{font-size:18px;height:18px;width:18px}.explanation-wrapper{display:flex;margin-top:2px}.explanation-wrapper .explanation{min-width:44px;margin-top:6px;margin-right:8px}@media (max-width: 500px){.targeting-rule-component{max-width:calc(100% - 4px);width:160px}.targeting-rule-component.small{width:78px}.targeting-rule-component.pad-right{margin-right:4px}}\n", ".targeting-rule-line{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;--mat-icon-button-touch-target-display: none;align-items:center}.targeting-rule-line .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 32px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:4px}.targeting-rule-line .flex{display:flex;align-items:center;margin-right:4px}.targeting-rule-line .targeting-rule-component{max-width:84px}.targeting-rule-line .value{flex-grow:1}.targeting-rule-line .perc-input{margin-right:5px}.add-perc{display:flex;width:100%;padding-top:5px}.add-perc .enter-sign{color:#ccc;margin:2px 3px 0 8px}.add-perc .enter-sign mat-icon{font-size:16px;width:16px;height:16px}.add-perc .add-perc-btn{min-width:63px;padding:3px 4px 2px 8px}.sumerror{margin-bottom:8px;font-size:12px}.small{font-size:.7rem}.attribute-wrapper{color:#585858}.attribute{border:1px solid #c9c9c9;background-color:#fcfcfc;text-transform:none;color:#585858;font-size:12px;padding:0 5px}.small-pad-right{margin-right:5px}.small-pad-bottom{margin-bottom:5px}.delete-button{margin-top:3px}\n", ".chip-container{display:flex;margin-top:2px;align-self:start}.chip-container.fixed-width{width:110px}.chip-container.fixed-width-wide{width:130px}.chip-container mat-chip-set{margin-top:2px;width:100%}.chip-container mat-chip-set mat-chip{width:100%;margin-top:0;margin-bottom:0;height:24px;font-size:12px;background-color:#d1e3fa;opacity:1}.chip-container .add-btn mat-chip{background-color:transparent;border:1px dashed #afaeae;color:#afaeae;cursor:pointer}.chip-container .enter-sign{color:#ccc;margin:6px 3px 0 8px}.chip-container .enter-sign mat-icon{font-size:16px;width:16px;height:16px}\n", ".add-btn{cursor:pointer;background-color:transparent;display:flex;font-size:10px;align-items:center;border:1px dashed rgb(168,168,168);color:#979797;border-radius:15px}.add-btn:hover{background-color:#ebebeb}\n"] }]
65
- }], ctorParameters: () => [{ type: i1.FormGenerator }], propDecorators: { formArray: [{
66
- type: Input
67
- }], flagState: [{
68
- type: Input
69
- }], featureFlagLimitations: [{
70
- type: Input
71
- }], showPercentageEvaluationAttribute: [{
72
- type: Input
73
- }], percentageEvaluationAttribute: [{
74
- type: Input
75
- }], isPercentageOnlyTargetingRule: [{
76
- type: Input
77
- }], lastPercentageOptionLeft: [{
78
- type: Output
79
- }], subscriptionLimitReached: [{
80
- type: Output
81
- }], changePercentageEvaluationAttributeRequested: [{
82
- type: Output
83
- }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyY2VudGFnZS1vcHRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi92Mi9mZWF0dXJlLWZsYWcvZXZhbHVhdGlvbi1mb3JtdWxhL3RhcmdldGluZy1ydWxlL3BlcmNlbnRhZ2Utb3B0aW9ucy9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9ldmFsdWF0aW9uLWZvcm11bGEvdGFyZ2V0aW5nLXJ1bGUvcGVyY2VudGFnZS1vcHRpb25zL3BlcmNlbnRhZ2Utb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFDTCxVQUFVLEVBQzJCLFdBQVcsRUFDakQsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWWxDLE1BQU0sT0FBTywwQkFBMEI7SUFlckMsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFQdEMsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5Qyw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlDLGlEQUE0QyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUUsZ0JBQVcsR0FBRyxXQUFXLENBQUM7UUFDMUIsZUFBVSxHQUFHLFVBQVUsQ0FBQztJQUU0QixDQUFDO0lBRXJELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxzQkFB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QUNHLDRDQUE0QztzQkFBckQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEZvcm1IZWxwZXIsIElGbGFnU3RhdGUsIElGZWF0dXJlRmxhZ0xpbWl0YXRpb25zLFxuICBQZXJjZW50YWdlT3B0aW9uRm9ybSwgRm9ybUdlbmVyYXRvciwgU2V0dGluZ1R5cGVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vYm9vdHN0cmFwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBlcmNlbnRhZ2Utb3B0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi4vLi4vY29tcG9uZW50cy5zY3NzJyxcbiAgICAnLi9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50LnNjc3MnLFxuICAgICcuLi8uLi9jaGlwcy5zY3NzJyxcbiAgICAnLi4vLi4vYWRkLWJ0bi5zY3NzJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBlcmNlbnRhZ2VPcHRpb25zQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZm9ybUFycmF5OiBGb3JtQXJyYXk8Rm9ybUdyb3VwPFBlcmNlbnRhZ2VPcHRpb25Gb3JtPj47XG4gIEBJbnB1dCgpIGZsYWdTdGF0ZTogSUZsYWdTdGF0ZTtcbiAgQElucHV0KCkgZmVhdHVyZUZsYWdMaW1pdGF0aW9uczogSUZlYXR1cmVGbGFnTGltaXRhdGlvbnM7XG4gIEBJbnB1dCgpIHNob3dQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGU6IHN0cmluZztcbiAgQElucHV0KCkgaXNQZXJjZW50YWdlT25seVRhcmdldGluZ1J1bGU6IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIGxhc3RQZXJjZW50YWdlT3B0aW9uTGVmdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHN1YnNjcmlwdGlvbkxpbWl0UmVhY2hlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNoYW5nZVBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIFNldHRpbmdUeXBlID0gU2V0dGluZ1R5cGU7XG4gIEZvcm1IZWxwZXIgPSBGb3JtSGVscGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvcikgeyB9XG5cbiAgYWRkT3B0aW9uKCkge1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5sZW5ndGggPj0gdGhpcy5mZWF0dXJlRmxhZ0xpbWl0YXRpb25zLm1heFBlcmNlbnRhZ2VPcHRpb25Db3VudCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25MaW1pdFJlYWNoZWQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvcm1BcnJheS5wdXNoKHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZVBlcmNlbnRhZ2VPcHRpb25Gb3JtR3JvdXAoe1xuICAgICAgcGVyY2VudGFnZTogMCxcbiAgICAgIHZhbHVlOiB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVEZWZhdWx0VmFsdWUodGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUpXG4gICAgfSwgdGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUsIGZhbHNlLCB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpKVxuICAgIHRoaXMuZm9ybUFycmF5Lm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICByZW1vdmUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLmZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpO1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5sZW5ndGggPCAyKSB7XG4gICAgICB0aGlzLmxhc3RQZXJjZW50YWdlT3B0aW9uTGVmdC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcGVyY2VudGFnZUNoYW5nZWQoaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5jb250cm9sc1tpbmRleF0udmFsdWUucGVyY2VudGFnZSA8IDApIHtcbiAgICAgIHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzW2luZGV4XS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDApO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtQXJyYXkuY29udHJvbHNbaW5kZXhdLnZhbHVlLnBlcmNlbnRhZ2UgPiAxMDApIHtcbiAgICAgIHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzW2luZGV4XS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDEwMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdGhpcy5mb3JtQXJyYXkuY29udHJvbHNbMSAtIGluZGV4XS5jb250cm9scy5wZXJjZW50YWdlXG4gICAgICAgIC5zZXRWYWx1ZSgxMDAgLSB0aGlzLmZvcm1BcnJheS5jb250cm9sc1tpbmRleF0udmFsdWUucGVyY2VudGFnZSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKSB7XG4gICAgdGhpcy5jaGFuZ2VQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZVJlcXVlc3RlZC5lbWl0KCk7XG4gIH1cblxuICBnZXRQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZSgpIHtcbiAgICByZXR1cm4gIXRoaXMucGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUgPyAnSWRlbnRpZmllcicgOiB0aGlzLnBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0Zvcj1cImxldCBwZXJjZW50YWdlT3B0aW9uIG9mIGZvcm1BcnJheS5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwidGFyZ2V0aW5nLXJ1bGUtbGluZSBzbWFsbGVzdC1mb3JtLWZpZWxkXCI+XG4gICAgPGRpdiBjbGFzcz1cIndyYXBwZXItZ3JvdXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBmbGV4XCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJwZXJjLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBbZm9ybUNvbnRyb2xdPVwicGVyY2VudGFnZU9wdGlvbi5jb250cm9scy5wZXJjZW50YWdlXCIgbWluPVwiMFwiIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJwZXJjZW50YWdlQ2hhbmdlZChpKVwiIG1hdFRvb2x0aXA9XCJQZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgZGlnaXRPbmx5IGlucHV0RGlzcGxheU5vcm1hbGl6ZXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gbWF0VGV4dFN1ZmZpeD4lPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJwZXJjZW50YWdlT3B0aW9uLmNvbnRyb2xzLnBlcmNlbnRhZ2UuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICB7e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKHBlcmNlbnRhZ2VPcHRpb24uY29udHJvbHMucGVyY2VudGFnZSl9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1BlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlXCIgY2xhc3M9XCJhdHRyaWJ1dGUtd3JhcHBlciBmbGV4XCI+IG9mJm5ic3A7PGFcbiAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9jb25maWdjYXQuY29tL2RvY3MvdGFyZ2V0aW5nL3BlcmNlbnRhZ2Utb3B0aW9ucy9cIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj51c2VyczwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVcIiBjbGFzcz1cImF0dHJpYnV0ZS13cmFwcGVyIHdyYXBwZXItZ3JvdXAgZmxleFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsLXBhZC1yaWdodFwiPm9mIGFsbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsLXBhZC1yaWdodFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiZmxhZ1N0YXRlLnJlYWRPbmx5XCIgY2xhc3M9XCJhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ2hhbmdlIHBlcmNlbnRhZ2UgZXZhbHVhdGlvbiBhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKVwiPnt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+YXR0cmlidXRlczwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlbGV0ZS1idXR0b25cIiAqbmdJZj1cIiFmbGFnU3RhdGUucmVhZE9ubHlcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiUmVtb3ZlIG9wdGlvblwiIChjbGljayk9XCJyZW1vdmUoaSlcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxhcHAtZmVhdHVyZS1mbGFnLXZhbHVlIGNsYXNzPVwidmFsdWVcIiBbZmxhZ1N0YXRlXT1cImZsYWdTdGF0ZVwiIHRvb2x0aXA9XCJTZXJ2ZWQgdmFsdWVcIlxuICAgICAgICBbZm9ybUdyb3VwXT1cInBlcmNlbnRhZ2VPcHRpb24uY29udHJvbHMudmFsdWVcIlxuICAgICAgICBbZmVhdHVyZUZsYWdMaW1pdGF0aW9uc109XCJmZWF0dXJlRmxhZ0xpbWl0YXRpb25zXCI+PC9hcHAtZmVhdHVyZS1mbGFnLXZhbHVlPlxuPC9kaXY+XG48bWF0LWVycm9yICpuZ0lmPVwiZm9ybUFycmF5LmludmFsaWQgJiYgISFGb3JtSGVscGVyLmdldEVycm9yTWVzc2FnZShmb3JtQXJyYXkpXCIgY2xhc3M9XCJzdW1lcnJvclwiPlxuICAgIHt7Rm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UoZm9ybUFycmF5KX19XG48L21hdC1lcnJvcj5cbjxkaXYgY2xhc3M9XCJzbWFsbCBzbWFsbC1wYWQtYm90dG9tXCIgc3R5bGU9XCJvcGFjaXR5OiAuNjtcIlxuICAgICpuZ0lmPVwic2hvd1BlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlICYmIGlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlXCI+XG4gICAgSWYgdGhlIHt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IGluIHRoZVxuICAgIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdXNlci1vYmplY3QvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlVzZXJcbiAgICAgICAgT2JqZWN0PC9hPiwgdGhlIHBlcmNlbnRhZ2Ugb3B0aW9ucyBhcmUgc2tpcHBlZCBhbmQgdGhlIGV2YWx1YXRpb24gY29udGludWVzIHdpdGggdGhlIG5leHQgcnVsZS5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInNtYWxsIHNtYWxsLXBhZC1ib3R0b21cIiBzdHlsZT1cIm9wYWNpdHk6IC42O1wiXG4gICAgKm5nSWY9XCJzaG93UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUgJiYgIWlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlXCI+XG4gICAgSWYgdGhlIHt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IGluIHRoZVxuICAgIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdXNlci1vYmplY3QvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlVzZXJcbiAgICAgICAgT2JqZWN0PC9hPiwgdGhlIGN1cnJlbnQgdGFyZ2V0aW5nIHJ1bGUgaXMgc2tpcHBlZCBhbmQgdGhlIGV2YWx1YXRpb24gY29udGludWVzIHdpdGggdGhlIG5leHQgb25lLlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJhZGQtcGVyY1wiICpuZ0lmPVwiZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLnNldHRpbmdUeXBlICE9PSBTZXR0aW5nVHlwZS5Cb29sZWFuICYmICFmbGFnU3RhdGUucmVhZE9ubHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW50ZXItc2lnblwiPjxtYXQtaWNvbj5zdWJkaXJlY3RvcnlfYXJyb3dfcmlnaHQ8L21hdC1pY29uPjwvZGl2PlxuICAgIDxkaXYgKGNsaWNrKT1cImFkZE9wdGlvbigpXCIgY2xhc3M9XCJhZGQtYnRuIGFkZC1wZXJjLWJ0blwiPisgJSBPUFRJT048L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -1,129 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { FormArray } from '@angular/forms';
3
- import { SettingType } from '../../../../bootstrap';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../../../../bootstrap";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "@angular/forms";
8
- import * as i4 from "@angular/material/icon";
9
- import * as i5 from "@angular/material/tooltip";
10
- import * as i6 from "@angular/material/chips";
11
- import * as i7 from "@angular/material/divider";
12
- import * as i8 from "../feature-flag-value/feature-flag-value.component";
13
- import * as i9 from "./percentage-options/percentage-options.component";
14
- import * as i10 from "./conditions/conditions.component";
15
- export class TargetingRuleComponent {
16
- constructor(formGenerator) {
17
- this.formGenerator = formGenerator;
18
- this.createSegmentRequested = new EventEmitter();
19
- this.manageSegmentsRequested = new EventEmitter();
20
- this.addSegmentConditionRequestedWithoutSegments = new EventEmitter();
21
- this.removedAllRules = new EventEmitter();
22
- this.subscriptionLimitReached = new EventEmitter();
23
- this.changePercentageEvaluationAttributeRequested = new EventEmitter();
24
- this.prerequisiteConditionChanged = new EventEmitter();
25
- }
26
- convertToPercentage() {
27
- if (!this.formGroup.controls.value || this.formGroup.controls.value.disabled) {
28
- return;
29
- }
30
- const currentValue = this.formGroup.controls.value.value;
31
- switch (this.flagState.settingValue.setting.settingType) {
32
- case SettingType.Boolean: {
33
- this.formGroup.setControl('percentageOptions', new FormArray([
34
- this.formGenerator.generatePercentageOptionFormGroup({ percentage: currentValue.boolValue ? 100 : 0, value: { boolValue: true } }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations),
35
- this.formGenerator.generatePercentageOptionFormGroup({ percentage: currentValue.boolValue ? 0 : 100, value: { boolValue: false } }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations)
36
- ], [this.formGenerator.validatePercentageSum]));
37
- this.formGroup.removeControl('value');
38
- this.formGroup.markAsDirty();
39
- break;
40
- }
41
- case SettingType.String:
42
- case SettingType.Int:
43
- case SettingType.Double: {
44
- this.formGroup.setControl('percentageOptions', new FormArray([
45
- this.formGenerator.generatePercentageOptionFormGroup({ percentage: 100, value: currentValue }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations),
46
- this.formGenerator.generatePercentageOptionFormGroup({ percentage: 0, value: {} }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations)
47
- ], [this.formGenerator.validatePercentageSum]));
48
- this.formGroup.removeControl('value');
49
- this.formGroup.markAsDirty();
50
- break;
51
- }
52
- default:
53
- throw new Error('Invalid SettingType');
54
- }
55
- }
56
- isPercentageOnly() {
57
- return this.formGenerator.isPercentageOnlyTargetingRule(this.formGroup);
58
- }
59
- showBadge() {
60
- return this.targetingRuleIndex !== 0 || !this.isPercentageOnly();
61
- }
62
- getChipText() {
63
- return this.targetingRuleIndex !== 0
64
- && this.isPercentageOnly()
65
- ? 'OTHERWISE'
66
- : 'THEN';
67
- }
68
- getChipTooltip() {
69
- return this.targetingRuleIndex !== 0
70
- && this.isPercentageOnly()
71
- ? 'This value will be served to all identified users who do not match the targeting rules above.'
72
- : '';
73
- }
74
- lastPercentageOptionLeft() {
75
- if (this.formGroup.controls.conditions.length === 0) {
76
- this.removedAllRules.emit();
77
- return;
78
- }
79
- const lastValue = this.formGroup.controls.percentageOptions.controls[0].controls.value.getRawValue();
80
- this.formGroup.setControl('value', this.formGenerator.generateValueFormGroup(lastValue, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations));
81
- this.formGroup.removeControl('percentageOptions');
82
- this.formGroup.markAsDirty();
83
- }
84
- lastConditionDeleted() {
85
- if (!this.formGroup.controls.percentageOptions?.controls?.length) {
86
- this.removedAllRules.emit();
87
- }
88
- }
89
- subscriptionLimitReachedCalled() {
90
- this.subscriptionLimitReached.emit();
91
- }
92
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TargetingRuleComponent, deps: [{ token: i1.FormGenerator }], target: i0.ɵɵFactoryTarget.Component }); }
93
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TargetingRuleComponent, selector: "app-targeting-rule", inputs: { formGroup: "formGroup", segments: "segments", flagState: "flagState", targetingRuleIndex: "targetingRuleIndex", featureFlagLimitations: "featureFlagLimitations", canManageSegments: "canManageSegments", showPercentageEvaluationAttribute: "showPercentageEvaluationAttribute", percentageEvaluationAttribute: "percentageEvaluationAttribute" }, outputs: { createSegmentRequested: "createSegmentRequested", manageSegmentsRequested: "manageSegmentsRequested", addSegmentConditionRequestedWithoutSegments: "addSegmentConditionRequestedWithoutSegments", removedAllRules: "removedAllRules", subscriptionLimitReached: "subscriptionLimitReached", changePercentageEvaluationAttributeRequested: "changePercentageEvaluationAttributeRequested", prerequisiteConditionChanged: "prerequisiteConditionChanged" }, ngImport: i0, template: "<div class=\"side-padd conditions\" *ngIf=\"formGroup.controls.conditions?.length\">\n <app-conditions [formArray]=\"formGroup.controls.conditions\" [segments]=\"segments\" [flagState]=\"flagState\"\n [targetingRuleIndex]=\"targetingRuleIndex\" (lastConditionDeleted)=\"lastConditionDeleted()\"\n [canManageSegments]=\"canManageSegments\" (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\"></app-conditions>\n</div>\n\n<mat-divider *ngIf=\"formGroup.controls.conditions?.length\"></mat-divider>\n\n<div class=\"served-value\">\n <div class=\"flex side-padd\">\n <div class=\"chip-container fixed-width\" *ngIf=\"showBadge()\" [matTooltip]=\"getChipTooltip()\">\n <mat-chip-set>\n <mat-chip disabled>{{getChipText()}}</mat-chip>\n </mat-chip-set>\n </div>\n\n <app-percentage-options class=\"grow\" *ngIf=\"formGroup.controls.percentageOptions?.length\"\n [formArray]=\"formGroup.controls.percentageOptions\" [flagState]=\"flagState\"\n (lastPercentageOptionLeft)=\"lastPercentageOptionLeft()\"\n (subscriptionLimitReached)=\"subscriptionLimitReached.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" [isPercentageOnlyTargetingRule]=\"isPercentageOnly()\"\n [showPercentageEvaluationAttribute]=\"showPercentageEvaluationAttribute\"\n [percentageEvaluationAttribute]=\"percentageEvaluationAttribute\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\">\n </app-percentage-options>\n <app-feature-flag-value class=\"grow\" *ngIf=\"formGroup.controls.value\" [flagState]=\"flagState\"\n [formGroup]=\"formGroup.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\" tooltip=\"Served value\"></app-feature-flag-value>\n </div>\n\n <div class=\"add-perc flex side-padd bot-padd\" *ngIf=\"formGroup.controls.value && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"convertToPercentage()\" matTooltip=\"Target a percentage of users to whom this rule applies\"\n class=\"add-btn add-perc-btn\">+ % OPTION</div>\n </div>\n</div>", styles: ["html{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none}.flex{display:flex;flex-wrap:wrap}.flex .grow{flex-grow:1}.mat-divider{opacity:.8;margin:15px 0 12px}.side-padd{padding:0 16px}.bot-padd{margin-bottom:6px}.conditions{margin:4px 0 12px}.served-value{margin:8px 0 6px}.served-value .chip-container{margin-bottom:2px 0}.add-perc{display:flex;width:100%;margin-top:6px}.add-perc .enter-sign{color:#ccc;margin:2px 3px 0 8px}.add-perc .enter-sign mat-icon{font-size:16px;width:16px;height:16px}.add-perc .add-perc-btn{min-width:63px;padding:3px 4px 2px 6px}\n", ".chip-container{display:flex;margin-top:2px;align-self:start}.chip-container.fixed-width{width:110px}.chip-container.fixed-width-wide{width:130px}.chip-container mat-chip-set{margin-top:2px;width:100%}.chip-container mat-chip-set mat-chip{width:100%;margin-top:0;margin-bottom:0;height:24px;font-size:12px;background-color:#d1e3fa;opacity:1}.chip-container .add-btn mat-chip{background-color:transparent;border:1px dashed #afaeae;color:#afaeae;cursor:pointer}.chip-container .enter-sign{color:#ccc;margin:6px 3px 0 8px}.chip-container .enter-sign mat-icon{font-size:16px;width:16px;height:16px}\n", ".add-btn{cursor:pointer;background-color:transparent;display:flex;font-size:10px;align-items:center;border:1px dashed rgb(168,168,168);color:#979797;border-radius:15px}.add-btn:hover{background-color:#ebebeb}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i6.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"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i6.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i7.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i8.FeatureFlagValueComponent, selector: "app-feature-flag-value", inputs: ["formGroup", "flagState", "featureFlagLimitations", "isPrerequisite", "tooltip"] }, { kind: "component", type: i9.PercentageOptionsComponent, selector: "app-percentage-options", inputs: ["formArray", "flagState", "featureFlagLimitations", "showPercentageEvaluationAttribute", "percentageEvaluationAttribute", "isPercentageOnlyTargetingRule"], outputs: ["lastPercentageOptionLeft", "subscriptionLimitReached", "changePercentageEvaluationAttributeRequested"] }, { kind: "component", type: i10.ConditionsComponent, selector: "app-conditions", inputs: ["formArray", "segments", "flagState", "targetingRuleIndex", "canManageSegments", "featureFlagLimitations"], outputs: ["createSegmentRequested", "manageSegmentsRequested", "addSegmentConditionRequestedWithoutSegments", "lastConditionDeleted", "subscriptionLimitReached", "prerequisiteConditionChanged"] }] }); }
94
- }
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TargetingRuleComponent, decorators: [{
96
- type: Component,
97
- args: [{ selector: 'app-targeting-rule', template: "<div class=\"side-padd conditions\" *ngIf=\"formGroup.controls.conditions?.length\">\n <app-conditions [formArray]=\"formGroup.controls.conditions\" [segments]=\"segments\" [flagState]=\"flagState\"\n [targetingRuleIndex]=\"targetingRuleIndex\" (lastConditionDeleted)=\"lastConditionDeleted()\"\n [canManageSegments]=\"canManageSegments\" (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\"></app-conditions>\n</div>\n\n<mat-divider *ngIf=\"formGroup.controls.conditions?.length\"></mat-divider>\n\n<div class=\"served-value\">\n <div class=\"flex side-padd\">\n <div class=\"chip-container fixed-width\" *ngIf=\"showBadge()\" [matTooltip]=\"getChipTooltip()\">\n <mat-chip-set>\n <mat-chip disabled>{{getChipText()}}</mat-chip>\n </mat-chip-set>\n </div>\n\n <app-percentage-options class=\"grow\" *ngIf=\"formGroup.controls.percentageOptions?.length\"\n [formArray]=\"formGroup.controls.percentageOptions\" [flagState]=\"flagState\"\n (lastPercentageOptionLeft)=\"lastPercentageOptionLeft()\"\n (subscriptionLimitReached)=\"subscriptionLimitReached.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" [isPercentageOnlyTargetingRule]=\"isPercentageOnly()\"\n [showPercentageEvaluationAttribute]=\"showPercentageEvaluationAttribute\"\n [percentageEvaluationAttribute]=\"percentageEvaluationAttribute\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\">\n </app-percentage-options>\n <app-feature-flag-value class=\"grow\" *ngIf=\"formGroup.controls.value\" [flagState]=\"flagState\"\n [formGroup]=\"formGroup.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\" tooltip=\"Served value\"></app-feature-flag-value>\n </div>\n\n <div class=\"add-perc flex side-padd bot-padd\" *ngIf=\"formGroup.controls.value && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"convertToPercentage()\" matTooltip=\"Target a percentage of users to whom this rule applies\"\n class=\"add-btn add-perc-btn\">+ % OPTION</div>\n </div>\n</div>", styles: ["html{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none}.flex{display:flex;flex-wrap:wrap}.flex .grow{flex-grow:1}.mat-divider{opacity:.8;margin:15px 0 12px}.side-padd{padding:0 16px}.bot-padd{margin-bottom:6px}.conditions{margin:4px 0 12px}.served-value{margin:8px 0 6px}.served-value .chip-container{margin-bottom:2px 0}.add-perc{display:flex;width:100%;margin-top:6px}.add-perc .enter-sign{color:#ccc;margin:2px 3px 0 8px}.add-perc .enter-sign mat-icon{font-size:16px;width:16px;height:16px}.add-perc .add-perc-btn{min-width:63px;padding:3px 4px 2px 6px}\n", ".chip-container{display:flex;margin-top:2px;align-self:start}.chip-container.fixed-width{width:110px}.chip-container.fixed-width-wide{width:130px}.chip-container mat-chip-set{margin-top:2px;width:100%}.chip-container mat-chip-set mat-chip{width:100%;margin-top:0;margin-bottom:0;height:24px;font-size:12px;background-color:#d1e3fa;opacity:1}.chip-container .add-btn mat-chip{background-color:transparent;border:1px dashed #afaeae;color:#afaeae;cursor:pointer}.chip-container .enter-sign{color:#ccc;margin:6px 3px 0 8px}.chip-container .enter-sign mat-icon{font-size:16px;width:16px;height:16px}\n", ".add-btn{cursor:pointer;background-color:transparent;display:flex;font-size:10px;align-items:center;border:1px dashed rgb(168,168,168);color:#979797;border-radius:15px}.add-btn:hover{background-color:#ebebeb}\n"] }]
98
- }], ctorParameters: () => [{ type: i1.FormGenerator }], propDecorators: { formGroup: [{
99
- type: Input
100
- }], segments: [{
101
- type: Input
102
- }], flagState: [{
103
- type: Input
104
- }], targetingRuleIndex: [{
105
- type: Input
106
- }], featureFlagLimitations: [{
107
- type: Input
108
- }], canManageSegments: [{
109
- type: Input
110
- }], showPercentageEvaluationAttribute: [{
111
- type: Input
112
- }], percentageEvaluationAttribute: [{
113
- type: Input
114
- }], createSegmentRequested: [{
115
- type: Output
116
- }], manageSegmentsRequested: [{
117
- type: Output
118
- }], addSegmentConditionRequestedWithoutSegments: [{
119
- type: Output
120
- }], removedAllRules: [{
121
- type: Output
122
- }], subscriptionLimitReached: [{
123
- type: Output
124
- }], changePercentageEvaluationAttributeRequested: [{
125
- type: Output
126
- }], prerequisiteConditionChanged: [{
127
- type: Output
128
- }] } });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0aW5nLXJ1bGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9ldmFsdWF0aW9uLWZvcm11bGEvdGFyZ2V0aW5nLXJ1bGUvdGFyZ2V0aW5nLXJ1bGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9ldmFsdWF0aW9uLWZvcm11bGEvdGFyZ2V0aW5nLXJ1bGUvdGFyZ2V0aW5nLXJ1bGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQWEsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUc4QixXQUFXLEVBQy9DLE1BQU0sdUJBQXVCLENBQUE7Ozs7Ozs7Ozs7OztBQVk5QixNQUFNLE9BQU8sc0JBQXNCO0lBa0JqQyxZQUFvQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQVJ0QywyQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLDRCQUF1QixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0MsZ0RBQTJDLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRSxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDckMsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QyxpREFBNEMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xFLGlDQUE0QixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFUixDQUFDO0lBRXJELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM3RSxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFnQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBRXRFLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hELEtBQUssV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUMzQyxJQUFJLFNBQVMsQ0FBa0M7b0JBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsaUNBQWlDLENBQUMsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDO29CQUN2TixJQUFJLENBQUMsYUFBYSxDQUFDLGlDQUFpQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztpQkFDek4sRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM3QixNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUN4QixLQUFLLFdBQVcsQ0FBQyxHQUFHLENBQUM7WUFDckIsS0FBSyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQzNDLElBQUksU0FBUyxDQUFrQztvQkFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztvQkFDbkwsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztpQkFDeEssRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM3QixNQUFNO1lBQ1IsQ0FBQztZQUVEO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuRSxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLGtCQUFrQixLQUFLLENBQUM7ZUFDL0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzFCLENBQUMsQ0FBQyxXQUFXO1lBQ2IsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNiLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsa0JBQWtCLEtBQUssQ0FBQztlQUMvQixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsQ0FBQyxDQUFDLCtGQUErRjtZQUNqRyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1QsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1FBQzlLLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVELDhCQUE4QjtRQUM1QixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkMsQ0FBQzsrR0FqR1Usc0JBQXNCO21HQUF0QixzQkFBc0IsNjFCQ2xCbkMscW9GQXVDTTs7NEZEckJPLHNCQUFzQjtrQkFUbEMsU0FBUzsrQkFDRSxvQkFBb0I7a0ZBU3JCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGlDQUFpQztzQkFBekMsS0FBSztnQkFDRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBRUksc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFDRywyQ0FBMkM7c0JBQXBELE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0csNENBQTRDO3NCQUFyRCxNQUFNO2dCQUNHLDRCQUE0QjtzQkFBckMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIElTZWdtZW50LCBUYXJnZXRpbmdSdWxlRm9ybSwgXG4gIEZvcm1HZW5lcmF0b3IsIElGZWF0dXJlRmxhZ0xpbWl0YXRpb25zLCAgSUZsYWdTdGF0ZSxcbiAgUGVyY2VudGFnZU9wdGlvbkZvcm0sIElWYWx1ZU1vZGVsLCBTZXR0aW5nVHlwZVxufSBmcm9tICcuLi8uLi8uLi8uLi9ib290c3RyYXAnXG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXRhcmdldGluZy1ydWxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhcmdldGluZy1ydWxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXG4gICAgJy4vdGFyZ2V0aW5nLXJ1bGUuY29tcG9uZW50LnNjc3MnLFxuICAgICcuLi9jaGlwcy5zY3NzJyxcbiAgICAnLi4vYWRkLWJ0bi5zY3NzJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhcmdldGluZ1J1bGVDb21wb25lbnQge1xuICBASW5wdXQoKSBmb3JtR3JvdXA6IEZvcm1Hcm91cDxUYXJnZXRpbmdSdWxlRm9ybT47XG4gIEBJbnB1dCgpIHNlZ21lbnRzOiBJU2VnbWVudFtdO1xuICBASW5wdXQoKSBmbGFnU3RhdGU6IElGbGFnU3RhdGU7XG4gIEBJbnB1dCgpIHRhcmdldGluZ1J1bGVJbmRleDogbnVtYmVyO1xuICBASW5wdXQoKSBmZWF0dXJlRmxhZ0xpbWl0YXRpb25zOiBJRmVhdHVyZUZsYWdMaW1pdGF0aW9ucztcbiAgQElucHV0KCkgY2FuTWFuYWdlU2VnbWVudHM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGU6IHN0cmluZztcblxuICBAT3V0cHV0KCkgY3JlYXRlU2VnbWVudFJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG1hbmFnZVNlZ21lbnRzUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYWRkU2VnbWVudENvbmRpdGlvblJlcXVlc3RlZFdpdGhvdXRTZWdtZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlbW92ZWRBbGxSdWxlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHN1YnNjcmlwdGlvbkxpbWl0UmVhY2hlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNoYW5nZVBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHJlcmVxdWlzaXRlQ29uZGl0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1HZW5lcmF0b3I6IEZvcm1HZW5lcmF0b3IpIHsgfVxuXG4gIGNvbnZlcnRUb1BlcmNlbnRhZ2UoKSB7XG4gICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5jb250cm9scy52YWx1ZSB8fCB0aGlzLmZvcm1Hcm91cC5jb250cm9scy52YWx1ZS5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZTogSVZhbHVlTW9kZWwgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy52YWx1ZS52YWx1ZTtcblxuICAgIHN3aXRjaCAodGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUpIHtcbiAgICAgIGNhc2UgU2V0dGluZ1R5cGUuQm9vbGVhbjoge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKCdwZXJjZW50YWdlT3B0aW9ucycsXG4gICAgICAgICAgbmV3IEZvcm1BcnJheTxGb3JtR3JvdXA8UGVyY2VudGFnZU9wdGlvbkZvcm0+PihbXG4gICAgICAgICAgICB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVQZXJjZW50YWdlT3B0aW9uRm9ybUdyb3VwKHsgcGVyY2VudGFnZTogY3VycmVudFZhbHVlLmJvb2xWYWx1ZSA/IDEwMCA6IDAsIHZhbHVlOiB7IGJvb2xWYWx1ZTogdHJ1ZSB9IH0sIHRoaXMuZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLnNldHRpbmdUeXBlLCBmYWxzZSwgdGhpcy5mZWF0dXJlRmxhZ0xpbWl0YXRpb25zKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZVBlcmNlbnRhZ2VPcHRpb25Gb3JtR3JvdXAoeyBwZXJjZW50YWdlOiBjdXJyZW50VmFsdWUuYm9vbFZhbHVlID8gMCA6IDEwMCwgdmFsdWU6IHsgYm9vbFZhbHVlOiBmYWxzZSB9IH0sIHRoaXMuZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLnNldHRpbmdUeXBlLCBmYWxzZSwgdGhpcy5mZWF0dXJlRmxhZ0xpbWl0YXRpb25zKVxuICAgICAgICAgIF0sIFt0aGlzLmZvcm1HZW5lcmF0b3IudmFsaWRhdGVQZXJjZW50YWdlU3VtXSkpXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ3ZhbHVlJyk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBTZXR0aW5nVHlwZS5TdHJpbmc6XG4gICAgICBjYXNlIFNldHRpbmdUeXBlLkludDpcbiAgICAgIGNhc2UgU2V0dGluZ1R5cGUuRG91YmxlOiB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woJ3BlcmNlbnRhZ2VPcHRpb25zJyxcbiAgICAgICAgICBuZXcgRm9ybUFycmF5PEZvcm1Hcm91cDxQZXJjZW50YWdlT3B0aW9uRm9ybT4+KFtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZVBlcmNlbnRhZ2VPcHRpb25Gb3JtR3JvdXAoeyBwZXJjZW50YWdlOiAxMDAsIHZhbHVlOiBjdXJyZW50VmFsdWUgfSwgdGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUsIGZhbHNlLCB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpLFxuICAgICAgICAgICAgdGhpcy5mb3JtR2VuZXJhdG9yLmdlbmVyYXRlUGVyY2VudGFnZU9wdGlvbkZvcm1Hcm91cCh7IHBlcmNlbnRhZ2U6IDAsIHZhbHVlOiB7fSB9LCB0aGlzLmZsYWdTdGF0ZS5zZXR0aW5nVmFsdWUuc2V0dGluZy5zZXR0aW5nVHlwZSwgZmFsc2UsIHRoaXMuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucylcbiAgICAgICAgICBdLCBbdGhpcy5mb3JtR2VuZXJhdG9yLnZhbGlkYXRlUGVyY2VudGFnZVN1bV0pKVxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCd2YWx1ZScpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFNldHRpbmdUeXBlJyk7XG4gICAgfVxuICB9XG5cbiAgaXNQZXJjZW50YWdlT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR2VuZXJhdG9yLmlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlKHRoaXMuZm9ybUdyb3VwKTtcbiAgfVxuXG4gIHNob3dCYWRnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50YXJnZXRpbmdSdWxlSW5kZXggIT09IDAgfHwgIXRoaXMuaXNQZXJjZW50YWdlT25seSgpO1xuICB9XG5cbiAgZ2V0Q2hpcFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50YXJnZXRpbmdSdWxlSW5kZXggIT09IDBcbiAgICAgICYmIHRoaXMuaXNQZXJjZW50YWdlT25seSgpXG4gICAgICA/ICdPVEhFUldJU0UnXG4gICAgICA6ICdUSEVOJztcbiAgfVxuXG4gIGdldENoaXBUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0aW5nUnVsZUluZGV4ICE9PSAwXG4gICAgICAmJiB0aGlzLmlzUGVyY2VudGFnZU9ubHkoKVxuICAgICAgPyAnVGhpcyB2YWx1ZSB3aWxsIGJlIHNlcnZlZCB0byBhbGwgaWRlbnRpZmllZCB1c2VycyB3aG8gZG8gbm90IG1hdGNoIHRoZSB0YXJnZXRpbmcgcnVsZXMgYWJvdmUuJ1xuICAgICAgOiAnJztcbiAgfVxuXG4gIGxhc3RQZXJjZW50YWdlT3B0aW9uTGVmdCgpIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucmVtb3ZlZEFsbFJ1bGVzLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGFzdFZhbHVlID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMucGVyY2VudGFnZU9wdGlvbnMuY29udHJvbHNbMF0uY29udHJvbHMudmFsdWUuZ2V0UmF3VmFsdWUoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKCd2YWx1ZScsIHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZVZhbHVlRm9ybUdyb3VwKGxhc3RWYWx1ZSwgdGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUsIGZhbHNlLCB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdwZXJjZW50YWdlT3B0aW9ucycpO1xuICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBsYXN0Q29uZGl0aW9uRGVsZXRlZCgpIHtcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLnBlcmNlbnRhZ2VPcHRpb25zPy5jb250cm9scz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJlbW92ZWRBbGxSdWxlcy5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaXB0aW9uTGltaXRSZWFjaGVkQ2FsbGVkKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uTGltaXRSZWFjaGVkLmVtaXQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNpZGUtcGFkZCBjb25kaXRpb25zXCIgKm5nSWY9XCJmb3JtR3JvdXAuY29udHJvbHMuY29uZGl0aW9ucz8ubGVuZ3RoXCI+XG4gICAgPGFwcC1jb25kaXRpb25zIFtmb3JtQXJyYXldPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbmRpdGlvbnNcIiBbc2VnbWVudHNdPVwic2VnbWVudHNcIiBbZmxhZ1N0YXRlXT1cImZsYWdTdGF0ZVwiXG4gICAgICAgIFt0YXJnZXRpbmdSdWxlSW5kZXhdPVwidGFyZ2V0aW5nUnVsZUluZGV4XCIgKGxhc3RDb25kaXRpb25EZWxldGVkKT1cImxhc3RDb25kaXRpb25EZWxldGVkKClcIlxuICAgICAgICBbY2FuTWFuYWdlU2VnbWVudHNdPVwiY2FuTWFuYWdlU2VnbWVudHNcIiAoY3JlYXRlU2VnbWVudFJlcXVlc3RlZCk9XCJjcmVhdGVTZWdtZW50UmVxdWVzdGVkLmVtaXQoKVwiXG4gICAgICAgIChtYW5hZ2VTZWdtZW50c1JlcXVlc3RlZCk9XCJtYW5hZ2VTZWdtZW50c1JlcXVlc3RlZC5lbWl0KClcIlxuICAgICAgICAoYWRkU2VnbWVudENvbmRpdGlvblJlcXVlc3RlZFdpdGhvdXRTZWdtZW50cyk9XCJhZGRTZWdtZW50Q29uZGl0aW9uUmVxdWVzdGVkV2l0aG91dFNlZ21lbnRzLmVtaXQoKVwiXG4gICAgICAgIFtmZWF0dXJlRmxhZ0xpbWl0YXRpb25zXT1cImZlYXR1cmVGbGFnTGltaXRhdGlvbnNcIiAoc3Vic2NyaXB0aW9uTGltaXRSZWFjaGVkKT1cInN1YnNjcmlwdGlvbkxpbWl0UmVhY2hlZENhbGxlZCgpXCJcbiAgICAgICAgKHByZXJlcXVpc2l0ZUNvbmRpdGlvbkNoYW5nZWQpPVwicHJlcmVxdWlzaXRlQ29uZGl0aW9uQ2hhbmdlZC5lbWl0KClcIj48L2FwcC1jb25kaXRpb25zPlxuPC9kaXY+XG5cbjxtYXQtZGl2aWRlciAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb25kaXRpb25zPy5sZW5ndGhcIj48L21hdC1kaXZpZGVyPlxuXG48ZGl2IGNsYXNzPVwic2VydmVkLXZhbHVlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggc2lkZS1wYWRkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lciBmaXhlZC13aWR0aFwiICpuZ0lmPVwic2hvd0JhZGdlKClcIiBbbWF0VG9vbHRpcF09XCJnZXRDaGlwVG9vbHRpcCgpXCI+XG4gICAgICAgICAgICA8bWF0LWNoaXAtc2V0PlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBkaXNhYmxlZD57e2dldENoaXBUZXh0KCl9fTwvbWF0LWNoaXA+XG4gICAgICAgICAgICA8L21hdC1jaGlwLXNldD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGFwcC1wZXJjZW50YWdlLW9wdGlvbnMgY2xhc3M9XCJncm93XCIgKm5nSWY9XCJmb3JtR3JvdXAuY29udHJvbHMucGVyY2VudGFnZU9wdGlvbnM/Lmxlbmd0aFwiXG4gICAgICAgICAgICBbZm9ybUFycmF5XT1cImZvcm1Hcm91cC5jb250cm9scy5wZXJjZW50YWdlT3B0aW9uc1wiIFtmbGFnU3RhdGVdPVwiZmxhZ1N0YXRlXCJcbiAgICAgICAgICAgIChsYXN0UGVyY2VudGFnZU9wdGlvbkxlZnQpPVwibGFzdFBlcmNlbnRhZ2VPcHRpb25MZWZ0KClcIlxuICAgICAgICAgICAgKHN1YnNjcmlwdGlvbkxpbWl0UmVhY2hlZCk9XCJzdWJzY3JpcHRpb25MaW1pdFJlYWNoZWQuZW1pdCgpXCJcbiAgICAgICAgICAgIFtmZWF0dXJlRmxhZ0xpbWl0YXRpb25zXT1cImZlYXR1cmVGbGFnTGltaXRhdGlvbnNcIiBbaXNQZXJjZW50YWdlT25seVRhcmdldGluZ1J1bGVdPVwiaXNQZXJjZW50YWdlT25seSgpXCJcbiAgICAgICAgICAgIFtzaG93UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVdPVwic2hvd1BlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlXCJcbiAgICAgICAgICAgIFtwZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZV09XCJwZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAoY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVSZXF1ZXN0ZWQpPVwiY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVSZXF1ZXN0ZWQuZW1pdCgpXCI+XG4gICAgICAgIDwvYXBwLXBlcmNlbnRhZ2Utb3B0aW9ucz5cbiAgICAgICAgPGFwcC1mZWF0dXJlLWZsYWctdmFsdWUgY2xhc3M9XCJncm93XCIgKm5nSWY9XCJmb3JtR3JvdXAuY29udHJvbHMudmFsdWVcIiBbZmxhZ1N0YXRlXT1cImZsYWdTdGF0ZVwiXG4gICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cC5jb250cm9scy52YWx1ZVwiXG4gICAgICAgICAgICBbZmVhdHVyZUZsYWdMaW1pdGF0aW9uc109XCJmZWF0dXJlRmxhZ0xpbWl0YXRpb25zXCIgdG9vbHRpcD1cIlNlcnZlZCB2YWx1ZVwiPjwvYXBwLWZlYXR1cmUtZmxhZy12YWx1ZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJhZGQtcGVyYyBmbGV4IHNpZGUtcGFkZCBib3QtcGFkZFwiICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLnZhbHVlICYmICFmbGFnU3RhdGUucmVhZE9ubHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVudGVyLXNpZ25cIj48bWF0LWljb24+c3ViZGlyZWN0b3J5X2Fycm93X3JpZ2h0PC9tYXQtaWNvbj48L2Rpdj5cbiAgICAgICAgPGRpdiAoY2xpY2spPVwiY29udmVydFRvUGVyY2VudGFnZSgpXCIgbWF0VG9vbHRpcD1cIlRhcmdldCBhIHBlcmNlbnRhZ2Ugb2YgdXNlcnMgdG8gd2hvbSB0aGlzIHJ1bGUgYXBwbGllc1wiXG4gICAgICAgICAgICBjbGFzcz1cImFkZC1idG4gYWRkLXBlcmMtYnRuXCI+KyAlIE9QVElPTjwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19