@gridsheet/core 3.0.0-rc.8
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 +17 -0
- package/dist/constants.d.ts +21 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +28 -0
- package/dist/constants.js.map +1 -0
- package/dist/formula/evaluator.d.ts +134 -0
- package/dist/formula/evaluator.d.ts.map +1 -0
- package/dist/formula/evaluator.js +585 -0
- package/dist/formula/evaluator.js.map +1 -0
- package/dist/formula/formula-error.d.ts +10 -0
- package/dist/formula/formula-error.d.ts.map +1 -0
- package/dist/formula/formula-error.js +15 -0
- package/dist/formula/formula-error.js.map +1 -0
- package/dist/formula/functions/__async.d.ts +67 -0
- package/dist/formula/functions/__async.d.ts.map +1 -0
- package/dist/formula/functions/__async.js +70 -0
- package/dist/formula/functions/__async.js.map +1 -0
- package/dist/formula/functions/__base.d.ts +112 -0
- package/dist/formula/functions/__base.d.ts.map +1 -0
- package/dist/formula/functions/__base.js +265 -0
- package/dist/formula/functions/__base.js.map +1 -0
- package/dist/formula/functions/__utils.d.ts +28 -0
- package/dist/formula/functions/__utils.d.ts.map +1 -0
- package/dist/formula/functions/__utils.js +179 -0
- package/dist/formula/functions/__utils.js.map +1 -0
- package/dist/formula/functions/abs.d.ts +9 -0
- package/dist/formula/functions/abs.d.ts.map +1 -0
- package/dist/formula/functions/abs.js +15 -0
- package/dist/formula/functions/abs.js.map +1 -0
- package/dist/formula/functions/add.d.ts +10 -0
- package/dist/formula/functions/add.d.ts.map +1 -0
- package/dist/formula/functions/add.js +37 -0
- package/dist/formula/functions/add.js.map +1 -0
- package/dist/formula/functions/and.d.ts +9 -0
- package/dist/formula/functions/and.d.ts.map +1 -0
- package/dist/formula/functions/and.js +23 -0
- package/dist/formula/functions/and.js.map +1 -0
- package/dist/formula/functions/arrayformula.d.ts +12 -0
- package/dist/formula/functions/arrayformula.d.ts.map +1 -0
- package/dist/formula/functions/arrayformula.js +24 -0
- package/dist/formula/functions/arrayformula.js.map +1 -0
- package/dist/formula/functions/average.d.ts +9 -0
- package/dist/formula/functions/average.d.ts.map +1 -0
- package/dist/formula/functions/average.js +40 -0
- package/dist/formula/functions/average.js.map +1 -0
- package/dist/formula/functions/concat.d.ts +9 -0
- package/dist/formula/functions/concat.d.ts.map +1 -0
- package/dist/formula/functions/concat.js +27 -0
- package/dist/formula/functions/concat.js.map +1 -0
- package/dist/formula/functions/count.d.ts +9 -0
- package/dist/formula/functions/count.d.ts.map +1 -0
- package/dist/formula/functions/count.js +32 -0
- package/dist/formula/functions/count.js.map +1 -0
- package/dist/formula/functions/counta.d.ts +9 -0
- package/dist/formula/functions/counta.d.ts.map +1 -0
- package/dist/formula/functions/counta.js +32 -0
- package/dist/formula/functions/counta.js.map +1 -0
- package/dist/formula/functions/divide.d.ts +10 -0
- package/dist/formula/functions/divide.d.ts.map +1 -0
- package/dist/formula/functions/divide.js +34 -0
- package/dist/formula/functions/divide.js.map +1 -0
- package/dist/formula/functions/eq.d.ts +9 -0
- package/dist/formula/functions/eq.d.ts.map +1 -0
- package/dist/formula/functions/eq.js +19 -0
- package/dist/formula/functions/eq.js.map +1 -0
- package/dist/formula/functions/gt.d.ts +9 -0
- package/dist/formula/functions/gt.d.ts.map +1 -0
- package/dist/formula/functions/gt.js +19 -0
- package/dist/formula/functions/gt.js.map +1 -0
- package/dist/formula/functions/gte.d.ts +9 -0
- package/dist/formula/functions/gte.d.ts.map +1 -0
- package/dist/formula/functions/gte.js +19 -0
- package/dist/formula/functions/gte.js.map +1 -0
- package/dist/formula/functions/if.d.ts +9 -0
- package/dist/formula/functions/if.d.ts.map +1 -0
- package/dist/formula/functions/if.js +29 -0
- package/dist/formula/functions/if.js.map +1 -0
- package/dist/formula/functions/iferror.d.ts +10 -0
- package/dist/formula/functions/iferror.d.ts.map +1 -0
- package/dist/formula/functions/iferror.js +28 -0
- package/dist/formula/functions/iferror.js.map +1 -0
- package/dist/formula/functions/len.d.ts +9 -0
- package/dist/formula/functions/len.d.ts.map +1 -0
- package/dist/formula/functions/len.js +21 -0
- package/dist/formula/functions/len.js.map +1 -0
- package/dist/formula/functions/lt.d.ts +9 -0
- package/dist/formula/functions/lt.d.ts.map +1 -0
- package/dist/formula/functions/lt.js +19 -0
- package/dist/formula/functions/lt.js.map +1 -0
- package/dist/formula/functions/lte.d.ts +9 -0
- package/dist/formula/functions/lte.d.ts.map +1 -0
- package/dist/formula/functions/lte.js +19 -0
- package/dist/formula/functions/lte.js.map +1 -0
- package/dist/formula/functions/max.d.ts +9 -0
- package/dist/formula/functions/max.d.ts.map +1 -0
- package/dist/formula/functions/max.js +37 -0
- package/dist/formula/functions/max.js.map +1 -0
- package/dist/formula/functions/min.d.ts +9 -0
- package/dist/formula/functions/min.d.ts.map +1 -0
- package/dist/formula/functions/min.js +37 -0
- package/dist/formula/functions/min.js.map +1 -0
- package/dist/formula/functions/minus.d.ts +10 -0
- package/dist/formula/functions/minus.d.ts.map +1 -0
- package/dist/formula/functions/minus.js +41 -0
- package/dist/formula/functions/minus.js.map +1 -0
- package/dist/formula/functions/multiply.d.ts +9 -0
- package/dist/formula/functions/multiply.d.ts.map +1 -0
- package/dist/formula/functions/multiply.js +19 -0
- package/dist/formula/functions/multiply.js.map +1 -0
- package/dist/formula/functions/ne.d.ts +9 -0
- package/dist/formula/functions/ne.d.ts.map +1 -0
- package/dist/formula/functions/ne.js +19 -0
- package/dist/formula/functions/ne.js.map +1 -0
- package/dist/formula/functions/not.d.ts +9 -0
- package/dist/formula/functions/not.d.ts.map +1 -0
- package/dist/formula/functions/not.js +22 -0
- package/dist/formula/functions/not.js.map +1 -0
- package/dist/formula/functions/now.d.ts +9 -0
- package/dist/formula/functions/now.d.ts.map +1 -0
- package/dist/formula/functions/now.js +14 -0
- package/dist/formula/functions/now.js.map +1 -0
- package/dist/formula/functions/or.d.ts +9 -0
- package/dist/formula/functions/or.d.ts.map +1 -0
- package/dist/formula/functions/or.js +23 -0
- package/dist/formula/functions/or.js.map +1 -0
- package/dist/formula/functions/power.d.ts +9 -0
- package/dist/formula/functions/power.d.ts.map +1 -0
- package/dist/formula/functions/power.js +18 -0
- package/dist/formula/functions/power.js.map +1 -0
- package/dist/formula/functions/sum.d.ts +9 -0
- package/dist/formula/functions/sum.d.ts.map +1 -0
- package/dist/formula/functions/sum.js +34 -0
- package/dist/formula/functions/sum.js.map +1 -0
- package/dist/formula/functions/uminus.d.ts +9 -0
- package/dist/formula/functions/uminus.d.ts.map +1 -0
- package/dist/formula/functions/uminus.js +17 -0
- package/dist/formula/functions/uminus.js.map +1 -0
- package/dist/formula/mapping.d.ts +11 -0
- package/dist/formula/mapping.d.ts.map +1 -0
- package/dist/formula/mapping.js +82 -0
- package/dist/formula/mapping.js.map +1 -0
- package/dist/formula/solver.d.ts +39 -0
- package/dist/formula/solver.d.ts.map +1 -0
- package/dist/formula/solver.js +71 -0
- package/dist/formula/solver.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/autofill.d.ts +22 -0
- package/dist/lib/autofill.d.ts.map +1 -0
- package/dist/lib/autofill.js +276 -0
- package/dist/lib/autofill.js.map +1 -0
- package/dist/lib/book.d.ts +131 -0
- package/dist/lib/book.d.ts.map +1 -0
- package/dist/lib/book.js +53 -0
- package/dist/lib/book.js.map +1 -0
- package/dist/lib/cell.d.ts +17 -0
- package/dist/lib/cell.d.ts.map +1 -0
- package/dist/lib/cell.js +17 -0
- package/dist/lib/cell.js.map +1 -0
- package/dist/lib/coords.d.ts +22 -0
- package/dist/lib/coords.d.ts.map +1 -0
- package/dist/lib/coords.js +73 -0
- package/dist/lib/coords.js.map +1 -0
- package/dist/lib/date.d.ts +2 -0
- package/dist/lib/date.d.ts.map +1 -0
- package/dist/lib/date.js +91 -0
- package/dist/lib/date.js.map +1 -0
- package/dist/lib/dom.d.ts +7 -0
- package/dist/lib/dom.d.ts.map +1 -0
- package/dist/lib/dom.js +28 -0
- package/dist/lib/dom.js.map +1 -0
- package/dist/lib/filter.d.ts +7 -0
- package/dist/lib/filter.d.ts.map +1 -0
- package/dist/lib/filter.js +122 -0
- package/dist/lib/filter.js.map +1 -0
- package/dist/lib/input.d.ts +28 -0
- package/dist/lib/input.d.ts.map +1 -0
- package/dist/lib/input.js +73 -0
- package/dist/lib/input.js.map +1 -0
- package/dist/lib/label.d.ts +4 -0
- package/dist/lib/label.d.ts.map +1 -0
- package/dist/lib/label.js +10 -0
- package/dist/lib/label.js.map +1 -0
- package/dist/lib/operation.d.ts +31 -0
- package/dist/lib/operation.d.ts.map +1 -0
- package/dist/lib/operation.js +36 -0
- package/dist/lib/operation.js.map +1 -0
- package/dist/lib/palette.d.ts +2 -0
- package/dist/lib/palette.d.ts.map +1 -0
- package/dist/lib/palette.js +26 -0
- package/dist/lib/palette.js.map +1 -0
- package/dist/lib/popup.d.ts +24 -0
- package/dist/lib/popup.d.ts.map +1 -0
- package/dist/lib/popup.js +21 -0
- package/dist/lib/popup.js.map +1 -0
- package/dist/lib/reference.d.ts +19 -0
- package/dist/lib/reference.d.ts.map +1 -0
- package/dist/lib/reference.js +40 -0
- package/dist/lib/reference.js.map +1 -0
- package/dist/lib/sheet.d.ts +512 -0
- package/dist/lib/sheet.d.ts.map +1 -0
- package/dist/lib/sheet.js +1530 -0
- package/dist/lib/sheet.js.map +1 -0
- package/dist/lib/sheet_utils.d.ts +55 -0
- package/dist/lib/sheet_utils.d.ts.map +1 -0
- package/dist/lib/sheet_utils.js +125 -0
- package/dist/lib/sheet_utils.js.map +1 -0
- package/dist/lib/spatial.d.ts +79 -0
- package/dist/lib/spatial.d.ts.map +1 -0
- package/dist/lib/spatial.js +227 -0
- package/dist/lib/spatial.js.map +1 -0
- package/dist/lib/time.d.ts +29 -0
- package/dist/lib/time.d.ts.map +1 -0
- package/dist/lib/time.js +113 -0
- package/dist/lib/time.js.map +1 -0
- package/dist/lib/virtualization.d.ts +22 -0
- package/dist/lib/virtualization.d.ts.map +1 -0
- package/dist/lib/virtualization.js +91 -0
- package/dist/lib/virtualization.js.map +1 -0
- package/dist/policy/core.d.ts +161 -0
- package/dist/policy/core.d.ts.map +1 -0
- package/dist/policy/core.js +248 -0
- package/dist/policy/core.js.map +1 -0
- package/dist/policy/thousand_separator.d.ts +4 -0
- package/dist/policy/thousand_separator.d.ts.map +1 -0
- package/dist/policy/thousand_separator.js +13 -0
- package/dist/policy/thousand_separator.js.map +1 -0
- package/dist/sentinels.d.ts +40 -0
- package/dist/sentinels.d.ts.map +1 -0
- package/dist/sentinels.js +41 -0
- package/dist/sentinels.js.map +1 -0
- package/dist/styles/embedder.d.ts +2 -0
- package/dist/styles/embedder.d.ts.map +1 -0
- package/dist/styles/embedder.js +11 -0
- package/dist/styles/embedder.js.map +1 -0
- package/dist/styles/minified.d.ts +3 -0
- package/dist/styles/minified.d.ts.map +1 -0
- package/dist/styles/minified.js +6 -0
- package/dist/styles/minified.js.map +1 -0
- package/dist/types.d.ts +310 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +5 -0
- package/dist/utils.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { MatrixType, AreaType, ZoneType, RangeType, PointType, CellsByAddressType, ShapeType, MatricesByAddress, CellType, Address } from '../types';
|
|
2
|
+
export declare const superposeArea: (srcArea: AreaType, dstArea: AreaType) => ShapeType;
|
|
3
|
+
export declare const concatAreas: (area1: AreaType, area2: AreaType) => AreaType;
|
|
4
|
+
export declare const zoneToArea: (zone: ZoneType) => AreaType;
|
|
5
|
+
export declare const areaToZone: (area: AreaType) => ZoneType;
|
|
6
|
+
export declare const areaToRange: (area: AreaType) => string;
|
|
7
|
+
export declare const between: (range: RangeType, index: number) => boolean;
|
|
8
|
+
export declare const among: (area: AreaType, point: PointType) => boolean;
|
|
9
|
+
type ShapeExtension = {
|
|
10
|
+
base?: number;
|
|
11
|
+
};
|
|
12
|
+
export declare const zoneDiff: (zone: ZoneType) => ShapeType;
|
|
13
|
+
export declare const zoneShape: (zone: ZoneType) => ShapeType;
|
|
14
|
+
export declare const areaDiff: (area: AreaType) => ShapeType;
|
|
15
|
+
export declare const areaShape: (area: AreaType) => ShapeType;
|
|
16
|
+
export declare const matrixShape: ({ base, matrix }: {
|
|
17
|
+
matrix: MatrixType;
|
|
18
|
+
} & ShapeExtension) => ShapeType;
|
|
19
|
+
export declare const makeSequence: (start: number, stop: number, step?: number) => number[];
|
|
20
|
+
export declare const oa2aa: (oa: {
|
|
21
|
+
[s: string]: any;
|
|
22
|
+
}[], fields: string[]) => MatrixType;
|
|
23
|
+
export declare const aa2oa: (aa: MatrixType, fields: string[]) => {
|
|
24
|
+
[s: string]: any;
|
|
25
|
+
}[];
|
|
26
|
+
export declare const createMatrix: <T = any>(numRows: number, numCols: number, fill?: T) => T[][];
|
|
27
|
+
export declare const buildInitialCellsFromOrigin: ({ cells, ensured, matrix, flattenAs, origin, }: {
|
|
28
|
+
cells?: CellsByAddressType;
|
|
29
|
+
ensured?: {
|
|
30
|
+
numRows?: number;
|
|
31
|
+
numCols?: number;
|
|
32
|
+
};
|
|
33
|
+
flattenAs?: keyof CellType;
|
|
34
|
+
matrix?: MatrixType;
|
|
35
|
+
origin?: Address;
|
|
36
|
+
}) => CellsByAddressType;
|
|
37
|
+
export declare const buildInitialCells: ({ cells, ensured, matrices, flattenAs, }?: {
|
|
38
|
+
cells?: CellsByAddressType;
|
|
39
|
+
ensured?: {
|
|
40
|
+
numRows?: number;
|
|
41
|
+
numCols?: number;
|
|
42
|
+
};
|
|
43
|
+
flattenAs?: keyof CellType;
|
|
44
|
+
matrices?: MatricesByAddress<any>;
|
|
45
|
+
}) => CellsByAddressType;
|
|
46
|
+
export declare const buildCells: <T>({ cells, matrices, flattenAs, }: {
|
|
47
|
+
cells?: CellsByAddressType;
|
|
48
|
+
flattenAs?: keyof CellType;
|
|
49
|
+
matrices?: MatricesByAddress<T>;
|
|
50
|
+
}) => CellsByAddressType;
|
|
51
|
+
export declare const getMaxSizesFromCells: (cells?: CellsByAddressType) => {
|
|
52
|
+
numRows: number;
|
|
53
|
+
numCols: number;
|
|
54
|
+
};
|
|
55
|
+
export declare const range: (start: number, end: number) => number[];
|
|
56
|
+
export declare const complementSelectingArea: (selectingArea: AreaType, choosing: PointType) => AreaType;
|
|
57
|
+
export declare const expandRange: (range: string) => Address[];
|
|
58
|
+
export declare const restrictZone: (zone: ZoneType) => ZoneType;
|
|
59
|
+
export type BinarySearchPredicate = (mid: number) => boolean;
|
|
60
|
+
export declare const binarySearch: (low: number, high: number, predicate: BinarySearchPredicate, lessThan: boolean) => number;
|
|
61
|
+
/**
|
|
62
|
+
* Convert a list of addresses into an array of bounding areas.
|
|
63
|
+
* Adjacent cells (4-connected: up/down/left/right) are grouped into the same area.
|
|
64
|
+
* Each resulting AreaType is the bounding rectangle of one connected group.
|
|
65
|
+
*/
|
|
66
|
+
export declare const addressesToAreas: (addresses: Address[]) => AreaType[];
|
|
67
|
+
/**
|
|
68
|
+
* Extract unique column indices (x) from a list of addresses, ignoring row information.
|
|
69
|
+
* @param asc - true: ascending, false: descending, null: insertion order
|
|
70
|
+
*/
|
|
71
|
+
export declare const addressesToCols: (addresses: Address[], asc?: boolean | null) => number[];
|
|
72
|
+
/**
|
|
73
|
+
* Extract unique row indices (y) from a list of addresses, ignoring column information.
|
|
74
|
+
* @param asc - true: ascending, false: descending, null: insertion order
|
|
75
|
+
*/
|
|
76
|
+
export declare const addressesToRows: (addresses: Address[], asc?: boolean | null) => number[];
|
|
77
|
+
export declare const isZoneNotSelected: (zone: ZoneType) => boolean;
|
|
78
|
+
export {};
|
|
79
|
+
//# sourceMappingURL=spatial.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spatial.d.ts","sourceRoot":"","sources":["../../src/lib/spatial.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { DEFAULT_KEY as R, DEFAULT_COL_KEY as C, DEFAULT_ROW_KEY as E } from "../constants.js";
|
|
2
|
+
import { p2a as p, a2p as b, c2x as Y, x2c as g } from "./coords.js";
|
|
3
|
+
const O = (t, o) => {
|
|
4
|
+
const { rows: s, cols: n } = X(t), { rows: r, cols: e } = X(o);
|
|
5
|
+
return {
|
|
6
|
+
rows: s > r ? s : r,
|
|
7
|
+
cols: n > e ? n : e
|
|
8
|
+
};
|
|
9
|
+
}, k = (t, o) => {
|
|
10
|
+
const s = { ...t };
|
|
11
|
+
return o.left < t.left && (s.left = o.left), o.right > t.right && (s.right = o.right), o.top < t.top && (s.top = o.top), o.bottom > t.bottom && (s.bottom = o.bottom), s;
|
|
12
|
+
}, _ = (t) => {
|
|
13
|
+
if (t.endY === -1 || t.endX === -1)
|
|
14
|
+
return { top: -1, left: -1, bottom: -1, right: -1 };
|
|
15
|
+
const [o, s] = t.startY < t.endY ? [t.startY, t.endY] : [t.endY, t.startY], [n, r] = t.startX < t.endX ? [t.startX, t.endX] : [t.endX, t.startX];
|
|
16
|
+
return { top: o, left: n, bottom: s, right: r };
|
|
17
|
+
}, D = (t) => ({
|
|
18
|
+
startY: t.top,
|
|
19
|
+
startX: t.left,
|
|
20
|
+
endY: t.bottom,
|
|
21
|
+
endX: t.right
|
|
22
|
+
}), F = (t) => {
|
|
23
|
+
const { top: o, left: s, bottom: n, right: r } = t;
|
|
24
|
+
if (o === n && s === r)
|
|
25
|
+
return p({ y: o, x: s });
|
|
26
|
+
const e = p({ y: o, x: s }), c = p({ y: n, x: r });
|
|
27
|
+
return `${e}:${c}`;
|
|
28
|
+
}, I = (t, o) => t.start === -1 || t.end === -1 ? !1 : t.start <= o && o <= t.end || t.end <= o && o <= t.start, Z = (t, o) => {
|
|
29
|
+
if (t.top === -1 || t.left === -1 || t.bottom === -1 || t.right === -1)
|
|
30
|
+
return !1;
|
|
31
|
+
const { y: s, x: n } = o, { top: r, left: e, bottom: c, right: f } = t;
|
|
32
|
+
return r <= s && s <= c && e <= n && n <= f;
|
|
33
|
+
}, S = (t) => t.endY === -1 || t.endX === -1 ? { rows: 0, cols: 0 } : {
|
|
34
|
+
rows: Math.abs(t.startY - t.endY),
|
|
35
|
+
cols: Math.abs(t.startX - t.endX)
|
|
36
|
+
}, v = (t) => t.endY === -1 || t.endX === -1 ? { rows: 1, cols: 1 } : {
|
|
37
|
+
rows: 1 + Math.abs(t.startY - t.endY),
|
|
38
|
+
cols: 1 + Math.abs(t.startX - t.endX)
|
|
39
|
+
}, X = (t) => ({
|
|
40
|
+
rows: Math.abs(t.top - t.bottom),
|
|
41
|
+
cols: Math.abs(t.left - t.right)
|
|
42
|
+
}), L = (t) => ({
|
|
43
|
+
rows: 1 + Math.abs(t.top - t.bottom),
|
|
44
|
+
cols: 1 + Math.abs(t.left - t.right)
|
|
45
|
+
}), N = ({ base: t = 0, matrix: o }) => {
|
|
46
|
+
const s = o.length;
|
|
47
|
+
return s === 0 ? { rows: 0, cols: 0 } : { rows: t + s, cols: t + o[0].length };
|
|
48
|
+
}, j = (t, o, s = 1) => Array.from({ length: (o - t - 1) / s + 1 }, (n, r) => t + r * s), K = (t, o) => {
|
|
49
|
+
const s = [];
|
|
50
|
+
return t.forEach((n) => {
|
|
51
|
+
const r = [];
|
|
52
|
+
o.forEach((e) => {
|
|
53
|
+
r.push(n[e]);
|
|
54
|
+
}), s.push(r);
|
|
55
|
+
}), s;
|
|
56
|
+
}, U = (t, o) => {
|
|
57
|
+
const s = [];
|
|
58
|
+
return t.forEach((n) => {
|
|
59
|
+
const r = {};
|
|
60
|
+
n.forEach((e, c) => {
|
|
61
|
+
if (c >= o.length)
|
|
62
|
+
return;
|
|
63
|
+
const f = o[c];
|
|
64
|
+
r[f] = e;
|
|
65
|
+
}), s.push(r);
|
|
66
|
+
}), s;
|
|
67
|
+
}, q = (t, o, s) => [...Array(t)].map(() => Array(o).fill(s)), B = ({
|
|
68
|
+
cells: t = {},
|
|
69
|
+
ensured: o = {},
|
|
70
|
+
matrix: s = [],
|
|
71
|
+
flattenAs: n = "value",
|
|
72
|
+
origin: r = "A1"
|
|
73
|
+
}) => M({
|
|
74
|
+
cells: t,
|
|
75
|
+
ensured: o,
|
|
76
|
+
matrices: { [r]: s },
|
|
77
|
+
flattenAs: n
|
|
78
|
+
}), M = ({
|
|
79
|
+
cells: t = {},
|
|
80
|
+
ensured: o = {},
|
|
81
|
+
matrices: s = {},
|
|
82
|
+
flattenAs: n = "value"
|
|
83
|
+
} = {}) => {
|
|
84
|
+
A({ cells: t, flattenAs: n, matrices: s });
|
|
85
|
+
const { numRows: r, numCols: e } = Object.assign({ numRows: 1, numCols: 1 }, o), c = p({ y: r, x: e });
|
|
86
|
+
return t[c] == null && (t[c] = {}), t;
|
|
87
|
+
}, A = ({
|
|
88
|
+
cells: t = {},
|
|
89
|
+
matrices: o = {},
|
|
90
|
+
flattenAs: s
|
|
91
|
+
}) => (Object.keys(o).forEach((n) => {
|
|
92
|
+
const r = o[n], { y: e, x: c } = b(n);
|
|
93
|
+
r.forEach((f, a) => {
|
|
94
|
+
f.forEach((d, l) => {
|
|
95
|
+
const i = p({ y: e + a, x: c + l });
|
|
96
|
+
if (s) {
|
|
97
|
+
const u = t[i];
|
|
98
|
+
t[i] = { [s]: d, ...u };
|
|
99
|
+
} else
|
|
100
|
+
t[i] = d;
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}), t), W = (t = {}) => {
|
|
104
|
+
let [o, s] = [0, 0];
|
|
105
|
+
return Object.keys(t).forEach((n) => {
|
|
106
|
+
if (n === R || n === C || n === E)
|
|
107
|
+
return;
|
|
108
|
+
const { y: r, x: e } = b(n);
|
|
109
|
+
o < r && (o = r), s < e && (s = e);
|
|
110
|
+
}), { numRows: o, numCols: s };
|
|
111
|
+
}, G = (t, o) => {
|
|
112
|
+
const s = [];
|
|
113
|
+
for (let n = t; n <= o; n++)
|
|
114
|
+
s.push(n);
|
|
115
|
+
return s;
|
|
116
|
+
}, H = (t, o) => (t.left === -1 && (t = {
|
|
117
|
+
left: o.x,
|
|
118
|
+
top: o.y,
|
|
119
|
+
right: o.x,
|
|
120
|
+
bottom: o.y
|
|
121
|
+
}), t), J = (t) => {
|
|
122
|
+
if (t.indexOf(":") === -1)
|
|
123
|
+
return [t];
|
|
124
|
+
const o = [];
|
|
125
|
+
if (/^\d+\:\d+$/.test(t)) {
|
|
126
|
+
const [l, i] = t.split(":").map(Number);
|
|
127
|
+
for (let u = l; u <= i; u++)
|
|
128
|
+
o.push(`${u}`);
|
|
129
|
+
return o;
|
|
130
|
+
}
|
|
131
|
+
const n = t.match(/^([A-Z]*)(\d+)?\:([A-Z]*)(\d+)?$/);
|
|
132
|
+
if (!n)
|
|
133
|
+
return console.error("Invalid range format", t), [t];
|
|
134
|
+
const [, r, e, c, f] = n, a = r ? Y(r) : 1, d = c ? Y(c) : 1;
|
|
135
|
+
for (let l = a; l <= d; l++) {
|
|
136
|
+
const i = r || c ? g(l) : "";
|
|
137
|
+
if (e && f)
|
|
138
|
+
for (let u = Number(e); u <= Number(f); u++)
|
|
139
|
+
o.push(`${i}${u}`);
|
|
140
|
+
else !e && !f && o.push(i);
|
|
141
|
+
}
|
|
142
|
+
return o;
|
|
143
|
+
}, P = (t) => {
|
|
144
|
+
const o = S(t);
|
|
145
|
+
return o.rows + o.cols === 0 ? { startY: -1, startX: -1, endY: -1, endX: -1 } : { ...t };
|
|
146
|
+
}, Q = (t, o, s, n) => {
|
|
147
|
+
for (; t <= o; ) {
|
|
148
|
+
const r = Math.floor((t + o) / 2);
|
|
149
|
+
s(r) ? n ? o = r - 1 : t = r + 1 : n ? t = r + 1 : o = r - 1;
|
|
150
|
+
}
|
|
151
|
+
return n ? t : o;
|
|
152
|
+
}, V = (t) => {
|
|
153
|
+
if (t.length === 0)
|
|
154
|
+
return [];
|
|
155
|
+
const o = t.map((c) => {
|
|
156
|
+
const { y: f, x: a } = b(c);
|
|
157
|
+
return { y: f, x: a };
|
|
158
|
+
}), s = (c, f) => `${c},${f}`, n = new Set(o.map((c) => s(c.y, c.x))), r = /* @__PURE__ */ new Set(), e = [];
|
|
159
|
+
for (const c of o) {
|
|
160
|
+
const f = s(c.y, c.x);
|
|
161
|
+
if (r.has(f))
|
|
162
|
+
continue;
|
|
163
|
+
let a = c.y, d = c.x, l = c.y, i = c.x;
|
|
164
|
+
const u = [c];
|
|
165
|
+
for (r.add(f); u.length > 0; ) {
|
|
166
|
+
const { y: h, x: m } = u.shift();
|
|
167
|
+
h < a && (a = h), h > l && (l = h), m < d && (d = m), m > i && (i = m);
|
|
168
|
+
for (const [x, y] of [
|
|
169
|
+
[0, 1],
|
|
170
|
+
[0, -1],
|
|
171
|
+
[1, 0],
|
|
172
|
+
[-1, 0]
|
|
173
|
+
]) {
|
|
174
|
+
const w = s(h + x, m + y);
|
|
175
|
+
n.has(w) && !r.has(w) && (r.add(w), u.push({ y: h + x, x: m + y }));
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
e.push({ top: a, left: d, bottom: l, right: i });
|
|
179
|
+
}
|
|
180
|
+
return e;
|
|
181
|
+
}, z = (t, o = !0) => {
|
|
182
|
+
const s = /* @__PURE__ */ new Set(), n = [];
|
|
183
|
+
for (const r of t) {
|
|
184
|
+
const { x: e } = b(r);
|
|
185
|
+
s.has(e) || (s.add(e), n.push(e));
|
|
186
|
+
}
|
|
187
|
+
return o === !0 ? n.sort((r, e) => r - e) : o === !1 && n.sort((r, e) => e - r), n;
|
|
188
|
+
}, tt = (t, o = !0) => {
|
|
189
|
+
const s = /* @__PURE__ */ new Set(), n = [];
|
|
190
|
+
for (const r of t) {
|
|
191
|
+
const { y: e } = b(r);
|
|
192
|
+
s.has(e) || (s.add(e), n.push(e));
|
|
193
|
+
}
|
|
194
|
+
return o === !0 ? n.sort((r, e) => r - e) : o === !1 && n.sort((r, e) => e - r), n;
|
|
195
|
+
}, ot = (t) => t.startY === -1 || t.startX === -1 || t.endY === -1 || t.endX === -1;
|
|
196
|
+
export {
|
|
197
|
+
U as aa2oa,
|
|
198
|
+
V as addressesToAreas,
|
|
199
|
+
z as addressesToCols,
|
|
200
|
+
tt as addressesToRows,
|
|
201
|
+
Z as among,
|
|
202
|
+
X as areaDiff,
|
|
203
|
+
L as areaShape,
|
|
204
|
+
F as areaToRange,
|
|
205
|
+
D as areaToZone,
|
|
206
|
+
I as between,
|
|
207
|
+
Q as binarySearch,
|
|
208
|
+
A as buildCells,
|
|
209
|
+
M as buildInitialCells,
|
|
210
|
+
B as buildInitialCellsFromOrigin,
|
|
211
|
+
H as complementSelectingArea,
|
|
212
|
+
k as concatAreas,
|
|
213
|
+
q as createMatrix,
|
|
214
|
+
J as expandRange,
|
|
215
|
+
W as getMaxSizesFromCells,
|
|
216
|
+
ot as isZoneNotSelected,
|
|
217
|
+
j as makeSequence,
|
|
218
|
+
N as matrixShape,
|
|
219
|
+
K as oa2aa,
|
|
220
|
+
G as range,
|
|
221
|
+
P as restrictZone,
|
|
222
|
+
O as superposeArea,
|
|
223
|
+
S as zoneDiff,
|
|
224
|
+
v as zoneShape,
|
|
225
|
+
_ as zoneToArea
|
|
226
|
+
};
|
|
227
|
+
//# sourceMappingURL=spatial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spatial.js","sources":["../../src/lib/spatial.ts"],"sourcesContent":["import { DEFAULT_KEY, DEFAULT_COL_KEY, DEFAULT_ROW_KEY } from '../constants';\nimport type {\n MatrixType,\n AreaType,\n ZoneType,\n RangeType,\n PointType,\n CellsByAddressType,\n ShapeType,\n MatricesByAddress,\n CellType,\n Address,\n} from '../types';\nimport { a2p, p2a, x2c, c2x } from './coords';\n\nexport const superposeArea = (srcArea: AreaType, dstArea: AreaType): ShapeType => {\n const { rows: srcRows, cols: srcCols } = areaDiff(srcArea);\n const { rows: dstRows, cols: dstCols } = areaDiff(dstArea);\n\n // biggerRows, biggerCols\n return {\n rows: srcRows > dstRows ? srcRows : dstRows,\n cols: srcCols > dstCols ? srcCols : dstCols,\n };\n};\n\nexport const concatAreas = (area1: AreaType, area2: AreaType): AreaType => {\n const result: AreaType = { ...area1 };\n if (area2.left < area1.left) {\n result.left = area2.left;\n }\n if (area2.right > area1.right) {\n result.right = area2.right;\n }\n if (area2.top < area1.top) {\n result.top = area2.top;\n }\n if (area2.bottom > area1.bottom) {\n result.bottom = area2.bottom;\n }\n return result;\n};\n\nexport const zoneToArea = (zone: ZoneType): AreaType => {\n if (zone.endY === -1 || zone.endX === -1) {\n return { top: -1, left: -1, bottom: -1, right: -1 };\n }\n const [top, bottom] = zone.startY < zone.endY ? [zone.startY, zone.endY] : [zone.endY, zone.startY];\n const [left, right] = zone.startX < zone.endX ? [zone.startX, zone.endX] : [zone.endX, zone.startX];\n return { top, left, bottom, right };\n};\n\nexport const areaToZone = (area: AreaType): ZoneType => {\n return {\n startY: area.top,\n startX: area.left,\n endY: area.bottom,\n endX: area.right,\n };\n};\n\nexport const areaToRange = (area: AreaType): string => {\n const { top, left, bottom, right } = area;\n if (top === bottom && left === right) {\n return p2a({ y: top, x: left });\n }\n const leftTop = p2a({ y: top, x: left });\n const rightBottom = p2a({ y: bottom, x: right });\n return `${leftTop}:${rightBottom}`;\n};\n\nexport const between = (range: RangeType, index: number) => {\n if (range.start === -1 || range.end === -1) {\n return false;\n }\n return (range.start <= index && index <= range.end) || (range.end <= index && index <= range.start);\n};\n\nexport const among = (area: AreaType, point: PointType) => {\n if (area.top === -1 || area.left === -1 || area.bottom === -1 || area.right === -1) {\n return false;\n }\n const { y, x } = point;\n const { top, left, bottom, right } = area;\n return top <= y && y <= bottom && left <= x && x <= right;\n};\n\ntype ShapeExtension = { base?: number };\n\nexport const zoneDiff = (zone: ZoneType): ShapeType => {\n if (zone.endY === -1 || zone.endX === -1) {\n return { rows: 0, cols: 0 };\n }\n return {\n rows: Math.abs(zone.startY - zone.endY),\n cols: Math.abs(zone.startX - zone.endX),\n };\n};\n\nexport const zoneShape = (zone: ZoneType): ShapeType => {\n if (zone.endY === -1 || zone.endX === -1) {\n return { rows: 1, cols: 1 };\n }\n return {\n rows: 1 + Math.abs(zone.startY - zone.endY),\n cols: 1 + Math.abs(zone.startX - zone.endX),\n };\n};\n\nexport const areaDiff = (area: AreaType): ShapeType => {\n return {\n rows: Math.abs(area.top - area.bottom),\n cols: Math.abs(area.left - area.right),\n };\n};\n\nexport const areaShape = (area: AreaType): ShapeType => {\n return {\n rows: 1 + Math.abs(area.top - area.bottom),\n cols: 1 + Math.abs(area.left - area.right),\n };\n};\n\nexport const matrixShape = ({ base = 0, matrix }: { matrix: MatrixType } & ShapeExtension): ShapeType => {\n const h = matrix.length;\n if (h === 0) {\n return { rows: 0, cols: 0 };\n }\n return { rows: base + h, cols: base + matrix[0].length };\n};\n\nexport const makeSequence = (start: number, stop: number, step: number = 1) => {\n return Array.from({ length: (stop - start - 1) / step + 1 }, (_, i) => start + i * step);\n};\n\nexport const oa2aa = (oa: { [s: string]: any }[], fields: string[]): MatrixType => {\n const aa: any[][] = [];\n oa.forEach((o) => {\n const a: any[] = [];\n fields.forEach((field) => {\n a.push(o[field]);\n });\n aa.push(a);\n });\n return aa;\n};\n\nexport const aa2oa = (aa: MatrixType, fields: string[]): { [s: string]: any }[] => {\n const oa: { [s: string]: any }[] = [];\n aa.forEach((a) => {\n const o: { [s: string]: any } = {};\n a.forEach((v, i) => {\n if (i >= fields.length) {\n return;\n }\n const field = fields[i];\n o[field] = v;\n });\n oa.push(o);\n });\n return oa;\n};\n\nexport const createMatrix = <T = any>(numRows: number, numCols: number, fill?: T): T[][] => {\n return [...Array(numRows)].map(() => Array(numCols).fill(fill));\n};\n\nexport const buildInitialCellsFromOrigin = ({\n cells = {},\n ensured = {},\n matrix = [],\n flattenAs = 'value',\n origin = 'A1',\n}: {\n cells?: CellsByAddressType;\n ensured?: {\n numRows?: number;\n numCols?: number;\n };\n flattenAs?: keyof CellType;\n matrix?: MatrixType;\n origin?: Address;\n}) => {\n return buildInitialCells({\n cells,\n ensured,\n matrices: { [origin]: matrix },\n flattenAs,\n });\n};\n\nexport const buildInitialCells = ({\n cells = {},\n ensured = {},\n matrices = {},\n flattenAs = 'value',\n}: {\n cells?: CellsByAddressType;\n ensured?: {\n numRows?: number;\n numCols?: number;\n };\n flattenAs?: keyof CellType;\n matrices?: MatricesByAddress<any>;\n} = {}) => {\n buildCells({ cells, flattenAs, matrices });\n const { numRows, numCols } = Object.assign({ numRows: 1, numCols: 1 }, ensured);\n const rightBottom = p2a({ y: numRows, x: numCols });\n if (cells[rightBottom] == null) {\n cells[rightBottom] = {};\n }\n return cells;\n};\n\nexport const buildCells = <T>({\n cells = {},\n matrices = {},\n flattenAs,\n}: {\n cells?: CellsByAddressType;\n flattenAs?: keyof CellType;\n matrices?: MatricesByAddress<T>;\n}) => {\n Object.keys(matrices).forEach((baseAddress) => {\n const matrix = matrices[baseAddress];\n const { y: baseY, x: baseX } = a2p(baseAddress);\n matrix.forEach((row, y) => {\n row.forEach((e, x) => {\n const id = p2a({ y: baseY + y, x: baseX + x });\n if (flattenAs) {\n const cell = cells[id];\n cells[id] = { [flattenAs]: e, ...cell };\n } else {\n cells[id] = e as CellType;\n }\n });\n });\n });\n return cells;\n};\n\nexport const getMaxSizesFromCells = (cells: CellsByAddressType = {}) => {\n let [lastY, lastX] = [0, 0];\n Object.keys(cells).forEach((address) => {\n if (address === DEFAULT_KEY || address === DEFAULT_COL_KEY || address === DEFAULT_ROW_KEY) {\n return;\n }\n const { y, x } = a2p(address);\n if (lastY < y) {\n lastY = y;\n }\n if (lastX < x) {\n lastX = x;\n }\n });\n return { numRows: lastY, numCols: lastX };\n};\n\nexport const range = (start: number, end: number) => {\n const list: number[] = [];\n for (let i = start; i <= end; i++) {\n list.push(i);\n }\n return list;\n};\n\nexport const complementSelectingArea = (selectingArea: AreaType, choosing: PointType) => {\n if (selectingArea.left === -1) {\n selectingArea = {\n left: choosing.x,\n top: choosing.y,\n right: choosing.x,\n bottom: choosing.y,\n };\n }\n return selectingArea;\n};\n\nexport const expandRange = (range: string): Address[] => {\n if (range.indexOf(':') === -1) {\n return [range];\n }\n\n const result: Address[] = [];\n\n const isRowRange = /^\\d+\\:\\d+$/.test(range);\n\n if (isRowRange) {\n const [startRow, endRow] = range.split(':').map(Number);\n for (let row = startRow; row <= endRow; row++) {\n result.push(`${row}`);\n }\n return result;\n }\n\n const match = range.match(/^([A-Z]*)(\\d+)?\\:([A-Z]*)(\\d+)?$/);\n if (!match) {\n console.error('Invalid range format', range);\n return [range];\n }\n\n const [, startCol, startRow, endCol, endRow] = match;\n const startColIndex = startCol ? c2x(startCol) : 1;\n const endColIndex = endCol ? c2x(endCol) : 1;\n\n for (let col = startColIndex; col <= endColIndex; col++) {\n const currentColumn = startCol || endCol ? x2c(col) : '';\n if (startRow && endRow) {\n for (let row = Number(startRow); row <= Number(endRow); row++) {\n result.push(`${currentColumn}${row}`);\n }\n } else if (!startRow && !endRow) {\n result.push(currentColumn);\n }\n }\n return result;\n};\n\n// restrictZone resets a zone if the zone consists of a single cell.\nexport const restrictZone = (zone: ZoneType): ZoneType => {\n const s = zoneDiff(zone);\n if (s.rows + s.cols === 0) {\n return { startY: -1, startX: -1, endY: -1, endX: -1 };\n }\n return { ...zone };\n};\n\nexport type BinarySearchPredicate = (mid: number) => boolean;\n\nexport const binarySearch = (\n low: number,\n high: number,\n predicate: BinarySearchPredicate,\n lessThan: boolean,\n): number => {\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n if (predicate(mid)) {\n if (lessThan) {\n high = mid - 1;\n } else {\n low = mid + 1;\n }\n } else {\n if (lessThan) {\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n }\n return lessThan ? low : high;\n};\n\n/**\n * Convert a list of addresses into an array of bounding areas.\n * Adjacent cells (4-connected: up/down/left/right) are grouped into the same area.\n * Each resulting AreaType is the bounding rectangle of one connected group.\n */\nexport const addressesToAreas = (addresses: Address[]): AreaType[] => {\n if (addresses.length === 0) {\n return [];\n }\n\n const points = addresses.map((addr) => {\n const { y, x } = a2p(addr);\n return { y, x };\n });\n\n const key = (y: number, x: number) => `${y},${x}`;\n const pointSet = new Set(points.map((p) => key(p.y, p.x)));\n const visited = new Set<string>();\n const areas: AreaType[] = [];\n\n for (const p of points) {\n const k = key(p.y, p.x);\n if (visited.has(k)) {\n continue;\n }\n\n // BFS to find connected component\n let top = p.y,\n left = p.x,\n bottom = p.y,\n right = p.x;\n const queue = [p];\n visited.add(k);\n\n while (queue.length > 0) {\n const { y, x } = queue.shift()!;\n if (y < top) {\n top = y;\n }\n if (y > bottom) {\n bottom = y;\n }\n if (x < left) {\n left = x;\n }\n if (x > right) {\n right = x;\n }\n\n for (const [dy, dx] of [\n [0, 1],\n [0, -1],\n [1, 0],\n [-1, 0],\n ]) {\n const nk = key(y + dy, x + dx);\n if (pointSet.has(nk) && !visited.has(nk)) {\n visited.add(nk);\n queue.push({ y: y + dy, x: x + dx });\n }\n }\n }\n\n areas.push({ top, left, bottom, right });\n }\n\n return areas;\n};\n\n/**\n * Extract unique column indices (x) from a list of addresses, ignoring row information.\n * @param asc - true: ascending, false: descending, null: insertion order\n */\nexport const addressesToCols = (addresses: Address[], asc: boolean | null = true): number[] => {\n const seen = new Set<number>();\n const cols: number[] = [];\n for (const addr of addresses) {\n const { x } = a2p(addr);\n if (!seen.has(x)) {\n seen.add(x);\n cols.push(x);\n }\n }\n if (asc === true) {\n cols.sort((a, b) => a - b);\n } else if (asc === false) {\n cols.sort((a, b) => b - a);\n }\n return cols;\n};\n\n/**\n * Extract unique row indices (y) from a list of addresses, ignoring column information.\n * @param asc - true: ascending, false: descending, null: insertion order\n */\nexport const addressesToRows = (addresses: Address[], asc: boolean | null = true): number[] => {\n const seen = new Set<number>();\n const rows: number[] = [];\n for (const addr of addresses) {\n const { y } = a2p(addr);\n if (!seen.has(y)) {\n seen.add(y);\n rows.push(y);\n }\n }\n if (asc === true) {\n rows.sort((a, b) => a - b);\n } else if (asc === false) {\n rows.sort((a, b) => b - a);\n }\n return rows;\n};\n\nexport const isZoneNotSelected = (zone: ZoneType): boolean => {\n return zone.startY === -1 || zone.startX === -1 || zone.endY === -1 || zone.endX === -1;\n};\n"],"names":["superposeArea","srcArea","dstArea","srcRows","srcCols","areaDiff","dstRows","dstCols","concatAreas","area1","area2","result","zoneToArea","zone","top","bottom","left","right","areaToZone","area","areaToRange","p2a","leftTop","rightBottom","between","range","index","among","point","y","x","zoneDiff","zoneShape","areaShape","matrixShape","base","matrix","h","makeSequence","start","stop","step","_","i","oa2aa","oa","fields","aa","o","a","field","aa2oa","v","createMatrix","numRows","numCols","fill","buildInitialCellsFromOrigin","cells","ensured","flattenAs","origin","buildInitialCells","matrices","buildCells","baseAddress","baseY","baseX","a2p","row","e","id","cell","getMaxSizesFromCells","lastY","lastX","address","DEFAULT_KEY","DEFAULT_COL_KEY","DEFAULT_ROW_KEY","end","list","complementSelectingArea","selectingArea","choosing","expandRange","startRow","endRow","match","startCol","endCol","startColIndex","c2x","endColIndex","col","currentColumn","x2c","restrictZone","s","binarySearch","low","high","predicate","lessThan","mid","addressesToAreas","addresses","points","addr","key","pointSet","p","visited","areas","k","queue","dy","dx","nk","addressesToCols","asc","seen","cols","b","addressesToRows","rows","isZoneNotSelected"],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare class Time {
|
|
2
|
+
readonly __gsType: "Time";
|
|
3
|
+
readonly days: number;
|
|
4
|
+
format: string;
|
|
5
|
+
constructor(days: number, format?: string);
|
|
6
|
+
add(date: Date): Date;
|
|
7
|
+
sub(date: Date): Date;
|
|
8
|
+
stringify(format?: string): string;
|
|
9
|
+
toMilliseconds(): number;
|
|
10
|
+
toDate(): Date;
|
|
11
|
+
toJSON(): {
|
|
12
|
+
__gsType: 'Time';
|
|
13
|
+
days: number;
|
|
14
|
+
format: string;
|
|
15
|
+
};
|
|
16
|
+
toString(): string;
|
|
17
|
+
static create(hours?: number, minutes?: number, seconds?: number, milliseconds?: number): Time;
|
|
18
|
+
static fromDate(date: Date): Time;
|
|
19
|
+
static fromDates(date1: Date, date2: Date): Time;
|
|
20
|
+
static fromObject(obj: {
|
|
21
|
+
days: number;
|
|
22
|
+
format?: string;
|
|
23
|
+
}): Time;
|
|
24
|
+
static is(obj: any): boolean;
|
|
25
|
+
static ensure(obj: any): Time;
|
|
26
|
+
static parse(value: string, format?: string, strict?: boolean): Time | undefined;
|
|
27
|
+
}
|
|
28
|
+
export declare const safeQueueMicrotask: typeof queueMicrotask;
|
|
29
|
+
//# sourceMappingURL=time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/lib/time.ts"],"names":[],"mappings":"AAIA,qBAAa,IAAI;IACf,SAAgB,QAAQ,EAAG,MAAM,CAAU;IAC3C,SAAgB,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,MAAM,SAAa;IAKtC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIrB,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIrB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAyBlC,cAAc,IAAI,MAAM;IAIxB,MAAM,IAAI,IAAI;IAId,MAAM,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAI5D,QAAQ,IAAI,MAAM;IAIzB,MAAM,CAAC,MAAM,CAAC,KAAK,SAAI,EAAE,OAAO,SAAI,EAAE,OAAO,SAAI,EAAE,YAAY,SAAI,GAAG,IAAI;IAK1E,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAMjC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI;IAIhD,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI/D,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;IAU5B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAU7B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,IAAI,GAAG,SAAS;CAyC/E;AA2BD,eAAO,MAAM,kBAAkB,uBACyE,CAAC"}
|
package/dist/lib/time.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { BASE_DATE as f } from "../constants.js";
|
|
2
|
+
const g = 864e5;
|
|
3
|
+
class a {
|
|
4
|
+
constructor(t, n = "HH:mm:ss") {
|
|
5
|
+
this.__gsType = "Time", this.days = t, this.format = n;
|
|
6
|
+
}
|
|
7
|
+
add(t) {
|
|
8
|
+
return new Date(t.getTime() + this.days * g);
|
|
9
|
+
}
|
|
10
|
+
sub(t) {
|
|
11
|
+
return new Date(t.getTime() - this.days * g);
|
|
12
|
+
}
|
|
13
|
+
stringify(t) {
|
|
14
|
+
const n = this.toMilliseconds(), i = Math.abs(n), r = n < 0 ? "-" : "", e = i % 1e3;
|
|
15
|
+
let s = Math.floor(i / 1e3);
|
|
16
|
+
const m = s % 60;
|
|
17
|
+
s = Math.floor(s / 60);
|
|
18
|
+
const u = s % 60, c = Math.floor(s / 60);
|
|
19
|
+
let o = t ?? (e === 0 ? "HH:mm:ss" : "HH:mm:ss.SSS");
|
|
20
|
+
return o = o.replace("HH", r + String(c).padStart(2, "0")), o = o.replace("H", r + String(c)), o = o.replace("mm", String(u).padStart(2, "0")), o = o.replace("ss", String(m).padStart(2, "0")), o = o.replace("SSS", String(e).padStart(3, "0")), o = o.replace("SS", String(e).padStart(3, "0").substring(0, 2)), o = o.replace("S", String(e).padStart(3, "0").substring(0, 1)), o;
|
|
21
|
+
}
|
|
22
|
+
toMilliseconds() {
|
|
23
|
+
return this.days * g;
|
|
24
|
+
}
|
|
25
|
+
toDate() {
|
|
26
|
+
return new Date(f.getTime() + this.days * g);
|
|
27
|
+
}
|
|
28
|
+
toJSON() {
|
|
29
|
+
return { __gsType: "Time", days: this.days, format: this.format };
|
|
30
|
+
}
|
|
31
|
+
toString() {
|
|
32
|
+
return this.stringify();
|
|
33
|
+
}
|
|
34
|
+
static create(t = 0, n = 0, i = 0, r = 0) {
|
|
35
|
+
const e = t * 36e5 + n * 6e4 + i * 1e3 + r;
|
|
36
|
+
return new a(e / g);
|
|
37
|
+
}
|
|
38
|
+
static fromDate(t) {
|
|
39
|
+
const n = t.getHours() * 36e5 + t.getMinutes() * 6e4 + t.getSeconds() * 1e3 + t.getMilliseconds();
|
|
40
|
+
return new a(n / g);
|
|
41
|
+
}
|
|
42
|
+
static fromDates(t, n) {
|
|
43
|
+
return new a((t.getTime() - n.getTime()) / g);
|
|
44
|
+
}
|
|
45
|
+
static fromObject(t) {
|
|
46
|
+
return new a(t.days, t.format);
|
|
47
|
+
}
|
|
48
|
+
static is(t) {
|
|
49
|
+
return t instanceof a || (t == null ? void 0 : t.__gsType) === "Time";
|
|
50
|
+
}
|
|
51
|
+
static ensure(t) {
|
|
52
|
+
return t instanceof a ? t : (t == null ? void 0 : t.__gsType) === "Time" ? a.fromObject(t) : a.create();
|
|
53
|
+
}
|
|
54
|
+
static parse(t, n, i = !1) {
|
|
55
|
+
if (n != null) {
|
|
56
|
+
const r = l(n), e = t.match(r);
|
|
57
|
+
if (e != null && e.groups)
|
|
58
|
+
return a.create(
|
|
59
|
+
Number(e.groups.HH || e.groups.H || 0),
|
|
60
|
+
Number(e.groups.mm || e.groups.m || 0),
|
|
61
|
+
Number(e.groups.ss || e.groups.s || 0),
|
|
62
|
+
Number(e.groups.SSS || e.groups.SS || e.groups.S || 0)
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
if (!i) {
|
|
66
|
+
{
|
|
67
|
+
const r = t.match(/^([+-]?)(\d+):(\d{2})$/);
|
|
68
|
+
if (r) {
|
|
69
|
+
const [, e, s, m] = r, u = e === "-" ? -1 : 1;
|
|
70
|
+
return a.create(u * Number(s), u * Number(m));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
{
|
|
74
|
+
const r = t.match(/^([+-]?)(\d+):(\d{2}):(\d{2})$/);
|
|
75
|
+
if (r) {
|
|
76
|
+
const [, e, s, m, u] = r, c = e === "-" ? -1 : 1;
|
|
77
|
+
return a.create(c * Number(s), c * Number(m), c * Number(u));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
{
|
|
81
|
+
const r = t.match(/^([+-]?)(\d+):(\d{2}):(\d{2})\.(\d+)$/);
|
|
82
|
+
if (r) {
|
|
83
|
+
const [, e, s, m, u, c] = r, p = e === "-" ? -1 : 1;
|
|
84
|
+
return a.create(p * Number(s), p * Number(m), p * Number(u), p * Number(c));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const d = {
|
|
91
|
+
HH: { group: "HH", pattern: "(?<HH>\\d+)" },
|
|
92
|
+
H: { group: "H", pattern: "(?<HH>\\d+)" },
|
|
93
|
+
mm: { group: "mm", pattern: "(?<mm>[0-5]\\d)" },
|
|
94
|
+
m: { group: "m", pattern: "(?<m>\\d|[1-5]\\d)" },
|
|
95
|
+
ss: { group: "ss", pattern: "(?<ss>[0-5]\\d)" },
|
|
96
|
+
s: { group: "s", pattern: "(?<s>\\d|[1-5]\\d)" },
|
|
97
|
+
SSS: { group: "SSS", pattern: "(?<SSS>\\d{3})" },
|
|
98
|
+
SS: { group: "SS", pattern: "(?<SS>\\d{2})" },
|
|
99
|
+
S: { group: "S", pattern: "(?<S>\\d)" }
|
|
100
|
+
};
|
|
101
|
+
function l(S) {
|
|
102
|
+
const t = Object.keys(d).sort((e, s) => s.length - e.length), n = new RegExp(t.join("|"), "g"), r = S.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&").replace(n, (e) => {
|
|
103
|
+
var s;
|
|
104
|
+
return ((s = d[e]) == null ? void 0 : s.pattern) ?? e;
|
|
105
|
+
});
|
|
106
|
+
return new RegExp(`^${r}$`);
|
|
107
|
+
}
|
|
108
|
+
const H = typeof queueMicrotask == "function" ? queueMicrotask : (S) => Promise.resolve().then(S);
|
|
109
|
+
export {
|
|
110
|
+
a as Time,
|
|
111
|
+
H as safeQueueMicrotask
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sources":["../../src/lib/time.ts"],"sourcesContent":["import { BASE_DATE } from '../constants';\n\nconst MS_PER_DAY = 86400000;\n\nexport class Time {\n public readonly __gsType = 'Time' as const;\n public readonly days: number;\n public format: string;\n\n constructor(days: number, format = 'HH:mm:ss') {\n this.days = days;\n this.format = format;\n }\n\n public add(date: Date): Date {\n return new Date(date.getTime() + this.days * MS_PER_DAY);\n }\n\n public sub(date: Date): Date {\n return new Date(date.getTime() - this.days * MS_PER_DAY);\n }\n\n public stringify(format?: string): string {\n const totalMs = this.toMilliseconds();\n const absMs = Math.abs(totalMs);\n const sign = totalMs < 0 ? '-' : '';\n\n const millis = absMs % 1000;\n let remaining = Math.floor(absMs / 1000);\n const seconds = remaining % 60;\n remaining = Math.floor(remaining / 60);\n const minutes = remaining % 60;\n const hours = Math.floor(remaining / 60);\n\n const resolvedFormat = format ?? (millis === 0 ? 'HH:mm:ss' : 'HH:mm:ss.SSS');\n\n let result = resolvedFormat;\n result = result.replace('HH', sign + String(hours).padStart(2, '0'));\n result = result.replace('H', sign + String(hours));\n result = result.replace('mm', String(minutes).padStart(2, '0'));\n result = result.replace('ss', String(seconds).padStart(2, '0'));\n result = result.replace('SSS', String(millis).padStart(3, '0'));\n result = result.replace('SS', String(millis).padStart(3, '0').substring(0, 2));\n result = result.replace('S', String(millis).padStart(3, '0').substring(0, 1));\n return result;\n }\n\n public toMilliseconds(): number {\n return this.days * MS_PER_DAY;\n }\n\n public toDate(): Date {\n return new Date(BASE_DATE.getTime() + this.days * MS_PER_DAY);\n }\n\n public toJSON(): { __gsType: 'Time'; days: number; format: string } {\n return { __gsType: 'Time', days: this.days, format: this.format };\n }\n\n public toString(): string {\n return this.stringify();\n }\n\n static create(hours = 0, minutes = 0, seconds = 0, milliseconds = 0): Time {\n const ms = hours * 3600000 + minutes * 60000 + seconds * 1000 + milliseconds;\n return new Time(ms / MS_PER_DAY);\n }\n\n static fromDate(date: Date): Time {\n const timeMs =\n date.getHours() * 3600000 + date.getMinutes() * 60000 + date.getSeconds() * 1000 + date.getMilliseconds();\n return new Time(timeMs / MS_PER_DAY);\n }\n\n static fromDates(date1: Date, date2: Date): Time {\n return new Time((date1.getTime() - date2.getTime()) / MS_PER_DAY);\n }\n\n static fromObject(obj: { days: number; format?: string }): Time {\n return new Time(obj.days, obj.format);\n }\n\n static is(obj: any): boolean {\n if (obj instanceof Time) {\n return true;\n }\n if (obj?.__gsType === 'Time') {\n return true;\n }\n return false;\n }\n\n static ensure(obj: any): Time {\n if (obj instanceof Time) {\n return obj;\n }\n if (obj?.__gsType === 'Time') {\n return Time.fromObject(obj);\n }\n return Time.create();\n }\n\n static parse(value: string, format?: string, strict = false): Time | undefined {\n if (format != null) {\n const formattedMatcher = dayjsFormatToNamedRegex(format);\n const match = value.match(formattedMatcher);\n if (match?.groups) {\n return Time.create(\n Number(match.groups.HH || match.groups.H || 0),\n Number(match.groups.mm || match.groups.m || 0),\n Number(match.groups.ss || match.groups.s || 0),\n Number(match.groups.SSS || match.groups.SS || match.groups.S || 0),\n );\n }\n }\n if (strict) {\n return;\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes] = match;\n const sign = _sign === '-' ? -1 : 1;\n return Time.create(sign * Number(hours), sign * Number(minutes));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes, seconds] = match;\n const sign = _sign === '-' ? -1 : 1;\n return Time.create(sign * Number(hours), sign * Number(minutes), sign * Number(seconds));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})\\.(\\d+)$/);\n if (match) {\n const [, _sign, hours, minutes, seconds, msecs] = match;\n const sign = _sign === '-' ? -1 : 1;\n return Time.create(sign * Number(hours), sign * Number(minutes), sign * Number(seconds), sign * Number(msecs));\n }\n }\n }\n}\n\nconst tokenRegexMap: Record<string, { group: string; pattern: string }> = {\n HH: { group: 'HH', pattern: '(?<HH>\\\\d+)' },\n H: { group: 'H', pattern: '(?<HH>\\\\d+)' },\n mm: { group: 'mm', pattern: '(?<mm>[0-5]\\\\d)' },\n m: { group: 'm', pattern: '(?<m>\\\\d|[1-5]\\\\d)' },\n ss: { group: 'ss', pattern: '(?<ss>[0-5]\\\\d)' },\n s: { group: 's', pattern: '(?<s>\\\\d|[1-5]\\\\d)' },\n SSS: { group: 'SSS', pattern: '(?<SSS>\\\\d{3})' },\n SS: { group: 'SS', pattern: '(?<SS>\\\\d{2})' },\n S: { group: 'S', pattern: '(?<S>\\\\d)' },\n};\n\nfunction dayjsFormatToNamedRegex(format: string): RegExp {\n const sortedTokens = Object.keys(tokenRegexMap).sort((a, b) => b.length - a.length);\n const tokenPattern = new RegExp(sortedTokens.join('|'), 'g');\n\n const escapedFormat = format.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n const regexSource = escapedFormat.replace(tokenPattern, (match) => {\n return tokenRegexMap[match]?.pattern ?? match;\n });\n\n return new RegExp(`^${regexSource}$`);\n}\n\nexport const safeQueueMicrotask =\n typeof queueMicrotask === 'function' ? queueMicrotask : (cb: () => void) => Promise.resolve().then(cb);\n"],"names":["MS_PER_DAY","Time","days","format","date","totalMs","absMs","sign","millis","remaining","seconds","minutes","hours","result","BASE_DATE","milliseconds","ms","timeMs","date1","date2","obj","value","strict","formattedMatcher","dayjsFormatToNamedRegex","match","_sign","msecs","tokenRegexMap","sortedTokens","a","b","tokenPattern","regexSource","_a","safeQueueMicrotask","cb"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Sheet } from './sheet';
|
|
2
|
+
import { AreaType, PointType, Virtualization } from '../types';
|
|
3
|
+
export declare const getCellRectPositions: (sheet: Sheet, { y, x }: PointType) => {
|
|
4
|
+
top: number;
|
|
5
|
+
left: number;
|
|
6
|
+
bottom: number;
|
|
7
|
+
right: number;
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
};
|
|
11
|
+
export declare const getScreenRect: (e: HTMLDivElement) => {
|
|
12
|
+
top: number;
|
|
13
|
+
left: number;
|
|
14
|
+
bottom: number;
|
|
15
|
+
right: number;
|
|
16
|
+
height: number;
|
|
17
|
+
width: number;
|
|
18
|
+
};
|
|
19
|
+
export declare const virtualize: (sheet: Sheet, e: HTMLDivElement | null) => Virtualization | null;
|
|
20
|
+
export declare const smartScroll: (sheet: Sheet, e: HTMLDivElement | null, targetPoint: PointType, behavior?: ScrollBehavior) => void;
|
|
21
|
+
export declare const getAreaInTabular: (tabularElement: HTMLDivElement) => AreaType;
|
|
22
|
+
//# sourceMappingURL=virtualization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtualization.d.ts","sourceRoot":"","sources":["../../src/lib/virtualization.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEpE,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,EAAE,UAAU,SAAS;;;;;;;CAgBrE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,GAAG,cAAc;;;;;;;CAQ9C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,EAAE,GAAG,cAAc,GAAG,IAAI,KAAG,cAAc,GAAG,IA6DpF,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,OAAO,KAAK,EACZ,GAAG,cAAc,GAAG,IAAI,EACxB,aAAa,SAAS,EACtB,WAAU,cAAuB,SAoDlC,CAAC;AAmBF,eAAO,MAAM,gBAAgB,GAAI,gBAAgB,cAAc,KAAG,QAiBjE,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { DEFAULT_WIDTH as A, DEFAULT_HEIGHT as C, OVERSCAN_X as w, OVERSCAN_Y as b } from "../constants.js";
|
|
2
|
+
import { range as x, binarySearch as M } from "./spatial.js";
|
|
3
|
+
const L = (t, { y: i, x: s }) => {
|
|
4
|
+
var m, f;
|
|
5
|
+
const n = t.getCell({ y: 0, x: s }, { resolution: "SYSTEM" }), o = t.getCell({ y: i, x: 0 }, { resolution: "SYSTEM" }), l = ((m = t.getSystem({ y: 0, x: s })) == null ? void 0 : m.offsetLeft) ?? 0, r = ((f = t.getSystem({ y: i, x: 0 })) == null ? void 0 : f.offsetTop) ?? 0, g = (n == null ? void 0 : n.width) || A, u = o != null && o.filtered ? 0 : (o == null ? void 0 : o.height) || C;
|
|
6
|
+
return {
|
|
7
|
+
top: r,
|
|
8
|
+
left: l,
|
|
9
|
+
bottom: r + u,
|
|
10
|
+
right: l + g,
|
|
11
|
+
width: g,
|
|
12
|
+
height: u
|
|
13
|
+
};
|
|
14
|
+
}, E = (t) => {
|
|
15
|
+
const i = t.scrollTop, s = t.scrollLeft, n = t.offsetHeight, o = t.offsetWidth, l = i + n, r = s + o;
|
|
16
|
+
return { top: i, left: s, bottom: l, right: r, height: n, width: o };
|
|
17
|
+
}, P = (t, i) => {
|
|
18
|
+
var y, R;
|
|
19
|
+
if (i == null)
|
|
20
|
+
return null;
|
|
21
|
+
let s = 0, n = 0, o = t.numRows, l = t.numCols;
|
|
22
|
+
const { top: r, left: g, bottom: u, right: m } = E(i);
|
|
23
|
+
let f = 0, c = 0;
|
|
24
|
+
for (let e = 1; e <= t.numCols; e++) {
|
|
25
|
+
const a = ((y = t.getCell({ y: 0, x: e }, { resolution: "SYSTEM" })) == null ? void 0 : y.width) || A;
|
|
26
|
+
if (f += a, n === 0 && f > g && (n = Math.max(e - w, 1)), f > m) {
|
|
27
|
+
l = Math.min(e + w, t.numCols);
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
for (let e = 1; e <= t.numRows; e++) {
|
|
32
|
+
if (t.isRowFiltered(e))
|
|
33
|
+
continue;
|
|
34
|
+
const a = ((R = t.getCell({ y: e, x: 0 }, { resolution: "SYSTEM" })) == null ? void 0 : R.height) || C;
|
|
35
|
+
if (c += a, s === 0 && c > r && (s = Math.max(e - b, 1)), c > u) {
|
|
36
|
+
o = Math.min(e + b, t.numRows);
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const p = s === 0 ? [] : x(s, o).filter((e) => !t.isRowFiltered(e)), d = x(n, l), T = t.getRectSize({
|
|
41
|
+
top: 1,
|
|
42
|
+
left: 1,
|
|
43
|
+
bottom: s,
|
|
44
|
+
right: n
|
|
45
|
+
}), S = t.getRectSize({
|
|
46
|
+
top: o,
|
|
47
|
+
left: l,
|
|
48
|
+
bottom: t.numRows,
|
|
49
|
+
right: t.numCols
|
|
50
|
+
});
|
|
51
|
+
return {
|
|
52
|
+
ys: p,
|
|
53
|
+
xs: d,
|
|
54
|
+
adjuster: {
|
|
55
|
+
top: T.height,
|
|
56
|
+
left: T.width,
|
|
57
|
+
bottom: S.height,
|
|
58
|
+
right: S.width
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}, Y = (t, i, s, n = "auto") => {
|
|
62
|
+
if (i == null)
|
|
63
|
+
return;
|
|
64
|
+
const o = E(i), l = L(t, s), r = l.top - t.headerHeight, g = l.left - t.headerWidth, u = l.bottom - o.height + 1, m = l.right - o.width + 1, f = r < o.top, c = g < o.left, p = l.bottom > o.bottom, d = l.right > o.right;
|
|
65
|
+
c ? f ? i.scrollTo({ left: g, top: r, behavior: n }) : p ? i.scrollTo({ left: g, top: u, behavior: n }) : i.scrollTo({ left: g, top: o.top, behavior: n }) : d ? f ? i.scrollTo({ left: m, top: r, behavior: n }) : p ? i.scrollTo({ left: m, top: u, behavior: n }) : i.scrollTo({ left: m, top: o.top, behavior: n }) : f ? i.scrollTo({ left: o.left, top: r, behavior: n }) : p && i.scrollTo({ left: o.left, top: u, behavior: n });
|
|
66
|
+
}, h = (t, i, s, n) => {
|
|
67
|
+
var l;
|
|
68
|
+
const o = M(
|
|
69
|
+
0,
|
|
70
|
+
t.length - 1,
|
|
71
|
+
(r) => i(t[r].getBoundingClientRect()) < s,
|
|
72
|
+
!1
|
|
73
|
+
);
|
|
74
|
+
return parseInt(((l = t[o]) == null ? void 0 : l.dataset[n]) ?? "1");
|
|
75
|
+
}, B = (t) => {
|
|
76
|
+
const {
|
|
77
|
+
top: i,
|
|
78
|
+
left: s,
|
|
79
|
+
bottom: n,
|
|
80
|
+
right: o
|
|
81
|
+
} = t.getBoundingClientRect(), l = Array.from(t.querySelectorAll(".gs-th-left")), r = Array.from(t.querySelectorAll(".gs-th-top")), g = h(l, (c) => c.top, i, "y"), u = h(l, (c) => c.bottom, n, "y"), m = h(r, (c) => c.left, s, "x"), f = h(r, (c) => c.right, o, "x");
|
|
82
|
+
return { top: g, left: m, bottom: u, right: f };
|
|
83
|
+
};
|
|
84
|
+
export {
|
|
85
|
+
B as getAreaInTabular,
|
|
86
|
+
L as getCellRectPositions,
|
|
87
|
+
E as getScreenRect,
|
|
88
|
+
Y as smartScroll,
|
|
89
|
+
P as virtualize
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=virtualization.js.map
|