@ishibashi0112/spreadsheet-grid 0.36.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 (28) hide show
  1. package/dist/controllers/columnAutosizeRunner.d.ts +20 -0
  2. package/dist/controllers/columnHeaderDragController.d.ts +44 -0
  3. package/dist/controllers/columnMenuController.d.ts +49 -0
  4. package/dist/controllers/contextMenuController.d.ts +30 -0
  5. package/dist/controllers/filterPopoverController.d.ts +53 -0
  6. package/dist/controllers/globalFilteredOrder.d.ts +38 -0
  7. package/dist/controllers/pointerInteractionsController.d.ts +74 -0
  8. package/dist/controllers/popoverSupport.d.ts +18 -0
  9. package/dist/controllers/rowDragController.d.ts +40 -0
  10. package/dist/controllers/selectOptionsCollector.d.ts +31 -0
  11. package/dist/controllers/serverSideRowModel.d.ts +36 -0
  12. package/dist/controllers/toolPanelController.d.ts +36 -0
  13. package/dist/hooks/useCellContextMenuController.d.ts +7 -13
  14. package/dist/hooks/useColumnAutosizeRunner.d.ts +3 -13
  15. package/dist/hooks/useColumnHeaderDragController.d.ts +5 -16
  16. package/dist/hooks/useColumnMenuController.d.ts +10 -12
  17. package/dist/hooks/useColumnSelectOptionsCollector.d.ts +2 -10
  18. package/dist/hooks/useFilterPopoverController.d.ts +16 -25
  19. package/dist/hooks/useGlobalFilteredOrder.d.ts +4 -8
  20. package/dist/hooks/useGridPointerInteractions.d.ts +15 -39
  21. package/dist/hooks/useRowDragController.d.ts +4 -13
  22. package/dist/hooks/useServerSideRowModel.d.ts +5 -18
  23. package/dist/hooks/useToolPanelController.d.ts +7 -9
  24. package/dist/index.cjs +8 -8
  25. package/dist/index.js +3474 -3537
  26. package/dist/logic/chunkedLoop.d.ts +8 -0
  27. package/dist/logic/valueStore.d.ts +6 -0
  28. package/package.json +1 -1
