@shbernal/ts-pptx 4.0.1 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +147 -114
- package/dist/anim-presets-Qbgh8uut.js +55 -0
- package/dist/anim-presets-Qbgh8uut.js.map +1 -0
- package/dist/{autopage-odPz7zZO.js → autopage-DqZ37VpL.js} +11 -12
- package/dist/autopage-DqZ37VpL.js.map +1 -0
- package/dist/{binary-string-CKVAYI3M.js → binary-string-Ba8VM3b9.js} +3 -4
- package/dist/binary-string-Ba8VM3b9.js.map +1 -0
- package/dist/{body-insets-Dw_BeWD_.js → body-insets-BDHymJvz.js} +7 -9
- package/dist/body-insets-BDHymJvz.js.map +1 -0
- package/dist/browser.d.ts +24 -16
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +19 -19
- package/dist/browser.js.map +1 -1
- package/dist/{image-size-CvN2iCA4.js → chart-metadata-CwiTTcJq.js} +634 -537
- package/dist/chart-metadata-CwiTTcJq.js.map +1 -0
- package/dist/{clip-Bl01BPcN.d.ts → clip-ISfCMtWA.d.ts} +6 -10
- package/dist/clip-ISfCMtWA.d.ts.map +1 -0
- package/dist/{notes-Dh12JAbn.js → comments-CKIZYRbZ.js} +530 -401
- package/dist/comments-CKIZYRbZ.js.map +1 -0
- package/dist/{diagnostics-D8ot4Ei7.d.ts → diagnostics-MoA4MBq5.d.ts} +55 -53
- package/dist/diagnostics-MoA4MBq5.d.ts.map +1 -0
- package/dist/{embedded-fonts-DarT9aoa.d.ts → embedded-fonts-U7HIIhPO.d.ts} +4 -6
- package/dist/embedded-fonts-U7HIIhPO.d.ts.map +1 -0
- package/dist/{entry-compose-DCnvBZz2.d.ts → entry-compose-CiakSt-f.d.ts} +62 -81
- package/dist/entry-compose-CiakSt-f.d.ts.map +1 -0
- package/dist/{errors-C4oENPcu.js → entry-errors-JMthgJ2g.js} +45 -29
- package/dist/entry-errors-JMthgJ2g.js.map +1 -0
- package/dist/{table-cell-margins-EVg0EwxT.js → enums-BP9wsb9Q.js} +44 -47
- package/dist/enums-BP9wsb9Q.js.map +1 -0
- package/dist/{enums-BUKTUB6V.d.ts → enums-PcXr3o3J.d.ts} +13 -14
- package/dist/{enums-BUKTUB6V.d.ts.map → enums-PcXr3o3J.d.ts.map} +1 -1
- package/dist/families.d.ts +24 -26
- package/dist/families.d.ts.map +1 -1
- package/dist/families.js +3 -4
- package/dist/{fit-Cb7naFj6.js → fit-Bpmzep6O.js} +64 -56
- package/dist/fit-Bpmzep6O.js.map +1 -0
- package/dist/{font-metrics-v5fn7s7e.d.ts → font-metrics-DTppw4t3.d.ts} +62 -38
- package/dist/font-metrics-DTppw4t3.d.ts.map +1 -0
- package/dist/{grid-DikTjFey.js → grid-DUIMxjfl.js} +23 -26
- package/dist/grid-DUIMxjfl.js.map +1 -0
- package/dist/{html-dom-Iuog2wdK.js → html-dom-LZCgntnJ.js} +46 -47
- package/dist/html-dom-LZCgntnJ.js.map +1 -0
- package/dist/html.d.ts +53 -9
- package/dist/html.d.ts.map +1 -1
- package/dist/html.js +12 -13
- package/dist/html.js.map +1 -1
- package/dist/index.d.ts +21 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -15
- package/dist/index.js.map +1 -1
- package/dist/inspect.d.ts +16 -18
- package/dist/inspect.d.ts.map +1 -1
- package/dist/inspect.js +18 -19
- package/dist/inspect.js.map +1 -1
- package/dist/{text-anchor-CrYXAfUu.js → lock-attrs-CSQnFDHP.js} +62 -12
- package/dist/lock-attrs-CSQnFDHP.js.map +1 -0
- package/dist/math.d.ts +2 -4
- package/dist/math.d.ts.map +1 -1
- package/dist/math.js +12 -13
- package/dist/math.js.map +1 -1
- package/dist/measure.d.ts +23 -12
- package/dist/measure.d.ts.map +1 -1
- package/dist/measure.js +3 -3
- package/dist/node.d.ts +21 -13
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +12 -12
- package/dist/node.js.map +1 -1
- package/dist/{options-internal-WqgMf720.js → options-internal-BWgmLPdx.js} +4 -5
- package/dist/options-internal-BWgmLPdx.js.map +1 -0
- package/dist/{package-J49Ck6S2.d.ts → package-CANBWuSm.d.ts} +9 -13
- package/dist/package-CANBWuSm.d.ts.map +1 -0
- package/dist/{playbtn-CUqQdoDf.js → playbtn-BQZFJir9.js} +4 -5
- package/dist/playbtn-BQZFJir9.js.map +1 -0
- package/dist/{pres-C6qgOFAa.d.ts → pres-BkEkUAEM.d.ts} +410 -237
- package/dist/pres-BkEkUAEM.d.ts.map +1 -0
- package/dist/{presentation-DGYlAWhl.js → presentation-4Ggq0_Xa.js} +470 -315
- package/dist/presentation-4Ggq0_Xa.js.map +1 -0
- package/dist/{presentation-types-8jLQHI4M.d.ts → presentation-types-BgnZR-0a.d.ts} +1119 -468
- package/dist/presentation-types-BgnZR-0a.d.ts.map +1 -0
- package/dist/read.d.ts +18 -13
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +4 -4
- package/dist/script.d.ts +116 -65
- package/dist/script.d.ts.map +1 -1
- package/dist/script.js +2700 -780
- package/dist/script.js.map +1 -1
- package/dist/{shapes-re0KyQk_.js → shapes-CAPOjU0Q.js} +1564 -491
- package/dist/shapes-CAPOjU0Q.js.map +1 -0
- package/dist/{slide-Dx2ZeVZ6.d.ts → slide-BmT4kMoO.d.ts} +102 -89
- package/dist/slide-BmT4kMoO.d.ts.map +1 -0
- package/dist/{slide-size-BalTjFuv.js → slide-size-SkScz1ig.js} +2 -3
- package/dist/{slide-size-BalTjFuv.js.map → slide-size-SkScz1ig.js.map} +1 -1
- package/dist/{table-dom-BTDP3lEP.js → table-dom-BYga4FYY.js} +4 -5
- package/dist/{table-dom-BTDP3lEP.js.map → table-dom-BYga4FYY.js.map} +1 -1
- package/dist/{text-sN64Otf_.js → text-CU08xJGs.js} +393 -344
- package/dist/text-CU08xJGs.js.map +1 -0
- package/dist/{transition-speed-kUEWDWTx.js → transition-speed-CNJ0fSpQ.js} +2 -3
- package/dist/{transition-speed-kUEWDWTx.js.map → transition-speed-CNJ0fSpQ.js.map} +1 -1
- package/dist/{units-internal-XJlf-hOl.js → units-internal-BR3a4cIi.js} +34 -32
- package/dist/units-internal-BR3a4cIi.js.map +1 -0
- package/dist/{zip-CKd8ihcf.js → zip-7JTh61LX.js} +8 -10
- package/dist/zip-7JTh61LX.js.map +1 -0
- package/dist/{zip-C0leZZMj.d.ts → zip-uUjs9Cqx.d.ts} +4 -6
- package/dist/zip-uUjs9Cqx.d.ts.map +1 -0
- package/dist/zip.d.ts +3 -3
- package/dist/zip.js +3 -3
- package/dist/{zoom-DPUHh85d.js → zoom-CSSeOwM8.js} +1204 -620
- package/dist/zoom-CSSeOwM8.js.map +1 -0
- package/package.json +27 -28
- package/skills/{ts-pptx-upstream → pptx-ts-upstream}/SKILL.md +37 -84
- package/dist/autopage-odPz7zZO.js.map +0 -1
- package/dist/binary-string-CKVAYI3M.js.map +0 -1
- package/dist/body-insets-Dw_BeWD_.js.map +0 -1
- package/dist/clip-Bl01BPcN.d.ts.map +0 -1
- package/dist/diagnostics-D8ot4Ei7.d.ts.map +0 -1
- package/dist/embedded-fonts-DarT9aoa.d.ts.map +0 -1
- package/dist/entry-compose-DCnvBZz2.d.ts.map +0 -1
- package/dist/errors-C4oENPcu.js.map +0 -1
- package/dist/fit-Cb7naFj6.js.map +0 -1
- package/dist/font-metrics-v5fn7s7e.d.ts.map +0 -1
- package/dist/grid-DikTjFey.js.map +0 -1
- package/dist/html-dom-Iuog2wdK.js.map +0 -1
- package/dist/image-size-CvN2iCA4.js.map +0 -1
- package/dist/notes-Dh12JAbn.js.map +0 -1
- package/dist/options-internal-WqgMf720.js.map +0 -1
- package/dist/package-J49Ck6S2.d.ts.map +0 -1
- package/dist/playbtn-CUqQdoDf.js.map +0 -1
- package/dist/pres-C6qgOFAa.d.ts.map +0 -1
- package/dist/presentation-DGYlAWhl.js.map +0 -1
- package/dist/presentation-types-8jLQHI4M.d.ts.map +0 -1
- package/dist/shapes-re0KyQk_.js.map +0 -1
- package/dist/slide-Dx2ZeVZ6.d.ts.map +0 -1
- package/dist/table-cell-margins-EVg0EwxT.js.map +0 -1
- package/dist/text-anchor-CrYXAfUu.js.map +0 -1
- package/dist/text-sN64Otf_.js.map +0 -1
- package/dist/units-internal-XJlf-hOl.js.map +0 -1
- package/dist/zip-C0leZZMj.d.ts.map +0 -1
- package/dist/zip-CKd8ihcf.js.map +0 -1
- package/dist/zoom-DPUHh85d.js.map +0 -1
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as
|
|
3
|
-
import {
|
|
4
|
-
//#region src/read/oxml/theme.d.ts
|
|
1
|
+
import { t as EmbeddedFont } from "./embedded-fonts-U7HIIhPO.js";
|
|
2
|
+
import { a as Part, i as Relationships, n as OpcPackage, o as Element, t as OpcInput } from "./package-CANBWuSm.js";
|
|
3
|
+
import { hn as ColorMapToken, jn as ThemeColorSlot, t as CustomPropertyValue } from "./pres-BkEkUAEM.js";
|
|
5
4
|
/**
|
|
6
5
|
* The colour-resolution context: the two maps that turn a DrawingML colour
|
|
7
|
-
* reference into a literal hex
|
|
6
|
+
* reference into a literal hex: the effective colour map (token → `clrScheme`
|
|
8
7
|
* slot, honouring any slide `clrMapOvr`) and the resolved colour scheme (slot →
|
|
9
8
|
* 6-hex RGB). Shared by the read-model colour getters and `ThemeContext`.
|
|
10
9
|
*/
|
|
@@ -17,7 +16,7 @@ interface ColorContext {
|
|
|
17
16
|
* {@link ColorContext} maps, the live `a:fmtScheme` for style-matrix resolution, and the roots
|
|
18
17
|
* of the inheritance chain a placeholder reads through.
|
|
19
18
|
*
|
|
20
|
-
* Every root here is **read-only
|
|
19
|
+
* Every root here is **read-only**: nothing in this module or in `placeholder-inherit.ts`
|
|
21
20
|
* mutates one. The import-time flatten pass extends this with the one field it needs to write
|
|
22
21
|
* from (see `FlattenContext` in `read/api/ops/flatten.ts`).
|
|
23
22
|
*/
|
|
@@ -49,18 +48,18 @@ interface ThemeContext extends ColorContext {
|
|
|
49
48
|
* context it is absent, so the slide placeholder chain (layout/master
|
|
50
49
|
* `a:lstStyle` → `p:txStyles`) is unaffected. It is the notes analogue of the
|
|
51
50
|
* master `p:txStyles` category style, keyed by level rather than placeholder
|
|
52
|
-
* type. Read-only
|
|
51
|
+
* type. Read-only, never mutated.
|
|
53
52
|
*/
|
|
54
53
|
notesStyle?: Element | null;
|
|
55
54
|
/**
|
|
56
55
|
* The presentation's `p:defaultTextStyle` (a `CT_TextListStyle` from
|
|
57
|
-
* `presentation.xml`), keyed by level
|
|
56
|
+
* `presentation.xml`), keyed by level: PowerPoint's lowest-priority text
|
|
58
57
|
* fallback, applying to any run (placeholder or not) that resolves nothing
|
|
59
58
|
* above it. Only ever set on a *slide* context (see `resolveSlideColorContext`);
|
|
60
59
|
* absent on notes/master/layout contexts, so their chains are unaffected. A table
|
|
61
60
|
* cell's text is read against a copy that holds the slide master's `p:otherStyle`
|
|
62
61
|
* here instead, the tier PowerPoint resolves cell text through (`TableCell.textFrame`).
|
|
63
|
-
* Read-only
|
|
62
|
+
* Read-only, never mutated.
|
|
64
63
|
*/
|
|
65
64
|
defaultTextStyle?: Element | null;
|
|
66
65
|
/**
|
|
@@ -71,7 +70,7 @@ interface ThemeContext extends ColorContext {
|
|
|
71
70
|
* The lookup is a full subtree scan, and reading one run's five inherited properties used
|
|
72
71
|
* to perform ten of them: each property walks the tier chain, and each tier walk scans a
|
|
73
72
|
* layout and a master. The answer depends only on the roots and the `(type, idx)` asked
|
|
74
|
-
* for, and the roots on a context never change
|
|
73
|
+
* for, and the roots on a context never change, so it is computed once per context.
|
|
75
74
|
*
|
|
76
75
|
* The memo lives here rather than in a module-level cache keyed by the root element
|
|
77
76
|
* because that is what scopes it correctly: a context is built per `Slide`/`TemplatePart`
|
|
@@ -81,8 +80,6 @@ interface ThemeContext extends ColorContext {
|
|
|
81
80
|
*/
|
|
82
81
|
placeholderMemo?: Map<string, Element | null>;
|
|
83
82
|
}
|
|
84
|
-
//#endregion
|
|
85
|
-
//#region src/read/oxml/color-transform.d.ts
|
|
86
83
|
/** A colour-transform modifier in its read-model form: tag local-name + raw `@val`. */
|
|
87
84
|
interface ColorTransform {
|
|
88
85
|
name: string;
|
|
@@ -96,15 +93,13 @@ interface EffectiveColor {
|
|
|
96
93
|
/**
|
|
97
94
|
* Apply an ordered list of DrawingML colour transforms to a base sRGB hex,
|
|
98
95
|
* returning the effective sRGB hex (and opacity, when an `alpha*` modifier set
|
|
99
|
-
* it). Pure: no DOM, no theme lookup
|
|
96
|
+
* it). Pure: no DOM, no theme lookup; the caller has already resolved the base
|
|
100
97
|
* colour and extracted each modifier's `{ name, value }`.
|
|
101
98
|
*
|
|
102
99
|
* An unparseable base hex is returned unchanged (with no transforms applied); an
|
|
103
100
|
* unparseable/`null` modifier value is skipped.
|
|
104
101
|
*/
|
|
105
102
|
declare function applyColorTransforms(baseHex: string, transforms: ColorTransform[]): EffectiveColor;
|
|
106
|
-
//#endregion
|
|
107
|
-
//#region src/read/api/theme-context.d.ts
|
|
108
103
|
/** Identifies a placeholder by its `p:ph` `type`/`idx` for inheritance lookups. */
|
|
109
104
|
interface PlaceholderRef {
|
|
110
105
|
type: string | null;
|
|
@@ -125,7 +120,7 @@ interface ResolvedFrame {
|
|
|
125
120
|
*
|
|
126
121
|
* `hex` is the **base** token colour and `transforms` reports the colour-transform
|
|
127
122
|
* children (`lumMod`/`lumOff`/`shade`/`tint`/`alpha`/…) in document order as
|
|
128
|
-
* `{ name, value }` pairs
|
|
123
|
+
* `{ name, value }` pairs, both kept for traceability and for the
|
|
129
124
|
* `theme: 'preserve'` flatten path that re-emits the transforms verbatim.
|
|
130
125
|
*
|
|
131
126
|
* `effectiveHex` is the colour a renderer actually paints: `hex` with its
|
|
@@ -141,8 +136,8 @@ interface ResolvedColor {
|
|
|
141
136
|
}
|
|
142
137
|
/**
|
|
143
138
|
* Resolve a DrawingML colour *element* (every `a:EG_ColorChoice` member except
|
|
144
|
-
* `a:scrgbClr
|
|
145
|
-
* {@link ResolvedColor}
|
|
139
|
+
* `a:scrgbClr`; see `read/oxml/theme.ts`) against `ctx` into a full
|
|
140
|
+
* {@link ResolvedColor}: base hex, raw transform list,
|
|
146
141
|
* and the `effectiveHex`/`alpha` after applying those transforms. `null` when the
|
|
147
142
|
* element cannot be made literal (unmapped token, or a colour model we do not
|
|
148
143
|
* resolve). Shared by the solid-fill and gradient-stop colour reads.
|
|
@@ -186,39 +181,6 @@ interface StyleFontRef {
|
|
|
186
181
|
/** The face named by `a:fontRef/@idx` (`major`→`+mj-lt`, `minor`→`+mn-lt`) resolved through the theme `fontScheme`, or `null` for `idx="none"` / an unresolvable token. */
|
|
187
182
|
face: string | null;
|
|
188
183
|
}
|
|
189
|
-
//#endregion
|
|
190
|
-
//#region src/read/api/gradient.d.ts
|
|
191
|
-
/** One stop of a gradient fill (`a:gsLst/a:gs`), as read from a shape. */
|
|
192
|
-
interface GradientStop {
|
|
193
|
-
/** Stop offset along the gradient, 0–1 (from `@pos`, thousandths of a percent), or `null` if unset. */
|
|
194
|
-
position: number | null;
|
|
195
|
-
/**
|
|
196
|
-
* The stop's colour, as written and resolved against the slide theme. Its `resolved.effectiveHex` is
|
|
197
|
-
* the rendered colour and `resolved.alpha` the stop's opacity, when an `alpha*` transform set one.
|
|
198
|
-
*/
|
|
199
|
-
colorRef: ColorRef;
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* A gradient fill (`a:gradFill`), as read from a container — the stops plus the
|
|
203
|
-
* geometry that a bare stop list omits. `linear` gradients carry an
|
|
204
|
-
* {@link GradientFill.angleDeg} (the `a:lin/@ang` direction); `radial`/`path`
|
|
205
|
-
* gradients carry a {@link GradientFill.path} shape (`a:path/@path`, e.g.
|
|
206
|
-
* `circle`). The angle is in **OOXML degrees** (clockwise from 3 o'clock), the
|
|
207
|
-
* same convention the write-side `GradientFillProps.angle` expects, so it
|
|
208
|
-
* round-trips directly.
|
|
209
|
-
*/
|
|
210
|
-
interface GradientFill {
|
|
211
|
-
/** `linear` (`a:lin`) or `path` (`a:path`, i.e. radial/rectangular). `null` when neither child is present. */
|
|
212
|
-
kind: 'linear' | 'path' | null;
|
|
213
|
-
/** Linear direction in OOXML degrees (clockwise from 3 o'clock), or `null` for a path gradient / when unset. */
|
|
214
|
-
angleDeg: number | null;
|
|
215
|
-
/** Path-gradient shape (`a:path/@path`: `circle`/`rect`/`shape`), or `null` for a linear gradient. */
|
|
216
|
-
path: string | null;
|
|
217
|
-
/** The gradient stops in document order. */
|
|
218
|
-
stops: GradientStop[];
|
|
219
|
-
}
|
|
220
|
-
//#endregion
|
|
221
|
-
//#region src/read/api/picture-fill.d.ts
|
|
222
184
|
/** A rectangle expressed as per-edge fractions (`a:srcRect`/`a:fillRect`), `0.1` = 10 %. */
|
|
223
185
|
interface FillRect {
|
|
224
186
|
left: number;
|
|
@@ -248,7 +210,7 @@ interface PictureFillTile {
|
|
|
248
210
|
/**
|
|
249
211
|
* A picture (image) fill (`a:blipFill`) read from a fill-bearing container. The
|
|
250
212
|
* image itself is {@link relId} / {@link partName}; the rest is the geometry a
|
|
251
|
-
* faithful replica needs
|
|
213
|
+
* faithful replica needs: {@link mode} (`stretch` or `tile`), the source crop
|
|
252
214
|
* {@link srcRect}, the destination inset {@link fillRect}, and {@link tile}.
|
|
253
215
|
*
|
|
254
216
|
* Rect fields follow the read API's fraction convention (see
|
|
@@ -276,10 +238,50 @@ interface PictureFill {
|
|
|
276
238
|
/** Whether the fill rotates with its shape (`@rotWithShape`), or `null` when unset. */
|
|
277
239
|
rotWithShape: boolean | null;
|
|
278
240
|
}
|
|
279
|
-
|
|
280
|
-
|
|
241
|
+
/** One stop of a gradient fill (`a:gsLst/a:gs`), as read from a shape. */
|
|
242
|
+
interface GradientStop {
|
|
243
|
+
/** Stop offset along the gradient, 0–1 (from `@pos`, thousandths of a percent), or `null` if unset. */
|
|
244
|
+
position: number | null;
|
|
245
|
+
/**
|
|
246
|
+
* The stop's colour, as written and resolved against the slide theme. Its `resolved.effectiveHex` is
|
|
247
|
+
* the rendered colour and `resolved.alpha` the stop's opacity, when an `alpha*` transform set one.
|
|
248
|
+
*/
|
|
249
|
+
colorRef: ColorRef;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* A gradient fill (`a:gradFill`), as read from a container: the stops plus the
|
|
253
|
+
* geometry that a bare stop list omits. `linear` gradients carry an
|
|
254
|
+
* {@link GradientFill.angleDeg} (the `a:lin/@ang` direction); `radial`/`path`
|
|
255
|
+
* gradients carry a {@link GradientFill.path} shape (`a:path/@path`, e.g.
|
|
256
|
+
* `circle`). The angle is in **OOXML degrees** (clockwise from 3 o'clock), the
|
|
257
|
+
* same convention the write-side `GradientFillProps.angle` expects, so it
|
|
258
|
+
* round-trips directly.
|
|
259
|
+
*/
|
|
260
|
+
interface GradientFill {
|
|
261
|
+
/** `linear` (`a:lin`) or `path` (`a:path`, i.e. radial/rectangular). `null` when neither child is present. */
|
|
262
|
+
kind: 'linear' | 'path' | null;
|
|
263
|
+
/** Linear direction in OOXML degrees (clockwise from 3 o'clock), or `null` for a path gradient / when unset. */
|
|
264
|
+
angleDeg: number | null;
|
|
265
|
+
/** Path-gradient shape (`a:path/@path`: `circle`/`rect`/`shape`), or `null` for a linear gradient. */
|
|
266
|
+
path: string | null;
|
|
267
|
+
/** The gradient stops in document order. */
|
|
268
|
+
stops: GradientStop[];
|
|
269
|
+
/**
|
|
270
|
+
* Whether the fill rotates with the shape (`a:gradFill/@rotWithShape`), or `null` when the
|
|
271
|
+
* attribute is absent.
|
|
272
|
+
*/
|
|
273
|
+
rotateWithShape: boolean | null;
|
|
274
|
+
/** Whether a linear gradient's angle scales with the fill region (`a:lin/@scaled`), or `null` when unset. */
|
|
275
|
+
scaled: boolean | null;
|
|
276
|
+
/**
|
|
277
|
+
* A path gradient's focus rectangle (`a:path/a:fillToRect`) as per-edge fractions inset from the
|
|
278
|
+
* fill box, or `null` when absent. Equal insets centre the focus; the write side's radial
|
|
279
|
+
* `center: { x, y }` writes `left = x`, `top = y`, `right = 1 - x`, `bottom = 1 - y`.
|
|
280
|
+
*/
|
|
281
|
+
focusRect: FillRect | null;
|
|
282
|
+
}
|
|
281
283
|
/**
|
|
282
|
-
* A pattern fill (`a:pattFill`)
|
|
284
|
+
* A pattern fill (`a:pattFill`): a two-colour preset hatch. The write-side
|
|
283
285
|
* `fill: { type: 'pattern', pattern: { preset, fgColor, bgColor } }` emits the same element,
|
|
284
286
|
* so the {@link preset} name and both colours round-trip.
|
|
285
287
|
*/
|
|
@@ -291,8 +293,6 @@ interface PatternFill {
|
|
|
291
293
|
/** Background colour (`a:bgClr`); every field is `null` when the pattern states none. */
|
|
292
294
|
background: ColorRef;
|
|
293
295
|
}
|
|
294
|
-
//#endregion
|
|
295
|
-
//#region src/read/api/slide-background.d.ts
|
|
296
296
|
/** Where a slide's effective background comes from in the slide → layout → master chain. */
|
|
297
297
|
type BackgroundSource = 'slide' | 'layout' | 'master';
|
|
298
298
|
/**
|
|
@@ -301,8 +301,8 @@ type BackgroundSource = 'slide' | 'layout' | 'master';
|
|
|
301
301
|
* top-level variants add {@link BackgroundSource}, and it is what a `themeRef`'s
|
|
302
302
|
* `SlideBackground.resolvedFill` carries.
|
|
303
303
|
*
|
|
304
|
-
* The `image` variant keeps `relId`/`partName` at the top level
|
|
305
|
-
* callers already read
|
|
304
|
+
* The `image` variant keeps `relId`/`partName` at the top level (the fields
|
|
305
|
+
* callers already read) and adds the full {@link PictureFill} (stretch/tile
|
|
306
306
|
* geometry, crop, alpha) under `picture`.
|
|
307
307
|
*/
|
|
308
308
|
type BackgroundFill = {
|
|
@@ -326,7 +326,7 @@ type BackgroundFill = {
|
|
|
326
326
|
* `type`. Every variant carries {@link BackgroundSource}. `solid`/`gradient`/`pattern`/`image`
|
|
327
327
|
* are what the writer authors and round-trip faithfully; `themeRef` is read-only
|
|
328
328
|
* (imported decks) and `none` is an explicit `a:noFill`. A `themeRef`
|
|
329
|
-
* keeps its raw `idx` for fidelity and also exposes `resolvedFill
|
|
329
|
+
* keeps its raw `idx` for fidelity and also exposes `resolvedFill`, the concrete
|
|
330
330
|
* fill that `idx` resolves to through the slide theme's `fmtScheme` (`null` when the
|
|
331
331
|
* theme/entry cannot be resolved).
|
|
332
332
|
*/
|
|
@@ -357,8 +357,6 @@ type SlideBackground = {
|
|
|
357
357
|
type: 'none';
|
|
358
358
|
source: BackgroundSource;
|
|
359
359
|
};
|
|
360
|
-
//#endregion
|
|
361
|
-
//#region src/read/api/shapes/oxml.d.ts
|
|
362
360
|
/**
|
|
363
361
|
* Where a shape kind's paint is written: its properties element (`p:spPr` / `p:grpSpPr`), created
|
|
364
362
|
* in document order on demand, and for each paint the schema successors that paint's element is
|
|
@@ -370,8 +368,6 @@ interface PaintSurface {
|
|
|
370
368
|
fill: readonly string[] | null;
|
|
371
369
|
line: readonly string[] | null;
|
|
372
370
|
}
|
|
373
|
-
//#endregion
|
|
374
|
-
//#region src/read/api/shapes/types.d.ts
|
|
375
371
|
/** Discriminator for the concrete `Shape` subclass. */
|
|
376
372
|
type ShapeType = 'autoShape' | 'picture' | 'connector' | 'graphicFrame' | 'group';
|
|
377
373
|
/** One end of a connector/line (`a:ln/a:headEnd` or `a:tailEnd`), as read from a shape. */
|
|
@@ -392,7 +388,7 @@ interface LineEnds {
|
|
|
392
388
|
* One bound end of a connector (`p:nvCxnSpPr/p:cNvCxnSpPr/a:stCxn` or `a:endCxn`),
|
|
393
389
|
* as read. A connector authored with `startShape`/`endShape` attaches each end to
|
|
394
390
|
* a shape by that shape's `p:cNvPr/@id` plus a connection-site index; an unbound
|
|
395
|
-
* end (the writer emits a bare `p:cNvCxnSpPr`) reports no site at all
|
|
391
|
+
* end (the writer emits a bare `p:cNvCxnSpPr`) reports no site at all; see
|
|
396
392
|
* {@link Connector.startConnection}. This is the read counterpart of the write
|
|
397
393
|
* API's `startShape`/`startShapeIdx` split, which binds by `objectName` and
|
|
398
394
|
* resolves the name → id at serialize time.
|
|
@@ -404,7 +400,7 @@ interface ConnectionSite {
|
|
|
404
400
|
siteIndex: number;
|
|
405
401
|
/**
|
|
406
402
|
* The bound shape resolved to a read-model shape via {@link Slide.shapeByIdDeep},
|
|
407
|
-
* which descends into groups
|
|
403
|
+
* which descends into groups, so a connector bound to a shape nested in a group
|
|
408
404
|
* resolves the same as one bound to a top-level shape. `null` only when no shape
|
|
409
405
|
* anywhere on the slide carries that id (a genuinely dangling binding), which is
|
|
410
406
|
* faithful degradation and does not throw.
|
|
@@ -429,11 +425,16 @@ interface OuterShadow {
|
|
|
429
425
|
offsetPt?: number;
|
|
430
426
|
/** Offset direction in degrees, clockwise from 3 o'clock (`@dir` ÷ 60000), or `undefined` when unset. */
|
|
431
427
|
angleDeg?: number;
|
|
428
|
+
/**
|
|
429
|
+
* Whether the shadow rotates with the shape (`@rotWithShape`), or `undefined` when unset. Only an
|
|
430
|
+
* outer shadow has the attribute.
|
|
431
|
+
*/
|
|
432
|
+
rotateWithShape?: boolean;
|
|
432
433
|
}
|
|
433
434
|
/**
|
|
434
435
|
* A shape's inner shadow (`spPr/a:effectLst/a:innerShdw`), resolved against the
|
|
435
|
-
* slide theme. Identical fields to {@link OuterShadow}
|
|
436
|
-
* carries the same `blurRad`/`dist`/`dir` + colour
|
|
436
|
+
* slide theme. Identical fields to {@link OuterShadow} (CT_InnerShadowEffect
|
|
437
|
+
* carries the same `blurRad`/`dist`/`dir` + colour), but a distinct type so a
|
|
437
438
|
* consumer can tell an inset shadow from a drop shadow. Distances in points,
|
|
438
439
|
* direction in degrees, matching the write-side `shadow: { type: 'inner' }`.
|
|
439
440
|
*/
|
|
@@ -451,7 +452,7 @@ interface InnerShadow {
|
|
|
451
452
|
angleDeg?: number;
|
|
452
453
|
}
|
|
453
454
|
/**
|
|
454
|
-
* A shape's glow effect (`spPr/a:effectLst/a:glow`)
|
|
455
|
+
* A shape's glow effect (`spPr/a:effectLst/a:glow`), a coloured halo, resolved
|
|
455
456
|
* against the slide theme. The write-side `glow` option is a text glow: it writes
|
|
456
457
|
* `a:glow` into each run's `a:rPr/a:effectLst`, which this does not read.
|
|
457
458
|
*/
|
|
@@ -465,10 +466,10 @@ interface Glow {
|
|
|
465
466
|
radiusPt?: number;
|
|
466
467
|
}
|
|
467
468
|
/**
|
|
468
|
-
* A shape's reflection effect (`spPr/a:effectLst/a:reflection`)
|
|
469
|
+
* A shape's reflection effect (`spPr/a:effectLst/a:reflection`): a mirrored fade
|
|
469
470
|
* beneath the shape. This library's writer authors none, so this is a **read-only**
|
|
470
471
|
* surface: a consumer that finds one should carry the part verbatim rather than
|
|
471
|
-
* regenerate it. Only the attributes a faithful replica needs are decoded
|
|
472
|
+
* regenerate it. Only the attributes a faithful replica needs are decoded:
|
|
472
473
|
* distances in points (÷ 12700), directions in degrees (÷ 60000), and the start/end
|
|
473
474
|
* alpha and position pairs as 0–1 fractions (the `1000`ths-of-a-percent source
|
|
474
475
|
* ÷ 100000). All fields are optional; an attribute absent from the source is omitted.
|
|
@@ -492,7 +493,7 @@ interface Reflection {
|
|
|
492
493
|
fadeAngleDeg?: number;
|
|
493
494
|
}
|
|
494
495
|
/**
|
|
495
|
-
* A shape's soft-edge effect (`spPr/a:effectLst/a:softEdge`)
|
|
496
|
+
* A shape's soft-edge effect (`spPr/a:effectLst/a:softEdge`): a feathered border.
|
|
496
497
|
* Like {@link Reflection}, the writer authors none, so carry it verbatim. `@rad`
|
|
497
498
|
* (the feather radius) ÷ 12700 → points.
|
|
498
499
|
*/
|
|
@@ -510,38 +511,90 @@ interface SoftEdge {
|
|
|
510
511
|
* must be scaled by the consumer against the shape's box. `arcTo` angles are in
|
|
511
512
|
* **degrees** (the raw `60000`ths-of-a-degree values divided by 60000), matching
|
|
512
513
|
* the write DSL's degree input.
|
|
514
|
+
*
|
|
515
|
+
* Any of them may instead be the name of a guide whose value it takes (`ST_AdjCoordinate` /
|
|
516
|
+
* `ST_AdjAngle`): one of the geometry's own {@link CustomGeometry.guides}, or a built-in such as
|
|
517
|
+
* `w`, `hc` or `cd4`. A name is returned as written, never resolved.
|
|
513
518
|
*/
|
|
514
519
|
type GeometryCommand = {
|
|
515
520
|
cmd: 'moveTo';
|
|
516
|
-
x:
|
|
517
|
-
y:
|
|
521
|
+
x: GeometryCoordinate;
|
|
522
|
+
y: GeometryCoordinate;
|
|
518
523
|
} | {
|
|
519
524
|
cmd: 'lnTo';
|
|
520
|
-
x:
|
|
521
|
-
y:
|
|
525
|
+
x: GeometryCoordinate;
|
|
526
|
+
y: GeometryCoordinate;
|
|
522
527
|
} | {
|
|
523
528
|
cmd: 'cubicBezTo';
|
|
524
|
-
x1:
|
|
525
|
-
y1:
|
|
526
|
-
x2:
|
|
527
|
-
y2:
|
|
528
|
-
x:
|
|
529
|
-
y:
|
|
529
|
+
x1: GeometryCoordinate;
|
|
530
|
+
y1: GeometryCoordinate;
|
|
531
|
+
x2: GeometryCoordinate;
|
|
532
|
+
y2: GeometryCoordinate;
|
|
533
|
+
x: GeometryCoordinate;
|
|
534
|
+
y: GeometryCoordinate;
|
|
530
535
|
} | {
|
|
531
536
|
cmd: 'quadBezTo';
|
|
532
|
-
x1:
|
|
533
|
-
y1:
|
|
534
|
-
x:
|
|
535
|
-
y:
|
|
537
|
+
x1: GeometryCoordinate;
|
|
538
|
+
y1: GeometryCoordinate;
|
|
539
|
+
x: GeometryCoordinate;
|
|
540
|
+
y: GeometryCoordinate;
|
|
536
541
|
} | {
|
|
537
542
|
cmd: 'arcTo';
|
|
538
|
-
wR:
|
|
539
|
-
hR:
|
|
540
|
-
stAng:
|
|
541
|
-
swAng:
|
|
543
|
+
wR: GeometryCoordinate;
|
|
544
|
+
hR: GeometryCoordinate;
|
|
545
|
+
stAng: GeometryCoordinate;
|
|
546
|
+
swAng: GeometryCoordinate;
|
|
542
547
|
} | {
|
|
543
548
|
cmd: 'close';
|
|
544
549
|
};
|
|
550
|
+
/**
|
|
551
|
+
* A custom-geometry coordinate (`ST_AdjCoordinate`): a number in the shape's own EMU space, or the
|
|
552
|
+
* name of a guide whose value it takes.
|
|
553
|
+
*/
|
|
554
|
+
type GeometryCoordinate = number | string;
|
|
555
|
+
/** One guide formula of a custom geometry (`a:gd`). */
|
|
556
|
+
interface CustomGeometryGuide {
|
|
557
|
+
/** The guide's name (`@name`), which positions and other formulas refer to. */
|
|
558
|
+
name: string;
|
|
559
|
+
/** The formula (`@fmla`) as written: an operation and its arguments, such as PowerPoint's multiply-divide of a site against the shape width. */
|
|
560
|
+
formula: string;
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* One adjust handle of a custom geometry: an XY handle (`a:ahXY`) bound to guides along each axis,
|
|
564
|
+
* or a polar one (`a:ahPolar`) bound along its radius and angle. Every bound is `null` when unset.
|
|
565
|
+
*/
|
|
566
|
+
type CustomGeometryAdjustHandle = {
|
|
567
|
+
kind: 'xy';
|
|
568
|
+
/** The handle's position (`a:pos`). */
|
|
569
|
+
x: GeometryCoordinate | null;
|
|
570
|
+
y: GeometryCoordinate | null;
|
|
571
|
+
gdRefX: string | null;
|
|
572
|
+
minX: GeometryCoordinate | null;
|
|
573
|
+
maxX: GeometryCoordinate | null;
|
|
574
|
+
gdRefY: string | null;
|
|
575
|
+
minY: GeometryCoordinate | null;
|
|
576
|
+
maxY: GeometryCoordinate | null;
|
|
577
|
+
} | {
|
|
578
|
+
kind: 'polar';
|
|
579
|
+
/** The handle's position (`a:pos`). */
|
|
580
|
+
x: GeometryCoordinate | null;
|
|
581
|
+
y: GeometryCoordinate | null;
|
|
582
|
+
gdRefR: string | null;
|
|
583
|
+
minR: GeometryCoordinate | null;
|
|
584
|
+
maxR: GeometryCoordinate | null;
|
|
585
|
+
gdRefAng: string | null;
|
|
586
|
+
/** The angle bounds in degrees (the 60000ths source ÷ 60000), or `null`. */
|
|
587
|
+
minAngDeg: number | null;
|
|
588
|
+
maxAngDeg: number | null;
|
|
589
|
+
};
|
|
590
|
+
/** One connection site of a custom geometry (`a:cxn`): where a connector can attach. */
|
|
591
|
+
interface CustomGeometryConnectionSite {
|
|
592
|
+
/** The angle a connector arrives at, in degrees (`@ang` ÷ 60000), or `null` when it names a guide. */
|
|
593
|
+
angleDeg: number | null;
|
|
594
|
+
/** The site's position (`a:pos`). */
|
|
595
|
+
x: GeometryCoordinate | null;
|
|
596
|
+
y: GeometryCoordinate | null;
|
|
597
|
+
}
|
|
545
598
|
/** One `<a:path>` of a custom geometry, with its path-unit viewport and render attrs. */
|
|
546
599
|
interface CustomGeometryPath {
|
|
547
600
|
/** Path-unit width (`a:path/@w`); the `x` denominator for this path's coords. Default `0`. */
|
|
@@ -552,7 +605,7 @@ interface CustomGeometryPath {
|
|
|
552
605
|
fill: string;
|
|
553
606
|
/** Whether the path is stroked (`a:path/@stroke`). Default `true`. */
|
|
554
607
|
stroke: boolean;
|
|
555
|
-
/** The path's segments in document order
|
|
608
|
+
/** The path's segments in document order; order *is* the geometry. */
|
|
556
609
|
commands: GeometryCommand[];
|
|
557
610
|
}
|
|
558
611
|
/**
|
|
@@ -565,6 +618,12 @@ interface CustomGeometryPath {
|
|
|
565
618
|
*/
|
|
566
619
|
interface CustomGeometry {
|
|
567
620
|
paths: CustomGeometryPath[];
|
|
621
|
+
/** The guide formulas (`a:gdLst/a:gd`), in document order; empty when there are none. */
|
|
622
|
+
guides: CustomGeometryGuide[];
|
|
623
|
+
/** The adjust handles (`a:ahLst`), in document order; empty when there are none. */
|
|
624
|
+
adjustHandles: CustomGeometryAdjustHandle[];
|
|
625
|
+
/** The connection sites (`a:cxnLst/a:cxn`), in document order; empty when there are none. */
|
|
626
|
+
connectionSites: CustomGeometryConnectionSite[];
|
|
568
627
|
}
|
|
569
628
|
/** A shape's resolved position and size in slide-absolute EMU. */
|
|
570
629
|
interface AbsoluteFrame {
|
|
@@ -582,12 +641,12 @@ interface AbsoluteFrame {
|
|
|
582
641
|
/**
|
|
583
642
|
* Why {@link Shape.absoluteFrame} could not resolve a frame.
|
|
584
643
|
*
|
|
585
|
-
* - `no-own-transform
|
|
644
|
+
* - `no-own-transform`: the shape states no `a:xfrm` of its own, or an incomplete
|
|
586
645
|
* one: typically a placeholder inheriting its box from the layout. Nothing is
|
|
587
646
|
* wrong with the deck; the read model reports what the shape itself states.
|
|
588
|
-
* - `group-transform-missing
|
|
647
|
+
* - `group-transform-missing`: an enclosing `p:grpSp` states no complete
|
|
589
648
|
* `a:off`/`a:ext` **and** `a:chOff`/`a:chExt` pair, so its child space is unknown.
|
|
590
|
-
* - `group-transform-degenerate
|
|
649
|
+
* - `group-transform-degenerate`: an enclosing group's `a:chExt` is zero on an
|
|
591
650
|
* axis, so the child-space ratio the mapping divides by is undefined.
|
|
592
651
|
*
|
|
593
652
|
* A missing group transform outranks a degenerate one wherever the two meet in
|
|
@@ -597,7 +656,7 @@ interface AbsoluteFrame {
|
|
|
597
656
|
type AbsoluteFrameFailure = 'no-own-transform' | 'group-transform-missing' | 'group-transform-degenerate';
|
|
598
657
|
/**
|
|
599
658
|
* A group shape's own child coordinate space (`p:grpSpPr/a:xfrm/a:chOff` and
|
|
600
|
-
* `a:chExt`) in EMU
|
|
659
|
+
* `a:chExt`) in EMU: the space its children's `a:off`/`a:ext` are authored in.
|
|
601
660
|
*
|
|
602
661
|
* Named after the OOXML attributes rather than in the `left`/`top`/`width`/
|
|
603
662
|
* `height` vocabulary the rest of the read model uses, because this is not a
|
|
@@ -639,8 +698,32 @@ type Recolor = {
|
|
|
639
698
|
kind: 'alphaModFix';
|
|
640
699
|
amount: number;
|
|
641
700
|
};
|
|
642
|
-
|
|
643
|
-
|
|
701
|
+
/**
|
|
702
|
+
* The audio or video a picture plays, as {@link Picture.media} reads it. PowerPoint authors
|
|
703
|
+
* embedded media as a `p:pic` whose blip is the poster frame and whose `p:nvPr` carries an
|
|
704
|
+
* `a:audioFile` or `a:videoFile`, bound to the media part twice: by the element's `r:link` and by
|
|
705
|
+
* the `p14:media` extension's `r:embed`.
|
|
706
|
+
*/
|
|
707
|
+
interface PictureMedia {
|
|
708
|
+
/** `audio` for `a:audioFile`, `video` for `a:videoFile`. */
|
|
709
|
+
kind: 'audio' | 'video';
|
|
710
|
+
/**
|
|
711
|
+
* Absolute partname of the media in the package: the `p14:media` `r:embed`, else the element's
|
|
712
|
+
* own `r:link` when it targets a part. `null` for linked or online media, whose target is
|
|
713
|
+
* outside the package ({@link link}).
|
|
714
|
+
*/
|
|
715
|
+
partName: string | null;
|
|
716
|
+
/** The media part's content type, or `null` when there is no part. */
|
|
717
|
+
contentType: string | null;
|
|
718
|
+
/** The external target of linked or online media (an `r:link` with `TargetMode="External"`), or `null`. */
|
|
719
|
+
link: string | null;
|
|
720
|
+
/**
|
|
721
|
+
* How many times the media plays, from the media node the slide's `p:timing` aims at this picture
|
|
722
|
+
* (`p:cMediaNode/p:cTn/@repeatCount`, in thousandths): `'indefinite'` loops until stopped, and
|
|
723
|
+
* `null` states none, which plays once.
|
|
724
|
+
*/
|
|
725
|
+
repeatCount: number | 'indefinite' | null;
|
|
726
|
+
}
|
|
644
727
|
/**
|
|
645
728
|
* A click hyperlink (`a:hlinkClick`), on a run or on a shape. A URL link carries an external
|
|
646
729
|
* {@link url}; a slide jump carries the internal {@link targetPartName} (the linked slide's part)
|
|
@@ -658,8 +741,6 @@ interface Hyperlink {
|
|
|
658
741
|
/** The relationship id (`@r:id`) backing the link, or `null` when the link is action-only. */
|
|
659
742
|
relId: string | null;
|
|
660
743
|
}
|
|
661
|
-
//#endregion
|
|
662
|
-
//#region src/read/api/table-style-resolve.d.ts
|
|
663
744
|
/**
|
|
664
745
|
* The `a:tblPr` condition flags that gate which style parts apply to a table.
|
|
665
746
|
* `firstRow`/`bandRow` are the ones PowerPoint turns on by default; the rest are
|
|
@@ -705,8 +786,6 @@ interface TableCellTextStyle {
|
|
|
705
786
|
/** `@i`, read the same way as {@link bold}. */
|
|
706
787
|
italic: boolean | null;
|
|
707
788
|
}
|
|
708
|
-
//#endregion
|
|
709
|
-
//#region src/read/api/text/run.d.ts
|
|
710
789
|
/**
|
|
711
790
|
* What a text body is read against, handed from a {@link TextFrame} to each paragraph and run: the
|
|
712
791
|
* part an edit marks dirty, the theme the `resolved*` getters resolve against, the relationships
|
|
@@ -718,8 +797,8 @@ interface TextContext {
|
|
|
718
797
|
/** The theme the text resolves against: the colour maps, `fontScheme`, and the layout and master roots. */
|
|
719
798
|
ctx: ThemeContext;
|
|
720
799
|
/**
|
|
721
|
-
* The owning part's relationships, or `null` for text read without them
|
|
722
|
-
* cached text
|
|
800
|
+
* The owning part's relationships, or `null` for text read without them (a SmartArt drawing's
|
|
801
|
+
* cached text), whose run hyperlinks then report their raw `@r:id`, `@action` and `@tooltip`.
|
|
723
802
|
*/
|
|
724
803
|
rels: Relationships | null;
|
|
725
804
|
/**
|
|
@@ -759,7 +838,7 @@ interface InheritedRunProps {
|
|
|
759
838
|
/**
|
|
760
839
|
* A paragraph's line spacing (`a:pPr/a:lnSpc`), in whichever of the two OOXML
|
|
761
840
|
* forms the file uses: an exact point height (`a:spcPts`) or a percentage of the
|
|
762
|
-
* single-line height (`a:spcPct
|
|
841
|
+
* single-line height (`a:spcPct`, e.g. `percent: 150` for 1.5× spacing).
|
|
763
842
|
*/
|
|
764
843
|
type LineSpacing = {
|
|
765
844
|
type: 'points';
|
|
@@ -770,7 +849,7 @@ type LineSpacing = {
|
|
|
770
849
|
};
|
|
771
850
|
/**
|
|
772
851
|
* The bullet's own font, size and colour (`a:buFont` / `a:buSzPct` / `a:buSzPts` /
|
|
773
|
-
* `a:buClr`)
|
|
852
|
+
* `a:buClr`): the properties that style the glyph or number itself rather than
|
|
774
853
|
* the text after it. Every field is `null` when the paragraph leaves it to be
|
|
775
854
|
* inherited from the list style.
|
|
776
855
|
*
|
|
@@ -778,7 +857,7 @@ type LineSpacing = {
|
|
|
778
857
|
* are carried alongside each kind rather than inside it.
|
|
779
858
|
*/
|
|
780
859
|
interface BulletStyle {
|
|
781
|
-
/** `a:buFont/@typeface
|
|
860
|
+
/** `a:buFont/@typeface`: the face the glyph is drawn in (a symbol font such as `Wingdings`), or `null`. */
|
|
782
861
|
font: string | null;
|
|
783
862
|
/** `a:buSzPct/@val` as a percentage of the run size (e.g. `80`; the raw attribute is thousandths of a percent), or `null`. */
|
|
784
863
|
sizePct: number | null;
|
|
@@ -792,11 +871,11 @@ interface BulletStyle {
|
|
|
792
871
|
* children. Discriminated on `kind`, which is one of the four mutually
|
|
793
872
|
* exclusive choices the schema allows:
|
|
794
873
|
*
|
|
795
|
-
* - `'none'
|
|
796
|
-
*
|
|
797
|
-
* - `'char'
|
|
798
|
-
* - `'autoNum'
|
|
799
|
-
* - `'picture'
|
|
874
|
+
* - `'none'`: `a:buNone`, the bullet explicitly suppressed. Carries no style,
|
|
875
|
+
* because there is no glyph to style.
|
|
876
|
+
* - `'char'`: `a:buChar`, a literal glyph.
|
|
877
|
+
* - `'autoNum'`: `a:buAutoNum`, an auto-numbered list.
|
|
878
|
+
* - `'picture'`: `a:buBlip`, an image used as the glyph.
|
|
800
879
|
*
|
|
801
880
|
* A paragraph that names none of them inherits its bullet from the list style and
|
|
802
881
|
* reports `null` rather than a member of this union.
|
|
@@ -805,7 +884,7 @@ type BulletDetail = {
|
|
|
805
884
|
kind: 'none';
|
|
806
885
|
} | ({
|
|
807
886
|
kind: 'char';
|
|
808
|
-
/** The glyph itself (`a:buChar/@char`)
|
|
887
|
+
/** The glyph itself (`a:buChar/@char`): a bare character, never a tagged string. */
|
|
809
888
|
char: string;
|
|
810
889
|
} & BulletStyle) | ({
|
|
811
890
|
kind: 'autoNum';
|
|
@@ -826,6 +905,28 @@ type BulletDetail = {
|
|
|
826
905
|
*/
|
|
827
906
|
imagePartName: string | null;
|
|
828
907
|
} & BulletStyle);
|
|
908
|
+
/** One tab stop of a paragraph (`a:pPr/a:tabLst/a:tab`). */
|
|
909
|
+
interface TabStop {
|
|
910
|
+
/** Position from the paragraph's left edge in points (`@pos` ÷ 12700), or `null` when unset. */
|
|
911
|
+
positionPt: number | null;
|
|
912
|
+
/** Alignment token (`@algn`: `l` | `ctr` | `r` | `dec`), or `null` when unset (the schema default is `l`). */
|
|
913
|
+
alignment: string | null;
|
|
914
|
+
}
|
|
915
|
+
/** A run's text outline (`a:rPr/a:ln`): the stroke drawn around each glyph. */
|
|
916
|
+
interface RunOutline {
|
|
917
|
+
/** Stroke width in points (`@w` ÷ 12700), or `null` when unset. */
|
|
918
|
+
widthPt: number | null;
|
|
919
|
+
/**
|
|
920
|
+
* `true` for an explicit no-outline (`a:ln/a:noFill`), which PowerPoint writes on ordinary text
|
|
921
|
+
* to say the glyphs are not stroked.
|
|
922
|
+
*/
|
|
923
|
+
noFill: boolean;
|
|
924
|
+
/**
|
|
925
|
+
* The stroke's solid colour (`a:ln/a:solidFill`), as written and resolved against the slide theme.
|
|
926
|
+
* Every field is `null` when the outline has no solid fill (`a:noFill`, a gradient, or none).
|
|
927
|
+
*/
|
|
928
|
+
colorRef: ColorRef;
|
|
929
|
+
}
|
|
829
930
|
/** One text run (`a:r`): a span of text with uniform character formatting. */
|
|
830
931
|
declare class Run {
|
|
831
932
|
#private;
|
|
@@ -855,7 +956,7 @@ declare class Run {
|
|
|
855
956
|
* its runs; nothing in it is resolved until a run asks.
|
|
856
957
|
*/
|
|
857
958
|
inherited: InheritedRunProps | null);
|
|
858
|
-
/** The run's text (`a:t`), verbatim
|
|
959
|
+
/** The run's text (`a:t`), verbatim; whitespace is not normalized. */
|
|
859
960
|
get text(): string;
|
|
860
961
|
set text(value: string);
|
|
861
962
|
/** Font size in points (`a:rPr/@sz` is hundredths of a point), or `null` if unset. */
|
|
@@ -874,7 +975,7 @@ declare class Run {
|
|
|
874
975
|
/**
|
|
875
976
|
* Strikethrough token (`a:rPr/@strike`: `noStrike` | `sngStrike` |
|
|
876
977
|
* `dblStrike`), or `null` when unset (inherited from the style). Surfaced as
|
|
877
|
-
* the raw token
|
|
978
|
+
* the raw token; `sngStrike` is the writer's single-strike value.
|
|
878
979
|
*/
|
|
879
980
|
get strike(): string | null;
|
|
880
981
|
/**
|
|
@@ -888,8 +989,8 @@ declare class Run {
|
|
|
888
989
|
* `30`), negative for subscript (`-40`), or `null` when unset. Reported as the
|
|
889
990
|
* percentage (`@baseline` ÷ 1000).
|
|
890
991
|
*
|
|
891
|
-
* `@baseline` is `a:ST_Percentage`, a union that also admits `"62.5%"`
|
|
892
|
-
* Strict profile has
|
|
992
|
+
* `@baseline` is `a:ST_Percentage`, a union that also admits `"62.5%"` (the only form the
|
|
993
|
+
* Strict profile has), so it is read through `parsePercentPoints` rather than as a bare number.
|
|
893
994
|
*/
|
|
894
995
|
get baselinePct(): number | null;
|
|
895
996
|
/**
|
|
@@ -898,6 +999,12 @@ declare class Run {
|
|
|
898
999
|
* the write-side `charSpacing` option.
|
|
899
1000
|
*/
|
|
900
1001
|
get charSpacingPt(): number | null;
|
|
1002
|
+
/**
|
|
1003
|
+
* Kerning threshold in points (`a:rPr/@kern`, authored in hundredths of a point), or `null`
|
|
1004
|
+
* when unset: text at this font size or larger is pair-kerned, and `0` means kerning is off.
|
|
1005
|
+
* PowerPoint's own default is `12`. The read counterpart of the write-side `kerning` option.
|
|
1006
|
+
*/
|
|
1007
|
+
get kerningPt(): number | null;
|
|
901
1008
|
/**
|
|
902
1009
|
* The run's highlight colour (`a:rPr/a:highlight`), resolved to a literal hex
|
|
903
1010
|
* through the owning slide's theme, or `null` when the run has no highlight or
|
|
@@ -914,6 +1021,45 @@ declare class Run {
|
|
|
914
1021
|
* `@r:id`/`@action`/`@tooltip` are reported (the target stays `null`).
|
|
915
1022
|
*/
|
|
916
1023
|
get hyperlink(): Hyperlink | null;
|
|
1024
|
+
/**
|
|
1025
|
+
* The run's language tag (`a:rPr/@lang`, e.g. `fr-FR`), or `null` when unset. Decides spelling,
|
|
1026
|
+
* hyphenation and font fallback. The read counterpart of the write-side `lang` option.
|
|
1027
|
+
*/
|
|
1028
|
+
get language(): string | null;
|
|
1029
|
+
/**
|
|
1030
|
+
* The run's own glow (`a:rPr/a:effectLst/a:glow`), resolved against the slide theme, or `null`.
|
|
1031
|
+
* The read counterpart of the write-side text `glow` option; a shape's glow is `Shape.glow`.
|
|
1032
|
+
*/
|
|
1033
|
+
get glow(): Glow | null;
|
|
1034
|
+
/**
|
|
1035
|
+
* The run's own outer shadow (`a:rPr/a:effectLst/a:outerShdw`), resolved against the slide
|
|
1036
|
+
* theme, or `null`. The read counterpart of a run's `shadow` option and of a table cell's,
|
|
1037
|
+
* which writes it on every run of the cell; a shape's shadow is `Shape.shadow`.
|
|
1038
|
+
*/
|
|
1039
|
+
get shadow(): OuterShadow | null;
|
|
1040
|
+
/**
|
|
1041
|
+
* The run's own inner shadow (`a:rPr/a:effectLst/a:innerShdw`), resolved against the slide
|
|
1042
|
+
* theme, or `null`. What a run's `shadow: { type: 'inner' }` writes.
|
|
1043
|
+
*/
|
|
1044
|
+
get innerShadow(): InnerShadow | null;
|
|
1045
|
+
/** The run's text outline (`a:rPr/a:ln`), or `null` when it has none. The read counterpart of `outline`. */
|
|
1046
|
+
get outline(): RunOutline | null;
|
|
1047
|
+
/**
|
|
1048
|
+
* The underline's own colour (`a:rPr/a:uFill/a:solidFill`), as written and resolved, or `null`
|
|
1049
|
+
* when the underline follows the text colour. The read counterpart of `underline.color`.
|
|
1050
|
+
*/
|
|
1051
|
+
get underlineColor(): ColorRef | null;
|
|
1052
|
+
/**
|
|
1053
|
+
* The East Asian typeface (`a:rPr/a:ea/@typeface`), or `null` when unset. {@link fontName} is the
|
|
1054
|
+
* Latin slot. The read counterpart of the write-side `fontFaceEA` option.
|
|
1055
|
+
*/
|
|
1056
|
+
get eastAsianFontName(): string | null;
|
|
1057
|
+
/**
|
|
1058
|
+
* How many line breaks (`a:br`) sit directly before this run in its paragraph, with no run or
|
|
1059
|
+
* field between them. A soft break is not a run, so without this the runs on either side of one
|
|
1060
|
+
* read as plain neighbours. The read counterpart of the write-side `softBreakBefore` option.
|
|
1061
|
+
*/
|
|
1062
|
+
get breaksBefore(): number;
|
|
917
1063
|
/** Latin typeface name (`a:rPr/a:latin/@typeface`), or `null` when unset. */
|
|
918
1064
|
get fontName(): string | null;
|
|
919
1065
|
set fontName(value: string | null);
|
|
@@ -928,7 +1074,7 @@ declare class Run {
|
|
|
928
1074
|
* The colour this run effectively renders, resolved against the owning slide's
|
|
929
1075
|
* theme to a literal hex. It is the run's own solid fill
|
|
930
1076
|
* ({@link color}/{@link schemeColor}) when set; otherwise the shape's
|
|
931
|
-
* `p:style/a:fontRef` colour, then
|
|
1077
|
+
* `p:style/a:fontRef` colour, then (for a run inside a placeholder) the colour
|
|
932
1078
|
* it inherits from the placeholder/list-style chain (layout → master placeholder
|
|
933
1079
|
* `a:lstStyle` → master `p:txStyles`), then the presentation's
|
|
934
1080
|
* `p:defaultTextStyle`. `null` when the run sets no colour and inherits none, or the
|
|
@@ -936,8 +1082,11 @@ declare class Run {
|
|
|
936
1082
|
* `null` too when the run's own fill is not a solid colour (`a:noFill`, a gradient):
|
|
937
1083
|
* the run decides its own colour then, and the one it would otherwise inherit is not
|
|
938
1084
|
* what it paints in, the rule `Shape.resolvedFill` and `TableCell.resolvedFill` follow.
|
|
939
|
-
*
|
|
940
|
-
*
|
|
1085
|
+
* A run with a click hyperlink (`a:hlinkClick`) and no fill of its own is painted in the
|
|
1086
|
+
* theme's `hlink` colour instead, resolved through the slide's colour map, unless the link
|
|
1087
|
+
* carries the 2018 `ahyp:hlinkClr val="tx"` extension, which asks for the text colour above.
|
|
1088
|
+
* The returned {@link ResolvedColor} carries `effectiveHex`, the base colour with
|
|
1089
|
+
* its child transforms (`lumMod`/`shade`/…) applied, for the final rendered colour.
|
|
941
1090
|
*/
|
|
942
1091
|
get resolvedColor(): ResolvedColor | null;
|
|
943
1092
|
/**
|
|
@@ -945,20 +1094,21 @@ declare class Run {
|
|
|
945
1094
|
* ({@link fontSizePt}) when set; otherwise, for a run inside a placeholder, the
|
|
946
1095
|
* size it inherits from the placeholder/list-style chain (paragraph `a:defRPr` →
|
|
947
1096
|
* slide `a:lstStyle` → layout → master placeholder `a:lstStyle` → master
|
|
948
|
-
* `p:txStyles`). `null` when the run sets no size and inherits none
|
|
1097
|
+
* `p:txStyles`). `null` when the run sets no size and inherits none. This is the
|
|
949
1098
|
* resolved counterpart of {@link fontSizePt}, which reports only the run's own value.
|
|
950
1099
|
*/
|
|
951
1100
|
get resolvedSizePt(): number | null;
|
|
952
1101
|
/**
|
|
953
1102
|
* The typeface this run effectively renders, resolved to a literal face name. It
|
|
954
1103
|
* is the run's own `a:latin` ({@link fontName}) when set; otherwise the face named
|
|
955
|
-
* by the shape's `p:style/a:fontRef` (`idx` → theme major/minor font), then
|
|
956
|
-
* run inside a placeholder
|
|
1104
|
+
* by the shape's `p:style/a:fontRef` (`idx` → theme major/minor font), then (for a
|
|
1105
|
+
* run inside a placeholder) the face it inherits from the placeholder/list-style
|
|
957
1106
|
* chain, then the presentation's `p:defaultTextStyle`. A `+mj-*`/`+mn-*`
|
|
958
|
-
* major/minor theme-font token
|
|
1107
|
+
* major/minor theme-font token, on the run itself or reached through the chain,
|
|
959
1108
|
* is resolved through the theme `fontScheme` to its concrete face. `null` when the
|
|
960
|
-
* run names no face and inherits none, or a token cannot be resolved
|
|
961
|
-
* counterpart of {@link fontName}, which reports the raw `@typeface` (possibly a
|
|
1109
|
+
* run names no face and inherits none, or a token cannot be resolved. This is the
|
|
1110
|
+
* resolved counterpart of {@link fontName}, which reports the raw `@typeface` (possibly a
|
|
1111
|
+
* token).
|
|
962
1112
|
*/
|
|
963
1113
|
get resolvedFontFace(): string | null;
|
|
964
1114
|
/**
|
|
@@ -966,7 +1116,7 @@ declare class Run {
|
|
|
966
1116
|
* ({@link bold}) when set; otherwise, for a run inside a placeholder, the bold
|
|
967
1117
|
* state it inherits from the placeholder/list-style chain (paragraph `a:defRPr` →
|
|
968
1118
|
* slide `a:lstStyle` → layout → master placeholder `a:lstStyle` → master
|
|
969
|
-
* `p:txStyles`). `null` when the run sets no `@b` and inherits none
|
|
1119
|
+
* `p:txStyles`). `null` when the run sets no `@b` and inherits none. This is the
|
|
970
1120
|
* resolved counterpart of {@link bold}, which reports only the run's own value.
|
|
971
1121
|
*/
|
|
972
1122
|
get resolvedBold(): boolean | null;
|
|
@@ -975,7 +1125,7 @@ declare class Run {
|
|
|
975
1125
|
* ({@link italic}) when set; otherwise, for a run inside a placeholder, the italic
|
|
976
1126
|
* state it inherits from the placeholder/list-style chain (paragraph `a:defRPr` →
|
|
977
1127
|
* slide `a:lstStyle` → layout → master placeholder `a:lstStyle` → master
|
|
978
|
-
* `p:txStyles`). `null` when the run sets no `@i` and inherits none
|
|
1128
|
+
* `p:txStyles`). `null` when the run sets no `@i` and inherits none. This is the
|
|
979
1129
|
* resolved counterpart of {@link italic}, and the twin of {@link resolvedBold}:
|
|
980
1130
|
* `@b` and `@i` are siblings a master text style states together, so a deck that
|
|
981
1131
|
* can be authored with an inherited italic can be read back with one.
|
|
@@ -986,8 +1136,36 @@ declare class Run {
|
|
|
986
1136
|
/** Mark the owning part dirty so `save()` reserializes it. Call after mutating {@link element_}. */
|
|
987
1137
|
markDirty(): void;
|
|
988
1138
|
}
|
|
989
|
-
|
|
990
|
-
|
|
1139
|
+
/**
|
|
1140
|
+
* One text field (`a:fld`): text PowerPoint computes as it renders, such as a slide number
|
|
1141
|
+
* (`slidenum`) or a date (`datetime1`). A field carries the same `a:rPr` a run does, so it reads
|
|
1142
|
+
* and resolves its formatting like one. {@link text} is the rendering PowerPoint last cached,
|
|
1143
|
+
* which it recomputes on open.
|
|
1144
|
+
*/
|
|
1145
|
+
declare class Field extends Run {
|
|
1146
|
+
/** How many of the paragraph's {@link Paragraph.runs} come before it, which places it among them. */
|
|
1147
|
+
readonly runIndex: number;
|
|
1148
|
+
constructor(element: Element, context: TextContext, inherited: InheritedRunProps | null,
|
|
1149
|
+
/** How many of the paragraph's {@link Paragraph.runs} come before it, which places it among them. */
|
|
1150
|
+
runIndex: number);
|
|
1151
|
+
/** The field type (`@type`), such as `slidenum` or `datetime1`, or `null` when unset. */
|
|
1152
|
+
get type(): string | null;
|
|
1153
|
+
}
|
|
1154
|
+
/**
|
|
1155
|
+
* One OMML equation in a paragraph (an `a14:m` element), in the form `TextProps.math` and `inline`
|
|
1156
|
+
* take back.
|
|
1157
|
+
*/
|
|
1158
|
+
interface Equation {
|
|
1159
|
+
/**
|
|
1160
|
+
* The equation's OMML as written: an `m:oMathPara` for a display equation, an `m:oMath` for an
|
|
1161
|
+
* inline one. It declares every namespace it uses, PowerPoint's `a:` run properties included.
|
|
1162
|
+
*/
|
|
1163
|
+
omml: string;
|
|
1164
|
+
/** Whether the equation flows between the paragraph's runs (a bare `m:oMath`) rather than standing as a display block (`m:oMathPara`). */
|
|
1165
|
+
inline: boolean;
|
|
1166
|
+
/** How many of the paragraph's {@link Paragraph.runs} come before it, which places it among them. */
|
|
1167
|
+
runIndex: number;
|
|
1168
|
+
}
|
|
991
1169
|
/** One paragraph (`a:p`) of a text frame. */
|
|
992
1170
|
declare class Paragraph {
|
|
993
1171
|
#private;
|
|
@@ -1007,8 +1185,24 @@ declare class Paragraph {
|
|
|
1007
1185
|
* runs inherit through. Read only when {@link TextContext.inherit} is set.
|
|
1008
1186
|
*/
|
|
1009
1187
|
slideLstStyle: Element | null);
|
|
1010
|
-
/** The runs (`a:r`) in document order. Fields (`a:fld`)
|
|
1188
|
+
/** The runs (`a:r`) in document order. Fields (`a:fld`) are not runs (see {@link fields}), nor are breaks. */
|
|
1011
1189
|
get runs(): Run[];
|
|
1190
|
+
/**
|
|
1191
|
+
* The OMML equations (`a14:m`) in document order. An equation is neither a run nor part of
|
|
1192
|
+
* {@link text}; each says how many runs precede it, so an inline one keeps its place.
|
|
1193
|
+
*/
|
|
1194
|
+
get equations(): Equation[];
|
|
1195
|
+
/**
|
|
1196
|
+
* The fields (`a:fld`) in document order, each read like a run; see {@link Field}. Each says how
|
|
1197
|
+
* many runs precede it, so a field between runs keeps its place.
|
|
1198
|
+
*/
|
|
1199
|
+
get fields(): Field[];
|
|
1200
|
+
/**
|
|
1201
|
+
* The language of the paragraph's end mark (`a:endParaRPr/@lang`, e.g. `fr-FR`), or `null` when
|
|
1202
|
+
* unset. It is what text typed at the end of the paragraph, or into an empty one, is spelled in.
|
|
1203
|
+
* The write side states it from the text's `lang` option.
|
|
1204
|
+
*/
|
|
1205
|
+
get endLanguage(): string | null;
|
|
1012
1206
|
/** Indent level (`a:pPr/@lvl`), 0 when unset. */
|
|
1013
1207
|
get level(): number;
|
|
1014
1208
|
/**
|
|
@@ -1035,7 +1229,41 @@ declare class Paragraph {
|
|
|
1035
1229
|
/** First-line indent in points (`a:pPr/@indent` is EMU; negative for a hanging indent), or `null` when unset. */
|
|
1036
1230
|
get indentPt(): number | null;
|
|
1037
1231
|
/**
|
|
1038
|
-
*
|
|
1232
|
+
* The alignment the paragraph renders with: its own, else the first its level inherits through
|
|
1233
|
+
* the text body's `a:lstStyle`, the placeholder's layout and master list styles, the master's
|
|
1234
|
+
* `p:txStyles` and the presentation's `p:defaultTextStyle`, the chain {@link Run.resolvedSizePt}
|
|
1235
|
+
* walks. `null` when nothing in the chain states one (PowerPoint then aligns left).
|
|
1236
|
+
*/
|
|
1237
|
+
get resolvedAlign(): string | null;
|
|
1238
|
+
/** The left margin in points the paragraph renders with, resolved as {@link resolvedAlign} is. */
|
|
1239
|
+
get resolvedMarginLeftPt(): number | null;
|
|
1240
|
+
/** The first-line indent in points the paragraph renders with, resolved as {@link resolvedAlign} is. */
|
|
1241
|
+
get resolvedIndentPt(): number | null;
|
|
1242
|
+
/** The line spacing the paragraph renders with, resolved as {@link resolvedAlign} is. */
|
|
1243
|
+
get resolvedLineSpacing(): LineSpacing | null;
|
|
1244
|
+
/** The space before the paragraph in points, resolved as {@link resolvedAlign} is. */
|
|
1245
|
+
get resolvedSpaceBeforePt(): number | null;
|
|
1246
|
+
/** The space after the paragraph in points, resolved as {@link resolvedAlign} is. */
|
|
1247
|
+
get resolvedSpaceAfterPt(): number | null;
|
|
1248
|
+
/**
|
|
1249
|
+
* The bullet the paragraph renders with: its own {@link bulletDetail}, else the first bullet its
|
|
1250
|
+
* level inherits, resolved as {@link resolvedAlign} is. A picture bullet from an inherited tier
|
|
1251
|
+
* reads with `imagePartName: null`, its image being a relationship of the layout or master.
|
|
1252
|
+
* `null` when nothing in the chain names one.
|
|
1253
|
+
*/
|
|
1254
|
+
get resolvedBulletDetail(): BulletDetail | null;
|
|
1255
|
+
/**
|
|
1256
|
+
* Right-to-left paragraph direction (`a:pPr/@rtl`), or `null` when unset (left to right). The
|
|
1257
|
+
* read counterpart of the write-side `rtlMode` option.
|
|
1258
|
+
*/
|
|
1259
|
+
get rtl(): boolean | null;
|
|
1260
|
+
/**
|
|
1261
|
+
* The paragraph's own tab stops (`a:pPr/a:tabLst/a:tab`) in document order, or `null` when it
|
|
1262
|
+
* states no tab list and inherits one. The read counterpart of the write-side `tabStops` option.
|
|
1263
|
+
*/
|
|
1264
|
+
get tabStops(): TabStop[] | null;
|
|
1265
|
+
/**
|
|
1266
|
+
* This paragraph's bullet: its kind, and for a drawn bullet the glyph, the
|
|
1039
1267
|
* numbering start, and the bullet's own font/size/colour. `null` when the
|
|
1040
1268
|
* paragraph names no bullet at all and inherits one from the list style.
|
|
1041
1269
|
*
|
|
@@ -1043,7 +1271,7 @@ declare class Paragraph {
|
|
|
1043
1271
|
* previous `bullet` accessor reported `'none'` / `'char:•'` /
|
|
1044
1272
|
* `'autoNum:arabicPeriod'`, and that shape is ambiguous when the glyph is
|
|
1045
1273
|
* itself a colon; worse, it reads as a bare glyph, which is exactly how the
|
|
1046
|
-
* script converter first consumed it
|
|
1274
|
+
* script converter first consumed it: `'none'.codePointAt(0)` put a literal
|
|
1047
1275
|
* `n` bullet on every converted deck, silently. See {@link BulletDetail}.
|
|
1048
1276
|
*/
|
|
1049
1277
|
get bulletDetail(): BulletDetail | null;
|
|
@@ -1055,7 +1283,7 @@ declare class Paragraph {
|
|
|
1055
1283
|
/**
|
|
1056
1284
|
* Replace **this paragraph's** content with a single run, preserving the character
|
|
1057
1285
|
* formatting (`a:rPr`) of its first existing run and leaving its `a:pPr` (level,
|
|
1058
|
-
* alignment, bullet) alone. Sibling paragraphs are untouched
|
|
1286
|
+
* alignment, bullet) alone. Sibling paragraphs are untouched. That is the difference from
|
|
1059
1287
|
* {@link TextFrame.text}, which collapses the whole body to one paragraph.
|
|
1060
1288
|
*/
|
|
1061
1289
|
set text(value: string);
|
|
@@ -1064,13 +1292,10 @@ declare class Paragraph {
|
|
|
1064
1292
|
/** Mark the owning part dirty so `save()` reserializes it. Call after mutating {@link element_}. */
|
|
1065
1293
|
markDirty(): void;
|
|
1066
1294
|
}
|
|
1067
|
-
/** A shape's text frame (`p:txBody`): an ordered list of paragraphs. */
|
|
1068
|
-
//#endregion
|
|
1069
|
-
//#region src/read/api/text/frame.d.ts
|
|
1070
1295
|
/**
|
|
1071
1296
|
* A text frame's body properties (`a:bodyPr`), as read from a shape. Carries the
|
|
1072
|
-
* inset/anchor/vertical-text settings that govern where text sits inside its box
|
|
1073
|
-
*
|
|
1297
|
+
* inset/anchor/vertical-text settings that govern where text sits inside its box:
|
|
1298
|
+
* the difference between a label that clears a left rail and one that overlaps
|
|
1074
1299
|
* it. Only **explicitly set** attributes are reported; an absent inset means the
|
|
1075
1300
|
* PowerPoint default (`lIns`/`rIns` = 0.1", `tIns`/`bIns` = 0.05").
|
|
1076
1301
|
*/
|
|
@@ -1088,35 +1313,66 @@ interface BodyProperties {
|
|
|
1088
1313
|
top?: number;
|
|
1089
1314
|
bottom?: number;
|
|
1090
1315
|
};
|
|
1316
|
+
/** Number of text columns (`@numCol`), or `null` when unset (one column). The write side's `columns`. */
|
|
1317
|
+
columns: number | null;
|
|
1318
|
+
/** Space between columns in points (`@spcCol` ÷ 12700), or `null` when unset. The write side's `columnSpacing`. */
|
|
1319
|
+
columnSpacingPt: number | null;
|
|
1320
|
+
/** Preset WordArt warp (`a:prstTxWarp/@prst`, e.g. `textArchUp`), or `null` when none. The write side's `textWarp`. */
|
|
1321
|
+
textWarp: string | null;
|
|
1322
|
+
}
|
|
1323
|
+
/**
|
|
1324
|
+
* The character defaults a frame's own list style states for one level
|
|
1325
|
+
* (`a:lstStyle/a:lvlNpPr/a:defRPr`). Each field is `null` when that `a:defRPr` does not state it.
|
|
1326
|
+
*/
|
|
1327
|
+
interface ListStyleDefaults {
|
|
1328
|
+
/** `@sz` in points, or `null`. */
|
|
1329
|
+
fontSizePt: number | null;
|
|
1330
|
+
/** `a:latin/@typeface`, as written (a `+mj-lt` token stays a token), or `null`. */
|
|
1331
|
+
fontName: string | null;
|
|
1332
|
+
/** `@b`, or `null`. */
|
|
1333
|
+
bold: boolean | null;
|
|
1334
|
+
/** `@i`, or `null`. */
|
|
1335
|
+
italic: boolean | null;
|
|
1336
|
+
/** The `a:solidFill` colour, or `null` when the level states no solid fill. */
|
|
1337
|
+
colorRef: ColorRef | null;
|
|
1091
1338
|
}
|
|
1092
1339
|
/**
|
|
1093
1340
|
* A text frame's vertical-autofit mode, read from its `a:bodyPr` autofit child:
|
|
1094
|
-
* - `'none'
|
|
1095
|
-
*
|
|
1096
|
-
* - `'normAutofit'
|
|
1097
|
-
* - `'spAutoFit'
|
|
1341
|
+
* - `'none'`: `a:noAutofit`, or no autofit child at all (the box has a fixed
|
|
1342
|
+
* size and text can overflow); write-side `fit: 'none'`.
|
|
1343
|
+
* - `'normAutofit'`: `a:normAutofit` (shrink text to fit); write-side `fit: 'shrink'`.
|
|
1344
|
+
* - `'spAutoFit'`: `a:spAutoFit` (resize the shape to fit text); write-side `fit: 'resize'`.
|
|
1098
1345
|
*/
|
|
1099
1346
|
type AutofitMode = 'none' | 'normAutofit' | 'spAutoFit';
|
|
1100
1347
|
declare class TextFrame {
|
|
1101
1348
|
#private;
|
|
1102
1349
|
private readonly txBody;
|
|
1103
1350
|
/**
|
|
1104
|
-
* What the frame is read against
|
|
1105
|
-
* inheritance its runs fall back through
|
|
1351
|
+
* What the frame is read against (its part, the theme, the part's relationships and the
|
|
1352
|
+
* inheritance its runs fall back through), handed on to each {@link Paragraph} and {@link Run}.
|
|
1106
1353
|
*/
|
|
1107
1354
|
private readonly context;
|
|
1108
1355
|
constructor(txBody: Element,
|
|
1109
1356
|
/**
|
|
1110
|
-
* What the frame is read against
|
|
1111
|
-
* inheritance its runs fall back through
|
|
1357
|
+
* What the frame is read against (its part, the theme, the part's relationships and the
|
|
1358
|
+
* inheritance its runs fall back through), handed on to each {@link Paragraph} and {@link Run}.
|
|
1112
1359
|
*/
|
|
1113
1360
|
context: TextContext);
|
|
1114
1361
|
/** Paragraphs (`a:p`) in document order. */
|
|
1115
1362
|
get paragraphs(): Paragraph[];
|
|
1363
|
+
/**
|
|
1364
|
+
* The character defaults this frame's own list style states for paragraphs at `level`
|
|
1365
|
+
* (0-based): `a:lstStyle/a:lvlNpPr/a:defRPr`, else `a:defPPr/a:defRPr`. `null` when the frame
|
|
1366
|
+
* has no list style or it states no defaults for that level.
|
|
1367
|
+
*
|
|
1368
|
+
* Only the frame's own tier. What a run inherits through it, and through a placeholder's
|
|
1369
|
+
* layout and master, is the run's `resolved*` reads.
|
|
1370
|
+
*/
|
|
1371
|
+
listStyleDefaults(level?: number): ListStyleDefaults | null;
|
|
1116
1372
|
/**
|
|
1117
1373
|
* The frame's body properties (`a:bodyPr`: insets, anchor, vertical text), or
|
|
1118
1374
|
* `null` when there is no `a:bodyPr`. Only explicitly-set insets are reported
|
|
1119
|
-
* (a missing side is the PowerPoint default
|
|
1375
|
+
* (a missing side is the PowerPoint default; see {@link BodyProperties}).
|
|
1120
1376
|
*/
|
|
1121
1377
|
get bodyProperties(): BodyProperties | null;
|
|
1122
1378
|
/**
|
|
@@ -1125,14 +1381,14 @@ declare class TextFrame {
|
|
|
1125
1381
|
* layout → master placeholder `a:bodyPr`. `null` when nothing in the chain sets
|
|
1126
1382
|
* one (PowerPoint then defaults to top). Unlike {@link bodyProperties}'s
|
|
1127
1383
|
* `anchor` (own attribute only), this surfaces the inherited anchor a
|
|
1128
|
-
* placeholder title relies on
|
|
1384
|
+
* placeholder title relies on: the difference between a top- and
|
|
1129
1385
|
* centre-anchored title that own-attribute reads alone cannot see.
|
|
1130
1386
|
*/
|
|
1131
1387
|
get resolvedAnchor(): string | null;
|
|
1132
1388
|
/**
|
|
1133
1389
|
* The frame's vertical-autofit mode (`a:bodyPr` autofit child), or `null` when
|
|
1134
|
-
* there is no `a:bodyPr`. A `bodyPr` with no autofit child
|
|
1135
|
-
* `a:noAutofit
|
|
1390
|
+
* there is no `a:bodyPr`. A `bodyPr` with no autofit child, or an explicit
|
|
1391
|
+
* `a:noAutofit`, reads `'none'`. See {@link AutofitMode}. This is the deep-model
|
|
1136
1392
|
* counterpart of `inspectPptx`'s per-shape `autofit`; unlike the shallow surface
|
|
1137
1393
|
* it hangs off the navigable text frame.
|
|
1138
1394
|
*/
|
|
@@ -1140,8 +1396,8 @@ declare class TextFrame {
|
|
|
1140
1396
|
/**
|
|
1141
1397
|
* The baked shrink scale of a `normAutofit` frame as a percent (62.5 = 62.5%),
|
|
1142
1398
|
* or `null` when the frame has no `a:normAutofit` or bakes no scale. A bare
|
|
1143
|
-
* `<a:normAutofit/>` (write-side `fit: 'shrink'`) carries no scale
|
|
1144
|
-
* computes it on edit and draws at 100% until then
|
|
1399
|
+
* `<a:normAutofit/>` (write-side `fit: 'shrink'`) carries no scale (PowerPoint
|
|
1400
|
+
* computes it on edit and draws at 100% until then), so it too reads `null`; an
|
|
1145
1401
|
* explicit scale comes from `fit: { type: 'shrink', fontScale }`.
|
|
1146
1402
|
*/
|
|
1147
1403
|
get autofitFontScale(): number | null;
|
|
@@ -1165,8 +1421,6 @@ declare class TextFrame {
|
|
|
1165
1421
|
/** Mark the owning part dirty so `save()` reserializes it. Call after mutating {@link element_}. */
|
|
1166
1422
|
markDirty(): void;
|
|
1167
1423
|
}
|
|
1168
|
-
//#endregion
|
|
1169
|
-
//#region src/read/api/shapes/host.d.ts
|
|
1170
1424
|
/** The part-level surface a {@link Shape} resolves against. */
|
|
1171
1425
|
interface ShapeHost {
|
|
1172
1426
|
/** The OPC part holding the shape tree (`p:sld` / `p:sldLayout` / `p:sldMaster`). */
|
|
@@ -1175,28 +1429,26 @@ interface ShapeHost {
|
|
|
1175
1429
|
readonly partName: string;
|
|
1176
1430
|
/** The package the host belongs to, for reaching a referenced part (image, chart, …). */
|
|
1177
1431
|
readonly opc: OpcPackage;
|
|
1178
|
-
/** {@link part}'s relationships
|
|
1432
|
+
/** {@link part}'s relationships: image embeds, hyperlinks, chart references. */
|
|
1179
1433
|
readonly relationships: Relationships;
|
|
1180
1434
|
/** The host's resolved colour/font context, backing every `resolved*` getter. */
|
|
1181
1435
|
themeContext(): ThemeContext;
|
|
1182
|
-
/** The shape anywhere in this host's tree with the given drawing id, or `undefined
|
|
1183
|
-
shapeByIdDeep(id: number): AnyShape | undefined;
|
|
1436
|
+
/** The shape anywhere in this host's tree with the given drawing id, or `undefined` (always, for `null`). */
|
|
1437
|
+
shapeByIdDeep(id: number | null): AnyShape | undefined;
|
|
1184
1438
|
}
|
|
1185
|
-
|
|
1186
|
-
//#region src/read/api/shapes/base.d.ts
|
|
1187
|
-
/** Common base for every shape in a shape tree — a slide's, a layout's, or a master's. */
|
|
1439
|
+
/** Common base for every shape in a shape tree: a slide's, a layout's, or a master's. */
|
|
1188
1440
|
declare abstract class Shape {
|
|
1189
1441
|
#private;
|
|
1190
1442
|
protected readonly element: Element;
|
|
1191
1443
|
/**
|
|
1192
|
-
* The part that owns this shape's tree
|
|
1444
|
+
* The part that owns this shape's tree: a `Slide`, a `SlideLayout`, or a
|
|
1193
1445
|
* `SlideMaster`. Narrow it with `instanceof` when you need the concrete class;
|
|
1194
1446
|
* {@link ShapeHost.partName} tells the tiers apart without one.
|
|
1195
1447
|
*/
|
|
1196
1448
|
readonly host: ShapeHost;
|
|
1197
1449
|
constructor(element: Element,
|
|
1198
1450
|
/**
|
|
1199
|
-
* The part that owns this shape's tree
|
|
1451
|
+
* The part that owns this shape's tree: a `Slide`, a `SlideLayout`, or a
|
|
1200
1452
|
* `SlideMaster`. Narrow it with `instanceof` when you need the concrete class;
|
|
1201
1453
|
* {@link ShapeHost.partName} tells the tiers apart without one.
|
|
1202
1454
|
*/
|
|
@@ -1239,11 +1491,18 @@ declare abstract class Shape {
|
|
|
1239
1491
|
/**
|
|
1240
1492
|
* Whether the shape is explicitly hidden (`p:cNvPr/@hidden="1"`); `false` when
|
|
1241
1493
|
* the attribute is unset. A hidden shape stays in the slide XML but is not
|
|
1242
|
-
* rendered
|
|
1494
|
+
* rendered. Decks use it as a fallback layer (e.g. a duotone-recolour source
|
|
1243
1495
|
* sitting behind the visible icon), so a faithful reader must distinguish it
|
|
1244
1496
|
* from the drawn shapes.
|
|
1245
1497
|
*/
|
|
1246
1498
|
get hidden(): boolean;
|
|
1499
|
+
/**
|
|
1500
|
+
* The shape's lock flags: the attributes of the locking element under its non-visual drawing
|
|
1501
|
+
* properties (`a:spLocks`, `a:picLocks`, `a:cxnSpLocks`, `a:graphicFrameLocks` or
|
|
1502
|
+
* `a:grpSpLocks`), each as the boolean it states, keyed by attribute name (`noMove`, `noGrp`, …).
|
|
1503
|
+
* `null` when the shape has no locking element. The read counterpart of `objectLock`.
|
|
1504
|
+
*/
|
|
1505
|
+
get locks(): Record<string, boolean> | null;
|
|
1247
1506
|
/**
|
|
1248
1507
|
* The shape's alt-text description (`p:cNvPr/@descr`), or `null` when unset.
|
|
1249
1508
|
* This is the accessibility primitive a screen reader announces; an audit or
|
|
@@ -1266,7 +1525,7 @@ declare abstract class Shape {
|
|
|
1266
1525
|
/**
|
|
1267
1526
|
* Whether the shape is flagged **decorative** (`p:cNvPr/a:extLst/a:ext`
|
|
1268
1527
|
* uri `{C183D7F6-…}` / `adec:decorative@val`), PowerPoint's "Mark as
|
|
1269
|
-
* decorative"
|
|
1528
|
+
* decorative": a purely visual element assistive tech should skip. `false`
|
|
1270
1529
|
* when the extension is absent. A decorative shape typically has no
|
|
1271
1530
|
* {@link description}; the two are alternatives, not companions.
|
|
1272
1531
|
*/
|
|
@@ -1300,8 +1559,8 @@ declare abstract class Shape {
|
|
|
1300
1559
|
get resolvedFrame(): ResolvedFrame | null;
|
|
1301
1560
|
/**
|
|
1302
1561
|
* Clockwise rotation in degrees (`a:xfrm/@rot` ÷ 60000), or `null` when the
|
|
1303
|
-
* shape has no own transform. A present xfrm with no `@rot` reads as `0`, so
|
|
1304
|
-
*
|
|
1562
|
+
* shape has no own transform. A present xfrm with no `@rot` reads as `0`, so,
|
|
1563
|
+
* mirroring {@link left}/{@link top}/{@link width}/{@link height}, `null`
|
|
1305
1564
|
* ("inherits layout geometry") stays distinct from `0` ("has a transform, not
|
|
1306
1565
|
* rotated"). The value is faithful to the XML and not normalised to a signed
|
|
1307
1566
|
* range, so a `@rot` past 360° (e.g. a negative angle stored as `19216344`)
|
|
@@ -1338,7 +1597,7 @@ declare abstract class Shape {
|
|
|
1338
1597
|
* equal the shape's own transform values.
|
|
1339
1598
|
*
|
|
1340
1599
|
* `null` when the shape (or any enclosing group) has no own transform, or a
|
|
1341
|
-
* group's `a:chExt` is degenerate (zero)
|
|
1600
|
+
* group's `a:chExt` is degenerate (zero). There is then no resolvable frame.
|
|
1342
1601
|
* {@link absoluteFrameFailure} says which of those it was.
|
|
1343
1602
|
*
|
|
1344
1603
|
* A rotated shape's returned `left`/`top` remain PowerPoint's unrotated
|
|
@@ -1350,7 +1609,7 @@ declare abstract class Shape {
|
|
|
1350
1609
|
* Why {@link absoluteFrame} is `null`, or `null` when it resolved.
|
|
1351
1610
|
*
|
|
1352
1611
|
* `absoluteFrame` reports one `null` for three different situations, and only a
|
|
1353
|
-
* caller that wants to *report* the unresolvable shape needs them apart
|
|
1612
|
+
* caller that wants to *report* the unresolvable shape needs them apart: an
|
|
1354
1613
|
* inherited placeholder box is ordinary, a group with no usable `a:xfrm` is not.
|
|
1355
1614
|
* The distinction is not recoverable from the `null`, and re-deriving it means
|
|
1356
1615
|
* walking the same ancestry a second time, so it is named here instead. See
|
|
@@ -1379,19 +1638,19 @@ declare abstract class Shape {
|
|
|
1379
1638
|
get fillSchemeColor(): string | null;
|
|
1380
1639
|
set fillSchemeColor(value: string | null);
|
|
1381
1640
|
/**
|
|
1382
|
-
* `true` when the shape sets an explicit no-fill (`spPr/a:noFill`)
|
|
1641
|
+
* `true` when the shape sets an explicit no-fill (`spPr/a:noFill`): a
|
|
1383
1642
|
* deliberately transparent surface. The fill-side counterpart of
|
|
1384
1643
|
* {@link lineNoFill}, and the only accessor that separates it from a shape
|
|
1385
1644
|
* carrying no fill child at all (one inheriting through `p:style/a:fillRef`):
|
|
1386
|
-
* every other fill accessor
|
|
1645
|
+
* every other fill accessor ({@link fillColor}, {@link fillSchemeColor},
|
|
1387
1646
|
* {@link resolvedFill}, {@link gradientFill}, {@link patternFill},
|
|
1388
|
-
* {@link pictureFill}
|
|
1647
|
+
* {@link pictureFill}) reports `null` for both. The two paint completely
|
|
1389
1648
|
* differently, so a consumer that cannot tell them apart paints a transparent
|
|
1390
1649
|
* shape in the theme's accent colour.
|
|
1391
1650
|
*/
|
|
1392
1651
|
get fillNoFill(): boolean;
|
|
1393
1652
|
/**
|
|
1394
|
-
* Set an explicit `<a:noFill/>` on the shape
|
|
1653
|
+
* Set an explicit `<a:noFill/>` on the shape: a transparent surface. This is
|
|
1395
1654
|
* distinct from clearing the fill (`fillColor = null`), which removes the
|
|
1396
1655
|
* `a:solidFill` and lets the fill inherit from the shape's style/placeholder.
|
|
1397
1656
|
* Read it back with {@link fillNoFill}.
|
|
@@ -1408,12 +1667,12 @@ declare abstract class Shape {
|
|
|
1408
1667
|
/**
|
|
1409
1668
|
* The line/border dash style (`spPr/a:ln/a:prstDash/@val`), e.g. `'dash'`,
|
|
1410
1669
|
* `'lgDashDot'`, `'sysDot'`, or `null` when the line is solid/unset. A faithful
|
|
1411
|
-
* replica of dashed dividers and dashed card borders needs this
|
|
1670
|
+
* replica of dashed dividers and dashed card borders needs this: it is
|
|
1412
1671
|
* otherwise invisible in {@link lineColor}/{@link lineWidthPt} alone.
|
|
1413
1672
|
*/
|
|
1414
1673
|
get lineDash(): string | null;
|
|
1415
1674
|
/**
|
|
1416
|
-
* `true` when the shape sets an explicit no-line (`spPr/a:ln/a:noFill`)
|
|
1675
|
+
* `true` when the shape sets an explicit no-line (`spPr/a:ln/a:noFill`): a
|
|
1417
1676
|
* deliberately border-less shape. Distinct from simply having no `a:ln`
|
|
1418
1677
|
* (an inherited line), which {@link resolvedLine} cannot tell apart: both
|
|
1419
1678
|
* report `null`. A replica that relies on a shadow instead of a border needs
|
|
@@ -1421,8 +1680,18 @@ declare abstract class Shape {
|
|
|
1421
1680
|
*/
|
|
1422
1681
|
get lineNoFill(): boolean;
|
|
1423
1682
|
/**
|
|
1424
|
-
*
|
|
1425
|
-
*
|
|
1683
|
+
* Whether the shape states an outline of its **own** (`spPr/a:ln`), however little it holds.
|
|
1684
|
+
*
|
|
1685
|
+
* The line accessors all report `null` both for a shape with no `a:ln` and for one whose `a:ln`
|
|
1686
|
+
* is empty, and the two are different statements to a writer: an empty `<a:ln/>` says "take the
|
|
1687
|
+
* whole outline from `p:style` or the placeholder", which is what PowerPoint writes on its own
|
|
1688
|
+
* placeholders, and `addShape` writes it for `line: { type: 'inherit' }`. A copy that has to
|
|
1689
|
+
* reproduce the outline rather than describe it needs to know which one it has.
|
|
1690
|
+
*/
|
|
1691
|
+
get hasOwnLine(): boolean;
|
|
1692
|
+
/**
|
|
1693
|
+
* The line end cap (`spPr/a:ln/@cap`) as the raw OOXML token, `'flat'`,
|
|
1694
|
+
* `'rnd'` (round) or `'sq'` (square), or `null` when unset (PowerPoint's
|
|
1426
1695
|
* default is `flat`). The write API authors this attribute through
|
|
1427
1696
|
* `ShapeLineProps.cap`, so without the accessor a deck this library produced
|
|
1428
1697
|
* could not be read back without losing it.
|
|
@@ -1434,8 +1703,8 @@ declare abstract class Shape {
|
|
|
1434
1703
|
*/
|
|
1435
1704
|
get lineCap(): string | null;
|
|
1436
1705
|
/**
|
|
1437
|
-
* The line alignment (`spPr/a:ln/@algn`) as the raw OOXML token
|
|
1438
|
-
* (centred on the shape's outline) or `'in'` (inset, drawn wholly inside it)
|
|
1706
|
+
* The line alignment (`spPr/a:ln/@algn`) as the raw OOXML token, `'ctr'`
|
|
1707
|
+
* (centred on the shape's outline) or `'in'` (inset, drawn wholly inside it),
|
|
1439
1708
|
* or `null` when unset. It shifts a thick outline by half its width, so it
|
|
1440
1709
|
* changes where the border sits relative to the fill.
|
|
1441
1710
|
*/
|
|
@@ -1453,7 +1722,7 @@ declare abstract class Shape {
|
|
|
1453
1722
|
* shape uses preset geometry / none. The faithful, multi-path counterpart of
|
|
1454
1723
|
* {@link presetGeometry}: each `a:path` keeps its own path-unit viewport
|
|
1455
1724
|
* (`w`/`h`) and ordered {@link GeometryCommand}s. Coordinates are raw path-unit
|
|
1456
|
-
* integers, not EMU
|
|
1725
|
+
* integers, not EMU. Pair the path `w`/`h` with the shape's box size to map
|
|
1457
1726
|
* them into slide space.
|
|
1458
1727
|
*
|
|
1459
1728
|
* Not an auto-shape-only property either: a picture clipped to a freeform (what
|
|
@@ -1479,7 +1748,7 @@ declare abstract class Shape {
|
|
|
1479
1748
|
* The shape's gradient fill with its geometry (`spPr/a:gradFill`), or `null`
|
|
1480
1749
|
* when the fill is not a gradient. Unlike {@link gradientStops} (stops only),
|
|
1481
1750
|
* this also carries the linear {@link GradientFill.angleDeg} or the
|
|
1482
|
-
* {@link GradientFill.path} shape
|
|
1751
|
+
* {@link GradientFill.path} shape: the geometry a faithful replica needs and
|
|
1483
1752
|
* which the bare stop list omits.
|
|
1484
1753
|
*/
|
|
1485
1754
|
get gradientFill(): GradientFill | null;
|
|
@@ -1487,11 +1756,17 @@ declare abstract class Shape {
|
|
|
1487
1756
|
* The shape's line/border **gradient** stroke (`spPr/a:ln/a:gradFill`), or
|
|
1488
1757
|
* `null` when the line is a solid, absent, or inherited border (see
|
|
1489
1758
|
* {@link resolvedLine}). The line counterpart of {@link gradientFill}: a
|
|
1490
|
-
* gradient-stroked connector
|
|
1491
|
-
*
|
|
1759
|
+
* gradient-stroked connector (common for faded process arrows in styled decks)
|
|
1760
|
+
* otherwise surfaces only its {@link lineWidthPt}, dropping the colour
|
|
1492
1761
|
* entirely, so a replica cannot reproduce the stroke.
|
|
1493
1762
|
*/
|
|
1494
1763
|
get lineGradient(): GradientFill | null;
|
|
1764
|
+
/**
|
|
1765
|
+
* The shape's line/border **pattern** stroke (`spPr/a:ln/a:pattFill`), or `null` when the line
|
|
1766
|
+
* is not a pattern. The line counterpart of {@link patternFill}, and what the write side's
|
|
1767
|
+
* `line.pattern` writes.
|
|
1768
|
+
*/
|
|
1769
|
+
get linePatternFill(): PatternFill | null;
|
|
1495
1770
|
/**
|
|
1496
1771
|
* The shape's line/connector arrowheads (`a:ln/a:headEnd` + `a:tailEnd`), or
|
|
1497
1772
|
* `null` when neither end carries one. Essential for replicating connectors,
|
|
@@ -1521,7 +1796,7 @@ declare abstract class Shape {
|
|
|
1521
1796
|
/**
|
|
1522
1797
|
* The shape's reflection (`spPr/a:effectLst/a:reflection`), or `null` when it has
|
|
1523
1798
|
* none. Read-only: this library authors no reflection, so a replica should carry
|
|
1524
|
-
* the part rather than regenerate it
|
|
1799
|
+
* the part rather than regenerate it (see {@link Reflection}).
|
|
1525
1800
|
*/
|
|
1526
1801
|
get reflection(): Reflection | null;
|
|
1527
1802
|
/**
|
|
@@ -1532,7 +1807,7 @@ declare abstract class Shape {
|
|
|
1532
1807
|
/**
|
|
1533
1808
|
* The shape's pattern (hatch) fill (`spPr/a:pattFill`), or `null` when the fill
|
|
1534
1809
|
* is not a pattern. Surfaces the {@link PatternFill.preset} name and both
|
|
1535
|
-
* colours resolved against the host's theme
|
|
1810
|
+
* colours resolved against the host's theme: the pattern counterpart of
|
|
1536
1811
|
* {@link resolvedFill}, which reports `null` for a non-solid fill and so drops a
|
|
1537
1812
|
* hatched surface entirely.
|
|
1538
1813
|
*/
|
|
@@ -1540,8 +1815,8 @@ declare abstract class Shape {
|
|
|
1540
1815
|
/**
|
|
1541
1816
|
* The shape's picture (image) fill (`spPr/a:blipFill`), or `null` when the fill
|
|
1542
1817
|
* is not a picture. The image-fill counterpart of {@link patternFill}: a shape
|
|
1543
|
-
* whose *surface* is an image is not a {@link Picture}
|
|
1544
|
-
* a blip fill
|
|
1818
|
+
* whose *surface* is an image is not a {@link Picture} (it is an autoShape with
|
|
1819
|
+
* a blip fill), and {@link resolvedFill} reports `null` for one, so without this
|
|
1545
1820
|
* an image-filled shape reads as unfilled. Carries the embedded image
|
|
1546
1821
|
* ({@link PictureFill.relId}/{@link PictureFill.partName}) plus the stretch/tile
|
|
1547
1822
|
* geometry.
|
|
@@ -1549,11 +1824,11 @@ declare abstract class Shape {
|
|
|
1549
1824
|
get pictureFill(): PictureFill | null;
|
|
1550
1825
|
/**
|
|
1551
1826
|
* The shape's solid fill resolved against the host's theme
|
|
1552
|
-
* ({@link Slide.themeContext}) to a literal hex
|
|
1827
|
+
* ({@link Slide.themeContext}) to a literal hex: the resolved counterpart of
|
|
1553
1828
|
* {@link fillColor}/{@link fillSchemeColor}, which report the raw reference.
|
|
1554
1829
|
* `null` when the shape has no `a:solidFill` (a gradient/none/inherited fill)
|
|
1555
1830
|
* or the colour cannot be made literal. The returned {@link ResolvedColor}
|
|
1556
|
-
* carries the base `hex` and raw transforms, and `effectiveHex
|
|
1831
|
+
* carries the base `hex` and raw transforms, and `effectiveHex`, the base with
|
|
1557
1832
|
* its colour transforms (`lumMod`/`shade`/…) applied (read that for the final
|
|
1558
1833
|
* rendered colour).
|
|
1559
1834
|
*
|
|
@@ -1564,7 +1839,7 @@ declare abstract class Shape {
|
|
|
1564
1839
|
get resolvedFill(): ResolvedColor | null;
|
|
1565
1840
|
/**
|
|
1566
1841
|
* The shape's line/border solid fill resolved against the host's theme to a
|
|
1567
|
-
* literal hex
|
|
1842
|
+
* literal hex: the resolved counterpart of {@link lineColor}/{@link lineSchemeColor}.
|
|
1568
1843
|
* `null` when the shape has no `a:ln/a:solidFill` or it cannot be made literal.
|
|
1569
1844
|
* Like {@link resolvedFill}, the result carries `effectiveHex` (the base colour
|
|
1570
1845
|
* with its transforms applied) for the final rendered colour.
|
|
@@ -1591,8 +1866,12 @@ declare abstract class Shape {
|
|
|
1591
1866
|
set text(value: string);
|
|
1592
1867
|
/**
|
|
1593
1868
|
* This shape's placeholder identity (`p:ph` `type`/`idx`), or `null` when it is
|
|
1594
|
-
* not a placeholder.
|
|
1595
|
-
*
|
|
1869
|
+
* not a placeholder. `idx` defaults to `'0'` when the attribute is absent, as
|
|
1870
|
+
* PowerPoint does. A text placeholder is a `p:sp`; a filled picture, table or chart
|
|
1871
|
+
* placeholder is a `p:pic` or `p:graphicFrame` carrying the same `p:ph`, which is what
|
|
1872
|
+
* inserting a picture into a picture placeholder produces. This used to be `null` for
|
|
1873
|
+
* every shape but a `p:sp` (#111). Use {@link Slide.placeholder} to find a text
|
|
1874
|
+
* placeholder by type.
|
|
1596
1875
|
*/
|
|
1597
1876
|
get placeholder(): PlaceholderRef | null;
|
|
1598
1877
|
/**
|
|
@@ -1607,22 +1886,12 @@ declare abstract class Shape {
|
|
|
1607
1886
|
/** Escape hatch: the underlying shape element. After mutating it call {@link markDirty}, or `save()` writes the original bytes. */
|
|
1608
1887
|
get element_(): Element;
|
|
1609
1888
|
}
|
|
1610
|
-
//#endregion
|
|
1611
|
-
//#region src/read/api/shapes/autoshape.d.ts
|
|
1612
1889
|
/** An auto shape, text box, or placeholder (`p:sp`). The only kind that holds text. */
|
|
1613
1890
|
declare class AutoShape extends Shape {
|
|
1614
1891
|
readonly shapeType: 'autoShape';
|
|
1615
1892
|
get hasTextFrame(): boolean;
|
|
1616
1893
|
get textFrame(): TextFrame | null;
|
|
1617
|
-
/**
|
|
1618
|
-
* This shape's placeholder identity (`p:ph` `type`/`idx`), or `null` when it is
|
|
1619
|
-
* not a placeholder. `idx` defaults to `'0'` when the attribute is absent, as
|
|
1620
|
-
* PowerPoint does. Use {@link Slide.placeholder} to find a placeholder by type.
|
|
1621
|
-
*/
|
|
1622
|
-
get placeholder(): PlaceholderRef | null;
|
|
1623
1894
|
}
|
|
1624
|
-
//#endregion
|
|
1625
|
-
//#region src/read/api/shapes/picture.d.ts
|
|
1626
1895
|
/** A picture (`p:pic`). */
|
|
1627
1896
|
declare class Picture extends Shape {
|
|
1628
1897
|
#private;
|
|
@@ -1649,7 +1918,7 @@ declare class Picture extends Shape {
|
|
|
1649
1918
|
* Microsoft SVG blip extension (`a:blip/a:extLst/a:ext/asvg:svgBlip/@r:embed`),
|
|
1650
1919
|
* or `null` when the picture has no SVG. PowerPoint usually pairs this with a
|
|
1651
1920
|
* raster fallback in `a:blip/@r:embed` ({@link imageRelId}), but some exporters
|
|
1652
|
-
* emit an SVG-only blip where `imageRelId` is absent and only this resolves
|
|
1921
|
+
* emit an SVG-only blip where `imageRelId` is absent and only this resolves,
|
|
1653
1922
|
* so a reader that wants the real drawn art must consult both.
|
|
1654
1923
|
*/
|
|
1655
1924
|
get svgRelId(): string | null;
|
|
@@ -1657,19 +1926,19 @@ declare class Picture extends Shape {
|
|
|
1657
1926
|
get svgPartName(): string | null;
|
|
1658
1927
|
/**
|
|
1659
1928
|
* Which drawable media this picture carries:
|
|
1660
|
-
* - `'raster'
|
|
1661
|
-
* - `'svg'
|
|
1929
|
+
* - `'raster'`: only a raster blip (`a:blip/@r:embed`);
|
|
1930
|
+
* - `'svg'`: only a vector blip (`asvg:svgBlip/@r:embed`, no raster). This
|
|
1662
1931
|
* is what PowerPoint's *Insert → Icons* and a plain SVG insert produce;
|
|
1663
|
-
* - `'both'
|
|
1664
|
-
* - `'none'
|
|
1932
|
+
* - `'both'`: a raster fallback *and* an SVG (PowerPoint's usual pairing);
|
|
1933
|
+
* - `'none'`: a `p:pic` with no embedded blip at all (e.g. a linked image).
|
|
1665
1934
|
*
|
|
1666
|
-
* Lets a caller distinguish an SVG-only picture
|
|
1667
|
-
* is legitimately `null`
|
|
1935
|
+
* Lets a caller distinguish an SVG-only picture (where {@link imagePartName}
|
|
1936
|
+
* is legitimately `null`) from a genuinely empty one, without two null checks.
|
|
1668
1937
|
*/
|
|
1669
1938
|
get mediaKind(): 'raster' | 'svg' | 'both' | 'none';
|
|
1670
1939
|
/**
|
|
1671
1940
|
* Absolute partname of whichever part actually carries this picture's drawn
|
|
1672
|
-
* data
|
|
1941
|
+
* data (the raster part when present, otherwise the SVG part), or `null`
|
|
1673
1942
|
* when the picture embeds neither. Use this when you just want "the bytes
|
|
1674
1943
|
* this picture shows"; prefer {@link imagePartName} / {@link svgPartName}
|
|
1675
1944
|
* (and {@link mediaKind}) when you need to know *which* kind it is. An
|
|
@@ -1677,9 +1946,14 @@ declare class Picture extends Shape {
|
|
|
1677
1946
|
* `null`.
|
|
1678
1947
|
*/
|
|
1679
1948
|
get mediaPartName(): string | null;
|
|
1949
|
+
/**
|
|
1950
|
+
* The audio or video this picture plays (`p:nvPr/a:audioFile` or `a:videoFile`), or `null` for a
|
|
1951
|
+
* still picture. Its blip ({@link imagePartName}) is then the poster frame. See {@link PictureMedia}.
|
|
1952
|
+
*/
|
|
1953
|
+
get media(): PictureMedia | null;
|
|
1680
1954
|
/**
|
|
1681
1955
|
* The picture's crop as fractions of the *source image*, read from
|
|
1682
|
-
* `p:blipFill/a:srcRect`
|
|
1956
|
+
* `p:blipFill/a:srcRect` as `{ left, top, right, bottom }`, each the amount
|
|
1683
1957
|
* trimmed off that edge (so `0.1` = 10 % cropped away, an uncropped edge is
|
|
1684
1958
|
* `0`). `null` when there is no `a:srcRect` at all; an explicit
|
|
1685
1959
|
* `{0,0,0,0}` crop still reports zeros, since its presence is meaningful.
|
|
@@ -1693,13 +1967,20 @@ declare class Picture extends Shape {
|
|
|
1693
1967
|
* `null` when the blip carries none. Recognises the effects a faithful reader
|
|
1694
1968
|
* needs to reproduce a recoloured image: `a:duotone` (the two-stop icon-tint
|
|
1695
1969
|
* trick), `a:clrChange`, `a:grayscl`, `a:biLevel`, and `a:alphaModFix`; the
|
|
1696
|
-
* first such effect in document order wins. Colours mirror the
|
|
1970
|
+
* first such effect in document order wins, and {@link recolors} lists them all. Colours mirror the
|
|
1697
1971
|
* {@link GradientStop} split (`color`/`schemeColor`/`presetColor`) so theme
|
|
1698
1972
|
* tokens resolve through {@link Slide.themeContext}. `threshold`/`amount` are
|
|
1699
1973
|
* 0–1 fractions. {@link hidden} (the duotone fallback-layer trick) reports the
|
|
1700
1974
|
* *visibility* of a recolour source; this reports the *tint* itself.
|
|
1701
1975
|
*/
|
|
1702
1976
|
get recolor(): Recolor | null;
|
|
1977
|
+
/**
|
|
1978
|
+
* Every blip effect {@link recolor} recognises, in document order: the first is
|
|
1979
|
+
* {@link recolor}. They combine (a picture can be faded with `a:alphaModFix` and
|
|
1980
|
+
* recoloured too, which is how the write API emits `transparency` beside a
|
|
1981
|
+
* recolour), and {@link recolor} alone reported only the first of them.
|
|
1982
|
+
*/
|
|
1983
|
+
get recolors(): Recolor[];
|
|
1703
1984
|
/**
|
|
1704
1985
|
* Replace this picture's image with new bytes. Mints a fresh media part under
|
|
1705
1986
|
* `/ppt/media/`, registers its content type, wires an `image` relationship
|
|
@@ -1714,7 +1995,7 @@ declare class Picture extends Shape {
|
|
|
1714
1995
|
*
|
|
1715
1996
|
* `fit` controls the picture's `a:srcRect` crop against its current frame
|
|
1716
1997
|
* extent (`a:xfrm/a:ext`):
|
|
1717
|
-
* - omitted (default): geometry and crop are left untouched
|
|
1998
|
+
* - omitted (default): geometry and crop are left untouched; the caller owns
|
|
1718
1999
|
* sizing. Note an inherited `a:srcRect` was tuned to the *previous* image's
|
|
1719
2000
|
* aspect ratio, so swapping in an image of a different ratio reuses a crop
|
|
1720
2001
|
* that no longer fits and the result looks stretched; pass `fit` to refit.
|
|
@@ -1732,8 +2013,6 @@ declare class Picture extends Shape {
|
|
|
1732
2013
|
fit?: 'cover' | 'contain' | 'stretch';
|
|
1733
2014
|
}): void;
|
|
1734
2015
|
}
|
|
1735
|
-
//#endregion
|
|
1736
|
-
//#region src/read/api/shapes/connector.d.ts
|
|
1737
2016
|
/** A connector / line (`p:cxnSp`). */
|
|
1738
2017
|
declare class Connector extends Shape {
|
|
1739
2018
|
#private;
|
|
@@ -1751,8 +2030,6 @@ declare class Connector extends Shape {
|
|
|
1751
2030
|
*/
|
|
1752
2031
|
get endConnection(): ConnectionSite | null;
|
|
1753
2032
|
}
|
|
1754
|
-
//#endregion
|
|
1755
|
-
//#region src/read/api/chart.d.ts
|
|
1756
2033
|
/** A chart axis number format (`c:numFmt`). */
|
|
1757
2034
|
interface AxisNumberFormat {
|
|
1758
2035
|
/** The format mask (`@formatCode`), e.g. `"General"`, `"0.0%"`. */
|
|
@@ -1766,6 +2043,36 @@ interface ChartLegend {
|
|
|
1766
2043
|
position: string | null;
|
|
1767
2044
|
/** Whether the legend overlays the plot area (`c:overlay/@val`). */
|
|
1768
2045
|
overlay: boolean | null;
|
|
2046
|
+
/** The legend text's formatting (`c:txPr`), or `null` when it states none. */
|
|
2047
|
+
textStyle: ChartTextStyle | null;
|
|
2048
|
+
/** The legend's manual layout, or `null` when it is placed automatically. */
|
|
2049
|
+
layout: ChartManualLayout | null;
|
|
2050
|
+
}
|
|
2051
|
+
/**
|
|
2052
|
+
* The formatting of a block of chart text: a `c:txPr` (a legend's, an axis' labels', data labels')
|
|
2053
|
+
* or a title's `c:rich`. Read off the block's `a:bodyPr` and its first paragraph: the paragraph's
|
|
2054
|
+
* `a:pPr` and `a:defRPr`, and in a title, the first run's `a:rPr` over them. Every field is `null`
|
|
2055
|
+
* where the block states nothing.
|
|
2056
|
+
*/
|
|
2057
|
+
interface ChartTextStyle {
|
|
2058
|
+
/** Size in points (`@sz`). */
|
|
2059
|
+
sizePt: number | null;
|
|
2060
|
+
/** Bold (`@b`). */
|
|
2061
|
+
bold: boolean | null;
|
|
2062
|
+
/** Italic (`@i`). */
|
|
2063
|
+
italic: boolean | null;
|
|
2064
|
+
/** Underline style (`@u`, e.g. `sng`, `none`). */
|
|
2065
|
+
underline: string | null;
|
|
2066
|
+
/** The solid colour, unresolved: a chart part is read without a theme. */
|
|
2067
|
+
color: ColorRef | null;
|
|
2068
|
+
/** Whether {@link color} carries a transform (`a:lumMod`, …) that only a theme can apply. */
|
|
2069
|
+
colorTransformed: boolean;
|
|
2070
|
+
/** The Latin typeface (`a:latin/@typeface`), a theme token such as `+mn-lt` included. */
|
|
2071
|
+
fontName: string | null;
|
|
2072
|
+
/** Rotation in degrees (`a:bodyPr/@rot` / 60000), or `null` when unstated or outside -90 to 90. */
|
|
2073
|
+
rotationDeg: number | null;
|
|
2074
|
+
/** Paragraph alignment (`a:pPr/@algn`: `l`, `ctr`, `r`, …). */
|
|
2075
|
+
align: string | null;
|
|
1769
2076
|
}
|
|
1770
2077
|
/** Data-label settings (`c:dLbls`), read from a plot group or from one series. */
|
|
1771
2078
|
interface ChartDataLabels {
|
|
@@ -1787,6 +2094,74 @@ interface ChartDataLabels {
|
|
|
1787
2094
|
position: string | null;
|
|
1788
2095
|
/** Label number format (`c:numFmt`), or `null` when absent. */
|
|
1789
2096
|
numberFormat: AxisNumberFormat | null;
|
|
2097
|
+
/** The labels' text formatting (`c:txPr`), or `null` when the block states none. */
|
|
2098
|
+
textStyle: ChartTextStyle | null;
|
|
2099
|
+
/** The labels' background fill (`c:spPr`), or `null` when it states none. */
|
|
2100
|
+
fill: ChartFill | null;
|
|
2101
|
+
/** The leader lines' stroke (`c:leaderLines/c:spPr/a:ln`), or `null` when they state none. */
|
|
2102
|
+
leaderLines: ChartLine | null;
|
|
2103
|
+
}
|
|
2104
|
+
/** One stretch of a data label's own text: a run, or a field PowerPoint fills in (`a:fld`). */
|
|
2105
|
+
interface ChartLabelRun {
|
|
2106
|
+
/** The text, which for a field is what it showed when the chart was saved. */
|
|
2107
|
+
text: string;
|
|
2108
|
+
/** The field type (`a:fld/@type`: `XVALUE`, `YVALUE`, `CELLRANGE`, …), or `null` for a plain run. */
|
|
2109
|
+
field: string | null;
|
|
2110
|
+
}
|
|
2111
|
+
/** A data label that states its own text (`c:dLbl` with `c:tx/c:rich`), as a scatter's custom labels do. */
|
|
2112
|
+
interface ChartPointLabel {
|
|
2113
|
+
/** The index of the point it labels (`c:idx`). */
|
|
2114
|
+
index: number;
|
|
2115
|
+
/** Its runs and fields, in order, across its paragraphs. */
|
|
2116
|
+
runs: ChartLabelRun[];
|
|
2117
|
+
}
|
|
2118
|
+
/** The 3-D view of a chart (`c:chart/c:view3D`). Every field is `null` when the element leaves it unstated. */
|
|
2119
|
+
interface ChartView3D {
|
|
2120
|
+
/** Tilt in degrees (`c:rotX`), -90 to 90. */
|
|
2121
|
+
rotX: number | null;
|
|
2122
|
+
/** Turn in degrees (`c:rotY`), 0 to 360. */
|
|
2123
|
+
rotY: number | null;
|
|
2124
|
+
/** Field of view (`c:perspective`), 0 to 240, twice the angle in degrees. */
|
|
2125
|
+
perspective: number | null;
|
|
2126
|
+
/** Whether the axes stay at right angles (`c:rAngAx`), which turns perspective off. */
|
|
2127
|
+
rightAngleAxes: boolean | null;
|
|
2128
|
+
}
|
|
2129
|
+
/** A series' data-point marker (`c:ser/c:marker`). */
|
|
2130
|
+
interface ChartMarker {
|
|
2131
|
+
/** The marker shape (`c:symbol`, `ST_MarkerStyle`: `circle`, `diamond`, `none`, …), or `null` when unstated. */
|
|
2132
|
+
symbol: string | null;
|
|
2133
|
+
/** The marker size in points (`c:size`), 2 to 72, or `null` when unstated. */
|
|
2134
|
+
size: number | null;
|
|
2135
|
+
/** The marker's solid fill, as {@link ChartSeries.fill} reads a series'. */
|
|
2136
|
+
fill: ChartFill | null;
|
|
2137
|
+
/** The marker's outline, as {@link ChartSeries.line} reads a series'. */
|
|
2138
|
+
line: ChartLine | null;
|
|
2139
|
+
}
|
|
2140
|
+
/** One data point a series formats on its own (`c:ser/c:dPt`). */
|
|
2141
|
+
interface ChartDataPoint {
|
|
2142
|
+
/** The point's index in the series (`c:idx`). */
|
|
2143
|
+
index: number;
|
|
2144
|
+
/** Whether a negative bar at this point paints inverted (`c:invertIfNegative`), or `null` when unstated. */
|
|
2145
|
+
invertIfNegative: boolean | null;
|
|
2146
|
+
/** The point's solid fill, as {@link ChartSeries.fill} reads a series'. */
|
|
2147
|
+
fill: ChartFill | null;
|
|
2148
|
+
/** The point's pattern fill (`a:pattFill`), or `null`. */
|
|
2149
|
+
patternFill: PatternFill | null;
|
|
2150
|
+
/** The point's outline, as {@link ChartSeries.line} reads a series'. */
|
|
2151
|
+
line: ChartLine | null;
|
|
2152
|
+
}
|
|
2153
|
+
/** A chart's data table (`c:plotArea/c:dTable`), the grid of values drawn under the plot. */
|
|
2154
|
+
interface ChartDataTable {
|
|
2155
|
+
/** Horizontal cell borders (`c:showHorzBorder`), or `null` when unstated. */
|
|
2156
|
+
showHorizontalBorder: boolean | null;
|
|
2157
|
+
/** Vertical cell borders (`c:showVertBorder`), or `null` when unstated. */
|
|
2158
|
+
showVerticalBorder: boolean | null;
|
|
2159
|
+
/** The outline around the table (`c:showOutline`), or `null` when unstated. */
|
|
2160
|
+
showOutline: boolean | null;
|
|
2161
|
+
/** The legend keys beside each series' row (`c:showKeys`), or `null` when unstated. */
|
|
2162
|
+
showKeys: boolean | null;
|
|
2163
|
+
/** The table text's size in points (`c:txPr`'s first `a:defRPr/@sz`), or `null` when unstated. */
|
|
2164
|
+
fontSizePt: number | null;
|
|
1790
2165
|
}
|
|
1791
2166
|
/** A series' solid fill (`c:ser/c:spPr`). */
|
|
1792
2167
|
interface ChartFill {
|
|
@@ -1797,6 +2172,54 @@ interface ChartFill {
|
|
|
1797
2172
|
colorRef: ColorRef;
|
|
1798
2173
|
/** Whether the fill is explicitly suppressed (`a:noFill`). */
|
|
1799
2174
|
noFill: boolean;
|
|
2175
|
+
/** The opacity of the solid colour, 0 to 1 (its `a:alpha`), or `null` when it states none. */
|
|
2176
|
+
alpha: number | null;
|
|
2177
|
+
}
|
|
2178
|
+
/**
|
|
2179
|
+
* A manual layout (`c:layout/c:manualLayout`): where an element sits, as fractions of the chart.
|
|
2180
|
+
* Every field is `null` where the layout leaves it automatic.
|
|
2181
|
+
*/
|
|
2182
|
+
interface ChartManualLayout {
|
|
2183
|
+
/** What the box bounds (`c:layoutTarget`): `inner` (the plot alone) or `outer` (with its labels). */
|
|
2184
|
+
target: string | null;
|
|
2185
|
+
/** How `x` reads (`c:xMode`): `edge` (from the chart's left edge) or `factor` (an offset). */
|
|
2186
|
+
xMode: string | null;
|
|
2187
|
+
/** How `y` reads (`c:yMode`). */
|
|
2188
|
+
yMode: string | null;
|
|
2189
|
+
x: number | null;
|
|
2190
|
+
y: number | null;
|
|
2191
|
+
w: number | null;
|
|
2192
|
+
h: number | null;
|
|
2193
|
+
}
|
|
2194
|
+
/**
|
|
2195
|
+
* The fill, border and manual layout of a chart surface: the chart area (`c:chartSpace/c:spPr`) or
|
|
2196
|
+
* the plot area (`c:plotArea`). The fill accessors are the ones a slide shape has, read the same way.
|
|
2197
|
+
*/
|
|
2198
|
+
interface ChartAreaFormat {
|
|
2199
|
+
/** Whether the area is explicitly unfilled (`a:noFill`). */
|
|
2200
|
+
fillNoFill: boolean;
|
|
2201
|
+
/**
|
|
2202
|
+
* Whether the area states a fill of its own: any fill choice, `a:noFill` included. `false` when
|
|
2203
|
+
* it states none and inherits its fill from the chart style.
|
|
2204
|
+
*/
|
|
2205
|
+
hasOwnFill: boolean;
|
|
2206
|
+
/** A literal solid fill colour (`a:srgbClr`), or `null`. */
|
|
2207
|
+
fillColor: string | null;
|
|
2208
|
+
/** A theme solid fill colour (`a:schemeClr`), or `null`. */
|
|
2209
|
+
fillSchemeColor: string | null;
|
|
2210
|
+
/**
|
|
2211
|
+
* The solid fill resolved without a theme: a literal colour with its transforms applied, its
|
|
2212
|
+
* `alpha` included; `null` for a scheme colour or a non-solid fill.
|
|
2213
|
+
*/
|
|
2214
|
+
resolvedFill: ResolvedColor | null;
|
|
2215
|
+
gradientFill: GradientFill | null;
|
|
2216
|
+
patternFill: PatternFill | null;
|
|
2217
|
+
/** A picture fill (`a:blipFill`), its image resolved through the chart part's relationships. */
|
|
2218
|
+
pictureFill: PictureFill | null;
|
|
2219
|
+
/** The area's border (`a:ln`), or `null` when it states none. */
|
|
2220
|
+
border: ChartLine | null;
|
|
2221
|
+
/** The area's manual layout; always `null` for the chart area, which fills the frame. */
|
|
2222
|
+
layout: ChartManualLayout | null;
|
|
1800
2223
|
}
|
|
1801
2224
|
/** A series' line/stroke (`c:ser/c:spPr/a:ln`). */
|
|
1802
2225
|
interface ChartLine {
|
|
@@ -1808,15 +2231,46 @@ interface ChartLine {
|
|
|
1808
2231
|
colorRef: ColorRef;
|
|
1809
2232
|
/** Whether the line is explicitly suppressed (`a:noFill`). */
|
|
1810
2233
|
noFill: boolean;
|
|
2234
|
+
/** The line end cap (`@cap`) as its raw token (`flat`, `rnd`, `sq`), or `null` when unset. */
|
|
2235
|
+
cap: string | null;
|
|
2236
|
+
/** The opacity of the stroke's colour, 0 to 1 (its `a:alpha`), or `null` when it states none. */
|
|
2237
|
+
alpha: number | null;
|
|
2238
|
+
/**
|
|
2239
|
+
* Whether the stroke's colour carries a transform besides `a:alpha` (`a:lumMod`, `a:shade`, …).
|
|
2240
|
+
* A chart part is read without a theme, so {@link colorRef} does not apply it: PowerPoint's
|
|
2241
|
+
* default axis line, `tx1` lightened to a grey, reads as the bare `tx1` token.
|
|
2242
|
+
*/
|
|
2243
|
+
colorTransformed: boolean;
|
|
2244
|
+
}
|
|
2245
|
+
/** The display units of a value axis (`c:dispUnits`). */
|
|
2246
|
+
interface ChartDisplayUnits {
|
|
2247
|
+
/** A built-in unit (`c:builtInUnit`: `hundreds`, `thousands`, …, `trillions`), or `null`. */
|
|
2248
|
+
builtIn: string | null;
|
|
2249
|
+
/** A custom divisor (`c:custUnit`), or `null`. */
|
|
2250
|
+
custom: number | null;
|
|
2251
|
+
/** Whether the unit is labelled on the axis (`c:dispUnitsLbl`). */
|
|
2252
|
+
showLabel: boolean;
|
|
1811
2253
|
}
|
|
1812
2254
|
/** A chart graphic-frame's chart, backed by its chart part. */
|
|
1813
2255
|
declare class Chart {
|
|
1814
2256
|
#private;
|
|
1815
2257
|
/** The chart's OPC part (`/ppt/charts/chartN.xml`). */
|
|
1816
2258
|
readonly part: Part;
|
|
2259
|
+
/** The chart part's relationships, which resolve a picture fill's image; `null` leaves it unresolved. */
|
|
2260
|
+
private readonly rels;
|
|
1817
2261
|
constructor(
|
|
1818
2262
|
/** The chart's OPC part (`/ppt/charts/chartN.xml`). */
|
|
1819
|
-
part: Part
|
|
2263
|
+
part: Part,
|
|
2264
|
+
/** The chart part's relationships, which resolve a picture fill's image; `null` leaves it unresolved. */
|
|
2265
|
+
rels?: Relationships | null);
|
|
2266
|
+
/** The chart area's fill and border (`c:chartSpace/c:spPr`), or `null` when it states none. */
|
|
2267
|
+
get chartArea(): ChartAreaFormat | null;
|
|
2268
|
+
/** Whether the chart area's corners are rounded (`c:roundedCorners`), or `null` when unstated. */
|
|
2269
|
+
get roundedCorners(): boolean | null;
|
|
2270
|
+
/** The plot area's fill, border and manual layout, or `null` when the chart has no plot area. */
|
|
2271
|
+
get plotArea(): ChartAreaFormat | null;
|
|
2272
|
+
/** The title's manual layout (`c:title/c:layout`), or `null` when it is placed automatically. */
|
|
2273
|
+
get titleLayout(): ChartManualLayout | null;
|
|
1820
2274
|
/** Partname of the chart part. */
|
|
1821
2275
|
get partName(): string;
|
|
1822
2276
|
/**
|
|
@@ -1840,6 +2294,13 @@ declare class Chart {
|
|
|
1840
2294
|
get valueAxis(): ChartAxis | null;
|
|
1841
2295
|
/** The legend (`c:chart/c:legend`) position + overlay, or `null` when hidden. */
|
|
1842
2296
|
get legend(): ChartLegend | null;
|
|
2297
|
+
/** The chart title's formatting (`c:title/c:tx/c:rich`), or `null` when the chart has no rich title. */
|
|
2298
|
+
get titleStyle(): ChartTextStyle | null;
|
|
2299
|
+
/**
|
|
2300
|
+
* The language the chart's text is tagged with: `c:lang`, which PowerPoint writes, else the first
|
|
2301
|
+
* paragraph end's `@lang` in the part, where `addChart` writes its `lang`. `null` when neither says.
|
|
2302
|
+
*/
|
|
2303
|
+
get language(): string | null;
|
|
1843
2304
|
/**
|
|
1844
2305
|
* The chart-level data-label settings, read from the first plot group's
|
|
1845
2306
|
* aggregate `c:dLbls` (the group-wide block after the series). `null` when the
|
|
@@ -1851,6 +2312,23 @@ declare class Chart {
|
|
|
1851
2312
|
* {@link ChartSeries.dataLabels}.
|
|
1852
2313
|
*/
|
|
1853
2314
|
get dataLabels(): ChartDataLabels | null;
|
|
2315
|
+
/** The data table under the plot (`c:plotArea/c:dTable`), or `null` when the chart draws none. */
|
|
2316
|
+
get dataTable(): ChartDataTable | null;
|
|
2317
|
+
/**
|
|
2318
|
+
* The key/value annotations `addChart`'s `metadata` option writes: the pptx-ts extension on
|
|
2319
|
+
* `c:chartSpace/c:extLst` (uri `{094A432E-1F6C-499B-95B8-B57DC9536949}`). `null` when the chart
|
|
2320
|
+
* carries no such extension; an extension with no item reads as an empty map.
|
|
2321
|
+
*/
|
|
2322
|
+
get metadata(): Record<string, string> | null;
|
|
2323
|
+
/**
|
|
2324
|
+
* The plot groups (`c:barChart`, `c:lineChart`, …) of the plot area, in document order, each
|
|
2325
|
+
* with what it sets on all its series and the series it plots. A combo chart has several.
|
|
2326
|
+
*/
|
|
2327
|
+
get plotGroups(): ChartPlotGroup[];
|
|
2328
|
+
/** The 3-D view (`c:chart/c:view3D`), or `null` when the chart states none. */
|
|
2329
|
+
get view3D(): ChartView3D | null;
|
|
2330
|
+
/** How blank cells plot (`c:chart/c:dispBlanksAs`): `gap`, `zero` or `span`, or `null` when unstated. */
|
|
2331
|
+
get displayBlanksAs(): string | null;
|
|
1854
2332
|
/** The data series (`c:ser`) across all chart groups, in document order. */
|
|
1855
2333
|
get series(): ChartSeries[];
|
|
1856
2334
|
/**
|
|
@@ -1865,6 +2343,60 @@ declare class Chart {
|
|
|
1865
2343
|
/** Mark the chart part dirty so `save()` reserializes it. Call after mutating {@link element_}. */
|
|
1866
2344
|
markDirty(): void;
|
|
1867
2345
|
}
|
|
2346
|
+
/**
|
|
2347
|
+
* One plot group of a chart's plot area (`c:barChart`, `c:lineChart`, `c:pieChart`, …): the series
|
|
2348
|
+
* it plots and what it sets on all of them. Each accessor reads `null` (or `false` for an element
|
|
2349
|
+
* that is either there or not) where the group does not state it, including on a plot type whose
|
|
2350
|
+
* schema has no such element.
|
|
2351
|
+
*/
|
|
2352
|
+
declare class ChartPlotGroup {
|
|
2353
|
+
#private;
|
|
2354
|
+
private readonly group;
|
|
2355
|
+
/** The owning chart's OPC part, so {@link markDirty} can reach it from {@link element_}. */
|
|
2356
|
+
private readonly part;
|
|
2357
|
+
constructor(group: Element,
|
|
2358
|
+
/** The owning chart's OPC part, so {@link markDirty} can reach it from {@link element_}. */
|
|
2359
|
+
part: Part);
|
|
2360
|
+
/** The plot type, the element's local name less `Chart`: `bar`, `line`, `bar3D`, `doughnut`, … */
|
|
2361
|
+
get type(): string;
|
|
2362
|
+
/** The series this group plots (`c:ser`), in document order. */
|
|
2363
|
+
get series(): ChartSeries[];
|
|
2364
|
+
/**
|
|
2365
|
+
* The ids of the axes this group plots against (`c:axId`), as {@link ChartAxis.id} reads them: a
|
|
2366
|
+
* combo's group on the secondary axes names the secondary pair. Empty for a pie or a doughnut.
|
|
2367
|
+
*/
|
|
2368
|
+
get axisIds(): number[];
|
|
2369
|
+
/** A bar group's direction (`c:barDir`): `bar` (horizontal) or `col` (vertical). */
|
|
2370
|
+
get barDirection(): string | null;
|
|
2371
|
+
/** How the series stack (`c:grouping`): `clustered`, `stacked`, `percentStacked` or `standard`. */
|
|
2372
|
+
get grouping(): string | null;
|
|
2373
|
+
/** The gap between bar clusters as a percentage of a bar's width (`c:gapWidth`). */
|
|
2374
|
+
get gapWidthPct(): number | null;
|
|
2375
|
+
/** How far bars in a cluster overlap, -100 to 100 percent (`c:overlap`). */
|
|
2376
|
+
get overlapPct(): number | null;
|
|
2377
|
+
/** Whether stacked bars are joined by series lines (`c:serLines`). */
|
|
2378
|
+
get seriesLines(): boolean;
|
|
2379
|
+
/** The series lines' stroke (`c:serLines/c:spPr/a:ln`), or `null` when they state none. */
|
|
2380
|
+
get seriesLinesLine(): ChartLine | null;
|
|
2381
|
+
/** The depth gap of a 3-D bar group, as a percentage (`c:gapDepth`). */
|
|
2382
|
+
get gapDepthPct(): number | null;
|
|
2383
|
+
/** The group-wide 3-D bar shape (`c:shape`); a series can state its own ({@link ChartSeries.shape}). */
|
|
2384
|
+
get shape(): string | null;
|
|
2385
|
+
/** The angle of a pie's first slice, 0 to 360 degrees (`c:firstSliceAng`). */
|
|
2386
|
+
get firstSliceAngle(): number | null;
|
|
2387
|
+
/** A doughnut's hole, 10 to 90 percent of its size (`c:holeSize`). */
|
|
2388
|
+
get holeSizePct(): number | null;
|
|
2389
|
+
/** A radar's style (`c:radarStyle`): `standard`, `marker` or `filled`. */
|
|
2390
|
+
get radarStyle(): string | null;
|
|
2391
|
+
/** Whether a surface is drawn as a wireframe (`c:wireframe`). */
|
|
2392
|
+
get wireframe(): boolean | null;
|
|
2393
|
+
/** Whether a line or stock group draws up/down bars (`c:upDownBars`). */
|
|
2394
|
+
get upDownBars(): boolean;
|
|
2395
|
+
/** Escape hatch: the underlying plot-group element. After mutating it call {@link markDirty}, or `save()` writes the original bytes. */
|
|
2396
|
+
get element_(): Element;
|
|
2397
|
+
/** Mark the owning chart part dirty so `save()` reserializes it. Call after mutating {@link element_}. */
|
|
2398
|
+
markDirty(): void;
|
|
2399
|
+
}
|
|
1868
2400
|
/**
|
|
1869
2401
|
* One axis (`c:catAx`/`c:valAx`/`c:dateAx`/`c:serAx`) of a chart's plot area.
|
|
1870
2402
|
* All four share the scaling/delete/position/tickmark structure; `kind`
|
|
@@ -1912,6 +2444,32 @@ declare class ChartAxis {
|
|
|
1912
2444
|
get majorUnit(): number | null;
|
|
1913
2445
|
/** Minor unit (`c:minorUnit/@val`), or `null` when auto. */
|
|
1914
2446
|
get minorUnit(): number | null;
|
|
2447
|
+
/** The tick labels' text formatting and rotation (`c:txPr`), or `null` when the axis states none. */
|
|
2448
|
+
get labelStyle(): ChartTextStyle | null;
|
|
2449
|
+
/** The axis title's formatting (`c:title/c:tx/c:rich`), or `null` when it has no rich title. */
|
|
2450
|
+
get titleStyle(): ChartTextStyle | null;
|
|
2451
|
+
/** Where this axis crosses the other one, as a value on it (`c:crossesAt`), or `null`. */
|
|
2452
|
+
get crossesAt(): number | null;
|
|
2453
|
+
/** Where this axis crosses the other one, as a rule (`c:crosses`: `autoZero`, `max`, `min`), or `null`. */
|
|
2454
|
+
get crosses(): string | null;
|
|
2455
|
+
/** Whether a value axis crosses between categories or on them (`c:crossBetween`: `between`, `midCat`). */
|
|
2456
|
+
get crossBetween(): string | null;
|
|
2457
|
+
/** A value axis' display units (`c:dispUnits`), or `null` when it shows plain values. */
|
|
2458
|
+
get displayUnits(): ChartDisplayUnits | null;
|
|
2459
|
+
/** How many categories pass between two labels (`c:tickLblSkip`), or `null` when automatic. */
|
|
2460
|
+
get labelSkip(): number | null;
|
|
2461
|
+
/** Whether a category axis flattens a multi-level category list (`c:noMultiLvlLbl`), or `null` when unstated. */
|
|
2462
|
+
get noMultiLevelLabels(): boolean | null;
|
|
2463
|
+
/** A date axis' base unit (`c:baseTimeUnit`: `days`, `months`, `years`), or `null`. */
|
|
2464
|
+
get baseTimeUnit(): string | null;
|
|
2465
|
+
/** A date axis' major unit scale (`c:majorTimeUnit`), or `null`. */
|
|
2466
|
+
get majorTimeUnit(): string | null;
|
|
2467
|
+
/** A date axis' minor unit scale (`c:minorTimeUnit`), or `null`. */
|
|
2468
|
+
get minorTimeUnit(): string | null;
|
|
2469
|
+
/** The axis line's own stroke (`c:spPr/a:ln`), or `null` when it states none. */
|
|
2470
|
+
get line(): ChartLine | null;
|
|
2471
|
+
/** The major gridlines' stroke (`c:majorGridlines/c:spPr/a:ln`), or `null` when they state none. */
|
|
2472
|
+
get majorGridlinesLine(): ChartLine | null;
|
|
1915
2473
|
/** Escape hatch: the underlying axis element. After mutating it call {@link markDirty}, or `save()` writes the original bytes. */
|
|
1916
2474
|
get element_(): Element;
|
|
1917
2475
|
/** Mark the owning chart part dirty so `save()` reserializes it. Call after mutating {@link element_}. */
|
|
@@ -1932,7 +2490,7 @@ declare class ChartSeries {
|
|
|
1932
2490
|
*/
|
|
1933
2491
|
get fill(): ChartFill | null;
|
|
1934
2492
|
/**
|
|
1935
|
-
* Series line/stroke (`c:spPr/a:ln`)
|
|
2493
|
+
* Series line/stroke (`c:spPr/a:ln`): width, dash, colour. `null` when the
|
|
1936
2494
|
* series `c:spPr` has no `a:ln` (bar/area fills carry no line by default).
|
|
1937
2495
|
*/
|
|
1938
2496
|
get line(): ChartLine | null;
|
|
@@ -1963,6 +2521,12 @@ declare class ChartSeries {
|
|
|
1963
2521
|
get xLabels(): (string | null)[] | null;
|
|
1964
2522
|
/** Cached Y values of a scatter or bubble series (`c:yVal`); non-numeric or missing points are `null`. */
|
|
1965
2523
|
get yValues(): (number | null)[];
|
|
2524
|
+
/**
|
|
2525
|
+
* The number format the series' values are cached in (`c:numCache/c:formatCode` under `c:val`, or
|
|
2526
|
+
* under `c:yVal` on a scatter or bubble series), or `null` when the cache states none. PowerPoint
|
|
2527
|
+
* paints a source-linked data label and a data table in it.
|
|
2528
|
+
*/
|
|
2529
|
+
get valueFormatCode(): string | null;
|
|
1966
2530
|
/** Cached bubble sizes of a bubble series (`c:bubbleSize`); non-numeric or missing points are `null`. */
|
|
1967
2531
|
get bubbleSizes(): (number | null)[];
|
|
1968
2532
|
/**
|
|
@@ -1983,14 +2547,38 @@ declare class ChartSeries {
|
|
|
1983
2547
|
* none. This is where a pie's labels are: see {@link Chart.dataLabels}.
|
|
1984
2548
|
*/
|
|
1985
2549
|
get dataLabels(): ChartDataLabels | null;
|
|
2550
|
+
/**
|
|
2551
|
+
* The series' labels that state their own text (`c:ser/c:dLbls/c:dLbl` with `c:tx/c:rich`), in
|
|
2552
|
+
* document order. A label that only formats or deletes its point has no text and is left out.
|
|
2553
|
+
*/
|
|
2554
|
+
get customLabels(): ChartPointLabel[];
|
|
2555
|
+
/** The series' gradient fill (`c:spPr/a:gradFill`), or `null`. */
|
|
2556
|
+
get gradientFill(): GradientFill | null;
|
|
2557
|
+
/** The series' pattern fill (`c:spPr/a:pattFill`), or `null`. */
|
|
2558
|
+
get patternFill(): PatternFill | null;
|
|
2559
|
+
/** The series' outer shadow (`c:spPr/a:effectLst/a:outerShdw`), or `null`. */
|
|
2560
|
+
get shadow(): OuterShadow | null;
|
|
2561
|
+
/** The series' inner shadow (`c:spPr/a:effectLst/a:innerShdw`), or `null`. */
|
|
2562
|
+
get innerShadow(): InnerShadow | null;
|
|
2563
|
+
/** Whether a line or scatter series is smoothed (`c:smooth`), or `null` when unstated. */
|
|
2564
|
+
get smooth(): boolean | null;
|
|
2565
|
+
/** The series' data-point marker (`c:marker`), or `null` when it states none. */
|
|
2566
|
+
get marker(): ChartMarker | null;
|
|
2567
|
+
/**
|
|
2568
|
+
* The points this series formats on its own (`c:dPt`), in document order: a bar's per-point
|
|
2569
|
+
* colours, a pie's slice colours. A `c:dPt` with no `c:idx` is left out.
|
|
2570
|
+
*/
|
|
2571
|
+
get dataPoints(): ChartDataPoint[];
|
|
2572
|
+
/** Whether a bar series paints a negative bar inverted (`c:invertIfNegative`), or `null` when unstated. */
|
|
2573
|
+
get invertIfNegative(): boolean | null;
|
|
2574
|
+
/** A 3-D bar series' own shape (`c:shape`: `box`, `cylinder`, `cone`, …), or `null` when unstated. */
|
|
2575
|
+
get shape(): string | null;
|
|
1986
2576
|
/** Escape hatch: the underlying `c:ser` element. After mutating it call {@link markDirty}, or `save()` writes the original bytes. */
|
|
1987
2577
|
get element_(): Element;
|
|
1988
2578
|
/** Mark the owning chart part dirty so `save()` reserializes it. Call after mutating {@link element_}. */
|
|
1989
2579
|
markDirty(): void;
|
|
1990
2580
|
}
|
|
1991
|
-
|
|
1992
|
-
//#region src/read/api/chartex.d.ts
|
|
1993
|
-
/** A chartEx legend (`cx:legend`) — a leaf element carrying position/alignment attributes. */
|
|
2581
|
+
/** A chartEx legend (`cx:legend`): a leaf element carrying position/alignment attributes. */
|
|
1994
2582
|
interface ChartExLegend {
|
|
1995
2583
|
/** Legend position (`@pos`): `t`/`b`/`l`/`r`. */
|
|
1996
2584
|
position: string | null;
|
|
@@ -2021,7 +2609,7 @@ declare class ChartEx {
|
|
|
2021
2609
|
/** Partname of the chartEx chart part. */
|
|
2022
2610
|
get partName(): string;
|
|
2023
2611
|
/**
|
|
2024
|
-
* The `cx:series/@layoutId` tokens in plot-area document order
|
|
2612
|
+
* The `cx:series/@layoutId` tokens in plot-area document order: the raw chartEx
|
|
2025
2613
|
* layout names (`waterfall`, `funnel`, `treemap`, `sunburst`, `boxWhisker`,
|
|
2026
2614
|
* `regionMap`, or `clusteredColumn`/`paretoLine` for histogram & pareto). This is
|
|
2027
2615
|
* the OOXML truth: a histogram and a pareto both surface as `clusteredColumn`, so
|
|
@@ -2074,7 +2662,7 @@ declare class ChartExSeries {
|
|
|
2074
2662
|
/** Cached numeric values (`cx:numDim`); non-numeric or missing points are `null`. */
|
|
2075
2663
|
get values(): (number | null)[];
|
|
2076
2664
|
/**
|
|
2077
|
-
* Cached category labels (`cx:strDim`'s leaf `cx:lvl
|
|
2665
|
+
* Cached category labels (`cx:strDim`'s leaf `cx:lvl`, the first level, which
|
|
2078
2666
|
* the writer emits leaf-first). Empty when the data block carries no `cx:strDim`.
|
|
2079
2667
|
*/
|
|
2080
2668
|
get categories(): (string | null)[];
|
|
@@ -2119,27 +2707,25 @@ declare class ChartExAxis {
|
|
|
2119
2707
|
/** Mark the owning chartEx part dirty so `save()` reserializes it. Call after mutating {@link element_}. */
|
|
2120
2708
|
markDirty(): void;
|
|
2121
2709
|
}
|
|
2122
|
-
//#endregion
|
|
2123
|
-
//#region src/read/api/diagram.d.ts
|
|
2124
2710
|
/**
|
|
2125
|
-
* `ST_PtType
|
|
2711
|
+
* `ST_PtType`: what a `dgm:pt` is.
|
|
2126
2712
|
*
|
|
2127
|
-
* - `node
|
|
2128
|
-
* - `asst
|
|
2129
|
-
* - `doc
|
|
2130
|
-
* - `pres
|
|
2131
|
-
* - `parTrans` / `sibTrans
|
|
2713
|
+
* - `node`: a user-authored node, and the default when `@type` is absent.
|
|
2714
|
+
* - `asst`: an assistant node (an org chart's off-branch box); user content too.
|
|
2715
|
+
* - `doc`: the data model's single root; carries the layout/style/colour preset ids.
|
|
2716
|
+
* - `pres`: generated by the layout engine to position a node; never user content.
|
|
2717
|
+
* - `parTrans` / `sibTrans`: the two transition points of an edge, which a few layouts
|
|
2132
2718
|
* (arrow processes, org-chart branches) let the user type a label into.
|
|
2133
2719
|
*/
|
|
2134
2720
|
type DiagramPointType = 'node' | 'asst' | 'doc' | 'pres' | 'parTrans' | 'sibTrans';
|
|
2135
2721
|
/**
|
|
2136
|
-
* `ST_CxnType
|
|
2722
|
+
* `ST_CxnType`: what a `dgm:cxn` asserts. `parOf` (the default) is the parent/child edge of
|
|
2137
2723
|
* the user's tree; `presOf` and `presParOf` bind a node to the generated `pres` point that
|
|
2138
2724
|
* draws it, and are the layout engine's bookkeeping rather than structure.
|
|
2139
2725
|
*/
|
|
2140
2726
|
type DiagramConnectionType = 'parOf' | 'presOf' | 'presParOf' | 'unknownRelationship';
|
|
2141
2727
|
/**
|
|
2142
|
-
* One edge of a diagram's data model (`dgm:cxn`)
|
|
2728
|
+
* One edge of a diagram's data model (`dgm:cxn`): an attribute-only element, so it reads as
|
|
2143
2729
|
* plain data rather than as a proxy.
|
|
2144
2730
|
*
|
|
2145
2731
|
* The ids are `ST_ModelId` GUIDs matching a {@link DiagramPoint.modelId}. `parOf` edges are
|
|
@@ -2151,9 +2737,9 @@ interface DiagramConnection {
|
|
|
2151
2737
|
modelId: string | null;
|
|
2152
2738
|
/** What the edge asserts (`@type`); `parOf` when absent, its schema default. */
|
|
2153
2739
|
type: DiagramConnectionType;
|
|
2154
|
-
/** The `@srcId` end
|
|
2740
|
+
/** The `@srcId` end: the parent, for a `parOf` edge. */
|
|
2155
2741
|
sourceId: string | null;
|
|
2156
|
-
/** The `@destId` end
|
|
2742
|
+
/** The `@destId` end: the child, for a `parOf` edge. */
|
|
2157
2743
|
destinationId: string | null;
|
|
2158
2744
|
/** The child's index among its siblings (`@srcOrd`). */
|
|
2159
2745
|
sourceOrder: number | null;
|
|
@@ -2167,14 +2753,14 @@ interface DiagramConnection {
|
|
|
2167
2753
|
presentationId: string | null;
|
|
2168
2754
|
}
|
|
2169
2755
|
/**
|
|
2170
|
-
* Where a point's text is drawn in the fallback drawing part
|
|
2756
|
+
* Where a point's text is drawn in the fallback drawing part: the second copy of every
|
|
2171
2757
|
* string a diagram carries, and the only one a renderer without a SmartArt layout engine
|
|
2172
2758
|
* paints. See {@link DiagramPoint.drawnShape} for how a point reaches it.
|
|
2173
2759
|
*/
|
|
2174
2760
|
interface DiagramDrawnShape {
|
|
2175
2761
|
/** The drawing part (`/ppt/diagrams/drawing{N}.xml`) the shape lives in. */
|
|
2176
2762
|
readonly part: Part;
|
|
2177
|
-
/** The `pres` point this shape draws (`dsp:sp/@modelId`)
|
|
2763
|
+
/** The `pres` point this shape draws (`dsp:sp/@modelId`), never the authored point's own id. */
|
|
2178
2764
|
readonly modelId: string;
|
|
2179
2765
|
/** Which paragraph of {@link textFrame} carries this point's text (the `presOf` edge's `@destOrd`). */
|
|
2180
2766
|
readonly paragraphIndex: number;
|
|
@@ -2182,7 +2768,7 @@ interface DiagramDrawnShape {
|
|
|
2182
2768
|
* The shape's `dsp:txBody`, bound to the **drawing** part rather than the data part, so
|
|
2183
2769
|
* an edit made through it marks the part that actually changed.
|
|
2184
2770
|
*
|
|
2185
|
-
* One shape commonly draws several points
|
|
2771
|
+
* One shape commonly draws several points (three of them in `mixed.pptx`), so writing
|
|
2186
2772
|
* `textFrame.text` here would delete the siblings' text. Replace paragraph
|
|
2187
2773
|
* {@link paragraphIndex} instead, which is what {@link DiagramPoint.text}'s setter does.
|
|
2188
2774
|
*/
|
|
@@ -2194,7 +2780,7 @@ interface DiagramDrawnShape {
|
|
|
2194
2780
|
* The node → drawn-shape index of one diagram: the `presOf` edges of the data model and the
|
|
2195
2781
|
* `dsp:sp` elements of the drawing part, both keyed for lookup.
|
|
2196
2782
|
*
|
|
2197
|
-
* Built once per {@link Diagram}, and only when a point is actually asked what draws it
|
|
2783
|
+
* Built once per {@link Diagram}, and only when a point is actually asked what draws it. The
|
|
2198
2784
|
* drawing part is a second XML DOM and a consumer reading node text should not pay to parse
|
|
2199
2785
|
* it. The consequence of that memo: a consumer who *adds* or *removes* shapes in the drawing
|
|
2200
2786
|
* part through the escape hatches must re-reach the diagram to see them here.
|
|
@@ -2222,8 +2808,8 @@ declare class DrawingIndex {
|
|
|
2222
2808
|
* Resolve one authored point to the `pres` point that presents it and to the drawn
|
|
2223
2809
|
* paragraph carrying its text.
|
|
2224
2810
|
*
|
|
2225
|
-
* A point commonly has **several** `presOf` arms
|
|
2226
|
-
* connector beneath it are two presentations of one node
|
|
2811
|
+
* A point commonly has **several** `presOf` arms (an org-chart node's box and the
|
|
2812
|
+
* connector beneath it are two presentations of one node), so the arm is chosen by what it
|
|
2227
2813
|
* reaches rather than by its `@srcOrd`: the first, in `@srcOrd` order, whose `pres` point
|
|
2228
2814
|
* draws a `dsp:sp` that has a `dsp:txBody`. That selector produced a unique hit for all 90
|
|
2229
2815
|
* authored points measured across five layout families, and it degrades to "no arm" rather
|
|
@@ -2259,7 +2845,7 @@ declare class DiagramPoint {
|
|
|
2259
2845
|
*/
|
|
2260
2846
|
get connectionId(): string | null;
|
|
2261
2847
|
/**
|
|
2262
|
-
* Whether this point is an unfilled prompt (`dgm:prSet/@phldr`)
|
|
2848
|
+
* Whether this point is an unfilled prompt (`dgm:prSet/@phldr`): a node PowerPoint draws
|
|
2263
2849
|
* with a grey placeholder string and treats as empty. Excluded from {@link Diagram.text}:
|
|
2264
2850
|
* a layout that stores its prompt in `dgm:t` would otherwise extract as content.
|
|
2265
2851
|
*/
|
|
@@ -2272,14 +2858,14 @@ declare class DiagramPoint {
|
|
|
2272
2858
|
* `resolved*` getters all apply.
|
|
2273
2859
|
*
|
|
2274
2860
|
* **Writing through this edits the data model only**, and leaves the drawing cache
|
|
2275
|
-
* holding the old string
|
|
2861
|
+
* holding the old string, which is what PowerPoint-less renderers draw. It is the escape
|
|
2276
2862
|
* hatch for run-level formatting, so it does exactly what it is told and nothing more;
|
|
2277
2863
|
* {@link text}'s setter is the path that mirrors.
|
|
2278
2864
|
*/
|
|
2279
2865
|
get textFrame(): TextFrame | null;
|
|
2280
2866
|
/**
|
|
2281
2867
|
* The generated `pres` point that presents this one (`dgm:cxn[@type="presOf"]/@destId`),
|
|
2282
|
-
* or `null` when nothing presents it
|
|
2868
|
+
* or `null` when nothing presents it (the normal state of an unlabelled transition point).
|
|
2283
2869
|
*
|
|
2284
2870
|
* Where a point has several `presOf` arms the one named here is the arm that draws text;
|
|
2285
2871
|
* see {@link drawnShape}, which resolves both.
|
|
@@ -2291,7 +2877,7 @@ declare class DiagramPoint {
|
|
|
2291
2877
|
*
|
|
2292
2878
|
* The mapping runs through the `pres` point rather than directly: a `dsp:sp/@modelId` is
|
|
2293
2879
|
* always a `pres` point's id, so a lookup keyed on the authored point's own id finds
|
|
2294
|
-
* nothing at all. It is many-to-one in both directions
|
|
2880
|
+
* nothing at all. It is many-to-one in both directions: one shape draws several points
|
|
2295
2881
|
* (`@destOrd` says which paragraph is whose, and it can contradict document order), and
|
|
2296
2882
|
* one point has several presentations, of which at most one holds text.
|
|
2297
2883
|
*
|
|
@@ -2321,7 +2907,7 @@ declare class DiagramPoint {
|
|
|
2321
2907
|
* Two things it deliberately does not do. It does **not** recompute geometry: the drawn
|
|
2322
2908
|
* shape keeps its cached position and size, so a much longer string overflows its box in
|
|
2323
2909
|
* those same renderers until PowerPoint re-lays the diagram out. And it does not *create*
|
|
2324
|
-
* a place to draw text
|
|
2910
|
+
* a place to draw text. A transition point whose layout has no label slot has no
|
|
2325
2911
|
* `dsp:sp`, and PowerPoint strips text put on one, so the honest outcome is the
|
|
2326
2912
|
* diagnostic. Like every other `text` setter here it collapses the point to one run,
|
|
2327
2913
|
* keeping the first run's `a:rPr`; use {@link textFrame} for run-level work.
|
|
@@ -2331,7 +2917,7 @@ declare class DiagramPoint {
|
|
|
2331
2917
|
get element_(): Element;
|
|
2332
2918
|
}
|
|
2333
2919
|
/**
|
|
2334
|
-
* One user-authored point in its place in the diagram's tree
|
|
2920
|
+
* One user-authored point in its place in the diagram's tree: a `node` or an `asst`, never a
|
|
2335
2921
|
* generated `pres` point or a transition label. See {@link Diagram.nodes}.
|
|
2336
2922
|
*/
|
|
2337
2923
|
declare class DiagramNode {
|
|
@@ -2359,7 +2945,7 @@ declare class Diagram {
|
|
|
2359
2945
|
/** The frame's `dgm:relIds`, which names the other three parts by relationship id. */
|
|
2360
2946
|
private readonly relIds;
|
|
2361
2947
|
private readonly opc;
|
|
2362
|
-
/** Relationships of the part holding the frame
|
|
2948
|
+
/** Relationships of the part holding the frame, which is what `dgm:relIds` resolves against. */
|
|
2363
2949
|
private readonly frameRelationships;
|
|
2364
2950
|
private readonly themeContext;
|
|
2365
2951
|
constructor(
|
|
@@ -2367,12 +2953,12 @@ declare class Diagram {
|
|
|
2367
2953
|
part: Part,
|
|
2368
2954
|
/** The frame's `dgm:relIds`, which names the other three parts by relationship id. */
|
|
2369
2955
|
relIds: Element, opc: OpcPackage,
|
|
2370
|
-
/** Relationships of the part holding the frame
|
|
2956
|
+
/** Relationships of the part holding the frame, which is what `dgm:relIds` resolves against. */
|
|
2371
2957
|
frameRelationships: Relationships, themeContext: ThemeContext);
|
|
2372
2958
|
/** Partname of the diagram data part. */
|
|
2373
2959
|
get partName(): string;
|
|
2374
2960
|
/**
|
|
2375
|
-
* Every point (`dgm:ptLst/dgm:pt`) in document order, unfiltered
|
|
2961
|
+
* Every point (`dgm:ptLst/dgm:pt`) in document order, unfiltered, with generated `pres`
|
|
2376
2962
|
* points and the `doc` root included. Filter on {@link DiagramPoint.type} for the user's
|
|
2377
2963
|
* nodes; {@link text} is the shortcut for the common case, {@link nodes} the structured one.
|
|
2378
2964
|
*
|
|
@@ -2382,8 +2968,8 @@ declare class Diagram {
|
|
|
2382
2968
|
*/
|
|
2383
2969
|
get points(): DiagramPoint[];
|
|
2384
2970
|
/**
|
|
2385
|
-
* The authored tree
|
|
2386
|
-
* order
|
|
2971
|
+
* The authored tree (every `node` and `asst` point in its place, roots in `@srcOrd`
|
|
2972
|
+
* order) as a view over {@link points} and {@link connections} rather than a replacement
|
|
2387
2973
|
* for either.
|
|
2388
2974
|
*
|
|
2389
2975
|
* A root is a content point whose `parOf` parent is not itself content, which in a
|
|
@@ -2395,14 +2981,15 @@ declare class Diagram {
|
|
|
2395
2981
|
*/
|
|
2396
2982
|
get nodes(): DiagramNode[];
|
|
2397
2983
|
/**
|
|
2398
|
-
* The point with this `@modelId`, or `null
|
|
2399
|
-
* since a `DiagramConnection` names its ends by id and nothing else resolves them.
|
|
2984
|
+
* The point with this `@modelId`, or `null`. This is the lookup every connection getter implies,
|
|
2985
|
+
* since a `DiagramConnection` names its ends by id and nothing else resolves them. Takes
|
|
2986
|
+
* `null`, as a connection end with no id reads, and misses on it.
|
|
2400
2987
|
*/
|
|
2401
|
-
point(modelId: string): DiagramPoint | null;
|
|
2988
|
+
point(modelId: string | null): DiagramPoint | null;
|
|
2402
2989
|
/** Every edge (`dgm:cxnLst/dgm:cxn`) in document order. */
|
|
2403
2990
|
get connections(): DiagramConnection[];
|
|
2404
2991
|
/**
|
|
2405
|
-
* The diagram's text in document order, blocks joined by `\n
|
|
2992
|
+
* The diagram's text in document order, blocks joined by `\n`: the counterpart to
|
|
2406
2993
|
* `TextFrame.text` for a construct that has no single text body.
|
|
2407
2994
|
*
|
|
2408
2995
|
* Contributing points are the ones a user can type into: everything except the generated
|
|
@@ -2439,8 +3026,6 @@ declare class Diagram {
|
|
|
2439
3026
|
/** Mark the diagram data part dirty so `save()` reserializes it. Call after mutating {@link element_}. */
|
|
2440
3027
|
markDirty(): void;
|
|
2441
3028
|
}
|
|
2442
|
-
//#endregion
|
|
2443
|
-
//#region src/read/api/table-edit.d.ts
|
|
2444
3029
|
/** The four edges plus the two diagonals, keyed as {@link TableCellEdge} names them. */
|
|
2445
3030
|
declare const EDGE_QNAMES: {
|
|
2446
3031
|
readonly left: 'a:lnL';
|
|
@@ -2452,10 +3037,8 @@ declare const EDGE_QNAMES: {
|
|
|
2452
3037
|
};
|
|
2453
3038
|
/** Which border of a cell an edit addresses. */
|
|
2454
3039
|
type TableCellEdge = keyof typeof EDGE_QNAMES;
|
|
2455
|
-
//#endregion
|
|
2456
|
-
//#region src/read/api/table-cell.d.ts
|
|
2457
3040
|
/**
|
|
2458
|
-
* One border as {@link TableCell.setBorder} takes it
|
|
3041
|
+
* One border as {@link TableCell.setBorder} takes it: the write-side mirror of
|
|
2459
3042
|
* {@link CellBorder}, which is what reading one gives back.
|
|
2460
3043
|
*
|
|
2461
3044
|
* Deliberately not `CellBorder` itself: that type reports every field, `null` included, so
|
|
@@ -2471,7 +3054,7 @@ interface TableCellBorderEdit {
|
|
|
2471
3054
|
color?: string;
|
|
2472
3055
|
/** Theme colour token (e.g. `accent1`); preferred over {@link color} when both are set. */
|
|
2473
3056
|
schemeColor?: string;
|
|
2474
|
-
/** Write an explicit `a:noFill
|
|
3057
|
+
/** Write an explicit `a:noFill`: a deliberately suppressed edge, not an absent one. */
|
|
2475
3058
|
noFill?: boolean;
|
|
2476
3059
|
}
|
|
2477
3060
|
/**
|
|
@@ -2491,7 +3074,7 @@ interface TableCellStyleContext {
|
|
|
2491
3074
|
* One edge border of a table cell (`a:tcPr/a:lnL|lnR|lnT|lnB|lnTlToBr|lnBlToTr`).
|
|
2492
3075
|
* Mirrors the `a:ln`-style decode used for shape strokes: {@link widthPt} from
|
|
2493
3076
|
* `@w` (EMU → points), {@link dash} from `a:prstDash/@val`, and the stroke colour as a
|
|
2494
|
-
* {@link ColorRef}
|
|
3077
|
+
* {@link ColorRef}. This is the cell-border counterpart of a shape's line accessors.
|
|
2495
3078
|
*/
|
|
2496
3079
|
interface CellBorder {
|
|
2497
3080
|
/** Border width in points (`@w` is EMU; 12700 EMU = 1pt), or `null` when unset. */
|
|
@@ -2505,8 +3088,14 @@ interface CellBorder {
|
|
|
2505
3088
|
* theme: a `lumMod`-darkened accent carried forward as a literal hex stops tracking its theme.
|
|
2506
3089
|
*/
|
|
2507
3090
|
colorRef: ColorRef;
|
|
2508
|
-
/** `true` when the edge is an explicit no-border (`a:noFill`)
|
|
3091
|
+
/** `true` when the edge is an explicit no-border (`a:noFill`): a deliberately suppressed side. */
|
|
2509
3092
|
noFill: boolean;
|
|
3093
|
+
/**
|
|
3094
|
+
* The line end cap (`@cap`) as the raw OOXML token (`flat`, `rnd`, `sq`), or `null` when unset.
|
|
3095
|
+
* PowerPoint writes `flat` on every edge it draws; the write side's `BorderProps.cap` is the
|
|
3096
|
+
* same attribute.
|
|
3097
|
+
*/
|
|
3098
|
+
cap: string | null;
|
|
2510
3099
|
}
|
|
2511
3100
|
/**
|
|
2512
3101
|
* A table cell's six possible borders, keyed by edge. Each side is `null` when the
|
|
@@ -2605,7 +3194,7 @@ declare class TableCell {
|
|
|
2605
3194
|
*/
|
|
2606
3195
|
setVerticalText(value: string | null): void;
|
|
2607
3196
|
/**
|
|
2608
|
-
* Set (or clear) `a:tcPr/@horzOverflow
|
|
3197
|
+
* Set (or clear) `a:tcPr/@horzOverflow`: what a single glyph too wide for the cell does.
|
|
2609
3198
|
* `null` removes the attribute; so does `'clip'` in effect, since it is the schema
|
|
2610
3199
|
* default, but the attribute is still written as asked.
|
|
2611
3200
|
* @throws {InvalidOptionError} when the value is outside `ST_TextHorzOverflowType`
|
|
@@ -2622,7 +3211,7 @@ declare class TableCell {
|
|
|
2622
3211
|
*
|
|
2623
3212
|
* Partial: only the sides named are touched, so `{ left: 0 }` flushes the text left and
|
|
2624
3213
|
* leaves the other three alone. A side given as `null` has its attribute removed, which
|
|
2625
|
-
* returns it to the schema default (91440 EMU left/right, 45720 top/bottom)
|
|
3214
|
+
* returns it to the schema default (91440 EMU left/right, 45720 top/bottom), not to
|
|
2626
3215
|
* zero. Pass `{}` to change nothing.
|
|
2627
3216
|
* @throws {InvalidOptionError} when a value is not a finite number
|
|
2628
3217
|
*/
|
|
@@ -2633,7 +3222,7 @@ declare class TableCell {
|
|
|
2633
3222
|
bottom?: number | null;
|
|
2634
3223
|
}): void;
|
|
2635
3224
|
/**
|
|
2636
|
-
* Set (or clear) one of the cell's six borders
|
|
3225
|
+
* Set (or clear) one of the cell's six borders: the four edges and the two diagonals.
|
|
2637
3226
|
*
|
|
2638
3227
|
* `null` removes the element entirely, which is "inherit", and is a different thing from
|
|
2639
3228
|
* `{ noFill: true }`, which writes an explicit no-border and suppresses whatever would
|
|
@@ -2652,7 +3241,7 @@ declare class TableCell {
|
|
|
2652
3241
|
* `null` removes the `a:solidFill` and lets the cell inherit from the table style again.
|
|
2653
3242
|
* That is not the same as {@link noFill}, which writes an explicit `a:noFill` and so
|
|
2654
3243
|
* suppresses the inherited shading. Any competing fill choice (`a:gradFill`,
|
|
2655
|
-
* `a:blipFill`, …) is dropped first
|
|
3244
|
+
* `a:blipFill`, …) is dropped first, since `EG_FillProperties` admits one.
|
|
2656
3245
|
* @throws {InvalidOptionError} when `color` is not a 6-digit hex string
|
|
2657
3246
|
*/
|
|
2658
3247
|
setFillColor(color: string | null): void;
|
|
@@ -2663,30 +3252,30 @@ declare class TableCell {
|
|
|
2663
3252
|
*/
|
|
2664
3253
|
setFillSchemeColor(token: string | null): void;
|
|
2665
3254
|
/**
|
|
2666
|
-
* Write an explicit `<a:noFill/>` on the cell
|
|
3255
|
+
* Write an explicit `<a:noFill/>` on the cell: a transparent cell that shows the table
|
|
2667
3256
|
* background (or the slide) through. Distinct from `setFillColor(null)`, which removes
|
|
2668
3257
|
* the fill and lets the table style's shading apply again.
|
|
2669
3258
|
*/
|
|
2670
3259
|
noFill(): void;
|
|
2671
3260
|
/**
|
|
2672
3261
|
* The cell's solid fill resolved against the table's theme colour context to a
|
|
2673
|
-
* literal hex
|
|
3262
|
+
* literal hex. It is the table-cell counterpart of
|
|
2674
3263
|
* {@link AutoShape.resolvedFill}. The cell's own
|
|
2675
3264
|
* `a:tcPr/a:solidFill` wins; when the cell defines none, this falls back to the
|
|
2676
3265
|
* table **style** graph (the `firstRow`/banded/`wholeTbl` shading the
|
|
2677
|
-
* `a:tableStyleId` supplies
|
|
3266
|
+
* `a:tableStyleId` supplies; see {@link Table.resolvedStyle}), so a styled cell
|
|
2678
3267
|
* with an empty `a:tcPr` reports the colour PowerPoint actually renders rather
|
|
2679
3268
|
* than `null`.
|
|
2680
3269
|
*
|
|
2681
3270
|
* A cell that carries *some other* fill choice (`a:blipFill`/`a:gradFill`/
|
|
2682
3271
|
* `a:pattFill`/`a:noFill`) overrides the style graph in PowerPoint, so this
|
|
2683
|
-
* reports `null` for one rather than falling through to the inherited shading
|
|
3272
|
+
* reports `null` for one rather than falling through to the inherited shading,
|
|
2684
3273
|
* the same guard {@link AutoShape.resolvedFill} applies to
|
|
2685
3274
|
* the style matrix. Read {@link pictureFill} for an image-filled cell. Also
|
|
2686
3275
|
* `null` when neither source yields a solid colour (an
|
|
2687
3276
|
* unmapped token, an explicit style `a:noFill`). The returned
|
|
2688
3277
|
* {@link ResolvedColor} carries `effectiveHex` (the base colour with its
|
|
2689
|
-
* `lumMod`/`lumOff`/… transforms applied)
|
|
3278
|
+
* `lumMod`/`lumOff`/… transforms applied); read that for the final colour.
|
|
2690
3279
|
*/
|
|
2691
3280
|
get resolvedFill(): ResolvedColor | null;
|
|
2692
3281
|
/**
|
|
@@ -2694,7 +3283,7 @@ declare class TableCell {
|
|
|
2694
3283
|
* child), as opposed to inheriting one from the table style's header/banding rules.
|
|
2695
3284
|
*
|
|
2696
3285
|
* This is the flag that disambiguates {@link resolvedFill}, which deliberately reports
|
|
2697
|
-
* either
|
|
3286
|
+
* either: it answers "what colour does this cell render as", and both sources are valid
|
|
2698
3287
|
* answers to that. Anything that has to reproduce the cell rather than describe it needs
|
|
2699
3288
|
* to know which: baking an inherited banding colour into a copy makes the copy look right
|
|
2700
3289
|
* until someone changes its table style, and then nothing moves. `false` for a cell whose
|
|
@@ -2702,20 +3291,20 @@ declare class TableCell {
|
|
|
2702
3291
|
*/
|
|
2703
3292
|
get hasOwnFill(): boolean;
|
|
2704
3293
|
/**
|
|
2705
|
-
* `true` when the cell sets an explicit no-fill (`a:tcPr/a:noFill`)
|
|
3294
|
+
* `true` when the cell sets an explicit no-fill (`a:tcPr/a:noFill`): a deliberately
|
|
2706
3295
|
* transparent cell showing the table background (or the slide) through. The cell-side
|
|
2707
3296
|
* counterpart of {@link AutoShape.fillNoFill}, and what
|
|
2708
3297
|
* {@link noFill} writes.
|
|
2709
3298
|
*
|
|
2710
3299
|
* {@link hasOwnFill} is not this question: it is `true` for *any* `EG_FillProperties`
|
|
2711
3300
|
* child, so on its own it cannot separate a suppressed fill from a gradient or an image
|
|
2712
|
-
* one
|
|
3301
|
+
* one, and every colour accessor ({@link resolvedFill}, {@link fillSchemeColor})
|
|
2713
3302
|
* reports `null` for a no-fill cell exactly as it does for a
|
|
2714
3303
|
* cell that inherits its shading from the table style. Deriving it as "has a fill of its
|
|
2715
3304
|
* own, and no accessor recognises it" instead of reading it has two failure modes: it
|
|
2716
3305
|
* folds `a:grpFill` in with `a:noFill`, and its meaning changes silently the day a
|
|
2717
|
-
* further fill kind gets an accessor. The two paint completely differently
|
|
2718
|
-
* inherited banding colour versus nothing at all
|
|
3306
|
+
* further fill kind gets an accessor. The two paint completely differently (an
|
|
3307
|
+
* inherited banding colour versus nothing at all), so a consumer that cannot tell them
|
|
2719
3308
|
* apart paints a transparent cell in the style's shading.
|
|
2720
3309
|
*/
|
|
2721
3310
|
get fillNoFill(): boolean;
|
|
@@ -2753,7 +3342,7 @@ declare class TableCell {
|
|
|
2753
3342
|
* `null` when the cell defines none. Each present edge decodes to a
|
|
2754
3343
|
* {@link CellBorder} (width / dash / resolved colour + its raw token and transform
|
|
2755
3344
|
* list / suppressed flag);
|
|
2756
|
-
* absent edges are `null`. Cell borders are the biggest visible table gap
|
|
3345
|
+
* absent edges are `null`. Cell borders are the biggest visible table gap: a
|
|
2757
3346
|
* replica built only from geometry and fill draws every cell edge-to-edge with
|
|
2758
3347
|
* no rule, so this surfaces the per-side stroke the writer's `border` option emits.
|
|
2759
3348
|
*/
|
|
@@ -2770,7 +3359,7 @@ declare class TableCell {
|
|
|
2770
3359
|
get anchor(): string | null;
|
|
2771
3360
|
/**
|
|
2772
3361
|
* Whether the cell's whole text **block** is centred horizontally within it
|
|
2773
|
-
* (`a:tcPr/@anchorCtr`). `false` when unset
|
|
3362
|
+
* (`a:tcPr/@anchorCtr`). `false` when unset; that is the schema default, and it is
|
|
2774
3363
|
* what PowerPoint writes nothing for.
|
|
2775
3364
|
*
|
|
2776
3365
|
* Distinct from a paragraph's `align`, which decides where each *line* sits inside the
|
|
@@ -2790,19 +3379,19 @@ declare class TableCell {
|
|
|
2790
3379
|
*
|
|
2791
3380
|
* This is what {@link headerIds} references: a data cell names the header cells that
|
|
2792
3381
|
* govern it by their `@id`, which is how a complex table tells a screen reader what a
|
|
2793
|
-
* value means. Unrelated to the shape-level `p:cNvPr/@id
|
|
3382
|
+
* value means. Unrelated to the shape-level `p:cNvPr/@id`: it is an `xs:string` scoped
|
|
2794
3383
|
* to the table, not a slide-wide numeric id.
|
|
2795
3384
|
*
|
|
2796
3385
|
* **PowerPoint does not write this and strips it on save**, so it will read `null` on
|
|
2797
3386
|
* any deck PowerPoint has saved, however it was produced. It is surfaced for decks from
|
|
2798
|
-
* other producers. There is deliberately no write-API counterpart
|
|
3387
|
+
* other producers. There is deliberately no write-API counterpart; see
|
|
2799
3388
|
* `test/read/fixtures/authoring/probe-table-cell-a11y-and-3d.ps1` for the measurement.
|
|
2800
3389
|
*/
|
|
2801
3390
|
get id(): string | null;
|
|
2802
3391
|
/**
|
|
2803
3392
|
* The `@id`s of the header cells that govern this cell
|
|
2804
3393
|
* (`a:tcPr/a:headers/a:header/@val`), in document order. Empty when the cell declares no
|
|
2805
|
-
* header association
|
|
3394
|
+
* header association, which is the common case, since only a complex table needs one.
|
|
2806
3395
|
*
|
|
2807
3396
|
* Carries the same caveat as {@link id}: PowerPoint strips `a:headers` on save, so this
|
|
2808
3397
|
* is empty on any PowerPoint-saved deck. `Table.firstRowHeader` (`a:tblPr/@firstRow`) is
|
|
@@ -2812,7 +3401,7 @@ declare class TableCell {
|
|
|
2812
3401
|
/**
|
|
2813
3402
|
* How the cell treats a glyph too wide for its text width (`a:tcPr/@horzOverflow`):
|
|
2814
3403
|
* `'clip'` cuts it at the cell edge, `'overflow'` lets it draw past. `null` when unset
|
|
2815
|
-
* (PowerPoint clips). Not a wrap flag
|
|
3404
|
+
* (PowerPoint clips). Not a wrap flag: cell text always wraps to the column width.
|
|
2816
3405
|
*/
|
|
2817
3406
|
get horzOverflow(): string | null;
|
|
2818
3407
|
/**
|
|
@@ -2836,8 +3425,6 @@ declare class TableCell {
|
|
|
2836
3425
|
/** Mark the owning part dirty so `save()` reserializes it. Call after mutating {@link element_}. */
|
|
2837
3426
|
markDirty(): void;
|
|
2838
3427
|
}
|
|
2839
|
-
//#endregion
|
|
2840
|
-
//#region src/read/api/table-row.d.ts
|
|
2841
3428
|
/** One table row (`a:tr`). */
|
|
2842
3429
|
declare class TableRow {
|
|
2843
3430
|
private readonly tr;
|
|
@@ -2868,8 +3455,6 @@ declare class TableRow {
|
|
|
2868
3455
|
/** Mark the owning part dirty so `save()` reserializes it. Call after mutating {@link element_}. */
|
|
2869
3456
|
markDirty(): void;
|
|
2870
3457
|
}
|
|
2871
|
-
//#endregion
|
|
2872
|
-
//#region src/read/api/table.d.ts
|
|
2873
3458
|
/** A table: a grid of rows and cells inside a graphic frame. */
|
|
2874
3459
|
declare class Table {
|
|
2875
3460
|
#private;
|
|
@@ -2895,7 +3480,7 @@ declare class Table {
|
|
|
2895
3480
|
* from the deck's `tableStyles.xml`, or `null` when the table names no
|
|
2896
3481
|
* `a:tableStyleId`, the deck has no `tableStyles.xml`, or the id is a built-in
|
|
2897
3482
|
* `[MS-OE376]` style the deck does not materialise. This is what supplies the
|
|
2898
|
-
* banded-row / header shading a cell with no own fill inherits
|
|
3483
|
+
* banded-row / header shading a cell with no own fill inherits. Read the
|
|
2899
3484
|
* resolved per-cell colour off {@link TableCell.resolvedFill}.
|
|
2900
3485
|
*
|
|
2901
3486
|
* Resolved afresh on every read, not through the per-instance memo the cells share, so an
|
|
@@ -2914,7 +3499,7 @@ declare class Table {
|
|
|
2914
3499
|
* `{5940675A-B579-460E-94D1-54222C63F5DA}`, or `null` when the table carries no
|
|
2915
3500
|
* `a:tableStyleId`. This is the reference into `ppt/tableStyles.xml` (or a
|
|
2916
3501
|
* built-in `[MS-OE376]` style) that supplies the banded-row / header shading the
|
|
2917
|
-
* `firstRow`/`bandRow` flags activate
|
|
3502
|
+
* `firstRow`/`bandRow` flags activate. Without it a replica loses the whole
|
|
2918
3503
|
* table style, so it is the read counterpart of the writer's `tableStyle` option.
|
|
2919
3504
|
*/
|
|
2920
3505
|
get styleId(): string | null;
|
|
@@ -2925,7 +3510,7 @@ declare class Table {
|
|
|
2925
3510
|
* This is the table-level counterpart of {@link TableCell.resolvedFill}, and it is a
|
|
2926
3511
|
* genuinely different thing from a cell fill: a `a:tblPr` fill sits *behind* the grid, so
|
|
2927
3512
|
* a cell with no fill of its own shows it through. Reports `null` for a non-solid choice
|
|
2928
|
-
* (`a:blipFill`/`a:gradFill`/`a:pattFill`/`a:noFill`)
|
|
3513
|
+
* (`a:blipFill`/`a:gradFill`/`a:pattFill`/`a:noFill`); read {@link pictureFill} for an
|
|
2929
3514
|
* image background.
|
|
2930
3515
|
*/
|
|
2931
3516
|
get resolvedFill(): ResolvedColor | null;
|
|
@@ -2975,6 +3560,11 @@ declare class Table {
|
|
|
2975
3560
|
get firstColumnHeader(): boolean;
|
|
2976
3561
|
/** Whether the last column is emphasised (`a:tblPr/@lastCol`), from `addTable`'s `hasLastColumn`. */
|
|
2977
3562
|
get lastColumnFooter(): boolean;
|
|
3563
|
+
/**
|
|
3564
|
+
* Whether the table reads right to left (`a:tblPr/@rtl`), from `addTable`'s `rtl`: its columns
|
|
3565
|
+
* run from the right edge, so column 0 is the rightmost.
|
|
3566
|
+
*/
|
|
3567
|
+
get rtl(): boolean;
|
|
2978
3568
|
/**
|
|
2979
3569
|
* The cell at `(rowIndex, columnIndex)` (both zero-based), or `null` when out
|
|
2980
3570
|
* of range. Column index counts `a:tc` elements in the row, so a cell that
|
|
@@ -2996,7 +3586,7 @@ declare class Table {
|
|
|
2996
3586
|
* Remove the row at `index`, with its content.
|
|
2997
3587
|
*
|
|
2998
3588
|
* A cell in the row that *continues* a vertical merge shortens that merge. A cell that
|
|
2999
|
-
* *starts* one hands the region to its first continuation, which becomes the new origin
|
|
3589
|
+
* *starts* one hands the region to its first continuation, which becomes the new origin:
|
|
3000
3590
|
* the merged region survives one row shorter, and only the removed row's own text is lost.
|
|
3001
3591
|
* @throws {InvalidOptionError} when `index` is out of range
|
|
3002
3592
|
*/
|
|
@@ -3026,7 +3616,7 @@ declare class Table {
|
|
|
3026
3616
|
* never rendered.
|
|
3027
3617
|
*
|
|
3028
3618
|
* A rectangle that cuts through an existing merge is **rejected**, not silently widened
|
|
3029
|
-
* to fit
|
|
3619
|
+
* to fit. The caller asked for a specific region, and quietly producing a different one
|
|
3030
3620
|
* is how a layout ends up wrong with nothing to point at. Unmerge first.
|
|
3031
3621
|
* @throws {InvalidOptionError} when an index is out of range, the range covers one cell,
|
|
3032
3622
|
* or it partially overlaps an existing merge
|
|
@@ -3044,9 +3634,7 @@ declare class Table {
|
|
|
3044
3634
|
/** Mark the owning part dirty so `save()` reserializes it. Call after mutating {@link element_}. */
|
|
3045
3635
|
markDirty(): void;
|
|
3046
3636
|
}
|
|
3047
|
-
|
|
3048
|
-
//#region src/read/api/shapes/graphic-frame.d.ts
|
|
3049
|
-
/** A graphic frame (`p:graphicFrame`) — host for tables, charts and SmartArt diagrams. */
|
|
3637
|
+
/** A graphic frame (`p:graphicFrame`), the host for tables, charts and SmartArt diagrams. */
|
|
3050
3638
|
declare class GraphicFrame extends Shape {
|
|
3051
3639
|
#private;
|
|
3052
3640
|
readonly shapeType: 'graphicFrame';
|
|
@@ -3068,7 +3656,7 @@ declare class GraphicFrame extends Shape {
|
|
|
3068
3656
|
*/
|
|
3069
3657
|
get hasDiagram(): boolean;
|
|
3070
3658
|
/**
|
|
3071
|
-
* The `a:graphicData/@uri` verbatim
|
|
3659
|
+
* The `a:graphicData/@uri` verbatim: the namespace naming what this frame hosts, or
|
|
3072
3660
|
* `null` when the frame carries no `a:graphicData`.
|
|
3073
3661
|
*
|
|
3074
3662
|
* Every `has*` predicate is a comparison against this, so a frame whose URI matches none
|
|
@@ -3094,10 +3682,8 @@ declare class GraphicFrame extends Shape {
|
|
|
3094
3682
|
*/
|
|
3095
3683
|
get diagram(): Diagram | null;
|
|
3096
3684
|
}
|
|
3097
|
-
//#endregion
|
|
3098
|
-
//#region src/read/api/shapes.d.ts
|
|
3099
3685
|
/**
|
|
3100
|
-
* A group shape (`p:grpSp`)
|
|
3686
|
+
* A group shape (`p:grpSp`), which contains nested shapes.
|
|
3101
3687
|
*
|
|
3102
3688
|
* It is the one kind defined here rather than under `./shapes/`: its `shapes` getter recurses
|
|
3103
3689
|
* through `buildShapes` below, so putting it in a sibling module would make the dispatch and the
|
|
@@ -3116,7 +3702,7 @@ declare class GroupShape extends Shape {
|
|
|
3116
3702
|
* element is incomplete.
|
|
3117
3703
|
*
|
|
3118
3704
|
* Most consumers should not need this: {@link Shape.absoluteFrame} already
|
|
3119
|
-
* composes the whole ancestor chain
|
|
3705
|
+
* composes the whole ancestor chain (child space, group flips and rotations),
|
|
3120
3706
|
* and doing that arithmetic per consumer is how a shape in a nested group ends
|
|
3121
3707
|
* up subtly displaced. It is here for a *replica* consumer rather than a
|
|
3122
3708
|
* *paint* one: rebuilding this group and its children as OOXML needs the
|
|
@@ -3132,24 +3718,22 @@ declare class GroupShape extends Shape {
|
|
|
3132
3718
|
* {@link Shape.shapeType} literal. The read API (`Slide.shapes`,
|
|
3133
3719
|
* `Slide.shapeById`, `GroupShape.shapes`, `Presentation.importShape`, …) returns
|
|
3134
3720
|
* this rather than the abstract {@link Shape} base, so a consumer can narrow to a
|
|
3135
|
-
* subtype by its discriminant and reach the subtype-only members
|
|
3721
|
+
* subtype by its discriminant and reach the subtype-only members, e.g.
|
|
3136
3722
|
* `if (shape.shapeType === 'graphicFrame') shape.chart` or, equivalently, the
|
|
3137
3723
|
* {@link isGraphicFrame} guard. The abstract {@link Shape} base is still exported
|
|
3138
3724
|
* for the "common members only" case and for `instanceof` checks.
|
|
3139
3725
|
*/
|
|
3140
3726
|
type AnyShape = AutoShape | Picture | Connector | GraphicFrame | GroupShape;
|
|
3141
|
-
/** Narrow a shape to an {@link AutoShape} (`p:sp
|
|
3727
|
+
/** Narrow a shape to an {@link AutoShape} (`p:sp`: auto shape, text box, or placeholder). */
|
|
3142
3728
|
declare function isAutoShape(shape: Shape): shape is AutoShape;
|
|
3143
3729
|
/** Narrow a shape to a {@link Picture} (`p:pic`). */
|
|
3144
3730
|
declare function isPicture(shape: Shape): shape is Picture;
|
|
3145
3731
|
/** Narrow a shape to a {@link Connector} (`p:cxnSp`). */
|
|
3146
3732
|
declare function isConnector(shape: Shape): shape is Connector;
|
|
3147
|
-
/** Narrow a shape to a {@link GraphicFrame} (`p:graphicFrame
|
|
3733
|
+
/** Narrow a shape to a {@link GraphicFrame} (`p:graphicFrame`, the table/chart host). */
|
|
3148
3734
|
declare function isGraphicFrame(shape: Shape): shape is GraphicFrame;
|
|
3149
3735
|
/** Narrow a shape to a {@link GroupShape} (`p:grpSp`). */
|
|
3150
3736
|
declare function isGroupShape(shape: Shape): shape is GroupShape;
|
|
3151
|
-
//#endregion
|
|
3152
|
-
//#region src/read/api/chrome.d.ts
|
|
3153
3737
|
/**
|
|
3154
3738
|
* One theme font family (`a:majorFont` or `a:minorFont`): the primary Latin face
|
|
3155
3739
|
* plus the East-Asian and complex-script faces. Each is `null` when the theme
|
|
@@ -3157,20 +3741,20 @@ declare function isGroupShape(shape: Shape): shape is GroupShape;
|
|
|
3157
3741
|
* per-script `<a:font>` fallback list is not decoded here.
|
|
3158
3742
|
*/
|
|
3159
3743
|
interface ThemeFontFace {
|
|
3160
|
-
/** `<a:latin@typeface
|
|
3744
|
+
/** `<a:latin@typeface>`: the primary face (e.g. `Calibri Light`), or `null` when empty. */
|
|
3161
3745
|
latin: string | null;
|
|
3162
|
-
/** `<a:ea@typeface
|
|
3746
|
+
/** `<a:ea@typeface>`: the East-Asian face, or `null` when empty. */
|
|
3163
3747
|
ea: string | null;
|
|
3164
|
-
/** `<a:cs@typeface
|
|
3748
|
+
/** `<a:cs@typeface>`: the complex-script face, or `null` when empty. */
|
|
3165
3749
|
cs: string | null;
|
|
3166
3750
|
}
|
|
3167
3751
|
/** A theme's `a:fontScheme`: its name plus the major (heading) and minor (body) font families. */
|
|
3168
3752
|
interface ThemeFontScheme {
|
|
3169
3753
|
/** `<a:fontScheme@name>` (e.g. `Office`), or `null` when unnamed. */
|
|
3170
3754
|
name: string | null;
|
|
3171
|
-
/** The `a:majorFont` family
|
|
3755
|
+
/** The `a:majorFont` family: the heading (`+mj-*`) fonts. */
|
|
3172
3756
|
major: ThemeFontFace;
|
|
3173
|
-
/** The `a:minorFont` family
|
|
3757
|
+
/** The `a:minorFont` family: the body (`+mn-*`) fonts. */
|
|
3174
3758
|
minor: ThemeFontFace;
|
|
3175
3759
|
}
|
|
3176
3760
|
/**
|
|
@@ -3214,7 +3798,7 @@ declare class Theme {
|
|
|
3214
3798
|
markDirty(): void;
|
|
3215
3799
|
}
|
|
3216
3800
|
/**
|
|
3217
|
-
* One placeholder shape (`p:sp` with a `p:ph`) of a slide master or slide layout
|
|
3801
|
+
* One placeholder shape (`p:sp` with a `p:ph`) of a slide master or slide layout:
|
|
3218
3802
|
* the definition a slide's placeholder of the same `type`/`idx` inherits geometry
|
|
3219
3803
|
* and text style from. Geometry getters read the placeholder's *own* `a:xfrm`,
|
|
3220
3804
|
* which a master/layout placeholder carries explicitly (so it round-trips, unlike a
|
|
@@ -3230,7 +3814,7 @@ declare class Theme {
|
|
|
3230
3814
|
declare class Placeholder {
|
|
3231
3815
|
/** The placeholder's `p:sp`. `protected` so {@link NotesPlaceholder} can read it. */
|
|
3232
3816
|
protected readonly sp: Element;
|
|
3233
|
-
/** The part the `p:sp` lives in
|
|
3817
|
+
/** The part the `p:sp` lives in: a master, a layout, or a notes slide. */
|
|
3234
3818
|
protected readonly host: ShapeHost;
|
|
3235
3819
|
/**
|
|
3236
3820
|
* The same `p:sp` as an {@link AutoShape}. Identity, geometry and the text frame are
|
|
@@ -3242,14 +3826,14 @@ declare class Placeholder {
|
|
|
3242
3826
|
* `xfrm()` + `emuFrom`; and,
|
|
3243
3827
|
* the one that showed, the text frame was built with **no** inheritance context, so
|
|
3244
3828
|
* `Run.resolvedSizePt`, `resolvedFontFace`, `resolvedColor` and `resolvedBold` resolved
|
|
3245
|
-
* through `SlideMaster.shapes` and came back `null` through `SlideMaster.placeholders
|
|
3829
|
+
* through `SlideMaster.shapes` and came back `null` through `SlideMaster.placeholders`:
|
|
3246
3830
|
* two views of one element disagreeing about the same run.
|
|
3247
3831
|
*/
|
|
3248
3832
|
protected readonly shape: AutoShape;
|
|
3249
3833
|
constructor(
|
|
3250
3834
|
/** The placeholder's `p:sp`. `protected` so {@link NotesPlaceholder} can read it. */
|
|
3251
3835
|
sp: Element,
|
|
3252
|
-
/** The part the `p:sp` lives in
|
|
3836
|
+
/** The part the `p:sp` lives in: a master, a layout, or a notes slide. */
|
|
3253
3837
|
host: ShapeHost);
|
|
3254
3838
|
/** Placeholder type (`p:ph/@type`: `title` | `body` | `sldNum` | …), or `null` when absent (a body placeholder). */
|
|
3255
3839
|
get type(): string | null;
|
|
@@ -3286,7 +3870,7 @@ declare class Placeholder {
|
|
|
3286
3870
|
markDirty(): void;
|
|
3287
3871
|
}
|
|
3288
3872
|
/**
|
|
3289
|
-
* The shared body of a slide master and a slide layout
|
|
3873
|
+
* The shared body of a slide master and a slide layout, the two template tiers a slide
|
|
3290
3874
|
* inherits from.
|
|
3291
3875
|
*
|
|
3292
3876
|
* Both are an OPC part holding a `p:cSld` with a shape tree and a resolvable theme context, and
|
|
@@ -3304,7 +3888,7 @@ declare class Placeholder {
|
|
|
3304
3888
|
*
|
|
3305
3889
|
* `Slide` deliberately does not extend this. It is a shape host too, but it is constructed from
|
|
3306
3890
|
* a `Presentation` rather than an `OpcPackage`, reaches its relationships through that, and
|
|
3307
|
-
* reports an unnamed slide as `null` where a template tier reports `''
|
|
3891
|
+
* reports an unnamed slide as `null` where a template tier reports `''`. That is three differences in
|
|
3308
3892
|
* the same handful of members, which is more contortion than the sharing is worth.
|
|
3309
3893
|
*/
|
|
3310
3894
|
declare abstract class TemplatePart implements ShapeHost {
|
|
@@ -3325,14 +3909,14 @@ declare abstract class TemplatePart implements ShapeHost {
|
|
|
3325
3909
|
/** The authoring name (`p:cSld/@name`), or `''` when unnamed. */
|
|
3326
3910
|
get name(): string;
|
|
3327
3911
|
/**
|
|
3328
|
-
* Every shape in this tier's `p:cSld/p:spTree`, in document order
|
|
3912
|
+
* Every shape in this tier's `p:cSld/p:spTree`, in document order: the same `AnyShape`
|
|
3329
3913
|
* union `Slide.shapes` returns, so shape-walking code applies unchanged.
|
|
3330
3914
|
*
|
|
3331
3915
|
* {@link placeholders} is the filtered view of the same tree.
|
|
3332
3916
|
*/
|
|
3333
3917
|
get shapes(): AnyShape[];
|
|
3334
|
-
/** The shape anywhere in this tier's tree with the given drawing id, or `undefined
|
|
3335
|
-
shapeByIdDeep(id: number): AnyShape | undefined;
|
|
3918
|
+
/** The shape anywhere in this tier's tree with the given drawing id, or `undefined` (always, for `null`). */
|
|
3919
|
+
shapeByIdDeep(id: number | null): AnyShape | undefined;
|
|
3336
3920
|
/** This tier's placeholder shapes (`p:sp` carrying a `p:ph`), in document order. */
|
|
3337
3921
|
get placeholders(): Placeholder[];
|
|
3338
3922
|
/** This tier's colour/font context, resolved once and cached. Backs each {@link Placeholder}'s text frame. */
|
|
@@ -3375,23 +3959,23 @@ declare class SlideMaster extends TemplatePart {
|
|
|
3375
3959
|
get layouts(): SlideLayout[];
|
|
3376
3960
|
/**
|
|
3377
3961
|
* The master's *own* background (`p:cSld/p:bg`), decoded, or `null` when it defines
|
|
3378
|
-
* none. Scoped to the master's own element
|
|
3962
|
+
* none. Scoped to the master's own element. A slide's *effective* background,
|
|
3379
3963
|
* resolved through the slide → layout → master chain, is `Slide.background`.
|
|
3380
3964
|
*/
|
|
3381
3965
|
get background(): SlideBackground | null;
|
|
3382
|
-
/** A master's context is its own `p:clrMap` plus its theme
|
|
3966
|
+
/** A master's context is its own `p:clrMap` plus its theme; no walk beyond this part. */
|
|
3383
3967
|
protected resolveThemeContext(): ThemeContext;
|
|
3384
3968
|
}
|
|
3385
3969
|
/**
|
|
3386
|
-
* A deck's slide layout (`slideLayoutN.xml`) as a modeled object
|
|
3970
|
+
* A deck's slide layout (`slideLayoutN.xml`) as a modeled object: the gallery entry
|
|
3387
3971
|
* a slide binds to. Exposes its {@link name}, its {@link type} (import-only; the
|
|
3388
3972
|
* writer authors none), its {@link master} (and, through it, the {@link theme}), its
|
|
3389
3973
|
* `shapes` and the `placeholders` subset of them, and its own {@link background}.
|
|
3390
3974
|
* Reachable from `Slide.layout` and {@link SlideMaster.layouts}.
|
|
3391
3975
|
*
|
|
3392
3976
|
* The write API authors non-placeholder shapes into a layout: every
|
|
3393
|
-
* `defineSlideMaster({ objects })` member that is not a `placeholder`
|
|
3394
|
-
* `line`, an `image`, a `chart`, a `text` box
|
|
3977
|
+
* `defineSlideMaster({ objects })` member that is not a `placeholder` (a `rect`, a
|
|
3978
|
+
* `line`, an `image`, a `chart`, a `text` box) lands in this tier's tree.
|
|
3395
3979
|
*/
|
|
3396
3980
|
declare class SlideLayout extends TemplatePart {
|
|
3397
3981
|
/**
|
|
@@ -3403,7 +3987,7 @@ declare class SlideLayout extends TemplatePart {
|
|
|
3403
3987
|
/**
|
|
3404
3988
|
* Whether this layout draws the master's non-placeholder shapes
|
|
3405
3989
|
* (`p:sldLayout/@showMasterSp`). `xsd:boolean` defaulting to `true`, so an absent
|
|
3406
|
-
* attribute means shown
|
|
3990
|
+
* attribute means shown. This is the layout-tier counterpart of `Slide.showMasterSp`,
|
|
3407
3991
|
* and the one PowerPoint actually writes on a section-divider or full-bleed
|
|
3408
3992
|
* layout. A renderer resolving what to paint under a slide's own shapes has to
|
|
3409
3993
|
* consult both: the slide's flag, then its layout's.
|
|
@@ -3415,7 +3999,7 @@ declare class SlideLayout extends TemplatePart {
|
|
|
3415
3999
|
get theme(): Theme | null;
|
|
3416
4000
|
/**
|
|
3417
4001
|
* The layout's *own* background (`p:cSld/p:bg`), decoded, or `null` when it defines
|
|
3418
|
-
* none. A layout usually authors one
|
|
4002
|
+
* none. A layout usually authors one: an explicit fill (`p:bgPr`) or a
|
|
3419
4003
|
* theme-indexed reference (`p:bgRef`). The slide's *effective* background is
|
|
3420
4004
|
* `Slide.background`.
|
|
3421
4005
|
*/
|
|
@@ -3423,8 +4007,6 @@ declare class SlideLayout extends TemplatePart {
|
|
|
3423
4007
|
/** A layout's context is walked layout → master → theme, which is why it is not the master's. */
|
|
3424
4008
|
protected resolveThemeContext(): ThemeContext;
|
|
3425
4009
|
}
|
|
3426
|
-
//#endregion
|
|
3427
|
-
//#region src/read/api/notes.d.ts
|
|
3428
4010
|
/**
|
|
3429
4011
|
* One placeholder shape (`p:sp`) of a notes slide. A notes slide holds a fixed set:
|
|
3430
4012
|
* the slide thumbnail (`type="sldImg"`), the notes body (`type="body"`), and the
|
|
@@ -3432,8 +4014,8 @@ declare class SlideLayout extends TemplatePart {
|
|
|
3432
4014
|
* `a:xfrm` and are `null` when it inherits geometry from the notesMaster (the case
|
|
3433
4015
|
* on an authored deck, whose `sldImg`/`sldNum` carry an empty `p:spPr`).
|
|
3434
4016
|
*
|
|
3435
|
-
* A notes placeholder IS a {@link Placeholder}
|
|
3436
|
-
* the same twelve members read off the same `p:sp`, down to `p:ph` being found the same way
|
|
4017
|
+
* A notes placeholder IS a {@link Placeholder}. Identity, geometry and the escape hatch are
|
|
4018
|
+
* the same twelve members read off the same `p:sp`, down to `p:ph` being found the same way,
|
|
3437
4019
|
* so it extends one rather than repeating it. Two things are its own: the flattened
|
|
3438
4020
|
* {@link text} convenience, and a {@link textFrame} that threads the notesMaster inheritance
|
|
3439
4021
|
* context onto the body frame.
|
|
@@ -3445,14 +4027,14 @@ declare class NotesPlaceholder extends Placeholder {
|
|
|
3445
4027
|
* runs round-trip a slide's authored notes; the `sldNum` placeholder's frame
|
|
3446
4028
|
* holds the slide-number `a:fld`, whose value surfaces through `TextFrame.text`.
|
|
3447
4029
|
*
|
|
3448
|
-
* Overrides {@link Placeholder.textFrame} for the inheritance context alone
|
|
4030
|
+
* Overrides {@link Placeholder.textFrame} for the inheritance context alone (see below).
|
|
3449
4031
|
*/
|
|
3450
4032
|
get textFrame(): TextFrame | null;
|
|
3451
4033
|
/** The placeholder's flattened text (paragraphs joined by `\n`), or `''` when it has no text body. */
|
|
3452
4034
|
get text(): string;
|
|
3453
4035
|
}
|
|
3454
4036
|
/**
|
|
3455
|
-
* A slide's speaker-notes slide (`notesSlideN.xml`) as a modeled object
|
|
4037
|
+
* A slide's speaker-notes slide (`notesSlideN.xml`) as a modeled object: the deep
|
|
3456
4038
|
* companion to {@link Slide.notesText}. Exposes the notes
|
|
3457
4039
|
* shape tree as {@link NotesPlaceholder}s ({@link body}/{@link slideImage}/
|
|
3458
4040
|
* {@link slideNumber}) plus the body {@link textFrame} the older getters flatten.
|
|
@@ -3473,19 +4055,19 @@ declare class NotesSlide implements ShapeHost {
|
|
|
3473
4055
|
part: Part);
|
|
3474
4056
|
/** Partname of the notes slide part. */
|
|
3475
4057
|
get partName(): string;
|
|
3476
|
-
/** The notes part's own relationships
|
|
4058
|
+
/** The notes part's own relationships; a notes hyperlink resolves through these. */
|
|
3477
4059
|
get relationships(): Relationships;
|
|
3478
4060
|
/**
|
|
3479
4061
|
* The notes shape tree as full shapes, in document order.
|
|
3480
4062
|
*
|
|
3481
4063
|
* A notes slide holds nothing but its three placeholders, so {@link placeholders} is the
|
|
3482
|
-
* view to read. This one exists because a notes slide is a {@link ShapeHost}
|
|
4064
|
+
* view to read. This one exists because a notes slide is a {@link ShapeHost}, which is
|
|
3483
4065
|
* what lets a {@link NotesPlaceholder} be the same {@link AutoShape} view of its `p:sp`
|
|
3484
4066
|
* that a master or layout placeholder is, rather than a second reading of one.
|
|
3485
4067
|
*/
|
|
3486
4068
|
get shapes(): AnyShape[];
|
|
3487
|
-
/** The shape anywhere in the notes tree with the given drawing id, or `undefined
|
|
3488
|
-
shapeByIdDeep(id: number): AnyShape | undefined;
|
|
4069
|
+
/** The shape anywhere in the notes tree with the given drawing id, or `undefined` (always, for `null`). */
|
|
4070
|
+
shapeByIdDeep(id: number | null): AnyShape | undefined;
|
|
3489
4071
|
/**
|
|
3490
4072
|
* The notes theme context, resolved through the notesMaster → `theme2.xml` chain
|
|
3491
4073
|
* and cached. Backs {@link NotesPlaceholder.textFrame}'s `Run.resolvedColor`.
|
|
@@ -3504,8 +4086,6 @@ declare class NotesSlide implements ShapeHost {
|
|
|
3504
4086
|
/** The notes body text flattened (paragraphs joined by `\n`), or `''` when the body is empty/absent. */
|
|
3505
4087
|
get text(): string;
|
|
3506
4088
|
}
|
|
3507
|
-
//#endregion
|
|
3508
|
-
//#region src/read/api/comments.d.ts
|
|
3509
4089
|
/** One entry of the deck-wide comment-author registry (`p:cmAuthor`). */
|
|
3510
4090
|
interface CommentAuthor {
|
|
3511
4091
|
/** Author id (`@id`), referenced by each comment's `@authorId`. */
|
|
@@ -3540,7 +4120,7 @@ interface Comment {
|
|
|
3540
4120
|
}
|
|
3541
4121
|
/** One entry of the modern deck-wide author registry (`p188:author`). */
|
|
3542
4122
|
interface ModernCommentAuthor {
|
|
3543
|
-
/** Author id (`@id`)
|
|
4123
|
+
/** Author id (`@id`): a GUID string like `{E8A64ABA-…}`, referenced by each comment's `@authorId`. */
|
|
3544
4124
|
id: string | null;
|
|
3545
4125
|
/** Display name (`@name`). */
|
|
3546
4126
|
name: string;
|
|
@@ -3574,9 +4154,7 @@ interface ModernComment {
|
|
|
3574
4154
|
}
|
|
3575
4155
|
/** Which comment schema a deck carries. `'none'` when it has neither part. */
|
|
3576
4156
|
type CommentSchema = 'legacy' | 'modern' | 'none';
|
|
3577
|
-
|
|
3578
|
-
//#region src/read/api/tags.d.ts
|
|
3579
|
-
/** One programmatic tag (`p:tag`) — a name/value string pair. */
|
|
4157
|
+
/** One programmatic tag (`p:tag`): a name/value string pair. */
|
|
3580
4158
|
interface Tag {
|
|
3581
4159
|
/** The tag's `@name`. */
|
|
3582
4160
|
name: string;
|
|
@@ -3591,9 +4169,7 @@ interface Tag {
|
|
|
3591
4169
|
* `p:custDataLst`, so it is robust to element ordering in the owner.
|
|
3592
4170
|
*/
|
|
3593
4171
|
declare function readTagsForPart(opc: OpcPackage, ownerPartName: string): Tag[];
|
|
3594
|
-
|
|
3595
|
-
//#region src/read/api/transition.d.ts
|
|
3596
|
-
/** `ST_TransitionSpeed` — the coarse speed bucket (`spd`), default `fast`. */
|
|
4172
|
+
/** `ST_TransitionSpeed`: the coarse speed bucket (`spd`), default `fast`. */
|
|
3597
4173
|
type TransitionSpeed = 'slow' | 'med' | 'fast';
|
|
3598
4174
|
/** Decoded slide transition (`p:transition`), as returned by {@link Slide.transition}. */
|
|
3599
4175
|
interface TransitionInfo {
|
|
@@ -3664,8 +4240,41 @@ interface TransitionInput {
|
|
|
3664
4240
|
*/
|
|
3665
4241
|
sound?: TransitionSoundInfo | null;
|
|
3666
4242
|
}
|
|
3667
|
-
|
|
3668
|
-
|
|
4243
|
+
/** Which time-node sequence a {@link BuildEffect} plays in. */
|
|
4244
|
+
type BuildSequence = 'main' | 'interactive' | 'other';
|
|
4245
|
+
/**
|
|
4246
|
+
* One preset effect in a slide's `p:timing`, as {@link Slide.animations} reads it: a time node with a
|
|
4247
|
+
* `presetClass`, the shape it targets, and how and when it starts.
|
|
4248
|
+
*/
|
|
4249
|
+
interface BuildEffect {
|
|
4250
|
+
/**
|
|
4251
|
+
* The sequence the effect plays in: `main` for the slide's click-through build (`nodeType="mainSeq"`),
|
|
4252
|
+
* `interactive` for one a click on a shape triggers (`interactiveSeq`), `other` for anywhere else.
|
|
4253
|
+
*/
|
|
4254
|
+
sequence: BuildSequence;
|
|
4255
|
+
/** `@presetClass`: `entr`, `emph`, `exit`, `path`, `verb` or `mediacall`. */
|
|
4256
|
+
presetClass: string;
|
|
4257
|
+
/** `@presetID`, or `null` when it states none. */
|
|
4258
|
+
presetId: number | null;
|
|
4259
|
+
/** `@presetSubtype`, or `null` when it states none. */
|
|
4260
|
+
presetSubtype: number | null;
|
|
4261
|
+
/**
|
|
4262
|
+
* How the effect starts (`@nodeType`): `clickEffect` is `onClick`, `withEffect` is `withPrevious`,
|
|
4263
|
+
* `afterEffect` is `afterPrevious`, and anything else is `null`.
|
|
4264
|
+
*/
|
|
4265
|
+
trigger: 'onClick' | 'withPrevious' | 'afterPrevious' | null;
|
|
4266
|
+
/** The longest `@dur` among the effect's behaviours, in milliseconds, or `null` when none states one. */
|
|
4267
|
+
durationMs: number | null;
|
|
4268
|
+
/**
|
|
4269
|
+
* The delay of the step the effect sits in, from the click that starts it (`p:cond/@delay` on the
|
|
4270
|
+
* effect's parent time node), in milliseconds, or `null` when it is not a number.
|
|
4271
|
+
*/
|
|
4272
|
+
delayMs: number | null;
|
|
4273
|
+
/** The target shape's `p:cNvPr` id (the first `p:spTgt/@spid` under the effect), or `null`. */
|
|
4274
|
+
shapeId: number | null;
|
|
4275
|
+
/** Whether the effect targets a range of the shape's text (`p:spTgt/p:txEl`) rather than the whole shape. */
|
|
4276
|
+
textRange: boolean;
|
|
4277
|
+
}
|
|
3669
4278
|
/** Options for {@link Slide.addTextBox}. Geometry is in EMU. */
|
|
3670
4279
|
interface AddTextBoxOptions {
|
|
3671
4280
|
/** Left edge in EMU (`a:off/@x`). */
|
|
@@ -3742,8 +4351,8 @@ declare class Slide implements ShapeHost {
|
|
|
3742
4351
|
* `fmtScheme` + `fontScheme`, plus the layout/master roots), walked once from
|
|
3743
4352
|
* slide → layout → master → theme and cached on this proxy. Backs the read-model
|
|
3744
4353
|
* resolved getters ({@link Shape.resolvedFill}, `Run.resolvedColor`,
|
|
3745
|
-
* `Run.resolvedSizePt`, `Run.resolvedFontFace`) so a `schemeClr` token
|
|
3746
|
-
* one delivered through a shape's `p:style` `fillRef`/`lnRef`
|
|
4354
|
+
* `Run.resolvedSizePt`, `Run.resolvedFontFace`) so a `schemeClr` token (including
|
|
4355
|
+
* one delivered through a shape's `p:style` `fillRef`/`lnRef`) resolves to a
|
|
3747
4356
|
* literal hex, and a placeholder run's inherited size/typeface (a `+mj-*`/`+mn-*`
|
|
3748
4357
|
* font token included) resolves to a literal value. The maps/roots are empty when
|
|
3749
4358
|
* the theme chain is incomplete, in which case tokens simply stay unresolved.
|
|
@@ -3768,7 +4377,7 @@ declare class Slide implements ShapeHost {
|
|
|
3768
4377
|
/**
|
|
3769
4378
|
* Whether this slide draws the master's non-placeholder shapes
|
|
3770
4379
|
* (`p:sld/@showMasterSp`). `xsd:boolean` defaulting to `true`, so an absent
|
|
3771
|
-
* attribute means shown
|
|
4380
|
+
* attribute means shown, the same shape as {@link hidden}.
|
|
3772
4381
|
*
|
|
3773
4382
|
* This is the switch that decides whether {@link SlideMaster.shapes} belongs on
|
|
3774
4383
|
* *this* slide. A slide the author gave a full-bleed image or a section divider
|
|
@@ -3789,7 +4398,7 @@ declare class Slide implements ShapeHost {
|
|
|
3789
4398
|
* Set or clear the slide's show transition. Assigning `null` removes it.
|
|
3790
4399
|
* Writing a transition with `durationMs` emits the `mc:AlternateContent` form
|
|
3791
4400
|
* (a `p14` Choice carrying `p14:dur` plus a base `mc:Fallback`); otherwise the
|
|
3792
|
-
* bare `<p:transition>` is written. The node is inserted at its schema slot
|
|
4401
|
+
* bare `<p:transition>` is written. The node is inserted at its schema slot,
|
|
3793
4402
|
* after `p:clrMapOvr`, before `p:timing`/`p:extLst`. Marks the slide part dirty.
|
|
3794
4403
|
*
|
|
3795
4404
|
* The new transition is built from the current one before that is removed: it keeps the sound
|
|
@@ -3804,6 +4413,12 @@ declare class Slide implements ShapeHost {
|
|
|
3804
4413
|
* see `animationSpids`.
|
|
3805
4414
|
*/
|
|
3806
4415
|
get hasAnimations(): boolean;
|
|
4416
|
+
/**
|
|
4417
|
+
* The slide's build effects: every time node in its `p:timing` with a `presetClass`, in document
|
|
4418
|
+
* order, with the sequence it plays in, its preset, trigger, duration, step delay and target shape
|
|
4419
|
+
* id. `[]` when the slide has no timing. Read-only: see {@link BuildEffect}.
|
|
4420
|
+
*/
|
|
4421
|
+
get animations(): BuildEffect[];
|
|
3807
4422
|
/**
|
|
3808
4423
|
* @internal The sorted, de-duplicated set of shape ids (`spid`) referenced by
|
|
3809
4424
|
* the slide's animations (`<p:spTgt spid>` and `<p:bldP spid>`). Exposed for the
|
|
@@ -3825,20 +4440,20 @@ declare class Slide implements ShapeHost {
|
|
|
3825
4440
|
/**
|
|
3826
4441
|
* Flatten the slide's build animations: remove the `<p:timing>` block so the
|
|
3827
4442
|
* slide renders and edits as its final static state, with every shape shown at
|
|
3828
|
-
* once. Gated like {@link hasAnimations}
|
|
4443
|
+
* once. Gated like {@link hasAnimations}: a `<p:timing>` that is purely a media
|
|
3829
4444
|
* loop (no `<p:bldP>` or `presetID`) is preserved so media playback survives.
|
|
3830
4445
|
* Marks the slide part dirty and returns `true` only when a timing block was
|
|
3831
4446
|
* removed.
|
|
3832
4447
|
*
|
|
3833
4448
|
* This removes click-through staging only; it does not delete shapes. If a slide
|
|
3834
4449
|
* animated alternating states over the same region, the flattened render shows
|
|
3835
|
-
* them all at once
|
|
4450
|
+
* them all at once. Keep that distinct from removing staged/duplicate shapes.
|
|
3836
4451
|
*/
|
|
3837
4452
|
flattenAnimations(): boolean;
|
|
3838
4453
|
/** Top-level shapes in the slide's shape tree, in document order. */
|
|
3839
4454
|
get shapes(): AnyShape[];
|
|
3840
4455
|
/**
|
|
3841
|
-
* All text on the slide, flattened in document order
|
|
4456
|
+
* All text on the slide, flattened in document order: the read-model
|
|
3842
4457
|
* counterpart to {@link TextFrame.text} one level up. Every text-bearing shape
|
|
3843
4458
|
* contributes its text, recursing into groups ({@link GroupShape}) and reading
|
|
3844
4459
|
* table cells ({@link GraphicFrame.table}) and SmartArt node text
|
|
@@ -3858,12 +4473,12 @@ declare class Slide implements ShapeHost {
|
|
|
3858
4473
|
*/
|
|
3859
4474
|
get text(): string;
|
|
3860
4475
|
/**
|
|
3861
|
-
* The slide's speaker-note text
|
|
4476
|
+
* The slide's speaker-note text, the companion to {@link text} for the notes
|
|
3862
4477
|
* that {@link text} deliberately excludes. Delegates to {@link notesSlide}: finds
|
|
3863
4478
|
* the notes body placeholder (`p:ph` `type="body"`) and flattens its text frame
|
|
3864
4479
|
* the same way {@link TextFrame.text} does (paragraphs joined by `\n`).
|
|
3865
4480
|
*
|
|
3866
|
-
* Returns `null` when the slide has **no notes slide part at all
|
|
4481
|
+
* Returns `null` when the slide has **no notes slide part at all**, distinct
|
|
3867
4482
|
* from `''`, which means a notes slide exists but its body is empty (PowerPoint
|
|
3868
4483
|
* often attaches an empty notes slide to every slide). Only the body placeholder
|
|
3869
4484
|
* is read; the slide-thumbnail (`sldImg`) and slide-number (`sldNum`)
|
|
@@ -3871,14 +4486,14 @@ declare class Slide implements ShapeHost {
|
|
|
3871
4486
|
*/
|
|
3872
4487
|
get notesText(): string | null;
|
|
3873
4488
|
/**
|
|
3874
|
-
* The slide's speaker-note body as a navigable {@link TextFrame}
|
|
4489
|
+
* The slide's speaker-note body as a navigable {@link TextFrame}: the rich
|
|
3875
4490
|
* companion to {@link notesText}, which flattens the same body to a plain string.
|
|
3876
4491
|
* Walk `paragraphs → runs` to recover per-run formatting (bold/italic/underline,
|
|
3877
4492
|
* colour, size, face) and any notes hyperlink that {@link notesText} discards.
|
|
3878
4493
|
*
|
|
3879
4494
|
* `null` when the slide has **no notes slide part** (the same boundary
|
|
3880
4495
|
* {@link notesText} returns `null` at), and also when a notes part exists but
|
|
3881
|
-
* carries no body-placeholder text frame
|
|
4496
|
+
* carries no body-placeholder text frame; there is then no frame to hand back
|
|
3882
4497
|
* (whereas {@link notesText} reports `''` for that empty-body case). Convenience
|
|
3883
4498
|
* for `notesSlide.textFrame`; see {@link notesSlide} for the whole modeled notes
|
|
3884
4499
|
* slide (its `sldImg`/`sldNum` placeholders and their geometry).
|
|
@@ -3888,9 +4503,9 @@ declare class Slide implements ShapeHost {
|
|
|
3888
4503
|
* The slide's speaker-notes slide (`notesSlideN.xml`) as a modeled
|
|
3889
4504
|
* {@link NotesSlide}, or `null` when the slide has no notes slide part. Beyond the
|
|
3890
4505
|
* body text {@link notesText}/{@link notesTextFrame} surface, this exposes the
|
|
3891
|
-
* notes slide's three placeholders
|
|
3892
|
-
*
|
|
3893
|
-
* (
|
|
4506
|
+
* notes slide's three placeholders, each with its geometry and (where present) a
|
|
4507
|
+
* navigable text frame: the slide thumbnail (`slideImage`), the notes body, and the
|
|
4508
|
+
* slide-number field (`slideNumber`).
|
|
3894
4509
|
*
|
|
3895
4510
|
* The writer authors all three placeholders but leaves `sldImg`/`sldNum` with an
|
|
3896
4511
|
* empty `p:spPr`, so on an authored deck their geometry reads `null` while an
|
|
@@ -3934,14 +4549,14 @@ declare class Slide implements ShapeHost {
|
|
|
3934
4549
|
* carries its body text, `created` timestamp, marker position (EMU), its author
|
|
3935
4550
|
* resolved through the deck-wide {@link Presentation.modernCommentAuthors}
|
|
3936
4551
|
* registry (`@authorId` GUID → name/initials), and its reply thread nested under
|
|
3937
|
-
* `replies`. Read-only
|
|
4552
|
+
* `replies`. Read-only: the writer authors the legacy schema; see
|
|
3938
4553
|
* {@link Presentation.commentSchema} to tell which schema a deck uses.
|
|
3939
4554
|
*/
|
|
3940
4555
|
get modernComments(): ModernComment[];
|
|
3941
4556
|
/**
|
|
3942
4557
|
* The slide's programmatic tags (`p:custDataLst/p:tags` on the slide part,
|
|
3943
4558
|
* resolved to `ppt/tags/tagN.xml`) as `{ name, val }` string pairs, `[]` when it
|
|
3944
|
-
* has none. Host/add-in metadata with no visible rendering and no writer
|
|
4559
|
+
* has none. Host/add-in metadata with no visible rendering and no writer:
|
|
3945
4560
|
* read-only, preserved byte-for-byte on round-trip. Deck-level tags are
|
|
3946
4561
|
* {@link Presentation.tags}.
|
|
3947
4562
|
*/
|
|
@@ -3949,7 +4564,7 @@ declare class Slide implements ShapeHost {
|
|
|
3949
4564
|
/**
|
|
3950
4565
|
* The slide's effective background (`p:cSld/p:bg`), decoded into a typed
|
|
3951
4566
|
* {@link SlideBackground}. Resolved through the inheritance chain: the slide's
|
|
3952
|
-
* own `p:bg` wins; failing that the slideLayout's, then the slideMaster's
|
|
4567
|
+
* own `p:bg` wins; failing that the slideLayout's, then the slideMaster's. The
|
|
3953
4568
|
* result's `source` records which supplied it. `null` when nothing in the chain
|
|
3954
4569
|
* defines a background.
|
|
3955
4570
|
*
|
|
@@ -3967,16 +4582,19 @@ declare class Slide implements ShapeHost {
|
|
|
3967
4582
|
* `slide.slideNumber`, or added to a master defined with `slideNumber`; its geometry and run formatting
|
|
3968
4583
|
* read off the returned {@link AutoShape} the same as any placeholder.
|
|
3969
4584
|
*
|
|
3970
|
-
* Scoped to the slide's *own* shape tree
|
|
4585
|
+
* Scoped to the slide's *own* shape tree: a slide number inherited purely from
|
|
3971
4586
|
* the master's `p:hf`/placeholder (with no shape on the slide) is a master-level
|
|
3972
4587
|
* concern this getter does not resolve.
|
|
3973
4588
|
*/
|
|
3974
4589
|
get slideNumberPlaceholder(): AutoShape | null;
|
|
3975
|
-
/**
|
|
3976
|
-
|
|
4590
|
+
/**
|
|
4591
|
+
* The first top-level shape with the given drawing id (`p:cNvPr/@id`), or `undefined`. Takes
|
|
4592
|
+
* `null`, as a shape's `id` reads when its `p:cNvPr` has no `@id`, and misses on it.
|
|
4593
|
+
*/
|
|
4594
|
+
shapeById(id: number | null): AnyShape | undefined;
|
|
3977
4595
|
/**
|
|
3978
4596
|
* The first shape *anywhere* in the slide's shape tree with the given drawing id
|
|
3979
|
-
* (`p:cNvPr/@id`), descending into groups
|
|
4597
|
+
* (`p:cNvPr/@id`), descending into groups, unlike {@link shapeById}, which scans
|
|
3980
4598
|
* only top-level shapes. Walked pre-order (a group is visited before its children),
|
|
3981
4599
|
* matching how the writer allocates ids. `undefined` when no shape carries that id.
|
|
3982
4600
|
*
|
|
@@ -3985,14 +4603,15 @@ declare class Slide implements ShapeHost {
|
|
|
3985
4603
|
* resolution ({@link Connector.startConnection}), which must
|
|
3986
4604
|
* resolve a binding into a group that top-level {@link shapeById} cannot see.
|
|
3987
4605
|
*/
|
|
3988
|
-
shapeByIdDeep(id: number): AnyShape | undefined;
|
|
4606
|
+
shapeByIdDeep(id: number | null): AnyShape | undefined;
|
|
3989
4607
|
/** The first top-level shape with the given name (`p:cNvPr/@name`), or `undefined`. */
|
|
3990
4608
|
shapeByName(name: string): AnyShape | undefined;
|
|
3991
4609
|
/**
|
|
3992
4610
|
* The first placeholder of the given type (`p:ph/@type`, e.g. `title`,
|
|
3993
4611
|
* `ctrTitle`, `subTitle`, `body`), optionally narrowed by `idx`. Returns
|
|
3994
|
-
* `undefined` when none match. Only
|
|
3995
|
-
*
|
|
4612
|
+
* `undefined` when none match. Only {@link AutoShape}s are searched: a filled
|
|
4613
|
+
* picture, table or chart placeholder is not found here, though its own
|
|
4614
|
+
* `placeholder` getter still reads it.
|
|
3996
4615
|
*/
|
|
3997
4616
|
placeholder(type: string, idx?: string): AutoShape | undefined;
|
|
3998
4617
|
/**
|
|
@@ -4017,7 +4636,7 @@ declare class Slide implements ShapeHost {
|
|
|
4017
4636
|
* afterwards through {@link notesTextFrame}.
|
|
4018
4637
|
*
|
|
4019
4638
|
* The counterpart to the read side's `notesText`/`notesTextFrame`/`notesSlide`
|
|
4020
|
-
* getters, and the way to annotate a slide that has **no notes part at all
|
|
4639
|
+
* getters, and the way to annotate a slide that has **no notes part at all**:
|
|
4021
4640
|
* the state an `importSlide` without `{ importNotes: true }` leaves behind, and
|
|
4022
4641
|
* the one a `notesTextFrame` edit cannot reach because there is no frame to
|
|
4023
4642
|
* hand back. Calling it on a slide that already has notes replaces the body
|
|
@@ -4048,8 +4667,6 @@ declare class Slide implements ShapeHost {
|
|
|
4048
4667
|
*/
|
|
4049
4668
|
nextShapeId(): number;
|
|
4050
4669
|
}
|
|
4051
|
-
//#endregion
|
|
4052
|
-
//#region src/read/api/document-properties.d.ts
|
|
4053
4670
|
/**
|
|
4054
4671
|
* Decoded `docProps/core.xml`. Every field is optional (present only when the
|
|
4055
4672
|
* element is). `created`/`modified`/`lastPrinted` are kept as the **raw W3CDTF
|
|
@@ -4083,7 +4700,7 @@ interface CoreProperties {
|
|
|
4083
4700
|
lastPrinted?: string;
|
|
4084
4701
|
}
|
|
4085
4702
|
/**
|
|
4086
|
-
* Decoded `docProps/app.xml
|
|
4703
|
+
* Decoded `docProps/app.xml`: the *extended* properties, which are the producer's own
|
|
4087
4704
|
* account of the deck rather than the author's metadata. Every field is optional (present
|
|
4088
4705
|
* only when the element is).
|
|
4089
4706
|
*
|
|
@@ -4094,14 +4711,14 @@ interface CoreProperties {
|
|
|
4094
4711
|
* true, and `company` is the one this library's write API can set.
|
|
4095
4712
|
*/
|
|
4096
4713
|
interface ExtendedProperties {
|
|
4097
|
-
/** `<Application
|
|
4714
|
+
/** `<Application>`: the producing application, e.g. `Microsoft Office PowerPoint`. */
|
|
4098
4715
|
application?: string;
|
|
4099
|
-
/** `<AppVersion
|
|
4716
|
+
/** `<AppVersion>`: that application's version, in its own `major.minor` spelling (`16.0000`). */
|
|
4100
4717
|
appVersion?: string;
|
|
4101
4718
|
/** `<Company>` (the write-side `pptx.company`). */
|
|
4102
4719
|
company?: string;
|
|
4103
4720
|
/**
|
|
4104
|
-
* `<TitlesOfParts
|
|
4721
|
+
* `<TitlesOfParts>`: the flat `vt:lpstr` vector naming the deck's fonts, themes and slide
|
|
4105
4722
|
* titles in one list. It is the vector as written, NOT split by section: `<HeadingPairs>`
|
|
4106
4723
|
* holds the counts that partition it, and this library does not read them, so the caller
|
|
4107
4724
|
* that wants the slide titles alone has to pair the two itself.
|
|
@@ -4145,20 +4762,16 @@ declare function readExtendedProperties(opc: OpcPackage): ExtendedProperties;
|
|
|
4145
4762
|
* `firstChild`/`getElements` helpers.
|
|
4146
4763
|
*/
|
|
4147
4764
|
declare function readCustomProperties(opc: OpcPackage): CustomProperty[];
|
|
4148
|
-
//#endregion
|
|
4149
|
-
//#region src/read/api/ops/deck-target.d.ts
|
|
4150
4765
|
/** The destination deck: just the package and its main part. `Presentation` satisfies it. */
|
|
4151
4766
|
interface DeckTarget {
|
|
4152
4767
|
readonly opc: OpcPackage;
|
|
4153
4768
|
readonly presentationPart: Part;
|
|
4154
4769
|
}
|
|
4155
|
-
//#endregion
|
|
4156
|
-
//#region src/read/api/ops/part-copy.d.ts
|
|
4157
4770
|
/**
|
|
4158
4771
|
* One import in progress: where parts are going, where they are coming from, and
|
|
4159
4772
|
* what has already come across.
|
|
4160
4773
|
*
|
|
4161
|
-
* `source` and `registry` are one fact, not two
|
|
4774
|
+
* `source` and `registry` are one fact, not two: a registry maps partnames *of
|
|
4162
4775
|
* that package*, so pairing it with any other package silently returns partnames
|
|
4163
4776
|
* for parts that were never copied. Holding them in a single value makes the
|
|
4164
4777
|
* pairing a type invariant rather than a call-site convention; mint one with
|
|
@@ -4178,7 +4791,7 @@ interface ImportContext {
|
|
|
4178
4791
|
* gets its own part even when the registry already holds a copy of it, which is
|
|
4179
4792
|
* what lets one source page be imported more than once.
|
|
4180
4793
|
*
|
|
4181
|
-
* Both import entry points set it
|
|
4794
|
+
* Both import entry points set it: {@link Presentation.importSlides} for the
|
|
4182
4795
|
* whole batch, {@link copySlidePart} for the single page of one
|
|
4183
4796
|
* {@link Presentation.importSlide}. For the batch it carries a second meaning:
|
|
4184
4797
|
* `slide → slide` relationships resolve only within the set, so an imported page
|
|
@@ -4189,7 +4802,7 @@ interface ImportContext {
|
|
|
4189
4802
|
* as an output, and a map to *many* destinations would make every jump link
|
|
4190
4803
|
* ambiguous. A batch asked for the same page N times therefore runs the
|
|
4191
4804
|
* traversal N times, each round naming that page's Nth reserved partname and the
|
|
4192
|
-
* other pages' first
|
|
4805
|
+
* other pages' first (see `importSlides` step 3).
|
|
4193
4806
|
*/
|
|
4194
4807
|
readonly selection?: SelectionPlan;
|
|
4195
4808
|
/**
|
|
@@ -4231,7 +4844,7 @@ interface PlannedRel {
|
|
|
4231
4844
|
* it would throw, found before anything in the destination moves.
|
|
4232
4845
|
*
|
|
4233
4846
|
* This is what lets a refused import leave the deck byte-identical. The copy changes the deck as it
|
|
4234
|
-
* goes
|
|
4847
|
+
* goes (parts added, a master registered in `presentation.xml`, a layout linked into its master),
|
|
4235
4848
|
* so a failure it met halfway would leave all of that behind. An import therefore runs the same
|
|
4236
4849
|
* traversal twice: first with a plan in its context, which throws what the copy would and writes
|
|
4237
4850
|
* nothing, then for real. The dry run used to be a separate walk of the source, transcribed from the
|
|
@@ -4242,8 +4855,8 @@ interface PlannedRel {
|
|
|
4242
4855
|
* A plan stands in for the destination package as a {@link CopyTarget}. It hands out the partnames
|
|
4243
4856
|
* the copy will be given, keeps its own copy of each source's registry so a part it planned is found
|
|
4244
4857
|
* again as the copy would find it, and remembers the notes master it would install in a deck that has
|
|
4245
|
-
* none. Destination bookkeeping that adds no part
|
|
4246
|
-
* is not recorded.
|
|
4858
|
+
* none. Destination bookkeeping that adds no part, such as registering a master or linking a layout
|
|
4859
|
+
* into it, is not recorded.
|
|
4247
4860
|
*/
|
|
4248
4861
|
declare class CopyPlan implements CopyTarget {
|
|
4249
4862
|
#private;
|
|
@@ -4269,12 +4882,8 @@ declare class CopyPlan implements CopyTarget {
|
|
|
4269
4882
|
addPart(partName: string, contentType: string): void;
|
|
4270
4883
|
relationshipsFor(from: string): Pick<Relationships, 'add' | 'addWithId'>;
|
|
4271
4884
|
}
|
|
4272
|
-
//#endregion
|
|
4273
|
-
//#region src/read/api/ops/rescale.d.ts
|
|
4274
4885
|
/** How an import's rescale maps the source canvas onto the destination's. */
|
|
4275
4886
|
type RescaleMode = 'fit' | 'stretch';
|
|
4276
|
-
//#endregion
|
|
4277
|
-
//#region src/read/api/presentation.d.ts
|
|
4278
4887
|
declare class Presentation {
|
|
4279
4888
|
#private;
|
|
4280
4889
|
readonly opc: OpcPackage;
|
|
@@ -4318,7 +4927,7 @@ declare class Presentation {
|
|
|
4318
4927
|
/**
|
|
4319
4928
|
* The deck's embedded font families (`p:embeddedFontLst` in `presentation.xml`),
|
|
4320
4929
|
* `[]` when it embeds none. Each entry names the typeface and resolves every
|
|
4321
|
-
* embedded face's `r:id` to the absolute partname of its `.fntdata` binary
|
|
4930
|
+
* embedded face's `r:id` to the absolute partname of its `.fntdata` binary: the
|
|
4322
4931
|
* read counterpart to the write-side `pptx.embedFont` / `importSlide({ embedFonts })`
|
|
4323
4932
|
* carry. An entry whose `p:font` has no `@typeface`, or a face whose `r:id` is
|
|
4324
4933
|
* missing or dangling, is skipped (faithful degradation, no throw). Read-only.
|
|
@@ -4337,7 +4946,7 @@ declare class Presentation {
|
|
|
4337
4946
|
* `ppt/authors.xml`), `[]` when the deck carries no modern comments. Unlike the
|
|
4338
4947
|
* legacy {@link commentAuthors}, each entry is keyed by a GUID `id` (plus
|
|
4339
4948
|
* `userId`/`providerId`); each slide's {@link Slide.modernComments} resolves its
|
|
4340
|
-
* `@authorId` against this list. Read-only
|
|
4949
|
+
* `@authorId` against this list. Read-only: the writer emits legacy comments.
|
|
4341
4950
|
*/
|
|
4342
4951
|
get modernCommentAuthors(): ModernCommentAuthor[];
|
|
4343
4952
|
/**
|
|
@@ -4361,7 +4970,7 @@ declare class Presentation {
|
|
|
4361
4970
|
* The deck's extended document properties (`docProps/app.xml`): the producing
|
|
4362
4971
|
* application and its version, the company, and the flat `TitlesOfParts` vector.
|
|
4363
4972
|
* `{}` when the deck carries no extended-properties part. The read counterpart of
|
|
4364
|
-
* the write-side `pptx.company` setter
|
|
4973
|
+
* the write-side `pptx.company` setter, the only one of the four this library
|
|
4365
4974
|
* writes from a caller's value; the other three it states about itself.
|
|
4366
4975
|
*
|
|
4367
4976
|
* A deliberate subset of the part: see {@link ExtendedProperties} for why the
|
|
@@ -4379,7 +4988,7 @@ declare class Presentation {
|
|
|
4379
4988
|
* The deck-level programmatic tags (`p:custDataLst/p:tags` on `presentation.xml`,
|
|
4380
4989
|
* resolved to `ppt/tags/tagN.xml`) as `{ name, val }` string pairs, `[]` when the
|
|
4381
4990
|
* deck carries none. These are add-in/host metadata with no visible rendering and
|
|
4382
|
-
* no writer
|
|
4991
|
+
* no writer. They are read-only, preserved byte-for-byte on round-trip. Per-slide tags are
|
|
4383
4992
|
* {@link Slide.tags}.
|
|
4384
4993
|
*/
|
|
4385
4994
|
get tags(): Tag[];
|
|
@@ -4396,7 +5005,7 @@ declare class Presentation {
|
|
|
4396
5005
|
* charts, SmartArt diagrams and OLE embeddings, each with the subtree under it
|
|
4397
5006
|
* (a chart's embedded workbook comes along; the image inside its user-shapes
|
|
4398
5007
|
* drawing stays shared). PowerPoint refuses to open a deck where two slides
|
|
4399
|
-
* resolve to one chart or diagram, so this is not tidiness
|
|
5008
|
+
* resolve to one chart or diagram, so this is not tidiness; see
|
|
4400
5009
|
* `page-owned.ts` for the rule and the evidence behind it.
|
|
4401
5010
|
*/
|
|
4402
5011
|
cloneSlide(index: number, options?: {
|
|
@@ -4407,7 +5016,7 @@ declare class Presentation {
|
|
|
4407
5016
|
* `p:sldId` entry and the presentation→slide relationship are dropped, the slide
|
|
4408
5017
|
* part and its `.rels` are deleted, and any part the slide *privately* owned
|
|
4409
5018
|
* (its notes slide, slide-only media, charts/embeddings) that no remaining part
|
|
4410
|
-
* references is pruned too
|
|
5019
|
+
* references is pruned too, recursively. Shared deck chrome (layout, master,
|
|
4411
5020
|
* theme, …) is never pruned, so the deck stays renderable; removing every slide
|
|
4412
5021
|
* leaves a valid master/layout-only package (a template shell). The slide also
|
|
4413
5022
|
* leaves every custom show and section it was in, which stay even when that
|
|
@@ -4421,9 +5030,9 @@ declare class Presentation {
|
|
|
4421
5030
|
* Append a copy of `source.slides[index]` to this presentation and return it.
|
|
4422
5031
|
*
|
|
4423
5032
|
* Unlike {@link cloneSlide} (same-deck duplicate), this copies a slide across
|
|
4424
|
-
* a package boundary: it brings the connected sub-graph the slide depends on
|
|
4425
|
-
* its `slideLayout` → `slideMaster` → `theme`, plus any media, charts, and
|
|
4426
|
-
* embeddings
|
|
5033
|
+
* a package boundary: it brings the connected sub-graph the slide depends on
|
|
5034
|
+
* (its `slideLayout` → `slideMaster` → `theme`, plus any media, charts, and
|
|
5035
|
+
* embeddings) into this package under fresh partnames, rewriting every
|
|
4427
5036
|
* partname, relationship id, and content-type registration so the result is a
|
|
4428
5037
|
* self-consistent OPC package. Parts of this (target) package that are not
|
|
4429
5038
|
* touched stay byte-identical, matching `cloneSlide`'s fidelity contract.
|
|
@@ -4431,7 +5040,7 @@ declare class Presentation {
|
|
|
4431
5040
|
* Only the layout(s) actually used by imported slides are copied; the imported
|
|
4432
5041
|
* master's `p:sldLayoutIdLst` is pruned to exactly those, mirroring how
|
|
4433
5042
|
* PowerPoint's "Reuse Slides" brings a slide across. Parts shared by repeated
|
|
4434
|
-
* imports from the same source deck are copied once and reused
|
|
5043
|
+
* imports from the same source deck are copied once and reused: every part
|
|
4435
5044
|
* except the page itself. Importing the same source slide twice yields two
|
|
4436
5045
|
* independent copies over one shared layout/master/theme, which is what lets a
|
|
4437
5046
|
* deck show one page twice (verbatim, then edited).
|
|
@@ -4440,7 +5049,7 @@ declare class Presentation {
|
|
|
4440
5049
|
* into the slide XML and the slide is bound to this deck's existing
|
|
4441
5050
|
* master/layout; with `{ theme: 'restyle' }` the slide is bound to this deck's
|
|
4442
5051
|
* master/layout with its theme references left symbolic, so it re-brands to the
|
|
4443
|
-
* destination palette
|
|
5052
|
+
* destination palette. See {@link ImportSlideOptions}.
|
|
4444
5053
|
*
|
|
4445
5054
|
* By default the source slide size must equal this presentation's. Pass
|
|
4446
5055
|
* `{ rescale: 'fit' | 'stretch' }` to rescale the imported geometry onto this
|
|
@@ -4457,7 +5066,7 @@ declare class Presentation {
|
|
|
4457
5066
|
* Import selected pages from one or more loaded source presentations as one
|
|
4458
5067
|
* batch. Each imported page lands at its `outputIndex` in the complete
|
|
4459
5068
|
* destination slide list after the batch, and the returned array is parallel
|
|
4460
|
-
* to `requests
|
|
5069
|
+
* to `requests`: `result[i]` is the page `requests[i]` asked for, whatever
|
|
4461
5070
|
* order the output positions were given in.
|
|
4462
5071
|
*
|
|
4463
5072
|
* Everything is checked before a single byte of this deck moves: every request
|
|
@@ -4470,13 +5079,13 @@ declare class Presentation {
|
|
|
4470
5079
|
* The batch also decides what a `slide → slide` link means: an internal link
|
|
4471
5080
|
* on a selected page must target another **selected** page (or one this deck
|
|
4472
5081
|
* already contains via an earlier import from that source), and is rewritten
|
|
4473
|
-
* to the fresh partname
|
|
5082
|
+
* to the fresh partname. Importing page 3 of 10 does not drag pages 1–2
|
|
4474
5083
|
* across as dependencies, and never strands the link. This mirrors
|
|
4475
5084
|
* `appendSlides`' `import/unresolved-slide-link`, which the write side already
|
|
4476
5085
|
* enforces for generator decks.
|
|
4477
5086
|
*
|
|
4478
5087
|
* One request is one output page, so naming the same source page in several
|
|
4479
|
-
* requests is how you ask for several independent copies of it
|
|
5088
|
+
* requests is how you ask for several independent copies of it; the page part
|
|
4480
5089
|
* is the one thing an import never shares, exactly as in {@link importSlide}.
|
|
4481
5090
|
* Everything under it (layout, master, theme, media) is still copied once and
|
|
4482
5091
|
* shared. Where such a page is the target of a `slide → slide` link, the link
|
|
@@ -4487,7 +5096,7 @@ declare class Presentation {
|
|
|
4487
5096
|
* Speaker notes travel per request: `{ importNotes: true }` carries that page's
|
|
4488
5097
|
* `notesSlide` part across, wired to the new page and bound to a single
|
|
4489
5098
|
* `notesMaster` under the same 0..1 rule {@link importSlide} and
|
|
4490
|
-
* {@link appendSlides} follow
|
|
5099
|
+
* {@link appendSlides} follow: the destination's own master wins when it has
|
|
4491
5100
|
* one. Notes are part of the up-front dry run too, so a batch that would fail
|
|
4492
5101
|
* carrying them is refused with the deck still byte-identical. A page named in
|
|
4493
5102
|
* several requests gets its own copy of its notes each time, as of everything
|
|
@@ -4512,9 +5121,9 @@ declare class Presentation {
|
|
|
4512
5121
|
importSlides(requests: readonly ImportSlidesRequest[]): Slide[];
|
|
4513
5122
|
/**
|
|
4514
5123
|
* Graft slide master(s) from another open package into this one and return what
|
|
4515
|
-
* was copied. Unlike {@link importSlide}
|
|
5124
|
+
* was copied. Unlike {@link importSlide}, which brings a master across only as
|
|
4516
5125
|
* the dependency of an imported *slide* and prunes it to the one layout that
|
|
4517
|
-
* slide uses
|
|
5126
|
+
* slide uses, this copies a master together with its **whole** layout family
|
|
4518
5127
|
* and attaches it to no slide: the master and its layouts land in this deck's
|
|
4519
5128
|
* layout gallery (PowerPoint's *Insert ▸ New Slide* / *Layout* picker) without
|
|
4520
5129
|
* changing any existing slide.
|
|
@@ -4544,7 +5153,7 @@ declare class Presentation {
|
|
|
4544
5153
|
importSlideMasters(source: Presentation, options?: ImportSlideMastersOptions): ImportedSlideMaster[];
|
|
4545
5154
|
/**
|
|
4546
5155
|
* The deck's slide masters, in `p:sldMasterIdLst` order, as modeled
|
|
4547
|
-
* {@link SlideMaster}s
|
|
5156
|
+
* {@link SlideMaster}s: the typed read model over the shared chrome (each
|
|
4548
5157
|
* master's colour map, theme, placeholders, and the layouts built on it). Walk
|
|
4549
5158
|
* `pres.masters()[i].layouts` for the rich layout model, or use {@link layouts}
|
|
4550
5159
|
* for the flat {@link LayoutHandle} gallery {@link appendSlides} binds to.
|
|
@@ -4552,7 +5161,7 @@ declare class Presentation {
|
|
|
4552
5161
|
*/
|
|
4553
5162
|
masters(): SlideMaster[];
|
|
4554
5163
|
/**
|
|
4555
|
-
* The deck's slide layouts, in master then layout order
|
|
5164
|
+
* The deck's slide layouts, in master then layout order: the gallery a new
|
|
4556
5165
|
* slide can bind to. Each {@link LayoutHandle} addresses one layout for
|
|
4557
5166
|
* {@link appendSlides}; the `name` is its `p:cSld@name`. Read-only enumeration:
|
|
4558
5167
|
* it copies nothing and leaves the package byte-identical.
|
|
@@ -4561,12 +5170,12 @@ declare class Presentation {
|
|
|
4561
5170
|
/**
|
|
4562
5171
|
* Append generator-produced slides onto this deck, binding each to an existing
|
|
4563
5172
|
* layout, and return the new {@link Slide}s. This is the hybrid
|
|
4564
|
-
* "generate-onto-existing" path: the deck's masters, layouts, theme
|
|
4565
|
-
* other untouched part
|
|
5173
|
+
* "generate-onto-existing" path: the deck's masters, layouts, theme, and every
|
|
5174
|
+
* other untouched part stay **byte-identical** (only `presentation.xml`, its
|
|
4566
5175
|
* `.rels`, `[Content_Types].xml`, and the freshly-added slide/media parts
|
|
4567
5176
|
* change), because the existing chrome is never regenerated.
|
|
4568
5177
|
*
|
|
4569
|
-
* `source` is any slide producer (a `
|
|
5178
|
+
* `source` is any slide producer (a `PptxTs` instance); its authored slides
|
|
4570
5179
|
* are serialized via {@link SlideSource.extractSlides} and spliced in under
|
|
4571
5180
|
* fresh partnames, with each slide's `slideLayout` relationship pointed at the
|
|
4572
5181
|
* layout named by `options.layout` and its image/hyperlink relationships rebuilt
|
|
@@ -4576,13 +5185,13 @@ declare class Presentation {
|
|
|
4576
5185
|
* Charts and internal slide-to-slide hyperlinks are carried across: chart parts
|
|
4577
5186
|
* (chart XML + `.rels` + embedded workbook) are injected under fresh names, and a
|
|
4578
5187
|
* `slide:N` link is repointed at the Nth appended slide's new partname. A chartEx
|
|
4579
|
-
* (Office 2016
|
|
5188
|
+
* (Office 2016: waterfall, funnel, treemap, ...) chart carries too, as its own
|
|
4580
5189
|
* `chartEx{N}.xml` part behind the MS chartEx rel, with the style and color-style
|
|
4581
5190
|
* sidecars PowerPoint requires alongside it.
|
|
4582
5191
|
*
|
|
4583
5192
|
* The generator's presentation-level embedded fonts (`pptx.embedFont`) are also
|
|
4584
5193
|
* carried into this deck and merged into its `p:embeddedFontLst`, de-duped by
|
|
4585
|
-
* typeface + face slot
|
|
5194
|
+
* typeface + face slot, so author-side embedded fonts survive the append onto a
|
|
4586
5195
|
* template that may itself already embed fonts.
|
|
4587
5196
|
*
|
|
4588
5197
|
* Embedded audio/video is carried too: the media part backs the ECMA audio/video rel
|
|
@@ -4593,22 +5202,26 @@ declare class Presentation {
|
|
|
4593
5202
|
* Speaker notes ride across too: a slide authored with `addNotes` gets a `notesSlide`
|
|
4594
5203
|
* part wired back to it, with its hyperlink rels preserved. A notes slide must bind to
|
|
4595
5204
|
* a notes master, and a template commonly has none, so the generator's is installed
|
|
4596
|
-
* (with the theme its `.rels` needs)
|
|
5205
|
+
* (with the theme its `.rels` needs), but only when this deck has none of its own, so
|
|
4597
5206
|
* an existing notes master and its styling always win.
|
|
4598
5207
|
*
|
|
5208
|
+
* Review comments (`addComment`) ride across as a comments part per slide. Their
|
|
5209
|
+
* authors merge into this deck's `commentAuthors.xml` by name and initials: an author
|
|
5210
|
+
* the deck already has keeps its id and continues its numbering, and a new one is added.
|
|
5211
|
+
*
|
|
4599
5212
|
* Limitations:
|
|
4600
5213
|
* - An internal link to a source slide outside the appended batch throws (its
|
|
4601
5214
|
* target has no counterpart in the destination).
|
|
4602
5215
|
* - Appended slides are concrete absolute-positioned content with no placeholder
|
|
4603
5216
|
* inheritance from the bound layout; the binding governs theme/`clrMap`
|
|
4604
5217
|
* resolution and the "based on" link, not placeholder geometry. Author with
|
|
4605
|
-
* concrete colours
|
|
5218
|
+
* concrete colours: any `schemeClr` re-resolves against the destination theme.
|
|
4606
5219
|
* - Source and destination slide sizes must match (no geometry rescale).
|
|
4607
5220
|
*/
|
|
4608
5221
|
appendSlides(source: SlideSource, options: AppendSlidesOptions): Promise<Slide[]>;
|
|
4609
5222
|
/**
|
|
4610
|
-
* Copy one shape
|
|
4611
|
-
* or group
|
|
5223
|
+
* Copy one shape (an autoshape, picture, table/chart graphic frame, connector,
|
|
5224
|
+
* or group) from `source.shapes[shapeIndex]` onto `target`, returning the new
|
|
4612
5225
|
* {@link Shape}. `target` must be a slide of *this* presentation; `source` may
|
|
4613
5226
|
* belong to any open presentation.
|
|
4614
5227
|
*
|
|
@@ -4619,7 +5232,7 @@ declare class Presentation {
|
|
|
4619
5232
|
* so they cannot collide with the host. With `theme: 'preserve'` (default) the
|
|
4620
5233
|
* shape's theme references are baked to literals against the *source* theme so it
|
|
4621
5234
|
* renders the same on a foreign host; `restyle` leaves them symbolic to re-brand;
|
|
4622
|
-
* `copy` brings the XML across untouched
|
|
5235
|
+
* `copy` brings the XML across untouched. See {@link ImportShapeOptions}.
|
|
4623
5236
|
*
|
|
4624
5237
|
* Differing slide sizes need `{ rescale }` (see {@link ImportShapeOptions.rescale});
|
|
4625
5238
|
* a lifted `preserve` placeholder is baked self-contained and demoted to a plain
|
|
@@ -4645,7 +5258,7 @@ declare class Presentation {
|
|
|
4645
5258
|
insertSlidePart(newPart: Part, at?: number): Slide;
|
|
4646
5259
|
/**
|
|
4647
5260
|
* @internal The parts whose geometry a rescale has already rewritten, and in which mode.
|
|
4648
|
-
* Exposed for `presentation-imports.ts` as a live map the callee adds to
|
|
5261
|
+
* Exposed for `presentation-imports.ts` as a live map the callee adds to. The memo is what
|
|
4649
5262
|
* makes a layout or master shared across repeated imports from one source scale exactly
|
|
4650
5263
|
* once, so like the copy registry it has to outlive the call that fills it.
|
|
4651
5264
|
*/
|
|
@@ -4653,7 +5266,7 @@ declare class Presentation {
|
|
|
4653
5266
|
/**
|
|
4654
5267
|
* @internal Open an import out of `source`: this deck as the destination, paired with
|
|
4655
5268
|
* the copy registry for that package (created on first use). The registry is held on
|
|
4656
|
-
* the class rather than in the context because it must outlive any one call
|
|
5269
|
+
* the class rather than in the context because it must outlive any one call: that is
|
|
4657
5270
|
* what makes a second import from the same source reuse the layout, master, theme, and
|
|
4658
5271
|
* media it already copied instead of duplicating them, and it is why the import bodies
|
|
4659
5272
|
* in `presentation-imports.ts` call back here rather than carrying it with them.
|
|
@@ -4662,8 +5275,6 @@ declare class Presentation {
|
|
|
4662
5275
|
/** Re-emit the package; untouched parts stay byte-identical (see `OpcPackage.save`). */
|
|
4663
5276
|
save(): Promise<Uint8Array>;
|
|
4664
5277
|
}
|
|
4665
|
-
//#endregion
|
|
4666
|
-
//#region src/read/api/presentation-types.d.ts
|
|
4667
5278
|
/** Slide dimensions, in both EMU (the OOXML unit) and inches. */
|
|
4668
5279
|
interface SlideSize {
|
|
4669
5280
|
widthEmu: number;
|
|
@@ -4679,7 +5290,7 @@ interface SlideSize {
|
|
|
4679
5290
|
* pull their bytes without hand-parsing the presentation part or its rels.
|
|
4680
5291
|
*/
|
|
4681
5292
|
interface EmbeddedFontInfo {
|
|
4682
|
-
/** `p:font/@typeface
|
|
5293
|
+
/** `p:font/@typeface`: the family name PowerPoint binds the embed to. */
|
|
4683
5294
|
typeface: string;
|
|
4684
5295
|
/** `p:font/@panose`, or `null` when the entry declares none. */
|
|
4685
5296
|
panose: string | null;
|
|
@@ -4701,7 +5312,7 @@ interface ImportSlideOptions {
|
|
|
4701
5312
|
* - `'copy'` (default): bring the slide's own `slideLayout → slideMaster →
|
|
4702
5313
|
* theme` subgraph across, so the slide renders byte-for-byte as authored.
|
|
4703
5314
|
* A deck stitched from N sources then carries N themes/masters.
|
|
4704
|
-
* - `'preserve'`: *flatten then attach
|
|
5315
|
+
* - `'preserve'`: *flatten then attach*. Bake the source theme's colours and
|
|
4705
5316
|
* style-matrix fills into the slide XML (so its pixels do not change), then
|
|
4706
5317
|
* bind it to this deck's existing master/layout instead of importing the
|
|
4707
5318
|
* source theme. The result is a single-theme file whose imported slides are
|
|
@@ -4720,7 +5331,7 @@ interface ImportSlideOptions {
|
|
|
4720
5331
|
* master `preserve` deliberately drops. Set {@link carryMasterGraphics} to
|
|
4721
5332
|
* bake them onto the slide instead.
|
|
4722
5333
|
* - `'restyle'`: re-brand to *this* deck. Rebind the slide to this deck's
|
|
4723
|
-
* master/layout exactly like `preserve` but **skip the flatten
|
|
5334
|
+
* master/layout exactly like `preserve` but **skip the flatten**: leave every
|
|
4724
5335
|
* `a:schemeClr`, style-matrix ref (`fillRef`/`lnRef`/`effectRef`/`fontRef`),
|
|
4725
5336
|
* and `p:bg` `bgRef` symbolic so they re-resolve against the *destination*
|
|
4726
5337
|
* theme. The slide keeps its geometry, text, and structure but adopts this
|
|
@@ -4732,7 +5343,7 @@ interface ImportSlideOptions {
|
|
|
4732
5343
|
* Anything the source authored as a literal `a:srgbClr` has no theme reference
|
|
4733
5344
|
* to re-resolve and stays exactly that colour, so a slide with a baked literal
|
|
4734
5345
|
* palette re-brands little or nothing. Use `restyle` for slides built against
|
|
4735
|
-
* theme colours/style matrices, not hardcoded RGB
|
|
5346
|
+
* theme colours/style matrices, not hardcoded RGB, or set {@link remapLiterals}
|
|
4736
5347
|
* to force-remap literals and copy table styles. Re-brand is inherently a
|
|
4737
5348
|
* visual change (a source `accent1` light-on-dark can invert against a dark
|
|
4738
5349
|
* destination `accent1`), so its output needs visual QA. A restyled table
|
|
@@ -4746,11 +5357,11 @@ interface ImportSlideOptions {
|
|
|
4746
5357
|
* slides whose palette is partly hardcoded. When `true` it does two things the
|
|
4747
5358
|
* plain re-brand cannot:
|
|
4748
5359
|
*
|
|
4749
|
-
* - **Literal colours
|
|
5360
|
+
* - **Literal colours**: every literal `a:srgbClr` equal to a *source*-theme
|
|
4750
5361
|
* `clrScheme` slot is rewritten back to a symbolic `a:schemeClr` (routed through
|
|
4751
5362
|
* the source `clrMap`), so it re-resolves against this deck's theme instead of
|
|
4752
5363
|
* staying its authored RGB. A literal matching no source slot is left untouched.
|
|
4753
|
-
* - **Table styles
|
|
5364
|
+
* - **Table styles**: any `@tableStyleId` the slide references is copied from the
|
|
4754
5365
|
* source `tableStyles.xml` into this deck's (same id, idempotent, leaving an id
|
|
4755
5366
|
* the destination already defines alone), so a restyled table keeps its style
|
|
4756
5367
|
* instead of falling back. The copied definition is itself symbolic, so it
|
|
@@ -4763,13 +5374,13 @@ interface ImportSlideOptions {
|
|
|
4763
5374
|
/**
|
|
4764
5375
|
* `preserve`/`restyle` modes only. When `true`, bake the source
|
|
4765
5376
|
* `slideLayout`/`slideMaster` shape-tree decorations (everything on those shape
|
|
4766
|
-
* trees *except* placeholders
|
|
5377
|
+
* trees *except* placeholders: logos, accent curves, footers drawn as shapes)
|
|
4767
5378
|
* onto the imported slide, behind its own content, so master/layout branding
|
|
4768
5379
|
* survives the rebind to this deck's master. Their media are copied across.
|
|
4769
5380
|
*
|
|
4770
5381
|
* Under `preserve` the carried decorations' theme references are flattened like
|
|
4771
5382
|
* the slide's own content; under `restyle` they are left symbolic and so
|
|
4772
|
-
* re-brand to the destination palette along with the slide
|
|
5383
|
+
* re-brand to the destination palette along with the slide. Note that a carried
|
|
4773
5384
|
* source logo could recolour unexpectedly under a different palette.
|
|
4774
5385
|
*
|
|
4775
5386
|
* Off by default: it raises fidelity for cover/closer/divider slides at the
|
|
@@ -4780,7 +5391,7 @@ interface ImportSlideOptions {
|
|
|
4780
5391
|
carryMasterGraphics?: boolean;
|
|
4781
5392
|
/**
|
|
4782
5393
|
* Zero-based insert position in `p:sldIdLst` (deck order). `0` makes the
|
|
4783
|
-
* imported slide first; an `at` past the current slide count
|
|
5394
|
+
* imported slide first; an `at` past the current slide count, or omitting it,
|
|
4784
5395
|
* appends. Use it to place brand bookends (cover at `0`, closer appended)
|
|
4785
5396
|
* around generator-authored interior slides regardless of import order.
|
|
4786
5397
|
*/
|
|
@@ -4788,14 +5399,14 @@ interface ImportSlideOptions {
|
|
|
4788
5399
|
/**
|
|
4789
5400
|
* Carry the *source deck's* embedded fonts (`p:embeddedFontLst` in its
|
|
4790
5401
|
* `presentation.xml`) into this deck, so an imported slide that renders with an
|
|
4791
|
-
* embedded face keeps it on machines that lack the font. Off by default
|
|
5402
|
+
* embedded face keeps it on machines that lack the font. Off by default:
|
|
4792
5403
|
* fonts live on the presentation, not the slide, so they are only worth copying
|
|
4793
5404
|
* when you want the embed to travel.
|
|
4794
5405
|
*
|
|
4795
5406
|
* The font binary parts are copied under fresh `/ppt/fonts/` names (deduped via
|
|
4796
5407
|
* the per-source copy registry, so repeated imports copy each face once), the
|
|
4797
5408
|
* `application/x-fontdata` Default is added, and entries are merged into this
|
|
4798
|
-
* deck's `p:embeddedFontLst
|
|
5409
|
+
* deck's `p:embeddedFontLst`, de-duplicated by `typeface` + face slot, so a
|
|
4799
5410
|
* face this deck already embeds is reused rather than duplicated. The carry is a
|
|
4800
5411
|
* whole-deck operation (it copies *all* the source's embedded fonts, not just the
|
|
4801
5412
|
* faces this one slide uses), since the source list does not record which slide
|
|
@@ -4815,7 +5426,7 @@ interface ImportSlideOptions {
|
|
|
4815
5426
|
* distorts shapes and cannot faithfully reposition rotated shapes. Matches
|
|
4816
5427
|
* "Maximize".
|
|
4817
5428
|
*
|
|
4818
|
-
* Only *geometry* is rescaled
|
|
5429
|
+
* Only *geometry* is rescaled: every top-level shape/group/graphicFrame
|
|
4819
5430
|
* transform (`a:off`/`a:ext`) and table grid (`a:gridCol@w`, `a:tr@h`). Font
|
|
4820
5431
|
* sizes, line widths, and other absolute sizes are left as authored, so heavy
|
|
4821
5432
|
* down-scaling can leave text overflowing its (now smaller) box. In `copy` mode
|
|
@@ -4855,12 +5466,12 @@ interface ImportShapeOptions {
|
|
|
4855
5466
|
* neither re-resolves against the host's placeholder of the same type/idx nor
|
|
4856
5467
|
* collides with it. The safe default for composing across decks.
|
|
4857
5468
|
* - `'restyle'`: leave the shape's theme references symbolic so it re-brands to
|
|
4858
|
-
* the host theme. Only *symbolic* colours re-brand
|
|
5469
|
+
* the host theme. Only *symbolic* colours re-brand; literal `a:srgbClr` the
|
|
4859
5470
|
* source baked in stays put (same limitation as `importSlide` restyle).
|
|
4860
5471
|
* - `'copy'`: bring the shape's XML across untouched; only sane when the host
|
|
4861
5472
|
* already shares the source theme.
|
|
4862
5473
|
*
|
|
4863
|
-
* Unlike a slide import this never runs the slide-scoped background passes
|
|
5474
|
+
* Unlike a slide import this never runs the slide-scoped background passes: a
|
|
4864
5475
|
* background belongs to a slide, not to a composed shape.
|
|
4865
5476
|
*/
|
|
4866
5477
|
theme?: 'preserve' | 'restyle' | 'copy';
|
|
@@ -4884,13 +5495,13 @@ interface ImportShapeOptions {
|
|
|
4884
5495
|
* shape's geometry onto this deck's canvas instead (mirrors
|
|
4885
5496
|
* {@link ImportSlideOptions.rescale}, scoped to one shape):
|
|
4886
5497
|
*
|
|
4887
|
-
* - `'fit'` (or `true`): uniform scale by `min(sx, sy)`, slack centered
|
|
5498
|
+
* - `'fit'` (or `true`): uniform scale by `min(sx, sy)`, slack centered. The
|
|
4888
5499
|
* shape keeps its aspect ratio (circles stay circles, rotations hold) and
|
|
4889
5500
|
* lands at the position it would occupy on a centered copy of the source
|
|
4890
5501
|
* canvas. Matches PowerPoint's "Ensure Fit".
|
|
4891
5502
|
* - `'stretch'`: independent per-axis scale; distorts. Matches "Maximize".
|
|
4892
5503
|
*
|
|
4893
|
-
* Only *geometry* is rescaled
|
|
5504
|
+
* Only *geometry* is rescaled: the shape/group/graphicFrame transform
|
|
4894
5505
|
* (`a:off`/`a:ext`) and any table grid (`a:gridCol@w`, `a:tr@h`). Font sizes,
|
|
4895
5506
|
* line widths, and other absolute sizes are left as authored, so heavy
|
|
4896
5507
|
* down-scaling can leave text overflowing its (now smaller) box. Explicit
|
|
@@ -4905,7 +5516,7 @@ interface ImportShapeOptions {
|
|
|
4905
5516
|
* click-group(s) and `<p:bldP>` are copied into the destination `p:timing`
|
|
4906
5517
|
* (created if absent), their `spid` references remapped to the shape's new id and
|
|
4907
5518
|
* their `<p:cTn>` ids renumbered to stay collision-free, and appended after any
|
|
4908
|
-
* existing build
|
|
5519
|
+
* existing build, mirroring how PowerPoint merges a pasted shape's animation
|
|
4909
5520
|
* (see the `import-animation-merge` oracle). @default false
|
|
4910
5521
|
*/
|
|
4911
5522
|
carryAnimation?: boolean;
|
|
@@ -4934,7 +5545,7 @@ interface ImportSlideMastersOptions {
|
|
|
4934
5545
|
/**
|
|
4935
5546
|
* Require the source and destination slide sizes to match (default `true`).
|
|
4936
5547
|
* A grafted master is shipped into the layout gallery, not applied to existing
|
|
4937
|
-
* slides
|
|
5548
|
+
* slides, but a layout authored at a different canvas size shows up mis-scaled
|
|
4938
5549
|
* in that gallery, so the guard is on by default. Pass `false` to graft anyway.
|
|
4939
5550
|
*/
|
|
4940
5551
|
requireEqualSize?: boolean;
|
|
@@ -4942,15 +5553,15 @@ interface ImportSlideMastersOptions {
|
|
|
4942
5553
|
* Carry the *source deck's* embedded fonts (`p:embeddedFontLst` in its
|
|
4943
5554
|
* `presentation.xml`) into this deck, so a slide later bound to a grafted layout
|
|
4944
5555
|
* keeps that layout's embedded faces on machines that lack the font locally.
|
|
4945
|
-
* Off by default
|
|
4946
|
-
* them can add megabytes
|
|
5556
|
+
* Off by default. Fonts live on the presentation, not the master, and copying
|
|
5557
|
+
* them can add megabytes, so they are only worth carrying when you want the
|
|
4947
5558
|
* embed to travel with the gallery.
|
|
4948
5559
|
*
|
|
4949
5560
|
* Semantics are identical to {@link ImportSlideOptions.embedFonts}: binaries are
|
|
4950
5561
|
* copied under fresh `/ppt/fonts/` names (deduped via the per-source copy
|
|
4951
5562
|
* registry, so a re-call carries each face once), the `application/x-fontdata`
|
|
4952
5563
|
* Default is added, and entries merge into this deck's `p:embeddedFontLst`
|
|
4953
|
-
* de-duplicated by `typeface` + face slot. The carry is a whole-deck operation
|
|
5564
|
+
* de-duplicated by `typeface` + face slot. The carry is a whole-deck operation:
|
|
4954
5565
|
* it copies *all* the source's embedded fonts, not only the faces the grafted
|
|
4955
5566
|
* masters use, since the source list does not record which face belongs to which
|
|
4956
5567
|
* master.
|
|
@@ -4964,16 +5575,16 @@ interface ImportSlideMastersOptions {
|
|
|
4964
5575
|
* only adding new ones, so it is opt-in like {@link embedFonts}.
|
|
4965
5576
|
*
|
|
4966
5577
|
* Without it a grafted master's layouts arrive but its table styling does not, and
|
|
4967
|
-
* a new table falls back to whatever default this deck carries
|
|
5578
|
+
* a new table falls back to whatever default this deck carries: for a generated
|
|
4968
5579
|
* deck, a stub whose default is the standard *Medium Style 2 - Accent 1*. The
|
|
4969
5580
|
* mismatch is visible: the same table renders in a different accent than it would
|
|
4970
5581
|
* in the source deck.
|
|
4971
5582
|
*
|
|
4972
5583
|
* Styles union by `styleId` (a style this deck already defines wins, so a re-call
|
|
4973
|
-
* is idempotent), while `a:tblStyleLst@def`
|
|
5584
|
+
* is idempotent), while `a:tblStyleLst@def` (the default table style) is
|
|
4974
5585
|
* **source-wins**. Carrying the styles without the `def` would not fix the
|
|
4975
5586
|
* mismatch: the standard default GUID is one most templates *also* define, so the
|
|
4976
|
-
* default would still resolve to the wrong style. The carry is whole-deck
|
|
5587
|
+
* default would still resolve to the wrong style. The carry is whole-deck: it
|
|
4977
5588
|
* copies *all* the source's table styles, not only those the grafted masters use,
|
|
4978
5589
|
* since `tableStyles.xml` does not record which style belongs to which master.
|
|
4979
5590
|
* @default false
|
|
@@ -4985,7 +5596,7 @@ interface ImportSlideMastersOptions {
|
|
|
4985
5596
|
* leads is a statement about what the deck *is*, so it is the caller's call rather
|
|
4986
5597
|
* than a side effect of grafting.
|
|
4987
5598
|
*
|
|
4988
|
-
* `p:sldMasterIdLst` order is not part of theme resolution
|
|
5599
|
+
* `p:sldMasterIdLst` order is not part of theme resolution: a slide resolves
|
|
4989
5600
|
* through its own layout's master, so this changes no existing slide's appearance.
|
|
4990
5601
|
* What it changes is the deck's identity in PowerPoint's UI: the list's first entry
|
|
4991
5602
|
* becomes `Designs(1)`, which is the theme the Design tab shows and the one
|
|
@@ -5017,7 +5628,7 @@ interface LayoutHandle {
|
|
|
5017
5628
|
* One authored slide, extracted from a generator for injection into an existing
|
|
5018
5629
|
* package. The slide body XML references its media/hyperlinks by relationship id
|
|
5019
5630
|
* only, so {@link Presentation.appendSlides} preserves each `rId` and only
|
|
5020
|
-
* repoints its target
|
|
5631
|
+
* repoints its target (see {@link SlideSource}).
|
|
5021
5632
|
*/
|
|
5022
5633
|
interface ExtractedSlide {
|
|
5023
5634
|
/** Standalone `<p:sld>` part body (XML declaration + namespaces included). */
|
|
@@ -5047,26 +5658,52 @@ interface ExtractedSlide {
|
|
|
5047
5658
|
}>;
|
|
5048
5659
|
/**
|
|
5049
5660
|
* Embedded audio/video the body references. Each item is one media binary backed
|
|
5050
|
-
* by two rels sharing a Target
|
|
5051
|
-
* MS-2007 `media` rel (`msMediaRid`)
|
|
5661
|
+
* by two rels sharing a Target, the ECMA `audio`/`video` rel (`mediaRid`) and the
|
|
5662
|
+
* MS-2007 `media` rel (`msMediaRid`), plus a separate preview image rel
|
|
5052
5663
|
* (`previewRid`). {@link Presentation.appendSlides} reproduces this rel graph.
|
|
5053
5664
|
*/
|
|
5054
5665
|
avMedia: AvMediaItem[];
|
|
5055
5666
|
/**
|
|
5056
5667
|
* Online (external-link) video the body references. Each item is two *external*
|
|
5057
|
-
* rels sharing one link Target
|
|
5058
|
-
* `media` rel (`msMediaRid`)
|
|
5668
|
+
* rels sharing one link Target, the ECMA `video` rel (`mediaRid`) and the MS-2007
|
|
5669
|
+
* `media` rel (`msMediaRid`), with **no** media binary part. The poster frame is a
|
|
5059
5670
|
* normal image rel carried by {@link media}. {@link Presentation.appendSlides}
|
|
5060
5671
|
* wires the two external rels without reserving a media part or content type.
|
|
5061
5672
|
*/
|
|
5062
5673
|
onlineMedia: OnlineMediaItem[];
|
|
5063
5674
|
/**
|
|
5064
5675
|
* The slide's speaker notes, or `undefined` when it has none. Carried as a ready
|
|
5065
|
-
* `<p:notes>` part body plus its
|
|
5676
|
+
* `<p:notes>` part body plus its hyperlink and slide-link rels;
|
|
5066
5677
|
* {@link Presentation.appendSlides} creates the notes part, wires it to the appended
|
|
5067
5678
|
* slide, and binds it to a notes master (see {@link ExtractedSlides.notesMaster}).
|
|
5068
5679
|
*/
|
|
5069
5680
|
notes?: ExtractedNotes;
|
|
5681
|
+
/**
|
|
5682
|
+
* The transition's start sound (`p:sndAc/p:stSnd/p:snd`), or `undefined` when the slide has
|
|
5683
|
+
* none. One audio part behind an `audio` rel, keyed by the `rId` the body's `p:snd r:embed`
|
|
5684
|
+
* uses. {@link Presentation.appendSlides} adds the part and the rel.
|
|
5685
|
+
*/
|
|
5686
|
+
transitionSound?: {
|
|
5687
|
+
rId: number;
|
|
5688
|
+
bytes: Uint8Array;
|
|
5689
|
+
extn: string;
|
|
5690
|
+
contentType: string;
|
|
5691
|
+
};
|
|
5692
|
+
/**
|
|
5693
|
+
* The slide's legacy review comments, as `addComment` stored them (`x`/`y` in inches), or
|
|
5694
|
+
* `undefined` when it has none. Nothing in {@link xml} names them: they live in a comments part
|
|
5695
|
+
* of their own, under authors in the deck-wide `commentAuthors.xml`.
|
|
5696
|
+
* {@link Presentation.appendSlides} creates the part and merges the authors into the
|
|
5697
|
+
* destination's registry.
|
|
5698
|
+
*/
|
|
5699
|
+
comments?: Array<{
|
|
5700
|
+
author: string;
|
|
5701
|
+
initials: string;
|
|
5702
|
+
text: string;
|
|
5703
|
+
x: number;
|
|
5704
|
+
y: number;
|
|
5705
|
+
date?: string;
|
|
5706
|
+
}>;
|
|
5070
5707
|
}
|
|
5071
5708
|
/** One slide's speaker notes, extracted for {@link Presentation.appendSlides}. */
|
|
5072
5709
|
interface ExtractedNotes {
|
|
@@ -5075,21 +5712,29 @@ interface ExtractedNotes {
|
|
|
5075
5712
|
/**
|
|
5076
5713
|
* External hyperlink rels the notes body references, keyed by the `rId` used in
|
|
5077
5714
|
* {@link xml}. Notes rels reserve `rId1` for the notes master and `rId2` for the
|
|
5078
|
-
* slide, so these start at `rId3`.
|
|
5715
|
+
* slide, so these start at `rId3`.
|
|
5079
5716
|
*/
|
|
5080
5717
|
hyperlinks: Array<{
|
|
5081
5718
|
rId: number;
|
|
5082
5719
|
target: string;
|
|
5083
5720
|
}>;
|
|
5721
|
+
/**
|
|
5722
|
+
* Jumps from a notes run to another slide, as {@link ExtractedSlide.slideLinks} holds them for the
|
|
5723
|
+
* body. Their ids share the numbering of {@link hyperlinks}. Absent means none.
|
|
5724
|
+
*/
|
|
5725
|
+
slideLinks?: Array<{
|
|
5726
|
+
rId: number;
|
|
5727
|
+
sourceSlideNumber: number;
|
|
5728
|
+
}>;
|
|
5084
5729
|
}
|
|
5085
5730
|
/**
|
|
5086
5731
|
* One chart extracted for {@link Presentation.appendSlides}, keyed by the `rId` the slide
|
|
5087
5732
|
* body uses to reference it.
|
|
5088
5733
|
*
|
|
5089
5734
|
* A classic (2007, `c:chartSpace`) chart is one part plus its embedded workbook. A chartEx
|
|
5090
|
-
* (Office 2016
|
|
5735
|
+
* (Office 2016: waterfall, funnel, treemap, ...) chart is a different part in a different
|
|
5091
5736
|
* namespace, reached through a different relationship type, and PowerPoint reports it as
|
|
5092
|
-
* corrupt without its two style sidecars
|
|
5737
|
+
* corrupt without its two style sidecars, so {@link chartEx} carries them and its presence
|
|
5093
5738
|
* is what tells the two shapes apart.
|
|
5094
5739
|
*/
|
|
5095
5740
|
interface ExtractedChart {
|
|
@@ -5099,10 +5744,17 @@ interface ExtractedChart {
|
|
|
5099
5744
|
chartXml: string;
|
|
5100
5745
|
/** The chart's embedded `.xlsx` workbook, the data source PowerPoint opens on edit. */
|
|
5101
5746
|
embeddingBytes: Uint8Array;
|
|
5747
|
+
/** The pictures a chart or plot area's picture fill paints, keyed by the `rId` used in {@link chartXml}. */
|
|
5748
|
+
pictures?: Array<{
|
|
5749
|
+
rId: number;
|
|
5750
|
+
bytes: Uint8Array;
|
|
5751
|
+
extn: string;
|
|
5752
|
+
contentType: string;
|
|
5753
|
+
}>;
|
|
5102
5754
|
/**
|
|
5103
5755
|
* Present only for a chartEx chart, and then always with both sidecars. A chartEx part
|
|
5104
5756
|
* *requires* a chart-style and a color-style part or PowerPoint reports the deck as
|
|
5105
|
-
* corrupt (`0x80070570`)
|
|
5757
|
+
* corrupt (`0x80070570`), schema-valid but unopenable, so these are not optional and
|
|
5106
5758
|
* {@link Presentation.appendSlides} injects them alongside the chart part.
|
|
5107
5759
|
*/
|
|
5108
5760
|
chartEx?: {
|
|
@@ -5159,10 +5811,10 @@ interface ExtractedSlides {
|
|
|
5159
5811
|
* A notes master to fall back on, present only when at least one slide carries notes.
|
|
5160
5812
|
*
|
|
5161
5813
|
* A notes slide must bind to a notes master, and a destination template often has
|
|
5162
|
-
* none
|
|
5814
|
+
* none: a deck authored without speaker notes carries no `notesMaster` part. So the
|
|
5163
5815
|
* generator's own notes master rides along, and {@link Presentation.appendSlides}
|
|
5164
5816
|
* installs it (with its theme) **only** when the destination has none. When the
|
|
5165
|
-
* destination already has one, it wins and this is discarded
|
|
5817
|
+
* destination already has one, it wins and this is discarded, matching the
|
|
5166
5818
|
* `importNotes` policy, where the destination's notes styling also wins.
|
|
5167
5819
|
*/
|
|
5168
5820
|
notesMaster?: {
|
|
@@ -5171,7 +5823,7 @@ interface ExtractedSlides {
|
|
|
5171
5823
|
};
|
|
5172
5824
|
}
|
|
5173
5825
|
/**
|
|
5174
|
-
* Structural view of a slide producer (a `
|
|
5826
|
+
* Structural view of a slide producer (a `PptxTs` instance satisfies this).
|
|
5175
5827
|
* Kept structural so the read subsystem never imports the generator at runtime.
|
|
5176
5828
|
*/
|
|
5177
5829
|
interface SlideSource {
|
|
@@ -5208,7 +5860,7 @@ interface ImportSlidesRequest {
|
|
|
5208
5860
|
* the slide copy drops the `notesSlide` relationship, so the imported page
|
|
5209
5861
|
* arrives without notes.
|
|
5210
5862
|
*
|
|
5211
|
-
* Per request rather than per batch because a stitch mixes sources
|
|
5863
|
+
* Per request rather than per batch because a stitch mixes sources: the
|
|
5212
5864
|
* notes of a library's cover page are worth carrying where a scratch deck's
|
|
5213
5865
|
* are not. The deck-wide half of the policy is not per request: a
|
|
5214
5866
|
* presentation holds at most one `notesMaster`, so the destination's own is
|
|
@@ -5254,6 +5906,5 @@ interface FromTemplateOptions {
|
|
|
5254
5906
|
*/
|
|
5255
5907
|
keepTemplateContentType?: boolean;
|
|
5256
5908
|
}
|
|
5257
|
-
|
|
5258
|
-
|
|
5259
|
-
//# sourceMappingURL=presentation-types-8jLQHI4M.d.ts.map
|
|
5909
|
+
export { isConnector as $, EffectiveColor as $n, Paragraph as $t, BuildSequence as A, PictureMedia as An, ChartDataTable as At, ModernComment as B, GradientStop as Bn, ChartSeries as Bt, readCoreProperties as C, GeometryCommand as Cn, ChartExSeries as Ct, AddTextBoxOptions as D, LineEnd as Dn, ChartAxis as Dt, AddPictureOptions as E, InnerShadow as En, ChartAreaFormat as Et, Tag as F, BackgroundFill as Fn, ChartLine as Ft, SlideLayout as G, GeometrySource as Gn, AutoShape as Gt, NotesPlaceholder as H, PictureFill as Hn, ChartView3D as Ht, readTagsForPart as I, BackgroundSource as In, ChartManualLayout as It, ThemeFontFace as J, ResolvedFrame as Jn, AutofitMode as Jt, SlideMaster as K, PlaceholderRef as Kn, Shape as Kt, Comment as L, SlideBackground as Ln, ChartMarker as Lt, TransitionInput as M, Reflection as Mn, ChartFill as Mt, TransitionSoundInfo as N, ShapeType as Nn, ChartLabelRun as Nt, Slide as O, LineEnds as On, ChartDataLabels as Ot, TransitionSpeed as P, SoftEdge as Pn, ChartLegend as Pt, isAutoShape as Q, ColorTransform as Qn, Equation as Qt, CommentAuthor as R, PatternFill as Rn, ChartPlotGroup as Rt, ExtendedProperties as S, CustomGeometryPath as Sn, ChartExLegend as St, readExtendedProperties as T, Glow as Tn, Chart as Tt, NotesSlide as U, PictureFillTile as Un, Connector as Ut, ModernCommentAuthor as V, FillRect as Vn, ChartTextStyle as Vt, Placeholder as W, ColorRef as Wn, Picture as Wt, AnyShape as X, readColorRef as Xn, ListStyleDefaults as Xt, ThemeFontScheme as Y, StyleFontRef as Yn, BodyProperties as Yt, GroupShape as Z, resolveColorElement as Zn, TextFrame as Zt, SlideSize as _, ConnectionSite as _n, DiagramPoint as _t, ExtractedChart as a, Run as an, TableRow as at, CoreProperties as b, CustomGeometryConnectionSite as bn, ChartExAxis as bt, ExtractedSlides as c, TextContext as cn, CellThreeD as ct, ImportSlideMastersOptions as d, TableCellTextStyle as dn, TableCellEdge as dt, BulletDetail as en, applyColorTransforms as er, isGraphicFrame as et, ImportSlideOptions as f, TableConditionFlags as fn, Diagram as ft, OnlineMediaItem as g, ChildFrame as gn, DiagramNode as gt, LayoutHandle as h, AbsoluteFrameFailure as hn, DiagramDrawnShape as ht, EmbeddedFontInfo as i, LineSpacing as in, Table as it, TransitionInfo as j, Recolor as jn, ChartDisplayUnits as jt, BuildEffect as k, OuterShadow as kn, ChartDataPoint as kt, FromTemplateOptions as l, TextInheritance as ln, TableCell as lt, ImportedSlideMaster as m, AbsoluteFrame as mn, DiagramConnectionType as mt, AvMediaItem as n, Field as nn, ThemeContext as nr, isPicture as nt, ExtractedNotes as o, RunOutline as on, CellBorder as ot, ImportSlidesRequest as p, Hyperlink as pn, DiagramConnection as pt, Theme as q, ResolvedColor as qn, ShapeHost as qt, EmbeddedFontFaceInfo as r, InheritedRunProps as rn, GraphicFrame as rt, ExtractedSlide as s, TabStop as sn, CellBorders as st, AppendSlidesOptions as t, BulletStyle as tn, ColorContext as tr, isGroupShape as tt, ImportShapeOptions as u, ResolvedTableStyle as un, TableCellBorderEdit as ut, SlideSource as v, CustomGeometry as vn, DiagramPointType as vt, readCustomProperties as w, GeometryCoordinate as wn, AxisNumberFormat as wt, CustomProperty as x, CustomGeometryGuide as xn, ChartExDataLabels as xt, Presentation as y, CustomGeometryAdjustHandle as yn, ChartEx as yt, CommentSchema as z, GradientFill as zn, ChartPointLabel as zt };
|
|
5910
|
+
//# sourceMappingURL=presentation-types-BgnZR-0a.d.ts.map
|