@ishibashi0112/spreadsheet-grid 0.35.0 → 0.37.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 (46) hide show
  1. package/dist/controllers/clipboardController.d.ts +31 -0
  2. package/dist/controllers/columnAutosizeRunner.d.ts +20 -0
  3. package/dist/controllers/columnHeaderDragController.d.ts +44 -0
  4. package/dist/controllers/columnMenuController.d.ts +49 -0
  5. package/dist/controllers/contextMenuController.d.ts +30 -0
  6. package/dist/controllers/editController.d.ts +27 -0
  7. package/dist/controllers/filterPopoverController.d.ts +53 -0
  8. package/dist/controllers/globalFilteredOrder.d.ts +38 -0
  9. package/dist/controllers/historyController.d.ts +28 -0
  10. package/dist/controllers/keyboardController.d.ts +36 -0
  11. package/dist/controllers/panelHeaderDragController.d.ts +21 -0
  12. package/dist/controllers/pointerInteractionsController.d.ts +74 -0
  13. package/dist/controllers/popoverSupport.d.ts +18 -0
  14. package/dist/controllers/rowDragController.d.ts +40 -0
  15. package/dist/controllers/selectOptionsCollector.d.ts +31 -0
  16. package/dist/controllers/serverSideRowModel.d.ts +36 -0
  17. package/dist/controllers/systemColorSchemeStore.d.ts +5 -0
  18. package/dist/controllers/toolPanelController.d.ts +36 -0
  19. package/dist/controllers/tooltipController.d.ts +6 -0
  20. package/dist/controllers/viewportSyncController.d.ts +30 -0
  21. package/dist/hooks/useCellContextMenuController.d.ts +7 -13
  22. package/dist/hooks/useColumnAutosizeRunner.d.ts +3 -13
  23. package/dist/hooks/useColumnHeaderDragController.d.ts +5 -16
  24. package/dist/hooks/useColumnMenuController.d.ts +10 -12
  25. package/dist/hooks/useColumnSelectOptionsCollector.d.ts +2 -10
  26. package/dist/hooks/useController.d.ts +5 -0
  27. package/dist/hooks/useFilterPopoverController.d.ts +16 -25
  28. package/dist/hooks/useGlobalFilteredOrder.d.ts +4 -8
  29. package/dist/hooks/useGridClipboardController.d.ts +4 -21
  30. package/dist/hooks/useGridEditController.d.ts +5 -20
  31. package/dist/hooks/useGridHistoryController.d.ts +2 -15
  32. package/dist/hooks/useGridKeyboardInteractions.d.ts +3 -23
  33. package/dist/hooks/useGridPointerInteractions.d.ts +15 -39
  34. package/dist/hooks/useGridStore.d.ts +7 -0
  35. package/dist/hooks/useGridViewportSync.d.ts +3 -19
  36. package/dist/hooks/useResolvedGridTheme.d.ts +2 -1
  37. package/dist/hooks/useRowDragController.d.ts +4 -13
  38. package/dist/hooks/useServerSideRowModel.d.ts +5 -18
  39. package/dist/hooks/useToolPanelController.d.ts +7 -9
  40. package/dist/index.cjs +8 -8
  41. package/dist/index.js +4044 -4037
  42. package/dist/logic/chunkedLoop.d.ts +8 -0
  43. package/dist/logic/theme.d.ts +3 -0
  44. package/dist/logic/valueStore.d.ts +6 -0
  45. package/dist/model/gridStore.d.ts +24 -0
  46. package/package.json +1 -1
@@ -0,0 +1,30 @@
1
+ import type { ColumnMeasurement } from '../logic/geometry';
2
+ import type { CellCoord } from '../model/gridTypes.core';
3
+ export type ViewportCellRect = {
4
+ left: number;
5
+ top: number;
6
+ width: number;
7
+ height: number;
8
+ };
9
+ export type ViewportSyncArgs<T> = {
10
+ scrollElement: HTMLElement | null;
11
+ columnVirtualizer: {
12
+ measure: () => void;
13
+ };
14
+ columnMeasurements: ColumnMeasurement<T>[];
15
+ totalScrollWidth: number;
16
+ physicalBodyHeight: number;
17
+ headerHeight: number;
18
+ leftPaneWidth: number;
19
+ rightPaneWidth: number;
20
+ centerLeadingWidth: number;
21
+ activeCellRect: ViewportCellRect | null;
22
+ activeCell: CellCoord | null;
23
+ verticalScaleFactor: number;
24
+ };
25
+ export type ViewportSyncController<T> = {
26
+ update: (args: ViewportSyncArgs<T>) => void;
27
+ };
28
+ export declare const clampScrollToContent: (scrollElement: HTMLElement, args: Pick<ViewportSyncArgs<unknown>, "totalScrollWidth" | "physicalBodyHeight" | "headerHeight">) => void;
29
+ export declare const scrollCellIntoView: (scrollElement: HTMLElement, rect: ViewportCellRect, args: Pick<ViewportSyncArgs<unknown>, "headerHeight" | "leftPaneWidth" | "rightPaneWidth" | "centerLeadingWidth" | "verticalScaleFactor">) => void;
30
+ export declare const createViewportSyncController: <T>() => ViewportSyncController<T>;
@@ -1,23 +1,17 @@
1
1
  import { type RefObject } from 'react';
