@theseam/ui-common 2.0.1-beta.94 → 2.0.1-beta.99

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.
@@ -186,6 +186,7 @@ interface IToggleButtonsFilterOptions extends ITextFilterOptions {
186
186
  multiple: boolean;
187
187
  buttons: IToggleButton[];
188
188
  initialValue?: any;
189
+ /** The maximum width a button row can grow to before collapsing. If not set, the button row will grow until it overflows, then collapse. */
189
190
  maxWidth?: number;
190
191
  /** The text shown when the button row is in the collapsed state and no filter is selected. */
191
192
  filterDropdownLabel?: string;
@@ -212,6 +213,8 @@ declare class DataFilterToggleButtonsComponent implements OnInit, OnChanges, OnD
212
213
  maxWidth: number | undefined;
213
214
  filterDropdownLabel: string | undefined;
214
215
  disableCollapse: boolean | undefined;
216
+ get _collapsedClass(): boolean;
217
+ get _expandedClass(): boolean;
215
218
  readonly isCollapsed: i0.WritableSignal<boolean>;
216
219
  private _measureDiv;
217
220
  private _resizeObserver;
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, forwardRef, Input, Inject, Optional, Component, ChangeDetectionStrategy, signal, ViewChild, NgModule } from '@angular/core';
2
+ import { InjectionToken, forwardRef, Input, Inject, Optional, Component, ChangeDetectionStrategy, signal, ViewChild, HostBinding, NgModule } from '@angular/core';
3
3
  import { of, combineLatest } from 'rxjs';
4
4
  import { switchMap, startWith, map, shareReplay } from 'rxjs/operators';
5
5
  import * as i1 from '@angular/common';
@@ -392,6 +392,12 @@ class DataFilterToggleButtonsComponent {
392
392
  maxWidth = this._optDefault('maxWidth');
393
393
  filterDropdownLabel = this._optDefault('filterDropdownLabel');
394
394
  disableCollapse = this._optDefault('disableCollapse');
395
+ get _collapsedClass() {
396
+ return this.isCollapsed();
397
+ }
398
+ get _expandedClass() {
399
+ return !this.isCollapsed();
400
+ }
395
401
  isCollapsed = signal(false, ...(ngDevMode ? [{ debugName: "isCollapsed" }] : []));
396
402
  _measureDiv;
397
403
  _resizeObserver;
@@ -459,13 +465,15 @@ class DataFilterToggleButtonsComponent {
459
465
  exact: this.exact,
460
466
  caseSensitive: this.caseSensitive,
461
467
  maxWidth: this.maxWidth,
468
+ filterDropdownLabel: this.filterDropdownLabel,
469
+ disableCollapse: this.disableCollapse,
462
470
  };
463
471
  }
464
472
  filter(data) {
465
473
  return this._control.valueChanges.pipe(map((v) => toggleButtonsFilter(data, coerceArray(v), this.options)), startWith(toggleButtonsFilter(data, coerceArray(this._control.value), this.options)));
466
474
  }
