pptx-viewer-core 1.1.32 → 1.1.34
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/dist/{SvgExporter-BkkVdcN7.d.mts → SvgExporter-CGO8Tx9z.d.mts} +1 -1
- package/dist/{SvgExporter-MDf-1CNQ.d.ts → SvgExporter-DpupBlmk.d.ts} +1 -1
- package/dist/cli/index.d.mts +2 -2
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +0 -0
- package/dist/cli/index.mjs +0 -0
- package/dist/converter/index.d.mts +3 -3
- package/dist/converter/index.d.ts +3 -3
- package/dist/index.d.mts +193 -7
- package/dist/index.d.ts +193 -7
- package/dist/index.js +1073 -312
- package/dist/index.mjs +1068 -313
- package/dist/{presentation-BWchOWpy.d.mts → presentation-CyttD6sq.d.mts} +50 -1
- package/dist/{presentation-BWchOWpy.d.ts → presentation-CyttD6sq.d.ts} +50 -1
- package/dist/{text-operations-Dld03ITU.d.mts → text-operations-D5GfkYT5.d.mts} +1 -1
- package/dist/{text-operations-DTlmk6ap.d.ts → text-operations-DXebUVQp.d.ts} +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1579,8 +1579,8 @@ var DEFAULT_COLORS = {
|
|
|
1579
1579
|
};
|
|
1580
1580
|
var DEFAULT_MAJOR_FONT = "Calibri Light";
|
|
1581
1581
|
var DEFAULT_MINOR_FONT = "Calibri";
|
|
1582
|
-
function hexToRgb(
|
|
1583
|
-
return
|
|
1582
|
+
function hexToRgb(hex8) {
|
|
1583
|
+
return hex8.replace(/^#/, "").toUpperCase();
|
|
1584
1584
|
}
|
|
1585
1585
|
function isoNow() {
|
|
1586
1586
|
return (/* @__PURE__ */ new Date()).toISOString().replace(/\.\d+Z$/, "Z");
|
|
@@ -4253,8 +4253,8 @@ var PptxColorTransformCodec = class {
|
|
|
4253
4253
|
clampUnitInterval(value) {
|
|
4254
4254
|
return Math.min(1, Math.max(0, value));
|
|
4255
4255
|
}
|
|
4256
|
-
hexToRgb(
|
|
4257
|
-
const normalized =
|
|
4256
|
+
hexToRgb(hex8) {
|
|
4257
|
+
const normalized = hex8.replace("#", "");
|
|
4258
4258
|
if (!/^[0-9a-fA-F]{6}$/.test(normalized)) {
|
|
4259
4259
|
return void 0;
|
|
4260
4260
|
}
|
|
@@ -5764,7 +5764,7 @@ var PptxColorStyleCodec = class {
|
|
|
5764
5764
|
parseColor: (colorNode, placeholderColor) => this.parseColor(colorNode, placeholderColor),
|
|
5765
5765
|
extractColorOpacity: (colorNode) => this.extractColorOpacity(colorNode),
|
|
5766
5766
|
clampUnitInterval: (value) => this.clampUnitInterval(value),
|
|
5767
|
-
hexToRgb: (
|
|
5767
|
+
hexToRgb: (hex8) => this.hexToRgb(hex8),
|
|
5768
5768
|
rgbToHex: (r, g, b) => this.rgbToHex(r, g, b)
|
|
5769
5769
|
});
|
|
5770
5770
|
this.shapeEffectXmlCodec = new PptxShapeEffectXmlCodec({
|
|
@@ -5787,8 +5787,8 @@ var PptxColorStyleCodec = class {
|
|
|
5787
5787
|
clampUnitInterval(value) {
|
|
5788
5788
|
return this.colorTransformCodec.clampUnitInterval(value);
|
|
5789
5789
|
}
|
|
5790
|
-
hexToRgb(
|
|
5791
|
-
return this.colorTransformCodec.hexToRgb(
|
|
5790
|
+
hexToRgb(hex8) {
|
|
5791
|
+
return this.colorTransformCodec.hexToRgb(hex8);
|
|
5792
5792
|
}
|
|
5793
5793
|
rgbToHex(r, g, b) {
|
|
5794
5794
|
return this.colorTransformCodec.rgbToHex(r, g, b);
|
|
@@ -5959,9 +5959,9 @@ function normalizeHex(value) {
|
|
|
5959
5959
|
if (raw.length === 0) {
|
|
5960
5960
|
return "";
|
|
5961
5961
|
}
|
|
5962
|
-
const
|
|
5963
|
-
if (/^[0-9a-fA-F]{6}$/.test(
|
|
5964
|
-
return
|
|
5962
|
+
const hex8 = raw.replace(/^#/, "");
|
|
5963
|
+
if (/^[0-9a-fA-F]{6}$/.test(hex8)) {
|
|
5964
|
+
return hex8.toUpperCase();
|
|
5965
5965
|
}
|
|
5966
5966
|
return raw.toLowerCase();
|
|
5967
5967
|
}
|
|
@@ -5971,8 +5971,8 @@ function colorsEqual(left, right) {
|
|
|
5971
5971
|
}
|
|
5972
5972
|
return normalizeHex(left) === normalizeHex(right);
|
|
5973
5973
|
}
|
|
5974
|
-
function buildSrgbColorChoice(
|
|
5975
|
-
const normalized = String(
|
|
5974
|
+
function buildSrgbColorChoice(hex8, opacity) {
|
|
5975
|
+
const normalized = String(hex8 || "").replace(/^#/, "");
|
|
5976
5976
|
const srgb = { "@_val": normalized };
|
|
5977
5977
|
if (typeof opacity === "number" && Number.isFinite(opacity) && opacity >= 0 && opacity < 1) {
|
|
5978
5978
|
const alphaPct = Math.round(Math.max(0, Math.min(1, opacity)) * 1e5);
|
|
@@ -6979,15 +6979,15 @@ var PptxMediaDataParser = class {
|
|
|
6979
6979
|
|
|
6980
6980
|
// src/core/utils/ole-utils.ts
|
|
6981
6981
|
var PROG_ID_MAP = [
|
|
6982
|
-
{ pattern: /^Excel\./
|
|
6983
|
-
{ pattern: /^Word\./
|
|
6984
|
-
{ pattern: /^PowerPoint\./
|
|
6985
|
-
{ pattern: /^Visio\./
|
|
6986
|
-
{ pattern: /^Equation\./
|
|
6987
|
-
{ pattern: /^MathType/
|
|
6988
|
-
{ pattern: /^AcroExch\./
|
|
6989
|
-
{ pattern: /^Acrobat\./
|
|
6990
|
-
{ pattern: /^Package$/
|
|
6982
|
+
{ pattern: /^Excel\./iu, type: "excel", extension: "xlsx" },
|
|
6983
|
+
{ pattern: /^Word\./iu, type: "word", extension: "docx" },
|
|
6984
|
+
{ pattern: /^PowerPoint\./iu, type: "excel", extension: "pptx" },
|
|
6985
|
+
{ pattern: /^Visio\./iu, type: "visio", extension: "vsdx" },
|
|
6986
|
+
{ pattern: /^Equation\./iu, type: "mathtype", extension: "wmf" },
|
|
6987
|
+
{ pattern: /^MathType/iu, type: "mathtype", extension: "wmf" },
|
|
6988
|
+
{ pattern: /^AcroExch\./iu, type: "pdf", extension: "pdf" },
|
|
6989
|
+
{ pattern: /^Acrobat\./iu, type: "pdf", extension: "pdf" },
|
|
6990
|
+
{ pattern: /^Package$/iu, type: "package", extension: "bin" }
|
|
6991
6991
|
];
|
|
6992
6992
|
var CLSID_MAP = /* @__PURE__ */ new Map([
|
|
6993
6993
|
// Excel Workbook
|
|
@@ -7014,7 +7014,7 @@ function detectOleObjectType(progId, clsId) {
|
|
|
7014
7014
|
}
|
|
7015
7015
|
}
|
|
7016
7016
|
if (clsId) {
|
|
7017
|
-
const normalised = clsId.replace(/[{}]/
|
|
7017
|
+
const normalised = clsId.replace(/[{}]/gu, "").toUpperCase().trim();
|
|
7018
7018
|
const match = CLSID_MAP.get(normalised);
|
|
7019
7019
|
if (match) {
|
|
7020
7020
|
return { oleObjectType: match.type, oleFileExtension: match.extension };
|
|
@@ -7036,6 +7036,38 @@ function inferOleExtensionFromTarget(oleTarget) {
|
|
|
7036
7036
|
}
|
|
7037
7037
|
return void 0;
|
|
7038
7038
|
}
|
|
7039
|
+
var OLE_EXTENSION_MIME_MAP = /* @__PURE__ */ new Map([
|
|
7040
|
+
["xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],
|
|
7041
|
+
["xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12"],
|
|
7042
|
+
["xls", "application/vnd.ms-excel"],
|
|
7043
|
+
["docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"],
|
|
7044
|
+
["docm", "application/vnd.ms-word.document.macroEnabled.12"],
|
|
7045
|
+
["doc", "application/msword"],
|
|
7046
|
+
["pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"],
|
|
7047
|
+
["ppt", "application/vnd.ms-powerpoint"],
|
|
7048
|
+
["vsdx", "application/vnd.ms-visio.drawing"],
|
|
7049
|
+
["vsd", "application/vnd.visio"],
|
|
7050
|
+
["pdf", "application/pdf"],
|
|
7051
|
+
["rtf", "application/rtf"],
|
|
7052
|
+
["txt", "text/plain"],
|
|
7053
|
+
["csv", "text/csv"],
|
|
7054
|
+
["png", "image/png"],
|
|
7055
|
+
["jpg", "image/jpeg"],
|
|
7056
|
+
["jpeg", "image/jpeg"],
|
|
7057
|
+
["gif", "image/gif"],
|
|
7058
|
+
["wmf", "image/wmf"],
|
|
7059
|
+
["emf", "image/emf"],
|
|
7060
|
+
["zip", "application/zip"]
|
|
7061
|
+
]);
|
|
7062
|
+
function mimeTypeForOleFile(fileNameOrExtension) {
|
|
7063
|
+
const fallback = "application/octet-stream";
|
|
7064
|
+
if (!fileNameOrExtension) {
|
|
7065
|
+
return fallback;
|
|
7066
|
+
}
|
|
7067
|
+
const lastDot = fileNameOrExtension.lastIndexOf(".");
|
|
7068
|
+
const ext = (lastDot === -1 ? fileNameOrExtension : fileNameOrExtension.slice(lastDot + 1)).toLowerCase().trim();
|
|
7069
|
+
return OLE_EXTENSION_MIME_MAP.get(ext) ?? fallback;
|
|
7070
|
+
}
|
|
7039
7071
|
function getOleObjectTypeLabel(oleObjectType) {
|
|
7040
7072
|
switch (oleObjectType) {
|
|
7041
7073
|
case "excel":
|
|
@@ -8762,6 +8794,7 @@ var PptxSlideLoaderService = class {
|
|
|
8762
8794
|
if (mediaTimingMap.size > 0) {
|
|
8763
8795
|
await params.enrichMediaElementsWithTiming(slideElements, mediaTimingMap);
|
|
8764
8796
|
}
|
|
8797
|
+
await params.enrichOleElementsWithEmbeddedData(slideElements, path);
|
|
8765
8798
|
const elements = [...layoutElements, ...slideElements];
|
|
8766
8799
|
const backgroundColor = params.extractBackgroundColor(slideXmlObj) || await params.getLayoutBackgroundColor(path);
|
|
8767
8800
|
const backgroundGradient = params.extractBackgroundGradient(slideXmlObj) || await params.getLayoutBackgroundGradient(path);
|
|
@@ -9484,9 +9517,9 @@ function decodeKeyframeValue(valNode) {
|
|
|
9484
9517
|
if (strVal && strVal["@_val"] !== void 0) {
|
|
9485
9518
|
return { value: String(strVal["@_val"]), valueType: "str" };
|
|
9486
9519
|
}
|
|
9487
|
-
const
|
|
9488
|
-
if (
|
|
9489
|
-
const raw =
|
|
9520
|
+
const boolVal3 = valNode["p:boolVal"];
|
|
9521
|
+
if (boolVal3 && boolVal3["@_val"] !== void 0) {
|
|
9522
|
+
const raw = boolVal3["@_val"];
|
|
9490
9523
|
const value = raw === "1" || raw === "true";
|
|
9491
9524
|
return { value, valueType: "bool" };
|
|
9492
9525
|
}
|
|
@@ -12343,6 +12376,321 @@ function resolveLayoutDisplayName(input) {
|
|
|
12343
12376
|
return fallbackFromPath(input.path);
|
|
12344
12377
|
}
|
|
12345
12378
|
|
|
12379
|
+
// src/core/utils/ole2-parser-types.ts
|
|
12380
|
+
var OLE_MAGIC = new Uint8Array([208, 207, 17, 224, 161, 27, 26, 225]);
|
|
12381
|
+
var ENDOFCHAIN = 4294967294;
|
|
12382
|
+
var FREESECT = 4294967295;
|
|
12383
|
+
var FATSECT = 4294967293;
|
|
12384
|
+
var MAXREGSECT = 4294967290;
|
|
12385
|
+
var ENTRY_TYPE_EMPTY = 0;
|
|
12386
|
+
var ENTRY_TYPE_STREAM = 2;
|
|
12387
|
+
var ENTRY_TYPE_ROOT = 5;
|
|
12388
|
+
var DIR_ENTRY_SIZE = 128;
|
|
12389
|
+
var Ole2ParseError = class extends Error {
|
|
12390
|
+
constructor(message) {
|
|
12391
|
+
super(message);
|
|
12392
|
+
this.name = "Ole2ParseError";
|
|
12393
|
+
}
|
|
12394
|
+
};
|
|
12395
|
+
|
|
12396
|
+
// src/core/utils/ole2-parser-read.ts
|
|
12397
|
+
function parseOle2(buffer) {
|
|
12398
|
+
const data = new Uint8Array(buffer);
|
|
12399
|
+
const view = new DataView(buffer);
|
|
12400
|
+
for (let i = 0; i < OLE_MAGIC.length; i++) {
|
|
12401
|
+
if (data[i] !== OLE_MAGIC[i]) {
|
|
12402
|
+
throw new Ole2ParseError("Not a valid OLE2 compound file");
|
|
12403
|
+
}
|
|
12404
|
+
}
|
|
12405
|
+
view.getUint16(24, true);
|
|
12406
|
+
const majorVersion = view.getUint16(26, true);
|
|
12407
|
+
const byteOrder = view.getUint16(28, true);
|
|
12408
|
+
if (byteOrder !== 65534) {
|
|
12409
|
+
throw new Ole2ParseError("Invalid byte order mark");
|
|
12410
|
+
}
|
|
12411
|
+
const sectorSizePower = view.getUint16(30, true);
|
|
12412
|
+
const miniSectorSizePower = view.getUint16(32, true);
|
|
12413
|
+
const sectorSize = 1 << sectorSizePower;
|
|
12414
|
+
const miniSectorSize = 1 << miniSectorSizePower;
|
|
12415
|
+
const totalFATSectors = view.getUint32(44, true);
|
|
12416
|
+
const firstDirectorySector = view.getUint32(48, true);
|
|
12417
|
+
const miniStreamCutoff = view.getUint32(56, true);
|
|
12418
|
+
const firstMiniFATSector = view.getUint32(60, true);
|
|
12419
|
+
const totalMiniFATSectors = view.getUint32(64, true);
|
|
12420
|
+
const firstDIFATSector = view.getUint32(68, true);
|
|
12421
|
+
const totalDIFATSectors = view.getUint32(72, true);
|
|
12422
|
+
function sectorOffset(sector) {
|
|
12423
|
+
return (sector + 1) * sectorSize;
|
|
12424
|
+
}
|
|
12425
|
+
function readSector(sector) {
|
|
12426
|
+
const offset = sectorOffset(sector);
|
|
12427
|
+
if (offset + sectorSize > data.length) {
|
|
12428
|
+
throw new Ole2ParseError(
|
|
12429
|
+
`Sector ${sector} at offset ${offset} exceeds file size ${data.length}`
|
|
12430
|
+
);
|
|
12431
|
+
}
|
|
12432
|
+
return data.subarray(offset, offset + sectorSize);
|
|
12433
|
+
}
|
|
12434
|
+
const fatSectors = [];
|
|
12435
|
+
for (let i = 0; i < 109 && fatSectors.length < totalFATSectors; i++) {
|
|
12436
|
+
const sector = view.getUint32(76 + i * 4, true);
|
|
12437
|
+
if (sector <= MAXREGSECT) {
|
|
12438
|
+
fatSectors.push(sector);
|
|
12439
|
+
}
|
|
12440
|
+
}
|
|
12441
|
+
let difatSector = firstDIFATSector;
|
|
12442
|
+
for (let d = 0; d < totalDIFATSectors && difatSector <= MAXREGSECT; d++) {
|
|
12443
|
+
const difatData = readSector(difatSector);
|
|
12444
|
+
const difatView = new DataView(difatData.buffer, difatData.byteOffset, difatData.byteLength);
|
|
12445
|
+
const entriesPerSector = (sectorSize - 4) / 4;
|
|
12446
|
+
for (let i = 0; i < entriesPerSector && fatSectors.length < totalFATSectors; i++) {
|
|
12447
|
+
const sector = difatView.getUint32(i * 4, true);
|
|
12448
|
+
if (sector <= MAXREGSECT) {
|
|
12449
|
+
fatSectors.push(sector);
|
|
12450
|
+
}
|
|
12451
|
+
}
|
|
12452
|
+
difatSector = difatView.getUint32(sectorSize - 4, true);
|
|
12453
|
+
}
|
|
12454
|
+
const fatEntries = [];
|
|
12455
|
+
for (const fatSector of fatSectors) {
|
|
12456
|
+
const fatData = readSector(fatSector);
|
|
12457
|
+
const fatView = new DataView(fatData.buffer, fatData.byteOffset, fatData.byteLength);
|
|
12458
|
+
for (let i = 0; i < sectorSize / 4; i++) {
|
|
12459
|
+
fatEntries.push(fatView.getUint32(i * 4, true));
|
|
12460
|
+
}
|
|
12461
|
+
}
|
|
12462
|
+
function readSectorChain(startSector) {
|
|
12463
|
+
const sectors = [];
|
|
12464
|
+
let current = startSector;
|
|
12465
|
+
const visited = /* @__PURE__ */ new Set();
|
|
12466
|
+
while (current <= MAXREGSECT) {
|
|
12467
|
+
if (visited.has(current)) {
|
|
12468
|
+
throw new Ole2ParseError(`Circular reference in FAT chain at sector ${current}`);
|
|
12469
|
+
}
|
|
12470
|
+
visited.add(current);
|
|
12471
|
+
sectors.push(readSector(current));
|
|
12472
|
+
current = fatEntries[current] ?? ENDOFCHAIN;
|
|
12473
|
+
}
|
|
12474
|
+
const totalLength = sectors.length * sectorSize;
|
|
12475
|
+
const result = new Uint8Array(totalLength);
|
|
12476
|
+
let offset = 0;
|
|
12477
|
+
for (const sector of sectors) {
|
|
12478
|
+
result.set(sector, offset);
|
|
12479
|
+
offset += sectorSize;
|
|
12480
|
+
}
|
|
12481
|
+
return result;
|
|
12482
|
+
}
|
|
12483
|
+
function readStream(startSector, size) {
|
|
12484
|
+
const raw = readSectorChain(startSector);
|
|
12485
|
+
return raw.subarray(0, Math.min(size, raw.length));
|
|
12486
|
+
}
|
|
12487
|
+
const miniFatEntries = [];
|
|
12488
|
+
if (firstMiniFATSector <= MAXREGSECT && totalMiniFATSectors > 0) {
|
|
12489
|
+
const miniFatRaw = readSectorChain(firstMiniFATSector);
|
|
12490
|
+
const miniFatView = new DataView(
|
|
12491
|
+
miniFatRaw.buffer,
|
|
12492
|
+
miniFatRaw.byteOffset,
|
|
12493
|
+
miniFatRaw.byteLength
|
|
12494
|
+
);
|
|
12495
|
+
for (let i = 0; i < miniFatRaw.length / 4; i++) {
|
|
12496
|
+
miniFatEntries.push(miniFatView.getUint32(i * 4, true));
|
|
12497
|
+
}
|
|
12498
|
+
}
|
|
12499
|
+
const dirRaw = readSectorChain(firstDirectorySector);
|
|
12500
|
+
const numEntries = Math.floor(dirRaw.length / DIR_ENTRY_SIZE);
|
|
12501
|
+
const entries = [];
|
|
12502
|
+
for (let i = 0; i < numEntries; i++) {
|
|
12503
|
+
const entryOffset = i * DIR_ENTRY_SIZE;
|
|
12504
|
+
const entryView = new DataView(dirRaw.buffer, dirRaw.byteOffset + entryOffset, DIR_ENTRY_SIZE);
|
|
12505
|
+
const nameLen = entryView.getUint16(64, true);
|
|
12506
|
+
const objectType = entryView.getUint8(66);
|
|
12507
|
+
if (objectType === ENTRY_TYPE_EMPTY) {
|
|
12508
|
+
continue;
|
|
12509
|
+
}
|
|
12510
|
+
const nameBytes = Math.max(0, nameLen - 2);
|
|
12511
|
+
let name = "";
|
|
12512
|
+
for (let j = 0; j < nameBytes; j += 2) {
|
|
12513
|
+
name += String.fromCharCode(entryView.getUint16(j, true));
|
|
12514
|
+
}
|
|
12515
|
+
const leftSiblingId = entryView.getUint32(68, true);
|
|
12516
|
+
const rightSiblingId = entryView.getUint32(72, true);
|
|
12517
|
+
const childId = entryView.getUint32(76, true);
|
|
12518
|
+
const startSector = entryView.getUint32(116, true);
|
|
12519
|
+
const sizeLow = entryView.getUint32(120, true);
|
|
12520
|
+
let size = sizeLow;
|
|
12521
|
+
if (majorVersion === 4) {
|
|
12522
|
+
entryView.getUint32(124, true);
|
|
12523
|
+
size = sizeLow;
|
|
12524
|
+
}
|
|
12525
|
+
entries.push({
|
|
12526
|
+
name,
|
|
12527
|
+
type: objectType,
|
|
12528
|
+
startSector,
|
|
12529
|
+
size,
|
|
12530
|
+
childId: childId === 4294967295 ? -1 : childId,
|
|
12531
|
+
leftSiblingId: leftSiblingId === 4294967295 ? -1 : leftSiblingId,
|
|
12532
|
+
rightSiblingId: rightSiblingId === 4294967295 ? -1 : rightSiblingId
|
|
12533
|
+
});
|
|
12534
|
+
}
|
|
12535
|
+
const rootEntry = entries.find((e) => e.type === ENTRY_TYPE_ROOT);
|
|
12536
|
+
let miniStreamData;
|
|
12537
|
+
if (rootEntry && rootEntry.startSector <= MAXREGSECT) {
|
|
12538
|
+
miniStreamData = readSectorChain(rootEntry.startSector);
|
|
12539
|
+
}
|
|
12540
|
+
function readMiniStream(startSector, size) {
|
|
12541
|
+
if (!miniStreamData) {
|
|
12542
|
+
throw new Ole2ParseError("Mini stream container not found");
|
|
12543
|
+
}
|
|
12544
|
+
const sectors = [];
|
|
12545
|
+
let current = startSector;
|
|
12546
|
+
const visited = /* @__PURE__ */ new Set();
|
|
12547
|
+
while (current <= MAXREGSECT) {
|
|
12548
|
+
if (visited.has(current)) {
|
|
12549
|
+
throw new Ole2ParseError(`Circular reference in mini FAT chain at sector ${current}`);
|
|
12550
|
+
}
|
|
12551
|
+
visited.add(current);
|
|
12552
|
+
const offset2 = current * miniSectorSize;
|
|
12553
|
+
sectors.push(miniStreamData.subarray(offset2, offset2 + miniSectorSize));
|
|
12554
|
+
current = miniFatEntries[current] ?? ENDOFCHAIN;
|
|
12555
|
+
}
|
|
12556
|
+
const totalLength = sectors.length * miniSectorSize;
|
|
12557
|
+
const result = new Uint8Array(totalLength);
|
|
12558
|
+
let offset = 0;
|
|
12559
|
+
for (const sector of sectors) {
|
|
12560
|
+
result.set(sector, offset);
|
|
12561
|
+
offset += miniSectorSize;
|
|
12562
|
+
}
|
|
12563
|
+
return result.subarray(0, Math.min(size, result.length));
|
|
12564
|
+
}
|
|
12565
|
+
function getStream(name) {
|
|
12566
|
+
const entry = entries.find(
|
|
12567
|
+
(e) => (e.type === ENTRY_TYPE_STREAM || e.type === ENTRY_TYPE_ROOT) && e.name === name
|
|
12568
|
+
);
|
|
12569
|
+
if (!entry) {
|
|
12570
|
+
return void 0;
|
|
12571
|
+
}
|
|
12572
|
+
if (entry.size < miniStreamCutoff && entry.type !== ENTRY_TYPE_ROOT) {
|
|
12573
|
+
return readMiniStream(entry.startSector, entry.size);
|
|
12574
|
+
}
|
|
12575
|
+
return readStream(entry.startSector, entry.size);
|
|
12576
|
+
}
|
|
12577
|
+
return { entries, getStream };
|
|
12578
|
+
}
|
|
12579
|
+
|
|
12580
|
+
// src/core/utils/ole-embedded-extract.ts
|
|
12581
|
+
function oleBytesToDataUrl(bytes, mimeType) {
|
|
12582
|
+
let binary = "";
|
|
12583
|
+
const chunkSize = 32768;
|
|
12584
|
+
for (let i = 0; i < bytes.length; i += chunkSize) {
|
|
12585
|
+
const chunk = bytes.subarray(i, i + chunkSize);
|
|
12586
|
+
binary += String.fromCharCode.apply(null, Array.from(chunk));
|
|
12587
|
+
}
|
|
12588
|
+
return `data:${mimeType};base64,${btoa(binary)}`;
|
|
12589
|
+
}
|
|
12590
|
+
var OLE10_NATIVE_STREAM_NAMES = [`${String.fromCharCode(1)}Ole10Native`, "Ole10Native"];
|
|
12591
|
+
var CONTENTS_STREAM = "CONTENTS";
|
|
12592
|
+
function isOle2CompoundFile(bytes) {
|
|
12593
|
+
if (bytes.length < OLE_MAGIC.length) {
|
|
12594
|
+
return false;
|
|
12595
|
+
}
|
|
12596
|
+
for (let i = 0; i < OLE_MAGIC.length; i++) {
|
|
12597
|
+
if (bytes[i] !== OLE_MAGIC[i]) {
|
|
12598
|
+
return false;
|
|
12599
|
+
}
|
|
12600
|
+
}
|
|
12601
|
+
return true;
|
|
12602
|
+
}
|
|
12603
|
+
function baseNameFromPath(raw) {
|
|
12604
|
+
const trimmed = raw.trim();
|
|
12605
|
+
if (trimmed.length === 0) {
|
|
12606
|
+
return void 0;
|
|
12607
|
+
}
|
|
12608
|
+
const lastSlash = Math.max(trimmed.lastIndexOf("\\"), trimmed.lastIndexOf("/"));
|
|
12609
|
+
const base = lastSlash === -1 ? trimmed : trimmed.slice(lastSlash + 1);
|
|
12610
|
+
return base.length > 0 ? base : void 0;
|
|
12611
|
+
}
|
|
12612
|
+
function readAsciiZ(bytes, offset) {
|
|
12613
|
+
let end = offset;
|
|
12614
|
+
while (end < bytes.length && bytes[end] !== 0) {
|
|
12615
|
+
end++;
|
|
12616
|
+
}
|
|
12617
|
+
let value = "";
|
|
12618
|
+
for (let i = offset; i < end; i++) {
|
|
12619
|
+
value += String.fromCharCode(bytes[i]);
|
|
12620
|
+
}
|
|
12621
|
+
return { value, next: end < bytes.length ? end + 1 : end };
|
|
12622
|
+
}
|
|
12623
|
+
function decodeOle10Native(stream) {
|
|
12624
|
+
if (stream.length < 6) {
|
|
12625
|
+
return void 0;
|
|
12626
|
+
}
|
|
12627
|
+
const view = new DataView(stream.buffer, stream.byteOffset, stream.byteLength);
|
|
12628
|
+
const declaredSize = view.getUint32(0, true);
|
|
12629
|
+
const bodyEnd = Math.min(stream.length, 4 + declaredSize);
|
|
12630
|
+
if (bodyEnd <= 4) {
|
|
12631
|
+
return void 0;
|
|
12632
|
+
}
|
|
12633
|
+
let cursor = 6;
|
|
12634
|
+
const label = readAsciiZ(stream, cursor);
|
|
12635
|
+
cursor = label.next;
|
|
12636
|
+
const sourcePath = readAsciiZ(stream, cursor);
|
|
12637
|
+
cursor = sourcePath.next;
|
|
12638
|
+
if (cursor + 8 > stream.length) {
|
|
12639
|
+
return void 0;
|
|
12640
|
+
}
|
|
12641
|
+
cursor += 4;
|
|
12642
|
+
const tempLen = view.getUint32(cursor, true);
|
|
12643
|
+
cursor += 4;
|
|
12644
|
+
if (tempLen > stream.length) {
|
|
12645
|
+
return void 0;
|
|
12646
|
+
}
|
|
12647
|
+
cursor += tempLen;
|
|
12648
|
+
if (cursor + 4 > stream.length) {
|
|
12649
|
+
return void 0;
|
|
12650
|
+
}
|
|
12651
|
+
const nativeSize = view.getUint32(cursor, true);
|
|
12652
|
+
cursor += 4;
|
|
12653
|
+
const dataEnd = Math.min(stream.length, cursor + nativeSize);
|
|
12654
|
+
if (dataEnd <= cursor) {
|
|
12655
|
+
return void 0;
|
|
12656
|
+
}
|
|
12657
|
+
const data = stream.subarray(cursor, dataEnd);
|
|
12658
|
+
const fileName = baseNameFromPath(sourcePath.value) ?? baseNameFromPath(label.value) ?? void 0;
|
|
12659
|
+
return { fileName, data };
|
|
12660
|
+
}
|
|
12661
|
+
function unwrapOleEmbedding(bytes) {
|
|
12662
|
+
if (bytes.length === 0) {
|
|
12663
|
+
return { data: bytes };
|
|
12664
|
+
}
|
|
12665
|
+
if (!isOle2CompoundFile(bytes)) {
|
|
12666
|
+
return { data: bytes };
|
|
12667
|
+
}
|
|
12668
|
+
try {
|
|
12669
|
+
const buffer = bytes.buffer.slice(
|
|
12670
|
+
bytes.byteOffset,
|
|
12671
|
+
bytes.byteOffset + bytes.byteLength
|
|
12672
|
+
);
|
|
12673
|
+
const ole = parseOle2(buffer);
|
|
12674
|
+
for (const name of OLE10_NATIVE_STREAM_NAMES) {
|
|
12675
|
+
const ole10 = ole.getStream(name);
|
|
12676
|
+
if (!ole10) {
|
|
12677
|
+
continue;
|
|
12678
|
+
}
|
|
12679
|
+
const decoded = decodeOle10Native(ole10);
|
|
12680
|
+
if (decoded && decoded.data.length > 0) {
|
|
12681
|
+
return decoded;
|
|
12682
|
+
}
|
|
12683
|
+
return { data: ole10 };
|
|
12684
|
+
}
|
|
12685
|
+
const contents = ole.getStream(CONTENTS_STREAM);
|
|
12686
|
+
if (contents && contents.length > 0) {
|
|
12687
|
+
return { data: contents };
|
|
12688
|
+
}
|
|
12689
|
+
} catch {
|
|
12690
|
+
}
|
|
12691
|
+
return { data: bytes };
|
|
12692
|
+
}
|
|
12693
|
+
|
|
12346
12694
|
// src/core/utils/signature-constants.ts
|
|
12347
12695
|
var DIGITAL_SIGNATURE_ORIGIN_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/origin";
|
|
12348
12696
|
var DIGITAL_SIGNATURE_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/signature";
|
|
@@ -12732,13 +13080,13 @@ function generateFontGuid() {
|
|
|
12732
13080
|
bytes[i] = Math.floor(Math.random() * 256);
|
|
12733
13081
|
}
|
|
12734
13082
|
}
|
|
12735
|
-
const
|
|
13083
|
+
const hex8 = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0").toUpperCase()).join("");
|
|
12736
13084
|
return [
|
|
12737
|
-
|
|
12738
|
-
|
|
12739
|
-
|
|
12740
|
-
|
|
12741
|
-
|
|
13085
|
+
hex8.substring(0, 8),
|
|
13086
|
+
hex8.substring(8, 12),
|
|
13087
|
+
hex8.substring(12, 16),
|
|
13088
|
+
hex8.substring(16, 20),
|
|
13089
|
+
hex8.substring(20, 32)
|
|
12742
13090
|
].join("-");
|
|
12743
13091
|
}
|
|
12744
13092
|
function detectFontFormat(data) {
|
|
@@ -13059,7 +13407,8 @@ function parseSeriesDataPoints(seriesNode, xmlLookup, colorParser) {
|
|
|
13059
13407
|
}).filter((dp) => dp !== void 0);
|
|
13060
13408
|
}
|
|
13061
13409
|
function parseSeriesDataLabels(seriesNode, xmlLookup) {
|
|
13062
|
-
const
|
|
13410
|
+
const dLblsNode = xmlLookup.getChildByLocalName(seriesNode, "dLbls");
|
|
13411
|
+
const dLblNodes = dLblsNode ? xmlLookup.getChildrenArrayByLocalName(dLblsNode, "dLbl") : xmlLookup.getChildrenArrayByLocalName(seriesNode, "dLbl");
|
|
13063
13412
|
if (dLblNodes.length === 0) {
|
|
13064
13413
|
return [];
|
|
13065
13414
|
}
|
|
@@ -13069,6 +13418,10 @@ function parseSeriesDataLabels(seriesNode, xmlLookup) {
|
|
|
13069
13418
|
if (idx === void 0) {
|
|
13070
13419
|
return void 0;
|
|
13071
13420
|
}
|
|
13421
|
+
const deleteNode = xmlLookup.getChildByLocalName(node, "delete");
|
|
13422
|
+
if (deleteNode?.["@_val"] === "1" || deleteNode?.["@_val"] === "true") {
|
|
13423
|
+
return { idx };
|
|
13424
|
+
}
|
|
13072
13425
|
const result = { idx };
|
|
13073
13426
|
const boolFields = [
|
|
13074
13427
|
["showVal", "showVal"],
|
|
@@ -13416,6 +13769,29 @@ function collectAxisTextValues(node, results) {
|
|
|
13416
13769
|
}
|
|
13417
13770
|
}
|
|
13418
13771
|
|
|
13772
|
+
// src/core/utils/chart-container-type-map.ts
|
|
13773
|
+
var CONTAINER_LOCAL_NAME_TO_TYPE = {
|
|
13774
|
+
barChart: "bar",
|
|
13775
|
+
bar3DChart: "bar3D",
|
|
13776
|
+
lineChart: "line",
|
|
13777
|
+
line3DChart: "line3D",
|
|
13778
|
+
pieChart: "pie",
|
|
13779
|
+
pie3DChart: "pie3D",
|
|
13780
|
+
ofPieChart: "ofPie",
|
|
13781
|
+
doughnutChart: "doughnut",
|
|
13782
|
+
areaChart: "area",
|
|
13783
|
+
area3DChart: "area3D",
|
|
13784
|
+
scatterChart: "scatter",
|
|
13785
|
+
bubbleChart: "bubble",
|
|
13786
|
+
radarChart: "radar",
|
|
13787
|
+
stockChart: "stock",
|
|
13788
|
+
surfaceChart: "surface",
|
|
13789
|
+
surface3DChart: "surface"
|
|
13790
|
+
};
|
|
13791
|
+
function chartContainerLocalNameToType(localName) {
|
|
13792
|
+
return CONTAINER_LOCAL_NAME_TO_TYPE[localName];
|
|
13793
|
+
}
|
|
13794
|
+
|
|
13419
13795
|
// src/core/utils/chart-cx-parser.ts
|
|
13420
13796
|
function extractCxSeriesColor(ser, xmlLookup) {
|
|
13421
13797
|
const spPr = xmlLookup.getChildByLocalName(ser, "spPr");
|
|
@@ -15171,10 +15547,10 @@ function applyBackgroundColorToCSld(cSld, backgroundColor) {
|
|
|
15171
15547
|
delete cSld["p:bg"];
|
|
15172
15548
|
return;
|
|
15173
15549
|
}
|
|
15174
|
-
const
|
|
15550
|
+
const hex8 = backgroundColor.replace(/^#/, "").toUpperCase();
|
|
15175
15551
|
cSld["p:bg"] = {
|
|
15176
15552
|
"p:bgPr": {
|
|
15177
|
-
"a:solidFill": { "a:srgbClr": { "@_val":
|
|
15553
|
+
"a:solidFill": { "a:srgbClr": { "@_val": hex8 } },
|
|
15178
15554
|
"a:effectLst": {}
|
|
15179
15555
|
}
|
|
15180
15556
|
};
|
|
@@ -15797,8 +16173,8 @@ function accentColor(index, themeColorMap) {
|
|
|
15797
16173
|
}
|
|
15798
16174
|
return DEFAULT_ACCENT_COLORS[index % DEFAULT_ACCENT_COLORS.length];
|
|
15799
16175
|
}
|
|
15800
|
-
function lighten(
|
|
15801
|
-
const parsed =
|
|
16176
|
+
function lighten(hex8, amount) {
|
|
16177
|
+
const parsed = hex8.replace("#", "");
|
|
15802
16178
|
const r = parseInt(parsed.substring(0, 2), 16);
|
|
15803
16179
|
const g = parseInt(parsed.substring(2, 4), 16);
|
|
15804
16180
|
const b = parseInt(parsed.substring(4, 6), 16);
|
|
@@ -18281,14 +18657,14 @@ function resolveLayoutCategory(layoutType) {
|
|
|
18281
18657
|
}
|
|
18282
18658
|
|
|
18283
18659
|
// src/core/utils/encryption-detection.ts
|
|
18284
|
-
var
|
|
18660
|
+
var OLE_MAGIC2 = new Uint8Array([208, 207, 17, 224, 161, 27, 26, 225]);
|
|
18285
18661
|
var ZIP_MAGIC = new Uint8Array([80, 75]);
|
|
18286
18662
|
function detectFileFormat(data) {
|
|
18287
18663
|
if (data.byteLength < 8) {
|
|
18288
18664
|
return { format: "unknown", encrypted: false };
|
|
18289
18665
|
}
|
|
18290
18666
|
const header = new Uint8Array(data, 0, 8);
|
|
18291
|
-
if (
|
|
18667
|
+
if (OLE_MAGIC2.every((byte, i) => header[i] === byte)) {
|
|
18292
18668
|
return { format: "ole", encrypted: true };
|
|
18293
18669
|
}
|
|
18294
18670
|
if (header[0] === ZIP_MAGIC[0] && header[1] === ZIP_MAGIC[1]) {
|
|
@@ -18304,207 +18680,6 @@ var EncryptedFileError = class extends Error {
|
|
|
18304
18680
|
}
|
|
18305
18681
|
};
|
|
18306
18682
|
|
|
18307
|
-
// src/core/utils/ole2-parser-types.ts
|
|
18308
|
-
var OLE_MAGIC2 = new Uint8Array([208, 207, 17, 224, 161, 27, 26, 225]);
|
|
18309
|
-
var ENDOFCHAIN = 4294967294;
|
|
18310
|
-
var FREESECT = 4294967295;
|
|
18311
|
-
var FATSECT = 4294967293;
|
|
18312
|
-
var MAXREGSECT = 4294967290;
|
|
18313
|
-
var ENTRY_TYPE_EMPTY = 0;
|
|
18314
|
-
var ENTRY_TYPE_STREAM = 2;
|
|
18315
|
-
var ENTRY_TYPE_ROOT = 5;
|
|
18316
|
-
var DIR_ENTRY_SIZE = 128;
|
|
18317
|
-
var Ole2ParseError = class extends Error {
|
|
18318
|
-
constructor(message) {
|
|
18319
|
-
super(message);
|
|
18320
|
-
this.name = "Ole2ParseError";
|
|
18321
|
-
}
|
|
18322
|
-
};
|
|
18323
|
-
|
|
18324
|
-
// src/core/utils/ole2-parser-read.ts
|
|
18325
|
-
function parseOle2(buffer) {
|
|
18326
|
-
const data = new Uint8Array(buffer);
|
|
18327
|
-
const view = new DataView(buffer);
|
|
18328
|
-
for (let i = 0; i < OLE_MAGIC2.length; i++) {
|
|
18329
|
-
if (data[i] !== OLE_MAGIC2[i]) {
|
|
18330
|
-
throw new Ole2ParseError("Not a valid OLE2 compound file");
|
|
18331
|
-
}
|
|
18332
|
-
}
|
|
18333
|
-
view.getUint16(24, true);
|
|
18334
|
-
const majorVersion = view.getUint16(26, true);
|
|
18335
|
-
const byteOrder = view.getUint16(28, true);
|
|
18336
|
-
if (byteOrder !== 65534) {
|
|
18337
|
-
throw new Ole2ParseError("Invalid byte order mark");
|
|
18338
|
-
}
|
|
18339
|
-
const sectorSizePower = view.getUint16(30, true);
|
|
18340
|
-
const miniSectorSizePower = view.getUint16(32, true);
|
|
18341
|
-
const sectorSize = 1 << sectorSizePower;
|
|
18342
|
-
const miniSectorSize = 1 << miniSectorSizePower;
|
|
18343
|
-
const totalFATSectors = view.getUint32(44, true);
|
|
18344
|
-
const firstDirectorySector = view.getUint32(48, true);
|
|
18345
|
-
const miniStreamCutoff = view.getUint32(56, true);
|
|
18346
|
-
const firstMiniFATSector = view.getUint32(60, true);
|
|
18347
|
-
const totalMiniFATSectors = view.getUint32(64, true);
|
|
18348
|
-
const firstDIFATSector = view.getUint32(68, true);
|
|
18349
|
-
const totalDIFATSectors = view.getUint32(72, true);
|
|
18350
|
-
function sectorOffset(sector) {
|
|
18351
|
-
return (sector + 1) * sectorSize;
|
|
18352
|
-
}
|
|
18353
|
-
function readSector(sector) {
|
|
18354
|
-
const offset = sectorOffset(sector);
|
|
18355
|
-
if (offset + sectorSize > data.length) {
|
|
18356
|
-
throw new Ole2ParseError(
|
|
18357
|
-
`Sector ${sector} at offset ${offset} exceeds file size ${data.length}`
|
|
18358
|
-
);
|
|
18359
|
-
}
|
|
18360
|
-
return data.subarray(offset, offset + sectorSize);
|
|
18361
|
-
}
|
|
18362
|
-
const fatSectors = [];
|
|
18363
|
-
for (let i = 0; i < 109 && fatSectors.length < totalFATSectors; i++) {
|
|
18364
|
-
const sector = view.getUint32(76 + i * 4, true);
|
|
18365
|
-
if (sector <= MAXREGSECT) {
|
|
18366
|
-
fatSectors.push(sector);
|
|
18367
|
-
}
|
|
18368
|
-
}
|
|
18369
|
-
let difatSector = firstDIFATSector;
|
|
18370
|
-
for (let d = 0; d < totalDIFATSectors && difatSector <= MAXREGSECT; d++) {
|
|
18371
|
-
const difatData = readSector(difatSector);
|
|
18372
|
-
const difatView = new DataView(difatData.buffer, difatData.byteOffset, difatData.byteLength);
|
|
18373
|
-
const entriesPerSector = (sectorSize - 4) / 4;
|
|
18374
|
-
for (let i = 0; i < entriesPerSector && fatSectors.length < totalFATSectors; i++) {
|
|
18375
|
-
const sector = difatView.getUint32(i * 4, true);
|
|
18376
|
-
if (sector <= MAXREGSECT) {
|
|
18377
|
-
fatSectors.push(sector);
|
|
18378
|
-
}
|
|
18379
|
-
}
|
|
18380
|
-
difatSector = difatView.getUint32(sectorSize - 4, true);
|
|
18381
|
-
}
|
|
18382
|
-
const fatEntries = [];
|
|
18383
|
-
for (const fatSector of fatSectors) {
|
|
18384
|
-
const fatData = readSector(fatSector);
|
|
18385
|
-
const fatView = new DataView(fatData.buffer, fatData.byteOffset, fatData.byteLength);
|
|
18386
|
-
for (let i = 0; i < sectorSize / 4; i++) {
|
|
18387
|
-
fatEntries.push(fatView.getUint32(i * 4, true));
|
|
18388
|
-
}
|
|
18389
|
-
}
|
|
18390
|
-
function readSectorChain(startSector) {
|
|
18391
|
-
const sectors = [];
|
|
18392
|
-
let current = startSector;
|
|
18393
|
-
const visited = /* @__PURE__ */ new Set();
|
|
18394
|
-
while (current <= MAXREGSECT) {
|
|
18395
|
-
if (visited.has(current)) {
|
|
18396
|
-
throw new Ole2ParseError(`Circular reference in FAT chain at sector ${current}`);
|
|
18397
|
-
}
|
|
18398
|
-
visited.add(current);
|
|
18399
|
-
sectors.push(readSector(current));
|
|
18400
|
-
current = fatEntries[current] ?? ENDOFCHAIN;
|
|
18401
|
-
}
|
|
18402
|
-
const totalLength = sectors.length * sectorSize;
|
|
18403
|
-
const result = new Uint8Array(totalLength);
|
|
18404
|
-
let offset = 0;
|
|
18405
|
-
for (const sector of sectors) {
|
|
18406
|
-
result.set(sector, offset);
|
|
18407
|
-
offset += sectorSize;
|
|
18408
|
-
}
|
|
18409
|
-
return result;
|
|
18410
|
-
}
|
|
18411
|
-
function readStream(startSector, size) {
|
|
18412
|
-
const raw = readSectorChain(startSector);
|
|
18413
|
-
return raw.subarray(0, Math.min(size, raw.length));
|
|
18414
|
-
}
|
|
18415
|
-
const miniFatEntries = [];
|
|
18416
|
-
if (firstMiniFATSector <= MAXREGSECT && totalMiniFATSectors > 0) {
|
|
18417
|
-
const miniFatRaw = readSectorChain(firstMiniFATSector);
|
|
18418
|
-
const miniFatView = new DataView(
|
|
18419
|
-
miniFatRaw.buffer,
|
|
18420
|
-
miniFatRaw.byteOffset,
|
|
18421
|
-
miniFatRaw.byteLength
|
|
18422
|
-
);
|
|
18423
|
-
for (let i = 0; i < miniFatRaw.length / 4; i++) {
|
|
18424
|
-
miniFatEntries.push(miniFatView.getUint32(i * 4, true));
|
|
18425
|
-
}
|
|
18426
|
-
}
|
|
18427
|
-
const dirRaw = readSectorChain(firstDirectorySector);
|
|
18428
|
-
const numEntries = Math.floor(dirRaw.length / DIR_ENTRY_SIZE);
|
|
18429
|
-
const entries = [];
|
|
18430
|
-
for (let i = 0; i < numEntries; i++) {
|
|
18431
|
-
const entryOffset = i * DIR_ENTRY_SIZE;
|
|
18432
|
-
const entryView = new DataView(dirRaw.buffer, dirRaw.byteOffset + entryOffset, DIR_ENTRY_SIZE);
|
|
18433
|
-
const nameLen = entryView.getUint16(64, true);
|
|
18434
|
-
const objectType = entryView.getUint8(66);
|
|
18435
|
-
if (objectType === ENTRY_TYPE_EMPTY) {
|
|
18436
|
-
continue;
|
|
18437
|
-
}
|
|
18438
|
-
const nameBytes = Math.max(0, nameLen - 2);
|
|
18439
|
-
let name = "";
|
|
18440
|
-
for (let j = 0; j < nameBytes; j += 2) {
|
|
18441
|
-
name += String.fromCharCode(entryView.getUint16(j, true));
|
|
18442
|
-
}
|
|
18443
|
-
const leftSiblingId = entryView.getUint32(68, true);
|
|
18444
|
-
const rightSiblingId = entryView.getUint32(72, true);
|
|
18445
|
-
const childId = entryView.getUint32(76, true);
|
|
18446
|
-
const startSector = entryView.getUint32(116, true);
|
|
18447
|
-
const sizeLow = entryView.getUint32(120, true);
|
|
18448
|
-
let size = sizeLow;
|
|
18449
|
-
if (majorVersion === 4) {
|
|
18450
|
-
entryView.getUint32(124, true);
|
|
18451
|
-
size = sizeLow;
|
|
18452
|
-
}
|
|
18453
|
-
entries.push({
|
|
18454
|
-
name,
|
|
18455
|
-
type: objectType,
|
|
18456
|
-
startSector,
|
|
18457
|
-
size,
|
|
18458
|
-
childId: childId === 4294967295 ? -1 : childId,
|
|
18459
|
-
leftSiblingId: leftSiblingId === 4294967295 ? -1 : leftSiblingId,
|
|
18460
|
-
rightSiblingId: rightSiblingId === 4294967295 ? -1 : rightSiblingId
|
|
18461
|
-
});
|
|
18462
|
-
}
|
|
18463
|
-
const rootEntry = entries.find((e) => e.type === ENTRY_TYPE_ROOT);
|
|
18464
|
-
let miniStreamData;
|
|
18465
|
-
if (rootEntry && rootEntry.startSector <= MAXREGSECT) {
|
|
18466
|
-
miniStreamData = readSectorChain(rootEntry.startSector);
|
|
18467
|
-
}
|
|
18468
|
-
function readMiniStream(startSector, size) {
|
|
18469
|
-
if (!miniStreamData) {
|
|
18470
|
-
throw new Ole2ParseError("Mini stream container not found");
|
|
18471
|
-
}
|
|
18472
|
-
const sectors = [];
|
|
18473
|
-
let current = startSector;
|
|
18474
|
-
const visited = /* @__PURE__ */ new Set();
|
|
18475
|
-
while (current <= MAXREGSECT) {
|
|
18476
|
-
if (visited.has(current)) {
|
|
18477
|
-
throw new Ole2ParseError(`Circular reference in mini FAT chain at sector ${current}`);
|
|
18478
|
-
}
|
|
18479
|
-
visited.add(current);
|
|
18480
|
-
const offset2 = current * miniSectorSize;
|
|
18481
|
-
sectors.push(miniStreamData.subarray(offset2, offset2 + miniSectorSize));
|
|
18482
|
-
current = miniFatEntries[current] ?? ENDOFCHAIN;
|
|
18483
|
-
}
|
|
18484
|
-
const totalLength = sectors.length * miniSectorSize;
|
|
18485
|
-
const result = new Uint8Array(totalLength);
|
|
18486
|
-
let offset = 0;
|
|
18487
|
-
for (const sector of sectors) {
|
|
18488
|
-
result.set(sector, offset);
|
|
18489
|
-
offset += miniSectorSize;
|
|
18490
|
-
}
|
|
18491
|
-
return result.subarray(0, Math.min(size, result.length));
|
|
18492
|
-
}
|
|
18493
|
-
function getStream(name) {
|
|
18494
|
-
const entry = entries.find(
|
|
18495
|
-
(e) => (e.type === ENTRY_TYPE_STREAM || e.type === ENTRY_TYPE_ROOT) && e.name === name
|
|
18496
|
-
);
|
|
18497
|
-
if (!entry) {
|
|
18498
|
-
return void 0;
|
|
18499
|
-
}
|
|
18500
|
-
if (entry.size < miniStreamCutoff && entry.type !== ENTRY_TYPE_ROOT) {
|
|
18501
|
-
return readMiniStream(entry.startSector, entry.size);
|
|
18502
|
-
}
|
|
18503
|
-
return readStream(entry.startSector, entry.size);
|
|
18504
|
-
}
|
|
18505
|
-
return { entries, getStream };
|
|
18506
|
-
}
|
|
18507
|
-
|
|
18508
18683
|
// src/core/utils/ole2-parser-write.ts
|
|
18509
18684
|
function compareDirEntryNames(a, b) {
|
|
18510
18685
|
if (a.length !== b.length) {
|
|
@@ -18551,7 +18726,7 @@ function writeInt32Sectors(outBytes, int32Data, firstSector, numSectors, sectorS
|
|
|
18551
18726
|
}
|
|
18552
18727
|
}
|
|
18553
18728
|
function writeHeader(outView, outBytes, params) {
|
|
18554
|
-
outBytes.set(
|
|
18729
|
+
outBytes.set(OLE_MAGIC, 0);
|
|
18555
18730
|
outView.setUint16(24, 62, true);
|
|
18556
18731
|
outView.setUint16(26, 3, true);
|
|
18557
18732
|
outView.setUint16(28, 65534, true);
|
|
@@ -21413,11 +21588,11 @@ async function repairPptx(buffer) {
|
|
|
21413
21588
|
}
|
|
21414
21589
|
|
|
21415
21590
|
// src/core/utils/theme-switching.ts
|
|
21416
|
-
function normalizeHex2(
|
|
21417
|
-
if (!
|
|
21591
|
+
function normalizeHex2(hex8) {
|
|
21592
|
+
if (!hex8) {
|
|
21418
21593
|
return "";
|
|
21419
21594
|
}
|
|
21420
|
-
return
|
|
21595
|
+
return hex8.replace(/^#/, "").toUpperCase().slice(0, 6);
|
|
21421
21596
|
}
|
|
21422
21597
|
function buildColorRemapTable(oldColorMap, newColorMap) {
|
|
21423
21598
|
const remap = /* @__PURE__ */ new Map();
|
|
@@ -21611,8 +21786,8 @@ function applyThemeToData(data, newColorScheme, newFontScheme, themeName) {
|
|
|
21611
21786
|
}
|
|
21612
21787
|
|
|
21613
21788
|
// src/core/utils/accessibility-checker.ts
|
|
21614
|
-
function parseHexColor(
|
|
21615
|
-
const cleaned =
|
|
21789
|
+
function parseHexColor(hex8) {
|
|
21790
|
+
const cleaned = hex8.replace(/^#/, "");
|
|
21616
21791
|
if (!/^[\da-fA-F]+$/.test(cleaned)) {
|
|
21617
21792
|
return null;
|
|
21618
21793
|
}
|
|
@@ -24912,6 +25087,37 @@ function ensureArray6(v) {
|
|
|
24912
25087
|
}
|
|
24913
25088
|
return Array.isArray(v) ? v : [v];
|
|
24914
25089
|
}
|
|
25090
|
+
function consolidateComboContainersInXml(plotArea, getLocalName) {
|
|
25091
|
+
const containerKeys = Object.keys(plotArea).filter((k) => getLocalName(k).endsWith("Chart"));
|
|
25092
|
+
if (containerKeys.length === 0) {
|
|
25093
|
+
return void 0;
|
|
25094
|
+
}
|
|
25095
|
+
const primaryKey = containerKeys[0];
|
|
25096
|
+
if (containerKeys.length === 1) {
|
|
25097
|
+
return primaryKey;
|
|
25098
|
+
}
|
|
25099
|
+
const primary = plotArea[primaryKey];
|
|
25100
|
+
if (!primary) {
|
|
25101
|
+
return primaryKey;
|
|
25102
|
+
}
|
|
25103
|
+
const serKey = findKey4(primary, "ser", getLocalName) ?? "c:ser";
|
|
25104
|
+
const allSeries = [];
|
|
25105
|
+
for (const key of containerKeys) {
|
|
25106
|
+
const container = plotArea[key];
|
|
25107
|
+
if (!container) {
|
|
25108
|
+
continue;
|
|
25109
|
+
}
|
|
25110
|
+
const containerSerKey = findKey4(container, "ser", getLocalName);
|
|
25111
|
+
if (containerSerKey) {
|
|
25112
|
+
allSeries.push(...ensureArray6(container[containerSerKey]));
|
|
25113
|
+
}
|
|
25114
|
+
if (key !== primaryKey) {
|
|
25115
|
+
delete plotArea[key];
|
|
25116
|
+
}
|
|
25117
|
+
}
|
|
25118
|
+
primary[serKey] = allSeries.length === 1 ? allSeries[0] : allSeries;
|
|
25119
|
+
return primaryKey;
|
|
25120
|
+
}
|
|
24915
25121
|
function effectiveContainers(series, chartLevelType) {
|
|
24916
25122
|
return series.map((s) => {
|
|
24917
25123
|
const t = s.seriesChartType ?? chartLevelType;
|
|
@@ -25363,6 +25569,146 @@ function applySeriesMarkerToXml(seriesNode, marker, getLocalName) {
|
|
|
25363
25569
|
insertOrdered2(seriesNode, "c:marker", built, getLocalName);
|
|
25364
25570
|
}
|
|
25365
25571
|
|
|
25572
|
+
// src/core/utils/chart-series-datalabel-serializer.ts
|
|
25573
|
+
function findKey9(obj, local, getLocalName) {
|
|
25574
|
+
return Object.keys(obj).find((k) => getLocalName(k) === local);
|
|
25575
|
+
}
|
|
25576
|
+
function boolVal2(on) {
|
|
25577
|
+
return { "@_val": on ? "1" : "0" };
|
|
25578
|
+
}
|
|
25579
|
+
var AFTER_DLBLS = /* @__PURE__ */ new Set(["cat", "val", "xVal", "yVal", "bubbleSize", "smooth", "extLst"]);
|
|
25580
|
+
var DLBLS_GROUP_ORDER = [
|
|
25581
|
+
"numFmt",
|
|
25582
|
+
"spPr",
|
|
25583
|
+
"txPr",
|
|
25584
|
+
"dLblPos",
|
|
25585
|
+
"showLegendKey",
|
|
25586
|
+
"showVal",
|
|
25587
|
+
"showCatName",
|
|
25588
|
+
"showSerName",
|
|
25589
|
+
"showPercent",
|
|
25590
|
+
"showBubbleSize",
|
|
25591
|
+
"separator",
|
|
25592
|
+
"showLeaderLines",
|
|
25593
|
+
"leaderLines"
|
|
25594
|
+
];
|
|
25595
|
+
function buildDLbl(existing, label, getLocalName) {
|
|
25596
|
+
const node = {};
|
|
25597
|
+
node["c:idx"] = { "@_val": String(label.idx) };
|
|
25598
|
+
const hasShow = label.showVal !== void 0 || label.showCatName !== void 0 || label.showSerName !== void 0 || label.showPercent !== void 0 || label.showLegendKey !== void 0 || label.showBubbleSize !== void 0;
|
|
25599
|
+
const hasContent = hasShow || label.position !== void 0 || label.text !== void 0;
|
|
25600
|
+
if (!hasContent) {
|
|
25601
|
+
node["c:delete"] = { "@_val": "1" };
|
|
25602
|
+
return node;
|
|
25603
|
+
}
|
|
25604
|
+
if (existing) {
|
|
25605
|
+
const layoutKey = findKey9(existing, "layout", getLocalName);
|
|
25606
|
+
if (layoutKey) {
|
|
25607
|
+
node[layoutKey] = existing[layoutKey];
|
|
25608
|
+
}
|
|
25609
|
+
}
|
|
25610
|
+
if (label.text !== void 0) {
|
|
25611
|
+
node["c:tx"] = {
|
|
25612
|
+
"c:rich": {
|
|
25613
|
+
"a:bodyPr": {},
|
|
25614
|
+
"a:lstStyle": {},
|
|
25615
|
+
"a:p": { "a:r": { "a:t": label.text } }
|
|
25616
|
+
}
|
|
25617
|
+
};
|
|
25618
|
+
} else if (existing) {
|
|
25619
|
+
const txKey = findKey9(existing, "tx", getLocalName);
|
|
25620
|
+
if (txKey) {
|
|
25621
|
+
node[txKey] = existing[txKey];
|
|
25622
|
+
}
|
|
25623
|
+
}
|
|
25624
|
+
if (existing) {
|
|
25625
|
+
for (const local of ["numFmt", "spPr", "txPr"]) {
|
|
25626
|
+
const k = findKey9(existing, local, getLocalName);
|
|
25627
|
+
if (k) {
|
|
25628
|
+
node[k] = existing[k];
|
|
25629
|
+
}
|
|
25630
|
+
}
|
|
25631
|
+
}
|
|
25632
|
+
if (label.position !== void 0) {
|
|
25633
|
+
node["c:dLblPos"] = { "@_val": label.position };
|
|
25634
|
+
}
|
|
25635
|
+
if (label.showLegendKey !== void 0) {
|
|
25636
|
+
node["c:showLegendKey"] = boolVal2(label.showLegendKey);
|
|
25637
|
+
}
|
|
25638
|
+
if (label.showVal !== void 0) {
|
|
25639
|
+
node["c:showVal"] = boolVal2(label.showVal);
|
|
25640
|
+
}
|
|
25641
|
+
if (label.showCatName !== void 0) {
|
|
25642
|
+
node["c:showCatName"] = boolVal2(label.showCatName);
|
|
25643
|
+
}
|
|
25644
|
+
if (label.showSerName !== void 0) {
|
|
25645
|
+
node["c:showSerName"] = boolVal2(label.showSerName);
|
|
25646
|
+
}
|
|
25647
|
+
if (label.showPercent !== void 0) {
|
|
25648
|
+
node["c:showPercent"] = boolVal2(label.showPercent);
|
|
25649
|
+
}
|
|
25650
|
+
if (label.showBubbleSize !== void 0) {
|
|
25651
|
+
node["c:showBubbleSize"] = boolVal2(label.showBubbleSize);
|
|
25652
|
+
}
|
|
25653
|
+
return node;
|
|
25654
|
+
}
|
|
25655
|
+
function applySeriesDataLabelsToXml(seriesNode, dataLabels, getLocalName) {
|
|
25656
|
+
const dLblsKey = findKey9(seriesNode, "dLbls", getLocalName);
|
|
25657
|
+
const labels = dataLabels ?? [];
|
|
25658
|
+
const existingByIdx = /* @__PURE__ */ new Map();
|
|
25659
|
+
let groupChildren = [];
|
|
25660
|
+
if (dLblsKey) {
|
|
25661
|
+
const dLbls = seriesNode[dLblsKey];
|
|
25662
|
+
const dLblKey = findKey9(dLbls, "dLbl", getLocalName);
|
|
25663
|
+
if (dLblKey) {
|
|
25664
|
+
const nodes = Array.isArray(dLbls[dLblKey]) ? dLbls[dLblKey] : [dLbls[dLblKey]];
|
|
25665
|
+
for (const node of nodes) {
|
|
25666
|
+
const idxKey = findKey9(node, "idx", getLocalName);
|
|
25667
|
+
const idxNode = idxKey ? node[idxKey] : void 0;
|
|
25668
|
+
const idx = idxNode ? Number.parseInt(String(idxNode["@_val"]), 10) : NaN;
|
|
25669
|
+
if (Number.isFinite(idx)) {
|
|
25670
|
+
existingByIdx.set(idx, node);
|
|
25671
|
+
}
|
|
25672
|
+
}
|
|
25673
|
+
}
|
|
25674
|
+
groupChildren = Object.keys(dLbls).filter((k) => getLocalName(k) !== "dLbl").map((k) => [k, dLbls[k]]);
|
|
25675
|
+
}
|
|
25676
|
+
if (labels.length === 0 && groupChildren.length === 0) {
|
|
25677
|
+
if (dLblsKey) {
|
|
25678
|
+
delete seriesNode[dLblsKey];
|
|
25679
|
+
}
|
|
25680
|
+
return;
|
|
25681
|
+
}
|
|
25682
|
+
const built = [...labels].sort((a, b) => a.idx - b.idx).map((label) => buildDLbl(existingByIdx.get(label.idx), label, getLocalName));
|
|
25683
|
+
const newDLbls = {};
|
|
25684
|
+
if (built.length > 0) {
|
|
25685
|
+
newDLbls["c:dLbl"] = built.length === 1 ? built[0] : built;
|
|
25686
|
+
}
|
|
25687
|
+
const ordered = [...groupChildren].sort((a, b) => {
|
|
25688
|
+
const ai = DLBLS_GROUP_ORDER.indexOf(getLocalName(a[0]));
|
|
25689
|
+
const bi = DLBLS_GROUP_ORDER.indexOf(getLocalName(b[0]));
|
|
25690
|
+
return (ai === -1 ? DLBLS_GROUP_ORDER.length : ai) - (bi === -1 ? DLBLS_GROUP_ORDER.length : bi);
|
|
25691
|
+
});
|
|
25692
|
+
for (const [k, v] of ordered) {
|
|
25693
|
+
newDLbls[k] = v;
|
|
25694
|
+
}
|
|
25695
|
+
if (dLblsKey) {
|
|
25696
|
+
seriesNode[dLblsKey] = newDLbls;
|
|
25697
|
+
return;
|
|
25698
|
+
}
|
|
25699
|
+
const keys = Object.keys(seriesNode);
|
|
25700
|
+
const beforeIdx = keys.findIndex((k) => AFTER_DLBLS.has(getLocalName(k)));
|
|
25701
|
+
const entries = keys.map((k) => [k, seriesNode[k]]);
|
|
25702
|
+
const at = beforeIdx === -1 ? entries.length : beforeIdx;
|
|
25703
|
+
entries.splice(at, 0, ["c:dLbls", newDLbls]);
|
|
25704
|
+
for (const k of keys) {
|
|
25705
|
+
delete seriesNode[k];
|
|
25706
|
+
}
|
|
25707
|
+
for (const [k, v] of entries) {
|
|
25708
|
+
seriesNode[k] = v;
|
|
25709
|
+
}
|
|
25710
|
+
}
|
|
25711
|
+
|
|
25366
25712
|
// src/core/utils/chart-trendline-serializer.ts
|
|
25367
25713
|
var TYPE_TO_OOXML = {
|
|
25368
25714
|
linear: "linear",
|
|
@@ -25372,7 +25718,7 @@ var TYPE_TO_OOXML = {
|
|
|
25372
25718
|
power: "power",
|
|
25373
25719
|
movingAvg: "movingAvg"
|
|
25374
25720
|
};
|
|
25375
|
-
function
|
|
25721
|
+
function findKey10(obj, local, getLocalName) {
|
|
25376
25722
|
return Object.keys(obj).find((k) => getLocalName(k) === local);
|
|
25377
25723
|
}
|
|
25378
25724
|
function ensureArray9(v) {
|
|
@@ -25389,10 +25735,10 @@ function buildSpPr(existing, color, getLocalName) {
|
|
|
25389
25735
|
return existing;
|
|
25390
25736
|
}
|
|
25391
25737
|
const spPr = existing ? { ...existing } : {};
|
|
25392
|
-
const lnKey =
|
|
25738
|
+
const lnKey = findKey10(spPr, "ln", getLocalName) ?? "a:ln";
|
|
25393
25739
|
const existingLn = spPr[lnKey] ?? {};
|
|
25394
|
-
const fillKey =
|
|
25395
|
-
const noFillKey =
|
|
25740
|
+
const fillKey = findKey10(existingLn, "solidFill", getLocalName) ?? "a:solidFill";
|
|
25741
|
+
const noFillKey = findKey10(existingLn, "noFill", getLocalName);
|
|
25396
25742
|
const ln = { ...existingLn };
|
|
25397
25743
|
if (noFillKey) {
|
|
25398
25744
|
delete ln[noFillKey];
|
|
@@ -25404,13 +25750,13 @@ function buildSpPr(existing, color, getLocalName) {
|
|
|
25404
25750
|
function buildTrendline(existing, t, getLocalName) {
|
|
25405
25751
|
const node = {};
|
|
25406
25752
|
if (existing) {
|
|
25407
|
-
const nameKey =
|
|
25753
|
+
const nameKey = findKey10(existing, "name", getLocalName);
|
|
25408
25754
|
if (nameKey) {
|
|
25409
25755
|
node["c:name"] = existing[nameKey];
|
|
25410
25756
|
}
|
|
25411
25757
|
}
|
|
25412
25758
|
const spPr = buildSpPr(
|
|
25413
|
-
existing ? existing[
|
|
25759
|
+
existing ? existing[findKey10(existing, "spPr", getLocalName) ?? ""] : void 0,
|
|
25414
25760
|
t.color,
|
|
25415
25761
|
getLocalName
|
|
25416
25762
|
);
|
|
@@ -25440,7 +25786,7 @@ function buildTrendline(existing, t, getLocalName) {
|
|
|
25440
25786
|
node["c:dispEq"] = { "@_val": "1" };
|
|
25441
25787
|
}
|
|
25442
25788
|
if (existing) {
|
|
25443
|
-
const lblKey =
|
|
25789
|
+
const lblKey = findKey10(existing, "trendlineLbl", getLocalName);
|
|
25444
25790
|
if (lblKey) {
|
|
25445
25791
|
node["c:trendlineLbl"] = existing[lblKey];
|
|
25446
25792
|
}
|
|
@@ -25448,7 +25794,7 @@ function buildTrendline(existing, t, getLocalName) {
|
|
|
25448
25794
|
return node;
|
|
25449
25795
|
}
|
|
25450
25796
|
function applySeriesTrendlinesToXml(seriesNode, trendlines, getLocalName) {
|
|
25451
|
-
const existingKey =
|
|
25797
|
+
const existingKey = findKey10(seriesNode, "trendline", getLocalName);
|
|
25452
25798
|
const existingNodes = existingKey ? ensureArray9(seriesNode[existingKey]) : [];
|
|
25453
25799
|
const built = trendlines.map((t, i) => buildTrendline(existingNodes[i], t, getLocalName));
|
|
25454
25800
|
if (existingKey) {
|
|
@@ -28658,8 +29004,8 @@ function buildTextRunEffectListXml(style) {
|
|
|
28658
29004
|
}
|
|
28659
29005
|
return effectLst;
|
|
28660
29006
|
}
|
|
28661
|
-
function buildShadowColorNode(
|
|
28662
|
-
const clr =
|
|
29007
|
+
function buildShadowColorNode(hex8, opacity) {
|
|
29008
|
+
const clr = hex8.replace("#", "");
|
|
28663
29009
|
const alpha = typeof opacity === "number" ? Math.round(opacity * 1e5) : void 0;
|
|
28664
29010
|
return {
|
|
28665
29011
|
"@_val": clr,
|
|
@@ -31902,8 +32248,8 @@ function updateCellTextStyleInRawXml(element, rowIndex, colIndex, styleUpdates)
|
|
|
31902
32248
|
}
|
|
31903
32249
|
}
|
|
31904
32250
|
if ("color" in styleUpdates && typeof styleUpdates.color === "string") {
|
|
31905
|
-
const
|
|
31906
|
-
rPr["a:solidFill"] = { "a:srgbClr": { "@_val":
|
|
32251
|
+
const hex8 = styleUpdates.color.replace("#", "");
|
|
32252
|
+
rPr["a:solidFill"] = { "a:srgbClr": { "@_val": hex8 } };
|
|
31907
32253
|
}
|
|
31908
32254
|
if ("align" in styleUpdates) {
|
|
31909
32255
|
const pPr = paragraph["a:pPr"] ?? {};
|
|
@@ -31943,8 +32289,8 @@ function updateCellTextStyleInRawXml(element, rowIndex, colIndex, styleUpdates)
|
|
|
31943
32289
|
}
|
|
31944
32290
|
}
|
|
31945
32291
|
if ("color" in styleUpdates && typeof styleUpdates.color === "string") {
|
|
31946
|
-
const
|
|
31947
|
-
endRPr["a:solidFill"] = { "a:srgbClr": { "@_val":
|
|
32292
|
+
const hex8 = styleUpdates.color.replace("#", "");
|
|
32293
|
+
endRPr["a:solidFill"] = { "a:srgbClr": { "@_val": hex8 } };
|
|
31948
32294
|
}
|
|
31949
32295
|
}
|
|
31950
32296
|
}
|
|
@@ -32223,6 +32569,10 @@ var PptxHandlerRuntime23 = class _PptxHandlerRuntime extends PptxHandlerRuntime2
|
|
|
32223
32569
|
if (!plotArea) {
|
|
32224
32570
|
continue;
|
|
32225
32571
|
}
|
|
32572
|
+
consolidateComboContainersInXml(
|
|
32573
|
+
plotArea,
|
|
32574
|
+
(key) => this.compatibilityService.getXmlLocalName(key)
|
|
32575
|
+
);
|
|
32226
32576
|
let chartTypeKey = Object.keys(plotArea).find(
|
|
32227
32577
|
(key) => this.compatibilityService.getXmlLocalName(key).endsWith("Chart")
|
|
32228
32578
|
);
|
|
@@ -32285,19 +32635,19 @@ var PptxHandlerRuntime23 = class _PptxHandlerRuntime extends PptxHandlerRuntime2
|
|
|
32285
32635
|
this.updateChartCacheValues(valNode, true, seriesData.values.map(String));
|
|
32286
32636
|
}
|
|
32287
32637
|
if (seriesData.color) {
|
|
32288
|
-
const
|
|
32638
|
+
const hex8 = seriesData.color.replace("#", "");
|
|
32289
32639
|
const spPr = this.xmlLookupService.getChildByLocalName(seriesNode, "spPr");
|
|
32290
32640
|
if (spPr) {
|
|
32291
32641
|
const solidFillKey = Object.keys(spPr).find(
|
|
32292
32642
|
(k) => this.compatibilityService.getXmlLocalName(k) === "solidFill"
|
|
32293
32643
|
) ?? "a:solidFill";
|
|
32294
|
-
spPr[solidFillKey] = { "a:srgbClr": { "@_val":
|
|
32644
|
+
spPr[solidFillKey] = { "a:srgbClr": { "@_val": hex8 } };
|
|
32295
32645
|
} else {
|
|
32296
32646
|
const spPrKey = Object.keys(seriesNode).find(
|
|
32297
32647
|
(k) => this.compatibilityService.getXmlLocalName(k) === "spPr"
|
|
32298
32648
|
) ?? "c:spPr";
|
|
32299
32649
|
seriesNode[spPrKey] = {
|
|
32300
|
-
"a:solidFill": { "a:srgbClr": { "@_val":
|
|
32650
|
+
"a:solidFill": { "a:srgbClr": { "@_val": hex8 } }
|
|
32301
32651
|
};
|
|
32302
32652
|
}
|
|
32303
32653
|
}
|
|
@@ -32329,6 +32679,13 @@ var PptxHandlerRuntime23 = class _PptxHandlerRuntime extends PptxHandlerRuntime2
|
|
|
32329
32679
|
(key) => this.compatibilityService.getXmlLocalName(key)
|
|
32330
32680
|
);
|
|
32331
32681
|
}
|
|
32682
|
+
if (seriesData.dataLabels !== void 0) {
|
|
32683
|
+
applySeriesDataLabelsToXml(
|
|
32684
|
+
seriesNode,
|
|
32685
|
+
seriesData.dataLabels,
|
|
32686
|
+
(key) => this.compatibilityService.getXmlLocalName(key)
|
|
32687
|
+
);
|
|
32688
|
+
}
|
|
32332
32689
|
}
|
|
32333
32690
|
if (chartData.series.length > seriesNodes.length) {
|
|
32334
32691
|
const templateSeries = seriesNodes.length > 0 ? seriesNodes[seriesNodes.length - 1] : void 0;
|
|
@@ -32858,36 +33215,131 @@ var PptxHandlerRuntime23 = class _PptxHandlerRuntime extends PptxHandlerRuntime2
|
|
|
32858
33215
|
}
|
|
32859
33216
|
};
|
|
32860
33217
|
|
|
32861
|
-
// src/core/core/runtime/smartart-
|
|
33218
|
+
// src/core/core/runtime/smartart-colors-builder.ts
|
|
32862
33219
|
function asObject(value) {
|
|
33220
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
33221
|
+
}
|
|
33222
|
+
function toArray(value) {
|
|
33223
|
+
if (Array.isArray(value)) {
|
|
33224
|
+
return value.filter((entry) => Boolean(asObject(entry)));
|
|
33225
|
+
}
|
|
33226
|
+
const obj = asObject(value);
|
|
33227
|
+
return obj ? [obj] : [];
|
|
33228
|
+
}
|
|
33229
|
+
function findKey11(obj, name, getLocalName) {
|
|
33230
|
+
return Object.keys(obj).find((k) => getLocalName(k) === name);
|
|
33231
|
+
}
|
|
33232
|
+
function hex7(value) {
|
|
33233
|
+
return value.replace("#", "");
|
|
33234
|
+
}
|
|
33235
|
+
var COLOR_LOCAL_NAMES = /* @__PURE__ */ new Set([
|
|
33236
|
+
"srgbClr",
|
|
33237
|
+
"schemeClr",
|
|
33238
|
+
"sysClr",
|
|
33239
|
+
"prstClr",
|
|
33240
|
+
"scrgbClr",
|
|
33241
|
+
"hslClr"
|
|
33242
|
+
]);
|
|
33243
|
+
function applyColorToList(list, value, getLocalName) {
|
|
33244
|
+
const colorKey = Object.keys(list).find((k) => COLOR_LOCAL_NAMES.has(getLocalName(k)));
|
|
33245
|
+
const srgb = { "@_val": hex7(value) };
|
|
33246
|
+
if (!colorKey) {
|
|
33247
|
+
list["a:srgbClr"] = srgb;
|
|
33248
|
+
return;
|
|
33249
|
+
}
|
|
33250
|
+
const existing = list[colorKey];
|
|
33251
|
+
const rest = Array.isArray(existing) ? existing.slice(1).filter((entry) => Boolean(asObject(entry))) : [];
|
|
33252
|
+
if (colorKey !== "a:srgbClr") {
|
|
33253
|
+
delete list[colorKey];
|
|
33254
|
+
}
|
|
33255
|
+
list["a:srgbClr"] = rest.length > 0 ? [srgb, ...rest] : srgb;
|
|
33256
|
+
}
|
|
33257
|
+
function applySmartArtColorTransform(colorsDef, transform, getLocalName) {
|
|
33258
|
+
if (!transform) {
|
|
33259
|
+
return false;
|
|
33260
|
+
}
|
|
33261
|
+
let mutated = false;
|
|
33262
|
+
if (transform.name && transform.name.length > 0) {
|
|
33263
|
+
if (colorsDef["@_title"] !== transform.name) {
|
|
33264
|
+
colorsDef["@_title"] = transform.name;
|
|
33265
|
+
mutated = true;
|
|
33266
|
+
}
|
|
33267
|
+
}
|
|
33268
|
+
const styleLblKey = findKey11(colorsDef, "styleLbl", getLocalName);
|
|
33269
|
+
if (!styleLblKey) {
|
|
33270
|
+
return mutated;
|
|
33271
|
+
}
|
|
33272
|
+
const labels = toArray(colorsDef[styleLblKey]);
|
|
33273
|
+
if (labels.length === 0) {
|
|
33274
|
+
return mutated;
|
|
33275
|
+
}
|
|
33276
|
+
let fillIndex = 0;
|
|
33277
|
+
let lineIndex = 0;
|
|
33278
|
+
for (const label of labels) {
|
|
33279
|
+
const fillKey = findKey11(label, "fillClrLst", getLocalName);
|
|
33280
|
+
if (fillKey) {
|
|
33281
|
+
const value = transform.fillColors[fillIndex++];
|
|
33282
|
+
const list = asObject(label[fillKey]);
|
|
33283
|
+
if (list && value) {
|
|
33284
|
+
applyColorToList(list, value, getLocalName);
|
|
33285
|
+
mutated = true;
|
|
33286
|
+
}
|
|
33287
|
+
}
|
|
33288
|
+
const lineKey = findKey11(label, "linClrLst", getLocalName);
|
|
33289
|
+
if (lineKey) {
|
|
33290
|
+
const value = transform.lineColors[lineIndex++];
|
|
33291
|
+
const list = asObject(label[lineKey]);
|
|
33292
|
+
if (list && value) {
|
|
33293
|
+
applyColorToList(list, value, getLocalName);
|
|
33294
|
+
mutated = true;
|
|
33295
|
+
}
|
|
33296
|
+
}
|
|
33297
|
+
}
|
|
33298
|
+
return mutated;
|
|
33299
|
+
}
|
|
33300
|
+
|
|
33301
|
+
// src/core/core/runtime/smartart-quickstyle-builder.ts
|
|
33302
|
+
function applySmartArtQuickStyle(styleDef, quickStyle) {
|
|
33303
|
+
if (!quickStyle || !quickStyle.name || quickStyle.name.length === 0) {
|
|
33304
|
+
return false;
|
|
33305
|
+
}
|
|
33306
|
+
if (styleDef["@_title"] === quickStyle.name) {
|
|
33307
|
+
return false;
|
|
33308
|
+
}
|
|
33309
|
+
styleDef["@_title"] = quickStyle.name;
|
|
33310
|
+
return true;
|
|
33311
|
+
}
|
|
33312
|
+
|
|
33313
|
+
// src/core/core/runtime/smartart-save-chrome.ts
|
|
33314
|
+
function asObject2(value) {
|
|
32863
33315
|
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
32864
33316
|
}
|
|
32865
33317
|
function applySmartArtChrome(dataModel, chrome, getLocalName) {
|
|
32866
33318
|
if (!chrome || !chrome.backgroundColor && !chrome.outlineColor && (chrome.outlineWidth === null || chrome.outlineWidth === void 0)) {
|
|
32867
33319
|
return;
|
|
32868
33320
|
}
|
|
32869
|
-
const
|
|
33321
|
+
const findKey12 = (obj, name) => Object.keys(obj).find((k) => getLocalName(k) === name);
|
|
32870
33322
|
if (chrome.backgroundColor) {
|
|
32871
|
-
const
|
|
32872
|
-
const bgKey =
|
|
32873
|
-
const bg =
|
|
32874
|
-
const fillKey =
|
|
32875
|
-
bg[fillKey] = { "a:srgbClr": { "@_val":
|
|
33323
|
+
const hex8 = chrome.backgroundColor.replace("#", "");
|
|
33324
|
+
const bgKey = findKey12(dataModel, "bg") ?? "dgm:bg";
|
|
33325
|
+
const bg = asObject2(dataModel[bgKey]);
|
|
33326
|
+
const fillKey = findKey12(bg, "solidFill") ?? "a:solidFill";
|
|
33327
|
+
bg[fillKey] = { "a:srgbClr": { "@_val": hex8 } };
|
|
32876
33328
|
dataModel[bgKey] = bg;
|
|
32877
33329
|
}
|
|
32878
33330
|
const hasOutlineWidth = chrome.outlineWidth !== null && chrome.outlineWidth !== void 0;
|
|
32879
33331
|
if (chrome.outlineColor || hasOutlineWidth) {
|
|
32880
|
-
const wholeKey =
|
|
32881
|
-
const whole =
|
|
32882
|
-
const lnKey =
|
|
32883
|
-
const ln =
|
|
33332
|
+
const wholeKey = findKey12(dataModel, "whole") ?? "dgm:whole";
|
|
33333
|
+
const whole = asObject2(dataModel[wholeKey]);
|
|
33334
|
+
const lnKey = findKey12(whole, "ln") ?? "a:ln";
|
|
33335
|
+
const ln = asObject2(whole[lnKey]);
|
|
32884
33336
|
if (hasOutlineWidth) {
|
|
32885
33337
|
ln["@_w"] = String(Math.round(chrome.outlineWidth * 12700));
|
|
32886
33338
|
}
|
|
32887
33339
|
if (chrome.outlineColor) {
|
|
32888
|
-
const
|
|
32889
|
-
const fillKey =
|
|
32890
|
-
ln[fillKey] = { "a:srgbClr": { "@_val":
|
|
33340
|
+
const hex8 = chrome.outlineColor.replace("#", "");
|
|
33341
|
+
const fillKey = findKey12(ln, "solidFill") ?? "a:solidFill";
|
|
33342
|
+
ln[fillKey] = { "a:srgbClr": { "@_val": hex8 } };
|
|
32891
33343
|
}
|
|
32892
33344
|
whole[lnKey] = ln;
|
|
32893
33345
|
dataModel[wholeKey] = whole;
|
|
@@ -32922,10 +33374,56 @@ function buildPointText(text) {
|
|
|
32922
33374
|
}
|
|
32923
33375
|
};
|
|
32924
33376
|
}
|
|
32925
|
-
function
|
|
33377
|
+
function joinRunText(runs) {
|
|
33378
|
+
return (runs ?? []).map((run) => run.text).join("");
|
|
33379
|
+
}
|
|
33380
|
+
function buildMultiRunParagraph(runs) {
|
|
33381
|
+
const runObjects = runs.map((run) => {
|
|
33382
|
+
const rObj = {};
|
|
33383
|
+
rObj["a:rPr"] = run.rPr ?? { "@_lang": "en-US", "@_dirty": "0" };
|
|
33384
|
+
rObj["a:t"] = run.text;
|
|
33385
|
+
return rObj;
|
|
33386
|
+
});
|
|
33387
|
+
return { "a:r": runObjects.length === 1 ? runObjects[0] : runObjects };
|
|
33388
|
+
}
|
|
33389
|
+
function shouldRebuildFromRuns(node) {
|
|
33390
|
+
const runs = node.runs;
|
|
33391
|
+
if (!runs || runs.length === 0) {
|
|
33392
|
+
return false;
|
|
33393
|
+
}
|
|
33394
|
+
const hasRichRun = runs.length > 1 || Boolean(runs[0]?.rPr);
|
|
33395
|
+
if (!hasRichRun) {
|
|
33396
|
+
return false;
|
|
33397
|
+
}
|
|
33398
|
+
return joinRunText(runs) === node.text;
|
|
33399
|
+
}
|
|
33400
|
+
function buildPointFromRuns(runs) {
|
|
33401
|
+
return {
|
|
33402
|
+
"a:bodyPr": {},
|
|
33403
|
+
"a:lstStyle": {},
|
|
33404
|
+
"a:p": buildMultiRunParagraph(runs)
|
|
33405
|
+
};
|
|
33406
|
+
}
|
|
33407
|
+
function applyRunsToExistingBody(pt2, tKey, runs) {
|
|
33408
|
+
const body = pt2[tKey];
|
|
33409
|
+
if (!body || typeof body !== "object" || Array.isArray(body)) {
|
|
33410
|
+
pt2[tKey] = buildPointFromRuns(runs);
|
|
33411
|
+
return;
|
|
33412
|
+
}
|
|
33413
|
+
const bodyObj = body;
|
|
33414
|
+
const pKey = Object.keys(bodyObj).find((k) => stripPrefix(k) === "p");
|
|
33415
|
+
bodyObj[pKey ?? "a:p"] = buildMultiRunParagraph(runs);
|
|
33416
|
+
}
|
|
33417
|
+
function applyTextToExistingPoint(pt2, node) {
|
|
33418
|
+
const text = node.text;
|
|
33419
|
+
const rebuildFromRuns = shouldRebuildFromRuns(node);
|
|
32926
33420
|
const tKey = Object.keys(pt2).find((k) => stripPrefix(k) === "t");
|
|
32927
33421
|
if (!tKey) {
|
|
32928
|
-
pt2["dgm:t"] = buildPointText(text);
|
|
33422
|
+
pt2["dgm:t"] = rebuildFromRuns ? buildPointFromRuns(node.runs) : buildPointText(text);
|
|
33423
|
+
return;
|
|
33424
|
+
}
|
|
33425
|
+
if (rebuildFromRuns) {
|
|
33426
|
+
applyRunsToExistingBody(pt2, tKey, node.runs);
|
|
32929
33427
|
return;
|
|
32930
33428
|
}
|
|
32931
33429
|
const body = pt2[tKey];
|
|
@@ -32986,7 +33484,7 @@ function mergeSmartArtPointXml(existingPts, nodes) {
|
|
|
32986
33484
|
if (!desired) {
|
|
32987
33485
|
continue;
|
|
32988
33486
|
}
|
|
32989
|
-
applyTextToExistingPoint(pt2, desired
|
|
33487
|
+
applyTextToExistingPoint(pt2, desired);
|
|
32990
33488
|
seenContentIds.add(modelId);
|
|
32991
33489
|
merged.push(pt2);
|
|
32992
33490
|
}
|
|
@@ -32999,7 +33497,7 @@ function mergeSmartArtPointXml(existingPts, nodes) {
|
|
|
32999
33497
|
if (node.nodeType && !NON_CONTENT_POINT_TYPES.has(node.nodeType)) {
|
|
33000
33498
|
ptNode["@_type"] = node.nodeType;
|
|
33001
33499
|
}
|
|
33002
|
-
ptNode["dgm:t"] = buildPointText(node.text);
|
|
33500
|
+
ptNode["dgm:t"] = shouldRebuildFromRuns(node) ? buildPointFromRuns(node.runs) : buildPointText(node.text);
|
|
33003
33501
|
merged.push(ptNode);
|
|
33004
33502
|
}
|
|
33005
33503
|
return merged;
|
|
@@ -33108,9 +33606,83 @@ var PptxHandlerRuntime24 = class _PptxHandlerRuntime extends PptxHandlerRuntime2
|
|
|
33108
33606
|
} catch (e) {
|
|
33109
33607
|
console.warn(`Failed to save SmartArt data at ${dataPartPath}:`, e);
|
|
33110
33608
|
}
|
|
33609
|
+
await this.regenerateSmartArtColorPart(slidePath, smartArtData);
|
|
33610
|
+
await this.regenerateSmartArtQuickStylePart(slidePath, smartArtData);
|
|
33111
33611
|
}
|
|
33112
33612
|
this.pendingSmartArtUpdates = void 0;
|
|
33113
33613
|
}
|
|
33614
|
+
/**
|
|
33615
|
+
* Merge the in-memory colour transform back into `ppt/diagrams/colors*.xml`.
|
|
33616
|
+
*
|
|
33617
|
+
* Resolves the part via the SmartArt `colorsRelId` relationship alongside
|
|
33618
|
+
* the data part, merges surgically (preserving unknown content), and skips
|
|
33619
|
+
* gracefully when the rel or part is absent. No-op when the in-memory data
|
|
33620
|
+
* carries no colour transform.
|
|
33621
|
+
*/
|
|
33622
|
+
async regenerateSmartArtColorPart(slidePath, smartArtData) {
|
|
33623
|
+
const transform = smartArtData?.colorTransform;
|
|
33624
|
+
if (!smartArtData?.colorsRelId || !transform) {
|
|
33625
|
+
return;
|
|
33626
|
+
}
|
|
33627
|
+
await this.mergeSmartArtDiagramPart(
|
|
33628
|
+
slidePath,
|
|
33629
|
+
smartArtData.colorsRelId,
|
|
33630
|
+
"colorsDef",
|
|
33631
|
+
"colours",
|
|
33632
|
+
(colorsDef) => applySmartArtColorTransform(
|
|
33633
|
+
colorsDef,
|
|
33634
|
+
transform,
|
|
33635
|
+
(k) => this.compatibilityService.getXmlLocalName(k)
|
|
33636
|
+
)
|
|
33637
|
+
);
|
|
33638
|
+
}
|
|
33639
|
+
/**
|
|
33640
|
+
* Merge the in-memory quick style back into `ppt/diagrams/quickStyles*.xml`.
|
|
33641
|
+
*
|
|
33642
|
+
* Resolves the part via the SmartArt `styleRelId` relationship, merges
|
|
33643
|
+
* surgically, and skips gracefully when the rel or part is absent. No-op
|
|
33644
|
+
* when the in-memory data carries no quick style.
|
|
33645
|
+
*/
|
|
33646
|
+
async regenerateSmartArtQuickStylePart(slidePath, smartArtData) {
|
|
33647
|
+
const quickStyle = smartArtData?.quickStyle;
|
|
33648
|
+
if (!smartArtData?.styleRelId || !quickStyle) {
|
|
33649
|
+
return;
|
|
33650
|
+
}
|
|
33651
|
+
await this.mergeSmartArtDiagramPart(
|
|
33652
|
+
slidePath,
|
|
33653
|
+
smartArtData.styleRelId,
|
|
33654
|
+
"styleDef",
|
|
33655
|
+
"quick style",
|
|
33656
|
+
(styleDef) => applySmartArtQuickStyle(styleDef, quickStyle)
|
|
33657
|
+
);
|
|
33658
|
+
}
|
|
33659
|
+
/**
|
|
33660
|
+
* Read a SmartArt diagram part by slide relationship id, locate its root
|
|
33661
|
+
* definition element by local name, apply a surgical merge callback, and
|
|
33662
|
+
* write the part back only when the callback reports a change. Skips
|
|
33663
|
+
* gracefully when the rel, part, or root element is absent.
|
|
33664
|
+
*/
|
|
33665
|
+
async mergeSmartArtDiagramPart(slidePath, relId, defLocalName, label, merge) {
|
|
33666
|
+
const relationships = this.slideRelsMap.get(slidePath);
|
|
33667
|
+
const target = relationships?.get(relId);
|
|
33668
|
+
if (!target) {
|
|
33669
|
+
return;
|
|
33670
|
+
}
|
|
33671
|
+
const partPath = this.resolveImagePath(slidePath, target);
|
|
33672
|
+
const existingXml = await this.zip.file(partPath)?.async("string");
|
|
33673
|
+
if (!existingXml) {
|
|
33674
|
+
return;
|
|
33675
|
+
}
|
|
33676
|
+
try {
|
|
33677
|
+
const parsed = this.parser.parse(existingXml);
|
|
33678
|
+
const def = this.xmlLookupService.getChildByLocalName(parsed, defLocalName);
|
|
33679
|
+
if (def && merge(def)) {
|
|
33680
|
+
this.zip.file(partPath, this.builder.build(parsed));
|
|
33681
|
+
}
|
|
33682
|
+
} catch (e) {
|
|
33683
|
+
console.warn(`Failed to save SmartArt ${label} at ${partPath}:`, e);
|
|
33684
|
+
}
|
|
33685
|
+
}
|
|
33114
33686
|
/**
|
|
33115
33687
|
* Find the slide path for an element by scanning the slideMap.
|
|
33116
33688
|
*/
|
|
@@ -33142,10 +33714,10 @@ var PptxHandlerRuntime24 = class _PptxHandlerRuntime extends PptxHandlerRuntime2
|
|
|
33142
33714
|
}
|
|
33143
33715
|
const cSld = root["p:cSld"] || {};
|
|
33144
33716
|
if (notesMaster.backgroundColor) {
|
|
33145
|
-
const
|
|
33717
|
+
const hex8 = notesMaster.backgroundColor.replace("#", "");
|
|
33146
33718
|
cSld["p:bg"] = {
|
|
33147
33719
|
"p:bgPr": {
|
|
33148
|
-
"a:solidFill": { "a:srgbClr": { "@_val":
|
|
33720
|
+
"a:solidFill": { "a:srgbClr": { "@_val": hex8 } },
|
|
33149
33721
|
"a:effectLst": {}
|
|
33150
33722
|
}
|
|
33151
33723
|
};
|
|
@@ -33178,10 +33750,10 @@ var PptxHandlerRuntime24 = class _PptxHandlerRuntime extends PptxHandlerRuntime2
|
|
|
33178
33750
|
}
|
|
33179
33751
|
const cSld = root["p:cSld"] || {};
|
|
33180
33752
|
if (handoutMaster.backgroundColor) {
|
|
33181
|
-
const
|
|
33753
|
+
const hex8 = handoutMaster.backgroundColor.replace("#", "");
|
|
33182
33754
|
cSld["p:bg"] = {
|
|
33183
33755
|
"p:bgPr": {
|
|
33184
|
-
"a:solidFill": { "a:srgbClr": { "@_val":
|
|
33756
|
+
"a:solidFill": { "a:srgbClr": { "@_val": hex8 } },
|
|
33185
33757
|
"a:effectLst": {}
|
|
33186
33758
|
}
|
|
33187
33759
|
};
|
|
@@ -35631,8 +36203,8 @@ var PptxHandlerRuntime34 = class extends PptxHandlerRuntime33 {
|
|
|
35631
36203
|
*/
|
|
35632
36204
|
buildClrSchemeObject(schemeName, colorMap) {
|
|
35633
36205
|
const slot = (key) => {
|
|
35634
|
-
const
|
|
35635
|
-
const srgb =
|
|
36206
|
+
const hex8 = String(colorMap[key] || "").replace(/^#/, "");
|
|
36207
|
+
const srgb = hex8.length === 6 ? hex8.toUpperCase() : "000000";
|
|
35636
36208
|
return { "a:srgbClr": { "@_val": srgb } };
|
|
35637
36209
|
};
|
|
35638
36210
|
return {
|
|
@@ -42411,8 +42983,8 @@ var PptxHandlerRuntime66 = class extends PptxHandlerRuntime65 {
|
|
|
42411
42983
|
/**
|
|
42412
42984
|
* Build an OOXML colour node (`a:srgbClr`) from a hex string.
|
|
42413
42985
|
*/
|
|
42414
|
-
buildSrgbClrNode(
|
|
42415
|
-
const clean =
|
|
42986
|
+
buildSrgbClrNode(hex8) {
|
|
42987
|
+
const clean = hex8.replace(/^#/, "").toUpperCase();
|
|
42416
42988
|
return { "a:srgbClr": { "@_val": clean } };
|
|
42417
42989
|
}
|
|
42418
42990
|
/**
|
|
@@ -42835,6 +43407,45 @@ var PptxHandlerRuntime68 = class extends PptxHandlerRuntime67 {
|
|
|
42835
43407
|
}
|
|
42836
43408
|
}
|
|
42837
43409
|
}
|
|
43410
|
+
/**
|
|
43411
|
+
* Extract the per-run text + run-properties of a SmartArt content point's
|
|
43412
|
+
* first paragraph (`dgm:t/a:p/a:r`).
|
|
43413
|
+
*
|
|
43414
|
+
* Each `a:r` yields one {@link PptxSmartArtTextRun} carrying its joined
|
|
43415
|
+
* `a:t` text and a verbatim copy of its `a:rPr` properties (when present).
|
|
43416
|
+
* Only the first paragraph is captured: SmartArt content points are
|
|
43417
|
+
* single-paragraph in practice, and the round-trip save path rebuilds a
|
|
43418
|
+
* single paragraph from these runs. Returns undefined when there is fewer
|
|
43419
|
+
* than one run worth preserving (a single run is still returned so per-run
|
|
43420
|
+
* formatting like a bold sole run survives).
|
|
43421
|
+
*/
|
|
43422
|
+
extractSmartArtNodeRuns(point) {
|
|
43423
|
+
const tBody = this.xmlLookupService.getChildByLocalName(point, "t");
|
|
43424
|
+
if (!tBody) {
|
|
43425
|
+
return void 0;
|
|
43426
|
+
}
|
|
43427
|
+
const paragraph = this.xmlLookupService.getChildrenArrayByLocalName(tBody, "p")[0];
|
|
43428
|
+
if (!paragraph) {
|
|
43429
|
+
return void 0;
|
|
43430
|
+
}
|
|
43431
|
+
const runNodes = this.xmlLookupService.getChildrenArrayByLocalName(paragraph, "r");
|
|
43432
|
+
if (runNodes.length === 0) {
|
|
43433
|
+
return void 0;
|
|
43434
|
+
}
|
|
43435
|
+
const runs = [];
|
|
43436
|
+
for (const run of runNodes) {
|
|
43437
|
+
const textValues = [];
|
|
43438
|
+
this.collectLocalTextValues(run, "t", textValues);
|
|
43439
|
+
const text = textValues.join("");
|
|
43440
|
+
const rPrNode = this.xmlLookupService.getChildByLocalName(run, "rPr");
|
|
43441
|
+
const entry = { text };
|
|
43442
|
+
if (rPrNode) {
|
|
43443
|
+
entry.rPr = JSON.parse(JSON.stringify(rPrNode));
|
|
43444
|
+
}
|
|
43445
|
+
runs.push(entry);
|
|
43446
|
+
}
|
|
43447
|
+
return runs.length > 0 ? runs : void 0;
|
|
43448
|
+
}
|
|
42838
43449
|
/**
|
|
42839
43450
|
* Parse background and outline chrome from `dgm:bg` and `dgm:whole`.
|
|
42840
43451
|
*/
|
|
@@ -43138,11 +43749,13 @@ var PptxHandlerRuntime70 = class _PptxHandlerRuntime extends PptxHandlerRuntime6
|
|
|
43138
43749
|
if (!resolvedText) {
|
|
43139
43750
|
return null;
|
|
43140
43751
|
}
|
|
43752
|
+
const runs = this.extractSmartArtNodeRuns(point);
|
|
43141
43753
|
return {
|
|
43142
43754
|
id: pointId,
|
|
43143
43755
|
text: resolvedText.trim(),
|
|
43144
43756
|
parentId: parentByNodeId.get(pointId),
|
|
43145
|
-
nodeType
|
|
43757
|
+
nodeType,
|
|
43758
|
+
runs
|
|
43146
43759
|
};
|
|
43147
43760
|
}).filter((entry) => Boolean(entry)).slice(0, MAX_SMARTART_NODES);
|
|
43148
43761
|
if (nodes.length === 0) {
|
|
@@ -43860,11 +44473,11 @@ var PptxHandlerRuntime74 = class extends PptxHandlerRuntime73 {
|
|
|
43860
44473
|
} else if (localName === "srgbClr") {
|
|
43861
44474
|
const items = Array.isArray(value) ? value : [value];
|
|
43862
44475
|
for (const item of items) {
|
|
43863
|
-
const
|
|
44476
|
+
const hex8 = String(
|
|
43864
44477
|
typeof item === "object" && item !== null ? item["@_val"] : item ?? ""
|
|
43865
44478
|
).trim();
|
|
43866
|
-
if (
|
|
43867
|
-
output.push(
|
|
44479
|
+
if (hex8.length > 0) {
|
|
44480
|
+
output.push(hex8.startsWith("#") ? hex8 : `#${hex8}`);
|
|
43868
44481
|
}
|
|
43869
44482
|
}
|
|
43870
44483
|
}
|
|
@@ -43932,9 +44545,10 @@ var PptxHandlerRuntime75 = class extends PptxHandlerRuntime74 {
|
|
|
43932
44545
|
return void 0;
|
|
43933
44546
|
}
|
|
43934
44547
|
const chartType = this.detectChartType(plotArea);
|
|
43935
|
-
const
|
|
44548
|
+
const chartContainerKeys = Object.keys(plotArea).filter(
|
|
43936
44549
|
(key) => this.compatibilityService.getXmlLocalName(key).endsWith("Chart")
|
|
43937
44550
|
);
|
|
44551
|
+
const seriesContainerKey = chartContainerKeys[0];
|
|
43938
44552
|
if (!seriesContainerKey) {
|
|
43939
44553
|
return this.parseCxChart(
|
|
43940
44554
|
plotArea,
|
|
@@ -43946,19 +44560,14 @@ var PptxHandlerRuntime75 = class extends PptxHandlerRuntime74 {
|
|
|
43946
44560
|
);
|
|
43947
44561
|
}
|
|
43948
44562
|
const seriesContainer = plotArea[seriesContainerKey];
|
|
43949
|
-
const
|
|
43950
|
-
|
|
44563
|
+
const { categories, series } = this.parseAllChartContainers(
|
|
44564
|
+
plotArea,
|
|
44565
|
+
chartContainerKeys,
|
|
44566
|
+
chartType
|
|
44567
|
+
);
|
|
44568
|
+
if (series.length === 0) {
|
|
43951
44569
|
return void 0;
|
|
43952
44570
|
}
|
|
43953
|
-
const categoriesFromFirstSeries = this.extractChartPointValues(
|
|
43954
|
-
this.xmlLookupService.getChildByLocalName(seriesList[0], "cat"),
|
|
43955
|
-
false
|
|
43956
|
-
);
|
|
43957
|
-
const categories = categoriesFromFirstSeries.length ? categoriesFromFirstSeries : this.extractChartPointValues(
|
|
43958
|
-
this.xmlLookupService.getChildByLocalName(seriesList[0], "xVal"),
|
|
43959
|
-
false
|
|
43960
|
-
);
|
|
43961
|
-
const series = this.buildChartSeries(seriesList, categories);
|
|
43962
44571
|
const titleNode = this.xmlLookupService.getChildByLocalName(chartRoot, "title");
|
|
43963
44572
|
const titleTextValues = [];
|
|
43964
44573
|
this.collectLocalTextValues(titleNode, "t", titleTextValues);
|
|
@@ -44057,6 +44666,49 @@ var PptxHandlerRuntime75 = class extends PptxHandlerRuntime74 {
|
|
|
44057
44666
|
...clrMapOvr ? { clrMapOvr } : {}
|
|
44058
44667
|
};
|
|
44059
44668
|
}
|
|
44669
|
+
/**
|
|
44670
|
+
* Parse every chart-type container in the plot area into a single flat
|
|
44671
|
+
* series list plus a shared category list.
|
|
44672
|
+
*
|
|
44673
|
+
* For a single-type chart this parses the one container exactly as before.
|
|
44674
|
+
* For a combo chart (multiple `c:*Chart` siblings) each container's series
|
|
44675
|
+
* are parsed and tagged with the container's chart type via
|
|
44676
|
+
* {@link PptxChartSeries.seriesChartType}, so the combo serializer can
|
|
44677
|
+
* re-emit each series under the correct container on save. Series keep the
|
|
44678
|
+
* document order of their containers.
|
|
44679
|
+
*
|
|
44680
|
+
* @param plotArea - The `c:plotArea` XML object.
|
|
44681
|
+
* @param containerKeys - All chart-type container keys, in document order.
|
|
44682
|
+
* @param chartLevelType - The detected chart-level type. When this is
|
|
44683
|
+
* `combo`, each series is tagged with its own container type; otherwise no
|
|
44684
|
+
* per-series type is set (the chart-level type applies to every series).
|
|
44685
|
+
* @returns The merged categories and series.
|
|
44686
|
+
*/
|
|
44687
|
+
parseAllChartContainers(plotArea, containerKeys, chartLevelType) {
|
|
44688
|
+
const isCombo = chartLevelType === "combo";
|
|
44689
|
+
let categories = [];
|
|
44690
|
+
const series = [];
|
|
44691
|
+
for (const containerKey of containerKeys) {
|
|
44692
|
+
const container = plotArea[containerKey];
|
|
44693
|
+
const seriesList = this.xmlLookupService.getChildrenArrayByLocalName(container, "ser");
|
|
44694
|
+
if (seriesList.length === 0) {
|
|
44695
|
+
continue;
|
|
44696
|
+
}
|
|
44697
|
+
if (categories.length === 0) {
|
|
44698
|
+
const fromCat = this.extractChartPointValues(
|
|
44699
|
+
this.xmlLookupService.getChildByLocalName(seriesList[0], "cat"),
|
|
44700
|
+
false
|
|
44701
|
+
);
|
|
44702
|
+
categories = fromCat.length ? fromCat : this.extractChartPointValues(
|
|
44703
|
+
this.xmlLookupService.getChildByLocalName(seriesList[0], "xVal"),
|
|
44704
|
+
false
|
|
44705
|
+
);
|
|
44706
|
+
}
|
|
44707
|
+
const containerType = isCombo ? chartContainerLocalNameToType(this.compatibilityService.getXmlLocalName(containerKey)) : void 0;
|
|
44708
|
+
series.push(...this.buildChartSeries(seriesList, categories, containerType));
|
|
44709
|
+
}
|
|
44710
|
+
return { categories, series };
|
|
44711
|
+
}
|
|
44060
44712
|
/**
|
|
44061
44713
|
* Build the series array from raw OOXML `c:ser` nodes.
|
|
44062
44714
|
*
|
|
@@ -44066,9 +44718,11 @@ var PptxHandlerRuntime75 = class extends PptxHandlerRuntime74 {
|
|
|
44066
44718
|
*
|
|
44067
44719
|
* @param seriesList - Array of `c:ser` XML objects from the chart container.
|
|
44068
44720
|
* @param categories - Pre-parsed category labels (used for fallback values).
|
|
44721
|
+
* @param seriesChartType - When set (combo charts), tags every series in this
|
|
44722
|
+
* container with its source chart type for round-trip.
|
|
44069
44723
|
* @returns The series array matching `PptxChartData["series"]`.
|
|
44070
44724
|
*/
|
|
44071
|
-
buildChartSeries(seriesList, categories) {
|
|
44725
|
+
buildChartSeries(seriesList, categories, seriesChartType) {
|
|
44072
44726
|
return seriesList.map((seriesNode, seriesIndex) => {
|
|
44073
44727
|
const seriesName = this.extractChartSeriesName(seriesNode);
|
|
44074
44728
|
const values = this.extractChartPointValues(
|
|
@@ -44106,7 +44760,8 @@ var PptxHandlerRuntime75 = class extends PptxHandlerRuntime74 {
|
|
|
44106
44760
|
...dataPoints.length > 0 ? { dataPoints } : {},
|
|
44107
44761
|
...seriesMarker ? { marker: seriesMarker } : {},
|
|
44108
44762
|
...dataLabels.length > 0 ? { dataLabels } : {},
|
|
44109
|
-
...explosion !== void 0 ? { explosion } : {}
|
|
44763
|
+
...explosion !== void 0 ? { explosion } : {},
|
|
44764
|
+
...seriesChartType ? { seriesChartType } : {}
|
|
44110
44765
|
};
|
|
44111
44766
|
});
|
|
44112
44767
|
}
|
|
@@ -44618,6 +45273,7 @@ var PptxHandlerRuntime77 = class extends PptxHandlerRuntime76 {
|
|
|
44618
45273
|
};
|
|
44619
45274
|
|
|
44620
45275
|
// src/core/core/runtime/PptxHandlerRuntimeLoadSession.ts
|
|
45276
|
+
var MAX_OLE_EMBEDDING_BYTES = 25 * 1024 * 1024;
|
|
44621
45277
|
var PptxHandlerRuntime78 = class _PptxHandlerRuntime extends PptxHandlerRuntime77 {
|
|
44622
45278
|
isZipContainer(data) {
|
|
44623
45279
|
const bytes = new Uint8Array(data);
|
|
@@ -44837,6 +45493,59 @@ var PptxHandlerRuntime78 = class _PptxHandlerRuntime extends PptxHandlerRuntime7
|
|
|
44837
45493
|
orderedSections
|
|
44838
45494
|
};
|
|
44839
45495
|
}
|
|
45496
|
+
/**
|
|
45497
|
+
* Recover and attach the real embedded binary for each OLE element on a
|
|
45498
|
+
* slide so callers can download / open the inner file.
|
|
45499
|
+
*
|
|
45500
|
+
* For each embedded (non-linked) OLE object: resolve its relationship
|
|
45501
|
+
* target to a zip path (same resolution as images), read the bytes, unwrap
|
|
45502
|
+
* a generic "Package" wrapper (recovering the original file name) when
|
|
45503
|
+
* present, derive a MIME type, and expose the payload as a data-URL on the
|
|
45504
|
+
* element. Linked objects, missing targets, oversized payloads, and parse
|
|
45505
|
+
* failures are skipped silently so existing behaviour is preserved.
|
|
45506
|
+
*/
|
|
45507
|
+
async enrichOleElementsWithEmbeddedData(elements, slidePath, depth = 0) {
|
|
45508
|
+
const MAX_OLE_DEPTH = 32;
|
|
45509
|
+
if (depth > MAX_OLE_DEPTH) {
|
|
45510
|
+
return;
|
|
45511
|
+
}
|
|
45512
|
+
for (const el of elements) {
|
|
45513
|
+
if (el.type === "group" && el.children) {
|
|
45514
|
+
await this.enrichOleElementsWithEmbeddedData(el.children, slidePath, depth + 1);
|
|
45515
|
+
continue;
|
|
45516
|
+
}
|
|
45517
|
+
if (el.type !== "ole" || el.isLinked || !el.oleTarget) {
|
|
45518
|
+
continue;
|
|
45519
|
+
}
|
|
45520
|
+
try {
|
|
45521
|
+
const embeddingPath = this.resolveImagePath(slidePath, el.oleTarget);
|
|
45522
|
+
if (!embeddingPath) {
|
|
45523
|
+
continue;
|
|
45524
|
+
}
|
|
45525
|
+
const file = this.zip.file(embeddingPath);
|
|
45526
|
+
if (!file) {
|
|
45527
|
+
continue;
|
|
45528
|
+
}
|
|
45529
|
+
const buffer = await file.async("arraybuffer");
|
|
45530
|
+
if (buffer.byteLength === 0 || buffer.byteLength > MAX_OLE_EMBEDDING_BYTES) {
|
|
45531
|
+
continue;
|
|
45532
|
+
}
|
|
45533
|
+
const unwrapped = unwrapOleEmbedding(new Uint8Array(buffer));
|
|
45534
|
+
if (unwrapped.data.length === 0) {
|
|
45535
|
+
continue;
|
|
45536
|
+
}
|
|
45537
|
+
const fileName = unwrapped.fileName ?? el.fileName ?? (el.oleName && el.oleFileExtension ? `${el.oleName}.${el.oleFileExtension}` : void 0);
|
|
45538
|
+
const mimeType = mimeTypeForOleFile(fileName ?? `x.${el.oleFileExtension ?? "bin"}`);
|
|
45539
|
+
el.oleEmbeddedData = oleBytesToDataUrl(unwrapped.data, mimeType);
|
|
45540
|
+
el.oleEmbeddedByteSize = unwrapped.data.length;
|
|
45541
|
+
el.oleEmbeddedMimeType = mimeType;
|
|
45542
|
+
if (fileName) {
|
|
45543
|
+
el.oleEmbeddedFileName = fileName;
|
|
45544
|
+
}
|
|
45545
|
+
} catch {
|
|
45546
|
+
}
|
|
45547
|
+
}
|
|
45548
|
+
}
|
|
44840
45549
|
async loadSlidesForPresentation(sectionBySlideId) {
|
|
44841
45550
|
if (!this.presentationData) {
|
|
44842
45551
|
return [];
|
|
@@ -44864,6 +45573,7 @@ var PptxHandlerRuntime78 = class _PptxHandlerRuntime extends PptxHandlerRuntime7
|
|
|
44864
45573
|
parseSlide: (slideXml2, slidePath) => this.parseSlide(slideXml2, slidePath),
|
|
44865
45574
|
extractMediaTimingMap: (slideXml2, slidePath) => this.extractMediaTimingMap(slideXml2, slidePath),
|
|
44866
45575
|
enrichMediaElementsWithTiming: (elements, timingMap) => this.enrichMediaElementsWithTiming(elements, timingMap),
|
|
45576
|
+
enrichOleElementsWithEmbeddedData: (elements, slidePath) => this.enrichOleElementsWithEmbeddedData(elements, slidePath),
|
|
44867
45577
|
extractBackgroundColor: (slideXml2) => this.extractBackgroundColor(slideXml2),
|
|
44868
45578
|
getLayoutBackgroundColor: (slidePath) => this.getLayoutBackgroundColor(slidePath),
|
|
44869
45579
|
extractBackgroundGradient: (slideXml2) => this.extractBackgroundGradient(slideXml2),
|
|
@@ -57093,6 +57803,51 @@ function setChartDataPointExplosion(element, seriesIndex, pointIndex, explosion)
|
|
|
57093
57803
|
const dp = ensureDataPoint(series, pointIndex);
|
|
57094
57804
|
dp.explosion = explosion;
|
|
57095
57805
|
}
|
|
57806
|
+
function applyLabelEdit(label, edit) {
|
|
57807
|
+
if (edit.showValue !== void 0) {
|
|
57808
|
+
label.showVal = edit.showValue;
|
|
57809
|
+
}
|
|
57810
|
+
if (edit.showCategory !== void 0) {
|
|
57811
|
+
label.showCatName = edit.showCategory;
|
|
57812
|
+
}
|
|
57813
|
+
if (edit.showSeriesName !== void 0) {
|
|
57814
|
+
label.showSerName = edit.showSeriesName;
|
|
57815
|
+
}
|
|
57816
|
+
if (edit.showPercent !== void 0) {
|
|
57817
|
+
label.showPercent = edit.showPercent;
|
|
57818
|
+
}
|
|
57819
|
+
if (edit.showLegendKey !== void 0) {
|
|
57820
|
+
label.showLegendKey = edit.showLegendKey;
|
|
57821
|
+
}
|
|
57822
|
+
if (edit.position !== void 0) {
|
|
57823
|
+
label.position = edit.position;
|
|
57824
|
+
}
|
|
57825
|
+
if (edit.text !== void 0) {
|
|
57826
|
+
label.text = edit.text === "" ? void 0 : edit.text;
|
|
57827
|
+
}
|
|
57828
|
+
}
|
|
57829
|
+
function setChartDataPointLabel(element, seriesIndex, pointIndex, edit) {
|
|
57830
|
+
validateSeriesIndex(element, seriesIndex);
|
|
57831
|
+
const series = element.chartData.series[seriesIndex];
|
|
57832
|
+
if (edit === null) {
|
|
57833
|
+
if (!series.dataLabels) {
|
|
57834
|
+
return;
|
|
57835
|
+
}
|
|
57836
|
+
series.dataLabels = series.dataLabels.filter((l) => l.idx !== pointIndex);
|
|
57837
|
+
if (series.dataLabels.length === 0) {
|
|
57838
|
+
series.dataLabels = void 0;
|
|
57839
|
+
}
|
|
57840
|
+
return;
|
|
57841
|
+
}
|
|
57842
|
+
const labels = series.dataLabels ??= [];
|
|
57843
|
+
let label = labels.find((l) => l.idx === pointIndex);
|
|
57844
|
+
if (!label) {
|
|
57845
|
+
label = { idx: pointIndex };
|
|
57846
|
+
labels.push(label);
|
|
57847
|
+
labels.sort((a, b) => a.idx - b.idx);
|
|
57848
|
+
}
|
|
57849
|
+
applyLabelEdit(label, edit);
|
|
57850
|
+
}
|
|
57096
57851
|
function removeEmptyDataPoint(series, pointIndex) {
|
|
57097
57852
|
if (!series.dataPoints) {
|
|
57098
57853
|
return;
|
|
@@ -57142,8 +57897,8 @@ function generateLayoutXml(definition) {
|
|
|
57142
57897
|
const phShapes = placeholders.map((ph, i) => placeholderSpXml(ph, i + 2)).join("\n");
|
|
57143
57898
|
let bgXml = "";
|
|
57144
57899
|
if (definition.backgroundColor) {
|
|
57145
|
-
const
|
|
57146
|
-
bgXml = ` <p:bg><p:bgPr><a:solidFill><a:srgbClr val="${
|
|
57900
|
+
const hex8 = definition.backgroundColor.replace(/^#/, "").toUpperCase();
|
|
57901
|
+
bgXml = ` <p:bg><p:bgPr><a:solidFill><a:srgbClr val="${hex8}"/></a:solidFill><a:effectLst/></p:bgPr></p:bg>
|
|
57147
57902
|
`;
|
|
57148
57903
|
}
|
|
57149
57904
|
return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
@@ -57619,8 +58374,8 @@ var TextBuilder = class _TextBuilder {
|
|
|
57619
58374
|
*
|
|
57620
58375
|
* @param hex - Color as a hex string (e.g. "#FF0000").
|
|
57621
58376
|
*/
|
|
57622
|
-
color(
|
|
57623
|
-
this._options.color =
|
|
58377
|
+
color(hex8) {
|
|
58378
|
+
this._options.color = hex8;
|
|
57624
58379
|
return this;
|
|
57625
58380
|
}
|
|
57626
58381
|
/**
|
|
@@ -62396,8 +63151,8 @@ function stepTable10(t) {
|
|
|
62396
63151
|
}
|
|
62397
63152
|
return out.join(" ");
|
|
62398
63153
|
}
|
|
62399
|
-
function parseHexRgb(
|
|
62400
|
-
const m = /^#?([0-9a-f]{6})/i.exec(
|
|
63154
|
+
function parseHexRgb(hex8) {
|
|
63155
|
+
const m = /^#?([0-9a-f]{6})/i.exec(hex8.trim());
|
|
62401
63156
|
if (!m) {
|
|
62402
63157
|
return { r: 0, g: 0, b: 0 };
|
|
62403
63158
|
}
|
|
@@ -62916,4 +63671,4 @@ var SvgExporter = class _SvgExporter {
|
|
|
62916
63671
|
* `<p:extLst>` (optional)
|
|
62917
63672
|
*/
|
|
62918
63673
|
|
|
62919
|
-
export { ALL_ANIMATION_PRESETS, BLIP_FILL_ORDER, CLOUD_CALLOUT_TAIL_COUNT, CLOUD_LOBE_COUNT, COLOR_MAP_ALIAS_KEYS, CONNECTOR_ARROW_OPTIONS, CONNECTOR_GEOMETRY_OPTIONS, ChartBuilder, ConnectorBuilder, ConnectorXmlFactory, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_COLOR_MAP, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_MAX_UNCOMPRESSED_BYTES, DEFAULT_SCHEME_COLOR_MAP, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, DIGEST_ALGORITHM_TO_HASH, DIGEST_ALGORITHM_TO_WEB_CRYPTO, DIGITAL_SIGNATURE_ORIGIN_REL_TYPE, DIGITAL_SIGNATURE_REL_TYPE, DataIntegrityError, DocumentConverter, EFFECT_LST_ORDER, EMPHASIS_PRESETS, EMU_PER_INCH, EMU_PER_PIXEL2 as EMU_PER_PIXEL, EMU_PER_POINT, EMU_PER_PX, ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV, ENTERPRISE_REQUIRE_REVOCATION_ENV, ENTERPRISE_REQUIRE_TIMESTAMP_ENV, ENTERPRISE_TRUST_ROOTS_FILE_ENV, ENTERPRISE_TRUST_ROOTS_PEM_ENV, ENTRANCE_PRESETS, EXIT_PRESETS, EncryptedFileError, FONT_SUBSTITUTION_MAP, FreeformPathBuilder, GroupBuilder, ImageBuilder, IncorrectPasswordError, MAX_TABLE_DIMENSION, MAX_ZIP_ENTRY_COUNT, MIN_ELEMENT_SIZE, MIN_TABLE_DIMENSION, MOTION_PATH_PRESETS, MediaBuilder, MediaContext, MediaGraphicFrameXmlFactory, OOXML_TO_PRESET_EMPH, OOXML_TO_PRESET_ENTR, OOXML_TO_PRESET_EXIT, OPC_RELATIONSHIP_TRANSFORM, Ole2ParseError, P14_GUIDE_URI, P15_GUIDE_URI, PANOSE_FAMILY_MAP, PANOSE_MONOSPACE_PROPORTION, PANOSE_SANS_SERIF_STYLES, PANOSE_WEIGHT_MAP, POWERPOINT_PRESENCE_KEY, PPTX_VIEWER_MANIFEST_NS, PRESET_COLOR_MAP, PRESET_SHAPE_CATEGORY_LABELS, PRESET_SHAPE_CLIP_PATHS, PRESET_SHAPE_DEFINITIONS, PRESET_SHAPE_GEOMETRY_TABLE, PRESET_TO_OOXML, PictureXmlFactory, PptxAnimationWriteService, PptxColorStyleCodec, PptxCommentAuthorsXmlFactory, PptxCommentXmlFactoryProvider, PptxCompatibilityService, PptxConnectorParser, PptxContentTypesBuilder, PptxDocumentPropertiesUpdater, PptxEditorAnimationService, PptxElementTransformUpdater, PptxElementXmlBuilder, PptxGraphicFrameParser, PptxHandler, PptxHandlerRuntime81 as PptxHandlerRuntime, PptxHandlerRuntimeFactory, PptxLoadDataBuilder, PptxMarkdownConverter, PptxMediaDataParser, PptxNativeAnimationService, PptxPresentationSaveBuilder, PptxPresentationSlidesReconciler, PptxRuntimeDependencyFactory, PptxSaveConstantsFactory, PptxSaveState as PptxSaveSession, PptxSaveStateBuilder as PptxSaveSessionBuilder, PptxSaveState, PptxSaveStateBuilder, PptxShapeIdValidator, PptxShapeStyleExtractor, PptxSlideBackgroundBuilder, PptxSlideBuilder, PptxSlideCommentPartWriter, PptxSlideCommentsXmlFactory, PptxSlideElementsBuilder, PptxSlideLoaderService, PptxSlideMediaRelationshipBuilder, PptxSlideNotesBuilder, PptxSlideNotesPartUpdater, PptxSlideRelationshipRegistry, PptxSlideTransitionService, PptxTableDataParser, PptxTemplateBackgroundService, PptxXmlBuilder, PptxXmlFactoryProvider, PptxXmlLookupService, Presentation, PresentationBuilder, SHAPE_TREE_ELEMENT_TAGS, SP_PR_ORDER, STROKE_DASH_OPTIONS, SUPPORTED_XML_CANON_TRANSFORMS, SWITCHABLE_LAYOUT_TYPES, SYSTEM_COLOR_MAP, ShapeBuilder, SlideBuilder, SlideProcessor, SlideSizes, SvgExporter, TC_PR_BORDERS_ORDER, THEME_COLOR_SCHEME_KEYS, THEME_PRESETS, TRANSITION_VALID_DIRECTIONS, TableBuilder, TextBuilder, TextShapeXmlFactory, ThemePresets, VML_SHAPE_TAGS, XMLDSIG_NS, XML_TRANSFORM_ENVELOPED_SIGNATURE, ZipBombError, addChartCategory, addChartSeries, addSection, addSmartArtNode, addSmartArtNodeAsChild, applyDrawingColorTransforms, applyKinsokuToXml, applyTableCellTextAndStyle, applyTemplate, applyThemeToData, areNamespacesSupported, buildCalloutLeaderLineSvgPath, buildClrMapOverrideXml, buildFontFamilyString, buildGuideListExtension, buildLinkedTextBoxChains, buildOle2, buildSingleEffectNode, buildSrgbColorChoice, buildThemeColorMap, catmullRomToBezier, chartDataAddCategory, chartDataAddSeries, chartDataChangeType, chartDataRemoveCategory, chartDataRemoveSeries, chartDataUpdatePoint, checkBlankSlide, checkComplexTables, checkDuplicateTitles, checkLowContrast, checkMissingAltText, checkMissingSlideTitle, checkPresentation, clampUnitInterval, classifyPanose, cloneElement, cloneShapeStyle, cloneSlide, cloneTemplateElementsBySlideId, cloneTextStyle, cloneXmlObject, cm, cmToEmu, colorWithOpacity, colorsEqual, combineShapes, computeContrastRatio, computeCycleLayout, computeDetailStatus, computeDigestBase64 as computeDigestBase64WebCrypto, computeHierarchyLayout, computeLinearLayout, computeMatrixLayout, computePyramidLayout, computeSmartArtLayout, computeSnakeLayout, computeVerificationStatus, convertXmlToStrict, createArrayBufferCopy, createBuiltinVariables, createChartElement, createConnectorElement, createDefaultPptxHandlerRuntime, createEditorId, createFreeformElement, createGroupElement, createImageElement, createLayout, createLayouts, createMediaElement, createModifyVerifier, createPptxSaveConstants, createShapeElement, createTableCellXml, createTableElement, createTableGraphicFrameRawXml, createTemplateConnectorRawXml, createTemplateShapeRawXml, createTextElement, createUniformTextSegments, dataUrlToMediaBytes, decomposeSmartArt, decryptPptx, demoteSmartArtNode, deobfuscateFont, deriveOutputPath, detectDigitalSignatures, detectFileFormat, detectFontFormat, detectOleObjectType, detectStrictConformance, diffPresentations, diffSlides, distributeSegmentsAcrossChain, douglasPeucker, duplicateElement, duplicateSlide, elementActionToPptxAction, elementHasAction, emuToPixels, encryptPptx, ensureArrayValue, escapeXmlAttr, escapeXmlText, estimateTextBoxCapacity, evaluateGeometryPaths, evaluateGuides, evaluatePresetShape, extractAllTagText, extractColorChoiceXml, extractFirstTagText, extractGuidFromPartName, extractModel3DTransform, extractTagAttribute, fetchUrlToBytes, findCustomShow, findLayoutByName, findLayoutByType, findPlaceholders, findText, formatCommentTimestamp, fragmentShapes, generateFontGuid, generateLayoutXml, generateMediaFilename, getAdjustmentAwareClipPath, getAdjustmentAwareShapeClipPath, getAnimationPresetInfo, getCalloutLeaderLineGeometry, getCalloutTier, getCalloutViewBoxBounds, getCloudCalloutClipPath, getCloudClipPath, getCloudPathForRendering, getCommentMarkerPosition, getConnectorAdjustment, getConnectorPathGeometry, getCssBorderDashStyle, getCustomShowNames, getCustomShowPositionLabel, getDirectory, getElementLabel, getElementTextContent, getElementTransform, getImageMaskStyle, getLinkedTextBoxSegments, getNativeAnimationPresetMetadata, getOleObjectTypeLabel, getPanoseWeight, getPresetShapeClipPath, getPresetsByCategory, getRoundRectRadiusPx, getSectionForSlide, getSectionSlideRange, getShapeClipPath, getShapeClipPathFromPreset, getShapeType, getSignaturePathsToStrip, getSubstituteFontFamily, getSubstituteFonts, getSupportedNamespaces, getSvgStrokeDasharray, getTextCompensationTransform, getThemePreset, getZoomElements, getZoomTargetSlideIndexes, guidToKey, guideEmuToPx, guidePxToEmu, hasDirectSubstitution, hasNonTrivialOverride, hasShapeProperties, hasTextProperties, hexToRgbChannels, hslToRgb, inches, inchesToEmu, inferOleExtensionFromTarget, interpolateShapeGeometry, intersectPolygons, intersectShapes, intersectSvgPaths, isCalloutShape, isConnectorElement, isEditableTextElement, isImageLikeElement, isInkElement, isNamespaceSupported, isShapeElement, isStrictNamespaceUri, isSummaryZoomSlide, isSwitchableLayoutType, isTemplateElement, isTextElement, isTransitionalNamespaceUri, isValidBase64, isXmlNode, isZoomElement, isZoomElement2 as isZoomElementUtil, layoutEngineShapesToDrawingShapes, lookupPresetShape, mailMerge, mergePresentation, mergeShapes, mergeStyleParts, mergeThemeColorOverride, mm, moveSlidesToSection, navigateCustomShow, normalizeHexColor, normalizeNamespaceUri, normalizePartPath, normalizePath, normalizeStrictXml, normalizeStrokeDashType, obfuscateFont, ooxmlArcToSvg, ooxmlToPresetName, parseActiveXControlsFromSlide, parseAdjustmentValues, parseBodyPrBooleanAttrs, parseChart3DSurfaces, parseChartAxes, parseCondition, parseConditionList, parseCxChartSeries, parseDataTable, parseDataUrlToBytes, parseDrawingColor, parseDrawingColorChoice, parseDrawingColorOpacity, parseDrawingFraction, parseDrawingHueDegrees, parseDrawingPercent, parseEmbeddedXlsx, parseGuideDefinitions, parseHexColor, parseKinsoku, parseLayoutDefinition, parseLineStyle, parseMarker, parseOle2, parsePanoseBytes, parsePanoseString, parsePresentationDrawingGuides, parseSeriesDataLabels, parseSeriesDataPoints, parseSeriesErrBars, parseSeriesExplosion, parseSeriesTrendlines, parseShapeProps, parseSignatureXml, parseSlideDrawingGuides, parseSvgPath, parseVmlElement, parseVmlElements, pixelsToEmu, polygonsToSvgPath, pptxActionToElementAction, promoteSmartArtNode, pt, reResolveSlideColors, readFileAsDataUrl, rebuildTableStructureInRawXml, reflowSmartArtLayout, relativeLuminance, relayoutSmartArt, removeChartCategory, removeChartSeries, removeSection, removeSmartArtNode, reorderObjectKeys, reorderSections, reorderSmartArtNode, reorderSmartArtNodeToIndex, repairPptx, replaceShapeGeometry, replaceText, replaceTextInSlide, replaceWithCustomGeometry, resetCloneIdCounter, resetDecomposeCounter, resetIdCounter, resetSectionIdCounter, resetSmartArtEditCounter, resolveCoordinate, resolveCustomShowSlideIndices, resolveLayoutDisplayName, resolveModel3DMimeType, resolveReferenceUriToPart, resolveTableCellStyle, rgbToHsl, selectAlternateContentBranch, serializeColorChoice, serializeCondition, serializeConditionList, serializeSvgPath, setChartAxis, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategories, setChartDataLabels, setChartDataPointExplosion, setChartDataPointFill, setChartGrouping, setChartLegend, setChartSeriesChartType, setChartSeriesColor, setChartSeriesErrorBars, setChartSeriesMarker, setChartSeriesTrendline, setChartTitle, setChartType, shouldRenderFallbackLabel, shouldReturnToZoomSlide, subtractPolygons, subtractShapes, subtractSvgPaths, svgPathToPolygons, switchSmartArtLayout, toHex, toStrictNamespaceUri, unionPolygons, unionShapes, unionSvgPaths, unwrapAlternateContent, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateChartDataPoint, updateChartSeriesValues, updateMergeAttrsInRawXml, updateSmartArtNodeText, validatePptx, verifyModifyPassword, verifyPassword, verifySignatureDigests, writeBodyPrBooleanAttrs, xmlAttr, xmlAttrBool, xmlAttrNumber, xmlChild, xmlChildren, xmlPath, xmlText };
|
|
63674
|
+
export { ALL_ANIMATION_PRESETS, BLIP_FILL_ORDER, CLOUD_CALLOUT_TAIL_COUNT, CLOUD_LOBE_COUNT, COLOR_MAP_ALIAS_KEYS, CONNECTOR_ARROW_OPTIONS, CONNECTOR_GEOMETRY_OPTIONS, ChartBuilder, ConnectorBuilder, ConnectorXmlFactory, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_COLOR_MAP, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_MAX_UNCOMPRESSED_BYTES, DEFAULT_SCHEME_COLOR_MAP, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, DIGEST_ALGORITHM_TO_HASH, DIGEST_ALGORITHM_TO_WEB_CRYPTO, DIGITAL_SIGNATURE_ORIGIN_REL_TYPE, DIGITAL_SIGNATURE_REL_TYPE, DataIntegrityError, DocumentConverter, EFFECT_LST_ORDER, EMPHASIS_PRESETS, EMU_PER_INCH, EMU_PER_PIXEL2 as EMU_PER_PIXEL, EMU_PER_POINT, EMU_PER_PX, ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV, ENTERPRISE_REQUIRE_REVOCATION_ENV, ENTERPRISE_REQUIRE_TIMESTAMP_ENV, ENTERPRISE_TRUST_ROOTS_FILE_ENV, ENTERPRISE_TRUST_ROOTS_PEM_ENV, ENTRANCE_PRESETS, EXIT_PRESETS, EncryptedFileError, FONT_SUBSTITUTION_MAP, FreeformPathBuilder, GroupBuilder, ImageBuilder, IncorrectPasswordError, MAX_TABLE_DIMENSION, MAX_ZIP_ENTRY_COUNT, MIN_ELEMENT_SIZE, MIN_TABLE_DIMENSION, MOTION_PATH_PRESETS, MediaBuilder, MediaContext, MediaGraphicFrameXmlFactory, OOXML_TO_PRESET_EMPH, OOXML_TO_PRESET_ENTR, OOXML_TO_PRESET_EXIT, OPC_RELATIONSHIP_TRANSFORM, Ole2ParseError, P14_GUIDE_URI, P15_GUIDE_URI, PANOSE_FAMILY_MAP, PANOSE_MONOSPACE_PROPORTION, PANOSE_SANS_SERIF_STYLES, PANOSE_WEIGHT_MAP, POWERPOINT_PRESENCE_KEY, PPTX_VIEWER_MANIFEST_NS, PRESET_COLOR_MAP, PRESET_SHAPE_CATEGORY_LABELS, PRESET_SHAPE_CLIP_PATHS, PRESET_SHAPE_DEFINITIONS, PRESET_SHAPE_GEOMETRY_TABLE, PRESET_TO_OOXML, PictureXmlFactory, PptxAnimationWriteService, PptxColorStyleCodec, PptxCommentAuthorsXmlFactory, PptxCommentXmlFactoryProvider, PptxCompatibilityService, PptxConnectorParser, PptxContentTypesBuilder, PptxDocumentPropertiesUpdater, PptxEditorAnimationService, PptxElementTransformUpdater, PptxElementXmlBuilder, PptxGraphicFrameParser, PptxHandler, PptxHandlerRuntime81 as PptxHandlerRuntime, PptxHandlerRuntimeFactory, PptxLoadDataBuilder, PptxMarkdownConverter, PptxMediaDataParser, PptxNativeAnimationService, PptxPresentationSaveBuilder, PptxPresentationSlidesReconciler, PptxRuntimeDependencyFactory, PptxSaveConstantsFactory, PptxSaveState as PptxSaveSession, PptxSaveStateBuilder as PptxSaveSessionBuilder, PptxSaveState, PptxSaveStateBuilder, PptxShapeIdValidator, PptxShapeStyleExtractor, PptxSlideBackgroundBuilder, PptxSlideBuilder, PptxSlideCommentPartWriter, PptxSlideCommentsXmlFactory, PptxSlideElementsBuilder, PptxSlideLoaderService, PptxSlideMediaRelationshipBuilder, PptxSlideNotesBuilder, PptxSlideNotesPartUpdater, PptxSlideRelationshipRegistry, PptxSlideTransitionService, PptxTableDataParser, PptxTemplateBackgroundService, PptxXmlBuilder, PptxXmlFactoryProvider, PptxXmlLookupService, Presentation, PresentationBuilder, SHAPE_TREE_ELEMENT_TAGS, SP_PR_ORDER, STROKE_DASH_OPTIONS, SUPPORTED_XML_CANON_TRANSFORMS, SWITCHABLE_LAYOUT_TYPES, SYSTEM_COLOR_MAP, ShapeBuilder, SlideBuilder, SlideProcessor, SlideSizes, SvgExporter, TC_PR_BORDERS_ORDER, THEME_COLOR_SCHEME_KEYS, THEME_PRESETS, TRANSITION_VALID_DIRECTIONS, TableBuilder, TextBuilder, TextShapeXmlFactory, ThemePresets, VML_SHAPE_TAGS, XMLDSIG_NS, XML_TRANSFORM_ENVELOPED_SIGNATURE, ZipBombError, addChartCategory, addChartSeries, addSection, addSmartArtNode, addSmartArtNodeAsChild, applyDrawingColorTransforms, applyKinsokuToXml, applyTableCellTextAndStyle, applyTemplate, applyThemeToData, areNamespacesSupported, buildCalloutLeaderLineSvgPath, buildClrMapOverrideXml, buildFontFamilyString, buildGuideListExtension, buildLinkedTextBoxChains, buildOle2, buildSingleEffectNode, buildSrgbColorChoice, buildThemeColorMap, catmullRomToBezier, chartDataAddCategory, chartDataAddSeries, chartDataChangeType, chartDataRemoveCategory, chartDataRemoveSeries, chartDataUpdatePoint, checkBlankSlide, checkComplexTables, checkDuplicateTitles, checkLowContrast, checkMissingAltText, checkMissingSlideTitle, checkPresentation, clampUnitInterval, classifyPanose, cloneElement, cloneShapeStyle, cloneSlide, cloneTemplateElementsBySlideId, cloneTextStyle, cloneXmlObject, cm, cmToEmu, colorWithOpacity, colorsEqual, combineShapes, computeContrastRatio, computeCycleLayout, computeDetailStatus, computeDigestBase64 as computeDigestBase64WebCrypto, computeHierarchyLayout, computeLinearLayout, computeMatrixLayout, computePyramidLayout, computeSmartArtLayout, computeSnakeLayout, computeVerificationStatus, convertXmlToStrict, createArrayBufferCopy, createBuiltinVariables, createChartElement, createConnectorElement, createDefaultPptxHandlerRuntime, createEditorId, createFreeformElement, createGroupElement, createImageElement, createLayout, createLayouts, createMediaElement, createModifyVerifier, createPptxSaveConstants, createShapeElement, createTableCellXml, createTableElement, createTableGraphicFrameRawXml, createTemplateConnectorRawXml, createTemplateShapeRawXml, createTextElement, createUniformTextSegments, dataUrlToMediaBytes, decodeOle10Native, decomposeSmartArt, decryptPptx, demoteSmartArtNode, deobfuscateFont, deriveOutputPath, detectDigitalSignatures, detectFileFormat, detectFontFormat, detectOleObjectType, detectStrictConformance, diffPresentations, diffSlides, distributeSegmentsAcrossChain, douglasPeucker, duplicateElement, duplicateSlide, elementActionToPptxAction, elementHasAction, emuToPixels, encryptPptx, ensureArrayValue, escapeXmlAttr, escapeXmlText, estimateTextBoxCapacity, evaluateGeometryPaths, evaluateGuides, evaluatePresetShape, extractAllTagText, extractColorChoiceXml, extractFirstTagText, extractGuidFromPartName, extractModel3DTransform, extractTagAttribute, fetchUrlToBytes, findCustomShow, findLayoutByName, findLayoutByType, findPlaceholders, findText, formatCommentTimestamp, fragmentShapes, generateFontGuid, generateLayoutXml, generateMediaFilename, getAdjustmentAwareClipPath, getAdjustmentAwareShapeClipPath, getAnimationPresetInfo, getCalloutLeaderLineGeometry, getCalloutTier, getCalloutViewBoxBounds, getCloudCalloutClipPath, getCloudClipPath, getCloudPathForRendering, getCommentMarkerPosition, getConnectorAdjustment, getConnectorPathGeometry, getCssBorderDashStyle, getCustomShowNames, getCustomShowPositionLabel, getDirectory, getElementLabel, getElementTextContent, getElementTransform, getImageMaskStyle, getLinkedTextBoxSegments, getNativeAnimationPresetMetadata, getOleObjectTypeLabel, getPanoseWeight, getPresetShapeClipPath, getPresetsByCategory, getRoundRectRadiusPx, getSectionForSlide, getSectionSlideRange, getShapeClipPath, getShapeClipPathFromPreset, getShapeType, getSignaturePathsToStrip, getSubstituteFontFamily, getSubstituteFonts, getSupportedNamespaces, getSvgStrokeDasharray, getTextCompensationTransform, getThemePreset, getZoomElements, getZoomTargetSlideIndexes, guidToKey, guideEmuToPx, guidePxToEmu, hasDirectSubstitution, hasNonTrivialOverride, hasShapeProperties, hasTextProperties, hexToRgbChannels, hslToRgb, inches, inchesToEmu, inferOleExtensionFromTarget, interpolateShapeGeometry, intersectPolygons, intersectShapes, intersectSvgPaths, isCalloutShape, isConnectorElement, isEditableTextElement, isImageLikeElement, isInkElement, isNamespaceSupported, isOle2CompoundFile, isShapeElement, isStrictNamespaceUri, isSummaryZoomSlide, isSwitchableLayoutType, isTemplateElement, isTextElement, isTransitionalNamespaceUri, isValidBase64, isXmlNode, isZoomElement, isZoomElement2 as isZoomElementUtil, layoutEngineShapesToDrawingShapes, lookupPresetShape, mailMerge, mergePresentation, mergeShapes, mergeStyleParts, mergeThemeColorOverride, mimeTypeForOleFile, mm, moveSlidesToSection, navigateCustomShow, normalizeHexColor, normalizeNamespaceUri, normalizePartPath, normalizePath, normalizeStrictXml, normalizeStrokeDashType, obfuscateFont, oleBytesToDataUrl, ooxmlArcToSvg, ooxmlToPresetName, parseActiveXControlsFromSlide, parseAdjustmentValues, parseBodyPrBooleanAttrs, parseChart3DSurfaces, parseChartAxes, parseCondition, parseConditionList, parseCxChartSeries, parseDataTable, parseDataUrlToBytes, parseDrawingColor, parseDrawingColorChoice, parseDrawingColorOpacity, parseDrawingFraction, parseDrawingHueDegrees, parseDrawingPercent, parseEmbeddedXlsx, parseGuideDefinitions, parseHexColor, parseKinsoku, parseLayoutDefinition, parseLineStyle, parseMarker, parseOle2, parsePanoseBytes, parsePanoseString, parsePresentationDrawingGuides, parseSeriesDataLabels, parseSeriesDataPoints, parseSeriesErrBars, parseSeriesExplosion, parseSeriesTrendlines, parseShapeProps, parseSignatureXml, parseSlideDrawingGuides, parseSvgPath, parseVmlElement, parseVmlElements, pixelsToEmu, polygonsToSvgPath, pptxActionToElementAction, promoteSmartArtNode, pt, reResolveSlideColors, readFileAsDataUrl, rebuildTableStructureInRawXml, reflowSmartArtLayout, relativeLuminance, relayoutSmartArt, removeChartCategory, removeChartSeries, removeSection, removeSmartArtNode, reorderObjectKeys, reorderSections, reorderSmartArtNode, reorderSmartArtNodeToIndex, repairPptx, replaceShapeGeometry, replaceText, replaceTextInSlide, replaceWithCustomGeometry, resetCloneIdCounter, resetDecomposeCounter, resetIdCounter, resetSectionIdCounter, resetSmartArtEditCounter, resolveCoordinate, resolveCustomShowSlideIndices, resolveLayoutDisplayName, resolveModel3DMimeType, resolveReferenceUriToPart, resolveTableCellStyle, rgbToHsl, selectAlternateContentBranch, serializeColorChoice, serializeCondition, serializeConditionList, serializeSvgPath, setChartAxis, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategories, setChartDataLabels, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartGrouping, setChartLegend, setChartSeriesChartType, setChartSeriesColor, setChartSeriesErrorBars, setChartSeriesMarker, setChartSeriesTrendline, setChartTitle, setChartType, shouldRenderFallbackLabel, shouldReturnToZoomSlide, subtractPolygons, subtractShapes, subtractSvgPaths, svgPathToPolygons, switchSmartArtLayout, toHex, toStrictNamespaceUri, unionPolygons, unionShapes, unionSvgPaths, unwrapAlternateContent, unwrapOleEmbedding, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateChartDataPoint, updateChartSeriesValues, updateMergeAttrsInRawXml, updateSmartArtNodeText, validatePptx, verifyModifyPassword, verifyPassword, verifySignatureDigests, writeBodyPrBooleanAttrs, xmlAttr, xmlAttrBool, xmlAttrNumber, xmlChild, xmlChildren, xmlPath, xmlText };
|