ooxml-core 1.1.0 → 1.2.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.
- package/README.md +18 -18
- package/dist/{PptxHandler-75LOVF7I.mjs → PptxHandler-VQQS4VS6.mjs} +3 -3
- package/dist/automation/index.cjs +7567 -4401
- package/dist/automation/index.mjs +7567 -4401
- package/dist/chart/bar-cluster-geometry.d.ts +6 -0
- package/dist/chart/bar-cluster-geometry.d.ts.map +1 -1
- package/dist/chart/color-palettes.d.ts +2 -2
- package/dist/chart/color-palettes.d.ts.map +1 -1
- package/dist/chart/data-cache.d.ts +6 -0
- package/dist/chart/data-cache.d.ts.map +1 -0
- package/dist/chart/gradient-coincident-stops.d.ts +17 -0
- package/dist/chart/gradient-coincident-stops.d.ts.map +1 -0
- package/dist/chart/gradient-definition.d.ts +3 -3
- package/dist/chart/gradient-definition.d.ts.map +1 -1
- package/dist/chart/index.cjs +3069 -140
- package/dist/chart/index.d.ts +7 -0
- package/dist/chart/index.d.ts.map +1 -1
- package/dist/chart/index.mjs +3048 -141
- package/dist/chart/model-chrome.d.ts +39 -0
- package/dist/chart/model-chrome.d.ts.map +1 -0
- package/dist/chart/model-series.d.ts +189 -0
- package/dist/chart/model-series.d.ts.map +1 -0
- package/dist/chart/model.d.ts +202 -0
- package/dist/chart/model.d.ts.map +1 -0
- package/dist/chart/parse-chrome.d.ts +16 -0
- package/dist/chart/parse-chrome.d.ts.map +1 -0
- package/dist/chart/parse-plot.d.ts +11 -0
- package/dist/chart/parse-plot.d.ts.map +1 -0
- package/dist/chart/parse-series.d.ts +8 -0
- package/dist/chart/parse-series.d.ts.map +1 -0
- package/dist/chart/parse-space.d.ts +8 -0
- package/dist/chart/parse-space.d.ts.map +1 -0
- package/dist/chart/parse-text.d.ts +12 -0
- package/dist/chart/parse-text.d.ts.map +1 -0
- package/dist/chart/parse-util.d.ts +42 -0
- package/dist/chart/parse-util.d.ts.map +1 -0
- package/dist/{xlsx/layout → chart/render}/chart-appearance.d.ts +4 -4
- package/dist/chart/render/chart-appearance.d.ts.map +1 -0
- package/dist/chart/render/chart-colors.d.ts +9 -0
- package/dist/chart/render/chart-colors.d.ts.map +1 -0
- package/dist/chart/render/chart-scale.d.ts.map +1 -0
- package/dist/chart/render/chart-spacing.d.ts +6 -0
- package/dist/chart/render/chart-spacing.d.ts.map +1 -0
- package/dist/{xlsx/layout → chart/render}/chart-svg-appearance.d.ts +1 -1
- package/dist/chart/render/chart-svg-appearance.d.ts.map +1 -0
- package/dist/chart/render/chart-svg-bars.d.ts.map +1 -0
- package/dist/chart/render/chart-svg-cartesian.d.ts.map +1 -0
- package/dist/chart/render/chart-svg-legend.d.ts.map +1 -0
- package/dist/chart/render/chart-svg-radial.d.ts.map +1 -0
- package/dist/chart/render/chart-svg-text-metrics.d.ts.map +1 -0
- package/dist/chart/render/chart-svg-title-text.d.ts.map +1 -0
- package/dist/chart/render/chart-svg-util.d.ts.map +1 -0
- package/dist/chart/render/chart-svg.d.ts.map +1 -0
- package/dist/chart/render/chart-title-text.d.ts +14 -0
- package/dist/chart/render/chart-title-text.d.ts.map +1 -0
- package/dist/chart/render/chart-value-axis.d.ts +6 -0
- package/dist/chart/render/chart-value-axis.d.ts.map +1 -0
- package/dist/chart/render/chart-view.d.ts +71 -0
- package/dist/chart/render/chart-view.d.ts.map +1 -0
- package/dist/chart/render/index.d.ts +9 -0
- package/dist/chart/render/index.d.ts.map +1 -0
- package/dist/chart/render/render-space.d.ts +34 -0
- package/dist/chart/render/render-space.d.ts.map +1 -0
- package/dist/chart/render/summary-from-space.d.ts +15 -0
- package/dist/chart/render/summary-from-space.d.ts.map +1 -0
- package/dist/chart/render/summary.d.ts +51 -0
- package/dist/chart/render/summary.d.ts.map +1 -0
- package/dist/chart/render/theme-palette.d.ts +8 -0
- package/dist/chart/render/theme-palette.d.ts.map +1 -0
- package/dist/chart/style-definition.d.ts +7 -7
- package/dist/chart/style-definition.d.ts.map +1 -1
- package/dist/chart/write-axes.d.ts +5 -0
- package/dist/chart/write-axes.d.ts.map +1 -0
- package/dist/chart/write-chrome.d.ts +9 -0
- package/dist/chart/write-chrome.d.ts.map +1 -0
- package/dist/chart/write-plot.d.ts +7 -0
- package/dist/chart/write-plot.d.ts.map +1 -0
- package/dist/chart/write-series.d.ts +7 -0
- package/dist/chart/write-series.d.ts.map +1 -0
- package/dist/chart/write-shape.d.ts +21 -0
- package/dist/chart/write-shape.d.ts.map +1 -0
- package/dist/chart/write-space.d.ts +15 -0
- package/dist/chart/write-space.d.ts.map +1 -0
- package/dist/chart/write-text-body.d.ts +6 -0
- package/dist/chart/write-text-body.d.ts.map +1 -0
- package/dist/chart/write-text.d.ts +15 -0
- package/dist/chart/write-text.d.ts.map +1 -0
- package/dist/chart/write-util.d.ts +24 -0
- package/dist/chart/write-util.d.ts.map +1 -0
- package/dist/chart/xml-fragment.d.ts +13 -0
- package/dist/chart/xml-fragment.d.ts.map +1 -0
- package/dist/{chunk-HUBK4EOT.mjs → chunk-3IT6ZD7K.mjs} +2 -0
- package/dist/{chunk-TS3E27NK.mjs → chunk-3UMDVJRN.mjs} +12 -1
- package/dist/{chunk-P22OKTRK.mjs → chunk-54S5A5PZ.mjs} +208 -159
- package/dist/{chunk-OMGH6IKY.mjs → chunk-5U27IVB7.mjs} +42 -5
- package/dist/{chunk-RFX7AJDZ.mjs → chunk-5VLNF4OX.mjs} +2 -2
- package/dist/{chunk-OJI3N5AY.cjs → chunk-FRUB573B.cjs} +2 -0
- package/dist/{chunk-75LA7H3F.mjs → chunk-V2BIGIH4.mjs} +27504 -27464
- package/dist/{chunk-Q27H4HFS.mjs → chunk-XBNSBDNT.mjs} +1 -1
- package/dist/{chunk-2C72N64G.cjs → chunk-XROY25LN.cjs} +12 -0
- package/dist/{chunk-LA7D6ZYQ.mjs → chunk-XSFHGZFH.mjs} +3579 -2083
- package/dist/collab/index.cjs +1 -0
- package/dist/collab/index.mjs +1 -0
- package/dist/collab/transport-provider.d.ts.map +1 -1
- package/dist/color/hex-rgb.d.ts +5 -0
- package/dist/color/hex-rgb.d.ts.map +1 -0
- package/dist/color/index.cjs +12 -0
- package/dist/color/index.d.ts +1 -0
- package/dist/color/index.d.ts.map +1 -1
- package/dist/color/index.mjs +11 -1
- package/dist/diagram/engine/alg-composite.d.ts +18 -0
- package/dist/diagram/engine/alg-composite.d.ts.map +1 -0
- package/dist/diagram/engine/alg-connector.d.ts +17 -0
- package/dist/diagram/engine/alg-connector.d.ts.map +1 -0
- package/dist/diagram/engine/alg-cycle.d.ts +28 -0
- package/dist/diagram/engine/alg-cycle.d.ts.map +1 -0
- package/dist/diagram/engine/alg-hier.d.ts +33 -0
- package/dist/diagram/engine/alg-hier.d.ts.map +1 -0
- package/dist/diagram/engine/alg-linear.d.ts +24 -0
- package/dist/diagram/engine/alg-linear.d.ts.map +1 -0
- package/dist/diagram/engine/alg-pyra.d.ts +117 -0
- package/dist/diagram/engine/alg-pyra.d.ts.map +1 -0
- package/dist/diagram/engine/alg-snake.d.ts +21 -0
- package/dist/diagram/engine/alg-snake.d.ts.map +1 -0
- package/dist/diagram/engine/axis.d.ts +24 -0
- package/dist/diagram/engine/axis.d.ts.map +1 -0
- package/dist/diagram/engine/conditions.d.ts +12 -0
- package/dist/diagram/engine/conditions.d.ts.map +1 -0
- package/dist/diagram/engine/connector-shape.d.ts +25 -0
- package/dist/diagram/engine/connector-shape.d.ts.map +1 -0
- package/dist/diagram/engine/connector-size.d.ts +30 -0
- package/dist/diagram/engine/connector-size.d.ts.map +1 -0
- package/dist/diagram/engine/constraint-eval.d.ts +37 -0
- package/dist/diagram/engine/constraint-eval.d.ts.map +1 -0
- package/dist/diagram/engine/constraint-fill-idiom.d.ts +61 -0
- package/dist/diagram/engine/constraint-fill-idiom.d.ts.map +1 -0
- package/dist/diagram/engine/constraint-units.d.ts +35 -0
- package/dist/diagram/engine/constraint-units.d.ts.map +1 -0
- package/dist/diagram/engine/data-points.d.ts +48 -0
- package/dist/diagram/engine/data-points.d.ts.map +1 -0
- package/dist/diagram/engine/engine-context.d.ts +21 -0
- package/dist/diagram/engine/engine-context.d.ts.map +1 -0
- package/dist/diagram/engine/engine-first-allowlist.d.ts +31 -0
- package/dist/diagram/engine/engine-first-allowlist.d.ts.map +1 -0
- package/dist/diagram/engine/engine-fonts.d.ts +26 -0
- package/dist/diagram/engine/engine-fonts.d.ts.map +1 -0
- package/dist/diagram/engine/engine-node.d.ts +72 -0
- package/dist/diagram/engine/engine-node.d.ts.map +1 -0
- package/dist/diagram/engine/engine-to-result.d.ts +43 -0
- package/dist/diagram/engine/engine-to-result.d.ts.map +1 -0
- package/dist/diagram/engine/engine.d.ts +18 -0
- package/dist/diagram/engine/engine.d.ts.map +1 -0
- package/dist/diagram/engine/font-groups.d.ts +33 -0
- package/dist/diagram/engine/font-groups.d.ts.map +1 -0
- package/dist/diagram/engine/font-length.d.ts +26 -0
- package/dist/diagram/engine/font-length.d.ts.map +1 -0
- package/dist/diagram/engine/font-search.d.ts +38 -0
- package/dist/diagram/engine/font-search.d.ts.map +1 -0
- package/dist/diagram/engine/hier-assistants.d.ts +47 -0
- package/dist/diagram/engine/hier-assistants.d.ts.map +1 -0
- package/dist/diagram/engine/hier-hang.d.ts +28 -0
- package/dist/diagram/engine/hier-hang.d.ts.map +1 -0
- package/dist/diagram/engine/hier-measure.d.ts +33 -0
- package/dist/diagram/engine/hier-measure.d.ts.map +1 -0
- package/dist/diagram/engine/hier-node-size.d.ts +23 -0
- package/dist/diagram/engine/hier-node-size.d.ts.map +1 -0
- package/dist/diagram/engine/hier-shape.d.ts +31 -0
- package/dist/diagram/engine/hier-shape.d.ts.map +1 -0
- package/dist/diagram/engine/index.d.ts +6 -0
- package/dist/diagram/engine/index.d.ts.map +1 -0
- package/dist/diagram/engine/layout-def-parse.d.ts +13 -0
- package/dist/diagram/engine/layout-def-parse.d.ts.map +1 -0
- package/dist/diagram/engine/layout-def-types.d.ts +118 -0
- package/dist/diagram/engine/layout-def-types.d.ts.map +1 -0
- package/dist/diagram/engine/layout-driver.d.ts +41 -0
- package/dist/diagram/engine/layout-driver.d.ts.map +1 -0
- package/dist/diagram/engine/layout-font.d.ts +27 -0
- package/dist/diagram/engine/layout-font.d.ts.map +1 -0
- package/dist/diagram/engine/move-with-merge.d.ts +49 -0
- package/dist/diagram/engine/move-with-merge.d.ts.map +1 -0
- package/dist/diagram/engine/node-text.d.ts +20 -0
- package/dist/diagram/engine/node-text.d.ts.map +1 -0
- package/dist/diagram/engine/ordered-xml.d.ts +30 -0
- package/dist/diagram/engine/ordered-xml.d.ts.map +1 -0
- package/dist/diagram/engine/preferred-size.d.ts +28 -0
- package/dist/diagram/engine/preferred-size.d.ts.map +1 -0
- package/dist/diagram/engine/pres-tree.d.ts +58 -0
- package/dist/diagram/engine/pres-tree.d.ts.map +1 -0
- package/dist/diagram/engine/registry.d.ts +7 -0
- package/dist/diagram/engine/registry.d.ts.map +1 -0
- package/dist/diagram/engine/render-filter.d.ts +43 -0
- package/dist/diagram/engine/render-filter.d.ts.map +1 -0
- package/dist/diagram/engine/shape-adjust.d.ts +16 -0
- package/dist/diagram/engine/shape-adjust.d.ts.map +1 -0
- package/dist/diagram/engine/shape-transform.d.ts +14 -0
- package/dist/diagram/engine/shape-transform.d.ts.map +1 -0
- package/dist/diagram/engine/snake-rule-fit.d.ts +34 -0
- package/dist/diagram/engine/snake-rule-fit.d.ts.map +1 -0
- package/dist/diagram/engine/style-label.d.ts +24 -0
- package/dist/diagram/engine/style-label.d.ts.map +1 -0
- package/dist/diagram/engine/text-fit.d.ts +61 -0
- package/dist/diagram/engine/text-fit.d.ts.map +1 -0
- package/dist/diagram/engine/text-grow.d.ts +33 -0
- package/dist/diagram/engine/text-grow.d.ts.map +1 -0
- package/dist/diagram/engine/text-measure.d.ts +77 -0
- package/dist/diagram/engine/text-measure.d.ts.map +1 -0
- package/dist/diagram/hierarchy/index.d.ts +5 -0
- package/dist/diagram/hierarchy/index.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-axis-pitch.d.ts +65 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-axis-pitch.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-axis-swap-orientation.d.ts +68 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-axis-swap-orientation.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-branch-mode.d.ts +54 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-branch-mode.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-cascade.d.ts +58 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-cascade.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-centered-fan-axis.d.ts +63 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-centered-fan-axis.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-child-order.d.ts +41 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-child-order.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-composite-child.d.ts +129 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-composite-child.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-constraint-lookup.d.ts +76 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-constraint-lookup.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-corner-plan.d.ts +49 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-corner-plan.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-dispatch-lindir.d.ts +58 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-dispatch-lindir.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-fan-aware-width.d.ts +48 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-fan-aware-width.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-fan.d.ts +97 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-fan.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-fanned-hang-geometry.d.ts +42 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-fanned-hang-geometry.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-fanned-hang.d.ts +74 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-fanned-hang.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-fit-item-box.d.ts +111 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-fit-item-box.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-fold-depth.d.ts +44 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-fold-depth.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-generation-gap.d.ts +60 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-generation-gap.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-generation-templates.d.ts +106 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-generation-templates.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-hang-depth.d.ts +133 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-hang-depth.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-hang-dispatch.d.ts +28 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-hang-dispatch.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-hanging-arrange.d.ts +28 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-hanging-arrange.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-hanging-box.d.ts +86 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-hanging-box.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-hanging-fold.d.ts +36 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-hanging-fold.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-hanging.d.ts +118 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-hanging.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-item-template.d.ts +64 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-item-template.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-orgchart-tree.d.ts +53 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-orgchart-tree.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-orientation-resolve.d.ts +36 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-orientation-resolve.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-orientation-types.d.ts +81 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-orientation-types.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-orientation.d.ts +78 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-orientation.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-pitch.d.ts +140 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-pitch.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-shared.d.ts +131 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-shared.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-standard-options.d.ts +91 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-standard-options.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-standard-rows.d.ts +21 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-standard-rows.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-standard.d.ts +36 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-standard.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-tailed-placer.d.ts +20 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-tailed-placer.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-tailed-transpose.d.ts +50 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-tailed-transpose.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-transpose.d.ts +23 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-transpose.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-transposed-orientation.d.ts +22 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-transposed-orientation.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-wrapped-groups.d.ts +93 -0
- package/dist/diagram/hierarchy/smartart-hierarchy-wrapped-groups.d.ts.map +1 -0
- package/dist/diagram/hierarchy/smartart-layout-interpreter-hierarchy.d.ts +49 -0
- package/dist/diagram/hierarchy/smartart-layout-interpreter-hierarchy.d.ts.map +1 -0
- package/dist/diagram/index.cjs +22537 -80
- package/dist/diagram/index.d.ts +4 -0
- package/dist/diagram/index.d.ts.map +1 -1
- package/dist/diagram/index.mjs +22453 -81
- package/dist/diagram/layout/index.d.ts +38 -0
- package/dist/diagram/layout/index.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-choose-xml.d.ts +32 -0
- package/dist/diagram/layout/smartart-choose-xml.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-constraint-branch-index.d.ts +49 -0
- package/dist/diagram/layout/smartart-constraint-branch-index.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-constraint-declared-by.d.ts +64 -0
- package/dist/diagram/layout/smartart-constraint-declared-by.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-constraint-ratio-fallback.d.ts +18 -0
- package/dist/diagram/layout/smartart-constraint-ratio-fallback.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-constraint-resolve.d.ts +24 -0
- package/dist/diagram/layout/smartart-constraint-resolve.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-constraint-rules.d.ts +26 -0
- package/dist/diagram/layout/smartart-constraint-rules.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-constraint-sibling-roles.d.ts +100 -0
- package/dist/diagram/layout/smartart-constraint-sibling-roles.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-constraint-solver.d.ts +133 -0
- package/dist/diagram/layout/smartart-constraint-solver.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-constraint-values.d.ts +5 -0
- package/dist/diagram/layout/smartart-constraint-values.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-font-table.d.ts +14 -0
- package/dist/diagram/layout/smartart-font-table.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-interpreter-fold-text.d.ts +75 -0
- package/dist/diagram/layout/smartart-interpreter-fold-text.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-control-flow.d.ts +25 -0
- package/dist/diagram/layout/smartart-layout-control-flow.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-arranged-selection.d.ts +56 -0
- package/dist/diagram/layout/smartart-layout-interpreter-arranged-selection.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-arrangement-kind.d.ts +37 -0
- package/dist/diagram/layout/smartart-layout-interpreter-arrangement-kind.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-aux.d.ts +66 -0
- package/dist/diagram/layout/smartart-layout-interpreter-aux.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-axis-count.d.ts +128 -0
- package/dist/diagram/layout/smartart-layout-interpreter-axis-count.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-axis-depth.d.ts +73 -0
- package/dist/diagram/layout/smartart-layout-interpreter-axis-depth.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-axis-hop.d.ts +48 -0
- package/dist/diagram/layout/smartart-layout-interpreter-axis-hop.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-axis-range.d.ts +19 -0
- package/dist/diagram/layout/smartart-layout-interpreter-axis-range.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-choose-algorithm.d.ts +60 -0
- package/dist/diagram/layout/smartart-layout-interpreter-choose-algorithm.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-choose-branch.d.ts +36 -0
- package/dist/diagram/layout/smartart-layout-interpreter-choose-branch.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-choose-composite.d.ts +42 -0
- package/dist/diagram/layout/smartart-layout-interpreter-choose-composite.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-choose-depth.d.ts +102 -0
- package/dist/diagram/layout/smartart-layout-interpreter-choose-depth.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-choose-resolve.d.ts +32 -0
- package/dist/diagram/layout/smartart-layout-interpreter-choose-resolve.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-alternative.d.ts +33 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-alternative.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-anchor.d.ts +95 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-anchor.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-aspect.d.ts +84 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-aspect.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-candidates.d.ts +60 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-candidates.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-children.d.ts +86 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-children.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-choose-groups.d.ts +44 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-choose-groups.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-choose.d.ts +109 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-choose.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-detect.d.ts +182 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-detect.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-fontfit.d.ts +60 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-fontfit.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-foreach.d.ts +36 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-foreach.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-group-slots.d.ts +92 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-group-slots.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-iteration.d.ts +45 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-iteration.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-nested-cycle.d.ts +57 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-nested-cycle.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-order-fallback.d.ts +24 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-order-fallback.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-order.d.ts +41 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-order.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-pairs.d.ts +34 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-pairs.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-render.d.ts +29 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-render.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-ring.d.ts +40 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-ring.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-slot-dim.d.ts +22 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-slot-dim.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-slots.d.ts +69 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite-slots.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite.d.ts +56 -0
- package/dist/diagram/layout/smartart-layout-interpreter-composite.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-conn-path.d.ts +42 -0
- package/dist/diagram/layout/smartart-layout-interpreter-conn-path.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-connector-order.d.ts +23 -0
- package/dist/diagram/layout/smartart-layout-interpreter-connector-order.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-constraints.d.ts +28 -0
- package/dist/diagram/layout/smartart-layout-interpreter-constraints.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-custom.d.ts +31 -0
- package/dist/diagram/layout/smartart-layout-interpreter-custom.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-boxes.d.ts +36 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-boxes.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-connectors.d.ts +21 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-connectors.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-constraints.d.ts +116 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-constraints.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-extension.d.ts +110 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-extension.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-fontfit.d.ts +50 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-fontfit.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-hub-detect.d.ts +66 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-hub-detect.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-hub-ratio-usersize.d.ts +81 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-hub-ratio-usersize.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-hub-ratio.d.ts +109 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-hub-ratio.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-item-aspect.d.ts +121 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-item-aspect.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-item-node.d.ts +57 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-item-node.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-bulge.d.ts +34 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-bulge.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-item.d.ts +39 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-item.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-nested-hub.d.ts +22 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-nested-hub.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-offset.d.ts +43 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-offset.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring.d.ts +76 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-sibtrans.d.ts +40 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle-sibtrans.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle.d.ts +69 -0
- package/dist/diagram/layout/smartart-layout-interpreter-cycle.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-dispatch.d.ts +18 -0
- package/dist/diagram/layout/smartart-layout-interpreter-dispatch.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-flow-direction.d.ts +29 -0
- package/dist/diagram/layout/smartart-layout-interpreter-flow-direction.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-flow.d.ts +49 -0
- package/dist/diagram/layout/smartart-layout-interpreter-flow.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-hierarchy-descendant.d.ts +60 -0
- package/dist/diagram/layout/smartart-layout-interpreter-hierarchy-descendant.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-hierarchy-fontfit.d.ts +45 -0
- package/dist/diagram/layout/smartart-layout-interpreter-hierarchy-fontfit.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-hub-detect.d.ts +26 -0
- package/dist/diagram/layout/smartart-layout-interpreter-hub-detect.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-hub.d.ts +62 -0
- package/dist/diagram/layout/smartart-layout-interpreter-hub.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-compound.d.ts +36 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-compound.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-orientation.d.ts +80 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-orientation.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-shared.d.ts +102 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-shared.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack-columns.d.ts +23 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack-columns.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack-fields.d.ts +77 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack-fields.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack-rect.d.ts +20 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack-rect.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack.d.ts +53 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-transition.d.ts +50 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-role-transition.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-roles-recursive.d.ts +87 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-roles-recursive.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-roles-unwrap.d.ts +57 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-roles-unwrap.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-roles.d.ts +109 -0
- package/dist/diagram/layout/smartart-layout-interpreter-item-roles.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-linear-content-size.d.ts +42 -0
- package/dist/diagram/layout/smartart-layout-interpreter-linear-content-size.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-linear-item-aspect.d.ts +94 -0
- package/dist/diagram/layout/smartart-layout-interpreter-linear-item-aspect.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-linear-main-axis.d.ts +17 -0
- package/dist/diagram/layout/smartart-layout-interpreter-linear-main-axis.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-linear-shared.d.ts +21 -0
- package/dist/diagram/layout/smartart-layout-interpreter-linear-shared.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-linear-table.d.ts +76 -0
- package/dist/diagram/layout/smartart-layout-interpreter-linear-table.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-linear.d.ts +20 -0
- package/dist/diagram/layout/smartart-layout-interpreter-linear.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-model.d.ts +77 -0
- package/dist/diagram/layout/smartart-layout-interpreter-model.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-named-rules.d.ts +93 -0
- package/dist/diagram/layout/smartart-layout-interpreter-named-rules.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-position-family.d.ts +58 -0
- package/dist/diagram/layout/smartart-layout-interpreter-position-family.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-preset-node.d.ts +61 -0
- package/dist/diagram/layout/smartart-layout-interpreter-preset-node.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-presof-choose.d.ts +29 -0
- package/dist/diagram/layout/smartart-layout-interpreter-presof-choose.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-pyramid-bands.d.ts +41 -0
- package/dist/diagram/layout/smartart-layout-interpreter-pyramid-bands.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-pyramid.d.ts +100 -0
- package/dist/diagram/layout/smartart-layout-interpreter-pyramid.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-render.d.ts +86 -0
- package/dist/diagram/layout/smartart-layout-interpreter-render.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-snake.d.ts +18 -0
- package/dist/diagram/layout/smartart-layout-interpreter-snake.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-tree-location.d.ts +28 -0
- package/dist/diagram/layout/smartart-layout-interpreter-tree-location.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-when-numeric.d.ts +15 -0
- package/dist/diagram/layout/smartart-layout-interpreter-when-numeric.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-when-var.d.ts +12 -0
- package/dist/diagram/layout/smartart-layout-interpreter-when-var.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter-when.d.ts +69 -0
- package/dist/diagram/layout/smartart-layout-interpreter-when.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-interpreter.d.ts +80 -0
- package/dist/diagram/layout/smartart-layout-interpreter.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-item-font-role.d.ts +80 -0
- package/dist/diagram/layout/smartart-layout-item-font-role.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-item-font-size.d.ts +129 -0
- package/dist/diagram/layout/smartart-layout-item-font-size.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-item-font-tier-fit.d.ts +70 -0
- package/dist/diagram/layout/smartart-layout-item-font-tier-fit.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-item-font-tier.d.ts +139 -0
- package/dist/diagram/layout/smartart-layout-item-font-tier.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-item-tx-anchor.d.ts +105 -0
- package/dist/diagram/layout/smartart-layout-item-tx-anchor.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-shape-polygon.d.ts +17 -0
- package/dist/diagram/layout/smartart-layout-shape-polygon.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-shape-preset.d.ts +127 -0
- package/dist/diagram/layout/smartart-layout-shape-preset.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-snake-grid.d.ts +43 -0
- package/dist/diagram/layout/smartart-layout-snake-grid.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-style-helpers.d.ts +84 -0
- package/dist/diagram/layout/smartart-layout-style-helpers.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-layout-types.d.ts +253 -0
- package/dist/diagram/layout/smartart-layout-types.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-line-pitch.d.ts +29 -0
- package/dist/diagram/layout/smartart-line-pitch.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-node-role-colors.d.ts +30 -0
- package/dist/diagram/layout/smartart-node-role-colors.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-node-tree-axis.d.ts +91 -0
- package/dist/diagram/layout/smartart-node-tree-axis.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-text-wrap-fit.d.ts +84 -0
- package/dist/diagram/layout/smartart-text-wrap-fit.d.ts.map +1 -0
- package/dist/diagram/layout/smartart-tree.d.ts +33 -0
- package/dist/diagram/layout/smartart-tree.d.ts.map +1 -0
- package/dist/diagram/model/constraint-rules.d.ts +31 -0
- package/dist/diagram/model/constraint-rules.d.ts.map +1 -0
- package/dist/diagram/model/data.d.ts +109 -0
- package/dist/diagram/model/data.d.ts.map +1 -0
- package/dist/diagram/model/index.d.ts +7 -0
- package/dist/diagram/model/index.d.ts.map +1 -0
- package/dist/diagram/model/layout-definition.d.ts +276 -0
- package/dist/diagram/model/layout-definition.d.ts.map +1 -0
- package/dist/diagram/model/layout-primitives.d.ts +82 -0
- package/dist/diagram/model/layout-primitives.d.ts.map +1 -0
- package/dist/diagram/model/node.d.ts +194 -0
- package/dist/diagram/model/node.d.ts.map +1 -0
- package/dist/diagram/model/style-definition.d.ts +131 -0
- package/dist/diagram/model/style-definition.d.ts.map +1 -0
- package/dist/docx/chart-paint.d.ts +14 -0
- package/dist/docx/chart-paint.d.ts.map +1 -0
- package/dist/docx/chart.d.ts +43 -0
- package/dist/docx/chart.d.ts.map +1 -0
- package/dist/docx/drawing.d.ts.map +1 -1
- package/dist/docx/embedded.cjs +1393 -326
- package/dist/docx/embedded.mjs +1393 -326
- package/dist/docx/index.cjs +4044 -683
- package/dist/docx/index.d.ts +2 -0
- package/dist/docx/index.d.ts.map +1 -1
- package/dist/docx/index.mjs +4040 -684
- package/dist/docx/inline-model.d.ts +3 -0
- package/dist/docx/inline-model.d.ts.map +1 -1
- package/dist/docx/layout/adapter.d.ts.map +1 -1
- package/dist/docx/layout/index.cjs +2674 -88
- package/dist/docx/layout/index.mjs +2675 -89
- package/dist/docx/layout/input.d.ts +5 -0
- package/dist/docx/layout/input.d.ts.map +1 -1
- package/dist/docx/load/index.cjs +1616 -549
- package/dist/docx/load/index.mjs +1616 -549
- package/dist/docx/parse.d.ts.map +1 -1
- package/dist/docx/ui/chart-spec.d.ts +10 -0
- package/dist/docx/ui/chart-spec.d.ts.map +1 -0
- package/dist/docx/ui/index.cjs +2602 -186
- 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 +2601 -188
- package/dist/docx/ui/inline-content-schema.d.ts.map +1 -1
- package/dist/docx/ui/run-adapter.d.ts.map +1 -1
- package/dist/drawingml/write-line.d.ts +7 -0
- package/dist/drawingml/write-line.d.ts.map +1 -0
- package/dist/geometry/ooxml-arc.d.ts +31 -0
- package/dist/geometry/ooxml-arc.d.ts.map +1 -0
- package/dist/geometry/preset-shape-evaluator.d.ts +73 -0
- package/dist/geometry/preset-shape-evaluator.d.ts.map +1 -0
- package/dist/index.cjs +34839 -18368
- package/dist/index.mjs +34835 -18368
- package/dist/opc/embedded-packages.d.ts +11 -0
- package/dist/opc/embedded-packages.d.ts.map +1 -0
- package/dist/opc/index.cjs +365 -70
- package/dist/opc/index.d.ts +1 -0
- package/dist/opc/index.d.ts.map +1 -1
- package/dist/opc/index.mjs +353 -71
- package/dist/opc/properties/app.d.ts +9 -3
- package/dist/opc/properties/app.d.ts.map +1 -1
- package/dist/opc/properties/core.d.ts +5 -1
- package/dist/opc/properties/core.d.ts.map +1 -1
- package/dist/opc/properties/custom.d.ts +19 -0
- package/dist/opc/properties/custom.d.ts.map +1 -1
- package/dist/opc/properties/index.d.ts +6 -3
- package/dist/opc/properties/index.d.ts.map +1 -1
- package/dist/opc/properties/patch.d.ts +38 -0
- package/dist/opc/properties/patch.d.ts.map +1 -0
- package/dist/opc/properties/title-groups.d.ts +30 -0
- package/dist/opc/properties/title-groups.d.ts.map +1 -0
- package/dist/opc/properties/types.d.ts +15 -0
- package/dist/opc/properties/types.d.ts.map +1 -1
- package/dist/pptx/automation/index.cjs +9049 -7167
- package/dist/pptx/automation/index.d.ts +4 -4
- package/dist/pptx/automation/index.mjs +6 -6
- package/dist/pptx/chunks/{index-BYkdcS8J.d.ts → index-EZJZ7USt.d.ts} +907 -962
- package/dist/pptx/chunks/index-EZJZ7USt.d.ts.map +1 -0
- package/dist/pptx/chunks/{index-BHqL5KXH.d.ts → index-JNv7AJx5.d.ts} +163 -210
- package/dist/pptx/chunks/index-JNv7AJx5.d.ts.map +1 -0
- package/dist/pptx/chunks/{smart-art-CO2jmJFf.d.ts → smart-art-Q2kZQtHh.d.ts} +436 -374
- package/dist/pptx/chunks/smart-art-Q2kZQtHh.d.ts.map +1 -0
- package/dist/pptx/chunks/{text-operations-DEJ7alZR.d.ts → text-operations-DtCxXrMh.d.ts} +55 -4
- package/dist/pptx/chunks/text-operations-DtCxXrMh.d.ts.map +1 -0
- package/dist/pptx/cli/index.cjs +8728 -6846
- package/dist/pptx/cli/index.d.ts +1 -1
- package/dist/pptx/cli/index.mjs +5 -5
- package/dist/pptx/converter/index.cjs +7124 -7136
- package/dist/pptx/converter/index.d.ts +1 -1
- package/dist/pptx/converter/index.mjs +3 -3
- package/dist/pptx/editor/render/table-cell-edit.cjs +7 -3
- package/dist/pptx/editor/render/table-cell-edit.d.ts +16 -1
- package/dist/pptx/editor/render/table-cell-edit.d.ts.map +1 -1
- package/dist/pptx/editor/render/table-cell-edit.mjs +1 -1
- package/dist/pptx/editor/render/table-cell-merge.cjs +3 -3
- package/dist/pptx/editor/render/table-cell-merge.mjs +1 -1
- package/dist/pptx/editor/render/table-data-grid-ops.cjs +7 -7
- package/dist/pptx/editor/render/table-data-grid-ops.mjs +2 -2
- package/dist/pptx/editor/render/table-layout.cjs +6 -6
- package/dist/pptx/editor/render/table-layout.d.ts.map +1 -1
- package/dist/pptx/editor/render/table-layout.mjs +1 -1
- package/dist/pptx/editor/render/table-merge.cjs +5 -5
- package/dist/pptx/editor/render/table-merge.mjs +1 -1
- package/dist/pptx/index.cjs +9300 -7249
- package/dist/pptx/index.d.ts +5 -5
- package/dist/pptx/index.mjs +6 -6
- package/dist/pptx/smartart-layouts/index.cjs +135 -106
- package/dist/pptx/smartart-layouts/index.d.ts +1 -1
- package/dist/pptx/smartart-layouts/index.mjs +1 -1
- package/dist/teams/content.d.ts.map +1 -1
- package/dist/teams/index.cjs +3931 -2077
- package/dist/teams/index.d.ts +1 -0
- package/dist/teams/index.d.ts.map +1 -1
- package/dist/teams/index.mjs +3930 -2077
- package/dist/teams/server-file-storage.d.ts +11 -0
- package/dist/teams/server-file-storage.d.ts.map +1 -0
- package/dist/teams/store.d.ts +2 -0
- package/dist/teams/store.d.ts.map +1 -1
- package/dist/teams/stored-file.d.ts.map +1 -1
- package/dist/{xlsx/layout/font-family.d.ts → text/css-font-family.d.ts} +1 -1
- package/dist/text/css-font-family.d.ts.map +1 -0
- package/dist/text/font-metrics/font-advance-widths-aptos-display.generated.d.ts +10 -0
- package/dist/text/font-metrics/font-advance-widths-aptos-display.generated.d.ts.map +1 -0
- package/dist/text/font-metrics/font-advance-widths-aptos.generated.d.ts +10 -0
- package/dist/text/font-metrics/font-advance-widths-aptos.generated.d.ts.map +1 -0
- package/dist/text/font-metrics/font-advance-widths-arial.generated.d.ts +10 -0
- package/dist/text/font-metrics/font-advance-widths-arial.generated.d.ts.map +1 -0
- package/dist/text/font-metrics/font-advance-widths-calibri-light.generated.d.ts +10 -0
- package/dist/text/font-metrics/font-advance-widths-calibri-light.generated.d.ts.map +1 -0
- package/dist/text/font-metrics/font-advance-widths-calibri.generated.d.ts +10 -0
- package/dist/text/font-metrics/font-advance-widths-calibri.generated.d.ts.map +1 -0
- package/dist/text/font-metrics/font-advance-widths-segoe-ui.generated.d.ts +10 -0
- package/dist/text/font-metrics/font-advance-widths-segoe-ui.generated.d.ts.map +1 -0
- package/dist/text/font-metrics/font-advance-widths-times-new-roman.generated.d.ts +10 -0
- package/dist/text/font-metrics/font-advance-widths-times-new-roman.generated.d.ts.map +1 -0
- package/dist/text/font-metrics/font-advance-widths.generated.d.ts +48 -0
- package/dist/text/font-metrics/font-advance-widths.generated.d.ts.map +1 -0
- package/dist/text/font-metrics/font-kerning.d.ts +19 -0
- package/dist/text/font-metrics/font-kerning.d.ts.map +1 -0
- package/dist/visio/index.cjs +645 -119
- package/dist/visio/index.mjs +645 -119
- package/dist/visio/theme-color.d.ts +13 -3
- package/dist/visio/theme-color.d.ts.map +1 -1
- package/dist/visio/theme-resolve.d.ts +2 -1
- package/dist/visio/theme-resolve.d.ts.map +1 -1
- package/dist/visio/theme.d.ts +5 -2
- package/dist/visio/theme.d.ts.map +1 -1
- package/dist/xlsx/collab/adapter.d.ts +18 -0
- package/dist/xlsx/collab/adapter.d.ts.map +1 -0
- package/dist/xlsx/collab/apply.d.ts +8 -0
- package/dist/xlsx/collab/apply.d.ts.map +1 -0
- package/dist/xlsx/collab/bind.d.ts +34 -0
- package/dist/xlsx/collab/bind.d.ts.map +1 -0
- package/dist/xlsx/collab/codec.d.ts +35 -0
- package/dist/xlsx/collab/codec.d.ts.map +1 -0
- package/dist/xlsx/collab/dirty.d.ts +23 -0
- package/dist/xlsx/collab/dirty.d.ts.map +1 -0
- package/dist/xlsx/collab/index.cjs +1245 -0
- package/dist/xlsx/collab/index.d.ts +10 -0
- package/dist/xlsx/collab/index.d.ts.map +1 -0
- package/dist/xlsx/collab/index.mjs +1207 -0
- package/dist/xlsx/collab/lines.d.ts +22 -0
- package/dist/xlsx/collab/lines.d.ts.map +1 -0
- package/dist/xlsx/collab/names.d.ts +16 -0
- package/dist/xlsx/collab/names.d.ts.map +1 -0
- package/dist/xlsx/collab/presence.d.ts +31 -0
- package/dist/xlsx/collab/presence.d.ts.map +1 -0
- package/dist/xlsx/collab/schema.d.ts +30 -0
- package/dist/xlsx/collab/schema.d.ts.map +1 -0
- package/dist/xlsx/collab/sheets.d.ts +34 -0
- package/dist/xlsx/collab/sheets.d.ts.map +1 -0
- package/dist/xlsx/collab/styles.d.ts +26 -0
- package/dist/xlsx/collab/styles.d.ts.map +1 -0
- package/dist/xlsx/collab/write.d.ts +14 -0
- package/dist/xlsx/collab/write.d.ts.map +1 -0
- package/dist/xlsx/edit/chart-colors.d.ts +2 -2
- package/dist/xlsx/edit/chart-colors.d.ts.map +1 -1
- package/dist/xlsx/edit/chart-element-fill.d.ts +3 -3
- package/dist/xlsx/edit/chart-element-fill.d.ts.map +1 -1
- package/dist/xlsx/edit/chart-series-fill.d.ts +2 -2
- package/dist/xlsx/edit/chart-series-fill.d.ts.map +1 -1
- package/dist/xlsx/edit/chart-series-gradient.d.ts +3 -3
- package/dist/xlsx/edit/chart-series-gradient.d.ts.map +1 -1
- package/dist/xlsx/edit/chart-series-target.d.ts +15 -0
- package/dist/xlsx/edit/chart-series-target.d.ts.map +1 -0
- package/dist/xlsx/edit/chart-series-transparency.d.ts +2 -2
- package/dist/xlsx/edit/chart-series-transparency.d.ts.map +1 -1
- package/dist/xlsx/edit/context.d.ts +3 -1
- package/dist/xlsx/edit/context.d.ts.map +1 -1
- package/dist/xlsx/edit/external.d.ts +28 -0
- package/dist/xlsx/edit/external.d.ts.map +1 -0
- package/dist/xlsx/edit/history.d.ts +18 -0
- package/dist/xlsx/edit/history.d.ts.map +1 -1
- package/dist/xlsx/edit/index.d.ts +1 -0
- package/dist/xlsx/edit/index.d.ts.map +1 -1
- package/dist/xlsx/edit/session-calc.d.ts +32 -3
- package/dist/xlsx/edit/session-calc.d.ts.map +1 -1
- package/dist/xlsx/edit/session.d.ts.map +1 -1
- package/dist/xlsx/edit/sheets.d.ts.map +1 -1
- package/dist/xlsx/edit/types.d.ts +37 -4
- package/dist/xlsx/edit/types.d.ts.map +1 -1
- package/dist/xlsx/formula/engine-core.d.ts.map +1 -1
- package/dist/xlsx/formula/engine-host.d.ts +6 -2
- package/dist/xlsx/formula/engine-host.d.ts.map +1 -1
- package/dist/xlsx/formula/engine-prepare.d.ts +33 -0
- package/dist/xlsx/formula/engine-prepare.d.ts.map +1 -0
- package/dist/xlsx/formula/engine-structure.d.ts +40 -0
- package/dist/xlsx/formula/engine-structure.d.ts.map +1 -0
- package/dist/xlsx/formula/engine-types.d.ts +26 -0
- package/dist/xlsx/formula/engine-types.d.ts.map +1 -1
- package/dist/xlsx/formula/engine.d.ts.map +1 -1
- package/dist/xlsx/formula/formula-shape.d.ts +28 -0
- package/dist/xlsx/formula/formula-shape.d.ts.map +1 -0
- package/dist/xlsx/formula/graph-index.d.ts +3 -1
- package/dist/xlsx/formula/graph-index.d.ts.map +1 -1
- package/dist/xlsx/formula/graph.d.ts +5 -0
- package/dist/xlsx/formula/graph.d.ts.map +1 -1
- package/dist/xlsx/formula/lexemes.d.ts +6 -0
- package/dist/xlsx/formula/lexemes.d.ts.map +1 -1
- package/dist/xlsx/formula/parse-cache.d.ts +9 -0
- package/dist/xlsx/formula/parse-cache.d.ts.map +1 -0
- package/dist/xlsx/formula/parser.d.ts +3 -0
- package/dist/xlsx/formula/parser.d.ts.map +1 -1
- package/dist/xlsx/formula/ref-text.d.ts +14 -0
- package/dist/xlsx/formula/ref-text.d.ts.map +1 -0
- package/dist/xlsx/formula/references.d.ts.map +1 -1
- package/dist/xlsx/formula/shift-formula.d.ts +19 -0
- package/dist/xlsx/formula/shift-formula.d.ts.map +1 -0
- package/dist/xlsx/formula/shift-graph.d.ts +42 -0
- package/dist/xlsx/formula/shift-graph.d.ts.map +1 -0
- package/dist/xlsx/formula/tokenizer.d.ts.map +1 -1
- package/dist/xlsx/formula/transform.d.ts +2 -23
- package/dist/xlsx/formula/transform.d.ts.map +1 -1
- package/dist/xlsx/index.cjs +5620 -2680
- package/dist/xlsx/index.mjs +5609 -2681
- package/dist/xlsx/layout/cell-view.d.ts.map +1 -1
- package/dist/xlsx/layout/chart-view.d.ts +3 -54
- package/dist/xlsx/layout/chart-view.d.ts.map +1 -1
- package/dist/xlsx/layout/colors.d.ts +1 -4
- package/dist/xlsx/layout/colors.d.ts.map +1 -1
- package/dist/xlsx/layout/index.d.ts +8 -5
- package/dist/xlsx/layout/index.d.ts.map +1 -1
- package/dist/xlsx/layout/remote-selections.d.ts +40 -0
- package/dist/xlsx/layout/remote-selections.d.ts.map +1 -0
- package/dist/xlsx/layout/sheet-queries.d.ts +7 -0
- package/dist/xlsx/layout/sheet-queries.d.ts.map +1 -1
- package/dist/xlsx/layout/sparkline-data.d.ts +19 -0
- package/dist/xlsx/layout/sparkline-data.d.ts.map +1 -0
- package/dist/xlsx/layout/sparkline-view.d.ts +52 -0
- package/dist/xlsx/layout/sparkline-view.d.ts.map +1 -0
- package/dist/xlsx/layout/tint.d.ts +3 -12
- package/dist/xlsx/layout/tint.d.ts.map +1 -1
- package/dist/xlsx/layout/types.d.ts +3 -0
- package/dist/xlsx/layout/types.d.ts.map +1 -1
- package/dist/xlsx/load/index.cjs +3124 -1312
- package/dist/xlsx/load/index.mjs +3124 -1312
- package/dist/xlsx/model-sparklines.d.ts +52 -0
- package/dist/xlsx/model-sparklines.d.ts.map +1 -0
- package/dist/xlsx/model.d.ts +10 -47
- package/dist/xlsx/model.d.ts.map +1 -1
- package/dist/xlsx/read/chart.d.ts +1 -4
- package/dist/xlsx/read/chart.d.ts.map +1 -1
- package/dist/xlsx/read/index.d.ts +1 -0
- package/dist/xlsx/read/index.d.ts.map +1 -1
- package/dist/xlsx/read/sheet-data-source.d.ts +10 -0
- package/dist/xlsx/read/sheet-data-source.d.ts.map +1 -0
- package/dist/xlsx/read/sparklines.d.ts +12 -0
- package/dist/xlsx/read/sparklines.d.ts.map +1 -0
- package/dist/xlsx/read/worksheet.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/i18n/navigation.d.ts.map +1 -1
- package/dist/xlsx/ui/context.d.ts +15 -1
- package/dist/xlsx/ui/context.d.ts.map +1 -1
- package/dist/xlsx/ui/grid/cell-items.d.ts.map +1 -1
- package/dist/xlsx/ui/grid/cell-paint.d.ts +1 -1
- package/dist/xlsx/ui/grid/cell-paint.d.ts.map +1 -1
- package/dist/xlsx/ui/grid/view-cache.d.ts.map +1 -1
- package/dist/xlsx/ui/index.cjs +2165 -866
- package/dist/xlsx/ui/index.mjs +2165 -867
- package/dist/xlsx/ui/locales/de/collab.d.ts +2 -0
- package/dist/xlsx/ui/locales/de/collab.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/de/index.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/en/collab.d.ts +2 -0
- package/dist/xlsx/ui/locales/en/collab.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/en/index.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/es/collab.d.ts +2 -0
- package/dist/xlsx/ui/locales/es/collab.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/es/index.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/fr/collab.d.ts +2 -0
- package/dist/xlsx/ui/locales/fr/collab.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/fr/index.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/zh-CN/collab.d.ts +2 -0
- package/dist/xlsx/ui/locales/zh-CN/collab.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/zh-CN/index.d.ts.map +1 -1
- package/dist/xlsx/ui/ribbon/icon-paths.d.ts.map +1 -1
- package/dist/xlsx/write/chart-colors.d.ts +3 -0
- package/dist/xlsx/write/chart-colors.d.ts.map +1 -1
- package/dist/xlsx/write/chart-space.d.ts +5 -0
- package/dist/xlsx/write/chart-space.d.ts.map +1 -0
- package/dist/xlsx/write/chart-title.d.ts +4 -1
- package/dist/xlsx/write/chart-title.d.ts.map +1 -1
- package/dist/xlsx/write/chart.d.ts +4 -1
- package/dist/xlsx/write/chart.d.ts.map +1 -1
- package/dist/xml/index.cjs +162 -0
- package/dist/xml/index.d.ts +1 -0
- package/dist/xml/index.d.ts.map +1 -1
- package/dist/xml/index.mjs +161 -1
- package/dist/xml/lite.d.ts +30 -0
- package/dist/xml/lite.d.ts.map +1 -0
- package/package.json +6 -1
- package/dist/pptx/chunks/index-BHqL5KXH.d.ts.map +0 -1
- package/dist/pptx/chunks/index-BYkdcS8J.d.ts.map +0 -1
- package/dist/pptx/chunks/smart-art-CO2jmJFf.d.ts.map +0 -1
- package/dist/pptx/chunks/text-operations-DEJ7alZR.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-appearance.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-colors.d.ts +0 -9
- package/dist/xlsx/layout/chart-colors.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-scale.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-spacing.d.ts +0 -6
- package/dist/xlsx/layout/chart-spacing.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-svg-appearance.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-svg-bars.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-svg-cartesian.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-svg-legend.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-svg-radial.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-svg-text-metrics.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-svg-title-text.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-svg-util.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-svg.d.ts.map +0 -1
- package/dist/xlsx/layout/chart-title-text.d.ts +0 -14
- package/dist/xlsx/layout/chart-title-text.d.ts.map +0 -1
- package/dist/xlsx/layout/font-family.d.ts.map +0 -1
- /package/dist/{xlsx/layout → chart/render}/chart-scale.d.ts +0 -0
- /package/dist/{xlsx/layout → chart/render}/chart-svg-bars.d.ts +0 -0
- /package/dist/{xlsx/layout → chart/render}/chart-svg-cartesian.d.ts +0 -0
- /package/dist/{xlsx/layout → chart/render}/chart-svg-legend.d.ts +0 -0
- /package/dist/{xlsx/layout → chart/render}/chart-svg-radial.d.ts +0 -0
- /package/dist/{xlsx/layout → chart/render}/chart-svg-text-metrics.d.ts +0 -0
- /package/dist/{xlsx/layout → chart/render}/chart-svg-title-text.d.ts +0 -0
- /package/dist/{xlsx/layout → chart/render}/chart-svg-util.d.ts +0 -0
- /package/dist/{xlsx/layout → chart/render}/chart-svg.d.ts +0 -0
package/dist/docx/load/index.mjs
CHANGED
|
@@ -265,14 +265,14 @@ function parseOle2(buffer) {
|
|
|
265
265
|
return result.subarray(0, size);
|
|
266
266
|
}
|
|
267
267
|
function getStream(name) {
|
|
268
|
-
const
|
|
269
|
-
if (!
|
|
268
|
+
const entry2 = entries.find((e) => (e.type === ENTRY_TYPE_STREAM || e.type === ENTRY_TYPE_ROOT) && e.name === name);
|
|
269
|
+
if (!entry2) {
|
|
270
270
|
return void 0;
|
|
271
271
|
}
|
|
272
|
-
if (
|
|
273
|
-
return readMiniStream(
|
|
272
|
+
if (entry2.size < miniStreamCutoff && entry2.type !== ENTRY_TYPE_ROOT) {
|
|
273
|
+
return readMiniStream(entry2.startSector, entry2.size);
|
|
274
274
|
}
|
|
275
|
-
return readStream(
|
|
275
|
+
return readStream(entry2.startSector, entry2.size);
|
|
276
276
|
}
|
|
277
277
|
return { entries, getStream };
|
|
278
278
|
}
|
|
@@ -1256,8 +1256,8 @@ function applyLane(r, ops, f6, x, startTarget) {
|
|
|
1256
1256
|
const i4 = (target + 4) % 5;
|
|
1257
1257
|
const sum = r[target] + f6(r[i1], r[i2], r[i3]) + x[k] + addConst >>> 0;
|
|
1258
1258
|
const newTarget = (sum << s | sum >>> 32 - s) + r[i4] >>> 0;
|
|
1259
|
-
const
|
|
1260
|
-
r[i2] = (
|
|
1259
|
+
const c2 = r[i2];
|
|
1260
|
+
r[i2] = (c2 << 10 | c2 >>> 22) >>> 0;
|
|
1261
1261
|
r[target] = newTarget;
|
|
1262
1262
|
target = (target + 4) % 5;
|
|
1263
1263
|
}
|
|
@@ -1370,32 +1370,32 @@ var rotr = (x, n) => x >>> n | x << 32 - n;
|
|
|
1370
1370
|
function compress(h2, view, offset) {
|
|
1371
1371
|
for (let i2 = 0; i2 < 16; i2++) W[i2] = view.getUint32(offset + i2 * 4);
|
|
1372
1372
|
for (let i2 = 16; i2 < 64; i2++) {
|
|
1373
|
-
const
|
|
1373
|
+
const a3 = W[i2 - 15];
|
|
1374
1374
|
const b2 = W[i2 - 2];
|
|
1375
|
-
const s0 = rotr(
|
|
1375
|
+
const s0 = rotr(a3, 7) ^ rotr(a3, 18) ^ a3 >>> 3;
|
|
1376
1376
|
const s1 = rotr(b2, 17) ^ rotr(b2, 19) ^ b2 >>> 10;
|
|
1377
1377
|
W[i2] = W[i2 - 16] + s0 + W[i2 - 7] + s1 >>> 0;
|
|
1378
1378
|
}
|
|
1379
|
-
let
|
|
1379
|
+
let a2 = h2[0], b = h2[1], c2 = h2[2], d = h2[3], e = h2[4], f6 = h2[5], g2 = h2[6], k = h2[7];
|
|
1380
1380
|
for (let i2 = 0; i2 < 64; i2++) {
|
|
1381
1381
|
const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
|
|
1382
1382
|
const ch = e & f6 ^ ~e & g2;
|
|
1383
1383
|
const t1 = k + S1 + ch + K[i2] + W[i2] >>> 0;
|
|
1384
|
-
const S0 = rotr(
|
|
1385
|
-
const maj =
|
|
1384
|
+
const S0 = rotr(a2, 2) ^ rotr(a2, 13) ^ rotr(a2, 22);
|
|
1385
|
+
const maj = a2 & b ^ a2 & c2 ^ b & c2;
|
|
1386
1386
|
const t2 = S0 + maj >>> 0;
|
|
1387
1387
|
k = g2;
|
|
1388
1388
|
g2 = f6;
|
|
1389
1389
|
f6 = e;
|
|
1390
1390
|
e = d + t1 >>> 0;
|
|
1391
|
-
d =
|
|
1392
|
-
|
|
1393
|
-
b =
|
|
1394
|
-
|
|
1391
|
+
d = c2;
|
|
1392
|
+
c2 = b;
|
|
1393
|
+
b = a2;
|
|
1394
|
+
a2 = t1 + t2 >>> 0;
|
|
1395
1395
|
}
|
|
1396
|
-
h2[0] = h2[0] +
|
|
1396
|
+
h2[0] = h2[0] + a2 >>> 0;
|
|
1397
1397
|
h2[1] = h2[1] + b >>> 0;
|
|
1398
|
-
h2[2] = h2[2] +
|
|
1398
|
+
h2[2] = h2[2] + c2 >>> 0;
|
|
1399
1399
|
h2[3] = h2[3] + d >>> 0;
|
|
1400
1400
|
h2[4] = h2[4] + e >>> 0;
|
|
1401
1401
|
h2[5] = h2[5] + f6 >>> 0;
|
|
@@ -1431,33 +1431,33 @@ var rotl = (x, n) => x << n | x >>> 32 - n;
|
|
|
1431
1431
|
function compress2(h2, view, offset) {
|
|
1432
1432
|
for (let i2 = 0; i2 < 16; i2++) W2[i2] = view.getUint32(offset + i2 * 4);
|
|
1433
1433
|
for (let i2 = 16; i2 < 80; i2++) W2[i2] = rotl(W2[i2 - 3] ^ W2[i2 - 8] ^ W2[i2 - 14] ^ W2[i2 - 16], 1);
|
|
1434
|
-
let
|
|
1434
|
+
let a2 = h2[0], b = h2[1], c2 = h2[2], d = h2[3], e = h2[4];
|
|
1435
1435
|
for (let i2 = 0; i2 < 80; i2++) {
|
|
1436
1436
|
let f6;
|
|
1437
1437
|
let k;
|
|
1438
1438
|
if (i2 < 20) {
|
|
1439
|
-
f6 = b &
|
|
1439
|
+
f6 = b & c2 | ~b & d;
|
|
1440
1440
|
k = 1518500249;
|
|
1441
1441
|
} else if (i2 < 40) {
|
|
1442
|
-
f6 = b ^
|
|
1442
|
+
f6 = b ^ c2 ^ d;
|
|
1443
1443
|
k = 1859775393;
|
|
1444
1444
|
} else if (i2 < 60) {
|
|
1445
|
-
f6 = b &
|
|
1445
|
+
f6 = b & c2 | b & d | c2 & d;
|
|
1446
1446
|
k = 2400959708;
|
|
1447
1447
|
} else {
|
|
1448
|
-
f6 = b ^
|
|
1448
|
+
f6 = b ^ c2 ^ d;
|
|
1449
1449
|
k = 3395469782;
|
|
1450
1450
|
}
|
|
1451
|
-
const t = rotl(
|
|
1451
|
+
const t = rotl(a2, 5) + f6 + e + k + W2[i2] >>> 0;
|
|
1452
1452
|
e = d;
|
|
1453
|
-
d =
|
|
1454
|
-
|
|
1455
|
-
b =
|
|
1456
|
-
|
|
1453
|
+
d = c2;
|
|
1454
|
+
c2 = rotl(b, 30) >>> 0;
|
|
1455
|
+
b = a2;
|
|
1456
|
+
a2 = t;
|
|
1457
1457
|
}
|
|
1458
|
-
h2[0] = h2[0] +
|
|
1458
|
+
h2[0] = h2[0] + a2 >>> 0;
|
|
1459
1459
|
h2[1] = h2[1] + b >>> 0;
|
|
1460
|
-
h2[2] = h2[2] +
|
|
1460
|
+
h2[2] = h2[2] + c2 >>> 0;
|
|
1461
1461
|
h2[3] = h2[3] + d >>> 0;
|
|
1462
1462
|
h2[4] = h2[4] + e >>> 0;
|
|
1463
1463
|
}
|
|
@@ -2044,8 +2044,8 @@ var ROUND_CONSTANTS = [
|
|
|
2044
2044
|
0xfbee7c66dd17479en,
|
|
2045
2045
|
0xca2dbf07ad5a8333n
|
|
2046
2046
|
];
|
|
2047
|
-
var ROUND_CONSTANTS_HI = Uint32Array.from(ROUND_CONSTANTS, (
|
|
2048
|
-
var ROUND_CONSTANTS_LO = Uint32Array.from(ROUND_CONSTANTS, (
|
|
2047
|
+
var ROUND_CONSTANTS_HI = Uint32Array.from(ROUND_CONSTANTS, (c2) => Number(c2 >> 32n));
|
|
2048
|
+
var ROUND_CONSTANTS_LO = Uint32Array.from(ROUND_CONSTANTS, (c2) => Number(c2 & LOW_MASK));
|
|
2049
2049
|
|
|
2050
2050
|
// digest/whirlpool.ts
|
|
2051
2051
|
var TABLES_HI2 = TABLES_HI;
|
|
@@ -2366,7 +2366,7 @@ function openEncryptedPackage(input) {
|
|
|
2366
2366
|
if (!isCompoundFile(bytes)) return void 0;
|
|
2367
2367
|
try {
|
|
2368
2368
|
const file = parseOle2(toArrayBuffer(bytes));
|
|
2369
|
-
if (!file.entries.some((
|
|
2369
|
+
if (!file.entries.some((entry2) => entry2.name === "EncryptedPackage")) return void 0;
|
|
2370
2370
|
const encryptionInfo = file.getStream("EncryptionInfo");
|
|
2371
2371
|
const encryptedPackage = encryptionInfo && file.getStream("EncryptedPackage");
|
|
2372
2372
|
return encryptionInfo && encryptedPackage ? { encryptionInfo, encryptedPackage } : void 0;
|
|
@@ -2378,7 +2378,7 @@ function isEncryptedOoxmlPackage(input) {
|
|
|
2378
2378
|
const bytes = toBytes(input);
|
|
2379
2379
|
if (!isCompoundFile(bytes)) return false;
|
|
2380
2380
|
try {
|
|
2381
|
-
const names = new Set(parseOle2(toArrayBuffer(bytes)).entries.map((
|
|
2381
|
+
const names = new Set(parseOle2(toArrayBuffer(bytes)).entries.map((entry2) => entry2.name));
|
|
2382
2382
|
return names.has("EncryptionInfo") && names.has("EncryptedPackage");
|
|
2383
2383
|
} catch {
|
|
2384
2384
|
return false;
|
|
@@ -2386,14 +2386,14 @@ function isEncryptedOoxmlPackage(input) {
|
|
|
2386
2386
|
}
|
|
2387
2387
|
|
|
2388
2388
|
// ../../node_modules/.bun/@christophervr+ole2@0.12.0/node_modules/@christophervr/ole2/dist/ole2-parser-write-helpers.js
|
|
2389
|
-
function compareDirEntryNames(
|
|
2390
|
-
const ua =
|
|
2389
|
+
function compareDirEntryNames(a2, b) {
|
|
2390
|
+
const ua = a2.toUpperCase();
|
|
2391
2391
|
const ub = b.toUpperCase();
|
|
2392
|
-
if (ua.length !==
|
|
2392
|
+
if (ua.length !== a2.length || ub.length !== b.length) {
|
|
2393
2393
|
throw new Error("CFB stream names with expanding uppercase mappings are unsupported");
|
|
2394
2394
|
}
|
|
2395
|
-
if (
|
|
2396
|
-
return
|
|
2395
|
+
if (a2.length !== b.length) {
|
|
2396
|
+
return a2.length - b.length;
|
|
2397
2397
|
}
|
|
2398
2398
|
for (let i2 = 0; i2 < ua.length; i2++) {
|
|
2399
2399
|
const diff = ua.charCodeAt(i2) - ub.charCodeAt(i2);
|
|
@@ -2512,15 +2512,15 @@ function serializeDirectoryEntries(dirEntries, numDirSectors, sectorSize) {
|
|
|
2512
2512
|
const dirView = new DataView(dirData.buffer);
|
|
2513
2513
|
const tree = buildDirectoryTree(dirEntries.length);
|
|
2514
2514
|
for (let i2 = 0; i2 < dirEntries.length; i2++) {
|
|
2515
|
-
const
|
|
2515
|
+
const entry2 = dirEntries[i2];
|
|
2516
2516
|
const entryOffset = i2 * DIR_ENTRY_SIZE;
|
|
2517
|
-
const nameBytes = encodeName(
|
|
2517
|
+
const nameBytes = encodeName(entry2.name);
|
|
2518
2518
|
dirData.set(nameBytes.subarray(0, Math.min(nameBytes.length, 64)), entryOffset);
|
|
2519
|
-
dirView.setUint16(entryOffset + 64, Math.min((
|
|
2520
|
-
dirData[entryOffset + 66] =
|
|
2519
|
+
dirView.setUint16(entryOffset + 64, Math.min((entry2.name.length + 1) * 2, 64), true);
|
|
2520
|
+
dirData[entryOffset + 66] = entry2.type;
|
|
2521
2521
|
dirData[entryOffset + 67] = i2 === 0 ? 1 : tree.links.get(i2).color;
|
|
2522
|
-
if (
|
|
2523
|
-
dirData.set(
|
|
2522
|
+
if (entry2.clsid) {
|
|
2523
|
+
dirData.set(entry2.clsid.subarray(0, 16), entryOffset + 80);
|
|
2524
2524
|
}
|
|
2525
2525
|
if (i2 === 0) {
|
|
2526
2526
|
dirView.setUint32(entryOffset + 68, 4294967295, true);
|
|
@@ -2531,8 +2531,8 @@ function serializeDirectoryEntries(dirEntries, numDirSectors, sectorSize) {
|
|
|
2531
2531
|
dirView.setUint32(entryOffset + 72, tree.links.get(i2).right, true);
|
|
2532
2532
|
dirView.setUint32(entryOffset + 76, 4294967295, true);
|
|
2533
2533
|
}
|
|
2534
|
-
dirView.setUint32(entryOffset + 116,
|
|
2535
|
-
dirView.setUint32(entryOffset + 120,
|
|
2534
|
+
dirView.setUint32(entryOffset + 116, entry2.startSector, true);
|
|
2535
|
+
dirView.setUint32(entryOffset + 120, entry2.size, true);
|
|
2536
2536
|
}
|
|
2537
2537
|
return dirData;
|
|
2538
2538
|
}
|
|
@@ -2643,7 +2643,7 @@ function buildOle2(streams2, rootClsid, miniStreamCutoff = 4096) {
|
|
|
2643
2643
|
});
|
|
2644
2644
|
}
|
|
2645
2645
|
const [rootEntry, ...streamEntries] = dirEntries;
|
|
2646
|
-
streamEntries.sort((
|
|
2646
|
+
streamEntries.sort((a2, b) => compareDirEntryNames(a2.name, b.name));
|
|
2647
2647
|
const sortedDirEntries = [rootEntry, ...streamEntries];
|
|
2648
2648
|
const numDirSectors = Math.ceil(dirEntries.length * DIR_ENTRY_SIZE / sectorSize);
|
|
2649
2649
|
const firstDirSector = nextSector;
|
|
@@ -3071,12 +3071,18 @@ var NS = {
|
|
|
3071
3071
|
w: "http://schemas.openxmlformats.org/wordprocessingml/2006/main",
|
|
3072
3072
|
/** DrawingML main. */
|
|
3073
3073
|
a: "http://schemas.openxmlformats.org/drawingml/2006/main",
|
|
3074
|
+
/** DrawingML chart. */
|
|
3075
|
+
c: "http://schemas.openxmlformats.org/drawingml/2006/chart",
|
|
3076
|
+
/** Office 2010 chart extensions, including built-in modern chart styles. */
|
|
3077
|
+
c14: "http://schemas.microsoft.com/office/drawing/2007/8/2/chart",
|
|
3074
3078
|
/** DrawingML diagram (SmartArt) main. */
|
|
3075
3079
|
dgm: "http://schemas.openxmlformats.org/drawingml/2006/diagram",
|
|
3076
3080
|
/** Office 2007+ diagram drawing (`dsp`). */
|
|
3077
3081
|
dsp: "http://schemas.microsoft.com/office/drawing/2008/diagram",
|
|
3078
3082
|
/** Relationships (`r:id`, `r:embed`). */
|
|
3079
3083
|
r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
|
|
3084
|
+
/** Markup compatibility (`mc:AlternateContent`). */
|
|
3085
|
+
mc: "http://schemas.openxmlformats.org/markup-compatibility/2006",
|
|
3080
3086
|
/** OPC relationships part. */
|
|
3081
3087
|
rels: "http://schemas.openxmlformats.org/package/2006/relationships",
|
|
3082
3088
|
/** OPC content types part. */
|
|
@@ -3157,6 +3163,10 @@ function resolvePartPath(basePart, target) {
|
|
|
3157
3163
|
}
|
|
3158
3164
|
return resolved.join("/");
|
|
3159
3165
|
}
|
|
3166
|
+
function relationshipsPartFor(partName) {
|
|
3167
|
+
const slash = partName.lastIndexOf("/");
|
|
3168
|
+
return `${partName.slice(0, slash + 1)}_rels/${partName.slice(slash + 1)}.rels`;
|
|
3169
|
+
}
|
|
3160
3170
|
function nextRelationshipId(used) {
|
|
3161
3171
|
let index = 1;
|
|
3162
3172
|
while (used.has(`rId${index}`)) index++;
|
|
@@ -3299,7 +3309,7 @@ function parseCoreProperties(xml) {
|
|
|
3299
3309
|
}
|
|
3300
3310
|
return Object.keys(result).length ? result : void 0;
|
|
3301
3311
|
}
|
|
3302
|
-
var same = (
|
|
3312
|
+
var same = (a2, b) => PROPERTY_FIELDS.every((field) => (a2?.[field] ?? "") === (b?.[field] ?? ""));
|
|
3303
3313
|
async function applyCoreProperties(zip, next, prior) {
|
|
3304
3314
|
if (same(next, prior)) return;
|
|
3305
3315
|
const existing = zip.file(CORE_PATH);
|
|
@@ -3458,13 +3468,13 @@ function buildCommentsExtendedDocument(comments) {
|
|
|
3458
3468
|
);
|
|
3459
3469
|
const root = doc.documentElement;
|
|
3460
3470
|
comments.forEach((comment, index) => {
|
|
3461
|
-
const
|
|
3462
|
-
|
|
3463
|
-
if (comment.resolved)
|
|
3464
|
-
const parentIndex = comments.findIndex((
|
|
3471
|
+
const entry2 = doc.createElementNS(W15_NS, "w15:commentEx");
|
|
3472
|
+
entry2.setAttributeNS(W15_NS, "w15:paraId", paraIdFor(comment.id, index));
|
|
3473
|
+
if (comment.resolved) entry2.setAttributeNS(W15_NS, "w15:done", "1");
|
|
3474
|
+
const parentIndex = comments.findIndex((c2) => c2.id === comment.parentId);
|
|
3465
3475
|
if (parentIndex >= 0)
|
|
3466
|
-
|
|
3467
|
-
root.appendChild(
|
|
3476
|
+
entry2.setAttributeNS(W15_NS, "w15:paraIdParent", paraIdFor(comment.parentId, parentIndex));
|
|
3477
|
+
root.appendChild(entry2);
|
|
3468
3478
|
});
|
|
3469
3479
|
return doc;
|
|
3470
3480
|
}
|
|
@@ -3594,7 +3604,7 @@ function rangeEdges(runs, ranges) {
|
|
|
3594
3604
|
const opens = /* @__PURE__ */ new Map();
|
|
3595
3605
|
const closes = /* @__PURE__ */ new Map();
|
|
3596
3606
|
const order = (key) => key.startsWith("comment:") ? 0 : 1;
|
|
3597
|
-
for (const key of [...first3.keys()].sort((
|
|
3607
|
+
for (const key of [...first3.keys()].sort((a2, b) => order(a2) - order(b))) {
|
|
3598
3608
|
if (!ranges?.before.has(key)) {
|
|
3599
3609
|
const index = first3.get(key);
|
|
3600
3610
|
(opens.get(index) ?? opens.set(index, []).get(index)).push(edgeFor(key, index));
|
|
@@ -3942,8 +3952,8 @@ function orderChildren(parent, order) {
|
|
|
3942
3952
|
if (rank >= 0) previousRank = rank;
|
|
3943
3953
|
return { element, index, rank: rank >= 0 ? rank : previousRank + 0.5 };
|
|
3944
3954
|
});
|
|
3945
|
-
const sorted = [...ranked].sort((
|
|
3946
|
-
if (sorted.every((
|
|
3955
|
+
const sorted = [...ranked].sort((a2, b) => a2.rank - b.rank || a2.index - b.index);
|
|
3956
|
+
if (sorted.every((entry2, index) => entry2.element === elements2[index])) return;
|
|
3947
3957
|
for (const { element } of sorted) parent.appendChild(element);
|
|
3948
3958
|
}
|
|
3949
3959
|
var SECTPR_ORDER = [
|
|
@@ -4905,7 +4915,7 @@ function borderElement(doc, name, side) {
|
|
|
4905
4915
|
}
|
|
4906
4916
|
return element;
|
|
4907
4917
|
}
|
|
4908
|
-
var sameJson = (
|
|
4918
|
+
var sameJson = (a2, b) => JSON.stringify(a2 ?? null) === JSON.stringify(b ?? null);
|
|
4909
4919
|
function updateShading(doc, props, paragraph, base) {
|
|
4910
4920
|
if (base && paragraph.shadingFill === base.shadingFill) return;
|
|
4911
4921
|
for (const element of children2(props, "shd")) props.removeChild(element);
|
|
@@ -5097,8 +5107,8 @@ function reconcileBookmarks(doc, starts, ends, names, baseNames, nextId) {
|
|
|
5097
5107
|
function setAttribute3(element, local, value) {
|
|
5098
5108
|
element.setAttributeNS(WORD_NS, `w:${local}`, value);
|
|
5099
5109
|
}
|
|
5100
|
-
function sameNumbering(
|
|
5101
|
-
return
|
|
5110
|
+
function sameNumbering(a2, b) {
|
|
5111
|
+
return a2?.numId === b?.numId && a2?.level === b?.level;
|
|
5102
5112
|
}
|
|
5103
5113
|
function writeNumberingProperties(doc, props, paragraph, base) {
|
|
5104
5114
|
if (base && sameNumbering(paragraph.numbering, base.numbering)) return;
|
|
@@ -5425,11 +5435,11 @@ var allowedRunPropertyAttributes = {
|
|
|
5425
5435
|
shd: ["val", "fill", "color", "themeFill", "themeFillTint", "themeFillShade"]
|
|
5426
5436
|
};
|
|
5427
5437
|
function hasUnexpectedAttributes(element, allowed, allowDateUtc = false) {
|
|
5428
|
-
for (const
|
|
5429
|
-
if (
|
|
5430
|
-
if (allowDateUtc &&
|
|
5438
|
+
for (const attribute2 of Array.from(element.attributes)) {
|
|
5439
|
+
if (attribute2.namespaceURI === "http://www.w3.org/2000/xmlns/") continue;
|
|
5440
|
+
if (allowDateUtc && attribute2.namespaceURI === WORD_DATE_UTC_NS && attribute2.localName === "dateUtc")
|
|
5431
5441
|
continue;
|
|
5432
|
-
if (
|
|
5442
|
+
if (attribute2.namespaceURI !== WORD_NS || !allowed.includes(attribute2.localName)) return true;
|
|
5433
5443
|
}
|
|
5434
5444
|
return false;
|
|
5435
5445
|
}
|
|
@@ -5456,7 +5466,7 @@ function runPropertiesHaveUnknownContent(properties) {
|
|
|
5456
5466
|
if (!isLigatures(property.getAttributeNS(WORD_2010_NS, "val")) || elements(property).length)
|
|
5457
5467
|
return true;
|
|
5458
5468
|
if (Array.from(property.attributes).some(
|
|
5459
|
-
(
|
|
5469
|
+
(attribute2) => attribute2.namespaceURI !== "http://www.w3.org/2000/xmlns/" && (attribute2.namespaceURI !== WORD_2010_NS || attribute2.localName !== "val")
|
|
5460
5470
|
))
|
|
5461
5471
|
return true;
|
|
5462
5472
|
continue;
|
|
@@ -5506,12 +5516,12 @@ function runPropertyChanged(run, base, key) {
|
|
|
5506
5516
|
function parseDirectRunProperties(props) {
|
|
5507
5517
|
const result = parseRunProperties(props);
|
|
5508
5518
|
const language = first2(props, "lang");
|
|
5509
|
-
for (const [
|
|
5519
|
+
for (const [attribute2, key] of [
|
|
5510
5520
|
["val", "language"],
|
|
5511
5521
|
["eastAsia", "eastAsiaLanguage"],
|
|
5512
5522
|
["bidi", "bidiLanguage"]
|
|
5513
5523
|
]) {
|
|
5514
|
-
const value = getW(language,
|
|
5524
|
+
const value = getW(language, attribute2);
|
|
5515
5525
|
if (value !== void 0) result[key] = value;
|
|
5516
5526
|
}
|
|
5517
5527
|
const rtl = onOffElement(first2(props, "rtl"));
|
|
@@ -5724,19 +5734,19 @@ function colorOf(value) {
|
|
|
5724
5734
|
}
|
|
5725
5735
|
function parseWatermarkShape(shape) {
|
|
5726
5736
|
if (!shape || !(shape.getAttribute("id") ?? "").startsWith(WATERMARK_PREFIX)) return void 0;
|
|
5727
|
-
const
|
|
5728
|
-
if (!
|
|
5737
|
+
const path2 = Array.from(shape.getElementsByTagNameNS(VML_NS, "textpath"))[0];
|
|
5738
|
+
if (!path2) return void 0;
|
|
5729
5739
|
const style = shape.getAttribute("style") ?? "";
|
|
5730
5740
|
const fill = Array.from(shape.getElementsByTagNameNS(VML_NS, "fill"))[0];
|
|
5731
5741
|
const opacity = fill?.getAttribute("opacity");
|
|
5732
5742
|
const family = /font-family:\s*(?:"|"|')?([^;"'&]+)/i.exec(
|
|
5733
|
-
|
|
5743
|
+
path2.getAttribute("style") ?? ""
|
|
5734
5744
|
)?.[1];
|
|
5735
5745
|
const width = /width:\s*([\d.]+)pt/i.exec(style);
|
|
5736
5746
|
const height = /height:\s*([\d.]+)pt/i.exec(style);
|
|
5737
5747
|
const rotation = /rotation:\s*(-?[\d.]+)/i.exec(style);
|
|
5738
5748
|
const spec = {
|
|
5739
|
-
text:
|
|
5749
|
+
text: path2.getAttribute("string") ?? "",
|
|
5740
5750
|
color: colorOf(shape.getAttribute("fillcolor")),
|
|
5741
5751
|
semitransparent: opacity !== null && opacity !== "" && opacity !== "1",
|
|
5742
5752
|
layout: rotation && Math.abs(Number(rotation[1]) % 360) > 1 ? "diagonal" : "horizontal",
|
|
@@ -5792,11 +5802,11 @@ function buildWatermarkRun(doc, spec, uniqueId) {
|
|
|
5792
5802
|
f6.setAttribute("eqn", eqn);
|
|
5793
5803
|
formulas.appendChild(f6);
|
|
5794
5804
|
}
|
|
5795
|
-
const
|
|
5796
|
-
|
|
5797
|
-
|
|
5798
|
-
|
|
5799
|
-
|
|
5805
|
+
const path2 = v("path");
|
|
5806
|
+
path2.setAttribute("textpathok", "t");
|
|
5807
|
+
path2.setAttributeNS(OFFICE_NS, "o:connecttype", "custom");
|
|
5808
|
+
path2.setAttributeNS(OFFICE_NS, "o:connectlocs", "@9,0;@10,10800;@11,21600;@12,10800");
|
|
5809
|
+
path2.setAttributeNS(OFFICE_NS, "o:connectangles", "270,180,90,0");
|
|
5800
5810
|
const typePath = v("textpath");
|
|
5801
5811
|
typePath.setAttribute("on", "t");
|
|
5802
5812
|
typePath.setAttribute("fitshape", "t");
|
|
@@ -5809,7 +5819,7 @@ function buildWatermarkRun(doc, spec, uniqueId) {
|
|
|
5809
5819
|
lock.setAttributeNS(VML_NS, "v:ext", "edit");
|
|
5810
5820
|
lock.setAttribute("text", "t");
|
|
5811
5821
|
lock.setAttribute("shapetype", "t");
|
|
5812
|
-
for (const child3 of [formulas,
|
|
5822
|
+
for (const child3 of [formulas, path2, typePath, handles, lock]) type.appendChild(child3);
|
|
5813
5823
|
const size = watermarkSizePt(spec);
|
|
5814
5824
|
const shape = v("shape");
|
|
5815
5825
|
shape.setAttribute("id", `${WATERMARK_PREFIX}${uniqueId}`);
|
|
@@ -6042,8 +6052,8 @@ var CUSTOM_LAYOUT_ATTRIBUTES = [
|
|
|
6042
6052
|
];
|
|
6043
6053
|
function parseCustomLayoutAttributes(get) {
|
|
6044
6054
|
const custom = {};
|
|
6045
|
-
for (const [key,
|
|
6046
|
-
const raw = get(
|
|
6055
|
+
for (const [key, attribute2, kind] of CUSTOM_LAYOUT_ATTRIBUTES) {
|
|
6056
|
+
const raw = get(attribute2);
|
|
6047
6057
|
const value = kind === "flag" ? optionalBoolean(raw) : optionalScaled(raw, kind === "angle" ? 6e4 : 1e5);
|
|
6048
6058
|
if (value !== void 0) custom[key] = value;
|
|
6049
6059
|
}
|
|
@@ -6057,8 +6067,8 @@ var RELATIONSHIP_ATTRIBUTES = [
|
|
|
6057
6067
|
];
|
|
6058
6068
|
function parseRelationshipIdAttributes(get) {
|
|
6059
6069
|
const result = {};
|
|
6060
|
-
for (const [property,
|
|
6061
|
-
const value = optionalString(get(
|
|
6070
|
+
for (const [property, attribute2] of RELATIONSHIP_ATTRIBUTES) {
|
|
6071
|
+
const value = optionalString(get(attribute2));
|
|
6062
6072
|
if (value) result[property] = value;
|
|
6063
6073
|
}
|
|
6064
6074
|
return result;
|
|
@@ -6120,7 +6130,7 @@ async function resolveDiagramDrawingPart(hostPart, dataRelId, drawingExtensionRe
|
|
|
6120
6130
|
const entries = await host.readRelationshipEntries(diagramRelationshipsPart(dataPath));
|
|
6121
6131
|
if (!entries) return void 0;
|
|
6122
6132
|
const drawing = entries.find(
|
|
6123
|
-
(
|
|
6133
|
+
(entry2) => (!drawingExtensionRelId || entry2.id.trim() === drawingExtensionRelId) && entry2.type.endsWith("/diagramDrawing")
|
|
6124
6134
|
);
|
|
6125
6135
|
const id = drawing?.id.trim() ?? "";
|
|
6126
6136
|
const target = drawing?.target.trim() ?? "";
|
|
@@ -6265,14 +6275,14 @@ function parseDiagramDataModel(source, part) {
|
|
|
6265
6275
|
if (connection.modelId && connectionIds.has(connection.modelId))
|
|
6266
6276
|
report("CONNECTION_ID_DUPLICATE", `Duplicate dgm:cxn modelId: ${connection.modelId}.`);
|
|
6267
6277
|
if (connection.modelId) connectionIds.add(connection.modelId);
|
|
6268
|
-
for (const [
|
|
6278
|
+
for (const [attribute2, id] of [
|
|
6269
6279
|
["srcId", connection.sourceId],
|
|
6270
6280
|
["destId", connection.destId]
|
|
6271
6281
|
])
|
|
6272
6282
|
if (!ids.has(id))
|
|
6273
6283
|
report(
|
|
6274
6284
|
"CONNECTION_ENDPOINT_MISSING",
|
|
6275
|
-
`dgm:cxn ${
|
|
6285
|
+
`dgm:cxn ${attribute2} references missing point: ${id}.`
|
|
6276
6286
|
);
|
|
6277
6287
|
const label = connectionLabel(connection, transitionText);
|
|
6278
6288
|
connections.push(label ? { ...connection, label } : connection);
|
|
@@ -6301,10 +6311,10 @@ var COLOR_ELEMENTS = {
|
|
|
6301
6311
|
hslClr: "hsl"
|
|
6302
6312
|
};
|
|
6303
6313
|
function colorValue(kind, element) {
|
|
6304
|
-
const
|
|
6305
|
-
if (kind === "scrgb") return `${
|
|
6306
|
-
if (kind === "hsl") return `${
|
|
6307
|
-
return
|
|
6314
|
+
const attribute2 = (name) => element.getAttribute(name) ?? "";
|
|
6315
|
+
if (kind === "scrgb") return `${attribute2("r")},${attribute2("g")},${attribute2("b")}`;
|
|
6316
|
+
if (kind === "hsl") return `${attribute2("hue")},${attribute2("sat")},${attribute2("lum")}`;
|
|
6317
|
+
return attribute2("val");
|
|
6308
6318
|
}
|
|
6309
6319
|
function parseDrawingColorIn(container2) {
|
|
6310
6320
|
if (!container2) return void 0;
|
|
@@ -6462,7 +6472,7 @@ function parseDrawingFill(properties) {
|
|
|
6462
6472
|
});
|
|
6463
6473
|
const angle = Number.parseInt(first(fill, "lin", NS.a)?.getAttribute("ang") ?? "", 10);
|
|
6464
6474
|
const scaled = first(fill, "lin", NS.a)?.getAttribute("scaled");
|
|
6465
|
-
const
|
|
6475
|
+
const path2 = first(fill, "path", NS.a)?.getAttribute("path");
|
|
6466
6476
|
const focus = first(first(fill, "path", NS.a), "fillToRect", NS.a);
|
|
6467
6477
|
const tile = first(fill, "tileRect", NS.a);
|
|
6468
6478
|
const tileRect = tile ? {
|
|
@@ -6484,7 +6494,7 @@ function parseDrawingFill(properties) {
|
|
|
6484
6494
|
...Number.isFinite(angle) ? { angle: angle / 6e4 } : {},
|
|
6485
6495
|
...scaled === "1" || scaled === "true" ? { scaled: true } : {},
|
|
6486
6496
|
...scaled === "0" || scaled === "false" ? { scaled: false } : {},
|
|
6487
|
-
...
|
|
6497
|
+
...path2 ? { path: path2 } : {},
|
|
6488
6498
|
...fillToRect && Object.values(fillToRect).every(Number.isFinite) ? { fillToRect } : {},
|
|
6489
6499
|
...tileRect && Object.values(tileRect).every(Number.isFinite) ? { tileRect } : {}
|
|
6490
6500
|
};
|
|
@@ -6588,13 +6598,13 @@ function parseDrawingTextBody(body) {
|
|
|
6588
6598
|
const anchor = properties?.getAttribute("anchor");
|
|
6589
6599
|
if (anchor) result.anchor = anchor;
|
|
6590
6600
|
const insets = {};
|
|
6591
|
-
for (const [key,
|
|
6601
|
+
for (const [key, attribute2] of [
|
|
6592
6602
|
["left", "lIns"],
|
|
6593
6603
|
["top", "tIns"],
|
|
6594
6604
|
["right", "rIns"],
|
|
6595
6605
|
["bottom", "bIns"]
|
|
6596
6606
|
]) {
|
|
6597
|
-
const value = Number.parseInt(properties?.getAttribute(
|
|
6607
|
+
const value = Number.parseInt(properties?.getAttribute(attribute2) ?? "", 10);
|
|
6598
6608
|
if (Number.isFinite(value)) insets[key] = value;
|
|
6599
6609
|
}
|
|
6600
6610
|
if (Object.keys(insets).length > 0) result.insetsEmu = insets;
|
|
@@ -6625,18 +6635,18 @@ function parseTransform(xfrm) {
|
|
|
6625
6635
|
...booleanAttribute(xfrm, "flipV") ? { flipVertical: true } : {}
|
|
6626
6636
|
};
|
|
6627
6637
|
}
|
|
6628
|
-
function parsePathCommands(
|
|
6638
|
+
function parsePathCommands(path2) {
|
|
6629
6639
|
const commands = [];
|
|
6630
6640
|
const point = (element) => {
|
|
6631
6641
|
const x = int(element, "x");
|
|
6632
6642
|
const y = int(element, "y");
|
|
6633
6643
|
return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : void 0;
|
|
6634
6644
|
};
|
|
6635
|
-
for (const element of Array.from(
|
|
6645
|
+
for (const element of Array.from(path2.childNodes)) {
|
|
6636
6646
|
if (element.nodeType !== 1) continue;
|
|
6637
6647
|
const node = element;
|
|
6638
6648
|
const points = children(node, "pt", NS.a).map(point);
|
|
6639
|
-
if (points.some((
|
|
6649
|
+
if (points.some((entry2) => entry2 === void 0)) return void 0;
|
|
6640
6650
|
const [p0, p1, p2] = points;
|
|
6641
6651
|
switch (node.localName) {
|
|
6642
6652
|
case "moveTo":
|
|
@@ -6679,17 +6689,17 @@ function parseDrawingGeometry(spPr) {
|
|
|
6679
6689
|
const custom = first(spPr, "custGeom", NS.a);
|
|
6680
6690
|
if (custom) {
|
|
6681
6691
|
const paths = [];
|
|
6682
|
-
for (const
|
|
6683
|
-
const commands = parsePathCommands(
|
|
6692
|
+
for (const path2 of children(first(custom, "pathLst", NS.a) ?? custom, "path", NS.a)) {
|
|
6693
|
+
const commands = parsePathCommands(path2);
|
|
6684
6694
|
if (!commands) return { geometry: "custom", issue: "CUSTOM_GEOMETRY_GUIDES_UNSUPPORTED" };
|
|
6685
|
-
const width = int(
|
|
6686
|
-
const height = int(
|
|
6695
|
+
const width = int(path2, "w");
|
|
6696
|
+
const height = int(path2, "h");
|
|
6687
6697
|
paths.push({
|
|
6688
6698
|
commands,
|
|
6689
6699
|
...Number.isFinite(width) ? { width } : {},
|
|
6690
6700
|
...Number.isFinite(height) ? { height } : {},
|
|
6691
|
-
...
|
|
6692
|
-
...
|
|
6701
|
+
...path2.getAttribute("fill") ? { fill: path2.getAttribute("fill") } : {},
|
|
6702
|
+
...path2.getAttribute("stroke") === "0" || path2.getAttribute("stroke") === "false" ? { stroke: false } : {}
|
|
6693
6703
|
});
|
|
6694
6704
|
}
|
|
6695
6705
|
return { geometry: "custom", paths };
|
|
@@ -6957,78 +6967,1316 @@ function parseDiagramGraphic(graphicData, extent, docPr, rels, isAnchor) {
|
|
|
6957
6967
|
const id = docPr?.getAttribute("id") || void 0;
|
|
6958
6968
|
return {
|
|
6959
6969
|
placement: isAnchor ? "anchor" : "inline",
|
|
6960
|
-
extentEmu: { width: emu2(extent, "cx"), height: emu2(extent, "cy") },
|
|
6970
|
+
extentEmu: { width: emu2(extent, "cx"), height: emu2(extent, "cy") },
|
|
6971
|
+
...name ? { name } : {},
|
|
6972
|
+
...id ? { id } : {},
|
|
6973
|
+
relationshipIds,
|
|
6974
|
+
parts,
|
|
6975
|
+
hostRelationships,
|
|
6976
|
+
nodes: [],
|
|
6977
|
+
rendering: "placeholder",
|
|
6978
|
+
notice: diagramNotice("placeholder"),
|
|
6979
|
+
issues
|
|
6980
|
+
};
|
|
6981
|
+
}
|
|
6982
|
+
async function resolveDiagramParts(diagram, readText) {
|
|
6983
|
+
const hostPart = "word/document.xml";
|
|
6984
|
+
const dataPart = diagram.parts.data?.partName;
|
|
6985
|
+
let declaredDrawing;
|
|
6986
|
+
try {
|
|
6987
|
+
const dataXml = dataPart ? await readText(dataPart) : void 0;
|
|
6988
|
+
declaredDrawing = dataXml ? parseDiagramDataModel(dataXml).drawingRelId : void 0;
|
|
6989
|
+
} catch {
|
|
6990
|
+
}
|
|
6991
|
+
const offered = Object.entries(diagram.hostRelationships).filter(
|
|
6992
|
+
([id]) => id === declaredDrawing || !isDrawingRelationship(diagram, id)
|
|
6993
|
+
);
|
|
6994
|
+
const loaded = await loadDiagram(hostPart, diagram.relationshipIds, {
|
|
6995
|
+
hostRelationships: () => new Map(offered.map(([id, name]) => [id, `/${name}`])),
|
|
6996
|
+
resolvePath: resolvePartPath,
|
|
6997
|
+
readText,
|
|
6998
|
+
readRelationshipEntries: async (relsPart) => {
|
|
6999
|
+
const xml = await readText(relsPart);
|
|
7000
|
+
if (!xml) return void 0;
|
|
7001
|
+
try {
|
|
7002
|
+
return [...parseRelationships(xml).values()].map(({ id, type, target }) => ({
|
|
7003
|
+
id,
|
|
7004
|
+
type,
|
|
7005
|
+
target
|
|
7006
|
+
}));
|
|
7007
|
+
} catch {
|
|
7008
|
+
return void 0;
|
|
7009
|
+
}
|
|
7010
|
+
}
|
|
7011
|
+
});
|
|
7012
|
+
const known = new Set(diagram.issues.map((issue) => `${issue.code}|${issue.message}`));
|
|
7013
|
+
const fresh = loaded.issues.filter(
|
|
7014
|
+
(issue) => !issue.code.startsWith("DIAGRAM_RELATIONSHIP_") && !known.has(`${issue.code}|${issue.message}`)
|
|
7015
|
+
);
|
|
7016
|
+
diagram.issues.push(...fresh);
|
|
7017
|
+
if (loaded.paths.drawing && loaded.drawingRelId)
|
|
7018
|
+
diagram.parts.drawing = { relId: loaded.drawingRelId, partName: loaded.paths.drawing };
|
|
7019
|
+
if (loaded.layout) {
|
|
7020
|
+
diagram.layout = {
|
|
7021
|
+
uniqueId: loaded.layout.uniqueId,
|
|
7022
|
+
...loaded.layout.family ? { family: loaded.layout.family } : {},
|
|
7023
|
+
...loaded.layout.rootAlgorithm ? { rootAlgorithm: loaded.layout.rootAlgorithm } : {}
|
|
7024
|
+
};
|
|
7025
|
+
}
|
|
7026
|
+
if (loaded.colors?.uniqueId) diagram.colorsId = loaded.colors.uniqueId;
|
|
7027
|
+
if (loaded.quickStyle?.uniqueId) diagram.quickStyleId = loaded.quickStyle.uniqueId;
|
|
7028
|
+
if (loaded.data)
|
|
7029
|
+
diagram.nodes = loaded.data.nodes.map((node) => ({
|
|
7030
|
+
id: node.modelId,
|
|
7031
|
+
text: node.text,
|
|
7032
|
+
...loaded.data?.parentById.get(node.modelId) ? { parentId: loaded.data.parentById.get(node.modelId) } : {}
|
|
7033
|
+
}));
|
|
7034
|
+
if (loaded.drawing && loaded.drawing.shapes.length > 0) {
|
|
7035
|
+
diagram.drawing = loaded.drawing;
|
|
7036
|
+
diagram.rendering = "cached-drawing";
|
|
7037
|
+
} else {
|
|
7038
|
+
delete diagram.drawing;
|
|
7039
|
+
diagram.rendering = "placeholder";
|
|
7040
|
+
}
|
|
7041
|
+
diagram.notice = diagramNotice(diagram.rendering);
|
|
7042
|
+
}
|
|
7043
|
+
|
|
7044
|
+
// chart/color-style.ts
|
|
7045
|
+
var CHART_COLOR_STYLE_NS = "http://schemas.microsoft.com/office/drawing/2012/chartStyle";
|
|
7046
|
+
function chartColorStyleId(xml) {
|
|
7047
|
+
const root = parseXml(xml).documentElement;
|
|
7048
|
+
if (root.localName !== "colorStyle" || root.namespaceURI !== CHART_COLOR_STYLE_NS)
|
|
7049
|
+
return void 0;
|
|
7050
|
+
const value = root.getAttribute("id");
|
|
7051
|
+
if (!value || !/^\d+$/.test(value)) return void 0;
|
|
7052
|
+
const id = Number(value);
|
|
7053
|
+
return Number.isInteger(id) && id >= 0 ? id : void 0;
|
|
7054
|
+
}
|
|
7055
|
+
|
|
7056
|
+
// chart/built-in-text-style.ts
|
|
7057
|
+
var C14 = NS.c14;
|
|
7058
|
+
function readBuiltInChartStyle(root) {
|
|
7059
|
+
for (const content of children(root, "AlternateContent", NS.mc)) {
|
|
7060
|
+
for (const choice of children(content, "Choice", NS.mc)) {
|
|
7061
|
+
const requires = choice.getAttribute("Requires")?.trim().split(/\s+/);
|
|
7062
|
+
if (!requires?.length || !requires.every((prefix) => choice.lookupNamespaceURI(prefix) === C14))
|
|
7063
|
+
continue;
|
|
7064
|
+
const modern = first(choice, "style", C14)?.getAttribute("val");
|
|
7065
|
+
if (modern && /^\d+$/.test(modern) && Number(modern) >= 101 && Number(modern) <= 148)
|
|
7066
|
+
return Number(modern);
|
|
7067
|
+
}
|
|
7068
|
+
}
|
|
7069
|
+
const legacy = first(root, "style", NS.c) ?? first(first(first(root, "AlternateContent", NS.mc), "Fallback", NS.mc), "style", NS.c);
|
|
7070
|
+
const value = legacy?.getAttribute("val");
|
|
7071
|
+
if (!legacy) return 2;
|
|
7072
|
+
return value && /^\d+$/.test(value) && Number.isSafeInteger(Number(value)) ? Number(value) : void 0;
|
|
7073
|
+
}
|
|
7074
|
+
|
|
7075
|
+
// chart/read-appearance.ts
|
|
7076
|
+
function readChartAppearance(text, properties) {
|
|
7077
|
+
const out = {};
|
|
7078
|
+
const size = Number(text?.getAttribute("sz") ?? NaN);
|
|
7079
|
+
if (Number.isFinite(size) && size > 0) out.fontSize = size / 100;
|
|
7080
|
+
for (const [attribute2, key] of [
|
|
7081
|
+
["b", "bold"],
|
|
7082
|
+
["i", "italic"]
|
|
7083
|
+
]) {
|
|
7084
|
+
const value = text?.getAttribute(attribute2);
|
|
7085
|
+
if (value !== null && value !== void 0) out[key] = value === "1" || value === "true";
|
|
7086
|
+
}
|
|
7087
|
+
const typeface = first(text, "latin", NS.a)?.getAttribute("typeface");
|
|
7088
|
+
const underline = text?.getAttribute("u");
|
|
7089
|
+
if (underline) out.underline = underline !== "none";
|
|
7090
|
+
if (typeface) out.typeface = typeface;
|
|
7091
|
+
const color = parseDrawingColorIn(first(text, "solidFill", NS.a));
|
|
7092
|
+
if (color) out.textColor = color;
|
|
7093
|
+
const fill = parseDrawingFill(properties);
|
|
7094
|
+
const line = parseDrawingLine(first(properties, "ln", NS.a));
|
|
7095
|
+
if (fill) out.fill = fill;
|
|
7096
|
+
if (line) out.line = line;
|
|
7097
|
+
const effects = first(text, "effectLst", NS.a);
|
|
7098
|
+
if (effects) out.textEffectsXml = buildXml(effects);
|
|
7099
|
+
return out;
|
|
7100
|
+
}
|
|
7101
|
+
|
|
7102
|
+
// chart/formatting-nodes.ts
|
|
7103
|
+
function chartFormattingNodes(root) {
|
|
7104
|
+
const chart = first(root, "chart", NS.c);
|
|
7105
|
+
const plot = first(chart, "plotArea", NS.c);
|
|
7106
|
+
const category = first(plot, "catAx", NS.c) ?? first(plot, "dateAx", NS.c);
|
|
7107
|
+
const values = plot ? children(plot, "valAx", NS.c) : [];
|
|
7108
|
+
return {
|
|
7109
|
+
chartArea: root,
|
|
7110
|
+
plotArea: plot,
|
|
7111
|
+
title: first(chart, "title", NS.c),
|
|
7112
|
+
legend: first(chart, "legend", NS.c),
|
|
7113
|
+
categoryAxis: category ?? values[0],
|
|
7114
|
+
valueAxis: category ? values[0] : values[1],
|
|
7115
|
+
gridlineMajor: first(values[0], "majorGridlines", NS.c),
|
|
7116
|
+
gridlineMinor: first(values[0], "minorGridlines", NS.c)
|
|
7117
|
+
};
|
|
7118
|
+
}
|
|
7119
|
+
|
|
7120
|
+
// chart/manual-layout.ts
|
|
7121
|
+
function readChartManualLayoutValues(value) {
|
|
7122
|
+
const result = {};
|
|
7123
|
+
const enumeration = (name, values) => {
|
|
7124
|
+
const raw = value(name);
|
|
7125
|
+
return values.includes(raw) ? raw : void 0;
|
|
7126
|
+
};
|
|
7127
|
+
const target = enumeration("layoutTarget", ["inner", "outer"]);
|
|
7128
|
+
if (target) result.layoutTarget = target;
|
|
7129
|
+
for (const [xml, key] of [
|
|
7130
|
+
["xMode", "xMode"],
|
|
7131
|
+
["yMode", "yMode"],
|
|
7132
|
+
["wMode", "widthMode"],
|
|
7133
|
+
["hMode", "heightMode"]
|
|
7134
|
+
]) {
|
|
7135
|
+
const mode = enumeration(xml, ["edge", "factor"]);
|
|
7136
|
+
if (mode) result[key] = mode;
|
|
7137
|
+
}
|
|
7138
|
+
for (const [xml, key] of [
|
|
7139
|
+
["x", "x"],
|
|
7140
|
+
["y", "y"],
|
|
7141
|
+
["w", "width"],
|
|
7142
|
+
["h", "height"]
|
|
7143
|
+
]) {
|
|
7144
|
+
const raw = value(xml);
|
|
7145
|
+
if (typeof raw !== "string" && typeof raw !== "number" || typeof raw === "string" && !raw.trim())
|
|
7146
|
+
continue;
|
|
7147
|
+
const number = Number(raw);
|
|
7148
|
+
if (Number.isFinite(number)) result[key] = number;
|
|
7149
|
+
}
|
|
7150
|
+
return Object.keys(result).length ? result : void 0;
|
|
7151
|
+
}
|
|
7152
|
+
|
|
7153
|
+
// chart/read-formatting.ts
|
|
7154
|
+
var c = (parent, name) => first(parent, name, NS.c);
|
|
7155
|
+
var a = (parent, name) => first(parent, name, NS.a);
|
|
7156
|
+
function entry(node) {
|
|
7157
|
+
const body = c(node, "txPr");
|
|
7158
|
+
const paragraph = a(body, "p");
|
|
7159
|
+
const defaults = a(a(paragraph, "pPr"), "defRPr");
|
|
7160
|
+
const rich = c(c(node, "tx"), "rich");
|
|
7161
|
+
const richParagraph = a(rich, "p");
|
|
7162
|
+
const textBody = parseDrawingTextBody(rich);
|
|
7163
|
+
const manual = c(c(node, "layout"), "manualLayout");
|
|
7164
|
+
const layout2 = manual ? readChartManualLayoutValues((name) => c(manual, name)?.getAttribute("val")) : void 0;
|
|
7165
|
+
const overlay = c(node, "overlay")?.getAttribute("val");
|
|
7166
|
+
const out = {
|
|
7167
|
+
sourceXml: buildXml(node),
|
|
7168
|
+
...layout2 ? { layout: layout2 } : {},
|
|
7169
|
+
...overlay === "0" || overlay === "false" ? { overlay: false } : overlay === "1" || overlay === "true" ? { overlay: true } : {},
|
|
7170
|
+
...readChartAppearance(defaults, c(node, "spPr")),
|
|
7171
|
+
...readChartAppearance(a(a(richParagraph, "pPr"), "defRPr"), void 0),
|
|
7172
|
+
...readChartAppearance(a(a(richParagraph, "r"), "rPr"), void 0),
|
|
7173
|
+
...textBody ? { textBody, textBodyStyle: readChartAppearance(defaults, void 0) } : {}
|
|
7174
|
+
};
|
|
7175
|
+
if (["catAx", "dateAx", "valAx"].includes(node.localName)) {
|
|
7176
|
+
const deleted = c(node, "delete")?.getAttribute("val");
|
|
7177
|
+
if (deleted !== void 0) out.axisVisible = deleted !== "1" && deleted !== "true";
|
|
7178
|
+
out.labelsVisible = out.axisVisible !== false && c(node, "tickLblPos")?.getAttribute("val") !== "none";
|
|
7179
|
+
}
|
|
7180
|
+
return out;
|
|
7181
|
+
}
|
|
7182
|
+
function readChartFormatting(root) {
|
|
7183
|
+
const nodes = chartFormattingNodes(root);
|
|
7184
|
+
const entries = Object.fromEntries(
|
|
7185
|
+
Object.entries(nodes).flatMap(([name, node]) => node ? [[name, entry(node)]] : [])
|
|
7186
|
+
);
|
|
7187
|
+
const builtInStyle = readBuiltInChartStyle(root);
|
|
7188
|
+
const textBody = c(root, "txPr");
|
|
7189
|
+
const textDefaults = textBody ? {
|
|
7190
|
+
sourceXml: buildXml(textBody),
|
|
7191
|
+
...readChartAppearance(a(a(a(textBody, "p"), "pPr"), "defRPr"), void 0)
|
|
7192
|
+
} : void 0;
|
|
7193
|
+
return Object.keys(entries).length ? {
|
|
7194
|
+
entries,
|
|
7195
|
+
sourceXml: buildXml(root),
|
|
7196
|
+
...builtInStyle === void 0 ? {} : { builtInStyle },
|
|
7197
|
+
...textDefaults ? { textDefaults } : {}
|
|
7198
|
+
} : void 0;
|
|
7199
|
+
}
|
|
7200
|
+
|
|
7201
|
+
// chart/data-cache.ts
|
|
7202
|
+
function chartCacheValues(cache) {
|
|
7203
|
+
if (!cache) return [];
|
|
7204
|
+
const numeric = cache.type === "number";
|
|
7205
|
+
const out = [];
|
|
7206
|
+
for (const point of cache.points) {
|
|
7207
|
+
const text = point.value;
|
|
7208
|
+
out[point.index ?? out.length] = numeric && text.trim() !== "" && Number.isFinite(Number(text)) ? Number(text) : text;
|
|
7209
|
+
}
|
|
7210
|
+
const size = Math.max(cache.pointCount ?? 0, out.length);
|
|
7211
|
+
for (let index = 0; index < size; index++) if (out[index] === void 0) out[index] = "";
|
|
7212
|
+
return out;
|
|
7213
|
+
}
|
|
7214
|
+
|
|
7215
|
+
// chart/xml-fragment.ts
|
|
7216
|
+
var CHART_ROOT_BINDINGS = /* @__PURE__ */ new Map([
|
|
7217
|
+
["c", NS.c],
|
|
7218
|
+
["a", NS.a],
|
|
7219
|
+
["r", NS.r]
|
|
7220
|
+
]);
|
|
7221
|
+
var DECLARATION = / xmlns:([A-Za-z_][\w.-]*)="([^"]*)"/g;
|
|
7222
|
+
function stripDeclarations(xml, bindings) {
|
|
7223
|
+
const conflicting = /* @__PURE__ */ new Set();
|
|
7224
|
+
for (const [, prefix, uri] of xml.matchAll(DECLARATION))
|
|
7225
|
+
if (prefix !== void 0 && bindings.has(prefix) && bindings.get(prefix) !== uri)
|
|
7226
|
+
conflicting.add(prefix);
|
|
7227
|
+
return xml.replace(
|
|
7228
|
+
DECLARATION,
|
|
7229
|
+
(match, prefix, uri) => bindings.get(prefix) === uri && !conflicting.has(prefix) ? "" : match
|
|
7230
|
+
);
|
|
7231
|
+
}
|
|
7232
|
+
var innerXml = (element) => stripDeclarations(elements(element).map(buildXml).join(""), CHART_ROOT_BINDINGS);
|
|
7233
|
+
|
|
7234
|
+
// chart/parse-util.ts
|
|
7235
|
+
var cChild = (parent, local) => first(parent, local, NS.c);
|
|
7236
|
+
var attribute = (element, name) => element?.hasAttribute(name) ? element.getAttribute(name) ?? void 0 : void 0;
|
|
7237
|
+
var cVal = (parent, local) => attribute(cChild(parent, local), "val");
|
|
7238
|
+
var path = (element) => `c:${element.parentNode?.localName ?? ""}/c:${element.localName}`;
|
|
7239
|
+
function malformed(context, element, value) {
|
|
7240
|
+
context.issues.push({
|
|
7241
|
+
code: "CHART_VALUE_INVALID",
|
|
7242
|
+
message: `${path(element)} has an unreadable value "${value}".`
|
|
7243
|
+
});
|
|
7244
|
+
}
|
|
7245
|
+
function cBool(context, parent, local) {
|
|
7246
|
+
const element = cChild(parent, local);
|
|
7247
|
+
if (!element) return void 0;
|
|
7248
|
+
const raw = attribute(element, "val");
|
|
7249
|
+
if (raw === void 0) return true;
|
|
7250
|
+
const value = raw.trim().toLowerCase();
|
|
7251
|
+
if (value === "1" || value === "true") return true;
|
|
7252
|
+
if (value === "0" || value === "false") return false;
|
|
7253
|
+
malformed(context, element, raw);
|
|
7254
|
+
return void 0;
|
|
7255
|
+
}
|
|
7256
|
+
function cNumber(context, parent, local) {
|
|
7257
|
+
const element = cChild(parent, local);
|
|
7258
|
+
const raw = attribute(element, "val");
|
|
7259
|
+
if (!element || raw === void 0) return void 0;
|
|
7260
|
+
const value = raw.trim() ? Number(raw) : Number.NaN;
|
|
7261
|
+
if (Number.isFinite(value)) return value;
|
|
7262
|
+
malformed(context, element, raw);
|
|
7263
|
+
return void 0;
|
|
7264
|
+
}
|
|
7265
|
+
function reportUnmodelled(context, element, handled) {
|
|
7266
|
+
for (const child3 of elements(element)) {
|
|
7267
|
+
if (handled.has(child3.localName)) continue;
|
|
7268
|
+
context.issues.push({
|
|
7269
|
+
code: "CHART_ELEMENT_NOT_MODELLED",
|
|
7270
|
+
message: `${path(child3)} is not modelled; it is kept only in the source part.`
|
|
7271
|
+
});
|
|
7272
|
+
}
|
|
7273
|
+
}
|
|
7274
|
+
function extensionList(parent) {
|
|
7275
|
+
const extLst = cChild(parent, "extLst");
|
|
7276
|
+
return extLst ? buildXml(extLst) : void 0;
|
|
7277
|
+
}
|
|
7278
|
+
function readShapeFields(spPr) {
|
|
7279
|
+
const out = {};
|
|
7280
|
+
const fill = parseDrawingFill(spPr);
|
|
7281
|
+
if (fill) out.fill = fill;
|
|
7282
|
+
const line = parseDrawingLine(first(spPr, "ln", NS.a));
|
|
7283
|
+
if (line) out.line = line;
|
|
7284
|
+
const effects = first(spPr, "effectLst", NS.a);
|
|
7285
|
+
if (effects) out.effectsXml = buildXml(effects);
|
|
7286
|
+
return out;
|
|
7287
|
+
}
|
|
7288
|
+
function shapeProperties(parent) {
|
|
7289
|
+
const spPr = cChild(parent, "spPr");
|
|
7290
|
+
if (!spPr) return void 0;
|
|
7291
|
+
const out = readShapeFields(spPr);
|
|
7292
|
+
const source = innerXml(spPr);
|
|
7293
|
+
if (source) out.sourceXml = source;
|
|
7294
|
+
return out;
|
|
7295
|
+
}
|
|
7296
|
+
function chartTextBody(element) {
|
|
7297
|
+
const body = parseDrawingTextBody(element);
|
|
7298
|
+
if (!body || !element) return body;
|
|
7299
|
+
const source = innerXml(element);
|
|
7300
|
+
if (source) body.sourceXml = source;
|
|
7301
|
+
return body;
|
|
7302
|
+
}
|
|
7303
|
+
var textProperties = (parent) => chartTextBody(cChild(parent, "txPr"));
|
|
7304
|
+
function chartLines(parent, local) {
|
|
7305
|
+
const element = cChild(parent, local);
|
|
7306
|
+
if (!element) return void 0;
|
|
7307
|
+
const spPr = shapeProperties(element);
|
|
7308
|
+
return spPr ? { spPr } : {};
|
|
7309
|
+
}
|
|
7310
|
+
function numberFormat(parent) {
|
|
7311
|
+
const element = cChild(parent, "numFmt");
|
|
7312
|
+
const formatCode = attribute(element, "formatCode");
|
|
7313
|
+
if (formatCode === void 0) return void 0;
|
|
7314
|
+
const linked = attribute(element, "sourceLinked");
|
|
7315
|
+
return {
|
|
7316
|
+
formatCode,
|
|
7317
|
+
...linked === "1" || linked === "true" ? { sourceLinked: true } : {},
|
|
7318
|
+
...linked === "0" || linked === "false" ? { sourceLinked: false } : {}
|
|
7319
|
+
};
|
|
7320
|
+
}
|
|
7321
|
+
function readLayoutFields(layout2) {
|
|
7322
|
+
const manual = cChild(layout2, "manualLayout");
|
|
7323
|
+
return (manual && readChartManualLayoutValues((name) => cVal(manual, name))) ?? {};
|
|
7324
|
+
}
|
|
7325
|
+
function manualLayout(parent) {
|
|
7326
|
+
const layout2 = cChild(parent, "layout");
|
|
7327
|
+
if (!layout2) return void 0;
|
|
7328
|
+
const out = readLayoutFields(layout2);
|
|
7329
|
+
const source = innerXml(layout2);
|
|
7330
|
+
if (source) out.sourceXml = source;
|
|
7331
|
+
return out;
|
|
7332
|
+
}
|
|
7333
|
+
function assignDefined(target, values) {
|
|
7334
|
+
for (const [key, value] of Object.entries(values))
|
|
7335
|
+
if (value !== void 0) target[key] = value;
|
|
7336
|
+
return target;
|
|
7337
|
+
}
|
|
7338
|
+
|
|
7339
|
+
// chart/parse-text.ts
|
|
7340
|
+
function parseCache(node) {
|
|
7341
|
+
const cache = {
|
|
7342
|
+
type: node.localName === "numCache" || node.localName === "numLit" ? "number" : "string",
|
|
7343
|
+
points: children(node, "pt", NS.c).map((pt) => {
|
|
7344
|
+
const point = { value: cChild(pt, "v")?.textContent ?? "" };
|
|
7345
|
+
const index = Number(attribute(pt, "idx") ?? Number.NaN);
|
|
7346
|
+
if (Number.isInteger(index) && index >= 0) point.index = index;
|
|
7347
|
+
const formatCode2 = attribute(pt, "formatCode");
|
|
7348
|
+
if (formatCode2 !== void 0) point.formatCode = formatCode2;
|
|
7349
|
+
return point;
|
|
7350
|
+
})
|
|
7351
|
+
};
|
|
7352
|
+
const count = Number(cVal(node, "ptCount") ?? Number.NaN);
|
|
7353
|
+
if (Number.isInteger(count) && count >= 0) cache.pointCount = count;
|
|
7354
|
+
const formatCode = cChild(node, "formatCode")?.textContent;
|
|
7355
|
+
if (formatCode) cache.formatCode = formatCode;
|
|
7356
|
+
return cache;
|
|
7357
|
+
}
|
|
7358
|
+
function parseDataSource(element) {
|
|
7359
|
+
if (!element) return void 0;
|
|
7360
|
+
const source = {};
|
|
7361
|
+
const ref = cChild(element, "numRef") ?? cChild(element, "strRef") ?? cChild(element, "multiLvlStrRef");
|
|
7362
|
+
if (ref) {
|
|
7363
|
+
source.kind = ref.localName;
|
|
7364
|
+
const formula = cChild(ref, "f")?.textContent;
|
|
7365
|
+
if (formula) source.formula = formula;
|
|
7366
|
+
const cache = cChild(ref, "numCache") ?? cChild(ref, "strCache");
|
|
7367
|
+
if (cache) source.cache = parseCache(cache);
|
|
7368
|
+
const levels = cChild(ref, "multiLvlStrCache");
|
|
7369
|
+
if (levels) {
|
|
7370
|
+
source.levels = children(levels, "lvl", NS.c).map(parseCache);
|
|
7371
|
+
const count = Number(cVal(levels, "ptCount") ?? Number.NaN);
|
|
7372
|
+
if (Number.isInteger(count) && count >= 0) source.levelPointCount = count;
|
|
7373
|
+
}
|
|
7374
|
+
return source;
|
|
7375
|
+
}
|
|
7376
|
+
const literal = cChild(element, "numLit") ?? cChild(element, "strLit");
|
|
7377
|
+
if (literal) {
|
|
7378
|
+
source.kind = literal.localName;
|
|
7379
|
+
source.cache = parseCache(literal);
|
|
7380
|
+
}
|
|
7381
|
+
return source;
|
|
7382
|
+
}
|
|
7383
|
+
function parseChartText(context, tx, allowValue) {
|
|
7384
|
+
if (!tx) return void 0;
|
|
7385
|
+
const text = {};
|
|
7386
|
+
const rich = chartTextBody(cChild(tx, "rich"));
|
|
7387
|
+
if (rich) text.rich = rich;
|
|
7388
|
+
if (cChild(tx, "strRef")) {
|
|
7389
|
+
const reference = parseDataSource(tx);
|
|
7390
|
+
if (reference) text.reference = reference;
|
|
7391
|
+
}
|
|
7392
|
+
const value = allowValue ? cChild(tx, "v")?.textContent : void 0;
|
|
7393
|
+
if (value !== void 0 && value !== null) text.value = value;
|
|
7394
|
+
const cached2 = chartCacheValues(text.reference?.cache)[0];
|
|
7395
|
+
const flat = text.value ?? (rich ? rich.text : cached2 === void 0 ? void 0 : String(cached2));
|
|
7396
|
+
if (flat !== void 0) text.text = flat;
|
|
7397
|
+
reportUnmodelled(context, tx, new Set(allowValue ? ["strRef", "v"] : ["rich", "strRef"]));
|
|
7398
|
+
return text;
|
|
7399
|
+
}
|
|
7400
|
+
var TITLE = /* @__PURE__ */ new Set(["tx", "layout", "overlay", "spPr", "txPr", "extLst"]);
|
|
7401
|
+
function parseTitle(context, element) {
|
|
7402
|
+
const tx = parseChartText(context, cChild(element, "tx"), false);
|
|
7403
|
+
reportUnmodelled(context, element, TITLE);
|
|
7404
|
+
return assignDefined(
|
|
7405
|
+
{},
|
|
7406
|
+
{
|
|
7407
|
+
tx,
|
|
7408
|
+
text: tx?.text,
|
|
7409
|
+
overlay: cBool(context, element, "overlay"),
|
|
7410
|
+
layout: manualLayout(element),
|
|
7411
|
+
spPr: shapeProperties(element),
|
|
7412
|
+
txPr: textProperties(element),
|
|
7413
|
+
extLst: extensionList(element)
|
|
7414
|
+
}
|
|
7415
|
+
);
|
|
7416
|
+
}
|
|
7417
|
+
var LABEL_OPTIONS = [
|
|
7418
|
+
"delete",
|
|
7419
|
+
"showLegendKey",
|
|
7420
|
+
"showVal",
|
|
7421
|
+
"showCatName",
|
|
7422
|
+
"showSerName",
|
|
7423
|
+
"showPercent",
|
|
7424
|
+
"showBubbleSize",
|
|
7425
|
+
"separator",
|
|
7426
|
+
"dLblPos",
|
|
7427
|
+
"numFmt",
|
|
7428
|
+
"spPr",
|
|
7429
|
+
"txPr",
|
|
7430
|
+
"extLst"
|
|
7431
|
+
];
|
|
7432
|
+
function labelOptions(context, element) {
|
|
7433
|
+
const flag2 = (local) => cBool(context, element, local);
|
|
7434
|
+
return assignDefined(
|
|
7435
|
+
{},
|
|
7436
|
+
{
|
|
7437
|
+
deleted: flag2("delete"),
|
|
7438
|
+
showLegendKey: flag2("showLegendKey"),
|
|
7439
|
+
showValue: flag2("showVal"),
|
|
7440
|
+
showCategoryName: flag2("showCatName"),
|
|
7441
|
+
showSeriesName: flag2("showSerName"),
|
|
7442
|
+
showPercent: flag2("showPercent"),
|
|
7443
|
+
showBubbleSize: flag2("showBubbleSize"),
|
|
7444
|
+
separator: cChild(element, "separator")?.textContent ?? void 0,
|
|
7445
|
+
position: cVal(element, "dLblPos"),
|
|
7446
|
+
numberFormat: numberFormat(element),
|
|
7447
|
+
spPr: shapeProperties(element),
|
|
7448
|
+
txPr: textProperties(element),
|
|
7449
|
+
extLst: extensionList(element)
|
|
7450
|
+
}
|
|
7451
|
+
);
|
|
7452
|
+
}
|
|
7453
|
+
var LABEL = /* @__PURE__ */ new Set([...LABEL_OPTIONS, "idx", "layout", "tx"]);
|
|
7454
|
+
var LABELS = /* @__PURE__ */ new Set([...LABEL_OPTIONS, "dLbl", "showLeaderLines", "leaderLines"]);
|
|
7455
|
+
function parseDataLabels(context, element) {
|
|
7456
|
+
if (!element) return void 0;
|
|
7457
|
+
const labels = children(element, "dLbl", NS.c).map((node) => {
|
|
7458
|
+
reportUnmodelled(context, node, LABEL);
|
|
7459
|
+
return assignDefined(labelOptions(context, node), {
|
|
7460
|
+
index: cNumber(context, node, "idx"),
|
|
7461
|
+
tx: parseChartText(context, cChild(node, "tx"), false),
|
|
7462
|
+
layout: manualLayout(node)
|
|
7463
|
+
});
|
|
7464
|
+
});
|
|
7465
|
+
reportUnmodelled(context, element, LABELS);
|
|
7466
|
+
return assignDefined(
|
|
7467
|
+
{ ...labelOptions(context, element), labels },
|
|
7468
|
+
{
|
|
7469
|
+
showLeaderLines: cBool(context, element, "showLeaderLines"),
|
|
7470
|
+
leaderLines: chartLines(element, "leaderLines")
|
|
7471
|
+
}
|
|
7472
|
+
);
|
|
7473
|
+
}
|
|
7474
|
+
|
|
7475
|
+
// chart/parse-chrome.ts
|
|
7476
|
+
var SURFACE = /* @__PURE__ */ new Set(["thickness", "spPr", "pictureOptions", "extLst"]);
|
|
7477
|
+
function parseSurface(context, element) {
|
|
7478
|
+
if (!element) return void 0;
|
|
7479
|
+
reportUnmodelled(context, element, SURFACE);
|
|
7480
|
+
const pictureOptions = cChild(element, "pictureOptions");
|
|
7481
|
+
return assignDefined(
|
|
7482
|
+
{},
|
|
7483
|
+
{
|
|
7484
|
+
thickness: cNumber(context, element, "thickness"),
|
|
7485
|
+
spPr: shapeProperties(element),
|
|
7486
|
+
pictureOptionsXml: pictureOptions ? buildXml(pictureOptions) : void 0,
|
|
7487
|
+
extLst: extensionList(element)
|
|
7488
|
+
}
|
|
7489
|
+
);
|
|
7490
|
+
}
|
|
7491
|
+
var DATA_TABLE = /* @__PURE__ */ new Set([
|
|
7492
|
+
"showHorzBorder",
|
|
7493
|
+
"showVertBorder",
|
|
7494
|
+
"showOutline",
|
|
7495
|
+
"showKeys",
|
|
7496
|
+
"spPr",
|
|
7497
|
+
"txPr",
|
|
7498
|
+
"extLst"
|
|
7499
|
+
]);
|
|
7500
|
+
function parseDataTable(context, element) {
|
|
7501
|
+
if (!element) return void 0;
|
|
7502
|
+
reportUnmodelled(context, element, DATA_TABLE);
|
|
7503
|
+
return assignDefined(
|
|
7504
|
+
{},
|
|
7505
|
+
{
|
|
7506
|
+
showHorizontalBorder: cBool(context, element, "showHorzBorder"),
|
|
7507
|
+
showVerticalBorder: cBool(context, element, "showVertBorder"),
|
|
7508
|
+
showOutline: cBool(context, element, "showOutline"),
|
|
7509
|
+
showKeys: cBool(context, element, "showKeys"),
|
|
7510
|
+
spPr: shapeProperties(element),
|
|
7511
|
+
txPr: textProperties(element),
|
|
7512
|
+
extLst: extensionList(element)
|
|
7513
|
+
}
|
|
7514
|
+
);
|
|
7515
|
+
}
|
|
7516
|
+
var DISPLAY_UNITS = /* @__PURE__ */ new Set(["custUnit", "builtInUnit", "dispUnitsLbl", "extLst"]);
|
|
7517
|
+
var DISPLAY_UNITS_LABEL = /* @__PURE__ */ new Set(["layout", "tx", "spPr", "txPr"]);
|
|
7518
|
+
function parseDisplayUnits(context, element) {
|
|
7519
|
+
if (!element) return void 0;
|
|
7520
|
+
reportUnmodelled(context, element, DISPLAY_UNITS);
|
|
7521
|
+
const labelElement = cChild(element, "dispUnitsLbl");
|
|
7522
|
+
let label;
|
|
7523
|
+
if (labelElement) {
|
|
7524
|
+
reportUnmodelled(context, labelElement, DISPLAY_UNITS_LABEL);
|
|
7525
|
+
label = assignDefined(
|
|
7526
|
+
{},
|
|
7527
|
+
{
|
|
7528
|
+
layout: manualLayout(labelElement),
|
|
7529
|
+
tx: parseChartText(context, cChild(labelElement, "tx"), false),
|
|
7530
|
+
spPr: shapeProperties(labelElement),
|
|
7531
|
+
txPr: textProperties(labelElement)
|
|
7532
|
+
}
|
|
7533
|
+
);
|
|
7534
|
+
}
|
|
7535
|
+
return assignDefined(
|
|
7536
|
+
{},
|
|
7537
|
+
{
|
|
7538
|
+
builtInUnit: cVal(element, "builtInUnit"),
|
|
7539
|
+
customUnit: cNumber(context, element, "custUnit"),
|
|
7540
|
+
label,
|
|
7541
|
+
extLst: extensionList(element)
|
|
7542
|
+
}
|
|
7543
|
+
);
|
|
7544
|
+
}
|
|
7545
|
+
|
|
7546
|
+
// chart/parse-series.ts
|
|
7547
|
+
var MARKER = /* @__PURE__ */ new Set(["symbol", "size", "spPr", "extLst"]);
|
|
7548
|
+
function parseMarker(context, element) {
|
|
7549
|
+
if (!element) return void 0;
|
|
7550
|
+
reportUnmodelled(context, element, MARKER);
|
|
7551
|
+
return assignDefined(
|
|
7552
|
+
{},
|
|
7553
|
+
{
|
|
7554
|
+
symbol: cVal(element, "symbol"),
|
|
7555
|
+
size: cNumber(context, element, "size"),
|
|
7556
|
+
spPr: shapeProperties(element),
|
|
7557
|
+
extLst: extensionList(element)
|
|
7558
|
+
}
|
|
7559
|
+
);
|
|
7560
|
+
}
|
|
7561
|
+
var POINT = /* @__PURE__ */ new Set([
|
|
7562
|
+
"idx",
|
|
7563
|
+
"invertIfNegative",
|
|
7564
|
+
"marker",
|
|
7565
|
+
"bubble3D",
|
|
7566
|
+
"explosion",
|
|
7567
|
+
"spPr",
|
|
7568
|
+
"extLst"
|
|
7569
|
+
]);
|
|
7570
|
+
function parseDataPoint(context, element) {
|
|
7571
|
+
reportUnmodelled(context, element, POINT);
|
|
7572
|
+
const index = cNumber(context, element, "idx");
|
|
7573
|
+
return assignDefined(
|
|
7574
|
+
{},
|
|
7575
|
+
{
|
|
7576
|
+
index: index !== void 0 && Number.isInteger(index) && index >= 0 ? index : void 0,
|
|
7577
|
+
invertIfNegative: cBool(context, element, "invertIfNegative"),
|
|
7578
|
+
bubble3D: cBool(context, element, "bubble3D"),
|
|
7579
|
+
explosion: cNumber(context, element, "explosion"),
|
|
7580
|
+
marker: parseMarker(context, cChild(element, "marker")),
|
|
7581
|
+
spPr: shapeProperties(element),
|
|
7582
|
+
extLst: extensionList(element)
|
|
7583
|
+
}
|
|
7584
|
+
);
|
|
7585
|
+
}
|
|
7586
|
+
var SERIES = /* @__PURE__ */ new Set([
|
|
7587
|
+
"idx",
|
|
7588
|
+
"order",
|
|
7589
|
+
"tx",
|
|
7590
|
+
"spPr",
|
|
7591
|
+
"invertIfNegative",
|
|
7592
|
+
"dPt",
|
|
7593
|
+
"dLbls",
|
|
7594
|
+
"cat",
|
|
7595
|
+
"val",
|
|
7596
|
+
"xVal",
|
|
7597
|
+
"yVal",
|
|
7598
|
+
"smooth",
|
|
7599
|
+
"marker",
|
|
7600
|
+
"explosion",
|
|
7601
|
+
"bubbleSize",
|
|
7602
|
+
"bubble3D",
|
|
7603
|
+
"shape",
|
|
7604
|
+
"extLst"
|
|
7605
|
+
]);
|
|
7606
|
+
function parseSeries(context, element) {
|
|
7607
|
+
reportUnmodelled(context, element, SERIES);
|
|
7608
|
+
return assignDefined(
|
|
7609
|
+
{ dataPoints: children(element, "dPt", NS.c).map((point) => parseDataPoint(context, point)) },
|
|
7610
|
+
{
|
|
7611
|
+
index: cNumber(context, element, "idx"),
|
|
7612
|
+
order: cNumber(context, element, "order"),
|
|
7613
|
+
tx: parseChartText(context, cChild(element, "tx"), true),
|
|
7614
|
+
spPr: shapeProperties(element),
|
|
7615
|
+
marker: parseMarker(context, cChild(element, "marker")),
|
|
7616
|
+
dataLabels: parseDataLabels(context, cChild(element, "dLbls")),
|
|
7617
|
+
categories: parseDataSource(cChild(element, "cat")),
|
|
7618
|
+
values: parseDataSource(cChild(element, "val")),
|
|
7619
|
+
xValues: parseDataSource(cChild(element, "xVal")),
|
|
7620
|
+
yValues: parseDataSource(cChild(element, "yVal")),
|
|
7621
|
+
bubbleSizes: parseDataSource(cChild(element, "bubbleSize")),
|
|
7622
|
+
smooth: cBool(context, element, "smooth"),
|
|
7623
|
+
invertIfNegative: cBool(context, element, "invertIfNegative"),
|
|
7624
|
+
explosion: cNumber(context, element, "explosion"),
|
|
7625
|
+
bubble3D: cBool(context, element, "bubble3D"),
|
|
7626
|
+
shape: cVal(element, "shape"),
|
|
7627
|
+
extLst: extensionList(element)
|
|
7628
|
+
}
|
|
7629
|
+
);
|
|
7630
|
+
}
|
|
7631
|
+
|
|
7632
|
+
// chart/parse-plot.ts
|
|
7633
|
+
var CHART_GROUP_ELEMENTS = {
|
|
7634
|
+
barChart: { kind: "bar", is3D: false },
|
|
7635
|
+
bar3DChart: { kind: "bar", is3D: true },
|
|
7636
|
+
lineChart: { kind: "line", is3D: false },
|
|
7637
|
+
line3DChart: { kind: "line", is3D: true },
|
|
7638
|
+
areaChart: { kind: "area", is3D: false },
|
|
7639
|
+
area3DChart: { kind: "area", is3D: true },
|
|
7640
|
+
pieChart: { kind: "pie", is3D: false },
|
|
7641
|
+
pie3DChart: { kind: "pie", is3D: true },
|
|
7642
|
+
ofPieChart: { kind: "ofPie", is3D: false },
|
|
7643
|
+
doughnutChart: { kind: "doughnut", is3D: false },
|
|
7644
|
+
scatterChart: { kind: "scatter", is3D: false },
|
|
7645
|
+
radarChart: { kind: "radar", is3D: false },
|
|
7646
|
+
bubbleChart: { kind: "bubble", is3D: false },
|
|
7647
|
+
stockChart: { kind: "stock", is3D: false },
|
|
7648
|
+
surfaceChart: { kind: "surface", is3D: false },
|
|
7649
|
+
surface3DChart: { kind: "surface", is3D: true }
|
|
7650
|
+
};
|
|
7651
|
+
var AXIS_ELEMENTS = {
|
|
7652
|
+
catAx: "cat",
|
|
7653
|
+
valAx: "val",
|
|
7654
|
+
dateAx: "date",
|
|
7655
|
+
serAx: "ser"
|
|
7656
|
+
};
|
|
7657
|
+
var GROUP = /* @__PURE__ */ new Set([
|
|
7658
|
+
"ser",
|
|
7659
|
+
"axId",
|
|
7660
|
+
"varyColors",
|
|
7661
|
+
"dLbls",
|
|
7662
|
+
"barDir",
|
|
7663
|
+
"grouping",
|
|
7664
|
+
"gapWidth",
|
|
7665
|
+
"overlap",
|
|
7666
|
+
"gapDepth",
|
|
7667
|
+
"shape",
|
|
7668
|
+
"marker",
|
|
7669
|
+
"smooth",
|
|
7670
|
+
"dropLines",
|
|
7671
|
+
"hiLowLines",
|
|
7672
|
+
"upDownBars",
|
|
7673
|
+
"serLines",
|
|
7674
|
+
"firstSliceAng",
|
|
7675
|
+
"holeSize",
|
|
7676
|
+
"ofPieType",
|
|
7677
|
+
"scatterStyle",
|
|
7678
|
+
"radarStyle",
|
|
7679
|
+
"bubble3D",
|
|
7680
|
+
"bubbleScale",
|
|
7681
|
+
"showNegBubbles",
|
|
7682
|
+
"sizeRepresents",
|
|
7683
|
+
"wireframe",
|
|
7684
|
+
"extLst"
|
|
7685
|
+
]);
|
|
7686
|
+
function parseGroup(context, element) {
|
|
7687
|
+
const { kind, is3D } = CHART_GROUP_ELEMENTS[element.localName] ?? { kind: "bar", is3D: false };
|
|
7688
|
+
reportUnmodelled(context, element, GROUP);
|
|
7689
|
+
const number = (local) => cNumber(context, element, local);
|
|
7690
|
+
const flag2 = (local) => cBool(context, element, local);
|
|
7691
|
+
const barDir = cVal(element, "barDir");
|
|
7692
|
+
const present = (local) => cChild(element, local) ? true : void 0;
|
|
7693
|
+
const linesShape = (local) => chartLines(element, local)?.spPr;
|
|
7694
|
+
const bars = cChild(element, "upDownBars");
|
|
7695
|
+
return assignDefined(
|
|
7696
|
+
{
|
|
7697
|
+
kind,
|
|
7698
|
+
element: element.localName,
|
|
7699
|
+
is3D,
|
|
7700
|
+
series: children(element, "ser", NS.c).map((ser) => parseSeries(context, ser)),
|
|
7701
|
+
axisIds: children(element, "axId", NS.c).flatMap((axis) => {
|
|
7702
|
+
const raw = attribute(axis, "val")?.trim();
|
|
7703
|
+
const id = raw ? Number(raw) : Number.NaN;
|
|
7704
|
+
return Number.isFinite(id) ? [id] : [];
|
|
7705
|
+
})
|
|
7706
|
+
},
|
|
7707
|
+
{
|
|
7708
|
+
varyColors: flag2("varyColors"),
|
|
7709
|
+
dataLabels: parseDataLabels(context, cChild(element, "dLbls")),
|
|
7710
|
+
barDirection: barDir === "bar" || barDir === "col" ? barDir : void 0,
|
|
7711
|
+
grouping: cVal(element, "grouping"),
|
|
7712
|
+
gapWidth: number("gapWidth"),
|
|
7713
|
+
overlap: number("overlap"),
|
|
7714
|
+
gapDepth: number("gapDepth"),
|
|
7715
|
+
shape: cVal(element, "shape"),
|
|
7716
|
+
marker: flag2("marker"),
|
|
7717
|
+
smooth: flag2("smooth"),
|
|
7718
|
+
dropLines: present("dropLines"),
|
|
7719
|
+
hiLowLines: present("hiLowLines"),
|
|
7720
|
+
upDownBars: present("upDownBars"),
|
|
7721
|
+
seriesLines: present("serLines"),
|
|
7722
|
+
dropLinesSpPr: linesShape("dropLines"),
|
|
7723
|
+
hiLowLinesSpPr: linesShape("hiLowLines"),
|
|
7724
|
+
seriesLinesSpPr: linesShape("serLines"),
|
|
7725
|
+
upDownBarsGapWidth: cNumber(context, bars, "gapWidth"),
|
|
7726
|
+
upBars: chartLines(bars, "upBars"),
|
|
7727
|
+
downBars: chartLines(bars, "downBars"),
|
|
7728
|
+
firstSliceAngle: number("firstSliceAng"),
|
|
7729
|
+
holeSize: number("holeSize"),
|
|
7730
|
+
ofPieType: cVal(element, "ofPieType"),
|
|
7731
|
+
scatterStyle: cVal(element, "scatterStyle"),
|
|
7732
|
+
radarStyle: cVal(element, "radarStyle"),
|
|
7733
|
+
bubble3D: flag2("bubble3D"),
|
|
7734
|
+
bubbleScale: number("bubbleScale"),
|
|
7735
|
+
showNegativeBubbles: flag2("showNegBubbles"),
|
|
7736
|
+
sizeRepresents: cVal(element, "sizeRepresents"),
|
|
7737
|
+
wireframe: flag2("wireframe"),
|
|
7738
|
+
extLst: extensionList(element)
|
|
7739
|
+
}
|
|
7740
|
+
);
|
|
7741
|
+
}
|
|
7742
|
+
var SCALING = /* @__PURE__ */ new Set(["orientation", "logBase", "min", "max", "extLst"]);
|
|
7743
|
+
var AXIS = /* @__PURE__ */ new Set([
|
|
7744
|
+
"axId",
|
|
7745
|
+
"scaling",
|
|
7746
|
+
"delete",
|
|
7747
|
+
"axPos",
|
|
7748
|
+
"majorGridlines",
|
|
7749
|
+
"minorGridlines",
|
|
7750
|
+
"title",
|
|
7751
|
+
"numFmt",
|
|
7752
|
+
"majorTickMark",
|
|
7753
|
+
"minorTickMark",
|
|
7754
|
+
"tickLblPos",
|
|
7755
|
+
"spPr",
|
|
7756
|
+
"txPr",
|
|
7757
|
+
"crossAx",
|
|
7758
|
+
"crosses",
|
|
7759
|
+
"crossesAt",
|
|
7760
|
+
"crossBetween",
|
|
7761
|
+
"majorUnit",
|
|
7762
|
+
"minorUnit",
|
|
7763
|
+
"auto",
|
|
7764
|
+
"lblAlgn",
|
|
7765
|
+
"lblOffset",
|
|
7766
|
+
"tickLblSkip",
|
|
7767
|
+
"tickMarkSkip",
|
|
7768
|
+
"noMultiLvlLbl",
|
|
7769
|
+
"baseTimeUnit",
|
|
7770
|
+
"dispUnits",
|
|
7771
|
+
"extLst"
|
|
7772
|
+
]);
|
|
7773
|
+
function parseAxis(context, element, kind) {
|
|
7774
|
+
reportUnmodelled(context, element, AXIS);
|
|
7775
|
+
const number = (local) => cNumber(context, element, local);
|
|
7776
|
+
const scalingElement = cChild(element, "scaling");
|
|
7777
|
+
if (scalingElement) reportUnmodelled(context, scalingElement, SCALING);
|
|
7778
|
+
const scaling = assignDefined(
|
|
7779
|
+
{},
|
|
7780
|
+
{
|
|
7781
|
+
orientation: cVal(scalingElement, "orientation"),
|
|
7782
|
+
min: cNumber(context, scalingElement, "min"),
|
|
7783
|
+
max: cNumber(context, scalingElement, "max"),
|
|
7784
|
+
logBase: cNumber(context, scalingElement, "logBase")
|
|
7785
|
+
}
|
|
7786
|
+
);
|
|
7787
|
+
const title = cChild(element, "title");
|
|
7788
|
+
return assignDefined(
|
|
7789
|
+
{
|
|
7790
|
+
kind,
|
|
7791
|
+
scaling,
|
|
7792
|
+
majorGridlines: cChild(element, "majorGridlines") !== void 0,
|
|
7793
|
+
minorGridlines: cChild(element, "minorGridlines") !== void 0
|
|
7794
|
+
},
|
|
7795
|
+
{
|
|
7796
|
+
majorGridlinesSpPr: chartLines(element, "majorGridlines")?.spPr,
|
|
7797
|
+
minorGridlinesSpPr: chartLines(element, "minorGridlines")?.spPr,
|
|
7798
|
+
id: number("axId"),
|
|
7799
|
+
crossAxisId: number("crossAx"),
|
|
7800
|
+
position: cVal(element, "axPos"),
|
|
7801
|
+
deleted: cBool(context, element, "delete"),
|
|
7802
|
+
title: title ? parseTitle(context, title) : void 0,
|
|
7803
|
+
numberFormat: numberFormat(element),
|
|
7804
|
+
majorTickMark: cVal(element, "majorTickMark"),
|
|
7805
|
+
minorTickMark: cVal(element, "minorTickMark"),
|
|
7806
|
+
tickLabelPosition: cVal(element, "tickLblPos"),
|
|
7807
|
+
crosses: cVal(element, "crosses"),
|
|
7808
|
+
crossesAt: number("crossesAt"),
|
|
7809
|
+
crossBetween: cVal(element, "crossBetween"),
|
|
7810
|
+
majorUnit: number("majorUnit"),
|
|
7811
|
+
minorUnit: number("minorUnit"),
|
|
7812
|
+
auto: cBool(context, element, "auto"),
|
|
7813
|
+
labelAlign: cVal(element, "lblAlgn"),
|
|
7814
|
+
labelOffset: number("lblOffset"),
|
|
7815
|
+
tickLabelSkip: number("tickLblSkip"),
|
|
7816
|
+
tickMarkSkip: number("tickMarkSkip"),
|
|
7817
|
+
noMultiLevelLabels: cBool(context, element, "noMultiLvlLbl"),
|
|
7818
|
+
baseTimeUnit: cVal(element, "baseTimeUnit"),
|
|
7819
|
+
displayUnits: parseDisplayUnits(context, cChild(element, "dispUnits")),
|
|
7820
|
+
spPr: shapeProperties(element),
|
|
7821
|
+
txPr: textProperties(element),
|
|
7822
|
+
extLst: extensionList(element)
|
|
7823
|
+
}
|
|
7824
|
+
);
|
|
7825
|
+
}
|
|
7826
|
+
var PLOT_AREA = /* @__PURE__ */ new Set(["layout", "dTable", "spPr", "extLst"]);
|
|
7827
|
+
function parsePlotArea(context, element) {
|
|
7828
|
+
const plotArea = { groups: [], axes: [] };
|
|
7829
|
+
if (!element) {
|
|
7830
|
+
context.issues.push({
|
|
7831
|
+
code: "CHART_PLOT_AREA_MISSING",
|
|
7832
|
+
message: "The chart has no c:plotArea."
|
|
7833
|
+
});
|
|
7834
|
+
return plotArea;
|
|
7835
|
+
}
|
|
7836
|
+
const handled = new Set(PLOT_AREA);
|
|
7837
|
+
for (const child3 of elements(element)) {
|
|
7838
|
+
if (CHART_GROUP_ELEMENTS[child3.localName]) {
|
|
7839
|
+
plotArea.groups.push(parseGroup(context, child3));
|
|
7840
|
+
handled.add(child3.localName);
|
|
7841
|
+
}
|
|
7842
|
+
const axis = AXIS_ELEMENTS[child3.localName];
|
|
7843
|
+
if (axis) {
|
|
7844
|
+
plotArea.axes.push(parseAxis(context, child3, axis));
|
|
7845
|
+
handled.add(child3.localName);
|
|
7846
|
+
}
|
|
7847
|
+
}
|
|
7848
|
+
reportUnmodelled(context, element, handled);
|
|
7849
|
+
return assignDefined(plotArea, {
|
|
7850
|
+
layout: manualLayout(element),
|
|
7851
|
+
dataTable: parseDataTable(context, cChild(element, "dTable")),
|
|
7852
|
+
spPr: shapeProperties(element),
|
|
7853
|
+
extLst: extensionList(element)
|
|
7854
|
+
});
|
|
7855
|
+
}
|
|
7856
|
+
|
|
7857
|
+
// chart/parse-space.ts
|
|
7858
|
+
var LEGEND = /* @__PURE__ */ new Set(["legendPos", "legendEntry", "layout", "overlay", "spPr", "txPr", "extLst"]);
|
|
7859
|
+
function parseLegend(context, element) {
|
|
7860
|
+
reportUnmodelled(context, element, LEGEND);
|
|
7861
|
+
const entries = children(element, "legendEntry", NS.c).map(
|
|
7862
|
+
(entry2) => assignDefined(
|
|
7863
|
+
{},
|
|
7864
|
+
{
|
|
7865
|
+
index: cNumber(context, entry2, "idx"),
|
|
7866
|
+
deleted: cBool(context, entry2, "delete"),
|
|
7867
|
+
txPr: textProperties(entry2)
|
|
7868
|
+
}
|
|
7869
|
+
)
|
|
7870
|
+
);
|
|
7871
|
+
return assignDefined(
|
|
7872
|
+
{ entries },
|
|
7873
|
+
{
|
|
7874
|
+
position: cVal(element, "legendPos"),
|
|
7875
|
+
overlay: cBool(context, element, "overlay"),
|
|
7876
|
+
layout: manualLayout(element),
|
|
7877
|
+
spPr: shapeProperties(element),
|
|
7878
|
+
txPr: textProperties(element),
|
|
7879
|
+
extLst: extensionList(element)
|
|
7880
|
+
}
|
|
7881
|
+
);
|
|
7882
|
+
}
|
|
7883
|
+
var VIEW_3D = /* @__PURE__ */ new Set(["rotX", "rotY", "depthPercent", "hPercent", "rAngAx", "perspective"]);
|
|
7884
|
+
function parseView3D(context, element) {
|
|
7885
|
+
reportUnmodelled(context, element, VIEW_3D);
|
|
7886
|
+
return assignDefined(
|
|
7887
|
+
{},
|
|
7888
|
+
{
|
|
7889
|
+
rotX: cNumber(context, element, "rotX"),
|
|
7890
|
+
rotY: cNumber(context, element, "rotY"),
|
|
7891
|
+
depthPercent: cNumber(context, element, "depthPercent"),
|
|
7892
|
+
heightPercent: cNumber(context, element, "hPercent"),
|
|
7893
|
+
rightAngleAxes: cBool(context, element, "rAngAx"),
|
|
7894
|
+
perspective: cNumber(context, element, "perspective")
|
|
7895
|
+
}
|
|
7896
|
+
);
|
|
7897
|
+
}
|
|
7898
|
+
function chartStyle(context, space) {
|
|
7899
|
+
const direct = cNumber(context, space, "style");
|
|
7900
|
+
if (direct !== void 0) return direct;
|
|
7901
|
+
for (const alternate of children(space, "AlternateContent", NS.mc)) {
|
|
7902
|
+
const style = cNumber(context, first(alternate, "Fallback", NS.mc), "style");
|
|
7903
|
+
if (style !== void 0) return style;
|
|
7904
|
+
}
|
|
7905
|
+
return void 0;
|
|
7906
|
+
}
|
|
7907
|
+
function c14Style(space) {
|
|
7908
|
+
for (const alternate of children(space, "AlternateContent", NS.mc)) {
|
|
7909
|
+
const raw = attribute(first(first(alternate, "Choice", NS.mc), "style", NS.c14, false), "val");
|
|
7910
|
+
const value = raw?.trim() ? Number(raw) : Number.NaN;
|
|
7911
|
+
if (Number.isFinite(value)) return value;
|
|
7912
|
+
}
|
|
7913
|
+
return void 0;
|
|
7914
|
+
}
|
|
7915
|
+
function namespaceDeclarations(root) {
|
|
7916
|
+
const out = [];
|
|
7917
|
+
for (const item of Array.from(root.attributes)) {
|
|
7918
|
+
if (item.prefix !== "xmlns" || CHART_ROOT_BINDINGS.get(item.localName) === item.value) continue;
|
|
7919
|
+
out.push({ prefix: item.localName, uri: item.value });
|
|
7920
|
+
}
|
|
7921
|
+
return out.length ? out : void 0;
|
|
7922
|
+
}
|
|
7923
|
+
var CHART = /* @__PURE__ */ new Set([
|
|
7924
|
+
"title",
|
|
7925
|
+
"autoTitleDeleted",
|
|
7926
|
+
"view3D",
|
|
7927
|
+
"floor",
|
|
7928
|
+
"sideWall",
|
|
7929
|
+
"backWall",
|
|
7930
|
+
"plotArea",
|
|
7931
|
+
"legend",
|
|
7932
|
+
"plotVisOnly",
|
|
7933
|
+
"dispBlanksAs",
|
|
7934
|
+
"showDLblsOverMax",
|
|
7935
|
+
"extLst"
|
|
7936
|
+
]);
|
|
7937
|
+
var SPACE = /* @__PURE__ */ new Set([
|
|
7938
|
+
"date1904",
|
|
7939
|
+
"lang",
|
|
7940
|
+
"roundedCorners",
|
|
7941
|
+
"AlternateContent",
|
|
7942
|
+
"style",
|
|
7943
|
+
"chart",
|
|
7944
|
+
"spPr",
|
|
7945
|
+
"txPr",
|
|
7946
|
+
"externalData",
|
|
7947
|
+
"printSettings",
|
|
7948
|
+
"userShapes",
|
|
7949
|
+
"extLst"
|
|
7950
|
+
]);
|
|
7951
|
+
function parseChartSpace(source) {
|
|
7952
|
+
const context = { issues: [] };
|
|
7953
|
+
const root = typeof source === "string" ? parseXml(source, { label: "Chart part" }).documentElement : source;
|
|
7954
|
+
if (root.localName !== "chartSpace" || root.namespaceURI && root.namespaceURI !== NS.c) {
|
|
7955
|
+
context.issues.push({
|
|
7956
|
+
code: "CHART_ROOT_UNEXPECTED",
|
|
7957
|
+
message: `The part root is {${root.namespaceURI ?? ""}}${root.localName}, not c:chartSpace (chartex parts are not modelled).`
|
|
7958
|
+
});
|
|
7959
|
+
return { chartSpace: { plotArea: { groups: [], axes: [] } }, issues: context.issues };
|
|
7960
|
+
}
|
|
7961
|
+
reportUnmodelled(context, root, SPACE);
|
|
7962
|
+
const chart = cChild(root, "chart");
|
|
7963
|
+
if (!chart)
|
|
7964
|
+
context.issues.push({ code: "CHART_CHART_MISSING", message: "The part has no c:chart." });
|
|
7965
|
+
else reportUnmodelled(context, chart, CHART);
|
|
7966
|
+
const title = cChild(chart, "title");
|
|
7967
|
+
const legend = cChild(chart, "legend");
|
|
7968
|
+
const view3D = cChild(chart, "view3D");
|
|
7969
|
+
const printSettings = cChild(root, "printSettings");
|
|
7970
|
+
const chartSpace = assignDefined(
|
|
7971
|
+
{ plotArea: parsePlotArea(context, cChild(chart, "plotArea")) },
|
|
7972
|
+
{
|
|
7973
|
+
date1904: cBool(context, root, "date1904"),
|
|
7974
|
+
language: cVal(root, "lang"),
|
|
7975
|
+
roundedCorners: cBool(context, root, "roundedCorners"),
|
|
7976
|
+
style: chartStyle(context, root),
|
|
7977
|
+
c14Style: c14Style(root),
|
|
7978
|
+
title: title ? parseTitle(context, title) : void 0,
|
|
7979
|
+
autoTitleDeleted: cBool(context, chart, "autoTitleDeleted"),
|
|
7980
|
+
view3D: view3D ? parseView3D(context, view3D) : void 0,
|
|
7981
|
+
floor: parseSurface(context, cChild(chart, "floor")),
|
|
7982
|
+
sideWall: parseSurface(context, cChild(chart, "sideWall")),
|
|
7983
|
+
backWall: parseSurface(context, cChild(chart, "backWall")),
|
|
7984
|
+
legend: legend ? parseLegend(context, legend) : void 0,
|
|
7985
|
+
plotVisibleOnly: cBool(context, chart, "plotVisOnly"),
|
|
7986
|
+
displayBlanksAs: cVal(chart, "dispBlanksAs"),
|
|
7987
|
+
showDataLabelsOverMax: cBool(context, chart, "showDLblsOverMax"),
|
|
7988
|
+
spPr: shapeProperties(root),
|
|
7989
|
+
txPr: textProperties(root),
|
|
7990
|
+
externalDataRelId: relAttr(cChild(root, "externalData"), "id") || void 0,
|
|
7991
|
+
externalDataAutoUpdate: cBool(context, cChild(root, "externalData"), "autoUpdate"),
|
|
7992
|
+
printSettings: printSettings ? buildXml(printSettings) : void 0,
|
|
7993
|
+
userShapesRelId: relAttr(cChild(root, "userShapes"), "id") || void 0,
|
|
7994
|
+
chartExtLst: extensionList(chart),
|
|
7995
|
+
extLst: extensionList(root),
|
|
7996
|
+
namespaceDeclarations: namespaceDeclarations(root)
|
|
7997
|
+
}
|
|
7998
|
+
);
|
|
7999
|
+
return { chartSpace, issues: context.issues };
|
|
8000
|
+
}
|
|
8001
|
+
|
|
8002
|
+
// drawingml/theme.ts
|
|
8003
|
+
new Set(THEME_COLOR_SLOTS);
|
|
8004
|
+
function nonEmpty(value) {
|
|
8005
|
+
return value ? value : void 0;
|
|
8006
|
+
}
|
|
8007
|
+
function parseThemeColorScheme(scheme) {
|
|
8008
|
+
const result = { colors: {} };
|
|
8009
|
+
if (!scheme) return result;
|
|
8010
|
+
const name = nonEmpty(scheme.getAttribute("name"));
|
|
8011
|
+
if (name) result.name = name;
|
|
8012
|
+
for (const slot2 of THEME_COLOR_SLOTS) {
|
|
8013
|
+
const color = parseDrawingColorIn(first(scheme, slot2, NS.a));
|
|
8014
|
+
if (color) result.colors[slot2] = color;
|
|
8015
|
+
}
|
|
8016
|
+
return result;
|
|
8017
|
+
}
|
|
8018
|
+
function parseFontCollection(collection) {
|
|
8019
|
+
const result = { scripts: {} };
|
|
8020
|
+
if (!collection) return result;
|
|
8021
|
+
const typeface = (local) => nonEmpty(first(collection, local, NS.a)?.getAttribute("typeface"));
|
|
8022
|
+
const latin = typeface("latin");
|
|
8023
|
+
const eastAsia = typeface("ea");
|
|
8024
|
+
const complexScript = typeface("cs");
|
|
8025
|
+
if (latin) result.latin = latin;
|
|
8026
|
+
if (eastAsia) result.eastAsia = eastAsia;
|
|
8027
|
+
if (complexScript) result.complexScript = complexScript;
|
|
8028
|
+
for (const font of elements(collection)) {
|
|
8029
|
+
if (font.localName !== "font") continue;
|
|
8030
|
+
const script = nonEmpty(font.getAttribute("script"));
|
|
8031
|
+
const face = nonEmpty(font.getAttribute("typeface"));
|
|
8032
|
+
if (script && face && !Object.hasOwn(result.scripts, script)) result.scripts[script] = face;
|
|
8033
|
+
}
|
|
8034
|
+
return result;
|
|
8035
|
+
}
|
|
8036
|
+
function parseThemeFontScheme(scheme) {
|
|
8037
|
+
const result = {
|
|
8038
|
+
major: parseFontCollection(first(scheme, "majorFont", NS.a)),
|
|
8039
|
+
minor: parseFontCollection(first(scheme, "minorFont", NS.a))
|
|
8040
|
+
};
|
|
8041
|
+
const name = nonEmpty(scheme?.getAttribute("name"));
|
|
8042
|
+
if (name) result.name = name;
|
|
8043
|
+
return result;
|
|
8044
|
+
}
|
|
8045
|
+
function rootOf2(source) {
|
|
8046
|
+
return "documentElement" in source ? source.documentElement : source;
|
|
8047
|
+
}
|
|
8048
|
+
function parseTheme(source) {
|
|
8049
|
+
const root = rootOf2(source);
|
|
8050
|
+
const holder = first(root, "themeElements", NS.a) ?? root;
|
|
8051
|
+
const theme = {
|
|
8052
|
+
colorScheme: parseThemeColorScheme(first(holder, "clrScheme", NS.a)),
|
|
8053
|
+
fontScheme: parseThemeFontScheme(first(holder, "fontScheme", NS.a))
|
|
8054
|
+
};
|
|
8055
|
+
const name = nonEmpty(root.getAttribute("name"));
|
|
8056
|
+
if (name) theme.name = name;
|
|
8057
|
+
return theme;
|
|
8058
|
+
}
|
|
8059
|
+
|
|
8060
|
+
// drawingml/theme-color.ts
|
|
8061
|
+
function themeSlotHex(color) {
|
|
8062
|
+
if (!color) return void 0;
|
|
8063
|
+
const value = color.kind === "srgb" ? color.value : color.kind === "system" ? color.fallback : void 0;
|
|
8064
|
+
return value ? value.toUpperCase() : void 0;
|
|
8065
|
+
}
|
|
8066
|
+
|
|
8067
|
+
// docx/breaks.ts
|
|
8068
|
+
function isCachedPageBreak(element) {
|
|
8069
|
+
return named2(element, "lastRenderedPageBreak") && !element.childNodes.length && Array.from(element.attributes).every(
|
|
8070
|
+
(attribute2) => attribute2.namespaceURI === "http://www.w3.org/2000/xmlns/"
|
|
8071
|
+
);
|
|
8072
|
+
}
|
|
8073
|
+
function hasSpecialBreak(element) {
|
|
8074
|
+
for (const attribute2 of Array.from(element.attributes)) {
|
|
8075
|
+
if (attribute2.namespaceURI === "http://www.w3.org/2000/xmlns/") continue;
|
|
8076
|
+
if (attribute2.namespaceURI !== WORD_NS) return true;
|
|
8077
|
+
if (attribute2.localName === "type") {
|
|
8078
|
+
if (attribute2.value !== "textWrapping") return true;
|
|
8079
|
+
} else if (attribute2.localName === "clear") {
|
|
8080
|
+
if (attribute2.value !== "none") return true;
|
|
8081
|
+
} else return true;
|
|
8082
|
+
}
|
|
8083
|
+
return false;
|
|
8084
|
+
}
|
|
8085
|
+
function classifyBreak(element) {
|
|
8086
|
+
const type = getW(element, "type");
|
|
8087
|
+
return type === "page" || type === "column" ? type : "textWrapping";
|
|
8088
|
+
}
|
|
8089
|
+
function isModeledBreak(element) {
|
|
8090
|
+
const kind = classifyBreak(element);
|
|
8091
|
+
if (kind === "textWrapping") return false;
|
|
8092
|
+
for (const attribute2 of Array.from(element.attributes)) {
|
|
8093
|
+
if (attribute2.namespaceURI === "http://www.w3.org/2000/xmlns/") continue;
|
|
8094
|
+
if (attribute2.namespaceURI !== WORD_NS || attribute2.localName !== "type") return false;
|
|
8095
|
+
}
|
|
8096
|
+
return true;
|
|
8097
|
+
}
|
|
8098
|
+
|
|
8099
|
+
// docx/parse-warnings.ts
|
|
8100
|
+
function hasAny(document, names) {
|
|
8101
|
+
return names.some((name) => document.getElementsByTagNameNS(WORD_NS, name).length > 0);
|
|
8102
|
+
}
|
|
8103
|
+
function warningsFor(document) {
|
|
8104
|
+
const warnings = [];
|
|
8105
|
+
const features = [
|
|
8106
|
+
[["object"], "Embedded OLE objects (w:object) are preserved but rendered as a placeholder."],
|
|
8107
|
+
[["altChunk"], "Embedded alternate-format content is not represented in the document model."],
|
|
8108
|
+
[
|
|
8109
|
+
["fldSimple", "instrText", "fldChar"],
|
|
8110
|
+
"Fields show the result Word last saved while editing; Print Layout recalculates PAGE, NUMPAGES, SECTIONPAGES, DATE and TIME, and tables of contents update from the References tab."
|
|
8111
|
+
],
|
|
8112
|
+
[
|
|
8113
|
+
["moveFrom", "moveTo"],
|
|
8114
|
+
"Moved text is linked by its move name: accepting or rejecting either side resolves both. Moves are shown and saved with their range markers."
|
|
8115
|
+
],
|
|
8116
|
+
[
|
|
8117
|
+
["rPrChange"],
|
|
8118
|
+
"Formatting-change revisions retain their prior run-properties snapshots and support acceptance and rejection; recording new formatting changes and showing prior formatting in Original display are not supported yet."
|
|
8119
|
+
],
|
|
8120
|
+
[
|
|
8121
|
+
["pPrChange"],
|
|
8122
|
+
"Paragraph-formatting-change revisions retain their prior properties snapshots and support acceptance and rejection; recording new paragraph formatting changes and showing prior formatting in Original display are not supported yet."
|
|
8123
|
+
],
|
|
8124
|
+
[
|
|
8125
|
+
["tblPrChange", "trPrChange", "tcPrChange"],
|
|
8126
|
+
"Table-structure tracked changes are preserved in the source XML but are not represented in the document model."
|
|
8127
|
+
]
|
|
8128
|
+
];
|
|
8129
|
+
for (const [names, message] of features) if (hasAny(document, names)) warnings.push(message);
|
|
8130
|
+
if (Array.from(document.getElementsByTagNameNS(WORD_NS, "instrText")).some(
|
|
8131
|
+
(el3) => /HYPERLINK/i.test(textContent(el3))
|
|
8132
|
+
))
|
|
8133
|
+
warnings.push(
|
|
8134
|
+
"Complex HYPERLINK field codes (w:fldChar/w:instrText) are preserved but not parsed as links; their result text edits as plain text."
|
|
8135
|
+
);
|
|
8136
|
+
const specialBreak = Array.from(document.getElementsByTagNameNS(WORD_NS, "br")).some(
|
|
8137
|
+
(br) => hasSpecialBreak(br) && !isModeledBreak(br)
|
|
8138
|
+
) || Array.from(document.getElementsByTagNameNS(WORD_NS, "cr")).some(
|
|
8139
|
+
(cr) => cr.attributes.length > 0
|
|
8140
|
+
);
|
|
8141
|
+
if (specialBreak)
|
|
8142
|
+
warnings.push(
|
|
8143
|
+
"Some non-line breaks other than page and column breaks are not distinguished from line breaks in the document model; edits to paragraphs containing them are rejected to preserve the original XML."
|
|
8144
|
+
);
|
|
8145
|
+
return warnings;
|
|
8146
|
+
}
|
|
8147
|
+
function forEachParagraph2(blocks, visit) {
|
|
8148
|
+
for (const block of blocks) {
|
|
8149
|
+
if (block.type === "paragraph") visit(block);
|
|
8150
|
+
else for (const row of block.rows) for (const cell of row) cell.paragraphs.forEach(visit);
|
|
8151
|
+
}
|
|
8152
|
+
}
|
|
8153
|
+
function imageAndBookmarkWarnings(blocks) {
|
|
8154
|
+
const warnings = [];
|
|
8155
|
+
let hasPicture = false;
|
|
8156
|
+
let hasAnchored = false;
|
|
8157
|
+
const unsupportedKinds = /* @__PURE__ */ new Set();
|
|
8158
|
+
let hasBookmarks = false;
|
|
8159
|
+
forEachParagraph2(blocks, (paragraph) => {
|
|
8160
|
+
if (paragraph.bookmarks?.length) hasBookmarks = true;
|
|
8161
|
+
for (const run of paragraph.runs) {
|
|
8162
|
+
if (!run.image) continue;
|
|
8163
|
+
if (run.image.unsupported) {
|
|
8164
|
+
if (run.image.diagram?.rendering !== "cached-drawing")
|
|
8165
|
+
unsupportedKinds.add(run.image.unsupported);
|
|
8166
|
+
} else hasPicture = true;
|
|
8167
|
+
if (run.image.anchored) hasAnchored = true;
|
|
8168
|
+
}
|
|
8169
|
+
});
|
|
8170
|
+
if (hasPicture)
|
|
8171
|
+
warnings.push(
|
|
8172
|
+
"Inline pictures render from their original bytes and can be deleted or newly inserted; crop, artistic effects, and non-inline text wrapping are not reproduced."
|
|
8173
|
+
);
|
|
8174
|
+
if (hasAnchored)
|
|
8175
|
+
warnings.push(
|
|
8176
|
+
"Floating pictures follow their text wrapping approximately (floated left or right, or on their own line); exact positions, vertical offsets and in-front/behind layering are not reproduced."
|
|
8177
|
+
);
|
|
8178
|
+
if (unsupportedKinds.size)
|
|
8179
|
+
warnings.push(
|
|
8180
|
+
`${Array.from(unsupportedKinds).join(", ")} content is rendered as a labeled placeholder and is not editable.`
|
|
8181
|
+
);
|
|
8182
|
+
if (hasBookmarks)
|
|
8183
|
+
warnings.push(
|
|
8184
|
+
"Bookmark names are read-only; editing a paragraph that contains bookmarks preserves them but moves their start/end to the paragraph boundaries."
|
|
8185
|
+
);
|
|
8186
|
+
return warnings;
|
|
8187
|
+
}
|
|
8188
|
+
|
|
8189
|
+
// docx/chart.ts
|
|
8190
|
+
var CHART_GRAPHIC_URI = "http://schemas.openxmlformats.org/drawingml/2006/chart";
|
|
8191
|
+
var CHART_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart";
|
|
8192
|
+
var PACKAGE_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/package";
|
|
8193
|
+
var CHART_NOTICE = "The chart is drawn from the values cached in its part (bar, column, line, area, pie, doughnut, scatter and radar charts; other kinds show a labelled frame). It is not editable, and the chart part and its workbook are preserved unchanged on save.";
|
|
8194
|
+
function parseChartGraphic(graphicData, docPr, rels, isAnchor) {
|
|
8195
|
+
const element = Array.from(graphicData.childNodes).find(
|
|
8196
|
+
(node) => isElement(node) && node.localName === "chart"
|
|
8197
|
+
);
|
|
8198
|
+
const relId = getR(element, "id") || void 0;
|
|
8199
|
+
const issues = [];
|
|
8200
|
+
let partName;
|
|
8201
|
+
const rel = relId ? rels.get(relId) : void 0;
|
|
8202
|
+
if (!relId)
|
|
8203
|
+
issues.push({
|
|
8204
|
+
code: "CHART_RELATIONSHIP_MISSING",
|
|
8205
|
+
message: "The graphic has no c:chart/@r:id."
|
|
8206
|
+
});
|
|
8207
|
+
else if (!rel || rel.mode === "External")
|
|
8208
|
+
issues.push({
|
|
8209
|
+
code: "CHART_RELATIONSHIP_UNRESOLVED",
|
|
8210
|
+
message: `Chart relationship ${relId} does not point at a part in this package.`
|
|
8211
|
+
});
|
|
8212
|
+
else {
|
|
8213
|
+
if (rel.type !== CHART_RELATIONSHIP_TYPE)
|
|
8214
|
+
issues.push({
|
|
8215
|
+
code: "CHART_RELATIONSHIP_TYPE",
|
|
8216
|
+
message: `Chart relationship ${relId} has type ${rel.type}, expected ${CHART_RELATIONSHIP_TYPE}.`
|
|
8217
|
+
});
|
|
8218
|
+
partName = resolvePartPath("word/document.xml", rel.target);
|
|
8219
|
+
}
|
|
8220
|
+
const name = docPr?.getAttribute("name") || void 0;
|
|
8221
|
+
const id = docPr?.getAttribute("id") || void 0;
|
|
8222
|
+
return {
|
|
8223
|
+
placement: isAnchor ? "anchor" : "inline",
|
|
6961
8224
|
...name ? { name } : {},
|
|
6962
8225
|
...id ? { id } : {},
|
|
6963
|
-
|
|
6964
|
-
|
|
6965
|
-
|
|
6966
|
-
nodes: [],
|
|
6967
|
-
rendering: "placeholder",
|
|
6968
|
-
notice: diagramNotice("placeholder"),
|
|
8226
|
+
...relId ? { relId } : {},
|
|
8227
|
+
...partName ? { partName } : {},
|
|
8228
|
+
notice: CHART_NOTICE,
|
|
6969
8229
|
issues
|
|
6970
8230
|
};
|
|
6971
8231
|
}
|
|
6972
|
-
async function
|
|
6973
|
-
|
|
6974
|
-
const dataPart = diagram.parts.data?.partName;
|
|
6975
|
-
let declaredDrawing;
|
|
8232
|
+
async function resolveChartPart(chart, readText) {
|
|
8233
|
+
if (!chart.partName) return;
|
|
6976
8234
|
try {
|
|
6977
|
-
const
|
|
6978
|
-
|
|
6979
|
-
|
|
6980
|
-
|
|
6981
|
-
|
|
6982
|
-
|
|
6983
|
-
|
|
6984
|
-
const loaded = await loadDiagram(hostPart, diagram.relationshipIds, {
|
|
6985
|
-
hostRelationships: () => new Map(offered.map(([id, name]) => [id, `/${name}`])),
|
|
6986
|
-
resolvePath: resolvePartPath,
|
|
6987
|
-
readText,
|
|
6988
|
-
readRelationshipEntries: async (relsPart) => {
|
|
6989
|
-
const xml = await readText(relsPart);
|
|
6990
|
-
if (!xml) return void 0;
|
|
6991
|
-
try {
|
|
6992
|
-
return [...parseRelationships(xml).values()].map(({ id, type, target }) => ({
|
|
6993
|
-
id,
|
|
6994
|
-
type,
|
|
6995
|
-
target
|
|
6996
|
-
}));
|
|
6997
|
-
} catch {
|
|
6998
|
-
return void 0;
|
|
6999
|
-
}
|
|
8235
|
+
const xml = await readText(chart.partName);
|
|
8236
|
+
if (xml === void 0) {
|
|
8237
|
+
chart.issues.push({
|
|
8238
|
+
code: "CHART_PART_MISSING",
|
|
8239
|
+
message: `The chart part ${chart.partName} is not in the package.`
|
|
8240
|
+
});
|
|
8241
|
+
return;
|
|
7000
8242
|
}
|
|
7001
|
-
|
|
7002
|
-
|
|
7003
|
-
|
|
7004
|
-
|
|
7005
|
-
|
|
7006
|
-
|
|
7007
|
-
|
|
7008
|
-
|
|
7009
|
-
|
|
7010
|
-
|
|
7011
|
-
|
|
7012
|
-
|
|
7013
|
-
|
|
7014
|
-
|
|
7015
|
-
|
|
7016
|
-
|
|
7017
|
-
|
|
7018
|
-
|
|
7019
|
-
|
|
7020
|
-
|
|
7021
|
-
|
|
7022
|
-
|
|
7023
|
-
|
|
7024
|
-
|
|
7025
|
-
|
|
7026
|
-
|
|
7027
|
-
} else {
|
|
7028
|
-
delete diagram.drawing;
|
|
7029
|
-
diagram.rendering = "placeholder";
|
|
8243
|
+
const root = parseXml(xml, { label: "Chart part" }).documentElement;
|
|
8244
|
+
const { chartSpace, issues } = parseChartSpace(root);
|
|
8245
|
+
chart.chartSpace = chartSpace;
|
|
8246
|
+
chart.issues.push(...issues);
|
|
8247
|
+
const title = chartSpace.autoTitleDeleted ? void 0 : chartSpace.title?.text;
|
|
8248
|
+
if (title) chart.title = title;
|
|
8249
|
+
if (chartSpace.plotArea.groups.length) {
|
|
8250
|
+
const formatting = readChartFormatting(root);
|
|
8251
|
+
if (formatting) chart.formatting = formatting;
|
|
8252
|
+
}
|
|
8253
|
+
const rels = parseRelationships(await readText(relationshipsPartFor(chart.partName)));
|
|
8254
|
+
const dataRelId = chartSpace.externalDataRelId;
|
|
8255
|
+
const dataRel = dataRelId ? rels.get(dataRelId) : void 0;
|
|
8256
|
+
if (dataRel && dataRel.mode !== "External" && dataRel.type === PACKAGE_RELATIONSHIP_TYPE)
|
|
8257
|
+
chart.workbookPartName = resolvePartPath(chart.partName, dataRel.target);
|
|
8258
|
+
const colorsRel = [...rels.values()].find(
|
|
8259
|
+
(rel) => rel.mode !== "External" && rel.type.endsWith("/chartColorStyle")
|
|
8260
|
+
);
|
|
8261
|
+
const colorsXml = colorsRel && await readText(resolvePartPath(chart.partName, colorsRel.target));
|
|
8262
|
+
const palette = colorsXml ? chartColorStyleId(colorsXml) : void 0;
|
|
8263
|
+
if (palette !== void 0) chart.colorPalette = palette;
|
|
8264
|
+
} catch (error) {
|
|
8265
|
+
chart.issues.push({
|
|
8266
|
+
code: "CHART_PART_UNREADABLE",
|
|
8267
|
+
message: `The chart part ${chart.partName} could not be read: ${error instanceof Error ? error.message : String(error)}`
|
|
8268
|
+
});
|
|
7030
8269
|
}
|
|
7031
|
-
|
|
8270
|
+
}
|
|
8271
|
+
function chartsIn(blocks) {
|
|
8272
|
+
const charts = [];
|
|
8273
|
+
forEachParagraph2(blocks, (paragraph) => {
|
|
8274
|
+
for (const run of paragraph.runs) if (run.image?.chart) charts.push(run.image.chart);
|
|
8275
|
+
});
|
|
8276
|
+
return charts;
|
|
8277
|
+
}
|
|
8278
|
+
async function resolveDocumentCharts(blocks, readText) {
|
|
8279
|
+
for (const chart of chartsIn(blocks)) await resolveChartPart(chart, readText);
|
|
7032
8280
|
}
|
|
7033
8281
|
|
|
7034
8282
|
// docx/drawing.ts
|
|
@@ -7146,6 +8394,7 @@ function parseModernDrawing(node, context) {
|
|
|
7146
8394
|
...svg ? { svgPartName: svg.partName } : {}
|
|
7147
8395
|
};
|
|
7148
8396
|
const diagram = uri === DIAGRAM_GRAPHIC_URI && graphicData ? parseDiagramGraphic(graphicData, extent, docPr, context.rels, Boolean(anchored)) : void 0;
|
|
8397
|
+
const chart = uri === CHART_GRAPHIC_URI && graphicData ? parseChartGraphic(graphicData, docPr, context.rels, Boolean(anchored)) : void 0;
|
|
7149
8398
|
const textBox = uri.includes("wordprocessingShape") ? textBoxParagraphs(graphicData) : void 0;
|
|
7150
8399
|
return {
|
|
7151
8400
|
relId: relId ?? "",
|
|
@@ -7156,6 +8405,7 @@ function parseModernDrawing(node, context) {
|
|
|
7156
8405
|
...definedProps({ altText, title, anchored }),
|
|
7157
8406
|
unsupported: textBox ? "Text box" : unsupportedKindLabel(uri),
|
|
7158
8407
|
...diagram ? { diagram } : {},
|
|
8408
|
+
...chart ? { chart } : {},
|
|
7159
8409
|
...diagram && placement ? { placement } : {},
|
|
7160
8410
|
...textBox ? { textBoxText: textBox } : {},
|
|
7161
8411
|
...textBox && isSimpleTextBox(graphicData, Boolean(anchored)) ? { textBoxEditable: true, textBoxBorder: textBoxHasBorder(graphicData) } : {}
|
|
@@ -7235,8 +8485,8 @@ function findDrawingChild(run) {
|
|
|
7235
8485
|
if (isElement(child3) && (named2(child3, "drawing") || named2(child3, "pict"))) return child3;
|
|
7236
8486
|
return void 0;
|
|
7237
8487
|
}
|
|
7238
|
-
function sameUnderlyingImage(
|
|
7239
|
-
return Boolean(
|
|
8488
|
+
function sameUnderlyingImage(a2, b) {
|
|
8489
|
+
return Boolean(a2.partName) && a2.relId === b.relId && a2.partName === b.partName;
|
|
7240
8490
|
}
|
|
7241
8491
|
function walk(root, visit) {
|
|
7242
8492
|
const stack = [root];
|
|
@@ -7446,17 +8696,17 @@ function setBooleanAttribute(doc, props, local, value) {
|
|
|
7446
8696
|
}
|
|
7447
8697
|
setAttribute6(element, "val", value ? "1" : "0");
|
|
7448
8698
|
}
|
|
7449
|
-
function setLanguageAttribute(doc, props,
|
|
8699
|
+
function setLanguageAttribute(doc, props, attribute2, value) {
|
|
7450
8700
|
let language = first2(props, "lang");
|
|
7451
8701
|
if (value === void 0 || value === "") {
|
|
7452
8702
|
if (!language) return;
|
|
7453
|
-
language.removeAttributeNS(WORD_NS,
|
|
8703
|
+
language.removeAttributeNS(WORD_NS, attribute2);
|
|
7454
8704
|
} else {
|
|
7455
8705
|
if (!language) {
|
|
7456
8706
|
language = makeW(doc, "lang");
|
|
7457
8707
|
props.appendChild(language);
|
|
7458
8708
|
}
|
|
7459
|
-
setAttribute6(language,
|
|
8709
|
+
setAttribute6(language, attribute2, value);
|
|
7460
8710
|
}
|
|
7461
8711
|
if (language && !language.attributes.length && !language.childNodes.length)
|
|
7462
8712
|
props.removeChild(language);
|
|
@@ -7556,8 +8806,8 @@ function setRunProperties(doc, runNode, run, base) {
|
|
|
7556
8806
|
};
|
|
7557
8807
|
for (const script of ["ascii", "hAnsi", "eastAsia", "cs"]) {
|
|
7558
8808
|
const role = run.fontTheme?.[script];
|
|
7559
|
-
const [
|
|
7560
|
-
if (role) setAttribute6(fonts,
|
|
8809
|
+
const [attribute2, suffix] = themeAttribute[script];
|
|
8810
|
+
if (role) setAttribute6(fonts, attribute2, `${role}${suffix}`);
|
|
7561
8811
|
}
|
|
7562
8812
|
props.appendChild(fonts);
|
|
7563
8813
|
}
|
|
@@ -7645,8 +8895,8 @@ function createRun(doc, run, base, old, allocator) {
|
|
|
7645
8895
|
}
|
|
7646
8896
|
|
|
7647
8897
|
// docx/inline-source.ts
|
|
7648
|
-
function samePictureSource(
|
|
7649
|
-
return !!
|
|
8898
|
+
function samePictureSource(a2, b) {
|
|
8899
|
+
return !!a2?.partName && a2.partName === b?.partName && a2.relId === b?.relId;
|
|
7650
8900
|
}
|
|
7651
8901
|
function inlineSourceLookup(runs, base) {
|
|
7652
8902
|
const usedPictures = /* @__PURE__ */ new Set();
|
|
@@ -7688,8 +8938,8 @@ function takeSimpleFieldCommentEdges(doc, runs, start, end, opens, closes) {
|
|
|
7688
8938
|
}
|
|
7689
8939
|
|
|
7690
8940
|
// docx/field-lock.ts
|
|
7691
|
-
function sameFieldFlags(
|
|
7692
|
-
return
|
|
8941
|
+
function sameFieldFlags(a2, b) {
|
|
8942
|
+
return a2?.locked === b?.locked && a2?.dirty === b?.dirty;
|
|
7693
8943
|
}
|
|
7694
8944
|
var MATH_NAMESPACES = /* @__PURE__ */ new Set([
|
|
7695
8945
|
"http://schemas.openxmlformats.org/officeDocument/2006/math",
|
|
@@ -7716,38 +8966,6 @@ function preserveEquation(run, base, old) {
|
|
|
7716
8966
|
return old.cloneNode(true);
|
|
7717
8967
|
}
|
|
7718
8968
|
|
|
7719
|
-
// docx/breaks.ts
|
|
7720
|
-
function isCachedPageBreak(element) {
|
|
7721
|
-
return named2(element, "lastRenderedPageBreak") && !element.childNodes.length && Array.from(element.attributes).every(
|
|
7722
|
-
(attribute) => attribute.namespaceURI === "http://www.w3.org/2000/xmlns/"
|
|
7723
|
-
);
|
|
7724
|
-
}
|
|
7725
|
-
function hasSpecialBreak(element) {
|
|
7726
|
-
for (const attribute of Array.from(element.attributes)) {
|
|
7727
|
-
if (attribute.namespaceURI === "http://www.w3.org/2000/xmlns/") continue;
|
|
7728
|
-
if (attribute.namespaceURI !== WORD_NS) return true;
|
|
7729
|
-
if (attribute.localName === "type") {
|
|
7730
|
-
if (attribute.value !== "textWrapping") return true;
|
|
7731
|
-
} else if (attribute.localName === "clear") {
|
|
7732
|
-
if (attribute.value !== "none") return true;
|
|
7733
|
-
} else return true;
|
|
7734
|
-
}
|
|
7735
|
-
return false;
|
|
7736
|
-
}
|
|
7737
|
-
function classifyBreak(element) {
|
|
7738
|
-
const type = getW(element, "type");
|
|
7739
|
-
return type === "page" || type === "column" ? type : "textWrapping";
|
|
7740
|
-
}
|
|
7741
|
-
function isModeledBreak(element) {
|
|
7742
|
-
const kind = classifyBreak(element);
|
|
7743
|
-
if (kind === "textWrapping") return false;
|
|
7744
|
-
for (const attribute of Array.from(element.attributes)) {
|
|
7745
|
-
if (attribute.namespaceURI === "http://www.w3.org/2000/xmlns/") continue;
|
|
7746
|
-
if (attribute.namespaceURI !== WORD_NS || attribute.localName !== "type") return false;
|
|
7747
|
-
}
|
|
7748
|
-
return true;
|
|
7749
|
-
}
|
|
7750
|
-
|
|
7751
8969
|
// docx/parse-revisions.ts
|
|
7752
8970
|
var REVISION_WRAPPERS = {
|
|
7753
8971
|
ins: "insert",
|
|
@@ -7769,7 +8987,7 @@ function trackMoveRange(item, moves) {
|
|
|
7769
8987
|
const open = moves[range.kind];
|
|
7770
8988
|
if (range.start) open.push({ name: getW(item, "name") ?? id, id });
|
|
7771
8989
|
else {
|
|
7772
|
-
const index = open.findIndex((
|
|
8990
|
+
const index = open.findIndex((entry2) => entry2.id === id);
|
|
7773
8991
|
if (index >= 0) open.splice(index, 1);
|
|
7774
8992
|
}
|
|
7775
8993
|
return true;
|
|
@@ -7942,10 +9160,10 @@ function replaceableInlineChildren(paragraph) {
|
|
|
7942
9160
|
(child3) => isElement(child3) && (isEquationElement(child3) || named2(child3, "r") || named2(child3, "hyperlink") || named2(child3, "fldSimple") || isRevisionWrapperElement(child3) || isCommentAnchorElement(child3))
|
|
7943
9161
|
);
|
|
7944
9162
|
}
|
|
7945
|
-
function sameLink(
|
|
7946
|
-
if (!
|
|
7947
|
-
if (!
|
|
7948
|
-
return
|
|
9163
|
+
function sameLink(a2, b) {
|
|
9164
|
+
if (!a2 && !b) return true;
|
|
9165
|
+
if (!a2 || !b) return false;
|
|
9166
|
+
return a2.href === b.href && a2.anchor === b.anchor && a2.tooltip === b.tooltip;
|
|
7949
9167
|
}
|
|
7950
9168
|
function setW6(element, local, value) {
|
|
7951
9169
|
element.setAttributeNS(WORD_NS, `w:${local}`, value);
|
|
@@ -8034,10 +9252,10 @@ function containerGroup(run) {
|
|
|
8034
9252
|
};
|
|
8035
9253
|
return void 0;
|
|
8036
9254
|
}
|
|
8037
|
-
function sameGroup(
|
|
8038
|
-
if (!
|
|
8039
|
-
if (
|
|
8040
|
-
return
|
|
9255
|
+
function sameGroup(a2, b) {
|
|
9256
|
+
if (!a2 || !b) return a2 === b;
|
|
9257
|
+
if (a2.kind === "link" && b.kind === "link") return sameLink(a2.link, b.link);
|
|
9258
|
+
return a2.kind === "simpleField" && b.kind === "simpleField" && a2.instr === b.instr && a2.instanceId === b.instanceId && sameFieldFlags(a2.fieldFlags, b.fieldFlags);
|
|
8041
9259
|
}
|
|
8042
9260
|
|
|
8043
9261
|
// docx/paragraph-styles.ts
|
|
@@ -8386,8 +9604,8 @@ var IMAGE_RELATIONSHIP_TYPE = RELATIONSHIP_TYPES.image;
|
|
|
8386
9604
|
function scanUsedRelationshipIds(doc) {
|
|
8387
9605
|
const used = /* @__PURE__ */ new Set();
|
|
8388
9606
|
const visit = (node) => {
|
|
8389
|
-
for (const
|
|
8390
|
-
if (
|
|
9607
|
+
for (const attribute2 of Array.from(node.attributes))
|
|
9608
|
+
if (attribute2.namespaceURI === REL_NS) used.add(attribute2.value);
|
|
8391
9609
|
for (const child3 of Array.from(node.childNodes)) if (isElement(child3)) visit(child3);
|
|
8392
9610
|
};
|
|
8393
9611
|
if (doc.documentElement) visit(doc.documentElement);
|
|
@@ -8625,9 +9843,9 @@ function isXsdDateTime(value) {
|
|
|
8625
9843
|
return !zone || Number(zone[1]) <= 14 && Number(zone[2]) <= 59;
|
|
8626
9844
|
}
|
|
8627
9845
|
var Checker = class _Checker {
|
|
8628
|
-
constructor(issues,
|
|
9846
|
+
constructor(issues, path2) {
|
|
8629
9847
|
this.issues = issues;
|
|
8630
|
-
this.path =
|
|
9848
|
+
this.path = path2;
|
|
8631
9849
|
}
|
|
8632
9850
|
issues;
|
|
8633
9851
|
path;
|
|
@@ -8673,78 +9891,78 @@ var Checker = class _Checker {
|
|
|
8673
9891
|
|
|
8674
9892
|
// docx/validate-paragraph.ts
|
|
8675
9893
|
var isFraction = (value) => typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= 1;
|
|
8676
|
-
function validateThemeReference(
|
|
9894
|
+
function validateThemeReference(c2, field, value) {
|
|
8677
9895
|
if (value === void 0) return;
|
|
8678
|
-
const at =
|
|
9896
|
+
const at = c2.at(`.${field}`);
|
|
8679
9897
|
at.theme("token", value.token);
|
|
8680
9898
|
at.check("tint", value.tint, isFraction, "must be a fraction between 0 and 1");
|
|
8681
9899
|
at.check("shade", value.shade, isFraction, "must be a fraction between 0 and 1");
|
|
8682
9900
|
}
|
|
8683
|
-
function validateRevision(
|
|
9901
|
+
function validateRevision(c2, field, revision) {
|
|
8684
9902
|
if (revision === void 0) return;
|
|
8685
|
-
|
|
9903
|
+
c2.at(`.${field}`).dateTime("date", revision.date);
|
|
8686
9904
|
}
|
|
8687
|
-
function validateFontSize(
|
|
8688
|
-
|
|
9905
|
+
function validateFontSize(c2, value) {
|
|
9906
|
+
c2.check(
|
|
8689
9907
|
"fontSize",
|
|
8690
9908
|
value,
|
|
8691
9909
|
(v) => typeof v === "number" && Number.isFinite(v) && Math.round(v * 2) >= 0,
|
|
8692
9910
|
"must be a finite, non-negative point size that converts to whole half-points (ST_HpsMeasure)"
|
|
8693
9911
|
);
|
|
8694
9912
|
}
|
|
8695
|
-
function validateRun(
|
|
8696
|
-
|
|
8697
|
-
validateFontSize(
|
|
8698
|
-
|
|
9913
|
+
function validateRun(c2, run) {
|
|
9914
|
+
c2.enum("ligatures", run.ligatures, isLigatures, "ST_Ligatures");
|
|
9915
|
+
validateFontSize(c2, run.fontSize);
|
|
9916
|
+
c2.check(
|
|
8699
9917
|
"textScalePercent",
|
|
8700
9918
|
run.textScalePercent,
|
|
8701
9919
|
(v) => Number.isSafeInteger(v) && v >= 0 && v <= 600,
|
|
8702
9920
|
"must be a whole percentage from 0 through 600 (ST_TextScale)"
|
|
8703
9921
|
);
|
|
8704
|
-
|
|
9922
|
+
c2.check(
|
|
8705
9923
|
"kerningHalfPoints",
|
|
8706
9924
|
run.kerningHalfPoints,
|
|
8707
9925
|
(v) => Number.isSafeInteger(v) && v >= 0,
|
|
8708
9926
|
"must be a nonnegative whole number of half-points (ST_HpsMeasure)"
|
|
8709
9927
|
);
|
|
8710
|
-
|
|
9928
|
+
c2.check(
|
|
8711
9929
|
"positionHalfPoints",
|
|
8712
9930
|
run.positionHalfPoints,
|
|
8713
9931
|
Number.isSafeInteger,
|
|
8714
9932
|
"must be a signed whole number of half-points (ST_SignedHpsMeasure)"
|
|
8715
9933
|
);
|
|
8716
|
-
|
|
8717
|
-
|
|
8718
|
-
|
|
8719
|
-
validateThemeReference(
|
|
8720
|
-
validateThemeReference(
|
|
8721
|
-
|
|
9934
|
+
c2.hex("color", run.color);
|
|
9935
|
+
c2.hex("shadingFill", run.shadingFill);
|
|
9936
|
+
c2.hex("underlineColor", run.underlineColor);
|
|
9937
|
+
validateThemeReference(c2, "colorTheme", run.colorTheme);
|
|
9938
|
+
validateThemeReference(c2, "shadingThemeFill", run.shadingThemeFill);
|
|
9939
|
+
c2.enum("underlineStyle", run.underlineStyle, isStUnderline, "ST_Underline");
|
|
8722
9940
|
if (run.highlight !== void 0 && !isStHighlightColor(run.highlight))
|
|
8723
|
-
|
|
9941
|
+
c2.fail(
|
|
8724
9942
|
"highlight",
|
|
8725
9943
|
run.highlight,
|
|
8726
9944
|
`Unsupported Word highlight token: ${String(run.highlight)}`
|
|
8727
9945
|
);
|
|
8728
|
-
|
|
8729
|
-
|
|
8730
|
-
|
|
9946
|
+
c2.enum("break", run.break, isStBrType, "ST_BrType");
|
|
9947
|
+
c2.enum("fieldChar", run.fieldChar, isStFldCharType, "ST_FldCharType");
|
|
9948
|
+
c2.check(
|
|
8731
9949
|
"characterSpacingTwips",
|
|
8732
9950
|
run.characterSpacingTwips,
|
|
8733
9951
|
(v) => typeof v === "number" && Number.isFinite(v),
|
|
8734
9952
|
"must be a finite number of twips (ST_SignedTwipsMeasure)"
|
|
8735
9953
|
);
|
|
8736
|
-
|
|
8737
|
-
|
|
8738
|
-
|
|
8739
|
-
|
|
9954
|
+
c2.language("language", run.language);
|
|
9955
|
+
c2.language("eastAsiaLanguage", run.eastAsiaLanguage);
|
|
9956
|
+
c2.language("bidiLanguage", run.bidiLanguage);
|
|
9957
|
+
c2.check(
|
|
8740
9958
|
"verticalAlign",
|
|
8741
9959
|
run.verticalAlign,
|
|
8742
9960
|
isStVerticalAlignRun,
|
|
8743
9961
|
'must be "baseline", "superscript" or "subscript"'
|
|
8744
9962
|
);
|
|
8745
|
-
validateRevision(
|
|
9963
|
+
validateRevision(c2, "revision", run.revision);
|
|
8746
9964
|
if (run.image) {
|
|
8747
|
-
const image =
|
|
9965
|
+
const image = c2.at(".image");
|
|
8748
9966
|
for (const key of ["widthPx", "heightPx"])
|
|
8749
9967
|
image.check(
|
|
8750
9968
|
key,
|
|
@@ -8754,14 +9972,14 @@ function validateRun(c, run) {
|
|
|
8754
9972
|
);
|
|
8755
9973
|
}
|
|
8756
9974
|
}
|
|
8757
|
-
function validateTabStop(
|
|
8758
|
-
|
|
8759
|
-
|
|
8760
|
-
|
|
9975
|
+
function validateTabStop(c2, stop) {
|
|
9976
|
+
c2.signed("posTwips", stop.posTwips, "CT_TabStop/@pos");
|
|
9977
|
+
c2.enum("align", stop.align, isStTabJc, "ST_TabJc");
|
|
9978
|
+
c2.enum("leader", stop.leader, isStTabTlc, "ST_TabTlc");
|
|
8761
9979
|
}
|
|
8762
|
-
function validateParagraph(
|
|
9980
|
+
function validateParagraph(c2, paragraph) {
|
|
8763
9981
|
if (paragraph.dropCap) {
|
|
8764
|
-
const at =
|
|
9982
|
+
const at = c2.at(".dropCap");
|
|
8765
9983
|
at.check(
|
|
8766
9984
|
"style",
|
|
8767
9985
|
paragraph.dropCap.style,
|
|
@@ -8781,14 +9999,14 @@ function validateParagraph(c, paragraph) {
|
|
|
8781
9999
|
"must be a nonnegative whole number of twips"
|
|
8782
10000
|
);
|
|
8783
10001
|
}
|
|
8784
|
-
|
|
10002
|
+
c2.check(
|
|
8785
10003
|
"align",
|
|
8786
10004
|
paragraph.align,
|
|
8787
10005
|
(v) => v === "left" || v === "center" || v === "right" || v === "justify",
|
|
8788
10006
|
'must be "left", "center", "right" or "justify"'
|
|
8789
10007
|
);
|
|
8790
|
-
|
|
8791
|
-
|
|
10008
|
+
c2.enum("justification", paragraph.justification, isStJc, "ST_Jc");
|
|
10009
|
+
c2.check(
|
|
8792
10010
|
"direction",
|
|
8793
10011
|
paragraph.direction,
|
|
8794
10012
|
(v) => v === "ltr" || v === "rtl",
|
|
@@ -8800,7 +10018,7 @@ function validateParagraph(c, paragraph) {
|
|
|
8800
10018
|
"firstLineTwips",
|
|
8801
10019
|
"hangingTwips"
|
|
8802
10020
|
])
|
|
8803
|
-
|
|
10021
|
+
c2.unsigned(key, paragraph[key], "ST_TwipsMeasure");
|
|
8804
10022
|
for (const key of [
|
|
8805
10023
|
"lineSpacingTwips",
|
|
8806
10024
|
"indentLeftTwips",
|
|
@@ -8808,87 +10026,87 @@ function validateParagraph(c, paragraph) {
|
|
|
8808
10026
|
"indentStartTwips",
|
|
8809
10027
|
"indentEndTwips"
|
|
8810
10028
|
])
|
|
8811
|
-
|
|
8812
|
-
|
|
10029
|
+
c2.signed(key, paragraph[key], "ST_SignedTwipsMeasure");
|
|
10030
|
+
c2.enum("lineSpacingRule", paragraph.lineSpacingRule, isStLineSpacingRule, "ST_LineSpacingRule");
|
|
8813
10031
|
if (paragraph.numbering) {
|
|
8814
|
-
const numbering =
|
|
10032
|
+
const numbering = c2.at(".numbering");
|
|
8815
10033
|
numbering.unsigned("numId", paragraph.numbering.numId, "ST_DecimalNumber");
|
|
8816
10034
|
numbering.unsigned("level", paragraph.numbering.level, "ST_DecimalNumber");
|
|
8817
10035
|
}
|
|
8818
|
-
paragraph.tabStops?.forEach((stop, index) => validateTabStop(
|
|
8819
|
-
validateRevision(
|
|
8820
|
-
paragraph.runs.forEach((run, index) => validateRun(
|
|
10036
|
+
paragraph.tabStops?.forEach((stop, index) => validateTabStop(c2.at(`.tabStops[${index}]`), stop));
|
|
10037
|
+
validateRevision(c2, "markRevision", paragraph.markRevision);
|
|
10038
|
+
paragraph.runs.forEach((run, index) => validateRun(c2.at(`.runs[${index}]`), run));
|
|
8821
10039
|
}
|
|
8822
10040
|
|
|
8823
10041
|
// docx/validate-structure.ts
|
|
8824
|
-
function validateBorderSide(
|
|
10042
|
+
function validateBorderSide(c2, side) {
|
|
8825
10043
|
if (!side) return;
|
|
8826
|
-
|
|
8827
|
-
|
|
8828
|
-
|
|
8829
|
-
|
|
8830
|
-
|
|
10044
|
+
c2.enum("style", side.style, isStBorder, "ST_Border");
|
|
10045
|
+
c2.unsigned("sizeEighthPoints", side.sizeEighthPoints, "ST_EighthPointMeasure");
|
|
10046
|
+
c2.unsigned("spacePoints", side.spacePoints, "ST_PointMeasure");
|
|
10047
|
+
c2.hex("color", side.color);
|
|
10048
|
+
c2.theme("themeColor", side.themeColor);
|
|
8831
10049
|
}
|
|
8832
|
-
function validateBorders(
|
|
10050
|
+
function validateBorders(c2, borders) {
|
|
8833
10051
|
if (!borders) return;
|
|
8834
10052
|
for (const side of ["top", "left", "bottom", "right", "insideH", "insideV"])
|
|
8835
|
-
validateBorderSide(
|
|
10053
|
+
validateBorderSide(c2.at(`.${side}`), borders[side]);
|
|
8836
10054
|
}
|
|
8837
|
-
function validateCell(
|
|
8838
|
-
|
|
10055
|
+
function validateCell(c2, cell) {
|
|
10056
|
+
c2.check(
|
|
8839
10057
|
"gridSpan",
|
|
8840
10058
|
cell.gridSpan,
|
|
8841
10059
|
(v) => typeof v === "number" && Number.isSafeInteger(v) && v >= 1,
|
|
8842
10060
|
"must be a positive integer (CT_DecimalNumber)"
|
|
8843
10061
|
);
|
|
8844
|
-
|
|
8845
|
-
|
|
8846
|
-
|
|
8847
|
-
|
|
8848
|
-
validateThemeReference(
|
|
8849
|
-
validateBorders(
|
|
10062
|
+
c2.enum("verticalMerge", cell.verticalMerge, isStMerge, "ST_Merge");
|
|
10063
|
+
c2.unsigned("widthTwips", cell.widthTwips, "ST_TwipsMeasure");
|
|
10064
|
+
c2.enum("verticalAlign", cell.verticalAlign, isStVerticalJc, "ST_VerticalJc");
|
|
10065
|
+
c2.hex("shadingFill", cell.shadingFill);
|
|
10066
|
+
validateThemeReference(c2, "shadingThemeFill", cell.shadingThemeFill);
|
|
10067
|
+
validateBorders(c2.at(".borders"), cell.borders);
|
|
8850
10068
|
if (cell.margins)
|
|
8851
10069
|
for (const side of ["top", "bottom", "left", "right"])
|
|
8852
|
-
|
|
10070
|
+
c2.at(".margins").signed(side, cell.margins[side], "ST_SignedTwipsMeasure");
|
|
8853
10071
|
}
|
|
8854
|
-
function validateTable(
|
|
8855
|
-
|
|
8856
|
-
|
|
8857
|
-
|
|
10072
|
+
function validateTable(c2, table) {
|
|
10073
|
+
c2.unsigned("widthTwips", table.widthTwips, "ST_TwipsMeasure");
|
|
10074
|
+
c2.signed("indentTwips", table.indentTwips, "ST_SignedTwipsMeasure");
|
|
10075
|
+
c2.check(
|
|
8858
10076
|
"alignment",
|
|
8859
10077
|
table.alignment,
|
|
8860
10078
|
(v) => v === "left" || v === "center" || v === "right",
|
|
8861
10079
|
'must be "left", "center" or "right"'
|
|
8862
10080
|
);
|
|
8863
|
-
|
|
10081
|
+
c2.enum("justification", table.justification, isStJcTable, "ST_JcTable");
|
|
8864
10082
|
table.grid?.forEach(
|
|
8865
|
-
(width, index) =>
|
|
10083
|
+
(width, index) => c2.at(`.grid[${index}]`).unsigned("width", width, "ST_TwipsMeasure")
|
|
8866
10084
|
);
|
|
8867
|
-
validateBorders(
|
|
10085
|
+
validateBorders(c2.at(".borders"), table.borders);
|
|
8868
10086
|
if (table.cellMargins)
|
|
8869
10087
|
for (const side of ["top", "bottom", "left", "right"])
|
|
8870
|
-
|
|
10088
|
+
c2.at(".cellMargins").signed(side, table.cellMargins[side], "ST_SignedTwipsMeasure");
|
|
8871
10089
|
table.rowProperties?.forEach((row, index) => {
|
|
8872
10090
|
if (row)
|
|
8873
|
-
|
|
10091
|
+
c2.at(`.rowProperties[${index}]`).unsigned("heightTwips", row.heightTwips, "ST_TwipsMeasure");
|
|
8874
10092
|
});
|
|
8875
10093
|
table.rows.forEach(
|
|
8876
|
-
(row, r) => row.forEach((cell, k) => validateCell(
|
|
10094
|
+
(row, r) => row.forEach((cell, k) => validateCell(c2.at(`.rows[${r}][${k}]`), cell))
|
|
8877
10095
|
);
|
|
8878
10096
|
}
|
|
8879
|
-
function validateSection(
|
|
8880
|
-
|
|
8881
|
-
|
|
8882
|
-
|
|
10097
|
+
function validateSection(c2, section) {
|
|
10098
|
+
c2.enum("type", section.type, isStSectionMark, "ST_SectionMark");
|
|
10099
|
+
c2.enum("orientation", section.orientation, isStPageOrientation, "ST_PageOrientation");
|
|
10100
|
+
c2.enum("verticalAlign", section.verticalAlign, isStVerticalJc, "ST_VerticalJc");
|
|
8883
10101
|
for (const key of ["pageWidthTwips", "pageHeightTwips"])
|
|
8884
|
-
|
|
10102
|
+
c2.check(
|
|
8885
10103
|
key,
|
|
8886
10104
|
section[key],
|
|
8887
10105
|
(v) => typeof v === "number" && Number.isSafeInteger(v) && v > 0,
|
|
8888
10106
|
"must be a positive integer number of twips (CT_PageSz)"
|
|
8889
10107
|
);
|
|
8890
10108
|
for (const key of ["marginTopTwips", "marginBottomTwips"])
|
|
8891
|
-
|
|
10109
|
+
c2.signed(key, section[key], "ST_SignedTwipsMeasure");
|
|
8892
10110
|
for (const key of [
|
|
8893
10111
|
"marginLeftTwips",
|
|
8894
10112
|
"marginRightTwips",
|
|
@@ -8896,8 +10114,8 @@ function validateSection(c, section) {
|
|
|
8896
10114
|
"footerDistanceTwips",
|
|
8897
10115
|
"gutterTwips"
|
|
8898
10116
|
])
|
|
8899
|
-
|
|
8900
|
-
const columns =
|
|
10117
|
+
c2.unsigned(key, section[key], "ST_TwipsMeasure");
|
|
10118
|
+
const columns = c2.at(".columns");
|
|
8901
10119
|
columns.check(
|
|
8902
10120
|
"count",
|
|
8903
10121
|
section.columns?.count,
|
|
@@ -8911,7 +10129,7 @@ function validateSection(c, section) {
|
|
|
8911
10129
|
at.unsigned("spacingTwips", column.spacingTwips, "ST_TwipsMeasure");
|
|
8912
10130
|
});
|
|
8913
10131
|
if (section.lineNumberSettings) {
|
|
8914
|
-
const line =
|
|
10132
|
+
const line = c2.at(".lineNumberSettings");
|
|
8915
10133
|
const settings = section.lineNumberSettings;
|
|
8916
10134
|
line.check(
|
|
8917
10135
|
"countBy",
|
|
@@ -8934,12 +10152,12 @@ function validateSection(c, section) {
|
|
|
8934
10152
|
line.unsigned("distanceTwips", settings.distanceTwips, "ST_TwipsMeasure");
|
|
8935
10153
|
}
|
|
8936
10154
|
if (section.pageNumbering) {
|
|
8937
|
-
const numbering =
|
|
10155
|
+
const numbering = c2.at(".pageNumbering");
|
|
8938
10156
|
numbering.enum("format", section.pageNumbering.format, isStNumberFormat, "ST_NumberFormat");
|
|
8939
10157
|
numbering.signed("start", section.pageNumbering.start, "ST_DecimalNumber");
|
|
8940
10158
|
}
|
|
8941
10159
|
}
|
|
8942
|
-
function validateNumberingCatalog(
|
|
10160
|
+
function validateNumberingCatalog(c2, catalog) {
|
|
8943
10161
|
const levelOf = (at, level) => {
|
|
8944
10162
|
at.enum("numFmt", level.numFmt, isStNumberFormat, "ST_NumberFormat");
|
|
8945
10163
|
at.signed("start", level.start, "ST_DecimalNumber");
|
|
@@ -8970,19 +10188,19 @@ function validateNumberingCatalog(c, catalog) {
|
|
|
8970
10188
|
};
|
|
8971
10189
|
for (const [id, abstract] of Object.entries(catalog.abstractNums))
|
|
8972
10190
|
for (const [key, level] of Object.entries(abstract.levels))
|
|
8973
|
-
levelOf(new Checker(
|
|
10191
|
+
levelOf(new Checker(c2.issues, `${c2.path}.abstractNums[${id}].levels[${key}]`), level);
|
|
8974
10192
|
for (const [id, num] of Object.entries(catalog.nums))
|
|
8975
10193
|
for (const [key, override] of Object.entries(num.levelOverrides ?? {})) {
|
|
8976
|
-
const at = new Checker(
|
|
10194
|
+
const at = new Checker(c2.issues, `${c2.path}.nums[${id}].levelOverrides[${key}]`);
|
|
8977
10195
|
at.signed("startOverride", override.startOverride, "ST_DecimalNumber");
|
|
8978
10196
|
if (override.lvl) levelOf(at.at(".lvl"), override.lvl);
|
|
8979
10197
|
}
|
|
8980
10198
|
}
|
|
8981
10199
|
|
|
8982
10200
|
// docx/validate-model.ts
|
|
8983
|
-
function validateBlocks(
|
|
10201
|
+
function validateBlocks(c2, blocks) {
|
|
8984
10202
|
blocks?.forEach((block, index) => {
|
|
8985
|
-
const at =
|
|
10203
|
+
const at = c2.at(`[${index}]`);
|
|
8986
10204
|
if (block.type === "paragraph") return validateParagraph(at, block);
|
|
8987
10205
|
validateTable(at, block);
|
|
8988
10206
|
block.rows.forEach(
|
|
@@ -8996,8 +10214,8 @@ function validateBlocks(c, blocks) {
|
|
|
8996
10214
|
}
|
|
8997
10215
|
function validateDocumentModel(model) {
|
|
8998
10216
|
const issues = [];
|
|
8999
|
-
const
|
|
9000
|
-
const page =
|
|
10217
|
+
const path2 = (suffix) => new Checker(issues, suffix);
|
|
10218
|
+
const page = path2("page");
|
|
9001
10219
|
for (const key of ["width", "height"])
|
|
9002
10220
|
page.check(
|
|
9003
10221
|
key,
|
|
@@ -9012,9 +10230,9 @@ function validateDocumentModel(model) {
|
|
|
9012
10230
|
(v) => typeof v === "number" && Number.isFinite(v) && (key === "marginTop" || key === "marginBottom" || v >= 0),
|
|
9013
10231
|
"must be a finite pixel size (converted to integer twips; left/right non-negative)"
|
|
9014
10232
|
);
|
|
9015
|
-
validateBlocks(
|
|
10233
|
+
validateBlocks(path2("blocks"), model.blocks);
|
|
9016
10234
|
model.sections?.forEach((section, index) => {
|
|
9017
|
-
const at =
|
|
10235
|
+
const at = path2(`sections[${index}]`);
|
|
9018
10236
|
validateSection(at, section);
|
|
9019
10237
|
for (const kind of ["headers", "footers"])
|
|
9020
10238
|
for (const [slot2, content] of Object.entries(section[kind] ?? {}))
|
|
@@ -9022,16 +10240,16 @@ function validateDocumentModel(model) {
|
|
|
9022
10240
|
});
|
|
9023
10241
|
for (const kind of ["footnotes", "endnotes"])
|
|
9024
10242
|
model[kind]?.forEach(
|
|
9025
|
-
(note, index) => validateBlocks(
|
|
10243
|
+
(note, index) => validateBlocks(path2(`${kind}[${index}].blocks`), note.blocks)
|
|
9026
10244
|
);
|
|
9027
10245
|
model.comments?.forEach(
|
|
9028
|
-
(comment, index) =>
|
|
10246
|
+
(comment, index) => path2(`comments[${index}]`).dateTime("date", comment.date)
|
|
9029
10247
|
);
|
|
9030
|
-
|
|
9031
|
-
|
|
9032
|
-
|
|
10248
|
+
path2("model").hex("pageColor", model.pageColor);
|
|
10249
|
+
path2("model").enum("footnoteNumFmt", model.footnoteNumFmt, isStNumberFormat, "ST_NumberFormat");
|
|
10250
|
+
path2("model").enum("endnoteNumFmt", model.endnoteNumFmt, isStNumberFormat, "ST_NumberFormat");
|
|
9033
10251
|
if (model.numberingCatalog)
|
|
9034
|
-
validateNumberingCatalog(
|
|
10252
|
+
validateNumberingCatalog(path2("numberingCatalog"), model.numberingCatalog);
|
|
9035
10253
|
return issues;
|
|
9036
10254
|
}
|
|
9037
10255
|
function assertValidDocumentModel(model) {
|
|
@@ -9147,12 +10365,12 @@ function parseNum(element) {
|
|
|
9147
10365
|
const levelOverrides = {};
|
|
9148
10366
|
for (const override of children2(element, "lvlOverride")) {
|
|
9149
10367
|
const level = integer2(getW(override, "ilvl"), 0);
|
|
9150
|
-
const
|
|
10368
|
+
const entry2 = {};
|
|
9151
10369
|
const startOverride = getW(first2(override, "startOverride"), "val");
|
|
9152
|
-
if (startOverride !== void 0)
|
|
10370
|
+
if (startOverride !== void 0) entry2.startOverride = integer2(startOverride, 1);
|
|
9153
10371
|
const lvl = first2(override, "lvl");
|
|
9154
|
-
if (lvl)
|
|
9155
|
-
if (Object.keys(
|
|
10372
|
+
if (lvl) entry2.lvl = parseNumberingLevel(lvl);
|
|
10373
|
+
if (Object.keys(entry2).length) levelOverrides[level] = entry2;
|
|
9156
10374
|
}
|
|
9157
10375
|
return {
|
|
9158
10376
|
id,
|
|
@@ -9358,7 +10576,7 @@ function buildAbstractNumElement(doc, def) {
|
|
|
9358
10576
|
const element = makeW(doc, "abstractNum");
|
|
9359
10577
|
setAttribute8(element, "abstractNumId", def.id);
|
|
9360
10578
|
element.appendChild(valueElement(doc, "multiLevelType", "hybridMultilevel"));
|
|
9361
|
-
for (const level of Object.values(def.levels).sort((
|
|
10579
|
+
for (const level of Object.values(def.levels).sort((a2, b) => a2.level - b.level))
|
|
9362
10580
|
element.appendChild(buildLevelElement(doc, level));
|
|
9363
10581
|
return element;
|
|
9364
10582
|
}
|
|
@@ -9477,13 +10695,13 @@ async function applyStyleNumbering(zip, model, base) {
|
|
|
9477
10695
|
// docx/part-relationships.ts
|
|
9478
10696
|
var CONTENT_TYPES_PART = "[Content_Types].xml";
|
|
9479
10697
|
var extensionOf = (partName) => partName.split(".").pop()?.toLowerCase() ?? "";
|
|
9480
|
-
function
|
|
10698
|
+
function relationshipsPartFor2(partName) {
|
|
9481
10699
|
const slash = partName.lastIndexOf("/");
|
|
9482
10700
|
return `${partName.slice(0, slash)}/_rels/${partName.slice(slash + 1)}.rels`;
|
|
9483
10701
|
}
|
|
9484
10702
|
async function allocatorForPart(zip, partName, doc, docPrIds) {
|
|
9485
10703
|
const declared = parseRelationships(
|
|
9486
|
-
await zip.file(
|
|
10704
|
+
await zip.file(relationshipsPartFor2(partName))?.async("string")
|
|
9487
10705
|
);
|
|
9488
10706
|
const allocator = new RelationshipAllocator(
|
|
9489
10707
|
[...scanUsedRelationshipIds(doc), ...declared.keys()],
|
|
@@ -9494,7 +10712,7 @@ async function allocatorForPart(zip, partName, doc, docPrIds) {
|
|
|
9494
10712
|
}
|
|
9495
10713
|
async function writeNewRelationships(zip, partName, created, pendingMedia) {
|
|
9496
10714
|
if (!created.length) return;
|
|
9497
|
-
const relsPath =
|
|
10715
|
+
const relsPath = relationshipsPartFor2(partName);
|
|
9498
10716
|
const relationships = parseRelationships(await zip.file(relsPath)?.async("string"));
|
|
9499
10717
|
let contentTypesXml = await zip.file(CONTENT_TYPES_PART)?.async("string");
|
|
9500
10718
|
for (const relationship of created) {
|
|
@@ -9578,8 +10796,8 @@ async function createHeaderFooterParts(zip, model, base, docPrIds) {
|
|
|
9578
10796
|
(_match, start, end) => `${start}${docPrIds.next()}${end}`
|
|
9579
10797
|
) : xml
|
|
9580
10798
|
);
|
|
9581
|
-
const rels = zip.file(
|
|
9582
|
-
if (rels) zip.file(
|
|
10799
|
+
const rels = zip.file(relationshipsPartFor2(content.sourcePartName));
|
|
10800
|
+
if (rels) zip.file(relationshipsPartFor2(partName), await rels.async("uint8array"));
|
|
9583
10801
|
}
|
|
9584
10802
|
await ensureContentTypeOverride(
|
|
9585
10803
|
zip,
|
|
@@ -10799,15 +12017,15 @@ function parseNotesPart(xml, kind, parseBlocks) {
|
|
|
10799
12017
|
}
|
|
10800
12018
|
|
|
10801
12019
|
// docx/document-parts.ts
|
|
10802
|
-
async function partContext(zip,
|
|
12020
|
+
async function partContext(zip, path2, base) {
|
|
10803
12021
|
if (!base) return void 0;
|
|
10804
|
-
const slash =
|
|
10805
|
-
const relsPath = `${
|
|
12022
|
+
const slash = path2.lastIndexOf("/");
|
|
12023
|
+
const relsPath = `${path2.slice(0, slash)}/_rels/${path2.slice(slash + 1)}.rels`;
|
|
10806
12024
|
return { ...base, rels: parseRelationships(await readPart(zip, relsPath)) };
|
|
10807
12025
|
}
|
|
10808
12026
|
var FIELD_MARKUP = /<w:(?:fldSimple|instrText|fldChar)\b/;
|
|
10809
|
-
async function readPart(zip,
|
|
10810
|
-
return zip.file(
|
|
12027
|
+
async function readPart(zip, path2) {
|
|
12028
|
+
return zip.file(path2)?.async("string");
|
|
10811
12029
|
}
|
|
10812
12030
|
function parseSettings(xml) {
|
|
10813
12031
|
if (!xml) return { evenAndOddHeaders: false, autoHyphenation: false };
|
|
@@ -10835,21 +12053,21 @@ async function resolveSlots(zip, relationships, refs, cache, fieldMarkup, drawin
|
|
|
10835
12053
|
for (const ref of refs) {
|
|
10836
12054
|
const relationship = relationships.get(ref.rId);
|
|
10837
12055
|
if (!relationship) continue;
|
|
10838
|
-
const
|
|
10839
|
-
let blocks = cache.get(
|
|
12056
|
+
const path2 = resolvePartPath("word/document.xml", relationship.target);
|
|
12057
|
+
let blocks = cache.get(path2);
|
|
10840
12058
|
if (!blocks) {
|
|
10841
|
-
const xml = await readPart(zip,
|
|
12059
|
+
const xml = await readPart(zip, path2);
|
|
10842
12060
|
if (xml === void 0) continue;
|
|
10843
12061
|
if (FIELD_MARKUP.test(xml)) fieldMarkup.seen = true;
|
|
10844
|
-
const context = await partContext(zip,
|
|
12062
|
+
const context = await partContext(zip, path2, drawings);
|
|
10845
12063
|
const root = parseXml2(xml).documentElement;
|
|
10846
12064
|
blocks = withParseWarnings(
|
|
10847
12065
|
sink2,
|
|
10848
|
-
() => parseBlocksFromContainer(root, `${
|
|
12066
|
+
() => parseBlocksFromContainer(root, `${path2.replace(/[^a-z0-9]+/gi, "")}-`, context)
|
|
10849
12067
|
);
|
|
10850
|
-
cache.set(
|
|
12068
|
+
cache.set(path2, blocks);
|
|
10851
12069
|
}
|
|
10852
|
-
slots[ref.slot] = { blocks, partName:
|
|
12070
|
+
slots[ref.slot] = { blocks, partName: path2 };
|
|
10853
12071
|
}
|
|
10854
12072
|
return Object.keys(slots).length ? slots : void 0;
|
|
10855
12073
|
}
|
|
@@ -10885,8 +12103,8 @@ async function parseDocumentParts(zip, body, blocks, drawings) {
|
|
|
10885
12103
|
}
|
|
10886
12104
|
const footnotesXml = await readPart(zip, "word/footnotes.xml");
|
|
10887
12105
|
const endnotesXml = await readPart(zip, "word/endnotes.xml");
|
|
10888
|
-
const notesParser = async (
|
|
10889
|
-
const context = await partContext(zip,
|
|
12106
|
+
const notesParser = async (path2) => {
|
|
12107
|
+
const context = await partContext(zip, path2, drawings);
|
|
10890
12108
|
return (container2, prefix) => withParseWarnings(warnings, () => parseBlocksFromContainer(container2, prefix, context));
|
|
10891
12109
|
};
|
|
10892
12110
|
const footnotes = footnotesXml ? parseNotesPart(footnotesXml, "footnote", await notesParser("word/footnotes.xml")) : void 0;
|
|
@@ -10938,15 +12156,15 @@ function parseComments(commentsXml, extendedXml) {
|
|
|
10938
12156
|
});
|
|
10939
12157
|
if (extendedXml) {
|
|
10940
12158
|
const extended = parseXml2(extendedXml);
|
|
10941
|
-
for (const
|
|
12159
|
+
for (const entry2 of Array.from(
|
|
10942
12160
|
extended.getElementsByTagNameNS(W15_NS2, "commentEx")
|
|
10943
12161
|
)) {
|
|
10944
|
-
const paraId =
|
|
10945
|
-
const comment = paraId && comments.find((
|
|
12162
|
+
const paraId = entry2.getAttributeNS(W15_NS2, "paraId");
|
|
12163
|
+
const comment = paraId && comments.find((c2) => c2.id === paraIdToCommentId.get(paraId));
|
|
10946
12164
|
if (!comment) continue;
|
|
10947
|
-
const done =
|
|
12165
|
+
const done = entry2.getAttributeNS(W15_NS2, "done");
|
|
10948
12166
|
comment.resolved = done === "1" || done === "true";
|
|
10949
|
-
const parentParaId =
|
|
12167
|
+
const parentParaId = entry2.getAttributeNS(W15_NS2, "paraIdParent");
|
|
10950
12168
|
const parentId = parentParaId && paraIdToCommentId.get(parentParaId);
|
|
10951
12169
|
if (parentId) comment.parentId = parentId;
|
|
10952
12170
|
}
|
|
@@ -10954,71 +12172,6 @@ function parseComments(commentsXml, extendedXml) {
|
|
|
10954
12172
|
return comments;
|
|
10955
12173
|
}
|
|
10956
12174
|
|
|
10957
|
-
// drawingml/theme.ts
|
|
10958
|
-
new Set(THEME_COLOR_SLOTS);
|
|
10959
|
-
function nonEmpty(value) {
|
|
10960
|
-
return value ? value : void 0;
|
|
10961
|
-
}
|
|
10962
|
-
function parseThemeColorScheme(scheme) {
|
|
10963
|
-
const result = { colors: {} };
|
|
10964
|
-
if (!scheme) return result;
|
|
10965
|
-
const name = nonEmpty(scheme.getAttribute("name"));
|
|
10966
|
-
if (name) result.name = name;
|
|
10967
|
-
for (const slot2 of THEME_COLOR_SLOTS) {
|
|
10968
|
-
const color = parseDrawingColorIn(first(scheme, slot2, NS.a));
|
|
10969
|
-
if (color) result.colors[slot2] = color;
|
|
10970
|
-
}
|
|
10971
|
-
return result;
|
|
10972
|
-
}
|
|
10973
|
-
function parseFontCollection(collection) {
|
|
10974
|
-
const result = { scripts: {} };
|
|
10975
|
-
if (!collection) return result;
|
|
10976
|
-
const typeface = (local) => nonEmpty(first(collection, local, NS.a)?.getAttribute("typeface"));
|
|
10977
|
-
const latin = typeface("latin");
|
|
10978
|
-
const eastAsia = typeface("ea");
|
|
10979
|
-
const complexScript = typeface("cs");
|
|
10980
|
-
if (latin) result.latin = latin;
|
|
10981
|
-
if (eastAsia) result.eastAsia = eastAsia;
|
|
10982
|
-
if (complexScript) result.complexScript = complexScript;
|
|
10983
|
-
for (const font of elements(collection)) {
|
|
10984
|
-
if (font.localName !== "font") continue;
|
|
10985
|
-
const script = nonEmpty(font.getAttribute("script"));
|
|
10986
|
-
const face = nonEmpty(font.getAttribute("typeface"));
|
|
10987
|
-
if (script && face && !Object.hasOwn(result.scripts, script)) result.scripts[script] = face;
|
|
10988
|
-
}
|
|
10989
|
-
return result;
|
|
10990
|
-
}
|
|
10991
|
-
function parseThemeFontScheme(scheme) {
|
|
10992
|
-
const result = {
|
|
10993
|
-
major: parseFontCollection(first(scheme, "majorFont", NS.a)),
|
|
10994
|
-
minor: parseFontCollection(first(scheme, "minorFont", NS.a))
|
|
10995
|
-
};
|
|
10996
|
-
const name = nonEmpty(scheme?.getAttribute("name"));
|
|
10997
|
-
if (name) result.name = name;
|
|
10998
|
-
return result;
|
|
10999
|
-
}
|
|
11000
|
-
function rootOf2(source) {
|
|
11001
|
-
return "documentElement" in source ? source.documentElement : source;
|
|
11002
|
-
}
|
|
11003
|
-
function parseTheme(source) {
|
|
11004
|
-
const root = rootOf2(source);
|
|
11005
|
-
const holder = first(root, "themeElements", NS.a) ?? root;
|
|
11006
|
-
const theme = {
|
|
11007
|
-
colorScheme: parseThemeColorScheme(first(holder, "clrScheme", NS.a)),
|
|
11008
|
-
fontScheme: parseThemeFontScheme(first(holder, "fontScheme", NS.a))
|
|
11009
|
-
};
|
|
11010
|
-
const name = nonEmpty(root.getAttribute("name"));
|
|
11011
|
-
if (name) theme.name = name;
|
|
11012
|
-
return theme;
|
|
11013
|
-
}
|
|
11014
|
-
|
|
11015
|
-
// drawingml/theme-color.ts
|
|
11016
|
-
function themeSlotHex(color) {
|
|
11017
|
-
if (!color) return void 0;
|
|
11018
|
-
const value = color.kind === "srgb" ? color.value : color.kind === "system" ? color.fallback : void 0;
|
|
11019
|
-
return value ? value.toUpperCase() : void 0;
|
|
11020
|
-
}
|
|
11021
|
-
|
|
11022
12175
|
// docx/theme.ts
|
|
11023
12176
|
function fontSetOf(collection) {
|
|
11024
12177
|
const { latin, eastAsia, complexScript } = collection;
|
|
@@ -11069,96 +12222,6 @@ function parseColorSchemeMapping(xml) {
|
|
|
11069
12222
|
return result;
|
|
11070
12223
|
}
|
|
11071
12224
|
|
|
11072
|
-
// docx/parse-warnings.ts
|
|
11073
|
-
function hasAny(document, names) {
|
|
11074
|
-
return names.some((name) => document.getElementsByTagNameNS(WORD_NS, name).length > 0);
|
|
11075
|
-
}
|
|
11076
|
-
function warningsFor(document) {
|
|
11077
|
-
const warnings = [];
|
|
11078
|
-
const features = [
|
|
11079
|
-
[["object"], "Embedded OLE objects (w:object) are preserved but rendered as a placeholder."],
|
|
11080
|
-
[["altChunk"], "Embedded alternate-format content is not represented in the document model."],
|
|
11081
|
-
[
|
|
11082
|
-
["fldSimple", "instrText", "fldChar"],
|
|
11083
|
-
"Fields show the result Word last saved while editing; Print Layout recalculates PAGE, NUMPAGES, SECTIONPAGES, DATE and TIME, and tables of contents update from the References tab."
|
|
11084
|
-
],
|
|
11085
|
-
[
|
|
11086
|
-
["moveFrom", "moveTo"],
|
|
11087
|
-
"Moved text is linked by its move name: accepting or rejecting either side resolves both. Moves are shown and saved with their range markers."
|
|
11088
|
-
],
|
|
11089
|
-
[
|
|
11090
|
-
["rPrChange"],
|
|
11091
|
-
"Formatting-change revisions retain their prior run-properties snapshots and support acceptance and rejection; recording new formatting changes and showing prior formatting in Original display are not supported yet."
|
|
11092
|
-
],
|
|
11093
|
-
[
|
|
11094
|
-
["pPrChange"],
|
|
11095
|
-
"Paragraph-formatting-change revisions retain their prior properties snapshots and support acceptance and rejection; recording new paragraph formatting changes and showing prior formatting in Original display are not supported yet."
|
|
11096
|
-
],
|
|
11097
|
-
[
|
|
11098
|
-
["tblPrChange", "trPrChange", "tcPrChange"],
|
|
11099
|
-
"Table-structure tracked changes are preserved in the source XML but are not represented in the document model."
|
|
11100
|
-
]
|
|
11101
|
-
];
|
|
11102
|
-
for (const [names, message] of features) if (hasAny(document, names)) warnings.push(message);
|
|
11103
|
-
if (Array.from(document.getElementsByTagNameNS(WORD_NS, "instrText")).some(
|
|
11104
|
-
(el3) => /HYPERLINK/i.test(textContent(el3))
|
|
11105
|
-
))
|
|
11106
|
-
warnings.push(
|
|
11107
|
-
"Complex HYPERLINK field codes (w:fldChar/w:instrText) are preserved but not parsed as links; their result text edits as plain text."
|
|
11108
|
-
);
|
|
11109
|
-
const specialBreak = Array.from(document.getElementsByTagNameNS(WORD_NS, "br")).some(
|
|
11110
|
-
(br) => hasSpecialBreak(br) && !isModeledBreak(br)
|
|
11111
|
-
) || Array.from(document.getElementsByTagNameNS(WORD_NS, "cr")).some(
|
|
11112
|
-
(cr) => cr.attributes.length > 0
|
|
11113
|
-
);
|
|
11114
|
-
if (specialBreak)
|
|
11115
|
-
warnings.push(
|
|
11116
|
-
"Some non-line breaks other than page and column breaks are not distinguished from line breaks in the document model; edits to paragraphs containing them are rejected to preserve the original XML."
|
|
11117
|
-
);
|
|
11118
|
-
return warnings;
|
|
11119
|
-
}
|
|
11120
|
-
function forEachParagraph2(blocks, visit) {
|
|
11121
|
-
for (const block of blocks) {
|
|
11122
|
-
if (block.type === "paragraph") visit(block);
|
|
11123
|
-
else for (const row of block.rows) for (const cell of row) cell.paragraphs.forEach(visit);
|
|
11124
|
-
}
|
|
11125
|
-
}
|
|
11126
|
-
function imageAndBookmarkWarnings(blocks) {
|
|
11127
|
-
const warnings = [];
|
|
11128
|
-
let hasPicture = false;
|
|
11129
|
-
let hasAnchored = false;
|
|
11130
|
-
const unsupportedKinds = /* @__PURE__ */ new Set();
|
|
11131
|
-
let hasBookmarks = false;
|
|
11132
|
-
forEachParagraph2(blocks, (paragraph) => {
|
|
11133
|
-
if (paragraph.bookmarks?.length) hasBookmarks = true;
|
|
11134
|
-
for (const run of paragraph.runs) {
|
|
11135
|
-
if (!run.image) continue;
|
|
11136
|
-
if (run.image.unsupported) {
|
|
11137
|
-
if (run.image.diagram?.rendering !== "cached-drawing")
|
|
11138
|
-
unsupportedKinds.add(run.image.unsupported);
|
|
11139
|
-
} else hasPicture = true;
|
|
11140
|
-
if (run.image.anchored) hasAnchored = true;
|
|
11141
|
-
}
|
|
11142
|
-
});
|
|
11143
|
-
if (hasPicture)
|
|
11144
|
-
warnings.push(
|
|
11145
|
-
"Inline pictures render from their original bytes and can be deleted or newly inserted; crop, artistic effects, and non-inline text wrapping are not reproduced."
|
|
11146
|
-
);
|
|
11147
|
-
if (hasAnchored)
|
|
11148
|
-
warnings.push(
|
|
11149
|
-
"Floating pictures follow their text wrapping approximately (floated left or right, or on their own line); exact positions, vertical offsets and in-front/behind layering are not reproduced."
|
|
11150
|
-
);
|
|
11151
|
-
if (unsupportedKinds.size)
|
|
11152
|
-
warnings.push(
|
|
11153
|
-
`${Array.from(unsupportedKinds).join(", ")} content is rendered as a labeled placeholder and is not editable.`
|
|
11154
|
-
);
|
|
11155
|
-
if (hasBookmarks)
|
|
11156
|
-
warnings.push(
|
|
11157
|
-
"Bookmark names are read-only; editing a paragraph that contains bookmarks preserves them but moves their start/end to the paragraph boundaries."
|
|
11158
|
-
);
|
|
11159
|
-
return warnings;
|
|
11160
|
-
}
|
|
11161
|
-
|
|
11162
12225
|
// docx/diagram-document.ts
|
|
11163
12226
|
function diagramsIn(blocks) {
|
|
11164
12227
|
const diagrams = [];
|
|
@@ -11196,7 +12259,7 @@ async function readPackage(input) {
|
|
|
11196
12259
|
const entries = Object.values(zip.files);
|
|
11197
12260
|
if (entries.length > 5e3) throw new Error("DOCX package exceeds the 5,000 part limit");
|
|
11198
12261
|
const totalSize = entries.reduce(
|
|
11199
|
-
(sum,
|
|
12262
|
+
(sum, entry2) => sum + Number(entry2._data?.uncompressedSize ?? 0),
|
|
11200
12263
|
0
|
|
11201
12264
|
);
|
|
11202
12265
|
if (totalSize > 200 * 1024 * 1024)
|
|
@@ -11347,6 +12410,10 @@ async function readPackage(input) {
|
|
|
11347
12410
|
pictureBlocks,
|
|
11348
12411
|
async (partName) => zip.file(partName)?.async("string")
|
|
11349
12412
|
);
|
|
12413
|
+
await resolveDocumentCharts(
|
|
12414
|
+
pictureBlocks,
|
|
12415
|
+
async (partName) => zip.file(partName)?.async("string")
|
|
12416
|
+
);
|
|
11350
12417
|
model.warnings.push(...imageAndBookmarkWarnings(blocks), ...diagramWarnings(pictureBlocks));
|
|
11351
12418
|
for (const warning of schemaWarnings)
|
|
11352
12419
|
if (!model.warnings.includes(warning)) model.warnings.push(warning);
|
|
@@ -11525,10 +12592,10 @@ function chainToEnd(table, start, max) {
|
|
|
11525
12592
|
}
|
|
11526
12593
|
return out;
|
|
11527
12594
|
}
|
|
11528
|
-
function processCompoundFileStream(input,
|
|
12595
|
+
function processCompoundFileStream(input, path2, replacement) {
|
|
11529
12596
|
const reject = () => replacement ? input : void 0;
|
|
11530
12597
|
try {
|
|
11531
|
-
if (
|
|
12598
|
+
if (path2.length === 0 || path2.some((part) => !part) || input.length < 512)
|
|
11532
12599
|
return reject();
|
|
11533
12600
|
const view = new DataView(input.buffer, input.byteOffset, input.byteLength);
|
|
11534
12601
|
const read32 = (offset2) => view.getUint32(offset2, true);
|
|
@@ -11611,7 +12678,7 @@ function processCompoundFileStream(input, path, replacement) {
|
|
|
11611
12678
|
if (!root)
|
|
11612
12679
|
return reject();
|
|
11613
12680
|
let parent = root, target;
|
|
11614
|
-
for (let partIndex = 0; partIndex <
|
|
12681
|
+
for (let partIndex = 0; partIndex < path2.length; partIndex++) {
|
|
11615
12682
|
const matches = [], seen = /* @__PURE__ */ new Set();
|
|
11616
12683
|
const visit = (id) => {
|
|
11617
12684
|
if (id === NIL)
|
|
@@ -11623,7 +12690,7 @@ function processCompoundFileStream(input, path, replacement) {
|
|
|
11623
12690
|
if (!e)
|
|
11624
12691
|
throw new Error("Invalid directory ID");
|
|
11625
12692
|
visit(e.left);
|
|
11626
|
-
if (e.name.toLocaleLowerCase() ===
|
|
12693
|
+
if (e.name.toLocaleLowerCase() === path2[partIndex].toLocaleLowerCase())
|
|
11627
12694
|
matches.push(e);
|
|
11628
12695
|
visit(e.right);
|
|
11629
12696
|
};
|
|
@@ -11631,7 +12698,7 @@ function processCompoundFileStream(input, path, replacement) {
|
|
|
11631
12698
|
if (matches.length !== 1)
|
|
11632
12699
|
return reject();
|
|
11633
12700
|
target = matches[0];
|
|
11634
|
-
if (partIndex <
|
|
12701
|
+
if (partIndex < path2.length - 1) {
|
|
11635
12702
|
if (target.type !== 1)
|
|
11636
12703
|
return reject();
|
|
11637
12704
|
parent = target;
|
|
@@ -11679,12 +12746,12 @@ function processCompoundFileStream(input, path, replacement) {
|
|
|
11679
12746
|
const reserved = /* @__PURE__ */ new Set([...fatIds, ...difatIds, ...dirSectors, ...miniFatSectors]);
|
|
11680
12747
|
const regularUsed = new Set(reserved);
|
|
11681
12748
|
const rootMini = entries.find((e) => e.type === 5);
|
|
11682
|
-
for (const
|
|
11683
|
-
if (
|
|
12749
|
+
for (const entry2 of entries) {
|
|
12750
|
+
if (entry2.type !== 2 && entry2.type !== 5 || entry2.size === 0)
|
|
11684
12751
|
continue;
|
|
11685
|
-
if (
|
|
12752
|
+
if (entry2.type === 2 && entry2.size < miniCutoff)
|
|
11686
12753
|
continue;
|
|
11687
|
-
for (const id of exactChain(fat,
|
|
12754
|
+
for (const id of exactChain(fat, entry2.start, entry2.size, sectorSize)) {
|
|
11688
12755
|
sector(id);
|
|
11689
12756
|
if (regularUsed.has(id))
|
|
11690
12757
|
return reject();
|
|
@@ -11692,10 +12759,10 @@ function processCompoundFileStream(input, path, replacement) {
|
|
|
11692
12759
|
}
|
|
11693
12760
|
}
|
|
11694
12761
|
const miniUsed = /* @__PURE__ */ new Set();
|
|
11695
|
-
for (const
|
|
11696
|
-
if (
|
|
12762
|
+
for (const entry2 of entries) {
|
|
12763
|
+
if (entry2.type !== 2 || entry2.size === 0 || entry2.size >= miniCutoff)
|
|
11697
12764
|
continue;
|
|
11698
|
-
const ids = exactChain(miniFat,
|
|
12765
|
+
const ids = exactChain(miniFat, entry2.start, entry2.size, miniSize);
|
|
11699
12766
|
for (const id of ids) {
|
|
11700
12767
|
if ((id + 1) * miniSize > rootMini.size || miniUsed.has(id))
|
|
11701
12768
|
return reject();
|
|
@@ -11756,11 +12823,11 @@ function processCompoundFileStream(input, path, replacement) {
|
|
|
11756
12823
|
return reject();
|
|
11757
12824
|
}
|
|
11758
12825
|
}
|
|
11759
|
-
function readCompoundFileStream(input,
|
|
11760
|
-
return processCompoundFileStream(input,
|
|
12826
|
+
function readCompoundFileStream(input, path2) {
|
|
12827
|
+
return processCompoundFileStream(input, path2);
|
|
11761
12828
|
}
|
|
11762
|
-
function replaceCompoundFileStream(input,
|
|
11763
|
-
return processCompoundFileStream(input,
|
|
12829
|
+
function replaceCompoundFileStream(input, path2, replacement) {
|
|
12830
|
+
return processCompoundFileStream(input, path2, replacement) ?? input;
|
|
11764
12831
|
}
|
|
11765
12832
|
|
|
11766
12833
|
// ../../node_modules/.bun/@christophervr+ole2@0.12.0/node_modules/@christophervr/ole2/dist/ole2-stream-resize-v4.js
|
|
@@ -11777,12 +12844,12 @@ function follow(table, start) {
|
|
|
11777
12844
|
}
|
|
11778
12845
|
return ids;
|
|
11779
12846
|
}
|
|
11780
|
-
function findSlot(slots,
|
|
12847
|
+
function findSlot(slots, path2) {
|
|
11781
12848
|
let parent = slots.get(0);
|
|
11782
12849
|
if (!parent || parent.type !== 5)
|
|
11783
12850
|
throw new Error("Invalid root");
|
|
11784
12851
|
const parents = /* @__PURE__ */ new Set();
|
|
11785
|
-
for (let part = 0; part <
|
|
12852
|
+
for (let part = 0; part < path2.length; part++) {
|
|
11786
12853
|
if (parents.has(parent.id))
|
|
11787
12854
|
throw new Error("Cyclic storage hierarchy");
|
|
11788
12855
|
parents.add(parent.id);
|
|
@@ -11797,14 +12864,14 @@ function findSlot(slots, path) {
|
|
|
11797
12864
|
const slot2 = slots.get(id);
|
|
11798
12865
|
if (!slot2)
|
|
11799
12866
|
throw new Error("Missing directory slot");
|
|
11800
|
-
if (slot2.name.toLocaleLowerCase() ===
|
|
12867
|
+
if (slot2.name.toLocaleLowerCase() === path2[part].toLocaleLowerCase())
|
|
11801
12868
|
matches.push(slot2);
|
|
11802
12869
|
stack.push(slot2.left, slot2.right);
|
|
11803
12870
|
}
|
|
11804
12871
|
if (matches.length !== 1)
|
|
11805
12872
|
throw new Error("Missing or ambiguous stream");
|
|
11806
12873
|
parent = matches[0];
|
|
11807
|
-
if (parent.type !== (part ===
|
|
12874
|
+
if (parent.type !== (part === path2.length - 1 ? 2 : 1))
|
|
11808
12875
|
throw new Error("Invalid storage path");
|
|
11809
12876
|
}
|
|
11810
12877
|
return parent;
|
|
@@ -11834,10 +12901,10 @@ function validateHierarchy(slots) {
|
|
|
11834
12901
|
if (owners.size !== slots.size - 1)
|
|
11835
12902
|
throw new Error("Unreachable directory entries");
|
|
11836
12903
|
}
|
|
11837
|
-
function resizeCompoundFileStreamV4(input,
|
|
12904
|
+
function resizeCompoundFileStreamV4(input, path2, replacement) {
|
|
11838
12905
|
const fail = (reason) => ({ ok: false, bytes: input, reason });
|
|
11839
12906
|
try {
|
|
11840
|
-
if (input.length < 512 || !
|
|
12907
|
+
if (input.length < 512 || !path2.length || path2.some((part) => !part))
|
|
11841
12908
|
return fail("invalid-or-missing-stream");
|
|
11842
12909
|
const view = new DataView(input.buffer, input.byteOffset, input.byteLength);
|
|
11843
12910
|
const read = (offset) => view.getUint32(offset, true);
|
|
@@ -11850,10 +12917,10 @@ function resizeCompoundFileStreamV4(input, path, replacement) {
|
|
|
11850
12917
|
const cutoff = read(56);
|
|
11851
12918
|
if (cutoff !== 0 && cutoff !== 4096)
|
|
11852
12919
|
return fail("unsupported-layout");
|
|
11853
|
-
const original = readCompoundFileStream(input,
|
|
12920
|
+
const original = readCompoundFileStream(input, path2);
|
|
11854
12921
|
if (!original)
|
|
11855
12922
|
return fail("invalid-or-missing-stream");
|
|
11856
|
-
const name =
|
|
12923
|
+
const name = path2[path2.length - 1].toLocaleLowerCase();
|
|
11857
12924
|
if (name === "worddocument" && original.length >= 12 && (original[10] | original[11] << 8) & 33024)
|
|
11858
12925
|
return fail("unsafe-edit");
|
|
11859
12926
|
if (name === "book" || name === "workbook") {
|
|
@@ -11867,7 +12934,7 @@ function resizeCompoundFileStreamV4(input, path, replacement) {
|
|
|
11867
12934
|
offset += 4 + length;
|
|
11868
12935
|
}
|
|
11869
12936
|
}
|
|
11870
|
-
const validated = replaceCompoundFileStream(input,
|
|
12937
|
+
const validated = replaceCompoundFileStream(input, path2, original);
|
|
11871
12938
|
if (validated === input)
|
|
11872
12939
|
return fail("unsafe-edit");
|
|
11873
12940
|
const sameLength = replacement.length === original.length;
|
|
@@ -11891,8 +12958,8 @@ function resizeCompoundFileStreamV4(input, path, replacement) {
|
|
|
11891
12958
|
if (read(40) !== directoryChain.length)
|
|
11892
12959
|
return fail("unsafe-edit");
|
|
11893
12960
|
for (const [block, sector] of directoryChain.entries()) {
|
|
11894
|
-
for (let
|
|
11895
|
-
const offset = (sector + 1) * SECTOR3 +
|
|
12961
|
+
for (let entry2 = 0; entry2 < DIRECTORY_ENTRIES; entry2++) {
|
|
12962
|
+
const offset = (sector + 1) * SECTOR3 + entry2 * 128, type = view.getUint8(offset + 66);
|
|
11896
12963
|
if (!type)
|
|
11897
12964
|
continue;
|
|
11898
12965
|
const nameLength = view.getUint16(offset + 64, true);
|
|
@@ -11903,16 +12970,16 @@ function resizeCompoundFileStreamV4(input, path, replacement) {
|
|
|
11903
12970
|
name2 += String.fromCharCode(view.getUint16(offset + i2, true));
|
|
11904
12971
|
if (read(offset + 124) !== 0)
|
|
11905
12972
|
return fail("unsafe-edit");
|
|
11906
|
-
const id = block * DIRECTORY_ENTRIES +
|
|
12973
|
+
const id = block * DIRECTORY_ENTRIES + entry2;
|
|
11907
12974
|
slots.set(id, { id, name: name2, type, left: read(offset + 68), right: read(offset + 72), child: read(offset + 76), start: read(offset + 116), size: read(offset + 120), offset });
|
|
11908
12975
|
}
|
|
11909
12976
|
}
|
|
11910
12977
|
if ([...slots.values()].filter((slot2) => slot2.type === 5).length !== 1)
|
|
11911
12978
|
return fail("unsafe-edit");
|
|
11912
|
-
const target = findSlot(slots,
|
|
12979
|
+
const target = findSlot(slots, path2);
|
|
11913
12980
|
validateHierarchy(slots);
|
|
11914
12981
|
if (sameLength) {
|
|
11915
|
-
const bytes = replaceCompoundFileStream(input,
|
|
12982
|
+
const bytes = replaceCompoundFileStream(input, path2, replacement);
|
|
11916
12983
|
return bytes === input ? fail("unsafe-edit") : { ok: true, bytes };
|
|
11917
12984
|
}
|
|
11918
12985
|
const oldChain = follow(fat, target.start);
|
|
@@ -12086,12 +13153,12 @@ function follow2(table, start) {
|
|
|
12086
13153
|
}
|
|
12087
13154
|
return ids;
|
|
12088
13155
|
}
|
|
12089
|
-
function findSlot2(slots,
|
|
13156
|
+
function findSlot2(slots, path2) {
|
|
12090
13157
|
let parent = slots.get(0);
|
|
12091
13158
|
if (!parent || parent.type !== 5)
|
|
12092
13159
|
throw new Error("Invalid root");
|
|
12093
13160
|
const parents = /* @__PURE__ */ new Set();
|
|
12094
|
-
for (let part = 0; part <
|
|
13161
|
+
for (let part = 0; part < path2.length; part++) {
|
|
12095
13162
|
if (parents.has(parent.id))
|
|
12096
13163
|
throw new Error("Cyclic storage hierarchy");
|
|
12097
13164
|
parents.add(parent.id);
|
|
@@ -12106,14 +13173,14 @@ function findSlot2(slots, path) {
|
|
|
12106
13173
|
const slot2 = slots.get(id);
|
|
12107
13174
|
if (!slot2)
|
|
12108
13175
|
throw new Error("Missing directory slot");
|
|
12109
|
-
if (slot2.name.toLocaleLowerCase() ===
|
|
13176
|
+
if (slot2.name.toLocaleLowerCase() === path2[part].toLocaleLowerCase())
|
|
12110
13177
|
matches.push(slot2);
|
|
12111
13178
|
stack.push(slot2.left, slot2.right);
|
|
12112
13179
|
}
|
|
12113
13180
|
if (matches.length !== 1)
|
|
12114
13181
|
throw new Error("Missing or ambiguous stream");
|
|
12115
13182
|
parent = matches[0];
|
|
12116
|
-
if (parent.type !== (part ===
|
|
13183
|
+
if (parent.type !== (part === path2.length - 1 ? 2 : 1))
|
|
12117
13184
|
throw new Error("Invalid storage path");
|
|
12118
13185
|
}
|
|
12119
13186
|
return parent;
|
|
@@ -12143,12 +13210,12 @@ function validateHierarchy2(slots) {
|
|
|
12143
13210
|
if (owners.size !== slots.size - 1)
|
|
12144
13211
|
throw new Error("Unreachable directory entries");
|
|
12145
13212
|
}
|
|
12146
|
-
function resizeCompoundFileStream(input,
|
|
13213
|
+
function resizeCompoundFileStream(input, path2, replacement) {
|
|
12147
13214
|
if (input.length >= 512 && new DataView(input.buffer, input.byteOffset, input.byteLength).getUint16(26, true) === 4)
|
|
12148
|
-
return resizeCompoundFileStreamV4(input,
|
|
13215
|
+
return resizeCompoundFileStreamV4(input, path2, replacement);
|
|
12149
13216
|
const fail = (reason) => ({ ok: false, bytes: input, reason });
|
|
12150
13217
|
try {
|
|
12151
|
-
if (input.length < SECTOR2 || !
|
|
13218
|
+
if (input.length < SECTOR2 || !path2.length || path2.some((part) => !part))
|
|
12152
13219
|
return fail("invalid-or-missing-stream");
|
|
12153
13220
|
const view = new DataView(input.buffer, input.byteOffset, input.byteLength);
|
|
12154
13221
|
const read = (offset) => view.getUint32(offset, true);
|
|
@@ -12159,10 +13226,10 @@ function resizeCompoundFileStream(input, path, replacement) {
|
|
|
12159
13226
|
const cutoff = read(56);
|
|
12160
13227
|
if (cutoff !== 0 && cutoff !== 4096)
|
|
12161
13228
|
return fail("unsupported-layout");
|
|
12162
|
-
const original = readCompoundFileStream(input,
|
|
13229
|
+
const original = readCompoundFileStream(input, path2);
|
|
12163
13230
|
if (!original)
|
|
12164
13231
|
return fail("invalid-or-missing-stream");
|
|
12165
|
-
const name =
|
|
13232
|
+
const name = path2[path2.length - 1].toLocaleLowerCase();
|
|
12166
13233
|
if (name === "worddocument" && original.length >= 12 && (original[10] | original[11] << 8) & 33024)
|
|
12167
13234
|
return fail("unsafe-edit");
|
|
12168
13235
|
if (name === "book" || name === "workbook") {
|
|
@@ -12176,7 +13243,7 @@ function resizeCompoundFileStream(input, path, replacement) {
|
|
|
12176
13243
|
offset += 4 + length;
|
|
12177
13244
|
}
|
|
12178
13245
|
}
|
|
12179
|
-
const validated = replaceCompoundFileStream(input,
|
|
13246
|
+
const validated = replaceCompoundFileStream(input, path2, original);
|
|
12180
13247
|
if (validated === input)
|
|
12181
13248
|
return fail("unsafe-edit");
|
|
12182
13249
|
const sameLength = replacement.length === original.length;
|
|
@@ -12193,8 +13260,8 @@ function resizeCompoundFileStream(input, path, replacement) {
|
|
|
12193
13260
|
return fail("unsafe-edit");
|
|
12194
13261
|
const slots = /* @__PURE__ */ new Map();
|
|
12195
13262
|
for (const [block, sector] of follow2(fat, read(48)).entries()) {
|
|
12196
|
-
for (let
|
|
12197
|
-
const offset = (sector + 1) * SECTOR2 +
|
|
13263
|
+
for (let entry2 = 0; entry2 < 4; entry2++) {
|
|
13264
|
+
const offset = (sector + 1) * SECTOR2 + entry2 * 128, type = view.getUint8(offset + 66);
|
|
12198
13265
|
if (!type)
|
|
12199
13266
|
continue;
|
|
12200
13267
|
const nameLength = view.getUint16(offset + 64, true);
|
|
@@ -12203,16 +13270,16 @@ function resizeCompoundFileStream(input, path, replacement) {
|
|
|
12203
13270
|
let name2 = "";
|
|
12204
13271
|
for (let i2 = 0; i2 < nameLength - 2; i2 += 2)
|
|
12205
13272
|
name2 += String.fromCharCode(view.getUint16(offset + i2, true));
|
|
12206
|
-
const id = block * 4 +
|
|
13273
|
+
const id = block * 4 + entry2;
|
|
12207
13274
|
slots.set(id, { id, name: name2, type, left: read(offset + 68), right: read(offset + 72), child: read(offset + 76), start: read(offset + 116), size: read(offset + 120), offset });
|
|
12208
13275
|
}
|
|
12209
13276
|
}
|
|
12210
13277
|
if ([...slots.values()].filter((slot2) => slot2.type === 5).length !== 1)
|
|
12211
13278
|
return fail("unsafe-edit");
|
|
12212
|
-
const target = findSlot2(slots,
|
|
13279
|
+
const target = findSlot2(slots, path2);
|
|
12213
13280
|
validateHierarchy2(slots);
|
|
12214
13281
|
if (sameLength) {
|
|
12215
|
-
const bytes = replaceCompoundFileStream(input,
|
|
13282
|
+
const bytes = replaceCompoundFileStream(input, path2, replacement);
|
|
12216
13283
|
return bytes === input ? fail("unsafe-edit") : { ok: true, bytes };
|
|
12217
13284
|
}
|
|
12218
13285
|
if (original.length < cutoff || replacement.length < cutoff) {
|
|
@@ -13128,7 +14195,7 @@ async function loadLegacyDoc(input) {
|
|
|
13128
14195
|
original.byteOffset + original.byteLength
|
|
13129
14196
|
)
|
|
13130
14197
|
);
|
|
13131
|
-
streams2 = parsed.entries.map((
|
|
14198
|
+
streams2 = parsed.entries.map((entry2) => entry2.name);
|
|
13132
14199
|
wordDocument = readCompoundFileStream(original, ["WordDocument"]) ?? null;
|
|
13133
14200
|
} catch (error) {
|
|
13134
14201
|
throw new LegacyDocError(
|