467
475
  _updateCollapsed() {
468
- if (this.options.disableCollapse) {
476
+ if (this.disableCollapse) {
469
477
  if (this.isCollapsed()) {
470
478
  this.isCollapsed.set(false);
471
479
  }
@@ -498,7 +506,7 @@ class DataFilterToggleButtonsComponent {
498
506
  };
499
507
  }
500
508
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DataFilterToggleButtonsComponent, deps: [{ token: i0.ElementRef }, { token: THESEAM_DATA_FILTER_CONTAINER }, { token: THESEAM_DATA_FILTER_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
501
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DataFilterToggleButtonsComponent, isStandalone: false, selector: "seam-data-filter-toggle-buttons", inputs: { filterName: "filterName", properties: "properties", omitProperties: "omitProperties", multiple: "multiple", selectionToggleable: "selectionToggleable", buttons: "buttons", exact: "exact", caseSensitive: "caseSensitive", maxWidth: "maxWidth", filterDropdownLabel: "filterDropdownLabel", disableCollapse: "disableCollapse", value: "value" }, providers: [DATA_FILTER_TOGGLE_BUTTON], viewQueries: [{ propertyName: "_measureDiv", first: true, predicate: ["measureDiv"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"isCollapsed(); else buttonsTpl\">\n <button\n seamButton\n theme=\"primary\"\n size=\"sm\"\n class=\"dropdown-toggle\"\n title=\"View filter options\"\n [seamMenuToggle]=\"buttonsDropdownTpl\"\n >\n {{ activeFilterLabel | async }}\n </button>\n <seam-menu #buttonsDropdownTpl>\n <div\n role=\"group\"\n aria-label=\"Toggle Filters\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n >\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n seamMenuItem\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.seam-menu-item-active]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n title=\"Apply filter\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n </div>\n </seam-menu>\n</ng-container>\n\n<ng-template #buttonsTpl>\n <div\n class=\"btn-group\"\n role=\"group\"\n aria-label=\"Toggle Filters\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n >\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm px-4\"\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.btn-lightgray]=\"!opt.selected\"\n [class.btn-primary]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n title=\"Apply filter\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Hidden measurement div: always in DOM, used to read natural btn-group width -->\n<div #measureDiv class=\"btn-group btn-group--measure\" aria-hidden=\"true\">\n <ng-container *ngFor=\"let btn of buttons\">\n <button type=\"button\" class=\"btn btn-sm px-4\" tabindex=\"-1\">\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n</div>\n", styles: [":host{position:relative}.btn-group--measure{visibility:hidden;position:absolute;pointer-events:none;white-space:nowrap;top:0;left:-9999px}.seam-menu-item.seam-menu-item-active,.seam-menu-item.seam-menu-item-active.cdk-mouse-focused:not(:hover){background:#357ebd;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.ToggleGroupDirective, selector: "[seamToggleGroup]", inputs: ["value", "disabled", "multiple", "selectionToggleable"], outputs: ["change"], exportAs: ["seamToggleGroup"] }, { kind: "directive", type: i3$1.ToggleGroupOptionDirective, selector: "[seamToggleGroupOption]", inputs: ["seamToggleGroupOption", "selected"], outputs: ["selectionChange"], exportAs: ["seamToggleGroupOption"] }, { kind: "component", type: i4$1.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i4$1.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions", "seamMenuTogglePositionsOffsetY"], outputs: ["menuToggle", "menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i4$1.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i5.TheSeamButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
509
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DataFilterToggleButtonsComponent, isStandalone: false, selector: "seam-data-filter-toggle-buttons", inputs: { filterName: "filterName", properties: "properties", omitProperties: "omitProperties", multiple: "multiple", selectionToggleable: "selectionToggleable", buttons: "buttons", exact: "exact", caseSensitive: "caseSensitive", maxWidth: "maxWidth", filterDropdownLabel: "filterDropdownLabel", disableCollapse: "disableCollapse", value: "value" }, host: { properties: { "class.seam-data-filter-toggle-buttons-collapsed": "this._collapsedClass", "class.seam-data-filter-toggle-buttons-expanded": "this._expandedClass" } }, providers: [DATA_FILTER_TOGGLE_BUTTON], viewQueries: [{ propertyName: "_measureDiv", first: true, predicate: ["measureDiv"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"isCollapsed(); else buttonsTpl\">\n <button\n seamButton\n theme=\"primary\"\n size=\"sm\"\n class=\"dropdown-toggle\"\n title=\"View filter options\"\n [seamMenuToggle]=\"buttonsDropdownTpl\"\n >\n {{ activeFilterLabel | async }}\n </button>\n <seam-menu #buttonsDropdownTpl>\n <div\n role=\"group\"\n aria-label=\"Toggle Filters\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n >\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n seamMenuItem\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.seam-menu-item-active]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n title=\"Apply filter\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n </div>\n </seam-menu>\n</ng-container>\n\n<ng-template #buttonsTpl>\n <div\n class=\"btn-group\"\n role=\"group\"\n aria-label=\"Toggle Filters\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n >\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm px-4\"\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.btn-lightgray]=\"!opt.selected\"\n [class.btn-primary]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n title=\"Apply filter\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Hidden measurement div: always in DOM, used to read natural btn-group width -->\n<div #measureDiv class=\"btn-group btn-group--measure\" aria-hidden=\"true\">\n <ng-container *ngFor=\"let btn of buttons\">\n <button type=\"button\" class=\"btn btn-sm px-4\" tabindex=\"-1\">\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n</div>\n", styles: [":host{position:relative}.btn-group--measure{visibility:hidden;position:absolute;pointer-events:none;white-space:nowrap;top:0;left:-9999px}.seam-menu-item.seam-menu-item-active,.seam-menu-item.seam-menu-item-active.cdk-mouse-focused:not(:hover){background:#357ebd;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.ToggleGroupDirective, selector: "[seamToggleGroup]", inputs: ["value", "disabled", "multiple", "selectionToggleable"], outputs: ["change"], exportAs: ["seamToggleGroup"] }, { kind: "directive", type: i3$1.ToggleGroupOptionDirective, selector: "[seamToggleGroupOption]", inputs: ["seamToggleGroupOption", "selected"], outputs: ["selectionChange"], exportAs: ["seamToggleGroupOption"] }, { kind: "component", type: i4$1.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i4$1.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions", "seamMenuTogglePositionsOffsetY"], outputs: ["menuToggle", "menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i4$1.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i5.TheSeamButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
502
510
  }
503
511
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DataFilterToggleButtonsComponent, decorators: [{
504
512
  type: Component,
@@ -533,6 +541,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
533
541
  type: Input
534
542
  }], disableCollapse: [{
535
543
  type: Input
544
+ }], _collapsedClass: [{
545
+ type: HostBinding,
546
+ args: ['class.seam-data-filter-toggle-buttons-collapsed']
547
+ }], _expandedClass: [{
548
+ type: HostBinding,
549
+ args: ['class.seam-data-filter-toggle-buttons-expanded']
536
550
  }], _measureDiv: [{
537
551
  type: ViewChild,
538
552
  args: ['measureDiv']
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-data-filters.mjs","sources":["../../../projects/ui-common/data-filters/data-filter.ts","../../../projects/ui-common/data-filters/data-filter-def.ts","../../../projects/ui-common/data-filters/data-filter-container.ts","../../../projects/ui-common/data-filters/filters/data-filter-text/data-filter-text.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-text/data-filter-text.component.html","../../../projects/ui-common/data-filters/filters/data-filter-search/data-filter-search.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-search/data-filter-search.component.html","../../../projects/ui-common/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.html","../../../projects/ui-common/data-filters/data-filters.module.ts","../../../projects/ui-common/data-filters/theseam-ui-common-data-filters.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { combineLatest, Observable, of } from 'rxjs'\nimport { map, startWith, switchMap } from 'rxjs/operators'\n\nexport type DataFilterFunction = <T>(data: T[]) => Observable<T[]>\n\n/**\n * State of the filter that would allow an external operation to apply the\n * filtering.\n *\n * This is primarily for server-side filtering.\n */\nexport interface DataFilterState {\n /**\n * DataFilter's name.\n */\n name: string\n\n /**\n * Anything necessary for an external implementation to apply this filter.\n */\n state: { [key: string]: any }\n}\n\n// TODO: Consider adding something, such as a priority or order, to allow the\n// order the filter functions are called in to be declared/influenced\n// externally. This would allow the filters that will most likely filter out\n// many records quickly to be run before the heavy processing filters.\nexport interface DataFilter {\n /**\n * Name used when referencing filter by string.\n */\n name: string\n\n /**\n * Optional override for the filter name used in `filterState()`.\n *\n * When multiple instances of the same filter type exist on a page, each\n * instance shares the same `name`. Set `filterName` to give an instance a\n * distinct key so that filter-state mappers can differentiate them.\n *\n * If unset, `filterState()` falls back to `name`.\n */\n filterName?: string\n\n /**\n * Unique value to prevent a filter being used more than once if it ends up\n * being registered more than once.\n */\n uid: string\n\n /**\n *\n */\n filterStateChanges: Observable<DataFilterState>\n\n /**\n * Filters the data based on the conditions of the filter.\n */\n filter<T>(data: T[]): Observable<T[]>\n\n /**\n *\n */\n filterState(): DataFilterState\n}\n\nexport const THESEAM_DATA_FILTER = new InjectionToken<DataFilter>(\n 'TheSeamDataFilter',\n)\nexport const THESEAM_DATA_FILTER_OPTIONS = new InjectionToken<object>(\n 'TheSeamDataFilterOptions',\n)\n\nexport function filterOperator<T>(filterFn: DataFilterFunction) {\n return (source$: Observable<T[]>) => source$.pipe(switchMap(filterFn))\n}\n\nexport function composeDataFilters(filters: DataFilter[]) {\n const filterFunctions = filters.map((f) => filterOperator(f.filter.bind(f)))\n return (source$: Observable<any>) => {\n let src$ = source$\n for (const f of filterFunctions) {\n src$ = src$.pipe(f)\n }\n return src$\n }\n}\n\nexport function composeDataFilterStates(\n filters: DataFilter[],\n): Observable<DataFilterState[]> {\n if (filters.length === 0) {\n return of([])\n }\n\n return combineLatest(\n filters.map((f) =>\n f.filterStateChanges.pipe(\n startWith(undefined),\n map(() => f.filterState()),\n ),\n ),\n )\n}\n\n/** @deprecated Use `DataFilter` instead. */\nexport type IDataFilter = DataFilter\n\n/** @deprecated Use `IDataFilterFunction` instead. */\nexport type IDataFilterFunction = DataFilterFunction\n","import { InjectionToken } from '@angular/core'\n\nimport { IDataFilter } from './data-filter'\n\nexport interface IDataFilterDef<T = any> {\n name: string\n\n /**\n * Component that controls the filter.\n */\n component: IDataFilter\n}\n\nexport const THESEAM_DATA_FILTER_DEF = new InjectionToken<IDataFilterDef[]>(\n 'TheSeamDataFilter',\n)\n","import { InjectionToken } from '@angular/core'\nimport { IDataFilter } from './data-filter'\n\nexport interface DataFilterContainer {\n filters(): IDataFilter[]\n\n addFilter(dataFilter: IDataFilter): void\n\n removeFilter(dataFilter: IDataFilter): void\n}\n\nexport const THESEAM_DATA_FILTER_CONTAINER =\n new InjectionToken<DataFilterContainer>('DataFilterContainer')\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { ITextFilterOptions } from './text-filter-options'\n\nexport const DATA_FILTER_TEXT: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterTextComponent),\n multi: true,\n}\n\nexport const DefaultTextFilterOptions: ITextFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n exact: false,\n caseSensitive: false,\n}\n\nexport function textDataFilter(\n data: any[],\n text: string,\n options = DefaultTextFilterOptions,\n) {\n if (!data || !text) {\n return data\n }\n\n if (data.length <= 0) {\n return data\n }\n\n let props = options ? options.properties : undefined\n if (!props) {\n props = []\n let keys = Object.keys(data[0])\n if (options && options.omitProperties) {\n keys = keys.filter(\n (key) => !(options.omitProperties || []).find((p) => p === key),\n )\n }\n for (const key of keys) {\n if (Object.prototype.hasOwnProperty.call(data[0], key)) {\n props.push(key)\n }\n }\n }\n\n const filtered: any[] = []\n\n for (const item of data) {\n for (const p of props) {\n let value1 = `${item[p]}`\n let value2 = text\n\n if (!options.caseSensitive) {\n value1 = value1.toLowerCase()\n value2 = value2.toLowerCase()\n }\n\n if (item[p] && value1.indexOf(value2) !== (options.exact ? 0 : -1)) {\n filtered.push(item)\n break\n }\n }\n }\n\n return filtered\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-text',\n templateUrl: './data-filter-text.component.html',\n styleUrls: ['./data-filter-text.component.scss'],\n providers: [DATA_FILTER_TEXT],\n standalone: false,\n})\nexport class DataFilterTextComponent implements OnInit, OnDestroy, IDataFilter {\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'text'\n public readonly uid = `text__${_uid++}`\n\n @Input() filterName: string | undefined\n\n _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null =\n this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null =\n this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean =\n this._optDefault('caseSensitive')\n\n @Input() placeholder: string | undefined | null\n @Input() iconTpl: TemplateRef<HTMLElement> | undefined | null\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? `${value}` : ''\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n\n constructor(\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: ITextFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n switchMap(() => of(this.filterState())),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof ITextFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultTextFilterOptions[prop]\n }\n\n get options(): ITextFilterOptions {\n return {\n properties: this.properties ?? undefined,\n omitProperties: this.omitProperties ?? undefined,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => textDataFilter(data, v, this.options)),\n startWith(textDataFilter(data, this._control.value, this.options)),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.filterName ?? this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<div\n class=\"position-relative\"\n [class.data-filter-text-has-icon]=\"iconTpl\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Text filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ng-container>\n</div>\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators'\n\nimport { faSearch } from '@fortawesome/free-solid-svg-icons'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport type { SeamIcon } from '@theseam/ui-common/icon'\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { textDataFilter } from '../data-filter-text/data-filter-text.component'\n\nimport { ISearchFilterOptions } from './search-filter-options'\n\nexport const DATA_FILTER_SEARCH: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterSearchComponent),\n multi: true,\n}\n\nexport const DefaultSearchFilterOptions: ISearchFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n exact: false,\n caseSensitive: false,\n}\n\nexport function searchDataFilter(\n data: any[],\n values: string,\n options = DefaultSearchFilterOptions,\n) {\n return textDataFilter(data, values, options)\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-search',\n templateUrl: './data-filter-search.component.html',\n styleUrls: ['./data-filter-search.component.scss'],\n providers: [DATA_FILTER_SEARCH],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class DataFilterSearchComponent\n implements OnInit, OnDestroy, IDataFilter\n{\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'search'\n public readonly uid = `search__${_uid++}`\n\n @Input() filterName: string | undefined\n\n _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null =\n this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null =\n this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean =\n this._optDefault('caseSensitive')\n\n @Input() placeholder: string | undefined | null = 'Search...'\n @Input() icon: SeamIcon | undefined | null = faSearch\n @Input() iconTpl?: TemplateRef<HTMLElement>\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? `${value}` : ''\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n\n constructor(\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: ISearchFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n switchMap(() => of(this.filterState())),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof ISearchFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultSearchFilterOptions[prop]\n }\n\n get options(): ISearchFilterOptions {\n return {\n properties: this.properties ?? undefined,\n omitProperties: this.omitProperties ?? undefined,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => searchDataFilter(data, v, this.options)),\n startWith(searchDataFilter(data, this._control.value, this.options)),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.filterName ?? this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<div\n class=\"position-relative\"\n [class.data-filter-search-has-icon]=\"iconTpl || icon\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Search filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl; else searchIconTpl\">\n <div class=\"data-filter-search--icon-wrapper\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </div>\n </ng-container>\n <ng-template #searchIconTpl>\n <ng-container *ngIf=\"icon\">\n <div class=\"data-filter-search--icon-wrapper\">\n <seam-icon [icon]=\"icon\" class=\"text-muted\"></seam-icon>\n </div>\n </ng-container>\n </ng-template>\n</div>\n","import { coerceArray } from '@angular/cdk/coercion'\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n forwardRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n signal,\n SimpleChanges,\n ViewChild,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators'\n\nimport {\n hasProperty,\n isNullOrUndefined,\n notNullOrUndefined,\n} from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { textDataFilter } from '../data-filter-text/data-filter-text.component'\nimport { ITextFilterOptions } from '../data-filter-text/text-filter-options'\n\nexport const DATA_FILTER_TOGGLE_BUTTON_DROPDOWN_TEXT = 'Select Filter'\n\nexport const DATA_FILTER_TOGGLE_BUTTON: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterToggleButtonsComponent),\n multi: true,\n}\n\nexport interface IToggleButton {\n name: string\n value: string\n comparator?: (value: any, row: any, index: number) => -1 | 0 | 1\n}\n\nexport interface IToggleButtonsFilterOptions extends ITextFilterOptions {\n selectionToggleable: boolean\n multiple: boolean\n buttons: IToggleButton[]\n initialValue?: any\n maxWidth?: number\n /** The text shown when the button row is in the collapsed state and no filter is selected. */\n filterDropdownLabel?: string\n /** When true, will prevent the button row from collapsing into a dropdown on smaller screen sizes. */\n disableCollapse?: boolean\n}\n\nexport const DefaultToggleButtonsFilterOptions: IToggleButtonsFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n multiple: false,\n selectionToggleable: false,\n buttons: [],\n exact: false,\n caseSensitive: false,\n maxWidth: undefined,\n filterDropdownLabel: DATA_FILTER_TOGGLE_BUTTON_DROPDOWN_TEXT,\n disableCollapse: undefined,\n}\n\nexport function toggleButtonsFilter(\n data: any[],\n values: string[],\n options = DefaultToggleButtonsFilterOptions,\n) {\n if (!data || !values) {\n return data\n }\n\n const customComparatorBtns: IToggleButton[] = []\n for (const btn of options.buttons) {\n if (btn.comparator) {\n customComparatorBtns.push(btn)\n }\n }\n\n let _data = data\n for (const val of values) {\n if (val === '') {\n continue\n }\n\n let cmp\n for (const btn of customComparatorBtns) {\n if (btn.value === val) {\n cmp = btn.comparator\n }\n }\n if (cmp) {\n const filtered: any[] = []\n for (let i = 0; i < _data.length; i++) {\n if (cmp(val, _data[i], i) !== -1) {\n filtered.push(_data[i])\n }\n }\n _data = filtered\n } else {\n _data = textDataFilter(_data, val, {\n properties: options.properties,\n omitProperties: options.omitProperties,\n exact: options.exact,\n caseSensitive: options.caseSensitive,\n })\n }\n }\n return _data\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-toggle-buttons',\n templateUrl: './data-filter-toggle-buttons.component.html',\n styleUrls: ['./data-filter-toggle-buttons.component.scss'],\n providers: [DATA_FILTER_TOGGLE_BUTTON],\n standalone: false,\n})\nexport class DataFilterToggleButtonsComponent\n implements OnInit, OnChanges, OnDestroy, AfterViewInit, IDataFilter\n{\n public readonly name = 'toggle-buttons'\n public readonly uid = `toggle-buttons__${_uid++}`\n\n @Input() filterName: string | undefined\n\n _control = new UntypedFormControl()\n\n @Input() properties = this._optDefault('properties')\n @Input() omitProperties = this._optDefault('omitProperties')\n @Input() multiple = this._optDefault('multiple')\n @Input() selectionToggleable = this._optDefault('selectionToggleable')\n @Input() buttons = this._optDefault('buttons')\n @Input() exact = this._optDefault('exact')\n @Input() caseSensitive = this._optDefault('caseSensitive')\n @Input() maxWidth = this._optDefault('maxWidth')\n @Input() filterDropdownLabel = this._optDefault('filterDropdownLabel')\n @Input() disableCollapse = this._optDefault('disableCollapse')\n\n public readonly isCollapsed = signal(false)\n\n @ViewChild('measureDiv') private _measureDiv!: ElementRef<HTMLElement>\n\n private _resizeObserver: ResizeObserver | undefined\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? coerceArray(value) : undefined\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n public activeFilterLabel!: Observable<string>\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: IToggleButtonsFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n switchMap(() => of(this.filterState())),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n if (\n this._filterOptions &&\n hasProperty(this._filterOptions, 'initialValue')\n ) {\n this.value = this._optDefault('initialValue')\n }\n\n this.activeFilterLabel = this.filterStateChanges.pipe(\n startWith(undefined),\n map(() => {\n const state = this.filterState()\n const options = state.state.options as IToggleButtonsFilterOptions\n const selectedOptions = options.buttons\n .filter((o) => coerceArray(state.state.value).includes(o.value))\n .map((o) => o.name)\n\n return selectedOptions.length > 0\n ? selectedOptions.join(', ')\n : this.filterDropdownLabel || DATA_FILTER_TOGGLE_BUTTON_DROPDOWN_TEXT\n }),\n )\n }\n\n ngAfterViewInit(): void {\n this._resizeObserver = new ResizeObserver(() => this._updateCollapsed())\n\n if (\n notNullOrUndefined(this._elementRef.nativeElement.parentElement) &&\n this.disableCollapse !== true\n ) {\n this._resizeObserver.observe(this._elementRef.nativeElement.parentElement)\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['buttons'] && !changes['buttons'].firstChange) {\n this._updateCollapsed()\n }\n }\n\n ngOnDestroy(): void {\n this._filterContainer.removeFilter(this)\n this._resizeObserver?.disconnect()\n }\n\n private _optDefault<K extends keyof IToggleButtonsFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultToggleButtonsFilterOptions[prop]\n }\n\n get options(): IToggleButtonsFilterOptions {\n return {\n properties: this.properties,\n omitProperties: this.omitProperties,\n multiple: this.multiple,\n selectionToggleable: this.selectionToggleable,\n buttons: this.buttons,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n maxWidth: this.maxWidth,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => toggleButtonsFilter(data, coerceArray(v), this.options)),\n startWith(\n toggleButtonsFilter(\n data,\n coerceArray(this._control.value),\n this.options,\n ),\n ),\n )\n }\n\n private _updateCollapsed(): void {\n if (this.options.disableCollapse) {\n if (this.isCollapsed()) {\n this.isCollapsed.set(false)\n }\n\n return\n }\n if (!this._measureDiv) {\n return\n }\n const measureWidth = this._measureDiv.nativeElement.scrollWidth\n\n // Because of the flex layout, this element won't necessarily grow to its full\n // potential width when in collapsed mode, meaning it stays collapsed even\n // though there's room to expand. If this becomes a problem, we may need to use a\n // different strategy to determine when it's safe to show the full filter bar.\n const clientWidth =\n this._elementRef.nativeElement.parentElement?.clientWidth\n\n // Not enough information to determine collapsed state, so don't update it\n if (isNullOrUndefined(clientWidth)) {\n return\n }\n\n const threshold =\n this.maxWidth != null ? Math.min(clientWidth, this.maxWidth) : clientWidth\n this.isCollapsed.set(measureWidth > threshold)\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.filterName ?? this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<ng-container *ngIf=\"isCollapsed(); else buttonsTpl\">\n <button\n seamButton\n theme=\"primary\"\n size=\"sm\"\n class=\"dropdown-toggle\"\n title=\"View filter options\"\n [seamMenuToggle]=\"buttonsDropdownTpl\"\n >\n {{ activeFilterLabel | async }}\n </button>\n <seam-menu #buttonsDropdownTpl>\n <div\n role=\"group\"\n aria-label=\"Toggle Filters\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n >\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n seamMenuItem\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.seam-menu-item-active]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n title=\"Apply filter\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n </div>\n </seam-menu>\n</ng-container>\n\n<ng-template #buttonsTpl>\n <div\n class=\"btn-group\"\n role=\"group\"\n aria-label=\"Toggle Filters\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n >\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm px-4\"\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.btn-lightgray]=\"!opt.selected\"\n [class.btn-primary]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n title=\"Apply filter\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Hidden measurement div: always in DOM, used to read natural btn-group width -->\n<div #measureDiv class=\"btn-group btn-group--measure\" aria-hidden=\"true\">\n <ng-container *ngFor=\"let btn of buttons\">\n <button type=\"button\" class=\"btn btn-sm px-4\" tabindex=\"-1\">\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n</div>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { ReactiveFormsModule } from '@angular/forms'\n\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome'\n\nimport { TheSeamFormFieldModule } from '@theseam/ui-common/form-field'\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\nimport { TheSeamToggleGroupModule } from '@theseam/ui-common/toggle-group'\nimport { TheSeamMenuModule } from '@theseam/ui-common/menu'\nimport { TheSeamButtonsModule } from '@theseam/ui-common/buttons'\n\nimport { THESEAM_DATA_FILTER_DEF } from './data-filter-def'\nimport { DataFilterSearchComponent } from './filters/data-filter-search/data-filter-search.component'\nimport { DataFilterTextComponent } from './filters/data-filter-text/data-filter-text.component'\nimport { DataFilterToggleButtonsComponent } from './filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component'\n\nconst filterComponents = [\n DataFilterSearchComponent,\n DataFilterTextComponent,\n DataFilterToggleButtonsComponent,\n]\n\nconst filterDefProviders = [\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: { name: 'search', component: DataFilterSearchComponent },\n multi: true,\n },\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: { name: 'text', component: DataFilterTextComponent },\n multi: true,\n },\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: {\n name: 'toggle-buttons',\n component: DataFilterToggleButtonsComponent,\n },\n multi: true,\n },\n]\n\n@NgModule({\n declarations: [...filterComponents],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TheSeamFormFieldModule,\n FontAwesomeModule,\n TheSeamToggleGroupModule,\n TheSeamIconModule,\n TheSeamMenuModule,\n TheSeamButtonsModule,\n ],\n providers: [...filterDefProviders],\n exports: [...filterComponents],\n})\nexport class TheSeamDataFiltersModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["_uid","i3","i4"],"mappings":"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"}
1
+ {"version":3,"file":"theseam-ui-common-data-filters.mjs","sources":["../../../projects/ui-common/data-filters/data-filter.ts","../../../projects/ui-common/data-filters/data-filter-def.ts","../../../projects/ui-common/data-filters/data-filter-container.ts","../../../projects/ui-common/data-filters/filters/data-filter-text/data-filter-text.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-text/data-filter-text.component.html","../../../projects/ui-common/data-filters/filters/data-filter-search/data-filter-search.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-search/data-filter-search.component.html","../../../projects/ui-common/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.html","../../../projects/ui-common/data-filters/data-filters.module.ts","../../../projects/ui-common/data-filters/theseam-ui-common-data-filters.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { combineLatest, Observable, of } from 'rxjs'\nimport { map, startWith, switchMap } from 'rxjs/operators'\n\nexport type DataFilterFunction = <T>(data: T[]) => Observable<T[]>\n\n/**\n * State of the filter that would allow an external operation to apply the\n * filtering.\n *\n * This is primarily for server-side filtering.\n */\nexport interface DataFilterState {\n /**\n * DataFilter's name.\n */\n name: string\n\n /**\n * Anything necessary for an external implementation to apply this filter.\n */\n state: { [key: string]: any }\n}\n\n// TODO: Consider adding something, such as a priority or order, to allow the\n// order the filter functions are called in to be declared/influenced\n// externally. This would allow the filters that will most likely filter out\n// many records quickly to be run before the heavy processing filters.\nexport interface DataFilter {\n /**\n * Name used when referencing filter by string.\n */\n name: string\n\n /**\n * Optional override for the filter name used in `filterState()`.\n *\n * When multiple instances of the same filter type exist on a page, each\n * instance shares the same `name`. Set `filterName` to give an instance a\n * distinct key so that filter-state mappers can differentiate them.\n *\n * If unset, `filterState()` falls back to `name`.\n */\n filterName?: string\n\n /**\n * Unique value to prevent a filter being used more than once if it ends up\n * being registered more than once.\n */\n uid: string\n\n /**\n *\n */\n filterStateChanges: Observable<DataFilterState>\n\n /**\n * Filters the data based on the conditions of the filter.\n */\n filter<T>(data: T[]): Observable<T[]>\n\n /**\n *\n */\n filterState(): DataFilterState\n}\n\nexport const THESEAM_DATA_FILTER = new InjectionToken<DataFilter>(\n 'TheSeamDataFilter',\n)\nexport const THESEAM_DATA_FILTER_OPTIONS = new InjectionToken<object>(\n 'TheSeamDataFilterOptions',\n)\n\nexport function filterOperator<T>(filterFn: DataFilterFunction) {\n return (source$: Observable<T[]>) => source$.pipe(switchMap(filterFn))\n}\n\nexport function composeDataFilters(filters: DataFilter[]) {\n const filterFunctions = filters.map((f) => filterOperator(f.filter.bind(f)))\n return (source$: Observable<any>) => {\n let src$ = source$\n for (const f of filterFunctions) {\n src$ = src$.pipe(f)\n }\n return src$\n }\n}\n\nexport function composeDataFilterStates(\n filters: DataFilter[],\n): Observable<DataFilterState[]> {\n if (filters.length === 0) {\n return of([])\n }\n\n return combineLatest(\n filters.map((f) =>\n f.filterStateChanges.pipe(\n startWith(undefined),\n map(() => f.filterState()),\n ),\n ),\n )\n}\n\n/** @deprecated Use `DataFilter` instead. */\nexport type IDataFilter = DataFilter\n\n/** @deprecated Use `IDataFilterFunction` instead. */\nexport type IDataFilterFunction = DataFilterFunction\n","import { InjectionToken } from '@angular/core'\n\nimport { IDataFilter } from './data-filter'\n\nexport interface IDataFilterDef<T = any> {\n name: string\n\n /**\n * Component that controls the filter.\n */\n component: IDataFilter\n}\n\nexport const THESEAM_DATA_FILTER_DEF = new InjectionToken<IDataFilterDef[]>(\n 'TheSeamDataFilter',\n)\n","import { InjectionToken } from '@angular/core'\nimport { IDataFilter } from './data-filter'\n\nexport interface DataFilterContainer {\n filters(): IDataFilter[]\n\n addFilter(dataFilter: IDataFilter): void\n\n removeFilter(dataFilter: IDataFilter): void\n}\n\nexport const THESEAM_DATA_FILTER_CONTAINER =\n new InjectionToken<DataFilterContainer>('DataFilterContainer')\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { ITextFilterOptions } from './text-filter-options'\n\nexport const DATA_FILTER_TEXT: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterTextComponent),\n multi: true,\n}\n\nexport const DefaultTextFilterOptions: ITextFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n exact: false,\n caseSensitive: false,\n}\n\nexport function textDataFilter(\n data: any[],\n text: string,\n options = DefaultTextFilterOptions,\n) {\n if (!data || !text) {\n return data\n }\n\n if (data.length <= 0) {\n return data\n }\n\n let props = options ? options.properties : undefined\n if (!props) {\n props = []\n let keys = Object.keys(data[0])\n if (options && options.omitProperties) {\n keys = keys.filter(\n (key) => !(options.omitProperties || []).find((p) => p === key),\n )\n }\n for (const key of keys) {\n if (Object.prototype.hasOwnProperty.call(data[0], key)) {\n props.push(key)\n }\n }\n }\n\n const filtered: any[] = []\n\n for (const item of data) {\n for (const p of props) {\n let value1 = `${item[p]}`\n let value2 = text\n\n if (!options.caseSensitive) {\n value1 = value1.toLowerCase()\n value2 = value2.toLowerCase()\n }\n\n if (item[p] && value1.indexOf(value2) !== (options.exact ? 0 : -1)) {\n filtered.push(item)\n break\n }\n }\n }\n\n return filtered\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-text',\n templateUrl: './data-filter-text.component.html',\n styleUrls: ['./data-filter-text.component.scss'],\n providers: [DATA_FILTER_TEXT],\n standalone: false,\n})\nexport class DataFilterTextComponent implements OnInit, OnDestroy, IDataFilter {\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'text'\n public readonly uid = `text__${_uid++}`\n\n @Input() filterName: string | undefined\n\n _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null =\n this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null =\n this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean =\n this._optDefault('caseSensitive')\n\n @Input() placeholder: string | undefined | null\n @Input() iconTpl: TemplateRef<HTMLElement> | undefined | null\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? `${value}` : ''\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n\n constructor(\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: ITextFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n switchMap(() => of(this.filterState())),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof ITextFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultTextFilterOptions[prop]\n }\n\n get options(): ITextFilterOptions {\n return {\n properties: this.properties ?? undefined,\n omitProperties: this.omitProperties ?? undefined,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => textDataFilter(data, v, this.options)),\n startWith(textDataFilter(data, this._control.value, this.options)),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.filterName ?? this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<div\n class=\"position-relative\"\n [class.data-filter-text-has-icon]=\"iconTpl\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Text filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ng-container>\n</div>\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators'\n\nimport { faSearch } from '@fortawesome/free-solid-svg-icons'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport type { SeamIcon } from '@theseam/ui-common/icon'\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { textDataFilter } from '../data-filter-text/data-filter-text.component'\n\nimport { ISearchFilterOptions } from './search-filter-options'\n\nexport const DATA_FILTER_SEARCH: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterSearchComponent),\n multi: true,\n}\n\nexport const DefaultSearchFilterOptions: ISearchFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n exact: false,\n caseSensitive: false,\n}\n\nexport function searchDataFilter(\n data: any[],\n values: string,\n options = DefaultSearchFilterOptions,\n) {\n return textDataFilter(data, values, options)\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-search',\n templateUrl: './data-filter-search.component.html',\n styleUrls: ['./data-filter-search.component.scss'],\n providers: [DATA_FILTER_SEARCH],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class DataFilterSearchComponent\n implements OnInit, OnDestroy, IDataFilter\n{\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'search'\n public readonly uid = `search__${_uid++}`\n\n @Input() filterName: string | undefined\n\n _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null =\n this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null =\n this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean =\n this._optDefault('caseSensitive')\n\n @Input() placeholder: string | undefined | null = 'Search...'\n @Input() icon: SeamIcon | undefined | null = faSearch\n @Input() iconTpl?: TemplateRef<HTMLElement>\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? `${value}` : ''\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n\n constructor(\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: ISearchFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n switchMap(() => of(this.filterState())),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof ISearchFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultSearchFilterOptions[prop]\n }\n\n get options(): ISearchFilterOptions {\n return {\n properties: this.properties ?? undefined,\n omitProperties: this.omitProperties ?? undefined,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => searchDataFilter(data, v, this.options)),\n startWith(searchDataFilter(data, this._control.value, this.options)),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.filterName ?? this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<div\n class=\"position-relative\"\n [class.data-filter-search-has-icon]=\"iconTpl || icon\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Search filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl; else searchIconTpl\">\n <div class=\"data-filter-search--icon-wrapper\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </div>\n </ng-container>\n <ng-template #searchIconTpl>\n <ng-container *ngIf=\"icon\">\n <div class=\"data-filter-search--icon-wrapper\">\n <seam-icon [icon]=\"icon\" class=\"text-muted\"></seam-icon>\n </div>\n </ng-container>\n </ng-template>\n</div>\n","import { coerceArray } from '@angular/cdk/coercion'\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n signal,\n SimpleChanges,\n ViewChild,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators'\n\nimport {\n hasProperty,\n isNullOrUndefined,\n notNullOrUndefined,\n} from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { textDataFilter } from '../data-filter-text/data-filter-text.component'\nimport { ITextFilterOptions } from '../data-filter-text/text-filter-options'\n\nexport const DATA_FILTER_TOGGLE_BUTTON_DROPDOWN_TEXT = 'Select Filter'\n\nexport const DATA_FILTER_TOGGLE_BUTTON: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterToggleButtonsComponent),\n multi: true,\n}\n\nexport interface IToggleButton {\n name: string\n value: string\n comparator?: (value: any, row: any, index: number) => -1 | 0 | 1\n}\n\nexport interface IToggleButtonsFilterOptions extends ITextFilterOptions {\n selectionToggleable: boolean\n multiple: boolean\n buttons: IToggleButton[]\n initialValue?: any\n /** The maximum width a button row can grow to before collapsing. If not set, the button row will grow until it overflows, then collapse. */\n maxWidth?: number\n /** The text shown when the button row is in the collapsed state and no filter is selected. */\n filterDropdownLabel?: string\n /** When true, will prevent the button row from collapsing into a dropdown on smaller screen sizes. */\n disableCollapse?: boolean\n}\n\nexport const DefaultToggleButtonsFilterOptions: IToggleButtonsFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n multiple: false,\n selectionToggleable: false,\n buttons: [],\n exact: false,\n caseSensitive: false,\n maxWidth: undefined,\n filterDropdownLabel: DATA_FILTER_TOGGLE_BUTTON_DROPDOWN_TEXT,\n disableCollapse: undefined,\n}\n\nexport function toggleButtonsFilter(\n data: any[],\n values: string[],\n options = DefaultToggleButtonsFilterOptions,\n) {\n if (!data || !values) {\n return data\n }\n\n const customComparatorBtns: IToggleButton[] = []\n for (const btn of options.buttons) {\n if (btn.comparator) {\n customComparatorBtns.push(btn)\n }\n }\n\n let _data = data\n for (const val of values) {\n if (val === '') {\n continue\n }\n\n let cmp\n for (const btn of customComparatorBtns) {\n if (btn.value === val) {\n cmp = btn.comparator\n }\n }\n if (cmp) {\n const filtered: any[] = []\n for (let i = 0; i < _data.length; i++) {\n if (cmp(val, _data[i], i) !== -1) {\n filtered.push(_data[i])\n }\n }\n _data = filtered\n } else {\n _data = textDataFilter(_data, val, {\n properties: options.properties,\n omitProperties: options.omitProperties,\n exact: options.exact,\n caseSensitive: options.caseSensitive,\n })\n }\n }\n return _data\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-toggle-buttons',\n templateUrl: './data-filter-toggle-buttons.component.html',\n styleUrls: ['./data-filter-toggle-buttons.component.scss'],\n providers: [DATA_FILTER_TOGGLE_BUTTON],\n standalone: false,\n})\nexport class DataFilterToggleButtonsComponent\n implements OnInit, OnChanges, OnDestroy, AfterViewInit, IDataFilter\n{\n public readonly name = 'toggle-buttons'\n public readonly uid = `toggle-buttons__${_uid++}`\n\n @Input() filterName: string | undefined\n\n _control = new UntypedFormControl()\n\n @Input() properties = this._optDefault('properties')\n @Input() omitProperties = this._optDefault('omitProperties')\n @Input() multiple = this._optDefault('multiple')\n @Input() selectionToggleable = this._optDefault('selectionToggleable')\n @Input() buttons = this._optDefault('buttons')\n @Input() exact = this._optDefault('exact')\n @Input() caseSensitive = this._optDefault('caseSensitive')\n @Input() maxWidth = this._optDefault('maxWidth')\n @Input() filterDropdownLabel = this._optDefault('filterDropdownLabel')\n @Input() disableCollapse = this._optDefault('disableCollapse')\n\n @HostBinding('class.seam-data-filter-toggle-buttons-collapsed')\n get _collapsedClass() {\n return this.isCollapsed()\n }\n\n @HostBinding('class.seam-data-filter-toggle-buttons-expanded')\n get _expandedClass() {\n return !this.isCollapsed()\n }\n\n public readonly isCollapsed = signal(false)\n\n @ViewChild('measureDiv') private _measureDiv!: ElementRef<HTMLElement>\n\n private _resizeObserver: ResizeObserver | undefined\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? coerceArray(value) : undefined\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n public activeFilterLabel!: Observable<string>\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: IToggleButtonsFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n switchMap(() => of(this.filterState())),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n if (\n this._filterOptions &&\n hasProperty(this._filterOptions, 'initialValue')\n ) {\n this.value = this._optDefault('initialValue')\n }\n\n this.activeFilterLabel = this.filterStateChanges.pipe(\n startWith(undefined),\n map(() => {\n const state = this.filterState()\n const options = state.state.options as IToggleButtonsFilterOptions\n const selectedOptions = options.buttons\n .filter((o) => coerceArray(state.state.value).includes(o.value))\n .map((o) => o.name)\n\n return selectedOptions.length > 0\n ? selectedOptions.join(', ')\n : this.filterDropdownLabel || DATA_FILTER_TOGGLE_BUTTON_DROPDOWN_TEXT\n }),\n )\n }\n\n ngAfterViewInit(): void {\n this._resizeObserver = new ResizeObserver(() => this._updateCollapsed())\n\n if (\n notNullOrUndefined(this._elementRef.nativeElement.parentElement) &&\n this.disableCollapse !== true\n ) {\n this._resizeObserver.observe(this._elementRef.nativeElement.parentElement)\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['buttons'] && !changes['buttons'].firstChange) {\n this._updateCollapsed()\n }\n }\n\n ngOnDestroy(): void {\n this._filterContainer.removeFilter(this)\n this._resizeObserver?.disconnect()\n }\n\n private _optDefault<K extends keyof IToggleButtonsFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultToggleButtonsFilterOptions[prop]\n }\n\n get options(): IToggleButtonsFilterOptions {\n return {\n properties: this.properties,\n omitProperties: this.omitProperties,\n multiple: this.multiple,\n selectionToggleable: this.selectionToggleable,\n buttons: this.buttons,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n maxWidth: this.maxWidth,\n filterDropdownLabel: this.filterDropdownLabel,\n disableCollapse: this.disableCollapse,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => toggleButtonsFilter(data, coerceArray(v), this.options)),\n startWith(\n toggleButtonsFilter(\n data,\n coerceArray(this._control.value),\n this.options,\n ),\n ),\n )\n }\n\n private _updateCollapsed(): void {\n if (this.disableCollapse) {\n if (this.isCollapsed()) {\n this.isCollapsed.set(false)\n }\n\n return\n }\n if (!this._measureDiv) {\n return\n }\n const measureWidth = this._measureDiv.nativeElement.scrollWidth\n\n // Because of the flex layout, this element won't necessarily grow to its full\n // potential width when in collapsed mode, meaning it stays collapsed even\n // though there's room to expand. If this becomes a problem, we may need to use a\n // different strategy to determine when it's safe to show the full filter bar.\n const clientWidth =\n this._elementRef.nativeElement.parentElement?.clientWidth\n\n // Not enough information to determine collapsed state, so don't update it\n if (isNullOrUndefined(clientWidth)) {\n return\n }\n\n const threshold =\n this.maxWidth != null ? Math.min(clientWidth, this.maxWidth) : clientWidth\n this.isCollapsed.set(measureWidth > threshold)\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.filterName ?? this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<ng-container *ngIf=\"isCollapsed(); else buttonsTpl\">\n <button\n seamButton\n theme=\"primary\"\n size=\"sm\"\n class=\"dropdown-toggle\"\n title=\"View filter options\"\n [seamMenuToggle]=\"buttonsDropdownTpl\"\n >\n {{ activeFilterLabel | async }}\n </button>\n <seam-menu #buttonsDropdownTpl>\n <div\n role=\"group\"\n aria-label=\"Toggle Filters\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n >\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n seamMenuItem\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.seam-menu-item-active]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n title=\"Apply filter\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n </div>\n </seam-menu>\n</ng-container>\n\n<ng-template #buttonsTpl>\n <div\n class=\"btn-group\"\n role=\"group\"\n aria-label=\"Toggle Filters\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n >\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm px-4\"\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.btn-lightgray]=\"!opt.selected\"\n [class.btn-primary]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n title=\"Apply filter\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Hidden measurement div: always in DOM, used to read natural btn-group width -->\n<div #measureDiv class=\"btn-group btn-group--measure\" aria-hidden=\"true\">\n <ng-container *ngFor=\"let btn of buttons\">\n <button type=\"button\" class=\"btn btn-sm px-4\" tabindex=\"-1\">\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n</div>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { ReactiveFormsModule } from '@angular/forms'\n\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome'\n\nimport { TheSeamFormFieldModule } from '@theseam/ui-common/form-field'\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\nimport { TheSeamToggleGroupModule } from '@theseam/ui-common/toggle-group'\nimport { TheSeamMenuModule } from '@theseam/ui-common/menu'\nimport { TheSeamButtonsModule } from '@theseam/ui-common/buttons'\n\nimport { THESEAM_DATA_FILTER_DEF } from './data-filter-def'\nimport { DataFilterSearchComponent } from './filters/data-filter-search/data-filter-search.component'\nimport { DataFilterTextComponent } from './filters/data-filter-text/data-filter-text.component'\nimport { DataFilterToggleButtonsComponent } from './filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component'\n\nconst filterComponents = [\n DataFilterSearchComponent,\n DataFilterTextComponent,\n DataFilterToggleButtonsComponent,\n]\n\nconst filterDefProviders = [\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: { name: 'search', component: DataFilterSearchComponent },\n multi: true,\n },\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: { name: 'text', component: DataFilterTextComponent },\n multi: true,\n },\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: {\n name: 'toggle-buttons',\n component: DataFilterToggleButtonsComponent,\n },\n multi: true,\n },\n]\n\n@NgModule({\n declarations: [...filterComponents],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TheSeamFormFieldModule,\n FontAwesomeModule,\n TheSeamToggleGroupModule,\n TheSeamIconModule,\n TheSeamMenuModule,\n TheSeamButtonsModule,\n ],\n providers: [...filterDefProviders],\n exports: [...filterComponents],\n})\nexport class TheSeamDataFiltersModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["_uid","i3","i4"],"mappings":"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"}
@@ -4001,29 +4001,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
4001
4001
 
4002
4002
  class DatatableMenuBarColumnCenterComponent {
4003
4003
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DatatableMenuBarColumnCenterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4004
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DatatableMenuBarColumnCenterComponent, isStandalone: false, selector: "seam-datatable-menu-bar-column-center", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;flex:1 1 auto;justify-content:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4004
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DatatableMenuBarColumnCenterComponent, isStandalone: false, selector: "seam-datatable-menu-bar-column-center", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;flex:1 1 auto;justify-content:center;max-width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4005
4005
  }
4006
4006
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DatatableMenuBarColumnCenterComponent, decorators: [{
4007
4007
  type: Component,
4008
- args: [{ selector: 'seam-datatable-menu-bar-column-center', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;flex:1 1 auto;justify-content:center}\n"] }]
4008
+ args: [{ selector: 'seam-datatable-menu-bar-column-center', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;flex:1 1 auto;justify-content:center;max-width:100%}\n"] }]
4009
4009
  }] });
4010
4010
 
4011
4011
  class DatatableMenuBarColumnLeftComponent {
4012
4012
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DatatableMenuBarColumnLeftComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4013
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DatatableMenuBarColumnLeftComponent, isStandalone: false, selector: "seam-datatable-menu-bar-column-left", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;flex:1 1 0%;justify-content:flex-start}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4013
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DatatableMenuBarColumnLeftComponent, isStandalone: false, selector: "seam-datatable-menu-bar-column-left", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;flex:1 1 0%;justify-content:flex-start;max-width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4014
4014
  }
4015
4015
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DatatableMenuBarColumnLeftComponent, decorators: [{
4016
4016
  type: Component,
4017
- args: [{ selector: 'seam-datatable-menu-bar-column-left', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;flex:1 1 0%;justify-content:flex-start}\n"] }]
4017
+ args: [{ selector: 'seam-datatable-menu-bar-column-left', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;flex:1 1 0%;justify-content:flex-start;max-width:100%}\n"] }]
4018
4018
  }] });
4019
4019
 
4020
4020
  class DatatableMenuBarColumnRightComponent {
4021
4021
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DatatableMenuBarColumnRightComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4022
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DatatableMenuBarColumnRightComponent, isStandalone: false, selector: "seam-datatable-menu-bar-column-right", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;flex:1 1 0%;justify-content:flex-end}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4022
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DatatableMenuBarColumnRightComponent, isStandalone: false, selector: "seam-datatable-menu-bar-column-right", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;flex:1 1 0%;justify-content:flex-end;max-width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4023
4023
  }
4024
4024
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DatatableMenuBarColumnRightComponent, decorators: [{
4025
4025
  type: Component,
4026
- args: [{ selector: 'seam-datatable-menu-bar-column-right', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;flex:1 1 0%;justify-content:flex-end}\n"] }]
4026
+ args: [{ selector: 'seam-datatable-menu-bar-column-right', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;flex:1 1 0%;justify-content:flex-end;max-width:100%}\n"] }]
4027
4027
  }] });
4028
4028
 
4029
4029
  class DatatableMenuBarRowComponent {