@ctrl/ngx-rightclick 1.1.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +5 -16
  3. package/bundles/ctrl-ngx-rightclick.umd.js +622 -658
  4. package/bundles/ctrl-ngx-rightclick.umd.js.map +1 -1
  5. package/bundles/ctrl-ngx-rightclick.umd.min.js +15 -1
  6. package/bundles/ctrl-ngx-rightclick.umd.min.js.map +1 -1
  7. package/context-menu-injector.d.ts +4 -4
  8. package/context-menu-trigger.directive.d.ts +1 -0
  9. package/context-menu.service.d.ts +2 -2
  10. package/context-submenu-trigger.directive.d.ts +3 -3
  11. package/ctrl-ngx-rightclick.metadata.json +1 -1
  12. package/esm2015/context-menu-injector.js +7 -52
  13. package/esm2015/context-menu-trigger.directive.js +52 -77
  14. package/esm2015/context-menu.module.js +16 -18
  15. package/esm2015/context-menu.service.js +19 -121
  16. package/esm2015/context-submenu-trigger.directive.js +38 -67
  17. package/esm2015/ctrl-ngx-rightclick.js +2 -6
  18. package/esm2015/menu.component.js +26 -64
  19. package/esm2015/public_api.js +7 -11
  20. package/esm5/context-menu-injector.js +8 -51
  21. package/esm5/context-menu-trigger.directive.js +54 -94
  22. package/esm5/context-menu.module.js +13 -16
  23. package/esm5/context-menu.service.js +20 -164
  24. package/esm5/context-submenu-trigger.directive.js +39 -88
  25. package/esm5/ctrl-ngx-rightclick.js +2 -6
  26. package/esm5/menu.component.js +26 -77
  27. package/esm5/public_api.js +7 -11
  28. package/fesm2015/ctrl-ngx-rightclick.js +143 -246
  29. package/fesm2015/ctrl-ngx-rightclick.js.map +1 -1
  30. package/fesm5/ctrl-ngx-rightclick.js +149 -336
  31. package/fesm5/ctrl-ngx-rightclick.js.map +1 -1
  32. package/menu.component.d.ts +1 -1
  33. package/package.json +5 -9
