@theseam/ui-common 0.4.24 → 0.4.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/esm2020/data-filters/filters/data-filter-search/data-filter-search.component.mjs +1 -1
  2. package/esm2020/data-filters/filters/data-filter-text/data-filter-text.component.mjs +1 -1
  3. package/esm2020/datatable/datatable/datatable.component.mjs +3 -3
  4. package/esm2020/datatable/datatable-action-menu/datatable-action-menu.component.mjs +3 -3
  5. package/esm2020/datatable/datatable-column-preferences/datatable-column-preferences.component.mjs +1 -1
  6. package/esm2020/form-field/input.directive.mjs +8 -4
  7. package/esm2020/framework/schema-form-controls/schema-form-input/schema-form-input.component.mjs +1 -1
  8. package/esm2020/framework/schema-form-controls/schema-form-number/schema-form-number.component.mjs +1 -1
  9. package/esm2020/framework/schema-form-controls/schema-form-select/schema-form-select.component.mjs +2 -2
  10. package/esm2020/framework/schema-form-controls/schema-form-tel/schema-form-tel.component.mjs +2 -2
  11. package/esm2020/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.mjs +3 -3
  12. package/esm2020/rich-text/public-api.mjs +5 -0
  13. package/esm2020/rich-text/rich-text/rich-text.component.mjs +573 -0
  14. package/esm2020/rich-text/rich-text.module.mjs +32 -0
  15. package/esm2020/rich-text/theseam-ui-common-rich-text.mjs +5 -0
  16. package/esm2020/rich-text/utils/models.mjs +24 -0
  17. package/esm2020/rich-text/utils/utils.mjs +123 -0
  18. package/esm2020/tel-input/tel-input/tel-input.component.mjs +2 -2
  19. package/esm2020/utils/geo-json/coerce-feature-collection.mjs +1 -1
  20. package/esm2020/utils/geo-json/is-feature-collection.validator.mjs +1 -1
  21. package/esm2020/utils/geo-json/is-only-geometry-types.mjs +1 -1
  22. package/esm2020/utils/geo-json/merge-polygons.mjs +1 -1
  23. package/esm2020/utils/geo-json/no-inner-rings.validator.mjs +1 -1
  24. package/esm2020/utils/geo-json/split-multi-polygons.mjs +1 -1
  25. package/esm2020/utils/is-null-or-undefined-or-empty.mjs +4 -0
  26. package/esm2020/utils/not-null-or-undefined-or-empty.mjs +4 -0
  27. package/esm2020/utils/public-api.mjs +3 -1
  28. package/fesm2015/theseam-ui-common-data-filters.mjs +2 -2
  29. package/fesm2015/theseam-ui-common-data-filters.mjs.map +1 -1
  30. package/fesm2015/theseam-ui-common-datatable.mjs +5 -5
  31. package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
  32. package/fesm2015/theseam-ui-common-form-field.mjs +7 -3
  33. package/fesm2015/theseam-ui-common-form-field.mjs.map +1 -1
  34. package/fesm2015/theseam-ui-common-framework.mjs +4 -4
  35. package/fesm2015/theseam-ui-common-framework.mjs.map +1 -1
  36. package/fesm2015/theseam-ui-common-google-maps.mjs +2 -2
  37. package/fesm2015/theseam-ui-common-google-maps.mjs.map +1 -1
  38. package/fesm2015/theseam-ui-common-rich-text.mjs +744 -0
  39. package/fesm2015/theseam-ui-common-rich-text.mjs.map +1 -0
  40. package/fesm2015/theseam-ui-common-tel-input.mjs +1 -1
  41. package/fesm2015/theseam-ui-common-tel-input.mjs.map +1 -1
  42. package/fesm2015/theseam-ui-common-utils.mjs +9 -1
  43. package/fesm2015/theseam-ui-common-utils.mjs.map +1 -1
  44. package/fesm2020/theseam-ui-common-data-filters.mjs +2 -2
  45. package/fesm2020/theseam-ui-common-data-filters.mjs.map +1 -1
  46. package/fesm2020/theseam-ui-common-datatable.mjs +5 -5
  47. package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
  48. package/fesm2020/theseam-ui-common-form-field.mjs +7 -3
  49. package/fesm2020/theseam-ui-common-form-field.mjs.map +1 -1
  50. package/fesm2020/theseam-ui-common-framework.mjs +4 -4
  51. package/fesm2020/theseam-ui-common-framework.mjs.map +1 -1
  52. package/fesm2020/theseam-ui-common-google-maps.mjs +2 -2
  53. package/fesm2020/theseam-ui-common-google-maps.mjs.map +1 -1
  54. package/fesm2020/theseam-ui-common-rich-text.mjs +752 -0
  55. package/fesm2020/theseam-ui-common-rich-text.mjs.map +1 -0
  56. package/fesm2020/theseam-ui-common-tel-input.mjs +1 -1
  57. package/fesm2020/theseam-ui-common-tel-input.mjs.map +1 -1
  58. package/fesm2020/theseam-ui-common-utils.mjs +9 -1
  59. package/fesm2020/theseam-ui-common-utils.mjs.map +1 -1
  60. package/form-field/input.directive.d.ts +2 -1
  61. package/package.json +9 -1
  62. package/rich-text/index.d.ts +5 -0
  63. package/rich-text/public-api.d.ts +4 -0
  64. package/rich-text/rich-text/rich-text.component.d.ts +192 -0
  65. package/rich-text/rich-text.module.d.ts +10 -0
  66. package/rich-text/utils/models.d.ts +343 -0
  67. package/rich-text/utils/utils.d.ts +14 -0
  68. package/styles/vendor/quill/_quill.scss +162 -10
  69. package/utils/is-null-or-undefined-or-empty.d.ts +1 -0
  70. package/utils/not-null-or-undefined-or-empty.d.ts +1 -0
  71. package/utils/public-api.d.ts +2 -0
