@firestitch/filter 12.12.2 → 12.12.4

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.
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('rxjs/operators'), require('@firestitch/common'), require('lodash-es'), require('@firestitch/date'), require('date-fns'), require('@firestitch/datepicker'), require('@firestitch/store'), require('@angular/router'), require('@angular/common'), require('@angular/material/dialog'), require('@firestitch/drawer'), require('@angular/material/form-field'), require('@angular/material/select'), require('@angular/material/core'), require('@angular/material/button'), require('@angular/forms'), require('@firestitch/form'), require('@angular/material/input'), require('@angular/material/autocomplete'), require('@angular/material/checkbox'), require('@angular/material/chips'), require('@angular/material/icon'), require('@angular/cdk/portal'), require('@firestitch/chip'), require('@firestitch/label'), require('@firestitch/scroll'), require('@firestitch/autocomplete'), require('@firestitch/autocomplete-chips'), require('@firestitch/menu'), require('@firestitch/skeleton'), require('@firestitch/file'), require('@firestitch/popover'), require('@angular/cdk/layout'), require('@angular/cdk/overlay')) :
3
- typeof define === 'function' && define.amd ? define('@firestitch/filter', ['exports', '@angular/core', 'rxjs', 'rxjs/operators', '@firestitch/common', 'lodash-es', '@firestitch/date', 'date-fns', '@firestitch/datepicker', '@firestitch/store', '@angular/router', '@angular/common', '@angular/material/dialog', '@firestitch/drawer', '@angular/material/form-field', '@angular/material/select', '@angular/material/core', '@angular/material/button', '@angular/forms', '@firestitch/form', '@angular/material/input', '@angular/material/autocomplete', '@angular/material/checkbox', '@angular/material/chips', '@angular/material/icon', '@angular/cdk/portal', '@firestitch/chip', '@firestitch/label', '@firestitch/scroll', '@firestitch/autocomplete', '@firestitch/autocomplete-chips', '@firestitch/menu', '@firestitch/skeleton', '@firestitch/file', '@firestitch/popover', '@angular/cdk/layout', '@angular/cdk/overlay'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.firestitch = global.firestitch || {}, global.firestitch.filter = {}), global.ng.core, global.rxjs, global.rxjs.operators, global.common, global.lodashEs, global.date, global.dateFns, global.i3, global.i1, global.ng.router, global.ng.common, global.ng.material.dialog, global.i6, global.ng.material.formField, global.ng.material.select, global.ng.material.core, global.ng.material.button, global.ng.forms, global.i7, global.ng.material.input, global.ng.material.autocomplete, global.ng.material.checkbox, global.ng.material.chips, global.ng.material.icon, global.ng.cdk.portal, global.i2$1, global.i1$6, global.scroll, global.i4$1, global.i5, global.i3$4, global.i6$1, global.i4$3, global.i7$1, global.ng.cdk.layout, global.ng.cdk.overlay));
5
- })(this, (function (exports, i0, rxjs, operators, common, lodashEs, date, dateFns, i3, i1, i1$1, i3$1, i1$2, i6, i1$3, i2, i3$2, i1$4, i4, i7, i3$3, autocomplete, i4$2, chips, i2$2, portal, i2$1, i1$6, scroll, i4$1, i5, i3$4, i6$1, i4$3, i7$1, i1$5, i1$7) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('rxjs/operators'), require('@firestitch/common'), require('lodash-es'), require('@firestitch/date'), require('date-fns'), require('@firestitch/datepicker'), require('@firestitch/store'), require('@angular/router'), require('@angular/common'), require('@angular/material/dialog'), require('@firestitch/drawer'), require('@angular/material/form-field'), require('@angular/material/select'), require('@angular/material/core'), require('@angular/material/button'), require('@angular/forms'), require('@firestitch/form'), require('@angular/material/input'), require('@angular/cdk/portal'), require('@angular/material/autocomplete'), require('@angular/material/checkbox'), require('@angular/material/chips'), require('@angular/material/icon'), require('@firestitch/autocomplete'), require('@firestitch/autocomplete-chips'), require('@firestitch/chip'), require('@firestitch/file'), require('@firestitch/label'), require('@firestitch/menu'), require('@firestitch/popover'), require('@firestitch/scroll'), require('@firestitch/skeleton'), require('@firestitch/clear'), require('@angular/cdk/overlay'), require('@angular/cdk/layout')) :
3
+ typeof define === 'function' && define.amd ? define('@firestitch/filter', ['exports', '@angular/core', 'rxjs', 'rxjs/operators', '@firestitch/common', 'lodash-es', '@firestitch/date', 'date-fns', '@firestitch/datepicker', '@firestitch/store', '@angular/router', '@angular/common', '@angular/material/dialog', '@firestitch/drawer', '@angular/material/form-field', '@angular/material/select', '@angular/material/core', '@angular/material/button', '@angular/forms', '@firestitch/form', '@angular/material/input', '@angular/cdk/portal', '@angular/material/autocomplete', '@angular/material/checkbox', '@angular/material/chips', '@angular/material/icon', '@firestitch/autocomplete', '@firestitch/autocomplete-chips', '@firestitch/chip', '@firestitch/file', '@firestitch/label', '@firestitch/menu', '@firestitch/popover', '@firestitch/scroll', '@firestitch/skeleton', '@firestitch/clear', '@angular/cdk/overlay', '@angular/cdk/layout'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.firestitch = global.firestitch || {}, global.firestitch.filter = {}), global.ng.core, global.rxjs, global.rxjs.operators, global.common, global.lodashEs, global.date, global.dateFns, global.i3, global.i1, global.ng.router, global.ng.common, global.ng.material.dialog, global.i6, global.ng.material.formField, global.ng.material.select, global.ng.material.core, global.ng.material.button, global.ng.forms, global.i7, global.ng.material.input, global.ng.cdk.portal, global.ng.material.autocomplete, global.ng.material.checkbox, global.ng.material.chips, global.ng.material.icon, global.i4$2, global.i5, global.i2$2, global.i4$1, global.i1$5, global.i3$4, global.i7$1, global.scroll, global.i6$1, global.i7$2, global.ng.cdk.overlay, global.ng.cdk.layout));
5
+ })(this, (function (exports, i0, rxjs, operators, common, lodashEs, date, dateFns, i3, i1, i1$1, i3$1, i1$2, i6, i1$3, i2, i3$2, i1$4, i4, i7, i3$3, portal, autocomplete, i4$3, chips, i2$1, i4$2, i5, i2$2, i4$1, i1$5, i3$4, i7$1, scroll, i6$1, i7$2, i1$6, i1$7) { 'use strict';
6
6
 
7
7
  function _interopNamespace(e) {
8
8
  if (e && e.__esModule) return e;
@@ -23,7 +23,7 @@
23
23
  }
24
24
 
25
25
  var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
26
- var i3__namespace$3 = /*#__PURE__*/_interopNamespace(i3);
26
+ var i3__namespace$4 = /*#__PURE__*/_interopNamespace(i3);
27
27
  var i1__namespace = /*#__PURE__*/_interopNamespace(i1);
28
28
  var i1__namespace$1 = /*#__PURE__*/_interopNamespace(i1$1);
29
29
  var i3__namespace = /*#__PURE__*/_interopNamespace(i3$1);
@@ -36,17 +36,18 @@
36
36
  var i4__namespace = /*#__PURE__*/_interopNamespace(i4);
37
37
  var i7__namespace = /*#__PURE__*/_interopNamespace(i7);
38
38
  var i3__namespace$2 = /*#__PURE__*/_interopNamespace(i3$3);
39
+ var i4__namespace$3 = /*#__PURE__*/_interopNamespace(i4$3);
40
+ var i2__namespace$1 = /*#__PURE__*/_interopNamespace(i2$1);
39
41
  var i4__namespace$2 = /*#__PURE__*/_interopNamespace(i4$2);
42
+ var i5__namespace = /*#__PURE__*/_interopNamespace(i5);
40
43
  var i2__namespace$2 = /*#__PURE__*/_interopNamespace(i2$2);
41
- var i2__namespace$1 = /*#__PURE__*/_interopNamespace(i2$1);
42
- var i1__namespace$6 = /*#__PURE__*/_interopNamespace(i1$6);
43
44
  var i4__namespace$1 = /*#__PURE__*/_interopNamespace(i4$1);
44
- var i5__namespace = /*#__PURE__*/_interopNamespace(i5);
45
- var i3__namespace$4 = /*#__PURE__*/_interopNamespace(i3$4);
46
- var i6__namespace$1 = /*#__PURE__*/_interopNamespace(i6$1);
47
- var i4__namespace$3 = /*#__PURE__*/_interopNamespace(i4$3);
48
- var i7__namespace$1 = /*#__PURE__*/_interopNamespace(i7$1);
49
45
  var i1__namespace$5 = /*#__PURE__*/_interopNamespace(i1$5);
46
+ var i3__namespace$3 = /*#__PURE__*/_interopNamespace(i3$4);
47
+ var i7__namespace$1 = /*#__PURE__*/_interopNamespace(i7$1);
48
+ var i6__namespace$1 = /*#__PURE__*/_interopNamespace(i6$1);
49
+ var i7__namespace$2 = /*#__PURE__*/_interopNamespace(i7$2);
50
+ var i1__namespace$6 = /*#__PURE__*/_interopNamespace(i1$6);
50
51
  var i1__namespace$7 = /*#__PURE__*/_interopNamespace(i1$7);
51
52
 
52
53
  var QUERY_PARAM_DELIMITER = ':';
@@ -3114,365 +3115,332 @@
3114
3115
 
3115
3116
  var FS_FILTER_CONFIG = new i0.InjectionToken('fs.filter-config');
3116
3117
 
3117
- var ActionMenuItem = /** @class */ (function () {
3118
- function ActionMenuItem(config, _parent) {
3119
- if (config === void 0) { config = {}; }
3120
- this._parent = _parent;
3121
- this.items = [];
3122
- this._isGroup = false;
3123
- this._visible$ = new rxjs.BehaviorSubject(true);
3124
- this._disabled$ = new rxjs.BehaviorSubject(false);
3125
- this._init(config);
3118
+ var FsFilterActionButtonComponent = /** @class */ (function () {
3119
+ function FsFilterActionButtonComponent() {
3120
+ this.ActionType = exports.ActionType;
3126
3121
  }
3127
- Object.defineProperty(ActionMenuItem.prototype, "isGroup", {
3128
- get: function () {
3129
- return this._isGroup;
3130
- },
3131
- enumerable: false,
3132
- configurable: true
3133
- });
3134
- Object.defineProperty(ActionMenuItem.prototype, "visible", {
3135
- get: function () {
3136
- return this._visible$.getValue();
3137
- },
3138
- enumerable: false,
3139
- configurable: true
3140
- });
3141
- Object.defineProperty(ActionMenuItem.prototype, "visible$", {
3142
- get: function () {
3143
- return this._visible$.asObservable();
3144
- },
3145
- enumerable: false,
3146
- configurable: true
3147
- });
3148
- Object.defineProperty(ActionMenuItem.prototype, "disabled", {
3149
- get: function () {
3150
- return this._disabled$.getValue();
3151
- },
3152
- set: function (value) {
3153
- this._disabled$.next(value);
3154
- },
3155
- enumerable: false,
3156
- configurable: true
3157
- });
3158
- Object.defineProperty(ActionMenuItem.prototype, "disabled$", {
3159
- get: function () {
3160
- return this._disabled$.asObservable();
3161
- },
3162
- enumerable: false,
3163
- configurable: true
3164
- });
3165
- ActionMenuItem.prototype.updateVisibility = function () {
3166
- var visible = !!this._showFn ? this._showFn() : true;
3167
- if (!visible || !this.isGroup) {
3168
- this._visible$.next(visible);
3169
- return;
3170
- }
3171
- var numberOfVisibleChildren = this.items
3172
- .reduce(function (acc, item) {
3173
- item.updateVisibility();
3174
- if (item.visible) {
3175
- acc++;
3176
- }
3177
- return acc;
3178
- }, 0);
3179
- this._visible$.next(!!numberOfVisibleChildren);
3122
+ return FsFilterActionButtonComponent;
3123
+ }());
3124
+ FsFilterActionButtonComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterActionButtonComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
3125
+ FsFilterActionButtonComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterActionButtonComponent, selector: "fs-filter-action-button", inputs: { action: "action" }, host: { classAttribute: "action-button" }, ngImport: i0__namespace, template: "<ng-container [ngSwitch]=\"action.type\">\n <button\n type=\"button\"\n *ngSwitchCase=\"ActionType.Icon\"\n mat-icon-button\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [ngClass]=\"action.classArray\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <!-- Fab button -->\n <button \n type=\"button\"\n *ngSwitchCase=\"ActionType.Fab\"\n mat-fab\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [ngClass]=\"action.classArray\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <!-- Mini Fab button -->\n <button \n type=\"button\"\n *ngSwitchCase=\"ActionType.MiniFab\"\n mat-mini-fab\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [ngClass]=\"action.classArray\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <button \n type=\"button\"\n *ngSwitchDefault\n mat-button\n [ngClass]=\"{ \n 'mat-raised-button': action.type === 'raised',\n 'mat-flat-button': action.type === 'flat',\n 'mat-stroked-button': action.type === 'stroked',\n 'mat-button': action.type === 'basic',\n 'mat-icon-button': action.type === 'icon'\n }\"\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [class]=\"action.classArray.join(' ')\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <ng-template #buttonContent>\n <ng-container *ngIf=\"!action.icon else withIcon\">\n {{action.label}}\n </ng-container>\n\n <ng-template #withIcon>\n <mat-icon *ngIf=\"!action.iconPlacement || action.iconPlacement === 'left'\">{{action.icon}}</mat-icon>\n {{action.label}}\n <mat-icon *ngIf=\"action.iconPlacement === 'right'\">{{action.icon}}</mat-icon>\n </ng-template>\n </ng-template>\n</ng-container>\n", components: [{ type: i1__namespace$4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i2__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3__namespace.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3__namespace.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3__namespace.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3126
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterActionButtonComponent, decorators: [{
3127
+ type: i0.Component,
3128
+ args: [{
3129
+ selector: 'fs-filter-action-button',
3130
+ templateUrl: './action-button.component.html',
3131
+ host: {
3132
+ class: 'action-button',
3133
+ },
3134
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
3135
+ }]
3136
+ }], propDecorators: { action: [{
3137
+ type: i0.Input
3138
+ }] } });
3139
+
3140
+ var FsFilterActionKebabActionsComponent = /** @class */ (function () {
3141
+ function FsFilterActionKebabActionsComponent() {
3142
+ }
3143
+ return FsFilterActionKebabActionsComponent;
3144
+ }());
3145
+ FsFilterActionKebabActionsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterActionKebabActionsComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
3146
+ FsFilterActionKebabActionsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterActionKebabActionsComponent, selector: "fs-filter-action-kebab-actions", inputs: { kebabActions: "kebabActions" }, ngImport: i0__namespace, template: "<button \n type=\"button\"\n mat-icon-button\n class=\"menu-button\"\n [fsMenuTriggerFor]=\"kebabActionsMenu\">\n <mat-icon>more_vert</mat-icon>\n</button>\n<fs-menu #kebabActionsMenu>\n <ng-container *ngFor=\"let action of kebabActions\">\n <ng-container [ngSwitch]=\"action.mode\">\n <!-- Case when actions was collapsed from action with mode = 'menu'-->\n <ng-container *ngSwitchCase=\"'menu'\">\n <ng-container *ngFor=\"let childAction of action.items\">\n <ng-container *ngIf=\"childAction.isGroup else simpleMenuItem\">\n <fs-menu-group>\n <ng-template fs-group-menu-item-template>\n {{ action.label }} <mat-icon style=\"margin: 0;\">arrow_right</mat-icon> {{childAction.label}}\n </ng-template>\n <ng-container *ngFor=\"let subAction of childAction.items\">\n <ng-template \n fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [hidden]=\"!(subAction.visible$ | async)\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-template \n fs-menu-item\n [link]=\"childAction.routerLink?.link\"\n [queryParams]=\"childAction.routerLink?.queryParams\"\n [hidden]=\"!(childAction.visible$ | async)\"\n (click)=\"childAction.click($event);\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{ action.label }} <mat-icon style=\"margin: 0;\">arrow_right</mat-icon>{{ childAction.label }}\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-template \n fs-menu-file-item\n [fsClass]=\"action.classArray\"\n [multiple]=\"action.multiple\"\n [accept]=\"action.accept || '*'\"\n [minWidth]=\"action.minWidth\"\n [minHeight]=\"action.minHeight\"\n [imageWidth]=\"action.maxWidth\"\n [imageHeight]=\"action.maxHeight\"\n (error)=\"action.fileError($event)\"\n (select)=\"action.fileSelected($event)\"\n (click)=\"action.click($event)\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon> {{action.label}}\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-template \n fs-menu-item\n (click)=\"action.click($event)\"\n [fsClass]=\"action.classArray\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon> {{action.label}}\n </ng-template>\n </ng-container>\n\n </ng-container>\n </ng-container>\n</fs-menu>\n", styles: [".menu-button{width:36px;height:36px;line-height:36px}\n"], components: [{ type: i1__namespace$4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i2__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3__namespace$3.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass"], outputs: ["opened", "closed"] }], directives: [{ type: i3__namespace$3.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3__namespace.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3__namespace.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace$3.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { type: i3__namespace$3.FsGroupMenuItemTemplateDirective, selector: "[fs-group-menu-item-template]" }, { type: i3__namespace$3.FsMenuFileItemDirective, selector: "[fs-menu-file-item]", inputs: ["multiple", "accept", "minWidth", "minHeight", "imageWidth", "imageHeight"], outputs: ["select", "error"] }, { type: i3__namespace.NgSwitchDefault, selector: "[ngSwitchDefault]" }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3147
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterActionKebabActionsComponent, decorators: [{
3148
+ type: i0.Component,
3149
+ args: [{
3150
+ selector: 'fs-filter-action-kebab-actions',
3151
+ styleUrls: ['./action-kebab-actions.component.scss'],
3152
+ templateUrl: './action-kebab-actions.component.html',
3153
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
3154
+ }]
3155
+ }], propDecorators: { kebabActions: [{
3156
+ type: i0.Input
3157
+ }] } });
3158
+
3159
+ var FsFilterActionsComponent = /** @class */ (function () {
3160
+ function FsFilterActionsComponent() {
3161
+ this.kebabActions = [];
3162
+ this.actions = [];
3163
+ }
3164
+ return FsFilterActionsComponent;
3165
+ }());
3166
+ FsFilterActionsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterActionsComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
3167
+ FsFilterActionsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: { kebabActions: "kebabActions", actions: "actions" }, ngImport: i0__namespace, template: "<!-- Buttons -->\n<ng-container *ngFor=\"let action of actions\">\n <ng-container [ngSwitch]=\"action.mode\">\n <ng-container *ngSwitchCase=\"'button'\">\n <fs-filter-action-button\n [action]=\"action\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'menu'\">\n <fs-filter-action-button\n [action]=\"action\"\n [fsMenuTriggerFor]=\"someRef\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n\n <fs-menu #someRef>\n <ng-container *ngFor=\"let childAction of action.items\">\n <ng-container *ngIf=\"childAction.isGroup else simpleMenuItem\">\n <fs-menu-group [label]=\"childAction.label\">\n <ng-container *ngFor=\"let subAction of childAction.items\">\n <ng-template\n fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [hidden]=\"!(subAction.visible$ | async)\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-template\n fs-menu-item\n [link]=\"childAction.routerLink?.link\"\n [queryParams]=\"childAction.routerLink?.queryParams\"\n [hidden]=\"!(childAction.visible$ | async)\"\n (click)=\"childAction.click($event);\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{childAction.label}}\n </ng-template>\n </ng-template>\n </ng-container>\n </fs-menu>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'file'\">\n <fs-file\n class=\"action-button\"\n [accept]=\"action.accept || '*'\"\n [multiple]=\"action.multiple\"\n [minWidth]=\"action.minWidth\"\n [minHeight]=\"action.minHeight\"\n [imageWidth]=\"action.maxWidth\"\n [imageHeight]=\"action.maxHeight\"\n (select)=\"action.fileSelected($event)\"\n (error)=\"action.fileError($event)\"\n (clicked)=\"action.click($event)\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n <fs-filter-action-button \n [action]=\"action\">\n </fs-filter-action-button>\n </fs-file>\n </ng-container>\n </ng-container>\n</ng-container>\n<!-- /Buttons -->\n<!-- menu -->\n<ng-container *ngIf=\"kebabActions?.length\">\n <fs-filter-action-kebab-actions\n [kebabActions]=\"kebabActions\">\n </fs-filter-action-kebab-actions>\n</ng-container>\n", styles: [":host{display:inline-flex}.action-button{display:block}.action-button+.action-button,fs-menu+.action-button{margin-left:5px}.menu-button{width:36px;height:36px;line-height:36px}\n"], components: [{ type: FsFilterActionButtonComponent, selector: "fs-filter-action-button", inputs: ["action"] }, { type: i3__namespace$3.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass"], outputs: ["opened", "closed"] }, { type: i2__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4__namespace$1.FsFileComponent, selector: "fs-file", inputs: ["minHeight", "minWidth", "multiple", "capture", "allowClick", "allowDrop", "accept", "disabled", "imageWidth", "imageHeight", "imageQuality"], outputs: ["select", "error", "clicked", "declined"] }, { type: FsFilterActionKebabActionsComponent, selector: "fs-filter-action-kebab-actions", inputs: ["kebabActions"] }], directives: [{ type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3__namespace.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3__namespace.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i7__namespace$1.FsPopoverDirective, selector: "[fsPopover]", inputs: ["text", "template", "data", "leaveDelay", "showDelay", "maxWidth", "wrapperClass", "autoShow", "autoClose", "loadingDiameter", "loading", "indication", "position", "theme", "size", "trigger", "enabled"] }, { type: i3__namespace$3.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace$3.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3168
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterActionsComponent, decorators: [{
3169
+ type: i0.Component,
3170
+ args: [{
3171
+ selector: 'fs-filter-actions',
3172
+ templateUrl: './actions.component.html',
3173
+ styleUrls: ['./actions.component.scss'],
3174
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
3175
+ }]
3176
+ }], propDecorators: { kebabActions: [{
3177
+ type: i0.Input
3178
+ }], actions: [{
3179
+ type: i0.Input
3180
+ }] } });
3181
+
3182
+ var FsFilterChipContentComponent = /** @class */ (function () {
3183
+ function FsFilterChipContentComponent(_cdRef) {
3184
+ this._cdRef = _cdRef;
3185
+ this._destroy$ = new rxjs.Subject();
3186
+ }
3187
+ FsFilterChipContentComponent.prototype.ngOnInit = function () {
3188
+ this.listenValueChangesForRanges();
3180
3189
  };
3181
- ActionMenuItem.prototype._init = function (config) {
3190
+ FsFilterChipContentComponent.prototype.ngOnDestroy = function () {
3191
+ this._destroy$.next();
3192
+ this._destroy$.complete();
3193
+ };
3194
+ FsFilterChipContentComponent.prototype.listenValueChangesForRanges = function () {
3182
3195
  var _this = this;
3183
- this.label = config.label;
3184
- this.icon = config.icon;
3185
- this._showFn = config.show;
3186
- if ('items' in config) {
3187
- this._isGroup = true;
3188
- if (Array.isArray(config.items)) {
3189
- this.items = config
3190
- .items
3191
- .map(function (item) { return new ActionMenuItem(item, _this); });
3196
+ this.item.value$
3197
+ .pipe(operators.takeUntil(this._destroy$))
3198
+ .subscribe(function () {
3199
+ _this.content = _this._getContent();
3200
+ _this._cdRef.detectChanges();
3201
+ });
3202
+ };
3203
+ FsFilterChipContentComponent.prototype._getContent = function () {
3204
+ var result = this.item.getChipsContent(this.type);
3205
+ if (this.item.chipLabel !== undefined) {
3206
+ if (this.item.chipLabel === '') {
3207
+ return "" + result;
3208
+ }
3209
+ else {
3210
+ if (Array.isArray(this.item.chipLabel)) {
3211
+ var label = getLabelFromArray(this.item.chipLabel, this.type);
3212
+ return label + ": " + result;
3213
+ }
3214
+ else {
3215
+ return this.item.chipLabel + ": " + result;
3216
+ }
3192
3217
  }
3193
- this.updateVisibility();
3194
3218
  }
3195
3219
  else {
3196
- this.click = config.click;
3197
- this.routerLink = config.link;
3198
- if (!this._parent) {
3199
- this.updateVisibility();
3220
+ if (Array.isArray(this.item.label)) {
3221
+ var label = getLabelFromArray(this.item.label, this.type);
3222
+ return label + ": " + result;
3223
+ }
3224
+ else {
3225
+ if (this.item.isTypeCheckbox) {
3226
+ return result;
3227
+ }
3228
+ else {
3229
+ return this.item.label + ": " + result;
3230
+ }
3200
3231
  }
3201
3232
  }
3202
3233
  };
3203
- return ActionMenuItem;
3204
- }());
3234
+ return FsFilterChipContentComponent;
3235
+ }());
3236
+ FsFilterChipContentComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterChipContentComponent, deps: [{ token: i0__namespace.ChangeDetectorRef }], target: i0__namespace.ɵɵFactoryTarget.Component });
3237
+ FsFilterChipContentComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterChipContentComponent, selector: "fs-filter-chip-content", inputs: { item: "item", type: "type" }, ngImport: i0__namespace, template: "{{ content }}\n", styles: [""], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3238
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterChipContentComponent, decorators: [{
3239
+ type: i0.Component,
3240
+ args: [{
3241
+ selector: 'fs-filter-chip-content',
3242
+ templateUrl: './filter-chip-content.component.html',
3243
+ styleUrls: ['./filter-chip-content.component.scss'],
3244
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
3245
+ }]
3246
+ }], ctorParameters: function () { return [{ type: i0__namespace.ChangeDetectorRef }]; }, propDecorators: { item: [{
3247
+ type: i0.Input
3248
+ }], type: [{
3249
+ type: i0.Input
3250
+ }] } });
3251
+ function getLabelFromArray(labelArr, type) {
3252
+ if (type === 'from' && labelArr[0]) {
3253
+ return "" + labelArr[0];
3254
+ }
3255
+ else if (type === 'to' && labelArr[1]) {
3256
+ return "" + labelArr[1];
3257
+ }
3258
+ else {
3259
+ return '';
3260
+ }
3261
+ }
3205
3262
 
3206
- var Action = /** @class */ (function () {
3207
- function Action(filterConfig, actionConfig) {
3208
- if (actionConfig === void 0) { actionConfig = {}; }
3209
- this.primary = true;
3210
- this.isReorderAction = false;
3211
- this.classArray = [];
3212
- this.items = [];
3213
- this._visible$ = new rxjs.BehaviorSubject(true);
3214
- this._disabled$ = new rxjs.BehaviorSubject(false);
3215
- this._init(filterConfig, actionConfig);
3263
+ var FocusControllerService = /** @class */ (function () {
3264
+ function FocusControllerService() {
3265
+ this._focusOn = new rxjs.BehaviorSubject(null);
3216
3266
  }
3217
- Object.defineProperty(Action.prototype, "visible", {
3218
- get: function () {
3219
- return this._visible$.getValue();
3220
- },
3221
- enumerable: false,
3222
- configurable: true
3223
- });
3224
- Object.defineProperty(Action.prototype, "visible$", {
3267
+ Object.defineProperty(FocusControllerService.prototype, "focusOn$", {
3225
3268
  get: function () {
3226
- return this._visible$.asObservable();
3269
+ return this._focusOn.asObservable();
3227
3270
  },
3228
3271
  enumerable: false,
3229
3272
  configurable: true
3230
3273
  });
3231
- Object.defineProperty(Action.prototype, "disabled", {
3232
- get: function () {
3233
- return this._disabled$.getValue();
3234
- },
3235
- set: function (value) {
3236
- this._disabled$.next(value);
3237
- },
3238
- enumerable: false,
3239
- configurable: true
3240
- });
3241
- Object.defineProperty(Action.prototype, "disabled$", {
3242
- get: function () {
3243
- return this._disabled$.asObservable();
3244
- },
3245
- enumerable: false,
3246
- configurable: true
3247
- });
3248
- Action.prototype.updateVisibility = function () {
3249
- var visible = !!this._showFn ? this._showFn() : true;
3250
- if (!visible || this.mode !== exports.ActionMode.Menu) {
3251
- this._visible$.next(visible);
3252
- return;
3253
- }
3254
- var hasVisibleChildren = this.items.some(function (item) { return item.visible; });
3255
- this._visible$.next(hasVisibleChildren);
3274
+ FocusControllerService.prototype.click = function (item, type) {
3275
+ if (type === void 0) { type = null; }
3276
+ this._focusOn.next({ item: item, type: type });
3256
3277
  };
3257
- Action.prototype.updateDisabledState = function () {
3258
- if (this._disabledFn) {
3259
- this.disabled = this._disabledFn();
3260
- }
3278
+ FocusControllerService.prototype.listenFocusFor$ = function (targetItem, targetType) {
3279
+ var _this = this;
3280
+ if (targetType === void 0) { targetType = null; }
3281
+ return this._focusOn
3282
+ .pipe(operators.filter(function (event) { return !!event; }), operators.filter(function (_a) {
3283
+ var item = _a.item, type = _a.type;
3284
+ return targetItem === item && targetType === type;
3285
+ }), operators.tap(function () { return _this.clearFocus(); }));
3261
3286
  };
3262
- Action.prototype._init = function (filterConfig, config) {
3263
- if (config === void 0) { config = {}; }
3264
- var _a, _b, _c, _d, _e, _f;
3265
- config.mode = (_a = config.mode) !== null && _a !== void 0 ? _a : exports.ActionMode.Button;
3266
- this.primary = (_b = config.primary) !== null && _b !== void 0 ? _b : true;
3267
- this.color = config.color;
3268
- this.tooltip = config.tooltip;
3269
- this.label = config.label;
3270
- this.mode = config.mode;
3271
- this.icon = config.icon;
3272
- this.iconPlacement = config.iconPlacement;
3273
- this._showFn = config.show;
3274
- this.tabIndex = (_c = config.tabIndex) !== null && _c !== void 0 ? _c : 0;
3275
- this.menu = config.menu;
3276
- if (!this.type) {
3277
- this.type = (config.type || ((_d = filterConfig.button) === null || _d === void 0 ? void 0 : _d.style) || exports.ActionType.Raised);
3278
- if (this.type === exports.ActionType.Stroked && this.primary) {
3279
- this.type = exports.ActionType.Flat;
3280
- }
3281
- }
3282
- if (config.multiple !== undefined) {
3283
- this.multiple = config.multiple;
3284
- }
3285
- if (config.className) {
3286
- this.className = config.className;
3287
- this.classArray = this.className
3288
- .split(' ');
3289
- }
3290
- if (this.primary) {
3291
- this.color = 'primary';
3292
- }
3293
- switch (config.mode) {
3294
- case exports.ActionMode.Button:
3295
- {
3296
- this.customize = config.customize;
3297
- this.click = (_e = config.click) !== null && _e !== void 0 ? _e : (function () { });
3298
- this._disabledFn = config.disabled;
3299
- this.updateDisabledState();
3300
- }
3301
- break;
3302
- case exports.ActionMode.Menu:
3303
- {
3304
- if (config.items && Array.isArray(config.items)) {
3305
- this.items = config.items.map(function (item) { return new ActionMenuItem(item); });
3306
- }
3307
- }
3308
- break;
3309
- case exports.ActionMode.File:
3310
- {
3311
- this.fileSelected = config.select;
3312
- this.fileError = config.error;
3313
- this.accept = config.accept;
3314
- this.imageQuality = config.imageQuality;
3315
- this.minWidth = config.minWidth;
3316
- this.minHeight = config.minHeight;
3317
- this.maxWidth = config.maxWidth;
3318
- this.maxHeight = config.maxHeight;
3319
- this.click = (_f = config.click) !== null && _f !== void 0 ? _f : (function () { });
3320
- this._disabledFn = config.disabled;
3321
- this.updateDisabledState();
3322
- }
3323
- break;
3324
- }
3325
- this.updateVisibility();
3287
+ FocusControllerService.prototype.clearFocus = function () {
3288
+ this._focusOn.next(null);
3326
3289
  };
3327
- return Action;
3328
- }());
3290
+ return FocusControllerService;
3291
+ }());
3292
+ FocusControllerService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FocusControllerService, deps: [], target: i0__namespace.ɵɵFactoryTarget.Injectable });
3293
+ FocusControllerService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FocusControllerService });
3294
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FocusControllerService, decorators: [{
3295
+ type: i0.Injectable
3296
+ }], ctorParameters: function () { return []; } });
3329
3297
 
3330
- var ActionsController = /** @class */ (function () {
3331
- function ActionsController(_breakpointObserver) {
3332
- this._breakpointObserver = _breakpointObserver;
3333
- this._visible$ = new rxjs.BehaviorSubject(false);
3334
- this._actions$ = new rxjs.BehaviorSubject([]);
3335
- this._menuActions$ = new rxjs.BehaviorSubject([]);
3298
+ var FsFilterChipComponent = /** @class */ (function () {
3299
+ function FsFilterChipComponent(_cdRef, _focusController) {
3300
+ this._cdRef = _cdRef;
3301
+ this._focusController = _focusController;
3302
+ this._chipRenderTimer$ = rxjs.timer(500)
3303
+ .pipe(operators.mapTo(true));
3336
3304
  this._destroy$ = new rxjs.Subject();
3337
- this._mobileMedia = '(max-width: 799px)';
3338
- this._allActions = [];
3339
- this._listenMobileMedia();
3340
3305
  }
3341
- Object.defineProperty(ActionsController.prototype, "menuActions", {
3342
- get: function () {
3343
- return this._menuActions$.value;
3344
- },
3345
- enumerable: false,
3346
- configurable: true
3347
- });
3348
- Object.defineProperty(ActionsController.prototype, "actions", {
3349
- get: function () {
3350
- return this._actions$.value;
3351
- },
3352
- enumerable: false,
3353
- configurable: true
3354
- });
3355
- Object.defineProperty(ActionsController.prototype, "actions$", {
3356
- get: function () {
3357
- return this._actions$.asObservable();
3358
- },
3359
- enumerable: false,
3360
- configurable: true
3361
- });
3362
- Object.defineProperty(ActionsController.prototype, "menuActions$", {
3363
- get: function () {
3364
- return this._menuActions$.asObservable();
3365
- },
3366
- enumerable: false,
3367
- configurable: true
3368
- });
3369
- Object.defineProperty(ActionsController.prototype, "visible$", {
3370
- get: function () {
3371
- return this._visible$.asObservable();
3372
- },
3373
- enumerable: false,
3374
- configurable: true
3375
- });
3376
- Object.defineProperty(ActionsController.prototype, "mobileMode", {
3377
- get: function () {
3378
- return this._breakpointObserver.isMatched(this._mobileMedia);
3379
- },
3380
- enumerable: false,
3381
- configurable: true
3382
- });
3383
- ActionsController.prototype.ngOnDestroy = function () {
3306
+ FsFilterChipComponent.prototype.ngOnInit = function () {
3307
+ var _this = this;
3308
+ this.rangeItem = this.item.isTypeDateRange
3309
+ || this.item.isTypeRange
3310
+ || this.item.isTypeDateTimeRange;
3311
+ this.listenValueChangesForRanges();
3312
+ this._updateVisibility();
3313
+ if (this.item.hasPendingValues) {
3314
+ this.item.loadAsyncValues(false);
3315
+ this.item.values$
3316
+ .pipe(operators.take(2), operators.takeUntil(this._destroy$))
3317
+ .subscribe(function () {
3318
+ _this._updateVisibility();
3319
+ _this._cdRef.markForCheck();
3320
+ });
3321
+ this._initDelayRender();
3322
+ }
3323
+ };
3324
+ FsFilterChipComponent.prototype.ngOnDestroy = function () {
3384
3325
  this._destroy$.next();
3385
3326
  this._destroy$.complete();
3386
3327
  };
3387
- ActionsController.prototype.setConfig = function (config) {
3388
- this._config = config;
3389
- this.initActions(config.actions);
3328
+ FsFilterChipComponent.prototype.focusOnItem = function (type) {
3329
+ if (type === void 0) { type = null; }
3330
+ this._focusController.click(this.item, type);
3390
3331
  };
3391
- ActionsController.prototype.initActions = function (rawActions) {
3392
- var _this = this;
3393
- if (!rawActions || !Array.isArray(rawActions)) {
3394
- return;
3332
+ FsFilterChipComponent.prototype.removeItem = function (event, type) {
3333
+ if (type === void 0) { type = null; }
3334
+ if (this.item instanceof RangeItem) {
3335
+ this.item.clearRange(type);
3395
3336
  }
3396
- this.show();
3397
- this._allActions = rawActions
3398
- .map(function (action) { return new Action(_this._config, action); });
3399
- if (this._reorderAction) {
3400
- this._allActions.unshift(this._reorderAction);
3337
+ else if (this.item instanceof DateRangeItem || this.item instanceof DateTimeRangeItem) {
3338
+ this.item.clearDateRange(type);
3339
+ }
3340
+ else {
3341
+ this.item.clear();
3401
3342
  }
3402
- this._classifyActions();
3403
- };
3404
- ActionsController.prototype.show = function () {
3405
- this._visible$.next(true);
3406
- };
3407
- ActionsController.prototype.hide = function () {
3408
- this._visible$.next(false);
3409
- };
3410
- ActionsController.prototype.addReorderAction = function (action) {
3411
- this._allActions.unshift(action);
3412
- action.isReorderAction = true;
3413
- this._classifyAction(action);
3414
- this._reorderAction = action;
3415
- };
3416
- ActionsController.prototype.clearActions = function () {
3417
- this._allActions = [];
3418
- this._setActions([]);
3419
- this._setKebabActions([]);
3420
- };
3421
- ActionsController.prototype.updateActionsVisibility = function () {
3422
- this._allActions.forEach(function (action) { return action.updateVisibility(); });
3423
- this._classifyActions();
3424
3343
  };
3425
- ActionsController.prototype.updateDisabledState = function () {
3426
- this.actions.forEach(function (action) { return action.updateDisabledState(); });
3344
+ FsFilterChipComponent.prototype.listenValueChangesForRanges = function () {
3345
+ var _this = this;
3346
+ this.item.value$
3347
+ .pipe(operators.distinctUntilChanged(), operators.takeUntil(this._destroy$))
3348
+ .subscribe(function () {
3349
+ _this._updateVisibility();
3350
+ _this._cdRef.markForCheck();
3351
+ });
3427
3352
  };
3428
- ActionsController.prototype._setKebabActions = function (actions) {
3429
- this._menuActions$.next(actions);
3353
+ FsFilterChipComponent.prototype._updateVisibility = function () {
3354
+ this.itemVisible = this.item.isChipVisible;
3430
3355
  };
3431
- ActionsController.prototype._setActions = function (actions) {
3432
- this._actions$.next(actions);
3356
+ FsFilterChipComponent.prototype._initDelayRender = function () {
3357
+ this.chipDelayedRender$ = rxjs.combineLatest([
3358
+ this.item.values$,
3359
+ this._chipRenderTimer$.pipe(operators.startWith(false))
3360
+ ])
3361
+ .pipe(operators.map(function (_a) {
3362
+ var _b = __read(_a, 2), values = _b[0], timerValue = _b[1];
3363
+ return !!values || timerValue;
3364
+ }));
3433
3365
  };
3434
- ActionsController.prototype._classifyActions = function () {
3435
- var kebabActions = [];
3436
- var actions = [];
3437
- var mobileMode = this.mobileMode;
3438
- this._allActions
3439
- .filter(function (action) {
3440
- return action.visible;
3441
- })
3442
- .forEach(function (action) {
3443
- if (action.menu !== false && (action.menu || mobileMode)) {
3444
- kebabActions.push(action);
3445
- }
3446
- else {
3447
- actions.push(action);
3448
- }
3449
- });
3450
- this._setKebabActions(kebabActions);
3451
- this._setActions(actions);
3366
+ return FsFilterChipComponent;
3367
+ }());
3368
+ FsFilterChipComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterChipComponent, deps: [{ token: i0__namespace.ChangeDetectorRef }, { token: FocusControllerService }], target: i0__namespace.ɵɵFactoryTarget.Component });
3369
+ FsFilterChipComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterChipComponent, selector: "fs-filter-chip", inputs: { item: "item" }, ngImport: i0__namespace, template: "<ng-container *ngIf=\"!item.hasPendingValues || (chipDelayedRender$ | async)\">\n <ng-container *ngIf=\"rangeItem; else defaultChip\">\n <fs-chip\n *ngIf=\"item.model?.min || item.model?.from\"\n [value]=\"item\"\n [selectable]=\"false\"\n [removable]=\"item.showClear\"\n size=\"small\"\n (click)=\"focusOnItem('from')\"\n (removed)=\"removeItem($event, 'from')\">\n <ng-template\n [ngTemplateOutlet]=\"chipContent\"\n [ngTemplateOutletContext]=\"{ item: item, type: 'from' }\"\n ></ng-template>\n </fs-chip>\n\n <fs-chip\n *ngIf=\"item.model?.max || item.model?.to\"\n [value]=\"item\"\n [selectable]=\"false\"\n [removable]=\"item.showClear\"\n size=\"small\"\n (click)=\"focusOnItem('to')\"\n (removed)=\"removeItem($event, 'to')\">\n <ng-template\n [ngTemplateOutlet]=\"chipContent\"\n [ngTemplateOutletContext]=\"{ item: item, type: 'to' }\"\n ></ng-template>\n </fs-chip>\n\n </ng-container>\n\n <ng-template #defaultChip>\n <fs-chip\n *ngIf=\"itemVisible\"\n [value]=\"item\"\n [selectable]=\"false\"\n [removable]=\"item.showClear\"\n size=\"small\"\n (click)=\"focusOnItem()\"\n (removed)=\"removeItem($event)\">\n <ng-template\n [ngTemplateOutlet]=\"chipContent\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-template>\n </fs-chip>\n </ng-template>\n\n <ng-template #chipContent let-item=\"item\" let-type=\"type\">\n <ng-container *ngIf=\"!item.hasPendingValues && !item.loading; else lodaingValues\">\n <fs-filter-chip-content [item]=\"item\" [type]=\"type\"></fs-filter-chip-content>\n </ng-container>\n\n <ng-template #lodaingValues>\n Loading...\n </ng-template>\n </ng-template>\n</ng-container>\n\n", styles: ["fs-chip{cursor:pointer;color:#6f6f6f}\n"], components: [{ type: i2__namespace$2.FsChipComponent, selector: "fs-chip", inputs: ["size", "value", "backgroundColor", "borderColor", "color", "outlined", "removable", "selectable", "selected", "image"], outputs: ["selectedToggled", "removed"] }, { type: FsFilterChipContentComponent, selector: "fs-filter-chip-content", inputs: ["item", "type"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3370
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterChipComponent, decorators: [{
3371
+ type: i0.Component,
3372
+ args: [{
3373
+ selector: 'fs-filter-chip',
3374
+ templateUrl: './filter-chip.component.html',
3375
+ styleUrls: ['./filter-chip.component.scss'],
3376
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
3377
+ }]
3378
+ }], ctorParameters: function () { return [{ type: i0__namespace.ChangeDetectorRef }, { type: FocusControllerService }]; }, propDecorators: { item: [{
3379
+ type: i0.Input
3380
+ }] } });
3381
+
3382
+ var FsFilterChipsComponent = /** @class */ (function () {
3383
+ function FsFilterChipsComponent() {
3384
+ this.ItemType = exports.ItemType;
3385
+ this.chips = [];
3386
+ }
3387
+ return FsFilterChipsComponent;
3388
+ }());
3389
+ FsFilterChipsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterChipsComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
3390
+ FsFilterChipsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterChipsComponent, selector: "fs-filter-chips", inputs: { filters: "filters" }, ngImport: i0__namespace, template: "<fs-chips [(ngModel)]=\"chips\">\n <ng-container *ngFor=\"let item of filters\">\n <ng-container *ngIf=\"(item.value$ | async) !== undefined && item.type !== ItemType.Keyword\">\n <fs-filter-chip [item]=\"item\"></fs-filter-chip>\n </ng-container>\n </ng-container>\n</fs-chips>\n", styles: [""], components: [{ type: i2__namespace$2.FsChipsComponent, selector: "fs-chips", inputs: ["compare", "multiple"] }, { type: FsFilterChipComponent, selector: "fs-filter-chip", inputs: ["item"] }], directives: [{ type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3391
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterChipsComponent, decorators: [{
3392
+ type: i0.Component,
3393
+ args: [{
3394
+ selector: 'fs-filter-chips',
3395
+ templateUrl: './filter-chips.component.html',
3396
+ styleUrls: ['./filter-chips.component.scss'],
3397
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
3398
+ }]
3399
+ }], propDecorators: { filters: [{
3400
+ type: i0.Input
3401
+ }] } });
3402
+
3403
+ var FsFilterDrawerActionsComponent = /** @class */ (function () {
3404
+ function FsFilterDrawerActionsComponent(externalParams) {
3405
+ this.externalParams = externalParams;
3406
+ this._clear = new i0.EventEmitter();
3407
+ this._done = new i0.EventEmitter();
3408
+ }
3409
+ Object.defineProperty(FsFilterDrawerActionsComponent.prototype, "savedFilters", {
3410
+ get: function () {
3411
+ return this.externalParams.savedFiltersController;
3412
+ },
3413
+ enumerable: false,
3414
+ configurable: true
3415
+ });
3416
+ FsFilterDrawerActionsComponent.prototype.done = function () {
3417
+ this._done.emit();
3452
3418
  };
3453
- ActionsController.prototype._classifyAction = function (action) {
3454
- if (action.menu) {
3455
- this._setKebabActions(__spreadArray(__spreadArray([], __read(this.menuActions)), [action]));
3456
- }
3457
- else {
3458
- this._setActions(__spreadArray(__spreadArray([], __read(this.actions)), [action]));
3459
- }
3419
+ FsFilterDrawerActionsComponent.prototype.clear = function () {
3420
+ this._clear.emit();
3460
3421
  };
3461
- ActionsController.prototype._listenMobileMedia = function () {
3462
- var _this = this;
3463
- this._breakpointObserver.observe(this._mobileMedia)
3464
- .pipe(operators.skip(1), operators.takeUntil(this._destroy$))
3465
- .subscribe(function () {
3466
- _this._classifyActions();
3467
- });
3422
+ FsFilterDrawerActionsComponent.prototype.saveFilters = function () {
3423
+ this.externalParams
3424
+ .savedFiltersController
3425
+ .openSavedFilterEditDialog();
3468
3426
  };
3469
- return ActionsController;
3427
+ return FsFilterDrawerActionsComponent;
3470
3428
  }());
3471
- ActionsController.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ActionsController, deps: [{ token: i1__namespace$5.BreakpointObserver }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
3472
- ActionsControllerprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ActionsController });
3473
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ActionsController, decorators: [{
3474
- type: i0.Injectable
3475
- }], ctorParameters: function () { return [{ type: i1__namespace$5.BreakpointObserver }]; } });
3429
+ FsFilterDrawerActionsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterDrawerActionsComponent, deps: [{ token: ExternalParamsController }], target: i0__namespace.ɵɵFactoryTarget.Component });
3430
+ FsFilterDrawerActionsComponentcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterDrawerActionsComponent, selector: "fs-filter-drawer-actions", outputs: { _clear: "clear", _done: "done" }, ngImport: i0__namespace, template: "<button type=\"button\" mat-button color=\"primary\" (click)=\"done()\">Done</button>\n<button type=\"button\" mat-button (click)=\"clear()\">Clear</button>\n<ng-container *ngIf=\"savedFilters.enabled$ | async\">\n <button type=\"button\" mat-button (click)=\"saveFilters()\">Save</button>\n</ng-container>\n\n", components: [{ type: i1__namespace$4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3__namespace.AsyncPipe } });
3431
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterDrawerActionsComponent, decorators: [{
3432
+ type: i0.Component,
3433
+ args: [{
3434
+ selector: 'fs-filter-drawer-actions',
3435
+ templateUrl: './filter-drawer-actions.component.html',
3436
+ }]
3437
+ }], ctorParameters: function () { return [{ type: ExternalParamsController }]; }, propDecorators: { _clear: [{
3438
+ type: i0.Output,
3439
+ args: ['clear']
3440
+ }], _done: [{
3441
+ type: i0.Output,
3442
+ args: ['done']
3443
+ }] } });
3476
3444
 
3477
3445
  var FILTER_DRAWER_DATA = new i0.InjectionToken('fs.filter-drawer-data');
3478
3446
 
@@ -3549,41 +3517,6 @@
3549
3517
  type: i0.Input
3550
3518
  }] } });
3551
3519
 
3552
- var FocusControllerService = /** @class */ (function () {
3553
- function FocusControllerService() {
3554
- this._focusOn = new rxjs.BehaviorSubject(null);
3555
- }
3556
- Object.defineProperty(FocusControllerService.prototype, "focusOn$", {
3557
- get: function () {
3558
- return this._focusOn.asObservable();
3559
- },
3560
- enumerable: false,
3561
- configurable: true
3562
- });
3563
- FocusControllerService.prototype.click = function (item, type) {
3564
- if (type === void 0) { type = null; }
3565
- this._focusOn.next({ item: item, type: type });
3566
- };
3567
- FocusControllerService.prototype.listenFocusFor$ = function (targetItem, targetType) {
3568
- var _this = this;
3569
- if (targetType === void 0) { targetType = null; }
3570
- return this._focusOn
3571
- .pipe(operators.filter(function (event) { return !!event; }), operators.filter(function (_a) {
3572
- var item = _a.item, type = _a.type;
3573
- return targetItem === item && targetType === type;
3574
- }), operators.tap(function () { return _this.clearFocus(); }));
3575
- };
3576
- FocusControllerService.prototype.clearFocus = function () {
3577
- this._focusOn.next(null);
3578
- };
3579
- return FocusControllerService;
3580
- }());
3581
- FocusControllerService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FocusControllerService, deps: [], target: i0__namespace.ɵɵFactoryTarget.Injectable });
3582
- FocusControllerService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FocusControllerService });
3583
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FocusControllerService, decorators: [{
3584
- type: i0.Injectable
3585
- }], ctorParameters: function () { return []; } });
3586
-
3587
3520
  var FocusToItemDirective = /** @class */ (function () {
3588
3521
  function FocusToItemDirective(_el, _focusController, _targetSelect, _targetDate, _targetDateScroll, _targetDateRangeFrom, _targetDateRangeTo, _targetAutocomplete, _targetAutocompleteChips) {
3589
3522
  this._el = _el;
@@ -3657,7 +3590,7 @@
3657
3590
  };
3658
3591
  return FocusToItemDirective;
3659
3592
  }());
