@sheetxl/sdk 0.8.0-beta.16 → 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.
Files changed (110) hide show
  1. package/browser/esm/{B6BdiHigbUdbZp3J.mjs → -P0fym6eh9hn9row.mjs} +2 -2
  2. package/browser/esm/{DlVnybrgwZWxWN3_.mjs → -nOfWMHdlTb9ShjF.mjs} +9 -9
  3. package/browser/esm/{CMChv-fCFh68VQQt.mjs → 0Mw5Ew_7tAiWgc5J.mjs} +14 -14
  4. package/browser/esm/{JV9Szh5qTssjxJoE.mjs → 1ktaHvjuYL6stU4C.mjs} +1 -1
  5. package/browser/esm/{HV0FkJ6k3Ils318J.mjs → B3ifnlsuky2L9HmB.mjs} +33 -33
  6. package/browser/esm/{BtNuoQIrrHw_jnbJ.mjs → B67q5ZrwyKvm3d6W.mjs} +3 -3
  7. package/browser/esm/{KpuD1kEcWB7cT0VM.mjs → BQSd_URWugiyNoNj.mjs} +2 -2
  8. package/browser/esm/{ad9PX897hYE4Srkc.mjs → BWHHWC6H2JgG11Kq.mjs} +2 -2
  9. package/browser/esm/{BlMYYQZP-QM-iBHz.mjs → BYbb2weYQCb_7KI3.mjs} +21 -21
  10. package/browser/esm/{WLlpmgLN5OVLoLrC.mjs → B_hrmyuWaH5VIFpV.mjs} +2 -2
  11. package/browser/esm/{d_t-7d5BD1AdHg3u.mjs → Bql31KGUYo0SCMwZ.mjs} +392 -392
  12. package/browser/esm/{D807piM0VSokWz-L.mjs → BtVpErObXYKJCwHG.mjs} +1 -1
  13. package/browser/esm/{BWY1qiidTUBVPJoD.mjs → By7_c19Kv2YQaDVF.mjs} +475 -475
  14. package/browser/esm/{Zp5-cTJ0Llb6EfGi.mjs → C6M_XM08QtHuaInQ.mjs} +3 -3
  15. package/browser/esm/{BxYuRTSF9ykc-Tpz.mjs → CBHwju4PYiv85_jD.mjs} +2 -2
  16. package/browser/esm/{D-iHJ3q4nwOLcn1D.mjs → CJhYhZtsey3OnWKd.mjs} +1 -1
  17. package/browser/esm/{Dx9Fya60meMpuHqm.mjs → CQlxAbhdxgfu0ERF.mjs} +1 -1
  18. package/browser/esm/{C3JOjQwdG9kAig7i.mjs → CVXOtvee4oFImGyR.mjs} +504 -504
  19. package/browser/esm/{9YWdxmSjzLN4j_ts.mjs → CXQLYHAhE5MLKxZ4.mjs} +37 -37
  20. package/browser/esm/{CUu3zeHqcwMRYiov.mjs → CZiJYw94Yt7xslXS.mjs} +1 -1
  21. package/browser/esm/{BxFzcCYhvo9NXFjC.mjs → ChRUNekYurtOtrP1.mjs} +113 -113
  22. package/browser/esm/{dwGdnbV-CykjNrlm.mjs → CnobgPLHEsTPTFY5.mjs} +1 -1
  23. package/browser/esm/{WR146UAqrsUsL39e.mjs → CxNnMvwtOf76r7yY.mjs} +1 -1
  24. package/browser/esm/{U4FL-QeC0bRUhTEo.mjs → CzmmdfrOYDUGx-Yh.mjs} +1 -1
  25. package/browser/esm/{4MbBwfmW2hDXk9_w.mjs → D2P43UD6TGSXErhr.mjs} +2 -2
  26. package/browser/esm/{Bf80epSsm_RyAOb9.mjs → DH8NuKmZAC9EaqwP.mjs} +18 -18
  27. package/browser/esm/{WcHfawW2lkTHtWUd.mjs → DJuiV0Y8olnwuqB-.mjs} +21 -21
  28. package/browser/esm/{DcB52JPBPmkc3l1m.mjs → DKFaQ2QOyUPCk0sD.mjs} +3 -3
  29. package/browser/esm/{CRbQATfI0yZxe1kX.mjs → DLR8g1DkooIBl8S1.mjs} +2 -2
  30. package/browser/esm/{BF_QwkZ_hs2rFoTT.mjs → DNAXbbB8DGE2xeHy.mjs} +2 -2
  31. package/browser/esm/{BMo2_9Ul36IwRm3S.mjs → DQTUUXcERWI4l0to.mjs} +2 -2
  32. package/browser/esm/{C2PvZwqK-uvsugVS.mjs → DpFowFtk9AeU-89B.mjs} +1 -1
  33. package/browser/esm/{r-o0UCm7KtluNmyK.mjs → DyRVg5YJn7voOO6z.mjs} +2 -2
  34. package/browser/esm/{DW3oQ39IF0bsc_lm.mjs → Pn5Jc-47dk16sYQ4.mjs} +1 -1
  35. package/browser/esm/{BfoE6Dn_GQCIkQD3.mjs → _WWjW2f-YW-AVqAL.mjs} +1 -1
  36. package/browser/esm/{CkZoDPUCK5jMUaeJ.mjs → _lh_Rr5SwLthmbmu.mjs} +7924 -5938
  37. package/browser/esm/index.mjs +367 -366
  38. package/browser/esm/{DvVhatd0J1ch3OCO.mjs → mecFApGwMvcIzlpd.mjs} +36 -36
  39. package/browser/esm/{BqT-ASHP0NVSUUnY.mjs → n4LOSiYtWTzqQa4w.mjs} +661 -661
  40. package/{node/esm/CgdNA3B_GFG_yJiN.mjs → browser/esm/tJB0V8fKbukOYt9U.mjs} +2 -2
  41. package/browser/esm/{C5x0EzqElYGTiTQc.mjs → yRhetuEQfV7moa4B.mjs} +1 -1
  42. package/browser/esm/{e69NcYnKMLnAmqyA.mjs → ybFoQ6IijUJnBeCF.mjs} +1 -1
  43. package/node/esm/{BywIhvYkWk2o7MSW.mjs → 0313aQKBU4DE3v2j.mjs} +1 -1
  44. package/node/esm/{C884edhUf9yMqpPp.mjs → 3gjEEXV2aSt7cKeD.mjs} +1 -1
  45. package/node/esm/{BfPBiAgVmWhuFgFP.mjs → 3smtwEJ0ASF0tKBY.mjs} +2 -2
  46. package/node/esm/{_RIAmJI98l6bIFfZ.mjs → 4k3KKByrUw2Wr2TX.mjs} +1 -1
  47. package/node/esm/{Bknw7zWZhl2-w1pi.mjs → 90jp-mCVEr43zZTj.mjs} +2 -2
  48. package/node/esm/{DfWc3nW_Z_qqc_Wf.mjs → BAEmzj0gb8Cbgz7p.mjs} +3293 -3293
  49. package/node/esm/{CERNLhFrAwtu_p-q.mjs → BBC5dL9bXzOrQDGY.mjs} +1 -1
  50. package/node/esm/{CDHY-0OyQ9348Brb.mjs → BV0cJ_YP_0qzJuPt.mjs} +180 -180
  51. package/node/esm/{DvtyKKzOnoOM80NB.mjs → BcxcYoF_4GFL7Zkl.mjs} +15 -15
  52. package/node/esm/{DOt3t-13tsnM7Fj6.mjs → BesaVk0x7UyfLDk2.mjs} +1 -1
  53. package/node/esm/{Dhv9JymnXqcF54oo.mjs → C-LmDC9oNcbENOK1.mjs} +1 -1
  54. package/node/esm/{BvIPsPiHhMclZ1kH.mjs → CDkUQn5AwYGomlsT.mjs} +36 -36
  55. package/node/esm/{BH8J6vKSO5zI_TWo.mjs → CE4I5qfVmUBf7mED.mjs} +1 -1
  56. package/node/esm/{C_fYuynP2a_70WdL.mjs → CO0UDgbkHGwyTfev.mjs} +1 -1
  57. package/node/esm/{DgnwKbUEyQN5_gWT.mjs → CTWihjVB5uFX7U4j.mjs} +2 -2
  58. package/node/esm/{Cxak8i2NidZ4Uv6v.mjs → CUNaLYCntlclipWu.mjs} +497 -497
  59. package/node/esm/{RTwm9ge1KoPdlBNt.mjs → CY9JqXFJTt5pGhC3.mjs} +1 -1
  60. package/node/esm/{DELfV5HQZo1mInBd.mjs → C_Sqy290v4uzyi1E.mjs} +3 -3
  61. package/node/esm/{BLmdKnkLwkb3wWe6.mjs → Cf-cK3yPe9bjK6o2.mjs} +561 -561
  62. package/node/esm/{CVPieTgKCwkL21nD.mjs → CpvUwhAeDmdEpdR-.mjs} +10662 -8680
  63. package/{browser/esm/C_jLGkFemj55_BP3.mjs → node/esm/Crhg3srH-O5sJERh.mjs} +2 -2
  64. package/node/esm/{CJDV8P3hI8lu--3Z.mjs → Cx2U91jhiTDz600y.mjs} +116 -116
  65. package/node/esm/{BZSxu_ZqX8-Uczzn.mjs → CyWWKan_uk4dHZ6P.mjs} +1 -1
  66. package/node/esm/{CLtUMJfKsy4SevWE.mjs → D48MjKzkj37XsVm1.mjs} +2 -2
  67. package/node/esm/{kaiXmn0AA5WDsLPo.mjs → D7c0zfLVoG7EEln5.mjs} +43 -43
  68. package/node/esm/{A3PEHO1HJvkHfb5n.mjs → D8J4JmOPwG_Yr2GD.mjs} +1 -1
  69. package/node/esm/{By2TFKOjA1HekZap.mjs → D91qb21TrJX98Rw8.mjs} +3 -3
  70. package/node/esm/{D88A3UpCyGRjcX3U.mjs → D9D2NyyKbWXpTj5I.mjs} +2 -2
  71. package/node/esm/{mTIhoz1gEcaEm7s1.mjs → DBF7pIpitcmhi65H.mjs} +2 -2
  72. package/node/esm/{KDGrIa9R5XzWfjM2.mjs → DLPVrV723TSxkXqL.mjs} +1 -1
  73. package/node/esm/{Cs3ibv6YHCDwLRlk.mjs → DWsnb-a-9dfRn5jJ.mjs} +24 -24
  74. package/node/esm/{B4WUGzJBkQu7BXRm.mjs → Dj1pybJRqeZiP1Z6.mjs} +1 -1
  75. package/node/esm/{DBIUe2BC9xU7qMHR.mjs → DtNJOImWtsXVrQps.mjs} +2 -2
  76. package/node/esm/{5OfKfTRX2_y2NwpU.mjs → DxROQlX1KHLb9tHS.mjs} +1 -1
  77. package/node/esm/{446KYBjJQa8g-8Gg.mjs → dp4LxzOEkfTbVX_1.mjs} +21 -21
  78. package/node/esm/{C3zyhnMwQ2hRQBz7.mjs → ee_DgHTffiVTOiU2.mjs} +21 -21
  79. package/node/esm/{CFkX_Cn6avQqQiVC.mjs → fMFapG4AGMQKX8c5.mjs} +33 -33
  80. package/node/esm/index.mjs +545 -544
  81. package/node/esm/{CKwiipdPJGzAiPjg.mjs → jmElgIMAkpc2Ab1m.mjs} +1 -1
  82. package/node/esm/{bIGdvfpnijWeCac6.mjs → yVJ2lEYZob1gwiRZ.mjs} +14 -14
  83. package/package.json +6 -6
  84. package/resources/locales/de/model.msg.json +15 -0
  85. package/resources/locales/en/model.msg.json +15 -0
  86. package/types/scripting-api.json +11445 -11299
  87. package/types/scripting-enums.json +22 -1
  88. package/types/scripting.d.ts +623 -0
  89. package/types/src/address/index.d.ts +2 -0
  90. package/types/src/anomalies/_Anomalies.d.ts +34 -0
  91. package/types/src/anomalies/_CompletenessChecks.d.ts +32 -0
  92. package/types/src/cell/ICell.d.ts +36 -1
  93. package/types/src/cellRange/ICellRange.d.ts +106 -0
  94. package/types/src/index.d.ts +1 -0
  95. package/types/src/license/runtime.browser.d.ts +3 -1
  96. package/types/src/sheet/IWorksheet.d.ts +17 -0
  97. package/types/src/sheet/SheetCell.d.ts +3 -0
  98. package/types/src/sheet/SheetRange.d.ts +6 -0
  99. package/types/src/sheet/Worksheet.d.ts +103 -1
  100. package/types/src/sheet/_ListenerAnchor.d.ts +14 -0
  101. package/types/src/sheet/_SheetStateTypes.d.ts +13 -0
  102. package/types/src/sparkline/ISparklineGroup.d.ts +338 -0
  103. package/types/src/sparkline/ISparklineGroupCollection.d.ts +68 -0
  104. package/types/src/sparkline/SparklineGroup.d.ts +271 -0
  105. package/types/src/sparkline/SparklineGroupCollection.d.ts +25 -0
  106. package/types/src/sparkline/SparklineRanges.d.ts +195 -0
  107. package/types/src/sparkline/index.d.ts +4 -0
  108. package/types/src/sparkline/layout/SparklineLayout.d.ts +71 -0
  109. package/types/src/sparkline/layout/_layoutSparkline.d.ts +42 -0
  110. package/types/src/sparkline/layout/index.d.ts +2 -0
