@asteby/metacore-ui 2.6.2 → 2.8.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/data-table/column-filter-control.d.ts +114 -0
- package/dist/data-table/column-filter-control.d.ts.map +1 -0
- package/dist/data-table/column-filter-control.js +329 -0
- package/dist/data-table/column-filter-control.js.map +1 -0
- package/dist/data-table/filterable-column-header.d.ts +7 -42
- package/dist/data-table/filterable-column-header.d.ts.map +1 -1
- package/dist/data-table/filterable-column-header.js +8 -193
- package/dist/data-table/filterable-column-header.js.map +1 -1
- package/dist/data-table/index.d.ts +1 -0
- package/dist/data-table/index.d.ts.map +1 -1
- package/dist/data-table/index.js +1 -0
- package/dist/data-table/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { PopoverContent } from '../primitives/popover';
|
|
3
|
+
export interface FilterOption {
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
icon?: string;
|
|
7
|
+
color?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Optional occurrence count for this value across the (server-side) dataset.
|
|
10
|
+
* Set by `facet` filters (see the `/facets` endpoint) and rendered muted +
|
|
11
|
+
* right-aligned in the option row. Absent for inline/relation options.
|
|
12
|
+
*/
|
|
13
|
+
count?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Canonical filter-type union shared by every metacore app that renders a
|
|
17
|
+
* DynamicTable or DynamicKanban. Kept open for extension — new niches (BI
|
|
18
|
+
* dashboards, CRM, inventory, catalog) can add variants here instead of each
|
|
19
|
+
* forking the type.
|
|
20
|
+
*/
|
|
21
|
+
export type ColumnFilterType = 'select' | 'boolean' | 'text' | 'number_range' | 'date_range'
|
|
22
|
+
/**
|
|
23
|
+
* Like `select` but the options are resolved server-side from a relation
|
|
24
|
+
* (`filterSearchEndpoint = /options/<ref>`) rather than declared inline.
|
|
25
|
+
* Renders the same multi-value checkbox combobox; the host loads + caches
|
|
26
|
+
* the options into `filterOptions` before they arrive.
|
|
27
|
+
*/
|
|
28
|
+
| 'dynamic_select'
|
|
29
|
+
/**
|
|
30
|
+
* A free-text column upgraded to a value picker: instead of a bare
|
|
31
|
+
* "Contiene..." box, it lazily loads the distinct values of the column
|
|
32
|
+
* (with occurrence counts) from a `/facets` endpoint via `loadOptions` when
|
|
33
|
+
* the popover opens, and renders them as a multi-select combobox. Always
|
|
34
|
+
* degrades gracefully: if `loadOptions` is missing / fails / returns nothing
|
|
35
|
+
* it falls back to the plain "Contiene..." text input, and even when options
|
|
36
|
+
* exist it keeps a "Contiene texto…" affordance that emits an `ILIKE:` match.
|
|
37
|
+
* Selected values serialize as equality/`IN:` just like `select`.
|
|
38
|
+
*/
|
|
39
|
+
| 'facet';
|
|
40
|
+
export interface ColumnFilterMeta {
|
|
41
|
+
filterable?: boolean;
|
|
42
|
+
filterType?: ColumnFilterType;
|
|
43
|
+
filterKey?: string;
|
|
44
|
+
filterOptions?: FilterOption[];
|
|
45
|
+
filterLoading?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Async search endpoint for server-driven option lookups. When set, the
|
|
48
|
+
* filter renders a searchable combobox backed by the app's API instead of
|
|
49
|
+
* iterating an in-memory filterOptions array. Apps wire this through the
|
|
50
|
+
* standard `/api/options/:model?field=` shape produced by
|
|
51
|
+
* kernel/dynamic.Service.Options.
|
|
52
|
+
*/
|
|
53
|
+
filterSearchEndpoint?: string;
|
|
54
|
+
selectedValues?: string[];
|
|
55
|
+
onFilterChange?: (filterKey: string, values: string[]) => void;
|
|
56
|
+
/**
|
|
57
|
+
* Lazy option loader for `facet` filters. Called with the current search
|
|
58
|
+
* term when the popover opens (and on debounced typing). Resolving to a
|
|
59
|
+
* non-empty array renders the value picker; resolving empty / rejecting
|
|
60
|
+
* degrades the filter to the plain "Contiene..." text input.
|
|
61
|
+
*/
|
|
62
|
+
loadOptions?: (q?: string) => Promise<FilterOption[]>;
|
|
63
|
+
}
|
|
64
|
+
export interface ColumnFilterControlProps {
|
|
65
|
+
/** Backend filter key (`f_<filterKey>=…`). */
|
|
66
|
+
filterKey: string;
|
|
67
|
+
filterType?: ColumnFilterType;
|
|
68
|
+
filterOptions?: FilterOption[];
|
|
69
|
+
filterLoading?: boolean;
|
|
70
|
+
filterSearchEndpoint?: string;
|
|
71
|
+
selectedValues?: string[];
|
|
72
|
+
onFilterChange?: (filterKey: string, values: string[]) => void;
|
|
73
|
+
/** Lazy option loader for `facet` filters (see ColumnFilterMeta.loadOptions). */
|
|
74
|
+
loadOptions?: (q?: string) => Promise<FilterOption[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Field label. Rendered inside the trigger in toolbar mode (`showLabel`), so a
|
|
77
|
+
* board/toolbar surface — which has no column headers — still names each
|
|
78
|
+
* filter. Ignored in the icon-only header mode.
|
|
79
|
+
*/
|
|
80
|
+
label?: string;
|
|
81
|
+
/**
|
|
82
|
+
* Toolbar mode: render a labeled chip trigger (`<ListFilter/> Label (n)`)
|
|
83
|
+
* instead of the icon-only header button. Use on the kanban filter bar.
|
|
84
|
+
*/
|
|
85
|
+
showLabel?: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Trigger style.
|
|
88
|
+
* - `'chip'` (default): the compact labeled/icon button (`showLabel` picks
|
|
89
|
+
* labeled vs icon-only) used in table headers + the kanban toolbar.
|
|
90
|
+
* - `'row'`: a full-width settings-style row — leading type `icon`, `label`,
|
|
91
|
+
* and a right-aligned value summary — for the redesigned Filtros panel.
|
|
92
|
+
*/
|
|
93
|
+
variant?: 'chip' | 'row';
|
|
94
|
+
/** Leading icon node for the `'row'` variant (a per-data-type glyph). */
|
|
95
|
+
icon?: React.ReactNode;
|
|
96
|
+
/**
|
|
97
|
+
* Pre-computed human summary of the active value(s) for the `'row'` variant's
|
|
98
|
+
* right side. Empty → the row shows "Cualquiera" in muted.
|
|
99
|
+
*/
|
|
100
|
+
valueSummary?: string;
|
|
101
|
+
align?: React.ComponentProps<typeof PopoverContent>['align'];
|
|
102
|
+
/** Extra classes on the trigger button. */
|
|
103
|
+
className?: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The per-column filter popover — extracted from `FilterableColumnHeader` so it
|
|
107
|
+
* can be reused OUTSIDE a TanStack table header (e.g. the DynamicKanban filter
|
|
108
|
+
* bar). Fully driven by plain props; no `Column` dependency. Supports `select`,
|
|
109
|
+
* `boolean`, `dynamic_select`, `text`, `number_range` and `date_range`, emitting
|
|
110
|
+
* the same wire values the backend `f_<key>` filters expect
|
|
111
|
+
* (`ILIKE:`/`GTE:`/`LTE:`/`YYYY-MM-DD_YYYY-MM-DD`/plain).
|
|
112
|
+
*/
|
|
113
|
+
export declare function ColumnFilterControl({ filterKey, filterType, filterOptions, filterLoading, filterSearchEndpoint, selectedValues: selectedValuesProp, onFilterChange, loadOptions, label, showLabel, variant, icon, valueSummary, align, className, }: ColumnFilterControlProps): React.JSX.Element | null;
|
|
114
|
+
//# sourceMappingURL=column-filter-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-filter-control.d.ts","sourceRoot":"","sources":["../../src/data-table/column-filter-control.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAU9B,OAAO,EAEL,cAAc,EAEf,MAAM,sBAAsB,CAAA;AAY7B,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,SAAS,GACT,MAAM,GACN,cAAc,GACd,YAAY;AACd;;;;;GAKG;GACD,gBAAgB;AAClB;;;;;;;;;GASG;GACD,OAAO,CAAA;AAEX,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAC9D;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;CACtD;AAED,MAAM,WAAW,wBAAwB;IACvC,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAC9D,iFAAiF;IACjF,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACrD;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACxB,yEAAyE;IACzE,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5D,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,UAAqB,EACrB,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,cAAc,EAAE,kBAAkB,EAClC,cAAc,EACd,WAAW,EACX,KAAK,EACL,SAAiB,EACjB,OAAgB,EAChB,IAAI,EACJ,YAAY,EACZ,KAAe,EACf,SAAS,GACV,EAAE,wBAAwB,4BA+e1B"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { CheckIcon } from '@radix-ui/react-icons';
|
|
4
|
+
import { format } from 'date-fns';
|
|
5
|
+
import { es } from 'date-fns/locale';
|
|
6
|
+
import {} from 'react-day-picker';
|
|
7
|
+
import { ChevronRight, ListFilter } from 'lucide-react';
|
|
8
|
+
import { cn } from '../lib/utils';
|
|
9
|
+
import { resolveColorCss } from '../lib/option-colors';
|
|
10
|
+
import { Button } from '../primitives/button';
|
|
11
|
+
import { Label } from '../primitives/label';
|
|
12
|
+
import { Popover, PopoverContent, PopoverTrigger, } from '../primitives/popover';
|
|
13
|
+
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from '../primitives/command';
|
|
14
|
+
import { Input } from '../primitives/input';
|
|
15
|
+
import { Calendar } from '../primitives/calendar';
|
|
16
|
+
/**
|
|
17
|
+
* The per-column filter popover — extracted from `FilterableColumnHeader` so it
|
|
18
|
+
* can be reused OUTSIDE a TanStack table header (e.g. the DynamicKanban filter
|
|
19
|
+
* bar). Fully driven by plain props; no `Column` dependency. Supports `select`,
|
|
20
|
+
* `boolean`, `dynamic_select`, `text`, `number_range` and `date_range`, emitting
|
|
21
|
+
* the same wire values the backend `f_<key>` filters expect
|
|
22
|
+
* (`ILIKE:`/`GTE:`/`LTE:`/`YYYY-MM-DD_YYYY-MM-DD`/plain).
|
|
23
|
+
*/
|
|
24
|
+
export function ColumnFilterControl({ filterKey, filterType = 'select', filterOptions, filterLoading, filterSearchEndpoint, selectedValues: selectedValuesProp, onFilterChange, loadOptions, label, showLabel = false, variant = 'chip', icon, valueSummary, align = 'start', className, }) {
|
|
25
|
+
// `select`, `boolean` and `dynamic_select` all render the same multi-value
|
|
26
|
+
// checkbox combobox; only the option source differs (inline vs relation
|
|
27
|
+
// endpoint). Treat them uniformly so a relation filter behaves like a static
|
|
28
|
+
// one once its options have loaded.
|
|
29
|
+
const isMultiSelect = filterType === 'select' ||
|
|
30
|
+
filterType === 'boolean' ||
|
|
31
|
+
filterType === 'dynamic_select';
|
|
32
|
+
const isFacet = filterType === 'facet';
|
|
33
|
+
const hasOptions = !!filterOptions && filterOptions.length > 0;
|
|
34
|
+
const selectedValues = new Set(selectedValuesProp || []);
|
|
35
|
+
const activeCount = selectedValues.size;
|
|
36
|
+
const rawTextValue = selectedValuesProp && selectedValuesProp.length > 0
|
|
37
|
+
? selectedValuesProp[0]
|
|
38
|
+
: '';
|
|
39
|
+
const displayTextValue = rawTextValue.replace(/^(ILIKE|LIKE|GT|LT|GTE|LTE):/, '');
|
|
40
|
+
const parseRangeValues = () => {
|
|
41
|
+
let min = '';
|
|
42
|
+
let max = '';
|
|
43
|
+
for (const v of selectedValuesProp || []) {
|
|
44
|
+
if (v.startsWith('GTE:'))
|
|
45
|
+
min = v.replace('GTE:', '');
|
|
46
|
+
if (v.startsWith('LTE:'))
|
|
47
|
+
max = v.replace('LTE:', '');
|
|
48
|
+
}
|
|
49
|
+
return { min, max };
|
|
50
|
+
};
|
|
51
|
+
const rangeValues = parseRangeValues();
|
|
52
|
+
// Date range is serialized as a single "YYYY-MM-DD_YYYY-MM-DD" value (same
|
|
53
|
+
// wire shape the backend expects from the legacy starter-core picker).
|
|
54
|
+
const parseDateRange = () => {
|
|
55
|
+
const val = selectedValuesProp && selectedValuesProp.length > 0
|
|
56
|
+
? selectedValuesProp[0]
|
|
57
|
+
: '';
|
|
58
|
+
if (!val || !val.includes('_'))
|
|
59
|
+
return undefined;
|
|
60
|
+
const [from, to] = val.split('_');
|
|
61
|
+
const fromDate = new Date(`${from}T00:00:00`);
|
|
62
|
+
const toDate = new Date(`${to}T00:00:00`);
|
|
63
|
+
if (isNaN(fromDate.getTime()) || isNaN(toDate.getTime()))
|
|
64
|
+
return undefined;
|
|
65
|
+
return { from: fromDate, to: toDate };
|
|
66
|
+
};
|
|
67
|
+
const isActive = (() => {
|
|
68
|
+
if (filterType === 'text')
|
|
69
|
+
return rawTextValue !== '';
|
|
70
|
+
if (filterType === 'number_range')
|
|
71
|
+
return rangeValues.min !== '' || rangeValues.max !== '';
|
|
72
|
+
if (filterType === 'date_range')
|
|
73
|
+
return ((selectedValuesProp || []).length > 0 && selectedValuesProp[0] !== '');
|
|
74
|
+
return activeCount > 0;
|
|
75
|
+
})();
|
|
76
|
+
const [localTextValue, setLocalTextValue] = React.useState(displayTextValue);
|
|
77
|
+
const [localMin, setLocalMin] = React.useState(rangeValues.min);
|
|
78
|
+
const [localMax, setLocalMax] = React.useState(rangeValues.max);
|
|
79
|
+
const [localSelected, setLocalSelected] = React.useState(new Set(selectedValues));
|
|
80
|
+
const [localDateRange, setLocalDateRange] = React.useState(parseDateRange());
|
|
81
|
+
const [filterOpen, setFilterOpen] = React.useState(false);
|
|
82
|
+
const displayOptions = filterOptions || [];
|
|
83
|
+
const selectedKey = (selectedValuesProp || []).join(',');
|
|
84
|
+
React.useEffect(() => {
|
|
85
|
+
setLocalTextValue(displayTextValue);
|
|
86
|
+
}, [displayTextValue]);
|
|
87
|
+
React.useEffect(() => {
|
|
88
|
+
setLocalMin(rangeValues.min);
|
|
89
|
+
setLocalMax(rangeValues.max);
|
|
90
|
+
}, [rangeValues.min, rangeValues.max]);
|
|
91
|
+
React.useEffect(() => {
|
|
92
|
+
setLocalDateRange(parseDateRange());
|
|
93
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
94
|
+
}, [selectedKey]);
|
|
95
|
+
React.useEffect(() => {
|
|
96
|
+
if (filterOpen) {
|
|
97
|
+
setLocalSelected(new Set(selectedValuesProp || []));
|
|
98
|
+
}
|
|
99
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
100
|
+
}, [filterOpen, selectedKey]);
|
|
101
|
+
const canFilter = hasOptions ||
|
|
102
|
+
filterType === 'text' ||
|
|
103
|
+
filterType === 'number_range' ||
|
|
104
|
+
filterType === 'date_range' ||
|
|
105
|
+
// A facet is always actionable: worst case it degrades to a text "Contiene"
|
|
106
|
+
// box, so it never renders a dead trigger.
|
|
107
|
+
isFacet ||
|
|
108
|
+
// A relation filter is still actionable while its options stream in —
|
|
109
|
+
// surface the trigger (the combobox shows a loading/empty state).
|
|
110
|
+
(filterType === 'dynamic_select' && !!filterSearchEndpoint);
|
|
111
|
+
if (!canFilter)
|
|
112
|
+
return null;
|
|
113
|
+
const handleLocalToggle = (value) => {
|
|
114
|
+
setLocalSelected((prev) => {
|
|
115
|
+
const next = new Set(prev);
|
|
116
|
+
if (next.has(value))
|
|
117
|
+
next.delete(value);
|
|
118
|
+
else
|
|
119
|
+
next.add(value);
|
|
120
|
+
return next;
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
const handleApplySelect = () => {
|
|
124
|
+
onFilterChange?.(filterKey, Array.from(localSelected));
|
|
125
|
+
setFilterOpen(false);
|
|
126
|
+
};
|
|
127
|
+
const handleClearFilter = () => {
|
|
128
|
+
onFilterChange?.(filterKey, []);
|
|
129
|
+
setLocalTextValue('');
|
|
130
|
+
setLocalMin('');
|
|
131
|
+
setLocalMax('');
|
|
132
|
+
setLocalSelected(new Set());
|
|
133
|
+
setLocalDateRange(undefined);
|
|
134
|
+
};
|
|
135
|
+
const handleDateRangeApply = () => {
|
|
136
|
+
if (localDateRange?.from) {
|
|
137
|
+
const from = format(localDateRange.from, 'yyyy-MM-dd');
|
|
138
|
+
const to = localDateRange.to
|
|
139
|
+
? format(localDateRange.to, 'yyyy-MM-dd')
|
|
140
|
+
: from;
|
|
141
|
+
onFilterChange?.(filterKey, [`${from}_${to}`]);
|
|
142
|
+
}
|
|
143
|
+
setFilterOpen(false);
|
|
144
|
+
};
|
|
145
|
+
const handleTextSubmit = () => {
|
|
146
|
+
const trimmed = localTextValue.trim();
|
|
147
|
+
if (trimmed) {
|
|
148
|
+
onFilterChange?.(filterKey, [`ILIKE:${trimmed}`]);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
onFilterChange?.(filterKey, []);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
const handleNumberRangeSubmit = () => {
|
|
155
|
+
const values = [];
|
|
156
|
+
if (localMin.trim())
|
|
157
|
+
values.push(`GTE:${localMin.trim()}`);
|
|
158
|
+
if (localMax.trim())
|
|
159
|
+
values.push(`LTE:${localMax.trim()}`);
|
|
160
|
+
onFilterChange?.(filterKey, values);
|
|
161
|
+
};
|
|
162
|
+
const localHasChanges = (() => {
|
|
163
|
+
if (isMultiSelect) {
|
|
164
|
+
const current = new Set(selectedValuesProp || []);
|
|
165
|
+
if (localSelected.size !== current.size)
|
|
166
|
+
return true;
|
|
167
|
+
for (const v of localSelected) {
|
|
168
|
+
if (!current.has(v))
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
return false;
|
|
174
|
+
})();
|
|
175
|
+
const trigger = variant === 'row' ? (_jsxs("button", { type: 'button', "data-active": isActive || undefined, className: cn('group/row flex w-full items-center gap-2.5 rounded-lg px-2 py-1.5 text-left transition-colors', 'hover:bg-accent focus-visible:bg-accent focus-visible:outline-none', isActive && 'bg-accent/50', className), children: [_jsx("span", { className: cn('flex size-7 shrink-0 items-center justify-center rounded-md transition-colors', isActive
|
|
176
|
+
? 'bg-primary/15 text-primary'
|
|
177
|
+
: 'bg-muted text-muted-foreground group-hover/row:text-foreground'), children: icon ?? _jsx(ListFilter, { className: 'h-3.5 w-3.5' }) }), _jsx("span", { className: 'flex-1 truncate text-sm font-medium', children: label || filterKey }), _jsx("span", { className: cn('max-w-[46%] truncate text-xs', isActive ? 'font-medium text-foreground' : 'text-muted-foreground'), children: isActive && valueSummary
|
|
178
|
+
? valueSummary
|
|
179
|
+
: isActive && (isMultiSelect || isFacet) && activeCount > 0
|
|
180
|
+
? `${activeCount} seleccionados`
|
|
181
|
+
: 'Cualquiera' }), _jsx(ChevronRight, { className: 'size-3.5 shrink-0 text-muted-foreground/60 transition-transform group-hover/row:translate-x-0.5' })] })) : showLabel ? (_jsxs(Button, { variant: 'outline', size: 'sm', className: cn('h-8 gap-1.5 text-xs', isActive && 'border-primary/60 text-primary', className), children: [_jsx(ListFilter, { className: 'h-3.5 w-3.5' }), label || filterKey, isActive && (isMultiSelect || isFacet) && activeCount > 0 && (_jsx("span", { className: 'ml-0.5 flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-bold text-primary-foreground', children: activeCount })), isActive && !isMultiSelect && !isFacet && (_jsx("span", { className: 'ml-0.5 h-1.5 w-1.5 rounded-full bg-primary' }))] })) : (_jsx(Button, { variant: 'ghost', size: 'icon', className: cn('h-7 w-7 shrink-0', isActive
|
|
182
|
+
? 'text-primary hover:text-primary'
|
|
183
|
+
: 'opacity-70 hover:opacity-100', className), children: _jsxs("div", { className: 'relative', children: [_jsx(ListFilter, { className: 'h-3.5 w-3.5' }), isActive && (isMultiSelect || isFacet) && activeCount > 0 && (_jsx("span", { className: 'absolute -top-1.5 -right-1.5 flex h-3.5 min-w-3.5 items-center justify-center rounded-full bg-primary text-[9px] font-bold text-primary-foreground px-0.5', children: activeCount })), isActive && !isMultiSelect && !isFacet && (_jsx("span", { className: 'absolute -top-1 -right-1 flex h-2 w-2 rounded-full bg-primary' }))] }) }));
|
|
184
|
+
return (_jsxs(Popover, { modal: false, open: filterOpen, onOpenChange: setFilterOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: trigger }), _jsxs(PopoverContent, { className: cn('overflow-hidden rounded-xl p-0 shadow-lg', filterType === 'date_range'
|
|
185
|
+
? 'w-auto'
|
|
186
|
+
: isFacet
|
|
187
|
+
? 'w-[256px]'
|
|
188
|
+
: 'w-[228px]'), align: align, onCloseAutoFocus: (e) => e.preventDefault(), children: [label && (_jsxs("div", { className: 'flex items-center gap-2 border-b bg-muted/40 px-3 py-2', children: [icon && (_jsx("span", { className: 'text-muted-foreground [&>svg]:size-3.5', children: icon })), _jsx("span", { className: 'truncate text-xs font-semibold', children: label })] })), isMultiSelect && (hasOptions || filterType === 'dynamic_select') && (_jsxs(Command, { children: [_jsx(CommandInput, { placeholder: 'Buscar...' }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: filterLoading ? 'Cargando…' : 'Sin resultados.' }), _jsx(CommandGroup, { children: displayOptions.map((option) => {
|
|
189
|
+
const isSelected = localSelected.has(option.value);
|
|
190
|
+
return (_jsxs(CommandItem, { onSelect: () => handleLocalToggle(option.value), onPointerDown: (e) => e.preventDefault(), children: [_jsx("div", { className: cn('mr-2 flex size-4 shrink-0 items-center justify-center rounded-sm border transition-colors', isSelected
|
|
191
|
+
? // Foreground/background is contrast-guaranteed in
|
|
192
|
+
// both themes, so the checkmark stays legible even
|
|
193
|
+
// when a brand's primary/primary-foreground pair
|
|
194
|
+
// collapses to dark-on-dark in dark mode.
|
|
195
|
+
'border-foreground bg-foreground text-background'
|
|
196
|
+
: 'border-muted-foreground/50 opacity-70 [&_svg]:invisible'), children: _jsx(CheckIcon, { className: 'h-3.5 w-3.5' }) }), option.color && (_jsx("span", { className: 'mr-1 size-2.5 rounded-full shrink-0', style: {
|
|
197
|
+
backgroundColor: resolveColorCss(option.color),
|
|
198
|
+
} })), _jsx("span", { className: 'truncate', children: option.label }), typeof option.count === 'number' && (_jsx("span", { className: 'ml-auto pl-2 text-xs tabular-nums text-muted-foreground', children: option.count }))] }, option.value));
|
|
199
|
+
}) })] }), _jsxs("div", { className: 'border-t p-2 flex gap-1.5', children: [_jsx(Button, { size: 'sm', variant: 'outline', className: 'h-7 flex-1 text-xs', onClick: () => {
|
|
200
|
+
handleClearFilter();
|
|
201
|
+
setFilterOpen(false);
|
|
202
|
+
}, disabled: !isActive && localSelected.size === 0, children: "Limpiar" }), _jsxs(Button, { size: 'sm', className: 'h-7 flex-1 text-xs', onClick: handleApplySelect, disabled: !localHasChanges && localSelected.size === 0, children: ["Aplicar", localSelected.size > 0 ? ` (${localSelected.size})` : ''] })] })] })), isFacet && (_jsx(FacetFilterBody, { filterKey: filterKey, selectedValues: selectedValuesProp || [], loadOptions: loadOptions, staticOptions: filterOptions, onFilterChange: onFilterChange, onClose: () => setFilterOpen(false) })), filterType === 'text' && (_jsxs("div", { className: 'p-2.5 space-y-2', children: [_jsx(Input, { placeholder: 'Contiene...', value: localTextValue, onChange: (e) => setLocalTextValue(e.target.value), onKeyDown: (e) => {
|
|
203
|
+
if (e.key === 'Enter')
|
|
204
|
+
handleTextSubmit();
|
|
205
|
+
}, className: 'h-8 text-sm', autoFocus: true }), _jsxs("div", { className: 'flex gap-1.5', children: [_jsx(Button, { size: 'sm', variant: 'outline', className: 'h-7 flex-1 text-xs', onClick: handleClearFilter, disabled: !isActive, children: "Limpiar" }), _jsx(Button, { size: 'sm', className: 'h-7 flex-1 text-xs', onClick: handleTextSubmit, children: "Aplicar" })] })] })), filterType === 'number_range' && (_jsxs("div", { className: 'p-2.5 space-y-2.5', children: [_jsxs("div", { className: 'grid grid-cols-2 gap-2', children: [_jsxs("div", { className: 'space-y-1', children: [_jsx(Label, { className: 'text-xs text-muted-foreground', children: "Min" }), _jsx(Input, { type: 'number', placeholder: '0', value: localMin, onChange: (e) => setLocalMin(e.target.value), onKeyDown: (e) => {
|
|
206
|
+
if (e.key === 'Enter')
|
|
207
|
+
handleNumberRangeSubmit();
|
|
208
|
+
}, className: 'h-8 text-sm', autoFocus: true })] }), _jsxs("div", { className: 'space-y-1', children: [_jsx(Label, { className: 'text-xs text-muted-foreground', children: "Max" }), _jsx(Input, { type: 'number', placeholder: '999999', value: localMax, onChange: (e) => setLocalMax(e.target.value), onKeyDown: (e) => {
|
|
209
|
+
if (e.key === 'Enter')
|
|
210
|
+
handleNumberRangeSubmit();
|
|
211
|
+
}, className: 'h-8 text-sm' })] })] }), _jsxs("div", { className: 'flex gap-1.5', children: [_jsx(Button, { size: 'sm', variant: 'outline', className: 'h-7 flex-1 text-xs', onClick: handleClearFilter, disabled: !isActive, children: "Limpiar" }), _jsx(Button, { size: 'sm', className: 'h-7 flex-1 text-xs', onClick: handleNumberRangeSubmit, children: "Aplicar" })] })] })), filterType === 'date_range' && (_jsxs("div", { children: [_jsx(Calendar, { mode: 'range', selected: localDateRange, onSelect: setLocalDateRange, locale: es, numberOfMonths: 1, className: 'p-2' }), localDateRange?.from && (_jsxs("div", { className: 'px-2 pb-1 text-center text-[11px] text-muted-foreground', children: [format(localDateRange.from, 'dd MMM yyyy', { locale: es }), localDateRange.to &&
|
|
212
|
+
localDateRange.to.getTime() !== localDateRange.from.getTime()
|
|
213
|
+
? ` — ${format(localDateRange.to, 'dd MMM yyyy', { locale: es })}`
|
|
214
|
+
: ' (un día)'] })), _jsxs("div", { className: 'border-t p-1.5 flex gap-1.5', children: [_jsx(Button, { size: 'sm', variant: 'outline', className: 'h-7 flex-1 text-xs', onClick: () => {
|
|
215
|
+
handleClearFilter();
|
|
216
|
+
setFilterOpen(false);
|
|
217
|
+
}, disabled: !isActive && !localDateRange, children: "Limpiar" }), _jsx(Button, { size: 'sm', className: 'h-7 flex-1 text-xs', onClick: handleDateRangeApply, disabled: !localDateRange?.from, children: "Aplicar" })] })] }))] })] }));
|
|
218
|
+
}
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
220
|
+
// Facet filter body — a text column upgraded to a value picker.
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
const ILIKE_PREFIX = 'ILIKE:';
|
|
223
|
+
/**
|
|
224
|
+
* Lazy value picker for `facet` filters. Loads the column's distinct values +
|
|
225
|
+
* counts when it mounts (the popover just opened), lets the user multi-select
|
|
226
|
+
* them (emitted as equality/`IN:`), and always keeps a free-text "Contiene…"
|
|
227
|
+
* affordance that emits an `ILIKE:` match. Degrades to a bare text input when
|
|
228
|
+
* `loadOptions` is missing, rejects, or returns nothing — so a facet is never a
|
|
229
|
+
* dead end. Its own hooks live here (not in the parent) so they only run while
|
|
230
|
+
* the popover is open.
|
|
231
|
+
*/
|
|
232
|
+
function FacetFilterBody({ filterKey, selectedValues, loadOptions, staticOptions, onFilterChange, onClose, }) {
|
|
233
|
+
// A single `ILIKE:` value means the field is in free-text mode; anything else
|
|
234
|
+
// is a set of picked facet values.
|
|
235
|
+
const seededFree = selectedValues.length === 1 && selectedValues[0].startsWith(ILIKE_PREFIX)
|
|
236
|
+
? selectedValues[0].slice(ILIKE_PREFIX.length)
|
|
237
|
+
: '';
|
|
238
|
+
const [query, setQuery] = React.useState('');
|
|
239
|
+
const [options, setOptions] = React.useState(staticOptions ?? []);
|
|
240
|
+
const [loading, setLoading] = React.useState(false);
|
|
241
|
+
const [loaded, setLoaded] = React.useState(false);
|
|
242
|
+
const [localSelected, setLocalSelected] = React.useState(() => new Set(seededFree ? [] : selectedValues));
|
|
243
|
+
const [freeText, setFreeText] = React.useState(seededFree);
|
|
244
|
+
// Load (and reload on debounced typing). No loader → straight to degraded
|
|
245
|
+
// text mode.
|
|
246
|
+
React.useEffect(() => {
|
|
247
|
+
if (!loadOptions) {
|
|
248
|
+
setLoaded(true);
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
let cancelled = false;
|
|
252
|
+
const handle = setTimeout(() => {
|
|
253
|
+
setLoading(true);
|
|
254
|
+
loadOptions(query.trim() || undefined)
|
|
255
|
+
.then((opts) => {
|
|
256
|
+
if (cancelled)
|
|
257
|
+
return;
|
|
258
|
+
setOptions(Array.isArray(opts) ? opts : []);
|
|
259
|
+
})
|
|
260
|
+
.catch(() => {
|
|
261
|
+
if (!cancelled)
|
|
262
|
+
setOptions([]);
|
|
263
|
+
})
|
|
264
|
+
.finally(() => {
|
|
265
|
+
if (cancelled)
|
|
266
|
+
return;
|
|
267
|
+
setLoading(false);
|
|
268
|
+
setLoaded(true);
|
|
269
|
+
});
|
|
270
|
+
}, query ? 250 : 0);
|
|
271
|
+
return () => {
|
|
272
|
+
cancelled = true;
|
|
273
|
+
clearTimeout(handle);
|
|
274
|
+
};
|
|
275
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
276
|
+
}, [query]);
|
|
277
|
+
const hasOptions = options.length > 0;
|
|
278
|
+
// Degraded: the loader settled with nothing (or there is no loader) → the
|
|
279
|
+
// field behaves like the classic "Contiene..." text filter.
|
|
280
|
+
const degraded = loaded && !loading && !hasOptions && query.trim() === '';
|
|
281
|
+
const toggle = (value) => {
|
|
282
|
+
setLocalSelected((prev) => {
|
|
283
|
+
const next = new Set(prev);
|
|
284
|
+
if (next.has(value))
|
|
285
|
+
next.delete(value);
|
|
286
|
+
else
|
|
287
|
+
next.add(value);
|
|
288
|
+
return next;
|
|
289
|
+
});
|
|
290
|
+
// Picking a value and typing free text are mutually exclusive on the wire
|
|
291
|
+
// (a single `f_<key>` can't be both `IN:` and `ILIKE:`), so a pick clears
|
|
292
|
+
// any pending free text.
|
|
293
|
+
setFreeText('');
|
|
294
|
+
};
|
|
295
|
+
const apply = () => {
|
|
296
|
+
const trimmed = freeText.trim();
|
|
297
|
+
if (trimmed) {
|
|
298
|
+
onFilterChange?.(filterKey, [`${ILIKE_PREFIX}${trimmed}`]);
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
onFilterChange?.(filterKey, Array.from(localSelected));
|
|
302
|
+
}
|
|
303
|
+
onClose();
|
|
304
|
+
};
|
|
305
|
+
const clear = () => {
|
|
306
|
+
onFilterChange?.(filterKey, []);
|
|
307
|
+
setLocalSelected(new Set());
|
|
308
|
+
setFreeText('');
|
|
309
|
+
onClose();
|
|
310
|
+
};
|
|
311
|
+
const canApply = localSelected.size > 0 || freeText.trim() !== '';
|
|
312
|
+
// Degraded → just the text box (the original "Contiene..." experience).
|
|
313
|
+
if (degraded) {
|
|
314
|
+
return (_jsxs("div", { className: 'p-2.5 space-y-2', children: [_jsx(Input, { placeholder: 'Contiene...', value: freeText, onChange: (e) => setFreeText(e.target.value), onKeyDown: (e) => {
|
|
315
|
+
if (e.key === 'Enter')
|
|
316
|
+
apply();
|
|
317
|
+
}, className: 'h-8 text-sm', autoFocus: true }), _jsxs("div", { className: 'flex gap-1.5', children: [_jsx(Button, { size: 'sm', variant: 'outline', className: 'h-7 flex-1 text-xs', onClick: clear, disabled: selectedValues.length === 0 && freeText === '', children: "Limpiar" }), _jsx(Button, { size: 'sm', className: 'h-7 flex-1 text-xs', onClick: apply, children: "Aplicar" })] })] }));
|
|
318
|
+
}
|
|
319
|
+
return (_jsxs(Command, { shouldFilter: false, children: [_jsx(CommandInput, { placeholder: 'Buscar valores...', value: query, onValueChange: setQuery }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: loading ? 'Cargando…' : 'Sin resultados.' }), hasOptions && (_jsx(CommandGroup, { children: options.map((option) => {
|
|
320
|
+
const isSelected = localSelected.has(option.value);
|
|
321
|
+
return (_jsxs(CommandItem, { value: option.value, onSelect: () => toggle(option.value), onPointerDown: (e) => e.preventDefault(), children: [_jsx("div", { className: cn('mr-2 flex size-4 shrink-0 items-center justify-center rounded-sm border transition-colors', isSelected
|
|
322
|
+
? 'border-foreground bg-foreground text-background'
|
|
323
|
+
: 'border-muted-foreground/50 opacity-70 [&_svg]:invisible'), children: _jsx(CheckIcon, { className: 'h-3.5 w-3.5' }) }), option.color && (_jsx("span", { className: 'mr-1 size-2.5 rounded-full shrink-0', style: { backgroundColor: resolveColorCss(option.color) } })), _jsx("span", { className: 'truncate', children: option.label }), typeof option.count === 'number' && (_jsx("span", { className: 'ml-auto pl-2 text-xs tabular-nums text-muted-foreground', children: option.count }))] }, option.value));
|
|
324
|
+
}) }))] }), _jsxs("div", { className: 'border-t p-2 space-y-2', children: [_jsx(Input, { placeholder: 'Contiene texto\u2026', value: freeText, onChange: (e) => setFreeText(e.target.value), onKeyDown: (e) => {
|
|
325
|
+
if (e.key === 'Enter')
|
|
326
|
+
apply();
|
|
327
|
+
}, className: 'h-7 text-xs' }), _jsxs("div", { className: 'flex gap-1.5', children: [_jsx(Button, { size: 'sm', variant: 'outline', className: 'h-7 flex-1 text-xs', onClick: clear, disabled: selectedValues.length === 0 && !canApply, children: "Limpiar" }), _jsxs(Button, { size: 'sm', className: 'h-7 flex-1 text-xs', onClick: apply, disabled: !canApply, children: ["Aplicar", localSelected.size > 0 ? ` (${localSelected.size})` : ''] })] })] })] }));
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=column-filter-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-filter-control.js","sourceRoot":"","sources":["../../src/data-table/column-filter-control.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { type Column } from '@tanstack/react-table';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
value: string;
|
|
6
|
-
icon?: string;
|
|
7
|
-
color?: string;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Canonical filter-type union shared by every metacore app that renders a
|
|
11
|
-
* DynamicTable. Kept open for extension — new niches (BI dashboards, CRM,
|
|
12
|
-
* inventory, catalog) can add variants here instead of each forking the type.
|
|
13
|
-
*/
|
|
14
|
-
export type ColumnFilterType = 'select' | 'boolean' | 'text' | 'number_range' | 'date_range'
|
|
15
|
-
/**
|
|
16
|
-
* Like `select` but the options are resolved server-side from a relation
|
|
17
|
-
* (`filterSearchEndpoint = /options/<ref>`) rather than declared inline.
|
|
18
|
-
* Renders the same multi-value checkbox combobox; the host loads + caches
|
|
19
|
-
* the options into `filterOptions` before they arrive. See DynamicTable.
|
|
20
|
-
*/
|
|
21
|
-
| 'dynamic_select';
|
|
22
|
-
export interface ColumnFilterMeta {
|
|
23
|
-
filterable?: boolean;
|
|
24
|
-
filterType?: ColumnFilterType;
|
|
25
|
-
filterKey?: string;
|
|
26
|
-
filterOptions?: FilterOption[];
|
|
27
|
-
filterLoading?: boolean;
|
|
28
|
-
/**
|
|
29
|
-
* Async search endpoint for server-driven option lookups. When set, the
|
|
30
|
-
* filter renders a searchable combobox backed by the app's API instead of
|
|
31
|
-
* iterating an in-memory filterOptions array. Apps wire this through the
|
|
32
|
-
* standard `/api/options/:model?field=` shape produced by
|
|
33
|
-
* kernel/dynamic.Service.Options.
|
|
34
|
-
*/
|
|
35
|
-
filterSearchEndpoint?: string;
|
|
36
|
-
selectedValues?: string[];
|
|
37
|
-
onFilterChange?: (filterKey: string, values: string[]) => void;
|
|
38
|
-
}
|
|
3
|
+
import { type FilterOption, type ColumnFilterType, type ColumnFilterMeta } from './column-filter-control';
|
|
4
|
+
export type { FilterOption, ColumnFilterType, ColumnFilterMeta };
|
|
39
5
|
type FilterableColumnHeaderProps<TData, TValue> = React.HTMLAttributes<HTMLDivElement> & {
|
|
40
6
|
column: Column<TData, TValue>;
|
|
41
7
|
title: string;
|
|
@@ -43,12 +9,11 @@ type FilterableColumnHeaderProps<TData, TValue> = React.HTMLAttributes<HTMLDivEl
|
|
|
43
9
|
/**
|
|
44
10
|
* Pro column header combining sort + scoped per-column filter UI.
|
|
45
11
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
12
|
+
* The sort dropdown is owned here (it's TanStack-column specific); the filter
|
|
13
|
+
* popover is delegated to <ColumnFilterControl>, driven by `columnDef.meta`.
|
|
14
|
+
* Supports `select`, `boolean`, `text`, `number_range`, and `date_range` filter
|
|
15
|
+
* types. The remote `filterSearchEndpoint` lookups are wired by the host
|
|
16
|
+
* (DynamicTable).
|
|
51
17
|
*/
|
|
52
18
|
export declare function FilterableColumnHeader<TData, TValue>({ column, title, className, }: FilterableColumnHeaderProps<TData, TValue>): React.JSX.Element;
|
|
53
|
-
export {};
|
|
54
19
|
//# sourceMappingURL=filterable-column-header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterable-column-header.d.ts","sourceRoot":"","sources":["../../src/data-table/filterable-column-header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"filterable-column-header.d.ts","sourceRoot":"","sources":["../../src/data-table/filterable-column-header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAWnD,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAA;AAKhC,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAA;AAEhE,KAAK,2BAA2B,CAAC,KAAK,EAAE,MAAM,IAC5C,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAEH;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,EACpD,MAAM,EACN,KAAK,EACL,SAAS,GACV,EAAE,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,qBAuE5C"}
|
|
@@ -1,208 +1,23 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { CheckIcon } from '@radix-ui/react-icons';
|
|
4
3
|
import {} from '@tanstack/react-table';
|
|
5
|
-
import {
|
|
6
|
-
import { es } from 'date-fns/locale';
|
|
7
|
-
import {} from 'react-day-picker';
|
|
8
|
-
import { ListFilter, ArrowUpDown, ArrowUp, ArrowDown, EyeOff, } from 'lucide-react';
|
|
4
|
+
import { ArrowUpDown, ArrowUp, ArrowDown, EyeOff } from 'lucide-react';
|
|
9
5
|
import { cn } from '../lib/utils';
|
|
10
|
-
import { resolveColorCss } from '../lib/option-colors';
|
|
11
6
|
import { Button } from '../primitives/button';
|
|
12
|
-
import { Label } from '../primitives/label';
|
|
13
7
|
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '../primitives/dropdown-menu';
|
|
14
|
-
import {
|
|
15
|
-
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from '../primitives/command';
|
|
16
|
-
import { Input } from '../primitives/input';
|
|
17
|
-
import { Calendar } from '../primitives/calendar';
|
|
8
|
+
import { ColumnFilterControl, } from './column-filter-control';
|
|
18
9
|
/**
|
|
19
10
|
* Pro column header combining sort + scoped per-column filter UI.
|
|
20
11
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
12
|
+
* The sort dropdown is owned here (it's TanStack-column specific); the filter
|
|
13
|
+
* popover is delegated to <ColumnFilterControl>, driven by `columnDef.meta`.
|
|
14
|
+
* Supports `select`, `boolean`, `text`, `number_range`, and `date_range` filter
|
|
15
|
+
* types. The remote `filterSearchEndpoint` lookups are wired by the host
|
|
16
|
+
* (DynamicTable).
|
|
26
17
|
*/
|
|
27
18
|
export function FilterableColumnHeader({ column, title, className, }) {
|
|
28
19
|
const meta = (column.columnDef.meta || {});
|
|
29
20
|
const canSort = column.getCanSort();
|
|
30
|
-
|
|
31
|
-
// `select`, `boolean` and `dynamic_select` all render the same multi-value
|
|
32
|
-
// checkbox combobox; only the option source differs (inline vs relation
|
|
33
|
-
// endpoint). Treat them uniformly so a relation filter behaves like a static
|
|
34
|
-
// one once its options have loaded.
|
|
35
|
-
const isMultiSelect = filterType === 'select' ||
|
|
36
|
-
filterType === 'boolean' ||
|
|
37
|
-
filterType === 'dynamic_select';
|
|
38
|
-
const hasOptions = meta.filterOptions && meta.filterOptions.length > 0;
|
|
39
|
-
const canFilter = meta.filterable &&
|
|
40
|
-
(hasOptions ||
|
|
41
|
-
filterType === 'text' ||
|
|
42
|
-
filterType === 'number_range' ||
|
|
43
|
-
filterType === 'date_range' ||
|
|
44
|
-
// A relation filter is still actionable while its options stream in —
|
|
45
|
-
// surface the trigger (the combobox shows a loading/empty state).
|
|
46
|
-
(filterType === 'dynamic_select' && !!meta.filterSearchEndpoint));
|
|
47
|
-
const filterKey = meta.filterKey || column.id;
|
|
48
|
-
const selectedValues = new Set(meta.selectedValues || []);
|
|
49
|
-
const activeCount = selectedValues.size;
|
|
50
|
-
const rawTextValue = meta.selectedValues && meta.selectedValues.length > 0
|
|
51
|
-
? meta.selectedValues[0]
|
|
52
|
-
: '';
|
|
53
|
-
const displayTextValue = rawTextValue.replace(/^(ILIKE|LIKE|GT|LT|GTE|LTE):/, '');
|
|
54
|
-
const parseRangeValues = () => {
|
|
55
|
-
let min = '';
|
|
56
|
-
let max = '';
|
|
57
|
-
for (const v of meta.selectedValues || []) {
|
|
58
|
-
if (v.startsWith('GTE:'))
|
|
59
|
-
min = v.replace('GTE:', '');
|
|
60
|
-
if (v.startsWith('LTE:'))
|
|
61
|
-
max = v.replace('LTE:', '');
|
|
62
|
-
}
|
|
63
|
-
return { min, max };
|
|
64
|
-
};
|
|
65
|
-
const rangeValues = parseRangeValues();
|
|
66
|
-
// Date range is serialized as a single "YYYY-MM-DD_YYYY-MM-DD" value (same
|
|
67
|
-
// wire shape the backend expects from the legacy starter-core picker).
|
|
68
|
-
const parseDateRange = () => {
|
|
69
|
-
const val = meta.selectedValues && meta.selectedValues.length > 0
|
|
70
|
-
? meta.selectedValues[0]
|
|
71
|
-
: '';
|
|
72
|
-
if (!val || !val.includes('_'))
|
|
73
|
-
return undefined;
|
|
74
|
-
const [from, to] = val.split('_');
|
|
75
|
-
const fromDate = new Date(`${from}T00:00:00`);
|
|
76
|
-
const toDate = new Date(`${to}T00:00:00`);
|
|
77
|
-
if (isNaN(fromDate.getTime()) || isNaN(toDate.getTime()))
|
|
78
|
-
return undefined;
|
|
79
|
-
return { from: fromDate, to: toDate };
|
|
80
|
-
};
|
|
81
|
-
const isActive = (() => {
|
|
82
|
-
if (filterType === 'text')
|
|
83
|
-
return rawTextValue !== '';
|
|
84
|
-
if (filterType === 'number_range')
|
|
85
|
-
return rangeValues.min !== '' || rangeValues.max !== '';
|
|
86
|
-
if (filterType === 'date_range')
|
|
87
|
-
return (meta.selectedValues || []).length > 0 && meta.selectedValues[0] !== '';
|
|
88
|
-
return activeCount > 0;
|
|
89
|
-
})();
|
|
90
|
-
const [localTextValue, setLocalTextValue] = React.useState(displayTextValue);
|
|
91
|
-
const [localMin, setLocalMin] = React.useState(rangeValues.min);
|
|
92
|
-
const [localMax, setLocalMax] = React.useState(rangeValues.max);
|
|
93
|
-
const [localSelected, setLocalSelected] = React.useState(new Set(selectedValues));
|
|
94
|
-
const [localDateRange, setLocalDateRange] = React.useState(parseDateRange());
|
|
95
|
-
const [filterOpen, setFilterOpen] = React.useState(false);
|
|
96
|
-
const displayOptions = meta.filterOptions || [];
|
|
97
|
-
React.useEffect(() => {
|
|
98
|
-
setLocalTextValue(displayTextValue);
|
|
99
|
-
}, [displayTextValue]);
|
|
100
|
-
React.useEffect(() => {
|
|
101
|
-
setLocalMin(rangeValues.min);
|
|
102
|
-
setLocalMax(rangeValues.max);
|
|
103
|
-
}, [rangeValues.min, rangeValues.max]);
|
|
104
|
-
React.useEffect(() => {
|
|
105
|
-
setLocalDateRange(parseDateRange());
|
|
106
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
107
|
-
}, [meta.selectedValues?.join(',')]);
|
|
108
|
-
React.useEffect(() => {
|
|
109
|
-
if (filterOpen) {
|
|
110
|
-
setLocalSelected(new Set(meta.selectedValues || []));
|
|
111
|
-
}
|
|
112
|
-
}, [filterOpen, meta.selectedValues?.join(',')]);
|
|
113
|
-
const handleLocalToggle = (value) => {
|
|
114
|
-
setLocalSelected((prev) => {
|
|
115
|
-
const next = new Set(prev);
|
|
116
|
-
if (next.has(value))
|
|
117
|
-
next.delete(value);
|
|
118
|
-
else
|
|
119
|
-
next.add(value);
|
|
120
|
-
return next;
|
|
121
|
-
});
|
|
122
|
-
};
|
|
123
|
-
const handleApplySelect = () => {
|
|
124
|
-
meta.onFilterChange?.(filterKey, Array.from(localSelected));
|
|
125
|
-
setFilterOpen(false);
|
|
126
|
-
};
|
|
127
|
-
const handleClearFilter = () => {
|
|
128
|
-
meta.onFilterChange?.(filterKey, []);
|
|
129
|
-
setLocalTextValue('');
|
|
130
|
-
setLocalMin('');
|
|
131
|
-
setLocalMax('');
|
|
132
|
-
setLocalSelected(new Set());
|
|
133
|
-
setLocalDateRange(undefined);
|
|
134
|
-
};
|
|
135
|
-
const handleDateRangeApply = () => {
|
|
136
|
-
if (localDateRange?.from) {
|
|
137
|
-
const from = format(localDateRange.from, 'yyyy-MM-dd');
|
|
138
|
-
const to = localDateRange.to
|
|
139
|
-
? format(localDateRange.to, 'yyyy-MM-dd')
|
|
140
|
-
: from;
|
|
141
|
-
meta.onFilterChange?.(filterKey, [`${from}_${to}`]);
|
|
142
|
-
}
|
|
143
|
-
setFilterOpen(false);
|
|
144
|
-
};
|
|
145
|
-
const handleTextSubmit = () => {
|
|
146
|
-
const trimmed = localTextValue.trim();
|
|
147
|
-
if (trimmed) {
|
|
148
|
-
meta.onFilterChange?.(filterKey, [`ILIKE:${trimmed}`]);
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
meta.onFilterChange?.(filterKey, []);
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
const handleNumberRangeSubmit = () => {
|
|
155
|
-
const values = [];
|
|
156
|
-
if (localMin.trim())
|
|
157
|
-
values.push(`GTE:${localMin.trim()}`);
|
|
158
|
-
if (localMax.trim())
|
|
159
|
-
values.push(`LTE:${localMax.trim()}`);
|
|
160
|
-
meta.onFilterChange?.(filterKey, values);
|
|
161
|
-
};
|
|
162
|
-
const localHasChanges = (() => {
|
|
163
|
-
if (isMultiSelect) {
|
|
164
|
-
const current = new Set(meta.selectedValues || []);
|
|
165
|
-
if (localSelected.size !== current.size)
|
|
166
|
-
return true;
|
|
167
|
-
for (const v of localSelected) {
|
|
168
|
-
if (!current.has(v))
|
|
169
|
-
return true;
|
|
170
|
-
}
|
|
171
|
-
return false;
|
|
172
|
-
}
|
|
173
|
-
return false;
|
|
174
|
-
})();
|
|
175
|
-
return (_jsxs("div", { className: cn('flex items-center gap-0.5', className), children: [_jsx("span", { className: 'text-sm font-medium', children: title }), canSort && (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: 'ghost', size: 'icon', className: cn('h-7 w-7 shrink-0 opacity-70 hover:opacity-100', column.getIsSorted() && 'opacity-100'), children: column.getIsSorted() === 'desc' ? (_jsx(ArrowDown, { className: 'h-3.5 w-3.5' })) : column.getIsSorted() === 'asc' ? (_jsx(ArrowUp, { className: 'h-3.5 w-3.5' })) : (_jsx(ArrowUpDown, { className: 'h-3.5 w-3.5' })) }) }), _jsxs(DropdownMenuContent, { align: 'start', children: [_jsxs(DropdownMenuItem, { onClick: () => column.toggleSorting(false), children: [_jsx(ArrowUp, { className: 'text-muted-foreground/70 size-3.5' }), "Ascendente"] }), _jsxs(DropdownMenuItem, { onClick: () => column.toggleSorting(true), children: [_jsx(ArrowDown, { className: 'text-muted-foreground/70 size-3.5' }), "Descendente"] }), column.getIsSorted() && (_jsxs(DropdownMenuItem, { onClick: () => column.clearSorting(), children: [_jsx(ArrowUpDown, { className: 'text-muted-foreground/70 size-3.5' }), "Quitar orden"] })), column.getCanHide() && (_jsxs(_Fragment, { children: [_jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { onClick: () => column.toggleVisibility(false), children: [_jsx(EyeOff, { className: 'text-muted-foreground/70 size-3.5' }), "Ocultar"] })] }))] })] })), canFilter && (_jsxs(Popover, { modal: false, open: filterOpen, onOpenChange: setFilterOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: 'ghost', size: 'icon', className: cn('h-7 w-7 shrink-0', isActive
|
|
176
|
-
? 'text-primary hover:text-primary'
|
|
177
|
-
: 'opacity-70 hover:opacity-100'), children: _jsxs("div", { className: 'relative', children: [_jsx(ListFilter, { className: 'h-3.5 w-3.5' }), isActive && isMultiSelect && activeCount > 0 && (_jsx("span", { className: 'absolute -top-1.5 -right-1.5 flex h-3.5 min-w-3.5 items-center justify-center rounded-full bg-primary text-[9px] font-bold text-primary-foreground px-0.5', children: activeCount })), isActive && !isMultiSelect && (_jsx("span", { className: 'absolute -top-1 -right-1 flex h-2 w-2 rounded-full bg-primary' }))] }) }) }), _jsxs(PopoverContent, { className: cn('p-0', filterType === 'date_range' ? 'w-auto' : 'w-[220px]'), align: 'start', onCloseAutoFocus: (e) => e.preventDefault(), children: [isMultiSelect && (hasOptions || filterType === 'dynamic_select') && (_jsxs(Command, { children: [_jsx(CommandInput, { placeholder: 'Buscar...' }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: meta.filterLoading ? 'Cargando…' : 'Sin resultados.' }), _jsx(CommandGroup, { children: displayOptions.map((option) => {
|
|
178
|
-
const isSelected = localSelected.has(option.value);
|
|
179
|
-
return (_jsxs(CommandItem, { onSelect: () => handleLocalToggle(option.value), onPointerDown: (e) => e.preventDefault(), children: [_jsx("div", { className: cn('mr-2 flex size-4 shrink-0 items-center justify-center rounded-sm border transition-colors', isSelected
|
|
180
|
-
? // Foreground/background is contrast-guaranteed
|
|
181
|
-
// in both themes, so the checkmark stays legible
|
|
182
|
-
// even when a brand's primary/primary-foreground
|
|
183
|
-
// pair collapses to dark-on-dark in dark mode.
|
|
184
|
-
'border-foreground bg-foreground text-background'
|
|
185
|
-
: 'border-muted-foreground/50 opacity-70 [&_svg]:invisible'), children: _jsx(CheckIcon, { className: 'h-3.5 w-3.5' }) }), option.color && (_jsx("span", { className: 'mr-1 size-2.5 rounded-full shrink-0', style: {
|
|
186
|
-
backgroundColor: resolveColorCss(option.color),
|
|
187
|
-
} })), _jsx("span", { className: 'truncate', children: option.label })] }, option.value));
|
|
188
|
-
}) })] }), _jsxs("div", { className: 'border-t p-2 flex gap-1.5', children: [_jsx(Button, { size: 'sm', variant: 'outline', className: 'h-7 flex-1 text-xs', onClick: () => {
|
|
189
|
-
handleClearFilter();
|
|
190
|
-
setFilterOpen(false);
|
|
191
|
-
}, disabled: !isActive && localSelected.size === 0, children: "Limpiar" }), _jsxs(Button, { size: 'sm', className: 'h-7 flex-1 text-xs', onClick: handleApplySelect, disabled: !localHasChanges && localSelected.size === 0, children: ["Aplicar", localSelected.size > 0 ? ` (${localSelected.size})` : ''] })] })] })), filterType === 'text' && (_jsxs("div", { className: 'p-2.5 space-y-2', children: [_jsx(Input, { placeholder: 'Contiene...', value: localTextValue, onChange: (e) => setLocalTextValue(e.target.value), onKeyDown: (e) => {
|
|
192
|
-
if (e.key === 'Enter')
|
|
193
|
-
handleTextSubmit();
|
|
194
|
-
}, className: 'h-8 text-sm', autoFocus: true }), _jsxs("div", { className: 'flex gap-1.5', children: [_jsx(Button, { size: 'sm', variant: 'outline', className: 'h-7 flex-1 text-xs', onClick: handleClearFilter, disabled: !isActive, children: "Limpiar" }), _jsx(Button, { size: 'sm', className: 'h-7 flex-1 text-xs', onClick: handleTextSubmit, children: "Aplicar" })] })] })), filterType === 'number_range' && (_jsxs("div", { className: 'p-2.5 space-y-2.5', children: [_jsxs("div", { className: 'grid grid-cols-2 gap-2', children: [_jsxs("div", { className: 'space-y-1', children: [_jsx(Label, { className: 'text-xs text-muted-foreground', children: "Min" }), _jsx(Input, { type: 'number', placeholder: '0', value: localMin, onChange: (e) => setLocalMin(e.target.value), onKeyDown: (e) => {
|
|
195
|
-
if (e.key === 'Enter')
|
|
196
|
-
handleNumberRangeSubmit();
|
|
197
|
-
}, className: 'h-8 text-sm', autoFocus: true })] }), _jsxs("div", { className: 'space-y-1', children: [_jsx(Label, { className: 'text-xs text-muted-foreground', children: "Max" }), _jsx(Input, { type: 'number', placeholder: '999999', value: localMax, onChange: (e) => setLocalMax(e.target.value), onKeyDown: (e) => {
|
|
198
|
-
if (e.key === 'Enter')
|
|
199
|
-
handleNumberRangeSubmit();
|
|
200
|
-
}, className: 'h-8 text-sm' })] })] }), _jsxs("div", { className: 'flex gap-1.5', children: [_jsx(Button, { size: 'sm', variant: 'outline', className: 'h-7 flex-1 text-xs', onClick: handleClearFilter, disabled: !isActive, children: "Limpiar" }), _jsx(Button, { size: 'sm', className: 'h-7 flex-1 text-xs', onClick: handleNumberRangeSubmit, children: "Aplicar" })] })] })), filterType === 'date_range' && (_jsxs("div", { children: [_jsx(Calendar, { mode: 'range', selected: localDateRange, onSelect: setLocalDateRange, locale: es, numberOfMonths: 1, className: 'p-2' }), localDateRange?.from && (_jsxs("div", { className: 'px-2 pb-1 text-center text-[11px] text-muted-foreground', children: [format(localDateRange.from, 'dd MMM yyyy', { locale: es }), localDateRange.to &&
|
|
201
|
-
localDateRange.to.getTime() !== localDateRange.from.getTime()
|
|
202
|
-
? ` — ${format(localDateRange.to, 'dd MMM yyyy', { locale: es })}`
|
|
203
|
-
: ' (un día)'] })), _jsxs("div", { className: 'border-t p-1.5 flex gap-1.5', children: [_jsx(Button, { size: 'sm', variant: 'outline', className: 'h-7 flex-1 text-xs', onClick: () => {
|
|
204
|
-
handleClearFilter();
|
|
205
|
-
setFilterOpen(false);
|
|
206
|
-
}, disabled: !isActive && !localDateRange, children: "Limpiar" }), _jsx(Button, { size: 'sm', className: 'h-7 flex-1 text-xs', onClick: handleDateRangeApply, disabled: !localDateRange?.from, children: "Aplicar" })] })] }))] })] }))] }));
|
|
21
|
+
return (_jsxs("div", { className: cn('flex items-center gap-0.5', className), children: [_jsx("span", { className: 'text-sm font-medium', children: title }), canSort && (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: 'ghost', size: 'icon', className: cn('h-7 w-7 shrink-0 opacity-70 hover:opacity-100', column.getIsSorted() && 'opacity-100'), children: column.getIsSorted() === 'desc' ? (_jsx(ArrowDown, { className: 'h-3.5 w-3.5' })) : column.getIsSorted() === 'asc' ? (_jsx(ArrowUp, { className: 'h-3.5 w-3.5' })) : (_jsx(ArrowUpDown, { className: 'h-3.5 w-3.5' })) }) }), _jsxs(DropdownMenuContent, { align: 'start', children: [_jsxs(DropdownMenuItem, { onClick: () => column.toggleSorting(false), children: [_jsx(ArrowUp, { className: 'text-muted-foreground/70 size-3.5' }), "Ascendente"] }), _jsxs(DropdownMenuItem, { onClick: () => column.toggleSorting(true), children: [_jsx(ArrowDown, { className: 'text-muted-foreground/70 size-3.5' }), "Descendente"] }), column.getIsSorted() && (_jsxs(DropdownMenuItem, { onClick: () => column.clearSorting(), children: [_jsx(ArrowUpDown, { className: 'text-muted-foreground/70 size-3.5' }), "Quitar orden"] })), column.getCanHide() && (_jsxs(_Fragment, { children: [_jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { onClick: () => column.toggleVisibility(false), children: [_jsx(EyeOff, { className: 'text-muted-foreground/70 size-3.5' }), "Ocultar"] })] }))] })] })), meta.filterable && (_jsx(ColumnFilterControl, { filterKey: meta.filterKey || column.id, filterType: meta.filterType, filterOptions: meta.filterOptions, filterLoading: meta.filterLoading, filterSearchEndpoint: meta.filterSearchEndpoint, selectedValues: meta.selectedValues, onFilterChange: meta.onFilterChange, loadOptions: meta.loadOptions }))] }));
|
|
207
22
|
}
|
|
208
23
|
//# sourceMappingURL=filterable-column-header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterable-column-header.js","sourceRoot":"","sources":["../../src/data-table/filterable-column-header.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAe,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAA;AACpC,OAAO,EAAkB,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,UAAU,EACV,WAAW,EACX,OAAO,EACP,SAAS,EACT,MAAM,GACP,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,GACZ,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAoDhD;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAgB,EACpD,MAAM,EACN,KAAK,EACL,SAAS,GACkC;IAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAChB,CAAA;IACzB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAA;IAC9C,2EAA2E;IAC3E,wEAAwE;IACxE,6EAA6E;IAC7E,oCAAoC;IACpC,MAAM,aAAa,GACjB,UAAU,KAAK,QAAQ;QACvB,UAAU,KAAK,SAAS;QACxB,UAAU,KAAK,gBAAgB,CAAA;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAA;IACtE,MAAM,SAAS,GACb,IAAI,CAAC,UAAU;QACf,CAAC,UAAU;YACT,UAAU,KAAK,MAAM;YACrB,UAAU,KAAK,cAAc;YAC7B,UAAU,KAAK,YAAY;YAC3B,sEAAsE;YACtE,kEAAkE;YAClE,CAAC,UAAU,KAAK,gBAAgB,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAA;IAC7C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAA;IACzD,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAA;IAEvC,MAAM,YAAY,GAChB,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;QACnD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,EAAE,CAAA;IACR,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAC3C,8BAA8B,EAC9B,EAAE,CACH,CAAA;IAED,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,GAAG,GAAG,EAAE,CAAA;QACZ,IAAI,GAAG,GAAG,EAAE,CAAA;QACZ,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;YACrD,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QACvD,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IACrB,CAAC,CAAA;IACD,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAA;IAEtC,2EAA2E;IAC3E,uEAAuE;IACvE,MAAM,cAAc,GAAG,GAA0B,EAAE;QACjD,MAAM,GAAG,GACP,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;YACnD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACxB,CAAC,CAAC,EAAE,CAAA;QACR,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAA;QAChD,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,CAAA;QAC7C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;QACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAAE,OAAO,SAAS,CAAA;QAC1E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAA;IACvC,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE;QACrB,IAAI,UAAU,KAAK,MAAM;YAAE,OAAO,YAAY,KAAK,EAAE,CAAA;QACrD,IAAI,UAAU,KAAK,cAAc;YAC/B,OAAO,WAAW,CAAC,GAAG,KAAK,EAAE,IAAI,WAAW,CAAC,GAAG,KAAK,EAAE,CAAA;QACzD,IAAI,UAAU,KAAK,YAAY;YAC7B,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,cAAe,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;QACjF,OAAO,WAAW,GAAG,CAAC,CAAA;IACxB,CAAC,CAAC,EAAE,CAAA;IAEJ,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;IAC5E,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAC/D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAC/D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CACtD,IAAI,GAAG,CAAC,cAAc,CAAC,CACxB,CAAA;IACD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAExD,cAAc,EAAE,CAAC,CAAA;IACnB,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEzD,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,CAAA;IAE/C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,iBAAiB,CAAC,gBAAgB,CAAC,CAAA;IACrC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACtB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAC5B,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;IACtC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,iBAAiB,CAAC,cAAc,EAAE,CAAC,CAAA;QACnC,uDAAuD;IACzD,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACpC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,UAAU,EAAE,CAAC;YACf,gBAAgB,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAA;QACtD,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAEhD,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,EAAE;QAC1C,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;YAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;;gBAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACpB,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;QAC3D,aAAa,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC,CAAA;IAED,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QACpC,iBAAiB,CAAC,EAAE,CAAC,CAAA;QACrB,WAAW,CAAC,EAAE,CAAC,CAAA;QACf,WAAW,CAAC,EAAE,CAAC,CAAA;QACf,gBAAgB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;QAC3B,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAC9B,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAChC,IAAI,cAAc,EAAE,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;YACtD,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE;gBAC1B,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,YAAY,CAAC;gBACzC,CAAC,CAAC,IAAI,CAAA;YACR,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;QACrD,CAAC;QACD,aAAa,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,CAAA;QACrC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAA;QACxD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QACtC,CAAC;IACH,CAAC,CAAA;IAED,MAAM,uBAAuB,GAAG,GAAG,EAAE;QACnC,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,IAAI,QAAQ,CAAC,IAAI,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAC1D,IAAI,QAAQ,CAAC,IAAI,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAC1D,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAC1C,CAAC,CAAA;IAED,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE;QAC5B,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAA;YAClD,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAA;YACpD,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAA;YAClC,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CAAC,EAAE,CAAA;IAEJ,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,SAAS,CAAC,aACxD,eAAM,SAAS,EAAC,qBAAqB,YAAE,KAAK,GAAQ,EAEnD,OAAO,IAAI,CACV,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,SAAS,EAAE,EAAE,CACX,+CAA+C,EAC/C,MAAM,CAAC,WAAW,EAAE,IAAI,aAAa,CACtC,YAEA,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CACjC,KAAC,SAAS,IAAC,SAAS,EAAC,aAAa,GAAG,CACtC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CACnC,KAAC,OAAO,IAAC,SAAS,EAAC,aAAa,GAAG,CACpC,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,SAAS,EAAC,aAAa,GAAG,CACxC,GACM,GACW,EACtB,MAAC,mBAAmB,IAAC,KAAK,EAAC,OAAO,aAChC,MAAC,gBAAgB,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,aAC1D,KAAC,OAAO,IAAC,SAAS,EAAC,mCAAmC,GAAG,kBAExC,EACnB,MAAC,gBAAgB,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,aACzD,KAAC,SAAS,IAAC,SAAS,EAAC,mCAAmC,GAAG,mBAE1C,EAClB,MAAM,CAAC,WAAW,EAAE,IAAI,CACvB,MAAC,gBAAgB,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,aACpD,KAAC,WAAW,IAAC,SAAS,EAAC,mCAAmC,GAAG,oBAE5C,CACpB,EACA,MAAM,CAAC,UAAU,EAAE,IAAI,CACtB,8BACE,KAAC,qBAAqB,KAAG,EACzB,MAAC,gBAAgB,IACf,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAE7C,KAAC,MAAM,IAAC,SAAS,EAAC,mCAAmC,GAAG,eAEvC,IAClB,CACJ,IACmB,IACT,CAChB,EAEA,SAAS,IAAI,CACZ,MAAC,OAAO,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,aAClE,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,SAAS,EAAE,EAAE,CACX,kBAAkB,EAClB,QAAQ;gCACN,CAAC,CAAC,iCAAiC;gCACnC,CAAC,CAAC,8BAA8B,CACnC,YAED,eAAK,SAAS,EAAC,UAAU,aACvB,KAAC,UAAU,IAAC,SAAS,EAAC,aAAa,GAAG,EACrC,QAAQ,IAAI,aAAa,IAAI,WAAW,GAAG,CAAC,IAAI,CAC/C,eAAM,SAAS,EAAC,2JAA2J,YACxK,WAAW,GACP,CACR,EACA,QAAQ,IAAI,CAAC,aAAa,IAAI,CAC7B,eAAM,SAAS,EAAC,+DAA+D,GAAG,CACnF,IACG,GACC,GACM,EACjB,MAAC,cAAc,IACb,SAAS,EAAE,EAAE,CACX,KAAK,EACL,UAAU,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CACrD,EACD,KAAK,EAAC,OAAO,EACb,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,aAE1C,aAAa,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,gBAAgB,CAAC,IAAI,CACjE,MAAC,OAAO,eACN,KAAC,YAAY,IAAC,WAAW,EAAC,WAAW,GAAG,EACxC,MAAC,WAAW,eACV,KAAC,YAAY,cACV,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,GACxC,EACf,KAAC,YAAY,cACV,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oDAC7B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;oDAClD,OAAO,CACL,MAAC,WAAW,IAEV,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAC/C,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,aAExC,cACE,SAAS,EAAE,EAAE,CACX,2FAA2F,EAC3F,UAAU;oEACR,CAAC,CAAC,+CAA+C;wEAC/C,iDAAiD;wEACjD,iDAAiD;wEACjD,+CAA+C;wEAC/C,iDAAiD;oEACnD,CAAC,CAAC,yDAAyD,CAC9D,YAED,KAAC,SAAS,IAAC,SAAS,EAAC,aAAa,GAAG,GACjC,EACL,MAAM,CAAC,KAAK,IAAI,CACf,eACE,SAAS,EAAC,qCAAqC,EAC/C,KAAK,EAAE;oEACL,eAAe,EAAE,eAAe,CAC9B,MAAM,CAAC,KAAK,CACb;iEACF,GACD,CACH,EACD,eAAM,SAAS,EAAC,UAAU,YAAE,MAAM,CAAC,KAAK,GAAQ,KA5B3C,MAAM,CAAC,KAAK,CA6BL,CACf,CAAA;gDACH,CAAC,CAAC,GACW,IACH,EACd,eAAK,SAAS,EAAC,2BAA2B,aACxC,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,GAAG,EAAE;oDACZ,iBAAiB,EAAE,CAAA;oDACnB,aAAa,CAAC,KAAK,CAAC,CAAA;gDACtB,CAAC,EACD,QAAQ,EAAE,CAAC,QAAQ,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,wBAGxC,EACT,MAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,CAAC,eAAe,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,wBAGrD,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,IAClD,IACL,IACE,CACX,EAEF,UAAU,KAAK,MAAM,IAAI,CACxB,eAAK,SAAS,EAAC,iBAAiB,aAC9B,KAAC,KAAK,IACJ,WAAW,EAAC,aAAa,EACzB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAClD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;4CACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO;gDAAE,gBAAgB,EAAE,CAAA;wCAC3C,CAAC,EACD,SAAS,EAAC,aAAa,EACvB,SAAS,SACT,EACF,eAAK,SAAS,EAAC,cAAc,aAC3B,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,CAAC,QAAQ,wBAGZ,EACT,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,gBAAgB,wBAGlB,IACL,IACF,CACP,EAEA,UAAU,KAAK,cAAc,IAAI,CAChC,eAAK,SAAS,EAAC,mBAAmB,aAChC,eAAK,SAAS,EAAC,wBAAwB,aACrC,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,KAAK,IAAC,SAAS,EAAC,+BAA+B,oBAAY,EAC5D,KAAC,KAAK,IACJ,IAAI,EAAC,QAAQ,EACb,WAAW,EAAC,GAAG,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5C,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;4DACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO;gEAAE,uBAAuB,EAAE,CAAA;wDAClD,CAAC,EACD,SAAS,EAAC,aAAa,EACvB,SAAS,SACT,IACE,EACN,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,KAAK,IAAC,SAAS,EAAC,+BAA+B,oBAAY,EAC5D,KAAC,KAAK,IACJ,IAAI,EAAC,QAAQ,EACb,WAAW,EAAC,QAAQ,EACpB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5C,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;4DACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO;gEAAE,uBAAuB,EAAE,CAAA;wDAClD,CAAC,EACD,SAAS,EAAC,aAAa,GACvB,IACE,IACF,EACN,eAAK,SAAS,EAAC,cAAc,aAC3B,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,CAAC,QAAQ,wBAGZ,EACT,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,uBAAuB,wBAGzB,IACL,IACF,CACP,EAEA,UAAU,KAAK,YAAY,IAAI,CAC9B,0BACE,KAAC,QAAQ,IACP,IAAI,EAAC,OAAO,EACZ,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,EAAE,EACV,cAAc,EAAE,CAAC,EACjB,SAAS,EAAC,KAAK,GACf,EACD,cAAc,EAAE,IAAI,IAAI,CACvB,eAAK,SAAS,EAAC,yDAAyD,aACrE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAC1D,cAAc,CAAC,EAAE;gDAClB,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE;gDAC3D,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE;gDAClE,CAAC,CAAC,WAAW,IACX,CACP,EACD,eAAK,SAAS,EAAC,6BAA6B,aAC1C,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,GAAG,EAAE;oDACZ,iBAAiB,EAAE,CAAA;oDACnB,aAAa,CAAC,KAAK,CAAC,CAAA;gDACtB,CAAC,EACD,QAAQ,EAAE,CAAC,QAAQ,IAAI,CAAC,cAAc,wBAG/B,EACT,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,CAAC,cAAc,EAAE,IAAI,wBAGxB,IACL,IACF,CACP,IACc,IACT,CACX,IACG,CACP,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"filterable-column-header.js","sourceRoot":"","sources":["../../src/data-table/filterable-column-header.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,4 +5,5 @@ export { DataTableViewOptions } from './view-options';
|
|
|
5
5
|
export { DataTableToolbar } from './toolbar';
|
|
6
6
|
export { DataTableBulkActions } from './bulk-actions';
|
|
7
7
|
export { FilterableColumnHeader, type FilterOption, type ColumnFilterMeta, type ColumnFilterType, } from './filterable-column-header';
|
|
8
|
+
export { ColumnFilterControl, type ColumnFilterControlProps, } from './column-filter-control';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EACL,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,4BAA4B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EACL,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAA"}
|
package/dist/data-table/index.js
CHANGED
|
@@ -5,4 +5,5 @@ export { DataTableViewOptions } from './view-options';
|
|
|
5
5
|
export { DataTableToolbar } from './toolbar';
|
|
6
6
|
export { DataTableBulkActions } from './bulk-actions';
|
|
7
7
|
export { FilterableColumnHeader, } from './filterable-column-header';
|
|
8
|
+
export { ColumnFilterControl, } from './column-filter-control';
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EACL,sBAAsB,GAIvB,MAAM,4BAA4B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EACL,sBAAsB,GAIvB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,mBAAmB,GAEpB,MAAM,yBAAyB,CAAA"}
|
package/package.json
CHANGED