@sheetpane/grid 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +429 -2
- package/custom-elements.json +1246 -0
- package/dist/errors/element.d.ts +108 -0
- package/dist/errors/element.d.ts.map +1 -0
- package/dist/errors/element.js +456 -0
- package/dist/errors/element.js.map +1 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +3 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/excel/element.d.ts +434 -0
- package/dist/excel/element.d.ts.map +1 -0
- package/dist/excel/element.js +3382 -0
- package/dist/excel/element.js.map +1 -0
- package/dist/excel/geometry.d.ts +81 -0
- package/dist/excel/geometry.d.ts.map +1 -0
- package/dist/excel/geometry.js +137 -0
- package/dist/excel/geometry.js.map +1 -0
- package/dist/excel/index.d.ts +2 -0
- package/dist/excel/index.d.ts.map +1 -0
- package/dist/excel/index.js +3 -0
- package/dist/excel/index.js.map +1 -0
- package/dist/excel/selection.d.ts +103 -0
- package/dist/excel/selection.d.ts.map +1 -0
- package/dist/excel/selection.js +189 -0
- package/dist/excel/selection.js.map +1 -0
- package/dist/excel/styles.d.ts +3 -0
- package/dist/excel/styles.d.ts.map +1 -0
- package/dist/excel/styles.js +206 -0
- package/dist/excel/styles.js.map +1 -0
- package/dist/frameworks/elements.d.ts +136 -0
- package/dist/frameworks/jsx.d.ts +64 -0
- package/dist/frameworks/jsx.js +2 -0
- package/dist/frameworks/solid.d.ts +133 -0
- package/dist/frameworks/solid.js +2 -0
- package/dist/frameworks/svelte.d.ts +102 -0
- package/dist/frameworks/svelte.js +2 -0
- package/dist/frameworks/vue.d.ts +69 -0
- package/dist/frameworks/vue.js +2 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/llms-full.txt +8028 -0
- package/dist/llms.txt +111 -0
- package/dist/pane/index.d.ts +2 -0
- package/dist/pane/index.d.ts.map +1 -0
- package/dist/pane/index.js +3 -0
- package/dist/pane/index.js.map +1 -0
- package/dist/pane/registry.d.ts +33 -0
- package/dist/pane/registry.d.ts.map +1 -0
- package/dist/pane/registry.js +73 -0
- package/dist/pane/registry.js.map +1 -0
- package/dist/pane/rules.d.ts +231 -0
- package/dist/pane/rules.d.ts.map +1 -0
- package/dist/pane/rules.js +792 -0
- package/dist/pane/rules.js.map +1 -0
- package/dist/pane/store.d.ts +385 -0
- package/dist/pane/store.d.ts.map +1 -0
- package/dist/pane/store.js +1028 -0
- package/dist/pane/store.js.map +1 -0
- package/dist/pane/types.d.ts +130 -0
- package/dist/pane/types.d.ts.map +1 -0
- package/dist/pane/types.js +22 -0
- package/dist/pane/types.js.map +1 -0
- package/dist/plugins/host.d.ts +56 -0
- package/dist/plugins/host.d.ts.map +1 -0
- package/dist/plugins/host.js +124 -0
- package/dist/plugins/host.js.map +1 -0
- package/dist/plugins/types.d.ts +159 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +12 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/rules.schema.json +52 -0
- package/dist/shared/dom.d.ts +23 -0
- package/dist/shared/dom.d.ts.map +1 -0
- package/dist/shared/dom.js +32 -0
- package/dist/shared/dom.js.map +1 -0
- package/dist/skills-bin.d.ts +3 -0
- package/dist/skills-bin.d.ts.map +1 -0
- package/dist/skills-bin.js +9 -0
- package/dist/skills-bin.js.map +1 -0
- package/dist/style.css +3 -0
- package/dist/tokens.d.ts +49 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +43 -0
- package/dist/tokens.js.map +1 -0
- package/dist/vscode.css-custom-data.json +365 -0
- package/dist/vscode.html-custom-data.json +218 -0
- package/dist/web-types.json +914 -0
- package/package.json +72 -3
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// Sheet geometry: column widths and row tops in pixels, at a zoom. Pure, so the
|
|
2
|
+
// virtualiser, the overlay plugins (W-20) and the tests share one implementation.
|
|
3
|
+
import { parseRange } from '@sheetpane/export';
|
|
4
|
+
/** A row's height in pixels at 100 % zoom, unless the file or the user sets one (W-47). */
|
|
5
|
+
export const ROW_H = 28;
|
|
6
|
+
/** Column and row size limits in pixels at 100 % zoom (W-47 DoD 1). */
|
|
7
|
+
export const COL_MIN = 16, COL_MAX = 1200, ROW_MIN = 12, ROW_MAX = 600;
|
|
8
|
+
/** The column-header row's height in pixels at 100 % zoom. */
|
|
9
|
+
export const HEAD_H = 24;
|
|
10
|
+
/** The row-header column's width in pixels at 100 % zoom. */
|
|
11
|
+
export const ROWHEAD_W = 52;
|
|
12
|
+
export const DEFAULT_COL_PX = 64;
|
|
13
|
+
/** Columns past this many are virtualised as well as rows (grid verdict decision, "past 60 columns"). */
|
|
14
|
+
export const COL_VIRTUAL_AFTER = 60;
|
|
15
|
+
export const OVERSCAN = 20;
|
|
16
|
+
/** Excel character units → pixels at 100 % (Calibri 11, maximum digit width 7 px). */
|
|
17
|
+
export const charsToPx = (w) => Math.round(w * 7 + 5);
|
|
18
|
+
/** Points (the file's row heights) to pixels at 100 %. */
|
|
19
|
+
export const ptToPx = (pt) => Math.round((pt * 96) / 72);
|
|
20
|
+
/**
|
|
21
|
+
* A sheet's size and column edges at 100 % zoom (SR-GRID decision 11): the file's column widths,
|
|
22
|
+
* else a width from the first 200 rows' text (CSV), else the default; the grid reaches merges,
|
|
23
|
+
* rule ranges and drawing anchors past the data.
|
|
24
|
+
* @param s - The sheet as read.
|
|
25
|
+
* @param mergeList - The merged ranges to draw; the file's by default.
|
|
26
|
+
* @param sizes - The user's column widths and row heights, px at 100 % (W-47); they win over the file's.
|
|
27
|
+
* @param hidden - Rows and columns drawn at 0 px (W-49); a size set on one is kept for when it shows again.
|
|
28
|
+
* @returns The row and column counts, the column and row edges and the merges.
|
|
29
|
+
*/
|
|
30
|
+
export function sheetGeometry(s, mergeList = s.merges ?? [], sizes = {}, hidden = {}) {
|
|
31
|
+
const dataCols = s.rows.reduce((m, r) => Math.max(m, r.length), 0);
|
|
32
|
+
const merges = mergeList.map((m) => parseRange(m)).filter((m) => !!m);
|
|
33
|
+
const ruled = [...(s.dataValidations ?? []).flatMap((v) => v.sqref), ...(s.conditionalFormats ?? []).flatMap((f) => f.sqref)]
|
|
34
|
+
.map((r) => parseRange(r)?.right ?? -1).filter((c) => c >= 0 && c < dataCols + 26);
|
|
35
|
+
// pictures and charts sit beside the data: the grid reaches their anchor's far cell (W-20, W-21)
|
|
36
|
+
// (a `to` point at offset 0 is the left / top edge of that cell; a lone `from` needs its own cell)
|
|
37
|
+
const drawn = (s.drawings ?? []).map((d) => (d.to ? { col: d.to.col + (d.to.colOff > 0 ? 1 : 0), row: d.to.row + (d.to.rowOff > 0 ? 1 : 0) } : d.from ? { col: d.from.col + 1, row: d.from.row + 1 } : undefined))
|
|
38
|
+
.filter((n) => !!n);
|
|
39
|
+
const drawnCols = drawn.map((n) => n.col).filter((n) => n <= dataCols + 26);
|
|
40
|
+
const drawnRows = drawn.map((n) => n.row).filter((n) => n <= s.rows.length + 200);
|
|
41
|
+
const cols = Math.max(1, dataCols, ...merges.map((m) => m.right + 1), ...ruled.map((c) => c + 1), ...drawnCols);
|
|
42
|
+
const rows = Math.max(s.rows.length + 3, 20, ...merges.map((m) => m.bottom + 1), ...drawnRows);
|
|
43
|
+
const dflt = s.defaultColWidth !== undefined ? charsToPx(s.defaultColWidth) : DEFAULT_COL_PX;
|
|
44
|
+
const fileWidths = s.columnWidths ?? [];
|
|
45
|
+
const guess = fileWidths.length === 0 && !s.path;
|
|
46
|
+
const colX = new Float64Array(cols + 1);
|
|
47
|
+
for (let c = 0; c < cols; c++) {
|
|
48
|
+
let w = fileWidths[c] !== undefined ? charsToPx(fileWidths[c]) : dflt;
|
|
49
|
+
if (guess) {
|
|
50
|
+
let ch = 0;
|
|
51
|
+
for (let r = 0; r < Math.min(200, s.text.length); r++)
|
|
52
|
+
ch = Math.max(ch, (s.text[r]?.[c] ?? '').length);
|
|
53
|
+
w = Math.min(320, Math.max(DEFAULT_COL_PX, ch * 7 + 18));
|
|
54
|
+
}
|
|
55
|
+
const own = sizes.cols?.[c];
|
|
56
|
+
colX[c + 1] = colX[c] + (hidden.cols?.has(c) ? 0 : own !== undefined ? own : w);
|
|
57
|
+
}
|
|
58
|
+
// rows: the user's height, else the file's custom height (points), else 28 px
|
|
59
|
+
const rowY = new Float64Array(rows + 1);
|
|
60
|
+
const fileRows = s.rowHeights ?? [], ownRows = sizes.rows ?? {};
|
|
61
|
+
for (let r = 0; r < rows; r++) {
|
|
62
|
+
const own = ownRows[r], pt = fileRows[r];
|
|
63
|
+
rowY[r + 1] = rowY[r] + (hidden.rows?.has(r) ? 0 : own !== undefined ? own : pt !== undefined && pt > 0 ? Math.min(ROW_MAX, Math.max(ROW_MIN, ptToPx(pt))) : ROW_H);
|
|
64
|
+
}
|
|
65
|
+
return { rows, cols, colX, rowY, merges };
|
|
66
|
+
}
|
|
67
|
+
/** A row's top at 100 %; past the drawn rows each row is 28 px. */
|
|
68
|
+
export function rowTop(g, r) {
|
|
69
|
+
return r <= g.rows ? g.rowY[Math.max(0, r)] : g.rowY[g.rows] + (r - g.rows) * ROW_H;
|
|
70
|
+
}
|
|
71
|
+
/** A row's height at 100 %. */
|
|
72
|
+
export function rowHeight(g, r) {
|
|
73
|
+
return r < g.rows ? g.rowY[r + 1] - g.rowY[r] : ROW_H;
|
|
74
|
+
}
|
|
75
|
+
/** A column's width at 100 %. */
|
|
76
|
+
export function colWidth(g, c) {
|
|
77
|
+
return c < g.cols ? g.colX[c + 1] - g.colX[c] : DEFAULT_COL_PX;
|
|
78
|
+
}
|
|
79
|
+
/** The row whose bottom edge is past `y` (100 % pixels) — a binary search over the row tops. */
|
|
80
|
+
export function rowAt(g, y) {
|
|
81
|
+
let lo = 0, hi = g.rows - 1;
|
|
82
|
+
while (lo < hi) {
|
|
83
|
+
const mid = (lo + hi) >> 1;
|
|
84
|
+
if (g.rowY[mid + 1] <= y)
|
|
85
|
+
lo = mid + 1;
|
|
86
|
+
else
|
|
87
|
+
hi = mid;
|
|
88
|
+
}
|
|
89
|
+
return lo;
|
|
90
|
+
}
|
|
91
|
+
/** The first column whose right edge is past `x` (100 % pixels). */
|
|
92
|
+
export function colAt(g, x) {
|
|
93
|
+
let lo = 0, hi = g.cols - 1;
|
|
94
|
+
while (lo < hi) {
|
|
95
|
+
const mid = (lo + hi) >> 1;
|
|
96
|
+
if (g.colX[mid + 1] <= x)
|
|
97
|
+
lo = mid + 1;
|
|
98
|
+
else
|
|
99
|
+
hi = mid;
|
|
100
|
+
}
|
|
101
|
+
return lo;
|
|
102
|
+
}
|
|
103
|
+
/** The merge that covers a cell, if any. */
|
|
104
|
+
export function mergeAt(g, row, col) {
|
|
105
|
+
return g.merges.find((m) => row >= m.top && row <= m.bottom && col >= m.left && col <= m.right);
|
|
106
|
+
}
|
|
107
|
+
/** The rows and columns to render for a scroll position (zoom-scaled pixels), with overscan. */
|
|
108
|
+
export function visibleWindow(g, z, scrollTop, scrollLeft, height, width, frozen) {
|
|
109
|
+
const r0 = Math.max(frozen.rows, rowAt(g, scrollTop / z) - OVERSCAN);
|
|
110
|
+
const r1 = Math.min(g.rows - 1, rowAt(g, (scrollTop + height) / z) + OVERSCAN);
|
|
111
|
+
if (g.cols <= COL_VIRTUAL_AFTER)
|
|
112
|
+
return { r0, r1, c0: frozen.cols, c1: g.cols - 1 };
|
|
113
|
+
const x0 = scrollLeft / z, x1 = (scrollLeft + width) / z;
|
|
114
|
+
return { r0, r1, c0: Math.max(frozen.cols, colAt(g, x0) - 2), c1: Math.min(g.cols - 1, colAt(g, x1) + 2) };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* The spans of hidden rows or columns: runs of consecutive 0 px indexes (W-49).
|
|
118
|
+
* @param edges - `rowY` or `colX`.
|
|
119
|
+
* @param count - Rows or columns drawn.
|
|
120
|
+
* @returns Each run as `[first, last]`.
|
|
121
|
+
*/
|
|
122
|
+
export function hiddenSpans(edges, count) {
|
|
123
|
+
const out = [];
|
|
124
|
+
for (let i = 0; i < count; i++) {
|
|
125
|
+
if (edges[i + 1] !== edges[i])
|
|
126
|
+
continue;
|
|
127
|
+
const last = out[out.length - 1];
|
|
128
|
+
if (last && last[1] === i - 1)
|
|
129
|
+
last[1] = i;
|
|
130
|
+
else
|
|
131
|
+
out.push([i, i]);
|
|
132
|
+
}
|
|
133
|
+
return out;
|
|
134
|
+
}
|
|
135
|
+
/** True when a row (column) is drawn at 0 px — hidden (W-49). */
|
|
136
|
+
export const isHiddenAt = (edges, i) => edges[i + 1] !== undefined && edges[i + 1] === edges[i];
|
|
137
|
+
//# sourceMappingURL=geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.js","sourceRoot":"","sources":["../../src/excel/geometry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/excel/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/excel/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { type RangePos } from '@sheetpane/export';
|
|
2
|
+
import type { Cell } from '@sheetpane/export';
|
|
3
|
+
/** A cell position, 0-based. */
|
|
4
|
+
export interface Pos {
|
|
5
|
+
row: number;
|
|
6
|
+
col: number;
|
|
7
|
+
}
|
|
8
|
+
/** The range two corners span, top-left to bottom-right. */
|
|
9
|
+
export declare function spanOf(a: Pos, b: Pos): RangePos;
|
|
10
|
+
/**
|
|
11
|
+
* Grows a range until no merge sits partly inside it, as Excel does.
|
|
12
|
+
* @param r - The range.
|
|
13
|
+
* @param merges - The sheet's merged ranges.
|
|
14
|
+
* @returns The grown range (the same object's values when nothing crossed it).
|
|
15
|
+
*/
|
|
16
|
+
export declare function growForMerges(r: RangePos, merges: readonly RangePos[]): RangePos;
|
|
17
|
+
/** `A1:C4`, or `A1` for one cell. */
|
|
18
|
+
export declare const rangeText: (r: RangePos) => string;
|
|
19
|
+
/**
|
|
20
|
+
* What "Copy ref" gives: `B:D` for whole columns, `4:12` for whole rows, the sheet's name for all of it.
|
|
21
|
+
* @param r - The range.
|
|
22
|
+
* @param size - The sheet's drawn rows and columns.
|
|
23
|
+
* @param sheet - The sheet's name.
|
|
24
|
+
* @returns The reference as Excel writes it.
|
|
25
|
+
*/
|
|
26
|
+
export declare function refLabel(r: RangePos, size: {
|
|
27
|
+
rows: number;
|
|
28
|
+
cols: number;
|
|
29
|
+
}, sheet: string): string;
|
|
30
|
+
/** One part of a range split across the frozen panes: which pane, its cells, and which of its edges are the range's own. */
|
|
31
|
+
export interface Part extends RangePos {
|
|
32
|
+
pane: 'corner' | 'top' | 'left' | 'main';
|
|
33
|
+
edges: {
|
|
34
|
+
top: boolean;
|
|
35
|
+
left: boolean;
|
|
36
|
+
bottom: boolean;
|
|
37
|
+
right: boolean;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Splits a range by the frozen rows and columns: up to four parts, each drawn in its own pane.
|
|
42
|
+
* @param r - The range.
|
|
43
|
+
* @param fr - Frozen rows.
|
|
44
|
+
* @param fc - Frozen columns.
|
|
45
|
+
* @returns The non-empty parts, with the edges each one draws.
|
|
46
|
+
*/
|
|
47
|
+
export declare function splitByPanes(r: RangePos, fr: number, fc: number): Part[];
|
|
48
|
+
/**
|
|
49
|
+
* Ctrl+arrow: the edge of the data region from a cell, as Excel moves.
|
|
50
|
+
* From a filled cell whose neighbour is filled: the last filled cell of that run; otherwise the next
|
|
51
|
+
* filled cell; otherwise the sheet's edge.
|
|
52
|
+
* @param at - The cell to move from.
|
|
53
|
+
* @param dr - Row step (−1, 0, 1).
|
|
54
|
+
* @param dc - Column step (−1, 0, 1).
|
|
55
|
+
* @param value - A cell's value.
|
|
56
|
+
* @param size - The sheet's drawn rows and columns.
|
|
57
|
+
* @returns Where the jump lands.
|
|
58
|
+
*/
|
|
59
|
+
export declare function dataEdge(at: Pos, dr: number, dc: number, value: (row: number, col: number) => Cell | undefined, size: {
|
|
60
|
+
rows: number;
|
|
61
|
+
cols: number;
|
|
62
|
+
}): Pos;
|
|
63
|
+
/**
|
|
64
|
+
* The data region: the used range from A1 to the last filled row and column (Ctrl/⌘+A's first press).
|
|
65
|
+
* @param rows - The sheet's rows.
|
|
66
|
+
* @returns The range, at least A1.
|
|
67
|
+
*/
|
|
68
|
+
export declare function usedRange(rows: readonly (readonly Cell[])[]): RangePos;
|
|
69
|
+
/**
|
|
70
|
+
* The clipboard payload for a range: TSV (display text) and an HTML table, so Excel and Sheets paste a grid.
|
|
71
|
+
* @param r - The range.
|
|
72
|
+
* @param text - A cell's display text.
|
|
73
|
+
* @param shown - Which rows and columns are shown; the others are left out (W-49).
|
|
74
|
+
* @returns `text/plain` and `text/html`.
|
|
75
|
+
*/
|
|
76
|
+
export declare function clipOf(r: RangePos, text: (row: number, col: number) => string, shown?: {
|
|
77
|
+
row?: (i: number) => boolean;
|
|
78
|
+
col?: (i: number) => boolean;
|
|
79
|
+
}): {
|
|
80
|
+
tsv: string;
|
|
81
|
+
html: string;
|
|
82
|
+
};
|
|
83
|
+
/** The status line's totals: Count of non-empty cells; Sum and Average of the numeric ones. */
|
|
84
|
+
export interface Totals {
|
|
85
|
+
count: number;
|
|
86
|
+
numbers: number;
|
|
87
|
+
sum: number;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Totals over a range; only the cells that exist are visited.
|
|
91
|
+
* @param r - The range.
|
|
92
|
+
* @param value - A cell's value.
|
|
93
|
+
* @param lastRow - The last row holding data (rows past it are empty).
|
|
94
|
+
* @param shown - Which rows and columns are shown; hidden ones are left out (W-49).
|
|
95
|
+
* @returns Count, how many were numbers, and their sum.
|
|
96
|
+
*/
|
|
97
|
+
export declare function totalsOf(r: RangePos, value: (row: number, col: number) => Cell | undefined, lastRow: number, shown?: {
|
|
98
|
+
row?: (i: number) => boolean;
|
|
99
|
+
col?: (i: number) => boolean;
|
|
100
|
+
}): Totals;
|
|
101
|
+
/** Cells a range holds (for the copy limit and the announcement). */
|
|
102
|
+
export declare const cellCount: (r: RangePos) => number;
|
|
103
|
+
//# sourceMappingURL=selection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/excel/selection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
// Range selection (W-46): the pure parts — merge growth, the edge of the data for Ctrl+arrow, the
|
|
2
|
+
// split of a range across frozen panes, the clipboard payload, the totals. The element draws and
|
|
3
|
+
// wires them (SR-GRID decisions 11b, 12, 13).
|
|
4
|
+
import { cellRef, colName } from '@sheetpane/export';
|
|
5
|
+
/** The range two corners span, top-left to bottom-right. */
|
|
6
|
+
export function spanOf(a, b) {
|
|
7
|
+
return { top: Math.min(a.row, b.row), left: Math.min(a.col, b.col), bottom: Math.max(a.row, b.row), right: Math.max(a.col, b.col) };
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Grows a range until no merge sits partly inside it, as Excel does.
|
|
11
|
+
* @param r - The range.
|
|
12
|
+
* @param merges - The sheet's merged ranges.
|
|
13
|
+
* @returns The grown range (the same object's values when nothing crossed it).
|
|
14
|
+
*/
|
|
15
|
+
export function growForMerges(r, merges) {
|
|
16
|
+
const out = { ...r };
|
|
17
|
+
for (let changed = true; changed;) {
|
|
18
|
+
changed = false;
|
|
19
|
+
for (const m of merges) {
|
|
20
|
+
const meets = m.top <= out.bottom && m.bottom >= out.top && m.left <= out.right && m.right >= out.left;
|
|
21
|
+
if (!meets)
|
|
22
|
+
continue;
|
|
23
|
+
if (m.top < out.top) {
|
|
24
|
+
out.top = m.top;
|
|
25
|
+
changed = true;
|
|
26
|
+
}
|
|
27
|
+
if (m.left < out.left) {
|
|
28
|
+
out.left = m.left;
|
|
29
|
+
changed = true;
|
|
30
|
+
}
|
|
31
|
+
if (m.bottom > out.bottom) {
|
|
32
|
+
out.bottom = m.bottom;
|
|
33
|
+
changed = true;
|
|
34
|
+
}
|
|
35
|
+
if (m.right > out.right) {
|
|
36
|
+
out.right = m.right;
|
|
37
|
+
changed = true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
/** `A1:C4`, or `A1` for one cell. */
|
|
44
|
+
export const rangeText = (r) => (r.top === r.bottom && r.left === r.right ? cellRef(r.top, r.left) : `${cellRef(r.top, r.left)}:${cellRef(r.bottom, r.right)}`);
|
|
45
|
+
/**
|
|
46
|
+
* What "Copy ref" gives: `B:D` for whole columns, `4:12` for whole rows, the sheet's name for all of it.
|
|
47
|
+
* @param r - The range.
|
|
48
|
+
* @param size - The sheet's drawn rows and columns.
|
|
49
|
+
* @param sheet - The sheet's name.
|
|
50
|
+
* @returns The reference as Excel writes it.
|
|
51
|
+
*/
|
|
52
|
+
export function refLabel(r, size, sheet) {
|
|
53
|
+
const allRows = r.top === 0 && r.bottom >= size.rows - 1, allCols = r.left === 0 && r.right >= size.cols - 1;
|
|
54
|
+
if (allRows && allCols)
|
|
55
|
+
return sheet;
|
|
56
|
+
if (allRows)
|
|
57
|
+
return `${colName(r.left)}:${colName(r.right)}`;
|
|
58
|
+
if (allCols)
|
|
59
|
+
return `${r.top + 1}:${r.bottom + 1}`;
|
|
60
|
+
return rangeText(r);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Splits a range by the frozen rows and columns: up to four parts, each drawn in its own pane.
|
|
64
|
+
* @param r - The range.
|
|
65
|
+
* @param fr - Frozen rows.
|
|
66
|
+
* @param fc - Frozen columns.
|
|
67
|
+
* @returns The non-empty parts, with the edges each one draws.
|
|
68
|
+
*/
|
|
69
|
+
export function splitByPanes(r, fr, fc) {
|
|
70
|
+
const rows = [];
|
|
71
|
+
if (r.top < fr)
|
|
72
|
+
rows.push([r.top, Math.min(r.bottom, fr - 1), true]);
|
|
73
|
+
if (r.bottom >= fr)
|
|
74
|
+
rows.push([Math.max(r.top, fr), r.bottom, false]);
|
|
75
|
+
const cols = [];
|
|
76
|
+
if (r.left < fc)
|
|
77
|
+
cols.push([r.left, Math.min(r.right, fc - 1), true]);
|
|
78
|
+
if (r.right >= fc)
|
|
79
|
+
cols.push([Math.max(r.left, fc), r.right, false]);
|
|
80
|
+
const out = [];
|
|
81
|
+
for (const [top, bottom, fRow] of rows)
|
|
82
|
+
for (const [left, right, fCol] of cols) {
|
|
83
|
+
out.push({ top, left, bottom, right, pane: fRow ? (fCol ? 'corner' : 'top') : fCol ? 'left' : 'main', edges: { top: top === r.top, left: left === r.left, bottom: bottom === r.bottom, right: right === r.right } });
|
|
84
|
+
}
|
|
85
|
+
return out;
|
|
86
|
+
}
|
|
87
|
+
const filled = (v) => v !== null && v !== undefined && v !== '';
|
|
88
|
+
/**
|
|
89
|
+
* Ctrl+arrow: the edge of the data region from a cell, as Excel moves.
|
|
90
|
+
* From a filled cell whose neighbour is filled: the last filled cell of that run; otherwise the next
|
|
91
|
+
* filled cell; otherwise the sheet's edge.
|
|
92
|
+
* @param at - The cell to move from.
|
|
93
|
+
* @param dr - Row step (−1, 0, 1).
|
|
94
|
+
* @param dc - Column step (−1, 0, 1).
|
|
95
|
+
* @param value - A cell's value.
|
|
96
|
+
* @param size - The sheet's drawn rows and columns.
|
|
97
|
+
* @returns Where the jump lands.
|
|
98
|
+
*/
|
|
99
|
+
export function dataEdge(at, dr, dc, value, size) {
|
|
100
|
+
const inside = (r, c) => r >= 0 && c >= 0 && r < size.rows && c < size.cols;
|
|
101
|
+
let r = at.row, c = at.col;
|
|
102
|
+
if (!inside(r + dr, c + dc))
|
|
103
|
+
return { row: r, col: c };
|
|
104
|
+
if (filled(value(r, c)) && filled(value(r + dr, c + dc))) {
|
|
105
|
+
while (inside(r + dr, c + dc) && filled(value(r + dr, c + dc))) {
|
|
106
|
+
r += dr;
|
|
107
|
+
c += dc;
|
|
108
|
+
}
|
|
109
|
+
return { row: r, col: c };
|
|
110
|
+
}
|
|
111
|
+
r += dr;
|
|
112
|
+
c += dc;
|
|
113
|
+
while (inside(r, c) && !filled(value(r, c))) {
|
|
114
|
+
if (!inside(r + dr, c + dc))
|
|
115
|
+
return { row: r, col: c };
|
|
116
|
+
r += dr;
|
|
117
|
+
c += dc;
|
|
118
|
+
}
|
|
119
|
+
return { row: r, col: c };
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The data region: the used range from A1 to the last filled row and column (Ctrl/⌘+A's first press).
|
|
123
|
+
* @param rows - The sheet's rows.
|
|
124
|
+
* @returns The range, at least A1.
|
|
125
|
+
*/
|
|
126
|
+
export function usedRange(rows) {
|
|
127
|
+
let bottom = 0, right = 0;
|
|
128
|
+
rows.forEach((row, r) => { for (let c = row.length - 1; c >= 0; c--)
|
|
129
|
+
if (filled(row[c])) {
|
|
130
|
+
bottom = Math.max(bottom, r);
|
|
131
|
+
right = Math.max(right, c);
|
|
132
|
+
break;
|
|
133
|
+
} });
|
|
134
|
+
return { top: 0, left: 0, bottom, right };
|
|
135
|
+
}
|
|
136
|
+
const htmlEsc = (s) => s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
|
137
|
+
/**
|
|
138
|
+
* The clipboard payload for a range: TSV (display text) and an HTML table, so Excel and Sheets paste a grid.
|
|
139
|
+
* @param r - The range.
|
|
140
|
+
* @param text - A cell's display text.
|
|
141
|
+
* @param shown - Which rows and columns are shown; the others are left out (W-49).
|
|
142
|
+
* @returns `text/plain` and `text/html`.
|
|
143
|
+
*/
|
|
144
|
+
export function clipOf(r, text, shown = {}) {
|
|
145
|
+
const lines = [], trs = [];
|
|
146
|
+
for (let row = r.top; row <= r.bottom; row++) {
|
|
147
|
+
if (shown.row && !shown.row(row))
|
|
148
|
+
continue; // hidden rows and columns are left out (W-49)
|
|
149
|
+
const cells = [];
|
|
150
|
+
for (let col = r.left; col <= r.right; col++)
|
|
151
|
+
if (!shown.col || shown.col(col))
|
|
152
|
+
cells.push(text(row, col));
|
|
153
|
+
// a tab or line break inside a cell would split it: Excel quotes such a cell in TSV
|
|
154
|
+
lines.push(cells.map((t) => (/[\t\n"]/.test(t) ? `"${t.replace(/"/g, '""')}"` : t)).join('\t'));
|
|
155
|
+
trs.push(`<tr>${cells.map((t) => `<td>${htmlEsc(t)}</td>`).join('')}</tr>`);
|
|
156
|
+
}
|
|
157
|
+
return { tsv: lines.join('\n'), html: `<table>${trs.join('')}</table>` };
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Totals over a range; only the cells that exist are visited.
|
|
161
|
+
* @param r - The range.
|
|
162
|
+
* @param value - A cell's value.
|
|
163
|
+
* @param lastRow - The last row holding data (rows past it are empty).
|
|
164
|
+
* @param shown - Which rows and columns are shown; hidden ones are left out (W-49).
|
|
165
|
+
* @returns Count, how many were numbers, and their sum.
|
|
166
|
+
*/
|
|
167
|
+
export function totalsOf(r, value, lastRow, shown = {}) {
|
|
168
|
+
const t = { count: 0, numbers: 0, sum: 0 };
|
|
169
|
+
for (let row = r.top; row <= Math.min(r.bottom, lastRow); row++) {
|
|
170
|
+
if (shown.row && !shown.row(row))
|
|
171
|
+
continue;
|
|
172
|
+
for (let col = r.left; col <= r.right; col++) {
|
|
173
|
+
if (shown.col && !shown.col(col))
|
|
174
|
+
continue;
|
|
175
|
+
const v = value(row, col);
|
|
176
|
+
if (!filled(v))
|
|
177
|
+
continue;
|
|
178
|
+
t.count++;
|
|
179
|
+
if (typeof v === 'number') {
|
|
180
|
+
t.numbers++;
|
|
181
|
+
t.sum += v;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return t;
|
|
186
|
+
}
|
|
187
|
+
/** Cells a range holds (for the copy limit and the announcement). */
|
|
188
|
+
export const cellCount = (r) => (r.bottom - r.top + 1) * (r.right - r.left + 1);
|
|
189
|
+
//# sourceMappingURL=selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/excel/selection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/excel/styles.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ,QAiCpB,CAAC;AAEF,eAAO,MAAM,SAAS,QAsKrB,CAAC"}
|