docxmlater 10.0.2 → 10.0.4
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 +3 -2
- package/dist/constants/legacyCompatFlags.d.ts.map +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/constants/limits.d.ts +0 -27
- package/dist/constants/limits.d.ts.map +1 -1
- package/dist/constants/limits.js +13 -13
- package/dist/constants/limits.js.map +1 -1
- package/dist/core/Document.d.ts +23 -19
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +197 -63
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +59 -24
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentIdManager.d.ts.map +1 -1
- package/dist/core/DocumentIdManager.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +6 -6
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +86 -55
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/Relationship.d.ts.map +1 -1
- package/dist/core/Relationship.js +1 -1
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.js +3 -3
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/AlternateContent.js.map +1 -1
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.js +1 -1
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +8 -2
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +1 -2
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/CustomXml.js.map +1 -1
- package/dist/elements/Endnote.d.ts.map +1 -1
- package/dist/elements/Endnote.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +31 -28
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js +6 -6
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/FontManager.d.ts.map +1 -1
- package/dist/elements/FontManager.js.map +1 -1
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +5 -5
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts +2 -2
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +21 -5
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +2 -2
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +8 -0
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +153 -118
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/Revision.d.ts +1 -0
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +44 -5
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionContent.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +1 -3
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +127 -118
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js +21 -0
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +20 -8
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +2 -2
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +29 -35
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +2 -2
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +63 -67
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts +6 -6
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableOfContentsElement.js.map +1 -1
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +65 -47
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +1 -1
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +1 -1
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +11 -11
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +4 -4
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +26 -26
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts +1 -1
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +87 -95
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +3 -3
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/managers/DrawingManager.d.ts.map +1 -1
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/tracking/TrackingContext.js.map +1 -1
- package/dist/types/compatibility-types.js.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/types/list-types.d.ts +4 -4
- package/dist/types/list-types.d.ts.map +1 -1
- package/dist/types/list-types.js.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/types/styleConfig.js.map +1 -1
- package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
- package/dist/utils/ChangelogGenerator.js.map +1 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
- package/dist/utils/CompatibilityUpgrader.js +7 -7
- package/dist/utils/CompatibilityUpgrader.js.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +23 -2
- package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/utils/MoveOperationHelper.js.map +1 -1
- package/dist/utils/RevisionAwareProcessor.js.map +1 -1
- package/dist/utils/RevisionWalker.js.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.d.ts +1 -0
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js +46 -0
- package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/utils/ShadingResolver.js +1 -1
- package/dist/utils/ShadingResolver.js.map +1 -1
- package/dist/utils/acceptRevisions.d.ts +0 -28
- package/dist/utils/acceptRevisions.d.ts.map +1 -1
- package/dist/utils/acceptRevisions.js +5 -7
- package/dist/utils/acceptRevisions.js.map +1 -1
- package/dist/utils/cnfStyleDecoder.js +1 -1
- package/dist/utils/cnfStyleDecoder.js.map +1 -1
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/dateFormatting.js.map +1 -1
- package/dist/utils/deepClone.d.ts +0 -1
- package/dist/utils/deepClone.d.ts.map +1 -1
- package/dist/utils/deepClone.js +0 -7
- package/dist/utils/deepClone.js.map +1 -1
- package/dist/utils/diagnostics.d.ts +2 -2
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/errorHandling.js.map +1 -1
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/list-detection.d.ts +2 -2
- package/dist/utils/list-detection.d.ts.map +1 -1
- package/dist/utils/list-detection.js +3 -3
- package/dist/utils/list-detection.js.map +1 -1
- package/dist/utils/logger.d.ts +2 -4
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +0 -2
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/stripTrackedChanges.d.ts +0 -19
- package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
- package/dist/utils/stripTrackedChanges.js +0 -2
- package/dist/utils/stripTrackedChanges.js.map +1 -1
- package/dist/utils/textDiff.js.map +1 -1
- package/dist/utils/units.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRules.js.map +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +10 -0
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.d.ts.map +1 -1
- package/dist/xml/XMLParser.js +4 -5
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/ZipWriter.js.map +1 -1
- package/dist/zip/errors.js.map +1 -1
- package/dist/zip/types.js.map +1 -1
- package/package.json +34 -4
- package/src/__tests__/helper-methods.test.ts +512 -0
- package/src/constants/legacyCompatFlags.ts +138 -0
- package/src/constants/limits.ts +50 -0
- package/src/core/CLAUDE.md +109 -0
- package/src/core/Document.ts +15569 -0
- package/src/core/DocumentContent.ts +467 -0
- package/src/core/DocumentGenerator.ts +1104 -0
- package/src/core/DocumentIdManager.ts +158 -0
- package/src/core/DocumentParser.ts +10140 -0
- package/src/core/DocumentValidator.ts +372 -0
- package/src/core/Relationship.ts +367 -0
- package/src/core/RelationshipManager.ts +428 -0
- package/src/elements/AlternateContent.ts +42 -0
- package/src/elements/Bookmark.ts +210 -0
- package/src/elements/BookmarkManager.ts +250 -0
- package/src/elements/CLAUDE.md +126 -0
- package/src/elements/Comment.ts +359 -0
- package/src/elements/CommentManager.ts +502 -0
- package/src/elements/CommonTypes.ts +549 -0
- package/src/elements/CustomXml.ts +36 -0
- package/src/elements/Endnote.ts +217 -0
- package/src/elements/EndnoteManager.ts +249 -0
- package/src/elements/Field.ts +1233 -0
- package/src/elements/FieldHelpers.ts +333 -0
- package/src/elements/FontManager.ts +339 -0
- package/src/elements/Footer.ts +269 -0
- package/src/elements/Footnote.ts +217 -0
- package/src/elements/FootnoteManager.ts +249 -0
- package/src/elements/Header.ts +269 -0
- package/src/elements/HeaderFooterManager.ts +219 -0
- package/src/elements/Hyperlink.ts +1146 -0
- package/src/elements/Image.ts +1756 -0
- package/src/elements/ImageManager.ts +432 -0
- package/src/elements/ImageRun.ts +59 -0
- package/src/elements/MathElement.ts +65 -0
- package/src/elements/Paragraph.ts +4287 -0
- package/src/elements/PreservedElement.ts +53 -0
- package/src/elements/PropertyChangeTypes.ts +442 -0
- package/src/elements/RangeMarker.ts +400 -0
- package/src/elements/Revision.ts +1217 -0
- package/src/elements/RevisionContent.ts +73 -0
- package/src/elements/RevisionManager.ts +1070 -0
- package/src/elements/Run.ts +3068 -0
- package/src/elements/Section.ts +1421 -0
- package/src/elements/Shape.ts +873 -0
- package/src/elements/StructuredDocumentTag.ts +978 -0
- package/src/elements/Table.ts +2524 -0
- package/src/elements/TableCell.ts +1586 -0
- package/src/elements/TableGridChange.ts +151 -0
- package/src/elements/TableOfContents.ts +691 -0
- package/src/elements/TableOfContentsElement.ts +89 -0
- package/src/elements/TableRow.ts +906 -0
- package/src/elements/TextBox.ts +768 -0
- package/src/formatting/AbstractNumbering.ts +548 -0
- package/src/formatting/CLAUDE.md +74 -0
- package/src/formatting/NumberingInstance.ts +212 -0
- package/src/formatting/NumberingLevel.ts +1006 -0
- package/src/formatting/NumberingManager.ts +827 -0
- package/src/formatting/Style.ts +1833 -0
- package/src/formatting/StylesManager.ts +1005 -0
- package/src/helpers/CleanupHelper.ts +524 -0
- package/src/images/ImageOptimizer.ts +274 -0
- package/src/index.ts +554 -0
- package/src/managers/CLAUDE.md +47 -0
- package/src/managers/DrawingManager.ts +319 -0
- package/src/tracking/DocumentTrackingContext.ts +643 -0
- package/src/tracking/TrackingContext.ts +173 -0
- package/src/types/compatibility-types.ts +49 -0
- package/src/types/formatting.ts +210 -0
- package/src/types/list-types.ts +152 -0
- package/src/types/settings-types.ts +59 -0
- package/src/types/styleConfig.ts +189 -0
- package/src/utils/CLAUDE.md +153 -0
- package/src/utils/ChangelogGenerator.ts +1581 -0
- package/src/utils/CompatibilityUpgrader.ts +237 -0
- package/src/utils/InMemoryRevisionAcceptor.ts +696 -0
- package/src/utils/MoveOperationHelper.ts +238 -0
- package/src/utils/RevisionAwareProcessor.ts +526 -0
- package/src/utils/RevisionWalker.ts +457 -0
- package/src/utils/SelectiveRevisionAcceptor.ts +683 -0
- package/src/utils/ShadingResolver.ts +107 -0
- package/src/utils/acceptRevisions.ts +714 -0
- package/src/utils/cnfStyleDecoder.ts +217 -0
- package/src/utils/corruptionDetection.ts +345 -0
- package/src/utils/dateFormatting.ts +20 -0
- package/src/utils/deepClone.ts +78 -0
- package/src/utils/diagnostics.ts +129 -0
- package/src/utils/errorHandling.ts +80 -0
- package/src/utils/formatting.ts +213 -0
- package/src/utils/list-detection.ts +274 -0
- package/src/utils/logger.ts +404 -0
- package/src/utils/parsingHelpers.ts +190 -0
- package/src/utils/stripTrackedChanges.ts +353 -0
- package/src/utils/textDiff.ts +100 -0
- package/src/utils/units.ts +421 -0
- package/src/utils/validation.ts +542 -0
- package/src/utils/xmlSanitization.ts +182 -0
- package/src/validation/RevisionAutoFixer.ts +542 -0
- package/src/validation/RevisionValidator.ts +460 -0
- package/src/validation/ValidationRules.ts +338 -0
- package/src/validation/index.ts +30 -0
- package/src/xml/CLAUDE.md +65 -0
- package/src/xml/XMLBuilder.ts +871 -0
- package/src/xml/XMLParser.ts +919 -0
- package/src/zip/CLAUDE.md +55 -0
- package/src/zip/ZipHandler.ts +637 -0
- package/src/zip/ZipReader.ts +299 -0
- package/src/zip/ZipWriter.ts +390 -0
- package/src/zip/errors.ts +69 -0
- package/src/zip/types.ts +116 -0
- package/dist/core/ListNormalizer.d.ts +0 -23
- package/dist/core/ListNormalizer.d.ts.map +0 -1
- package/dist/core/ListNormalizer.js +0 -624
- package/dist/core/ListNormalizer.js.map +0 -1
- package/dist/images/index.d.ts +0 -2
- package/dist/images/index.d.ts.map +0 -1
- package/dist/images/index.js +0 -8
- package/dist/images/index.js.map +0 -1
- package/dist/ms-doc/cfb/CFBReader.d.ts +0 -35
- package/dist/ms-doc/cfb/CFBReader.d.ts.map +0 -1
- package/dist/ms-doc/cfb/CFBReader.js +0 -360
- package/dist/ms-doc/cfb/CFBReader.js.map +0 -1
- package/dist/ms-doc/converter/DocToDocxConverter.d.ts +0 -55
- package/dist/ms-doc/converter/DocToDocxConverter.d.ts.map +0 -1
- package/dist/ms-doc/converter/DocToDocxConverter.js +0 -324
- package/dist/ms-doc/converter/DocToDocxConverter.js.map +0 -1
- package/dist/ms-doc/fib/FIB.d.ts +0 -18
- package/dist/ms-doc/fib/FIB.d.ts.map +0 -1
- package/dist/ms-doc/fib/FIB.js +0 -342
- package/dist/ms-doc/fib/FIB.js.map +0 -1
- package/dist/ms-doc/fields/FieldParser.d.ts +0 -31
- package/dist/ms-doc/fields/FieldParser.d.ts.map +0 -1
- package/dist/ms-doc/fields/FieldParser.js +0 -266
- package/dist/ms-doc/fields/FieldParser.js.map +0 -1
- package/dist/ms-doc/images/PictureExtractor.d.ts +0 -22
- package/dist/ms-doc/images/PictureExtractor.d.ts.map +0 -1
- package/dist/ms-doc/images/PictureExtractor.js +0 -233
- package/dist/ms-doc/images/PictureExtractor.js.map +0 -1
- package/dist/ms-doc/index.d.ts +0 -20
- package/dist/ms-doc/index.d.ts.map +0 -1
- package/dist/ms-doc/index.js +0 -59
- package/dist/ms-doc/index.js.map +0 -1
- package/dist/ms-doc/properties/SPRM.d.ts +0 -210
- package/dist/ms-doc/properties/SPRM.d.ts.map +0 -1
- package/dist/ms-doc/properties/SPRM.js +0 -633
- package/dist/ms-doc/properties/SPRM.js.map +0 -1
- package/dist/ms-doc/sections/SectionParser.d.ts +0 -25
- package/dist/ms-doc/sections/SectionParser.d.ts.map +0 -1
- package/dist/ms-doc/sections/SectionParser.js +0 -214
- package/dist/ms-doc/sections/SectionParser.js.map +0 -1
- package/dist/ms-doc/styles/StyleSheet.d.ts +0 -23
- package/dist/ms-doc/styles/StyleSheet.d.ts.map +0 -1
- package/dist/ms-doc/styles/StyleSheet.js +0 -268
- package/dist/ms-doc/styles/StyleSheet.js.map +0 -1
- package/dist/ms-doc/subdocuments/SubdocumentParser.d.ts +0 -61
- package/dist/ms-doc/subdocuments/SubdocumentParser.d.ts.map +0 -1
- package/dist/ms-doc/subdocuments/SubdocumentParser.js +0 -208
- package/dist/ms-doc/subdocuments/SubdocumentParser.js.map +0 -1
- package/dist/ms-doc/tables/TableParser.d.ts +0 -29
- package/dist/ms-doc/tables/TableParser.d.ts.map +0 -1
- package/dist/ms-doc/tables/TableParser.js +0 -176
- package/dist/ms-doc/tables/TableParser.js.map +0 -1
- package/dist/ms-doc/text/PieceTable.d.ts +0 -21
- package/dist/ms-doc/text/PieceTable.d.ts.map +0 -1
- package/dist/ms-doc/text/PieceTable.js +0 -171
- package/dist/ms-doc/text/PieceTable.js.map +0 -1
- package/dist/ms-doc/types/Constants.d.ts +0 -99
- package/dist/ms-doc/types/Constants.d.ts.map +0 -1
- package/dist/ms-doc/types/Constants.js +0 -102
- package/dist/ms-doc/types/Constants.js.map +0 -1
- package/dist/ms-doc/types/DocTypes.d.ts +0 -368
- package/dist/ms-doc/types/DocTypes.d.ts.map +0 -1
- package/dist/ms-doc/types/DocTypes.js +0 -3
- package/dist/ms-doc/types/DocTypes.js.map +0 -1
- package/dist/tracking/index.d.ts +0 -3
- package/dist/tracking/index.d.ts.map +0 -1
- package/dist/tracking/index.js +0 -6
- package/dist/tracking/index.js.map +0 -1
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DrawingManager - Manages all drawing elements in a document
|
|
3
|
+
*
|
|
4
|
+
* Centralizes management of images, shapes, and text boxes.
|
|
5
|
+
* Assigns unique IDs and handles relationship management.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Image } from '../elements/Image';
|
|
9
|
+
import { Shape } from '../elements/Shape';
|
|
10
|
+
import { TextBox } from '../elements/TextBox';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Type representing any drawing element
|
|
14
|
+
*/
|
|
15
|
+
export type DrawingElement = Image | Shape | TextBox;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Drawing type discriminator
|
|
19
|
+
*/
|
|
20
|
+
export type DrawingType = 'image' | 'shape' | 'textbox' | 'preserved';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Preserved drawing (SmartArt, Chart, WordArt)
|
|
24
|
+
* These are stored as raw XML for round-trip preservation
|
|
25
|
+
*/
|
|
26
|
+
export interface PreservedDrawing {
|
|
27
|
+
/** Type of preserved drawing */
|
|
28
|
+
type: 'smartart' | 'chart' | 'wordart';
|
|
29
|
+
/** Raw XML content */
|
|
30
|
+
xml: string;
|
|
31
|
+
/** Relationship IDs referenced by this drawing */
|
|
32
|
+
relationshipIds: string[];
|
|
33
|
+
/** Unique ID for this drawing */
|
|
34
|
+
id: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Manages all drawing elements in a document
|
|
39
|
+
*
|
|
40
|
+
* Performance: Uses type-indexed Sets for O(1) type-specific lookups
|
|
41
|
+
* instead of O(n) linear scans through the main Map.
|
|
42
|
+
*/
|
|
43
|
+
export class DrawingManager {
|
|
44
|
+
private drawings = new Map<string, DrawingElement | PreservedDrawing>();
|
|
45
|
+
private nextId = 1;
|
|
46
|
+
|
|
47
|
+
// Type-indexed Sets for O(1) type-specific lookups
|
|
48
|
+
private imageIds = new Set<string>();
|
|
49
|
+
private shapeIds = new Set<string>();
|
|
50
|
+
private textboxIds = new Set<string>();
|
|
51
|
+
private preservedIds = new Set<string>();
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Creates a new DrawingManager
|
|
55
|
+
*/
|
|
56
|
+
constructor() {
|
|
57
|
+
// Empty constructor
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Adds an image to the manager
|
|
62
|
+
* @param image Image to add
|
|
63
|
+
* @returns Assigned ID
|
|
64
|
+
*/
|
|
65
|
+
addImage(image: Image): string {
|
|
66
|
+
const id = this.generateId();
|
|
67
|
+
image.setDocPrId(this.nextId - 1);
|
|
68
|
+
this.drawings.set(id, image);
|
|
69
|
+
this.imageIds.add(id);
|
|
70
|
+
return id;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Adds a shape to the manager
|
|
75
|
+
* @param shape Shape to add
|
|
76
|
+
* @returns Assigned ID
|
|
77
|
+
*/
|
|
78
|
+
addShape(shape: Shape): string {
|
|
79
|
+
const id = this.generateId();
|
|
80
|
+
shape.setDocPrId(this.nextId - 1);
|
|
81
|
+
this.drawings.set(id, shape);
|
|
82
|
+
this.shapeIds.add(id);
|
|
83
|
+
return id;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Adds a text box to the manager
|
|
88
|
+
* @param textbox TextBox to add
|
|
89
|
+
* @returns Assigned ID
|
|
90
|
+
*/
|
|
91
|
+
addTextBox(textbox: TextBox): string {
|
|
92
|
+
const id = this.generateId();
|
|
93
|
+
textbox.setDocPrId(this.nextId - 1);
|
|
94
|
+
this.drawings.set(id, textbox);
|
|
95
|
+
this.textboxIds.add(id);
|
|
96
|
+
return id;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Adds a preserved drawing (SmartArt, Chart, WordArt)
|
|
101
|
+
* @param drawing Preserved drawing to add
|
|
102
|
+
* @returns Assigned ID
|
|
103
|
+
*/
|
|
104
|
+
addPreservedDrawing(drawing: PreservedDrawing): string {
|
|
105
|
+
const id = this.generateId();
|
|
106
|
+
this.drawings.set(id, { ...drawing, id });
|
|
107
|
+
this.preservedIds.add(id);
|
|
108
|
+
return id;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Gets a drawing by ID
|
|
113
|
+
* @param id Drawing ID
|
|
114
|
+
* @returns Drawing element or undefined
|
|
115
|
+
*/
|
|
116
|
+
getDrawing(id: string): DrawingElement | PreservedDrawing | undefined {
|
|
117
|
+
return this.drawings.get(id);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Gets all drawings
|
|
122
|
+
* @returns Array of all drawing elements
|
|
123
|
+
*/
|
|
124
|
+
getAllDrawings(): (DrawingElement | PreservedDrawing)[] {
|
|
125
|
+
return Array.from(this.drawings.values());
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Gets all images
|
|
130
|
+
* Performance: O(k) where k = number of images (uses indexed lookup)
|
|
131
|
+
* @returns Array of images
|
|
132
|
+
*/
|
|
133
|
+
getAllImages(): Image[] {
|
|
134
|
+
const images: Image[] = [];
|
|
135
|
+
for (const id of this.imageIds) {
|
|
136
|
+
const drawing = this.drawings.get(id);
|
|
137
|
+
if (drawing instanceof Image) {
|
|
138
|
+
images.push(drawing);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return images;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Gets all shapes
|
|
146
|
+
* Performance: O(k) where k = number of shapes (uses indexed lookup)
|
|
147
|
+
* @returns Array of shapes
|
|
148
|
+
*/
|
|
149
|
+
getAllShapes(): Shape[] {
|
|
150
|
+
const shapes: Shape[] = [];
|
|
151
|
+
for (const id of this.shapeIds) {
|
|
152
|
+
const drawing = this.drawings.get(id);
|
|
153
|
+
if (drawing instanceof Shape) {
|
|
154
|
+
shapes.push(drawing);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return shapes;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Gets all text boxes
|
|
162
|
+
* Performance: O(k) where k = number of text boxes (uses indexed lookup)
|
|
163
|
+
* @returns Array of text boxes
|
|
164
|
+
*/
|
|
165
|
+
getAllTextBoxes(): TextBox[] {
|
|
166
|
+
const textboxes: TextBox[] = [];
|
|
167
|
+
for (const id of this.textboxIds) {
|
|
168
|
+
const drawing = this.drawings.get(id);
|
|
169
|
+
if (drawing instanceof TextBox) {
|
|
170
|
+
textboxes.push(drawing);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return textboxes;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Gets all preserved drawings
|
|
178
|
+
* Performance: O(k) where k = number of preserved drawings (uses indexed lookup)
|
|
179
|
+
* @returns Array of preserved drawings
|
|
180
|
+
*/
|
|
181
|
+
getAllPreservedDrawings(): PreservedDrawing[] {
|
|
182
|
+
const preserved: PreservedDrawing[] = [];
|
|
183
|
+
for (const id of this.preservedIds) {
|
|
184
|
+
const drawing = this.drawings.get(id);
|
|
185
|
+
if (drawing && this.isPreservedDrawing(drawing)) {
|
|
186
|
+
preserved.push(drawing);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return preserved;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Removes a drawing by ID
|
|
194
|
+
* @param id Drawing ID
|
|
195
|
+
* @returns True if removed, false if not found
|
|
196
|
+
*/
|
|
197
|
+
removeDrawing(id: string): boolean {
|
|
198
|
+
const deleted = this.drawings.delete(id);
|
|
199
|
+
if (deleted) {
|
|
200
|
+
// Remove from type-specific indices
|
|
201
|
+
this.imageIds.delete(id);
|
|
202
|
+
this.shapeIds.delete(id);
|
|
203
|
+
this.textboxIds.delete(id);
|
|
204
|
+
this.preservedIds.delete(id);
|
|
205
|
+
}
|
|
206
|
+
return deleted;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Gets the total number of drawings
|
|
211
|
+
* @returns Number of drawings
|
|
212
|
+
*/
|
|
213
|
+
getCount(): number {
|
|
214
|
+
return this.drawings.size;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Checks if the manager has any drawings
|
|
219
|
+
* @returns True if empty, false otherwise
|
|
220
|
+
*/
|
|
221
|
+
isEmpty(): boolean {
|
|
222
|
+
return this.drawings.size === 0;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Clears all drawings
|
|
227
|
+
*/
|
|
228
|
+
clear(): void {
|
|
229
|
+
this.drawings.clear();
|
|
230
|
+
this.imageIds.clear();
|
|
231
|
+
this.shapeIds.clear();
|
|
232
|
+
this.textboxIds.clear();
|
|
233
|
+
this.preservedIds.clear();
|
|
234
|
+
this.nextId = 1;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Gets the drawing type
|
|
239
|
+
* @param drawing Drawing element
|
|
240
|
+
* @returns Drawing type
|
|
241
|
+
*/
|
|
242
|
+
getDrawingType(drawing: DrawingElement | PreservedDrawing): DrawingType {
|
|
243
|
+
if (drawing instanceof Image) {
|
|
244
|
+
return 'image';
|
|
245
|
+
} else if (drawing instanceof Shape) {
|
|
246
|
+
return 'shape';
|
|
247
|
+
} else if (drawing instanceof TextBox) {
|
|
248
|
+
return 'textbox';
|
|
249
|
+
} else {
|
|
250
|
+
return 'preserved';
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Type guard for PreservedDrawing
|
|
256
|
+
* @param drawing Drawing to check
|
|
257
|
+
* @returns True if PreservedDrawing
|
|
258
|
+
*/
|
|
259
|
+
private isPreservedDrawing(drawing: any): drawing is PreservedDrawing {
|
|
260
|
+
return (
|
|
261
|
+
drawing &&
|
|
262
|
+
typeof drawing === 'object' &&
|
|
263
|
+
'type' in drawing &&
|
|
264
|
+
'xml' in drawing &&
|
|
265
|
+
'relationshipIds' in drawing &&
|
|
266
|
+
(drawing.type === 'smartart' || drawing.type === 'chart' || drawing.type === 'wordart')
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Generates a unique ID for a drawing
|
|
272
|
+
* @private
|
|
273
|
+
* @returns Unique ID string
|
|
274
|
+
*/
|
|
275
|
+
private generateId(): string {
|
|
276
|
+
const id = `drawing_${this.nextId}`;
|
|
277
|
+
this.nextId++;
|
|
278
|
+
return id;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Assigns sequential docPr IDs to all drawings
|
|
283
|
+
* Call this before generating the document to ensure unique IDs
|
|
284
|
+
*/
|
|
285
|
+
assignIds(): void {
|
|
286
|
+
let docPrId = 1;
|
|
287
|
+
for (const drawing of this.drawings.values()) {
|
|
288
|
+
if (drawing instanceof Image) {
|
|
289
|
+
drawing.setDocPrId(docPrId++);
|
|
290
|
+
} else if (drawing instanceof Shape) {
|
|
291
|
+
drawing.setDocPrId(docPrId++);
|
|
292
|
+
} else if (drawing instanceof TextBox) {
|
|
293
|
+
drawing.setDocPrId(docPrId++);
|
|
294
|
+
}
|
|
295
|
+
// PreservedDrawings don't need docPrId assignment (already in XML)
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Gets statistics about the drawings
|
|
301
|
+
* Performance: O(1) using indexed Set sizes
|
|
302
|
+
* @returns Statistics object
|
|
303
|
+
*/
|
|
304
|
+
getStats(): {
|
|
305
|
+
total: number;
|
|
306
|
+
images: number;
|
|
307
|
+
shapes: number;
|
|
308
|
+
textboxes: number;
|
|
309
|
+
preserved: number;
|
|
310
|
+
} {
|
|
311
|
+
return {
|
|
312
|
+
total: this.drawings.size,
|
|
313
|
+
images: this.imageIds.size,
|
|
314
|
+
shapes: this.shapeIds.size,
|
|
315
|
+
textboxes: this.textboxIds.size,
|
|
316
|
+
preserved: this.preservedIds.size,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
}
|