react-kd-grid 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of react-kd-grid might be problematic. Click here for more details.

Files changed (42) hide show
  1. package/dist/index.esm.js +2 -10767
  2. package/dist/index.esm.js.map +1 -1
  3. package/dist/index.js +2 -10767
  4. package/dist/index.js.map +1 -1
  5. package/package.json +4 -4
  6. package/dist/workers/CustomGrid.d.ts +0 -3
  7. package/dist/workers/components/ColumnFilterSelector.d.ts +0 -18
  8. package/dist/workers/components/CustomSelect.d.ts +0 -14
  9. package/dist/workers/components/FooterAggregate.d.ts +0 -16
  10. package/dist/workers/components/GridHeader.d.ts +0 -33
  11. package/dist/workers/components/GridRows.d.ts +0 -49
  12. package/dist/workers/components/GroupBar.d.ts +0 -12
  13. package/dist/workers/components/GroupHeader.d.ts +0 -29
  14. package/dist/workers/components/NoDataMessage.d.ts +0 -7
  15. package/dist/workers/components/PaginationControls.d.ts +0 -15
  16. package/dist/workers/components/Popover.d.ts +0 -17
  17. package/dist/workers/components/RowContextMenu.d.ts +0 -22
  18. package/dist/workers/components/SearchToolbar.d.ts +0 -79
  19. package/dist/workers/components/filters/BooleanFilter.d.ts +0 -7
  20. package/dist/workers/components/filters/DateFilter.d.ts +0 -9
  21. package/dist/workers/components/filters/FilterContent.d.ts +0 -9
  22. package/dist/workers/components/filters/FilterPopup.d.ts +0 -2
  23. package/dist/workers/components/filters/MultiselectFilter.d.ts +0 -10
  24. package/dist/workers/components/filters/NumberFilter.d.ts +0 -9
  25. package/dist/workers/components/filters/TextFilter.d.ts +0 -8
  26. package/dist/workers/components/filters/index.d.ts +0 -6
  27. package/dist/workers/components/ui/DatePicker.d.ts +0 -10
  28. package/dist/workers/constants.d.ts +0 -1
  29. package/dist/workers/dataWorker.js +0 -2
  30. package/dist/workers/dataWorker.js.map +0 -1
  31. package/dist/workers/hooks/useAdvancedFiltering.d.ts +0 -16
  32. package/dist/workers/hooks/useDataWorker.d.ts +0 -10
  33. package/dist/workers/hooks/useExport.d.ts +0 -15
  34. package/dist/workers/hooks/useFilteringAndSorting.d.ts +0 -16
  35. package/dist/workers/hooks/useGrouping.d.ts +0 -28
  36. package/dist/workers/hooks/usePagination.d.ts +0 -28
  37. package/dist/workers/hooks/useSelection.d.ts +0 -13
  38. package/dist/workers/hooks/useVirtualization.d.ts +0 -17
  39. package/dist/workers/index.d.ts +0 -11
  40. package/dist/workers/types.d.ts +0 -421
  41. package/dist/workers/utils/highlightText.d.ts +0 -15
  42. package/dist/workers/workers/dataWorker.d.ts +0 -16
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-kd-grid",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "A feature-rich, performant React data grid component with virtualization, grouping, filtering, and export capabilities",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -14,6 +14,7 @@
14
14
  },
15
15
  "./package.json": "./package.json"
16
16
  },
17
+ "sideEffects": false,
17
18
  "files": [
18
19
  "dist",
19
20
  "README.md"
@@ -57,7 +58,6 @@
57
58
  "react-dom": ">=16.8.0"
58
59
  },
59
60
  "devDependencies": {
60
- "@floating-ui/react": "^0.27.18",
61
61
  "@rollup/plugin-commonjs": "^28.0.0",
62
62
  "@rollup/plugin-node-resolve": "^15.2.0",
63
63
  "@rollup/plugin-terser": "^0.4.4",
@@ -68,11 +68,9 @@
68
68
  "@types/file-saver": "^2.0.7",
69
69
  "@typescript-eslint/eslint-plugin": "^6.0.0",
70
70
  "@typescript-eslint/parser": "^6.0.0",
71
- "date-fns": "^3.6.0",
72
71
  "eslint": "^8.0.0",
73
72
  "eslint-plugin-react": "^7.32.0",
74
73
  "eslint-plugin-react-hooks": "^4.6.0",
75
- "lucide-react": "^0.454.0",
76
74
  "prettier": "^3.0.0",
77
75
  "rollup": "^3.0.0",
78
76
  "tslib": "^2.6.0",
@@ -80,6 +78,8 @@
80
78
  "vitest": "^1.0.0"
81
79
  },