@@ -1,52 +1,223 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/cdk/overlay'), require('@angular/cdk/portal'), require('@angular/core'), require('rxjs'), require('rxjs/operators')) :
3
- typeof define === 'function' && define.amd ? define('@ctrl/ngx-rightclick', ['exports', '@angular/cdk/overlay', '@angular/cdk/portal', '@angular/core', 'rxjs', 'rxjs/operators'], factory) :
4
- (factory((global.ctrl = global.ctrl || {}, global.ctrl['ngx-rightclick'] = {}),global.ng.cdk.overlay,global.ng.cdk.portal,global.ng.core,global.rxjs,global.rxjs.operators));
5
- }(this, (function (exports,i1,portal,i0,rxjs,operators) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/cdk/overlay'), require('@angular/cdk/portal'), require('rxjs'), require('rxjs/operators')) :
3
+ typeof define === 'function' && define.amd ? define('@ctrl/ngx-rightclick', ['exports', '@angular/core', '@angular/cdk/overlay', '@angular/cdk/portal', 'rxjs', 'rxjs/operators'], factory) :
4
+ (global = global || self, factory((global.ctrl = global.ctrl || {}, global.ctrl['ngx-rightclick'] = {}), global.ng.core, global.ng.cdk.overlay, global.ng.cdk.portal, global.rxjs, global.rxjs.operators));
5
+ }(this, (function (exports, core, overlay, portal, rxjs, operators) { 'use strict';
6
6
 
7
- /*! *****************************************************************************
8
- Copyright (c) Microsoft Corporation. All rights reserved.
9
- Licensed under the Apache License, Version 2.0 (the "License"); you may not use
10
- this file except in compliance with the License. You may obtain a copy of the
11
- License at http://www.apache.org/licenses/LICENSE-2.0
12
-
13
- THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
15
- WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
16
- MERCHANTABLITY OR NON-INFRINGEMENT.
17
-
18
- See the Apache Version 2.0 License for specific language governing permissions
19
- and limitations under the License.
20
- ***************************************************************************** */
21
- var __assign = function () {
22
- __assign = Object.assign || function __assign(t) {
23
- for (var s, i = 1, n = arguments.length; i < n; i++) {
24
- s = arguments[i];
25
- for (var p in s)
26
- if (Object.prototype.hasOwnProperty.call(s, p))
27
- t[p] = s[p];
28
- }
29
- return t;
30
- };
31
- return __assign.apply(this, arguments);
32
- };
33
- function __values(o) {
34
- var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
35
- if (m)
36
- return m.call(o);
37
- return {
38
- next: function () {
39
- if (o && i >= o.length)
40
- o = void 0;
41
- return { value: o && o[i++], done: !o };
42
- }
43
- };
7
+ /*! *****************************************************************************
8
+ Copyright (c) Microsoft Corporation. All rights reserved.
9
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
10
+ this file except in compliance with the License. You may obtain a copy of the
11
+ License at http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
15
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
16
+ MERCHANTABLITY OR NON-INFRINGEMENT.
17
+
18
+ See the Apache Version 2.0 License for specific language governing permissions
19
+ and limitations under the License.
20
+ ***************************************************************************** */
21
+ /* global Reflect, Promise */
22
+
23
+ var extendStatics = function(d, b) {
24
+ extendStatics = Object.setPrototypeOf ||
25
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
26
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27
+ return extendStatics(d, b);
28
+ };
29
+
30
+ function __extends(d, b) {
31
+ extendStatics(d, b);
32
+ function __() { this.constructor = d; }
33
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
34
+ }
35
+
36
+ var __assign = function() {
37
+ __assign = Object.assign || function __assign(t) {
38
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
39
+ s = arguments[i];
40
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
41
+ }
42
+ return t;
43
+ };
44
+ return __assign.apply(this, arguments);
45
+ };
46
+
47
+ function __rest(s, e) {
48
+ var t = {};
49
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
50
+ t[p] = s[p];
51
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
52
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
53
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
54
+ t[p[i]] = s[p[i]];
55
+ }
56
+ return t;
57
+ }
58
+
59
+ function __decorate(decorators, target, key, desc) {
60
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
61
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
62
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
63
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
64
+ }
65
+
66
+ function __param(paramIndex, decorator) {
67
+ return function (target, key) { decorator(target, key, paramIndex); }
68
+ }
69
+
70
+ function __metadata(metadataKey, metadataValue) {
71
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
72
+ }
73
+
74
+ function __awaiter(thisArg, _arguments, P, generator) {
75
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
76
+ return new (P || (P = Promise))(function (resolve, reject) {
77
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
78
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
79
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
80
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
81
+ });
82
+ }
83
+
84
+ function __generator(thisArg, body) {
85
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
86
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
87
+ function verb(n) { return function (v) { return step([n, v]); }; }
88
+ function step(op) {
89
+ if (f) throw new TypeError("Generator is already executing.");
90
+ while (_) try {
91
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
92
+ if (y = 0, t) op = [op[0] & 2, t.value];
93
+ switch (op[0]) {
94
+ case 0: case 1: t = op; break;
95
+ case 4: _.label++; return { value: op[1], done: false };
96
+ case 5: _.label++; y = op[1]; op = [0]; continue;
97
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
98
+ default:
99
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
100
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
101
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
102
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
103
+ if (t[2]) _.ops.pop();
104
+ _.trys.pop(); continue;
105
+ }
106
+ op = body.call(thisArg, _);
107
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
108
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
109
+ }
110
+ }
111
+
112
+ function __exportStar(m, exports) {
113
+ for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
114
+ }
115
+
116
+ function __values(o) {
117
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
118
+ if (m) return m.call(o);
119
+ if (o && typeof o.length === "number") return {
120
+ next: function () {
121
+ if (o && i >= o.length) o = void 0;
122
+ return { value: o && o[i++], done: !o };
123
+ }
124
+ };
125
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
126
+ }
127
+
128
+ function __read(o, n) {
129
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
130
+ if (!m) return o;
131
+ var i = m.call(o), r, ar = [], e;
132
+ try {
133
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
134
+ }
135
+ catch (error) { e = { error: error }; }
136
+ finally {
137
+ try {
138
+ if (r && !r.done && (m = i["return"])) m.call(i);
139
+ }
140
+ finally { if (e) throw e.error; }
141
+ }
142
+ return ar;
143
+ }
144
+
145
+ function __spread() {
146
+ for (var ar = [], i = 0; i < arguments.length; i++)
147
+ ar = ar.concat(__read(arguments[i]));
148
+ return ar;
149
+ }
150
+
151
+ function __spreadArrays() {
152
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
153
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
154
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
155
+ r[k] = a[j];
156
+ return r;
157
+ };
158
+
159
+ function __await(v) {
160
+ return this instanceof __await ? (this.v = v, this) : new __await(v);
161
+ }
162
+
163
+ function __asyncGenerator(thisArg, _arguments, generator) {
164
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
165
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
166
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
167
+ function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
168
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
169
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
170
+ function fulfill(value) { resume("next", value); }
171
+ function reject(value) { resume("throw", value); }
172
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
173
+ }
174
+
175
+ function __asyncDelegator(o) {
176
+ var i, p;
177
+ return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
178
+ function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
179
+ }
180
+
181
+ function __asyncValues(o) {
182
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
183
+ var m = o[Symbol.asyncIterator], i;
184
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
185
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
186
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
187
+ }
188
+
189
+ function __makeTemplateObject(cooked, raw) {
190
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
191
+ return cooked;
192
+ };
193
+
194
+ function __importStar(mod) {
195
+ if (mod && mod.__esModule) return mod;
196
+ var result = {};
197
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
198
+ result.default = mod;
199
+ return result;
200
+ }
201
+
202
+ function __importDefault(mod) {
203
+ return (mod && mod.__esModule) ? mod : { default: mod };
204
+ }
205
+
206
+ function __classPrivateFieldGet(receiver, privateMap) {
207
+ if (!privateMap.has(receiver)) {
208
+ throw new TypeError("attempted to get private field on non-instance");
209
+ }
210
+ return privateMap.get(receiver);
211
+ }
212
+
213
+ function __classPrivateFieldSet(receiver, privateMap, value) {
214
+ if (!privateMap.has(receiver)) {
215
+ throw new TypeError("attempted to set private field on non-instance");
216
+ }
217
+ privateMap.set(receiver, value);
218
+ return value;
44
219
  }
45
220
 
46
- /**
47
- * @fileoverview added by tsickle
48
- * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
49
- */
50
221
  var MenuPackage = /** @class */ (function () {
51
222
  function MenuPackage(menu, context) {
52
223
  this.menu = menu;
@@ -55,44 +226,26 @@
55
226
  return MenuPackage;
56
227
  }());
57
228
  var MenuInjector = /** @class */ (function () {
58
- function MenuInjector(_activeContextMenu, _parentInjector, context) {
59
- this._activeContextMenu = _activeContextMenu;
60
- this._parentInjector = _parentInjector;
229
+ function MenuInjector(activeContextMenu, parentInjector, context) {
230
+ this.activeContextMenu = activeContextMenu;
231
+ this.parentInjector = parentInjector;
61
232
  this.context = context;
62
- this._menuContext = new MenuPackage(_activeContextMenu, context);
233
+ this.menuContext = new MenuPackage(activeContextMenu, context);
63
234
  }
64
- /**
65
- * @template T
66
- * @param {?} token
67
- * @param {?=} notFoundValue
68
- * @param {?=} flags
69
- * @return {?}
70
- */
71
- MenuInjector.prototype.get = /**
72
- * @template T
73
- * @param {?} token
74
- * @param {?=} notFoundValue
75
- * @param {?=} flags
76
- * @return {?}
77
- */
78
- function (token, notFoundValue, flags) {
79
- if (token === MenuPackage) {
80
- return this._menuContext;
81
- }
82
- return this._parentInjector.get(token, notFoundValue, flags);
83
- };
235
+ MenuInjector.prototype.get = function (token, notFoundValue, flags) {
236
+ if (token === MenuPackage) {
237
+ return this.menuContext;
238
+ }
239
+ return this.parentInjector.get(token, notFoundValue, flags);
240
+ };
84
241
  return MenuInjector;
85
242
  }());
86
243
 
87
- /**
88
- * @fileoverview added by tsickle
89
- * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
90
- */
91
244
  var ContextMenuService = /** @class */ (function () {
92
- function ContextMenuService(overlay, scrollStrategy, _injector) {
245
+ function ContextMenuService(overlay, scrollStrategy, injector) {
93
246
  this.overlay = overlay;
94
247
  this.scrollStrategy = scrollStrategy;
95
- this._injector = _injector;
248
+ this.injector = injector;
96
249
  this.menus = [];
97
250
  this.id = 0;
98
251
  }
@@ -103,658 +256,469 @@
103
256
  * @param submenu is a menu within a menu
104
257
  * @param level if submenu, what level
105
258
  */
106
- /**
107
- *
108
- * @param {?} $event triggering event
109
- * @param {?} menuComponent the component to be shown
110
- * @param {?} context
111
- * @param {?} menuClose
112
- * @param {?} menuAction
113
- * @param {?=} submenu is a menu within a menu
114
- * @param {?=} level if submenu, what level
115
- * @return {?}
116
- */
117
- ContextMenuService.prototype.show = /**
118
- *
119
- * @param {?} $event triggering event
120
- * @param {?} menuComponent the component to be shown
121
- * @param {?} context
122
- * @param {?} menuClose
123
- * @param {?} menuAction
124
- * @param {?=} submenu is a menu within a menu
125
- * @param {?=} level if submenu, what level
126
- * @return {?}
127
- */
128
- function ($event, menuComponent, context, menuClose, menuAction, submenu, level) {
129
- if (submenu === void 0) {
130
- submenu = false;
131
- }
132
- /** @type {?} */
133
- var target;
134
- if (!submenu) {
135
- this.closeAll();
136
- target = {
137
- getBoundingClientRect: function () {
138
- return ({
139
- bottom: $event.clientY,
140
- height: 0,
141
- left: $event.clientX,
142
- right: $event.clientX,
143
- top: $event.clientY,
144
- width: 0,
145
- });
146
- },
147
- };
148
- }
149
- else {
150
- // close other submenus
151
- this.closeAll(undefined, level);
152
- target = $event.target;
153
- }
154
- /** @type {?} */
155
- var el = new i0.ElementRef(target);
156
- /** @type {?} */
157
- var positionStrategy = this.overlay
158
- .position()
159
- .flexibleConnectedTo(el)
160
- .withFlexibleDimensions(false);
161
- if (!submenu) {
162
- positionStrategy.withPositions([
163
- {
164
- originX: 'start',
165
- originY: 'bottom',
166
- overlayX: 'start',
167
- overlayY: 'top',
168
- },
169
- {
170
- originX: 'start',
171
- originY: 'top',
172
- overlayX: 'start',
173
- overlayY: 'bottom',
174
- },
175
- {
176
- originX: 'end',
177
- originY: 'top',
178
- overlayX: 'start',
179
- overlayY: 'top',
180
- },
181
- {
182
- originX: 'start',
183
- originY: 'top',
184
- overlayX: 'end',
185
- overlayY: 'top',
186
- },
187
- {
188
- originX: 'end',
189
- originY: 'center',
190
- overlayX: 'start',
191
- overlayY: 'center',
192
- },
193
- {
194
- originX: 'start',
195
- originY: 'center',
196
- overlayX: 'end',
197
- overlayY: 'center',
198
- },
199
- ]);
200
- }
201
- else {
202
- positionStrategy.withPositions([
203
- {
204
- originX: 'end',
205
- originY: 'top',
206
- overlayX: 'start',
207
- overlayY: 'top',
208
- },
209
- {
210
- originX: 'start',
211
- originY: 'top',
212
- overlayX: 'end',
213
- overlayY: 'top',
214
- },
215
- {
216
- originX: 'end',
217
- originY: 'bottom',
218
- overlayX: 'start',
219
- overlayY: 'bottom',
220
- },
221
- {
222
- originX: 'start',
223
- originY: 'bottom',
224
- overlayX: 'end',
225
- overlayY: 'bottom',
226
- },
227
- ]);
228
- }
229
- /** @type {?} */
230
- var t = {
231
- submenu: submenu,
232
- id: this.id++,
233
- isMenuHovered: new rxjs.BehaviorSubject(false),
234
- isTriggerHovered: new rxjs.BehaviorSubject(false),
259
+ ContextMenuService.prototype.show = function ($event, menuComponent, context, menuClose, menuAction, submenu, level) {
260
+ if (submenu === void 0) { submenu = false; }
261
+ var target;
262
+ if (!submenu) {
263
+ this.closeAll();
264
+ target = {
265
+ getBoundingClientRect: function () { return ({
266
+ bottom: $event.clientY,
267
+ height: 0,
268
+ left: $event.clientX,
269
+ right: $event.clientX,
270
+ top: $event.clientY,
271
+ width: 0,
272
+ }); },
235
273
  };
236
- /** @type {?} */
237
- var menuInjector = new MenuInjector(t, this._injector, context);
238
- /** @type {?} */
239
- var componentPortal = new portal.ComponentPortal(menuComponent, undefined, menuInjector);
240
- /** @type {?} */
241
- var overlayRef = this.overlay.create({
242
- positionStrategy: positionStrategy,
243
- panelClass: 'ngx-contextmenu',
244
- scrollStrategy: this.scrollStrategy.close(),
245
- });
246
- /** @type {?} */
247
- var component = overlayRef.attach(componentPortal);
248
- /** @type {?} */
249
- var res = __assign({ overlayRef: overlayRef, component: component }, t, { menuClose: menuClose, menuAction: menuAction });
250
- this.menus.push(res);
251
- return res;
252
- };
253
- /**
254
- * @return {?}
255
- */
256
- ContextMenuService.prototype.getCurrentLevel = /**
257
- * @return {?}
258
- */
259
- function () {
260
- return this.menus.length;
261
- };
262
- /**
263
- * @param {?=} context
264
- * @param {?=} idx
265
- * @return {?}
266
- */
267
- ContextMenuService.prototype.closeAll = /**
268
- * @param {?=} context
269
- * @param {?=} idx
270
- * @return {?}
271
- */
272
- function (context, idx) {
273
- if (idx === void 0) {
274
- idx = 0;
275
- }
276
- for (var index = idx; index < this.menus.length; index++) {
277
- /** @type {?} */
278
- var menu = this.menus[index];
279
- this.destroyMenu(menu, context);
280
- }
281
- this.menus.splice(idx, this.menus.length);
274
+ }
275
+ else {
276
+ // close other submenus
277
+ this.closeAll(undefined, level);
278
+ target = $event.target;
279
+ }
280
+ var el = new core.ElementRef(target);
281
+ var positionStrategy = this.overlay
282
+ .position()
283
+ .flexibleConnectedTo(el)
284
+ .withFlexibleDimensions(false);
285
+ if (!submenu) {
286
+ positionStrategy.withPositions([
287
+ {
288
+ originX: 'start',
289
+ originY: 'bottom',
290
+ overlayX: 'start',
291
+ overlayY: 'top',
292
+ },
293
+ {
294
+ originX: 'start',
295
+ originY: 'top',
296
+ overlayX: 'start',
297
+ overlayY: 'bottom',
298
+ },
299
+ {
300
+ originX: 'end',
301
+ originY: 'top',
302
+ overlayX: 'start',
303
+ overlayY: 'top',
304
+ },
305
+ {
306
+ originX: 'start',
307
+ originY: 'top',
308
+ overlayX: 'end',
309
+ overlayY: 'top',
310
+ },
311
+ {
312
+ originX: 'end',
313
+ originY: 'center',
314
+ overlayX: 'start',
315
+ overlayY: 'center',
316
+ },
317
+ {
318
+ originX: 'start',
319
+ originY: 'center',
320
+ overlayX: 'end',
321
+ overlayY: 'center',
322
+ },
323
+ ]);
324
+ }
325
+ else {
326
+ positionStrategy.withPositions([
327
+ {
328
+ originX: 'end',
329
+ originY: 'top',
330
+ overlayX: 'start',
331
+ overlayY: 'top',
332
+ },
333
+ {
334
+ originX: 'start',
335
+ originY: 'top',
336
+ overlayX: 'end',
337
+ overlayY: 'top',
338
+ },
339
+ {
340
+ originX: 'end',
341
+ originY: 'bottom',
342
+ overlayX: 'start',
343
+ overlayY: 'bottom',
344
+ },
345
+ {
346
+ originX: 'start',
347
+ originY: 'bottom',
348
+ overlayX: 'end',
349
+ overlayY: 'bottom',
350
+ },
351
+ ]);
352
+ }
353
+ var t = {
354
+ submenu: submenu,
355
+ id: this.id++,
356
+ isMenuHovered: new rxjs.BehaviorSubject(false),
357
+ isTriggerHovered: new rxjs.BehaviorSubject(false),
282
358
  };
283
- /**
284
- * @param {?} menu
285
- * @param {?=} context
286
- * @return {?}
287
- */
288
- ContextMenuService.prototype.destroyMenu = /**
289
- * @param {?} menu
290
- * @param {?=} context
291
- * @return {?}
292
- */
293
- function (menu, context) {
294
- menu.component.instance._state = 'exit';
295
- if (menu.component.instance.lazy) {
296
- menu.component.instance._animationDone
297
- .pipe(operators.filter(function (event) { return event.toState === 'exit'; }), operators.take(1))
298
- .subscribe(function () {
299
- menu.overlayRef.detach();
300
- menu.overlayRef.dispose();
301
- });
302
- }
303
- else {
359
+ var menuInjector = new MenuInjector(t, this.injector, context);
360
+ var componentPortal = new portal.ComponentPortal(menuComponent, undefined, menuInjector);
361
+ var overlayRef = this.overlay.create({
362
+ positionStrategy: positionStrategy,
363
+ panelClass: 'ngx-contextmenu',
364
+ scrollStrategy: this.scrollStrategy.close(),
365
+ });
366
+ var component = overlayRef.attach(componentPortal);
367
+ var res = __assign(__assign({ overlayRef: overlayRef, component: component }, t), { menuClose: menuClose, menuAction: menuAction });
368
+ this.menus.push(res);
369
+ return res;
370
+ };
371
+ ContextMenuService.prototype.getCurrentLevel = function () {
372
+ return this.menus.length;
373
+ };
374
+ ContextMenuService.prototype.closeAll = function (context, idx) {
375
+ if (idx === void 0) { idx = 0; }
376
+ for (var index = idx; index < this.menus.length; index++) {
377
+ var menu = this.menus[index];
378
+ this.destroyMenu(menu, context);
379
+ }
380
+ this.menus.splice(idx, this.menus.length);
381
+ };
382
+ ContextMenuService.prototype.destroyMenu = function (menu, context) {
383
+ menu.component.instance._state = 'exit';
384
+ if (menu.component.instance.lazy) {
385
+ menu.component.instance._animationDone
386
+ .pipe(operators.filter(function (event) { return event.toState === 'exit'; }), operators.take(1))
387
+ .subscribe(function () {
304
388
  menu.overlayRef.detach();
305
389
  menu.overlayRef.dispose();
306
- }
307
- if (context) {
308
- menu.menuAction.next(context);
309
- }
310
- menu.menuClose.next();
311
- };
312
- /**
313
- * @param {?} menu
314
- * @param {?} menuIndex
315
- * @param {?=} context
316
- * @return {?}
317
- */
318
- ContextMenuService.prototype.close = /**
319
- * @param {?} menu
320
- * @param {?} menuIndex
321
- * @param {?=} context
322
- * @return {?}
323
- */
324
- function (menu, menuIndex, context) {
325
- this.destroyMenu(menu, context);
326
- this.menus.splice(menuIndex, 1);
327
- };
328
- /**
329
- * @param {?} $event
330
- * @return {?}
331
- */
332
- ContextMenuService.prototype.checkOutsideClick = /**
333
- * @param {?} $event
334
- * @return {?}
335
- */
336
- function ($event) {
337
- var e_1, _a;
338
- try {
339
- for (var _b = __values(this.menus), _c = _b.next(); !_c.done; _c = _b.next()) {
340
- var m = _c.value;
341
- /** @type {?} */
342
- var clickedInside = m.component.location.nativeElement.contains($event.target);
343
- if (clickedInside) {
344
- $event.preventDefault();
345
- $event.stopPropagation();
346
- return;
347
- }
390
+ });
391
+ }
392
+ else {
393
+ menu.overlayRef.detach();
394
+ menu.overlayRef.dispose();
395
+ }
396
+ if (context) {
397
+ menu.menuAction.next(context);
398
+ }
399
+ menu.menuClose.next();
400
+ };
401
+ ContextMenuService.prototype.close = function (menu, menuIndex, context) {
402
+ this.destroyMenu(menu, context);
403
+ this.menus.splice(menuIndex, 1);
404
+ };
405
+ ContextMenuService.prototype.checkOutsideClick = function ($event) {
406
+ var e_1, _a;
407
+ try {
408
+ for (var _b = __values(this.menus), _c = _b.next(); !_c.done; _c = _b.next()) {
409
+ var m = _c.value;
410
+ var clickedInside = m.component.location.nativeElement.contains($event.target);
411
+ if (clickedInside) {
412
+ $event.preventDefault();
413
+ $event.stopPropagation();
414
+ return;
348
415
  }
349
416
  }
350
- catch (e_1_1) {
351
- e_1 = { error: e_1_1 };
352
- }
353
- finally {
354
- try {
355
- if (_c && !_c.done && (_a = _b.return))
356
- _a.call(_b);
357
- }
358
- finally {
359
- if (e_1)
360
- throw e_1.error;
361
- }
417
+ }
418
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
419
+ finally {
420
+ try {
421
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
362
422
  }
363
- this.closeAll();
364
- };
365
- /**
366
- * @param {?} id
367
- * @return {?}
368
- */
369
- ContextMenuService.prototype.closeSubMenu = /**
370
- * @param {?} id
371
- * @return {?}
372
- */
373
- function (id) {
374
- /** @type {?} */
375
- var menuIndex = this.menus.findIndex(function (n) { return n.id === id; });
376
- if (menuIndex === -1 || menuIndex !== this.menus.length - 1) {
377
- return;
423
+ finally { if (e_1) throw e_1.error; }
424
+ }
425
+ this.closeAll();
426
+ };
427
+ ContextMenuService.prototype.closeSubMenu = function (id) {
428
+ var menuIndex = this.menus.findIndex(function (n) { return n.id === id; });
429
+ if (menuIndex === -1 || menuIndex !== this.menus.length - 1) {
430
+ return;
431
+ }
432
+ // make sure we can close the current menu
433
+ var menu = this.menus[menuIndex];
434
+ if (menu.isMenuHovered.getValue() || menu.isTriggerHovered.getValue()) {
435
+ return;
436
+ }
437
+ // close all menus up if possible
438
+ for (var index = this.menus.length - 1; index >= 1; index--) {
439
+ var m = this.menus[index];
440
+ if (!m.isMenuHovered.getValue() && !m.isTriggerHovered.getValue()) {
441
+ this.close(m, index);
378
442
  }
379
- // make sure we can close the current menu
380
- /** @type {?} */
381
- var menu = this.menus[menuIndex];
382
- if (menu.isMenuHovered.getValue() || menu.isTriggerHovered.getValue()) {
443
+ else {
383
444
  return;
384
445
  }
385
- // close all menus up if possible
386
- for (var index = this.menus.length - 1; index >= 1; index--) {
387
- /** @type {?} */
388
- var m = this.menus[index];
389
- if (!m.isMenuHovered.getValue() && !m.isTriggerHovered.getValue()) {
390
- this.close(m, index);
391
- }
392
- else {
393
- return;
394
- }
395
- }
396
- };
397
- ContextMenuService.decorators = [
398
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
399
- ];
400
- /** @nocollapse */
401
- ContextMenuService.ctorParameters = function () {
402
- return [
403
- { type: i1.Overlay },
404
- { type: i1.ScrollStrategyOptions },
405
- { type: i0.Injector }
406
- ];
446
+ }
407
447
  };
408
- /** @nocollapse */ ContextMenuService.ngInjectableDef = i0.defineInjectable({ factory: function ContextMenuService_Factory() { return new ContextMenuService(i0.inject(i1.Overlay), i0.inject(i1.ScrollStrategyOptions), i0.inject(i0.INJECTOR)); }, token: ContextMenuService, providedIn: "root" });
448
+ ContextMenuService.ctorParameters = function () { return [
449
+ { type: overlay.Overlay },
450
+ { type: overlay.ScrollStrategyOptions },
451
+ { type: core.Injector }
452
+ ]; };
453
+ ContextMenuService.ɵprov = core["ɵɵdefineInjectable"]({ factory: function ContextMenuService_Factory() { return new ContextMenuService(core["ɵɵinject"](overlay.Overlay), core["ɵɵinject"](overlay.ScrollStrategyOptions), core["ɵɵinject"](core.INJECTOR)); }, token: ContextMenuService, providedIn: "root" });
454
+ ContextMenuService = __decorate([
455
+ core.Injectable({ providedIn: 'root' })
456
+ ], ContextMenuService);
409
457
  return ContextMenuService;
410
458
  }());
411
459
 
412
- /**
413
- * @fileoverview added by tsickle
414
- * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
415
- */
416
460
  var ContextMenuTriggerDirective = /** @class */ (function () {
417
461
  function ContextMenuTriggerDirective(contextMenuService) {
418
462
  this.contextMenuService = contextMenuService;
419
463
  this.holdToDisplay = 1000;
420
- this.menuAction = new i0.EventEmitter();
421
- this.menuClose = new i0.EventEmitter();
464
+ this.menuAction = new core.EventEmitter();
465
+ this.menuClose = new core.EventEmitter();
466
+ this.beforeOpen = new core.EventEmitter();
422
467
  this.visible = false;
423
468
  }
424
- /**
425
- * @param {?} $event
426
- * @return {?}
427
- */
428
- ContextMenuTriggerDirective.prototype.handleMenu = /**
429
- * @param {?} $event
430
- * @return {?}
431
- */
432
- function ($event) {
433
- $event.preventDefault();
434
- this.menu = this.contextMenuService.show($event, this.contextMenuTrigger, this.menuContext, this.menuClose, this.menuAction);
435
- this.visible = true;
436
- };
437
- /**
438
- * @param {?} $event
439
- * @return {?}
440
- */
441
- ContextMenuTriggerDirective.prototype.handleMouseDown = /**
442
- * @param {?} $event
443
- * @return {?}
444
- */
445
- function ($event) {
446
- var _this = this;
447
- if (this.holdToDisplay >= 0) {
448
- $event.stopPropagation();
449
- $event.clientY = $event.touches[0].clientY;
450
- $event.clientX = $event.touches[0].clientX;
451
- this.mouseDownTimeoutId = setTimeout(function () { return _this.handleMenu($event); }, this.holdToDisplay);
452
- }
453
- };
454
- /**
455
- * @return {?}
456
- */
457
- ContextMenuTriggerDirective.prototype.handleMouseUp = /**
458
- * @return {?}
459
- */
460
- function () {
461
- clearTimeout(this.mouseDownTimeoutId);
462
- };
463
- /**
464
- * @return {?}
465
- */
466
- ContextMenuTriggerDirective.prototype.ngOnInit = /**
467
- * @return {?}
468
- */
469
- function () {
470
- var _this = this;
471
- this.sub = this.menuClose.subscribe(function () { return _this.visible = false; });
472
- };
473
- /**
474
- * @return {?}
475
- */
476
- ContextMenuTriggerDirective.prototype.ngOnDestroy = /**
477
- * @return {?}
478
- */
479
- function () {
480
- this.sub.unsubscribe();
481
- };
482
- ContextMenuTriggerDirective.decorators = [
483
- { type: i0.Directive, args: [{
484
- selector: '[contextMenuTrigger]',
485
- exportAs: 'contextMenuTrigger',
486
- },] }
487
- ];
488
- /** @nocollapse */
489
- ContextMenuTriggerDirective.ctorParameters = function () {
490
- return [
491
- { type: ContextMenuService }
492
- ];
469
+ ContextMenuTriggerDirective.prototype.handleMenu = function ($event) {
470
+ var preventOpen = false;
471
+ this.beforeOpen.emit({
472
+ menuContext: this.menuContext,
473
+ event: $event,
474
+ preventOpen: function () {
475
+ preventOpen = true;
476
+ },
477
+ });
478
+ if (preventOpen) {
479
+ return;
480
+ }
481
+ $event.preventDefault();
482
+ this.menu = this.contextMenuService.show($event, this.contextMenuTrigger, this.menuContext, this.menuClose, this.menuAction);
483
+ this.visible = true;
484
+ };
485
+ ContextMenuTriggerDirective.prototype.handleMouseDown = function ($event) {
486
+ var _this = this;
487
+ if (this.holdToDisplay >= 0) {
488
+ $event.stopPropagation();
489
+ $event.clientY = $event.touches[0].clientY;
490
+ $event.clientX = $event.touches[0].clientX;
491
+ this.mouseDownTimeoutId = setTimeout(function () { return _this.handleMenu($event); }, this.holdToDisplay);
492
+ }
493
+ };
494
+ ContextMenuTriggerDirective.prototype.handleMouseUp = function () {
495
+ clearTimeout(this.mouseDownTimeoutId);
496
+ };
497
+ ContextMenuTriggerDirective.prototype.ngOnInit = function () {
498
+ var _this = this;
499
+ this.sub = this.menuClose.subscribe(function () { return (_this.visible = false); });
493
500
  };
494
- ContextMenuTriggerDirective.propDecorators = {
495
- contextMenuTrigger: [{ type: i0.Input }],
496
- menuContext: [{ type: i0.Input }],
497
- holdToDisplay: [{ type: i0.Input }],
498
- menuAction: [{ type: i0.Output }],
499
- menuClose: [{ type: i0.Output }],
500
- handleMenu: [{ type: i0.HostListener, args: ['contextmenu', ['$event'],] }],
501
- handleMouseDown: [{ type: i0.HostListener, args: ['touchstart', ['$event'],] }],
502
- handleMouseUp: [{ type: i0.HostListener, args: ['touchend',] }]
501
+ ContextMenuTriggerDirective.prototype.ngOnDestroy = function () {
502
+ this.sub.unsubscribe();
503
503
  };
504
+ ContextMenuTriggerDirective.ctorParameters = function () { return [
505
+ { type: ContextMenuService }
506
+ ]; };
507
+ __decorate([
508
+ core.Input()
509
+ ], ContextMenuTriggerDirective.prototype, "contextMenuTrigger", void 0);
510
+ __decorate([
511
+ core.Input()
512
+ ], ContextMenuTriggerDirective.prototype, "menuContext", void 0);
513
+ __decorate([
514
+ core.Input()
515
+ ], ContextMenuTriggerDirective.prototype, "holdToDisplay", void 0);
516
+ __decorate([
517
+ core.Output()
518
+ ], ContextMenuTriggerDirective.prototype, "menuAction", void 0);
519
+ __decorate([
520
+ core.Output()
521
+ ], ContextMenuTriggerDirective.prototype, "menuClose", void 0);
522
+ __decorate([
523
+ core.Output()
524
+ ], ContextMenuTriggerDirective.prototype, "beforeOpen", void 0);
525
+ __decorate([
526
+ core.HostListener('contextmenu', ['$event'])
527
+ ], ContextMenuTriggerDirective.prototype, "handleMenu", null);
528
+ __decorate([
529
+ core.HostListener('touchstart', ['$event'])
530
+ ], ContextMenuTriggerDirective.prototype, "handleMouseDown", null);
531
+ __decorate([
532
+ core.HostListener('touchend')
533
+ ], ContextMenuTriggerDirective.prototype, "handleMouseUp", null);
534
+ ContextMenuTriggerDirective = __decorate([
535
+ core.Directive({
536
+ selector: '[contextMenuTrigger]',
537
+ exportAs: 'contextMenuTrigger',
538
+ })
539
+ ], ContextMenuTriggerDirective);
504
540
  return ContextMenuTriggerDirective;
505
541
  }());
506
542
 
507
- /**
508
- * @fileoverview added by tsickle
509
- * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
510
- */
511
543
  var ContextSubmenuTriggerDirective = /** @class */ (function () {
512
544
  function ContextSubmenuTriggerDirective(contextMenuService) {
513
545
  var _this = this;
514
546
  this.contextMenuService = contextMenuService;
515
547
  this.hoverDelay = 500;
516
548
  this.openDelay = 200;
517
- this.menuAction = new i0.EventEmitter();
518
- this.menuClose = new i0.EventEmitter();
549
+ this.menuAction = new core.EventEmitter();
550
+ this.menuClose = new core.EventEmitter();
519
551
  this.visible = false;
520
552
  this.level = 1;
521
553
  // get current level
522
554
  setTimeout(function () { return (_this.level = _this.contextMenuService.getCurrentLevel()); });
523
555
  }
556
+ ContextSubmenuTriggerDirective.prototype.handleSubMenuClick = function ($event) {
557
+ $event.preventDefault();
558
+ $event.stopPropagation();
559
+ clearTimeout(this.opentimer);
560
+ clearTimeout(this.closetimer);
561
+ this.menu = this.contextMenuService.show($event, this.contextSubmenuTrigger, this.menuContext, this.menuClose, this.menuAction, true, this.level);
562
+ this.visible = true;
563
+ };
564
+ ContextSubmenuTriggerDirective.prototype.handleSubMenuEnter = function ($event) {
565
+ var _this = this;
566
+ if (this.menu) {
567
+ this.menu.isTriggerHovered.next(true);
568
+ }
569
+ clearTimeout(this.closetimer);
570
+ this.opentimer = setTimeout(function () {
571
+ _this.menu = _this.contextMenuService.show($event, _this.contextSubmenuTrigger, _this.menuContext, _this.menuClose, _this.menuAction, true, _this.level);
572
+ _this.visible = true;
573
+ _this.opentimer = null;
574
+ }, this.openDelay);
575
+ };
524
576
  /**
525
- * @param {?} $event
526
- * @return {?}
527
- */
528
- ContextSubmenuTriggerDirective.prototype.handleSubMenuClick = /**
529
- * @param {?} $event
530
- * @return {?}
531
- */
532
- function ($event) {
533
- event.preventDefault();
534
- event.stopPropagation();
535
- clearTimeout(this.opentimer);
536
- clearTimeout(this.closetimer);
537
- this.menu = this.contextMenuService.show($event, this.contextSubmenuTrigger, this.menuContext, this.menuClose, this.menuAction, true, this.level);
538
- this.visible = true;
539
- };
540
- /**
541
- * @param {?} $event
542
- * @return {?}
543
- */
544
- ContextSubmenuTriggerDirective.prototype.handleSubMenuEnter = /**
545
- * @param {?} $event
546
- * @return {?}
547
- */
548
- function ($event) {
549
- var _this = this;
550
- if (this.menu) {
551
- this.menu.isTriggerHovered.next(true);
552
- }
553
- clearTimeout(this.closetimer);
554
- this.opentimer = setTimeout(function () {
555
- _this.menu = _this.contextMenuService.show($event, _this.contextSubmenuTrigger, _this.menuContext, _this.menuClose, _this.menuAction, true, _this.level);
556
- _this.visible = true;
557
- _this.opentimer = null;
558
- }, this.openDelay);
559
- };
560
- /**
561
- * submenu hides after cursor has exited for a period of time
562
- */
563
- /**
564
- * submenu hides after cursor has exited for a period of time
565
- * @return {?}
566
- */
567
- ContextSubmenuTriggerDirective.prototype.handleSubMenuExit = /**
568
577
  * submenu hides after cursor has exited for a period of time
569
- * @return {?}
570
578
  */
571
- function () {
572
- var _this = this;
573
- clearTimeout(this.opentimer);
574
- if (this.menu) {
575
- this.menu.isTriggerHovered.next(false);
579
+ ContextSubmenuTriggerDirective.prototype.handleSubMenuExit = function () {
580
+ var _this = this;
581
+ clearTimeout(this.opentimer);
582
+ if (this.menu) {
583
+ this.menu.isTriggerHovered.next(false);
584
+ }
585
+ this.closetimer = setTimeout(function () {
586
+ if (_this.menu) {
587
+ _this.menu.isTriggerHovered.next(false);
588
+ _this.contextMenuService.closeSubMenu(_this.menu.id);
589
+ _this.menu = undefined;
576
590
  }
577
- this.closetimer = setTimeout(function () {
578
- if (_this.menu) {
579
- _this.menu.isTriggerHovered.next(false);
580
- _this.contextMenuService.closeSubMenu(_this.menu.id);
581
- _this.menu = undefined;
582
- }
583
- _this.visible = false;
584
- }, this.hoverDelay);
585
- };
586
- /**
587
- * if overwritten make sure to clear timeouts
588
- */
591
+ _this.visible = false;
592
+ }, this.hoverDelay);
593
+ };
589
594
  /**
590
595
  * if overwritten make sure to clear timeouts
591
- * @return {?}
592
596
  */
593
- ContextSubmenuTriggerDirective.prototype.ngOnDestroy = /**
594
- * if overwritten make sure to clear timeouts
595
- * @return {?}
596
- */
597
- function () {
598
- clearTimeout(this.opentimer);
599
- clearTimeout(this.closetimer);
600
- };
601
- ContextSubmenuTriggerDirective.decorators = [
602
- { type: i0.Directive, args: [{ selector: '[contextSubmenuTrigger]' },] }
603
- ];
604
- /** @nocollapse */
605
- ContextSubmenuTriggerDirective.ctorParameters = function () {
606
- return [
607
- { type: ContextMenuService }
608
- ];
609
- };
610
- ContextSubmenuTriggerDirective.propDecorators = {
611
- hoverDelay: [{ type: i0.Input }],
612
- openDelay: [{ type: i0.Input }],
613
- contextSubmenuTrigger: [{ type: i0.Input }],
614
- menuContext: [{ type: i0.Input }],
615
- menuAction: [{ type: i0.Output }],
616
- menuClose: [{ type: i0.Output }],
617
- handleSubMenuClick: [{ type: i0.HostListener, args: ['click', ['$event', 'true'],] }],
618
- handleSubMenuEnter: [{ type: i0.HostListener, args: ['mouseover', ['$event'],] }],
619
- handleSubMenuExit: [{ type: i0.HostListener, args: ['mouseout', ['$event'],] }]
597
+ ContextSubmenuTriggerDirective.prototype.ngOnDestroy = function () {
598
+ clearTimeout(this.opentimer);
599
+ clearTimeout(this.closetimer);
620
600
  };
601
+ ContextSubmenuTriggerDirective.ctorParameters = function () { return [
602
+ { type: ContextMenuService }
603
+ ]; };
604
+ __decorate([
605
+ core.Input()
606
+ ], ContextSubmenuTriggerDirective.prototype, "hoverDelay", void 0);
607
+ __decorate([
608
+ core.Input()
609
+ ], ContextSubmenuTriggerDirective.prototype, "openDelay", void 0);
610
+ __decorate([
611
+ core.Input()
612
+ ], ContextSubmenuTriggerDirective.prototype, "contextSubmenuTrigger", void 0);
613
+ __decorate([
614
+ core.Input()
615
+ ], ContextSubmenuTriggerDirective.prototype, "menuContext", void 0);
616
+ __decorate([
617
+ core.Output()
618
+ ], ContextSubmenuTriggerDirective.prototype, "menuAction", void 0);
619
+ __decorate([
620
+ core.Output()
621
+ ], ContextSubmenuTriggerDirective.prototype, "menuClose", void 0);
622
+ __decorate([
623
+ core.HostListener('click', ['$event'])
624
+ ], ContextSubmenuTriggerDirective.prototype, "handleSubMenuClick", null);
625
+ __decorate([
626
+ core.HostListener('mouseover', ['$event'])
627
+ ], ContextSubmenuTriggerDirective.prototype, "handleSubMenuEnter", null);
628
+ __decorate([
629
+ core.HostListener('mouseout')
630
+ ], ContextSubmenuTriggerDirective.prototype, "handleSubMenuExit", null);
631
+ ContextSubmenuTriggerDirective = __decorate([
632
+ core.Directive({ selector: '[contextSubmenuTrigger]' })
633
+ ], ContextSubmenuTriggerDirective);
621
634
  return ContextSubmenuTriggerDirective;
622
635
  }());
623
636
 
624
- /**
625
- * @fileoverview added by tsickle
626
- * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
627
- */
628
637
  var MenuComponent = /** @class */ (function () {
629
638
  function MenuComponent(menuPackage, contextMenuService) {
630
639
  this.menuPackage = menuPackage;
631
640
  this.contextMenuService = contextMenuService;
632
- /**
633
- * State of the dialog animation.
634
- */
641
+ /** State of the dialog animation. */
635
642
  this._state = 'enter';
636
643
  this._animationDone = new rxjs.Subject();
637
- /**
638
- * set lazy to False if you do not have animations
639
- */
644
+ /** set lazy to False if you do not have animations */
640
645
  this.lazy = true;
641
646
  }
642
- /**
643
- * @return {?}
644
- */
645
- MenuComponent.prototype.handleMouseover = /**
646
- * @return {?}
647
- */
648
- function () {
649
- if (!this.menuPackage.menu.submenu) {
650
- return;
651
- }
652
- this.menuPackage.menu.isMenuHovered.next(true);
653
- clearTimeout(this.closetimer);
654
- };
655
- /**
656
- * @return {?}
657
- */
658
- MenuComponent.prototype.handleMouseleave = /**
659
- * @return {?}
660
- */
661
- function () {
662
- var _this = this;
663
- if (!this.menuPackage.menu.submenu) {
664
- return;
665
- }
666
- this.menuPackage.menu.isMenuHovered.next(false);
667
- this.closetimer = setTimeout(function () {
668
- _this.contextMenuService.closeSubMenu(_this.menuPackage.menu.id);
669
- }, 500);
670
- };
671
- /**
672
- * @param {?} $event
673
- * @return {?}
674
- */
675
- MenuComponent.prototype.handleWindowClick = /**
676
- * @param {?} $event
677
- * @return {?}
678
- */
679
- function ($event) {
680
- this.contextMenuService.checkOutsideClick($event);
681
- };
682
- /** Callback that is invoked when the menu animation completes. */
683
- /**
684
- * Callback that is invoked when the menu animation completes.
685
- * @param {?} event
686
- * @return {?}
687
- */
688
- MenuComponent.prototype._onAnimationDone = /**
689
- * Callback that is invoked when the menu animation completes.
690
- * @param {?} event
691
- * @return {?}
692
- */
693
- function (event) {
694
- this._animationDone.next(event);
695
- };
696
- MenuComponent.decorators = [
697
- { type: i0.Component, args: [{
698
- selector: 'app-menu',
699
- template: ""
700
- }] }
701
- ];
702
- /** @nocollapse */
703
- MenuComponent.ctorParameters = function () {
704
- return [
705
- { type: MenuPackage },
706
- { type: ContextMenuService }
707
- ];
647
+ MenuComponent.prototype.handleMouseover = function () {
648
+ if (!this.menuPackage.menu.submenu) {
649
+ return;
650
+ }
651
+ this.menuPackage.menu.isMenuHovered.next(true);
652
+ clearTimeout(this.closetimer);
653
+ };
654
+ MenuComponent.prototype.handleMouseleave = function () {
655
+ var _this = this;
656
+ if (!this.menuPackage.menu.submenu) {
657
+ return;
658
+ }
659
+ this.menuPackage.menu.isMenuHovered.next(false);
660
+ this.closetimer = setTimeout(function () {
661
+ _this.contextMenuService.closeSubMenu(_this.menuPackage.menu.id);
662
+ }, 500);
663
+ };
664
+ MenuComponent.prototype.handleWindowClick = function ($event) {
665
+ this.contextMenuService.checkOutsideClick($event);
708
666
  };
709
- MenuComponent.propDecorators = {
710
- handleMouseover: [{ type: i0.HostListener, args: ['mouseover',] }],
711
- handleMouseleave: [{ type: i0.HostListener, args: ['mouseleave',] }],
712
- handleWindowClick: [{ type: i0.HostListener, args: ['document:click', ['$event'],] }]
667
+ /** Callback that is invoked when the menu animation completes. */
668
+ MenuComponent.prototype._onAnimationDone = function (event) {
669
+ this._animationDone.next(event);
713
670
  };
671
+ MenuComponent.ctorParameters = function () { return [
672
+ { type: MenuPackage },
673
+ { type: ContextMenuService }
674
+ ]; };
675
+ __decorate([
676
+ core.HostListener('mouseover')
677
+ ], MenuComponent.prototype, "handleMouseover", null);
678
+ __decorate([
679
+ core.HostListener('mouseleave')
680
+ ], MenuComponent.prototype, "handleMouseleave", null);
681
+ __decorate([
682
+ core.HostListener('document:click', ['$event'])
683
+ ], MenuComponent.prototype, "handleWindowClick", null);
684
+ __decorate([
685
+ core.HostListener('@menu.done', ['$event'])
686
+ ], MenuComponent.prototype, "_onAnimationDone", null);
687
+ MenuComponent = __decorate([
688
+ core.Component({
689
+ selector: 'app-menu',
690
+ template: ""
691
+ })
692
+ ], MenuComponent);
714
693
  return MenuComponent;
715
694
  }());
716
695
 
717
- /**
718
- * @fileoverview added by tsickle
719
- * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
720
- */
721
696
  var ContextMenuModule = /** @class */ (function () {
722
697
  function ContextMenuModule() {
723
698
  }
724
- ContextMenuModule.decorators = [
725
- { type: i0.NgModule, args: [{
726
- declarations: [
727
- ContextMenuTriggerDirective,
728
- ContextSubmenuTriggerDirective,
729
- MenuComponent,
730
- ],
731
- exports: [ContextMenuTriggerDirective, ContextSubmenuTriggerDirective],
732
- imports: [portal.PortalModule, i1.OverlayModule],
733
- },] }
734
- ];
699
+ ContextMenuModule = __decorate([
700
+ core.NgModule({
701
+ declarations: [
702
+ ContextMenuTriggerDirective,
703
+ ContextSubmenuTriggerDirective,
704
+ MenuComponent,
705
+ ],
706
+ exports: [ContextMenuTriggerDirective, ContextSubmenuTriggerDirective],
707
+ imports: [portal.PortalModule, overlay.OverlayModule],
708
+ })
709
+ ], ContextMenuModule);
735
710
  return ContextMenuModule;
736
711
  }());
737
712
 
738
- /**
739
- * @fileoverview added by tsickle
740
- * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
741
- */
742
-
743
- /**
744
- * @fileoverview added by tsickle
745
- * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
746
- */
747
-
748
713
  exports.ContextMenuModule = ContextMenuModule;
749
- exports.MenuPackage = MenuPackage;
750
- exports.MenuInjector = MenuInjector;
751
- exports.MenuComponent = MenuComponent;
752
- exports.ContextSubmenuTriggerDirective = ContextSubmenuTriggerDirective;
753
- exports.ContextMenuTriggerDirective = ContextMenuTriggerDirective;
754
714
  exports.ContextMenuService = ContextMenuService;
715
+ exports.ContextMenuTriggerDirective = ContextMenuTriggerDirective;
716
+ exports.ContextSubmenuTriggerDirective = ContextSubmenuTriggerDirective;
717
+ exports.MenuComponent = MenuComponent;
718
+ exports.MenuInjector = MenuInjector;
719
+ exports.MenuPackage = MenuPackage;
755
720
 
756
721
  Object.defineProperty(exports, '__esModule', { value: true });
757
722
 
758
723
  })));
759
-
760
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3RybC1uZ3gtcmlnaHRjbGljay51bWQuanMubWFwIiwic291cmNlcyI6WyJub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwibmc6Ly9AY3RybC9uZ3gtcmlnaHRjbGljay9jb250ZXh0LW1lbnUtaW5qZWN0b3IudHMiLCJuZzovL0BjdHJsL25neC1yaWdodGNsaWNrL2NvbnRleHQtbWVudS5zZXJ2aWNlLnRzIiwibmc6Ly9AY3RybC9uZ3gtcmlnaHRjbGljay9jb250ZXh0LW1lbnUtdHJpZ2dlci5kaXJlY3RpdmUudHMiLCJuZzovL0BjdHJsL25neC1yaWdodGNsaWNrL2NvbnRleHQtc3VibWVudS10cmlnZ2VyLmRpcmVjdGl2ZS50cyIsIm5nOi8vQGN0cmwvbmd4LXJpZ2h0Y2xpY2svbWVudS5jb21wb25lbnQudHMiLCJuZzovL0BjdHJsL25neC1yaWdodGNsaWNrL2NvbnRleHQtbWVudS5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xyXG4gICAgcmVzdWx0LmRlZmF1bHQgPSBtb2Q7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG4iLCJpbXBvcnQgeyBJbmplY3RvciwgVHlwZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdEZsYWdzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFjdGl2ZUNvbnRleHRNZW51U3ViIH0gZnJvbSAnLi9jb250ZXh0LW1lbnUuc2VydmljZSc7XG5cbmV4cG9ydCBjbGFzcyBNZW51UGFja2FnZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtZW51OiBBY3RpdmVDb250ZXh0TWVudVN1YiwgcHVibGljIGNvbnRleHQ6IGFueSkge31cbn1cblxuZXhwb3J0IGNsYXNzIE1lbnVJbmplY3RvciBpbXBsZW1lbnRzIEluamVjdG9yIHtcbiAgX21lbnVDb250ZXh0OiBNZW51UGFja2FnZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfYWN0aXZlQ29udGV4dE1lbnU6IEFjdGl2ZUNvbnRleHRNZW51U3ViLFxuICAgIHByaXZhdGUgX3BhcmVudEluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGNvbnRleHQ6IGFueSxcbiAgKSB7XG4gICAgdGhpcy5fbWVudUNvbnRleHQgPSBuZXcgTWVudVBhY2thZ2UoX2FjdGl2ZUNvbnRleHRNZW51LCBjb250ZXh0KTtcbiAgfVxuXG4gIGdldDxUPih0b2tlbjogYW55LCBub3RGb3VuZFZhbHVlPzogVCwgZmxhZ3M/OiBJbmplY3RGbGFncyk6IFQgfCBNZW51UGFja2FnZSB7XG4gICAgaWYgKHRva2VuID09PSBNZW51UGFja2FnZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX21lbnVDb250ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcGFyZW50SW5qZWN0b3IuZ2V0PFQ+KHRva2VuLCBub3RGb3VuZFZhbHVlLCBmbGFncyk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIE92ZXJsYXksXG4gIE92ZXJsYXlSZWYsXG4gIFNjcm9sbFN0cmF0ZWd5T3B0aW9ucyxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBJbmplY3RvciwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBNZW51SW5qZWN0b3IgfSBmcm9tICcuL2NvbnRleHQtbWVudS1pbmplY3Rvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZlQ29udGV4dE1lbnVTdWIge1xuICBpZDogbnVtYmVyO1xuICBpc1RyaWdnZXJIb3ZlcmVkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzTWVudUhvdmVyZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgc3VibWVudTogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZlQ29udGV4dE1lbnUgZXh0ZW5kcyBBY3RpdmVDb250ZXh0TWVudVN1YiB7XG4gIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG4gIGNvbXBvbmVudDogYW55O1xuICBtZW51Q2xvc2U6IEV2ZW50RW1pdHRlcjx2b2lkPjtcbiAgbWVudUFjdGlvbjogRXZlbnRFbWl0dGVyPGFueT47XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ29udGV4dE1lbnVTZXJ2aWNlIHtcbiAgbWVudXM6IEFjdGl2ZUNvbnRleHRNZW51W10gPSBbXTtcbiAgaWQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHNjcm9sbFN0cmF0ZWd5OiBTY3JvbGxTdHJhdGVneU9wdGlvbnMsXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICApIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgdHJpZ2dlcmluZyBldmVudFxuICAgKiBAcGFyYW0gbWVudUNvbXBvbmVudCB0aGUgY29tcG9uZW50IHRvIGJlIHNob3duXG4gICAqIEBwYXJhbSBzdWJtZW51IGlzIGEgbWVudSB3aXRoaW4gYSBtZW51XG4gICAqIEBwYXJhbSBsZXZlbCBpZiBzdWJtZW51LCB3aGF0IGxldmVsXG4gICAqL1xuICBzaG93KFxuICAgICRldmVudDogTW91c2VFdmVudCxcbiAgICBtZW51Q29tcG9uZW50LFxuICAgIGNvbnRleHQ6IGFueSxcbiAgICBtZW51Q2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+LFxuICAgIG1lbnVBY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+LFxuICAgIHN1Ym1lbnUgPSBmYWxzZSxcbiAgICBsZXZlbD86IG51bWJlcixcbiAgKTogQWN0aXZlQ29udGV4dE1lbnUge1xuICAgIGxldCB0YXJnZXQ6IGFueTtcbiAgICBpZiAoIXN1Ym1lbnUpIHtcbiAgICAgIHRoaXMuY2xvc2VBbGwoKTtcbiAgICAgIHRhcmdldCA9IHtcbiAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0OiAoKTogQ2xpZW50UmVjdCA9PiAoe1xuICAgICAgICAgIGJvdHRvbTogJGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgIGxlZnQ6ICRldmVudC5jbGllbnRYLFxuICAgICAgICAgIHJpZ2h0OiAkZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICB0b3A6ICRldmVudC5jbGllbnRZLFxuICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNsb3NlIG90aGVyIHN1Ym1lbnVzXG4gICAgICB0aGlzLmNsb3NlQWxsKHVuZGVmaW5lZCwgbGV2ZWwpO1xuICAgICAgdGFyZ2V0ID0gJGV2ZW50LnRhcmdldDtcbiAgICB9XG4gICAgY29uc3QgZWwgPSBuZXcgRWxlbWVudFJlZih0YXJnZXQpO1xuICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlcbiAgICAgIC5wb3NpdGlvbigpXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyhlbClcbiAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKTtcblxuICAgIGlmICghc3VibWVudSkge1xuICAgICAgcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICBvcmlnaW5ZOiAnY2VudGVyJyxcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICBvdmVybGF5WTogJ2NlbnRlcicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICdjZW50ZXInLFxuICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgICBvdmVybGF5WTogJ2NlbnRlcicsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgICBjb25zdCB0OiBBY3RpdmVDb250ZXh0TWVudVN1YiA9IHtcbiAgICAgIHN1Ym1lbnUsXG4gICAgICBpZDogdGhpcy5pZCsrLFxuICAgICAgaXNNZW51SG92ZXJlZDogbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSksXG4gICAgICBpc1RyaWdnZXJIb3ZlcmVkOiBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKSxcbiAgICB9O1xuICAgIGNvbnN0IG1lbnVJbmplY3RvciA9IG5ldyBNZW51SW5qZWN0b3IodCwgdGhpcy5faW5qZWN0b3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGNvbXBvbmVudFBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoXG4gICAgICBtZW51Q29tcG9uZW50LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgbWVudUluamVjdG9yLFxuICAgICk7XG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgcG9zaXRpb25TdHJhdGVneSxcbiAgICAgIHBhbmVsQ2xhc3M6ICduZ3gtY29udGV4dG1lbnUnLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMuc2Nyb2xsU3RyYXRlZ3kuY2xvc2UoKSxcbiAgICB9KTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBvdmVybGF5UmVmLmF0dGFjaDxhbnk+KGNvbXBvbmVudFBvcnRhbCk7XG4gICAgY29uc3QgcmVzID0geyBvdmVybGF5UmVmLCBjb21wb25lbnQsIC4uLnQsIG1lbnVDbG9zZSwgbWVudUFjdGlvbiB9O1xuICAgIHRoaXMubWVudXMucHVzaChyZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgZ2V0Q3VycmVudExldmVsKCkge1xuICAgIHJldHVybiB0aGlzLm1lbnVzLmxlbmd0aDtcbiAgfVxuICBjbG9zZUFsbChjb250ZXh0PzogYW55LCBpZHggPSAwKSB7XG4gICAgZm9yIChsZXQgaW5kZXggPSBpZHg7IGluZGV4IDwgdGhpcy5tZW51cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IG1lbnUgPSB0aGlzLm1lbnVzW2luZGV4XTtcbiAgICAgIHRoaXMuZGVzdHJveU1lbnUobWVudSwgY29udGV4dCk7XG4gICAgfVxuICAgIHRoaXMubWVudXMuc3BsaWNlKGlkeCwgdGhpcy5tZW51cy5sZW5ndGgpO1xuICB9XG4gIGRlc3Ryb3lNZW51KG1lbnU6IEFjdGl2ZUNvbnRleHRNZW51LCBjb250ZXh0PzogYW55KSB7XG4gICAgbWVudS5jb21wb25lbnQuaW5zdGFuY2UuX3N0YXRlID0gJ2V4aXQnO1xuICAgIGlmIChtZW51LmNvbXBvbmVudC5pbnN0YW5jZS5sYXp5KSB7XG4gICAgICBtZW51LmNvbXBvbmVudC5pbnN0YW5jZS5fYW5pbWF0aW9uRG9uZVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBhbnkpID0+IGV2ZW50LnRvU3RhdGUgPT09ICdleGl0JyksXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBtZW51Lm92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICAgICAgbWVudS5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lbnUub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgIG1lbnUub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgfVxuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBtZW51Lm1lbnVBY3Rpb24ubmV4dChjb250ZXh0KTtcbiAgICB9XG4gICAgbWVudS5tZW51Q2xvc2UubmV4dCgpO1xuICB9XG4gIGNsb3NlKG1lbnU6IEFjdGl2ZUNvbnRleHRNZW51LCBtZW51SW5kZXg6IG51bWJlciwgY29udGV4dD86IGFueSkge1xuICAgIHRoaXMuZGVzdHJveU1lbnUobWVudSwgY29udGV4dCk7XG4gICAgdGhpcy5tZW51cy5zcGxpY2UobWVudUluZGV4LCAxKTtcbiAgfVxuICBjaGVja091dHNpZGVDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5tZW51cykge1xuICAgICAgY29uc3QgY2xpY2tlZEluc2lkZSA9IG0uY29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoXG4gICAgICAgICRldmVudC50YXJnZXQsXG4gICAgICApO1xuICAgICAgaWYgKGNsaWNrZWRJbnNpZGUpIHtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsb3NlQWxsKCk7XG4gIH1cbiAgY2xvc2VTdWJNZW51KGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBtZW51SW5kZXggPSB0aGlzLm1lbnVzLmZpbmRJbmRleChuID0+IG4uaWQgPT09IGlkKTtcbiAgICBpZiAobWVudUluZGV4ID09PSAtMSB8fCBtZW51SW5kZXggIT09IHRoaXMubWVudXMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBtYWtlIHN1cmUgd2UgY2FuIGNsb3NlIHRoZSBjdXJyZW50IG1lbnVcbiAgICBjb25zdCBtZW51ID0gdGhpcy5tZW51c1ttZW51SW5kZXhdO1xuICAgIGlmIChtZW51LmlzTWVudUhvdmVyZWQuZ2V0VmFsdWUoKSB8fCBtZW51LmlzVHJpZ2dlckhvdmVyZWQuZ2V0VmFsdWUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjbG9zZSBhbGwgbWVudXMgdXAgaWYgcG9zc2libGVcbiAgICBmb3IgKGxldCBpbmRleCA9IHRoaXMubWVudXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMTsgaW5kZXgtLSkge1xuICAgICAgY29uc3QgbSA9IHRoaXMubWVudXNbaW5kZXhdO1xuICAgICAgaWYgKCFtLmlzTWVudUhvdmVyZWQuZ2V0VmFsdWUoKSAmJiAhbS5pc1RyaWdnZXJIb3ZlcmVkLmdldFZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy5jbG9zZShtLCBpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDb250ZXh0TWVudVNlcnZpY2UsIEFjdGl2ZUNvbnRleHRNZW51IH0gZnJvbSAnLi9jb250ZXh0LW1lbnUuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjb250ZXh0TWVudVRyaWdnZXJdJyxcbiAgZXhwb3J0QXM6ICdjb250ZXh0TWVudVRyaWdnZXInLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0TWVudVRyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51VHJpZ2dlcjogYW55O1xuICBASW5wdXQoKSBtZW51Q29udGV4dDogYW55O1xuICBASW5wdXQoKSBob2xkVG9EaXNwbGF5ID0gMTAwMDtcbiAgQE91dHB1dCgpIG1lbnVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1lbnVDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgbWVudTogQWN0aXZlQ29udGV4dE1lbnU7XG4gIHZpc2libGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtb3VzZURvd25UaW1lb3V0SWQ6IGFueTtcbiAgcHJpdmF0ZSBzdWI6IFN1YnNjcmlwdGlvbjtcblxuICBASG9zdExpc3RlbmVyKCdjb250ZXh0bWVudScsIFsnJGV2ZW50J10pXG4gIGhhbmRsZU1lbnUoJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5tZW51ID0gdGhpcy5jb250ZXh0TWVudVNlcnZpY2Uuc2hvdyhcbiAgICAgICRldmVudCxcbiAgICAgIHRoaXMuY29udGV4dE1lbnVUcmlnZ2VyLFxuICAgICAgdGhpcy5tZW51Q29udGV4dCxcbiAgICAgIHRoaXMubWVudUNsb3NlLFxuICAgICAgdGhpcy5tZW51QWN0aW9uLFxuICAgICk7XG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBbJyRldmVudCddKVxuICBoYW5kbGVNb3VzZURvd24oJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5ob2xkVG9EaXNwbGF5ID49IDApIHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICRldmVudC5jbGllbnRZID0gJGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICAgICRldmVudC5jbGllbnRYID0gJGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcblxuICAgICAgdGhpcy5tb3VzZURvd25UaW1lb3V0SWQgPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiB0aGlzLmhhbmRsZU1lbnUoJGV2ZW50KSxcbiAgICAgICAgdGhpcy5ob2xkVG9EaXNwbGF5LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd0b3VjaGVuZCcpXG4gIGhhbmRsZU1vdXNlVXAoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubW91c2VEb3duVGltZW91dElkKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udGV4dE1lbnVTZXJ2aWNlOiBDb250ZXh0TWVudVNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdWIgPSB0aGlzLm1lbnVDbG9zZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy52aXNpYmxlID0gZmFsc2UpO1xuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEFjdGl2ZUNvbnRleHRNZW51LFxuICBDb250ZXh0TWVudVNlcnZpY2UsXG59IGZyb20gJy4vY29udGV4dC1tZW51LnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbY29udGV4dFN1Ym1lbnVUcmlnZ2VyXScgfSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0U3VibWVudVRyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBob3ZlckRlbGF5ID0gNTAwO1xuICBASW5wdXQoKSBvcGVuRGVsYXkgPSAyMDA7XG4gIEBJbnB1dCgpIGNvbnRleHRTdWJtZW51VHJpZ2dlcjogYW55O1xuICBASW5wdXQoKSBtZW51Q29udGV4dDogYW55O1xuICBAT3V0cHV0KCkgbWVudUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbWVudUNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBtZW51OiBBY3RpdmVDb250ZXh0TWVudTtcbiAgb3BlbnRpbWVyOiBhbnk7XG4gIGNsb3NldGltZXI6IGFueTtcbiAgdmlzaWJsZSA9IGZhbHNlO1xuICBsZXZlbCA9IDE7XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCcsICd0cnVlJ10pXG4gIGhhbmRsZVN1Yk1lbnVDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLm9wZW50aW1lcik7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2V0aW1lcik7XG4gICAgdGhpcy5tZW51ID0gdGhpcy5jb250ZXh0TWVudVNlcnZpY2Uuc2hvdyhcbiAgICAgICRldmVudCxcbiAgICAgIHRoaXMuY29udGV4dFN1Ym1lbnVUcmlnZ2VyLFxuICAgICAgdGhpcy5tZW51Q29udGV4dCxcbiAgICAgIHRoaXMubWVudUNsb3NlLFxuICAgICAgdGhpcy5tZW51QWN0aW9uLFxuICAgICAgdHJ1ZSxcbiAgICAgIHRoaXMubGV2ZWwsXG4gICAgKTtcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VvdmVyJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU3ViTWVudUVudGVyKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLm1lbnUpIHtcbiAgICAgIHRoaXMubWVudS5pc1RyaWdnZXJIb3ZlcmVkLm5leHQodHJ1ZSk7XG4gICAgfVxuICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NldGltZXIpO1xuICAgIHRoaXMub3BlbnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1lbnUgPSB0aGlzLmNvbnRleHRNZW51U2VydmljZS5zaG93KFxuICAgICAgICAkZXZlbnQsXG4gICAgICAgIHRoaXMuY29udGV4dFN1Ym1lbnVUcmlnZ2VyLFxuICAgICAgICB0aGlzLm1lbnVDb250ZXh0LFxuICAgICAgICB0aGlzLm1lbnVDbG9zZSxcbiAgICAgICAgdGhpcy5tZW51QWN0aW9uLFxuICAgICAgICB0cnVlLFxuICAgICAgICB0aGlzLmxldmVsLFxuICAgICAgKTtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICB0aGlzLm9wZW50aW1lciA9IG51bGw7XG4gICAgfSwgdGhpcy5vcGVuRGVsYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIHN1Ym1lbnUgaGlkZXMgYWZ0ZXIgY3Vyc29yIGhhcyBleGl0ZWQgZm9yIGEgcGVyaW9kIG9mIHRpbWVcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlb3V0JywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU3ViTWVudUV4aXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMub3BlbnRpbWVyKTtcbiAgICBpZiAodGhpcy5tZW51KSB7XG4gICAgICB0aGlzLm1lbnUuaXNUcmlnZ2VySG92ZXJlZC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5jbG9zZXRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tZW51KSB7XG4gICAgICAgIHRoaXMubWVudS5pc1RyaWdnZXJIb3ZlcmVkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51U2VydmljZS5jbG9zZVN1Yk1lbnUodGhpcy5tZW51LmlkKTtcbiAgICAgICAgdGhpcy5tZW51ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgfSwgdGhpcy5ob3ZlckRlbGF5KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udGV4dE1lbnVTZXJ2aWNlOiBDb250ZXh0TWVudVNlcnZpY2UpIHtcbiAgICAvLyBnZXQgY3VycmVudCBsZXZlbFxuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMubGV2ZWwgPSB0aGlzLmNvbnRleHRNZW51U2VydmljZS5nZXRDdXJyZW50TGV2ZWwoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGlmIG92ZXJ3cml0dGVuIG1ha2Ugc3VyZSB0byBjbGVhciB0aW1lb3V0c1xuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMub3BlbnRpbWVyKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zZXRpbWVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuaW1hdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5cbmltcG9ydCB7IENvbnRleHRNZW51U2VydmljZSB9IGZyb20gJy4vY29udGV4dC1tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWVudVBhY2thZ2UgfSBmcm9tICcuL2NvbnRleHQtbWVudS1pbmplY3Rvcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tZW51JyxcbiAgdGVtcGxhdGU6IGBgLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IHtcbiAgLyoqIFN0YXRlIG9mIHRoZSBkaWFsb2cgYW5pbWF0aW9uLiAqL1xuICBfc3RhdGU6ICd2b2lkJyB8ICdlbnRlcicgfCAnZXhpdCcgPSAnZW50ZXInO1xuICBfYW5pbWF0aW9uRG9uZSA9IG5ldyBTdWJqZWN0PEFuaW1hdGlvbkV2ZW50PigpO1xuICAvKiogc2V0IGxhenkgdG8gRmFsc2UgaWYgeW91IGRvIG5vdCBoYXZlIGFuaW1hdGlvbnMgKi9cbiAgbGF6eSA9IHRydWU7XG4gIGNsb3NldGltZXI6IGFueTtcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZW92ZXInKVxuICBoYW5kbGVNb3VzZW92ZXIoKSB7XG4gICAgaWYgKCF0aGlzLm1lbnVQYWNrYWdlLm1lbnUuc3VibWVudSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm1lbnVQYWNrYWdlLm1lbnUuaXNNZW51SG92ZXJlZC5uZXh0KHRydWUpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NldGltZXIpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gIGhhbmRsZU1vdXNlbGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLm1lbnVQYWNrYWdlLm1lbnUuc3VibWVudSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm1lbnVQYWNrYWdlLm1lbnUuaXNNZW51SG92ZXJlZC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmNsb3NldGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29udGV4dE1lbnVTZXJ2aWNlLmNsb3NlU3ViTWVudSh0aGlzLm1lbnVQYWNrYWdlLm1lbnUuaWQpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIGhhbmRsZVdpbmRvd0NsaWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29udGV4dE1lbnVTZXJ2aWNlLmNoZWNrT3V0c2lkZUNsaWNrKCRldmVudCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWVudVBhY2thZ2U6IE1lbnVQYWNrYWdlLFxuICAgIHB1YmxpYyBjb250ZXh0TWVudVNlcnZpY2U6IENvbnRleHRNZW51U2VydmljZSxcbiAgKSB7fVxuXG4gIC8qKiBDYWxsYmFjayB0aGF0IGlzIGludm9rZWQgd2hlbiB0aGUgbWVudSBhbmltYXRpb24gY29tcGxldGVzLiAqL1xuICBfb25BbmltYXRpb25Eb25lKGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIHRoaXMuX2FuaW1hdGlvbkRvbmUubmV4dChldmVudCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgUG9ydGFsTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5cbmltcG9ydCB7IENvbnRleHRNZW51VHJpZ2dlckRpcmVjdGl2ZSB9IGZyb20gJy4vY29udGV4dC1tZW51LXRyaWdnZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbnRleHRTdWJtZW51VHJpZ2dlckRpcmVjdGl2ZSB9IGZyb20gJy4vY29udGV4dC1zdWJtZW51LXRyaWdnZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IE1lbnVDb21wb25lbnQgfSBmcm9tICcuL21lbnUuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQ29udGV4dE1lbnVUcmlnZ2VyRGlyZWN0aXZlLFxuICAgIENvbnRleHRTdWJtZW51VHJpZ2dlckRpcmVjdGl2ZSxcbiAgICBNZW51Q29tcG9uZW50LFxuICBdLFxuICBleHBvcnRzOiBbQ29udGV4dE1lbnVUcmlnZ2VyRGlyZWN0aXZlLCBDb250ZXh0U3VibWVudVRyaWdnZXJEaXJlY3RpdmVdLFxuICBpbXBvcnRzOiBbUG9ydGFsTW9kdWxlLCBPdmVybGF5TW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dE1lbnVNb2R1bGUge31cbiJdLCJuYW1lcyI6WyJFbGVtZW50UmVmIiwiQmVoYXZpb3JTdWJqZWN0IiwiQ29tcG9uZW50UG9ydGFsIiwiZmlsdGVyIiwidGFrZSIsInRzbGliXzEuX192YWx1ZXMiLCJJbmplY3RhYmxlIiwiT3ZlcmxheSIsIlNjcm9sbFN0cmF0ZWd5T3B0aW9ucyIsIkluamVjdG9yIiwiRXZlbnRFbWl0dGVyIiwiRGlyZWN0aXZlIiwiSW5wdXQiLCJPdXRwdXQiLCJIb3N0TGlzdGVuZXIiLCJTdWJqZWN0IiwiQ29tcG9uZW50IiwiTmdNb2R1bGUiLCJQb3J0YWxNb2R1bGUiLCJPdmVybGF5TW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7SUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFjQSxJQWVPLElBQUksUUFBUSxHQUFHO1FBQ2xCLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLFNBQVMsUUFBUSxDQUFDLENBQUM7WUFDM0MsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pELENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQztvQkFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxD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
724
+ //# sourceMappingURL=ctrl-ngx-rightclick.umd.js.map