@tft/interact 18.0.0 → 21.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/tft-interact.mjs +58 -48
- package/fesm2022/tft-interact.mjs.map +1 -1
- package/package.json +5 -7
- package/types/tft-interact.d.ts +506 -0
- package/esm2022/index.mjs +0 -6
- package/esm2022/lib/directives/account-for-scale.directive.mjs +0 -26
- package/esm2022/lib/directives/apply-scale.directive.mjs +0 -28
- package/esm2022/lib/directives/auto-scroll.directive.mjs +0 -56
- package/esm2022/lib/directives/drag-preview.directive.mjs +0 -20
- package/esm2022/lib/directives/drag-root.directive.mjs +0 -32
- package/esm2022/lib/directives/draggable.directive.mjs +0 -320
- package/esm2022/lib/directives/dropzone.directive.mjs +0 -114
- package/esm2022/lib/directives/gesturable.directive.mjs +0 -82
- package/esm2022/lib/directives/index.mjs +0 -10
- package/esm2022/lib/directives/resizable.directive.mjs +0 -228
- package/esm2022/lib/interact.module.mjs +0 -66
- package/esm2022/lib/models/index.mjs +0 -2
- package/esm2022/lib/models/interact.mjs +0 -28
- package/esm2022/lib/pipes/array-of-n.pipe.mjs +0 -22
- package/esm2022/lib/pipes/index.mjs +0 -2
- package/esm2022/lib/services/interact.service.mjs +0 -197
- package/esm2022/lib/utils/helpers.mjs +0 -35
- package/esm2022/lib/utils/index.mjs +0 -2
- package/esm2022/tft-interact.mjs +0 -5
- package/index.d.ts +0 -5
- package/lib/directives/account-for-scale.directive.d.ts +0 -15
- package/lib/directives/apply-scale.directive.d.ts +0 -11
- package/lib/directives/auto-scroll.directive.d.ts +0 -34
- package/lib/directives/drag-preview.directive.d.ts +0 -10
- package/lib/directives/drag-root.directive.d.ts +0 -15
- package/lib/directives/draggable.directive.d.ts +0 -75
- package/lib/directives/dropzone.directive.d.ts +0 -39
- package/lib/directives/gesturable.directive.d.ts +0 -26
- package/lib/directives/index.d.ts +0 -9
- package/lib/directives/resizable.directive.d.ts +0 -60
- package/lib/interact.module.d.ts +0 -20
- package/lib/models/index.d.ts +0 -1
- package/lib/models/interact.d.ts +0 -140
- package/lib/pipes/array-of-n.pipe.d.ts +0 -12
- package/lib/pipes/index.d.ts +0 -1
- package/lib/services/interact.service.d.ts +0 -83
- package/lib/utils/helpers.d.ts +0 -12
- package/lib/utils/index.d.ts +0 -1
- package/tft-interact-18.0.0.tgz +0 -0
|
@@ -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
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: InteractService, deps: [{ token: i0.RendererFactory2 }, { token: i0.NgZone }, { token: INTERACT_ROOT_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
186
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: InteractService, providedIn: 'root' }); }
|
|
187
|
-
}
|
|
188
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: InteractService, decorators: [{
|
|
189
|
-
type: Injectable,
|
|
190
|
-
args: [{ providedIn: 'root' }]
|
|
191
|
-
}], ctorParameters: () => [{ 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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QUMscUJBQXFCLEVBQUUsQ0FBQztRQUNyRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNyRCxNQUFNLFFBQVEsR0FBRyxLQUFLO1lBQ3BCLENBQUMsQ0FBQztnQkFDRixDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUssQ0FBQztnQkFDaEQsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUM7YUFDNUMsQ0FBQyxDQUFDLENBQUM7WUFDRixDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSTtZQUNoQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRztTQUNqQyxDQUFDO1FBQ0Ysb0VBQW9FO1FBQ3BFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7OEdBMU1VLGVBQWUsd0VBWUosb0JBQW9CO2tIQVovQixlQUFlLGNBREgsTUFBTTs7MkZBQ2xCLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkFhM0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IEluamVjdGFibGUsIFJlbmRlcmVyMiwgUmVuZGVyZXJGYWN0b3J5MiwgTmdab25lLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCwgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIFRmdENvb3JkcywgRGVsdGEsIFNpemUsIFBvc2l0aW9uLCBJbnRlcmFjdGFibGVSZWdpc3RyeSxcbiAgZGVmYXVsdFBvc2l0aW9uLCBkZWZhdWx0U2l6ZSwgZGVmYXVsdERlbHRhLCBERUZBVUxUX1JFR0lTVFJZX0lELCBUZnREcmFnRWxlbWVudCwgVGZ0UmVzaXplRWxlbWVudCwgSU5URVJBQ1RfUk9PVF9DT05GSUcsIEludGVyYWN0Um9vdENvbmZpZ1xufSBmcm9tICcuLi9tb2RlbHMnO1xuXG5cblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgSW50ZXJhY3RTZXJ2aWNlIHtcblxuICBwcml2YXRlIF9pbnRlcmFjdGFibGVJbmRleCA9IDA7XG4gIHByaXZhdGUgX2Ryb3B6b25lSW5kZXggPSAwO1xuICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjI7XG5cbiAgLy8gVE9ETzogY29uc2lkZXIgdXNpbmcgTWFwIGhlcmVcbiAgcmVhZG9ubHkgZHJhZ1JlZ2lzdHJ5U3lzdGVtOiB7IFtrZXk6IHN0cmluZ106IEludGVyYWN0YWJsZVJlZ2lzdHJ5IH0gPSB7IH07XG4gIHByaXZhdGUgY3NzVW5pdCA9ICdweCdcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTIsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KElOVEVSQUNUX1JPT1RfQ09ORklHKSBwdWJsaWMgcm9vdENvbmZpZ1xuICApIHtcbiAgICB0aGlzLnJlbmRlcmVyID0gdGhpcy5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XG4gICAgdGhpcy5jc3NVbml0ID0gcm9vdENvbmZpZz8uY3NzRGltZW5zaW9uVW5pdCB8fCAncHgnO1xuICB9XG5cbiAgYWRkRGVsdGFUb1Bvc2l0aW9uKGRlbHRhOiBEZWx0YSwgcG9zaXRpb246IFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGRlbHRhLmRlbHRhWCArIHBvc2l0aW9uLngsXG4gICAgICB5OiBkZWx0YS5kZWx0YVkgKyBwb3NpdGlvbi55LFxuICAgICAgdGFyZ2V0RWxlbWVudDogcG9zaXRpb24udGFyZ2V0RWxlbWVudCB8fCBkZWx0YS50YXJnZXRFbGVtZW50XG4gICAgfVxuICB9XG5cbiAgYWRkUmVnaXN0cnlUb1N5c3RlbShjdXN0b21SZWdpc3RyeUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHJlZ2lzdHJ5SWQgPSBjdXN0b21SZWdpc3RyeUlkIHx8IHRoaXMuY3JlYXRlRHJvcHpvbmVJZCh0aGlzLl9kcm9wem9uZUluZGV4KyspO1xuICAgIHRoaXMuZHJhZ1JlZ2lzdHJ5U3lzdGVtW3JlZ2lzdHJ5SWRdID0ge307XG4gICAgcmV0dXJuIHJlZ2lzdHJ5SWQ7XG4gIH1cblxuICBhZGREcmFnZ2FibGVUb1JlZ2lzdHJ5KGN1c3RvbVJlZ2lzdHJ5SWQgPSBudWxsLCBpbnRlcmFjdGFibGVJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwgKSB7XG4gICAgY29uc3QgcmVnaXN0cnlJZCA9IGN1c3RvbVJlZ2lzdHJ5SWQgfHwgREVGQVVMVF9SRUdJU1RSWV9JRDtcbiAgICAvLyBpZiB3ZSBwYXNzIGFuIGlkIHRvIGNyZWF0ZUludGVyYWN0YWJsZUlkIHRoZW4gaXQgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBpbnRlcmFjdGFibGVcbiAgICAvLyBhbmQgcmV0dXJuZWQsIG90aGVyd2lzZSBhIG5ldyBpZCBpcyBjcmVhdGVkIGZvciB0aGUgZHJhZ2dhYmxlLlxuICAgIGNvbnN0IGtleSA9IHRoaXMuY3JlYXRlSW50ZXJhY3RhYmxlSWQoaW50ZXJhY3RhYmxlSWQgKTtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmRyYWdSZWdpc3RyeVN5c3RlbSwgcmVnaXN0cnlJZCkpIHtcbiAgICAgIHRoaXMuZHJhZ1JlZ2lzdHJ5U3lzdGVtW3JlZ2lzdHJ5SWRdID0ge307XG4gICAgfVxuICAgIHRoaXMuZHJhZ1JlZ2lzdHJ5U3lzdGVtW3JlZ2lzdHJ5SWRdW2tleV0gPSB0aGlzLmNyZWF0ZUludGVyYWN0YWJsZVN0YXRlKGRlZmF1bHRQb3NpdGlvbiwgZGVmYXVsdFNpemUsIGRlZmF1bHREZWx0YSk7XG4gICAgcmV0dXJuIGtleVxuICB9XG5cbiAgZGVzdHJveUludGVyYWN0YWJsZShpbnRlcmFjdGFibGVJZDogc3RyaW5nLCByZWdpc3RyeUlkID0gREVGQVVMVF9SRUdJU1RSWV9JRCkge1xuICAgIGNvbnN0IGludGVyYWN0YWJsZVN5c3RlbSA9dGhpcy5kcmFnUmVnaXN0cnlTeXN0ZW1bcmVnaXN0cnlJZF1baW50ZXJhY3RhYmxlSWRdO1xuICAgIGlmKGludGVyYWN0YWJsZVN5c3RlbSkge1xuICAgICAgLy8gdW5zdWJzY3JpYmUgZnJvbSBhbGwgdGhlIHN1YnNjcmlwdGlvbnMgaWYgdGhleSdyZSBzdWJzY3JpcHRpb25zXG4gICAgICBmb3IgKGNvbnN0IHByb3BOYW1lIGluIGludGVyYWN0YWJsZVN5c3RlbSkgIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IGludGVyYWN0YWJsZVN5c3RlbVtwcm9wTmFtZV07XG4gICAgICAgIGlmIChwcm9wLnVuc3Vic2NyaWJlICYmIHR5cGVvZiBwcm9wLnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nICkge1xuICAgICAgICAgIHByb3AudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSB0aGlzLmRyYWdSZWdpc3RyeVN5c3RlbVtyZWdpc3RyeUlkXVtpbnRlcmFjdGFibGVJZF07XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaWJlVG9JbnRlcmFjdGFibGUoaW50ZXJhY3RhYmxlSWQ6IHN0cmluZywgcmVnaXN0cnlJZCA9IERFRkFVTFRfUkVHSVNUUllfSUQpIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnUmVnaXN0cnlTeXN0ZW1bcmVnaXN0cnlJZF1baW50ZXJhY3RhYmxlSWRdO1xuICB9XG5cbiAgY3JlYXRlSW50ZXJhY3RhYmxlU3RhdGUoaW5pdGlhbFBvc2l0aW9uOiBQb3NpdGlvbiwgaW5pdGlhbFNpemU6IFNpemUsIGluaXRpYWxEZWx0YTogRGVsdGEgKSB7XG5cbiAgICBjb25zdCBkZWx0YXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChpbml0aWFsRGVsdGEpO1xuICAgIC8vIHRyYWNrcyB0aGUgc2l6ZSBvZiB0aGUgZWxlbWVudFxuICAgIGNvbnN0IHNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7Li4uaW5pdGlhbFNpemUsIC4uLmluaXRpYWxEZWx0YX0pO1xuICAgIC8vIFN0cmVhbSBvZiBwb3NpdGlvbnMgYXMgdGhleSBjaGFuZ2VcbiAgICBjb25zdCBwb3NpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGluaXRpYWxQb3NpdGlvbik7XG5cbiAgICAvLyBBbGwgZHJhZ2dhYmxlIGRhdGEgbWFwcGVkIHRvZ2V0aGVyXG4gICAgY29uc3QgaW50ZXJhY3RhYmxlJDogT2JzZXJ2YWJsZTxUZnRDb29yZHM+ID0gY29tYmluZUxhdGVzdChbXG4gICAgICBzaXplJC5waXBlKFxuICAgICAgICAvLyBzdGFydFdpdGgoey4uLmluaXRpYWxTaXplLCAuLi5pbml0aWFsRGVsdGF9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgICAgIC8vIGZpbHRlcihyZXNpemVFdmVudCA9PiAhIXJlc2l6ZUV2ZW50LnRhcmdldEVsZW1lbnQpLFxuICAgICAgICB0YXAoKHtkZWx0YVgsIGRlbHRhWSwgd2lkdGgsIGhlaWdodCwgdGFyZ2V0RWxlbWVudH0pID0+IHtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEVsZW1lbnRTaXplKHdpZHRoLCBoZWlnaHQsIHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIG9ubHkgcmVwb3NpdGlvbiBpZiBuZWNlc3NhcnkgaS5lIHdoZW4gcmVzaXppbmcgbGVmdCBvciB1cFxuICAgICAgICAgIGlmKGRlbHRhWCB8fCBkZWx0YVkpIHtcbiAgICAgICAgICAgIGRlbHRhcyQubmV4dCh7ZGVsdGFYLCBkZWx0YVksIHRhcmdldEVsZW1lbnR9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgZGVsdGFzJC5waXBlKFxuICAgICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICAgICAgdGFwKChkZWx0YSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcG9zaXRpb24kLnZhbHVlO1xuICAgICAgICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gdGhpcy5hZGREZWx0YVRvUG9zaXRpb24oZGVsdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICBwb3NpdGlvbiQubmV4dChuZXdQb3NpdGlvbik7XG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgcG9zaXRpb24kLnBpcGUoXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICAgICB0YXAoIHBvc2l0aW9uID0+IHtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEVsZW1lbnRUcmFuc2Zvcm0ocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24pO1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICBdKS5waXBlKFxuICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgICBtYXAoIChbc2l6ZSwgZGVsdGFzLCBwb3NpdGlvbl0pOiBUZnRDb29yZHM9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogcG9zaXRpb24ueCxcbiAgICAgICAgICB5OiBwb3NpdGlvbi55LFxuICAgICAgICAgIGRlbHRhWDogZGVsdGFzLmRlbHRhWCxcbiAgICAgICAgICBkZWx0YVk6IGRlbHRhcy5kZWx0YVksXG4gICAgICAgICAgd2lkdGg6IHNpemUud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBzaXplLmhlaWdodCxcbiAgICAgICAgICB0YXJnZXRFbGVtZW50OiBzaXplLnRhcmdldEVsZW1lbnQgfHwgcG9zaXRpb24udGFyZ2V0RWxlbWVudCB8fCBkZWx0YXMudGFyZ2V0RWxlbWVudFxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApXG4gICAgLy8gVE9ETzogdXBkYXRlIHN5c3RlbSB0byBoYW5kbGUgb25seSByZXR1cm5pbmcgaW50ZXJhY3RhYmxlJFxuICAgIHJldHVybiB7XG4gICAgICBkZWx0YXMkLFxuICAgICAgcG9zaXRpb24kLFxuICAgICAgc2l6ZSQsXG4gICAgICBpbnRlcmFjdGFibGUkXG4gICAgfVxuICB9XG5cbiAgY3JlYXRlSW50ZXJhY3RhYmxlSWQoY3VzdG9tSW50ZXJhY3RhYmxlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgcmV0dXJuIGN1c3RvbUludGVyYWN0YWJsZUlkIHx8IGBpbnRlcmFjdGFibGUke3RoaXMuX2ludGVyYWN0YWJsZUluZGV4Kyt9YFxuICB9XG5cbiAgY3JlYXRlRHJvcHpvbmVJZChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGBkcm9wem9uZSR7aW5kZXh9YFxuICB9XG5cbiAgZ2V0SW50ZXJhY3RhYmxlU3RhdGUoIGludGVyYWN0YWJsZUlkOiBzdHJpbmcsIHJlZ2lzdHJ5SWQgPSBERUZBVUxUX1JFR0lTVFJZX0lEKSB7XG4gICAgcmV0dXJuIHRoaXMuZHJhZ1JlZ2lzdHJ5U3lzdGVtW3JlZ2lzdHJ5SWRdW2ludGVyYWN0YWJsZUlkXS5pbnRlcmFjdGFibGUkO1xuICB9XG5cbiAgdXBkYXRlRGVsdGFzKGludGVyYWN0SWQ6IHN0cmluZywgcmVnaXN0cnlJZDogc3RyaW5nLCB7IGRlbHRhWCwgZGVsdGFZIH0sIHRhcmdldEVsZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3RhYmxlRXhpc3RPblJlZ2lzdHJ5KGludGVyYWN0SWQsIHJlZ2lzdHJ5SWQpKSByZXR1cm47XG4gICAgdGhpcy5kcmFnUmVnaXN0cnlTeXN0ZW1bcmVnaXN0cnlJZF1baW50ZXJhY3RJZF0uZGVsdGFzJC5uZXh0KHsgZGVsdGFYLCBkZWx0YVksIHRhcmdldEVsZW1lbnQgfSlcbiAgfVxuXG4gIHVwZGF0ZVBvc2l0aW9uKGludGVyYWN0SWQ6IHN0cmluZywgcmVnaXN0cnlJZDogc3RyaW5nLCB7IHgsIHkgfToge3g6IG51bWJlcjsgeTogbnVtYmVyO30sIHRhcmdldEVsZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3RhYmxlRXhpc3RPblJlZ2lzdHJ5KGludGVyYWN0SWQsIHJlZ2lzdHJ5SWQpKSByZXR1cm47XG4gICAgdGhpcy5kcmFnUmVnaXN0cnlTeXN0ZW1bcmVnaXN0cnlJZF1baW50ZXJhY3RJZF0ucG9zaXRpb24kLm5leHQoeyB4LCB5LCB0YXJnZXRFbGVtZW50IH0pXG4gIH1cblxuICB1cGRhdGVTaXplKGludGVyYWN0SWQ6IHN0cmluZywgcmVnaXN0cnlJZDogc3RyaW5nLCB7IGRlbHRhWCwgZGVsdGFZLCB3aWR0aCwgaGVpZ2h0IH0sIHRhcmdldEVsZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3RhYmxlRXhpc3RPblJlZ2lzdHJ5KGludGVyYWN0SWQsIHJlZ2lzdHJ5SWQpKSByZXR1cm5cbiAgICB0aGlzLmRyYWdSZWdpc3RyeVN5c3RlbVtyZWdpc3RyeUlkXVtpbnRlcmFjdElkXS5zaXplJC5uZXh0KHtkZWx0YVgsIGRlbHRhWSwgd2lkdGgsIGhlaWdodCwgdGFyZ2V0RWxlbWVudH0pO1xuICB9XG5cbiAgaW50ZXJhY3RhYmxlRXhpc3RPblJlZ2lzdHJ5KGludGVyYWN0SWQ6IHN0cmluZywgcmVnaXN0cnlJZCA9IERFRkFVTFRfUkVHSVNUUllfSUQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgcmV0dXJuIHRoaXMuZHJhZ1JlZ2lzdHJ5U3lzdGVtLmhhc093blByb3BlcnR5KHJlZ2lzdHJ5SWQpICYmIHRoaXMuZHJhZ1JlZ2lzdHJ5U3lzdGVtW3JlZ2lzdHJ5SWRdLmhhc093blByb3BlcnR5KGludGVyYWN0SWQpO1xuICB9XG4gIC8qKlxuICAgKiBVc2VzIHJlbmRlcmVyIHRvIHNldCB3aWR0aCBhbmQgaGVpZ2h0IG9mIGFuZ3VsYXIgY29tcG9uZW50XG4gICAqIEBwYXJhbSB3aWR0aCB0aGUgZGVzaXJlZCB3aWR0aCBvZiBjb21wb25lbnRcbiAgICogQHBhcmFtIGhlaWdodCB0aGUgZGVzaXJlZCBoZWlnaHQgb2YgY29tcG9uZW50XG4gICAqIEBwYXJhbSB0YXJnZXQgdGhlIGVsZW1lbnQgdG8gdHJhbnNmb3JtXG4gICAqL1xuICBzZXRFbGVtZW50U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgdGFyZ2V0OiBUZnRSZXNpemVFbGVtZW50KSB7XG4gICAgaWYoIXRhcmdldCkgcmV0dXJuO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGFyZ2V0LCAnd2lkdGgnLCBgJHt3aWR0aH0ke3RoaXMuY3NzVW5pdH1gKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRhcmdldCwgJ2hlaWdodCcsIGAke2hlaWdodH0ke3RoaXMuY3NzVW5pdH1gKTtcbiAgfVxuICAvKipcbiAgICogVXNlcyByZW5kZXJlciB0byBzZXQgcG9zaXRpb24gb2YgYW5ndWxhciBjb21wb25lbnRcbiAgICogQHBhcmFtIHggcG9zaXRpb24gb24geCBheGlzXG4gICAqIEBwYXJhbSB5IHBvc2l0aW9uIG9uIHkgYXhpc1xuICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSBlbGVtZW50IHRvIHRyYW5zZm9ybVxuICAgKi9cbiAgc2V0RWxlbWVudFRyYW5zZm9ybSh4OiBudW1iZXIsIHk6IG51bWJlciwgcG9zaXRpb246IFBvc2l0aW9uICkge1xuICAgIGlmKCFwb3NpdGlvbj8udGFyZ2V0RWxlbWVudCkgcmV0dXJuO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocG9zaXRpb24udGFyZ2V0RWxlbWVudCwgJ2xlZnQnLCBgJHt4fSR7dGhpcy5jc3NVbml0fWApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocG9zaXRpb24udGFyZ2V0RWxlbWVudCwgJ3RvcCcsIGAke3l9JHt0aGlzLmNzc1VuaXR9YCk7XG4gIH1cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHRyYW5zbGF0ZSBzdHJpbmcgZm9yIHRoZSB4IGFuZCB5IGFyZ3VtZW50cyBwYXNzZWQgdG9cbiAgICogYmUgcGFzc2VkIHRvIGNzcyB0cmFuc2Zvcm1cbiAgICogQHBhcmFtIHggdGhlIHBvc2l0aW9uIGFsb25nIHRoZSB4IGF4aXNcbiAgICogQHBhcmFtIHkgdGhlIHBvc2l0aW9uIGFsb25nIHRoZSB5IGF4aXNcbiAgICovXG4gIGNyZWF0ZVRyYW5zZm9ybVN0cmluZyh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIHJldHVybiBgdHJhbnNsYXRlM2QoJHt4fSR7dGhpcy5jc3NVbml0fSwgJHt5fSR7dGhpcy5jc3NVbml0fSwgMClgXG4gIH1cblxuICBjYWxjdWxhdGVQb3NpdGlvbkluRWxlbWVudCh6b25lRWxlbWVudDogSW50ZXJhY3QuRWxlbWVudCwgZHJhZ0VsZW1lbnQ6IFRmdERyYWdFbGVtZW50LCBzY2FsZT86IG51bWJlcikge1xuICAgIC8vIFRPRE86IHRoaXMgY2FsY3VsYXRpb24gbWF5IG5vdCBjb3ZlciBhIGxvdCBvZiBzY2VuYXJpb3MsIGtlZXAgYW4gZXllIG91dCBmb3IgcG9zc2libGUgaW1wcm92ZW1lbnRzXG4gICAgY29uc3Qgem9uZVJlY3QgPSB6b25lRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBkcmFnUmVjdCA9IGRyYWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gc2NhbGVcbiAgICAgID8ge1xuICAgICAgeDogKGRyYWdSZWN0LmxlZnQgLSB6b25lUmVjdC5sZWZ0KSAvIHNjYWxlICB8fCAxLFxuICAgICAgeTogKGRyYWdSZWN0LnRvcCAtIHpvbmVSZWN0LnRvcCkgLyBzY2FsZSB8fCAxXG4gICAgICB9IDoge1xuICAgICAgICB4OiBkcmFnUmVjdC5sZWZ0IC0gem9uZVJlY3QubGVmdCxcbiAgICAgICAgeTogZHJhZ1JlY3QudG9wIC0gem9uZVJlY3QudG9wXG4gICAgfTtcbiAgICAvLyBjb25zb2xlLmxvZyh7IHk6cG9zaXRpb24ueSwgZHJ0OmRyYWdSZWN0LnRvcCwgenJ0OiB6b25lUmVjdC50b3B9KVxuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfVxufVxuIl19
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvaW50ZXJhY3Qvc3JjL2xpYi91dGlscy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsMEJBQTBCLENBQUMsT0FBb0IsRUFBRSxRQUFnQjtJQUMvRSxJQUFJLGNBQWMsR0FBRyxPQUFPLENBQUMsYUFBbUMsQ0FBQztJQUVqRSxPQUFPLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLCtFQUErRTtRQUMvRSxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMxRCxjQUE0QixDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDOUQsT0FBTyxjQUFjLENBQUM7UUFDeEIsQ0FBQztRQUVELGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO0lBQ2hELENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFHRDs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsT0FBb0I7SUFFL0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQWdCLENBQUM7SUFDckQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQTZCLEVBQUUsU0FBbUI7SUFDNUUsTUFBTSxTQUFTLEdBQVcsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUU1QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9FLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbWJlZGRlZFZpZXdSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW50ZXJmYWNlIElFRWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgbXNNYXRjaGVzU2VsZWN0b3I6IChzZWxlY3Rvcjogc3RyaW5nKSA9PiBib29sZWFuOyAvL1xufVxuXG4vKiogR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBvZiBhbiBlbGVtZW50IHRoYXQgbWF0Y2hlcyBhIHNlbGVjdG9yLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENsb3Nlc3RNYXRjaGluZ0FuY2VzdG9yKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzZWxlY3Rvcjogc3RyaW5nKSB7XG4gIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgd2hpbGUgKGN1cnJlbnRFbGVtZW50KSB7XG4gICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGBtYXRjaGVzYCBzbyB3ZSBoYXZlIHRvIGZhbGwgYmFjayB0byBgbXNNYXRjaGVzU2VsZWN0b3JgLlxuICAgIGlmIChjdXJyZW50RWxlbWVudC5tYXRjaGVzID8gY3VycmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikgOlxuICAgICAgICAoY3VycmVudEVsZW1lbnQgYXMgSUVFbGVtZW50KS5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3RvcikpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuXG4vKipcbiAqIENyZWF0ZSBhIGNvcHkgb2YgdGhlIEhUTUwgRWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG5cbiAgY29uc3QgY2xvbmUgPSBlbGVtZW50LmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MRWxlbWVudDtcbiAgY2xvbmUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuICByZXR1cm4gY2xvbmU7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcm9vdCBIVE1MIGVsZW1lbnQgb2YgYW4gZW1iZWRkZWQgdmlldy5cbiAqIElmIHRoZSByb290IGlzIG5vdCBhbiBIVE1MIGVsZW1lbnQgaXQgZ2V0cyB3cmFwcGVkIGluIG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvb3ROb2RlKHZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxhbnk+LCBfZG9jdW1lbnQ6IERvY3VtZW50KTogSFRNTEVsZW1lbnQge1xuICBjb25zdCByb290Tm9kZXM6IE5vZGVbXSA9IHZpZXdSZWYucm9vdE5vZGVzO1xuXG4gIGlmIChyb290Tm9kZXMubGVuZ3RoID09PSAxICYmIHJvb3ROb2Rlc1swXS5ub2RlVHlwZSA9PT0gX2RvY3VtZW50LkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiByb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gIH1cblxuICBjb25zdCB3cmFwcGVyID0gX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICByb290Tm9kZXMuZm9yRWFjaChub2RlID0+IHdyYXBwZXIuYXBwZW5kQ2hpbGQobm9kZSkpO1xuICByZXR1cm4gd3JhcHBlcjtcbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './helpers';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2ludGVyYWN0L3NyYy9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuIl19
|
package/esm2022/tft-interact.mjs
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGZ0LWludGVyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9pbnRlcmFjdC9zcmMvdGZ0LWludGVyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
package/index.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ElementRef } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* Use to apply scale to the element and tell the drag and resize directives to account for the scale when
|
|
5
|
-
* @example <div tftAccountForScale [scale]="2.5"> <div tftDraggable> </div> </div>
|
|
6
|
-
* @note if `dragRoot` is used this directive should be used on the same element to ensure that the drag
|
|
7
|
-
* element accounts for scale
|
|
8
|
-
*/
|
|
9
|
-
export declare class AccountForScaleDirective {
|
|
10
|
-
el: ElementRef;
|
|
11
|
-
scale: number;
|
|
12
|
-
constructor(el: ElementRef);
|
|
13
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AccountForScaleDirective, never>;
|
|
14
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<AccountForScaleDirective, "[tftAccountForScale]", never, { "scale": { "alias": "scale"; "required": false; }; }, {}, never, never, false, never>;
|
|
15
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { ElementRef } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class ApplyScaleDirective {
|
|
4
|
-
el: ElementRef;
|
|
5
|
-
_scale: number;
|
|
6
|
-
set scale(val: number);
|
|
7
|
-
fontSize: string;
|
|
8
|
-
constructor(el: ElementRef);
|
|
9
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ApplyScaleDirective, never>;
|
|
10
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<ApplyScaleDirective, "[tftApplyScale]", never, { "scale": { "alias": "scale"; "required": false; }; }, {}, never, never, false, never>;
|
|
11
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { ElementRef } from '@angular/core';
|
|
2
|
-
import { Observable, Subject } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
interface ScrollObject {
|
|
5
|
-
scrollTop: number;
|
|
6
|
-
scrollLeft: number;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Use to apply scale to the element and tell the drag and resize directives to account for the scale when
|
|
10
|
-
* @example <div tftAccountForScale [scale]="2.5"> <div tftDraggable> </div> </div>
|
|
11
|
-
* @note if `dragRoot` is used this directive should be used on the same element to ensure that the drag
|
|
12
|
-
* element accounts for scale
|
|
13
|
-
*/
|
|
14
|
-
export declare class AutoScrollDirective {
|
|
15
|
-
el: ElementRef;
|
|
16
|
-
/**
|
|
17
|
-
* Limit minimum time between scroll events in milliseconds
|
|
18
|
-
*/
|
|
19
|
-
autoScrollConfig: {
|
|
20
|
-
margin: number;
|
|
21
|
-
distance: number;
|
|
22
|
-
interval: number;
|
|
23
|
-
speed: number;
|
|
24
|
-
enabled: boolean;
|
|
25
|
-
};
|
|
26
|
-
private scrollSubject;
|
|
27
|
-
readonly scrollObserver: Observable<ScrollObject>;
|
|
28
|
-
readonly scrollDeltaObserver: Subject<ScrollObject>;
|
|
29
|
-
scroll(scrollEvent: Event): void;
|
|
30
|
-
constructor(el: ElementRef);
|
|
31
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AutoScrollDirective, never>;
|
|
32
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<AutoScrollDirective, "[tftAutoScroll]", never, { "autoScrollConfig": { "alias": "autoScrollConfig"; "required": false; }; }, {}, never, never, false, never>;
|
|
33
|
-
}
|
|
34
|
-
export {};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { InjectionToken, TemplateRef } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare const TFT_DRAG_PREVIEW: InjectionToken<DragPreviewDirective<any>>;
|
|
4
|
-
export declare class DragPreviewDirective<T = any> {
|
|
5
|
-
templateRef: TemplateRef<T>;
|
|
6
|
-
dragData: T;
|
|
7
|
-
constructor(templateRef: TemplateRef<T>);
|
|
8
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DragPreviewDirective<any>, never>;
|
|
9
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DragPreviewDirective<any>, "ng-template[tftDragPreview]", never, { "dragData": { "alias": "dragData"; "required": false; }; }, {}, never, never, false, never>;
|
|
10
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { AccountForScaleDirective } from './account-for-scale.directive';
|
|
2
|
-
import { ElementRef } from '@angular/core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* Use this directive to select which element to attach the element to while dragging
|
|
6
|
-
* @example <div tftDragRoot><div tftDraggable> </div> </div>
|
|
7
|
-
* @note this directive will overwrite any style transformations (e.g. transform: scale(2); )
|
|
8
|
-
*/
|
|
9
|
-
export declare class DragRootDirective {
|
|
10
|
-
el: ElementRef;
|
|
11
|
-
account_for_scale_dir?: AccountForScaleDirective;
|
|
12
|
-
constructor(el: ElementRef, account_for_scale_dir?: AccountForScaleDirective);
|
|
13
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DragRootDirective, [null, { optional: true; self: true; }]>;
|
|
14
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DragRootDirective, "[tftDragRoot]", ["tftDragRoot"], {}, {}, never, never, false, never>;
|
|
15
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { ElementRef, OnInit, OnDestroy, EventEmitter, Renderer2, SimpleChanges, OnChanges, ViewContainerRef, AfterViewInit } from '@angular/core';
|
|
2
|
-
import { InteractService } from '../services/interact.service';
|
|
3
|
-
import { DraggableOptions, Interactable } from '@interactjs/types/index';
|
|
4
|
-
import { Observable } from 'rxjs';
|
|
5
|
-
import { DropzoneDirective } from './dropzone.directive';
|
|
6
|
-
import { NgDragEvent, TftDragEvent, TftCoords, TftDragElement } from '../models';
|
|
7
|
-
import { DragPreviewDirective } from './drag-preview.directive';
|
|
8
|
-
import { DragRootDirective } from './drag-root.directive';
|
|
9
|
-
import { AccountForScaleDirective } from './account-for-scale.directive';
|
|
10
|
-
import { AutoScrollDirective } from './auto-scroll.directive';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
/** @dynamic */
|
|
13
|
-
export declare class DraggableDirective<D = any> implements OnInit, OnChanges, OnDestroy, AfterViewInit {
|
|
14
|
-
el: ElementRef;
|
|
15
|
-
private interactService;
|
|
16
|
-
private renderer;
|
|
17
|
-
private _viewContainerRef;
|
|
18
|
-
private _document;
|
|
19
|
-
account_for_scale_dir?: AccountForScaleDirective;
|
|
20
|
-
dropzone_dir?: DropzoneDirective;
|
|
21
|
-
drag_root_dir?: DragRootDirective;
|
|
22
|
-
auto_scroll_dir?: AutoScrollDirective;
|
|
23
|
-
x: number;
|
|
24
|
-
y: number;
|
|
25
|
-
dragZIndex: number;
|
|
26
|
-
/** zIndex while at rest */
|
|
27
|
-
zIndex: number;
|
|
28
|
-
interactableId: string;
|
|
29
|
-
dragData: D;
|
|
30
|
-
enableDragDefault: boolean;
|
|
31
|
-
/**
|
|
32
|
-
* @deprecated replaced by 'dragDisabled' property, please migrate before v13
|
|
33
|
-
*/
|
|
34
|
-
disabled: boolean;
|
|
35
|
-
dragDisabled: boolean;
|
|
36
|
-
dragConfig: Partial<Interact.OrBoolean<DraggableOptions>>;
|
|
37
|
-
showPlaceholder: boolean;
|
|
38
|
-
/**
|
|
39
|
-
* The element we want to prepend the drag element to.
|
|
40
|
-
* Use `tftDragRoot` directive on a parent element to set custom root element
|
|
41
|
-
* @default document.body
|
|
42
|
-
*/
|
|
43
|
-
dragRoot: DragRootDirective;
|
|
44
|
-
private dragRootEl;
|
|
45
|
-
dragStart: EventEmitter<TftDragEvent>;
|
|
46
|
-
dragMove: EventEmitter<TftDragEvent>;
|
|
47
|
-
dragInertiaStart: EventEmitter<TftDragEvent>;
|
|
48
|
-
dragEnd: EventEmitter<TftDragEvent>;
|
|
49
|
-
_previewTemplate: DragPreviewDirective;
|
|
50
|
-
interactableState: Observable<TftCoords>;
|
|
51
|
-
interactable: Interactable;
|
|
52
|
-
private registryId;
|
|
53
|
-
private interactableSubscription;
|
|
54
|
-
private scrollEventsSubscription;
|
|
55
|
-
previewRef: TftDragElement;
|
|
56
|
-
get scale(): number;
|
|
57
|
-
constructor(el: ElementRef, interactService: InteractService, renderer: Renderer2, _viewContainerRef: ViewContainerRef, _document: Document, account_for_scale_dir?: AccountForScaleDirective, dropzone_dir?: DropzoneDirective, drag_root_dir?: DragRootDirective, auto_scroll_dir?: AutoScrollDirective);
|
|
58
|
-
ngOnInit(): void;
|
|
59
|
-
ngOnChanges(changes: SimpleChanges): void;
|
|
60
|
-
setDragConfig(): void;
|
|
61
|
-
ngAfterViewInit(): void;
|
|
62
|
-
ngOnDestroy(): void;
|
|
63
|
-
dragMoveListener(event: NgDragEvent, element: Interact.Element): void;
|
|
64
|
-
setDragStyles(dragElement: HTMLElement): void;
|
|
65
|
-
addDragPropertiesToElement(nativeElement: TftDragElement): void;
|
|
66
|
-
mapDragEvent(event: NgDragEvent): TftDragEvent;
|
|
67
|
-
setPosition(x: number, y: number): void;
|
|
68
|
-
alignPositionWithInputs(x: number, y: number): void;
|
|
69
|
-
isValidPosition(x: number, y: number): boolean;
|
|
70
|
-
isNumeric(num: number): boolean;
|
|
71
|
-
initiateDragEvents(dragConfig: Partial<Interact.OrBoolean<DraggableOptions>>, nativeElement: HTMLElement): import("@interactjs/core/Interactable").Interactable;
|
|
72
|
-
subscribeToScrollEvents(): void;
|
|
73
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DraggableDirective<any>, [null, null, null, null, null, { optional: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }]>;
|
|
74
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DraggableDirective<any>, "[tftDraggable]", never, { "x": { "alias": "x"; "required": false; }; "y": { "alias": "y"; "required": false; }; "dragZIndex": { "alias": "dragZIndex"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "interactableId": { "alias": "interactableId"; "required": false; }; "dragData": { "alias": "dragData"; "required": false; }; "enableDragDefault": { "alias": "enableDragDefault"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "dragDisabled": { "alias": "dragDisabled"; "required": false; }; "dragConfig": { "alias": "dragConfig"; "required": false; }; "showPlaceholder": { "alias": "showPlaceholder"; "required": false; }; "dragRoot": { "alias": "dragRoot"; "required": false; }; }, { "dragStart": "dragStart"; "dragMove": "dragMove"; "dragInertiaStart": "dragInertiaStart"; "dragEnd": "dragEnd"; }, ["_previewTemplate"], never, false, never>;
|
|
75
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { ElementRef, OnInit, EventEmitter, SimpleChanges, OnChanges, Renderer2 } from '@angular/core';
|
|
2
|
-
import { DropzoneOptions, Interactable } from '@interactjs/types/index';
|
|
3
|
-
import { InteractService } from '../services/interact.service';
|
|
4
|
-
import { NgDropEvent, TftDropEvent } from '../models';
|
|
5
|
-
import { AccountForScaleDirective } from './account-for-scale.directive';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export type PositionOption = 'relative' | 'absolute' | 'fixed' | 'static' | 'sticky' | 'unset' | 'inherit' | 'initial' | 'revert';
|
|
8
|
-
export declare class DropzoneDirective implements OnInit, OnChanges {
|
|
9
|
-
el: ElementRef;
|
|
10
|
-
private renderer;
|
|
11
|
-
private interactService;
|
|
12
|
-
private account_for_scale_dir?;
|
|
13
|
-
dropzoneId: string;
|
|
14
|
-
dropzoneConfig: DropzoneOptions;
|
|
15
|
-
dropzoneData: any;
|
|
16
|
-
position: PositionOption;
|
|
17
|
-
dropActivate: EventEmitter<TftDropEvent>;
|
|
18
|
-
dragEnter: EventEmitter<TftDropEvent>;
|
|
19
|
-
dragLeave: EventEmitter<TftDropEvent>;
|
|
20
|
-
dragDrop: EventEmitter<TftDropEvent>;
|
|
21
|
-
dropzone: Interactable;
|
|
22
|
-
get scale(): number;
|
|
23
|
-
constructor(el: ElementRef, renderer: Renderer2, interactService: InteractService, account_for_scale_dir?: AccountForScaleDirective);
|
|
24
|
-
ngOnInit(): void;
|
|
25
|
-
ngOnChanges(changes: SimpleChanges): void;
|
|
26
|
-
/**
|
|
27
|
-
* Connects element to interacts dropzone events and returns a reference to the interactable
|
|
28
|
-
* @param nativeElement the element to tie drop events to
|
|
29
|
-
* @param dropzoneConfig the interact configuration to use when connecting
|
|
30
|
-
*/
|
|
31
|
-
connectDropzoneEvents(nativeElement: any, dropzoneConfig: DropzoneOptions): import("@interactjs/core/Interactable").Interactable;
|
|
32
|
-
/**
|
|
33
|
-
* Maps the drop event emitted by interact to something a little easier to use
|
|
34
|
-
* @param event the drop event emitted by interact, extended with extra fields we added to
|
|
35
|
-
*/
|
|
36
|
-
mapDropzoneEvent(event: NgDropEvent): TftDropEvent;
|
|
37
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DropzoneDirective, [null, null, null, { optional: true; }]>;
|
|
38
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DropzoneDirective, "[tftDropzone]", never, { "dropzoneId": { "alias": "dropzoneId"; "required": false; }; "dropzoneConfig": { "alias": "dropzoneConfig"; "required": false; }; "dropzoneData": { "alias": "dropzoneData"; "required": false; }; "position": { "alias": "position"; "required": false; }; }, { "dropActivate": "dropActivate"; "dragEnter": "dragEnter"; "dragLeave": "dragLeave"; "dragDrop": "dragDrop"; }, never, never, false, never>;
|
|
39
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { ElementRef, OnInit, EventEmitter, SimpleChanges, OnChanges } from '@angular/core';
|
|
2
|
-
import { DraggableOptions, GesturableOptions, Interactable } from '@interactjs/types/index';
|
|
3
|
-
import { Observable } from 'rxjs';
|
|
4
|
-
import { TftCoords, TftGestureEvent } from '../models';
|
|
5
|
-
import { DraggableDirective } from '../directives';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
/** @dynamic */
|
|
8
|
-
export declare class GesturableDirective<D = any> implements OnInit, OnChanges {
|
|
9
|
-
el: ElementRef;
|
|
10
|
-
private draggable_dir?;
|
|
11
|
-
gesturableId: string;
|
|
12
|
-
gestureDisabled: boolean;
|
|
13
|
-
gestureConfig: Partial<Interact.OrBoolean<DraggableOptions>>;
|
|
14
|
-
gestureStart: EventEmitter<TftGestureEvent>;
|
|
15
|
-
gestureMove: EventEmitter<TftGestureEvent>;
|
|
16
|
-
gestureEnd: EventEmitter<TftGestureEvent>;
|
|
17
|
-
interactableState: Observable<TftCoords>;
|
|
18
|
-
interactable: Interactable;
|
|
19
|
-
constructor(el: ElementRef, draggable_dir?: DraggableDirective);
|
|
20
|
-
ngOnInit(): void;
|
|
21
|
-
ngOnChanges(changes: SimpleChanges): void;
|
|
22
|
-
setGestureConfig(): void;
|
|
23
|
-
initiateGestureEvents(gestureConfig: Partial<Interact.OrBoolean<GesturableOptions>>, nativeElement: HTMLElement): import("@interactjs/core/Interactable").Interactable;
|
|
24
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<GesturableDirective<any>, [null, { optional: true; }]>;
|
|
25
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<GesturableDirective<any>, "[tftGesturable]", never, { "gesturableId": { "alias": "gesturableId"; "required": false; }; "gestureDisabled": { "alias": "gestureDisabled"; "required": false; }; "gestureConfig": { "alias": "gestureConfig"; "required": false; }; }, { "gestureStart": "gestureStart"; "gestureMove": "gestureMove"; "gestureEnd": "gestureEnd"; }, never, never, false, never>;
|
|
26
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export * from './draggable.directive';
|
|
2
|
-
export * from './dropzone.directive';
|
|
3
|
-
export * from './resizable.directive';
|
|
4
|
-
export * from './drag-preview.directive';
|
|
5
|
-
export * from './gesturable.directive';
|
|
6
|
-
export * from './drag-root.directive';
|
|
7
|
-
export * from './account-for-scale.directive';
|
|
8
|
-
export * from './apply-scale.directive';
|
|
9
|
-
export * from './auto-scroll.directive';
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { OnInit, OnDestroy, ElementRef, EventEmitter, OnChanges, SimpleChanges, Renderer2 } from '@angular/core';
|
|
2
|
-
import { InteractService } from '../services/interact.service';
|
|
3
|
-
import { ResizableOptions, ResizeEvent, Interactable } from '@interactjs/types/index';
|
|
4
|
-
import { DraggableDirective } from './draggable.directive';
|
|
5
|
-
import { DropzoneDirective } from './dropzone.directive';
|
|
6
|
-
import { DragRootDirective } from './drag-root.directive';
|
|
7
|
-
import { AccountForScaleDirective } from './account-for-scale.directive';
|
|
8
|
-
import { NgResizeEvent, TftResizeEvent, TftDragElement } from '../models';
|
|
9
|
-
import { AutoScrollDirective } from './auto-scroll.directive';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
/** @dynamic */
|
|
12
|
-
export declare class ResizableDirective implements OnInit, OnDestroy, OnChanges {
|
|
13
|
-
el: ElementRef;
|
|
14
|
-
private _document;
|
|
15
|
-
private interactService;
|
|
16
|
-
private renderer;
|
|
17
|
-
private drag_root_dir?;
|
|
18
|
-
account_for_scale_dir?: AccountForScaleDirective;
|
|
19
|
-
private draggable_dir?;
|
|
20
|
-
private dropzone_dir?;
|
|
21
|
-
auto_scroll_dir?: AutoScrollDirective;
|
|
22
|
-
enableResizeDefault: boolean;
|
|
23
|
-
position: string;
|
|
24
|
-
resizeConfig: Partial<Interact.OrBoolean<ResizableOptions>>;
|
|
25
|
-
interactableId: string;
|
|
26
|
-
width: number;
|
|
27
|
-
height: number;
|
|
28
|
-
resizeDisabled: boolean;
|
|
29
|
-
resizeStart: EventEmitter<TftResizeEvent>;
|
|
30
|
-
resizeMove: EventEmitter<TftResizeEvent>;
|
|
31
|
-
resizeInertiaStart: EventEmitter<TftResizeEvent>;
|
|
32
|
-
resizeEnd: EventEmitter<TftResizeEvent>;
|
|
33
|
-
defaultConfig: Partial<Interact.OrBoolean<ResizableOptions>>;
|
|
34
|
-
registryId: string;
|
|
35
|
-
interactable: Interactable;
|
|
36
|
-
dragRootEl: HTMLElement;
|
|
37
|
-
private activeEdges;
|
|
38
|
-
private interactableSubscription;
|
|
39
|
-
private scrollEventsSubscription;
|
|
40
|
-
get scale(): number;
|
|
41
|
-
constructor(el: ElementRef, _document: Document, interactService: InteractService, renderer: Renderer2, drag_root_dir?: DragRootDirective, account_for_scale_dir?: AccountForScaleDirective, draggable_dir?: DraggableDirective, dropzone_dir?: DropzoneDirective, auto_scroll_dir?: AutoScrollDirective);
|
|
42
|
-
ngOnInit(): void;
|
|
43
|
-
ngOnChanges(changes: SimpleChanges): void;
|
|
44
|
-
ngOnDestroy(): void;
|
|
45
|
-
resizeListener(event: ResizeEvent): void;
|
|
46
|
-
/**
|
|
47
|
-
* hook elements into interacts resize event listeners
|
|
48
|
-
* we spread the configs so that the consuming component only overwrites the
|
|
49
|
-
* pieces that it explicitly indicates
|
|
50
|
-
* @param resizeConfig
|
|
51
|
-
* @param nativeElement
|
|
52
|
-
*/
|
|
53
|
-
initiateResizeEvents(resizeConfig: Partial<Interact.OrBoolean<ResizableOptions>>, nativeElement: TftDragElement): import("@interactjs/core/Interactable").Interactable;
|
|
54
|
-
mapResizeEvent(event: NgResizeEvent): TftResizeEvent;
|
|
55
|
-
alignDimensionsWithInputs(width: number, height: number): void;
|
|
56
|
-
addResizePropertiesToElement(nativeElement: TftDragElement): void;
|
|
57
|
-
subscribeToScrollEvents(): void;
|
|
58
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ResizableDirective, [null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }]>;
|
|
59
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<ResizableDirective, "[tftResizable]", never, { "enableResizeDefault": { "alias": "enableResizeDefault"; "required": false; }; "position": { "alias": "position"; "required": false; }; "resizeConfig": { "alias": "resizeConfig"; "required": false; }; "interactableId": { "alias": "interactableId"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "resizeDisabled": { "alias": "resizeDisabled"; "required": false; }; }, { "resizeStart": "resizeStart"; "resizeMove": "resizeMove"; "resizeInertiaStart": "resizeInertiaStart"; "resizeEnd": "resizeEnd"; }, never, never, false, never>;
|
|
60
|
-
}
|
package/lib/interact.module.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { ModuleWithProviders } from '@angular/core';
|
|
2
|
-
import { InteractRootConfig } from './models';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "./directives/draggable.directive";
|
|
5
|
-
import * as i2 from "./directives/resizable.directive";
|
|
6
|
-
import * as i3 from "./directives/dropzone.directive";
|
|
7
|
-
import * as i4 from "./directives/gesturable.directive";
|
|
8
|
-
import * as i5 from "./directives/drag-root.directive";
|
|
9
|
-
import * as i6 from "./directives/auto-scroll.directive";
|
|
10
|
-
import * as i7 from "./directives/account-for-scale.directive";
|
|
11
|
-
import * as i8 from "./directives/apply-scale.directive";
|
|
12
|
-
import * as i9 from "./directives/drag-preview.directive";
|
|
13
|
-
import * as i10 from "./pipes/array-of-n.pipe";
|
|
14
|
-
import * as i11 from "@angular/common";
|
|
15
|
-
export declare class InteractModule {
|
|
16
|
-
static forRoot(config: InteractRootConfig): ModuleWithProviders<InteractModule>;
|
|
17
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<InteractModule, never>;
|
|
18
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<InteractModule, [typeof i1.DraggableDirective, typeof i2.ResizableDirective, typeof i3.DropzoneDirective, typeof i4.GesturableDirective, typeof i5.DragRootDirective, typeof i6.AutoScrollDirective, typeof i7.AccountForScaleDirective, typeof i8.ApplyScaleDirective, typeof i9.DragPreviewDirective, typeof i10.ArrayOfNPipe], [typeof i11.CommonModule], [typeof i1.DraggableDirective, typeof i2.ResizableDirective, typeof i3.DropzoneDirective, typeof i4.GesturableDirective, typeof i5.DragRootDirective, typeof i6.AutoScrollDirective, typeof i7.AccountForScaleDirective, typeof i8.ApplyScaleDirective, typeof i9.DragPreviewDirective, typeof i10.ArrayOfNPipe]>;
|
|
19
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<InteractModule>;
|
|
20
|
-
}
|
package/lib/models/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './interact';
|