UNPKG

e-virt-table

Version:

A powerful data table based on canvas. You can use it as data grid、Microsoft Excel or Google sheets. It supports virtual scroll、cell edit etc.

93 lines (92 loc) 2.12 kB
import type { Align } from './types'; import type Context from './Context'; export type TextSelectionRange = { start: number; end: number; }; export type TextGlyph = { char: string; index: number; line: number; x: number; y: number; width: number; height: number; }; export type TextLineItem = { char: string; sourceIndex: number; ellipsis?: boolean; }; export type TextLayoutLine = { items: TextLineItem[]; text: string; caretIndex: number; lineIndex: number; drawX: number; drawY: number; width: number; segments: TextLineSegment[]; }; export type TextLineSegment = { char: string; itemIndex: number; sourceIndex: number; x: number; width: number; }; export type TextLayout = { text: string; chars: string[]; glyphs: TextGlyph[]; lines: TextLayoutLine[]; box: { x: number; y: number; width: number; height: number; }; contentBox: { x: number; y: number; width: number; height: number; }; contentY: number; lineHeight: number; font: string; color: string; align: Align; ellipsis: boolean; }; export default class TextSelector { private static readonly DRAG_THRESHOLD; private ctx; private layouts; private activeCellKey; private selectionStart; private selectionEnd; private pending; constructor(ctx: Context); private get canSelect(); /** 跨表头列或从表头拖入 body 时,让位给列/区域选择 */ private yieldToColumnDrag; private onMouseDown; private onMouseMove; private tryStartDrag; private onMouseUp; private onCopyKeydown; /** * 命中最顶层文字(固定列/表头后绘制会覆盖普通单元格,取最后一个命中)。 */ private hitTest; private updateSelection; private hitTestText; clearLayouts(): void; draw(): void; private drawTextSelection; private getSelectionRange; private getSelectedText; private resetSelection; destroy(): void; }