3660
- FocusToItemDirective.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FocusToItemDirective, deps: [{ token: i0__namespace.ElementRef }, { token: FocusControllerService }, { token: i2__namespace.MatSelect, optional: true, self: true }, { token: i3__namespace$3.FsDatePickerComponent, optional: true, self: true }, { token: i3__namespace$3.FsDateScrollPickerComponent, optional: true, self: true }, { token: i3__namespace$3.DateRangePickerFromComponent, optional: true, self: true }, { token: i3__namespace$3.DateRangePickerToComponent, optional: true, self: true }, { token: i4__namespace$1.FsAutocompleteComponent, optional: true, self: true }, { token: i5__namespace.FsAutocompleteChipsComponent, optional: true, self: true }], target: i0__namespace.ɵɵFactoryTarget.Directive });
3593
+ FocusToItemDirective.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FocusToItemDirective, deps: [{ token: i0__namespace.ElementRef }, { token: FocusControllerService }, { token: i2__namespace.MatSelect, optional: true, self: true }, { token: i3__namespace$4.FsDatePickerComponent, optional: true, self: true }, { token: i3__namespace$4.FsDateScrollPickerComponent, optional: true, self: true }, { token: i3__namespace$4.DateRangePickerFromComponent, optional: true, self: true }, { token: i3__namespace$4.DateRangePickerToComponent, optional: true, self: true }, { token: i4__namespace$2.FsAutocompleteComponent, optional: true, self: true }, { token: i5__namespace.FsAutocompleteChipsComponent, optional: true, self: true }], target: i0__namespace.ɵɵFactoryTarget.Directive });
3661
3594
  FocusToItemDirective.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: { _item: ["fsFilterFocusTrigger", "_item"], _focusTargetType: ["focusTargetType", "_focusTargetType"] }, ngImport: i0__namespace });
