@ishibashi0112/spreadsheet-grid 0.32.0 → 0.34.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.
- package/README.md +5 -3
- package/dist/ActiveCellOverlay.d.ts +3 -1
- package/dist/CellEditorLayer.d.ts +3 -1
- package/dist/SelectionOverlay.d.ts +3 -1
- package/dist/SpreadsheetGrid.d.ts +1 -1
- package/dist/editors/CheckboxCell.d.ts +3 -1
- package/dist/editors/SelectCellEditor.d.ts +3 -1
- package/dist/hooks/useColumnHeaderDragController.d.ts +2 -0
- package/dist/hooks/useGridClipboardController.d.ts +2 -1
- package/dist/hooks/useGridTooltip.d.ts +2 -1
- package/dist/hooks/useResolvedGridSlots.d.ts +3 -0
- package/dist/hooks/useRowDragController.d.ts +2 -0
- package/dist/index.cjs +8 -8
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3324 -3101
- package/dist/logic/exportCsv.d.ts +2 -1
- package/dist/logic/exportData.d.ts +2 -1
- package/dist/logic/slotDom.d.ts +8 -0
- package/dist/logic/slotProps.d.ts +18 -0
- package/dist/model/gridTypes.d.ts +48 -13
- package/dist/utils/clipboard.d.ts +1 -1
- package/dist/view/CellContextMenuPopover.d.ts +3 -2
- package/dist/view/ColumnFilterPopover.d.ts +3 -1
- package/dist/view/ColumnMenuPopover.d.ts +3 -1
- package/dist/view/DefaultGridBottomBar.d.ts +3 -1
- package/dist/view/DefaultGridTopBar.d.ts +3 -1
- package/dist/view/GridBodyLayer.d.ts +4 -5
- package/dist/view/GridDetailLayer.d.ts +4 -2
- package/dist/view/GridFilterChipBar.d.ts +3 -1
- package/dist/view/GridHeaderRow.d.ts +3 -5
- package/dist/view/GridScrollHint.d.ts +3 -1
- package/dist/view/RowSelectionCheckbox.d.ts +3 -1
- package/dist/view/ToolPanel.d.ts +3 -1
- package/package.json +5 -5
|
@@ -7,5 +7,6 @@ export type SerializeRowsToCsvParams<T> = {
|
|
|
7
7
|
delimiter?: string;
|
|
8
8
|
includeHeaders?: boolean;
|
|
9
9
|
bom?: boolean;
|
|
10
|
+
isRowIncluded?: (row: T, rowIndex: number) => boolean;
|
|
10
11
|
};
|
|
11
|
-
export declare const serializeRowsToCsv: <T>({ getRow, startRow, endRow, columns, delimiter, includeHeaders, bom, }: SerializeRowsToCsvParams<T>) => string;
|
|
12
|
+
export declare const serializeRowsToCsv: <T>({ getRow, startRow, endRow, columns, delimiter, includeHeaders, bom, isRowIncluded, }: SerializeRowsToCsvParams<T>) => string;
|
|
@@ -4,5 +4,6 @@ export type BuildGridExportDataParams<T> = {
|
|
|
4
4
|
startRow: number;
|
|
5
5
|
endRow: number;
|
|
6
6
|
columns: GridColumn<T>[];
|
|
7
|
+
isRowIncluded?: (row: T, rowIndex: number) => boolean;
|
|
7
8
|
};
|
|
8
|
-
export declare const buildGridExportData: <T>({ getRow, startRow, endRow, columns, }: BuildGridExportDataParams<T>) => GridExportData;
|
|
9
|
+
export declare const buildGridExportData: <T>({ getRow, startRow, endRow, columns, isRowIncluded, }: BuildGridExportDataParams<T>) => GridExportData;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type SlotPropsLike<S> = string | {
|
|
2
|
+
className?: string;
|
|
3
|
+
style?: S;
|
|
4
|
+
};
|
|
5
|
+
export type ResolvedSlotProps<S> = {
|
|
6
|
+
className?: string;
|
|
7
|
+
style?: S;
|
|
8
|
+
};
|
|
9
|
+
export declare function resolveSlotProps<S>(slot: SlotPropsLike<S> | null | undefined | false): ResolvedSlotProps<S>;
|
|
10
|
+
export declare function slotClassName<S>(slot: SlotPropsLike<S> | null | undefined | false): string | undefined;
|
|
11
|
+
export declare function slotStyle<S>(slot: SlotPropsLike<S> | null | undefined | false): S | undefined;
|
|
12
|
+
export declare function mergeStyles<S extends object>(...styles: Array<S | undefined | null | false>): S | undefined;
|
|
13
|
+
export declare function shallowEqualStyle<S extends object>(a: S | undefined, b: S | undefined): boolean;
|
|
14
|
+
export declare function arePropsEqualWithStyleKeys<P extends object>(prev: P, next: P, styleKeys: ReadonlySet<keyof P>): boolean;
|
|
15
|
+
export declare function resolveSlotMap<K extends string, S>(map: Partial<Record<K, SlotPropsLike<S> | undefined>> | null | undefined): Partial<Record<K, ResolvedSlotProps<S>>>;
|
|
16
|
+
export declare function serializeSlotValue(value: unknown): string;
|
|
17
|
+
export declare function resolveSlotMapFromSignature<K extends string, S>(signature: string): Partial<Record<K, ResolvedSlotProps<S>>>;
|
|
18
|
+
export declare function resolveSlotFromSignature<S>(signature: string): ResolvedSlotProps<S>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ReactNode, Ref } from 'react';
|
|
1
|
+
import type { CSSProperties, ReactNode, Ref } from 'react';
|
|
2
2
|
export type GridRowKey = string | number;
|
|
3
3
|
export type RowModel<T> = {
|
|
4
4
|
getRowCount: () => number;
|
|
@@ -248,7 +248,7 @@ export type DetailRowOptions<T> = {
|
|
|
248
248
|
sourceRowIndex: number;
|
|
249
249
|
}) => boolean;
|
|
250
250
|
showToggleColumn?: boolean;
|
|
251
|
-
className?:
|
|
251
|
+
className?: GridSlotProps;
|
|
252
252
|
};
|
|
253
253
|
export type RowDragContext = {
|
|
254
254
|
rowKey: GridRowKey;
|
|
@@ -398,7 +398,7 @@ export type GridColumn<T> = {
|
|
|
398
398
|
getValue?: (row: T) => unknown;
|
|
399
399
|
setValue?: (row: T, value: unknown) => T;
|
|
400
400
|
renderCell?: (ctx: CellRenderContext<T>) => ReactNode;
|
|
401
|
-
cellClassName?:
|
|
401
|
+
cellClassName?: GridSlotProps | ((ctx: CellStyleContext<T>) => GridSlotProps | undefined);
|
|
402
402
|
align?: 'left' | 'center' | 'right';
|
|
403
403
|
valueFormatter?: CellValueFormatter<T>;
|
|
404
404
|
renderHeader?: (ctx: HeaderRenderContext<T>) => ReactNode;
|
|
@@ -532,16 +532,42 @@ export type GridContextMenuCustomItem = {
|
|
|
532
532
|
}) => ReactNode;
|
|
533
533
|
};
|
|
534
534
|
export type GridContextMenuItem = GridContextMenuActionItem | GridContextMenuLabelItem | GridContextMenuSeparatorItem | GridContextMenuCustomItem;
|
|
535
|
+
export type GridSlotProps = string | {
|
|
536
|
+
className?: string;
|
|
537
|
+
style?: CSSProperties;
|
|
538
|
+
};
|
|
539
|
+
export type GridResolvedSlot = {
|
|
540
|
+
className?: string;
|
|
541
|
+
style?: CSSProperties;
|
|
542
|
+
};
|
|
543
|
+
export type GridResolvedSlots = Partial<Record<keyof GridClassNames, GridResolvedSlot>>;
|
|
535
544
|
export type GridClassNames = {
|
|
536
|
-
root?:
|
|
537
|
-
toolbar?:
|
|
538
|
-
statusBar?:
|
|
539
|
-
headerRow?:
|
|
540
|
-
headerCell?:
|
|
541
|
-
bodyRow?:
|
|
542
|
-
bodyCell?:
|
|
543
|
-
rowHeaderCell?:
|
|
544
|
-
iconButton?:
|
|
545
|
+
root?: GridSlotProps;
|
|
546
|
+
toolbar?: GridSlotProps;
|
|
547
|
+
statusBar?: GridSlotProps;
|
|
548
|
+
headerRow?: GridSlotProps;
|
|
549
|
+
headerCell?: GridSlotProps;
|
|
550
|
+
bodyRow?: GridSlotProps;
|
|
551
|
+
bodyCell?: GridSlotProps;
|
|
552
|
+
rowHeaderCell?: GridSlotProps;
|
|
553
|
+
iconButton?: GridSlotProps;
|
|
554
|
+
cornerCell?: GridSlotProps;
|
|
555
|
+
groupRow?: GridSlotProps;
|
|
556
|
+
groupCell?: GridSlotProps;
|
|
557
|
+
detailBand?: GridSlotProps;
|
|
558
|
+
detailCard?: GridSlotProps;
|
|
559
|
+
popover?: GridSlotProps;
|
|
560
|
+
menuItem?: GridSlotProps;
|
|
561
|
+
tooltip?: GridSlotProps;
|
|
562
|
+
dragGhost?: GridSlotProps;
|
|
563
|
+
checkbox?: GridSlotProps;
|
|
564
|
+
cellEditor?: GridSlotProps;
|
|
565
|
+
emptyState?: GridSlotProps;
|
|
566
|
+
filterChipBar?: GridSlotProps;
|
|
567
|
+
errorBar?: GridSlotProps;
|
|
568
|
+
scrollHint?: GridSlotProps;
|
|
569
|
+
activeCellOverlay?: GridSlotProps;
|
|
570
|
+
selectionOverlay?: GridSlotProps;
|
|
545
571
|
};
|
|
546
572
|
export type ScrollAlign = 'auto' | 'start' | 'center' | 'end';
|
|
547
573
|
export type GridScrollPosition = {
|
|
@@ -694,6 +720,10 @@ export type SpreadsheetGridProps<T> = {
|
|
|
694
720
|
onRowsChange?: (nextRows: T[]) => void;
|
|
695
721
|
onColumnsChange?: (nextColumns: GridColumn<T>[]) => void;
|
|
696
722
|
rowKeyGetter?: (row: T, index: number) => GridRowKey;
|
|
723
|
+
isRowExportable?: (row: T, ctx: {
|
|
724
|
+
viewRowIndex: number;
|
|
725
|
+
rowKey: GridRowKey;
|
|
726
|
+
}) => boolean;
|
|
697
727
|
createRow?: () => T;
|
|
698
728
|
createOverflowColumn?: (columnIndex: number) => GridColumn<T>;
|
|
699
729
|
rowHeight?: number;
|
|
@@ -729,6 +759,10 @@ export type SpreadsheetGridProps<T> = {
|
|
|
729
759
|
showCellOverflowTooltip?: boolean;
|
|
730
760
|
showValidationMarks?: boolean;
|
|
731
761
|
enableRowHover?: boolean;
|
|
762
|
+
hoveredRowIndex?: number | null;
|
|
763
|
+
onHoveredRowChange?: (viewRowIndex: number | null, ctx: {
|
|
764
|
+
source: 'pointer';
|
|
765
|
+
}) => void;
|
|
732
766
|
enableColumnHeaderHover?: boolean;
|
|
733
767
|
enableColumnMenu?: boolean;
|
|
734
768
|
noMatchingRowsText?: string;
|
|
@@ -745,8 +779,9 @@ export type SpreadsheetGridProps<T> = {
|
|
|
745
779
|
renderTopBar?: (context: SpreadsheetGridSlotContext<T>) => ReactNode;
|
|
746
780
|
renderBottomBar?: (context: SpreadsheetGridSlotContext<T>) => ReactNode;
|
|
747
781
|
className?: string;
|
|
782
|
+
style?: CSSProperties;
|
|
748
783
|
classNames?: GridClassNames;
|
|
749
|
-
getRowClassName?: (row: T, rowIndex: number, ctx: RowStyleContext<T>) =>
|
|
784
|
+
getRowClassName?: (row: T, rowIndex: number, ctx: RowStyleContext<T>) => GridSlotProps | undefined;
|
|
750
785
|
detailRow?: DetailRowOptions<T>;
|
|
751
786
|
onExpandedDetailRowKeysChange?: (keys: GridRowKey[]) => void;
|
|
752
787
|
enableRowDrag?: boolean;
|
|
@@ -22,7 +22,7 @@ export declare const serializeSelectionToTsv: <T>(getRow: (viewIndex: number) =>
|
|
|
22
22
|
type: "col";
|
|
23
23
|
startCol: number;
|
|
24
24
|
endCol: number;
|
|
25
|
-
} | null) => string;
|
|
25
|
+
} | null, isRowIncluded?: (row: T, viewRowIndex: number) => boolean) => string;
|
|
26
26
|
export declare const applyClipboardMatrixToRows: <T extends object>(rows: T[], resolveSourceIndex: (viewIndex: number) => number | undefined, columns: GridColumn<T>[], matrix: ClipboardMatrix, startRowIndex: number, startColIndex: number, canWriteCell: (originalRowIndex: number, colIndex: number, row: T, column: GridColumn<T>) => boolean) => T[];
|
|
27
27
|
export declare const buildClipboardCellEdits: <T extends object>(getRow: (viewIndex: number) => T | undefined, columns: GridColumn<T>[], matrix: ClipboardMatrix, startRowIndex: number, startColIndex: number, canWriteCell: (viewIndex: number, colIndex: number, row: T, column: GridColumn<T>) => boolean) => ServerSideCellEditInput<T>[];
|
|
28
28
|
export declare const copyTextViaExecCommand: (text: string) => boolean;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { RefObject } from 'react';
|
|
2
|
-
import type { GridContextMenuItem } from '../model/gridTypes';
|
|
2
|
+
import type { GridContextMenuItem, GridResolvedSlots } from '../model/gridTypes';
|
|
3
3
|
import type { CellContextMenuLayout } from '../hooks/useCellContextMenuController';
|
|
4
4
|
type CellContextMenuPopoverProps = {
|
|
5
5
|
isOpen: boolean;
|
|
6
6
|
themeClassName?: string;
|
|
7
|
+
slots?: GridResolvedSlots;
|
|
7
8
|
items: GridContextMenuItem[];
|
|
8
9
|
layout: CellContextMenuLayout | null;
|
|
9
10
|
popoverRef: RefObject<HTMLDivElement | null>;
|
|
10
11
|
onRequestClose: () => void;
|
|
11
12
|
};
|
|
12
|
-
export declare function CellContextMenuPopover({ isOpen, themeClassName, items, layout, popoverRef, onRequestClose, }: CellContextMenuPopoverProps): import("react").ReactPortal | null;
|
|
13
|
+
export declare function CellContextMenuPopover({ isOpen, themeClassName, slots, items, layout, popoverRef, onRequestClose, }: CellContextMenuPopoverProps): import("react").ReactPortal | null;
|
|
13
14
|
export default CellContextMenuPopover;
|
|
@@ -6,6 +6,7 @@ import { type NumberFilterConditionDraft } from '../logic/numberFilterCondition'
|
|
|
6
6
|
import { type TextFilterConditionDraft } from '../logic/textFilterCondition';
|
|
7
7
|
import { type DateFilterConditionDraft } from '../logic/dateFilterCondition';
|
|
8
8
|
import { type NormalizedDateFilterPreset } from '../logic/dateFilterPresets';
|
|
9
|
+
import type { GridResolvedSlot } from '../model/gridTypes';
|
|
9
10
|
export type ColumnFilterPopoverLayout = {
|
|
10
11
|
top: number;
|
|
11
12
|
left: number;
|
|
@@ -19,6 +20,7 @@ export type ColumnFilterPopoverOption = {
|
|
|
19
20
|
type ColumnFilterPopoverProps = {
|
|
20
21
|
isOpen: boolean;
|
|
21
22
|
themeClassName?: string;
|
|
23
|
+
popoverSlot?: GridResolvedSlot;
|
|
22
24
|
title: string;
|
|
23
25
|
filterType: ColumnFilterUiType;
|
|
24
26
|
draftValue: string;
|
|
@@ -52,5 +54,5 @@ type ColumnFilterPopoverProps = {
|
|
|
52
54
|
onSetReplaceSelection: (values: string[]) => void;
|
|
53
55
|
isServerSide?: boolean;
|
|
54
56
|
};
|
|
55
|
-
export declare function ColumnFilterPopover({ isOpen, themeClassName, title, filterType, draftValue, numberConditionDraft, onNumberConditionDraftChange, textConditionDraft, onTextConditionDraftChange, dateConditionDraft, onDateConditionDraftChange, datePresets, renderDateInput, onComboConditionClear, onComboSelectionClear, comboSummaryText, currentValueText, layout, selectOptions, optionsStatus, optionsProgress, setSelection, popoverRef, textInputRef, selectRef, onRequestClose, onDraftChange, onApply, onClear, onSetValueToggle, onSetSelectAllChange, onSetClear, onSetReplaceSelection, isServerSide, }: ColumnFilterPopoverProps): import("react").ReactPortal | null;
|
|
57
|
+
export declare function ColumnFilterPopover({ isOpen, themeClassName, popoverSlot, title, filterType, draftValue, numberConditionDraft, onNumberConditionDraftChange, textConditionDraft, onTextConditionDraftChange, dateConditionDraft, onDateConditionDraftChange, datePresets, renderDateInput, onComboConditionClear, onComboSelectionClear, comboSummaryText, currentValueText, layout, selectOptions, optionsStatus, optionsProgress, setSelection, popoverRef, textInputRef, selectRef, onRequestClose, onDraftChange, onApply, onClear, onSetValueToggle, onSetSelectAllChange, onSetClear, onSetReplaceSelection, isServerSide, }: ColumnFilterPopoverProps): import("react").ReactPortal | null;
|
|
56
58
|
export default ColumnFilterPopover;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { RefObject } from 'react';
|
|
2
2
|
import type { GridColumnPinned, GridSortDirection } from '../model/gridTypes';
|
|
3
3
|
import type { ColumnMenuLayout } from '../hooks/useColumnMenuController';
|
|
4
|
+
import type { GridResolvedSlots } from '../model/gridTypes';
|
|
4
5
|
type ColumnMenuPopoverProps = {
|
|
5
6
|
isOpen: boolean;
|
|
6
7
|
themeClassName?: string;
|
|
8
|
+
slots?: GridResolvedSlots;
|
|
7
9
|
title: string;
|
|
8
10
|
columnKey: string;
|
|
9
11
|
canFilter: boolean;
|
|
@@ -26,5 +28,5 @@ type ColumnMenuPopoverProps = {
|
|
|
26
28
|
onResetColumns: () => void;
|
|
27
29
|
onRequestClose: () => void;
|
|
28
30
|
};
|
|
29
|
-
export declare function ColumnMenuPopover({ isOpen, themeClassName, title, columnKey, canFilter, onOpenFilter, canSort, sortDirection, onSortChange, onOpenSortManager, canManageFilters, onOpenFilterManager, pinned, canChangePinned, layout, popoverRef, onPinnedChange, onAutosizeColumn, onAutosizeAllColumns, onOpenColumnChooser, canResetColumns, onResetColumns, onRequestClose, }: ColumnMenuPopoverProps): import("react").ReactPortal | null;
|
|
31
|
+
export declare function ColumnMenuPopover({ isOpen, themeClassName, slots, title, columnKey, canFilter, onOpenFilter, canSort, sortDirection, onSortChange, onOpenSortManager, canManageFilters, onOpenFilterManager, pinned, canChangePinned, layout, popoverRef, onPinnedChange, onAutosizeColumn, onAutosizeAllColumns, onOpenColumnChooser, canResetColumns, onResetColumns, onRequestClose, }: ColumnMenuPopoverProps): import("react").ReactPortal | null;
|
|
30
32
|
export default ColumnMenuPopover;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { SpreadsheetGridSlotContext } from '../model/gridTypes';
|
|
2
|
+
import type { GridResolvedSlot } from '../model/gridTypes';
|
|
2
3
|
type DefaultGridBottomBarProps<T> = {
|
|
3
4
|
context: SpreadsheetGridSlotContext<T>;
|
|
4
5
|
showCounts?: boolean;
|
|
6
|
+
slot?: GridResolvedSlot;
|
|
5
7
|
};
|
|
6
|
-
export declare function DefaultGridBottomBar<T>({ context, showCounts, }: DefaultGridBottomBarProps<T>): import("react").JSX.Element;
|
|
8
|
+
export declare function DefaultGridBottomBar<T>({ context, showCounts, slot, }: DefaultGridBottomBarProps<T>): import("react").JSX.Element;
|
|
7
9
|
export default DefaultGridBottomBar;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import type { SpreadsheetGridSlotContext } from '../model/gridTypes';
|
|
3
|
+
import type { GridResolvedSlot } from '../model/gridTypes';
|
|
3
4
|
type DefaultGridTopBarProps<T> = {
|
|
4
5
|
context: SpreadsheetGridSlotContext<T>;
|
|
5
6
|
showSummary?: boolean;
|
|
@@ -8,6 +9,7 @@ type DefaultGridTopBarProps<T> = {
|
|
|
8
9
|
globalFilterPlaceholder?: string;
|
|
9
10
|
globalFilterIcon?: ReactNode;
|
|
10
11
|
onFilterSummaryClick?: () => void;
|
|
12
|
+
slot?: GridResolvedSlot;
|
|
11
13
|
};
|
|
12
|
-
export declare function DefaultGridTopBar<T>({ context, showSummary, showFilter, showCounts, globalFilterPlaceholder, globalFilterIcon, onFilterSummaryClick, }: DefaultGridTopBarProps<T>): import("react").JSX.Element;
|
|
14
|
+
export declare function DefaultGridTopBar<T>({ context, showSummary, showFilter, showCounts, globalFilterPlaceholder, globalFilterIcon, onFilterSummaryClick, slot, }: DefaultGridTopBarProps<T>): import("react").JSX.Element;
|
|
13
15
|
export default DefaultGridTopBar;
|
|
@@ -3,6 +3,7 @@ import type { SelectionSnapshot } from '../model/gridSelectors';
|
|
|
3
3
|
import type { CellCoord, CellRenderState, GridColumn, RowModel, RowSelectionState, RowStyleContext, SpreadsheetGridProps } from '../model/gridTypes';
|
|
4
4
|
import type { PaneColumnEntry } from '../logic/geometry';
|
|
5
5
|
import type { GridPaneKind } from './GridHeaderRow';
|
|
6
|
+
import type { GridResolvedSlots, GridSlotProps } from '../model/gridTypes';
|
|
6
7
|
type VirtualRowLike = {
|
|
7
8
|
index: number;
|
|
8
9
|
start: number;
|
|
@@ -40,10 +41,8 @@ type GridBodyLayerProps<T> = {
|
|
|
40
41
|
onCellPointerEnter: (cell: CellCoord, event: PointerEvent<HTMLDivElement>) => void;
|
|
41
42
|
onCellDoubleClick: (cell: CellCoord) => void;
|
|
42
43
|
renderCellContent: (row: T, rowIndex: number, column: GridColumn<T>, colIndex: number, cellState: CellRenderState) => ReactNode;
|
|
43
|
-
getRowClassName?: (row: T, rowIndex: number, ctx: RowStyleContext<T>) =>
|
|
44
|
-
|
|
45
|
-
bodyRowClassName?: string;
|
|
46
|
-
rowHeaderCellClassName?: string;
|
|
44
|
+
getRowClassName?: (row: T, rowIndex: number, ctx: RowStyleContext<T>) => GridSlotProps | undefined;
|
|
45
|
+
slots?: GridResolvedSlots;
|
|
47
46
|
};
|
|
48
|
-
export declare function GridBodyLayer<T>({ pane, ownsRowHeader, leadingWidth, rowModel, virtualRows, virtualRowIndexes, renderEntries, rowHeight, autoHeight, showCellOverflowTooltip, showValidationMarks, isServerSide, collapsedGroupKeys, onGroupToggle, rowHeaderCellStyle, hoveredRowIndex, isWholeGridSelected, enableRowSelection, rowSelectionState, activeCell, editingCell, selectionSnapshot, readOnly, canEditCell, onRowHeaderPointerDown, onRowHeaderPointerEnter, onRowHeaderPointerLeave, onCellPointerDown, onCellPointerEnter, onCellDoubleClick, renderCellContent, getRowClassName,
|
|
47
|
+
export declare function GridBodyLayer<T>({ pane, ownsRowHeader, leadingWidth, rowModel, virtualRows, virtualRowIndexes, renderEntries, rowHeight, autoHeight, showCellOverflowTooltip, showValidationMarks, isServerSide, collapsedGroupKeys, onGroupToggle, rowHeaderCellStyle, hoveredRowIndex, isWholeGridSelected, enableRowSelection, rowSelectionState, activeCell, editingCell, selectionSnapshot, readOnly, canEditCell, onRowHeaderPointerDown, onRowHeaderPointerEnter, onRowHeaderPointerLeave, onCellPointerDown, onCellPointerEnter, onCellDoubleClick, renderCellContent, getRowClassName, slots, }: GridBodyLayerProps<T>): import("react").JSX.Element;
|
|
49
48
|
export default GridBodyLayer;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
import type { VerticalRow } from '../logic/verticalGeometry';
|
|
3
|
+
import type { GridResolvedSlot, GridResolvedSlots } from '../model/gridTypes';
|
|
3
4
|
export type GridDetailLayerEntry = {
|
|
4
5
|
rowKey: string | number;
|
|
5
6
|
virtualRow: VerticalRow;
|
|
@@ -11,9 +12,10 @@ type GridDetailLayerProps = {
|
|
|
11
12
|
baseOffset: number;
|
|
12
13
|
cardStickyLeft: number;
|
|
13
14
|
cardWidth: number;
|
|
14
|
-
|
|
15
|
+
cardSlot?: GridResolvedSlot;
|
|
16
|
+
slots?: GridResolvedSlots;
|
|
15
17
|
renderCard: (entry: GridDetailLayerEntry) => ReactNode;
|
|
16
18
|
};
|
|
17
|
-
declare function GridDetailLayerInner({ entries, mode, paneWidth, baseOffset, cardStickyLeft, cardWidth,
|
|
19
|
+
declare function GridDetailLayerInner({ entries, mode, paneWidth, baseOffset, cardStickyLeft, cardWidth, cardSlot, slots, renderCard, }: GridDetailLayerProps): import("react").JSX.Element | null;
|
|
18
20
|
export declare const GridDetailLayer: import("react").MemoExoticComponent<typeof GridDetailLayerInner>;
|
|
19
21
|
export default GridDetailLayer;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { FilterManagementEntry } from './FilterManagementPanel';
|
|
2
|
+
import type { GridResolvedSlot } from '../model/gridTypes';
|
|
2
3
|
type GridFilterChipBarProps = {
|
|
3
4
|
entries: FilterManagementEntry[];
|
|
4
5
|
canFilter: boolean;
|
|
5
6
|
onEditFilter: (columnKey: string) => void;
|
|
6
7
|
onClearFilter: (columnKey: string) => void;
|
|
7
8
|
onClearAllFilters: () => void;
|
|
9
|
+
slot?: GridResolvedSlot;
|
|
8
10
|
};
|
|
9
|
-
export declare function GridFilterChipBar({ entries, canFilter, onEditFilter, onClearFilter, onClearAllFilters, }: GridFilterChipBarProps): import("react").JSX.Element | null;
|
|
11
|
+
export declare function GridFilterChipBar({ entries, canFilter, onEditFilter, onClearFilter, onClearAllFilters, slot, }: GridFilterChipBarProps): import("react").JSX.Element | null;
|
|
10
12
|
export default GridFilterChipBar;
|
|
@@ -2,6 +2,7 @@ import { type CSSProperties, type MouseEvent, type PointerEvent } from 'react';
|
|
|
2
2
|
import type { SelectionSnapshot } from '../model/gridSelectors';
|
|
3
3
|
import type { ColumnFilterValue, GridColumn, GridSortState, SelectAllState } from '../model/gridTypes';
|
|
4
4
|
import type { PaneColumnEntry } from '../logic/geometry';
|
|
5
|
+
import type { GridResolvedSlots } from '../model/gridTypes';
|
|
5
6
|
export type GridPaneKind = 'left' | 'center' | 'right';
|
|
6
7
|
type GridHeaderRowProps<T> = {
|
|
7
8
|
pane: GridPaneKind;
|
|
@@ -9,9 +10,7 @@ type GridHeaderRowProps<T> = {
|
|
|
9
10
|
leadingWidth: number;
|
|
10
11
|
headerHeight: number;
|
|
11
12
|
rowHeaderCellStyle: CSSProperties;
|
|
12
|
-
|
|
13
|
-
headerCellClassName?: string;
|
|
14
|
-
rowHeaderCellClassName?: string;
|
|
13
|
+
slots?: GridResolvedSlots;
|
|
15
14
|
isCornerHovered: boolean;
|
|
16
15
|
isWholeGridSelected: boolean;
|
|
17
16
|
showSelectAllCheckbox: boolean;
|
|
@@ -23,7 +22,6 @@ type GridHeaderRowProps<T> = {
|
|
|
23
22
|
selectionSnapshot: SelectionSnapshot;
|
|
24
23
|
columnFilterValues: Record<string, ColumnFilterValue>;
|
|
25
24
|
sortState: GridSortState;
|
|
26
|
-
iconButtonClassName?: string;
|
|
27
25
|
onCornerPointerDown: (event: PointerEvent<HTMLDivElement>) => void;
|
|
28
26
|
onCornerPointerEnter: () => void;
|
|
29
27
|
onCornerPointerLeave: () => void;
|
|
@@ -39,6 +37,6 @@ type GridHeaderRowProps<T> = {
|
|
|
39
37
|
onColumnHeaderContextMenu: (column: GridColumn<T>, event: MouseEvent<HTMLDivElement>) => void;
|
|
40
38
|
onColumnDragHandlePointerDown?: (column: GridColumn<T>, event: PointerEvent<HTMLSpanElement>) => void;
|
|
41
39
|
};
|
|
42
|
-
declare function GridHeaderRowInner<T>({ pane, ownsRowHeader, leadingWidth, headerHeight, rowHeaderCellStyle,
|
|
40
|
+
declare function GridHeaderRowInner<T>({ pane, ownsRowHeader, leadingWidth, headerHeight, rowHeaderCellStyle, slots, isCornerHovered, isWholeGridSelected, showSelectAllCheckbox, selectAllState, filteredRowsLength, visibleColumnsLength, renderEntries, hoveredColumnIndex, selectionSnapshot, columnFilterValues, sortState, onCornerPointerDown, onCornerPointerEnter, onCornerPointerLeave, onColumnHeaderPointerDown, onColumnHeaderPointerEnter, onColumnHeaderPointerLeave, onColumnResizePointerDown, enableColumnResize, enableColumnMenu, openedMenuColumnKey, onColumnMenuButtonPointerDown, onColumnMenuButtonClick, onColumnHeaderContextMenu, onColumnDragHandlePointerDown, }: GridHeaderRowProps<T>): import("react").JSX.Element;
|
|
43
41
|
export declare const GridHeaderRow: typeof GridHeaderRowInner;
|
|
44
42
|
export default GridHeaderRow;
|
|
@@ -2,6 +2,7 @@ import type { RefObject } from 'react';
|
|
|
2
2
|
import type { RowModel } from '../model/gridTypes';
|
|
3
3
|
import type { RowMetrics } from '../logic/verticalGeometry';
|
|
4
4
|
import type { ResolvedScrollHintOptions } from '../logic/scrollHint';
|
|
5
|
+
import type { GridResolvedSlot } from '../model/gridTypes';
|
|
5
6
|
export declare const SCROLL_HINT_GUTTER_WIDTH_PX = 14;
|
|
6
7
|
export type GridScrollHintProps<T> = {
|
|
7
8
|
options: ResolvedScrollHintOptions<T>;
|
|
@@ -13,5 +14,6 @@ export type GridScrollHintProps<T> = {
|
|
|
13
14
|
verticalScaleFactor: number;
|
|
14
15
|
rowMetrics: RowMetrics;
|
|
15
16
|
rowModel: RowModel<T>;
|
|
17
|
+
slot?: GridResolvedSlot;
|
|
16
18
|
};
|
|
17
|
-
export declare function GridScrollHint<T>({ options, scrollContainerRef, scrollTop, viewportHeight, headerHeight, physicalBodyHeight, verticalScaleFactor, rowMetrics, rowModel, }: GridScrollHintProps<T>): import("react").JSX.Element | null;
|
|
19
|
+
export declare function GridScrollHint<T>({ options, scrollContainerRef, scrollTop, viewportHeight, headerHeight, physicalBodyHeight, verticalScaleFactor, rowMetrics, rowModel, slot, }: GridScrollHintProps<T>): import("react").JSX.Element | null;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { GridResolvedSlot } from '../model/gridTypes';
|
|
1
2
|
export type RowCheckboxState = 'unchecked' | 'checked' | 'indeterminate';
|
|
2
3
|
type RowSelectionCheckboxProps = {
|
|
3
4
|
state: RowCheckboxState;
|
|
4
5
|
disabled?: boolean;
|
|
6
|
+
slot?: GridResolvedSlot;
|
|
5
7
|
};
|
|
6
|
-
declare function RowSelectionCheckboxInner({ state, disabled, }: RowSelectionCheckboxProps): import("react").JSX.Element;
|
|
8
|
+
declare function RowSelectionCheckboxInner({ state, disabled, slot, }: RowSelectionCheckboxProps): import("react").JSX.Element;
|
|
7
9
|
export declare const RowSelectionCheckbox: import("react").MemoExoticComponent<typeof RowSelectionCheckboxInner>;
|
|
8
10
|
export default RowSelectionCheckbox;
|
package/dist/view/ToolPanel.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ReactNode, RefObject } from 'react';
|
|
2
2
|
import type { ToolPanelLayout, ToolPanelTab } from '../hooks/useToolPanelController';
|
|
3
|
+
import type { GridResolvedSlot } from '../model/gridTypes';
|
|
3
4
|
export type ToolPanelTabDescriptor = {
|
|
4
5
|
tab: ToolPanelTab;
|
|
5
6
|
label: string;
|
|
@@ -7,6 +8,7 @@ export type ToolPanelTabDescriptor = {
|
|
|
7
8
|
};
|
|
8
9
|
type ToolPanelProps = {
|
|
9
10
|
themeClassName?: string;
|
|
11
|
+
popoverSlot?: GridResolvedSlot;
|
|
10
12
|
activeTab: ToolPanelTab | null;
|
|
11
13
|
flashTick: number;
|
|
12
14
|
tabs: ToolPanelTabDescriptor[];
|
|
@@ -17,5 +19,5 @@ type ToolPanelProps = {
|
|
|
17
19
|
onPanelMove: (top: number, left: number) => void;
|
|
18
20
|
children: ReactNode;
|
|
19
21
|
};
|
|
20
|
-
export declare function ToolPanel({ themeClassName, activeTab, flashTick, tabs, layout, panelRef, onSelectTab, onRequestClose, onPanelMove, children, }: ToolPanelProps): import("react").ReactPortal | null;
|
|
22
|
+
export declare function ToolPanel({ themeClassName, popoverSlot, activeTab, flashTick, tabs, layout, panelRef, onSelectTab, onRequestClose, onPanelMove, children, }: ToolPanelProps): import("react").ReactPortal | null;
|
|
21
23
|
export default ToolPanel;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ishibashi0112/spreadsheet-grid",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.34.0",
|
|
4
4
|
"description": "React 19 製のカスタム仮想化データグリッド。100 万行対応の仮想化・3 ペイン固定列・ソート/フィルター・クライアント/サーバーサイド行モデル対応。",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -66,16 +66,16 @@
|
|
|
66
66
|
"@testing-library/dom": "^10.4.1",
|
|
67
67
|
"@testing-library/react": "^16.3.2",
|
|
68
68
|
"@types/node": "^24.12.3",
|
|
69
|
-
"@types/react": "^19.
|
|
70
|
-
"@types/react-dom": "^19.
|
|
69
|
+
"@types/react": "^19.3.0",
|
|
70
|
+
"@types/react-dom": "^19.3.0",
|
|
71
71
|
"@vitejs/plugin-react": "^6.0.1",
|
|
72
72
|
"eslint": "^10.3.0",
|
|
73
73
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
74
74
|
"eslint-plugin-react-refresh": "^0.5.2",
|
|
75
75
|
"globals": "^17.6.0",
|
|
76
76
|
"jsdom": "^29.1.1",
|
|
77
|
-
"react": "^19.
|
|
78
|
-
"react-dom": "^19.
|
|
77
|
+
"react": "^19.3.0",
|
|
78
|
+
"react-dom": "^19.3.0",
|
|
79
79
|
"typescript": "~6.0.2",
|
|
80
80
|
"typescript-eslint": "^8.59.2",
|
|
81
81
|
"vite": "^8.0.12",
|