@ishibashi0112/spreadsheet-grid 0.36.0 → 0.38.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 (43) hide show
  1. package/dist/controllers/autoHeightMeasurer.d.ts +30 -0
  2. package/dist/controllers/columnAutosizeRunner.d.ts +31 -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/debouncedValueStore.d.ts +11 -0
  7. package/dist/controllers/filterPopoverController.d.ts +53 -0
  8. package/dist/controllers/globalFilteredOrder.d.ts +38 -0
  9. package/dist/controllers/pointerInteractionsController.d.ts +74 -0
  10. package/dist/controllers/popoverSupport.d.ts +18 -0
  11. package/dist/controllers/rowDragController.d.ts +40 -0
  12. package/dist/controllers/scrollSyncController.d.ts +17 -0
  13. package/dist/controllers/selectOptionsCollector.d.ts +31 -0
  14. package/dist/controllers/serverSideRowModel.d.ts +36 -0
  15. package/dist/controllers/toolPanelController.d.ts +36 -0
  16. package/dist/engine/columnCommands.d.ts +56 -0
  17. package/dist/engine/columnLayout.d.ts +43 -0
  18. package/dist/engine/createGridEngine.d.ts +46 -0
  19. package/dist/engine/filterPopoverCommands.d.ts +56 -0
  20. package/dist/engine/gridApi.d.ts +61 -0
  21. package/dist/engine/memo.d.ts +2 -0
  22. package/dist/engine/notifiers.d.ts +35 -0
  23. package/dist/engine/rowPipeline.d.ts +50 -0
  24. package/dist/engine/rowSelectionCommands.d.ts +21 -0
  25. package/dist/engine/verticalLayout.d.ts +52 -0
  26. package/dist/hooks/useCellContextMenuController.d.ts +7 -13
  27. package/dist/hooks/useColumnAutosizeRunner.d.ts +3 -13
  28. package/dist/hooks/useColumnHeaderDragController.d.ts +5 -16
  29. package/dist/hooks/useColumnMenuController.d.ts +10 -12
  30. package/dist/hooks/useColumnSelectOptionsCollector.d.ts +2 -10
  31. package/dist/hooks/useController.d.ts +3 -1
  32. package/dist/hooks/useFilterPopoverController.d.ts +16 -25
  33. package/dist/hooks/useGlobalFilteredOrder.d.ts +4 -8
  34. package/dist/hooks/useGridPointerInteractions.d.ts +15 -39
  35. package/dist/hooks/useRowDragController.d.ts +4 -13
  36. package/dist/hooks/useServerSideRowModel.d.ts +5 -18
  37. package/dist/hooks/useToolPanelController.d.ts +7 -9
  38. package/dist/index.cjs +8 -8
  39. package/dist/index.js +6585 -6406
  40. package/dist/logic/chunkedLoop.d.ts +8 -0
  41. package/dist/logic/detailRow.d.ts +5 -0
  42. package/dist/logic/valueStore.d.ts +6 -0
  43. package/package.json +1 -1
