@alaarab/ogrid-react 2.0.23 → 2.1.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.
Files changed (66) hide show
  1. package/dist/esm/components/ColumnHeaderFilterContent.js +0 -2
  2. package/dist/esm/components/MarchingAntsOverlay.js +2 -3
  3. package/dist/esm/components/SideBar.js +8 -7
  4. package/dist/esm/components/createOGrid.js +1 -4
  5. package/dist/esm/hooks/index.js +10 -0
  6. package/dist/esm/hooks/useActiveCell.js +2 -4
  7. package/dist/esm/hooks/useCellSelection.js +85 -52
  8. package/dist/esm/hooks/useClipboard.js +15 -54
  9. package/dist/esm/hooks/useColumnChooserState.js +25 -13
  10. package/dist/esm/hooks/useColumnHeaderFilterState.js +22 -11
  11. package/dist/esm/hooks/useColumnHeaderMenuState.js +1 -1
  12. package/dist/esm/hooks/useColumnMeta.js +61 -0
  13. package/dist/esm/hooks/useColumnPinning.js +11 -12
  14. package/dist/esm/hooks/useColumnReorder.js +8 -1
  15. package/dist/esm/hooks/useColumnResize.js +6 -2
  16. package/dist/esm/hooks/useDataGridContextMenu.js +24 -0
  17. package/dist/esm/hooks/useDataGridEditing.js +56 -0
  18. package/dist/esm/hooks/useDataGridInteraction.js +109 -0
  19. package/dist/esm/hooks/useDataGridLayout.js +172 -0
  20. package/dist/esm/hooks/useDataGridState.js +83 -318
  21. package/dist/esm/hooks/useDataGridTableOrchestration.js +2 -4
  22. package/dist/esm/hooks/useFillHandle.js +60 -55
  23. package/dist/esm/hooks/useFilterOptions.js +2 -4
  24. package/dist/esm/hooks/useInlineCellEditorState.js +7 -13
  25. package/dist/esm/hooks/useKeyboardNavigation.js +19 -132
  26. package/dist/esm/hooks/useMultiSelectFilterState.js +1 -1
  27. package/dist/esm/hooks/useOGrid.js +159 -301
  28. package/dist/esm/hooks/useOGridDataFetching.js +74 -0
  29. package/dist/esm/hooks/useOGridFilters.js +59 -0
  30. package/dist/esm/hooks/useOGridPagination.js +24 -0
  31. package/dist/esm/hooks/useOGridSorting.js +24 -0
  32. package/dist/esm/hooks/usePaginationControls.js +2 -5
  33. package/dist/esm/hooks/usePeopleFilterState.js +6 -1
  34. package/dist/esm/hooks/useRichSelectState.js +7 -5
  35. package/dist/esm/hooks/useRowSelection.js +6 -26
  36. package/dist/esm/hooks/useSelectState.js +2 -5
  37. package/dist/esm/hooks/useShallowEqualMemo.js +14 -0
  38. package/dist/esm/hooks/useTableLayout.js +3 -11
  39. package/dist/esm/hooks/useUndoRedo.js +16 -10
  40. package/dist/esm/index.js +1 -1
  41. package/dist/esm/utils/index.js +1 -1
  42. package/dist/types/components/ColumnChooserProps.d.ts +2 -0
  43. package/dist/types/components/ColumnHeaderFilterContent.d.ts +0 -2
  44. package/dist/types/hooks/index.d.ts +19 -0
  45. package/dist/types/hooks/useClipboard.d.ts +0 -1
  46. package/dist/types/hooks/useColumnChooserState.d.ts +2 -0
  47. package/dist/types/hooks/useColumnHeaderFilterState.d.ts +0 -2
  48. package/dist/types/hooks/useColumnHeaderMenuState.d.ts +0 -2
  49. package/dist/types/hooks/useColumnMeta.d.ts +34 -0
  50. package/dist/types/hooks/useDataGridContextMenu.d.ts +20 -0
  51. package/dist/types/hooks/useDataGridEditing.d.ts +39 -0
  52. package/dist/types/hooks/useDataGridInteraction.d.ts +95 -0
  53. package/dist/types/hooks/useDataGridLayout.d.ts +45 -0
  54. package/dist/types/hooks/useDataGridState.d.ts +7 -1
  55. package/dist/types/hooks/useDataGridTableOrchestration.d.ts +1 -2
  56. package/dist/types/hooks/useOGrid.d.ts +4 -2
  57. package/dist/types/hooks/useOGridDataFetching.d.ts +29 -0
  58. package/dist/types/hooks/useOGridFilters.d.ts +24 -0
  59. package/dist/types/hooks/useOGridPagination.d.ts +18 -0
  60. package/dist/types/hooks/useOGridSorting.d.ts +23 -0
  61. package/dist/types/hooks/usePaginationControls.d.ts +1 -1
  62. package/dist/types/hooks/useRichSelectState.d.ts +2 -0
  63. package/dist/types/hooks/useShallowEqualMemo.d.ts +7 -0
  64. package/dist/types/index.d.ts +2 -2
  65. package/dist/types/utils/index.d.ts +2 -2
  66. package/package.json +12 -4
