@simpleangularcontrols/sac-common 10.0.0-rc.14 → 10.0.0-rc.16

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.
@@ -197,12 +197,21 @@ export class SacTreeviewCommon extends SacBaseModelControl {
197
197
  onActionClicked(action) {
198
198
  this.actionclicked.emit(action);
199
199
  }
200
+ /**
201
+ * Method is called when Node in Tree is clicked
202
+ * @param node Selected Node
203
+ */
200
204
  onNodeClicked(node) {
201
205
  if (this.isDisabledState(node) || this.isSelectedState(node)) {
202
206
  this.invertExpandedState(node);
203
207
  }
204
208
  this.setSelectedState(node);
205
209
  }
210
+ /**
211
+ * Sets the hover state on a node
212
+ * @param node Node on which the status is set
213
+ * @param state Activate or deactivate HoverState
214
+ */
206
215
  setHoverState(node, state) {
207
216
  if (!node || !this.attrhoverstate) {
208
217
  return;
@@ -216,6 +225,10 @@ export class SacTreeviewCommon extends SacBaseModelControl {
216
225
  }
217
226
  delete node[this.attrhoverstate];
218
227
  }
228
+ /**
229
+ * Sets the selected state on a node
230
+ * @param node Node which is marked as Selected
231
+ */
219
232
  setSelectedState(node) {
220
233
  if (!node || !this.attrselected) {
221
234
  return;
@@ -224,8 +237,10 @@ export class SacTreeviewCommon extends SacBaseModelControl {
224
237
  this.data.forEach((rootNode) => this.resetSelectedState(rootNode));
225
238
  // set selected node as selected
226
239
  node[this.attrselected] = true;
240
+ // Extract ID from Node
241
+ const idValue = node[this.attrid];
227
242
  // Update ngModel
228
- this.setValue(node);
243
+ this.setValue(idValue);
229
244
  // Raise Selected Events
230
245
  this.selectednode.emit(node);
231
246
  if (!this.attrid) {
@@ -234,6 +249,11 @@ export class SacTreeviewCommon extends SacBaseModelControl {
234
249
  let id = this.getStringField(node, this.attrid);
235
250
  this.selected.emit(id);
236
251
  }
252
+ /**
253
+ * Validates the model state of the control
254
+ * @param c Control instance
255
+ * @returns Returns a validation error, if present. Otherwise, as Result is NULL
256
+ */
237
257
  validateData(c) {
238
258
  let error = null;
239
259
  if (this.isrequired) {
@@ -241,8 +261,47 @@ export class SacTreeviewCommon extends SacBaseModelControl {
241
261
  }
242
262
  return error;
243
263
  }
264
+ /**
265
+ * Saves the data from the model binding
266
+ * @param value Id of the selected node
267
+ */
268
+ writeValue(value) {
269
+ super.writeValue(value);
270
+ // Do not preselct item when tree is empty
271
+ if (!this.data) {
272
+ return;
273
+ }
274
+ this.data.forEach((root) => {
275
+ const result = this.findNodeById(root, value);
276
+ if (result !== null) {
277
+ this.setSelectedState(result);
278
+ }
279
+ });
280
+ }
244
281
  // #endregion Public Methods
245
282
  // #region Private Methods
283
+ /**
284
+ * Searches for a node based on the value in the ID attribute
285
+ * @param node Node
286
+ * @param value Value of the Id attribute
287
+ * @returns Returns the node if it is found. If not, NULL is returned.
288
+ */
289
+ findNodeById(node, value) {
290
+ if (!this.attrid || !node) {
291
+ return null;
292
+ }
293
+ if (node[this.attrid] === value) {
294
+ return node;
295
+ }
296
+ const children = this.getChildren(node);
297
+ for (let child of children) {
298
+ const result = this.findNodeById(child, value);
299
+ if (result !== null) {
300
+ return result;
301
+ }
302
+ }
303
+ return null;
304
+ }
246
305
  invertExpandedState(node) {
247
306
  if (!node || !this.attrexanded) {
248
307
  return;
@@ -300,8 +359,9 @@ SacTreeviewCommon.propDecorators = {
300
359
  selectednode: [{ type: Output }],
301
360
  showactionalways: [{ type: Input }],
302
361
  templateaction: [{ type: Input }],
362
+ templateicon: [{ type: Input }],
303
363
  templatelabel: [{ type: Input }],
304
364
  validationmessagerequired: [{ type: Input }],
305
365
  validationmessagesummaryrequired: [{ type: Input }]
306
366
  };
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXcuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVrdGUvc2ltcGxlYW5ndWxhcmNvbnRyb2xzLW5nMTAvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsiY29udHJvbHMvdHJlZXZpZXcvdHJlZXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEc7O0dBRUc7QUFFSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsbUJBQXdCO0lBaUozRCx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7T0FHRztJQUNILFlBQW9CLFVBQStCLEVBQUUsUUFBa0I7UUFDbkUsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQXpKaEMscUJBQXFCO1FBRXJCOztXQUVHO1FBRUksa0JBQWEsR0FBaUMsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFeEY7O1dBRUc7UUFFSSxpQkFBWSxHQUFHLFVBQVUsQ0FBQztRQUVqQzs7V0FFRztRQUNhLHNCQUFpQixHQUFHLFVBQVUsQ0FBQztRQUUvQzs7V0FFRztRQUVJLGdCQUFXLEdBQUcsVUFBVSxDQUFDO1FBRWhDOztXQUVHO1FBRUksbUJBQWMsR0FBRyxZQUFZLENBQUM7UUFFckM7O1dBRUc7UUFFSSxhQUFRLEdBQWtCLElBQUksQ0FBQztRQUV0Qzs7V0FFRztRQUVJLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBRXBDOztXQUVHO1FB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O1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQVM7UUFDaEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDN0IsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs7WUExWEosU0FBUzs7O1lBUEQsbUJBQW1CLHVCQWlLWCxJQUFJO1lBaEttQixRQUFROzs7NEJBYTNDLE1BQU07MkJBTU4sS0FBSztnQ0FNTCxLQUFLOzBCQUtMLEtBQUs7NkJBTUwsS0FBSzt1QkFNTCxLQUFLO3FCQU1MLEtBQUs7d0JBTUwsS0FBSzsyQkFNTCxLQUFLO3dCQU1MLE1BQU07bUJBTU4sS0FBSzsrQkFNTCxLQUFLOzZCQU1MLEtBQUs7dUJBTUwsTUFBTTs0QkFNTixLQUFLO3lCQU1MLEtBQUs7bUJBTUwsS0FBSzt1QkFNTCxNQUFNOzJCQU1OLE1BQU07K0JBTU4sS0FBSzs2QkFNTCxLQUFLOzRCQU1MLEtBQUs7d0NBTUwsS0FBSzsrQ0FLTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FjQmFzZU1vZGVsQ29udHJvbCB9IGZyb20gJy4uLy4uL2NvbW1vbi9iYXNlbW9kZWxjb250cm9sJztcclxuaW1wb3J0IHsgVHJlZXZpZXdBY3Rpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3RyZWV2aWV3YWN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi92YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgU2FjRm9ybUxheW91dENvbW1vbiB9IGZyb20gJy4uL2xheW91dC9mb3JtbGF5b3V0JztcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3QsIEluamVjdG9yLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKipcclxuICogQmFzaXMgS29tcG9uZW50ZSBmw7xyIFNhY1RyZWVWaWV3XHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGNsYXNzIFNhY1RyZWV2aWV3Q29tbW9uIGV4dGVuZHMgU2FjQmFzZU1vZGVsQ29udHJvbDxhbnk+IHtcclxuICAgIC8vICNyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgd2hlbiBBY3Rpb24gaXMgY2xpY2tlZCBvbiBOb2RlLiAgQW4gb2JqZWN0IG9mIHRoZSB0eXBlICdUcmVldmlld0FjdGlvbicgaXMgcmV0dXJuZWQuIEluIHRoZSBkZWZhdWx0IGNhc2UsICdhY3Rpb24nIGluIHRoaXMgb2JqZWN0IGlzIGFsd2F5cyB0aGUgdmFsdWUgJ2RlZmF1bHQnLiBUaGUgdmFsdWUgY2FuIGJlIGNoYW5nZWQgdmlhIHRoZSAndGVtcGxhdGVhY3Rpb24nLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBhY3Rpb25jbGlja2VkOiBFdmVudEVtaXR0ZXI8VHJlZXZpZXdBY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVldmlld0FjdGlvbj4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IG9uIHRoZSBkYXRhIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBjaGlsZHJlbiBvZiB0aGUgc3RydWN0dXJlIGVsZW1lbnQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ2NoaWxkcmVuJ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF0dHJjaGlsZHJlbiA9ICdjaGlsZHJlbic7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHRoZSBwcm9wZXJ0eSBvbiB0aGUgJ2RhdGEnIG9iamVjdCB3aXRoIHdoaWNoIHRoZSBhY3Rpb25zIGZvciBhIG5vZGUgY2FuIGJlIGRlYWN0aXZhdGVkLiBBICdkaXNhYmxlZCcgcHJvcGVydHkgaXMgdXNlZCBieSBkZWZhdWx0LlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYXR0cmRpc2FibGVhY3Rpb24gPSAnZGlzYWJsZWQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvcGVydHkgb24gdGhlICdkYXRhJyBvYmplY3QgdGhhdCBzdG9yZXMgdGhlIGV4cGFuZGVkIHN0YXRlLiBQcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4gRGVmYXVsdCBpcyAnZXhwYW5kZWQnXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXR0cmV4YW5kZWQgPSAnZXhwYW5kZWQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvcGVydHkgZm9yIHNhdmluZyB0aGUgSG92ZXJTdGF0ZSBvbiB0aGUgZmllbGQuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudCBvbiB0aGUgbm9kZSwgaXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGFuZCByZW1vdmVkIGFnYWluLiBUaGUgdmFsdWUgY2FuIHVzdWFsbHkgYmUgbGVmdCBhdCB0aGUgZGVmYXVsdCB2YWx1ZSB1bmxlc3MgdGhlcmUgaXMgYSBjb25mbGljdCB3aXRoIGEgcHJvcGVydHkgb24gdGhlIG5vZGUgdGhhdCBpcyByZXF1aXJlZCBmb3Igb3RoZXIgcHVycG9zZXMuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXR0cmhvdmVyc3RhdGUgPSAnaG92ZXJzdGF0ZSc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wZXJ0eSBvbiAnZGF0YScgb2JqZWN0LCB3aGljaCBjb250YWlucyB0aGUgaWNvbiBmb3IgdGhlIG5vZGUuIEJ5IGRlZmF1bHQsIHRoZSBwcm9wZXJ0eSBpcyBub3Qgc2V0LCB3aGljaCBoaWRlcyB0aGUgaWNvbiBpbiB0aGUgbm9kZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhdHRyaWNvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBwcm9wZXJ0eSBvbiB0aGUgJ2RhdGEnIG9iamVjdCBjb250YWlucyBhbiBJRCBvZiB0aGUgbm9kZS4gVGhlIGRlZmF1bHQgaXMgJ2lkJy4gSWYgdGhlIHByb3BlcnR5IGlzIHNldCB0byBOVUxMLCB0aGUgc2VsZWN0ZWRJZCBldmVudCBpcyBubyBsb25nZXIgdHJpZ2dlcmVkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF0dHJpZDogc3RyaW5nIHwgbnVsbCA9ICdpZCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wZXJ0eSBvbiAnZGF0YScgb2JqZWN0LCB3aGljaCBjb250YWlucyB0aGUgbGFiZWwgZm9yIHRoZSBub2RlLiBEZWZhdWx0IGlzICdsYWJlbCdcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhdHRybGFiZWwgPSAnbGFiZWwnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvcGVydHkgb24gJ2RhdGEnIG9iamVjdCwgd2hpY2ggZGVmaW5lcyB3aGV0aGVyIHRoZSBub2RlIGlzIHNlbGVjdGVkIG9yIG5vdC4gSXQgc2hvdWxkIGJlIGVuc3VyZWQgdGhhdCBvbmx5IDEgbm9kZSBoYXMgdGhlIHZhbHVlIGZvciBTZWxlY3RlZCBzZXQgdG8gdHJ1ZS4gRGVmYXVsdCBpcyAnc2VsZWN0ZWQnLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF0dHJzZWxlY3RlZCA9ICdzZWxlY3RlZCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzZWQuIFJldHVybnMgdGhlIG5vZGUgZWxlbWVudCBhcyBhIHBhcmFtZXRlclxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjb2xsYWJzZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcHJvcGVydHkgY29udGFpbnMgYW4gYXJyYXkgb2Ygbm9kZXMuIFRoZSBkYXRhIG11c3QgYWxyZWFkeSBtYXAgdGhlIHRyZWUgdmlhIGNoaWxkIHByb3BlcnRpZXMuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFjdGl2YXRlcyB0aGUgJ2V4cGFuZCcgYW5kICdjb2xsYWJzZScgZXZlbnQgZXZlbiBpZiBhIG5vZGUgaGFzIG5vIGNoaWxkcmVuLiBUaGlzIGlzIGhlbHBmdWwgaWYgbm9kZSBlbGVtZW50cyBhcmUgdG8gYmUgcmVsb2FkZWQgYXQgcnVudGltZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBlbmFibGVhc3luY2hsb2FkOiBib29sZWFuIHwgc3RyaW5nID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBY3RpdmF0ZXMgRWxsaXBzaXMgb24gdGhlIG5vZGUgbGFiZWxzXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZW5hYmxlZWxsaXBzaXMgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQuIFJldHVybnMgdGhlIG5vZGUgZWxlbWVudCBhcyBhIHBhcmFtZXRlclxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBleHBhbmRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgd2hldGhlciBhbiBpY29uIGZvciB0aGUgZXhwYW5kZWQvY29sbGFwc2VkIHN0YXR1cyBzaG91bGQgYmUgZGlzcGxheWVkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGV4cGFuZGVkc3RhdGU6IGJvb2xlYW4gfCBzdHJpbmcgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBub2RlIG11c3QgYmUgc2VsZWN0ZWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpc3JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOYW1lIG9mIHRoZSBUcmVlVmlldyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCB3aGVuIGEgbm9kZSBpcyBzZWxlY3RlZC4gUmV0dXJucyB0aGUgaWQgYXR0cmlidXRlIGFzIGEgcGFyYW1ldGVyLiBUaGUgZXZlbnQgaXMgbm90IHRyaWdnZXJlZCBpZiAnYXR0cmlkJyBpcyBub3Qgc2V0LlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50IHdoZW4gYSBub2RlIGlzIHNlbGVjdGVkLiBSZXR1cm5zIHRoZSBub2RlIGVsZW1lbnQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHNlbGVjdGVkbm9kZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgdGhhdCB0aGUgYWN0aW9uIHRlbXBsYXRlIGlzIGRpc3BsYXllZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBzZWxlY3RlZCBzdGF0ZS4gSWYgdGhlIHZhbHVlIGlzICd0cnVlJywgdGhlIGFjdGlvbiB0ZW1wbGF0ZSBpcyBkaXNwbGF5ZWQgZm9yIGV2ZXJ5IGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd2FjdGlvbmFsd2F5cztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEN1c3RvbSB0ZW1wbGF0ZSBmb3IgYWN0aW9ucyBwZXIgbm9kZS4gVGVtcGxhdGUgcGFyYW1ldGVycyBhcmU6ICdub2RlJ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHRlbXBsYXRlYWN0aW9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3VzdG9tIHRlbXBsYXRlIGZvciB0aGUgbGFiZWwgYXJlYSBwZXIgbm9kZS4gVGVtcGxhdGUgcGFyYW1ldGVycyBhcmU6ICdub2RlJyBhbmQgJ2xhYmVsJ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHRlbXBsYXRlbGFiZWw6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNvdXJjZSBLZXkgZsO8ciBWYWxpZGF0aW9uIE1lc3NhZ2UgUmVxdWlyZWQgYmVpIENvbnRyb2xcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRpb25tZXNzYWdlcmVxdWlyZWQ6IHN0cmluZyA9IHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yUmVxdWlyZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNvdXJjZSBLZXkgZsO8ciBWYWxpZGF0aW9uIE1lc3NhZ2UgUmVxdWlyZWQgaW4gVmFsaWRhdGlvbiBTdW1tYXJ5XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdmFsaWRhdGlvbm1lc3NhZ2VzdW1tYXJ5cmVxdWlyZWQ6IHN0cmluZyA9IHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yU3VtbWFyeVJlcXVpcmVkO1xyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAgIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIGluamVjdG9yIFNlcnZpY2UgSW5qZWN0b3JcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoQEhvc3QoKSBmb3JtbGF5b3V0OiBTYWNGb3JtTGF5b3V0Q29tbW9uLCBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBzdXBlcihmb3JtbGF5b3V0LCBpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXHJcblxyXG4gICAgcHVibGljIGdldCBpY29uQWN0aW9uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuVHJlZXZpZXdOb2RlQWN0aW9uSWNvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENTUyBpY29uIGZvciBmb2xkZXJzIGluIHRyZWUgdGhlcmUgYXJlIGNvbGxhYnNlZFxyXG4gICAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJDb2xsYWJzZWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5UcmVldmlld05vZGVDbG9zZWRJY29uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ1NTIGljb24gY2xhc3MgZm9yIGZvbGRlcnMgd2l0aG91dCBzdWJmb2xkZXJzXHJcbiAgICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaWNvbkZvbGRlckVtcHR5KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuVHJlZXZpZXdOb2RlRW1wdHlJY29uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ1NTIGljb24gZm9yIGZvbGRlcnMgaW4gdHJlZSB0aGVyZSBhcmUgZXhwYW5kZWRcclxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpY29uRm9sZGVyT3BlbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLlRyZWV2aWV3Tm9kZU9wZW5JY29uO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGEgY2VydGFpbiBzaXplLiBJcyByZXF1aXJlZCBmb3IgYSBGb3IgaW4gdGhlIFVJLCBhcyBBbmd1bGFyIGRvZXMgbm90IHN1cHBvcnQgY291bnRpbmcgbG9vcHNcclxuICAgICAqIEBwYXJhbSBzaXplIFNpemUgb2YgdGhlIGFycmF5XHJcbiAgICAgKiBAcmV0dXJucyBBcnJheVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY291bnQoc2l6ZTogbnVtYmVyKTogQXJyYXk8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgQXJyYXkoc2l6ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENoaWxkcmVuKG5vZGU6IGFueSk6IGFueVtdIHtcclxuICAgICAgICBpZiAoIW5vZGUgfHwgIXRoaXMuYXR0cmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjaGlsZHJlbiA9IG5vZGVbdGhpcy5hdHRyY2hpbGRyZW5dO1xyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3RyaW5nRmllbGQobm9kZTogYW55LCBmaWVsZG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgaWYgKCFub2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZmllbGRuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZhbHVlID0gbm9kZVtmaWVsZG5hbWVdO1xyXG5cclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzQ2hpbGRyZW4obm9kZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlZFN0YXRlKG5vZGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghbm9kZSB8fCAhdGhpcy5hdHRyZGlzYWJsZWFjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmFsdWUgPSBub2RlW3RoaXMuYXR0cmRpc2FibGVhY3Rpb25dO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gJ3RydWUnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0V4cGFuZGVkU3RhdGUobm9kZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFub2RlIHx8ICF0aGlzLmF0dHJleGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2YWx1ZSA9IG5vZGVbdGhpcy5hdHRyZXhhbmRlZF07XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZSc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzSG92ZXJTdGF0ZShub2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIW5vZGUgfHwgIXRoaXMuYXR0cmhvdmVyc3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZhbHVlID0gbm9kZVt0aGlzLmF0dHJob3ZlcnN0YXRlXTtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWxlY3RlZFN0YXRlKG5vZGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghbm9kZSB8fCAhdGhpcy5hdHRyc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZhbHVlID0gbm9kZVt0aGlzLmF0dHJzZWxlY3RlZF07XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZSc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgaXMgY2FsbGVkIGJ5IGNsaWNraW5nIGFuIGFjdGlvblxyXG4gICAgICogQHBhcmFtIGFjdGlvbiBhY3Rpb24gYW5kIG5vZGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uQWN0aW9uQ2xpY2tlZChhY3Rpb246IFRyZWV2aWV3QWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25jbGlja2VkLmVtaXQoYWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Ob2RlQ2xpY2tlZChub2RlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkU3RhdGUobm9kZSkgfHwgdGhpcy5pc1NlbGVjdGVkU3RhdGUobm9kZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnZlcnRFeHBhbmRlZFN0YXRlKG5vZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFN0YXRlKG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRIb3ZlclN0YXRlKG5vZGU6IGFueSwgc3RhdGU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIW5vZGUgfHwgIXRoaXMuYXR0cmhvdmVyc3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgIG5vZGVbdGhpcy5hdHRyaG92ZXJzdGF0ZV0gPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW5vZGUuaGFzT3duUHJvcGVydHkodGhpcy5hdHRyaG92ZXJzdGF0ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVsZXRlIG5vZGVbdGhpcy5hdHRyaG92ZXJzdGF0ZV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNlbGVjdGVkU3RhdGUobm9kZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFub2RlIHx8ICF0aGlzLmF0dHJzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXNldCBzZWxlY3RlZCBzdGF0ZSBvZiBhbnkgbm9kZVxyXG4gICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChyb290Tm9kZSkgPT4gdGhpcy5yZXNldFNlbGVjdGVkU3RhdGUocm9vdE5vZGUpKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHNlbGVjdGVkIG5vZGUgYXMgc2VsZWN0ZWRcclxuICAgICAgICBub2RlW3RoaXMuYXR0cnNlbGVjdGVkXSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBuZ01vZGVsXHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShub2RlKTtcclxuXHJcbiAgICAgICAgLy8gUmFpc2UgU2VsZWN0ZWQgRXZlbnRzXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZG5vZGUuZW1pdChub2RlKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmF0dHJpZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLmdldFN0cmluZ0ZpZWxkKG5vZGUsIHRoaXMuYXR0cmlkKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0ZURhdGEoYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgICAgIGxldCBlcnJvcjogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc3JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gVmFsaWRhdGlvbi5yZXF1aXJlZCh0aGlzLnZhbGlkYXRpb25tZXNzYWdlcmVxdWlyZWQsIHRoaXMudmFsaWRhdGlvbm1lc3NhZ2VzdW1tYXJ5cmVxdWlyZWQpKGMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG5cclxuICAgIHByaXZhdGUgaW52ZXJ0RXhwYW5kZWRTdGF0ZShub2RlOiBhbnkpIHtcclxuICAgICAgICBpZiAoIW5vZGUgfHwgIXRoaXMuYXR0cmV4YW5kZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSXRlbXMgd2l0aCBubyBjaGlsZHJlbiBjYW5ub3QgYmUgY29sbGFic2VkXHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc0NoaWxkcmVuKG5vZGUpICYmICEodGhpcy5lbmFibGVhc3luY2hsb2FkID09PSB0cnVlIHx8IHRoaXMuZW5hYmxlYXN5bmNobG9hZCA9PT0gJ3RydWUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmFsdWUgPSBub2RlW3RoaXMuYXR0cmV4YW5kZWRdO1xyXG5cclxuICAgICAgICBpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbGxhYnNlZC5lbWl0KG5vZGUpO1xyXG4gICAgICAgICAgICBub2RlW3RoaXMuYXR0cmV4YW5kZWRdID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5leHBhbmRlZC5lbWl0KG5vZGUpO1xyXG4gICAgICAgICAgICBub2RlW3RoaXMuYXR0cmV4YW5kZWRdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNldFNlbGVjdGVkU3RhdGUobm9kZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFub2RlIHx8ICF0aGlzLmF0dHJzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBub2RlW3RoaXMuYXR0cnNlbGVjdGVkXSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmdldENoaWxkcmVuKG5vZGUpLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFN0YXRlKGNoaWxkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG59XHJcbiJdfQ==
367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXcuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVrdGUvc2ltcGxlYW5ndWxhcmNvbnRyb2xzLW5nMTAvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsiY29udHJvbHMvdHJlZXZpZXcvdHJlZXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEc7O0dBRUc7QUFFSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsbUJBQXdCO0lBdUozRCx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7T0FHRztJQUNILFlBQW9CLFVBQStCLEVBQUUsUUFBa0I7UUFDbkUsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQS9KaEMscUJBQXFCO1FBRXJCOztXQUVHO1FBRUksa0JBQWEsR0FBaUMsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFeEY7O1dBRUc7UUFFSSxpQkFBWSxHQUFHLFVBQVUsQ0FBQztRQUVqQzs7V0FFRztRQUNhLHNCQUFpQixHQUFHLFVBQVUsQ0FBQztRQUUvQzs7V0FFRztRQUVJLGdCQUFXLEdBQUcsVUFBVSxDQUFDO1FBRWhDOztXQUVHO1FBRUksbUJBQWMsR0FBRyxZQUFZLENBQUM7UUFFckM7O1dBRUc7UUFFSSxhQUFRLEdBQWtCLElBQUksQ0FBQztRQUV0Qzs7V0FFRztRQUVJLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBRXBDOztXQUVHO1FB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QUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQVM7UUFDaEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDN0IsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs7WUFwY0osU0FBUzs7O1lBUEQsbUJBQW1CLHVCQXVLWCxJQUFJO1lBdEttQixRQUFROzs7NEJBYTNDLE1BQU07MkJBTU4sS0FBSztnQ0FNTCxLQUFLOzBCQUtMLEtBQUs7NkJBTUwsS0FBSzt1QkFNTCxLQUFLO3FCQU1MLEtBQUs7d0JBTUwsS0FBSzsyQkFNTCxLQUFLO3dCQU1MLE1BQU07bUJBTU4sS0FBSzsrQkFNTCxLQUFLOzZCQU1MLEtBQUs7dUJBTUwsTUFBTTs0QkFNTixLQUFLO3lCQU1MLEtBQUs7bUJBTUwsS0FBSzt1QkFNTCxNQUFNOzJCQU1OLE1BQU07K0JBTU4sS0FBSzs2QkFNTCxLQUFLOzJCQU1MLEtBQUs7NEJBTUwsS0FBSzt3Q0FNTCxLQUFLOytDQUtMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYWNCYXNlTW9kZWxDb250cm9sIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Jhc2Vtb2RlbGNvbnRyb2wnO1xyXG5pbXBvcnQgeyBUcmVldmlld0FjdGlvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdHJlZXZpZXdhY3Rpb24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL3ZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBTYWNGb3JtTGF5b3V0Q29tbW9uIH0gZnJvbSAnLi4vbGF5b3V0L2Zvcm1sYXlvdXQnO1xyXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSG9zdCwgSW5qZWN0b3IsIElucHV0LCBPdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8qKlxyXG4gKiBCYXNpcyBLb21wb25lbnRlIGbDvHIgU2FjVHJlZVZpZXdcclxuICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgY2xhc3MgU2FjVHJlZXZpZXdDb21tb24gZXh0ZW5kcyBTYWNCYXNlTW9kZWxDb250cm9sPGFueT4ge1xyXG4gICAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCB3aGVuIEFjdGlvbiBpcyBjbGlja2VkIG9uIE5vZGUuICBBbiBvYmplY3Qgb2YgdGhlIHR5cGUgJ1RyZWV2aWV3QWN0aW9uJyBpcyByZXR1cm5lZC4gSW4gdGhlIGRlZmF1bHQgY2FzZSwgJ2FjdGlvbicgaW4gdGhpcyBvYmplY3QgaXMgYWx3YXlzIHRoZSB2YWx1ZSAnZGVmYXVsdCcuIFRoZSB2YWx1ZSBjYW4gYmUgY2hhbmdlZCB2aWEgdGhlICd0ZW1wbGF0ZWFjdGlvbicuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGFjdGlvbmNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxUcmVldmlld0FjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWV2aWV3QWN0aW9uPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvcGVydHkgb24gdGhlIGRhdGEgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGNoaWxkcmVuIG9mIHRoZSBzdHJ1Y3R1cmUgZWxlbWVudC4gTXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnY2hpbGRyZW4nXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXR0cmNoaWxkcmVuID0gJ2NoaWxkcmVuJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgdGhlIHByb3BlcnR5IG9uIHRoZSAnZGF0YScgb2JqZWN0IHdpdGggd2hpY2ggdGhlIGFjdGlvbnMgZm9yIGEgbm9kZSBjYW4gYmUgZGVhY3RpdmF0ZWQuIEEgJ2Rpc2FibGVkJyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGRlZmF1bHQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBhdHRyZGlzYWJsZWFjdGlvbiA9ICdkaXNhYmxlZCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wZXJ0eSBvbiB0aGUgJ2RhdGEnIG9iamVjdCB0aGF0IHN0b3JlcyB0aGUgZXhwYW5kZWQgc3RhdGUuIFByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLiBEZWZhdWx0IGlzICdleHBhbmRlZCdcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhdHRyZXhhbmRlZCA9ICdleHBhbmRlZCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wZXJ0eSBmb3Igc2F2aW5nIHRoZSBIb3ZlclN0YXRlIG9uIHRoZSBmaWVsZC4gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBwcmVzZW50IG9uIHRoZSBub2RlLCBpdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIHJlbW92ZWQgYWdhaW4uIFRoZSB2YWx1ZSBjYW4gdXN1YWxseSBiZSBsZWZ0IGF0IHRoZSBkZWZhdWx0IHZhbHVlIHVubGVzcyB0aGVyZSBpcyBhIGNvbmZsaWN0IHdpdGggYSBwcm9wZXJ0eSBvbiB0aGUgbm9kZSB0aGF0IGlzIHJlcXVpcmVkIGZvciBvdGhlciBwdXJwb3Nlcy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhdHRyaG92ZXJzdGF0ZSA9ICdob3ZlcnN0YXRlJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IG9uICdkYXRhJyBvYmplY3QsIHdoaWNoIGNvbnRhaW5zIHRoZSBpY29uIGZvciB0aGUgbm9kZS4gQnkgZGVmYXVsdCwgdGhlIHByb3BlcnR5IGlzIG5vdCBzZXQsIHdoaWNoIGhpZGVzIHRoZSBpY29uIGluIHRoZSBub2RlLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF0dHJpY29uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIHByb3BlcnR5IG9uIHRoZSAnZGF0YScgb2JqZWN0IGNvbnRhaW5zIGFuIElEIG9mIHRoZSBub2RlLiBUaGUgZGVmYXVsdCBpcyAnaWQnLiBJZiB0aGUgcHJvcGVydHkgaXMgc2V0IHRvIE5VTEwsIHRoZSBzZWxlY3RlZElkIGV2ZW50IGlzIG5vIGxvbmdlciB0cmlnZ2VyZWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXR0cmlkOiBzdHJpbmcgfCBudWxsID0gJ2lkJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IG9uICdkYXRhJyBvYmplY3QsIHdoaWNoIGNvbnRhaW5zIHRoZSBsYWJlbCBmb3IgdGhlIG5vZGUuIERlZmF1bHQgaXMgJ2xhYmVsJ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF0dHJsYWJlbCA9ICdsYWJlbCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wZXJ0eSBvbiAnZGF0YScgb2JqZWN0LCB3aGljaCBkZWZpbmVzIHdoZXRoZXIgdGhlIG5vZGUgaXMgc2VsZWN0ZWQgb3Igbm90LiBJdCBzaG91bGQgYmUgZW5zdXJlZCB0aGF0IG9ubHkgMSBub2RlIGhhcyB0aGUgdmFsdWUgZm9yIFNlbGVjdGVkIHNldCB0byB0cnVlLiBEZWZhdWx0IGlzICdzZWxlY3RlZCcuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXR0cnNlbGVjdGVkID0gJ3NlbGVjdGVkJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50IHdoZW4gYSBub2RlIGlzIGNvbGxhcHNlZC4gUmV0dXJucyB0aGUgbm9kZSBlbGVtZW50IGFzIGEgcGFyYW1ldGVyXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGNvbGxhYnNlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwcm9wZXJ0eSBjb250YWlucyBhbiBhcnJheSBvZiBub2Rlcy4gVGhlIGRhdGEgbXVzdCBhbHJlYWR5IG1hcCB0aGUgdHJlZSB2aWEgY2hpbGQgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWN0aXZhdGVzIHRoZSAnZXhwYW5kJyBhbmQgJ2NvbGxhYnNlJyBldmVudCBldmVuIGlmIGEgbm9kZSBoYXMgbm8gY2hpbGRyZW4uIFRoaXMgaXMgaGVscGZ1bCBpZiBub2RlIGVsZW1lbnRzIGFyZSB0byBiZSByZWxvYWRlZCBhdCBydW50aW1lLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGVuYWJsZWFzeW5jaGxvYWQ6IGJvb2xlYW4gfCBzdHJpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFjdGl2YXRlcyBFbGxpcHNpcyBvbiB0aGUgbm9kZSBsYWJlbHNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBlbmFibGVlbGxpcHNpcyA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCB3aGVuIGEgbm9kZSBpcyBleHBhbmRlZC4gUmV0dXJucyB0aGUgbm9kZSBlbGVtZW50IGFzIGEgcGFyYW1ldGVyXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGV4cGFuZGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVmaW5lcyB3aGV0aGVyIGFuIGljb24gZm9yIHRoZSBleHBhbmRlZC9jb2xsYXBzZWQgc3RhdHVzIHNob3VsZCBiZSBkaXNwbGF5ZWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZXhwYW5kZWRzdGF0ZTogYm9vbGVhbiB8IHN0cmluZyA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIG5vZGUgbXVzdCBiZSBzZWxlY3RlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGlzcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hbWUgb2YgdGhlIFRyZWVWaWV3IGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50IHdoZW4gYSBub2RlIGlzIHNlbGVjdGVkLiBSZXR1cm5zIHRoZSBpZCBhdHRyaWJ1dGUgYXMgYSBwYXJhbWV0ZXIuIFRoZSBldmVudCBpcyBub3QgdHJpZ2dlcmVkIGlmICdhdHRyaWQnIGlzIG5vdCBzZXQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgd2hlbiBhIG5vZGUgaXMgc2VsZWN0ZWQuIFJldHVybnMgdGhlIG5vZGUgZWxlbWVudCBhcyBhIHBhcmFtZXRlci5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRub2RlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVmaW5lcyB0aGF0IHRoZSBhY3Rpb24gdGVtcGxhdGUgaXMgZGlzcGxheWVkIGluZGVwZW5kZW50bHkgb2YgdGhlIHNlbGVjdGVkIHN0YXRlLiBJZiB0aGUgdmFsdWUgaXMgJ3RydWUnLCB0aGUgYWN0aW9uIHRlbXBsYXRlIGlzIGRpc3BsYXllZCBmb3IgZXZlcnkgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93YWN0aW9uYWx3YXlzO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3VzdG9tIHRlbXBsYXRlIGZvciBhY3Rpb25zIHBlciBub2RlLiBUZW1wbGF0ZSBwYXJhbWV0ZXJzIGFyZTogJ25vZGUnXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdGVtcGxhdGVhY3Rpb246IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDdXN0b20gdGVtcGxhdGUgZm9yIGljb24gcGVyIG5vZGUuIFRlbXBsYXRlIHBhcmFtZXRlcnMgYXJlOiAnbm9kZSdcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0ZW1wbGF0ZWljb246IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDdXN0b20gdGVtcGxhdGUgZm9yIHRoZSBsYWJlbCBhcmVhIHBlciBub2RlLiBUZW1wbGF0ZSBwYXJhbWV0ZXJzIGFyZTogJ25vZGUnIGFuZCAnbGFiZWwnXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdGVtcGxhdGVsYWJlbDogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc291cmNlIEtleSBmw7xyIFZhbGlkYXRpb24gTWVzc2FnZSBSZXF1aXJlZCBiZWkgQ29udHJvbFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgdmFsaWRhdGlvbm1lc3NhZ2VyZXF1aXJlZDogc3RyaW5nID0gdGhpcy52YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JSZXF1aXJlZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc291cmNlIEtleSBmw7xyIFZhbGlkYXRpb24gTWVzc2FnZSBSZXF1aXJlZCBpbiBWYWxpZGF0aW9uIFN1bW1hcnlcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB2YWxpZGF0aW9ubWVzc2FnZXN1bW1hcnlyZXF1aXJlZDogc3RyaW5nID0gdGhpcy52YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5UmVxdWlyZWQ7XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgU2VydmljZSBJbmplY3RvclxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIGZvcm1sYXlvdXQ6IFNhY0Zvcm1MYXlvdXRDb21tb24sIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGZvcm1sYXlvdXQsIGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAgIC8vICNyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgICBwdWJsaWMgZ2V0IGljb25BY3Rpb24oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5UcmVldmlld05vZGVBY3Rpb25JY29uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ1NTIGljb24gZm9yIGZvbGRlcnMgaW4gdHJlZSB0aGVyZSBhcmUgY29sbGFic2VkXHJcbiAgICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaWNvbkZvbGRlckNvbGxhYnNlZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLlRyZWV2aWV3Tm9kZUNsb3NlZEljb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDU1MgaWNvbiBjbGFzcyBmb3IgZm9sZGVycyB3aXRob3V0IHN1YmZvbGRlcnNcclxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpY29uRm9sZGVyRW1wdHkoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5UcmVldmlld05vZGVFbXB0eUljb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDU1MgaWNvbiBmb3IgZm9sZGVycyBpbiB0cmVlIHRoZXJlIGFyZSBleHBhbmRlZFxyXG4gICAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJPcGVuKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuVHJlZXZpZXdOb2RlT3Blbkljb247XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAgIC8vICNyZWdpb24gUHVibGljIE1ldGhvZHNcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgYSBjZXJ0YWluIHNpemUuIElzIHJlcXVpcmVkIGZvciBhIEZvciBpbiB0aGUgVUksIGFzIEFuZ3VsYXIgZG9lcyBub3Qgc3VwcG9ydCBjb3VudGluZyBsb29wc1xyXG4gICAgICogQHBhcmFtIHNpemUgU2l6ZSBvZiB0aGUgYXJyYXlcclxuICAgICAqIEByZXR1cm5zIEFycmF5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb3VudChzaXplOiBudW1iZXIpOiBBcnJheTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheShzaXplKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW4obm9kZTogYW55KTogYW55W10ge1xyXG4gICAgICAgIGlmICghbm9kZSB8fCAhdGhpcy5hdHRyY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gbm9kZVt0aGlzLmF0dHJjaGlsZHJlbl07XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTdHJpbmdGaWVsZChub2RlOiBhbnksIGZpZWxkbmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBpZiAoIW5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFmaWVsZG5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmFsdWUgPSBub2RlW2ZpZWxkbmFtZV07XHJcblxyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNDaGlsZHJlbihub2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDaGlsZHJlbihub2RlKS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0Rpc2FibGVkU3RhdGUobm9kZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFub2RlIHx8ICF0aGlzLmF0dHJkaXNhYmxlYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2YWx1ZSA9IG5vZGVbdGhpcy5hdHRyZGlzYWJsZWFjdGlvbl07XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZSc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRXhwYW5kZWRTdGF0ZShub2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIW5vZGUgfHwgIXRoaXMuYXR0cmV4YW5kZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZhbHVlID0gbm9kZVt0aGlzLmF0dHJleGFuZGVkXTtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNIb3ZlclN0YXRlKG5vZGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghbm9kZSB8fCAhdGhpcy5hdHRyaG92ZXJzdGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmFsdWUgPSBub2RlW3RoaXMuYXR0cmhvdmVyc3RhdGVdO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gJ3RydWUnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdGVkU3RhdGUobm9kZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFub2RlIHx8ICF0aGlzLmF0dHJzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmFsdWUgPSBub2RlW3RoaXMuYXR0cnNlbGVjdGVkXTtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCBpcyBjYWxsZWQgYnkgY2xpY2tpbmcgYW4gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uIGFjdGlvbiBhbmQgbm9kZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25BY3Rpb25DbGlja2VkKGFjdGlvbjogVHJlZXZpZXdBY3Rpb24pIHtcclxuICAgICAgICB0aGlzLmFjdGlvbmNsaWNrZWQuZW1pdChhY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIGlzIGNhbGxlZCB3aGVuIE5vZGUgaW4gVHJlZSBpcyBjbGlja2VkXHJcbiAgICAgKiBAcGFyYW0gbm9kZSBTZWxlY3RlZCBOb2RlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbk5vZGVDbGlja2VkKG5vZGU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWRTdGF0ZShub2RlKSB8fCB0aGlzLmlzU2VsZWN0ZWRTdGF0ZShub2RlKSkge1xyXG4gICAgICAgICAgICB0aGlzLmludmVydEV4cGFuZGVkU3RhdGUobm9kZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkU3RhdGUobm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBob3ZlciBzdGF0ZSBvbiBhIG5vZGVcclxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgb24gd2hpY2ggdGhlIHN0YXR1cyBpcyBzZXRcclxuICAgICAqIEBwYXJhbSBzdGF0ZSBBY3RpdmF0ZSBvciBkZWFjdGl2YXRlIEhvdmVyU3RhdGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEhvdmVyU3RhdGUobm9kZTogYW55LCBzdGF0ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghbm9kZSB8fCAhdGhpcy5hdHRyaG92ZXJzdGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgbm9kZVt0aGlzLmF0dHJob3ZlcnN0YXRlXSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbm9kZS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmF0dHJob3ZlcnN0YXRlKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWxldGUgbm9kZVt0aGlzLmF0dHJob3ZlcnN0YXRlXTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHNlbGVjdGVkIHN0YXRlIG9uIGEgbm9kZVxyXG4gICAgICogQHBhcmFtIG5vZGUgTm9kZSB3aGljaCBpcyBtYXJrZWQgYXMgU2VsZWN0ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFNlbGVjdGVkU3RhdGUobm9kZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFub2RlIHx8ICF0aGlzLmF0dHJzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXNldCBzZWxlY3RlZCBzdGF0ZSBvZiBhbnkgbm9kZVxyXG4gICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChyb290Tm9kZSkgPT4gdGhpcy5yZXNldFNlbGVjdGVkU3RhdGUocm9vdE5vZGUpKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHNlbGVjdGVkIG5vZGUgYXMgc2VsZWN0ZWRcclxuICAgICAgICBub2RlW3RoaXMuYXR0cnNlbGVjdGVkXSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIEV4dHJhY3QgSUQgZnJvbSBOb2RlXHJcbiAgICAgICAgY29uc3QgaWRWYWx1ZSA9IG5vZGVbdGhpcy5hdHRyaWRdO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgbmdNb2RlbFxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoaWRWYWx1ZSk7XHJcblxyXG4gICAgICAgIC8vIFJhaXNlIFNlbGVjdGVkIEV2ZW50c1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRub2RlLmVtaXQobm9kZSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5hdHRyaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy5nZXRTdHJpbmdGaWVsZChub2RlLCB0aGlzLmF0dHJpZCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KGlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRlcyB0aGUgbW9kZWwgc3RhdGUgb2YgdGhlIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBjIENvbnRyb2wgaW5zdGFuY2VcclxuICAgICAqIEByZXR1cm5zIFJldHVybnMgYSB2YWxpZGF0aW9uIGVycm9yLCBpZiBwcmVzZW50LiBPdGhlcndpc2UsIGFzIFJlc3VsdCBpcyBOVUxMXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB2YWxpZGF0ZURhdGEoYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgICAgIGxldCBlcnJvcjogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc3JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gVmFsaWRhdGlvbi5yZXF1aXJlZCh0aGlzLnZhbGlkYXRpb25tZXNzYWdlcmVxdWlyZWQsIHRoaXMudmFsaWRhdGlvbm1lc3NhZ2VzdW1tYXJ5cmVxdWlyZWQpKGMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIGRhdGEgZnJvbSB0aGUgbW9kZWwgYmluZGluZ1xyXG4gICAgICogQHBhcmFtIHZhbHVlIElkIG9mIHRoZSBzZWxlY3RlZCBub2RlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgLy8gRG8gbm90IHByZXNlbGN0IGl0ZW0gd2hlbiB0cmVlIGlzIGVtcHR5XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKHJvb3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kTm9kZUJ5SWQocm9vdCwgdmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFN0YXRlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlYXJjaGVzIGZvciBhIG5vZGUgYmFzZWQgb24gdGhlIHZhbHVlIGluIHRoZSBJRCBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSBub2RlIE5vZGVcclxuICAgICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0aGUgSWQgYXR0cmlidXRlXHJcbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBub2RlIGlmIGl0IGlzIGZvdW5kLiBJZiBub3QsIE5VTEwgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZmluZE5vZGVCeUlkKG5vZGU6IGFueSwgdmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF0dHJpZCB8fCAhbm9kZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChub2RlW3RoaXMuYXR0cmlkXSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4obm9kZSk7XHJcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kTm9kZUJ5SWQoY2hpbGQsIHZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbnZlcnRFeHBhbmRlZFN0YXRlKG5vZGU6IGFueSkge1xyXG4gICAgICAgIGlmICghbm9kZSB8fCAhdGhpcy5hdHRyZXhhbmRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJdGVtcyB3aXRoIG5vIGNoaWxkcmVuIGNhbm5vdCBiZSBjb2xsYWJzZWRcclxuICAgICAgICBpZiAoIXRoaXMuaGFzQ2hpbGRyZW4obm9kZSkgJiYgISh0aGlzLmVuYWJsZWFzeW5jaGxvYWQgPT09IHRydWUgfHwgdGhpcy5lbmFibGVhc3luY2hsb2FkID09PSAndHJ1ZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2YWx1ZSA9IG5vZGVbdGhpcy5hdHRyZXhhbmRlZF07XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGFic2VkLmVtaXQobm9kZSk7XHJcbiAgICAgICAgICAgIG5vZGVbdGhpcy5hdHRyZXhhbmRlZF0gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkLmVtaXQobm9kZSk7XHJcbiAgICAgICAgICAgIG5vZGVbdGhpcy5hdHRyZXhhbmRlZF0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0U2VsZWN0ZWRTdGF0ZShub2RlOiBhbnkpIHtcclxuICAgICAgICBpZiAoIW5vZGUgfHwgIXRoaXMuYXR0cnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG5vZGVbdGhpcy5hdHRyc2VsZWN0ZWRdID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4obm9kZSkuZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkU3RhdGUoY2hpbGQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcbn1cclxuIl19
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVNhY1VwbG9hZEV2ZW50Q29tcGxldGVTdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWt0ZS9zaW1wbGVhbmd1bGFyY29udHJvbHMtbmcxMC9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJpbnRlcmZhY2VzL0lTYWNVcGxvYWRFdmVudENvbXBsZXRlU3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSVNhY1VwbG9hZEV2ZW50Q29tcGxldGVTdGF0ZSB7XHJcbiAgICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBzaXplOiBudW1iZXI7XHJcbiAgICB1cGxvYWRpZDogc3RyaW5nO1xyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview This file was generated by the Angular template compiler. Do not edit.
3
+ *
4
+ * @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes,extraRequire}
5
+ * tslint:disable
6
+ */
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVNhY1VwbG9hZEV2ZW50Q29tcGxldGVTdGF0ZS5uZ2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVrdGUvc2ltcGxlYW5ndWxhcmNvbnRyb2xzLW5nMTAvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsiaW50ZXJmYWNlcy9JU2FjVXBsb2FkRXZlbnRDb21wbGV0ZVN0YXRlLm5nZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaTAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pMC5Db21wb25lbnRGYWN0b3J5O1xuIl19
@@ -7801,12 +7801,21 @@ class SacTreeviewCommon extends SacBaseModelControl {
7801
7801
  onActionClicked(action) {
7802
7802
  this.actionclicked.emit(action);
7803
7803
  }
7804
+ /**
7805
+ * Method is called when Node in Tree is clicked
7806
+ * @param node Selected Node
7807
+ */
7804
7808
  onNodeClicked(node) {
7805
7809
  if (this.isDisabledState(node) || this.isSelectedState(node)) {
7806
7810
  this.invertExpandedState(node);
7807
7811
  }
7808
7812
  this.setSelectedState(node);
7809
7813
  }
7814
+ /**
7815
+ * Sets the hover state on a node
7816
+ * @param node Node on which the status is set
7817
+ * @param state Activate or deactivate HoverState
7818
+ */
7810
7819
  setHoverState(node, state) {
7811
7820
  if (!node || !this.attrhoverstate) {
7812
7821
  return;
@@ -7820,6 +7829,10 @@ class SacTreeviewCommon extends SacBaseModelControl {
7820
7829
  }
7821
7830
  delete node[this.attrhoverstate];
7822
7831
  }
7832
+ /**
7833
+ * Sets the selected state on a node
7834
+ * @param node Node which is marked as Selected
7835
+ */
7823
7836
  setSelectedState(node) {
7824
7837
  if (!node || !this.attrselected) {
7825
7838
  return;
@@ -7828,8 +7841,10 @@ class SacTreeviewCommon extends SacBaseModelControl {
7828
7841
  this.data.forEach((rootNode) => this.resetSelectedState(rootNode));
7829
7842
  // set selected node as selected
7830
7843
  node[this.attrselected] = true;
7844
+ // Extract ID from Node
7845
+ const idValue = node[this.attrid];
7831
7846
  // Update ngModel
7832
- this.setValue(node);
7847
+ this.setValue(idValue);
7833
7848
  // Raise Selected Events
7834
7849
  this.selectednode.emit(node);
7835
7850
  if (!this.attrid) {
@@ -7838,6 +7853,11 @@ class SacTreeviewCommon extends SacBaseModelControl {
7838
7853
  let id = this.getStringField(node, this.attrid);
7839
7854
  this.selected.emit(id);
7840
7855
  }
7856
+ /**
7857
+ * Validates the model state of the control
7858
+ * @param c Control instance
7859
+ * @returns Returns a validation error, if present. Otherwise, as Result is NULL
7860
+ */
7841
7861
  validateData(c) {
7842
7862
  let error = null;
7843
7863
  if (this.isrequired) {
@@ -7845,8 +7865,47 @@ class SacTreeviewCommon extends SacBaseModelControl {
7845
7865
  }
7846
7866
  return error;
7847
7867
  }
7868
+ /**
7869
+ * Saves the data from the model binding
7870
+ * @param value Id of the selected node
7871
+ */
7872
+ writeValue(value) {
7873
+ super.writeValue(value);
7874
+ // Do not preselct item when tree is empty
7875
+ if (!this.data) {
7876
+ return;
7877
+ }
7878
+ this.data.forEach((root) => {
7879
+ const result = this.findNodeById(root, value);
7880
+ if (result !== null) {
7881
+ this.setSelectedState(result);
7882
+ }
7883
+ });
7884
+ }
7848
7885
  // #endregion Public Methods
7849
7886
  // #region Private Methods
7887
+ /**
7888
+ * Searches for a node based on the value in the ID attribute
7889
+ * @param node Node
7890
+ * @param value Value of the Id attribute
7891
+ * @returns Returns the node if it is found. If not, NULL is returned.
7892
+ */
7893
+ findNodeById(node, value) {
7894
+ if (!this.attrid || !node) {
7895
+ return null;
7896
+ }
7897
+ if (node[this.attrid] === value) {
7898
+ return node;
7899
+ }
7900
+ const children = this.getChildren(node);
7901
+ for (let child of children) {
7902
+ const result = this.findNodeById(child, value);
7903
+ if (result !== null) {
7904
+ return result;
7905
+ }
7906
+ }
7907
+ return null;
7908
+ }
7850
7909
  invertExpandedState(node) {
7851
7910
  if (!node || !this.attrexanded) {
7852
7911
  return;
@@ -7904,6 +7963,7 @@ SacTreeviewCommon.propDecorators = {
7904
7963
  selectednode: [{ type: Output }],
7905
7964
  showactionalways: [{ type: Input }],
7906
7965
  templateaction: [{ type: Input }],
7966
+ templateicon: [{ type: Input }],
7907
7967
  templatelabel: [{ type: Input }],
7908
7968
  validationmessagerequired: [{ type: Input }],
7909
7969
  validationmessagesummaryrequired: [{ type: Input }]
@@ -8147,7 +8207,7 @@ SacTooltipCommon.propDecorators = {
8147
8207
  tooltip: [{ type: ViewChild, args: ['tooltip', { static: false },] }]
8148
8208
  };
8149
8209
 
8150
- // #region Classes
8210
+ // #region Exported Classes
8151
8211
  /**
8152
8212
  * Base Klasse für Uploader Control
8153
8213
  */
@@ -8165,6 +8225,7 @@ class SacUploadBase extends SacBaseModelControl {
8165
8225
  super(formlayout, injector);
8166
8226
  this.renderer = renderer;
8167
8227
  this.ngZone = ngZone;
8228
+ // #region Properties
8168
8229
  /**
8169
8230
  * Erlaubte Dateitypen
8170
8231
  */
@@ -8181,10 +8242,22 @@ class SacUploadBase extends SacBaseModelControl {
8181
8242
  * API Endpoint
8182
8243
  */
8183
8244
  this._endpoint = null;
8245
+ /**
8246
+ * Token for Bearer Authentication
8247
+ */
8248
+ this._token = null;
8184
8249
  /**
8185
8250
  * Upload Settings
8186
8251
  */
8187
8252
  this.options = {};
8253
+ /**
8254
+ * Handling von neuen Files im Input Control
8255
+ */
8256
+ this.fileListener = () => {
8257
+ if (this.uploadInput.nativeElement.files) {
8258
+ this.uploadService.handleFileList(this.uploadInput.nativeElement.files);
8259
+ }
8260
+ };
8188
8261
  /**
8189
8262
  * Definiert das Control als Required
8190
8263
  */
@@ -8194,25 +8267,21 @@ class SacUploadBase extends SacBaseModelControl {
8194
8267
  */
8195
8268
  this.maxfilesize = 0;
8196
8269
  /**
8197
- * Resource Key für Validation Message Required bei Control
8270
+ * Event when an error is triggered in the component.
8198
8271
  */
8199
- this.validationmessagerequired = this.validationKeyService.ValidationErrorRequired;
8272
+ this.onfileerror = new EventEmitter();
8200
8273
  /**
8201
- * Resource Key für Validation Message Required in Validation Summary
8274
+ * Event when a file has been uploaded. The event is triggered for multiple uploads per file.
8202
8275
  */
8203
- this.validationmessagesummaryrequired = this.validationKeyService.ValidationErrorSummaryRequired;
8276
+ this.onuploadcomplete = new EventEmitter();
8204
8277
  /**
8205
- * Event wenn ein Error in der Komponente ausgelöst wird.
8278
+ * Resource Key für Validation Message Required bei Control
8206
8279
  */
8207
- this.onfileerror = new EventEmitter();
8280
+ this.validationmessagerequired = this.validationKeyService.ValidationErrorRequired;
8208
8281
  /**
8209
- * Handling von neuen Files im Input Control
8282
+ * Resource Key für Validation Message Required in Validation Summary
8210
8283
  */
8211
- this.fileListener = () => {
8212
- if (this.uploadInput.nativeElement.files) {
8213
- this.uploadService.handleFileList(this.uploadInput.nativeElement.files);
8214
- }
8215
- };
8284
+ this.validationmessagesummaryrequired = this.validationKeyService.ValidationErrorSummaryRequired;
8216
8285
  this.validationKeyService = injector.get(SACVALIDATIONKEY_SERVICE, new SacDefaultValidationKeyService());
8217
8286
  this.lngResourceService = injector.get(SACLOCALISATION_SERVICE, new SacDefaultLocalisationService(this.validationKeyService));
8218
8287
  this.uploads = [];
@@ -8233,34 +8302,6 @@ class SacUploadBase extends SacBaseModelControl {
8233
8302
  }
8234
8303
  // #endregion Constructors
8235
8304
  // #region Public Getters And Setters
8236
- /**
8237
- * Erlaubte Dateitypen für den Upload. Format: ".xxx,.yyy,.zzz"
8238
- */
8239
- set allowedtypes(types) {
8240
- this._allowedtypes = types;
8241
- this.setAllowedTypes(types);
8242
- }
8243
- /**
8244
- * Files nach der Auswahl automatisch hochladen
8245
- */
8246
- set autoupload(v) {
8247
- this._autoupload = v;
8248
- this.options.autoUpload = v;
8249
- this.uploadService.connect(this.options);
8250
- }
8251
- /**
8252
- * Uploads können unterbrochen werden
8253
- */
8254
- set enablepause(v) {
8255
- this._enablepause = v;
8256
- }
8257
- /**
8258
- * Definiert den Registration Endpoint für Uploads.
8259
- */
8260
- set endpoint(v) {
8261
- this._endpoint = v;
8262
- this.setEndpoint(v);
8263
- }
8264
8305
  /**
8265
8306
  * Icon for browse button
8266
8307
  */
@@ -8294,17 +8335,56 @@ class SacUploadBase extends SacBaseModelControl {
8294
8335
  get allowedtypes() {
8295
8336
  return this._allowedtypes;
8296
8337
  }
8338
+ /**
8339
+ * Erlaubte Dateitypen für den Upload. Format: ".xxx,.yyy,.zzz"
8340
+ */
8341
+ set allowedtypes(types) {
8342
+ this._allowedtypes = types;
8343
+ this.setAllowedTypes(types);
8344
+ }
8297
8345
  get autoupload() {
8298
8346
  return this._autoupload;
8299
8347
  }
8348
+ /**
8349
+ * Files nach der Auswahl automatisch hochladen
8350
+ */
8351
+ set autoupload(v) {
8352
+ this._autoupload = v;
8353
+ this.options.autoUpload = v;
8354
+ this.uploadService.connect(this.options);
8355
+ }
8300
8356
  get enablepause() {
8301
8357
  return this._enablepause;
8302
8358
  }
8359
+ /**
8360
+ * Uploads können unterbrochen werden
8361
+ */
8362
+ set enablepause(v) {
8363
+ this._enablepause = v;
8364
+ }
8303
8365
  get endpoint() {
8304
8366
  return this._endpoint;
8305
8367
  }
8306
- // #endregion Public Getters And Setters
8307
- // #region Public Methods
8368
+ /**
8369
+ * Definiert den Registration Endpoint für Uploads.
8370
+ */
8371
+ set endpoint(v) {
8372
+ this._endpoint = v;
8373
+ this.setEndpoint(v);
8374
+ }
8375
+ /**
8376
+ * Token for Bearer Authentication
8377
+ */
8378
+ get token() {
8379
+ return this._token;
8380
+ }
8381
+ /**
8382
+ * Token for Bearer Authentication
8383
+ */
8384
+ set token(v) {
8385
+ this._token = v;
8386
+ this.setToken(v);
8387
+ }
8308
8388
  /**
8309
8389
  * Name der Datei die Hochgeladen wird
8310
8390
  * @returns Observable des Dateinamens.
@@ -8330,7 +8410,7 @@ class SacUploadBase extends SacBaseModelControl {
8330
8410
  */
8331
8411
  HasSuccessUpload() {
8332
8412
  if (this.uploads.length > 0) {
8333
- return (this.uploads.filter((itm) => itm.status !== 'complete').length === 0);
8413
+ return this.uploads.filter((itm) => itm.status !== 'complete').length === 0;
8334
8414
  }
8335
8415
  else {
8336
8416
  return false;
@@ -8348,7 +8428,7 @@ class SacUploadBase extends SacBaseModelControl {
8348
8428
  * @returns Elemente für Upload vorhanden
8349
8429
  */
8350
8430
  IsStateToUpload() {
8351
- return (this.uploads.filter((itm) => itm.status === 'added' || itm.status === 'paused').length > 0);
8431
+ return this.uploads.filter((itm) => itm.status === 'added' || itm.status === 'paused').length > 0;
8352
8432
  }
8353
8433
  /**
8354
8434
  * Prüft ob ein Upload eines Files am laufen ist
@@ -8393,7 +8473,7 @@ class SacUploadBase extends SacBaseModelControl {
8393
8473
  }
8394
8474
  }
8395
8475
  /**
8396
- * Initialisiert das Control
8476
+ * Initializes the control
8397
8477
  */
8398
8478
  ngOnInit() {
8399
8479
  super.ngOnInit();
@@ -8401,6 +8481,7 @@ class SacUploadBase extends SacBaseModelControl {
8401
8481
  this.listenerFn = this.renderer.listen(this.uploadInput.nativeElement, 'change', this.fileListener);
8402
8482
  this.setAllowedTypes(this._allowedtypes);
8403
8483
  this.setEndpoint(this._endpoint);
8484
+ this.setToken(this._token);
8404
8485
  if (this._endpoint === null) {
8405
8486
  throw new Error('endpoint is not defined!');
8406
8487
  }
@@ -8439,6 +8520,12 @@ class SacUploadBase extends SacBaseModelControl {
8439
8520
  this.uploads[index].progress = ufile.progress;
8440
8521
  this.uploads[index].status = ufile.status;
8441
8522
  this.SetUploadValue(ufile);
8523
+ const uploadState = {
8524
+ name: ufile.name,
8525
+ size: ufile.size,
8526
+ uploadid: this.uploads[index].uploadId,
8527
+ };
8528
+ this.onuploadcomplete.emit(uploadState);
8442
8529
  }
8443
8530
  else {
8444
8531
  if (index >= 0) {
@@ -8463,6 +8550,12 @@ class SacUploadBase extends SacBaseModelControl {
8463
8550
  this.uploadService.control({ action: 'pause' });
8464
8551
  }
8465
8552
  }
8553
+ /**
8554
+ * Sets the bearer token in the upload service
8555
+ */
8556
+ setToken(value) {
8557
+ this.options.token = value;
8558
+ }
8466
8559
  /**
8467
8560
  * Upload Single File
8468
8561
  *
@@ -8490,13 +8583,12 @@ class SacUploadBase extends SacBaseModelControl {
8490
8583
  }
8491
8584
  return error;
8492
8585
  }
8493
- // #endregion Public Abstract Methods
8586
+ // #endregion Public Methods
8494
8587
  // #region Private Methods
8495
8588
  UpdateFileCount() {
8496
8589
  // HACK: Add addition property to FormControl. Can be fixed if solution for ticket: https://github.com/angular/angular/issues/19686
8497
8590
  if (this.ngControl) {
8498
- this.ngControl.uploadedfilecount =
8499
- this.UploadedFileCount();
8591
+ this.ngControl.uploadedfilecount = this.UploadedFileCount();
8500
8592
  }
8501
8593
  }
8502
8594
  /**
@@ -8567,13 +8659,15 @@ SacUploadBase.propDecorators = {
8567
8659
  uploadInput: [{ type: ViewChild, args: ['files', { static: true },] }],
8568
8660
  isrequired: [{ type: Input }],
8569
8661
  maxfilesize: [{ type: Input }],
8662
+ onfileerror: [{ type: Output }],
8663
+ onuploadcomplete: [{ type: Output }],
8570
8664
  validationmessagerequired: [{ type: Input }],
8571
8665
  validationmessagesummaryrequired: [{ type: Input }],
8572
- onfileerror: [{ type: Output }],
8573
8666
  allowedtypes: [{ type: Input }],
8574
8667
  autoupload: [{ type: Input }],
8575
8668
  enablepause: [{ type: Input }],
8576
- endpoint: [{ type: Input }]
8669
+ endpoint: [{ type: Input }],
8670
+ token: [{ type: Input }]
8577
8671
  };
8578
8672
  /**
8579
8673
  * Klasse für den Upload einer Datei in der Upload Component
@@ -8593,7 +8687,7 @@ class SacUploadFile {
8593
8687
  this.documentid = null;
8594
8688
  }
8595
8689
  }
8596
- // #endregion Classes
8690
+ // #endregion Exported Classes
8597
8691
 
8598
8692
  /**
8599
8693
  * Upload Komponente für ein einzelnes File