ooxml.js 2.4.1 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +15 -2
  2. package/dist/codec.cjs +28 -0
  3. package/dist/codec.d.cts +72 -0
  4. package/dist/codec.d.ts +72 -0
  5. package/dist/codec.js +24 -0
  6. package/dist/compact.cjs +162 -0
  7. package/dist/compact.d.cts +70 -0
  8. package/dist/compact.d.ts +70 -0
  9. package/dist/compact.js +152 -0
  10. package/dist/image/sniff.cjs +28 -0
  11. package/dist/image/sniff.d.cts +5 -0
  12. package/dist/image/sniff.d.ts +5 -0
  13. package/dist/image/sniff.js +27 -0
  14. package/dist/index.cjs +83 -3025
  15. package/dist/index.d.cts +22 -527
  16. package/dist/index.d.ts +22 -527
  17. package/dist/index.js +22 -2964
  18. package/dist/model/node.cjs +67 -0
  19. package/dist/model/node.d.cts +2 -0
  20. package/dist/model/node.d.ts +2 -0
  21. package/dist/model/node.js +58 -0
  22. package/dist/model/package.cjs +19 -0
  23. package/dist/model/package.d.cts +2 -0
  24. package/dist/model/package.d.ts +2 -0
  25. package/dist/model/package.js +15 -0
  26. package/dist/node-CkBWRjNR.d.cts +83 -0
  27. package/dist/node-CkBWRjNR.d.ts +83 -0
  28. package/dist/package-BUojjTXf.d.ts +114 -0
  29. package/dist/package-L24lkba-.d.cts +114 -0
  30. package/dist/package-io/read.cjs +33 -0
  31. package/dist/package-io/read.d.cts +5 -0
  32. package/dist/package-io/read.d.ts +5 -0
  33. package/dist/package-io/read.js +32 -0
  34. package/dist/package-io/write.cjs +18 -0
  35. package/dist/package-io/write.d.cts +5 -0
  36. package/dist/package-io/write.d.ts +5 -0
  37. package/dist/package-io/write.js +17 -0
  38. package/dist/typed/docx/read.cjs +332 -0
  39. package/dist/typed/docx/read.d.cts +52 -0
  40. package/dist/typed/docx/read.d.ts +52 -0
  41. package/dist/typed/docx/read.js +328 -0
  42. package/dist/typed/docx/styles.cjs +148 -0
  43. package/dist/typed/docx/styles.d.cts +29 -0
  44. package/dist/typed/docx/styles.d.ts +29 -0
  45. package/dist/typed/docx/styles.js +146 -0
  46. package/dist/typed/pptx/inherit.cjs +96 -0
  47. package/dist/typed/pptx/inherit.d.cts +30 -0
  48. package/dist/typed/pptx/inherit.d.ts +30 -0
  49. package/dist/typed/pptx/inherit.js +90 -0
  50. package/dist/typed/pptx/read.cjs +364 -0
  51. package/dist/typed/pptx/read.d.cts +44 -0
  52. package/dist/typed/pptx/read.d.ts +44 -0
  53. package/dist/typed/pptx/read.js +362 -0
  54. package/dist/typed/shared/color.cjs +85 -0
  55. package/dist/typed/shared/color.d.cts +9 -0
  56. package/dist/typed/shared/color.d.ts +9 -0
  57. package/dist/typed/shared/color.js +84 -0
  58. package/dist/typed/shared/drawingml.cjs +191 -0
  59. package/dist/typed/shared/drawingml.d.cts +40 -0
  60. package/dist/typed/shared/drawingml.d.ts +40 -0
  61. package/dist/typed/shared/drawingml.js +180 -0
  62. package/dist/typed/shared/metadata.cjs +44 -0
  63. package/dist/typed/shared/metadata.d.cts +16 -0
  64. package/dist/typed/shared/metadata.d.ts +16 -0
  65. package/dist/typed/shared/metadata.js +42 -0
  66. package/dist/typed/shared/source-path.cjs +18 -0
  67. package/dist/typed/shared/source-path.d.cts +5 -0
  68. package/dist/typed/shared/source-path.d.ts +5 -0
  69. package/dist/typed/shared/source-path.js +17 -0
  70. package/dist/typed/shared/units.cjs +55 -0
  71. package/dist/typed/shared/units.d.cts +20 -0
  72. package/dist/typed/shared/units.d.ts +20 -0
  73. package/dist/typed/shared/units.js +38 -0
  74. package/dist/typed/util.cjs +85 -0
  75. package/dist/typed/util.d.cts +18 -0
  76. package/dist/typed/util.d.ts +18 -0
  77. package/dist/typed/util.js +77 -0
  78. package/dist/typed/xlsx/a1.cjs +64 -0
  79. package/dist/typed/xlsx/a1.d.cts +19 -0
  80. package/dist/typed/xlsx/a1.d.ts +19 -0
  81. package/dist/typed/xlsx/a1.js +58 -0
  82. package/dist/typed/xlsx/build.cjs +456 -0
  83. package/dist/typed/xlsx/build.d.cts +6 -0
  84. package/dist/typed/xlsx/build.d.ts +6 -0
  85. package/dist/typed/xlsx/build.js +455 -0
  86. package/dist/typed/xlsx/content.cjs +257 -0
  87. package/dist/typed/xlsx/content.d.cts +6 -0
  88. package/dist/typed/xlsx/content.d.ts +6 -0
  89. package/dist/typed/xlsx/content.js +256 -0
  90. package/dist/typed/xlsx/defined-names.cjs +90 -0
  91. package/dist/typed/xlsx/defined-names.d.cts +20 -0
  92. package/dist/typed/xlsx/defined-names.d.ts +20 -0
  93. package/dist/typed/xlsx/defined-names.js +83 -0
  94. package/dist/typed/xlsx/print-settings.cjs +116 -0
  95. package/dist/typed/xlsx/print-settings.d.cts +8 -0
  96. package/dist/typed/xlsx/print-settings.d.ts +8 -0
  97. package/dist/typed/xlsx/print-settings.js +114 -0
  98. package/dist/typed/xlsx/shared-strings.cjs +35 -0
  99. package/dist/typed/xlsx/shared-strings.d.cts +12 -0
  100. package/dist/typed/xlsx/shared-strings.d.ts +12 -0
  101. package/dist/typed/xlsx/shared-strings.js +33 -0
  102. package/dist/typed/xlsx/units.cjs +21 -0
  103. package/dist/typed/xlsx/units.d.cts +8 -0
  104. package/dist/typed/xlsx/units.d.ts +8 -0
  105. package/dist/typed/xlsx/units.js +16 -0
  106. package/dist/typed/xlsx/util.cjs +53 -0
  107. package/dist/typed/xlsx/util.d.cts +10 -0
  108. package/dist/typed/xlsx/util.d.ts +10 -0
  109. package/dist/typed/xlsx/util.js +47 -0
  110. package/dist/typed/xlsx.cjs +140 -0
  111. package/dist/typed/xlsx.d.cts +43 -0
  112. package/dist/typed/xlsx.d.ts +43 -0
  113. package/dist/typed/xlsx.js +135 -0
  114. package/dist/util/base64.cjs +48 -0
  115. package/dist/util/base64.d.cts +5 -0
  116. package/dist/util/base64.d.ts +5 -0
  117. package/dist/util/base64.js +46 -0
  118. package/dist/xml/build.cjs +46 -0
  119. package/dist/xml/build.d.cts +5 -0
  120. package/dist/xml/build.d.ts +5 -0
  121. package/dist/xml/build.js +46 -0
  122. package/dist/xml/entities.cjs +7 -0
  123. package/dist/xml/entities.d.cts +4 -0
  124. package/dist/xml/entities.d.ts +4 -0
  125. package/dist/xml/entities.js +6 -0
  126. package/dist/xml/fragment.cjs +22 -0
  127. package/dist/xml/fragment.d.cts +6 -0
  128. package/dist/xml/fragment.d.ts +6 -0
  129. package/dist/xml/fragment.js +20 -0
  130. package/dist/xml/parse.cjs +88 -0
  131. package/dist/xml/parse.d.cts +5 -0
  132. package/dist/xml/parse.d.ts +5 -0
  133. package/dist/xml/parse.js +88 -0
  134. package/dist/zip.cjs +12 -0
  135. package/dist/zip.d.cts +5 -0
  136. package/dist/zip.d.ts +5 -0
  137. package/dist/zip.js +10 -0
  138. package/package.json +9 -1
