cps-ui-kit 0.0.1

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 (143) hide show
  1. package/README.md +24 -0
  2. package/assets/icons/absa-logo.svg +12 -0
  3. package/assets/icons/access-denied.svg +12 -0
  4. package/assets/icons/access-menu.svg +11 -0
  5. package/assets/icons/access-unlock.svg +19 -0
  6. package/assets/icons/access.svg +9 -0
  7. package/assets/icons/add-domain.svg +8 -0
  8. package/assets/icons/add.svg +7 -0
  9. package/assets/icons/avatar-top-menu.svg +13 -0
  10. package/assets/icons/avatar.svg +8 -0
  11. package/assets/icons/bell.svg +7 -0
  12. package/assets/icons/book.svg +7 -0
  13. package/assets/icons/bookmark.svg +6 -0
  14. package/assets/icons/briefcase.svg +12 -0
  15. package/assets/icons/browse.svg +9 -0
  16. package/assets/icons/burger-arrow.svg +7 -0
  17. package/assets/icons/caret-down.svg +6 -0
  18. package/assets/icons/change.svg +6 -0
  19. package/assets/icons/checked.svg +15 -0
  20. package/assets/icons/chevron-down-2.svg +8 -0
  21. package/assets/icons/chevron-down.svg +6 -0
  22. package/assets/icons/circle.svg +6 -0
  23. package/assets/icons/close-x-2.svg +6 -0
  24. package/assets/icons/close-x.svg +8 -0
  25. package/assets/icons/community.svg +12 -0
  26. package/assets/icons/construction.svg +10 -0
  27. package/assets/icons/controls.svg +29 -0
  28. package/assets/icons/csv.svg +9 -0
  29. package/assets/icons/cub.svg +6 -0
  30. package/assets/icons/database.svg +12 -0
  31. package/assets/icons/datepicker.svg +8 -0
  32. package/assets/icons/delete.svg +6 -0
  33. package/assets/icons/dislike.svg +13 -0
  34. package/assets/icons/dots.svg +6 -0
  35. package/assets/icons/download.svg +12 -0
  36. package/assets/icons/dq.svg +24 -0
  37. package/assets/icons/dropdown-menu.svg +8 -0
  38. package/assets/icons/edit.svg +9 -0
  39. package/assets/icons/expand.svg +9 -0
  40. package/assets/icons/export.svg +6 -0
  41. package/assets/icons/eye.svg +8 -0
  42. package/assets/icons/filter.svg +8 -0
  43. package/assets/icons/filter_2.svg +11 -0
  44. package/assets/icons/follow.svg +13 -0
  45. package/assets/icons/glossary.svg +16 -0
  46. package/assets/icons/graph.svg +27 -0
  47. package/assets/icons/grid-view.svg +6 -0
  48. package/assets/icons/grid.svg +9 -0
  49. package/assets/icons/health.svg +6 -0
  50. package/assets/icons/heart.svg +6 -0
  51. package/assets/icons/help-circle.svg +7 -0
  52. package/assets/icons/home.svg +21 -0
  53. package/assets/icons/insight.svg +9 -0
  54. package/assets/icons/issues.svg +7 -0
  55. package/assets/icons/jpeg.svg +8 -0
  56. package/assets/icons/kris.svg +28 -0
  57. package/assets/icons/last-seen-product.svg +8 -0
  58. package/assets/icons/like.svg +7 -0
  59. package/assets/icons/line-vertical.svg +39 -0
  60. package/assets/icons/lock.svg +7 -0
  61. package/assets/icons/logout.svg +16 -0
  62. package/assets/icons/menu-expand.svg +17 -0
  63. package/assets/icons/minus.svg +10 -0
  64. package/assets/icons/multiple_users.svg +8 -0
  65. package/assets/icons/open.svg +7 -0
  66. package/assets/icons/path.svg +7 -0
  67. package/assets/icons/pdf.svg +9 -0
  68. package/assets/icons/plus.svg +6 -0
  69. package/assets/icons/projects.svg +10 -0
  70. package/assets/icons/question.svg +13 -0
  71. package/assets/icons/questions.svg +23 -0
  72. package/assets/icons/rectangle-rounded.svg +7 -0
  73. package/assets/icons/refresh-browse.svg +6 -0
  74. package/assets/icons/remove.svg +9 -0
  75. package/assets/icons/right.svg +7 -0
  76. package/assets/icons/schema_filter.svg +7 -0
  77. package/assets/icons/search.svg +9 -0
  78. package/assets/icons/settings.svg +9 -0
  79. package/assets/icons/sliders.svg +13 -0
  80. package/assets/icons/smart.svg +7 -0
  81. package/assets/icons/star.svg +6 -0
  82. package/assets/icons/stepper-completed.svg +6 -0
  83. package/assets/icons/success.svg +8 -0
  84. package/assets/icons/suggestion.svg +7 -0
  85. package/assets/icons/survivorship.svg +25 -0
  86. package/assets/icons/table-row-error.svg +6 -0
  87. package/assets/icons/table-row-success.svg +7 -0
  88. package/assets/icons/table-row-warning.svg +9 -0
  89. package/assets/icons/toast-error.svg +12 -0
  90. package/assets/icons/toast-info.svg +12 -0
  91. package/assets/icons/toast-success.svg +7 -0
  92. package/assets/icons/toast-warning.svg +12 -0
  93. package/assets/icons/tools.svg +18 -0
  94. package/assets/icons/user.svg +7 -0
  95. package/assets/icons/users.svg +10 -0
  96. package/assets/icons/vector-down.svg +7 -0
  97. package/assets/icons/vector-right.svg +6 -0
  98. package/assets/icons/vector-up.svg +7 -0
  99. package/assets/icons/vector.svg +7 -0
  100. package/assets/icons/wallet.svg +10 -0
  101. package/assets/icons/warning-circle.svg +12 -0
  102. package/assets/icons/warning.svg +7 -0
  103. package/assets/icons/widget-button-icon.svg +9 -0
  104. package/assets/icons/xls.svg +9 -0
  105. package/esm2020/cps-ui-kit.mjs +5 -0
  106. package/esm2020/lib/components/cps-button/cps-button.component.mjs +136 -0
  107. package/esm2020/lib/components/cps-checkbox/cps-checkbox.component.mjs +73 -0
  108. package/esm2020/lib/components/cps-chip/cps-chip.component.mjs +58 -0
  109. package/esm2020/lib/components/cps-icon/cps-icon.component.mjs +163 -0
  110. package/esm2020/lib/components/cps-input/cps-input.component.mjs +168 -0
  111. package/esm2020/lib/components/cps-radio/cps-radio.component.mjs +76 -0
  112. package/esm2020/lib/components/cps-select/cps-select.component.mjs +302 -0
  113. package/esm2020/lib/components/cps-tag/cps-tag.component.mjs +103 -0
  114. package/esm2020/lib/directives/click-outside.directive.mjs +32 -0
  115. package/esm2020/lib/pipes/combine-labels.pipe.mjs +24 -0
  116. package/esm2020/lib/pipes/label-by-value.pipe.mjs +15 -0
  117. package/esm2020/lib/utils/colors-utils.mjs +55 -0
  118. package/esm2020/lib/utils/size-utils.mjs +22 -0
  119. package/esm2020/public-api.mjs +12 -0
  120. package/fesm2015/cps-ui-kit.mjs +1210 -0
  121. package/fesm2015/cps-ui-kit.mjs.map +1 -0
  122. package/fesm2020/cps-ui-kit.mjs +1184 -0
  123. package/fesm2020/cps-ui-kit.mjs.map +1 -0
  124. package/index.d.ts +5 -0
  125. package/lib/components/cps-button/cps-button.component.d.ts +28 -0
  126. package/lib/components/cps-checkbox/cps-checkbox.component.d.ts +25 -0
  127. package/lib/components/cps-chip/cps-chip.component.d.ts +16 -0
  128. package/lib/components/cps-icon/cps-icon.component.d.ts +18 -0
  129. package/lib/components/cps-input/cps-input.component.d.ts +50 -0
  130. package/lib/components/cps-radio/cps-radio.component.d.ts +30 -0
  131. package/lib/components/cps-select/cps-select.component.d.ts +54 -0
  132. package/lib/components/cps-tag/cps-tag.component.d.ts +29 -0
  133. package/lib/directives/click-outside.directive.d.ts +10 -0
  134. package/lib/pipes/combine-labels.pipe.d.ts +7 -0
  135. package/lib/pipes/label-by-value.pipe.d.ts +7 -0
  136. package/lib/utils/colors-utils.d.ts +6 -0
  137. package/lib/utils/size-utils.d.ts +5 -0
  138. package/package.json +40 -0
  139. package/public-api.d.ts +8 -0
  140. package/styles/_colors.scss +456 -0
  141. package/styles/_variables.scss +1 -0
  142. package/styles/bootstrap-grid.css +4071 -0
  143. package/styles/styles.scss +2 -0
