@asteby/metacore-ui 2.6.2 → 2.7.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.
@@ -0,0 +1,73 @@
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
+ /**
10
+ * Canonical filter-type union shared by every metacore app that renders a
11
+ * DynamicTable or DynamicKanban. Kept open for extension — new niches (BI
12
+ * dashboards, CRM, inventory, catalog) can add variants here instead of each
13
+ * forking the type.
14
+ */
15
+ export type ColumnFilterType = 'select' | 'boolean' | 'text' | 'number_range' | 'date_range'
16
+ /**
17
+ * Like `select` but the options are resolved server-side from a relation
18
+ * (`filterSearchEndpoint = /options/<ref>`) rather than declared inline.
19
+ * Renders the same multi-value checkbox combobox; the host loads + caches
20
+ * the options into `filterOptions` before they arrive.
21
+ */
22
+ | 'dynamic_select';
23
+ export interface ColumnFilterMeta {
24
+ filterable?: boolean;
25
+ filterType?: ColumnFilterType;
26
+ filterKey?: string;
27
+ filterOptions?: FilterOption[];
28
+ filterLoading?: boolean;
29
+ /**
30
+ * Async search endpoint for server-driven option lookups. When set, the
31
+ * filter renders a searchable combobox backed by the app's API instead of
32
+ * iterating an in-memory filterOptions array. Apps wire this through the
33
+ * standard `/api/options/:model?field=` shape produced by
34
+ * kernel/dynamic.Service.Options.
35
+ */
36
+ filterSearchEndpoint?: string;
37
+ selectedValues?: string[];
38
+ onFilterChange?: (filterKey: string, values: string[]) => void;
39
+ }
40
+ export interface ColumnFilterControlProps {
41
+ /** Backend filter key (`f_<filterKey>=…`). */
42
+ filterKey: string;
43
+ filterType?: ColumnFilterType;
44
+ filterOptions?: FilterOption[];
45
+ filterLoading?: boolean;
46
+ filterSearchEndpoint?: string;
47
+ selectedValues?: string[];
48
+ onFilterChange?: (filterKey: string, values: string[]) => void;
49
+ /**
50
+ * Field label. Rendered inside the trigger in toolbar mode (`showLabel`), so a
51
+ * board/toolbar surface — which has no column headers — still names each
52
+ * filter. Ignored in the icon-only header mode.
53
+ */
54
+ label?: string;
55
+ /**
56
+ * Toolbar mode: render a labeled chip trigger (`<ListFilter/> Label (n)`)
57
+ * instead of the icon-only header button. Use on the kanban filter bar.
58
+ */
59
+ showLabel?: boolean;
60
+ align?: React.ComponentProps<typeof PopoverContent>['align'];
61
+ /** Extra classes on the trigger button. */
62
+ className?: string;
63
+ }
64
+ /**
65
+ * The per-column filter popover — extracted from `FilterableColumnHeader` so it
66
+ * can be reused OUTSIDE a TanStack table header (e.g. the DynamicKanban filter
67
+ * bar). Fully driven by plain props; no `Column` dependency. Supports `select`,
68
+ * `boolean`, `dynamic_select`, `text`, `number_range` and `date_range`, emitting
69
+ * the same wire values the backend `f_<key>` filters expect
70
+ * (`ILIKE:`/`GTE:`/`LTE:`/`YYYY-MM-DD_YYYY-MM-DD`/plain).
71
+ */
72
+ export declare function ColumnFilterControl({ filterKey, filterType, filterOptions, filterLoading, filterSearchEndpoint, selectedValues: selectedValuesProp, onFilterChange, label, showLabel, align, className, }: ColumnFilterControlProps): React.JSX.Element | null;
73
+ //# 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;CACf;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,SAAS,GACT,MAAM,GACN,cAAc,GACd,YAAY;AACd;;;;;GAKG;GACD,gBAAgB,CAAA;AAEpB,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;CAC/D;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;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,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,KAAK,EACL,SAAiB,EACjB,KAAe,EACf,SAAS,GACV,EAAE,wBAAwB,4BAma1B"}
@@ -0,0 +1,205 @@
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 { 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, label, showLabel = false, 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 hasOptions = !!filterOptions && filterOptions.length > 0;
33
+ const selectedValues = new Set(selectedValuesProp || []);
34
+ const activeCount = selectedValues.size;
35
+ const rawTextValue = selectedValuesProp && selectedValuesProp.length > 0
36
+ ? selectedValuesProp[0]
37
+ : '';
38
+ const displayTextValue = rawTextValue.replace(/^(ILIKE|LIKE|GT|LT|GTE|LTE):/, '');
39
+ const parseRangeValues = () => {
40
+ let min = '';
41
+ let max = '';
42
+ for (const v of selectedValuesProp || []) {
43
+ if (v.startsWith('GTE:'))
44
+ min = v.replace('GTE:', '');
45
+ if (v.startsWith('LTE:'))
46
+ max = v.replace('LTE:', '');
47
+ }
48
+ return { min, max };
49
+ };
50
+ const rangeValues = parseRangeValues();
51
+ // Date range is serialized as a single "YYYY-MM-DD_YYYY-MM-DD" value (same
52
+ // wire shape the backend expects from the legacy starter-core picker).
53
+ const parseDateRange = () => {
54
+ const val = selectedValuesProp && selectedValuesProp.length > 0
55
+ ? selectedValuesProp[0]
56
+ : '';
57
+ if (!val || !val.includes('_'))
58
+ return undefined;
59
+ const [from, to] = val.split('_');
60
+ const fromDate = new Date(`${from}T00:00:00`);
61
+ const toDate = new Date(`${to}T00:00:00`);
62
+ if (isNaN(fromDate.getTime()) || isNaN(toDate.getTime()))
63
+ return undefined;
64
+ return { from: fromDate, to: toDate };
65
+ };
66
+ const isActive = (() => {
67
+ if (filterType === 'text')
68
+ return rawTextValue !== '';
69
+ if (filterType === 'number_range')
70
+ return rangeValues.min !== '' || rangeValues.max !== '';
71
+ if (filterType === 'date_range')
72
+ return ((selectedValuesProp || []).length > 0 && selectedValuesProp[0] !== '');
73
+ return activeCount > 0;
74
+ })();
75
+ const [localTextValue, setLocalTextValue] = React.useState(displayTextValue);
76
+ const [localMin, setLocalMin] = React.useState(rangeValues.min);
77
+ const [localMax, setLocalMax] = React.useState(rangeValues.max);
78
+ const [localSelected, setLocalSelected] = React.useState(new Set(selectedValues));
79
+ const [localDateRange, setLocalDateRange] = React.useState(parseDateRange());
80
+ const [filterOpen, setFilterOpen] = React.useState(false);
81
+ const displayOptions = filterOptions || [];
82
+ const selectedKey = (selectedValuesProp || []).join(',');
83
+ React.useEffect(() => {
84
+ setLocalTextValue(displayTextValue);
85
+ }, [displayTextValue]);
86
+ React.useEffect(() => {
87
+ setLocalMin(rangeValues.min);
88
+ setLocalMax(rangeValues.max);
89
+ }, [rangeValues.min, rangeValues.max]);
90
+ React.useEffect(() => {
91
+ setLocalDateRange(parseDateRange());
92
+ // eslint-disable-next-line react-hooks/exhaustive-deps
93
+ }, [selectedKey]);
94
+ React.useEffect(() => {
95
+ if (filterOpen) {
96
+ setLocalSelected(new Set(selectedValuesProp || []));
97
+ }
98
+ // eslint-disable-next-line react-hooks/exhaustive-deps
99
+ }, [filterOpen, selectedKey]);
100
+ const canFilter = hasOptions ||
101
+ filterType === 'text' ||
102
+ filterType === 'number_range' ||
103
+ filterType === 'date_range' ||
104
+ // A relation filter is still actionable while its options stream in —
105
+ // surface the trigger (the combobox shows a loading/empty state).
106
+ (filterType === 'dynamic_select' && !!filterSearchEndpoint);
107
+ if (!canFilter)
108
+ return null;
109
+ const handleLocalToggle = (value) => {
110
+ setLocalSelected((prev) => {
111
+ const next = new Set(prev);
112
+ if (next.has(value))
113
+ next.delete(value);
114
+ else
115
+ next.add(value);
116
+ return next;
117
+ });
118
+ };
119
+ const handleApplySelect = () => {
120
+ onFilterChange?.(filterKey, Array.from(localSelected));
121
+ setFilterOpen(false);
122
+ };
123
+ const handleClearFilter = () => {
124
+ onFilterChange?.(filterKey, []);
125
+ setLocalTextValue('');
126
+ setLocalMin('');
127
+ setLocalMax('');
128
+ setLocalSelected(new Set());
129
+ setLocalDateRange(undefined);
130
+ };
131
+ const handleDateRangeApply = () => {
132
+ if (localDateRange?.from) {
133
+ const from = format(localDateRange.from, 'yyyy-MM-dd');
134
+ const to = localDateRange.to
135
+ ? format(localDateRange.to, 'yyyy-MM-dd')
136
+ : from;
137
+ onFilterChange?.(filterKey, [`${from}_${to}`]);
138
+ }
139
+ setFilterOpen(false);
140
+ };
141
+ const handleTextSubmit = () => {
142
+ const trimmed = localTextValue.trim();
143
+ if (trimmed) {
144
+ onFilterChange?.(filterKey, [`ILIKE:${trimmed}`]);
145
+ }
146
+ else {
147
+ onFilterChange?.(filterKey, []);
148
+ }
149
+ };
150
+ const handleNumberRangeSubmit = () => {
151
+ const values = [];
152
+ if (localMin.trim())
153
+ values.push(`GTE:${localMin.trim()}`);
154
+ if (localMax.trim())
155
+ values.push(`LTE:${localMax.trim()}`);
156
+ onFilterChange?.(filterKey, values);
157
+ };
158
+ const localHasChanges = (() => {
159
+ if (isMultiSelect) {
160
+ const current = new Set(selectedValuesProp || []);
161
+ if (localSelected.size !== current.size)
162
+ return true;
163
+ for (const v of localSelected) {
164
+ if (!current.has(v))
165
+ return true;
166
+ }
167
+ return false;
168
+ }
169
+ return false;
170
+ })();
171
+ const trigger = 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 && 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 && (_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
172
+ ? 'text-primary hover:text-primary'
173
+ : 'opacity-70 hover:opacity-100', className), 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' }))] }) }));
174
+ return (_jsxs(Popover, { modal: false, open: filterOpen, onOpenChange: setFilterOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: trigger }), _jsxs(PopoverContent, { className: cn('p-0', filterType === 'date_range' ? 'w-auto' : 'w-[220px]'), align: align, onCloseAutoFocus: (e) => e.preventDefault(), children: [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) => {
175
+ const isSelected = localSelected.has(option.value);
176
+ 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
177
+ ? // Foreground/background is contrast-guaranteed in
178
+ // both themes, so the checkmark stays legible even
179
+ // when a brand's primary/primary-foreground pair
180
+ // collapses to dark-on-dark in dark mode.
181
+ 'border-foreground bg-foreground text-background'
182
+ : '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: {
183
+ backgroundColor: resolveColorCss(option.color),
184
+ } })), _jsx("span", { className: 'truncate', children: option.label })] }, option.value));
185
+ }) })] }), _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: () => {
186
+ handleClearFilter();
187
+ setFilterOpen(false);
188
+ }, 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) => {
189
+ if (e.key === 'Enter')
190
+ handleTextSubmit();
191
+ }, 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) => {
192
+ if (e.key === 'Enter')
193
+ handleNumberRangeSubmit();
194
+ }, 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) => {
195
+ if (e.key === 'Enter')
196
+ handleNumberRangeSubmit();
197
+ }, 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 &&
198
+ localDateRange.to.getTime() !== localDateRange.from.getTime()
199
+ ? ` — ${format(localDateRange.to, 'dd MMM yyyy', { locale: es })}`
200
+ : ' (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: () => {
201
+ handleClearFilter();
202
+ setFilterOpen(false);
203
+ }, disabled: !isActive && !localDateRange, children: "Limpiar" }), _jsx(Button, { size: 'sm', className: 'h-7 flex-1 text-xs', onClick: handleDateRangeApply, disabled: !localDateRange?.from, children: "Aplicar" })] })] }))] })] }));
204
+ }
205
+ //# 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
- export interface FilterOption {
4
- label: string;
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
- * Supports `select`, `boolean`, `text`, `number_range`, and `date_range`
47
- * filter types from `columnDef.meta`. The `date_range` variant renders a
48
- * compact range calendar (react-day-picker, already a dep of this package) and
49
- * emits a single `"YYYY-MM-DD_YYYY-MM-DD"` value. The remote
50
- * `filterSearchEndpoint` lookups are wired by the host (DynamicTable).
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;AAE9B,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAsCnD,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;CACf;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,SAAS,GACT,MAAM,GACN,cAAc,GACd,YAAY;AACd;;;;;GAKG;GACD,gBAAgB,CAAA;AAEpB,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;CAC/D;AAED,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,qBAwc5C"}
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,qBAsE5C"}
@@ -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 { format } from 'date-fns';
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 { Popover, PopoverContent, PopoverTrigger, } from '../primitives/popover';
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
- * Supports `select`, `boolean`, `text`, `number_range`, and `date_range`
22
- * filter types from `columnDef.meta`. The `date_range` variant renders a
23
- * compact range calendar (react-day-picker, already a dep of this package) and
24
- * emits a single `"YYYY-MM-DD_YYYY-MM-DD"` value. The remote
25
- * `filterSearchEndpoint` lookups are wired by the host (DynamicTable).
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
- const filterType = meta.filterType || 'select';
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 }))] }));
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":"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"}
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"}
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asteby/metacore-ui",
3
- "version": "2.6.2",
3
+ "version": "2.7.0",
4
4
  "description": "Metacore UI kit — data-table, layout shell, command-menu, hooks y primitives shadcn reutilizables",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {