@tumaet/prompt-ui-components 1.0.3 → 1.0.5
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/components/table/PromptTable.js +47 -0
- package/dist/components/table/PromptTable.js.map +1 -0
- package/dist/components/table/TableTypes.js +2 -0
- package/dist/components/table/TableTypes.js.map +1 -0
- package/dist/components/table/actions/ActionDialog.js +11 -0
- package/dist/components/table/actions/ActionDialog.js.map +1 -0
- package/dist/components/table/actions/ActionsMenu.js +46 -0
- package/dist/components/table/actions/ActionsMenu.js.map +1 -0
- package/dist/components/table/actions/DropdownMenuItemForRowAction.js +15 -0
- package/dist/components/table/actions/DropdownMenuItemForRowAction.js.map +1 -0
- package/dist/components/table/columnDefs/actionColumn.js +11 -0
- package/dist/components/table/columnDefs/actionColumn.js.map +1 -0
- package/dist/components/table/columnDefs/selectColumn.js +14 -0
- package/dist/components/table/columnDefs/selectColumn.js.map +1 -0
- package/dist/components/table/filters/ActiveTableFiltersBar.js +46 -0
- package/dist/components/table/filters/ActiveTableFiltersBar.js.map +1 -0
- package/dist/components/table/filters/FilterBadge.js +7 -0
- package/dist/components/table/filters/FilterBadge.js.map +1 -0
- package/dist/components/table/filters/NumericRangeFilterSection.js +25 -0
- package/dist/components/table/filters/NumericRangeFilterSection.js.map +1 -0
- package/dist/components/table/filters/SelectFilterSection.js +13 -0
- package/dist/components/table/filters/SelectFilterSection.js.map +1 -0
- package/dist/components/table/filters/TableFiltersMenu.js +20 -0
- package/dist/components/table/filters/TableFiltersMenu.js.map +1 -0
- package/dist/components/table/filters/applyFiltersToColumns.js +23 -0
- package/dist/components/table/filters/applyFiltersToColumns.js.map +1 -0
- package/dist/components/table/filters/filterFns.js +27 -0
- package/dist/components/table/filters/filterFns.js.map +1 -0
- package/dist/components/table/generateColumns.js +19 -0
- package/dist/components/table/generateColumns.js.map +1 -0
- package/dist/components/table/index.js +3 -2
- package/dist/components/table/index.js.map +1 -1
- package/dist/components/table/tableBarComponents/TableActionsButton.js +10 -0
- package/dist/components/table/tableBarComponents/TableActionsButton.js.map +1 -0
- package/dist/components/table/tableBarComponents/TableColumnVisibilityButton.js +15 -0
- package/dist/components/table/tableBarComponents/TableColumnVisibilityButton.js.map +1 -0
- package/dist/components/table/tableBarComponents/TableInfoText.js +6 -0
- package/dist/components/table/tableBarComponents/TableInfoText.js.map +1 -0
- package/dist/components/table/tableBarComponents/TableSearch.js +7 -0
- package/dist/components/table/tableBarComponents/TableSearch.js.map +1 -0
- package/dist/components/table/tableComponents/SortableHeader.js +7 -0
- package/dist/components/table/tableComponents/SortableHeader.js.map +1 -0
- package/dist/components/table/tableComponents/TableCheckbox.js +6 -0
- package/dist/components/table/tableComponents/TableCheckbox.js.map +1 -0
- package/dist/components/table/tableComponents/TableHeaders.js +17 -0
- package/dist/components/table/tableComponents/TableHeaders.js.map +1 -0
- package/dist/components/table/tableComponents/TableRows.js +15 -0
- package/dist/components/table/tableComponents/TableRows.js.map +1 -0
- package/dist/types/components/table/PromptTable.d.ts +3 -0
- package/dist/types/components/table/TableTypes.d.ts +44 -0
- package/dist/types/components/table/actions/ActionDialog.d.ts +10 -0
- package/dist/types/components/table/actions/ActionsMenu.d.ts +10 -0
- package/dist/types/components/table/actions/DropdownMenuItemForRowAction.d.ts +9 -0
- package/dist/types/components/table/columnDefs/actionColumn.d.ts +5 -0
- package/dist/types/components/table/columnDefs/selectColumn.d.ts +4 -0
- package/dist/types/components/table/filters/ActiveTableFiltersBar.d.ts +8 -0
- package/dist/types/components/table/filters/FilterBadge.d.ts +4 -0
- package/dist/types/components/table/filters/NumericRangeFilterSection.d.ts +8 -0
- package/dist/types/components/table/filters/SelectFilterSection.d.ts +9 -0
- package/dist/types/components/table/filters/TableFiltersMenu.d.ts +8 -0
- package/dist/types/components/table/filters/applyFiltersToColumns.d.ts +3 -0
- package/dist/types/components/table/filters/filterFns.d.ts +3 -0
- package/dist/types/components/table/generateColumns.d.ts +2 -0
- package/dist/types/components/table/index.d.ts +3 -2
- package/dist/types/components/table/tableBarComponents/TableActionsButton.d.ts +9 -0
- package/dist/types/components/table/tableBarComponents/TableColumnVisibilityButton.d.ts +7 -0
- package/dist/types/components/table/tableBarComponents/TableInfoText.d.ts +7 -0
- package/dist/types/components/table/tableBarComponents/TableSearch.d.ts +7 -0
- package/dist/types/components/table/tableComponents/SortableHeader.d.ts +7 -0
- package/dist/types/components/table/tableComponents/TableCheckbox.d.ts +7 -0
- package/dist/types/components/table/tableComponents/TableHeaders.d.ts +7 -0
- package/dist/types/components/table/tableComponents/TableRows.d.ts +8 -0
- package/package.json +3 -2
- package/dist/components/table/GroupActionDialog.js +0 -8
- package/dist/components/table/GroupActionDialog.js.map +0 -1
- package/dist/components/table/SortableHeader.js +0 -7
- package/dist/components/table/SortableHeader.js.map +0 -1
- package/dist/types/components/table/GroupActionDialog.d.ts +0 -11
- package/dist/types/components/table/SortableHeader.d.ts +0 -4
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { getCoreRowModel, getFilteredRowModel, getSortedRowModel, useReactTable, } from '@tanstack/react-table';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { Table } from '../ui';
|
|
5
|
+
import { checkboxColumn } from './columnDefs/selectColumn';
|
|
6
|
+
import { actionColumn } from './columnDefs/actionColumn';
|
|
7
|
+
import { TableSearch } from './tableBarComponents/TableSearch';
|
|
8
|
+
import { TableActionsButton } from './tableBarComponents/TableActionsButton';
|
|
9
|
+
import { TableInfoText } from './tableBarComponents/TableInfoText';
|
|
10
|
+
import { TableHeaders } from './tableComponents/TableHeaders';
|
|
11
|
+
import { TableRows } from './tableComponents/TableRows';
|
|
12
|
+
import { TableColumnVisibilityButton } from './tableBarComponents/TableColumnVisibilityButton';
|
|
13
|
+
import { generateColumns } from './generateColumns';
|
|
14
|
+
import { TableFiltersMenu } from './filters/TableFiltersMenu';
|
|
15
|
+
import { ActiveTableFiltersBar } from './filters/ActiveTableFiltersBar';
|
|
16
|
+
import { applyFiltersToColumns } from './filters/applyFiltersToColumns';
|
|
17
|
+
export function PromptTable({ data, actions, columns, filters, onRowClick, }) {
|
|
18
|
+
const [sorting, setSorting] = useState([]);
|
|
19
|
+
const [search, setSearch] = useState('');
|
|
20
|
+
const [rowSelection, setRowSelection] = useState({});
|
|
21
|
+
const baseColumns = columns ?? generateColumns(data);
|
|
22
|
+
const columnsWithFilterFns = applyFiltersToColumns(baseColumns, filters);
|
|
23
|
+
const cols = [
|
|
24
|
+
checkboxColumn(),
|
|
25
|
+
...columnsWithFilterFns,
|
|
26
|
+
...(actions ? [actionColumn(actions)] : []),
|
|
27
|
+
];
|
|
28
|
+
const table = useReactTable({
|
|
29
|
+
data: data,
|
|
30
|
+
columns: cols,
|
|
31
|
+
state: {
|
|
32
|
+
sorting,
|
|
33
|
+
globalFilter: search,
|
|
34
|
+
rowSelection,
|
|
35
|
+
},
|
|
36
|
+
onSortingChange: setSorting,
|
|
37
|
+
onGlobalFilterChange: setSearch,
|
|
38
|
+
onRowSelectionChange: setRowSelection,
|
|
39
|
+
enableRowSelection: true,
|
|
40
|
+
getRowId: (row) => row.id,
|
|
41
|
+
getCoreRowModel: getCoreRowModel(),
|
|
42
|
+
getFilteredRowModel: getFilteredRowModel(),
|
|
43
|
+
getSortedRowModel: getSortedRowModel(),
|
|
44
|
+
});
|
|
45
|
+
return (_jsxs("div", { className: 'flex flex-col gap-3 w-full', children: [_jsxs("div", { className: 'flex items-center justify-between gap-3 flex-wrap', children: [_jsx(TableSearch, { value: search, onChange: (e) => setSearch(e.target.value) }), filters && _jsx(TableFiltersMenu, { table: table, filters: filters }), _jsx(TableColumnVisibilityButton, { table: table }), actions && _jsx(TableActionsButton, { table: table, actions: actions })] }), _jsx(ActiveTableFiltersBar, { table: table, filters: filters }), _jsx(TableInfoText, { table: table }), _jsx("div", { className: 'rounded-md border overflow-x-auto w-full', children: _jsxs(Table, { className: 'table-auto w-full relative', children: [_jsx(TableHeaders, { table: table }), _jsx(TableRows, { table: table, onRowClick: onRowClick })] }) })] }));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=PromptTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptTable.js","sourceRoot":"","sources":["../../../src/components/table/PromptTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableTypes.js","sourceRoot":"","sources":["../../../src/components/table/TableTypes.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../../components/ui';
|
|
3
|
+
export function ActionDialog({ action, selectedRows, onClose, onConfirm, }) {
|
|
4
|
+
const description = typeof action?.confirm?.description === 'function'
|
|
5
|
+
? action.confirm.description(selectedRows.length)
|
|
6
|
+
: (action?.confirm?.description ?? '');
|
|
7
|
+
return (_jsx(Dialog, { open: true, onOpenChange: onClose, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: action.confirm?.title }), _jsx(DialogDescription, { children: description })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: 'outline', onClick: onClose, children: "Cancel" }), _jsx(Button, { variant: action.confirm?.variant ?? 'default', onClick: async () => {
|
|
8
|
+
await onConfirm();
|
|
9
|
+
}, children: action.confirm?.confirmLabel ?? 'Confirm' })] })] }) }));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=ActionDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionDialog.js","sourceRoot":"","sources":["../../../../src/components/table/actions/ActionDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EACN,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAA;AAWxB,MAAM,UAAU,YAAY,CAAmB,EAC7C,MAAM,EACN,YAAY,EACZ,OAAO,EACP,SAAS,GACY;IACrB,MAAM,WAAW,GACf,OAAO,MAAM,EAAE,OAAO,EAAE,WAAW,KAAK,UAAU;QAChD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC;QACjD,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,IAAI,EAAE,CAAC,CAAA;IAC1C,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,QAAC,YAAY,EAAE,OAAO,YAChC,MAAC,aAAa,eACZ,MAAC,YAAY,eACX,KAAC,WAAW,cAAE,MAAM,CAAC,OAAO,EAAE,KAAK,GAAe,EAClD,KAAC,iBAAiB,cAAE,WAAW,GAAqB,IACvC,EAEf,MAAC,YAAY,eACX,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,OAAO,uBAEjC,EACT,KAAC,MAAM,IACL,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,SAAS,EAC7C,OAAO,EAAE,KAAK,IAAI,EAAE;gCAClB,MAAM,SAAS,EAAE,CAAA;4BACnB,CAAC,YAEA,MAAM,CAAC,OAAO,EAAE,YAAY,IAAI,SAAS,GACnC,IACI,IACD,GACT,CACV,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuLabel, DropdownMenuTrigger, } from '../../../components/ui';
|
|
4
|
+
import { ActionDialog } from './ActionDialog';
|
|
5
|
+
import { DropdownMenuItemForRowAction } from './DropdownMenuItemForRowAction';
|
|
6
|
+
import { Loader2 } from 'lucide-react';
|
|
7
|
+
export function ActionsMenu({ selectedRows, triggerComponent, actions, onFinish, }) {
|
|
8
|
+
const [menuOpen, setMenuOpen] = useState(false);
|
|
9
|
+
const [openActionConfirmation, setOpenActionConfirmation] = useState(null);
|
|
10
|
+
const [isExecuting, setIsExecuting] = useState(false);
|
|
11
|
+
const closeMenu = () => {
|
|
12
|
+
setMenuOpen(false);
|
|
13
|
+
onFinish?.();
|
|
14
|
+
};
|
|
15
|
+
const executeAction = async (action) => {
|
|
16
|
+
const rowsToAffect = [...selectedRows];
|
|
17
|
+
try {
|
|
18
|
+
setIsExecuting(true);
|
|
19
|
+
await action.onAction(rowsToAffect);
|
|
20
|
+
}
|
|
21
|
+
finally {
|
|
22
|
+
setIsExecuting(false);
|
|
23
|
+
closeMenu();
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const clickMenuItem = async (action) => {
|
|
27
|
+
if (action.confirm) {
|
|
28
|
+
setOpenActionConfirmation(action);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
await executeAction(action);
|
|
32
|
+
};
|
|
33
|
+
const clickDialogConfirm = async () => {
|
|
34
|
+
if (!openActionConfirmation)
|
|
35
|
+
return;
|
|
36
|
+
const action = openActionConfirmation;
|
|
37
|
+
setOpenActionConfirmation(null);
|
|
38
|
+
await executeAction(action);
|
|
39
|
+
};
|
|
40
|
+
return (_jsxs(_Fragment, { children: [_jsxs(DropdownMenu, { open: menuOpen && !isExecuting, onOpenChange: (open) => {
|
|
41
|
+
if (!isExecuting) {
|
|
42
|
+
setMenuOpen(open);
|
|
43
|
+
}
|
|
44
|
+
}, children: [_jsx(DropdownMenuTrigger, { asChild: true, disabled: isExecuting, children: _jsx("div", { className: 'relative inline-flex items-center', children: isExecuting ? _jsx(Loader2, { className: 'h-4 w-4 animate-spin' }) : triggerComponent }) }), _jsxs(DropdownMenuContent, { align: 'end', className: 'w-48', children: [_jsx(DropdownMenuLabel, { children: "Actions" }), actions.map((action) => (_jsx(DropdownMenuItemForRowAction, { action: action, rows: selectedRows, onTrigger: clickMenuItem }, action.label)))] })] }), openActionConfirmation != null && (_jsx(ActionDialog, { action: openActionConfirmation, selectedRows: selectedRows, onConfirm: clickDialogConfirm, onClose: () => setOpenActionConfirmation(null) }))] }));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ActionsMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionsMenu.js","sourceRoot":"","sources":["../../../../src/components/table/actions/ActionsMenu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { DropdownMenuItem } from '../../../components/ui';
|
|
3
|
+
export function DropdownMenuItemForRowAction({ action, rows, onTrigger, }) {
|
|
4
|
+
const isHidden = action.hide?.(rows) ?? false;
|
|
5
|
+
const isDisabled = action.disabled?.(rows) ?? false;
|
|
6
|
+
if (isHidden)
|
|
7
|
+
return null;
|
|
8
|
+
return (_jsxs(DropdownMenuItem, { disabled: isDisabled, onSelect: (event) => {
|
|
9
|
+
event.preventDefault();
|
|
10
|
+
if (!isDisabled) {
|
|
11
|
+
onTrigger(action);
|
|
12
|
+
}
|
|
13
|
+
}, children: [_jsx("div", { className: 'mr-2', children: action.icon }), action.label] }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=DropdownMenuItemForRowAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropdownMenuItemForRowAction.js","sourceRoot":"","sources":["../../../../src/components/table/actions/DropdownMenuItemForRowAction.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AASlD,MAAM,UAAU,4BAA4B,CAAsB,EAChE,MAAM,EACN,IAAI,EACJ,SAAS,GAC+B;IACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAA;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAA;IAEnD,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAA;IAEzB,OAAO,CACL,MAAC,gBAAgB,IACf,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAClB,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,SAAS,CAAC,MAAM,CAAC,CAAA;YACnB,CAAC;QACH,CAAC,aAED,cAAK,SAAS,EAAC,MAAM,YAAE,MAAM,CAAC,IAAI,GAAO,EACxC,MAAM,CAAC,KAAK,IACI,CACpB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { ActionsMenu } from '../actions/ActionsMenu';
|
|
3
|
+
import { MoreHorizontal } from 'lucide-react';
|
|
4
|
+
export const actionColumn = (actions) => ({
|
|
5
|
+
id: 'rowActions',
|
|
6
|
+
header: '',
|
|
7
|
+
enableSorting: false,
|
|
8
|
+
enableHiding: false,
|
|
9
|
+
cell: ({ row }) => (_jsx("div", { onClick: (e) => e.stopPropagation(), className: 'flex justify-end', children: _jsx(ActionsMenu, { actions: actions, selectedRows: [row.original], triggerComponent: _jsx("div", { className: 'h-4 w-4 transform scale-150 rounded-2xl hover:bg-gray-200 transition-all flex items-center justify-center', onClick: (e) => e.stopPropagation(), children: _jsx(MoreHorizontal, { className: 'h-3 w-3' }) }) }) })),
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=actionColumn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionColumn.js","sourceRoot":"","sources":["../../../../src/components/table/columnDefs/actionColumn.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,CAAC,MAAM,YAAY,GAAG,CAA2B,OAAuB,EAAgB,EAAE,CAAC,CAAC;IAChG,EAAE,EAAE,YAAY;IAChB,MAAM,EAAE,EAAE;IACV,aAAa,EAAE,KAAK;IACpB,YAAY,EAAE,KAAK;IACnB,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CACjB,cAAK,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,SAAS,EAAC,kBAAkB,YACpE,KAAC,WAAW,IACV,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC5B,gBAAgB,EACd,cACE,SAAS,EAAC,2GAA2G,EACrH,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,YAEnC,KAAC,cAAc,IAAC,SAAS,EAAC,SAAS,GAAG,GAClC,GAER,GACE,CACP;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Checkbox } from '../../../components/ui';
|
|
3
|
+
export const checkboxColumn = () => ({
|
|
4
|
+
id: 'select',
|
|
5
|
+
header: ({ table }) => (_jsx("div", { className: 'flex items-center justify-center', children: _jsx(Checkbox, { checked: table.getIsAllRowsSelected(), onCheckedChange: (checked) => {
|
|
6
|
+
table.toggleAllRowsSelected(!!checked);
|
|
7
|
+
}, onClick: (e) => e.stopPropagation() }) })),
|
|
8
|
+
cell: ({ row }) => (_jsx("div", { className: 'flex items-center justify-center', children: _jsx(Checkbox, { checked: row.getIsSelected(), onCheckedChange: (checked) => {
|
|
9
|
+
row.toggleSelected(!!checked);
|
|
10
|
+
}, onClick: (e) => e.stopPropagation() }) })),
|
|
11
|
+
enableSorting: false,
|
|
12
|
+
enableHiding: false,
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=selectColumn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectColumn.js","sourceRoot":"","sources":["../../../../src/components/table/columnDefs/selectColumn.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAG1C,MAAM,CAAC,MAAM,cAAc,GAAG,GAA2C,EAAE,CAAC,CAAC;IAC3E,EAAE,EAAE,QAAQ;IAEZ,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CACrB,cAAK,SAAS,EAAC,kCAAkC,YAC/C,KAAC,QAAQ,IACP,OAAO,EAAE,KAAK,CAAC,oBAAoB,EAAE,EACrC,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC3B,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;YACxC,CAAC,EACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,GACnC,GACE,CACP;IAED,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CACjB,cAAK,SAAS,EAAC,kCAAkC,YAC/C,KAAC,QAAQ,IACP,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,EAC5B,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC3B,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;YAC/B,CAAC,EACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,GACnC,GACE,CACP;IAED,aAAa,EAAE,KAAK;IACpB,YAAY,EAAE,KAAK;CACpB,CAAC,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { FilterBadge } from './FilterBadge';
|
|
3
|
+
export function ActiveTableFiltersBar({ table, filters = [] }) {
|
|
4
|
+
const { globalFilter, columnFilters } = table.getState();
|
|
5
|
+
if (!globalFilter && columnFilters.length === 0) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
const filterMetaById = Object.fromEntries(filters.map((f) => [f.id, f]));
|
|
9
|
+
return (_jsxs("div", { className: 'flex flex-wrap items-center gap-2', children: [typeof globalFilter === 'string' && globalFilter.length > 0 && (_jsx(FilterBadge, { label: `Search: "${globalFilter}"`, onRemove: () => table.setGlobalFilter('') })), columnFilters.map((filter) => {
|
|
10
|
+
const meta = filterMetaById[filter.id];
|
|
11
|
+
const column = table.getColumn(filter.id);
|
|
12
|
+
if (!meta || !column)
|
|
13
|
+
return null;
|
|
14
|
+
const headerLabel = meta.label ??
|
|
15
|
+
(typeof column.columnDef.header === 'string' ? column.columnDef.header : filter.id);
|
|
16
|
+
if (meta.type === 'select') {
|
|
17
|
+
if (!Array.isArray(filter.value))
|
|
18
|
+
return null;
|
|
19
|
+
const values = filter.value;
|
|
20
|
+
return values.map((value) => (_jsx(FilterBadge, { label: `${headerLabel}: ${meta.getDisplay?.(value) ?? value}`, onRemove: () => {
|
|
21
|
+
const next = values.filter((v) => v !== value);
|
|
22
|
+
column.setFilterValue(next.length > 0 ? next : undefined);
|
|
23
|
+
} }, `${filter.id}-${value}`)));
|
|
24
|
+
}
|
|
25
|
+
if (meta.type === 'numericRange') {
|
|
26
|
+
if (typeof filter.value !== 'object' || filter.value === null) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const value = filter.value;
|
|
30
|
+
let text = '';
|
|
31
|
+
if (value.noScore)
|
|
32
|
+
text = meta.noValueLabel ?? 'No value';
|
|
33
|
+
else if (value.min && value.max)
|
|
34
|
+
text = `${value.min}–${value.max}`;
|
|
35
|
+
else if (value.min)
|
|
36
|
+
text = `≥ ${value.min}`;
|
|
37
|
+
else if (value.max)
|
|
38
|
+
text = `≤ ${value.max}`;
|
|
39
|
+
if (!text)
|
|
40
|
+
return null;
|
|
41
|
+
return (_jsx(FilterBadge, { label: `${headerLabel}: ${text}`, onRemove: () => column.setFilterValue(undefined) }, filter.id));
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
})] }));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ActiveTableFiltersBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActiveTableFiltersBar.js","sourceRoot":"","sources":["../../../../src/components/table/filters/ActiveTableFiltersBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { X } from 'lucide-react';
|
|
3
|
+
import { cn } from '../../../lib/utils';
|
|
4
|
+
export function FilterBadge({ label, onRemove }) {
|
|
5
|
+
return (_jsxs("span", { className: cn('inline-flex items-center gap-1 rounded-md border px-2 py-0.5 text-sm', 'bg-muted text-muted-foreground'), children: [label, _jsx("button", { onClick: onRemove, className: 'rounded-sm p-0.5 hover:bg-muted-foreground/20', children: _jsx(X, { className: 'h-3 w-3' }) })] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=FilterBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterBadge.js","sourceRoot":"","sources":["../../../../src/components/table/filters/FilterBadge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAChC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAA2C;IACtF,OAAO,CACL,gBACE,SAAS,EAAE,EAAE,CACX,sEAAsE,EACtE,gCAAgC,CACjC,aAEA,KAAK,EACN,iBAAQ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,+CAA+C,YAClF,KAAC,CAAC,IAAC,SAAS,EAAC,SAAS,GAAG,GAClB,IACJ,CACR,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { DropdownMenuCheckboxItem, DropdownMenuLabel, DropdownMenuSeparator, Input, } from '../../../components/ui';
|
|
3
|
+
export function NumericRangeFilterSection({ label, column, noValueLabel, }) {
|
|
4
|
+
const value = column.getFilterValue() ?? {};
|
|
5
|
+
const setValue = (updates) => {
|
|
6
|
+
const next = {
|
|
7
|
+
...value,
|
|
8
|
+
...updates,
|
|
9
|
+
};
|
|
10
|
+
if (updates.noScore === true) {
|
|
11
|
+
next.min = '';
|
|
12
|
+
next.max = '';
|
|
13
|
+
}
|
|
14
|
+
if ('min' in updates || 'max' in updates) {
|
|
15
|
+
next.noScore = false;
|
|
16
|
+
}
|
|
17
|
+
const isEmpty = !next.min && !next.max && !next.noScore;
|
|
18
|
+
column.setFilterValue(isEmpty ? undefined : next);
|
|
19
|
+
};
|
|
20
|
+
return (_jsxs(_Fragment, { children: [_jsx(DropdownMenuLabel, { children: label }), _jsx(DropdownMenuSeparator, {}), _jsxs("div", { className: 'p-2 space-y-2', children: [_jsxs("div", { className: 'flex items-center gap-2', children: [_jsx(Input, { type: 'number', placeholder: 'Min', value: value.min ?? '', onChange: (e) => setValue({ min: e.target.value }), className: 'w-full' }), _jsx(Input, { type: 'number', placeholder: 'Max', value: value.max ?? '', onChange: (e) => setValue({ max: e.target.value }), className: 'w-full' })] }), _jsx(DropdownMenuCheckboxItem, { checked: value.noScore ?? false, onClick: (e) => {
|
|
21
|
+
e.preventDefault();
|
|
22
|
+
setValue({ noScore: !value.noScore });
|
|
23
|
+
}, children: noValueLabel ?? 'No value' })] })] }));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=NumericRangeFilterSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumericRangeFilterSection.js","sourceRoot":"","sources":["../../../../src/components/table/filters/NumericRangeFilterSection.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,GACN,MAAM,iBAAiB,CAAA;AASxB,MAAM,UAAU,yBAAyB,CAAC,EACxC,KAAK,EACL,MAAM,EACN,YAAY,GACmB;IAC/B,MAAM,KAAK,GACR,MAAM,CAAC,cAAc,EAIpB,IAAI,EAAE,CAAA;IAEV,MAAM,QAAQ,GAAG,CACf,OAIE,EACF,EAAE;QACF,MAAM,IAAI,GAAG;YACX,GAAG,KAAK;YACR,GAAG,OAAO;SACX,CAAA;QAED,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;YACb,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;QACf,CAAC;QAED,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACtB,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;QACvD,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACnD,CAAC,CAAA;IAED,OAAO,CACL,8BACE,KAAC,iBAAiB,cAAE,KAAK,GAAqB,EAC9C,KAAC,qBAAqB,KAAG,EAEzB,eAAK,SAAS,EAAC,eAAe,aAC5B,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,KAAK,IACJ,IAAI,EAAC,QAAQ,EACb,WAAW,EAAC,KAAK,EACjB,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE,EACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAClD,SAAS,EAAC,QAAQ,GAClB,EACF,KAAC,KAAK,IACJ,IAAI,EAAC,QAAQ,EACb,WAAW,EAAC,KAAK,EACjB,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE,EACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAClD,SAAS,EAAC,QAAQ,GAClB,IACE,EAEN,KAAC,wBAAwB,IACvB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,EAC/B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4BACb,CAAC,CAAC,cAAc,EAAE,CAAA;4BAClB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;wBACvC,CAAC,YAEA,YAAY,IAAI,UAAU,GACF,IACvB,IACL,CACJ,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { DropdownMenuCheckboxItem, DropdownMenuLabel, DropdownMenuSeparator } from '../../../components/ui';
|
|
3
|
+
export function SelectFilterSection({ label, column, options, getDisplay, }) {
|
|
4
|
+
const current = column.getFilterValue() ?? [];
|
|
5
|
+
return (_jsxs("div", { children: [_jsx(DropdownMenuLabel, { children: label }), _jsx(DropdownMenuSeparator, {}), options.map((value) => {
|
|
6
|
+
const selected = current.includes(value);
|
|
7
|
+
return (_jsx(DropdownMenuCheckboxItem, { checked: selected, onSelect: (e) => {
|
|
8
|
+
e.preventDefault();
|
|
9
|
+
column.setFilterValue(selected ? current.filter((v) => v !== value) : [...current, value]);
|
|
10
|
+
}, children: getDisplay?.(value) ?? value }, value));
|
|
11
|
+
})] }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=SelectFilterSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectFilterSection.js","sourceRoot":"","sources":["../../../../src/components/table/filters/SelectFilterSection.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAUpG,MAAM,UAAU,mBAAmB,CAAC,EAClC,KAAK,EACL,MAAM,EACN,OAAO,EACP,UAAU,GACe;IACzB,MAAM,OAAO,GAAI,MAAM,CAAC,cAAc,EAAe,IAAI,EAAE,CAAA;IAE3D,OAAO,CACL,0BACE,KAAC,iBAAiB,cAAE,KAAK,GAAqB,EAC9C,KAAC,qBAAqB,KAAG,EAExB,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;gBAExC,OAAO,CACL,KAAC,wBAAwB,IAEvB,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;wBACd,CAAC,CAAC,cAAc,EAAE,CAAA;wBAClB,MAAM,CAAC,cAAc,CACnB,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,CACpE,CAAA;oBACH,CAAC,YAEA,UAAU,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IATxB,KAAK,CAUe,CAC5B,CAAA;YACH,CAAC,CAAC,IACE,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger, Button } from '../../../components/ui';
|
|
3
|
+
import { SelectFilterSection } from './SelectFilterSection';
|
|
4
|
+
import { NumericRangeFilterSection } from './NumericRangeFilterSection';
|
|
5
|
+
import { Filter } from 'lucide-react';
|
|
6
|
+
export function TableFiltersMenu({ table, filters }) {
|
|
7
|
+
return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: 'outline', className: 'justify-start', children: [_jsx(Filter, { className: 'mr-2 h-4 w-4' }), "Filter"] }) }), _jsx(DropdownMenuContent, { className: 'w-64', children: filters.map((filter) => {
|
|
8
|
+
const column = table.getColumn(filter.id);
|
|
9
|
+
if (!column)
|
|
10
|
+
return null;
|
|
11
|
+
if (filter.type === 'select') {
|
|
12
|
+
return (_jsx(SelectFilterSection, { label: filter.label, column: column, options: filter.options, getDisplay: filter.getDisplay }, filter.id));
|
|
13
|
+
}
|
|
14
|
+
if (filter.type === 'numericRange') {
|
|
15
|
+
return (_jsx(NumericRangeFilterSection, { label: filter.label, column: column, noValueLabel: filter.noValueLabel }, filter.id));
|
|
16
|
+
}
|
|
17
|
+
return _jsx("div", { children: filter.render({ column, table }) }, filter.id);
|
|
18
|
+
}) })] }));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=TableFiltersMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableFiltersMenu.js","sourceRoot":"","sources":["../../../../src/components/table/filters/TableFiltersMenu.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAGhG,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAOrC,MAAM,UAAU,gBAAgB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAyB;IACxE,OAAO,CACL,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,MAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,eAAe,aACjD,KAAC,MAAM,IAAC,SAAS,EAAC,cAAc,GAAG,cAE5B,GACW,EAEtB,KAAC,mBAAmB,IAAC,SAAS,EAAC,MAAM,YAClC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBACtB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;oBACzC,IAAI,CAAC,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAExB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,OAAO,CACL,KAAC,mBAAmB,IAElB,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,UAAU,EAAE,MAAM,CAAC,UAAU,IAJxB,MAAM,CAAC,EAAE,CAKd,CACH,CAAA;oBACH,CAAC;oBAED,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;wBACnC,OAAO,CACL,KAAC,yBAAyB,IAExB,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,CAAC,YAAY,IAH5B,MAAM,CAAC,EAAE,CAId,CACH,CAAA;oBACH,CAAC;oBAED,OAAO,wBAAsB,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAA5C,MAAM,CAAC,EAAE,CAA0C,CAAA;gBACtE,CAAC,CAAC,GACkB,IACT,CAChB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { multiSelectFilter, numericRangeFilter } from './filterFns';
|
|
2
|
+
function isAccessorKeyColumn(column) {
|
|
3
|
+
return 'accessorKey' in column;
|
|
4
|
+
}
|
|
5
|
+
export function applyFiltersToColumns(columns, filters) {
|
|
6
|
+
if (!filters?.length)
|
|
7
|
+
return columns;
|
|
8
|
+
return columns.map((column) => {
|
|
9
|
+
if (!isAccessorKeyColumn(column))
|
|
10
|
+
return column;
|
|
11
|
+
const filter = filters.find((f) => f.id === column.accessorKey);
|
|
12
|
+
if (!filter)
|
|
13
|
+
return column;
|
|
14
|
+
if (filter.type === 'select') {
|
|
15
|
+
return { ...column, filterFn: multiSelectFilter };
|
|
16
|
+
}
|
|
17
|
+
if (filter.type === 'numericRange') {
|
|
18
|
+
return { ...column, filterFn: numericRangeFilter };
|
|
19
|
+
}
|
|
20
|
+
return column;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=applyFiltersToColumns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyFiltersToColumns.js","sourceRoot":"","sources":["../../../../src/components/table/filters/applyFiltersToColumns.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEnE,SAAS,mBAAmB,CAC1B,MAAoB;IAEpB,OAAO,aAAa,IAAI,MAAM,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAuB,EACvB,OAAuB;IAEvB,IAAI,CAAC,OAAO,EAAE,MAAM;QAAE,OAAO,OAAO,CAAA;IAEpC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC5B,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAA;QAE/C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,WAAW,CAAC,CAAA;QAC/D,IAAI,CAAC,MAAM;YAAE,OAAO,MAAM,CAAA;QAE1B,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAA;QACnD,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACnC,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const multiSelectFilter = (row, columnId, filterValue) => {
|
|
2
|
+
if (!Array.isArray(filterValue) || filterValue.length === 0) {
|
|
3
|
+
return true;
|
|
4
|
+
}
|
|
5
|
+
const rowValue = row.getValue(columnId);
|
|
6
|
+
return filterValue.includes(rowValue);
|
|
7
|
+
};
|
|
8
|
+
export const numericRangeFilter = (row, columnId, filterValue) => {
|
|
9
|
+
const rowValue = row.getValue(columnId);
|
|
10
|
+
if (filterValue?.noScore) {
|
|
11
|
+
return rowValue == null;
|
|
12
|
+
}
|
|
13
|
+
if (rowValue == null)
|
|
14
|
+
return false;
|
|
15
|
+
const min = filterValue?.min ? Number(filterValue.min) : undefined;
|
|
16
|
+
const max = filterValue?.max ? Number(filterValue.max) : undefined;
|
|
17
|
+
if (min !== undefined && isNaN(min))
|
|
18
|
+
return false;
|
|
19
|
+
if (max !== undefined && isNaN(max))
|
|
20
|
+
return false;
|
|
21
|
+
if (min !== undefined && rowValue < min)
|
|
22
|
+
return false;
|
|
23
|
+
if (max !== undefined && rowValue > max)
|
|
24
|
+
return false;
|
|
25
|
+
return true;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=filterFns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterFns.js","sourceRoot":"","sources":["../../../../src/components/table/filters/filterFns.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAqB,EAAE,EAAE;IACvF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAS,QAAQ,CAAC,CAAA;IAC/C,OAAO,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AACvC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAkB,CAC/C,GAAG,EACH,QAAQ,EACR,WAIC,EACD,EAAE;IACF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAA4B,QAAQ,CAAC,CAAA;IAElE,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;QACzB,OAAO,QAAQ,IAAI,IAAI,CAAA;IACzB,CAAC;IAED,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAO,KAAK,CAAA;IAElC,MAAM,GAAG,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAClE,MAAM,GAAG,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAElE,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IACjD,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IAEjD,IAAI,GAAG,KAAK,SAAS,IAAI,QAAQ,GAAG,GAAG;QAAE,OAAO,KAAK,CAAA;IACrD,IAAI,GAAG,KAAK,SAAS,IAAI,QAAQ,GAAG,GAAG;QAAE,OAAO,KAAK,CAAA;IAErD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
function humanize(key) {
|
|
2
|
+
return key
|
|
3
|
+
.replace(/([A-Z])/g, ' $1')
|
|
4
|
+
.trim()
|
|
5
|
+
.replace(/^./, (c) => c.toUpperCase());
|
|
6
|
+
}
|
|
7
|
+
export function generateColumns(data) {
|
|
8
|
+
if (!data.length)
|
|
9
|
+
return [];
|
|
10
|
+
return Object.keys(data[0]).map((key) => ({
|
|
11
|
+
accessorKey: key,
|
|
12
|
+
header: humanize(key),
|
|
13
|
+
cell: (info) => {
|
|
14
|
+
const value = info.getValue();
|
|
15
|
+
return typeof value === 'object' ? JSON.stringify(value) : String(value);
|
|
16
|
+
},
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=generateColumns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateColumns.js","sourceRoot":"","sources":["../../../src/components/table/generateColumns.ts"],"names":[],"mappings":"AAEA,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,GAAG;SACP,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,IAAI,EAAE;SACN,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAAmB,IAAS;IACzD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IAE3B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClD,WAAW,EAAE,GAAG;QAChB,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC;QACrB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YACb,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1E,CAAC;KACF,CAAC,CAAC,CAAA;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/table/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/table/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAA;AAChD,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from '../../../components/ui';
|
|
3
|
+
import { MoreHorizontal } from 'lucide-react';
|
|
4
|
+
import { ActionsMenu } from '../actions/ActionsMenu';
|
|
5
|
+
export function TableActionsButton({ actions, table, }) {
|
|
6
|
+
const selectedRows = table.getSelectedRowModel().rows.map((row) => row.original);
|
|
7
|
+
const selectedCount = selectedRows.length;
|
|
8
|
+
return (_jsx(ActionsMenu, { actions: actions, selectedRows: selectedRows, triggerComponent: _jsxs(Button, { disabled: selectedCount == 0, children: [_jsx(MoreHorizontal, { className: 'h-4 w-4' }), "Actions"] }) }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=TableActionsButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableActionsButton.js","sourceRoot":"","sources":["../../../../src/components/table/tableBarComponents/TableActionsButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAQpD,MAAM,UAAU,kBAAkB,CAAuB,EACvD,OAAO,EACP,KAAK,GAC0B;IAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAChF,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAA;IACzC,OAAO,CACL,KAAC,WAAW,IACV,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EACd,MAAC,MAAM,IAAC,QAAQ,EAAE,aAAa,IAAI,CAAC,aAClC,KAAC,cAAc,IAAC,SAAS,EAAC,SAAS,GAAG,eAE/B,GAEX,CACH,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Columns } from 'lucide-react';
|
|
3
|
+
import { Button, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuTrigger, } from '../../../components/ui';
|
|
4
|
+
export function TableColumnVisibilityButton({ table, }) {
|
|
5
|
+
const columns = table.getAllColumns();
|
|
6
|
+
return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: 'outline', children: [_jsx(Columns, { className: 'mr-2 h-4 w-4' }), "Columns"] }) }), _jsx(DropdownMenuContent, { align: 'end', children: columns
|
|
7
|
+
.filter((column) => column.getCanHide())
|
|
8
|
+
.map((column) => {
|
|
9
|
+
return (_jsx(DropdownMenuCheckboxItem, { className: 'capitalize', checked: column.getIsVisible(), onClick: (e) => {
|
|
10
|
+
e.preventDefault();
|
|
11
|
+
column.toggleVisibility(!column.getIsVisible());
|
|
12
|
+
}, children: column.id.replace(/_/g, ' ') }, column.id));
|
|
13
|
+
}) })] }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=TableColumnVisibilityButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableColumnVisibilityButton.js","sourceRoot":"","sources":["../../../../src/components/table/tableBarComponents/TableColumnVisibilityButton.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EACL,MAAM,EACN,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAMxB,MAAM,UAAU,2BAA2B,CAAsB,EAC/D,KAAK,GACkC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,EAAE,CAAA;IACrC,OAAO,CACL,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,MAAC,MAAM,IAAC,OAAO,EAAC,SAAS,aACvB,KAAC,OAAO,IAAC,SAAS,EAAC,cAAc,GAAG,eAE7B,GACW,EACtB,KAAC,mBAAmB,IAAC,KAAK,EAAC,KAAK,YAC7B,OAAO;qBACL,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;qBACvC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBACd,OAAO,CACL,KAAC,wBAAwB,IAEvB,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,EAC9B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4BACb,CAAC,CAAC,cAAc,EAAE,CAAA;4BAClB,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAA;wBACjD,CAAC,YAEA,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IARxB,MAAM,CAAC,EAAE,CASW,CAC5B,CAAA;gBACH,CAAC,CAAC,GACgB,IACT,CAChB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function TableInfoText({ table }) {
|
|
3
|
+
const selectedCount = table.getSelectedRowModel().rows.length;
|
|
4
|
+
return (_jsxs("div", { className: 'flex gap-2 text-sm text-muted-foreground', children: [selectedCount > 0 && _jsxs("span", { className: 'text-foreground', children: [selectedCount, " selected"] }), _jsxs("span", { children: ["Showing ", table.getFilteredRowModel().rows.length, " of", ' ', table.getPrePaginationRowModel().rows.length, " Rows"] })] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=TableInfoText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableInfoText.js","sourceRoot":"","sources":["../../../../src/components/table/tableBarComponents/TableInfoText.tsx"],"names":[],"mappings":";AAOA,MAAM,UAAU,aAAa,CAAQ,EAAE,KAAK,EAA6B;IACvE,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAA;IAE7D,OAAO,CACL,eAAK,SAAS,EAAC,0CAA0C,aACtD,aAAa,GAAG,CAAC,IAAI,gBAAM,SAAS,EAAC,iBAAiB,aAAE,aAAa,iBAAiB,EACvF,uCACW,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,MAAM,SAAK,GAAG,EACvD,KAAK,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,MAAM,aACxC,IACH,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Input } from '../../../components/ui';
|
|
3
|
+
import { SearchIcon } from 'lucide-react';
|
|
4
|
+
export function TableSearch({ value, onChange }) {
|
|
5
|
+
return (_jsxs("div", { className: 'relative flex-1 min-w-0 overflow-hidden', children: [_jsx(Input, { placeholder: 'Search ...', value: value, onChange: onChange, className: 'pl-10 w-full min-w-0' }), _jsx(SearchIcon, { className: 'absolute left-3 top-1/2 -translate-y-1/2 h-5 w-5 text-gray-500' })] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=TableSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableSearch.js","sourceRoot":"","sources":["../../../../src/components/table/tableBarComponents/TableSearch.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAQzC,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAoB;IAC/D,OAAO,CACL,eAAK,SAAS,EAAC,yCAAyC,aACtD,KAAC,KAAK,IACJ,WAAW,EAAC,YAAY,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,sBAAsB,GAChC,EACF,KAAC,UAAU,IAAC,SAAS,EAAC,gEAAgE,GAAG,IACrF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react';
|
|
3
|
+
import { Button } from '../../../components/ui/button';
|
|
4
|
+
export function SortableHeader({ column, title }) {
|
|
5
|
+
return (_jsxs(Button, { variant: 'ghost', onClick: () => column.toggleSorting(column.getIsSorted() === 'asc'), className: 'flex items-center pl-0', children: [title, column.getIsSorted() === 'asc' ? (_jsx(ArrowUp, { className: 'ml-2 h-4 w-4' })) : column.getIsSorted() === 'desc' ? (_jsx(ArrowDown, { className: 'ml-2 h-4 w-4' })) : (_jsx(ArrowUpDown, { className: 'ml-2 h-4 w-4 text-muted-foreground' }))] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=SortableHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SortableHeader.js","sourceRoot":"","sources":["../../../../src/components/table/tableComponents/SortableHeader.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAO/C,MAAM,UAAU,cAAc,CAAQ,EAAE,MAAM,EAAE,KAAK,EAA8B;IACjF,OAAO,CACL,MAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,EACnE,SAAS,EAAC,wBAAwB,aAEjC,KAAK,EACL,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAChC,KAAC,OAAO,IAAC,SAAS,EAAC,cAAc,GAAG,CACrC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CACpC,KAAC,SAAS,IAAC,SAAS,EAAC,cAAc,GAAG,CACvC,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,SAAS,EAAC,oCAAoC,GAAG,CAC/D,IACM,CACV,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Checkbox } from '../../ui';
|
|
3
|
+
export const TableCheckbox = ({ checked, onToggle, location }) => {
|
|
4
|
+
return (_jsx("div", { className: 'h-full flex flex-col items-center', children: _jsx(Checkbox, { checked: checked, onCheckedChange: onToggle, "aria-label": location == 'row' ? 'Select row' : 'Select all', onClick: (e) => e.stopPropagation(), onFocus: (e) => e.stopPropagation() }) }));
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=TableCheckbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableCheckbox.js","sourceRoot":"","sources":["../../../../src/components/table/tableComponents/TableCheckbox.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAQnC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAsB,EAAE,EAAE;IACnF,OAAO,CACL,cAAK,SAAS,EAAC,mCAAmC,YAChD,KAAC,QAAQ,IACP,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,QAAQ,gBACb,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAC3D,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACnC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,GACnC,GACE,CACP,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { flexRender } from '@tanstack/react-table';
|
|
3
|
+
import { TableHead, TableHeader, TableRow } from '../../ui';
|
|
4
|
+
import { SortableHeader } from './SortableHeader';
|
|
5
|
+
export function TableHeaders({ table }) {
|
|
6
|
+
return (_jsx(TableHeader, { className: 'bg-muted/100', children: table.getHeaderGroups().map((headerGroup) => (_jsx(TableRow, { children: headerGroup.headers.map((header) => (_jsx(TableHead, { className: 'whitespace-nowrap', children: renderHeaderCell(header) }, header.id))) }, headerGroup.id))) }));
|
|
7
|
+
}
|
|
8
|
+
function renderHeaderCell(header) {
|
|
9
|
+
if (header.isPlaceholder)
|
|
10
|
+
return null;
|
|
11
|
+
const def = header.column.columnDef.header;
|
|
12
|
+
if (header.column.getCanSort() && typeof def === 'string') {
|
|
13
|
+
return _jsx(SortableHeader, { column: header.column, title: def });
|
|
14
|
+
}
|
|
15
|
+
return flexRender(def, header.getContext());
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=TableHeaders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableHeaders.js","sourceRoot":"","sources":["../../../../src/components/table/tableComponents/TableHeaders.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAoC,MAAM,uBAAuB,CAAA;AACpF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAMjD,MAAM,UAAU,YAAY,CAAQ,EAAE,KAAK,EAA4B;IACrE,OAAO,CACL,KAAC,WAAW,IAAC,SAAS,EAAC,cAAc,YAClC,KAAK,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAC5C,KAAC,QAAQ,cACN,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACnC,KAAC,SAAS,IAAiB,SAAS,EAAC,mBAAmB,YACrD,gBAAgB,CAAC,MAAM,CAAC,IADX,MAAM,CAAC,EAAE,CAEb,CACb,CAAC,IALW,WAAW,CAAC,EAAE,CAMlB,CACZ,CAAC,GACU,CACf,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAQ,MAA6C;IAC5E,IAAI,MAAM,CAAC,aAAa;QAAE,OAAO,IAAI,CAAA;IAErC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAA;IAE1C,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC1D,OAAO,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAI,CAAA;IAC9D,CAAC;IAED,OAAO,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;AAC7C,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { flexRender } from '@tanstack/react-table';
|
|
3
|
+
import { TableBody, TableCell, TableRow } from '../../ui';
|
|
4
|
+
export function TableRows({ table, onRowClick }) {
|
|
5
|
+
const rows = table.getRowModel().rows;
|
|
6
|
+
if (!rows.length) {
|
|
7
|
+
return (_jsx(TableBody, { children: _jsx(TableRow, { children: _jsx(TableCell, { colSpan: table.getAllColumns().length, className: 'h-24 text-center', children: "No results." }) }) }));
|
|
8
|
+
}
|
|
9
|
+
return (_jsx(TableBody, { children: rows.map((row) => (_jsx(TableRow, { "data-state": row.getIsSelected() ? 'selected' : undefined, onClick: () => {
|
|
10
|
+
if (onRowClick) {
|
|
11
|
+
onRowClick(row.original);
|
|
12
|
+
}
|
|
13
|
+
}, className: 'cursor-pointer', children: row.getVisibleCells().map((cell) => (_jsx(TableCell, { className: 'whitespace-nowrap cursor-pointer', children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id))) }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=TableRows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableRows.js","sourceRoot":"","sources":["../../../../src/components/table/tableComponents/TableRows.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,uBAAuB,CAAA;AAEvE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAOzD,MAAM,UAAU,SAAS,CAAQ,EAAE,KAAK,EAAE,UAAU,EAAyB;IAC3E,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAA;IAErC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CACL,KAAC,SAAS,cACR,KAAC,QAAQ,cACP,KAAC,SAAS,IAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,SAAS,EAAC,kBAAkB,4BAElE,GACH,GACD,CACb,CAAA;IACH,CAAC;IAED,OAAO,CACL,KAAC,SAAS,cACP,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjB,KAAC,QAAQ,kBAEK,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EACxD,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,UAAU,EAAE,CAAC;oBACf,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;gBAC1B,CAAC;YACH,CAAC,EACD,SAAS,EAAC,gBAAgB,YAEzB,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnC,KAAC,SAAS,IAAe,SAAS,EAAC,kCAAkC,YAClE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,IAD5C,IAAI,CAAC,EAAE,CAEX,CACb,CAAC,IAbG,GAAG,CAAC,EAAE,CAcF,CACZ,CAAC,GACQ,CACb,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Column, ColumnDef, Table } from '@tanstack/react-table';
|
|
2
|
+
export interface WithId {
|
|
3
|
+
id: string;
|
|
4
|
+
}
|
|
5
|
+
export interface RowAction<Type extends WithId> {
|
|
6
|
+
label: string;
|
|
7
|
+
icon?: React.ReactNode;
|
|
8
|
+
onAction: (rows: Type[]) => void | Promise<void>;
|
|
9
|
+
confirm?: {
|
|
10
|
+
title?: string;
|
|
11
|
+
description: string | ((count: number) => string);
|
|
12
|
+
confirmLabel?: string;
|
|
13
|
+
variant?: 'default' | 'destructive';
|
|
14
|
+
};
|
|
15
|
+
disabled?: (rows: Type[]) => boolean;
|
|
16
|
+
hide?: (rows: Type[]) => boolean;
|
|
17
|
+
}
|
|
18
|
+
export type TableFilter = {
|
|
19
|
+
type: 'select';
|
|
20
|
+
id: string;
|
|
21
|
+
label: string;
|
|
22
|
+
options: string[];
|
|
23
|
+
getDisplay?: (value: string) => React.ReactNode;
|
|
24
|
+
} | {
|
|
25
|
+
type: 'numericRange';
|
|
26
|
+
id: string;
|
|
27
|
+
label: string;
|
|
28
|
+
noValueLabel?: string;
|
|
29
|
+
} | {
|
|
30
|
+
type: 'custom';
|
|
31
|
+
id: string;
|
|
32
|
+
label: string;
|
|
33
|
+
render: (args: {
|
|
34
|
+
column: Column<any, unknown>;
|
|
35
|
+
table: Table<any>;
|
|
36
|
+
}) => React.ReactNode;
|
|
37
|
+
};
|
|
38
|
+
export interface TableProps<Type extends WithId> {
|
|
39
|
+
data: Type[];
|
|
40
|
+
actions?: RowAction<Type>[];
|
|
41
|
+
columns?: ColumnDef<Type>[];
|
|
42
|
+
filters?: TableFilter[];
|
|
43
|
+
onRowClick?: (rowData: Type) => void;
|
|
44
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
import { RowAction, WithId } from '../TableTypes';
|
|
3
|
+
interface ActionDialogProps<T extends WithId> {
|
|
4
|
+
action: RowAction<T>;
|
|
5
|
+
selectedRows: T[];
|
|
6
|
+
onConfirm: () => Promise<void> | void;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function ActionDialog<T extends WithId>({ action, selectedRows, onClose, onConfirm, }: ActionDialogProps<T>): ReactElement;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
import { RowAction, WithId } from '../TableTypes';
|
|
3
|
+
interface ActionsMenuProps<Type extends WithId> {
|
|
4
|
+
selectedRows: Type[];
|
|
5
|
+
triggerComponent: React.ReactNode;
|
|
6
|
+
actions: RowAction<Type>[];
|
|
7
|
+
onFinish?: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function ActionsMenu<Type extends WithId>({ selectedRows, triggerComponent, actions, onFinish, }: ActionsMenuProps<Type>): ReactElement;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
import { RowAction, WithId } from '../TableTypes';
|
|
3
|
+
interface DropdownMenuItemForRowActionProps<Type extends WithId> {
|
|
4
|
+
action: RowAction<Type>;
|
|
5
|
+
rows: Type[];
|
|
6
|
+
onTrigger: (action: RowAction<Type>) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function DropdownMenuItemForRowAction<Type extends WithId>({ action, rows, onTrigger, }: DropdownMenuItemForRowActionProps<Type>): ReactElement | null;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TableFilter } from '../TableTypes';
|
|
2
|
+
import { Table } from '@tanstack/react-table';
|
|
3
|
+
interface ActiveTableFiltersBarProps {
|
|
4
|
+
table: Table<any>;
|
|
5
|
+
filters?: TableFilter[];
|
|
6
|
+
}
|
|
7
|
+
export declare function ActiveTableFiltersBar({ table, filters }: ActiveTableFiltersBarProps): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Column } from '@tanstack/react-table';
|
|
2
|
+
interface NumericRangeFilterSectionProps {
|
|
3
|
+
label: string;
|
|
4
|
+
column: Column<any, unknown>;
|
|
5
|
+
noValueLabel?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function NumericRangeFilterSection({ label, column, noValueLabel, }: NumericRangeFilterSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Column } from '@tanstack/react-table';
|
|
2
|
+
interface SelectFilterSectionProps {
|
|
3
|
+
label: string;
|
|
4
|
+
column: Column<any, unknown>;
|
|
5
|
+
options: string[];
|
|
6
|
+
getDisplay?: (value: string) => React.ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare function SelectFilterSection({ label, column, options, getDisplay, }: SelectFilterSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Table } from '@tanstack/react-table';
|
|
2
|
+
import { TableFilter } from '../TableTypes';
|
|
3
|
+
interface TableFiltersMenuProps {
|
|
4
|
+
table: Table<any>;
|
|
5
|
+
filters: TableFilter[];
|
|
6
|
+
}
|
|
7
|
+
export declare function TableFiltersMenu({ table, filters }: TableFiltersMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export * from './SortableHeader';
|
|
2
|
-
export * from './
|
|
1
|
+
export * from './tableComponents/SortableHeader';
|
|
2
|
+
export * from './PromptTable';
|
|
3
|
+
export * from './TableTypes';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Table as ReactTable } from '@tanstack/react-table';
|
|
2
|
+
import { ReactElement } from 'react';
|
|
3
|
+
import { RowAction, WithId } from '../TableTypes';
|
|
4
|
+
interface TableActionsButtonProps<TData extends WithId> {
|
|
5
|
+
actions: RowAction<TData>[];
|
|
6
|
+
table: ReactTable<TData>;
|
|
7
|
+
}
|
|
8
|
+
export declare function TableActionsButton<TData extends WithId>({ actions, table, }: TableActionsButtonProps<TData>): ReactElement;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Table } from '@tanstack/react-table';
|
|
2
|
+
import { WithId } from '../TableTypes';
|
|
3
|
+
interface TableColumnVisibilityButtonProps<Type> {
|
|
4
|
+
table: Table<Type>;
|
|
5
|
+
}
|
|
6
|
+
export declare function TableColumnVisibilityButton<Type extends WithId>({ table, }: TableColumnVisibilityButtonProps<Type>): JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Table as ReactTable } from '@tanstack/react-table';
|
|
2
|
+
import { ReactElement } from 'react';
|
|
3
|
+
interface TableInfoTextProps<TData> {
|
|
4
|
+
table: ReactTable<TData>;
|
|
5
|
+
}
|
|
6
|
+
export declare function TableInfoText<TData>({ table }: TableInfoTextProps<TData>): ReactElement;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Column } from '@tanstack/react-table';
|
|
2
|
+
interface SortableHeaderProps<TData> {
|
|
3
|
+
column: Column<TData, unknown>;
|
|
4
|
+
title: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function SortableHeader<TData>({ column, title }: SortableHeaderProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface TableCheckboxProps {
|
|
2
|
+
checked: boolean;
|
|
3
|
+
onToggle: (arg0: boolean) => void;
|
|
4
|
+
location: 'row' | 'header';
|
|
5
|
+
}
|
|
6
|
+
export declare const TableCheckbox: ({ checked, onToggle, location }: TableCheckboxProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Table as ReactTable } from '@tanstack/react-table';
|
|
2
|
+
import { ReactElement } from 'react';
|
|
3
|
+
interface TableHeadersProps<TData> {
|
|
4
|
+
table: ReactTable<TData>;
|
|
5
|
+
}
|
|
6
|
+
export declare function TableHeaders<TData>({ table }: TableHeadersProps<TData>): ReactElement;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Table as ReactTable } from '@tanstack/react-table';
|
|
2
|
+
import { ReactElement } from 'react';
|
|
3
|
+
interface TableRowsProps<TData> {
|
|
4
|
+
table: ReactTable<TData>;
|
|
5
|
+
onRowClick?: (rowData: TData) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function TableRows<TData>({ table, onRowClick }: TableRowsProps<TData>): ReactElement;
|
|
8
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tumaet/prompt-ui-components",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/ls1intum/prompt-lib.git"
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"@radix-ui/react-toggle": "^1.1.0",
|
|
51
51
|
"@radix-ui/react-toggle-group": "^1.1.0",
|
|
52
52
|
"@radix-ui/react-tooltip": "^1.1.4",
|
|
53
|
+
"@tanstack/react-table": "^8.21.3",
|
|
53
54
|
"@tiptap/core": "^2.11.7",
|
|
54
55
|
"@tiptap/extension-code-block": "^2.11.7",
|
|
55
56
|
"@tiptap/extension-code-block-lowlight": "^2.11.7",
|
|
@@ -83,7 +84,7 @@
|
|
|
83
84
|
"recharts": "^2.15.3",
|
|
84
85
|
"sonner": "^2.0.3",
|
|
85
86
|
"tailwind-merge": "^2.5.4",
|
|
86
|
-
"tsc-alias": "^1.8.
|
|
87
|
+
"tsc-alias": "^1.8.16",
|
|
87
88
|
"typescript": "^5.7.3"
|
|
88
89
|
},
|
|
89
90
|
"devDependencies": {
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Button } from '../../components/ui/button';
|
|
3
|
-
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../components/ui/dialog';
|
|
4
|
-
export const ActionDialog = ({ title, description, confirmLabel, confirmVariant = 'default', isOpen, onClose, onConfirm, }) => (_jsx(Dialog, { open: isOpen, onOpenChange: onClose, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: title }), _jsx(DialogDescription, { children: description })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: 'outline', onClick: onClose, children: "Cancel" }), _jsx(Button, { variant: confirmVariant, onClick: () => {
|
|
5
|
-
onConfirm();
|
|
6
|
-
onClose();
|
|
7
|
-
}, children: confirmLabel })] })] }) }));
|
|
8
|
-
//# sourceMappingURL=GroupActionDialog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GroupActionDialog.js","sourceRoot":"","sources":["../../../src/components/table/GroupActionDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,wBAAwB,CAAA;AAY/B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,YAAY,EACZ,cAAc,GAAG,SAAS,EAC1B,MAAM,EACN,OAAO,EACP,SAAS,GACS,EAAE,EAAE,CAAC,CACvB,KAAC,MAAM,IAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,YACzC,MAAC,aAAa,eACZ,MAAC,YAAY,eACX,KAAC,WAAW,cAAE,KAAK,GAAe,EAClC,KAAC,iBAAiB,cAAE,WAAW,GAAqB,IACvC,EACf,MAAC,YAAY,eACX,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,OAAO,uBAEjC,EACT,KAAC,MAAM,IACL,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,GAAG,EAAE;4BACZ,SAAS,EAAE,CAAA;4BACX,OAAO,EAAE,CAAA;wBACX,CAAC,YAEA,YAAY,GACN,IACI,IACD,GACT,CACV,CAAA"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react';
|
|
3
|
-
import { Button } from '../../components/ui/button';
|
|
4
|
-
export const SortableHeader = ({ column, title }) => {
|
|
5
|
-
return (_jsxs(Button, { variant: 'ghost', onClick: () => column.toggleSorting(column.getIsSorted() === 'asc'), children: [title, column.getIsSorted() === 'asc' ? (_jsx(ArrowUp, { className: 'ml-2 h-4 w-4' })) : column.getIsSorted() === 'desc' ? (_jsx(ArrowDown, { className: 'ml-2 h-4 w-4' })) : (_jsx(ArrowUpDown, { className: 'ml-2 h-4 w-4' }))] }));
|
|
6
|
-
};
|
|
7
|
-
//# sourceMappingURL=SortableHeader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SortableHeader.js","sourceRoot":"","sources":["../../../src/components/table/SortableHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,EAAkC,EAAE,EAAE;IAClF,OAAO,CACL,MAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,aACxF,KAAK,EACL,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAChC,KAAC,OAAO,IAAC,SAAS,EAAC,cAAc,GAAG,CACrC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CACpC,KAAC,SAAS,IAAC,SAAS,EAAC,cAAc,GAAG,CACvC,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,SAAS,EAAC,cAAc,GAAG,CACzC,IACM,CACV,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
interface ActionDialogProps {
|
|
2
|
-
title: string;
|
|
3
|
-
description: string;
|
|
4
|
-
confirmLabel: string;
|
|
5
|
-
confirmVariant?: 'default' | 'destructive';
|
|
6
|
-
isOpen: boolean;
|
|
7
|
-
onClose: () => void;
|
|
8
|
-
onConfirm: () => void;
|
|
9
|
-
}
|
|
10
|
-
export declare const ActionDialog: ({ title, description, confirmLabel, confirmVariant, isOpen, onClose, onConfirm, }: ActionDialogProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
-
export {};
|