ooxml-core 1.8.3 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/PptxHandler-AT7FVG5Q.mjs +2 -0
- package/dist/{PptxHandler-BL4B7CZO.mjs → PptxHandler-EX4WBIQQ.mjs} +2 -2
- package/dist/PptxHandler-VFSCECPL.cjs +11 -0
- package/dist/automation/index.cjs +7380 -4682
- package/dist/automation/index.mjs +7380 -4682
- package/dist/chunk-AT66SA5M.cjs +44423 -0
- package/dist/{chunk-TTPZITQN.mjs → chunk-FIELY5PI.mjs} +1 -1
- package/dist/{chunk-ZAP5WLEN.mjs → chunk-IGOA57LE.mjs} +1 -1
- package/dist/chunk-LCS3J3QI.mjs +87604 -0
- package/dist/{chunk-NIHPA63A.mjs → chunk-M76PHYRR.mjs} +54 -37
- package/dist/chunk-OB277ZGE.mjs +44107 -0
- package/dist/{chunk-GAGSCAR3.mjs → chunk-OXHMZS7B.mjs} +552 -178
- package/dist/chunk-SWF7KVL5.cjs +87610 -0
- package/dist/{chunk-Z7IQR4S4.mjs → chunk-WSO4T2LJ.mjs} +246 -21
- package/dist/docx/block-parser.d.ts.map +1 -1
- package/dist/docx/cell-blocks.d.ts +4 -0
- package/dist/docx/cell-blocks.d.ts.map +1 -0
- package/dist/docx/document-paragraphs.d.ts.map +1 -1
- package/dist/docx/document-parts.d.ts +2 -0
- package/dist/docx/document-parts.d.ts.map +1 -1
- package/dist/docx/embedded.cjs +189 -20
- package/dist/docx/embedded.mjs +189 -20
- package/dist/docx/index.cjs +219 -24
- package/dist/docx/index.mjs +219 -24
- package/dist/docx/layout/adapt-table.d.ts.map +1 -1
- package/dist/docx/layout/adapter.d.ts.map +1 -1
- package/dist/docx/layout/flow-paragraph.d.ts +5 -0
- package/dist/docx/layout/flow-paragraph.d.ts.map +1 -1
- package/dist/docx/layout/flow-table.d.ts +2 -1
- package/dist/docx/layout/flow-table.d.ts.map +1 -1
- package/dist/docx/layout/footnote-columns.d.ts +22 -0
- package/dist/docx/layout/footnote-columns.d.ts.map +1 -0
- package/dist/docx/layout/footnote-flow.d.ts +27 -0
- package/dist/docx/layout/footnote-flow.d.ts.map +1 -0
- package/dist/docx/layout/footnote-split.d.ts +7 -0
- package/dist/docx/layout/footnote-split.d.ts.map +1 -0
- package/dist/docx/layout/index.cjs +1099 -92
- package/dist/docx/layout/index.mjs +1099 -92
- package/dist/docx/layout/input.d.ts +17 -1
- package/dist/docx/layout/input.d.ts.map +1 -1
- package/dist/docx/layout/legacy-footnote-flow.d.ts +18 -0
- package/dist/docx/layout/legacy-footnote-flow.d.ts.map +1 -0
- package/dist/docx/layout/line-metrics.d.ts.map +1 -1
- package/dist/docx/layout/page-cursor.d.ts +13 -8
- package/dist/docx/layout/page-cursor.d.ts.map +1 -1
- package/dist/docx/layout/page-flow.d.ts.map +1 -1
- package/dist/docx/layout/paragraph-layout.d.ts.map +1 -1
- package/dist/docx/layout/paragraph-tokens.d.ts +2 -0
- package/dist/docx/layout/paragraph-tokens.d.ts.map +1 -1
- package/dist/docx/layout/reference-footnotes.d.ts +7 -0
- package/dist/docx/layout/reference-footnotes.d.ts.map +1 -0
- package/dist/docx/layout/result.d.ts +31 -0
- package/dist/docx/layout/result.d.ts.map +1 -1
- package/dist/docx/layout/section-flow.d.ts +2 -0
- package/dist/docx/layout/section-flow.d.ts.map +1 -1
- package/dist/docx/layout/table-cell-layout.d.ts +11 -0
- package/dist/docx/layout/table-cell-layout.d.ts.map +1 -0
- package/dist/docx/layout/table-footnotes.d.ts +27 -0
- package/dist/docx/layout/table-footnotes.d.ts.map +1 -0
- package/dist/docx/layout/table-layout.d.ts +10 -4
- package/dist/docx/layout/table-layout.d.ts.map +1 -1
- package/dist/docx/load/index.cjs +194 -25
- package/dist/docx/load/index.mjs +194 -25
- package/dist/docx/model-run.d.ts +2 -0
- package/dist/docx/model-run.d.ts.map +1 -1
- package/dist/docx/model.d.ts +7 -0
- package/dist/docx/model.d.ts.map +1 -1
- package/dist/docx/notes.d.ts +5 -0
- package/dist/docx/notes.d.ts.map +1 -1
- package/dist/docx/parse-table.d.ts.map +1 -1
- package/dist/docx/parse.d.ts.map +1 -1
- package/dist/docx/save.d.ts.map +1 -1
- package/dist/docx/section-model.d.ts +2 -0
- package/dist/docx/section-model.d.ts.map +1 -1
- package/dist/docx/sections.d.ts.map +1 -1
- package/dist/docx/settings.d.ts +2 -0
- package/dist/docx/settings.d.ts.map +1 -1
- package/dist/docx/table-model.d.ts +3 -1
- package/dist/docx/table-model.d.ts.map +1 -1
- package/dist/docx/ui/index.cjs +55 -0
- package/dist/docx/ui/index.d.ts +1 -0
- package/dist/docx/ui/index.d.ts.map +1 -1
- package/dist/docx/ui/index.mjs +55 -1
- package/dist/docx/ui/table-structure-guard.d.ts +4 -0
- package/dist/docx/ui/table-structure-guard.d.ts.map +1 -0
- package/dist/docx/write-footnote-columns.d.ts +3 -0
- package/dist/docx/write-footnote-columns.d.ts.map +1 -0
- package/dist/docx/write-notes.d.ts.map +1 -1
- package/dist/docx/write-run.d.ts.map +1 -1
- package/dist/docx/write-sections.d.ts.map +1 -1
- package/dist/index.cjs +8 -5
- package/dist/index.mjs +8 -5
- package/dist/opc/clone-part-graph.d.ts +4 -0
- package/dist/opc/clone-part-graph.d.ts.map +1 -1
- package/dist/opc/index.cjs +8 -5
- package/dist/opc/index.mjs +8 -5
- package/dist/pptx/automation/index.cjs +621 -207
- package/dist/pptx/automation/index.d.ts +3 -3
- package/dist/pptx/automation/index.mjs +5 -5
- package/dist/pptx/chunks/{index-Cn-GzYGp.d.ts → index-B4cnSPNz.d.ts} +33 -4
- package/dist/pptx/chunks/index-B4cnSPNz.d.ts.map +1 -0
- package/dist/pptx/chunks/{index-CKIUurnd.d.ts → index-BZh-IMkN.d.ts} +14 -9
- package/dist/pptx/chunks/{index-CKIUurnd.d.ts.map → index-BZh-IMkN.d.ts.map} +1 -1
- package/dist/pptx/chunks/{text-operations-BHfAm5K9.d.ts → text-operations-BLodkuXE.d.ts} +29 -12
- package/dist/pptx/chunks/text-operations-BLodkuXE.d.ts.map +1 -0
- package/dist/pptx/cli/index.cjs +622 -213
- package/dist/pptx/cli/index.d.ts +1 -1
- package/dist/pptx/cli/index.mjs +4 -4
- package/dist/pptx/converter/index.cjs +53 -36
- package/dist/pptx/converter/index.d.ts +1 -1
- package/dist/pptx/converter/index.mjs +2 -2
- package/dist/pptx/editor/render/find-replace.cjs +416 -45
- package/dist/pptx/editor/render/find-replace.d.ts +35 -4
- package/dist/pptx/editor/render/find-replace.d.ts.map +1 -1
- package/dist/pptx/editor/render/find-replace.mjs +416 -46
- package/dist/pptx/editor/render/slide-operations.cjs +87 -0
- package/dist/pptx/editor/render/slide-operations.d.ts +17 -1
- package/dist/pptx/editor/render/slide-operations.d.ts.map +1 -1
- package/dist/pptx/editor/render/slide-operations.mjs +83 -1
- package/dist/pptx/editor/render/slide-search.cjs +6 -10
- package/dist/pptx/editor/render/slide-search.d.ts +1 -1
- package/dist/pptx/editor/render/slide-search.mjs +6 -10
- package/dist/pptx/editor/render/template-editing.d.ts +1 -1
- package/dist/pptx/editor/render/template-editing.d.ts.map +1 -1
- package/dist/pptx/index.cjs +889 -237
- package/dist/pptx/index.d.ts +4 -4
- package/dist/pptx/index.mjs +5 -5
- package/dist/teams/index.cjs +672 -37
- package/dist/teams/index.mjs +672 -37
- package/dist/visio/accessibility.d.ts +10 -0
- package/dist/visio/accessibility.d.ts.map +1 -0
- package/dist/visio/cell-formula.d.ts +2 -0
- package/dist/visio/cell-formula.d.ts.map +1 -1
- package/dist/visio/connector-curve-aligned.d.ts +5 -0
- package/dist/visio/connector-curve-aligned.d.ts.map +1 -0
- package/dist/visio/connector-curve-spans.d.ts +14 -0
- package/dist/visio/connector-curve-spans.d.ts.map +1 -0
- package/dist/visio/connector-jumps.d.ts +5 -0
- package/dist/visio/connector-jumps.d.ts.map +1 -0
- package/dist/visio/connector-route-walk.d.ts +2 -1
- package/dist/visio/connector-route-walk.d.ts.map +1 -1
- package/dist/visio/edit-alt-text-scope.d.ts +5 -0
- package/dist/visio/edit-alt-text-scope.d.ts.map +1 -0
- package/dist/visio/edit-alt-text.d.ts +3 -0
- package/dist/visio/edit-alt-text.d.ts.map +1 -0
- package/dist/visio/edit-commands.d.ts +7 -2
- package/dist/visio/edit-commands.d.ts.map +1 -1
- package/dist/visio/edit-formatting-commands.d.ts +5 -0
- package/dist/visio/edit-formatting-commands.d.ts.map +1 -1
- package/dist/visio/edit-formatting-paint.d.ts.map +1 -1
- package/dist/visio/edit-formatting-scope.d.ts.map +1 -1
- package/dist/visio/edit-line-jump-cache.d.ts +4 -0
- package/dist/visio/edit-line-jump-cache.d.ts.map +1 -0
- package/dist/visio/edit-master-index.d.ts.map +1 -1
- package/dist/visio/edit-metadata-commands.d.ts +10 -2
- package/dist/visio/edit-metadata-commands.d.ts.map +1 -1
- package/dist/visio/edit-metadata.d.ts +3 -1
- package/dist/visio/edit-metadata.d.ts.map +1 -1
- package/dist/visio/edit-page-alt-text.d.ts +4 -0
- package/dist/visio/edit-page-alt-text.d.ts.map +1 -0
- package/dist/visio/edit-page-layout.d.ts.map +1 -1
- package/dist/visio/edit-page-rename.d.ts.map +1 -1
- package/dist/visio/edit-page-setup-commands.d.ts +7 -1
- package/dist/visio/edit-page-setup-commands.d.ts.map +1 -1
- package/dist/visio/edit-page-size.d.ts.map +1 -1
- package/dist/visio/edit-pages.d.ts.map +1 -1
- package/dist/visio/edit-recalculate-index.d.ts.map +1 -1
- package/dist/visio/edit-scope.d.ts.map +1 -1
- package/dist/visio/edit-shape-create.d.ts.map +1 -1
- package/dist/visio/edit-stencil-connector-write.d.ts.map +1 -1
- package/dist/visio/edit-style-admission.d.ts.map +1 -1
- package/dist/visio/edit-text.d.ts.map +1 -1
- package/dist/visio/edit.d.ts +1 -1
- package/dist/visio/edit.d.ts.map +1 -1
- package/dist/visio/index.cjs +1091 -233
- package/dist/visio/index.d.ts +2 -1
- package/dist/visio/index.d.ts.map +1 -1
- package/dist/visio/index.mjs +1091 -234
- package/dist/visio/line-jumps.d.ts +1 -5
- package/dist/visio/line-jumps.d.ts.map +1 -1
- package/dist/visio/model.d.ts +13 -0
- package/dist/visio/model.d.ts.map +1 -1
- package/dist/visio/page-layout.d.ts +11 -2
- package/dist/visio/page-layout.d.ts.map +1 -1
- package/dist/visio/parser.d.ts.map +1 -1
- package/dist/visio/shape-metadata.d.ts +6 -0
- package/dist/visio/shape-metadata.d.ts.map +1 -1
- package/dist/visio/shapes.d.ts.map +1 -1
- package/dist/visio/text-field-case.d.ts +2 -0
- package/dist/visio/text-field-case.d.ts.map +1 -0
- package/dist/visio/text-field-display.d.ts.map +1 -1
- package/dist/visio/text-field-numeric.d.ts +4 -0
- package/dist/visio/text-field-numeric.d.ts.map +1 -0
- package/dist/visio/ui/connector-preview.d.ts +1 -1
- package/dist/visio/ui/connector-preview.d.ts.map +1 -1
- package/dist/visio/ui/data-graphic-rules.d.ts +2 -0
- package/dist/visio/ui/data-graphic-rules.d.ts.map +1 -1
- package/dist/visio/ui/data-graphics.d.ts +3 -2
- package/dist/visio/ui/data-graphics.d.ts.map +1 -1
- package/dist/visio/ui/edit-commands.d.ts.map +1 -1
- package/dist/visio/ui/index.cjs +16898 -15855
- package/dist/visio/ui/index.mjs +16898 -15856
- package/dist/visio/ui/scene-details.d.ts.map +1 -1
- package/dist/visio/ui/scene-validation.d.ts.map +1 -1
- package/dist/visio/ui/snapshot-scene.d.ts +2 -1
- package/dist/visio/ui/snapshot-scene.d.ts.map +1 -1
- package/dist/visio/xml-attribute-whitespace.d.ts +5 -0
- package/dist/visio/xml-attribute-whitespace.d.ts.map +1 -0
- package/dist/xlsx/edit/index.d.ts +1 -0
- package/dist/xlsx/edit/index.d.ts.map +1 -1
- package/dist/xlsx/edit/insert-guard.d.ts.map +1 -1
- package/dist/xlsx/edit/merge.d.ts.map +1 -1
- package/dist/xlsx/edit/page-breaks.d.ts +5 -0
- package/dist/xlsx/edit/page-breaks.d.ts.map +1 -0
- package/dist/xlsx/edit/pivots.d.ts +8 -0
- package/dist/xlsx/edit/pivots.d.ts.map +1 -0
- package/dist/xlsx/edit/print-titles.d.ts +7 -0
- package/dist/xlsx/edit/print-titles.d.ts.map +1 -0
- package/dist/xlsx/edit/session.d.ts.map +1 -1
- package/dist/xlsx/edit/sheets.d.ts.map +1 -1
- package/dist/xlsx/edit/shift-formulas.d.ts.map +1 -1
- package/dist/xlsx/edit/shift-sheet.d.ts.map +1 -1
- package/dist/xlsx/edit/sparkline-ranges.d.ts +11 -0
- package/dist/xlsx/edit/sparkline-ranges.d.ts.map +1 -0
- package/dist/xlsx/edit/sparkline-xml.d.ts +13 -0
- package/dist/xlsx/edit/sparkline-xml.d.ts.map +1 -0
- package/dist/xlsx/edit/sparklines.d.ts +16 -0
- package/dist/xlsx/edit/sparklines.d.ts.map +1 -0
- package/dist/xlsx/edit/table-edits.d.ts.map +1 -1
- package/dist/xlsx/edit/tables.d.ts.map +1 -1
- package/dist/xlsx/edit/types.d.ts +22 -1
- package/dist/xlsx/edit/types.d.ts.map +1 -1
- package/dist/xlsx/formula/functions/text-regex.d.ts.map +1 -1
- package/dist/xlsx/index.cjs +3415 -1374
- package/dist/xlsx/index.d.ts +1 -0
- package/dist/xlsx/index.d.ts.map +1 -1
- package/dist/xlsx/index.mjs +3396 -1375
- package/dist/xlsx/layout/cell-view.d.ts +2 -0
- package/dist/xlsx/layout/cell-view.d.ts.map +1 -1
- package/dist/xlsx/layout/header-footer.d.ts +58 -0
- package/dist/xlsx/layout/header-footer.d.ts.map +1 -0
- package/dist/xlsx/layout/index.d.ts +5 -0
- package/dist/xlsx/layout/index.d.ts.map +1 -1
- package/dist/xlsx/layout/print-breaks.d.ts +11 -0
- package/dist/xlsx/layout/print-breaks.d.ts.map +1 -0
- package/dist/xlsx/layout/print-layout.d.ts +34 -0
- package/dist/xlsx/layout/print-layout.d.ts.map +1 -0
- package/dist/xlsx/layout/print-merges.d.ts +18 -0
- package/dist/xlsx/layout/print-merges.d.ts.map +1 -0
- package/dist/xlsx/layout/print-repeat.d.ts +12 -0
- package/dist/xlsx/layout/print-repeat.d.ts.map +1 -0
- package/dist/xlsx/layout/print-titles.d.ts +20 -0
- package/dist/xlsx/layout/print-titles.d.ts.map +1 -0
- package/dist/xlsx/layout/sparkline-data.d.ts.map +1 -1
- package/dist/xlsx/layout/sparkline-view.d.ts.map +1 -1
- package/dist/xlsx/load/index.cjs +7831 -6961
- package/dist/xlsx/load/index.mjs +7831 -6961
- package/dist/xlsx/model-pivots.d.ts +46 -0
- package/dist/xlsx/model-pivots.d.ts.map +1 -0
- package/dist/xlsx/model.d.ts +5 -0
- package/dist/xlsx/model.d.ts.map +1 -1
- package/dist/xlsx/pivot/admission.d.ts +5 -0
- package/dist/xlsx/pivot/admission.d.ts.map +1 -0
- package/dist/xlsx/pivot/aggregate.d.ts +19 -0
- package/dist/xlsx/pivot/aggregate.d.ts.map +1 -0
- package/dist/xlsx/pivot/cache-xml.d.ts +9 -0
- package/dist/xlsx/pivot/cache-xml.d.ts.map +1 -0
- package/dist/xlsx/pivot/data.d.ts +12 -0
- package/dist/xlsx/pivot/data.d.ts.map +1 -0
- package/dist/xlsx/pivot/hierarchy.d.ts +7 -0
- package/dist/xlsx/pivot/hierarchy.d.ts.map +1 -0
- package/dist/xlsx/pivot/index.d.ts +3 -0
- package/dist/xlsx/pivot/index.d.ts.map +1 -0
- package/dist/xlsx/pivot/read.d.ts +5 -0
- package/dist/xlsx/pivot/read.d.ts.map +1 -0
- package/dist/xlsx/pivot/table-xml.d.ts +5 -0
- package/dist/xlsx/pivot/table-xml.d.ts.map +1 -0
- package/dist/xlsx/pivot/write.d.ts +11 -0
- package/dist/xlsx/pivot/write.d.ts.map +1 -0
- package/dist/xlsx/read/load.d.ts.map +1 -1
- package/dist/xlsx/read/sheet-props.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/i18n/index.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/i18n/navigation.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/i18n/pivots.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/pivots.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/print-layout.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/print-layout.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/sparklines.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/sparklines.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/tools.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/page-breaks.d.ts +3 -0
- package/dist/xlsx/ui/commands/page-breaks.d.ts.map +1 -0
- package/dist/xlsx/ui/index.cjs +2451 -737
- package/dist/xlsx/ui/index.d.ts +1 -0
- package/dist/xlsx/ui/index.d.ts.map +1 -1
- package/dist/xlsx/ui/index.mjs +2451 -738
- package/dist/xlsx/write/chart-cache.d.ts +8 -0
- package/dist/xlsx/write/chart-cache.d.ts.map +1 -0
- package/dist/xlsx/write/page-setup.d.ts.map +1 -1
- package/dist/xlsx/write/save.d.ts.map +1 -1
- package/dist/xlsx/write/sheet-parts.d.ts +1 -0
- package/dist/xlsx/write/sheet-parts.d.ts.map +1 -1
- package/dist/xlsx/write/workbook-part.d.ts +1 -1
- package/dist/xlsx/write/workbook-part.d.ts.map +1 -1
- package/dist/xlsx/write/worksheet.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/pptx/chunks/index-Cn-GzYGp.d.ts.map +0 -1
- package/dist/pptx/chunks/text-operations-BHfAm5K9.d.ts.map +0 -1
|
@@ -1,41 +1,379 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkAT66SA5M_cjs = require('../../../chunk-AT66SA5M.cjs');
|
|
4
|
+
var chunkCPKNMQLX_cjs = require('../../../chunk-CPKNMQLX.cjs');
|
|
5
|
+
require('../../../chunk-7IUNOWFJ.cjs');
|
|
6
|
+
require('../../../chunk-Y6665UXH.cjs');
|
|
7
|
+
require('../../../chunk-RGLJ6BCK.cjs');
|
|
8
|
+
require('../../../chunk-R6Z5C4DA.cjs');
|
|
9
|
+
require('../../../chunk-AT2NLO2F.cjs');
|
|
10
|
+
require('../../../chunk-57KYGHFF.cjs');
|
|
11
|
+
require('../../../chunk-V33BRBWQ.cjs');
|
|
12
|
+
|
|
13
|
+
// pptx/editor/render/chart-find-source-guards.ts
|
|
14
|
+
function chartSourceReferenceCounts(slides) {
|
|
15
|
+
const counts = /* @__PURE__ */ new Map();
|
|
16
|
+
function visit(elements) {
|
|
17
|
+
for (const element of elements) {
|
|
18
|
+
if (element.type === "group") visit(element.children);
|
|
19
|
+
else if (element.type === "chart" && element.chartData?.chartPartPath) {
|
|
20
|
+
const part = element.chartData.chartPartPath;
|
|
21
|
+
counts.set(part, (counts.get(part) ?? 0) + 1);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
for (const slide of slides) visit(slide.elements);
|
|
26
|
+
return counts;
|
|
27
|
+
}
|
|
28
|
+
function findMatchChartSource(slides, match) {
|
|
29
|
+
let element = slides[match.slideIndex]?.elements.find((item) => item.id === match.elementId);
|
|
30
|
+
for (const index of match.elementPath ?? []) {
|
|
31
|
+
element = element?.type === "group" ? element.children[index] : void 0;
|
|
32
|
+
}
|
|
33
|
+
return element?.type === "chart" ? element.chartData?.chartPartPath : void 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// pptx/editor/render/chart-label-editability.ts
|
|
37
|
+
var LITERAL_CATEGORY_TYPES = /* @__PURE__ */ new Set([
|
|
38
|
+
"bar",
|
|
39
|
+
"line",
|
|
40
|
+
"pie",
|
|
41
|
+
"ofPie",
|
|
42
|
+
"doughnut",
|
|
43
|
+
"area",
|
|
44
|
+
"radar",
|
|
45
|
+
"bar3D",
|
|
46
|
+
"line3D",
|
|
47
|
+
"pie3D",
|
|
48
|
+
"area3D",
|
|
49
|
+
"surface"
|
|
50
|
+
]);
|
|
51
|
+
function chartLabelsAreEditable(element) {
|
|
52
|
+
const data = element.chartData;
|
|
53
|
+
if (!data) return false;
|
|
54
|
+
if (data.dataLabelTextEditable !== void 0) {
|
|
55
|
+
const shape = data.dataLabelSourceShape;
|
|
56
|
+
return data.dataLabelTextEditable && (!shape || shape.categoryCount === data.categories.length && shape.seriesValueCounts.length === data.series.length && shape.seriesValueCounts.every(
|
|
57
|
+
(count, index) => count === data.series[index]?.values.length
|
|
58
|
+
));
|
|
59
|
+
}
|
|
60
|
+
return !element.rawXml && !data.chartPartPath && !data.externalData && !data.categoryLevels && !data.dateCategories && LITERAL_CATEGORY_TYPES.has(data.chartType) && data.categories.length > 0 && data.series.length > 0 && data.series.every(
|
|
61
|
+
(series) => series.values.length === data.categories.length && series.values.every(Number.isFinite)
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// pptx/editor/render/find-text-targets.ts
|
|
66
|
+
function* smartArtNodes(nodes) {
|
|
67
|
+
for (const node of nodes) {
|
|
68
|
+
yield node;
|
|
69
|
+
if (node.children) yield* smartArtNodes(node.children);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function textRuns(cell) {
|
|
73
|
+
return cell.textRuns?.length ? cell.textRuns : [{ text: cell.text }];
|
|
74
|
+
}
|
|
75
|
+
function* findTextTargets(element, elementId = element.id, path = [], includeChartTitles = true, includeChartData = false) {
|
|
76
|
+
const location = { elementId, ...path.length ? { elementPath: path } : {} };
|
|
77
|
+
if (element.type === "group") {
|
|
78
|
+
for (const [index, child] of element.children.entries())
|
|
79
|
+
yield* findTextTargets(
|
|
80
|
+
child,
|
|
81
|
+
elementId,
|
|
82
|
+
[...path, index],
|
|
83
|
+
includeChartTitles,
|
|
84
|
+
includeChartData
|
|
85
|
+
);
|
|
86
|
+
} else if (chunkAT66SA5M_cjs.hasTextProperties(element)) {
|
|
87
|
+
const runs = element.textSegments?.length ? element.textSegments : element.text ? [{ text: element.text, style: element.textStyle ?? {} }] : [];
|
|
88
|
+
yield { ...location, runs };
|
|
89
|
+
} else if (element.type === "table" && element.tableData) {
|
|
90
|
+
for (const [rowIndex, row] of element.tableData.rows.entries())
|
|
91
|
+
for (const [colIndex, cell] of row.cells.entries())
|
|
92
|
+
yield { ...location, tableCell: { rowIndex, colIndex }, runs: textRuns(cell) };
|
|
93
|
+
} else if (element.type === "smartArt" && element.smartArtData) {
|
|
94
|
+
for (const node of smartArtNodes(element.smartArtData.nodes))
|
|
95
|
+
yield { ...location, smartArtNodeId: node.id, runs: [{ text: node.text }] };
|
|
96
|
+
} else if (element.type === "chart" && element.chartData) {
|
|
97
|
+
const chart = element.chartData;
|
|
98
|
+
if (includeChartTitles && chart.style?.hasTitle !== false) {
|
|
99
|
+
const runs = chart.titleRuns?.length ? chart.titleRuns : chart.title ? [{ text: chart.title }] : [];
|
|
100
|
+
yield { ...location, chartTitle: true, readOnly: chart.titleTextEditable === false, runs };
|
|
101
|
+
}
|
|
102
|
+
if (includeChartData) {
|
|
103
|
+
const readOnly = !chartLabelsAreEditable(element);
|
|
104
|
+
for (const [chartSeriesIndex, series] of chart.series.entries())
|
|
105
|
+
yield { ...location, chartSeriesIndex, readOnly, runs: [{ text: series.name }] };
|
|
106
|
+
for (const [chartCategoryIndex, text] of chart.categories.entries())
|
|
107
|
+
yield { ...location, chartCategoryIndex, readOnly, runs: [{ text }] };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function isFindBreak(run) {
|
|
112
|
+
return Boolean(run.isParagraphBreak || run.isLineBreak || run.text === "\n");
|
|
113
|
+
}
|
|
114
|
+
function replaceFindRuns(runs, startIndex, startOffset, length, replacement) {
|
|
115
|
+
const first = runs[startIndex];
|
|
116
|
+
if (!first || isFindBreak(first) || startOffset < 0 || startOffset >= first.text.length || length <= 0)
|
|
117
|
+
return void 0;
|
|
118
|
+
const next = [...runs];
|
|
119
|
+
let remaining = length;
|
|
120
|
+
for (let index = startIndex; index < runs.length && remaining > 0; index++) {
|
|
121
|
+
const run = runs[index];
|
|
122
|
+
if (isFindBreak(run)) return void 0;
|
|
123
|
+
const offset = index === startIndex ? startOffset : 0;
|
|
124
|
+
const removed = Math.min(remaining, run.text.length - offset);
|
|
125
|
+
next[index] = {
|
|
126
|
+
...run,
|
|
127
|
+
text: run.text.slice(0, offset) + (index === startIndex ? replacement : "") + run.text.slice(offset + removed)
|
|
128
|
+
};
|
|
129
|
+
remaining -= removed;
|
|
130
|
+
}
|
|
131
|
+
return remaining === 0 ? next : void 0;
|
|
132
|
+
}
|
|
133
|
+
function* findSlideTextTargets(slide, includeNotes = false, includeChartTitles = true, includeChartData = false) {
|
|
134
|
+
for (const element of slide.elements)
|
|
135
|
+
yield* findTextTargets(element, element.id, [], includeChartTitles, includeChartData);
|
|
136
|
+
if (includeNotes && slide.notes) {
|
|
137
|
+
const runs = slide.notesSegments?.length && slide.notesSegments.map((run) => run.text).join("") === slide.notes ? slide.notesSegments : [{ text: slide.notes, style: {} }];
|
|
138
|
+
yield { elementId: "", notes: true, runs };
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// pptx/editor/render/find-replace-target.ts
|
|
143
|
+
function patchTableXml(element, rowIndex, colIndex, original, runs) {
|
|
144
|
+
if (!element.rawXml) return void 0;
|
|
145
|
+
const rawXml = structuredClone(element.rawXml);
|
|
146
|
+
const table = chunkAT66SA5M_cjs.getTblFromRawXml(rawXml);
|
|
147
|
+
const row = chunkAT66SA5M_cjs.ensureArray(table?.["a:tr"])[rowIndex];
|
|
148
|
+
const cell = chunkAT66SA5M_cjs.ensureArray(row?.["a:tc"])[colIndex];
|
|
149
|
+
const paragraphs = chunkAT66SA5M_cjs.ensureArray(
|
|
150
|
+
cell?.["a:txBody"]?.["a:p"]
|
|
151
|
+
);
|
|
152
|
+
let paragraphIndex = 0, runIndex = 0, fieldIndex = 0;
|
|
153
|
+
for (let index = 0; index < original.length; index++) {
|
|
154
|
+
const previous = original[index];
|
|
155
|
+
if (previous.isParagraphBreak) {
|
|
156
|
+
paragraphIndex++;
|
|
157
|
+
runIndex = 0;
|
|
158
|
+
fieldIndex = 0;
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (previous.isLineBreak) continue;
|
|
162
|
+
const paragraph = paragraphs[paragraphIndex];
|
|
163
|
+
const key = previous.isField ? "a:fld" : "a:r";
|
|
164
|
+
const xmlRun = chunkAT66SA5M_cjs.ensureArray(paragraph?.[key])[previous.isField ? fieldIndex++ : runIndex++];
|
|
165
|
+
if (!xmlRun) return void 0;
|
|
166
|
+
if (previous.text !== runs[index].text) xmlRun["a:t"] = runs[index].text;
|
|
167
|
+
}
|
|
168
|
+
return rawXml;
|
|
169
|
+
}
|
|
170
|
+
function updateNode(nodes, nodeId, text) {
|
|
171
|
+
return nodes.map((node) => {
|
|
172
|
+
if (node.id === nodeId) {
|
|
173
|
+
const originalParagraphs = node.paragraphs ?? (node.runs?.length ? [{ items: node.runs.map((run) => ({ kind: "run", run })) }] : void 0);
|
|
174
|
+
const paragraphs = originalParagraphs ? chunkAT66SA5M_cjs.reconcileSmartArtTextParagraphs(originalParagraphs, text) : void 0;
|
|
175
|
+
return { ...node, text, ...paragraphs ? { paragraphs } : {} };
|
|
176
|
+
}
|
|
177
|
+
if (!node.children) return node;
|
|
178
|
+
const children = updateNode(node.children, nodeId, text);
|
|
179
|
+
return children.every((child, index) => child === node.children[index]) ? node : { ...node, children };
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
function replaceLeaf(element, match, replacement) {
|
|
183
|
+
if ((match.chartSeriesIndex !== void 0 || match.chartCategoryIndex !== void 0) && element.type === "chart" && element.chartData) {
|
|
184
|
+
const data = element.chartData;
|
|
185
|
+
if (!chartLabelsAreEditable(element))
|
|
186
|
+
throw new Error("Chart labels require editing in PowerPoint or their source workbook");
|
|
187
|
+
const text = match.chartSeriesIndex !== void 0 ? data.series[match.chartSeriesIndex]?.name : data.categories[match.chartCategoryIndex];
|
|
188
|
+
if (text === void 0) return element;
|
|
189
|
+
const next = replaceFindRuns(
|
|
190
|
+
[{ text }],
|
|
191
|
+
match.segmentIndex,
|
|
192
|
+
match.startOffset,
|
|
193
|
+
match.length,
|
|
194
|
+
replacement
|
|
195
|
+
);
|
|
196
|
+
if (!next) return element;
|
|
197
|
+
return {
|
|
198
|
+
...element,
|
|
199
|
+
chartData: {
|
|
200
|
+
...data,
|
|
201
|
+
dataLabelTextOnly: true,
|
|
202
|
+
...match.chartSeriesIndex !== void 0 ? {
|
|
203
|
+
series: data.series.map(
|
|
204
|
+
(series, index) => index === match.chartSeriesIndex ? { ...series, name: next[0].text } : series
|
|
205
|
+
)
|
|
206
|
+
} : {
|
|
207
|
+
categories: data.categories.map(
|
|
208
|
+
(category, index) => index === match.chartCategoryIndex ? next[0].text : category
|
|
209
|
+
)
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
if (match.chartTitle && element.type === "chart" && element.chartData) {
|
|
215
|
+
const data = element.chartData;
|
|
216
|
+
if (data.titleTextEditable === false)
|
|
217
|
+
throw new Error("This chart title requires editing in PowerPoint or its source workbook");
|
|
218
|
+
const runs = data.titleRuns?.length ? data.titleRuns : [{ text: data.title ?? "" }];
|
|
219
|
+
const next = replaceFindRuns(
|
|
220
|
+
runs,
|
|
221
|
+
match.segmentIndex,
|
|
222
|
+
match.startOffset,
|
|
223
|
+
match.length,
|
|
224
|
+
replacement
|
|
225
|
+
);
|
|
226
|
+
if (!next) return element;
|
|
227
|
+
return {
|
|
228
|
+
...element,
|
|
229
|
+
chartData: {
|
|
230
|
+
...data,
|
|
231
|
+
title: next[0]?.text ?? "",
|
|
232
|
+
titleRuns: next,
|
|
233
|
+
titleTextOnly: true,
|
|
234
|
+
titleTextOnlyStyles: data.titleTextOnlyStyles ?? runs.map(({ text: _text, ...style }) => style),
|
|
235
|
+
style: { ...data.style, hasTitle: next.some((run) => run.text.length > 0) }
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
if (match.tableCell && element.type === "table" && element.tableData) {
|
|
240
|
+
const { rowIndex, colIndex } = match.tableCell;
|
|
241
|
+
const row = element.tableData.rows[rowIndex], cell = row?.cells[colIndex];
|
|
242
|
+
if (!cell) return element;
|
|
243
|
+
const original2 = cell.textRuns?.length ? cell.textRuns : [{ text: cell.text }];
|
|
244
|
+
const runs = replaceFindRuns(
|
|
245
|
+
original2,
|
|
246
|
+
match.segmentIndex,
|
|
247
|
+
match.startOffset,
|
|
248
|
+
match.length,
|
|
249
|
+
replacement
|
|
250
|
+
);
|
|
251
|
+
if (!runs) return element;
|
|
252
|
+
let text = runs.map((run) => run.isParagraphBreak ? "\n" : run.isLineBreak ? "" : run.text).join("");
|
|
253
|
+
let rawXml = cell.textRuns?.length ? patchTableXml(element, rowIndex, colIndex, original2, runs) : chunkAT66SA5M_cjs.updateCellTextInRawXml(element, rowIndex, colIndex, text);
|
|
254
|
+
if (rawXml) {
|
|
255
|
+
const table = chunkAT66SA5M_cjs.getTblFromRawXml(rawXml);
|
|
256
|
+
const xmlRow = chunkAT66SA5M_cjs.ensureArray(table?.["a:tr"])[rowIndex];
|
|
257
|
+
const xmlCell = chunkAT66SA5M_cjs.ensureArray(xmlRow?.["a:tc"])[colIndex];
|
|
258
|
+
text = chunkAT66SA5M_cjs.flattenCellTxBodyText(
|
|
259
|
+
xmlCell?.["a:txBody"],
|
|
260
|
+
(value) => chunkAT66SA5M_cjs.ensureArray(value)
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
const rows = [...element.tableData.rows], cells = [...row.cells];
|
|
264
|
+
cells[colIndex] = { ...cell, text, ...cell.textRuns ? { textRuns: runs } : {} };
|
|
265
|
+
rows[rowIndex] = { ...row, cells };
|
|
266
|
+
return { ...element, tableData: { ...element.tableData, rows }, ...rawXml ? { rawXml } : {} };
|
|
267
|
+
}
|
|
268
|
+
if (match.smartArtNodeId && element.type === "smartArt" && element.smartArtData) {
|
|
269
|
+
const data = element.smartArtData;
|
|
270
|
+
const nodes = [...smartArtNodes(data.nodes)], node = nodes.find((candidate) => candidate.id === match.smartArtNodeId);
|
|
271
|
+
if (!node || match.startOffset < 0 || match.startOffset + match.length > node.text.length)
|
|
272
|
+
return element;
|
|
273
|
+
const text = node.text.slice(0, match.startOffset) + replacement + node.text.slice(match.startOffset + match.length);
|
|
274
|
+
const next = chunkAT66SA5M_cjs.updateSmartArtNodeText({ ...data, nodes }, node.id, text);
|
|
275
|
+
const drawingShapes = next.drawingShapes?.map((shape, index) => {
|
|
276
|
+
if (shape === data.drawingShapes?.[index] || !shape.textSegments) return shape;
|
|
277
|
+
return {
|
|
278
|
+
...shape,
|
|
279
|
+
textSegments: chunkCPKNMQLX_cjs.remapTextToSegments(text, shape.textSegments, { fontSize: shape.fontSize })
|
|
280
|
+
};
|
|
281
|
+
});
|
|
282
|
+
return {
|
|
283
|
+
...element,
|
|
284
|
+
smartArtData: { ...next, drawingShapes, nodes: updateNode(data.nodes, node.id, text) }
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
if (!chunkAT66SA5M_cjs.hasTextProperties(element)) return element;
|
|
288
|
+
const original = element.textSegments?.length ? element.textSegments : element.text ? [{ text: element.text, style: element.textStyle ?? {} }] : [];
|
|
289
|
+
const segments = replaceFindRuns(
|
|
290
|
+
original,
|
|
291
|
+
match.segmentIndex,
|
|
292
|
+
match.startOffset,
|
|
293
|
+
match.length,
|
|
294
|
+
replacement
|
|
295
|
+
);
|
|
296
|
+
if (!segments) return element;
|
|
297
|
+
return {
|
|
298
|
+
...element,
|
|
299
|
+
textSegments: segments,
|
|
300
|
+
text: segments.map((run) => isFindBreak(run) ? "\n" : run.text).join("")
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
function replaceFindTarget(element, match, replacement, path = match.elementPath ?? []) {
|
|
304
|
+
if (!path.length) return replaceLeaf(element, match, replacement);
|
|
305
|
+
if (element.type !== "group") return element;
|
|
306
|
+
const index = path[0], child = element.children[index];
|
|
307
|
+
if (!child) return element;
|
|
308
|
+
const next = replaceFindTarget(child, match, replacement, path.slice(1));
|
|
309
|
+
if (next === child) return element;
|
|
310
|
+
const children = [...element.children];
|
|
311
|
+
children[index] = next;
|
|
312
|
+
return { ...element, children };
|
|
313
|
+
}
|
|
4
314
|
|
|
5
315
|
// pptx/editor/render/find-replace.ts
|
|
316
|
+
function findReplacementAvailability(matches, index) {
|
|
317
|
+
const hasReadOnly = matches.some((match) => match.readOnly);
|
|
318
|
+
return {
|
|
319
|
+
current: Boolean(matches[index] && !matches[index].readOnly),
|
|
320
|
+
all: matches.length > 0 && !hasReadOnly,
|
|
321
|
+
hasReadOnly
|
|
322
|
+
};
|
|
323
|
+
}
|
|
6
324
|
function findInSlides(slides, query, opts = {}) {
|
|
7
325
|
if (!query) {
|
|
8
326
|
return [];
|
|
9
327
|
}
|
|
10
|
-
const
|
|
11
|
-
const
|
|
328
|
+
const escaped = query.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
329
|
+
const pattern = new RegExp(`(?=(${escaped}))`, opts.matchCase ? "gu" : "giu");
|
|
12
330
|
const results = [];
|
|
331
|
+
const chartSources = chartSourceReferenceCounts(slides);
|
|
13
332
|
for (let slideIndex = 0; slideIndex < slides.length; slideIndex++) {
|
|
14
333
|
const slide = slides[slideIndex];
|
|
15
|
-
for (const
|
|
16
|
-
|
|
17
|
-
|
|
334
|
+
for (const { runs, ...target } of findSlideTextTargets(
|
|
335
|
+
slide,
|
|
336
|
+
opts.includeNotes,
|
|
337
|
+
opts.includeChartTitles,
|
|
338
|
+
opts.includeChartData
|
|
339
|
+
)) {
|
|
340
|
+
if (target.chartTitle || target.chartSeriesIndex !== void 0 || target.chartCategoryIndex !== void 0) {
|
|
341
|
+
const source = findMatchChartSource(slides, { ...target, slideIndex });
|
|
342
|
+
if (source && (chartSources.get(source) ?? 0) > 1) target.readOnly = true;
|
|
18
343
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
offset = pos + 1;
|
|
344
|
+
let text = "", totalOffset = 0, regionOffset = 0;
|
|
345
|
+
let positions = [];
|
|
346
|
+
const flush = () => {
|
|
347
|
+
for (const match of text.matchAll(pattern)) {
|
|
348
|
+
const pos = match.index;
|
|
349
|
+
const run = positions.find(
|
|
350
|
+
(position) => pos >= position.offset && pos < position.offset + position.length
|
|
351
|
+
);
|
|
352
|
+
if (run)
|
|
353
|
+
results.push({
|
|
354
|
+
...target,
|
|
355
|
+
slideIndex,
|
|
356
|
+
segmentIndex: run.index,
|
|
357
|
+
startOffset: pos - run.offset,
|
|
358
|
+
length: match[1].length,
|
|
359
|
+
textOffset: regionOffset + pos
|
|
360
|
+
});
|
|
37
361
|
}
|
|
362
|
+
text = "";
|
|
363
|
+
positions = [];
|
|
364
|
+
};
|
|
365
|
+
for (const [index, run] of runs.entries()) {
|
|
366
|
+
if (isFindBreak(run)) {
|
|
367
|
+
flush();
|
|
368
|
+
totalOffset++;
|
|
369
|
+
regionOffset = totalOffset;
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
positions.push({ index, offset: text.length, length: run.text.length });
|
|
373
|
+
text += run.text;
|
|
374
|
+
totalOffset += run.text.length;
|
|
38
375
|
}
|
|
376
|
+
flush();
|
|
39
377
|
}
|
|
40
378
|
}
|
|
41
379
|
return results;
|
|
@@ -44,9 +382,33 @@ function applyFindReplacements(slides, toReplace, replacement) {
|
|
|
44
382
|
if (toReplace.length === 0) {
|
|
45
383
|
return { slides, replacements: 0 };
|
|
46
384
|
}
|
|
385
|
+
if (toReplace.some((match) => match.readOnly))
|
|
386
|
+
throw new Error(
|
|
387
|
+
"Linked or complex chart text must be edited in PowerPoint or their source workbook"
|
|
388
|
+
);
|
|
389
|
+
const chartSources = chartSourceReferenceCounts(slides);
|
|
390
|
+
if (toReplace.some((match) => {
|
|
391
|
+
if (!match.chartTitle && match.chartSeriesIndex === void 0 && match.chartCategoryIndex === void 0)
|
|
392
|
+
return false;
|
|
393
|
+
const source = findMatchChartSource(slides, match);
|
|
394
|
+
return source && (chartSources.get(source) ?? 0) > 1;
|
|
395
|
+
}))
|
|
396
|
+
throw new Error(
|
|
397
|
+
"Text in a shared chart part requires editing in PowerPoint or its source workbook"
|
|
398
|
+
);
|
|
47
399
|
const grouped = /* @__PURE__ */ new Map();
|
|
48
400
|
for (const match of toReplace) {
|
|
49
|
-
const key =
|
|
401
|
+
const key = JSON.stringify([
|
|
402
|
+
match.slideIndex,
|
|
403
|
+
match.elementId,
|
|
404
|
+
match.elementPath,
|
|
405
|
+
match.tableCell,
|
|
406
|
+
match.smartArtNodeId,
|
|
407
|
+
match.notes,
|
|
408
|
+
match.chartTitle,
|
|
409
|
+
match.chartSeriesIndex,
|
|
410
|
+
match.chartCategoryIndex
|
|
411
|
+
]);
|
|
50
412
|
let bucket = grouped.get(key);
|
|
51
413
|
if (!bucket) {
|
|
52
414
|
bucket = [];
|
|
@@ -57,37 +419,45 @@ function applyFindReplacements(slides, toReplace, replacement) {
|
|
|
57
419
|
const nextSlides = slides.slice();
|
|
58
420
|
let totalReplacements = 0;
|
|
59
421
|
for (const [, matches] of grouped) {
|
|
60
|
-
const sorted = matches.slice().sort((a, b) => b.startOffset - a.startOffset);
|
|
422
|
+
const sorted = matches.slice().sort((a, b) => b.segmentIndex - a.segmentIndex || b.startOffset - a.startOffset);
|
|
423
|
+
let lastOffset = Infinity;
|
|
61
424
|
for (const match of sorted) {
|
|
62
425
|
const slide = nextSlides[match.slideIndex];
|
|
63
426
|
if (!slide) {
|
|
64
427
|
continue;
|
|
65
428
|
}
|
|
429
|
+
if (match.notes) {
|
|
430
|
+
if (match.textOffset !== void 0 && match.textOffset + match.length > lastOffset)
|
|
431
|
+
continue;
|
|
432
|
+
const runs = slide.notesSegments?.length && slide.notesSegments.map((run) => run.text).join("") === slide.notes ? slide.notesSegments : [{ text: slide.notes ?? "", style: {} }];
|
|
433
|
+
const updated2 = replaceFindRuns(
|
|
434
|
+
runs,
|
|
435
|
+
match.segmentIndex,
|
|
436
|
+
match.startOffset,
|
|
437
|
+
match.length,
|
|
438
|
+
replacement
|
|
439
|
+
);
|
|
440
|
+
if (!updated2) continue;
|
|
441
|
+
nextSlides[match.slideIndex] = {
|
|
442
|
+
...slide,
|
|
443
|
+
notes: updated2.map((run) => run.text).join(""),
|
|
444
|
+
notesSegments: updated2
|
|
445
|
+
};
|
|
446
|
+
if (match.textOffset !== void 0) lastOffset = match.textOffset;
|
|
447
|
+
totalReplacements++;
|
|
448
|
+
continue;
|
|
449
|
+
}
|
|
66
450
|
const elIdx = slide.elements.findIndex((e) => e.id === match.elementId);
|
|
67
451
|
if (elIdx === -1) {
|
|
68
452
|
continue;
|
|
69
453
|
}
|
|
454
|
+
if (match.textOffset !== void 0 && match.textOffset + match.length > lastOffset) continue;
|
|
70
455
|
const element = slide.elements[elIdx];
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const segments = element.textSegments ?? [];
|
|
75
|
-
const seg = segments[match.segmentIndex];
|
|
76
|
-
if (!seg) {
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
const before = seg.text.slice(0, match.startOffset);
|
|
80
|
-
const after = seg.text.slice(match.startOffset + match.length);
|
|
81
|
-
const newSegText = before + replacement + after;
|
|
82
|
-
const nextSegments = segments.slice();
|
|
83
|
-
nextSegments[match.segmentIndex] = { ...seg, text: newSegText };
|
|
84
|
-
const nextText = nextSegments.map((s) => s.text).join("");
|
|
456
|
+
const updated = replaceFindTarget(element, match, replacement);
|
|
457
|
+
if (updated === element) continue;
|
|
458
|
+
if (match.textOffset !== void 0) lastOffset = match.textOffset;
|
|
85
459
|
const nextElements = slide.elements.slice();
|
|
86
|
-
nextElements[elIdx] =
|
|
87
|
-
...element,
|
|
88
|
-
text: nextText,
|
|
89
|
-
textSegments: nextSegments
|
|
90
|
-
};
|
|
460
|
+
nextElements[elIdx] = updated;
|
|
91
461
|
nextSlides[match.slideIndex] = { ...slide, elements: nextElements };
|
|
92
462
|
totalReplacements++;
|
|
93
463
|
}
|
|
@@ -108,5 +478,6 @@ function replaceInSlides(slides, query, replacement, opts = {}) {
|
|
|
108
478
|
|
|
109
479
|
exports.applyFindReplacements = applyFindReplacements;
|
|
110
480
|
exports.findInSlides = findInSlides;
|
|
481
|
+
exports.findReplacementAvailability = findReplacementAvailability;
|
|
111
482
|
exports.replaceInSlides = replaceInSlides;
|
|
112
483
|
exports.replaceMatch = replaceMatch;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { PptxSlide } from "
|
|
1
|
+
import { C as PptxSlide } from "../../chunks/text-operations-BLodkuXE.js";
|
|
2
|
+
import "../../chunks/index-B4cnSPNz.js";
|
|
2
3
|
//#region pptx/editor/render/find-replace.d.ts
|
|
3
4
|
/** Identifies a single match of the find query at segment-level precision. */
|
|
4
5
|
export interface FindResult {
|
|
@@ -12,11 +13,36 @@ export interface FindResult {
|
|
|
12
13
|
startOffset: number;
|
|
13
14
|
/** Number of characters matched (equals `query.length`). */
|
|
14
15
|
length: number;
|
|
16
|
+
/** Child indexes inside the selected top-level group, when the match is nested. */
|
|
17
|
+
elementPath?: number[];
|
|
18
|
+
/** Table-cell coordinates, when the match belongs to a table. */
|
|
19
|
+
tableCell?: {
|
|
20
|
+
rowIndex: number;
|
|
21
|
+
colIndex: number;
|
|
22
|
+
};
|
|
23
|
+
/** Data-model node id, when the match belongs to SmartArt. */
|
|
24
|
+
smartArtNodeId?: string;
|
|
25
|
+
/** Offset within this object's run stream, used to resolve overlapping replacements. */
|
|
26
|
+
textOffset?: number;
|
|
27
|
+
/** Speaker-note body match, rather than a canvas element. */
|
|
28
|
+
notes?: boolean;
|
|
29
|
+
/** Match in the chart title rather than the shape's own text. */
|
|
30
|
+
chartTitle?: boolean;
|
|
31
|
+
chartSeriesIndex?: number;
|
|
32
|
+
chartCategoryIndex?: number;
|
|
33
|
+
/** Linked or complex chart text is searchable but requires source editing. */
|
|
34
|
+
readOnly?: boolean;
|
|
15
35
|
}
|
|
16
36
|
/** Options passed to search and replace helpers. */
|
|
17
37
|
export interface FindOptions {
|
|
18
38
|
/** When `true`, the search is case-sensitive. Defaults to `false`. */
|
|
19
39
|
matchCase?: boolean;
|
|
40
|
+
/** Search speaker notes as well as editable slide text. */
|
|
41
|
+
includeNotes?: boolean;
|
|
42
|
+
/** Include chart titles. Enabled by default; disable to replace only ordinary slide text. */
|
|
43
|
+
includeChartTitles?: boolean;
|
|
44
|
+
/** Opt-in search of series names and category labels, with transactional source editing. */
|
|
45
|
+
includeChartData?: boolean;
|
|
20
46
|
}
|
|
21
47
|
/** Result returned by {@link replaceInSlides} and {@link replaceMatch}. */
|
|
22
48
|
export interface ReplaceResult {
|
|
@@ -25,12 +51,17 @@ export interface ReplaceResult {
|
|
|
25
51
|
/** Number of text replacements actually applied. */
|
|
26
52
|
replacements: number;
|
|
27
53
|
}
|
|
54
|
+
/** Shared replacement gating for searchable text whose source is not safely editable. */
|
|
55
|
+
export declare function findReplacementAvailability(matches: readonly Pick<FindResult, 'readOnly'>[], index: number): {
|
|
56
|
+
current: boolean;
|
|
57
|
+
all: boolean;
|
|
58
|
+
hasReadOnly: boolean;
|
|
59
|
+
};
|
|
28
60
|
/**
|
|
29
61
|
* Search all slides for occurrences of `query` at segment-level precision.
|
|
30
62
|
*
|
|
31
|
-
* -
|
|
32
|
-
*
|
|
33
|
-
* `textSegments`).
|
|
63
|
+
* - Searches shape text, table cells and SmartArt nodes, including nested groups.
|
|
64
|
+
* - Formatting boundaries do not split a match; explicit paragraph/line markers do.
|
|
34
65
|
* - Overlapping matches are counted (search advances by 1 character after each
|
|
35
66
|
* hit, not by `query.length`).
|
|
36
67
|
* - Returns an empty array when `query` is empty.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-replace.d.ts","names":[],"sources":["../../../../pptx/editor/render/find-replace.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"find-replace.d.ts","names":[],"sources":["../../../../pptx/editor/render/find-replace.ts"],"mappings":";;;;iBAiBiB;;EAEhB;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;IAAc;IAAkB;;;EAEhC;;EAEA;;EAEA;;EAEA;EACA;EACA;;EAEA;;;iBAIgB;;EAEhB;;EAEA;;EAEA;;EAEA;;;iBAIgB;;EAEhB,iBAAiB;;EAEjB;;;wBAIe,4BACf,kBAAkB,KAAK,2BACvB;;;;;;;;;;;;;;wBAuBe,aACf,iBAAiB,aACjB,eACA,OAAM,cACJ;;;;;;;;;;wBA4Ea,sBACf,iBAAiB,aACjB,oBAAoB,cACpB,sBACE;;;;;;;;;wBAuHa,aACf,iBAAiB,aACjB,qBAAqB,cACrB,oBACA,sBACE;;;;;;;wBAca,gBACf,iBAAiB,aACjB,eACA,qBACA,OAAM,cACJ"}
|