UNPKG

@leankylin-sheet/core

Version:

LeankylinSheet is a drop-in javascript spreadsheet library that provides rich features like Excel and Google Sheets

352 lines (351 loc) 8.19 kB
import { Patch as ImmerPatch } from "immer"; import { PatchOptions } from "./utils"; export type Op = { op: "replace" | "remove" | "add" | "insertRowCol" | "deleteRowCol" | "addSheet" | "deleteSheet"; id?: string; path: (string | number)[]; value?: any; }; export type Rect = { top: number; left: number; width: number; height: number; }; export type CellStyle = { bl?: number; it?: number; ff?: number | string; fs?: number | string; fc?: string; ht?: number; vt?: number; tb?: string; cl?: number; un?: number; tr?: string; }; export type Cell = { v?: string | number | boolean; m?: string | number; mc?: { r: number; c: number; rs?: number; cs?: number; }; f?: string; ct?: { fa?: string; t?: string; s?: any; }; qp?: number; spl?: any; bg?: string; lo?: number; rt?: number; ps?: { left: number | null; top: number | null; width: number | null; height: number | null; value: string; isShow: boolean; }; hl?: { r: number; c: number; id: string; }; } & CellStyle; export type CellWithRowAndCol = { r: number; c: number; v: Cell | null; }; export type CellMatrix = (Cell | null)[][]; export type Selection = { left?: number; width?: number; top?: number; height?: number; left_move?: number; width_move?: number; top_move?: number; height_move?: number; row: number[]; column: number[]; row_focus?: number; column_focus?: number; moveXY?: { x: number; y: number; }; row_select?: boolean; column_select?: boolean; }; export type Presence = { sheetId: string; username: string; userId?: string; color: string; selection: { r: number; c: number; }; }; export type SheetConfig = { merge?: Record<string, { r: number; c: number; rs: number; cs: number; }>; rowlen?: Record<string, number>; columnlen?: Record<string, number>; rowhidden?: Record<string, number>; colhidden?: Record<string, number>; customHeight?: Record<string, number>; customWidth?: Record<string, number>; borderInfo?: any[]; authority?: any; rowReadOnly?: Record<number, number>; colReadOnly?: Record<number, number>; }; export type Image = { id: string; width: number; height: number; left: number; top: number; src: string; }; export type Sheet = { name: string; config?: SheetConfig; order?: number; color?: string; data?: CellMatrix; celldata?: CellWithRowAndCol[]; id?: string; images?: Image[]; zoomRatio?: number; column?: number; row?: number; addRows?: number; status?: number; hide?: number; luckysheet_select_save?: Selection[]; luckysheet_selection_range?: { row: number[]; column: number[]; }[]; calcChain?: any[]; defaultRowHeight?: number; defaultColWidth?: number; showGridLines?: boolean | number; pivotTable?: any; isPivotTable?: boolean; filter?: Record<string, any>; filter_select?: { row: number[]; column: number[]; }; luckysheet_conditionformat_save?: any[]; luckysheet_alternateformat_save?: any[]; dataVerification?: any; hyperlink?: Record<string, { linkType: string; linkAddress: string; }>; dynamicArray_compute?: any; dynamicArray?: any[]; frozen?: { type: "row" | "column" | "both" | "rangeRow" | "rangeColumn" | "rangeBoth"; range?: { row_focus: number; column_focus: number; }; }; }; export type CommentBox = { r: number; c: number; rc: string; autoFocus: boolean; value: string; size: { fromX: number; fromY: number; toX: number; toY: number; } & Rect; } & Rect; export type SearchResult = { r: number; c: number; sheetName: string; sheetId: string; cellPosition: string; value: string; }; export type LinkCardProps = { sheetId: string; r: number; c: number; rc: string; originText: string; originType: string; originAddress: string; position: { cellLeft: number; cellBottom: number; }; isEditing: boolean; selectingCellRange?: boolean; }; export type RangeDialogProps = { show: boolean; rangeTxt: string; type: string; singleSelect: boolean; }; export type DataRegulationProps = { type: string; type2: string; rangeTxt: string; value1: string; value2: string; validity: string; remote: boolean; prohibitInput: boolean; hintShow: boolean; hintValue: string; }; export type ConditionRulesProps = { rulesType: string; rulesValue: string; textColor: { check: boolean; color: string; }; cellColor: { check: boolean; color: string; }; betweenValue: { value1: string; value2: string; }; dateValue: string; repeatValue: string; projectValue: string; }; export type FilterOptions = { startRow: number; endRow: number; startCol: number; endCol: number; left: number; top: number; width: number; height: number; items: { col: number; left: number; top: number; }[]; }; export type History = { patches: ImmerPatch[]; inversePatches: ImmerPatch[]; options?: PatchOptions; }; export type Freezen = { horizontal?: { freezenhorizontaldata: any[]; top: number; }; vertical?: { freezenverticaldata: any[]; left: number; }; }; export type GlobalCache = { overwriteCell?: boolean; ignoreWriteCell?: boolean; doNotFocus?: boolean; doNotUpdateCell?: boolean; recentTextColor?: string; recentBackgroundColor?: string; visibleColumnsUnique?: number[]; undoList: History[]; redoList: History[]; editingCommentBoxEle?: HTMLDivElement; freezen?: Record<string, Freezen>; image?: { imgInitialPosition: Rect | undefined; cursorMoveStartPosition: { x: number; y: number; } | undefined; resizingSide: string | undefined; }; commentBox?: { movingId: string | undefined; resizingId: string | undefined; resizingSide: string | undefined; commentRC: { r: number; c: number; rc: string; }; boxInitialPosition: Rect | undefined; cursorMoveStartPosition: { x: number; y: number; } | undefined; }; searchDialog?: { mouseEnter?: boolean; moveProps?: { initialPosition: Rect | undefined; cursorMoveStartPosition: { x: number; y: number; } | undefined; }; }; linkCard?: { mouseEnter?: boolean; rangeSelectionModal?: { initialPosition: Rect | undefined; cursorMoveStartPosition: { x: number; y: number; } | undefined; }; }; dragCellStartPos?: { x: number; y: number; }; touchMoveStatus?: boolean; touchHandleStatus?: boolean; touchMoveStartPos?: { x: number; y: number; vy: number; moveType: string; vy_x?: number; vy_y?: number; scrollTop?: number; scrollLeft?: number; }; }; export type SingleRange = { row: number[]; column: number[]; }; export type Range = SingleRange[];