@@ -136,6 +136,8 @@ declare global {
136
136
  const refToRun: <T = any>(ref: IRange.JSONReference<T>, isColumn: boolean) => RunCoordValue<T> | null;
137
137
  /** {@inheritDoc runToRef} */
138
138
  const runsToRefs: <T = any>(runs: readonly Readonly<RunCoordValue<T>>[], isColumn: boolean) => IRange.JSONReferenceEntry<T>[];
139
+ /** Splits an address list at its `,` separators, skipping those in a quoted sheet name or brackets. */
140
+ const splitAddressList: (address: string) => string[];
139
141
  /** {@inheritDoc refToRun} */
140
142
  const refsToRuns: <T = any>(refs: readonly IRange.JSONReference<T>[], isColumn: boolean) => RunCoordValue<T>[];
141
143
  }
@@ -6990,6 +6992,15 @@ declare global {
6990
6992
  * checkbox cell holding `2` has a control and draws `2`.
6991
6993
  */
6992
6994
  getControl(): ICellControl | null;
6995
+ /**
6996
+ * Returns the cell's sparkline, or `null` when it has none.
6997
+ *
6998
+ * @remarks
6999
+ * The sparkline is the cell's view of its group: what it draws
7000
+ * ({@link ISparklineGroup.ISparkline.getDataRange}) and how ({@link ISparklineGroup.ISparkline.getGroup}).
7001
+ * A cell has at most one. It is drawn over the cell's value, which it leaves as it is.
7002
+ */
7003
+ getSparkline(): ISparklineGroup.ISparkline | null;
6993
7004
  /**
6994
7005
  * Returns `true` if the cell contains a value.
6995
7006
  *
@@ -7403,6 +7414,14 @@ declare global {
7403
7414
  * `range.getDataValidation().clear()`.
7404
7415
  */
7405
7416
  readonly DataValidations: "dataValidations";
7417
+ /**
7418
+ * Represents the sparklines drawn in the cells.
7419
+ * @remarks
7420
+ * A clear takes the cells out of their sparkline groups; a group left with no cell is
7421
+ * deleted. Excel's Sparkline > Clear. Clear Contents and Clear Formats leave a sparkline, as in
7422
+ * Excel; Clear All removes it.
7423
+ */
7424
+ readonly Sparklines: "sparklines";
7406
7425
  };