82
80
  "dependencies": {
81
+ "@floating-ui/react": "^0.27.18",
82
+ "date-fns": "^3.6.0",
83
83
  "exceljs": "^4.3.0",
84
84
  "file-saver": "^2.0.5",
85
85
  "lucide-react": "^0.454.0"
@@ -1,3 +0,0 @@
1
- import { CustomDataGridProps, CustomDataGridRef } from "./types";
2
- export declare const CustomDataGrid: import("react").ForwardRefExoticComponent<CustomDataGridProps & import("react").RefAttributes<CustomDataGridRef>>;
3
- export default CustomDataGrid;
@@ -1,18 +0,0 @@
1
- interface ColumnFilterSelectorProps {
2
- columns: Array<{
3
- key: string;
4
- header: string;
5
- filterable?: {
6
- type?: string;
7
- options?: Array<{
8
- label: string;
9
- value: string | number;
10
- }>;
11
- placeholder?: string;
12
- };
13
- }>;
14
- columnFilters: Record<string, any>;
15
- onColumnFilter?: (columnKey: string, filter: any) => void;
16
- }
17
- export declare const ColumnFilterSelector: ({ columns, columnFilters, onColumnFilter, }: ColumnFilterSelectorProps) => import("react/jsx-runtime").JSX.Element;
18
- export {};
@@ -1,14 +0,0 @@
1
- interface Option {
2
- label: string;
3
- value: string;
4
- }
5
- interface CustomSelectProps {
6
- options: Option[];
7
- value?: string;
8
- placeholder?: string;
9
- onChange: (value: string) => void;
10
- searchable?: boolean;
11
- className?: string;
12
- }
13
- export declare const CustomSelect: ({ options, value, placeholder, onChange, searchable, className, }: CustomSelectProps) => import("react/jsx-runtime").JSX.Element;
14
- export {};
@@ -1,16 +0,0 @@
1
- import React from "react";
2
- import { GridColumn, GridRow } from "../types";
3
- interface FooterAggregateProps {
4
- columns: (GridColumn & {
5
- width: number;
6
- })[];
7
- data: GridRow[];
8
- selectable: boolean;
9
- /** Resolved row height so footer matches density */
10
- rowHeight: number;
11
- /** Pinned columns (same semantics as grid body) */
12
- pinnedColumns?: Set<string>;
13
- getRowId?: (row: GridRow) => string | number;
14
- }
15
- export declare const FooterAggregate: React.NamedExoticComponent<FooterAggregateProps>;
16
- export {};
@@ -1,33 +0,0 @@
1
- import { GridColumn, SortConfig, ActiveFilters, ColumnFilterValue, GridRow } from "../types";
2
- interface GridHeaderProps {
3
- pinnedColumns: GridColumn[];
4
- unpinnedColumns: GridColumn[];
5
- hvPadLeft?: number;
6
- hvPadRight?: number;
7
- headerHeight: number;
8
- sortConfig: SortConfig;
9
- columnFilters: ActiveFilters;
10
- selectable: boolean;
11
- selectedRows: Set<string | number>;
12
- totalRows: number;
13
- data: GridRow[];
14
- onSort: (key: string) => void;
15
- onColumnFilter: (key: string, filter: ColumnFilterValue | null) => void;
16
- onSelectAll: () => void;
17
- onColumnResize?: (columnKey: string, width: number) => void;
18
- pinnedKeySet?: Set<string>;
19
- onColumnPin?: (columnKey: string, pinned: boolean) => void;
20
- groupable?: boolean;
21
- groupedByColumn?: string | null;
22
- onGroupBy?: (columnKey: string | null) => void;
23
- groupedByColumns?: string[];
24
- onGroupToggle?: (columnKey: string, nextGrouped: boolean) => void;
25
- onAutosizeColumn?: (columnKey: string) => void;
26
- onAutosizeAllColumns?: () => void;
27
- onResetColumns?: () => void;
28
- columnOrder: string[];
29
- onColumnOrderChange: (order: string[]) => void;
30
- paginationMode?: "client" | "server" | null;
31
- }
32
- export declare const GridHeader: ({ pinnedColumns, unpinnedColumns, hvPadLeft, hvPadRight, headerHeight, sortConfig, columnFilters, selectable, selectedRows, totalRows, data, onSort, onColumnFilter, onSelectAll, onColumnResize, pinnedKeySet, onColumnPin, groupable, groupedByColumn, onGroupBy, groupedByColumns, onGroupToggle, onAutosizeColumn, onAutosizeAllColumns, onResetColumns, columnOrder, onColumnOrderChange, paginationMode, }: GridHeaderProps) => import("react/jsx-runtime").JSX.Element;
33
- export {};
@@ -1,49 +0,0 @@
1
- import { CSSProperties, MouseEvent } from "react";
2
- import { GridRow, GridColumn, VirtualizedRange } from "../types";
3
- interface GridRowsProps {
4
- data: GridRow[];
5
- columns: GridColumn[];
6
- selectedRows: Set<string | number>;
7
- virtualized: boolean;
8
- virtualizedRange: VirtualizedRange;
9
- rowHeight: number;
10
- selectable: boolean;
11
- isRowSelectable?: (row: GridRow) => boolean;
12
- onRowSelect: (rowId: string | number, isSelected: boolean) => void;
13
- pinnedColumns?: Set<string>;
14
- hvPadLeft?: number;
15
- hvPadRight?: number;
16
- rowStyle?: (row: GridRow) => CSSProperties | undefined;
17
- globalFilter?: string;
18
- onContextMenu?: (row: GridRow, event: MouseEvent) => void;
19
- onRowDoubleClick?: (row: GridRow, event: MouseEvent) => void;
20
- onRowClick?: (row: GridRow, event: MouseEvent) => void;
21
- onCellClick?: (args: {
22
- row: GridRow;
23
- column: GridColumn;
24
- value: any;
25
- event: MouseEvent;
26
- }) => void;
27
- isCellFocused?: (rowId: string | number, columnKey: string) => boolean;
28
- isCellSelected?: (rowId: string | number, columnKey: string) => boolean;
29
- onCellContextMenu?: (args: {
30
- row: GridRow;
31
- column: GridColumn;
32
- value: any;
33
- displayValue: string;
34
- event: MouseEvent;
35
- }) => void;
36
- onCellMouseDown?: (args: {
37
- row: GridRow;
38
- column: GridColumn;
39
- event: MouseEvent;
40
- }) => void;
41
- onCellMouseEnter?: (args: {
42
- row: GridRow;
43
- column: GridColumn;
44
- event: MouseEvent;
45
- }) => void;
46
- getRowId?: (row: GridRow) => string | number;
47
- }
48
- export declare const GridRows: import("react").MemoExoticComponent<({ data, columns, selectedRows, virtualized, virtualizedRange, rowHeight, selectable, isRowSelectable, onRowSelect, pinnedColumns, hvPadLeft, hvPadRight, rowStyle, globalFilter, onContextMenu, onRowDoubleClick, onRowClick, onCellClick, isCellFocused, isCellSelected, onCellContextMenu, onCellMouseDown, onCellMouseEnter, getRowId, }: GridRowsProps) => import("react/jsx-runtime").JSX.Element>;
49
- export {};
@@ -1,12 +0,0 @@
1
- import type { GridColumn } from "../types";
2
- interface GroupBarProps {
3
- columns: GridColumn[];
4
- groupedKeys: string[];
5
- onRemove: (columnKey: string) => void;
6
- onReorder: (newOrder: string[]) => void;
7
- onDropColumnKey: (columnKey: string) => void;
8
- onToggleExpandAll?: () => void;
9
- isAnyExpanded?: boolean;
10
- }
11
- export declare const GroupBar: ({ columns, groupedKeys, onRemove, onReorder, onDropColumnKey, onToggleExpandAll, isAnyExpanded, }: GroupBarProps) => import("react/jsx-runtime").JSX.Element;
12
- export {};
@@ -1,29 +0,0 @@
1
- import { GridRow, CustomDataGridProps } from "../types";
2
- interface GroupHeaderProps {
3
- row: GridRow & {
4
- _isGroupHeader?: boolean;
5
- _groupKey?: string;
6
- _groupCount?: number;
7
- };
8
- isExpanded: boolean;
9
- onToggle: (groupKey: string) => void;
10
- viewportWidth: number;
11
- selectable: boolean;
12
- rowHeight?: number;
13
- /**
14
- * Optional function to map a column key to its display label (header).
15
- * If not provided, the raw column key will be used as a fallback.
16
- */
17
- getHeaderLabel?: (columnKey: string) => string;
18
- /**
19
- * Optional function to map a column key and raw group value to a display label.
20
- * Useful to apply the column's formatter for group headers.
21
- */
22
- getValueLabel?: (columnKey: string, rawValue: any) => string;
23
- /**
24
- * Optional custom renderer for actions on grouped rows.
25
- */
26
- renderGroupActions?: CustomDataGridProps["renderGroupActions"];
27
- }
28
- export declare const GroupHeader: import("react").MemoExoticComponent<({ row, isExpanded, onToggle, viewportWidth, selectable, rowHeight, getHeaderLabel, getValueLabel, renderGroupActions, }: GroupHeaderProps) => import("react/jsx-runtime").JSX.Element>;
29
- export {};
@@ -1,7 +0,0 @@
1
- interface NoDataMessageProps {
2
- hasFilters?: boolean;
3
- hasData?: boolean;
4
- message?: string;
5
- }
6
- export declare const NoDataMessage: ({ hasFilters, hasData, message, }: NoDataMessageProps) => import("react/jsx-runtime").JSX.Element;
7
- export {};
@@ -1,15 +0,0 @@
1
- import { PaginationConfig } from "../types";
2
- interface PaginationControlsProps {
3
- paginationConfig: PaginationConfig;
4
- currentPage: number;
5
- isServerLoading: boolean;
6
- selectedRowsCount: number;
7
- totalDataLength: number;
8
- filteredDataLength?: number;
9
- paginationMode?: "client" | "server";
10
- onPageChange: (page: number, pageSize: number) => void;
11
- onPageSizeChange: (pageSize: number) => void;
12
- showNoDataMessage?: boolean;
13
- }
14
- export declare const PaginationControls: ({ paginationConfig, currentPage, isServerLoading, selectedRowsCount, totalDataLength, filteredDataLength, paginationMode, onPageChange, onPageSizeChange, }: PaginationControlsProps) => import("react/jsx-runtime").JSX.Element;
15
- export {};
@@ -1,17 +0,0 @@
1
- import React from "react";
2
- import { type Placement } from "@floating-ui/react";
3
- interface PopoverProps {
4
- open: boolean;
5
- anchorEl: HTMLElement | null;
6
- onClose: () => void;
7
- placement?: Placement;
8
- offset?: number;
9
- sameWidth?: boolean;
10
- maxHeight?: number | string;
11
- zIndex?: number;
12
- className?: string;
13
- children: React.ReactNode;
14
- shouldIgnoreClose?: (target: Node) => boolean;
15
- }
16
- export declare const Popover: React.FC<PopoverProps>;
17
- export default Popover;
@@ -1,22 +0,0 @@
1
- import { ReactNode } from "react";
2
- import { GridRow } from "../types";
3
- export interface ContextMenuItem {
4
- id: string;
5
- label: string;
6
- icon?: ReactNode;
7
- onClick: (row: GridRow) => void;
8
- disabled?: boolean;
9
- separator?: boolean;
10
- }
11
- interface RowContextMenuProps {
12
- row: GridRow;
13
- position: {
14
- x: number;
15
- y: number;
16
- };
17
- isVisible: boolean;
18
- onClose: () => void;
19
- menuItems?: ContextMenuItem[];
20
- }
21
- export declare const RowContextMenu: ({ row, position, isVisible, onClose, menuItems, }: RowContextMenuProps) => import("react/jsx-runtime").JSX.Element;
22
- export {};
@@ -1,79 +0,0 @@
1
- import { ReactNode, ChangeEvent } from "react";
2
- import type { Density } from "../types";
3
- export type ExportFormat = "csv" | "json" | "xlsx";
4
- export type BulkAction = "delete" | "archive" | "copy" | "edit" | "export";
5
- export interface BulkActionOption {
6
- id: BulkAction;
7
- label: string;
8
- icon: ReactNode;
9
- onClick: (selectedRows: Set<string | number>) => void;
10
- disabled?: boolean;
11
- destructive?: boolean;
12
- }
13
- interface ColumnVisibility {
14
- [columnKey: string]: boolean;
15
- }
16
- interface SavedFilter {
17
- id: string;
18
- name: string;
19
- globalFilter: string;
20
- columnFilters: Record<string, any>;
21
- }
22
- interface SearchToolbarProps {
23
- globalFilter: string;
24
- filteredDataLength: number;
25
- totalDataLength: number;
26
- paginationMode?: "client" | "server";
27
- totalRows?: number;
28
- selectedRowsCount?: number;
29
- selectedRows?: Set<string | number>;
30
- showExport?: boolean;
31
- showRefresh?: boolean;
32
- showColumnToggle?: boolean;
33
- showBulkActions?: boolean;
34
- showSavedFilters?: boolean;
35
- columns?: Array<{
36
- key: string;
37
- header: string;
38
- visible?: boolean;
39
- filterOptions?: Array<{
40
- label: string;
41
- value: string | number;
42
- }>;
43
- filterType?: "text" | "select" | "multiselect";
44
- filterable?: any;
45
- }>;
46
- columnVisibility?: ColumnVisibility;
47
- columnFilters?: Record<string, any>;
48
- savedFilters?: SavedFilter[];
49
- bulkActions?: BulkActionOption[];
50
- isLoading?: boolean;
51
- exportOptions?: {
52
- enabled: boolean;
53
- formats?: ExportFormat[];
54
- filename?: string;
55
- onExport?: (format: ExportFormat, exportSelected: boolean) => void;
56
- };
57
- onGlobalFilterChange: (e: ChangeEvent<HTMLInputElement>) => void;
58
- onClearFilters?: () => void;
59
- onRefresh?: () => void;
60
- onColumnVisibilityChange?: (columnKey: string, visible: boolean) => void;
61
- onColumnFilter?: (columnKey: string, filter: any) => void;
62
- onSaveFilter?: (filter: Omit<SavedFilter, "id">) => void;
63
- onLoadFilter?: (filter: SavedFilter) => void;
64
- onDeleteFilter?: (filterId: string) => void;
65
- onRowSelect?: (selectedRows: number[]) => void;
66
- onToggleFilters?: (show: boolean) => void;
67
- onResetColumns?: () => void;
68
- columnOrder?: string[];
69
- onColumnOrderChange?: (order: string[]) => void;
70
- pinnedColumns?: Set<string>;
71
- onScrollToColumn?: (columnKey: string) => void;
72
- density?: Density;
73
- onDensityChange?: (density: Density) => void;
74
- showDensityControl?: boolean;
75
- customLeftContent?: ReactNode;
76
- customRightContent?: ReactNode;
77
- }
78
- export declare const SearchToolbar: ({ globalFilter, filteredDataLength, selectedRowsCount, selectedRows, showExport, showColumnToggle, showBulkActions, columns, columnVisibility, columnFilters, bulkActions, exportOptions, onGlobalFilterChange, onClearFilters, onColumnVisibilityChange, onColumnFilter, onResetColumns, columnOrder, onColumnOrderChange, pinnedColumns, onScrollToColumn, density, onDensityChange, showDensityControl, customLeftContent, customRightContent, }: SearchToolbarProps) => import("react/jsx-runtime").JSX.Element;
79
- export {};
@@ -1,7 +0,0 @@
1
- import { ColumnFilterValue } from "../../types";
2
- interface BooleanFilterProps {
3
- value: ColumnFilterValue | null;
4
- onChange: (value: ColumnFilterValue | null) => void;
5
- }
6
- export declare const BooleanFilter: ({ value, onChange }: BooleanFilterProps) => import("react/jsx-runtime").JSX.Element;
7
- export {};
@@ -1,9 +0,0 @@
1
- import { ColumnFilterValue } from "../../types";
2
- interface DateFilterProps {
3
- value: ColumnFilterValue | null;
4
- onChange: (value: ColumnFilterValue | null) => void;
5
- min?: number;
6
- max?: number;
7
- }
8
- export declare const DateFilter: ({ value, onChange, min, max }: DateFilterProps) => import("react/jsx-runtime").JSX.Element;
9
- export {};
@@ -1,9 +0,0 @@
1
- import { ColumnFilterValue, GridColumn, GridRow } from "../../types";
2
- interface FilterContentProps {
3
- column: GridColumn;
4
- data: GridRow[];
5
- value: ColumnFilterValue | null;
6
- onChange: (val: ColumnFilterValue | null) => void;
7
- }
8
- export declare const FilterContent: ({ column, data, value, onChange }: FilterContentProps) => import("react/jsx-runtime").JSX.Element;
9
- export {};
@@ -1,2 +0,0 @@
1
- import { FilterPopupProps } from "../../types";
2
- export declare const FilterPopup: ({ column, data, currentFilter, onApplyFilter, onClose, position, autoApply, }: FilterPopupProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,10 +0,0 @@
1
- import { ColumnFilterValue, FilterOption, GridRow } from "../../types";
2
- interface MultiselectFilterProps {
3
- value: ColumnFilterValue | null;
4
- onChange: (value: ColumnFilterValue | null) => void;
5
- options?: FilterOption[];
6
- data: GridRow[];
7
- columnKey: string;
8
- }
9
- export declare const MultiselectFilter: ({ value, onChange, options, data, columnKey, }: MultiselectFilterProps) => import("react/jsx-runtime").JSX.Element;
10
- export {};
@@ -1,9 +0,0 @@
1
- import { ColumnFilterValue } from "../../types";
2
- interface NumberFilterProps {
3
- value: ColumnFilterValue | null;
4
- onChange: (value: ColumnFilterValue | null) => void;
5
- min?: number;
6
- max?: number;
7
- }
8
- export declare const NumberFilter: ({ value, onChange, min, max, }: NumberFilterProps) => import("react/jsx-runtime").JSX.Element;
9
- export {};
@@ -1,8 +0,0 @@
1
- import { ColumnFilterValue } from "../../types";
2
- interface TextFilterProps {
3
- value: ColumnFilterValue | null;
4
- onChange: (value: ColumnFilterValue | null) => void;
5
- placeholder?: string;
6
- }
7
- export declare const TextFilter: ({ value, onChange, placeholder, }: TextFilterProps) => import("react/jsx-runtime").JSX.Element;
8
- export {};
@@ -1,6 +0,0 @@
1
- export { TextFilter } from './TextFilter';
2
- export { NumberFilter } from './NumberFilter';
3
- export { DateFilter } from './DateFilter';
4
- export { MultiselectFilter } from './MultiselectFilter';
5
- export { BooleanFilter } from './BooleanFilter';
6
- export { FilterPopup } from './FilterPopup';
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- interface DatePickerProps {
3
- name?: string;
4
- label?: string;
5
- value: string | null;
6
- onChange: (value: string | null) => void;
7
- className?: string;
8
- }
9
- export declare const DatePicker: React.FC<DatePickerProps>;
10
- export {};
@@ -1 +0,0 @@
1
- export declare const SELECT_COL_WIDTH = 48;
@@ -1,2 +0,0 @@
1
- const t=self;t.onmessage=e=>{const r=e.data;if(r&&"process"===r.type)try{const{rows:e,sort:s}=r.payload,n=((t,e)=>{if(!t||0===t.length)return t;let r=t;if(e&&e.key){const{key:s,direction:n}=e,o="asc"===n?1:-1;r=[...t].sort((t,e)=>{const r=t?.[s],n=e?.[s];if(null==r&&null==n)return 0;if(null==r)return-1*o;if(null==n)return 1*o;if("number"==typeof r&&"number"==typeof n)return(r-n)*o;const l=String(r),a=String(n);return l.localeCompare(a)*o})}return r})(e,s??null),o={type:"result",payload:{rows:n}};t.postMessage(o)}catch(e){const s={type:"result",payload:{rows:r.payload.rows}};t.postMessage(s)}};
2
- //# sourceMappingURL=dataWorker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dataWorker.js","sources":["../../../workers/dataWorker.ts"],"sourcesContent":["// Web Worker for heavy data processing (sorting for now)\n// Message protocol\n// { type: 'process', payload: { rows: any[], sort?: { key: string; direction: 'asc' | 'desc' } } }\n// Response: { type: 'result', payload: { rows: any[] } }\n\nexport interface WorkerProcessMessage {\n type: \"process\";\n payload: {\n rows: any[];\n sort?: { key: string; direction: \"asc\" | \"desc\" } | null;\n };\n}\n\nexport interface WorkerResultMessage {\n type: \"result\";\n payload: { rows: any[] };\n}\n\nconst ctx: any = self as any;\n\nconst processData = (\n rows: any[],\n sort?: { key: string; direction: \"asc\" | \"desc\" } | null\n) => {\n if (!rows || rows.length === 0) return rows;\n let out = rows;\n if (sort && sort.key) {\n const { key, direction } = sort;\n const dir = direction === \"asc\" ? 1 : -1;\n out = [...rows].sort((a, b) => {\n const av = a?.[key];\n const bv = b?.[key];\n if (av == null && bv == null) return 0;\n if (av == null) return -1 * dir;\n if (bv == null) return 1 * dir;\n if (typeof av === \"number\" && typeof bv === \"number\")\n return (av - bv) * dir;\n const as = String(av);\n const bs = String(bv);\n return as.localeCompare(bs) * dir;\n });\n }\n return out;\n};\n\nctx.onmessage = (e: MessageEvent<WorkerProcessMessage>) => {\n const msg = e.data;\n if (!msg || msg.type !== \"process\") return;\n try {\n const { rows, sort } = msg.payload;\n const result = processData(rows, sort ?? null);\n const response: WorkerResultMessage = {\n type: \"result\",\n payload: { rows: result },\n };\n ctx.postMessage(response);\n } catch (err) {\n // In case of unexpected errors, return original rows to avoid blocking UI\n const response: WorkerResultMessage = {\n type: \"result\",\n payload: { rows: msg.payload.rows },\n };\n ctx.postMessage(response);\n }\n};\n"],"names":["ctx","self","onmessage","e","msg","data","type","rows","sort","payload","result","length","out","key","direction","dir","a","b","av","bv","as","String","bs","localeCompare","processData","response","postMessage","err"],"mappings":"AAkBA,MAAMA,EAAWC,KA2BjBD,EAAIE,UAAaC,IACf,MAAMC,EAAMD,EAAEE,KACd,GAAKD,GAAoB,YAAbA,EAAIE,KAChB,IACE,MAAMC,KAAEA,EAAIC,KAAEA,GAASJ,EAAIK,QACrBC,EA9BU,EAClBH,EACAC,KAEA,IAAKD,GAAwB,IAAhBA,EAAKI,OAAc,OAAOJ,EACvC,IAAIK,EAAML,EACV,GAAIC,GAAQA,EAAKK,IAAK,CACpB,MAAMA,IAAEA,EAAGC,UAAEA,GAAcN,EACrBO,EAAoB,QAAdD,EAAsB,GAAK,EACvCF,EAAM,IAAIL,GAAMC,KAAK,CAACQ,EAAGC,KACvB,MAAMC,EAAKF,IAAIH,GACTM,EAAKF,IAAIJ,GACf,GAAU,MAANK,GAAoB,MAANC,EAAY,OAAO,EACrC,GAAU,MAAND,EAAY,OAAQ,EAAIH,EAC5B,GAAU,MAANI,EAAY,OAAO,EAAIJ,EAC3B,GAAkB,iBAAPG,GAAiC,iBAAPC,EACnC,OAAQD,EAAKC,GAAMJ,EACrB,MAAMK,EAAKC,OAAOH,GACZI,EAAKD,OAAOF,GAClB,OAAOC,EAAGG,cAAcD,GAAMP,GAEjC,CACD,OAAOH,GAQUY,CAAYjB,EAAMC,GAAQ,MACnCiB,EAAgC,CACpCnB,KAAM,SACNG,QAAS,CAAEF,KAAMG,IAEnBV,EAAI0B,YAAYD,EACjB,CAAC,MAAOE,GAEP,MAAMF,EAAgC,CACpCnB,KAAM,SACNG,QAAS,CAAEF,KAAMH,EAAIK,QAAQF,OAE/BP,EAAI0B,YAAYD,EACjB"}
@@ -1,16 +0,0 @@
1
- import { GridRow, GridColumn, ActiveFilters, ColumnFilterValue } from "../types";
2
- interface UseAdvancedFilteringProps {
3
- data: GridRow[];
4
- columns: GridColumn[];
5
- }
6
- export declare const useAdvancedFiltering: ({ data, columns, }: UseAdvancedFilteringProps) => {
7
- globalFilter: string;
8
- setGlobalFilter: import("react").Dispatch<import("react").SetStateAction<string>>;
9
- columnFilters: ActiveFilters;
10
- filteredData: GridRow[];
11
- setColumnFilter: (columnKey: string, filter: ColumnFilterValue | null) => void;
12
- clearColumnFilter: (columnKey: string) => void;
13
- clearAllFilters: () => void;
14
- getActiveFilterCount: () => number;
15
- };
16
- export {};
@@ -1,10 +0,0 @@
1
- type SortCfg = {
2
- key: string;
3
- direction: "asc" | "desc";
4
- } | null;
5
- export declare function useDataWorker(options?: {
6
- enabled?: boolean;
7
- }): {
8
- process: (rows: any[], sort: SortCfg) => Promise<any[]>;
9
- };
10
- export {};
@@ -1,15 +0,0 @@
1
- import { GridRow, GridColumn } from "../types";
2
- export type ExportFormat = "csv" | "json" | "xlsx";
3
- interface UseExportProps {
4
- data: GridRow[];
5
- columns: GridColumn[];
6
- selectedRows?: Set<string | number>;
7
- filename?: string;
8
- columnVisibility?: Record<string, boolean>;
9
- }
10
- export declare const useExport: ({ data, columns, selectedRows, filename, columnVisibility, }: UseExportProps) => {
11
- exportData: (format: ExportFormat, exportSelected?: boolean) => void;
12
- canExportSelected: boolean;
13
- selectedCount: number;
14
- };
15
- export {};
@@ -1,16 +0,0 @@
1
- import { ChangeEvent } from "react";
2
- import { SortConfig, GridRow, GridColumn } from "../types";
3
- interface UseFilteringAndSortingProps {
4
- data: GridRow[];
5
- columns: GridColumn[];
6
- }
7
- export declare const useFilteringAndSorting: ({ data, columns, }: UseFilteringAndSortingProps) => {
8
- sortConfig: SortConfig;
9
- filters: Record<string, string>;
10
- globalFilter: string;
11
- filteredData: GridRow[];
12
- handleSort: (key: string) => void;
13
- handleFilter: (key: string, value: string) => void;
14
- handleGlobalFilterChange: (e: ChangeEvent<HTMLInputElement>) => void;
15
- };
16
- export {};
@@ -1,28 +0,0 @@
1
- import { GridRow, GroupConfig, GridColumn } from "../types";
2
- interface UseGroupingProps {
3
- data: GridRow[];
4
- columns: GridColumn[];
5
- }
6
- export declare const useGrouping: ({ data, columns }: UseGroupingProps) => {
7
- groupConfig: GroupConfig;
8
- displayData: (GridRow & {
9
- _isGroupHeader?: boolean;
10
- _groupKey?: string;
11
- _groupCount?: number;
12
- _groupLevel?: number;
13
- _groupColumnKey?: string;
14
- _groupValue?: string;
15
- _groupRows?: GridRow[];
16
- _isGroupFooter?: boolean;
17
- _groupAgg?: Record<string, any>;
18
- })[];
19
- handleGroupBy: (columnKey: string | null) => void;
20
- addGroupKey: (columnKey: string) => void;
21
- removeGroupKey: (columnKey: string) => void;
22
- setGroupKeys: (columnKeys: string[]) => void;
23
- toggleGroupExpansion: (groupPath: string) => void;
24
- expandAllGroups: () => void;
25
- collapseAllGroups: () => void;
26
- isGrouped: boolean;
27
- };
28
- export {};
@@ -1,28 +0,0 @@
1
- import { PaginationConfig, GridRow } from "../types";
2
- interface UsePaginationProps {
3
- data: GridRow[];
4
- pagination?: {
5
- enabled?: boolean;
6
- mode?: "client" | "server";
7
- pageSize?: number;
8
- showPageSizeSelector?: boolean;
9
- pageSizeOptions?: number[];
10
- serverConfig?: {
11
- enabled: boolean;
12
- onPageChange: (page: number, pageSize: number) => Promise<void> | void;
13
- onPageSizeChange?: (pageSize: number) => Promise<void> | void;
14
- loading?: boolean;
15
- totalRows: number;
16
- };
17
- };
18
- }
19
- export declare const usePagination: ({ data, pagination }: UsePaginationProps) => {
20
- currentPage: number;
21
- resetPage: () => void;
22
- paginationConfig: PaginationConfig;
23
- paginatedData: GridRow[];
24
- isServerLoading: boolean;
25
- handlePageChange: (page: number) => Promise<void>;
26
- handlePageSizeChange: (newPageSize: number) => Promise<void>;
27
- };
28
- export {};
@@ -1,13 +0,0 @@
1
- import { GridRow } from "../types";
2
- interface UseSelectionProps {
3
- data: GridRow[];
4
- selectedRowIds?: Iterable<string | number> | null;
5
- onRowSelect?: (row: GridRow) => void;
6
- getRowId?: (row: GridRow) => string | number;
7
- }
8
- export declare const useSelection: ({ data, selectedRowIds, onRowSelect, getRowId, }: UseSelectionProps) => {
9
- selectedRows: Set<string | number>;
10
- handleRowSelect: (rowId: string | number, isSelected: boolean) => void;
11
- handleSelectAll: (isSelected: boolean) => void;
12
- };
13
- export {};
@@ -1,17 +0,0 @@
1
- import { UIEvent } from "react";
2
- import { VirtualizedRange, GridRow } from "../types";
3
- interface UseVirtualizationProps {
4
- data: GridRow[];
5
- virtualized?: boolean;
6
- rowHeight?: number;
7
- overscan?: number;
8
- height: number;
9
- }
10
- export declare const useVirtualization: ({ data, virtualized, rowHeight, overscan, height, }: UseVirtualizationProps) => {
11
- scrollRef: import("react").MutableRefObject<HTMLDivElement>;
12
- virtualizedRange: VirtualizedRange;
13
- visibleData: GridRow[];
14
- totalHeight: number;
15
- handleScroll: (e: UIEvent<HTMLDivElement>) => void;
16
- };
17
- export {};
@@ -1,11 +0,0 @@
1
- export { default as CustomDataGrid } from "./CustomGrid";
2
- export * from "./types";
3
- export { usePagination } from "./hooks/usePagination";
4
- export { useVirtualization } from "./hooks/useVirtualization";
5
- export { useFilteringAndSorting } from "./hooks/useFilteringAndSorting";
6
- export { useSelection } from "./hooks/useSelection";
7
- export { PaginationControls } from "./components/PaginationControls";
8
- export { GridHeader } from "./components/GridHeader";
9
- export { GridRows } from "./components/GridRows";
10
- export { SearchToolbar } from "./components/SearchToolbar";
11
- export { FooterAggregate } from "./components/FooterAggregate";