@fundamental-ngx/core 0.43.12 → 0.43.13

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 (29) hide show
  1. package/esm2020/multi-combobox/multi-combobox.component.mjs +3 -3
  2. package/esm2020/multi-combobox/multi-combobox.module.mjs +8 -5
  3. package/esm2020/multi-input/multi-input.component.mjs +7 -4
  4. package/esm2020/multi-input/multi-input.module.mjs +8 -5
  5. package/esm2020/time/i18n/time-i18n.mjs +10 -4
  6. package/esm2020/time/time-column/time-column-config.mjs +1 -1
  7. package/esm2020/time/time-column/time-column.component.mjs +10 -6
  8. package/esm2020/time/time.component.mjs +8 -4
  9. package/fesm2015/fundamental-ngx-core-multi-combobox.mjs +9 -6
  10. package/fesm2015/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  11. package/fesm2015/fundamental-ngx-core-multi-input.mjs +13 -7
  12. package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  13. package/fesm2015/fundamental-ngx-core-time.mjs +25 -11
  14. package/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
  15. package/fesm2020/fundamental-ngx-core-multi-combobox.mjs +9 -6
  16. package/fesm2020/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  17. package/fesm2020/fundamental-ngx-core-multi-input.mjs +13 -7
  18. package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  19. package/fesm2020/fundamental-ngx-core-time.mjs +25 -11
  20. package/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
  21. package/fundamental-ngx-core-v0.43.13.tgz +0 -0
  22. package/multi-combobox/multi-combobox.module.d.ts +1 -1
  23. package/multi-input/multi-input.component.d.ts +2 -0
  24. package/multi-input/multi-input.module.d.ts +1 -1
  25. package/package.json +3 -3
  26. package/schematics/add-dependencies/index.js +4 -4
  27. package/time/i18n/time-i18n.d.ts +6 -0
  28. package/time/time-column/time-column-config.d.ts +1 -0
  29. package/fundamental-ngx-core-v0.43.12.tgz +0 -0
@@ -249,7 +249,8 @@ export class TimeComponent {
249
249
  return {
250
250
  decreaseLabel: this._timeI18nLabels.decreaseHoursLabel,
251
251
  increaseLabel: this._timeI18nLabels.increaseHoursLabel,
252
- label: this._timeI18nLabels.hoursLabel,
252
+ label: this._timeI18nLabels.hrsLabel,
253
+ fullLabel: this._timeI18nLabels.hoursLabel,
253
254
  navigationInstruction: this._timeI18nLabels.navigationInstruction
254
255
  };
255
256
  }
@@ -261,7 +262,8 @@ export class TimeComponent {
261
262
  return {
262
263
  decreaseLabel: this._timeI18nLabels.decreaseMinutesLabel,
263
264
  increaseLabel: this._timeI18nLabels.increaseMinutesLabel,
264
- label: this._timeI18nLabels.minutesLabel,
265
+ label: this._timeI18nLabels.minLabel,
266
+ fullLabel: this._timeI18nLabels.minutesLabel,
265
267
  navigationInstruction: this._timeI18nLabels.navigationInstruction
266
268
  };
267
269
  }
@@ -273,7 +275,8 @@ export class TimeComponent {
273
275
  return {
274
276
  decreaseLabel: this._timeI18nLabels.decreaseSecondsLabel,
275
277
  increaseLabel: this._timeI18nLabels.increaseSecondsLabel,
276
- label: this._timeI18nLabels.secondsLabel,
278
+ label: this._timeI18nLabels.secLabel,
279
+ fullLabel: this._timeI18nLabels.secondsLabel,
277
280
  navigationInstruction: this._timeI18nLabels.navigationInstruction
278
281
  };
279
282
  }
@@ -286,6 +289,7 @@ export class TimeComponent {
286
289
  decreaseLabel: this._timeI18nLabels.decreasePeriodLabel,
287
290
  increaseLabel: this._timeI18nLabels.increasePeriodLabel,
288
291
  label: this._timeI18nLabels.periodLabel,
292
+ fullLabel: this._timeI18nLabels.periodLabel,
289
293
  navigationInstruction: this._timeI18nLabels.navigationInstruction
290
294
  };
291
295
  }
@@ -486,4 +490,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
486
490
  type: ViewChildren,
487
491
  args: [TimeColumnComponent]
488
492
  }] } });
