@tft/interact 18.0.0 → 21.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/fesm2022/tft-interact.mjs +58 -48
  2. package/fesm2022/tft-interact.mjs.map +1 -1
  3. package/package.json +5 -7
  4. package/tft-interact-21.0.0.tgz +0 -0
  5. package/types/tft-interact.d.ts +506 -0
  6. package/esm2022/index.mjs +0 -6
  7. package/esm2022/lib/directives/account-for-scale.directive.mjs +0 -26
  8. package/esm2022/lib/directives/apply-scale.directive.mjs +0 -28
  9. package/esm2022/lib/directives/auto-scroll.directive.mjs +0 -56
  10. package/esm2022/lib/directives/drag-preview.directive.mjs +0 -20
  11. package/esm2022/lib/directives/drag-root.directive.mjs +0 -32
  12. package/esm2022/lib/directives/draggable.directive.mjs +0 -320
  13. package/esm2022/lib/directives/dropzone.directive.mjs +0 -114
  14. package/esm2022/lib/directives/gesturable.directive.mjs +0 -82
  15. package/esm2022/lib/directives/index.mjs +0 -10
  16. package/esm2022/lib/directives/resizable.directive.mjs +0 -228
  17. package/esm2022/lib/interact.module.mjs +0 -66
  18. package/esm2022/lib/models/index.mjs +0 -2
  19. package/esm2022/lib/models/interact.mjs +0 -28
  20. package/esm2022/lib/pipes/array-of-n.pipe.mjs +0 -22
  21. package/esm2022/lib/pipes/index.mjs +0 -2
  22. package/esm2022/lib/services/interact.service.mjs +0 -197
  23. package/esm2022/lib/utils/helpers.mjs +0 -35
  24. package/esm2022/lib/utils/index.mjs +0 -2
  25. package/esm2022/tft-interact.mjs +0 -5
  26. package/index.d.ts +0 -5
  27. package/lib/directives/account-for-scale.directive.d.ts +0 -15
  28. package/lib/directives/apply-scale.directive.d.ts +0 -11
  29. package/lib/directives/auto-scroll.directive.d.ts +0 -34
  30. package/lib/directives/drag-preview.directive.d.ts +0 -10
  31. package/lib/directives/drag-root.directive.d.ts +0 -15
  32. package/lib/directives/draggable.directive.d.ts +0 -75
  33. package/lib/directives/dropzone.directive.d.ts +0 -39
  34. package/lib/directives/gesturable.directive.d.ts +0 -26
  35. package/lib/directives/index.d.ts +0 -9
  36. package/lib/directives/resizable.directive.d.ts +0 -60
  37. package/lib/interact.module.d.ts +0 -20
  38. package/lib/models/index.d.ts +0 -1
  39. package/lib/models/interact.d.ts +0 -140
  40. package/lib/pipes/array-of-n.pipe.d.ts +0 -12
  41. package/lib/pipes/index.d.ts +0 -1
  42. package/lib/services/interact.service.d.ts +0 -83
  43. package/lib/utils/helpers.d.ts +0 -12
  44. package/lib/utils/index.d.ts +0 -1
  45. 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
@@ -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,5 +0,0 @@
1
- export * from './lib/interact.module';
2
- export * from './lib/directives';
3
- export * from './lib/models';
4
- export * from './lib/pipes';
5
- export * from './lib/utils';
@@ -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
- }
@@ -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
- }
@@ -1 +0,0 @@
1
- export * from './interact';