ngx-fabric-wrapper 10.0.0 → 12.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/lib/fabric.component.mjs +193 -0
- package/esm2020/lib/fabric.directive.mjs +310 -0
- package/esm2020/lib/fabric.interfaces.mjs +58 -0
- package/esm2020/lib/fabric.module.mjs +20 -0
- package/{esm2015/ngx-fabric-wrapper.js → esm2020/ngx-fabric-wrapper.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/ngx-fabric-wrapper.mjs +580 -0
- package/fesm2015/ngx-fabric-wrapper.mjs.map +1 -0
- package/fesm2020/ngx-fabric-wrapper.mjs +578 -0
- package/fesm2020/ngx-fabric-wrapper.mjs.map +1 -0
- package/lib/fabric.component.d.ts +4 -0
- package/lib/fabric.directive.d.ts +4 -0
- package/lib/fabric.interfaces.d.ts +1 -1
- package/lib/fabric.module.d.ts +7 -0
- package/ngx-fabric-wrapper.d.ts +1 -0
- package/package.json +24 -12
- package/bundles/ngx-fabric-wrapper.umd.js +0 -507
- package/bundles/ngx-fabric-wrapper.umd.js.map +0 -1
- package/bundles/ngx-fabric-wrapper.umd.min.js +0 -2
- package/bundles/ngx-fabric-wrapper.umd.min.js.map +0 -1
- package/esm2015/lib/fabric.component.js +0 -139
- package/esm2015/lib/fabric.directive.js +0 -258
- package/esm2015/lib/fabric.interfaces.js +0 -57
- package/esm2015/lib/fabric.module.js +0 -15
- package/fesm2015/ngx-fabric-wrapper.js +0 -469
- package/fesm2015/ngx-fabric-wrapper.js.map +0 -1
- package/ngx-fabric-wrapper.metadata.json +0 -1
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ViewChild, HostBinding, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { FabricDirective } from './fabric.directive';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./fabric.directive";
|
|
5
|
+
export class FabricComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.json = null;
|
|
8
|
+
this.zoom = null;
|
|
9
|
+
this.width = null;
|
|
10
|
+
this.height = null;
|
|
11
|
+
this.disabled = false;
|
|
12
|
+
this.useFabricClass = true;
|
|
13
|
+
this.dataLoaded = new EventEmitter();
|
|
14
|
+
this.drop = new EventEmitter();
|
|
15
|
+
this.dragover = new EventEmitter();
|
|
16
|
+
this.dragenter = new EventEmitter();
|
|
17
|
+
this.dragleave = new EventEmitter();
|
|
18
|
+
this.mouseup = new EventEmitter();
|
|
19
|
+
this.mousedown = new EventEmitter();
|
|
20
|
+
this.mouseover = new EventEmitter();
|
|
21
|
+
this.mouseout = new EventEmitter();
|
|
22
|
+
this.mousemove = new EventEmitter();
|
|
23
|
+
this.mousewheel = new EventEmitter();
|
|
24
|
+
this.mousedblclick = new EventEmitter();
|
|
25
|
+
this.mouseupBefore = new EventEmitter();
|
|
26
|
+
this.mousedownBefore = new EventEmitter();
|
|
27
|
+
this.mousemoveBefore = new EventEmitter();
|
|
28
|
+
this.mouseUp = new EventEmitter();
|
|
29
|
+
this.mouseDown = new EventEmitter();
|
|
30
|
+
this.mouseOver = new EventEmitter();
|
|
31
|
+
this.mouseOut = new EventEmitter();
|
|
32
|
+
this.mouseMove = new EventEmitter();
|
|
33
|
+
this.mouseWheel = new EventEmitter();
|
|
34
|
+
this.mouseDblclick = new EventEmitter();
|
|
35
|
+
this.mouseUpBefore = new EventEmitter();
|
|
36
|
+
this.mouseDownBefore = new EventEmitter();
|
|
37
|
+
this.mouseMoveBefore = new EventEmitter();
|
|
38
|
+
this.pathCreated = new EventEmitter();
|
|
39
|
+
this.alterRender = new EventEmitter();
|
|
40
|
+
this.objectAdded = new EventEmitter();
|
|
41
|
+
this.objectMoved = new EventEmitter();
|
|
42
|
+
this.objectScaled = new EventEmitter();
|
|
43
|
+
this.objectSkewed = new EventEmitter();
|
|
44
|
+
this.objectRotated = new EventEmitter();
|
|
45
|
+
this.objectRemoved = new EventEmitter();
|
|
46
|
+
this.objectModified = new EventEmitter();
|
|
47
|
+
this.objectSelected = new EventEmitter();
|
|
48
|
+
this.objectMoving = new EventEmitter();
|
|
49
|
+
this.objectScaling = new EventEmitter();
|
|
50
|
+
this.objectSkewing = new EventEmitter();
|
|
51
|
+
this.objectRotating = new EventEmitter();
|
|
52
|
+
this.selectionCleared = new EventEmitter();
|
|
53
|
+
this.selectionCreated = new EventEmitter();
|
|
54
|
+
this.selectionUpdated = new EventEmitter();
|
|
55
|
+
this.beforeTransform = new EventEmitter();
|
|
56
|
+
this.beforeSelectionCleared = new EventEmitter();
|
|
57
|
+
}
|
|
58
|
+
set data(data) {
|
|
59
|
+
this.setJSON(data);
|
|
60
|
+
}
|
|
61
|
+
ngAfterViewInit() {
|
|
62
|
+
if (this.json != null) {
|
|
63
|
+
this.setJSON(this.json, true);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
setJSON(json, force) {
|
|
67
|
+
if (force || json !== this.json) {
|
|
68
|
+
if (this.directiveRef) {
|
|
69
|
+
this.directiveRef.loadFromJSON(json, () => {
|
|
70
|
+
if (this.directiveRef && this.directiveRef.fabric()) {
|
|
71
|
+
this.dataLoaded.emit(this.directiveRef.fabric());
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
this.json = json;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
FabricComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: FabricComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
80
|
+
FabricComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: FabricComponent, selector: "fabric", inputs: { data: "data", zoom: "zoom", width: "width", height: "height", disabled: "disabled", config: "config", useFabricClass: "useFabricClass" }, outputs: { dataLoaded: "dataLoaded", drop: "drop", dragover: "dragover", dragenter: "dragenter", dragleave: "dragleave", mouseup: "mouseup", mousedown: "mousedown", mouseover: "mouseover", mouseout: "mouseout", mousemove: "mousemove", mousewheel: "mousewheel", mousedblclick: "mousedblclick", mouseupBefore: "mouseupBefore", mousedownBefore: "mousedownBefore", mousemoveBefore: "mousemoveBefore", mouseUp: "mouseUp", mouseDown: "mouseDown", mouseOver: "mouseOver", mouseOut: "mouseOut", mouseMove: "mouseMove", mouseWheel: "mouseWheel", mouseDblclick: "mouseDblclick", mouseUpBefore: "mouseUpBefore", mouseDownBefore: "mouseDownBefore", mouseMoveBefore: "mouseMoveBefore", pathCreated: "pathCreated", alterRender: "alterRender", objectAdded: "objectAdded", objectMoved: "objectMoved", objectScaled: "objectScaled", objectSkewed: "objectSkewed", objectRotated: "objectRotated", objectRemoved: "objectRemoved", objectModified: "objectModified", objectSelected: "objectSelected", objectMoving: "objectMoving", objectScaling: "objectScaling", objectSkewing: "objectSkewing", objectRotating: "objectRotating", selectionCleared: "selectionCleared", selectionCreated: "selectionCreated", selectionUpdated: "selectionUpdated", beforeTransform: "beforeTransform", beforeSelectionCleared: "beforeSelectionCleared" }, host: { properties: { "class.fabric": "this.useFabricClass" } }, viewQueries: [{ propertyName: "directiveRef", first: true, predicate: FabricDirective, descendants: true, static: true }], exportAs: ["ngxFabric"], ngImport: i0, template: "<canvas [fabric]=\"config\" [zoom]=\"zoom\" [width]=\"width\" [height]=\"height\" [disabled]=\"disabled\" (drop)=\"drop.emit($event)\" (dragover)=\"dragover.emit($event)\" (dragenter)=\"dragenter.emit($event)\" (dragleave)=\"dragleave.emit($event)\" (mouseup)=\"mouseup.emit($event)\" (mousedown)=\"mousedown.emit($event)\" (mouseover)=\"mouseover.emit($event)\" (mouseout)=\"mouseout.emit($event)\" (mousemove)=\"mousemove.emit($event)\" (mousewheel)=\"mousewheel.emit($event)\" (mousedblclick)=\"mousedblclick.emit($event)\" (mouseupBefore)=\"mouseupBefore.emit($event)\" (mousedownBefore)=\"mousedownBefore.emit($event)\" (mousemoveBefore)=\"mousemoveBefore.emit($event)\" (mouseUp)=\"mouseUp.emit($event)\" (mouseDown)=\"mouseDown.emit($event)\" (mouseOver)=\"mouseOver.emit($event)\" (mouseOut)=\"mouseOut.emit($event)\" (mouseMove)=\"mouseMove.emit($event)\" (mouseWheel)=\"mouseWheel.emit($event)\" (mouseDblclick)=\"mouseDblclick.emit($event)\" (mouseUpBefore)=\"mouseUpBefore.emit($event)\" (mouseDownBefore)=\"mouseDownBefore.emit($event)\" (mouseMoveBefore)=\"mouseMoveBefore.emit($event)\" (pathCreated)=\"pathCreated.emit($event)\" (alterRender)=\"alterRender.emit($event)\" (objectAdded)=\"objectAdded.emit($event)\" (objectMoved)=\"objectMoved.emit($event)\" (objectScaled)=\"objectScaled.emit($event)\" (objectSkewed)=\"objectSkewed.emit($event)\" (objectRotated)=\"objectRotated.emit($event)\" (objectRemoved)=\"objectRemoved.emit($event)\" (objectModified)=\"objectModified.emit($event)\" (objectSelected)=\"objectSelected.emit($event)\" (objectMoving)=\"objectMoving.emit($event)\" (objectScaling)=\"objectScaling.emit($event)\" (objectSkewing)=\"objectSkewing.emit($event)\" (objectRotating)=\"objectRotating.emit($event)\" (selectionCleared)=\"selectionCleared.emit($event)\" (selectionCreated)=\"selectionCreated.emit($event)\" (selectionUpdated)=\"selectionUpdated.emit($event)\" (beforeTransform)=\"beforeTransform.emit($event)\" (beforeSelectionCleared)=\"beforeSelectionCleared.emit($event)\">\n</canvas>\n", styles: ["fabric[fxflex]{display:flex;flex-direction:column;min-width:0;min-height:0}fabric.fabric{width:100%;height:100%}\n"], directives: [{ type: i1.FabricDirective, selector: "[fabric]", inputs: ["zoom", "width", "height", "disabled", "fabric"], outputs: ["drop", "dragover", "dragenter", "dragleave", "mouseup", "mousedown", "mouseover", "mouseout", "mousemove", "mousewheel", "mousedblclick", "mouseupBefore", "mousedownBefore", "mousemoveBefore", "mouseUp", "mouseDown", "mouseOver", "mouseOut", "mouseMove", "mouseWheel", "mouseDblclick", "mouseUpBefore", "mouseDownBefore", "mouseMoveBefore", "pathCreated", "alterRender", "objectAdded", "objectMoved", "objectScaled", "objectSkewed", "objectRotated", "objectRemoved", "objectModified", "objectSelected", "objectMoving", "objectScaling", "objectSkewing", "objectRotating", "selectionCleared", "selectionCreated", "selectionUpdated", "beforeTransform", "beforeSelectionCleared"], exportAs: ["ngxFabric"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: FabricComponent, decorators: [{
|
|
82
|
+
type: Component,
|
|
83
|
+
args: [{ selector: 'fabric', exportAs: 'ngxFabric', encapsulation: ViewEncapsulation.None, template: "<canvas [fabric]=\"config\" [zoom]=\"zoom\" [width]=\"width\" [height]=\"height\" [disabled]=\"disabled\" (drop)=\"drop.emit($event)\" (dragover)=\"dragover.emit($event)\" (dragenter)=\"dragenter.emit($event)\" (dragleave)=\"dragleave.emit($event)\" (mouseup)=\"mouseup.emit($event)\" (mousedown)=\"mousedown.emit($event)\" (mouseover)=\"mouseover.emit($event)\" (mouseout)=\"mouseout.emit($event)\" (mousemove)=\"mousemove.emit($event)\" (mousewheel)=\"mousewheel.emit($event)\" (mousedblclick)=\"mousedblclick.emit($event)\" (mouseupBefore)=\"mouseupBefore.emit($event)\" (mousedownBefore)=\"mousedownBefore.emit($event)\" (mousemoveBefore)=\"mousemoveBefore.emit($event)\" (mouseUp)=\"mouseUp.emit($event)\" (mouseDown)=\"mouseDown.emit($event)\" (mouseOver)=\"mouseOver.emit($event)\" (mouseOut)=\"mouseOut.emit($event)\" (mouseMove)=\"mouseMove.emit($event)\" (mouseWheel)=\"mouseWheel.emit($event)\" (mouseDblclick)=\"mouseDblclick.emit($event)\" (mouseUpBefore)=\"mouseUpBefore.emit($event)\" (mouseDownBefore)=\"mouseDownBefore.emit($event)\" (mouseMoveBefore)=\"mouseMoveBefore.emit($event)\" (pathCreated)=\"pathCreated.emit($event)\" (alterRender)=\"alterRender.emit($event)\" (objectAdded)=\"objectAdded.emit($event)\" (objectMoved)=\"objectMoved.emit($event)\" (objectScaled)=\"objectScaled.emit($event)\" (objectSkewed)=\"objectSkewed.emit($event)\" (objectRotated)=\"objectRotated.emit($event)\" (objectRemoved)=\"objectRemoved.emit($event)\" (objectModified)=\"objectModified.emit($event)\" (objectSelected)=\"objectSelected.emit($event)\" (objectMoving)=\"objectMoving.emit($event)\" (objectScaling)=\"objectScaling.emit($event)\" (objectSkewing)=\"objectSkewing.emit($event)\" (objectRotating)=\"objectRotating.emit($event)\" (selectionCleared)=\"selectionCleared.emit($event)\" (selectionCreated)=\"selectionCreated.emit($event)\" (selectionUpdated)=\"selectionUpdated.emit($event)\" (beforeTransform)=\"beforeTransform.emit($event)\" (beforeSelectionCleared)=\"beforeSelectionCleared.emit($event)\">\n</canvas>\n", styles: ["fabric[fxflex]{display:flex;flex-direction:column;min-width:0;min-height:0}fabric.fabric{width:100%;height:100%}\n"] }]
|
|
84
|
+
}], ctorParameters: function () { return []; }, propDecorators: { data: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], zoom: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], width: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], height: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], disabled: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}], config: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}], useFabricClass: [{
|
|
97
|
+
type: HostBinding,
|
|
98
|
+
args: ['class.fabric']
|
|
99
|
+
}, {
|
|
100
|
+
type: Input
|
|
101
|
+
}], dataLoaded: [{
|
|
102
|
+
type: Output
|
|
103
|
+
}], drop: [{
|
|
104
|
+
type: Output
|
|
105
|
+
}], dragover: [{
|
|
106
|
+
type: Output
|
|
107
|
+
}], dragenter: [{
|
|
108
|
+
type: Output
|
|
109
|
+
}], dragleave: [{
|
|
110
|
+
type: Output
|
|
111
|
+
}], mouseup: [{
|
|
112
|
+
type: Output
|
|
113
|
+
}], mousedown: [{
|
|
114
|
+
type: Output
|
|
115
|
+
}], mouseover: [{
|
|
116
|
+
type: Output
|
|
117
|
+
}], mouseout: [{
|
|
118
|
+
type: Output
|
|
119
|
+
}], mousemove: [{
|
|
120
|
+
type: Output
|
|
121
|
+
}], mousewheel: [{
|
|
122
|
+
type: Output
|
|
123
|
+
}], mousedblclick: [{
|
|
124
|
+
type: Output
|
|
125
|
+
}], mouseupBefore: [{
|
|
126
|
+
type: Output
|
|
127
|
+
}], mousedownBefore: [{
|
|
128
|
+
type: Output
|
|
129
|
+
}], mousemoveBefore: [{
|
|
130
|
+
type: Output
|
|
131
|
+
}], mouseUp: [{
|
|
132
|
+
type: Output
|
|
133
|
+
}], mouseDown: [{
|
|
134
|
+
type: Output
|
|
135
|
+
}], mouseOver: [{
|
|
136
|
+
type: Output
|
|
137
|
+
}], mouseOut: [{
|
|
138
|
+
type: Output
|
|
139
|
+
}], mouseMove: [{
|
|
140
|
+
type: Output
|
|
141
|
+
}], mouseWheel: [{
|
|
142
|
+
type: Output
|
|
143
|
+
}], mouseDblclick: [{
|
|
144
|
+
type: Output
|
|
145
|
+
}], mouseUpBefore: [{
|
|
146
|
+
type: Output
|
|
147
|
+
}], mouseDownBefore: [{
|
|
148
|
+
type: Output
|
|
149
|
+
}], mouseMoveBefore: [{
|
|
150
|
+
type: Output
|
|
151
|
+
}], pathCreated: [{
|
|
152
|
+
type: Output
|
|
153
|
+
}], alterRender: [{
|
|
154
|
+
type: Output
|
|
155
|
+
}], objectAdded: [{
|
|
156
|
+
type: Output
|
|
157
|
+
}], objectMoved: [{
|
|
158
|
+
type: Output
|
|
159
|
+
}], objectScaled: [{
|
|
160
|
+
type: Output
|
|
161
|
+
}], objectSkewed: [{
|
|
162
|
+
type: Output
|
|
163
|
+
}], objectRotated: [{
|
|
164
|
+
type: Output
|
|
165
|
+
}], objectRemoved: [{
|
|
166
|
+
type: Output
|
|
167
|
+
}], objectModified: [{
|
|
168
|
+
type: Output
|
|
169
|
+
}], objectSelected: [{
|
|
170
|
+
type: Output
|
|
171
|
+
}], objectMoving: [{
|
|
172
|
+
type: Output
|
|
173
|
+
}], objectScaling: [{
|
|
174
|
+
type: Output
|
|
175
|
+
}], objectSkewing: [{
|
|
176
|
+
type: Output
|
|
177
|
+
}], objectRotating: [{
|
|
178
|
+
type: Output
|
|
179
|
+
}], selectionCleared: [{
|
|
180
|
+
type: Output
|
|
181
|
+
}], selectionCreated: [{
|
|
182
|
+
type: Output
|
|
183
|
+
}], selectionUpdated: [{
|
|
184
|
+
type: Output
|
|
185
|
+
}], beforeTransform: [{
|
|
186
|
+
type: Output
|
|
187
|
+
}], beforeSelectionCleared: [{
|
|
188
|
+
type: Output
|
|
189
|
+
}], directiveRef: [{
|
|
190
|
+
type: ViewChild,
|
|
191
|
+
args: [FabricDirective, { static: true }]
|
|
192
|
+
}] } });
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFicmljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi9zcmMvbGliL2ZhYnJpYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWIvc3JjL2xpYi9mYWJyaWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFDRCxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFDMUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQVdyRCxNQUFNLE9BQU8sZUFBZTtJQTBFMUI7UUF6RVEsU0FBSSxHQUFRLElBQUksQ0FBQztRQU9oQixTQUFJLEdBQWtCLElBQUksQ0FBQztRQUUzQixVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM1QixXQUFNLEdBQWtCLElBQUksQ0FBQztRQUU3QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBSzFCLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBRTlCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXJDLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQy9CLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ25DLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXBDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3BDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ25DLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFD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QkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUV1QyxZQUFZO3NCQUF6RCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsXG4gIEFmdGVyVmlld0luaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlcixcbiAgVmlld0NoaWxkLCBIb3N0QmluZGluZywgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRmFicmljRGlyZWN0aXZlIH0gZnJvbSAnLi9mYWJyaWMuZGlyZWN0aXZlJztcblxuaW1wb3J0IHsgRmFicmljQ29uZmlnSW50ZXJmYWNlIH0gZnJvbSAnLi9mYWJyaWMuaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZhYnJpYycsXG4gIGV4cG9ydEFzOiAnbmd4RmFicmljJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZhYnJpYy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWyAnLi9mYWJyaWMuY29tcG9uZW50LmNzcycgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBGYWJyaWNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSBqc29uOiBhbnkgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKGRhdGE6IHN0cmluZykge1xuICAgIHRoaXMuc2V0SlNPTihkYXRhKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHpvb206IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgaGVpZ2h0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGNvbmZpZz86IEZhYnJpY0NvbmZpZ0ludGVyZmFjZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZhYnJpYycpXG4gIEBJbnB1dCgpIHVzZUZhYnJpY0NsYXNzOiBib29sZWFuID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgZGF0YUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBkcm9wID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBkcmFnb3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZHJhZ2VudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBkcmFnbGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgbW91c2V1cCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2Vkb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZW92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNld2hlZWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlZGJsY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNldXBCZWZvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlZG93bkJlZm9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2Vtb3ZlQmVmb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG1vdXNlVXAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlRG93biA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2VPdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZU91dCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2VNb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZVdoZWVsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZURibGNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZVVwQmVmb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZURvd25CZWZvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlTW92ZUJlZm9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBwYXRoQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgYWx0ZXJSZW5kZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb2JqZWN0QWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdE1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvYmplY3RTY2FsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNrZXdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0Um90YXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0UmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0TW9kaWZpZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvYmplY3RNb3ZpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNjYWxpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNrZXdpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFJvdGF0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNsZWFyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvblVwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgYmVmb3JlVHJhbnNmb3JtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBiZWZvcmVTZWxlY3Rpb25DbGVhcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQFZpZXdDaGlsZChGYWJyaWNEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGRpcmVjdGl2ZVJlZj86IEZhYnJpY0RpcmVjdGl2ZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmpzb24gIT0gbnVsbCkge1xuICAgICAgdGhpcy5zZXRKU09OKHRoaXMuanNvbiwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRKU09OKGpzb246IHN0cmluZywgZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGZvcmNlIHx8IGpzb24gIT09IHRoaXMuanNvbikge1xuICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlUmVmKSB7XG4gICAgICAgIHRoaXMuZGlyZWN0aXZlUmVmLmxvYWRGcm9tSlNPTihqc29uLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlUmVmICYmIHRoaXMuZGlyZWN0aXZlUmVmLmZhYnJpYygpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFMb2FkZWQuZW1pdCh0aGlzLmRpcmVjdGl2ZVJlZi5mYWJyaWMoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5qc29uID0ganNvbjtcbiAgICB9XG4gIH1cbn1cbiIsIjxjYW52YXMgW2ZhYnJpY109XCJjb25maWdcIiBbem9vbV09XCJ6b29tXCIgW3dpZHRoXT1cIndpZHRoXCIgW2hlaWdodF09XCJoZWlnaHRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAoZHJvcCk9XCJkcm9wLmVtaXQoJGV2ZW50KVwiIChkcmFnb3Zlcik9XCJkcmFnb3Zlci5lbWl0KCRldmVudClcIiAoZHJhZ2VudGVyKT1cImRyYWdlbnRlci5lbWl0KCRldmVudClcIiAoZHJhZ2xlYXZlKT1cImRyYWdsZWF2ZS5lbWl0KCRldmVudClcIiAobW91c2V1cCk9XCJtb3VzZXVwLmVtaXQoJGV2ZW50KVwiIChtb3VzZWRvd24pPVwibW91c2Vkb3duLmVtaXQoJGV2ZW50KVwiIChtb3VzZW92ZXIpPVwibW91c2VvdmVyLmVtaXQoJGV2ZW50KVwiIChtb3VzZW91dCk9XCJtb3VzZW91dC5lbWl0KCRldmVudClcIiAobW91c2Vtb3ZlKT1cIm1vdXNlbW92ZS5lbWl0KCRldmVudClcIiAobW91c2V3aGVlbCk9XCJtb3VzZXdoZWVsLmVtaXQoJGV2ZW50KVwiIChtb3VzZWRibGNsaWNrKT1cIm1vdXNlZGJsY2xpY2suZW1pdCgkZXZlbnQpXCIgKG1vdXNldXBCZWZvcmUpPVwibW91c2V1cEJlZm9yZS5lbWl0KCRldmVudClcIiAobW91c2Vkb3duQmVmb3JlKT1cIm1vdXNlZG93bkJlZm9yZS5lbWl0KCRldmVudClcIiAobW91c2Vtb3ZlQmVmb3JlKT1cIm1vdXNlbW92ZUJlZm9yZS5lbWl0KCRldmVudClcIiAobW91c2VVcCk9XCJtb3VzZVVwLmVtaXQoJGV2ZW50KVwiIChtb3VzZURvd24pPVwibW91c2VEb3duLmVtaXQoJGV2ZW50KVwiIChtb3VzZU92ZXIpPVwibW91c2VPdmVyLmVtaXQoJGV2ZW50KVwiIChtb3VzZU91dCk9XCJtb3VzZU91dC5lbWl0KCRldmVudClcIiAobW91c2VNb3ZlKT1cIm1vdXNlTW92ZS5lbWl0KCRldmVudClcIiAobW91c2VXaGVlbCk9XCJtb3VzZVdoZWVsLmVtaXQoJGV2ZW50KVwiIChtb3VzZURibGNsaWNrKT1cIm1vdXNlRGJsY2xpY2suZW1pdCgkZXZlbnQpXCIgKG1vdXNlVXBCZWZvcmUpPVwibW91c2VVcEJlZm9yZS5lbWl0KCRldmVudClcIiAobW91c2VEb3duQmVmb3JlKT1cIm1vdXNlRG93bkJlZm9yZS5lbWl0KCRldmVudClcIiAobW91c2VNb3ZlQmVmb3JlKT1cIm1vdXNlTW92ZUJlZm9yZS5lbWl0KCRldmVudClcIiAocGF0aENyZWF0ZWQpPVwicGF0aENyZWF0ZWQuZW1pdCgkZXZlbnQpXCIgKGFsdGVyUmVuZGVyKT1cImFsdGVyUmVuZGVyLmVtaXQoJGV2ZW50KVwiIChvYmplY3RBZGRlZCk9XCJvYmplY3RBZGRlZC5lbWl0KCRldmVudClcIiAob2JqZWN0TW92ZWQpPVwib2JqZWN0TW92ZWQuZW1pdCgkZXZlbnQpXCIgKG9iamVjdFNjYWxlZCk9XCJvYmplY3RTY2FsZWQuZW1pdCgkZXZlbnQpXCIgKG9iamVjdFNrZXdlZCk9XCJvYmplY3RTa2V3ZWQuZW1pdCgkZXZlbnQpXCIgKG9iamVjdFJvdGF0ZWQpPVwib2JqZWN0Um90YXRlZC5lbWl0KCRldmVudClcIiAob2JqZWN0UmVtb3ZlZCk9XCJvYmplY3RSZW1vdmVkLmVtaXQoJGV2ZW50KVwiIChvYmplY3RNb2RpZmllZCk9XCJvYmplY3RNb2RpZmllZC5lbWl0KCRldmVudClcIiAob2JqZWN0U2VsZWN0ZWQpPVwib2JqZWN0U2VsZWN0ZWQuZW1pdCgkZXZlbnQpXCIgKG9iamVjdE1vdmluZyk9XCJvYmplY3RNb3ZpbmcuZW1pdCgkZXZlbnQpXCIgKG9iamVjdFNjYWxpbmcpPVwib2JqZWN0U2NhbGluZy5lbWl0KCRldmVudClcIiAob2JqZWN0U2tld2luZyk9XCJvYmplY3RTa2V3aW5nLmVtaXQoJGV2ZW50KVwiIChvYmplY3RSb3RhdGluZyk9XCJvYmplY3RSb3RhdGluZy5lbWl0KCRldmVudClcIiAoc2VsZWN0aW9uQ2xlYXJlZCk9XCJzZWxlY3Rpb25DbGVhcmVkLmVtaXQoJGV2ZW50KVwiIChzZWxlY3Rpb25DcmVhdGVkKT1cInNlbGVjdGlvbkNyZWF0ZWQuZW1pdCgkZXZlbnQpXCIgKHNlbGVjdGlvblVwZGF0ZWQpPVwic2VsZWN0aW9uVXBkYXRlZC5lbWl0KCRldmVudClcIiAoYmVmb3JlVHJhbnNmb3JtKT1cImJlZm9yZVRyYW5zZm9ybS5lbWl0KCRldmVudClcIiAoYmVmb3JlU2VsZWN0aW9uQ2xlYXJlZCk9XCJiZWZvcmVTZWxlY3Rpb25DbGVhcmVkLmVtaXQoJGV2ZW50KVwiPlxuPC9jYW52YXM+XG4iXX0=
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { fabric } from 'fabric';
|
|
2
|
+
import ResizeObserver from 'resize-observer-polyfill';
|
|
3
|
+
import { Directive, Optional, Inject, Input, Output, EventEmitter } from '@angular/core';
|
|
4
|
+
import { FABRIC_CONFIG, FabricConfig, FabricEvents } from './fabric.interfaces';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class FabricDirective {
|
|
7
|
+
constructor(zone, elementRef, differs, defaults) {
|
|
8
|
+
this.zone = zone;
|
|
9
|
+
this.elementRef = elementRef;
|
|
10
|
+
this.differs = differs;
|
|
11
|
+
this.defaults = defaults;
|
|
12
|
+
this.instance = null;
|
|
13
|
+
this.ro = null;
|
|
14
|
+
this.objectsJSON = null;
|
|
15
|
+
this.initialZoom = null;
|
|
16
|
+
this.initialWidth = null;
|
|
17
|
+
this.initialHeight = null;
|
|
18
|
+
this.configDiff = null;
|
|
19
|
+
this.disabled = false;
|
|
20
|
+
this.drop = new EventEmitter();
|
|
21
|
+
this.dragover = new EventEmitter();
|
|
22
|
+
this.dragenter = new EventEmitter();
|
|
23
|
+
this.dragleave = new EventEmitter();
|
|
24
|
+
this.mouseup = new EventEmitter();
|
|
25
|
+
this.mousedown = new EventEmitter();
|
|
26
|
+
this.mouseover = new EventEmitter();
|
|
27
|
+
this.mouseout = new EventEmitter();
|
|
28
|
+
this.mousemove = new EventEmitter();
|
|
29
|
+
this.mousewheel = new EventEmitter();
|
|
30
|
+
this.mousedblclick = new EventEmitter();
|
|
31
|
+
this.mouseupBefore = new EventEmitter();
|
|
32
|
+
this.mousedownBefore = new EventEmitter();
|
|
33
|
+
this.mousemoveBefore = new EventEmitter();
|
|
34
|
+
this.mouseUp = new EventEmitter();
|
|
35
|
+
this.mouseDown = new EventEmitter();
|
|
36
|
+
this.mouseOver = new EventEmitter();
|
|
37
|
+
this.mouseOut = new EventEmitter();
|
|
38
|
+
this.mouseMove = new EventEmitter();
|
|
39
|
+
this.mouseWheel = new EventEmitter();
|
|
40
|
+
this.mouseDblclick = new EventEmitter();
|
|
41
|
+
this.mouseUpBefore = new EventEmitter();
|
|
42
|
+
this.mouseDownBefore = new EventEmitter();
|
|
43
|
+
this.mouseMoveBefore = new EventEmitter();
|
|
44
|
+
this.pathCreated = new EventEmitter();
|
|
45
|
+
this.alterRender = new EventEmitter();
|
|
46
|
+
this.objectAdded = new EventEmitter();
|
|
47
|
+
this.objectMoved = new EventEmitter();
|
|
48
|
+
this.objectScaled = new EventEmitter();
|
|
49
|
+
this.objectSkewed = new EventEmitter();
|
|
50
|
+
this.objectRotated = new EventEmitter();
|
|
51
|
+
this.objectRemoved = new EventEmitter();
|
|
52
|
+
this.objectModified = new EventEmitter();
|
|
53
|
+
this.objectSelected = new EventEmitter();
|
|
54
|
+
this.objectMoving = new EventEmitter();
|
|
55
|
+
this.objectScaling = new EventEmitter();
|
|
56
|
+
this.objectSkewing = new EventEmitter();
|
|
57
|
+
this.objectRotating = new EventEmitter();
|
|
58
|
+
this.selectionCleared = new EventEmitter();
|
|
59
|
+
this.selectionCreated = new EventEmitter();
|
|
60
|
+
this.selectionUpdated = new EventEmitter();
|
|
61
|
+
this.beforeTransform = new EventEmitter();
|
|
62
|
+
this.beforeSelectionCleared = new EventEmitter();
|
|
63
|
+
}
|
|
64
|
+
set zoom(zoom) {
|
|
65
|
+
this.setZoom(zoom);
|
|
66
|
+
}
|
|
67
|
+
set width(width) {
|
|
68
|
+
this.setWidth(width);
|
|
69
|
+
}
|
|
70
|
+
set height(height) {
|
|
71
|
+
this.setHeight(height);
|
|
72
|
+
}
|
|
73
|
+
ngOnInit() {
|
|
74
|
+
const params = new FabricConfig(this.defaults);
|
|
75
|
+
params.assign(this.config); // Custom configuration
|
|
76
|
+
this.zone.runOutsideAngular(() => {
|
|
77
|
+
if (!this.disabled) {
|
|
78
|
+
this.instance = new fabric.Canvas(this.elementRef.nativeElement, params);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.instance = new fabric.StaticCanvas(this.elementRef.nativeElement, params);
|
|
82
|
+
}
|
|
83
|
+
if (this.initialZoom) {
|
|
84
|
+
this.setZoom(this.initialZoom);
|
|
85
|
+
}
|
|
86
|
+
if (this.initialWidth) {
|
|
87
|
+
this.setWidth(this.initialWidth);
|
|
88
|
+
}
|
|
89
|
+
if (this.initialHeight) {
|
|
90
|
+
this.setHeight(this.initialHeight);
|
|
91
|
+
}
|
|
92
|
+
if (this.objectsJSON !== null) {
|
|
93
|
+
this.loadFromJSON(this.objectsJSON);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
// Add native Fabric event handling
|
|
97
|
+
FabricEvents.forEach((eventName) => {
|
|
98
|
+
const fabricEvent = eventName.replace(/([A-Z])/g, (c) => `:${c.toLowerCase()}`);
|
|
99
|
+
if (this.instance) {
|
|
100
|
+
this.instance.on(fabricEvent, (event) => {
|
|
101
|
+
this.zone.run(() => {
|
|
102
|
+
if (this[eventName].observers.length) {
|
|
103
|
+
this[eventName].emit(event);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
if (!this.configDiff) {
|
|
110
|
+
this.configDiff = this.differs.find(this.config || {}).create();
|
|
111
|
+
this.configDiff.diff(this.config || {});
|
|
112
|
+
}
|
|
113
|
+
this.zone.runOutsideAngular(() => {
|
|
114
|
+
this.ro = new ResizeObserver((entries, observer) => {
|
|
115
|
+
const element = this.elementRef.nativeElement.parentElement.parentElement;
|
|
116
|
+
if (!this.initialWidth) {
|
|
117
|
+
this.setWidth(element.offsetWidth);
|
|
118
|
+
}
|
|
119
|
+
if (!this.initialHeight) {
|
|
120
|
+
this.setHeight(element.offsetHeight);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
this.ro.observe(this.elementRef.nativeElement.parentElement.parentElement);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
ngOnDestroy() {
|
|
127
|
+
if (this.ro) {
|
|
128
|
+
this.ro.disconnect();
|
|
129
|
+
}
|
|
130
|
+
if (this.instance) {
|
|
131
|
+
this.objectsJSON = this.instance.toObject();
|
|
132
|
+
this.instance.dispose();
|
|
133
|
+
delete this.instance;
|
|
134
|
+
this.instance = null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
ngDoCheck() {
|
|
138
|
+
if (this.configDiff) {
|
|
139
|
+
const changes = this.configDiff.diff(this.config || {});
|
|
140
|
+
if (changes) {
|
|
141
|
+
this.ngOnDestroy();
|
|
142
|
+
this.ngOnInit();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
ngOnChanges(changes) {
|
|
147
|
+
if (this.instance && changes['disabled']) {
|
|
148
|
+
if (changes['disabled'].currentValue !== changes['disabled'].previousValue) {
|
|
149
|
+
this.ngOnDestroy();
|
|
150
|
+
this.ngOnInit();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
fabric() {
|
|
155
|
+
return this.instance;
|
|
156
|
+
}
|
|
157
|
+
clear() {
|
|
158
|
+
if (this.instance) {
|
|
159
|
+
this.instance.clear();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
render() {
|
|
163
|
+
if (this.instance) {
|
|
164
|
+
this.instance.renderAll();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
setZoom(zoom) {
|
|
168
|
+
this.initialZoom = zoom;
|
|
169
|
+
if (this.instance) {
|
|
170
|
+
this.instance.setZoom(zoom);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
setWidth(width) {
|
|
174
|
+
this.initialWidth = width;
|
|
175
|
+
if (this.instance) {
|
|
176
|
+
this.instance.setWidth(width);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
setHeight(height) {
|
|
180
|
+
this.initialHeight = height;
|
|
181
|
+
if (this.instance) {
|
|
182
|
+
this.instance.setHeight(height);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
loadFromJSON(json, callback, reviverOpt) {
|
|
186
|
+
if (this.instance) {
|
|
187
|
+
this.instance.loadFromJSON(json, () => {
|
|
188
|
+
let renderAll = true;
|
|
189
|
+
if (callback) {
|
|
190
|
+
renderAll = callback();
|
|
191
|
+
}
|
|
192
|
+
if (renderAll && this.instance) {
|
|
193
|
+
this.instance.renderAll();
|
|
194
|
+
}
|
|
195
|
+
}, reviverOpt);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
FabricDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: FabricDirective, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.KeyValueDiffers }, { token: FABRIC_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
200
|
+
FabricDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.5", type: FabricDirective, selector: "[fabric]", inputs: { zoom: "zoom", width: "width", height: "height", disabled: "disabled", config: ["fabric", "config"] }, outputs: { drop: "drop", dragover: "dragover", dragenter: "dragenter", dragleave: "dragleave", mouseup: "mouseup", mousedown: "mousedown", mouseover: "mouseover", mouseout: "mouseout", mousemove: "mousemove", mousewheel: "mousewheel", mousedblclick: "mousedblclick", mouseupBefore: "mouseupBefore", mousedownBefore: "mousedownBefore", mousemoveBefore: "mousemoveBefore", mouseUp: "mouseUp", mouseDown: "mouseDown", mouseOver: "mouseOver", mouseOut: "mouseOut", mouseMove: "mouseMove", mouseWheel: "mouseWheel", mouseDblclick: "mouseDblclick", mouseUpBefore: "mouseUpBefore", mouseDownBefore: "mouseDownBefore", mouseMoveBefore: "mouseMoveBefore", pathCreated: "pathCreated", alterRender: "alterRender", objectAdded: "objectAdded", objectMoved: "objectMoved", objectScaled: "objectScaled", objectSkewed: "objectSkewed", objectRotated: "objectRotated", objectRemoved: "objectRemoved", objectModified: "objectModified", objectSelected: "objectSelected", objectMoving: "objectMoving", objectScaling: "objectScaling", objectSkewing: "objectSkewing", objectRotating: "objectRotating", selectionCleared: "selectionCleared", selectionCreated: "selectionCreated", selectionUpdated: "selectionUpdated", beforeTransform: "beforeTransform", beforeSelectionCleared: "beforeSelectionCleared" }, exportAs: ["ngxFabric"], usesOnChanges: true, ngImport: i0 });
|
|
201
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: FabricDirective, decorators: [{
|
|
202
|
+
type: Directive,
|
|
203
|
+
args: [{
|
|
204
|
+
selector: '[fabric]',
|
|
205
|
+
exportAs: 'ngxFabric'
|
|
206
|
+
}]
|
|
207
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.KeyValueDiffers }, { type: undefined, decorators: [{
|
|
208
|
+
type: Optional
|
|
209
|
+
}, {
|
|
210
|
+
type: Inject,
|
|
211
|
+
args: [FABRIC_CONFIG]
|
|
212
|
+
}] }]; }, propDecorators: { zoom: [{
|
|
213
|
+
type: Input
|
|
214
|
+
}], width: [{
|
|
215
|
+
type: Input
|
|
216
|
+
}], height: [{
|
|
217
|
+
type: Input
|
|
218
|
+
}], disabled: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], config: [{
|
|
221
|
+
type: Input,
|
|
222
|
+
args: ['fabric']
|
|
223
|
+
}], drop: [{
|
|
224
|
+
type: Output
|
|
225
|
+
}], dragover: [{
|
|
226
|
+
type: Output
|
|
227
|
+
}], dragenter: [{
|
|
228
|
+
type: Output
|
|
229
|
+
}], dragleave: [{
|
|
230
|
+
type: Output
|
|
231
|
+
}], mouseup: [{
|
|
232
|
+
type: Output
|
|
233
|
+
}], mousedown: [{
|
|
234
|
+
type: Output
|
|
235
|
+
}], mouseover: [{
|
|
236
|
+
type: Output
|
|
237
|
+
}], mouseout: [{
|
|
238
|
+
type: Output
|
|
239
|
+
}], mousemove: [{
|
|
240
|
+
type: Output
|
|
241
|
+
}], mousewheel: [{
|
|
242
|
+
type: Output
|
|
243
|
+
}], mousedblclick: [{
|
|
244
|
+
type: Output
|
|
245
|
+
}], mouseupBefore: [{
|
|
246
|
+
type: Output
|
|
247
|
+
}], mousedownBefore: [{
|
|
248
|
+
type: Output
|
|
249
|
+
}], mousemoveBefore: [{
|
|
250
|
+
type: Output
|
|
251
|
+
}], mouseUp: [{
|
|
252
|
+
type: Output
|
|
253
|
+
}], mouseDown: [{
|
|
254
|
+
type: Output
|
|
255
|
+
}], mouseOver: [{
|
|
256
|
+
type: Output
|
|
257
|
+
}], mouseOut: [{
|
|
258
|
+
type: Output
|
|
259
|
+
}], mouseMove: [{
|
|
260
|
+
type: Output
|
|
261
|
+
}], mouseWheel: [{
|
|
262
|
+
type: Output
|
|
263
|
+
}], mouseDblclick: [{
|
|
264
|
+
type: Output
|
|
265
|
+
}], mouseUpBefore: [{
|
|
266
|
+
type: Output
|
|
267
|
+
}], mouseDownBefore: [{
|
|
268
|
+
type: Output
|
|
269
|
+
}], mouseMoveBefore: [{
|
|
270
|
+
type: Output
|
|
271
|
+
}], pathCreated: [{
|
|
272
|
+
type: Output
|
|
273
|
+
}], alterRender: [{
|
|
274
|
+
type: Output
|
|
275
|
+
}], objectAdded: [{
|
|
276
|
+
type: Output
|
|
277
|
+
}], objectMoved: [{
|
|
278
|
+
type: Output
|
|
279
|
+
}], objectScaled: [{
|
|
280
|
+
type: Output
|
|
281
|
+
}], objectSkewed: [{
|
|
282
|
+
type: Output
|
|
283
|
+
}], objectRotated: [{
|
|
284
|
+
type: Output
|
|
285
|
+
}], objectRemoved: [{
|
|
286
|
+
type: Output
|
|
287
|
+
}], objectModified: [{
|
|
288
|
+
type: Output
|
|
289
|
+
}], objectSelected: [{
|
|
290
|
+
type: Output
|
|
291
|
+
}], objectMoving: [{
|
|
292
|
+
type: Output
|
|
293
|
+
}], objectScaling: [{
|
|
294
|
+
type: Output
|
|
295
|
+
}], objectSkewing: [{
|
|
296
|
+
type: Output
|
|
297
|
+
}], objectRotating: [{
|
|
298
|
+
type: Output
|
|
299
|
+
}], selectionCleared: [{
|
|
300
|
+
type: Output
|
|
301
|
+
}], selectionCreated: [{
|
|
302
|
+
type: Output
|
|
303
|
+
}], selectionUpdated: [{
|
|
304
|
+
type: Output
|
|
305
|
+
}], beforeTransform: [{
|
|
306
|
+
type: Output
|
|
307
|
+
}], beforeSelectionCleared: [{
|
|
308
|
+
type: Output
|
|
309
|
+
}] } });
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFicmljLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi9zcmMvbGliL2ZhYnJpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVoQyxPQUFPLGNBQWMsTUFBTSwwQkFBMEIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBRWxDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUNxQixNQUFNLGVBQWUsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFDckIsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBTXpELE1BQU0sT0FBTyxlQUFlO0lBaUYxQixZQUFvQixJQUFZLEVBQ3RCLFVBQXNCLEVBQVUsT0FBd0IsRUFDckIsUUFBK0I7UUFGeEQsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUN0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBdUI7UUFsRnBFLGFBQVEsR0FBK0MsSUFBSSxDQUFDO1FBRTVELE9BQUUsR0FBMEIsSUFBSSxDQUFDO1FBRWpDLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUVsQyxnQkFBVyxHQUFrQixJQUFJLENBQUM7UUFDbEMsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQUVwQyxlQUFVLEdBQXVDLElBQUksQ0FBQztRQWdCckQsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUl6QixTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMvQixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNuQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNwQyxjQUFTLEdB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UztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmFicmljIH0gZnJvbSAnZmFicmljJztcblxuaW1wb3J0IFJlc2l6ZU9ic2VydmVyIGZyb20gJ3Jlc2l6ZS1vYnNlcnZlci1wb2x5ZmlsbCc7XG5cbmltcG9ydCB7IERpcmVjdGl2ZSwgT3B0aW9uYWwsIEluamVjdCxcbiAgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2ssIE9uQ2hhbmdlcyxcbiAgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBOZ1pvbmUsIEVsZW1lbnRSZWYsXG4gIEtleVZhbHVlRGlmZmVyLCBLZXlWYWx1ZURpZmZlcnMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRkFCUklDX0NPTkZJRywgRmFicmljQ29uZmlnLCBGYWJyaWNDb25maWdJbnRlcmZhY2UsXG4gIEZhYnJpY0V2ZW50LCBGYWJyaWNFdmVudHMgfSBmcm9tICcuL2ZhYnJpYy5pbnRlcmZhY2VzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZhYnJpY10nLFxuICBleHBvcnRBczogJ25neEZhYnJpYydcbn0pXG5leHBvcnQgY2xhc3MgRmFicmljRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2ssIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgaW5zdGFuY2U6IGZhYnJpYy5DYW52YXMgfCBmYWJyaWMuU3RhdGljQ2FudmFzIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBybzogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIG9iamVjdHNKU09OOiBvYmplY3QgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIGluaXRpYWxab29tOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpbml0aWFsV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGluaXRpYWxIZWlnaHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgY29uZmlnRGlmZjogS2V5VmFsdWVEaWZmZXI8c3RyaW5nLCBhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KClcbiAgc2V0IHpvb20oem9vbTogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRab29tKHpvb20pO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHdpZHRoKHdpZHRoOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFdpZHRoKHdpZHRoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgaGVpZ2h0KGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRIZWlnaHQoaGVpZ2h0KTtcbiAgfVxuXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCdmYWJyaWMnKSBjb25maWc/OiBGYWJyaWNDb25maWdJbnRlcmZhY2U7XG5cbiAgQE91dHB1dCgpIGRyb3AgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGRyYWdvdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBkcmFnZW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGRyYWdsZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBtb3VzZXVwID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZWRvd24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlb3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2VvdXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2V3aGVlbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2VkYmxjbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2V1cEJlZm9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2Vkb3duQmVmb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZW1vdmVCZWZvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgbW91c2VVcCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2VEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZU92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlT3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZU1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlV2hlZWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlRGJsY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlVXBCZWZvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlRG93bkJlZm9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2VNb3ZlQmVmb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIHBhdGhDcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBhbHRlclJlbmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvYmplY3RBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0TW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNjYWxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0U2tld2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvYmplY3RSb3RhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvYmplY3RSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvYmplY3RNb2RpZmllZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdE1vdmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0U2NhbGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0U2tld2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0Um90YXRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2xlYXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uVXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBiZWZvcmVUcmFuc2Zvcm0gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGJlZm9yZVNlbGVjdGlvbkNsZWFyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgZGlmZmVyczogS2V5VmFsdWVEaWZmZXJzLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRkFCUklDX0NPTkZJRykgcHJpdmF0ZSBkZWZhdWx0czogRmFicmljQ29uZmlnSW50ZXJmYWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGYWJyaWNDb25maWcodGhpcy5kZWZhdWx0cyk7XG5cbiAgICBwYXJhbXMuYXNzaWduKHRoaXMuY29uZmlnKTsgLy8gQ3VzdG9tIGNvbmZpZ3VyYXRpb25cblxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBmYWJyaWMuQ2FudmFzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBwYXJhbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBmYWJyaWMuU3RhdGljQ2FudmFzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBwYXJhbXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbml0aWFsWm9vbSkge1xuICAgICAgICB0aGlzLnNldFpvb20odGhpcy5pbml0aWFsWm9vbSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmluaXRpYWxXaWR0aCkge1xuICAgICAgICB0aGlzLnNldFdpZHRoKHRoaXMuaW5pdGlhbFdpZHRoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaW5pdGlhbEhlaWdodCkge1xuICAgICAgICB0aGlzLnNldEhlaWdodCh0aGlzLmluaXRpYWxIZWlnaHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vYmplY3RzSlNPTiAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmxvYWRGcm9tSlNPTih0aGlzLm9iamVjdHNKU09OKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFkZCBuYXRpdmUgRmFicmljIGV2ZW50IGhhbmRsaW5nXG4gICAgRmFicmljRXZlbnRzLmZvckVhY2goKGV2ZW50TmFtZTogRmFicmljRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGZhYnJpY0V2ZW50ID0gZXZlbnROYW1lLnJlcGxhY2UoLyhbQS1aXSkvZywgKGMpID0+IGA6JHtjLnRvTG93ZXJDYXNlKCl9YCk7XG5cbiAgICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2Uub24oZmFicmljRXZlbnQsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpc1tldmVudE5hbWVdLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpc1tldmVudE5hbWVdLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5jb25maWdEaWZmKSB7XG4gICAgICB0aGlzLmNvbmZpZ0RpZmYgPSB0aGlzLmRpZmZlcnMuZmluZCh0aGlzLmNvbmZpZyB8fCB7fSkuY3JlYXRlKCk7XG5cbiAgICAgIHRoaXMuY29uZmlnRGlmZi5kaWZmKHRoaXMuY29uZmlnIHx8IHt9KTtcbiAgICB9XG5cbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5ybyA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcblxuICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbFdpZHRoKSB7XG4gICAgICAgICAgdGhpcy5zZXRXaWR0aChlbGVtZW50Lm9mZnNldFdpZHRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsSGVpZ2h0KSB7XG4gICAgICAgICAgdGhpcy5zZXRIZWlnaHQoZWxlbWVudC5vZmZzZXRIZWlnaHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yby5vYnNlcnZlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ybykge1xuICAgICAgdGhpcy5yby5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMub2JqZWN0c0pTT04gPSB0aGlzLmluc3RhbmNlLnRvT2JqZWN0KCk7XG5cbiAgICAgIHRoaXMuaW5zdGFuY2UuZGlzcG9zZSgpO1xuXG4gICAgICBkZWxldGUgdGhpcy5pbnN0YW5jZTtcblxuICAgICAgdGhpcy5pbnN0YW5jZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZ0RpZmYpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmNvbmZpZ0RpZmYuZGlmZih0aGlzLmNvbmZpZyB8fCB7fSk7XG5cbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluc3RhbmNlICYmIGNoYW5nZXNbJ2Rpc2FibGVkJ10pIHtcbiAgICAgIGlmIChjaGFuZ2VzWydkaXNhYmxlZCddLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snZGlzYWJsZWQnXS5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIHRoaXMubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZhYnJpYygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmluc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLmluc3RhbmNlLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbmRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgdGhpcy5pbnN0YW5jZS5yZW5kZXJBbGwoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0Wm9vbSh6b29tOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxab29tID0gem9vbTtcblxuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLmluc3RhbmNlLnNldFpvb20oem9vbSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFdpZHRoKHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxXaWR0aCA9IHdpZHRoO1xuXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2Uuc2V0V2lkdGgod2lkdGgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRIZWlnaHQoaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxIZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgdGhpcy5pbnN0YW5jZS5zZXRIZWlnaHQoaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbG9hZEZyb21KU09OKGpzb246IGFueSwgY2FsbGJhY2s/OiBGdW5jdGlvbiwgcmV2aXZlck9wdD86IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLmluc3RhbmNlLmxvYWRGcm9tSlNPTihqc29uLCAoKSA9PiB7XG4gICAgICAgIGxldCByZW5kZXJBbGwgPSB0cnVlO1xuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIHJlbmRlckFsbCA9IGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyQWxsICYmIHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICB0aGlzLmluc3RhbmNlLnJlbmRlckFsbCgpO1xuICAgICAgICB9XG4gICAgICB9LCByZXZpdmVyT3B0KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export const FABRIC_CONFIG = new InjectionToken('FABRIC_CONFIG');
|
|
3
|
+
export const FabricEvents = [
|
|
4
|
+
'drop',
|
|
5
|
+
'dragover',
|
|
6
|
+
'dragenter',
|
|
7
|
+
'dragleave',
|
|
8
|
+
'mouseup',
|
|
9
|
+
'mousedown',
|
|
10
|
+
'mouseover',
|
|
11
|
+
'mouseout',
|
|
12
|
+
'mousemove',
|
|
13
|
+
'mousewheel',
|
|
14
|
+
'mousedblclick',
|
|
15
|
+
'mouseupBefore',
|
|
16
|
+
'mousedownBefore',
|
|
17
|
+
'mousemoveBefore',
|
|
18
|
+
'mouseUp',
|
|
19
|
+
'mouseDown',
|
|
20
|
+
'mouseOver',
|
|
21
|
+
'mouseOut',
|
|
22
|
+
'mouseMove',
|
|
23
|
+
'mouseWheel',
|
|
24
|
+
'mouseDblclick',
|
|
25
|
+
'mouseUpBefore',
|
|
26
|
+
'mouseDownBefore',
|
|
27
|
+
'mouseMoveBefore',
|
|
28
|
+
'pathCreated',
|
|
29
|
+
'alterRender',
|
|
30
|
+
'objectAdded',
|
|
31
|
+
'objectMoved',
|
|
32
|
+
'objectScaled',
|
|
33
|
+
'objectSkewed',
|
|
34
|
+
'objectRotated',
|
|
35
|
+
'objectRemoved',
|
|
36
|
+
'objectModified',
|
|
37
|
+
'objectSelected',
|
|
38
|
+
'objectMoving',
|
|
39
|
+
'objectScaling',
|
|
40
|
+
'objectSkewing',
|
|
41
|
+
'objectRotating',
|
|
42
|
+
'selectionCleared',
|
|
43
|
+
'selectionCreated',
|
|
44
|
+
'selectionUpdated',
|
|
45
|
+
'beforeTransform',
|
|
46
|
+
'beforeSelectionCleared'
|
|
47
|
+
];
|
|
48
|
+
export class FabricConfig {
|
|
49
|
+
constructor(config = {}) {
|
|
50
|
+
this.assign(config);
|
|
51
|
+
}
|
|
52
|
+
assign(config = {}) {
|
|
53
|
+
for (const key in config) {
|
|
54
|
+
this[key] = config[key];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFicmljLmludGVyZmFjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWIvc3JjL2xpYi9mYWJyaWMuaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBd0IsZUFBZSxDQUFDLENBQUM7QUFXeEYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFrQjtJQUN6QyxNQUFNO0lBQ04sVUFBVTtJQUNWLFdBQVc7SUFDWCxXQUFXO0lBRVgsU0FBUztJQUNULFdBQVc7SUFDWCxXQUFXO0lBQ1gsVUFBVTtJQUNWLFdBQVc7SUFDWCxZQUFZO0lBQ1osZUFBZTtJQUNmLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsaUJBQWlCO0lBRWpCLFNBQVM7SUFDVCxXQUFXO0lBQ1gsV0FBVztJQUNYLFVBQVU7SUFDVixXQUFXO0lBQ1gsWUFBWTtJQUNaLGVBQWU7SUFDZixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUVqQixhQUFhO0lBQ2IsYUFBYTtJQUViLGFBQWE7SUFDYixhQUFhO0lBQ2IsY0FBYztJQUNkLGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLGVBQWU7SUFDZixlQUFlO0lBQ2YsZ0JBQWdCO0lBRWhCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBRWxCLGlCQUFpQjtJQUNqQix3QkFBd0I7Q0FDekIsQ0FBQztBQXVERixNQUFNLE9BQU8sWUFBWTtJQW9EdkIsWUFBWSxTQUFnQyxFQUFFO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFnQyxFQUFFO1FBQ3ZDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxHQUF5QixDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQWtDLENBQVUsQ0FBQztTQUN2RjtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBGQUJSSUNfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEZhYnJpY0NvbmZpZ0ludGVyZmFjZT4oJ0ZBQlJJQ19DT05GSUcnKTtcblxuZXhwb3J0IHR5cGUgRmFicmljRXZlbnQgPSAnZHJvcCcgfCAnZHJhZ292ZXInIHwgJ2RyYWdlbnRlcicgfCAnZHJhZ2xlYXZlJyB8ICdtb3VzZXVwJyB8XG4gICdtb3VzZWRvd24nIHwgJ21vdXNlb3ZlcicgfCAnbW91c2VvdXQnIHwgJ21vdXNlbW92ZScgfCAnbW91c2V3aGVlbCcgfCAnbW91c2VkYmxjbGljaycgfFxuICAnbW91c2V1cEJlZm9yZScgfCAnbW91c2Vkb3duQmVmb3JlJyB8ICdtb3VzZW1vdmVCZWZvcmUnIHwgJ21vdXNlVXAnIHwgJ21vdXNlRG93bicgfFxuICAnbW91c2VPdmVyJyB8ICdtb3VzZU91dCcgfCAnbW91c2VNb3ZlJyB8ICdtb3VzZVdoZWVsJyB8ICdtb3VzZURibGNsaWNrJyB8ICdtb3VzZVVwQmVmb3JlJyB8ICdtb3VzZURvd25CZWZvcmUnIHxcbiAgJ21vdXNlTW92ZUJlZm9yZScgfCAncGF0aENyZWF0ZWQnIHwgJ2FsdGVyUmVuZGVyJyB8ICdvYmplY3RBZGRlZCcgfCAnb2JqZWN0TW92ZWQnIHwgJ29iamVjdFNjYWxlZCcgfFxuICAnb2JqZWN0U2tld2VkJyB8ICdvYmplY3RSb3RhdGVkJyB8ICdvYmplY3RSZW1vdmVkJyB8ICdvYmplY3RNb2RpZmllZCcgfCAnb2JqZWN0U2VsZWN0ZWQnIHxcbiAgJ29iamVjdE1vdmluZycgfCAnb2JqZWN0U2NhbGluZycgfCAnb2JqZWN0U2tld2luZycgfCAnb2JqZWN0Um90YXRpbmcnIHwgJ3NlbGVjdGlvbkNsZWFyZWQnIHxcbiAgJ3NlbGVjdGlvbkNyZWF0ZWQnIHwgJ3NlbGVjdGlvblVwZGF0ZWQnIHwgJ2JlZm9yZVRyYW5zZm9ybScgfCAnYmVmb3JlU2VsZWN0aW9uQ2xlYXJlZCcgO1xuXG5leHBvcnQgY29uc3QgRmFicmljRXZlbnRzOiBGYWJyaWNFdmVudFtdID0gW1xuICAnZHJvcCcsXG4gICdkcmFnb3ZlcicsXG4gICdkcmFnZW50ZXInLFxuICAnZHJhZ2xlYXZlJyxcblxuICAnbW91c2V1cCcsXG4gICdtb3VzZWRvd24nLFxuICAnbW91c2VvdmVyJyxcbiAgJ21vdXNlb3V0JyxcbiAgJ21vdXNlbW92ZScsXG4gICdtb3VzZXdoZWVsJyxcbiAgJ21vdXNlZGJsY2xpY2snLFxuICAnbW91c2V1cEJlZm9yZScsXG4gICdtb3VzZWRvd25CZWZvcmUnLFxuICAnbW91c2Vtb3ZlQmVmb3JlJyxcblxuICAnbW91c2VVcCcsXG4gICdtb3VzZURvd24nLFxuICAnbW91c2VPdmVyJyxcbiAgJ21vdXNlT3V0JyxcbiAgJ21vdXNlTW92ZScsXG4gICdtb3VzZVdoZWVsJyxcbiAgJ21vdXNlRGJsY2xpY2snLFxuICAnbW91c2VVcEJlZm9yZScsXG4gICdtb3VzZURvd25CZWZvcmUnLFxuICAnbW91c2VNb3ZlQmVmb3JlJyxcblxuICAncGF0aENyZWF0ZWQnLFxuICAnYWx0ZXJSZW5kZXInLFxuXG4gICdvYmplY3RBZGRlZCcsXG4gICdvYmplY3RNb3ZlZCcsXG4gICdvYmplY3RTY2FsZWQnLFxuICAnb2JqZWN0U2tld2VkJyxcbiAgJ29iamVjdFJvdGF0ZWQnLFxuICAnb2JqZWN0UmVtb3ZlZCcsXG4gICdvYmplY3RNb2RpZmllZCcsXG4gICdvYmplY3RTZWxlY3RlZCcsXG4gICdvYmplY3RNb3ZpbmcnLFxuICAnb2JqZWN0U2NhbGluZycsXG4gICdvYmplY3RTa2V3aW5nJyxcbiAgJ29iamVjdFJvdGF0aW5nJyxcblxuICAnc2VsZWN0aW9uQ2xlYXJlZCcsXG4gICdzZWxlY3Rpb25DcmVhdGVkJyxcbiAgJ3NlbGVjdGlvblVwZGF0ZWQnLFxuXG4gICdiZWZvcmVUcmFuc2Zvcm0nLFxuICAnYmVmb3JlU2VsZWN0aW9uQ2xlYXJlZCdcbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFicmljQ29uZmlnSW50ZXJmYWNlIHtcbiAgYWxsb3dUb3VjaFNjcm9sbGluZz86IGJvb2xlYW4sXG4gIGFsdEFjdGlvbktleT86IHN0cmluZyxcbiAgYWx0U2VsZWN0aW9uS2V5Pzogc3RyaW5nLFxuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmcgfCBhbnksXG4gIGJhY2tncm91bmRJbWFnZT86IGFueSxcbiAgYmFja2dyb3VuZFZwdD86IGJvb2xlYW4sXG4gIGNlbnRlcmVkS2V5Pzogc3RyaW5nLFxuICBjZW50ZXJlZFJvdGF0aW9uPzogYm9vbGVhbixcbiAgY2VudGVyZWRTY2FsaW5nPzogYm9vbGVhbixcbiAgY2xpcFRvPzogRmFicmljQ2xpcFRvRnVuY3Rpb24sXG4gIGNvbnRhaW5lckNsYXNzPzogc3RyaW5nLFxuICBjb250cm9sc0Fib3ZlT3ZlcmxheT86IGJvb2xlYW4sXG4gIGRlZmF1bHRDdXJzb3I/OiBzdHJpbmcsXG4gIGVuYWJsZVJldGluYVNjYWxpbmc/OiBib29sZWFuLFxuICBmaXJlTWlkZGxlQ2xpY2s/OiBib29sZWFuLFxuICBmaXJlUmlnaHRDbGljaz86IGJvb2xlYW4sXG4gIGZyZWVEcmF3aW5nQ3Vyc29yPzogc3RyaW5nLFxuICBGWF9EVVJBVElPTj86IG51bWJlcixcbiAgaG92ZXJDdXJzb3I/OiBzdHJpbmcsXG4gIGltYWdlU21vb3RoaW5nRW5hYmxlZD86IGJvb2xlYW4sXG4gIGluY2x1ZGVEZWZhdWx0VmFsdWVzPzogYm9vbGVhbixcbiAgaW50ZXJhY3RpdmU/OiBib29sZWFuLFxuICBpc0RyYXdpbmdNb2RlPzogYm9vbGVhbixcbiAgbW92ZUN1cnNvcj86IHN0cmluZyxcbiAgbm90QWxsb3dlZEN1cnNvcj86IHN0cmluZyxcbiAgb3ZlcmxheUNvbG9yPzogc3RyaW5nIHwgYW55LFxuICBvdmVybGF5SW1hZ2U/OiBhbnksXG4gIG92ZXJsYXlWcHQ/OiBib29sZWFuLFxuICBwZXJQaXhlbFRhcmdldEZpbmQ/OiBib29sZWFuLFxuICBwcmVzZXJ2ZU9iamVjdFN0YWNraW5nPzogYm9vbGVhbixcbiAgcmVuZGVyT25BZGRSZW1vdmU/OiBib29sZWFuLFxuICByb3RhdGlvbkN1cnNvcj86IHN0cmluZyxcbiAgc2VsZWN0aW9uPzogYm9vbGVhbixcbiAgc2VsZWN0aW9uQm9yZGVyQ29sb3I/OiBzdHJpbmcsXG4gIHNlbGVjdGlvbkNvbG9yPzogc3RyaW5nLFxuICBzZWxlY3Rpb25EYXNoQXJyYXk/OiBhbnlbXSxcbiAgc2VsZWN0aW9uS2V5Pzogc3RyaW5nLFxuICBzZWxlY3Rpb25MaW5lV2lkdGg/OiBudW1iZXIsXG4gIHNraXBPZmZzY3JlZW4/OiBib29sZWFuLFxuICBza2lwVGFyZ2V0RmluZD86IGJvb2xlYW4sXG4gIHNuYXBBbmdsZT86IG51bWJlcixcbiAgc25hcFRocmVzaG9sZD86IG51bWJlcixcbiAgc3RhdGVmdWw/OiBib29sZWFuLFxuICBzdG9wQ29udGV4dE1lbnU/OiBib29sZWFuLFxuICBzdmdWaWV3cG9ydFRyYW5zZm9ybWF0aW9uPzogYm9vbGVhbixcbiAgdGFyZ2V0RmluZFRvVG9sZXJhbmNlPzogbnVtYmVyLFxuICB1bmlTY2FsZUtleT86IHN0cmluZyxcbiAgdW5pU2NhbGVUcmFuc2Zvcm0/OiBib29sZWFuLFxuICB2aWV3cG9ydFRyYW5zZm9ybT86IGFueVtdLFxuICB2cHRDb29yZHM/OiBhbnlcbn1cblxuZXhwb3J0IGNsYXNzIEZhYnJpY0NvbmZpZyBpbXBsZW1lbnRzIEZhYnJpY0NvbmZpZ0ludGVyZmFjZSB7XG4gIGFsbG93VG91Y2hTY3JvbGxpbmc/OiBib29sZWFuO1xuICBhbHRBY3Rpb25LZXk/OiBzdHJpbmc7XG4gIGFsdFNlbGVjdGlvbktleT86IHN0cmluZztcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nIHwgYW55O1xuICBiYWNrZ3JvdW5kSW1hZ2U/OiBhbnk7XG4gIGJhY2tncm91bmRWcHQ/OiBib29sZWFuO1xuICBjZW50ZXJlZEtleT86IHN0cmluZztcbiAgY2VudGVyZWRSb3RhdGlvbj86IGJvb2xlYW47XG4gIGNlbnRlcmVkU2NhbGluZz86IGJvb2xlYW47XG4gIGNsaXBUbz86IEZhYnJpY0NsaXBUb0Z1bmN0aW9uO1xuICBjb250YWluZXJDbGFzcz86IHN0cmluZztcbiAgY29udHJvbHNBYm92ZU92ZXJsYXk/OiBib29sZWFuO1xuICBkZWZhdWx0Q3Vyc29yPzogc3RyaW5nO1xuICBlbmFibGVSZXRpbmFTY2FsaW5nPzogYm9vbGVhbjtcbiAgZmlyZU1pZGRsZUNsaWNrPzogYm9vbGVhbjtcbiAgZmlyZVJpZ2h0Q2xpY2s/OiBib29sZWFuO1xuICBmcmVlRHJhd2luZ0N1cnNvcj86IHN0cmluZztcbiAgRlhfRFVSQVRJT04/OiBudW1iZXI7XG4gIGhvdmVyQ3Vyc29yPzogc3RyaW5nO1xuICBpbWFnZVNtb290aGluZ0VuYWJsZWQ/OiBib29sZWFuO1xuICBpbmNsdWRlRGVmYXVsdFZhbHVlcz86IGJvb2xlYW47XG4gIGludGVyYWN0aXZlPzogYm9vbGVhbjtcbiAgaXNEcmF3aW5nTW9kZT86IGJvb2xlYW47XG4gIG1vdmVDdXJzb3I/OiBzdHJpbmc7XG4gIG5vdEFsbG93ZWRDdXJzb3I/OiBzdHJpbmc7XG4gIG92ZXJsYXlDb2xvcjogc3RyaW5nIHwgYW55O1xuICBvdmVybGF5SW1hZ2U6IGFueTtcbiAgb3ZlcmxheVZwdD86IGJvb2xlYW47XG4gIHBlclBpeGVsVGFyZ2V0RmluZD86IGJvb2xlYW47XG4gIHByZXNlcnZlT2JqZWN0U3RhY2tpbmc/OiBib29sZWFuO1xuICByZW5kZXJPbkFkZFJlbW92ZT86IGJvb2xlYW47XG4gIHJvdGF0aW9uQ3Vyc29yPzogc3RyaW5nO1xuICBzZWxlY3Rpb24/OiBib29sZWFuO1xuICBzZWxlY3Rpb25Cb3JkZXJDb2xvcj86IHN0cmluZztcbiAgc2VsZWN0aW9uQ29sb3I/OiBzdHJpbmc7XG4gIHNlbGVjdGlvbkRhc2hBcnJheT86IGFueVtdO1xuICBzZWxlY3Rpb25LZXk/OiBzdHJpbmc7XG4gIHNlbGVjdGlvbkxpbmVXaWR0aD86IG51bWJlcjtcbiAgc2tpcE9mZnNjcmVlbj86IGJvb2xlYW47XG4gIHNraXBUYXJnZXRGaW5kPzogYm9vbGVhbjtcbiAgc25hcEFuZ2xlPzogbnVtYmVyO1xuICBzbmFwVGhyZXNob2xkPzogbnVtYmVyO1xuICBzdGF0ZWZ1bD86IGJvb2xlYW47XG4gIHN0b3BDb250ZXh0TWVudT86IGJvb2xlYW47XG4gIHN2Z1ZpZXdwb3J0VHJhbnNmb3JtYXRpb24/OiBib29sZWFuO1xuICB0YXJnZXRGaW5kVG9Ub2xlcmFuY2U/OiBudW1iZXI7XG4gIHVuaVNjYWxlS2V5Pzogc3RyaW5nO1xuICB1bmlTY2FsZVRyYW5zZm9ybT86IGJvb2xlYW47XG4gIHZpZXdwb3J0VHJhbnNmb3JtPzogYW55W107XG4gIHZwdENvb3Jkcz86IGFueTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEZhYnJpY0NvbmZpZ0ludGVyZmFjZSA9IHt9KSB7XG4gICAgdGhpcy5hc3NpZ24oY29uZmlnKTtcbiAgfVxuXG4gIGFzc2lnbihjb25maWc6IEZhYnJpY0NvbmZpZ0ludGVyZmFjZSA9IHt9KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29uZmlnKSB7XG4gICAgICB0aGlzW2tleSBhcyBrZXlvZiBGYWJyaWNDb25maWddID0gY29uZmlnW2tleSBhcyBrZXlvZiBGYWJyaWNDb25maWdJbnRlcmZhY2VdIGFzIG5ldmVyO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBGYWJyaWNDbGlwVG9GdW5jdGlvbiA9IChjdHg6IGFueSkgPT4gdm9pZDtcbiJdfQ==
|