@clr/angular 15.0.0-beta.1 → 15.0.0-beta.3
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/clarity.api.md +158 -489
- package/clr-angular.module.d.ts +12 -15
- package/data/datagrid/datagrid-column.d.ts +1 -22
- package/data/datagrid/datagrid-pagination.d.ts +2 -2
- package/data/datagrid/datagrid.module.d.ts +13 -13
- package/data/stack-view/index.d.ts +0 -2
- package/data/stack-view/stack-block.d.ts +1 -17
- package/data/stack-view/stack-view.d.ts +1 -11
- package/data/stack-view/stack-view.module.d.ts +5 -7
- package/data/tree-view/tree-node.d.ts +6 -6
- package/esm2020/accordion/accordion-panel.mjs +3 -3
- package/esm2020/accordion/stepper/stepper-panel.mjs +3 -3
- package/esm2020/clr-angular.module.mjs +1 -13
- package/esm2020/data/datagrid/datagrid-action-overflow.mjs +10 -10
- package/esm2020/data/datagrid/datagrid-column-separator.mjs +16 -15
- package/esm2020/data/datagrid/datagrid-column-toggle.mjs +18 -20
- package/esm2020/data/datagrid/datagrid-column.mjs +2 -48
- package/esm2020/data/datagrid/datagrid-detail.mjs +8 -6
- package/esm2020/data/datagrid/datagrid-filter.mjs +10 -10
- package/esm2020/data/datagrid/datagrid-pagination.mjs +10 -5
- package/esm2020/data/datagrid/datagrid-row-detail.mjs +7 -8
- package/esm2020/data/datagrid/datagrid-row.mjs +3 -3
- package/esm2020/data/datagrid/datagrid.module.mjs +9 -9
- package/esm2020/data/stack-view/index.mjs +1 -3
- package/esm2020/data/stack-view/stack-block.mjs +2 -8
- package/esm2020/data/stack-view/stack-header.mjs +2 -23
- package/esm2020/data/stack-view/stack-view.mjs +4 -28
- package/esm2020/data/stack-view/stack-view.module.mjs +3 -23
- package/esm2020/data/tree-view/tree-node.mjs +30 -26
- package/esm2020/forms/datepicker/date-container.mjs +9 -9
- package/esm2020/forms/datepicker/datepicker.module.mjs +5 -5
- package/esm2020/layout/nav/nav-level.mjs +23 -10
- package/esm2020/layout/vertical-nav/vertical-nav-group.mjs +3 -7
- package/esm2020/modal/modal.mjs +8 -19
- package/esm2020/modal/modal.module.mjs +5 -5
- package/esm2020/popover/dropdown/dropdown-item.mjs +30 -33
- package/esm2020/utils/cdk/cdk-drag.module.mjs +37 -0
- package/esm2020/utils/cdk/cdk-trap-focus.module.mjs +37 -0
- package/esm2020/utils/i18n/common-strings.default.mjs +2 -3
- package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
- package/esm2020/utils/index.mjs +1 -5
- package/esm2020/wizard/wizard.mjs +6 -30
- package/fesm2015/clr-angular.mjs +259 -1990
- package/fesm2015/clr-angular.mjs.map +1 -1
- package/fesm2020/clr-angular.mjs +306 -2033
- package/fesm2020/clr-angular.mjs.map +1 -1
- package/forms/datepicker/datepicker.module.d.ts +6 -6
- package/layout/nav/nav-level.d.ts +12 -4
- package/layout/vertical-nav/vertical-nav-group.d.ts +1 -2
- package/modal/modal.d.ts +1 -4
- package/modal/modal.module.d.ts +3 -3
- package/package.json +2 -1
- package/popover/dropdown/dropdown-item.d.ts +7 -13
- package/src/utils/popover/README.md +1 -1
- package/utils/cdk/cdk-drag.module.d.ts +17 -0
- package/utils/cdk/cdk-trap-focus.module.d.ts +17 -0
- package/utils/i18n/common-strings.interface.d.ts +0 -17
- package/utils/index.d.ts +0 -4
- package/wizard/wizard.d.ts +2 -13
- package/data/stack-view/stack-control.d.ts +0 -16
- package/data/stack-view/stack-input.d.ts +0 -10
- package/data/stack-view/stack-select.d.ts +0 -9
- package/esm2020/data/stack-view/stack-control.mjs +0 -34
- package/esm2020/data/stack-view/stack-input.mjs +0 -42
- package/esm2020/data/stack-view/stack-select.mjs +0 -48
- package/esm2020/utils/a11y/aria-live.service.mjs +0 -163
- package/esm2020/utils/a11y/index.mjs +0 -7
- package/esm2020/utils/drag-and-drop/drag-and-drop.module.mjs +0 -42
- package/esm2020/utils/drag-and-drop/drag-event.mjs +0 -16
- package/esm2020/utils/drag-and-drop/drag-handle.mjs +0 -35
- package/esm2020/utils/drag-and-drop/draggable/draggable.mjs +0 -135
- package/esm2020/utils/drag-and-drop/draggable-ghost.mjs +0 -124
- package/esm2020/utils/drag-and-drop/droppable/droppable.mjs +0 -222
- package/esm2020/utils/drag-and-drop/if-dragged.mjs +0 -47
- package/esm2020/utils/drag-and-drop/index.mjs +0 -14
- package/esm2020/utils/drag-and-drop/interfaces/drag-event.interface.mjs +0 -15
- package/esm2020/utils/drag-and-drop/interfaces/drop-tolerance.interface.mjs +0 -7
- package/esm2020/utils/drag-and-drop/providers/drag-and-drop-event-bus.service.mjs +0 -54
- package/esm2020/utils/drag-and-drop/providers/drag-event-listener.service.mjs +0 -179
- package/esm2020/utils/drag-and-drop/providers/drag-handle-registrar.service.mjs +0 -60
- package/esm2020/utils/drag-and-drop/providers/draggable-snapshot.service.mjs +0 -38
- package/esm2020/utils/drag-and-drop/providers/global-drag-mode.service.mjs +0 -26
- package/esm2020/utils/focus-trap/focus-trap-config.interface.mjs +0 -7
- package/esm2020/utils/focus-trap/focus-trap-tracker.service.mjs +0 -32
- package/esm2020/utils/focus-trap/focus-trap.directive.mjs +0 -158
- package/esm2020/utils/focus-trap/focus-trap.mjs +0 -141
- package/esm2020/utils/focus-trap/focus-trap.module.mjs +0 -24
- package/esm2020/utils/focus-trap/index.mjs +0 -9
- package/esm2020/utils/for-type-ahead/for-type-ahead.mjs +0 -54
- package/esm2020/utils/for-type-ahead/for-type-ahead.module.mjs +0 -23
- package/esm2020/utils/for-type-ahead/for-type-ahead.service.mjs +0 -29
- package/esm2020/utils/for-type-ahead/index.mjs +0 -8
- package/utils/a11y/aria-live.service.d.ts +0 -93
- package/utils/a11y/index.d.ts +0 -1
- package/utils/drag-and-drop/drag-and-drop.module.d.ts +0 -14
- package/utils/drag-and-drop/drag-event.d.ts +0 -8
- package/utils/drag-and-drop/drag-handle.d.ts +0 -11
- package/utils/drag-and-drop/draggable/draggable.d.ts +0 -36
- package/utils/drag-and-drop/draggable-ghost.d.ts +0 -30
- package/utils/drag-and-drop/droppable/droppable.d.ts +0 -42
- package/utils/drag-and-drop/if-dragged.d.ts +0 -13
- package/utils/drag-and-drop/index.d.ts +0 -8
- package/utils/drag-and-drop/interfaces/drag-event.interface.d.ts +0 -22
- package/utils/drag-and-drop/interfaces/drop-tolerance.interface.d.ts +0 -6
- package/utils/drag-and-drop/providers/drag-and-drop-event-bus.service.d.ts +0 -16
- package/utils/drag-and-drop/providers/drag-event-listener.service.d.ts +0 -39
- package/utils/drag-and-drop/providers/drag-handle-registrar.service.d.ts +0 -18
- package/utils/drag-and-drop/providers/draggable-snapshot.service.d.ts +0 -16
- package/utils/drag-and-drop/providers/global-drag-mode.service.d.ts +0 -10
- package/utils/focus-trap/focus-trap-config.interface.d.ts +0 -3
- package/utils/focus-trap/focus-trap-tracker.service.d.ts +0 -12
- package/utils/focus-trap/focus-trap.d.ts +0 -29
- package/utils/focus-trap/focus-trap.directive.d.ts +0 -38
- package/utils/focus-trap/focus-trap.module.d.ts +0 -10
- package/utils/focus-trap/index.d.ts +0 -3
- package/utils/for-type-ahead/for-type-ahead.d.ts +0 -15
- package/utils/for-type-ahead/for-type-ahead.module.d.ts +0 -8
- package/utils/for-type-ahead/for-type-ahead.service.d.ts +0 -11
- package/utils/for-type-ahead/index.d.ts +0 -2
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
|
|
3
|
-
* This software is released under MIT license.
|
|
4
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5
|
-
*/
|
|
6
|
-
import { Injectable } from '@angular/core';
|
|
7
|
-
import { Subject } from 'rxjs';
|
|
8
|
-
import { DragEventType } from '../interfaces/drag-event.interface';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "./drag-and-drop-event-bus.service";
|
|
11
|
-
export class DragEventListenerService {
|
|
12
|
-
constructor(ngZone, renderer, eventBus) {
|
|
13
|
-
this.ngZone = ngZone;
|
|
14
|
-
this.renderer = renderer;
|
|
15
|
-
this.eventBus = eventBus;
|
|
16
|
-
// contains listeners for the starting events such as mousedown and touchstart
|
|
17
|
-
this.listeners = [];
|
|
18
|
-
this.dragStart = new Subject();
|
|
19
|
-
this.dragMove = new Subject();
|
|
20
|
-
this.dragEnd = new Subject();
|
|
21
|
-
this.hasDragStarted = false;
|
|
22
|
-
this.dragStartDelay = 0;
|
|
23
|
-
}
|
|
24
|
-
get dragStarted() {
|
|
25
|
-
return this.dragStart.asObservable();
|
|
26
|
-
}
|
|
27
|
-
get dragMoved() {
|
|
28
|
-
return this.dragMove.asObservable();
|
|
29
|
-
}
|
|
30
|
-
get dragEnded() {
|
|
31
|
-
return this.dragEnd.asObservable();
|
|
32
|
-
}
|
|
33
|
-
get dragStartPosition() {
|
|
34
|
-
return this.initialPosition;
|
|
35
|
-
}
|
|
36
|
-
attachDragListeners(draggableEl) {
|
|
37
|
-
this.draggableEl = draggableEl;
|
|
38
|
-
this.listeners.push(this.customDragEvent(this.draggableEl, 'mousedown', 'mousemove', 'mouseup'));
|
|
39
|
-
this.listeners.push(this.customDragEvent(this.draggableEl, 'touchstart', 'touchmove', 'touchend'));
|
|
40
|
-
}
|
|
41
|
-
detachDragListeners() {
|
|
42
|
-
if (this.listeners) {
|
|
43
|
-
this.listeners.map(event => event());
|
|
44
|
-
}
|
|
45
|
-
// In most cases, once users start dragging with mousedown/touchstart events,
|
|
46
|
-
// they will end dragging at one point with mouseup/touchend.
|
|
47
|
-
// However, there might be a few cases where mousedown/touchstart events get registered,
|
|
48
|
-
// but the draggable element gets removed before user ends dragging.
|
|
49
|
-
// In that case, we need to remove the attached listeners that happened during the mousedown/touchstart events.
|
|
50
|
-
if (this.nestedListeners) {
|
|
51
|
-
this.nestedListeners.map(event => event());
|
|
52
|
-
}
|
|
53
|
-
if (this.checkDragStartBoundaryListener) {
|
|
54
|
-
this.checkDragStartBoundaryListener();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
getNativeEventObject(event) {
|
|
58
|
-
if (Object.prototype.hasOwnProperty.call(event, 'changedTouches')) {
|
|
59
|
-
return event.changedTouches[0];
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
return event;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
customDragEvent(element, startOnEvent, moveOnEvent, endOnEvent) {
|
|
66
|
-
return this.renderer.listen(element, startOnEvent, (startEvent) => {
|
|
67
|
-
// save the initial point to initialPosition
|
|
68
|
-
// this will be used to calculate how far the draggable has been dragged from its initial position
|
|
69
|
-
this.initialPosition = {
|
|
70
|
-
pageX: this.getNativeEventObject(startEvent).pageX,
|
|
71
|
-
pageY: this.getNativeEventObject(startEvent).pageY,
|
|
72
|
-
};
|
|
73
|
-
// Initialize nested listeners' property with a new empty array;
|
|
74
|
-
this.nestedListeners = [];
|
|
75
|
-
// Listen to selectstart/mousemove/touchmove events outside of angular zone.
|
|
76
|
-
this.ngZone.runOutsideAngular(() => {
|
|
77
|
-
// This is needed to disable selection during dragging (especially in EDGE/IE11).
|
|
78
|
-
this.nestedListeners.push(this.renderer.listen('document', 'selectstart', (selectEvent) => {
|
|
79
|
-
selectEvent.preventDefault();
|
|
80
|
-
selectEvent.stopImmediatePropagation();
|
|
81
|
-
}));
|
|
82
|
-
// During the drag start delay, pointer should stay within the boundary.
|
|
83
|
-
this.checkDragStartBoundary(moveOnEvent);
|
|
84
|
-
this.dragStartDelayTimeout = setTimeout(() => {
|
|
85
|
-
if (this.checkDragStartBoundaryListener) {
|
|
86
|
-
this.checkDragStartBoundaryListener();
|
|
87
|
-
}
|
|
88
|
-
this.hasDragStarted = true;
|
|
89
|
-
// Fire "dragstart"
|
|
90
|
-
this.broadcast(startEvent, DragEventType.DRAG_START);
|
|
91
|
-
this.nestedListeners.push(this.renderer.listen('document', moveOnEvent, (moveEvent) => {
|
|
92
|
-
// Event.stopImmediatePropagation() is needed here to prevent nested draggables from getting dragged
|
|
93
|
-
// altogether. We shouldn't use Event.stopPropagation() here as we are listening to the events
|
|
94
|
-
// on the global element level.
|
|
95
|
-
// With Event.stopImmediatePropagation(), it registers the events sent from the inner most draggable
|
|
96
|
-
// first. Then immediately after that, it stops listening to the same type of events on the same
|
|
97
|
-
// element. So this will help us to not register the same events that would come from the parent
|
|
98
|
-
// level draggables eventually.
|
|
99
|
-
moveEvent.stopImmediatePropagation();
|
|
100
|
-
if (this.hasDragStarted) {
|
|
101
|
-
// Fire "dragmove"
|
|
102
|
-
this.broadcast(moveEvent, DragEventType.DRAG_MOVE);
|
|
103
|
-
}
|
|
104
|
-
}));
|
|
105
|
-
}, this.dragStartDelay);
|
|
106
|
-
});
|
|
107
|
-
// Listen to mouseup/touchend events.
|
|
108
|
-
this.nestedListeners.push(this.renderer.listen('document', endOnEvent, (endEvent) => {
|
|
109
|
-
if (this.hasDragStarted) {
|
|
110
|
-
// Fire "dragend" only if dragstart is registered
|
|
111
|
-
this.hasDragStarted = false;
|
|
112
|
-
this.broadcast(endEvent, DragEventType.DRAG_END);
|
|
113
|
-
}
|
|
114
|
-
clearTimeout(this.dragStartDelayTimeout);
|
|
115
|
-
// We must remove the the nested listeners every time drag completes.
|
|
116
|
-
this.nestedListeners.map(event => event());
|
|
117
|
-
// We must remove the event listener from checkDragStartBoundary
|
|
118
|
-
if (this.checkDragStartBoundaryListener) {
|
|
119
|
-
this.checkDragStartBoundaryListener();
|
|
120
|
-
}
|
|
121
|
-
}));
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
checkDragStartBoundary(eventType) {
|
|
125
|
-
this.checkDragStartBoundaryListener = this.renderer.listen('document', eventType, (moveEvent) => {
|
|
126
|
-
const deltaX = Math.abs(this.getNativeEventObject(moveEvent).pageX - this.initialPosition.pageX);
|
|
127
|
-
const deltaY = Math.abs(this.getNativeEventObject(moveEvent).pageY - this.initialPosition.pageY);
|
|
128
|
-
// If pointer move delta exceeds horizontal or vertical threshold,
|
|
129
|
-
// we should cancel drag initiation.
|
|
130
|
-
if (deltaX > 1 || deltaY > 1) {
|
|
131
|
-
clearTimeout(this.dragStartDelayTimeout);
|
|
132
|
-
if (this.checkDragStartBoundaryListener) {
|
|
133
|
-
this.checkDragStartBoundaryListener();
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
broadcast(event, eventType) {
|
|
139
|
-
const dragEvent = this.generateDragEvent(event, eventType);
|
|
140
|
-
switch (dragEvent.type) {
|
|
141
|
-
case DragEventType.DRAG_START:
|
|
142
|
-
this.dragStart.next(dragEvent);
|
|
143
|
-
break;
|
|
144
|
-
case DragEventType.DRAG_MOVE:
|
|
145
|
-
this.dragMove.next(dragEvent);
|
|
146
|
-
break;
|
|
147
|
-
case DragEventType.DRAG_END:
|
|
148
|
-
this.dragEnd.next(dragEvent);
|
|
149
|
-
break;
|
|
150
|
-
default:
|
|
151
|
-
break;
|
|
152
|
-
}
|
|
153
|
-
// The following properties are set after they are broadcasted to the DraggableGhost component.
|
|
154
|
-
dragEvent.ghostElement = this.ghostElement;
|
|
155
|
-
dragEvent.dropPointPosition = this.dropPointPosition;
|
|
156
|
-
this.eventBus.broadcast(dragEvent);
|
|
157
|
-
}
|
|
158
|
-
generateDragEvent(event, eventType) {
|
|
159
|
-
const nativeEvent = this.getNativeEventObject(event);
|
|
160
|
-
return {
|
|
161
|
-
type: eventType,
|
|
162
|
-
dragPosition: {
|
|
163
|
-
pageX: nativeEvent.pageX,
|
|
164
|
-
pageY: nativeEvent.pageY,
|
|
165
|
-
moveX: nativeEvent.pageX - this.initialPosition.pageX,
|
|
166
|
-
moveY: nativeEvent.pageY - this.initialPosition.pageY,
|
|
167
|
-
},
|
|
168
|
-
group: this.group,
|
|
169
|
-
dragDataTransfer: this.dragDataTransfer,
|
|
170
|
-
ghostElement: this.ghostElement,
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
DragEventListenerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragEventListenerService, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.DragAndDropEventBusService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
175
|
-
DragEventListenerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragEventListenerService });
|
|
176
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragEventListenerService, decorators: [{
|
|
177
|
-
type: Injectable
|
|
178
|
-
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.DragAndDropEventBusService }]; } });
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1ldmVudC1saXN0ZW5lci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdXRpbHMvZHJhZy1hbmQtZHJvcC9wcm92aWRlcnMvZHJhZy1ldmVudC1saXN0ZW5lci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBc0IsYUFBYSxFQUFxQixNQUFNLG9DQUFvQyxDQUFDOzs7QUFJMUcsTUFBTSxPQUFPLHdCQUF3QjtJQW9DbkMsWUFBb0IsTUFBYyxFQUFVLFFBQW1CLEVBQVUsUUFBdUM7UUFBNUYsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUErQjtRQWpDaEgsOEVBQThFO1FBQ3RFLGNBQVMsR0FBbUIsRUFBRSxDQUFDO1FBUS9CLGNBQVMsR0FBbUMsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFDakYsYUFBUSxHQUFtQyxJQUFJLE9BQU8sRUFBeUIsQ0FBQztRQUNoRixZQUFPLEdBQW1DLElBQUksT0FBTyxFQUF5QixDQUFDO1FBRS9FLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBMkIvQixtQkFBYyxHQUFHLENBQUMsQ0FBQztJQVBnRyxDQUFDO0lBaEJwSCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlB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QUMsWUFBWTtTQUNoQyxDQUFDO0lBQ0osQ0FBQzs7cUhBNU5VLHdCQUF3Qjt5SEFBeEIsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERyYWdFdmVudEludGVyZmFjZSwgRHJhZ0V2ZW50VHlwZSwgRHJhZ1BvaW50UG9zaXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RyYWctZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IERyYWdBbmREcm9wRXZlbnRCdXNTZXJ2aWNlIH0gZnJvbSAnLi9kcmFnLWFuZC1kcm9wLWV2ZW50LWJ1cy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERyYWdFdmVudExpc3RlbmVyU2VydmljZTxUPiB7XG4gIHByaXZhdGUgZHJhZ2dhYmxlRWw6IGFueTtcblxuICAvLyBjb250YWlucyBsaXN0ZW5lcnMgZm9yIHRoZSBzdGFydGluZyBldmVudHMgc3VjaCBhcyBtb3VzZWRvd24gYW5kIHRvdWNoc3RhcnRcbiAgcHJpdmF0ZSBsaXN0ZW5lcnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG4gIC8vIGNvbnRhaW5zIGxpc3RlbmVycyBmb3IgbmVzdGVkIGV2ZW50cyB0aGF0IGhhcHBlbnMgYWZ0ZXIvaW5zaWRlIHRoZSBzdGFydGluZyBldmVudHNcbiAgLy8gc3VjaCBhcyBzZWxlY3RzdGFydCwgbW91c2Vtb3ZlL3RvdWNobW92ZSwgbW91c2V1cC90b3VjaGVuZFxuICBwcml2YXRlIG5lc3RlZExpc3RlbmVyczogKCgpID0+IHZvaWQpW107XG5cbiAgLy8gY29udGFpbnMgbGlzdGVuZXIgZm9yIG1vdXNlbW92ZS90b3VjaG1vdmUgYmVmb3JlIGRlbGF5XG4gIHByaXZhdGUgY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgZHJhZ1N0YXJ0OiBTdWJqZWN0PERyYWdFdmVudEludGVyZmFjZTxUPj4gPSBuZXcgU3ViamVjdDxEcmFnRXZlbnRJbnRlcmZhY2U8VD4+KCk7XG4gIHByaXZhdGUgZHJhZ01vdmU6IFN1YmplY3Q8RHJhZ0V2ZW50SW50ZXJmYWNlPFQ+PiA9IG5ldyBTdWJqZWN0PERyYWdFdmVudEludGVyZmFjZTxUPj4oKTtcbiAgcHJpdmF0ZSBkcmFnRW5kOiBTdWJqZWN0PERyYWdFdmVudEludGVyZmFjZTxUPj4gPSBuZXcgU3ViamVjdDxEcmFnRXZlbnRJbnRlcmZhY2U8VD4+KCk7XG5cbiAgcHJpdmF0ZSBoYXNEcmFnU3RhcnRlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZHJhZ1N0YXJ0RGVsYXlUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuICBnZXQgZHJhZ1N0YXJ0ZWQoKTogT2JzZXJ2YWJsZTxEcmFnRXZlbnRJbnRlcmZhY2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5kcmFnU3RhcnQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgZHJhZ01vdmVkKCk6IE9ic2VydmFibGU8RHJhZ0V2ZW50SW50ZXJmYWNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuZHJhZ01vdmUuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgZHJhZ0VuZGVkKCk6IE9ic2VydmFibGU8RHJhZ0V2ZW50SW50ZXJmYWNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuZHJhZ0VuZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBkcmFnU3RhcnRQb3NpdGlvbigpOiBEcmFnUG9pbnRQb3NpdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbFBvc2l0aW9uO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGV2ZW50QnVzOiBEcmFnQW5kRHJvcEV2ZW50QnVzU2VydmljZTxUPikge31cblxuICBwcml2YXRlIGluaXRpYWxQb3NpdGlvbjogRHJhZ1BvaW50UG9zaXRpb247XG5cbiAgLy8gRHJhZ2dhYmxlIGNvbXBvbmVudCBzZXRzIHRoZXNlIHByb3BlcnRpZXM6XG4gIGRyYWdEYXRhVHJhbnNmZXI/OiBUO1xuICBncm91cD86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBkcmFnU3RhcnREZWxheSA9IDA7XG5cbiAgLy8gRHJhZ2dhYmxlR2hvc3QgY29tcG9uZW50IHNldHMgdGhlc2UgcHJvcGVydGllczpcbiAgZ2hvc3RFbGVtZW50PzogYW55O1xuICBkcm9wUG9pbnRQb3NpdGlvbj86IERyYWdQb2ludFBvc2l0aW9uO1xuXG4gIGF0dGFjaERyYWdMaXN0ZW5lcnMoZHJhZ2dhYmxlRWw6IE5vZGUpIHtcbiAgICB0aGlzLmRyYWdnYWJsZUVsID0gZHJhZ2dhYmxlRWw7XG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaCh0aGlzLmN1c3RvbURyYWdFdmVudCh0aGlzLmRyYWdnYWJsZUVsLCAnbW91c2Vkb3duJywgJ21vdXNlbW92ZScsICdtb3VzZXVwJykpO1xuICAgIHRoaXMubGlzdGVuZXJzLnB1c2godGhpcy5jdXN0b21EcmFnRXZlbnQodGhpcy5kcmFnZ2FibGVFbCwgJ3RvdWNoc3RhcnQnLCAndG91Y2htb3ZlJywgJ3RvdWNoZW5kJykpO1xuICB9XG5cbiAgZGV0YWNoRHJhZ0xpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLm1hcChldmVudCA9PiBldmVudCgpKTtcbiAgICB9XG5cbiAgICAvLyBJbiBtb3N0IGNhc2VzLCBvbmNlIHVzZXJzIHN0YXJ0IGRyYWdnaW5nIHdpdGggbW91c2Vkb3duL3RvdWNoc3RhcnQgZXZlbnRzLFxuICAgIC8vIHRoZXkgd2lsbCBlbmQgZHJhZ2dpbmcgYXQgb25lIHBvaW50IHdpdGggbW91c2V1cC90b3VjaGVuZC5cbiAgICAvLyBIb3dldmVyLCB0aGVyZSBtaWdodCBiZSBhIGZldyBjYXNlcyB3aGVyZSBtb3VzZWRvd24vdG91Y2hzdGFydCBldmVudHMgZ2V0IHJlZ2lzdGVyZWQsXG4gICAgLy8gYnV0IHRoZSBkcmFnZ2FibGUgZWxlbWVudCBnZXRzIHJlbW92ZWQgYmVmb3JlIHVzZXIgZW5kcyBkcmFnZ2luZy5cbiAgICAvLyBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBhdHRhY2hlZCBsaXN0ZW5lcnMgdGhhdCBoYXBwZW5lZCBkdXJpbmcgdGhlIG1vdXNlZG93bi90b3VjaHN0YXJ0IGV2ZW50cy5cbiAgICBpZiAodGhpcy5uZXN0ZWRMaXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMubmVzdGVkTGlzdGVuZXJzLm1hcChldmVudCA9PiBldmVudCgpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXROYXRpdmVFdmVudE9iamVjdChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiBhbnkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXZlbnQsICdjaGFuZ2VkVG91Y2hlcycpKSB7XG4gICAgICByZXR1cm4gKGV2ZW50IGFzIFRvdWNoRXZlbnQpLmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjdXN0b21EcmFnRXZlbnQoZWxlbWVudDogTm9kZSwgc3RhcnRPbkV2ZW50OiBzdHJpbmcsIG1vdmVPbkV2ZW50OiBzdHJpbmcsIGVuZE9uRXZlbnQ6IHN0cmluZyk6ICgpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCBzdGFydE9uRXZlbnQsIChzdGFydEV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkgPT4ge1xuICAgICAgLy8gc2F2ZSB0aGUgaW5pdGlhbCBwb2ludCB0byBpbml0aWFsUG9zaXRpb25cbiAgICAgIC8vIHRoaXMgd2lsbCBiZSB1c2VkIHRvIGNhbGN1bGF0ZSBob3cgZmFyIHRoZSBkcmFnZ2FibGUgaGFzIGJlZW4gZHJhZ2dlZCBmcm9tIGl0cyBpbml0aWFsIHBvc2l0aW9uXG4gICAgICB0aGlzLmluaXRpYWxQb3NpdGlvbiA9IHtcbiAgICAgICAgcGFnZVg6IHRoaXMuZ2V0TmF0aXZlRXZlbnRPYmplY3Qoc3RhcnRFdmVudCkucGFnZVgsXG4gICAgICAgIHBhZ2VZOiB0aGlzLmdldE5hdGl2ZUV2ZW50T2JqZWN0KHN0YXJ0RXZlbnQpLnBhZ2VZLFxuICAgICAgfTtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBuZXN0ZWQgbGlzdGVuZXJzJyBwcm9wZXJ0eSB3aXRoIGEgbmV3IGVtcHR5IGFycmF5O1xuICAgICAgdGhpcy5uZXN0ZWRMaXN0ZW5lcnMgPSBbXTtcblxuICAgICAgLy8gTGlzdGVuIHRvIHNlbGVjdHN0YXJ0L21vdXNlbW92ZS90b3VjaG1vdmUgZXZlbnRzIG91dHNpZGUgb2YgYW5ndWxhciB6b25lLlxuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBkaXNhYmxlIHNlbGVjdGlvbiBkdXJpbmcgZHJhZ2dpbmcgKGVzcGVjaWFsbHkgaW4gRURHRS9JRTExKS5cbiAgICAgICAgdGhpcy5uZXN0ZWRMaXN0ZW5lcnMucHVzaChcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnc2VsZWN0c3RhcnQnLCAoc2VsZWN0RXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBzZWxlY3RFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgc2VsZWN0RXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBEdXJpbmcgdGhlIGRyYWcgc3RhcnQgZGVsYXksIHBvaW50ZXIgc2hvdWxkIHN0YXkgd2l0aGluIHRoZSBib3VuZGFyeS5cbiAgICAgICAgdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5KG1vdmVPbkV2ZW50KTtcblxuICAgICAgICB0aGlzLmRyYWdTdGFydERlbGF5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmhhc0RyYWdTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAvLyBGaXJlIFwiZHJhZ3N0YXJ0XCJcbiAgICAgICAgICB0aGlzLmJyb2FkY2FzdChzdGFydEV2ZW50LCBEcmFnRXZlbnRUeXBlLkRSQUdfU1RBUlQpO1xuXG4gICAgICAgICAgdGhpcy5uZXN0ZWRMaXN0ZW5lcnMucHVzaChcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsIG1vdmVPbkV2ZW50LCAobW92ZUV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAvLyBFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSBpcyBuZWVkZWQgaGVyZSB0byBwcmV2ZW50IG5lc3RlZCBkcmFnZ2FibGVzIGZyb20gZ2V0dGluZyBkcmFnZ2VkXG4gICAgICAgICAgICAgIC8vIGFsdG9nZXRoZXIuIFdlIHNob3VsZG4ndCB1c2UgRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgaGVyZSBhcyB3ZSBhcmUgbGlzdGVuaW5nIHRvIHRoZSBldmVudHNcbiAgICAgICAgICAgICAgLy8gb24gdGhlIGdsb2JhbCBlbGVtZW50IGxldmVsLlxuXG4gICAgICAgICAgICAgIC8vIFdpdGggRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksIGl0IHJlZ2lzdGVycyB0aGUgZXZlbnRzIHNlbnQgZnJvbSB0aGUgaW5uZXIgbW9zdCBkcmFnZ2FibGVcbiAgICAgICAgICAgICAgLy8gZmlyc3QuIFRoZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhhdCwgaXQgc3RvcHMgbGlzdGVuaW5nIHRvIHRoZSBzYW1lIHR5cGUgb2YgZXZlbnRzIG9uIHRoZSBzYW1lXG4gICAgICAgICAgICAgIC8vIGVsZW1lbnQuIFNvIHRoaXMgd2lsbCBoZWxwIHVzIHRvIG5vdCByZWdpc3RlciB0aGUgc2FtZSBldmVudHMgdGhhdCB3b3VsZCBjb21lIGZyb20gdGhlIHBhcmVudFxuICAgICAgICAgICAgICAvLyBsZXZlbCBkcmFnZ2FibGVzIGV2ZW50dWFsbHkuXG5cbiAgICAgICAgICAgICAgbW92ZUV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICAgIGlmICh0aGlzLmhhc0RyYWdTdGFydGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gRmlyZSBcImRyYWdtb3ZlXCJcbiAgICAgICAgICAgICAgICB0aGlzLmJyb2FkY2FzdChtb3ZlRXZlbnQsIERyYWdFdmVudFR5cGUuRFJBR19NT1ZFKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9LCB0aGlzLmRyYWdTdGFydERlbGF5KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBMaXN0ZW4gdG8gbW91c2V1cC90b3VjaGVuZCBldmVudHMuXG4gICAgICB0aGlzLm5lc3RlZExpc3RlbmVycy5wdXNoKFxuICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCBlbmRPbkV2ZW50LCAoZW5kRXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzRHJhZ1N0YXJ0ZWQpIHtcbiAgICAgICAgICAgIC8vIEZpcmUgXCJkcmFnZW5kXCIgb25seSBpZiBkcmFnc3RhcnQgaXMgcmVnaXN0ZXJlZFxuICAgICAgICAgICAgdGhpcy5oYXNEcmFnU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5icm9hZGNhc3QoZW5kRXZlbnQsIERyYWdFdmVudFR5cGUuRFJBR19FTkQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRyYWdTdGFydERlbGF5VGltZW91dCk7XG5cbiAgICAgICAgICAvLyBXZSBtdXN0IHJlbW92ZSB0aGUgdGhlIG5lc3RlZCBsaXN0ZW5lcnMgZXZlcnkgdGltZSBkcmFnIGNvbXBsZXRlcy5cbiAgICAgICAgICB0aGlzLm5lc3RlZExpc3RlbmVycy5tYXAoZXZlbnQgPT4gZXZlbnQoKSk7XG5cbiAgICAgICAgICAvLyBXZSBtdXN0IHJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXIgZnJvbSBjaGVja0RyYWdTdGFydEJvdW5kYXJ5XG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnkoZXZlbnRUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgJ2RvY3VtZW50JyxcbiAgICAgIGV2ZW50VHlwZSxcbiAgICAgIChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGRlbHRhWCA9IE1hdGguYWJzKHRoaXMuZ2V0TmF0aXZlRXZlbnRPYmplY3QobW92ZUV2ZW50KS5wYWdlWCAtIHRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VYKTtcbiAgICAgICAgY29uc3QgZGVsdGFZID0gTWF0aC5hYnModGhpcy5nZXROYXRpdmVFdmVudE9iamVjdChtb3ZlRXZlbnQpLnBhZ2VZIC0gdGhpcy5pbml0aWFsUG9zaXRpb24ucGFnZVkpO1xuXG4gICAgICAgIC8vIElmIHBvaW50ZXIgbW92ZSBkZWx0YSBleGNlZWRzIGhvcml6b250YWwgb3IgdmVydGljYWwgdGhyZXNob2xkLFxuICAgICAgICAvLyB3ZSBzaG91bGQgY2FuY2VsIGRyYWcgaW5pdGlhdGlvbi5cbiAgICAgICAgaWYgKGRlbHRhWCA+IDEgfHwgZGVsdGFZID4gMSkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRyYWdTdGFydERlbGF5VGltZW91dCk7XG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGJyb2FkY2FzdChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQsIGV2ZW50VHlwZTogRHJhZ0V2ZW50VHlwZSk6IHZvaWQge1xuICAgIGNvbnN0IGRyYWdFdmVudDogRHJhZ0V2ZW50SW50ZXJmYWNlPFQ+ID0gdGhpcy5nZW5lcmF0ZURyYWdFdmVudChldmVudCwgZXZlbnRUeXBlKTtcblxuICAgIHN3aXRjaCAoZHJhZ0V2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgRHJhZ0V2ZW50VHlwZS5EUkFHX1NUQVJUOlxuICAgICAgICB0aGlzLmRyYWdTdGFydC5uZXh0KGRyYWdFdmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEcmFnRXZlbnRUeXBlLkRSQUdfTU9WRTpcbiAgICAgICAgdGhpcy5kcmFnTW92ZS5uZXh0KGRyYWdFdmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEcmFnRXZlbnRUeXBlLkRSQUdfRU5EOlxuICAgICAgICB0aGlzLmRyYWdFbmQubmV4dChkcmFnRXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhcmUgc2V0IGFmdGVyIHRoZXkgYXJlIGJyb2FkY2FzdGVkIHRvIHRoZSBEcmFnZ2FibGVHaG9zdCBjb21wb25lbnQuXG4gICAgZHJhZ0V2ZW50Lmdob3N0RWxlbWVudCA9IHRoaXMuZ2hvc3RFbGVtZW50O1xuICAgIGRyYWdFdmVudC5kcm9wUG9pbnRQb3NpdGlvbiA9IHRoaXMuZHJvcFBvaW50UG9zaXRpb247XG5cbiAgICB0aGlzLmV2ZW50QnVzLmJyb2FkY2FzdChkcmFnRXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZURyYWdFdmVudChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQsIGV2ZW50VHlwZTogRHJhZ0V2ZW50VHlwZSk6IERyYWdFdmVudEludGVyZmFjZTxUPiB7XG4gICAgY29uc3QgbmF0aXZlRXZlbnQ6IGFueSA9IHRoaXMuZ2V0TmF0aXZlRXZlbnRPYmplY3QoZXZlbnQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IGV2ZW50VHlwZSxcbiAgICAgIGRyYWdQb3NpdGlvbjoge1xuICAgICAgICBwYWdlWDogbmF0aXZlRXZlbnQucGFnZVgsXG4gICAgICAgIHBhZ2VZOiBuYXRpdmVFdmVudC5wYWdlWSxcbiAgICAgICAgbW92ZVg6IG5hdGl2ZUV2ZW50LnBhZ2VYIC0gdGhpcy5pbml0aWFsUG9zaXRpb24ucGFnZVgsXG4gICAgICAgIG1vdmVZOiBuYXRpdmVFdmVudC5wYWdlWSAtIHRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VZLFxuICAgICAgfSxcbiAgICAgIGdyb3VwOiB0aGlzLmdyb3VwLFxuICAgICAgZHJhZ0RhdGFUcmFuc2ZlcjogdGhpcy5kcmFnRGF0YVRyYW5zZmVyLFxuICAgICAgZ2hvc3RFbGVtZW50OiB0aGlzLmdob3N0RWxlbWVudCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
|
|
3
|
-
* This software is released under MIT license.
|
|
4
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5
|
-
*/
|
|
6
|
-
import { Injectable } from '@angular/core';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "./drag-event-listener.service";
|
|
9
|
-
// This provider registers the drag handle element.
|
|
10
|
-
// When it registers a element as a drag handle, it attaches that element to the listeners from ClrDragEventListener.
|
|
11
|
-
// Also, it adds the "drag-handle" css class to the registered element through Renderer.
|
|
12
|
-
export class DragHandleRegistrarService {
|
|
13
|
-
constructor(dragEventListener, renderer) {
|
|
14
|
-
this.dragEventListener = dragEventListener;
|
|
15
|
-
this.renderer = renderer;
|
|
16
|
-
}
|
|
17
|
-
get defaultHandleEl() {
|
|
18
|
-
return this._defaultHandleEl;
|
|
19
|
-
}
|
|
20
|
-
set defaultHandleEl(el) {
|
|
21
|
-
this._defaultHandleEl = el; // defaultHandleEl will be usually the clrDraggable element.
|
|
22
|
-
// If the customHandleEl has been registered,
|
|
23
|
-
// don't make the defaultHandleEl the drag handle yet until the customHandleEl is unregistered.
|
|
24
|
-
if (!this._customHandleEl) {
|
|
25
|
-
this.makeElementHandle(this._defaultHandleEl);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
makeElementHandle(el) {
|
|
29
|
-
if (this._defaultHandleEl && this._defaultHandleEl !== el) {
|
|
30
|
-
// Before making an element the custom handle element,
|
|
31
|
-
// we should remove the existing drag-handle class from the draggable element.
|
|
32
|
-
this.renderer.removeClass(this._defaultHandleEl, 'drag-handle');
|
|
33
|
-
}
|
|
34
|
-
this.dragEventListener.attachDragListeners(el);
|
|
35
|
-
this.renderer.addClass(el, 'drag-handle');
|
|
36
|
-
}
|
|
37
|
-
get customHandleEl() {
|
|
38
|
-
return this._customHandleEl;
|
|
39
|
-
}
|
|
40
|
-
registerCustomHandle(el) {
|
|
41
|
-
this.dragEventListener.detachDragListeners(); // removes the existing listeners
|
|
42
|
-
this._customHandleEl = el;
|
|
43
|
-
this.makeElementHandle(this._customHandleEl);
|
|
44
|
-
}
|
|
45
|
-
unregisterCustomHandle() {
|
|
46
|
-
this.dragEventListener.detachDragListeners(); // removes the existing listeners
|
|
47
|
-
this.renderer.removeClass(this._customHandleEl, 'drag-handle');
|
|
48
|
-
delete this._customHandleEl;
|
|
49
|
-
// if default handle is set, make that handle
|
|
50
|
-
if (this._defaultHandleEl) {
|
|
51
|
-
this.makeElementHandle(this._defaultHandleEl);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
DragHandleRegistrarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragHandleRegistrarService, deps: [{ token: i1.DragEventListenerService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
56
|
-
DragHandleRegistrarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragHandleRegistrarService });
|
|
57
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragHandleRegistrarService, decorators: [{
|
|
58
|
-
type: Injectable
|
|
59
|
-
}], ctorParameters: function () { return [{ type: i1.DragEventListenerService }, { type: i0.Renderer2 }]; } });
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1oYW5kbGUtcmVnaXN0cmFyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy91dGlscy9kcmFnLWFuZC1kcm9wL3Byb3ZpZGVycy9kcmFnLWhhbmRsZS1yZWdpc3RyYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQzs7O0FBSXRELG1EQUFtRDtBQUNuRCxxSEFBcUg7QUFDckgsd0ZBQXdGO0FBRXhGLE1BQU0sT0FBTywwQkFBMEI7SUFrQnJDLFlBQW9CLGlCQUE4QyxFQUFVLFFBQW1CO1FBQTNFLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkI7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO0lBQUcsQ0FBQztJQWRuRyxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksZUFBZSxDQUFDLEVBQVE7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDLDREQUE0RDtRQUV4Riw2Q0FBNkM7UUFDN0MsK0ZBQStGO1FBQy9GLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7SUFJTyxpQkFBaUIsQ0FBQyxFQUFRO1FBQ2hDLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxFQUFFLEVBQUU7WUFDekQsc0RBQXNEO1lBQ3RELDhFQUE4RTtZQUM5RSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDakU7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxFQUFRO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsaUNBQWlDO1FBQy9FLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLGlDQUFpQztRQUMvRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM1Qiw2Q0FBNkM7UUFDN0MsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQzs7dUhBaERVLDBCQUEwQjsySEFBMUIsMEJBQTBCOzJGQUExQiwwQkFBMEI7a0JBRHRDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEcmFnRXZlbnRMaXN0ZW5lclNlcnZpY2UgfSBmcm9tICcuL2RyYWctZXZlbnQtbGlzdGVuZXIuc2VydmljZSc7XG5cbi8vIFRoaXMgcHJvdmlkZXIgcmVnaXN0ZXJzIHRoZSBkcmFnIGhhbmRsZSBlbGVtZW50LlxuLy8gV2hlbiBpdCByZWdpc3RlcnMgYSBlbGVtZW50IGFzIGEgZHJhZyBoYW5kbGUsIGl0IGF0dGFjaGVzIHRoYXQgZWxlbWVudCB0byB0aGUgbGlzdGVuZXJzIGZyb20gQ2xyRHJhZ0V2ZW50TGlzdGVuZXIuXG4vLyBBbHNvLCBpdCBhZGRzIHRoZSBcImRyYWctaGFuZGxlXCIgY3NzIGNsYXNzIHRvIHRoZSByZWdpc3RlcmVkIGVsZW1lbnQgdGhyb3VnaCBSZW5kZXJlci5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEcmFnSGFuZGxlUmVnaXN0cmFyU2VydmljZTxUPiB7XG4gIHByaXZhdGUgX2N1c3RvbUhhbmRsZUVsOiBhbnk7XG4gIHByaXZhdGUgX2RlZmF1bHRIYW5kbGVFbDogYW55O1xuXG4gIGdldCBkZWZhdWx0SGFuZGxlRWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRIYW5kbGVFbDtcbiAgfVxuXG4gIHNldCBkZWZhdWx0SGFuZGxlRWwoZWw6IE5vZGUpIHtcbiAgICB0aGlzLl9kZWZhdWx0SGFuZGxlRWwgPSBlbDsgLy8gZGVmYXVsdEhhbmRsZUVsIHdpbGwgYmUgdXN1YWxseSB0aGUgY2xyRHJhZ2dhYmxlIGVsZW1lbnQuXG5cbiAgICAvLyBJZiB0aGUgY3VzdG9tSGFuZGxlRWwgaGFzIGJlZW4gcmVnaXN0ZXJlZCxcbiAgICAvLyBkb24ndCBtYWtlIHRoZSBkZWZhdWx0SGFuZGxlRWwgdGhlIGRyYWcgaGFuZGxlIHlldCB1bnRpbCB0aGUgY3VzdG9tSGFuZGxlRWwgaXMgdW5yZWdpc3RlcmVkLlxuICAgIGlmICghdGhpcy5fY3VzdG9tSGFuZGxlRWwpIHtcbiAgICAgIHRoaXMubWFrZUVsZW1lbnRIYW5kbGUodGhpcy5fZGVmYXVsdEhhbmRsZUVsKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRyYWdFdmVudExpc3RlbmVyOiBEcmFnRXZlbnRMaXN0ZW5lclNlcnZpY2U8VD4sIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBwcml2YXRlIG1ha2VFbGVtZW50SGFuZGxlKGVsOiBOb2RlKSB7XG4gICAgaWYgKHRoaXMuX2RlZmF1bHRIYW5kbGVFbCAmJiB0aGlzLl9kZWZhdWx0SGFuZGxlRWwgIT09IGVsKSB7XG4gICAgICAvLyBCZWZvcmUgbWFraW5nIGFuIGVsZW1lbnQgdGhlIGN1c3RvbSBoYW5kbGUgZWxlbWVudCxcbiAgICAgIC8vIHdlIHNob3VsZCByZW1vdmUgdGhlIGV4aXN0aW5nIGRyYWctaGFuZGxlIGNsYXNzIGZyb20gdGhlIGRyYWdnYWJsZSBlbGVtZW50LlxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9kZWZhdWx0SGFuZGxlRWwsICdkcmFnLWhhbmRsZScpO1xuICAgIH1cbiAgICB0aGlzLmRyYWdFdmVudExpc3RlbmVyLmF0dGFjaERyYWdMaXN0ZW5lcnMoZWwpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWwsICdkcmFnLWhhbmRsZScpO1xuICB9XG5cbiAgZ2V0IGN1c3RvbUhhbmRsZUVsKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXN0b21IYW5kbGVFbDtcbiAgfVxuXG4gIHJlZ2lzdGVyQ3VzdG9tSGFuZGxlKGVsOiBOb2RlKSB7XG4gICAgdGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kZXRhY2hEcmFnTGlzdGVuZXJzKCk7IC8vIHJlbW92ZXMgdGhlIGV4aXN0aW5nIGxpc3RlbmVyc1xuICAgIHRoaXMuX2N1c3RvbUhhbmRsZUVsID0gZWw7XG4gICAgdGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9jdXN0b21IYW5kbGVFbCk7XG4gIH1cblxuICB1bnJlZ2lzdGVyQ3VzdG9tSGFuZGxlKCkge1xuICAgIHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJhZ0xpc3RlbmVycygpOyAvLyByZW1vdmVzIHRoZSBleGlzdGluZyBsaXN0ZW5lcnNcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX2N1c3RvbUhhbmRsZUVsLCAnZHJhZy1oYW5kbGUnKTtcbiAgICBkZWxldGUgdGhpcy5fY3VzdG9tSGFuZGxlRWw7XG4gICAgLy8gaWYgZGVmYXVsdCBoYW5kbGUgaXMgc2V0LCBtYWtlIHRoYXQgaGFuZGxlXG4gICAgaWYgKHRoaXMuX2RlZmF1bHRIYW5kbGVFbCkge1xuICAgICAgdGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9kZWZhdWx0SGFuZGxlRWwpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
|
|
3
|
-
* This software is released under MIT license.
|
|
4
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5
|
-
*/
|
|
6
|
-
import { Injectable } from '@angular/core';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "../../dom-adapter/dom-adapter";
|
|
9
|
-
// This service is used to capture the state of clrDraggable element
|
|
10
|
-
// at a certain event and passes it to clrDraggableGhost component.
|
|
11
|
-
export class DraggableSnapshotService {
|
|
12
|
-
constructor(domAdapter) {
|
|
13
|
-
this.domAdapter = domAdapter;
|
|
14
|
-
}
|
|
15
|
-
capture(el, event) {
|
|
16
|
-
this.draggableElClientRect = this.domAdapter.clientRect(el);
|
|
17
|
-
this.snapshotDragEvent = event;
|
|
18
|
-
}
|
|
19
|
-
discard() {
|
|
20
|
-
delete this.draggableElClientRect;
|
|
21
|
-
delete this.snapshotDragEvent;
|
|
22
|
-
}
|
|
23
|
-
get hasDraggableState() {
|
|
24
|
-
return !!this.snapshotDragEvent && !!this.draggableElClientRect;
|
|
25
|
-
}
|
|
26
|
-
get clientRect() {
|
|
27
|
-
return this.draggableElClientRect;
|
|
28
|
-
}
|
|
29
|
-
get dragEvent() {
|
|
30
|
-
return this.snapshotDragEvent;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
DraggableSnapshotService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DraggableSnapshotService, deps: [{ token: i1.DomAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
34
|
-
DraggableSnapshotService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DraggableSnapshotService });
|
|
35
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DraggableSnapshotService, decorators: [{
|
|
36
|
-
type: Injectable
|
|
37
|
-
}], ctorParameters: function () { return [{ type: i1.DomAdapter }]; } });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLXNuYXBzaG90LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy91dGlscy9kcmFnLWFuZC1kcm9wL3Byb3ZpZGVycy9kcmFnZ2FibGUtc25hcHNob3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBSzNDLG9FQUFvRTtBQUNwRSxtRUFBbUU7QUFFbkUsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQztJQUs5QyxPQUFPLENBQUMsRUFBUSxFQUFFLEtBQTRCO1FBQzVDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ2xFLENBQUM7SUFDRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQzs7cUhBdEJVLHdCQUF3Qjt5SEFBeEIsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRG9tQWRhcHRlciB9IGZyb20gJy4uLy4uL2RvbS1hZGFwdGVyL2RvbS1hZGFwdGVyJztcbmltcG9ydCB7IERyYWdFdmVudEludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZHJhZy1ldmVudC5pbnRlcmZhY2UnO1xuXG4vLyBUaGlzIHNlcnZpY2UgaXMgdXNlZCB0byBjYXB0dXJlIHRoZSBzdGF0ZSBvZiBjbHJEcmFnZ2FibGUgZWxlbWVudFxuLy8gYXQgYSBjZXJ0YWluIGV2ZW50IGFuZCBwYXNzZXMgaXQgdG8gY2xyRHJhZ2dhYmxlR2hvc3QgY29tcG9uZW50LlxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERyYWdnYWJsZVNuYXBzaG90U2VydmljZTxUPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZG9tQWRhcHRlcjogRG9tQWRhcHRlcikge31cblxuICBwcml2YXRlIGRyYWdnYWJsZUVsQ2xpZW50UmVjdDogQ2xpZW50UmVjdDtcbiAgcHJpdmF0ZSBzbmFwc2hvdERyYWdFdmVudDogRHJhZ0V2ZW50SW50ZXJmYWNlPFQ+O1xuXG4gIGNhcHR1cmUoZWw6IE5vZGUsIGV2ZW50OiBEcmFnRXZlbnRJbnRlcmZhY2U8VD4pOiB2b2lkIHtcbiAgICB0aGlzLmRyYWdnYWJsZUVsQ2xpZW50UmVjdCA9IHRoaXMuZG9tQWRhcHRlci5jbGllbnRSZWN0KGVsKTtcbiAgICB0aGlzLnNuYXBzaG90RHJhZ0V2ZW50ID0gZXZlbnQ7XG4gIH1cbiAgZGlzY2FyZCgpOiB2b2lkIHtcbiAgICBkZWxldGUgdGhpcy5kcmFnZ2FibGVFbENsaWVudFJlY3Q7XG4gICAgZGVsZXRlIHRoaXMuc25hcHNob3REcmFnRXZlbnQ7XG4gIH1cbiAgZ2V0IGhhc0RyYWdnYWJsZVN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc25hcHNob3REcmFnRXZlbnQgJiYgISF0aGlzLmRyYWdnYWJsZUVsQ2xpZW50UmVjdDtcbiAgfVxuICBnZXQgY2xpZW50UmVjdCgpOiBDbGllbnRSZWN0IHtcbiAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGVFbENsaWVudFJlY3Q7XG4gIH1cbiAgZ2V0IGRyYWdFdmVudCgpOiBEcmFnRXZlbnRJbnRlcmZhY2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnNuYXBzaG90RHJhZ0V2ZW50O1xuICB9XG59XG4iXX0=
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
|
|
3
|
-
* This software is released under MIT license.
|
|
4
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5
|
-
*/
|
|
6
|
-
import { Injectable } from '@angular/core';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
// This service class adds and removes the "in-drag" class to the document body element
|
|
9
|
-
// through its public enter() and exit() methods.
|
|
10
|
-
export class GlobalDragModeService {
|
|
11
|
-
constructor(renderer) {
|
|
12
|
-
this.renderer = renderer;
|
|
13
|
-
}
|
|
14
|
-
enter() {
|
|
15
|
-
this.renderer.addClass(document.body, 'in-drag');
|
|
16
|
-
}
|
|
17
|
-
exit() {
|
|
18
|
-
this.renderer.removeClass(document.body, 'in-drag');
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
GlobalDragModeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GlobalDragModeService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
22
|
-
GlobalDragModeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GlobalDragModeService });
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GlobalDragModeService, decorators: [{
|
|
24
|
-
type: Injectable
|
|
25
|
-
}], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWRyYWctbW9kZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdXRpbHMvZHJhZy1hbmQtZHJvcC9wcm92aWRlcnMvZ2xvYmFsLWRyYWctbW9kZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDOztBQUV0RCx1RkFBdUY7QUFDdkYsaURBQWlEO0FBRWpELE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsWUFBb0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUFHLENBQUM7SUFFM0MsS0FBSztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7O2tIQVRVLHFCQUFxQjtzSEFBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBUaGlzIHNlcnZpY2UgY2xhc3MgYWRkcyBhbmQgcmVtb3ZlcyB0aGUgXCJpbi1kcmFnXCIgY2xhc3MgdG8gdGhlIGRvY3VtZW50IGJvZHkgZWxlbWVudFxuLy8gdGhyb3VnaCBpdHMgcHVibGljIGVudGVyKCkgYW5kIGV4aXQoKSBtZXRob2RzLlxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdsb2JhbERyYWdNb2RlU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBlbnRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksICdpbi1kcmFnJyk7XG4gIH1cblxuICBleGl0KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ2luLWRyYWcnKTtcbiAgfVxufVxuIl19
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
|
|
3
|
-
* This software is released under MIT license.
|
|
4
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5
|
-
*/
|
|
6
|
-
export {};
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtdHJhcC1jb25maWcuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdXRpbHMvZm9jdXMtdHJhcC9mb2N1cy10cmFwLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMiBWTXdhcmUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBGb2N1c1RyYXBDb25maWcge1xuICBzdHJpY3Q6IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
|
|
3
|
-
* This software is released under MIT license.
|
|
4
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5
|
-
*/
|
|
6
|
-
import { Injectable } from '@angular/core';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class FocusTrapTracker {
|
|
9
|
-
constructor() {
|
|
10
|
-
this._previousFocusTraps = [];
|
|
11
|
-
}
|
|
12
|
-
get current() {
|
|
13
|
-
return this._current;
|
|
14
|
-
}
|
|
15
|
-
set current(value) {
|
|
16
|
-
this._previousFocusTraps.push(this._current);
|
|
17
|
-
this._current = value;
|
|
18
|
-
}
|
|
19
|
-
get nbFocusTrappers() {
|
|
20
|
-
return this._previousFocusTraps.length;
|
|
21
|
-
}
|
|
22
|
-
activatePreviousTrapper() {
|
|
23
|
-
this._current = this._previousFocusTraps.pop();
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
FocusTrapTracker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
27
|
-
FocusTrapTracker.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapTracker, providedIn: 'root' });
|
|
28
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapTracker, decorators: [{
|
|
29
|
-
type: Injectable,
|
|
30
|
-
args: [{ providedIn: 'root' }]
|
|
31
|
-
}] });
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtdHJhcC10cmFja2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy91dGlscy9mb2N1cy10cmFwL2ZvY3VzLXRyYXAtdHJhY2tlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBRVUsd0JBQW1CLEdBQXlCLEVBQUUsQ0FBQztLQW1CeEQ7SUFoQkMsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUF5QjtRQUNuQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztJQUN6QyxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2pELENBQUM7OzZHQW5CVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQURILE1BQU07MkZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRm9jdXNUcmFwRGlyZWN0aXZlIH0gZnJvbSAnLi9mb2N1cy10cmFwLmRpcmVjdGl2ZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRm9jdXNUcmFwVHJhY2tlciB7XG4gIHByaXZhdGUgX3ByZXZpb3VzRm9jdXNUcmFwczogRm9jdXNUcmFwRGlyZWN0aXZlW10gPSBbXTtcbiAgcHJpdmF0ZSBfY3VycmVudDogRm9jdXNUcmFwRGlyZWN0aXZlO1xuXG4gIGdldCBjdXJyZW50KCk6IEZvY3VzVHJhcERpcmVjdGl2ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cblxuICBzZXQgY3VycmVudCh2YWx1ZTogRm9jdXNUcmFwRGlyZWN0aXZlKSB7XG4gICAgdGhpcy5fcHJldmlvdXNGb2N1c1RyYXBzLnB1c2godGhpcy5fY3VycmVudCk7XG4gICAgdGhpcy5fY3VycmVudCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IG5iRm9jdXNUcmFwcGVycygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wcmV2aW91c0ZvY3VzVHJhcHMubGVuZ3RoO1xuICB9XG5cbiAgYWN0aXZhdGVQcmV2aW91c1RyYXBwZXIoKSB7XG4gICAgdGhpcy5fY3VycmVudCA9IHRoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wb3AoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
|
|
3
|
-
* This software is released under MIT license.
|
|
4
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5
|
-
*/
|
|
6
|
-
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
7
|
-
import { Directive, HostListener, Inject, Input, PLATFORM_ID, } from '@angular/core';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "./focus-trap-tracker.service";
|
|
10
|
-
export const FOCUSABLES = '[href]:not([tabindex="-1"]), button:not([disabled]):not([tabindex="-1"]), input:not([disabled]):not([tabindex="-1"]), select:not([disabled]):not([tabindex="-1"]), textarea:not([disabled]):not([tabindex="-1"]), [contenteditable="true"]:not([tabindex="-1"]), [tabindex]:not([tabindex="-1"]) ';
|
|
11
|
-
export class FocusTrapDirective {
|
|
12
|
-
constructor(el, injector, focusTrapsTracker, renderer, platformId) {
|
|
13
|
-
this.el = el;
|
|
14
|
-
this.injector = injector;
|
|
15
|
-
this.focusTrapsTracker = focusTrapsTracker;
|
|
16
|
-
this.renderer = renderer;
|
|
17
|
-
this.platformId = platformId;
|
|
18
|
-
this.localFocusEscaped = false;
|
|
19
|
-
this._config = {
|
|
20
|
-
strict: true,
|
|
21
|
-
};
|
|
22
|
-
this.document = this.injector.get(DOCUMENT);
|
|
23
|
-
this.focusTrapsTracker.current = this;
|
|
24
|
-
}
|
|
25
|
-
set config(config) {
|
|
26
|
-
this._config = Object.assign(this._config, config === '' ? {} : config);
|
|
27
|
-
}
|
|
28
|
-
onFocusIn(event) {
|
|
29
|
-
const nativeElement = this.el.nativeElement;
|
|
30
|
-
if (this.focusTrapsTracker.current !== this ||
|
|
31
|
-
!isPlatformBrowser(this.platformId) ||
|
|
32
|
-
this.localFocusEscaped ||
|
|
33
|
-
nativeElement.contains(event.target)) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
if (event.target === this.topReboundEl && nativeElement.contains(event.relatedTarget)) {
|
|
37
|
-
this.focusLastFocusable();
|
|
38
|
-
// if it fails to focus element inside the trap, focus the trap element.
|
|
39
|
-
this.focusTrapElIfOutside();
|
|
40
|
-
}
|
|
41
|
-
else if (event.target === this.bottomReboundEl && nativeElement.contains(event.relatedTarget)) {
|
|
42
|
-
this.focusFirstFocusable();
|
|
43
|
-
// if it fails to focus element inside the trap, focus the trap element.
|
|
44
|
-
this.focusTrapElIfOutside();
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
this._config.strict ? this.el.nativeElement.focus() : (this.localFocusEscaped = true);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
createFocusableOffScreenEl() {
|
|
51
|
-
// Not using Renderer2's createElement method because that leads to DOM leakage.
|
|
52
|
-
// https://github.com/angular/angular/issues/26954
|
|
53
|
-
const offScreenSpan = this.document.createElement('span');
|
|
54
|
-
this.renderer.setAttribute(offScreenSpan, 'tabindex', '0');
|
|
55
|
-
this.renderer.addClass(offScreenSpan, 'offscreen-focus-rebounder');
|
|
56
|
-
return offScreenSpan;
|
|
57
|
-
}
|
|
58
|
-
addReboundEls() {
|
|
59
|
-
if (isPlatformBrowser(this.platformId)) {
|
|
60
|
-
this.topReboundEl = this.createFocusableOffScreenEl();
|
|
61
|
-
this.bottomReboundEl = this.createFocusableOffScreenEl();
|
|
62
|
-
const hostElement = this.el.nativeElement;
|
|
63
|
-
// Add reboundBeforeTrapEl right outside of host element
|
|
64
|
-
this.renderer.insertBefore(hostElement.parentElement, this.topReboundEl, hostElement);
|
|
65
|
-
// Add reboundAfterTrapEl right after host element
|
|
66
|
-
if (hostElement.nextSibling) {
|
|
67
|
-
this.renderer.insertBefore(hostElement.parentNode, this.bottomReboundEl, hostElement.nextSibling);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
this.renderer.appendChild(hostElement.parentNode, this.bottomReboundEl);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
removeReboundEls() {
|
|
75
|
-
if (isPlatformBrowser(this.platformId) && this.topReboundEl && this.bottomReboundEl) {
|
|
76
|
-
this.parentElement.removeChild(this.topReboundEl);
|
|
77
|
-
this.parentElement.removeChild(this.bottomReboundEl);
|
|
78
|
-
// These are here to to make sure that
|
|
79
|
-
// we completely delete all traces of the removed DOM objects.
|
|
80
|
-
delete this.topReboundEl;
|
|
81
|
-
delete this.bottomReboundEl;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
setPreviousFocus() {
|
|
85
|
-
if (this.previousActiveElement && this.previousActiveElement.focus) {
|
|
86
|
-
this.previousActiveElement.focus();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
ngOnInit() {
|
|
90
|
-
if (isPlatformBrowser(this.platformId)) {
|
|
91
|
-
this.renderer.setAttribute(this.el.nativeElement, 'tabindex', '-1');
|
|
92
|
-
this.el.nativeElement.focus();
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
ngAfterViewInit() {
|
|
96
|
-
if (isPlatformBrowser(this.platformId)) {
|
|
97
|
-
this.previousActiveElement = this.document.activeElement;
|
|
98
|
-
this.parentElement = this.el.nativeElement.parentElement;
|
|
99
|
-
}
|
|
100
|
-
this.addReboundEls();
|
|
101
|
-
}
|
|
102
|
-
get potentiallyFocusableEls() {
|
|
103
|
-
return [...this.el.nativeElement.querySelectorAll(FOCUSABLES)];
|
|
104
|
-
}
|
|
105
|
-
focusFirstFocusable() {
|
|
106
|
-
for (let i = 0; i < this.potentiallyFocusableEls.length; i++) {
|
|
107
|
-
this.firstFocusableEl = this.focusElement(this.potentiallyFocusableEls[i]);
|
|
108
|
-
if (this.firstFocusableEl) {
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
focusLastFocusable() {
|
|
114
|
-
for (let i = this.potentiallyFocusableEls.length - 1; i >= 0; i--) {
|
|
115
|
-
this.lastFocusableEl = this.focusElement(this.potentiallyFocusableEls[i]);
|
|
116
|
-
if (this.lastFocusableEl) {
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
focusTrapElIfOutside() {
|
|
122
|
-
if (!this.el.nativeElement.contains(document.activeElement)) {
|
|
123
|
-
this.el.nativeElement.focus();
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
focusElement(el) {
|
|
127
|
-
if (el && el.focus) {
|
|
128
|
-
el.focus();
|
|
129
|
-
if (document.activeElement === el) {
|
|
130
|
-
return el;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
ngOnDestroy() {
|
|
136
|
-
this.removeReboundEls();
|
|
137
|
-
this.setPreviousFocus();
|
|
138
|
-
this.focusTrapsTracker.activatePreviousTrapper();
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
FocusTrapDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapDirective, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1.FocusTrapTracker }, { token: i0.Renderer2 }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive });
|
|
142
|
-
FocusTrapDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: { config: ["clrFocusTrap", "config"] }, host: { listeners: { "document:focusin": "onFocusIn($event)" } }, ngImport: i0 });
|
|
143
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapDirective, decorators: [{
|
|
144
|
-
type: Directive,
|
|
145
|
-
args: [{
|
|
146
|
-
selector: '[clrFocusTrap]',
|
|
147
|
-
}]
|
|
148
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }, { type: i1.FocusTrapTracker }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
|
|
149
|
-
type: Inject,
|
|
150
|
-
args: [PLATFORM_ID]
|
|
151
|
-
}] }]; }, propDecorators: { config: [{
|
|
152
|
-
type: Input,
|
|
153
|
-
args: ['clrFocusTrap']
|
|
154
|
-
}], onFocusIn: [{
|
|
155
|
-
type: HostListener,
|
|
156
|
-
args: ['document:focusin', ['$event']]
|
|
157
|
-
}] } });
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtdHJhcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy91dGlscy9mb2N1cy10cmFwL2ZvY3VzLXRyYXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUVOLEtBQUssRUFHTCxXQUFXLEdBRVosTUFBTSxlQUFlLENBQUM7OztBQUt2QixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQ3JCLG1TQUFtUyxDQUFDO0FBS3RTLE1BQU0sT0FBTyxrQkFBa0I7SUFZN0IsWUFDVSxFQUFjLEVBQ2QsUUFBa0IsRUFDbEIsaUJBQW1DLEVBQ25DLFFBQW1CLEVBQ0UsVUFBZTtRQUpwQyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDRSxlQUFVLEdBQVYsVUFBVSxDQUFLO1FBZnRDLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQXFCMUIsWUFBTyxHQUFvQjtZQUNqQyxNQUFNLEVBQUUsSUFBSTtTQUNiLENBQUM7UUFOQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFLRCxJQUNJLE1BQU0sQ0FBQyxNQUFnQztRQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEtBQUssRUFB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QUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNuRCxDQUFDOzsrR0E1SlUsa0JBQWtCLDZIQWlCbkIsV0FBVzttR0FqQlYsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBSDlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0I7OzBCQWtCSSxNQUFNOzJCQUFDLFdBQVc7NENBVWpCLE1BQU07c0JBRFQsS0FBSzt1QkFBQyxjQUFjO2dCQU1yQixTQUFTO3NCQURSLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IERPQ1VNRU5ULCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBQTEFURk9STV9JRCxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRm9jdXNUcmFwQ29uZmlnIH0gZnJvbSAnLi9mb2N1cy10cmFwLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRm9jdXNUcmFwVHJhY2tlciB9IGZyb20gJy4vZm9jdXMtdHJhcC10cmFja2VyLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgRk9DVVNBQkxFUyA9XG4gICdbaHJlZl06bm90KFt0YWJpbmRleD1cIi0xXCJdKSwgYnV0dG9uOm5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PVwiLTFcIl0pLCBpbnB1dDpub3QoW2Rpc2FibGVkXSk6bm90KFt0YWJpbmRleD1cIi0xXCJdKSwgc2VsZWN0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PVwiLTFcIl0pLCB0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSk6bm90KFt0YWJpbmRleD1cIi0xXCJdKSwgW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl06bm90KFt0YWJpbmRleD1cIi0xXCJdKSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pICc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjbHJGb2N1c1RyYXBdJyxcbn0pXG5leHBvcnQgY2xhc3MgRm9jdXNUcmFwRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHByZXZpb3VzQWN0aXZlRWxlbWVudDogYW55O1xuICBwcml2YXRlIGxvY2FsRm9jdXNFc2NhcGVkID0gZmFsc2U7XG4gIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50O1xuICBwcml2YXRlIHBhcmVudEVsZW1lbnQ6IEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSB0b3BSZWJvdW5kRWw6IGFueTtcbiAgcHJpdmF0ZSBib3R0b21SZWJvdW5kRWw6IGFueTtcblxuICBwcml2YXRlIGZpcnN0Rm9jdXNhYmxlRWw6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIGxhc3RGb2N1c2FibGVFbDogSFRNTEVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGZvY3VzVHJhcHNUcmFja2VyOiBGb2N1c1RyYXBUcmFja2VyLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueVxuICApIHtcbiAgICB0aGlzLmRvY3VtZW50ID0gdGhpcy5pbmplY3Rvci5nZXQoRE9DVU1FTlQpO1xuICAgIHRoaXMuZm9jdXNUcmFwc1RyYWNrZXIuY3VycmVudCA9IHRoaXM7XG4gIH1cblxuICBwcml2YXRlIF9jb25maWc6IEZvY3VzVHJhcENvbmZpZyA9IHtcbiAgICBzdHJpY3Q6IHRydWUsXG4gIH07XG4gIEBJbnB1dCgnY2xyRm9jdXNUcmFwJylcbiAgc2V0IGNvbmZpZyhjb25maWc6IEZvY3VzVHJhcENvbmZpZyB8IHN0cmluZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IE9iamVjdC5hc3NpZ24odGhpcy5fY29uZmlnLCBjb25maWcgPT09ICcnID8ge30gOiBjb25maWcpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Zm9jdXNpbicsIFsnJGV2ZW50J10pXG4gIG9uRm9jdXNJbihldmVudDogYW55KSB7XG4gICAgY29uc3QgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKFxuICAgICAgdGhpcy5mb2N1c1RyYXBzVHJhY2tlci5jdXJyZW50ICE9PSB0aGlzIHx8XG4gICAgICAhaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fFxuICAgICAgdGhpcy5sb2NhbEZvY3VzRXNjYXBlZCB8fFxuICAgICAgbmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMudG9wUmVib3VuZEVsICYmIG5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgIHRoaXMuZm9jdXNMYXN0Rm9jdXNhYmxlKCk7XG4gICAgICAvLyBpZiBpdCBmYWlscyB0byBmb2N1cyBlbGVtZW50IGluc2lkZSB0aGUgdHJhcCwgZm9jdXMgdGhlIHRyYXAgZWxlbWVudC5cbiAgICAgIHRoaXMuZm9jdXNUcmFwRWxJZk91dHNpZGUoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5ib3R0b21SZWJvdW5kRWwgJiYgbmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgdGhpcy5mb2N1c0ZpcnN0Rm9jdXNhYmxlKCk7XG4gICAgICAvLyBpZiBpdCBmYWlscyB0byBmb2N1cyBlbGVtZW50IGluc2lkZSB0aGUgdHJhcCwgZm9jdXMgdGhlIHRyYXAgZWxlbWVudC5cbiAgICAgIHRoaXMuZm9jdXNUcmFwRWxJZk91dHNpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY29uZmlnLnN0cmljdCA/IHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpIDogKHRoaXMubG9jYWxGb2N1c0VzY2FwZWQgPSB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvY3VzYWJsZU9mZlNjcmVlbkVsKCk6IGFueSB7XG4gICAgLy8gTm90IHVzaW5nIFJlbmRlcmVyMidzIGNyZWF0ZUVsZW1lbnQgbWV0aG9kIGJlY2F1c2UgdGhhdCBsZWFkcyB0byBET00gbGVha2FnZS5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8yNjk1NFxuICAgIGNvbnN0IG9mZlNjcmVlblNwYW4gPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShvZmZTY3JlZW5TcGFuLCAndGFiaW5kZXgnLCAnMCcpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mob2ZmU2NyZWVuU3BhbiwgJ29mZnNjcmVlbi1mb2N1cy1yZWJvdW5kZXInKTtcblxuICAgIHJldHVybiBvZmZTY3JlZW5TcGFuO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSZWJvdW5kRWxzKCkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLnRvcFJlYm91bmRFbCA9IHRoaXMuY3JlYXRlRm9jdXNhYmxlT2ZmU2NyZWVuRWwoKTtcbiAgICAgIHRoaXMuYm90dG9tUmVib3VuZEVsID0gdGhpcy5jcmVhdGVGb2N1c2FibGVPZmZTY3JlZW5FbCgpO1xuICAgICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAvLyBBZGQgcmVib3VuZEJlZm9yZVRyYXBFbCByaWdodCBvdXRzaWRlIG9mIGhvc3QgZWxlbWVudFxuICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoaG9zdEVsZW1lbnQucGFyZW50RWxlbWVudCwgdGhpcy50b3BSZWJvdW5kRWwsIGhvc3RFbGVtZW50KTtcbiAgICAgIC8vIEFkZCByZWJvdW5kQWZ0ZXJUcmFwRWwgcmlnaHQgYWZ0ZXIgaG9zdCBlbGVtZW50XG4gICAgICBpZiAoaG9zdEVsZW1lbnQubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoaG9zdEVsZW1lbnQucGFyZW50Tm9kZSwgdGhpcy5ib3R0b21SZWJvdW5kRWwsIGhvc3RFbGVtZW50Lm5leHRTaWJsaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoaG9zdEVsZW1lbnQucGFyZW50Tm9kZSwgdGhpcy5ib3R0b21SZWJvdW5kRWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVib3VuZEVscygpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSAmJiB0aGlzLnRvcFJlYm91bmRFbCAmJiB0aGlzLmJvdHRvbVJlYm91bmRFbCkge1xuICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMudG9wUmVib3VuZEVsKTtcbiAgICAgIHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmJvdHRvbVJlYm91bmRFbCk7XG4gICAgICAvLyBUaGVzZSBhcmUgaGVyZSB0byB0byBtYWtlIHN1cmUgdGhhdFxuICAgICAgLy8gd2UgY29tcGxldGVseSBkZWxldGUgYWxsIHRyYWNlcyBvZiB0aGUgcmVtb3ZlZCBET00gb2JqZWN0cy5cbiAgICAgIGRlbGV0ZSB0aGlzLnRvcFJlYm91bmRFbDtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvdHRvbVJlYm91bmRFbDtcbiAgICB9XG4gIH1cblxuICBzZXRQcmV2aW91c0ZvY3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByZXZpb3VzQWN0aXZlRWxlbWVudCAmJiB0aGlzLnByZXZpb3VzQWN0aXZlRWxlbWVudC5mb2N1cykge1xuICAgICAgdGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgdGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICB0aGlzLnBhcmVudEVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFJlYm91bmRFbHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBvdGVudGlhbGx5Rm9jdXNhYmxlRWxzKCk6IEhUTUxFbGVtZW50W10ge1xuICAgIHJldHVybiBbLi4udGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoRk9DVVNBQkxFUyldO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0ZpcnN0Rm9jdXNhYmxlKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5maXJzdEZvY3VzYWJsZUVsID0gdGhpcy5mb2N1c0VsZW1lbnQodGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVsc1tpXSk7XG4gICAgICBpZiAodGhpcy5maXJzdEZvY3VzYWJsZUVsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNMYXN0Rm9jdXNhYmxlKCkge1xuICAgIGZvciAobGV0IGkgPSB0aGlzLnBvdGVudGlhbGx5Rm9jdXNhYmxlRWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLmxhc3RGb2N1c2FibGVFbCA9IHRoaXMuZm9jdXNFbGVtZW50KHRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHNbaV0pO1xuICAgICAgaWYgKHRoaXMubGFzdEZvY3VzYWJsZUVsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNUcmFwRWxJZk91dHNpZGUoKSB7XG4gICAgaWYgKCF0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNFbGVtZW50KGVsOiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgICBpZiAoZWwgJiYgZWwuZm9jdXMpIHtcbiAgICAgIGVsLmZvY3VzKCk7XG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZWwpIHtcbiAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlUmVib3VuZEVscygpO1xuICAgIHRoaXMuc2V0UHJldmlvdXNGb2N1cygpO1xuICAgIHRoaXMuZm9jdXNUcmFwc1RyYWNrZXIuYWN0aXZhdGVQcmV2aW91c1RyYXBwZXIoKTtcbiAgfVxufVxuIl19
|