@@ -0,0 +1,302 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Optional, Output, Self, ViewChild } from '@angular/core';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { Subscription } from 'rxjs';
5
+ import { convertSize } from '../../utils/size-utils';
6
+ import { CpsIconComponent } from '../cps-icon/cps-icon.component';
7
+ import { CpsChipComponent } from '../cps-chip/cps-chip.component';
8
+ import { ClickOutsideDirective } from '../../directives/click-outside.directive';
9
+ import { LabelByValuePipe } from '../../pipes/label-by-value.pipe';
10
+ import { CombineLabelsPipe } from '../../pipes/combine-labels.pipe';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/forms";
13
+ import * as i2 from "@angular/common";
14
+ export class CpsSelectComponent {
15
+ set value(value) {
16
+ value = this._convertValue(value);
17
+ this._value = value;
18
+ this.onChange(value);
19
+ }
20
+ get value() {
21
+ return this._value;
22
+ }
23
+ constructor(_control) {
24
+ this._control = _control;
25
+ this.label = '';
26
+ this.placeholder = 'Please select';
27
+ this.hint = '';
28
+ this.returnObject = true;
29
+ this.multiple = false;
30
+ this.disabled = false;
31
+ this.width = '100%';
32
+ this.selectAll = true;
33
+ this.chips = true;
34
+ this.closableChips = true;
35
+ this.clearable = false;
36
+ this.openOnClear = true;
37
+ this.options = [];
38
+ this.optionLabel = 'label';
39
+ this.optionValue = 'value'; // works only if returnObject === false (TODO potentially can be of any type)
40
+ this.optionInfo = 'info';
41
+ this.hideDetails = false;
42
+ this._value = undefined;
43
+ this.valueChanged = new EventEmitter();
44
+ this._statusChangesSubscription = new Subscription();
45
+ this.error = '';
46
+ this.cvtWidth = '';
47
+ this.isOpened = false;
48
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
49
+ this.onChange = (event) => { };
50
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
51
+ this.onTouched = () => { };
52
+ if (this._control) {
53
+ this._control.valueAccessor = this;
54
+ }
55
+ }
56
+ ngOnChanges(changes) {
57
+ // eslint-disable-next-line dot-notation
58
+ if ('_value' in changes && changes['_value'].isFirstChange()) {
59
+ this.value = this._convertValue(this.value);
60
+ }
61
+ }
62
+ ngOnInit() {
63
+ this.cvtWidth = convertSize(this.width);
64
+ if (this.multiple && !this._value) {
65
+ this._value = [];
66
+ }
67
+ this._statusChangesSubscription = this._control?.statusChanges?.subscribe(() => {
68
+ this._checkErrors();
69
+ });
70
+ }
71
+ ngOnDestroy() {
72
+ this._statusChangesSubscription?.unsubscribe();
73
+ }
74
+ toggleOptions(dd, show) {
75
+ if (this.disabled || !dd)
76
+ return;
77
+ if (typeof show === 'boolean') {
78
+ if (show)
79
+ dd.classList.add('active');
80
+ else
81
+ dd.classList.remove('active');
82
+ }
83
+ else
84
+ dd.classList.toggle('active');
85
+ this.isOpened = dd.classList.contains('active');
86
+ if (this.isOpened) {
87
+ const selected = this.selectContainer.nativeElement.querySelector('.selected');
88
+ if (selected)
89
+ selected.scrollIntoView();
90
+ }
91
+ }
92
+ // private _filterOptions() {
93
+ // if (!this.optionsFilter || !this.multiple) return;
94
+ // this.filteredOptions = this.options.filter((o) => {
95
+ // if (this.returnObject) {
96
+ // return !this.value.find((v: any) => v === o);
97
+ // }
98
+ // return !this.value.find((v: any) => v === o[this.optionValue]);
99
+ // });
100
+ // }
101
+ select(option, byValue) {
102
+ const val = byValue
103
+ ? option
104
+ : this.returnObject
105
+ ? option
106
+ : option[this.optionValue];
107
+ if (this.multiple) {
108
+ let res = [];
109
+ if (this.value.includes(val)) {
110
+ res = this.value.filter((v) => v !== val);
111
+ }
112
+ else {
113
+ this.options.forEach((o) => {
114
+ const ov = this.returnObject ? o : o[this.optionValue];
115
+ if (this.value.some((v) => v === ov) || val === ov) {
116
+ res.push(ov);
117
+ }
118
+ });
119
+ }
120
+ this.updateValue(res);
121
+ }
122
+ else {
123
+ this.updateValue(val);
124
+ }
125
+ }
126
+ onOptionClick(option, dd) {
127
+ this.select(option, false);
128
+ if (!this.multiple) {
129
+ this.toggleOptions(dd, false);
130
+ }
131
+ }
132
+ toggleAll() {
133
+ let res = [];
134
+ if (this.value.length < this.options.length) {
135
+ if (this.returnObject) {
136
+ res = this.options;
137
+ }
138
+ else {
139
+ this.options.forEach((o) => {
140
+ res.push(o[this.optionValue]);
141
+ });
142
+ }
143
+ }
144
+ this.updateValue(res);
145
+ }
146
+ _checkErrors() {
147
+ const errors = this._control?.errors;
148
+ if (!this._control?.control?.touched || !errors) {
149
+ this.error = '';
150
+ return;
151
+ }
152
+ if ('required' in errors) {
153
+ this.error = 'Field is required';
154
+ return;
155
+ }
156
+ const errArr = Object.values(errors);
157
+ if (errArr.length < 1) {
158
+ this.error = '';
159
+ return;
160
+ }
161
+ const message = errArr.find((msg) => typeof msg === 'string');
162
+ this.error = message || 'Unknown error';
163
+ }
164
+ registerOnChange(fn) {
165
+ this.onChange = fn;
166
+ }
167
+ registerOnTouched(fn) {
168
+ this.onTouched = fn;
169
+ }
170
+ _convertValue(value) {
171
+ if (!this.returnObject) {
172
+ if (this.multiple) {
173
+ if (Array.isArray(value)) {
174
+ const temp = [];
175
+ value.forEach((v) => {
176
+ if (typeof v !== 'string') {
177
+ temp.push(v ? v[this.optionValue] : '');
178
+ }
179
+ else
180
+ temp.push(v);
181
+ });
182
+ value = temp;
183
+ }
184
+ else {
185
+ if (!value)
186
+ value = [];
187
+ else {
188
+ if (typeof value !== 'string') {
189
+ value = [value[this.optionValue]];
190
+ }
191
+ else
192
+ value = [value];
193
+ }
194
+ }
195
+ }
196
+ else {
197
+ if (typeof value !== 'string') {
198
+ value = value ? value[this.optionValue] : '';
199
+ }
200
+ }
201
+ }
202
+ else {
203
+ if (this.multiple) {
204
+ if (!Array.isArray(value)) {
205
+ value = [value];
206
+ }
207
+ }
208
+ }
209
+ return value;
210
+ }
211
+ writeValue(value) {
212
+ value = this._convertValue(value);
213
+ this.value = value;
214
+ }
215
+ updateValue(value) {
216
+ this.writeValue(value);
217
+ this.onChange(value);
218
+ this.valueChanged.emit(value);
219
+ }
220
+ clear(dd, event) {
221
+ event.stopPropagation();
222
+ if ((!this.multiple && this.value) ||
223
+ (this.multiple && this.value?.length > 0)) {
224
+ if (this.openOnClear) {
225
+ this.toggleOptions(dd, true);
226
+ }
227
+ const val = this.multiple ? [] : this.returnObject ? undefined : '';
228
+ this.updateValue(val);
229
+ }
230
+ }
231
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
232
+ setDisabledState(disabled) { }
233
+ onBlur() {
234
+ this._control?.control?.markAsTouched();
235
+ this._checkErrors();
236
+ }
237
+ focus() {
238
+ this.selectContainer?.nativeElement?.focus();
239
+ this.toggleOptions(this.selectContainer?.nativeElement, true);
240
+ }
241
+ }
242
+ CpsSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsSelectComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
243
+ CpsSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsSelectComponent, isStandalone: true, selector: "cps-select", inputs: { label: "label", placeholder: "placeholder", hint: "hint", returnObject: "returnObject", multiple: "multiple", disabled: "disabled", width: "width", selectAll: "selectAll", chips: "chips", closableChips: "closableChips", clearable: "clearable", openOnClear: "openOnClear", options: "options", optionLabel: "optionLabel", optionValue: "optionValue", optionInfo: "optionInfo", hideDetails: "hideDetails", _value: ["value", "_value"] }, outputs: { valueChanged: "valueChanged" }, viewQueries: [{ propertyName: "selectContainer", first: true, predicate: ["selectContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-select\"\n tabindex=\"0\"\n [ngClass]=\"{ disabled: disabled, error: error }\"\n #selectContainer\n (keydown.escape)=\"toggleOptions(selectContainer, false)\"\n (blur)=\"onBlur()\"\n>\n <label *ngIf=\"label\" class=\"cps-select-label\">{{ label }}</label>\n <div\n [class.focused]=\"isOpened\"\n (clickOutside)=\"toggleOptions(selectContainer, false)\"\n >\n <div class=\"cps-select-box\" (click)=\"toggleOptions(selectContainer)\">\n <div\n class=\"cps-select-box-placeholder\"\n *ngIf=\"(!value && !multiple) || (value?.length < 1 && multiple)\"\n >\n {{ placeholder }}\n </div>\n <div\n class=\"cps-select-box-items\"\n *ngIf=\"(value && !multiple) || (value?.length > 0 && multiple)\"\n >\n <span *ngIf=\"!multiple\" class=\"single-item\">\n {{\n returnObject\n ? value[optionLabel]\n : (value | labelByValue : options : optionValue : optionLabel)\n }}</span\n >\n <div *ngIf=\"multiple && !chips\" class=\"text-group\">\n <span>\n {{\n value\n | combineLabels\n : options\n : optionValue\n : optionLabel\n : returnObject\n }}</span\n >\n </div>\n\n <div *ngIf=\"multiple && chips\" class=\"chips-group\">\n <cps-chip\n *ngFor=\"let val of value\"\n [disabled]=\"disabled\"\n [closable]=\"closableChips\"\n (closed)=\"select(val, true)\"\n [label]=\"\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n \"\n >\n </cps-chip>\n </div>\n </div>\n <span class=\"cps-select-box-icons\">\n <span *ngIf=\"clearable && !disabled\" class=\"cps-select-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear(selectContainer, $event)\"\n ></cps-icon>\n </span>\n <span class=\"cps-select-box-chevron\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n color=\"text-dark\"\n ></cps-icon>\n </span>\n </span>\n </div>\n\n <div class=\"cps-select-options\">\n <div\n class=\"cps-select-options-option select-all-option\"\n [class.allselected]=\"value?.length === options.length\"\n *ngIf=\"multiple && selectAll\"\n (click)=\"toggleAll()\"\n >\n <span>\n <span *ngIf=\"multiple\" class=\"cps-select-options-option-check\">\n </span>\n <span class=\"cps-select-options-option-label\">Select all</span>\n </span>\n </div>\n <div\n class=\"cps-select-options-option\"\n *ngFor=\"let option of options\"\n (click)=\"onOptionClick(option, selectContainer)\"\n [class.selected]=\"\n multiple\n ? returnObject\n ? value?.includes(option)\n : value?.includes(option[optionValue])\n : returnObject\n ? option === value\n : option[optionValue] === value\n \"\n >\n <span>\n <span *ngIf=\"multiple\" class=\"cps-select-options-option-check\">\n </span>\n <span class=\"cps-select-options-option-label\">{{\n option[optionLabel]\n }}</span>\n </span>\n\n <span class=\"cps-select-options-option-info\">{{\n option[optionInfo]\n }}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-select-hint\">{{ hint }}</div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-select-error\">{{ error }}</div>\n</div>\n", styles: [":host{display:flex}:host .cps-select{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif}:host .cps-select.active .cps-select-options{display:block}:host .cps-select.active .cps-select-box{border:1px solid var(--cps-color-calm)}:host .cps-select .cps-select-label{display:inline-block;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem}:host .cps-select .cps-select-box{overflow:hidden;justify-content:space-between;min-height:38px;width:100%;cursor:pointer;background:white;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;align-items:center;display:flex;border:1px solid var(--cps-color-text-lightest);transition-duration:.2s}:host .cps-select .cps-select-box-placeholder{color:var(--cps-color-text-lightest);font-style:italic}:host .cps-select .cps-select-box-items .text-group,:host .cps-select .cps-select-box-items .single-item{color:var(--cps-color-text-dark);padding-top:3px;padding-bottom:3px}:host .cps-select .cps-select-box-items .chips-group cps-chip{padding-bottom:3px;padding-top:3px;padding-right:4px}text-group :host .cps-select .cps-select-box:hover{border:1px solid var(--cps-color-calm)}:host .cps-select .cps-select-box .cps-select-box-icons{display:flex}:host .cps-select .cps-select-box .cps-select-box-icons .cps-select-box-clear-icon{display:flex;color:var(--cps-color-calm);margin-left:8px}:host .cps-select .cps-select-box .cps-select-box-icons .cps-select-box-clear-icon cps-icon{opacity:.5;transition-duration:.2s}:host .cps-select .cps-select-box .cps-select-box-icons .cps-select-box-clear-icon cps-icon:hover{opacity:1}:host .cps-select .cps-select-box .cps-select-box-icons .cps-select-box-chevron{display:flex;margin-left:8px;transition-duration:.2s}:host .cps-select.active .cps-select-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-select .cps-select-options{z-index:1001;position:absolute;width:100%;background:white;box-shadow:0 5px 20px #0000000d;border-radius:4px;overflow-x:hidden;display:none;max-height:240px;overflow-y:auto;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}:host .cps-select .cps-select-options .cps-select-options-option{padding:12px;justify-content:space-between;display:flex;cursor:pointer}:host .cps-select .cps-select-options .cps-select-options-option:hover{background:#f8f4f5}:host .cps-select .cps-select-options .cps-select-options-option-label{color:var(--cps-color-text-dark)}:host .cps-select .cps-select-options .cps-select-options-option-info{color:var(--cps-color-text-light)}:host .cps-select .cps-select-options .cps-select-options-option-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}:host .cps-select .cps-select-options .cps-select-options-option-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}:host .cps-select .cps-select-options .cps-select-options-option.selected,:host .cps-select .cps-select-options .cps-select-options-option.allselected{font-weight:600}:host .cps-select .cps-select-options .cps-select-options-option.selected .cps-select-options-option-label,:host .cps-select .cps-select-options .cps-select-options-option.allselected .cps-select-options-option-label{color:var(--cps-color-calm)}:host .cps-select .cps-select-options .cps-select-options-option.selected .cps-select-options-option-check,:host .cps-select .cps-select-options .cps-select-options-option.allselected .cps-select-options-option-check{opacity:1}:host .cps-select .cps-select-options .cps-select-options-option.selected{background:#efe4e7}:host .cps-select .cps-select-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-select .cps-select-error{color:#c33;font-weight:700;font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-select.disabled{pointer-events:none}:host .cps-select.disabled .cps-select-box{background:#f7f7f7}:host .cps-select.disabled .cps-select-box-items{color:var(--cps-color-text-light)}:host .cps-select.disabled .cps-select-box-items .text-group,:host .cps-select.disabled .cps-select-box-items .single-item{color:var(--cps-color-text-light)}:host .cps-select.disabled .cps-select-label{color:var(--cps-color-text-mild)}:host .cps-select.error .cps-select-box{border-color:#c33!important;background:#fef3f2!important}:host .cps-select .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: ClickOutsideDirective, selector: "[clickOutside]", outputs: ["clickOutside"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsChipComponent, selector: "cps-chip", inputs: ["label", "icon", "iconPosition", "closable", "disabled"], outputs: ["closed"] }, { kind: "pipe", type: LabelByValuePipe, name: "labelByValue" }, { kind: "pipe", type: CombineLabelsPipe, name: "combineLabels" }] });
244
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsSelectComponent, decorators: [{
245
+ type: Component,
246
+ args: [{ standalone: true, imports: [
247
+ CommonModule,
248
+ FormsModule,
249
+ ClickOutsideDirective,
250
+ CpsIconComponent,
251
+ CpsChipComponent,
252
+ LabelByValuePipe,
253
+ CombineLabelsPipe
254
+ ], selector: 'cps-select', template: "<div\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-select\"\n tabindex=\"0\"\n [ngClass]=\"{ disabled: disabled, error: error }\"\n #selectContainer\n (keydown.escape)=\"toggleOptions(selectContainer, false)\"\n (blur)=\"onBlur()\"\n>\n <label *ngIf=\"label\" class=\"cps-select-label\">{{ label }}</label>\n <div\n [class.focused]=\"isOpened\"\n (clickOutside)=\"toggleOptions(selectContainer, false)\"\n >\n <div class=\"cps-select-box\" (click)=\"toggleOptions(selectContainer)\">\n <div\n class=\"cps-select-box-placeholder\"\n *ngIf=\"(!value && !multiple) || (value?.length < 1 && multiple)\"\n >\n {{ placeholder }}\n </div>\n <div\n class=\"cps-select-box-items\"\n *ngIf=\"(value && !multiple) || (value?.length > 0 && multiple)\"\n >\n <span *ngIf=\"!multiple\" class=\"single-item\">\n {{\n returnObject\n ? value[optionLabel]\n : (value | labelByValue : options : optionValue : optionLabel)\n }}</span\n >\n <div *ngIf=\"multiple && !chips\" class=\"text-group\">\n <span>\n {{\n value\n | combineLabels\n : options\n : optionValue\n : optionLabel\n : returnObject\n }}</span\n >\n </div>\n\n <div *ngIf=\"multiple && chips\" class=\"chips-group\">\n <cps-chip\n *ngFor=\"let val of value\"\n [disabled]=\"disabled\"\n [closable]=\"closableChips\"\n (closed)=\"select(val, true)\"\n [label]=\"\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n \"\n >\n </cps-chip>\n </div>\n </div>\n <span class=\"cps-select-box-icons\">\n <span *ngIf=\"clearable && !disabled\" class=\"cps-select-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear(selectContainer, $event)\"\n ></cps-icon>\n </span>\n <span class=\"cps-select-box-chevron\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n color=\"text-dark\"\n ></cps-icon>\n </span>\n </span>\n </div>\n\n <div class=\"cps-select-options\">\n <div\n class=\"cps-select-options-option select-all-option\"\n [class.allselected]=\"value?.length === options.length\"\n *ngIf=\"multiple && selectAll\"\n (click)=\"toggleAll()\"\n >\n <span>\n <span *ngIf=\"multiple\" class=\"cps-select-options-option-check\">\n </span>\n <span class=\"cps-select-options-option-label\">Select all</span>\n </span>\n </div>\n <div\n class=\"cps-select-options-option\"\n *ngFor=\"let option of options\"\n (click)=\"onOptionClick(option, selectContainer)\"\n [class.selected]=\"\n multiple\n ? returnObject\n ? value?.includes(option)\n : value?.includes(option[optionValue])\n : returnObject\n ? option === value\n : option[optionValue] === value\n \"\n >\n <span>\n <span *ngIf=\"multiple\" class=\"cps-select-options-option-check\">\n </span>\n <span class=\"cps-select-options-option-label\">{{\n option[optionLabel]\n }}</span>\n </span>\n\n <span class=\"cps-select-options-option-info\">{{\n option[optionInfo]\n }}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-select-hint\">{{ hint }}</div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-select-error\">{{ error }}</div>\n</div>\n", styles: [":host{display:flex}:host .cps-select{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif}:host .cps-select.active .cps-select-options{display:block}:host .cps-select.active .cps-select-box{border:1px solid var(--cps-color-calm)}:host .cps-select .cps-select-label{display:inline-block;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem}:host .cps-select .cps-select-box{overflow:hidden;justify-content:space-between;min-height:38px;width:100%;cursor:pointer;background:white;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;align-items:center;display:flex;border:1px solid var(--cps-color-text-lightest);transition-duration:.2s}:host .cps-select .cps-select-box-placeholder{color:var(--cps-color-text-lightest);font-style:italic}:host .cps-select .cps-select-box-items .text-group,:host .cps-select .cps-select-box-items .single-item{color:var(--cps-color-text-dark);padding-top:3px;padding-bottom:3px}:host .cps-select .cps-select-box-items .chips-group cps-chip{padding-bottom:3px;padding-top:3px;padding-right:4px}text-group :host .cps-select .cps-select-box:hover{border:1px solid var(--cps-color-calm)}:host .cps-select .cps-select-box .cps-select-box-icons{display:flex}:host .cps-select .cps-select-box .cps-select-box-icons .cps-select-box-clear-icon{display:flex;color:var(--cps-color-calm);margin-left:8px}:host .cps-select .cps-select-box .cps-select-box-icons .cps-select-box-clear-icon cps-icon{opacity:.5;transition-duration:.2s}:host .cps-select .cps-select-box .cps-select-box-icons .cps-select-box-clear-icon cps-icon:hover{opacity:1}:host .cps-select .cps-select-box .cps-select-box-icons .cps-select-box-chevron{display:flex;margin-left:8px;transition-duration:.2s}:host .cps-select.active .cps-select-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-select .cps-select-options{z-index:1001;position:absolute;width:100%;background:white;box-shadow:0 5px 20px #0000000d;border-radius:4px;overflow-x:hidden;display:none;max-height:240px;overflow-y:auto;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}:host .cps-select .cps-select-options .cps-select-options-option{padding:12px;justify-content:space-between;display:flex;cursor:pointer}:host .cps-select .cps-select-options .cps-select-options-option:hover{background:#f8f4f5}:host .cps-select .cps-select-options .cps-select-options-option-label{color:var(--cps-color-text-dark)}:host .cps-select .cps-select-options .cps-select-options-option-info{color:var(--cps-color-text-light)}:host .cps-select .cps-select-options .cps-select-options-option-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}:host .cps-select .cps-select-options .cps-select-options-option-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}:host .cps-select .cps-select-options .cps-select-options-option.selected,:host .cps-select .cps-select-options .cps-select-options-option.allselected{font-weight:600}:host .cps-select .cps-select-options .cps-select-options-option.selected .cps-select-options-option-label,:host .cps-select .cps-select-options .cps-select-options-option.allselected .cps-select-options-option-label{color:var(--cps-color-calm)}:host .cps-select .cps-select-options .cps-select-options-option.selected .cps-select-options-option-check,:host .cps-select .cps-select-options .cps-select-options-option.allselected .cps-select-options-option-check{opacity:1}:host .cps-select .cps-select-options .cps-select-options-option.selected{background:#efe4e7}:host .cps-select .cps-select-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-select .cps-select-error{color:#c33;font-weight:700;font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-select.disabled{pointer-events:none}:host .cps-select.disabled .cps-select-box{background:#f7f7f7}:host .cps-select.disabled .cps-select-box-items{color:var(--cps-color-text-light)}:host .cps-select.disabled .cps-select-box-items .text-group,:host .cps-select.disabled .cps-select-box-items .single-item{color:var(--cps-color-text-light)}:host .cps-select.disabled .cps-select-label{color:var(--cps-color-text-mild)}:host .cps-select.error .cps-select-box{border-color:#c33!important;background:#fef3f2!important}:host .cps-select .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}\n"] }]
255
+ }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
256
+ type: Self
257
+ }, {
258
+ type: Optional
259
+ }] }]; }, propDecorators: { label: [{
260
+ type: Input
261
+ }], placeholder: [{
262
+ type: Input
263
+ }], hint: [{
264
+ type: Input
265
+ }], returnObject: [{
266
+ type: Input
267
+ }], multiple: [{
268
+ type: Input
269
+ }], disabled: [{
270
+ type: Input
271
+ }], width: [{
272
+ type: Input
273
+ }], selectAll: [{
274
+ type: Input
275
+ }], chips: [{
276
+ type: Input
277
+ }], closableChips: [{
278
+ type: Input
279
+ }], clearable: [{
280
+ type: Input
281
+ }], openOnClear: [{
282
+ type: Input
283
+ }], options: [{
284
+ type: Input
285
+ }], optionLabel: [{
286
+ type: Input
287
+ }], optionValue: [{
288
+ type: Input
289
+ }], optionInfo: [{
290
+ type: Input
291
+ }], hideDetails: [{
292
+ type: Input
293
+ }], _value: [{
294
+ type: Input,
295
+ args: ['value']
296
+ }], valueChanged: [{
297
+ type: Output
298
+ }], selectContainer: [{
299
+ type: ViewChild,
300
+ args: ['selectContainer']
301
+ }] } });
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9jcHMtc2VsZWN0L2Nwcy1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXNlbGVjdC9jcHMtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBRUosU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7QUFpQnBFLE1BQU0sT0FBTyxrQkFBa0I7SUFzQjdCLElBQUksS0FBSyxDQUFFLEtBQVU7UUFDbkIsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxD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QkFEaEIsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTZWxmLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29udmVydFNpemUgfSBmcm9tICcuLi8uLi91dGlscy9zaXplLXV0aWxzJztcbmltcG9ydCB7IENwc0ljb25Db21wb25lbnQgfSBmcm9tICcuLi9jcHMtaWNvbi9jcHMtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzQ2hpcENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1jaGlwL2Nwcy1jaGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDbGlja091dHNpZGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NsaWNrLW91dHNpZGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IExhYmVsQnlWYWx1ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9sYWJlbC1ieS12YWx1ZS5waXBlJztcbmltcG9ydCB7IENvbWJpbmVMYWJlbHNQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvY29tYmluZS1sYWJlbHMucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENsaWNrT3V0c2lkZURpcmVjdGl2ZSxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc0NoaXBDb21wb25lbnQsXG4gICAgTGFiZWxCeVZhbHVlUGlwZSxcbiAgICBDb21iaW5lTGFiZWxzUGlwZVxuICBdLFxuICBzZWxlY3RvcjogJ2Nwcy1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3BzLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nwcy1zZWxlY3QuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDcHNTZWxlY3RDb21wb25lbnRcbmltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdQbGVhc2Ugc2VsZWN0JztcbiAgQElucHV0KCkgaGludCA9ICcnO1xuICBASW5wdXQoKSByZXR1cm5PYmplY3QgPSB0cnVlO1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSB3aWR0aDogbnVtYmVyIHwgc3RyaW5nID0gJzEwMCUnO1xuICBASW5wdXQoKSBzZWxlY3RBbGwgPSB0cnVlO1xuICBASW5wdXQoKSBjaGlwcyA9IHRydWU7XG4gIEBJbnB1dCgpIGNsb3NhYmxlQ2hpcHMgPSB0cnVlO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgb3Blbk9uQ2xlYXIgPSB0cnVlO1xuICBASW5wdXQoKSBvcHRpb25zID0gW10gYXMgYW55W107XG4gIEBJbnB1dCgpIG9wdGlvbkxhYmVsID0gJ2xhYmVsJztcbiAgQElucHV0KCkgb3B0aW9uVmFsdWUgPSAndmFsdWUnOyAvLyB3b3JrcyBvbmx5IGlmIHJldHVybk9iamVjdCA9PT0gZmFsc2UgKFRPRE8gcG90ZW50aWFsbHkgY2FuIGJlIG9mIGFueSB0eXBlKVxuICBASW5wdXQoKSBvcHRpb25JbmZvID0gJ2luZm8nO1xuICBASW5wdXQoKSBoaWRlRGV0YWlscyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgndmFsdWUnKSBfdmFsdWU6IGFueSA9IHVuZGVmaW5lZDtcblxuICBzZXQgdmFsdWUgKHZhbHVlOiBhbnkpIHtcbiAgICB2YWx1ZSA9IHRoaXMuX2NvbnZlcnRWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSAoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQFZpZXdDaGlsZCgnc2VsZWN0Q29udGFpbmVyJylcbiAgICBzZWxlY3RDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgX3N0YXR1c0NoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBlcnJvciA9ICcnO1xuICBjdnRXaWR0aCA9ICcnO1xuXG4gIGlzT3BlbmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IgKEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfY29udHJvbDogTmdDb250cm9sKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuX2NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMgKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZG90LW5vdGF0aW9uXG4gICAgaWYgKCdfdmFsdWUnIGluIGNoYW5nZXMgJiYgY2hhbmdlc1snX3ZhbHVlJ10uaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5fY29udmVydFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0ICgpIHtcbiAgICB0aGlzLmN2dFdpZHRoID0gY29udmVydFNpemUodGhpcy53aWR0aCk7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgIXRoaXMuX3ZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXR1c0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLl9jb250cm9sPy5zdGF0dXNDaGFuZ2VzPy5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoZWNrRXJyb3JzKCk7XG4gICAgICB9XG4gICAgKSBhcyBTdWJzY3JpcHRpb247XG4gIH1cblxuICBuZ09uRGVzdHJveSAoKSB7XG4gICAgdGhpcy5fc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHRvZ2dsZU9wdGlvbnMgKGRkOiBIVE1MRWxlbWVudCwgc2hvdz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhZGQpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHNob3cgPT09ICdib29sZWFuJykge1xuICAgICAgaWYgKHNob3cpIGRkLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgICAgZWxzZSBkZC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICB9IGVsc2UgZGQuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XG5cbiAgICB0aGlzLmlzT3BlbmVkID0gZGQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKTtcblxuICAgIGlmICh0aGlzLmlzT3BlbmVkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuc2VsZWN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNlbGVjdGVkJyk7XG4gICAgICBpZiAoc2VsZWN0ZWQpIHNlbGVjdGVkLnNjcm9sbEludG9WaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJpdmF0ZSBfZmlsdGVyT3B0aW9ucygpIHtcbiAgLy8gICBpZiAoIXRoaXMub3B0aW9uc0ZpbHRlciB8fCAhdGhpcy5tdWx0aXBsZSkgcmV0dXJuO1xuICAvLyAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigobykgPT4ge1xuICAvLyAgICAgaWYgKHRoaXMucmV0dXJuT2JqZWN0KSB7XG4gIC8vICAgICAgIHJldHVybiAhdGhpcy52YWx1ZS5maW5kKCh2OiBhbnkpID0+IHYgPT09IG8pO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuICF0aGlzLnZhbHVlLmZpbmQoKHY6IGFueSkgPT4gdiA9PT0gb1t0aGlzLm9wdGlvblZhbHVlXSk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICBzZWxlY3QgKG9wdGlvbjogYW55LCBieVZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgdmFsID0gYnlWYWx1ZVxuICAgICAgPyBvcHRpb25cbiAgICAgIDogdGhpcy5yZXR1cm5PYmplY3RcbiAgICAgICAgPyBvcHRpb25cbiAgICAgICAgOiBvcHRpb25bdGhpcy5vcHRpb25WYWx1ZV07XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGxldCByZXMgPSBbXSBhcyBhbnk7XG4gICAgICBpZiAodGhpcy52YWx1ZS5pbmNsdWRlcyh2YWwpKSB7XG4gICAgICAgIHJlcyA9IHRoaXMudmFsdWUuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaCgobykgPT4ge1xuICAgICAgICAgIGNvbnN0IG92ID0gdGhpcy5yZXR1cm5PYmplY3QgPyBvIDogb1t0aGlzLm9wdGlvblZhbHVlXTtcbiAgICAgICAgICBpZiAodGhpcy52YWx1ZS5zb21lKCh2OiBhbnkpID0+IHYgPT09IG92KSB8fCB2YWwgPT09IG92KSB7XG4gICAgICAgICAgICByZXMucHVzaChvdik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlVmFsdWUocmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWwpO1xuICAgIH1cbiAgfVxuXG4gIG9uT3B0aW9uQ2xpY2sgKG9wdGlvbjogYW55LCBkZDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLnNlbGVjdChvcHRpb24sIGZhbHNlKTtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlT3B0aW9ucyhkZCwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUFsbCAoKSB7XG4gICAgbGV0IHJlcyA9IFtdO1xuICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA8IHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLnJldHVybk9iamVjdCkge1xuICAgICAgICByZXMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaCgobykgPT4ge1xuICAgICAgICAgIHJlcy5wdXNoKG9bdGhpcy5vcHRpb25WYWx1ZV0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVWYWx1ZShyZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tFcnJvcnMgKCk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuX2NvbnRyb2w/LmVycm9ycztcblxuICAgIGlmICghdGhpcy5fY29udHJvbD8uY29udHJvbD8udG91Y2hlZCB8fCAhZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9yID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCdyZXF1aXJlZCcgaW4gZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9yID0gJ0ZpZWxkIGlzIHJlcXVpcmVkJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJBcnIgPSBPYmplY3QudmFsdWVzKGVycm9ycyk7XG4gICAgaWYgKGVyckFyci5sZW5ndGggPCAxKSB7XG4gICAgICB0aGlzLmVycm9yID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJBcnIuZmluZCgobXNnKSA9PiB0eXBlb2YgbXNnID09PSAnc3RyaW5nJyk7XG5cbiAgICB0aGlzLmVycm9yID0gbWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcic7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UgKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZCAoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwcml2YXRlIF9jb252ZXJ0VmFsdWUgKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghdGhpcy5yZXR1cm5PYmplY3QpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IHRlbXA6IGFueSA9IFtdO1xuICAgICAgICAgIHZhbHVlLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdGVtcC5wdXNoKHYgPyB2W3RoaXMub3B0aW9uVmFsdWVdIDogJycpO1xuICAgICAgICAgICAgfSBlbHNlIHRlbXAucHVzaCh2KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YWx1ZSA9IHRlbXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF2YWx1ZSkgdmFsdWUgPSBbXTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gW3ZhbHVlW3RoaXMub3B0aW9uVmFsdWVdXTtcbiAgICAgICAgICAgIH0gZWxzZSB2YWx1ZSA9IFt2YWx1ZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPyB2YWx1ZVt0aGlzLm9wdGlvblZhbHVlXSA6ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IFt2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSAodmFsdWU6IGFueSkge1xuICAgIHZhbHVlID0gdGhpcy5fY29udmVydFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlICh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyIChkZDogSFRNTEVsZW1lbnQsIGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmIChcbiAgICAgICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlKSB8fFxuICAgICAgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZT8ubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm9wZW5PbkNsZWFyKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlT3B0aW9ucyhkZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWwgPSB0aGlzLm11bHRpcGxlID8gW10gOiB0aGlzLnJldHVybk9iamVjdCA/IHVuZGVmaW5lZCA6ICcnO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWwpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgc2V0RGlzYWJsZWRTdGF0ZSAoZGlzYWJsZWQ6IGJvb2xlYW4pIHt9XG5cbiAgb25CbHVyICgpIHtcbiAgICB0aGlzLl9jb250cm9sPy5jb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgfVxuXG4gIGZvY3VzICgpIHtcbiAgICB0aGlzLnNlbGVjdENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcbiAgICB0aGlzLnRvZ2dsZU9wdGlvbnModGhpcy5zZWxlY3RDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsIHRydWUpO1xuICB9XG59XG4iLCI8ZGl2XG4gIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGN2dFdpZHRoIH1cIlxuICBjbGFzcz1cImNwcy1zZWxlY3RcIlxuICB0YWJpbmRleD1cIjBcIlxuICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlZCwgZXJyb3I6IGVycm9yIH1cIlxuICAjc2VsZWN0Q29udGFpbmVyXG4gIChrZXlkb3duLmVzY2FwZSk9XCJ0b2dnbGVPcHRpb25zKHNlbGVjdENvbnRhaW5lciwgZmFsc2UpXCJcbiAgKGJsdXIpPVwib25CbHVyKClcIlxuPlxuICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwiY3BzLXNlbGVjdC1sYWJlbFwiPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgPGRpdlxuICAgIFtjbGFzcy5mb2N1c2VkXT1cImlzT3BlbmVkXCJcbiAgICAoY2xpY2tPdXRzaWRlKT1cInRvZ2dsZU9wdGlvbnMoc2VsZWN0Q29udGFpbmVyLCBmYWxzZSlcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImNwcy1zZWxlY3QtYm94XCIgKGNsaWNrKT1cInRvZ2dsZU9wdGlvbnMoc2VsZWN0Q29udGFpbmVyKVwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNwcy1zZWxlY3QtYm94LXBsYWNlaG9sZGVyXCJcbiAgICAgICAgKm5nSWY9XCIoIXZhbHVlICYmICFtdWx0aXBsZSkgfHwgKHZhbHVlPy5sZW5ndGggPCAxICYmIG11bHRpcGxlKVwiXG4gICAgICA+XG4gICAgICAgIHt7IHBsYWNlaG9sZGVyIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjcHMtc2VsZWN0LWJveC1pdGVtc1wiXG4gICAgICAgICpuZ0lmPVwiKHZhbHVlICYmICFtdWx0aXBsZSkgfHwgKHZhbHVlPy5sZW5ndGggPiAwICYmIG11bHRpcGxlKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIW11bHRpcGxlXCIgY2xhc3M9XCJzaW5nbGUtaXRlbVwiPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICByZXR1cm5PYmplY3RcbiAgICAgICAgICAgICAgPyB2YWx1ZVtvcHRpb25MYWJlbF1cbiAgICAgICAgICAgICAgOiAodmFsdWUgfCBsYWJlbEJ5VmFsdWUgOiBvcHRpb25zIDogb3B0aW9uVmFsdWUgOiBvcHRpb25MYWJlbClcbiAgICAgICAgICB9fTwvc3BhblxuICAgICAgICA+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJtdWx0aXBsZSAmJiAhY2hpcHNcIiBjbGFzcz1cInRleHQtZ3JvdXBcIj5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgfCBjb21iaW5lTGFiZWxzXG4gICAgICAgICAgICAgICAgICA6IG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgIDogb3B0aW9uVmFsdWVcbiAgICAgICAgICAgICAgICAgIDogb3B0aW9uTGFiZWxcbiAgICAgICAgICAgICAgICAgIDogcmV0dXJuT2JqZWN0XG4gICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm11bHRpcGxlICYmIGNoaXBzXCIgY2xhc3M9XCJjaGlwcy1ncm91cFwiPlxuICAgICAgICAgIDxjcHMtY2hpcFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbCBvZiB2YWx1ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2Nsb3NhYmxlXT1cImNsb3NhYmxlQ2hpcHNcIlxuICAgICAgICAgICAgKGNsb3NlZCk9XCJzZWxlY3QodmFsLCB0cnVlKVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdFxuICAgICAgICAgICAgICAgID8gdmFsW29wdGlvbkxhYmVsXVxuICAgICAgICAgICAgICAgIDogKHZhbCB8IGxhYmVsQnlWYWx1ZSA6IG9wdGlvbnMgOiBvcHRpb25WYWx1ZSA6IG9wdGlvbkxhYmVsKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9jcHMtY2hpcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXNlbGVjdC1ib3gtaWNvbnNcIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjbGVhcmFibGUgJiYgIWRpc2FibGVkXCIgY2xhc3M9XCJjcHMtc2VsZWN0LWJveC1jbGVhci1pY29uXCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwiZGVsZXRlXCJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoc2VsZWN0Q29udGFpbmVyLCAkZXZlbnQpXCJcbiAgICAgICAgICA+PC9jcHMtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy1zZWxlY3QtYm94LWNoZXZyb25cIj5cbiAgICAgICAgICA8Y3BzLWljb25cbiAgICAgICAgICAgIGljb249XCJjaGV2cm9uLWRvd25cIlxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIGNvbG9yPVwidGV4dC1kYXJrXCJcbiAgICAgICAgICA+PC9jcHMtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNwcy1zZWxlY3Qtb3B0aW9uc1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNwcy1zZWxlY3Qtb3B0aW9ucy1vcHRpb24gc2VsZWN0LWFsbC1vcHRpb25cIlxuICAgICAgICBbY2xhc3MuYWxsc2VsZWN0ZWRdPVwidmFsdWU/Lmxlbmd0aCA9PT0gb3B0aW9ucy5sZW5ndGhcIlxuICAgICAgICAqbmdJZj1cIm11bHRpcGxlICYmIHNlbGVjdEFsbFwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVBbGwoKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwibXVsdGlwbGVcIiBjbGFzcz1cImNwcy1zZWxlY3Qtb3B0aW9ucy1vcHRpb24tY2hlY2tcIj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtc2VsZWN0LW9wdGlvbnMtb3B0aW9uLWxhYmVsXCI+U2VsZWN0IGFsbDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY3BzLXNlbGVjdC1vcHRpb25zLW9wdGlvblwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiXG4gICAgICAgIChjbGljayk9XCJvbk9wdGlvbkNsaWNrKG9wdGlvbiwgc2VsZWN0Q29udGFpbmVyKVwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJcbiAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgPyByZXR1cm5PYmplY3RcbiAgICAgICAgICAgICAgPyB2YWx1ZT8uaW5jbHVkZXMob3B0aW9uKVxuICAgICAgICAgICAgICA6IHZhbHVlPy5pbmNsdWRlcyhvcHRpb25bb3B0aW9uVmFsdWVdKVxuICAgICAgICAgICAgOiByZXR1cm5PYmplY3RcbiAgICAgICAgICAgID8gb3B0aW9uID09PSB2YWx1ZVxuICAgICAgICAgICAgOiBvcHRpb25bb3B0aW9uVmFsdWVdID09PSB2YWx1ZVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIm11bHRpcGxlXCIgY2xhc3M9XCJjcHMtc2VsZWN0LW9wdGlvbnMtb3B0aW9uLWNoZWNrXCI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXNlbGVjdC1vcHRpb25zLW9wdGlvbi1sYWJlbFwiPnt7XG4gICAgICAgICAgICBvcHRpb25bb3B0aW9uTGFiZWxdXG4gICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy1zZWxlY3Qtb3B0aW9ucy1vcHRpb24taW5mb1wiPnt7XG4gICAgICAgICAgb3B0aW9uW29wdGlvbkluZm9dXG4gICAgICAgIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiIWVycm9yICYmICFoaWRlRGV0YWlsc1wiIGNsYXNzPVwiY3BzLXNlbGVjdC1oaW50XCI+e3sgaGludCB9fTwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZXJyb3IgJiYgIWhpZGVEZXRhaWxzXCIgY2xhc3M9XCJjcHMtc2VsZWN0LWVycm9yXCI+e3sgZXJyb3IgfX08L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,103 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Optional, Output, Self } from '@angular/core';
3
+ import { getCSSColor } from '../../utils/colors-utils';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/forms";
6
+ import * as i2 from "@angular/common";
7
+ export class CpsTagComponent {
8
+ set value(value) {
9
+ this._value = value;
10
+ this.onChange(value);
11
+ }
12
+ get value() {
13
+ return this._value;
14
+ }
15
+ constructor(_control) {
16
+ this._control = _control;
17
+ this.type = 'custom'; // higher precedence over color
18
+ this.label = '';
19
+ this.color = '';
20
+ this.disabled = false;
21
+ this.selectable = false;
22
+ this.valueChanged = new EventEmitter();
23
+ this.classesList = [];
24
+ this.tagColor = '';
25
+ this._value = false;
26
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
27
+ this.onChange = (event) => { };
28
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
29
+ this.onTouched = () => { };
30
+ if (this._control) {
31
+ this._control.valueAccessor = this;
32
+ }
33
+ }
34
+ ngOnChanges() {
35
+ this.setClasses();
36
+ }
37
+ setClasses() {
38
+ this.classesList = ['tag'];
39
+ if (this.selectable) {
40
+ this.classesList.push('tag--selectable');
41
+ }
42
+ if (this.disabled) {
43
+ this.classesList.push('tag--disabled');
44
+ }
45
+ switch (this.type) {
46
+ case 'security': {
47
+ this.classesList.push('tag--security');
48
+ break;
49
+ }
50
+ case 'classification': {
51
+ this.classesList.push('tag--classification');
52
+ break;
53
+ }
54
+ default:
55
+ if (this.color)
56
+ this.tagColor = getCSSColor(this.color);
57
+ }
58
+ }
59
+ registerOnChange(fn) {
60
+ this.onChange = fn;
61
+ }
62
+ registerOnTouched(fn) {
63
+ this.onTouched = fn;
64
+ }
65
+ writeValue(value) {
66
+ this.value = value;
67
+ }
68
+ toggleSelected() {
69
+ if (this.disabled || !this.selectable)
70
+ return;
71
+ this._updateValue(!this.value);
72
+ }
73
+ _updateValue(value) {
74
+ this.writeValue(value);
75
+ this.onChange(value);
76
+ this.valueChanged.emit(value);
77
+ }
78
+ }
79
+ CpsTagComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTagComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
80
+ CpsTagComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsTagComponent, isStandalone: true, selector: "cps-tag", inputs: { type: "type", label: "label", color: "color", disabled: "disabled", selectable: "selectable", value: "value" }, outputs: { valueChanged: "valueChanged" }, usesOnChanges: true, ngImport: i0, template: "<div\n [ngClass]=\"classesList\"\n [class.unselected]=\"!value && selectable\"\n [ngStyle]=\"{ 'border-color': tagColor || 'none' }\"\n (click)=\"toggleSelected()\"\n>\n <p>{{ label }}</p>\n</div>\n", styles: [":host{width:-moz-fit-content;width:fit-content;display:inline-block;-webkit-user-select:none;user-select:none}:host .tag{min-height:25px;align-items:center;padding:0 10px;background-color:#fff;display:inline-flex;cursor:default;border:solid 1px;border-left:solid 4px}:host .tag.tag--security{border-color:var(--cps-color-warn)}:host .tag.tag--classification{border-color:var(--cps-color-info)}:host .tag.tag--selectable{cursor:pointer}:host .tag.tag--selectable:hover:not(:active):not(:disabled){box-shadow:1px 3px 4px #0000001a}:host .tag.tag--disabled{pointer-events:none;border-color:var(--cps-color-line-dark)!important}:host .tag.tag--disabled p{color:var(--cps-color-text-light)}:host .tag.unselected{border-color:var(--cps-color-text-light)!important}:host .tag p{margin:0;font-size:11px;color:var(--cps-color-text-dark)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTagComponent, decorators: [{
82
+ type: Component,
83
+ args: [{ standalone: true, imports: [CommonModule], selector: 'cps-tag', template: "<div\n [ngClass]=\"classesList\"\n [class.unselected]=\"!value && selectable\"\n [ngStyle]=\"{ 'border-color': tagColor || 'none' }\"\n (click)=\"toggleSelected()\"\n>\n <p>{{ label }}</p>\n</div>\n", styles: [":host{width:-moz-fit-content;width:fit-content;display:inline-block;-webkit-user-select:none;user-select:none}:host .tag{min-height:25px;align-items:center;padding:0 10px;background-color:#fff;display:inline-flex;cursor:default;border:solid 1px;border-left:solid 4px}:host .tag.tag--security{border-color:var(--cps-color-warn)}:host .tag.tag--classification{border-color:var(--cps-color-info)}:host .tag.tag--selectable{cursor:pointer}:host .tag.tag--selectable:hover:not(:active):not(:disabled){box-shadow:1px 3px 4px #0000001a}:host .tag.tag--disabled{pointer-events:none;border-color:var(--cps-color-line-dark)!important}:host .tag.tag--disabled p{color:var(--cps-color-text-light)}:host .tag.unselected{border-color:var(--cps-color-text-light)!important}:host .tag p{margin:0;font-size:11px;color:var(--cps-color-text-dark)}\n"] }]
84
+ }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
85
+ type: Self
86
+ }, {
87
+ type: Optional
88
+ }] }]; }, propDecorators: { type: [{
89
+ type: Input
90
+ }], label: [{
91
+ type: Input
92
+ }], color: [{
93
+ type: Input
94
+ }], disabled: [{
95
+ type: Input
96
+ }], selectable: [{
97
+ type: Input
98
+ }], value: [{
99
+ type: Input
100
+ }], valueChanged: [{
101
+ type: Output
102
+ }] } });
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRhZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9jcHMtdGFnL2Nwcy10YWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRhZy9jcHMtdGFnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBVXZELE1BQU0sT0FBTyxlQUFlO0lBTTFCLElBQWEsS0FBSyxDQUFFLEtBQWM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFTRCxZQUF5QyxRQUFtQjtRQUFuQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBckJuRCxTQUFJLEdBQTZDLFFBQVEsQ0FBQyxDQUFDLCtCQUErQjtRQUMxRixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQVVsQixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFckQsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFDM0IsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVOLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFtQ3ZCLGdFQUFnRTtRQUNoRSxhQUFRLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUM5QixnRUFBZ0U7UUFDaEUsY0FBUyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQW5DbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pCLEtBQUssVUFBVSxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU07YUFDUDtZQUNELEtBQUssZ0JBQWdCLENBQUMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDN0MsTUFBTTthQUNQO1lBQ0Q7Z0JBQ0UsSUFBSSxJQUFJLENBQUMsS0FBSztvQkFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDO0lBT0QsZ0JBQWdCLENBQUUsRUFBTztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUUsRUFBTztRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsVUFBVSxDQUFFLEtBQWM7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sWUFBWSxDQUFFLEtBQWM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7OzRHQWpGVSxlQUFlO2dHQUFmLGVBQWUsNlBDcEI1Qiw2TUFRQSx1M0JET1ksWUFBWTsyRkFLWCxlQUFlO2tCQVAzQixTQUFTO2lDQUNJLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxZQUNiLFNBQVM7OzBCQTBCTCxJQUFJOzswQkFBSSxRQUFROzRDQXJCckIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBU0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldENTU0NvbG9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29sb3JzLXV0aWxzJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgc2VsZWN0b3I6ICdjcHMtdGFnJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nwcy10YWcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcHMtdGFnLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3BzVGFnQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHR5cGU6ICdzZWN1cml0eScgfCAnY2xhc3NpZmljYXRpb24nIHwgJ2N1c3RvbScgPSAnY3VzdG9tJzsgLy8gaGlnaGVyIHByZWNlZGVuY2Ugb3ZlciBjb2xvclxuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuICBASW5wdXQoKSBjb2xvciA9ICcnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWxlY3RhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNldCB2YWx1ZSAodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHZhbHVlICgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGNsYXNzZXNMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICB0YWdDb2xvciA9ICcnO1xuXG4gIHByaXZhdGUgX3ZhbHVlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IgKEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfY29udHJvbDogTmdDb250cm9sKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuX2NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMgKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0Q2xhc3NlcygpO1xuICB9XG5cbiAgc2V0Q2xhc3NlcyAoKTogdm9pZCB7XG4gICAgdGhpcy5jbGFzc2VzTGlzdCA9IFsndGFnJ107XG5cbiAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICB0aGlzLmNsYXNzZXNMaXN0LnB1c2goJ3RhZy0tc2VsZWN0YWJsZScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5jbGFzc2VzTGlzdC5wdXNoKCd0YWctLWRpc2FibGVkJyk7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlICdzZWN1cml0eSc6IHtcbiAgICAgICAgdGhpcy5jbGFzc2VzTGlzdC5wdXNoKCd0YWctLXNlY3VyaXR5Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2xhc3NpZmljYXRpb24nOiB7XG4gICAgICAgIHRoaXMuY2xhc3Nlc0xpc3QucHVzaCgndGFnLS1jbGFzc2lmaWNhdGlvbicpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmNvbG9yKSB0aGlzLnRhZ0NvbG9yID0gZ2V0Q1NTQ29sb3IodGhpcy5jb2xvcik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICByZWdpc3Rlck9uQ2hhbmdlIChmbjogYW55KSB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQgKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSAodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RlZCAoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuc2VsZWN0YWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuX3VwZGF0ZVZhbHVlKCF0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVZhbHVlICh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQuZW1pdCh2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgW25nQ2xhc3NdPVwiY2xhc3Nlc0xpc3RcIlxuICBbY2xhc3MudW5zZWxlY3RlZF09XCIhdmFsdWUgJiYgc2VsZWN0YWJsZVwiXG4gIFtuZ1N0eWxlXT1cInsgJ2JvcmRlci1jb2xvcic6IHRhZ0NvbG9yIHx8ICdub25lJyB9XCJcbiAgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGVkKClcIlxuPlxuICA8cD57eyBsYWJlbCB9fTwvcD5cbjwvZGl2PlxuIl19
@@ -0,0 +1,32 @@
1
+ import { Directive, Output, EventEmitter, HostListener } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ClickOutsideDirective {
4
+ // eslint-disable-next-line no-useless-constructor
5
+ constructor(elementRef) {
6
+ this.elementRef = elementRef;
7
+ this.clickOutside = new EventEmitter();
8
+ }
9
+ onClick(target) {
10
+ if (!this.elementRef?.nativeElement?.classList?.contains('focused'))
11
+ return;
12
+ const clickedInside = this.elementRef?.nativeElement?.contains(target);
13
+ if (!clickedInside) {
14
+ this.clickOutside.emit();
15
+ }
16
+ }
17
+ }
18
+ ClickOutsideDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ClickOutsideDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
19
+ ClickOutsideDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: ClickOutsideDirective, isStandalone: true, selector: "[clickOutside]", outputs: { clickOutside: "clickOutside" }, host: { listeners: { "document:click": "onClick($event.target)" } }, ngImport: i0 });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ClickOutsideDirective, decorators: [{
21
+ type: Directive,
22
+ args: [{
23
+ standalone: true,
24
+ selector: '[clickOutside]'
25
+ }]
26
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { clickOutside: [{
27
+ type: Output
28
+ }], onClick: [{
29
+ type: HostListener,
30
+ args: ['document:click', ['$event.target']]
31
+ }] } });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvZGlyZWN0aXZlcy9jbGljay1vdXRzaWRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBRVosWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDOztBQU12QixNQUFNLE9BQU8scUJBQXFCO0lBR2hDLGtEQUFrRDtJQUNsRCxZQUFxQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBSGpDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUdKLENBQUM7SUFHeEMsT0FBTyxDQUFFLE1BQVc7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTztRQUM1RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQzs7a0hBYlUscUJBQXFCO3NHQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFKakMsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0I7aUdBRVcsWUFBWTtzQkFBckIsTUFBTTtnQkFNQSxPQUFPO3NCQURiLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tjbGlja091dHNpZGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBDbGlja091dHNpZGVEaXJlY3RpdmUge1xuICBAT3V0cHV0KCkgY2xpY2tPdXRzaWRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gIGNvbnN0cnVjdG9yIChwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudC50YXJnZXQnXSlcbiAgcHVibGljIG9uQ2xpY2sgKHRhcmdldDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdD8uY29udGFpbnMoJ2ZvY3VzZWQnKSkgcmV0dXJuO1xuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPSB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgaWYgKCFjbGlja2VkSW5zaWRlKSB7XG4gICAgICB0aGlzLmNsaWNrT3V0c2lkZS5lbWl0KCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,24 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class CombineLabelsPipe {
4
+ transform(values, options, valueKey, labelKey, returnObject) {
5
+ return values
6
+ .map((v) => {
7
+ if (returnObject) {
8
+ return v[labelKey];
9
+ }
10
+ else {
11
+ const option = options.find((opt) => opt[valueKey] === v);
12
+ return option ? option[labelKey] : 'unknown';
13
+ }
14
+ })
15
+ .join(', ');
16
+ }
17
+ }
18
+ CombineLabelsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CombineLabelsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
19
+ CombineLabelsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: CombineLabelsPipe, isStandalone: true, name: "combineLabels" });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CombineLabelsPipe, decorators: [{
21
+ type: Pipe,
22
+ args: [{ standalone: true, name: 'combineLabels' }]
23
+ }] });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS1sYWJlbHMucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nwcy11aS1raXQvc3JjL2xpYi9waXBlcy9jb21iaW5lLWxhYmVscy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUdwRCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFNBQVMsQ0FDUCxNQUFhLEVBQ2IsT0FBYyxFQUNkLFFBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLFlBQXFCO1FBRXJCLE9BQU8sTUFBTTthQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1QsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3BCO2lCQUFNO2dCQUNMLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDMUQsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQzlDO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUM7OzhHQWxCVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUQ3QixJQUFJO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7IHN0YW5kYWxvbmU6IHRydWUsIG5hbWU6ICdjb21iaW5lTGFiZWxzJyB9KVxuZXhwb3J0IGNsYXNzIENvbWJpbmVMYWJlbHNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSAoXG4gICAgdmFsdWVzOiBhbnlbXSxcbiAgICBvcHRpb25zOiBhbnlbXSxcbiAgICB2YWx1ZUtleTogc3RyaW5nLFxuICAgIGxhYmVsS2V5OiBzdHJpbmcsXG4gICAgcmV0dXJuT2JqZWN0OiBib29sZWFuXG4gICk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlc1xuICAgICAgLm1hcCgodikgPT4ge1xuICAgICAgICBpZiAocmV0dXJuT2JqZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIHZbbGFiZWxLZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHRbdmFsdWVLZXldID09PSB2KTtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uID8gb3B0aW9uW2xhYmVsS2V5XSA6ICd1bmtub3duJztcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,15 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class LabelByValuePipe {
4
+ transform(value, options, valueKey, labelKey) {
5
+ const option = options.find((opt) => opt[valueKey] === value);
6
+ return option ? option[labelKey] : 'unknown';
7
+ }
8
+ }
9
+ LabelByValuePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LabelByValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
10
+ LabelByValuePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: LabelByValuePipe, isStandalone: true, name: "labelByValue" });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LabelByValuePipe, decorators: [{
12
+ type: Pipe,
13
+ args: [{ standalone: true, name: 'labelByValue' }]
14
+ }] });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtYnktdmFsdWUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nwcy11aS1raXQvc3JjL2xpYi9waXBlcy9sYWJlbC1ieS12YWx1ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUdwRCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFNBQVMsQ0FDUCxLQUFhLEVBQ2IsT0FBYyxFQUNkLFFBQWdCLEVBQ2hCLFFBQWdCO1FBRWhCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUM5RCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDL0MsQ0FBQzs7NkdBVFUsZ0JBQWdCOzJHQUFoQixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFENUIsSUFBSTttQkFBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoeyBzdGFuZGFsb25lOiB0cnVlLCBuYW1lOiAnbGFiZWxCeVZhbHVlJyB9KVxuZXhwb3J0IGNsYXNzIExhYmVsQnlWYWx1ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtIChcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IGFueVtdLFxuICAgIHZhbHVlS2V5OiBzdHJpbmcsXG4gICAgbGFiZWxLZXk6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHRbdmFsdWVLZXldID09PSB2YWx1ZSk7XG4gICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvbltsYWJlbEtleV0gOiAndW5rbm93bic7XG4gIH1cbn1cbiJdfQ==