@sheetxl/sdk 0.8.0-beta.17 → 0.8.0-beta.18
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/browser/esm/{CAjITJT3eLst9Rhi.mjs → -P0fym6eh9hn9row.mjs} +2 -2
- package/browser/esm/{CFywn1iiD35nNNUP.mjs → -nOfWMHdlTb9ShjF.mjs} +9 -9
- package/browser/esm/{Byp_bvP9G-tN6hcz.mjs → 0Mw5Ew_7tAiWgc5J.mjs} +14 -14
- package/browser/esm/{CHByUyHFA3ESf7DX.mjs → 1ktaHvjuYL6stU4C.mjs} +1 -1
- package/browser/esm/{CVV4xqwD8gIjYj1E.mjs → B3ifnlsuky2L9HmB.mjs} +33 -33
- package/browser/esm/{WR3-xqcK1gF3ewAR.mjs → B67q5ZrwyKvm3d6W.mjs} +3 -3
- package/browser/esm/{DTXsi--x2wgqgwtf.mjs → BQSd_URWugiyNoNj.mjs} +2 -2
- package/browser/esm/{C0o6WpBojS7XhV5m.mjs → BWHHWC6H2JgG11Kq.mjs} +2 -2
- package/browser/esm/{BlkstmZEklk6Y1QD.mjs → BYbb2weYQCb_7KI3.mjs} +21 -21
- package/browser/esm/{DJTEQZiR9IFTuN_4.mjs → B_hrmyuWaH5VIFpV.mjs} +2 -2
- package/browser/esm/{O970I8lbI7okqG7N.mjs → Bql31KGUYo0SCMwZ.mjs} +392 -392
- package/browser/esm/{YwDdO4YwcIE4OB0D.mjs → BtVpErObXYKJCwHG.mjs} +1 -1
- package/browser/esm/{B-Q1-7RgSnA75J32.mjs → By7_c19Kv2YQaDVF.mjs} +475 -475
- package/browser/esm/{taTjDyUIIxq2eClH.mjs → C6M_XM08QtHuaInQ.mjs} +3 -3
- package/browser/esm/{DDNerAeet8uDYKhf.mjs → CBHwju4PYiv85_jD.mjs} +2 -2
- package/browser/esm/{Dx_dZ7jrw5Hxeoot.mjs → CJhYhZtsey3OnWKd.mjs} +1 -1
- package/browser/esm/{DnMFW_oKYQxRjP1l.mjs → CQlxAbhdxgfu0ERF.mjs} +1 -1
- package/browser/esm/{CLT3qGy_brDIwbYd.mjs → CVXOtvee4oFImGyR.mjs} +504 -504
- package/browser/esm/{Dlk1kRgkiBIpUxd9.mjs → CXQLYHAhE5MLKxZ4.mjs} +37 -37
- package/browser/esm/{jotvQFBWO2jXAhWx.mjs → CZiJYw94Yt7xslXS.mjs} +1 -1
- package/browser/esm/{aYpwVCDSwMUuz147.mjs → ChRUNekYurtOtrP1.mjs} +113 -113
- package/browser/esm/{JmmPE8Vsj85wdV8H.mjs → CnobgPLHEsTPTFY5.mjs} +1 -1
- package/browser/esm/{DGUOlgm1_WFmf_xO.mjs → CxNnMvwtOf76r7yY.mjs} +1 -1
- package/browser/esm/{DW3kFc5t4Wnh5E9S.mjs → CzmmdfrOYDUGx-Yh.mjs} +1 -1
- package/browser/esm/{XHhDDWrJiZJgWxPM.mjs → D2P43UD6TGSXErhr.mjs} +2 -2
- package/browser/esm/{DrmOaEx6CQ91zBsP.mjs → DH8NuKmZAC9EaqwP.mjs} +18 -18
- package/browser/esm/{DUB6Oj_aiV3f8s5_.mjs → DJuiV0Y8olnwuqB-.mjs} +21 -21
- package/browser/esm/{DkmqFp_-iUIy_l3D.mjs → DKFaQ2QOyUPCk0sD.mjs} +3 -3
- package/browser/esm/{BI6NwRrdLCbPdz6f.mjs → DLR8g1DkooIBl8S1.mjs} +2 -2
- package/browser/esm/{DsWDvmky7CgzX_7W.mjs → DNAXbbB8DGE2xeHy.mjs} +2 -2
- package/browser/esm/{BY_-BTa5h6HnnZ1W.mjs → DQTUUXcERWI4l0to.mjs} +2 -2
- package/browser/esm/{DJrnSjYjFxJvpQiH.mjs → DpFowFtk9AeU-89B.mjs} +1 -1
- package/browser/esm/{Dy0TAi9WafVT8eke.mjs → DyRVg5YJn7voOO6z.mjs} +2 -2
- package/browser/esm/{qNv1x-Ny9TPbvZzj.mjs → Pn5Jc-47dk16sYQ4.mjs} +1 -1
- package/browser/esm/{CWkaF7gYWCkW7vDA.mjs → _WWjW2f-YW-AVqAL.mjs} +1 -1
- package/browser/esm/{gQzj95vSMXdKhpWf.mjs → _lh_Rr5SwLthmbmu.mjs} +7797 -5857
- package/browser/esm/index.mjs +367 -366
- package/browser/esm/{yudASWe8CWXYcGt3.mjs → mecFApGwMvcIzlpd.mjs} +36 -36
- package/browser/esm/{mufbL88lyIKJEWyP.mjs → n4LOSiYtWTzqQa4w.mjs} +661 -661
- package/{node/esm/Cle-_21jebWv_-D4.mjs → browser/esm/tJB0V8fKbukOYt9U.mjs} +2 -2
- package/browser/esm/{BWNQcQyx8wt6huOq.mjs → yRhetuEQfV7moa4B.mjs} +1 -1
- package/browser/esm/{BuKA3E-Ev8Dp5W2I.mjs → ybFoQ6IijUJnBeCF.mjs} +1 -1
- package/node/esm/{Yo7_havHbr9VL8R4.mjs → 0313aQKBU4DE3v2j.mjs} +1 -1
- package/node/esm/{DfrxGbxxowFmm3SF.mjs → 3gjEEXV2aSt7cKeD.mjs} +1 -1
- package/node/esm/{NnrDjio_xwTBs05n.mjs → 3smtwEJ0ASF0tKBY.mjs} +2 -2
- package/node/esm/{cRz94rkuvDrA8mr9.mjs → 4k3KKByrUw2Wr2TX.mjs} +1 -1
- package/node/esm/{jqBKdf9DG54xqpaw.mjs → 90jp-mCVEr43zZTj.mjs} +2 -2
- package/node/esm/{OCrS6pBT6lGRu82d.mjs → BAEmzj0gb8Cbgz7p.mjs} +3293 -3293
- package/node/esm/{CIxb44vA81H9lRip.mjs → BBC5dL9bXzOrQDGY.mjs} +1 -1
- package/node/esm/{7ZwdVIsOdcziHpMD.mjs → BV0cJ_YP_0qzJuPt.mjs} +180 -180
- package/node/esm/{DxnBYzOueAKEqaQT.mjs → BcxcYoF_4GFL7Zkl.mjs} +15 -15
- package/node/esm/{BwyoLlHutolJw7OW.mjs → BesaVk0x7UyfLDk2.mjs} +1 -1
- package/node/esm/{ClJJC8tBpgsqHwdn.mjs → C-LmDC9oNcbENOK1.mjs} +1 -1
- package/node/esm/{BSlFO0_8UZ38gfeE.mjs → CDkUQn5AwYGomlsT.mjs} +36 -36
- package/node/esm/{CjCqcGyCYGkaMQI9.mjs → CE4I5qfVmUBf7mED.mjs} +1 -1
- package/node/esm/{DgsBYF3xbjgx9Mzp.mjs → CO0UDgbkHGwyTfev.mjs} +1 -1
- package/node/esm/{DfbVTAhNutxM74E8.mjs → CTWihjVB5uFX7U4j.mjs} +2 -2
- package/node/esm/{-q1xF3_2jmk3QHIY.mjs → CUNaLYCntlclipWu.mjs} +497 -497
- package/node/esm/{BhosJbKOPgbJSZMY.mjs → CY9JqXFJTt5pGhC3.mjs} +1 -1
- package/node/esm/{B6BQYUDRxbRnzca4.mjs → C_Sqy290v4uzyi1E.mjs} +3 -3
- package/node/esm/{BoLecFnIxhYKGor-.mjs → Cf-cK3yPe9bjK6o2.mjs} +561 -561
- package/node/esm/{Cb1-r2RCxcJZB6fM.mjs → CpvUwhAeDmdEpdR-.mjs} +10018 -8039
- package/{browser/esm/DCs7bk-yx0UhCvQ4.mjs → node/esm/Crhg3srH-O5sJERh.mjs} +2 -2
- package/node/esm/{M3jahkTgfUxGyeZv.mjs → Cx2U91jhiTDz600y.mjs} +116 -116
- package/node/esm/{BQko-9y6mf2oQK7u.mjs → CyWWKan_uk4dHZ6P.mjs} +1 -1
- package/node/esm/{Bgy7uWJVGwkN7AlD.mjs → D48MjKzkj37XsVm1.mjs} +2 -2
- package/node/esm/{XhDjStxKy-dd3WKa.mjs → D7c0zfLVoG7EEln5.mjs} +43 -43
- package/node/esm/{CIlH2fSEpdYBZwUA.mjs → D8J4JmOPwG_Yr2GD.mjs} +1 -1
- package/node/esm/{oGGVbqahqfK45-Uz.mjs → D91qb21TrJX98Rw8.mjs} +3 -3
- package/node/esm/{btVWSwUwMjM0J5fS.mjs → D9D2NyyKbWXpTj5I.mjs} +2 -2
- package/node/esm/{DCSJKgcCQzOV-dMJ.mjs → DBF7pIpitcmhi65H.mjs} +2 -2
- package/node/esm/{CDgUHRW6vSASfqNr.mjs → DLPVrV723TSxkXqL.mjs} +1 -1
- package/node/esm/{DTkV7IK2_ODMJAP5.mjs → DWsnb-a-9dfRn5jJ.mjs} +24 -24
- package/node/esm/{DCaLNIs-_4Y6hJ8S.mjs → Dj1pybJRqeZiP1Z6.mjs} +1 -1
- package/node/esm/{BBUVvO9Ma1RzbKux.mjs → DtNJOImWtsXVrQps.mjs} +2 -2
- package/node/esm/{zh6vcRzFqdV1aYh5.mjs → DxROQlX1KHLb9tHS.mjs} +1 -1
- package/node/esm/{B8MYgBe4XICBSROW.mjs → dp4LxzOEkfTbVX_1.mjs} +21 -21
- package/node/esm/{CHS84ZGEoH6aeHsZ.mjs → ee_DgHTffiVTOiU2.mjs} +21 -21
- package/node/esm/{fwfAgq8qIADcHmY4.mjs → fMFapG4AGMQKX8c5.mjs} +33 -33
- package/node/esm/index.mjs +545 -544
- package/node/esm/{nxxwAZZF8NsdErJW.mjs → jmElgIMAkpc2Ab1m.mjs} +1 -1
- package/node/esm/{D51xu0rubo34Ppeg.mjs → yVJ2lEYZob1gwiRZ.mjs} +14 -14
- package/package.json +6 -6
- package/resources/locales/de/model.msg.json +15 -0
- package/resources/locales/en/model.msg.json +15 -0
- package/types/scripting-api.json +11445 -11299
- package/types/scripting-enums.json +22 -1
- package/types/scripting.d.ts +623 -0
- package/types/src/address/index.d.ts +2 -0
- package/types/src/anomalies/_Anomalies.d.ts +34 -0
- package/types/src/anomalies/_CompletenessChecks.d.ts +32 -0
- package/types/src/cell/ICell.d.ts +36 -1
- package/types/src/cellRange/ICellRange.d.ts +106 -0
- package/types/src/index.d.ts +1 -0
- package/types/src/license/runtime.browser.d.ts +3 -1
- package/types/src/sheet/IWorksheet.d.ts +17 -0
- package/types/src/sheet/SheetCell.d.ts +3 -0
- package/types/src/sheet/SheetRange.d.ts +6 -0
- package/types/src/sheet/Worksheet.d.ts +103 -1
- package/types/src/sheet/_ListenerAnchor.d.ts +14 -0
- package/types/src/sheet/_SheetStateTypes.d.ts +13 -0
- package/types/src/sparkline/ISparklineGroup.d.ts +338 -0
- package/types/src/sparkline/ISparklineGroupCollection.d.ts +68 -0
- package/types/src/sparkline/SparklineGroup.d.ts +271 -0
- package/types/src/sparkline/SparklineGroupCollection.d.ts +25 -0
- package/types/src/sparkline/SparklineRanges.d.ts +195 -0
- package/types/src/sparkline/index.d.ts +4 -0
- package/types/src/sparkline/layout/SparklineLayout.d.ts +71 -0
- package/types/src/sparkline/layout/_layoutSparkline.d.ts +42 -0
- package/types/src/sparkline/layout/index.d.ts +2 -0
|
@@ -29,6 +29,8 @@ export declare namespace AddressUtils {
|
|
|
29
29
|
const refToRun: <T = any>(ref: IRange.JSONReference<T>, isColumn: boolean) => RunCoordValue<T> | null;
|
|
30
30
|
/** {@inheritDoc runToRef} */
|
|
31
31
|
const runsToRefs: <T = any>(runs: readonly Readonly<RunCoordValue<T>>[], isColumn: boolean) => IRange.JSONReferenceEntry<T>[];
|
|
32
|
+
/** Splits an address list at its `,` separators, skipping those in a quoted sheet name or brackets. */
|
|
33
|
+
const splitAddressList: (address: string) => string[];
|
|
32
34
|
/** {@inheritDoc refToRun} */
|
|
33
35
|
const refsToRuns: <T = any>(refs: readonly IRange.JSONReference<T>[], isColumn: boolean) => RunCoordValue<T>[];
|
|
34
36
|
}
|
|
@@ -38,6 +38,8 @@ export interface AnomalySource extends RoleSource {
|
|
|
38
38
|
readonly isProtected: boolean;
|
|
39
39
|
/** The font colors the workbook's other sheets write their roles in ({@link roleColorsOf}). */
|
|
40
40
|
readonly workbookRoleColors: () => ReadonlySet<string>;
|
|
41
|
+
/** The cells of this sheet the workbook's other sheets' formulas read ({@link foreignReadsOf}). */
|
|
42
|
+
readonly workbookReads: () => ISpatialQuery<unknown>;
|
|
41
43
|
}
|
|
42
44
|
type Rect = IRange.Coords;
|
|
43
45
|
/** @internal */
|
|
@@ -89,6 +91,32 @@ export interface FormulaRegion {
|
|
|
89
91
|
/** The formula in R1C1, which is what agrees between two cells of one run. */
|
|
90
92
|
readonly r1c1: string;
|
|
91
93
|
}
|
|
94
|
+
/** @internal */
|
|
95
|
+
export declare class _FormatKeys {
|
|
96
|
+
private readonly _styles;
|
|
97
|
+
private readonly _normal;
|
|
98
|
+
private readonly _named;
|
|
99
|
+
constructor(_styles: IStyleCollection);
|
|
100
|
+
keyOf(props: Readonly<ICellStyle.Properties> | null, part: 'font' | 'fill' | 'numberFormat' | 'alignment'): string;
|
|
101
|
+
/**
|
|
102
|
+
* The font color a cell claims, as `#RRGGBB`: its own, else its named style's, else the Normal
|
|
103
|
+
* style's. A theme color resolves through the workbook's theme, so an unformatted cell and one
|
|
104
|
+
* authored in the theme's text color are one key.
|
|
105
|
+
*/
|
|
106
|
+
fontColorOf(props: Readonly<ICellStyle.Properties> | null): string;
|
|
107
|
+
private _toHex;
|
|
108
|
+
private readonly _hex;
|
|
109
|
+
private _namedProps;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The cells of `target` that the formulas of `others` read, as rectangles: what `unreferencedInput`
|
|
113
|
+
* subtracts from a sheet's own unread inputs. A filled formula region is read at its first and
|
|
114
|
+
* last cells and the two references' bounding box is taken, which overstates a diagonal fill and
|
|
115
|
+
* never understates. With the engine off there is no compiler for a detached formula, and a
|
|
116
|
+
* region whose formula is not compiled reads nothing.
|
|
117
|
+
* @internal
|
|
118
|
+
*/
|
|
119
|
+
export declare function foreignReadsOf(target: IWorksheet, others: readonly IWorksheet[]): ISpatialMap<boolean>;
|
|
92
120
|
/**
|
|
93
121
|
* The role layer (`ICellRange.Feature.Role`): the kind layer refined by what a formula reads and
|
|
94
122
|
* by who reads a cell. Typed cells are `label` (nothing reads them) or `input` (something does); a
|
|
@@ -105,5 +133,11 @@ export declare function buildRoles(source: RoleSource): ISpatialMap<ICell.Role>;
|
|
|
105
133
|
* @internal
|
|
106
134
|
*/
|
|
107
135
|
export declare function roleColorsOf(source: AnomalySource): ReadonlySet<string>;
|
|
136
|
+
/** The parts of `rects` that none of `held` covers. @internal */
|
|
137
|
+
export declare function minusHeld(rects: readonly Rect[], held: readonly Rect[]): Rect[];
|
|
138
|
+
/** @internal */
|
|
139
|
+
export declare const intersect: (a: Rect, b: Rect) => Rect | null;
|
|
140
|
+
/** The parts of `rects` inside `bounds`. @internal */
|
|
141
|
+
export declare const clipAll: (rects: readonly Rect[], bounds: Rect) => Rect[];
|
|
108
142
|
export {};
|
|
109
143
|
//# sourceMappingURL=_Anomalies.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ISpatialMap } from '../collections';
|
|
2
|
+
import { AnomalySource, _Findings, _FormatKeys } from './_Anomalies';
|
|
3
|
+
/**
|
|
4
|
+
* `unreferencedInput`: a typed number (or date) beside a label that no formula in the workbook
|
|
5
|
+
* reads — `Tax rate 21%` where nothing computes a tax. The role layer says what this sheet's
|
|
6
|
+
* formulas read, and what the other sheets read (`workbookReads`) is subtracted too. A labeled
|
|
7
|
+
* line fires only when none of its typed numbers is read anywhere: a historical row whose last
|
|
8
|
+
* period feeds a forecast is data in use, not an assumption left out. A line of three or more
|
|
9
|
+
* numbers at a constant step (years, period counts) is a header and never fires. One finding per
|
|
10
|
+
* labeled line, by its row label, else its column label, ranked down by the cells it holds: a
|
|
11
|
+
* lone cell is an assumption, a twelve-cell row is data.
|
|
12
|
+
*/
|
|
13
|
+
export declare function checkUnreferencedInput(source: AnomalySource, findings: _Findings): void;
|
|
14
|
+
/**
|
|
15
|
+
* `rowGap`: a labeled row with nothing where its block or its header has columns — the line of a
|
|
16
|
+
* schedule left out, its first period, or a whole period never built. The label is the row's
|
|
17
|
+
* first filled cell when it is text. A block is a run of filled rows with no blank row between
|
|
18
|
+
* (one spacer row still joins); its columns are every column, past the label, that any other row
|
|
19
|
+
* of the block fills, so a first-period column that only the block's last line fills still counts.
|
|
20
|
+
* The nearest header row above (text, dates or a numeric series past its first cell, no formula)
|
|
21
|
+
* adds its columns, so a period the header names and no row fills is a gap too; a row with no
|
|
22
|
+
* header above it (a title, a note) has no periods and never fires. `missing` of `of`
|
|
23
|
+
* says how much of the row is empty: a row with some of those cells filled is a line with a period
|
|
24
|
+
* left out and ranks in full, an empty row at half; a column only the header supplies ranks at
|
|
25
|
+
* two thirds (`header`, the period's label, says so). A label in a font neither neighbor's label
|
|
26
|
+
* shares reads as a heading (`labelFont: 'own'`) and ranks at a third: a heading has nothing to
|
|
27
|
+
* its right by design.
|
|
28
|
+
*/
|
|
29
|
+
export declare function checkRowGap(source: AnomalySource, formats: _FormatKeys, findings: _Findings): void;
|
|
30
|
+
/** @internal */
|
|
31
|
+
export type { ISpatialMap };
|
|
32
|
+
//# sourceMappingURL=_CompletenessChecks.d.ts.map
|
|
@@ -3,8 +3,9 @@ import { Size, Rectangle, Bounds } from '@sheetxl/utils';
|
|
|
3
3
|
import { ITypes } from '../type';
|
|
4
4
|
import { ITextFrame, TextRotation, TextStacked, IRichText } from '../text';
|
|
5
5
|
import { NumberFormat } from '../numFmt';
|
|
6
|
-
import { IConditionalFormat } from '../conditionalFormat
|
|
6
|
+
import { IConditionalFormat } from '../conditionalFormat';
|
|
7
7
|
import { ICellControl } from '../cellControl';
|
|
8
|
+
import { ISparklineGroup } from '../sparkline';
|
|
8
9
|
import { IHyperlink } from '../hyperlink';
|
|
9
10
|
import { IComment } from '../comment';
|
|
10
11
|
import { ICellStyle } from '../style';
|
|
@@ -367,6 +368,15 @@ export interface ICell {
|
|
|
367
368
|
* checkbox cell holding `2` has a control and draws `2`.
|
|
368
369
|
*/
|
|
369
370
|
getControl(): ICellControl | null;
|
|
371
|
+
/**
|
|
372
|
+
* Returns the cell's sparkline, or `null` when it has none.
|
|
373
|
+
*
|
|
374
|
+
* @remarks
|
|
375
|
+
* The sparkline is the cell's view of its group: what it draws
|
|
376
|
+
* ({@link ISparklineGroup.ISparkline.getDataRange}) and how ({@link ISparklineGroup.ISparkline.getGroup}).
|
|
377
|
+
* A cell has at most one. It is drawn over the cell's value, which it leaves as it is.
|
|
378
|
+
*/
|
|
379
|
+
getSparkline(): ISparklineGroup.ISparkline | null;
|
|
370
380
|
/**
|
|
371
381
|
* Returns `true` if the cell contains a value.
|
|
372
382
|
*
|
|
@@ -779,6 +789,14 @@ export declare namespace ICell {
|
|
|
779
789
|
* `range.getDataValidation().clear()`.
|
|
780
790
|
*/
|
|
781
791
|
readonly DataValidations: "dataValidations";
|
|
792
|
+
/**
|
|
793
|
+
* Represents the sparklines drawn in the cells.
|
|
794
|
+
* @remarks
|
|
795
|
+
* A clear takes the cells out of their sparkline groups; a group left with no cell is
|
|
796
|
+
* deleted. Excel's Sparkline > Clear. Clear Contents and Clear Formats leave a sparkline, as in
|
|
797
|
+
* Excel; Clear All removes it.
|
|
798
|
+
*/
|
|
799
|
+
readonly Sparklines: "sparklines";
|
|
782
800
|
};
|
|
783
801
|
type Content = typeof Content[keyof typeof Content];
|
|
784
802
|
/**
|
|
@@ -888,6 +906,10 @@ export declare namespace ICell {
|
|
|
888
906
|
readonly TwinBlockDivergence: "twinBlockDivergence";
|
|
889
907
|
/** A typed number an order of magnitude or more off the numbers typed in its format on the sheet. */
|
|
890
908
|
readonly ScaleOutlier: "scaleOutlier";
|
|
909
|
+
/** A typed number beside a label that no formula in the workbook reads: an assumption the model never uses. */
|
|
910
|
+
readonly UnreferencedInput: "unreferencedInput";
|
|
911
|
+
/** A labeled row with nothing where the rows above and below hold values: a line left out, or a period of it. */
|
|
912
|
+
readonly RowGap: "rowGap";
|
|
891
913
|
/** A constant typed into a formula — a number, a string or a boolean — and how often the workbook types it. */
|
|
892
914
|
readonly ConstantFrequency: "constantFrequency";
|
|
893
915
|
};
|
|
@@ -927,6 +949,8 @@ export declare namespace ICell {
|
|
|
927
949
|
* | `literalMatchesInput` | `literal`, the number as the formula types it; `inputAt`, the nearest typed number of that value no formula reads; `label` / `labelAt`, that input's label, when it has one; `matches`, the places the value is typed unread |
|
|
928
950
|
* | `twinBlockDivergence` | `part` (`'literal'` / `'sign'`); for a literal, `literal` and `expected`, this formula's number and its twins'; for a sign, `term` of `terms`, the term that differs, `references`, how many the shape holds, and `sign`, how this formula adds it; `twins`, how many formulas carry the other side; `twinAt`, one of them |
|
|
929
951
|
* | `scaleOutlier` | `format` (`'percent'`); `times`, the power of ten the value is off by; `typical`, the median of the sheet's typed numbers in that format; `of`, how many there are |
|
|
952
|
+
* | `unreferencedInput` | `label` / `labelAt`, the line's label; `cells`, the typed numbers on the line nothing reads; `value`, the number as shown, for a line of one cell |
|
|
953
|
+
* | `rowGap` | `label` / `labelAt`, the row's label; `missing` of `of`, the empty cells among those filled in both neighbor rows; `kind` (`'cells'`, some of the row is filled; `'row'`, none of it); `above` / `aboveAt` and `below` / `belowAt`, the neighbor rows' labels, where text; `labelFont: 'own'` when neither neighbor's label shares the label's font |
|
|
930
954
|
* | `constantFrequency` | `kind` (`'number'`, `'string'`, `'boolean'`); `value`, a number without its sign; `uses`, the places in the workbook that type it; `of`, the workbook's constant uses |
|
|
931
955
|
*
|
|
932
956
|
* **Runs.** `formula`, `hardcodeInRun` and `styleBreak` are one rule over different layers of
|
|
@@ -982,6 +1006,17 @@ export declare namespace ICell {
|
|
|
982
1006
|
* places in the workbook type it (`uses`) and of how many constant uses (`of`). The rarer the
|
|
983
1007
|
* constant, the higher it ranks. A finding's `uses` and `of` change when another sheet changes.
|
|
984
1008
|
*
|
|
1009
|
+
* **What is left out.** `unreferencedInput` reads the typed numbers beside a label that no
|
|
1010
|
+
* formula on any sheet reads: an assumption the model never uses, which in a model being built
|
|
1011
|
+
* is the item still to build. A labeled line fires only when none of its numbers is read, so a
|
|
1012
|
+
* historical row whose last period feeds a forecast is data in use; a line of numbers at one
|
|
1013
|
+
* step (years) is a header. The rank is divided by the line's cells: a lone cell is an
|
|
1014
|
+
* assumption, a long row is data. `rowGap` reads a labeled row against the rows above and
|
|
1015
|
+
* below it (within one spacer row): the cells filled in both neighbors and empty here are the
|
|
1016
|
+
* line left out, or its missing periods. A row that is partly filled ranks in full, an empty row
|
|
1017
|
+
* at half, and a row whose label is in a font neither neighbor shares (a heading) at a third.
|
|
1018
|
+
* Both findings change when another sheet starts or stops reading the cell.
|
|
1019
|
+
*
|
|
985
1020
|
* A label's position is absolute (`R12C3`), since it stays put whichever cell of a region reads
|
|
986
1021
|
* it; its text is the one read at the region's first cell.
|
|
987
1022
|
*/
|
|
@@ -21,6 +21,7 @@ import { IDataValidation, IDataValidationCollection } from '../dataValidation';
|
|
|
21
21
|
import { IConditionalFormat, IConditionalFormatCollection } from '../conditionalFormat';
|
|
22
22
|
import { IProtectedRange, IProtectedRangeCollection } from '../protectedRange';
|
|
23
23
|
import { ICellControl, ICellControlCollection } from '../cellControl';
|
|
24
|
+
import { ISparklineGroup, ISparklineGroupCollection } from '../sparkline';
|
|
24
25
|
import { ICellRanges } from './ICellRanges';
|
|
25
26
|
import { ICellRegions } from './ICellRegion';
|
|
26
27
|
import { ICellHeaderRange } from './ICellHeaderRange';
|
|
@@ -131,6 +132,53 @@ export interface ICellRange {
|
|
|
131
132
|
* by {@link clear} of formats, and carried by a paste of formats.
|
|
132
133
|
*/
|
|
133
134
|
setControl(control: ICellControl.JSON | null, options?: ITransaction.OperationOptions): this;
|
|
135
|
+
/**
|
|
136
|
+
* Draws a sparkline in each cell of the range, from its share of `data`, as one new group; `null`
|
|
137
|
+
* removes the cells' sparklines.
|
|
138
|
+
*
|
|
139
|
+
* @param data The cells the sparklines draw: one area, on this sheet when not qualified, or a
|
|
140
|
+
* defined name for one (read as the cells it names now, as Excel does).
|
|
141
|
+
* @param properties How they draw. A new group starts as Excel's does: empty cells as gaps,
|
|
142
|
+
* Excel's colors, and negative points colored for win/loss.
|
|
143
|
+
* @returns The new group, or `null` for a removal.
|
|
144
|
+
*
|
|
145
|
+
* @remarks
|
|
146
|
+
* Excel's Insert > Sparklines, and VBA's `Range.SparklineGroups.Add(Type, SourceData)`. The range
|
|
147
|
+
* is the location: one cell, or one row or one column of cells. The cells pair with the data as
|
|
148
|
+
* Excel pairs them:
|
|
149
|
+
* - One cell draws all of `data`, which must be one row or one column.
|
|
150
|
+
* - A column of cells draws a row of `data` each, its first cell the first row: `F2:F4` over
|
|
151
|
+
* `A2:E4` draws `A2:E2`, `A3:E3`, `A4:E4`.
|
|
152
|
+
* - A row of cells draws a column each, the same way.
|
|
153
|
+
*
|
|
154
|
+
* Refused, as Excel refuses them: a location of several rows and columns, data that is a union
|
|
155
|
+
* or a table's structured reference, two-dimensional data for one cell, and data whose rows or
|
|
156
|
+
* columns do not number the cells. Also refused: a row of cells over data that only pairs by
|
|
157
|
+
* rows, which Excel draws a row each, transposed.
|
|
158
|
+
*
|
|
159
|
+
* A cell has one sparkline, so the cells leave any group they were in. Sparklines are drawn over
|
|
160
|
+
* the cells' values, which stay; refused on a protected sheet unless formatting cells is allowed.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```ts
|
|
164
|
+
* sheet.getRange('F2:F4').setSparkline('A2:E4', { type: 'column', high: true });
|
|
165
|
+
* sheet.getRange('F2:F4').setSparkline(null);
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
/**
|
|
169
|
+
* Returns the {@link ISparklineGroup}s with a sparkline in the range.
|
|
170
|
+
*
|
|
171
|
+
* @param options The filters of {@link ISparklineGroupCollection.getItems} without `address`;
|
|
172
|
+
* this range is the address.
|
|
173
|
+
*
|
|
174
|
+
* @remarks
|
|
175
|
+
* See {@link getConditionalFormats} for the overlap and one-entry-per-item rules, which are the
|
|
176
|
+
* same for every ranged item lookup. The groups, never one entry per sparkline: a column of a
|
|
177
|
+
* million sparklines is one group. Ask a cell for its own with {@link ICell.getSparkline}.
|
|
178
|
+
* VBA's `Range.SparklineGroups`.
|
|
179
|
+
*/
|
|
180
|
+
getSparklineGroups(options?: ICellRange.GetItemsOptions<ISparklineGroupCollection.GetItemsOptions>): ISparklineGroup[];
|
|
181
|
+
setSparkline(data: ICellRange.Address | null, properties?: ISparklineGroup.Modifiers, options?: ITransaction.OperationOptions): ISparklineGroup | null;
|
|
134
182
|
/**
|
|
135
183
|
* Returns the {@link IDataValidation}s that overlap the range, in priority order.
|
|
136
184
|
*
|
|
@@ -2861,6 +2909,11 @@ export declare namespace ICellRange {
|
|
|
2861
2909
|
* question: ask for both to split a column of checkboxes from the text cells among them.
|
|
2862
2910
|
*/
|
|
2863
2911
|
readonly CellControl: "cellControl";
|
|
2912
|
+
/**
|
|
2913
|
+
* Cells with a sparkline ({@link IWorksheet.getSparklineGroups}). Regions group by the
|
|
2914
|
+
* sparkline group, so two groups side by side are two regions.
|
|
2915
|
+
*/
|
|
2916
|
+
readonly Sparkline: "sparkline";
|
|
2864
2917
|
/**
|
|
2865
2918
|
* Cells where an error check fires — what breaks the pattern around it. Regions group by the
|
|
2866
2919
|
* check and its evidence, so a filled row that breaks the same way is one region; the anchor
|
|
@@ -3187,6 +3240,18 @@ export declare namespace ICellRange {
|
|
|
3187
3240
|
* An address rather than a range, because the cells at it now are other cells.
|
|
3188
3241
|
*/
|
|
3189
3242
|
getPreviousAddress(): string | null;
|
|
3243
|
+
/**
|
|
3244
|
+
* The edits that changed the range's cells, in the order they were made, for an `'address'`
|
|
3245
|
+
* event of a listener that asked for them ({@link ListenerOptions.edits}); empty otherwise.
|
|
3246
|
+
*
|
|
3247
|
+
* @remarks
|
|
3248
|
+
* Where {@link getSource} says where the range landed, these say what happened to its cells on
|
|
3249
|
+
* the way: each band inserted or deleted, and each cut that took some of them. A listener that
|
|
3250
|
+
* keeps something per cell of the range - a reference, a mark - reads these to take each cell
|
|
3251
|
+
* through on its own. An undo or a redo restores a revision rather than repeating the edits,
|
|
3252
|
+
* so it has none.
|
|
3253
|
+
*/
|
|
3254
|
+
getEdits(): readonly ICellRange.Edit[];
|
|
3190
3255
|
/**
|
|
3191
3256
|
* What happened to the range.
|
|
3192
3257
|
*
|
|
@@ -3233,6 +3298,35 @@ export declare namespace ICellRange {
|
|
|
3233
3298
|
*/
|
|
3234
3299
|
type Trigger = 'data' | 'address' | 'restore';
|
|
3235
3300
|
}
|
|
3301
|
+
/**
|
|
3302
|
+
* One edit that changed a listened range's cells. See {@link ICellRange.Event.getEdits}.
|
|
3303
|
+
*/
|
|
3304
|
+
type Edit = Edit.Shift | Edit.Move;
|
|
3305
|
+
namespace Edit {
|
|
3306
|
+
/**
|
|
3307
|
+
* Cells inserted or deleted: `range` is the band, and `direction` the way the cells beside it
|
|
3308
|
+
* shifted (`Down` or `Right` for an insert, `Up` or `Left` for a delete).
|
|
3309
|
+
*/
|
|
3310
|
+
interface Shift {
|
|
3311
|
+
readonly type: 'shift';
|
|
3312
|
+
readonly range: IRange.Coords;
|
|
3313
|
+
readonly direction: IRange.Direction;
|
|
3314
|
+
}
|
|
3315
|
+
/**
|
|
3316
|
+
* Cells cut from `from` to `to`, taking all of the listened range or only some of it.
|
|
3317
|
+
*
|
|
3318
|
+
* @remarks
|
|
3319
|
+
* A cut to another sheet names it as `toSheet`. A listener whose whole range was cut there
|
|
3320
|
+
* goes with it: its source is on that sheet from then on.
|
|
3321
|
+
*/
|
|
3322
|
+
interface Move {
|
|
3323
|
+
readonly type: 'move';
|
|
3324
|
+
readonly from: IRange.Coords;
|
|
3325
|
+
readonly to: IRange.Coords;
|
|
3326
|
+
/** The sheet the cells went to, when it is not the sheet they came from. */
|
|
3327
|
+
readonly toSheet?: IWorksheet;
|
|
3328
|
+
}
|
|
3329
|
+
}
|
|
3236
3330
|
/**
|
|
3237
3331
|
* Called with what changed at a listened range. See {@link ICellRange.addListener}.
|
|
3238
3332
|
*
|
|
@@ -3297,6 +3391,18 @@ export declare namespace ICellRange {
|
|
|
3297
3391
|
* @defaultValue false
|
|
3298
3392
|
*/
|
|
3299
3393
|
ignoreAddressChanges?: boolean;
|
|
3394
|
+
/**
|
|
3395
|
+
* Whether an `'address'` event carries the edits that changed the range's cells
|
|
3396
|
+
* ({@link Event.getEdits}).
|
|
3397
|
+
*
|
|
3398
|
+
* @defaultValue false
|
|
3399
|
+
*
|
|
3400
|
+
* @remarks
|
|
3401
|
+
* With it, the listener is also told of a cut that takes only some of its cells: the range
|
|
3402
|
+
* itself stays (a cut moves a reference only when it takes all of it), but the cells it
|
|
3403
|
+
* names were moved, and the event says where.
|
|
3404
|
+
*/
|
|
3405
|
+
edits?: boolean;
|
|
3300
3406
|
/**
|
|
3301
3407
|
* How the listened range follows rows and columns inserted or deleted around it.
|
|
3302
3408
|
*
|
package/types/src/index.d.ts
CHANGED
|
@@ -52,6 +52,7 @@ export * from './dataValidation';
|
|
|
52
52
|
export * from './conditionalFormat';
|
|
53
53
|
export * from './protectedRange';
|
|
54
54
|
export * from './cellControl';
|
|
55
|
+
export * from './sparkline';
|
|
55
56
|
export * from './slicer';
|
|
56
57
|
export * from './table';
|
|
57
58
|
export { Table } from './table/Table';
|
|
@@ -18,7 +18,9 @@ export declare function getHostDetails(): Promise<HostDetails>;
|
|
|
18
18
|
* does — no watermark, the evaluation period, then its grace — so the line is the host, not the
|
|
19
19
|
* product, and nothing has to declare it. Plain `http:` is web too: an intranet site is still a
|
|
20
20
|
* site, and the cheapest bypass there could be is "serve it over http". Outside a window (a worker
|
|
21
|
-
* without a location, node under test) there is no page to classify, and it stays web.
|
|
21
|
+
* without a location, node under test) there is no page to classify, and it stays web. The one
|
|
22
|
+
* `http` page that is not a site is the screenshot page ({@link SCREENSHOT_HOST}), on that exact
|
|
23
|
+
* scheme and host; it is not a dev environment, so a key served to it is still checked in full.
|
|
22
24
|
*/
|
|
23
25
|
export declare function isWebPage(): Promise<boolean>;
|
|
24
26
|
/**
|
|
@@ -24,6 +24,7 @@ import { IDataValidation, IDataValidationCollection } from '../dataValidation';
|
|
|
24
24
|
import { IConditionalFormat, IConditionalFormatCollection } from '../conditionalFormat';
|
|
25
25
|
import { IProtectedRange, IProtectedRangeCollection } from '../protectedRange';
|
|
26
26
|
import { ICellControl, ICellControlCollection } from '../cellControl';
|
|
27
|
+
import { ISparklineGroup, ISparklineGroupCollection } from '../sparkline';
|
|
27
28
|
import { IModule, IModuleCollection } from '../scripting';
|
|
28
29
|
import { IChartCollection } from '../chart';
|
|
29
30
|
import { INamedCollection } from '../named';
|
|
@@ -230,6 +231,14 @@ export interface IWorksheet extends ISheet, ITransaction.ITransactional, IListen
|
|
|
230
231
|
* {@link ICellRange.setControl} and {@link ICellRange.getControls}.
|
|
231
232
|
*/
|
|
232
233
|
getCellControls(): ICellControlCollection;
|
|
234
|
+
/**
|
|
235
|
+
* Returns the sparkline groups on this sheet.
|
|
236
|
+
*
|
|
237
|
+
* @remarks
|
|
238
|
+
* A sparkline is a small chart drawn in a cell, over its value. Each group shares one type and
|
|
239
|
+
* one set of properties across its sparklines.
|
|
240
|
+
*/
|
|
241
|
+
getSparklineGroups(): ISparklineGroupCollection;
|
|
233
242
|
/**
|
|
234
243
|
* Returns the comments and notes on this sheet.
|
|
235
244
|
*
|
|
@@ -1019,6 +1028,10 @@ export declare namespace IWorksheet {
|
|
|
1019
1028
|
* Always accompanied by the coarse {@link onStyleChange}: a control is a format.
|
|
1020
1029
|
*/
|
|
1021
1030
|
onCellControlsChange?(source: IWorksheet): void;
|
|
1031
|
+
/**
|
|
1032
|
+
* Called when a sparkline group is added, removed or re-anchored.
|
|
1033
|
+
*/
|
|
1034
|
+
onSparklineGroupsChange?(source: IWorksheet): void;
|
|
1022
1035
|
/**
|
|
1023
1036
|
* Called when a comment is added, removed, edited, resolved, replied to or re-anchored.
|
|
1024
1037
|
*
|
|
@@ -1463,6 +1476,10 @@ export declare namespace IWorksheet {
|
|
|
1463
1476
|
validationSettings?: IDataValidationCollection.Settings;
|
|
1464
1477
|
protectedRanges?: IRange.JSONReference<IProtectedRange.JSON>[];
|
|
1465
1478
|
cellControls?: IRange.JSONReference<ICellControl.JSON>[];
|
|
1479
|
+
/**
|
|
1480
|
+
* The sparkline groups. Each group's ranges pair by position with the areas of its `data`.
|
|
1481
|
+
*/
|
|
1482
|
+
sparklineGroups?: IRange.JSONReference<ISparklineGroup.JSON>[];
|
|
1466
1483
|
movables?: IMovable.JSON[];
|
|
1467
1484
|
/**
|
|
1468
1485
|
* The sheet's VBA code name. Absent when it has none.
|
|
@@ -20,6 +20,7 @@ import { CellStyleUpdater } from './style/SheetCellStyle';
|
|
|
20
20
|
import { ICalcGrid } from '../calculation/grid';
|
|
21
21
|
import { IConditionalFormat } from '../conditionalFormat';
|
|
22
22
|
import { ICellControl } from '../cellControl/ICellControl';
|
|
23
|
+
import { ISparklineGroup } from '../sparkline/ISparklineGroup';
|
|
23
24
|
import { PivotLabelInset } from '../pivot/_PivotControls';
|
|
24
25
|
/**
|
|
25
26
|
* CellModifiers with all functions removed and all properties set and a type.
|
|
@@ -238,6 +239,8 @@ export declare class SheetCell implements ICell {
|
|
|
238
239
|
getConditionalDecorations(): Readonly<IConditionalFormat.Decorations>;
|
|
239
240
|
/** {@inheritDoc ICell.getControl} */
|
|
240
241
|
getControl(): ICellControl | null;
|
|
242
|
+
/** {@inheritDoc ICell.getSparkline} */
|
|
243
|
+
getSparkline(): ISparklineGroup.ISparkline | null;
|
|
241
244
|
/** {@inheritDoc ICell.getProtection} */
|
|
242
245
|
getProtection(): ICellProtection;
|
|
243
246
|
/** {@inheritDoc ICell.getTextOverflow} */
|
|
@@ -3,6 +3,8 @@ import { Size, RunCoords } from '@sheetxl/utils';
|
|
|
3
3
|
import { ITransaction } from '../transaction';
|
|
4
4
|
import { IListener } from '../listener';
|
|
5
5
|
import { ICell } from '../cell';
|
|
6
|
+
import { ISparklineGroup } from '../sparkline/ISparklineGroup';
|
|
7
|
+
import { ISparklineGroupCollection } from '../sparkline/ISparklineGroupCollection';
|
|
6
8
|
import { ICellRange, ICellRegions, ICellRanges, ICellHeaderRange } from '../cellRange';
|
|
7
9
|
import { IComment, ICommentCollection } from '../comment';
|
|
8
10
|
import { ICellStyle } from '../style';
|
|
@@ -348,6 +350,10 @@ export declare class SheetRange implements ICellRange {
|
|
|
348
350
|
getControls(options?: ICellRange.GetItemsOptions<ICellControlCollection.GetItemsOptions>): ICellControl[];
|
|
349
351
|
/** {@inheritDoc ICellRange.setControl} */
|
|
350
352
|
setControl(control: ICellControl.JSON | null, options?: ITransaction.OperationOptions): this;
|
|
353
|
+
/** {@inheritDoc ICellRange.getSparklineGroups} */
|
|
354
|
+
getSparklineGroups(options?: ICellRange.GetItemsOptions<ISparklineGroupCollection.GetItemsOptions>): ISparklineGroup[];
|
|
355
|
+
/** {@inheritDoc ICellRange.setSparkline} */
|
|
356
|
+
setSparkline(data: ICellRange.Address | null, properties?: ISparklineGroup.Modifiers, options?: ITransaction.OperationOptions): ISparklineGroup | null;
|
|
351
357
|
/** {@inheritDoc ICellRange.getDataValidations} */
|
|
352
358
|
getDataValidations(options?: ICellRange.GetItemsOptions<IDataValidationCollection.GetItemsOptions>): IDataValidation[];
|
|
353
359
|
/** {@inheritDoc ICellRange.getComments} */
|
|
@@ -50,6 +50,8 @@ import { IDataValidationCollection, IDataValidation } from '../dataValidation';
|
|
|
50
50
|
import { DataValidation } from '../dataValidation/DataValidation';
|
|
51
51
|
import { ProtectedRange } from '../protectedRange/ProtectedRange';
|
|
52
52
|
import { CellControl } from '../cellControl/CellControl';
|
|
53
|
+
import { ISparklineGroup, ISparklineGroupCollection } from '../sparkline';
|
|
54
|
+
import { SparklineGroup } from '../sparkline/SparklineGroup';
|
|
53
55
|
import { Comment } from '../comment/Comment';
|
|
54
56
|
import { NoteMovable } from '../comment/NoteMovable';
|
|
55
57
|
import { NoteLayout } from '../comment/_NoteBox';
|
|
@@ -81,6 +83,7 @@ import { ICalculation } from '../calculation';
|
|
|
81
83
|
import { ICalcGrid } from '../calculation/grid';
|
|
82
84
|
import { SpillEntry } from '../calculation/spatial';
|
|
83
85
|
import { SheetCellOptions } from './SheetCell';
|
|
86
|
+
import * as SparklineRanges from '../sparkline/SparklineRanges';
|
|
84
87
|
import * as _SheetFilterUtils from './_SheetFilterUtils';
|
|
85
88
|
/** The font colors a workbook writes its roles in, and a key that compares by content. */
|
|
86
89
|
interface WorkbookRoleColors {
|
|
@@ -228,6 +231,7 @@ export declare class Worksheet implements IWorksheet {
|
|
|
228
231
|
protected _dataValidations: IDataValidationCollection;
|
|
229
232
|
protected _protectedRanges: IProtectedRangeCollection;
|
|
230
233
|
protected _cellControls: ICellControlCollection;
|
|
234
|
+
protected _sparklineGroups: ISparklineGroupCollection;
|
|
231
235
|
protected _comments: ICommentCollection;
|
|
232
236
|
protected _movables: IMovableCollection;
|
|
233
237
|
protected _charts: IChartCollection;
|
|
@@ -406,6 +410,7 @@ export declare class Worksheet implements IWorksheet {
|
|
|
406
410
|
filteredTables: () => ITable[];
|
|
407
411
|
setHyperlinks: (ranges: readonly ISpatialMap.Entry<IHyperlink.Update>[], defaultUpdate?: IHyperlink.Update, options?: ITransaction.OperationOptions) => void;
|
|
408
412
|
setCellControl: (address: ICellRanges.Address, control: ICellControl.JSON | null, options?: ITransaction.OperationOptions) => ICellControl | null;
|
|
413
|
+
setSparkline: (address: ICellRanges.Address, data: ICellRange.Address, modifiers?: ISparklineGroup.Modifiers | null, options?: ITransaction.OperationOptions) => ISparklineGroup;
|
|
409
414
|
setErrorIgnored: (ranges: readonly IRange.Coords[], check: ICell.ErrorCheck, ignored: boolean, options?: ITransaction.OperationOptions) => void;
|
|
410
415
|
setComments: (ranges: readonly ISpatialMap.Entry<IComment.Update>[], comments?: IComment.Update | IComment.JSON, options?: ITransaction.OperationOptions) => void;
|
|
411
416
|
getBoundsAtCoords: (coords: IRange.Coords) => Bounds;
|
|
@@ -431,6 +436,7 @@ export declare class Worksheet implements IWorksheet {
|
|
|
431
436
|
formulas: unknown;
|
|
432
437
|
epoch: number;
|
|
433
438
|
roleColors: string;
|
|
439
|
+
reads: unknown;
|
|
434
440
|
findings: AnomalyFindings;
|
|
435
441
|
} | null;
|
|
436
442
|
/**
|
|
@@ -440,6 +446,19 @@ export declare class Worksheet implements IWorksheet {
|
|
|
440
446
|
* @internal
|
|
441
447
|
*/
|
|
442
448
|
protected _getAnomalyFindings(roleColors?: WorkbookRoleColors): AnomalyFindings;
|
|
449
|
+
/** The cells of this sheet the other sheets read, and the formulas they were read from; see {@link _getForeignReads}. */
|
|
450
|
+
protected _foreignReads: {
|
|
451
|
+
sheets: readonly Worksheet[];
|
|
452
|
+
formulas: readonly unknown[];
|
|
453
|
+
map: ISpatialMap<boolean>;
|
|
454
|
+
} | null;
|
|
455
|
+
/**
|
|
456
|
+
* The cells of this sheet that the workbook's other sheets' formulas read, the reads
|
|
457
|
+
* `unreferencedInput` subtracts. Derived from the other sheets' formula partitions and kept
|
|
458
|
+
* until one of them changes.
|
|
459
|
+
* @internal
|
|
460
|
+
*/
|
|
461
|
+
protected _getForeignReads(): ISpatialMap<boolean>;
|
|
443
462
|
/** This worksheet and the workbook's others, very hidden included. */
|
|
444
463
|
protected _getWorkbookSheets(): Worksheet[];
|
|
445
464
|
/** The workbook's role colors and the sheets' sets they were the union of; see {@link _getWorkbookRoleColors}. */
|
|
@@ -547,6 +566,7 @@ export declare class Worksheet implements IWorksheet {
|
|
|
547
566
|
assertContentEditable: (ranges: readonly IRange.Coords[], viaRanges?: boolean) => boolean;
|
|
548
567
|
isMoveRuled: () => boolean;
|
|
549
568
|
getDefaultShiftAxis: (coords?: IRange.Coords) => IRange.Axis;
|
|
569
|
+
getName: () => string;
|
|
550
570
|
processLayoutChange: () => void;
|
|
551
571
|
/** The movables' by-model index as a shift left it, or `null` if the shift moved none. */
|
|
552
572
|
takeShiftedMovableModels: () => Map<IMovable, ISpatialMap.Entry<MovableEntry>> | null;
|
|
@@ -670,6 +690,7 @@ export declare class Worksheet implements IWorksheet {
|
|
|
670
690
|
filteredTables: () => ITable[];
|
|
671
691
|
setHyperlinks: (ranges: readonly ISpatialMap.Entry<IHyperlink.Update>[], defaultUpdate?: IHyperlink.Update, options?: ITransaction.OperationOptions) => void;
|
|
672
692
|
setCellControl: (address: ICellRanges.Address, control: ICellControl.JSON | null, options?: ITransaction.OperationOptions) => ICellControl | null;
|
|
693
|
+
setSparkline: (address: ICellRanges.Address, data: ICellRange.Address, modifiers?: ISparklineGroup.Modifiers | null, options?: ITransaction.OperationOptions) => ISparklineGroup;
|
|
673
694
|
setErrorIgnored: (ranges: readonly IRange.Coords[], check: ICell.ErrorCheck, ignored: boolean, options?: ITransaction.OperationOptions) => void;
|
|
674
695
|
setComments: (ranges: readonly ISpatialMap.Entry<IComment.Update>[], comments?: IComment.Update | IComment.JSON, options?: ITransaction.OperationOptions) => void;
|
|
675
696
|
getBoundsAtCoords: (coords: IRange.Coords) => Bounds;
|
|
@@ -1276,6 +1297,26 @@ export declare class Worksheet implements IWorksheet {
|
|
|
1276
1297
|
node: ListenerAnchor;
|
|
1277
1298
|
remove: IListener.Remove;
|
|
1278
1299
|
};
|
|
1300
|
+
/**
|
|
1301
|
+
* Removes a listener's node and its callback, with the twins a cut to another sheet made of it.
|
|
1302
|
+
* @internal
|
|
1303
|
+
*/
|
|
1304
|
+
protected _dropListenerEntry(entry: ListenerNodeEntry): void;
|
|
1305
|
+
/**
|
|
1306
|
+
* After a cut of `from` on this sheet to `to` on `sheetTo`: a listener whose ranges the cut
|
|
1307
|
+
* encloses goes with them, as a twin node on `sheetTo` written in the cut's commit (so undo and
|
|
1308
|
+
* redo carry both sheets' maps together, and the twin that is not in a snapshot stays quiet). One
|
|
1309
|
+
* the cut takes only part of stays, and is told the move if it asked for the edits. A sparkline
|
|
1310
|
+
* group whose data the cut took reads it on `sheetTo`.
|
|
1311
|
+
* @internal
|
|
1312
|
+
*/
|
|
1313
|
+
protected _moveReferencesToSheet(sheetTo: Worksheet, from: IRange.Coords, to: IRange.Coords): void;
|
|
1314
|
+
/**
|
|
1315
|
+
* A listener from `fromSheet`, its ranges cut here to `coords`: a node in this sheet's map, in the
|
|
1316
|
+
* current commit, delivering to the same callback. Its first delivery is the move.
|
|
1317
|
+
* @internal
|
|
1318
|
+
*/
|
|
1319
|
+
protected _adoptListenerNode(entry: ListenerNodeEntry, coords: readonly IRange.Coords[], previous: readonly IRange.Coords[], from: IRange.Coords, to: IRange.Coords, fromSheet: Worksheet): ListenerNodeEntry;
|
|
1279
1320
|
/**
|
|
1280
1321
|
* Register a watch: an expression kept evaluated over a range.
|
|
1281
1322
|
*
|
|
@@ -1475,6 +1516,8 @@ export declare class Worksheet implements IWorksheet {
|
|
|
1475
1516
|
/** {@inheritDoc Sheet._notifyConditionalFormatsChange} @internal */
|
|
1476
1517
|
protected _notifyCellControlsChange(): void;
|
|
1477
1518
|
/** {@inheritDoc Sheet._notifyConditionalFormatsChange} @internal */
|
|
1519
|
+
protected _notifySparklineGroupsChange(): void;
|
|
1520
|
+
/** {@inheritDoc Sheet._notifyConditionalFormatsChange} @internal */
|
|
1478
1521
|
protected _notifyCommentsChange(): void;
|
|
1479
1522
|
/**
|
|
1480
1523
|
* Presents one of the sheet's own events as a collection's `onCollectionChange`, and the
|
|
@@ -1485,7 +1528,7 @@ export declare class Worksheet implements IWorksheet {
|
|
|
1485
1528
|
* it. Forwarding, rather than a second emitter, is what keeps the two from drifting apart.
|
|
1486
1529
|
* @internal
|
|
1487
1530
|
*/
|
|
1488
|
-
protected _forwardCollectionListeners(key: 'onTablesChange' | 'onConditionalFormatsChange' | 'onDataValidationsChange' | 'onProtectedRangesChange' | 'onCellControlsChange' | 'onCommentsChange', collection: () => ICollection<any>): (listeners: ICollection.IListeners, options?: IListener.Options) => IListener.Remove;
|
|
1531
|
+
protected _forwardCollectionListeners(key: 'onTablesChange' | 'onConditionalFormatsChange' | 'onDataValidationsChange' | 'onProtectedRangesChange' | 'onCellControlsChange' | 'onSparklineGroupsChange' | 'onCommentsChange', collection: () => ICollection<any>): (listeners: ICollection.IListeners, options?: IListener.Options) => IListener.Remove;
|
|
1489
1532
|
/** {@inheritDoc IWorksheet.addListeners} */
|
|
1490
1533
|
addListeners(listeners: IWorksheet.IListeners, options?: IListener.Options): IListener.Remove;
|
|
1491
1534
|
/** @internal */
|
|
@@ -2055,6 +2098,8 @@ export declare class Worksheet implements IWorksheet {
|
|
|
2055
2098
|
getProtectedRanges(): IProtectedRangeCollection;
|
|
2056
2099
|
/** {@inheritDoc IWorksheet.getCellControls} */
|
|
2057
2100
|
getCellControls(): ICellControlCollection;
|
|
2101
|
+
/** {@inheritDoc IWorksheet.getSparklineGroups} */
|
|
2102
|
+
getSparklineGroups(): ISparklineGroupCollection;
|
|
2058
2103
|
/** {@inheritDoc IWorksheet.getComments} */
|
|
2059
2104
|
getComments(): ICommentCollection;
|
|
2060
2105
|
/** @deprecated Use {@link IWorksheet.getConditionalFormats} */
|
|
@@ -2130,6 +2175,49 @@ export declare class Worksheet implements IWorksheet {
|
|
|
2130
2175
|
* @internal
|
|
2131
2176
|
*/
|
|
2132
2177
|
protected _addCellControl(address: ICellRanges.Address, control: ICellControl.JSON, options?: ITransaction.OperationOptions): ICellControl;
|
|
2178
|
+
/**
|
|
2179
|
+
* Adds a sparkline group over `ranges`, each a location and the data its cells read, taking
|
|
2180
|
+
* those cells out of any group they were in: a cell has one sparkline.
|
|
2181
|
+
* @internal
|
|
2182
|
+
*/
|
|
2183
|
+
_addSparklineGroup(ranges: readonly SparklineRanges.SparklineRange[], properties: Readonly<ISparklineGroup.Properties>, options?: ITransaction.OperationOptions): ISparklineGroup | null;
|
|
2184
|
+
/**
|
|
2185
|
+
* Draws a sparkline in each cell of `address` from its share of `data`, as one new group: the
|
|
2186
|
+
* write behind `ICellRange.setSparkline` and `ISparklineGroupCollection.add`. Pairs and refuses as
|
|
2187
|
+
* Excel's `SparklineGroups.Add` does (`SparklineRanges.pairData`).
|
|
2188
|
+
* @internal
|
|
2189
|
+
*/
|
|
2190
|
+
protected _setSparkline(address: ICellRanges.Address, data: ICellRange.Address, modifiers?: ISparklineGroup.Modifiers | null, options?: ITransaction.OperationOptions): ISparklineGroup;
|
|
2191
|
+
private _refuseSparklinePairing;
|
|
2192
|
+
/** The prefix data on `range`'s sheet is written with: none for this sheet. */
|
|
2193
|
+
private _sparklinePrefix;
|
|
2194
|
+
/**
|
|
2195
|
+
* Gives `group` new cells, new data or both, as Excel's Edit Sparklines dialog does: the write
|
|
2196
|
+
* behind `ISparklineGroup.setRanges` and `setDataRanges`. Pairs as `SparklineRanges.pairAreas`; the
|
|
2197
|
+
* new cells leave any other group they were in. One undo entry.
|
|
2198
|
+
* @internal
|
|
2199
|
+
*/
|
|
2200
|
+
protected _modifySparklineGroup(group: SparklineGroup, location: ICellRanges.Address | null, data: ICellRanges.Address | null, options?: ITransaction.OperationOptions): void;
|
|
2201
|
+
/**
|
|
2202
|
+
* The areas `data` names, each one area as {@link _sparklineDataRange} reads it: a union is
|
|
2203
|
+
* split at its commas, each area on its own sheet.
|
|
2204
|
+
*/
|
|
2205
|
+
private _sparklineDataAreas;
|
|
2206
|
+
/**
|
|
2207
|
+
* The one area `data` names: bare on this sheet, qualified on its sheet, a defined name as the
|
|
2208
|
+
* cells it names now. Refuses what Excel's `Add` refuses: a union and a table's structured
|
|
2209
|
+
* reference.
|
|
2210
|
+
*/
|
|
2211
|
+
private _sparklineDataRange;
|
|
2212
|
+
/**
|
|
2213
|
+
* Puts one group over `coords`, each reading `data` (paired by position, as the JSON states
|
|
2214
|
+
* them), taking those cells out of any group they were in.
|
|
2215
|
+
*
|
|
2216
|
+
* @param ruled Whether the cells' protection allowance has already ruled, so the commit-time
|
|
2217
|
+
* check is skipped.
|
|
2218
|
+
* @internal
|
|
2219
|
+
*/
|
|
2220
|
+
private _putSparklineGroup;
|
|
2133
2221
|
/**
|
|
2134
2222
|
* Makes `control` the control of every cell of `address`, or removes the cells' controls when
|
|
2135
2223
|
* it is `null`. The write behind `ICellRange.setControl` and `ICellControlCollection.add`.
|
|
@@ -2279,6 +2367,11 @@ export declare class Worksheet implements IWorksheet {
|
|
|
2279
2367
|
protected _createProtectedRanges(protectedRanges: IAnchoredMap<IProtectedRange, IProtectedRange.JSON>, key: keyof State, refs: IRange.JSONReference<IProtectedRange.JSON>[], createModel: (options: ProtectedRange.ConstructorOptions) => IProtectedRange, addListeners?: (model: IProtectedRange) => IListener.Remove): IAnchoredMap<IProtectedRange, IProtectedRange.JSON>;
|
|
2280
2368
|
/** @internal */
|
|
2281
2369
|
protected _createCellControls(cellControls: IAnchoredMap<ICellControl, ICellControl.JSON>, key: keyof State, refs: IRange.JSONReference<ICellControl.JSON>[], createModel: (options: CellControl.ConstructorOptions) => ICellControl): IAnchoredMap<ICellControl, ICellControl.JSON>;
|
|
2370
|
+
/**
|
|
2371
|
+
* Loads sparkline groups into their anchored map.
|
|
2372
|
+
* @internal
|
|
2373
|
+
*/
|
|
2374
|
+
protected _createSparklineGroups(sparklineGroups: IAnchoredMap<ISparklineGroup, ISparklineGroup.JSON>, refs: IRange.JSONReference<ISparklineGroup.JSON>[]): IAnchoredMap<ISparklineGroup, ISparklineGroup.JSON>;
|
|
2282
2375
|
/**
|
|
2283
2376
|
* Loads the pivot tables into their anchored map, each anchored where its part says it sits.
|
|
2284
2377
|
* The map moves and deletes them with structural edits; the grid's spill of a table rules on
|
|
@@ -2397,6 +2490,8 @@ interface RangeEventOptions extends NotifierOptions {
|
|
|
2397
2490
|
* @defaultValue `#REF!`
|
|
2398
2491
|
*/
|
|
2399
2492
|
invalidError?: string;
|
|
2493
|
+
/** The edits an `'address'` event carries, for a listener that asked for them. */
|
|
2494
|
+
edits?: readonly ICellRange.Edit[];
|
|
2400
2495
|
}
|
|
2401
2496
|
interface ListenerNodeEntry {
|
|
2402
2497
|
node: ListenerAnchor;
|
|
@@ -2417,6 +2512,13 @@ interface ListenerNodeEntry {
|
|
|
2417
2512
|
watch?: WatchAnchor.Handlers;
|
|
2418
2513
|
/** The batch a participant was added through: it is told as each step of that batch is made. */
|
|
2419
2514
|
batch?: BatchHandle | null;
|
|
2515
|
+
/** The same listener on other sheets, made by cuts that took its ranges there (and back). */
|
|
2516
|
+
twins?: {
|
|
2517
|
+
sheet: Worksheet;
|
|
2518
|
+
entry: ListenerNodeEntry;
|
|
2519
|
+
}[];
|
|
2520
|
+
/** Removed: its callback is gone, and so are its twins'. */
|
|
2521
|
+
dropped?: boolean;
|
|
2420
2522
|
}
|
|
2421
2523
|
/**
|
|
2422
2524
|
* A run of formula cells with the references they inherit a number format from, relative to the
|