@@ -0,0 +1,39 @@
1
+ import type { RowId, IColumnDef } from '../types';
2
+ import type { DataGridEditingState } from './useDataGridState';
3
+ export interface UseDataGridEditingParams<T> {
4
+ editingCell: {
5
+ rowId: RowId;
6
+ columnId: string;
7
+ } | null;
8
+ setEditingCell: (cell: {
9
+ rowId: RowId;
10
+ columnId: string;
11
+ } | null) => void;
12
+ pendingEditorValue: unknown;
13
+ setPendingEditorValue: (value: unknown) => void;
14
+ visibleCols: IColumnDef<T>[];
15
+ itemsLength: number;
16
+ onCellValueChanged?: (event: {
17
+ item: T;
18
+ columnId: string;
19
+ oldValue: unknown;
20
+ newValue: unknown;
21
+ rowIndex: number;
22
+ }) => void;
23
+ setActiveCell: (cell: {
24
+ rowIndex: number;
25
+ columnIndex: number;
26
+ } | null) => void;
27
+ }
28
+ export interface UseDataGridEditingResult<T> {
29
+ editing: DataGridEditingState<T>;
30
+ }
31
+ /**
32
+ * Manages cell editing commit/cancel logic and popover editor state.
33
+ * Extracted from useDataGridState for modularity.
34
+ *
35
+ * The editingCell/setEditingCell/pendingEditorValue/setPendingEditorValue are
36
+ * passed in from useCellEditing() (called at the orchestrator level) to avoid
37
+ * circular dependencies with useDataGridInteraction.
38
+ */
39
+ export declare function useDataGridEditing<T>(params: UseDataGridEditingParams<T>): UseDataGridEditingResult<T>;
@@ -0,0 +1,95 @@
1
+ import type { RefObject } from 'react';
2
+ import type { RowId, IColumnDef } from '../types';
3
+ import type { DataGridCellInteractionState } from './useDataGridState';
4
+ export interface UseDataGridInteractionParams<T> {
5
+ items: T[];
6
+ visibleCols: IColumnDef<T>[];
7
+ colOffset: number;
8
+ hasCheckboxCol: boolean;
9
+ visibleColumnCount: number;
10
+ getRowId: (item: T) => RowId;
11
+ editable?: boolean;
12
+ onCellValueChangedProp?: (event: {
13
+ item: T;
14
+ columnId: string;
15
+ oldValue: unknown;
16
+ newValue: unknown;
17
+ rowIndex: number;
18
+ }) => void;
19
+ cellSelection: boolean;
20
+ rowSelection?: 'none' | 'single' | 'multiple';
21
+ selectedRowIds: Set<RowId>;
22
+ /** From useCellEditing (called at orchestrator level). */
23
+ editingCell: {
24
+ rowId: RowId;
25
+ columnId: string;
26
+ } | null;
27
+ /** From useCellEditing (called at orchestrator level). */
28
+ setEditingCell: (cell: {
29
+ rowId: RowId;
30
+ columnId: string;
31
+ } | null) => void;
32
+ /** From useActiveCell (called at orchestrator level). */
33
+ activeCell: {
34
+ rowIndex: number;
35
+ columnIndex: number;
36
+ } | null;
37
+ /** From useActiveCell (called at orchestrator level). */
38
+ setActiveCell: (cell: {
39
+ rowIndex: number;
40
+ columnIndex: number;
41
+ } | null) => void;
42
+ handleRowCheckboxChange: (rowId: RowId, checked: boolean, rowIndex: number, shiftKey: boolean) => void;
43
+ setContextMenuPosition: (pos: {
44
+ x: number;
45
+ y: number;
46
+ } | null) => void;
47
+ wrapperRef: RefObject<HTMLDivElement | null>;
48
+ }
49
+ export interface UseDataGridInteractionResult<T> {
50
+ interaction: DataGridCellInteractionState;
51
+ selectionRange: {
52
+ startRow: number;
53
+ startCol: number;
54
+ endRow: number;
55
+ endCol: number;
56
+ } | null;
57
+ setSelectionRange: (range: {
58
+ startRow: number;
59
+ startCol: number;
60
+ endRow: number;
61
+ endCol: number;
62
+ } | null) => void;
63
+ cutRange: {
64
+ startRow: number;
65
+ startCol: number;
66
+ endRow: number;
67
+ endCol: number;
68
+ } | null;
69
+ copyRange: {
70
+ startRow: number;
71
+ startCol: number;
72
+ endRow: number;
73
+ endCol: number;
74
+ } | null;
75
+ clearClipboardRanges: () => void;
76
+ isDragging: boolean;
77
+ /** The undo/redo wrapper around onCellValueChanged. Consumers need this for editing. */
78
+ onCellValueChanged: ((event: {
79
+ item: T;
80
+ columnId: string;
81
+ oldValue: unknown;
82
+ newValue: unknown;
83
+ rowIndex: number;
84
+ }) => void) | undefined;
85
+ canUndo: boolean;
86
+ canRedo: boolean;
87
+ }
88
+ /**
89
+ * Manages cell selection, keyboard navigation, clipboard, fill handle, and undo/redo.
90
+ * Extracted from useDataGridState for modularity.
91
+ *
92
+ * activeCell/setActiveCell and editingCell/setEditingCell are passed in from the
93
+ * orchestrator level to avoid circular dependencies with useDataGridEditing.
94
+ */
95
+ export declare function useDataGridInteraction<T>(params: UseDataGridInteractionParams<T>): UseDataGridInteractionResult<T>;
@@ -0,0 +1,45 @@
1
+ import type { RefObject } from 'react';
2
+ import type { RowId, IColumnDef } from '../types';
3
+ import type { DataGridLayoutState, DataGridPinningState } from './useDataGridState';
4
+ export interface UseDataGridLayoutParams<T> {
5
+ columns: unknown[];
6
+ items: T[];
7
+ getRowId: (item: T) => RowId;
8
+ visibleColumns?: Set<string>;
9
+ columnOrder?: string[];
10
+ rowSelection?: string;
11
+ showRowNumbers?: boolean;
12
+ initialColumnWidths?: Record<string, number>;
13
+ onColumnResized?: (columnId: string, width: number) => void;
14
+ onAutosizeColumn?: (columnId: string, width: number) => void;
15
+ pinnedColumns?: Record<string, 'left' | 'right'>;
16
+ onColumnPinned?: (columnId: string, side: 'left' | 'right' | null) => void;
17
+ sortBy?: string;
18
+ sortDirection?: 'asc' | 'desc';
19
+ onColumnSort?: (columnKey: string, direction?: 'asc' | 'desc' | null) => void;
20
+ wrapperRef: RefObject<HTMLDivElement | null>;
21
+ }
22
+ export interface UseDataGridLayoutResult<T> {
23
+ layout: DataGridLayoutState<T>;
24
+ pinning: DataGridPinningState;
25
+ flatColumns: IColumnDef<T>[];
26
+ visibleCols: IColumnDef<T>[];
27
+ visibleColumnCount: number;
28
+ totalColCount: number;
29
+ colOffset: number;
30
+ hasCheckboxCol: boolean;
31
+ hasRowNumbersCol: boolean;
32
+ columnSizingOverrides: Record<string, {
33
+ widthPx: number;
34
+ }>;
35
+ setColumnSizingOverrides: React.Dispatch<React.SetStateAction<Record<string, {
36
+ widthPx: number;
37
+ }>>>;
38
+ handleAutosizeColumn: (columnId: string, width: number) => void;
39
+ stableOnColumnSort: (columnKey: string, direction?: 'asc' | 'desc' | null) => void;
40
+ }
41
+ /**
42
+ * Manages column layout, visibility, sizing, pinning, and header menu state.
43
+ * Extracted from useDataGridState for modularity.
44
+ */
45
+ export declare function useDataGridLayout<T>(params: UseDataGridLayoutParams<T>): UseDataGridLayoutResult<T>;
@@ -98,7 +98,7 @@ export interface DataGridCellInteractionState {
98
98
  canRedo: boolean;
99
99
  onUndo?: () => void;
100
100
  onRedo?: () => void;
101
- /** True while user is drag-selecting cells (mousedown mouseup). */
101
+ /** True while user is drag-selecting cells (mousedown -> mouseup). */
102
102
  isDragging: boolean;
103
103
  }
