@sisense/sdk-ui 1.12.0 → 1.13.0
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/dist/ai/api/chat-rest-api.d.ts +3 -4
- package/dist/ai/api/hooks.d.ts +2 -2
- package/dist/ai/api/types.d.ts +2 -16
- package/dist/ai/buttons/scroll-to-bottom-button.d.ts +3 -0
- package/dist/ai/chat-config.d.ts +8 -0
- package/dist/ai/common/constants.d.ts +1 -0
- package/dist/ai/common/tooltip.d.ts +2 -2
- package/dist/ai/data-topics/data-topic-list.d.ts +0 -1
- package/dist/ai/icons/scroll-to-bottom-icon.d.ts +1 -0
- package/dist/ai/scroll-to-bottom.d.ts +7 -0
- package/dist/ai.cjs +87 -70
- package/dist/ai.js +833 -917
- package/dist/chart/helpers/use-synced-data.d.ts +1 -1
- package/dist/chart-options-processor/chart-options-service.d.ts +4 -0
- package/dist/chart-options-processor/subtype-to-design-options.d.ts +13 -1
- package/dist/chart-options-processor/translations/tooltip-utils.d.ts +2 -0
- package/dist/common/components/loading-overlay.d.ts +1 -0
- package/dist/common-filters/common-filters-connector.d.ts +9 -0
- package/dist/common-filters/selection-utils.d.ts +11 -0
- package/dist/common-filters/types.d.ts +14 -0
- package/dist/common-filters/use-common-filters.d.ts +13 -0
- package/dist/common-filters/utils.d.ts +9 -0
- package/dist/common-filters/widget-header-clear-selection-button.d.ts +3 -0
- package/dist/dashboard/components/dashboard-container.d.ts +1 -1
- package/dist/dashboard/dashboard.d.ts +1 -1
- package/dist/dashboard/types.d.ts +5 -2
- package/dist/dashboard/utils.d.ts +0 -3
- package/dist/dashboard-widget/translate-dashboard-filters.d.ts +4772 -2
- package/dist/dashboard-widget/translate-widget-data-options.d.ts +1 -1
- package/dist/dashboard-widget/translate-widget-filters.d.ts +200 -37
- package/dist/dashboard-widget/types.d.ts +1 -0
- package/dist/dashboard-widget/utils.d.ts +3 -1
- package/dist/filters/components/cascading-filter-tile/cascading-filter-tile.d.ts +25 -0
- package/dist/filters/components/cascading-filter-tile/cascading-level-filter.d.ts +21 -0
- package/dist/filters/components/cascading-filter-tile/index.d.ts +1 -0
- package/dist/filters/components/criteria-filter-tile/criteria-filter-operations.d.ts +2 -2
- package/dist/filters/components/criteria-filter-tile/criteria-filter-tile.d.ts +6 -0
- package/dist/filters/components/custom-filter-tile.d.ts +43 -0
- package/dist/filters/components/date-filter/date-range-filter-tile/date-range-filter-tile.d.ts +6 -0
- package/dist/filters/components/date-filter/relative-date-filter-tile/relative-date-filter-tile.d.ts +8 -2
- package/dist/filters/components/date-filter/relative-date-filter-tile/relative-date-filter.d.ts +2 -2
- package/dist/filters/components/filter-tile.d.ts +21 -1
- package/dist/filters/components/filters-panel/filters-panel-tile.d.ts +4 -2
- package/dist/filters/components/filters-panel/filters-panel.d.ts +4 -2
- package/dist/filters/components/member-filter-tile/member-filter-tile.d.ts +4 -1
- package/dist/filters/components/member-filter-tile/member-list.d.ts +1 -1
- package/dist/filters/hooks/use-synchronized-filter.d.ts +12 -0
- package/dist/filters/index.d.ts +2 -0
- package/dist/filters/utils.d.ts +7 -0
- package/dist/index.cjs +213 -167
- package/dist/index.d.ts +1 -0
- package/dist/index.js +23056 -18772
- package/dist/models/dashboard/dashboard-model.d.ts +12 -8
- package/dist/models/dashboard/get-dashboard-model.d.ts +2 -1
- package/dist/models/dashboard/translate-dashboard-utils.d.ts +3 -1
- package/dist/models/dashboard/types.d.ts +3 -0
- package/dist/models/widget/get-widget-model.d.ts +2 -1
- package/dist/models/widget/translate-widget.d.ts +5 -2
- package/dist/models/widget/types.d.ts +9 -0
- package/dist/models/widget/widget-model.d.ts +31 -1
- package/dist/query/query-result-date-formatting.d.ts +1 -0
- package/dist/translation/resources/en.d.ts +4 -0
- package/dist/translation/resources/index.d.ts +8 -0
- package/dist/types.d.ts +9 -3
- package/dist/useQuery-C8plkncQ.cjs +603 -0
- package/dist/{useQuery-0UWck_2A.js → useQuery-D5W0RM1R.js} +20786 -20529
- package/package.json +10 -10
- package/dist/useQuery-DVHD0kJ-.cjs +0 -603
|
@@ -21,7 +21,9 @@ export declare function getRootPanelItem(item: PanelItem): PanelItem;
|
|
|
21
21
|
export declare function getSortType(jaqlSort: `${JaqlSortDirection}` | undefined): SortDirection;
|
|
22
22
|
/**
|
|
23
23
|
* Merges two arrays of filter objects, prioritizing 'targetFilters' over 'sourceFilters',
|
|
24
|
-
* and removes duplicates based on filter compare id
|
|
24
|
+
* and removes duplicates based on filter compare id.
|
|
25
|
+
*
|
|
26
|
+
* Saves the 'sourceFilters' filters order, while adds new filters to the end of the array.
|
|
25
27
|
*
|
|
26
28
|
* @param {Filter[]} [sourceFilters=[]] - The source array of filter objects.
|
|
27
29
|
* @param {Filter[]} [targetFilters=[]] - The target array of filter objects.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { CascadingFilter, Filter } from '@sisense/sdk-data';
|
|
3
|
+
import { FilterVariant } from '../common/filter-utils.js';
|
|
4
|
+
/**
|
|
5
|
+
* Props for {@link CascadingFilterTile}
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export interface CascadingFilterTileProps {
|
|
10
|
+
/** Cascading filter object to initialize filter type and default values */
|
|
11
|
+
filter: CascadingFilter;
|
|
12
|
+
/** Arrangement of the filter inputs. Use vertical for standard filter tiles and horizontal for toolbars */
|
|
13
|
+
arrangement?: FilterVariant;
|
|
14
|
+
/** Callback returning filter object, or null for failure */
|
|
15
|
+
onChange: (filter: Filter) => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* UI component representing group of cascading (dependent) filters.
|
|
19
|
+
*
|
|
20
|
+
* @param props - Cascading filter tile props
|
|
21
|
+
* @returns Cascading filter tile component
|
|
22
|
+
* @group Filter Tiles
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export declare const CascadingFilterTile: import("react").FunctionComponent<CascadingFilterTileProps>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Filter } from '@sisense/sdk-data';
|
|
2
|
+
/**
|
|
3
|
+
* Props of the {@link CascadingLevelFilterTile} component
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export type CascadingLevelFilterTileProps = {
|
|
8
|
+
/** Filter to display */
|
|
9
|
+
filter: Filter;
|
|
10
|
+
parentFilters: Filter[];
|
|
11
|
+
/** Callback to handle filter change */
|
|
12
|
+
onChange: (filter: Filter | null) => void;
|
|
13
|
+
/** Whether the filter is the last in the list */
|
|
14
|
+
isLast?: boolean;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Filter tile component that renders a level filter based on its type
|
|
18
|
+
*
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export declare const CascadingLevelFilterTile: ({ filter, parentFilters, onChange, isLast, }: CascadingLevelFilterTileProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { CascadingFilterTile, type CascadingFilterTileProps } from './cascading-filter-tile';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Measure } from '@sisense/sdk-data';
|
|
1
|
+
import { Filter, Measure } from '@sisense/sdk-data';
|
|
2
2
|
import { CriteriaFilterType } from './criteria-filter-tile';
|
|
3
3
|
/**
|
|
4
4
|
* Collection of filter options for the {@link CriteriaFilterMenu},
|
|
@@ -37,7 +37,7 @@ export type FilterOptionType = keyof typeof FilterOption;
|
|
|
37
37
|
* @internal
|
|
38
38
|
*/
|
|
39
39
|
export type FilterInfo = {
|
|
40
|
-
fn:
|
|
40
|
+
fn: (...args: any[]) => Filter;
|
|
41
41
|
inputCount: number;
|
|
42
42
|
symbols: string[];
|
|
43
43
|
message: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
import { FilterTileDesignOptions } from '../filter-tile.js';
|
|
2
3
|
import { ExcludeFilter, Filter, Measure, NumericFilter, RankingFilter, TextFilter } from '@sisense/sdk-data';
|
|
3
4
|
import { FilterVariant } from '../common/filter-utils.js';
|
|
4
5
|
/**
|
|
@@ -15,6 +16,11 @@ export interface CriteriaFilterTileProps {
|
|
|
15
16
|
onUpdate: (filter: Filter | null) => void;
|
|
16
17
|
/** List of available measures to rank by. Required only for ranking filters. */
|
|
17
18
|
measures?: Measure[];
|
|
19
|
+
/**
|
|
20
|
+
* Design options for the filter tile component
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
tileDesignOptions?: FilterTileDesignOptions;
|
|
18
24
|
}
|
|
19
25
|
export type CriteriaFilterType = NumericFilter | TextFilter | RankingFilter | ExcludeFilter;
|
|
20
26
|
/**
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { Filter } from '@sisense/sdk-data';
|
|
3
|
+
/**
|
|
4
|
+
* Props for {@link CustomFilterTile}
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export interface CustomFilterTileProps {
|
|
9
|
+
/** Custom filter. */
|
|
10
|
+
filter: Filter;
|
|
11
|
+
/**
|
|
12
|
+
* Callback to handle changes in custom filter.
|
|
13
|
+
*
|
|
14
|
+
* @param filter - Custom filter
|
|
15
|
+
*/
|
|
16
|
+
onUpdate: (filter: Filter | null) => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* UI component for a custom filter defined with JAQL.
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* const filterJaql = { from: 10, to: 20000 };
|
|
25
|
+
*
|
|
26
|
+
* const [customFilter, setCustomFilter] = useState<Filter>(
|
|
27
|
+
* filterFactory.customFilter(DM.Commerce.Cost, filterJaql),
|
|
28
|
+
* );
|
|
29
|
+
*
|
|
30
|
+
* return (
|
|
31
|
+
* <CustomFilterTile
|
|
32
|
+
* filter={customFilter}
|
|
33
|
+
* onChange={(filter: Filter) => {
|
|
34
|
+
* setCustomFilter(filter);
|
|
35
|
+
* }}
|
|
36
|
+
* />
|
|
37
|
+
* );
|
|
38
|
+
* ```
|
|
39
|
+
* @param props - Custom filter tile props
|
|
40
|
+
* @returns Custom filter tile component
|
|
41
|
+
* @group Filter Tiles
|
|
42
|
+
*/
|
|
43
|
+
export declare const CustomFilterTile: import("react").FunctionComponent<CustomFilterTileProps>;
|
package/dist/filters/components/date-filter/date-range-filter-tile/date-range-filter-tile.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { LevelAttribute, DataSource, Filter } from '@sisense/sdk-data';
|
|
3
|
+
import { FilterTileDesignOptions } from '../../filter-tile';
|
|
3
4
|
export interface DateRangeFilterTileProps {
|
|
4
5
|
/**
|
|
5
6
|
* Filter tile title
|
|
@@ -47,6 +48,11 @@ export interface DateRangeFilterTileProps {
|
|
|
47
48
|
* @internal
|
|
48
49
|
*/
|
|
49
50
|
tiled?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Design options for the filter tile component
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
tileDesignOptions?: FilterTileDesignOptions;
|
|
50
56
|
}
|
|
51
57
|
/**
|
|
52
58
|
* Date Range Filter Tile component for filtering data by date range.
|
package/dist/filters/components/date-filter/relative-date-filter-tile/relative-date-filter-tile.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { Filter } from '@sisense/sdk-data';
|
|
3
3
|
import { FilterVariant } from '../../common/index.js';
|
|
4
|
+
import { FilterTileDesignOptions } from '../../filter-tile.js';
|
|
4
5
|
/**
|
|
5
6
|
* Props for {@link RelativeDateFilterTile}
|
|
6
7
|
*/
|
|
@@ -14,9 +15,9 @@ export interface RelativeDateFilterTileProps {
|
|
|
14
15
|
/**
|
|
15
16
|
* Callback function that is called when the relative date filter object should be updated.
|
|
16
17
|
*
|
|
17
|
-
* @param filter - Relative date filter
|
|
18
|
+
* @param filter - Relative date filter
|
|
18
19
|
*/
|
|
19
|
-
onUpdate: (filter: Filter
|
|
20
|
+
onUpdate: (filter: Filter) => void;
|
|
20
21
|
/**
|
|
21
22
|
* Limit of the date range that can be selected.
|
|
22
23
|
*/
|
|
@@ -24,6 +25,11 @@ export interface RelativeDateFilterTileProps {
|
|
|
24
25
|
maxDate: string;
|
|
25
26
|
minDate: string;
|
|
26
27
|
};
|
|
28
|
+
/**
|
|
29
|
+
* Design options for the filter tile component
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
tileDesignOptions?: FilterTileDesignOptions;
|
|
27
33
|
}
|
|
28
34
|
/**
|
|
29
35
|
* UI component that allows the user to filter date attributes according to
|
package/dist/filters/components/date-filter/relative-date-filter-tile/relative-date-filter.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RelativeDateFilter as RelativeDateFilterType } from '@sisense/sdk-data';
|
|
2
2
|
import { FilterVariant } from '../../common/index.js';
|
|
3
3
|
import { FunctionComponent } from 'react';
|
|
4
4
|
/**
|
|
@@ -7,7 +7,7 @@ import { FunctionComponent } from 'react';
|
|
|
7
7
|
export interface RelativeDateFilterProps {
|
|
8
8
|
filter: RelativeDateFilterType;
|
|
9
9
|
arrangement?: FilterVariant;
|
|
10
|
-
onUpdate: (filter:
|
|
10
|
+
onUpdate: (filter: RelativeDateFilterType) => void;
|
|
11
11
|
disabled: boolean;
|
|
12
12
|
limit?: {
|
|
13
13
|
maxDate: string;
|
|
@@ -1,11 +1,31 @@
|
|
|
1
1
|
import type { FunctionComponent, ReactNode } from 'react';
|
|
2
2
|
import { FilterVariant } from './common/filter-utils';
|
|
3
|
+
import { DeepRequired } from 'ts-essentials';
|
|
4
|
+
/**
|
|
5
|
+
* Design options for the filter tile component.
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export interface FilterTileDesignOptions {
|
|
9
|
+
header?: {
|
|
10
|
+
shouldBeShown?: boolean;
|
|
11
|
+
isCollapsible?: boolean;
|
|
12
|
+
hasBorder?: boolean;
|
|
13
|
+
};
|
|
14
|
+
border?: {
|
|
15
|
+
shouldBeShown?: boolean;
|
|
16
|
+
};
|
|
17
|
+
footer?: {
|
|
18
|
+
shouldBeShown?: boolean;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export type CompleteFilterTileDesignOptions = DeepRequired<FilterTileDesignOptions>;
|
|
3
22
|
interface Props {
|
|
4
|
-
title
|
|
23
|
+
title?: string;
|
|
5
24
|
renderContent: (collapsed: boolean, tileDisabled: boolean) => ReactNode;
|
|
6
25
|
arrangement?: FilterVariant;
|
|
7
26
|
disabled?: boolean;
|
|
8
27
|
isDependent?: boolean;
|
|
28
|
+
design?: FilterTileDesignOptions;
|
|
9
29
|
onToggleDisabled?: () => void;
|
|
10
30
|
}
|
|
11
31
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Filter } from '@sisense/sdk-data';
|
|
1
|
+
import { DataSource, Filter } from '@sisense/sdk-data';
|
|
2
2
|
/**
|
|
3
3
|
* Props of the {@link FiltersPanelTile} component
|
|
4
4
|
*
|
|
@@ -9,10 +9,12 @@ export type FiltersPanelTileProps = {
|
|
|
9
9
|
filter: Filter;
|
|
10
10
|
/** Callback to handle filter change */
|
|
11
11
|
onChange: (filter: Filter | null) => void;
|
|
12
|
+
/** Default data source used for filter tiles */
|
|
13
|
+
defaultDataSource?: DataSource;
|
|
12
14
|
};
|
|
13
15
|
/**
|
|
14
16
|
* Filter tile component that renders a filter based on its type
|
|
15
17
|
*
|
|
16
18
|
* @internal
|
|
17
19
|
*/
|
|
18
|
-
export declare const FiltersPanelTile: ({ filter, onChange }: FiltersPanelTileProps) => import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export declare const FiltersPanelTile: ({ filter, onChange, defaultDataSource, }: FiltersPanelTileProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Filter } from '@sisense/sdk-data';
|
|
1
|
+
import { DataSource, Filter } from '@sisense/sdk-data';
|
|
2
2
|
/**
|
|
3
3
|
* Props of the {@link FiltersPanel} component
|
|
4
4
|
*
|
|
@@ -9,10 +9,12 @@ export type FiltersPanelProps = {
|
|
|
9
9
|
filters: Filter[];
|
|
10
10
|
/** Callback to handle changes in filters */
|
|
11
11
|
onFiltersChange: (filters: Filter[]) => void;
|
|
12
|
+
/** Default data source used for filter tiles */
|
|
13
|
+
defaultDataSource?: DataSource;
|
|
12
14
|
};
|
|
13
15
|
/**
|
|
14
16
|
* Filters panel component that renders a list of filter tiles
|
|
15
17
|
*
|
|
16
18
|
* @internal
|
|
17
19
|
*/
|
|
18
|
-
export declare const FiltersPanel: ({ filters, onFiltersChange }: FiltersPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export declare const FiltersPanel: ({ filters, onFiltersChange, defaultDataSource, }: FiltersPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Attribute, DataSource, Filter } from '@sisense/sdk-data';
|
|
2
2
|
import { FunctionComponent } from 'react';
|
|
3
|
+
import { FilterTileDesignOptions } from '../filter-tile';
|
|
3
4
|
/**
|
|
4
5
|
* Props for {@link MemberFilterTile}
|
|
5
6
|
*/
|
|
@@ -20,6 +21,8 @@ export interface MemberFilterTileProps {
|
|
|
20
21
|
onChange: (filter: Filter | null) => void;
|
|
21
22
|
/** List of filters this filter is dependent on */
|
|
22
23
|
parentFilters?: Filter[];
|
|
24
|
+
/** Design options for the tile @internal */
|
|
25
|
+
tileDesignOptions?: FilterTileDesignOptions;
|
|
23
26
|
}
|
|
24
27
|
/**
|
|
25
28
|
* UI component that allows the user to select members to include/exclude in a
|
|
@@ -3,7 +3,7 @@ import { Member, SelectedMember } from './members-reducer';
|
|
|
3
3
|
export interface MemberListProps {
|
|
4
4
|
members: Member[];
|
|
5
5
|
selectedMembers: SelectedMember[];
|
|
6
|
-
onSelectMember: (member: Member) => void;
|
|
6
|
+
onSelectMember: (member: Member, isSelected: boolean) => void;
|
|
7
7
|
selectAllMembers: () => void;
|
|
8
8
|
clearAllMembers: () => void;
|
|
9
9
|
disabled: boolean;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Filter } from '@sisense/sdk-data';
|
|
2
|
+
/**
|
|
3
|
+
* Filter tiles supposed to be Controlled components (stateless) and to react on passed `filter`.
|
|
4
|
+
* But to achieve backward compatibility, we also need to handle `filter` as internal state
|
|
5
|
+
* in case of using Filter tile as Uncontrolled component (statefull).
|
|
6
|
+
*
|
|
7
|
+
* This hook helps with synchronization for both patterns.
|
|
8
|
+
*/
|
|
9
|
+
export declare function useSynchronizedFilter<TFilter extends Filter = Filter>(filterFromProps: TFilter | null, updateFilterFromProps: (filter: TFilter) => void, createEmptyFilter?: () => TFilter): {
|
|
10
|
+
filter: TFilter;
|
|
11
|
+
updateFilter: (newFilter: TFilter) => void;
|
|
12
|
+
};
|
package/dist/filters/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export * from './components/member-filter-tile';
|
|
2
2
|
export * from './components/date-filter';
|
|
3
3
|
export * from './components/criteria-filter-tile';
|
|
4
|
+
export * from './components/cascading-filter-tile';
|
|
4
5
|
export * from './components/filters-panel';
|
|
6
|
+
export * from './components/custom-filter-tile';
|
|
5
7
|
export { type FilterVariant } from './components/common/filter-utils';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Filter } from '@sisense/sdk-data';
|
|
2
|
+
/**
|
|
3
|
+
* Clones a filter with a toggled 'disabled' state.
|
|
4
|
+
* @param filter - Filter to clone
|
|
5
|
+
*/
|
|
6
|
+
export declare const cloneFilterAndToggleDisabled: <TFilter extends Filter>(filter: TFilter) => TFilter;
|
|
7
|
+
export declare const cloneFilter: <TFilter extends Filter>(filter: TFilter) => TFilter;
|