2
- import type { GridContextMenuItem, GridContextMenuParams } from '../model/gridTypes';
3
- export type CellContextMenuLayout = {
4
- top: number;
5
- left: number;
6
- width: number;
7
- };
8
- type CellContextMenuState<T> = {
9
- params: GridContextMenuParams<T>;
10
- items: GridContextMenuItem[];
11
- };
2
+ import { type CellContextMenuLayout } from '../controllers/contextMenuController';
3
+ export type { CellContextMenuLayout } from '../controllers/contextMenuController';
12
4
  type UseCellContextMenuControllerArgs = {
13
5
  gridRootRef: RefObject<HTMLDivElement | null>;
14
6
  };
15
7
  export declare const useCellContextMenuController: <T>({ gridRootRef, }: UseCellContextMenuControllerArgs) => {
16
- contextMenuState: CellContextMenuState<T> | null;
8
+ contextMenuState: import("../controllers/contextMenuController").CellContextMenuState<T> | null;
17
9
  contextMenuLayout: CellContextMenuLayout | null;
18
- contextMenuRef: RefObject<HTMLDivElement | null>;
10
+ contextMenuRef: {
11
+ current: HTMLDivElement | null;
12
+ };
19
13
  isContextMenuOpen: boolean;
20
- openContextMenu: (params: GridContextMenuParams<T>, items: GridContextMenuItem[]) => void;
14
+ openContextMenu: (params: import("..").GridContextMenuParams<T>, items: import("..").GridContextMenuItem[]) => void;
21
15
  closeContextMenu: () => void;
22
16
  };
23
17
  export default useCellContextMenuController;
