@skygraph/react 0.4.0 → 0.5.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 +70 -0
- package/dist/{Table-IvijKCyd.d.ts → Table-BmesoMje.d.ts} +2 -0
- package/dist/{Table-BqN2u5ma.d.cts → Table-CpKMOH2x.d.cts} +2 -0
- package/dist/{chunk-DRBAZI46.js → chunk-FSV73JI4.js} +2 -1
- package/dist/chunk-FSV73JI4.js.map +1 -0
- package/dist/{chunk-MJAEAFPN.js → chunk-NXB3VAVF.js} +10 -7
- package/dist/chunk-NXB3VAVF.js.map +1 -0
- package/dist/{chunk-6SHHUUAE.js → chunk-UO6VJC3C.js} +2 -2
- package/dist/{chunk-KCFWFDSP.js → chunk-Z5UGF7EO.js} +2 -2
- package/dist/datagrid.cjs +1 -0
- package/dist/datagrid.cjs.map +1 -1
- package/dist/datagrid.js +2 -2
- package/dist/index.cjs +236 -188
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -2
- package/dist/index.d.ts +16 -2
- package/dist/index.js +233 -189
- package/dist/index.js.map +1 -1
- package/dist/table.cjs +9 -5
- package/dist/table.cjs.map +1 -1
- package/dist/table.d.cts +1 -1
- package/dist/table.d.ts +1 -1
- package/dist/table.js +2 -2
- package/dist/tree.cjs +1 -0
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +2 -2
- package/package.json +2 -2
- package/dist/chunk-DRBAZI46.js.map +0 -1
- package/dist/chunk-MJAEAFPN.js.map +0 -1
- /package/dist/{chunk-6SHHUUAE.js.map → chunk-UO6VJC3C.js.map} +0 -0
- /package/dist/{chunk-KCFWFDSP.js.map → chunk-Z5UGF7EO.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Checkbox
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FSV73JI4.js";
|
|
4
4
|
import {
|
|
5
5
|
Spin,
|
|
6
6
|
useConfig
|
|
@@ -1664,4 +1664,4 @@ export {
|
|
|
1664
1664
|
Tree,
|
|
1665
1665
|
TreeSelect
|
|
1666
1666
|
};
|
|
1667
|
-
//# sourceMappingURL=chunk-
|
|
1667
|
+
//# sourceMappingURL=chunk-UO6VJC3C.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Checkbox
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FSV73JI4.js";
|
|
4
4
|
import {
|
|
5
5
|
Spin
|
|
6
6
|
} from "./chunk-2OCEO636.js";
|
|
@@ -844,4 +844,4 @@ var DataGrid = forwardRef(DataGridInner);
|
|
|
844
844
|
export {
|
|
845
845
|
DataGrid
|
|
846
846
|
};
|
|
847
|
-
//# sourceMappingURL=chunk-
|
|
847
|
+
//# sourceMappingURL=chunk-Z5UGF7EO.js.map
|
package/dist/datagrid.cjs
CHANGED
|
@@ -211,6 +211,7 @@ function Checkbox({
|
|
|
211
211
|
onChange: (e) => onChange?.(e.target.checked)
|
|
212
212
|
}
|
|
213
213
|
),
|
|
214
|
+
!unstyled && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "sg-checkbox-box", "aria-hidden": true }),
|
|
214
215
|
children && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: unstyled ? "" : "sg-checkbox-label", children }),
|
|
215
216
|
loading && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Spin, { size: "small", unstyled })
|
|
216
217
|
] });
|
package/dist/datagrid.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/datagrid.ts","../src/components/complex/DataGrid/DataGrid.tsx","../src/hooks/useVirtualScroll.ts","../src/components/ui/Spin.tsx","../src/components/ConfigProvider.tsx","../src/components/ui/Checkbox.tsx","../src/components/complex/DataGrid/useDataGridState.ts"],"sourcesContent":["export { DataGrid } from './components/complex/DataGrid'\nexport type {\n DataGridProps,\n DataGridRef,\n DataGridColumn,\n DataGridLocale,\n CellEditorProps,\n CellPosition,\n CellRange,\n CellValue,\n} from './components/complex/DataGrid'\n","import React, { forwardRef, useImperativeHandle, useCallback, useRef, useMemo, useState } from 'react'\nimport { useVirtualScroll } from '../../../hooks/useVirtualScroll'\nimport { Spin } from '../../ui/Spin'\nimport { Checkbox } from '../../ui/Checkbox'\nimport { useDataGridState } from './useDataGridState'\nimport type {\n DataGridProps,\n DataGridRef,\n CellPosition,\n CellValue,\n DataGridColumn,\n CellEditorProps,\n DataGridContextMenuItem,\n} from './types'\n\nconst cls = {\n root: 'sg-datagrid',\n header: 'sg-datagrid-header',\n headerCell: 'sg-datagrid-header-cell',\n body: 'sg-datagrid-body',\n row: 'sg-datagrid-row',\n rowEven: 'sg-datagrid-row--even',\n rowOdd: 'sg-datagrid-row--odd',\n rowHoverable: 'sg-datagrid-row--hoverable',\n rowSelected: 'sg-datagrid-row--selected',\n cell: 'sg-datagrid-cell',\n cellActive: 'sg-datagrid-cell--active',\n cellEditing: 'sg-datagrid-cell--editing',\n cellSelected: 'sg-datagrid-cell--selected',\n frozen: 'sg-datagrid-cell--frozen',\n sortable: 'sg-datagrid-header-cell--sortable',\n sortAsc: 'sg-datagrid-header-cell--asc',\n sortDesc: 'sg-datagrid-header-cell--desc',\n resizer: 'sg-datagrid-resizer',\n empty: 'sg-datagrid-empty',\n summary: 'sg-datagrid-summary',\n summaryRow: 'sg-datagrid-summary-row',\n summaryCell: 'sg-datagrid-summary-cell',\n contextMenu: 'sg-datagrid-context-menu',\n contextMenuItem: 'sg-datagrid-context-menu-item',\n contextMenuDanger: 'sg-datagrid-context-menu-item--danger',\n contextMenuDisabled: 'sg-datagrid-context-menu-item--disabled',\n contextMenuDivider: 'sg-datagrid-context-menu-divider',\n loading: 'sg-datagrid-loading',\n selectionCell: 'sg-datagrid-selection-cell',\n rowNumberCell: 'sg-datagrid-row-number-cell',\n headerDragOver: 'sg-datagrid-header-cell--drag-over',\n}\n\nconst SELECTION_COL_WIDTH = 40\nconst ROW_NUMBER_COL_WIDTH = 48\n\nfunction DefaultEditor({ value, onChange, onCommit, onCancel }: CellEditorProps) {\n return (\n <input\n autoFocus\n defaultValue={value == null ? '' : String(value)}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onCommit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') onCommit()\n if (e.key === 'Escape') onCancel()\n }}\n style={{\n width: '100%',\n height: '100%',\n border: 'none',\n outline: 'none',\n padding: '0 8px',\n background: 'transparent',\n font: 'inherit',\n }}\n />\n )\n}\n\nfunction isCellInRange(row: number, col: number, range: { start: CellPosition; end: CellPosition } | null): boolean {\n if (!range) return false\n const minRow = Math.min(range.start.row, range.end.row)\n const maxRow = Math.max(range.start.row, range.end.row)\n const minCol = Math.min(range.start.col, range.end.col)\n const maxCol = Math.max(range.start.col, range.end.col)\n return row >= minRow && row <= maxRow && col >= minCol && col <= maxCol\n}\n\nfunction ContextMenuPopup({\n items,\n position,\n onClose,\n}: {\n items: DataGridContextMenuItem[]\n position: { x: number; y: number }\n onClose: () => void\n}) {\n const ref = useRef<HTMLDivElement>(null)\n\n React.useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) onClose()\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [onClose])\n\n // Only the coordinates are runtime-computed; visuals (z-index, padding,\n // colours, hover, danger/disabled state) live in\n // `packages/styles/components/context-menu.css` under\n // `.sg-datagrid-context-menu*`.\n return (\n <div\n ref={ref}\n className={cls.contextMenu}\n style={{ position: 'fixed', top: position.y, left: position.x }}\n >\n {items.map((item) =>\n item.divider ? (\n <div key={item.key} className={cls.contextMenuDivider} />\n ) : (\n <div\n key={item.key}\n className={[\n cls.contextMenuItem,\n item.danger ? cls.contextMenuDanger : '',\n item.disabled ? cls.contextMenuDisabled : '',\n ].filter(Boolean).join(' ')}\n onClick={() => {\n if (!item.disabled) {\n item.onClick()\n onClose()\n }\n }}\n >\n {item.label}\n </div>\n ),\n )}\n </div>\n )\n}\n\nfunction DataGridInner<R extends Record<string, unknown>>(\n props: DataGridProps<R>,\n ref: React.ForwardedRef<DataGridRef>,\n) {\n const {\n columns,\n data,\n rowKey,\n rowHeight = 36,\n headerHeight = 40,\n width = '100%',\n height = 400,\n className,\n style,\n onCellEdit,\n sortColumn,\n sortDirection,\n onSort,\n onCopy,\n onPaste,\n overscan = 5,\n locale,\n rowSelection,\n selectedRows,\n onSelectedRowsChange,\n striped,\n highlightOnHover = true,\n showRowNumber,\n summaryRows,\n cellClassName,\n cellStyle: cellStyleFn,\n columnReorder,\n onColumnOrderChange,\n onContextMenu,\n onRowClick,\n onRowDoubleClick,\n rowClassName,\n loading,\n emptyContent,\n } = props\n\n const containerRef = useRef<HTMLDivElement>(null)\n\n const state = useDataGridState(columns, data)\n const {\n activeCell,\n setActiveCell,\n editingCell,\n startEditing,\n stopEditing,\n editValueRef,\n selection,\n navigate,\n resizeColumn,\n getColumnWidth,\n columnOrder,\n reorderColumns,\n dragColumnRef,\n } = state\n\n const [ctxMenu, setCtxMenu] = useState<{\n items: DataGridContextMenuItem[]\n position: { x: number; y: number }\n } | null>(null)\n\n const [dragOverCol, setDragOverCol] = useState<string | null>(null)\n\n const { range, containerRef: scrollRef, scrollToIndex } = useVirtualScroll({\n itemCount: data.length,\n itemHeight: rowHeight,\n overscan,\n })\n\n const getRowKey = useCallback(\n (row: R, index: number): React.Key => {\n if (typeof rowKey === 'function') return rowKey(row, index)\n return row[rowKey] as React.Key\n },\n [rowKey],\n )\n\n const frozenLeft = useMemo(\n () => columns.filter((c) => c.frozen === 'left'),\n [columns],\n )\n const frozenRight = useMemo(\n () => columns.filter((c) => c.frozen === 'right'),\n [columns],\n )\n const scrollable = useMemo(\n () => columns.filter((c) => !c.frozen),\n [columns],\n )\n\n const orderedColumns = useMemo(() => {\n const base = [...frozenLeft, ...scrollable, ...frozenRight]\n if (!columnOrder) return base\n const map = new Map(base.map((c) => [c.key, c]))\n const ordered: DataGridColumn<R>[] = []\n for (const key of columnOrder) {\n const col = map.get(key)\n if (col) ordered.push(col)\n }\n for (const col of base) {\n if (!columnOrder.includes(col.key)) ordered.push(col)\n }\n return ordered\n }, [frozenLeft, scrollable, frozenRight, columnOrder])\n\n const extraColsWidth = (rowSelection ? SELECTION_COL_WIDTH : 0) + (showRowNumber ? ROW_NUMBER_COL_WIDTH : 0)\n\n const totalWidth = useMemo(\n () => orderedColumns.reduce((sum, col) => sum + getColumnWidth(col.key), 0) + extraColsWidth,\n [orderedColumns, getColumnWidth, extraColsWidth],\n )\n\n const allSelected = useMemo(() => {\n if (!selectedRows || data.length === 0) return false\n return data.every((row, i) => selectedRows.has(getRowKey(row, i)))\n }, [selectedRows, data, getRowKey])\n\n const someSelected = useMemo(() => {\n if (!selectedRows || data.length === 0) return false\n const count = data.filter((row, i) => selectedRows.has(getRowKey(row, i))).length\n return count > 0 && count < data.length\n }, [selectedRows, data, getRowKey])\n\n const handleSelectAll = useCallback(() => {\n if (!onSelectedRowsChange) return\n if (allSelected) {\n onSelectedRowsChange(new Set())\n } else {\n const all = new Set<React.Key>(data.map((row, i) => getRowKey(row, i)))\n onSelectedRowsChange(all)\n }\n }, [allSelected, data, getRowKey, onSelectedRowsChange])\n\n const handleSelectRow = useCallback(\n (row: R, index: number) => {\n if (!onSelectedRowsChange || !selectedRows) return\n const key = getRowKey(row, index)\n const next = new Set(selectedRows)\n if (next.has(key)) next.delete(key)\n else next.add(key)\n onSelectedRowsChange(next)\n },\n [getRowKey, onSelectedRowsChange, selectedRows],\n )\n\n const handleCellClick = useCallback(\n (rowIndex: number, colIndex: number) => {\n if (editingCell) {\n if (onCellEdit && editValueRef.current !== undefined) {\n onCellEdit(editingCell.row, orderedColumns[editingCell.col].key, editValueRef.current)\n }\n stopEditing()\n }\n setActiveCell({ row: rowIndex, col: colIndex })\n },\n [editingCell, onCellEdit, editValueRef, orderedColumns, stopEditing, setActiveCell],\n )\n\n const handleCellDoubleClick = useCallback(\n (rowIndex: number, colIndex: number) => {\n startEditing({ row: rowIndex, col: colIndex })\n },\n [startEditing],\n )\n\n const handleCommitEdit = useCallback(() => {\n if (editingCell && onCellEdit && editValueRef.current !== undefined) {\n onCellEdit(editingCell.row, orderedColumns[editingCell.col].key, editValueRef.current)\n }\n stopEditing()\n }, [editingCell, onCellEdit, editValueRef, orderedColumns, stopEditing])\n\n const handleCancelEdit = useCallback(() => {\n stopEditing()\n }, [stopEditing])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (!activeCell) return\n\n if (editingCell) return\n\n switch (e.key) {\n case 'ArrowUp':\n e.preventDefault()\n navigate(activeCell, 'up', e.shiftKey)\n break\n case 'ArrowDown':\n e.preventDefault()\n navigate(activeCell, 'down', e.shiftKey)\n break\n case 'ArrowLeft':\n e.preventDefault()\n navigate(activeCell, 'left', e.shiftKey)\n break\n case 'ArrowRight':\n e.preventDefault()\n navigate(activeCell, 'right', e.shiftKey)\n break\n case 'Enter':\n e.preventDefault()\n startEditing(activeCell)\n break\n case 'Tab':\n e.preventDefault()\n navigate(activeCell, e.shiftKey ? 'left' : 'right')\n break\n case 'Escape':\n setActiveCell(null)\n break\n case ' ':\n if (rowSelection && selectedRows) {\n e.preventDefault()\n const row = data[activeCell.row]\n if (row) handleSelectRow(row, activeCell.row)\n }\n break\n case 'a':\n if ((e.ctrlKey || e.metaKey) && rowSelection) {\n e.preventDefault()\n handleSelectAll()\n }\n break\n case 'c':\n if ((e.ctrlKey || e.metaKey) && onCopy) {\n e.preventDefault()\n const col = orderedColumns[activeCell.col]\n const val = data[activeCell.row]?.[col.key]\n onCopy(val == null ? '' : String(val))\n }\n break\n case 'v':\n if ((e.ctrlKey || e.metaKey) && onPaste) {\n e.preventDefault()\n navigator.clipboard?.readText().then((text) => {\n onPaste(text, activeCell)\n })\n }\n break\n }\n },\n [activeCell, editingCell, navigate, startEditing, setActiveCell, onCopy, onPaste,\n orderedColumns, data, rowSelection, selectedRows, handleSelectRow, handleSelectAll],\n )\n\n const handleSort = useCallback(\n (col: DataGridColumn<R>) => {\n if (!col.sortable || !onSort) return\n const dir = sortColumn === col.key && sortDirection === 'asc' ? 'desc' : 'asc'\n onSort(col.key, dir)\n },\n [sortColumn, sortDirection, onSort],\n )\n\n const handleCellContextMenu = useCallback(\n (e: React.MouseEvent, rowIndex: number, col: DataGridColumn<R>) => {\n if (!onContextMenu) return\n e.preventDefault()\n const row = data[rowIndex]\n if (!row) return\n const items = onContextMenu(rowIndex, col.key, row)\n if (items.length === 0) return\n setCtxMenu({ items, position: { x: e.clientX, y: e.clientY } })\n },\n [onContextMenu, data],\n )\n\n const handleHeaderDragStart = useCallback(\n (e: React.DragEvent, colKey: string) => {\n if (!columnReorder) return\n dragColumnRef.current = colKey\n e.dataTransfer.effectAllowed = 'move'\n },\n [columnReorder, dragColumnRef],\n )\n\n const handleHeaderDragOver = useCallback(\n (e: React.DragEvent, colKey: string) => {\n if (!columnReorder || !dragColumnRef.current) return\n e.preventDefault()\n setDragOverCol(colKey)\n },\n [columnReorder, dragColumnRef],\n )\n\n const handleHeaderDrop = useCallback(\n (e: React.DragEvent, colKey: string) => {\n e.preventDefault()\n if (!columnReorder || !dragColumnRef.current) return\n const newOrder = reorderColumns(dragColumnRef.current, colKey)\n dragColumnRef.current = null\n setDragOverCol(null)\n onColumnOrderChange?.(newOrder)\n },\n [columnReorder, dragColumnRef, reorderColumns, onColumnOrderChange],\n )\n\n const handleHeaderDragEnd = useCallback(() => {\n dragColumnRef.current = null\n setDragOverCol(null)\n }, [dragColumnRef])\n\n useImperativeHandle(\n ref,\n () => ({\n scrollToRow: scrollToIndex,\n scrollToColumn: () => {},\n getActiveCell: () => activeCell,\n setActiveCell,\n }),\n [scrollToIndex, activeCell, setActiveCell],\n )\n\n const handleResizeStart = useCallback(\n (colKey: string, startX: number) => {\n const startWidth = getColumnWidth(colKey)\n\n const onMouseMove = (e: MouseEvent) => {\n const delta = e.clientX - startX\n resizeColumn(colKey, startWidth + delta)\n }\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove)\n document.removeEventListener('mouseup', onMouseUp)\n }\n document.addEventListener('mousemove', onMouseMove)\n document.addEventListener('mouseup', onMouseUp)\n },\n [getColumnWidth, resizeColumn],\n )\n\n const renderCell = useCallback(\n (row: R, rowIndex: number, col: DataGridColumn<R>, colIndex: number) => {\n const isActive = activeCell?.row === rowIndex && activeCell?.col === colIndex\n const isEditing = editingCell?.row === rowIndex && editingCell?.col === colIndex\n const isSelected = isCellInRange(rowIndex, colIndex, selection)\n\n const rawValue = col.formula\n ? col.formula(row)\n : (row[col.key] as CellValue)\n\n const extraClass = cellClassName?.(rawValue, row, rowIndex, col) ?? ''\n const extraStyle = cellStyleFn?.(rawValue, row, rowIndex, col)\n\n const cellClassNames = [\n cls.cell,\n isActive ? cls.cellActive : '',\n isEditing ? cls.cellEditing : '',\n isSelected ? cls.cellSelected : '',\n col.frozen ? cls.frozen : '',\n col.className ?? '',\n extraClass,\n ]\n .filter(Boolean)\n .join(' ')\n\n const baseCellStyle: React.CSSProperties = {\n width: getColumnWidth(col.key),\n minWidth: getColumnWidth(col.key),\n textAlign: col.align ?? 'left',\n ...extraStyle,\n }\n\n return (\n <div\n key={col.key}\n className={cellClassNames}\n style={baseCellStyle}\n onClick={() => handleCellClick(rowIndex, colIndex)}\n onDoubleClick={() => handleCellDoubleClick(rowIndex, colIndex)}\n onContextMenu={(e) => handleCellContextMenu(e, rowIndex, col)}\n role=\"gridcell\"\n aria-colindex={colIndex + 1 + (rowSelection ? 1 : 0) + (showRowNumber ? 1 : 0)}\n aria-selected={isActive || isSelected}\n >\n {isEditing ? (\n (col.editor ?? (DefaultEditor as (props: CellEditorProps<R>) => React.ReactNode))({\n value: rawValue,\n row,\n rowIndex,\n column: col,\n onChange: (v) => {\n editValueRef.current = v\n },\n onCommit: handleCommitEdit,\n onCancel: handleCancelEdit,\n })\n ) : col.render ? (\n col.render(rawValue, row, rowIndex)\n ) : (\n <span>{rawValue == null ? '' : String(rawValue)}</span>\n )}\n </div>\n )\n },\n [\n activeCell, editingCell, selection, getColumnWidth,\n handleCellClick, handleCellDoubleClick, handleCommitEdit,\n handleCancelEdit, editValueRef, cellClassName, cellStyleFn,\n handleCellContextMenu, rowSelection, showRowNumber,\n ],\n )\n\n const heightValue = typeof height === 'number' ? height : undefined\n const bodyHeight = heightValue ? heightValue - headerHeight : undefined\n\n const rootCls = [\n cls.root,\n striped ? 'sg-datagrid--striped' : '',\n loading ? 'sg-datagrid--loading' : '',\n className ?? '',\n ].filter(Boolean).join(' ')\n\n return (\n <div\n ref={containerRef}\n className={rootCls}\n style={{ width, height, display: 'flex', flexDirection: 'column', position: 'relative', ...style }}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n role=\"grid\"\n aria-rowcount={data.length}\n aria-colcount={orderedColumns.length}\n >\n {/* Header */}\n <div\n className={cls.header}\n style={{\n display: 'flex',\n height: headerHeight,\n minHeight: headerHeight,\n minWidth: totalWidth,\n }}\n role=\"row\"\n >\n {rowSelection && (\n <div\n className={`${cls.headerCell} ${cls.selectionCell}`}\n style={{ width: SELECTION_COL_WIDTH, minWidth: SELECTION_COL_WIDTH, display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n role=\"columnheader\"\n >\n <Checkbox\n checked={allSelected}\n indeterminate={someSelected}\n onChange={handleSelectAll}\n />\n </div>\n )}\n {showRowNumber && (\n <div\n className={`${cls.headerCell} ${cls.rowNumberCell}`}\n style={{ width: ROW_NUMBER_COL_WIDTH, minWidth: ROW_NUMBER_COL_WIDTH, display: 'flex', alignItems: 'center', justifyContent: 'center', userSelect: 'none' }}\n role=\"columnheader\"\n >\n #\n </div>\n )}\n {orderedColumns.map((col) => {\n const isSorted = sortColumn === col.key\n const headerCls = [\n cls.headerCell,\n col.sortable ? cls.sortable : '',\n isSorted && sortDirection === 'asc' ? cls.sortAsc : '',\n isSorted && sortDirection === 'desc' ? cls.sortDesc : '',\n col.headerClassName ?? '',\n dragOverCol === col.key ? cls.headerDragOver : '',\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div\n key={col.key}\n className={headerCls}\n style={{\n width: getColumnWidth(col.key),\n minWidth: getColumnWidth(col.key),\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n padding: '0 8px',\n cursor: col.sortable ? 'pointer' : 'default',\n userSelect: 'none',\n }}\n onClick={() => handleSort(col)}\n draggable={!!columnReorder}\n onDragStart={(e) => handleHeaderDragStart(e, col.key)}\n onDragOver={(e) => handleHeaderDragOver(e, col.key)}\n onDrop={(e) => handleHeaderDrop(e, col.key)}\n onDragEnd={handleHeaderDragEnd}\n onDragLeave={() => setDragOverCol(null)}\n role=\"columnheader\"\n >\n {col.title}\n {isSorted && (\n <span style={{ marginLeft: 4, fontSize: 10 }}>\n {sortDirection === 'asc' ? '▲' : '▼'}\n </span>\n )}\n {col.resizable !== false && (\n <div\n className={cls.resizer}\n style={{\n position: 'absolute',\n right: 0,\n top: 0,\n bottom: 0,\n width: 4,\n cursor: 'col-resize',\n }}\n onMouseDown={(e) => {\n e.stopPropagation()\n handleResizeStart(col.key, e.clientX)\n }}\n />\n )}\n </div>\n )\n })}\n </div>\n\n {/* Body */}\n <div\n ref={scrollRef as React.RefObject<HTMLDivElement>}\n className={cls.body}\n style={{\n flex: 1,\n overflow: 'auto',\n position: 'relative',\n height: bodyHeight,\n }}\n >\n {data.length === 0 ? (\n <div className={cls.empty} style={{ padding: 24, textAlign: 'center' }}>\n {emptyContent ?? locale?.noData ?? 'No data'}\n </div>\n ) : (\n <div style={{ height: range.totalHeight, position: 'relative', minWidth: totalWidth }}>\n {range.visibleItems.map((vi) => {\n const row = data[vi.index]\n if (!row) return null\n const rKey = getRowKey(row, vi.index)\n const isRowSelected = selectedRows?.has(rKey) ?? false\n const rowExtraClass = typeof rowClassName === 'function' ? rowClassName(row, vi.index) : (rowClassName ?? '')\n\n const rowCls = [\n cls.row,\n striped ? (vi.index % 2 === 0 ? cls.rowEven : cls.rowOdd) : '',\n highlightOnHover ? cls.rowHoverable : '',\n isRowSelected ? cls.rowSelected : '',\n rowExtraClass,\n ].filter(Boolean).join(' ')\n\n return (\n <div\n key={rKey}\n className={rowCls}\n style={{\n display: 'flex',\n position: 'absolute',\n top: vi.offsetTop,\n height: vi.height,\n width: '100%',\n }}\n role=\"row\"\n aria-rowindex={vi.index + 1}\n aria-selected={isRowSelected}\n onClick={() => onRowClick?.(row, vi.index)}\n onDoubleClick={() => onRowDoubleClick?.(row, vi.index)}\n >\n {rowSelection && (\n <div\n className={`${cls.cell} ${cls.selectionCell}`}\n style={{ width: SELECTION_COL_WIDTH, minWidth: SELECTION_COL_WIDTH, display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={isRowSelected}\n onChange={() => handleSelectRow(row, vi.index)}\n />\n </div>\n )}\n {showRowNumber && (\n <div\n className={`${cls.cell} ${cls.rowNumberCell}`}\n style={{ width: ROW_NUMBER_COL_WIDTH, minWidth: ROW_NUMBER_COL_WIDTH, display: 'flex', alignItems: 'center', justifyContent: 'center', color: 'var(--sg-text-tertiary, #999)' }}\n >\n {vi.index + 1}\n </div>\n )}\n {orderedColumns.map((col, ci) => renderCell(row, vi.index, col, ci))}\n </div>\n )\n })}\n </div>\n )}\n </div>\n\n {/* Summary Footer */}\n {summaryRows && summaryRows.length > 0 && data.length > 0 && (\n <div className={cls.summary} style={{ minWidth: totalWidth }}>\n {summaryRows.map((sr, sri) => (\n <div\n key={sri}\n className={`${cls.summaryRow} ${sr.className ?? ''}`}\n style={{ display: 'flex', height: rowHeight }}\n >\n {rowSelection && (\n <div className={`${cls.summaryCell}`} style={{ width: SELECTION_COL_WIDTH, minWidth: SELECTION_COL_WIDTH }} />\n )}\n {showRowNumber && (\n <div className={`${cls.summaryCell}`} style={{ width: ROW_NUMBER_COL_WIDTH, minWidth: ROW_NUMBER_COL_WIDTH }} />\n )}\n {orderedColumns.map((col) => (\n <div\n key={col.key}\n className={cls.summaryCell}\n style={{\n width: getColumnWidth(col.key),\n minWidth: getColumnWidth(col.key),\n textAlign: col.align ?? 'left',\n }}\n >\n {sr.render(col.key, data)}\n </div>\n ))}\n </div>\n ))}\n </div>\n )}\n\n {/* Context Menu */}\n {ctxMenu && (\n <ContextMenuPopup\n items={ctxMenu.items}\n position={ctxMenu.position}\n onClose={() => setCtxMenu(null)}\n />\n )}\n\n {/* Loading */}\n {loading && (\n <div className={cls.loading} style={{ position: 'absolute', inset: 0, display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'rgba(255,255,255,0.6)', zIndex: 10 }}>\n <Spin size=\"large\" />\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Virtualized table grid with sortable headers, resizable columns, inline editing,\n * row selection, striped rows, summary footer, context menu, column reorder, and clipboard hooks.\n */\nexport const DataGrid = forwardRef(DataGridInner) as <R extends Record<string, unknown>>(\n props: DataGridProps<R> & { ref?: React.Ref<DataGridRef> },\n) => React.ReactElement\n","import { useState, useCallback, useRef, useEffect, useMemo } from 'react'\nimport { createVirtual } from '@skygraph/core'\nimport type { VirtualEngine, VirtualRange } from '@skygraph/core'\n\nexport interface UseVirtualScrollOptions {\n itemCount: number\n itemHeight: number | ((index: number) => number)\n overscan?: number\n}\n\nexport interface UseVirtualScrollReturn {\n range: VirtualRange\n containerRef: React.RefObject<HTMLElement | null>\n scrollToIndex: (index: number, align?: 'start' | 'center' | 'end') => void\n engine: VirtualEngine\n}\n\nexport function useVirtualScroll(options: UseVirtualScrollOptions): UseVirtualScrollReturn {\n const containerRef = useRef<HTMLElement | null>(null)\n const engineRef = useRef<VirtualEngine | null>(null)\n\n if (!engineRef.current) {\n engineRef.current = createVirtual({\n itemCount: options.itemCount,\n itemHeight: options.itemHeight,\n overscan: options.overscan,\n })\n }\n\n const engine = engineRef.current\n\n useEffect(() => {\n engine.setItemCount(options.itemCount)\n }, [engine, options.itemCount])\n\n useEffect(() => {\n engine.setItemHeight(options.itemHeight)\n }, [engine, options.itemHeight])\n\n const [range, setRange] = useState<VirtualRange>(() =>\n engine.getRange(0, 0),\n )\n\n const recalc = useCallback(() => {\n const el = containerRef.current\n if (!el) return\n setRange(engine.getRange(el.scrollTop, el.clientHeight))\n }, [engine])\n\n useEffect(() => {\n const el = containerRef.current\n if (!el) return\n\n recalc()\n\n el.addEventListener('scroll', recalc, { passive: true })\n const ro = new ResizeObserver(recalc)\n ro.observe(el)\n\n return () => {\n el.removeEventListener('scroll', recalc)\n ro.disconnect()\n }\n }, [recalc])\n\n useEffect(() => {\n recalc()\n }, [options.itemCount, recalc])\n\n const scrollToIndex = useCallback(\n (index: number, align: 'start' | 'center' | 'end' = 'start') => {\n const el = containerRef.current\n if (!el) return\n el.scrollTop = engine.scrollToIndex(index, el.clientHeight, align)\n },\n [engine],\n )\n\n return useMemo(\n () => ({ range, containerRef, scrollToIndex, engine }),\n [range, scrollToIndex, engine],\n )\n}\n","import React from 'react'\nimport { useConfig } from '../ConfigProvider'\nimport type { BaseComponentProps, SizableProps } from '../../types'\n\n/** Props for loading spinner, overlay, and optional content blur. */\nexport interface SpinProps extends BaseComponentProps, SizableProps {\n /** When `true`, shows the loading state (subject to `delay`). @default true */\n spinning?: boolean\n /** Milliseconds to wait before showing the spinner after `spinning` becomes true. */\n delay?: number\n /** Optional text below the indicator. */\n tip?: string\n /** When `true`, covers the viewport instead of inline or wrapping children. */\n fullscreen?: boolean\n /** Custom spinner node; defaults to a styled status element. */\n indicator?: React.ReactNode\n /** When set, shows an overlay with blur on this content while loading. */\n children?: React.ReactNode\n}\n\n/**\n * Loading indicator with optional delay, tip, fullscreen mode, and child overlay.\n */\nexport function Spin({\n spinning = true,\n size: sizeProp,\n delay,\n tip,\n fullscreen,\n indicator,\n children,\n className,\n style,\n unstyled,\n}: SpinProps) {\n const config = useConfig()\n const resolvedSize = sizeProp ?? config.size ?? 'middle'\n\n const [visible, setVisible] = React.useState(delay ? false : spinning)\n\n React.useEffect(() => {\n if (!delay) {\n setVisible(spinning)\n return\n }\n\n if (spinning) {\n const timer = setTimeout(() => setVisible(true), delay)\n return () => clearTimeout(timer)\n }\n\n setVisible(false)\n }, [spinning, delay])\n\n if (!visible && !children) return null\n if (!visible && children) return <>{children}</>\n\n const spinSizeClass = resolvedSize === 'middle' ? 'default' : resolvedSize\n const spinClasses = unstyled\n ? (className ?? '')\n : ['sg-spin', `sg-spin-${spinSizeClass}`, className].filter(Boolean).join(' ')\n\n const spinElement = indicator ?? (\n <span\n className={spinClasses}\n style={style}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={config.locale?.spin?.loading ?? 'Loading'}\n />\n )\n\n if (fullscreen) {\n return (\n <div className={unstyled ? '' : 'sg-spin-fullscreen'}>\n <div className={unstyled ? '' : 'sg-spin-fullscreen-inner'}>\n {spinElement}\n {tip && <div className={unstyled ? '' : 'sg-spin-tip'}>{tip}</div>}\n </div>\n </div>\n )\n }\n\n if (!children) {\n return (\n <span className={unstyled ? '' : 'sg-spin-standalone'} style={style}>\n {spinElement}\n {tip && <div className={unstyled ? '' : 'sg-spin-tip'}>{tip}</div>}\n </span>\n )\n }\n\n return (\n <div className={unstyled ? '' : 'sg-spin-container'} style={style}>\n <div className={unstyled ? '' : 'sg-spin-overlay'}>\n {spinElement}\n {tip && <div className={unstyled ? '' : 'sg-spin-tip'}>{tip}</div>}\n </div>\n <div className={visible ? (unstyled ? '' : 'sg-spin-blur') : ''}>{children}</div>\n </div>\n )\n}\n","import React, { createContext, useContext, useMemo } from 'react'\nimport type { SizeType, SgLocale } from '../types'\n\n/**\n * Global Skygraph component configuration merged through React context.\n *\n * По `prefixCls`: сознательно НЕ входит в публичный API до реализации\n * (вариант A в `docs/styling-plan.md`, фаза 4). На практике все корневые классы\n * имеют стабильный префикс `.sg-*`; если нужна изоляция — используйте изолированный\n * скоуп на хосте (шадоу-рут/отдельный контейнер со своими токенами).\n */\nexport interface SgConfig {\n /** Default size token for nested components. */\n size?: SizeType\n /** Disables interactions for nested components when true. */\n disabled?: boolean\n /** Enables bordered styling for nested components when true. */\n bordered?: boolean\n /** Locale messages shallow-merged with the parent provider when set. */\n locale?: SgLocale\n}\n\nconst SgConfigContext = createContext<SgConfig>({})\n\n/** Props for `ConfigProvider`, extending `SgConfig` with React children. */\nexport interface ConfigProviderProps extends SgConfig {\n /** Tree of components that consume merged configuration from this provider. */\n children: React.ReactNode\n}\n\n/**\n * Merges Skygraph configuration with any parent provider and exposes it via context.\n * Descendants read values through `useConfig` or `useConfigWithDefaults`.\n */\nexport function ConfigProvider({ children, ...config }: ConfigProviderProps) {\n const parent = useContext(SgConfigContext)\n\n const merged = useMemo<SgConfig>(\n () => ({\n size: config.size ?? parent.size,\n disabled: config.disabled ?? parent.disabled,\n bordered: config.bordered ?? parent.bordered,\n locale: config.locale\n ? parent.locale\n ? { ...parent.locale, ...config.locale }\n : config.locale\n : parent.locale,\n }),\n [config.size, config.disabled, config.bordered, config.locale, parent],\n )\n\n return <SgConfigContext.Provider value={merged}>{children}</SgConfigContext.Provider>\n}\n\n/** Returns the merged `SgConfig` from the nearest ancestor `ConfigProvider`. */\nexport function useConfig(): SgConfig {\n return useContext(SgConfigContext)\n}\n\n/**\n * Resolves effective `size` and `disabled` from props, context, and explicit defaults.\n * Returns the original props plus `resolvedSize` and `resolvedDisabled` for consumers.\n */\nexport function useConfigWithDefaults<T extends Record<string, unknown>>(\n props: T,\n defaults: { size?: SizeType; disabled?: boolean; bordered?: boolean },\n): T & { resolvedSize: SizeType; resolvedDisabled: boolean } {\n const config = useContext(SgConfigContext)\n\n return useMemo(() => {\n const resolvedSize =\n (props as Record<string, unknown>).size as SizeType | undefined ??\n config.size ??\n defaults.size ??\n 'middle'\n const resolvedDisabled =\n ((props as Record<string, unknown>).disabled as boolean | undefined) ??\n config.disabled ??\n defaults.disabled ??\n false\n\n return { ...props, resolvedSize, resolvedDisabled }\n }, [props, config.size, config.disabled, defaults.size, defaults.disabled])\n}\n","import React from 'react'\nimport { useConfig } from '../ConfigProvider'\nimport type { BaseComponentProps, InteractiveProps } from '../../types'\nimport { Spin } from './Spin'\n\n/** Props for the Checkbox component. */\nexport interface CheckboxProps extends BaseComponentProps, InteractiveProps {\n /** Controlled checked state. */\n checked?: boolean\n /** Uncontrolled initial checked state. */\n defaultChecked?: boolean\n /** Renders the native checkbox in indeterminate state. */\n indeterminate?: boolean\n /** Called when the checked state changes. */\n onChange?: (checked: boolean) => void\n /** Label content beside the control. */\n children?: React.ReactNode\n}\n\n/** Labeled checkbox with indeterminate support and optional loading state. */\nexport function Checkbox({\n checked,\n defaultChecked,\n disabled: disabledProp,\n loading,\n indeterminate,\n onChange,\n children,\n className,\n style,\n unstyled,\n}: CheckboxProps) {\n const config = useConfig()\n const disabled = disabledProp ?? config.disabled ?? false\n\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate ?? false\n }\n }, [indeterminate])\n\n const wrapperClass = unstyled\n ? className ?? ''\n : [\n 'sg-checkbox',\n disabled || loading ? 'sg-checkbox-disabled' : '',\n loading ? 'sg-checkbox-loading' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <label className={wrapperClass} style={style}>\n <input\n ref={inputRef}\n type=\"checkbox\"\n aria-checked={checked}\n className={unstyled ? '' : 'sg-checkbox-input'}\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled || loading}\n onChange={(e) => onChange?.(e.target.checked)}\n />\n {children && (\n <span className={unstyled ? '' : 'sg-checkbox-label'}>{children}</span>\n )}\n {loading && <Spin size=\"small\" unstyled={unstyled} />}\n </label>\n )\n}\n","import { useState, useCallback, useRef } from 'react'\nimport type { CellPosition, CellRange, CellValue, DataGridColumn } from './types'\n\n/**\n * Holds active cell, edit session, range selection, column width, and column order state for `DataGrid`.\n */\nexport function useDataGridState<R>(columns: DataGridColumn<R>[], data: R[]) {\n const [activeCell, setActiveCell] = useState<CellPosition | null>(null)\n const [editingCell, setEditingCell] = useState<CellPosition | null>(null)\n const [selection, setSelection] = useState<CellRange | null>(null)\n const [columnWidths, setColumnWidths] = useState<Map<string, number>>(() => {\n const map = new Map<string, number>()\n for (const col of columns) {\n if (col.width) map.set(col.key, col.width)\n }\n return map\n })\n const [columnOrder, setColumnOrder] = useState<string[] | null>(null)\n\n const editValueRef = useRef<CellValue>(undefined)\n const dragColumnRef = useRef<string | null>(null)\n\n const startEditing = useCallback(\n (pos: CellPosition) => {\n const col = columns[pos.col]\n if (!col) return\n\n const isEditable =\n typeof col.editable === 'function'\n ? col.editable(data[pos.row], pos.row)\n : col.editable !== false\n\n if (!isEditable) return\n\n editValueRef.current = (data[pos.row] as Record<string, unknown>)[col.key] as CellValue\n setEditingCell(pos)\n },\n [columns, data],\n )\n\n const stopEditing = useCallback(() => {\n setEditingCell(null)\n editValueRef.current = undefined\n }, [])\n\n const navigate = useCallback(\n (\n from: CellPosition,\n direction: 'up' | 'down' | 'left' | 'right',\n shiftKey = false,\n ): CellPosition => {\n let { row, col } = from\n switch (direction) {\n case 'up':\n row = Math.max(0, row - 1)\n break\n case 'down':\n row = Math.min(data.length - 1, row + 1)\n break\n case 'left':\n col = Math.max(0, col - 1)\n break\n case 'right':\n col = Math.min(columns.length - 1, col + 1)\n break\n }\n const next = { row, col }\n\n if (shiftKey) {\n setSelection((prev) => ({\n start: prev?.start ?? from,\n end: next,\n }))\n } else {\n setSelection(null)\n }\n\n setActiveCell(next)\n return next\n },\n [data.length, columns.length],\n )\n\n const resizeColumn = useCallback(\n (key: string, width: number) => {\n const col = columns.find((c) => c.key === key)\n const minW = col?.minWidth ?? 50\n const maxW = col?.maxWidth ?? Infinity\n const clamped = Math.max(minW, Math.min(maxW, width))\n setColumnWidths((prev) => new Map(prev).set(key, clamped))\n },\n [columns],\n )\n\n const getColumnWidth = useCallback(\n (key: string): number => {\n return columnWidths.get(key) ?? columns.find((c) => c.key === key)?.width ?? 120\n },\n [columnWidths, columns],\n )\n\n const reorderColumns = useCallback(\n (fromKey: string, toKey: string) => {\n const order = columnOrder ?? columns.map((c) => c.key)\n const fromIdx = order.indexOf(fromKey)\n const toIdx = order.indexOf(toKey)\n if (fromIdx === -1 || toIdx === -1 || fromIdx === toIdx) return order\n const next = [...order]\n const [moved] = next.splice(fromIdx, 1)\n next.splice(toIdx, 0, moved)\n setColumnOrder(next)\n return next\n },\n [columnOrder, columns],\n )\n\n return {\n activeCell,\n setActiveCell,\n editingCell,\n startEditing,\n stopEditing,\n editValueRef,\n selection,\n setSelection,\n navigate,\n resizeColumn,\n getColumnWidth,\n columnOrder,\n setColumnOrder,\n reorderColumns,\n dragColumnRef,\n }\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React"]}
|
|
1
|
+
{"version":3,"sources":["../src/datagrid.ts","../src/components/complex/DataGrid/DataGrid.tsx","../src/hooks/useVirtualScroll.ts","../src/components/ui/Spin.tsx","../src/components/ConfigProvider.tsx","../src/components/ui/Checkbox.tsx","../src/components/complex/DataGrid/useDataGridState.ts"],"sourcesContent":["export { DataGrid } from './components/complex/DataGrid'\nexport type {\n DataGridProps,\n DataGridRef,\n DataGridColumn,\n DataGridLocale,\n CellEditorProps,\n CellPosition,\n CellRange,\n CellValue,\n} from './components/complex/DataGrid'\n","import React, { forwardRef, useImperativeHandle, useCallback, useRef, useMemo, useState } from 'react'\nimport { useVirtualScroll } from '../../../hooks/useVirtualScroll'\nimport { Spin } from '../../ui/Spin'\nimport { Checkbox } from '../../ui/Checkbox'\nimport { useDataGridState } from './useDataGridState'\nimport type {\n DataGridProps,\n DataGridRef,\n CellPosition,\n CellValue,\n DataGridColumn,\n CellEditorProps,\n DataGridContextMenuItem,\n} from './types'\n\nconst cls = {\n root: 'sg-datagrid',\n header: 'sg-datagrid-header',\n headerCell: 'sg-datagrid-header-cell',\n body: 'sg-datagrid-body',\n row: 'sg-datagrid-row',\n rowEven: 'sg-datagrid-row--even',\n rowOdd: 'sg-datagrid-row--odd',\n rowHoverable: 'sg-datagrid-row--hoverable',\n rowSelected: 'sg-datagrid-row--selected',\n cell: 'sg-datagrid-cell',\n cellActive: 'sg-datagrid-cell--active',\n cellEditing: 'sg-datagrid-cell--editing',\n cellSelected: 'sg-datagrid-cell--selected',\n frozen: 'sg-datagrid-cell--frozen',\n sortable: 'sg-datagrid-header-cell--sortable',\n sortAsc: 'sg-datagrid-header-cell--asc',\n sortDesc: 'sg-datagrid-header-cell--desc',\n resizer: 'sg-datagrid-resizer',\n empty: 'sg-datagrid-empty',\n summary: 'sg-datagrid-summary',\n summaryRow: 'sg-datagrid-summary-row',\n summaryCell: 'sg-datagrid-summary-cell',\n contextMenu: 'sg-datagrid-context-menu',\n contextMenuItem: 'sg-datagrid-context-menu-item',\n contextMenuDanger: 'sg-datagrid-context-menu-item--danger',\n contextMenuDisabled: 'sg-datagrid-context-menu-item--disabled',\n contextMenuDivider: 'sg-datagrid-context-menu-divider',\n loading: 'sg-datagrid-loading',\n selectionCell: 'sg-datagrid-selection-cell',\n rowNumberCell: 'sg-datagrid-row-number-cell',\n headerDragOver: 'sg-datagrid-header-cell--drag-over',\n}\n\nconst SELECTION_COL_WIDTH = 40\nconst ROW_NUMBER_COL_WIDTH = 48\n\nfunction DefaultEditor({ value, onChange, onCommit, onCancel }: CellEditorProps) {\n return (\n <input\n autoFocus\n defaultValue={value == null ? '' : String(value)}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onCommit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') onCommit()\n if (e.key === 'Escape') onCancel()\n }}\n style={{\n width: '100%',\n height: '100%',\n border: 'none',\n outline: 'none',\n padding: '0 8px',\n background: 'transparent',\n font: 'inherit',\n }}\n />\n )\n}\n\nfunction isCellInRange(row: number, col: number, range: { start: CellPosition; end: CellPosition } | null): boolean {\n if (!range) return false\n const minRow = Math.min(range.start.row, range.end.row)\n const maxRow = Math.max(range.start.row, range.end.row)\n const minCol = Math.min(range.start.col, range.end.col)\n const maxCol = Math.max(range.start.col, range.end.col)\n return row >= minRow && row <= maxRow && col >= minCol && col <= maxCol\n}\n\nfunction ContextMenuPopup({\n items,\n position,\n onClose,\n}: {\n items: DataGridContextMenuItem[]\n position: { x: number; y: number }\n onClose: () => void\n}) {\n const ref = useRef<HTMLDivElement>(null)\n\n React.useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) onClose()\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [onClose])\n\n // Only the coordinates are runtime-computed; visuals (z-index, padding,\n // colours, hover, danger/disabled state) live in\n // `packages/styles/components/context-menu.css` under\n // `.sg-datagrid-context-menu*`.\n return (\n <div\n ref={ref}\n className={cls.contextMenu}\n style={{ position: 'fixed', top: position.y, left: position.x }}\n >\n {items.map((item) =>\n item.divider ? (\n <div key={item.key} className={cls.contextMenuDivider} />\n ) : (\n <div\n key={item.key}\n className={[\n cls.contextMenuItem,\n item.danger ? cls.contextMenuDanger : '',\n item.disabled ? cls.contextMenuDisabled : '',\n ].filter(Boolean).join(' ')}\n onClick={() => {\n if (!item.disabled) {\n item.onClick()\n onClose()\n }\n }}\n >\n {item.label}\n </div>\n ),\n )}\n </div>\n )\n}\n\nfunction DataGridInner<R extends Record<string, unknown>>(\n props: DataGridProps<R>,\n ref: React.ForwardedRef<DataGridRef>,\n) {\n const {\n columns,\n data,\n rowKey,\n rowHeight = 36,\n headerHeight = 40,\n width = '100%',\n height = 400,\n className,\n style,\n onCellEdit,\n sortColumn,\n sortDirection,\n onSort,\n onCopy,\n onPaste,\n overscan = 5,\n locale,\n rowSelection,\n selectedRows,\n onSelectedRowsChange,\n striped,\n highlightOnHover = true,\n showRowNumber,\n summaryRows,\n cellClassName,\n cellStyle: cellStyleFn,\n columnReorder,\n onColumnOrderChange,\n onContextMenu,\n onRowClick,\n onRowDoubleClick,\n rowClassName,\n loading,\n emptyContent,\n } = props\n\n const containerRef = useRef<HTMLDivElement>(null)\n\n const state = useDataGridState(columns, data)\n const {\n activeCell,\n setActiveCell,\n editingCell,\n startEditing,\n stopEditing,\n editValueRef,\n selection,\n navigate,\n resizeColumn,\n getColumnWidth,\n columnOrder,\n reorderColumns,\n dragColumnRef,\n } = state\n\n const [ctxMenu, setCtxMenu] = useState<{\n items: DataGridContextMenuItem[]\n position: { x: number; y: number }\n } | null>(null)\n\n const [dragOverCol, setDragOverCol] = useState<string | null>(null)\n\n const { range, containerRef: scrollRef, scrollToIndex } = useVirtualScroll({\n itemCount: data.length,\n itemHeight: rowHeight,\n overscan,\n })\n\n const getRowKey = useCallback(\n (row: R, index: number): React.Key => {\n if (typeof rowKey === 'function') return rowKey(row, index)\n return row[rowKey] as React.Key\n },\n [rowKey],\n )\n\n const frozenLeft = useMemo(\n () => columns.filter((c) => c.frozen === 'left'),\n [columns],\n )\n const frozenRight = useMemo(\n () => columns.filter((c) => c.frozen === 'right'),\n [columns],\n )\n const scrollable = useMemo(\n () => columns.filter((c) => !c.frozen),\n [columns],\n )\n\n const orderedColumns = useMemo(() => {\n const base = [...frozenLeft, ...scrollable, ...frozenRight]\n if (!columnOrder) return base\n const map = new Map(base.map((c) => [c.key, c]))\n const ordered: DataGridColumn<R>[] = []\n for (const key of columnOrder) {\n const col = map.get(key)\n if (col) ordered.push(col)\n }\n for (const col of base) {\n if (!columnOrder.includes(col.key)) ordered.push(col)\n }\n return ordered\n }, [frozenLeft, scrollable, frozenRight, columnOrder])\n\n const extraColsWidth = (rowSelection ? SELECTION_COL_WIDTH : 0) + (showRowNumber ? ROW_NUMBER_COL_WIDTH : 0)\n\n const totalWidth = useMemo(\n () => orderedColumns.reduce((sum, col) => sum + getColumnWidth(col.key), 0) + extraColsWidth,\n [orderedColumns, getColumnWidth, extraColsWidth],\n )\n\n const allSelected = useMemo(() => {\n if (!selectedRows || data.length === 0) return false\n return data.every((row, i) => selectedRows.has(getRowKey(row, i)))\n }, [selectedRows, data, getRowKey])\n\n const someSelected = useMemo(() => {\n if (!selectedRows || data.length === 0) return false\n const count = data.filter((row, i) => selectedRows.has(getRowKey(row, i))).length\n return count > 0 && count < data.length\n }, [selectedRows, data, getRowKey])\n\n const handleSelectAll = useCallback(() => {\n if (!onSelectedRowsChange) return\n if (allSelected) {\n onSelectedRowsChange(new Set())\n } else {\n const all = new Set<React.Key>(data.map((row, i) => getRowKey(row, i)))\n onSelectedRowsChange(all)\n }\n }, [allSelected, data, getRowKey, onSelectedRowsChange])\n\n const handleSelectRow = useCallback(\n (row: R, index: number) => {\n if (!onSelectedRowsChange || !selectedRows) return\n const key = getRowKey(row, index)\n const next = new Set(selectedRows)\n if (next.has(key)) next.delete(key)\n else next.add(key)\n onSelectedRowsChange(next)\n },\n [getRowKey, onSelectedRowsChange, selectedRows],\n )\n\n const handleCellClick = useCallback(\n (rowIndex: number, colIndex: number) => {\n if (editingCell) {\n if (onCellEdit && editValueRef.current !== undefined) {\n onCellEdit(editingCell.row, orderedColumns[editingCell.col].key, editValueRef.current)\n }\n stopEditing()\n }\n setActiveCell({ row: rowIndex, col: colIndex })\n },\n [editingCell, onCellEdit, editValueRef, orderedColumns, stopEditing, setActiveCell],\n )\n\n const handleCellDoubleClick = useCallback(\n (rowIndex: number, colIndex: number) => {\n startEditing({ row: rowIndex, col: colIndex })\n },\n [startEditing],\n )\n\n const handleCommitEdit = useCallback(() => {\n if (editingCell && onCellEdit && editValueRef.current !== undefined) {\n onCellEdit(editingCell.row, orderedColumns[editingCell.col].key, editValueRef.current)\n }\n stopEditing()\n }, [editingCell, onCellEdit, editValueRef, orderedColumns, stopEditing])\n\n const handleCancelEdit = useCallback(() => {\n stopEditing()\n }, [stopEditing])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (!activeCell) return\n\n if (editingCell) return\n\n switch (e.key) {\n case 'ArrowUp':\n e.preventDefault()\n navigate(activeCell, 'up', e.shiftKey)\n break\n case 'ArrowDown':\n e.preventDefault()\n navigate(activeCell, 'down', e.shiftKey)\n break\n case 'ArrowLeft':\n e.preventDefault()\n navigate(activeCell, 'left', e.shiftKey)\n break\n case 'ArrowRight':\n e.preventDefault()\n navigate(activeCell, 'right', e.shiftKey)\n break\n case 'Enter':\n e.preventDefault()\n startEditing(activeCell)\n break\n case 'Tab':\n e.preventDefault()\n navigate(activeCell, e.shiftKey ? 'left' : 'right')\n break\n case 'Escape':\n setActiveCell(null)\n break\n case ' ':\n if (rowSelection && selectedRows) {\n e.preventDefault()\n const row = data[activeCell.row]\n if (row) handleSelectRow(row, activeCell.row)\n }\n break\n case 'a':\n if ((e.ctrlKey || e.metaKey) && rowSelection) {\n e.preventDefault()\n handleSelectAll()\n }\n break\n case 'c':\n if ((e.ctrlKey || e.metaKey) && onCopy) {\n e.preventDefault()\n const col = orderedColumns[activeCell.col]\n const val = data[activeCell.row]?.[col.key]\n onCopy(val == null ? '' : String(val))\n }\n break\n case 'v':\n if ((e.ctrlKey || e.metaKey) && onPaste) {\n e.preventDefault()\n navigator.clipboard?.readText().then((text) => {\n onPaste(text, activeCell)\n })\n }\n break\n }\n },\n [activeCell, editingCell, navigate, startEditing, setActiveCell, onCopy, onPaste,\n orderedColumns, data, rowSelection, selectedRows, handleSelectRow, handleSelectAll],\n )\n\n const handleSort = useCallback(\n (col: DataGridColumn<R>) => {\n if (!col.sortable || !onSort) return\n const dir = sortColumn === col.key && sortDirection === 'asc' ? 'desc' : 'asc'\n onSort(col.key, dir)\n },\n [sortColumn, sortDirection, onSort],\n )\n\n const handleCellContextMenu = useCallback(\n (e: React.MouseEvent, rowIndex: number, col: DataGridColumn<R>) => {\n if (!onContextMenu) return\n e.preventDefault()\n const row = data[rowIndex]\n if (!row) return\n const items = onContextMenu(rowIndex, col.key, row)\n if (items.length === 0) return\n setCtxMenu({ items, position: { x: e.clientX, y: e.clientY } })\n },\n [onContextMenu, data],\n )\n\n const handleHeaderDragStart = useCallback(\n (e: React.DragEvent, colKey: string) => {\n if (!columnReorder) return\n dragColumnRef.current = colKey\n e.dataTransfer.effectAllowed = 'move'\n },\n [columnReorder, dragColumnRef],\n )\n\n const handleHeaderDragOver = useCallback(\n (e: React.DragEvent, colKey: string) => {\n if (!columnReorder || !dragColumnRef.current) return\n e.preventDefault()\n setDragOverCol(colKey)\n },\n [columnReorder, dragColumnRef],\n )\n\n const handleHeaderDrop = useCallback(\n (e: React.DragEvent, colKey: string) => {\n e.preventDefault()\n if (!columnReorder || !dragColumnRef.current) return\n const newOrder = reorderColumns(dragColumnRef.current, colKey)\n dragColumnRef.current = null\n setDragOverCol(null)\n onColumnOrderChange?.(newOrder)\n },\n [columnReorder, dragColumnRef, reorderColumns, onColumnOrderChange],\n )\n\n const handleHeaderDragEnd = useCallback(() => {\n dragColumnRef.current = null\n setDragOverCol(null)\n }, [dragColumnRef])\n\n useImperativeHandle(\n ref,\n () => ({\n scrollToRow: scrollToIndex,\n scrollToColumn: () => {},\n getActiveCell: () => activeCell,\n setActiveCell,\n }),\n [scrollToIndex, activeCell, setActiveCell],\n )\n\n const handleResizeStart = useCallback(\n (colKey: string, startX: number) => {\n const startWidth = getColumnWidth(colKey)\n\n const onMouseMove = (e: MouseEvent) => {\n const delta = e.clientX - startX\n resizeColumn(colKey, startWidth + delta)\n }\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove)\n document.removeEventListener('mouseup', onMouseUp)\n }\n document.addEventListener('mousemove', onMouseMove)\n document.addEventListener('mouseup', onMouseUp)\n },\n [getColumnWidth, resizeColumn],\n )\n\n const renderCell = useCallback(\n (row: R, rowIndex: number, col: DataGridColumn<R>, colIndex: number) => {\n const isActive = activeCell?.row === rowIndex && activeCell?.col === colIndex\n const isEditing = editingCell?.row === rowIndex && editingCell?.col === colIndex\n const isSelected = isCellInRange(rowIndex, colIndex, selection)\n\n const rawValue = col.formula\n ? col.formula(row)\n : (row[col.key] as CellValue)\n\n const extraClass = cellClassName?.(rawValue, row, rowIndex, col) ?? ''\n const extraStyle = cellStyleFn?.(rawValue, row, rowIndex, col)\n\n const cellClassNames = [\n cls.cell,\n isActive ? cls.cellActive : '',\n isEditing ? cls.cellEditing : '',\n isSelected ? cls.cellSelected : '',\n col.frozen ? cls.frozen : '',\n col.className ?? '',\n extraClass,\n ]\n .filter(Boolean)\n .join(' ')\n\n const baseCellStyle: React.CSSProperties = {\n width: getColumnWidth(col.key),\n minWidth: getColumnWidth(col.key),\n textAlign: col.align ?? 'left',\n ...extraStyle,\n }\n\n return (\n <div\n key={col.key}\n className={cellClassNames}\n style={baseCellStyle}\n onClick={() => handleCellClick(rowIndex, colIndex)}\n onDoubleClick={() => handleCellDoubleClick(rowIndex, colIndex)}\n onContextMenu={(e) => handleCellContextMenu(e, rowIndex, col)}\n role=\"gridcell\"\n aria-colindex={colIndex + 1 + (rowSelection ? 1 : 0) + (showRowNumber ? 1 : 0)}\n aria-selected={isActive || isSelected}\n >\n {isEditing ? (\n (col.editor ?? (DefaultEditor as (props: CellEditorProps<R>) => React.ReactNode))({\n value: rawValue,\n row,\n rowIndex,\n column: col,\n onChange: (v) => {\n editValueRef.current = v\n },\n onCommit: handleCommitEdit,\n onCancel: handleCancelEdit,\n })\n ) : col.render ? (\n col.render(rawValue, row, rowIndex)\n ) : (\n <span>{rawValue == null ? '' : String(rawValue)}</span>\n )}\n </div>\n )\n },\n [\n activeCell, editingCell, selection, getColumnWidth,\n handleCellClick, handleCellDoubleClick, handleCommitEdit,\n handleCancelEdit, editValueRef, cellClassName, cellStyleFn,\n handleCellContextMenu, rowSelection, showRowNumber,\n ],\n )\n\n const heightValue = typeof height === 'number' ? height : undefined\n const bodyHeight = heightValue ? heightValue - headerHeight : undefined\n\n const rootCls = [\n cls.root,\n striped ? 'sg-datagrid--striped' : '',\n loading ? 'sg-datagrid--loading' : '',\n className ?? '',\n ].filter(Boolean).join(' ')\n\n return (\n <div\n ref={containerRef}\n className={rootCls}\n style={{ width, height, display: 'flex', flexDirection: 'column', position: 'relative', ...style }}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n role=\"grid\"\n aria-rowcount={data.length}\n aria-colcount={orderedColumns.length}\n >\n {/* Header */}\n <div\n className={cls.header}\n style={{\n display: 'flex',\n height: headerHeight,\n minHeight: headerHeight,\n minWidth: totalWidth,\n }}\n role=\"row\"\n >\n {rowSelection && (\n <div\n className={`${cls.headerCell} ${cls.selectionCell}`}\n style={{ width: SELECTION_COL_WIDTH, minWidth: SELECTION_COL_WIDTH, display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n role=\"columnheader\"\n >\n <Checkbox\n checked={allSelected}\n indeterminate={someSelected}\n onChange={handleSelectAll}\n />\n </div>\n )}\n {showRowNumber && (\n <div\n className={`${cls.headerCell} ${cls.rowNumberCell}`}\n style={{ width: ROW_NUMBER_COL_WIDTH, minWidth: ROW_NUMBER_COL_WIDTH, display: 'flex', alignItems: 'center', justifyContent: 'center', userSelect: 'none' }}\n role=\"columnheader\"\n >\n #\n </div>\n )}\n {orderedColumns.map((col) => {\n const isSorted = sortColumn === col.key\n const headerCls = [\n cls.headerCell,\n col.sortable ? cls.sortable : '',\n isSorted && sortDirection === 'asc' ? cls.sortAsc : '',\n isSorted && sortDirection === 'desc' ? cls.sortDesc : '',\n col.headerClassName ?? '',\n dragOverCol === col.key ? cls.headerDragOver : '',\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div\n key={col.key}\n className={headerCls}\n style={{\n width: getColumnWidth(col.key),\n minWidth: getColumnWidth(col.key),\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n padding: '0 8px',\n cursor: col.sortable ? 'pointer' : 'default',\n userSelect: 'none',\n }}\n onClick={() => handleSort(col)}\n draggable={!!columnReorder}\n onDragStart={(e) => handleHeaderDragStart(e, col.key)}\n onDragOver={(e) => handleHeaderDragOver(e, col.key)}\n onDrop={(e) => handleHeaderDrop(e, col.key)}\n onDragEnd={handleHeaderDragEnd}\n onDragLeave={() => setDragOverCol(null)}\n role=\"columnheader\"\n >\n {col.title}\n {isSorted && (\n <span style={{ marginLeft: 4, fontSize: 10 }}>\n {sortDirection === 'asc' ? '▲' : '▼'}\n </span>\n )}\n {col.resizable !== false && (\n <div\n className={cls.resizer}\n style={{\n position: 'absolute',\n right: 0,\n top: 0,\n bottom: 0,\n width: 4,\n cursor: 'col-resize',\n }}\n onMouseDown={(e) => {\n e.stopPropagation()\n handleResizeStart(col.key, e.clientX)\n }}\n />\n )}\n </div>\n )\n })}\n </div>\n\n {/* Body */}\n <div\n ref={scrollRef as React.RefObject<HTMLDivElement>}\n className={cls.body}\n style={{\n flex: 1,\n overflow: 'auto',\n position: 'relative',\n height: bodyHeight,\n }}\n >\n {data.length === 0 ? (\n <div className={cls.empty} style={{ padding: 24, textAlign: 'center' }}>\n {emptyContent ?? locale?.noData ?? 'No data'}\n </div>\n ) : (\n <div style={{ height: range.totalHeight, position: 'relative', minWidth: totalWidth }}>\n {range.visibleItems.map((vi) => {\n const row = data[vi.index]\n if (!row) return null\n const rKey = getRowKey(row, vi.index)\n const isRowSelected = selectedRows?.has(rKey) ?? false\n const rowExtraClass = typeof rowClassName === 'function' ? rowClassName(row, vi.index) : (rowClassName ?? '')\n\n const rowCls = [\n cls.row,\n striped ? (vi.index % 2 === 0 ? cls.rowEven : cls.rowOdd) : '',\n highlightOnHover ? cls.rowHoverable : '',\n isRowSelected ? cls.rowSelected : '',\n rowExtraClass,\n ].filter(Boolean).join(' ')\n\n return (\n <div\n key={rKey}\n className={rowCls}\n style={{\n display: 'flex',\n position: 'absolute',\n top: vi.offsetTop,\n height: vi.height,\n width: '100%',\n }}\n role=\"row\"\n aria-rowindex={vi.index + 1}\n aria-selected={isRowSelected}\n onClick={() => onRowClick?.(row, vi.index)}\n onDoubleClick={() => onRowDoubleClick?.(row, vi.index)}\n >\n {rowSelection && (\n <div\n className={`${cls.cell} ${cls.selectionCell}`}\n style={{ width: SELECTION_COL_WIDTH, minWidth: SELECTION_COL_WIDTH, display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={isRowSelected}\n onChange={() => handleSelectRow(row, vi.index)}\n />\n </div>\n )}\n {showRowNumber && (\n <div\n className={`${cls.cell} ${cls.rowNumberCell}`}\n style={{ width: ROW_NUMBER_COL_WIDTH, minWidth: ROW_NUMBER_COL_WIDTH, display: 'flex', alignItems: 'center', justifyContent: 'center', color: 'var(--sg-text-tertiary, #999)' }}\n >\n {vi.index + 1}\n </div>\n )}\n {orderedColumns.map((col, ci) => renderCell(row, vi.index, col, ci))}\n </div>\n )\n })}\n </div>\n )}\n </div>\n\n {/* Summary Footer */}\n {summaryRows && summaryRows.length > 0 && data.length > 0 && (\n <div className={cls.summary} style={{ minWidth: totalWidth }}>\n {summaryRows.map((sr, sri) => (\n <div\n key={sri}\n className={`${cls.summaryRow} ${sr.className ?? ''}`}\n style={{ display: 'flex', height: rowHeight }}\n >\n {rowSelection && (\n <div className={`${cls.summaryCell}`} style={{ width: SELECTION_COL_WIDTH, minWidth: SELECTION_COL_WIDTH }} />\n )}\n {showRowNumber && (\n <div className={`${cls.summaryCell}`} style={{ width: ROW_NUMBER_COL_WIDTH, minWidth: ROW_NUMBER_COL_WIDTH }} />\n )}\n {orderedColumns.map((col) => (\n <div\n key={col.key}\n className={cls.summaryCell}\n style={{\n width: getColumnWidth(col.key),\n minWidth: getColumnWidth(col.key),\n textAlign: col.align ?? 'left',\n }}\n >\n {sr.render(col.key, data)}\n </div>\n ))}\n </div>\n ))}\n </div>\n )}\n\n {/* Context Menu */}\n {ctxMenu && (\n <ContextMenuPopup\n items={ctxMenu.items}\n position={ctxMenu.position}\n onClose={() => setCtxMenu(null)}\n />\n )}\n\n {/* Loading */}\n {loading && (\n <div className={cls.loading} style={{ position: 'absolute', inset: 0, display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'rgba(255,255,255,0.6)', zIndex: 10 }}>\n <Spin size=\"large\" />\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Virtualized table grid with sortable headers, resizable columns, inline editing,\n * row selection, striped rows, summary footer, context menu, column reorder, and clipboard hooks.\n */\nexport const DataGrid = forwardRef(DataGridInner) as <R extends Record<string, unknown>>(\n props: DataGridProps<R> & { ref?: React.Ref<DataGridRef> },\n) => React.ReactElement\n","import { useState, useCallback, useRef, useEffect, useMemo } from 'react'\nimport { createVirtual } from '@skygraph/core'\nimport type { VirtualEngine, VirtualRange } from '@skygraph/core'\n\nexport interface UseVirtualScrollOptions {\n itemCount: number\n itemHeight: number | ((index: number) => number)\n overscan?: number\n}\n\nexport interface UseVirtualScrollReturn {\n range: VirtualRange\n containerRef: React.RefObject<HTMLElement | null>\n scrollToIndex: (index: number, align?: 'start' | 'center' | 'end') => void\n engine: VirtualEngine\n}\n\nexport function useVirtualScroll(options: UseVirtualScrollOptions): UseVirtualScrollReturn {\n const containerRef = useRef<HTMLElement | null>(null)\n const engineRef = useRef<VirtualEngine | null>(null)\n\n if (!engineRef.current) {\n engineRef.current = createVirtual({\n itemCount: options.itemCount,\n itemHeight: options.itemHeight,\n overscan: options.overscan,\n })\n }\n\n const engine = engineRef.current\n\n useEffect(() => {\n engine.setItemCount(options.itemCount)\n }, [engine, options.itemCount])\n\n useEffect(() => {\n engine.setItemHeight(options.itemHeight)\n }, [engine, options.itemHeight])\n\n const [range, setRange] = useState<VirtualRange>(() =>\n engine.getRange(0, 0),\n )\n\n const recalc = useCallback(() => {\n const el = containerRef.current\n if (!el) return\n setRange(engine.getRange(el.scrollTop, el.clientHeight))\n }, [engine])\n\n useEffect(() => {\n const el = containerRef.current\n if (!el) return\n\n recalc()\n\n el.addEventListener('scroll', recalc, { passive: true })\n const ro = new ResizeObserver(recalc)\n ro.observe(el)\n\n return () => {\n el.removeEventListener('scroll', recalc)\n ro.disconnect()\n }\n }, [recalc])\n\n useEffect(() => {\n recalc()\n }, [options.itemCount, recalc])\n\n const scrollToIndex = useCallback(\n (index: number, align: 'start' | 'center' | 'end' = 'start') => {\n const el = containerRef.current\n if (!el) return\n el.scrollTop = engine.scrollToIndex(index, el.clientHeight, align)\n },\n [engine],\n )\n\n return useMemo(\n () => ({ range, containerRef, scrollToIndex, engine }),\n [range, scrollToIndex, engine],\n )\n}\n","import React from 'react'\nimport { useConfig } from '../ConfigProvider'\nimport type { BaseComponentProps, SizableProps } from '../../types'\n\n/** Props for loading spinner, overlay, and optional content blur. */\nexport interface SpinProps extends BaseComponentProps, SizableProps {\n /** When `true`, shows the loading state (subject to `delay`). @default true */\n spinning?: boolean\n /** Milliseconds to wait before showing the spinner after `spinning` becomes true. */\n delay?: number\n /** Optional text below the indicator. */\n tip?: string\n /** When `true`, covers the viewport instead of inline or wrapping children. */\n fullscreen?: boolean\n /** Custom spinner node; defaults to a styled status element. */\n indicator?: React.ReactNode\n /** When set, shows an overlay with blur on this content while loading. */\n children?: React.ReactNode\n}\n\n/**\n * Loading indicator with optional delay, tip, fullscreen mode, and child overlay.\n */\nexport function Spin({\n spinning = true,\n size: sizeProp,\n delay,\n tip,\n fullscreen,\n indicator,\n children,\n className,\n style,\n unstyled,\n}: SpinProps) {\n const config = useConfig()\n const resolvedSize = sizeProp ?? config.size ?? 'middle'\n\n const [visible, setVisible] = React.useState(delay ? false : spinning)\n\n React.useEffect(() => {\n if (!delay) {\n setVisible(spinning)\n return\n }\n\n if (spinning) {\n const timer = setTimeout(() => setVisible(true), delay)\n return () => clearTimeout(timer)\n }\n\n setVisible(false)\n }, [spinning, delay])\n\n if (!visible && !children) return null\n if (!visible && children) return <>{children}</>\n\n const spinSizeClass = resolvedSize === 'middle' ? 'default' : resolvedSize\n const spinClasses = unstyled\n ? (className ?? '')\n : ['sg-spin', `sg-spin-${spinSizeClass}`, className].filter(Boolean).join(' ')\n\n const spinElement = indicator ?? (\n <span\n className={spinClasses}\n style={style}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={config.locale?.spin?.loading ?? 'Loading'}\n />\n )\n\n if (fullscreen) {\n return (\n <div className={unstyled ? '' : 'sg-spin-fullscreen'}>\n <div className={unstyled ? '' : 'sg-spin-fullscreen-inner'}>\n {spinElement}\n {tip && <div className={unstyled ? '' : 'sg-spin-tip'}>{tip}</div>}\n </div>\n </div>\n )\n }\n\n if (!children) {\n return (\n <span className={unstyled ? '' : 'sg-spin-standalone'} style={style}>\n {spinElement}\n {tip && <div className={unstyled ? '' : 'sg-spin-tip'}>{tip}</div>}\n </span>\n )\n }\n\n return (\n <div className={unstyled ? '' : 'sg-spin-container'} style={style}>\n <div className={unstyled ? '' : 'sg-spin-overlay'}>\n {spinElement}\n {tip && <div className={unstyled ? '' : 'sg-spin-tip'}>{tip}</div>}\n </div>\n <div className={visible ? (unstyled ? '' : 'sg-spin-blur') : ''}>{children}</div>\n </div>\n )\n}\n","import React, { createContext, useContext, useMemo } from 'react'\nimport type { SizeType, SgLocale } from '../types'\n\n/**\n * Global Skygraph component configuration merged through React context.\n *\n * По `prefixCls`: сознательно НЕ входит в публичный API до реализации\n * (вариант A в `docs/styling-plan.md`, фаза 4). На практике все корневые классы\n * имеют стабильный префикс `.sg-*`; если нужна изоляция — используйте изолированный\n * скоуп на хосте (шадоу-рут/отдельный контейнер со своими токенами).\n */\nexport interface SgConfig {\n /** Default size token for nested components. */\n size?: SizeType\n /** Disables interactions for nested components when true. */\n disabled?: boolean\n /** Enables bordered styling for nested components when true. */\n bordered?: boolean\n /** Locale messages shallow-merged with the parent provider when set. */\n locale?: SgLocale\n}\n\nconst SgConfigContext = createContext<SgConfig>({})\n\n/** Props for `ConfigProvider`, extending `SgConfig` with React children. */\nexport interface ConfigProviderProps extends SgConfig {\n /** Tree of components that consume merged configuration from this provider. */\n children: React.ReactNode\n}\n\n/**\n * Merges Skygraph configuration with any parent provider and exposes it via context.\n * Descendants read values through `useConfig` or `useConfigWithDefaults`.\n */\nexport function ConfigProvider({ children, ...config }: ConfigProviderProps) {\n const parent = useContext(SgConfigContext)\n\n const merged = useMemo<SgConfig>(\n () => ({\n size: config.size ?? parent.size,\n disabled: config.disabled ?? parent.disabled,\n bordered: config.bordered ?? parent.bordered,\n locale: config.locale\n ? parent.locale\n ? { ...parent.locale, ...config.locale }\n : config.locale\n : parent.locale,\n }),\n [config.size, config.disabled, config.bordered, config.locale, parent],\n )\n\n return <SgConfigContext.Provider value={merged}>{children}</SgConfigContext.Provider>\n}\n\n/** Returns the merged `SgConfig` from the nearest ancestor `ConfigProvider`. */\nexport function useConfig(): SgConfig {\n return useContext(SgConfigContext)\n}\n\n/**\n * Resolves effective `size` and `disabled` from props, context, and explicit defaults.\n * Returns the original props plus `resolvedSize` and `resolvedDisabled` for consumers.\n */\nexport function useConfigWithDefaults<T extends Record<string, unknown>>(\n props: T,\n defaults: { size?: SizeType; disabled?: boolean; bordered?: boolean },\n): T & { resolvedSize: SizeType; resolvedDisabled: boolean } {\n const config = useContext(SgConfigContext)\n\n return useMemo(() => {\n const resolvedSize =\n (props as Record<string, unknown>).size as SizeType | undefined ??\n config.size ??\n defaults.size ??\n 'middle'\n const resolvedDisabled =\n ((props as Record<string, unknown>).disabled as boolean | undefined) ??\n config.disabled ??\n defaults.disabled ??\n false\n\n return { ...props, resolvedSize, resolvedDisabled }\n }, [props, config.size, config.disabled, defaults.size, defaults.disabled])\n}\n","import React from 'react'\nimport { useConfig } from '../ConfigProvider'\nimport type { BaseComponentProps, InteractiveProps } from '../../types'\nimport { Spin } from './Spin'\n\n/** Props for the Checkbox component. */\nexport interface CheckboxProps extends BaseComponentProps, InteractiveProps {\n /** Controlled checked state. */\n checked?: boolean\n /** Uncontrolled initial checked state. */\n defaultChecked?: boolean\n /** Renders the native checkbox in indeterminate state. */\n indeterminate?: boolean\n /** Called when the checked state changes. */\n onChange?: (checked: boolean) => void\n /** Label content beside the control. */\n children?: React.ReactNode\n}\n\n/** Labeled checkbox with indeterminate support and optional loading state. */\nexport function Checkbox({\n checked,\n defaultChecked,\n disabled: disabledProp,\n loading,\n indeterminate,\n onChange,\n children,\n className,\n style,\n unstyled,\n}: CheckboxProps) {\n const config = useConfig()\n const disabled = disabledProp ?? config.disabled ?? false\n\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate ?? false\n }\n }, [indeterminate])\n\n const wrapperClass = unstyled\n ? (className ?? '')\n : [\n 'sg-checkbox',\n disabled || loading ? 'sg-checkbox-disabled' : '',\n loading ? 'sg-checkbox-loading' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <label className={wrapperClass} style={style}>\n <input\n ref={inputRef}\n type=\"checkbox\"\n aria-checked={checked}\n className={unstyled ? '' : 'sg-checkbox-input'}\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled || loading}\n onChange={(e) => onChange?.(e.target.checked)}\n />\n {!unstyled && <span className=\"sg-checkbox-box\" aria-hidden />}\n {children && <span className={unstyled ? '' : 'sg-checkbox-label'}>{children}</span>}\n {loading && <Spin size=\"small\" unstyled={unstyled} />}\n </label>\n )\n}\n","import { useState, useCallback, useRef } from 'react'\nimport type { CellPosition, CellRange, CellValue, DataGridColumn } from './types'\n\n/**\n * Holds active cell, edit session, range selection, column width, and column order state for `DataGrid`.\n */\nexport function useDataGridState<R>(columns: DataGridColumn<R>[], data: R[]) {\n const [activeCell, setActiveCell] = useState<CellPosition | null>(null)\n const [editingCell, setEditingCell] = useState<CellPosition | null>(null)\n const [selection, setSelection] = useState<CellRange | null>(null)\n const [columnWidths, setColumnWidths] = useState<Map<string, number>>(() => {\n const map = new Map<string, number>()\n for (const col of columns) {\n if (col.width) map.set(col.key, col.width)\n }\n return map\n })\n const [columnOrder, setColumnOrder] = useState<string[] | null>(null)\n\n const editValueRef = useRef<CellValue>(undefined)\n const dragColumnRef = useRef<string | null>(null)\n\n const startEditing = useCallback(\n (pos: CellPosition) => {\n const col = columns[pos.col]\n if (!col) return\n\n const isEditable =\n typeof col.editable === 'function'\n ? col.editable(data[pos.row], pos.row)\n : col.editable !== false\n\n if (!isEditable) return\n\n editValueRef.current = (data[pos.row] as Record<string, unknown>)[col.key] as CellValue\n setEditingCell(pos)\n },\n [columns, data],\n )\n\n const stopEditing = useCallback(() => {\n setEditingCell(null)\n editValueRef.current = undefined\n }, [])\n\n const navigate = useCallback(\n (\n from: CellPosition,\n direction: 'up' | 'down' | 'left' | 'right',\n shiftKey = false,\n ): CellPosition => {\n let { row, col } = from\n switch (direction) {\n case 'up':\n row = Math.max(0, row - 1)\n break\n case 'down':\n row = Math.min(data.length - 1, row + 1)\n break\n case 'left':\n col = Math.max(0, col - 1)\n break\n case 'right':\n col = Math.min(columns.length - 1, col + 1)\n break\n }\n const next = { row, col }\n\n if (shiftKey) {\n setSelection((prev) => ({\n start: prev?.start ?? from,\n end: next,\n }))\n } else {\n setSelection(null)\n }\n\n setActiveCell(next)\n return next\n },\n [data.length, columns.length],\n )\n\n const resizeColumn = useCallback(\n (key: string, width: number) => {\n const col = columns.find((c) => c.key === key)\n const minW = col?.minWidth ?? 50\n const maxW = col?.maxWidth ?? Infinity\n const clamped = Math.max(minW, Math.min(maxW, width))\n setColumnWidths((prev) => new Map(prev).set(key, clamped))\n },\n [columns],\n )\n\n const getColumnWidth = useCallback(\n (key: string): number => {\n return columnWidths.get(key) ?? columns.find((c) => c.key === key)?.width ?? 120\n },\n [columnWidths, columns],\n )\n\n const reorderColumns = useCallback(\n (fromKey: string, toKey: string) => {\n const order = columnOrder ?? columns.map((c) => c.key)\n const fromIdx = order.indexOf(fromKey)\n const toIdx = order.indexOf(toKey)\n if (fromIdx === -1 || toIdx === -1 || fromIdx === toIdx) return order\n const next = [...order]\n const [moved] = next.splice(fromIdx, 1)\n next.splice(toIdx, 0, moved)\n setColumnOrder(next)\n return next\n },\n [columnOrder, columns],\n )\n\n return {\n activeCell,\n setActiveCell,\n editingCell,\n startEditing,\n stopEditing,\n editValueRef,\n selection,\n setSelection,\n navigate,\n resizeColumn,\n getColumnWidth,\n columnOrder,\n setColumnOrder,\n reorderColumns,\n dragColumnRef,\n }\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React"]}
|