3662
3595
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FocusToItemDirective, decorators: [{
3663
3596
  type: i0.Directive,
@@ -3669,23 +3602,23 @@
3669
3602
  type: i0.Optional
3670
3603
  }, {
3671
3604
  type: i0.Self
3672
- }] }, { type: i3__namespace$3.FsDatePickerComponent, decorators: [{
3605
+ }] }, { type: i3__namespace$4.FsDatePickerComponent, decorators: [{
3673
3606
  type: i0.Optional
3674
3607
  }, {
3675
3608
  type: i0.Self
3676
- }] }, { type: i3__namespace$3.FsDateScrollPickerComponent, decorators: [{
3609
+ }] }, { type: i3__namespace$4.FsDateScrollPickerComponent, decorators: [{
3677
3610
  type: i0.Optional
3678
3611
  }, {
3679
3612
  type: i0.Self
3680
- }] }, { type: i3__namespace$3.DateRangePickerFromComponent, decorators: [{
3613
+ }] }, { type: i3__namespace$4.DateRangePickerFromComponent, decorators: [{
3681
3614
  type: i0.Optional
3682
3615
  }, {
3683
3616
  type: i0.Self
3684
- }] }, { type: i3__namespace$3.DateRangePickerToComponent, decorators: [{
3617
+ }] }, { type: i3__namespace$4.DateRangePickerToComponent, decorators: [{
3685
3618
  type: i0.Optional
3686
3619
  }, {
3687
3620
  type: i0.Self
3688
- }] }, { type: i4__namespace$1.FsAutocompleteComponent, decorators: [{
3621
+ }] }, { type: i4__namespace$2.FsAutocompleteComponent, decorators: [{
3689
3622
  type: i0.Optional
3690
3623
  }, {
3691
3624
  type: i0.Self
@@ -3808,7 +3741,7 @@
3808
3741
  return SelectMultipleComponent;
3809
3742
  }());
3810
3743
  SelectMultipleComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: SelectMultipleComponent, deps: [{ token: i0__namespace.ChangeDetectorRef }], target: i0__namespace.ɵɵFactoryTarget.Component });