7407
7426
  type Content = typeof Content[keyof typeof Content];
7408
7427
  /**
@@ -7512,6 +7531,10 @@ declare global {
7512
7531
  readonly TwinBlockDivergence: "twinBlockDivergence";
7513
7532
  /** A typed number an order of magnitude or more off the numbers typed in its format on the sheet. */
7514
7533
  readonly ScaleOutlier: "scaleOutlier";
7534
+ /** A typed number beside a label that no formula in the workbook reads: an assumption the model never uses. */
7535
+ readonly UnreferencedInput: "unreferencedInput";
7536
+ /** A labeled row with nothing where the rows above and below hold values: a line left out, or a period of it. */
7537
+ readonly RowGap: "rowGap";
7515
7538
  /** A constant typed into a formula — a number, a string or a boolean — and how often the workbook types it. */
7516
7539
  readonly ConstantFrequency: "constantFrequency";
7517
7540
  };
@@ -7551,6 +7574,8 @@ declare global {
7551
7574
  * | `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 |
7552
7575
  * | `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 |
7553
7576
  * | `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 |
7577
+ * | `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 |
7578
+ * | `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 |
7554
7579
  * | `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 |
7555
7580
  *
7556
7581
  * **Runs.** `formula`, `hardcodeInRun` and `styleBreak` are one rule over different layers of
@@ -7606,6 +7631,17 @@ declare global {
7606
7631
  * places in the workbook type it (`uses`) and of how many constant uses (`of`). The rarer the
7607
7632
  * constant, the higher it ranks. A finding's `uses` and `of` change when another sheet changes.
7608
7633
  *
7634
+ * **What is left out.** `unreferencedInput` reads the typed numbers beside a label that no
7635
+ * formula on any sheet reads: an assumption the model never uses, which in a model being built
7636
+ * is the item still to build. A labeled line fires only when none of its numbers is read, so a
7637
+ * historical row whose last period feeds a forecast is data in use; a line of numbers at one
7638
+ * step (years) is a header. The rank is divided by the line's cells: a lone cell is an
7639
+ * assumption, a long row is data. `rowGap` reads a labeled row against the rows above and
7640
+ * below it (within one spacer row): the cells filled in both neighbors and empty here are the
7641
+ * line left out, or its missing periods. A row that is partly filled ranks in full, an empty row
7642
+ * at half, and a row whose label is in a font neither neighbor shares (a heading) at a third.
7643
+ * Both findings change when another sheet starts or stops reading the cell.
7644
+ *
7609
7645
  * A label's position is absolute (`R12C3`), since it stays put whichever cell of a region reads
7610
7646
  * it; its text is the one read at the region's first cell.
7611
7647
  */
@@ -8702,6 +8738,53 @@ declare global {
8702
8738
  * by {@link clear} of formats, and carried by a paste of formats.
8703
8739
  */
8704
8740
  setControl(control: ICellControl.JSON | null, options?: ITransaction.OperationOptions): this;
8741
+ /**
8742
+ * Draws a sparkline in each cell of the range, from its share of `data`, as one new group; `null`
8743
+ * removes the cells' sparklines.
8744
+ *
8745
+ * @param data The cells the sparklines draw: one area, on this sheet when not qualified, or a
8746
+ * defined name for one (read as the cells it names now, as Excel does).
8747
+ * @param properties How they draw. A new group starts as Excel's does: empty cells as gaps,
8748
+ * Excel's colors, and negative points colored for win/loss.
8749
+ * @returns The new group, or `null` for a removal.
8750
+ *
8751
+ * @remarks
8752
+ * Excel's Insert > Sparklines, and VBA's `Range.SparklineGroups.Add(Type, SourceData)`. The range
8753
+ * is the location: one cell, or one row or one column of cells. The cells pair with the data as
8754
+ * Excel pairs them:
8755
+ * - One cell draws all of `data`, which must be one row or one column.
8756
+ * - A column of cells draws a row of `data` each, its first cell the first row: `F2:F4` over
8757
+ * `A2:E4` draws `A2:E2`, `A3:E3`, `A4:E4`.
8758
+ * - A row of cells draws a column each, the same way.
8759
+ *
8760
+ * Refused, as Excel refuses them: a location of several rows and columns, data that is a union
8761
+ * or a table's structured reference, two-dimensional data for one cell, and data whose rows or
8762
+ * columns do not number the cells. Also refused: a row of cells over data that only pairs by
8763
+ * rows, which Excel draws a row each, transposed.
8764
+ *
8765
+ * A cell has one sparkline, so the cells leave any group they were in. Sparklines are drawn over
8766
+ * the cells' values, which stay; refused on a protected sheet unless formatting cells is allowed.
8767
+ *
8768
+ * @example
8769
+ * ```ts
8770
+ * sheet.getRange('F2:F4').setSparkline('A2:E4', { type: 'column', high: true });
8771
+ * sheet.getRange('F2:F4').setSparkline(null);
8772
+ * ```
8773
+ */
8774
+ /**
8775
+ * Returns the {@link ISparklineGroup}s with a sparkline in the range.
8776
+ *
8777
+ * @param options The filters of {@link ISparklineGroupCollection.getItems} without `address`;
8778
+ * this range is the address.
8779
+ *
8780
+ * @remarks
8781
+ * See {@link getConditionalFormats} for the overlap and one-entry-per-item rules, which are the
8782
+ * same for every ranged item lookup. The groups, never one entry per sparkline: a column of a
8783
+ * million sparklines is one group. Ask a cell for its own with {@link ICell.getSparkline}.
8784
+ * VBA's `Range.SparklineGroups`.
8785
+ */
8786
+ getSparklineGroups(options?: ICellRange.GetItemsOptions<ISparklineGroupCollection.GetItemsOptions>): ISparklineGroup[];
8787
+ setSparkline(data: ICellRange.Address | null, properties?: ISparklineGroup.Modifiers, options?: ITransaction.OperationOptions): ISparklineGroup | null;
8705
8788
  /**
8706
8789
  * Returns the {@link IDataValidation}s that overlap the range, in priority order.
8707
8790
  *
@@ -11407,6 +11490,11 @@ declare global {
11407
11490
  * question: ask for both to split a column of checkboxes from the text cells among them.
11408
11491
  */
11409
11492
  readonly CellControl: "cellControl";
11493
+ /**
11494
+ * Cells with a sparkline ({@link IWorksheet.getSparklineGroups}). Regions group by the
11495
+ * sparkline group, so two groups side by side are two regions.
11496
+ */
11497
+ readonly Sparkline: "sparkline";
11410
11498
  /**
11411
11499
  * Cells where an error check fires — what breaks the pattern around it. Regions group by the
11412
11500
  * check and its evidence, so a filled row that breaks the same way is one region; the anchor
@@ -11733,6 +11821,18 @@ declare global {
11733
11821
  * An address rather than a range, because the cells at it now are other cells.
11734
11822
  */
11735
11823
  getPreviousAddress(): string | null;
11824
+ /**
11825
+ * The edits that changed the range's cells, in the order they were made, for an `'address'`
11826
+ * event of a listener that asked for them ({@link ListenerOptions.edits}); empty otherwise.
11827
+ *
11828
+ * @remarks
11829
+ * Where {@link getSource} says where the range landed, these say what happened to its cells on
11830
+ * the way: each band inserted or deleted, and each cut that took some of them. A listener that
11831
+ * keeps something per cell of the range - a reference, a mark - reads these to take each cell
11832
+ * through on its own. An undo or a redo restores a revision rather than repeating the edits,
11833
+ * so it has none.
11834
+ */
11835
+ getEdits(): readonly ICellRange.Edit[];
11736
11836
  /**
11737
11837
  * What happened to the range.
11738
11838
  *
@@ -11779,6 +11879,35 @@ declare global {
11779
11879
  */
11780
11880
  type Trigger = 'data' | 'address' | 'restore';
11781
11881
  }
11882
+ /**
11883
+ * One edit that changed a listened range's cells. See {@link ICellRange.Event.getEdits}.
11884
+ */
11885
+ type Edit = Edit.Shift | Edit.Move;
11886
+ namespace Edit {
11887
+ /**
11888
+ * Cells inserted or deleted: `range` is the band, and `direction` the way the cells beside it
11889
+ * shifted (`Down` or `Right` for an insert, `Up` or `Left` for a delete).
11890
+ */
11891
+ interface Shift {
11892
+ readonly type: 'shift';
11893
+ readonly range: IRange.Coords;
11894
+ readonly direction: IRange.Direction;
11895
+ }
11896
+ /**
11897
+ * Cells cut from `from` to `to`, taking all of the listened range or only some of it.
11898
+ *
11899
+ * @remarks
11900
+ * A cut to another sheet names it as `toSheet`. A listener whose whole range was cut there
11901
+ * goes with it: its source is on that sheet from then on.
11902
+ */
11903
+ interface Move {
11904
+ readonly type: 'move';
11905
+ readonly from: IRange.Coords;
11906
+ readonly to: IRange.Coords;
11907
+ /** The sheet the cells went to, when it is not the sheet they came from. */
11908
+ readonly toSheet?: IWorksheet;
11909
+ }
11910
+ }
11782
11911
  /**
11783
11912
  * Called with what changed at a listened range. See {@link ICellRange.addListener}.
11784
11913
  *
@@ -11843,6 +11972,18 @@ declare global {
11843
11972
  * @defaultValue false
11844
11973
  */
11845
11974
  ignoreAddressChanges?: boolean;
11975
+ /**
11976
+ * Whether an `'address'` event carries the edits that changed the range's cells
11977
+ * ({@link Event.getEdits}).
11978
+ *
11979
+ * @defaultValue false
11980
+ *
11981
+ * @remarks
11982
+ * With it, the listener is also told of a cut that takes only some of its cells: the range
11983
+ * itself stays (a cut moves a reference only when it takes all of it), but the cells it
11984
+ * names were moved, and the event says where.
11985
+ */
11986
+ edits?: boolean;
11846
11987
  /**
11847
11988
  * How the listened range follows rows and columns inserted or deleted around it.
11848
11989
  *
@@ -37017,6 +37158,403 @@ declare global {
37017
37158
  }
37018
37159
  }
37019
37160
 
37161
+ /**
37162
+ * A group of sparklines drawn with the same properties: Excel's sparkline group.
37163
+ *
37164
+ * @remarks
37165
+ * A sparkline is a small chart drawn in a cell, over the cell's own value. A group shares one
37166
+ * type, one set of colors and markers, and one axis rule (`'group'` scales its sparklines
37167
+ * together). It is anchored to its sparklines' cells, and moves and shrinks with them as rows and
37168
+ * columns are inserted and deleted; each sparkline's data follows its own cells the way a formula
37169
+ * does.
37170
+ *
37171
+ * * A cell has at most one sparkline.
37172
+ * * The data is kept per range, relative to each cell: a column of 10,000 sparklines each reading
37173
+ * the five cells to its left is one range, and {@link getSparklines} answers each cell's own data.
37174
+ */
37175
+ export interface ISparklineGroup extends IAnchored {
37176
+ /**
37177
+ * The kind of chart the group draws.
37178
+ */
37179
+ getType(): ISparklineGroup.Type;
37180
+ /**
37181
+ * The properties every sparkline of the group draws with. Absent properties are their defaults.
37182
+ */
37183
+ getProperties(): Readonly<ISparklineGroup.Properties>;
37184
+ /**
37185
+ * The first range the group covers.
37186
+ *
37187
+ * @remarks
37188
+ * See {@link IAnchored.getRanges} for all of them.
37189
+ */
37190
+ getRange(): ICellRange;
37191
+ /**
37192
+ * One sparkline per cell, in the order of the group's ranges.
37193
+ */
37194
+ getSparklines(): readonly ISparklineGroup.ISparkline[];
37195
+ /**
37196
+ * The sparkline at `index` in {@link getSparklines}, or `null` past the end.
37197
+ */
37198
+ getSparklineAt(index: number): ISparklineGroup.ISparkline | null;
37199
+ /**
37200
+ * The sparkline in `cell`, or `null` when the group has none there.
37201
+ */
37202
+ getSparkline(cell: ICellRange.Address): ISparklineGroup.ISparkline | null;
37203
+ /**
37204
+ * Changes the properties every sparkline of the group draws with.
37205
+ *
37206
+ * @param properties The properties to change; a property left out is left as it is, and `null`
37207
+ * returns one to its default.
37208
+ *
37209
+ * @remarks
37210
+ * Excel's Sparkline tab edits a group this way: a type, a color or a marker is the group's, never
37211
+ * one sparkline's. Refused on a protected sheet unless formatting cells is allowed.
37212
+ *
37213
+ * @example
37214
+ * ```ts
37215
+ * group.update({ type: 'column', high: true, colorHigh: 'accent2' });
37216
+ * group.update({ colorHigh: null }); // back to the default
37217
+ * ```
37218
+ */
37219
+ update(properties: ISparklineGroup.Modifiers, options?: ITransaction.OperationOptions): this;
37220
+ /**
37221
+ * The cells the first range's sparklines draw.
37222
+ *
37223
+ * @remarks
37224
+ * See {@link getDataRanges} for all of them.
37225
+ */
37226
+ getDataRange(): ICellRange;
37227
+ /**
37228
+ * The cells each range's sparklines draw, paired by position with {@link IAnchored.getRanges}:
37229
+ * the cells they read together (`A2:E4` for `F2:F4` reading a row each), as Excel's Edit
37230
+ * Sparklines dialog shows them.
37231
+ *
37232
+ * @remarks
37233
+ * * **Never `null` entries.** Data whose cells are deleted is an *invalid* range; ask
37234
+ * {@link ICellRange.isInvalid}.
37235
+ * * Each range is on its own sheet: one may read this sheet and another a different one.
37236
+ * * {@link setDataRanges} and {@link setRanges} take this list back.
37237
+ */
37238
+ getDataRanges(): readonly ICellRange[];
37239
+ /**
37240
+ * Gives the group's cells new data, as Excel's `ModifySourceData` does.
37241
+ *
37242
+ * @param data The cells to draw, paired with the group's cells as {@link setRanges} pairs them.
37243
+ *
37244
+ * @remarks
37245
+ * The group keeps its cells and properties. Refused, and the group left as it was, when the data
37246
+ * does not pair with its cells.
37247
+ */
37248
+ setDataRanges(data: ICellRanges.Address, options?: ITransaction.OperationOptions): this;
37249
+ /**
37250
+ * Moves the group's sparklines to new cells, and optionally gives them new data, as Excel's Edit
37251
+ * Sparklines dialog does (`ModifyLocation`, `Modify`).
37252
+ *
37253
+ * @param address The cells to draw in: one or more areas, each a cell, a row or a column of cells.
37254
+ * @param data The cells to draw. Left out, the group's own data ({@link getDataRanges}) is paired
37255
+ * with the new cells. Give both to change both at once: growing `F2:F4` reading `A2:E4` to `F2:F5`
37256
+ * reading `A2:E5` pairs as one change and as neither change alone.
37257
+ *
37258
+ * @remarks
37259
+ * The location's cells are taken in order, and the data pairs with them in one of three ways:
37260
+ *
37261
+ * * **One data area** goes to all of them together, as {@link ICellRange.setSparkline} pairs it:
37262
+ * `F2:F3,G5` with `A2:E4` reads a row each.
37263
+ * * **One data area per location area**: `F2:F4,H6` with `A2:E4,A6:E6`.
37264
+ * * **One data area per cell**: `F2:F4` with `A2:E2,A9:E9,A4:E4`.
37265
+ *
37266
+ * The group keeps its properties. A cell has one sparkline, so the new cells leave any other
37267
+ * group they were in. Refused, and the group left as it was, when the data does not pair with the
37268
+ * cells; refused on a protected sheet unless formatting cells is allowed.
37269
+ *
37270
+ * @example
37271
+ * ```ts
37272
+ * group.setRanges('H2:H4'); // the same data, drawn in H2:H4
37273
+ * group.setRanges('F2:F5', 'A2:E5'); // one more sparkline
37274
+ * ```
37275
+ */
37276
+ setRanges(address: ICellRanges.Address, data?: ICellRanges.Address | null, options?: ITransaction.OperationOptions): this;
37277
+ /**
37278
+ * Add Listeners.
37279
+ *
37280
+ * @see
37281
+ * {@link IListener.ISource.addListeners}
37282
+ */
37283
+ addListeners(listeners: ISparklineGroup.IListeners, options?: IListener.Options): IListener.Remove;
37284
+ /**
37285
+ * The group as JSON: its properties and the data of each of its ranges, in order.
37286
+ */
37287
+ toJSON(): ISparklineGroup.JSON;
37288
+ /**
37289
+ * For runtime type checking.
37290
+ */
37291
+ readonly isISparklineGroup: true;
37292
+ }
37293
+
37294
+ /**
37295
+ * {@inheritDoc ISparklineGroup}
37296
+ * @see
37297
+ * ### **Interface**
37298
+ *
37299
+ * {@link ISparklineGroup}
37300
+ *
37301
+ * **Additional Interfaces**
37302
+ * * {@link ISparklineGroup.ISparkline}
37303
+ * * {@link ISparklineGroupCollection}
37304
+ */
37305
+ export namespace ISparklineGroup {
37306
+ /**
37307
+ * The kind of chart a group draws.
37308
+ */
37309
+ const Type: {
37310
+ /** A line through the points. */
37311
+ readonly Line: "line";
37312
+ /** A column per point. */
37313
+ readonly Column: "column";
37314
+ /** A column up for a positive point and down for a negative one, all the same height. Excel's file calls it `stacked`. */
37315
+ readonly WinLoss: "winLoss";
37316
+ };
37317
+ type Type = typeof Type[keyof typeof Type];
37318
+ /**
37319
+ * How the minimum or maximum of the vertical axis is chosen.
37320
+ */
37321
+ const AxisType: {
37322
+ /** Each sparkline's own data. */
37323
+ readonly Individual: "individual";
37324
+ /** The data of every sparkline in the group, so they scale together. */
37325
+ readonly Group: "group";
37326
+ /** The value in `manualMin` or `manualMax`. */
37327
+ readonly Custom: "custom";
37328
+ };
37329
+ type AxisType = typeof AxisType[keyof typeof AxisType];
37330
+ /**
37331
+ * How an empty cell in the data draws.
37332
+ */
37333
+ const EmptyCellsAs: {
37334
+ /** A gap in the line. */
37335
+ readonly Gap: "gap";
37336
+ /** A zero. */
37337
+ readonly Zero: "zero";
37338
+ /** A line straight across to the next point. */
37339
+ readonly Span: "span";
37340
+ };
37341
+ type EmptyCellsAs = typeof EmptyCellsAs[keyof typeof EmptyCellsAs];
37342
+ /**
37343
+ * What a group draws with. Every property is optional; an absent one is its default.
37344
+ *
37345
+ * @remarks
37346
+ * The names are the file's (`CT_SparklineGroup`). Colors are color strings, theme-aware as the
37347
+ * file is (`accent1 tint 0.4`).
37348
+ */
37349
+ interface Properties {
37350
+ /** @defaultValue `'line'` */
37351
+ type?: Type;
37352
+ /** The line's weight in points. @defaultValue `0.75` */
37353
+ lineWeight?: number;
37354
+ /** @defaultValue `'zero'` */
37355
+ displayEmptyCellsAs?: EmptyCellsAs;
37356
+ /** A marker on every point of a line. @defaultValue `false` */
37357
+ markers?: boolean;
37358
+ /** The highest point in `colorHigh`. @defaultValue `false` */
37359
+ high?: boolean;
37360
+ /** The lowest point in `colorLow`. @defaultValue `false` */
37361
+ low?: boolean;
37362
+ /** The first point in `colorFirst`. @defaultValue `false` */
37363
+ first?: boolean;
37364
+ /** The last point in `colorLast`. @defaultValue `false` */
37365
+ last?: boolean;
37366
+ /** Negative points in `colorNegative`. @defaultValue `false` */
37367
+ negative?: boolean;
37368
+ /** A horizontal axis at zero, when zero is within the vertical range. @defaultValue `false` */
37369
+ displayXAxis?: boolean;
37370
+ /** Draw the values of hidden rows and columns. @defaultValue `false` */
37371
+ displayHidden?: boolean;
37372
+ /** Draw from right to left. @defaultValue `false` */
37373
+ rightToLeft?: boolean;
37374
+ /** @defaultValue `'individual'` */
37375
+ minAxisType?: AxisType;
37376
+ /** @defaultValue `'individual'` */
37377
+ maxAxisType?: AxisType;
37378
+ /** The minimum, when `minAxisType` is `'custom'`. */
37379
+ manualMin?: number;
37380
+ /** The maximum, when `maxAxisType` is `'custom'`. */
37381
+ manualMax?: number;
37382
+ /** Space the points by the dates in `dateRange`. @defaultValue `false` */
37383
+ dateAxis?: boolean;
37384
+ /** The cells holding the date of each point, as a formula; read when `dateAxis` is on. */
37385
+ dateRange?: string;
37386
+ colorSeries?: string;
37387
+ colorNegative?: string;
37388
+ colorAxis?: string;
37389
+ colorMarkers?: string;
37390
+ colorFirst?: string;
37391
+ colorLast?: string;
37392
+ colorHigh?: string;
37393
+ colorLow?: string;
37394
+ /**
37395
+ * Attributes a file gave the group that are not modeled here, kept so a resave writes them back.
37396
+ */
37397
+ rest?: Record<string, string>;
37398
+ }
37399
+ /** The properties that are colors. */
37400
+ type ColorKey = 'colorSeries' | 'colorNegative' | 'colorAxis' | 'colorMarkers' | 'colorFirst' | 'colorLast' | 'colorHigh' | 'colorLow';
37401
+ /**
37402
+ * What {@link ISparklineGroup.update} and a new group take: any of the {@link Properties}, a
37403
+ * color as an {@link IColor} or a color string, and `null` to return a property to its default.
37404
+ */
37405
+ type Modifiers = {
37406
+ [K in Exclude<keyof Properties, ColorKey | 'rest'>]?: Properties[K] | null;
37407
+ } & {
37408
+ [K in ColorKey]?: IColor | string | null;
37409
+ };
37410
+ /**
37411
+ * A sparkline: one cell's view of its group.
37412
+ *
37413
+ * @remarks
37414
+ * Transient and read-only, as `ITable.IColumn` is: it answers for the group as the group is when
37415
+ * asked, and changes go through the group.
37416
+ */
37417
+ interface ISparkline {
37418
+ /**
37419
+ * The cell the sparkline draws in.
37420
+ */
37421
+ getRange(): ICellRange;
37422
+ /**
37423
+ * The cells the sparkline draws.
37424
+ *
37425
+ * @remarks
37426
+ * * **Never `null`.** Once its cells are deleted it is an *invalid* range; ask
37427
+ * {@link ICellRange.isInvalid}.
37428
+ * * The data follows its cells as a formula does, so this answers where they are now.
37429
+ */
37430
+ getDataRange(): ICellRange;
37431
+ /**
37432
+ * The sparkline laid out in a box: its line or columns, markers and axis, in px, with every
37433
+ * color concrete. What a painter draws.
37434
+ *
37435
+ * @param size The box in px, unzoomed: the cell's.
37436
+ *
37437
+ * @remarks
37438
+ * Read from its data now: the hidden rows and columns left out unless the group shows them,
37439
+ * text and errors as empty cells. An axis whose type is `'group'` reads the data of the whole
37440
+ * group.
37441
+ *
37442
+ * @example
37443
+ * ```ts
37444
+ * const layout = sheet.getSparklineGroups().getItems()[0].getSparklineAt(0)!.getLayout({ width: 64, height: 20 });
37445
+ * console.log(layout.min, layout.max, layout.line?.runs.length);
37446
+ * ```
37447
+ */
37448
+ getLayout(size: Size): SparklineLayout;
37449
+ /**
37450
+ * The group whose properties the sparkline draws with.
37451
+ */
37452
+ getGroup(): ISparklineGroup;
37453
+ /**
37454
+ * For runtime type checking.
37455
+ */
37456
+ readonly isISparkline: true;
37457
+ }
37458
+ /**
37459
+ * A group as JSON.
37460
+ */
37461
+ interface JSON extends Properties {
37462
+ /**
37463
+ * The data, as a list of areas paired by position with the group's ranges: each the data the
37464
+ * range's first cell draws (`A2:E2,A9:E9` for `F2:F4,G3`).
37465
+ *
37466
+ * @remarks
37467
+ * Every other cell of a range draws the same area moved by its offset from the first cell, as a
37468
+ * conditional format's formula is written for the first cell of its range: in `F2:F4` reading
37469
+ * `A2:E2`, F3 draws `A3:E3`. An area on the group's own sheet is written without a sheet name.
37470
+ * An empty area is a range with no data, which draws nothing (`F2:F4,G5` with `A2:E2,`).
37471
+ */
37472
+ data: string;
37473
+ }
37474
+ /**
37475
+ * IListener for {@link ISparklineGroup} events.
37476
+ */
37477
+ interface Events extends IAnchored.Events<ISparklineGroup> {
37478
+ /**
37479
+ * Called when what {@link ISparklineGroup.ISparkline.getLayout} returns may have changed for any
37480
+ * sparkline of the group: the group changed, a cell it reads changed (its value, or whether its
37481
+ * row or column is hidden), or its theme changed. Call `getLayout` again to see the new layout.
37482
+ *
37483
+ * @remarks
37484
+ * Cell changes are announced once per commit, after every cell of it has landed, so a
37485
+ * `getLayout` from the listener reads the new values.
37486
+ */
37487
+ onLayoutChange?(source: ISparklineGroup): void;
37488
+ }
37489
+ interface IListeners extends IListener.Callbacks<ISparklineGroup, ISparklineGroup.Events> {
37490
+ }
37491
+ }
37492
+
37493
+ /**
37494
+ * Holds a sheet's {@link ISparklineGroup}s.
37495
+ *
37496
+ * @remarks
37497
+ * Most code reaches sparklines through the range instead: {@link ICellRange.setSparkline} puts them
37498
+ * on cells. The collection is for listing every group, and for adding one at an address.
37499
+ */
37500
+ export interface ISparklineGroupCollection extends ICollection<ISparklineGroup> {
37501
+ /**
37502
+ * Adds a group of sparklines in the cells of `location`, each drawing its share of `data`, and
37503
+ * returns it.
37504
+ *
37505
+ * @param location The cells the sparklines draw in: one row or one column of cells, or one cell.
37506
+ * @param data The cells they draw. See {@link ICellRange.setSparkline} for how they pair.
37507
+ * @param properties How they draw. A new group starts as Excel's does: empty cells as gaps,
37508
+ * Excel's colors, and negative points colored for win/loss.
37509
+ *
37510
+ * @remarks
37511
+ * The same write as {@link ICellRange.setSparkline}. A cell has one sparkline, so the cells leave
37512
+ * any group they were in.
37513
+ */
37514
+ add(location: ICellRanges.Address, data: ICellRange.Address, properties?: ISparklineGroup.Modifiers, options?: ITransaction.OperationOptions): ISparklineGroup;
37515
+ /**
37516
+ * Returns items that match the filter criteria.
37517
+ *
37518
+ * If no filter criteria is provided, all items will be returned.
37519
+ *
37520
+ * @param options {@link ISparklineGroupCollection.GetItemsOptions}
37521
+ */
37522
+ getItems(options?: ISparklineGroupCollection.GetItemsOptions): ISparklineGroup[];
37523
+ /** For runtime type checking. */
37524
+ readonly isISparklineGroupCollection: true;
37525
+ }
37526
+
37527
+ /**
37528
+ * {@inheritDoc ISparklineGroupCollection}
37529
+ * @see
37530
+ * ### **Interface**
37531
+ *
37532
+ * {@link ISparklineGroupCollection}
37533
+ */
37534
+ export namespace ISparklineGroupCollection {
37535
+ /**
37536
+ * Options for searching for {@link ISparklineGroup}s.
37537
+ */
37538
+ interface GetItemsOptions extends ICollection.GetItemsOptions {
37539
+ /**
37540
+ * If provided, the search will be limited to groups with a sparkline in the range.
37541
+ */
37542
+ address?: ICellRange.Address;
37543
+ /**
37544
+ * Indicate if items that are in hidden headers should be returned.
37545
+ *
37546
+ * @defaultValue false
37547
+ */
37548
+ ignoreHidden?: boolean;
37549
+ /**
37550
+ * Only return items that are completely contained with the search bounds.
37551
+ *
37552
+ * @defaultValue false
37553
+ */
37554
+ fullyContained?: boolean;
37555
+ }
37556
+ }
37557
+
37020
37558
  /**
37021
37559
  * A spinner: two arrows. Content type `'spinner'`.
37022
37560
  */
@@ -44750,6 +45288,14 @@ declare global {
44750
45288
  * {@link ICellRange.setControl} and {@link ICellRange.getControls}.
44751
45289
  */
44752
45290
  getCellControls(): ICellControlCollection;
45291
+ /**
45292
+ * Returns the sparkline groups on this sheet.
45293
+ *
45294
+ * @remarks
45295
+ * A sparkline is a small chart drawn in a cell, over its value. Each group shares one type and
45296
+ * one set of properties across its sparklines.
45297
+ */
45298
+ getSparklineGroups(): ISparklineGroupCollection;
44753
45299
  /**
44754
45300
  * Returns the comments and notes on this sheet.
44755
45301
  *
@@ -45540,6 +46086,10 @@ declare global {
45540
46086
  * Always accompanied by the coarse {@link onStyleChange}: a control is a format.
45541
46087
  */
45542
46088
  onCellControlsChange?(source: IWorksheet): void;
46089
+ /**
46090
+ * Called when a sparkline group is added, removed or re-anchored.
46091
+ */
46092
+ onSparklineGroupsChange?(source: IWorksheet): void;
45543
46093
  /**
45544
46094
  * Called when a comment is added, removed, edited, resolved, replied to or re-anchored.
45545
46095
  *
@@ -45984,6 +46534,10 @@ declare global {
45984
46534
  validationSettings?: IDataValidationCollection.Settings;
45985
46535
  protectedRanges?: IRange.JSONReference<IProtectedRange.JSON>[];
45986
46536
  cellControls?: IRange.JSONReference<ICellControl.JSON>[];
46537
+ /**
46538
+ * The sparkline groups. Each group's ranges pair by position with the areas of its `data`.
46539
+ */
46540
+ sparklineGroups?: IRange.JSONReference<ISparklineGroup.JSON>[];
45987
46541
  movables?: IMovable.JSON[];
45988
46542
  /**
45989
46543
  * The sheet's VBA code name. Absent when it has none.
@@ -50423,6 +50977,75 @@ declare global {
50423
50977
  */
50424
50978
  export function sourceEntryFromPath(path: string): IExternalBook.SourceEntry;
50425
50979
 
50980
+ /**
50981
+ * A sparkline laid out: its line, columns, markers and axis, in px from the cell's top-left. A
50982
+ * painter translates it and decides nothing.
50983
+ *
50984
+ * @remarks
50985
+ * Plain data, never stored on the model: it is computed from the sparkline's values, its group's
50986
+ * properties, the theme and a size.
50987
+ *
50988
+ * - Every color is an {@link IColor} resolved against the workbook's theme. A painter draws it for
50989
+ * its mode, as cells are drawn: `color.toCSS()`, or `color.toRGBA(darkMode)` for a dark grid.
50990
+ * - Every length is in px, a line's width included, which the group states in points.
50991
+ * - What is drawn later is drawn over what is drawn earlier: the axis, then the columns or the
50992
+ * line, then the markers.
50993
+ */
50994
+ export interface SparklineLayout {
50995
+ /** The cell's box in px. */
50996
+ width: number;
50997
+ height: number;
50998
+ type: ISparklineGroup.Type;
50999
+ /** Where the points are drawn: the box less its margins. */
51000
+ plot: Bounds;
51001
+ /** The axis at zero, when the group shows one and zero is within the vertical range. */
51002
+ axis: SparklineLayout.Line | null;
51003
+ /**
51004
+ * The line through the points, broken where an empty cell is a gap: one array of points per
51005
+ * unbroken run. `null` for columns and win/loss.
51006
+ */
51007
+ line: SparklineLayout.Polyline | null;
51008
+ /** One per point drawn, for columns and win/loss; empty for a line. */
51009
+ columns: SparklineLayout.Column[];
51010
+ /** The line's markers and its highlighted points; empty for columns and win/loss. */
51011
+ markers: SparklineLayout.Marker[];
51012
+ /** The vertical range the values were scaled to; `null` when there is nothing to draw. */
51013
+ min: number | null;
51014
+ max: number | null;
51015
+ }
51016
+
51017
+ export namespace SparklineLayout {
51018
+ /** A straight line. */
51019
+ interface Line {
51020
+ from: Point;
51021
+ to: Point;
51022
+ color: IColor;
51023
+ width: number;
51024
+ }
51025
+ /** A line through runs of points. */
51026
+ interface Polyline {
51027
+ /** Each unbroken run, in drawing order (left to right, or right to left). */
51028
+ runs: Point[][];
51029
+ color: IColor;
51030
+ width: number;
51031
+ }
51032
+ /** A column (or a win/loss block). */
51033
+ interface Column {
51034
+ /** Which value of the sparkline's data it draws, in data order. */
51035
+ index: number;
51036
+ rect: Bounds;
51037
+ color: IColor;
51038
+ }
51039
+ /** A marker on a point of a line. */
51040
+ interface Marker {
51041
+ /** Which value of the sparkline's data it marks, in data order. */
51042
+ index: number;
51043
+ center: Point;
51044
+ radius: number;
51045
+ color: IColor;
51046
+ }
51047
+ }
51048
+
50426
51049
  /**
50427
51050
  * The **spreadsheet-language plane** of a language pack (I18N-DESIGN.md Plane 3): function names,
50428
51051
  * error values, boolean literals, and function help.