@@ -0,0 +1,20 @@
1
+ import { gridActions } from '../model/gridActions';
2
+ import type { GridColumn, RowModel } from '../model/gridTypes';
3
+ type ReadonlyRef<V> = {
4
+ readonly current: V;
5
+ };
6
+ export type ColumnAutosizeRunnerArgs<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 type ColumnAutosizeRunner<T> = {
13
+ update: (args: ColumnAutosizeRunnerArgs<T>) => void;
14
+ runAutosize: (columns: GridColumn<T>[]) => Promise<void>;
15
+ subscribe: (listener: () => void) => () => void;
16
+ getSnapshot: () => boolean;
17
+ dispose: () => void;
18
+ };
19
+ export declare const createColumnAutosizeRunner: <T>() => ColumnAutosizeRunner<T>;
20
+ export {};
@@ -0,0 +1,44 @@
1
+ import type { GridColumn, GridColumnPinned, GridResolvedSlot } from '../model/gridTypes';
2
+ import { type ColumnPane, type GridPaneLayout } from '../logic/geometry';
3
+ type ApplyColumnOrderAndPin = (orderedKeys: string[], pinOverride?: Map<string, GridColumnPinned | undefined>) => void;
4
+ export declare function computeHeaderReorderedKeys<T>(columns: GridColumn<T>[], draggedKey: string, targetPane: ColumnPane, slotInTargetVisible: number): string[] | null;
5
+ type ReadonlyRef<V> = {
6
+ readonly current: V;
7
+ };
8
+ export type ColumnHeaderDragArgs<T> = {
9
+ enabled: boolean;
10
+ columns: GridColumn<T>[];
11
+ paneLayout: GridPaneLayout<T>;
12
+ leftPaneScrollRef: ReadonlyRef<HTMLElement | null>;
13
+ rightPaneScrollRef: ReadonlyRef<HTMLElement | null>;
14
+ bodyScrollRef: ReadonlyRef<HTMLElement | null>;
15
+ scrollContainerRef: ReadonlyRef<HTMLElement | null>;
16
+ leftIndicatorRef: ReadonlyRef<HTMLElement | null>;
17
+ centerIndicatorRef: ReadonlyRef<HTMLElement | null>;
18
+ rightIndicatorRef: ReadonlyRef<HTMLElement | null>;
19
+ leftLeadingWidth: number;
20
+ centerLeadingWidth: number;
21
+ rightLeadingWidth: number;
22
+ applyColumnOrderAndPin: ApplyColumnOrderAndPin;
23
+ ghostSlot?: GridResolvedSlot;
24
+ };
25
+ export type ColumnDragHandlePointerEvent = {
26
+ button: number;
27
+ pointerId: number;
28
+ clientX: number;
29
+ clientY: number;
30
+ currentTarget: {
31
+ setPointerCapture: (pointerId: number) => void;
32
+ releasePointerCapture: (pointerId: number) => void;
33
+ };
34
+ preventDefault: () => void;
35
+ stopPropagation: () => void;
36
+ };
37
+ export type ColumnHeaderDragController<T> = {
38
+ update: (args: ColumnHeaderDragArgs<T>) => void;
39
+ onColumnDragHandlePointerDown: (column: GridColumn<T>, event: ColumnDragHandlePointerEvent) => void;
40
+ applyReorderSettle: () => void;
41
+ dispose: () => void;
42
+ };
43
+ export declare const createColumnHeaderDragController: <T>() => ColumnHeaderDragController<T>;
44
+ export {};
@@ -0,0 +1,49 @@
1
+ import type { GridColumn } from '../model/gridTypes';
2
+ import { type ReadonlyElementRef } from './popoverSupport';
3
+ export type ColumnMenuLayout = {
4
+ top: number;
5
+ left: number;
6
+ width: number;
7
+ maxHeight?: number;
8
+ };
9
+ export type ColumnMenuSnapshot = {
10
+ columnKey: string | null;
11
+ layout: ColumnMenuLayout | null;
12
+ };
13
+ export type ColumnMenuControllerArgs<T> = {
14
+ visibleColumns: GridColumn<T>[];
15
+ enableColumnMenu: boolean;
16
+ gridRootRef: ReadonlyElementRef;
17
+ };
18
+ export type MenuButtonPointerEvent = {
19
+ button: number;
20
+ pointerType: string;
21
+ currentTarget: HTMLButtonElement;
22
+ preventDefault: () => void;
23
+ stopPropagation: () => void;
24
+ };
25
+ export type MenuButtonClickEvent = {
26
+ currentTarget: HTMLButtonElement;
27
+ preventDefault: () => void;
28
+ stopPropagation: () => void;
29
+ };
30
+ export type MenuContextEvent = {
31
+ clientX: number;
32
+ clientY: number;
33
+ preventDefault: () => void;
34
+ stopPropagation: () => void;
35
+ };
36
+ export type ColumnMenuController<T> = {
37
+ update: (args: ColumnMenuControllerArgs<T>) => void;
38
+ subscribe: (listener: () => void) => () => void;
39
+ getSnapshot: () => ColumnMenuSnapshot;
40
+ panelRef: {
41
+ current: HTMLDivElement | null;
42
+ };
43
+ openFromButton: (column: GridColumn<T>, event: MenuButtonPointerEvent) => void;
44
+ openFromButtonClick: (column: GridColumn<T>, event: MenuButtonClickEvent) => void;
45
+ openFromContextMenu: (column: GridColumn<T>, event: MenuContextEvent) => void;
46
+ close: () => void;
47
+ dispose: () => void;
48
+ };
49
+ export declare const createColumnMenuController: <T>() => ColumnMenuController<T>;
@@ -0,0 +1,30 @@
1
+ import type { GridContextMenuItem, GridContextMenuParams } from '../model/gridTypes';
2
+ import { type ReadonlyElementRef } from './popoverSupport';
3
+ export type CellContextMenuLayout = {
4
+ top: number;
5
+ left: number;
6
+ width: number;
7
+ };
8
+ export type CellContextMenuState<T> = {
9
+ params: GridContextMenuParams<T>;
10
+ items: GridContextMenuItem[];
11
+ };
12
+ export type ContextMenuSnapshot<T> = {
13
+ state: CellContextMenuState<T> | null;
14
+ layout: CellContextMenuLayout | null;
15
+ };
16
+ export type ContextMenuControllerArgs = {
17
+ gridRootRef: ReadonlyElementRef;
18
+ };
19
+ export type ContextMenuController<T> = {
20
+ update: (args: ContextMenuControllerArgs) => void;
21
+ subscribe: (listener: () => void) => () => void;
22
+ getSnapshot: () => ContextMenuSnapshot<T>;
23
+ panelRef: {
24
+ current: HTMLDivElement | null;
25
+ };
26
+ open: (params: GridContextMenuParams<T>, items: GridContextMenuItem[]) => void;
27
+ close: () => void;
28
+ dispose: () => void;
29
+ };
30
+ export declare const createContextMenuController: <T>() => ContextMenuController<T>;
@@ -0,0 +1,53 @@
1
+ import type { ColumnFilterUiType, ColumnFilterValue, GridColumn } from '../model/gridTypes';
2
+ import { type NumberFilterConditionDraft } from '../logic/numberFilterCondition';
3
+ import { type TextFilterConditionDraft } from '../logic/textFilterCondition';
4
+ import { type DateFilterConditionDraft } from '../logic/dateFilterCondition';
5
+ import { type ReadonlyElementRef } from './popoverSupport';
6
+ export 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
+ };
20
+ export type FilterPopoverSnapshot = {
21
+ state: HeaderFilterPopoverState | null;
22
+ layout: FilterPopoverLayout | null;
23
+ };
24
+ export type FilterPopoverControllerArgs<T> = {
25
+ visibleColumns: GridColumn<T>[];
26
+ columnFilterValues: Record<string, ColumnFilterValue>;
27
+ enableColumnFilter: boolean;
28
+ gridRootRef: ReadonlyElementRef;
29
+ resolveColumnFilterType?: (column: GridColumn<T>) => ColumnFilterUiType;
30
+ };
31
+ export type FilterPopoverController<T> = {
32
+ update: (args: FilterPopoverControllerArgs<T>) => void;
33
+ subscribe: (listener: () => void) => () => void;
34
+ getSnapshot: () => FilterPopoverSnapshot;
35
+ panelRef: {
36
+ current: HTMLDivElement | null;
37
+ };
38
+ textInputRef: {
39
+ current: HTMLInputElement | null;
40
+ };
41
+ selectRef: {
42
+ current: HTMLSelectElement | null;
43
+ };
44
+ open: (column: GridColumn<T>) => void;
45
+ close: () => void;
46
+ updateDraft: (value: string) => void;
47
+ updateNumberDraft: (draft: NumberFilterConditionDraft) => void;
48
+ updateTextDraft: (draft: TextFilterConditionDraft) => void;
49
+ updateDateDraft: (draft: DateFilterConditionDraft) => void;
50
+ dispose: () => void;
51
+ };
52
+ export declare const resolveOpenedFilterColumn: <T>(visibleColumns: GridColumn<T>[], state: HeaderFilterPopoverState | null) => GridColumn<T> | null;
53
+ export declare const createFilterPopoverController: <T>() => FilterPopoverController<T>;
@@ -0,0 +1,38 @@
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
+ };
9
+ export type GlobalFilterKey<T> = {
10
+ rows: T[];
11
+ baseOrder: RowOrder;
12
+ columns: GridColumn<T>[];
13
+ needle: string;
14
+ };
15
+ export declare const resolveSyncGlobalFilteredOrder: <T>(key: GlobalFilterKey<T>, deferredText: string, enabled: boolean) => GlobalFilteredOrderResult | null;
16
+ export type GlobalFilteredOrderArgs<T> = GlobalFilterKey<T> & {
17
+ needsAsync: boolean;
18
+ };
19
+ type ReadyState<T> = GlobalFilterKey<T> & {
20
+ order: RowOrder;
21
+ rowsLength: number;
22
+ };
23
+ type ProgressState<T> = GlobalFilterKey<T> & {
24
+ progress: number;
25
+ };
26
+ export type GlobalFilteredOrderSnapshot<T> = {
27
+ ready: ReadyState<T> | null;
28
+ progress: ProgressState<T> | null;
29
+ };
30
+ export declare const selectGlobalFilteredOrderResult: <T>(syncResult: GlobalFilteredOrderResult | null, snapshot: GlobalFilteredOrderSnapshot<T>, key: GlobalFilterKey<T>) => GlobalFilteredOrderResult;
31
+ export type GlobalFilteredOrderRunner<T> = {
32
+ update: (args: GlobalFilteredOrderArgs<T>) => void;
33
+ subscribe: (listener: () => void) => () => void;
34
+ getSnapshot: () => GlobalFilteredOrderSnapshot<T>;
35
+ dispose: () => void;
36
+ };
37
+ export declare const createGlobalFilteredOrderRunner: <T>() => GlobalFilteredOrderRunner<T>;
38
+ export {};
@@ -0,0 +1,74 @@
1
+ import { type GridUiAction } from '../model/gridActions';
2
+ import type { CellCoord, GridColumn, GridUiState } from '../model/gridTypes';
3
+ import { type GridPaneLayout } from '../logic/geometry';
4
+ import { type RowMetrics } from '../logic/verticalGeometry';
5
+ export declare const TOUCH_TAP_SLOP_PX = 10;
6
+ export declare const TOUCH_DOUBLE_TAP_MS = 300;
7
+ type MutableRef<V> = {
8
+ current: V;
9
+ };
10
+ type ReadonlyRef<V> = {
11
+ readonly current: V;
12
+ };
13
+ export type GridPointerEventLike = {
14
+ button: number;
15
+ pointerType: string;
16
+ pointerId: number;
17
+ clientX: number;
18
+ clientY: number;
19
+ shiftKey: boolean;
20
+ preventDefault: () => void;
21
+ };
22
+ export type PointerInteractionsArgs<T> = {
23
+ gridRootRef: ReadonlyRef<HTMLElement | null>;
24
+ bodyScrollRef: ReadonlyRef<HTMLElement | null>;
25
+ scrollContainerRef: ReadonlyRef<HTMLElement | null>;
26
+ leftPaneScrollRef: ReadonlyRef<HTMLElement | null>;
27
+ rightPaneScrollRef: ReadonlyRef<HTMLElement | null>;
28
+ pointerClientRef: MutableRef<{
29
+ x: number;
30
+ y: number;
31
+ } | null>;
32
+ autoScrollFrameRef: MutableRef<number | null>;
33
+ uiState: GridUiState;
34
+ dispatch: (action: GridUiAction) => void;
35
+ enableRangeSelection: boolean;
36
+ enableSorting: boolean;
37
+ orderedColumns: GridColumn<T>[];
38
+ filteredRowsLength: number;
39
+ visibleColumnsLength: number;
40
+ paneLayout: GridPaneLayout<T>;
41
+ leftLeadingWidth: number;
42
+ centerLeadingWidth: number;
43
+ rightLeadingWidth: number;
44
+ headerHeight: number;
45
+ rowMetrics: RowMetrics;
46
+ verticalScaleFactor: number;
47
+ setHoveredRowIndex: (value: number | null) => void;
48
+ setHoveredColumnIndex: (value: number | null) => void;
49
+ enableRowHover: boolean;
50
+ enableColumnHeaderHover: boolean;
51
+ enableRowSelection: boolean;
52
+ onGutterRowSelect: (viewIndex: number, opts: {
53
+ shiftKey: boolean;
54
+ }) => void;
55
+ onGutterRowSelectDrag: (viewIndex: number) => void;
56
+ onCellDoubleClickRef: ReadonlyRef<(cell: CellCoord) => void>;
57
+ };
58
+ export type PointerInteractionsController<T> = {
59
+ update: (args: PointerInteractionsArgs<T>) => void;
60
+ updateSelectionFromPointer: (clientX: number, clientY: number) => void;
61
+ handleCellPointerDown: (cell: CellCoord, event: GridPointerEventLike) => void;
62
+ handleCellDoubleClick: (cell: CellCoord) => void;
63
+ handleCellPointerEnter: (cell: CellCoord, event: GridPointerEventLike) => void;
64
+ handleNativeDragStart: (event: {
65
+ preventDefault: () => void;
66
+ }) => void;
67
+ handleRowHeaderPointerDown: (rowIndex: number, event: GridPointerEventLike) => void;
68
+ handleRowHeaderPointerEnter: (rowIndex: number, event: GridPointerEventLike) => void;
69
+ handleColumnHeaderPointerDown: (colIndex: number, event: GridPointerEventLike) => void;
70
+ handleColumnHeaderPointerEnter: (colIndex: number, event: GridPointerEventLike) => void;
71
+ dispose: () => void;
72
+ };
73
+ export declare const createPointerInteractionsController: <T>() => PointerInteractionsController<T>;
74
+ export {};
@@ -0,0 +1,18 @@
1
+ export type ReadonlyElementRef<E extends HTMLElement = HTMLElement> = {
2
+ readonly current: E | null;
3
+ };
4
+ export declare const blurForPopover: (gridRoot: HTMLElement | null) => void;
5
+ export declare const restoreGridFocus: (gridRootRef: ReadonlyElementRef) => void;
6
+ export type PopoverWindowHandlers = {
7
+ onResize?: () => void;
8
+ onScroll?: (event: Event) => void;
9
+ isInside: (target: Node) => boolean;
10
+ onOutsidePointerDown: () => void;
11
+ onKeyDown?: (event: KeyboardEvent) => void;
12
+ };
13
+ export type PopoverWindowBindings = {
14
+ attach: () => void;
15
+ detach: () => void;
16
+ isAttached: () => boolean;
17
+ };
18
+ export declare const createPopoverWindowBindings: (handlers: PopoverWindowHandlers) => PopoverWindowBindings;
@@ -0,0 +1,40 @@
1
+ import type { RowMetrics } from '../logic/verticalGeometry';
2
+ import type { GridResolvedSlot } from '../model/gridTypes';
3
+ type ReadonlyRef<V> = {
4
+ readonly current: V;
5
+ };
6
+ export type RowDragArgs = {
7
+ enabled: boolean;
8
+ rowMetrics: RowMetrics;
9
+ headerHeight: number;
10
+ verticalScaleFactor: number;
11
+ windowBaseOffsetPx: number;
12
+ scrollContainerRef: ReadonlyRef<HTMLElement | null>;
13
+ bodyScrollRef: ReadonlyRef<HTMLElement | null>;
14
+ leftIndicatorRef: ReadonlyRef<HTMLElement | null>;
15
+ centerIndicatorRef: ReadonlyRef<HTMLElement | null>;
16
+ rightIndicatorRef: ReadonlyRef<HTMLElement | null>;
17
+ getRowDragLabel: (viewIndex: number) => string;
18
+ commitRowMove: (fromIndex: number, toIndex: number) => void;
19
+ ghostSlot?: GridResolvedSlot;
20
+ };
21
+ export type RowDragHandlePointerEvent = {
22
+ button: number;
23
+ pointerId: number;
24
+ clientX: number;
25
+ clientY: number;
26
+ currentTarget: {
27
+ setPointerCapture: (pointerId: number) => void;
28
+ releasePointerCapture: (pointerId: number) => void;
29
+ };
30
+ preventDefault: () => void;
31
+ stopPropagation: () => void;
32
+ };
33
+ export type RowDragController = {
34
+ update: (args: RowDragArgs) => void;
35
+ onRowDragHandlePointerDown: (viewIndex: number, event: RowDragHandlePointerEvent) => void;
36
+ applyReorderSettle: () => void;
37
+ dispose: () => void;
38
+ };
39
+ export declare const createRowDragController: () => RowDragController;
40
+ export {};
@@ -0,0 +1,31 @@
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
+ export declare const IDLE_SELECT_OPTIONS_RESULT: ColumnSelectOptionsResult;
12
+ export type RawValueAccessor = (index: number) => unknown;
13
+ export declare const resolveSyncSelectOptions: <T>(column: GridColumn<T> | null, rowCount: number, getRawValueAt: RawValueAccessor) => ColumnSelectOptionsResult | null;
14
+ export type SelectOptionsCollectorArgs = {
15
+ needsAsync: boolean;
16
+ rowCount: number;
17
+ getRawValueAt: RawValueAccessor;
18
+ };
19
+ export type SelectOptionsCollectSnapshot = {
20
+ source: RawValueAccessor | null;
21
+ rowCount: number;
22
+ result: ColumnSelectOptionsResult;
23
+ };
24
+ export declare const selectCollectorResult: (snapshot: SelectOptionsCollectSnapshot, rowCount: number, getRawValueAt: RawValueAccessor) => ColumnSelectOptionsResult;
25
+ export type SelectOptionsCollector = {
26
+ update: (args: SelectOptionsCollectorArgs) => void;
27
+ subscribe: (listener: () => void) => () => void;
28
+ getSnapshot: () => SelectOptionsCollectSnapshot;
29
+ dispose: () => void;
30
+ };
31
+ export declare const createSelectOptionsCollector: () => SelectOptionsCollector;
@@ -0,0 +1,36 @@
1
+ import type { GridRowKey, RowModel, ServerSideDataSource, ServerSideLoadErrorParams, ServerSideQuery, ServerSideWriteErrorParams } from '../model/gridTypes';
2
+ import { type ServerSideCellEditInput } from '../logic/serverSideEdits';
3
+ export type ServerSideRowModelArgs<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
+ };
19
+ export type ServerSideRowModelSnapshot<T> = {
20
+ rowModel: RowModel<T>;
21
+ rowCount: number;
22
+ loadError: ServerSideLoadErrorState | null;
23
+ writeError: ServerSideWriteErrorState | null;
24
+ };
25
+ export type ServerSideRowModelController<T> = {
26
+ update: (args: ServerSideRowModelArgs<T>) => void;
27
+ subscribe: (listener: () => void) => () => void;
28
+ getSnapshot: () => ServerSideRowModelSnapshot<T>;
29
+ isRowLoaded: (viewIndex: number) => boolean;
30
+ requestRange: (startIndex: number, endIndex: number) => void;
31
+ refresh: () => void;
32
+ retryFailedBlocks: () => void;
33
+ applyCellEdits: (edits: ServerSideCellEditInput<T>[]) => number;
34
+ dispose: () => void;
35
+ };
36
+ export declare const createServerSideRowModel: <T>(initial: ServerSideRowModelArgs<T>) => ServerSideRowModelController<T>;
@@ -0,0 +1,36 @@
1
+ import { type ReadonlyElementRef } from './popoverSupport';
2
+ export type ToolPanelTab = 'filter' | 'columns' | 'sort';
3
+ export type ToolPanelLayout = {
4
+ top: number;
5
+ left: number;
6
+ width: number;
7
+ };
8
+ export type ToolPanelControllerArgs = {
9
+ canUseFilterTab: boolean;
10
+ canUseColumnsTab: boolean;
11
+ canUseSortTab: boolean;
12
+ gridRootRef: ReadonlyElementRef;
13
+ alliedRef?: ReadonlyElementRef;
14
+ suppressEscape?: boolean;
15
+ onSuppressedEscape?: () => void;
16
+ };
17
+ export type ToolPanelSnapshot = {
18
+ requestedTab: ToolPanelTab | null;
19
+ layout: ToolPanelLayout | null;
20
+ flashTick: number;
21
+ };
22
+ export type ToolPanelController = {
23
+ update: (args: ToolPanelControllerArgs) => void;
24
+ subscribe: (listener: () => void) => () => void;
25
+ getSnapshot: () => ToolPanelSnapshot;
26
+ panelRef: {
27
+ current: HTMLDivElement | null;
28
+ };
29
+ open: (tab: ToolPanelTab) => void;
30
+ close: () => void;
31
+ move: (top: number, left: number) => void;
32
+ dispose: () => void;
33
+ };
34
+ export declare const resolveAvailableToolPanelTabs: (args: Pick<ToolPanelControllerArgs, "canUseFilterTab" | "canUseColumnsTab" | "canUseSortTab">) => ToolPanelTab[];
35
+ export declare const resolveActiveToolPanelTab: (requestedTab: ToolPanelTab | null, availableTabs: ToolPanelTab[]) => ToolPanelTab | null;
36
+ export declare const createToolPanelController: () => ToolPanelController;
@@ -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;