@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,31 @@
1
+ import { type GridUiAction } from '../model/gridActions';
2
+ import type { GridColumn, GridSelection, GridUiState, RowModel, SpreadsheetGridProps } from '../model/gridTypes';
3
+ import type { ServerSideCellEditInput } from '../logic/serverSideEdits';
4
+ export type ClipboardEventLike = {
5
+ clipboardData: {
6
+ getData: (type: string) => string;
7
+ } | null;
8
+ preventDefault: () => void;
9
+ };
10
+ export type ClipboardControllerArgs<T extends object> = {
11
+ rows: T[];
12
+ rowModel: RowModel<T>;
13
+ visibleColumns: GridColumn<T>[];
14
+ uiState: GridUiState;
15
+ readOnly: boolean;
16
+ canEditCell: SpreadsheetGridProps<T>['canEditCell'];
17
+ createRow?: () => T;
18
+ createOverflowColumn?: (columnIndex: number) => GridColumn<T>;
19
+ onRowsChange?: (nextRows: T[]) => void;
20
+ onColumnsChange?: (nextColumns: GridColumn<T>[]) => void;
21
+ applyServerSideCellEdits?: (edits: ServerSideCellEditInput<T>[]) => number;
22
+ isRowExportable?: SpreadsheetGridProps<T>['isRowExportable'];
23
+ dispatch: (action: GridUiAction) => void;
24
+ };
25
+ export type ClipboardController<T extends object> = {
26
+ update: (args: ClipboardControllerArgs<T>) => void;
27
+ handleCopy: () => Promise<void>;
28
+ handlePaste: (event: ClipboardEventLike) => void;
29
+ };
30
+ export declare const computeIsWholeGridSelected: (selection: GridSelection, viewRowCount: number, columnCount: number) => boolean;
31
+ export declare const createClipboardController: <T extends object>() => ClipboardController<T>;
@@ -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,27 @@
1
+ import { type GridUiAction } from '../model/gridActions';
2
+ import type { CellCoord, EditorCommitDirection, EditorCommitResult, GridColumn, GridUiState, RowModel } from '../model/gridTypes';
3
+ import type { ServerSideCellEditInput } from '../logic/serverSideEdits';
4
+ export type EditControllerArgs<T extends object> = {
5
+ uiState: GridUiState;
6
+ rows: T[];
7
+ visibleColumns: GridColumn<T>[];
8
+ rowModel: RowModel<T>;
9
+ setEditorInitialValue: (value: string) => void;
10
+ onRowsChange?: (nextRows: T[]) => void;
11
+ applyServerSideCellEdits?: (edits: ServerSideCellEditInput<T>[]) => number;
12
+ dispatch: (action: GridUiAction) => void;
13
+ gridRootRef: {
14
+ readonly current: HTMLElement | null;
15
+ };
16
+ editorActionGuardRef: {
17
+ current: boolean;
18
+ };
19
+ };
20
+ export type EditController<T extends object> = {
21
+ update: (args: EditControllerArgs<T>) => void;
22
+ activateSingleCell: (cell: CellCoord) => void;
23
+ startEditWithValue: (cell: CellCoord, initialValue: string) => void;
24
+ commitEdit: (committedValue: unknown, direction?: EditorCommitDirection) => EditorCommitResult;
25
+ cancelEdit: () => void;
26
+ };
27
+ export declare const createEditController: <T extends object>() => EditController<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,28 @@
1
+ import { type GridUiAction } from '../model/gridActions';
2
+ import type { CellCoord, GridSelection, UndoRedoState } from '../model/gridTypes.core';
3
+ export type GridHistoryEntry<T> = {
4
+ rows: T[];
5
+ selection: GridSelection;
6
+ activeCell: CellCoord | null;
7
+ };
8
+ export type HistoryControllerArgs<T> = {
9
+ rows: T[];
10
+ selection: GridSelection;
11
+ activeCell: CellCoord | null;
12
+ onRowsChange?: (nextRows: T[]) => void;
13
+ dispatch: (action: GridUiAction) => void;
14
+ enabled: boolean;
15
+ limit: number;
16
+ onUndoRedoStateChange?: (state: UndoRedoState) => void;
17
+ onAfterRestore?: (activeCell: CellCoord | null) => void;
18
+ };
19
+ export type HistoryController<T> = {
20
+ update: (args: HistoryControllerArgs<T>) => void;
21
+ handleRowsChange: (nextRows: T[]) => void;
22
+ undo: () => void;
23
+ redo: () => void;
24
+ canUndo: () => boolean;
25
+ canRedo: () => boolean;
26
+ clearHistory: () => void;
27
+ };
28
+ export declare const createHistoryController: <T>() => HistoryController<T>;
@@ -0,0 +1,36 @@
1
+ import { type GridUiAction } from '../model/gridActions';
2
+ import type { CellCoord, GridColumn, GridUiState, RowModel, SpreadsheetGridProps } from '../model/gridTypes';
3
+ export type GridKeyboardEventLike = {
4
+ key: string;
5
+ ctrlKey: boolean;
6
+ metaKey: boolean;
7
+ shiftKey: boolean;
8
+ altKey: boolean;
9
+ isComposing: boolean;
10
+ target: EventTarget | null;
11
+ preventDefault: () => void;
12
+ };
13
+ export type KeyboardControllerArgs<T> = {
14
+ uiState: GridUiState;
15
+ rowModel: RowModel<T>;
16
+ visibleColumns: GridColumn<T>[];
17
+ readOnly: boolean;
18
+ canEditCell: SpreadsheetGridProps<T>['canEditCell'];
19
+ setEditorInitialValue: (value: string) => void;
20
+ dispatch: (action: GridUiAction) => void;
21
+ handleCopy: () => Promise<void>;
22
+ handleCellDoubleClick: (cell: CellCoord) => void;
23
+ isWholeGridSelected: boolean;
24
+ selectEntireGrid: () => void;
25
+ onUndo: () => void;
26
+ onRedo: () => void;
27
+ onClearSelection: () => void;
28
+ enableClearOnDelete: boolean;
29
+ onToggleCheckboxCell: (cell: CellCoord) => void;
30
+ onToggleGroup: (groupKey: string) => void;
31
+ };
32
+ export type KeyboardController<T> = {
33
+ update: (args: KeyboardControllerArgs<T>) => void;
34
+ handleKeyDown: (event: GridKeyboardEventLike) => Promise<void>;
35
+ };
36
+ export declare const createKeyboardController: <T>() => KeyboardController<T>;
@@ -0,0 +1,21 @@
1
+ export type PanelHeaderDragPointerDown = {
2
+ button: number;
3
+ pointerId: number;
4
+ clientX: number;
5
+ clientY: number;
6
+ target: EventTarget | null;
7
+ preventDefault: () => void;
8
+ };
9
+ export type PanelHeaderDragStartArgs = {
10
+ layout: {
11
+ top: number;
12
+ left: number;
13
+ } | null;
14
+ onMove: (top: number, left: number) => void;
15
+ };
16
+ export type PanelHeaderDragController = {
17
+ startFromPointerDown: (event: PanelHeaderDragPointerDown, args: PanelHeaderDragStartArgs) => boolean;
18
+ isActive: () => boolean;
19
+ dispose: () => void;
20
+ };
21
+ export declare const createPanelHeaderDragController: () => PanelHeaderDragController;
@@ -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,5 @@
1
+ export declare const systemColorSchemeStore: {
2
+ subscribe(onChange: () => void): () => void;
3
+ getSnapshot(): boolean;
4
+ getServerSnapshot(): boolean;
5
+ };
@@ -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;
@@ -0,0 +1,6 @@
1
+ import type { GridResolvedSlot } from '../model/gridTypes.core';
2
+ export type TooltipController = {
3
+ setSlot: (slot: GridResolvedSlot | undefined) => void;
4
+ dispose: () => void;
5
+ };
6
+ export declare function acquireTooltipController(slot?: GridResolvedSlot): TooltipController;