@firestitch/filter 18.2.1 → 18.2.3

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.
@@ -67,6 +67,7 @@ export class ItemStore {
67
67
  this._itemsValuesLoaded = false;
68
68
  if (Array.isArray(items)) {
69
69
  this._createItems(items);
70
+ this._setKeywordItem();
70
71
  }
71
72
  }
72
73
  queryParams() {
@@ -306,7 +307,6 @@ export class ItemStore {
306
307
  .pipe(filter((state) => state), takeUntil(this._destroy$))
307
308
  .subscribe(() => {
308
309
  this.updateItemsVisiblity();
309
- this._setKeywordItem();
310
310
  });
311
311
  }
312
312
  _initSortingItems(p) {
@@ -353,4 +353,4 @@ export class ItemStore {
353
353
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ItemStore, decorators: [{
354
354
  type: Injectable
355
355
  }], ctorParameters: () => [] });
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1zdG9yZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9zZXJ2aWNlcy9pdGVtLXN0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBU2pFLE9BQU8sRUFBa0IsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFMUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOztBQVc3RSxNQUFNLE9BQU8sU0FBUztJQUViLFVBQVUsR0FBZ0MsSUFBSSxDQUFDO0lBQy9DLGlCQUFpQixHQUFnQyxJQUFJLENBQUM7SUFDdEQsV0FBVyxHQUFhLElBQUksQ0FBQztJQUM3QixNQUFNLENBQWtCO0lBRXZCLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNy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QVEsQ0FBQyxNQUFNO2dCQUNyQixLQUFLLEVBQUUsZ0JBQWdCO2dCQUN2QixNQUFNLEVBQUU7b0JBQ04sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7b0JBQ25DLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2lCQUN0QzthQUN5QixDQUFDO1lBRTdCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3JELGlCQUFpQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDMUQsQ0FBQztZQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLGdCQUFnQixDQUMzQyxpQkFBaUIsRUFDakIsSUFBSSxFQUNKLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUk7YUFDcEIsS0FBSzthQUNMLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBYSxDQUFDO0lBQ3BELENBQUM7d0dBOWFVLFNBQVM7NEdBQVQsU0FBUzs7NEZBQVQsU0FBUztrQkFEckIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgcGlja0J5IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHR5cGUgeyBGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSAnLi4vZW51bXMvaXRlbS10eXBlLmVudW0nO1xuaW1wb3J0IHsgYnVpbGRRdWVyeVBhcmFtcyB9IGZyb20gJy4uL2hlbHBlcnMvYnVpbGQtcXVlcnktcGFyYW1zJztcbmltcG9ydCB7IGNyZWF0ZUZpbHRlckl0ZW0gfSBmcm9tICcuLi9oZWxwZXJzL2NyZWF0ZS1maWx0ZXItaXRlbSc7XG5pbXBvcnQge1xuICBGaWx0ZXJTb3J0LFxuICBJRmlsdGVyQ29uZmlnSXRlbSxcbiAgU29ydEl0ZW0sXG59IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZXh0ZXJuYWwtcGFyYW1zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJU29ydGluZ0NoYW5nZUV2ZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGaWx0ZXJDb25maWdTZWxlY3RJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pdGVtcy9zZWxlY3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZzRmlsdGVyQ29uZmlnLCBTb3J0QnlGaWVsZCwgU29ydERpcmVjdGlvbkZpZWxkIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbHRlci1jb25maWcnO1xuaW1wb3J0IHsgQmFzZUl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvaXRlbXMvYmFzZS1pdGVtJztcbmltcG9ydCB7IEJhc2VEYXRlUmFuZ2VJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW1zL2RhdGUtcmFuZ2UvYmFzZS1kYXRlLXJhbmdlLWl0ZW0nO1xuaW1wb3J0IHsgUmFuZ2VJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW1zL3JhbmdlLWl0ZW0nO1xuaW1wb3J0IHsgTXVsdGlwbGVTZWxlY3RJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW1zL3NlbGVjdC9tdWx0aXBsZS1zZWxlY3QtaXRlbSc7XG5pbXBvcnQgeyBTaW1wbGVTZWxlY3RJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW1zL3NlbGVjdC9zaW1wbGUtc2VsZWN0LWl0ZW0nO1xuaW1wb3J0IHsgVGV4dEl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvaXRlbXMvdGV4dC1pdGVtJztcblxuXG5pbnRlcmZhY2UgSVZhbHVlQXNRdWVyeSB7XG4gIG9ubHlQcmVzZW50ZWQ/OiBib29sZWFuO1xuICBpdGVtcz86IEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdO1xuICBwZXJzaXN0ZWQ/OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSXRlbVN0b3JlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBwdWJsaWMgc29ydEJ5SXRlbTogQmFzZUl0ZW08SUZpbHRlckNvbmZpZ0l0ZW0+ID0gbnVsbDtcbiAgcHVibGljIHNvcnREaXJlY3Rpb25JdGVtOiBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT4gPSBudWxsO1xuICBwdWJsaWMga2V5d29yZEl0ZW06IFRleHRJdGVtID0gbnVsbDtcbiAgcHVibGljIGZpbHRlcjogRmlsdGVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX3JlYWR5JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIF92aXNpYmxlSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT5bXT4oW10pO1xuICBwcml2YXRlIF9pdGVtcyA9IG5ldyBNYXA8c3RyaW5nLCBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT4+KCk7XG4gIHByaXZhdGUgX2l0ZW1zVmFsdWVzTG9hZGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2hhc0tleXdvcmQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY29uZmlnOiBGc0ZpbHRlckNvbmZpZztcbiAgcHJpdmF0ZSBfaXRlbXNDaGFuZ2UkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICApIHtcbiAgICB0aGlzLl9sYXp5SW5pdCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtcygpOiBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5faXRlbXMudmFsdWVzKCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5uYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUl0ZW1zKCk6IEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUl0ZW1zJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldCB2aXNpYmxlSXRlbXMoaXRlbXM6IEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdKSB7XG4gICAgdGhpcy5fdmlzaWJsZUl0ZW1zJC5uZXh0KGl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUl0ZW1zJCgpOiBPYnNlcnZhYmxlPEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVJdGVtcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0tleXdvcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0tleXdvcmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGl0ZW1zQ2hhbmdlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNDaGFuZ2UkLnBpcGUoZGVib3VuY2VUaW1lKDMwKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlYWR5JCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZHkkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveUl0ZW1zKCk7XG5cbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29uZmlnKGNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXRJdGVtcyhjb25maWcuaXRlbXMpO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1CeU5hbWUobmFtZTogc3RyaW5nKTogQmFzZUl0ZW08SUZpbHRlckNvbmZpZ0l0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXMuZ2V0KG5hbWUpO1xuICB9XG5cbiAgcHVibGljIGluaXRJdGVtcyhpdGVtczogSUZpbHRlckNvbmZpZ0l0ZW1bXSkge1xuICAgIHRoaXMuX2l0ZW1zVmFsdWVzTG9hZGVkID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICB0aGlzLl9jcmVhdGVJdGVtcyhpdGVtcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHF1ZXJ5UGFyYW1zKCk6IEtleVZhbHVlIHtcbiAgICByZXR1cm4gYnVpbGRRdWVyeVBhcmFtcyh0aGlzLnZhbHVlc0FzUXVlcnkoKSwgdGhpcy5pdGVtcyk7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyc0NsZWFyKCkge1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBSYW5nZUl0ZW0pIHtcbiAgICAgICAgaXRlbS5jbGVhclJhbmdlKG51bGwsIGl0ZW0uZGVmYXVsdFZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEJhc2VEYXRlUmFuZ2VJdGVtKSB7XG4gICAgICAgIGl0ZW0uY2xlYXJEYXRlUmFuZ2UobnVsbCwgaXRlbS5kZWZhdWx0VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbS5jbGVhcihpdGVtLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zb3J0QnlJdGVtKSB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLnNvcnQpIHtcbiAgICAgICAgdGhpcy5zb3J0QnlJdGVtLm1vZGVsID0gdGhpcy5fY29uZmlnLnNvcnQudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvcnRCeUl0ZW0uY2xlYXIodGhpcy5zb3J0QnlJdGVtLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc29ydERpcmVjdGlvbkl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuc29ydCkge1xuICAgICAgICB0aGlzLnNvcnREaXJlY3Rpb25JdGVtLm1vZGVsID0gdGhpcy5fY29uZmlnLnNvcnQuZGlyZWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbS5jbGVhcih0aGlzLnNvcnREaXJlY3Rpb25JdGVtLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5rZXl3b3JkSXRlbT8uY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkQXN5bmNWYWx1ZXMoKSB7XG4gICAgdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5oYXNQZW5kaW5nVmFsdWVzKVxuICAgICAgLmZvckVhY2goKGl0ZW0pID0+IGl0ZW0ubG9hZEFzeW5jVmFsdWVzKCkpO1xuICB9XG5cbiAgcHVibGljIGxvYWRBc3luY0RlZmF1bHRzKCk6IHZvaWQge1xuICAgIC8vIGRlZmF1bHQgdmFsdWVzIGNhbiBiZSBhc3luY2hyb25vdXMsIGFuZCB3ZSBtdXN0IGxvYWQgdGhlbSBpZiB0aGVyZSBpcyBubyBwZXJzaXN0ZWQgdmFsdWUgaW5zdGVhZFxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXNUb0JlTG9hZGVkID0gdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5kZWZhdWx0VmFsdWVGblxuICAgICAgICAgICYmIChpdGVtLnBlcnNpc3RlZFZhbHVlID09PSBudWxsIHx8IGl0ZW0ucGVyc2lzdGVkVmFsdWUgPT09IHVuZGVmaW5lZCk7XG4gICAgICB9KTtcblxuICAgIC8vIHNwZWNpYWwgaGFjayBmb3IgaXNvbGF0ZSBtdWx0aXBsZSBzZWxlY3RcbiAgICAvLyB2YWx1ZXMgZm9yIHRoaXMgdHlwZSBvZiBzZWxlY3QgbXVzdCBiZSBwcmVsb2FkZWRcbiAgICAvLyBSZWFkIG1vcmUgaW4gY2xhc3MgTXVsdGlwbGVTZWxlY3RJdGVtLl9pbml0KClcbiAgICBjb25zdCB2YWx1ZXNUb0JlTG9hZGVkID0gdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gKGl0ZW0gaW5zdGFuY2VvZiBNdWx0aXBsZVNlbGVjdEl0ZW0pICYmIGl0ZW0uaGFzUGVuZGluZ1ZhbHVlcyAmJiBpdGVtLmlzb2xhdGU7XG4gICAgICB9KTtcblxuICAgIGlmIChkZWZhdWx0VmFsdWVzVG9CZUxvYWRlZC5sZW5ndGggPiAwIHx8IHZhbHVlc1RvQmVMb2FkZWQubGVuZ3RoID4gMCkge1xuICAgICAgZm9ya0pvaW4oXG4gICAgICAgIFtcbiAgICAgICAgICAuLi5kZWZhdWx0VmFsdWVzVG9CZUxvYWRlZFxuICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5sb2FkRGVmYXVsdFZhbHVlKCkpLFxuXG4gICAgICAgICAgLi4udmFsdWVzVG9CZUxvYWRlZFxuICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICBpdGVtLmxvYWRBc3luY1ZhbHVlcygpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBpdGVtLmxvYWRpbmckXG4gICAgICAgICAgICAgICAgLnBpcGUoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZWFkeSQubmV4dCh0cnVlKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVhZHkkLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNvcnQoKTogRmlsdGVyU29ydCB7XG4gICAgbGV0IHNvcnRCeSA9IHRoaXMuZ2V0U29ydEJ5VmFsdWUoKTtcbiAgICBzb3J0QnkgPSBzb3J0QnkgPT09ICdfX2FsbCcgPyBudWxsIDogc29ydEJ5O1xuXG4gICAgbGV0IHNvcnREaXJlY3Rpb24gPSB0aGlzLmdldFNvcnREaXJlY3Rpb25WYWx1ZSgpO1xuICAgIHNvcnREaXJlY3Rpb24gPSBzb3J0RGlyZWN0aW9uID09PSAnX19hbGwnID8gbnVsbCA6IHNvcnREaXJlY3Rpb247XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHNvcnRCeSxcbiAgICAgIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbixcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldFNvcnRCeVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnNvcnRCeUl0ZW0gPyB0aGlzLnNvcnRCeUl0ZW0ubW9kZWwgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldFNvcnREaXJlY3Rpb25WYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0RGlyZWN0aW9uSXRlbSA/IHRoaXMuc29ydERpcmVjdGlvbkl0ZW0ubW9kZWwgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNvcnQoc29ydDogSVNvcnRpbmdDaGFuZ2VFdmVudCkge1xuICAgIGlmIChzb3J0LnNvcnRCeSkge1xuICAgICAgdGhpcy5zb3J0QnlJdGVtLm1vZGVsID0gc29ydC5zb3J0Qnk7XG4gICAgfVxuXG4gICAgaWYgKHNvcnQuc29ydERpcmVjdGlvbikge1xuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbS5tb2RlbCA9IHNvcnQuc29ydERpcmVjdGlvbjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdmFsdWVzKG9ubHlQcmVzZW50ZWQgPSBmYWxzZSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS52YWx1ZTtcblxuICAgICAgICBpZiAoIW9ubHlQcmVzZW50ZWQgfHwgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBhY2NbaXRlbS5uYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBtb2RlbHMoKTogS2V5VmFsdWUge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgYWNjW2l0ZW0ubmFtZV0gPSBpdGVtLm1vZGVsO1xuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gIH1cblxuICBwdWJsaWMgdmFsdWVzQXNRdWVyeSh7XG4gICAgb25seVByZXNlbnRlZCA9IHRydWUsXG4gICAgaXRlbXMgPSBudWxsLFxuICAgIHBlcnNpc3RlZCA9IGZhbHNlLFxuICB9OiBJVmFsdWVBc1F1ZXJ5ID0ge30pOiBLZXlWYWx1ZSB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG5cbiAgICAoaXRlbXMgfHwgdGhpcy5pdGVtcylcbiAgICAgIC5mb3JFYWNoKChmaWx0ZXJJdGVtOiBCYXNlSXRlbTxhbnk+KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHBlcnNpc3RlZFxuICAgICAgICAgID8gZmlsdGVySXRlbS5wZXJzaXN0YW5jZU9iamVjdFxuICAgICAgICAgIDogZmlsdGVySXRlbS5xdWVyeU9iamVjdDtcblxuICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgdmFsdWVzKTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKG9ubHlQcmVzZW50ZWQpIHtcbiAgICAgIHJldHVybiBwaWNrQnkocGFyYW1zLCAodmFsKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwdWJsaWMgaW5pdChwOiBLZXlWYWx1ZSkge1xuICAgIHRoaXMuaXRlbXNcbiAgICAgIC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGl0ZW0uaW5pdFZhbHVlcyhwW2l0ZW0ubmFtZV0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9pbml0U29ydGluZ0l0ZW1zKHApO1xuICAgIHRoaXMubG9hZEFzeW5jRGVmYXVsdHMoKTtcbiAgICB0aGlzLl9zdWJzY3JpYmVUb0l0ZW1zQ2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUl0ZW1zV2l0aFZhbHVlcyh2YWx1ZXM6IEtleVZhbHVlKSB7XG4gICAgdGhpcy5pdGVtc1xuICAgICAgLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlc1tpdGVtLm5hbWVdKSB7XG4gICAgICAgICAgaXRlbS5tb2RlbCA9IHZhbHVlc1tpdGVtLm5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUmFuZ2VJdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmNsZWFyUmFuZ2UobnVsbCwgaXRlbS5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEJhc2VEYXRlUmFuZ2VJdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmNsZWFyRGF0ZVJhbmdlKG51bGwsIGl0ZW0uZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5jbGVhcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5zb3J0QnlJdGVtKSB7XG4gICAgICB0aGlzLnNvcnRCeUl0ZW0uY2xlYXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydERpcmVjdGlvbkl0ZW0pIHtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0uY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU29ydGluZ0l0ZW1zVmFsdWVzKGl0ZW1zOiBTb3J0SXRlbVtdKSB7XG4gICAgaWYgKCF0aGlzLnNvcnRCeUl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnRCeUl0ZW0udmFsdWVzID0gaXRlbXM7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveUl0ZW1zKCkge1xuICAgIHRoaXMuaXRlbXNcbiAgICAgIC5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLmRlc3Ryb3koKSk7XG4gICAgdGhpcy5zb3J0QnlJdGVtPy5kZXN0cm95KCk7XG4gICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbT8uZGVzdHJveSgpO1xuXG4gICAgdGhpcy5faXRlbXMuY2xlYXIoKTtcbiAgICB0aGlzLnNvcnRCeUl0ZW0gPSBudWxsO1xuICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0gPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvbWUgaXRlbXMgbWlnaHQgbmVlZCB0byBsb2FkIGFzeW5jIHZhbHVlcyBiZWZvcmUgdGhleSB3aWxsIGJlIHNob3duXG4gICAqL1xuICBwdWJsaWMgcHJlcGFyZUl0ZW1zKCkge1xuICAgIGlmICghdGhpcy5faXRlbXNWYWx1ZXNMb2FkZWQpIHtcbiAgICAgIHRoaXMuX2l0ZW1zVmFsdWVzTG9hZGVkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5sb2FkQXN5bmNWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlSXRlbXNWaXNpYmxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy52aXNpYmxlSXRlbXMgPSB0aGlzLml0ZW1zXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5pc1R5cGVLZXl3b3JkICYmICFpdGVtLmhpZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlSXRlbXMoaXRlbXM6IElGaWx0ZXJDb25maWdJdGVtW10pIHtcbiAgICB0aGlzLl9pdGVtcyA9IG5ldyBNYXAoXG4gICAgICBpdGVtc1xuICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlKVxuICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2l0ZW1zLmhhcyhpdGVtLm5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignRmlsdGVyIGluaXQgZXJyb3IuIEl0ZW1zIG5hbWUgbXVzdCBiZSB1bmlxdWUuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJJdGVtID0gY3JlYXRlRmlsdGVySXRlbShpdGVtLCB7IH0sIHRoaXMuZmlsdGVyKTtcblxuICAgICAgICAgIGlmIChmaWx0ZXJJdGVtLnR5cGUgPT09IEl0ZW1UeXBlLktleXdvcmQpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhc0tleXdvcmQgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2l0ZW1zLnNldChpdGVtLm5hbWUsIGZpbHRlckl0ZW0pO1xuXG4gICAgICAgICAgcmV0dXJuIFtpdGVtLm5hbWUsIGZpbHRlckl0ZW1dO1xuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5fY3JlYXRlU29ydGluZ0l0ZW1zKCk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVUb0l0ZW1zQ2hhbmdlcygpIHtcbiAgICB0aGlzLml0ZW1zXG4gICAgICAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpdGVtLnZhbHVlQ2hhbmdlJFxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKGl0ZW0uZGVzdHJveSQpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zQ2hhbmdlJC5uZXh0KGl0ZW0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnNvcnRWYWx1ZXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5zb3J0QnlJdGVtLnZhbHVlQ2hhbmdlJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5zb3J0QnlJdGVtLmRlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9pdGVtc0NoYW5nZSQubmV4dCh0aGlzLnNvcnRCeUl0ZW0pO1xuICAgICAgICB9KTtcblxuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbS52YWx1ZUNoYW5nZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuc29ydERpcmVjdGlvbkl0ZW0uZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2l0ZW1zQ2hhbmdlJC5uZXh0KHRoaXMuc29ydERpcmVjdGlvbkl0ZW0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9sYXp5SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWR5JFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoc3RhdGUpID0+IHN0YXRlKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1zVmlzaWJsaXR5KCk7XG4gICAgICAgIHRoaXMuX3NldEtleXdvcmRJdGVtKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRTb3J0aW5nSXRlbXMocDogS2V5VmFsdWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb3J0QnlJdGVtICYmIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0pIHtcbiAgICAgIHRoaXMuc29ydEJ5SXRlbS5pbml0VmFsdWVzKHBbdGhpcy5zb3J0QnlJdGVtLm5hbWVdKTtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0uaW5pdFZhbHVlcyhwW3RoaXMuc29ydERpcmVjdGlvbkl0ZW0ubmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZVNvcnRpbmdJdGVtcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLnNvcnRWYWx1ZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNvcnRCeUl0ZW0gPSB7XG4gICAgICAgIG5hbWU6IFNvcnRCeUZpZWxkLFxuICAgICAgICB0eXBlOiBJdGVtVHlwZS5TZWxlY3QsXG4gICAgICAgIGxhYmVsOiAnU29ydCBieScsXG4gICAgICAgIHZhbHVlczogdGhpcy5fY29uZmlnLnNvcnRWYWx1ZXMsXG4gICAgICB9IGFzIElGaWx0ZXJDb25maWdTZWxlY3RJdGVtO1xuXG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuc29ydCAmJiB0aGlzLl9jb25maWcuc29ydC52YWx1ZSkge1xuICAgICAgICBzb3J0QnlJdGVtLmRlZmF1bHQgPSB0aGlzLl9jb25maWcuc29ydC52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0QnlJdGVtID0gbmV3IFNpbXBsZVNlbGVjdEl0ZW0oXG4gICAgICAgIHNvcnRCeUl0ZW0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuZmlsdGVyLFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc29ydERpcmVjdGlvbkl0ZW0gPSB7XG4gICAgICAgIG5hbWU6IFNvcnREaXJlY3Rpb25GaWVsZCxcbiAgICAgICAgdHlwZTogSXRlbVR5cGUuU2VsZWN0LFxuICAgICAgICBsYWJlbDogJ1NvcnQgZGlyZWN0aW9uJyxcbiAgICAgICAgdmFsdWVzOiBbXG4gICAgICAgICAgeyBuYW1lOiAnQXNjZW5kaW5nJywgdmFsdWU6ICdhc2MnIH0sXG4gICAgICAgICAgeyBuYW1lOiAnRGVzY2VuZGluZycsIHZhbHVlOiAnZGVzYycgfSxcbiAgICAgICAgXSxcbiAgICAgIH0gYXMgSUZpbHRlckNvbmZpZ1NlbGVjdEl0ZW07XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuc29ydCAmJiB0aGlzLl9jb25maWcuc29ydC5kaXJlY3Rpb24pIHtcbiAgICAgICAgc29ydERpcmVjdGlvbkl0ZW0uZGVmYXVsdCA9IHRoaXMuX2NvbmZpZy5zb3J0LmRpcmVjdGlvbjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbSA9IG5ldyBTaW1wbGVTZWxlY3RJdGVtKFxuICAgICAgICBzb3J0RGlyZWN0aW9uSXRlbSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5maWx0ZXIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEtleXdvcmRJdGVtKCkge1xuICAgIHRoaXMua2V5d29yZEl0ZW0gPSB0aGlzXG4gICAgICAuaXRlbXNcbiAgICAgIC5maW5kKChpdGVtKSA9PiBpdGVtLmlzVHlwZUtleXdvcmQpIGFzIFRleHRJdGVtO1xuICB9XG59XG4iXX0=
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1zdG9yZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9zZXJ2aWNlcy9pdGVtLXN0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBU2pFLE9BQU8sRUFBa0IsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFMUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOztBQVc3RSxNQUFNLE9BQU8sU0FBUztJQUViLFVBQVUsR0FBZ0MsSUFBSSxDQUFDO0lBQy9DLGlCQUFpQixHQUFnQyxJQUFJLENBQUM7SUFDdEQsV0FBVyxHQUFhLElBQUksQ0FBQztJQUM3QixNQUFNLENBQWtCO0lBRXZCLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNy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QVEsQ0FBQyxNQUFNO2dCQUNyQixLQUFLLEVBQUUsZ0JBQWdCO2dCQUN2QixNQUFNLEVBQUU7b0JBQ04sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7b0JBQ25DLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2lCQUN0QzthQUN5QixDQUFDO1lBRTdCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3JELGlCQUFpQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDMUQsQ0FBQztZQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLGdCQUFnQixDQUMzQyxpQkFBaUIsRUFDakIsSUFBSSxFQUNKLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUk7YUFDcEIsS0FBSzthQUNMLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBYSxDQUFDO0lBQ3BELENBQUM7d0dBOWFVLFNBQVM7NEdBQVQsU0FBUzs7NEZBQVQsU0FBUztrQkFEckIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgcGlja0J5IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHR5cGUgeyBGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSAnLi4vZW51bXMvaXRlbS10eXBlLmVudW0nO1xuaW1wb3J0IHsgYnVpbGRRdWVyeVBhcmFtcyB9IGZyb20gJy4uL2hlbHBlcnMvYnVpbGQtcXVlcnktcGFyYW1zJztcbmltcG9ydCB7IGNyZWF0ZUZpbHRlckl0ZW0gfSBmcm9tICcuLi9oZWxwZXJzL2NyZWF0ZS1maWx0ZXItaXRlbSc7XG5pbXBvcnQge1xuICBGaWx0ZXJTb3J0LFxuICBJRmlsdGVyQ29uZmlnSXRlbSxcbiAgU29ydEl0ZW0sXG59IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZXh0ZXJuYWwtcGFyYW1zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJU29ydGluZ0NoYW5nZUV2ZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGaWx0ZXJDb25maWdTZWxlY3RJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pdGVtcy9zZWxlY3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZzRmlsdGVyQ29uZmlnLCBTb3J0QnlGaWVsZCwgU29ydERpcmVjdGlvbkZpZWxkIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbHRlci1jb25maWcnO1xuaW1wb3J0IHsgQmFzZUl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvaXRlbXMvYmFzZS1pdGVtJztcbmltcG9ydCB7IEJhc2VEYXRlUmFuZ2VJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW1zL2RhdGUtcmFuZ2UvYmFzZS1kYXRlLXJhbmdlLWl0ZW0nO1xuaW1wb3J0IHsgUmFuZ2VJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW1zL3JhbmdlLWl0ZW0nO1xuaW1wb3J0IHsgTXVsdGlwbGVTZWxlY3RJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW1zL3NlbGVjdC9tdWx0aXBsZS1zZWxlY3QtaXRlbSc7XG5pbXBvcnQgeyBTaW1wbGVTZWxlY3RJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW1zL3NlbGVjdC9zaW1wbGUtc2VsZWN0LWl0ZW0nO1xuaW1wb3J0IHsgVGV4dEl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvaXRlbXMvdGV4dC1pdGVtJztcblxuXG5pbnRlcmZhY2UgSVZhbHVlQXNRdWVyeSB7XG4gIG9ubHlQcmVzZW50ZWQ/OiBib29sZWFuO1xuICBpdGVtcz86IEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdO1xuICBwZXJzaXN0ZWQ/OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSXRlbVN0b3JlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBwdWJsaWMgc29ydEJ5SXRlbTogQmFzZUl0ZW08SUZpbHRlckNvbmZpZ0l0ZW0+ID0gbnVsbDtcbiAgcHVibGljIHNvcnREaXJlY3Rpb25JdGVtOiBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT4gPSBudWxsO1xuICBwdWJsaWMga2V5d29yZEl0ZW06IFRleHRJdGVtID0gbnVsbDtcbiAgcHVibGljIGZpbHRlcjogRmlsdGVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX3JlYWR5JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIF92aXNpYmxlSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT5bXT4oW10pO1xuICBwcml2YXRlIF9pdGVtcyA9IG5ldyBNYXA8c3RyaW5nLCBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT4+KCk7XG4gIHByaXZhdGUgX2l0ZW1zVmFsdWVzTG9hZGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2hhc0tleXdvcmQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY29uZmlnOiBGc0ZpbHRlckNvbmZpZztcbiAgcHJpdmF0ZSBfaXRlbXNDaGFuZ2UkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICApIHtcbiAgICB0aGlzLl9sYXp5SW5pdCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtcygpOiBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5faXRlbXMudmFsdWVzKCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5uYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUl0ZW1zKCk6IEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUl0ZW1zJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldCB2aXNpYmxlSXRlbXMoaXRlbXM6IEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdKSB7XG4gICAgdGhpcy5fdmlzaWJsZUl0ZW1zJC5uZXh0KGl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUl0ZW1zJCgpOiBPYnNlcnZhYmxlPEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVJdGVtcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0tleXdvcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0tleXdvcmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGl0ZW1zQ2hhbmdlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNDaGFuZ2UkLnBpcGUoZGVib3VuY2VUaW1lKDMwKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlYWR5JCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZHkkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveUl0ZW1zKCk7XG5cbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29uZmlnKGNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXRJdGVtcyhjb25maWcuaXRlbXMpO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1CeU5hbWUobmFtZTogc3RyaW5nKTogQmFzZUl0ZW08SUZpbHRlckNvbmZpZ0l0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXMuZ2V0KG5hbWUpO1xuICB9XG5cbiAgcHVibGljIGluaXRJdGVtcyhpdGVtczogSUZpbHRlckNvbmZpZ0l0ZW1bXSkge1xuICAgIHRoaXMuX2l0ZW1zVmFsdWVzTG9hZGVkID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICB0aGlzLl9jcmVhdGVJdGVtcyhpdGVtcyk7XG4gICAgICB0aGlzLl9zZXRLZXl3b3JkSXRlbSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBxdWVyeVBhcmFtcygpOiBLZXlWYWx1ZSB7XG4gICAgcmV0dXJuIGJ1aWxkUXVlcnlQYXJhbXModGhpcy52YWx1ZXNBc1F1ZXJ5KCksIHRoaXMuaXRlbXMpO1xuICB9XG5cbiAgcHVibGljIGZpbHRlcnNDbGVhcigpIHtcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUmFuZ2VJdGVtKSB7XG4gICAgICAgIGl0ZW0uY2xlYXJSYW5nZShudWxsLCBpdGVtLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCYXNlRGF0ZVJhbmdlSXRlbSkge1xuICAgICAgICBpdGVtLmNsZWFyRGF0ZVJhbmdlKG51bGwsIGl0ZW0uZGVmYXVsdFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0uY2xlYXIoaXRlbS5kZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc29ydEJ5SXRlbSkge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5zb3J0KSB7XG4gICAgICAgIHRoaXMuc29ydEJ5SXRlbS5tb2RlbCA9IHRoaXMuX2NvbmZpZy5zb3J0LnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb3J0QnlJdGVtLmNsZWFyKHRoaXMuc29ydEJ5SXRlbS5kZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNvcnREaXJlY3Rpb25JdGVtKSB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLnNvcnQpIHtcbiAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbS5tb2RlbCA9IHRoaXMuX2NvbmZpZy5zb3J0LmRpcmVjdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0uY2xlYXIodGhpcy5zb3J0RGlyZWN0aW9uSXRlbS5kZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMua2V5d29yZEl0ZW0/LmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgbG9hZEFzeW5jVmFsdWVzKCkge1xuICAgIHRoaXMuaXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaGFzUGVuZGluZ1ZhbHVlcylcbiAgICAgIC5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLmxvYWRBc3luY1ZhbHVlcygpKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkQXN5bmNEZWZhdWx0cygpOiB2b2lkIHtcbiAgICAvLyBkZWZhdWx0IHZhbHVlcyBjYW4gYmUgYXN5bmNocm9ub3VzLCBhbmQgd2UgbXVzdCBsb2FkIHRoZW0gaWYgdGhlcmUgaXMgbm8gcGVyc2lzdGVkIHZhbHVlIGluc3RlYWRcbiAgICBjb25zdCBkZWZhdWx0VmFsdWVzVG9CZUxvYWRlZCA9IHRoaXMuaXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uZGVmYXVsdFZhbHVlRm5cbiAgICAgICAgICAmJiAoaXRlbS5wZXJzaXN0ZWRWYWx1ZSA9PT0gbnVsbCB8fCBpdGVtLnBlcnNpc3RlZFZhbHVlID09PSB1bmRlZmluZWQpO1xuICAgICAgfSk7XG5cbiAgICAvLyBzcGVjaWFsIGhhY2sgZm9yIGlzb2xhdGUgbXVsdGlwbGUgc2VsZWN0XG4gICAgLy8gdmFsdWVzIGZvciB0aGlzIHR5cGUgb2Ygc2VsZWN0IG11c3QgYmUgcHJlbG9hZGVkXG4gICAgLy8gUmVhZCBtb3JlIGluIGNsYXNzIE11bHRpcGxlU2VsZWN0SXRlbS5faW5pdCgpXG4gICAgY29uc3QgdmFsdWVzVG9CZUxvYWRlZCA9IHRoaXMuaXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIChpdGVtIGluc3RhbmNlb2YgTXVsdGlwbGVTZWxlY3RJdGVtKSAmJiBpdGVtLmhhc1BlbmRpbmdWYWx1ZXMgJiYgaXRlbS5pc29sYXRlO1xuICAgICAgfSk7XG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlc1RvQmVMb2FkZWQubGVuZ3RoID4gMCB8fCB2YWx1ZXNUb0JlTG9hZGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvcmtKb2luKFxuICAgICAgICBbXG4gICAgICAgICAgLi4uZGVmYXVsdFZhbHVlc1RvQmVMb2FkZWRcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0ubG9hZERlZmF1bHRWYWx1ZSgpKSxcblxuICAgICAgICAgIC4uLnZhbHVlc1RvQmVMb2FkZWRcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgaXRlbS5sb2FkQXN5bmNWYWx1ZXMoKTtcblxuICAgICAgICAgICAgICByZXR1cm4gaXRlbS5sb2FkaW5nJFxuICAgICAgICAgICAgICAgIC5waXBlKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVhZHkkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlYWR5JC5uZXh0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTb3J0KCk6IEZpbHRlclNvcnQge1xuICAgIGxldCBzb3J0QnkgPSB0aGlzLmdldFNvcnRCeVZhbHVlKCk7XG4gICAgc29ydEJ5ID0gc29ydEJ5ID09PSAnX19hbGwnID8gbnVsbCA6IHNvcnRCeTtcblxuICAgIGxldCBzb3J0RGlyZWN0aW9uID0gdGhpcy5nZXRTb3J0RGlyZWN0aW9uVmFsdWUoKTtcbiAgICBzb3J0RGlyZWN0aW9uID0gc29ydERpcmVjdGlvbiA9PT0gJ19fYWxsJyA/IG51bGwgOiBzb3J0RGlyZWN0aW9uO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBzb3J0QnksXG4gICAgICBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTb3J0QnlWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0QnlJdGVtID8gdGhpcy5zb3J0QnlJdGVtLm1vZGVsIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTb3J0RGlyZWN0aW9uVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0gPyB0aGlzLnNvcnREaXJlY3Rpb25JdGVtLm1vZGVsIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTb3J0KHNvcnQ6IElTb3J0aW5nQ2hhbmdlRXZlbnQpIHtcbiAgICBpZiAoc29ydC5zb3J0QnkpIHtcbiAgICAgIHRoaXMuc29ydEJ5SXRlbS5tb2RlbCA9IHNvcnQuc29ydEJ5O1xuICAgIH1cblxuICAgIGlmIChzb3J0LnNvcnREaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0ubW9kZWwgPSBzb3J0LnNvcnREaXJlY3Rpb247XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHZhbHVlcyhvbmx5UHJlc2VudGVkID0gZmFsc2UpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNcbiAgICAgIC5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW0udmFsdWU7XG5cbiAgICAgICAgaWYgKCFvbmx5UHJlc2VudGVkIHx8IHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgYWNjW2l0ZW0ubmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gIH1cblxuICBwdWJsaWMgbW9kZWxzKCk6IEtleVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGFjY1tpdGVtLm5hbWVdID0gaXRlbS5tb2RlbDtcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICB9XG5cbiAgcHVibGljIHZhbHVlc0FzUXVlcnkoe1xuICAgIG9ubHlQcmVzZW50ZWQgPSB0cnVlLFxuICAgIGl0ZW1zID0gbnVsbCxcbiAgICBwZXJzaXN0ZWQgPSBmYWxzZSxcbiAgfTogSVZhbHVlQXNRdWVyeSA9IHt9KTogS2V5VmFsdWUge1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuXG4gICAgKGl0ZW1zIHx8IHRoaXMuaXRlbXMpXG4gICAgICAuZm9yRWFjaCgoZmlsdGVySXRlbTogQmFzZUl0ZW08YW55PikgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBwZXJzaXN0ZWRcbiAgICAgICAgICA/IGZpbHRlckl0ZW0ucGVyc2lzdGFuY2VPYmplY3RcbiAgICAgICAgICA6IGZpbHRlckl0ZW0ucXVlcnlPYmplY3Q7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHZhbHVlcyk7XG4gICAgICB9KTtcblxuICAgIGlmIChvbmx5UHJlc2VudGVkKSB7XG4gICAgICByZXR1cm4gcGlja0J5KHBhcmFtcywgKHZhbCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsICE9PSB1bmRlZmluZWQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgcHVibGljIGluaXQocDogS2V5VmFsdWUpIHtcbiAgICB0aGlzLml0ZW1zXG4gICAgICAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpdGVtLmluaXRWYWx1ZXMocFtpdGVtLm5hbWVdKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5faW5pdFNvcnRpbmdJdGVtcyhwKTtcbiAgICB0aGlzLmxvYWRBc3luY0RlZmF1bHRzKCk7XG4gICAgdGhpcy5fc3Vic2NyaWJlVG9JdGVtc0NoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVJdGVtc1dpdGhWYWx1ZXModmFsdWVzOiBLZXlWYWx1ZSkge1xuICAgIHRoaXMuaXRlbXNcbiAgICAgIC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZXNbaXRlbS5uYW1lXSkge1xuICAgICAgICAgIGl0ZW0ubW9kZWwgPSB2YWx1ZXNbaXRlbS5uYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFJhbmdlSXRlbSkge1xuICAgICAgICAgICAgaXRlbS5jbGVhclJhbmdlKG51bGwsIGl0ZW0uZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCYXNlRGF0ZVJhbmdlSXRlbSkge1xuICAgICAgICAgICAgaXRlbS5jbGVhckRhdGVSYW5nZShudWxsLCBpdGVtLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc29ydEJ5SXRlbSkge1xuICAgICAgdGhpcy5zb3J0QnlJdGVtLmNsZWFyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnREaXJlY3Rpb25JdGVtKSB7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb25JdGVtLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNvcnRpbmdJdGVtc1ZhbHVlcyhpdGVtczogU29ydEl0ZW1bXSkge1xuICAgIGlmICghdGhpcy5zb3J0QnlJdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0QnlJdGVtLnZhbHVlcyA9IGl0ZW1zO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3lJdGVtcygpIHtcbiAgICB0aGlzLml0ZW1zXG4gICAgICAuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS5kZXN0cm95KCkpO1xuICAgIHRoaXMuc29ydEJ5SXRlbT8uZGVzdHJveSgpO1xuICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0/LmRlc3Ryb3koKTtcblxuICAgIHRoaXMuX2l0ZW1zLmNsZWFyKCk7XG4gICAgdGhpcy5zb3J0QnlJdGVtID0gbnVsbDtcbiAgICB0aGlzLnNvcnREaXJlY3Rpb25JdGVtID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb21lIGl0ZW1zIG1pZ2h0IG5lZWQgdG8gbG9hZCBhc3luYyB2YWx1ZXMgYmVmb3JlIHRoZXkgd2lsbCBiZSBzaG93blxuICAgKi9cbiAgcHVibGljIHByZXBhcmVJdGVtcygpIHtcbiAgICBpZiAoIXRoaXMuX2l0ZW1zVmFsdWVzTG9hZGVkKSB7XG4gICAgICB0aGlzLl9pdGVtc1ZhbHVlc0xvYWRlZCA9IHRydWU7XG5cbiAgICAgIHRoaXMubG9hZEFzeW5jVmFsdWVzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUl0ZW1zVmlzaWJsaXR5KCk6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZUl0ZW1zID0gdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaXNUeXBlS2V5d29yZCAmJiAhaXRlbS5oaWRlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUl0ZW1zKGl0ZW1zOiBJRmlsdGVyQ29uZmlnSXRlbVtdKSB7XG4gICAgdGhpcy5faXRlbXMgPSBuZXcgTWFwKFxuICAgICAgaXRlbXNcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZSlcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9pdGVtcy5oYXMoaXRlbS5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0ZpbHRlciBpbml0IGVycm9yLiBJdGVtcyBuYW1lIG11c3QgYmUgdW5pcXVlLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVySXRlbSA9IGNyZWF0ZUZpbHRlckl0ZW0oaXRlbSwgeyB9LCB0aGlzLmZpbHRlcik7XG5cbiAgICAgICAgICBpZiAoZmlsdGVySXRlbS50eXBlID09PSBJdGVtVHlwZS5LZXl3b3JkKSB7XG4gICAgICAgICAgICB0aGlzLl9oYXNLZXl3b3JkID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9pdGVtcy5zZXQoaXRlbS5uYW1lLCBmaWx0ZXJJdGVtKTtcblxuICAgICAgICAgIHJldHVybiBbaXRlbS5uYW1lLCBmaWx0ZXJJdGVtXTtcbiAgICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuX2NyZWF0ZVNvcnRpbmdJdGVtcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9JdGVtc0NoYW5nZXMoKSB7XG4gICAgdGhpcy5pdGVtc1xuICAgICAgLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgaXRlbS52YWx1ZUNoYW5nZSRcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbChpdGVtLmRlc3Ryb3kkKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pdGVtc0NoYW5nZSQubmV4dChpdGVtKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5zb3J0VmFsdWVzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc29ydEJ5SXRlbS52YWx1ZUNoYW5nZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuc29ydEJ5SXRlbS5kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5faXRlbXNDaGFuZ2UkLm5leHQodGhpcy5zb3J0QnlJdGVtKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0udmFsdWVDaGFuZ2UkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnNvcnREaXJlY3Rpb25JdGVtLmRlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9pdGVtc0NoYW5nZSQubmV4dCh0aGlzLnNvcnREaXJlY3Rpb25JdGVtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbGF6eUluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWFkeSRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVJdGVtc1Zpc2libGl0eSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0U29ydGluZ0l0ZW1zKHA6IEtleVZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc29ydEJ5SXRlbSAmJiB0aGlzLnNvcnREaXJlY3Rpb25JdGVtKSB7XG4gICAgICB0aGlzLnNvcnRCeUl0ZW0uaW5pdFZhbHVlcyhwW3RoaXMuc29ydEJ5SXRlbS5uYW1lXSk7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb25JdGVtLmluaXRWYWx1ZXMocFt0aGlzLnNvcnREaXJlY3Rpb25JdGVtLm5hbWVdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVTb3J0aW5nSXRlbXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5zb3J0VmFsdWVzPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzb3J0QnlJdGVtID0ge1xuICAgICAgICBuYW1lOiBTb3J0QnlGaWVsZCxcbiAgICAgICAgdHlwZTogSXRlbVR5cGUuU2VsZWN0LFxuICAgICAgICBsYWJlbDogJ1NvcnQgYnknLFxuICAgICAgICB2YWx1ZXM6IHRoaXMuX2NvbmZpZy5zb3J0VmFsdWVzLFxuICAgICAgfSBhcyBJRmlsdGVyQ29uZmlnU2VsZWN0SXRlbTtcblxuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLnNvcnQgJiYgdGhpcy5fY29uZmlnLnNvcnQudmFsdWUpIHtcbiAgICAgICAgc29ydEJ5SXRlbS5kZWZhdWx0ID0gdGhpcy5fY29uZmlnLnNvcnQudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc29ydEJ5SXRlbSA9IG5ldyBTaW1wbGVTZWxlY3RJdGVtKFxuICAgICAgICBzb3J0QnlJdGVtLFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLmZpbHRlcixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNvcnREaXJlY3Rpb25JdGVtID0ge1xuICAgICAgICBuYW1lOiBTb3J0RGlyZWN0aW9uRmllbGQsXG4gICAgICAgIHR5cGU6IEl0ZW1UeXBlLlNlbGVjdCxcbiAgICAgICAgbGFiZWw6ICdTb3J0IGRpcmVjdGlvbicsXG4gICAgICAgIHZhbHVlczogW1xuICAgICAgICAgIHsgbmFtZTogJ0FzY2VuZGluZycsIHZhbHVlOiAnYXNjJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ0Rlc2NlbmRpbmcnLCB2YWx1ZTogJ2Rlc2MnIH0sXG4gICAgICAgIF0sXG4gICAgICB9IGFzIElGaWx0ZXJDb25maWdTZWxlY3RJdGVtO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLnNvcnQgJiYgdGhpcy5fY29uZmlnLnNvcnQuZGlyZWN0aW9uKSB7XG4gICAgICAgIHNvcnREaXJlY3Rpb25JdGVtLmRlZmF1bHQgPSB0aGlzLl9jb25maWcuc29ydC5kaXJlY3Rpb247XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0gPSBuZXcgU2ltcGxlU2VsZWN0SXRlbShcbiAgICAgICAgc29ydERpcmVjdGlvbkl0ZW0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuZmlsdGVyLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRLZXl3b3JkSXRlbSgpIHtcbiAgICB0aGlzLmtleXdvcmRJdGVtID0gdGhpc1xuICAgICAgLml0ZW1zXG4gICAgICAuZmluZCgoaXRlbSkgPT4gaXRlbS5pc1R5cGVLZXl3b3JkKSBhcyBUZXh0SXRlbTtcbiAgfVxufVxuIl19
@@ -1537,6 +1537,7 @@ class ItemStore {
1537
1537
  this._itemsValuesLoaded = false;
1538
1538
  if (Array.isArray(items)) {
1539
1539
  this._createItems(items);
1540
+ this._setKeywordItem();
1540
1541
  }
1541
1542
  }
1542
1543
  queryParams() {
@@ -1776,7 +1777,6 @@ class ItemStore {
1776
1777
  .pipe(filter$1((state) => state), takeUntil(this._destroy$))
1777
1778
  .subscribe(() => {
1778
1779
  this.updateItemsVisiblity();
1779
- this._setKeywordItem();
1780
1780
  });
1781
1781
  }
1782
1782
  _initSortingItems(p) {
@@ -4270,7 +4270,7 @@ class FilterComponent {
4270
4270
  _config = null;
4271
4271
  _sort;
4272
4272
  _filtersBtnVisible$ = new BehaviorSubject(true);
4273
- _keywordVisible$ = new BehaviorSubject(true);
4273
+ _keywordVisible$ = new BehaviorSubject(false);
4274
4274
  _hasFilterChips$ = new BehaviorSubject(false);
4275
4275
  _keyword$ = new Subject();
4276
4276
  _destroy$ = new Subject();
@@ -4336,17 +4336,21 @@ class FilterComponent {
4336
4336
  get filtersBtnVisible$() {
4337
4337
  return this._filtersBtnVisible$.asObservable();
4338
4338
  }
4339
- get keywordVisible$() {
4340
- return this._keywordVisible$.asObservable()
4341
- .pipe(map((visible) => {
4342
- return visible && this._itemStore.hasKeyword;
4339
+ get inlineToolbar$() {
4340
+ return combineLatest({
4341
+ keywordVisible: this._keywordVisible$.asObservable(),
4342
+ activeFilter: of(this.savedFiltersController.enabled),
4343
+ })
4344
+ .pipe(map(({ keywordVisible, activeFilter }) => {
4345
+ return !keywordVisible && !activeFilter;
4343
4346
  }));
4344
4347
  }
4345
- get keywordNotVisible$() {
4346
- return this._keywordVisible$.asObservable()
4347
- .pipe(map((visible) => {
4348
- return !visible;
4349
- }));
4348
+ get notInlineToolbar$() {
4349
+ return this.inlineToolbar$
4350
+ .pipe(map((inline) => !inline));
4351
+ }
4352
+ get keywordVisible$() {
4353
+ return this._keywordVisible$.asObservable();
4350
4354
  }
4351
4355
  get actionsVisible$() {
4352
4356
  return this._actions.visible$;
@@ -4370,12 +4374,7 @@ class FilterComponent {
4370
4374
  return this._savedFilterController;
4371
4375
  }
4372
4376
  ngOnInit() {
4373
- // Avoid ngChanges error
4374
- setTimeout(() => {
4375
- if (this.config.autofocus) {
4376
- this.focus();
4377
- }
4378
- });
4377
+ this._initAutoFocus();
4379
4378
  this._initAutoReload();
4380
4379
  this._listenInputChanges();
4381
4380
  this._listenInternalItemsChange();
@@ -4739,6 +4738,14 @@ class FilterComponent {
4739
4738
  _initKeywordVisibility() {
4740
4739
  this._keywordVisible$.next(!!this.keywordItem && !this.keywordItem?.hide);
4741
4740
  }
4741
+ _initAutoFocus() {
4742
+ // Avoid ngChanges error
4743
+ setTimeout(() => {
4744
+ if (this.config.autofocus) {
4745
+ this.focus();
4746
+ }
4747
+ });
4748
+ }
4742
4749
  _listenInternalItemsChange() {
4743
4750
  this._itemStore
4744
4751
  .itemsChange$
@@ -4785,7 +4792,7 @@ class FilterComponent {
4785
4792
  ItemStore,
4786
4793
  SavedFilterController,
4787
4794
  ActionsController,
4788
- ], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true }], viewQueries: [{ propertyName: "keywordMatInput", first: true, predicate: ["keywordMatInput"], descendants: true, read: MatInput }, { propertyName: "reloadEl", first: true, predicate: ["reloadEl"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"filter-container\">\n @if (keywordVisible$ | async) {\n <ng-container *ngTemplateOutlet=\"heading\"></ng-container>\n }\n <div class=\"filter-inner-container\">\n @if (keywordVisible$ | async) {\n <div class=\"filter-keyword\">\n <mat-form-field\n class=\"search-form-field form-field-padless\"\n [ngClass]=\"{\n 'has-keyword': !!keyword\n }\">\n <span\n matPrefix\n class=\"icon\">\n <mat-icon matPrefix>\n search\n </mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </div>\n } @else {\n <div>\n @if (keywordNotVisible$ | async) {\n <ng-container *ngTemplateOutlet=\"heading\"></ng-container>\n }\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n }\n @if (savedFiltersController.enabled) {\n <fs-saved-filter-autocomplete-chips [savedFiltersController]=\"savedFiltersController\"></fs-saved-filter-autocomplete-chips>\n }\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n @if (keywordVisible$ | async) {\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n }\n</div>\n<ng-template #filterStatusBarChips>\n @if (statusBar) {\n <div\n class=\"filter-status-container\"\n [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div\n class=\"filter-status\"\n #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n }\n @if (config.chips && hasFilterChips$ | async) {\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n }\n</ng-template>\n<ng-template #filterActions>\n @if (actionsVisible$ | async) {\n <div class=\"filter-actions\">\n <fs-filter-actions\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n }\n</ng-template>\n<ng-template #filterToolbar>\n @if (config.reload || config.autoReload || ((filtersBtnVisible$ | async) && hasVisibleItemOrSorting)) {\n <div class=\"filter-toolbar\">\n @if ((filtersBtnVisible$ | async) && hasVisibleItemOrSorting) {\n <a\n mat-icon-button\n class=\"button-filters\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n @if (config.button.icon) {\n <mat-icon svgIcon=\"filterOutline\"></mat-icon>\n }\n {{ config.button.label }}\n </a>\n }\n @if (config.reload) {\n <a\n mat-icon-button\n (click)=\"reload($event)\"\n class=\"button-reload\">\n <mat-icon #reloadEl>\n refresh\n </mat-icon>\n </a>\n }\n @if (config.autoReload) {\n <div class=\"filter-reload\">\n @if (config.autoReload) {\n <mat-slide-toggle\n name=\"autoReload\"\n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n <span>\n Auto refresh\n </span>\n </mat-slide-toggle>\n }\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template #heading>\n @if (config.heading) {\n <div class=\"heading\">\n <h2>\n {{ config.heading }}\n </h2>\n <div class=\"subheading\">\n {{ config.subheading }}\n </div>\n </div>\n }\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:18px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;margin-right:3px}.filter-inner-container .filter-keyword mat-form-field.search-form-field{max-width:100%;width:250px;margin-top:0}.filter-inner-container .filter-keyword mat-form-field.search-form-field .icon{margin-left:10px;color:#626262}.filter-inner-container .filter-keyword mat-form-field.search-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.filter-actions{display:flex;align-items:center;flex:1;justify-content:flex-end}.filter-toolbar{white-space:nowrap;display:flex;align-items:center}.filter-toolbar .button-filters,.filter-toolbar .button-reload{display:flex;width:40px;padding:8px;height:40px;overflow:hidden}.filter-toolbar .button-filters ::ng-deep svg,.filter-toolbar .button-reload ::ng-deep svg{display:flex}.filter-toolbar .filter-reload{margin-left:10px;display:flex;align-items:center}.filter-toolbar .filter-reload .auto-reload{margin-right:5px}.filter-toolbar .filter-reload .auto-reload span{font-size:80%}.heading{margin-right:10px}.heading h2{margin:0}.heading h2+.subheading{margin:0}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin:4px 0;display:flex;flex-wrap:wrap;gap:5px}@media screen and (min-width: 1200px){html.fs-filter-open body{margin-right:350px}}html.fs-filter-open{scrollbar-width:none}:host ::ng-deep .auto-reload.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(12px,0,0)}:host ::ng-deep .auto-reload:not(.mat-checked) .mat-slide-toggle-content{color:#ccc}:host ::ng-deep .auto-reload .mat-slide-toggle-thumb,:host ::ng-deep .auto-reload .mat-slide-toggle-thumb-container{height:15px;width:15px}:host ::ng-deep .auto-reload .mat-slide-toggle-content{font-size:90%}:host ::ng-deep .auto-reload .mat-slide-toggle-bar{width:26px;height:10px;border-radius:10px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FsSavedFilterAutocompleteChipsComponent, selector: "fs-saved-filter-autocomplete-chips", inputs: ["savedFiltersController"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "ngmodule", type: FsClearModule }, { kind: "component", type: i3$3.FsClearComponent, selector: "[fsClear]", inputs: ["ngModel", "visible", "fsClear"], outputs: ["ngModelChange", "cleared"] }, { kind: "component", type: FsFilterChipsComponent, selector: "fs-filter-chips", inputs: ["filters"] }, { kind: "component", type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: ["kebabActions", "actions"] }, { kind: "component", type: MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4795
+ ], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true }], viewQueries: [{ propertyName: "keywordMatInput", first: true, predicate: ["keywordMatInput"], descendants: true, read: MatInput }, { propertyName: "reloadEl", first: true, predicate: ["reloadEl"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"filter-container\">\n @if (notInlineToolbar$ | async) {\n <ng-container *ngTemplateOutlet=\"heading\"></ng-container>\n }\n <div class=\"filter-inner-container\">\n @if (notInlineToolbar$ | async) {\n <div class=\"filter-inner-inputs\">\n @if (keywordVisible$ | async) {\n <mat-form-field\n class=\"search-form-field form-field-padless\"\n [ngClass]=\"{\n 'has-keyword': !!keyword\n }\">\n <span\n matPrefix\n class=\"icon\">\n <mat-icon matPrefix>\n search\n </mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n }\n @if (savedFiltersController.enabled) {\n <fs-saved-filter-autocomplete-chips [savedFiltersController]=\"savedFiltersController\"></fs-saved-filter-autocomplete-chips>\n }\n </div>\n } @else {\n <div>\n <ng-container *ngTemplateOutlet=\"heading\"></ng-container>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n }\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n @if (notInlineToolbar$ | async) {\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n }\n</div>\n<ng-template #filterStatusBarChips>\n @if (statusBar) {\n <div\n class=\"filter-status-container\"\n [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div\n class=\"filter-status\"\n #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n }\n @if (config.chips && hasFilterChips$ | async) {\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n }\n</ng-template>\n<ng-template #filterActions>\n @if (actionsVisible$ | async) {\n <div class=\"filter-actions\">\n <fs-filter-actions\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n }\n</ng-template>\n<ng-template #filterToolbar>\n @if (config.reload || config.autoReload || ((filtersBtnVisible$ | async) && hasVisibleItemOrSorting)) {\n <div class=\"filter-toolbar\">\n @if ((filtersBtnVisible$ | async) && hasVisibleItemOrSorting) {\n <a\n mat-icon-button\n class=\"button-filters\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n @if (config.button.icon) {\n <mat-icon svgIcon=\"filterOutline\"></mat-icon>\n }\n {{ config.button.label }}\n </a>\n }\n @if (config.reload) {\n <a\n mat-icon-button\n (click)=\"reload($event)\"\n class=\"button-reload\">\n <mat-icon #reloadEl>\n refresh\n </mat-icon>\n </a>\n }\n @if (config.autoReload) {\n <div class=\"filter-reload\">\n @if (config.autoReload) {\n <mat-slide-toggle\n name=\"autoReload\"\n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n <span>\n Auto refresh\n </span>\n </mat-slide-toggle>\n }\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template #heading>\n @if (config.heading) {\n <div class=\"heading\">\n <h2>\n {{ config.heading }}\n </h2>\n <div class=\"subheading\">\n {{ config.subheading }}\n </div>\n </div>\n }\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:18px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-inner-inputs{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;gap:5px}.filter-inner-container .filter-inner-inputs mat-form-field.search-form-field{max-width:100%;width:250px;margin-top:0}.filter-inner-container .filter-inner-inputs mat-form-field.search-form-field .icon{margin-left:10px;color:#626262}.filter-inner-container .filter-inner-inputs mat-form-field.search-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.filter-actions{display:flex;align-items:center;flex:1;justify-content:flex-end}.filter-toolbar{white-space:nowrap;display:flex;align-items:center}.filter-toolbar .button-filters,.filter-toolbar .button-reload{display:flex;width:40px;padding:8px;height:40px;overflow:hidden}.filter-toolbar .button-filters ::ng-deep svg,.filter-toolbar .button-reload ::ng-deep svg{display:flex}.filter-toolbar .filter-reload{margin-left:10px;display:flex;align-items:center}.filter-toolbar .filter-reload .auto-reload{margin-right:5px}.filter-toolbar .filter-reload .auto-reload span{font-size:80%}.heading{margin-right:10px}.heading h2{margin:0}.heading h2+.subheading{margin:0}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin:4px 0;display:flex;flex-wrap:wrap;gap:5px}@media screen and (min-width: 1200px){html.fs-filter-open body{margin-right:350px}}html.fs-filter-open{scrollbar-width:none}:host ::ng-deep .auto-reload.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(12px,0,0)}:host ::ng-deep .auto-reload:not(.mat-checked) .mat-slide-toggle-content{color:#ccc}:host ::ng-deep .auto-reload .mat-slide-toggle-thumb,:host ::ng-deep .auto-reload .mat-slide-toggle-thumb-container{height:15px;width:15px}:host ::ng-deep .auto-reload .mat-slide-toggle-content{font-size:90%}:host ::ng-deep .auto-reload .mat-slide-toggle-bar{width:26px;height:10px;border-radius:10px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FsSavedFilterAutocompleteChipsComponent, selector: "fs-saved-filter-autocomplete-chips", inputs: ["savedFiltersController"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "ngmodule", type: FsClearModule }, { kind: "component", type: i3$3.FsClearComponent, selector: "[fsClear]", inputs: ["ngModel", "visible", "fsClear"], outputs: ["ngModelChange", "cleared"] }, { kind: "component", type: FsFilterChipsComponent, selector: "fs-filter-chips", inputs: ["filters"] }, { kind: "component", type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: ["kebabActions", "actions"] }, { kind: "component", type: MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4789
4796
  }
4790
4797
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, decorators: [{
4791
4798
  type: Component,
@@ -4814,7 +4821,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4814
4821
  MatIconAnchor,
4815
4822
  MatSlideToggle,
4816
4823
  AsyncPipe,
4817
- ], template: "<div class=\"filter-container\">\n @if (keywordVisible$ | async) {\n <ng-container *ngTemplateOutlet=\"heading\"></ng-container>\n }\n <div class=\"filter-inner-container\">\n @if (keywordVisible$ | async) {\n <div class=\"filter-keyword\">\n <mat-form-field\n class=\"search-form-field form-field-padless\"\n [ngClass]=\"{\n 'has-keyword': !!keyword\n }\">\n <span\n matPrefix\n class=\"icon\">\n <mat-icon matPrefix>\n search\n </mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </div>\n } @else {\n <div>\n @if (keywordNotVisible$ | async) {\n <ng-container *ngTemplateOutlet=\"heading\"></ng-container>\n }\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n }\n @if (savedFiltersController.enabled) {\n <fs-saved-filter-autocomplete-chips [savedFiltersController]=\"savedFiltersController\"></fs-saved-filter-autocomplete-chips>\n }\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n @if (keywordVisible$ | async) {\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n }\n</div>\n<ng-template #filterStatusBarChips>\n @if (statusBar) {\n <div\n class=\"filter-status-container\"\n [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div\n class=\"filter-status\"\n #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n }\n @if (config.chips && hasFilterChips$ | async) {\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n }\n</ng-template>\n<ng-template #filterActions>\n @if (actionsVisible$ | async) {\n <div class=\"filter-actions\">\n <fs-filter-actions\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n }\n</ng-template>\n<ng-template #filterToolbar>\n @if (config.reload || config.autoReload || ((filtersBtnVisible$ | async) && hasVisibleItemOrSorting)) {\n <div class=\"filter-toolbar\">\n @if ((filtersBtnVisible$ | async) && hasVisibleItemOrSorting) {\n <a\n mat-icon-button\n class=\"button-filters\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n @if (config.button.icon) {\n <mat-icon svgIcon=\"filterOutline\"></mat-icon>\n }\n {{ config.button.label }}\n </a>\n }\n @if (config.reload) {\n <a\n mat-icon-button\n (click)=\"reload($event)\"\n class=\"button-reload\">\n <mat-icon #reloadEl>\n refresh\n </mat-icon>\n </a>\n }\n @if (config.autoReload) {\n <div class=\"filter-reload\">\n @if (config.autoReload) {\n <mat-slide-toggle\n name=\"autoReload\"\n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n <span>\n Auto refresh\n </span>\n </mat-slide-toggle>\n }\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template #heading>\n @if (config.heading) {\n <div class=\"heading\">\n <h2>\n {{ config.heading }}\n </h2>\n <div class=\"subheading\">\n {{ config.subheading }}\n </div>\n </div>\n }\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:18px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;margin-right:3px}.filter-inner-container .filter-keyword mat-form-field.search-form-field{max-width:100%;width:250px;margin-top:0}.filter-inner-container .filter-keyword mat-form-field.search-form-field .icon{margin-left:10px;color:#626262}.filter-inner-container .filter-keyword mat-form-field.search-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.filter-actions{display:flex;align-items:center;flex:1;justify-content:flex-end}.filter-toolbar{white-space:nowrap;display:flex;align-items:center}.filter-toolbar .button-filters,.filter-toolbar .button-reload{display:flex;width:40px;padding:8px;height:40px;overflow:hidden}.filter-toolbar .button-filters ::ng-deep svg,.filter-toolbar .button-reload ::ng-deep svg{display:flex}.filter-toolbar .filter-reload{margin-left:10px;display:flex;align-items:center}.filter-toolbar .filter-reload .auto-reload{margin-right:5px}.filter-toolbar .filter-reload .auto-reload span{font-size:80%}.heading{margin-right:10px}.heading h2{margin:0}.heading h2+.subheading{margin:0}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin:4px 0;display:flex;flex-wrap:wrap;gap:5px}@media screen and (min-width: 1200px){html.fs-filter-open body{margin-right:350px}}html.fs-filter-open{scrollbar-width:none}:host ::ng-deep .auto-reload.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(12px,0,0)}:host ::ng-deep .auto-reload:not(.mat-checked) .mat-slide-toggle-content{color:#ccc}:host ::ng-deep .auto-reload .mat-slide-toggle-thumb,:host ::ng-deep .auto-reload .mat-slide-toggle-thumb-container{height:15px;width:15px}:host ::ng-deep .auto-reload .mat-slide-toggle-content{font-size:90%}:host ::ng-deep .auto-reload .mat-slide-toggle-bar{width:26px;height:10px;border-radius:10px}\n"] }]
4824
+ ], template: "<div class=\"filter-container\">\n @if (notInlineToolbar$ | async) {\n <ng-container *ngTemplateOutlet=\"heading\"></ng-container>\n }\n <div class=\"filter-inner-container\">\n @if (notInlineToolbar$ | async) {\n <div class=\"filter-inner-inputs\">\n @if (keywordVisible$ | async) {\n <mat-form-field\n class=\"search-form-field form-field-padless\"\n [ngClass]=\"{\n 'has-keyword': !!keyword\n }\">\n <span\n matPrefix\n class=\"icon\">\n <mat-icon matPrefix>\n search\n </mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n }\n @if (savedFiltersController.enabled) {\n <fs-saved-filter-autocomplete-chips [savedFiltersController]=\"savedFiltersController\"></fs-saved-filter-autocomplete-chips>\n }\n </div>\n } @else {\n <div>\n <ng-container *ngTemplateOutlet=\"heading\"></ng-container>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n }\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n @if (notInlineToolbar$ | async) {\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n }\n</div>\n<ng-template #filterStatusBarChips>\n @if (statusBar) {\n <div\n class=\"filter-status-container\"\n [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div\n class=\"filter-status\"\n #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n }\n @if (config.chips && hasFilterChips$ | async) {\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n }\n</ng-template>\n<ng-template #filterActions>\n @if (actionsVisible$ | async) {\n <div class=\"filter-actions\">\n <fs-filter-actions\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n }\n</ng-template>\n<ng-template #filterToolbar>\n @if (config.reload || config.autoReload || ((filtersBtnVisible$ | async) && hasVisibleItemOrSorting)) {\n <div class=\"filter-toolbar\">\n @if ((filtersBtnVisible$ | async) && hasVisibleItemOrSorting) {\n <a\n mat-icon-button\n class=\"button-filters\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n @if (config.button.icon) {\n <mat-icon svgIcon=\"filterOutline\"></mat-icon>\n }\n {{ config.button.label }}\n </a>\n }\n @if (config.reload) {\n <a\n mat-icon-button\n (click)=\"reload($event)\"\n class=\"button-reload\">\n <mat-icon #reloadEl>\n refresh\n </mat-icon>\n </a>\n }\n @if (config.autoReload) {\n <div class=\"filter-reload\">\n @if (config.autoReload) {\n <mat-slide-toggle\n name=\"autoReload\"\n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n <span>\n Auto refresh\n </span>\n </mat-slide-toggle>\n }\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template #heading>\n @if (config.heading) {\n <div class=\"heading\">\n <h2>\n {{ config.heading }}\n </h2>\n <div class=\"subheading\">\n {{ config.subheading }}\n </div>\n </div>\n }\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:18px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-inner-inputs{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;gap:5px}.filter-inner-container .filter-inner-inputs mat-form-field.search-form-field{max-width:100%;width:250px;margin-top:0}.filter-inner-container .filter-inner-inputs mat-form-field.search-form-field .icon{margin-left:10px;color:#626262}.filter-inner-container .filter-inner-inputs mat-form-field.search-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.filter-actions{display:flex;align-items:center;flex:1;justify-content:flex-end}.filter-toolbar{white-space:nowrap;display:flex;align-items:center}.filter-toolbar .button-filters,.filter-toolbar .button-reload{display:flex;width:40px;padding:8px;height:40px;overflow:hidden}.filter-toolbar .button-filters ::ng-deep svg,.filter-toolbar .button-reload ::ng-deep svg{display:flex}.filter-toolbar .filter-reload{margin-left:10px;display:flex;align-items:center}.filter-toolbar .filter-reload .auto-reload{margin-right:5px}.filter-toolbar .filter-reload .auto-reload span{font-size:80%}.heading{margin-right:10px}.heading h2{margin:0}.heading h2+.subheading{margin:0}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin:4px 0;display:flex;flex-wrap:wrap;gap:5px}@media screen and (min-width: 1200px){html.fs-filter-open body{margin-right:350px}}html.fs-filter-open{scrollbar-width:none}:host ::ng-deep .auto-reload.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(12px,0,0)}:host ::ng-deep .auto-reload:not(.mat-checked) .mat-slide-toggle-content{color:#ccc}:host ::ng-deep .auto-reload .mat-slide-toggle-thumb,:host ::ng-deep .auto-reload .mat-slide-toggle-thumb-container{height:15px;width:15px}:host ::ng-deep .auto-reload .mat-slide-toggle-content{font-size:90%}:host ::ng-deep .auto-reload .mat-slide-toggle-bar{width:26px;height:10px;border-radius:10px}\n"] }]
4818
4825
  }], ctorParameters: () => [], propDecorators: { setConfig: [{
4819
4826
  type: Input,
4820
4827
  args: ['config']