@tft/interact 14.0.0 → 15.1.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 (53) hide show
  1. package/{esm2020 → esm2022}/index.mjs +5 -5
  2. package/{esm2020 → esm2022}/lib/directives/account-for-scale.directive.mjs +26 -26
  3. package/{esm2020 → esm2022}/lib/directives/apply-scale.directive.mjs +28 -28
  4. package/esm2022/lib/directives/auto-scroll.directive.mjs +56 -0
  5. package/{esm2020 → esm2022}/lib/directives/drag-preview.directive.mjs +20 -20
  6. package/{esm2020 → esm2022}/lib/directives/drag-root.directive.mjs +32 -32
  7. package/esm2022/lib/directives/draggable.directive.mjs +320 -0
  8. package/esm2022/lib/directives/dropzone.directive.mjs +114 -0
  9. package/esm2022/lib/directives/gesturable.directive.mjs +82 -0
  10. package/{esm2020 → esm2022}/lib/directives/index.mjs +9 -9
  11. package/esm2022/lib/directives/resizable.directive.mjs +228 -0
  12. package/{esm2020 → esm2022}/lib/interact.module.mjs +66 -66
  13. package/{esm2020 → esm2022}/lib/models/index.mjs +1 -1
  14. package/{esm2020 → esm2022}/lib/models/interact.mjs +27 -27
  15. package/{esm2020 → esm2022}/lib/pipes/array-of-n.pipe.mjs +22 -22
  16. package/{esm2020 → esm2022}/lib/pipes/index.mjs +1 -1
  17. package/esm2022/lib/services/interact.service.mjs +197 -0
  18. package/esm2022/lib/utils/helpers.mjs +35 -0
  19. package/{esm2020 → esm2022}/lib/utils/index.mjs +1 -1
  20. package/{esm2020 → esm2022}/tft-interact.mjs +4 -4
  21. package/{fesm2020 → fesm2022}/tft-interact.mjs +1155 -1155
  22. package/{fesm2020 → fesm2022}/tft-interact.mjs.map +1 -1
  23. package/index.d.ts +5 -5
  24. package/lib/directives/account-for-scale.directive.d.ts +15 -15
  25. package/lib/directives/apply-scale.directive.d.ts +11 -11
  26. package/lib/directives/auto-scroll.directive.d.ts +34 -34
  27. package/lib/directives/drag-preview.directive.d.ts +10 -10
  28. package/lib/directives/drag-root.directive.d.ts +15 -15
  29. package/lib/directives/draggable.directive.d.ts +76 -76
  30. package/lib/directives/dropzone.directive.d.ts +40 -40
  31. package/lib/directives/gesturable.directive.d.ts +27 -27
  32. package/lib/directives/index.d.ts +9 -9
  33. package/lib/directives/resizable.directive.d.ts +61 -61
  34. package/lib/interact.module.d.ts +20 -20
  35. package/lib/models/index.d.ts +1 -1
  36. package/lib/models/interact.d.ts +140 -140
  37. package/lib/pipes/array-of-n.pipe.d.ts +12 -12
  38. package/lib/pipes/index.d.ts +1 -1
  39. package/lib/services/interact.service.d.ts +83 -83
  40. package/lib/utils/helpers.d.ts +12 -12
  41. package/lib/utils/index.d.ts +1 -1
  42. package/package.json +7 -15
  43. package/tft-interact-15.1.0.tgz +0 -0
  44. package/esm2020/lib/directives/auto-scroll.directive.mjs +0 -56
  45. package/esm2020/lib/directives/draggable.directive.mjs +0 -320
  46. package/esm2020/lib/directives/dropzone.directive.mjs +0 -114
  47. package/esm2020/lib/directives/gesturable.directive.mjs +0 -82
  48. package/esm2020/lib/directives/resizable.directive.mjs +0 -228
  49. package/esm2020/lib/services/interact.service.mjs +0 -197
  50. package/esm2020/lib/utils/helpers.mjs +0 -35
  51. package/fesm2015/tft-interact.mjs +0 -1203
  52. package/fesm2015/tft-interact.mjs.map +0 -1
  53. package/tft-interact-14.0.0.tgz +0 -0
