@ishibashi0112/spreadsheet-grid 0.6.0 → 0.8.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 CHANGED
@@ -22,6 +22,7 @@ A high-performance, virtualized spreadsheet / data grid for **React 19**, writte
22
22
  - Both **client-side** (`rows`) and **server-side** (`dataSource`, SSRM) row models.
23
23
  - Themeable with CSS custom properties (`--ssg-*`) and a low-priority `@layer ssg-base`, so your own CSS or Tailwind utilities override the defaults without specificity battles. `className` / `classNames` slots are also provided.
24
24
  - Toggle the top / bottom bars and their parts via props — whole bars (`showTopBar` / `showBottomBar`), the default top bar's summary chips and global-filter input, and the Rows/Columns counts in each bar.
25
+ - Built-in CSV export (`downloadCsv` / `exportCsv`), plus a library-agnostic `getExportData()` for Excel / XLSX / ODS — feed the shaped data (filter/sort/visible-order aware) to your own writer such as [hucre](https://github.com/productdevbook/hucre), ExcelJS, or SheetJS. No spreadsheet library is bundled; multi-sheet is composed on your side. See [`API_REFERENCE.md`](./src/components/spreadsheet-grid/API_REFERENCE.md).
25
26
  - TypeScript-first, fully controlled API.
26
27
 
27
28
  ## Installation
@@ -148,6 +149,7 @@ The full prop and type reference lives in [`src/components/spreadsheet-grid/API_
148
149
  - **クライアントサイド**(`rows`)と**サーバーサイド**(`dataSource`、SSRM)の両行モデル。
149
150
  - CSS カスタムプロパティ(`--ssg-*`)と優先度の低い `@layer ssg-base` によるテーマ設定。利用側の通常 CSS や Tailwind ユーティリティが特異度の競合なしに既定を上書きできます。`className` / `classNames` スロットも用意。
150
151
  - トップ / ボトムバーとその構成要素(バー全体〔`showTopBar` / `showBottomBar`〕、既定トップバーの summary chips・グローバルフィルター入力、各バーの Rows/Columns 件数)を props で表示制御。
152
+ - CSV エクスポート(`downloadCsv` / `exportCsv`)を内蔵。Excel / XLSX / ODS はライブラリ非依存の `getExportData()` で、整形済みデータ(フィルター/ソート/可視列順を反映)を [hucre](https://github.com/productdevbook/hucre) / ExcelJS / SheetJS など任意の writer へ流す方式。xlsx ライブラリは同梱せず、マルチシートは利用側で合成。詳細は [`API_REFERENCE.md`](./src/components/spreadsheet-grid/API_REFERENCE.md)。
151
153
  - TypeScript ファースト、完全 controlled な API。
152
154
 
153
155
  ### インストール
@@ -1,3 +1,3 @@
1
1
  import './styles.css';
2
2
  import type { SpreadsheetGridProps } from './model/gridTypes';
3
- export declare function SpreadsheetGrid<T extends object>({ rows, dataSource, serverSideRefreshToken, columns, onRowsChange, onColumnsChange, rowKeyGetter, createRow, createOverflowColumn, rowHeight, autoHeight, estimateRowHeight, headerHeight, rowHeaderWidth, height, maxHeight, readOnly, canEditCell, enableRangeSelection, enableGlobalFilter, enableColumnFilter, enableSorting, enableColumnResize, enableRowHover, enableColumnHeaderHover, enableColumnMenu, noMatchingRowsText, noRowsText, showTopBar, showBottomBar, showTopBarSummary, showTopBarFilter, showTopBarCounts, showBottomBarCounts, renderTopBar, renderBottomBar, className, classNames, getRowClassName, ref, onStateChange, }: SpreadsheetGridProps<T>): import("react").JSX.Element;
3
+ export declare function SpreadsheetGrid<T extends object>({ rows, dataSource, serverSideRefreshToken, columns, onRowsChange, onColumnsChange, rowKeyGetter, createRow, createOverflowColumn, rowHeight, autoHeight, estimateRowHeight, headerHeight, rowHeaderWidth, height, maxHeight, readOnly, canEditCell, enableRangeSelection, enableRowSelection, rowSelectionMode, enableSelectAllRows: enableSelectAllRowsProp, rowSelection: rowSelectionProp, selectedRowKeys: selectedRowKeysProp, onRowSelectionChange, enableGlobalFilter, enableColumnFilter, enableSorting, enableColumnResize, enableRowHover, enableColumnHeaderHover, enableColumnMenu, noMatchingRowsText, noRowsText, showTopBar, showBottomBar, showTopBarSummary, showTopBarFilter, globalFilterPlaceholder, globalFilterIcon, showTopBarCounts, showBottomBarCounts, renderTopBar, renderBottomBar, className, classNames, getRowClassName, enableContextMenu, getContextMenuItems, onContextMenuOpen, ref, onStateChange, }: SpreadsheetGridProps<T>): import("react").JSX.Element;
@@ -0,0 +1,23 @@
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
+ };
12
+ type UseCellContextMenuControllerArgs = {
13
+ gridRootRef: RefObject<HTMLDivElement | null>;
14
+ };
15
+ export declare const useCellContextMenuController: <T>({ gridRootRef, }: UseCellContextMenuControllerArgs) => {
16
+ contextMenuState: CellContextMenuState<T> | null;
17
+ contextMenuLayout: CellContextMenuLayout | null;
18
+ contextMenuRef: RefObject<HTMLDivElement | null>;
19
+ isContextMenuOpen: boolean;
20
+ openContextMenu: (params: GridContextMenuParams<T>, items: GridContextMenuItem[]) => void;
21
+ closeContextMenu: () => void;
22
+ };
23
+ export default useCellContextMenuController;
@@ -20,5 +20,6 @@ export declare const useColumnHeaderDragController: <T>(args: UseColumnHeaderDra
20
20
  leftIndicatorRef: RefObject<HTMLDivElement | null>;
21
21
  centerIndicatorRef: RefObject<HTMLDivElement | null>;
22
22
  rightIndicatorRef: RefObject<HTMLDivElement | null>;
23
+ applyReorderSettle: () => void;
23
24
  };
24
25
  export default useColumnHeaderDragController;
@@ -0,0 +1,17 @@
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
+ type UseGlobalFilteredOrderArgs<T> = {
10
+ rows: T[];
11
+ baseOrder: RowOrder;
12
+ columns: GridColumn<T>[];
13
+ globalText: string;
14
+ enabled: boolean;
15
+ };
16
+ export declare const useGlobalFilteredOrder: <T>({ rows, baseOrder, columns, globalText, enabled, }: UseGlobalFilteredOrderArgs<T>) => GlobalFilteredOrderResult;
17
+ export default useGlobalFilteredOrder;
@@ -1,5 +1,5 @@
1
- import type { GridColumn, GridUiState, SpreadsheetGridSlotContext } from '../model/gridTypes';
2
- type GridSlotContextBase<T> = Omit<SpreadsheetGridSlotContext<T>, 'setGlobalFilterText' | 'derivedSummary' | 'filteredRows'>;
1
+ import type { GlobalFilterStatus, GridColumn, GridUiState, SpreadsheetGridSlotContext } from '../model/gridTypes';
2
+ type GridSlotContextBase<T> = Omit<SpreadsheetGridSlotContext<T>, 'setGlobalFilterText' | 'derivedSummary' | 'filteredRows' | 'globalFilterStatus' | 'globalFilterProgress'>;
3
3
  type UseGridBarContextArgs<T> = {
4
4
  rows: T[];
5
5
  viewRowCount: number;
@@ -8,8 +8,10 @@ type UseGridBarContextArgs<T> = {
8
8
  visibleColumns: GridColumn<T>[];
9
9
  uiState: GridUiState;
10
10
  setGlobalFilterText: (value: string) => void;
11
+ globalFilterStatus: GlobalFilterStatus;
12
+ globalFilterProgress: number;
11
13
  };
12
- export declare const useGridBarContext: <T>({ rows, viewRowCount, getFilteredRows, columns, visibleColumns, uiState, setGlobalFilterText, }: UseGridBarContextArgs<T>) => {
14
+ export declare const useGridBarContext: <T>({ rows, viewRowCount, getFilteredRows, columns, visibleColumns, uiState, setGlobalFilterText, globalFilterStatus, globalFilterProgress, }: UseGridBarContextArgs<T>) => {
13
15
  slotContextBase: GridSlotContextBase<T>;
14
16
  derivedSummary: import("..").SpreadsheetGridDerivedSummary;
15
17
  slotContext: SpreadsheetGridSlotContext<T>;
@@ -32,8 +32,13 @@ type UseGridPointerInteractionsArgs<T> = {
32
32
  setHoveredColumnIndex: (value: number | null) => void;
33
33
  enableRowHover: boolean;
34
34
  enableColumnHeaderHover: boolean;
35
+ enableRowSelection: boolean;
36
+ onGutterRowSelect: (viewIndex: number, opts: {
37
+ shiftKey: boolean;
38
+ }) => void;
39
+ onGutterRowSelectDrag: (viewIndex: number) => void;
35
40
  };
36
- export declare const useGridPointerInteractions: <T>({ gridRootRef, bodyScrollRef, scrollContainerRef, leftPaneScrollRef, rightPaneScrollRef, pointerClientRef, autoScrollFrameRef, uiState, dispatch, enableRangeSelection, enableSorting, orderedColumns, filteredRowsLength, visibleColumnsLength, paneLayout, leftLeadingWidth, centerLeadingWidth, rightLeadingWidth, headerHeight, rowMetrics, verticalScaleFactor, setHoveredRowIndex, setHoveredColumnIndex, enableRowHover, enableColumnHeaderHover, }: UseGridPointerInteractionsArgs<T>) => {
41
+ export declare const useGridPointerInteractions: <T>({ gridRootRef, bodyScrollRef, scrollContainerRef, leftPaneScrollRef, rightPaneScrollRef, pointerClientRef, autoScrollFrameRef, uiState, dispatch, enableRangeSelection, enableSorting, orderedColumns, filteredRowsLength, visibleColumnsLength, paneLayout, leftLeadingWidth, centerLeadingWidth, rightLeadingWidth, headerHeight, rowMetrics, verticalScaleFactor, setHoveredRowIndex, setHoveredColumnIndex, enableRowHover, enableColumnHeaderHover, enableRowSelection, onGutterRowSelect, onGutterRowSelectDrag, }: UseGridPointerInteractionsArgs<T>) => {
37
42
  updateSelectionFromPointer: (clientX: number, clientY: number) => void;
38
43
  handleCellPointerDown: (cell: CellCoord, event: PointerEvent<HTMLDivElement>) => void;
39
44
  handleCellPointerEnter: (cell: CellCoord, event: PointerEvent<HTMLDivElement>) => void;