@tft/interact 13.0.0 → 15.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.
- package/{esm2020 → esm2022}/index.mjs +5 -5
- package/{esm2020 → esm2022}/lib/directives/account-for-scale.directive.mjs +26 -26
- package/{esm2020 → esm2022}/lib/directives/apply-scale.directive.mjs +28 -28
- package/esm2022/lib/directives/auto-scroll.directive.mjs +56 -0
- package/{esm2020 → esm2022}/lib/directives/drag-preview.directive.mjs +20 -20
- package/{esm2020 → esm2022}/lib/directives/drag-root.directive.mjs +32 -32
- package/{esm2020 → esm2022}/lib/directives/draggable.directive.mjs +320 -320
- package/{esm2020 → esm2022}/lib/directives/dropzone.directive.mjs +114 -114
- package/{esm2020 → esm2022}/lib/directives/gesturable.directive.mjs +82 -82
- package/{esm2020 → esm2022}/lib/directives/index.mjs +9 -9
- package/esm2022/lib/directives/resizable.directive.mjs +228 -0
- package/esm2022/lib/interact.module.mjs +66 -0
- package/{esm2020 → esm2022}/lib/models/index.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/interact.mjs +27 -27
- package/{esm2020 → esm2022}/lib/pipes/array-of-n.pipe.mjs +22 -22
- package/{esm2020 → esm2022}/lib/pipes/index.mjs +1 -1
- package/{esm2020 → esm2022}/lib/services/interact.service.mjs +197 -197
- package/{esm2020 → esm2022}/lib/utils/helpers.mjs +34 -34
- package/{esm2020 → esm2022}/lib/utils/index.mjs +1 -1
- package/{esm2020 → esm2022}/tft-interact.mjs +4 -4
- package/{fesm2020 → fesm2022}/tft-interact.mjs +1155 -1155
- package/{fesm2020 → fesm2022}/tft-interact.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/directives/account-for-scale.directive.d.ts +15 -15
- package/lib/directives/apply-scale.directive.d.ts +11 -11
- package/lib/directives/auto-scroll.directive.d.ts +34 -34
- package/lib/directives/drag-preview.directive.d.ts +10 -10
- package/lib/directives/drag-root.directive.d.ts +15 -15
- package/lib/directives/draggable.directive.d.ts +76 -76
- package/lib/directives/dropzone.directive.d.ts +40 -40
- package/lib/directives/gesturable.directive.d.ts +27 -27
- package/lib/directives/index.d.ts +9 -9
- package/lib/directives/resizable.directive.d.ts +61 -61
- package/lib/interact.module.d.ts +20 -20
- package/lib/models/index.d.ts +1 -1
- package/lib/models/interact.d.ts +140 -140
- package/lib/pipes/array-of-n.pipe.d.ts +12 -12
- package/lib/pipes/index.d.ts +1 -1
- package/lib/services/interact.service.d.ts +83 -83
- package/lib/utils/helpers.d.ts +12 -12
- package/lib/utils/index.d.ts +1 -1
- package/package.json +9 -17
- package/tft-interact-15.0.0.tgz +0 -0
- package/esm2020/lib/directives/auto-scroll.directive.mjs +0 -56
- package/esm2020/lib/directives/resizable.directive.mjs +0 -228
- package/esm2020/lib/interact.module.mjs +0 -66
- package/fesm2015/tft-interact.mjs +0 -1203
- package/fesm2015/tft-interact.mjs.map +0 -1
- package/tft-interact-13.0.0.tgz +0 -0
- package/tft-interact.d.ts +0 -5
|
@@ -1,6 +1,6 @@
|
|
|
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
|
+
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';
|
|
6
6
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2ludGVyYWN0L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsa0JBQWtCLENBQUE7QUFDaEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmFjdC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcydcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscyc7XG4iXX0=
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { Directive, ElementRef, Input } 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 class AccountForScaleDirective {
|
|
10
|
-
constructor(el) {
|
|
11
|
-
this.el = el;
|
|
12
|
-
// this setup allows consumers to set x, y scale independently or just set them both with scale
|
|
13
|
-
this.scale = 1;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
19
|
-
type: Directive,
|
|
20
|
-
args: [{
|
|
21
|
-
selector: '[tftAccountForScale]'
|
|
22
|
-
}]
|
|
23
|
-
}], ctorParameters:
|
|
24
|
-
type: Input
|
|
25
|
-
}] } });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Directive, ElementRef, Input } 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 class AccountForScaleDirective {
|
|
10
|
+
constructor(el) {
|
|
11
|
+
this.el = el;
|
|
12
|
+
// this setup allows consumers to set x, y scale independently or just set them both with scale
|
|
13
|
+
this.scale = 1;
|
|
14
|
+
}
|
|
15
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AccountForScaleDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
16
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: AccountForScaleDirective, selector: "[tftAccountForScale]", inputs: { scale: "scale" }, ngImport: i0 }); }
|
|
17
|
+
}
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AccountForScaleDirective, decorators: [{
|
|
19
|
+
type: Directive,
|
|
20
|
+
args: [{
|
|
21
|
+
selector: '[tftAccountForScale]'
|
|
22
|
+
}]
|
|
23
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { scale: [{
|
|
24
|
+
type: Input
|
|
25
|
+
}] } });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1mb3Itc2NhbGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9pbnRlcmFjdC9zcmMvbGliL2RpcmVjdGl2ZXMvYWNjb3VudC1mb3Itc2NhbGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFlLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7O0FBRXBHOzs7OztHQUtHO0FBSUgsTUFBTSxPQUFPLHdCQUF3QjtJQUluQyxZQUNTLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBSnZCLCtGQUErRjtRQUN0RixVQUFLLEdBQUcsQ0FBQyxDQUFDO0lBSWYsQ0FBQzs4R0FOTSx3QkFBd0I7a0dBQXhCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFIcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2lCQUNqQzsrRUFHVSxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogVXNlIHRvIGFwcGx5IHNjYWxlIHRvIHRoZSBlbGVtZW50IGFuZCB0ZWxsIHRoZSBkcmFnIGFuZCByZXNpemUgZGlyZWN0aXZlcyB0byBhY2NvdW50IGZvciB0aGUgc2NhbGUgd2hlblxuICogQGV4YW1wbGUgPGRpdiB0ZnRBY2NvdW50Rm9yU2NhbGUgW3NjYWxlXT1cIjIuNVwiPiA8ZGl2IHRmdERyYWdnYWJsZT4gPC9kaXY+IDwvZGl2PlxuICogQG5vdGUgaWYgYGRyYWdSb290YCBpcyB1c2VkIHRoaXMgZGlyZWN0aXZlIHNob3VsZCBiZSB1c2VkIG9uIHRoZSBzYW1lIGVsZW1lbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGRyYWdcbiAqIGVsZW1lbnQgYWNjb3VudHMgZm9yIHNjYWxlXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZnRBY2NvdW50Rm9yU2NhbGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBBY2NvdW50Rm9yU2NhbGVEaXJlY3RpdmUge1xuICAvLyB0aGlzIHNldHVwIGFsbG93cyBjb25zdW1lcnMgdG8gc2V0IHgsIHkgc2NhbGUgaW5kZXBlbmRlbnRseSBvciBqdXN0IHNldCB0aGVtIGJvdGggd2l0aCBzY2FsZVxuICBASW5wdXQoKSBzY2FsZSA9IDE7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVsOiBFbGVtZW50UmVmXG4gICkgeyB9XG59XG4iXX0=
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { Directive, ElementRef, HostBinding, Input } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class ApplyScaleDirective {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
this._scale
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
this.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
18
|
-
type: Directive,
|
|
19
|
-
args: [{
|
|
20
|
-
selector: '[tftApplyScale]'
|
|
21
|
-
}]
|
|
22
|
-
}], ctorParameters:
|
|
23
|
-
type: Input
|
|
24
|
-
}], fontSize: [{
|
|
25
|
-
type: HostBinding,
|
|
26
|
-
args: ['style.fontSize']
|
|
27
|
-
}] } });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Directive, ElementRef, HostBinding, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class ApplyScaleDirective {
|
|
4
|
+
// this setup allows consumers to set x, y scale independently or just set them both with scale
|
|
5
|
+
set scale(val) {
|
|
6
|
+
this._scale;
|
|
7
|
+
this.fontSize = `${val}px`;
|
|
8
|
+
}
|
|
9
|
+
;
|
|
10
|
+
constructor(el) {
|
|
11
|
+
this.el = el;
|
|
12
|
+
this._scale = 1;
|
|
13
|
+
}
|
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ApplyScaleDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
15
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: ApplyScaleDirective, selector: "[tftApplyScale]", inputs: { scale: "scale" }, host: { properties: { "style.fontSize": "this.fontSize" } }, ngImport: i0 }); }
|
|
16
|
+
}
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ApplyScaleDirective, decorators: [{
|
|
18
|
+
type: Directive,
|
|
19
|
+
args: [{
|
|
20
|
+
selector: '[tftApplyScale]'
|
|
21
|
+
}]
|
|
22
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { scale: [{
|
|
23
|
+
type: Input
|
|
24
|
+
}], fontSize: [{
|
|
25
|
+
type: HostBinding,
|
|
26
|
+
args: ['style.fontSize']
|
|
27
|
+
}] } });
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktc2NhbGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9pbnRlcmFjdC9zcmMvbGliL2RpcmVjdGl2ZXMvYXBwbHktc2NhbGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzFFLE1BQU0sT0FBTyxtQkFBbUI7SUFHN0IsK0ZBQStGO0lBQ2hHLElBQWEsS0FBSyxDQUFDLEdBQVc7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBQUEsQ0FBQztJQUlGLFlBQ1MsRUFBYztRQUFkLE9BQUUsR0FBRixFQUFFLENBQVk7UUFWdkIsV0FBTSxHQUFHLENBQUMsQ0FBQztJQVdQLENBQUM7OEdBYk0sbUJBQW1CO2tHQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBSC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtpQkFDNUI7K0VBS2MsS0FBSztzQkFBakIsS0FBSztnQkFLeUIsUUFBUTtzQkFBdEMsV0FBVzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGZ0QXBwbHlTY2FsZV0nXG59KVxuZXhwb3J0IGNsYXNzIEFwcGx5U2NhbGVEaXJlY3RpdmUge1xuXG4gIF9zY2FsZSA9IDE7XG4gICAvLyB0aGlzIHNldHVwIGFsbG93cyBjb25zdW1lcnMgdG8gc2V0IHgsIHkgc2NhbGUgaW5kZXBlbmRlbnRseSBvciBqdXN0IHNldCB0aGVtIGJvdGggd2l0aCBzY2FsZVxuICBASW5wdXQoKSBzZXQgc2NhbGUodmFsOiBudW1iZXIpe1xuICAgIHRoaXMuX3NjYWxlO1xuICAgIHRoaXMuZm9udFNpemUgPSBgJHt2YWx9cHhgO1xuICB9O1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUuZm9udFNpemUnKSBmb250U2l6ZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbDogRWxlbWVudFJlZlxuICApIHsgfVxufVxuIl19
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Directive, ElementRef, HostListener, Input } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
3
|
+
import { scan, shareReplay } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
;
|
|
6
|
+
/**
|
|
7
|
+
* Use to apply scale to the element and tell the drag and resize directives to account for the scale when
|
|
8
|
+
* @example <div tftAccountForScale [scale]="2.5"> <div tftDraggable> </div> </div>
|
|
9
|
+
* @note if `dragRoot` is used this directive should be used on the same element to ensure that the drag
|
|
10
|
+
* element accounts for scale
|
|
11
|
+
*/
|
|
12
|
+
export class AutoScrollDirective {
|
|
13
|
+
// this setup allows consumers to set x, y scale independently or just set them both with scale
|
|
14
|
+
scroll(scrollEvent) {
|
|
15
|
+
const target = scrollEvent.target;
|
|
16
|
+
const { scrollTop, scrollLeft } = target;
|
|
17
|
+
this.scrollSubject.next({ scrollTop, scrollLeft });
|
|
18
|
+
}
|
|
19
|
+
constructor(el) {
|
|
20
|
+
this.el = el;
|
|
21
|
+
/**
|
|
22
|
+
* Limit minimum time between scroll events in milliseconds
|
|
23
|
+
*/
|
|
24
|
+
this.autoScrollConfig = {
|
|
25
|
+
margin: 50,
|
|
26
|
+
distance: 3,
|
|
27
|
+
interval: 50,
|
|
28
|
+
speed: 300,
|
|
29
|
+
enabled: true
|
|
30
|
+
};
|
|
31
|
+
this.scrollDeltaObserver = new Subject();
|
|
32
|
+
const { scrollTop, scrollLeft } = el.nativeElement;
|
|
33
|
+
this.scrollSubject = new BehaviorSubject({ scrollTop, scrollLeft });
|
|
34
|
+
this.scrollObserver = this.scrollSubject.pipe(scan((previous, current) => {
|
|
35
|
+
const scrollTop = current.scrollTop - previous.scrollTop;
|
|
36
|
+
const scrollLeft = current.scrollLeft - previous.scrollLeft;
|
|
37
|
+
this.scrollDeltaObserver.next({ scrollTop, scrollLeft });
|
|
38
|
+
return current;
|
|
39
|
+
}), shareReplay(1));
|
|
40
|
+
this.scrollObserver.subscribe();
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AutoScrollDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
43
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: AutoScrollDirective, selector: "[tftAutoScroll]", inputs: { autoScrollConfig: "autoScrollConfig" }, host: { listeners: { "scroll": "scroll($event)" } }, ngImport: i0 }); }
|
|
44
|
+
}
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AutoScrollDirective, decorators: [{
|
|
46
|
+
type: Directive,
|
|
47
|
+
args: [{
|
|
48
|
+
selector: '[tftAutoScroll]'
|
|
49
|
+
}]
|
|
50
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { autoScrollConfig: [{
|
|
51
|
+
type: Input
|
|
52
|
+
}], scroll: [{
|
|
53
|
+
type: HostListener,
|
|
54
|
+
args: ['scroll', ['$event']]
|
|
55
|
+
}] } });
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zY3JvbGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9pbnRlcmFjdC9zcmMvbGliL2RpcmVjdGl2ZXMvYXV0by1zY3JvbGwuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFVyxDQUFDO0FBQy9EOzs7OztHQUtHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQWM5QiwrRkFBK0Y7SUFDM0QsTUFBTSxDQUFDLFdBQWtCO1FBQzNELE1BQU0sTUFBTSxHQUFJLFdBQVcsQ0FBQyxNQUFzQixDQUFDO1FBQ25ELE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUdELFlBQ1MsRUFBYztRQUFkLE9BQUUsR0FBRixFQUFFLENBQVk7UUF0QnZCOztXQUVHO1FBQ00scUJBQWdCLEdBQUc7WUFDMUIsTUFBTSxFQUFFLEVBQUU7WUFDVixRQUFRLEVBQUUsQ0FBQztZQUNYLFFBQVEsRUFBRSxFQUFFO1lBQ1osS0FBSyxFQUFFLEdBQUc7WUFDVixPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7UUFHTyx3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBZ0IsQ0FBQztRQVl6RCxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFJLEVBQUUsQ0FBQyxhQUE2QixDQUFDO1FBQ3BFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUMzQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDekIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQ3pELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUM1RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7WUFDdkQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUE7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2xDLENBQUM7OEdBckNVLG1CQUFtQjtrR0FBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUgvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7aUJBQzVCOytFQUtVLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFXOEIsTUFBTTtzQkFBekMsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2Nhbiwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmludGVyZmFjZSBTY3JvbGxPYmplY3Qge3Njcm9sbFRvcDogbnVtYmVyLCBzY3JvbGxMZWZ0OiBudW1iZXJ9O1xuLyoqXG4gKiBVc2UgdG8gYXBwbHkgc2NhbGUgdG8gdGhlIGVsZW1lbnQgYW5kIHRlbGwgdGhlIGRyYWcgYW5kIHJlc2l6ZSBkaXJlY3RpdmVzIHRvIGFjY291bnQgZm9yIHRoZSBzY2FsZSB3aGVuXG4gKiBAZXhhbXBsZSA8ZGl2IHRmdEFjY291bnRGb3JTY2FsZSBbc2NhbGVdPVwiMi41XCI+IDxkaXYgdGZ0RHJhZ2dhYmxlPiA8L2Rpdj4gPC9kaXY+XG4gKiBAbm90ZSBpZiBgZHJhZ1Jvb3RgIGlzIHVzZWQgdGhpcyBkaXJlY3RpdmUgc2hvdWxkIGJlIHVzZWQgb24gdGhlIHNhbWUgZWxlbWVudCB0byBlbnN1cmUgdGhhdCB0aGUgZHJhZ1xuICogZWxlbWVudCBhY2NvdW50cyBmb3Igc2NhbGVcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3RmdEF1dG9TY3JvbGxdJ1xufSlcbmV4cG9ydCBjbGFzcyBBdXRvU2Nyb2xsRGlyZWN0aXZlIHtcbiAgLyoqXG4gICAqIExpbWl0IG1pbmltdW0gdGltZSBiZXR3ZWVuIHNjcm9sbCBldmVudHMgaW4gbWlsbGlzZWNvbmRzXG4gICAqL1xuICBASW5wdXQoKSBhdXRvU2Nyb2xsQ29uZmlnID0ge1xuICAgIG1hcmdpbjogNTAsXG4gICAgZGlzdGFuY2U6IDMsXG4gICAgaW50ZXJ2YWw6IDUwLFxuICAgIHNwZWVkOiAzMDAsXG4gICAgZW5hYmxlZDogdHJ1ZVxuICB9O1xuICBwcml2YXRlIHNjcm9sbFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxTY3JvbGxPYmplY3Q+O1xuICByZWFkb25seSBzY3JvbGxPYnNlcnZlcjogT2JzZXJ2YWJsZTxTY3JvbGxPYmplY3Q+O1xuICByZWFkb25seSBzY3JvbGxEZWx0YU9ic2VydmVyID0gbmV3IFN1YmplY3Q8U2Nyb2xsT2JqZWN0PigpO1xuICAvLyB0aGlzIHNldHVwIGFsbG93cyBjb25zdW1lcnMgdG8gc2V0IHgsIHkgc2NhbGUgaW5kZXBlbmRlbnRseSBvciBqdXN0IHNldCB0aGVtIGJvdGggd2l0aCBzY2FsZVxuICBASG9zdExpc3RlbmVyKCdzY3JvbGwnLCBbJyRldmVudCddKSBzY3JvbGwoc2Nyb2xsRXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gKHNjcm9sbEV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbExlZnQgfSA9IHRhcmdldDtcbiAgICB0aGlzLnNjcm9sbFN1YmplY3QubmV4dCh7c2Nyb2xsVG9wLCBzY3JvbGxMZWZ0fSlcbiAgfVxuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVsOiBFbGVtZW50UmVmXG4gICkge1xuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0IH0gPSAoZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgdGhpcy5zY3JvbGxTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7c2Nyb2xsVG9wLCBzY3JvbGxMZWZ0fSk7XG4gICAgdGhpcy5zY3JvbGxPYnNlcnZlciA9IHRoaXMuc2Nyb2xsU3ViamVjdC5waXBlKFxuICAgICAgc2NhbigocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gY3VycmVudC5zY3JvbGxUb3AgLSBwcmV2aW91cy5zY3JvbGxUb3A7XG4gICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSBjdXJyZW50LnNjcm9sbExlZnQgLSBwcmV2aW91cy5zY3JvbGxMZWZ0O1xuICAgICAgICB0aGlzLnNjcm9sbERlbHRhT2JzZXJ2ZXIubmV4dCh7c2Nyb2xsVG9wLCBzY3JvbGxMZWZ0fSk7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICApXG4gICAgdGhpcy5zY3JvbGxPYnNlcnZlci5zdWJzY3JpYmUoKTtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { Directive, InjectionToken, Input, TemplateRef } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export const TFT_DRAG_PREVIEW = new InjectionToken('DragPreviewDirective');
|
|
4
|
-
export class DragPreviewDirective {
|
|
5
|
-
constructor(templateRef) {
|
|
6
|
-
this.templateRef = templateRef;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
12
|
-
type: Directive,
|
|
13
|
-
args: [{
|
|
14
|
-
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
15
|
-
selector: 'ng-template[tftDragPreview]',
|
|
16
|
-
}]
|
|
17
|
-
}], ctorParameters:
|
|
18
|
-
type: Input
|
|
19
|
-
}] } });
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Directive, InjectionToken, Input, TemplateRef } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export const TFT_DRAG_PREVIEW = new InjectionToken('DragPreviewDirective');
|
|
4
|
+
export class DragPreviewDirective {
|
|
5
|
+
constructor(templateRef) {
|
|
6
|
+
this.templateRef = templateRef;
|
|
7
|
+
}
|
|
8
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: DragPreviewDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
9
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: DragPreviewDirective, selector: "ng-template[tftDragPreview]", inputs: { dragData: "dragData" }, ngImport: i0 }); }
|
|
10
|
+
}
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: DragPreviewDirective, decorators: [{
|
|
12
|
+
type: Directive,
|
|
13
|
+
args: [{
|
|
14
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
15
|
+
selector: 'ng-template[tftDragPreview]',
|
|
16
|
+
}]
|
|
17
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }], propDecorators: { dragData: [{
|
|
18
|
+
type: Input
|
|
19
|
+
}] } });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1wcmV2aWV3LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvaW50ZXJhY3Qvc3JjL2xpYi9kaXJlY3RpdmVzL2RyYWctcHJldmlldy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFFNUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQXVCLHNCQUFzQixDQUFDLENBQUM7QUFNakcsTUFBTSxPQUFPLG9CQUFvQjtJQUcvQixZQUFtQixXQUEyQjtRQUEzQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7SUFBSSxDQUFDOzhHQUh4QyxvQkFBb0I7a0dBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSw2QkFBNkI7aUJBQ3ZDO2dGQUdTLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSW5qZWN0aW9uVG9rZW4sIElucHV0LCBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBURlRfRFJBR19QUkVWSUVXID0gbmV3IEluamVjdGlvblRva2VuPERyYWdQcmV2aWV3RGlyZWN0aXZlPignRHJhZ1ByZXZpZXdEaXJlY3RpdmUnKTtcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbdGZ0RHJhZ1ByZXZpZXddJyxcbiB9KVxuZXhwb3J0IGNsYXNzIERyYWdQcmV2aWV3RGlyZWN0aXZlPFQgPSBhbnk+IHtcblxuICBASW5wdXQoKSBkcmFnRGF0YTogVDtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxUPikgeyB9XG59XG4iXX0=
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import { AccountForScaleDirective } from './account-for-scale.directive';
|
|
2
|
-
import { Directive, ElementRef, Optional, Self } from '@angular/core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "./account-for-scale.directive";
|
|
5
|
-
/**
|
|
6
|
-
* Use this directive to select which element to attach the element to while dragging
|
|
7
|
-
* @example <div tftDragRoot><div tftDraggable> </div> </div>
|
|
8
|
-
* @note this directive will overwrite any style transformations (e.g. transform: scale(2); )
|
|
9
|
-
*/
|
|
10
|
-
export class DragRootDirective {
|
|
11
|
-
constructor(el,
|
|
12
|
-
// This is used when passing a dragRoot as in input to a draggable element that not a child of that dragRoot
|
|
13
|
-
// It allows the the interact service to check if the drag root has some scaling applied to it and account for it when the component is dragged
|
|
14
|
-
account_for_scale_dir) {
|
|
15
|
-
this.el = el;
|
|
16
|
-
this.account_for_scale_dir = account_for_scale_dir;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
22
|
-
type: Directive,
|
|
23
|
-
args: [{
|
|
24
|
-
selector: '[tftDragRoot]',
|
|
25
|
-
exportAs: 'tftDragRoot'
|
|
26
|
-
}]
|
|
27
|
-
}], ctorParameters:
|
|
28
|
-
type: Optional
|
|
29
|
-
}, {
|
|
30
|
-
type: Self
|
|
31
|
-
}] }]
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { AccountForScaleDirective } from './account-for-scale.directive';
|
|
2
|
+
import { Directive, ElementRef, Optional, Self } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./account-for-scale.directive";
|
|
5
|
+
/**
|
|
6
|
+
* Use this directive to select which element to attach the element to while dragging
|
|
7
|
+
* @example <div tftDragRoot><div tftDraggable> </div> </div>
|
|
8
|
+
* @note this directive will overwrite any style transformations (e.g. transform: scale(2); )
|
|
9
|
+
*/
|
|
10
|
+
export class DragRootDirective {
|
|
11
|
+
constructor(el,
|
|
12
|
+
// This is used when passing a dragRoot as in input to a draggable element that not a child of that dragRoot
|
|
13
|
+
// It allows the the interact service to check if the drag root has some scaling applied to it and account for it when the component is dragged
|
|
14
|
+
account_for_scale_dir) {
|
|
15
|
+
this.el = el;
|
|
16
|
+
this.account_for_scale_dir = account_for_scale_dir;
|
|
17
|
+
}
|
|
18
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: DragRootDirective, deps: [{ token: i0.ElementRef }, { token: i1.AccountForScaleDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
19
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: DragRootDirective, selector: "[tftDragRoot]", exportAs: ["tftDragRoot"], ngImport: i0 }); }
|
|
20
|
+
}
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: DragRootDirective, decorators: [{
|
|
22
|
+
type: Directive,
|
|
23
|
+
args: [{
|
|
24
|
+
selector: '[tftDragRoot]',
|
|
25
|
+
exportAs: 'tftDragRoot'
|
|
26
|
+
}]
|
|
27
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.AccountForScaleDirective, decorators: [{
|
|
28
|
+
type: Optional
|
|
29
|
+
}, {
|
|
30
|
+
type: Self
|
|
31
|
+
}] }] });
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1yb290LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvaW50ZXJhY3Qvc3JjL2xpYi9kaXJlY3RpdmVzL2RyYWctcm9vdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBRXRFOzs7O0dBSUc7QUFLSCxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLFlBQ1MsRUFBYztJQUNyQiw0R0FBNEc7SUFDNUcsK0lBQStJO0lBQ3BILHFCQUFnRDtRQUhwRSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBR00sMEJBQXFCLEdBQXJCLHFCQUFxQixDQUEyQjtJQUN6RSxDQUFDOzhHQVBNLGlCQUFpQjtrR0FBakIsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUUsYUFBYTtpQkFDeEI7OzBCQU9JLFFBQVE7OzBCQUFJLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2NvdW50Rm9yU2NhbGVEaXJlY3RpdmUgfSBmcm9tICcuL2FjY291bnQtZm9yLXNjYWxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9wdGlvbmFsLCBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogVXNlIHRoaXMgZGlyZWN0aXZlIHRvIHNlbGVjdCB3aGljaCBlbGVtZW50IHRvIGF0dGFjaCB0aGUgZWxlbWVudCB0byB3aGlsZSBkcmFnZ2luZ1xuICogQGV4YW1wbGUgPGRpdiB0ZnREcmFnUm9vdD48ZGl2IHRmdERyYWdnYWJsZT4gPC9kaXY+IDwvZGl2PlxuICogQG5vdGUgdGhpcyBkaXJlY3RpdmUgd2lsbCBvdmVyd3JpdGUgYW55IHN0eWxlIHRyYW5zZm9ybWF0aW9ucyAoZS5nLiB0cmFuc2Zvcm06IHNjYWxlKDIpOyApXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZnREcmFnUm9vdF0nLFxuICBleHBvcnRBczogJ3RmdERyYWdSb290J1xufSlcbmV4cG9ydCBjbGFzcyBEcmFnUm9vdERpcmVjdGl2ZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVsOiBFbGVtZW50UmVmLFxuICAgIC8vIFRoaXMgaXMgdXNlZCB3aGVuIHBhc3NpbmcgYSBkcmFnUm9vdCBhcyBpbiBpbnB1dCB0byBhIGRyYWdnYWJsZSBlbGVtZW50IHRoYXQgbm90IGEgY2hpbGQgb2YgdGhhdCBkcmFnUm9vdFxuICAgIC8vIEl0IGFsbG93cyB0aGUgdGhlIGludGVyYWN0IHNlcnZpY2UgdG8gY2hlY2sgaWYgdGhlIGRyYWcgcm9vdCBoYXMgc29tZSBzY2FsaW5nIGFwcGxpZWQgdG8gaXQgYW5kIGFjY291bnQgZm9yIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkcmFnZ2VkXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgYWNjb3VudF9mb3Jfc2NhbGVfZGlyPzogQWNjb3VudEZvclNjYWxlRGlyZWN0aXZlXG4gICkgeyB9XG59XG4iXX0=
|