@juspay/blend-design-system 0.0.1
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/README.md +177 -0
- package/dist/assets/main.css +1 -0
- package/dist/breakpoints/breakPoints.d.ts +5 -0
- package/dist/components/Accordion/Accordion.d.ts +4 -0
- package/dist/components/Accordion/AccordionItem.d.ts +6 -0
- package/dist/components/Accordion/accordion.tokens.d.ts +49 -0
- package/dist/components/Accordion/index.d.ts +3 -0
- package/dist/components/Accordion/types.d.ts +29 -0
- package/dist/components/Alert/Alert.d.ts +4 -0
- package/dist/components/Alert/alert.tokens.d.ts +25 -0
- package/dist/components/Alert/index.d.ts +2 -0
- package/dist/components/Alert/types.d.ts +33 -0
- package/dist/components/Avatar/Avatar.d.ts +12 -0
- package/dist/components/Avatar/StyledAvatar.d.ts +8 -0
- package/dist/components/Avatar/avatarUtils.d.ts +7 -0
- package/dist/components/Avatar/index.d.ts +2 -0
- package/dist/components/Avatar/token.d.ts +71 -0
- package/dist/components/Avatar/types.d.ts +29 -0
- package/dist/components/AvatarGroup/AvatarGroup.d.ts +11 -0
- package/dist/components/AvatarGroup/StyledAvatarGroup.d.ts +6 -0
- package/dist/components/AvatarGroup/avatarGroupUtils.d.ts +24 -0
- package/dist/components/AvatarGroup/index.d.ts +2 -0
- package/dist/components/AvatarGroup/token.d.ts +89 -0
- package/dist/components/AvatarGroup/types.d.ts +29 -0
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +8 -0
- package/dist/components/Breadcrumb/breadcrumb.tokens.d.ts +31 -0
- package/dist/components/Breadcrumb/index.d.ts +2 -0
- package/dist/components/Breadcrumb/types.d.ts +6 -0
- package/dist/components/Button/Button.d.ts +18 -0
- package/dist/components/Button/button.tokens.d.ts +61 -0
- package/dist/components/Button/index.d.ts +2 -0
- package/dist/components/Button/types.d.ts +34 -0
- package/dist/components/ButtonGroup/ButtonGroup.d.ts +4 -0
- package/dist/components/ButtonGroup/index.d.ts +2 -0
- package/dist/components/ButtonGroup/types.d.ts +6 -0
- package/dist/components/Charts/ChartHeader.d.ts +2 -0
- package/dist/components/Charts/ChartLegend.d.ts +3 -0
- package/dist/components/Charts/ChartUtils.d.ts +5 -0
- package/dist/components/Charts/Charts.d.ts +3 -0
- package/dist/components/Charts/CustomTooltip.d.ts +2 -0
- package/dist/components/Charts/index.d.ts +2 -0
- package/dist/components/Charts/renderChart.d.ts +2 -0
- package/dist/components/Charts/types.d.ts +83 -0
- package/dist/components/Charts/utils.d.ts +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +3 -0
- package/dist/components/Checkbox/StyledCheckbox.d.ts +11 -0
- package/dist/components/Checkbox/checkbox.token.d.ts +96 -0
- package/dist/components/Checkbox/checkboxUtils.d.ts +68 -0
- package/dist/components/Checkbox/index.d.ts +2 -0
- package/dist/components/Checkbox/types.d.ts +21 -0
- package/dist/components/DataTable/ColumnFilter/index.d.ts +9 -0
- package/dist/components/DataTable/ColumnManager.d.ts +5 -0
- package/dist/components/DataTable/DataTable.d.ts +3 -0
- package/dist/components/DataTable/DataTable.stories.d.ts +16 -0
- package/dist/components/DataTable/DataTableHeader/index.d.ts +3 -0
- package/dist/components/DataTable/DataTableHeader/types.d.ts +20 -0
- package/dist/components/DataTable/DataTablePagination.d.ts +11 -0
- package/dist/components/DataTable/TableBody/BulkActionBar.d.ts +8 -0
- package/dist/components/DataTable/TableBody/index.d.ts +4 -0
- package/dist/components/DataTable/TableBody/types.d.ts +32 -0
- package/dist/components/DataTable/TableCell/index.d.ts +3 -0
- package/dist/components/DataTable/TableCell/types.d.ts +12 -0
- package/dist/components/DataTable/TableFooter/index.d.ts +3 -0
- package/dist/components/DataTable/TableFooter/types.d.ts +10 -0
- package/dist/components/DataTable/TableHeader/FilterComponents.d.ts +59 -0
- package/dist/components/DataTable/TableHeader/handlers.d.ts +28 -0
- package/dist/components/DataTable/TableHeader/index.d.ts +3 -0
- package/dist/components/DataTable/TableHeader/types.d.ts +21 -0
- package/dist/components/DataTable/TableHeader/utils.d.ts +29 -0
- package/dist/components/DataTable/columnTypes.d.ts +87 -0
- package/dist/components/DataTable/dataTable.tokens.d.ts +174 -0
- package/dist/components/DataTable/index.d.ts +10 -0
- package/dist/components/DataTable/types.d.ts +230 -0
- package/dist/components/DataTable/utils.d.ts +52 -0
- package/dist/components/DateRangePicker/CalendarGrid.d.ts +11 -0
- package/dist/components/DateRangePicker/DateRangePicker.d.ts +4 -0
- package/dist/components/DateRangePicker/QuickRangeSelector.d.ts +13 -0
- package/dist/components/DateRangePicker/TimeSelector.d.ts +7 -0
- package/dist/components/DateRangePicker/dateRangePicker.tokens.d.ts +188 -0
- package/dist/components/DateRangePicker/index.d.ts +2 -0
- package/dist/components/DateRangePicker/types.d.ts +38 -0
- package/dist/components/DateRangePicker/utils.d.ts +470 -0
- package/dist/components/Directory/Directory.d.ts +6 -0
- package/dist/components/Directory/NavItem.d.ts +7 -0
- package/dist/components/Directory/Section.d.ts +3 -0
- package/dist/components/Directory/index.d.ts +2 -0
- package/dist/components/Directory/types.d.ts +29 -0
- package/dist/components/Directory/utils.d.ts +9 -0
- package/dist/components/Drawer/Drawer.d.ts +6 -0
- package/dist/components/Drawer/components/DrawerBase.d.ts +30 -0
- package/dist/components/Drawer/components/NestedSelectDrawer.d.ts +72 -0
- package/dist/components/Drawer/components/SelectDrawer.d.ts +9 -0
- package/dist/components/Drawer/components/StatusDrawer.d.ts +5 -0
- package/dist/components/Drawer/drawer.tokens.d.ts +60 -0
- package/dist/components/Drawer/index.d.ts +3 -0
- package/dist/components/Drawer/types.d.ts +384 -0
- package/dist/components/Dropdown/Dropdown.d.ts +9 -0
- package/dist/components/GradientBlur/GradientBlur.d.ts +2 -0
- package/dist/components/Inputs/DropdownInput/DropdownInput.d.ts +3 -0
- package/dist/components/Inputs/DropdownInput/dropdownInput.tokens.d.ts +33 -0
- package/dist/components/Inputs/DropdownInput/index.d.ts +2 -0
- package/dist/components/Inputs/DropdownInput/types.d.ts +31 -0
- package/dist/components/Inputs/MultiValueInput/MultiValueInput.d.ts +3 -0
- package/dist/components/Inputs/MultiValueInput/index.d.ts +2 -0
- package/dist/components/Inputs/MultiValueInput/multiValueInput.tokens.d.ts +33 -0
- package/dist/components/Inputs/MultiValueInput/types.d.ts +25 -0
- package/dist/components/Inputs/NumberInput/NumberInput.d.ts +3 -0
- package/dist/components/Inputs/NumberInput/index.d.ts +2 -0
- package/dist/components/Inputs/NumberInput/numberInput.tokens.d.ts +44 -0
- package/dist/components/Inputs/NumberInput/types.d.ts +16 -0
- package/dist/components/Inputs/OTPInput/OTPInput.d.ts +3 -0
- package/dist/components/Inputs/OTPInput/index.d.ts +2 -0
- package/dist/components/Inputs/OTPInput/otpInput.tokens.d.ts +34 -0
- package/dist/components/Inputs/OTPInput/types.d.ts +11 -0
- package/dist/components/Inputs/SearchInput/SearchInput.d.ts +3 -0
- package/dist/components/Inputs/SearchInput/index.d.ts +2 -0
- package/dist/components/Inputs/SearchInput/searchInput.tokens.d.ts +41 -0
- package/dist/components/Inputs/SearchInput/types.d.ts +7 -0
- package/dist/components/Inputs/TextArea/TextArea.d.ts +3 -0
- package/dist/components/Inputs/TextArea/index.d.ts +2 -0
- package/dist/components/Inputs/TextArea/textarea.token.d.ts +27 -0
- package/dist/components/Inputs/TextArea/types.d.ts +22 -0
- package/dist/components/Inputs/TextInput/TextInput.d.ts +3 -0
- package/dist/components/Inputs/TextInput/index.d.ts +2 -0
- package/dist/components/Inputs/TextInput/textInput.tokens.d.ts +33 -0
- package/dist/components/Inputs/TextInput/types.d.ts +24 -0
- package/dist/components/Inputs/UnitInput/UnitInput.d.ts +3 -0
- package/dist/components/Inputs/UnitInput/index.d.ts +2 -0
- package/dist/components/Inputs/UnitInput/types.d.ts +25 -0
- package/dist/components/Inputs/UnitInput/unitInput.tokens.d.ts +40 -0
- package/dist/components/Inputs/index.d.ts +8 -0
- package/dist/components/Inputs/utils/InputFooter/InputFooter.d.ts +8 -0
- package/dist/components/Inputs/utils/InputLabels/InputLabels.d.ts +18 -0
- package/dist/components/Menu/Menu.d.ts +8 -0
- package/dist/components/Menu/MenuGroupLabel.d.ts +3 -0
- package/dist/components/Menu/MenuItem.d.ts +9 -0
- package/dist/components/Menu/MenuPlayground.d.ts +3 -0
- package/dist/components/Menu/MenuPlaygroundComprehensive.d.ts +3 -0
- package/dist/components/Menu/SubMenu.d.ts +5 -0
- package/dist/components/Menu/index.d.ts +2 -0
- package/dist/components/Menu/menu.styles.d.ts +2 -0
- package/dist/components/Menu/menu.tokens.d.ts +100 -0
- package/dist/components/Menu/types.d.ts +55 -0
- package/dist/components/Menu/utils.d.ts +3 -0
- package/dist/components/Modal/Modal.d.ts +3 -0
- package/dist/components/Modal/index.d.ts +2 -0
- package/dist/components/Modal/modal.tokens.d.ts +48 -0
- package/dist/components/Modal/types.d.ts +22 -0
- package/dist/components/MultiSelect/MultiSelect.d.ts +3 -0
- package/dist/components/MultiSelect/MultiSelectMenu.d.ts +3 -0
- package/dist/components/MultiSelect/MultiSelectMenuItem.d.ts +10 -0
- package/dist/components/MultiSelect/MultiSelectSubMenu.d.ts +10 -0
- package/dist/components/MultiSelect/SelectAllItem.d.ts +8 -0
- package/dist/components/MultiSelect/index.d.ts +2 -0
- package/dist/components/MultiSelect/multiSelect.tokens.d.ts +77 -0
- package/dist/components/MultiSelect/types.d.ts +92 -0
- package/dist/components/MultiSelect/utils.d.ts +11 -0
- package/dist/components/Popover/Popover.d.ts +6 -0
- package/dist/components/Popover/PopoverFooter.d.ts +6 -0
- package/dist/components/Popover/PopoverHeader.d.ts +6 -0
- package/dist/components/Popover/index.d.ts +2 -0
- package/dist/components/Popover/popover.tokens.d.ts +40 -0
- package/dist/components/Popover/types.d.ts +31 -0
- package/dist/components/Primitives/Block/Block.d.ts +189 -0
- package/dist/components/Primitives/PrimitiveButton/PrimitiveButton.d.ts +131 -0
- package/dist/components/Primitives/PrimitiveInput/PrimitiveInput.d.ts +91 -0
- package/dist/components/Primitives/PrimitiveLink.d.ts +58 -0
- package/dist/components/Primitives/PrimitiveText/PrimitiveText.d.ts +39 -0
- package/dist/components/Primitives/PrimitiveTextArea.d.ts +88 -0
- package/dist/components/ProgressBar/ProgressBar.d.ts +4 -0
- package/dist/components/ProgressBar/index.d.ts +3 -0
- package/dist/components/ProgressBar/progressbar.tokens.d.ts +63 -0
- package/dist/components/ProgressBar/types.d.ts +22 -0
- package/dist/components/ProgressBar/utils.d.ts +7 -0
- package/dist/components/Radio/Radio.d.ts +6 -0
- package/dist/components/Radio/RadioGroup.d.ts +4 -0
- package/dist/components/Radio/StyledRadio.d.ts +7 -0
- package/dist/components/Radio/index.d.ts +4 -0
- package/dist/components/Radio/radio.token.d.ts +75 -0
- package/dist/components/Radio/types.d.ts +30 -0
- package/dist/components/Radio/utils.d.ts +47 -0
- package/dist/components/Select/Select.d.ts +25 -0
- package/dist/components/Select/SelectMenu.d.ts +3 -0
- package/dist/components/Select/index.d.ts +2 -0
- package/dist/components/Select/select.token.d.ts +40 -0
- package/dist/components/Select/types.d.ts +55 -0
- package/dist/components/Sidebar/Sidebar.d.ts +4 -0
- package/dist/components/Sidebar/index.d.ts +2 -0
- package/dist/components/Sidebar/types.d.ts +44 -0
- package/dist/components/SingleSelect/SingleSelect.d.ts +3 -0
- package/dist/components/SingleSelect/SingleSelectMenu.d.ts +21 -0
- package/dist/components/SingleSelect/index.d.ts +2 -0
- package/dist/components/SingleSelect/types.d.ts +26 -0
- package/dist/components/Slider/Slider.d.ts +5 -0
- package/dist/components/Slider/index.d.ts +3 -0
- package/dist/components/Slider/types.d.ts +30 -0
- package/dist/components/Slider/utils.d.ts +49 -0
- package/dist/components/Snackbar/Snackbar.d.ts +4 -0
- package/dist/components/Snackbar/index.d.ts +3 -0
- package/dist/components/Snackbar/snackbar.tokens.d.ts +52 -0
- package/dist/components/Snackbar/types.d.ts +26 -0
- package/dist/components/SplitTag/SplitTag.d.ts +6 -0
- package/dist/components/SplitTag/index.d.ts +2 -0
- package/dist/components/SplitTag/types.d.ts +16 -0
- package/dist/components/StatCard/StatCard.d.ts +6 -0
- package/dist/components/StatCard/index.d.ts +2 -0
- package/dist/components/StatCard/statcard.tokens.d.ts +145 -0
- package/dist/components/StatCard/types.d.ts +32 -0
- package/dist/components/Switch/StyledSwitch.d.ts +11 -0
- package/dist/components/Switch/Switch.d.ts +5 -0
- package/dist/components/Switch/SwitchGroup.d.ts +4 -0
- package/dist/components/Switch/index.d.ts +4 -0
- package/dist/components/Switch/switch.token.d.ts +112 -0
- package/dist/components/Switch/types.d.ts +30 -0
- package/dist/components/Switch/utils.d.ts +58 -0
- package/dist/components/Tabs/StyledTabs.d.ts +22 -0
- package/dist/components/Tabs/Tabs.d.ts +5 -0
- package/dist/components/Tabs/TabsContent.d.ts +2 -0
- package/dist/components/Tabs/TabsList.d.ts +8 -0
- package/dist/components/Tabs/TabsTrigger.d.ts +10 -0
- package/dist/components/Tabs/index.d.ts +6 -0
- package/dist/components/Tabs/tabs.token.d.ts +60 -0
- package/dist/components/Tabs/types.d.ts +34 -0
- package/dist/components/Tags/Tags.d.ts +3 -0
- package/dist/components/Tags/index.d.ts +2 -0
- package/dist/components/Tags/tag.tokens.d.ts +57 -0
- package/dist/components/Tags/types.d.ts +35 -0
- package/dist/components/Text/Text.d.ts +12 -0
- package/dist/components/Tooltip/Tooltip.d.ts +3 -0
- package/dist/components/Tooltip/index.d.ts +2 -0
- package/dist/components/Tooltip/tooltip.tokens.d.ts +31 -0
- package/dist/components/Tooltip/types.d.ts +33 -0
- package/dist/context/ThemeContext.d.ts +66 -0
- package/dist/context/ThemeProvider.d.ts +11 -0
- package/dist/context/index.d.ts +4 -0
- package/dist/context/initComponentTokens.d.ts +4 -0
- package/dist/context/useComponentToken.d.ts +29 -0
- package/dist/foundationToken.d.ts +214 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/useBreakPoints.d.ts +4 -0
- package/dist/hooks/useClickOutside.d.ts +3 -0
- package/dist/hooks/useDebounce.d.ts +1 -0
- package/dist/hooks/useResizeObserver.d.ts +1 -0
- package/dist/hooks/useResponsiveTokens.d.ts +2 -0
- package/dist/hooks/useScrollLock.d.ts +2 -0
- package/dist/main.d.ts +34 -0
- package/dist/main.js +50499 -0
- package/dist/tokens/border.tokens.d.ts +29 -0
- package/dist/tokens/color.tokens.d.ts +16 -0
- package/dist/tokens/font.tokens.d.ts +72 -0
- package/dist/tokens/index.d.ts +2 -0
- package/dist/tokens/opacity.tokens.d.ts +18 -0
- package/dist/tokens/shadows.tokens.d.ts +15 -0
- package/dist/tokens/theme.token.d.ts +16 -0
- package/dist/tokens/unit.tokens.d.ts +34 -0
- package/package.json +99 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ColumnDefinition } from '../types';
|
|
2
|
+
export type TableCellProps<T extends Record<string, unknown>> = {
|
|
3
|
+
column: ColumnDefinition<T>;
|
|
4
|
+
row: T;
|
|
5
|
+
rowIndex: number;
|
|
6
|
+
isEditing: boolean;
|
|
7
|
+
currentValue: unknown;
|
|
8
|
+
width: React.CSSProperties;
|
|
9
|
+
frozenStyles?: React.CSSProperties;
|
|
10
|
+
onFieldChange: (value: unknown) => void;
|
|
11
|
+
getDisplayValue?: (value: unknown, column: ColumnDefinition<T>) => unknown;
|
|
12
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PaginationConfig } from '../types';
|
|
2
|
+
export type TableFooterProps = {
|
|
3
|
+
pagination?: PaginationConfig;
|
|
4
|
+
currentPage: number;
|
|
5
|
+
pageSize: number;
|
|
6
|
+
totalRows: number;
|
|
7
|
+
isLoading?: boolean;
|
|
8
|
+
onPageChange: (page: number) => void;
|
|
9
|
+
onPageSizeChange: (size: number) => void;
|
|
10
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { ColumnDefinition } from '../types';
|
|
3
|
+
import { TableTokenType } from '../dataTable.tokens';
|
|
4
|
+
import { SortHandlers, FilterHandlers, FilterState, ColumnFilterHandler } from './handlers';
|
|
5
|
+
type FilterComponentsProps = {
|
|
6
|
+
column: ColumnDefinition<Record<string, unknown>>;
|
|
7
|
+
data?: Record<string, unknown>[];
|
|
8
|
+
tableToken: TableTokenType;
|
|
9
|
+
sortHandlers: SortHandlers;
|
|
10
|
+
filterHandlers: FilterHandlers;
|
|
11
|
+
filterState: FilterState;
|
|
12
|
+
onColumnFilter?: ColumnFilterHandler;
|
|
13
|
+
onPopoverClose?: () => void;
|
|
14
|
+
};
|
|
15
|
+
export declare const SortOptions: React.FC<{
|
|
16
|
+
fieldKey: string;
|
|
17
|
+
tableToken: TableTokenType;
|
|
18
|
+
sortHandlers: SortHandlers;
|
|
19
|
+
}>;
|
|
20
|
+
export declare const DropdownSearchSection: React.FC<{
|
|
21
|
+
column: ColumnDefinition<Record<string, unknown>>;
|
|
22
|
+
fieldKey: string;
|
|
23
|
+
tableToken: TableTokenType;
|
|
24
|
+
filterHandlers: FilterHandlers;
|
|
25
|
+
filterState: FilterState;
|
|
26
|
+
}>;
|
|
27
|
+
export declare const Separator: React.FC<{
|
|
28
|
+
tableToken: TableTokenType;
|
|
29
|
+
}>;
|
|
30
|
+
export declare const SingleSelectItems: React.FC<{
|
|
31
|
+
column: ColumnDefinition<Record<string, unknown>>;
|
|
32
|
+
fieldKey: string;
|
|
33
|
+
tableToken: TableTokenType;
|
|
34
|
+
filterHandlers: FilterHandlers;
|
|
35
|
+
filterState: FilterState;
|
|
36
|
+
data?: Record<string, unknown>[];
|
|
37
|
+
onColumnFilter?: ColumnFilterHandler;
|
|
38
|
+
onPopoverClose?: () => void;
|
|
39
|
+
}>;
|
|
40
|
+
export declare const MultiSelectItems: React.FC<{
|
|
41
|
+
column: ColumnDefinition<Record<string, unknown>>;
|
|
42
|
+
fieldKey: string;
|
|
43
|
+
tableToken: TableTokenType;
|
|
44
|
+
filterHandlers: FilterHandlers;
|
|
45
|
+
filterState: FilterState;
|
|
46
|
+
data?: Record<string, unknown>[];
|
|
47
|
+
onColumnFilter?: ColumnFilterHandler;
|
|
48
|
+
}>;
|
|
49
|
+
export declare const SliderFilter: React.FC<{
|
|
50
|
+
column: ColumnDefinition<Record<string, unknown>>;
|
|
51
|
+
fieldKey: string;
|
|
52
|
+
tableToken: TableTokenType;
|
|
53
|
+
filterHandlers: FilterHandlers;
|
|
54
|
+
filterState: FilterState;
|
|
55
|
+
data?: Record<string, unknown>[];
|
|
56
|
+
onColumnFilter?: ColumnFilterHandler;
|
|
57
|
+
}>;
|
|
58
|
+
export declare const ColumnFilter: React.FC<FilterComponentsProps>;
|
|
59
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SortDirection, FilterType, ColumnDefinition } from '../types';
|
|
2
|
+
export type SortState = {
|
|
3
|
+
currentSortField: string | null;
|
|
4
|
+
currentSortDirection: SortDirection;
|
|
5
|
+
};
|
|
6
|
+
export type FilterState = {
|
|
7
|
+
columnSearchValues: Record<string, string>;
|
|
8
|
+
columnSelectedValues: Record<string, string[] | {
|
|
9
|
+
min: number;
|
|
10
|
+
max: number;
|
|
11
|
+
}>;
|
|
12
|
+
};
|
|
13
|
+
export type ColumnFilterHandler = (field: string, filterType: FilterType, value: string | string[] | {
|
|
14
|
+
min: number;
|
|
15
|
+
max: number;
|
|
16
|
+
}, operator?: 'endsWith' | 'startsWith' | 'equals' | 'contains' | 'gt' | 'lt' | 'gte' | 'lte' | 'range') => void;
|
|
17
|
+
export type SortHandlers = {
|
|
18
|
+
handleSort: (field: string) => void;
|
|
19
|
+
handleSortAscending: (field: string) => void;
|
|
20
|
+
handleSortDescending: (field: string) => void;
|
|
21
|
+
};
|
|
22
|
+
export type FilterHandlers = {
|
|
23
|
+
handleSearchChange: (fieldKey: string, value: string) => void;
|
|
24
|
+
handleSelectFilter: (column: ColumnDefinition<Record<string, unknown>>, fieldKey: string, value: string, onColumnFilter?: ColumnFilterHandler) => void;
|
|
25
|
+
handleMultiSelectFilter: (column: ColumnDefinition<Record<string, unknown>>, fieldKey: string, value: string, onColumnFilter?: ColumnFilterHandler) => void;
|
|
26
|
+
};
|
|
27
|
+
export declare const createSortHandlers: (sortState: SortState, setSortState: React.Dispatch<React.SetStateAction<SortState>>, onSort: (field: keyof Record<string, unknown>) => void) => SortHandlers;
|
|
28
|
+
export declare const createFilterHandlers: (setFilterState: React.Dispatch<React.SetStateAction<FilterState>>) => FilterHandlers;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ColumnDefinition, FilterType } from '../types';
|
|
2
|
+
export type TableHeaderProps<T extends Record<string, unknown>> = {
|
|
3
|
+
visibleColumns: ColumnDefinition<T>[];
|
|
4
|
+
initialColumns: ColumnDefinition<T>[];
|
|
5
|
+
selectAll: boolean | 'indeterminate';
|
|
6
|
+
enableInlineEdit?: boolean;
|
|
7
|
+
enableColumnManager?: boolean;
|
|
8
|
+
enableRowExpansion?: boolean;
|
|
9
|
+
enableRowSelection?: boolean;
|
|
10
|
+
data?: T[];
|
|
11
|
+
columnFreeze?: number;
|
|
12
|
+
onSort: (field: keyof T) => void;
|
|
13
|
+
onSelectAll: (checked: boolean | 'indeterminate') => void;
|
|
14
|
+
onColumnChange: (columns: ColumnDefinition<T>[]) => void;
|
|
15
|
+
onColumnFilter?: (field: string, type: FilterType, value: string | string[] | {
|
|
16
|
+
min: number;
|
|
17
|
+
max: number;
|
|
18
|
+
}, operator?: 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'gt' | 'lt' | 'gte' | 'lte' | 'range') => void;
|
|
19
|
+
onHeaderChange?: (field: keyof T, newHeader: string) => void;
|
|
20
|
+
getColumnWidth: (column: ColumnDefinition<T>, index: number) => React.CSSProperties;
|
|
21
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ColumnDefinition } from '../types';
|
|
2
|
+
import { SelectMenuGroupType } from '../../Select/types';
|
|
3
|
+
import { MultiSelectMenuGroupType } from '../../MultiSelect/types';
|
|
4
|
+
export declare const getFilterOptions: (column: ColumnDefinition<Record<string, unknown>>, data?: Record<string, unknown>[]) => import('..').FilterOption[];
|
|
5
|
+
export declare const getSelectMenuItems: (column: ColumnDefinition<Record<string, unknown>>, data?: Record<string, unknown>[]) => SelectMenuGroupType[];
|
|
6
|
+
export declare const getMultiSelectMenuItems: (column: ColumnDefinition<Record<string, unknown>>, data?: Record<string, unknown>[]) => MultiSelectMenuGroupType[];
|
|
7
|
+
/**
|
|
8
|
+
* Filters dropdown menu items based on search text
|
|
9
|
+
* This is used to filter the visible options in select/multiselect dropdowns
|
|
10
|
+
* NOT for applying column filters to data
|
|
11
|
+
*/
|
|
12
|
+
export declare const filterItemsBySearch: (items: Array<{
|
|
13
|
+
label: string;
|
|
14
|
+
value: string;
|
|
15
|
+
}>, searchValue: string) => Array<{
|
|
16
|
+
label: string;
|
|
17
|
+
value: string;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const getPopoverAlignment: (index: number, totalColumns: number) => "start" | "center" | "end";
|
|
20
|
+
export declare const getFrozenColumnStyles: (index: number, columnFreeze: number, enableRowExpansion: boolean, enableRowSelection: boolean, visibleColumns: ColumnDefinition<Record<string, unknown>>[], getColumnWidth: (column: ColumnDefinition<Record<string, unknown>>, index: number) => React.CSSProperties, backgroundColor: string) => {
|
|
21
|
+
padding: string;
|
|
22
|
+
} | {
|
|
23
|
+
borderRight?: string | undefined;
|
|
24
|
+
position: "sticky";
|
|
25
|
+
left: string;
|
|
26
|
+
zIndex: number;
|
|
27
|
+
backgroundColor: string;
|
|
28
|
+
padding: string;
|
|
29
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { FilterType, ColumnType } from './types';
|
|
2
|
+
export type ColumnFilterOption = {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
};
|
|
7
|
+
export type DropdownData = {
|
|
8
|
+
options: Array<{
|
|
9
|
+
id: string;
|
|
10
|
+
label: string;
|
|
11
|
+
value: unknown;
|
|
12
|
+
}>;
|
|
13
|
+
selectedValue?: unknown;
|
|
14
|
+
placeholder?: string;
|
|
15
|
+
};
|
|
16
|
+
export type AvatarData = {
|
|
17
|
+
label: string;
|
|
18
|
+
sublabel?: string;
|
|
19
|
+
imageUrl?: string;
|
|
20
|
+
initials?: string;
|
|
21
|
+
};
|
|
22
|
+
export type TagData = {
|
|
23
|
+
text: string;
|
|
24
|
+
color?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'neutral';
|
|
25
|
+
variant?: 'solid' | 'subtle' | 'outline';
|
|
26
|
+
size?: 'sm' | 'md' | 'lg';
|
|
27
|
+
};
|
|
28
|
+
export type SelectData = {
|
|
29
|
+
value: string;
|
|
30
|
+
label?: string;
|
|
31
|
+
disabled?: boolean;
|
|
32
|
+
};
|
|
33
|
+
export type MultiSelectData = {
|
|
34
|
+
values: string[];
|
|
35
|
+
labels?: string[];
|
|
36
|
+
};
|
|
37
|
+
export type DateData = {
|
|
38
|
+
date: Date | string;
|
|
39
|
+
format?: string;
|
|
40
|
+
};
|
|
41
|
+
export type DateRangeData = {
|
|
42
|
+
startDate: Date | string;
|
|
43
|
+
endDate: Date | string;
|
|
44
|
+
format?: string;
|
|
45
|
+
};
|
|
46
|
+
export type ColumnDataTypeMap = {
|
|
47
|
+
[ColumnType.TEXT]: string | number;
|
|
48
|
+
[ColumnType.NUMBER]: number;
|
|
49
|
+
[ColumnType.SELECT]: SelectData | string;
|
|
50
|
+
[ColumnType.MULTISELECT]: MultiSelectData | string[];
|
|
51
|
+
[ColumnType.DATE]: DateData | Date | string;
|
|
52
|
+
[ColumnType.DATE_RANGE]: DateRangeData;
|
|
53
|
+
[ColumnType.AVATAR]: AvatarData;
|
|
54
|
+
[ColumnType.TAG]: TagData;
|
|
55
|
+
[ColumnType.SLIDER]: number;
|
|
56
|
+
[ColumnType.CUSTOM]: unknown;
|
|
57
|
+
[ColumnType.PROGRESS]: number;
|
|
58
|
+
[ColumnType.DROPDOWN]: DropdownData;
|
|
59
|
+
[ColumnType.REACT_ELEMENT]: unknown;
|
|
60
|
+
};
|
|
61
|
+
export type GetColumnDataType<T extends ColumnType> = ColumnDataTypeMap[T];
|
|
62
|
+
export declare const validateColumnData: {
|
|
63
|
+
text: (data: unknown) => data is string | number;
|
|
64
|
+
number: (data: unknown) => data is number;
|
|
65
|
+
select: (data: unknown) => data is SelectData | string;
|
|
66
|
+
multiselect: (data: unknown) => data is MultiSelectData | string[];
|
|
67
|
+
date: (data: unknown) => data is DateData | Date | string;
|
|
68
|
+
date_range: (data: unknown) => data is DateRangeData;
|
|
69
|
+
avatar: (data: unknown) => data is AvatarData;
|
|
70
|
+
tag: (data: unknown) => data is TagData;
|
|
71
|
+
slider: (data: unknown) => data is number;
|
|
72
|
+
custom: (_data: unknown) => _data is unknown;
|
|
73
|
+
progress: (data: unknown) => data is number;
|
|
74
|
+
dropdown: (data: unknown) => data is DropdownData;
|
|
75
|
+
react_element: (_data: unknown) => _data is unknown;
|
|
76
|
+
};
|
|
77
|
+
export type ColumnTypeConfig = {
|
|
78
|
+
type: ColumnType;
|
|
79
|
+
filterType: FilterType;
|
|
80
|
+
filterOptions?: ColumnFilterOption[];
|
|
81
|
+
supportsSorting: boolean;
|
|
82
|
+
supportsFiltering: boolean;
|
|
83
|
+
enableSearch?: boolean;
|
|
84
|
+
filterComponent?: 'search' | 'select' | 'multiselect' | 'dateRange' | 'numberRange' | 'slider';
|
|
85
|
+
};
|
|
86
|
+
export declare const getColumnTypeConfig: (type: ColumnType) => ColumnTypeConfig;
|
|
87
|
+
export declare const getExpectedTypeDescription: (type: ColumnType) => string;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { CSSObject } from 'styled-components';
|
|
2
|
+
import { FoundationTokenType } from '../../tokens/theme.token';
|
|
3
|
+
export type TableTokenType = {
|
|
4
|
+
padding: CSSObject['padding'];
|
|
5
|
+
width: CSSObject['width'];
|
|
6
|
+
height: CSSObject['height'];
|
|
7
|
+
display: CSSObject['display'];
|
|
8
|
+
flexDirection: CSSObject['flexDirection'];
|
|
9
|
+
position: CSSObject['position'];
|
|
10
|
+
header: {
|
|
11
|
+
display: CSSObject['display'];
|
|
12
|
+
justifyContent: CSSObject['justifyContent'];
|
|
13
|
+
alignItems: CSSObject['alignItems'];
|
|
14
|
+
marginBottom: CSSObject['marginBottom'];
|
|
15
|
+
gap: CSSObject['gap'];
|
|
16
|
+
maxWidth: CSSObject['maxWidth'];
|
|
17
|
+
overflowX: CSSObject['overflowX'];
|
|
18
|
+
title: CSSObject;
|
|
19
|
+
description: CSSObject;
|
|
20
|
+
headerSlot1: CSSObject;
|
|
21
|
+
headerSlot2: CSSObject;
|
|
22
|
+
headerSlot3: CSSObject;
|
|
23
|
+
};
|
|
24
|
+
dataTable: {
|
|
25
|
+
borderRadius: CSSObject['borderRadius'];
|
|
26
|
+
border: CSSObject['border'];
|
|
27
|
+
maxHeight: CSSObject['maxHeight'];
|
|
28
|
+
minHeight?: CSSObject['minHeight'];
|
|
29
|
+
bulkActions: {
|
|
30
|
+
top: CSSObject['top'];
|
|
31
|
+
left: CSSObject['left'];
|
|
32
|
+
transform: CSSObject['transform'];
|
|
33
|
+
zIndex: CSSObject['zIndex'];
|
|
34
|
+
backgroundColor: CSSObject['backgroundColor'];
|
|
35
|
+
color: CSSObject['color'];
|
|
36
|
+
borderRadius: CSSObject['borderRadius'];
|
|
37
|
+
padding: CSSObject['padding'];
|
|
38
|
+
boxShadow: CSSObject['boxShadow'];
|
|
39
|
+
display: CSSObject['display'];
|
|
40
|
+
alignItems: CSSObject['alignItems'];
|
|
41
|
+
gap: CSSObject['gap'];
|
|
42
|
+
minWidth: CSSObject['minWidth'];
|
|
43
|
+
border: CSSObject['border'];
|
|
44
|
+
selectText: CSSObject;
|
|
45
|
+
height: CSSObject['height'];
|
|
46
|
+
};
|
|
47
|
+
table: {
|
|
48
|
+
width: CSSObject['width'];
|
|
49
|
+
tableLayout: CSSObject['tableLayout'];
|
|
50
|
+
borderCollapse: CSSObject['borderCollapse'];
|
|
51
|
+
borderSpacing: CSSObject['borderSpacing'];
|
|
52
|
+
position: CSSObject['position'];
|
|
53
|
+
minWidth: CSSObject['minWidth'];
|
|
54
|
+
header: {
|
|
55
|
+
backgroundColor: CSSObject['backgroundColor'];
|
|
56
|
+
borderBottom: CSSObject['borderBottom'];
|
|
57
|
+
height: CSSObject['height'];
|
|
58
|
+
row: CSSObject;
|
|
59
|
+
cell: CSSObject & {
|
|
60
|
+
width?: CSSObject['width'];
|
|
61
|
+
fontSize?: CSSObject['fontSize'];
|
|
62
|
+
fontWeight?: CSSObject['fontWeight'];
|
|
63
|
+
};
|
|
64
|
+
sortable: {
|
|
65
|
+
cursor: CSSObject['cursor'];
|
|
66
|
+
userSelect: CSSObject['userSelect'];
|
|
67
|
+
};
|
|
68
|
+
filter: {
|
|
69
|
+
backgroundColor: CSSObject['backgroundColor'];
|
|
70
|
+
borderRadius: CSSObject['borderRadius'];
|
|
71
|
+
border: CSSObject['border'];
|
|
72
|
+
cursor: CSSObject['cursor'];
|
|
73
|
+
textColor: CSSObject['color'];
|
|
74
|
+
maxHeight: CSSObject['maxHeight'];
|
|
75
|
+
overflowY: CSSObject['overflowY'];
|
|
76
|
+
gap: CSSObject['gap'];
|
|
77
|
+
sortOption: {
|
|
78
|
+
padding: CSSObject['padding'];
|
|
79
|
+
borderRadius: CSSObject['borderRadius'];
|
|
80
|
+
hoverBackground: CSSObject['backgroundColor'];
|
|
81
|
+
iconColor: CSSObject['color'];
|
|
82
|
+
textColor: CSSObject['color'];
|
|
83
|
+
fontSize: CSSObject['fontSize'];
|
|
84
|
+
fontWeight: CSSObject['fontWeight'];
|
|
85
|
+
};
|
|
86
|
+
selectedBackground: CSSObject['backgroundColor'];
|
|
87
|
+
hoverBackground: CSSObject['backgroundColor'];
|
|
88
|
+
selectedTextColor: CSSObject['color'];
|
|
89
|
+
normalTextColor: CSSObject['color'];
|
|
90
|
+
selectedFontWeight: CSSObject['fontWeight'];
|
|
91
|
+
normalFontWeight: CSSObject['fontWeight'];
|
|
92
|
+
itemPadding: CSSObject['padding'];
|
|
93
|
+
itemGap: CSSObject['gap'];
|
|
94
|
+
itemBorderRadius: CSSObject['borderRadius'];
|
|
95
|
+
itemFontSize: CSSObject['fontSize'];
|
|
96
|
+
groupLabelFontSize: CSSObject['fontSize'];
|
|
97
|
+
groupLabelFontWeight: CSSObject['fontWeight'];
|
|
98
|
+
groupLabelColor: CSSObject['color'];
|
|
99
|
+
groupLabelPadding: CSSObject['padding'];
|
|
100
|
+
groupLabelTextTransform: CSSObject['textTransform'];
|
|
101
|
+
separatorHeight: CSSObject['height'];
|
|
102
|
+
separatorColor: CSSObject['backgroundColor'];
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
body: {
|
|
106
|
+
backgroundColor: CSSObject['backgroundColor'];
|
|
107
|
+
borderTop: CSSObject['borderTop'];
|
|
108
|
+
row: CSSObject;
|
|
109
|
+
cell: {
|
|
110
|
+
padding: CSSObject['padding'];
|
|
111
|
+
fontWeight: CSSObject['fontWeight'];
|
|
112
|
+
color: CSSObject['color'];
|
|
113
|
+
fontSize: CSSObject['fontSize'];
|
|
114
|
+
borderTop: CSSObject['borderTop'];
|
|
115
|
+
expandable: {
|
|
116
|
+
padding: CSSObject['padding'];
|
|
117
|
+
borderTop: CSSObject['borderTop'];
|
|
118
|
+
expandButton: {
|
|
119
|
+
display: CSSObject['display'];
|
|
120
|
+
alignItems: CSSObject['alignItems'];
|
|
121
|
+
justifyContent: CSSObject['justifyContent'];
|
|
122
|
+
width: CSSObject['width'];
|
|
123
|
+
height: CSSObject['height'];
|
|
124
|
+
borderRadius: CSSObject['borderRadius'];
|
|
125
|
+
backgroundColor: CSSObject['backgroundColor'];
|
|
126
|
+
cursor: CSSObject['cursor'];
|
|
127
|
+
transition: CSSObject['transition'];
|
|
128
|
+
color: CSSObject['color'];
|
|
129
|
+
border: CSSObject['border'];
|
|
130
|
+
'&:hover': CSSObject['&:hover'];
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
footer: {
|
|
136
|
+
display: CSSObject['display'];
|
|
137
|
+
justifyContent: CSSObject['justifyContent'];
|
|
138
|
+
alignItems: CSSObject['alignItems'];
|
|
139
|
+
padding: CSSObject['padding'];
|
|
140
|
+
borderTop: CSSObject['borderTop'];
|
|
141
|
+
height: CSSObject['height'];
|
|
142
|
+
position: CSSObject['position'];
|
|
143
|
+
bottom: CSSObject['bottom'];
|
|
144
|
+
backgroundColor: CSSObject['backgroundColor'];
|
|
145
|
+
zIndex: CSSObject['zIndex'];
|
|
146
|
+
flexShrink: CSSObject['flexShrink'];
|
|
147
|
+
pagination: {
|
|
148
|
+
pageText: {
|
|
149
|
+
fontSize: CSSObject['fontSize'];
|
|
150
|
+
color: CSSObject['color'];
|
|
151
|
+
};
|
|
152
|
+
pageSizeSelector: {
|
|
153
|
+
gap: CSSObject['gap'];
|
|
154
|
+
padding: CSSObject['padding'];
|
|
155
|
+
borderRadius: CSSObject['borderRadius'];
|
|
156
|
+
display: CSSObject['display'];
|
|
157
|
+
alignItems: CSSObject['alignItems'];
|
|
158
|
+
backgroundColor: CSSObject['backgroundColor'];
|
|
159
|
+
border: CSSObject['border'];
|
|
160
|
+
background: CSSObject['background'];
|
|
161
|
+
cursor: CSSObject['cursor'];
|
|
162
|
+
color: CSSObject['color'];
|
|
163
|
+
fontSize: CSSObject['fontSize'];
|
|
164
|
+
hoverColor: CSSObject['backgroundColor'];
|
|
165
|
+
};
|
|
166
|
+
pageNavigation: {
|
|
167
|
+
gap: CSSObject['gap'];
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
export declare const getTableToken: (foundationToken: FoundationTokenType) => TableTokenType;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { default as DataTable } from './DataTable';
|
|
2
|
+
export * from './types';
|
|
3
|
+
export * from './TableHeader/types';
|
|
4
|
+
export * from './TableBody/types';
|
|
5
|
+
export * from './TableCell/types';
|
|
6
|
+
export * from './TableFooter/types';
|
|
7
|
+
export * from './DataTableHeader/types';
|
|
8
|
+
export type { TableTokenType } from './dataTable.tokens';
|
|
9
|
+
export { validateColumnData, getColumnTypeConfig } from './columnTypes';
|
|
10
|
+
export type { ColumnFilterOption, SelectData, MultiSelectData, DateData, DateRangeData, TagData, ColumnDataTypeMap, GetColumnDataType, ColumnTypeConfig, AvatarData as DataTableAvatarData, } from './columnTypes';
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export declare enum SortDirection {
|
|
3
|
+
NONE = "none",
|
|
4
|
+
ASCENDING = "asc",
|
|
5
|
+
DESCENDING = "desc"
|
|
6
|
+
}
|
|
7
|
+
export declare enum FilterType {
|
|
8
|
+
TEXT = "text",
|
|
9
|
+
NUMBER = "number",
|
|
10
|
+
SELECT = "select",
|
|
11
|
+
MULTISELECT = "multiselect",
|
|
12
|
+
DATE = "date",
|
|
13
|
+
BOOLEAN = "boolean",
|
|
14
|
+
SLIDER = "slider"
|
|
15
|
+
}
|
|
16
|
+
export declare enum ColumnType {
|
|
17
|
+
TEXT = "text",
|
|
18
|
+
NUMBER = "number",
|
|
19
|
+
AVATAR = "avatar",
|
|
20
|
+
TAG = "tag",
|
|
21
|
+
PROGRESS = "progress",
|
|
22
|
+
DROPDOWN = "dropdown",
|
|
23
|
+
REACT_ELEMENT = "react_element",
|
|
24
|
+
SELECT = "select",
|
|
25
|
+
MULTISELECT = "multiselect",
|
|
26
|
+
DATE = "date",
|
|
27
|
+
DATE_RANGE = "date_range",
|
|
28
|
+
SLIDER = "slider",
|
|
29
|
+
CUSTOM = "custom"
|
|
30
|
+
}
|
|
31
|
+
export type AvatarColumnProps = {
|
|
32
|
+
src?: string;
|
|
33
|
+
alt?: string;
|
|
34
|
+
label: string;
|
|
35
|
+
sublabel?: string;
|
|
36
|
+
imageUrl?: string;
|
|
37
|
+
};
|
|
38
|
+
export type TagColumnProps = {
|
|
39
|
+
text: string;
|
|
40
|
+
variant?: 'filled' | 'subtle' | 'outlined' | 'no_fill';
|
|
41
|
+
color?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'neutral';
|
|
42
|
+
size?: 'sm' | 'md' | 'lg';
|
|
43
|
+
leftSlot?: ReactNode;
|
|
44
|
+
rightSlot?: ReactNode;
|
|
45
|
+
};
|
|
46
|
+
export type ProgressColumnProps = {
|
|
47
|
+
value: number;
|
|
48
|
+
max?: number;
|
|
49
|
+
label?: string;
|
|
50
|
+
showPercentage?: boolean;
|
|
51
|
+
color?: 'primary' | 'secondary' | 'success' | 'warning' | 'error';
|
|
52
|
+
};
|
|
53
|
+
export type DropdownColumnProps = {
|
|
54
|
+
options: Array<{
|
|
55
|
+
id: string;
|
|
56
|
+
label: string;
|
|
57
|
+
value: unknown;
|
|
58
|
+
icon?: React.ReactNode;
|
|
59
|
+
}>;
|
|
60
|
+
selectedValue?: unknown;
|
|
61
|
+
placeholder?: string;
|
|
62
|
+
onSelect?: (value: unknown) => void;
|
|
63
|
+
};
|
|
64
|
+
export type DateColumnProps = {
|
|
65
|
+
date: Date | string;
|
|
66
|
+
format?: string;
|
|
67
|
+
showTime?: boolean;
|
|
68
|
+
};
|
|
69
|
+
export type SliderColumnProps = {
|
|
70
|
+
min: number;
|
|
71
|
+
max: number;
|
|
72
|
+
step?: number;
|
|
73
|
+
valueType?: 'number' | 'percentage' | 'decimal';
|
|
74
|
+
decimalPlaces?: number;
|
|
75
|
+
prefix?: string;
|
|
76
|
+
suffix?: string;
|
|
77
|
+
};
|
|
78
|
+
export type FilterOption = {
|
|
79
|
+
id: string;
|
|
80
|
+
label: string;
|
|
81
|
+
value: string;
|
|
82
|
+
};
|
|
83
|
+
export type ColumnManagerProps<T extends Record<string, unknown>> = {
|
|
84
|
+
columns: ColumnDefinition<T>[];
|
|
85
|
+
visibleColumns: ColumnDefinition<T>[];
|
|
86
|
+
onColumnChange: (columns: ColumnDefinition<T>[]) => void;
|
|
87
|
+
};
|
|
88
|
+
export type AdvancedFilterProps = {
|
|
89
|
+
filters: unknown[];
|
|
90
|
+
onFiltersChange: (filters: unknown[]) => void;
|
|
91
|
+
onClearFilters: () => void;
|
|
92
|
+
};
|
|
93
|
+
export type BaseColumnDefinition<T> = {
|
|
94
|
+
field: keyof T;
|
|
95
|
+
header: string;
|
|
96
|
+
headerSubtext?: string;
|
|
97
|
+
minWidth?: string;
|
|
98
|
+
maxWidth?: string;
|
|
99
|
+
width?: string;
|
|
100
|
+
isVisible?: boolean;
|
|
101
|
+
isSortable?: boolean;
|
|
102
|
+
isEditable?: boolean;
|
|
103
|
+
filterOptions?: FilterOption[];
|
|
104
|
+
canHide?: boolean;
|
|
105
|
+
frozen?: boolean;
|
|
106
|
+
className?: string;
|
|
107
|
+
filterType?: FilterType;
|
|
108
|
+
};
|
|
109
|
+
export type ColumnDefinition<T> = (BaseColumnDefinition<T> & {
|
|
110
|
+
type: ColumnType.TEXT;
|
|
111
|
+
renderCell?: (value: string, row: T, index: number) => ReactNode;
|
|
112
|
+
}) | (BaseColumnDefinition<T> & {
|
|
113
|
+
type: ColumnType.NUMBER;
|
|
114
|
+
renderCell?: (value: number, row: T, index: number) => ReactNode;
|
|
115
|
+
format?: 'integer' | 'decimal' | 'currency' | 'percentage';
|
|
116
|
+
precision?: number;
|
|
117
|
+
}) | (BaseColumnDefinition<T> & {
|
|
118
|
+
type: ColumnType.AVATAR;
|
|
119
|
+
renderCell?: (value: AvatarColumnProps, row: T, index: number) => ReactNode;
|
|
120
|
+
}) | (BaseColumnDefinition<T> & {
|
|
121
|
+
type: ColumnType.TAG;
|
|
122
|
+
renderCell?: (value: TagColumnProps, row: T, index: number) => ReactNode;
|
|
123
|
+
}) | (BaseColumnDefinition<T> & {
|
|
124
|
+
type: ColumnType.PROGRESS;
|
|
125
|
+
renderCell?: (value: ProgressColumnProps, row: T, index: number) => ReactNode;
|
|
126
|
+
}) | (BaseColumnDefinition<T> & {
|
|
127
|
+
type: ColumnType.DROPDOWN;
|
|
128
|
+
renderCell?: (value: DropdownColumnProps, row: T, index: number) => ReactNode;
|
|
129
|
+
dropdownOptions?: Array<{
|
|
130
|
+
id: string;
|
|
131
|
+
label: string;
|
|
132
|
+
value: unknown;
|
|
133
|
+
}>;
|
|
134
|
+
}) | (BaseColumnDefinition<T> & {
|
|
135
|
+
type: ColumnType.DATE;
|
|
136
|
+
renderCell?: (value: DateColumnProps, row: T, index: number) => ReactNode;
|
|
137
|
+
dateFormat?: string;
|
|
138
|
+
showTime?: boolean;
|
|
139
|
+
}) | (BaseColumnDefinition<T> & {
|
|
140
|
+
type: ColumnType.SLIDER;
|
|
141
|
+
renderCell?: (value: number, row: T, index: number) => ReactNode;
|
|
142
|
+
sliderConfig: SliderColumnProps;
|
|
143
|
+
}) | (BaseColumnDefinition<T> & {
|
|
144
|
+
type: ColumnType.REACT_ELEMENT;
|
|
145
|
+
renderCell: (value: unknown, row: T, index: number) => ReactNode;
|
|
146
|
+
isSortable: false;
|
|
147
|
+
}) | (BaseColumnDefinition<T> & {
|
|
148
|
+
type: ColumnType.SELECT | ColumnType.MULTISELECT | ColumnType.DATE_RANGE | ColumnType.CUSTOM;
|
|
149
|
+
renderCell?: (value: unknown, row: T, index?: number) => ReactNode;
|
|
150
|
+
});
|
|
151
|
+
export type SortConfig = {
|
|
152
|
+
field: string;
|
|
153
|
+
direction: SortDirection;
|
|
154
|
+
};
|
|
155
|
+
export type SearchConfig = {
|
|
156
|
+
query: string;
|
|
157
|
+
caseSensitive?: boolean;
|
|
158
|
+
searchFields?: string[];
|
|
159
|
+
};
|
|
160
|
+
export type ColumnFilter = {
|
|
161
|
+
field: keyof Record<string, unknown>;
|
|
162
|
+
type: FilterType;
|
|
163
|
+
value: string | string[] | {
|
|
164
|
+
min: number;
|
|
165
|
+
max: number;
|
|
166
|
+
};
|
|
167
|
+
operator: 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'gt' | 'lt' | 'gte' | 'lte' | 'range';
|
|
168
|
+
};
|
|
169
|
+
export type PaginationConfig = {
|
|
170
|
+
currentPage: number;
|
|
171
|
+
pageSize: number;
|
|
172
|
+
totalRows: number;
|
|
173
|
+
pageSizeOptions?: number[];
|
|
174
|
+
};
|
|
175
|
+
export type BulkAction = {
|
|
176
|
+
id: string;
|
|
177
|
+
label: string;
|
|
178
|
+
icon?: ReactNode;
|
|
179
|
+
variant?: 'primary' | 'secondary' | 'danger';
|
|
180
|
+
onClick: (selectedRowIds: string[]) => void;
|
|
181
|
+
};
|
|
182
|
+
export type DataTableProps<T extends Record<string, unknown>> = {
|
|
183
|
+
data: T[];
|
|
184
|
+
columns: ColumnDefinition<T>[];
|
|
185
|
+
idField: keyof T;
|
|
186
|
+
title?: string;
|
|
187
|
+
description?: string;
|
|
188
|
+
className?: string;
|
|
189
|
+
isHoverable?: boolean;
|
|
190
|
+
defaultSort?: SortConfig;
|
|
191
|
+
onSortChange?: (sortConfig: SortConfig) => void;
|
|
192
|
+
enableSearch?: boolean;
|
|
193
|
+
searchPlaceholder?: string;
|
|
194
|
+
serverSideSearch?: boolean;
|
|
195
|
+
onSearchChange?: (searchConfig: SearchConfig) => void;
|
|
196
|
+
enableFiltering?: boolean;
|
|
197
|
+
enableAdvancedFilter?: boolean;
|
|
198
|
+
advancedFilterComponent?: React.ComponentType<AdvancedFilterProps>;
|
|
199
|
+
advancedFilters?: unknown[];
|
|
200
|
+
serverSideFiltering?: boolean;
|
|
201
|
+
onFilterChange?: (filters: ColumnFilter[]) => void;
|
|
202
|
+
onAdvancedFiltersChange?: (filters: unknown[]) => void;
|
|
203
|
+
columnFreeze?: number;
|
|
204
|
+
enableColumnManager?: boolean;
|
|
205
|
+
pagination?: PaginationConfig;
|
|
206
|
+
serverSidePagination?: boolean;
|
|
207
|
+
onPageChange?: (page: number) => void;
|
|
208
|
+
onPageSizeChange?: (pageSize: number) => void;
|
|
209
|
+
isLoading?: boolean;
|
|
210
|
+
showToolbar?: boolean;
|
|
211
|
+
headerSlot1?: ReactNode;
|
|
212
|
+
headerSlot2?: ReactNode;
|
|
213
|
+
enableInlineEdit?: boolean;
|
|
214
|
+
onRowSave?: (rowId: unknown, updatedRow: T) => void;
|
|
215
|
+
onRowCancel?: (rowId: unknown) => void;
|
|
216
|
+
onRowClick?: (row: T, index: number) => void;
|
|
217
|
+
onFieldChange?: (rowId: unknown, fieldName: keyof T, value: unknown) => void;
|
|
218
|
+
enableRowExpansion?: boolean;
|
|
219
|
+
renderExpandedRow?: (expandedData: {
|
|
220
|
+
row: T;
|
|
221
|
+
index: number;
|
|
222
|
+
isExpanded: boolean;
|
|
223
|
+
toggleExpansion: () => void;
|
|
224
|
+
}) => ReactNode;
|
|
225
|
+
isRowExpandable?: (row: T, index: number) => boolean;
|
|
226
|
+
onRowExpansionChange?: (rowId: unknown, isExpanded: boolean, rowData: T) => void;
|
|
227
|
+
enableRowSelection?: boolean;
|
|
228
|
+
bulkActions?: BulkAction[];
|
|
229
|
+
getRowStyle?: (row: T, index: number) => React.CSSProperties;
|
|
230
|
+
};
|