ooxml-core 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +3 -0
- package/README.md +125 -0
- package/THIRD-PARTY-LICENSES +26 -0
- package/dist/collab/assets.d.ts +42 -0
- package/dist/collab/assets.d.ts.map +1 -0
- package/dist/collab/awareness.d.ts +65 -0
- package/dist/collab/awareness.d.ts.map +1 -0
- package/dist/collab/binding.d.ts +36 -0
- package/dist/collab/binding.d.ts.map +1 -0
- package/dist/collab/codec.d.ts +37 -0
- package/dist/collab/codec.d.ts.map +1 -0
- package/dist/collab/emitter.d.ts +11 -0
- package/dist/collab/emitter.d.ts.map +1 -0
- package/dist/collab/external-provider.d.ts +50 -0
- package/dist/collab/external-provider.d.ts.map +1 -0
- package/dist/collab/identity.d.ts +48 -0
- package/dist/collab/identity.d.ts.map +1 -0
- package/dist/collab/index.cjs +1328 -0
- package/dist/collab/index.d.ts +18 -0
- package/dist/collab/index.d.ts.map +1 -0
- package/dist/collab/index.mjs +1225 -0
- package/dist/collab/lifecycle.d.ts +62 -0
- package/dist/collab/lifecycle.d.ts.map +1 -0
- package/dist/collab/memory-transport.d.ts +19 -0
- package/dist/collab/memory-transport.d.ts.map +1 -0
- package/dist/collab/ordering.d.ts +53 -0
- package/dist/collab/ordering.d.ts.map +1 -0
- package/dist/collab/policy.d.ts +39 -0
- package/dist/collab/policy.d.ts.map +1 -0
- package/dist/collab/presence.d.ts +61 -0
- package/dist/collab/presence.d.ts.map +1 -0
- package/dist/collab/provider.d.ts +55 -0
- package/dist/collab/provider.d.ts.map +1 -0
- package/dist/collab/session.d.ts +70 -0
- package/dist/collab/session.d.ts.map +1 -0
- package/dist/collab/transport-provider.d.ts +13 -0
- package/dist/collab/transport-provider.d.ts.map +1 -0
- package/dist/collab/validation.d.ts +38 -0
- package/dist/collab/validation.d.ts.map +1 -0
- package/dist/collab/websocket-transport.d.ts +33 -0
- package/dist/collab/websocket-transport.d.ts.map +1 -0
- package/dist/color/color-linear.d.ts +5 -0
- package/dist/color/color-linear.d.ts.map +1 -0
- package/dist/color/color-primitives.d.ts +183 -0
- package/dist/color/color-primitives.d.ts.map +1 -0
- package/dist/color/index.cjs +177 -0
- package/dist/color/index.d.ts +3 -0
- package/dist/color/index.d.ts.map +1 -0
- package/dist/color/index.mjs +161 -0
- package/dist/diagram/attributes.d.ts +12 -0
- package/dist/diagram/attributes.d.ts.map +1 -0
- package/dist/diagram/data-model.d.ts +18 -0
- package/dist/diagram/data-model.d.ts.map +1 -0
- package/dist/diagram/definitions.d.ts +14 -0
- package/dist/diagram/definitions.d.ts.map +1 -0
- package/dist/diagram/dom.d.ts +15 -0
- package/dist/diagram/dom.d.ts.map +1 -0
- package/dist/diagram/drawing-color.d.ts +28 -0
- package/dist/diagram/drawing-color.d.ts.map +1 -0
- package/dist/diagram/drawing-fill.d.ts +9 -0
- package/dist/diagram/drawing-fill.d.ts.map +1 -0
- package/dist/diagram/drawing-geometry.d.ts +23 -0
- package/dist/diagram/drawing-geometry.d.ts.map +1 -0
- package/dist/diagram/drawing-text.d.ts +5 -0
- package/dist/diagram/drawing-text.d.ts.map +1 -0
- package/dist/diagram/drawing.d.ts +7 -0
- package/dist/diagram/drawing.d.ts.map +1 -0
- package/dist/diagram/index.cjs +1193 -0
- package/dist/diagram/index.d.ts +14 -0
- package/dist/diagram/index.d.ts.map +1 -0
- package/dist/diagram/index.mjs +1161 -0
- package/dist/diagram/layout-category.d.ts +8 -0
- package/dist/diagram/layout-category.d.ts.map +1 -0
- package/dist/diagram/load.d.ts +36 -0
- package/dist/diagram/load.d.ts.map +1 -0
- package/dist/diagram/relationships.d.ts +35 -0
- package/dist/diagram/relationships.d.ts.map +1 -0
- package/dist/diagram/types.d.ts +306 -0
- package/dist/diagram/types.d.ts.map +1 -0
- package/dist/docx/block-parser.d.ts +13 -0
- package/dist/docx/block-parser.d.ts.map +1 -0
- package/dist/docx/bookmarks.d.ts +18 -0
- package/dist/docx/bookmarks.d.ts.map +1 -0
- package/dist/docx/breaks.d.ts +11 -0
- package/dist/docx/breaks.d.ts.map +1 -0
- package/dist/docx/character-styles.d.ts +4 -0
- package/dist/docx/character-styles.d.ts.map +1 -0
- package/dist/docx/comment-spans.d.ts +19 -0
- package/dist/docx/comment-spans.d.ts.map +1 -0
- package/dist/docx/comments.d.ts +4 -0
- package/dist/docx/comments.d.ts.map +1 -0
- package/dist/docx/core-properties.d.ts +18 -0
- package/dist/docx/core-properties.d.ts.map +1 -0
- package/dist/docx/default-styles.d.ts +8 -0
- package/dist/docx/default-styles.d.ts.map +1 -0
- package/dist/docx/defined-props.d.ts +9 -0
- package/dist/docx/defined-props.d.ts.map +1 -0
- package/dist/docx/diagram-document.d.ts +9 -0
- package/dist/docx/diagram-document.d.ts.map +1 -0
- package/dist/docx/diagram-theme.d.ts +8 -0
- package/dist/docx/diagram-theme.d.ts.map +1 -0
- package/dist/docx/diagram.d.ts +89 -0
- package/dist/docx/diagram.d.ts.map +1 -0
- package/dist/docx/docpr-ids.d.ts +14 -0
- package/dist/docx/docpr-ids.d.ts.map +1 -0
- package/dist/docx/document-parts.d.ts +18 -0
- package/dist/docx/document-parts.d.ts.map +1 -0
- package/dist/docx/drawing.d.ts +13 -0
- package/dist/docx/drawing.d.ts.map +1 -0
- package/dist/docx/element-order.d.ts +13 -0
- package/dist/docx/element-order.d.ts.map +1 -0
- package/dist/docx/embedded.cjs +7646 -0
- package/dist/docx/embedded.d.ts +5 -0
- package/dist/docx/embedded.d.ts.map +1 -0
- package/dist/docx/embedded.mjs +7639 -0
- package/dist/docx/expect-defined.d.ts +3 -0
- package/dist/docx/expect-defined.d.ts.map +1 -0
- package/dist/docx/field-date.d.ts +10 -0
- package/dist/docx/field-date.d.ts.map +1 -0
- package/dist/docx/field-runs.d.ts +10 -0
- package/dist/docx/field-runs.d.ts.map +1 -0
- package/dist/docx/generated/wml-simple-types.d.ts +298 -0
- package/dist/docx/generated/wml-simple-types.d.ts.map +1 -0
- package/dist/docx/heading-list-kinds.d.ts +10 -0
- package/dist/docx/heading-list-kinds.d.ts.map +1 -0
- package/dist/docx/highlight.d.ts +5 -0
- package/dist/docx/highlight.d.ts.map +1 -0
- package/dist/docx/hyperlink.d.ts +8 -0
- package/dist/docx/hyperlink.d.ts.map +1 -0
- package/dist/docx/index.cjs +9784 -0
- package/dist/docx/index.d.ts +40 -0
- package/dist/docx/index.d.ts.map +1 -0
- package/dist/docx/index.mjs +9456 -0
- package/dist/docx/inline-model.d.ts +68 -0
- package/dist/docx/inline-model.d.ts.map +1 -0
- package/dist/docx/language.d.ts +3 -0
- package/dist/docx/language.d.ts.map +1 -0
- package/dist/docx/layout/adapt-drop-cap.d.ts +10 -0
- package/dist/docx/layout/adapt-drop-cap.d.ts.map +1 -0
- package/dist/docx/layout/adapt-floats.d.ts +8 -0
- package/dist/docx/layout/adapt-floats.d.ts.map +1 -0
- package/dist/docx/layout/adapt-notes.d.ts +13 -0
- package/dist/docx/layout/adapt-notes.d.ts.map +1 -0
- package/dist/docx/layout/adapt-paragraph-box.d.ts +12 -0
- package/dist/docx/layout/adapt-paragraph-box.d.ts.map +1 -0
- package/dist/docx/layout/adapt-table.d.ts +12 -0
- package/dist/docx/layout/adapt-table.d.ts.map +1 -0
- package/dist/docx/layout/adapter.d.ts +5 -0
- package/dist/docx/layout/adapter.d.ts.map +1 -0
- package/dist/docx/layout/floats.d.ts +20 -0
- package/dist/docx/layout/floats.d.ts.map +1 -0
- package/dist/docx/layout/flow-paragraph.d.ts +26 -0
- package/dist/docx/layout/flow-paragraph.d.ts.map +1 -0
- package/dist/docx/layout/flow-table.d.ts +12 -0
- package/dist/docx/layout/flow-table.d.ts.map +1 -0
- package/dist/docx/layout/fonts.d.ts +3 -0
- package/dist/docx/layout/fonts.d.ts.map +1 -0
- package/dist/docx/layout/index.cjs +2537 -0
- package/dist/docx/layout/index.d.ts +20 -0
- package/dist/docx/layout/index.d.ts.map +1 -0
- package/dist/docx/layout/index.mjs +2503 -0
- package/dist/docx/layout/input.d.ts +206 -0
- package/dist/docx/layout/input.d.ts.map +1 -0
- package/dist/docx/layout/keep-rules.d.ts +24 -0
- package/dist/docx/layout/keep-rules.d.ts.map +1 -0
- package/dist/docx/layout/layout.d.ts +9 -0
- package/dist/docx/layout/layout.d.ts.map +1 -0
- package/dist/docx/layout/ligatures.d.ts +4 -0
- package/dist/docx/layout/ligatures.d.ts.map +1 -0
- package/dist/docx/layout/line-metrics.d.ts +21 -0
- package/dist/docx/layout/line-metrics.d.ts.map +1 -0
- package/dist/docx/layout/measure.d.ts +34 -0
- package/dist/docx/layout/measure.d.ts.map +1 -0
- package/dist/docx/layout/page-cursor.d.ts +45 -0
- package/dist/docx/layout/page-cursor.d.ts.map +1 -0
- package/dist/docx/layout/page-flow.d.ts +7 -0
- package/dist/docx/layout/page-flow.d.ts.map +1 -0
- package/dist/docx/layout/paragraph-fragments.d.ts +6 -0
- package/dist/docx/layout/paragraph-fragments.d.ts.map +1 -0
- package/dist/docx/layout/paragraph-layout.d.ts +37 -0
- package/dist/docx/layout/paragraph-layout.d.ts.map +1 -0
- package/dist/docx/layout/paragraph-tokens.d.ts +27 -0
- package/dist/docx/layout/paragraph-tokens.d.ts.map +1 -0
- package/dist/docx/layout/result.d.ts +139 -0
- package/dist/docx/layout/result.d.ts.map +1 -0
- package/dist/docx/layout/tab-stops.d.ts +14 -0
- package/dist/docx/layout/tab-stops.d.ts.map +1 -0
- package/dist/docx/layout/table-layout.d.ts +30 -0
- package/dist/docx/layout/table-layout.d.ts.map +1 -0
- package/dist/docx/layout/test-helpers.d.ts +3 -0
- package/dist/docx/layout/test-helpers.d.ts.map +1 -0
- package/dist/docx/layout/text-breaks.d.ts +56 -0
- package/dist/docx/layout/text-breaks.d.ts.map +1 -0
- package/dist/docx/layout/units.d.ts +17 -0
- package/dist/docx/layout/units.d.ts.map +1 -0
- package/dist/docx/layout/wrap.d.ts +22 -0
- package/dist/docx/layout/wrap.d.ts.map +1 -0
- package/dist/docx/ligatures.d.ts +9 -0
- package/dist/docx/ligatures.d.ts.map +1 -0
- package/dist/docx/load/detect.d.ts +6 -0
- package/dist/docx/load/detect.d.ts.map +1 -0
- package/dist/docx/load/index.cjs +8869 -0
- package/dist/docx/load/index.d.ts +3 -0
- package/dist/docx/load/index.d.ts.map +1 -0
- package/dist/docx/load/index.mjs +8860 -0
- package/dist/docx/load/legacy-doc.d.ts +7 -0
- package/dist/docx/load/legacy-doc.d.ts.map +1 -0
- package/dist/docx/model-paragraph.d.ts +100 -0
- package/dist/docx/model-paragraph.d.ts.map +1 -0
- package/dist/docx/model-run.d.ts +110 -0
- package/dist/docx/model-run.d.ts.map +1 -0
- package/dist/docx/model.d.ts +114 -0
- package/dist/docx/model.d.ts.map +1 -0
- package/dist/docx/notes.d.ts +9 -0
- package/dist/docx/notes.d.ts.map +1 -0
- package/dist/docx/numbering-editing.d.ts +30 -0
- package/dist/docx/numbering-editing.d.ts.map +1 -0
- package/dist/docx/numbering-format.d.ts +17 -0
- package/dist/docx/numbering-format.d.ts.map +1 -0
- package/dist/docx/numbering-model.d.ts +73 -0
- package/dist/docx/numbering-model.d.ts.map +1 -0
- package/dist/docx/numbering-package.d.ts +12 -0
- package/dist/docx/numbering-package.d.ts.map +1 -0
- package/dist/docx/numbering-parse.d.ts +8 -0
- package/dist/docx/numbering-parse.d.ts.map +1 -0
- package/dist/docx/numbering-parts.d.ts +4 -0
- package/dist/docx/numbering-parts.d.ts.map +1 -0
- package/dist/docx/numbering-text.d.ts +20 -0
- package/dist/docx/numbering-text.d.ts.map +1 -0
- package/dist/docx/numbering-write.d.ts +5 -0
- package/dist/docx/numbering-write.d.ts.map +1 -0
- package/dist/docx/package-parts.d.ts +4 -0
- package/dist/docx/package-parts.d.ts.map +1 -0
- package/dist/docx/page-background.d.ts +9 -0
- package/dist/docx/page-background.d.ts.map +1 -0
- package/dist/docx/page-borders.d.ts +9 -0
- package/dist/docx/page-borders.d.ts.map +1 -0
- package/dist/docx/paragraph-alignment.d.ts +21 -0
- package/dist/docx/paragraph-alignment.d.ts.map +1 -0
- package/dist/docx/paragraph-styles.d.ts +15 -0
- package/dist/docx/paragraph-styles.d.ts.map +1 -0
- package/dist/docx/parse-diagnostics.d.ts +10 -0
- package/dist/docx/parse-diagnostics.d.ts.map +1 -0
- package/dist/docx/parse-revisions.d.ts +36 -0
- package/dist/docx/parse-revisions.d.ts.map +1 -0
- package/dist/docx/parse-table.d.ts +5 -0
- package/dist/docx/parse-table.d.ts.map +1 -0
- package/dist/docx/parse-warnings.d.ts +9 -0
- package/dist/docx/parse-warnings.d.ts.map +1 -0
- package/dist/docx/parse.d.ts +13 -0
- package/dist/docx/parse.d.ts.map +1 -0
- package/dist/docx/part-relationships.d.ts +12 -0
- package/dist/docx/part-relationships.d.ts.map +1 -0
- package/dist/docx/relationship-allocator.d.ts +32 -0
- package/dist/docx/relationship-allocator.d.ts.map +1 -0
- package/dist/docx/relationships.d.ts +3 -0
- package/dist/docx/relationships.d.ts.map +1 -0
- package/dist/docx/resolve-table.d.ts +8 -0
- package/dist/docx/resolve-table.d.ts.map +1 -0
- package/dist/docx/revision-commands.d.ts +27 -0
- package/dist/docx/revision-commands.d.ts.map +1 -0
- package/dist/docx/revision-ids.d.ts +10 -0
- package/dist/docx/revision-ids.d.ts.map +1 -0
- package/dist/docx/run-formatting.d.ts +16 -0
- package/dist/docx/run-formatting.d.ts.map +1 -0
- package/dist/docx/run-properties.d.ts +5 -0
- package/dist/docx/run-properties.d.ts.map +1 -0
- package/dist/docx/run-style-model.d.ts +21 -0
- package/dist/docx/run-style-model.d.ts.map +1 -0
- package/dist/docx/save.d.ts +5 -0
- package/dist/docx/save.d.ts.map +1 -0
- package/dist/docx/section-model.d.ts +97 -0
- package/dist/docx/section-model.d.ts.map +1 -0
- package/dist/docx/sections.d.ts +18 -0
- package/dist/docx/sections.d.ts.map +1 -0
- package/dist/docx/settings.d.ts +11 -0
- package/dist/docx/settings.d.ts.map +1 -0
- package/dist/docx/simple-types.d.ts +37 -0
- package/dist/docx/simple-types.d.ts.map +1 -0
- package/dist/docx/style-numbering-package.d.ts +11 -0
- package/dist/docx/style-numbering-package.d.ts.map +1 -0
- package/dist/docx/tab-stops.d.ts +8 -0
- package/dist/docx/tab-stops.d.ts.map +1 -0
- package/dist/docx/table-borders.d.ts +15 -0
- package/dist/docx/table-borders.d.ts.map +1 -0
- package/dist/docx/table-cell-write.d.ts +12 -0
- package/dist/docx/table-cell-write.d.ts.map +1 -0
- package/dist/docx/table-defaults.d.ts +20 -0
- package/dist/docx/table-defaults.d.ts.map +1 -0
- package/dist/docx/table-model.d.ts +101 -0
- package/dist/docx/table-model.d.ts.map +1 -0
- package/dist/docx/table-of-contents.d.ts +67 -0
- package/dist/docx/table-of-contents.d.ts.map +1 -0
- package/dist/docx/table-of-figures.d.ts +10 -0
- package/dist/docx/table-of-figures.d.ts.map +1 -0
- package/dist/docx/table-styles.d.ts +4 -0
- package/dist/docx/table-styles.d.ts.map +1 -0
- package/dist/docx/table-visuals.d.ts +22 -0
- package/dist/docx/table-visuals.d.ts.map +1 -0
- package/dist/docx/test-support/access.d.ts +14 -0
- package/dist/docx/test-support/access.d.ts.map +1 -0
- package/dist/docx/test-support/heading-numbering-fixture.d.ts +5 -0
- package/dist/docx/test-support/heading-numbering-fixture.d.ts.map +1 -0
- package/dist/docx/test-support/restart-fixture.d.ts +17 -0
- package/dist/docx/test-support/restart-fixture.d.ts.map +1 -0
- package/dist/docx/test-support/schema-validation.d.ts +24 -0
- package/dist/docx/test-support/schema-validation.d.ts.map +1 -0
- package/dist/docx/theme-color.d.ts +16 -0
- package/dist/docx/theme-color.d.ts.map +1 -0
- package/dist/docx/theme-model.d.ts +31 -0
- package/dist/docx/theme-model.d.ts.map +1 -0
- package/dist/docx/theme.d.ts +6 -0
- package/dist/docx/theme.d.ts.map +1 -0
- package/dist/docx/underline.d.ts +5 -0
- package/dist/docx/underline.d.ts.map +1 -0
- package/dist/docx/units.d.ts +2 -0
- package/dist/docx/units.d.ts.map +1 -0
- package/dist/docx/validate-issues.d.ts +40 -0
- package/dist/docx/validate-issues.d.ts.map +1 -0
- package/dist/docx/validate-model.d.ts +8 -0
- package/dist/docx/validate-model.d.ts.map +1 -0
- package/dist/docx/validate-paragraph.d.ts +10 -0
- package/dist/docx/validate-paragraph.d.ts.map +1 -0
- package/dist/docx/validate-structure.d.ts +10 -0
- package/dist/docx/validate-structure.d.ts.map +1 -0
- package/dist/docx/watermark.d.ts +14 -0
- package/dist/docx/watermark.d.ts.map +1 -0
- package/dist/docx/write-comments.d.ts +12 -0
- package/dist/docx/write-comments.d.ts.map +1 -0
- package/dist/docx/write-drawing.d.ts +12 -0
- package/dist/docx/write-drawing.d.ts.map +1 -0
- package/dist/docx/write-header-footer.d.ts +21 -0
- package/dist/docx/write-header-footer.d.ts.map +1 -0
- package/dist/docx/write-inline.d.ts +23 -0
- package/dist/docx/write-inline.d.ts.map +1 -0
- package/dist/docx/write-notes.d.ts +5 -0
- package/dist/docx/write-notes.d.ts.map +1 -0
- package/dist/docx/write-paragraph-decoration.d.ts +5 -0
- package/dist/docx/write-paragraph-decoration.d.ts.map +1 -0
- package/dist/docx/write-paragraph-properties.d.ts +4 -0
- package/dist/docx/write-paragraph-properties.d.ts.map +1 -0
- package/dist/docx/write-paragraph.d.ts +8 -0
- package/dist/docx/write-paragraph.d.ts.map +1 -0
- package/dist/docx/write-ranges.d.ts +42 -0
- package/dist/docx/write-ranges.d.ts.map +1 -0
- package/dist/docx/write-revisions.d.ts +10 -0
- package/dist/docx/write-revisions.d.ts.map +1 -0
- package/dist/docx/write-run-extra.d.ts +5 -0
- package/dist/docx/write-run-extra.d.ts.map +1 -0
- package/dist/docx/write-run-validation.d.ts +4 -0
- package/dist/docx/write-run-validation.d.ts.map +1 -0
- package/dist/docx/write-run.d.ts +7 -0
- package/dist/docx/write-run.d.ts.map +1 -0
- package/dist/docx/write-sections.d.ts +10 -0
- package/dist/docx/write-sections.d.ts.map +1 -0
- package/dist/docx/write-table-properties.d.ts +13 -0
- package/dist/docx/write-table-properties.d.ts.map +1 -0
- package/dist/docx/write-table.d.ts +9 -0
- package/dist/docx/write-table.d.ts.map +1 -0
- package/dist/docx/write-text-box.d.ts +15 -0
- package/dist/docx/write-text-box.d.ts.map +1 -0
- package/dist/docx/write.d.ts +25 -0
- package/dist/docx/write.d.ts.map +1 -0
- package/dist/docx/xml.d.ts +14 -0
- package/dist/docx/xml.d.ts.map +1 -0
- package/dist/docx/zip-parts.d.ts +5 -0
- package/dist/docx/zip-parts.d.ts.map +1 -0
- package/dist/geometry/adjustment-aware-shapes.d.ts +63 -0
- package/dist/geometry/adjustment-aware-shapes.d.ts.map +1 -0
- package/dist/geometry/callout-geometry.d.ts +65 -0
- package/dist/geometry/callout-geometry.d.ts.map +1 -0
- package/dist/geometry/cloud-bezier-paths.d.ts +55 -0
- package/dist/geometry/cloud-bezier-paths.d.ts.map +1 -0
- package/dist/geometry/com-avlst-ground-truth.d.ts +48 -0
- package/dist/geometry/com-avlst-ground-truth.d.ts.map +1 -0
- package/dist/geometry/connector-elbow-geometry.d.ts +41 -0
- package/dist/geometry/connector-elbow-geometry.d.ts.map +1 -0
- package/dist/geometry/guide-formula-api.d.ts +55 -0
- package/dist/geometry/guide-formula-api.d.ts.map +1 -0
- package/dist/geometry/guide-formula-eval.d.ts +85 -0
- package/dist/geometry/guide-formula-eval.d.ts.map +1 -0
- package/dist/geometry/index.cjs +15031 -0
- package/dist/geometry/index.d.ts +80 -0
- package/dist/geometry/index.d.ts.map +1 -0
- package/dist/geometry/index.mjs +14897 -0
- package/dist/geometry/indexed.d.ts +6 -0
- package/dist/geometry/indexed.d.ts.map +1 -0
- package/dist/geometry/preset-clip-paths-core.d.ts +20 -0
- package/dist/geometry/preset-clip-paths-core.d.ts.map +1 -0
- package/dist/geometry/preset-clip-paths-extended.d.ts +19 -0
- package/dist/geometry/preset-clip-paths-extended.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-action-buttons.d.ts +14 -0
- package/dist/geometry/preset-connection-sites-action-buttons.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-arrows-curved.d.ts +12 -0
- package/dist/geometry/preset-connection-sites-arrows-curved.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-arrows-misc.d.ts +13 -0
- package/dist/geometry/preset-connection-sites-arrows-misc.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-arrows.d.ts +13 -0
- package/dist/geometry/preset-connection-sites-arrows.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-basic-a.d.ts +12 -0
- package/dist/geometry/preset-connection-sites-basic-a.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-basic-b.d.ts +12 -0
- package/dist/geometry/preset-connection-sites-basic-b.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-braces.d.ts +12 -0
- package/dist/geometry/preset-connection-sites-braces.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-callouts-arrow.d.ts +14 -0
- package/dist/geometry/preset-connection-sites-callouts-arrow.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-callouts-basic.d.ts +12 -0
- package/dist/geometry/preset-connection-sites-callouts-basic.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-circular-arrow.d.ts +14 -0
- package/dist/geometry/preset-connection-sites-circular-arrow.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-flowchart.d.ts +19 -0
- package/dist/geometry/preset-connection-sites-flowchart.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-gear9.d.ts +12 -0
- package/dist/geometry/preset-connection-sites-gear9.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-left-circular-arrow.d.ts +12 -0
- package/dist/geometry/preset-connection-sites-left-circular-arrow.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-left-right-circular-arrow.d.ts +13 -0
- package/dist/geometry/preset-connection-sites-left-right-circular-arrow.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-math.d.ts +12 -0
- package/dist/geometry/preset-connection-sites-math.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-misc.d.ts +14 -0
- package/dist/geometry/preset-connection-sites-misc.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-polygons.d.ts +12 -0
- package/dist/geometry/preset-connection-sites-polygons.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-quads.d.ts +14 -0
- package/dist/geometry/preset-connection-sites-quads.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-rects.d.ts +14 -0
- package/dist/geometry/preset-connection-sites-rects.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-ribbons.d.ts +12 -0
- package/dist/geometry/preset-connection-sites-ribbons.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-stars.d.ts +13 -0
- package/dist/geometry/preset-connection-sites-stars.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-table.d.ts +23 -0
- package/dist/geometry/preset-connection-sites-table.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-tabs.d.ts +11 -0
- package/dist/geometry/preset-connection-sites-tabs.d.ts.map +1 -0
- package/dist/geometry/preset-connection-sites-types.d.ts +52 -0
- package/dist/geometry/preset-connection-sites-types.d.ts.map +1 -0
- package/dist/geometry/preset-geometry-names.d.ts +53 -0
- package/dist/geometry/preset-geometry-names.d.ts.map +1 -0
- package/dist/geometry/preset-shape-clip-paths.d.ts +13 -0
- package/dist/geometry/preset-shape-clip-paths.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-action-buttons.d.ts +45 -0
- package/dist/geometry/preset-shape-definitions-action-buttons.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-arrow-callouts.d.ts +55 -0
- package/dist/geometry/preset-shape-definitions-arrow-callouts.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-arrows-refined.d.ts +45 -0
- package/dist/geometry/preset-shape-definitions-arrows-refined.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-arrows.d.ts +52 -0
- package/dist/geometry/preset-shape-definitions-arrows.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-chart-marks.d.ts +23 -0
- package/dist/geometry/preset-shape-definitions-chart-marks.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-cloud-callout.d.ts +28 -0
- package/dist/geometry/preset-shape-definitions-cloud-callout.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-connectors-brackets.d.ts +37 -0
- package/dist/geometry/preset-shape-definitions-connectors-brackets.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-curved-arrows-connectors.d.ts +43 -0
- package/dist/geometry/preset-shape-definitions-curved-arrows-connectors.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-curved-arrows-exact.d.ts +30 -0
- package/dist/geometry/preset-shape-definitions-curved-arrows-exact.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-flowchart.d.ts +29 -0
- package/dist/geometry/preset-shape-definitions-flowchart.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-gear6.d.ts +38 -0
- package/dist/geometry/preset-shape-definitions-gear6.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-gear9.d.ts +24 -0
- package/dist/geometry/preset-shape-definitions-gear9.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-misc.d.ts +38 -0
- package/dist/geometry/preset-shape-definitions-misc.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-rects-snips.d.ts +28 -0
- package/dist/geometry/preset-shape-definitions-rects-snips.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-scrolls-accent-callouts.d.ts +45 -0
- package/dist/geometry/preset-shape-definitions-scrolls-accent-callouts.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-table.d.ts +121 -0
- package/dist/geometry/preset-shape-definitions-table.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions-tabs-decorations.d.ts +48 -0
- package/dist/geometry/preset-shape-definitions-tabs-decorations.d.ts.map +1 -0
- package/dist/geometry/preset-shape-definitions.d.ts +28 -0
- package/dist/geometry/preset-shape-definitions.d.ts.map +1 -0
- package/dist/geometry/preset-shape-paths.d.ts +13 -0
- package/dist/geometry/preset-shape-paths.d.ts.map +1 -0
- package/dist/geometry/preset-shape-types.d.ts +33 -0
- package/dist/geometry/preset-shape-types.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-action-buttons.d.ts +13 -0
- package/dist/geometry/preset-text-rect-action-buttons.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-arrows.d.ts +3 -0
- package/dist/geometry/preset-text-rect-arrows.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-braces.d.ts +3 -0
- package/dist/geometry/preset-text-rect-braces.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-callouts.d.ts +3 -0
- package/dist/geometry/preset-text-rect-callouts.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-circular-arrows.d.ts +3 -0
- package/dist/geometry/preset-text-rect-circular-arrows.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-flowchart.d.ts +3 -0
- package/dist/geometry/preset-text-rect-flowchart.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-misc-a.d.ts +3 -0
- package/dist/geometry/preset-text-rect-misc-a.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-misc-b.d.ts +3 -0
- package/dist/geometry/preset-text-rect-misc-b.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-polygons.d.ts +3 -0
- package/dist/geometry/preset-text-rect-polygons.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-quads.d.ts +3 -0
- package/dist/geometry/preset-text-rect-quads.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-ribbons.d.ts +3 -0
- package/dist/geometry/preset-text-rect-ribbons.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-stars.d.ts +3 -0
- package/dist/geometry/preset-text-rect-stars.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-table.d.ts +20 -0
- package/dist/geometry/preset-text-rect-table.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-tabs.d.ts +3 -0
- package/dist/geometry/preset-text-rect-tabs.d.ts.map +1 -0
- package/dist/geometry/preset-text-rect-types.d.ts +46 -0
- package/dist/geometry/preset-text-rect-types.d.ts.map +1 -0
- package/dist/geometry/shape-boolean-clipping.d.ts +70 -0
- package/dist/geometry/shape-boolean-clipping.d.ts.map +1 -0
- package/dist/geometry/shape-boolean-ops.d.ts +142 -0
- package/dist/geometry/shape-boolean-ops.d.ts.map +1 -0
- package/dist/geometry/shape-boolean-svg.d.ts +31 -0
- package/dist/geometry/shape-boolean-svg.d.ts.map +1 -0
- package/dist/geometry/shape-boolean-types.d.ts +91 -0
- package/dist/geometry/shape-boolean-types.d.ts.map +1 -0
- package/dist/geometry/shape-boolean-union.d.ts +79 -0
- package/dist/geometry/shape-boolean-union.d.ts.map +1 -0
- package/dist/geometry/shape-boolean.d.ts +22 -0
- package/dist/geometry/shape-boolean.d.ts.map +1 -0
- package/dist/geometry/shape-definitions-extended.d.ts +18 -0
- package/dist/geometry/shape-definitions-extended.d.ts.map +1 -0
- package/dist/geometry/shape-definitions-primary.d.ts +19 -0
- package/dist/geometry/shape-definitions-primary.d.ts.map +1 -0
- package/dist/index.cjs +16618 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +16611 -0
- package/dist/opc/content-types.d.ts +14 -0
- package/dist/opc/content-types.d.ts.map +1 -0
- package/dist/opc/index.cjs +228 -0
- package/dist/opc/index.d.ts +6 -0
- package/dist/opc/index.d.ts.map +1 -0
- package/dist/opc/index.mjs +212 -0
- package/dist/opc/package.d.ts +14 -0
- package/dist/opc/package.d.ts.map +1 -0
- package/dist/opc/relationship-types.d.ts +34 -0
- package/dist/opc/relationship-types.d.ts.map +1 -0
- package/dist/opc/relationships.d.ts +29 -0
- package/dist/opc/relationships.d.ts.map +1 -0
- package/dist/opc/safe-href.d.ts +3 -0
- package/dist/opc/safe-href.d.ts.map +1 -0
- package/dist/pptx/chunks/index-CojJtI77.d.ts +9627 -0
- package/dist/pptx/chunks/index-CojJtI77.d.ts.map +1 -0
- package/dist/pptx/chunks/signature-inspection-status-Bh2oap7B.d.ts +220 -0
- package/dist/pptx/chunks/signature-inspection-status-Bh2oap7B.d.ts.map +1 -0
- package/dist/pptx/chunks/text-operations-IlJiffp7.d.ts +11122 -0
- package/dist/pptx/chunks/text-operations-IlJiffp7.d.ts.map +1 -0
- package/dist/pptx/cli/index.cjs +138457 -0
- package/dist/pptx/cli/index.d.ts +139 -0
- package/dist/pptx/cli/index.d.ts.map +1 -0
- package/dist/pptx/cli/index.mjs +138424 -0
- package/dist/pptx/converter/index.cjs +32084 -0
- package/dist/pptx/converter/index.d.ts +2 -0
- package/dist/pptx/converter/index.mjs +32060 -0
- package/dist/pptx/index.cjs +172307 -0
- package/dist/pptx/index.d.ts +9692 -0
- package/dist/pptx/index.d.ts.map +1 -0
- package/dist/pptx/index.mjs +171623 -0
- package/dist/pptx/signature-node/index.cjs +1299 -0
- package/dist/pptx/signature-node/index.d.ts +172 -0
- package/dist/pptx/signature-node/index.d.ts.map +1 -0
- package/dist/pptx/signature-node/index.mjs +1236 -0
- package/dist/units/constants.d.ts +13 -0
- package/dist/units/constants.d.ts.map +1 -0
- package/dist/units/index.cjs +76 -0
- package/dist/units/index.d.ts +3 -0
- package/dist/units/index.d.ts.map +1 -0
- package/dist/units/index.mjs +45 -0
- package/dist/units/units.d.ts +52 -0
- package/dist/units/units.d.ts.map +1 -0
- package/dist/xml/index.cjs +98 -0
- package/dist/xml/index.d.ts +3 -0
- package/dist/xml/index.d.ts.map +1 -0
- package/dist/xml/index.mjs +85 -0
- package/dist/xml/namespaces.d.ts +47 -0
- package/dist/xml/namespaces.d.ts.map +1 -0
- package/dist/xml/xml.d.ts +31 -0
- package/dist/xml/xml.d.ts.map +1 -0
- package/package.json +192 -0
|
@@ -0,0 +1,1161 @@
|
|
|
1
|
+
import { DOMParser } from '@xmldom/xmldom';
|
|
2
|
+
|
|
3
|
+
// src/diagram/attributes.ts
|
|
4
|
+
var optionalString = (value) => {
|
|
5
|
+
const text = (value ?? "").trim();
|
|
6
|
+
return text.length > 0 ? text : void 0;
|
|
7
|
+
};
|
|
8
|
+
var optionalInteger = (value) => {
|
|
9
|
+
const parsed = Number.parseInt(value ?? "", 10);
|
|
10
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
11
|
+
};
|
|
12
|
+
function optionalBoolean(value) {
|
|
13
|
+
const text = (value ?? "").trim();
|
|
14
|
+
if (text.length === 0) return void 0;
|
|
15
|
+
return text === "1" || text.toLowerCase() === "true";
|
|
16
|
+
}
|
|
17
|
+
function optionalScaled(value, divisor) {
|
|
18
|
+
const text = (value ?? "").trim();
|
|
19
|
+
if (text.length === 0) return void 0;
|
|
20
|
+
const parsed = Number.parseFloat(text);
|
|
21
|
+
return Number.isFinite(parsed) ? parsed / divisor : void 0;
|
|
22
|
+
}
|
|
23
|
+
function parseConnectionAttributes(get) {
|
|
24
|
+
const sourceId = optionalString(get("srcId"));
|
|
25
|
+
const destId = optionalString(get("destId"));
|
|
26
|
+
if (!sourceId || !destId) return void 0;
|
|
27
|
+
const parsed = { sourceId, destId };
|
|
28
|
+
const modelId = optionalString(get("modelId"));
|
|
29
|
+
const type = optionalString(get("type"));
|
|
30
|
+
const srcOrd = optionalInteger(get("srcOrd"));
|
|
31
|
+
const destOrd = optionalInteger(get("destOrd"));
|
|
32
|
+
const parentTransitionId = optionalString(get("parTransId"));
|
|
33
|
+
const siblingTransitionId = optionalString(get("sibTransId"));
|
|
34
|
+
const presentationId = optionalString(get("presId"));
|
|
35
|
+
if (modelId !== void 0) parsed.modelId = modelId;
|
|
36
|
+
if (type !== void 0) parsed.type = type;
|
|
37
|
+
if (srcOrd !== void 0) parsed.srcOrd = srcOrd;
|
|
38
|
+
if (destOrd !== void 0) parsed.destOrd = destOrd;
|
|
39
|
+
if (parentTransitionId !== void 0) parsed.parentTransitionId = parentTransitionId;
|
|
40
|
+
if (siblingTransitionId !== void 0) parsed.siblingTransitionId = siblingTransitionId;
|
|
41
|
+
if (presentationId !== void 0) parsed.presentationId = presentationId;
|
|
42
|
+
return parsed;
|
|
43
|
+
}
|
|
44
|
+
var CUSTOM_LAYOUT_ATTRIBUTES = [
|
|
45
|
+
["angle", "custAng", "angle"],
|
|
46
|
+
["scaleX", "custScaleX", "ratio"],
|
|
47
|
+
["scaleY", "custScaleY", "ratio"],
|
|
48
|
+
["sizeX", "custSzX", "ratio"],
|
|
49
|
+
["sizeY", "custSzY", "ratio"],
|
|
50
|
+
["linearFactorX", "custLinFactX", "ratio"],
|
|
51
|
+
["linearFactorY", "custLinFactY", "ratio"],
|
|
52
|
+
["linearFactorNeighborX", "custLinFactNeighborX", "ratio"],
|
|
53
|
+
["linearFactorNeighborY", "custLinFactNeighborY", "ratio"],
|
|
54
|
+
["radialScaleRadius", "custRadScaleRad", "ratio"],
|
|
55
|
+
["radialScaleIncrement", "custRadScaleInc", "ratio"],
|
|
56
|
+
["flipHorizontal", "custFlipHor", "flag"],
|
|
57
|
+
["flipVertical", "custFlipVert", "flag"],
|
|
58
|
+
["hasCustomTransform", "custT", "flag"]
|
|
59
|
+
];
|
|
60
|
+
function parseCustomLayoutAttributes(get) {
|
|
61
|
+
const custom = {};
|
|
62
|
+
for (const [key, attribute, kind] of CUSTOM_LAYOUT_ATTRIBUTES) {
|
|
63
|
+
const raw = get(attribute);
|
|
64
|
+
const value = kind === "flag" ? optionalBoolean(raw) : optionalScaled(raw, kind === "angle" ? 6e4 : 1e5);
|
|
65
|
+
if (value !== void 0) custom[key] = value;
|
|
66
|
+
}
|
|
67
|
+
return Object.keys(custom).length > 0 ? custom : void 0;
|
|
68
|
+
}
|
|
69
|
+
var RELATIONSHIP_ATTRIBUTES = [
|
|
70
|
+
["dataRelId", "dm"],
|
|
71
|
+
["layoutRelId", "lo"],
|
|
72
|
+
["styleRelId", "qs"],
|
|
73
|
+
["colorsRelId", "cs"]
|
|
74
|
+
];
|
|
75
|
+
function parseRelationshipIdAttributes(get) {
|
|
76
|
+
const result = {};
|
|
77
|
+
for (const [property, attribute] of RELATIONSHIP_ATTRIBUTES) {
|
|
78
|
+
const value = optionalString(get(attribute));
|
|
79
|
+
if (value) result[property] = value;
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// src/diagram/layout-category.ts
|
|
85
|
+
var CATEGORY_FAMILY = {
|
|
86
|
+
list: "list",
|
|
87
|
+
process: "process",
|
|
88
|
+
cycle: "cycle",
|
|
89
|
+
hierarchy: "hierarchy",
|
|
90
|
+
relationship: "relationship",
|
|
91
|
+
matrix: "matrix",
|
|
92
|
+
pyramid: "pyramid"
|
|
93
|
+
};
|
|
94
|
+
var UNIQUE_ID_KEYWORDS = [
|
|
95
|
+
[/hier|org/u, "hierarchy"],
|
|
96
|
+
[/cycle|radial|circular/u, "cycle"],
|
|
97
|
+
[/process|flow|chevron|arrow|equation/u, "process"],
|
|
98
|
+
[/timeline/u, "timeline"],
|
|
99
|
+
[/matrix|grid/u, "matrix"],
|
|
100
|
+
[/pyramid/u, "pyramid"],
|
|
101
|
+
[/venn/u, "venn"],
|
|
102
|
+
[/funnel/u, "funnel"],
|
|
103
|
+
[/gear/u, "gear"],
|
|
104
|
+
[/target/u, "target"],
|
|
105
|
+
[/list/u, "list"]
|
|
106
|
+
];
|
|
107
|
+
function resolveDiagramLayoutCategory(uniqueId, categories) {
|
|
108
|
+
for (const category of categories) {
|
|
109
|
+
const family = CATEGORY_FAMILY[category.trim().toLowerCase()];
|
|
110
|
+
if (family) return family;
|
|
111
|
+
}
|
|
112
|
+
const lowerId = uniqueId.toLowerCase();
|
|
113
|
+
if (lowerId.length > 0) {
|
|
114
|
+
for (const [pattern, family] of UNIQUE_ID_KEYWORDS) if (pattern.test(lowerId)) return family;
|
|
115
|
+
}
|
|
116
|
+
return void 0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// src/opc/relationship-types.ts
|
|
120
|
+
var BASE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
|
|
121
|
+
var RELATIONSHIP_TYPES = {
|
|
122
|
+
diagramData: `${BASE}/diagramData`,
|
|
123
|
+
diagramLayout: `${BASE}/diagramLayout`,
|
|
124
|
+
diagramQuickStyle: `${BASE}/diagramQuickStyle`,
|
|
125
|
+
diagramColors: `${BASE}/diagramColors`,
|
|
126
|
+
diagramDrawing: "http://schemas.microsoft.com/office/2007/relationships/diagramDrawing"};
|
|
127
|
+
|
|
128
|
+
// src/xml/namespaces.ts
|
|
129
|
+
var NS = {
|
|
130
|
+
/** DrawingML main. */
|
|
131
|
+
a: "http://schemas.openxmlformats.org/drawingml/2006/main",
|
|
132
|
+
/** DrawingML diagram (SmartArt) main. */
|
|
133
|
+
dgm: "http://schemas.openxmlformats.org/drawingml/2006/diagram",
|
|
134
|
+
/** Office 2007+ diagram drawing (`dsp`). */
|
|
135
|
+
dsp: "http://schemas.microsoft.com/office/drawing/2008/diagram",
|
|
136
|
+
/** Relationships (`r:id`, `r:embed`). */
|
|
137
|
+
r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships"};
|
|
138
|
+
function parseXml(xml, options = {}) {
|
|
139
|
+
const label = options.label ?? "OOXML";
|
|
140
|
+
if (/<!DOCTYPE|<!ENTITY/i.test(xml))
|
|
141
|
+
throw new Error(`${label} XML with DTD or entity declarations is not supported`);
|
|
142
|
+
let parseError = "";
|
|
143
|
+
let parsed;
|
|
144
|
+
try {
|
|
145
|
+
parsed = new DOMParser({
|
|
146
|
+
onError: (level, message) => {
|
|
147
|
+
if (level !== "warning") parseError = message;
|
|
148
|
+
}
|
|
149
|
+
}).parseFromString(xml, "application/xml");
|
|
150
|
+
} catch (error) {
|
|
151
|
+
throw new Error(
|
|
152
|
+
`Invalid ${label} XML: ${error instanceof Error ? error.message : String(error)}`
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
if (parseError || !parsed.documentElement)
|
|
156
|
+
throw new Error(`Invalid ${label} XML: ${parseError || "missing root element"}`);
|
|
157
|
+
return parsed;
|
|
158
|
+
}
|
|
159
|
+
var isElement = (node) => node.nodeType === 1;
|
|
160
|
+
var elements = (parent) => Array.from(parent.childNodes).filter(isElement);
|
|
161
|
+
function named(element, local, ns, lenient = true) {
|
|
162
|
+
if (!element || element.localName !== local) return false;
|
|
163
|
+
return element.namespaceURI === ns || lenient && !element.namespaceURI;
|
|
164
|
+
}
|
|
165
|
+
var children = (parent, local, ns, lenient = true) => elements(parent).filter((element) => named(element, local, ns, lenient));
|
|
166
|
+
var first = (parent, local, ns, lenient = true) => parent ? children(parent, local, ns, lenient)[0] : void 0;
|
|
167
|
+
|
|
168
|
+
// src/diagram/relationships.ts
|
|
169
|
+
function diagramRelationshipsPart(partPath) {
|
|
170
|
+
const dir = partPath.replace(/\/[^/]+$/u, "");
|
|
171
|
+
const file = partPath.split("/").pop() ?? "";
|
|
172
|
+
return `${dir}/_rels/${file}.rels`;
|
|
173
|
+
}
|
|
174
|
+
async function resolveDiagramDrawingPart(hostPart, dataRelId, drawingExtensionRelId, host) {
|
|
175
|
+
if (dataRelId.length === 0) return void 0;
|
|
176
|
+
const hostRels = host.hostRelationships(hostPart);
|
|
177
|
+
const declared = drawingExtensionRelId ? hostRels?.get(drawingExtensionRelId) : void 0;
|
|
178
|
+
if (declared) return { relId: drawingExtensionRelId, path: host.resolvePath(hostPart, declared) };
|
|
179
|
+
const inferred = [...hostRels?.entries() ?? []].find(
|
|
180
|
+
([, target2]) => /(?:^|\/)diagrams\/drawing\d+\.xml$/u.test(target2.replaceAll("\\", "/"))
|
|
181
|
+
);
|
|
182
|
+
if (inferred) return { relId: inferred[0], path: host.resolvePath(hostPart, inferred[1]) };
|
|
183
|
+
const dataTarget = hostRels?.get(dataRelId);
|
|
184
|
+
if (!dataTarget) return void 0;
|
|
185
|
+
const dataPath = host.resolvePath(hostPart, dataTarget);
|
|
186
|
+
const entries = await host.readRelationshipEntries(diagramRelationshipsPart(dataPath));
|
|
187
|
+
if (!entries) return void 0;
|
|
188
|
+
const drawing = entries.find(
|
|
189
|
+
(entry) => (!drawingExtensionRelId || entry.id.trim() === drawingExtensionRelId) && entry.type.endsWith("/diagramDrawing")
|
|
190
|
+
);
|
|
191
|
+
const id = drawing?.id.trim() ?? "";
|
|
192
|
+
const target = drawing?.target.trim() ?? "";
|
|
193
|
+
if (id.length === 0 || target.length === 0) return void 0;
|
|
194
|
+
return { relId: id, path: host.resolvePath(dataPath, target) };
|
|
195
|
+
}
|
|
196
|
+
var DIAGRAM_RELATIONSHIP_TYPES = {
|
|
197
|
+
data: RELATIONSHIP_TYPES.diagramData,
|
|
198
|
+
layout: RELATIONSHIP_TYPES.diagramLayout,
|
|
199
|
+
quickStyle: RELATIONSHIP_TYPES.diagramQuickStyle,
|
|
200
|
+
colors: RELATIONSHIP_TYPES.diagramColors,
|
|
201
|
+
drawing: RELATIONSHIP_TYPES.diagramDrawing
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// src/diagram/dom.ts
|
|
205
|
+
function attributeReader(element) {
|
|
206
|
+
return (name) => {
|
|
207
|
+
if (!element) return void 0;
|
|
208
|
+
const direct = element.getAttribute(name);
|
|
209
|
+
if (direct !== null) return direct;
|
|
210
|
+
const attributes = element.attributes;
|
|
211
|
+
for (let index = 0; index < attributes.length; index++) {
|
|
212
|
+
const candidate = attributes.item(index);
|
|
213
|
+
if (candidate && candidate.localName === name) return candidate.value;
|
|
214
|
+
}
|
|
215
|
+
return void 0;
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function stringAttribute(element, name) {
|
|
219
|
+
const value = attributeReader(element)(name)?.trim();
|
|
220
|
+
return value ? value : void 0;
|
|
221
|
+
}
|
|
222
|
+
function integerAttribute(element, name) {
|
|
223
|
+
const parsed = Number.parseInt(attributeReader(element)(name) ?? "", 10);
|
|
224
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
225
|
+
}
|
|
226
|
+
function booleanAttribute(element, name) {
|
|
227
|
+
const value = attributeReader(element)(name)?.trim().toLowerCase();
|
|
228
|
+
if (value === "1" || value === "true") return true;
|
|
229
|
+
if (value === "0" || value === "false") return false;
|
|
230
|
+
return void 0;
|
|
231
|
+
}
|
|
232
|
+
function descendants(root, local) {
|
|
233
|
+
const result = [];
|
|
234
|
+
const visit = (node) => {
|
|
235
|
+
for (const child of Array.from(node.childNodes)) {
|
|
236
|
+
if (!isElement(child)) continue;
|
|
237
|
+
if (child.localName === local) result.push(child);
|
|
238
|
+
visit(child);
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
visit(root);
|
|
242
|
+
return result;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// src/diagram/data-model.ts
|
|
246
|
+
var TRANSITION_TYPES = /* @__PURE__ */ new Set(["parTrans", "sibTrans"]);
|
|
247
|
+
var STRUCTURAL_TYPES = /* @__PURE__ */ new Set(["doc", "pres", "parTrans", "sibTrans"]);
|
|
248
|
+
function collectTransitionText(points, describe, text) {
|
|
249
|
+
const byId = /* @__PURE__ */ new Map();
|
|
250
|
+
for (const point of points) {
|
|
251
|
+
const { type, modelId } = describe(point);
|
|
252
|
+
if (!TRANSITION_TYPES.has((type ?? "").trim())) continue;
|
|
253
|
+
const id = (modelId ?? "").trim();
|
|
254
|
+
if (!id) continue;
|
|
255
|
+
const value = text(point).trim();
|
|
256
|
+
if (value.length > 0) byId.set(id, value);
|
|
257
|
+
}
|
|
258
|
+
return byId;
|
|
259
|
+
}
|
|
260
|
+
function connectionLabel(connection, transitionText) {
|
|
261
|
+
const parent = connection.parentTransitionId ? transitionText.get(connection.parentTransitionId) : void 0;
|
|
262
|
+
const sibling = connection.siblingTransitionId ? transitionText.get(connection.siblingTransitionId) : void 0;
|
|
263
|
+
return parent ?? sibling;
|
|
264
|
+
}
|
|
265
|
+
function textBodyParagraphs(body) {
|
|
266
|
+
if (!body) return [];
|
|
267
|
+
return children(body, "p", NS.a).map(
|
|
268
|
+
(paragraph) => descendants(paragraph, "t").map((run) => run.textContent ?? "").join("")
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
function parsePoint(element) {
|
|
272
|
+
const modelId = stringAttribute(element, "modelId");
|
|
273
|
+
if (!modelId) return void 0;
|
|
274
|
+
const paragraphs = textBodyParagraphs(first(element, "t", NS.dgm));
|
|
275
|
+
const prSet = first(element, "prSet", NS.dgm);
|
|
276
|
+
const point = {
|
|
277
|
+
modelId,
|
|
278
|
+
type: stringAttribute(element, "type") ?? "node",
|
|
279
|
+
paragraphs,
|
|
280
|
+
text: paragraphs.join("\n")
|
|
281
|
+
};
|
|
282
|
+
const optional = [
|
|
283
|
+
["connectionId", stringAttribute(element, "cxnId")],
|
|
284
|
+
["presAssocId", stringAttribute(prSet, "presAssocID")],
|
|
285
|
+
["presName", stringAttribute(prSet, "presName")],
|
|
286
|
+
["presStyleLabel", stringAttribute(prSet, "presStyleLbl")],
|
|
287
|
+
["presStyleIndex", integerAttribute(prSet, "presStyleIdx")],
|
|
288
|
+
["presStyleCount", integerAttribute(prSet, "presStyleCnt")],
|
|
289
|
+
["layoutTypeId", stringAttribute(prSet, "loTypeId")],
|
|
290
|
+
["layoutCategoryId", stringAttribute(prSet, "loCatId")],
|
|
291
|
+
["quickStyleTypeId", stringAttribute(prSet, "qsTypeId")],
|
|
292
|
+
["colorsTypeId", stringAttribute(prSet, "csTypeId")]
|
|
293
|
+
];
|
|
294
|
+
for (const [key, value] of optional)
|
|
295
|
+
if (value !== void 0) point[key] = value;
|
|
296
|
+
const customLayout = prSet ? parseCustomLayoutAttributes(attributeReader(prSet)) : void 0;
|
|
297
|
+
if (customLayout) point.customLayout = customLayout;
|
|
298
|
+
return point;
|
|
299
|
+
}
|
|
300
|
+
function parseDiagramDataModel(source, part) {
|
|
301
|
+
const root = (typeof source === "string" ? parseXml(source, { label: "DiagramML" }) : source).documentElement;
|
|
302
|
+
const issues = [];
|
|
303
|
+
const report = (code, message) => issues.push({ code, message, ...part ? { part } : {} });
|
|
304
|
+
const points = [];
|
|
305
|
+
const ids = /* @__PURE__ */ new Set();
|
|
306
|
+
for (const element of children(first(root, "ptLst", NS.dgm) ?? root, "pt", NS.dgm)) {
|
|
307
|
+
const point = parsePoint(element);
|
|
308
|
+
if (!point) {
|
|
309
|
+
report("POINT_ID_REQUIRED", "dgm:pt requires modelId.");
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
312
|
+
if (ids.has(point.modelId))
|
|
313
|
+
report("POINT_ID_DUPLICATE", `Duplicate dgm:pt modelId: ${point.modelId}.`);
|
|
314
|
+
ids.add(point.modelId);
|
|
315
|
+
points.push(point);
|
|
316
|
+
}
|
|
317
|
+
const transitionText = collectTransitionText(
|
|
318
|
+
points,
|
|
319
|
+
(point) => ({ type: point.type, modelId: point.modelId }),
|
|
320
|
+
(point) => point.text
|
|
321
|
+
);
|
|
322
|
+
const connections = [];
|
|
323
|
+
const parentById = /* @__PURE__ */ new Map();
|
|
324
|
+
const connectionIds = /* @__PURE__ */ new Set();
|
|
325
|
+
for (const element of children(first(root, "cxnLst", NS.dgm) ?? root, "cxn", NS.dgm)) {
|
|
326
|
+
const connection = parseConnectionAttributes(attributeReader(element));
|
|
327
|
+
if (!connection) {
|
|
328
|
+
report("CONNECTION_ATTRIBUTE_REQUIRED", "dgm:cxn requires srcId and destId.");
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
if (connection.modelId && connectionIds.has(connection.modelId))
|
|
332
|
+
report("CONNECTION_ID_DUPLICATE", `Duplicate dgm:cxn modelId: ${connection.modelId}.`);
|
|
333
|
+
if (connection.modelId) connectionIds.add(connection.modelId);
|
|
334
|
+
for (const [attribute, id] of [
|
|
335
|
+
["srcId", connection.sourceId],
|
|
336
|
+
["destId", connection.destId]
|
|
337
|
+
])
|
|
338
|
+
if (!ids.has(id))
|
|
339
|
+
report(
|
|
340
|
+
"CONNECTION_ENDPOINT_MISSING",
|
|
341
|
+
`dgm:cxn ${attribute} references missing point: ${id}.`
|
|
342
|
+
);
|
|
343
|
+
const label = connectionLabel(connection, transitionText);
|
|
344
|
+
connections.push(label ? { ...connection, label } : connection);
|
|
345
|
+
if ((!connection.type || connection.type === "parOf") && !parentById.has(connection.destId))
|
|
346
|
+
parentById.set(connection.destId, connection.sourceId);
|
|
347
|
+
}
|
|
348
|
+
const ext = descendants(root, "dataModelExt")[0];
|
|
349
|
+
const drawingRelId = stringAttribute(ext, "relId");
|
|
350
|
+
return {
|
|
351
|
+
points,
|
|
352
|
+
connections,
|
|
353
|
+
nodes: points.filter((point) => !STRUCTURAL_TYPES.has(point.type)),
|
|
354
|
+
parentById,
|
|
355
|
+
...drawingRelId ? { drawingRelId } : {},
|
|
356
|
+
issues
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// src/color/color-primitives.ts
|
|
361
|
+
function clampUnitInterval(value) {
|
|
362
|
+
return Math.min(1, Math.max(0, value));
|
|
363
|
+
}
|
|
364
|
+
function hexToRgbChannels(color) {
|
|
365
|
+
const normalized = color.replace("#", "");
|
|
366
|
+
if (!/^[0-9a-fA-F]{6}$/.test(normalized)) {
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
return {
|
|
370
|
+
r: Number.parseInt(normalized.slice(0, 2), 16),
|
|
371
|
+
g: Number.parseInt(normalized.slice(2, 4), 16),
|
|
372
|
+
b: Number.parseInt(normalized.slice(4, 6), 16)
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
function percentDivisorFor(text) {
|
|
376
|
+
return text.endsWith("%") ? 100 : 1e5;
|
|
377
|
+
}
|
|
378
|
+
function parseOoxmlPercent(value) {
|
|
379
|
+
const text = String(value ?? "").trim();
|
|
380
|
+
const divisor = percentDivisorFor(text);
|
|
381
|
+
const magnitude = Number.parseFloat(divisor === 100 ? text.slice(0, -1) : text);
|
|
382
|
+
if (!Number.isFinite(magnitude)) {
|
|
383
|
+
return void 0;
|
|
384
|
+
}
|
|
385
|
+
return magnitude / divisor;
|
|
386
|
+
}
|
|
387
|
+
function parseDrawingPercent(value) {
|
|
388
|
+
const parsed = parseOoxmlPercent(value);
|
|
389
|
+
return parsed === void 0 ? void 0 : clampUnitInterval(parsed);
|
|
390
|
+
}
|
|
391
|
+
function scrgbLinearToSrgb8(linear) {
|
|
392
|
+
const l = Math.min(1, Math.max(0, linear));
|
|
393
|
+
const companded = l <= 31308e-7 ? 12.92 * l : 1.055 * l ** (1 / 2.4) - 0.055;
|
|
394
|
+
return Math.min(255, Math.max(0, Math.round(companded * 255)));
|
|
395
|
+
}
|
|
396
|
+
function toHex(value) {
|
|
397
|
+
return Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
|
|
398
|
+
}
|
|
399
|
+
function rgbToHsl(r, g, b) {
|
|
400
|
+
const rN = r / 255;
|
|
401
|
+
const gN = g / 255;
|
|
402
|
+
const bN = b / 255;
|
|
403
|
+
const cMax = Math.max(rN, gN, bN);
|
|
404
|
+
const cMin = Math.min(rN, gN, bN);
|
|
405
|
+
const delta = cMax - cMin;
|
|
406
|
+
const l = (cMax + cMin) / 2;
|
|
407
|
+
let s = 0;
|
|
408
|
+
if (delta !== 0) {
|
|
409
|
+
s = delta / (1 - Math.abs(2 * l - 1));
|
|
410
|
+
}
|
|
411
|
+
let h = 0;
|
|
412
|
+
if (delta !== 0) {
|
|
413
|
+
if (cMax === rN) {
|
|
414
|
+
h = 60 * ((gN - bN) / delta % 6);
|
|
415
|
+
} else if (cMax === gN) {
|
|
416
|
+
h = 60 * ((bN - rN) / delta + 2);
|
|
417
|
+
} else {
|
|
418
|
+
h = 60 * ((rN - gN) / delta + 4);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
if (h < 0) {
|
|
422
|
+
h += 360;
|
|
423
|
+
}
|
|
424
|
+
return { h, s: clampUnitInterval(s), l: clampUnitInterval(l) };
|
|
425
|
+
}
|
|
426
|
+
function hslToRgb(h, s, l) {
|
|
427
|
+
const sC = clampUnitInterval(s);
|
|
428
|
+
const lC = clampUnitInterval(l);
|
|
429
|
+
const hN = (h % 360 + 360) % 360;
|
|
430
|
+
const c = (1 - Math.abs(2 * lC - 1)) * sC;
|
|
431
|
+
const x = c * (1 - Math.abs(hN / 60 % 2 - 1));
|
|
432
|
+
const m = lC - c / 2;
|
|
433
|
+
let rP = 0;
|
|
434
|
+
let gP = 0;
|
|
435
|
+
let bP = 0;
|
|
436
|
+
if (hN < 60) {
|
|
437
|
+
rP = c;
|
|
438
|
+
gP = x;
|
|
439
|
+
bP = 0;
|
|
440
|
+
} else if (hN < 120) {
|
|
441
|
+
rP = x;
|
|
442
|
+
gP = c;
|
|
443
|
+
bP = 0;
|
|
444
|
+
} else if (hN < 180) {
|
|
445
|
+
rP = 0;
|
|
446
|
+
gP = c;
|
|
447
|
+
bP = x;
|
|
448
|
+
} else if (hN < 240) {
|
|
449
|
+
rP = 0;
|
|
450
|
+
gP = x;
|
|
451
|
+
bP = c;
|
|
452
|
+
} else if (hN < 300) {
|
|
453
|
+
rP = x;
|
|
454
|
+
gP = 0;
|
|
455
|
+
bP = c;
|
|
456
|
+
} else {
|
|
457
|
+
rP = c;
|
|
458
|
+
gP = 0;
|
|
459
|
+
bP = x;
|
|
460
|
+
}
|
|
461
|
+
return {
|
|
462
|
+
r: Math.round((rP + m) * 255),
|
|
463
|
+
g: Math.round((gP + m) * 255),
|
|
464
|
+
b: Math.round((bP + m) * 255)
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
function parseDrawingFraction(value) {
|
|
468
|
+
return parseOoxmlPercent(value);
|
|
469
|
+
}
|
|
470
|
+
function parseDrawingHueDegrees(value) {
|
|
471
|
+
const parsed = Number.parseFloat(String(value ?? "").trim());
|
|
472
|
+
if (!Number.isFinite(parsed)) {
|
|
473
|
+
return void 0;
|
|
474
|
+
}
|
|
475
|
+
return parsed / 6e4;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// src/color/color-linear.ts
|
|
479
|
+
function srgb255ToLinear(channel) {
|
|
480
|
+
const c = clampUnitInterval(channel / 255);
|
|
481
|
+
return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
482
|
+
}
|
|
483
|
+
function linearToSrgb255(linear) {
|
|
484
|
+
const c = clampUnitInterval(linear);
|
|
485
|
+
return 255 * (c <= 31308e-7 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
// src/diagram/drawing-color.ts
|
|
489
|
+
var COLOR_ELEMENTS = {
|
|
490
|
+
srgbClr: "srgb",
|
|
491
|
+
schemeClr: "scheme",
|
|
492
|
+
sysClr: "system",
|
|
493
|
+
prstClr: "preset",
|
|
494
|
+
scrgbClr: "scrgb",
|
|
495
|
+
hslClr: "hsl"
|
|
496
|
+
};
|
|
497
|
+
function colorValue(kind, element) {
|
|
498
|
+
const attribute = (name) => element.getAttribute(name) ?? "";
|
|
499
|
+
if (kind === "scrgb") return `${attribute("r")},${attribute("g")},${attribute("b")}`;
|
|
500
|
+
if (kind === "hsl") return `${attribute("hue")},${attribute("sat")},${attribute("lum")}`;
|
|
501
|
+
return attribute("val");
|
|
502
|
+
}
|
|
503
|
+
function parseDrawingColorIn(container) {
|
|
504
|
+
if (!container) return void 0;
|
|
505
|
+
for (const element of elements(container)) {
|
|
506
|
+
const kind = COLOR_ELEMENTS[element.localName];
|
|
507
|
+
if (!kind || element.namespaceURI && element.namespaceURI !== NS.a) continue;
|
|
508
|
+
return parseDrawingColor(element);
|
|
509
|
+
}
|
|
510
|
+
return void 0;
|
|
511
|
+
}
|
|
512
|
+
function parseDrawingColor(element) {
|
|
513
|
+
const kind = COLOR_ELEMENTS[element.localName];
|
|
514
|
+
if (!kind) return void 0;
|
|
515
|
+
const color = {
|
|
516
|
+
kind,
|
|
517
|
+
value: colorValue(kind, element),
|
|
518
|
+
transforms: elements(element).map((child) => ({
|
|
519
|
+
name: child.localName,
|
|
520
|
+
value: child.getAttribute("val") ?? ""
|
|
521
|
+
}))
|
|
522
|
+
};
|
|
523
|
+
const fallback = kind === "system" ? element.getAttribute("lastClr") : null;
|
|
524
|
+
if (fallback) color.fallback = fallback;
|
|
525
|
+
return color;
|
|
526
|
+
}
|
|
527
|
+
function parseDrawingColorList(container) {
|
|
528
|
+
if (!container) return [];
|
|
529
|
+
return elements(container).flatMap((element) => {
|
|
530
|
+
const color = parseDrawingColor(element);
|
|
531
|
+
return color ? [color] : [];
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
var PRESET_COLORS = {
|
|
535
|
+
black: "#000000",
|
|
536
|
+
white: "#FFFFFF",
|
|
537
|
+
red: "#FF0000",
|
|
538
|
+
green: "#008000",
|
|
539
|
+
blue: "#0000FF",
|
|
540
|
+
yellow: "#FFFF00",
|
|
541
|
+
gray: "#808080",
|
|
542
|
+
grey: "#808080"
|
|
543
|
+
};
|
|
544
|
+
function baseHex(color, theme) {
|
|
545
|
+
switch (color.kind) {
|
|
546
|
+
case "srgb":
|
|
547
|
+
return /^[0-9a-f]{6}$/i.test(color.value) ? `#${color.value.toUpperCase()}` : void 0;
|
|
548
|
+
case "scheme":
|
|
549
|
+
return theme?.scheme(color.value);
|
|
550
|
+
case "system":
|
|
551
|
+
return color.fallback && /^[0-9a-f]{6}$/i.test(color.fallback) ? `#${color.fallback.toUpperCase()}` : void 0;
|
|
552
|
+
case "preset":
|
|
553
|
+
return PRESET_COLORS[color.value];
|
|
554
|
+
case "scrgb": {
|
|
555
|
+
const [r, g, b] = color.value.split(",").map((part) => parseDrawingFraction(part));
|
|
556
|
+
if (r === void 0 || g === void 0 || b === void 0) return void 0;
|
|
557
|
+
return `#${toHex(scrgbLinearToSrgb8(r))}${toHex(scrgbLinearToSrgb8(g))}${toHex(scrgbLinearToSrgb8(b))}`;
|
|
558
|
+
}
|
|
559
|
+
case "hsl": {
|
|
560
|
+
const [h, s, l] = color.value.split(",");
|
|
561
|
+
const hue = parseDrawingHueDegrees(h);
|
|
562
|
+
const sat = parseDrawingFraction(s);
|
|
563
|
+
const lum = parseDrawingFraction(l);
|
|
564
|
+
if (hue === void 0 || sat === void 0 || lum === void 0) return void 0;
|
|
565
|
+
const { r, g, b } = hslToRgb(hue, sat, lum);
|
|
566
|
+
return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
var APPLIED = /* @__PURE__ */ new Set([
|
|
571
|
+
"alpha",
|
|
572
|
+
"alphaMod",
|
|
573
|
+
"alphaOff",
|
|
574
|
+
"comp",
|
|
575
|
+
"inv",
|
|
576
|
+
"gray",
|
|
577
|
+
"shade",
|
|
578
|
+
"tint",
|
|
579
|
+
"hue",
|
|
580
|
+
"hueMod",
|
|
581
|
+
"hueOff",
|
|
582
|
+
"sat",
|
|
583
|
+
"satMod",
|
|
584
|
+
"satOff",
|
|
585
|
+
"lum",
|
|
586
|
+
"lumMod",
|
|
587
|
+
"lumOff"
|
|
588
|
+
]);
|
|
589
|
+
function resolveDrawingColor(color, theme) {
|
|
590
|
+
const base = baseHex(color, theme);
|
|
591
|
+
const rgb = base ? hexToRgbChannels(base) : null;
|
|
592
|
+
if (!rgb) return void 0;
|
|
593
|
+
let { r, g, b } = rgb;
|
|
594
|
+
const find = (name) => color.transforms.find((entry) => entry.name === name)?.value;
|
|
595
|
+
const has = (name) => color.transforms.some((entry) => entry.name === name);
|
|
596
|
+
if (has("comp")) {
|
|
597
|
+
const hsl = rgbToHsl(r, g, b);
|
|
598
|
+
({ r, g, b } = hslToRgb((hsl.h + 180) % 360, hsl.s, hsl.l));
|
|
599
|
+
}
|
|
600
|
+
if (has("inv")) [r, g, b] = [255 - r, 255 - g, 255 - b];
|
|
601
|
+
if (has("gray")) r = g = b = Math.round(0.299 * r + 0.587 * g + 0.114 * b);
|
|
602
|
+
const shade = parseDrawingPercent(find("shade"));
|
|
603
|
+
if (shade !== void 0) {
|
|
604
|
+
r = linearToSrgb255(srgb255ToLinear(r) * shade);
|
|
605
|
+
g = linearToSrgb255(srgb255ToLinear(g) * shade);
|
|
606
|
+
b = linearToSrgb255(srgb255ToLinear(b) * shade);
|
|
607
|
+
}
|
|
608
|
+
const tint = parseDrawingPercent(find("tint"));
|
|
609
|
+
if (tint !== void 0) {
|
|
610
|
+
r = linearToSrgb255(1 - (1 - srgb255ToLinear(r)) * tint);
|
|
611
|
+
g = linearToSrgb255(1 - (1 - srgb255ToLinear(g)) * tint);
|
|
612
|
+
b = linearToSrgb255(1 - (1 - srgb255ToLinear(b)) * tint);
|
|
613
|
+
}
|
|
614
|
+
if (["hue", "hueMod", "hueOff", "sat", "satMod", "satOff", "lum", "lumMod", "lumOff"].some(has)) {
|
|
615
|
+
const hsl = rgbToHsl(r, g, b);
|
|
616
|
+
const wrap = (degrees) => (degrees % 360 + 360) % 360;
|
|
617
|
+
const hueAbs = parseDrawingHueDegrees(find("hue"));
|
|
618
|
+
if (hueAbs !== void 0) hsl.h = wrap(hueAbs);
|
|
619
|
+
const hueMod = parseDrawingFraction(find("hueMod"));
|
|
620
|
+
if (hueMod !== void 0) hsl.h = wrap(hsl.h * hueMod);
|
|
621
|
+
const hueOff = parseDrawingHueDegrees(find("hueOff"));
|
|
622
|
+
if (hueOff !== void 0) hsl.h = wrap(hsl.h + hueOff);
|
|
623
|
+
const satAbs = parseDrawingFraction(find("sat"));
|
|
624
|
+
if (satAbs !== void 0) hsl.s = clampUnitInterval(satAbs);
|
|
625
|
+
const satMod = parseDrawingFraction(find("satMod"));
|
|
626
|
+
if (satMod !== void 0) hsl.s = clampUnitInterval(hsl.s * satMod);
|
|
627
|
+
const satOff = parseDrawingFraction(find("satOff"));
|
|
628
|
+
if (satOff !== void 0) hsl.s = clampUnitInterval(hsl.s + satOff);
|
|
629
|
+
const lumAbs = parseDrawingFraction(find("lum"));
|
|
630
|
+
if (lumAbs !== void 0) hsl.l = clampUnitInterval(lumAbs);
|
|
631
|
+
const lumMod = parseDrawingFraction(find("lumMod"));
|
|
632
|
+
if (lumMod !== void 0) hsl.l = clampUnitInterval(hsl.l * lumMod);
|
|
633
|
+
const lumOff = parseDrawingFraction(find("lumOff"));
|
|
634
|
+
if (lumOff !== void 0) hsl.l = clampUnitInterval(hsl.l + lumOff);
|
|
635
|
+
({ r, g, b } = hslToRgb(hsl.h, hsl.s, hsl.l));
|
|
636
|
+
}
|
|
637
|
+
let alpha = parseDrawingPercent(find("alpha")) ?? 1;
|
|
638
|
+
const alphaMod = parseDrawingFraction(find("alphaMod"));
|
|
639
|
+
if (alphaMod !== void 0) alpha = clampUnitInterval(alpha * alphaMod);
|
|
640
|
+
const alphaOff = parseDrawingFraction(find("alphaOff"));
|
|
641
|
+
if (alphaOff !== void 0) alpha = clampUnitInterval(alpha + alphaOff);
|
|
642
|
+
return {
|
|
643
|
+
hex: `#${toHex(r)}${toHex(g)}${toHex(b)}`,
|
|
644
|
+
alpha,
|
|
645
|
+
unapplied: [...new Set(color.transforms.map((entry) => entry.name))].filter(
|
|
646
|
+
(name) => !APPLIED.has(name)
|
|
647
|
+
)
|
|
648
|
+
};
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
// src/diagram/definitions.ts
|
|
652
|
+
var rootOf = (source) => (typeof source === "string" ? parseXml(source, { label: "DiagramML" }) : source).documentElement;
|
|
653
|
+
function parseDefinitionHeader(root) {
|
|
654
|
+
const header = {
|
|
655
|
+
uniqueId: stringAttribute(root, "uniqueId") ?? "",
|
|
656
|
+
categories: children(first(root, "catLst", NS.dgm) ?? root, "cat", NS.dgm).flatMap((cat) => {
|
|
657
|
+
const type = stringAttribute(cat, "type");
|
|
658
|
+
const priority = Number.parseInt(cat.getAttribute("pri") ?? "", 10);
|
|
659
|
+
return type ? [{ type, ...Number.isFinite(priority) ? { priority } : {} }] : [];
|
|
660
|
+
})
|
|
661
|
+
};
|
|
662
|
+
const title = stringAttribute(first(root, "title", NS.dgm), "val");
|
|
663
|
+
const description = stringAttribute(first(root, "desc", NS.dgm), "val");
|
|
664
|
+
if (title) header.title = title;
|
|
665
|
+
if (description) header.description = description;
|
|
666
|
+
return header;
|
|
667
|
+
}
|
|
668
|
+
function colorList(container) {
|
|
669
|
+
const method = stringAttribute(container, "meth");
|
|
670
|
+
return { ...method ? { method } : {}, colors: parseDrawingColorList(container) };
|
|
671
|
+
}
|
|
672
|
+
function parseDiagramColors(source) {
|
|
673
|
+
const root = rootOf(source);
|
|
674
|
+
const labels = children(root, "styleLbl", NS.dgm).map((label) => ({
|
|
675
|
+
name: stringAttribute(label, "name") ?? "",
|
|
676
|
+
fill: colorList(first(label, "fillClrLst", NS.dgm)),
|
|
677
|
+
line: colorList(first(label, "linClrLst", NS.dgm)),
|
|
678
|
+
effect: colorList(first(label, "effectClrLst", NS.dgm)),
|
|
679
|
+
textLine: colorList(first(label, "txLinClrLst", NS.dgm)),
|
|
680
|
+
textFill: colorList(first(label, "txFillClrLst", NS.dgm)),
|
|
681
|
+
textEffect: colorList(first(label, "txEffectClrLst", NS.dgm))
|
|
682
|
+
}));
|
|
683
|
+
return { ...parseDefinitionHeader(root), labels };
|
|
684
|
+
}
|
|
685
|
+
function styleRef(element) {
|
|
686
|
+
if (!element) return void 0;
|
|
687
|
+
const raw = element.getAttribute("idx");
|
|
688
|
+
const ref = {};
|
|
689
|
+
if (element.localName === "fontRef") {
|
|
690
|
+
if (raw) ref.fontIndex = raw;
|
|
691
|
+
} else {
|
|
692
|
+
const index = Number.parseInt(raw ?? "", 10);
|
|
693
|
+
if (Number.isFinite(index)) ref.index = index;
|
|
694
|
+
}
|
|
695
|
+
const color = parseDrawingColorIn(element);
|
|
696
|
+
if (color) ref.color = color;
|
|
697
|
+
return ref;
|
|
698
|
+
}
|
|
699
|
+
function parseStyleReferences(style) {
|
|
700
|
+
const refs = {};
|
|
701
|
+
const line = styleRef(first(style, "lnRef", NS.a));
|
|
702
|
+
const fill = styleRef(first(style, "fillRef", NS.a));
|
|
703
|
+
const effect = styleRef(first(style, "effectRef", NS.a));
|
|
704
|
+
const font = styleRef(first(style, "fontRef", NS.a));
|
|
705
|
+
if (line) refs.line = line;
|
|
706
|
+
if (fill) refs.fill = fill;
|
|
707
|
+
if (effect) refs.effect = effect;
|
|
708
|
+
if (font) refs.font = font;
|
|
709
|
+
return refs;
|
|
710
|
+
}
|
|
711
|
+
var hasContent = (element) => Boolean(element && (element.attributes.length > 0 || elements(element).length > 0));
|
|
712
|
+
function parseDiagramQuickStyle(source) {
|
|
713
|
+
const root = rootOf(source);
|
|
714
|
+
const labels = children(root, "styleLbl", NS.dgm).map((label) => ({
|
|
715
|
+
name: stringAttribute(label, "name") ?? "",
|
|
716
|
+
...parseStyleReferences(first(label, "style", NS.dgm)),
|
|
717
|
+
hasScene3d: Boolean(first(label, "scene3d", NS.dgm)),
|
|
718
|
+
hasShape3d: hasContent(first(label, "sp3d", NS.dgm))
|
|
719
|
+
}));
|
|
720
|
+
return {
|
|
721
|
+
...parseDefinitionHeader(root),
|
|
722
|
+
labels,
|
|
723
|
+
has3d: labels.some((label) => label.hasShape3d)
|
|
724
|
+
};
|
|
725
|
+
}
|
|
726
|
+
function parseDiagramLayoutSummary(source) {
|
|
727
|
+
const root = rootOf(source);
|
|
728
|
+
const header = parseDefinitionHeader(root);
|
|
729
|
+
const family = resolveDiagramLayoutCategory(
|
|
730
|
+
header.uniqueId,
|
|
731
|
+
header.categories.map((category) => category.type)
|
|
732
|
+
);
|
|
733
|
+
const rootNode = first(root, "layoutNode", NS.dgm);
|
|
734
|
+
const rootAlgorithm = stringAttribute(first(rootNode, "alg", NS.dgm), "type");
|
|
735
|
+
return {
|
|
736
|
+
...header,
|
|
737
|
+
...family ? { family } : {},
|
|
738
|
+
...rootAlgorithm ? { rootAlgorithm } : {},
|
|
739
|
+
layoutNodeCount: descendants(root, "layoutNode").length
|
|
740
|
+
};
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
// src/diagram/drawing-fill.ts
|
|
744
|
+
var FILL_ELEMENTS = /* @__PURE__ */ new Set([
|
|
745
|
+
"noFill",
|
|
746
|
+
"solidFill",
|
|
747
|
+
"gradFill",
|
|
748
|
+
"pattFill",
|
|
749
|
+
"blipFill",
|
|
750
|
+
"grpFill"
|
|
751
|
+
]);
|
|
752
|
+
function fillElementOf(properties) {
|
|
753
|
+
return properties ? elements(properties).find(
|
|
754
|
+
(element) => FILL_ELEMENTS.has(element.localName) && (!element.namespaceURI || element.namespaceURI === NS.a)
|
|
755
|
+
) : void 0;
|
|
756
|
+
}
|
|
757
|
+
function parseDrawingFill(properties) {
|
|
758
|
+
const fill = fillElementOf(properties);
|
|
759
|
+
if (!fill) return void 0;
|
|
760
|
+
switch (fill.localName) {
|
|
761
|
+
case "noFill":
|
|
762
|
+
return { kind: "none" };
|
|
763
|
+
case "solidFill": {
|
|
764
|
+
const color = parseDrawingColorIn(fill);
|
|
765
|
+
return color ? { kind: "solid", color } : { kind: "unsupported", element: "solidFill" };
|
|
766
|
+
}
|
|
767
|
+
case "gradFill": {
|
|
768
|
+
const stops = children(first(fill, "gsLst", NS.a) ?? fill, "gs", NS.a).flatMap((stop) => {
|
|
769
|
+
const color = parseDrawingColorIn(stop);
|
|
770
|
+
const position = Number.parseInt(stop.getAttribute("pos") ?? "", 10);
|
|
771
|
+
return color && Number.isFinite(position) ? [{ position: position / 1e3, color }] : [];
|
|
772
|
+
});
|
|
773
|
+
const angle = Number.parseInt(first(fill, "lin", NS.a)?.getAttribute("ang") ?? "", 10);
|
|
774
|
+
const path = first(fill, "path", NS.a)?.getAttribute("path");
|
|
775
|
+
return {
|
|
776
|
+
kind: "gradient",
|
|
777
|
+
stops,
|
|
778
|
+
...Number.isFinite(angle) ? { angle: angle / 6e4 } : {},
|
|
779
|
+
...path ? { path } : {}
|
|
780
|
+
};
|
|
781
|
+
}
|
|
782
|
+
case "pattFill": {
|
|
783
|
+
const foreground = parseDrawingColorIn(first(fill, "fgClr", NS.a));
|
|
784
|
+
const background = parseDrawingColorIn(first(fill, "bgClr", NS.a));
|
|
785
|
+
return {
|
|
786
|
+
kind: "pattern",
|
|
787
|
+
preset: fill.getAttribute("prst") ?? "",
|
|
788
|
+
...foreground ? { foreground } : {},
|
|
789
|
+
...background ? { background } : {}
|
|
790
|
+
};
|
|
791
|
+
}
|
|
792
|
+
case "blipFill": {
|
|
793
|
+
const blip = first(fill, "blip", NS.a);
|
|
794
|
+
const relId = blip?.getAttributeNS(NS.r, "embed") || blip?.getAttribute("r:embed") || void 0;
|
|
795
|
+
return { kind: "picture", ...relId ? { relId } : {} };
|
|
796
|
+
}
|
|
797
|
+
default:
|
|
798
|
+
return { kind: "unsupported", element: fill.localName };
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
function parseDrawingLine(ln) {
|
|
802
|
+
if (!ln) return void 0;
|
|
803
|
+
const line = {};
|
|
804
|
+
const width = Number.parseInt(ln.getAttribute("w") ?? "", 10);
|
|
805
|
+
if (Number.isFinite(width)) line.widthEmu = width;
|
|
806
|
+
const fill = parseDrawingFill(ln);
|
|
807
|
+
if (fill) line.fill = fill;
|
|
808
|
+
const dash = first(ln, "prstDash", NS.a)?.getAttribute("val");
|
|
809
|
+
if (dash) line.dash = dash;
|
|
810
|
+
const cap = ln.getAttribute("cap");
|
|
811
|
+
if (cap) line.cap = cap;
|
|
812
|
+
return line;
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
// src/diagram/drawing-text.ts
|
|
816
|
+
function parseRun(run) {
|
|
817
|
+
const properties = first(run, "rPr", NS.a);
|
|
818
|
+
const parsed = { text: first(run, "t", NS.a)?.textContent ?? "" };
|
|
819
|
+
const size = Number.parseInt(properties?.getAttribute("sz") ?? "", 10);
|
|
820
|
+
if (Number.isFinite(size)) parsed.sizePt = size / 100;
|
|
821
|
+
const bold = booleanAttribute(properties, "b");
|
|
822
|
+
if (bold !== void 0) parsed.bold = bold;
|
|
823
|
+
const italic = booleanAttribute(properties, "i");
|
|
824
|
+
if (italic !== void 0) parsed.italic = italic;
|
|
825
|
+
const underline = properties?.getAttribute("u");
|
|
826
|
+
if (underline) parsed.underline = underline !== "none";
|
|
827
|
+
const color = parseDrawingColorIn(first(properties, "solidFill", NS.a));
|
|
828
|
+
if (color) parsed.color = color;
|
|
829
|
+
const typeface = first(properties, "latin", NS.a)?.getAttribute("typeface");
|
|
830
|
+
if (typeface) parsed.typeface = typeface;
|
|
831
|
+
return parsed;
|
|
832
|
+
}
|
|
833
|
+
function parseParagraph(paragraph) {
|
|
834
|
+
const runs = [];
|
|
835
|
+
for (const child of children(paragraph, "r", NS.a)) runs.push(parseRun(child));
|
|
836
|
+
for (const field of children(paragraph, "fld", NS.a)) runs.push(parseRun(field));
|
|
837
|
+
const align = first(paragraph, "pPr", NS.a)?.getAttribute("algn");
|
|
838
|
+
return { ...align ? { align } : {}, runs };
|
|
839
|
+
}
|
|
840
|
+
function parseDrawingTextBody(body) {
|
|
841
|
+
if (!body) return void 0;
|
|
842
|
+
const properties = first(body, "bodyPr", NS.a);
|
|
843
|
+
const paragraphs = children(body, "p", NS.a).map(parseParagraph);
|
|
844
|
+
const result = {
|
|
845
|
+
paragraphs,
|
|
846
|
+
text: paragraphs.map((paragraph) => paragraph.runs.map((run) => run.text).join("")).join("\n")
|
|
847
|
+
};
|
|
848
|
+
const anchor = properties?.getAttribute("anchor");
|
|
849
|
+
if (anchor) result.anchor = anchor;
|
|
850
|
+
const insets = {};
|
|
851
|
+
for (const [key, attribute] of [
|
|
852
|
+
["left", "lIns"],
|
|
853
|
+
["top", "tIns"],
|
|
854
|
+
["right", "rIns"],
|
|
855
|
+
["bottom", "bIns"]
|
|
856
|
+
]) {
|
|
857
|
+
const value = Number.parseInt(properties?.getAttribute(attribute) ?? "", 10);
|
|
858
|
+
if (Number.isFinite(value)) insets[key] = value;
|
|
859
|
+
}
|
|
860
|
+
if (Object.keys(insets).length > 0) result.insetsEmu = insets;
|
|
861
|
+
return result;
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
// src/diagram/drawing-geometry.ts
|
|
865
|
+
var int = (element, name) => Number.parseInt(element?.getAttribute(name) ?? "", 10);
|
|
866
|
+
function parseFrame(container) {
|
|
867
|
+
const off = first(container, "off", NS.a);
|
|
868
|
+
const ext = first(container, "ext", NS.a);
|
|
869
|
+
if (!off || !ext) return void 0;
|
|
870
|
+
return {
|
|
871
|
+
x: int(off, "x") || 0,
|
|
872
|
+
y: int(off, "y") || 0,
|
|
873
|
+
width: int(ext, "cx") || 0,
|
|
874
|
+
height: int(ext, "cy") || 0
|
|
875
|
+
};
|
|
876
|
+
}
|
|
877
|
+
function parseTransform(xfrm) {
|
|
878
|
+
const frame = parseFrame(xfrm);
|
|
879
|
+
if (!frame || !xfrm) return void 0;
|
|
880
|
+
const rot = int(xfrm, "rot");
|
|
881
|
+
return {
|
|
882
|
+
frame,
|
|
883
|
+
...Number.isFinite(rot) && rot !== 0 ? { rotation: rot / 6e4 } : {},
|
|
884
|
+
...booleanAttribute(xfrm, "flipH") ? { flipHorizontal: true } : {},
|
|
885
|
+
...booleanAttribute(xfrm, "flipV") ? { flipVertical: true } : {}
|
|
886
|
+
};
|
|
887
|
+
}
|
|
888
|
+
function parsePathCommands(path) {
|
|
889
|
+
const commands = [];
|
|
890
|
+
const point = (element) => {
|
|
891
|
+
const x = int(element, "x");
|
|
892
|
+
const y = int(element, "y");
|
|
893
|
+
return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : void 0;
|
|
894
|
+
};
|
|
895
|
+
for (const element of Array.from(path.childNodes)) {
|
|
896
|
+
if (element.nodeType !== 1) continue;
|
|
897
|
+
const node = element;
|
|
898
|
+
const points = children(node, "pt", NS.a).map(point);
|
|
899
|
+
if (points.some((entry) => entry === void 0)) return void 0;
|
|
900
|
+
const [p0, p1, p2] = points;
|
|
901
|
+
switch (node.localName) {
|
|
902
|
+
case "moveTo":
|
|
903
|
+
case "lnTo":
|
|
904
|
+
if (!p0) return void 0;
|
|
905
|
+
commands.push({ op: node.localName === "moveTo" ? "M" : "L", ...p0 });
|
|
906
|
+
break;
|
|
907
|
+
case "cubicBezTo":
|
|
908
|
+
if (!p0 || !p1 || !p2) return void 0;
|
|
909
|
+
commands.push({ op: "C", x1: p0.x, y1: p0.y, x2: p1.x, y2: p1.y, x: p2.x, y: p2.y });
|
|
910
|
+
break;
|
|
911
|
+
case "quadBezTo":
|
|
912
|
+
if (!p0 || !p1) return void 0;
|
|
913
|
+
commands.push({ op: "Q", x1: p0.x, y1: p0.y, x: p1.x, y: p1.y });
|
|
914
|
+
break;
|
|
915
|
+
case "arcTo": {
|
|
916
|
+
const wR = int(node, "wR");
|
|
917
|
+
const hR = int(node, "hR");
|
|
918
|
+
const startAngle = int(node, "stAng");
|
|
919
|
+
const swingAngle = int(node, "swAng");
|
|
920
|
+
if (![wR, hR, startAngle, swingAngle].every(Number.isFinite)) return void 0;
|
|
921
|
+
commands.push({
|
|
922
|
+
op: "A",
|
|
923
|
+
wR,
|
|
924
|
+
hR,
|
|
925
|
+
startAngle: startAngle / 6e4,
|
|
926
|
+
swingAngle: swingAngle / 6e4
|
|
927
|
+
});
|
|
928
|
+
break;
|
|
929
|
+
}
|
|
930
|
+
case "close":
|
|
931
|
+
commands.push({ op: "Z" });
|
|
932
|
+
break;
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
return commands;
|
|
936
|
+
}
|
|
937
|
+
function parseDrawingGeometry(spPr) {
|
|
938
|
+
const preset = first(spPr, "prstGeom", NS.a);
|
|
939
|
+
const custom = first(spPr, "custGeom", NS.a);
|
|
940
|
+
if (custom) {
|
|
941
|
+
const paths = [];
|
|
942
|
+
for (const path of children(first(custom, "pathLst", NS.a) ?? custom, "path", NS.a)) {
|
|
943
|
+
const commands = parsePathCommands(path);
|
|
944
|
+
if (!commands) return { geometry: "custom", issue: "CUSTOM_GEOMETRY_GUIDES_UNSUPPORTED" };
|
|
945
|
+
const width = int(path, "w");
|
|
946
|
+
const height = int(path, "h");
|
|
947
|
+
paths.push({
|
|
948
|
+
commands,
|
|
949
|
+
...Number.isFinite(width) ? { width } : {},
|
|
950
|
+
...Number.isFinite(height) ? { height } : {},
|
|
951
|
+
...path.getAttribute("fill") ? { fill: path.getAttribute("fill") } : {},
|
|
952
|
+
...path.getAttribute("stroke") === "0" || path.getAttribute("stroke") === "false" ? { stroke: false } : {}
|
|
953
|
+
});
|
|
954
|
+
}
|
|
955
|
+
return { geometry: "custom", paths };
|
|
956
|
+
}
|
|
957
|
+
const geometry = preset?.getAttribute("prst") || "rect";
|
|
958
|
+
const adjustments = {};
|
|
959
|
+
const avLst = first(preset, "avLst", NS.a);
|
|
960
|
+
if (avLst)
|
|
961
|
+
for (const guide of children(avLst, "gd", NS.a)) {
|
|
962
|
+
const name = guide.getAttribute("name");
|
|
963
|
+
const match = /^val\s+(-?\d+)/u.exec(guide.getAttribute("fmla") ?? "");
|
|
964
|
+
if (name && match?.[1]) adjustments[name] = Number.parseInt(match[1], 10);
|
|
965
|
+
}
|
|
966
|
+
return { geometry, ...Object.keys(adjustments).length > 0 ? { adjustments } : {} };
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
// src/diagram/drawing.ts
|
|
970
|
+
var IDENTITY = { offsetX: 0, offsetY: 0, scaleX: 1, scaleY: 1 };
|
|
971
|
+
function applyGroup(frame, group) {
|
|
972
|
+
return {
|
|
973
|
+
x: Math.round(group.offsetX + frame.x * group.scaleX),
|
|
974
|
+
y: Math.round(group.offsetY + frame.y * group.scaleY),
|
|
975
|
+
width: Math.round(frame.width * group.scaleX),
|
|
976
|
+
height: Math.round(frame.height * group.scaleY)
|
|
977
|
+
};
|
|
978
|
+
}
|
|
979
|
+
function groupTransform(group, parent) {
|
|
980
|
+
const xfrm = first(first(group, "grpSpPr", NS.dsp), "xfrm", NS.a);
|
|
981
|
+
const off = first(xfrm, "off", NS.a);
|
|
982
|
+
const ext = first(xfrm, "ext", NS.a);
|
|
983
|
+
const chOff = first(xfrm, "chOff", NS.a);
|
|
984
|
+
const chExt = first(xfrm, "chExt", NS.a);
|
|
985
|
+
const num = (element, name) => Number.parseInt(element?.getAttribute(name) ?? "", 10);
|
|
986
|
+
const cx = num(ext, "cx");
|
|
987
|
+
const cy = num(ext, "cy");
|
|
988
|
+
const chCx = num(chExt, "cx");
|
|
989
|
+
const chCy = num(chExt, "cy");
|
|
990
|
+
if (!off || ![cx, cy, chCx, chCy].every(Number.isFinite) || chCx === 0 || chCy === 0)
|
|
991
|
+
return parent;
|
|
992
|
+
const scaleX = cx / chCx;
|
|
993
|
+
const scaleY = cy / chCy;
|
|
994
|
+
const local = {
|
|
995
|
+
offsetX: num(off, "x") - (num(chOff, "x") || 0) * scaleX,
|
|
996
|
+
offsetY: num(off, "y") - (num(chOff, "y") || 0) * scaleY,
|
|
997
|
+
scaleX,
|
|
998
|
+
scaleY
|
|
999
|
+
};
|
|
1000
|
+
return {
|
|
1001
|
+
offsetX: parent.offsetX + local.offsetX * parent.scaleX,
|
|
1002
|
+
offsetY: parent.offsetY + local.offsetY * parent.scaleY,
|
|
1003
|
+
scaleX: parent.scaleX * local.scaleX,
|
|
1004
|
+
scaleY: parent.scaleY * local.scaleY
|
|
1005
|
+
};
|
|
1006
|
+
}
|
|
1007
|
+
function parseShape(sp, index, group, issues) {
|
|
1008
|
+
const spPr = first(sp, "spPr", NS.dsp);
|
|
1009
|
+
const transform = parseTransform(first(spPr, "xfrm", NS.a));
|
|
1010
|
+
if (!transform) return void 0;
|
|
1011
|
+
const modelId = stringAttribute(sp, "modelId") ?? stringAttribute(first(first(sp, "nvSpPr", NS.dsp), "cNvPr", NS.dsp), "id") ?? `dsp-${index}`;
|
|
1012
|
+
const { geometry, adjustments, paths, issue } = parseDrawingGeometry(spPr);
|
|
1013
|
+
if (issue) issues.push({ code: issue, message: `Shape ${modelId}: ${issue}.` });
|
|
1014
|
+
const frame = applyGroup(transform.frame, group);
|
|
1015
|
+
if ((frame.width <= 0 || frame.height <= 0) && geometry !== "line") return void 0;
|
|
1016
|
+
const shape = {
|
|
1017
|
+
modelId,
|
|
1018
|
+
frame,
|
|
1019
|
+
geometry,
|
|
1020
|
+
has3d: Boolean(first(spPr, "scene3d", NS.a) || first(spPr, "sp3d", NS.a))
|
|
1021
|
+
};
|
|
1022
|
+
if (transform.rotation !== void 0) shape.rotation = transform.rotation;
|
|
1023
|
+
if (transform.flipHorizontal) shape.flipHorizontal = true;
|
|
1024
|
+
if (transform.flipVertical) shape.flipVertical = true;
|
|
1025
|
+
if (adjustments) shape.adjustments = adjustments;
|
|
1026
|
+
if (paths) shape.paths = paths;
|
|
1027
|
+
const fill = parseDrawingFill(spPr);
|
|
1028
|
+
if (fill) shape.fill = fill;
|
|
1029
|
+
const line = parseDrawingLine(first(spPr, "ln", NS.a));
|
|
1030
|
+
if (line) shape.line = line;
|
|
1031
|
+
const style = first(sp, "style", NS.dsp);
|
|
1032
|
+
if (style) shape.style = parseStyleReferences(style);
|
|
1033
|
+
const text = parseDrawingTextBody(first(sp, "txBody", NS.dsp));
|
|
1034
|
+
if (text) shape.text = text;
|
|
1035
|
+
const textFrame = parseFrame(first(sp, "txXfrm", NS.dsp));
|
|
1036
|
+
if (textFrame) shape.textFrame = applyGroup(textFrame, group);
|
|
1037
|
+
return shape;
|
|
1038
|
+
}
|
|
1039
|
+
function parseDiagramDrawing(source, part) {
|
|
1040
|
+
const root = (typeof source === "string" ? parseXml(source, { label: "DiagramML" }) : source).documentElement;
|
|
1041
|
+
const issues = [];
|
|
1042
|
+
const shapes = [];
|
|
1043
|
+
const tree = root.localName === "spTree" ? root : first(root, "spTree", NS.dsp);
|
|
1044
|
+
let counter = 0;
|
|
1045
|
+
const visit = (container, group) => {
|
|
1046
|
+
for (const child of Array.from(container.childNodes)) {
|
|
1047
|
+
if (child.nodeType !== 1) continue;
|
|
1048
|
+
const element = child;
|
|
1049
|
+
if (element.localName === "sp") {
|
|
1050
|
+
const shape = parseShape(element, counter++, group, issues);
|
|
1051
|
+
if (shape) shapes.push(shape);
|
|
1052
|
+
} else if (element.localName === "grpSp") visit(element, groupTransform(element, group));
|
|
1053
|
+
else if (element.localName === "pic")
|
|
1054
|
+
issues.push({
|
|
1055
|
+
code: "DIAGRAM_DRAWING_PICTURE_SKIPPED",
|
|
1056
|
+
message: "A dsp:pic in the cached drawing is not modelled; the part still holds it."
|
|
1057
|
+
});
|
|
1058
|
+
}
|
|
1059
|
+
};
|
|
1060
|
+
if (tree) visit(tree, IDENTITY);
|
|
1061
|
+
else
|
|
1062
|
+
issues.push({ code: "DIAGRAM_DRAWING_EMPTY", message: "The drawing part has no dsp:spTree." });
|
|
1063
|
+
const withPart = part ? issues.map((issue) => ({ ...issue, part })) : issues;
|
|
1064
|
+
return { shapes, issues: withPart };
|
|
1065
|
+
}
|
|
1066
|
+
var drawingHas3d = (drawing) => drawing.shapes.some((shape) => shape.has3d);
|
|
1067
|
+
|
|
1068
|
+
// src/diagram/load.ts
|
|
1069
|
+
var slot = [
|
|
1070
|
+
["data", "dataRelId"],
|
|
1071
|
+
["layout", "layoutRelId"],
|
|
1072
|
+
["quickStyle", "styleRelId"],
|
|
1073
|
+
["colors", "colorsRelId"]
|
|
1074
|
+
];
|
|
1075
|
+
async function loadDiagram(hostPart, relationshipIds, host) {
|
|
1076
|
+
const issues = [];
|
|
1077
|
+
const paths = {};
|
|
1078
|
+
const hostRels = host.hostRelationships(hostPart);
|
|
1079
|
+
for (const [name, key] of slot) {
|
|
1080
|
+
const relId = relationshipIds[key];
|
|
1081
|
+
if (!relId) {
|
|
1082
|
+
issues.push({
|
|
1083
|
+
code: "DIAGRAM_RELATIONSHIP_MISSING",
|
|
1084
|
+
message: `The diagram has no ${name} relationship id.`
|
|
1085
|
+
});
|
|
1086
|
+
continue;
|
|
1087
|
+
}
|
|
1088
|
+
const target = hostRels?.get(relId);
|
|
1089
|
+
if (target === void 0)
|
|
1090
|
+
issues.push({
|
|
1091
|
+
code: "DIAGRAM_RELATIONSHIP_UNRESOLVED",
|
|
1092
|
+
message: `Relationship ${relId} (${name}) is not in ${hostPart}.`
|
|
1093
|
+
});
|
|
1094
|
+
else paths[name] = host.resolvePath(hostPart, target);
|
|
1095
|
+
}
|
|
1096
|
+
const read = async (name, parse) => {
|
|
1097
|
+
const part = paths[name];
|
|
1098
|
+
if (!part) return void 0;
|
|
1099
|
+
try {
|
|
1100
|
+
const xml = await host.readText(part);
|
|
1101
|
+
if (xml === void 0) {
|
|
1102
|
+
issues.push({
|
|
1103
|
+
code: "DIAGRAM_PART_MISSING",
|
|
1104
|
+
message: `Part ${part} is not in the package.`,
|
|
1105
|
+
part
|
|
1106
|
+
});
|
|
1107
|
+
return void 0;
|
|
1108
|
+
}
|
|
1109
|
+
return parse(xml, part);
|
|
1110
|
+
} catch (error) {
|
|
1111
|
+
issues.push({
|
|
1112
|
+
code: "DIAGRAM_PART_UNREADABLE",
|
|
1113
|
+
message: `Part ${part} could not be parsed: ${error instanceof Error ? error.message : String(error)}`,
|
|
1114
|
+
part
|
|
1115
|
+
});
|
|
1116
|
+
return void 0;
|
|
1117
|
+
}
|
|
1118
|
+
};
|
|
1119
|
+
const data = await read("data", (xml, part) => parseDiagramDataModel(xml, part));
|
|
1120
|
+
if (data) issues.push(...data.issues);
|
|
1121
|
+
const layout = await read("layout", (xml) => parseDiagramLayoutSummary(xml));
|
|
1122
|
+
const colors = await read("colors", (xml) => parseDiagramColors(xml));
|
|
1123
|
+
const quickStyle = await read("quickStyle", (xml) => parseDiagramQuickStyle(xml));
|
|
1124
|
+
let drawingResolution;
|
|
1125
|
+
try {
|
|
1126
|
+
drawingResolution = await resolveDiagramDrawingPart(
|
|
1127
|
+
hostPart,
|
|
1128
|
+
relationshipIds.dataRelId ?? "",
|
|
1129
|
+
data?.drawingRelId ?? "",
|
|
1130
|
+
host
|
|
1131
|
+
);
|
|
1132
|
+
} catch (error) {
|
|
1133
|
+
issues.push({
|
|
1134
|
+
code: "DIAGRAM_DRAWING_UNRESOLVED",
|
|
1135
|
+
message: `The cached drawing could not be located: ${error instanceof Error ? error.message : String(error)}`
|
|
1136
|
+
});
|
|
1137
|
+
}
|
|
1138
|
+
let drawing;
|
|
1139
|
+
if (drawingResolution) {
|
|
1140
|
+
paths.drawing = drawingResolution.path;
|
|
1141
|
+
drawing = await read("drawing", (xml, part) => parseDiagramDrawing(xml, part));
|
|
1142
|
+
if (drawing) issues.push(...drawing.issues);
|
|
1143
|
+
} else if (data)
|
|
1144
|
+
issues.push({
|
|
1145
|
+
code: "DIAGRAM_DRAWING_ABSENT",
|
|
1146
|
+
message: "The package has no cached drawing for this diagram; its layout can only be recomputed from the layout definition."
|
|
1147
|
+
});
|
|
1148
|
+
return {
|
|
1149
|
+
relationshipIds,
|
|
1150
|
+
paths,
|
|
1151
|
+
...drawingResolution ? { drawingRelId: drawingResolution.relId } : {},
|
|
1152
|
+
...data ? { data } : {},
|
|
1153
|
+
...layout ? { layout } : {},
|
|
1154
|
+
...colors ? { colors } : {},
|
|
1155
|
+
...quickStyle ? { quickStyle } : {},
|
|
1156
|
+
...drawing ? { drawing } : {},
|
|
1157
|
+
issues
|
|
1158
|
+
};
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
export { DIAGRAM_RELATIONSHIP_TYPES, attributeReader, collectTransitionText, connectionLabel, diagramRelationshipsPart, drawingHas3d, fillElementOf, loadDiagram, parseConnectionAttributes, parseCustomLayoutAttributes, parseDefinitionHeader, parseDiagramColors, parseDiagramDataModel, parseDiagramDrawing, parseDiagramLayoutSummary, parseDiagramQuickStyle, parseDrawingColor, parseDrawingColorIn, parseDrawingColorList, parseDrawingFill, parseDrawingGeometry, parseDrawingLine, parseDrawingTextBody, parseFrame, parseRelationshipIdAttributes, parseStyleReferences, parseTransform, resolveDiagramDrawingPart, resolveDiagramLayoutCategory, resolveDrawingColor, textBodyParagraphs };
|