104
104
  /** Context menu position and handlers. */
@@ -169,5 +169,11 @@ export interface UseDataGridStateResult<T> {
169
169
  /**
170
170
  * Single orchestration hook for DataGridTable. Takes grid props and wrapper ref,
171
171
  * returns all derived state and handlers so Fluent/Material/Radix can be thin view layers.
172
+ *
173
+ * Internally delegates to focused sub-hooks:
174
+ * - useDataGridLayout -- column layout, sizing, pinning, header menu
175
+ * - useDataGridEditing -- cell editing commit/cancel, popover editor
176
+ * - useDataGridInteraction -- cell selection, keyboard nav, clipboard, fill handle, undo/redo
177
+ * - useDataGridContextMenu -- context menu state
172
178
  */
173
179
  export declare function useDataGridState<T>(params: UseDataGridStateParams<T>): UseDataGridStateResult<T>;
@@ -1,6 +1,6 @@
1
1
  import type { RefObject } from 'react';
2
2
  import type { IOGridDataGridProps, IColumnDef } from '../types';
3
- import type { UseDataGridStateResult, DataGridLayoutState, DataGridRowSelectionState, DataGridEditingState, DataGridCellInteractionState, DataGridContextMenuState, DataGridViewModelState, DataGridPinningState } from './useDataGridState';
3
+ import type { DataGridLayoutState, DataGridRowSelectionState, DataGridEditingState, DataGridCellInteractionState, DataGridContextMenuState, DataGridViewModelState, DataGridPinningState } from './useDataGridState';
4
4
  import type { UseColumnResizeResult } from './useColumnResize';
5
5
  import type { UseColumnReorderResult } from './useColumnReorder';
6
6
  import type { UseVirtualScrollResult } from './useVirtualScroll';
@@ -15,7 +15,6 @@ export interface UseDataGridTableOrchestrationResult<T> {
15
15
  wrapperRef: RefObject<HTMLDivElement | null>;
16
16
  tableContainerRef: RefObject<HTMLDivElement | null>;
17
17
  lastMouseShiftRef: React.MutableRefObject<boolean>;
18
- state: UseDataGridStateResult<T>;
19
18
  layout: DataGridLayoutState<T>;
20
19
  rowSel: DataGridRowSelectionState;
21
20
  editing: DataGridEditingState<T>;
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import type { SideBarProps } from '../components/SideBar';
3
- import type { IOGridProps, IOGridDataGridProps, IOGridApi, IFilters, IColumnDefinition } from '../types';
3
+ import type { IOGridProps, IOGridDataGridProps, IOGridApi, IColumnDefinition } from '../types';
4
4
  /** Resolved column chooser placement. */
5
5
  export type ColumnChooserPlacement = 'toolbar' | 'sidebar' | 'none';
6
6
  /** Pagination state and handlers. */
@@ -18,6 +18,7 @@ export interface UseOGridColumnChooser {
18
18
  columns: IColumnDefinition[];
19
19
  visibleColumns: Set<string>;
20
20
  onVisibilityChange: (columnKey: string, isVisible: boolean) => void;
21
+ onSetVisibleColumns: (columns: Set<string>) => void;
21
22
  placement: ColumnChooserPlacement;
22
23
  }
23
24
  /** Layout / chrome configuration. */
@@ -34,7 +35,7 @@ export interface UseOGridLayout {
34
35
  /** Filter state. */
35
36
  export interface UseOGridFilters {
36
37
  hasActiveFilters: boolean;
37
- setFilters: (f: IFilters) => void;
38
+ setFilters: (f: import('../types').IFilters) => void;
38
39
  }
39
40
  export interface UseOGridResult<T> {
40
41
  dataGridProps: IOGridDataGridProps<T>;
@@ -45,6 +46,7 @@ export interface UseOGridResult<T> {
45
46
  }
46
47
  /**
47
48
  * Top-level orchestration hook for OGrid: manages pagination, sorting, filtering, column visibility, and sidebar.
49
+ * Delegates to focused sub-hooks for each concern.
48
50
  * @param props - All OGrid props (columns, data, callbacks, feature flags).
49
51
  * @param ref - Forwarded ref for imperative API (refresh, export, applyColumnState).
50
52
  * @returns Grouped props for DataGridTable, pagination controls, column chooser, layout, and filters.
@@ -0,0 +1,29 @@
1
+ import type { IFilters, IDataSource } from '../types';
2
+ import type { IColumnDef as ICoreColumnDef } from '@alaarab/ogrid-core';
3
+ export interface UseOGridDataFetchingParams<T> {
4
+ isServerSide: boolean;
5
+ dataSource?: IDataSource<T>;
6
+ displayData: T[];
7
+ columns: ICoreColumnDef<T>[];
8
+ stableFilters: IFilters;
9
+ filters: IFilters;
10
+ sort: {
11
+ field: string;
12
+ direction: 'asc' | 'desc';
13
+ };
14
+ page: number;
15
+ pageSize: number;
16
+ onError?: (err: unknown) => void;
17
+ onFirstDataRendered?: () => void;
18
+ }
19
+ export interface UseOGridDataFetchingState<T> {
20
+ displayItems: T[];
21
+ displayTotalCount: number;
22
+ serverLoading: boolean;
23
+ refreshData: () => void;
24
+ }
25
+ /**
26
+ * Manages data fetching (server-side) and client-side filtering/sorting/pagination.
27
+ * Fires onFirstDataRendered once when items first appear.
28
+ */
29
+ export declare function useOGridDataFetching<T>(params: UseOGridDataFetchingParams<T>): UseOGridDataFetchingState<T>;
@@ -0,0 +1,24 @@
1
+ import type { IFilters, FilterValue, IDataSource } from '../types';
2
+ import type { IColumnDef as ICoreColumnDef } from '@alaarab/ogrid-core';
3
+ export interface UseOGridFiltersParams<T> {
4
+ controlledFilters?: IFilters;
5
+ onFiltersChange?: (f: IFilters) => void;
6
+ setPage: (p: number) => void;
7
+ columns: ICoreColumnDef<T>[];
8
+ displayData: T[];
9
+ dataSource?: IDataSource<T>;
10
+ }
11
+ export interface UseOGridFiltersState {
12
+ filters: IFilters;
13
+ setFilters: (f: IFilters) => void;
14
+ handleFilterChange: (key: string, value: FilterValue | undefined) => void;
15
+ stableFilters: IFilters;
16
+ hasActiveFilters: boolean;
17
+ clientFilterOptions: Record<string, string[]>;
18
+ loadingFilterOptions: Record<string, boolean>;
19
+ }
20
+ /**
21
+ * Manages filter state, filter options (client + server), and stabilized filter reference.
22
+ * Resets to page 1 on filter change.
23
+ */
24
+ export declare function useOGridFilters<T>(params: UseOGridFiltersParams<T>): UseOGridFiltersState;
@@ -0,0 +1,18 @@
1
+ export interface UseOGridPaginationParams {
2
+ controlledPage?: number;
3
+ controlledPageSize?: number;
4
+ defaultPageSize: number;
5
+ onPageChange?: (p: number) => void;
6
+ onPageSizeChange?: (size: number) => void;
7
+ }
8
+ export interface UseOGridPaginationState {
9
+ page: number;
10
+ pageSize: number;
11
+ setPage: (p: number) => void;
12
+ setPageSize: (size: number) => void;
13
+ }
14
+ /**
15
+ * Manages pagination state with controlled/uncontrolled dual-mode support.
16
+ * Resets to page 1 when page size changes.
17
+ */
18
+ export declare function useOGridPagination(params: UseOGridPaginationParams): UseOGridPaginationState;
@@ -0,0 +1,23 @@
1
+ export interface SortState {
2
+ field: string;
3
+ direction: 'asc' | 'desc';
4
+ }
5
+ export interface UseOGridSortingParams {
6
+ controlledSort?: SortState;
7
+ defaultSortField: string;
8
+ defaultSortDirection: 'asc' | 'desc';
9
+ onSortChange?: (s: SortState) => void;
10
+ setPage: (p: number) => void;
11
+ }
12
+ export interface UseOGridSortingState {
13
+ sort: SortState;
14
+ setSort: (s: SortState) => void;
15
+ handleSort: (columnKey: string, direction?: 'asc' | 'desc' | null) => void;
16
+ defaultSortField: string;
17
+ defaultSortDirection: 'asc' | 'desc';
18
+ }
19
+ /**
20
+ * Manages sort state with controlled/uncontrolled dual-mode support.
21
+ * Resets to page 1 on sort change.
22
+ */
23
+ export declare function useOGridSorting(params: UseOGridSortingParams): UseOGridSortingState;
@@ -11,7 +11,7 @@ export interface UsePaginationControlsProps {
11
11
  export interface UsePaginationControlsResult {
12
12
  labelPlural: string;
13
13
  vm: ReturnType<typeof getPaginationViewModel>;
14
- handlePageSizeChange: (value: number) => void;
14
+ handlePageSizeChange: (pageSize: number) => void;
15
15
  }
16
16
  /**
17
17
  * Shared pagination controls logic for React UI packages.
@@ -1,3 +1,5 @@
1
+ /** Shared display text formatter for select and rich-select editors. */
2
+ export declare function getSelectDisplayText(value: unknown, formatValue?: (v: unknown) => string): string;
1
3
  export interface UseRichSelectStateParams {
2
4
  values: unknown[];
3
5
  formatValue?: (value: unknown) => string;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Returns a referentially stable value as long as the comparator considers
3
+ * the new value equal to the previous one. Unlike the broken
4
+ * `useMemo` + `useRef` + `useEffect` pattern, this works correctly because
5
+ * it compares *before* React's own reference check on the dependency array.
6
+ */
7
+ export declare function useShallowEqualMemo<T>(value: T, isEqual: (a: T, b: T) => boolean): T;
@@ -1,8 +1,8 @@
1
1
  export { CHECKBOX_COLUMN_WIDTH, ROW_NUMBER_COLUMN_WIDTH, DEFAULT_MIN_COLUMN_WIDTH, CELL_PADDING, GRID_BORDER_RADIUS, } from '@alaarab/ogrid-core';
2
2
  export type { ColumnFilterType, IColumnFilterDef, IColumnMeta, IColumnDef, IColumnGroupDef, IColumnDefinition, ICellValueChangedEvent, ICellEditorProps, CellEditorParams, IValueParserParams, UserLike, UserLikeInput, FilterValue, IFilters, IFetchParams, IPageResult, IDataSource, IGridColumnState, IOGridApi, IOGridProps, IOGridDataGridProps, RowSelectionMode, RowId, IRowSelectionChangeEvent, StatusBarPanel, IStatusBarProps, IActiveCell, ISelectionRange, HeaderCell, HeaderRow, SideBarPanelId, ISideBarDef, IDateFilterValue, IVirtualScrollConfig, IColumnReorderConfig, } from './types';
3
3
  export { toUserLike, isInSelectionRange, normalizeSelectionRange } from './types';
4
- export { useFilterOptions, useOGrid, useActiveCell, useCellEditing, useContextMenu, useCellSelection, useClipboard, useRowSelection, useKeyboardNavigation, useUndoRedo, useDebounce, useFillHandle, useDataGridState, useColumnHeaderFilterState, useTextFilterState, useMultiSelectFilterState, usePeopleFilterState, useDateFilterState, useColumnChooserState, useInlineCellEditorState, useColumnResize, useRichSelectState, useSelectState, useSideBarState, useTableLayout, useColumnReorder, useVirtualScroll, useListVirtualizer, useLatestRef, usePaginationControls, useDataGridTableOrchestration, } from './hooks';
5
- export type { UseFilterOptionsResult, UseOGridResult, UseOGridPagination, UseOGridColumnChooser, UseOGridLayout, UseOGridFilters, ColumnChooserPlacement, UseActiveCellResult, UseCellEditingResult, EditingCell, UseContextMenuResult, ContextMenuPosition, UseCellSelectionResult, UseCellSelectionParams, UseClipboardResult, UseClipboardParams, UseRowSelectionResult, UseRowSelectionParams, UseKeyboardNavigationResult, UseKeyboardNavigationParams, UseUndoRedoResult, UseUndoRedoParams, UseFillHandleResult, UseFillHandleParams, UseDataGridStateParams, UseDataGridStateResult, DataGridLayoutState, DataGridRowSelectionState, DataGridEditingState, DataGridCellInteractionState, DataGridContextMenuState, DataGridViewModelState, DataGridPinningState, UseColumnHeaderFilterStateParams, UseColumnHeaderFilterStateResult, UseTextFilterStateParams, UseTextFilterStateResult, UseMultiSelectFilterStateParams, UseMultiSelectFilterStateResult, UsePeopleFilterStateParams, UsePeopleFilterStateResult, UseDateFilterStateParams, UseDateFilterStateResult, UseColumnChooserStateParams, UseColumnChooserStateResult, UseInlineCellEditorStateParams, UseInlineCellEditorStateResult, InlineCellEditorType, UseColumnResizeParams, UseColumnResizeResult, UseRichSelectStateParams, UseRichSelectStateResult, UseSelectStateParams, UseSelectStateResult, UseSideBarStateParams, UseSideBarStateResult, UseTableLayoutParams, UseTableLayoutResult, UseColumnReorderParams, UseColumnReorderResult, UseVirtualScrollParams, UseVirtualScrollResult, UsePaginationControlsProps, UsePaginationControlsResult, UseDataGridTableOrchestrationParams, UseDataGridTableOrchestrationResult, } from './hooks';
4
+ export { useFilterOptions, useOGrid, useActiveCell, useCellEditing, useContextMenu, useCellSelection, useClipboard, useRowSelection, useKeyboardNavigation, useUndoRedo, useDebounce, useFillHandle, useDataGridState, useColumnHeaderFilterState, useTextFilterState, useMultiSelectFilterState, usePeopleFilterState, useDateFilterState, useColumnChooserState, useInlineCellEditorState, useColumnResize, useRichSelectState, useSelectState, useSideBarState, useTableLayout, useColumnReorder, useVirtualScroll, useListVirtualizer, useLatestRef, usePaginationControls, useDataGridTableOrchestration, useColumnMeta, } from './hooks';
5
+ export type { UseFilterOptionsResult, UseOGridResult, UseOGridPagination, UseOGridColumnChooser, UseOGridLayout, UseOGridFilters, ColumnChooserPlacement, UseActiveCellResult, UseCellEditingResult, EditingCell, UseContextMenuResult, ContextMenuPosition, UseCellSelectionResult, UseCellSelectionParams, UseClipboardResult, UseClipboardParams, UseRowSelectionResult, UseRowSelectionParams, UseKeyboardNavigationResult, UseKeyboardNavigationParams, UseUndoRedoResult, UseUndoRedoParams, UseFillHandleResult, UseFillHandleParams, UseDataGridStateParams, UseDataGridStateResult, DataGridLayoutState, DataGridRowSelectionState, DataGridEditingState, DataGridCellInteractionState, DataGridContextMenuState, DataGridViewModelState, DataGridPinningState, UseColumnHeaderFilterStateParams, UseColumnHeaderFilterStateResult, UseTextFilterStateParams, UseTextFilterStateResult, UseMultiSelectFilterStateParams, UseMultiSelectFilterStateResult, UsePeopleFilterStateParams, UsePeopleFilterStateResult, UseDateFilterStateParams, UseDateFilterStateResult, UseColumnChooserStateParams, UseColumnChooserStateResult, UseInlineCellEditorStateParams, UseInlineCellEditorStateResult, InlineCellEditorType, UseColumnResizeParams, UseColumnResizeResult, UseRichSelectStateParams, UseRichSelectStateResult, UseSelectStateParams, UseSelectStateResult, UseSideBarStateParams, UseSideBarStateResult, UseTableLayoutParams, UseTableLayoutResult, UseColumnReorderParams, UseColumnReorderResult, UseVirtualScrollParams, UseVirtualScrollResult, UsePaginationControlsProps, UsePaginationControlsResult, UseDataGridTableOrchestrationParams, UseDataGridTableOrchestrationResult, UseColumnMetaParams, ColumnMetaResult, } from './hooks';
6
6
  export { GRID_ROOT_STYLE, CURSOR_CELL_STYLE, POPOVER_ANCHOR_STYLE, PREVENT_DEFAULT, NOOP, STOP_PROPAGATION, } from './constants/domHelpers';
7
7
  export { OGridLayout } from './components/OGridLayout';
8
8
  export type { OGridLayoutProps } from './components/OGridLayout';
@@ -1,5 +1,5 @@
1
- export { escapeCsvValue, buildCsvHeader, buildCsvRows, exportToCsv, triggerCsvDownload, getCellValue, flattenColumns, buildHeaderRows, getFilterField, mergeFilter, deriveFilterOptionsFromData, getMultiSelectFilterFields, getStatusBarParts, getDataGridStatusBarConfig, getPaginationViewModel, PAGE_SIZE_OPTIONS, MAX_PAGE_BUTTONS, GRID_CONTEXT_MENU_ITEMS, COLUMN_HEADER_MENU_ITEMS, getContextMenuHandlers, getColumnHeaderMenuItems, formatShortcut, parseValue, numberParser, currencyParser, dateParser, emailParser, booleanParser, computeAggregations, processClientSideData, computeNextSortState, measureColumnContentWidth, AUTOSIZE_EXTRA_PX, AUTOSIZE_MAX_PX, findCtrlArrowTarget, computeTabNavigation, rangesEqual, clampSelectionToBounds, computeAutoScrollSpeed, formatCellValueForTsv, formatSelectionAsTsv, parseTsvClipboard, UndoRedoStack, } from '@alaarab/ogrid-core';
2
- export type { CsvColumn, StatusBarPart, StatusBarPartsInput, GridContextMenuItem, GridContextMenuHandlerProps, PaginationViewModel, ParseValueResult, AggregationResult, IColumnHeaderMenuItem, ColumnHeaderMenuInput, ColumnHeaderMenuHandlers, } from '@alaarab/ogrid-core';
1
+ export { escapeCsvValue, buildCsvHeader, buildCsvRows, exportToCsv, triggerCsvDownload, getCellValue, flattenColumns, buildHeaderRows, getFilterField, mergeFilter, deriveFilterOptionsFromData, getMultiSelectFilterFields, getStatusBarParts, getDataGridStatusBarConfig, getPaginationViewModel, PAGE_SIZE_OPTIONS, MAX_PAGE_BUTTONS, GRID_CONTEXT_MENU_ITEMS, COLUMN_HEADER_MENU_ITEMS, getContextMenuHandlers, getColumnHeaderMenuItems, formatShortcut, parseValue, numberParser, currencyParser, dateParser, emailParser, booleanParser, computeAggregations, processClientSideData, computeNextSortState, measureColumnContentWidth, AUTOSIZE_EXTRA_PX, AUTOSIZE_MAX_PX, findCtrlArrowTarget, computeTabNavigation, rangesEqual, clampSelectionToBounds, computeAutoScrollSpeed, formatCellValueForTsv, formatSelectionAsTsv, parseTsvClipboard, applyPastedValues, applyCutClear, applyFillValues, computeArrowNavigation, applyCellDeletion, applyRangeRowSelection, computeRowSelectionState, UndoRedoStack, } from '@alaarab/ogrid-core';
2
+ export type { CsvColumn, StatusBarPart, StatusBarPartsInput, GridContextMenuItem, GridContextMenuHandlerProps, PaginationViewModel, ParseValueResult, AggregationResult, IColumnHeaderMenuItem, ColumnHeaderMenuInput, ColumnHeaderMenuHandlers, ArrowNavigationContext, ArrowNavigationResult, } from '@alaarab/ogrid-core';
3
3
  export { getHeaderFilterConfig, getCellRenderDescriptor, resolveCellDisplayContent, resolveCellStyle, buildInlineEditorProps, buildPopoverEditorProps, getCellInteractionProps, } from './dataGridViewModel';
4
4
  export type { HeaderFilterConfigInput, HeaderFilterConfig, CellRenderDescriptorInput, CellRenderDescriptor, CellRenderMode, CellInteractionHandlers, } from './dataGridViewModel';
5
5
  export { areGridRowPropsEqual, isRowInRange } from './gridRowComparator';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alaarab/ogrid-react",
3
- "version": "2.0.23",
3
+ "version": "2.1.0",
4
4
  "description": "OGrid React – React hooks, headless components, and utilities for OGrid data grids.",
5
5
  "main": "dist/esm/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -36,11 +36,12 @@
36
36
  "node": ">=18"
37
37
  },
38
38
  "dependencies": {
39
- "@alaarab/ogrid-core": "2.0.23"
39
+ "@alaarab/ogrid-core": "2.1.0"
40
40
  },
41
41
  "peerDependencies": {
42
42
  "@tanstack/react-virtual": "^3.0.0",
43
- "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
43
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
44
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
44
45
  },
45
46
  "peerDependenciesMeta": {
46
47
  "@tanstack/react-virtual": {
@@ -58,5 +59,12 @@
58
59
  },
59
60
  "publishConfig": {
60
61
  "access": "public"
61
- }
62
+ },
63
+ "repository": {
64
+ "type": "git",
65
+ "url": "https://github.com/alaarab/ogrid.git",
66
+ "directory": "packages/react"
67
+ },
68
+ "homepage": "https://ogrid.dev",
69
+ "bugs": "https://github.com/alaarab/ogrid/issues"
62
70
  }