@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.
Files changed (256) hide show
  1. package/README.md +177 -0
  2. package/dist/assets/main.css +1 -0
  3. package/dist/breakpoints/breakPoints.d.ts +5 -0
  4. package/dist/components/Accordion/Accordion.d.ts +4 -0
  5. package/dist/components/Accordion/AccordionItem.d.ts +6 -0
  6. package/dist/components/Accordion/accordion.tokens.d.ts +49 -0
  7. package/dist/components/Accordion/index.d.ts +3 -0
  8. package/dist/components/Accordion/types.d.ts +29 -0
  9. package/dist/components/Alert/Alert.d.ts +4 -0
  10. package/dist/components/Alert/alert.tokens.d.ts +25 -0
  11. package/dist/components/Alert/index.d.ts +2 -0
  12. package/dist/components/Alert/types.d.ts +33 -0
  13. package/dist/components/Avatar/Avatar.d.ts +12 -0
  14. package/dist/components/Avatar/StyledAvatar.d.ts +8 -0
  15. package/dist/components/Avatar/avatarUtils.d.ts +7 -0
  16. package/dist/components/Avatar/index.d.ts +2 -0
  17. package/dist/components/Avatar/token.d.ts +71 -0
  18. package/dist/components/Avatar/types.d.ts +29 -0
  19. package/dist/components/AvatarGroup/AvatarGroup.d.ts +11 -0
  20. package/dist/components/AvatarGroup/StyledAvatarGroup.d.ts +6 -0
  21. package/dist/components/AvatarGroup/avatarGroupUtils.d.ts +24 -0
  22. package/dist/components/AvatarGroup/index.d.ts +2 -0
  23. package/dist/components/AvatarGroup/token.d.ts +89 -0
  24. package/dist/components/AvatarGroup/types.d.ts +29 -0
  25. package/dist/components/Breadcrumb/Breadcrumb.d.ts +8 -0
  26. package/dist/components/Breadcrumb/breadcrumb.tokens.d.ts +31 -0
  27. package/dist/components/Breadcrumb/index.d.ts +2 -0
  28. package/dist/components/Breadcrumb/types.d.ts +6 -0
  29. package/dist/components/Button/Button.d.ts +18 -0
  30. package/dist/components/Button/button.tokens.d.ts +61 -0
  31. package/dist/components/Button/index.d.ts +2 -0
  32. package/dist/components/Button/types.d.ts +34 -0
  33. package/dist/components/ButtonGroup/ButtonGroup.d.ts +4 -0
  34. package/dist/components/ButtonGroup/index.d.ts +2 -0
  35. package/dist/components/ButtonGroup/types.d.ts +6 -0
  36. package/dist/components/Charts/ChartHeader.d.ts +2 -0
  37. package/dist/components/Charts/ChartLegend.d.ts +3 -0
  38. package/dist/components/Charts/ChartUtils.d.ts +5 -0
  39. package/dist/components/Charts/Charts.d.ts +3 -0
  40. package/dist/components/Charts/CustomTooltip.d.ts +2 -0
  41. package/dist/components/Charts/index.d.ts +2 -0
  42. package/dist/components/Charts/renderChart.d.ts +2 -0
  43. package/dist/components/Charts/types.d.ts +83 -0
  44. package/dist/components/Charts/utils.d.ts +1 -0
  45. package/dist/components/Checkbox/Checkbox.d.ts +3 -0
  46. package/dist/components/Checkbox/StyledCheckbox.d.ts +11 -0
  47. package/dist/components/Checkbox/checkbox.token.d.ts +96 -0
  48. package/dist/components/Checkbox/checkboxUtils.d.ts +68 -0
  49. package/dist/components/Checkbox/index.d.ts +2 -0
  50. package/dist/components/Checkbox/types.d.ts +21 -0
  51. package/dist/components/DataTable/ColumnFilter/index.d.ts +9 -0
  52. package/dist/components/DataTable/ColumnManager.d.ts +5 -0
  53. package/dist/components/DataTable/DataTable.d.ts +3 -0
  54. package/dist/components/DataTable/DataTable.stories.d.ts +16 -0
  55. package/dist/components/DataTable/DataTableHeader/index.d.ts +3 -0
  56. package/dist/components/DataTable/DataTableHeader/types.d.ts +20 -0
  57. package/dist/components/DataTable/DataTablePagination.d.ts +11 -0
  58. package/dist/components/DataTable/TableBody/BulkActionBar.d.ts +8 -0
  59. package/dist/components/DataTable/TableBody/index.d.ts +4 -0
  60. package/dist/components/DataTable/TableBody/types.d.ts +32 -0
  61. package/dist/components/DataTable/TableCell/index.d.ts +3 -0
  62. package/dist/components/DataTable/TableCell/types.d.ts +12 -0
  63. package/dist/components/DataTable/TableFooter/index.d.ts +3 -0
  64. package/dist/components/DataTable/TableFooter/types.d.ts +10 -0
  65. package/dist/components/DataTable/TableHeader/FilterComponents.d.ts +59 -0
  66. package/dist/components/DataTable/TableHeader/handlers.d.ts +28 -0
  67. package/dist/components/DataTable/TableHeader/index.d.ts +3 -0
  68. package/dist/components/DataTable/TableHeader/types.d.ts +21 -0
  69. package/dist/components/DataTable/TableHeader/utils.d.ts +29 -0
  70. package/dist/components/DataTable/columnTypes.d.ts +87 -0
  71. package/dist/components/DataTable/dataTable.tokens.d.ts +174 -0
  72. package/dist/components/DataTable/index.d.ts +10 -0
  73. package/dist/components/DataTable/types.d.ts +230 -0
  74. package/dist/components/DataTable/utils.d.ts +52 -0
  75. package/dist/components/DateRangePicker/CalendarGrid.d.ts +11 -0
  76. package/dist/components/DateRangePicker/DateRangePicker.d.ts +4 -0
  77. package/dist/components/DateRangePicker/QuickRangeSelector.d.ts +13 -0
  78. package/dist/components/DateRangePicker/TimeSelector.d.ts +7 -0
  79. package/dist/components/DateRangePicker/dateRangePicker.tokens.d.ts +188 -0
  80. package/dist/components/DateRangePicker/index.d.ts +2 -0
  81. package/dist/components/DateRangePicker/types.d.ts +38 -0
  82. package/dist/components/DateRangePicker/utils.d.ts +470 -0
  83. package/dist/components/Directory/Directory.d.ts +6 -0
  84. package/dist/components/Directory/NavItem.d.ts +7 -0
  85. package/dist/components/Directory/Section.d.ts +3 -0
  86. package/dist/components/Directory/index.d.ts +2 -0
  87. package/dist/components/Directory/types.d.ts +29 -0
  88. package/dist/components/Directory/utils.d.ts +9 -0
  89. package/dist/components/Drawer/Drawer.d.ts +6 -0
  90. package/dist/components/Drawer/components/DrawerBase.d.ts +30 -0
  91. package/dist/components/Drawer/components/NestedSelectDrawer.d.ts +72 -0
  92. package/dist/components/Drawer/components/SelectDrawer.d.ts +9 -0
  93. package/dist/components/Drawer/components/StatusDrawer.d.ts +5 -0
  94. package/dist/components/Drawer/drawer.tokens.d.ts +60 -0
  95. package/dist/components/Drawer/index.d.ts +3 -0
  96. package/dist/components/Drawer/types.d.ts +384 -0
  97. package/dist/components/Dropdown/Dropdown.d.ts +9 -0
  98. package/dist/components/GradientBlur/GradientBlur.d.ts +2 -0
  99. package/dist/components/Inputs/DropdownInput/DropdownInput.d.ts +3 -0
  100. package/dist/components/Inputs/DropdownInput/dropdownInput.tokens.d.ts +33 -0
  101. package/dist/components/Inputs/DropdownInput/index.d.ts +2 -0
  102. package/dist/components/Inputs/DropdownInput/types.d.ts +31 -0
  103. package/dist/components/Inputs/MultiValueInput/MultiValueInput.d.ts +3 -0
  104. package/dist/components/Inputs/MultiValueInput/index.d.ts +2 -0
  105. package/dist/components/Inputs/MultiValueInput/multiValueInput.tokens.d.ts +33 -0
  106. package/dist/components/Inputs/MultiValueInput/types.d.ts +25 -0
  107. package/dist/components/Inputs/NumberInput/NumberInput.d.ts +3 -0
  108. package/dist/components/Inputs/NumberInput/index.d.ts +2 -0
  109. package/dist/components/Inputs/NumberInput/numberInput.tokens.d.ts +44 -0
  110. package/dist/components/Inputs/NumberInput/types.d.ts +16 -0
  111. package/dist/components/Inputs/OTPInput/OTPInput.d.ts +3 -0
  112. package/dist/components/Inputs/OTPInput/index.d.ts +2 -0
  113. package/dist/components/Inputs/OTPInput/otpInput.tokens.d.ts +34 -0
  114. package/dist/components/Inputs/OTPInput/types.d.ts +11 -0
  115. package/dist/components/Inputs/SearchInput/SearchInput.d.ts +3 -0
  116. package/dist/components/Inputs/SearchInput/index.d.ts +2 -0
  117. package/dist/components/Inputs/SearchInput/searchInput.tokens.d.ts +41 -0
  118. package/dist/components/Inputs/SearchInput/types.d.ts +7 -0
  119. package/dist/components/Inputs/TextArea/TextArea.d.ts +3 -0
  120. package/dist/components/Inputs/TextArea/index.d.ts +2 -0
  121. package/dist/components/Inputs/TextArea/textarea.token.d.ts +27 -0
  122. package/dist/components/Inputs/TextArea/types.d.ts +22 -0
  123. package/dist/components/Inputs/TextInput/TextInput.d.ts +3 -0
  124. package/dist/components/Inputs/TextInput/index.d.ts +2 -0
  125. package/dist/components/Inputs/TextInput/textInput.tokens.d.ts +33 -0
  126. package/dist/components/Inputs/TextInput/types.d.ts +24 -0
  127. package/dist/components/Inputs/UnitInput/UnitInput.d.ts +3 -0
  128. package/dist/components/Inputs/UnitInput/index.d.ts +2 -0
  129. package/dist/components/Inputs/UnitInput/types.d.ts +25 -0
  130. package/dist/components/Inputs/UnitInput/unitInput.tokens.d.ts +40 -0
  131. package/dist/components/Inputs/index.d.ts +8 -0
  132. package/dist/components/Inputs/utils/InputFooter/InputFooter.d.ts +8 -0
  133. package/dist/components/Inputs/utils/InputLabels/InputLabels.d.ts +18 -0
  134. package/dist/components/Menu/Menu.d.ts +8 -0
  135. package/dist/components/Menu/MenuGroupLabel.d.ts +3 -0
  136. package/dist/components/Menu/MenuItem.d.ts +9 -0
  137. package/dist/components/Menu/MenuPlayground.d.ts +3 -0
  138. package/dist/components/Menu/MenuPlaygroundComprehensive.d.ts +3 -0
  139. package/dist/components/Menu/SubMenu.d.ts +5 -0
  140. package/dist/components/Menu/index.d.ts +2 -0
  141. package/dist/components/Menu/menu.styles.d.ts +2 -0
  142. package/dist/components/Menu/menu.tokens.d.ts +100 -0
  143. package/dist/components/Menu/types.d.ts +55 -0
  144. package/dist/components/Menu/utils.d.ts +3 -0
  145. package/dist/components/Modal/Modal.d.ts +3 -0
  146. package/dist/components/Modal/index.d.ts +2 -0
  147. package/dist/components/Modal/modal.tokens.d.ts +48 -0
  148. package/dist/components/Modal/types.d.ts +22 -0
  149. package/dist/components/MultiSelect/MultiSelect.d.ts +3 -0
  150. package/dist/components/MultiSelect/MultiSelectMenu.d.ts +3 -0
  151. package/dist/components/MultiSelect/MultiSelectMenuItem.d.ts +10 -0
  152. package/dist/components/MultiSelect/MultiSelectSubMenu.d.ts +10 -0
  153. package/dist/components/MultiSelect/SelectAllItem.d.ts +8 -0
  154. package/dist/components/MultiSelect/index.d.ts +2 -0
  155. package/dist/components/MultiSelect/multiSelect.tokens.d.ts +77 -0
  156. package/dist/components/MultiSelect/types.d.ts +92 -0
  157. package/dist/components/MultiSelect/utils.d.ts +11 -0
  158. package/dist/components/Popover/Popover.d.ts +6 -0
  159. package/dist/components/Popover/PopoverFooter.d.ts +6 -0
  160. package/dist/components/Popover/PopoverHeader.d.ts +6 -0
  161. package/dist/components/Popover/index.d.ts +2 -0
  162. package/dist/components/Popover/popover.tokens.d.ts +40 -0
  163. package/dist/components/Popover/types.d.ts +31 -0
  164. package/dist/components/Primitives/Block/Block.d.ts +189 -0
  165. package/dist/components/Primitives/PrimitiveButton/PrimitiveButton.d.ts +131 -0
  166. package/dist/components/Primitives/PrimitiveInput/PrimitiveInput.d.ts +91 -0
  167. package/dist/components/Primitives/PrimitiveLink.d.ts +58 -0
  168. package/dist/components/Primitives/PrimitiveText/PrimitiveText.d.ts +39 -0
  169. package/dist/components/Primitives/PrimitiveTextArea.d.ts +88 -0
  170. package/dist/components/ProgressBar/ProgressBar.d.ts +4 -0
  171. package/dist/components/ProgressBar/index.d.ts +3 -0
  172. package/dist/components/ProgressBar/progressbar.tokens.d.ts +63 -0
  173. package/dist/components/ProgressBar/types.d.ts +22 -0
  174. package/dist/components/ProgressBar/utils.d.ts +7 -0
  175. package/dist/components/Radio/Radio.d.ts +6 -0
  176. package/dist/components/Radio/RadioGroup.d.ts +4 -0
  177. package/dist/components/Radio/StyledRadio.d.ts +7 -0
  178. package/dist/components/Radio/index.d.ts +4 -0
  179. package/dist/components/Radio/radio.token.d.ts +75 -0
  180. package/dist/components/Radio/types.d.ts +30 -0
  181. package/dist/components/Radio/utils.d.ts +47 -0
  182. package/dist/components/Select/Select.d.ts +25 -0
  183. package/dist/components/Select/SelectMenu.d.ts +3 -0
  184. package/dist/components/Select/index.d.ts +2 -0
  185. package/dist/components/Select/select.token.d.ts +40 -0
  186. package/dist/components/Select/types.d.ts +55 -0
  187. package/dist/components/Sidebar/Sidebar.d.ts +4 -0
  188. package/dist/components/Sidebar/index.d.ts +2 -0
  189. package/dist/components/Sidebar/types.d.ts +44 -0
  190. package/dist/components/SingleSelect/SingleSelect.d.ts +3 -0
  191. package/dist/components/SingleSelect/SingleSelectMenu.d.ts +21 -0
  192. package/dist/components/SingleSelect/index.d.ts +2 -0
  193. package/dist/components/SingleSelect/types.d.ts +26 -0
  194. package/dist/components/Slider/Slider.d.ts +5 -0
  195. package/dist/components/Slider/index.d.ts +3 -0
  196. package/dist/components/Slider/types.d.ts +30 -0
  197. package/dist/components/Slider/utils.d.ts +49 -0
  198. package/dist/components/Snackbar/Snackbar.d.ts +4 -0
  199. package/dist/components/Snackbar/index.d.ts +3 -0
  200. package/dist/components/Snackbar/snackbar.tokens.d.ts +52 -0
  201. package/dist/components/Snackbar/types.d.ts +26 -0
  202. package/dist/components/SplitTag/SplitTag.d.ts +6 -0
  203. package/dist/components/SplitTag/index.d.ts +2 -0
  204. package/dist/components/SplitTag/types.d.ts +16 -0
  205. package/dist/components/StatCard/StatCard.d.ts +6 -0
  206. package/dist/components/StatCard/index.d.ts +2 -0
  207. package/dist/components/StatCard/statcard.tokens.d.ts +145 -0
  208. package/dist/components/StatCard/types.d.ts +32 -0
  209. package/dist/components/Switch/StyledSwitch.d.ts +11 -0
  210. package/dist/components/Switch/Switch.d.ts +5 -0
  211. package/dist/components/Switch/SwitchGroup.d.ts +4 -0
  212. package/dist/components/Switch/index.d.ts +4 -0
  213. package/dist/components/Switch/switch.token.d.ts +112 -0
  214. package/dist/components/Switch/types.d.ts +30 -0
  215. package/dist/components/Switch/utils.d.ts +58 -0
  216. package/dist/components/Tabs/StyledTabs.d.ts +22 -0
  217. package/dist/components/Tabs/Tabs.d.ts +5 -0
  218. package/dist/components/Tabs/TabsContent.d.ts +2 -0
  219. package/dist/components/Tabs/TabsList.d.ts +8 -0
  220. package/dist/components/Tabs/TabsTrigger.d.ts +10 -0
  221. package/dist/components/Tabs/index.d.ts +6 -0
  222. package/dist/components/Tabs/tabs.token.d.ts +60 -0
  223. package/dist/components/Tabs/types.d.ts +34 -0
  224. package/dist/components/Tags/Tags.d.ts +3 -0
  225. package/dist/components/Tags/index.d.ts +2 -0
  226. package/dist/components/Tags/tag.tokens.d.ts +57 -0
  227. package/dist/components/Tags/types.d.ts +35 -0
  228. package/dist/components/Text/Text.d.ts +12 -0
  229. package/dist/components/Tooltip/Tooltip.d.ts +3 -0
  230. package/dist/components/Tooltip/index.d.ts +2 -0
  231. package/dist/components/Tooltip/tooltip.tokens.d.ts +31 -0
  232. package/dist/components/Tooltip/types.d.ts +33 -0
  233. package/dist/context/ThemeContext.d.ts +66 -0
  234. package/dist/context/ThemeProvider.d.ts +11 -0
  235. package/dist/context/index.d.ts +4 -0
  236. package/dist/context/initComponentTokens.d.ts +4 -0
  237. package/dist/context/useComponentToken.d.ts +29 -0
  238. package/dist/foundationToken.d.ts +214 -0
  239. package/dist/hooks/index.d.ts +2 -0
  240. package/dist/hooks/useBreakPoints.d.ts +4 -0
  241. package/dist/hooks/useClickOutside.d.ts +3 -0
  242. package/dist/hooks/useDebounce.d.ts +1 -0
  243. package/dist/hooks/useResizeObserver.d.ts +1 -0
  244. package/dist/hooks/useResponsiveTokens.d.ts +2 -0
  245. package/dist/hooks/useScrollLock.d.ts +2 -0
  246. package/dist/main.d.ts +34 -0
  247. package/dist/main.js +50499 -0
  248. package/dist/tokens/border.tokens.d.ts +29 -0
  249. package/dist/tokens/color.tokens.d.ts +16 -0
  250. package/dist/tokens/font.tokens.d.ts +72 -0
  251. package/dist/tokens/index.d.ts +2 -0
  252. package/dist/tokens/opacity.tokens.d.ts +18 -0
  253. package/dist/tokens/shadows.tokens.d.ts +15 -0
  254. package/dist/tokens/theme.token.d.ts +16 -0
  255. package/dist/tokens/unit.tokens.d.ts +34 -0
  256. 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,3 @@
1
+ import { TableFooterProps } from './types';
2
+ declare const TableFooter: import('react').ForwardRefExoticComponent<TableFooterProps & import('react').RefAttributes<HTMLDivElement>>;
3
+ export default TableFooter;
@@ -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,3 @@
1
+ import { TableHeaderProps } from './types';
2
+ declare const TableHeader: import('react').ForwardRefExoticComponent<TableHeaderProps<Record<string, unknown>> & import('react').RefAttributes<HTMLTableSectionElement>>;
3
+ export default TableHeader;
@@ -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
+ };