@@ -0,0 +1,362 @@
1
+ import { base64ToBytes } from "../../util/base64.js";
2
+ import { attr, childrenWithTag, elementsWithTag, resolveRelationships, rootElement, textContent } from "../util.js";
3
+ import { DocumentMetadataSchema, readCoreProperties } from "../shared/metadata.js";
4
+ import { sniffImageFormat } from "../../image/sniff.js";
5
+ import { drawingMlFontSizeToPt, emuToPt } from "../shared/units.js";
6
+ import { applyGroupTransform, readGroupXfrm, readSolidFillColor, readXfrm } from "../shared/drawingml.js";
7
+ import { assignSourcePaths } from "../shared/source-path.js";
8
+ import { readPlaceholderKey, readRunPropertiesFromElement, resolveDefaultRunProperties, resolvePlaceholderXfrm, resolveSlideInheritance } from "./inherit.js";
9
+ import { z } from "zod";
10
+ import { ContentSlideSchema, SLIDE_SIZE_WIDESCREEN } from "document-schema.js";
11
+ //#region src/typed/pptx/read.ts
12
+ const PptxDocumentSchema = z.object({
13
+ metadata: DocumentMetadataSchema,
14
+ slides: z.array(ContentSlideSchema)
15
+ });
16
+ const PRESENTATION_PATH = "ppt/presentation.xml";
17
+ const TABLE_GRAPHIC_URI = "http://schemas.openxmlformats.org/drawingml/2006/table";
18
+ function readSlideSize(presentationRoot) {
19
+ const sldSz = presentationRoot === void 0 ? void 0 : childrenWithTag(presentationRoot, "p:sldSz")[0];
20
+ const cx = sldSz === void 0 ? void 0 : attr(sldSz, "cx");
21
+ const cy = sldSz === void 0 ? void 0 : attr(sldSz, "cy");
22
+ return cx === void 0 || cy === void 0 ? SLIDE_SIZE_WIDESCREEN : {
23
+ widthPt: emuToPt(Number(cx)),
24
+ heightPt: emuToPt(Number(cy))
25
+ };
26
+ }
27
+ function readSlidePathsInOrder(pkg, presentationRoot) {
28
+ if (presentationRoot === void 0) return [];
29
+ const sldIdLst = childrenWithTag(presentationRoot, "p:sldIdLst")[0];
30
+ if (sldIdLst === void 0) return [];
31
+ const presentationRels = resolveRelationships(pkg, PRESENTATION_PATH);
32
+ const paths = [];
33
+ for (const sldId of childrenWithTag(sldIdLst, "p:sldId")) {
34
+ const rId = attr(sldId, "r:id");
35
+ const rel = rId === void 0 ? void 0 : presentationRels.get(rId);
36
+ if (rel !== void 0) paths.push(rel.target);
37
+ }
38
+ return paths;
39
+ }
40
+ function shapeName(shape) {
41
+ const cNvPr = elementsWithTag([shape], "p:cNvPr")[0];
42
+ return cNvPr === void 0 ? void 0 : attr(cNvPr, "name");
43
+ }
44
+ function mergeRunProperties(base, override) {
45
+ return {
46
+ fontFamily: override.fontFamily ?? base.fontFamily,
47
+ sizePt: override.sizePt ?? base.sizePt,
48
+ bold: override.bold ?? base.bold,
49
+ italic: override.italic ?? base.italic,
50
+ color: override.color ?? base.color
51
+ };
52
+ }
53
+ function isUnderlined(rPr) {
54
+ if (rPr === void 0) return;
55
+ const u = attr(rPr, "u");
56
+ return u === void 0 ? void 0 : u !== "none";
57
+ }
58
+ function isStrikethrough(rPr) {
59
+ if (rPr === void 0) return;
60
+ const strike = attr(rPr, "strike");
61
+ return strike === void 0 ? void 0 : strike !== "noStrike";
62
+ }
63
+ function readHyperlink(rPr, slideRels) {
64
+ if (rPr === void 0) return;
65
+ const hlink = childrenWithTag(rPr, "a:hlinkClick")[0];
66
+ const rId = hlink === void 0 ? void 0 : attr(hlink, "r:id");
67
+ const rel = rId === void 0 ? void 0 : slideRels.get(rId);
68
+ return rel?.targetMode === "External" ? rel.target : void 0;
69
+ }
70
+ function readRun(runEl, cascadeBase, context, slideRels) {
71
+ const rPr = childrenWithTag(runEl, "a:rPr")[0];
72
+ const merged = mergeRunProperties(cascadeBase, rPr === void 0 ? {} : readRunPropertiesFromElement(rPr, context));
73
+ const tEl = childrenWithTag(runEl, "a:t")[0];
74
+ return {
75
+ text: tEl === void 0 ? "" : textContent(tEl),
76
+ bold: merged.bold,
77
+ italic: merged.italic,
78
+ underline: isUnderlined(rPr),
79
+ strike: isStrikethrough(rPr),
80
+ fontFamily: merged.fontFamily,
81
+ sizePt: merged.sizePt,
82
+ color: merged.color,
83
+ hyperlink: readHyperlink(rPr, slideRels)
84
+ };
85
+ }
86
+ function readAlignment(algn) {
87
+ if (algn === "l") return "left";
88
+ if (algn === "ctr") return "center";
89
+ if (algn === "r") return "right";
90
+ if (algn === "just" || algn === "justLow") return "justify";
91
+ }
92
+ function readAbsoluteSpacingPt(spc) {
93
+ if (spc === void 0) return;
94
+ const pts = childrenWithTag(spc, "a:spcPts")[0];
95
+ const val = pts === void 0 ? void 0 : attr(pts, "val");
96
+ return val === void 0 ? void 0 : drawingMlFontSizeToPt(Number(val));
97
+ }
98
+ function readLineSpacingMultiplier(pPr) {
99
+ const lnSpc = pPr === void 0 ? void 0 : childrenWithTag(pPr, "a:lnSpc")[0];
100
+ const pct = lnSpc === void 0 ? void 0 : childrenWithTag(lnSpc, "a:spcPct")[0];
101
+ const val = pct === void 0 ? void 0 : attr(pct, "val");
102
+ return val === void 0 ? void 0 : Number(val) / 1e5;
103
+ }
104
+ function readParagraph(pEl, placeholderType, context, slideRels) {
105
+ const pPr = childrenWithTag(pEl, "a:pPr")[0];
106
+ const masterDefaults = resolveDefaultRunProperties(placeholderType, pPr === void 0 ? 0 : Number(attr(pPr, "lvl") ?? "0"), context);
107
+ const pPrDefRPr = pPr === void 0 ? void 0 : childrenWithTag(pPr, "a:defRPr")[0];
108
+ const paragraphDefaults = pPrDefRPr === void 0 ? masterDefaults : mergeRunProperties(masterDefaults, readRunPropertiesFromElement(pPrDefRPr, context));
109
+ const runs = [];
110
+ for (const child of pEl.children) {
111
+ if (child.type !== "element") continue;
112
+ if (child.tag === "a:r" || child.tag === "a:fld") runs.push(readRun(child, paragraphDefaults, context, slideRels));
113
+ else if (child.tag === "a:br") runs.push({ text: "\n" });
114
+ }
115
+ const marL = pPr === void 0 ? void 0 : attr(pPr, "marL");
116
+ const indent = pPr === void 0 ? void 0 : attr(pPr, "indent");
117
+ return {
118
+ kind: "paragraph",
119
+ runs,
120
+ alignment: pPr === void 0 ? void 0 : readAlignment(attr(pPr, "algn")),
121
+ spacingBeforePt: readAbsoluteSpacingPt(pPr === void 0 ? void 0 : childrenWithTag(pPr, "a:spcBef")[0]),
122
+ spacingAfterPt: readAbsoluteSpacingPt(pPr === void 0 ? void 0 : childrenWithTag(pPr, "a:spcAft")[0]),
123
+ lineSpacing: readLineSpacingMultiplier(pPr),
124
+ indentLeftPt: marL === void 0 ? void 0 : emuToPt(Number(marL)),
125
+ indentFirstLinePt: indent === void 0 ? void 0 : emuToPt(Number(indent))
126
+ };
127
+ }
128
+ function textBodyParagraphs(txBody, placeholderType, context, slideRels) {
129
+ return txBody === void 0 ? [] : childrenWithTag(txBody, "a:p").map((p) => readParagraph(p, placeholderType, context, slideRels));
130
+ }
131
+ const DEFAULT_INSET_LEFT_RIGHT_EMU = 91440;
132
+ const DEFAULT_INSET_TOP_BOTTOM_EMU = 45720;
133
+ const NO_TEXT_BODY_EXTRAS = {
134
+ insetLeftPt: 0,
135
+ insetTopPt: 0,
136
+ insetRightPt: 0,
137
+ insetBottomPt: 0,
138
+ fontScale: void 0,
139
+ lineSpacingReduction: void 0
140
+ };
141
+ function readShapeTextExtras(txBody) {
142
+ if (txBody === void 0) return NO_TEXT_BODY_EXTRAS;
143
+ const bodyPr = childrenWithTag(txBody, "a:bodyPr")[0];
144
+ const lIns = bodyPr === void 0 ? void 0 : attr(bodyPr, "lIns");
145
+ const tIns = bodyPr === void 0 ? void 0 : attr(bodyPr, "tIns");
146
+ const rIns = bodyPr === void 0 ? void 0 : attr(bodyPr, "rIns");
147
+ const bIns = bodyPr === void 0 ? void 0 : attr(bodyPr, "bIns");
148
+ const normAutofit = bodyPr === void 0 ? void 0 : childrenWithTag(bodyPr, "a:normAutofit")[0];
149
+ const fontScale = normAutofit === void 0 ? void 0 : attr(normAutofit, "fontScale");
150
+ const lnSpcReduction = normAutofit === void 0 ? void 0 : attr(normAutofit, "lnSpcReduction");
151
+ return {
152
+ insetLeftPt: emuToPt(lIns === void 0 ? DEFAULT_INSET_LEFT_RIGHT_EMU : Number(lIns)),
153
+ insetTopPt: emuToPt(tIns === void 0 ? DEFAULT_INSET_TOP_BOTTOM_EMU : Number(tIns)),
154
+ insetRightPt: emuToPt(rIns === void 0 ? DEFAULT_INSET_LEFT_RIGHT_EMU : Number(rIns)),
155
+ insetBottomPt: emuToPt(bIns === void 0 ? DEFAULT_INSET_TOP_BOTTOM_EMU : Number(bIns)),
156
+ fontScale: fontScale === void 0 ? void 0 : Number(fontScale) / 1e5,
157
+ lineSpacingReduction: lnSpcReduction === void 0 ? void 0 : Number(lnSpcReduction) / 1e5
158
+ };
159
+ }
160
+ function resolveShapeFrame(shape, context, parentTransform) {
161
+ const key = readPlaceholderKey(shape);
162
+ const spPr = childrenWithTag(shape, "p:spPr")[0];
163
+ const xfrm = (spPr === void 0 ? void 0 : readXfrm(childrenWithTag(spPr, "a:xfrm")[0])) ?? (key === void 0 ? void 0 : resolvePlaceholderXfrm(key, context));
164
+ if (xfrm === void 0) return;
165
+ const localFrame = {
166
+ xPt: xfrm.xPt,
167
+ yPt: xfrm.yPt,
168
+ widthPt: xfrm.widthPt,
169
+ heightPt: xfrm.heightPt
170
+ };
171
+ return {
172
+ frame: parentTransform === void 0 ? localFrame : applyGroupTransform(parentTransform, localFrame),
173
+ rotationDeg: xfrm.rotationDeg === 0 ? void 0 : xfrm.rotationDeg
174
+ };
175
+ }
176
+ function readSpShape(sp, context, slideRels, parentTransform) {
177
+ const resolved = resolveShapeFrame(sp, context, parentTransform);
178
+ if (resolved === void 0) return;
179
+ const key = readPlaceholderKey(sp);
180
+ const txBody = childrenWithTag(sp, "p:txBody")[0];
181
+ const blocks = textBodyParagraphs(txBody, key?.type, context, slideRels);
182
+ const extras = readShapeTextExtras(txBody);
183
+ return {
184
+ name: shapeName(sp),
185
+ frame: resolved.frame,
186
+ rotationDeg: resolved.rotationDeg,
187
+ ...extras,
188
+ blocks
189
+ };
190
+ }
191
+ function readPicShape(pic, context, slideRels, pkg, parentTransform) {
192
+ const resolved = resolveShapeFrame(pic, context, parentTransform);
193
+ if (resolved === void 0) return;
194
+ const blipFill = childrenWithTag(pic, "p:blipFill")[0];
195
+ const blip = blipFill === void 0 ? void 0 : childrenWithTag(blipFill, "a:blip")[0];
196
+ const rId = blip === void 0 ? void 0 : attr(blip, "r:embed");
197
+ const rel = rId === void 0 ? void 0 : slideRels.get(rId);
198
+ const mediaPart = rel === void 0 ? void 0 : pkg.parts[rel.target];
199
+ const blocks = [];
200
+ if (mediaPart?.kind === "binary") {
201
+ const format = sniffImageFormat(base64ToBytes(mediaPart.base64));
202
+ if (format !== void 0) {
203
+ const image = {
204
+ kind: "image",
205
+ format,
206
+ base64: mediaPart.base64,
207
+ widthPt: resolved.frame.widthPt,
208
+ heightPt: resolved.frame.heightPt
209
+ };
210
+ blocks.push(image);
211
+ }
212
+ }
213
+ return {
214
+ name: shapeName(pic),
215
+ frame: resolved.frame,
216
+ rotationDeg: resolved.rotationDeg,
217
+ ...NO_TEXT_BODY_EXTRAS,
218
+ blocks
219
+ };
220
+ }
221
+ function readTableCell(tc, context, slideRels) {
222
+ const hMerge = attr(tc, "hMerge");
223
+ const vMerge = attr(tc, "vMerge");
224
+ if (hMerge === "1" || vMerge === "1") return { blocks: [] };
225
+ const tcPr = childrenWithTag(tc, "a:tcPr")[0];
226
+ const background = readSolidFillColor(tcPr === void 0 ? void 0 : childrenWithTag(tcPr, "a:solidFill")[0], context.colorMap, context.theme);
227
+ const txBody = childrenWithTag(tc, "a:txBody")[0];
228
+ const gridSpan = attr(tc, "gridSpan");
229
+ const rowSpan = attr(tc, "rowSpan");
230
+ return {
231
+ blocks: textBodyParagraphs(txBody, void 0, context, slideRels),
232
+ colSpan: gridSpan === void 0 ? void 0 : Number(gridSpan),
233
+ rowSpan: rowSpan === void 0 ? void 0 : Number(rowSpan),
234
+ background
235
+ };
236
+ }
237
+ function readTable(tbl, context, slideRels) {
238
+ const tblGrid = childrenWithTag(tbl, "a:tblGrid")[0];
239
+ const columnWidthsPt = tblGrid === void 0 ? [] : childrenWithTag(tblGrid, "a:gridCol").map((col) => emuToPt(Number(attr(col, "w") ?? "0")));
240
+ return {
241
+ kind: "table",
242
+ rows: childrenWithTag(tbl, "a:tr").map((tr) => {
243
+ const h = attr(tr, "h");
244
+ return {
245
+ cells: childrenWithTag(tr, "a:tc").map((tc) => readTableCell(tc, context, slideRels)),
246
+ heightPt: h === void 0 ? void 0 : emuToPt(Number(h))
247
+ };
248
+ }),
249
+ columnWidthsPt
250
+ };
251
+ }
252
+ function readGraphicFrameShape(gf, context, slideRels, parentTransform) {
253
+ const xfrm = readXfrm(childrenWithTag(gf, "p:xfrm")[0]);
254
+ if (xfrm === void 0) return;
255
+ const localFrame = {
256
+ xPt: xfrm.xPt,
257
+ yPt: xfrm.yPt,
258
+ widthPt: xfrm.widthPt,
259
+ heightPt: xfrm.heightPt
260
+ };
261
+ const frame = parentTransform === void 0 ? localFrame : applyGroupTransform(parentTransform, localFrame);
262
+ const rotationDeg = xfrm.rotationDeg === 0 ? void 0 : xfrm.rotationDeg;
263
+ const graphic = childrenWithTag(gf, "a:graphic")[0];
264
+ const graphicData = graphic === void 0 ? void 0 : childrenWithTag(graphic, "a:graphicData")[0];
265
+ const tbl = (graphicData === void 0 ? void 0 : attr(graphicData, "uri")) === TABLE_GRAPHIC_URI && graphicData !== void 0 ? childrenWithTag(graphicData, "a:tbl")[0] : void 0;
266
+ const blocks = tbl === void 0 ? [] : [readTable(tbl, context, slideRels)];
267
+ return {
268
+ name: shapeName(gf),
269
+ frame,
270
+ rotationDeg,
271
+ ...NO_TEXT_BODY_EXTRAS,
272
+ blocks
273
+ };
274
+ }
275
+ function walkShapeTreeChildren(children, parentTransform, context, slideRels, pkg, out) {
276
+ for (const node of children) {
277
+ if (node.type !== "element") continue;
278
+ if (node.tag === "p:sp") {
279
+ const shape = readSpShape(node, context, slideRels, parentTransform);
280
+ if (shape !== void 0) out.push(shape);
281
+ } else if (node.tag === "p:pic") {
282
+ const shape = readPicShape(node, context, slideRels, pkg, parentTransform);
283
+ if (shape !== void 0) out.push(shape);
284
+ } else if (node.tag === "p:graphicFrame") {
285
+ const shape = readGraphicFrameShape(node, context, slideRels, parentTransform);
286
+ if (shape !== void 0) out.push(shape);
287
+ } else if (node.tag === "p:grpSp") {
288
+ const grpSpPr = childrenWithTag(node, "p:grpSpPr")[0];
289
+ const composed = composeGroupTransform(readGroupXfrm(grpSpPr === void 0 ? void 0 : childrenWithTag(grpSpPr, "a:xfrm")[0]), parentTransform);
290
+ walkShapeTreeChildren(node.children, composed, context, slideRels, pkg, out);
291
+ }
292
+ }
293
+ }
294
+ function composeGroupTransform(own, parent) {
295
+ if (own === void 0) return;
296
+ if (parent === void 0) return own;
297
+ const absolute = applyGroupTransform(parent, {
298
+ xPt: own.offXPt,
299
+ yPt: own.offYPt,
300
+ widthPt: own.extWidthPt,
301
+ heightPt: own.extHeightPt
302
+ });
303
+ return {
304
+ ...own,
305
+ offXPt: absolute.xPt,
306
+ offYPt: absolute.yPt,
307
+ extWidthPt: absolute.widthPt,
308
+ extHeightPt: absolute.heightPt
309
+ };
310
+ }
311
+ const NOTES_SLIDE_REL_SUFFIX = "/notesSlide";
312
+ function readNotes(pkg, slidePath) {
313
+ let notesPath;
314
+ for (const rel of resolveRelationships(pkg, slidePath).values()) if (rel.type.endsWith(NOTES_SLIDE_REL_SUFFIX)) {
315
+ notesPath = rel.target;
316
+ break;
317
+ }
318
+ if (notesPath === void 0) return "";
319
+ const notesRoot = rootElement(pkg.parts[notesPath]);
320
+ if (notesRoot === void 0) return "";
321
+ const bodyShape = elementsWithTag([notesRoot], "p:sp").find((shape) => {
322
+ const key = readPlaceholderKey(shape);
323
+ return key !== void 0 && (key.type === void 0 || key.type === "body");
324
+ });
325
+ if (bodyShape !== void 0) {
326
+ const txBody = childrenWithTag(bodyShape, "p:txBody")[0];
327
+ if (txBody !== void 0) return elementsWithTag(txBody.children, "a:t").map(textContent).join("");
328
+ }
329
+ return elementsWithTag([notesRoot], "a:t").map(textContent).join("");
330
+ }
331
+ function readSlide(pkg, slidePath, size) {
332
+ const slideRoot = rootElement(pkg.parts[slidePath]);
333
+ const context = resolveSlideInheritance(pkg, slidePath);
334
+ const slideRels = resolveRelationships(pkg, slidePath);
335
+ const cSld = slideRoot === void 0 ? void 0 : childrenWithTag(slideRoot, "p:cSld")[0];
336
+ const spTree = cSld === void 0 ? void 0 : childrenWithTag(cSld, "p:spTree")[0];
337
+ const shapes = [];
338
+ if (spTree !== void 0) walkShapeTreeChildren(spTree.children, void 0, context, slideRels, pkg, shapes);
339
+ return {
340
+ size,
341
+ shapes,
342
+ notes: readNotes(pkg, slidePath)
343
+ };
344
+ }
345
+ function readPptx(pkg) {
346
+ const presentationRoot = rootElement(pkg.parts[PRESENTATION_PATH]);
347
+ const size = readSlideSize(presentationRoot);
348
+ const slides = readSlidePathsInOrder(pkg, presentationRoot).map((slidePath) => readSlide(pkg, slidePath, size));
349
+ slides.forEach((slide, slideIndex) => {
350
+ slide.shapes.forEach((shape, shapeIndex) => {
351
+ const shapePath = `slides[${slideIndex}].shapes[${shapeIndex}]`;
352
+ shape.sourcePath = shapePath;
353
+ assignSourcePaths(shape.blocks, shapePath);
354
+ });
355
+ });
356
+ return {
357
+ metadata: readCoreProperties(pkg),
358
+ slides
359
+ };
360
+ }
361
+ //#endregion
362
+ export { PptxDocumentSchema, readPptx };
@@ -0,0 +1,85 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region src/typed/shared/color.ts
3
+ const OOXML_PERCENT_SCALE = 1e5;
4
+ function clamp01(x) {
5
+ return Math.max(0, Math.min(1, x));
6
+ }
7
+ function srgbToLinear(c) {
8
+ return c <= .04045 ? c / 12.92 : ((c + .055) / 1.055) ** 2.4;
9
+ }
10
+ function linearToSrgb(c) {
11
+ return c <= .0031308 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - .055;
12
+ }
13
+ function applyShadeOrTint(color, kind, value) {
14
+ const pct = value / OOXML_PERCENT_SCALE;
15
+ const transform = kind === "shade" ? (linear) => linear * pct : (linear) => 1 - (1 - linear) * pct;
16
+ return {
17
+ r: clamp01(linearToSrgb(transform(srgbToLinear(color.r)))),
18
+ g: clamp01(linearToSrgb(transform(srgbToLinear(color.g)))),
19
+ b: clamp01(linearToSrgb(transform(srgbToLinear(color.b))))
20
+ };
21
+ }
22
+ function rgbToHsl(color) {
23
+ const { r, g, b } = color;
24
+ const max = Math.max(r, g, b);
25
+ const min = Math.min(r, g, b);
26
+ const l = (max + min) / 2;
27
+ if (max === min) return {
28
+ h: 0,
29
+ s: 0,
30
+ l
31
+ };
32
+ const d = max - min;
33
+ const s = l > .5 ? d / (2 - max - min) : d / (max + min);
34
+ let h;
35
+ if (max === r) h = (g - b) / d + (g < b ? 6 : 0);
36
+ else if (max === g) h = (b - r) / d + 2;
37
+ else h = (r - g) / d + 4;
38
+ return {
39
+ h: h * 60,
40
+ s,
41
+ l
42
+ };
43
+ }
44
+ function hueToRgbComponent(p, q, hue) {
45
+ let t = hue;
46
+ if (t < 0) t += 1;
47
+ if (t > 1) t -= 1;
48
+ if (t < 1 / 6) return p + (q - p) * 6 * t;
49
+ if (t < 1 / 2) return q;
50
+ if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
51
+ return p;
52
+ }
53
+ function hslToRgb(hsl) {
54
+ const { h, s, l } = hsl;
55
+ if (s === 0) return {
56
+ r: l,
57
+ g: l,
58
+ b: l
59
+ };
60
+ const q = l < .5 ? l * (1 + s) : l + s - l * s;
61
+ const p = 2 * l - q;
62
+ const hk = h / 360;
63
+ return {
64
+ r: clamp01(hueToRgbComponent(p, q, hk + 1 / 3)),
65
+ g: clamp01(hueToRgbComponent(p, q, hk)),
66
+ b: clamp01(hueToRgbComponent(p, q, hk - 1 / 3))
67
+ };
68
+ }
69
+ function applyLumModOrOff(color, kind, value) {
70
+ const hsl = rgbToHsl(color);
71
+ const pct = value / OOXML_PERCENT_SCALE;
72
+ const l = clamp01(kind === "lumMod" ? hsl.l * pct : hsl.l + pct);
73
+ return hslToRgb({
74
+ ...hsl,
75
+ l
76
+ });
77
+ }
78
+ function applyColorTransforms(base, transforms) {
79
+ let color = base;
80
+ for (const t of transforms) if (t.kind === "shade" || t.kind === "tint") color = applyShadeOrTint(color, t.kind, t.value);
81
+ for (const t of transforms) if (t.kind === "lumMod" || t.kind === "lumOff") color = applyLumModOrOff(color, t.kind, t.value);
82
+ return color;
83
+ }
84
+ //#endregion
85
+ exports.applyColorTransforms = applyColorTransforms;
@@ -0,0 +1,9 @@
1
+ import { Color } from "document-schema.js";
2
+ //#region src/typed/shared/color.d.ts
3
+ interface ColorTransform {
4
+ readonly kind: 'shade' | 'tint' | 'lumMod' | 'lumOff';
5
+ readonly value: number;
6
+ }
7
+ declare function applyColorTransforms(base: Color, transforms: readonly ColorTransform[]): Color;
8
+ //#endregion
9
+ export { ColorTransform, applyColorTransforms };
@@ -0,0 +1,9 @@
1
+ import { Color } from "document-schema.js";
2
+ //#region src/typed/shared/color.d.ts
3
+ interface ColorTransform {
4
+ readonly kind: 'shade' | 'tint' | 'lumMod' | 'lumOff';
5
+ readonly value: number;
6
+ }
7
+ declare function applyColorTransforms(base: Color, transforms: readonly ColorTransform[]): Color;
8
+ //#endregion
9
+ export { ColorTransform, applyColorTransforms };
@@ -0,0 +1,84 @@
1
+ //#region src/typed/shared/color.ts
2
+ const OOXML_PERCENT_SCALE = 1e5;
3
+ function clamp01(x) {
4
+ return Math.max(0, Math.min(1, x));
5
+ }
6
+ function srgbToLinear(c) {
7
+ return c <= .04045 ? c / 12.92 : ((c + .055) / 1.055) ** 2.4;
8
+ }
9
+ function linearToSrgb(c) {
10
+ return c <= .0031308 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - .055;
11
+ }
12
+ function applyShadeOrTint(color, kind, value) {
13
+ const pct = value / OOXML_PERCENT_SCALE;
14
+ const transform = kind === "shade" ? (linear) => linear * pct : (linear) => 1 - (1 - linear) * pct;
15
+ return {
16
+ r: clamp01(linearToSrgb(transform(srgbToLinear(color.r)))),
17
+ g: clamp01(linearToSrgb(transform(srgbToLinear(color.g)))),
18
+ b: clamp01(linearToSrgb(transform(srgbToLinear(color.b))))
19
+ };
20
+ }
21
+ function rgbToHsl(color) {
22
+ const { r, g, b } = color;
23
+ const max = Math.max(r, g, b);
24
+ const min = Math.min(r, g, b);
25
+ const l = (max + min) / 2;
26
+ if (max === min) return {
27
+ h: 0,
28
+ s: 0,
29
+ l
30
+ };
31
+ const d = max - min;
32
+ const s = l > .5 ? d / (2 - max - min) : d / (max + min);
33
+ let h;
34
+ if (max === r) h = (g - b) / d + (g < b ? 6 : 0);
35
+ else if (max === g) h = (b - r) / d + 2;
36
+ else h = (r - g) / d + 4;
37
+ return {
38
+ h: h * 60,
39
+ s,
40
+ l
41
+ };
42
+ }
43
+ function hueToRgbComponent(p, q, hue) {
44
+ let t = hue;
45
+ if (t < 0) t += 1;
46
+ if (t > 1) t -= 1;
47
+ if (t < 1 / 6) return p + (q - p) * 6 * t;
48
+ if (t < 1 / 2) return q;
49
+ if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
50
+ return p;
51
+ }
52
+ function hslToRgb(hsl) {
53
+ const { h, s, l } = hsl;
54
+ if (s === 0) return {
55
+ r: l,
56
+ g: l,
57
+ b: l
58
+ };
59
+ const q = l < .5 ? l * (1 + s) : l + s - l * s;
60
+ const p = 2 * l - q;
61
+ const hk = h / 360;
62
+ return {
63
+ r: clamp01(hueToRgbComponent(p, q, hk + 1 / 3)),
64
+ g: clamp01(hueToRgbComponent(p, q, hk)),
65
+ b: clamp01(hueToRgbComponent(p, q, hk - 1 / 3))
66
+ };
67
+ }
68
+ function applyLumModOrOff(color, kind, value) {
69
+ const hsl = rgbToHsl(color);
70
+ const pct = value / OOXML_PERCENT_SCALE;
71
+ const l = clamp01(kind === "lumMod" ? hsl.l * pct : hsl.l + pct);
72
+ return hslToRgb({
73
+ ...hsl,
74
+ l
75
+ });
76
+ }
77
+ function applyColorTransforms(base, transforms) {
78
+ let color = base;
79
+ for (const t of transforms) if (t.kind === "shade" || t.kind === "tint") color = applyShadeOrTint(color, t.kind, t.value);
80
+ for (const t of transforms) if (t.kind === "lumMod" || t.kind === "lumOff") color = applyLumModOrOff(color, t.kind, t.value);
81
+ return color;
82
+ }
83
+ //#endregion
84
+ export { applyColorTransforms };