@theseam/ui-common 1.0.0-beta.6 → 1.0.0-beta.8
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.
- package/breadcrumbs/index.d.ts +1 -2
- package/buttons/index.d.ts +20 -13
- package/datatable/index.d.ts +8 -8
- package/dynamic/index.d.ts +5 -5
- package/fesm2022/theseam-ui-common-asset-reader.mjs +28 -29
- package/fesm2022/theseam-ui-common-asset-reader.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-breadcrumbs.mjs +25 -31
- package/fesm2022/theseam-ui-common-breadcrumbs.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-buttons.mjs +108 -66
- package/fesm2022/theseam-ui-common-buttons.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-card.mjs +21 -21
- package/fesm2022/theseam-ui-common-card.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-carousel.mjs +28 -30
- package/fesm2022/theseam-ui-common-carousel.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-checkbox.mjs +27 -27
- package/fesm2022/theseam-ui-common-checkbox.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-confirm-dialog.mjs +23 -27
- package/fesm2022/theseam-ui-common-confirm-dialog.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-core.mjs +31 -11
- package/fesm2022/theseam-ui-common-core.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-data-exporter.mjs +18 -19
- package/fesm2022/theseam-ui-common-data-exporter.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-data-filters.mjs +80 -64
- package/fesm2022/theseam-ui-common-data-filters.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-datatable-alterations-display.mjs +51 -49
- package/fesm2022/theseam-ui-common-datatable-alterations-display.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-datatable-dynamic.mjs +145 -112
- package/fesm2022/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-datatable.mjs +592 -388
- package/fesm2022/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-dynamic-component-loader.mjs +12 -14
- package/fesm2022/theseam-ui-common-dynamic-component-loader.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-dynamic.mjs +60 -48
- package/fesm2022/theseam-ui-common-dynamic.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-footer-bar.mjs +9 -15
- package/fesm2022/theseam-ui-common-footer-bar.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-form-field-error.mjs +60 -43
- package/fesm2022/theseam-ui-common-form-field-error.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-form-field.mjs +120 -74
- package/fesm2022/theseam-ui-common-form-field.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-framework.mjs +669 -543
- package/fesm2022/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-google-maps.mjs +206 -149
- package/fesm2022/theseam-ui-common-google-maps.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-graphql.mjs +252 -195
- package/fesm2022/theseam-ui-common-graphql.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-icon.mjs +125 -89
- package/fesm2022/theseam-ui-common-icon.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-layout.mjs +18 -26
- package/fesm2022/theseam-ui-common-layout.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-loading.mjs +19 -28
- package/fesm2022/theseam-ui-common-loading.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-menu.mjs +124 -95
- package/fesm2022/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-modal.mjs +177 -129
- package/fesm2022/theseam-ui-common-modal.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-models.mjs +3 -3
- package/fesm2022/theseam-ui-common-models.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-navigation-reload.mjs +13 -11
- package/fesm2022/theseam-ui-common-navigation-reload.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-popover.mjs +81 -88
- package/fesm2022/theseam-ui-common-popover.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-progress.mjs +15 -19
- package/fesm2022/theseam-ui-common-progress.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-rich-text.mjs +65 -52
- package/fesm2022/theseam-ui-common-rich-text.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-scrollbar.mjs +12 -9
- package/fesm2022/theseam-ui-common-scrollbar.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-services.mjs +41 -26
- package/fesm2022/theseam-ui-common-services.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-shared.mjs +123 -67
- package/fesm2022/theseam-ui-common-shared.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-storage.mjs +9 -6
- package/fesm2022/theseam-ui-common-storage.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-story-helpers.mjs +148 -86
- package/fesm2022/theseam-ui-common-story-helpers.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tabbed.mjs +43 -39
- package/fesm2022/theseam-ui-common-tabbed.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-table-cell-type.mjs +34 -38
- package/fesm2022/theseam-ui-common-table-cell-type.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-table-cell-types.mjs +182 -144
- package/fesm2022/theseam-ui-common-table-cell-types.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-table.mjs +50 -39
- package/fesm2022/theseam-ui-common-table.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tel-input.mjs +98 -63
- package/fesm2022/theseam-ui-common-tel-input.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-testing.mjs +13 -10
- package/fesm2022/theseam-ui-common-testing.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tiled-select.mjs +54 -50
- package/fesm2022/theseam-ui-common-tiled-select.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-toggle-edit.mjs +41 -37
- package/fesm2022/theseam-ui-common-toggle-edit.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-toggle-group.mjs +30 -31
- package/fesm2022/theseam-ui-common-toggle-group.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tooltip.mjs +225 -66
- package/fesm2022/theseam-ui-common-tooltip.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-unsaved-changes-dialog.mjs +14 -12
- package/fesm2022/theseam-ui-common-unsaved-changes-dialog.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-utils.mjs +113 -77
- package/fesm2022/theseam-ui-common-utils.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-validators.mjs +10 -9
- package/fesm2022/theseam-ui-common-validators.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-vertical-list-filter.mjs +39 -17
- package/fesm2022/theseam-ui-common-vertical-list-filter.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-viewers.mjs +79 -56
- package/fesm2022/theseam-ui-common-viewers.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-widget.mjs +288 -314
- package/fesm2022/theseam-ui-common-widget.mjs.map +1 -1
- package/framework/base-layout/base-layout.component.scss +9 -4
- package/framework/base-layout/styles/_variables.scss +4 -9
- package/framework/dashboard/dashboard-widgets/dashboard-widgets.component.scss +6 -4
- package/framework/index.d.ts +6 -6
- package/framework/nav/nav-item/nav-item.component.scss +7 -6
- package/framework/nav/styles/_themes/light/_variables.scss +21 -5
- package/framework/nav/styles/_themes/primary/_variables.scss +21 -5
- package/framework/side-nav/side-nav-item/side-nav-item.component.scss +5 -2
- package/framework/side-nav/styles/_themes/light/_variables.scss +5 -1
- package/framework/side-nav/styles/_themes/primary/_variables.scss +25 -5
- package/graphql/index.d.ts +5 -5
- package/modal/README.md +5 -5
- package/modal/index.d.ts +1 -1
- package/models/index.d.ts +1 -1
- package/package.json +41 -41
- package/popover/index.d.ts +0 -2
- package/progress/progress-circle/styles/_variables.scss +15 -3
- package/story-helpers/index.d.ts +11 -1
- package/styles/bootstrap/_bootstrap.scss +34 -34
- package/styles/bootstrap/_bs-styles.scss +4 -8
- package/styles/bootstrap/_bs-utilities.scss +4 -4
- package/styles/bootstrap/_bs-variables.scss +65 -70
- package/styles/common/_forms.scss +9 -10
- package/styles/common/_global.scss +0 -1
- package/styles/common/_hacks.scss +1 -1
- package/styles/common/_table.scss +0 -1
- package/styles/common/_text.scss +3 -1
- package/styles/theme.scss +1 -1
- package/styles/vendor/ng-select/_ng-select-bs4.scss +292 -294
- package/styles/vendor/ngx-datatable/_ngx-datatable.scss +63 -32
- package/styles/vendor/ngx-datatable/_themes/bootstrap/_variables.scss +37 -10
- package/styles/vendor/ngx-datatable/_themes/material/_variables.scss +3 -1
- package/styles/vendor/quill/_quill.scss +15 -9
- package/tel-input/README.md +27 -27
- package/utils/index.d.ts +3 -3
- package/viewers/index.d.ts +9 -2
- package/widget/_widget-theme.scss +1 -1
- package/widget/styles/_variables.scss +2 -2
- package/widget/widget/widget.component.scss +0 -2
- package/widget/widget-content-components/widget-tile/widget-tile.component.scss +1 -3
- package/widget/widget-footer/widget-footer.component.scss +0 -1
|
@@ -25,7 +25,7 @@ function filterOperator(filterFn) {
|
|
|
25
25
|
return (source$) => source$.pipe(switchMap(filterFn));
|
|
26
26
|
}
|
|
27
27
|
function composeDataFilters(filters) {
|
|
28
|
-
const filterFunctions = filters.map(f => filterOperator(f.filter.bind(f)));
|
|
28
|
+
const filterFunctions = filters.map((f) => filterOperator(f.filter.bind(f)));
|
|
29
29
|
return (source$) => {
|
|
30
30
|
let src$ = source$;
|
|
31
31
|
for (const f of filterFunctions) {
|
|
@@ -38,7 +38,7 @@ function composeDataFilterStates(filters) {
|
|
|
38
38
|
if (filters.length === 0) {
|
|
39
39
|
return of([]);
|
|
40
40
|
}
|
|
41
|
-
return combineLatest(filters.map(f => f.filterStateChanges.pipe(startWith(undefined), map(() => f.filterState()))));
|
|
41
|
+
return combineLatest(filters.map((f) => f.filterStateChanges.pipe(startWith(undefined), map(() => f.filterState()))));
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
const THESEAM_DATA_FILTER_DEF = new InjectionToken('TheSeamDataFilter');
|
|
@@ -47,7 +47,6 @@ const THESEAM_DATA_FILTER_CONTAINER = new InjectionToken('DataFilterContainer');
|
|
|
47
47
|
|
|
48
48
|
const DATA_FILTER_TEXT = {
|
|
49
49
|
provide: THESEAM_DATA_FILTER,
|
|
50
|
-
// tslint:disable-next-line:no-use-before-declare
|
|
51
50
|
useExisting: forwardRef(() => DataFilterTextComponent),
|
|
52
51
|
multi: true,
|
|
53
52
|
};
|
|
@@ -69,7 +68,7 @@ function textDataFilter(data, text, options = DefaultTextFilterOptions) {
|
|
|
69
68
|
props = [];
|
|
70
69
|
let keys = Object.keys(data[0]);
|
|
71
70
|
if (options && options.omitProperties) {
|
|
72
|
-
keys = keys.filter(key => !(options.omitProperties || []).find(p => p === key));
|
|
71
|
+
keys = keys.filter((key) => !(options.omitProperties || []).find((p) => p === key));
|
|
73
72
|
}
|
|
74
73
|
for (const key of keys) {
|
|
75
74
|
if (Object.prototype.hasOwnProperty.call(data[0], key)) {
|
|
@@ -121,10 +120,15 @@ class DataFilterTextComponent {
|
|
|
121
120
|
this._filterOptions = _filterOptions;
|
|
122
121
|
this.filterStateChanges = this._control.valueChanges.pipe(switchMap(() => of(this.filterState())), shareReplay({ bufferSize: 1, refCount: true }));
|
|
123
122
|
}
|
|
124
|
-
ngOnInit() {
|
|
125
|
-
|
|
123
|
+
ngOnInit() {
|
|
124
|
+
this._filterContainer.addFilter(this);
|
|
125
|
+
}
|
|
126
|
+
ngOnDestroy() {
|
|
127
|
+
this._filterContainer.removeFilter(this);
|
|
128
|
+
}
|
|
126
129
|
_optDefault(prop) {
|
|
127
|
-
if (this._filterOptions &&
|
|
130
|
+
if (this._filterOptions &&
|
|
131
|
+
Object.prototype.hasOwnProperty.call(this._filterOptions, prop)) {
|
|
128
132
|
return this._filterOptions[prop];
|
|
129
133
|
}
|
|
130
134
|
return DefaultTextFilterOptions[prop];
|
|
@@ -134,12 +138,11 @@ class DataFilterTextComponent {
|
|
|
134
138
|
properties: this.properties ?? undefined,
|
|
135
139
|
omitProperties: this.omitProperties ?? undefined,
|
|
136
140
|
exact: this.exact,
|
|
137
|
-
caseSensitive: this.caseSensitive
|
|
141
|
+
caseSensitive: this.caseSensitive,
|
|
138
142
|
};
|
|
139
143
|
}
|
|
140
144
|
filter(data) {
|
|
141
|
-
return this._control.valueChanges
|
|
142
|
-
.pipe(map(v => textDataFilter(data, v, this.options)), startWith(textDataFilter(data, this._control.value, this.options)));
|
|
145
|
+
return this._control.valueChanges.pipe(map((v) => textDataFilter(data, v, this.options)), startWith(textDataFilter(data, this._control.value, this.options)));
|
|
143
146
|
}
|
|
144
147
|
filterState() {
|
|
145
148
|
return {
|
|
@@ -147,12 +150,12 @@ class DataFilterTextComponent {
|
|
|
147
150
|
name: this.name,
|
|
148
151
|
state: {
|
|
149
152
|
value: this._control.value,
|
|
150
|
-
options: this.options
|
|
151
|
-
}
|
|
153
|
+
options: this.options,
|
|
154
|
+
},
|
|
152
155
|
};
|
|
153
156
|
}
|
|
154
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
155
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
157
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: DataFilterTextComponent, deps: [{ token: THESEAM_DATA_FILTER_CONTAINER }, { token: THESEAM_DATA_FILTER_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
158
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.6", type: DataFilterTextComponent, isStandalone: false, selector: "seam-data-filter-text", inputs: { properties: "properties", omitProperties: "omitProperties", exact: "exact", caseSensitive: "caseSensitive", placeholder: "placeholder", iconTpl: "iconTpl", value: "value" }, providers: [DATA_FILTER_TEXT], ngImport: i0, template: "<div\n class=\"position-relative\"\n [class.data-filter-text-has-icon]=\"iconTpl\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Text filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:block}.data-filter-text-has-icon>input{padding-left:30px}.data-filter-text-has-icon ::ng-deep fa-icon{position:absolute;top:3px;left:10px;bottom:0}.data-filter-text-has-icon ::ng-deep fa-icon .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.InputDirective, selector: "input[seamInput], textarea[seamInput], ng-select[seamInput], 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"] }] });
|
|
156
159
|
}
|
|
157
160
|
__decorate([
|
|
158
161
|
InputBoolean()
|
|
@@ -160,9 +163,9 @@ __decorate([
|
|
|
160
163
|
__decorate([
|
|
161
164
|
InputBoolean()
|
|
162
165
|
], DataFilterTextComponent.prototype, "caseSensitive", void 0);
|
|
163
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: DataFilterTextComponent, decorators: [{
|
|
164
167
|
type: Component,
|
|
165
|
-
args: [{ selector: 'seam-data-filter-text', providers: [DATA_FILTER_TEXT], standalone: false, template: "<div
|
|
168
|
+
args: [{ selector: 'seam-data-filter-text', providers: [DATA_FILTER_TEXT], standalone: false, template: "<div\n class=\"position-relative\"\n [class.data-filter-text-has-icon]=\"iconTpl\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Text filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:block}.data-filter-text-has-icon>input{padding-left:30px}.data-filter-text-has-icon ::ng-deep fa-icon{position:absolute;top:3px;left:10px;bottom:0}.data-filter-text-has-icon ::ng-deep fa-icon .svg-inline--fa{vertical-align:middle}\n"] }]
|
|
166
169
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
167
170
|
type: Inject,
|
|
168
171
|
args: [THESEAM_DATA_FILTER_CONTAINER]
|
|
@@ -189,7 +192,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
189
192
|
|
|
190
193
|
const DATA_FILTER_SEARCH = {
|
|
191
194
|
provide: THESEAM_DATA_FILTER,
|
|
192
|
-
// tslint:disable-next-line:no-use-before-declare
|
|
193
195
|
useExisting: forwardRef(() => DataFilterSearchComponent),
|
|
194
196
|
multi: true,
|
|
195
197
|
};
|
|
@@ -197,7 +199,7 @@ const DefaultSearchFilterOptions = {
|
|
|
197
199
|
properties: undefined,
|
|
198
200
|
omitProperties: undefined,
|
|
199
201
|
exact: false,
|
|
200
|
-
caseSensitive: false
|
|
202
|
+
caseSensitive: false,
|
|
201
203
|
};
|
|
202
204
|
function searchDataFilter(data, values, options = DefaultSearchFilterOptions) {
|
|
203
205
|
return textDataFilter(data, values, options);
|
|
@@ -230,10 +232,15 @@ class DataFilterSearchComponent {
|
|
|
230
232
|
this._filterOptions = _filterOptions;
|
|
231
233
|
this.filterStateChanges = this._control.valueChanges.pipe(switchMap(() => of(this.filterState())), shareReplay({ bufferSize: 1, refCount: true }));
|
|
232
234
|
}
|
|
233
|
-
ngOnInit() {
|
|
234
|
-
|
|
235
|
+
ngOnInit() {
|
|
236
|
+
this._filterContainer.addFilter(this);
|
|
237
|
+
}
|
|
238
|
+
ngOnDestroy() {
|
|
239
|
+
this._filterContainer.removeFilter(this);
|
|
240
|
+
}
|
|
235
241
|
_optDefault(prop) {
|
|
236
|
-
if (this._filterOptions &&
|
|
242
|
+
if (this._filterOptions &&
|
|
243
|
+
Object.prototype.hasOwnProperty.call(this._filterOptions, prop)) {
|
|
237
244
|
return this._filterOptions[prop];
|
|
238
245
|
}
|
|
239
246
|
return DefaultSearchFilterOptions[prop];
|
|
@@ -243,12 +250,11 @@ class DataFilterSearchComponent {
|
|
|
243
250
|
properties: this.properties ?? undefined,
|
|
244
251
|
omitProperties: this.omitProperties ?? undefined,
|
|
245
252
|
exact: this.exact,
|
|
246
|
-
caseSensitive: this.caseSensitive
|
|
253
|
+
caseSensitive: this.caseSensitive,
|
|
247
254
|
};
|
|
248
255
|
}
|
|
249
256
|
filter(data) {
|
|
250
|
-
return this._control.valueChanges
|
|
251
|
-
.pipe(map(v => searchDataFilter(data, v, this.options)), startWith(searchDataFilter(data, this._control.value, this.options)));
|
|
257
|
+
return this._control.valueChanges.pipe(map((v) => searchDataFilter(data, v, this.options)), startWith(searchDataFilter(data, this._control.value, this.options)));
|
|
252
258
|
}
|
|
253
259
|
filterState() {
|
|
254
260
|
return {
|
|
@@ -256,12 +262,12 @@ class DataFilterSearchComponent {
|
|
|
256
262
|
name: this.name,
|
|
257
263
|
state: {
|
|
258
264
|
value: this._control.value,
|
|
259
|
-
options: this.options
|
|
260
|
-
}
|
|
265
|
+
options: this.options,
|
|
266
|
+
},
|
|
261
267
|
};
|
|
262
268
|
}
|
|
263
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
264
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
269
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: DataFilterSearchComponent, deps: [{ token: THESEAM_DATA_FILTER_CONTAINER }, { token: THESEAM_DATA_FILTER_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
270
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.6", type: DataFilterSearchComponent, isStandalone: false, selector: "seam-data-filter-search", inputs: { properties: "properties", omitProperties: "omitProperties", exact: "exact", caseSensitive: "caseSensitive", placeholder: "placeholder", icon: "icon", iconTpl: "iconTpl", value: "value" }, providers: [DATA_FILTER_SEARCH], ngImport: i0, template: "<div\n class=\"position-relative\"\n [class.data-filter-search-has-icon]=\"iconTpl || icon\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Search filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl; else searchIconTpl\">\n <div class=\"data-filter-search--icon-wrapper\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </div>\n </ng-container>\n <ng-template #searchIconTpl>\n <ng-container *ngIf=\"icon\">\n <div class=\"data-filter-search--icon-wrapper\">\n <seam-icon [icon]=\"icon\" class=\"text-muted\"></seam-icon>\n </div>\n </ng-container>\n </ng-template>\n</div>\n", styles: [":host{display:flex;flex:0 1 300px}.data-filter-search-has-icon{width:100%}.data-filter-search-has-icon>input{padding-left:30px}.data-filter-search-has-icon .data-filter-search--icon-wrapper{position:absolute;top:3px;left:10px;bottom:0}.data-filter-search-has-icon .data-filter-search--icon-wrapper ::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.InputDirective, selector: "input[seamInput], textarea[seamInput], ng-select[seamInput], 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: "component", type: i4.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
265
271
|
}
|
|
266
272
|
__decorate([
|
|
267
273
|
InputBoolean()
|
|
@@ -269,9 +275,9 @@ __decorate([
|
|
|
269
275
|
__decorate([
|
|
270
276
|
InputBoolean()
|
|
271
277
|
], DataFilterSearchComponent.prototype, "caseSensitive", void 0);
|
|
272
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
278
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: DataFilterSearchComponent, decorators: [{
|
|
273
279
|
type: Component,
|
|
274
|
-
args: [{ selector: 'seam-data-filter-search', providers: [DATA_FILTER_SEARCH], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div
|
|
280
|
+
args: [{ selector: 'seam-data-filter-search', providers: [DATA_FILTER_SEARCH], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div\n class=\"position-relative\"\n [class.data-filter-search-has-icon]=\"iconTpl || icon\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Search filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl; else searchIconTpl\">\n <div class=\"data-filter-search--icon-wrapper\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </div>\n </ng-container>\n <ng-template #searchIconTpl>\n <ng-container *ngIf=\"icon\">\n <div class=\"data-filter-search--icon-wrapper\">\n <seam-icon [icon]=\"icon\" class=\"text-muted\"></seam-icon>\n </div>\n </ng-container>\n </ng-template>\n</div>\n", styles: [":host{display:flex;flex:0 1 300px}.data-filter-search-has-icon{width:100%}.data-filter-search-has-icon>input{padding-left:30px}.data-filter-search-has-icon .data-filter-search--icon-wrapper{position:absolute;top:3px;left:10px;bottom:0}.data-filter-search-has-icon .data-filter-search--icon-wrapper ::ng-deep .svg-inline--fa{vertical-align:middle}\n"] }]
|
|
275
281
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
276
282
|
type: Inject,
|
|
277
283
|
args: [THESEAM_DATA_FILTER_CONTAINER]
|
|
@@ -310,7 +316,7 @@ const DefaultToggleButtonsFilterOptions = {
|
|
|
310
316
|
selectionToggleable: false,
|
|
311
317
|
buttons: [],
|
|
312
318
|
exact: false,
|
|
313
|
-
caseSensitive: false
|
|
319
|
+
caseSensitive: false,
|
|
314
320
|
};
|
|
315
321
|
function toggleButtonsFilter(data, values, options = DefaultToggleButtonsFilterOptions) {
|
|
316
322
|
if (!data || !values) {
|
|
@@ -347,7 +353,7 @@ function toggleButtonsFilter(data, values, options = DefaultToggleButtonsFilterO
|
|
|
347
353
|
properties: options.properties,
|
|
348
354
|
omitProperties: options.omitProperties,
|
|
349
355
|
exact: options.exact,
|
|
350
|
-
caseSensitive: options.caseSensitive
|
|
356
|
+
caseSensitive: options.caseSensitive,
|
|
351
357
|
});
|
|
352
358
|
}
|
|
353
359
|
}
|
|
@@ -386,13 +392,17 @@ class DataFilterToggleButtonsComponent {
|
|
|
386
392
|
}
|
|
387
393
|
ngOnInit() {
|
|
388
394
|
this._filterContainer.addFilter(this);
|
|
389
|
-
if (this._filterOptions &&
|
|
395
|
+
if (this._filterOptions &&
|
|
396
|
+
hasProperty(this._filterOptions, 'initialValue')) {
|
|
390
397
|
this.value = this._optDefault('initialValue');
|
|
391
398
|
}
|
|
392
399
|
}
|
|
393
|
-
ngOnDestroy() {
|
|
400
|
+
ngOnDestroy() {
|
|
401
|
+
this._filterContainer.removeFilter(this);
|
|
402
|
+
}
|
|
394
403
|
_optDefault(prop) {
|
|
395
|
-
if (this._filterOptions &&
|
|
404
|
+
if (this._filterOptions &&
|
|
405
|
+
Object.prototype.hasOwnProperty.call(this._filterOptions, prop)) {
|
|
396
406
|
return this._filterOptions[prop];
|
|
397
407
|
}
|
|
398
408
|
return DefaultToggleButtonsFilterOptions[prop];
|
|
@@ -405,12 +415,11 @@ class DataFilterToggleButtonsComponent {
|
|
|
405
415
|
selectionToggleable: this.selectionToggleable,
|
|
406
416
|
buttons: this.buttons,
|
|
407
417
|
exact: this.exact,
|
|
408
|
-
caseSensitive: this.caseSensitive
|
|
418
|
+
caseSensitive: this.caseSensitive,
|
|
409
419
|
};
|
|
410
420
|
}
|
|
411
421
|
filter(data) {
|
|
412
|
-
return this._control.valueChanges
|
|
413
|
-
.pipe(map(v => toggleButtonsFilter(data, coerceArray(v), this.options)), startWith(toggleButtonsFilter(data, coerceArray(this._control.value), this.options)));
|
|
422
|
+
return this._control.valueChanges.pipe(map((v) => toggleButtonsFilter(data, coerceArray(v), this.options)), startWith(toggleButtonsFilter(data, coerceArray(this._control.value), this.options)));
|
|
414
423
|
}
|
|
415
424
|
filterState() {
|
|
416
425
|
return {
|
|
@@ -418,16 +427,16 @@ class DataFilterToggleButtonsComponent {
|
|
|
418
427
|
name: this.name,
|
|
419
428
|
state: {
|
|
420
429
|
value: this._control.value,
|
|
421
|
-
options: this.options
|
|
422
|
-
}
|
|
430
|
+
options: this.options,
|
|
431
|
+
},
|
|
423
432
|
};
|
|
424
433
|
}
|
|
425
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
426
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
434
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: DataFilterToggleButtonsComponent, deps: [{ token: THESEAM_DATA_FILTER_CONTAINER }, { token: THESEAM_DATA_FILTER_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
435
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.6", type: DataFilterToggleButtonsComponent, isStandalone: false, selector: "seam-data-filter-toggle-buttons", inputs: { properties: "properties", omitProperties: "omitProperties", multiple: "multiple", selectionToggleable: "selectionToggleable", buttons: "buttons", exact: "exact", caseSensitive: "caseSensitive", value: "value" }, providers: [DATA_FILTER_TOGGLE_BUTTON], ngImport: i0, template: "<div\n class=\"btn-group\"\n role=\"group\"\n aria-label=\"Progress Filter\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n>\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm px-4\"\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.btn-lightgray]=\"!opt.selected\"\n [class.btn-primary]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.ToggleGroupDirective, selector: "[seamToggleGroup]", inputs: ["value", "disabled", "multiple", "selectionToggleable"], outputs: ["change"], exportAs: ["seamToggleGroup"] }, { kind: "directive", type: i3$1.ToggleGroupOptionDirective, selector: "[seamToggleGroupOption]", inputs: ["seamToggleGroupOption", "selected"], outputs: ["selectionChange"], exportAs: ["seamToggleGroupOption"] }] });
|
|
427
436
|
}
|
|
428
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
437
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: DataFilterToggleButtonsComponent, decorators: [{
|
|
429
438
|
type: Component,
|
|
430
|
-
args: [{ selector: 'seam-data-filter-toggle-buttons', providers: [DATA_FILTER_TOGGLE_BUTTON], standalone: false, template: "<div
|
|
439
|
+
args: [{ selector: 'seam-data-filter-toggle-buttons', providers: [DATA_FILTER_TOGGLE_BUTTON], standalone: false, template: "<div\n class=\"btn-group\"\n role=\"group\"\n aria-label=\"Progress Filter\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n>\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm px-4\"\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.btn-lightgray]=\"!opt.selected\"\n [class.btn-primary]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n</div>\n" }]
|
|
431
440
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
432
441
|
type: Inject,
|
|
433
442
|
args: [THESEAM_DATA_FILTER_CONTAINER]
|
|
@@ -457,16 +466,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
457
466
|
const filterComponents = [
|
|
458
467
|
DataFilterSearchComponent,
|
|
459
468
|
DataFilterTextComponent,
|
|
460
|
-
DataFilterToggleButtonsComponent
|
|
469
|
+
DataFilterToggleButtonsComponent,
|
|
461
470
|
];
|
|
462
471
|
const filterDefProviders = [
|
|
463
|
-
{
|
|
464
|
-
|
|
465
|
-
|
|
472
|
+
{
|
|
473
|
+
provide: THESEAM_DATA_FILTER_DEF,
|
|
474
|
+
useValue: { name: 'search', component: DataFilterSearchComponent },
|
|
475
|
+
multi: true,
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
provide: THESEAM_DATA_FILTER_DEF,
|
|
479
|
+
useValue: { name: 'text', component: DataFilterTextComponent },
|
|
480
|
+
multi: true,
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
provide: THESEAM_DATA_FILTER_DEF,
|
|
484
|
+
useValue: {
|
|
485
|
+
name: 'toggle-buttons',
|
|
486
|
+
component: DataFilterToggleButtonsComponent,
|
|
487
|
+
},
|
|
488
|
+
multi: true,
|
|
489
|
+
},
|
|
466
490
|
];
|
|
467
491
|
class TheSeamDataFiltersModule {
|
|
468
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
469
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.
|
|
492
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: TheSeamDataFiltersModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
493
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.6", ngImport: i0, type: TheSeamDataFiltersModule, declarations: [DataFilterSearchComponent,
|
|
470
494
|
DataFilterTextComponent,
|
|
471
495
|
DataFilterToggleButtonsComponent], imports: [CommonModule,
|
|
472
496
|
ReactiveFormsModule,
|
|
@@ -476,35 +500,27 @@ class TheSeamDataFiltersModule {
|
|
|
476
500
|
TheSeamIconModule], exports: [DataFilterSearchComponent,
|
|
477
501
|
DataFilterTextComponent,
|
|
478
502
|
DataFilterToggleButtonsComponent] });
|
|
479
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.
|
|
480
|
-
...filterDefProviders
|
|
481
|
-
], imports: [CommonModule,
|
|
503
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: TheSeamDataFiltersModule, providers: [...filterDefProviders], imports: [CommonModule,
|
|
482
504
|
ReactiveFormsModule,
|
|
483
505
|
TheSeamFormFieldModule,
|
|
484
506
|
FontAwesomeModule,
|
|
485
507
|
TheSeamToggleGroupModule,
|
|
486
508
|
TheSeamIconModule] });
|
|
487
509
|
}
|
|
488
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
510
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: TheSeamDataFiltersModule, decorators: [{
|
|
489
511
|
type: NgModule,
|
|
490
512
|
args: [{
|
|
491
|
-
declarations: [
|
|
492
|
-
...filterComponents
|
|
493
|
-
],
|
|
513
|
+
declarations: [...filterComponents],
|
|
494
514
|
imports: [
|
|
495
515
|
CommonModule,
|
|
496
516
|
ReactiveFormsModule,
|
|
497
517
|
TheSeamFormFieldModule,
|
|
498
518
|
FontAwesomeModule,
|
|
499
519
|
TheSeamToggleGroupModule,
|
|
500
|
-
TheSeamIconModule
|
|
501
|
-
],
|
|
502
|
-
providers: [
|
|
503
|
-
...filterDefProviders
|
|
520
|
+
TheSeamIconModule,
|
|
504
521
|
],
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
]
|
|
522
|
+
providers: [...filterDefProviders],
|
|
523
|
+
exports: [...filterComponents],
|
|
508
524
|
}]
|
|
509
525
|
}] });
|
|
510
526
|
|
|
@@ -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 standalone: false\n})\nexport class DataFilterTextComponent implements OnInit, OnDestroy, IDataFilter {\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'text'\n public readonly uid = `text__${_uid++}`\n\n _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 standalone: false\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 standalone: false\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":"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"}
|
|
1
|
+
{"version":3,"file":"theseam-ui-common-data-filters.mjs","sources":["../../../projects/ui-common/data-filters/data-filter.ts","../../../projects/ui-common/data-filters/data-filter-def.ts","../../../projects/ui-common/data-filters/data-filter-container.ts","../../../projects/ui-common/data-filters/filters/data-filter-text/data-filter-text.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-text/data-filter-text.component.html","../../../projects/ui-common/data-filters/filters/data-filter-search/data-filter-search.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-search/data-filter-search.component.html","../../../projects/ui-common/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.html","../../../projects/ui-common/data-filters/data-filters.module.ts","../../../projects/ui-common/data-filters/theseam-ui-common-data-filters.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { combineLatest, Observable, of } from 'rxjs'\nimport { map, startWith, switchMap } from 'rxjs/operators'\n\nexport type DataFilterFunction = <T>(data: T[]) => Observable<T[]>\n\n/**\n * State of the filter that would allow an external operation to apply the\n * filtering.\n *\n * This is primarily for server-side filtering.\n */\nexport interface DataFilterState {\n /**\n * DataFilter's name.\n */\n name: string\n\n /**\n * Anything necessary for an external implementation to apply this filter.\n */\n state: { [key: string]: any }\n}\n\n// TODO: Consider adding something, such as a priority or order, to allow the\n// order the filter functions are called in to be declared/influenced\n// externally. This would allow the filters that will most likely filter out\n// many records quickly to be run before the heavy processing filters.\nexport interface DataFilter {\n /**\n * Name used when referencing filter by string.\n */\n name: string\n\n /**\n * Unique value to prevent a filter being used more than once if it ends up\n * being registered more than once.\n */\n uid: string\n\n /**\n *\n */\n filterStateChanges: Observable<DataFilterState>\n\n /**\n * Filters the data based on the conditions of the filter.\n */\n filter<T>(data: T[]): Observable<T[]>\n\n /**\n *\n */\n filterState(): DataFilterState\n}\n\nexport const THESEAM_DATA_FILTER = new InjectionToken<DataFilter>(\n 'TheSeamDataFilter',\n)\nexport const THESEAM_DATA_FILTER_OPTIONS = new InjectionToken<object>(\n 'TheSeamDataFilterOptions',\n)\n\nexport function filterOperator<T>(filterFn: DataFilterFunction) {\n return (source$: Observable<T[]>) => source$.pipe(switchMap(filterFn))\n}\n\nexport function composeDataFilters(filters: DataFilter[]) {\n const filterFunctions = filters.map((f) => filterOperator(f.filter.bind(f)))\n return (source$: Observable<any>) => {\n let src$ = source$\n for (const f of filterFunctions) {\n src$ = src$.pipe(f)\n }\n return src$\n }\n}\n\nexport function composeDataFilterStates(\n filters: DataFilter[],\n): Observable<DataFilterState[]> {\n if (filters.length === 0) {\n return of([])\n }\n\n return combineLatest(\n filters.map((f) =>\n f.filterStateChanges.pipe(\n startWith(undefined),\n map(() => f.filterState()),\n ),\n ),\n )\n}\n\n/** @deprecated Use `DataFilter` instead. */\nexport type IDataFilter = DataFilter\n\n/** @deprecated Use `IDataFilterFunction` instead. */\nexport type IDataFilterFunction = DataFilterFunction\n","import { InjectionToken } from '@angular/core'\n\nimport { IDataFilter } from './data-filter'\n\nexport interface IDataFilterDef<T = any> {\n name: string\n\n /**\n * Component that controls the filter.\n */\n component: IDataFilter\n}\n\nexport const THESEAM_DATA_FILTER_DEF = new InjectionToken<IDataFilterDef[]>(\n 'TheSeamDataFilter',\n)\n","import { InjectionToken } from '@angular/core'\nimport { IDataFilter } from './data-filter'\n\nexport interface DataFilterContainer {\n filters(): IDataFilter[]\n\n addFilter(dataFilter: IDataFilter): void\n\n removeFilter(dataFilter: IDataFilter): void\n}\n\nexport const THESEAM_DATA_FILTER_CONTAINER =\n new InjectionToken<DataFilterContainer>('DataFilterContainer')\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { ITextFilterOptions } from './text-filter-options'\n\nexport const DATA_FILTER_TEXT: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterTextComponent),\n multi: true,\n}\n\nexport const DefaultTextFilterOptions: ITextFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n exact: false,\n caseSensitive: false,\n}\n\nexport function textDataFilter(\n data: any[],\n text: string,\n options = DefaultTextFilterOptions,\n) {\n if (!data || !text) {\n return data\n }\n\n if (data.length <= 0) {\n return data\n }\n\n let props = options ? options.properties : undefined\n if (!props) {\n props = []\n let keys = Object.keys(data[0])\n if (options && options.omitProperties) {\n keys = keys.filter(\n (key) => !(options.omitProperties || []).find((p) => p === key),\n )\n }\n for (const key of keys) {\n if (Object.prototype.hasOwnProperty.call(data[0], key)) {\n props.push(key)\n }\n }\n }\n\n const filtered: any[] = []\n\n for (const item of data) {\n for (const p of props) {\n let value1 = `${item[p]}`\n let value2 = text\n\n if (!options.caseSensitive) {\n value1 = value1.toLowerCase()\n value2 = value2.toLowerCase()\n }\n\n if (item[p] && value1.indexOf(value2) !== (options.exact ? 0 : -1)) {\n filtered.push(item)\n break\n }\n }\n }\n\n return filtered\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-text',\n templateUrl: './data-filter-text.component.html',\n styleUrls: ['./data-filter-text.component.scss'],\n providers: [DATA_FILTER_TEXT],\n standalone: false,\n})\nexport class DataFilterTextComponent implements OnInit, OnDestroy, IDataFilter {\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'text'\n public readonly uid = `text__${_uid++}`\n\n _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null =\n this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null =\n this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean =\n this._optDefault('caseSensitive')\n\n @Input() placeholder: string | undefined | null\n @Input() iconTpl: TemplateRef<HTMLElement> | undefined | null\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? `${value}` : ''\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n\n constructor(\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: ITextFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n switchMap(() => of(this.filterState())),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof ITextFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultTextFilterOptions[prop]\n }\n\n get options(): ITextFilterOptions {\n return {\n properties: this.properties ?? undefined,\n omitProperties: this.omitProperties ?? undefined,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => textDataFilter(data, v, this.options)),\n startWith(textDataFilter(data, this._control.value, this.options)),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<div\n class=\"position-relative\"\n [class.data-filter-text-has-icon]=\"iconTpl\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Text filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ng-container>\n</div>\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators'\n\nimport { faSearch } from '@fortawesome/free-solid-svg-icons'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport type { SeamIcon } from '@theseam/ui-common/icon'\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { textDataFilter } from '../data-filter-text/data-filter-text.component'\n\nimport { ISearchFilterOptions } from './search-filter-options'\n\nexport const DATA_FILTER_SEARCH: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterSearchComponent),\n multi: true,\n}\n\nexport const DefaultSearchFilterOptions: ISearchFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n exact: false,\n caseSensitive: false,\n}\n\nexport function searchDataFilter(\n data: any[],\n values: string,\n options = DefaultSearchFilterOptions,\n) {\n return textDataFilter(data, values, options)\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-search',\n templateUrl: './data-filter-search.component.html',\n styleUrls: ['./data-filter-search.component.scss'],\n providers: [DATA_FILTER_SEARCH],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class DataFilterSearchComponent\n implements OnInit, OnDestroy, IDataFilter\n{\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'search'\n public readonly uid = `search__${_uid++}`\n\n _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null =\n this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null =\n this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean =\n this._optDefault('caseSensitive')\n\n @Input() placeholder: string | undefined | null = 'Search...'\n @Input() icon: SeamIcon | undefined | null = faSearch\n @Input() iconTpl?: TemplateRef<HTMLElement>\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? `${value}` : ''\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n\n constructor(\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: ISearchFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n switchMap(() => of(this.filterState())),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof ISearchFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultSearchFilterOptions[prop]\n }\n\n get options(): ISearchFilterOptions {\n return {\n properties: this.properties ?? undefined,\n omitProperties: this.omitProperties ?? undefined,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => searchDataFilter(data, v, this.options)),\n startWith(searchDataFilter(data, this._control.value, this.options)),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<div\n class=\"position-relative\"\n [class.data-filter-search-has-icon]=\"iconTpl || icon\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Search filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl; else searchIconTpl\">\n <div class=\"data-filter-search--icon-wrapper\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </div>\n </ng-container>\n <ng-template #searchIconTpl>\n <ng-container *ngIf=\"icon\">\n <div class=\"data-filter-search--icon-wrapper\">\n <seam-icon [icon]=\"icon\" class=\"text-muted\"></seam-icon>\n </div>\n </ng-container>\n </ng-template>\n</div>\n","import { coerceArray } from '@angular/cdk/coercion'\nimport {\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n} 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 {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { textDataFilter } from '../data-filter-text/data-filter-text.component'\nimport { ITextFilterOptions } from '../data-filter-text/text-filter-options'\n\nexport const DATA_FILTER_TOGGLE_BUTTON: 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(\n data: any[],\n values: string[],\n options = DefaultToggleButtonsFilterOptions,\n) {\n if (!data || !values) {\n return data\n }\n\n const customComparatorBtns: IToggleButton[] = []\n for (const btn of options.buttons) {\n if (btn.comparator) {\n customComparatorBtns.push(btn)\n }\n }\n\n let _data = data\n for (const val of values) {\n if (val === '') {\n continue\n }\n\n let cmp\n for (const btn of customComparatorBtns) {\n if (btn.value === val) {\n cmp = btn.comparator\n }\n }\n if (cmp) {\n const filtered: any[] = []\n for (let i = 0; i < _data.length; i++) {\n if (cmp(val, _data[i], i) !== -1) {\n filtered.push(_data[i])\n }\n }\n _data = filtered\n } else {\n _data = textDataFilter(_data, val, {\n properties: options.properties,\n omitProperties: options.omitProperties,\n exact: options.exact,\n caseSensitive: options.caseSensitive,\n })\n }\n }\n return _data\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-toggle-buttons',\n templateUrl: './data-filter-toggle-buttons.component.html',\n styleUrls: ['./data-filter-toggle-buttons.component.scss'],\n providers: [DATA_FILTER_TOGGLE_BUTTON],\n standalone: false,\n})\nexport class DataFilterToggleButtonsComponent\n implements OnInit, 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)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: IToggleButtonsFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n // 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 (\n this._filterOptions &&\n hasProperty(this._filterOptions, 'initialValue')\n ) {\n this.value = this._optDefault('initialValue')\n }\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof IToggleButtonsFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultToggleButtonsFilterOptions[prop]\n }\n\n get options(): IToggleButtonsFilterOptions {\n return {\n properties: this.properties,\n omitProperties: this.omitProperties,\n multiple: this.multiple,\n selectionToggleable: this.selectionToggleable,\n buttons: this.buttons,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => toggleButtonsFilter(data, coerceArray(v), this.options)),\n startWith(\n toggleButtonsFilter(\n data,\n coerceArray(this._control.value),\n this.options,\n ),\n ),\n )\n }\n\n 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","<div\n class=\"btn-group\"\n role=\"group\"\n aria-label=\"Progress Filter\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n>\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm px-4\"\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.btn-lightgray]=\"!opt.selected\"\n [class.btn-primary]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n >\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 {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: { name: 'search', component: DataFilterSearchComponent },\n multi: true,\n },\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: { name: 'text', component: DataFilterTextComponent },\n multi: true,\n },\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: {\n name: 'toggle-buttons',\n component: DataFilterToggleButtonsComponent,\n },\n multi: true,\n },\n]\n\n@NgModule({\n declarations: [...filterComponents],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TheSeamFormFieldModule,\n FontAwesomeModule,\n TheSeamToggleGroupModule,\n TheSeamIconModule,\n ],\n providers: [...filterDefProviders],\n exports: [...filterComponents],\n})\nexport class TheSeamDataFiltersModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["_uid","i3"],"mappings":";;;;;;;;;;;;;;;;;;;;;MAwDa,mBAAmB,GAAG,IAAI,cAAc,CACnD,mBAAmB;MAER,2BAA2B,GAAG,IAAI,cAAc,CAC3D,0BAA0B;AAGtB,SAAU,cAAc,CAAI,QAA4B,EAAA;AAC5D,IAAA,OAAO,CAAC,OAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxE;AAEM,SAAU,kBAAkB,CAAC,OAAqB,EAAA;IACtD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,OAAwB,KAAI;QAClC,IAAI,IAAI,GAAG,OAAO;AAClB,QAAA,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE;AAC/B,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrB;AACA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH;AAEM,SAAU,uBAAuB,CACrC,OAAqB,EAAA;AAErB,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,EAAE,CAAC,EAAE,CAAC;IACf;AAEA,IAAA,OAAO,aAAa,CAClB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KACZ,CAAC,CAAC,kBAAkB,CAAC,IAAI,CACvB,SAAS,CAAC,SAAS,CAAC,EACpB,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAC3B,CACF,CACF;AACH;;MChFa,uBAAuB,GAAG,IAAI,cAAc,CACvD,mBAAmB;;MCHR,6BAA6B,GACxC,IAAI,cAAc,CAAsB,qBAAqB;;ACgBxD,MAAM,gBAAgB,GAAQ;AACnC,IAAA,OAAO,EAAE,mBAAmB;AAC5B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,IAAA,KAAK,EAAE,IAAI;;AAGN,MAAM,wBAAwB,GAAuB;AAC1D,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,aAAa,EAAE,KAAK;;AAGhB,SAAU,cAAc,CAC5B,IAAW,EACX,IAAY,EACZ,OAAO,GAAG,wBAAwB,EAAA;AAElC,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;AAClB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AACpB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS;IACpD,IAAI,CAAC,KAAK,EAAE;QACV,KAAK,GAAG,EAAE;QACV,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE;AACrC,YAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAChB,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAChE;QACH;AACA,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;YACjB;QACF;IACF;IAEA,MAAM,QAAQ,GAAU,EAAE;AAE1B,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,IAAI,MAAM,GAAG,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,EAAE;YACzB,IAAI,MAAM,GAAG,IAAI;AAEjB,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AAC1B,gBAAA,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE;AAC7B,gBAAA,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE;YAC/B;YAEA,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;gBACnB;YACF;QACF;IACF;AAEA,IAAA,OAAO,QAAQ;AACjB;AAEA,IAAIA,MAAI,GAAG,CAAC;MASC,uBAAuB,CAAA;AAgCxB,IAAA,gBAAA;AAGA,IAAA,cAAA;IAlCV,OAAO,uBAAuB;IAC9B,OAAO,+BAA+B;IAEtB,IAAI,GAAG,MAAM;AACb,IAAA,GAAG,GAAG,CAAA,MAAA,EAASA,MAAI,EAAE,EAAE;AAEvC,IAAA,QAAQ,GAAG,IAAI,kBAAkB,EAAE;AAE1B,IAAA,UAAU,GACjB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;AACvB,IAAA,cAAc,GACrB,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;AACX,IAAA,KAAK,GAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAC1C,IAAA,aAAa,GACpC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;AAE1B,IAAA,WAAW;AACX,IAAA,OAAO;IAEhB,IACI,KAAK,CAAC,KAAwB,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAA,CAAE,GAAG,EAAE;QAC1D,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAChC;IACF;AAEgB,IAAA,kBAAkB;IAElC,WAAA,CAEU,gBAAqC,EAGrC,cAAyC,EAAA;QAHzC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAGhB,IAAA,CAAA,cAAc,GAAd,cAAc;AAEtB,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;IACH;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;IACvC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC;IAC1C;AAEQ,IAAA,WAAW,CAAqC,IAAO,EAAA;QAC7D,IACE,IAAI,CAAC,cAAc;AACnB,YAAA,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAC/D;AACA,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAClC;AACA,QAAA,OAAO,wBAAwB,CAAC,IAAI,CAAC;IACvC;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO;AACL,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,SAAS;AACxC,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,SAAS;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC;IACH;AAEO,IAAA,MAAM,CAAI,IAAS,EAAA;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EACjD,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACnE;IACH;IAEO,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;IACH;uGAtFW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA+BxB,6BAA6B,EAAA,EAAA,EAAA,KAAA,EAG7B,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAlC1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,KAAA,EAAA,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,EAHvB,CAAC,gBAAgB,CAAC,0BClG/B,gdAiBA,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,yKAAA,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;;ADiG2B,UAAA,CAAA;AAAf,IAAA,YAAY;AAA6C,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA;AAC1C,UAAA,CAAA;AAAf,IAAA,YAAY;AACa,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA;2FAfxB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,SAAA,EAGtB,CAAC,gBAAgB,CAAC,cACjB,KAAK,EAAA,QAAA,EAAA,gdAAA,EAAA,MAAA,EAAA,CAAA,wPAAA,CAAA,EAAA;;0BAiCd,MAAM;2BAAC,6BAA6B;;0BAEpC;;0BACA,MAAM;2BAAC,2BAA2B;;sBAzBpC;;sBAEA;;sBAEA;;sBACA;;sBAGA;;sBACA;;sBAEA;;;AEvFI,MAAM,kBAAkB,GAAQ;AACrC,IAAA,OAAO,EAAE,mBAAmB;AAC5B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,IAAA,KAAK,EAAE,IAAI;;AAGN,MAAM,0BAA0B,GAAyB;AAC9D,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,aAAa,EAAE,KAAK;;AAGhB,SAAU,gBAAgB,CAC9B,IAAW,EACX,MAAc,EACd,OAAO,GAAG,0BAA0B,EAAA;IAEpC,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;AAC9C;AAEA,IAAIA,MAAI,GAAG,CAAC;MAUC,yBAAyB,CAAA;AAmC1B,IAAA,gBAAA;AAGA,IAAA,cAAA;IAnCV,OAAO,uBAAuB;IAC9B,OAAO,+BAA+B;IAEtB,IAAI,GAAG,QAAQ;AACf,IAAA,GAAG,GAAG,CAAA,QAAA,EAAWA,MAAI,EAAE,EAAE;AAEzC,IAAA,QAAQ,GAAG,IAAI,kBAAkB,EAAE;AAE1B,IAAA,UAAU,GACjB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;AACvB,IAAA,cAAc,GACrB,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;AACX,IAAA,KAAK,GAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAC1C,IAAA,aAAa,GACpC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;IAE1B,WAAW,GAA8B,WAAW;IACpD,IAAI,GAAgC,QAAQ;AAC5C,IAAA,OAAO;IAEhB,IACI,KAAK,CAAC,KAAwB,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAA,CAAE,GAAG,EAAE;QAC1D,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAChC;IACF;AAEgB,IAAA,kBAAkB;IAElC,WAAA,CAEU,gBAAqC,EAGrC,cAA2C,EAAA;QAH3C,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAGhB,IAAA,CAAA,cAAc,GAAd,cAAc;AAEtB,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;IACH;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;IACvC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC;IAC1C;AAEQ,IAAA,WAAW,CAAuC,IAAO,EAAA;QAC/D,IACE,IAAI,CAAC,cAAc;AACnB,YAAA,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAC/D;AACA,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAClC;AACA,QAAA,OAAO,0BAA0B,CAAC,IAAI,CAAC;IACzC;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO;AACL,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,SAAS;AACxC,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,SAAS;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC;IACH;AAEO,IAAA,MAAM,CAAI,IAAS,EAAA;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EACnD,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACrE;IACH;IAEO,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;IACH;uGAzFW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAkC1B,6BAA6B,EAAA,EAAA,EAAA,KAAA,EAG7B,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AArC1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,KAAA,EAAA,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,EAJzB,CAAC,kBAAkB,CAAC,0BC7DjC,0yBA0BA,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,yKAAA,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;;ADsD2B,UAAA,CAAA;AAAf,IAAA,YAAY;AAA6C,CAAA,EAAA,yBAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA;AAC1C,UAAA,CAAA;AAAf,IAAA,YAAY;AACa,CAAA,EAAA,yBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA;2FAjBxB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBARrC,SAAS;+BACE,yBAAyB,EAAA,SAAA,EAGxB,CAAC,kBAAkB,CAAC,mBACd,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,KAAK,EAAA,QAAA,EAAA,0yBAAA,EAAA,MAAA,EAAA,CAAA,8VAAA,CAAA,EAAA;;0BAoCd,MAAM;2BAAC,6BAA6B;;0BAEpC;;0BACA,MAAM;2BAAC,2BAA2B;;sBA1BpC;;sBAEA;;sBAEA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBAEA;;;AE7DI,MAAM,yBAAyB,GAAQ;AAC5C,IAAA,OAAO,EAAE,mBAAmB;AAC5B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,gCAAgC,CAAC;AAC/D,IAAA,KAAK,EAAE,IAAI;;AAgBN,MAAM,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;;AAGhB,SAAU,mBAAmB,CACjC,IAAW,EACX,MAAgB,EAChB,OAAO,GAAG,iCAAiC,EAAA;AAE3C,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AACpB,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,oBAAoB,GAAoB,EAAE;AAChD,IAAA,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,GAAG,CAAC,UAAU,EAAE;AAClB,YAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC;IACF;IAEA,IAAI,KAAK,GAAG,IAAI;AAChB,IAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACxB,QAAA,IAAI,GAAG,KAAK,EAAE,EAAE;YACd;QACF;AAEA,QAAA,IAAI,GAAG;AACP,QAAA,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE;AACtC,YAAA,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG,EAAE;AACrB,gBAAA,GAAG,GAAG,GAAG,CAAC,UAAU;YACtB;QACF;QACA,IAAI,GAAG,EAAE;YACP,MAAM,QAAQ,GAAU,EAAE;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;gBACzB;YACF;YACA,KAAK,GAAG,QAAQ;QAClB;aAAO;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;QACJ;IACF;AACA,IAAA,OAAO,KAAK;AACd;AAEA,IAAI,IAAI,GAAG,CAAC;MASC,gCAAgC,CAAA;AA6BjC,IAAA,gBAAA;AAGA,IAAA,cAAA;IA7BM,IAAI,GAAG,gBAAgB;AACvB,IAAA,GAAG,GAAG,CAAA,gBAAA,EAAmB,IAAI,EAAE,EAAE;AAEjD,IAAA,QAAQ,GAAG,IAAI,kBAAkB,EAAE;AAE1B,IAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;AAC3C,IAAA,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;AACnD,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AACvC,IAAA,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC;AAC7D,IAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;AACrC,IAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACjC,IAAA,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;IAE1D,IACI,KAAK,CAAC,KAAwB,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,SAAS;;QAEzE,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAChC;IACF;AAEgB,IAAA,kBAAkB;IAElC,WAAA,CAEU,gBAAqC,EAGrC,cAAkD,EAAA;QAHlD,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAGhB,IAAA,CAAA,cAAc,GAAd,cAAc;QAEtB,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;IACH;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;QACrC,IACE,IAAI,CAAC,cAAc;YACnB,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,EAChD;YACA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;QAC/C;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC;IAC1C;AAEQ,IAAA,WAAW,CAA8C,IAAO,EAAA;QACtE,IACE,IAAI,CAAC,cAAc;AACnB,YAAA,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAC/D;AACA,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAClC;AACA,QAAA,OAAO,iCAAiC,CAAC,IAAI,CAAC;IAChD;AAEA,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;IACH;AAEO,IAAA,MAAM,CAAI,IAAS,EAAA;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EACnE,SAAS,CACP,mBAAmB,CACjB,IAAI,EACJ,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAChC,IAAI,CAAC,OAAO,CACb,CACF,CACF;IACH;IAEO,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;IACH;uGApGW,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA4BjC,6BAA6B,EAAA,EAAA,EAAA,KAAA,EAG7B,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AA/B1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,KAAA,EAAA,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,EAHhC,CAAC,yBAAyB,CAAC,0BC9GxC,iqBAwBA,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;;2FDyFa,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAP5C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EAAA,SAAA,EAGhC,CAAC,yBAAyB,CAAC,cAC1B,KAAK,EAAA,QAAA,EAAA,iqBAAA,EAAA;;0BA8Bd,MAAM;2BAAC,6BAA6B;;0BAEpC;;0BACA,MAAM;2BAAC,2BAA2B;;sBAvBpC;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;;AElHH,MAAM,gBAAgB,GAAG;IACvB,yBAAyB;IACzB,uBAAuB;IACvB,gCAAgC;CACjC;AAED,MAAM,kBAAkB,GAAG;AACzB,IAAA;AACE,QAAA,OAAO,EAAE,uBAAuB;QAChC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,yBAAyB,EAAE;AAClE,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA;AACD,IAAA;AACE,QAAA,OAAO,EAAE,uBAAuB;QAChC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,uBAAuB,EAAE;AAC9D,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA;AACD,IAAA;AACE,QAAA,OAAO,EAAE,uBAAuB;AAChC,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,SAAS,EAAE,gCAAgC;AAC5C,SAAA;AACD,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA;CACF;MAeY,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,iBAvCnC,yBAAyB;YACzB,uBAAuB;AACvB,YAAA,gCAAgC,aA2B9B,YAAY;YACZ,mBAAmB;YACnB,sBAAsB;YACtB,iBAAiB;YACjB,wBAAwB;AACxB,YAAA,iBAAiB,aAlCnB,yBAAyB;YACzB,uBAAuB;YACvB,gCAAgC,CAAA,EAAA,CAAA;AAqCrB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,aAHxB,CAAC,GAAG,kBAAkB,CAAC,YAPhC,YAAY;YACZ,mBAAmB;YACnB,sBAAsB;YACtB,iBAAiB;YACjB,wBAAwB;YACxB,iBAAiB,CAAA,EAAA,CAAA;;2FAKR,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAbpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,GAAG,gBAAgB,CAAC;AACnC,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,sBAAsB;wBACtB,iBAAiB;wBACjB,wBAAwB;wBACxB,iBAAiB;AAClB,qBAAA;AACD,oBAAA,SAAS,EAAE,CAAC,GAAG,kBAAkB,CAAC;AAClC,oBAAA,OAAO,EAAE,CAAC,GAAG,gBAAgB,CAAC;AAC/B,iBAAA;;;ACtDD;;AAEG;;;;"}
|