@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
TypeScript
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[];