3811
- SelectMultipleComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SelectMultipleComponent, selector: "filter-item-select-multiple", inputs: { item: "item" }, viewQueries: [{ propertyName: "select", first: true, predicate: ["select"], descendants: true, static: true }], ngImport: i0__namespace, template: "<mat-form-field [ngClass]=\"{ isolate: item.isolate }\">\n <mat-label>{{item.label}}</mat-label>\n <mat-select\n #select\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n (ngModelChange)=\"changed()\"\n [multiple]=\"item.multiple\">\n <mat-option\n *ngFor=\"let item of item.values | fsFilterIsolateValues: item.isolate\"\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n\n <mat-hint>\n <div *ngIf=\"item.isolate\">\n <mat-checkbox (change)=\"isolateChange(item)\" [(ngModel)]=\"item.isolate.enabled\">\n <span class=\"checkbox-label\">{{ item.isolate.label }}</span>\n </mat-checkbox>\n </div>\n </mat-hint>\n</mat-form-field>\n", styles: [".isolate{margin-bottom:25px}\n"], components: [{ type: i1__namespace$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i2__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i4__namespace$2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1__namespace$3.MatLabel, selector: "mat-label" }, { type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: ["fsFilterFocusTrigger", "focusTargetType"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1__namespace$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsFilterIsolateValues": FsFilterIsolateValues }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3744
+ SelectMultipleComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SelectMultipleComponent, selector: "filter-item-select-multiple", inputs: { item: "item" }, viewQueries: [{ propertyName: "select", first: true, predicate: ["select"], descendants: true, static: true }], ngImport: i0__namespace, template: "<mat-form-field [ngClass]=\"{ isolate: item.isolate }\">\n <mat-label>{{item.label}}</mat-label>\n <mat-select\n #select\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n (ngModelChange)=\"changed()\"\n [multiple]=\"item.multiple\">\n <mat-option\n *ngFor=\"let item of item.values | fsFilterIsolateValues: item.isolate\"\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n\n <mat-hint>\n <div *ngIf=\"item.isolate\">\n <mat-checkbox (change)=\"isolateChange(item)\" [(ngModel)]=\"item.isolate.enabled\">\n <span class=\"checkbox-label\">{{ item.isolate.label }}</span>\n </mat-checkbox>\n </div>\n </mat-hint>\n</mat-form-field>\n", styles: [".isolate{margin-bottom:25px}\n"], components: [{ type: i1__namespace$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i2__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i4__namespace$3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1__namespace$3.MatLabel, selector: "mat-label" }, { type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: ["fsFilterFocusTrigger", "focusTargetType"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1__namespace$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsFilterIsolateValues": FsFilterIsolateValues }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3812
3745
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: SelectMultipleComponent, decorators: [{
3813
3746
  type: i0.Component,
3814
3747
  args: [{
@@ -3844,7 +3777,7 @@
3844
3777
  return SelectSimpleComponent;
3845
3778
  }());
3846
3779
  SelectSimpleComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: SelectSimpleComponent, deps: [{ token: i0__namespace.ChangeDetectorRef }], target: i0__namespace.ɵɵFactoryTarget.Component });
3847
- SelectSimpleComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SelectSimpleComponent, selector: "filter-item-select-simple", inputs: { item: "item" }, viewQueries: [{ propertyName: "select", first: true, predicate: ["select"], descendants: true, static: true }], ngImport: i0__namespace, template: "<mat-form-field [ngClass]=\"{ isolate: item.isolate }\">\n <mat-label>{{item.label}}</mat-label>\n <mat-select\n #select\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n (ngModelChange)=\"changed()\">\n <mat-option *ngFor=\"let item of item.values | fsFilterIsolateValues: item.isolate\"\n [value]=\"item.value\"\n >\n {{ item.name }}\n </mat-option>\n </mat-select>\n\n <mat-hint>\n <div *ngIf=\"item.isolate\">\n <mat-checkbox (change)=\"isolateChange(item)\" [(ngModel)]=\"item.isolate.enabled\">\n <span class=\"checkbox-label\">{{ item.isolate.label }}</span>\n </mat-checkbox>\n </div>\n </mat-hint>\n</mat-form-field>\n", styles: [".isolate{margin-bottom:25px}\n"], components: [{ type: i1__namespace$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i2__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i4__namespace$2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1__namespace$3.MatLabel, selector: "mat-label" }, { type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: ["fsFilterFocusTrigger", "focusTargetType"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1__namespace$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsFilterIsolateValues": FsFilterIsolateValues }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3780
+ SelectSimpleComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SelectSimpleComponent, selector: "filter-item-select-simple", inputs: { item: "item" }, viewQueries: [{ propertyName: "select", first: true, predicate: ["select"], descendants: true, static: true }], ngImport: i0__namespace, template: "<mat-form-field [ngClass]=\"{ isolate: item.isolate }\">\n <mat-label>{{item.label}}</mat-label>\n <mat-select\n #select\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n (ngModelChange)=\"changed()\">\n <mat-option *ngFor=\"let item of item.values | fsFilterIsolateValues: item.isolate\"\n [value]=\"item.value\"\n >\n {{ item.name }}\n </mat-option>\n </mat-select>\n\n <mat-hint>\n <div *ngIf=\"item.isolate\">\n <mat-checkbox (change)=\"isolateChange(item)\" [(ngModel)]=\"item.isolate.enabled\">\n <span class=\"checkbox-label\">{{ item.isolate.label }}</span>\n </mat-checkbox>\n </div>\n </mat-hint>\n</mat-form-field>\n", styles: [".isolate{margin-bottom:25px}\n"], components: [{ type: i1__namespace$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i2__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i4__namespace$3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1__namespace$3.MatLabel, selector: "mat-label" }, { type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: ["fsFilterFocusTrigger", "focusTargetType"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1__namespace$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsFilterIsolateValues": FsFilterIsolateValues }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3848
3781
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: SelectSimpleComponent, decorators: [{
3849
3782
  type: i0.Component,
3850
3783
  args: [{
@@ -3959,7 +3892,7 @@
3959
3892
  return ChipsComponent;
3960
3893
  }(BaseItemComponent));
3961
3894
  ChipsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ChipsComponent, deps: [{ token: i0__namespace.KeyValueDiffers }, { token: i0__namespace.ChangeDetectorRef }], target: i0__namespace.ɵɵFactoryTarget.Component });
3962
- ChipsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ChipsComponent, selector: "filter-item-chips", usesInheritance: true, ngImport: i0__namespace, template: "<ng-template [ngIf]=\"item.values?.length\">\n <fs-label-field>\n <fs-label>{{item.label}}</fs-label>\n <fs-chips [(ngModel)]=\"item.model\"\n [compare]=\"compareFn\"\n [multiple]=\"item.multiple\">\n <fs-chip *ngFor=\"let value of item.values\"\n [value]=\"value\"\n [selectable]=\"true\">\n {{ value.name }}\n </fs-chip>\n </fs-chips>\n </fs-label-field>\n</ng-template>\n\n<ng-template [ngIf]=\"item.loading\">{{ item.label }} loading...</ng-template>\n", styles: ["fs-chip{line-height:40px}\n"], components: [{ type: i1__namespace$6.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i1__namespace$6.FsLabelComponent, selector: "fs-label" }, { type: i2__namespace$1.FsChipsComponent, selector: "fs-chips", inputs: ["compare", "multiple"] }, { type: i2__namespace$1.FsChipComponent, selector: "fs-chip", inputs: ["size", "value", "backgroundColor", "borderColor", "color", "outlined", "removable", "selectable", "selected", "image"], outputs: ["selectedToggled", "removed"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3895
+ ChipsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ChipsComponent, selector: "filter-item-chips", usesInheritance: true, ngImport: i0__namespace, template: "<ng-template [ngIf]=\"item.values?.length\">\n <fs-label-field>\n <fs-label>{{item.label}}</fs-label>\n <fs-chips [(ngModel)]=\"item.model\"\n [compare]=\"compareFn\"\n [multiple]=\"item.multiple\">\n <fs-chip *ngFor=\"let value of item.values\"\n [value]=\"value\"\n [selectable]=\"true\">\n {{ value.name }}\n </fs-chip>\n </fs-chips>\n </fs-label-field>\n</ng-template>\n\n<ng-template [ngIf]=\"item.loading\">{{ item.label }} loading...</ng-template>\n", styles: ["fs-chip{line-height:40px}\n"], components: [{ type: i1__namespace$5.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i1__namespace$5.FsLabelComponent, selector: "fs-label" }, { type: i2__namespace$2.FsChipsComponent, selector: "fs-chips", inputs: ["compare", "multiple"] }, { type: i2__namespace$2.FsChipComponent, selector: "fs-chip", inputs: ["size", "value", "backgroundColor", "borderColor", "color", "outlined", "removable", "selectable", "selected", "image"], outputs: ["selectedToggled", "removed"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3963
3896
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ChipsComponent, decorators: [{
3964
3897
  type: i0.Component,
3965
3898
  args: [{
@@ -4029,7 +3962,7 @@
4029
3962
  return AutocompleteComponent;
4030
3963
  }(BaseItemComponent));
4031
3964
  AutocompleteComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: AutocompleteComponent, deps: [{ token: i0__namespace.KeyValueDiffers }, { token: i0__namespace.ChangeDetectorRef }], target: i0__namespace.ɵɵFactoryTarget.Component });
4032
- AutocompleteComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: AutocompleteComponent, selector: "filter-item-autocomplete", usesInheritance: true, ngImport: i0__namespace, template: "<fs-autocomplete\n [fsFilterFocusTrigger]=\"item\"\n [fetch]=\"fetch\"\n [displayWith]=\"displayWith\"\n [(ngModel)]=\"item.model\"\n [placeholder]=\"label\"\n [fetchOnFocus]=\"item.fetchOnFocus\"\n [showClear]=\"item.showClear\"\n name=\"item.name\">\n <ng-template fsAutocompleteTemplate let-data=\"data\">\n {{data.name}}\n </ng-template>\n</fs-autocomplete>\n", components: [{ type: i4__namespace$1.FsAutocompleteComponent, selector: "fs-autocomplete", inputs: ["fetch", "placeholder", "displayWith", "fetchOnFocus", "readonly", "required", "disabled", "hint", "panelWidth", "panelClass", "showClear"], outputs: ["cleared"] }], directives: [{ type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: ["fsFilterFocusTrigger", "focusTargetType"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4__namespace$1.FsAutocompleteTemplateDirective, selector: "[fsAutocompleteTemplate]" }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
3965
+ AutocompleteComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: AutocompleteComponent, selector: "filter-item-autocomplete", usesInheritance: true, ngImport: i0__namespace, template: "<fs-autocomplete\n [fsFilterFocusTrigger]=\"item\"\n [fetch]=\"fetch\"\n [displayWith]=\"displayWith\"\n [(ngModel)]=\"item.model\"\n [placeholder]=\"label\"\n [fetchOnFocus]=\"item.fetchOnFocus\"\n [showClear]=\"item.showClear\"\n name=\"item.name\">\n <ng-template fsAutocompleteTemplate let-data=\"data\">\n {{data.name}}\n </ng-template>\n</fs-autocomplete>\n", components: [{ type: i4__namespace$2.FsAutocompleteComponent, selector: "fs-autocomplete", inputs: ["fetch", "placeholder", "displayWith", "fetchOnFocus", "readonly", "required", "disabled", "hint", "panelWidth", "panelClass", "showClear"], outputs: ["cleared"] }], directives: [{ type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: ["fsFilterFocusTrigger", "focusTargetType"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4__namespace$2.FsAutocompleteTemplateDirective, selector: "[fsAutocompleteTemplate]" }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4033
3966
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: AutocompleteComponent, decorators: [{
4034
3967
  type: i0.Component,
4035
3968
  args: [{
@@ -4114,7 +4047,7 @@
4114
4047
  return DateComponent;
4115
4048
  }(BaseItemComponent));
4116
4049
  DateComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: DateComponent, deps: [{ token: i0__namespace.KeyValueDiffers }, { token: i0__namespace.ChangeDetectorRef }], target: i0__namespace.ɵɵFactoryTarget.Component });
4117
- DateComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: DateComponent, selector: "filter-item-date", usesInheritance: true, ngImport: i0__namespace, template: "<mat-form-field *ngIf=\"item.mode===itemDateMode.Calendar; else elseMode\">\n <mat-label>{{item.label}}</mat-label>\n <input matInput\n fsDatePicker\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [maxYear]=\"item.maxYear\"\n [view]=\"viewType\"\n [clear]=\"item.showClear\"\n [name]=\"item.name\">\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n</mat-form-field>\n\n<ng-template #elseMode>\n <mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <input matInput\n fsDateScrollPicker\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [maxYear]=\"item.maxYear\"\n [showMonth]=\"showMonth\"\n [showDay]=\"showDay\"\n [showYear]=\"showYear\"\n [clear]=\"item.showClear\"\n [name]=\"item.name\">\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n </mat-form-field>\n</ng-template>\n", components: [{ type: i1__namespace$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i3__namespace$3.FsDatePickerComponent, selector: "[fsDatePicker]", inputs: ["minYear", "maxYear", "minDate", "maxDate", "startOfDay", "view", "format", "minutes"], outputs: ["change"] }, { type: i3__namespace$3.FsDateScrollPickerComponent, selector: "[fsDateScrollPicker]", inputs: ["minYear", "maxYear", "maxDate", "showMonth", "showYear", "showDay"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace$3.MatLabel, selector: "mat-label" }, { type: i3__namespace$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: ["fsFilterFocusTrigger", "focusTargetType"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1__namespace$3.MatPlaceholder, selector: "mat-placeholder" }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4050
+ DateComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: DateComponent, selector: "filter-item-date", usesInheritance: true, ngImport: i0__namespace, template: "<mat-form-field *ngIf=\"item.mode===itemDateMode.Calendar; else elseMode\">\n <mat-label>{{item.label}}</mat-label>\n <input matInput\n fsDatePicker\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [maxYear]=\"item.maxYear\"\n [view]=\"viewType\"\n [clear]=\"item.showClear\"\n [name]=\"item.name\">\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n</mat-form-field>\n\n<ng-template #elseMode>\n <mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <input matInput\n fsDateScrollPicker\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [maxYear]=\"item.maxYear\"\n [showMonth]=\"showMonth\"\n [showDay]=\"showDay\"\n [showYear]=\"showYear\"\n [clear]=\"item.showClear\"\n [name]=\"item.name\">\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n </mat-form-field>\n</ng-template>\n", components: [{ type: i1__namespace$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i3__namespace$4.FsDatePickerComponent, selector: "[fsDatePicker]", inputs: ["minYear", "maxYear", "minDate", "maxDate", "startOfDay", "view", "format", "minutes"], outputs: ["change"] }, { type: i3__namespace$4.FsDateScrollPickerComponent, selector: "[fsDateScrollPicker]", inputs: ["minYear", "maxYear", "maxDate", "showMonth", "showYear", "showDay"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace$3.MatLabel, selector: "mat-label" }, { type: i3__namespace$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: ["fsFilterFocusTrigger", "focusTargetType"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1__namespace$3.MatPlaceholder, selector: "mat-placeholder" }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4118
4051
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: DateComponent, decorators: [{
4119
4052
  type: i0.Component,
4120
4053
  args: [{
@@ -4144,7 +4077,7 @@
4144
4077
  return DateRangeComponent;
4145
4078
  }(BaseItemComponent));
4146
4079
  DateRangeComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: DateRangeComponent, deps: [{ token: i0__namespace.KeyValueDiffers }, { token: i0__namespace.ChangeDetectorRef }], target: i0__namespace.ɵɵFactoryTarget.Component });
4147
- DateRangeComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: DateRangeComponent, selector: "filter-item-date-range", usesInheritance: true, ngImport: i0__namespace, template: "<mat-form-field>\n <mat-label>{{item.label[0]}}</mat-label>\n <input\n matInput\n [fsFilterFocusTrigger]=\"item\"\n [focusTargetType]=\"'from'\"\n [fsDateRangeFrom]=\"item.name\"\n [(ngModel)]=\"item.model.from\"\n (ngModelChange)=\"itemChange()\"\n [clear]=\"item.showClear\"\n [view]=\"viewType\"\n name=\"date_from\">\n</mat-form-field>\n\n<mat-form-field>\n <mat-label>{{item.label[1]}}</mat-label>\n <input\n matInput\n [fsFilterFocusTrigger]=\"item\"\n [focusTargetType]=\"'to'\"\n [fsDateRangeTo]=\"item.name\"\n [(ngModel)]=\"item.model.to\"\n (ngModelChange)=\"itemChange()\"\n [clear]=\"item.showClear\"\n [view]=\"viewType\"\n name=\"date_to\">\n</mat-form-field>\n", components: [{ type: i1__namespace$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i3__namespace$3.DateRangePickerFromComponent, selector: "[fsDateRangeFrom],[fsDateRangeFromPicker]", inputs: ["fsDateRangeFrom", "fsDateRangeFromPicker"] }, { type: i3__namespace$3.DateRangePickerToComponent, selector: "[fsDateRangeTo],[fsDateRangeToPicker]", inputs: ["fsDateRangeTo", "fsDateRangeToPicker"] }], directives: [{ type: i1__namespace$3.MatLabel, selector: "mat-label" }, { type: i3__namespace$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: ["fsFilterFocusTrigger", "focusTargetType"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4080
+ DateRangeComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: DateRangeComponent, selector: "filter-item-date-range", usesInheritance: true, ngImport: i0__namespace, template: "<mat-form-field>\n <mat-label>{{item.label[0]}}</mat-label>\n <input\n matInput\n [fsFilterFocusTrigger]=\"item\"\n [focusTargetType]=\"'from'\"\n [fsDateRangeFrom]=\"item.name\"\n [(ngModel)]=\"item.model.from\"\n (ngModelChange)=\"itemChange()\"\n [clear]=\"item.showClear\"\n [view]=\"viewType\"\n name=\"date_from\">\n</mat-form-field>\n\n<mat-form-field>\n <mat-label>{{item.label[1]}}</mat-label>\n <input\n matInput\n [fsFilterFocusTrigger]=\"item\"\n [focusTargetType]=\"'to'\"\n [fsDateRangeTo]=\"item.name\"\n [(ngModel)]=\"item.model.to\"\n (ngModelChange)=\"itemChange()\"\n [clear]=\"item.showClear\"\n [view]=\"viewType\"\n name=\"date_to\">\n</mat-form-field>\n", components: [{ type: i1__namespace$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i3__namespace$4.DateRangePickerFromComponent, selector: "[fsDateRangeFrom],[fsDateRangeFromPicker]", inputs: ["fsDateRangeFrom", "fsDateRangeFromPicker"] }, { type: i3__namespace$4.DateRangePickerToComponent, selector: "[fsDateRangeTo],[fsDateRangeToPicker]", inputs: ["fsDateRangeTo", "fsDateRangeToPicker"] }], directives: [{ type: i1__namespace$3.MatLabel, selector: "mat-label" }, { type: i3__namespace$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: ["fsFilterFocusTrigger", "focusTargetType"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4148
4081
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: DateRangeComponent, decorators: [{
4149
4082
  type: i0.Component,
4150
4083
  args: [{
@@ -4166,7 +4099,7 @@
4166
4099
  return WeekComponent;
4167
4100
  }(BaseItemComponent));
4168
4101
  WeekComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: WeekComponent, deps: [{ token: i0__namespace.KeyValueDiffers }, { token: i0__namespace.ChangeDetectorRef }], target: i0__namespace.ɵɵFactoryTarget.Component });
4169
- WeekComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: WeekComponent, selector: "filter-item-week", usesInheritance: true, ngImport: i0__namespace, template: "<mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <input matInput\n fsDateWeekPicker\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [seedDate]=\"item.seedDate\"\n [clear]=\"item.showClear\"\n [name]=\"item.name\">\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n</mat-form-field>\n", components: [{ type: i1__namespace$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i3__namespace$3.FsDateWeekPickerComponent, selector: "[fsDateWeekPicker]", inputs: ["minYear", "maxYear", "minDate", "maxDate", "seedDate", "period", "view"], outputs: ["change"] }], directives: [{ type: i1__namespace$3.MatLabel, selector: "mat-label" }, { type: i3__namespace$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: ["fsFilterFocusTrigger", "focusTargetType"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace$3.MatPlaceholder, selector: "mat-placeholder" }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4102
+ WeekComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: WeekComponent, selector: "filter-item-week", usesInheritance: true, ngImport: i0__namespace, template: "<mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <input matInput\n fsDateWeekPicker\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [seedDate]=\"item.seedDate\"\n [clear]=\"item.showClear\"\n [name]=\"item.name\">\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n</mat-form-field>\n", components: [{ type: i1__namespace$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i3__namespace$4.FsDateWeekPickerComponent, selector: "[fsDateWeekPicker]", inputs: ["minYear", "maxYear", "minDate", "maxDate", "seedDate", "period", "view"], outputs: ["change"] }], directives: [{ type: i1__namespace$3.MatLabel, selector: "mat-label" }, { type: i3__namespace$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FocusToItemDirective, selector: "[fsFilterFocusTrigger]", inputs: ["fsFilterFocusTrigger", "focusTargetType"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace$3.MatPlaceholder, selector: "mat-placeholder" }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4170
4103
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: WeekComponent, decorators: [{
4171
4104
  type: i0.Component,
4172
4105
  args: [{
@@ -4187,7 +4120,7 @@
4187
4120
  return CheckboxComponent;
4188
4121
  }(BaseItemComponent));
4189
4122
  CheckboxComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: CheckboxComponent, deps: [{ token: i0__namespace.KeyValueDiffers }, { token: i0__namespace.ChangeDetectorRef }], target: i0__namespace.ɵɵFactoryTarget.Component });
4190
- CheckboxComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CheckboxComponent, selector: "filter-item-checkbox", usesInheritance: true, ngImport: i0__namespace, template: "<fs-label-field>\n <mat-checkbox [(ngModel)]=\"item.model\">\n {{ item.label }}\n </mat-checkbox>\n</fs-label-field>\n", styles: ["fs-label-field{margin:0}\n"], components: [{ type: i1__namespace$6.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i4__namespace$2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4123
+ CheckboxComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CheckboxComponent, selector: "filter-item-checkbox", usesInheritance: true, ngImport: i0__namespace, template: "<fs-label-field>\n <mat-checkbox [(ngModel)]=\"item.model\">\n {{ item.label }}\n </mat-checkbox>\n</fs-label-field>\n", styles: ["fs-label-field{margin:0}\n"], components: [{ type: i1__namespace$5.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i4__namespace$3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4191
4124
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: CheckboxComponent, decorators: [{
4192
4125
  type: i0.Component,
4193
4126
  args: [{
@@ -4315,508 +4248,576 @@
4315
4248
  type: i0.Input
4316
4249
  }] } });
4317
4250
 
4318
- var FsFilterDrawerActionsComponent = /** @class */ (function () {
4319
- function FsFilterDrawerActionsComponent(externalParams) {
4251
+ var FilterDrawerComponent = /** @class */ (function () {
4252
+ function FilterDrawerComponent(externalParams, _cd, _itemsStore, overlayRef, data) {
4320
4253
  this.externalParams = externalParams;
4321
- this._clear = new i0.EventEmitter();
4322
- this._done = new i0.EventEmitter();
4254
+ this._cd = _cd;
4255
+ this._itemsStore = _itemsStore;
4256
+ this.overlayRef = overlayRef;
4257
+ this.data = data;
4258
+ this.inline = false;
4259
+ this.windowDesktop = false;
4260
+ this._itemsStore.prepareItems();
4261
+ this._clear = data.clear;
4262
+ this._done = data.done;
4263
+ this.updateWindowWidth();
4264
+ }
4265
+ FilterDrawerComponent.prototype.updateWindowWidth = function () {
4266
+ this.windowDesktop = window.innerWidth > 1200;
4267
+ };
4268
+ Object.defineProperty(FilterDrawerComponent.prototype, "items$", {
4269
+ get: function () {
4270
+ return this._itemsStore.visibleItems$;
4271
+ },
4272
+ enumerable: false,
4273
+ configurable: true
4274
+ });
4275
+ Object.defineProperty(FilterDrawerComponent.prototype, "sortItem", {
4276
+ get: function () {
4277
+ return this._itemsStore.sortByItem;
4278
+ },
4279
+ enumerable: false,
4280
+ configurable: true
4281
+ });
4282
+ Object.defineProperty(FilterDrawerComponent.prototype, "sortDirectionItem", {
4283
+ get: function () {
4284
+ return this._itemsStore.sortDirectionItem;
4285
+ },
4286
+ enumerable: false,
4287
+ configurable: true
4288
+ });
4289
+ FilterDrawerComponent.prototype.clear = function () {
4290
+ this._clear();
4291
+ // this.overlayRef.detach();
4292
+ };
4293
+ FilterDrawerComponent.prototype.done = function () {
4294
+ this._done();
4295
+ this.overlayRef.detach();
4296
+ };
4297
+ FilterDrawerComponent.prototype.backdropClick = function () {
4298
+ this.done();
4299
+ };
4300
+ return FilterDrawerComponent;
4301
+ }());
4302
+ FilterDrawerComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FilterDrawerComponent, deps: [{ token: ExternalParamsController }, { token: i0__namespace.ChangeDetectorRef }, { token: FsFilterItemsStore }, { token: FILTER_DRAWER_OVERLAY }, { token: FILTER_DRAWER_DATA }], target: i0__namespace.ɵɵFactoryTarget.Component });
4303
+ FilterDrawerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterDrawerComponent, selector: "ng-component", inputs: { inline: "inline" }, host: { listeners: { "window:resize": "updateWindowWidth()" } }, ngImport: i0__namespace, template: "<div class=\"filters\">\n <div class=\"filters-wrap\">\n\n <div class=\"filter-by\">\n <mat-icon>tune</mat-icon>\n <span class=\"text\">Filters</span>\n </div>\n\n <div class=\"overflow-shadow filter-items\">\n <div class=\"overflow-shadow-content\">\n <ng-container *fsSkeleton=\"(externalParams.pending$ | async) !== true\">\n <filter-item \n *ngFor=\"let filterItem of items$ | async\"\n class=\"filter-group\"\n [item]=\"filterItem\">\n </filter-item>\n\n <ng-container *ngIf=\"sortItem && sortItem.values && sortItem.values.length > 0\">\n <filter-item \n class=\"filter-group sort\"\n [item]=\"sortItem\">\n </filter-item>\n <filter-item \n class=\"filter-group sort\"\n [item]=\"sortDirectionItem\">\n </filter-item>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <fs-filter-drawer-actions \n class=\"filter-actions\"\n *ngIf=\"(externalParams.pending$ | async) !== true\"\n (clear)=\"clear()\"\n (done)=\"done()\">\n </fs-filter-drawer-actions>\n </div>\n</div>\n<div class=\"backdrop\" *ngIf=\"!windowDesktop\" (click)=\"backdropClick()\"></div>\n", styles: [":host ::ng-deep mat-form-field{width:100%}.filter-by{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:20px 25px}.filter-by mat-icon{margin-right:8px}.filter-by .text{font-weight:400;font-size:19px}.filter-actions{display:block;box-sizing:border-box;padding:13px}.filter-actions button{margin-right:6px}.filter-actions button:last-child{margin-right:0}.filters{position:fixed;display:block;top:0;right:0;z-index:1002;bottom:0}.filters .filters-wrap{background:#fff;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;width:85vw;max-width:350px;display:flex;flex-direction:column;height:100%;padding-top:calc(env(safe-area-inset-top))}.filters .filters-wrap .filter-items{overflow-y:auto}.filters .filters-wrap .filter-items .overflow-shadow-content{padding:0 25px;box-sizing:border-box}.filters .filter-group{margin:10px 0 0}.filters .filter-group:first-child{margin:0}.filters .filter label{white-space:nowrap;color:#0000008a}.filters .filter .interface.interface-range input,.filters .filter .interface.interface-range .mat-input-wrapper{text-align:center}.filters .filter .interface.interface-range{text-align:center}.filters .filter .interface.interface-datetime fs-datetime.has-time .md-input{width:100%}.filters .filter .interface fs-datetime-range input{text-align:center}.filters .filter .filter-label{width:1%;white-space:nowrap;vertical-align:middle;padding-right:15px}.filters md-autocomplete-container md-input-container{margin:0}.filters .isolate{margin-top:-12px}.filters .isolate .interface{line-height:20px;padding-bottom:1.25em}.filters .isolate md-checkbox{margin:0 0 0 2px}.backdrop{position:fixed;top:0;bottom:0;left:0;right:0;z-index:900;outline:none}\n"], components: [{ type: i2__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: FilterItemComponent, selector: "filter-item", inputs: ["item"] }, { type: FsFilterDrawerActionsComponent, selector: "fs-filter-drawer-actions", outputs: ["clear", "done"] }], directives: [{ type: i6__namespace$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4304
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FilterDrawerComponent, decorators: [{
4305
+ type: i0.Component,
4306
+ args: [{
4307
+ templateUrl: './filter-drawer.component.html',
4308
+ styleUrls: ['filter-drawer.component.scss'],
4309
+ // Commented out because filter items are not updating with a delayed observable. Need to figure this out.
4310
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
4311
+ }]
4312
+ }], ctorParameters: function () {
4313
+ return [{ type: ExternalParamsController }, { type: i0__namespace.ChangeDetectorRef }, { type: FsFilterItemsStore }, { type: i1__namespace$6.OverlayRef, decorators: [{
4314
+ type: i0.Inject,
4315
+ args: [FILTER_DRAWER_OVERLAY]
4316
+ }] }, { type: undefined, decorators: [{
4317
+ type: i0.Inject,
4318
+ args: [FILTER_DRAWER_DATA]
4319
+ }] }];
4320
+ }, propDecorators: { updateWindowWidth: [{
4321
+ type: i0.HostListener,
4322
+ args: ['window:resize']
4323
+ }], inline: [{
4324
+ type: i0.Input
4325
+ }] } });
4326
+
4327
+ var ActionMenuItem = /** @class */ (function () {
4328
+ function ActionMenuItem(config, _parent) {
4329
+ if (config === void 0) { config = {}; }
4330
+ this._parent = _parent;
4331
+ this.items = [];
4332
+ this._isGroup = false;
4333
+ this._visible$ = new rxjs.BehaviorSubject(true);
4334
+ this._disabled$ = new rxjs.BehaviorSubject(false);
4335
+ this._init(config);
4336
+ }
4337
+ Object.defineProperty(ActionMenuItem.prototype, "isGroup", {
4338
+ get: function () {
4339
+ return this._isGroup;
4340
+ },
4341
+ enumerable: false,
4342
+ configurable: true
4343
+ });
4344
+ Object.defineProperty(ActionMenuItem.prototype, "visible", {
4345
+ get: function () {
4346
+ return this._visible$.getValue();
4347
+ },
4348
+ enumerable: false,
4349
+ configurable: true
4350
+ });
4351
+ Object.defineProperty(ActionMenuItem.prototype, "visible$", {
4352
+ get: function () {
4353
+ return this._visible$.asObservable();
4354
+ },
4355
+ enumerable: false,
4356
+ configurable: true
4357
+ });
4358
+ Object.defineProperty(ActionMenuItem.prototype, "disabled", {
4359
+ get: function () {
4360
+ return this._disabled$.getValue();
4361
+ },
4362
+ set: function (value) {
4363
+ this._disabled$.next(value);
4364
+ },
4365
+ enumerable: false,
4366
+ configurable: true
4367
+ });
4368
+ Object.defineProperty(ActionMenuItem.prototype, "disabled$", {
4369
+ get: function () {
4370
+ return this._disabled$.asObservable();
4371
+ },
4372
+ enumerable: false,
4373
+ configurable: true
4374
+ });
4375
+ ActionMenuItem.prototype.updateVisibility = function () {
4376
+ var visible = !!this._showFn ? this._showFn() : true;
4377
+ if (!visible || !this.isGroup) {
4378
+ this._visible$.next(visible);
4379
+ return;
4380
+ }
4381
+ var numberOfVisibleChildren = this.items
4382
+ .reduce(function (acc, item) {
4383
+ item.updateVisibility();
4384
+ if (item.visible) {
4385
+ acc++;
4386
+ }
4387
+ return acc;
4388
+ }, 0);
4389
+ this._visible$.next(!!numberOfVisibleChildren);
4390
+ };
4391
+ ActionMenuItem.prototype._init = function (config) {
4392
+ var _this = this;
4393
+ this.label = config.label;
4394
+ this.icon = config.icon;
4395
+ this._showFn = config.show;
4396
+ if ('items' in config) {
4397
+ this._isGroup = true;
4398
+ if (Array.isArray(config.items)) {
4399
+ this.items = config
4400
+ .items
4401
+ .map(function (item) { return new ActionMenuItem(item, _this); });
4402
+ }
4403
+ this.updateVisibility();
4404
+ }
4405
+ else {
4406
+ this.click = config.click;
4407
+ this.routerLink = config.link;
4408
+ if (!this._parent) {
4409
+ this.updateVisibility();
4410
+ }
4411
+ }
4412
+ };
4413
+ return ActionMenuItem;
4414
+ }());
4415
+
4416
+ var Action = /** @class */ (function () {
4417
+ function Action(filterConfig, actionConfig) {
4418
+ if (actionConfig === void 0) { actionConfig = {}; }
4419
+ this.primary = true;
4420
+ this.isReorderAction = false;
4421
+ this.classArray = [];
4422
+ this.items = [];
4423
+ this._visible$ = new rxjs.BehaviorSubject(true);
4424
+ this._disabled$ = new rxjs.BehaviorSubject(false);
4425
+ this._init(filterConfig, actionConfig);
4323
4426
  }
4324
- Object.defineProperty(FsFilterDrawerActionsComponent.prototype, "savedFilters", {
4427
+ Object.defineProperty(Action.prototype, "visible", {
4325
4428
  get: function () {
4326
- return this.externalParams.savedFiltersController;
4429
+ return this._visible$.getValue();
4327
4430
  },
4328
4431
  enumerable: false,
4329
4432
  configurable: true
4330
4433
  });
4331
- FsFilterDrawerActionsComponent.prototype.done = function () {
4332
- this._done.emit();
4333
- };
4334
- FsFilterDrawerActionsComponent.prototype.clear = function () {
4335
- this._clear.emit();
4336
- };
4337
- FsFilterDrawerActionsComponent.prototype.saveFilters = function () {
4338
- this.externalParams
4339
- .savedFiltersController
4340
- .openSavedFilterEditDialog();
4341
- };
4342
- return FsFilterDrawerActionsComponent;
4343
- }());
4344
- FsFilterDrawerActionsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterDrawerActionsComponent, deps: [{ token: ExternalParamsController }], target: i0__namespace.ɵɵFactoryTarget.Component });
4345
- FsFilterDrawerActionsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterDrawerActionsComponent, selector: "fs-filter-drawer-actions", outputs: { _clear: "clear", _done: "done" }, ngImport: i0__namespace, template: "<button type=\"button\" mat-button color=\"primary\" (click)=\"done()\">Done</button>\n<button type=\"button\" mat-button (click)=\"clear()\">Clear</button>\n<ng-container *ngIf=\"savedFilters.enabled$ | async\">\n <button type=\"button\" mat-button (click)=\"saveFilters()\">Save</button>\n</ng-container>\n\n", components: [{ type: i1__namespace$4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3__namespace.AsyncPipe } });
4346
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterDrawerActionsComponent, decorators: [{
4347
- type: i0.Component,
4348
- args: [{
4349
- selector: 'fs-filter-drawer-actions',
4350
- templateUrl: './filter-drawer-actions.component.html',
4351
- }]
4352
- }], ctorParameters: function () { return [{ type: ExternalParamsController }]; }, propDecorators: { _clear: [{
4353
- type: i0.Output,
4354
- args: ['clear']
4355
- }], _done: [{
4356
- type: i0.Output,
4357
- args: ['done']
4358
- }] } });
4359
-
4360
- var FilterDrawerComponent = /** @class */ (function () {
4361
- function FilterDrawerComponent(externalParams, _cd, _itemsStore, overlayRef, data) {
4362
- this.externalParams = externalParams;
4363
- this._cd = _cd;
4364
- this._itemsStore = _itemsStore;
4365
- this.overlayRef = overlayRef;
4366
- this.data = data;
4367
- this.inline = false;
4368
- this.windowDesktop = false;
4369
- this._itemsStore.prepareItems();
4370
- this._clear = data.clear;
4371
- this._done = data.done;
4372
- this.updateWindowWidth();
4373
- }
4374
- FilterDrawerComponent.prototype.updateWindowWidth = function () {
4375
- this.windowDesktop = window.innerWidth > 1200;
4376
- };
4377
- Object.defineProperty(FilterDrawerComponent.prototype, "items$", {
4434
+ Object.defineProperty(Action.prototype, "visible$", {
4378
4435
  get: function () {
4379
- return this._itemsStore.visibleItems$;
4436
+ return this._visible$.asObservable();
4380
4437
  },
4381
4438
  enumerable: false,
4382
4439
  configurable: true
4383
4440
  });
4384
- Object.defineProperty(FilterDrawerComponent.prototype, "sortItem", {
4441
+ Object.defineProperty(Action.prototype, "disabled", {
4385
4442
  get: function () {
4386
- return this._itemsStore.sortByItem;
4443
+ return this._disabled$.getValue();
4444
+ },
4445
+ set: function (value) {
4446
+ this._disabled$.next(value);
4387
4447
  },
4388
4448
  enumerable: false,
4389
4449
  configurable: true
4390
4450
  });
4391
- Object.defineProperty(FilterDrawerComponent.prototype, "sortDirectionItem", {
4451
+ Object.defineProperty(Action.prototype, "disabled$", {
4392
4452
  get: function () {
4393
- return this._itemsStore.sortDirectionItem;
4453
+ return this._disabled$.asObservable();
4394
4454
  },
4395
4455
  enumerable: false,
4396
4456
  configurable: true
4397
4457
  });
4398
- FilterDrawerComponent.prototype.clear = function () {
4399
- this._clear();
4400
- // this.overlayRef.detach();
4458
+ Action.prototype.updateVisibility = function () {
4459
+ var visible = !!this._showFn ? this._showFn() : true;
4460
+ if (!visible || this.mode !== exports.ActionMode.Menu) {
4461
+ this._visible$.next(visible);
4462
+ return;
4463
+ }
4464
+ var hasVisibleChildren = this.items.some(function (item) { return item.visible; });
4465
+ this._visible$.next(hasVisibleChildren);
4401
4466
  };
4402
- FilterDrawerComponent.prototype.done = function () {
4403
- this._done();
4404
- this.overlayRef.detach();
4467
+ Action.prototype.updateDisabledState = function () {
4468
+ if (this._disabledFn) {
4469
+ this.disabled = this._disabledFn();
4470
+ }
4405
4471
  };
4406
- FilterDrawerComponent.prototype.backdropClick = function () {
4407
- this.done();
4472
+ Action.prototype._init = function (filterConfig, config) {
4473
+ if (config === void 0) { config = {}; }
4474
+ var _a, _b, _c, _d, _e, _f;
4475
+ config.mode = (_a = config.mode) !== null && _a !== void 0 ? _a : exports.ActionMode.Button;
4476
+ this.primary = (_b = config.primary) !== null && _b !== void 0 ? _b : true;
4477
+ this.color = config.color;
4478
+ this.tooltip = config.tooltip;
4479
+ this.label = config.label;
4480
+ this.mode = config.mode;
4481
+ this.icon = config.icon;
4482
+ this.iconPlacement = config.iconPlacement;
4483
+ this._showFn = config.show;
4484
+ this.tabIndex = (_c = config.tabIndex) !== null && _c !== void 0 ? _c : 0;
4485
+ this.menu = config.menu;
4486
+ if (!this.type) {
4487
+ this.type = (config.type || ((_d = filterConfig.button) === null || _d === void 0 ? void 0 : _d.style) || exports.ActionType.Raised);
4488
+ if (this.type === exports.ActionType.Stroked && this.primary) {
4489
+ this.type = exports.ActionType.Flat;
4490
+ }
4491
+ }
4492
+ if (config.multiple !== undefined) {
4493
+ this.multiple = config.multiple;
4494
+ }
4495
+ if (config.className) {
4496
+ this.className = config.className;
4497
+ this.classArray = this.className
4498
+ .split(' ');
4499
+ }
4500
+ if (this.primary) {
4501
+ this.color = 'primary';
4502
+ }
4503
+ switch (config.mode) {
4504
+ case exports.ActionMode.Button:
4505
+ {
4506
+ this.customize = config.customize;
4507
+ this.click = (_e = config.click) !== null && _e !== void 0 ? _e : (function () { });
4508
+ this._disabledFn = config.disabled;
4509
+ this.updateDisabledState();
4510
+ }
4511
+ break;
4512
+ case exports.ActionMode.Menu:
4513
+ {
4514
+ if (config.items && Array.isArray(config.items)) {
4515
+ this.items = config.items.map(function (item) { return new ActionMenuItem(item); });
4516
+ }
4517
+ }
4518
+ break;
4519
+ case exports.ActionMode.File:
4520
+ {
4521
+ this.fileSelected = config.select;
4522
+ this.fileError = config.error;
4523
+ this.accept = config.accept;
4524
+ this.imageQuality = config.imageQuality;
4525
+ this.minWidth = config.minWidth;
4526
+ this.minHeight = config.minHeight;
4527
+ this.maxWidth = config.maxWidth;
4528
+ this.maxHeight = config.maxHeight;
4529
+ this.click = (_f = config.click) !== null && _f !== void 0 ? _f : (function () { });
4530
+ this._disabledFn = config.disabled;
4531
+ this.updateDisabledState();
4532
+ }
4533
+ break;
4534
+ }
4535
+ this.updateVisibility();
4408
4536
  };
4409
- return FilterDrawerComponent;
4410
- }());
4411
- FilterDrawerComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FilterDrawerComponent, deps: [{ token: ExternalParamsController }, { token: i0__namespace.ChangeDetectorRef }, { token: FsFilterItemsStore }, { token: FILTER_DRAWER_OVERLAY }, { token: FILTER_DRAWER_DATA }], target: i0__namespace.ɵɵFactoryTarget.Component });
4412
- FilterDrawerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterDrawerComponent, selector: "ng-component", inputs: { inline: "inline" }, host: { listeners: { "window:resize": "updateWindowWidth()" } }, ngImport: i0__namespace, template: "<div class=\"filters\">\n <div class=\"filters-wrap\">\n\n <div class=\"filter-by\">\n <mat-icon>tune</mat-icon>\n <span class=\"text\">Filters</span>\n </div>\n\n <div class=\"overflow-shadow filter-items\">\n <div class=\"overflow-shadow-content\">\n <ng-container *fsSkeleton=\"(externalParams.pending$ | async) !== true\">\n <filter-item \n *ngFor=\"let filterItem of items$ | async\"\n class=\"filter-group\"\n [item]=\"filterItem\">\n </filter-item>\n\n <ng-container *ngIf=\"sortItem && sortItem.values && sortItem.values.length > 0\">\n <filter-item \n class=\"filter-group sort\"\n [item]=\"sortItem\">\n </filter-item>\n <filter-item \n class=\"filter-group sort\"\n [item]=\"sortDirectionItem\">\n </filter-item>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <fs-filter-drawer-actions \n class=\"filter-actions\"\n *ngIf=\"(externalParams.pending$ | async) !== true\"\n (clear)=\"clear()\"\n (done)=\"done()\">\n </fs-filter-drawer-actions>\n </div>\n</div>\n<div class=\"backdrop\" *ngIf=\"!windowDesktop\" (click)=\"backdropClick()\"></div>\n", styles: [":host ::ng-deep mat-form-field{width:100%}.filter-by{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:20px 25px}.filter-by mat-icon{margin-right:8px}.filter-by .text{font-weight:400;font-size:19px}.filter-actions{display:block;box-sizing:border-box;padding:13px}.filter-actions button{margin-right:6px}.filter-actions button:last-child{margin-right:0}.filters{position:fixed;display:block;top:0;right:0;z-index:1002;bottom:0}.filters .filters-wrap{background:#fff;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;width:85vw;max-width:350px;display:flex;flex-direction:column;height:100%;padding-top:calc(env(safe-area-inset-top))}.filters .filters-wrap .filter-items{overflow-y:auto}.filters .filters-wrap .filter-items .overflow-shadow-content{padding:0 25px;box-sizing:border-box}.filters .filter-group{margin:10px 0 0}.filters .filter-group:first-child{margin:0}.filters .filter label{white-space:nowrap;color:#0000008a}.filters .filter .interface.interface-range input,.filters .filter .interface.interface-range .mat-input-wrapper{text-align:center}.filters .filter .interface.interface-range{text-align:center}.filters .filter .interface.interface-datetime fs-datetime.has-time .md-input{width:100%}.filters .filter .interface fs-datetime-range input{text-align:center}.filters .filter .filter-label{width:1%;white-space:nowrap;vertical-align:middle;padding-right:15px}.filters md-autocomplete-container md-input-container{margin:0}.filters .isolate{margin-top:-12px}.filters .isolate .interface{line-height:20px;padding-bottom:1.25em}.filters .isolate md-checkbox{margin:0 0 0 2px}.backdrop{position:fixed;top:0;bottom:0;left:0;right:0;z-index:900;outline:none}\n"], components: [{ type: i2__namespace$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: FilterItemComponent, selector: "filter-item", inputs: ["item"] }, { type: FsFilterDrawerActionsComponent, selector: "fs-filter-drawer-actions", outputs: ["clear", "done"] }], directives: [{ type: i6__namespace$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4413
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FilterDrawerComponent, decorators: [{
4414
- type: i0.Component,
4415
- args: [{
4416
- templateUrl: './filter-drawer.component.html',
4417
- styleUrls: ['filter-drawer.component.scss'],
4418
- // Commented out because filter items are not updating with a delayed observable. Need to figure this out.
4419
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
4420
- }]
4421
- }], ctorParameters: function () {
4422
- return [{ type: ExternalParamsController }, { type: i0__namespace.ChangeDetectorRef }, { type: FsFilterItemsStore }, { type: i1__namespace$7.OverlayRef, decorators: [{
4423
- type: i0.Inject,
4424
- args: [FILTER_DRAWER_OVERLAY]
4425
- }] }, { type: undefined, decorators: [{
4426
- type: i0.Inject,
4427
- args: [FILTER_DRAWER_DATA]
4428
- }] }];
4429
- }, propDecorators: { updateWindowWidth: [{
4430
- type: i0.HostListener,
4431
- args: ['window:resize']
4432
- }], inline: [{
4433
- type: i0.Input
4434
- }] } });
4435
-
4436
- var FS_FILTER_META = new i0.InjectionToken('fs.filter.meta', {
4437
- providedIn: 'root',
4438
- factory: function () {
4439
- return {
4440
- openedFilters: 0,
4441
- };
4442
- }
4443
- });
4537
+ return Action;
4538
+ }());
4444
4539
 
4445
- var FsFilterOverlayService = /** @class */ (function () {
4446
- function FsFilterOverlayService(_injector, _filterMeta, _overlay, _focusController) {
4447
- this._injector = _injector;
4448
- this._filterMeta = _filterMeta;
4449
- this._overlay = _overlay;
4450
- this._focusController = _focusController;
4451
- this.detach$ = new rxjs.Subject();
4452
- this.attach$ = new rxjs.Subject();
4540
+ var ActionsController = /** @class */ (function () {
4541
+ function ActionsController(_breakpointObserver) {
4542
+ this._breakpointObserver = _breakpointObserver;
4543
+ this._visible$ = new rxjs.BehaviorSubject(false);
4544
+ this._actions$ = new rxjs.BehaviorSubject([]);
4545
+ this._menuActions$ = new rxjs.BehaviorSubject([]);
4453
4546
  this._destroy$ = new rxjs.Subject();
4454
- this._openWhenChipClicked();
4547
+ this._mobileMedia = '(max-width: 799px)';
4548
+ this._allActions = [];
4549
+ this._listenMobileMedia();
4455
4550
  }
4456
- Object.defineProperty(FsFilterOverlayService.prototype, "isOpened", {
4551
+ Object.defineProperty(ActionsController.prototype, "menuActions", {
4457
4552
  get: function () {
4458
- return !!this._overlayRef;
4553
+ return this._menuActions$.value;
4459
4554
  },
4460
4555
  enumerable: false,
4461
4556
  configurable: true
4462
4557
  });
4463
- FsFilterOverlayService.prototype.setClearFn = function (fn) {
4464
- this._clearFn = fn;
4465
- };
4466
- FsFilterOverlayService.prototype.setDoneFn = function (fn) {
4467
- this._doneFn = fn;
4468
- };
4469
- FsFilterOverlayService.prototype.close = function () {
4470
- if (this._overlayRef) {
4471
- this._overlayRef.detach();
4472
- this._overlayRef = null;
4473
- this.removeFilterClass();
4474
- }
4475
- };
4476
- FsFilterOverlayService.prototype.open = function () {
4477
- var _this = this;
4478
- this._overlayRef = this._createOverlay();
4479
- this._overlayRef.backdropClick()
4480
- .pipe(operators.takeUntil(this._destroy$))
4481
- .subscribe(function () {
4482
- _this._overlayRef.detach();
4483
- });
4484
- this._overlayRef.detachments()
4485
- .pipe(operators.takeUntil(this._destroy$))
4486
- .subscribe(function () {
4487
- _this.detach$.next();
4488
- });
4489
- this._overlayRef.attachments()
4490
- .pipe(operators.takeUntil(this._destroy$))
4491
- .subscribe(function () {
4492
- _this.attach$.next();
4493
- });
4494
- this.addFilterClass();
4495
- return this.openPortalPreview();
4496
- };
4497
- FsFilterOverlayService.prototype.ngOnDestroy = function () {
4558
+ Object.defineProperty(ActionsController.prototype, "actions", {
4559
+ get: function () {
4560
+ return this._actions$.value;
4561
+ },
4562
+ enumerable: false,
4563
+ configurable: true
4564
+ });
4565
+ Object.defineProperty(ActionsController.prototype, "actions$", {
4566
+ get: function () {
4567
+ return this._actions$.asObservable();
4568
+ },
4569
+ enumerable: false,
4570
+ configurable: true
4571
+ });
4572
+ Object.defineProperty(ActionsController.prototype, "menuActions$", {
4573
+ get: function () {
4574
+ return this._menuActions$.asObservable();
4575
+ },
4576
+ enumerable: false,
4577
+ configurable: true
4578
+ });
4579
+ Object.defineProperty(ActionsController.prototype, "visible$", {
4580
+ get: function () {
4581
+ return this._visible$.asObservable();
4582
+ },
4583
+ enumerable: false,
4584
+ configurable: true
4585
+ });
4586
+ Object.defineProperty(ActionsController.prototype, "mobileMode", {
4587
+ get: function () {
4588
+ return this._breakpointObserver.isMatched(this._mobileMedia);
4589
+ },
4590
+ enumerable: false,
4591
+ configurable: true
4592
+ });
4593
+ ActionsController.prototype.ngOnDestroy = function () {
4498
4594
  this._destroy$.next();
4499
4595
  this._destroy$.complete();
4500
4596
  };
4501
- FsFilterOverlayService.prototype._createOverlay = function () {
4502
- var overlayConfig = new i1$7.OverlayConfig({
4503
- hasBackdrop: true,
4504
- backdropClass: 'fs-filter-backdrop'
4505
- });
4506
- return this._overlay.create(overlayConfig);
4597
+ ActionsController.prototype.setConfig = function (config) {
4598
+ this._config = config;
4599
+ this.initActions(config.actions);
4507
4600
  };
4508
- FsFilterOverlayService.prototype.openPortalPreview = function () {
4509
- var data = { done: this._doneFn, clear: this._clearFn };
4510
- var injector = this._createInjector(this._injector, data, this._overlayRef);
4511
- var containerPortal = new portal.ComponentPortal(FilterDrawerComponent, undefined, injector);
4512
- var containerRef = this._overlayRef.attach(containerPortal);
4513
- return containerRef.instance;
4601
+ ActionsController.prototype.initActions = function (rawActions) {
4602
+ var _this = this;
4603
+ if (!rawActions || !Array.isArray(rawActions)) {
4604
+ return;
4605
+ }
4606
+ this.show();
4607
+ this._allActions = rawActions
4608
+ .map(function (action) { return new Action(_this._config, action); });
4609
+ if (this._reorderAction) {
4610
+ this._allActions.unshift(this._reorderAction);
4611
+ }
4612
+ this._classifyActions();
4514
4613
  };
4515
- FsFilterOverlayService.prototype._createInjector = function (parentInjector, data, overlayRef) {
4516
- var injectionTokens = new WeakMap([
4517
- [FILTER_DRAWER_DATA, data],
4518
- [FILTER_DRAWER_OVERLAY, overlayRef],
4519
- ]);
4520
- return new portal.PortalInjector(parentInjector, injectionTokens);
4614
+ ActionsController.prototype.show = function () {
4615
+ this._visible$.next(true);
4521
4616
  };
4522
- FsFilterOverlayService.prototype.removeFilterClass = function () {
4523
- this._filterMeta.openedFilters--;
4524
- if (this._filterMeta.openedFilters === 0) {
4525
- window.document.body.classList.remove('fs-filter-open');
4526
- }
4617
+ ActionsController.prototype.hide = function () {
4618
+ this._visible$.next(false);
4527
4619
  };
4528
- FsFilterOverlayService.prototype.addFilterClass = function () {
4529
- this._filterMeta.openedFilters++;
4530
- if (this._filterMeta.openedFilters === 1) {
4531
- window.document.body.classList.add('fs-filter-open');
4532
- }
4620
+ ActionsController.prototype.addReorderAction = function (action) {
4621
+ this._allActions.unshift(action);
4622
+ action.isReorderAction = true;
4623
+ this._classifyAction(action);
4624
+ this._reorderAction = action;
4533
4625
  };
4534
- FsFilterOverlayService.prototype._openWhenChipClicked = function () {
4535
- var _this = this;
4536
- this._focusController.focusOn$
4537
- .pipe(operators.filter(function (v) { return !!v; }), operators.takeUntil(this._destroy$))
4538
- .subscribe(function () {
4539
- if (!_this.isOpened) {
4540
- _this.open();
4541
- }
4542
- });
4626
+ ActionsController.prototype.clearActions = function () {
4627
+ this._allActions = [];
4628
+ this._setActions([]);
4629
+ this._setKebabActions([]);
4543
4630
  };
4544
- return FsFilterOverlayService;
4545
- }());
4546
- FsFilterOverlayService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterOverlayService, deps: [{ token: i0__namespace.Injector }, { token: FS_FILTER_META }, { token: i1__namespace$7.Overlay }, { token: FocusControllerService }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
4547
- FsFilterOverlayService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterOverlayService });
4548
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterOverlayService, decorators: [{
4549
- type: i0.Injectable
4550
- }], ctorParameters: function () {
4551
- return [{ type: i0__namespace.Injector }, { type: undefined, decorators: [{
4552
- type: i0.Inject,
4553
- args: [FS_FILTER_META]
4554
- }] }, { type: i1__namespace$7.Overlay }, { type: FocusControllerService }];
4555
- } });
4556
-
4557
- var FilterStatusBarDirective = /** @class */ (function () {
4558
- function FilterStatusBarDirective() {
4559
- }
4560
- return FilterStatusBarDirective;
4561
- }());
4562
- FilterStatusBarDirective.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FilterStatusBarDirective, deps: [], target: i0__namespace.ɵɵFactoryTarget.Directive });
4563
- FilterStatusBarDirective.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: FilterStatusBarDirective, selector: "[fsFilterStatusBar]", ngImport: i0__namespace });
4564
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FilterStatusBarDirective, decorators: [{
4565
- type: i0.Directive,
4566
- args: [{
4567
- selector: '[fsFilterStatusBar]',
4568
- }]
4569
- }] });
4570
-
4571
- var FsFilterActionButtonComponent = /** @class */ (function () {
4572
- function FsFilterActionButtonComponent() {
4573
- this.ActionType = exports.ActionType;
4574
- }
4575
- return FsFilterActionButtonComponent;
4576
- }());
4577
- FsFilterActionButtonComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterActionButtonComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
4578
- FsFilterActionButtonComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterActionButtonComponent, selector: "fs-filter-action-button", inputs: { action: "action" }, host: { classAttribute: "action-button" }, ngImport: i0__namespace, template: "<ng-container [ngSwitch]=\"action.type\">\n <button\n type=\"button\"\n *ngSwitchCase=\"ActionType.Icon\"\n mat-icon-button\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [ngClass]=\"action.classArray\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <!-- Fab button -->\n <button \n type=\"button\"\n *ngSwitchCase=\"ActionType.Fab\"\n mat-fab\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [ngClass]=\"action.classArray\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <!-- Mini Fab button -->\n <button \n type=\"button\"\n *ngSwitchCase=\"ActionType.MiniFab\"\n mat-mini-fab\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [ngClass]=\"action.classArray\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <button \n type=\"button\"\n *ngSwitchDefault\n mat-button\n [ngClass]=\"{ \n 'mat-raised-button': action.type === 'raised',\n 'mat-flat-button': action.type === 'flat',\n 'mat-stroked-button': action.type === 'stroked',\n 'mat-button': action.type === 'basic',\n 'mat-icon-button': action.type === 'icon'\n }\"\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [class]=\"action.classArray.join(' ')\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <ng-template #buttonContent>\n <ng-container *ngIf=\"!action.icon else withIcon\">\n {{action.label}}\n </ng-container>\n\n <ng-template #withIcon>\n <mat-icon *ngIf=\"!action.iconPlacement || action.iconPlacement === 'left'\">{{action.icon}}</mat-icon>\n {{action.label}}\n <mat-icon *ngIf=\"action.iconPlacement === 'right'\">{{action.icon}}</mat-icon>\n </ng-template>\n </ng-template>\n</ng-container>\n", components: [{ type: i1__namespace$4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i2__namespace$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3__namespace.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3__namespace.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3__namespace.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4579
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterActionButtonComponent, decorators: [{
4580
- type: i0.Component,
4581
- args: [{
4582
- selector: 'fs-filter-action-button',
4583
- templateUrl: './action-button.component.html',
4584
- host: {
4585
- class: 'action-button',
4586
- },
4587
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
4588
- }]
4589
- }], propDecorators: { action: [{
4590
- type: i0.Input
4591
- }] } });
4592
-
4593
- var FsFilterActionKebabActionsComponent = /** @class */ (function () {
4594
- function FsFilterActionKebabActionsComponent() {
4595
- }
4596
- return FsFilterActionKebabActionsComponent;
4597
- }());
4598
- FsFilterActionKebabActionsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterActionKebabActionsComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
4599
- FsFilterActionKebabActionsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterActionKebabActionsComponent, selector: "fs-filter-action-kebab-actions", inputs: { kebabActions: "kebabActions" }, ngImport: i0__namespace, template: "<button \n type=\"button\"\n mat-icon-button\n class=\"menu-button\"\n [fsMenuTriggerFor]=\"kebabActionsMenu\">\n <mat-icon>more_vert</mat-icon>\n</button>\n<fs-menu #kebabActionsMenu>\n <ng-container *ngFor=\"let action of kebabActions\">\n <ng-container [ngSwitch]=\"action.mode\">\n <!-- Case when actions was collapsed from action with mode = 'menu'-->\n <ng-container *ngSwitchCase=\"'menu'\">\n <ng-container *ngFor=\"let childAction of action.items\">\n <ng-container *ngIf=\"childAction.isGroup else simpleMenuItem\">\n <fs-menu-group>\n <ng-template fs-group-menu-item-template>\n {{ action.label }} <mat-icon style=\"margin: 0;\">arrow_right</mat-icon> {{childAction.label}}\n </ng-template>\n <ng-container *ngFor=\"let subAction of childAction.items\">\n <ng-template \n fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [hidden]=\"!(subAction.visible$ | async)\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-template \n fs-menu-item\n [link]=\"childAction.routerLink?.link\"\n [queryParams]=\"childAction.routerLink?.queryParams\"\n [hidden]=\"!(childAction.visible$ | async)\"\n (click)=\"childAction.click($event);\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{ action.label }} <mat-icon style=\"margin: 0;\">arrow_right</mat-icon>{{ childAction.label }}\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-template \n fs-menu-file-item\n [fsClass]=\"action.classArray\"\n [multiple]=\"action.multiple\"\n [accept]=\"action.accept || '*'\"\n [minWidth]=\"action.minWidth\"\n [minHeight]=\"action.minHeight\"\n [imageWidth]=\"action.maxWidth\"\n [imageHeight]=\"action.maxHeight\"\n (error)=\"action.fileError($event)\"\n (select)=\"action.fileSelected($event)\"\n (click)=\"action.click($event)\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon> {{action.label}}\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-template \n fs-menu-item\n (click)=\"action.click($event)\"\n [fsClass]=\"action.classArray\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon> {{action.label}}\n </ng-template>\n </ng-container>\n\n </ng-container>\n </ng-container>\n</fs-menu>\n", styles: [".menu-button{width:36px;height:36px;line-height:36px}\n"], components: [{ type: i1__namespace$4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i2__namespace$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3__namespace$4.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass"], outputs: ["opened", "closed"] }], directives: [{ type: i3__namespace$4.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3__namespace.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3__namespace.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace$4.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { type: i3__namespace$4.FsGroupMenuItemTemplateDirective, selector: "[fs-group-menu-item-template]" }, { type: i3__namespace$4.FsMenuFileItemDirective, selector: "[fs-menu-file-item]", inputs: ["multiple", "accept", "minWidth", "minHeight", "imageWidth", "imageHeight"], outputs: ["select", "error"] }, { type: i3__namespace.NgSwitchDefault, selector: "[ngSwitchDefault]" }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4600
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterActionKebabActionsComponent, decorators: [{
4601
- type: i0.Component,
4602
- args: [{
4603
- selector: 'fs-filter-action-kebab-actions',
4604
- styleUrls: ['./action-kebab-actions.component.scss'],
4605
- templateUrl: './action-kebab-actions.component.html',
4606
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
4607
- }]
4608
- }], propDecorators: { kebabActions: [{
4609
- type: i0.Input
4610
- }] } });
4611
-
4612
- var FsFilterActionsComponent = /** @class */ (function () {
4613
- function FsFilterActionsComponent() {
4614
- this.kebabActions = [];
4615
- this.actions = [];
4616
- }
4617
- return FsFilterActionsComponent;
4618
- }());
4619
- FsFilterActionsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterActionsComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
4620
- FsFilterActionsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: { kebabActions: "kebabActions", actions: "actions" }, ngImport: i0__namespace, template: "<!-- Buttons -->\n<ng-container *ngFor=\"let action of actions\">\n <ng-container [ngSwitch]=\"action.mode\">\n <ng-container *ngSwitchCase=\"'button'\">\n <fs-filter-action-button\n [action]=\"action\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'menu'\">\n <fs-filter-action-button\n [action]=\"action\"\n [fsMenuTriggerFor]=\"someRef\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n\n <fs-menu #someRef>\n <ng-container *ngFor=\"let childAction of action.items\">\n <ng-container *ngIf=\"childAction.isGroup else simpleMenuItem\">\n <fs-menu-group [label]=\"childAction.label\">\n <ng-container *ngFor=\"let subAction of childAction.items\">\n <ng-template\n fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [hidden]=\"!(subAction.visible$ | async)\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-template\n fs-menu-item\n [link]=\"childAction.routerLink?.link\"\n [queryParams]=\"childAction.routerLink?.queryParams\"\n [hidden]=\"!(childAction.visible$ | async)\"\n (click)=\"childAction.click($event);\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{childAction.label}}\n </ng-template>\n </ng-template>\n </ng-container>\n </fs-menu>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'file'\">\n <fs-file\n class=\"action-button\"\n [accept]=\"action.accept || '*'\"\n [multiple]=\"action.multiple\"\n [minWidth]=\"action.minWidth\"\n [minHeight]=\"action.minHeight\"\n [imageWidth]=\"action.maxWidth\"\n [imageHeight]=\"action.maxHeight\"\n (select)=\"action.fileSelected($event)\"\n (error)=\"action.fileError($event)\"\n (clicked)=\"action.click($event)\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n <fs-filter-action-button \n [action]=\"action\">\n </fs-filter-action-button>\n </fs-file>\n </ng-container>\n </ng-container>\n</ng-container>\n<!-- /Buttons -->\n<!-- menu -->\n<ng-container *ngIf=\"kebabActions?.length\">\n <fs-filter-action-kebab-actions\n [kebabActions]=\"kebabActions\">\n </fs-filter-action-kebab-actions>\n</ng-container>\n", styles: [":host{display:inline-flex}.action-button{display:block}.action-button+.action-button,fs-menu+.action-button{margin-left:5px}.menu-button{width:36px;height:36px;line-height:36px}\n"], components: [{ type: FsFilterActionButtonComponent, selector: "fs-filter-action-button", inputs: ["action"] }, { type: i3__namespace$4.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass"], outputs: ["opened", "closed"] }, { type: i2__namespace$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4__namespace$3.FsFileComponent, selector: "fs-file", inputs: ["minHeight", "minWidth", "multiple", "capture", "allowClick", "allowDrop", "accept", "disabled", "imageWidth", "imageHeight", "imageQuality"], outputs: ["select", "error", "clicked", "declined"] }, { type: FsFilterActionKebabActionsComponent, selector: "fs-filter-action-kebab-actions", inputs: ["kebabActions"] }], directives: [{ type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3__namespace.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3__namespace.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i7__namespace$1.FsPopoverDirective, selector: "[fsPopover]", inputs: ["text", "template", "data", "leaveDelay", "showDelay", "maxWidth", "wrapperClass", "autoShow", "autoClose", "loadingDiameter", "loading", "indication", "position", "theme", "size", "trigger", "enabled"] }, { type: i3__namespace$4.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace$4.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4621
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterActionsComponent, decorators: [{
4622
- type: i0.Component,
4623
- args: [{
4624
- selector: 'fs-filter-actions',
4625
- templateUrl: './actions.component.html',
4626
- styleUrls: ['./actions.component.scss'],
4627
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
4628
- }]
4629
- }], propDecorators: { kebabActions: [{
4630
- type: i0.Input
4631
- }], actions: [{
4632
- type: i0.Input
4633
- }] } });
4634
-
4635
- var FsFilterChipContentComponent = /** @class */ (function () {
4636
- function FsFilterChipContentComponent(_cdRef) {
4637
- this._cdRef = _cdRef;
4638
- this._destroy$ = new rxjs.Subject();
4639
- }
4640
- FsFilterChipContentComponent.prototype.ngOnInit = function () {
4641
- this.listenValueChangesForRanges();
4631
+ ActionsController.prototype.updateActionsVisibility = function () {
4632
+ this._allActions.forEach(function (action) { return action.updateVisibility(); });
4633
+ this._classifyActions();
4642
4634
  };
4643
- FsFilterChipContentComponent.prototype.ngOnDestroy = function () {
4644
- this._destroy$.next();
4645
- this._destroy$.complete();
4635
+ ActionsController.prototype.updateDisabledState = function () {
4636
+ this.actions.forEach(function (action) { return action.updateDisabledState(); });
4646
4637
  };
4647
- FsFilterChipContentComponent.prototype.listenValueChangesForRanges = function () {
4648
- var _this = this;
4649
- this.item.value$
4650
- .pipe(operators.takeUntil(this._destroy$))
4651
- .subscribe(function () {
4652
- _this.content = _this._getContent();
4653
- _this._cdRef.detectChanges();
4654
- });
4638
+ ActionsController.prototype._setKebabActions = function (actions) {
4639
+ this._menuActions$.next(actions);
4655
4640
  };
4656
- FsFilterChipContentComponent.prototype._getContent = function () {
4657
- var result = this.item.getChipsContent(this.type);
4658
- if (this.item.chipLabel !== undefined) {
4659
- if (this.item.chipLabel === '') {
4660
- return "" + result;
4641
+ ActionsController.prototype._setActions = function (actions) {
4642
+ this._actions$.next(actions);
4643
+ };
4644
+ ActionsController.prototype._classifyActions = function () {
4645
+ var kebabActions = [];
4646
+ var actions = [];
4647
+ var mobileMode = this.mobileMode;
4648
+ this._allActions
4649
+ .filter(function (action) {
4650
+ return action.visible;
4651
+ })
4652
+ .forEach(function (action) {
4653
+ if (action.menu !== false && (action.menu || mobileMode)) {
4654
+ kebabActions.push(action);
4661
4655
  }
4662
4656
  else {
4663
- if (Array.isArray(this.item.chipLabel)) {
4664
- var label = getLabelFromArray(this.item.chipLabel, this.type);
4665
- return label + ": " + result;
4666
- }
4667
- else {
4668
- return this.item.chipLabel + ": " + result;
4669
- }
4657
+ actions.push(action);
4670
4658
  }
4659
+ });
4660
+ this._setKebabActions(kebabActions);
4661
+ this._setActions(actions);
4662
+ };
4663
+ ActionsController.prototype._classifyAction = function (action) {
4664
+ if (action.menu) {
4665
+ this._setKebabActions(__spreadArray(__spreadArray([], __read(this.menuActions)), [action]));
4671
4666
  }
4672
4667
  else {
4673
- if (Array.isArray(this.item.label)) {
4674
- var label = getLabelFromArray(this.item.label, this.type);
4675
- return label + ": " + result;
4676
- }
4677
- else {
4678
- if (this.item.isTypeCheckbox) {
4679
- return result;
4680
- }
4681
- else {
4682
- return this.item.label + ": " + result;
4683
- }
4684
- }
4668
+ this._setActions(__spreadArray(__spreadArray([], __read(this.actions)), [action]));
4685
4669
  }
4686
4670
  };
4687
- return FsFilterChipContentComponent;
4671
+ ActionsController.prototype._listenMobileMedia = function () {
4672
+ var _this = this;
4673
+ this._breakpointObserver.observe(this._mobileMedia)
4674
+ .pipe(operators.skip(1), operators.takeUntil(this._destroy$))
4675
+ .subscribe(function () {
4676
+ _this._classifyActions();
4677
+ });
4678
+ };
4679
+ return ActionsController;
4688
4680
  }());
4689
- FsFilterChipContentComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterChipContentComponent, deps: [{ token: i0__namespace.ChangeDetectorRef }], target: i0__namespace.ɵɵFactoryTarget.Component });
4690
- FsFilterChipContentComponentcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterChipContentComponent, selector: "fs-filter-chip-content", inputs: { item: "item", type: "type" }, ngImport: i0__namespace, template: "{{ content }}\n", styles: [""], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4691
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterChipContentComponent, decorators: [{
4692
- type: i0.Component,
4693
- args: [{
4694
- selector: 'fs-filter-chip-content',
4695
- templateUrl: './filter-chip-content.component.html',
4696
- styleUrls: ['./filter-chip-content.component.scss'],
4697
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
4698
- }]
4699
- }], ctorParameters: function () { return [{ type: i0__namespace.ChangeDetectorRef }]; }, propDecorators: { item: [{
4700
- type: i0.Input
4701
- }], type: [{
4702
- type: i0.Input
4703
- }] } });
4704
- function getLabelFromArray(labelArr, type) {
4705
- if (type === 'from' && labelArr[0]) {
4706
- return "" + labelArr[0];
4707
- }
4708
- else if (type === 'to' && labelArr[1]) {
4709
- return "" + labelArr[1];
4710
- }
4711
- else {
4712
- return '';
4681
+ ActionsController.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ActionsController, deps: [{ token: i1__namespace$7.BreakpointObserver }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
4682
+ ActionsControllerprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ActionsController });
4683
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ActionsController, decorators: [{
4684
+ type: i0.Injectable
4685
+ }], ctorParameters: function () { return [{ type: i1__namespace$7.BreakpointObserver }]; } });
4686
+
4687
+ var FS_FILTER_META = new i0.InjectionToken('fs.filter.meta', {
4688
+ providedIn: 'root',
4689
+ factory: function () {
4690
+ return {
4691
+ openedFilters: 0,
4692
+ };
4713
4693
  }
4714
- }
4694
+ });
4715
4695
 
4716
- var FsFilterChipComponent = /** @class */ (function () {
4717
- function FsFilterChipComponent(_cdRef, _focusController) {
4718
- this._cdRef = _cdRef;
4696
+ var FsFilterOverlayService = /** @class */ (function () {
4697
+ function FsFilterOverlayService(_injector, _filterMeta, _overlay, _focusController) {
4698
+ this._injector = _injector;
4699
+ this._filterMeta = _filterMeta;
4700
+ this._overlay = _overlay;
4719
4701
  this._focusController = _focusController;
4720
- this._chipRenderTimer$ = rxjs.timer(500)
4721
- .pipe(operators.mapTo(true));
4702
+ this.detach$ = new rxjs.Subject();
4703
+ this.attach$ = new rxjs.Subject();
4722
4704
  this._destroy$ = new rxjs.Subject();
4705
+ this._openWhenChipClicked();
4723
4706
  }
4724
- FsFilterChipComponent.prototype.ngOnInit = function () {
4725
- var _this = this;
4726
- this.rangeItem = this.item.isTypeDateRange
4727
- || this.item.isTypeRange
4728
- || this.item.isTypeDateTimeRange;
4729
- this.listenValueChangesForRanges();
4730
- this._updateVisibility();
4731
- if (this.item.hasPendingValues) {
4732
- this.item.loadAsyncValues(false);
4733
- this.item.values$
4734
- .pipe(operators.take(2), operators.takeUntil(this._destroy$))
4735
- .subscribe(function () {
4736
- _this._updateVisibility();
4737
- _this._cdRef.markForCheck();
4738
- });
4739
- this._initDelayRender();
4707
+ Object.defineProperty(FsFilterOverlayService.prototype, "isOpened", {
4708
+ get: function () {
4709
+ return !!this._overlayRef;
4710
+ },
4711
+ enumerable: false,
4712
+ configurable: true
4713
+ });
4714
+ FsFilterOverlayService.prototype.setClearFn = function (fn) {
4715
+ this._clearFn = fn;
4716
+ };
4717
+ FsFilterOverlayService.prototype.setDoneFn = function (fn) {
4718
+ this._doneFn = fn;
4719
+ };
4720
+ FsFilterOverlayService.prototype.close = function () {
4721
+ if (this._overlayRef) {
4722
+ this._overlayRef.detach();
4723
+ this._overlayRef = null;
4724
+ this.removeFilterClass();
4740
4725
  }
4741
4726
  };
4742
- FsFilterChipComponent.prototype.ngOnDestroy = function () {
4727
+ FsFilterOverlayService.prototype.open = function () {
4728
+ var _this = this;
4729
+ this._overlayRef = this._createOverlay();
4730
+ this._overlayRef.backdropClick()
4731
+ .pipe(operators.takeUntil(this._destroy$))
4732
+ .subscribe(function () {
4733
+ _this._overlayRef.detach();
4734
+ });
4735
+ this._overlayRef.detachments()
4736
+ .pipe(operators.takeUntil(this._destroy$))
4737
+ .subscribe(function () {
4738
+ _this.detach$.next();
4739
+ });
4740
+ this._overlayRef.attachments()
4741
+ .pipe(operators.takeUntil(this._destroy$))
4742
+ .subscribe(function () {
4743
+ _this.attach$.next();
4744
+ });
4745
+ this.addFilterClass();
4746
+ return this.openPortalPreview();
4747
+ };
4748
+ FsFilterOverlayService.prototype.ngOnDestroy = function () {
4743
4749
  this._destroy$.next();
4744
4750
  this._destroy$.complete();
4745
4751
  };
4746
- FsFilterChipComponent.prototype.focusOnItem = function (type) {
4747
- if (type === void 0) { type = null; }
4748
- this._focusController.click(this.item, type);
4752
+ FsFilterOverlayService.prototype._createOverlay = function () {
4753
+ var overlayConfig = new i1$6.OverlayConfig({
4754
+ hasBackdrop: true,
4755
+ backdropClass: 'fs-filter-backdrop'
4756
+ });
4757
+ return this._overlay.create(overlayConfig);
4749
4758
  };
4750
- FsFilterChipComponent.prototype.removeItem = function (event, type) {
4751
- if (type === void 0) { type = null; }
4752
- if (this.item instanceof RangeItem) {
4753
- this.item.clearRange(type);
4754
- }
4755
- else if (this.item instanceof DateRangeItem || this.item instanceof DateTimeRangeItem) {
4756
- this.item.clearDateRange(type);
4759
+ FsFilterOverlayService.prototype.openPortalPreview = function () {
4760
+ var data = { done: this._doneFn, clear: this._clearFn };
4761
+ var injector = this._createInjector(this._injector, data, this._overlayRef);
4762
+ var containerPortal = new portal.ComponentPortal(FilterDrawerComponent, undefined, injector);
4763
+ var containerRef = this._overlayRef.attach(containerPortal);
4764
+ return containerRef.instance;
4765
+ };
4766
+ FsFilterOverlayService.prototype._createInjector = function (parentInjector, data, overlayRef) {
4767
+ var injectionTokens = new WeakMap([
4768
+ [FILTER_DRAWER_DATA, data],
4769
+ [FILTER_DRAWER_OVERLAY, overlayRef],
4770
+ ]);
4771
+ return new portal.PortalInjector(parentInjector, injectionTokens);
4772
+ };
4773
+ FsFilterOverlayService.prototype.removeFilterClass = function () {
4774
+ this._filterMeta.openedFilters--;
4775
+ if (this._filterMeta.openedFilters === 0) {
4776
+ window.document.body.classList.remove('fs-filter-open');
4757
4777
  }
4758
- else {
4759
- this.item.clear();
4778
+ };
4779
+ FsFilterOverlayService.prototype.addFilterClass = function () {
4780
+ this._filterMeta.openedFilters++;
4781
+ if (this._filterMeta.openedFilters === 1) {
4782
+ window.document.body.classList.add('fs-filter-open');
4760
4783
  }
4761
4784
  };
4762
- FsFilterChipComponent.prototype.listenValueChangesForRanges = function () {
4785
+ FsFilterOverlayService.prototype._openWhenChipClicked = function () {
4763
4786
  var _this = this;
4764
- this.item.value$
4765
- .pipe(operators.distinctUntilChanged(), operators.takeUntil(this._destroy$))
4787
+ this._focusController.focusOn$
4788
+ .pipe(operators.filter(function (v) { return !!v; }), operators.takeUntil(this._destroy$))
4766
4789
  .subscribe(function () {
4767
- _this._updateVisibility();
4768
- _this._cdRef.markForCheck();
4790
+ if (!_this.isOpened) {
4791
+ _this.open();
4792
+ }
4769
4793
  });
4770
4794
  };
4771
- FsFilterChipComponent.prototype._updateVisibility = function () {
4772
- this.itemVisible = this.item.isChipVisible;
4773
- };
4774
- FsFilterChipComponent.prototype._initDelayRender = function () {
4775
- this.chipDelayedRender$ = rxjs.combineLatest([
4776
- this.item.values$,
4777
- this._chipRenderTimer$.pipe(operators.startWith(false))
4778
- ])
4779
- .pipe(operators.map(function (_a) {
4780
- var _b = __read(_a, 2), values = _b[0], timerValue = _b[1];
4781
- return !!values || timerValue;
4782
- }));
4783
- };
4784
- return FsFilterChipComponent;
4795
+ return FsFilterOverlayService;
4785
4796
  }());
4786
- FsFilterChipComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterChipComponent, deps: [{ token: i0__namespace.ChangeDetectorRef }, { token: FocusControllerService }], target: i0__namespace.ɵɵFactoryTarget.Component });
4787
- FsFilterChipComponentcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterChipComponent, selector: "fs-filter-chip", inputs: { item: "item" }, ngImport: i0__namespace, template: "<ng-container *ngIf=\"!item.hasPendingValues || (chipDelayedRender$ | async)\">\n <ng-container *ngIf=\"rangeItem; else defaultChip\">\n <fs-chip\n *ngIf=\"item.model?.min || item.model?.from\"\n [value]=\"item\"\n [selectable]=\"false\"\n [removable]=\"item.showClear\"\n size=\"small\"\n (click)=\"focusOnItem('from')\"\n (removed)=\"removeItem($event, 'from')\">\n <ng-template\n [ngTemplateOutlet]=\"chipContent\"\n [ngTemplateOutletContext]=\"{ item: item, type: 'from' }\"\n ></ng-template>\n </fs-chip>\n\n <fs-chip\n *ngIf=\"item.model?.max || item.model?.to\"\n [value]=\"item\"\n [selectable]=\"false\"\n [removable]=\"item.showClear\"\n size=\"small\"\n (click)=\"focusOnItem('to')\"\n (removed)=\"removeItem($event, 'to')\">\n <ng-template\n [ngTemplateOutlet]=\"chipContent\"\n [ngTemplateOutletContext]=\"{ item: item, type: 'to' }\"\n ></ng-template>\n </fs-chip>\n\n </ng-container>\n\n <ng-template #defaultChip>\n <fs-chip\n *ngIf=\"itemVisible\"\n [value]=\"item\"\n [selectable]=\"false\"\n [removable]=\"item.showClear\"\n size=\"small\"\n (click)=\"focusOnItem()\"\n (removed)=\"removeItem($event)\">\n <ng-template\n [ngTemplateOutlet]=\"chipContent\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-template>\n </fs-chip>\n </ng-template>\n\n <ng-template #chipContent let-item=\"item\" let-type=\"type\">\n <ng-container *ngIf=\"!item.hasPendingValues && !item.loading; else lodaingValues\">\n <fs-filter-chip-content [item]=\"item\" [type]=\"type\"></fs-filter-chip-content>\n </ng-container>\n\n <ng-template #lodaingValues>\n Loading...\n </ng-template>\n </ng-template>\n</ng-container>\n\n", styles: ["fs-chip{cursor:pointer;color:#6f6f6f}\n"], components: [{ type: i2__namespace$1.FsChipComponent, selector: "fs-chip", inputs: ["size", "value", "backgroundColor", "borderColor", "color", "outlined", "removable", "selectable", "selected", "image"], outputs: ["selectedToggled", "removed"] }, { type: FsFilterChipContentComponent, selector: "fs-filter-chip-content", inputs: ["item", "type"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4788
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterChipComponent, decorators: [{
4789
- type: i0.Component,
4790
- args: [{
4791
- selector: 'fs-filter-chip',
4792
- templateUrl: './filter-chip.component.html',
4793
- styleUrls: ['./filter-chip.component.scss'],
4794
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
4795
- }]
4796
- }], ctorParameters: function () { return [{ type: i0__namespace.ChangeDetectorRef }, { type: FocusControllerService }]; }, propDecorators: { item: [{
4797
- type: i0.Input
4798
- }] } });
4797
+ FsFilterOverlayService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterOverlayService, deps: [{ token: i0__namespace.Injector }, { token: FS_FILTER_META }, { token: i1__namespace$6.Overlay }, { token: FocusControllerService }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
4798
+ FsFilterOverlayServiceprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterOverlayService });
4799
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterOverlayService, decorators: [{
4800
+ type: i0.Injectable
4801
+ }], ctorParameters: function () {
4802
+ return [{ type: i0__namespace.Injector }, { type: undefined, decorators: [{
4803
+ type: i0.Inject,
4804
+ args: [FS_FILTER_META]
4805
+ }] }, { type: i1__namespace$6.Overlay }, { type: FocusControllerService }];
4806
+ } });
4799
4807
 
4800
- var FsFilterChipsComponent = /** @class */ (function () {
4801
- function FsFilterChipsComponent() {
4802
- this.ItemType = exports.ItemType;
4803
- this.chips = [];
4808
+ var FilterStatusBarDirective = /** @class */ (function () {
4809
+ function FilterStatusBarDirective() {
4804
4810
  }
4805
- return FsFilterChipsComponent;
4811
+ return FilterStatusBarDirective;
4806
4812
  }());
4807
- FsFilterChipsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterChipsComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
4808
- FsFilterChipsComponentcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsFilterChipsComponent, selector: "fs-filter-chips", inputs: { filters: "filters" }, ngImport: i0__namespace, template: "<fs-chips [(ngModel)]=\"chips\">\n <ng-container *ngFor=\"let item of filters\">\n <ng-container *ngIf=\"(item.value$ | async) !== undefined && item.type !== ItemType.Keyword\">\n <fs-filter-chip [item]=\"item\"></fs-filter-chip>\n </ng-container>\n </ng-container>\n</fs-chips>\n", styles: [""], components: [{ type: i2__namespace$1.FsChipsComponent, selector: "fs-chips", inputs: ["compare", "multiple"] }, { type: FsFilterChipComponent, selector: "fs-filter-chip", inputs: ["item"] }], directives: [{ type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
4809
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterChipsComponent, decorators: [{
4810
- type: i0.Component,
4813
+ FilterStatusBarDirective.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FilterStatusBarDirective, deps: [], target: i0__namespace.ɵɵFactoryTarget.Directive });
4814
+ FilterStatusBarDirectivedir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: FilterStatusBarDirective, selector: "[fsFilterStatusBar]", ngImport: i0__namespace });
4815
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FilterStatusBarDirective, decorators: [{
4816
+ type: i0.Directive,
4811
4817
  args: [{
4812
- selector: 'fs-filter-chips',
4813
- templateUrl: './filter-chips.component.html',
4814
- styleUrls: ['./filter-chips.component.scss'],
4815
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
4818
+ selector: '[fsFilterStatusBar]',
4816
4819
  }]
4817
- }], propDecorators: { filters: [{
4818
- type: i0.Input
4819
- }] } });
4820
+ }] });
4820
4821
 
4821
4822
  var FilterComponent = /** @class */ (function () {
4822
4823
  function FilterComponent(_defaultConfig, _filterOverlay, _zone, _externalParams, _filterItems, _actions) {
@@ -4835,12 +4836,13 @@
4835
4836
  this.showFilterMenu = false;
4836
4837
  this.windowDesktop = false;
4837
4838
  this.fsFilterClass = true;
4838
- this.searchText = new i4.FormControl();
4839
4839
  this.searchPlaceholder = 'Search';
4840
+ this.keyword = '';
4840
4841
  this._config = null;
4841
4842
  this._filtersBtnVisible$ = new rxjs.BehaviorSubject(true);
4842
4843
  this._keywordVisible$ = new rxjs.BehaviorSubject(true);
4843
4844
  this._hasFilterChips$ = new rxjs.BehaviorSubject(false);
4845
+ this._keyword$ = new rxjs.Subject();
4844
4846
  this._destroy$ = new rxjs.Subject();
4845
4847
  this._listenWhenFilterReady();
4846
4848
  this._updateWindowWidth();
@@ -4976,26 +4978,18 @@
4976
4978
  _this.focus();
4977
4979
  }
4978
4980
  });
4981
+ this._listenInputChanges();
4979
4982
  this._listenInternalItemsChange();
4980
4983
  this._initOverlay();
4981
4984
  };
4982
- FilterComponent.prototype.ngAfterViewInit = function () {
4983
- var _this = this;
4984
- this._listenInputKeyEvents();
4985
- // FIXME prevent fire change after init
4986
- setTimeout(function () {
4987
- _this._listenInputChanges();
4988
- });
4989
- };
4990
4985
  FilterComponent.prototype.ngOnDestroy = function () {
4991
4986
  this._destroyFilterDrawer();
4992
4987
  this._destroy$.next();
4993
4988
  this._destroy$.complete();
4994
4989
  };
4995
4990
  FilterComponent.prototype.focus = function () {
4996
- if (this.searchTextMatInput) {
4997
- this.searchTextMatInput.focus();
4998
- }
4991
+ var _a;
4992
+ (_a = this.keywordMatInput) === null || _a === void 0 ? void 0 : _a.focus();
4999
4993
  };
5000
4994
  FilterComponent.prototype.updateSort = function (sort) {
5001
4995
  this._filterItems.updateSort(sort);
@@ -5081,17 +5075,6 @@
5081
5075
  }
5082
5076
  this.changeVisibility(value);
5083
5077
  };
5084
- FilterComponent.prototype.filterInputEvent = function (event) {
5085
- if (!this.windowDesktop) {
5086
- return;
5087
- }
5088
- if (['Enter', 'NumpadEnter', 'Escape'].indexOf(event.code) >= 0) {
5089
- this.changeVisibility(false);
5090
- if (this.searchTextInput) {
5091
- this.searchTextInput.nativeElement.blur();
5092
- }
5093
- }
5094
- };
5095
5078
  Object.defineProperty(FilterComponent.prototype, "itemValues", {
5096
5079
  get: function () {
5097
5080
  return this.items
@@ -5181,12 +5164,6 @@
5181
5164
  this.opened.emit();
5182
5165
  this._filterOverlay.open();
5183
5166
  };
5184
- FilterComponent.prototype.clearSearchText = function (event) {
5185
- event.stopPropagation();
5186
- this.searchText.setValue('');
5187
- this._filterItems.keywordItem.clear();
5188
- this.searchTextInput.nativeElement.focus();
5189
- };
5190
5167
  FilterComponent.prototype.init = function () {
5191
5168
  var _this = this;
5192
5169
  var data = this._filterItems.valuesAsQuery();
@@ -5212,6 +5189,7 @@
5212
5189
  if (this.config.clear) {
5213
5190
  this.config.clear();
5214
5191
  }
5192
+ this.keyword = '';
5215
5193
  };
5216
5194
  /**
5217
5195
  * Close filter window and do change callback
@@ -5307,7 +5285,6 @@
5307
5285
  this._filterItems.setConfig(this._config);
5308
5286
  this._externalParams.initItems();
5309
5287
  this._syncSearchInputWithKeyword();
5310
- this._listenKeywordItemClear();
5311
5288
  };
5312
5289
  FilterComponent.prototype._initFilterWithConfig = function (config) {
5313
5290
  if (this.config) {
@@ -5322,7 +5299,6 @@
5322
5299
  if (!!this.config.reloadWhenConfigChanged) {
5323
5300
  this.change();
5324
5301
  }
5325
- this._listenKeywordItemClear();
5326
5302
  };
5327
5303
  FilterComponent.prototype._destroyFilterDrawer = function () {
5328
5304
  this._filterOverlay.close();
@@ -5342,23 +5318,6 @@
5342
5318
  });
5343
5319
  });
5344
5320
  };
5345
- FilterComponent.prototype._listenInputKeyEvents = function () {
5346
- var _this = this;
5347
- if (!this.searchTextInput) {
5348
- return;
5349
- }
5350
- this._zone.runOutsideAngular(function () {
5351
- rxjs.fromEvent(_this.searchTextInput.nativeElement, 'keydown')
5352
- .pipe(operators.debounceTime(500), operators.filter(function (event) {
5353
- return ['Enter', 'NumpadEnter', 'Escape'].indexOf(event.code) > -1;
5354
- }), operators.takeUntil(_this._destroy$))
5355
- .subscribe(function (event) {
5356
- _this._zone.run(function () {
5357
- _this.filterInputEvent(event);
5358
- });
5359
- });
5360
- });
5361
- };
5362
5321
  FilterComponent.prototype._listenWindowResize = function () {
5363
5322
  var _this = this;
5364
5323
  this._zone.runOutsideAngular(function () {
@@ -5371,39 +5330,26 @@
5371
5330
  });
5372
5331
  });
5373
5332
  };
5333
+ FilterComponent.prototype.keywordChange = function (keyword) {
5334
+ this._keyword$.next(keyword);
5335
+ };
5374
5336
  FilterComponent.prototype._listenInputChanges = function () {
5375
5337
  var _this = this;
5376
- this._zone.runOutsideAngular(function () {
5377
- _this.searchText.valueChanges
5378
- .pipe(operators.debounceTime(200), operators.distinctUntilChanged(), operators.filter(function (value) {
5379
- var _a;
5380
- return value !== ((_a = _this._filterItems.keywordItem) === null || _a === void 0 ? void 0 : _a.model);
5381
- }), operators.takeUntil(_this._destroy$))
5382
- .subscribe(function (value) {
5383
- _this._zone.run(function () {
5384
- var keywordItem = _this._filterItems.keywordItem;
5385
- if (keywordItem && keywordItem.value !== value) {
5386
- keywordItem.model = value;
5387
- }
5388
- });
5389
- });
5338
+ this._keyword$
5339
+ .pipe(operators.debounceTime(200), operators.distinctUntilChanged(), operators.takeUntil(this._destroy$))
5340
+ .subscribe(function (value) {
5341
+ var keywordItem = _this._filterItems.keywordItem;
5342
+ keywordItem.model = value;
5343
+ _this.change();
5390
5344
  });
5391
5345
  };
5392
5346
  FilterComponent.prototype._syncSearchInputWithKeyword = function () {
5393
5347
  var keywordItem = this._filterItems.keywordItem;
5394
5348
  if (keywordItem) {
5395
- this.searchText.setValue(keywordItem.model);
5349
+ this.keyword = keywordItem.model;
5396
5350
  this.searchPlaceholder = keywordItem.label || 'Search';
5397
5351
  }
5398
5352
  };
5399
- FilterComponent.prototype._listenKeywordItemClear = function () {
5400
- var _this = this;
5401
- var _a;
5402
- (_a = this._filterItems
5403
- .keywordItem) === null || _a === void 0 ? void 0 : _a.clear$.pipe(operators.takeUntil(this._filterItems.keywordItem.destroy$), operators.takeUntil(this._destroy$)).subscribe(function () {
5404
- _this.searchText.setValue('');
5405
- });
5406
- };
5407
5353
  FilterComponent.prototype._listenInternalItemsChange = function () {
5408
5354
  var _this = this;
5409
5355
  this._filterItems
@@ -5453,7 +5399,7 @@
5453
5399
  FsFilterItemsStore,
5454
5400
  SavedFiltersController,
5455
5401
  ActionsController,
5456
- ], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true, read: i0.TemplateRef }], viewQueries: [{ propertyName: "searchTextInput", first: true, predicate: ["searchTextInput"], descendants: true }, { propertyName: "searchTextMatInput", first: true, predicate: ["searchTextInput"], descendants: true, read: i3$3.MatInput }], ngImport: i0__namespace, template: "<ng-container>\n <div class=\"filter-container\">\n <ng-container *ngIf=\"hasKeyword\">\n <div class=\"filter-keyword\">\n <form autocomplete=\"off\" role=\"presentation\" *ngIf=\"keywordVisible$ | async\">\n <mat-form-field [floatLabel]=\"'never'\" class=\"form-field-padless\" ngClass=\"search\">\n <span matPrefix>\n <mat-icon matPrefix>search</mat-icon>\n </span>\n <input\n #searchTextInput\n matInput\n [formControl]=\"searchText\"\n name=\"filter-input\"\n [placeholder]=\"searchPlaceholder\"\n (click)=\"filterInputEvent($event)\">\n\n <div matSuffix *ngIf=\"searchText.value && showFilterInput && config.clear\">\n <a\n mat-icon-button \n (click)=\"clearSearchText($event)\"\n class=\"clear\">\n <mat-icon>clear</mat-icon>\n </a>\n </div>\n </mat-form-field>\n </form>\n </div>\n </ng-container>\n\n <div class=\"filter-actions\">\n <a \n mat-icon-button\n (click)=\"reload($event)\"\n class=\"reload\"\n *ngIf=\"config.reload\">\n <mat-icon>refresh</mat-icon>\n </a>\n <ng-container *ngIf=\"hasVisibleItemOrSorting && filtersBtnVisible$ | async\">\n <button\n mat-button\n class=\"filters-button\"\n [ngClass]=\"{\n 'mat-raised-button': config.button.style === 'raised' && config.button.label,\n 'mat-flat-button': config.button.style === 'flat' && config.button.label,\n 'mat-stroked-button': config.button.style === 'stroked' && config.button.label,\n 'mat-button': config.button.style === 'basic' && config.button.label,\n 'mat-icon-button': config.button.style === 'icon' || !config.button.label \n }\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n type=\"button\"\n [color]=\"config.button.color\">\n <mat-icon *ngIf=\"config.button.icon\">{{config.button.icon}}</mat-icon>\n {{ config.button.label }}\n </button>\n </ng-container>\n \n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n </div>\n <div class=\"filter-status-container\">\n <div class=\"filter-status\" *ngIf=\"statusBar\">\n <ng-container *ngTemplateOutlet=\"statusBar\"></ng-container>\n </div>\n <fs-filter-chips\n *ngIf=\"config.chips && hasFilterChips$ | async\"\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </div>\n</ng-container>", styles: ["fs-filter{display:block}.fs-filter{margin-bottom:20px;display:block}.fs-filter:not(.has-keyword){display:flex;flex-direction:row-reverse}.fs-filter .results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}.fs-filter .filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;margin:4px 0}.fs-filter .filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:17px}.fs-filter .filter-status-container .filter-status+fs-filter-chips{margin-top:4px}.fs-filter .filter-status-container fs-filter-chips{display:block}.fs-filter .filter-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative}.fs-filter .filter-container form{width:100%;height:100%}.fs-filter .filter-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;flex:1;min-width:0}.fs-filter .filter-container .filter-keyword .search.mat-form-field{height:100%;max-width:100%}.fs-filter .filter-container .filter-keyword .search.mat-form-field.mat-focused .mat-icon{color:inherit}.fs-filter .filter-container .filter-keyword .search.mat-form-field.mat-form-field-appearance-outline{background:#fff;border-radius:5px}.fs-filter .filter-container .filter-keyword .search.mat-form-field.mat-form-field-appearance-outline .mat-form-field-suffix,.fs-filter .filter-container .filter-keyword .search.mat-form-field.mat-form-field-appearance-outline .mat-form-field-prefix{top:0}.fs-filter .filter-container .filter-keyword .search.mat-form-field.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:auto}.fs-filter .filter-container .filter-keyword .search.mat-form-field.mat-form-field-appearance-legacy .mat-form-field-infix{border-top:0}.fs-filter .filter-container .filter-keyword .search.mat-form-field.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:0}.fs-filter .filter-container .filter-keyword .search.mat-form-field .mat-form-field-flex{align-items:center;height:100%}.fs-filter .filter-container .filter-keyword .search.mat-form-field .mat-icon{font-size:22px;color:#626262}.fs-filter .filter-container .filter-keyword .mat-form-field-wrapper{height:100%}.fs-filter .filter-container .filter-keyword .mat-form-field-suffix{display:flex}.fs-filter .filter-container .filter-keyword .mat-form-field-suffix .mat-icon-button{height:24px;width:24px}.fs-filter .filter-container .filter-keyword .mat-form-field-suffix .mat-icon-button .mat-icon{display:inline}.fs-filter .filter-actions{display:flex;align-items:center}@media screen and (min-width: 599px){.filter-actions{margin-left:10px}.filters-button+fs-filter-actions:not(:empty){margin-left:5px}}@media screen and (max-width: 600px){.filter-actions{margin-left:5px}.filter-actions .filters-button{font-size:0;padding:0;min-width:unset;width:36px;height:36px;border-radius:50%;box-shadow:unset!important}}@media screen and (min-width: 1200px){body.fs-filter-open{margin-right:350px}.fs-filter-backdrop{display:none}}body.fs-filter-open::-webkit-scrollbar{width:0;background:transparent}\n"], components: [{ type: i1__namespace$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i2__namespace$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i1__namespace$4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { type: i1__namespace$4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: ["kebabActions", "actions"] }, { type: FsFilterChipsComponent, selector: "fs-filter-chips", inputs: ["filters"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4__namespace.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i4__namespace.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4__namespace.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1__namespace$3.MatPrefix, selector: "[matPrefix]" }, { type: i3__namespace$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i1__namespace$3.MatSuffix, selector: "[matSuffix]" }, { type: i3__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush, encapsulation: i0__namespace.ViewEncapsulation.None });
5402
+ ], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true, read: i0.TemplateRef }], viewQueries: [{ propertyName: "keywordMatInput", first: true, predicate: ["keywordMatInput"], descendants: true, read: i3$3.MatInput }], ngImport: i0__namespace, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword\">\n <ng-container *ngTemplateOutlet=\"statusBarContainer\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"hasKeyword\">\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"keywordVisible$ | async\">\n <mat-form-field \n [floatLabel]=\"'never'\" \n class=\"form-field-padless\" \n [ngClass]=\"search\"\n appearance=\"outline\">\n <span matPrefix>\n <mat-icon matPrefix>search</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 </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filtersBtnVisible$ | async\">\n <div class=\"filter-toobar\">\n <a \n mat-icon-button\n (click)=\"reload($event)\"\n class=\"reload\"\n *ngIf=\"config.reload\">\n <mat-icon>refresh</mat-icon>\n </a>\n <ng-container *ngIf=\"hasVisibleItemOrSorting\">\n <a\n mat-button\n class=\"filters-button\"\n [ngClass]=\"{\n 'mat-raised-button': config.button.style === 'raised' && config.button.label,\n 'mat-flat-button': config.button.style === 'flat' && config.button.label,\n 'mat-stroked-button': config.button.style === 'stroked' && config.button.label,\n 'mat-button': config.button.style === 'basic' && config.button.label,\n 'mat-icon-button': config.button.style === 'icon' || !config.button.label \n }\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n <mat-icon *ngIf=\"config.button.icon\">{{config.button.icon}}</mat-icon>\n {{ config.button.label }}\n </a>\n </ng-container>\n </div>\n </ng-container>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n </div>\n\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"statusBarContainer\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!hasKeyword\">\n <ng-container [ngTemplateOutlet]=\"chips\"></ng-container>\n </ng-container>\n</div>\n\n\n<ng-template #statusBarContainer>\n <ng-container *ngIf=\"statusBar\">\n <div class=\"filter-status-container\">\n <div class=\"filter-status\">\n <ng-container *ngTemplateOutlet=\"statusBar\"></ng-container>\n </div>\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container [ngTemplateOutlet]=\"chips\"></ng-container>\n </ng-container>\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #chips>\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips \n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>", styles: [".fs-filter{margin-bottom:20px;display:block}.fs-filter:not(.has-keyword) .filter-inner-container{display:flex}.fs-filter:not(.has-keyword) .filter-toobar{justify-content:flex-end}.fs-filter .filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.fs-filter .filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:17px}.fs-filter .filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.fs-filter .filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0}.fs-filter .filter-inner-container .filter-keyword mat-form-field{max-width:100%;min-width:100px}.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix .mat-icon{font-size:22px;color:#626262}.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-infix{width:250px}.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix,.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-suffix{top:.45em}.fs-filter .filter-inner-container .filter-keyword .mat-form-field-wrapper{height:100%}.fs-filter .filter-inner-container .filter-keyword .mat-form-field-suffix{display:flex}.fs-filter .filter-inner-container .filter-keyword .mat-form-field-suffix .mat-icon-button{height:24px;width:24px}.fs-filter .filter-actions{display:flex;align-items:center}.fs-filter .filter-toobar{flex:1;white-space:nowrap;display:flex;align-items:center}.fs-filter .filter-toobar a{width:36px;line-height:36px}.fs-filter .results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}.fs-filter fs-filter-chips{margin-top:4px;display:block}@media screen and (min-width: 599px){.filter-actions{margin-left:10px}.filters-button+fs-filter-actions:not(:empty){margin-left:5px}}@media screen and (max-width: 600px){.filter-actions{margin-left:5px}.filter-actions .filters-button{font-size:0;padding:0;min-width:unset;width:36px;height:36px;border-radius:50%;box-shadow:unset!important}}@media screen and (min-width: 1200px){body.fs-filter-open{margin-right:350px}.fs-filter-backdrop{display:none}}body.fs-filter-open::-webkit-scrollbar{width:0;background:transparent}\n"], components: [{ type: i1__namespace$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i2__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7__namespace$2.FsClearComponent, selector: "[fsClear]", inputs: ["ngModel", "fsClear"], outputs: ["ngModelChange", "cleared"] }, { type: i1__namespace$4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: ["kebabActions", "actions"] }, { type: FsFilterChipsComponent, selector: "fs-filter-chips", inputs: ["filters"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1__namespace$3.MatPrefix, selector: "[matPrefix]" }, { type: i3__namespace$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush, encapsulation: i0__namespace.ViewEncapsulation.None });
5457
5403
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FilterComponent, decorators: [{
5458
5404
  type: i0.Component,
5459
5405
  args: [{
@@ -5499,12 +5445,9 @@
5499
5445
  }], statusBar: [{
5500
5446
  type: i0.ContentChild,
5501
5447
  args: [FilterStatusBarDirective, { read: i0.TemplateRef }]
5502
- }], searchTextInput: [{
5503
- type: i0.ViewChild,
5504
- args: ['searchTextInput']
5505
- }], searchTextMatInput: [{
5448
+ }], keywordMatInput: [{
5506
5449
  type: i0.ViewChild,
5507
- args: ['searchTextInput', { read: i3$3.MatInput }]
5450
+ args: ['keywordMatInput', { read: i3$3.MatInput }]
5508
5451
  }], showFilterMenu: [{
5509
5452
  type: i0.HostBinding,
5510
5453
  args: ['class.filters-open']
@@ -5574,7 +5517,7 @@
5574
5517
  return FsSavedFiltersMenuComponent;
5575
5518
  }());
5576
5519
  FsSavedFiltersMenuComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsSavedFiltersMenuComponent, deps: [{ token: FsFilterItemsStore }, { token: ExternalParamsController }, { token: SavedFiltersController }], target: i0__namespace.ɵɵFactoryTarget.Component });
5577
- FsSavedFiltersMenuComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsSavedFiltersMenuComponent, selector: "fs-filter-saved-filters-menu", outputs: { select: "select", clear: "clear", manage: "manage" }, ngImport: i0__namespace, template: "<a [fsMenuTriggerFor]=\"menu\" class=\"selector\">{{ (activeFilter$ | async)?.name || 'Not selected' }}</a>\n\n<fs-menu #menu>\n <ng-container *ngIf=\"activeFilter$ | async\">\n <ng-template fs-menu-item (click)=\"removeActiveFilter()\">\n None\n </ng-template>\n </ng-container>\n <ng-container *ngFor=\"let filter of filters$ | async\">\n <ng-template fs-menu-item (click)=\"selectFilter(filter)\">\n {{ filter.name }}\n </ng-template>\n </ng-container>\n <ng-template fs-menu-item class=\"saved-filter-last-item\" (click)=\"manageFilters()\">\n Manage\n </ng-template>\n</fs-menu>\n", styles: [":host ::ng-deep .selector{cursor:pointer}\n"], components: [{ type: i3__namespace$4.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass"], outputs: ["opened", "closed"] }], directives: [{ type: i3__namespace$4.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace$4.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
5520
+ FsSavedFiltersMenuComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsSavedFiltersMenuComponent, selector: "fs-filter-saved-filters-menu", outputs: { select: "select", clear: "clear", manage: "manage" }, ngImport: i0__namespace, template: "<a [fsMenuTriggerFor]=\"menu\" class=\"selector\">{{ (activeFilter$ | async)?.name || 'Not selected' }}</a>\n\n<fs-menu #menu>\n <ng-container *ngIf=\"activeFilter$ | async\">\n <ng-template fs-menu-item (click)=\"removeActiveFilter()\">\n None\n </ng-template>\n </ng-container>\n <ng-container *ngFor=\"let filter of filters$ | async\">\n <ng-template fs-menu-item (click)=\"selectFilter(filter)\">\n {{ filter.name }}\n </ng-template>\n </ng-container>\n <ng-template fs-menu-item class=\"saved-filter-last-item\" (click)=\"manageFilters()\">\n Manage\n </ng-template>\n</fs-menu>\n", styles: [":host ::ng-deep .selector{cursor:pointer}\n"], components: [{ type: i3__namespace$3.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass"], outputs: ["opened", "closed"] }], directives: [{ type: i3__namespace$3.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace$3.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i3__namespace.AsyncPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
5578
5521
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsSavedFiltersMenuComponent, decorators: [{
5579
5522
  type: i0.Component,
5580
5523
  args: [{
@@ -5642,28 +5585,29 @@
5642
5585
  i1$1.RouterModule,
5643
5586
  i4.FormsModule,
5644
5587
  i4.ReactiveFormsModule,
5645
- i2$2.MatIconModule,
5588
+ i2$1.MatIconModule,
5646
5589
  i3$3.MatInputModule,
5647
5590
  i2.MatSelectModule,
5648
5591
  chips.MatChipsModule,
5649
- i4$2.MatCheckboxModule,
5592
+ i4$3.MatCheckboxModule,
5650
5593
  autocomplete.MatAutocompleteModule,
5651
5594
  i1$4.MatButtonModule,
5652
5595
  i1$2.MatDialogModule,
5653
- i2$1.FsChipModule,
5596
+ i2$2.FsChipModule,
5654
5597
  common.FsCommonModule,
5655
5598
  i1.FsStoreModule,
5656
5599
  i3.FsDatePickerModule,
5657
- i1$6.FsLabelModule,
5658
- i4$1.FsAutocompleteModule,
5600
+ i1$5.FsLabelModule,
5601
+ i4$2.FsAutocompleteModule,
5659
5602
  i5.FsAutocompleteChipsModule,
5660
5603
  scroll.FsScrollModule,
5661
- portal.PortalModule,
5662
5604
  i3$4.FsMenuModule,
5663
5605
  i6$1.FsSkeletonModule,
5664
5606
  i7.FsFormModule,
5665
- i4$3.FsFileModule,
5666
- i7$1.FsPopoverModule], exports: [FilterComponent,
5607
+ i4$1.FsFileModule,
5608
+ i7$2.FsClearModule,
5609
+ i7$1.FsPopoverModule,
5610
+ portal.PortalModule], exports: [FilterComponent,
5667
5611
  FilterStatusBarDirective,
5668
5612
  FsSavedFiltersMenuComponent] });
5669
5613
  FsFilterModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterModule, providers: [
@@ -5673,28 +5617,29 @@
5673
5617
  i1$1.RouterModule,
5674
5618
  i4.FormsModule,
5675
5619
  i4.ReactiveFormsModule,
5676
- i2$2.MatIconModule,
5620
+ i2$1.MatIconModule,
5677
5621
  i3$3.MatInputModule,
5678
5622
  i2.MatSelectModule,
5679
5623
  chips.MatChipsModule,
5680
- i4$2.MatCheckboxModule,
5624
+ i4$3.MatCheckboxModule,
5681
5625
  autocomplete.MatAutocompleteModule,
5682
5626
  i1$4.MatButtonModule,
5683
5627
  i1$2.MatDialogModule,
5684
- i2$1.FsChipModule,
5628
+ i2$2.FsChipModule,
5685
5629
  common.FsCommonModule,
5686
5630
  i1.FsStoreModule,
5687
5631
  i3.FsDatePickerModule,
5688
- i1$6.FsLabelModule,
5689
- i4$1.FsAutocompleteModule,
5632
+ i1$5.FsLabelModule,
5633
+ i4$2.FsAutocompleteModule,
5690
5634
  i5.FsAutocompleteChipsModule,
5691
5635
  scroll.FsScrollModule,
5692
- portal.PortalModule,
5693
5636
  i3$4.FsMenuModule,
5694
5637
  i6$1.FsSkeletonModule,
5695
5638
  i7.FsFormModule,
5696
- i4$3.FsFileModule,
5639
+ i4$1.FsFileModule,
5640
+ i7$2.FsClearModule,
5697
5641
  i7$1.FsPopoverModule,
5642
+ portal.PortalModule,
5698
5643
  ]] });
5699
5644
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsFilterModule, decorators: [{
5700
5645
  type: i0.NgModule,
@@ -5704,28 +5649,29 @@
5704
5649
  i1$1.RouterModule,
5705
5650
  i4.FormsModule,
5706
5651
  i4.ReactiveFormsModule,
5707
- i2$2.MatIconModule,
5652
+ i2$1.MatIconModule,
5708
5653
  i3$3.MatInputModule,
5709
5654
  i2.MatSelectModule,
5710
5655
  chips.MatChipsModule,
5711
- i4$2.MatCheckboxModule,
5656
+ i4$3.MatCheckboxModule,
5712
5657
  autocomplete.MatAutocompleteModule,
5713
5658
  i1$4.MatButtonModule,
5714
5659
  i1$2.MatDialogModule,
5715
- i2$1.FsChipModule,
5660
+ i2$2.FsChipModule,
5716
5661
  common.FsCommonModule,
5717
5662
  i1.FsStoreModule,
5718
5663
  i3.FsDatePickerModule,
5719
- i1$6.FsLabelModule,
5720
- i4$1.FsAutocompleteModule,
5664
+ i1$5.FsLabelModule,
5665
+ i4$2.FsAutocompleteModule,
5721
5666
  i5.FsAutocompleteChipsModule,
5722
5667
  scroll.FsScrollModule,
5723
- portal.PortalModule,
5724
5668
  i3$4.FsMenuModule,
5725
5669
  i6$1.FsSkeletonModule,
5726
5670
  i7.FsFormModule,
5727
- i4$3.FsFileModule,
5671
+ i4$1.FsFileModule,
5672
+ i7$2.FsClearModule,
5728
5673
  i7$1.FsPopoverModule,
5674
+ portal.PortalModule,
5729
5675
  ],
5730
5676
  declarations: [
5731
5677
  BaseItemComponent,