@@ -0,0 +1,46 @@
1
+ import { type GridStore } from '../model/gridStore';
2
+ import { type DetailIndexCacheHolder } from '../logic/detailRow';
3
+ import { type AutoHeightMeasurer } from '../controllers/autoHeightMeasurer';
4
+ import { type ScrollSyncController } from '../controllers/scrollSyncController';
5
+ import { type DebouncedValueStore } from '../controllers/debouncedValueStore';
6
+ import { type AutoSizeOnDataTrigger } from '../controllers/columnAutosizeRunner';
7
+ import { type ColumnResolution, type ColumnResolutionInputs, type PaneLayoutInputs, type PaneLayoutResolution } from './columnLayout';
8
+ import { type RowPipelineResolver, type ServerSideQueryResolution } from './rowPipeline';
9
+ import { type VerticalLayoutInputs, type VerticalLayoutResolution } from './verticalLayout';
10
+ import { type ColumnCommands } from './columnCommands';
11
+ import { type FilterPopoverCommands, type FilterPopoverDerived, type FilterPopoverDerivedInputs } from './filterPopoverCommands';
12
+ import { type RowSelectionCommands } from './rowSelectionCommands';
13
+ import { type GridApi } from './gridApi';
14
+ import { type DetailKeysNotifier, type HoverRowNotifier, type StateChangeNotifier } from './notifiers';
15
+ export declare const SERVER_SIDE_QUERY_DEBOUNCE_MS = 300;
16
+ export type GridEngineInit<T> = {
17
+ columnInputs: ColumnResolutionInputs<T>;
18
+ serverSide: {
19
+ isServerSide: boolean;
20
+ enableGlobalFilter: boolean;
21
+ enableColumnFilter: boolean;
22
+ enableSorting: boolean;
23
+ };
24
+ };
25
+ export type GridEngine<T> = {
26
+ store: GridStore;
27
+ resolveColumns: (inputs: ColumnResolutionInputs<T>) => ColumnResolution<T>;
28
+ resolvePaneLayout: (inputs: PaneLayoutInputs<T>) => PaneLayoutResolution<T>;
29
+ rowPipeline: RowPipelineResolver<T>;
30
+ resolveVerticalLayout: (inputs: VerticalLayoutInputs<T>) => VerticalLayoutResolution;
31
+ resolveFilterPopoverDerived: (inputs: FilterPopoverDerivedInputs<T>) => FilterPopoverDerived;
32
+ columnCommands: ColumnCommands<T>;
33
+ filterPopoverCommands: FilterPopoverCommands<T>;
34
+ rowSelectionCommands: RowSelectionCommands<T>;
35
+ gridApi: GridApi<T>;
36
+ hoverRowNotifier: HoverRowNotifier;
37
+ detailKeysNotifier: DetailKeysNotifier;
38
+ stateChangeNotifier: StateChangeNotifier<T>;
39
+ autoHeightMeasurer: AutoHeightMeasurer<T>;
40
+ scrollSync: ScrollSyncController;
41
+ serverSideQueryStore: DebouncedValueStore<ServerSideQueryResolution>;
42
+ autoSizeOnData: AutoSizeOnDataTrigger<T>;
43
+ detailIndexCache: DetailIndexCacheHolder;
44
+ dispose: () => void;
45
+ };
46
+ export declare const createGridEngine: <T>(init: GridEngineInit<T>) => GridEngine<T>;
@@ -0,0 +1,56 @@
1
+ import type { ColumnFilterUiType, ColumnFilterValue, GridColumn } from '../model/gridTypes';
2
+ import { type GridUiAction } from '../model/gridActions';
3
+ import { type ColumnFilterSetSelection } from '../logic/setFilterSelection';
4
+ import { type NumberFilterConditionDraft } from '../logic/numberFilterCondition';
5
+ import { type TextFilterConditionDraft } from '../logic/textFilterCondition';
6
+ import { type DateFilterConditionDraft } from '../logic/dateFilterCondition';
7
+ import type { SelectOptionEntry } from '../logic/selectOptions';
8
+ export type FilterPopoverDerivedInputs<T> = {
9
+ openedFilterColumn: GridColumn<T> | null;
10
+ openedFilterType: ColumnFilterUiType | null;
11
+ openedFilterSelectOptions: SelectOptionEntry[];
12
+ openedFilterAllValues: ReadonlySet<string>;
13
+ columnFilters: Record<string, ColumnFilterValue>;
14
+ };
15
+ export type FilterPopoverDerived = {
16
+ isDateSetFilterColumn: boolean;
17
+ openedPopoverSelectOptions: SelectOptionEntry[];
18
+ openedPopoverAllValues: ReadonlySet<string>;
19
+ openedSetFilterValue: ColumnFilterValue | undefined;
20
+ openedSetSelection: ColumnFilterSetSelection | null;
21
+ openedColumnCanInvert: boolean;
22
+ isComboFilterColumn: boolean;
23
+ };
24
+ export declare const createFilterPopoverDerivedResolver: <T>() => (inputs: FilterPopoverDerivedInputs<T>) => FilterPopoverDerived;
25
+ export type FilterPopoverStateLike = {
26
+ columnKey: string;
27
+ draftValue: string;
28
+ numberDraft: NumberFilterConditionDraft | null;
29
+ };
30
+ export type FilterPopoverCommandsArgs<T> = {
31
+ filterPopoverState: FilterPopoverStateLike | null;
32
+ openedFilterColumn: GridColumn<T> | null;
33
+ openedFilterType: ColumnFilterUiType | null;
34
+ columnFilters: Record<string, ColumnFilterValue>;
35
+ derived: FilterPopoverDerived;
36
+ dispatch: (action: GridUiAction) => void;
37
+ closeColumnFilterPopover: () => void;
38
+ updateNumberDraft: (draft: NumberFilterConditionDraft) => void;
39
+ updateTextDraft: (draft: TextFilterConditionDraft) => void;
40
+ updateDateDraft: (draft: DateFilterConditionDraft) => void;
41
+ };
42
+ export type FilterPopoverCommands<T> = {
43
+ update: (args: FilterPopoverCommandsArgs<T>) => void;
44
+ handleSetFilterValueToggle: (value: string) => void;
45
+ handleSetFilterSelectAllChange: (scope: 'all' | string[], nextChecked: boolean) => void;
46
+ handleSetFilterReplaceSelection: (values: string[]) => void;
47
+ clearSetFilterPopoverValue: () => void;
48
+ handleNumberConditionDraftChange: (draft: NumberFilterConditionDraft) => void;
49
+ handleTextConditionDraftChange: (draft: TextFilterConditionDraft) => void;
50
+ handleDateConditionDraftChange: (draft: DateFilterConditionDraft) => void;
51
+ handleComboConditionClear: () => void;
52
+ handleComboSelectionClear: () => void;
53
+ applyFilterPopoverValue: () => void;
54
+ clearFilterPopoverValue: () => void;
55
+ };
56
+ export declare const createFilterPopoverCommands: <T>() => FilterPopoverCommands<T>;
@@ -0,0 +1,61 @@
1
+ import type { DetailRowOptions, GridColumn, GridRowKey, GridUiState, RowModel, RowSelectionState, ScrollAlign, SpreadsheetGridHandle, SpreadsheetGridProps } from '../model/gridTypes';
2
+ import { type GridUiAction } from '../model/gridActions';
3
+ import { type GridPaneLayout } from '../logic/geometry';
4
+ import { type RowMetrics } from '../logic/verticalGeometry';
5
+ import { type DetailIndexCache } from '../logic/detailRow';
6
+ import { type GroupTree } from '../logic/grouping';
7
+ import type { ToolPanelTab } from '../controllers/toolPanelController';
8
+ type ReadonlyRef<V> = {
9
+ readonly current: V;
10
+ };
11
+ export type GridApiArgs<T> = {
12
+ scrollContainerRef: ReadonlyRef<HTMLElement | null>;
13
+ dispatch: (action: GridUiAction) => void;
14
+ rowModel: RowModel<T>;
15
+ viewRowCount: number;
16
+ leafRowCount: number;
17
+ groupTree: GroupTree<T> | null;
18
+ rowMetrics: RowMetrics;
19
+ paneLayout: GridPaneLayout<T>;
20
+ orderedColumns: GridColumn<T>[];
21
+ columns: GridColumn<T>[];
22
+ onColumnsChange: ((nextColumns: GridColumn<T>[]) => void) | undefined;
23
+ uiState: GridUiState;
24
+ headerHeight: number;
25
+ verticalScaleFactor: number;
26
+ leftPaneTotalWidth: number;
27
+ rightPaneTotalWidth: number;
28
+ centerLeadingWidth: number;
29
+ windowFirstRow: number;
30
+ windowLastRow: number;
31
+ physicalBodyHeight: number;
32
+ rows: T[];
33
+ isServerSide: boolean;
34
+ serverSideRefresh: () => void;
35
+ resolvedRowKeyGetter: (row: T, sourceRowIndex: number) => GridRowKey;
36
+ isRowExportable: SpreadsheetGridProps<T>['isRowExportable'];
37
+ activeToolPanelTab: ToolPanelTab | null;
38
+ openToolPanel: (tab: ToolPanelTab) => void;
39
+ closeToolPanel: () => void;
40
+ undoRows: () => void;
41
+ redoRows: () => void;
42
+ canUndoRows: () => boolean;
43
+ canRedoRows: () => boolean;
44
+ clearUndoHistory: () => void;
45
+ detailRowEnabled: boolean;
46
+ detailIsExpandable: DetailRowOptions<T>['isExpandable'];
47
+ detailIndexCacheRef: ReadonlyRef<DetailIndexCache>;
48
+ moveRowByKey: (rowKey: GridRowKey, toIndex: number) => void;
49
+ commitRowSelection: (next: RowSelectionState) => void;
50
+ markApiScroll: () => void;
51
+ };
52
+ export type GridApi<T> = {
53
+ update: (args: GridApiArgs<T>) => void;
54
+ handle: SpreadsheetGridHandle<T>;
55
+ applyScroll: (logicalTop: number | null, left: number | null) => void;
56
+ verticalTargetFor: (viewRowIndex: number, align: ScrollAlign) => number | null;
57
+ horizontalTargetFor: (colIndex: number, align: ScrollAlign) => number | null;
58
+ scrollToCellInternal: (viewRowIndex: number, colIndex: number, align: ScrollAlign) => void;
59
+ };
60
+ export declare const createGridApi: <T>() => GridApi<T>;
61
+ export {};
@@ -0,0 +1,2 @@
1
+ export type MemoFn<Args extends readonly unknown[], R> = (...args: Args) => R;
2
+ export declare const createMemo: <Args extends readonly unknown[], R>(compute: (...args: Args) => R) => MemoFn<Args, R>;
@@ -0,0 +1,35 @@
1
+ import type { GridColumn, GridRowKey, GridSortState, GridState, GridUiState } from '../model/gridTypes';
2
+ export type HoverRowNotifierArgs = {
3
+ enableRowHover: boolean;
4
+ isHoverControlled: boolean;
5
+ onHoveredRowChange: ((index: number | null, meta: {
6
+ source: 'pointer';
7
+ }) => void) | undefined;
8
+ setHoveredRowIndex: (index: number | null) => void;
9
+ };
10
+ export type HoverRowAction = number | null | ((current: number | null) => number | null);
11
+ export type HoverRowNotifier = {
12
+ update: (args: HoverRowNotifierArgs) => void;
13
+ applyHoveredRowChange: (action: HoverRowAction) => void;
14
+ };
15
+ export declare const createHoverRowNotifier: () => HoverRowNotifier;
16
+ export type DetailKeysNotifierArgs = {
17
+ expandedKeys: ReadonlySet<GridRowKey>;
18
+ onChange: ((keys: GridRowKey[]) => void) | undefined;
19
+ };
20
+ export type DetailKeysNotifier = {
21
+ update: (args: DetailKeysNotifierArgs) => void;
22
+ };
23
+ export declare const createDetailKeysNotifier: () => DetailKeysNotifier;
24
+ export type StateChangeNotifierArgs<T> = {
25
+ columnWidths: GridUiState['columnWidths'];
26
+ filters: GridUiState['filters'];
27
+ sort: GridSortState;
28
+ dragState: GridUiState['dragState'];
29
+ columns: GridColumn<T>[];
30
+ onStateChange: ((state: GridState) => void) | undefined;
31
+ };
32
+ export type StateChangeNotifier<T> = {
33
+ update: (args: StateChangeNotifierArgs<T>) => void;
34
+ };
35
+ export declare const createStateChangeNotifier: <T>() => StateChangeNotifier<T>;
@@ -0,0 +1,50 @@
1
+ import type { ColumnFilterValue, GridColumn, GridRowKey, GridSortState, RowModel, ServerSideQuery } from '../model/gridTypes';
2
+ import { type RowOrder } from '../logic/filtering';
3
+ import { type GroupTree, type GroupedDisplay } from '../logic/grouping';
4
+ export type RowOrderInputs<T> = {
5
+ rows: T[];
6
+ visibleColumns: GridColumn<T>[];
7
+ columnFilters: Record<string, ColumnFilterValue>;
8
+ globalFilteredOrder: RowOrder;
9
+ sort: GridSortState;
10
+ rowDragAvailable: boolean;
11
+ };
12
+ export type RowOrderResolution = {
13
+ order: RowOrder;
14
+ orderIsIdentity: boolean;
15
+ rowDragOperable: boolean;
16
+ };
17
+ export type ClientSideRowModelInputs<T> = {
18
+ rows: T[];
19
+ order: RowOrder;
20
+ rowGroupingActive: boolean;
21
+ groupColumns: GridColumn<T>[];
22
+ aggColumns: GridColumn<T>[];
23
+ collapsedGroupKeys: ReadonlySet<string>;
24
+ rowKeyGetter: (row: T, index: number) => GridRowKey;
25
+ };
26
+ export type ClientSideRowModelResolution<T> = {
27
+ groupTree: GroupTree<T> | null;
28
+ groupedDisplay: GroupedDisplay | null;
29
+ rowModel: RowModel<T>;
30
+ };
31
+ export type ServerSideQueryInputs = {
32
+ isServerSide: boolean;
33
+ globalFilterEnabled: boolean;
34
+ globalText: string;
35
+ columnFilterEnabled: boolean;
36
+ columnFilters: Record<string, ColumnFilterValue>;
37
+ sortingEnabled: boolean;
38
+ sort: GridSortState;
39
+ };
40
+ export type ServerSideQueryResolution = {
41
+ query: ServerSideQuery;
42
+ queryKey: string;
43
+ };
44
+ export declare const createRowPipelineResolver: <T>() => {
45
+ resolveBaseOrder: (rowCount: number) => RowOrder;
46
+ resolveOrder: (inputs: RowOrderInputs<T>) => RowOrderResolution;
47
+ resolveClientSideRowModel: (inputs: ClientSideRowModelInputs<T>) => ClientSideRowModelResolution<T>;
48
+ resolveServerSideQuery: (inputs: ServerSideQueryInputs) => ServerSideQueryResolution;
49
+ };
50
+ export type RowPipelineResolver<T> = ReturnType<typeof createRowPipelineResolver<T>>;
@@ -0,0 +1,21 @@
1
+ import type { RowModel, RowSelectionModel, RowSelectionState } from '../model/gridTypes';
2
+ import { type GridUiAction } from '../model/gridActions';
3
+ export type RowSelectionCommandsArgs<T> = {
4
+ rowModel: RowModel<T>;
5
+ rowSelectionState: RowSelectionState;
6
+ rowSelectionMode: 'single' | 'multiple';
7
+ onRowSelectionChange: ((model: RowSelectionModel) => void) | undefined;
8
+ controlledRowSelectionModel: RowSelectionModel | undefined;
9
+ leafRowCount: number;
10
+ dispatch: (action: GridUiAction) => void;
11
+ };
12
+ export type RowSelectionCommands<T> = {
13
+ update: (args: RowSelectionCommandsArgs<T>) => void;
14
+ commitRowSelection: (next: RowSelectionState) => void;
15
+ handleGutterRowSelect: (viewIndex: number, opts: {
16
+ shiftKey: boolean;
17
+ }) => void;
18
+ handleGutterRowSelectDrag: (viewIndex: number) => void;
19
+ handleToggleSelectAllRows: () => void;
20
+ };
21
+ export declare const createRowSelectionCommands: <T>() => RowSelectionCommands<T>;
@@ -0,0 +1,52 @@
1
+ import type { GridColumn, GridRowKey, RowModel } from '../model/gridTypes';
2
+ import { type DetailRowExtra, type RowMetrics, type VerticalGeometry, type VerticalRow } from '../logic/verticalGeometry';
3
+ import { type RowHeightStore } from '../logic/rowHeightStore';
4
+ import { resolveDetailRowExtras, type DetailIndexCache } from '../logic/detailRow';
5
+ type ReadonlyRef<V> = {
6
+ readonly current: V;
7
+ };
8
+ export type DetailLayerEntry = {
9
+ rowKey: GridRowKey;
10
+ virtualRow: VerticalRow;
11
+ };
12
+ type DetailIsExpandable<T> = Parameters<typeof resolveDetailRowExtras<T>>[0]['isExpandable'];
13
+ export type VerticalLayoutInputs<T> = {
14
+ isServerSide: boolean;
15
+ autoHeight: boolean;
16
+ visibleColumns: GridColumn<T>[];
17
+ viewRowCount: number;
18
+ estimateRowHeight: number;
19
+ rowHeight: number;
20
+ headerHeight: number;
21
+ viewportHeight: number;
22
+ scrollTop: number;
23
+ rowModel: RowModel<T>;
24
+ measuredHeights: Map<GridRowKey, number>;
25
+ autoHeightVersion: number;
26
+ detailRowEnabled: boolean;
27
+ expandedDetailRowKeys: ReadonlySet<GridRowKey>;
28
+ detailHeight: number;
29
+ detailIsExpandable: DetailIsExpandable<T>;
30
+ detailIndexCacheRef: ReadonlyRef<DetailIndexCache>;
31
+ };
32
+ export type VerticalLayoutResolution = {
33
+ hasAutoHeightColumn: boolean;
34
+ autoHeightActive: boolean;
35
+ rowHeightStore: RowHeightStore | null;
36
+ baseRowMetrics: RowMetrics;
37
+ detailExtras: readonly DetailRowExtra[];
38
+ detailActive: boolean;
39
+ rowMetrics: RowMetrics;
40
+ verticalGeometry: VerticalGeometry;
41
+ virtualRows: VerticalGeometry['rows'];
42
+ virtualRowIndexes: VerticalGeometry['rowIndexSet'];
43
+ detailEntries: readonly DetailLayerEntry[];
44
+ windowFirstRow: number;
45
+ windowLastRow: number;
46
+ physicalBodyHeight: number;
47
+ bodyLayerTransform: string | undefined;
48
+ verticalScaleFactor: number;
49
+ overlayBaseOffset: number;
50
+ };
51
+ export declare const createVerticalLayoutResolver: <T>() => (inputs: VerticalLayoutInputs<T>) => VerticalLayoutResolution;
52
+ export {};
@@ -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;
@@ -2,4 +2,6 @@ export type ControllerLike<Args> = {
2
2
  update: (args: Args) => void;
3
3
  dispose?: () => void;
4
4
  };
5
- export declare function useController<Args, C extends ControllerLike<Args>>(create: () => C, args: Args): C;
5
+ export type ControllerUpdateTiming = 'layout' | 'passive';
6
+ export declare function useControllerLifecycle<Args, C extends ControllerLike<Args>>(controller: C, args: Args, timing?: ControllerUpdateTiming): void;
7
+ export declare function useController<Args, C extends ControllerLike<Args>>(create: () => C, args: Args, timing?: ControllerUpdateTiming): 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,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;