ngx-dropdown-list 1.1.0 → 1.2.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 (65) hide show
  1. package/README.md +2 -2
  2. package/esm2020/ngx-dropdown-list.mjs +5 -0
  3. package/esm2020/public_api.mjs +2 -0
  4. package/esm2020/src/ngx-dropdown-list/anchor/anchor.component.mjs +149 -0
  5. package/esm2020/src/ngx-dropdown-list/dropdown/dropdown.component.mjs +252 -0
  6. package/esm2020/src/ngx-dropdown-list/dropdown-list.component.mjs +233 -0
  7. package/esm2020/src/ngx-dropdown-list/dropdown-list.module.mjs +38 -0
  8. package/esm2020/src/ngx-dropdown-list/filter/input-filter.component.mjs +44 -0
  9. package/esm2020/src/ngx-dropdown-list/group-item/group-item.component.mjs +25 -0
  10. package/esm2020/src/ngx-dropdown-list/index.mjs +3 -0
  11. package/esm2020/src/ngx-dropdown-list/item/item.component.mjs +77 -0
  12. package/esm2020/src/ngx-dropdown-list/types/index.mjs +3 -0
  13. package/esm2020/src/ngx-dropdown-list/types/selection-group-items.types.mjs +2 -0
  14. package/esm2020/src/ngx-dropdown-list/types/selection-item.types.mjs +2 -0
  15. package/esm2020/src/ngx-dropdown-list/utils/util.mjs +59 -0
  16. package/fesm2015/ngx-dropdown-list.mjs +854 -0
  17. package/fesm2015/ngx-dropdown-list.mjs.map +1 -0
  18. package/fesm2020/ngx-dropdown-list.mjs +854 -0
  19. package/fesm2020/ngx-dropdown-list.mjs.map +1 -0
  20. package/ngx-dropdown-list.d.ts +1 -5
  21. package/package.json +26 -48
  22. package/src/ngx-dropdown-list/anchor/anchor.component.d.ts +6 -3
  23. package/src/ngx-dropdown-list/dropdown/dropdown.component.d.ts +5 -2
  24. package/src/ngx-dropdown-list/dropdown-list.component.d.ts +7 -4
  25. package/src/ngx-dropdown-list/dropdown-list.module.d.ts +12 -0
  26. package/src/ngx-dropdown-list/filter/input-filter.component.d.ts +3 -0
  27. package/src/ngx-dropdown-list/group-item/group-item.component.d.ts +3 -0
  28. package/src/ngx-dropdown-list/item/item.component.d.ts +3 -0
  29. package/bundles/ngx-dropdown-list.umd.js +0 -1180
  30. package/bundles/ngx-dropdown-list.umd.js.map +0 -1
  31. package/bundles/ngx-dropdown-list.umd.min.js +0 -2
  32. package/bundles/ngx-dropdown-list.umd.min.js.map +0 -1
  33. package/esm2015/ngx-dropdown-list.js +0 -14
  34. package/esm2015/public_api.js +0 -6
  35. package/esm2015/src/ngx-dropdown-list/anchor/anchor.component.js +0 -226
  36. package/esm2015/src/ngx-dropdown-list/dropdown/dropdown.component.js +0 -339
  37. package/esm2015/src/ngx-dropdown-list/dropdown-list.component.js +0 -290
  38. package/esm2015/src/ngx-dropdown-list/dropdown-list.module.js +0 -32
  39. package/esm2015/src/ngx-dropdown-list/filter/input-filter.component.js +0 -64
  40. package/esm2015/src/ngx-dropdown-list/group-item/group-item.component.js +0 -37
  41. package/esm2015/src/ngx-dropdown-list/index.js +0 -7
  42. package/esm2015/src/ngx-dropdown-list/item/item.component.js +0 -104
  43. package/esm2015/src/ngx-dropdown-list/types/index.js +0 -7
  44. package/esm2015/src/ngx-dropdown-list/types/selection-group-items.types.js +0 -16
  45. package/esm2015/src/ngx-dropdown-list/types/selection-item.types.js +0 -20
  46. package/esm2015/src/ngx-dropdown-list/utils/util.js +0 -73
  47. package/esm5/ngx-dropdown-list.js +0 -14
  48. package/esm5/public_api.js +0 -6
  49. package/esm5/src/ngx-dropdown-list/anchor/anchor.component.js +0 -272
  50. package/esm5/src/ngx-dropdown-list/dropdown/dropdown.component.js +0 -408
  51. package/esm5/src/ngx-dropdown-list/dropdown-list.component.js +0 -361
  52. package/esm5/src/ngx-dropdown-list/dropdown-list.module.js +0 -36
  53. package/esm5/src/ngx-dropdown-list/filter/input-filter.component.js +0 -79
  54. package/esm5/src/ngx-dropdown-list/group-item/group-item.component.js +0 -47
  55. package/esm5/src/ngx-dropdown-list/index.js +0 -7
  56. package/esm5/src/ngx-dropdown-list/item/item.component.js +0 -120
  57. package/esm5/src/ngx-dropdown-list/types/index.js +0 -7
  58. package/esm5/src/ngx-dropdown-list/types/selection-group-items.types.js +0 -16
  59. package/esm5/src/ngx-dropdown-list/types/selection-item.types.js +0 -20
  60. package/esm5/src/ngx-dropdown-list/utils/util.js +0 -96
  61. package/fesm2015/ngx-dropdown-list.js +0 -890
  62. package/fesm2015/ngx-dropdown-list.js.map +0 -1
  63. package/fesm5/ngx-dropdown-list.js +0 -1137
  64. package/fesm5/ngx-dropdown-list.js.map +0 -1
  65. package/ngx-dropdown-list.metadata.json +0 -1
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![npm](https://img.shields.io/npm/v/ngx-dropdown-list.svg?style=flat-square)](https://www.npmjs.com/package/ngx-dropdown-list) [![npm downloads](https://img.shields.io/npm/dm/ngx-dropdown-list.svg)](https://www.npmjs.com/package/ngx-dropdown-list) [![Travis](https://img.shields.io/travis/ckyycc/ngx-dropdown-list.svg?style=flat-square)](https://travis-ci.org/ckyycc/ngx-dropdown-list) [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://github.com/ckyycc/ngx-dropdown-list/blob/master/LICENSE)
4
4
 
5
- An Angular 7 module for selecting data from drop-down list which supports multi-selection and filter.
5
+ An Angular 13 module for selecting data from drop-down list which supports multi-selection and filter.
6
6
 
7
7
  ## Installation
8
8
  ```bash
@@ -91,7 +91,7 @@ timezones = [
91
91
 
92
92
  Todo
93
93
  ----
94
- * ~~Support Angular 7~~
94
+ * ~~Support Angular 13~~
95
95
  * ...
96
96
 
97
97
  ## License
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWRyb3Bkb3duLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9uZ3gtZHJvcGRvd24tbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19
@@ -0,0 +1,2 @@
1
+ export * from './src/ngx-dropdown-list/index';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3JjL25neC1kcm9wZG93bi1saXN0L2luZGV4JztcclxuIl19
@@ -0,0 +1,149 @@
1
+ import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { stopPropagationAndDefault, isNumber } from '../utils/util';
3
+ import { DecimalPipe } from '@angular/common';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ export class AnchorComponent {
7
+ constructor(_decimalPipe) {
8
+ this._decimalPipe = _decimalPipe;
9
+ /**
10
+ * bind to [checkbox] for checking whether the clearance flag should be shown or not.
11
+ */
12
+ this.checkbox = false;
13
+ /**
14
+ * bind to [allowClear] for enabling the clearance (clearance is not avaiable when checkbox is enabled)
15
+ */
16
+ this.allowClear = true;
17
+ /**
18
+ * bind to [openStatus], it's the visibility status of dropdown, for showing the arrow on anchor
19
+ */
20
+ this.openStatus = false;
21
+ /**
22
+ * bind to [disabled] for disabling the anchor
23
+ */
24
+ this.disabled = false;
25
+ /**
26
+ * will be triggered when clicking the anchor
27
+ */
28
+ this.anchorClick = new EventEmitter();
29
+ /**
30
+ * will be triggered when clicking the clearance
31
+ */
32
+ this.clearanceClick = new EventEmitter();
33
+ }
34
+ /**
35
+ * flag for showing the clearance flag
36
+ */
37
+ get showClearanceFlag() {
38
+ return !this.checkbox && this.selectedText && this.allowClear;
39
+ }
40
+ /**
41
+ * the text displays on anchor
42
+ */
43
+ get anchorDisplayText() {
44
+ let anchorDisplayText = this.selectedText ? (this.formatNumber ? (isNumber(this.selectedText) ?
45
+ this._decimalPipe.transform(this.selectedText, '1.0-2') : this.selectedText) :
46
+ this.selectedText) + (this.suffixText ? this.suffixText : '') : this.placeHolder;
47
+ let charLength = 1;
48
+ if (this.showClearanceFlag && this.anchorLength > 0) {
49
+ charLength = Math.floor((this.anchorLength - 50) / 7);
50
+ }
51
+ else {
52
+ charLength = Math.floor((this.anchorLength - 50) / 7);
53
+ }
54
+ if (anchorDisplayText.length > charLength) {
55
+ anchorDisplayText = anchorDisplayText.slice(0, charLength - 2) + '...';
56
+ }
57
+ return anchorDisplayText;
58
+ }
59
+ /**
60
+ * anchor CSS class
61
+ */
62
+ get anchorClass() {
63
+ let anchorClassStatusPart;
64
+ let anchorClassFontColor;
65
+ if (this.disabled) {
66
+ anchorClassStatusPart = 'selection-anchor-disabled';
67
+ anchorClassFontColor = 'place-holder';
68
+ }
69
+ else {
70
+ if (this.openStatus) {
71
+ anchorClassStatusPart = 'selection-anchor-open';
72
+ }
73
+ else {
74
+ anchorClassStatusPart = 'selection-anchor-close';
75
+ }
76
+ if (this.selectedText != null) {
77
+ anchorClassFontColor = 'selected-item';
78
+ }
79
+ else {
80
+ anchorClassFontColor = 'place-holder';
81
+ }
82
+ }
83
+ return `${anchorClassStatusPart} ${anchorClassFontColor}`;
84
+ }
85
+ /**
86
+ * triggered when clicking the anchor
87
+ */
88
+ onAnchorClick(event) {
89
+ this.anchorClick.emit(event);
90
+ }
91
+ /**
92
+ * triggered with (blur) of anchor
93
+ */
94
+ onAnchorBlur(event) {
95
+ stopPropagationAndDefault(event);
96
+ }
97
+ /**
98
+ * triggered when clicking the clearance
99
+ */
100
+ onClearanceClick(event) {
101
+ this.clearanceClick.emit(event);
102
+ }
103
+ /**
104
+ * triggered when resizing, get the clientWidth of anchor
105
+ */
106
+ onResize() {
107
+ this.anchorLength = this.anchorRef ? this.anchorRef.nativeElement ? this.anchorRef.nativeElement.clientWidth : 0 : 0;
108
+ }
109
+ }
110
+ AnchorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AnchorComponent, deps: [{ token: i1.DecimalPipe }], target: i0.ɵɵFactoryTarget.Component });
111
+ AnchorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AnchorComponent, selector: "anchor", inputs: { placeHolder: "placeHolder", checkbox: "checkbox", suffixText: "suffixText", allowClear: "allowClear", formatNumber: "formatNumber", selectedText: "selectedText", openStatus: "openStatus", disabled: "disabled" }, outputs: { anchorClick: "anchorClick", clearanceClick: "clearanceClick" }, providers: [DecimalPipe], viewQueries: [{ propertyName: "anchorRef", first: true, predicate: ["anchor"], descendants: true, read: ElementRef }], ngImport: i0, template: `
112
+ <span #anchor tabindex="2" [ngClass]="anchorClass" (window:resize)="onResize()"
113
+ (mousedown)="onAnchorClick($event)" (blur)="onAnchorBlur($event)"> {{anchorDisplayText}}
114
+ <span #selectionClearance class="selection-clearance" (mousedown)="onClearanceClick($event)" *ngIf="showClearanceFlag">&times;</span>
115
+ </span>
116
+ `, isInline: true, styles: ["@charset \"UTF-8\";*,*:before,*:after{font-size:inherit;font-weight:inherit;font-family:inherit;box-sizing:inherit;background:inherit}.vertical-center,.selection-anchor-close:after,.selection-anchor-open:after,.selection-anchor-disabled:after{position:absolute;top:50%;transform:translateY(-50%)}.hover-box,.selection-anchor-close:hover{outline:0;box-shadow:0 0 6px #23adff;border-radius:4px}.anchor-box,.selection-anchor-disabled,.selection-anchor,.selection-anchor-close,.selection-anchor-open{height:100%;border-radius:4px;width:100%;position:relative;display:inline-block;padding:8px 12px 5px;border:1px solid;outline:0;box-shadow:inset 0 1px 1px #00000013;box-sizing:border-box;white-space:nowrap}.selection-anchor,.selection-anchor-close,.selection-anchor-open{cursor:pointer}.selection-anchor .selection-clearance,.selection-anchor-close .selection-clearance,.selection-anchor-open .selection-clearance{position:absolute;right:35px;font-weight:700}.selection-anchor .selection-clearance:hover,.selection-anchor-close .selection-clearance:hover,.selection-anchor-open .selection-clearance:hover{color:#000}.selection-anchor:focus,.selection-anchor-close:focus,.selection-anchor-open:focus{box-shadow:inset 0 1px 1px #00000013,0 0 8px #66afe999;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;border-color:#66afe9}.selection-anchor-disabled{border-color:#ccc;cursor:default;pointer-events:none;background:#f8f8f8;filter:opacity(50%)}.selection-anchor-disabled:after{font-size:9px;content:\"\\25bc\";right:10px;padding-bottom:3px}.selection-anchor-open{border-bottom:none;border-bottom-right-radius:0;border-bottom-left-radius:0;border-color:#66afe9}.selection-anchor-open:after{font-size:9px;content:\"\\25b2\";right:10px;padding-bottom:3px}.selection-anchor-close{border-color:#ccc}.selection-anchor-close:after{font-size:9px;content:\"\\25bc\";right:10px;padding-bottom:3px}.place-holder{color:#999}.selected-item{color:#495057}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AnchorComponent, decorators: [{
118
+ type: Component,
119
+ args: [{ selector: 'anchor', template: `
120
+ <span #anchor tabindex="2" [ngClass]="anchorClass" (window:resize)="onResize()"
121
+ (mousedown)="onAnchorClick($event)" (blur)="onAnchorBlur($event)"> {{anchorDisplayText}}
122
+ <span #selectionClearance class="selection-clearance" (mousedown)="onClearanceClick($event)" *ngIf="showClearanceFlag">&times;</span>
123
+ </span>
124
+ `, providers: [DecimalPipe], styles: ["@charset \"UTF-8\";*,*:before,*:after{font-size:inherit;font-weight:inherit;font-family:inherit;box-sizing:inherit;background:inherit}.vertical-center,.selection-anchor-close:after,.selection-anchor-open:after,.selection-anchor-disabled:after{position:absolute;top:50%;transform:translateY(-50%)}.hover-box,.selection-anchor-close:hover{outline:0;box-shadow:0 0 6px #23adff;border-radius:4px}.anchor-box,.selection-anchor-disabled,.selection-anchor,.selection-anchor-close,.selection-anchor-open{height:100%;border-radius:4px;width:100%;position:relative;display:inline-block;padding:8px 12px 5px;border:1px solid;outline:0;box-shadow:inset 0 1px 1px #00000013;box-sizing:border-box;white-space:nowrap}.selection-anchor,.selection-anchor-close,.selection-anchor-open{cursor:pointer}.selection-anchor .selection-clearance,.selection-anchor-close .selection-clearance,.selection-anchor-open .selection-clearance{position:absolute;right:35px;font-weight:700}.selection-anchor .selection-clearance:hover,.selection-anchor-close .selection-clearance:hover,.selection-anchor-open .selection-clearance:hover{color:#000}.selection-anchor:focus,.selection-anchor-close:focus,.selection-anchor-open:focus{box-shadow:inset 0 1px 1px #00000013,0 0 8px #66afe999;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;border-color:#66afe9}.selection-anchor-disabled{border-color:#ccc;cursor:default;pointer-events:none;background:#f8f8f8;filter:opacity(50%)}.selection-anchor-disabled:after{font-size:9px;content:\"\\25bc\";right:10px;padding-bottom:3px}.selection-anchor-open{border-bottom:none;border-bottom-right-radius:0;border-bottom-left-radius:0;border-color:#66afe9}.selection-anchor-open:after{font-size:9px;content:\"\\25b2\";right:10px;padding-bottom:3px}.selection-anchor-close{border-color:#ccc}.selection-anchor-close:after{font-size:9px;content:\"\\25bc\";right:10px;padding-bottom:3px}.place-holder{color:#999}.selected-item{color:#495057}\n"] }]
125
+ }], ctorParameters: function () { return [{ type: i1.DecimalPipe }]; }, propDecorators: { anchorRef: [{
126
+ type: ViewChild,
127
+ args: ['anchor', { read: ElementRef }]
128
+ }], placeHolder: [{
129
+ type: Input
130
+ }], checkbox: [{
131
+ type: Input
132
+ }], suffixText: [{
133
+ type: Input
134
+ }], allowClear: [{
135
+ type: Input
136
+ }], formatNumber: [{
137
+ type: Input
138
+ }], selectedText: [{
139
+ type: Input
140
+ }], openStatus: [{
141
+ type: Input
142
+ }], disabled: [{
143
+ type: Input
144
+ }], anchorClick: [{
145
+ type: Output
146
+ }], clearanceClick: [{
147
+ type: Output
148
+ }] } });
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uZ3gtZHJvcGRvd24tbGlzdC9hbmNob3IvYW5jaG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFDLHlCQUF5QixFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7OztBQWM1QyxNQUFNLE9BQU8sZUFBZTtJQW9EMUIsWUFBb0IsWUFBeUI7UUFBekIsaUJBQVksR0FBWixZQUFZLENBQWE7UUExQzdDOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQUsxQjs7V0FFRztRQUNNLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFTM0I7O1dBRUc7UUFDTSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQzVCOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQjs7V0FFRztRQUNPLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNoRDs7V0FFRztRQUNPLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQU9ILENBQUM7SUFFakQ7O09BRUc7SUFDSCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDaEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxpQkFBaUI7UUFDbkIsSUFBSSxpQkFBaUIsR0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFD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LGFBRVUsQ0FBQyxXQUFXLENBQUM7a0dBT21CLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLaEMsV0FBVztzQkFBbkIsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlJLFdBQVc7c0JBQXBCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7c3RvcFByb3BhZ2F0aW9uQW5kRGVmYXVsdCwgaXNOdW1iZXJ9IGZyb20gJy4uL3V0aWxzL3V0aWwnO1xyXG5pbXBvcnQge0RlY2ltYWxQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhbmNob3InLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8c3BhbiAjYW5jaG9yIHRhYmluZGV4PVwiMlwiIFtuZ0NsYXNzXT1cImFuY2hvckNsYXNzXCIgKHdpbmRvdzpyZXNpemUpPVwib25SZXNpemUoKVwiXHJcbiAgICAgICAgICAobW91c2Vkb3duKT1cIm9uQW5jaG9yQ2xpY2soJGV2ZW50KVwiIChibHVyKT1cIm9uQW5jaG9yQmx1cigkZXZlbnQpXCI+IHt7YW5jaG9yRGlzcGxheVRleHR9fVxyXG4gICAgICA8c3BhbiAjc2VsZWN0aW9uQ2xlYXJhbmNlIGNsYXNzPVwic2VsZWN0aW9uLWNsZWFyYW5jZVwiIChtb3VzZWRvd24pPVwib25DbGVhcmFuY2VDbGljaygkZXZlbnQpXCIgKm5nSWY9XCJzaG93Q2xlYXJhbmNlRmxhZ1wiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgYCxcclxuICBzdHlsZVVybHM6IFsnLi9hbmNob3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtEZWNpbWFsUGlwZV1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBbmNob3JDb21wb25lbnQge1xyXG4gIC8qKlxyXG4gICAqIENoaWxkIGVsZW1lbnQgcmVmZXJlbmNlIG9mIGFuY2hvclxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2FuY2hvcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBhbmNob3JSZWY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIGJpbmQgdG8gW3BsYWNlSG9sZGVyXSBmb3IgZGlzcGxheWluZyB0aGUgcGxhY2UgaG9sZGVyIHN0cmluZyBvZiB0aGUgYW5jaG9yLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBsYWNlSG9sZGVyOiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbY2hlY2tib3hdIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSBjbGVhcmFuY2UgZmxhZyBzaG91bGQgYmUgc2hvd24gb3Igbm90LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNoZWNrYm94ID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbc3VmZml4VGV4dF0gZm9yIGRpc3BsYXlpbmcgdGhlIHN1ZmZpeCBvZiB0aGUgc2VsZWN0ZWQgdGV4dCBvZiBhbmNob3JcclxuICAgKi9cclxuICBASW5wdXQoKSBzdWZmaXhUZXh0OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbYWxsb3dDbGVhcl0gZm9yIGVuYWJsaW5nIHRoZSBjbGVhcmFuY2UgKGNsZWFyYW5jZSBpcyBub3QgYXZhaWFibGUgd2hlbiBjaGVja2JveCBpcyBlbmFibGVkKVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGFsbG93Q2xlYXIgPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIGJpbmQgdG8gW2Zvcm1hdE51bWJlcl0gZm9yIHNob3cgZm9ybWF0dGVkIG51bWJlciB0ZXh0XHJcbiAgICovXHJcbiAgQElucHV0KCkgZm9ybWF0TnVtYmVyOiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIGJpbmQgdG8gW3NlbGVjdGVkVGV4dF0gZm9yIGRpc3BsYXlpbmcgdGhlIHNlbGVjdGVkIHRleHQgb24gYW5jaG9yXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2VsZWN0ZWRUZXh0OiBhbnk7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbb3BlblN0YXR1c10sIGl0J3MgdGhlIHZpc2liaWxpdHkgc3RhdHVzIG9mIGRyb3Bkb3duLCBmb3Igc2hvd2luZyB0aGUgYXJyb3cgb24gYW5jaG9yXHJcbiAgICovXHJcbiAgQElucHV0KCkgb3BlblN0YXR1cyA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIGJpbmQgdG8gW2Rpc2FibGVkXSBmb3IgZGlzYWJsaW5nIHRoZSBhbmNob3JcclxuICAgKi9cclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gY2xpY2tpbmcgdGhlIGFuY2hvclxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBhbmNob3JDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8qKlxyXG4gICAqIHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gY2xpY2tpbmcgdGhlIGNsZWFyYW5jZVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBjbGVhcmFuY2VDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAvKipcclxuICAgKiBsZW5ndGggb2YgYW5jaG9yIGVsZW1lbnQsIHVzZWQgZm9yIGNhbGN1bGF0ZSB0aGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgYW5jaG9yIGRpc3BsYXllZCB0ZXh0LlxyXG4gICAqL1xyXG4gIGFuY2hvckxlbmd0aDogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIGZsYWcgZm9yIHNob3dpbmcgdGhlIGNsZWFyYW5jZSBmbGFnXHJcbiAgICovXHJcbiAgZ2V0IHNob3dDbGVhcmFuY2VGbGFnKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLmNoZWNrYm94ICYmIHRoaXMuc2VsZWN0ZWRUZXh0ICYmIHRoaXMuYWxsb3dDbGVhcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRoZSB0ZXh0IGRpc3BsYXlzIG9uIGFuY2hvclxyXG4gICAqL1xyXG4gIGdldCBhbmNob3JEaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGFuY2hvckRpc3BsYXlUZXh0ID0gIHRoaXMuc2VsZWN0ZWRUZXh0ID8gKHRoaXMuZm9ybWF0TnVtYmVyID8gKGlzTnVtYmVyKHRoaXMuc2VsZWN0ZWRUZXh0KSA/XHJcbiAgICAgIHRoaXMuX2RlY2ltYWxQaXBlLnRyYW5zZm9ybSh0aGlzLnNlbGVjdGVkVGV4dCwgJzEuMC0yJykgOiB0aGlzLnNlbGVjdGVkVGV4dCkgOlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGV4dCkgKyAodGhpcy5zdWZmaXhUZXh0ID8gdGhpcy5zdWZmaXhUZXh0IDogJycpIDogdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICBsZXQgY2hhckxlbmd0aCA9IDE7XHJcbiAgICBpZiAodGhpcy5zaG93Q2xlYXJhbmNlRmxhZyAmJiB0aGlzLmFuY2hvckxlbmd0aCA+IDApIHtcclxuICAgICAgY2hhckxlbmd0aCA9IE1hdGguZmxvb3IoKHRoaXMuYW5jaG9yTGVuZ3RoIC0gNTApIC8gNyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGFyTGVuZ3RoID0gTWF0aC5mbG9vcigodGhpcy5hbmNob3JMZW5ndGggLSA1MCkgLyA3KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYW5jaG9yRGlzcGxheVRleHQubGVuZ3RoID4gY2hhckxlbmd0aCkge1xyXG4gICAgICBhbmNob3JEaXNwbGF5VGV4dCA9IGFuY2hvckRpc3BsYXlUZXh0LnNsaWNlKDAsIGNoYXJMZW5ndGggLSAyKSArICcuLi4nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFuY2hvckRpc3BsYXlUZXh0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYW5jaG9yIENTUyBjbGFzc1xyXG4gICAqL1xyXG4gIGdldCBhbmNob3JDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgbGV0IGFuY2hvckNsYXNzU3RhdHVzUGFydDtcclxuICAgIGxldCBhbmNob3JDbGFzc0ZvbnRDb2xvcjtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIGFuY2hvckNsYXNzU3RhdHVzUGFydCA9ICdzZWxlY3Rpb24tYW5jaG9yLWRpc2FibGVkJztcclxuICAgICAgYW5jaG9yQ2xhc3NGb250Q29sb3IgPSAncGxhY2UtaG9sZGVyJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLm9wZW5TdGF0dXMpIHtcclxuICAgICAgICBhbmNob3JDbGFzc1N0YXR1c1BhcnQgPSAnc2VsZWN0aW9uLWFuY2hvci1vcGVuJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbmNob3JDbGFzc1N0YXR1c1BhcnQgPSAnc2VsZWN0aW9uLWFuY2hvci1jbG9zZSc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUZXh0ICE9IG51bGwpIHtcclxuICAgICAgICBhbmNob3JDbGFzc0ZvbnRDb2xvciA9ICdzZWxlY3RlZC1pdGVtJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbmNob3JDbGFzc0ZvbnRDb2xvciA9ICdwbGFjZS1ob2xkZXInO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7YW5jaG9yQ2xhc3NTdGF0dXNQYXJ0fSAke2FuY2hvckNsYXNzRm9udENvbG9yfWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0cmlnZ2VyZWQgd2hlbiBjbGlja2luZyB0aGUgYW5jaG9yXHJcbiAgICovXHJcbiAgb25BbmNob3JDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuYW5jaG9yQ2xpY2suZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0cmlnZ2VyZWQgd2l0aCAoYmx1cikgb2YgYW5jaG9yXHJcbiAgICovXHJcbiAgb25BbmNob3JCbHVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgc3RvcFByb3BhZ2F0aW9uQW5kRGVmYXVsdChldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0cmlnZ2VyZWQgd2hlbiBjbGlja2luZyB0aGUgY2xlYXJhbmNlXHJcbiAgICovXHJcbiAgb25DbGVhcmFuY2VDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJhbmNlQ2xpY2suZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0cmlnZ2VyZWQgd2hlbiByZXNpemluZywgZ2V0IHRoZSBjbGllbnRXaWR0aCBvZiBhbmNob3JcclxuICAgKi9cclxuICBvblJlc2l6ZSgpIHtcclxuICAgIHRoaXMuYW5jaG9yTGVuZ3RoID0gdGhpcy5hbmNob3JSZWYgPyB0aGlzLmFuY2hvclJlZi5uYXRpdmVFbGVtZW50ID8gdGhpcy5hbmNob3JSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA6IDAgOiAwO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,252 @@
1
+ import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { clearAllSelection, getFirstSelectedItem, hasGroup, stopPropagationAndDefault } from '../utils/util';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../filter/input-filter.component";
5
+ import * as i2 from "../group-item/group-item.component";
6
+ import * as i3 from "../item/item.component";
7
+ import * as i4 from "@angular/common";
8
+ export class DropdownComponent {
9
+ constructor() {
10
+ /**
11
+ * bind to [checkbox], the flag for multi-select (checkbox) mode.
12
+ */
13
+ this.checkbox = false;
14
+ /**
15
+ * bind to [filterBox] for displaying the filter input text box
16
+ */
17
+ this.filterBox = false;
18
+ /**
19
+ * bind to [allowClear] for enabling the clearance (clearance is not avaiable when checkbox is enabled)
20
+ */
21
+ this.allowClear = true;
22
+ /**
23
+ * bind to [formatNumber] for show formatted number text
24
+ */
25
+ this.formatNumber = false;
26
+ /**
27
+ * for 2-way binding of [selectedValue]
28
+ */
29
+ this.selectedValueChange = new EventEmitter(true);
30
+ /**
31
+ * [selectionChange] event that will be triggered when changing of the selection
32
+ */
33
+ this.selectionChange = new EventEmitter(true);
34
+ /**
35
+ * [dropdownBlur] event that will be triggered with (blur) of dropdown
36
+ */
37
+ this.dropdownBlur = new EventEmitter();
38
+ /**
39
+ * [itemClick] event that will be triggered when clicking the option of dropdown
40
+ */
41
+ this.itemClick = new EventEmitter();
42
+ /**
43
+ * flag of clicking dropdown. It's to prevent (blur) of dropdown from happening in checkbox mode.
44
+ */
45
+ this._clickedItems = false;
46
+ }
47
+ ngOnChanges(changes) {
48
+ if (changes.items) {
49
+ this._checkSelectionChange(changes.items.previousValue, changes.items.currentValue);
50
+ }
51
+ }
52
+ /**
53
+ * triggered when clicking the dropdown
54
+ */
55
+ onItemsClick(event) {
56
+ if (event.offsetX > (event.target.clientWidth + event.target.clientLeft)) {
57
+ stopPropagationAndDefault(event);
58
+ return;
59
+ }
60
+ // should ignore clicking on filter
61
+ if (this.checkbox && event.target.type !== 'text') {
62
+ this._clickedItems = true;
63
+ }
64
+ }
65
+ /**
66
+ * triggered when clicking the item
67
+ */
68
+ onItemClick(currentItem) {
69
+ if (!this.checkbox) {
70
+ this.selectedValue = this._getItemValue(currentItem); // currentItem.value != null ? currentItem.value : currentItem.text;
71
+ clearAllSelection(this.items);
72
+ // set the selection of current one
73
+ currentItem.selected = true;
74
+ this.itemClick.emit(currentItem);
75
+ this._onSelectionChange(this.selectedValue);
76
+ }
77
+ }
78
+ /**
79
+ * triggers with (blur) event of filter input box
80
+ */
81
+ onFilterTextBlur(event) {
82
+ this.dropdownBlur.emit(event);
83
+ }
84
+ /**
85
+ * triggers with (blur) event of dropdown
86
+ */
87
+ onItemsBlur(event) {
88
+ if (this.checkbox) {
89
+ if (this._clickedItems) {
90
+ // in checkbox mode, this blur event will be ignored when clicking the dropdown (check the checkbox)
91
+ event.target.focus();
92
+ this._clickedItems = false;
93
+ return;
94
+ }
95
+ }
96
+ this.dropdownBlur.emit(event);
97
+ }
98
+ /**
99
+ * toggle the selection when checking status changed (in checkbox mode)
100
+ */
101
+ toggleSelection(item) {
102
+ item.selected = !item.selected;
103
+ this.selectionChange.emit(this._getItemValue(item)); // item.value != null ? item.value : item.text);
104
+ }
105
+ /**
106
+ * items values list after applying the filter
107
+ */
108
+ get itemsValues() {
109
+ let filter;
110
+ if (this.filterValue) {
111
+ filter = this.filterValue.toUpperCase();
112
+ }
113
+ if (filter == null) {
114
+ return this.items;
115
+ }
116
+ if (!this.items || this.items.length === 0) {
117
+ return [];
118
+ }
119
+ if (hasGroup(this.items)) {
120
+ const items = [];
121
+ this.items.forEach(groupItem => {
122
+ if (groupItem.group != null && groupItem.group.toString().toUpperCase().includes(filter)) {
123
+ // if groupItem contains the filters, the groupItem needs to be displayed as well
124
+ items.push(groupItem);
125
+ }
126
+ else {
127
+ const filteredItems = groupItem.items.filter(item => item.text != null && item.text.toString().toUpperCase().includes(filter));
128
+ if (filteredItems && filteredItems.length > 0) {
129
+ items.push({ group: groupItem.group, items: filteredItems });
130
+ }
131
+ }
132
+ });
133
+ return items;
134
+ }
135
+ else {
136
+ return this.items.filter(item => (item.text != null && item.text.toString().toUpperCase().includes(filter)));
137
+ }
138
+ }
139
+ /**
140
+ * options CSS class
141
+ */
142
+ get optionsClass() {
143
+ if (this.filterBox && !this.checkbox) {
144
+ return 'options with-filter';
145
+ }
146
+ else {
147
+ return 'options no-filter';
148
+ }
149
+ }
150
+ /**
151
+ * get item value. Return text if value is not available
152
+ */
153
+ _getItemValue(item) {
154
+ return item ? item.value != null ? item.value : item.text : undefined;
155
+ }
156
+ /**
157
+ * selection changed, emits events: (selectedValueChange) and (selectionChange);
158
+ */
159
+ _onSelectionChange(value) {
160
+ this.selectedValueChange.emit(value);
161
+ this.selectionChange.emit(value);
162
+ }
163
+ /**
164
+ * check whether the selection is changed. Emits relative events when if changed.
165
+ */
166
+ _checkSelectionChange(previousValue, currentValue) {
167
+ const curSelectedItem = getFirstSelectedItem(currentValue);
168
+ const lastSelectedItem = getFirstSelectedItem(previousValue);
169
+ const curSelectedItemId = curSelectedItem ? curSelectedItem.id : undefined;
170
+ const lastSelectedItemId = lastSelectedItem ? lastSelectedItem.id : undefined;
171
+ if (curSelectedItemId !== lastSelectedItemId && !this.checkbox) {
172
+ this._onSelectionChange(this._getItemValue(curSelectedItem));
173
+ }
174
+ }
175
+ }
176
+ DropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
177
+ DropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: DropdownComponent, selector: "dropdown", inputs: { placeHolder: "placeHolder", items: "items", checkbox: "checkbox", selectedValue: "selectedValue", filterBox: "filterBox", suffixText: "suffixText", disabled: "disabled", allowClear: "allowClear", formatNumber: "formatNumber" }, outputs: { selectedValueChange: "selectedValueChange", selectionChange: "selectionChange", dropdownBlur: "dropdownBlur", itemClick: "itemClick" }, viewQueries: [{ propertyName: "dropdownRef", first: true, predicate: ["dropdown"], descendants: true, read: ElementRef }, { propertyName: "filterInputRef", first: true, predicate: ["filterInput"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: `
178
+ <span #dropdown class="dropdown" tabindex="3" (mousedown)="onItemsClick($event)" (blur)="onItemsBlur($event)" *ngIf="!disabled" >
179
+ <input-filter #filterInput tabindex="4" *ngIf="filterBox && !checkbox" [(filterValue)]="filterValue" (inputFilterBlur)="onFilterTextBlur($event)"></input-filter>
180
+ <span #selectionOptions [ngClass]="optionsClass">
181
+ <ng-container *ngFor="let item of itemsValues" >
182
+ <ng-container *ngIf="item && item.group">
183
+ <group-item [item]="item"></group-item>
184
+ <item *ngFor="let subItem of item.items" (itemClick)="onItemClick(subItem)" (checkStatusChange)="toggleSelection(subItem)"
185
+ [item]="subItem" [checkbox]="checkbox" [formatNumber]="formatNumber" [suffixText]="suffixText">
186
+ </item>
187
+ </ng-container>
188
+ <ng-container *ngIf="item && !item.group">
189
+ <item (itemClick)="onItemClick(item)" (checkStatusChange)="toggleSelection(item)"
190
+ [item]="item" [checkbox]="checkbox" [formatNumber]="formatNumber" [suffixText]="suffixText">
191
+ </item>
192
+ </ng-container>
193
+ </ng-container>
194
+ </span>
195
+ </span>
196
+ `, isInline: true, styles: ["*,*:before,*:after{font-size:inherit;font-weight:inherit;font-family:inherit;box-sizing:inherit;background:inherit}.dropdown{width:100%;padding:0;display:none;margin:0;border:1px solid #66afe9;border-top:none;border-bottom:none;border-top-right-radius:0;border-top-left-radius:0;box-sizing:border-box;position:relative;z-index:999}.dropdown:focus{outline:0}.dropdown .options{width:calc(100% + 2px);left:0;box-sizing:border-box;background:white;position:absolute;max-height:228px;overflow-y:auto;overflow-x:hidden;border:1px solid #66afe9;border-top:none;border-bottom-right-radius:4px;border-bottom-left-radius:4px;margin-left:-1px;margin-right:-1px}.dropdown .with-filter{top:32px}.dropdown .no-filter{top:0}\n"], components: [{ type: i1.InputFilterComponent, selector: "input-filter", inputs: ["filterValue"], outputs: ["inputFilterBlur", "filterValueChange"] }, { type: i2.GroupItemComponent, selector: "group-item", inputs: ["item"] }, { type: i3.ItemComponent, selector: "item", inputs: ["checkbox", "item", "formatNumber", "suffixText"], outputs: ["itemClick", "checkStatusChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DropdownComponent, decorators: [{
198
+ type: Component,
199
+ args: [{ selector: 'dropdown', template: `
200
+ <span #dropdown class="dropdown" tabindex="3" (mousedown)="onItemsClick($event)" (blur)="onItemsBlur($event)" *ngIf="!disabled" >
201
+ <input-filter #filterInput tabindex="4" *ngIf="filterBox && !checkbox" [(filterValue)]="filterValue" (inputFilterBlur)="onFilterTextBlur($event)"></input-filter>
202
+ <span #selectionOptions [ngClass]="optionsClass">
203
+ <ng-container *ngFor="let item of itemsValues" >
204
+ <ng-container *ngIf="item && item.group">
205
+ <group-item [item]="item"></group-item>
206
+ <item *ngFor="let subItem of item.items" (itemClick)="onItemClick(subItem)" (checkStatusChange)="toggleSelection(subItem)"
207
+ [item]="subItem" [checkbox]="checkbox" [formatNumber]="formatNumber" [suffixText]="suffixText">
208
+ </item>
209
+ </ng-container>
210
+ <ng-container *ngIf="item && !item.group">
211
+ <item (itemClick)="onItemClick(item)" (checkStatusChange)="toggleSelection(item)"
212
+ [item]="item" [checkbox]="checkbox" [formatNumber]="formatNumber" [suffixText]="suffixText">
213
+ </item>
214
+ </ng-container>
215
+ </ng-container>
216
+ </span>
217
+ </span>
218
+ `, styles: ["*,*:before,*:after{font-size:inherit;font-weight:inherit;font-family:inherit;box-sizing:inherit;background:inherit}.dropdown{width:100%;padding:0;display:none;margin:0;border:1px solid #66afe9;border-top:none;border-bottom:none;border-top-right-radius:0;border-top-left-radius:0;box-sizing:border-box;position:relative;z-index:999}.dropdown:focus{outline:0}.dropdown .options{width:calc(100% + 2px);left:0;box-sizing:border-box;background:white;position:absolute;max-height:228px;overflow-y:auto;overflow-x:hidden;border:1px solid #66afe9;border-top:none;border-bottom-right-radius:4px;border-bottom-left-radius:4px;margin-left:-1px;margin-right:-1px}.dropdown .with-filter{top:32px}.dropdown .no-filter{top:0}\n"] }]
219
+ }], propDecorators: { dropdownRef: [{
220
+ type: ViewChild,
221
+ args: ['dropdown', { read: ElementRef }]
222
+ }], filterInputRef: [{
223
+ type: ViewChild,
224
+ args: ['filterInput', { read: ElementRef }]
225
+ }], placeHolder: [{
226
+ type: Input
227
+ }], items: [{
228
+ type: Input
229
+ }], checkbox: [{
230
+ type: Input
231
+ }], selectedValue: [{
232
+ type: Input
233
+ }], filterBox: [{
234
+ type: Input
235
+ }], suffixText: [{
236
+ type: Input
237
+ }], disabled: [{
238
+ type: Input
239
+ }], allowClear: [{
240
+ type: Input
241
+ }], formatNumber: [{
242
+ type: Input
243
+ }], selectedValueChange: [{
244
+ type: Output
245
+ }], selectionChange: [{
246
+ type: Output
247
+ }], dropdownBlur: [{
248
+ type: Output
249
+ }], itemClick: [{
250
+ type: Output
251
+ }] } });
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25neC1kcm9wZG93bi1saXN0L2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7OztBQTJCM0csTUFBTSxPQUFPLGlCQUFpQjtJQXpCOUI7UUEwQ0U7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSzFCOztXQUVHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztRQVMzQjs7V0FFRztRQUNNLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDM0I7O1dBRUc7UUFDTSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUM5Qjs7V0FFRztRQUNPLHdCQUFtQixHQUFHLElBQUksWUFBWSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBQy9EOztXQUVHO1FBQ08sb0JBQWUsR0FBRyxJQUFJLFlBQVksQ0FBTSxJQUFJLENBQUMsQ0FBQztRQUN4RDs7V0FFRztRQUNPLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqRDs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBSzlDOztXQUVHO1FBQ0ssa0JBQWEsR0FBRyxLQUFLLENBQUM7S0F5SS9CO0lBdklDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFL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RTtnQkFJSyxjQUFjO3NCQUE3RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSXJDLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsWUFBWTtzQkFBckIsTUFBTTtnQkFJRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2NsZWFyQWxsU2VsZWN0aW9uLCBnZXRGaXJzdFNlbGVjdGVkSXRlbSwgaGFzR3JvdXAsIHN0b3BQcm9wYWdhdGlvbkFuZERlZmF1bHR9IGZyb20gJy4uL3V0aWxzL3V0aWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkcm9wZG93bicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxzcGFuICNkcm9wZG93biBjbGFzcz1cImRyb3Bkb3duXCIgdGFiaW5kZXg9XCIzXCIgKG1vdXNlZG93bik9XCJvbkl0ZW1zQ2xpY2soJGV2ZW50KVwiIChibHVyKT1cIm9uSXRlbXNCbHVyKCRldmVudClcIiAqbmdJZj1cIiFkaXNhYmxlZFwiID5cclxuICAgICAgPGlucHV0LWZpbHRlciAjZmlsdGVySW5wdXQgdGFiaW5kZXg9XCI0XCIgKm5nSWY9XCJmaWx0ZXJCb3ggJiYgIWNoZWNrYm94XCIgWyhmaWx0ZXJWYWx1ZSldPVwiZmlsdGVyVmFsdWVcIiAoaW5wdXRGaWx0ZXJCbHVyKT1cIm9uRmlsdGVyVGV4dEJsdXIoJGV2ZW50KVwiPjwvaW5wdXQtZmlsdGVyPlxyXG4gICAgICA8c3BhbiAjc2VsZWN0aW9uT3B0aW9ucyBbbmdDbGFzc109XCJvcHRpb25zQ2xhc3NcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zVmFsdWVzXCIgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0gJiYgaXRlbS5ncm91cFwiPlxyXG4gICAgICAgICAgICA8Z3JvdXAtaXRlbSBbaXRlbV09XCJpdGVtXCI+PC9ncm91cC1pdGVtPlxyXG4gICAgICAgICAgICA8aXRlbSAqbmdGb3I9XCJsZXQgc3ViSXRlbSBvZiBpdGVtLml0ZW1zXCIgKGl0ZW1DbGljayk9XCJvbkl0ZW1DbGljayhzdWJJdGVtKVwiIChjaGVja1N0YXR1c0NoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb24oc3ViSXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICBbaXRlbV09XCJzdWJJdGVtXCIgW2NoZWNrYm94XT1cImNoZWNrYm94XCIgW2Zvcm1hdE51bWJlcl09XCJmb3JtYXROdW1iZXJcIiBbc3VmZml4VGV4dF09XCJzdWZmaXhUZXh0XCI+XHJcbiAgICAgICAgICAgIDwvaXRlbT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0gJiYgIWl0ZW0uZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGl0ZW0gKGl0ZW1DbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiIChjaGVja1N0YXR1c0NoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb24oaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCIgW2NoZWNrYm94XT1cImNoZWNrYm94XCIgW2Zvcm1hdE51bWJlcl09XCJmb3JtYXROdW1iZXJcIiBbc3VmZml4VGV4dF09XCJzdWZmaXhUZXh0XCI+XHJcbiAgICAgICAgICAgIDwvaXRlbT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgYCxcclxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIC8qKlxyXG4gICAqIENoaWxkIGVsZW1lbnQgcmVmZXJlbmNlIG9mIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcGRvd25SZWY6IEVsZW1lbnRSZWY7XHJcbiAgLyoqXHJcbiAgICogQ2hpbGQgZWxlbWVudCByZWZlcmVuY2Ugb2YgZmlsdGVyIGlucHV0IHRleHRcclxuICAgKi9cclxuICBAVmlld0NoaWxkKCdmaWx0ZXJJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBmaWx0ZXJJbnB1dFJlZjogRWxlbWVudFJlZjtcclxuICAvKipcclxuICAgKiBiaW5kIHRvIFtwbGFjZUhvbGRlcl0gZm9yIGRpc3BsYXlpbmcgdGhlIHBsYWNlIGhvbGRlciBzdHJpbmcgb2YgdGhlIGFuY2hvci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwbGFjZUhvbGRlcjogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIGJpbmQgdG8gW2l0ZW1zXSBmb3IgdGhlIG9wdGlvbnMvZ3JvdXBzIGluIHRoZSBkcm9wZG93blxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGl0ZW1zOiBhbnlbXTtcclxuICAvKipcclxuICAgKiBiaW5kIHRvIFtjaGVja2JveF0sIHRoZSBmbGFnIGZvciBtdWx0aS1zZWxlY3QgKGNoZWNrYm94KSBtb2RlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNoZWNrYm94ID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbc2VsZWN0ZWRWYWx1ZV0gZm9yIHRoZSB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9uIGZyb20gZHJvcGRvd25cclxuICAgKi9cclxuICBASW5wdXQoKSBzZWxlY3RlZFZhbHVlOiBhbnk7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbZmlsdGVyQm94XSBmb3IgZGlzcGxheWluZyB0aGUgZmlsdGVyIGlucHV0IHRleHQgYm94XHJcbiAgICovXHJcbiAgQElucHV0KCkgZmlsdGVyQm94ID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbc3VmZml4VGV4dF0gZm9yIGRpc3BsYXlpbmcgdGhlIHN1ZmZpeCBvZiB0aGUgc2VsZWN0ZWQgdGV4dCBvZiBhbmNob3JcclxuICAgKi9cclxuICBASW5wdXQoKSBzdWZmaXhUZXh0OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbZGlzYWJsZWRdIGZvciBkaXNhYmxpbmcgdGhlIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbYWxsb3dDbGVhcl0gZm9yIGVuYWJsaW5nIHRoZSBjbGVhcmFuY2UgKGNsZWFyYW5jZSBpcyBub3QgYXZhaWFibGUgd2hlbiBjaGVja2JveCBpcyBlbmFibGVkKVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGFsbG93Q2xlYXIgPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIGJpbmQgdG8gW2Zvcm1hdE51bWJlcl0gZm9yIHNob3cgZm9ybWF0dGVkIG51bWJlciB0ZXh0XHJcbiAgICovXHJcbiAgQElucHV0KCkgZm9ybWF0TnVtYmVyID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogZm9yIDItd2F5IGJpbmRpbmcgb2YgW3NlbGVjdGVkVmFsdWVdXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4odHJ1ZSk7XHJcbiAgLyoqXHJcbiAgICogW3NlbGVjdGlvbkNoYW5nZV0gZXZlbnQgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGNoYW5naW5nIG9mIHRoZSBzZWxlY3Rpb25cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KHRydWUpO1xyXG4gIC8qKlxyXG4gICAqIFtkcm9wZG93bkJsdXJdIGV2ZW50IHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2l0aCAoYmx1cikgb2YgZHJvcGRvd25cclxuICAgKi9cclxuICBAT3V0cHV0KCkgZHJvcGRvd25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgLyoqXHJcbiAgICogW2l0ZW1DbGlja10gZXZlbnQgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGNsaWNraW5nIHRoZSBvcHRpb24gb2YgZHJvcGRvd25cclxuICAgKi9cclxuICBAT3V0cHV0KCkgaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgLyoqXHJcbiAgICogZmlsdGVyIHZhbHVlXHJcbiAgICovXHJcbiAgZmlsdGVyVmFsdWU6IHN0cmluZztcclxuICAvKipcclxuICAgKiBmbGFnIG9mIGNsaWNraW5nIGRyb3Bkb3duLiBJdCdzIHRvIHByZXZlbnQgKGJsdXIpIG9mIGRyb3Bkb3duIGZyb20gaGFwcGVuaW5nIGluIGNoZWNrYm94IG1vZGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY2xpY2tlZEl0ZW1zID0gZmFsc2U7XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLml0ZW1zKSB7XHJcbiAgICAgIHRoaXMuX2NoZWNrU2VsZWN0aW9uQ2hhbmdlKGNoYW5nZXMuaXRlbXMucHJldmlvdXNWYWx1ZSwgY2hhbmdlcy5pdGVtcy5jdXJyZW50VmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdHJpZ2dlcmVkIHdoZW4gY2xpY2tpbmcgdGhlIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgb25JdGVtc0NsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC5vZmZzZXRYID4gKGV2ZW50LnRhcmdldC5jbGllbnRXaWR0aCArIGV2ZW50LnRhcmdldC5jbGllbnRMZWZ0KSkge1xyXG4gICAgICBzdG9wUHJvcGFnYXRpb25BbmREZWZhdWx0KGV2ZW50KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gc2hvdWxkIGlnbm9yZSBjbGlja2luZyBvbiBmaWx0ZXJcclxuICAgIGlmICh0aGlzLmNoZWNrYm94ICYmIGV2ZW50LnRhcmdldC50eXBlICE9PSAndGV4dCcpIHtcclxuICAgICAgdGhpcy5fY2xpY2tlZEl0ZW1zID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRyaWdnZXJlZCB3aGVuIGNsaWNraW5nIHRoZSBpdGVtXHJcbiAgICovXHJcbiAgb25JdGVtQ2xpY2soY3VycmVudEl0ZW0pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jaGVja2JveCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLl9nZXRJdGVtVmFsdWUoY3VycmVudEl0ZW0pOyAvLyBjdXJyZW50SXRlbS52YWx1ZSAhPSBudWxsID8gY3VycmVudEl0ZW0udmFsdWUgOiBjdXJyZW50SXRlbS50ZXh0O1xyXG4gICAgICBjbGVhckFsbFNlbGVjdGlvbih0aGlzLml0ZW1zKTtcclxuICAgICAgLy8gc2V0IHRoZSBzZWxlY3Rpb24gb2YgY3VycmVudCBvbmVcclxuICAgICAgY3VycmVudEl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLml0ZW1DbGljay5lbWl0KGN1cnJlbnRJdGVtKTtcclxuICAgICAgdGhpcy5fb25TZWxlY3Rpb25DaGFuZ2UodGhpcy5zZWxlY3RlZFZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRyaWdnZXJzIHdpdGggKGJsdXIpIGV2ZW50IG9mIGZpbHRlciBpbnB1dCBib3hcclxuICAgKi9cclxuICBvbkZpbHRlclRleHRCbHVyKGV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmRyb3Bkb3duQmx1ci5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRyaWdnZXJzIHdpdGggKGJsdXIpIGV2ZW50IG9mIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgb25JdGVtc0JsdXIoZXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoZWNrYm94KSB7XHJcbiAgICAgIGlmICh0aGlzLl9jbGlja2VkSXRlbXMpIHtcclxuICAgICAgICAvLyBpbiBjaGVja2JveCBtb2RlLCB0aGlzIGJsdXIgZXZlbnQgd2lsbCBiZSBpZ25vcmVkIHdoZW4gY2xpY2tpbmcgdGhlIGRyb3Bkb3duIChjaGVjayB0aGUgY2hlY2tib3gpXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LmZvY3VzKCk7XHJcbiAgICAgICAgdGhpcy5fY2xpY2tlZEl0ZW1zID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRyb3Bkb3duQmx1ci5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRvZ2dsZSB0aGUgc2VsZWN0aW9uIHdoZW4gY2hlY2tpbmcgc3RhdHVzIGNoYW5nZWQgKGluIGNoZWNrYm94IG1vZGUpXHJcbiAgICovXHJcbiAgdG9nZ2xlU2VsZWN0aW9uKGl0ZW06IHtpZDogc3RyaW5nLCB2YWx1ZT86IGFueSwgdGV4dDogYW55LCBzZWxlY3RlZD86IGJvb2xlYW59KTogdm9pZCB7XHJcbiAgICBpdGVtLnNlbGVjdGVkID0gIWl0ZW0uc2VsZWN0ZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuX2dldEl0ZW1WYWx1ZShpdGVtKSk7IC8vIGl0ZW0udmFsdWUgIT0gbnVsbCA/IGl0ZW0udmFsdWUgOiBpdGVtLnRleHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogaXRlbXMgdmFsdWVzIGxpc3QgYWZ0ZXIgYXBwbHlpbmcgdGhlIGZpbHRlclxyXG4gICAqL1xyXG4gIGdldCBpdGVtc1ZhbHVlcygpOiBhbnlbXSB7XHJcbiAgICBsZXQgZmlsdGVyO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyVmFsdWUpIHtcclxuICAgICAgZmlsdGVyID0gdGhpcy5maWx0ZXJWYWx1ZS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWx0ZXIgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pdGVtcztcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5pdGVtcyB8fCB0aGlzLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBpZiAoaGFzR3JvdXAodGhpcy5pdGVtcykpIHtcclxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcclxuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGdyb3VwSXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKGdyb3VwSXRlbS5ncm91cCAhPSBudWxsICYmIGdyb3VwSXRlbS5ncm91cC50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKSkge1xyXG4gICAgICAgICAgLy8gaWYgZ3JvdXBJdGVtIGNvbnRhaW5zIHRoZSBmaWx0ZXJzLCB0aGUgZ3JvdXBJdGVtIG5lZWRzIHRvIGJlIGRpc3BsYXllZCBhcyB3ZWxsXHJcbiAgICAgICAgICBpdGVtcy5wdXNoKGdyb3VwSXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBncm91cEl0ZW0uaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50ZXh0ICE9IG51bGwgJiYgaXRlbS50ZXh0LnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpKTtcclxuICAgICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zICYmIGZpbHRlcmVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtncm91cDogZ3JvdXBJdGVtLmdyb3VwLCBpdGVtczogZmlsdGVyZWRJdGVtc30pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IChpdGVtLnRleHQgIT0gbnVsbCAmJiBpdGVtLnRleHQudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcikpKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogb3B0aW9ucyBDU1MgY2xhc3NcclxuICAgKi9cclxuICBnZXQgb3B0aW9uc0NsYXNzKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJCb3ggJiYgIXRoaXMuY2hlY2tib3gpIHtcclxuICAgICAgcmV0dXJuICdvcHRpb25zIHdpdGgtZmlsdGVyJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnb3B0aW9ucyBuby1maWx0ZXInO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IGl0ZW0gdmFsdWUuIFJldHVybiB0ZXh0IGlmIHZhbHVlIGlzIG5vdCBhdmFpbGFibGVcclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRJdGVtVmFsdWUoaXRlbSk6IGFueSB7XHJcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0udmFsdWUgIT0gbnVsbCA/IGl0ZW0udmFsdWUgOiBpdGVtLnRleHQgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3Rpb24gY2hhbmdlZCwgZW1pdHMgZXZlbnRzOiAoc2VsZWN0ZWRWYWx1ZUNoYW5nZSkgYW5kIChzZWxlY3Rpb25DaGFuZ2UpO1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX29uU2VsZWN0aW9uQ2hhbmdlKHZhbHVlKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNoZWNrIHdoZXRoZXIgdGhlIHNlbGVjdGlvbiBpcyBjaGFuZ2VkLiBFbWl0cyByZWxhdGl2ZSBldmVudHMgd2hlbiBpZiBjaGFuZ2VkLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NoZWNrU2VsZWN0aW9uQ2hhbmdlKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSkge1xyXG4gICAgY29uc3QgY3VyU2VsZWN0ZWRJdGVtID0gZ2V0Rmlyc3RTZWxlY3RlZEl0ZW0oY3VycmVudFZhbHVlKTtcclxuICAgIGNvbnN0IGxhc3RTZWxlY3RlZEl0ZW0gPSBnZXRGaXJzdFNlbGVjdGVkSXRlbShwcmV2aW91c1ZhbHVlKTtcclxuICAgIGNvbnN0IGN1clNlbGVjdGVkSXRlbUlkID0gY3VyU2VsZWN0ZWRJdGVtID8gY3VyU2VsZWN0ZWRJdGVtLmlkIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgbGFzdFNlbGVjdGVkSXRlbUlkID0gbGFzdFNlbGVjdGVkSXRlbSA/IGxhc3RTZWxlY3RlZEl0ZW0uaWQgOiB1bmRlZmluZWQ7XHJcbiAgICBpZiAoY3VyU2VsZWN0ZWRJdGVtSWQgIT09IGxhc3RTZWxlY3RlZEl0ZW1JZCAmJiAhdGhpcy5jaGVja2JveCkge1xyXG4gICAgICB0aGlzLl9vblNlbGVjdGlvbkNoYW5nZSh0aGlzLl9nZXRJdGVtVmFsdWUoY3VyU2VsZWN0ZWRJdGVtKSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==