@firestitch/popover 9.4.15 → 12.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/class/popover-ref.d.ts +34 -34
- package/app/components/popover/popover.component.d.ts +50 -47
- package/app/components/popover-wrapper/popover-wrapper.component.d.ts +39 -36
- package/app/enums/position.d.ts +6 -6
- package/app/fs-popover.module.d.ts +13 -4
- package/app/helpers/create-injector.d.ts +4 -4
- package/app/helpers/create-overlay-ref.d.ts +4 -4
- package/app/helpers/create-position-strategy.d.ts +4 -4
- package/app/helpers/create-template-portal.d.ts +4 -4
- package/app/helpers/point-in-rect.d.ts +1 -1
- package/app/interfaces/popover-config.interface.d.ts +16 -16
- package/app/services/popover.service.d.ts +20 -17
- package/bundles/firestitch-popover.umd.js +872 -779
- package/bundles/firestitch-popover.umd.js.map +1 -1
- package/esm2015/app/class/popover-ref.js +86 -96
- package/esm2015/app/components/popover/popover.component.js +191 -224
- package/esm2015/app/components/popover-wrapper/popover-wrapper.component.js +119 -124
- package/esm2015/app/enums/position.js +8 -8
- package/esm2015/app/fs-popover.module.js +44 -35
- package/esm2015/app/helpers/create-injector.js +9 -9
- package/esm2015/app/helpers/create-overlay-ref.js +12 -12
- package/esm2015/app/helpers/create-position-strategy.js +56 -56
- package/esm2015/app/helpers/create-template-portal.js +5 -5
- package/esm2015/app/helpers/point-in-rect.js +4 -4
- package/esm2015/app/interfaces/popover-config.interface.js +2 -1
- package/esm2015/app/services/popover.service.js +56 -60
- package/esm2015/firestitch-popover.js +5 -7
- package/esm2015/public_api.js +8 -7
- package/fesm2015/firestitch-popover.js +540 -578
- package/fesm2015/firestitch-popover.js.map +1 -1
- package/firestitch-popover.d.ts +5 -6
- package/package.json +7 -8
- package/public_api.d.ts +5 -4
- package/styles.scss +4 -3
- package/bundles/firestitch-popover.umd.min.js +0 -16
- package/bundles/firestitch-popover.umd.min.js.map +0 -1
- package/esm5/app/class/popover-ref.js +0 -152
- package/esm5/app/components/popover/popover.component.js +0 -241
- package/esm5/app/components/popover-wrapper/popover-wrapper.component.js +0 -138
- package/esm5/app/enums/position.js +0 -8
- package/esm5/app/fs-popover.module.js +0 -39
- package/esm5/app/helpers/create-injector.js +0 -9
- package/esm5/app/helpers/create-overlay-ref.js +0 -12
- package/esm5/app/helpers/create-position-strategy.js +0 -56
- package/esm5/app/helpers/create-template-portal.js +0 -5
- package/esm5/app/helpers/point-in-rect.js +0 -4
- package/esm5/app/interfaces/popover-config.interface.js +0 -1
- package/esm5/app/services/popover.service.js +0 -70
- package/esm5/firestitch-popover.js +0 -7
- package/esm5/public_api.js +0 -7
- package/fesm5/firestitch-popover.js +0 -708
- package/fesm5/firestitch-popover.js.map +0 -1
- package/firestitch-popover.metadata.json +0 -1
|
@@ -1,224 +1,191 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
25
|
-
this.
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
33
|
-
this.
|
|
34
|
-
this.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
this._mouseEnter
|
|
100
|
-
.pipe(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
this.
|
|
104
|
-
}),
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
const
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
],
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
],
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
HostBinding('class.indication'),
|
|
192
|
-
__metadata("design:type", Object)
|
|
193
|
-
], FsPopoverComponent.prototype, "indication", void 0);
|
|
194
|
-
__decorate([
|
|
195
|
-
Input(),
|
|
196
|
-
__metadata("design:type", String)
|
|
197
|
-
], FsPopoverComponent.prototype, "position", void 0);
|
|
198
|
-
__decorate([
|
|
199
|
-
Input(),
|
|
200
|
-
__metadata("design:type", String)
|
|
201
|
-
], FsPopoverComponent.prototype, "theme", void 0);
|
|
202
|
-
__decorate([
|
|
203
|
-
Input(),
|
|
204
|
-
__metadata("design:type", String)
|
|
205
|
-
], FsPopoverComponent.prototype, "size", void 0);
|
|
206
|
-
__decorate([
|
|
207
|
-
Input(),
|
|
208
|
-
__metadata("design:type", String)
|
|
209
|
-
], FsPopoverComponent.prototype, "trigger", void 0);
|
|
210
|
-
FsPopoverComponent = __decorate([
|
|
211
|
-
Component({
|
|
212
|
-
selector: 'fs-popover',
|
|
213
|
-
template: "<ng-content></ng-content>\n<!-- <div class=\"line-container\">\n <div class=\"line\"></div>\n</div> -->\n\n<div class=\"line\"></div>\n\n",
|
|
214
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
215
|
-
styles: [":host{display:inline-flex;cursor:pointer;position:relative}::ng-deep fs-popover.indication .line{width:100%;bottom:0;border-bottom:1px dashed #ccc;position:absolute;opacity:.6}"]
|
|
216
|
-
}),
|
|
217
|
-
__param(3, Optional()),
|
|
218
|
-
__metadata("design:paramtypes", [ElementRef,
|
|
219
|
-
FsPopoverService,
|
|
220
|
-
NgZone,
|
|
221
|
-
Router])
|
|
222
|
-
], FsPopoverComponent);
|
|
223
|
-
export { FsPopoverComponent };
|
|
224
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZmlyZXN0aXRjaC9wb3BvdmVyLyIsInNvdXJjZXMiOlsiYXBwL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsV0FBVyxFQUNYLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQWMsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFDTCxZQUFZLEVBQ1osS0FBSyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEVBQ0gsY0FBYyxHQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBU3ZELElBQWEsa0JBQWtCLEdBQS9CLE1BQWEsa0JBQWtCO0lBNkQ3QixZQUNVLE1BQWtCLEVBQ2xCLGVBQWlDLEVBQ2pDLE9BQWUsRUFDSCxPQUFlO1FBSDNCLFdBQU0sR0FBTixN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QURDLEtBQUssRUFBRTs7MkRBQ29CO0FBRzVCO0lBREMsS0FBSyxFQUFFOzttREFDYztBQUl0QjtJQUZDLEtBQUssRUFBRTtJQUNQLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQzs7c0RBQ1A7QUFHekI7SUFEQyxLQUFLLEVBQUU7O29EQUNtQztBQUczQztJQURDLEtBQUssRUFBRTs7aURBQ2lDO0FBR3pDO0lBREMsS0FBSyxFQUFFOztnREFDNEM7QUFHcEQ7SUFEQyxLQUFLLEVBQUU7O21EQUM0QztBQWhEekMsa0JBQWtCO0lBTjlCLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxZQUFZO1FBQ3RCLHNKQUFxQztRQUVyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7S0FDaEQsQ0FBQztJQWtFRyxXQUFBLFFBQVEsRUFBRSxDQUFBO3FDQUhLLFVBQVU7UUFDRCxnQkFBZ0I7UUFDeEIsTUFBTTtRQUNNLE1BQU07R0FqRTFCLGtCQUFrQixDQTZQOUI7U0E3UFksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgSG9zdEJpbmRpbmcsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgZnJvbUV2ZW50LCBwaXBlLCBTdWJqZWN0LCB0aW1lciwgT2JzZXJ2YWJsZSwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZpbmFsaXplLFxuICBtYXBUbyxcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxuICB3aXRoTGF0ZXN0RnJvbSxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBndWlkIH0gZnJvbSAnQGZpcmVzdGl0Y2gvY29tbW9uJztcblxuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLy4uLy4uL2VudW1zL3Bvc2l0aW9uJztcbmltcG9ydCB7IEZzUG9wb3ZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wb3BvdmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9pbnRJblJlY3QgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3BvaW50LWluLXJlY3QnO1xuaW1wb3J0IHsgRnNQb3BvdmVyUmVmIH0gZnJvbSAnLi4vLi4vY2xhc3MvcG9wb3Zlci1yZWYnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJ3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsgJ3BvcG92ZXIuY29tcG9uZW50LnNjc3MnIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEZzUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9ndWlkID0gZ3VpZCgneHh4eHh4eCcpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YTogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsZWF2ZURlbGF5ID0gMTAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93RGVsYXkgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhXaWR0aCA9IDI1MDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgd3JhcHBlckNsYXNzOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9TaG93ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgYXV0b0Nsb3NlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbG9hZGluZ0RpYW1ldGVyID0gMjA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaW5kaWNhdGlvbicpXG4gIHB1YmxpYyBpbmRpY2F0aW9uID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcG9zaXRpb246IFBvc2l0aW9uID0gUG9zaXRpb24uU291dGg7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRoZW1lOiAnbGlnaHQnIHwgJ2RhcmsnID0gJ2xpZ2h0JztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2l6ZTogJ3RpbnknIHwgJ3NtYWxsJyB8ICdub3JtYWwnID0gJ25vcm1hbCc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRyaWdnZXI6ICdjbGljaycgfCAnbW91c2VvdmVyJyA9ICdtb3VzZW92ZXInO1xuXG4gIHByaXZhdGUgX3BvcG92ZXJSZWY6IEZzUG9wb3ZlclJlZjtcbiAgcHJpdmF0ZSBfd3JhcHBlckVsZW1lbnQ6IEVsZW1lbnQ7XG4gIHByaXZhdGUgX2hvc3RCb3VuZHM6IERPTVJlY3Q7XG5cbiAgcHJpdmF0ZSBfbW91c2VFbnRlciQgPSBmcm9tRXZlbnQodGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlZW50ZXInKTtcbiAgcHJpdmF0ZSBfbW91c2VNb3ZlJCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlbW92ZScsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBfbW91c2VMZWF2ZSQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlbGVhdmUnKTtcblxuICBwcml2YXRlIF9wb3BvdmVyQ2xvc2VkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9wb3BvdmVyU2VydmljZTogRnNQb3BvdmVyU2VydmljZSxcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9wZW5UaW1lciQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGltZXIodGhpcy5zaG93RGVsYXkpO1xuICB9XG5cbiAgcHVibGljIGdldCBjbG9zZVRpbWVyJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aW1lcih0aGlzLmxlYXZlRGVsYXkpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3BvcG92ZXJSZWYgPSBuZXcgRnNQb3BvdmVyUmVmKHtcbiAgICAgIG1heFdpZHRoOiB0aGlzLm1heFdpZHRoLFxuICAgICAgd3JhcHBlckNsYXNzOiB0aGlzLndyYXBwZXJDbGFzcyxcbiAgICAgIGF1dG9TaG93OiB0aGlzLmF1dG9TaG93LFxuICAgICAgYXV0b0Nsb3NlOiB0aGlzLmF1dG9DbG9zZSxcbiAgICAgIGxvYWRpbmdEaWFtZXRlcjogdGhpcy5sb2FkaW5nRGlhbWV0ZXIsXG4gICAgICBsb2FkaW5nOiB0aGlzLmxvYWRpbmcsXG4gICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICB0aGVtZTogdGhpcy50aGVtZSxcbiAgICB9KTtcblxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk1vdXNlSG9zdENsaWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9saXN0ZW5Nb3VzZUhvc3RFbnRlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbGlzdGVuUm91dGVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9wb3BvdmVyQ2xvc2VkJC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xvc2VQb3BvdmVyKCkge1xuICAgIHRoaXMuX3BvcG92ZXJDbG9zZWQkLm5leHQoKTtcblxuICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5fd3JhcHBlckVsZW1lbnQgPSBudWxsO1xuXG4gICAgICBpZiAodGhpcy5fcG9wb3ZlclNlcnZpY2UuaGFzQWN0aXZlUG9wb3Zlcikge1xuICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS5jbG9zZSh0aGlzLl9wb3BvdmVyUmVmKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlblJvdXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDtcbiAgICAgICAgfSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKFxuICAgICAgICAgICAgdGhpcy5fZGVzdHJveSRcbiAgICAgICAgICAgICAgLnBpcGUoZGVsYXkoMjAwKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2Nsb3NlUG9wb3ZlcigpO1xuICAgICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3Rlbk1vdXNlSG9zdENsaWNrKCk6IHZvaWQge1xuICAgIGZyb21FdmVudCh0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgdGhpcy5fb3BlblBvcG92ZXIoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9saXN0ZW5Nb3VzZUhvc3RMZWF2ZSQoKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNsb3NlVGltZXIkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jbG9zZVBvcG92ZXIoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuTW91c2VIb3N0RW50ZXIoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0dWFsTW91c2VTdGF0ZSQgPSBtZXJnZShcbiAgICAgIHRoaXMuX21vdXNlTGVhdmUkLnBpcGUobWFwVG8odHJ1ZSkpLFxuICAgICAgdGhpcy5fbW91c2VFbnRlciQucGlwZShtYXBUbyhmYWxzZSkpLFxuICAgIClcbiAgICAucGlwZShcbiAgICAgIHN0YXJ0V2l0aChmYWxzZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICk7XG5cbiAgICB0aGlzLl9tb3VzZUVudGVyJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICF0aGlzLl93cmFwcGVyRWxlbWVudDtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2Uuc2V0QWN0aXZlUG9wb3ZlckdVSUQodGhpcy5fZ3VpZCk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5vcGVuVGltZXIkKSxcbiAgICAgICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0aGF0IGFmdGVyIGFsbCBkZWxheXMgbW91c2Ugc3RpbGwgb3ZlciBhbiBlbGVtZW5cbiAgICAgICAgd2l0aExhdGVzdEZyb20oYWN0dWFsTW91c2VTdGF0ZSQpLFxuICAgICAgICBmaWx0ZXIoKFtfLCBtb3VzZUxlYXZlXSkgPT4ge1xuICAgICAgICAgIHJldHVybiAhbW91c2VMZWF2ZTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9vcGVuUG9wb3ZlcigpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2xpc3Rlbk1vdXNlSG9zdExlYXZlJCgpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2xvc2VUaW1lciQpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fY2xvc2VQb3BvdmVyKCkpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLl9jbG9zZVBvcG92ZXIoKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9vcGVuUG9wb3ZlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnbW91c2VvdmVyJyAmJiB0aGlzLl9wb3BvdmVyU2VydmljZS5hY3RpdmVFbGVtZW50R1VJRCAhPT0gdGhpcy5fZ3VpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2hvc3RCb3VuZHMgPSB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLl93cmFwcGVyRWxlbWVudCA9IHRoaXMuX3BvcG92ZXJTZXJ2aWNlLm9wZW5Qb3BvdmVyKFxuICAgICAgICB0aGlzLl9lbFJlZixcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLl9wb3BvdmVyUmVmLFxuICAgICAgICB0aGlzLnBvc2l0aW9uXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuTW91c2VIb3N0TGVhdmUkKCk6IE9ic2VydmFibGU8TW91c2VFdmVudD4ge1xuICAgIGNvbnN0IG1vdXNlTW92ZSQgPSB0aGlzLl9tb3VzZU1vdmUkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5fd3JhcHBlckVsZW1lbnQpLFxuICAgICAgICBmaWx0ZXIoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3BvcG92ZXJSZWYuYXV0b0Nsb3NlICYmIHRoaXMuX21vdXNlTGVmdFRoZVRhcmdldHMoZXZlbnQpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICBjb25zdCBtb3VzZUNsaWNrJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snKTtcblxuICAgIHJldHVybiBtZXJnZShcbiAgICAgIG1vdXNlTW92ZSQsXG4gICAgICBtb3VzZUNsaWNrJCxcbiAgICApO1xuICAgIC8vXG4gICAgLy8gcmV0dXJuIHRoaXMuX21vdXNlTGVhdmUkXG4gICAgLy8gICAucGlwZShcbiAgICAvLyAgICAgLy9cbiAgICAvLyAgICAgdGltZW91dFdpdGgoMjAwLCBtb3VzZU1vdmUkKSxcbiAgICAvLyAgICk7XG4gIH1cblxuICAvLyBDaGVjayBpZiBtb3VzZSBsZWZ0IHRhcmdldCBvciBwb3BvdmVyIHJlY3RzXG4gIHByaXZhdGUgX21vdXNlTGVmdFRoZVRhcmdldHMoZXZlbnQ6IE1vdXNlRXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBob3N0Qm91bmRzID0gdGhpcy5faG9zdEJvdW5kcztcbiAgICBjb25zdCBwb3BvdmVyQm91bmRzID0gdGhpcy5fd3JhcHBlckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCBwb2ludEluSG9zdFJlY3QgPSBwb2ludEluUmVjdChcbiAgICAgIGhvc3RCb3VuZHMueCxcbiAgICAgIGhvc3RCb3VuZHMueSxcbiAgICAgIGhvc3RCb3VuZHMueCArIGhvc3RCb3VuZHMud2lkdGgsXG4gICAgICBob3N0Qm91bmRzLnkgKyBob3N0Qm91bmRzLmhlaWdodCxcbiAgICAgIGV2ZW50LngsXG4gICAgICBldmVudC55XG4gICAgKTtcblxuICAgIGNvbnN0IHBvaW50SW5Qb3BvdmVyUmVjdCA9IHBvaW50SW5SZWN0KFxuICAgICAgcG9wb3ZlckJvdW5kcy54LFxuICAgICAgcG9wb3ZlckJvdW5kcy55LFxuICAgICAgcG9wb3ZlckJvdW5kcy54ICsgcG9wb3ZlckJvdW5kcy53aWR0aCxcbiAgICAgIHBvcG92ZXJCb3VuZHMueSArIHBvcG92ZXJCb3VuZHMuaGVpZ2h0LFxuICAgICAgZXZlbnQueCxcbiAgICAgIGV2ZW50LnlcbiAgICApO1xuXG4gICAgcmV0dXJuICFwb2ludEluSG9zdFJlY3QgJiYgIXBvaW50SW5Qb3BvdmVyUmVjdDtcbiAgfVxufVxuIl19
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ElementRef, Input, NgZone, Optional, TemplateRef, HostBinding, } from '@angular/core';
|
|
2
|
+
import { NavigationEnd, Router } from '@angular/router';
|
|
3
|
+
import { fromEvent, pipe, Subject, timer, merge } from 'rxjs';
|
|
4
|
+
import { debounceTime, delay, distinctUntilChanged, filter, finalize, mapTo, startWith, switchMap, takeUntil, tap, withLatestFrom, } from 'rxjs/operators';
|
|
5
|
+
import { guid } from '@firestitch/common';
|
|
6
|
+
import { Position } from './../../enums/position';
|
|
7
|
+
import { FsPopoverService } from '../../services/popover.service';
|
|
8
|
+
import { pointInRect } from '../../helpers/point-in-rect';
|
|
9
|
+
import { FsPopoverRef } from '../../class/popover-ref';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../../services/popover.service";
|
|
12
|
+
import * as i2 from "@angular/router";
|
|
13
|
+
export class FsPopoverComponent {
|
|
14
|
+
constructor(_elRef, _popoverService, _ngZone, _router) {
|
|
15
|
+
this._elRef = _elRef;
|
|
16
|
+
this._popoverService = _popoverService;
|
|
17
|
+
this._ngZone = _ngZone;
|
|
18
|
+
this._router = _router;
|
|
19
|
+
this._guid = guid('xxxxxxx');
|
|
20
|
+
this.leaveDelay = 100;
|
|
21
|
+
this.showDelay = 0;
|
|
22
|
+
this.maxWidth = 250;
|
|
23
|
+
this.autoShow = true;
|
|
24
|
+
this.autoClose = true;
|
|
25
|
+
this.loadingDiameter = 20;
|
|
26
|
+
this.loading = true;
|
|
27
|
+
this.indication = true;
|
|
28
|
+
this.position = Position.South;
|
|
29
|
+
this.theme = 'light';
|
|
30
|
+
this.size = 'normal';
|
|
31
|
+
this.trigger = 'mouseover';
|
|
32
|
+
this._mouseEnter$ = fromEvent(this._elRef.nativeElement, 'mouseenter');
|
|
33
|
+
this._mouseMove$ = fromEvent(document, 'mousemove', { passive: true });
|
|
34
|
+
this._mouseLeave$ = fromEvent(this._elRef.nativeElement, 'mouseleave');
|
|
35
|
+
this._popoverClosed$ = new Subject();
|
|
36
|
+
this._destroy$ = new Subject();
|
|
37
|
+
}
|
|
38
|
+
get openTimer$() {
|
|
39
|
+
return timer(this.showDelay);
|
|
40
|
+
}
|
|
41
|
+
get closeTimer$() {
|
|
42
|
+
return timer(this.leaveDelay);
|
|
43
|
+
}
|
|
44
|
+
ngOnInit() {
|
|
45
|
+
this._popoverRef = new FsPopoverRef({
|
|
46
|
+
maxWidth: this.maxWidth,
|
|
47
|
+
wrapperClass: this.wrapperClass,
|
|
48
|
+
autoShow: this.autoShow,
|
|
49
|
+
autoClose: this.autoClose,
|
|
50
|
+
loadingDiameter: this.loadingDiameter,
|
|
51
|
+
loading: this.loading,
|
|
52
|
+
size: this.size,
|
|
53
|
+
theme: this.theme,
|
|
54
|
+
});
|
|
55
|
+
this._ngZone.runOutsideAngular(() => {
|
|
56
|
+
if (this.trigger === 'click') {
|
|
57
|
+
this._listenMouseHostClick();
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
this._listenMouseHostEnter();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
this._listenRouteChange();
|
|
64
|
+
}
|
|
65
|
+
ngOnDestroy() {
|
|
66
|
+
this._popoverClosed$.next();
|
|
67
|
+
this._destroy$.next();
|
|
68
|
+
}
|
|
69
|
+
_closePopover() {
|
|
70
|
+
this._popoverClosed$.next();
|
|
71
|
+
this._ngZone.run(() => {
|
|
72
|
+
this._wrapperElement = null;
|
|
73
|
+
if (this._popoverService.hasActivePopover) {
|
|
74
|
+
this._popoverService.close(this._popoverRef);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
_listenRouteChange() {
|
|
79
|
+
this._router.events
|
|
80
|
+
.pipe(filter((event) => {
|
|
81
|
+
return event instanceof NavigationEnd;
|
|
82
|
+
}), pipe(takeUntil(this._destroy$
|
|
83
|
+
.pipe(delay(200)))))
|
|
84
|
+
.subscribe(() => {
|
|
85
|
+
this._closePopover();
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
_listenMouseHostClick() {
|
|
89
|
+
fromEvent(this._elRef.nativeElement, 'click', { passive: true })
|
|
90
|
+
.pipe(tap((e) => {
|
|
91
|
+
e.stopPropagation();
|
|
92
|
+
this._openPopover();
|
|
93
|
+
}), switchMap(() => this._listenMouseHostLeave$()), switchMap(() => this.closeTimer$), takeUntil(this._destroy$))
|
|
94
|
+
.subscribe(() => {
|
|
95
|
+
this._closePopover();
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
_listenMouseHostEnter() {
|
|
99
|
+
const actualMouseState$ = merge(this._mouseLeave$.pipe(mapTo(true)), this._mouseEnter$.pipe(mapTo(false)))
|
|
100
|
+
.pipe(startWith(false), distinctUntilChanged());
|
|
101
|
+
this._mouseEnter$
|
|
102
|
+
.pipe(filter(() => {
|
|
103
|
+
return !this._wrapperElement;
|
|
104
|
+
}), tap(() => {
|
|
105
|
+
this._popoverService.setActivePopoverGUID(this._guid);
|
|
106
|
+
}), switchMap(() => this.openTimer$),
|
|
107
|
+
// we have to check that after all delays mouse still over an elemen
|
|
108
|
+
withLatestFrom(actualMouseState$), filter(([_, mouseLeave]) => {
|
|
109
|
+
return !mouseLeave;
|
|
110
|
+
}), tap(() => this._openPopover()), switchMap(() => this._listenMouseHostLeave$()), switchMap(() => this.closeTimer$), tap(() => this._closePopover()), finalize(() => this._closePopover()), takeUntil(this._destroy$))
|
|
111
|
+
.subscribe();
|
|
112
|
+
}
|
|
113
|
+
_openPopover() {
|
|
114
|
+
if (this.trigger === 'mouseover' && this._popoverService.activeElementGUID !== this._guid) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
this._hostBounds = this._elRef.nativeElement.getBoundingClientRect();
|
|
118
|
+
this._ngZone.run(() => {
|
|
119
|
+
this._wrapperElement = this._popoverService.openPopover(this._elRef, this.template, this.data, this._popoverRef, this.position);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
_listenMouseHostLeave$() {
|
|
123
|
+
const mouseMove$ = this._mouseMove$
|
|
124
|
+
.pipe(debounceTime(50), filter(() => !!this._wrapperElement), filter((event) => {
|
|
125
|
+
return this._popoverRef.autoClose && this._mouseLeftTheTargets(event);
|
|
126
|
+
}));
|
|
127
|
+
const mouseClick$ = fromEvent(this._elRef.nativeElement, 'click');
|
|
128
|
+
return merge(mouseMove$, mouseClick$);
|
|
129
|
+
//
|
|
130
|
+
// return this._mouseLeave$
|
|
131
|
+
// .pipe(
|
|
132
|
+
// //
|
|
133
|
+
// timeoutWith(200, mouseMove$),
|
|
134
|
+
// );
|
|
135
|
+
}
|
|
136
|
+
// Check if mouse left target or popover rects
|
|
137
|
+
_mouseLeftTheTargets(event) {
|
|
138
|
+
const hostBounds = this._hostBounds;
|
|
139
|
+
const popoverBounds = this._wrapperElement.getBoundingClientRect();
|
|
140
|
+
const pointInHostRect = pointInRect(hostBounds.x, hostBounds.y, hostBounds.x + hostBounds.width, hostBounds.y + hostBounds.height, event.x, event.y);
|
|
141
|
+
const pointInPopoverRect = pointInRect(popoverBounds.x, popoverBounds.y, popoverBounds.x + popoverBounds.width, popoverBounds.y + popoverBounds.height, event.x, event.y);
|
|
142
|
+
return !pointInHostRect && !pointInPopoverRect;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
FsPopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverComponent, deps: [{ token: i0.ElementRef }, { token: i1.FsPopoverService }, { token: i0.NgZone }, { token: i2.Router, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
146
|
+
FsPopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsPopoverComponent, selector: "fs-popover", inputs: { template: "template", data: "data", leaveDelay: "leaveDelay", showDelay: "showDelay", maxWidth: "maxWidth", wrapperClass: "wrapperClass", autoShow: "autoShow", autoClose: "autoClose", loadingDiameter: "loadingDiameter", loading: "loading", indication: "indication", position: "position", theme: "theme", size: "size", trigger: "trigger" }, host: { properties: { "class.indication": "this.indication" } }, ngImport: i0, template: "<span class=\"popover-container\"><ng-content></ng-content></span>\n", styles: [":host{display:inline-flex;cursor:pointer;position:relative}::ng-deep fs-popover.indication .popover-container{text-decoration:underline;-webkit-text-decoration-style:dashed;text-decoration-style:dashed;-webkit-text-decoration-color:#ccc;text-decoration-color:#ccc;text-underline-offset:3px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
147
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverComponent, decorators: [{
|
|
148
|
+
type: Component,
|
|
149
|
+
args: [{
|
|
150
|
+
selector: 'fs-popover',
|
|
151
|
+
templateUrl: 'popover.component.html',
|
|
152
|
+
styleUrls: ['popover.component.scss'],
|
|
153
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
154
|
+
}]
|
|
155
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FsPopoverService }, { type: i0.NgZone }, { type: i2.Router, decorators: [{
|
|
156
|
+
type: Optional
|
|
157
|
+
}] }]; }, propDecorators: { template: [{
|
|
158
|
+
type: Input
|
|
159
|
+
}], data: [{
|
|
160
|
+
type: Input
|
|
161
|
+
}], leaveDelay: [{
|
|
162
|
+
type: Input
|
|
163
|
+
}], showDelay: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}], maxWidth: [{
|
|
166
|
+
type: Input
|
|
167
|
+
}], wrapperClass: [{
|
|
168
|
+
type: Input
|
|
169
|
+
}], autoShow: [{
|
|
170
|
+
type: Input
|
|
171
|
+
}], autoClose: [{
|
|
172
|
+
type: Input
|
|
173
|
+
}], loadingDiameter: [{
|
|
174
|
+
type: Input
|
|
175
|
+
}], loading: [{
|
|
176
|
+
type: Input
|
|
177
|
+
}], indication: [{
|
|
178
|
+
type: Input
|
|
179
|
+
}, {
|
|
180
|
+
type: HostBinding,
|
|
181
|
+
args: ['class.indication']
|
|
182
|
+
}], position: [{
|
|
183
|
+
type: Input
|
|
184
|
+
}], theme: [{
|
|
185
|
+
type: Input
|
|
186
|
+
}], size: [{
|
|
187
|
+
type: Input
|
|
188
|
+
}], trigger: [{
|
|
189
|
+
type: Input
|
|
190
|
+
}] } });
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBR04sUUFBUSxFQUNSLFdBQVcsRUFDWCxXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFjLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRSxPQUFPLEVBQ0wsWUFBWSxFQUNaLEtBQUssRUFDTCxvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNILGNBQWMsR0FDZixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQVN2RCxNQUFNLE9BQU8sa0JBQWtCO0lBNkQ3QixZQUNVLE1BQWtCLEVBQ2xCLGVBQWlDLEVBQ2pDLE9B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QUFTO3NCQURmLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxlQUFlO3NCQURyQixLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSztnQkFLQyxVQUFVO3NCQUZoQixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGtCQUFrQjtnQkFJeEIsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLEtBQUs7c0JBRFgsS0FBSztnQkFJQyxJQUFJO3NCQURWLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgSG9zdEJpbmRpbmcsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgZnJvbUV2ZW50LCBwaXBlLCBTdWJqZWN0LCB0aW1lciwgT2JzZXJ2YWJsZSwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZpbmFsaXplLFxuICBtYXBUbyxcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxuICB3aXRoTGF0ZXN0RnJvbSxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBndWlkIH0gZnJvbSAnQGZpcmVzdGl0Y2gvY29tbW9uJztcblxuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLy4uLy4uL2VudW1zL3Bvc2l0aW9uJztcbmltcG9ydCB7IEZzUG9wb3ZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wb3BvdmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9pbnRJblJlY3QgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3BvaW50LWluLXJlY3QnO1xuaW1wb3J0IHsgRnNQb3BvdmVyUmVmIH0gZnJvbSAnLi4vLi4vY2xhc3MvcG9wb3Zlci1yZWYnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJ3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsgJ3BvcG92ZXIuY29tcG9uZW50LnNjc3MnIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEZzUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9ndWlkID0gZ3VpZCgneHh4eHh4eCcpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YTogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsZWF2ZURlbGF5ID0gMTAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93RGVsYXkgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhXaWR0aCA9IDI1MDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgd3JhcHBlckNsYXNzOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9TaG93ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgYXV0b0Nsb3NlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbG9hZGluZ0RpYW1ldGVyID0gMjA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaW5kaWNhdGlvbicpXG4gIHB1YmxpYyBpbmRpY2F0aW9uID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcG9zaXRpb246IFBvc2l0aW9uID0gUG9zaXRpb24uU291dGg7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRoZW1lOiAnbGlnaHQnIHwgJ2RhcmsnID0gJ2xpZ2h0JztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2l6ZTogJ3RpbnknIHwgJ3NtYWxsJyB8ICdub3JtYWwnID0gJ25vcm1hbCc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRyaWdnZXI6ICdjbGljaycgfCAnbW91c2VvdmVyJyA9ICdtb3VzZW92ZXInO1xuXG4gIHByaXZhdGUgX3BvcG92ZXJSZWY6IEZzUG9wb3ZlclJlZjtcbiAgcHJpdmF0ZSBfd3JhcHBlckVsZW1lbnQ6IEVsZW1lbnQ7XG4gIHByaXZhdGUgX2hvc3RCb3VuZHM6IERPTVJlY3Q7XG5cbiAgcHJpdmF0ZSBfbW91c2VFbnRlciQgPSBmcm9tRXZlbnQodGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlZW50ZXInKTtcbiAgcHJpdmF0ZSBfbW91c2VNb3ZlJCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlbW92ZScsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBfbW91c2VMZWF2ZSQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlbGVhdmUnKTtcblxuICBwcml2YXRlIF9wb3BvdmVyQ2xvc2VkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9wb3BvdmVyU2VydmljZTogRnNQb3BvdmVyU2VydmljZSxcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9wZW5UaW1lciQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGltZXIodGhpcy5zaG93RGVsYXkpO1xuICB9XG5cbiAgcHVibGljIGdldCBjbG9zZVRpbWVyJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aW1lcih0aGlzLmxlYXZlRGVsYXkpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3BvcG92ZXJSZWYgPSBuZXcgRnNQb3BvdmVyUmVmKHtcbiAgICAgIG1heFdpZHRoOiB0aGlzLm1heFdpZHRoLFxuICAgICAgd3JhcHBlckNsYXNzOiB0aGlzLndyYXBwZXJDbGFzcyxcbiAgICAgIGF1dG9TaG93OiB0aGlzLmF1dG9TaG93LFxuICAgICAgYXV0b0Nsb3NlOiB0aGlzLmF1dG9DbG9zZSxcbiAgICAgIGxvYWRpbmdEaWFtZXRlcjogdGhpcy5sb2FkaW5nRGlhbWV0ZXIsXG4gICAgICBsb2FkaW5nOiB0aGlzLmxvYWRpbmcsXG4gICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICB0aGVtZTogdGhpcy50aGVtZSxcbiAgICB9KTtcblxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk1vdXNlSG9zdENsaWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9saXN0ZW5Nb3VzZUhvc3RFbnRlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbGlzdGVuUm91dGVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9wb3BvdmVyQ2xvc2VkJC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xvc2VQb3BvdmVyKCkge1xuICAgIHRoaXMuX3BvcG92ZXJDbG9zZWQkLm5leHQoKTtcblxuICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5fd3JhcHBlckVsZW1lbnQgPSBudWxsO1xuXG4gICAgICBpZiAodGhpcy5fcG9wb3ZlclNlcnZpY2UuaGFzQWN0aXZlUG9wb3Zlcikge1xuICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS5jbG9zZSh0aGlzLl9wb3BvdmVyUmVmKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlblJvdXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDtcbiAgICAgICAgfSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKFxuICAgICAgICAgICAgdGhpcy5fZGVzdHJveSRcbiAgICAgICAgICAgICAgLnBpcGUoZGVsYXkoMjAwKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2Nsb3NlUG9wb3ZlcigpO1xuICAgICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3Rlbk1vdXNlSG9zdENsaWNrKCk6IHZvaWQge1xuICAgIGZyb21FdmVudCh0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgdGhpcy5fb3BlblBvcG92ZXIoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9saXN0ZW5Nb3VzZUhvc3RMZWF2ZSQoKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNsb3NlVGltZXIkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jbG9zZVBvcG92ZXIoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuTW91c2VIb3N0RW50ZXIoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0dWFsTW91c2VTdGF0ZSQgPSBtZXJnZShcbiAgICAgIHRoaXMuX21vdXNlTGVhdmUkLnBpcGUobWFwVG8odHJ1ZSkpLFxuICAgICAgdGhpcy5fbW91c2VFbnRlciQucGlwZShtYXBUbyhmYWxzZSkpLFxuICAgIClcbiAgICAucGlwZShcbiAgICAgIHN0YXJ0V2l0aChmYWxzZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICk7XG5cbiAgICB0aGlzLl9tb3VzZUVudGVyJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICF0aGlzLl93cmFwcGVyRWxlbWVudDtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2Uuc2V0QWN0aXZlUG9wb3ZlckdVSUQodGhpcy5fZ3VpZCk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5vcGVuVGltZXIkKSxcbiAgICAgICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0aGF0IGFmdGVyIGFsbCBkZWxheXMgbW91c2Ugc3RpbGwgb3ZlciBhbiBlbGVtZW5cbiAgICAgICAgd2l0aExhdGVzdEZyb20oYWN0dWFsTW91c2VTdGF0ZSQpLFxuICAgICAgICBmaWx0ZXIoKFtfLCBtb3VzZUxlYXZlXSkgPT4ge1xuICAgICAgICAgIHJldHVybiAhbW91c2VMZWF2ZTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9vcGVuUG9wb3ZlcigpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2xpc3Rlbk1vdXNlSG9zdExlYXZlJCgpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2xvc2VUaW1lciQpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fY2xvc2VQb3BvdmVyKCkpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLl9jbG9zZVBvcG92ZXIoKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9vcGVuUG9wb3ZlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnbW91c2VvdmVyJyAmJiB0aGlzLl9wb3BvdmVyU2VydmljZS5hY3RpdmVFbGVtZW50R1VJRCAhPT0gdGhpcy5fZ3VpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2hvc3RCb3VuZHMgPSB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLl93cmFwcGVyRWxlbWVudCA9IHRoaXMuX3BvcG92ZXJTZXJ2aWNlLm9wZW5Qb3BvdmVyKFxuICAgICAgICB0aGlzLl9lbFJlZixcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLl9wb3BvdmVyUmVmLFxuICAgICAgICB0aGlzLnBvc2l0aW9uXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuTW91c2VIb3N0TGVhdmUkKCk6IE9ic2VydmFibGU8TW91c2VFdmVudD4ge1xuICAgIGNvbnN0IG1vdXNlTW92ZSQgPSB0aGlzLl9tb3VzZU1vdmUkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5fd3JhcHBlckVsZW1lbnQpLFxuICAgICAgICBmaWx0ZXIoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3BvcG92ZXJSZWYuYXV0b0Nsb3NlICYmIHRoaXMuX21vdXNlTGVmdFRoZVRhcmdldHMoZXZlbnQpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICBjb25zdCBtb3VzZUNsaWNrJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snKTtcblxuICAgIHJldHVybiBtZXJnZShcbiAgICAgIG1vdXNlTW92ZSQsXG4gICAgICBtb3VzZUNsaWNrJCxcbiAgICApO1xuICAgIC8vXG4gICAgLy8gcmV0dXJuIHRoaXMuX21vdXNlTGVhdmUkXG4gICAgLy8gICAucGlwZShcbiAgICAvLyAgICAgLy9cbiAgICAvLyAgICAgdGltZW91dFdpdGgoMjAwLCBtb3VzZU1vdmUkKSxcbiAgICAvLyAgICk7XG4gIH1cblxuICAvLyBDaGVjayBpZiBtb3VzZSBsZWZ0IHRhcmdldCBvciBwb3BvdmVyIHJlY3RzXG4gIHByaXZhdGUgX21vdXNlTGVmdFRoZVRhcmdldHMoZXZlbnQ6IE1vdXNlRXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBob3N0Qm91bmRzID0gdGhpcy5faG9zdEJvdW5kcztcbiAgICBjb25zdCBwb3BvdmVyQm91bmRzID0gdGhpcy5fd3JhcHBlckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCBwb2ludEluSG9zdFJlY3QgPSBwb2ludEluUmVjdChcbiAgICAgIGhvc3RCb3VuZHMueCxcbiAgICAgIGhvc3RCb3VuZHMueSxcbiAgICAgIGhvc3RCb3VuZHMueCArIGhvc3RCb3VuZHMud2lkdGgsXG4gICAgICBob3N0Qm91bmRzLnkgKyBob3N0Qm91bmRzLmhlaWdodCxcbiAgICAgIGV2ZW50LngsXG4gICAgICBldmVudC55XG4gICAgKTtcblxuICAgIGNvbnN0IHBvaW50SW5Qb3BvdmVyUmVjdCA9IHBvaW50SW5SZWN0KFxuICAgICAgcG9wb3ZlckJvdW5kcy54LFxuICAgICAgcG9wb3ZlckJvdW5kcy55LFxuICAgICAgcG9wb3ZlckJvdW5kcy54ICsgcG9wb3ZlckJvdW5kcy53aWR0aCxcbiAgICAgIHBvcG92ZXJCb3VuZHMueSArIHBvcG92ZXJCb3VuZHMuaGVpZ2h0LFxuICAgICAgZXZlbnQueCxcbiAgICAgIGV2ZW50LnlcbiAgICApO1xuXG4gICAgcmV0dXJuICFwb2ludEluSG9zdFJlY3QgJiYgIXBvaW50SW5Qb3BvdmVyUmVjdDtcbiAgfVxufVxuIiwiPHNwYW4gY2xhc3M9XCJwb3BvdmVyLWNvbnRhaW5lclwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L3NwYW4+XG4iXX0=
|