@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.
@@ -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,8 @@
1
+ export type AppliedSlot = {
2
+ classNames: string[];
3
+ styleKeys: string[];
4
+ };
5
+ export declare function applySlotToElement(el: HTMLElement, slot: {
6
+ className?: string;
7
+ style?: object;
8
+ } | undefined, previous?: AppliedSlot): AppliedSlot;
@@ -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?: string;
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?: string | ((ctx: CellStyleContext<T>) => string | undefined);
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?: string;
537
- toolbar?: string;
538
- statusBar?: string;
539
- headerRow?: string;
540
- headerCell?: string;
541
- bodyRow?: string;
542
- bodyCell?: string;
543
- rowHeaderCell?: string;
544
- iconButton?: string;
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>) => string | undefined;
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>) => string | undefined;
44
- bodyCellClassName?: string;
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, bodyCellClassName, bodyRowClassName, rowHeaderCellClassName, }: GridBodyLayerProps<T>): import("react").JSX.Element;
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
- cardClassName?: string;
15
+ cardSlot?: GridResolvedSlot;
16
+ slots?: GridResolvedSlots;
15
17
  renderCard: (entry: GridDetailLayerEntry) => ReactNode;
16
18
  };
17
- declare function GridDetailLayerInner({ entries, mode, paneWidth, baseOffset, cardStickyLeft, cardWidth, cardClassName, renderCard, }: GridDetailLayerProps): import("react").JSX.Element | null;
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
- headerRowClassName?: string;
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, headerRowClassName, headerCellClassName, rowHeaderCellClassName, isCornerHovered, isWholeGridSelected, showSelectAllCheckbox, selectAllState, filteredRowsLength, visibleColumnsLength, renderEntries, hoveredColumnIndex, selectionSnapshot, columnFilterValues, sortState, iconButtonClassName, onCornerPointerDown, onCornerPointerEnter, onCornerPointerLeave, onColumnHeaderPointerDown, onColumnHeaderPointerEnter, onColumnHeaderPointerLeave, onColumnResizePointerDown, enableColumnResize, enableColumnMenu, openedMenuColumnKey, onColumnMenuButtonPointerDown, onColumnMenuButtonClick, onColumnHeaderContextMenu, onColumnDragHandlePointerDown, }: GridHeaderRowProps<T>): import("react").JSX.Element;
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;
@@ -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.32.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.2.14",
70
- "@types/react-dom": "^19.2.3",
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.2.6",
78
- "react-dom": "^19.2.6",
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",