ngx-fabric-wrapper 14.0.0 → 16.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.
@@ -0,0 +1,194 @@
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
+ json = null;
7
+ set data(data) {
8
+ this.setJSON(data);
9
+ }
10
+ zoom = null;
11
+ width = null;
12
+ height = null;
13
+ disabled = false;
14
+ config;
15
+ useFabricClass = true;
16
+ dataLoaded = new EventEmitter();
17
+ drop = new EventEmitter();
18
+ dragover = new EventEmitter();
19
+ dragenter = new EventEmitter();
20
+ dragleave = new EventEmitter();
21
+ mouseup = new EventEmitter();
22
+ mousedown = new EventEmitter();
23
+ mouseover = new EventEmitter();
24
+ mouseout = new EventEmitter();
25
+ mousemove = new EventEmitter();
26
+ mousewheel = new EventEmitter();
27
+ mousedblclick = new EventEmitter();
28
+ mouseupBefore = new EventEmitter();
29
+ mousedownBefore = new EventEmitter();
30
+ mousemoveBefore = new EventEmitter();
31
+ mouseUp = new EventEmitter();
32
+ mouseDown = new EventEmitter();
33
+ mouseOver = new EventEmitter();
34
+ mouseOut = new EventEmitter();
35
+ mouseMove = new EventEmitter();
36
+ mouseWheel = new EventEmitter();
37
+ mouseDblclick = new EventEmitter();
38
+ mouseUpBefore = new EventEmitter();
39
+ mouseDownBefore = new EventEmitter();
40
+ mouseMoveBefore = new EventEmitter();
41
+ pathCreated = new EventEmitter();
42
+ alterRender = new EventEmitter();
43
+ objectAdded = new EventEmitter();
44
+ objectMoved = new EventEmitter();
45
+ objectScaled = new EventEmitter();
46
+ objectSkewed = new EventEmitter();
47
+ objectRotated = new EventEmitter();
48
+ objectRemoved = new EventEmitter();
49
+ objectModified = new EventEmitter();
50
+ objectSelected = new EventEmitter();
51
+ objectMoving = new EventEmitter();
52
+ objectScaling = new EventEmitter();
53
+ objectSkewing = new EventEmitter();
54
+ objectRotating = new EventEmitter();
55
+ selectionCleared = new EventEmitter();
56
+ selectionCreated = new EventEmitter();
57
+ selectionUpdated = new EventEmitter();
58
+ beforeTransform = new EventEmitter();
59
+ beforeSelectionCleared = new EventEmitter();
60
+ directiveRef;
61
+ constructor() { }
62
+ ngAfterViewInit() {
63
+ if (this.json != null) {
64
+ this.setJSON(this.json, true);
65
+ }
66
+ }
67
+ setJSON(json, force) {
68
+ if (force || json !== this.json) {
69
+ if (this.directiveRef) {
70
+ this.directiveRef.loadFromJSON(json, () => {
71
+ if (this.directiveRef && this.directiveRef.fabric()) {
72
+ this.dataLoaded.emit(this.directiveRef.fabric());
73
+ }
74
+ });
75
+ }
76
+ this.json = json;
77
+ }
78
+ }
79
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: FabricComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
80
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.4", 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.flex{display:flex;flex-direction:column;min-width:0;min-height:0}fabric.fabric{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", 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
+ }
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: FabricComponent, decorators: [{
83
+ type: Component,
84
+ 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.flex{display:flex;flex-direction:column;min-width:0;min-height:0}fabric.fabric{width:100%;height:100%}\n"] }]
85
+ }], ctorParameters: () => [], propDecorators: { data: [{
86
+ type: Input
87
+ }], zoom: [{
88
+ type: Input
89
+ }], width: [{
90
+ type: Input
91
+ }], height: [{
92
+ type: Input
93
+ }], disabled: [{
94
+ type: Input
95
+ }], config: [{
96
+ type: Input
97
+ }], useFabricClass: [{
98
+ type: HostBinding,
99
+ args: ['class.fabric']
100
+ }, {
101
+ type: Input
102
+ }], dataLoaded: [{
103
+ type: Output
104
+ }], drop: [{
105
+ type: Output
106
+ }], dragover: [{
107
+ type: Output
108
+ }], dragenter: [{
109
+ type: Output
110
+ }], dragleave: [{
111
+ type: Output
112
+ }], mouseup: [{
113
+ type: Output
114
+ }], mousedown: [{
115
+ type: Output
116
+ }], mouseover: [{
117
+ type: Output
118
+ }], mouseout: [{
119
+ type: Output
120
+ }], mousemove: [{
121
+ type: Output
122
+ }], mousewheel: [{
123
+ type: Output
124
+ }], mousedblclick: [{
125
+ type: Output
126
+ }], mouseupBefore: [{
127
+ type: Output
128
+ }], mousedownBefore: [{
129
+ type: Output
130
+ }], mousemoveBefore: [{
131
+ type: Output
132
+ }], mouseUp: [{
133
+ type: Output
134
+ }], mouseDown: [{
135
+ type: Output
136
+ }], mouseOver: [{
137
+ type: Output
138
+ }], mouseOut: [{
139
+ type: Output
140
+ }], mouseMove: [{
141
+ type: Output
142
+ }], mouseWheel: [{
143
+ type: Output
144
+ }], mouseDblclick: [{
145
+ type: Output
146
+ }], mouseUpBefore: [{
147
+ type: Output
148
+ }], mouseDownBefore: [{
149
+ type: Output
150
+ }], mouseMoveBefore: [{
151
+ type: Output
152
+ }], pathCreated: [{
153
+ type: Output
154
+ }], alterRender: [{
155
+ type: Output
156
+ }], objectAdded: [{
157
+ type: Output
158
+ }], objectMoved: [{
159
+ type: Output
160
+ }], objectScaled: [{
161
+ type: Output
162
+ }], objectSkewed: [{
163
+ type: Output
164
+ }], objectRotated: [{
165
+ type: Output
166
+ }], objectRemoved: [{
167
+ type: Output
168
+ }], objectModified: [{
169
+ type: Output
170
+ }], objectSelected: [{
171
+ type: Output
172
+ }], objectMoving: [{
173
+ type: Output
174
+ }], objectScaling: [{
175
+ type: Output
176
+ }], objectSkewing: [{
177
+ type: Output
178
+ }], objectRotating: [{
179
+ type: Output
180
+ }], selectionCleared: [{
181
+ type: Output
182
+ }], selectionCreated: [{
183
+ type: Output
184
+ }], selectionUpdated: [{
185
+ type: Output
186
+ }], beforeTransform: [{
187
+ type: Output
188
+ }], beforeSelectionCleared: [{
189
+ type: Output
190
+ }], directiveRef: [{
191
+ type: ViewChild,
192
+ args: [FabricDirective, { static: true }]
193
+ }] } });
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFicmljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi9zcmMvbGliL2ZhYnJpYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWIvc3JjL2xpYi9mYWJyaWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFDRCxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFDMUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQVdyRCxNQUFNLE9BQU8sZUFBZTtJQUNsQixJQUFJLEdBQVEsSUFBSSxDQUFDO0lBRXpCLElBQ0ksSUFBSSxDQUFDLElBQVk7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRVEsSUFBSSxHQUFrQixJQUFJLENBQUM7SUFFM0IsS0FBSyxHQUFrQixJQUFJLENBQUM7SUFDNUIsTUFBTSxHQUFrQixJQUFJLENBQUM7SUFFN0IsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUUxQixNQUFNLENBQXlCO0lBRy9CLGNBQWMsR0FBWSxJQUFJLENBQUM7SUFFOUIsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFckMsSUFBSSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDL0IsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDbkMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFcEMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDbEMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEMsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDbkMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDckMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDeEMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDeEMsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDMUMsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFMUMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDbEMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEMsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDbkMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDckMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDeEMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDeEMsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDMUMsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFMUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdEMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFdEMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdEMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdEMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdkMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdkMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDeEMsYUFBYSxHQUFHLElBQUks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TUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUV1QyxZQUFZO3NCQUF6RCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsXG4gIEFmdGVyVmlld0luaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlcixcbiAgVmlld0NoaWxkLCBIb3N0QmluZGluZywgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRmFicmljRGlyZWN0aXZlIH0gZnJvbSAnLi9mYWJyaWMuZGlyZWN0aXZlJztcblxuaW1wb3J0IHsgRmFicmljQ29uZmlnSW50ZXJmYWNlIH0gZnJvbSAnLi9mYWJyaWMuaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZhYnJpYycsXG4gIGV4cG9ydEFzOiAnbmd4RmFicmljJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZhYnJpYy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWyAnLi9mYWJyaWMuY29tcG9uZW50LmNzcycgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBGYWJyaWNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSBqc29uOiBhbnkgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKGRhdGE6IHN0cmluZykge1xuICAgIHRoaXMuc2V0SlNPTihkYXRhKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHpvb206IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgaGVpZ2h0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGNvbmZpZz86IEZhYnJpY0NvbmZpZ0ludGVyZmFjZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZhYnJpYycpXG4gIEBJbnB1dCgpIHVzZUZhYnJpY0NsYXNzOiBib29sZWFuID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgZGF0YUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBkcm9wID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBkcmFnb3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZHJhZ2VudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBkcmFnbGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgbW91c2V1cCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2Vkb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZW92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNld2hlZWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlZGJsY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNldXBCZWZvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlZG93bkJlZm9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2Vtb3ZlQmVmb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG1vdXNlVXAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlRG93biA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2VPdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZU91dCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2VNb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZVdoZWVsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZURibGNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZVVwQmVmb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZURvd25CZWZvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlTW92ZUJlZm9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBwYXRoQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgYWx0ZXJSZW5kZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb2JqZWN0QWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdE1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvYmplY3RTY2FsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNrZXdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0Um90YXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0UmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0TW9kaWZpZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvYmplY3RNb3ZpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNjYWxpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNrZXdpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFJvdGF0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNsZWFyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvblVwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgYmVmb3JlVHJhbnNmb3JtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBiZWZvcmVTZWxlY3Rpb25DbGVhcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQFZpZXdDaGlsZChGYWJyaWNEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGRpcmVjdGl2ZVJlZj86IEZhYnJpY0RpcmVjdGl2ZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmpzb24gIT0gbnVsbCkge1xuICAgICAgdGhpcy5zZXRKU09OKHRoaXMuanNvbiwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRKU09OKGpzb246IHN0cmluZywgZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGZvcmNlIHx8IGpzb24gIT09IHRoaXMuanNvbikge1xuICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlUmVmKSB7XG4gICAgICAgIHRoaXMuZGlyZWN0aXZlUmVmLmxvYWRGcm9tSlNPTihqc29uLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlUmVmICYmIHRoaXMuZGlyZWN0aXZlUmVmLmZhYnJpYygpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFMb2FkZWQuZW1pdCh0aGlzLmRpcmVjdGl2ZVJlZi5mYWJyaWMoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5qc29uID0ganNvbjtcbiAgICB9XG4gIH1cbn1cbiIsIjxjYW52YXMgW2ZhYnJpY109XCJjb25maWdcIiBbem9vbV09XCJ6b29tXCIgW3dpZHRoXT1cIndpZHRoXCIgW2hlaWdodF09XCJoZWlnaHRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAoZHJvcCk9XCJkcm9wLmVtaXQoJGV2ZW50KVwiIChkcmFnb3Zlcik9XCJkcmFnb3Zlci5lbWl0KCRldmVudClcIiAoZHJhZ2VudGVyKT1cImRyYWdlbnRlci5lbWl0KCRldmVudClcIiAoZHJhZ2xlYXZlKT1cImRyYWdsZWF2ZS5lbWl0KCRldmVudClcIiAobW91c2V1cCk9XCJtb3VzZXVwLmVtaXQoJGV2ZW50KVwiIChtb3VzZWRvd24pPVwibW91c2Vkb3duLmVtaXQoJGV2ZW50KVwiIChtb3VzZW92ZXIpPVwibW91c2VvdmVyLmVtaXQoJGV2ZW50KVwiIChtb3VzZW91dCk9XCJtb3VzZW91dC5lbWl0KCRldmVudClcIiAobW91c2Vtb3ZlKT1cIm1vdXNlbW92ZS5lbWl0KCRldmVudClcIiAobW91c2V3aGVlbCk9XCJtb3VzZXdoZWVsLmVtaXQoJGV2ZW50KVwiIChtb3VzZWRibGNsaWNrKT1cIm1vdXNlZGJsY2xpY2suZW1pdCgkZXZlbnQpXCIgKG1vdXNldXBCZWZvcmUpPVwibW91c2V1cEJlZm9yZS5lbWl0KCRldmVudClcIiAobW91c2Vkb3duQmVmb3JlKT1cIm1vdXNlZG93bkJlZm9yZS5lbWl0KCRldmVudClcIiAobW91c2Vtb3ZlQmVmb3JlKT1cIm1vdXNlbW92ZUJlZm9yZS5lbWl0KCRldmVudClcIiAobW91c2VVcCk9XCJtb3VzZVVwLmVtaXQoJGV2ZW50KVwiIChtb3VzZURvd24pPVwibW91c2VEb3duLmVtaXQoJGV2ZW50KVwiIChtb3VzZU92ZXIpPVwibW91c2VPdmVyLmVtaXQoJGV2ZW50KVwiIChtb3VzZU91dCk9XCJtb3VzZU91dC5lbWl0KCRldmVudClcIiAobW91c2VNb3ZlKT1cIm1vdXNlTW92ZS5lbWl0KCRldmVudClcIiAobW91c2VXaGVlbCk9XCJtb3VzZVdoZWVsLmVtaXQoJGV2ZW50KVwiIChtb3VzZURibGNsaWNrKT1cIm1vdXNlRGJsY2xpY2suZW1pdCgkZXZlbnQpXCIgKG1vdXNlVXBCZWZvcmUpPVwibW91c2VVcEJlZm9yZS5lbWl0KCRldmVudClcIiAobW91c2VEb3duQmVmb3JlKT1cIm1vdXNlRG93bkJlZm9yZS5lbWl0KCRldmVudClcIiAobW91c2VNb3ZlQmVmb3JlKT1cIm1vdXNlTW92ZUJlZm9yZS5lbWl0KCRldmVudClcIiAocGF0aENyZWF0ZWQpPVwicGF0aENyZWF0ZWQuZW1pdCgkZXZlbnQpXCIgKGFsdGVyUmVuZGVyKT1cImFsdGVyUmVuZGVyLmVtaXQoJGV2ZW50KVwiIChvYmplY3RBZGRlZCk9XCJvYmplY3RBZGRlZC5lbWl0KCRldmVudClcIiAob2JqZWN0TW92ZWQpPVwib2JqZWN0TW92ZWQuZW1pdCgkZXZlbnQpXCIgKG9iamVjdFNjYWxlZCk9XCJvYmplY3RTY2FsZWQuZW1pdCgkZXZlbnQpXCIgKG9iamVjdFNrZXdlZCk9XCJvYmplY3RTa2V3ZWQuZW1pdCgkZXZlbnQpXCIgKG9iamVjdFJvdGF0ZWQpPVwib2JqZWN0Um90YXRlZC5lbWl0KCRldmVudClcIiAob2JqZWN0UmVtb3ZlZCk9XCJvYmplY3RSZW1vdmVkLmVtaXQoJGV2ZW50KVwiIChvYmplY3RNb2RpZmllZCk9XCJvYmplY3RNb2RpZmllZC5lbWl0KCRldmVudClcIiAob2JqZWN0U2VsZWN0ZWQpPVwib2JqZWN0U2VsZWN0ZWQuZW1pdCgkZXZlbnQpXCIgKG9iamVjdE1vdmluZyk9XCJvYmplY3RNb3ZpbmcuZW1pdCgkZXZlbnQpXCIgKG9iamVjdFNjYWxpbmcpPVwib2JqZWN0U2NhbGluZy5lbWl0KCRldmVudClcIiAob2JqZWN0U2tld2luZyk9XCJvYmplY3RTa2V3aW5nLmVtaXQoJGV2ZW50KVwiIChvYmplY3RSb3RhdGluZyk9XCJvYmplY3RSb3RhdGluZy5lbWl0KCRldmVudClcIiAoc2VsZWN0aW9uQ2xlYXJlZCk9XCJzZWxlY3Rpb25DbGVhcmVkLmVtaXQoJGV2ZW50KVwiIChzZWxlY3Rpb25DcmVhdGVkKT1cInNlbGVjdGlvbkNyZWF0ZWQuZW1pdCgkZXZlbnQpXCIgKHNlbGVjdGlvblVwZGF0ZWQpPVwic2VsZWN0aW9uVXBkYXRlZC5lbWl0KCRldmVudClcIiAoYmVmb3JlVHJhbnNmb3JtKT1cImJlZm9yZVRyYW5zZm9ybS5lbWl0KCRldmVudClcIiAoYmVmb3JlU2VsZWN0aW9uQ2xlYXJlZCk9XCJiZWZvcmVTZWxlY3Rpb25DbGVhcmVkLmVtaXQoJGV2ZW50KVwiPlxuPC9jYW52YXM+XG4iXX0=
@@ -0,0 +1,316 @@
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
+ zone;
8
+ elementRef;
9
+ differs;
10
+ defaults;
11
+ instance = null;
12
+ ro = null;
13
+ objectsJSON = null;
14
+ initialZoom = null;
15
+ initialWidth = null;
16
+ initialHeight = null;
17
+ configDiff = null;
18
+ set zoom(zoom) {
19
+ this.setZoom(zoom);
20
+ }
21
+ set width(width) {
22
+ this.setWidth(width);
23
+ }
24
+ set height(height) {
25
+ this.setHeight(height);
26
+ }
27
+ disabled = false;
28
+ config;
29
+ drop = new EventEmitter();
30
+ dragover = new EventEmitter();
31
+ dragenter = new EventEmitter();
32
+ dragleave = new EventEmitter();
33
+ mouseup = new EventEmitter();
34
+ mousedown = new EventEmitter();
35
+ mouseover = new EventEmitter();
36
+ mouseout = new EventEmitter();
37
+ mousemove = new EventEmitter();
38
+ mousewheel = new EventEmitter();
39
+ mousedblclick = new EventEmitter();
40
+ mouseupBefore = new EventEmitter();
41
+ mousedownBefore = new EventEmitter();
42
+ mousemoveBefore = new EventEmitter();
43
+ mouseUp = new EventEmitter();
44
+ mouseDown = new EventEmitter();
45
+ mouseOver = new EventEmitter();
46
+ mouseOut = new EventEmitter();
47
+ mouseMove = new EventEmitter();
48
+ mouseWheel = new EventEmitter();
49
+ mouseDblclick = new EventEmitter();
50
+ mouseUpBefore = new EventEmitter();
51
+ mouseDownBefore = new EventEmitter();
52
+ mouseMoveBefore = new EventEmitter();
53
+ pathCreated = new EventEmitter();
54
+ alterRender = new EventEmitter();
55
+ objectAdded = new EventEmitter();
56
+ objectMoved = new EventEmitter();
57
+ objectScaled = new EventEmitter();
58
+ objectSkewed = new EventEmitter();
59
+ objectRotated = new EventEmitter();
60
+ objectRemoved = new EventEmitter();
61
+ objectModified = new EventEmitter();
62
+ objectSelected = new EventEmitter();
63
+ objectMoving = new EventEmitter();
64
+ objectScaling = new EventEmitter();
65
+ objectSkewing = new EventEmitter();
66
+ objectRotating = new EventEmitter();
67
+ selectionCleared = new EventEmitter();
68
+ selectionCreated = new EventEmitter();
69
+ selectionUpdated = new EventEmitter();
70
+ beforeTransform = new EventEmitter();
71
+ beforeSelectionCleared = new EventEmitter();
72
+ constructor(zone, elementRef, differs, defaults) {
73
+ this.zone = zone;
74
+ this.elementRef = elementRef;
75
+ this.differs = differs;
76
+ this.defaults = defaults;
77
+ }
78
+ ngOnInit() {
79
+ const params = new FabricConfig(this.defaults);
80
+ params.assign(this.config); // Custom configuration
81
+ Object.keys(params).forEach(key => params[key] === undefined && delete params[key]);
82
+ this.zone.runOutsideAngular(() => {
83
+ if (!this.disabled) {
84
+ this.instance = new fabric.Canvas(this.elementRef.nativeElement, params);
85
+ }
86
+ else {
87
+ this.instance = new fabric.StaticCanvas(this.elementRef.nativeElement, params);
88
+ }
89
+ if (this.initialZoom) {
90
+ this.setZoom(this.initialZoom);
91
+ }
92
+ if (this.initialWidth) {
93
+ this.setWidth(this.initialWidth);
94
+ }
95
+ if (this.initialHeight) {
96
+ this.setHeight(this.initialHeight);
97
+ }
98
+ if (this.objectsJSON !== null) {
99
+ this.loadFromJSON(this.objectsJSON);
100
+ }
101
+ });
102
+ // Add native Fabric event handling
103
+ FabricEvents.forEach((eventName) => {
104
+ const fabricEvent = eventName.replace(/([A-Z])/g, (c) => `:${c.toLowerCase()}`);
105
+ if (this.instance) {
106
+ this.instance.on(fabricEvent, (event) => {
107
+ this.zone.run(() => {
108
+ if (this[eventName].observers.length) {
109
+ this[eventName].emit(event);
110
+ }
111
+ });
112
+ });
113
+ }
114
+ });
115
+ if (!this.configDiff) {
116
+ this.configDiff = this.differs.find(this.config || {}).create();
117
+ this.configDiff.diff(this.config || {});
118
+ }
119
+ this.zone.runOutsideAngular(() => {
120
+ this.ro = new ResizeObserver((entries, observer) => {
121
+ const element = this.elementRef.nativeElement.parentElement.parentElement;
122
+ if (!this.initialWidth) {
123
+ this.setWidth(element.offsetWidth);
124
+ }
125
+ if (!this.initialHeight) {
126
+ this.setHeight(element.offsetHeight);
127
+ }
128
+ });
129
+ this.ro.observe(this.elementRef.nativeElement.parentElement.parentElement);
130
+ });
131
+ }
132
+ ngOnDestroy() {
133
+ if (this.ro) {
134
+ this.ro.disconnect();
135
+ }
136
+ if (this.instance) {
137
+ this.objectsJSON = this.instance.toObject();
138
+ this.instance.dispose();
139
+ delete this.instance;
140
+ this.instance = null;
141
+ }
142
+ }
143
+ ngDoCheck() {
144
+ if (this.configDiff) {
145
+ const changes = this.configDiff.diff(this.config || {});
146
+ if (changes) {
147
+ this.ngOnDestroy();
148
+ this.ngOnInit();
149
+ }
150
+ }
151
+ }
152
+ ngOnChanges(changes) {
153
+ if (this.instance && changes['disabled']) {
154
+ if (changes['disabled'].currentValue !== changes['disabled'].previousValue) {
155
+ this.ngOnDestroy();
156
+ this.ngOnInit();
157
+ }
158
+ }
159
+ }
160
+ fabric() {
161
+ return this.instance;
162
+ }
163
+ clear() {
164
+ if (this.instance) {
165
+ this.instance.clear();
166
+ }
167
+ }
168
+ render() {
169
+ if (this.instance) {
170
+ this.instance.renderAll();
171
+ }
172
+ }
173
+ setZoom(zoom) {
174
+ this.initialZoom = zoom;
175
+ if (this.instance) {
176
+ this.instance.setZoom(zoom);
177
+ }
178
+ }
179
+ setWidth(width) {
180
+ this.initialWidth = width;
181
+ if (this.instance) {
182
+ this.instance.setWidth(width);
183
+ }
184
+ }
185
+ setHeight(height) {
186
+ this.initialHeight = height;
187
+ if (this.instance) {
188
+ this.instance.setHeight(height);
189
+ }
190
+ }
191
+ loadFromJSON(json, callback, reviverOpt) {
192
+ if (this.instance) {
193
+ this.instance.loadFromJSON(json, () => {
194
+ let renderAll = true;
195
+ if (callback) {
196
+ renderAll = callback();
197
+ }
198
+ if (renderAll && this.instance) {
199
+ this.instance.renderAll();
200
+ }
201
+ }, reviverOpt);
202
+ }
203
+ }
204
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: FabricDirective, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.KeyValueDiffers }, { token: FABRIC_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
205
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.4", 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 });
206
+ }
207
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: FabricDirective, decorators: [{
208
+ type: Directive,
209
+ args: [{
210
+ selector: '[fabric]',
211
+ exportAs: 'ngxFabric'
212
+ }]
213
+ }], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.KeyValueDiffers }, { type: undefined, decorators: [{
214
+ type: Optional
215
+ }, {
216
+ type: Inject,
217
+ args: [FABRIC_CONFIG]
218
+ }] }], propDecorators: { zoom: [{
219
+ type: Input
220
+ }], width: [{
221
+ type: Input
222
+ }], height: [{
223
+ type: Input
224
+ }], disabled: [{
225
+ type: Input
226
+ }], config: [{
227
+ type: Input,
228
+ args: ['fabric']
229
+ }], drop: [{
230
+ type: Output
231
+ }], dragover: [{
232
+ type: Output
233
+ }], dragenter: [{
234
+ type: Output
235
+ }], dragleave: [{
236
+ type: Output
237
+ }], mouseup: [{
238
+ type: Output
239
+ }], mousedown: [{
240
+ type: Output
241
+ }], mouseover: [{
242
+ type: Output
243
+ }], mouseout: [{
244
+ type: Output
245
+ }], mousemove: [{
246
+ type: Output
247
+ }], mousewheel: [{
248
+ type: Output
249
+ }], mousedblclick: [{
250
+ type: Output
251
+ }], mouseupBefore: [{
252
+ type: Output
253
+ }], mousedownBefore: [{
254
+ type: Output
255
+ }], mousemoveBefore: [{
256
+ type: Output
257
+ }], mouseUp: [{
258
+ type: Output
259
+ }], mouseDown: [{
260
+ type: Output
261
+ }], mouseOver: [{
262
+ type: Output
263
+ }], mouseOut: [{
264
+ type: Output
265
+ }], mouseMove: [{
266
+ type: Output
267
+ }], mouseWheel: [{
268
+ type: Output
269
+ }], mouseDblclick: [{
270
+ type: Output
271
+ }], mouseUpBefore: [{
272
+ type: Output
273
+ }], mouseDownBefore: [{
274
+ type: Output
275
+ }], mouseMoveBefore: [{
276
+ type: Output
277
+ }], pathCreated: [{
278
+ type: Output
279
+ }], alterRender: [{
280
+ type: Output
281
+ }], objectAdded: [{
282
+ type: Output
283
+ }], objectMoved: [{
284
+ type: Output
285
+ }], objectScaled: [{
286
+ type: Output
287
+ }], objectSkewed: [{
288
+ type: Output
289
+ }], objectRotated: [{
290
+ type: Output
291
+ }], objectRemoved: [{
292
+ type: Output
293
+ }], objectModified: [{
294
+ type: Output
295
+ }], objectSelected: [{
296
+ type: Output
297
+ }], objectMoving: [{
298
+ type: Output
299
+ }], objectScaling: [{
300
+ type: Output
301
+ }], objectSkewing: [{
302
+ type: Output
303
+ }], objectRotating: [{
304
+ type: Output
305
+ }], selectionCleared: [{
306
+ type: Output
307
+ }], selectionCreated: [{
308
+ type: Output
309
+ }], selectionUpdated: [{
310
+ type: Output
311
+ }], beforeTransform: [{
312
+ type: Output
313
+ }], beforeSelectionCleared: [{
314
+ type: Output
315
+ }] } });
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFicmljLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi9zcmMvbGliL2ZhYnJpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVoQyxPQUFPLGNBQWMsTUFBTSwwQkFBMEIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBRWxDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUNxQixNQUFNLGVBQWUsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFDckIsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBTXpELE1BQU0sT0FBTyxlQUFlO0lBaUZOO0lBQ1Y7SUFBZ0M7SUFDRztJQWxGckMsUUFBUSxHQUErQyxJQUFJLENBQUM7SUFFNUQsRUFBRSxHQUEwQixJQUFJLENBQUM7SUFFakMsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFFbEMsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFDbEMsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsYUFBYSxHQUFrQixJQUFJLENBQUM7SUFFcEMsVUFBVSxHQUF1QyxJQUFJLENBQUM7SUFFOUQsSUFDSSxJQUFJLENBQUMsSUFBWTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUNJLEtBQUssQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQ0ksTUFBTSxDQUFDLE1BQWM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRVEsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUVsQixNQUFNLENBQXlCO0lBRXRDLElBQUksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQy9CLFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ25DLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3BDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBRXBDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ2xDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3BDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3BDLFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ25DLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3BDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3JDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3hDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3hDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQzFDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBRTFDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ2xDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3BDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3BDLFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ25DLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3BDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3JDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3hDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3hDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQzFDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBRTFDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3RDLFdBQVcsR0FB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O2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFFRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFFRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFFRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZhYnJpYyB9IGZyb20gJ2ZhYnJpYyc7XG5cbmltcG9ydCBSZXNpemVPYnNlcnZlciBmcm9tICdyZXNpemUtb2JzZXJ2ZXItcG9seWZpbGwnO1xuXG5pbXBvcnQgeyBEaXJlY3RpdmUsIE9wdGlvbmFsLCBJbmplY3QsXG4gIE9uSW5pdCwgT25EZXN0cm95LCBEb0NoZWNrLCBPbkNoYW5nZXMsXG4gIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgTmdab25lLCBFbGVtZW50UmVmLFxuICBLZXlWYWx1ZURpZmZlciwgS2V5VmFsdWVEaWZmZXJzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEZBQlJJQ19DT05GSUcsIEZhYnJpY0NvbmZpZywgRmFicmljQ29uZmlnSW50ZXJmYWNlLFxuICBGYWJyaWNFdmVudCwgRmFicmljRXZlbnRzIH0gZnJvbSAnLi9mYWJyaWMuaW50ZXJmYWNlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmYWJyaWNdJyxcbiAgZXhwb3J0QXM6ICduZ3hGYWJyaWMnXG59KVxuZXhwb3J0IGNsYXNzIEZhYnJpY0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBEb0NoZWNrLCBPbkNoYW5nZXMge1xuICBwcml2YXRlIGluc3RhbmNlOiBmYWJyaWMuQ2FudmFzIHwgZmFicmljLlN0YXRpY0NhbnZhcyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcm86IFJlc2l6ZU9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBvYmplY3RzSlNPTjogb2JqZWN0IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBpbml0aWFsWm9vbTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaW5pdGlhbFdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpbml0aWFsSGVpZ2h0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIGNvbmZpZ0RpZmY6IEtleVZhbHVlRGlmZmVyPHN0cmluZywgYW55PiB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCB6b29tKHpvb206IG51bWJlcikge1xuICAgIHRoaXMuc2V0Wm9vbSh6b29tKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB3aWR0aCh3aWR0aDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRXaWR0aCh3aWR0aCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGhlaWdodChoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuc2V0SGVpZ2h0KGhlaWdodCk7XG4gIH1cblxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnZmFicmljJykgY29uZmlnPzogRmFicmljQ29uZmlnSW50ZXJmYWNlO1xuXG4gIEBPdXRwdXQoKSBkcm9wID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBkcmFnb3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZHJhZ2VudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBkcmFnbGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgbW91c2V1cCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2Vkb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZW92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNld2hlZWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlZGJsY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNldXBCZWZvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlZG93bkJlZm9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2Vtb3ZlQmVmb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG1vdXNlVXAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlRG93biA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2VPdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZU91dCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbW91c2VNb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZVdoZWVsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZURibGNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZVVwQmVmb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb3VzZURvd25CZWZvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1vdXNlTW92ZUJlZm9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBwYXRoQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgYWx0ZXJSZW5kZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb2JqZWN0QWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdE1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvYmplY3RTY2FsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNrZXdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0Um90YXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0UmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2JqZWN0TW9kaWZpZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvYmplY3RNb3ZpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNjYWxpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFNrZXdpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9iamVjdFJvdGF0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNsZWFyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvblVwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgYmVmb3JlVHJhbnNmb3JtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBiZWZvcmVTZWxlY3Rpb25DbGVhcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGRpZmZlcnM6IEtleVZhbHVlRGlmZmVycyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZBQlJJQ19DT05GSUcpIHByaXZhdGUgZGVmYXVsdHM6IEZhYnJpY0NvbmZpZ0ludGVyZmFjZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgRmFicmljQ29uZmlnKHRoaXMuZGVmYXVsdHMpO1xuXG4gICAgcGFyYW1zLmFzc2lnbih0aGlzLmNvbmZpZyk7IC8vIEN1c3RvbSBjb25maWd1cmF0aW9uXG5cbiAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goa2V5ID0+IHBhcmFtc1trZXldID09PSB1bmRlZmluZWQgJiYgZGVsZXRlIHBhcmFtc1trZXldKVxuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmluc3RhbmNlID0gbmV3IGZhYnJpYy5DYW52YXModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHBhcmFtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluc3RhbmNlID0gbmV3IGZhYnJpYy5TdGF0aWNDYW52YXModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHBhcmFtcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmluaXRpYWxab29tKSB7XG4gICAgICAgIHRoaXMuc2V0Wm9vbSh0aGlzLmluaXRpYWxab29tKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaW5pdGlhbFdpZHRoKSB7XG4gICAgICAgIHRoaXMuc2V0V2lkdGgodGhpcy5pbml0aWFsV2lkdGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbml0aWFsSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuc2V0SGVpZ2h0KHRoaXMuaW5pdGlhbEhlaWdodCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9iamVjdHNKU09OICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubG9hZEZyb21KU09OKHRoaXMub2JqZWN0c0pTT04pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQWRkIG5hdGl2ZSBGYWJyaWMgZXZlbnQgaGFuZGxpbmdcbiAgICBGYWJyaWNFdmVudHMuZm9yRWFjaCgoZXZlbnROYW1lOiBGYWJyaWNFdmVudCkgPT4ge1xuICAgICAgY29uc3QgZmFicmljRXZlbnQgPSBldmVudE5hbWUucmVwbGFjZSgvKFtBLVpdKS9nLCAoYykgPT4gYDoke2MudG9Mb3dlckNhc2UoKX1gKTtcblxuICAgICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5vbihmYWJyaWNFdmVudCwgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzW2V2ZW50TmFtZV0ub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzW2V2ZW50TmFtZV0uZW1pdChldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpZ0RpZmYpIHtcbiAgICAgIHRoaXMuY29uZmlnRGlmZiA9IHRoaXMuZGlmZmVycy5maW5kKHRoaXMuY29uZmlnIHx8IHt9KS5jcmVhdGUoKTtcblxuICAgICAgdGhpcy5jb25maWdEaWZmLmRpZmYodGhpcy5jb25maWcgfHwge30pO1xuICAgIH1cblxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLnJvID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsV2lkdGgpIHtcbiAgICAgICAgICB0aGlzLnNldFdpZHRoKGVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLnNldEhlaWdodChlbGVtZW50Lm9mZnNldEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJvLm9ic2VydmUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJvKSB7XG4gICAgICB0aGlzLnJvLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgdGhpcy5vYmplY3RzSlNPTiA9IHRoaXMuaW5zdGFuY2UudG9PYmplY3QoKTtcblxuICAgICAgdGhpcy5pbnN0YW5jZS5kaXNwb3NlKCk7XG5cbiAgICAgIGRlbGV0ZSB0aGlzLmluc3RhbmNlO1xuXG4gICAgICB0aGlzLmluc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnRGlmZikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuY29uZmlnRGlmZi5kaWZmKHRoaXMuY29uZmlnIHx8IHt9KTtcblxuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5uZ09uRGVzdHJveSgpO1xuXG4gICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgY2hhbmdlc1snZGlzYWJsZWQnXSkge1xuICAgICAgaWYgKGNoYW5nZXNbJ2Rpc2FibGVkJ10uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydkaXNhYmxlZCddLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5uZ09uRGVzdHJveSgpO1xuXG4gICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmFicmljKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2UuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLmluc3RhbmNlLnJlbmRlckFsbCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRab29tKHpvb206IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbFpvb20gPSB6b29tO1xuXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2Uuc2V0Wm9vbSh6b29tKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0V2lkdGgod2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbFdpZHRoID0gd2lkdGg7XG5cbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgdGhpcy5pbnN0YW5jZS5zZXRXaWR0aCh3aWR0aCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEhlaWdodChoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbEhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLmluc3RhbmNlLnNldEhlaWdodChoZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBsb2FkRnJvbUpTT04oanNvbjogYW55LCBjYWxsYmFjaz86IEZ1bmN0aW9uLCByZXZpdmVyT3B0PzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2UubG9hZEZyb21KU09OKGpzb24sICgpID0+IHtcbiAgICAgICAgbGV0IHJlbmRlckFsbCA9IHRydWU7XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgcmVuZGVyQWxsID0gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW5kZXJBbGwgJiYgdGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgIHRoaXMuaW5zdGFuY2UucmVuZGVyQWxsKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIHJldml2ZXJPcHQpO1xuICAgIH1cbiAgfVxufVxuIl19