@asteby/metacore-ui 2.6.1 → 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.
- package/dist/data-table/column-filter-control.d.ts +73 -0
- package/dist/data-table/column-filter-control.d.ts.map +1 -0
- package/dist/data-table/column-filter-control.js +205 -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/dist/layout/header-actions-badge.d.ts +7 -0
- package/dist/layout/header-actions-badge.d.ts.map +1 -0
- package/dist/layout/header-actions-badge.js +16 -0
- package/dist/layout/header-actions-badge.js.map +1 -0
- package/dist/layout/header-actions.d.ts +46 -0
- package/dist/layout/header-actions.d.ts.map +1 -0
- package/dist/layout/header-actions.js +32 -0
- package/dist/layout/header-actions.js.map +1 -0
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +1 -0
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/nav-active.d.ts +14 -5
- package/dist/layout/nav-active.d.ts.map +1 -1
- package/dist/layout/nav-active.js +45 -32
- package/dist/layout/nav-active.js.map +1 -1
- package/dist/layout/nav-group.js +3 -3
- package/dist/layout/nav-group.js.map +1 -1
- package/dist/layout/types.d.ts +9 -0
- package/dist/layout/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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,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 {
|
|
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 }))] }));
|
|
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"}
|
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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether the aggregate overflow badge should render. A numeric `0` hides it
|
|
3
|
+
* (so hosts can pass a raw count without guarding falsy-zero), as do `false`,
|
|
4
|
+
* `null`, `undefined` and `''`.
|
|
5
|
+
*/
|
|
6
|
+
export declare function headerActionsHasBadge(badge: number | string | boolean | null | undefined): boolean;
|
|
7
|
+
//# sourceMappingURL=header-actions-badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-actions-badge.d.ts","sourceRoot":"","sources":["../../src/layout/header-actions-badge.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAClD,OAAO,CAIT"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Pure, dependency-free badge predicate for the mobile header overflow trigger.
|
|
2
|
+
// Kept in its own module (no `@/` aliases, no JSX) so it can be unit-tested in
|
|
3
|
+
// the package's node test environment without resolving the component's deps.
|
|
4
|
+
/**
|
|
5
|
+
* Whether the aggregate overflow badge should render. A numeric `0` hides it
|
|
6
|
+
* (so hosts can pass a raw count without guarding falsy-zero), as do `false`,
|
|
7
|
+
* `null`, `undefined` and `''`.
|
|
8
|
+
*/
|
|
9
|
+
export function headerActionsHasBadge(badge) {
|
|
10
|
+
if (typeof badge === 'number')
|
|
11
|
+
return badge !== 0;
|
|
12
|
+
if (typeof badge === 'boolean')
|
|
13
|
+
return badge;
|
|
14
|
+
return Boolean(badge);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=header-actions-badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-actions-badge.js","sourceRoot":"","sources":["../../src/layout/header-actions-badge.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAmD;IAEnD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,KAAK,CAAC,CAAA;IACjD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IAC5C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAA;AACvB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { headerActionsHasBadge } from './header-actions-badge';
|
|
3
|
+
export { headerActionsHasBadge };
|
|
4
|
+
export interface HeaderActionsProps {
|
|
5
|
+
/**
|
|
6
|
+
* The secondary header toggles (search, dark-mode, print, settings, updates,
|
|
7
|
+
* notifications, …). On `sm:`+ they render inline; below `sm` they collapse
|
|
8
|
+
* into a single overflow popover so they never spill out of the cramped phone
|
|
9
|
+
* header.
|
|
10
|
+
*/
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* Aggregate badge bubbled onto the collapsed overflow trigger so a pending
|
|
14
|
+
* notification (e.g. the "1" of a core update) is still visible when the
|
|
15
|
+
* toggles are hidden in the popover. A numeric `0`, `false`, `null`,
|
|
16
|
+
* `undefined` or `''` renders no badge. Hosts compute this from the same
|
|
17
|
+
* counts that drive the individual toggles' badges.
|
|
18
|
+
*/
|
|
19
|
+
overflowBadge?: number | string | boolean | null;
|
|
20
|
+
/** Accessible label for the overflow trigger. Defaults to "More". */
|
|
21
|
+
overflowLabel?: string;
|
|
22
|
+
/** Extra classes on the inline (desktop) container. */
|
|
23
|
+
className?: string;
|
|
24
|
+
/** Extra classes on the overflow popover content. */
|
|
25
|
+
contentClassName?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Responsive wrapper for the secondary header action toggles.
|
|
29
|
+
*
|
|
30
|
+
* - **`sm:`+ (desktop/tablet):** renders `children` inline, exactly as before.
|
|
31
|
+
* - **below `sm` (phone):** collapses every toggle into ONE overflow button (a
|
|
32
|
+
* kebab) that opens a popover containing the same toggles stacked vertically,
|
|
33
|
+
* so the header never overflows. Any pending count is bubbled onto the kebab
|
|
34
|
+
* via `overflowBadge`.
|
|
35
|
+
*
|
|
36
|
+
* Purely Tailwind-driven (`hidden sm:flex` / `flex sm:hidden`) — no resize
|
|
37
|
+
* listeners. The toggles live in the DOM twice (inline + popover) but only the
|
|
38
|
+
* breakpoint-visible copy is rendered/interactive at a time. A Popover (not a
|
|
39
|
+
* DropdownMenu) hosts the overflow so arbitrary interactive children — including
|
|
40
|
+
* toggles that open their own menus — behave correctly.
|
|
41
|
+
*
|
|
42
|
+
* The user avatar / profile dropdown is intentionally NOT part of this — keep it
|
|
43
|
+
* a sibling that stays always-visible outside `<HeaderActions>`.
|
|
44
|
+
*/
|
|
45
|
+
export declare function HeaderActions({ children, overflowBadge, overflowLabel, className, contentClassName, }: HeaderActionsProps): React.JSX.Element;
|
|
46
|
+
//# sourceMappingURL=header-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-actions.d.ts","sourceRoot":"","sources":["../../src/layout/header-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAU9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,OAAO,EAAE,qBAAqB,EAAE,CAAA;AAEhC,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;IAChD,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,aAAa,EACb,aAAsB,EACtB,SAAS,EACT,gBAAgB,GACjB,EAAE,kBAAkB,qBAkDpB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { MoreVertical } from 'lucide-react';
|
|
4
|
+
import { cn } from '../lib/utils';
|
|
5
|
+
import { Button } from '../primitives/button';
|
|
6
|
+
import { Badge } from '../primitives/badge';
|
|
7
|
+
import { Popover, PopoverContent, PopoverTrigger, } from '../primitives/popover';
|
|
8
|
+
import { headerActionsHasBadge } from './header-actions-badge';
|
|
9
|
+
export { headerActionsHasBadge };
|
|
10
|
+
/**
|
|
11
|
+
* Responsive wrapper for the secondary header action toggles.
|
|
12
|
+
*
|
|
13
|
+
* - **`sm:`+ (desktop/tablet):** renders `children` inline, exactly as before.
|
|
14
|
+
* - **below `sm` (phone):** collapses every toggle into ONE overflow button (a
|
|
15
|
+
* kebab) that opens a popover containing the same toggles stacked vertically,
|
|
16
|
+
* so the header never overflows. Any pending count is bubbled onto the kebab
|
|
17
|
+
* via `overflowBadge`.
|
|
18
|
+
*
|
|
19
|
+
* Purely Tailwind-driven (`hidden sm:flex` / `flex sm:hidden`) — no resize
|
|
20
|
+
* listeners. The toggles live in the DOM twice (inline + popover) but only the
|
|
21
|
+
* breakpoint-visible copy is rendered/interactive at a time. A Popover (not a
|
|
22
|
+
* DropdownMenu) hosts the overflow so arbitrary interactive children — including
|
|
23
|
+
* toggles that open their own menus — behave correctly.
|
|
24
|
+
*
|
|
25
|
+
* The user avatar / profile dropdown is intentionally NOT part of this — keep it
|
|
26
|
+
* a sibling that stays always-visible outside `<HeaderActions>`.
|
|
27
|
+
*/
|
|
28
|
+
export function HeaderActions({ children, overflowBadge, overflowLabel = 'More', className, contentClassName, }) {
|
|
29
|
+
const showBadge = headerActionsHasBadge(overflowBadge);
|
|
30
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: cn('hidden items-center gap-2 sm:flex sm:gap-4', className), children: children }), _jsx("div", { className: 'flex sm:hidden', children: _jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: 'ghost', size: 'icon', className: 'relative', "aria-label": overflowLabel, children: [_jsx(MoreVertical, { className: 'h-5 w-5' }), showBadge && (_jsx(Badge, { className: 'absolute -right-0.5 -top-0.5 h-4 min-w-4 justify-center rounded-full px-1 py-0 text-[10px] leading-none', "aria-hidden": true, children: typeof overflowBadge === 'boolean' ? '' : overflowBadge }))] }) }), _jsx(PopoverContent, { align: 'end', sideOffset: 8, className: cn('flex w-auto min-w-44 flex-col items-stretch gap-1 p-2', contentClassName), children: children })] }) })] }));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=header-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-actions.js","sourceRoot":"","sources":["../../src/layout/header-actions.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,OAAO,EAAE,qBAAqB,EAAE,CAAA;AA0BhC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,aAAa,EACb,aAAa,GAAG,MAAM,EACtB,SAAS,EACT,gBAAgB,GACG;IACnB,MAAM,SAAS,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAA;IAEtD,OAAO,CACL,8BAEE,cACE,SAAS,EAAE,EAAE,CACX,4CAA4C,EAC5C,SAAS,CACV,YAEA,QAAQ,GACL,EAGN,cAAK,SAAS,EAAC,gBAAgB,YAC7B,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,MAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,UAAU,gBACR,aAAa,aAEzB,KAAC,YAAY,IAAC,SAAS,EAAC,SAAS,GAAG,EACnC,SAAS,IAAI,CACZ,KAAC,KAAK,IACJ,SAAS,EAAC,yGAAyG,iCAGlH,OAAO,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,GAClD,CACT,IACM,GACM,EACjB,KAAC,cAAc,IACb,KAAK,EAAC,KAAK,EACX,UAAU,EAAE,CAAC,EACb,SAAS,EAAE,EAAE,CACX,uDAAuD,EACvD,gBAAgB,CACjB,YAEA,QAAQ,GACM,IACT,GACN,IACL,CACJ,CAAA;AACH,CAAC"}
|
package/dist/layout/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { AuthenticatedLayout } from './authenticated-layout';
|
|
2
2
|
export { AppSidebar, OrganizationCard } from './app-sidebar';
|
|
3
3
|
export { Header } from './header';
|
|
4
|
+
export { HeaderActions, type HeaderActionsProps } from './header-actions';
|
|
4
5
|
export { NavUser } from './nav-user';
|
|
5
6
|
export { NavGroup, type NavLinkComponent, type NavGroupProps } from './nav-group';
|
|
6
7
|
export { checkIsActive, splitHref, declaredFiltersMatch, VIEW_PARAMS, type SplitHref, } from './nav-active';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AACjF,OAAO,EACL,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,WAAW,EACX,KAAK,SAAS,GACf,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAA;AACpB,YAAY,EACV,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,UAAU,GACX,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AACjF,OAAO,EACL,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,WAAW,EACX,KAAK,SAAS,GACf,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAA;AACpB,YAAY,EACV,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,UAAU,GACX,MAAM,SAAS,CAAA"}
|
package/dist/layout/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { AuthenticatedLayout } from './authenticated-layout';
|
|
2
2
|
export { AppSidebar, OrganizationCard } from './app-sidebar';
|
|
3
3
|
export { Header } from './header';
|
|
4
|
+
export { HeaderActions } from './header-actions';
|
|
4
5
|
export { NavUser } from './nav-user';
|
|
5
6
|
export { NavGroup } from './nav-group';
|
|
6
7
|
export { checkIsActive, splitHref, declaredFiltersMatch, VIEW_PARAMS, } from './nav-active';
|
package/dist/layout/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,QAAQ,EAA6C,MAAM,aAAa,CAAA;AACjF,OAAO,EACL,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,WAAW,GAEZ,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,GAGnB,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,aAAa,EAA2B,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,QAAQ,EAA6C,MAAM,aAAa,CAAA;AACjF,OAAO,EACL,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,WAAW,GAEZ,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,GAGnB,MAAM,aAAa,CAAA"}
|
|
@@ -40,10 +40,14 @@ export declare function declaredFiltersMatch(curFilters: string, targetFilters:
|
|
|
40
40
|
*
|
|
41
41
|
* View-aware, query-aware AND filter-aware so sibling navs over the same model
|
|
42
42
|
* light up ONE at a time:
|
|
43
|
-
* - `view
|
|
44
|
-
*
|
|
45
|
-
* (
|
|
46
|
-
*
|
|
43
|
+
* - The `view` surface param is the item's identity, but it is matched on the
|
|
44
|
+
* EFFECTIVE view: an absent `?view=` resolves to the model's default
|
|
45
|
+
* `view_type` (`defaultView`, the same fallback `DynamicView` uses to pick a
|
|
46
|
+
* renderer). So a view-less landing (`/m/x?per_page=15`) lights ONLY the
|
|
47
|
+
* item whose view equals the model default — the board on a kanban-default
|
|
48
|
+
* model, the list on a list-default model — and never both. Explicit
|
|
49
|
+
* `?view=kanban`/`?view=list` URLs match their item directly. `group_by`
|
|
50
|
+
* only refines a board, so it is not part of the identity.
|
|
47
51
|
* - Other non-`f_` query params (page/sort/search) must match EXACTLY only
|
|
48
52
|
* when the item declares them — transient query never un-highlights a plain
|
|
49
53
|
* link.
|
|
@@ -51,6 +55,11 @@ export declare function declaredFiltersMatch(curFilters: string, targetFilters:
|
|
|
51
55
|
* must all be present in the current href. An item that declares NO filters
|
|
52
56
|
* matches on path alone (a manually-filtered table still highlights its base
|
|
53
57
|
* item), preserving the prior behaviour for plain links.
|
|
58
|
+
*
|
|
59
|
+
* `defaultView` is the model's default `view_type` for this path (e.g.
|
|
60
|
+
* `'kanban'`). Hosts thread it from `metadata.view_type`; when omitted the
|
|
61
|
+
* absent-view fallback is `''` (a view-less URL then only matches a view-less
|
|
62
|
+
* item).
|
|
54
63
|
*/
|
|
55
|
-
export declare function checkIsActive(href: string, item: NavItem, mainNav?: boolean): boolean;
|
|
64
|
+
export declare function checkIsActive(href: string, item: NavItem, mainNav?: boolean, defaultView?: string): boolean;
|
|
56
65
|
//# sourceMappingURL=nav-active.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-active.d.ts","sourceRoot":"","sources":["../../src/layout/nav-active.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAA;AAEvE;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,aAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"nav-active.d.ts","sourceRoot":"","sources":["../../src/layout/nav-active.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAA;AAEvE;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,aAAgC,CAAA;AA6BxD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CA0BhD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,OAAO,CAIT;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,UAAQ,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAqDT"}
|
|
@@ -7,21 +7,30 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export const VIEW_PARAMS = new Set(['view', 'group_by']);
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
10
|
+
* Extracts the `view=` value from a normalized view bucket (e.g. `'kanban'`
|
|
11
|
+
* from `'group_by=stage&view=kanban'`, `'list'` from `'view=list'`, `''` when
|
|
12
|
+
* the bucket declares no `view`). The `view` param is the surface identity
|
|
13
|
+
* (table vs board); `group_by` only refines a board, so it never makes a nav
|
|
14
|
+
* item identity on its own.
|
|
15
|
+
*/
|
|
16
|
+
function viewValueOf(viewBucket) {
|
|
17
|
+
for (const part of viewBucket.split('&')) {
|
|
18
|
+
if (part.startsWith('view='))
|
|
19
|
+
return part.slice('view='.length);
|
|
20
|
+
}
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Resolves a (possibly empty) `view` value to the EFFECTIVE surface, mirroring
|
|
25
|
+
* `DynamicView.resolveActiveView`: an absent `?view=` falls back to the model's
|
|
26
|
+
* default `view_type`. This is why the matcher must be told the model default —
|
|
27
|
+
* a view-less landing on a kanban-default model paints (and must light) the
|
|
28
|
+
* board, while on a list-default model it paints (and must light) the list.
|
|
29
|
+
* Without a known default we resolve to `''` (no assumption) so a view-less URL
|
|
30
|
+
* only matches a view-less item — never both siblings.
|
|
21
31
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return DEFAULT_VIEW_BUCKETS.has(view);
|
|
32
|
+
function resolveView(viewValue, defaultView) {
|
|
33
|
+
return viewValue || defaultView || '';
|
|
25
34
|
}
|
|
26
35
|
/**
|
|
27
36
|
* Splits a URL into its path and three normalized, sorted query buckets:
|
|
@@ -82,10 +91,14 @@ export function declaredFiltersMatch(curFilters, targetFilters) {
|
|
|
82
91
|
*
|
|
83
92
|
* View-aware, query-aware AND filter-aware so sibling navs over the same model
|
|
84
93
|
* light up ONE at a time:
|
|
85
|
-
* - `view
|
|
86
|
-
*
|
|
87
|
-
* (
|
|
88
|
-
*
|
|
94
|
+
* - The `view` surface param is the item's identity, but it is matched on the
|
|
95
|
+
* EFFECTIVE view: an absent `?view=` resolves to the model's default
|
|
96
|
+
* `view_type` (`defaultView`, the same fallback `DynamicView` uses to pick a
|
|
97
|
+
* renderer). So a view-less landing (`/m/x?per_page=15`) lights ONLY the
|
|
98
|
+
* item whose view equals the model default — the board on a kanban-default
|
|
99
|
+
* model, the list on a list-default model — and never both. Explicit
|
|
100
|
+
* `?view=kanban`/`?view=list` URLs match their item directly. `group_by`
|
|
101
|
+
* only refines a board, so it is not part of the identity.
|
|
89
102
|
* - Other non-`f_` query params (page/sort/search) must match EXACTLY only
|
|
90
103
|
* when the item declares them — transient query never un-highlights a plain
|
|
91
104
|
* link.
|
|
@@ -93,23 +106,23 @@ export function declaredFiltersMatch(curFilters, targetFilters) {
|
|
|
93
106
|
* must all be present in the current href. An item that declares NO filters
|
|
94
107
|
* matches on path alone (a manually-filtered table still highlights its base
|
|
95
108
|
* item), preserving the prior behaviour for plain links.
|
|
109
|
+
*
|
|
110
|
+
* `defaultView` is the model's default `view_type` for this path (e.g.
|
|
111
|
+
* `'kanban'`). Hosts thread it from `metadata.view_type`; when omitted the
|
|
112
|
+
* absent-view fallback is `''` (a view-less URL then only matches a view-less
|
|
113
|
+
* item).
|
|
96
114
|
*/
|
|
97
|
-
export function checkIsActive(href, item, mainNav = false) {
|
|
115
|
+
export function checkIsActive(href, item, mainNav = false, defaultView) {
|
|
98
116
|
const hasItems = 'items' in item && Array.isArray(item.items);
|
|
99
117
|
const cur = splitHref(href);
|
|
100
118
|
const target = splitHref(item.url);
|
|
101
|
-
// Same path: this item matches only when the view
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
// lights the Issues/list item on the bare default landing (`?per_page=15`, no
|
|
109
|
-
// `view`) without ever lighting the Board (`?view=kanban`), which is not a
|
|
110
|
-
// default bucket — so siblings stay mutually exclusive.
|
|
111
|
-
const viewMatches = cur.view === target.view ||
|
|
112
|
-
(isDefaultViewBucket(cur.view) && isDefaultViewBucket(target.view));
|
|
119
|
+
// Same path: this item matches only when the EFFECTIVE view (resolving an
|
|
120
|
+
// absent `?view=` to the model default) matches, transient query matches when
|
|
121
|
+
// declared, and declared f_ filters are all present. A same-path item that
|
|
122
|
+
// DOESN'T match falls through (a collapsible parent can still be active via a
|
|
123
|
+
// matching child below) rather than returning early.
|
|
124
|
+
const viewMatches = resolveView(viewValueOf(cur.view), defaultView) ===
|
|
125
|
+
resolveView(viewValueOf(target.view), defaultView);
|
|
113
126
|
if (cur.path === target.path &&
|
|
114
127
|
viewMatches &&
|
|
115
128
|
(!target.query || cur.query === target.query) &&
|
|
@@ -117,7 +130,7 @@ export function checkIsActive(href, item, mainNav = false) {
|
|
|
117
130
|
return true;
|
|
118
131
|
}
|
|
119
132
|
if (hasItems &&
|
|
120
|
-
item.items.some((i) => checkIsActive(href, i))) {
|
|
133
|
+
item.items.some((i) => checkIsActive(href, i, false, defaultView))) {
|
|
121
134
|
return true;
|
|
122
135
|
}
|
|
123
136
|
if (mainNav) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-active.js","sourceRoot":"","sources":["../../src/layout/nav-active.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;AAExD
|
|
1
|
+
{"version":3,"file":"nav-active.js","sourceRoot":"","sources":["../../src/layout/nav-active.ts"],"names":[],"mappings":"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"}
|
package/dist/layout/nav-group.js
CHANGED
|
@@ -37,13 +37,13 @@ function hasBadge(badge) {
|
|
|
37
37
|
}
|
|
38
38
|
function SidebarMenuLink({ item, href, LinkComponent, onItemHover, }) {
|
|
39
39
|
const { setOpenMobile } = useSidebar();
|
|
40
|
-
return (_jsx(SidebarMenuItem, { children: _jsx(SidebarMenuButton, { asChild: true, isActive: checkIsActive(href, item), tooltip: item.title, children: _jsxs(LinkComponent, { to: item.url, onClick: () => setOpenMobile(false), onMouseEnter: () => onItemHover?.(item.url), children: [item.icon && _jsx(item.icon, {}), _jsx("span", { children: item.title }), hasBadge(item.badge) && _jsx(NavBadge, { children: item.badge })] }) }) }));
|
|
40
|
+
return (_jsx(SidebarMenuItem, { children: _jsx(SidebarMenuButton, { asChild: true, isActive: checkIsActive(href, item, false, item.defaultView), tooltip: item.title, children: _jsxs(LinkComponent, { to: item.url, onClick: () => setOpenMobile(false), onMouseEnter: () => onItemHover?.(item.url), children: [item.icon && _jsx(item.icon, {}), _jsx("span", { children: item.title }), hasBadge(item.badge) && _jsx(NavBadge, { children: item.badge })] }) }) }));
|
|
41
41
|
}
|
|
42
42
|
function SidebarMenuCollapsible({ item, href, LinkComponent, onItemHover, }) {
|
|
43
43
|
const { setOpenMobile } = useSidebar();
|
|
44
|
-
return (_jsx(Collapsible, { asChild: true, defaultOpen: checkIsActive(href, item, true), className: 'group/collapsible', children: _jsxs(SidebarMenuItem, { children: [_jsx(CollapsibleTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { tooltip: item.title, children: [item.icon && _jsx(item.icon, {}), _jsx("span", { children: item.title }), hasBadge(item.badge) && _jsx(NavBadge, { children: item.badge }), _jsx(ChevronRight, { className: 'ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90 rtl:rotate-180' })] }) }), _jsx(CollapsibleContent, { className: 'CollapsibleContent', children: _jsx(SidebarMenuSub, { children: item.items.map((subItem) => (_jsx(SidebarMenuSubItem, { children: _jsx(SidebarMenuSubButton, { asChild: true, isActive: checkIsActive(href, subItem), children: _jsxs(LinkComponent, { to: subItem.url, onClick: () => setOpenMobile(false), onMouseEnter: () => onItemHover?.(subItem.url), children: [subItem.icon && _jsx(subItem.icon, {}), _jsx("span", { children: subItem.title }), hasBadge(subItem.badge) && _jsx(NavBadge, { children: subItem.badge })] }) }) }, subItem.title))) }) })] }) }));
|
|
44
|
+
return (_jsx(Collapsible, { asChild: true, defaultOpen: checkIsActive(href, item, true, item.defaultView), className: 'group/collapsible', children: _jsxs(SidebarMenuItem, { children: [_jsx(CollapsibleTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { tooltip: item.title, children: [item.icon && _jsx(item.icon, {}), _jsx("span", { children: item.title }), hasBadge(item.badge) && _jsx(NavBadge, { children: item.badge }), _jsx(ChevronRight, { className: 'ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90 rtl:rotate-180' })] }) }), _jsx(CollapsibleContent, { className: 'CollapsibleContent', children: _jsx(SidebarMenuSub, { children: item.items.map((subItem) => (_jsx(SidebarMenuSubItem, { children: _jsx(SidebarMenuSubButton, { asChild: true, isActive: checkIsActive(href, subItem, false, subItem.defaultView ?? item.defaultView), children: _jsxs(LinkComponent, { to: subItem.url, onClick: () => setOpenMobile(false), onMouseEnter: () => onItemHover?.(subItem.url), children: [subItem.icon && _jsx(subItem.icon, {}), _jsx("span", { children: subItem.title }), hasBadge(subItem.badge) && _jsx(NavBadge, { children: subItem.badge })] }) }) }, subItem.title))) }) })] }) }));
|
|
45
45
|
}
|
|
46
46
|
function SidebarMenuCollapsedDropdown({ item, href, LinkComponent, onItemHover, }) {
|
|
47
|
-
return (_jsx(SidebarMenuItem, { children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { tooltip: item.title, isActive: checkIsActive(href, item), children: [item.icon && _jsx(item.icon, {}), _jsx("span", { children: item.title }), hasBadge(item.badge) && _jsx(NavBadge, { children: item.badge }), _jsx(ChevronRight, { className: 'ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90' })] }) }), _jsxs(DropdownMenuContent, { side: 'right', align: 'start', sideOffset: 4, children: [_jsxs(DropdownMenuLabel, { children: [item.title, " ", item.badge ? `(${item.badge})` : ''] }), _jsx(DropdownMenuSeparator, {}), item.items.map((sub) => (_jsx(DropdownMenuItem, { asChild: true, children: _jsxs(LinkComponent, { to: sub.url, className: `${checkIsActive(href, sub) ? 'bg-secondary' : ''}`, onMouseEnter: () => onItemHover?.(sub.url), children: [sub.icon && _jsx(sub.icon, {}), _jsx("span", { className: 'max-w-52 text-wrap', children: sub.title }), hasBadge(sub.badge) && (_jsx("span", { className: 'ms-auto text-xs', children: sub.badge }))] }) }, `${sub.title}-${sub.url}`)))] })] }) }));
|
|
47
|
+
return (_jsx(SidebarMenuItem, { children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { tooltip: item.title, isActive: checkIsActive(href, item, false, item.defaultView), children: [item.icon && _jsx(item.icon, {}), _jsx("span", { children: item.title }), hasBadge(item.badge) && _jsx(NavBadge, { children: item.badge }), _jsx(ChevronRight, { className: 'ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90' })] }) }), _jsxs(DropdownMenuContent, { side: 'right', align: 'start', sideOffset: 4, children: [_jsxs(DropdownMenuLabel, { children: [item.title, " ", item.badge ? `(${item.badge})` : ''] }), _jsx(DropdownMenuSeparator, {}), item.items.map((sub) => (_jsx(DropdownMenuItem, { asChild: true, children: _jsxs(LinkComponent, { to: sub.url, className: `${checkIsActive(href, sub, false, sub.defaultView ?? item.defaultView) ? 'bg-secondary' : ''}`, onMouseEnter: () => onItemHover?.(sub.url), children: [sub.icon && _jsx(sub.icon, {}), _jsx("span", { className: 'max-w-52 text-wrap', children: sub.title }), hasBadge(sub.badge) && (_jsx("span", { className: 'ms-auto text-xs', children: sub.badge }))] }) }, `${sub.title}-${sub.url}`)))] })] }) }));
|
|
48
48
|
}
|
|
49
49
|
//# sourceMappingURL=nav-group.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-group.js","sourceRoot":"","sources":["../../src/layout/nav-group.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"nav-group.js","sourceRoot":"","sources":["../../src/layout/nav-group.tsx"],"names":[],"mappings":"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"}
|
package/dist/layout/types.d.ts
CHANGED
|
@@ -11,6 +11,15 @@ export interface NavLinkItem {
|
|
|
11
11
|
*/
|
|
12
12
|
badge?: number | string;
|
|
13
13
|
role?: string;
|
|
14
|
+
/**
|
|
15
|
+
* The model's default `view_type` for this entry's path (e.g. `'kanban'` or
|
|
16
|
+
* `'list'`). Lets the active-state matcher resolve a view-less current URL
|
|
17
|
+
* (`/m/x?per_page=15`, no `?view`) to the surface the model actually paints,
|
|
18
|
+
* so exactly one of sibling view items (Board vs List) lights up. Hosts thread
|
|
19
|
+
* it from `metadata.view_type`; omit it and a view-less URL only matches a
|
|
20
|
+
* view-less item.
|
|
21
|
+
*/
|
|
22
|
+
defaultView?: string;
|
|
14
23
|
}
|
|
15
24
|
export interface NavCollapsibleItem extends NavLinkItem {
|
|
16
25
|
items: NavLinkItem[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,KAAK,EAAE,WAAW,EAAE,CAAA;CACrB;AAED,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,kBAAkB,CAAA;AAEtD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd"}
|
package/package.json
CHANGED