@@ -1,16 +1,6 @@
1
- import { gridActions } from '../model/gridActions';
2
- import type { GridColumn, RowModel } from '../model/gridTypes';
3
- type ReadonlyRef<V> = {
4
- readonly current: V;
5
- };
6
- type UseColumnAutosizeRunnerArgs<T> = {
7
- rowModelRef: ReadonlyRef<RowModel<T>>;
8
- gridRootRef: ReadonlyRef<HTMLElement | null>;
9
- columnWidthsRef: ReadonlyRef<Record<string, number>>;
10
- dispatch: (action: ReturnType<typeof gridActions.syncColumnWidths>) => void;
11
- };
12
- export declare const useColumnAutosizeRunner: <T>({ rowModelRef, gridRootRef, columnWidthsRef, dispatch, }: UseColumnAutosizeRunnerArgs<T>) => {
1
+ import { type ColumnAutosizeRunnerArgs } from '../controllers/columnAutosizeRunner';
2
+ export declare const useColumnAutosizeRunner: <T>(args: ColumnAutosizeRunnerArgs<T>) => {
13
3
  isAutosizing: boolean;
14
- runAutosize: (columns: GridColumn<T>[]) => Promise<void>;
4
+ runAutosize: (columns: import("..").GridColumn<T>[]) => Promise<void>;
15
5
  };
16
6
  export default useColumnAutosizeRunner;
@@ -1,27 +1,16 @@
1
- import { type PointerEvent, type RefObject } from 'react';
2
- import type { GridColumn, GridColumnPinned } from '../model/gridTypes';
3
- import { type GridPaneLayout } from '../logic/geometry';
4
- import type { GridResolvedSlot } from '../model/gridTypes';
5
- type ApplyColumnOrderAndPin = (orderedKeys: string[], pinOverride?: Map<string, GridColumnPinned | undefined>) => void;
6
- type UseColumnHeaderDragControllerArgs<T> = {
7
- enabled: boolean;
8
- columns: GridColumn<T>[];
9
- paneLayout: GridPaneLayout<T>;
1
+ import { type RefObject } from 'react';
2
+ import { type ColumnHeaderDragArgs } from '../controllers/columnHeaderDragController';
3
+ type UseColumnHeaderDragControllerArgs<T> = Omit<ColumnHeaderDragArgs<T>, 'leftPaneScrollRef' | 'rightPaneScrollRef' | 'bodyScrollRef' | 'scrollContainerRef' | 'leftIndicatorRef' | 'centerIndicatorRef' | 'rightIndicatorRef'> & {
10
4
  leftPaneScrollRef: RefObject<HTMLDivElement | null>;
11
5
  rightPaneScrollRef: RefObject<HTMLDivElement | null>;
12
6
  bodyScrollRef: RefObject<HTMLDivElement | null>;
13
7
  scrollContainerRef: RefObject<HTMLDivElement | null>;
14
- leftLeadingWidth: number;
15
- centerLeadingWidth: number;
16
- rightLeadingWidth: number;
17
- applyColumnOrderAndPin: ApplyColumnOrderAndPin;
18
- ghostSlot?: GridResolvedSlot;
19
8
  };
20
9
  export declare const useColumnHeaderDragController: <T>(args: UseColumnHeaderDragControllerArgs<T>) => {
21
- onColumnDragHandlePointerDown: (column: GridColumn<T>, event: PointerEvent<HTMLElement>) => void;
10
+ onColumnDragHandlePointerDown: (column: import("..").GridColumn<T>, event: import("../controllers/columnHeaderDragController").ColumnDragHandlePointerEvent) => void;
22
11
  leftIndicatorRef: RefObject<HTMLDivElement | null>;
23
12
  centerIndicatorRef: RefObject<HTMLDivElement | null>;
24
13
  rightIndicatorRef: RefObject<HTMLDivElement | null>;
25
14
  applyReorderSettle: () => void;
26
15
  };
27
- export default useColumnHeaderDragController;
16
+ export {};
@@ -1,25 +1,23 @@
1
- import { type MouseEvent, type PointerEvent, type RefObject } from 'react';
1
+ import { type RefObject } from 'react';
2
2
  import type { GridColumn } from '../model/gridTypes';
3
- export type ColumnMenuLayout = {
4
- top: number;
5
- left: number;
6
- width: number;
7
- maxHeight?: number;
8
- };
3
+ import { type ColumnMenuLayout } from '../controllers/columnMenuController';
4
+ export type { ColumnMenuLayout } from '../controllers/columnMenuController';
9
5
  type UseColumnMenuControllerArgs<T> = {
10
6
  visibleColumns: GridColumn<T>[];
11
7
  enableColumnMenu: boolean;
12
8
  gridRootRef: RefObject<HTMLDivElement | null>;
13
9
  };
14
- export declare const useColumnMenuController: <T>({ visibleColumns, enableColumnMenu, gridRootRef, }: UseColumnMenuControllerArgs<T>) => {
10
+ export declare const useColumnMenuController: <T>(args: UseColumnMenuControllerArgs<T>) => {
15
11
  columnMenuLayout: ColumnMenuLayout | null;
16
- columnMenuRef: RefObject<HTMLDivElement | null>;
12
+ columnMenuRef: {
13
+ current: HTMLDivElement | null;
14
+ };
17
15
  isColumnMenuOpen: boolean;
18
16
  openedMenuColumnKey: string | null;
19
17
  openedMenuColumn: GridColumn<T> | null;
20
- openColumnMenuFromButton: (column: GridColumn<T>, event: PointerEvent<HTMLButtonElement>) => void;
21
- openColumnMenuFromButtonClick: (column: GridColumn<T>, event: MouseEvent<HTMLButtonElement>) => void;
22
- openColumnMenuFromContextMenu: (column: GridColumn<T>, event: MouseEvent<HTMLDivElement>) => void;
18
+ openColumnMenuFromButton: (column: GridColumn<T>, event: import("../controllers/columnMenuController").MenuButtonPointerEvent) => void;
19
+ openColumnMenuFromButtonClick: (column: GridColumn<T>, event: import("../controllers/columnMenuController").MenuButtonClickEvent) => void;
20
+ openColumnMenuFromContextMenu: (column: GridColumn<T>, event: import("../controllers/columnMenuController").MenuContextEvent) => void;
23
21
  closeColumnMenu: () => void;
24
22
  };
25
23
  export default useColumnMenuController;
@@ -1,14 +1,6 @@
1
1
  import type { GridColumn } from '../model/gridTypes';
2
- import { type SelectOptionEntry } from '../logic/selectOptions';
3
- export declare const ASYNC_SELECT_COLLECT_ROW_THRESHOLD = 50000;
4
- export type ColumnSelectOptionsStatus = 'idle' | 'collecting' | 'ready';
5
- export type ColumnSelectOptionsResult = {
6
- status: ColumnSelectOptionsStatus;
7
- options: SelectOptionEntry[];
8
- allValues: ReadonlySet<string>;
9
- progress: number;
10
- };
11
- type RawValueAccessor = (index: number) => unknown;
2
+ import { type ColumnSelectOptionsResult, type RawValueAccessor } from '../controllers/selectOptionsCollector';
3
+ export { ASYNC_SELECT_COLLECT_ROW_THRESHOLD, type ColumnSelectOptionsResult, type ColumnSelectOptionsStatus, } from '../controllers/selectOptionsCollector';
12
4
  type UseColumnSelectOptionsCollectorArgs<T> = {
13
5
  column: GridColumn<T> | null;
14
6
  rowCount: number;
@@ -0,0 +1,5 @@
1
+ export type ControllerLike<Args> = {
2
+ update: (args: Args) => void;
3
+ dispose?: () => void;
4
+ };
5
+ export declare function useController<Args, C extends ControllerLike<Args>>(create: () => C, args: Args): C;
@@ -1,22 +1,7 @@
1
1
  import { type RefObject } from 'react';
2
2
  import type { ColumnFilterUiType, ColumnFilterValue, GridColumn } from '../model/gridTypes';
3
- import { type NumberFilterConditionDraft } from '../logic/numberFilterCondition';
4
- import { type TextFilterConditionDraft } from '../logic/textFilterCondition';
5
- import { type DateFilterConditionDraft } from '../logic/dateFilterCondition';
6
- type HeaderFilterPopoverState = {
7
- columnKey: string;
8
- filterType: ColumnFilterUiType;
9
- draftValue: string;
10
- numberDraft: NumberFilterConditionDraft | null;
11
- textDraft: TextFilterConditionDraft | null;
12
- dateDraft: DateFilterConditionDraft | null;
13
- };
14
- export type FilterPopoverLayout = {
15
- top: number;
16
- left: number;
17
- width: number;
18
- maxHeight: number;
19
- };
3
+ import { type FilterPopoverLayout } from '../controllers/filterPopoverController';
4
+ export type { FilterPopoverLayout } from '../controllers/filterPopoverController';
20
5
  type UseFilterPopoverControllerArgs<T> = {
21
6
  visibleColumns: GridColumn<T>[];
22
7
  columnFilterValues: Record<string, ColumnFilterValue>;
@@ -24,20 +9,26 @@ type UseFilterPopoverControllerArgs<T> = {
24
9
  gridRootRef: RefObject<HTMLDivElement | null>;
25
10
  resolveColumnFilterType?: (column: GridColumn<T>) => ColumnFilterUiType;
26
11
  };
27
- export declare const useFilterPopoverController: <T>({ visibleColumns, columnFilterValues, enableColumnFilter, gridRootRef, resolveColumnFilterType, }: UseFilterPopoverControllerArgs<T>) => {
28
- filterPopoverState: HeaderFilterPopoverState | null;
12
+ export declare const useFilterPopoverController: <T>(args: UseFilterPopoverControllerArgs<T>) => {
13
+ filterPopoverState: import("../controllers/filterPopoverController").HeaderFilterPopoverState | null;
29
14
  filterPopoverLayout: FilterPopoverLayout | null;
30
- filterPopoverRef: RefObject<HTMLDivElement | null>;
31
- filterTextInputRef: RefObject<HTMLInputElement | null>;
32
- filterSelectRef: RefObject<HTMLSelectElement | null>;
15
+ filterPopoverRef: {
16
+ current: HTMLDivElement | null;
17
+ };
18
+ filterTextInputRef: {
19
+ current: HTMLInputElement | null;
20
+ };
21
+ filterSelectRef: {
22
+ current: HTMLSelectElement | null;
23
+ };
33
24
  isFilterPopoverOpen: boolean;
34
25
  openedFilterColumn: GridColumn<T> | null;
35
26
  openedFilterType: ColumnFilterUiType | null;
36
27
  openColumnFilterPopover: (column: GridColumn<T>) => void;
37
28
  closeColumnFilterPopover: () => void;
38
29
  updateFilterPopoverDraft: (value: string) => void;
39
- updateFilterPopoverNumberDraft: (draft: NumberFilterConditionDraft) => void;
40
- updateFilterPopoverTextDraft: (draft: TextFilterConditionDraft) => void;
41
- updateFilterPopoverDateDraft: (draft: DateFilterConditionDraft) => void;
30
+ updateFilterPopoverNumberDraft: (draft: import("../logic/numberFilterCondition").NumberFilterConditionDraft) => void;
31
+ updateFilterPopoverTextDraft: (draft: import("../logic/textFilterCondition").TextFilterConditionDraft) => void;
32
+ updateFilterPopoverDateDraft: (draft: import("../logic/dateFilterCondition").DateFilterConditionDraft) => void;
42
33
  };
43
34
  export default useFilterPopoverController;
@@ -1,11 +1,7 @@
1
- import type { GlobalFilterStatus, GridColumn } from '../model/gridTypes';
2
- import { type RowOrder } from '../logic/filtering';
3
- export declare const ASYNC_GLOBAL_FILTER_ROW_THRESHOLD = 50000;
4
- export type GlobalFilteredOrderResult = {
5
- order: RowOrder;
6
- status: GlobalFilterStatus;
7
- progress: number;
8
- };
1
+ import type { GridColumn } from '../model/gridTypes';
2
+ import { type GlobalFilteredOrderResult } from '../controllers/globalFilteredOrder';
3
+ import type { RowOrder } from '../logic/filtering';
4
+ export { ASYNC_GLOBAL_FILTER_ROW_THRESHOLD, type GlobalFilteredOrderResult, } from '../controllers/globalFilteredOrder';
9
5
  type UseGlobalFilteredOrderArgs<T> = {
10
6
  rows: T[];
11
7
  baseOrder: RowOrder;
@@ -1,25 +1,8 @@
1
- import { type Dispatch } from 'react';
2
- import { type GridUiAction } from '../model/gridActions';
3
- import type { GridColumn, SpreadsheetGridProps, GridUiState, RowModel } from '../model/gridTypes';
4
- import type { ServerSideCellEditInput } from '../logic/serverSideEdits';
5
- type UseGridClipboardControllerArgs<T extends object> = {
6
- rows: T[];
7
- rowModel: RowModel<T>;
8
- visibleColumns: GridColumn<T>[];
9
- uiState: GridUiState;
10
- readOnly: boolean;
11
- canEditCell: SpreadsheetGridProps<T>['canEditCell'];
12
- createRow?: () => T;
13
- createOverflowColumn?: (columnIndex: number) => GridColumn<T>;
14
- onRowsChange?: (nextRows: T[]) => void;
15
- onColumnsChange?: (nextColumns: GridColumn<T>[]) => void;
16
- applyServerSideCellEdits?: (edits: ServerSideCellEditInput<T>[]) => number;
17
- isRowExportable?: SpreadsheetGridProps<T>['isRowExportable'];
18
- dispatch: Dispatch<GridUiAction>;
19
- };
20
- export declare const useGridClipboardController: <T extends object>({ rows, rowModel, visibleColumns, uiState, readOnly, canEditCell, createRow, createOverflowColumn, onRowsChange, onColumnsChange, applyServerSideCellEdits, isRowExportable, dispatch, }: UseGridClipboardControllerArgs<T>) => {
1
+ import { type ClipboardEvent } from 'react';
2
+ import { type ClipboardControllerArgs } from '../controllers/clipboardController';
3
+ export declare const useGridClipboardController: <T extends object>(args: ClipboardControllerArgs<T>) => {
21
4
  isWholeGridSelected: boolean;
22
5
  handleCopy: () => Promise<void>;
23
- handlePaste: (event: React.ClipboardEvent<HTMLDivElement>) => void;
6
+ handlePaste: (event: ClipboardEvent<HTMLDivElement>) => void;
24
7
  };
25
8
  export default useGridClipboardController;
@@ -1,23 +1,8 @@
1
- import { type Dispatch, type RefObject } from 'react';
2
- import { type GridUiAction } from '../model/gridActions';
3
- import type { CellCoord, EditorCommitDirection, EditorCommitResult, GridColumn, GridUiState, RowModel } from '../model/gridTypes';
4
- import type { ServerSideCellEditInput } from '../logic/serverSideEdits';
5
- type UseGridEditControllerArgs<T extends object> = {
6
- uiState: GridUiState;
7
- rows: T[];
8
- visibleColumns: GridColumn<T>[];
9
- rowModel: RowModel<T>;
10
- setEditorInitialValue: (value: string) => void;
11
- onRowsChange?: (nextRows: T[]) => void;
12
- applyServerSideCellEdits?: (edits: ServerSideCellEditInput<T>[]) => number;
13
- dispatch: Dispatch<GridUiAction>;
14
- gridRootRef: RefObject<HTMLDivElement | null>;
15
- editorActionGuardRef: RefObject<boolean>;
16
- };
17
- export declare const useGridEditController: <T extends object>({ uiState, rows, visibleColumns, rowModel, setEditorInitialValue, onRowsChange, applyServerSideCellEdits, dispatch, gridRootRef, editorActionGuardRef, }: UseGridEditControllerArgs<T>) => {
18
- activateSingleCell: (cell: CellCoord) => void;
19
- startEditWithValue: (cell: CellCoord, initialValue: string) => void;
20
- commitEdit: (committedValue: unknown, direction?: EditorCommitDirection) => EditorCommitResult;
1
+ import { type EditControllerArgs } from '../controllers/editController';
2
+ export declare const useGridEditController: <T extends object>(args: EditControllerArgs<T>) => {
3
+ activateSingleCell: (cell: import("..").CellCoord) => void;
4
+ startEditWithValue: (cell: import("..").CellCoord, initialValue: string) => void;
5
+ commitEdit: (committedValue: unknown, direction?: import("..").EditorCommitDirection) => import("..").EditorCommitResult;
21
6
  cancelEdit: () => void;
22
7
  };
23
8
  export default useGridEditController;
@@ -1,18 +1,5 @@
1
- import type { Dispatch } from 'react';
2
- import { type GridUiAction } from '../model/gridActions';
3
- import type { CellCoord, GridSelection, UndoRedoState } from '../model/gridTypes';
4
- type UseGridHistoryControllerArgs<T> = {
5
- rows: T[];
6
- selection: GridSelection;
7
- activeCell: CellCoord | null;
8
- onRowsChange?: (nextRows: T[]) => void;
9
- dispatch: Dispatch<GridUiAction>;
10
- enabled: boolean;
11
- limit: number;
12
- onUndoRedoStateChange?: (state: UndoRedoState) => void;
13
- onAfterRestore?: (activeCell: CellCoord | null) => void;
14
- };
15
- export declare const useGridHistoryController: <T>({ rows, selection, activeCell, onRowsChange, dispatch, enabled, limit, onUndoRedoStateChange, onAfterRestore, }: UseGridHistoryControllerArgs<T>) => {
1
+ import { type HistoryControllerArgs } from '../controllers/historyController';
2
+ export declare const useGridHistoryController: <T>(args: HistoryControllerArgs<T>) => {
16
3
  handleRowsChange: ((nextRows: T[]) => void) | undefined;
17
4
  undo: () => void;
18
5
  redo: () => void;
@@ -1,26 +1,6 @@
1
- import { type Dispatch, type KeyboardEvent } from 'react';
2
- import { type GridUiAction } from '../model/gridActions';
3
- import type { CellCoord, GridColumn, GridUiState, RowModel, SpreadsheetGridProps } from '../model/gridTypes';
4
- type UseGridKeyboardInteractionsArgs<T> = {
5
- uiState: GridUiState;
6
- rowModel: RowModel<T>;
7
- visibleColumns: GridColumn<T>[];
8
- readOnly: boolean;
9
- canEditCell: SpreadsheetGridProps<T>['canEditCell'];
10
- setEditorInitialValue: (value: string) => void;
11
- dispatch: Dispatch<GridUiAction>;
12
- handleCopy: () => Promise<void>;
13
- handleCellDoubleClick: (cell: CellCoord) => void;
14
- isWholeGridSelected: boolean;
15
- selectEntireGrid: () => void;
16
- onUndo: () => void;
17
- onRedo: () => void;
18
- onClearSelection: () => void;
19
- enableClearOnDelete: boolean;
20
- onToggleCheckboxCell: (cell: CellCoord) => void;
21
- onToggleGroup: (groupKey: string) => void;
22
- };
23
- export declare const useGridKeyboardInteractions: <T>({ uiState, rowModel, visibleColumns, readOnly, canEditCell, setEditorInitialValue, dispatch, handleCopy, handleCellDoubleClick, isWholeGridSelected, selectEntireGrid, onUndo, onRedo, onClearSelection, enableClearOnDelete, onToggleCheckboxCell, onToggleGroup, }: UseGridKeyboardInteractionsArgs<T>) => {
1
+ import { type KeyboardEvent } from 'react';
2
+ import { type KeyboardControllerArgs } from '../controllers/keyboardController';
3
+ export declare const useGridKeyboardInteractions: <T>(args: KeyboardControllerArgs<T>) => {
24
4
  handleKeyDown: (event: KeyboardEvent<HTMLDivElement>) => Promise<void>;
25
5
  };
26
6
  export default useGridKeyboardInteractions;
@@ -1,11 +1,8 @@
1
- import { type Dispatch, type PointerEvent, type RefObject } from 'react';
2
- import { type GridUiAction } from '../model/gridActions';
3
- import type { CellCoord, GridColumn, GridUiState } from '../model/gridTypes';
4
- import { type GridPaneLayout } from '../logic/geometry';
5
- import type { RowMetrics } from '../logic/verticalGeometry';
6
- export declare const TOUCH_TAP_SLOP_PX = 10;
7
- export declare const TOUCH_DOUBLE_TAP_MS = 300;
8
- type UseGridPointerInteractionsArgs<T> = {
1
+ import type { RefObject } from 'react';
2
+ import type { CellCoord } from '../model/gridTypes';
3
+ import { type PointerInteractionsArgs } from '../controllers/pointerInteractionsController';
4
+ export { TOUCH_DOUBLE_TAP_MS, TOUCH_TAP_SLOP_PX, } from '../controllers/pointerInteractionsController';
5
+ type UseGridPointerInteractionsArgs<T> = Omit<PointerInteractionsArgs<T>, 'gridRootRef' | 'bodyScrollRef' | 'scrollContainerRef' | 'leftPaneScrollRef' | 'rightPaneScrollRef' | 'pointerClientRef' | 'autoScrollFrameRef' | 'onCellDoubleClickRef'> & {
9
6
  gridRootRef: RefObject<HTMLDivElement | null>;
10
7
  bodyScrollRef: RefObject<HTMLDivElement | null>;
11
8
  scrollContainerRef: RefObject<HTMLDivElement | null>;
@@ -16,40 +13,19 @@ type UseGridPointerInteractionsArgs<T> = {
16
13
  y: number;
17
14
  } | null>;
18
15
  autoScrollFrameRef: RefObject<number | null>;
19
- uiState: GridUiState;
20
- dispatch: Dispatch<GridUiAction>;
21
- enableRangeSelection: boolean;
22
- enableSorting: boolean;
23
- orderedColumns: GridColumn<T>[];
24
- filteredRowsLength: number;
25
- visibleColumnsLength: number;
26
- paneLayout: GridPaneLayout<T>;
27
- leftLeadingWidth: number;
28
- centerLeadingWidth: number;
29
- rightLeadingWidth: number;
30
- headerHeight: number;
31
- rowMetrics: RowMetrics;
32
- verticalScaleFactor: number;
33
- setHoveredRowIndex: (value: number | null) => void;
34
- setHoveredColumnIndex: (value: number | null) => void;
35
- enableRowHover: boolean;
36
- enableColumnHeaderHover: boolean;
37
- enableRowSelection: boolean;
38
- onGutterRowSelect: (viewIndex: number, opts: {
39
- shiftKey: boolean;
40
- }) => void;
41
- onGutterRowSelectDrag: (viewIndex: number) => void;
42
16
  onCellDoubleClickRef: RefObject<(cell: CellCoord) => void>;
43
17
  };
44
- export declare const useGridPointerInteractions: <T>({ gridRootRef, bodyScrollRef, scrollContainerRef, leftPaneScrollRef, rightPaneScrollRef, pointerClientRef, autoScrollFrameRef, uiState, dispatch, enableRangeSelection, enableSorting, orderedColumns, filteredRowsLength, visibleColumnsLength, paneLayout, leftLeadingWidth, centerLeadingWidth, rightLeadingWidth, headerHeight, rowMetrics, verticalScaleFactor, setHoveredRowIndex, setHoveredColumnIndex, enableRowHover, enableColumnHeaderHover, enableRowSelection, onGutterRowSelect, onGutterRowSelectDrag, onCellDoubleClickRef, }: UseGridPointerInteractionsArgs<T>) => {
18
+ export declare const useGridPointerInteractions: <T>(args: UseGridPointerInteractionsArgs<T>) => {
45
19
  updateSelectionFromPointer: (clientX: number, clientY: number) => void;
46
- handleCellPointerDown: (cell: CellCoord, event: PointerEvent<HTMLDivElement>) => void;
20
+ handleCellPointerDown: (cell: CellCoord, event: import("../controllers/pointerInteractionsController").GridPointerEventLike) => void;
47
21
  handleCellDoubleClick: (cell: CellCoord) => void;
48
- handleCellPointerEnter: (cell: CellCoord, event: PointerEvent<HTMLDivElement>) => void;
49
- handleNativeDragStart: (event: React.DragEvent<HTMLDivElement>) => void;
50
- handleRowHeaderPointerDown: (rowIndex: number, event: PointerEvent<HTMLDivElement>) => void;
51
- handleRowHeaderPointerEnter: (rowIndex: number, event: PointerEvent<HTMLDivElement>) => void;
52
- handleColumnHeaderPointerDown: (colIndex: number, event: PointerEvent<HTMLDivElement>) => void;
53
- handleColumnHeaderPointerEnter: (colIndex: number, event: PointerEvent<HTMLDivElement>) => void;
22
+ handleCellPointerEnter: (cell: CellCoord, event: import("../controllers/pointerInteractionsController").GridPointerEventLike) => void;
23
+ handleNativeDragStart: (event: {
24
+ preventDefault: () => void;
25
+ }) => void;
26
+ handleRowHeaderPointerDown: (rowIndex: number, event: import("../controllers/pointerInteractionsController").GridPointerEventLike) => void;
27
+ handleRowHeaderPointerEnter: (rowIndex: number, event: import("../controllers/pointerInteractionsController").GridPointerEventLike) => void;
28
+ handleColumnHeaderPointerDown: (colIndex: number, event: import("../controllers/pointerInteractionsController").GridPointerEventLike) => void;
29
+ handleColumnHeaderPointerEnter: (colIndex: number, event: import("../controllers/pointerInteractionsController").GridPointerEventLike) => void;
54
30
  };
55
31
  export default useGridPointerInteractions;
@@ -0,0 +1,7 @@
1
+ import { type GridStore, type GridViewState, type Updater } from '../model/gridStore';
2
+ import type { GridUiState } from '../model/gridTypes';
3
+ export declare function useGridStore(store: GridStore): [GridUiState, GridStore['dispatch']];
4
+ export type GridViewStateSetters = {
5
+ [K in keyof GridViewState as `set${Capitalize<K>}`]: (next: Updater<GridViewState[K]>) => void;
6
+ };
7
+ export declare function useGridViewState(store: GridStore): [GridViewState, GridViewStateSetters];
@@ -1,23 +1,7 @@
1
1
  import { type RefObject } from 'react';
2
- import type { ActiveCellOverlayRect } from '../ActiveCellOverlay';
3
- import type { ColumnMeasurement } from '../logic/geometry';
4
- import type { CellCoord } from '../model/gridTypes';
5
- type VirtualizerLike = {
6
- measure: () => void;
7
- };
8
- type UseGridViewportSyncArgs<T> = {
2
+ import { type ViewportSyncArgs } from '../controllers/viewportSyncController';
3
+ type UseGridViewportSyncArgs<T> = Omit<ViewportSyncArgs<T>, 'scrollElement'> & {
9
4
  scrollRef: RefObject<HTMLDivElement | null>;
10
- columnVirtualizer: VirtualizerLike;
11
- columnMeasurements: ColumnMeasurement<T>[];
12
- totalScrollWidth: number;
13
- physicalBodyHeight: number;
14
- headerHeight: number;
15
- leftPaneWidth: number;
16
- rightPaneWidth: number;
17
- centerLeadingWidth: number;
18
- activeCellRect: ActiveCellOverlayRect | null;
19
- activeCell: CellCoord | null;
20
- verticalScaleFactor: number;
21
5
  };
22
- export declare const useGridViewportSync: <T>({ scrollRef, columnVirtualizer, columnMeasurements, totalScrollWidth, physicalBodyHeight, headerHeight, leftPaneWidth, rightPaneWidth, centerLeadingWidth, activeCellRect, activeCell, verticalScaleFactor, }: UseGridViewportSyncArgs<T>) => void;
6
+ export declare const useGridViewportSync: <T>({ scrollRef, ...args }: UseGridViewportSyncArgs<T>) => void;
23
7
  export default useGridViewportSync;
@@ -1,2 +1,3 @@
1
+ import { type ResolvedGridTheme } from '../logic/theme';
1
2
  import type { GridTheme } from '../model/gridTypes';
2
- export declare function useResolvedGridTheme(theme: GridTheme): 'light' | 'dark';
3
+ export declare function useResolvedGridTheme(theme: GridTheme): ResolvedGridTheme;
@@ -1,20 +1,11 @@
1
- import { type PointerEvent, type RefObject } from 'react';
2
- import type { RowMetrics } from '../logic/verticalGeometry';
3
- import type { GridResolvedSlot } from '../model/gridTypes';
4
- type UseRowDragControllerArgs = {
5
- enabled: boolean;
6
- rowMetrics: RowMetrics;
7
- headerHeight: number;
8
- verticalScaleFactor: number;
9
- windowBaseOffsetPx: number;
1
+ import { type RefObject } from 'react';
2
+ import { type RowDragArgs } from '../controllers/rowDragController';
3
+ type UseRowDragControllerArgs = Omit<RowDragArgs, 'scrollContainerRef' | 'bodyScrollRef' | 'leftIndicatorRef' | 'centerIndicatorRef' | 'rightIndicatorRef'> & {
10
4
  scrollContainerRef: RefObject<HTMLDivElement | null>;
11
5
  bodyScrollRef: RefObject<HTMLDivElement | null>;
12
- getRowDragLabel: (viewIndex: number) => string;
13
- commitRowMove: (fromIndex: number, toIndex: number) => void;
14
- ghostSlot?: GridResolvedSlot;
15
6
  };
16
7
  export declare const useRowDragController: (args: UseRowDragControllerArgs) => {
17
- onRowDragHandlePointerDown: (viewIndex: number, event: PointerEvent<HTMLElement>) => void;
8
+ onRowDragHandlePointerDown: (viewIndex: number, event: import("../controllers/rowDragController").RowDragHandlePointerEvent) => void;
18
9
  leftIndicatorRef: RefObject<HTMLDivElement | null>;
19
10
  centerIndicatorRef: RefObject<HTMLDivElement | null>;
20
11
  rightIndicatorRef: RefObject<HTMLDivElement | null>;
@@ -1,21 +1,8 @@
1
- import type { GridRowKey, RowModel, ServerSideDataSource, ServerSideLoadErrorParams, ServerSideQuery, ServerSideWriteErrorParams } from '../model/gridTypes';
2
- import { type ServerSideCellEditInput } from '../logic/serverSideEdits';
3
- export type UseServerSideRowModelParams<T> = {
4
- dataSource?: ServerSideDataSource<T>;
5
- rowKeyGetter: (row: T, index: number) => GridRowKey;
6
- query: ServerSideQuery;
7
- queryKey: string;
8
- refreshToken?: number;
9
- onLoadError?: (error: unknown, params: ServerSideLoadErrorParams) => void;
10
- onWriteError?: (error: unknown, params: ServerSideWriteErrorParams<T>) => void;
11
- debounceMs?: number;
12
- };
13
- export type ServerSideLoadErrorState = {
14
- failedBlockCount: number;
15
- };
16
- export type ServerSideWriteErrorState = {
17
- failedRowCount: number;
18
- };
1
+ import type { RowModel } from '../model/gridTypes';
2
+ import { type ServerSideLoadErrorState, type ServerSideRowModelArgs, type ServerSideWriteErrorState } from '../controllers/serverSideRowModel';
3
+ import type { ServerSideCellEditInput } from '../logic/serverSideEdits';
4
+ export type { ServerSideLoadErrorState, ServerSideWriteErrorState, } from '../controllers/serverSideRowModel';
5
+ export type UseServerSideRowModelParams<T> = ServerSideRowModelArgs<T>;
19
6
  export type UseServerSideRowModelResult<T> = {
20
7
  rowModel: RowModel<T>;
21
8
  rowCount: number;
@@ -1,10 +1,6 @@
1
- import type { RefObject } from 'react';
2
- export type ToolPanelTab = 'filter' | 'columns' | 'sort';
3
- export type ToolPanelLayout = {
4
- top: number;
5
- left: number;
6
- width: number;
7
- };
1
+ import { type RefObject } from 'react';
2
+ import { type ToolPanelLayout, type ToolPanelTab } from '../controllers/toolPanelController';
3
+ export type { ToolPanelLayout, ToolPanelTab } from '../controllers/toolPanelController';
8
4
  type UseToolPanelControllerArgs = {
9
5
  canUseFilterTab: boolean;
10
6
  canUseColumnsTab: boolean;
@@ -14,12 +10,14 @@ type UseToolPanelControllerArgs = {
14
10
  suppressEscape?: boolean;
15
11
  onSuppressedEscape?: () => void;
16
12
  };
17
- export declare const useToolPanelController: ({ canUseFilterTab, canUseColumnsTab, canUseSortTab, gridRootRef, alliedRef, suppressEscape, onSuppressedEscape, }: UseToolPanelControllerArgs) => {
13
+ export declare const useToolPanelController: (args: UseToolPanelControllerArgs) => {
18
14
  activeToolPanelTab: ToolPanelTab | null;
19
15
  availableToolPanelTabs: ToolPanelTab[];
20
16
  toolPanelLayout: ToolPanelLayout | null;
21
17
  toolPanelFlashTick: number;
22
- toolPanelRef: RefObject<HTMLDivElement | null>;
18
+ toolPanelRef: {
19
+ current: HTMLDivElement | null;
20
+ };
23
21
  openToolPanel: (tab: ToolPanelTab) => void;
24
22
  closeToolPanel: () => void;
25
23
  moveToolPanel: (top: number, left: number) => void;