489
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90aW1lL3RpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdGltZS90aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLEtBQUssRUFJTCxRQUFRLEVBQ1IsU0FBUyxFQUVULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR2pFLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7OztBQTRCaEgsTUFBTSxPQUFPLGFBQWE7SUFxRXRCLGFBQWE7SUFDYixJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FB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dCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTEVGVF9BUlJPVywgUklHSFRfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuXG5pbXBvcnQgeyBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuaW1wb3J0IHsgS2V5VXRpbCwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcblxuaW1wb3J0IHsgTWVyaWRpYW4sIFNlbGVjdGFibGVWaWV3SXRlbSB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IFRpbWVJMThuIH0gZnJvbSAnLi9pMThuL3RpbWUtaTE4bic7XG5pbXBvcnQgeyBUaW1lQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi90aW1lLWNvbHVtbi90aW1lLWNvbHVtbi1jb25maWcnO1xuaW1wb3J0IHsgVGltZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vdGltZS1jb2x1bW4vdGltZS1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcblxuZXhwb3J0IHR5cGUgRmRUaW1lQWN0aXZlVmlldyA9ICdob3VyJyB8ICdtaW51dGUnIHwgJ3NlY29uZCcgfCAnbWVyaWRpYW4nO1xuXG50eXBlIEhvdXJWaWV3SXRlbSA9IFNlbGVjdGFibGVWaWV3SXRlbTxudW1iZXI+O1xudHlwZSBNaW51dGVWaWV3SXRlbSA9IFNlbGVjdGFibGVWaWV3SXRlbTxudW1iZXI+O1xudHlwZSBTZWNvbmRWaWV3SXRlbSA9IFNlbGVjdGFibGVWaWV3SXRlbTxudW1iZXI+O1xudHlwZSBNZXJpZGlhblZpZXdJdGVtID0gU2VsZWN0YWJsZVZpZXdJdGVtPE1lcmlkaWFuPjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC10aW1lJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGltZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGltZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhmb2N1c291dCknOiAnX2ZvY3VzT3V0KCRldmVudCknLFxuICAgICAgICAnKGJsdXIpJzogJ29uVG91Y2hlZCgpJ1xuICAgIH0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGltZUNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKClcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVGltZUNvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICAvKipcbiAgICAgKiBASW5wdXQgV2hlbiBzZXQgdG8gZmFsc2UsIHVzZXMgdGhlIDI0IGhvdXIgY2xvY2sgKGhvdXJzIHJhbmdpbmcgZnJvbSAwIHRvIDIzKVxuICAgICAqIGFuZCBkb2VzIG5vdCBkaXNwbGF5IGEgcGVyaW9kIGNvbnRyb2wuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBtZXJpZGlhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogIEBJbnB1dCBXaGVuIHNldCB0byBmYWxzZSwgZG9lcyBub3Qgc2V0IHRoZSBpbnB1dCBmaWVsZCB0byBpbnZhbGlkIHN0YXRlIG9uIGludmFsaWQgZW50cnkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWxpZGF0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBASW5wdXQgd2hlbiBzZXQgdG8gdHJ1ZSwgdGltZSBpbnB1dHMgd29uJ3QgYWxsb3cgdG8gaGF2ZSAxIGRpZ2l0XG4gICAgICogZm9yIGV4YW1wbGUgOSB3aWxsIGJlY29tZSAwOVxuICAgICAqIGJ1dCAxMiB3aWxsIGJlIGtlcHQgYXMgMTIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBrZWVwVHdvRGlnaXRzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBASW5wdXQgRGlzYWJsZXMgdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQElucHV0IFdoZW4gc2V0IHRvIGZhbHNlLCBoaWRlcyB0aGUgaW5wdXQgZm9yIHNlY29uZHMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5U2Vjb25kcyA9IHRydWU7XG5cbiAgICAvKiogQElucHV0IFdoZW4gc2V0IHRvIGZhbHNlLCBoaWRlcyB0aGUgaW5wdXQgZm9yIG1pbnV0ZXMuICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5TWludXRlcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHNldCB0byBmYWxzZSwgaGlkZXMgdGhlIGlucHV0IGZvciBob3Vyc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUhvdXJzID0gdHJ1ZTtcblxuICAgIC8qKiBASW5wdXQgRGVmaW5lcyBpZiB0aW1lIGNvbXBvbmVudCBzaG91bGQgYmUgdXNlZCBpbiB0YWJsZXQgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFibGV0ID0gZmFsc2U7XG5cbiAgICAvKiogQElucHV0IERlZmluZXMgcXVhbnRpdHkgb2YgdGhlIGVsZW1lbnRzLCB0aGF0IGFyZSB2aXNpYmxlIGF0IHRoZSBzYW1lIHRpbWUuIFNob3VsZCBiZSBvZGQgbnVtYmVyICovXG4gICAgQElucHV0KClcbiAgICBlbGVtZW50c0F0T25jZSA9IDc7XG5cbiAgICAvKipcbiAgICAgKiBASW5wdXQgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgZGF0ZXRpbWUgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpbWU6IEQ7XG5cbiAgICAvKiogQElucHV0IFdoZXRoZXIgdG8gc2hvdyBzcGlubmVyIGJ1dHRvbnMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNwaW5uZXJCdXR0b25zID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbihUaW1lQ29sdW1uQ29tcG9uZW50KVxuICAgIGNvbHVtbnM6IFF1ZXJ5TGlzdDxUaW1lQ29sdW1uQ29tcG9uZW50PHVua25vd24sIFNlbGVjdGFibGVWaWV3SXRlbTx1bmtub3duPj4+O1xuXG4gICAgLyoqIEFjdGl2ZSBjb2x1bW4gdmlldyB0byBpdGVyYXRlIHdpdGggKi9cbiAgICBhY3RpdmVWaWV3OiBGZFRpbWVBY3RpdmVWaWV3ID0gJ2hvdXInO1xuXG4gICAgLyoqIE9mZnNldCAqL1xuICAgIGdldCBvZmZzZXQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5lbGVtZW50c0F0T25jZSAvIDIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBjb250YWluZXIgZm9yIFswIC0gMjNdIGhvdXJzXG4gICAgICovXG4gICAgaG91clZpZXdJdGVtczogSG91clZpZXdJdGVtW10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogcmVmZXJlbmNlIHRvIGN1cnJlbnRseSBzZWxlY3RlZCBob3VyVmlld0l0ZW1zIGVsZW1lbnRcbiAgICAgKi9cbiAgICBhY3RpdmVIb3VyVmlld0l0ZW0/OiBIb3VyVmlld0l0ZW07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogY29udGFpbmVyIGZvciBbMCAtIDU5XSBtaW51dGVzXG4gICAgICovXG4gICAgbWludXRlVmlld0l0ZW1zOiBNaW51dGVWaWV3SXRlbVtdID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIHJlZmVyZW5jZSB0byBjdXJyZW50bHkgc2VsZWN0ZWQgbWludXRlVmlld0l0ZW1zIGVsZW1lbnRcbiAgICAgKi9cbiAgICBhY3RpdmVNaW51dGVWaWV3SXRlbT86IE1pbnV0ZVZpZXdJdGVtO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGNvbnRhaW5lciBmb3IgWzAgLSA1OV0gc2Vjb25kc1xuICAgICAqL1xuICAgIHNlY29uZFZpZXdJdGVtczogU2Vjb25kVmlld0l0ZW1bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiByZWZlcmVuY2UgdG8gY3VycmVudGx5IHNlbGVjdGVkIHNlY29uZFZpZXdJdGVtcyBlbGVtZW50XG4gICAgICovXG4gICAgYWN0aXZlU2Vjb25kVmlld0l0ZW0/OiBTZWNvbmRWaWV3SXRlbTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBjb250YWluZXIgZm9yIFthbSwgcG1dIG1lcmlkaWFuIHZhbHVlc1xuICAgICAqL1xuICAgIG1lcmlkaWFuVmlld0l0ZW1zOiBNZXJpZGlhblZpZXdJdGVtW10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogcmVmZXJlbmNlIHRvIGN1cnJlbnRseSBzZWxlY3RlZCBtZXJpZGlhblZpZXdJdGVtcyBlbGVtZW50XG4gICAgICovXG4gICAgYWN0aXZlTWVyaWRpYW5WaWV3SXRlbT86IE1lcmlkaWFuVmlld0l0ZW07XG5cbiAgICAvKiogQ29tcG9uZW50IGFyaWEtbGFiZWwgKi9cbiAgICBnZXQgX2NvbXBvbmVudEFyaWFMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGltZUkxOG5MYWJlbHM/LmNvbXBvbmVudEFyaWFOYW1lO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIC8vIFVzZSBAT3B0aW9uYWwgdG8gYXZvaWQgYW5ndWxhciBpbmplY3Rpb24gZXJyb3IgbWVzc2FnZSBhbmQgdGhyb3cgb3VyIG93biB3aGljaCBpcyBtb3JlIHByZWNpc2Ugb25lXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2RhdGVUaW1lQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcnRsU2VydmljZTogUnRsU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfdGltZUkxOG5MYWJlbHM6IFRpbWVJMThuXG4gICAgKSB7XG4gICAgICAgIGlmICghX2RhdGVUaW1lQWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yKCdEYXRlVGltZUFkYXB0ZXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGltZSA9IHRoaXMuX2dldERlZmF1bHRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2V0VXBWaWV3R3JpZCgpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zZXRVcFZpZXdHcmlkKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBSZWFjdHMgb25seSB3aGVuIHRoZXJlIGlzIG1lcmlkaWFuIG9yIHRpbWUgaW5wdXQgY2hhbmdlXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5tZXJpZGlhbiB8fCBjaGFuZ2VzLnRpbWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFVwVmlld0dyaWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5lbGVtZW50c0F0T25jZSAmJiBjaGFuZ2VzLmVsZW1lbnRzQXRPbmNlLmN1cnJlbnRWYWx1ZSAlIDIgPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW2VsZW1lbnRzQXRPbmNlXSBzaG91bGQgYmUgb2RkIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZnJlc2hDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBEKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodGltZTogRCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZnJlc2hDb2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiBjb2x1bW4uc2V0VmFsdWVPZkFjdGl2ZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlcyBtZXJpZGlhbiBjaGFuZ2UuXG4gICAgICogVGhpcyBpbXBsaWNpdGx5IGNoYW5nZXMgaG91cnMgYnkgKy8tIDEyXG4gICAgICovXG4gICAgaGFuZGxlTWVyaWRpYW5DaGFuZ2UobWVyaWRpYW46IE1lcmlkaWFuKTogdm9pZCB7XG4gICAgICAgIGxldCBob3VyT2Zmc2V0OiBudW1iZXIgPSBtZXJpZGlhbiA9PT0gTWVyaWRpYW4uQU0gPyAtMTIgOiAxMjtcbiAgICAgICAgbGV0IGN1cnJlbnRIb3VyID0gdGhpcy5fZ2V0TW9kZWxIb3VyKCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRIb3VyID4gMTIgJiYgbWVyaWRpYW4gPT09IE1lcmlkaWFuLlBNKSB7XG4gICAgICAgICAgICBjdXJyZW50SG91ciAtPSAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgIGN1cnJlbnRIb3VyID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA8IDEyICYmIG1lcmlkaWFuID09PSBNZXJpZGlhbi5BTSkge1xuICAgICAgICAgICAgaG91ck9mZnNldCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdIb3VyID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjMsIGN1cnJlbnRIb3VyICsgaG91ck9mZnNldCkpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlSG91ckNoYW5nZShuZXdIb3VyKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZVNlY29uZENoYW5nZShzZWNvbmQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnRpbWUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuc2V0U2Vjb25kcyh0aGlzLnRpbWUsIHNlY29uZCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUFjdGl2ZVNlY29uZFZpZXdJdGVtKCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy50aW1lKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZU1pbnV0ZUNoYW5nZShtaW51dGU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnRpbWUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuc2V0TWludXRlcyh0aGlzLnRpbWUsIG1pbnV0ZSk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUFjdGl2ZU1pbnV0ZVZpZXdJdGVtKCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy50aW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlcyBjaGFuZ2VzIG9mIGRpc3BsYXllZCBob3VyIHZhbHVlIGZyb20gdGVtcGxhdGUuXG4gICAgICovXG4gICAgaGFuZGxlSG91ckNoYW5nZShob3VyOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50aW1lID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnNldEhvdXJzKHRoaXMudGltZSwgaG91cik7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUFjdGl2ZUhvdXJWaWV3SXRlbSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1lcmlkaWFuKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVBY3RpdmVNZXJpZGlhblZpZXdJdGVtKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudGltZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVOZXh0Q29sdW1uRm9jdXMoY29sdW1uOiBGZFRpbWVBY3RpdmVWaWV3KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLl9nZXRWaXNpYmxlQ29sdW1uc1dpdGhSdGwoKTtcbiAgICAgICAgbGV0IG5leHRJbmRleCA9IGNvbHVtbnMuaW5kZXhPZihjb2x1bW4pICsgMTtcbiAgICAgICAgaWYgKG5leHRJbmRleCA+PSBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZUFjdGl2ZShjb2x1bW5zW25leHRJbmRleF0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlUHJldmlvdXNDb2x1bW5Gb2N1cyhjb2x1bW46IEZkVGltZUFjdGl2ZVZpZXcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuX2dldFZpc2libGVDb2x1bW5zV2l0aFJ0bCgpO1xuICAgICAgICBsZXQgbmV4dEluZGV4ID0gY29sdW1ucy5pbmRleE9mKGNvbHVtbikgLSAxO1xuICAgICAgICBpZiAobmV4dEluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEluZGV4ID0gY29sdW1ucy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlQWN0aXZlKGNvbHVtbnNbbmV4dEluZGV4XSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVLZXlEb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBMRUZUX0FSUk9XKSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQcmV2aW91c0NvbHVtbkZvY3VzKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZUNvbHVtbigpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dENvbHVtbkZvY3VzKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZUNvbHVtbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB3cml0ZVZhbHVlKHRpbWU6IEQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aW1lIHx8ICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZCh0aW1lKSkge1xuICAgICAgICAgICAgdGltZSA9IHRoaXMuX2dldERlZmF1bHRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZSA9IHRpbWU7XG5cbiAgICAgICAgdGhpcy5fc2V0VXBBY3RpdmVWaWV3SXRlbXMoKTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjaGFuZ2VBY3RpdmUodmlldzogRmRUaW1lQWN0aXZlVmlldyk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSB2aWV3O1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpc0FjdGl2ZSh2aWV3OiBGZFRpbWVBY3RpdmVWaWV3KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IHZpZXc7XG4gICAgfVxuXG4gICAgLyoqIENvbmZpZ3VyYXRpb24gZm9yIGhvdXJzIGNvbHVtbiAqL1xuICAgIGdldEhvdXJzQ29uZmlnKCk6IFRpbWVDb2x1bW5Db25maWcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuX3RpbWVJMThuTGFiZWxzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlY3JlYXNlTGFiZWw6IHRoaXMuX3RpbWVJMThuTGFiZWxzLmRlY3JlYXNlSG91cnNMYWJlbCxcbiAgICAgICAgICAgIGluY3JlYXNlTGFiZWw6IHRoaXMuX3RpbWVJMThuTGFiZWxzLmluY3JlYXNlSG91cnNMYWJlbCxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90aW1lSTE4bkxhYmVscy5ob3Vyc0xhYmVsLFxuICAgICAgICAgICAgbmF2aWdhdGlvbkluc3RydWN0aW9uOiB0aGlzLl90aW1lSTE4bkxhYmVscy5uYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQ29uZmlndXJhdGlvbiBmb3IgbWludXRlcyBjb2x1bW4gKi9cbiAgICBnZXRNaW51dGVzQ29uZmlnKCk6IFRpbWVDb2x1bW5Db25maWcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuX3RpbWVJMThuTGFiZWxzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlY3JlYXNlTGFiZWw6IHRoaXMuX3RpbWVJMThuTGFiZWxzLmRlY3JlYXNlTWludXRlc0xhYmVsLFxuICAgICAgICAgICAgaW5jcmVhc2VMYWJlbDogdGhpcy5fdGltZUkxOG5MYWJlbHMuaW5jcmVhc2VNaW51dGVzTGFiZWwsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5fdGltZUkxOG5MYWJlbHMubWludXRlc0xhYmVsLFxuICAgICAgICAgICAgbmF2aWdhdGlvbkluc3RydWN0aW9uOiB0aGlzLl90aW1lSTE4bkxhYmVscy5uYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQ29uZmlndXJhdGlvbiBmb3Igc2Vjb25kcyBjb2x1bW4gKi9cbiAgICBnZXRTZWNvbmRzQ29uZmlnKCk6IFRpbWVDb2x1bW5Db25maWcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuX3RpbWVJMThuTGFiZWxzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlY3JlYXNlTGFiZWw6IHRoaXMuX3RpbWVJMThuTGFiZWxzLmRlY3JlYXNlU2Vjb25kc0xhYmVsLFxuICAgICAgICAgICAgaW5jcmVhc2VMYWJlbDogdGhpcy5fdGltZUkxOG5MYWJlbHMuaW5jcmVhc2VTZWNvbmRzTGFiZWwsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5fdGltZUkxOG5MYWJlbHMuc2Vjb25kc0xhYmVsLFxuICAgICAgICAgICAgbmF2aWdhdGlvbkluc3RydWN0aW9uOiB0aGlzLl90aW1lSTE4bkxhYmVscy5uYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQ29uZmlndXJhdGlvbiBmb3IgcGVyaW9kIGNvbHVtbiAqL1xuICAgIGdldFBlcmlvZENvbmZpZygpOiBUaW1lQ29sdW1uQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCF0aGlzLl90aW1lSTE4bkxhYmVscykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZWNyZWFzZUxhYmVsOiB0aGlzLl90aW1lSTE4bkxhYmVscy5kZWNyZWFzZVBlcmlvZExhYmVsLFxuICAgICAgICAgICAgaW5jcmVhc2VMYWJlbDogdGhpcy5fdGltZUkxOG5MYWJlbHMuaW5jcmVhc2VQZXJpb2RMYWJlbCxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90aW1lSTE4bkxhYmVscy5wZXJpb2RMYWJlbCxcbiAgICAgICAgICAgIG5hdmlnYXRpb25JbnN0cnVjdGlvbjogdGhpcy5fdGltZUkxOG5MYWJlbHMubmF2aWdhdGlvbkluc3RydWN0aW9uXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBmb2N1c0FjdGl2ZUNvbHVtbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKHsgYWN0aXZlIH0pID0+IGFjdGl2ZSk7XG4gICAgICAgIGNvbHVtbj8uZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzT3V0KGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHZpc2libGUgdGltZSBjb2x1bW5zXG4gICAgICogQHJldHVybnMgdmlzaWJsZSBjb2x1bW5zIGxpc3QgQHNlZSB7RmRUaW1lQWN0aXZlVmlld1tdfVxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFZpc2libGVDb2x1bW5zKCk6IEZkVGltZUFjdGl2ZVZpZXdbXSB7XG4gICAgICAgIGNvbnN0IGFsbE9wdGlvbnM6IEFycmF5PFtib29sZWFuLCBGZFRpbWVBY3RpdmVWaWV3XT4gPSBbXG4gICAgICAgICAgICBbdGhpcy5kaXNwbGF5SG91cnMsICdob3VyJ10sXG4gICAgICAgICAgICBbdGhpcy5kaXNwbGF5TWludXRlcywgJ21pbnV0ZSddLFxuICAgICAgICAgICAgW3RoaXMuZGlzcGxheVNlY29uZHMsICdzZWNvbmQnXSxcbiAgICAgICAgICAgIFt0aGlzLm1lcmlkaWFuLCAnbWVyaWRpYW4nXVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gYWxsT3B0aW9ucy5maWx0ZXIoKFtlbmFibGVkXSkgPT4gZW5hYmxlZCkubWFwKChbLCB2aWV3XSkgPT4gdmlldyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHZpc2libGUgY29sdW1ucyB0YWtpbmcgaW50byBhY2NvdW50IFJUTFxuICAgICAqIEByZXR1cm5zIHZpc2libGUgY29sdW1ucyBsaXN0IEBzZWUge0ZkVGltZUFjdGl2ZVZpZXdbXX1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRWaXNpYmxlQ29sdW1uc1dpdGhSdGwoKTogRmRUaW1lQWN0aXZlVmlld1tdIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuX2dldFZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwudmFsdWUgPyBjb2x1bW5zLnJldmVyc2UoKSA6IGNvbHVtbnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRVcFZpZXdHcmlkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RIb3VyVmlld0l0ZW1zKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdE1pbnV0ZVZpZXdJdGVtcygpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RTZWNvbmRWaWV3SXRlbXMoKTtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0TWVyaWRpYW5WaWV3SXRlbXMoKTtcbiAgICAgICAgLy8gdXBkYXRlIHJlZmVyZW5jZSB0byBhY3RpdmUgdmlldyBpdGVtc1xuICAgICAgICB0aGlzLl9zZXRVcEFjdGl2ZVZpZXdJdGVtcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0VXBBY3RpdmVWaWV3SXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUFjdGl2ZUhvdXJWaWV3SXRlbSgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVBY3RpdmVNaW51dGVWaWV3SXRlbSgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVBY3RpdmVTZWNvbmRWaWV3SXRlbSgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVBY3RpdmVNZXJpZGlhblZpZXdJdGVtKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RIb3VyVmlld0l0ZW1zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvdXJWaWV3SXRlbXMgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXJcbiAgICAgICAgICAgIC5nZXRIb3VyTmFtZXMoeyBtZXJpZGlhbjogdGhpcy5tZXJpZGlhbiwgdHdvRGlnaXQ6IHRoaXMua2VlcFR3b0RpZ2l0cyB9KVxuICAgICAgICAgICAgLm1hcCgobmFtZSwgaG91cikgPT4gKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogaG91cixcbiAgICAgICAgICAgICAgICBsYWJlbDogbmFtZVxuICAgICAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0TWludXRlVmlld0l0ZW1zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1pbnV0ZVZpZXdJdGVtcyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlclxuICAgICAgICAgICAgLmdldE1pbnV0ZU5hbWVzKHsgdHdvRGlnaXQ6IHRoaXMua2VlcFR3b0RpZ2l0cyB9KVxuICAgICAgICAgICAgLm1hcCgobmFtZSwgbWludXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBtaW51dGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IG5hbWVcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFNlY29uZFZpZXdJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWNvbmRWaWV3SXRlbXMgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXJcbiAgICAgICAgICAgIC5nZXRTZWNvbmROYW1lcyh7IHR3b0RpZ2l0OiB0aGlzLmtlZXBUd29EaWdpdHMgfSlcbiAgICAgICAgICAgIC5tYXAoKG5hbWUsIHNlY29uZCkgPT4gKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogc2Vjb25kLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBuYW1lXG4gICAgICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RNZXJpZGlhblZpZXdJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgW2FtTGFiZWwsIHBtTGFiZWxdID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldERheVBlcmlvZE5hbWVzKCk7XG4gICAgICAgIHRoaXMubWVyaWRpYW5WaWV3SXRlbXMgPSBbXG4gICAgICAgICAgICB7IHZhbHVlOiBNZXJpZGlhbi5BTSwgbGFiZWw6IGFtTGFiZWwgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6IE1lcmlkaWFuLlBNLCBsYWJlbDogcG1MYWJlbCB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVBY3RpdmVIb3VyVmlld0l0ZW0oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhvdXIgPSB0aGlzLl9nZXRNb2RlbEhvdXIoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVIb3VyVmlld0l0ZW0gPSB0aGlzLmhvdXJWaWV3SXRlbXMuZmluZCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gaG91cik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVBY3RpdmVNaW51dGVWaWV3SXRlbSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWludXRlID0gdGhpcy5fZ2V0TW9kZWxNaW51dGUoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVNaW51dGVWaWV3SXRlbSA9IHRoaXMubWludXRlVmlld0l0ZW1zLmZpbmQoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IG1pbnV0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVBY3RpdmVTZWNvbmRWaWV3SXRlbSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gdGhpcy5fZ2V0TW9kZWxTZWNvbmQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVTZWNvbmRWaWV3SXRlbSA9IHRoaXMuc2Vjb25kVmlld0l0ZW1zLmZpbmQoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IHNlY29uZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVBY3RpdmVNZXJpZGlhblZpZXdJdGVtKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXJpZGlhbiA9IHRoaXMuX2dldERheVBlcmlvZEJ5SG91cigpO1xuICAgICAgICB0aGlzLmFjdGl2ZU1lcmlkaWFuVmlld0l0ZW0gPSB0aGlzLm1lcmlkaWFuVmlld0l0ZW1zLmZpbmQoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IG1lcmlkaWFuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTW9kZWwgaG91cnMgKDAgLSAyMylcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRNb2RlbEhvdXIoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRIb3Vycyh0aGlzLnRpbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNb2RlbCBtaW51dGVzICgwIC0gNTkpXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0TW9kZWxNaW51dGUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKHRoaXMudGltZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1vZGVsIHNlY29uZHMgKDAgLSA1OSlcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRNb2RlbFNlY29uZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFNlY29uZHModGhpcy50aW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2V0IG1lcmlkaWFuIHBlcmlvZCBiYXNlZCBvbiBhIGdpdmVuIGhvdXJzXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0RGF5UGVyaW9kQnlIb3VyKGhvdXIgPSB0aGlzLl9nZXRNb2RlbEhvdXIoKSk6IE1lcmlkaWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUG0oaG91cikgPyBNZXJpZGlhbi5QTSA6IE1lcmlkaWFuLkFNO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNQbShob3VyczogbnVtYmVyID0gdGhpcy5fZ2V0TW9kZWxIb3VyKCkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGhvdXJzID49IDEyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAcmV0dXJucyBkZWZhdWx0IHRpbWUgMDA6MDA6MDBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXREZWZhdWx0VmFsdWUoKTogRCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIudG9kYXkoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmZC10aW1lXCJcbiAgICBbY2xhc3MuaXMtY29tcGFjdF09XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbXBhY3QkIHwgYXN5bmNcIlxuICAgIChrZXlkb3duKT1cImhhbmRsZUtleURvd25FdmVudCgkZXZlbnQpXCJcbiAgICBbY2xhc3MuZmQtdGltZS0tdGFibGV0XT1cInRhYmxldFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJfY29tcG9uZW50QXJpYUxhYmVsIHx8ICgnY29yZVRpbWUuY29tcG9uZW50QXJpYU5hbWUnIHwgZmRUcmFuc2xhdGUpXCJcbj5cbiAgICA8ZmQtdGltZS1jb2x1bW5cbiAgICAgICAgW2FjdGl2ZV09XCJpc0FjdGl2ZSgnaG91cicpXCJcbiAgICAgICAgW3Jvd3NdPVwiaG91clZpZXdJdGVtc1wiXG4gICAgICAgIFtvZmZzZXRdPVwib2Zmc2V0XCJcbiAgICAgICAgW2VsZW1lbnRzQXRPbmNlXT1cImVsZW1lbnRzQXRPbmNlXCJcbiAgICAgICAgW2FjdGl2ZVZhbHVlXT1cImFjdGl2ZUhvdXJWaWV3SXRlbVwiXG4gICAgICAgIFt0aW1lQ29uZmlnXT1cImdldEhvdXJzQ29uZmlnKClcIlxuICAgICAgICBjb2x1bW5UcmFuc2xhdGlvbnNQcmVzZXQ9XCJob3Vyc1wiXG4gICAgICAgIFtzcGlubmVyc109XCJzcGlubmVyQnV0dG9uc1wiXG4gICAgICAgIChhY3RpdmVWYWx1ZUNoYW5nZSk9XCJoYW5kbGVIb3VyQ2hhbmdlKCRldmVudC52YWx1ZS52YWx1ZSlcIlxuICAgICAgICAoYWN0aXZlU3RhdGVDaGFuZ2UpPVwiY2hhbmdlQWN0aXZlKCdob3VyJylcIlxuICAgID48L2ZkLXRpbWUtY29sdW1uPlxuICAgIDxmZC10aW1lLWNvbHVtblxuICAgICAgICAqbmdJZj1cImRpc3BsYXlNaW51dGVzXCJcbiAgICAgICAgW2FjdGl2ZV09XCJpc0FjdGl2ZSgnbWludXRlJylcIlxuICAgICAgICBbcm93c109XCJtaW51dGVWaWV3SXRlbXNcIlxuICAgICAgICBbb2Zmc2V0XT1cIm9mZnNldFwiXG4gICAgICAgIFtlbGVtZW50c0F0T25jZV09XCJlbGVtZW50c0F0T25jZVwiXG4gICAgICAgIFthY3RpdmVWYWx1ZV09XCJhY3RpdmVNaW51dGVWaWV3SXRlbVwiXG4gICAgICAgIFt0aW1lQ29uZmlnXT1cImdldE1pbnV0ZXNDb25maWcoKVwiXG4gICAgICAgIGNvbHVtblRyYW5zbGF0aW9uc1ByZXNldD1cIm1pbnV0ZXNcIlxuICAgICAgICBbc3Bpbm5lcnNdPVwic3Bpbm5lckJ1dHRvbnNcIlxuICAgICAgICAoYWN0aXZlVmFsdWVDaGFuZ2UpPVwiaGFuZGxlTWludXRlQ2hhbmdlKCRldmVudC52YWx1ZS52YWx1ZSlcIlxuICAgICAgICAoYWN0aXZlU3RhdGVDaGFuZ2UpPVwiY2hhbmdlQWN0aXZlKCdtaW51dGUnKVwiXG4gICAgPjwvZmQtdGltZS1jb2x1bW4+XG4gICAgPGZkLXRpbWUtY29sdW1uXG4gICAgICAgICpuZ0lmPVwiZGlzcGxheVNlY29uZHNcIlxuICAgICAgICBbYWN0aXZlXT1cImlzQWN0aXZlKCdzZWNvbmQnKVwiXG4gICAgICAgIFtyb3dzXT1cInNlY29uZFZpZXdJdGVtc1wiXG4gICAgICAgIFtvZmZzZXRdPVwib2Zmc2V0XCJcbiAgICAgICAgW2VsZW1lbnRzQXRPbmNlXT1cImVsZW1lbnRzQXRPbmNlXCJcbiAgICAgICAgW2FjdGl2ZVZhbHVlXT1cImFjdGl2ZVNlY29uZFZpZXdJdGVtXCJcbiAgICAgICAgW3RpbWVDb25maWddPVwiZ2V0U2Vjb25kc0NvbmZpZygpXCJcbiAgICAgICAgY29sdW1uVHJhbnNsYXRpb25zUHJlc2V0PVwic2Vjb25kc1wiXG4gICAgICAgIFtzcGlubmVyc109XCJzcGlubmVyQnV0dG9uc1wiXG4gICAgICAgIChhY3RpdmVWYWx1ZUNoYW5nZSk9XCJoYW5kbGVTZWNvbmRDaGFuZ2UoJGV2ZW50LnZhbHVlLnZhbHVlKVwiXG4gICAgICAgIChhY3RpdmVTdGF0ZUNoYW5nZSk9XCJjaGFuZ2VBY3RpdmUoJ3NlY29uZCcpXCJcbiAgICA+PC9mZC10aW1lLWNvbHVtbj5cbiAgICA8ZmQtdGltZS1jb2x1bW5cbiAgICAgICAgKm5nSWY9XCJtZXJpZGlhblwiXG4gICAgICAgIFthY3RpdmVdPVwiaXNBY3RpdmUoJ21lcmlkaWFuJylcIlxuICAgICAgICBbcm93c109XCJtZXJpZGlhblZpZXdJdGVtc1wiXG4gICAgICAgIFthY3RpdmVWYWx1ZV09XCJhY3RpdmVNZXJpZGlhblZpZXdJdGVtXCJcbiAgICAgICAgW29mZnNldF09XCIwXCJcbiAgICAgICAgW2VsZW1lbnRzQXRPbmNlXT1cImVsZW1lbnRzQXRPbmNlXCJcbiAgICAgICAgW3RpbWVDb25maWddPVwiZ2V0UGVyaW9kQ29uZmlnKClcIlxuICAgICAgICBjb2x1bW5UcmFuc2xhdGlvbnNQcmVzZXQ9XCJwZXJpb2RcIlxuICAgICAgICBbbWVyaWRpYW5dPVwidHJ1ZVwiXG4gICAgICAgIFtzcGlubmVyc109XCJzcGlubmVyQnV0dG9uc1wiXG4gICAgICAgIChhY3RpdmVWYWx1ZUNoYW5nZSk9XCJoYW5kbGVNZXJpZGlhbkNoYW5nZSgkZXZlbnQudmFsdWUudmFsdWUpXCJcbiAgICAgICAgKGFjdGl2ZVN0YXRlQ2hhbmdlKT1cImNoYW5nZUFjdGl2ZSgnbWVyaWRpYW4nKVwiXG4gICAgPjwvZmQtdGltZS1jb2x1bW4+XG48L2Rpdj5cbiJdfQ==
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90aW1lL3RpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdGltZS90aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLEtBQUssRUFJTCxRQUFRLEVBQ1IsU0FBUyxFQUVULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR2pFLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7OztBQTRCaEgsTUFBTSxPQUFPLGFBQWE7SUFxRXRCLGFBQWE7SUFDYixJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FB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WUFBWTtzQkFEWCxLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBT04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixPQUFPO3NCQUROLFlBQVk7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5cbmltcG9ydCB7IERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5pbXBvcnQgeyBLZXlVdGlsLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuXG5pbXBvcnQgeyBNZXJpZGlhbiwgU2VsZWN0YWJsZVZpZXdJdGVtIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgVGltZUkxOG4gfSBmcm9tICcuL2kxOG4vdGltZS1pMThuJztcbmltcG9ydCB7IFRpbWVDb2x1bW5Db25maWcgfSBmcm9tICcuL3RpbWUtY29sdW1uL3RpbWUtY29sdW1uLWNvbmZpZyc7XG5pbXBvcnQgeyBUaW1lQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lLWNvbHVtbi90aW1lLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlPYnNlcnZlciwgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuXG5leHBvcnQgdHlwZSBGZFRpbWVBY3RpdmVWaWV3ID0gJ2hvdXInIHwgJ21pbnV0ZScgfCAnc2Vjb25kJyB8ICdtZXJpZGlhbic7XG5cbnR5cGUgSG91clZpZXdJdGVtID0gU2VsZWN0YWJsZVZpZXdJdGVtPG51bWJlcj47XG50eXBlIE1pbnV0ZVZpZXdJdGVtID0gU2VsZWN0YWJsZVZpZXdJdGVtPG51bWJlcj47XG50eXBlIFNlY29uZFZpZXdJdGVtID0gU2VsZWN0YWJsZVZpZXdJdGVtPG51bWJlcj47XG50eXBlIE1lcmlkaWFuVmlld0l0ZW0gPSBTZWxlY3RhYmxlVmlld0l0ZW08TWVyaWRpYW4+O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRpbWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90aW1lLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90aW1lLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnKGZvY3Vzb3V0KSc6ICdfZm9jdXNPdXQoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnb25Ub3VjaGVkKCknXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaW1lQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKVxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUaW1lQ29tcG9uZW50PEQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIC8qKlxuICAgICAqIEBJbnB1dCBXaGVuIHNldCB0byBmYWxzZSwgdXNlcyB0aGUgMjQgaG91ciBjbG9jayAoaG91cnMgcmFuZ2luZyBmcm9tIDAgdG8gMjMpXG4gICAgICogYW5kIGRvZXMgbm90IGRpc3BsYXkgYSBwZXJpb2QgY29udHJvbC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1lcmlkaWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiAgQElucHV0IFdoZW4gc2V0IHRvIGZhbHNlLCBkb2VzIG5vdCBzZXQgdGhlIGlucHV0IGZpZWxkIHRvIGludmFsaWQgc3RhdGUgb24gaW52YWxpZCBlbnRyeS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhbGlkYXRlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBJbnB1dCB3aGVuIHNldCB0byB0cnVlLCB0aW1lIGlucHV0cyB3b24ndCBhbGxvdyB0byBoYXZlIDEgZGlnaXRcbiAgICAgKiBmb3IgZXhhbXBsZSA5IHdpbGwgYmVjb21lIDA5XG4gICAgICogYnV0IDEyIHdpbGwgYmUga2VwdCBhcyAxMi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGtlZXBUd29EaWdpdHMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBJbnB1dCBEaXNhYmxlcyB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBASW5wdXQgV2hlbiBzZXQgdG8gZmFsc2UsIGhpZGVzIHRoZSBpbnB1dCBmb3Igc2Vjb25kcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlTZWNvbmRzID0gdHJ1ZTtcblxuICAgIC8qKiBASW5wdXQgV2hlbiBzZXQgdG8gZmFsc2UsIGhpZGVzIHRoZSBpbnB1dCBmb3IgbWludXRlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlNaW51dGVzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gc2V0IHRvIGZhbHNlLCBoaWRlcyB0aGUgaW5wdXQgZm9yIGhvdXJzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5SG91cnMgPSB0cnVlO1xuXG4gICAgLyoqIEBJbnB1dCBEZWZpbmVzIGlmIHRpbWUgY29tcG9uZW50IHNob3VsZCBiZSB1c2VkIGluIHRhYmxldCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICB0YWJsZXQgPSBmYWxzZTtcblxuICAgIC8qKiBASW5wdXQgRGVmaW5lcyBxdWFudGl0eSBvZiB0aGUgZWxlbWVudHMsIHRoYXQgYXJlIHZpc2libGUgYXQgdGhlIHNhbWUgdGltZS4gU2hvdWxkIGJlIG9kZCBudW1iZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGVsZW1lbnRzQXRPbmNlID0gNztcblxuICAgIC8qKlxuICAgICAqIEBJbnB1dCBBbiBvYmplY3QgdGhhdCBjb250YWlucyBkYXRldGltZSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGltZTogRDtcblxuICAgIC8qKiBASW5wdXQgV2hldGhlciB0byBzaG93IHNwaW5uZXIgYnV0dG9ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3Bpbm5lckJ1dHRvbnMgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKFRpbWVDb2x1bW5Db21wb25lbnQpXG4gICAgY29sdW1uczogUXVlcnlMaXN0PFRpbWVDb2x1bW5Db21wb25lbnQ8dW5rbm93biwgU2VsZWN0YWJsZVZpZXdJdGVtPHVua25vd24+Pj47XG5cbiAgICAvKiogQWN0aXZlIGNvbHVtbiB2aWV3IHRvIGl0ZXJhdGUgd2l0aCAqL1xuICAgIGFjdGl2ZVZpZXc6IEZkVGltZUFjdGl2ZVZpZXcgPSAnaG91cic7XG5cbiAgICAvKiogT2Zmc2V0ICovXG4gICAgZ2V0IG9mZnNldCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLmVsZW1lbnRzQXRPbmNlIC8gMik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGNvbnRhaW5lciBmb3IgWzAgLSAyM10gaG91cnNcbiAgICAgKi9cbiAgICBob3VyVmlld0l0ZW1zOiBIb3VyVmlld0l0ZW1bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiByZWZlcmVuY2UgdG8gY3VycmVudGx5IHNlbGVjdGVkIGhvdXJWaWV3SXRlbXMgZWxlbWVudFxuICAgICAqL1xuICAgIGFjdGl2ZUhvdXJWaWV3SXRlbT86IEhvdXJWaWV3SXRlbTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBjb250YWluZXIgZm9yIFswIC0gNTldIG1pbnV0ZXNcbiAgICAgKi9cbiAgICBtaW51dGVWaWV3SXRlbXM6IE1pbnV0ZVZpZXdJdGVtW10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogcmVmZXJlbmNlIHRvIGN1cnJlbnRseSBzZWxlY3RlZCBtaW51dGVWaWV3SXRlbXMgZWxlbWVudFxuICAgICAqL1xuICAgIGFjdGl2ZU1pbnV0ZVZpZXdJdGVtPzogTWludXRlVmlld0l0ZW07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogY29udGFpbmVyIGZvciBbMCAtIDU5XSBzZWNvbmRzXG4gICAgICovXG4gICAgc2Vjb25kVmlld0l0ZW1zOiBTZWNvbmRWaWV3SXRlbVtdID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIHJlZmVyZW5jZSB0byBjdXJyZW50bHkgc2VsZWN0ZWQgc2Vjb25kVmlld0l0ZW1zIGVsZW1lbnRcbiAgICAgKi9cbiAgICBhY3RpdmVTZWNvbmRWaWV3SXRlbT86IFNlY29uZFZpZXdJdGVtO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGNvbnRhaW5lciBmb3IgW2FtLCBwbV0gbWVyaWRpYW4gdmFsdWVzXG4gICAgICovXG4gICAgbWVyaWRpYW5WaWV3SXRlbXM6IE1lcmlkaWFuVmlld0l0ZW1bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiByZWZlcmVuY2UgdG8gY3VycmVudGx5IHNlbGVjdGVkIG1lcmlkaWFuVmlld0l0ZW1zIGVsZW1lbnRcbiAgICAgKi9cbiAgICBhY3RpdmVNZXJpZGlhblZpZXdJdGVtPzogTWVyaWRpYW5WaWV3SXRlbTtcblxuICAgIC8qKiBDb21wb25lbnQgYXJpYS1sYWJlbCAqL1xuICAgIGdldCBfY29tcG9uZW50QXJpYUxhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aW1lSTE4bkxhYmVscz8uY29tcG9uZW50QXJpYU5hbWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgLy8gVXNlIEBPcHRpb25hbCB0byBhdm9pZCBhbmd1bGFyIGluamVjdGlvbiBlcnJvciBtZXNzYWdlIGFuZCB0aHJvdyBvdXIgb3duIHdoaWNoIGlzIG1vcmUgcHJlY2lzZSBvbmVcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIHJlYWRvbmx5IF9jb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF90aW1lSTE4bkxhYmVsczogVGltZUkxOG5cbiAgICApIHtcbiAgICAgICAgaWYgKCFfZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RhdGVUaW1lQWRhcHRlcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aW1lID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZXRVcFZpZXdHcmlkKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3NldFVwVmlld0dyaWQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFJlYWN0cyBvbmx5IHdoZW4gdGhlcmUgaXMgbWVyaWRpYW4gb3IgdGltZSBpbnB1dCBjaGFuZ2VcbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLm1lcmlkaWFuIHx8IGNoYW5nZXMudGltZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VXBWaWV3R3JpZCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmVsZW1lbnRzQXRPbmNlICYmIGNoYW5nZXMuZWxlbWVudHNBdE9uY2UuY3VycmVudFZhbHVlICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbZWxlbWVudHNBdE9uY2VdIHNob3VsZCBiZSBvZGQgbnVtYmVyJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbHVtbnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IEQpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh0aW1lOiBEKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVmcmVzaENvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IGNvbHVtbi5zZXRWYWx1ZU9mQWN0aXZlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIG1lcmlkaWFuIGNoYW5nZS5cbiAgICAgKiBUaGlzIGltcGxpY2l0bHkgY2hhbmdlcyBob3VycyBieSArLy0gMTJcbiAgICAgKi9cbiAgICBoYW5kbGVNZXJpZGlhbkNoYW5nZShtZXJpZGlhbjogTWVyaWRpYW4pOiB2b2lkIHtcbiAgICAgICAgbGV0IGhvdXJPZmZzZXQ6IG51bWJlciA9IG1lcmlkaWFuID09PSBNZXJpZGlhbi5BTSA/IC0xMiA6IDEyO1xuICAgICAgICBsZXQgY3VycmVudEhvdXIgPSB0aGlzLl9nZXRNb2RlbEhvdXIoKTtcblxuICAgICAgICBpZiAoY3VycmVudEhvdXIgPiAxMiAmJiBtZXJpZGlhbiA9PT0gTWVyaWRpYW4uUE0pIHtcbiAgICAgICAgICAgIGN1cnJlbnRIb3VyIC09IDEyO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRIb3VyID09PSAxMikge1xuICAgICAgICAgICAgY3VycmVudEhvdXIgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRIb3VyIDwgMTIgJiYgbWVyaWRpYW4gPT09IE1lcmlkaWFuLkFNKSB7XG4gICAgICAgICAgICBob3VyT2Zmc2V0ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld0hvdXIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyMywgY3VycmVudEhvdXIgKyBob3VyT2Zmc2V0KSk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVIb3VyQ2hhbmdlKG5ld0hvdXIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlU2Vjb25kQ2hhbmdlKHNlY29uZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGltZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5zZXRTZWNvbmRzKHRoaXMudGltZSwgc2Vjb25kKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQWN0aXZlU2Vjb25kVmlld0l0ZW0oKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnRpbWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlTWludXRlQ2hhbmdlKG1pbnV0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGltZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5zZXRNaW51dGVzKHRoaXMudGltZSwgbWludXRlKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQWN0aXZlTWludXRlVmlld0l0ZW0oKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnRpbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIGNoYW5nZXMgb2YgZGlzcGxheWVkIGhvdXIgdmFsdWUgZnJvbSB0ZW1wbGF0ZS5cbiAgICAgKi9cbiAgICBoYW5kbGVIb3VyQ2hhbmdlKGhvdXI6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnRpbWUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuc2V0SG91cnModGhpcy50aW1lLCBob3VyKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQWN0aXZlSG91clZpZXdJdGVtKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubWVyaWRpYW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUFjdGl2ZU1lcmlkaWFuVmlld0l0ZW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy50aW1lKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZU5leHRDb2x1bW5Gb2N1cyhjb2x1bW46IEZkVGltZUFjdGl2ZVZpZXcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuX2dldFZpc2libGVDb2x1bW5zV2l0aFJ0bCgpO1xuICAgICAgICBsZXQgbmV4dEluZGV4ID0gY29sdW1ucy5pbmRleE9mKGNvbHVtbikgKyAxO1xuICAgICAgICBpZiAobmV4dEluZGV4ID49IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXh0SW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlQWN0aXZlKGNvbHVtbnNbbmV4dEluZGV4XSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVQcmV2aW91c0NvbHVtbkZvY3VzKGNvbHVtbjogRmRUaW1lQWN0aXZlVmlldyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5fZ2V0VmlzaWJsZUNvbHVtbnNXaXRoUnRsKCk7XG4gICAgICAgIGxldCBuZXh0SW5kZXggPSBjb2x1bW5zLmluZGV4T2YoY29sdW1uKSAtIDE7XG4gICAgICAgIGlmIChuZXh0SW5kZXggPCAwKSB7XG4gICAgICAgICAgICBuZXh0SW5kZXggPSBjb2x1bW5zLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VBY3RpdmUoY29sdW1uc1tuZXh0SW5kZXhdKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZUtleURvd25FdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVByZXZpb3VzQ29sdW1uRm9jdXModGhpcy5hY3RpdmVWaWV3KTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQWN0aXZlQ29sdW1uKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0Q29sdW1uRm9jdXModGhpcy5hY3RpdmVWaWV3KTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQWN0aXZlQ29sdW1uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHdyaXRlVmFsdWUodGltZTogRCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRpbWUgfHwgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRpbWUpKSB7XG4gICAgICAgICAgICB0aW1lID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aW1lID0gdGltZTtcblxuICAgICAgICB0aGlzLl9zZXRVcEFjdGl2ZVZpZXdJdGVtcygpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNoYW5nZUFjdGl2ZSh2aWV3OiBGZFRpbWVBY3RpdmVWaWV3KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IHZpZXc7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlzQWN0aXZlKHZpZXc6IEZkVGltZUFjdGl2ZVZpZXcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gdmlldztcbiAgICB9XG5cbiAgICAvKiogQ29uZmlndXJhdGlvbiBmb3IgaG91cnMgY29sdW1uICovXG4gICAgZ2V0SG91cnNDb25maWcoKTogVGltZUNvbHVtbkNvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghdGhpcy5fdGltZUkxOG5MYWJlbHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVjcmVhc2VMYWJlbDogdGhpcy5fdGltZUkxOG5MYWJlbHMuZGVjcmVhc2VIb3Vyc0xhYmVsLFxuICAgICAgICAgICAgaW5jcmVhc2VMYWJlbDogdGhpcy5fdGltZUkxOG5MYWJlbHMuaW5jcmVhc2VIb3Vyc0xhYmVsLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RpbWVJMThuTGFiZWxzLmhyc0xhYmVsLFxuICAgICAgICAgICAgZnVsbExhYmVsOiB0aGlzLl90aW1lSTE4bkxhYmVscy5ob3Vyc0xhYmVsLFxuICAgICAgICAgICAgbmF2aWdhdGlvbkluc3RydWN0aW9uOiB0aGlzLl90aW1lSTE4bkxhYmVscy5uYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQ29uZmlndXJhdGlvbiBmb3IgbWludXRlcyBjb2x1bW4gKi9cbiAgICBnZXRNaW51dGVzQ29uZmlnKCk6IFRpbWVDb2x1bW5Db25maWcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuX3RpbWVJMThuTGFiZWxzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlY3JlYXNlTGFiZWw6IHRoaXMuX3RpbWVJMThuTGFiZWxzLmRlY3JlYXNlTWludXRlc0xhYmVsLFxuICAgICAgICAgICAgaW5jcmVhc2VMYWJlbDogdGhpcy5fdGltZUkxOG5MYWJlbHMuaW5jcmVhc2VNaW51dGVzTGFiZWwsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5fdGltZUkxOG5MYWJlbHMubWluTGFiZWwsXG4gICAgICAgICAgICBmdWxsTGFiZWw6IHRoaXMuX3RpbWVJMThuTGFiZWxzLm1pbnV0ZXNMYWJlbCxcbiAgICAgICAgICAgIG5hdmlnYXRpb25JbnN0cnVjdGlvbjogdGhpcy5fdGltZUkxOG5MYWJlbHMubmF2aWdhdGlvbkluc3RydWN0aW9uXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIENvbmZpZ3VyYXRpb24gZm9yIHNlY29uZHMgY29sdW1uICovXG4gICAgZ2V0U2Vjb25kc0NvbmZpZygpOiBUaW1lQ29sdW1uQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCF0aGlzLl90aW1lSTE4bkxhYmVscykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZWNyZWFzZUxhYmVsOiB0aGlzLl90aW1lSTE4bkxhYmVscy5kZWNyZWFzZVNlY29uZHNMYWJlbCxcbiAgICAgICAgICAgIGluY3JlYXNlTGFiZWw6IHRoaXMuX3RpbWVJMThuTGFiZWxzLmluY3JlYXNlU2Vjb25kc0xhYmVsLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RpbWVJMThuTGFiZWxzLnNlY0xhYmVsLFxuICAgICAgICAgICAgZnVsbExhYmVsOiB0aGlzLl90aW1lSTE4bkxhYmVscy5zZWNvbmRzTGFiZWwsXG4gICAgICAgICAgICBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb246IHRoaXMuX3RpbWVJMThuTGFiZWxzLm5hdmlnYXRpb25JbnN0cnVjdGlvblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBDb25maWd1cmF0aW9uIGZvciBwZXJpb2QgY29sdW1uICovXG4gICAgZ2V0UGVyaW9kQ29uZmlnKCk6IFRpbWVDb2x1bW5Db25maWcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuX3RpbWVJMThuTGFiZWxzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlY3JlYXNlTGFiZWw6IHRoaXMuX3RpbWVJMThuTGFiZWxzLmRlY3JlYXNlUGVyaW9kTGFiZWwsXG4gICAgICAgICAgICBpbmNyZWFzZUxhYmVsOiB0aGlzLl90aW1lSTE4bkxhYmVscy5pbmNyZWFzZVBlcmlvZExhYmVsLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RpbWVJMThuTGFiZWxzLnBlcmlvZExhYmVsLFxuICAgICAgICAgICAgZnVsbExhYmVsOiB0aGlzLl90aW1lSTE4bkxhYmVscy5wZXJpb2RMYWJlbCxcbiAgICAgICAgICAgIG5hdmlnYXRpb25JbnN0cnVjdGlvbjogdGhpcy5fdGltZUkxOG5MYWJlbHMubmF2aWdhdGlvbkluc3RydWN0aW9uXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBmb2N1c0FjdGl2ZUNvbHVtbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKHsgYWN0aXZlIH0pID0+IGFjdGl2ZSk7XG4gICAgICAgIGNvbHVtbj8uZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzT3V0KGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHZpc2libGUgdGltZSBjb2x1bW5zXG4gICAgICogQHJldHVybnMgdmlzaWJsZSBjb2x1bW5zIGxpc3QgQHNlZSB7RmRUaW1lQWN0aXZlVmlld1tdfVxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFZpc2libGVDb2x1bW5zKCk6IEZkVGltZUFjdGl2ZVZpZXdbXSB7XG4gICAgICAgIGNvbnN0IGFsbE9wdGlvbnM6IEFycmF5PFtib29sZWFuLCBGZFRpbWVBY3RpdmVWaWV3XT4gPSBbXG4gICAgICAgICAgICBbdGhpcy5kaXNwbGF5SG91cnMsICdob3VyJ10sXG4gICAgICAgICAgICBbdGhpcy5kaXNwbGF5TWludXRlcywgJ21pbnV0ZSddLFxuICAgICAgICAgICAgW3RoaXMuZGlzcGxheVNlY29uZHMsICdzZWNvbmQnXSxcbiAgICAgICAgICAgIFt0aGlzLm1lcmlkaWFuLCAnbWVyaWRpYW4nXVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gYWxsT3B0aW9ucy5maWx0ZXIoKFtlbmFibGVkXSkgPT4gZW5hYmxlZCkubWFwKChbLCB2aWV3XSkgPT4gdmlldyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHZpc2libGUgY29sdW1ucyB0YWtpbmcgaW50byBhY2NvdW50IFJUTFxuICAgICAqIEByZXR1cm5zIHZpc2libGUgY29sdW1ucyBsaXN0IEBzZWUge0ZkVGltZUFjdGl2ZVZpZXdbXX1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRWaXNpYmxlQ29sdW1uc1dpdGhSdGwoKTogRmRUaW1lQWN0aXZlVmlld1tdIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuX2dldFZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwudmFsdWUgPyBjb2x1bW5zLnJldmVyc2UoKSA6IGNvbHVtbnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRVcFZpZXdHcmlkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RIb3VyVmlld0l0ZW1zKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdE1pbnV0ZVZpZXdJdGVtcygpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RTZWNvbmRWaWV3SXRlbXMoKTtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0TWVyaWRpYW5WaWV3SXRlbXMoKTtcbiAgICAgICAgLy8gdXBkYXRlIHJlZmVyZW5jZSB0byBhY3RpdmUgdmlldyBpdGVtc1xuICAgICAgICB0aGlzLl9zZXRVcEFjdGl2ZVZpZXdJdGVtcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0VXBBY3RpdmVWaWV3SXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUFjdGl2ZUhvdXJWaWV3SXRlbSgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVBY3RpdmVNaW51dGVWaWV3SXRlbSgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVBY3RpdmVTZWNvbmRWaWV3SXRlbSgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVBY3RpdmVNZXJpZGlhblZpZXdJdGVtKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RIb3VyVmlld0l0ZW1zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvdXJWaWV3SXRlbXMgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXJcbiAgICAgICAgICAgIC5nZXRIb3VyTmFtZXMoeyBtZXJpZGlhbjogdGhpcy5tZXJpZGlhbiwgdHdvRGlnaXQ6IHRoaXMua2VlcFR3b0RpZ2l0cyB9KVxuICAgICAgICAgICAgLm1hcCgobmFtZSwgaG91cikgPT4gKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogaG91cixcbiAgICAgICAgICAgICAgICBsYWJlbDogbmFtZVxuICAgICAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0TWludXRlVmlld0l0ZW1zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1pbnV0ZVZpZXdJdGVtcyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlclxuICAgICAgICAgICAgLmdldE1pbnV0ZU5hbWVzKHsgdHdvRGlnaXQ6IHRoaXMua2VlcFR3b0RpZ2l0cyB9KVxuICAgICAgICAgICAgLm1hcCgobmFtZSwgbWludXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBtaW51dGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IG5hbWVcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFNlY29uZFZpZXdJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWNvbmRWaWV3SXRlbXMgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXJcbiAgICAgICAgICAgIC5nZXRTZWNvbmROYW1lcyh7IHR3b0RpZ2l0OiB0aGlzLmtlZXBUd29EaWdpdHMgfSlcbiAgICAgICAgICAgIC5tYXAoKG5hbWUsIHNlY29uZCkgPT4gKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogc2Vjb25kLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBuYW1lXG4gICAgICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RNZXJpZGlhblZpZXdJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgW2FtTGFiZWwsIHBtTGFiZWxdID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldERheVBlcmlvZE5hbWVzKCk7XG4gICAgICAgIHRoaXMubWVyaWRpYW5WaWV3SXRlbXMgPSBbXG4gICAgICAgICAgICB7IHZhbHVlOiBNZXJpZGlhbi5BTSwgbGFiZWw6IGFtTGFiZWwgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6IE1lcmlkaWFuLlBNLCBsYWJlbDogcG1MYWJlbCB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVBY3RpdmVIb3VyVmlld0l0ZW0oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhvdXIgPSB0aGlzLl9nZXRNb2RlbEhvdXIoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVIb3VyVmlld0l0ZW0gPSB0aGlzLmhvdXJWaWV3SXRlbXMuZmluZCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gaG91cik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVBY3RpdmVNaW51dGVWaWV3SXRlbSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWludXRlID0gdGhpcy5fZ2V0TW9kZWxNaW51dGUoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVNaW51dGVWaWV3SXRlbSA9IHRoaXMubWludXRlVmlld0l0ZW1zLmZpbmQoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IG1pbnV0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVBY3RpdmVTZWNvbmRWaWV3SXRlbSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gdGhpcy5fZ2V0TW9kZWxTZWNvbmQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVTZWNvbmRWaWV3SXRlbSA9IHRoaXMuc2Vjb25kVmlld0l0ZW1zLmZpbmQoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IHNlY29uZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVBY3RpdmVNZXJpZGlhblZpZXdJdGVtKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXJpZGlhbiA9IHRoaXMuX2dldERheVBlcmlvZEJ5SG91cigpO1xuICAgICAgICB0aGlzLmFjdGl2ZU1lcmlkaWFuVmlld0l0ZW0gPSB0aGlzLm1lcmlkaWFuVmlld0l0ZW1zLmZpbmQoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IG1lcmlkaWFuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTW9kZWwgaG91cnMgKDAgLSAyMylcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRNb2RlbEhvdXIoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRIb3Vycyh0aGlzLnRpbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNb2RlbCBtaW51dGVzICgwIC0gNTkpXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0TW9kZWxNaW51dGUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKHRoaXMudGltZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1vZGVsIHNlY29uZHMgKDAgLSA1OSlcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRNb2RlbFNlY29uZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFNlY29uZHModGhpcy50aW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2V0IG1lcmlkaWFuIHBlcmlvZCBiYXNlZCBvbiBhIGdpdmVuIGhvdXJzXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0RGF5UGVyaW9kQnlIb3VyKGhvdXIgPSB0aGlzLl9nZXRNb2RlbEhvdXIoKSk6IE1lcmlkaWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUG0oaG91cikgPyBNZXJpZGlhbi5QTSA6IE1lcmlkaWFuLkFNO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNQbShob3VyczogbnVtYmVyID0gdGhpcy5fZ2V0TW9kZWxIb3VyKCkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGhvdXJzID49IDEyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAcmV0dXJucyBkZWZhdWx0IHRpbWUgMDA6MDA6MDBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXREZWZhdWx0VmFsdWUoKTogRCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIudG9kYXkoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmZC10aW1lXCJcbiAgICBbY2xhc3MuaXMtY29tcGFjdF09XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbXBhY3QkIHwgYXN5bmNcIlxuICAgIChrZXlkb3duKT1cImhhbmRsZUtleURvd25FdmVudCgkZXZlbnQpXCJcbiAgICBbY2xhc3MuZmQtdGltZS0tdGFibGV0XT1cInRhYmxldFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJfY29tcG9uZW50QXJpYUxhYmVsIHx8ICgnY29yZVRpbWUuY29tcG9uZW50QXJpYU5hbWUnIHwgZmRUcmFuc2xhdGUpXCJcbj5cbiAgICA8ZmQtdGltZS1jb2x1bW5cbiAgICAgICAgW2FjdGl2ZV09XCJpc0FjdGl2ZSgnaG91cicpXCJcbiAgICAgICAgW3Jvd3NdPVwiaG91clZpZXdJdGVtc1wiXG4gICAgICAgIFtvZmZzZXRdPVwib2Zmc2V0XCJcbiAgICAgICAgW2VsZW1lbnRzQXRPbmNlXT1cImVsZW1lbnRzQXRPbmNlXCJcbiAgICAgICAgW2FjdGl2ZVZhbHVlXT1cImFjdGl2ZUhvdXJWaWV3SXRlbVwiXG4gICAgICAgIFt0aW1lQ29uZmlnXT1cImdldEhvdXJzQ29uZmlnKClcIlxuICAgICAgICBjb2x1bW5UcmFuc2xhdGlvbnNQcmVzZXQ9XCJob3Vyc1wiXG4gICAgICAgIFtzcGlubmVyc109XCJzcGlubmVyQnV0dG9uc1wiXG4gICAgICAgIChhY3RpdmVWYWx1ZUNoYW5nZSk9XCJoYW5kbGVIb3VyQ2hhbmdlKCRldmVudC52YWx1ZS52YWx1ZSlcIlxuICAgICAgICAoYWN0aXZlU3RhdGVDaGFuZ2UpPVwiY2hhbmdlQWN0aXZlKCdob3VyJylcIlxuICAgID48L2ZkLXRpbWUtY29sdW1uPlxuICAgIDxmZC10aW1lLWNvbHVtblxuICAgICAgICAqbmdJZj1cImRpc3BsYXlNaW51dGVzXCJcbiAgICAgICAgW2FjdGl2ZV09XCJpc0FjdGl2ZSgnbWludXRlJylcIlxuICAgICAgICBbcm93c109XCJtaW51dGVWaWV3SXRlbXNcIlxuICAgICAgICBbb2Zmc2V0XT1cIm9mZnNldFwiXG4gICAgICAgIFtlbGVtZW50c0F0T25jZV09XCJlbGVtZW50c0F0T25jZVwiXG4gICAgICAgIFthY3RpdmVWYWx1ZV09XCJhY3RpdmVNaW51dGVWaWV3SXRlbVwiXG4gICAgICAgIFt0aW1lQ29uZmlnXT1cImdldE1pbnV0ZXNDb25maWcoKVwiXG4gICAgICAgIGNvbHVtblRyYW5zbGF0aW9uc1ByZXNldD1cIm1pbnV0ZXNcIlxuICAgICAgICBbc3Bpbm5lcnNdPVwic3Bpbm5lckJ1dHRvbnNcIlxuICAgICAgICAoYWN0aXZlVmFsdWVDaGFuZ2UpPVwiaGFuZGxlTWludXRlQ2hhbmdlKCRldmVudC52YWx1ZS52YWx1ZSlcIlxuICAgICAgICAoYWN0aXZlU3RhdGVDaGFuZ2UpPVwiY2hhbmdlQWN0aXZlKCdtaW51dGUnKVwiXG4gICAgPjwvZmQtdGltZS1jb2x1bW4+XG4gICAgPGZkLXRpbWUtY29sdW1uXG4gICAgICAgICpuZ0lmPVwiZGlzcGxheVNlY29uZHNcIlxuICAgICAgICBbYWN0aXZlXT1cImlzQWN0aXZlKCdzZWNvbmQnKVwiXG4gICAgICAgIFtyb3dzXT1cInNlY29uZFZpZXdJdGVtc1wiXG4gICAgICAgIFtvZmZzZXRdPVwib2Zmc2V0XCJcbiAgICAgICAgW2VsZW1lbnRzQXRPbmNlXT1cImVsZW1lbnRzQXRPbmNlXCJcbiAgICAgICAgW2FjdGl2ZVZhbHVlXT1cImFjdGl2ZVNlY29uZFZpZXdJdGVtXCJcbiAgICAgICAgW3RpbWVDb25maWddPVwiZ2V0U2Vjb25kc0NvbmZpZygpXCJcbiAgICAgICAgY29sdW1uVHJhbnNsYXRpb25zUHJlc2V0PVwic2Vjb25kc1wiXG4gICAgICAgIFtzcGlubmVyc109XCJzcGlubmVyQnV0dG9uc1wiXG4gICAgICAgIChhY3RpdmVWYWx1ZUNoYW5nZSk9XCJoYW5kbGVTZWNvbmRDaGFuZ2UoJGV2ZW50LnZhbHVlLnZhbHVlKVwiXG4gICAgICAgIChhY3RpdmVTdGF0ZUNoYW5nZSk9XCJjaGFuZ2VBY3RpdmUoJ3NlY29uZCcpXCJcbiAgICA+PC9mZC10aW1lLWNvbHVtbj5cbiAgICA8ZmQtdGltZS1jb2x1bW5cbiAgICAgICAgKm5nSWY9XCJtZXJpZGlhblwiXG4gICAgICAgIFthY3RpdmVdPVwiaXNBY3RpdmUoJ21lcmlkaWFuJylcIlxuICAgICAgICBbcm93c109XCJtZXJpZGlhblZpZXdJdGVtc1wiXG4gICAgICAgIFthY3RpdmVWYWx1ZV09XCJhY3RpdmVNZXJpZGlhblZpZXdJdGVtXCJcbiAgICAgICAgW29mZnNldF09XCIwXCJcbiAgICAgICAgW2VsZW1lbnRzQXRPbmNlXT1cImVsZW1lbnRzQXRPbmNlXCJcbiAgICAgICAgW3RpbWVDb25maWddPVwiZ2V0UGVyaW9kQ29uZmlnKClcIlxuICAgICAgICBjb2x1bW5UcmFuc2xhdGlvbnNQcmVzZXQ9XCJwZXJpb2RcIlxuICAgICAgICBbbWVyaWRpYW5dPVwidHJ1ZVwiXG4gICAgICAgIFtzcGlubmVyc109XCJzcGlubmVyQnV0dG9uc1wiXG4gICAgICAgIChhY3RpdmVWYWx1ZUNoYW5nZSk9XCJoYW5kbGVNZXJpZGlhbkNoYW5nZSgkZXZlbnQudmFsdWUudmFsdWUpXCJcbiAgICAgICAgKGFjdGl2ZVN0YXRlQ2hhbmdlKT1cImNoYW5nZUFjdGl2ZSgnbWVyaWRpYW4nKVwiXG4gICAgPjwvZmQtdGltZS1jb2x1bW4+XG48L2Rpdj5cbiJdfQ==
@@ -12,7 +12,7 @@ import { ListFocusItem, FD_LIST_COMPONENT, ListModule } from '@fundamental-ngx/c
12
12
  import * as i8 from '@fundamental-ngx/core/token';