@@ -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 * 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>('TheSeamDataFilter')\nexport const THESEAM_DATA_FILTER_OPTIONS = new InjectionToken<object>('TheSeamDataFilterOptions')\n\nexport function filterOperator<T>(filterFn: DataFilterFunction) {\n return (source$: Observable<T[]>) =>\n 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(filters: DataFilter[]): Observable<DataFilterState[]> {\n if (filters.length === 0) {\n return of([])\n }\n\n return combineLatest(filters.map(f => f.filterStateChanges.pipe(\n startWith(undefined),\n map(() => f.filterState())\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}\n\nexport const THESEAM_DATA_FILTER_DEF = new InjectionToken<IDataFilterDef[]>('TheSeamDataFilter')\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 = new InjectionToken<DataFilterContainer>(\n 'DataFilterContainer'\n)\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport { Component, forwardRef, Inject, Input, OnDestroy, OnInit, Optional, TemplateRef } 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 { DataFilterState, IDataFilter, THESEAM_DATA_FILTER, THESEAM_DATA_FILTER_OPTIONS } 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 // tslint:disable-next-line:no-use-before-declare\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(data: any[], text: string, options = DefaultTextFilterOptions) {\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(key => !(options.omitProperties || []).find(p => p === key))\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})\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 _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null = this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null = this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean = 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) private _filterContainer: DataFilterContainer,\n @Optional() @Inject(THESEAM_DATA_FILTER_OPTIONS) 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() { this._filterContainer.addFilter(this) }\n\n ngOnDestroy() { this._filterContainer.removeFilter(this) }\n\n private _optDefault<K extends keyof ITextFilterOptions>(prop: K) {\n if (this._filterOptions && Object.prototype.hasOwnProperty.call(this._filterOptions, prop)) {\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\n .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.name,\n state: {\n value: this._control.value,\n options: this.options\n }\n }\n }\n\n}\n","<div class=\"position-relative\"\n [class.data-filter-text-has-icon]=\"iconTpl\"\n (click)=\"inp.focus()\">\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Text filter</label>\n <input seamInput #inp=\"seamInput\" seamInputSize=\"sm\" [formControl]=\"_control\" [placeholder]=\"placeholder\">\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 { ChangeDetectionStrategy, Component, forwardRef, Inject, Input, OnDestroy, OnInit, Optional, TemplateRef } 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 { DataFilterState, IDataFilter, THESEAM_DATA_FILTER, THESEAM_DATA_FILTER_OPTIONS } 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 // tslint:disable-next-line:no-use-before-declare\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(data: any[], values: string, options = DefaultSearchFilterOptions) {\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})\nexport class DataFilterSearchComponent implements OnInit, OnDestroy, IDataFilter {\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'search'\n public readonly uid = `search__${_uid++}`\n\n _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null = this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null = this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean = 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) private _filterContainer: DataFilterContainer,\n @Optional() @Inject(THESEAM_DATA_FILTER_OPTIONS) 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() { this._filterContainer.addFilter(this) }\n\n ngOnDestroy() { this._filterContainer.removeFilter(this) }\n\n private _optDefault<K extends keyof ISearchFilterOptions>(prop: K) {\n if (this._filterOptions && Object.prototype.hasOwnProperty.call(this._filterOptions, prop)) {\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\n .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.name,\n state: {\n value: this._control.value,\n options: this.options\n }\n }\n }\n\n}\n","<div class=\"position-relative\"\n [class.data-filter-search-has-icon]=\"iconTpl || icon\"\n (click)=\"inp.focus()\">\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Search filter</label>\n <input seamInput #inp=\"seamInput\" seamInputSize=\"sm\" [formControl]=\"_control\" [placeholder]=\"placeholder\">\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 { Component, forwardRef, Inject, Input, OnDestroy, OnInit, Optional } from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'\n\nimport { hasProperty, isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport { DataFilterState, IDataFilter, THESEAM_DATA_FILTER, THESEAM_DATA_FILTER_OPTIONS } 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: 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}\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}\n\nexport function toggleButtonsFilter(data: any[], values: string[], options = DefaultToggleButtonsFilterOptions) {\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 === '') { continue }\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})\nexport class DataFilterToggleButtonsComponent implements OnInit, OnDestroy, IDataFilter {\n\n public readonly name = 'toggle-buttons'\n public readonly uid = `toggle-buttons__${_uid++}`\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\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? coerceArray(value) : undefined\n // console.log('_value', _value, this._control.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) private _filterContainer: DataFilterContainer,\n @Optional() @Inject(THESEAM_DATA_FILTER_OPTIONS) private _filterOptions: IToggleButtonsFilterOptions | null\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n // tap(v => console.log('v', v)),\n switchMap(() => of(this.filterState())),\n // tap(v => console.log('v2', v)),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n if (this._filterOptions && hasProperty(this._filterOptions, 'initialValue')) {\n this.value = this._optDefault('initialValue')\n }\n }\n\n ngOnDestroy() { this._filterContainer.removeFilter(this) }\n\n private _optDefault<K extends keyof IToggleButtonsFilterOptions>(prop: K) {\n if (this._filterOptions && Object.prototype.hasOwnProperty.call(this._filterOptions, prop)) {\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 }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges\n .pipe(\n map(v => toggleButtonsFilter(data, coerceArray(v), this.options)),\n startWith(toggleButtonsFilter(data, coerceArray(this._control.value), this.options)),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.name,\n state: {\n value: this._control.value,\n options: this.options\n }\n }\n }\n\n}\n","<div class=\"btn-group\" role=\"group\" aria-label=\"Progress Filter\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\">\n <ng-container *ngFor=\"let btn of buttons\">\n <button type=\"button\" 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 {{ 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'\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 { provide: THESEAM_DATA_FILTER_DEF, useValue: { name: 'search', component: DataFilterSearchComponent }, multi: true },\n { provide: THESEAM_DATA_FILTER_DEF, useValue: { name: 'text', component: DataFilterTextComponent }, multi: true },\n { provide: THESEAM_DATA_FILTER_DEF, useValue: { name: 'toggle-buttons', component: DataFilterToggleButtonsComponent }, multi: true },\n]\n\n@NgModule({\n declarations: [\n ...filterComponents\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TheSeamFormFieldModule,\n FontAwesomeModule,\n TheSeamToggleGroupModule,\n TheSeamIconModule\n ],\n providers: [\n ...filterDefProviders\n ],\n exports: [\n ...filterComponents\n ]\n})\nexport class TheSeamDataFiltersModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["_uid","i3"],"mappings":";;;;;;;;;;;;;;;;;;;;;MAwDa,mBAAmB,GAAG,IAAI,cAAc,CAAa,mBAAmB,EAAC;MACzE,2BAA2B,GAAG,IAAI,cAAc,CAAS,0BAA0B,EAAC;AAE3F,SAAU,cAAc,CAAI,QAA4B,EAAA;AAC5D,IAAA,OAAO,CAAC,OAAwB,KAC9B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;AACrC,CAAC;AAEK,SAAU,kBAAkB,CAAC,OAAqB,EAAA;IACtD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1E,OAAO,CAAC,OAAwB,KAAI;QAClC,IAAI,IAAI,GAAG,OAAO,CAAA;AAClB,QAAA,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE;AAC/B,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACpB,SAAA;AACD,QAAA,OAAO,IAAI,CAAA;AACb,KAAC,CAAA;AACH,CAAC;AAEK,SAAU,uBAAuB,CAAC,OAAqB,EAAA;AAC3D,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;AACd,KAAA;AAED,IAAA,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAC7D,SAAS,CAAC,SAAS,CAAC,EACpB,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAC3B,CAAC,CAAC,CAAA;AACL;;MCtEa,uBAAuB,GAAG,IAAI,cAAc,CAAmB,mBAAmB;;MCHlF,6BAA6B,GAAG,IAAI,cAAc,CAC7D,qBAAqB;;ACEV,MAAA,gBAAgB,GAAQ;AACnC,IAAA,OAAO,EAAE,mBAAmB;;AAE5B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,IAAA,KAAK,EAAE,IAAI;EACZ;AAEY,MAAA,wBAAwB,GAAuB;AAC1D,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,aAAa,EAAE,KAAK;EACrB;AAEK,SAAU,cAAc,CAAC,IAAW,EAAE,IAAY,EAAE,OAAO,GAAG,wBAAwB,EAAA;AAC1F,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;AAClB,QAAA,OAAO,IAAI,CAAA;AACZ,KAAA;AAED,IAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AACpB,QAAA,OAAO,IAAI,CAAA;AACZ,KAAA;AAED,IAAA,IAAI,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAA;IACpD,IAAI,CAAC,KAAK,EAAE;QACV,KAAK,GAAG,EAAE,CAAA;QACV,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/B,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE;AACrC,YAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;AAChF,SAAA;AACD,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AACtD,gBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAChB,aAAA;AACF,SAAA;AACF,KAAA;IAED,MAAM,QAAQ,GAAU,EAAE,CAAA;AAE1B,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,IAAI,MAAM,GAAG,CAAG,EAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;YACzB,IAAI,MAAM,GAAG,IAAI,CAAA;AAEjB,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AAC1B,gBAAA,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;AAC7B,gBAAA,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;AAC9B,aAAA;YAED,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AAClE,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACnB,MAAK;AACN,aAAA;AACF,SAAA;AACF,KAAA;AAED,IAAA,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,IAAIA,MAAI,GAAG,CAAC,CAAA;MAQC,uBAAuB,CAAA;IAiBlC,IACI,KAAK,CAAC,KAAwB,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAA,CAAE,GAAG,EAAE,CAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/B,SAAA;KACF;IAID,WACiD,CAAA,gBAAqC,EAC3B,cAAyC,EAAA;AADnD,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAqB;AAC3B,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAA2B;AAzBpF,QAAA,IAAI,CAAA,IAAA,GAAG,MAAM,CAAA;AACb,QAAA,IAAA,CAAA,GAAG,GAAG,SAASA,MAAI,EAAE,EAAE,CAAA;AAEvC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;QAE1B,IAAA,CAAA,UAAU,GAAgC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QACxE,IAAA,CAAA,cAAc,GAAgC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;QAChE,IAAA,CAAA,KAAK,GAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC1C,IAAA,CAAA,aAAa,GAAY,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;AAmBjF,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CACvD,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EACvC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAA;KACF;IAED,QAAQ,GAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,EAAE;IAEpD,WAAW,GAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA,EAAE;AAElD,IAAA,WAAW,CAAqC,IAAO,EAAA;AAC7D,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE;AAC1F,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;AACjC,SAAA;AACD,QAAA,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAA;KACtC;AAED,IAAA,IAAI,OAAO,GAAA;;QACT,OAAO;AACL,YAAA,UAAU,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,mCAAI,SAAS;AACxC,YAAA,cAAc,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,mCAAI,SAAS;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAA;KACF;AAEM,IAAA,MAAM,CAAI,IAAS,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY;AAC9B,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAC/C,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACnE,CAAA;KACJ;IAEM,WAAW,GAAA;QAChB,OAAO;;YAEL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA;SACF,CAAA;KACF;;oHA1EU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA4BxB,6BAA6B,EAAA,EAAA,EAAA,KAAA,EACjB,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA7BtC,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAFvB,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,CAAE,gBAAgB,CAAE,0BC/EjC,6aASA,EAAA,MAAA,EAAA,CAAA,wPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,wLAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;ADmF2B,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAA2C,EAAA,uBAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC1C,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAA2D,EAAA,uBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;2FAZxE,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;+BACE,uBAAuB,EAAA,SAAA,EAGtB,CAAE,gBAAgB,CAAE,EAAA,QAAA,EAAA,6aAAA,EAAA,MAAA,EAAA,CAAA,wPAAA,CAAA,EAAA,CAAA;;;8BA8B5B,MAAM;+BAAC,6BAA6B,CAAA;;8BACpC,QAAQ;;8BAAI,MAAM;+BAAC,2BAA2B,CAAA;;yBApBxC,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACmB,KAAK,EAAA,CAAA;sBAA7B,KAAK;gBACmB,aAAa,EAAA,CAAA;sBAArC,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAGF,KAAK,EAAA,CAAA;sBADR,KAAK;;;AE/EK,MAAA,kBAAkB,GAAQ;AACrC,IAAA,OAAO,EAAE,mBAAmB;;AAE5B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,IAAA,KAAK,EAAE,IAAI;EACZ;AAEY,MAAA,0BAA0B,GAAyB;AAC9D,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,aAAa,EAAE,KAAK;EACrB;AAEK,SAAU,gBAAgB,CAAC,IAAW,EAAE,MAAc,EAAE,OAAO,GAAG,0BAA0B,EAAA;IAChG,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AAC9C,CAAC;AAED,IAAIA,MAAI,GAAG,CAAC,CAAA;MASC,yBAAyB,CAAA;IAkBpC,IACI,KAAK,CAAC,KAAwB,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAA,CAAE,GAAG,EAAE,CAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/B,SAAA;KACF;IAID,WACiD,CAAA,gBAAqC,EAC3B,cAA2C,EAAA;AADrD,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAqB;AAC3B,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAA6B;AA1BtF,QAAA,IAAI,CAAA,IAAA,GAAG,QAAQ,CAAA;AACf,QAAA,IAAA,CAAA,GAAG,GAAG,WAAWA,MAAI,EAAE,EAAE,CAAA;AAEzC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;QAE1B,IAAA,CAAA,UAAU,GAAgC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QACxE,IAAA,CAAA,cAAc,GAAgC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;QAChE,IAAA,CAAA,KAAK,GAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC1C,IAAA,CAAA,aAAa,GAAY,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;AAE1E,QAAA,IAAW,CAAA,WAAA,GAA8B,WAAW,CAAA;AACpD,QAAA,IAAI,CAAA,IAAA,GAAgC,QAAQ,CAAA;AAiBnD,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CACvD,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EACvC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAA;KACF;IAED,QAAQ,GAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,EAAE;IAEpD,WAAW,GAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA,EAAE;AAElD,IAAA,WAAW,CAAuC,IAAO,EAAA;AAC/D,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE;AAC1F,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;AACjC,SAAA;AACD,QAAA,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAA;KACxC;AAED,IAAA,IAAI,OAAO,GAAA;;QACT,OAAO;AACL,YAAA,UAAU,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,mCAAI,SAAS;AACxC,YAAA,cAAc,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,mCAAI,SAAS;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAA;KACF;AAEM,IAAA,MAAM,CAAI,IAAS,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY;AAC9B,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EACjD,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACrE,CAAA;KACJ;IAEM,WAAW,GAAA;QAChB,OAAO;;YAEL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA;SACF,CAAA;KACF;;sHA3EU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA6B1B,6BAA6B,EAAA,EAAA,EAAA,KAAA,EACjB,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA9BtC,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAHzB,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,CAAE,kBAAkB,CAAE,0BC3CnC,uwBAkBA,EAAA,MAAA,EAAA,CAAA,8VAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,wLAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;ADuC2B,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAA2C,EAAA,yBAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC1C,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAA2D,EAAA,yBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;2FAZxE,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,aAGxB,CAAE,kBAAkB,CAAE,EAChB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,uwBAAA,EAAA,MAAA,EAAA,CAAA,8VAAA,CAAA,EAAA,CAAA;;;8BA+B5C,MAAM;+BAAC,6BAA6B,CAAA;;8BACpC,QAAQ;;8BAAI,MAAM;+BAAC,2BAA2B,CAAA;;yBArBxC,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACmB,KAAK,EAAA,CAAA;sBAA7B,KAAK;gBACmB,aAAa,EAAA,CAAA;sBAArC,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAGF,KAAK,EAAA,CAAA;sBADR,KAAK;;;AElDK,MAAA,yBAAyB,GAAQ;AAC5C,IAAA,OAAO,EAAE,mBAAmB;AAC5B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,gCAAgC,CAAC;AAC/D,IAAA,KAAK,EAAE,IAAI;EACZ;AAeY,MAAA,iCAAiC,GAAgC;AAC5E,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,mBAAmB,EAAE,KAAK;AAC1B,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,aAAa,EAAE,KAAK;EACrB;AAEK,SAAU,mBAAmB,CAAC,IAAW,EAAE,MAAgB,EAAE,OAAO,GAAG,iCAAiC,EAAA;AAC5G,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AACpB,QAAA,OAAO,IAAI,CAAA;AACZ,KAAA;IAED,MAAM,oBAAoB,GAAoB,EAAE,CAAA;AAChD,IAAA,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE;QACjC,IAAI,GAAG,CAAC,UAAU,EAAE;AAClB,YAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC/B,SAAA;AACF,KAAA;IAED,IAAI,KAAK,GAAG,IAAI,CAAA;AAChB,IAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;QACxB,IAAI,GAAG,KAAK,EAAE,EAAE;YAAE,SAAQ;AAAE,SAAA;AAE5B,QAAA,IAAI,GAAG,CAAA;AACP,QAAA,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE;AACtC,YAAA,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG,EAAE;AACrB,gBAAA,GAAG,GAAG,GAAG,CAAC,UAAU,CAAA;AACrB,aAAA;AACF,SAAA;AACD,QAAA,IAAI,GAAG,EAAE;YACP,MAAM,QAAQ,GAAU,EAAE,CAAA;AAC1B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,IAAI,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;oBAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACxB,iBAAA;AACF,aAAA;YACD,KAAK,GAAG,QAAQ,CAAA;AACjB,SAAA;AAAM,aAAA;AACL,YAAA,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,aAAa,EAAE,OAAO,CAAC,aAAa;AACrC,aAAA,CAAC,CAAA;AACH,SAAA;AACF,KAAA;AACD,IAAA,OAAO,KAAK,CAAA;AACd,CAAC;AAED,IAAI,IAAI,GAAG,CAAC,CAAA;MAQC,gCAAgC,CAAA;IAe3C,IACI,KAAK,CAAC,KAAwB,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;;AAEzE,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/B,SAAA;KACF;IAID,WACiD,CAAA,gBAAqC,EAC3B,cAAkD,EAAA;AAD5D,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAqB;AAC3B,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAAoC;AA1B7F,QAAA,IAAI,CAAA,IAAA,GAAG,gBAAgB,CAAA;AACvB,QAAA,IAAA,CAAA,GAAG,GAAG,mBAAmB,IAAI,EAAE,EAAE,CAAA;AAEjD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;QAE1B,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QAC3C,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;QACnD,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;QACvC,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAA;QAC7D,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;QACrC,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACjC,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;QAiBxD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI;;QAEvD,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;;AAEvC,QAAA,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AACrC,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE;YAC3E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;AAC9C,SAAA;KACF;IAED,WAAW,GAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA,EAAE;AAElD,IAAA,WAAW,CAA8C,IAAO,EAAA;AACtE,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE;AAC1F,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;AACjC,SAAA;AACD,QAAA,OAAO,iCAAiC,CAAC,IAAI,CAAC,CAAA;KAC/C;AAED,IAAA,IAAI,OAAO,GAAA;QACT,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAA;KACF;AAEM,IAAA,MAAM,CAAI,IAAS,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY;AAC9B,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EACjE,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACrF,CAAA;KACJ;IAEM,WAAW,GAAA;QAChB,OAAO;;YAEL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA;SACF,CAAA;KACF;;6HAnFU,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA2BjC,6BAA6B,EAAA,EAAA,EAAA,KAAA,EACjB,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA5BtC,gCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAFhC,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,CAAE,yBAAyB,CAAE,0BC3F1C,goBAiBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD4Ea,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAN5C,SAAS;+BACE,iCAAiC,EAAA,SAAA,EAGhC,CAAE,yBAAyB,CAAE,EAAA,QAAA,EAAA,goBAAA,EAAA,CAAA;;;8BA6BrC,MAAM;+BAAC,6BAA6B,CAAA;;8BACpC,QAAQ;;8BAAI,MAAM;+BAAC,2BAA2B,CAAA;;yBArBxC,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGF,KAAK,EAAA,CAAA;sBADR,KAAK;;;AE7FR,MAAM,gBAAgB,GAAG;IACvB,yBAAyB;IACzB,uBAAuB;IACvB,gCAAgC;CACjC,CAAA;AAED,MAAM,kBAAkB,GAAG;AACzB,IAAA,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AACrH,IAAA,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,uBAAuB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AACjH,IAAA,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,gCAAgC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;CACrI,CAAA;MAqBY,wBAAwB,CAAA;;qHAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,iBA9BnC,yBAAyB;QACzB,uBAAuB;AACvB,QAAA,gCAAgC,aAc1B,YAAY;QACZ,mBAAmB;QACnB,sBAAsB;QACtB,iBAAiB;QACjB,wBAAwB;AACxB,QAAA,iBAAiB,aArBvB,yBAAyB;QACzB,uBAAuB;QACvB,gCAAgC,CAAA,EAAA,CAAA,CAAA;AA4BrB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAPtB,SAAA,EAAA;AACP,QAAA,GAAG,kBAAkB;KACxB,EAAA,OAAA,EAAA,CATG,YAAY;QACZ,mBAAmB;QACnB,sBAAsB;QACtB,iBAAiB;QACjB,wBAAwB;QACxB,iBAAiB,CAAA,EAAA,CAAA,CAAA;2FASZ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAnBpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE;AACV,wBAAA,GAAG,gBAAgB;AACtB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,mBAAmB;wBACnB,sBAAsB;wBACtB,iBAAiB;wBACjB,wBAAwB;wBACxB,iBAAiB;AACpB,qBAAA;AACD,oBAAA,SAAS,EAAE;AACP,wBAAA,GAAG,kBAAkB;AACxB,qBAAA;AACD,oBAAA,OAAO,EAAE;AACL,wBAAA,GAAG,gBAAgB;AACtB,qBAAA;iBACJ,CAAA;;;AC7CD;;AAEG;;;;"}
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 * 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>('TheSeamDataFilter')\nexport const THESEAM_DATA_FILTER_OPTIONS = new InjectionToken<object>('TheSeamDataFilterOptions')\n\nexport function filterOperator<T>(filterFn: DataFilterFunction) {\n return (source$: Observable<T[]>) =>\n 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(filters: DataFilter[]): Observable<DataFilterState[]> {\n if (filters.length === 0) {\n return of([])\n }\n\n return combineLatest(filters.map(f => f.filterStateChanges.pipe(\n startWith(undefined),\n map(() => f.filterState())\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}\n\nexport const THESEAM_DATA_FILTER_DEF = new InjectionToken<IDataFilterDef[]>('TheSeamDataFilter')\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 = new InjectionToken<DataFilterContainer>(\n 'DataFilterContainer'\n)\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport { Component, forwardRef, Inject, Input, OnDestroy, OnInit, Optional, TemplateRef } 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 { DataFilterState, IDataFilter, THESEAM_DATA_FILTER, THESEAM_DATA_FILTER_OPTIONS } 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 // tslint:disable-next-line:no-use-before-declare\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(data: any[], text: string, options = DefaultTextFilterOptions) {\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(key => !(options.omitProperties || []).find(p => p === key))\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})\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 _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null = this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null = this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean = 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) private _filterContainer: DataFilterContainer,\n @Optional() @Inject(THESEAM_DATA_FILTER_OPTIONS) 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() { this._filterContainer.addFilter(this) }\n\n ngOnDestroy() { this._filterContainer.removeFilter(this) }\n\n private _optDefault<K extends keyof ITextFilterOptions>(prop: K) {\n if (this._filterOptions && Object.prototype.hasOwnProperty.call(this._filterOptions, prop)) {\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\n .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.name,\n state: {\n value: this._control.value,\n options: this.options\n }\n }\n }\n\n}\n","<div class=\"position-relative\"\n [class.data-filter-text-has-icon]=\"iconTpl\"\n (click)=\"inp.focus()\">\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Text filter</label>\n <input seamInput #inp=\"seamInput\" seamInputSize=\"sm\" [formControl]=\"_control\" [placeholder]=\"placeholder\">\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 { ChangeDetectionStrategy, Component, forwardRef, Inject, Input, OnDestroy, OnInit, Optional, TemplateRef } 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 { DataFilterState, IDataFilter, THESEAM_DATA_FILTER, THESEAM_DATA_FILTER_OPTIONS } 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 // tslint:disable-next-line:no-use-before-declare\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(data: any[], values: string, options = DefaultSearchFilterOptions) {\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})\nexport class DataFilterSearchComponent implements OnInit, OnDestroy, IDataFilter {\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'search'\n public readonly uid = `search__${_uid++}`\n\n _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null = this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null = this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean = 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) private _filterContainer: DataFilterContainer,\n @Optional() @Inject(THESEAM_DATA_FILTER_OPTIONS) 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() { this._filterContainer.addFilter(this) }\n\n ngOnDestroy() { this._filterContainer.removeFilter(this) }\n\n private _optDefault<K extends keyof ISearchFilterOptions>(prop: K) {\n if (this._filterOptions && Object.prototype.hasOwnProperty.call(this._filterOptions, prop)) {\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\n .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.name,\n state: {\n value: this._control.value,\n options: this.options\n }\n }\n }\n\n}\n","<div class=\"position-relative\"\n [class.data-filter-search-has-icon]=\"iconTpl || icon\"\n (click)=\"inp.focus()\">\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Search filter</label>\n <input seamInput #inp=\"seamInput\" seamInputSize=\"sm\" [formControl]=\"_control\" [placeholder]=\"placeholder\">\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 { Component, forwardRef, Inject, Input, OnDestroy, OnInit, Optional } from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'\n\nimport { hasProperty, isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport { DataFilterState, IDataFilter, THESEAM_DATA_FILTER, THESEAM_DATA_FILTER_OPTIONS } 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: 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}\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}\n\nexport function toggleButtonsFilter(data: any[], values: string[], options = DefaultToggleButtonsFilterOptions) {\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 === '') { continue }\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})\nexport class DataFilterToggleButtonsComponent implements OnInit, OnDestroy, IDataFilter {\n\n public readonly name = 'toggle-buttons'\n public readonly uid = `toggle-buttons__${_uid++}`\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\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? coerceArray(value) : undefined\n // console.log('_value', _value, this._control.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) private _filterContainer: DataFilterContainer,\n @Optional() @Inject(THESEAM_DATA_FILTER_OPTIONS) private _filterOptions: IToggleButtonsFilterOptions | null\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n // tap(v => console.log('v', v)),\n switchMap(() => of(this.filterState())),\n // tap(v => console.log('v2', v)),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n if (this._filterOptions && hasProperty(this._filterOptions, 'initialValue')) {\n this.value = this._optDefault('initialValue')\n }\n }\n\n ngOnDestroy() { this._filterContainer.removeFilter(this) }\n\n private _optDefault<K extends keyof IToggleButtonsFilterOptions>(prop: K) {\n if (this._filterOptions && Object.prototype.hasOwnProperty.call(this._filterOptions, prop)) {\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 }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges\n .pipe(\n map(v => toggleButtonsFilter(data, coerceArray(v), this.options)),\n startWith(toggleButtonsFilter(data, coerceArray(this._control.value), this.options)),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.name,\n state: {\n value: this._control.value,\n options: this.options\n }\n }\n }\n\n}\n","<div class=\"btn-group\" role=\"group\" aria-label=\"Progress Filter\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\">\n <ng-container *ngFor=\"let btn of buttons\">\n <button type=\"button\" 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 {{ 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'\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 { provide: THESEAM_DATA_FILTER_DEF, useValue: { name: 'search', component: DataFilterSearchComponent }, multi: true },\n { provide: THESEAM_DATA_FILTER_DEF, useValue: { name: 'text', component: DataFilterTextComponent }, multi: true },\n { provide: THESEAM_DATA_FILTER_DEF, useValue: { name: 'toggle-buttons', component: DataFilterToggleButtonsComponent }, multi: true },\n]\n\n@NgModule({\n declarations: [\n ...filterComponents\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TheSeamFormFieldModule,\n FontAwesomeModule,\n TheSeamToggleGroupModule,\n TheSeamIconModule\n ],\n providers: [\n ...filterDefProviders\n ],\n exports: [\n ...filterComponents\n ]\n})\nexport class TheSeamDataFiltersModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["_uid","i3"],"mappings":";;;;;;;;;;;;;;;;;;;;;MAwDa,mBAAmB,GAAG,IAAI,cAAc,CAAa,mBAAmB,EAAC;MACzE,2BAA2B,GAAG,IAAI,cAAc,CAAS,0BAA0B,EAAC;AAE3F,SAAU,cAAc,CAAI,QAA4B,EAAA;AAC5D,IAAA,OAAO,CAAC,OAAwB,KAC9B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;AACrC,CAAC;AAEK,SAAU,kBAAkB,CAAC,OAAqB,EAAA;IACtD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1E,OAAO,CAAC,OAAwB,KAAI;QAClC,IAAI,IAAI,GAAG,OAAO,CAAA;AAClB,QAAA,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE;AAC/B,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACpB,SAAA;AACD,QAAA,OAAO,IAAI,CAAA;AACb,KAAC,CAAA;AACH,CAAC;AAEK,SAAU,uBAAuB,CAAC,OAAqB,EAAA;AAC3D,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;AACd,KAAA;AAED,IAAA,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAC7D,SAAS,CAAC,SAAS,CAAC,EACpB,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAC3B,CAAC,CAAC,CAAA;AACL;;MCtEa,uBAAuB,GAAG,IAAI,cAAc,CAAmB,mBAAmB;;MCHlF,6BAA6B,GAAG,IAAI,cAAc,CAC7D,qBAAqB;;ACEV,MAAA,gBAAgB,GAAQ;AACnC,IAAA,OAAO,EAAE,mBAAmB;;AAE5B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,IAAA,KAAK,EAAE,IAAI;EACZ;AAEY,MAAA,wBAAwB,GAAuB;AAC1D,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,aAAa,EAAE,KAAK;EACrB;AAEK,SAAU,cAAc,CAAC,IAAW,EAAE,IAAY,EAAE,OAAO,GAAG,wBAAwB,EAAA;AAC1F,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;AAClB,QAAA,OAAO,IAAI,CAAA;AACZ,KAAA;AAED,IAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AACpB,QAAA,OAAO,IAAI,CAAA;AACZ,KAAA;AAED,IAAA,IAAI,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAA;IACpD,IAAI,CAAC,KAAK,EAAE;QACV,KAAK,GAAG,EAAE,CAAA;QACV,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/B,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE;AACrC,YAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;AAChF,SAAA;AACD,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AACtD,gBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAChB,aAAA;AACF,SAAA;AACF,KAAA;IAED,MAAM,QAAQ,GAAU,EAAE,CAAA;AAE1B,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,IAAI,MAAM,GAAG,CAAG,EAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;YACzB,IAAI,MAAM,GAAG,IAAI,CAAA;AAEjB,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AAC1B,gBAAA,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;AAC7B,gBAAA,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;AAC9B,aAAA;YAED,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AAClE,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACnB,MAAK;AACN,aAAA;AACF,SAAA;AACF,KAAA;AAED,IAAA,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,IAAIA,MAAI,GAAG,CAAC,CAAA;MAQC,uBAAuB,CAAA;IAiBlC,IACI,KAAK,CAAC,KAAwB,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAA,CAAE,GAAG,EAAE,CAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/B,SAAA;KACF;IAID,WACiD,CAAA,gBAAqC,EAC3B,cAAyC,EAAA;AADnD,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAqB;AAC3B,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAA2B;AAzBpF,QAAA,IAAI,CAAA,IAAA,GAAG,MAAM,CAAA;AACb,QAAA,IAAA,CAAA,GAAG,GAAG,SAASA,MAAI,EAAE,EAAE,CAAA;AAEvC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;QAE1B,IAAA,CAAA,UAAU,GAAgC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QACxE,IAAA,CAAA,cAAc,GAAgC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;QAChE,IAAA,CAAA,KAAK,GAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC1C,IAAA,CAAA,aAAa,GAAY,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;AAmBjF,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CACvD,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EACvC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAA;KACF;IAED,QAAQ,GAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,EAAE;IAEpD,WAAW,GAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA,EAAE;AAElD,IAAA,WAAW,CAAqC,IAAO,EAAA;AAC7D,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE;AAC1F,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;AACjC,SAAA;AACD,QAAA,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAA;KACtC;AAED,IAAA,IAAI,OAAO,GAAA;;QACT,OAAO;AACL,YAAA,UAAU,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,mCAAI,SAAS;AACxC,YAAA,cAAc,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,mCAAI,SAAS;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAA;KACF;AAEM,IAAA,MAAM,CAAI,IAAS,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY;AAC9B,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAC/C,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACnE,CAAA;KACJ;IAEM,WAAW,GAAA;QAChB,OAAO;;YAEL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA;SACF,CAAA;KACF;;oHA1EU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA4BxB,6BAA6B,EAAA,EAAA,EAAA,KAAA,EACjB,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA7BtC,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAFvB,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,CAAE,gBAAgB,CAAE,0BC/EjC,6aASA,EAAA,MAAA,EAAA,CAAA,wPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,mNAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;ADmF2B,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAA2C,EAAA,uBAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC1C,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAA2D,EAAA,uBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;2FAZxE,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;+BACE,uBAAuB,EAAA,SAAA,EAGtB,CAAE,gBAAgB,CAAE,EAAA,QAAA,EAAA,6aAAA,EAAA,MAAA,EAAA,CAAA,wPAAA,CAAA,EAAA,CAAA;;;8BA8B5B,MAAM;+BAAC,6BAA6B,CAAA;;8BACpC,QAAQ;;8BAAI,MAAM;+BAAC,2BAA2B,CAAA;;yBApBxC,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACmB,KAAK,EAAA,CAAA;sBAA7B,KAAK;gBACmB,aAAa,EAAA,CAAA;sBAArC,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAGF,KAAK,EAAA,CAAA;sBADR,KAAK;;;AE/EK,MAAA,kBAAkB,GAAQ;AACrC,IAAA,OAAO,EAAE,mBAAmB;;AAE5B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,IAAA,KAAK,EAAE,IAAI;EACZ;AAEY,MAAA,0BAA0B,GAAyB;AAC9D,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,aAAa,EAAE,KAAK;EACrB;AAEK,SAAU,gBAAgB,CAAC,IAAW,EAAE,MAAc,EAAE,OAAO,GAAG,0BAA0B,EAAA;IAChG,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AAC9C,CAAC;AAED,IAAIA,MAAI,GAAG,CAAC,CAAA;MASC,yBAAyB,CAAA;IAkBpC,IACI,KAAK,CAAC,KAAwB,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAA,CAAE,GAAG,EAAE,CAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/B,SAAA;KACF;IAID,WACiD,CAAA,gBAAqC,EAC3B,cAA2C,EAAA;AADrD,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAqB;AAC3B,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAA6B;AA1BtF,QAAA,IAAI,CAAA,IAAA,GAAG,QAAQ,CAAA;AACf,QAAA,IAAA,CAAA,GAAG,GAAG,WAAWA,MAAI,EAAE,EAAE,CAAA;AAEzC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;QAE1B,IAAA,CAAA,UAAU,GAAgC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QACxE,IAAA,CAAA,cAAc,GAAgC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;QAChE,IAAA,CAAA,KAAK,GAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC1C,IAAA,CAAA,aAAa,GAAY,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;AAE1E,QAAA,IAAW,CAAA,WAAA,GAA8B,WAAW,CAAA;AACpD,QAAA,IAAI,CAAA,IAAA,GAAgC,QAAQ,CAAA;AAiBnD,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CACvD,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EACvC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAA;KACF;IAED,QAAQ,GAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,EAAE;IAEpD,WAAW,GAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA,EAAE;AAElD,IAAA,WAAW,CAAuC,IAAO,EAAA;AAC/D,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE;AAC1F,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;AACjC,SAAA;AACD,QAAA,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAA;KACxC;AAED,IAAA,IAAI,OAAO,GAAA;;QACT,OAAO;AACL,YAAA,UAAU,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,mCAAI,SAAS;AACxC,YAAA,cAAc,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,mCAAI,SAAS;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAA;KACF;AAEM,IAAA,MAAM,CAAI,IAAS,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY;AAC9B,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EACjD,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACrE,CAAA;KACJ;IAEM,WAAW,GAAA;QAChB,OAAO;;YAEL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA;SACF,CAAA;KACF;;sHA3EU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA6B1B,6BAA6B,EAAA,EAAA,EAAA,KAAA,EACjB,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA9BtC,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAHzB,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,CAAE,kBAAkB,CAAE,0BC3CnC,uwBAkBA,EAAA,MAAA,EAAA,CAAA,8VAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,mNAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;ADuC2B,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAA2C,EAAA,yBAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC1C,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAA2D,EAAA,yBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;2FAZxE,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,aAGxB,CAAE,kBAAkB,CAAE,EAChB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,uwBAAA,EAAA,MAAA,EAAA,CAAA,8VAAA,CAAA,EAAA,CAAA;;;8BA+B5C,MAAM;+BAAC,6BAA6B,CAAA;;8BACpC,QAAQ;;8BAAI,MAAM;+BAAC,2BAA2B,CAAA;;yBArBxC,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACmB,KAAK,EAAA,CAAA;sBAA7B,KAAK;gBACmB,aAAa,EAAA,CAAA;sBAArC,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAGF,KAAK,EAAA,CAAA;sBADR,KAAK;;;AElDK,MAAA,yBAAyB,GAAQ;AAC5C,IAAA,OAAO,EAAE,mBAAmB;AAC5B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,gCAAgC,CAAC;AAC/D,IAAA,KAAK,EAAE,IAAI;EACZ;AAeY,MAAA,iCAAiC,GAAgC;AAC5E,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,mBAAmB,EAAE,KAAK;AAC1B,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,aAAa,EAAE,KAAK;EACrB;AAEK,SAAU,mBAAmB,CAAC,IAAW,EAAE,MAAgB,EAAE,OAAO,GAAG,iCAAiC,EAAA;AAC5G,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AACpB,QAAA,OAAO,IAAI,CAAA;AACZ,KAAA;IAED,MAAM,oBAAoB,GAAoB,EAAE,CAAA;AAChD,IAAA,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE;QACjC,IAAI,GAAG,CAAC,UAAU,EAAE;AAClB,YAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC/B,SAAA;AACF,KAAA;IAED,IAAI,KAAK,GAAG,IAAI,CAAA;AAChB,IAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;QACxB,IAAI,GAAG,KAAK,EAAE,EAAE;YAAE,SAAQ;AAAE,SAAA;AAE5B,QAAA,IAAI,GAAG,CAAA;AACP,QAAA,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE;AACtC,YAAA,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG,EAAE;AACrB,gBAAA,GAAG,GAAG,GAAG,CAAC,UAAU,CAAA;AACrB,aAAA;AACF,SAAA;AACD,QAAA,IAAI,GAAG,EAAE;YACP,MAAM,QAAQ,GAAU,EAAE,CAAA;AAC1B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,IAAI,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;oBAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACxB,iBAAA;AACF,aAAA;YACD,KAAK,GAAG,QAAQ,CAAA;AACjB,SAAA;AAAM,aAAA;AACL,YAAA,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,aAAa,EAAE,OAAO,CAAC,aAAa;AACrC,aAAA,CAAC,CAAA;AACH,SAAA;AACF,KAAA;AACD,IAAA,OAAO,KAAK,CAAA;AACd,CAAC;AAED,IAAI,IAAI,GAAG,CAAC,CAAA;MAQC,gCAAgC,CAAA;IAe3C,IACI,KAAK,CAAC,KAAwB,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;;AAEzE,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/B,SAAA;KACF;IAID,WACiD,CAAA,gBAAqC,EAC3B,cAAkD,EAAA;AAD5D,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAqB;AAC3B,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAAoC;AA1B7F,QAAA,IAAI,CAAA,IAAA,GAAG,gBAAgB,CAAA;AACvB,QAAA,IAAA,CAAA,GAAG,GAAG,mBAAmB,IAAI,EAAE,EAAE,CAAA;AAEjD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;QAE1B,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QAC3C,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;QACnD,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;QACvC,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAA;QAC7D,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;QACrC,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACjC,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;QAiBxD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI;;QAEvD,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;;AAEvC,QAAA,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AACrC,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE;YAC3E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;AAC9C,SAAA;KACF;IAED,WAAW,GAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA,EAAE;AAElD,IAAA,WAAW,CAA8C,IAAO,EAAA;AACtE,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE;AAC1F,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;AACjC,SAAA;AACD,QAAA,OAAO,iCAAiC,CAAC,IAAI,CAAC,CAAA;KAC/C;AAED,IAAA,IAAI,OAAO,GAAA;QACT,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAA;KACF;AAEM,IAAA,MAAM,CAAI,IAAS,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY;AAC9B,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EACjE,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACrF,CAAA;KACJ;IAEM,WAAW,GAAA;QAChB,OAAO;;YAEL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA;SACF,CAAA;KACF;;6HAnFU,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA2BjC,6BAA6B,EAAA,EAAA,EAAA,KAAA,EACjB,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA5BtC,gCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAFhC,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,CAAE,yBAAyB,CAAE,0BC3F1C,goBAiBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD4Ea,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAN5C,SAAS;+BACE,iCAAiC,EAAA,SAAA,EAGhC,CAAE,yBAAyB,CAAE,EAAA,QAAA,EAAA,goBAAA,EAAA,CAAA;;;8BA6BrC,MAAM;+BAAC,6BAA6B,CAAA;;8BACpC,QAAQ;;8BAAI,MAAM;+BAAC,2BAA2B,CAAA;;yBArBxC,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGF,KAAK,EAAA,CAAA;sBADR,KAAK;;;AE7FR,MAAM,gBAAgB,GAAG;IACvB,yBAAyB;IACzB,uBAAuB;IACvB,gCAAgC;CACjC,CAAA;AAED,MAAM,kBAAkB,GAAG;AACzB,IAAA,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AACrH,IAAA,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,uBAAuB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AACjH,IAAA,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,gCAAgC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;CACrI,CAAA;MAqBY,wBAAwB,CAAA;;qHAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,iBA9BnC,yBAAyB;QACzB,uBAAuB;AACvB,QAAA,gCAAgC,aAc1B,YAAY;QACZ,mBAAmB;QACnB,sBAAsB;QACtB,iBAAiB;QACjB,wBAAwB;AACxB,QAAA,iBAAiB,aArBvB,yBAAyB;QACzB,uBAAuB;QACvB,gCAAgC,CAAA,EAAA,CAAA,CAAA;AA4BrB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAPtB,SAAA,EAAA;AACP,QAAA,GAAG,kBAAkB;KACxB,EAAA,OAAA,EAAA,CATG,YAAY;QACZ,mBAAmB;QACnB,sBAAsB;QACtB,iBAAiB;QACjB,wBAAwB;QACxB,iBAAiB,CAAA,EAAA,CAAA,CAAA;2FASZ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAnBpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE;AACV,wBAAA,GAAG,gBAAgB;AACtB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,mBAAmB;wBACnB,sBAAsB;wBACtB,iBAAiB;wBACjB,wBAAwB;wBACxB,iBAAiB;AACpB,qBAAA;AACD,oBAAA,SAAS,EAAE;AACP,wBAAA,GAAG,kBAAkB;AACxB,qBAAA;AACD,oBAAA,OAAO,EAAE;AACL,wBAAA,GAAG,gBAAgB;AACtB,qBAAA;iBACJ,CAAA;;;AC7CD;;AAEG;;;;"}
@@ -186,13 +186,13 @@ class DatatableActionMenuComponent {
186
186
  }
187
187
  }
188
188
  DatatableActionMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableActionMenuComponent, deps: [{ token: i1.SeamConfirmDialogService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
189
- DatatableActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableActionMenuComponent, selector: "seam-datatable-action-menu", inputs: { isSubMenu: "isSubMenu" }, queries: [{ propertyName: "items", predicate: DatatableActionMenuItemComponent }], viewQueries: [{ propertyName: "menu", first: true, predicate: MenuComponent, descendants: true, static: true }], exportAs: ["seamDatatableActionMenu"], ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <ng-container *ngIf=\"!!item.subMenu; else noSubMenu\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [seamMenuToggle]=\"item.subMenu.menu\"\n [seamMenuTogglePositionsOffsetY]=\"-3\">\n {{ item.label }}\n </button>\n </ng-container>\n <ng-template #noSubMenu>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<ng-container *ngIf=\"!isSubMenu\">\n <button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n </button>\n</ng-container>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { 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: ["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.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }] });
189
+ DatatableActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableActionMenuComponent, selector: "seam-datatable-action-menu", inputs: { isSubMenu: "isSubMenu" }, queries: [{ propertyName: "items", predicate: DatatableActionMenuItemComponent }], viewQueries: [{ propertyName: "menu", first: true, predicate: MenuComponent, descendants: true, static: true }], exportAs: ["seamDatatableActionMenu"], ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <ng-container *ngIf=\"!!item.subMenu; else noSubMenu\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [seamMenuToggle]=\"item.subMenu.menu\"\n [seamMenuTogglePositionsOffsetY]=\"-3\">\n {{ item.label }}\n </button>\n </ng-container>\n <ng-template #noSubMenu>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<ng-container *ngIf=\"!isSubMenu && items?.length\">\n <button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n </button>\n</ng-container>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { 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: ["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.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }] });
190
190
  __decorate([
191
191
  InputBoolean()
192
192
  ], DatatableActionMenuComponent.prototype, "isSubMenu", void 0);
193
193
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableActionMenuComponent, decorators: [{
194
194
  type: Component,
195
- args: [{ selector: 'seam-datatable-action-menu', exportAs: 'seamDatatableActionMenu', template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <ng-container *ngIf=\"!!item.subMenu; else noSubMenu\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [seamMenuToggle]=\"item.subMenu.menu\"\n [seamMenuTogglePositionsOffsetY]=\"-3\">\n {{ item.label }}\n </button>\n </ng-container>\n <ng-template #noSubMenu>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<ng-container *ngIf=\"!isSubMenu\">\n <button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n </button>\n</ng-container>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"] }]
195
+ args: [{ selector: 'seam-datatable-action-menu', exportAs: 'seamDatatableActionMenu', template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <ng-container *ngIf=\"!!item.subMenu; else noSubMenu\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [seamMenuToggle]=\"item.subMenu.menu\"\n [seamMenuTogglePositionsOffsetY]=\"-3\">\n {{ item.label }}\n </button>\n </ng-container>\n <ng-template #noSubMenu>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<ng-container *ngIf=\"!isSubMenu && items?.length\">\n <button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n </button>\n</ng-container>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"] }]
196
196
  }], ctorParameters: function () { return [{ type: i1.SeamConfirmDialogService }, { type: i2.Router }]; }, propDecorators: { menu: [{
197
197
  type: ViewChild,
198
198
  args: [MenuComponent, { static: true }]
@@ -1780,7 +1780,7 @@ DatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
1780
1780
  _THESEAM_DATATABLE_ACCESSOR,
1781
1781
  ColumnsManagerService,
1782
1782
  ColumnsAlterationsManagerService,
1783
- ], queries: [{ propertyName: "actionMenu", first: true, predicate: DatatableActionMenuComponent, descendants: true, static: true }, { propertyName: "rowActionItem", first: true, predicate: DatatableRowActionItemDirective, descendants: true, static: true }, { propertyName: "rowDetail", first: true, predicate: TheSeamDatatableRowDetailDirective, descendants: true, static: true }, { propertyName: "footer", first: true, predicate: TheSeamDatatableFooterDirective, descendants: true, static: true }, { propertyName: "menuBarComponent", first: true, predicate: DatatableMenuBarComponent, descendants: true }, { propertyName: "columnComponents", predicate: DatatableColumnComponent }], viewQueries: [{ propertyName: "ngxDatatable", first: true, predicate: DatatableComponent$1, descendants: true }, { propertyName: "ngxDatatableElement", first: true, predicate: DatatableComponent$1, descendants: true, read: ElementRef }, { propertyName: "ngxRowDetail", first: true, predicate: DatatableRowDetailDirective, descendants: true }, { propertyName: "actionMenuCellTpl", first: true, predicate: ["actionMenuCellTpl"], descendants: true, static: true }, { propertyName: "treeToggleTpl", first: true, predicate: ["treeToggleTpl"], descendants: true, static: true }, { propertyName: "headerTpl", first: true, predicate: ["headerTpl"], descendants: true, static: true }, { propertyName: "blankHeaderTpl", first: true, predicate: ["blankHeaderTpl"], descendants: true, static: true }, { propertyName: "cellTypeSelectorTpl", first: true, predicate: ["cellTypeSelectorTpl"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"cssClasses\"\n [messages]=\"messages\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"_onSort($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"_onReorder($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\">\n\n <ngx-datatable-group-header [rowHeight]=\"50\" #myGroupHeader *ngIf=\"groupRowsBy\">\n <ng-template let-group=\"group\" let-expanded=\"expanded\" ngx-datatable-group-header-template>\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\">\n <b>Age: {{ group.age }}</b>\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\">\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\">\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template #headerTpl ngx-datatable-header-template\n let-column=\"column\" let-sortFn=\"sortFn\">\n <strong *ngIf=\"!column.sortable\" class=\"draggable\">{{column.name}}</strong>\n <strong *ngIf=\"column.sortable\" class=\"datatable-sort-target draggable\" (click)=\"sortFn()\">{{column.name}}</strong>\n <div class=\"datatable-column-header-separator\" [attr.data-column-id]=\"column.$$id\"></div>\n</ng-template>\n\n<ng-template #cellTypeSelectorTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\" let-column=\"column\">\n <seam-table-cell-type-selector *ngIf=\"row\"\n [type]=\"column.cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\">\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template #actionMenuCellTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\">\n\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, rowIndex: rowIndex }\">\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus==='disabled'\"\n (click)=\"tree.onTreeAction()\">\n <span *ngIf=\"tree.treeStatus==='loading'\">\n <fa-icon [icon]=\"_faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='collapsed'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='expanded'\">\n <fa-icon [icon]=\"_faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='disabled'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute!important;inset:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute}.datatable-sort-target{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5$1.DatatableComponent, selector: "ngx-datatable", inputs: ["selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "loadingIndicator", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "groupExpansionDefault", "selectAllRowsOnPage", "virtualization", "summaryRow", "summaryHeight", "summaryPosition", "displayPageCount", "displayPager", "rowIdentity", "rows", "groupedRows", "groupRowsBy", "columns", "limit", "count", "offset", "targetMarkerTemplate", "selectionType", "rowClass", "selectCheck", "displayCheck", "trackByProp", "treeFromRelation", "treeToRelation"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i5$1.DatatableRowDetailDirective, selector: "ngx-datatable-row-detail", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i5$1.DatatableGroupHeaderDirective, selector: "ngx-datatable-group-header", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i5$1.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i5$1.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i5$1.DataTableColumnCellTreeToggle, selector: "[ngx-datatable-tree-toggle]" }, { kind: "directive", type: i5$1.DatatableFooterDirective, selector: "ngx-datatable-footer", inputs: ["footerHeight", "totalMessage", "selectedMessage", "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "template"] }, { kind: "directive", type: i5$1.DatatableGroupHeaderTemplateDirective, selector: "[ngx-datatable-group-header-template]" }, { kind: "component", type: i6.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "directive", type: i7.ElemResizedDirective, selector: "[seamElemResized]", outputs: ["seamElemResized"] }, { kind: "component", type: i8.TableCellTypeSelectorComponent, selector: "seam-table-cell-type-selector", inputs: ["type", "value", "rowIndex", "row", "colData"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], animations: [
1783
+ ], queries: [{ propertyName: "actionMenu", first: true, predicate: DatatableActionMenuComponent, descendants: true, static: true }, { propertyName: "rowActionItem", first: true, predicate: DatatableRowActionItemDirective, descendants: true }, { propertyName: "rowDetail", first: true, predicate: TheSeamDatatableRowDetailDirective, descendants: true, static: true }, { propertyName: "footer", first: true, predicate: TheSeamDatatableFooterDirective, descendants: true, static: true }, { propertyName: "menuBarComponent", first: true, predicate: DatatableMenuBarComponent, descendants: true }, { propertyName: "columnComponents", predicate: DatatableColumnComponent }], viewQueries: [{ propertyName: "ngxDatatable", first: true, predicate: DatatableComponent$1, descendants: true }, { propertyName: "ngxDatatableElement", first: true, predicate: DatatableComponent$1, descendants: true, read: ElementRef }, { propertyName: "ngxRowDetail", first: true, predicate: DatatableRowDetailDirective, descendants: true }, { propertyName: "actionMenuCellTpl", first: true, predicate: ["actionMenuCellTpl"], descendants: true, static: true }, { propertyName: "treeToggleTpl", first: true, predicate: ["treeToggleTpl"], descendants: true, static: true }, { propertyName: "headerTpl", first: true, predicate: ["headerTpl"], descendants: true, static: true }, { propertyName: "blankHeaderTpl", first: true, predicate: ["blankHeaderTpl"], descendants: true, static: true }, { propertyName: "cellTypeSelectorTpl", first: true, predicate: ["cellTypeSelectorTpl"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"cssClasses\"\n [messages]=\"messages\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"_onSort($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"_onReorder($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\">\n\n <ngx-datatable-group-header [rowHeight]=\"50\" #myGroupHeader *ngIf=\"groupRowsBy\">\n <ng-template let-group=\"group\" let-expanded=\"expanded\" ngx-datatable-group-header-template>\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\">\n <b>Age: {{ group.age }}</b>\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\">\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\">\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template #headerTpl ngx-datatable-header-template\n let-column=\"column\" let-sortFn=\"sortFn\">\n <strong *ngIf=\"!column.sortable\" class=\"draggable\">{{column.name}}</strong>\n <strong *ngIf=\"column.sortable\" class=\"datatable-sort-target draggable\" (click)=\"sortFn()\">{{column.name}}</strong>\n <div class=\"datatable-column-header-separator\" [attr.data-column-id]=\"column.$$id\"></div>\n</ng-template>\n\n<ng-template #cellTypeSelectorTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\" let-column=\"column\">\n <seam-table-cell-type-selector *ngIf=\"row\"\n [type]=\"column.cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\">\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template #actionMenuCellTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\">\n\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, rowIndex: rowIndex }\">\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus==='disabled'\"\n (click)=\"tree.onTreeAction()\">\n <span *ngIf=\"tree.treeStatus==='loading'\">\n <fa-icon [icon]=\"_faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='collapsed'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='expanded'\">\n <fa-icon [icon]=\"_faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='disabled'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute!important;inset:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute}.datatable-sort-target{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5$1.DatatableComponent, selector: "ngx-datatable", inputs: ["selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "loadingIndicator", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "groupExpansionDefault", "selectAllRowsOnPage", "virtualization", "summaryRow", "summaryHeight", "summaryPosition", "displayPageCount", "displayPager", "rowIdentity", "rows", "groupedRows", "groupRowsBy", "columns", "limit", "count", "offset", "targetMarkerTemplate", "selectionType", "rowClass", "selectCheck", "displayCheck", "trackByProp", "treeFromRelation", "treeToRelation"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i5$1.DatatableRowDetailDirective, selector: "ngx-datatable-row-detail", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i5$1.DatatableGroupHeaderDirective, selector: "ngx-datatable-group-header", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i5$1.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i5$1.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i5$1.DataTableColumnCellTreeToggle, selector: "[ngx-datatable-tree-toggle]" }, { kind: "directive", type: i5$1.DatatableFooterDirective, selector: "ngx-datatable-footer", inputs: ["footerHeight", "totalMessage", "selectedMessage", "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "template"] }, { kind: "directive", type: i5$1.DatatableGroupHeaderTemplateDirective, selector: "[ngx-datatable-group-header-template]" }, { kind: "component", type: i6.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "directive", type: i7.ElemResizedDirective, selector: "[seamElemResized]", outputs: ["seamElemResized"] }, { kind: "component", type: i8.TableCellTypeSelectorComponent, selector: "seam-table-cell-type-selector", inputs: ["type", "value", "rowIndex", "row", "colData"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], animations: [
1784
1784
  trigger('slideDown', [
1785
1785
  transition(':enter', [
1786
1786
  style({ transform: 'translateY(-20%)', opacity: '0' }),
@@ -1981,7 +1981,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
1981
1981
  args: [DatatableActionMenuComponent, { static: true }]
1982
1982
  }], rowActionItem: [{
1983
1983
  type: ContentChild,
1984
- args: [DatatableRowActionItemDirective, { static: true }]
1984
+ args: [DatatableRowActionItemDirective]
1985
1985
  }], rowDetail: [{
1986
1986
  type: ContentChild,
1987
1987
  args: [TheSeamDatatableRowDetailDirective, { static: true }]
@@ -2061,7 +2061,7 @@ class DatatableColumnPreferencesComponent {
2061
2061
  }
2062
2062
  }
2063
2063
  DatatableColumnPreferencesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableColumnPreferencesComponent, deps: [{ token: THESEAM_DATATABLE }, { token: ColumnsAlterationsManagerService }], target: i0.ɵɵFactoryTarget.Component });
2064
- DatatableColumnPreferencesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableColumnPreferencesComponent, selector: "seam-datatable-column-preferences", ngImport: i0, template: "<h3>Columns</h3>\n\n<seam-form-field [numPaddingErrors]=\"0\" >\n <input seamInput [formControl]=\"_filterControl\" seamInputSize=\"sm\" placeholder=\"Search\" seamAutoFocus>\n</seam-form-field>\n\n<div seamOverlayScrollbar style=\"min-height: 200px; max-height: 600px; min-width: 250px;\" class=\"flex-grow-1 mb-2\">\n <div class=\"p-2\">\n <ng-container *ngFor=\"let col of _columns$ | async\">\n <seam-checkbox [checked]=\"!col.hidden\" (change)=\"_onChange($event, col)\">{{ col.name || col.prop }}</seam-checkbox>\n </ng-container>\n </div>\n\n</div>\n<div class=\"d-flex flex-row justify-content-end\">\n <!-- <button seamButton size=\"sm\" theme=\"lightgray\" (click)=\"_onCloseClick()\">Close</button> -->\n <!-- <button seamButton size=\"sm\" theme=\"lightgray\" class=\"mr-1\">Cancel</button>\n <button seamButton size=\"sm\" theme=\"success\">Done</button> -->\n</div>\n", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.AutoFocusDirective, selector: "[seamAutoFocus]", inputs: ["seamAutoFocus"], exportAs: ["seamAutoFocus"] }, { kind: "directive", type: i1$2.OverlayScrollbarDirective, selector: "[seamOverlayScrollbar]", inputs: ["seamOverlayScrollbar", "overlayScrollbarEnabled"], exportAs: ["seamOverlayScrollbar"] }, { kind: "component", type: i5$2.TheSeamCheckboxComponent, selector: "seam-checkbox", inputs: ["tabIndex", "id", "aria-label", "aria-labelledby", "required", "checked", "disabled", "indeterminate", "name", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["seamCheckbox"] }, { kind: "component", type: i6$1.TheSeamFormFieldComponent, selector: "seam-form-field", inputs: ["inline", "label", "labelPosition", "labelClass", "maxErrors", "numPaddingErrors", "labelId", "helpText", "helpTextId"] }, { kind: "directive", type: i6$1.InputDirective, selector: "input[seamInput], textarea[seamInput], ng-select[seamInput], seam-checkbox[seamInput] [ngbRadioGroup], seam-tel-input[seamInput], quill-editor[seamInput], seam-google-maps[seamInput]", inputs: ["seamInputSize", "id", "type", "placeholder", "required", "disabled", "readonly"], exportAs: ["seamInput"] }, { kind: "directive", type: i7$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2064
+ DatatableColumnPreferencesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableColumnPreferencesComponent, selector: "seam-datatable-column-preferences", ngImport: i0, template: "<h3>Columns</h3>\n\n<seam-form-field [numPaddingErrors]=\"0\" >\n <input seamInput [formControl]=\"_filterControl\" seamInputSize=\"sm\" placeholder=\"Search\" seamAutoFocus>\n</seam-form-field>\n\n<div seamOverlayScrollbar style=\"min-height: 200px; max-height: 600px; min-width: 250px;\" class=\"flex-grow-1 mb-2\">\n <div class=\"p-2\">\n <ng-container *ngFor=\"let col of _columns$ | async\">\n <seam-checkbox [checked]=\"!col.hidden\" (change)=\"_onChange($event, col)\">{{ col.name || col.prop }}</seam-checkbox>\n </ng-container>\n </div>\n\n</div>\n<div class=\"d-flex flex-row justify-content-end\">\n <!-- <button seamButton size=\"sm\" theme=\"lightgray\" (click)=\"_onCloseClick()\">Close</button> -->\n <!-- <button seamButton size=\"sm\" theme=\"lightgray\" class=\"mr-1\">Cancel</button>\n <button seamButton size=\"sm\" theme=\"success\">Done</button> -->\n</div>\n", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.AutoFocusDirective, selector: "[seamAutoFocus]", inputs: ["seamAutoFocus"], exportAs: ["seamAutoFocus"] }, { kind: "directive", type: i1$2.OverlayScrollbarDirective, selector: "[seamOverlayScrollbar]", inputs: ["seamOverlayScrollbar", "overlayScrollbarEnabled"], exportAs: ["seamOverlayScrollbar"] }, { kind: "component", type: i5$2.TheSeamCheckboxComponent, selector: "seam-checkbox", inputs: ["tabIndex", "id", "aria-label", "aria-labelledby", "required", "checked", "disabled", "indeterminate", "name", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["seamCheckbox"] }, { kind: "component", type: i6$1.TheSeamFormFieldComponent, selector: "seam-form-field", inputs: ["inline", "label", "labelPosition", "labelClass", "maxErrors", "numPaddingErrors", "labelId", "helpText", "helpTextId"] }, { kind: "directive", type: i6$1.InputDirective, selector: "input[seamInput], textarea[seamInput], ng-select[seamInput], seam-checkbox[seamInput] [ngbRadioGroup], seam-tel-input[seamInput], quill-editor[seamInput], seam-google-maps[seamInput], seam-rich-text[seamInput]", inputs: ["seamInputSize", "id", "type", "placeholder", "required", "disabled", "readonly"], exportAs: ["seamInput"] }, { kind: "directive", type: i7$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2065
2065
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableColumnPreferencesComponent, decorators: [{
2066
2066
  type: Component,
2067
2067
  args: [{ selector: 'seam-datatable-column-preferences', changeDetection: ChangeDetectionStrategy.OnPush, template: "<h3>Columns</h3>\n\n<seam-form-field [numPaddingErrors]=\"0\" >\n <input seamInput [formControl]=\"_filterControl\" seamInputSize=\"sm\" placeholder=\"Search\" seamAutoFocus>\n</seam-form-field>\n\n<div seamOverlayScrollbar style=\"min-height: 200px; max-height: 600px; min-width: 250px;\" class=\"flex-grow-1 mb-2\">\n <div class=\"p-2\">\n <ng-container *ngFor=\"let col of _columns$ | async\">\n <seam-checkbox [checked]=\"!col.hidden\" (change)=\"_onChange($event, col)\">{{ col.name || col.prop }}</seam-checkbox>\n </ng-container>\n </div>\n\n</div>\n<div class=\"d-flex flex-row justify-content-end\">\n <!-- <button seamButton size=\"sm\" theme=\"lightgray\" (click)=\"_onCloseClick()\">Close</button> -->\n <!-- <button seamButton size=\"sm\" theme=\"lightgray\" class=\"mr-1\">Cancel</button>\n <button seamButton size=\"sm\" theme=\"success\">Done</button> -->\n</div>\n", styles: [":host{display:flex;flex-direction:column}\n"] }]