@@ -1,228 +0,0 @@
1
- import { Directive, ElementRef, Input, Optional, SkipSelf, Output, EventEmitter, Renderer2, Inject } from '@angular/core';
2
- import { DOCUMENT } from '@angular/common';
3
- import interact from 'interactjs';
4
- import { InteractService } from '../services/interact.service';
5
- import { DraggableDirective } from './draggable.directive';
6
- import { DropzoneDirective } from './dropzone.directive';
7
- import { DragRootDirective } from './drag-root.directive';
8
- import { AccountForScaleDirective } from './account-for-scale.directive';
9
- import { DEFAULT_REGISTRY_ID } from '../models';
10
- import { AutoScrollDirective } from './auto-scroll.directive';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "../services/interact.service";
13
- import * as i2 from "./drag-root.directive";
14
- import * as i3 from "./account-for-scale.directive";
15
- import * as i4 from "./draggable.directive";
16
- import * as i5 from "./dropzone.directive";
17
- import * as i6 from "./auto-scroll.directive";
18
- /** @dynamic */
19
- export class ResizableDirective {
20
- constructor(el, _document, interactService, renderer, drag_root_dir, account_for_scale_dir, draggable_dir, dropzone_dir, auto_scroll_dir) {
21
- this.el = el;
22
- this._document = _document;
23
- this.interactService = interactService;
24
- this.renderer = renderer;
25
- this.drag_root_dir = drag_root_dir;
26
- this.account_for_scale_dir = account_for_scale_dir;
27
- this.draggable_dir = draggable_dir;
28
- this.dropzone_dir = dropzone_dir;
29
- this.auto_scroll_dir = auto_scroll_dir;
30
- this.enableResizeDefault = true;
31
- // TODO: should this be an input with default or should consuming user set display in styles each time
32
- this.position = 'absolute';
33
- this.resizeDisabled = false;
34
- this.resizeStart = new EventEmitter();
35
- this.resizeMove = new EventEmitter();
36
- this.resizeInertiaStart = new EventEmitter();
37
- this.resizeEnd = new EventEmitter();
38
- this.defaultConfig = {
39
- edges: { left: true, right: true, bottom: true, top: true }
40
- };
41
- this.activeEdges = { left: false, right: false, top: false, bottom: false };
42
- this.dragRootEl = drag_root_dir?.el?.nativeElement || this._document.body;
43
- }
44
- get scale() {
45
- return this.account_for_scale_dir?.scale || this.drag_root_dir?.account_for_scale_dir?.scale;
46
- }
47
- ngOnInit() {
48
- this.addResizePropertiesToElement(this.el.nativeElement);
49
- // we check for a dropzone, we use its id as the registry id if there is on
50
- // otherwise, we use DEFAULT_REGISTRY_ID as a registry id. This allows us to keep our interactable
51
- // drag state organized by dropzones.
52
- this.registryId = this.dropzone_dir?.dropzoneId || DEFAULT_REGISTRY_ID;
53
- this.interactableId = this.draggable_dir?.interactableId || this.interactService.addDraggableToRegistry(this.registryId, this.interactableId);
54
- this.interactable = this.initiateResizeEvents({ ...this.defaultConfig, ...this.resizeConfig }, this.el.nativeElement);
55
- this.alignDimensionsWithInputs(this.width, this.height);
56
- this.interactableSubscription = this.interactService
57
- .getInteractableState(this.interactableId, this.registryId)
58
- .subscribe();
59
- }
60
- ngOnChanges(changes) {
61
- if ((changes.resizeConfig || changes.resizeDisabled) && this.interactable) {
62
- this.interactable.resizable({ ...this.resizeConfig, enabled: !this.resizeDisabled, });
63
- }
64
- if (changes.width || changes.height) {
65
- this.alignDimensionsWithInputs(this.width, this.height);
66
- }
67
- }
68
- ngOnDestroy() {
69
- this.interactableSubscription.unsubscribe();
70
- this.interactService.destroyInteractable(this.interactableId, this.registryId);
71
- }
72
- resizeListener(event) {
73
- const element = this.el.nativeElement;
74
- const scale = this.scale;
75
- const { deltaRect } = event;
76
- const deltaX = deltaRect.left / scale;
77
- const deltaY = deltaRect.top / scale;
78
- // We get the width and height directly from the native element because
79
- // the event dimension can get out of sync when resizing with autoScroll
80
- const rect = element.getBoundingClientRect();
81
- const width = (rect.width + deltaRect.width) / scale;
82
- const height = (rect.height + deltaRect.height) / scale;
83
- this.interactService.updateSize(this.interactableId, this.registryId, { deltaX, deltaY, width, height }, this.el.nativeElement);
84
- }
85
- /**
86
- * hook elements into interacts resize event listeners
87
- * we spread the configs so that the consuming component only overwrites the
88
- * pieces that it explicitly indicates
89
- * @param resizeConfig
90
- * @param nativeElement
91
- */
92
- initiateResizeEvents(resizeConfig, nativeElement) {
93
- // TODO: This should try and get interactable from tft_draggable if it exists
94
- const defaultResizeConfig = {
95
- ...resizeConfig,
96
- enabled: !this.resizeDisabled,
97
- ...(this.auto_scroll_dir && {
98
- autoScroll: {
99
- ...this.auto_scroll_dir.autoScrollConfig,
100
- container: this.auto_scroll_dir.el.nativeElement
101
- }
102
- })
103
- };
104
- const interactable = this.draggable_dir?.interactable || interact(nativeElement);
105
- return interactable.resizable(defaultResizeConfig)
106
- .on('resizestart', (event) => {
107
- this.activeEdges = event.edges;
108
- if (this.auto_scroll_dir) {
109
- this.subscribeToScrollEvents();
110
- }
111
- this.resizeStart.emit(this.mapResizeEvent(event));
112
- })
113
- .on('resizemove', (event) => {
114
- if (this.enableResizeDefault) {
115
- this.resizeListener(event);
116
- }
117
- const mappedEvent = this.mapResizeEvent(event);
118
- this.resizeMove.emit(mappedEvent);
119
- })
120
- .on('resizeinertiastart', (event) => this.resizeInertiaStart.emit(this.mapResizeEvent(event)))
121
- .on('resizeend', (event) => {
122
- if (this.auto_scroll_dir) {
123
- this.scrollEventsSubscription.unsubscribe();
124
- }
125
- this.activeEdges = { left: false, right: false, top: false, bottom: false };
126
- this.resizeEnd.emit(this.mapResizeEvent(event));
127
- });
128
- }
129
- mapResizeEvent(event) {
130
- const target = this.el.nativeElement;
131
- const relatedTarget = this.draggable_dir?.dropzone_dir?.el.nativeElement;
132
- const scale = this.scale;
133
- const positionInDropTarget = target && relatedTarget
134
- ? this.interactService.calculatePositionInElement(relatedTarget, target, scale)
135
- : null;
136
- return {
137
- interactEvent: event,
138
- resizeRef: this,
139
- dragRef: this.draggable_dir,
140
- dragOrigin: this.dropzone_dir,
141
- dropTarget: this.el.nativeElement.dropTarget,
142
- positionInDropTarget,
143
- size: {
144
- width: target.clientWidth / scale,
145
- height: target.clientHeight / scale
146
- }
147
- };
148
- }
149
- alignDimensionsWithInputs(width, height) {
150
- this.interactService.updateSize(this.interactableId, this.registryId, { deltaX: 0, deltaY: 0, width, height }, this.el.nativeElement);
151
- }
152
- addResizePropertiesToElement(nativeElement) {
153
- this.renderer.setProperty(nativeElement, 'resizeRef', this);
154
- }
155
- subscribeToScrollEvents() {
156
- this.scrollEventsSubscription = this.auto_scroll_dir.scrollDeltaObserver.subscribe(({ scrollLeft, scrollTop }) => {
157
- const scale = this.scale;
158
- const target = this.el.nativeElement;
159
- const { width: prevWidth, height: prevHeight } = target.getBoundingClientRect();
160
- const deltaHeight = scrollTop * (this.activeEdges.top ? -1 : this.activeEdges.bottom ? 1 : 0);
161
- const deltaWidth = scrollLeft * (this.activeEdges.left ? -1 : this.activeEdges.right ? 1 : 0);
162
- const height = (prevHeight + deltaHeight) / scale;
163
- const width = (prevWidth + deltaWidth) / scale;
164
- const deltaX = this.activeEdges.left ? (scrollLeft / scale) : 0;
165
- const deltaY = this.activeEdges.top ? (scrollTop / scale) : 0;
166
- this.interactService.updateSize(this.interactableId, this.registryId, { deltaX, deltaY, width, height }, this.el.nativeElement);
167
- });
168
- }
169
- }
170
- ResizableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: ResizableDirective, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }, { token: i1.InteractService }, { token: i0.Renderer2 }, { token: i2.DragRootDirective, optional: true }, { token: i3.AccountForScaleDirective, optional: true }, { token: i4.DraggableDirective, optional: true }, { token: i5.DropzoneDirective, optional: true, skipSelf: true }, { token: i6.AutoScrollDirective, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive });
171
- ResizableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.1", type: ResizableDirective, selector: "[tftResizable]", inputs: { enableResizeDefault: "enableResizeDefault", position: "position", resizeConfig: "resizeConfig", interactableId: "interactableId", width: "width", height: "height", resizeDisabled: "resizeDisabled" }, outputs: { resizeStart: "resizeStart", resizeMove: "resizeMove", resizeInertiaStart: "resizeInertiaStart", resizeEnd: "resizeEnd" }, host: { properties: { "style.touchAction": "this.resizeDisabled ? \"auto\" : \"none\"", "style.position": "position", "style.boxSizing": "\"border-box\"" } }, usesOnChanges: true, ngImport: i0 });
172
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: ResizableDirective, decorators: [{
173
- type: Directive,
174
- args: [{
175
- selector: '[tftResizable]',
176
- // eslint-disable-next-line @angular-eslint/no-host-metadata-property
177
- host: {
178
- // prevents touch events from colliding with with mouse events
179
- // on touch screen
180
- '[style.touchAction]': 'this.resizeDisabled ? "auto" : "none"',
181
- // default to absolute here to accommodate likely use cases
182
- // consuming component can easily over ride with position input
183
- '[style.position]': 'position',
184
- // follows interactjs suggested practices
185
- '[style.boxSizing]': '"border-box"',
186
- }
187
- }]
188
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Document, decorators: [{
189
- type: Inject,
190
- args: [DOCUMENT]
191
- }] }, { type: i1.InteractService }, { type: i0.Renderer2 }, { type: i2.DragRootDirective, decorators: [{
192
- type: Optional
193
- }] }, { type: i3.AccountForScaleDirective, decorators: [{
194
- type: Optional
195
- }] }, { type: i4.DraggableDirective, decorators: [{
196
- type: Optional
197
- }] }, { type: i5.DropzoneDirective, decorators: [{
198
- type: Optional
199
- }, {
200
- type: SkipSelf
201
- }] }, { type: i6.AutoScrollDirective, decorators: [{
202
- type: Optional
203
- }, {
204
- type: SkipSelf
205
- }] }]; }, propDecorators: { enableResizeDefault: [{
206
- type: Input
207
- }], position: [{
208
- type: Input
209
- }], resizeConfig: [{
210
- type: Input
211
- }], interactableId: [{
212
- type: Input
213
- }], width: [{
214
- type: Input
215
- }], height: [{
216
- type: Input
217
- }], resizeDisabled: [{
218
- type: Input
219
- }], resizeStart: [{
220
- type: Output
221
- }], resizeMove: [{
222
- type: Output
223
- }], resizeInertiaStart: [{
224
- type: Output
225
- }], resizeEnd: [{
226
- type: Output
227
- }] } });
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvaW50ZXJhY3Qvc3JjL2xpYi9kaXJlY3RpdmVzL3Jlc2l6YWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEssT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sUUFBUSxNQUFNLFlBQVksQ0FBQztBQUNsQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFpQyxtQkFBbUIsRUFBa0IsTUFBTSxXQUFXLENBQUM7QUFDL0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7O0FBUTlELGVBQWU7QUFnQmYsTUFBTSxPQUFPLGtCQUFrQjtJQWlDN0IsWUFDUyxFQUFjLEVBQ0ssU0FBbUIsRUFDckMsZUFBZ0MsRUFDaEMsUUFBbUIsRUFDUCxhQUFpQyxFQUNsQyxxQkFBZ0QsRUFDL0MsYUFBa0MsRUFDdEIsWUFBZ0MsRUFDakMsZUFBcUM7UUFSN0QsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNLLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDckMsb0JBQWUsR0FB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R0FuQ1Asa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBZjlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIscUVBQXFFO29CQUNyRSxJQUFJLEVBQUU7d0JBQ0osOERBQThEO3dCQUM5RCxrQkFBa0I7d0JBQ2xCLHFCQUFxQixFQUFFLHVDQUF1Qzt3QkFDOUQsMkRBQTJEO3dCQUMzRCwrREFBK0Q7d0JBQy9ELGtCQUFrQixFQUFFLFVBQVU7d0JBQzlCLHlDQUF5Qzt3QkFDekMsbUJBQW1CLEVBQUUsY0FBYztxQkFFcEM7aUJBQ0Y7bUZBb0N3QyxRQUFROzBCQUE1QyxNQUFNOzJCQUFDLFFBQVE7OzBCQUdmLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUFJLFFBQVE7OzBCQUNwQixRQUFROzswQkFBSSxRQUFROzRDQXhDZCxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT25Jbml0LCBPbkRlc3Ryb3ksIEVsZW1lbnRSZWYsIElucHV0LCBPcHRpb25hbCwgU2tpcFNlbGYsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFJlbmRlcmVyMiwgSW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCBpbnRlcmFjdCBmcm9tICdpbnRlcmFjdGpzJztcbmltcG9ydCB7IEludGVyYWN0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ludGVyYWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzaXphYmxlT3B0aW9ucywgUmVzaXplRXZlbnQsIEludGVyYWN0YWJsZSB9IGZyb20gJ0BpbnRlcmFjdGpzL3R5cGVzL2luZGV4JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kcmFnZ2FibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IERyb3B6b25lRGlyZWN0aXZlIH0gZnJvbSAnLi9kcm9wem9uZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJhZ1Jvb3REaXJlY3RpdmUgfSBmcm9tICcuL2RyYWctcm9vdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQWNjb3VudEZvclNjYWxlRGlyZWN0aXZlIH0gZnJvbSAnLi9hY2NvdW50LWZvci1zY2FsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmdSZXNpemVFdmVudCwgVGZ0UmVzaXplRXZlbnQsIERFRkFVTFRfUkVHSVNUUllfSUQsIFRmdERyYWdFbGVtZW50IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEF1dG9TY3JvbGxEaXJlY3RpdmUgfSBmcm9tICcuL2F1dG8tc2Nyb2xsLmRpcmVjdGl2ZSc7XG5cbmludGVyZmFjZSBBY3RpdmVFZGdlcyB7XG4gIHRvcDogYm9vbGVhbjtcbiAgYm90dG9tOiBib29sZWFuO1xuICBsZWZ0OiBib29sZWFuO1xuICByaWdodDogYm9vbGVhbjtcbn1cbi8qKiBAZHluYW1pYyAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3RmdFJlc2l6YWJsZV0nLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcbiAgaG9zdDoge1xuICAgIC8vIHByZXZlbnRzIHRvdWNoIGV2ZW50cyBmcm9tIGNvbGxpZGluZyB3aXRoIHdpdGggbW91c2UgZXZlbnRzXG4gICAgLy8gb24gdG91Y2ggc2NyZWVuXG4gICAgJ1tzdHlsZS50b3VjaEFjdGlvbl0nOiAndGhpcy5yZXNpemVEaXNhYmxlZCA/IFwiYXV0b1wiIDogXCJub25lXCInLFxuICAgIC8vIGRlZmF1bHQgdG8gYWJzb2x1dGUgaGVyZSB0byBhY2NvbW1vZGF0ZSBsaWtlbHkgdXNlIGNhc2VzXG4gICAgLy8gY29uc3VtaW5nIGNvbXBvbmVudCBjYW4gZWFzaWx5IG92ZXIgcmlkZSB3aXRoIHBvc2l0aW9uIGlucHV0XG4gICAgJ1tzdHlsZS5wb3NpdGlvbl0nOiAncG9zaXRpb24nLFxuICAgIC8vIGZvbGxvd3MgaW50ZXJhY3RqcyBzdWdnZXN0ZWQgcHJhY3RpY2VzXG4gICAgJ1tzdHlsZS5ib3hTaXppbmddJzogJ1wiYm9yZGVyLWJveFwiJyxcblxuICB9XG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpIGVuYWJsZVJlc2l6ZURlZmF1bHQgPSB0cnVlO1xuICAvLyBUT0RPOiBzaG91bGQgdGhpcyBiZSBhbiBpbnB1dCB3aXRoIGRlZmF1bHQgb3Igc2hvdWxkIGNvbnN1bWluZyB1c2VyIHNldCBkaXNwbGF5IGluIHN0eWxlcyBlYWNoIHRpbWVcbiAgQElucHV0KCkgcG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICBASW5wdXQoKSByZXNpemVDb25maWc6IFBhcnRpYWw8SW50ZXJhY3QuT3JCb29sZWFuPFJlc2l6YWJsZU9wdGlvbnM+PjtcbiAgQElucHV0KCkgaW50ZXJhY3RhYmxlSWQ6IHN0cmluZztcblxuICBASW5wdXQoKSB3aWR0aDogbnVtYmVyO1xuICBASW5wdXQoKSBoZWlnaHQ6IG51bWJlcjtcbiAgQElucHV0KCkgcmVzaXplRGlzYWJsZWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgcmVzaXplU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPFRmdFJlc2l6ZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgcmVzaXplTW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGZ0UmVzaXplRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSByZXNpemVJbmVydGlhU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPFRmdFJlc2l6ZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgcmVzaXplRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxUZnRSZXNpemVFdmVudD4oKTtcblxuICBkZWZhdWx0Q29uZmlnOiBQYXJ0aWFsPEludGVyYWN0Lk9yQm9vbGVhbjxSZXNpemFibGVPcHRpb25zPj4gPSB7XG4gICAgZWRnZXM6IHsgbGVmdDogdHJ1ZSwgcmlnaHQ6IHRydWUsIGJvdHRvbTogdHJ1ZSwgdG9wOiB0cnVlIH1cbiAgfTtcbiAgcmVnaXN0cnlJZDogc3RyaW5nO1xuICBpbnRlcmFjdGFibGU6IEludGVyYWN0YWJsZTtcbiAgLy8gVGhlXG4gIGRyYWdSb290RWw6IEhUTUxFbGVtZW50O1xuXG4gIHByaXZhdGUgYWN0aXZlRWRnZXM6IEFjdGl2ZUVkZ2VzID0ge2xlZnQ6IGZhbHNlLCByaWdodDogZmFsc2UsIHRvcDogZmFsc2UsIGJvdHRvbTogZmFsc2V9XG4gIHByaXZhdGUgaW50ZXJhY3RhYmxlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc2Nyb2xsRXZlbnRzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IHNjYWxlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3VudF9mb3Jfc2NhbGVfZGlyPy5zY2FsZSB8fCB0aGlzLmRyYWdfcm9vdF9kaXI/LmFjY291bnRfZm9yX3NjYWxlX2Rpcj8uc2NhbGU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIHByaXZhdGUgaW50ZXJhY3RTZXJ2aWNlOiBJbnRlcmFjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZHJhZ19yb290X2Rpcj86IERyYWdSb290RGlyZWN0aXZlLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBhY2NvdW50X2Zvcl9zY2FsZV9kaXI/OiBBY2NvdW50Rm9yU2NhbGVEaXJlY3RpdmUsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkcmFnZ2FibGVfZGlyPzogRHJhZ2dhYmxlRGlyZWN0aXZlLFxuICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHByaXZhdGUgZHJvcHpvbmVfZGlyPzogRHJvcHpvbmVEaXJlY3RpdmUsXG4gICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcHVibGljIGF1dG9fc2Nyb2xsX2Rpcj86IEF1dG9TY3JvbGxEaXJlY3RpdmVcblxuXG4gICkge1xuICAgIHRoaXMuZHJhZ1Jvb3RFbCA9IChkcmFnX3Jvb3RfZGlyPy5lbD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkgfHwgdGhpcy5fZG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYWRkUmVzaXplUHJvcGVydGllc1RvRWxlbWVudCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgLy8gd2UgY2hlY2sgZm9yIGEgZHJvcHpvbmUsIHdlIHVzZSBpdHMgaWQgYXMgdGhlIHJlZ2lzdHJ5IGlkIGlmIHRoZXJlIGlzIG9uXG4gICAgLy8gb3RoZXJ3aXNlLCB3ZSB1c2UgREVGQVVMVF9SRUdJU1RSWV9JRCBhcyBhIHJlZ2lzdHJ5IGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIG91ciBpbnRlcmFjdGFibGVcbiAgICAvLyBkcmFnIHN0YXRlIG9yZ2FuaXplZCBieSBkcm9wem9uZXMuXG4gICAgdGhpcy5yZWdpc3RyeUlkID0gdGhpcy5kcm9wem9uZV9kaXI/LmRyb3B6b25lSWQgfHwgREVGQVVMVF9SRUdJU1RSWV9JRDtcblxuICAgIHRoaXMuaW50ZXJhY3RhYmxlSWQgPSB0aGlzLmRyYWdnYWJsZV9kaXI/LmludGVyYWN0YWJsZUlkIHx8IHRoaXMuaW50ZXJhY3RTZXJ2aWNlLmFkZERyYWdnYWJsZVRvUmVnaXN0cnkodGhpcy5yZWdpc3RyeUlkLCB0aGlzLmludGVyYWN0YWJsZUlkKTtcblxuICAgIHRoaXMuaW50ZXJhY3RhYmxlID0gdGhpcy5pbml0aWF0ZVJlc2l6ZUV2ZW50cyhcbiAgICAgIHsuLi50aGlzLmRlZmF1bHRDb25maWcsIC4uLnRoaXMucmVzaXplQ29uZmlnIH0sXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuXG4gICAgdGhpcy5hbGlnbkRpbWVuc2lvbnNXaXRoSW5wdXRzKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuaW50ZXJhY3RhYmxlU3Vic2NyaXB0aW9uID0gdGhpcy5pbnRlcmFjdFNlcnZpY2VcbiAgICAgIC5nZXRJbnRlcmFjdGFibGVTdGF0ZSh0aGlzLmludGVyYWN0YWJsZUlkLCB0aGlzLnJlZ2lzdHJ5SWQpXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKChjaGFuZ2VzLnJlc2l6ZUNvbmZpZyB8fCBjaGFuZ2VzLnJlc2l6ZURpc2FibGVkKSAmJiB0aGlzLmludGVyYWN0YWJsZSkge1xuICAgICAgdGhpcy5pbnRlcmFjdGFibGUucmVzaXphYmxlKHsuLi50aGlzLnJlc2l6ZUNvbmZpZywgZW5hYmxlZDogIXRoaXMucmVzaXplRGlzYWJsZWQsfSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLndpZHRoIHx8IGNoYW5nZXMuaGVpZ2h0KSB7XG4gICAgICB0aGlzLmFsaWduRGltZW5zaW9uc1dpdGhJbnB1dHModGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuaW50ZXJhY3RhYmxlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbnRlcmFjdFNlcnZpY2UuZGVzdHJveUludGVyYWN0YWJsZSh0aGlzLmludGVyYWN0YWJsZUlkLCB0aGlzLnJlZ2lzdHJ5SWQpO1xuICB9XG5cbiAgcmVzaXplTGlzdGVuZXIoZXZlbnQ6IFJlc2l6ZUV2ZW50KSB7XG4gICAgY29uc3QgZWxlbWVudDogVGZ0RHJhZ0VsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgc2NhbGUgPSB0aGlzLnNjYWxlO1xuICAgIGNvbnN0IHtkZWx0YVJlY3R9ID0gZXZlbnQ7XG4gICAgY29uc3QgZGVsdGFYID0gZGVsdGFSZWN0LmxlZnQvc2NhbGU7XG4gICAgY29uc3QgZGVsdGFZID0gZGVsdGFSZWN0LnRvcC9zY2FsZTtcbiAgICAvLyBXZSBnZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgZGlyZWN0bHkgZnJvbSB0aGUgbmF0aXZlIGVsZW1lbnQgYmVjYXVzZVxuICAgIC8vIHRoZSBldmVudCBkaW1lbnNpb24gY2FuIGdldCBvdXQgb2Ygc3luYyB3aGVuIHJlc2l6aW5nIHdpdGggYXV0b1Njcm9sbFxuICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdpZHRoID0gKHJlY3Qud2lkdGggKyBkZWx0YVJlY3Qud2lkdGgpL3NjYWxlO1xuICAgIGNvbnN0IGhlaWdodCA9IChyZWN0LmhlaWdodCArIGRlbHRhUmVjdC5oZWlnaHQpL3NjYWxlO1xuXG4gICAgdGhpcy5pbnRlcmFjdFNlcnZpY2UudXBkYXRlU2l6ZShcbiAgICAgIHRoaXMuaW50ZXJhY3RhYmxlSWQsXG4gICAgICB0aGlzLnJlZ2lzdHJ5SWQsXG4gICAgICB7ZGVsdGFYLCBkZWx0YVksIHdpZHRoLCBoZWlnaHR9LFxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogIGhvb2sgZWxlbWVudHMgaW50byBpbnRlcmFjdHMgcmVzaXplIGV2ZW50IGxpc3RlbmVyc1xuICAgKiAgd2Ugc3ByZWFkIHRoZSBjb25maWdzIHNvIHRoYXQgdGhlIGNvbnN1bWluZyBjb21wb25lbnQgb25seSBvdmVyd3JpdGVzIHRoZVxuICAgKiAgcGllY2VzIHRoYXQgaXQgZXhwbGljaXRseSBpbmRpY2F0ZXNcbiAgICogQHBhcmFtIHJlc2l6ZUNvbmZpZ1xuICAgKiBAcGFyYW0gbmF0aXZlRWxlbWVudFxuICAgKi9cbiAgaW5pdGlhdGVSZXNpemVFdmVudHMocmVzaXplQ29uZmlnOiBQYXJ0aWFsPEludGVyYWN0Lk9yQm9vbGVhbjxSZXNpemFibGVPcHRpb25zPj4sIG5hdGl2ZUVsZW1lbnQ6IFRmdERyYWdFbGVtZW50KSB7XG4gICAgLy8gVE9ETzogVGhpcyBzaG91bGQgdHJ5IGFuZCBnZXQgaW50ZXJhY3RhYmxlIGZyb20gdGZ0X2RyYWdnYWJsZSBpZiBpdCBleGlzdHNcbiAgICBjb25zdCBkZWZhdWx0UmVzaXplQ29uZmlnID0ge1xuICAgICAgLi4ucmVzaXplQ29uZmlnLFxuICAgICAgZW5hYmxlZDogIXRoaXMucmVzaXplRGlzYWJsZWQsXG4gICAgICAuLi4odGhpcy5hdXRvX3Njcm9sbF9kaXIgJiYge1xuICAgICAgICBhdXRvU2Nyb2xsOiB7XG4gICAgICAgICAgLi4udGhpcy5hdXRvX3Njcm9sbF9kaXIuYXV0b1Njcm9sbENvbmZpZyxcbiAgICAgICAgICBjb250YWluZXI6IHRoaXMuYXV0b19zY3JvbGxfZGlyLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9O1xuICAgIGNvbnN0IGludGVyYWN0YWJsZSA9IHRoaXMuZHJhZ2dhYmxlX2Rpcj8uaW50ZXJhY3RhYmxlIHx8IGludGVyYWN0KG5hdGl2ZUVsZW1lbnQpO1xuICAgIHJldHVybiBpbnRlcmFjdGFibGUucmVzaXphYmxlKGRlZmF1bHRSZXNpemVDb25maWcpXG4gICAgICAub24oJ3Jlc2l6ZXN0YXJ0JywgKGV2ZW50OiBOZ1Jlc2l6ZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlRWRnZXMgPSBldmVudC5lZGdlcyBhcyBBY3RpdmVFZGdlcztcbiAgICAgICAgaWYgKHRoaXMuYXV0b19zY3JvbGxfZGlyKSB7XG4gICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1Njcm9sbEV2ZW50cygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzaXplU3RhcnQuZW1pdCh0aGlzLm1hcFJlc2l6ZUV2ZW50KGV2ZW50KSlcbiAgICAgIH0pXG4gICAgICAub24oJ3Jlc2l6ZW1vdmUnLCAgKGV2ZW50OiBOZ1Jlc2l6ZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVJlc2l6ZURlZmF1bHQpIHtcbiAgICAgICAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyKGV2ZW50KVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hcHBlZEV2ZW50ID0gdGhpcy5tYXBSZXNpemVFdmVudChldmVudCk7XG4gICAgICAgIHRoaXMucmVzaXplTW92ZS5lbWl0KG1hcHBlZEV2ZW50KVxuICAgICAgfSlcbiAgICAgIC5vbigncmVzaXplaW5lcnRpYXN0YXJ0JywgKGV2ZW50OiBOZ1Jlc2l6ZUV2ZW50KSA9PiB0aGlzLnJlc2l6ZUluZXJ0aWFTdGFydC5lbWl0KHRoaXMubWFwUmVzaXplRXZlbnQoZXZlbnQpKSlcbiAgICAgIC5vbigncmVzaXplZW5kJywgKGV2ZW50OiBOZ1Jlc2l6ZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmF1dG9fc2Nyb2xsX2Rpcikge1xuICAgICAgICAgIHRoaXMuc2Nyb2xsRXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVFZGdlcyA9IHtsZWZ0OiBmYWxzZSwgcmlnaHQ6IGZhbHNlLCB0b3A6IGZhbHNlLCBib3R0b206IGZhbHNlfVxuXG4gICAgICAgIHRoaXMucmVzaXplRW5kLmVtaXQodGhpcy5tYXBSZXNpemVFdmVudChldmVudCkpO1xuICAgICAgfSk7XG4gIH1cblxuICBtYXBSZXNpemVFdmVudChldmVudDogTmdSZXNpemVFdmVudCApOiBUZnRSZXNpemVFdmVudCB7XG4gICAgY29uc3QgdGFyZ2V0ICA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBUZnREcmFnRWxlbWVudDtcbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gdGhpcy5kcmFnZ2FibGVfZGlyPy5kcm9wem9uZV9kaXI/LmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgc2NhbGUgPSB0aGlzLnNjYWxlO1xuICAgIGNvbnN0IHBvc2l0aW9uSW5Ecm9wVGFyZ2V0ID0gdGFyZ2V0ICYmIHJlbGF0ZWRUYXJnZXRcbiAgICAgID8gdGhpcy5pbnRlcmFjdFNlcnZpY2UuY2FsY3VsYXRlUG9zaXRpb25JbkVsZW1lbnQocmVsYXRlZFRhcmdldCwgdGFyZ2V0LCBzY2FsZSlcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgaW50ZXJhY3RFdmVudDogZXZlbnQsXG4gICAgICByZXNpemVSZWY6IHRoaXMsXG4gICAgICBkcmFnUmVmOiB0aGlzLmRyYWdnYWJsZV9kaXIsXG4gICAgICBkcmFnT3JpZ2luOiB0aGlzLmRyb3B6b25lX2RpcixcbiAgICAgIGRyb3BUYXJnZXQ6IHRoaXMuZWwubmF0aXZlRWxlbWVudC5kcm9wVGFyZ2V0LFxuICAgICAgcG9zaXRpb25JbkRyb3BUYXJnZXQsXG4gICAgICBzaXplOiB7XG4gICAgICAgIHdpZHRoOiB0YXJnZXQuY2xpZW50V2lkdGggLyBzY2FsZSxcbiAgICAgICAgaGVpZ2h0OiB0YXJnZXQuY2xpZW50SGVpZ2h0IC8gc2NhbGVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhbGlnbkRpbWVuc2lvbnNXaXRoSW5wdXRzKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy5pbnRlcmFjdFNlcnZpY2UudXBkYXRlU2l6ZShcbiAgICAgIHRoaXMuaW50ZXJhY3RhYmxlSWQsXG4gICAgICB0aGlzLnJlZ2lzdHJ5SWQsXG4gICAgICB7ZGVsdGFYOiAwLCBkZWx0YVk6IDAsIHdpZHRoLCBoZWlnaHR9LFxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50XG4gICAgKTtcbiAgfVxuXG4gIGFkZFJlc2l6ZVByb3BlcnRpZXNUb0VsZW1lbnQobmF0aXZlRWxlbWVudDogVGZ0RHJhZ0VsZW1lbnQpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KG5hdGl2ZUVsZW1lbnQsICdyZXNpemVSZWYnLCB0aGlzKTtcbiAgfVxuXG4gIHN1YnNjcmliZVRvU2Nyb2xsRXZlbnRzKCkge1xuICAgIHRoaXMuc2Nyb2xsRXZlbnRzU3Vic2NyaXB0aW9uID0gdGhpcy5hdXRvX3Njcm9sbF9kaXIuc2Nyb2xsRGVsdGFPYnNlcnZlci5zdWJzY3JpYmUoKHtzY3JvbGxMZWZ0LCBzY3JvbGxUb3B9KSA9PiB7XG4gICAgICBjb25zdCBzY2FsZSA9IHRoaXMuc2NhbGU7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCB7d2lkdGg6IHByZXZXaWR0aCwgaGVpZ2h0OiBwcmV2SGVpZ2h0fSA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgY29uc3QgZGVsdGFIZWlnaHQgPSBzY3JvbGxUb3AgKiAodGhpcy5hY3RpdmVFZGdlcy50b3AgPyAtMSA6IHRoaXMuYWN0aXZlRWRnZXMuYm90dG9tID8gMSA6IDApO1xuICAgICAgY29uc3QgZGVsdGFXaWR0aCA9IHNjcm9sbExlZnQgKiAodGhpcy5hY3RpdmVFZGdlcy5sZWZ0ID8gLTEgOiB0aGlzLmFjdGl2ZUVkZ2VzLnJpZ2h0ID8gMSA6IDApO1xuXG4gICAgICBjb25zdCBoZWlnaHQgPSAocHJldkhlaWdodCArIGRlbHRhSGVpZ2h0KSAvIHNjYWxlO1xuICAgICAgY29uc3Qgd2lkdGggPSAocHJldldpZHRoICsgZGVsdGFXaWR0aCkgLyBzY2FsZTtcbiAgICAgIGNvbnN0IGRlbHRhWCA9IHRoaXMuYWN0aXZlRWRnZXMubGVmdCA/IChzY3JvbGxMZWZ0IC8gc2NhbGUpIDogMDtcbiAgICAgIGNvbnN0IGRlbHRhWSA9IHRoaXMuYWN0aXZlRWRnZXMudG9wID8gKHNjcm9sbFRvcCAvIHNjYWxlKSA6IDA7XG4gICAgICB0aGlzLmludGVyYWN0U2VydmljZS51cGRhdGVTaXplKFxuICAgICAgICB0aGlzLmludGVyYWN0YWJsZUlkLFxuICAgICAgICB0aGlzLnJlZ2lzdHJ5SWQsXG4gICAgICAgIHtkZWx0YVgsIGRlbHRhWSwgd2lkdGgsIGhlaWdodH0sXG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,197 +0,0 @@
1
- import { Injectable, RendererFactory2, NgZone, Inject, Optional } from '@angular/core';
2
- import { BehaviorSubject, combineLatest } from 'rxjs';
3
- import { tap, map, shareReplay } from 'rxjs/operators';
4
- import { defaultPosition, defaultSize, defaultDelta, DEFAULT_REGISTRY_ID, INTERACT_ROOT_CONFIG } from '../models';
5
- import * as i0 from "@angular/core";
6
- export class InteractService {
7
- constructor(rendererFactory, ngZone, rootConfig) {
8
- this.rendererFactory = rendererFactory;
9
- this.ngZone = ngZone;
10
- this.rootConfig = rootConfig;
11
- this._interactableIndex = 0;
12
- this._dropzoneIndex = 0;
13
- // TODO: consider using Map here
14
- this.dragRegistrySystem = {};
15
- this.cssUnit = 'px';
16
- this.renderer = this.rendererFactory.createRenderer(null, null);
17
- this.cssUnit = rootConfig?.cssDimensionUnit || 'px';
18
- }
19
- addDeltaToPosition(delta, position) {
20
- return {
21
- x: delta.deltaX + position.x,
22
- y: delta.deltaY + position.y,
23
- targetElement: position.targetElement || delta.targetElement
24
- };
25
- }
26
- addRegistryToSystem(customRegistryId = null) {
27
- const registryId = customRegistryId || this.createDropzoneId(this._dropzoneIndex++);
28
- this.dragRegistrySystem[registryId] = {};
29
- return registryId;
30
- }
31
- addDraggableToRegistry(customRegistryId = null, interactableId = null) {
32
- const registryId = customRegistryId || DEFAULT_REGISTRY_ID;
33
- // if we pass an id to createInteractableId then it is used when creating the interactable
34
- // and returned, otherwise a new id is created for the draggable.
35
- const key = this.createInteractableId(interactableId);
36
- if (!Object.prototype.hasOwnProperty.call(this.dragRegistrySystem, registryId)) {
37
- this.dragRegistrySystem[registryId] = {};
38
- }
39
- this.dragRegistrySystem[registryId][key] = this.createInteractableState(defaultPosition, defaultSize, defaultDelta);
40
- return key;
41
- }
42
- destroyInteractable(interactableId, registryId = DEFAULT_REGISTRY_ID) {
43
- const interactableSystem = this.dragRegistrySystem[registryId][interactableId];
44
- if (interactableSystem) {
45
- // unsubscribe from all the subscriptions if they're subscriptions
46
- for (const propName in interactableSystem) {
47
- const prop = interactableSystem[propName];
48
- if (prop.unsubscribe && typeof prop.unsubscribe === 'function') {
49
- prop.unsubscribe();
50
- }
51
- ;
52
- }
53
- delete this.dragRegistrySystem[registryId][interactableId];
54
- }
55
- }
56
- subscribeToInteractable(interactableId, registryId = DEFAULT_REGISTRY_ID) {
57
- return this.dragRegistrySystem[registryId][interactableId];
58
- }
59
- createInteractableState(initialPosition, initialSize, initialDelta) {
60
- const deltas$ = new BehaviorSubject(initialDelta);
61
- // tracks the size of the element
62
- const size$ = new BehaviorSubject({ ...initialSize, ...initialDelta });
63
- // Stream of positions as they change
64
- const position$ = new BehaviorSubject(initialPosition);
65
- // All draggable data mapped together
66
- const interactable$ = combineLatest([
67
- size$.pipe(
68
- // startWith({...initialSize, ...initialDelta}),
69
- shareReplay(1),
70
- // filter(resizeEvent => !!resizeEvent.targetElement),
71
- tap(({ deltaX, deltaY, width, height, targetElement }) => {
72
- this.ngZone.runOutsideAngular(() => {
73
- this.setElementSize(width, height, targetElement);
74
- });
75
- // only reposition if necessary i.e when resizing left or up
76
- if (deltaX || deltaY) {
77
- deltas$.next({ deltaX, deltaY, targetElement });
78
- }
79
- })),
80
- deltas$.pipe(shareReplay(1), tap((delta) => {
81
- const position = position$.value;
82
- const newPosition = this.addDeltaToPosition(delta, position);
83
- position$.next(newPosition);
84
- })),
85
- position$.pipe(shareReplay(1), tap(position => {
86
- this.ngZone.runOutsideAngular(() => {
87
- this.setElementTransform(position.x, position.y, position);
88
- });
89
- }))
90
- ]).pipe(shareReplay(1), map(([size, deltas, position]) => {
91
- return {
92
- x: position.x,
93
- y: position.y,
94
- deltaX: deltas.deltaX,
95
- deltaY: deltas.deltaY,
96
- width: size.width,
97
- height: size.height,
98
- targetElement: size.targetElement || position.targetElement || deltas.targetElement
99
- };
100
- }));
101
- // TODO: update system to handle only returning interactable$
102
- return {
103
- deltas$,
104
- position$,
105
- size$,
106
- interactable$
107
- };
108
- }
109
- createInteractableId(customInteractableId = null) {
110
- return customInteractableId || `interactable${this._interactableIndex++}`;
111
- }
112
- createDropzoneId(index) {
113
- return `dropzone${index}`;
114
- }
115
- getInteractableState(interactableId, registryId = DEFAULT_REGISTRY_ID) {
116
- return this.dragRegistrySystem[registryId][interactableId].interactable$;
117
- }
118
- updateDeltas(interactId, registryId, { deltaX, deltaY }, targetElement) {
119
- if (!this.interactableExistOnRegistry(interactId, registryId))
120
- return;
121
- this.dragRegistrySystem[registryId][interactId].deltas$.next({ deltaX, deltaY, targetElement });
122
- }
123
- updatePosition(interactId, registryId, { x, y }, targetElement) {
124
- if (!this.interactableExistOnRegistry(interactId, registryId))
125
- return;
126
- this.dragRegistrySystem[registryId][interactId].position$.next({ x, y, targetElement });
127
- }
128
- updateSize(interactId, registryId, { deltaX, deltaY, width, height }, targetElement) {
129
- if (!this.interactableExistOnRegistry(interactId, registryId))
130
- return;
131
- this.dragRegistrySystem[registryId][interactId].size$.next({ deltaX, deltaY, width, height, targetElement });
132
- }
133
- interactableExistOnRegistry(interactId, registryId = DEFAULT_REGISTRY_ID) {
134
- // eslint-disable-next-line no-prototype-builtins
135
- return this.dragRegistrySystem.hasOwnProperty(registryId) && this.dragRegistrySystem[registryId].hasOwnProperty(interactId);
136
- }
137
- /**
138
- * Uses renderer to set width and height of angular component
139
- * @param width the desired width of component
140
- * @param height the desired height of component
141
- * @param target the element to transform
142
- */
143
- setElementSize(width, height, target) {
144
- if (!target)
145
- return;
146
- this.renderer.setStyle(target, 'width', `${width}${this.cssUnit}`);
147
- this.renderer.setStyle(target, 'height', `${height}${this.cssUnit}`);
148
- }
149
- /**
150
- * Uses renderer to set position of angular component
151
- * @param x position on x axis
152
- * @param y position on y axis
153
- * @param target the element to transform
154
- */
155
- setElementTransform(x, y, position) {
156
- if (!position?.targetElement)
157
- return;
158
- this.renderer.setStyle(position.targetElement, 'left', `${x}${this.cssUnit}`);
159
- this.renderer.setStyle(position.targetElement, 'top', `${y}${this.cssUnit}`);
160
- }
161
- /**
162
- * Generates a translate string for the x and y arguments passed to
163
- * be passed to css transform
164
- * @param x the position along the x axis
165
- * @param y the position along the y axis
166
- */
167
- createTransformString(x, y) {
168
- return `translate3d(${x}${this.cssUnit}, ${y}${this.cssUnit}, 0)`;
169
- }
170
- calculatePositionInElement(zoneElement, dragElement, scale) {
171
- // TODO: this calculation may not cover a lot of scenarios, keep an eye out for possible improvements
172
- const zoneRect = zoneElement.getBoundingClientRect();
173
- const dragRect = dragElement.getBoundingClientRect();
174
- const position = scale
175
- ? {
176
- x: (dragRect.left - zoneRect.left) / scale || 1,
177
- y: (dragRect.top - zoneRect.top) / scale || 1
178
- } : {
179
- x: dragRect.left - zoneRect.left,
180
- y: dragRect.top - zoneRect.top
181
- };
182
- // console.log({ y:position.y, drt:dragRect.top, zrt: zoneRect.top})
183
- return position;
184
- }
185
- }
186
- InteractService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: InteractService, deps: [{ token: i0.RendererFactory2 }, { token: i0.NgZone }, { token: INTERACT_ROOT_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
187
- InteractService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: InteractService, providedIn: 'root' });
188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: InteractService, decorators: [{
189
- type: Injectable,
190
- args: [{ providedIn: 'root' }]
191
- }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }, { type: i0.NgZone }, { type: undefined, decorators: [{
192
- type: Optional
193
- }, {
194
- type: Inject,
195
- args: [INTERACT_ROOT_CONFIG]
196
- }] }]; } });
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvaW50ZXJhY3Qvc3JjL2xpYi9zZXJ2aWNlcy9pbnRlcmFjdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUVMLGVBQWUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFvQyxvQkFBb0IsRUFDeEgsTUFBTSxXQUFXLENBQUM7O0FBS25CLE1BQU0sT0FBTyxlQUFlO0lBUzFCLFlBQ1UsZUFBaUMsRUFDakMsTUFBYyxFQUMyQixVQUFVO1FBRm5ELG9CQUFlLEdBQWYsZUFBZSxDQUFrQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQzJCLGVBQVUsR0FBVixVQUFVLENBQUE7UUFWckQsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBRzNCLGdDQUFnQztRQUN2Qix1QkFBa0IsR0FBNEMsRUFBRyxDQUFDO1FBQ25FLFlBQU8sR0FBRyxJQUFJLENBQUE7UUFNcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxDQUFDO0lBQ3RELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFZLEVBQUUsUUFBa0I7UUFDakQs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LHFCQUFxQixFQUFFLENBQUM7UUFDckQsTUFBTSxRQUFRLEdBQUcsS0FBSztZQUNwQixDQUFDLENBQUM7Z0JBQ0YsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFLLENBQUM7Z0JBQ2hELENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDO2FBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ0YsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUk7WUFDaEMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUc7U0FDakMsQ0FBQztRQUNGLG9FQUFvRTtRQUNwRSxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzs0R0ExTVUsZUFBZSx3RUFZSixvQkFBb0I7Z0hBWi9CLGVBQWUsY0FESCxNQUFNOzJGQUNsQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7MEJBYTNCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIsIE5nWm9uZSwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAsIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBUZnRDb29yZHMsIERlbHRhLCBTaXplLCBQb3NpdGlvbiwgSW50ZXJhY3RhYmxlUmVnaXN0cnksXG4gIGRlZmF1bHRQb3NpdGlvbiwgZGVmYXVsdFNpemUsIGRlZmF1bHREZWx0YSwgREVGQVVMVF9SRUdJU1RSWV9JRCwgVGZ0RHJhZ0VsZW1lbnQsIFRmdFJlc2l6ZUVsZW1lbnQsIElOVEVSQUNUX1JPT1RfQ09ORklHLCBJbnRlcmFjdFJvb3RDb25maWdcbn0gZnJvbSAnLi4vbW9kZWxzJztcblxuXG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEludGVyYWN0U2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfaW50ZXJhY3RhYmxlSW5kZXggPSAwO1xuICBwcml2YXRlIF9kcm9wem9uZUluZGV4ID0gMDtcbiAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuXG4gIC8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIE1hcCBoZXJlXG4gIHJlYWRvbmx5IGRyYWdSZWdpc3RyeVN5c3RlbTogeyBba2V5OiBzdHJpbmddOiBJbnRlcmFjdGFibGVSZWdpc3RyeSB9ID0geyB9O1xuICBwcml2YXRlIGNzc1VuaXQgPSAncHgnXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChJTlRFUkFDVF9ST09UX0NPTkZJRykgcHVibGljIHJvb3RDb25maWdcbiAgKSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IHRoaXMucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xuICAgIHRoaXMuY3NzVW5pdCA9IHJvb3RDb25maWc/LmNzc0RpbWVuc2lvblVuaXQgfHwgJ3B4JztcbiAgfVxuXG4gIGFkZERlbHRhVG9Qb3NpdGlvbihkZWx0YTogRGVsdGEsIHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBkZWx0YS5kZWx0YVggKyBwb3NpdGlvbi54LFxuICAgICAgeTogZGVsdGEuZGVsdGFZICsgcG9zaXRpb24ueSxcbiAgICAgIHRhcmdldEVsZW1lbnQ6IHBvc2l0aW9uLnRhcmdldEVsZW1lbnQgfHwgZGVsdGEudGFyZ2V0RWxlbWVudFxuICAgIH1cbiAgfVxuXG4gIGFkZFJlZ2lzdHJ5VG9TeXN0ZW0oY3VzdG9tUmVnaXN0cnlJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBjb25zdCByZWdpc3RyeUlkID0gY3VzdG9tUmVnaXN0cnlJZCB8fCB0aGlzLmNyZWF0ZURyb3B6b25lSWQodGhpcy5fZHJvcHpvbmVJbmRleCsrKTtcbiAgICB0aGlzLmRyYWdSZWdpc3RyeVN5c3RlbVtyZWdpc3RyeUlkXSA9IHt9O1xuICAgIHJldHVybiByZWdpc3RyeUlkO1xuICB9XG5cbiAgYWRkRHJhZ2dhYmxlVG9SZWdpc3RyeShjdXN0b21SZWdpc3RyeUlkID0gbnVsbCwgaW50ZXJhY3RhYmxlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsICkge1xuICAgIGNvbnN0IHJlZ2lzdHJ5SWQgPSBjdXN0b21SZWdpc3RyeUlkIHx8IERFRkFVTFRfUkVHSVNUUllfSUQ7XG4gICAgLy8gaWYgd2UgcGFzcyBhbiBpZCB0byBjcmVhdGVJbnRlcmFjdGFibGVJZCB0aGVuIGl0IGlzIHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgaW50ZXJhY3RhYmxlXG4gICAgLy8gYW5kIHJldHVybmVkLCBvdGhlcndpc2UgYSBuZXcgaWQgaXMgY3JlYXRlZCBmb3IgdGhlIGRyYWdnYWJsZS5cbiAgICBjb25zdCBrZXkgPSB0aGlzLmNyZWF0ZUludGVyYWN0YWJsZUlkKGludGVyYWN0YWJsZUlkICk7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5kcmFnUmVnaXN0cnlTeXN0ZW0sIHJlZ2lzdHJ5SWQpKSB7XG4gICAgICB0aGlzLmRyYWdSZWdpc3RyeVN5c3RlbVtyZWdpc3RyeUlkXSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLmRyYWdSZWdpc3RyeVN5c3RlbVtyZWdpc3RyeUlkXVtrZXldID0gdGhpcy5jcmVhdGVJbnRlcmFjdGFibGVTdGF0ZShkZWZhdWx0UG9zaXRpb24sIGRlZmF1bHRTaXplLCBkZWZhdWx0RGVsdGEpO1xuICAgIHJldHVybiBrZXlcbiAgfVxuXG4gIGRlc3Ryb3lJbnRlcmFjdGFibGUoaW50ZXJhY3RhYmxlSWQ6IHN0cmluZywgcmVnaXN0cnlJZCA9IERFRkFVTFRfUkVHSVNUUllfSUQpIHtcbiAgICBjb25zdCBpbnRlcmFjdGFibGVTeXN0ZW0gPXRoaXMuZHJhZ1JlZ2lzdHJ5U3lzdGVtW3JlZ2lzdHJ5SWRdW2ludGVyYWN0YWJsZUlkXTtcbiAgICBpZihpbnRlcmFjdGFibGVTeXN0ZW0pIHtcbiAgICAgIC8vIHVuc3Vic2NyaWJlIGZyb20gYWxsIHRoZSBzdWJzY3JpcHRpb25zIGlmIHRoZXkncmUgc3Vic2NyaXB0aW9uc1xuICAgICAgZm9yIChjb25zdCBwcm9wTmFtZSBpbiBpbnRlcmFjdGFibGVTeXN0ZW0pICB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBpbnRlcmFjdGFibGVTeXN0ZW1bcHJvcE5hbWVdO1xuICAgICAgICBpZiAocHJvcC51bnN1YnNjcmliZSAmJiB0eXBlb2YgcHJvcC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJyApIHtcbiAgICAgICAgICBwcm9wLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBkZWxldGUgdGhpcy5kcmFnUmVnaXN0cnlTeXN0ZW1bcmVnaXN0cnlJZF1baW50ZXJhY3RhYmxlSWRdO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZVRvSW50ZXJhY3RhYmxlKGludGVyYWN0YWJsZUlkOiBzdHJpbmcsIHJlZ2lzdHJ5SWQgPSBERUZBVUxUX1JFR0lTVFJZX0lEKSB7XG4gICAgcmV0dXJuIHRoaXMuZHJhZ1JlZ2lzdHJ5U3lzdGVtW3JlZ2lzdHJ5SWRdW2ludGVyYWN0YWJsZUlkXTtcbiAgfVxuXG4gIGNyZWF0ZUludGVyYWN0YWJsZVN0YXRlKGluaXRpYWxQb3NpdGlvbjogUG9zaXRpb24sIGluaXRpYWxTaXplOiBTaXplLCBpbml0aWFsRGVsdGE6IERlbHRhICkge1xuXG4gICAgY29uc3QgZGVsdGFzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoaW5pdGlhbERlbHRhKTtcbiAgICAvLyB0cmFja3MgdGhlIHNpemUgb2YgdGhlIGVsZW1lbnRcbiAgICBjb25zdCBzaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Qoey4uLmluaXRpYWxTaXplLCAuLi5pbml0aWFsRGVsdGF9KTtcbiAgICAvLyBTdHJlYW0gb2YgcG9zaXRpb25zIGFzIHRoZXkgY2hhbmdlXG4gICAgY29uc3QgcG9zaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdChpbml0aWFsUG9zaXRpb24pO1xuXG4gICAgLy8gQWxsIGRyYWdnYWJsZSBkYXRhIG1hcHBlZCB0b2dldGhlclxuICAgIGNvbnN0IGludGVyYWN0YWJsZSQ6IE9ic2VydmFibGU8VGZ0Q29vcmRzPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgc2l6ZSQucGlwZShcbiAgICAgICAgLy8gc3RhcnRXaXRoKHsuLi5pbml0aWFsU2l6ZSwgLi4uaW5pdGlhbERlbHRhfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICAgICAvLyBmaWx0ZXIocmVzaXplRXZlbnQgPT4gISFyZXNpemVFdmVudC50YXJnZXRFbGVtZW50KSxcbiAgICAgICAgdGFwKCh7ZGVsdGFYLCBkZWx0YVksIHdpZHRoLCBoZWlnaHQsIHRhcmdldEVsZW1lbnR9KSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRFbGVtZW50U2l6ZSh3aWR0aCwgaGVpZ2h0LCB0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBvbmx5IHJlcG9zaXRpb24gaWYgbmVjZXNzYXJ5IGkuZSB3aGVuIHJlc2l6aW5nIGxlZnQgb3IgdXBcbiAgICAgICAgICBpZihkZWx0YVggfHwgZGVsdGFZKSB7XG4gICAgICAgICAgICBkZWx0YXMkLm5leHQoe2RlbHRhWCwgZGVsdGFZLCB0YXJnZXRFbGVtZW50fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIGRlbHRhcyQucGlwZShcbiAgICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgICAgIHRhcCgoZGVsdGEpID0+IHtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uJC52YWx1ZTtcbiAgICAgICAgICBjb25zdCBuZXdQb3NpdGlvbiA9IHRoaXMuYWRkRGVsdGFUb1Bvc2l0aW9uKGRlbHRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgcG9zaXRpb24kLm5leHQobmV3UG9zaXRpb24pO1xuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHBvc2l0aW9uJC5waXBlKFxuICAgICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICAgICAgdGFwKCBwb3NpdGlvbiA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRFbGVtZW50VHJhbnNmb3JtKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgXSkucGlwZShcbiAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICAgbWFwKCAoW3NpemUsIGRlbHRhcywgcG9zaXRpb25dKTogVGZ0Q29vcmRzPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHBvc2l0aW9uLngsXG4gICAgICAgICAgeTogcG9zaXRpb24ueSxcbiAgICAgICAgICBkZWx0YVg6IGRlbHRhcy5kZWx0YVgsXG4gICAgICAgICAgZGVsdGFZOiBkZWx0YXMuZGVsdGFZLFxuICAgICAgICAgIHdpZHRoOiBzaXplLndpZHRoLFxuICAgICAgICAgIGhlaWdodDogc2l6ZS5oZWlnaHQsXG4gICAgICAgICAgdGFyZ2V0RWxlbWVudDogc2l6ZS50YXJnZXRFbGVtZW50IHx8IHBvc2l0aW9uLnRhcmdldEVsZW1lbnQgfHwgZGVsdGFzLnRhcmdldEVsZW1lbnRcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKVxuICAgIC8vIFRPRE86IHVwZGF0ZSBzeXN0ZW0gdG8gaGFuZGxlIG9ubHkgcmV0dXJuaW5nIGludGVyYWN0YWJsZSRcbiAgICByZXR1cm4ge1xuICAgICAgZGVsdGFzJCxcbiAgICAgIHBvc2l0aW9uJCxcbiAgICAgIHNpemUkLFxuICAgICAgaW50ZXJhY3RhYmxlJFxuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUludGVyYWN0YWJsZUlkKGN1c3RvbUludGVyYWN0YWJsZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIHJldHVybiBjdXN0b21JbnRlcmFjdGFibGVJZCB8fCBgaW50ZXJhY3RhYmxlJHt0aGlzLl9pbnRlcmFjdGFibGVJbmRleCsrfWBcbiAgfVxuXG4gIGNyZWF0ZURyb3B6b25lSWQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBgZHJvcHpvbmUke2luZGV4fWBcbiAgfVxuXG4gIGdldEludGVyYWN0YWJsZVN0YXRlKCBpbnRlcmFjdGFibGVJZDogc3RyaW5nLCByZWdpc3RyeUlkID0gREVGQVVMVF9SRUdJU1RSWV9JRCkge1xuICAgIHJldHVybiB0aGlzLmRyYWdSZWdpc3RyeVN5c3RlbVtyZWdpc3RyeUlkXVtpbnRlcmFjdGFibGVJZF0uaW50ZXJhY3RhYmxlJDtcbiAgfVxuXG4gIHVwZGF0ZURlbHRhcyhpbnRlcmFjdElkOiBzdHJpbmcsIHJlZ2lzdHJ5SWQ6IHN0cmluZywgeyBkZWx0YVgsIGRlbHRhWSB9LCB0YXJnZXRFbGVtZW50KSB7XG4gICAgaWYgKCF0aGlzLmludGVyYWN0YWJsZUV4aXN0T25SZWdpc3RyeShpbnRlcmFjdElkLCByZWdpc3RyeUlkKSkgcmV0dXJuO1xuICAgIHRoaXMuZHJhZ1JlZ2lzdHJ5U3lzdGVtW3JlZ2lzdHJ5SWRdW2ludGVyYWN0SWRdLmRlbHRhcyQubmV4dCh7IGRlbHRhWCwgZGVsdGFZLCB0YXJnZXRFbGVtZW50IH0pXG4gIH1cblxuICB1cGRhdGVQb3NpdGlvbihpbnRlcmFjdElkOiBzdHJpbmcsIHJlZ2lzdHJ5SWQ6IHN0cmluZywgeyB4LCB5IH06IHt4OiBudW1iZXI7IHk6IG51bWJlcjt9LCB0YXJnZXRFbGVtZW50KSB7XG4gICAgaWYgKCF0aGlzLmludGVyYWN0YWJsZUV4aXN0T25SZWdpc3RyeShpbnRlcmFjdElkLCByZWdpc3RyeUlkKSkgcmV0dXJuO1xuICAgIHRoaXMuZHJhZ1JlZ2lzdHJ5U3lzdGVtW3JlZ2lzdHJ5SWRdW2ludGVyYWN0SWRdLnBvc2l0aW9uJC5uZXh0KHsgeCwgeSwgdGFyZ2V0RWxlbWVudCB9KVxuICB9XG5cbiAgdXBkYXRlU2l6ZShpbnRlcmFjdElkOiBzdHJpbmcsIHJlZ2lzdHJ5SWQ6IHN0cmluZywgeyBkZWx0YVgsIGRlbHRhWSwgd2lkdGgsIGhlaWdodCB9LCB0YXJnZXRFbGVtZW50KSB7XG4gICAgaWYgKCF0aGlzLmludGVyYWN0YWJsZUV4aXN0T25SZWdpc3RyeShpbnRlcmFjdElkLCByZWdpc3RyeUlkKSkgcmV0dXJuXG4gICAgdGhpcy5kcmFnUmVnaXN0cnlTeXN0ZW1bcmVnaXN0cnlJZF1baW50ZXJhY3RJZF0uc2l6ZSQubmV4dCh7ZGVsdGFYLCBkZWx0YVksIHdpZHRoLCBoZWlnaHQsIHRhcmdldEVsZW1lbnR9KTtcbiAgfVxuXG4gIGludGVyYWN0YWJsZUV4aXN0T25SZWdpc3RyeShpbnRlcmFjdElkOiBzdHJpbmcsIHJlZ2lzdHJ5SWQgPSBERUZBVUxUX1JFR0lTVFJZX0lEKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHJldHVybiB0aGlzLmRyYWdSZWdpc3RyeVN5c3RlbS5oYXNPd25Qcm9wZXJ0eShyZWdpc3RyeUlkKSAmJiB0aGlzLmRyYWdSZWdpc3RyeVN5c3RlbVtyZWdpc3RyeUlkXS5oYXNPd25Qcm9wZXJ0eShpbnRlcmFjdElkKTtcbiAgfVxuICAvKipcbiAgICogVXNlcyByZW5kZXJlciB0byBzZXQgd2lkdGggYW5kIGhlaWdodCBvZiBhbmd1bGFyIGNvbXBvbmVudFxuICAgKiBAcGFyYW0gd2lkdGggdGhlIGRlc2lyZWQgd2lkdGggb2YgY29tcG9uZW50XG4gICAqIEBwYXJhbSBoZWlnaHQgdGhlIGRlc2lyZWQgaGVpZ2h0IG9mIGNvbXBvbmVudFxuICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSBlbGVtZW50IHRvIHRyYW5zZm9ybVxuICAgKi9cbiAgc2V0RWxlbWVudFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHRhcmdldDogVGZ0UmVzaXplRWxlbWVudCkge1xuICAgIGlmKCF0YXJnZXQpIHJldHVybjtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRhcmdldCwgJ3dpZHRoJywgYCR7d2lkdGh9JHt0aGlzLmNzc1VuaXR9YCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0YXJnZXQsICdoZWlnaHQnLCBgJHtoZWlnaHR9JHt0aGlzLmNzc1VuaXR9YCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZXMgcmVuZGVyZXIgdG8gc2V0IHBvc2l0aW9uIG9mIGFuZ3VsYXIgY29tcG9uZW50XG4gICAqIEBwYXJhbSB4IHBvc2l0aW9uIG9uIHggYXhpc1xuICAgKiBAcGFyYW0geSBwb3NpdGlvbiBvbiB5IGF4aXNcbiAgICogQHBhcmFtIHRhcmdldCB0aGUgZWxlbWVudCB0byB0cmFuc2Zvcm1cbiAgICovXG4gIHNldEVsZW1lbnRUcmFuc2Zvcm0oeDogbnVtYmVyLCB5OiBudW1iZXIsIHBvc2l0aW9uOiBQb3NpdGlvbiApIHtcbiAgICBpZighcG9zaXRpb24/LnRhcmdldEVsZW1lbnQpIHJldHVybjtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHBvc2l0aW9uLnRhcmdldEVsZW1lbnQsICdsZWZ0JywgYCR7eH0ke3RoaXMuY3NzVW5pdH1gKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHBvc2l0aW9uLnRhcmdldEVsZW1lbnQsICd0b3AnLCBgJHt5fSR7dGhpcy5jc3NVbml0fWApO1xuICB9XG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSB0cmFuc2xhdGUgc3RyaW5nIGZvciB0aGUgeCBhbmQgeSBhcmd1bWVudHMgcGFzc2VkIHRvXG4gICAqIGJlIHBhc3NlZCB0byBjc3MgdHJhbnNmb3JtXG4gICAqIEBwYXJhbSB4IHRoZSBwb3NpdGlvbiBhbG9uZyB0aGUgeCBheGlzXG4gICAqIEBwYXJhbSB5IHRoZSBwb3NpdGlvbiBhbG9uZyB0aGUgeSBheGlzXG4gICAqL1xuICBjcmVhdGVUcmFuc2Zvcm1TdHJpbmcoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYHRyYW5zbGF0ZTNkKCR7eH0ke3RoaXMuY3NzVW5pdH0sICR7eX0ke3RoaXMuY3NzVW5pdH0sIDApYFxuICB9XG5cbiAgY2FsY3VsYXRlUG9zaXRpb25JbkVsZW1lbnQoem9uZUVsZW1lbnQ6IEludGVyYWN0LkVsZW1lbnQsIGRyYWdFbGVtZW50OiBUZnREcmFnRWxlbWVudCwgc2NhbGU/OiBudW1iZXIpIHtcbiAgICAvLyBUT0RPOiB0aGlzIGNhbGN1bGF0aW9uIG1heSBub3QgY292ZXIgYSBsb3Qgb2Ygc2NlbmFyaW9zLCBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvc3NpYmxlIGltcHJvdmVtZW50c1xuICAgIGNvbnN0IHpvbmVSZWN0ID0gem9uZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZHJhZ1JlY3QgPSBkcmFnRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHNjYWxlXG4gICAgICA/IHtcbiAgICAgIHg6IChkcmFnUmVjdC5sZWZ0IC0gem9uZVJlY3QubGVmdCkgLyBzY2FsZSAgfHwgMSxcbiAgICAgIHk6IChkcmFnUmVjdC50b3AgLSB6b25lUmVjdC50b3ApIC8gc2NhbGUgfHwgMVxuICAgICAgfSA6IHtcbiAgICAgICAgeDogZHJhZ1JlY3QubGVmdCAtIHpvbmVSZWN0LmxlZnQsXG4gICAgICAgIHk6IGRyYWdSZWN0LnRvcCAtIHpvbmVSZWN0LnRvcFxuICAgIH07XG4gICAgLy8gY29uc29sZS5sb2coeyB5OnBvc2l0aW9uLnksIGRydDpkcmFnUmVjdC50b3AsIHpydDogem9uZVJlY3QudG9wfSlcbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH1cbn1cbiJdfQ==
@@ -1,35 +0,0 @@
1
- /** Gets the closest ancestor of an element that matches a selector. */
2
- export function getClosestMatchingAncestor(element, selector) {
3
- let currentElement = element.parentElement;
4
- while (currentElement) {
5
- // IE doesn't support `matches` so we have to fall back to `msMatchesSelector`.
6
- if (currentElement.matches ? currentElement.matches(selector) :
7
- currentElement.msMatchesSelector(selector)) {
8
- return currentElement;
9
- }
10
- currentElement = currentElement.parentElement;
11
- }
12
- return null;
13
- }
14
- /**
15
- * Create a copy of the HTML Element
16
- */
17
- export function cloneElement(element) {
18
- const clone = element.cloneNode(true);
19
- clone.removeAttribute('id');
20
- return clone;
21
- }
22
- /**
23
- * Gets the root HTML element of an embedded view.
24
- * If the root is not an HTML element it gets wrapped in one.
25
- */
26
- export function getRootNode(viewRef, _document) {
27
- const rootNodes = viewRef.rootNodes;
28
- if (rootNodes.length === 1 && rootNodes[0].nodeType === _document.ELEMENT_NODE) {
29
- return rootNodes[0];
30
- }
31
- const wrapper = _document.createElement('div');
32
- rootNodes.forEach(node => wrapper.appendChild(node));
33
- return wrapper;
34
- }
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvaW50ZXJhY3Qvc3JjL2xpYi91dGlscy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsMEJBQTBCLENBQUMsT0FBb0IsRUFBRSxRQUFnQjtJQUMvRSxJQUFJLGNBQWMsR0FBRyxPQUFPLENBQUMsYUFBbUMsQ0FBQztJQUVqRSxPQUFPLGNBQWMsRUFBRTtRQUNyQiwrRUFBK0U7UUFDL0UsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUQsY0FBNEIsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM3RCxPQUFPLGNBQWMsQ0FBQztTQUN2QjtRQUVELGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO0tBQy9DO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBR0Q7O0dBRUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQW9CO0lBRS9DLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFnQixDQUFDO0lBQ3JELEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUE2QixFQUFFLFNBQW1CO0lBQzVFLE1BQU0sU0FBUyxHQUFXLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFFNUMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxZQUFZLEVBQUU7UUFDOUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFnQixDQUFDO0tBQ3BDO0lBRUQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbWJlZGRlZFZpZXdSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW50ZXJmYWNlIElFRWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgbXNNYXRjaGVzU2VsZWN0b3I6IChzZWxlY3Rvcjogc3RyaW5nKSA9PiBib29sZWFuOyAvL1xufVxuXG4vKiogR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBvZiBhbiBlbGVtZW50IHRoYXQgbWF0Y2hlcyBhIHNlbGVjdG9yLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENsb3Nlc3RNYXRjaGluZ0FuY2VzdG9yKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzZWxlY3Rvcjogc3RyaW5nKSB7XG4gIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgd2hpbGUgKGN1cnJlbnRFbGVtZW50KSB7XG4gICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGBtYXRjaGVzYCBzbyB3ZSBoYXZlIHRvIGZhbGwgYmFjayB0byBgbXNNYXRjaGVzU2VsZWN0b3JgLlxuICAgIGlmIChjdXJyZW50RWxlbWVudC5tYXRjaGVzID8gY3VycmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikgOlxuICAgICAgICAoY3VycmVudEVsZW1lbnQgYXMgSUVFbGVtZW50KS5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3RvcikpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuXG4vKipcbiAqIENyZWF0ZSBhIGNvcHkgb2YgdGhlIEhUTUwgRWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG5cbiAgY29uc3QgY2xvbmUgPSBlbGVtZW50LmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MRWxlbWVudDtcbiAgY2xvbmUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuICByZXR1cm4gY2xvbmU7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcm9vdCBIVE1MIGVsZW1lbnQgb2YgYW4gZW1iZWRkZWQgdmlldy5cbiAqIElmIHRoZSByb290IGlzIG5vdCBhbiBIVE1MIGVsZW1lbnQgaXQgZ2V0cyB3cmFwcGVkIGluIG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvb3ROb2RlKHZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxhbnk+LCBfZG9jdW1lbnQ6IERvY3VtZW50KTogSFRNTEVsZW1lbnQge1xuICBjb25zdCByb290Tm9kZXM6IE5vZGVbXSA9IHZpZXdSZWYucm9vdE5vZGVzO1xuXG4gIGlmIChyb290Tm9kZXMubGVuZ3RoID09PSAxICYmIHJvb3ROb2Rlc1swXS5ub2RlVHlwZSA9PT0gX2RvY3VtZW50LkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiByb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gIH1cblxuICBjb25zdCB3cmFwcGVyID0gX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICByb290Tm9kZXMuZm9yRWFjaChub2RlID0+IHdyYXBwZXIuYXBwZW5kQ2hpbGQobm9kZSkpO1xuICByZXR1cm4gd3JhcHBlcjtcbn1cbiJdfQ==