13
13
  import { TokenizerComponent, TokenModule } from '@fundamental-ngx/core/token';
14
14
  import * as i1$1 from '@fundamental-ngx/cdk/utils';
15
- import { isJsObject, isFunction, isString, DestroyedService, RangeSelector, coerceArraySafe, KeyUtil, resizeObservable, TemplateDirective, PipeModule, AutoCompleteModule, DynamicComponentService } from '@fundamental-ngx/cdk/utils';
15
+ import { isJsObject, isFunction, isString, DestroyedService, RangeSelector, coerceArraySafe, KeyUtil, resizeObservable, TemplateDirective, PipeModule, AutoCompleteModule, MultiAnnouncerModule, DynamicComponentService } from '@fundamental-ngx/cdk/utils';
16
16
  import * as i7 from '@fundamental-ngx/i18n';
17
17
  import { I18nModule } from '@fundamental-ngx/i18n';
18
18
  import * as i5 from '@fundamental-ngx/core/popover';
@@ -1295,7 +1295,7 @@ MultiComboboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
1295
1295
  useExisting: MultiComboboxComponent
1296
1296
  },
1297
1297
  DestroyedService
1298
- ], queries: [{ propertyName: "customTemplates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "listComponent", first: true, predicate: FD_LIST_COMPONENT, descendants: true }, { propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true, read: ElementRef }, { propertyName: "mobileControlTemplate", first: true, predicate: ["mobileControlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }, { propertyName: "_tokenizer", first: true, predicate: TokenizerComponent, descendants: true }, { propertyName: "_inputGroup", first: true, predicate: ["inputGroup"], descendants: true, read: ElementRef }], usesInheritance: true, hostDirectives: [{ directive: i2$1.CvaDirective, inputs: ["id", "inputId", "placeholder", "placeholder", "state", "state", "stateMessage", "stateMessage", "disabled", "disabled", "readonly", "readonly", "name", "name"] }, { directive: i3$1.DataSourceDirective, inputs: ["dataSource", "dataSource"], outputs: ["dataChanged", "dataChanged"] }], ngImport: i0, template: "<div class=\"fd-multi-combobox\">\n <ng-container [ngTemplateOutlet]=\"controlTemplate\" *ngIf=\"mobile\"></ng-container>\n\n <fd-popover\n *ngIf=\"!mobile\"\n additionalBodyClass=\"fd-popover-custom-list fd-multi-combobox__list-container\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n [isOpen]=\"isOpen\"\n [triggers]=\"[]\"\n [disabled]=\"this._cva.disabled\"\n [fillControlMode]=\"fillControlMode\"\n >\n <fd-popover-control>\n <ng-container>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </ng-container>\n </fd-popover-control>\n <fd-popover-body [style.width.%]=\"!autoResize && 100\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</div>\n\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n #inputGroup\n [id]=\"this._cva.id + '-input-group-container'\"\n [state]=\"this._cva.state\"\n [buttonFocusable]=\"buttonFocusable\"\n [button]=\"!this._cva.readonly\"\n [glyph]=\"!this._cva.readonly ? 'navigation-down-arrow' : ' '\"\n [isControl]=\"true\"\n [disabled]=\"this._cva.disabled || this._cva.readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"this._cva.disabled || this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [glyphAriaLabel]=\"this._cva.ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n [iconTitle]=\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n (addOnButtonClicked)=\"_addOnClicked($event)\"\n (click)=\"mobile && !isOpen && _onPrimaryButtonClick(false)\"\n (keydown)=\"_navigateByTokens($event)\"\n >\n <fd-tokenizer\n *ngIf=\"_selectedSuggestions\"\n [tokenizerFocusable]=\"false\"\n [compactCollapse]=\"true\"\n #tokenizer\n class=\"fd-multi-combobox-tokenizer-custom\"\n (moreClickedEvent)=\"_moreClicked()\"\n >\n <fd-token\n [readOnly]=\"this._cva.disabled\"\n (onCloseClick)=\"_removeToken(token, $event)\"\n *ngFor=\"let token of _selectedSuggestions\"\n >\n {{ token.label }}\n </fd-token>\n\n <input\n #searchInputElement\n fdkAutoComplete\n (onComplete)=\"_onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"this._cva.ariaLabel\"\n [attr.aria-labelledby]=\"this._cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? this._cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"this._cva.id\"\n [name]=\"this._cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"this._cva.disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"_searchTermChanged()\"\n [placeholder]=\"this._cva.placeholder\"\n (focus)=\"this._cva.onTouched(); tokenizer._showAllTokens()\"\n (blur)=\"!mobile && _onBlur($event); tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [attr.aria-required]=\"this._cva.required\"\n [displayFn]=\"_displayFn\"\n class=\"fd-tokenizer__input\"\n />\n </fd-tokenizer>\n </fd-input-group>\n\n <fd-form-message\n *ngIf=\"mobile && isOpen ? false : !!this._cva.stateMessage\"\n [type]=\"this._cva.state\"\n [innerHtml]=\"this._cva.stateMessage\"\n ></fd-form-message>\n </fd-form-input-message-group>\n</ng-template>\n\n<ng-template #mobileControlTemplate>\n <fd-input-group\n [id]=\"this._cva.id + '-input-group-container'\"\n class=\"fd-multi-combobox-input-group-custom\"\n [state]=\"this._cva.state\"\n [buttonFocusable]=\"false\"\n [isControl]=\"true\"\n [disabled]=\"this._cva.disabled || this._cva.readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"this._cva.disabled || this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [glyphAriaLabel]=\"this._cva.ariaLabel\"\n >\n <input\n fdkAutoComplete\n (onComplete)=\"_onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"this._cva.ariaLabel\"\n [attr.aria-labelledby]=\"this._cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? this._cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"this._cva.id\"\n [name]=\"this._cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"this._cva.disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"_searchTermChanged()\"\n [placeholder]=\"this._cva.placeholder\"\n (focus)=\"this._cva.onTouched()\"\n (blur)=\"!mobile && _onBlur($event)\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [displayFn]=\"_displayFn\"\n />\n </fd-input-group>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n (focusEscapeList)=\"_handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fd-multi-combobox__list fd-list--multi-input\"\n [id]=\"this._cva.id + '-result'\"\n role=\"listbox\"\n [style.max-height]=\"!mobile && maxHeight\"\n [style.min-width]=\"!mobile && minWidth + 'px'\"\n [style.max-width]=\"autoResize && maxWidth + 'px'\"\n [attr.aria-labelledby]=\"this._cva.id + '-search'\"\n aria-multiselectable=\"true\"\n >\n <fd-form-message\n *ngIf=\"!!this._cva.stateMessage\"\n [type]=\"this._cva.state\"\n [innerHtml]=\"this._cva.stateMessage\"\n ></fd-form-message>\n <fd-multi-combobox-select-all-toggler\n *ngIf=\"showSelectAll\"\n [selectAllHandler]=\"_handleSelectAllItems\"\n [valueChanges]=\"selectionChange\"\n [selectedItems]=\"_selectedSuggestions\"\n [flatItems]=\"_flatSuggestions\"\n ></fd-multi-combobox-select-all-toggler>\n <ng-content></ng-content>\n <ng-container *ngIf=\"isGroup\">\n <ng-container *ngFor=\"let group of _suggestions\">\n <ng-container *ngIf=\"!groupItemTemplate\">\n <label fd-list-group-header role=\"group\">\n <span fd-list-title>{{ group.label }}</span>\n </label>\n </ng-container>\n\n <ng-container *ngIf=\"groupItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-container>\n </ng-container>\n\n <li\n *ngFor=\"let optionItem of group.children; let i = index\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile && close()\"\n (keyDown)=\"_onItemKeyDownHandler($event, i)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!isGroup\">\n <li\n *ngFor=\"let optionItem of _suggestions; let i = index\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile && _onOptionClicked($event, i)\"\n (keyDown)=\"_onItemKeyDownHandler($event, i)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n <ng-container\n *ngIf=\"optionItem.selected && !!selectedItemTemplate\"\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n\n <ng-container *ngIf=\"!(optionItem.selected && selectedItemTemplate)\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-container>\n\n <ng-container\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n <ng-container *ngIf=\"!optionItemTemplate\">\n <span\n fd-list-title\n [attr.title]=\"optionItem.label\"\n [innerHTML]=\"optionItem.label | highlight : inputText\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"optionItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n <ng-container *ngIf=\"showSecondaryText\">\n <ng-container *ngIf=\"!secondaryItemTemplate\">\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight : inputText\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"secondaryItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-margin--tiny{margin:.5rem!important}.fd-margin--sm{margin:1rem!important}.fd-margin--md{margin:2rem!important}.fd-margin--lg{margin:3rem!important}.fd-margin--none{margin:0!important}.fd-margin-top--tiny{margin-top:.5rem!important}.fd-margin-top--sm{margin-top:1rem!important}.fd-margin-top--md{margin-top:2rem!important}.fd-margin-top--lg{margin-top:3rem!important}.fd-margin-top--none{margin-top:0!important}.fd-margin-end--tiny{margin-right:.5rem!important}.fd-margin-end--tiny[dir=rtl],[dir=rtl] .fd-margin-end--tiny{margin-left:.5rem!important;margin-right:0!important}.fd-margin-end--sm{margin-right:1rem!important}.fd-margin-end--sm[dir=rtl],[dir=rtl] .fd-margin-end--sm{margin-left:1rem!important;margin-right:0!important}.fd-margin-end--md{margin-right:2rem!important}.fd-margin-end--md[dir=rtl],[dir=rtl] .fd-margin-end--md{margin-left:2rem!important;margin-right:0!important}.fd-margin-end--lg{margin-right:3rem!important}.fd-margin-end--lg[dir=rtl],[dir=rtl] .fd-margin-end--lg{margin-left:3rem!important;margin-right:0!important}.fd-margin-end--none{margin-right:0}.fd-margin-end--none[dir=rtl],[dir=rtl] .fd-margin-end--none{margin-left:0!important}.fd-margin-bottom--tiny{margin-bottom:.5rem!important}.fd-margin-bottom--sm{margin-bottom:1rem!important}.fd-margin-bottom--md{margin-bottom:2rem!important}.fd-margin-bottom--lg{margin-bottom:3rem!important}.fd-margin-bottom--none{margin-bottom:0!important}.fd-margin-begin--tiny{margin-left:.5rem!important}.fd-margin-begin--tiny[dir=rtl],[dir=rtl] .fd-margin-begin--tiny{margin-left:0!important;margin-right:.5rem!important}.fd-margin-begin--sm{margin-left:1rem!important}.fd-margin-begin--sm[dir=rtl],[dir=rtl] .fd-margin-begin--sm{margin-left:0!important;margin-right:1rem!important}.fd-margin-begin--md{margin-left:2rem!important}.fd-margin-begin--md[dir=rtl],[dir=rtl] .fd-margin-begin--md{margin-left:0!important;margin-right:2rem!important}.fd-margin-begin--lg{margin-left:3rem!important}.fd-margin-begin--lg[dir=rtl],[dir=rtl] .fd-margin-begin--lg{margin-left:0!important;margin-right:3rem!important}.fd-margin-begin--none{margin-left:0}.fd-margin-begin--none[dir=rtl],[dir=rtl] .fd-margin-begin--none{margin-right:0!important}.fd-margin-top-bottom--tiny{margin-bottom:.5rem!important;margin-top:.5rem!important}.fd-margin-top-bottom--sm{margin-bottom:1rem!important;margin-top:1rem!important}.fd-margin-top-bottom--md{margin-bottom:2rem!important;margin-top:2rem!important}.fd-margin-top-bottom--lg{margin-bottom:3rem!important;margin-top:3rem!important}.fd-margin-begin-end--tiny{margin-left:.5rem!important;margin-right:.5rem!important}.fd-margin-begin-end--sm{margin-left:1rem!important;margin-right:1rem!important}.fd-margin-begin-end--md{margin-left:2rem!important;margin-right:2rem!important}.fd-margin-begin-end--lg{margin-left:3rem!important;margin-right:3rem!important}.fd-margin-responsive--sm{margin:0 0 1rem!important}.fd-margin-responsive--md{margin:1rem!important}.fd-margin-responsive--lg{margin:1rem 2rem!important}.fd-margin-responsive--xl{margin:1rem 3rem!important}.fd-margin-negative-begin-end--tiny{margin:0 -.5rem!important}.fd-margin-negative-begin-end--sm{margin:0 -1rem!important}.fd-margin-negative-begin-end--md{margin:0 -2rem!important}.fd-margin-negative-begin-end--lg{margin:0 -3rem!important}.fd-multi-combobox-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-combobox-tokenizer-custom:not([class*=\"--cozy\"]):not([class*=\"--condensed\"]),.is-compact .fd-multi-combobox-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-combobox-tokenizer-custom[class*=--compact],.fd-multi-combobox-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-combobox-input-group-custom{display:inline-block}.fd-multi-combobox .fd-popover-custom{display:block}.fd-multi-combobox__list-container .fd-list .fd-list__item.fd-list__group-header{padding:0 1rem}.fd-multi-combobox__list-container .fd-list .fd-list__item .fd-list__title{max-width:inherit}.fd-multi-combobox__list-container .fd-list.fd-list--compact .fd-list__item.fd-list__group-header{padding:0 .5rem}.fd-multi-combobox__list-container fd-form-message{max-width:100%;border-radius:0!important}.fd-dialog__body fd-form-message{display:block;max-width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i5.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i5.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i1$2.CheckboxComponent, selector: "fd-checkbox", inputs: ["ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i7$1.InputGroupComponent, selector: "fd-input-group", inputs: ["inputTemplate", "placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledby", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i7$1.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "component", type: i8.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly", "deleteButtonLabel", "ariaRoleDescription"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "component", type: i8.TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "moreTerm", "open"], outputs: ["moreClickedEvent"] }, { kind: "component", type: i9.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i9.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "component", type: i9.FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: i9.FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen"], outputs: ["isOpenChange"] }, { kind: "component", type: i10.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i10.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }, { kind: "directive", type: i10.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i10.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "directive", type: i10.ListSecondaryDirective, selector: "[fd-list-secondary] ,[fdListSecondary]" }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.AutoCompleteDirective, selector: "[fdkAutoComplete], [fdAutoComplete], [fd-auto-complete]", inputs: ["options", "inputText", "enable", "matcher", "displayFn"], outputs: ["onComplete"] }, { kind: "component", type: SelectAllTogglerComponent, selector: "fd-multi-combobox-select-all-toggler", inputs: ["selectAllHandler", "valueChanges", "selectedItems", "flatItems"] }, { kind: "pipe", type: i7.FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: i1$1.SearchHighlightPipe, name: "highlight" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1298
+ ], queries: [{ propertyName: "customTemplates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "listComponent", first: true, predicate: FD_LIST_COMPONENT, descendants: true }, { propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true, read: ElementRef }, { propertyName: "mobileControlTemplate", first: true, predicate: ["mobileControlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }, { propertyName: "_tokenizer", first: true, predicate: TokenizerComponent, descendants: true }, { propertyName: "_inputGroup", first: true, predicate: ["inputGroup"], descendants: true, read: ElementRef }], usesInheritance: true, hostDirectives: [{ directive: i2$1.CvaDirective, inputs: ["id", "inputId", "placeholder", "placeholder", "state", "state", "stateMessage", "stateMessage", "disabled", "disabled", "readonly", "readonly", "name", "name"] }, { directive: i3$1.DataSourceDirective, inputs: ["dataSource", "dataSource"], outputs: ["dataChanged", "dataChanged"] }], ngImport: i0, template: "<div class=\"fd-multi-combobox\">\n <ng-container [ngTemplateOutlet]=\"controlTemplate\" *ngIf=\"mobile\"></ng-container>\n\n <fd-popover\n *ngIf=\"!mobile\"\n additionalBodyClass=\"fd-popover-custom-list fd-multi-combobox__list-container\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n [isOpen]=\"isOpen\"\n [triggers]=\"[]\"\n [disabled]=\"this._cva.disabled\"\n [fillControlMode]=\"fillControlMode\"\n >\n <fd-popover-control>\n <ng-container>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </ng-container>\n </fd-popover-control>\n <fd-popover-body [style.width.%]=\"!autoResize && 100\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</div>\n\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n #inputGroup\n [id]=\"this._cva.id + '-input-group-container'\"\n [state]=\"this._cva.state\"\n [buttonFocusable]=\"buttonFocusable\"\n [button]=\"!this._cva.readonly\"\n [glyph]=\"!this._cva.readonly ? 'navigation-down-arrow' : ' '\"\n [isControl]=\"true\"\n [disabled]=\"this._cva.disabled || this._cva.readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"this._cva.disabled || this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [glyphAriaLabel]=\"this._cva.ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n [iconTitle]=\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n (addOnButtonClicked)=\"_addOnClicked($event)\"\n (click)=\"mobile && !isOpen && _onPrimaryButtonClick(false)\"\n (keydown)=\"_navigateByTokens($event)\"\n >\n <fd-tokenizer\n *ngIf=\"_selectedSuggestions\"\n [tokenizerFocusable]=\"false\"\n [compactCollapse]=\"true\"\n #tokenizer\n class=\"fd-multi-combobox-tokenizer-custom\"\n (moreClickedEvent)=\"_moreClicked()\"\n >\n <fd-token\n [readOnly]=\"this._cva.disabled\"\n (onCloseClick)=\"_removeToken(token, $event)\"\n *ngFor=\"let token of _selectedSuggestions\"\n >\n {{ token.label }}\n </fd-token>\n\n <input\n #searchInputElement\n fdkAutoComplete\n (onComplete)=\"_onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"this._cva.ariaLabel\"\n [attr.aria-labelledby]=\"this._cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? this._cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"this._cva.id\"\n [name]=\"this._cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"this._cva.disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"_searchTermChanged()\"\n [placeholder]=\"this._cva.placeholder\"\n (focus)=\"this._cva.onTouched(); tokenizer._showAllTokens()\"\n (blur)=\"!mobile && _onBlur($event); tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [attr.aria-required]=\"this._cva.required\"\n [displayFn]=\"_displayFn\"\n class=\"fd-tokenizer__input\"\n fdkMultiAnnouncer\n [multiAnnouncerOptions]=\"_suggestions\"\n />\n </fd-tokenizer>\n </fd-input-group>\n\n <fd-form-message\n *ngIf=\"mobile && isOpen ? false : !!this._cva.stateMessage\"\n [type]=\"this._cva.state\"\n [innerHtml]=\"this._cva.stateMessage\"\n ></fd-form-message>\n </fd-form-input-message-group>\n</ng-template>\n\n<ng-template #mobileControlTemplate>\n <fd-input-group\n [id]=\"this._cva.id + '-input-group-container'\"\n class=\"fd-multi-combobox-input-group-custom\"\n [state]=\"this._cva.state\"\n [buttonFocusable]=\"false\"\n [isControl]=\"true\"\n [disabled]=\"this._cva.disabled || this._cva.readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"this._cva.disabled || this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [glyphAriaLabel]=\"this._cva.ariaLabel\"\n >\n <input\n fdkAutoComplete\n (onComplete)=\"_onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"this._cva.ariaLabel\"\n [attr.aria-labelledby]=\"this._cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? this._cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"this._cva.id\"\n [name]=\"this._cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"this._cva.disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"_searchTermChanged()\"\n [placeholder]=\"this._cva.placeholder\"\n (focus)=\"this._cva.onTouched()\"\n (blur)=\"!mobile && _onBlur($event)\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [displayFn]=\"_displayFn\"\n />\n </fd-input-group>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n (focusEscapeList)=\"_handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fd-multi-combobox__list fd-list--multi-input\"\n [id]=\"this._cva.id + '-result'\"\n role=\"listbox\"\n [style.max-height]=\"!mobile && maxHeight\"\n [style.min-width]=\"!mobile && minWidth + 'px'\"\n [style.max-width]=\"autoResize && maxWidth + 'px'\"\n [attr.aria-labelledby]=\"this._cva.id + '-search'\"\n aria-multiselectable=\"true\"\n >\n <fd-form-message\n *ngIf=\"!!this._cva.stateMessage\"\n [type]=\"this._cva.state\"\n [innerHtml]=\"this._cva.stateMessage\"\n ></fd-form-message>\n <fd-multi-combobox-select-all-toggler\n *ngIf=\"showSelectAll\"\n [selectAllHandler]=\"_handleSelectAllItems\"\n [valueChanges]=\"selectionChange\"\n [selectedItems]=\"_selectedSuggestions\"\n [flatItems]=\"_flatSuggestions\"\n ></fd-multi-combobox-select-all-toggler>\n <ng-content></ng-content>\n <ng-container *ngIf=\"isGroup\">\n <ng-container *ngFor=\"let group of _suggestions\">\n <ng-container *ngIf=\"!groupItemTemplate\">\n <label fd-list-group-header role=\"group\">\n <span fd-list-title>{{ group.label }}</span>\n </label>\n </ng-container>\n\n <ng-container *ngIf=\"groupItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-container>\n </ng-container>\n\n <li\n *ngFor=\"let optionItem of group.children; let i = index\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile && close()\"\n (keyDown)=\"_onItemKeyDownHandler($event, i)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!isGroup\">\n <li\n *ngFor=\"let optionItem of _suggestions; let i = index\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile && _onOptionClicked($event, i)\"\n (keyDown)=\"_onItemKeyDownHandler($event, i)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n <ng-container\n *ngIf=\"optionItem.selected && !!selectedItemTemplate\"\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n\n <ng-container *ngIf=\"!(optionItem.selected && selectedItemTemplate)\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-container>\n\n <ng-container\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n <ng-container *ngIf=\"!optionItemTemplate\">\n <span\n fd-list-title\n [attr.title]=\"optionItem.label\"\n [innerHTML]=\"optionItem.label | highlight : inputText\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"optionItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n <ng-container *ngIf=\"showSecondaryText\">\n <ng-container *ngIf=\"!secondaryItemTemplate\">\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight : inputText\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"secondaryItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-margin--tiny{margin:.5rem!important}.fd-margin--sm{margin:1rem!important}.fd-margin--md{margin:2rem!important}.fd-margin--lg{margin:3rem!important}.fd-margin--none{margin:0!important}.fd-margin-top--tiny{margin-top:.5rem!important}.fd-margin-top--sm{margin-top:1rem!important}.fd-margin-top--md{margin-top:2rem!important}.fd-margin-top--lg{margin-top:3rem!important}.fd-margin-top--none{margin-top:0!important}.fd-margin-end--tiny{margin-right:.5rem!important}.fd-margin-end--tiny[dir=rtl],[dir=rtl] .fd-margin-end--tiny{margin-left:.5rem!important;margin-right:0!important}.fd-margin-end--sm{margin-right:1rem!important}.fd-margin-end--sm[dir=rtl],[dir=rtl] .fd-margin-end--sm{margin-left:1rem!important;margin-right:0!important}.fd-margin-end--md{margin-right:2rem!important}.fd-margin-end--md[dir=rtl],[dir=rtl] .fd-margin-end--md{margin-left:2rem!important;margin-right:0!important}.fd-margin-end--lg{margin-right:3rem!important}.fd-margin-end--lg[dir=rtl],[dir=rtl] .fd-margin-end--lg{margin-left:3rem!important;margin-right:0!important}.fd-margin-end--none{margin-right:0}.fd-margin-end--none[dir=rtl],[dir=rtl] .fd-margin-end--none{margin-left:0!important}.fd-margin-bottom--tiny{margin-bottom:.5rem!important}.fd-margin-bottom--sm{margin-bottom:1rem!important}.fd-margin-bottom--md{margin-bottom:2rem!important}.fd-margin-bottom--lg{margin-bottom:3rem!important}.fd-margin-bottom--none{margin-bottom:0!important}.fd-margin-begin--tiny{margin-left:.5rem!important}.fd-margin-begin--tiny[dir=rtl],[dir=rtl] .fd-margin-begin--tiny{margin-left:0!important;margin-right:.5rem!important}.fd-margin-begin--sm{margin-left:1rem!important}.fd-margin-begin--sm[dir=rtl],[dir=rtl] .fd-margin-begin--sm{margin-left:0!important;margin-right:1rem!important}.fd-margin-begin--md{margin-left:2rem!important}.fd-margin-begin--md[dir=rtl],[dir=rtl] .fd-margin-begin--md{margin-left:0!important;margin-right:2rem!important}.fd-margin-begin--lg{margin-left:3rem!important}.fd-margin-begin--lg[dir=rtl],[dir=rtl] .fd-margin-begin--lg{margin-left:0!important;margin-right:3rem!important}.fd-margin-begin--none{margin-left:0}.fd-margin-begin--none[dir=rtl],[dir=rtl] .fd-margin-begin--none{margin-right:0!important}.fd-margin-top-bottom--tiny{margin-bottom:.5rem!important;margin-top:.5rem!important}.fd-margin-top-bottom--sm{margin-bottom:1rem!important;margin-top:1rem!important}.fd-margin-top-bottom--md{margin-bottom:2rem!important;margin-top:2rem!important}.fd-margin-top-bottom--lg{margin-bottom:3rem!important;margin-top:3rem!important}.fd-margin-begin-end--tiny{margin-left:.5rem!important;margin-right:.5rem!important}.fd-margin-begin-end--sm{margin-left:1rem!important;margin-right:1rem!important}.fd-margin-begin-end--md{margin-left:2rem!important;margin-right:2rem!important}.fd-margin-begin-end--lg{margin-left:3rem!important;margin-right:3rem!important}.fd-margin-responsive--sm{margin:0 0 1rem!important}.fd-margin-responsive--md{margin:1rem!important}.fd-margin-responsive--lg{margin:1rem 2rem!important}.fd-margin-responsive--xl{margin:1rem 3rem!important}.fd-margin-negative-begin-end--tiny{margin:0 -.5rem!important}.fd-margin-negative-begin-end--sm{margin:0 -1rem!important}.fd-margin-negative-begin-end--md{margin:0 -2rem!important}.fd-margin-negative-begin-end--lg{margin:0 -3rem!important}.fd-multi-combobox-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-combobox-tokenizer-custom:not([class*=\"--cozy\"]):not([class*=\"--condensed\"]),.is-compact .fd-multi-combobox-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-combobox-tokenizer-custom[class*=--compact],.fd-multi-combobox-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-combobox-input-group-custom{display:inline-block}.fd-multi-combobox .fd-popover-custom{display:block}.fd-multi-combobox__list-container .fd-list .fd-list__item.fd-list__group-header{padding:0 1rem}.fd-multi-combobox__list-container .fd-list .fd-list__item .fd-list__title{max-width:inherit}.fd-multi-combobox__list-container .fd-list.fd-list--compact .fd-list__item.fd-list__group-header{padding:0 .5rem}.fd-multi-combobox__list-container fd-form-message{max-width:100%;border-radius:0!important}.fd-dialog__body fd-form-message{display:block;max-width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i5.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i5.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i1$2.CheckboxComponent, selector: "fd-checkbox", inputs: ["ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i7$1.InputGroupComponent, selector: "fd-input-group", inputs: ["inputTemplate", "placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledby", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i7$1.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "component", type: i8.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly", "deleteButtonLabel", "ariaRoleDescription"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "component", type: i8.TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "moreTerm", "open"], outputs: ["moreClickedEvent"] }, { kind: "component", type: i9.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i9.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "component", type: i9.FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: i9.FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen"], outputs: ["isOpenChange"] }, { kind: "component", type: i10.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i10.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }, { kind: "directive", type: i10.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i10.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "directive", type: i10.ListSecondaryDirective, selector: "[fd-list-secondary] ,[fdListSecondary]" }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.AutoCompleteDirective, selector: "[fdkAutoComplete], [fdAutoComplete], [fd-auto-complete]", inputs: ["options", "inputText", "enable", "matcher", "displayFn"], outputs: ["onComplete"] }, { kind: "directive", type: i1$1.MultiAnnouncerDirective, selector: "[fdkMultiAnnouncer]", inputs: ["multiAnnouncerOptions"], exportAs: ["fdkMultiAnnouncer"] }, { kind: "component", type: SelectAllTogglerComponent, selector: "fd-multi-combobox-select-all-toggler", inputs: ["selectAllHandler", "valueChanges", "selectedItems", "flatItems"] }, { kind: "pipe", type: i7.FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: i1$1.SearchHighlightPipe, name: "highlight" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1299
1299
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MultiComboboxComponent, decorators: [{
1300
1300
  type: Component,
1301
1301
  args: [{ selector: 'fd-multi-combobox', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [
@@ -1323,7 +1323,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1323
1323
  useExisting: MultiComboboxComponent
1324
1324
  },
1325
1325
  DestroyedService
1326
- ], template: "<div class=\"fd-multi-combobox\">\n <ng-container [ngTemplateOutlet]=\"controlTemplate\" *ngIf=\"mobile\"></ng-container>\n\n <fd-popover\n *ngIf=\"!mobile\"\n additionalBodyClass=\"fd-popover-custom-list fd-multi-combobox__list-container\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n [isOpen]=\"isOpen\"\n [triggers]=\"[]\"\n [disabled]=\"this._cva.disabled\"\n [fillControlMode]=\"fillControlMode\"\n >\n <fd-popover-control>\n <ng-container>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </ng-container>\n </fd-popover-control>\n <fd-popover-body [style.width.%]=\"!autoResize && 100\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</div>\n\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n #inputGroup\n [id]=\"this._cva.id + '-input-group-container'\"\n [state]=\"this._cva.state\"\n [buttonFocusable]=\"buttonFocusable\"\n [button]=\"!this._cva.readonly\"\n [glyph]=\"!this._cva.readonly ? 'navigation-down-arrow' : ' '\"\n [isControl]=\"true\"\n [disabled]=\"this._cva.disabled || this._cva.readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"this._cva.disabled || this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [glyphAriaLabel]=\"this._cva.ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n [iconTitle]=\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n (addOnButtonClicked)=\"_addOnClicked($event)\"\n (click)=\"mobile && !isOpen && _onPrimaryButtonClick(false)\"\n (keydown)=\"_navigateByTokens($event)\"\n >\n <fd-tokenizer\n *ngIf=\"_selectedSuggestions\"\n [tokenizerFocusable]=\"false\"\n [compactCollapse]=\"true\"\n #tokenizer\n class=\"fd-multi-combobox-tokenizer-custom\"\n (moreClickedEvent)=\"_moreClicked()\"\n >\n <fd-token\n [readOnly]=\"this._cva.disabled\"\n (onCloseClick)=\"_removeToken(token, $event)\"\n *ngFor=\"let token of _selectedSuggestions\"\n >\n {{ token.label }}\n </fd-token>\n\n <input\n #searchInputElement\n fdkAutoComplete\n (onComplete)=\"_onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"this._cva.ariaLabel\"\n [attr.aria-labelledby]=\"this._cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? this._cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"this._cva.id\"\n [name]=\"this._cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"this._cva.disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"_searchTermChanged()\"\n [placeholder]=\"this._cva.placeholder\"\n (focus)=\"this._cva.onTouched(); tokenizer._showAllTokens()\"\n (blur)=\"!mobile && _onBlur($event); tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [attr.aria-required]=\"this._cva.required\"\n [displayFn]=\"_displayFn\"\n class=\"fd-tokenizer__input\"\n />\n </fd-tokenizer>\n </fd-input-group>\n\n <fd-form-message\n *ngIf=\"mobile && isOpen ? false : !!this._cva.stateMessage\"\n [type]=\"this._cva.state\"\n [innerHtml]=\"this._cva.stateMessage\"\n ></fd-form-message>\n </fd-form-input-message-group>\n</ng-template>\n\n<ng-template #mobileControlTemplate>\n <fd-input-group\n [id]=\"this._cva.id + '-input-group-container'\"\n class=\"fd-multi-combobox-input-group-custom\"\n [state]=\"this._cva.state\"\n [buttonFocusable]=\"false\"\n [isControl]=\"true\"\n [disabled]=\"this._cva.disabled || this._cva.readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"this._cva.disabled || this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [glyphAriaLabel]=\"this._cva.ariaLabel\"\n >\n <input\n fdkAutoComplete\n (onComplete)=\"_onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"this._cva.ariaLabel\"\n [attr.aria-labelledby]=\"this._cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? this._cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"this._cva.id\"\n [name]=\"this._cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"this._cva.disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"_searchTermChanged()\"\n [placeholder]=\"this._cva.placeholder\"\n (focus)=\"this._cva.onTouched()\"\n (blur)=\"!mobile && _onBlur($event)\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [displayFn]=\"_displayFn\"\n />\n </fd-input-group>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n (focusEscapeList)=\"_handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fd-multi-combobox__list fd-list--multi-input\"\n [id]=\"this._cva.id + '-result'\"\n role=\"listbox\"\n [style.max-height]=\"!mobile && maxHeight\"\n [style.min-width]=\"!mobile && minWidth + 'px'\"\n [style.max-width]=\"autoResize && maxWidth + 'px'\"\n [attr.aria-labelledby]=\"this._cva.id + '-search'\"\n aria-multiselectable=\"true\"\n >\n <fd-form-message\n *ngIf=\"!!this._cva.stateMessage\"\n [type]=\"this._cva.state\"\n [innerHtml]=\"this._cva.stateMessage\"\n ></fd-form-message>\n <fd-multi-combobox-select-all-toggler\n *ngIf=\"showSelectAll\"\n [selectAllHandler]=\"_handleSelectAllItems\"\n [valueChanges]=\"selectionChange\"\n [selectedItems]=\"_selectedSuggestions\"\n [flatItems]=\"_flatSuggestions\"\n ></fd-multi-combobox-select-all-toggler>\n <ng-content></ng-content>\n <ng-container *ngIf=\"isGroup\">\n <ng-container *ngFor=\"let group of _suggestions\">\n <ng-container *ngIf=\"!groupItemTemplate\">\n <label fd-list-group-header role=\"group\">\n <span fd-list-title>{{ group.label }}</span>\n </label>\n </ng-container>\n\n <ng-container *ngIf=\"groupItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-container>\n </ng-container>\n\n <li\n *ngFor=\"let optionItem of group.children; let i = index\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile && close()\"\n (keyDown)=\"_onItemKeyDownHandler($event, i)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!isGroup\">\n <li\n *ngFor=\"let optionItem of _suggestions; let i = index\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile && _onOptionClicked($event, i)\"\n (keyDown)=\"_onItemKeyDownHandler($event, i)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n <ng-container\n *ngIf=\"optionItem.selected && !!selectedItemTemplate\"\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n\n <ng-container *ngIf=\"!(optionItem.selected && selectedItemTemplate)\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-container>\n\n <ng-container\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n <ng-container *ngIf=\"!optionItemTemplate\">\n <span\n fd-list-title\n [attr.title]=\"optionItem.label\"\n [innerHTML]=\"optionItem.label | highlight : inputText\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"optionItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n <ng-container *ngIf=\"showSecondaryText\">\n <ng-container *ngIf=\"!secondaryItemTemplate\">\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight : inputText\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"secondaryItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-margin--tiny{margin:.5rem!important}.fd-margin--sm{margin:1rem!important}.fd-margin--md{margin:2rem!important}.fd-margin--lg{margin:3rem!important}.fd-margin--none{margin:0!important}.fd-margin-top--tiny{margin-top:.5rem!important}.fd-margin-top--sm{margin-top:1rem!important}.fd-margin-top--md{margin-top:2rem!important}.fd-margin-top--lg{margin-top:3rem!important}.fd-margin-top--none{margin-top:0!important}.fd-margin-end--tiny{margin-right:.5rem!important}.fd-margin-end--tiny[dir=rtl],[dir=rtl] .fd-margin-end--tiny{margin-left:.5rem!important;margin-right:0!important}.fd-margin-end--sm{margin-right:1rem!important}.fd-margin-end--sm[dir=rtl],[dir=rtl] .fd-margin-end--sm{margin-left:1rem!important;margin-right:0!important}.fd-margin-end--md{margin-right:2rem!important}.fd-margin-end--md[dir=rtl],[dir=rtl] .fd-margin-end--md{margin-left:2rem!important;margin-right:0!important}.fd-margin-end--lg{margin-right:3rem!important}.fd-margin-end--lg[dir=rtl],[dir=rtl] .fd-margin-end--lg{margin-left:3rem!important;margin-right:0!important}.fd-margin-end--none{margin-right:0}.fd-margin-end--none[dir=rtl],[dir=rtl] .fd-margin-end--none{margin-left:0!important}.fd-margin-bottom--tiny{margin-bottom:.5rem!important}.fd-margin-bottom--sm{margin-bottom:1rem!important}.fd-margin-bottom--md{margin-bottom:2rem!important}.fd-margin-bottom--lg{margin-bottom:3rem!important}.fd-margin-bottom--none{margin-bottom:0!important}.fd-margin-begin--tiny{margin-left:.5rem!important}.fd-margin-begin--tiny[dir=rtl],[dir=rtl] .fd-margin-begin--tiny{margin-left:0!important;margin-right:.5rem!important}.fd-margin-begin--sm{margin-left:1rem!important}.fd-margin-begin--sm[dir=rtl],[dir=rtl] .fd-margin-begin--sm{margin-left:0!important;margin-right:1rem!important}.fd-margin-begin--md{margin-left:2rem!important}.fd-margin-begin--md[dir=rtl],[dir=rtl] .fd-margin-begin--md{margin-left:0!important;margin-right:2rem!important}.fd-margin-begin--lg{margin-left:3rem!important}.fd-margin-begin--lg[dir=rtl],[dir=rtl] .fd-margin-begin--lg{margin-left:0!important;margin-right:3rem!important}.fd-margin-begin--none{margin-left:0}.fd-margin-begin--none[dir=rtl],[dir=rtl] .fd-margin-begin--none{margin-right:0!important}.fd-margin-top-bottom--tiny{margin-bottom:.5rem!important;margin-top:.5rem!important}.fd-margin-top-bottom--sm{margin-bottom:1rem!important;margin-top:1rem!important}.fd-margin-top-bottom--md{margin-bottom:2rem!important;margin-top:2rem!important}.fd-margin-top-bottom--lg{margin-bottom:3rem!important;margin-top:3rem!important}.fd-margin-begin-end--tiny{margin-left:.5rem!important;margin-right:.5rem!important}.fd-margin-begin-end--sm{margin-left:1rem!important;margin-right:1rem!important}.fd-margin-begin-end--md{margin-left:2rem!important;margin-right:2rem!important}.fd-margin-begin-end--lg{margin-left:3rem!important;margin-right:3rem!important}.fd-margin-responsive--sm{margin:0 0 1rem!important}.fd-margin-responsive--md{margin:1rem!important}.fd-margin-responsive--lg{margin:1rem 2rem!important}.fd-margin-responsive--xl{margin:1rem 3rem!important}.fd-margin-negative-begin-end--tiny{margin:0 -.5rem!important}.fd-margin-negative-begin-end--sm{margin:0 -1rem!important}.fd-margin-negative-begin-end--md{margin:0 -2rem!important}.fd-margin-negative-begin-end--lg{margin:0 -3rem!important}.fd-multi-combobox-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-combobox-tokenizer-custom:not([class*=\"--cozy\"]):not([class*=\"--condensed\"]),.is-compact .fd-multi-combobox-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-combobox-tokenizer-custom[class*=--compact],.fd-multi-combobox-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-combobox-input-group-custom{display:inline-block}.fd-multi-combobox .fd-popover-custom{display:block}.fd-multi-combobox__list-container .fd-list .fd-list__item.fd-list__group-header{padding:0 1rem}.fd-multi-combobox__list-container .fd-list .fd-list__item .fd-list__title{max-width:inherit}.fd-multi-combobox__list-container .fd-list.fd-list--compact .fd-list__item.fd-list__group-header{padding:0 .5rem}.fd-multi-combobox__list-container fd-form-message{max-width:100%;border-radius:0!important}.fd-dialog__body fd-form-message{display:block;max-width:100%}\n"] }]
1326
+ ], template: "<div class=\"fd-multi-combobox\">\n <ng-container [ngTemplateOutlet]=\"controlTemplate\" *ngIf=\"mobile\"></ng-container>\n\n <fd-popover\n *ngIf=\"!mobile\"\n additionalBodyClass=\"fd-popover-custom-list fd-multi-combobox__list-container\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n [isOpen]=\"isOpen\"\n [triggers]=\"[]\"\n [disabled]=\"this._cva.disabled\"\n [fillControlMode]=\"fillControlMode\"\n >\n <fd-popover-control>\n <ng-container>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </ng-container>\n </fd-popover-control>\n <fd-popover-body [style.width.%]=\"!autoResize && 100\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</div>\n\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n #inputGroup\n [id]=\"this._cva.id + '-input-group-container'\"\n [state]=\"this._cva.state\"\n [buttonFocusable]=\"buttonFocusable\"\n [button]=\"!this._cva.readonly\"\n [glyph]=\"!this._cva.readonly ? 'navigation-down-arrow' : ' '\"\n [isControl]=\"true\"\n [disabled]=\"this._cva.disabled || this._cva.readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"this._cva.disabled || this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [glyphAriaLabel]=\"this._cva.ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n [iconTitle]=\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n (addOnButtonClicked)=\"_addOnClicked($event)\"\n (click)=\"mobile && !isOpen && _onPrimaryButtonClick(false)\"\n (keydown)=\"_navigateByTokens($event)\"\n >\n <fd-tokenizer\n *ngIf=\"_selectedSuggestions\"\n [tokenizerFocusable]=\"false\"\n [compactCollapse]=\"true\"\n #tokenizer\n class=\"fd-multi-combobox-tokenizer-custom\"\n (moreClickedEvent)=\"_moreClicked()\"\n >\n <fd-token\n [readOnly]=\"this._cva.disabled\"\n (onCloseClick)=\"_removeToken(token, $event)\"\n *ngFor=\"let token of _selectedSuggestions\"\n >\n {{ token.label }}\n </fd-token>\n\n <input\n #searchInputElement\n fdkAutoComplete\n (onComplete)=\"_onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"this._cva.ariaLabel\"\n [attr.aria-labelledby]=\"this._cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? this._cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"this._cva.id\"\n [name]=\"this._cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"this._cva.disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"_searchTermChanged()\"\n [placeholder]=\"this._cva.placeholder\"\n (focus)=\"this._cva.onTouched(); tokenizer._showAllTokens()\"\n (blur)=\"!mobile && _onBlur($event); tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [attr.aria-required]=\"this._cva.required\"\n [displayFn]=\"_displayFn\"\n class=\"fd-tokenizer__input\"\n fdkMultiAnnouncer\n [multiAnnouncerOptions]=\"_suggestions\"\n />\n </fd-tokenizer>\n </fd-input-group>\n\n <fd-form-message\n *ngIf=\"mobile && isOpen ? false : !!this._cva.stateMessage\"\n [type]=\"this._cva.state\"\n [innerHtml]=\"this._cva.stateMessage\"\n ></fd-form-message>\n </fd-form-input-message-group>\n</ng-template>\n\n<ng-template #mobileControlTemplate>\n <fd-input-group\n [id]=\"this._cva.id + '-input-group-container'\"\n class=\"fd-multi-combobox-input-group-custom\"\n [state]=\"this._cva.state\"\n [buttonFocusable]=\"false\"\n [isControl]=\"true\"\n [disabled]=\"this._cva.disabled || this._cva.readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"this._cva.disabled || this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [glyphAriaLabel]=\"this._cva.ariaLabel\"\n >\n <input\n fdkAutoComplete\n (onComplete)=\"_onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"this._cva.ariaLabel\"\n [attr.aria-labelledby]=\"this._cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? this._cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"this._cva.id\"\n [name]=\"this._cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"this._cva.disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"_searchTermChanged()\"\n [placeholder]=\"this._cva.placeholder\"\n (focus)=\"this._cva.onTouched()\"\n (blur)=\"!mobile && _onBlur($event)\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [displayFn]=\"_displayFn\"\n />\n </fd-input-group>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n (focusEscapeList)=\"_handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fd-multi-combobox__list fd-list--multi-input\"\n [id]=\"this._cva.id + '-result'\"\n role=\"listbox\"\n [style.max-height]=\"!mobile && maxHeight\"\n [style.min-width]=\"!mobile && minWidth + 'px'\"\n [style.max-width]=\"autoResize && maxWidth + 'px'\"\n [attr.aria-labelledby]=\"this._cva.id + '-search'\"\n aria-multiselectable=\"true\"\n >\n <fd-form-message\n *ngIf=\"!!this._cva.stateMessage\"\n [type]=\"this._cva.state\"\n [innerHtml]=\"this._cva.stateMessage\"\n ></fd-form-message>\n <fd-multi-combobox-select-all-toggler\n *ngIf=\"showSelectAll\"\n [selectAllHandler]=\"_handleSelectAllItems\"\n [valueChanges]=\"selectionChange\"\n [selectedItems]=\"_selectedSuggestions\"\n [flatItems]=\"_flatSuggestions\"\n ></fd-multi-combobox-select-all-toggler>\n <ng-content></ng-content>\n <ng-container *ngIf=\"isGroup\">\n <ng-container *ngFor=\"let group of _suggestions\">\n <ng-container *ngIf=\"!groupItemTemplate\">\n <label fd-list-group-header role=\"group\">\n <span fd-list-title>{{ group.label }}</span>\n </label>\n </ng-container>\n\n <ng-container *ngIf=\"groupItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-container>\n </ng-container>\n\n <li\n *ngFor=\"let optionItem of group.children; let i = index\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile && close()\"\n (keyDown)=\"_onItemKeyDownHandler($event, i)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!isGroup\">\n <li\n *ngFor=\"let optionItem of _suggestions; let i = index\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile && _onOptionClicked($event, i)\"\n (keyDown)=\"_onItemKeyDownHandler($event, i)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n <ng-container\n *ngIf=\"optionItem.selected && !!selectedItemTemplate\"\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n\n <ng-container *ngIf=\"!(optionItem.selected && selectedItemTemplate)\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-container>\n\n <ng-container\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n <ng-container *ngIf=\"!optionItemTemplate\">\n <span\n fd-list-title\n [attr.title]=\"optionItem.label\"\n [innerHTML]=\"optionItem.label | highlight : inputText\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"optionItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n <ng-container *ngIf=\"showSecondaryText\">\n <ng-container *ngIf=\"!secondaryItemTemplate\">\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight : inputText\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"secondaryItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-margin--tiny{margin:.5rem!important}.fd-margin--sm{margin:1rem!important}.fd-margin--md{margin:2rem!important}.fd-margin--lg{margin:3rem!important}.fd-margin--none{margin:0!important}.fd-margin-top--tiny{margin-top:.5rem!important}.fd-margin-top--sm{margin-top:1rem!important}.fd-margin-top--md{margin-top:2rem!important}.fd-margin-top--lg{margin-top:3rem!important}.fd-margin-top--none{margin-top:0!important}.fd-margin-end--tiny{margin-right:.5rem!important}.fd-margin-end--tiny[dir=rtl],[dir=rtl] .fd-margin-end--tiny{margin-left:.5rem!important;margin-right:0!important}.fd-margin-end--sm{margin-right:1rem!important}.fd-margin-end--sm[dir=rtl],[dir=rtl] .fd-margin-end--sm{margin-left:1rem!important;margin-right:0!important}.fd-margin-end--md{margin-right:2rem!important}.fd-margin-end--md[dir=rtl],[dir=rtl] .fd-margin-end--md{margin-left:2rem!important;margin-right:0!important}.fd-margin-end--lg{margin-right:3rem!important}.fd-margin-end--lg[dir=rtl],[dir=rtl] .fd-margin-end--lg{margin-left:3rem!important;margin-right:0!important}.fd-margin-end--none{margin-right:0}.fd-margin-end--none[dir=rtl],[dir=rtl] .fd-margin-end--none{margin-left:0!important}.fd-margin-bottom--tiny{margin-bottom:.5rem!important}.fd-margin-bottom--sm{margin-bottom:1rem!important}.fd-margin-bottom--md{margin-bottom:2rem!important}.fd-margin-bottom--lg{margin-bottom:3rem!important}.fd-margin-bottom--none{margin-bottom:0!important}.fd-margin-begin--tiny{margin-left:.5rem!important}.fd-margin-begin--tiny[dir=rtl],[dir=rtl] .fd-margin-begin--tiny{margin-left:0!important;margin-right:.5rem!important}.fd-margin-begin--sm{margin-left:1rem!important}.fd-margin-begin--sm[dir=rtl],[dir=rtl] .fd-margin-begin--sm{margin-left:0!important;margin-right:1rem!important}.fd-margin-begin--md{margin-left:2rem!important}.fd-margin-begin--md[dir=rtl],[dir=rtl] .fd-margin-begin--md{margin-left:0!important;margin-right:2rem!important}.fd-margin-begin--lg{margin-left:3rem!important}.fd-margin-begin--lg[dir=rtl],[dir=rtl] .fd-margin-begin--lg{margin-left:0!important;margin-right:3rem!important}.fd-margin-begin--none{margin-left:0}.fd-margin-begin--none[dir=rtl],[dir=rtl] .fd-margin-begin--none{margin-right:0!important}.fd-margin-top-bottom--tiny{margin-bottom:.5rem!important;margin-top:.5rem!important}.fd-margin-top-bottom--sm{margin-bottom:1rem!important;margin-top:1rem!important}.fd-margin-top-bottom--md{margin-bottom:2rem!important;margin-top:2rem!important}.fd-margin-top-bottom--lg{margin-bottom:3rem!important;margin-top:3rem!important}.fd-margin-begin-end--tiny{margin-left:.5rem!important;margin-right:.5rem!important}.fd-margin-begin-end--sm{margin-left:1rem!important;margin-right:1rem!important}.fd-margin-begin-end--md{margin-left:2rem!important;margin-right:2rem!important}.fd-margin-begin-end--lg{margin-left:3rem!important;margin-right:3rem!important}.fd-margin-responsive--sm{margin:0 0 1rem!important}.fd-margin-responsive--md{margin:1rem!important}.fd-margin-responsive--lg{margin:1rem 2rem!important}.fd-margin-responsive--xl{margin:1rem 3rem!important}.fd-margin-negative-begin-end--tiny{margin:0 -.5rem!important}.fd-margin-negative-begin-end--sm{margin:0 -1rem!important}.fd-margin-negative-begin-end--md{margin:0 -2rem!important}.fd-margin-negative-begin-end--lg{margin:0 -3rem!important}.fd-multi-combobox-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-combobox-tokenizer-custom:not([class*=\"--cozy\"]):not([class*=\"--condensed\"]),.is-compact .fd-multi-combobox-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-combobox-tokenizer-custom[class*=--compact],.fd-multi-combobox-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-combobox-input-group-custom{display:inline-block}.fd-multi-combobox .fd-popover-custom{display:block}.fd-multi-combobox__list-container .fd-list .fd-list__item.fd-list__group-header{padding:0 1rem}.fd-multi-combobox__list-container .fd-list .fd-list__item .fd-list__title{max-width:inherit}.fd-multi-combobox__list-container .fd-list.fd-list--compact .fd-list__item.fd-list__group-header{padding:0 .5rem}.fd-multi-combobox__list-container fd-form-message{max-width:100%;border-radius:0!important}.fd-dialog__body fd-form-message{display:block;max-width:100%}\n"] }]
1327
1327
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i1$1.DynamicComponentService }]; }, propDecorators: { showSelectAll: [{
1328
1328
  type: Input
1329
1329
  }], selectedItems: [{
@@ -1420,7 +1420,8 @@ MultiComboboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", ver
1420
1420
  PipeModule,
1421
1421
  AutoCompleteModule,
1422
1422
  ContentDensityModule,
1423
- ToolbarModule], exports: [MultiComboboxComponent] });
1423
+ ToolbarModule,
1424
+ MultiAnnouncerModule], exports: [MultiComboboxComponent] });
1424
1425
  MultiComboboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MultiComboboxModule, providers: [DynamicComponentService], imports: [CommonModule,
1425
1426
  I18nModule,
1426
1427
  PopoverModule,
@@ -1433,7 +1434,8 @@ MultiComboboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", ver
1433
1434
  PipeModule,
1434
1435
  AutoCompleteModule,
1435
1436
  ContentDensityModule,
1436
- ToolbarModule] });
1437
+ ToolbarModule,
1438
+ MultiAnnouncerModule] });
1437
1439
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MultiComboboxModule, decorators: [{
1438
1440
  type: NgModule,
1439
1441
  args: [{
@@ -1450,7 +1452,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1450
1452
  PipeModule,
1451
1453
  AutoCompleteModule,
1452
1454
  ContentDensityModule,
1453
- ToolbarModule
1455
+ ToolbarModule,
1456
+ MultiAnnouncerModule
1454
1457
  ],
1455
1458
  declarations: [MultiComboboxComponent, SelectAllTogglerComponent],
1456
1459
  exports: [MultiComboboxComponent],